forked from Minki/linux
KVM: PPC: Booke: only prepare to enter when we enter
So far, we've always called prepare_to_enter even when all we did was return to the host. This patch changes that semantic to only call prepare_to_enter when we actually want to get back into the guest. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
7cc1e8ee78
commit
03660ba270
@ -464,7 +464,7 @@ int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu)
|
||||
*
|
||||
* returns !0 if a signal is pending and check_signal is true
|
||||
*/
|
||||
static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu, bool check_signal)
|
||||
static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int r = 0;
|
||||
|
||||
@ -477,7 +477,7 @@ static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu, bool check_signal)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (check_signal && signal_pending(current)) {
|
||||
if (signal_pending(current)) {
|
||||
r = 1;
|
||||
break;
|
||||
}
|
||||
@ -509,7 +509,7 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
|
||||
}
|
||||
|
||||
local_irq_disable();
|
||||
if (kvmppc_prepare_to_enter(vcpu, true)) {
|
||||
if (kvmppc_prepare_to_enter(vcpu)) {
|
||||
kvm_run->exit_reason = KVM_EXIT_INTR;
|
||||
ret = -EINTR;
|
||||
goto out;
|
||||
@ -946,11 +946,13 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
||||
* To avoid clobbering exit_reason, only check for signals if we
|
||||
* aren't already exiting to userspace for some other reason.
|
||||
*/
|
||||
local_irq_disable();
|
||||
if (kvmppc_prepare_to_enter(vcpu, !(r & RESUME_HOST))) {
|
||||
run->exit_reason = KVM_EXIT_INTR;
|
||||
r = (-EINTR << 2) | RESUME_HOST | (r & RESUME_FLAG_NV);
|
||||
kvmppc_account_exit(vcpu, SIGNAL_EXITS);
|
||||
if (!(r & RESUME_HOST)) {
|
||||
local_irq_disable();
|
||||
if (kvmppc_prepare_to_enter(vcpu)) {
|
||||
run->exit_reason = KVM_EXIT_INTR;
|
||||
r = (-EINTR << 2) | RESUME_HOST | (r & RESUME_FLAG_NV);
|
||||
kvmppc_account_exit(vcpu, SIGNAL_EXITS);
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
|
Loading…
Reference in New Issue
Block a user