235 lines
6.6 KiB
Diff
235 lines
6.6 KiB
Diff
|
|
From e38143b00e8b03462ec66c8d0bd6f9413f10656d Mon Sep 17 00:00:00 2001
|
||
|
|
From: Pierre Marsais <pierre.marsais@lse.epita.fr>
|
||
|
|
Date: Thu, 16 Aug 2018 20:04:41 +0100
|
||
|
|
Subject: [PATCH 004/293] kvm: decode the argument of KVM_CHECK_EXTENSION
|
||
|
|
|
||
|
|
xlat/kvm_cap.in has been generated using the following command line:
|
||
|
|
|
||
|
|
grep '#define\s\+KVM_CAP' $linux/include/uapi/linux/kvm.h |
|
||
|
|
sed -E -e 's/^#define\s+([^ \t]+)\s*([0-9]+).*$/printf "%-40s%s\n" \1 \2/e' \
|
||
|
|
-e 's/ {8}/\t/g; s/ +/\t/g'
|
||
|
|
|
||
|
|
* xlat/kvm_cap.in: New file.
|
||
|
|
* kvm.c: Include "xlat/kvm_cap.h".
|
||
|
|
(kvm_ioctl_decode_check_extension): New function.
|
||
|
|
(kvm_ioctl): Use it.
|
||
|
|
* tests/ioctl_kvm_run_common.c (main): Check decoding
|
||
|
|
of KVM_CHECK_EXTENSION command.
|
||
|
|
|
||
|
|
Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
|
||
|
|
---
|
||
|
|
kvm.c | 13 ++++
|
||
|
|
tests/ioctl_kvm_run_common.c | 5 ++
|
||
|
|
xlat/kvm_cap.in | 152 +++++++++++++++++++++++++++++++++++++++++++
|
||
|
|
3 files changed, 170 insertions(+)
|
||
|
|
create mode 100644 xlat/kvm_cap.in
|
||
|
|
|
||
|
|
diff --git a/kvm.c b/kvm.c
|
||
|
|
index c284e83..36c6404 100644
|
||
|
|
--- a/kvm.c
|
||
|
|
+++ b/kvm.c
|
||
|
|
@@ -323,6 +323,16 @@ kvm_ioctl_decode_sregs(struct tcb *const tcp, const unsigned int code,
|
||
|
|
}
|
||
|
|
# endif /* HAVE_STRUCT_KVM_SREGS */
|
||
|
|
|
||
|
|
+# include "xlat/kvm_cap.h"
|
||
|
|
+static int
|
||
|
|
+kvm_ioctl_decode_check_extension(struct tcb *const tcp, const unsigned int code,
|
||
|
|
+ const kernel_ulong_t arg)
|
||
|
|
+{
|
||
|
|
+ tprints(", ");
|
||
|
|
+ printxval_index(kvm_cap, arg, "KVM_CAP_???");
|
||
|
|
+ return RVAL_IOCTL_DECODED;
|
||
|
|
+}
|
||
|
|
+
|
||
|
|
# include "xlat/kvm_exit_reason.h"
|
||
|
|
static void
|
||
|
|
kvm_ioctl_run_attach_auxstr(struct tcb *const tcp,
|
||
|
|
@@ -403,6 +413,9 @@ kvm_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t a
|
||
|
|
return kvm_ioctl_decode_cpuid2(tcp, code, arg);
|
||
|
|
# endif
|
||
|
|
|
||
|
|
+ case KVM_CHECK_EXTENSION:
|
||
|
|
+ return kvm_ioctl_decode_check_extension(tcp, code, arg);
|
||
|
|
+
|
||
|
|
case KVM_CREATE_VM:
|
||
|
|
return RVAL_DECODED | RVAL_FD;
|
||
|
|
|
||
|
|
diff --git a/tests/ioctl_kvm_run_common.c b/tests/ioctl_kvm_run_common.c
|
||
|
|
index 522935a..2e7eda4 100644
|
||
|
|
--- a/tests/ioctl_kvm_run_common.c
|
||
|
|
+++ b/tests/ioctl_kvm_run_common.c
|
||
|
|
@@ -306,6 +306,11 @@ main(void)
|
||
|
|
printf("ioctl(%d<%s>, KVM_GET_API_VERSION, 0) = %d\n",
|
||
|
|
kvm, dev, ret);
|
||
|
|
|
||
|
|
+ ret = KVM_IOCTL(kvm, KVM_CHECK_EXTENSION,
|
||
|
|
+ (void *) (uintptr_t) KVM_CAP_USER_MEMORY);
|
||
|
|
+ printf("ioctl(%d<%s>, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY) = %d\n",
|
||
|
|
+ kvm, dev, ret);
|
||
|
|
+
|
||
|
|
int vm_fd = KVM_IOCTL(kvm, KVM_CREATE_VM, 0);
|
||
|
|
printf("ioctl(%d<%s>, KVM_CREATE_VM, 0) = %d<%s>\n",
|
||
|
|
kvm, dev, vm_fd, vm_dev);
|
||
|
|
diff --git a/xlat/kvm_cap.in b/xlat/kvm_cap.in
|
||
|
|
new file mode 100644
|
||
|
|
index 0000000..a3819e7
|
||
|
|
--- /dev/null
|
||
|
|
+++ b/xlat/kvm_cap.in
|
||
|
|
@@ -0,0 +1,152 @@
|
||
|
|
+#value_indexed
|
||
|
|
+KVM_CAP_IRQCHIP 0
|
||
|
|
+KVM_CAP_HLT 1
|
||
|
|
+KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
|
||
|
|
+KVM_CAP_USER_MEMORY 3
|
||
|
|
+KVM_CAP_SET_TSS_ADDR 4
|
||
|
|
+KVM_CAP_VAPIC 6
|
||
|
|
+KVM_CAP_EXT_CPUID 7
|
||
|
|
+KVM_CAP_CLOCKSOURCE 8
|
||
|
|
+KVM_CAP_NR_VCPUS 9
|
||
|
|
+KVM_CAP_NR_MEMSLOTS 10
|
||
|
|
+KVM_CAP_PIT 11
|
||
|
|
+KVM_CAP_NOP_IO_DELAY 12
|
||
|
|
+KVM_CAP_PV_MMU 13
|
||
|
|
+KVM_CAP_MP_STATE 14
|
||
|
|
+KVM_CAP_COALESCED_MMIO 15
|
||
|
|
+KVM_CAP_SYNC_MMU 16
|
||
|
|
+KVM_CAP_IOMMU 18
|
||
|
|
+KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
|
||
|
|
+KVM_CAP_USER_NMI 22
|
||
|
|
+KVM_CAP_SET_GUEST_DEBUG 23
|
||
|
|
+KVM_CAP_REINJECT_CONTROL 24
|
||
|
|
+KVM_CAP_IRQ_ROUTING 25
|
||
|
|
+KVM_CAP_IRQ_INJECT_STATUS 26
|
||
|
|
+KVM_CAP_ASSIGN_DEV_IRQ 29
|
||
|
|
+KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
|
||
|
|
+KVM_CAP_MCE 31
|
||
|
|
+KVM_CAP_IRQFD 32
|
||
|
|
+KVM_CAP_PIT2 33
|
||
|
|
+KVM_CAP_SET_BOOT_CPU_ID 34
|
||
|
|
+KVM_CAP_PIT_STATE2 35
|
||
|
|
+KVM_CAP_IOEVENTFD 36
|
||
|
|
+KVM_CAP_SET_IDENTITY_MAP_ADDR 37
|
||
|
|
+KVM_CAP_XEN_HVM 38
|
||
|
|
+KVM_CAP_ADJUST_CLOCK 39
|
||
|
|
+KVM_CAP_INTERNAL_ERROR_DATA 40
|
||
|
|
+KVM_CAP_VCPU_EVENTS 41
|
||
|
|
+KVM_CAP_S390_PSW 42
|
||
|
|
+KVM_CAP_PPC_SEGSTATE 43
|
||
|
|
+KVM_CAP_HYPERV 44
|
||
|
|
+KVM_CAP_HYPERV_VAPIC 45
|
||
|
|
+KVM_CAP_HYPERV_SPIN 46
|
||
|
|
+KVM_CAP_PCI_SEGMENT 47
|
||
|
|
+KVM_CAP_PPC_PAIRED_SINGLES 48
|
||
|
|
+KVM_CAP_INTR_SHADOW 49
|
||
|
|
+KVM_CAP_DEBUGREGS 50
|
||
|
|
+KVM_CAP_X86_ROBUST_SINGLESTEP 51
|
||
|
|
+KVM_CAP_PPC_OSI 52
|
||
|
|
+KVM_CAP_PPC_UNSET_IRQ 53
|
||
|
|
+KVM_CAP_ENABLE_CAP 54
|
||
|
|
+KVM_CAP_XSAVE 55
|
||
|
|
+KVM_CAP_XCRS 56
|
||
|
|
+KVM_CAP_PPC_GET_PVINFO 57
|
||
|
|
+KVM_CAP_PPC_IRQ_LEVEL 58
|
||
|
|
+KVM_CAP_ASYNC_PF 59
|
||
|
|
+KVM_CAP_TSC_CONTROL 60
|
||
|
|
+KVM_CAP_GET_TSC_KHZ 61
|
||
|
|
+KVM_CAP_PPC_BOOKE_SREGS 62
|
||
|
|
+KVM_CAP_SPAPR_TCE 63
|
||
|
|
+KVM_CAP_PPC_SMT 64
|
||
|
|
+KVM_CAP_PPC_RMA 65
|
||
|
|
+KVM_CAP_MAX_VCPUS 66
|
||
|
|
+KVM_CAP_PPC_HIOR 67
|
||
|
|
+KVM_CAP_PPC_PAPR 68
|
||
|
|
+KVM_CAP_SW_TLB 69
|
||
|
|
+KVM_CAP_ONE_REG 70
|
||
|
|
+KVM_CAP_S390_GMAP 71
|
||
|
|
+KVM_CAP_TSC_DEADLINE_TIMER 72
|
||
|
|
+KVM_CAP_S390_UCONTROL 73
|
||
|
|
+KVM_CAP_SYNC_REGS 74
|
||
|
|
+KVM_CAP_PCI_2_3 75
|
||
|
|
+KVM_CAP_KVMCLOCK_CTRL 76
|
||
|
|
+KVM_CAP_SIGNAL_MSI 77
|
||
|
|
+KVM_CAP_PPC_GET_SMMU_INFO 78
|
||
|
|
+KVM_CAP_S390_COW 79
|
||
|
|
+KVM_CAP_PPC_ALLOC_HTAB 80
|
||
|
|
+KVM_CAP_READONLY_MEM 81
|
||
|
|
+KVM_CAP_IRQFD_RESAMPLE 82
|
||
|
|
+KVM_CAP_PPC_BOOKE_WATCHDOG 83
|
||
|
|
+KVM_CAP_PPC_HTAB_FD 84
|
||
|
|
+KVM_CAP_S390_CSS_SUPPORT 85
|
||
|
|
+KVM_CAP_PPC_EPR 86
|
||
|
|
+KVM_CAP_ARM_PSCI 87
|
||
|
|
+KVM_CAP_ARM_SET_DEVICE_ADDR 88
|
||
|
|
+KVM_CAP_DEVICE_CTRL 89
|
||
|
|
+KVM_CAP_IRQ_MPIC 90
|
||
|
|
+KVM_CAP_PPC_RTAS 91
|
||
|
|
+KVM_CAP_IRQ_XICS 92
|
||
|
|
+KVM_CAP_ARM_EL1_32BIT 93
|
||
|
|
+KVM_CAP_SPAPR_MULTITCE 94
|
||
|
|
+KVM_CAP_EXT_EMUL_CPUID 95
|
||
|
|
+KVM_CAP_HYPERV_TIME 96
|
||
|
|
+KVM_CAP_IOAPIC_POLARITY_IGNORED 97
|
||
|
|
+KVM_CAP_ENABLE_CAP_VM 98
|
||
|
|
+KVM_CAP_S390_IRQCHIP 99
|
||
|
|
+KVM_CAP_IOEVENTFD_NO_LENGTH 100
|
||
|
|
+KVM_CAP_VM_ATTRIBUTES 101
|
||
|
|
+KVM_CAP_ARM_PSCI_0_2 102
|
||
|
|
+KVM_CAP_PPC_FIXUP_HCALL 103
|
||
|
|
+KVM_CAP_PPC_ENABLE_HCALL 104
|
||
|
|
+KVM_CAP_CHECK_EXTENSION_VM 105
|
||
|
|
+KVM_CAP_S390_USER_SIGP 106
|
||
|
|
+KVM_CAP_S390_VECTOR_REGISTERS 107
|
||
|
|
+KVM_CAP_S390_MEM_OP 108
|
||
|
|
+KVM_CAP_S390_USER_STSI 109
|
||
|
|
+KVM_CAP_S390_SKEYS 110
|
||
|
|
+KVM_CAP_MIPS_FPU 111
|
||
|
|
+KVM_CAP_MIPS_MSA 112
|
||
|
|
+KVM_CAP_S390_INJECT_IRQ 113
|
||
|
|
+KVM_CAP_S390_IRQ_STATE 114
|
||
|
|
+KVM_CAP_PPC_HWRNG 115
|
||
|
|
+KVM_CAP_DISABLE_QUIRKS 116
|
||
|
|
+KVM_CAP_X86_SMM 117
|
||
|
|
+KVM_CAP_MULTI_ADDRESS_SPACE 118
|
||
|
|
+KVM_CAP_GUEST_DEBUG_HW_BPS 119
|
||
|
|
+KVM_CAP_GUEST_DEBUG_HW_WPS 120
|
||
|
|
+KVM_CAP_SPLIT_IRQCHIP 121
|
||
|
|
+KVM_CAP_IOEVENTFD_ANY_LENGTH 122
|
||
|
|
+KVM_CAP_HYPERV_SYNIC 123
|
||
|
|
+KVM_CAP_S390_RI 124
|
||
|
|
+KVM_CAP_SPAPR_TCE_64 125
|
||
|
|
+KVM_CAP_ARM_PMU_V3 126
|
||
|
|
+KVM_CAP_VCPU_ATTRIBUTES 127
|
||
|
|
+KVM_CAP_MAX_VCPU_ID 128
|
||
|
|
+KVM_CAP_X2APIC_API 129
|
||
|
|
+KVM_CAP_S390_USER_INSTR0 130
|
||
|
|
+KVM_CAP_MSI_DEVID 131
|
||
|
|
+KVM_CAP_PPC_HTM 132
|
||
|
|
+KVM_CAP_SPAPR_RESIZE_HPT 133
|
||
|
|
+KVM_CAP_PPC_MMU_RADIX 134
|
||
|
|
+KVM_CAP_PPC_MMU_HASH_V3 135
|
||
|
|
+KVM_CAP_IMMEDIATE_EXIT 136
|
||
|
|
+KVM_CAP_MIPS_VZ 137
|
||
|
|
+KVM_CAP_MIPS_TE 138
|
||
|
|
+KVM_CAP_MIPS_64BIT 139
|
||
|
|
+KVM_CAP_S390_GS 140
|
||
|
|
+KVM_CAP_S390_AIS 141
|
||
|
|
+KVM_CAP_SPAPR_TCE_VFIO 142
|
||
|
|
+KVM_CAP_X86_DISABLE_EXITS 143
|
||
|
|
+KVM_CAP_ARM_USER_IRQ 144
|
||
|
|
+KVM_CAP_S390_CMMA_MIGRATION 145
|
||
|
|
+KVM_CAP_PPC_FWNMI 146
|
||
|
|
+KVM_CAP_PPC_SMT_POSSIBLE 147
|
||
|
|
+KVM_CAP_HYPERV_SYNIC2 148
|
||
|
|
+KVM_CAP_HYPERV_VP_INDEX 149
|
||
|
|
+KVM_CAP_S390_AIS_MIGRATION 150
|
||
|
|
+KVM_CAP_PPC_GET_CPU_CHAR 151
|
||
|
|
+KVM_CAP_S390_BPB 152
|
||
|
|
+KVM_CAP_GET_MSR_FEATURES 153
|
||
|
|
+KVM_CAP_HYPERV_EVENTFD 154
|
||
|
|
+KVM_CAP_HYPERV_TLBFLUSH 155
|
||
|
|
+KVM_CAP_S390_HPAGE_1M 156
|
||
|
|
--
|
||
|
|
1.7.12.4
|
||
|
|
|