Re: Re: [PATCH v3 7/9] KVM: PPC: Ultravisor: Restrict LDBAR access
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 > > Signed-off-by: Ram Pai > > Acked-by: Paul Mackerras > > 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
Re: [PATCH v3 7/9] KVM: PPC: Ultravisor: Restrict LDBAR access
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 > Signed-off-by: Ram Pai Acked-by: Paul Mackerras 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.
Re: [PATCH v3 7/9] KVM: PPC: Ultravisor: Restrict LDBAR access
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 >> Signed-off-by: Ram Pai >> --- >> 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 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.
Re: [PATCH v3 7/9] KVM: PPC: Ultravisor: Restrict LDBAR access
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 Signed-off-by: Ram Pai --- 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 + if (firmware_has_feature(FW_FEATURE_ULTRAVISOR)) + return -EACCES; + /* * Check whether this is kdump kernel. If yes, force the engines to * stop and return.
[PATCH v3 7/9] KVM: PPC: Ultravisor: Restrict LDBAR access
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 Signed-off-by: Ram Pai --- 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 +*/ + if (firmware_has_feature(FW_FEATURE_ULTRAVISOR)) + return -EACCES; + /* * Check whether this is kdump kernel. If yes, force the engines to * stop and return. -- 2.20.1