Message ID | 55BA0CB5.1090605@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Am 30.07.2015 um 13:38 schrieb Paolo Bonzini: > > > On 30/07/2015 13:22, Christian Borntraeger wrote: >> static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu) >> { >> - if (!vcpu->requests) >> - return 0; >> retry: >> kvm_s390_vcpu_request_handled(vcpu); >> + if (!vcpu->requests) >> + return 0; >> /* > > Should kvm_s390_vcpu_request_handled(vcpu); go before the retry label? > > It shouldn't be too common to have two requests, and you're doing an > extra atomic operation to clear PROG_REQUEST. Handling a request is slow path anyway and my last optimization was not considering all side effects - so give me some time to comsume your comment to make it better this time.... [...] > This of course should be for 4.3 yes :-) > ---I've pulled your branch into kvm/master. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 05e99b8ef465..a22a13fefb42 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1080,7 +1080,7 @@ static inline void kvm_make_request(int req, struct kvm_vcpu *vcpu) static inline bool kvm_check_request(int req, struct kvm_vcpu *vcpu) { - if (test_bit(req, &vcpu->requests)) { + if (vcpu->requests && test_bit(req, &vcpu->requests)) { clear_bit(req, &vcpu->requests); return true; } else { diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index f32f843a3631..08e24dfc60d3 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -1742,10 +1742,7 @@ static bool ibs_enabled(struct kvm_vcpu *vcpu) static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu) { -retry: kvm_s390_vcpu_request_handled(vcpu); - if (!vcpu->requests) - return 0; /* * We use MMU_RELOAD just to re-arm the ipte notifier for the * guest prefix page. gmap_ipte_notify will wait on the ptl lock. @@ -1760,12 +1757,10 @@ retry: PAGE_SIZE * 2); if (rc) return rc; - goto retry; } if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) { vcpu->arch.sie_block->ihcpu = 0xffff; - goto retry; } if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) { @@ -1774,7 +1769,6 @@ retry: atomic_set_mask(CPUSTAT_IBS, &vcpu->arch.sie_block->cpuflags); } - goto retry; } if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) { @@ -1783,11 +1777,11 @@ retry: atomic_clear_mask(CPUSTAT_IBS, &vcpu->arch.sie_block->cpuflags); } - goto retry; } /* nothing to do, just clear the request */ - clear_bit(KVM_REQ_UNHALT, &vcpu->requests); + if (vcpu->requests) + clear_bit(KVM_REQ_UNHALT, &vcpu->requests); return 0; }