mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 23:29:46 +00:00
KVM: PPC: BookE: Add check_requests helper function
We need a central place to check for pending requests in. Add one that only does the timer check we already do in a different place. Later, this central function can be extended by more checks. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
8043e494da
commit
4ffc6356ec
@ -419,13 +419,6 @@ static void kvmppc_core_check_exceptions(struct kvm_vcpu *vcpu)
|
||||
unsigned long *pending = &vcpu->arch.pending_exceptions;
|
||||
unsigned int priority;
|
||||
|
||||
if (vcpu->requests) {
|
||||
if (kvm_check_request(KVM_REQ_PENDING_TIMER, vcpu)) {
|
||||
smp_mb();
|
||||
update_timer_ints(vcpu);
|
||||
}
|
||||
}
|
||||
|
||||
priority = __ffs(*pending);
|
||||
while (priority < BOOKE_IRQPRIO_MAX) {
|
||||
if (kvmppc_booke_irqprio_deliver(vcpu, priority))
|
||||
@ -461,6 +454,14 @@ int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu)
|
||||
return r;
|
||||
}
|
||||
|
||||
static void kvmppc_check_requests(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (vcpu->requests) {
|
||||
if (kvm_check_request(KVM_REQ_PENDING_TIMER, vcpu))
|
||||
update_timer_ints(vcpu);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Common checks before entering the guest world. Call with interrupts
|
||||
* disabled.
|
||||
@ -485,6 +486,15 @@ static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu)
|
||||
break;
|
||||
}
|
||||
|
||||
smp_mb();
|
||||
if (vcpu->requests) {
|
||||
/* Make sure we process requests preemptable */
|
||||
local_irq_enable();
|
||||
kvmppc_check_requests(vcpu);
|
||||
local_irq_disable();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (kvmppc_core_prepare_to_enter(vcpu)) {
|
||||
/* interrupts got enabled in between, so we
|
||||
are back at square 1 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user