lkml.org 
[lkml]   [2016]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.5 064/200] powerpc: scan_features() updates incorrect bits for REAL_LE
    Date
    4.5-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Anton Blanchard <anton@samba.org>

    commit 6997e57d693b07289694239e52a10d2f02c3a46f upstream.

    The REAL_LE feature entry in the ibm_pa_feature struct is missing an MMU
    feature value, meaning all the remaining elements initialise the wrong
    values.

    This means instead of checking for byte 5, bit 0, we check for byte 0,
    bit 0, and then we incorrectly set the CPU feature bit as well as MMU
    feature bit 1 and CPU user feature bits 0 and 2 (5).

    Checking byte 0 bit 0 (IBM numbering), means we're looking at the
    "Memory Management Unit (MMU)" feature - ie. does the CPU have an MMU.
    In practice that bit is set on all platforms which have the property.

    This means we set CPU_FTR_REAL_LE always. In practice that seems not to
    matter because all the modern cpus which have this property also
    implement REAL_LE, and we've never needed to disable it.

    We're also incorrectly setting MMU feature bit 1, which is:

    #define MMU_FTR_TYPE_8xx 0x00000002

    Luckily the only place that looks for MMU_FTR_TYPE_8xx is in Book3E
    code, which can't run on the same cpus as scan_features(). So this also
    doesn't matter in practice.

    Finally in the CPU user feature mask, we're setting bits 0 and 2. Bit 2
    is not currently used, and bit 0 is:

    #define PPC_FEATURE_PPC_LE 0x00000001

    Which says the CPU supports the old style "PPC Little Endian" mode.
    Again this should be harmless in practice as no 64-bit CPUs implement
    that mode.

    Fix the code by adding the missing initialisation of the MMU feature.

    Also add a comment marking CPU user feature bit 2 (0x4) as reserved. It
    would be unsafe to start using it as old kernels incorrectly set it.

    Fixes: 44ae3ab3358e ("powerpc: Free up some CPU feature bits by moving out MMU-related features")
    Signed-off-by: Anton Blanchard <anton@samba.org>
    [mpe: Flesh out changelog, add comment reserving 0x4]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/include/uapi/asm/cputable.h | 1 +
    arch/powerpc/kernel/prom.c | 2 +-
    2 files changed, 2 insertions(+), 1 deletion(-)

    --- a/arch/powerpc/include/uapi/asm/cputable.h
    +++ b/arch/powerpc/include/uapi/asm/cputable.h
    @@ -31,6 +31,7 @@
    #define PPC_FEATURE_PSERIES_PERFMON_COMPAT \
    0x00000040

    +/* Reserved - do not use 0x00000004 */
    #define PPC_FEATURE_TRUE_LE 0x00000002
    #define PPC_FEATURE_PPC_LE 0x00000001

    --- a/arch/powerpc/kernel/prom.c
    +++ b/arch/powerpc/kernel/prom.c
    @@ -158,7 +158,7 @@ static struct ibm_pa_feature {
    {CPU_FTR_NOEXECUTE, 0, 0, 0, 6, 0},
    {CPU_FTR_NODSISRALIGN, 0, 0, 1, 1, 1},
    {0, MMU_FTR_CI_LARGE_PAGE, 0, 1, 2, 0},
    - {CPU_FTR_REAL_LE, PPC_FEATURE_TRUE_LE, 5, 0, 0},
    + {CPU_FTR_REAL_LE, 0, PPC_FEATURE_TRUE_LE, 5, 0, 0},
    /*
    * If the kernel doesn't support TM (ie. CONFIG_PPC_TRANSACTIONAL_MEM=n),
    * we don't want to turn on CPU_FTR_TM here, so we use CPU_FTR_TM_COMP

    \
     
     \ /
      Last update: 2016-05-03 03:41    [W:2.725 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site