Skip to content

Commit 20df737

Browse files
ChangSeokBaeKAGA-KOKO
authored andcommitted
selftests/x86/amx: Update the ARCH_REQ_XCOMP_PERM test
Update the arch_prctl test to check the permission bitmap whether the requested feature is added as expected or not. Every non-dynamic feature that is enabled is permitted already for use. TILECFG is not dynamic feature. Ensure the bit is always on from ARCH_GET_XCOMP_PERM. Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20220129173647.27981-3-chang.seok.bae@intel.com
1 parent 063452f commit 20df737

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

  • tools/testing/selftests/x86

tools/testing/selftests/x86/amx.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,9 +368,16 @@ static void req_xtiledata_perm(void)
368368

369369
static void validate_req_xcomp_perm(enum expected_result exp)
370370
{
371-
unsigned long bitmask;
371+
unsigned long bitmask, expected_bitmask;
372372
long rc;
373373

374+
rc = syscall(SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask);
375+
if (rc) {
376+
fatal_error("prctl(ARCH_GET_XCOMP_PERM) error: %ld", rc);
377+
} else if (!(bitmask & XFEATURE_MASK_XTILECFG)) {
378+
fatal_error("ARCH_GET_XCOMP_PERM returns XFEATURE_XTILECFG off.");
379+
}
380+
374381
rc = syscall(SYS_arch_prctl, ARCH_REQ_XCOMP_PERM, XFEATURE_XTILEDATA);
375382
if (exp == FAIL_EXPECTED) {
376383
if (rc) {
@@ -383,10 +390,15 @@ static void validate_req_xcomp_perm(enum expected_result exp)
383390
fatal_error("ARCH_REQ_XCOMP_PERM saw unexpected failure.\n");
384391
}
385392

393+
expected_bitmask = bitmask | XFEATURE_MASK_XTILEDATA;
394+
386395
rc = syscall(SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask);
387396
if (rc) {
388397
fatal_error("prctl(ARCH_GET_XCOMP_PERM) error: %ld", rc);
389-
} else if (bitmask & XFEATURE_MASK_XTILE) {
398+
} else if (bitmask != expected_bitmask) {
399+
fatal_error("ARCH_REQ_XCOMP_PERM set a wrong bitmask: %lx, expected: %lx.\n",
400+
bitmask, expected_bitmask);
401+
} else {
390402
printf("\tARCH_REQ_XCOMP_PERM is successful.\n");
391403
}
392404
}

0 commit comments

Comments
 (0)