Skip to content

Commit b0305c1

Browse files
dwmw2bonzini
authored andcommitted
KVM: x86/xen: Add KVM_XEN_INVALID_GPA and KVM_XEN_INVALID_GFN to uapi
These are (uint64_t)-1 magic values are a userspace ABI, allowing the shared info pages and other enlightenments to be disabled. This isn't a Xen ABI because Xen doesn't let the guest turn these off except with the full SHUTDOWN_soft_reset mechanism. Under KVM, the userspace VMM is expected to handle soft reset, and tear down the kernel parts of the enlightenments accordingly. Suggested-by: Sean Christopherson <[email protected]> Signed-off-by: David Woodhouse <[email protected]> Message-Id: <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 1c14faa commit b0305c1

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

arch/x86/kvm/xen.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ static int kvm_xen_shared_info_init(struct kvm *kvm, gfn_t gfn)
4141
int ret = 0;
4242
int idx = srcu_read_lock(&kvm->srcu);
4343

44-
if (gfn == GPA_INVALID) {
44+
if (gfn == KVM_XEN_INVALID_GFN) {
4545
kvm_gpc_deactivate(gpc);
4646
goto out;
4747
}
@@ -659,7 +659,7 @@ int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
659659
if (kvm->arch.xen.shinfo_cache.active)
660660
data->u.shared_info.gfn = gpa_to_gfn(kvm->arch.xen.shinfo_cache.gpa);
661661
else
662-
data->u.shared_info.gfn = GPA_INVALID;
662+
data->u.shared_info.gfn = KVM_XEN_INVALID_GFN;
663663
r = 0;
664664
break;
665665

@@ -705,7 +705,7 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
705705
BUILD_BUG_ON(offsetof(struct vcpu_info, time) !=
706706
offsetof(struct compat_vcpu_info, time));
707707

708-
if (data->u.gpa == GPA_INVALID) {
708+
if (data->u.gpa == KVM_XEN_INVALID_GPA) {
709709
kvm_gpc_deactivate(&vcpu->arch.xen.vcpu_info_cache);
710710
r = 0;
711711
break;
@@ -719,7 +719,7 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
719719
break;
720720

721721
case KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO:
722-
if (data->u.gpa == GPA_INVALID) {
722+
if (data->u.gpa == KVM_XEN_INVALID_GPA) {
723723
kvm_gpc_deactivate(&vcpu->arch.xen.vcpu_time_info_cache);
724724
r = 0;
725725
break;
@@ -739,7 +739,7 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
739739
r = -EOPNOTSUPP;
740740
break;
741741
}
742-
if (data->u.gpa == GPA_INVALID) {
742+
if (data->u.gpa == KVM_XEN_INVALID_GPA) {
743743
r = 0;
744744
deactivate_out:
745745
kvm_gpc_deactivate(&vcpu->arch.xen.runstate_cache);
@@ -937,15 +937,15 @@ int kvm_xen_vcpu_get_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
937937
if (vcpu->arch.xen.vcpu_info_cache.active)
938938
data->u.gpa = vcpu->arch.xen.vcpu_info_cache.gpa;
939939
else
940-
data->u.gpa = GPA_INVALID;
940+
data->u.gpa = KVM_XEN_INVALID_GPA;
941941
r = 0;
942942
break;
943943

944944
case KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO:
945945
if (vcpu->arch.xen.vcpu_time_info_cache.active)
946946
data->u.gpa = vcpu->arch.xen.vcpu_time_info_cache.gpa;
947947
else
948-
data->u.gpa = GPA_INVALID;
948+
data->u.gpa = KVM_XEN_INVALID_GPA;
949949
r = 0;
950950
break;
951951

include/uapi/linux/kvm.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1767,6 +1767,7 @@ struct kvm_xen_hvm_attr {
17671767
__u8 runstate_update_flag;
17681768
struct {
17691769
__u64 gfn;
1770+
#define KVM_XEN_INVALID_GFN ((__u64)-1)
17701771
} shared_info;
17711772
struct {
17721773
__u32 send_port;
@@ -1798,6 +1799,7 @@ struct kvm_xen_hvm_attr {
17981799
} u;
17991800
};
18001801

1802+
18011803
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */
18021804
#define KVM_XEN_ATTR_TYPE_LONG_MODE 0x0
18031805
#define KVM_XEN_ATTR_TYPE_SHARED_INFO 0x1
@@ -1823,6 +1825,7 @@ struct kvm_xen_vcpu_attr {
18231825
__u16 pad[3];
18241826
union {
18251827
__u64 gpa;
1828+
#define KVM_XEN_INVALID_GPA ((__u64)-1)
18261829
__u64 pad[8];
18271830
struct {
18281831
__u64 state;

0 commit comments

Comments
 (0)