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>
This commit is contained in:
parent
79033bebf6
commit
78e9878cb3
@ -5627,19 +5627,7 @@ set_pit2_out:
|
||||
r = -EFAULT;
|
||||
if (copy_from_user(&xhc, argp, sizeof(xhc)))
|
||||
goto out;
|
||||
r = -EINVAL;
|
||||
if (xhc.flags & ~KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL)
|
||||
goto out;
|
||||
/*
|
||||
* 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))
|
||||
goto out;
|
||||
memcpy(&kvm->arch.xen_hvm_config, &xhc, sizeof(xhc));
|
||||
r = 0;
|
||||
r = kvm_xen_hvm_config(kvm, &xhc);
|
||||
break;
|
||||
}
|
||||
case KVM_SET_CLOCK: {
|
||||
|
@ -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);
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
int kvm_xen_hypercall(struct kvm_vcpu *vcpu);
|
||||
int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data);
|
||||
int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc);
|
||||
|
||||
static inline bool kvm_xen_hypercall_enabled(struct kvm *kvm)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user