stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 4.4] powerpc: Disable HFSCR[TM] if TM is not supported
       [not found] <20170410143523.7F791AC03A@b01ledav006.gho.pok.ibm.com>
@ 2017-04-19  6:53 ` Sam Bobroff
  2017-04-19 11:41   ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Sam Bobroff @ 2017-04-19  6:53 UTC (permalink / raw)
  To: gregkh, benh, mpe; +Cc: stable

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>

commit 7ed23e1bae8bf7e37fd555066550a00b95a3a98b upstream.

On Power8 & Power9 the early CPU inititialisation in __init_HFSCR()
turns on HFSCR[TM] (Hypervisor Facility Status and Control Register
[Transactional Memory]), but that doesn't take into account that TM
might be disabled by CPU features, or disabled by the kernel being built
with CONFIG_PPC_TRANSACTIONAL_MEM=n.

So later in boot, when we have setup the CPU features, clear HSCR[TM] if
the TM CPU feature has been disabled. We use CPU_FTR_TM_COMP to account
for the CONFIG_PPC_TRANSACTIONAL_MEM=n case.

Without this a KVM guest might try use TM, even if told not to, and
cause an oops in the host kernel. Typically the oops is seen in
__kvmppc_vcore_entry() and may or may not be fatal to the host, but is
always bad news.

In practice all shipping CPU revisions do support TM, and all host
kernels we are aware of build with TM support enabled, so no one should
actually be able to hit this in the wild.

Fixes: 2a3563b023e5 ("powerpc: Setup in HFSCR for POWER8")
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Tested-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
[mpe: Rewrite change log with input from Sam, add Fixes/stable]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[sb: Backported to linux-4.4.y: adjusted context]
Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
---
Hi Stable,

This is a fixed version of a patch that did not apply cleanly on
linux-4.4.y. The patch context had changed slightly.

Cheers,
Sam.

 arch/powerpc/kernel/setup_64.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 5c03a6a9b054..a20823210ac0 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -220,6 +220,15 @@ static void cpu_ready_for_interrupts(void)
 		unsigned long lpcr = mfspr(SPRN_LPCR);
 		mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
 	}
+
+	/*
+	 * Fixup HFSCR:TM based on CPU features. The bit is set by our
+	 * early asm init because at that point we haven't updated our
+	 * CPU features from firmware and device-tree. Here we have,
+	 * so let's do it.
+	 */
+	if (cpu_has_feature(CPU_FTR_HVMODE) && !cpu_has_feature(CPU_FTR_TM_COMP))
+		mtspr(SPRN_HFSCR, mfspr(SPRN_HFSCR) & ~HFSCR_TM);
 }
 
 /*
-- 
2.12.1.382.gc0f9c7058

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 4.4] powerpc: Disable HFSCR[TM] if TM is not supported
  2017-04-19  6:53 ` [PATCH 4.4] powerpc: Disable HFSCR[TM] if TM is not supported Sam Bobroff
@ 2017-04-19 11:41   ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2017-04-19 11:41 UTC (permalink / raw)
  To: Sam Bobroff; +Cc: benh, mpe, stable

On Wed, Apr 19, 2017 at 04:53:07PM +1000, Sam Bobroff wrote:
> From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> commit 7ed23e1bae8bf7e37fd555066550a00b95a3a98b upstream.
> 
> On Power8 & Power9 the early CPU inititialisation in __init_HFSCR()
> turns on HFSCR[TM] (Hypervisor Facility Status and Control Register
> [Transactional Memory]), but that doesn't take into account that TM
> might be disabled by CPU features, or disabled by the kernel being built
> with CONFIG_PPC_TRANSACTIONAL_MEM=n.
> 
> So later in boot, when we have setup the CPU features, clear HSCR[TM] if
> the TM CPU feature has been disabled. We use CPU_FTR_TM_COMP to account
> for the CONFIG_PPC_TRANSACTIONAL_MEM=n case.
> 
> Without this a KVM guest might try use TM, even if told not to, and
> cause an oops in the host kernel. Typically the oops is seen in
> __kvmppc_vcore_entry() and may or may not be fatal to the host, but is
> always bad news.
> 
> In practice all shipping CPU revisions do support TM, and all host
> kernels we are aware of build with TM support enabled, so no one should
> actually be able to hit this in the wild.
> 
> Fixes: 2a3563b023e5 ("powerpc: Setup in HFSCR for POWER8")
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Tested-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> [mpe: Rewrite change log with input from Sam, add Fixes/stable]
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> [sb: Backported to linux-4.4.y: adjusted context]
> Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> ---
> Hi Stable,
> 
> This is a fixed version of a patch that did not apply cleanly on
> linux-4.4.y. The patch context had changed slightly.

Thanks, now queued up!

greg k-h

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-04-19 11:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20170410143523.7F791AC03A@b01ledav006.gho.pok.ibm.com>
2017-04-19  6:53 ` [PATCH 4.4] powerpc: Disable HFSCR[TM] if TM is not supported Sam Bobroff
2017-04-19 11:41   ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).