• Benjamin Herrenschmidt's avatar
    powerpc: Disable HFSCR[TM] if TM is not supported · 70e55aaf
    Benjamin Herrenschmidt authored
    commit 7ed23e1b 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: 2a3563b0 ("powerpc: Setup in HFSCR for POWER8")
    Cc: stable@vger.kernel.org # v3.10+
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Tested-by: default avatarSam Bobroff <sam.bobroff@au1.ibm.com>
    [mpe: Rewrite change log with input from Sam, add Fixes/stable]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    [sb: Backported to linux-4.4.y: adjusted context]
    Signed-off-by: default avatarSam Bobroff <sam.bobroff@au1.ibm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    70e55aaf
setup_64.c 21.7 KB