KVM: s390: Replace KVM_REQ_MMU_RELOAD usage with arch specific request
Add an arch request, KVM_REQ_REFRESH_GUEST_PREFIX, to deal with guest prefix changes instead of piggybacking KVM_REQ_MMU_RELOAD. This will allow for the removal of the generic KVM_REQ_MMU_RELOAD, which isn't actually used by generic KVM. No functional change intended. Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: Janosch Frank <frankja@linux.ibm.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20220225182248.3812651-6-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
527d5cd7ee
commit
cc65c3a110
@ -45,6 +45,8 @@
|
|||||||
#define KVM_REQ_START_MIGRATION KVM_ARCH_REQ(3)
|
#define KVM_REQ_START_MIGRATION KVM_ARCH_REQ(3)
|
||||||
#define KVM_REQ_STOP_MIGRATION KVM_ARCH_REQ(4)
|
#define KVM_REQ_STOP_MIGRATION KVM_ARCH_REQ(4)
|
||||||
#define KVM_REQ_VSIE_RESTART KVM_ARCH_REQ(5)
|
#define KVM_REQ_VSIE_RESTART KVM_ARCH_REQ(5)
|
||||||
|
#define KVM_REQ_REFRESH_GUEST_PREFIX \
|
||||||
|
KVM_ARCH_REQ_FLAGS(6, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
|
||||||
|
|
||||||
#define SIGP_CTRL_C 0x80
|
#define SIGP_CTRL_C 0x80
|
||||||
#define SIGP_CTRL_SCN_MASK 0x3f
|
#define SIGP_CTRL_SCN_MASK 0x3f
|
||||||
|
@ -3481,7 +3481,7 @@ static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
|
|||||||
if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
|
if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
|
||||||
VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
|
VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
|
||||||
start, end);
|
start, end);
|
||||||
kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu);
|
kvm_s390_sync_request(KVM_REQ_REFRESH_GUEST_PREFIX, vcpu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3883,19 +3883,19 @@ retry:
|
|||||||
if (!kvm_request_pending(vcpu))
|
if (!kvm_request_pending(vcpu))
|
||||||
return 0;
|
return 0;
|
||||||
/*
|
/*
|
||||||
* We use MMU_RELOAD just to re-arm the ipte notifier for the
|
* If the guest prefix changed, re-arm the ipte notifier for the
|
||||||
* guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
|
* guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
|
||||||
* This ensures that the ipte instruction for this request has
|
* This ensures that the ipte instruction for this request has
|
||||||
* already finished. We might race against a second unmapper that
|
* already finished. We might race against a second unmapper that
|
||||||
* wants to set the blocking bit. Lets just retry the request loop.
|
* wants to set the blocking bit. Lets just retry the request loop.
|
||||||
*/
|
*/
|
||||||
if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
|
if (kvm_check_request(KVM_REQ_REFRESH_GUEST_PREFIX, vcpu)) {
|
||||||
int rc;
|
int rc;
|
||||||
rc = gmap_mprotect_notify(vcpu->arch.gmap,
|
rc = gmap_mprotect_notify(vcpu->arch.gmap,
|
||||||
kvm_s390_get_prefix(vcpu),
|
kvm_s390_get_prefix(vcpu),
|
||||||
PAGE_SIZE * 2, PROT_WRITE);
|
PAGE_SIZE * 2, PROT_WRITE);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
|
kvm_make_request(KVM_REQ_REFRESH_GUEST_PREFIX, vcpu);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
goto retry;
|
goto retry;
|
||||||
|
@ -105,7 +105,7 @@ static inline void kvm_s390_set_prefix(struct kvm_vcpu *vcpu, u32 prefix)
|
|||||||
prefix);
|
prefix);
|
||||||
vcpu->arch.sie_block->prefix = prefix >> GUEST_PREFIX_SHIFT;
|
vcpu->arch.sie_block->prefix = prefix >> GUEST_PREFIX_SHIFT;
|
||||||
kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
|
kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
|
||||||
kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
|
kvm_make_request(KVM_REQ_REFRESH_GUEST_PREFIX, vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u64 kvm_s390_get_base_disp_s(struct kvm_vcpu *vcpu, u8 *ar)
|
static inline u64 kvm_s390_get_base_disp_s(struct kvm_vcpu *vcpu, u8 *ar)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user