On Tue, 2009-09-29 at 10:18 +0200, Alexander Graf wrote: > We support setting the DEC to a certain value right now. Doing that basically > triggers the CPU local timer. > > But there's also an mfdec command that enabled the OS to read the decrementor. > > This is required at least by all desktop and server PowerPC Linux kernels. It > can't really hurt to allow embedded ones to do it as well though. > > Signed-off-by: Alexander Graf <ag...@suse.de> > --- > arch/powerpc/kvm/emulate.c | 13 ++++++++++++- > 1 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c > index 7737146..50d411d 100644 > --- a/arch/powerpc/kvm/emulate.c > +++ b/arch/powerpc/kvm/emulate.c > @@ -66,12 +66,14 @@ > > void kvmppc_emulate_dec(struct kvm_vcpu *vcpu) > { > + unsigned long nr_jiffies; > + > if (vcpu->arch.tcr & TCR_DIE) { > /* The decrementer ticks at the same rate as the timebase, so > * that's how we convert the guest DEC value to the number of > * host ticks. */ > - unsigned long nr_jiffies; > > + vcpu->arch.dec_jiffies = mftb(); > nr_jiffies = vcpu->arch.dec / tb_ticks_per_jiffy; > mod_timer(&vcpu->arch.dec_timer, > get_jiffies_64() + nr_jiffies); > @@ -211,6 +213,15 @@ int kvmppc_emulate_instruction(struct kvm_run *run, > struct kvm_vcpu *vcpu) > /* Note: SPRG4-7 are user-readable, so we don't get > * a trap. */ > > + case SPRN_DEC: > + { > + u64 jd = mftb() - vcpu->arch.dec_jiffies; > + vcpu->arch.gpr[rt] = vcpu->arch.dec - jd; > +#ifdef DEBUG_EMUL > + printk(KERN_INFO "mfDEC: %x - %llx = %lx\n", > vcpu->arch.dec, jd, vcpu->arch.gpr[rt]); > +#endif > + break; > + } > default: > emulated = kvmppc_core_emulate_mfspr(vcpu, > sprn, rt); > if (emulated == EMULATE_FAIL) {
mftb() doesn't exist for ppc32, so we'll need to use the get_tb() wrapper instead. -- Hollis Blanchard IBM Linux Technology Center -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html