Loading arch/x86/kvm/x86.c +20 −0 Original line number Diff line number Diff line Loading @@ -5630,6 +5630,26 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_xen_hvm_config(kvm, &xhc); break; } case KVM_XEN_HVM_GET_ATTR: { struct kvm_xen_hvm_attr xha; r = -EFAULT; if (copy_from_user(&xha, argp, sizeof(xha))) goto out; r = kvm_xen_hvm_get_attr(kvm, &xha); if (!r && copy_to_user(argp, &xha, sizeof(xha))) r = -EFAULT; break; } case KVM_XEN_HVM_SET_ATTR: { struct kvm_xen_hvm_attr xha; r = -EFAULT; if (copy_from_user(&xha, argp, sizeof(xha))) goto out; r = kvm_xen_hvm_set_attr(kvm, &xha); break; } case KVM_SET_CLOCK: { struct kvm_clock_data user_ns; u64 now_ns; Loading arch/x86/kvm/xen.c +30 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,36 @@ DEFINE_STATIC_KEY_DEFERRED_FALSE(kvm_xen_enabled, HZ); int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data) { int r = -ENOENT; mutex_unlock(&kvm->lock); switch (data->type) { default: break; } mutex_unlock(&kvm->lock); return r; } int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data) { int r = -ENOENT; mutex_lock(&kvm->lock); switch (data->type) { default: break; } mutex_unlock(&kvm->lock); return r; } int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data) { struct kvm *kvm = vcpu->kvm; Loading arch/x86/kvm/xen.h +2 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,8 @@ extern struct static_key_false_deferred kvm_xen_enabled; int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data); int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data); 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); Loading include/uapi/linux/kvm.h +11 −0 Original line number Diff line number Diff line Loading @@ -1587,6 +1587,17 @@ struct kvm_pv_cmd { /* Available with KVM_CAP_DIRTY_LOG_RING */ #define KVM_RESET_DIRTY_RINGS _IO(KVMIO, 0xc7) #define KVM_XEN_HVM_GET_ATTR _IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr) #define KVM_XEN_HVM_SET_ATTR _IOW(KVMIO, 0xc9, struct kvm_xen_hvm_attr) struct kvm_xen_hvm_attr { __u16 type; __u16 pad[3]; union { __u64 pad[8]; } u; }; /* Secure Encrypted Virtualization command */ enum sev_cmd_id { /* Guest initialization commands */ Loading Loading
arch/x86/kvm/x86.c +20 −0 Original line number Diff line number Diff line Loading @@ -5630,6 +5630,26 @@ long kvm_arch_vm_ioctl(struct file *filp, r = kvm_xen_hvm_config(kvm, &xhc); break; } case KVM_XEN_HVM_GET_ATTR: { struct kvm_xen_hvm_attr xha; r = -EFAULT; if (copy_from_user(&xha, argp, sizeof(xha))) goto out; r = kvm_xen_hvm_get_attr(kvm, &xha); if (!r && copy_to_user(argp, &xha, sizeof(xha))) r = -EFAULT; break; } case KVM_XEN_HVM_SET_ATTR: { struct kvm_xen_hvm_attr xha; r = -EFAULT; if (copy_from_user(&xha, argp, sizeof(xha))) goto out; r = kvm_xen_hvm_set_attr(kvm, &xha); break; } case KVM_SET_CLOCK: { struct kvm_clock_data user_ns; u64 now_ns; Loading
arch/x86/kvm/xen.c +30 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,36 @@ DEFINE_STATIC_KEY_DEFERRED_FALSE(kvm_xen_enabled, HZ); int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data) { int r = -ENOENT; mutex_unlock(&kvm->lock); switch (data->type) { default: break; } mutex_unlock(&kvm->lock); return r; } int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data) { int r = -ENOENT; mutex_lock(&kvm->lock); switch (data->type) { default: break; } mutex_unlock(&kvm->lock); return r; } int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data) { struct kvm *kvm = vcpu->kvm; Loading
arch/x86/kvm/xen.h +2 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,8 @@ extern struct static_key_false_deferred kvm_xen_enabled; int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data); int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data); 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); Loading
include/uapi/linux/kvm.h +11 −0 Original line number Diff line number Diff line Loading @@ -1587,6 +1587,17 @@ struct kvm_pv_cmd { /* Available with KVM_CAP_DIRTY_LOG_RING */ #define KVM_RESET_DIRTY_RINGS _IO(KVMIO, 0xc7) #define KVM_XEN_HVM_GET_ATTR _IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr) #define KVM_XEN_HVM_SET_ATTR _IOW(KVMIO, 0xc9, struct kvm_xen_hvm_attr) struct kvm_xen_hvm_attr { __u16 type; __u16 pad[3]; union { __u64 pad[8]; } u; }; /* Secure Encrypted Virtualization command */ enum sev_cmd_id { /* Guest initialization commands */ Loading