Skip to content

Commit b19c99b

Browse files
committed
selftests: kvm: check dynamic bits against KVM_X86_XCOMP_GUEST_SUPP
Provide coverage for the new API. Signed-off-by: Paolo Bonzini <[email protected]>
1 parent dd6e631 commit b19c99b

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

tools/arch/x86/include/uapi/asm/kvm.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@ struct kvm_sync_regs {
452452

453453
#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001
454454

455+
/* attributes for system fd (group 0) */
456+
#define KVM_X86_XCOMP_GUEST_SUPP 0
457+
455458
struct kvm_vmx_nested_state_data {
456459
__u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
457460
__u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];

tools/include/uapi/linux/kvm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,7 @@ struct kvm_ppc_resize_hpt {
11331133
#define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
11341134
#define KVM_CAP_VM_GPA_BITS 207
11351135
#define KVM_CAP_XSAVE2 208
1136+
#define KVM_CAP_SYS_ATTRIBUTES 209
11361137

11371138
#ifdef KVM_CAP_IRQ_ROUTING
11381139

tools/testing/selftests/kvm/lib/x86_64/processor.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,8 +667,23 @@ static bool is_xfd_supported(void)
667667

668668
void vm_xsave_req_perm(int bit)
669669
{
670+
int kvm_fd;
670671
u64 bitmask;
671672
long rc;
673+
struct kvm_device_attr attr = {
674+
.group = 0,
675+
.attr = KVM_X86_XCOMP_GUEST_SUPP,
676+
.addr = (unsigned long) &bitmask
677+
};
678+
679+
kvm_fd = open_kvm_dev_path_or_exit();
680+
rc = ioctl(kvm_fd, KVM_GET_DEVICE_ATTR, &attr);
681+
close(kvm_fd);
682+
if (rc == -1 && (errno == ENXIO || errno == EINVAL))
683+
exit(KSFT_SKIP);
684+
TEST_ASSERT(rc == 0, "KVM_GET_DEVICE_ATTR(0, KVM_X86_XCOMP_GUEST_SUPP) error: %ld", rc);
685+
if (!(bitmask & (1ULL << bit)))
686+
exit(KSFT_SKIP);
672687

673688
if (!is_xfd_supported())
674689
exit(KSFT_SKIP);

0 commit comments

Comments
 (0)