Skip to content

Commit 28f2302

Browse files
suomilewissean-jc
authored andcommitted
KVM: selftests: Add all known XFEATURE masks to common code
Add all known XFEATURE masks to processor.h to make them more broadly available in KVM selftests. Relocate and clean up the exiting AMX (XTILE) defines in processor.h, e.g. drop the intermediate define and use BIT_ULL. Signed-off-by: Aaron Lewis <aaronlewis@google.com> Reviewed-by: Aaron Lewis <aaronlewis@google.com> Tested-by: Aaron Lewis <aaronlewis@google.com> Link: https://lore.kernel.org/r/20230405004520.421768-6-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent 7040e54 commit 28f2302

2 files changed

Lines changed: 33 additions & 30 deletions

File tree

tools/testing/selftests/kvm/include/x86_64/processor.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,23 @@ struct xstate {
6060
u8 extended_state_area[0];
6161
} __attribute__ ((packed, aligned (64)));
6262

63+
#define XFEATURE_MASK_FP BIT_ULL(0)
64+
#define XFEATURE_MASK_SSE BIT_ULL(1)
65+
#define XFEATURE_MASK_YMM BIT_ULL(2)
66+
#define XFEATURE_MASK_BNDREGS BIT_ULL(3)
67+
#define XFEATURE_MASK_BNDCSR BIT_ULL(4)
68+
#define XFEATURE_MASK_OPMASK BIT_ULL(5)
69+
#define XFEATURE_MASK_ZMM_Hi256 BIT_ULL(6)
70+
#define XFEATURE_MASK_Hi16_ZMM BIT_ULL(7)
71+
#define XFEATURE_MASK_XTILE_CFG BIT_ULL(17)
72+
#define XFEATURE_MASK_XTILE_DATA BIT_ULL(18)
73+
74+
#define XFEATURE_MASK_AVX512 (XFEATURE_MASK_OPMASK | \
75+
XFEATURE_MASK_ZMM_Hi256 | \
76+
XFEATURE_MASK_Hi16_ZMM)
77+
#define XFEATURE_MASK_XTILE (XFEATURE_MASK_XTILE_DATA | \
78+
XFEATURE_MASK_XTILE_CFG)
79+
6380
/* Note, these are ordered alphabetically to match kvm_cpuid_entry2. Eww. */
6481
enum cpuid_output_regs {
6582
KVM_CPUID_EAX,
@@ -1138,14 +1155,6 @@ void virt_map_level(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr,
11381155
#define X86_CR0_CD (1UL<<30) /* Cache Disable */
11391156
#define X86_CR0_PG (1UL<<31) /* Paging */
11401157

1141-
#define XSTATE_XTILE_CFG_BIT 17
1142-
#define XSTATE_XTILE_DATA_BIT 18
1143-
1144-
#define XSTATE_XTILE_CFG_MASK (1ULL << XSTATE_XTILE_CFG_BIT)
1145-
#define XSTATE_XTILE_DATA_MASK (1ULL << XSTATE_XTILE_DATA_BIT)
1146-
#define XFEATURE_XTILE_MASK (XSTATE_XTILE_CFG_MASK | \
1147-
XSTATE_XTILE_DATA_MASK)
1148-
11491158
#define PFERR_PRESENT_BIT 0
11501159
#define PFERR_WRITE_BIT 1
11511160
#define PFERR_USER_BIT 2

tools/testing/selftests/kvm/x86_64/amx_test.c

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,6 @@
3434
#define MAX_TILES 16
3535
#define RESERVED_BYTES 14
3636

37-
#define XFEATURE_XTILECFG 17
38-
#define XFEATURE_XTILEDATA 18
39-
#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
40-
#define XFEATURE_MASK_XTILEDATA (1 << XFEATURE_XTILEDATA)
41-
#define XFEATURE_MASK_XTILE (XFEATURE_MASK_XTILECFG | XFEATURE_MASK_XTILEDATA)
42-
4337
#define XSAVE_HDR_OFFSET 512
4438

4539
struct tile_config {
@@ -172,25 +166,25 @@ static void __attribute__((__flatten__)) guest_code(struct tile_config *amx_cfg,
172166
* After XSAVEC, XTILEDATA is cleared in the xstate_bv but is set in
173167
* the xcomp_bv.
174168
*/
175-
xstate->header.xstate_bv = XFEATURE_MASK_XTILEDATA;
176-
__xsavec(xstate, XFEATURE_MASK_XTILEDATA);
177-
GUEST_ASSERT(!(xstate->header.xstate_bv & XFEATURE_MASK_XTILEDATA));
178-
GUEST_ASSERT(xstate->header.xcomp_bv & XFEATURE_MASK_XTILEDATA);
169+
xstate->header.xstate_bv = XFEATURE_MASK_XTILE_DATA;
170+
__xsavec(xstate, XFEATURE_MASK_XTILE_DATA);
171+
GUEST_ASSERT(!(xstate->header.xstate_bv & XFEATURE_MASK_XTILE_DATA));
172+
GUEST_ASSERT(xstate->header.xcomp_bv & XFEATURE_MASK_XTILE_DATA);
179173

180174
/* xfd=0x40000, disable amx tiledata */
181-
wrmsr(MSR_IA32_XFD, XFEATURE_MASK_XTILEDATA);
175+
wrmsr(MSR_IA32_XFD, XFEATURE_MASK_XTILE_DATA);
182176

183177
/*
184178
* XTILEDATA is cleared in xstate_bv but set in xcomp_bv, this property
185179
* remains the same even when amx tiledata is disabled by IA32_XFD.
186180
*/
187-
xstate->header.xstate_bv = XFEATURE_MASK_XTILEDATA;
188-
__xsavec(xstate, XFEATURE_MASK_XTILEDATA);
189-
GUEST_ASSERT(!(xstate->header.xstate_bv & XFEATURE_MASK_XTILEDATA));
190-
GUEST_ASSERT((xstate->header.xcomp_bv & XFEATURE_MASK_XTILEDATA));
181+
xstate->header.xstate_bv = XFEATURE_MASK_XTILE_DATA;
182+
__xsavec(xstate, XFEATURE_MASK_XTILE_DATA);
183+
GUEST_ASSERT(!(xstate->header.xstate_bv & XFEATURE_MASK_XTILE_DATA));
184+
GUEST_ASSERT((xstate->header.xcomp_bv & XFEATURE_MASK_XTILE_DATA));
191185

192186
GUEST_SYNC(6);
193-
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILEDATA);
187+
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILE_DATA);
194188
set_tilecfg(amx_cfg);
195189
__ldtilecfg(amx_cfg);
196190
/* Trigger #NM exception */
@@ -202,14 +196,14 @@ static void __attribute__((__flatten__)) guest_code(struct tile_config *amx_cfg,
202196

203197
void guest_nm_handler(struct ex_regs *regs)
204198
{
205-
/* Check if #NM is triggered by XFEATURE_MASK_XTILEDATA */
199+
/* Check if #NM is triggered by XFEATURE_MASK_XTILE_DATA */
206200
GUEST_SYNC(7);
207201
GUEST_ASSERT(!(get_cr0() & X86_CR0_TS));
208-
GUEST_ASSERT(rdmsr(MSR_IA32_XFD_ERR) == XFEATURE_MASK_XTILEDATA);
209-
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILEDATA);
202+
GUEST_ASSERT(rdmsr(MSR_IA32_XFD_ERR) == XFEATURE_MASK_XTILE_DATA);
203+
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILE_DATA);
210204
GUEST_SYNC(8);
211-
GUEST_ASSERT(rdmsr(MSR_IA32_XFD_ERR) == XFEATURE_MASK_XTILEDATA);
212-
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILEDATA);
205+
GUEST_ASSERT(rdmsr(MSR_IA32_XFD_ERR) == XFEATURE_MASK_XTILE_DATA);
206+
GUEST_ASSERT(rdmsr(MSR_IA32_XFD) == XFEATURE_MASK_XTILE_DATA);
213207
/* Clear xfd_err */
214208
wrmsr(MSR_IA32_XFD_ERR, 0);
215209
/* xfd=0, enable amx */
@@ -233,7 +227,7 @@ int main(int argc, char *argv[])
233227
* Note, all off-by-default features must be enabled before anything
234228
* caches KVM_GET_SUPPORTED_CPUID, e.g. before using kvm_cpu_has().
235229
*/
236-
vm_xsave_require_permission(XFEATURE_MASK_XTILEDATA);
230+
vm_xsave_require_permission(XFEATURE_MASK_XTILE_DATA);
237231

238232
TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_XFD));
239233
TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_XSAVE));

0 commit comments

Comments
 (0)