aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/csource/generated.go
diff options
context:
space:
mode:
authorAlexey Kardashevskiy <aik@linux.ibm.com>2021-07-21 21:36:40 +1000
committerDmitry Vyukov <dvyukov@google.com>2021-09-16 21:37:48 +0200
commit3611c0a0c1166f09038ed05f21dbbec8f2e29834 (patch)
tree2c84d902eb65a119c2d2cfc955316d45041dcbc7 /pkg/csource/generated.go
parentaae492f20ef39f5f5e91c82092156d458f000d3d (diff)
executor/common_kvm_ppc64: enable nested KVM
This is necessary to make KVM actually execute the instructions. Signed-off-by: Alexey Kardashevskiy <aik@linux.ibm.com>
Diffstat (limited to 'pkg/csource/generated.go')
-rw-r--r--pkg/csource/generated.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/pkg/csource/generated.go b/pkg/csource/generated.go
index 0726068e3..5733a9f06 100644
--- a/pkg/csource/generated.go
+++ b/pkg/csource/generated.go
@@ -7319,6 +7319,10 @@ struct kvm_ppc_mmuv3_cfg {
#define KVM_PPC_MMUV3_GTSE 2
#endif
+#ifndef KVM_CAP_PPC_NESTED_HV
+#define KVM_CAP_PPC_NESTED_HV 160
+#endif
+
struct kvm_text {
uintptr_t typ;
const void* text;
@@ -7357,6 +7361,16 @@ static int kvm_vcpu_enable_cap(int cpufd, uint32 capability)
return ioctl(cpufd, KVM_ENABLE_CAP, &cap);
}
+static int kvm_vm_enable_cap(int vmfd, uint32 capability, uint64 p1, uint64 p2)
+{
+ struct kvm_enable_cap cap = {
+ .cap = capability,
+ .flags = 0,
+ .args = {p1, p2},
+ };
+ return ioctl(vmfd, KVM_ENABLE_CAP, &cap);
+}
+
static void dump_text(const char* mem, unsigned start, unsigned cw, uint32 debug_inst_opcode)
{
#ifdef DEBUG
@@ -7402,6 +7416,9 @@ static volatile long syz_kvm_setup_cpu(volatile long a0, volatile long a1, volat
if (kvm_vcpu_enable_cap(cpufd, KVM_CAP_PPC_PAPR))
return -1;
+ if (kvm_vm_enable_cap(vmfd, KVM_CAP_PPC_NESTED_HV, true, 0))
+ return -1;
+
for (uintptr_t i = 0; i < guest_mem_size / page_size; i++) {
struct kvm_userspace_memory_region memreg;
memreg.slot = i;