Message ID | 1337067209-26435-1-git-send-email-bharat.bhushan@freescale.com |
---|---|
State | New, archived |
Headers | show |
On 05/15/2012 09:33 AM, Bharat Bhushan wrote: > Added the decrementer auto-reload support. > > Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> > --- > arch/powerpc/include/asm/kvm_host.h | 2 ++ > arch/powerpc/kvm/booke.c | 5 +++++ > arch/powerpc/kvm/booke_emulate.c | 7 ++++++- > 3 files changed, 13 insertions(+), 1 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h > index d848cdc..1d6f89e 100644 > --- a/arch/powerpc/include/asm/kvm_host.h > +++ b/arch/powerpc/include/asm/kvm_host.h > @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { > ulong mcsrr1; > ulong mcsr; > u32 dec; > +#ifdef CONFIG_BOOKE > u32 decar; > +#endif > u32 tbl; > u32 tbu; > u32 tcr; > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c > index 72f13f4..86681ee 100644 > --- a/arch/powerpc/kvm/booke.c > +++ b/arch/powerpc/kvm/booke.c > @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) > { > struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; > > + if (vcpu->arch.tcr& TCR_ARE) { > + vcpu->arch.dec = vcpu->arch.decar; > + kvmppc_emulate_dec(vcpu); > + } > + > kvmppc_set_tsr_bits(vcpu, TSR_DIS); > } > > diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c > index 6c76397..83c3796 100644 > --- a/arch/powerpc/kvm/booke_emulate.c > +++ b/arch/powerpc/kvm/booke_emulate.c > @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) > kvmppc_set_tcr(vcpu, spr_val); > break; > > + case SPRN_DECAR: > + vcpu->arch.decar = spr_val; > + break; > /* > * Note: SPRG4-7 are user-readable. > * These values are loaded into the real SPRGs when resuming the > @@ -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val) > case SPRN_TCR: > *spr_val = vcpu->arch.tcr; > break; > - > + case SPRN_DECAR: > + *spr_val = vcpu->arch.decar; > + break; DECAR can't be read. Otherwise looks good to me. Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Alexander Graf [mailto:agraf@suse.de] > Sent: Tuesday, May 15, 2012 7:59 PM > To: Bhushan Bharat-R65777 > Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 > Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > > On 05/15/2012 09:33 AM, Bharat Bhushan wrote: > > Added the decrementer auto-reload support. > > > > Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> > > --- > > arch/powerpc/include/asm/kvm_host.h | 2 ++ > > arch/powerpc/kvm/booke.c | 5 +++++ > > arch/powerpc/kvm/booke_emulate.c | 7 ++++++- > > 3 files changed, 13 insertions(+), 1 deletions(-) > > > > diff --git a/arch/powerpc/include/asm/kvm_host.h > > b/arch/powerpc/include/asm/kvm_host.h > > index d848cdc..1d6f89e 100644 > > --- a/arch/powerpc/include/asm/kvm_host.h > > +++ b/arch/powerpc/include/asm/kvm_host.h > > @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { > > ulong mcsrr1; > > ulong mcsr; > > u32 dec; > > +#ifdef CONFIG_BOOKE > > u32 decar; > > +#endif > > u32 tbl; > > u32 tbu; > > u32 tcr; > > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index > > 72f13f4..86681ee 100644 > > --- a/arch/powerpc/kvm/booke.c > > +++ b/arch/powerpc/kvm/booke.c > > @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) > > { > > struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; > > > > + if (vcpu->arch.tcr& TCR_ARE) { > > + vcpu->arch.dec = vcpu->arch.decar; > > + kvmppc_emulate_dec(vcpu); > > + } > > + > > kvmppc_set_tsr_bits(vcpu, TSR_DIS); > > } > > > > diff --git a/arch/powerpc/kvm/booke_emulate.c > > b/arch/powerpc/kvm/booke_emulate.c > > index 6c76397..83c3796 100644 > > --- a/arch/powerpc/kvm/booke_emulate.c > > +++ b/arch/powerpc/kvm/booke_emulate.c > > @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int > sprn, ulong spr_val) > > kvmppc_set_tcr(vcpu, spr_val); > > break; > > > > + case SPRN_DECAR: > > + vcpu->arch.decar = spr_val; > > + break; > > /* > > * Note: SPRG4-7 are user-readable. > > * These values are loaded into the real SPRGs when resuming the @@ > > -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int > sprn, ulong *spr_val) > > case SPRN_TCR: > > *spr_val = vcpu->arch.tcr; > > break; > > - > > + case SPRN_DECAR: > > + *spr_val = vcpu->arch.decar; > > + break; > > DECAR can't be read. Otherwise looks good to me. DECAR can be read on e500mc cores. So I will make this under CONFIG_KVM_E500MC. What happens if DECAR is read on non e500mc? Is it treated as NOP or illegal instruction exception? Thanks -Bharat -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/16/2012 08:57 AM, Bhushan Bharat-R65777 wrote: > >> -----Original Message----- >> From: Alexander Graf [mailto:agraf@suse.de] >> Sent: Tuesday, May 15, 2012 7:59 PM >> To: Bhushan Bharat-R65777 >> Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 >> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >> >> On 05/15/2012 09:33 AM, Bharat Bhushan wrote: >>> Added the decrementer auto-reload support. >>> >>> Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> >>> --- >>> arch/powerpc/include/asm/kvm_host.h | 2 ++ >>> arch/powerpc/kvm/booke.c | 5 +++++ >>> arch/powerpc/kvm/booke_emulate.c | 7 ++++++- >>> 3 files changed, 13 insertions(+), 1 deletions(-) >>> >>> diff --git a/arch/powerpc/include/asm/kvm_host.h >>> b/arch/powerpc/include/asm/kvm_host.h >>> index d848cdc..1d6f89e 100644 >>> --- a/arch/powerpc/include/asm/kvm_host.h >>> +++ b/arch/powerpc/include/asm/kvm_host.h >>> @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { >>> ulong mcsrr1; >>> ulong mcsr; >>> u32 dec; >>> +#ifdef CONFIG_BOOKE >>> u32 decar; >>> +#endif >>> u32 tbl; >>> u32 tbu; >>> u32 tcr; >>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index >>> 72f13f4..86681ee 100644 >>> --- a/arch/powerpc/kvm/booke.c >>> +++ b/arch/powerpc/kvm/booke.c >>> @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) >>> { >>> struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; >>> >>> + if (vcpu->arch.tcr& TCR_ARE) { >>> + vcpu->arch.dec = vcpu->arch.decar; >>> + kvmppc_emulate_dec(vcpu); >>> + } >>> + >>> kvmppc_set_tsr_bits(vcpu, TSR_DIS); >>> } >>> >>> diff --git a/arch/powerpc/kvm/booke_emulate.c >>> b/arch/powerpc/kvm/booke_emulate.c >>> index 6c76397..83c3796 100644 >>> --- a/arch/powerpc/kvm/booke_emulate.c >>> +++ b/arch/powerpc/kvm/booke_emulate.c >>> @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int >> sprn, ulong spr_val) >>> kvmppc_set_tcr(vcpu, spr_val); >>> break; >>> >>> + case SPRN_DECAR: >>> + vcpu->arch.decar = spr_val; >>> + break; >>> /* >>> * Note: SPRG4-7 are user-readable. >>> * These values are loaded into the real SPRGs when resuming the @@ >>> -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int >> sprn, ulong *spr_val) >>> case SPRN_TCR: >>> *spr_val = vcpu->arch.tcr; >>> break; >>> - >>> + case SPRN_DECAR: >>> + *spr_val = vcpu->arch.decar; >>> + break; >> DECAR can't be read. Otherwise looks good to me. > DECAR can be read on e500mc cores. So I will make this under CONFIG_KVM_E500MC. > > What happens if DECAR is read on non e500mc? Is it treated as NOP or illegal instruction exception? I would assume the latter. NOPs usually don't happen. If anything, it would return 0. See section 9.4 in the PowerISA: The contents of the Decrementer Auto-Reload Register cannot be read. The contents of bits 32:63 of register RS can be written to the Decrementer Auto-Reload Register using the mtspr instruction. Could you please paste the respective passage of the e500mc manual that declares DECAR as readable? Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Alexander Graf [mailto:agraf@suse.de] > Sent: Wednesday, May 16, 2012 2:36 PM > To: Bhushan Bharat-R65777 > Cc: kvm-ppc@vger.kernel.org > Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > > On 05/16/2012 08:57 AM, Bhushan Bharat-R65777 wrote: > > > >> -----Original Message----- > >> From: Alexander Graf [mailto:agraf@suse.de] > >> Sent: Tuesday, May 15, 2012 7:59 PM > >> To: Bhushan Bharat-R65777 > >> Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 > >> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > >> > >> On 05/15/2012 09:33 AM, Bharat Bhushan wrote: > >>> Added the decrementer auto-reload support. > >>> > >>> Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> > >>> --- > >>> arch/powerpc/include/asm/kvm_host.h | 2 ++ > >>> arch/powerpc/kvm/booke.c | 5 +++++ > >>> arch/powerpc/kvm/booke_emulate.c | 7 ++++++- > >>> 3 files changed, 13 insertions(+), 1 deletions(-) > >>> > >>> diff --git a/arch/powerpc/include/asm/kvm_host.h > >>> b/arch/powerpc/include/asm/kvm_host.h > >>> index d848cdc..1d6f89e 100644 > >>> --- a/arch/powerpc/include/asm/kvm_host.h > >>> +++ b/arch/powerpc/include/asm/kvm_host.h > >>> @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { > >>> ulong mcsrr1; > >>> ulong mcsr; > >>> u32 dec; > >>> +#ifdef CONFIG_BOOKE > >>> u32 decar; > >>> +#endif > >>> u32 tbl; > >>> u32 tbu; > >>> u32 tcr; > >>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c > >>> index 72f13f4..86681ee 100644 > >>> --- a/arch/powerpc/kvm/booke.c > >>> +++ b/arch/powerpc/kvm/booke.c > >>> @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) > >>> { > >>> struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; > >>> > >>> + if (vcpu->arch.tcr& TCR_ARE) { > >>> + vcpu->arch.dec = vcpu->arch.decar; > >>> + kvmppc_emulate_dec(vcpu); > >>> + } > >>> + > >>> kvmppc_set_tsr_bits(vcpu, TSR_DIS); > >>> } > >>> > >>> diff --git a/arch/powerpc/kvm/booke_emulate.c > >>> b/arch/powerpc/kvm/booke_emulate.c > >>> index 6c76397..83c3796 100644 > >>> --- a/arch/powerpc/kvm/booke_emulate.c > >>> +++ b/arch/powerpc/kvm/booke_emulate.c > >>> @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu > >>> *vcpu, int > >> sprn, ulong spr_val) > >>> kvmppc_set_tcr(vcpu, spr_val); > >>> break; > >>> > >>> + case SPRN_DECAR: > >>> + vcpu->arch.decar = spr_val; > >>> + break; > >>> /* > >>> * Note: SPRG4-7 are user-readable. > >>> * These values are loaded into the real SPRGs when resuming the > >>> @@ > >>> -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu > >>> *vcpu, int > >> sprn, ulong *spr_val) > >>> case SPRN_TCR: > >>> *spr_val = vcpu->arch.tcr; > >>> break; > >>> - > >>> + case SPRN_DECAR: > >>> + *spr_val = vcpu->arch.decar; > >>> + break; > >> DECAR can't be read. Otherwise looks good to me. > > DECAR can be read on e500mc cores. So I will make this under > CONFIG_KVM_E500MC. > > > > What happens if DECAR is read on non e500mc? Is it treated as NOP or illegal > instruction exception? > > I would assume the latter. NOPs usually don't happen. If anything, it would > return 0. > > See section 9.4 in the PowerISA: > > The contents of the Decrementer Auto-Reload Register cannot be read. The > contents of bits 32:63 of register RS can be written to the Decrementer Auto- > Reload Register using the mtspr instruction. > > Could you please paste the respective passage of the e500mc manual that declares > DECAR as readable? I have booke -4 version 1.05. There are remarks at 3 place 1) Table 2-1: There is remark " DECAR is defined by the architecture to be write-only, however the e500mc allows it to be read." ------------ 2) 2.8.5 Decrementer Auto-Reload Register (DECAR) "For e500V4, the DECAR can be read in hypervisor state, although the architecture defines it as a write-only register." -------------- 3) Table 4.37 Hypervisor Privilege on Read - Yes Hypervisor Privilege on Write - Yes Remark: e500mc allows reading of DECAR although Power ISA does not define it. ---------------- I verified with my unit test that reading DECAR traps in KVM on e500mc. Thanks -Bharat -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/16/2012 11:21 AM, Bhushan Bharat-R65777 wrote: > >> -----Original Message----- >> From: Alexander Graf [mailto:agraf@suse.de] >> Sent: Wednesday, May 16, 2012 2:36 PM >> To: Bhushan Bharat-R65777 >> Cc: kvm-ppc@vger.kernel.org >> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >> >> On 05/16/2012 08:57 AM, Bhushan Bharat-R65777 wrote: >>>> -----Original Message----- >>>> From: Alexander Graf [mailto:agraf@suse.de] >>>> Sent: Tuesday, May 15, 2012 7:59 PM >>>> To: Bhushan Bharat-R65777 >>>> Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 >>>> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >>>> >>>> On 05/15/2012 09:33 AM, Bharat Bhushan wrote: >>>>> Added the decrementer auto-reload support. >>>>> >>>>> Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> >>>>> --- >>>>> arch/powerpc/include/asm/kvm_host.h | 2 ++ >>>>> arch/powerpc/kvm/booke.c | 5 +++++ >>>>> arch/powerpc/kvm/booke_emulate.c | 7 ++++++- >>>>> 3 files changed, 13 insertions(+), 1 deletions(-) >>>>> >>>>> diff --git a/arch/powerpc/include/asm/kvm_host.h >>>>> b/arch/powerpc/include/asm/kvm_host.h >>>>> index d848cdc..1d6f89e 100644 >>>>> --- a/arch/powerpc/include/asm/kvm_host.h >>>>> +++ b/arch/powerpc/include/asm/kvm_host.h >>>>> @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { >>>>> ulong mcsrr1; >>>>> ulong mcsr; >>>>> u32 dec; >>>>> +#ifdef CONFIG_BOOKE >>>>> u32 decar; >>>>> +#endif >>>>> u32 tbl; >>>>> u32 tbu; >>>>> u32 tcr; >>>>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c >>>>> index 72f13f4..86681ee 100644 >>>>> --- a/arch/powerpc/kvm/booke.c >>>>> +++ b/arch/powerpc/kvm/booke.c >>>>> @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) >>>>> { >>>>> struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; >>>>> >>>>> + if (vcpu->arch.tcr& TCR_ARE) { >>>>> + vcpu->arch.dec = vcpu->arch.decar; >>>>> + kvmppc_emulate_dec(vcpu); >>>>> + } >>>>> + >>>>> kvmppc_set_tsr_bits(vcpu, TSR_DIS); >>>>> } >>>>> >>>>> diff --git a/arch/powerpc/kvm/booke_emulate.c >>>>> b/arch/powerpc/kvm/booke_emulate.c >>>>> index 6c76397..83c3796 100644 >>>>> --- a/arch/powerpc/kvm/booke_emulate.c >>>>> +++ b/arch/powerpc/kvm/booke_emulate.c >>>>> @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu >>>>> *vcpu, int >>>> sprn, ulong spr_val) >>>>> kvmppc_set_tcr(vcpu, spr_val); >>>>> break; >>>>> >>>>> + case SPRN_DECAR: >>>>> + vcpu->arch.decar = spr_val; >>>>> + break; >>>>> /* >>>>> * Note: SPRG4-7 are user-readable. >>>>> * These values are loaded into the real SPRGs when resuming the >>>>> @@ >>>>> -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu >>>>> *vcpu, int >>>> sprn, ulong *spr_val) >>>>> case SPRN_TCR: >>>>> *spr_val = vcpu->arch.tcr; >>>>> break; >>>>> - >>>>> + case SPRN_DECAR: >>>>> + *spr_val = vcpu->arch.decar; >>>>> + break; >>>> DECAR can't be read. Otherwise looks good to me. >>> DECAR can be read on e500mc cores. So I will make this under >> CONFIG_KVM_E500MC. >>> What happens if DECAR is read on non e500mc? Is it treated as NOP or illegal >> instruction exception? >> >> I would assume the latter. NOPs usually don't happen. If anything, it would >> return 0. >> >> See section 9.4 in the PowerISA: >> >> The contents of the Decrementer Auto-Reload Register cannot be read. The >> contents of bits 32:63 of register RS can be written to the Decrementer Auto- >> Reload Register using the mtspr instruction. >> >> Could you please paste the respective passage of the e500mc manual that declares >> DECAR as readable? > I have booke -4 version 1.05. > There are remarks at 3 place > > 1) > Table 2-1: > There is remark " DECAR is defined by the architecture to be write-only, however the e500mc allows it to be read." > ------------ > > 2) > 2.8.5 Decrementer Auto-Reload Register (DECAR) > > "For e500V4, the DECAR can be read in hypervisor state, although the architecture defines it as a > write-only register." > -------------- > > 3) > Table 4.37 > > Hypervisor Privilege on Read - Yes > Hypervisor Privilege on Write - Yes > > Remark: e500mc allows reading of DECAR although Power ISA does not define it. > ---------------- > > I verified with my unit test that reading DECAR traps in KVM on e500mc. Alrighty, so how about putting the read into e500_emulate.c then? What does e500v2 do here? Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Alexander Graf [mailto:agraf@suse.de] > Sent: Wednesday, May 16, 2012 2:54 PM > To: Bhushan Bharat-R65777 > Cc: kvm-ppc@vger.kernel.org > Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > > On 05/16/2012 11:21 AM, Bhushan Bharat-R65777 wrote: > > > >> -----Original Message----- > >> From: Alexander Graf [mailto:agraf@suse.de] > >> Sent: Wednesday, May 16, 2012 2:36 PM > >> To: Bhushan Bharat-R65777 > >> Cc: kvm-ppc@vger.kernel.org > >> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > >> > >> On 05/16/2012 08:57 AM, Bhushan Bharat-R65777 wrote: > >>>> -----Original Message----- > >>>> From: Alexander Graf [mailto:agraf@suse.de] > >>>> Sent: Tuesday, May 15, 2012 7:59 PM > >>>> To: Bhushan Bharat-R65777 > >>>> Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 > >>>> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support > >>>> > >>>> On 05/15/2012 09:33 AM, Bharat Bhushan wrote: > >>>>> Added the decrementer auto-reload support. > >>>>> > >>>>> Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> > >>>>> --- > >>>>> arch/powerpc/include/asm/kvm_host.h | 2 ++ > >>>>> arch/powerpc/kvm/booke.c | 5 +++++ > >>>>> arch/powerpc/kvm/booke_emulate.c | 7 ++++++- > >>>>> 3 files changed, 13 insertions(+), 1 deletions(-) > >>>>> > >>>>> diff --git a/arch/powerpc/include/asm/kvm_host.h > >>>>> b/arch/powerpc/include/asm/kvm_host.h > >>>>> index d848cdc..1d6f89e 100644 > >>>>> --- a/arch/powerpc/include/asm/kvm_host.h > >>>>> +++ b/arch/powerpc/include/asm/kvm_host.h > >>>>> @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { > >>>>> ulong mcsrr1; > >>>>> ulong mcsr; > >>>>> u32 dec; > >>>>> +#ifdef CONFIG_BOOKE > >>>>> u32 decar; > >>>>> +#endif > >>>>> u32 tbl; > >>>>> u32 tbu; > >>>>> u32 tcr; > >>>>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c > >>>>> index 72f13f4..86681ee 100644 > >>>>> --- a/arch/powerpc/kvm/booke.c > >>>>> +++ b/arch/powerpc/kvm/booke.c > >>>>> @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) > >>>>> { > >>>>> struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; > >>>>> > >>>>> + if (vcpu->arch.tcr& TCR_ARE) { > >>>>> + vcpu->arch.dec = vcpu->arch.decar; > >>>>> + kvmppc_emulate_dec(vcpu); > >>>>> + } > >>>>> + > >>>>> kvmppc_set_tsr_bits(vcpu, TSR_DIS); > >>>>> } > >>>>> > >>>>> diff --git a/arch/powerpc/kvm/booke_emulate.c > >>>>> b/arch/powerpc/kvm/booke_emulate.c > >>>>> index 6c76397..83c3796 100644 > >>>>> --- a/arch/powerpc/kvm/booke_emulate.c > >>>>> +++ b/arch/powerpc/kvm/booke_emulate.c > >>>>> @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu > >>>>> *vcpu, int > >>>> sprn, ulong spr_val) > >>>>> kvmppc_set_tcr(vcpu, spr_val); > >>>>> break; > >>>>> > >>>>> + case SPRN_DECAR: > >>>>> + vcpu->arch.decar = spr_val; > >>>>> + break; > >>>>> /* > >>>>> * Note: SPRG4-7 are user-readable. > >>>>> * These values are loaded into the real SPRGs when resuming > >>>>> the @@ > >>>>> -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu > >>>>> *vcpu, int > >>>> sprn, ulong *spr_val) > >>>>> case SPRN_TCR: > >>>>> *spr_val = vcpu->arch.tcr; > >>>>> break; > >>>>> - > >>>>> + case SPRN_DECAR: > >>>>> + *spr_val = vcpu->arch.decar; > >>>>> + break; > >>>> DECAR can't be read. Otherwise looks good to me. > >>> DECAR can be read on e500mc cores. So I will make this under > >> CONFIG_KVM_E500MC. > >>> What happens if DECAR is read on non e500mc? Is it treated as NOP or > >>> illegal > >> instruction exception? > >> > >> I would assume the latter. NOPs usually don't happen. If anything, it > >> would return 0. > >> > >> See section 9.4 in the PowerISA: > >> > >> The contents of the Decrementer Auto-Reload Register cannot be read. > >> The contents of bits 32:63 of register RS can be written to the > >> Decrementer Auto- Reload Register using the mtspr instruction. > >> > >> Could you please paste the respective passage of the e500mc manual > >> that declares DECAR as readable? > > I have booke -4 version 1.05. > > There are remarks at 3 place > > > > 1) > > Table 2-1: > > There is remark " DECAR is defined by the architecture to be write-only, > however the e500mc allows it to be read." > > ------------ > > > > 2) > > 2.8.5 Decrementer Auto-Reload Register (DECAR) > > > > "For e500V4, the DECAR can be read in hypervisor state, although the > > architecture defines it as a write-only register." > > -------------- > > > > 3) > > Table 4.37 > > > > Hypervisor Privilege on Read - Yes > > Hypervisor Privilege on Write - Yes > > > > Remark: e500mc allows reading of DECAR although Power ISA does not define it. > > ---------------- > > > > I verified with my unit test that reading DECAR traps in KVM on e500mc. > > Alrighty, so how about putting the read into e500_emulate.c then? Ok > What does e500v2 do here? mfspr(DECAR) works ok e500v2 :), while spec says it is write-only. We should emulate DECAR as per specifications documented . Right? So we will not support trap and emulate for e500v2. Thanks -Bharat > > > Alex > -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 21.05.2012, at 06:28, Bhushan Bharat-R65777 <R65777@freescale.com> wrote: > > >> -----Original Message----- >> From: Alexander Graf [mailto:agraf@suse.de] >> Sent: Wednesday, May 16, 2012 2:54 PM >> To: Bhushan Bharat-R65777 >> Cc: kvm-ppc@vger.kernel.org >> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >> >> On 05/16/2012 11:21 AM, Bhushan Bharat-R65777 wrote: >>> >>>> -----Original Message----- >>>> From: Alexander Graf [mailto:agraf@suse.de] >>>> Sent: Wednesday, May 16, 2012 2:36 PM >>>> To: Bhushan Bharat-R65777 >>>> Cc: kvm-ppc@vger.kernel.org >>>> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >>>> >>>> On 05/16/2012 08:57 AM, Bhushan Bharat-R65777 wrote: >>>>>> -----Original Message----- >>>>>> From: Alexander Graf [mailto:agraf@suse.de] >>>>>> Sent: Tuesday, May 15, 2012 7:59 PM >>>>>> To: Bhushan Bharat-R65777 >>>>>> Cc: kvm-ppc@vger.kernel.org; Bhushan Bharat-R65777 >>>>>> Subject: Re: [PATCH] KVM: PPC: booke: Added DECAR support >>>>>> >>>>>> On 05/15/2012 09:33 AM, Bharat Bhushan wrote: >>>>>>> Added the decrementer auto-reload support. >>>>>>> >>>>>>> Signed-off-by: Bharat Bhushan<bharat.bhushan@freescale.com> >>>>>>> --- >>>>>>> arch/powerpc/include/asm/kvm_host.h | 2 ++ >>>>>>> arch/powerpc/kvm/booke.c | 5 +++++ >>>>>>> arch/powerpc/kvm/booke_emulate.c | 7 ++++++- >>>>>>> 3 files changed, 13 insertions(+), 1 deletions(-) >>>>>>> >>>>>>> diff --git a/arch/powerpc/include/asm/kvm_host.h >>>>>>> b/arch/powerpc/include/asm/kvm_host.h >>>>>>> index d848cdc..1d6f89e 100644 >>>>>>> --- a/arch/powerpc/include/asm/kvm_host.h >>>>>>> +++ b/arch/powerpc/include/asm/kvm_host.h >>>>>>> @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { >>>>>>> ulong mcsrr1; >>>>>>> ulong mcsr; >>>>>>> u32 dec; >>>>>>> +#ifdef CONFIG_BOOKE >>>>>>> u32 decar; >>>>>>> +#endif >>>>>>> u32 tbl; >>>>>>> u32 tbu; >>>>>>> u32 tcr; >>>>>>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c >>>>>>> index 72f13f4..86681ee 100644 >>>>>>> --- a/arch/powerpc/kvm/booke.c >>>>>>> +++ b/arch/powerpc/kvm/booke.c >>>>>>> @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) >>>>>>> { >>>>>>> struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; >>>>>>> >>>>>>> + if (vcpu->arch.tcr& TCR_ARE) { >>>>>>> + vcpu->arch.dec = vcpu->arch.decar; >>>>>>> + kvmppc_emulate_dec(vcpu); >>>>>>> + } >>>>>>> + >>>>>>> kvmppc_set_tsr_bits(vcpu, TSR_DIS); >>>>>>> } >>>>>>> >>>>>>> diff --git a/arch/powerpc/kvm/booke_emulate.c >>>>>>> b/arch/powerpc/kvm/booke_emulate.c >>>>>>> index 6c76397..83c3796 100644 >>>>>>> --- a/arch/powerpc/kvm/booke_emulate.c >>>>>>> +++ b/arch/powerpc/kvm/booke_emulate.c >>>>>>> @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu >>>>>>> *vcpu, int >>>>>> sprn, ulong spr_val) >>>>>>> kvmppc_set_tcr(vcpu, spr_val); >>>>>>> break; >>>>>>> >>>>>>> + case SPRN_DECAR: >>>>>>> + vcpu->arch.decar = spr_val; >>>>>>> + break; >>>>>>> /* >>>>>>> * Note: SPRG4-7 are user-readable. >>>>>>> * These values are loaded into the real SPRGs when resuming >>>>>>> the @@ >>>>>>> -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu >>>>>>> *vcpu, int >>>>>> sprn, ulong *spr_val) >>>>>>> case SPRN_TCR: >>>>>>> *spr_val = vcpu->arch.tcr; >>>>>>> break; >>>>>>> - >>>>>>> + case SPRN_DECAR: >>>>>>> + *spr_val = vcpu->arch.decar; >>>>>>> + break; >>>>>> DECAR can't be read. Otherwise looks good to me. >>>>> DECAR can be read on e500mc cores. So I will make this under >>>> CONFIG_KVM_E500MC. >>>>> What happens if DECAR is read on non e500mc? Is it treated as NOP or >>>>> illegal >>>> instruction exception? >>>> >>>> I would assume the latter. NOPs usually don't happen. If anything, it >>>> would return 0. >>>> >>>> See section 9.4 in the PowerISA: >>>> >>>> The contents of the Decrementer Auto-Reload Register cannot be read. >>>> The contents of bits 32:63 of register RS can be written to the >>>> Decrementer Auto- Reload Register using the mtspr instruction. >>>> >>>> Could you please paste the respective passage of the e500mc manual >>>> that declares DECAR as readable? >>> I have booke -4 version 1.05. >>> There are remarks at 3 place >>> >>> 1) >>> Table 2-1: >>> There is remark " DECAR is defined by the architecture to be write-only, >> however the e500mc allows it to be read." >>> ------------ >>> >>> 2) >>> 2.8.5 Decrementer Auto-Reload Register (DECAR) >>> >>> "For e500V4, the DECAR can be read in hypervisor state, although the >>> architecture defines it as a write-only register." >>> -------------- >>> >>> 3) >>> Table 4.37 >>> >>> Hypervisor Privilege on Read - Yes >>> Hypervisor Privilege on Write - Yes >>> >>> Remark: e500mc allows reading of DECAR although Power ISA does not define it. >>> ---------------- >>> >>> I verified with my unit test that reading DECAR traps in KVM on e500mc. >> >> Alrighty, so how about putting the read into e500_emulate.c then? > > Ok > >> What does e500v2 do here? > > mfspr(DECAR) works ok e500v2 :), while spec says it is write-only. > > We should emulate DECAR as per specifications documented . Right? So we will not support trap and emulate for e500v2. Usually yes, but IMHO hardware always wins over specs, so I would enable it for v2 as well if it really does work properly there ;). Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" 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/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index d848cdc..1d6f89e 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h @@ -414,7 +414,9 @@ struct kvm_vcpu_arch { ulong mcsrr1; ulong mcsr; u32 dec; +#ifdef CONFIG_BOOKE u32 decar; +#endif u32 tbl; u32 tbu; u32 tcr; diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index 72f13f4..86681ee 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c @@ -1267,6 +1267,11 @@ void kvmppc_decrementer_func(unsigned long data) { struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; + if (vcpu->arch.tcr & TCR_ARE) { + vcpu->arch.dec = vcpu->arch.decar; + kvmppc_emulate_dec(vcpu); + } + kvmppc_set_tsr_bits(vcpu, TSR_DIS); } diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c index 6c76397..83c3796 100644 --- a/arch/powerpc/kvm/booke_emulate.c +++ b/arch/powerpc/kvm/booke_emulate.c @@ -129,6 +129,9 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) kvmppc_set_tcr(vcpu, spr_val); break; + case SPRN_DECAR: + vcpu->arch.decar = spr_val; + break; /* * Note: SPRG4-7 are user-readable. * These values are loaded into the real SPRGs when resuming the @@ -244,7 +247,9 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val) case SPRN_TCR: *spr_val = vcpu->arch.tcr; break; - + case SPRN_DECAR: + *spr_val = vcpu->arch.decar; + break; case SPRN_IVOR0: *spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_CRITICAL]; break;
Added the decrementer auto-reload support. Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com> --- arch/powerpc/include/asm/kvm_host.h | 2 ++ arch/powerpc/kvm/booke.c | 5 +++++ arch/powerpc/kvm/booke_emulate.c | 7 ++++++- 3 files changed, 13 insertions(+), 1 deletions(-)