Hi Alex, Can you please apply following patches: [PATCH 1/4] Introduce a common kvm requests handler [PATCH 2/4] KVM: PPC: booke: Add watchdog emulation [PATCH 3/4] booke: Added ONE_REG interface for IAC/DAC debug registers [PATCH 3/3] Enable kvm emulated watchdog [PATCH 2/3] Registered timer reset handler [PATCH 1/3] Synchronize the linux-headers Thanks -Bharat > -----Original Message----- > From: Bhushan Bharat-R65777 > Sent: Thursday, August 09, 2012 12:08 PM > To: kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; agraf@xxxxxxx > Cc: Bhushan Bharat-R65777 > Subject: [PATCH 1/4] Introduce a common kvm requests handler > > Added a common requests handler which is called before returning to guest. > This returns non zero value when some request demands exit to userspace. > > Signed-off-by: Bharat Bhushan <bharat.bhushan@xxxxxxxxxxxxx> > --- > arch/powerpc/kvm/booke.c | 45 +++++++++++++++++++++++++++++++++------------ > 1 files changed, 33 insertions(+), 12 deletions(-) > > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index > d25a097..6ebff80 100644 > --- a/arch/powerpc/kvm/booke.c > +++ b/arch/powerpc/kvm/booke.c > @@ -412,18 +412,30 @@ static void update_timer_ints(struct kvm_vcpu *vcpu) > kvmppc_core_dequeue_dec(vcpu); > } > > +/* > + * This function handle all requests when returning to guest. This > +return > + * non zero value when some request demands exit to userspace. > + */ > +static int kvmppc_handle_requests(struct kvm_vcpu *vcpu) { > + int ret = 0; > + > + if (!vcpu->requests) > + return 0; > + > + if (kvm_check_request(KVM_REQ_PENDING_TIMER, vcpu)) { > + smp_mb(); > + update_timer_ints(vcpu); > + } > + > + return ret; > +} > + > 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)) @@ -479,10 > +491,15 @@ static int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu) > } > > if (signal_pending(current)) { > + vcpu->run->exit_reason = KVM_EXIT_INTR; > r = 1; > break; > } > > + r = kvmppc_handle_requests(vcpu); > + if (r) > + break; > + > if (kvmppc_core_prepare_to_enter(vcpu)) { > /* interrupts got enabled in between, so we > are back at square 1 */ > @@ -511,8 +528,10 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct > kvm_vcpu *vcpu) > > local_irq_disable(); > if (kvmppc_prepare_to_enter(vcpu)) { > - kvm_run->exit_reason = KVM_EXIT_INTR; > - ret = -EINTR; > + if (kvm_run->exit_reason == KVM_EXIT_INTR) > + ret = -EINTR; > + else > + ret = 0; > goto out; > } > > @@ -972,9 +991,11 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu > *vcpu, > 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); > + if (run->exit_reason == KVM_EXIT_INTR) { > + r = (-EINTR << 2) | RESUME_HOST | (r & > RESUME_FLAG_NV); > + kvmppc_account_exit(vcpu, SIGNAL_EXITS); > + } else > + r = RESUME_HOST | (r & RESUME_FLAG_NV); > } > } > > -- > 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html