diff options
author | David Woodhouse <dwmw@amazon.co.uk> | 2021-02-02 16:19:35 +0300 |
---|---|---|
committer | David Woodhouse <dwmw@amazon.co.uk> | 2021-02-04 17:19:38 +0300 |
commit | 78e9878cb376969d184a4b7fff392528fe17a3ce (patch) | |
tree | ddb72b6e09dce019e2e883da15908103f06a626b /arch/x86/kvm/xen.c | |
parent | 79033bebf6fa3045bfa9bbe543c0eb7b43a0f4a3 (diff) | |
download | linux-78e9878cb376969d184a4b7fff392528fe17a3ce.tar.xz |
KVM: x86/xen: Move KVM_XEN_HVM_CONFIG handling to xen.c
This is already more complex than the simple memcpy it originally had.
Move it to xen.c with the rest of the Xen support.
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Diffstat (limited to 'arch/x86/kvm/xen.c')
-rw-r--r-- | arch/x86/kvm/xen.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c index 19bcb2bfba86..b52549fc6dbc 100644 --- a/arch/x86/kvm/xen.c +++ b/arch/x86/kvm/xen.c @@ -79,6 +79,24 @@ int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data) return 0; } +int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc) +{ + if (xhc->flags & ~KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL) + return -EINVAL; + + /* + * With hypercall interception the kernel generates its own + * hypercall page so it must not be provided. + */ + if ((xhc->flags & KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL) && + (xhc->blob_addr_32 || xhc->blob_addr_64 || + xhc->blob_size_32 || xhc->blob_size_64)) + return -EINVAL; + + memcpy(&kvm->arch.xen_hvm_config, xhc, sizeof(*xhc)); + return 0; +} + static int kvm_xen_hypercall_set_result(struct kvm_vcpu *vcpu, u64 result) { kvm_rax_write(vcpu, result); |