Message ID | 20190606173614.32090-8-cclaudio@linux.ibm.com |
---|---|
State | Superseded |
Headers | show |
Series | kvmppc: Paravirtualize KVM to support ultravisor | expand |
On 06/06/19 11:06 PM, Claudio Carvalho wrote: > When the ultravisor firmware is available, it takes control over the > LDBAR register. In this case, thread-imc updates and save/restore > operations on the LDBAR register are handled by ultravisor. > > Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com> > Signed-off-by: Ram Pai <linuxram@us.ibm.com> > --- > arch/powerpc/kvm/book3s_hv_rmhandlers.S | 2 ++ > arch/powerpc/platforms/powernv/idle.c | 6 ++++-- > arch/powerpc/platforms/powernv/opal-imc.c | 7 +++++++ > 3 files changed, 13 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S > index f9b2620fbecd..cffb365d9d02 100644 > --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S > +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S > @@ -375,8 +375,10 @@ BEGIN_FTR_SECTION > mtspr SPRN_RPR, r0 > ld r0, KVM_SPLIT_PMMAR(r6) > mtspr SPRN_PMMAR, r0 > +BEGIN_FW_FTR_SECTION_NESTED(70) > ld r0, KVM_SPLIT_LDBAR(r6) > mtspr SPRN_LDBAR, r0 > +END_FW_FTR_SECTION_NESTED(FW_FEATURE_ULTRAVISOR, 0, 70) > isync > FTR_SECTION_ELSE > /* On P9 we use the split_info for coordinating LPCR changes */ > diff --git a/arch/powerpc/platforms/powernv/idle.c b/arch/powerpc/platforms/powernv/idle.c > index c9133f7908ca..fd62435e3267 100644 > --- a/arch/powerpc/platforms/powernv/idle.c > +++ b/arch/powerpc/platforms/powernv/idle.c > @@ -679,7 +679,8 @@ static unsigned long power9_idle_stop(unsigned long psscr, bool mmu_on) > sprs.ptcr = mfspr(SPRN_PTCR); > sprs.rpr = mfspr(SPRN_RPR); > sprs.tscr = mfspr(SPRN_TSCR); > - sprs.ldbar = mfspr(SPRN_LDBAR); > + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) > + sprs.ldbar = mfspr(SPRN_LDBAR); > > sprs_saved = true; > > @@ -762,7 +763,8 @@ static unsigned long power9_idle_stop(unsigned long psscr, bool mmu_on) > mtspr(SPRN_PTCR, sprs.ptcr); > mtspr(SPRN_RPR, sprs.rpr); > mtspr(SPRN_TSCR, sprs.tscr); > - mtspr(SPRN_LDBAR, sprs.ldbar); > + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) > + mtspr(SPRN_LDBAR, sprs.ldbar); > > if (pls >= pnv_first_tb_loss_level) { > /* TB loss */ > diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c > index 1b6932890a73..e9b641d313fb 100644 > --- a/arch/powerpc/platforms/powernv/opal-imc.c > +++ b/arch/powerpc/platforms/powernv/opal-imc.c > @@ -254,6 +254,13 @@ static int opal_imc_counters_probe(struct platform_device *pdev) > bool core_imc_reg = false, thread_imc_reg = false; > u32 type; > > + /* > + * When the Ultravisor is enabled, it is responsible for thread-imc > + * updates > + */ Would prefer the comment to be "Disable IMC devices, when Ultravisor is enabled" Rest looks good. Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> > + if (firmware_has_feature(FW_FEATURE_ULTRAVISOR)) > + return -EACCES; > + > /* > * Check whether this is kdump kernel. If yes, force the engines to > * stop and return.
On 6/7/19 1:48 AM, Madhavan Srinivasan wrote: > > On 06/06/19 11:06 PM, Claudio Carvalho wrote: >> When the ultravisor firmware is available, it takes control over the >> LDBAR register. In this case, thread-imc updates and save/restore >> operations on the LDBAR register are handled by ultravisor. >> >> Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com> >> Signed-off-by: Ram Pai <linuxram@us.ibm.com> >> --- >> arch/powerpc/kvm/book3s_hv_rmhandlers.S | 2 ++ >> arch/powerpc/platforms/powernv/idle.c | 6 ++++-- >> arch/powerpc/platforms/powernv/opal-imc.c | 7 +++++++ >> 3 files changed, 13 insertions(+), 2 deletions(-) >> >> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S >> b/arch/powerpc/kvm/book3s_hv_rmhandlers.S >> index f9b2620fbecd..cffb365d9d02 100644 >> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S >> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S >> @@ -375,8 +375,10 @@ BEGIN_FTR_SECTION >> mtspr SPRN_RPR, r0 >> ld r0, KVM_SPLIT_PMMAR(r6) >> mtspr SPRN_PMMAR, r0 >> +BEGIN_FW_FTR_SECTION_NESTED(70) >> ld r0, KVM_SPLIT_LDBAR(r6) >> mtspr SPRN_LDBAR, r0 >> +END_FW_FTR_SECTION_NESTED(FW_FEATURE_ULTRAVISOR, 0, 70) >> isync >> FTR_SECTION_ELSE >> /* On P9 we use the split_info for coordinating LPCR changes */ >> diff --git a/arch/powerpc/platforms/powernv/idle.c >> b/arch/powerpc/platforms/powernv/idle.c >> index c9133f7908ca..fd62435e3267 100644 >> --- a/arch/powerpc/platforms/powernv/idle.c >> +++ b/arch/powerpc/platforms/powernv/idle.c >> @@ -679,7 +679,8 @@ static unsigned long power9_idle_stop(unsigned long >> psscr, bool mmu_on) >> sprs.ptcr = mfspr(SPRN_PTCR); >> sprs.rpr = mfspr(SPRN_RPR); >> sprs.tscr = mfspr(SPRN_TSCR); >> - sprs.ldbar = mfspr(SPRN_LDBAR); >> + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) >> + sprs.ldbar = mfspr(SPRN_LDBAR); >> >> sprs_saved = true; >> >> @@ -762,7 +763,8 @@ static unsigned long power9_idle_stop(unsigned long >> psscr, bool mmu_on) >> mtspr(SPRN_PTCR, sprs.ptcr); >> mtspr(SPRN_RPR, sprs.rpr); >> mtspr(SPRN_TSCR, sprs.tscr); >> - mtspr(SPRN_LDBAR, sprs.ldbar); >> + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) >> + mtspr(SPRN_LDBAR, sprs.ldbar); >> >> if (pls >= pnv_first_tb_loss_level) { >> /* TB loss */ >> diff --git a/arch/powerpc/platforms/powernv/opal-imc.c >> b/arch/powerpc/platforms/powernv/opal-imc.c >> index 1b6932890a73..e9b641d313fb 100644 >> --- a/arch/powerpc/platforms/powernv/opal-imc.c >> +++ b/arch/powerpc/platforms/powernv/opal-imc.c >> @@ -254,6 +254,13 @@ static int opal_imc_counters_probe(struct >> platform_device *pdev) >> bool core_imc_reg = false, thread_imc_reg = false; >> u32 type; >> >> + /* >> + * When the Ultravisor is enabled, it is responsible for thread-imc >> + * updates >> + */ > > Would prefer the comment to be "Disable IMC devices, when Ultravisor is > enabled" > Rest looks good. > Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Thanks Maddy. I applied that change to the next version. Claudio > >> + if (firmware_has_feature(FW_FEATURE_ULTRAVISOR)) >> + return -EACCES; >> + >> /* >> * Check whether this is kdump kernel. If yes, force the engines to >> * stop and return.
On Thu, Jun 06, 2019 at 02:36:12PM -0300, Claudio Carvalho wrote: > When the ultravisor firmware is available, it takes control over the > LDBAR register. In this case, thread-imc updates and save/restore > operations on the LDBAR register are handled by ultravisor. > > Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com> > Signed-off-by: Ram Pai <linuxram@us.ibm.com> Acked-by: Paul Mackerras <paulus@ozlabs.org> Just a note on the signed-off-by: it's a bit weird to have Ram's signoff when he is neither the author nor the sender of the patch. The author is assumed to be Claudio; if that is not correct then the patch should have a From: line at the start telling us who the author is, and ideally that person should have a signoff line before Claudio's signoff as the sender of the patch. Paul.
On Sat, Jun 15, 2019 at 05:43:34PM +1000, Paul Mackerras wrote: > On Thu, Jun 06, 2019 at 02:36:12PM -0300, Claudio Carvalho wrote: > > When the ultravisor firmware is available, it takes control over the > > LDBAR register. In this case, thread-imc updates and save/restore > > operations on the LDBAR register are handled by ultravisor. > > > > Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com> > > Signed-off-by: Ram Pai <linuxram@us.ibm.com> > > Acked-by: Paul Mackerras <paulus@ozlabs.org> > > Just a note on the signed-off-by: it's a bit weird to have Ram's > signoff when he is neither the author nor the sender of the patch. > The author is assumed to be Claudio; if that is not correct then the > patch should have a From: line at the start telling us who the author > is, and ideally that person should have a signoff line before > Claudio's signoff as the sender of the patch. Ryan originally wrote this patch, which I than modified, before Claudio further modified it to its current form. So I think the author should be Ryan. RP
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index f9b2620fbecd..cffb365d9d02 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S @@ -375,8 +375,10 @@ BEGIN_FTR_SECTION mtspr SPRN_RPR, r0 ld r0, KVM_SPLIT_PMMAR(r6) mtspr SPRN_PMMAR, r0 +BEGIN_FW_FTR_SECTION_NESTED(70) ld r0, KVM_SPLIT_LDBAR(r6) mtspr SPRN_LDBAR, r0 +END_FW_FTR_SECTION_NESTED(FW_FEATURE_ULTRAVISOR, 0, 70) isync FTR_SECTION_ELSE /* On P9 we use the split_info for coordinating LPCR changes */ diff --git a/arch/powerpc/platforms/powernv/idle.c b/arch/powerpc/platforms/powernv/idle.c index c9133f7908ca..fd62435e3267 100644 --- a/arch/powerpc/platforms/powernv/idle.c +++ b/arch/powerpc/platforms/powernv/idle.c @@ -679,7 +679,8 @@ static unsigned long power9_idle_stop(unsigned long psscr, bool mmu_on) sprs.ptcr = mfspr(SPRN_PTCR); sprs.rpr = mfspr(SPRN_RPR); sprs.tscr = mfspr(SPRN_TSCR); - sprs.ldbar = mfspr(SPRN_LDBAR); + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) + sprs.ldbar = mfspr(SPRN_LDBAR); sprs_saved = true; @@ -762,7 +763,8 @@ static unsigned long power9_idle_stop(unsigned long psscr, bool mmu_on) mtspr(SPRN_PTCR, sprs.ptcr); mtspr(SPRN_RPR, sprs.rpr); mtspr(SPRN_TSCR, sprs.tscr); - mtspr(SPRN_LDBAR, sprs.ldbar); + if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR)) + mtspr(SPRN_LDBAR, sprs.ldbar); if (pls >= pnv_first_tb_loss_level) { /* TB loss */ diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c index 1b6932890a73..e9b641d313fb 100644 --- a/arch/powerpc/platforms/powernv/opal-imc.c +++ b/arch/powerpc/platforms/powernv/opal-imc.c @@ -254,6 +254,13 @@ static int opal_imc_counters_probe(struct platform_device *pdev) bool core_imc_reg = false, thread_imc_reg = false; u32 type; + /* + * When the Ultravisor is enabled, it is responsible for thread-imc + * updates + */ + if (firmware_has_feature(FW_FEATURE_ULTRAVISOR)) + return -EACCES; + /* * Check whether this is kdump kernel. If yes, force the engines to * stop and return.