lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.16 026/272] powerpc/64s: Clear PCR on boot
    Date
    4.16-stable review patch.  If anyone has any objections, please let me know.

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

    From: Michael Neuling <mikey@neuling.org>

    commit faf37c44a105f3608115785f17cbbf3500f8bc71 upstream.

    Clear the PCR (Processor Compatibility Register) on boot to ensure we
    are not running in a compatibility mode.

    We've seen this cause problems when a crash (and kdump) occurs while
    running compat mode guests. The kdump kernel then runs with the PCR
    set and causes problems. The symptom in the kdump kernel (also seen in
    petitboot after fast-reboot) is early userspace programs taking
    sigills on newer instructions (seen in libc).

    Signed-off-by: Michael Neuling <mikey@neuling.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kernel/cpu_setup_power.S | 6 ++++++
    arch/powerpc/kernel/dt_cpu_ftrs.c | 1 +
    2 files changed, 7 insertions(+)

    --- a/arch/powerpc/kernel/cpu_setup_power.S
    +++ b/arch/powerpc/kernel/cpu_setup_power.S
    @@ -28,6 +28,7 @@ _GLOBAL(__setup_cpu_power7)
    beqlr
    li r0,0
    mtspr SPRN_LPID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    li r4,(LPCR_LPES1 >> LPCR_LPES_SH)
    bl __init_LPCR_ISA206
    @@ -41,6 +42,7 @@ _GLOBAL(__restore_cpu_power7)
    beqlr
    li r0,0
    mtspr SPRN_LPID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    li r4,(LPCR_LPES1 >> LPCR_LPES_SH)
    bl __init_LPCR_ISA206
    @@ -57,6 +59,7 @@ _GLOBAL(__setup_cpu_power8)
    beqlr
    li r0,0
    mtspr SPRN_LPID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    ori r3, r3, LPCR_PECEDH
    li r4,0 /* LPES = 0 */
    @@ -78,6 +81,7 @@ _GLOBAL(__restore_cpu_power8)
    beqlr
    li r0,0
    mtspr SPRN_LPID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    ori r3, r3, LPCR_PECEDH
    li r4,0 /* LPES = 0 */
    @@ -99,6 +103,7 @@ _GLOBAL(__setup_cpu_power9)
    mtspr SPRN_PSSCR,r0
    mtspr SPRN_LPID,r0
    mtspr SPRN_PID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE | LPCR_HEIC)
    or r3, r3, r4
    @@ -123,6 +128,7 @@ _GLOBAL(__restore_cpu_power9)
    mtspr SPRN_PSSCR,r0
    mtspr SPRN_LPID,r0
    mtspr SPRN_PID,r0
    + mtspr SPRN_PCR,r0
    mfspr r3,SPRN_LPCR
    LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE | LPCR_HEIC)
    or r3, r3, r4
    --- a/arch/powerpc/kernel/dt_cpu_ftrs.c
    +++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
    @@ -114,6 +114,7 @@ static void __restore_cpu_cpufeatures(vo
    if (hv_mode) {
    mtspr(SPRN_LPID, 0);
    mtspr(SPRN_HFSCR, system_registers.hfscr);
    + mtspr(SPRN_PCR, 0);
    }
    mtspr(SPRN_FSCR, system_registers.fscr);


    \
     
     \ /
      Last update: 2018-05-28 14:08    [W:5.599 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site