lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 554/717] s390/idle: fix accounting with machine checks
    Date
    From: Sven Schnelle <svens@linux.ibm.com>

    commit 454efcf82ea17d7efeb86ebaa20775a21ec87d27 upstream.

    When a machine check interrupt is triggered during idle, the code
    is using the async timer/clock for idle time calculation. It should use
    the machine check enter timer/clock which is passed to the macro.

    Fixes: 0b0ed657fe00 ("s390: remove critical section cleanup from entry.S")
    Cc: <stable@vger.kernel.org> # 5.8
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/s390/kernel/entry.S | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    --- a/arch/s390/kernel/entry.S
    +++ b/arch/s390/kernel/entry.S
    @@ -110,7 +110,7 @@ _LPP_OFFSET = __LC_LPP
    #endif
    .endm

    - .macro SWITCH_ASYNC savearea,timer
    + .macro SWITCH_ASYNC savearea,timer,clock
    tmhh %r8,0x0001 # interrupting from user ?
    jnz 4f
    #if IS_ENABLED(CONFIG_KVM)
    @@ -143,8 +143,8 @@ _LPP_OFFSET = __LC_LPP
    la %r4,8(%r4)
    brct %r1,1b

    -2: mvc __CLOCK_IDLE_EXIT(8,%r2), __LC_INT_CLOCK
    - mvc __TIMER_IDLE_EXIT(8,%r2), __LC_ASYNC_ENTER_TIMER
    +2: mvc __CLOCK_IDLE_EXIT(8,%r2), \clock
    + mvc __TIMER_IDLE_EXIT(8,%r2), \timer
    # account system time going idle
    ni __LC_CPU_FLAGS+7,255-_CIF_ENABLED_WAIT

    @@ -761,7 +761,7 @@ ENTRY(io_int_handler)
    stmg %r8,%r15,__LC_SAVE_AREA_ASYNC
    lg %r12,__LC_CURRENT
    lmg %r8,%r9,__LC_IO_OLD_PSW
    - SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
    + SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER,__LC_INT_CLOCK
    stmg %r0,%r7,__PT_R0(%r11)
    # clear user controlled registers to prevent speculative use
    xgr %r0,%r0
    @@ -961,7 +961,7 @@ ENTRY(ext_int_handler)
    stmg %r8,%r15,__LC_SAVE_AREA_ASYNC
    lg %r12,__LC_CURRENT
    lmg %r8,%r9,__LC_EXT_OLD_PSW
    - SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
    + SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER,__LC_INT_CLOCK
    stmg %r0,%r7,__PT_R0(%r11)
    # clear user controlled registers to prevent speculative use
    xgr %r0,%r0
    @@ -1183,7 +1183,7 @@ ENTRY(mcck_int_handler)
    TSTMSK __LC_MCCK_CODE,MCCK_CODE_PSW_IA_VALID
    jno .Lmcck_panic
    4: ssm __LC_PGM_NEW_PSW # turn dat on, keep irqs off
    - SWITCH_ASYNC __LC_GPREGS_SAVE_AREA+64,__LC_MCCK_ENTER_TIMER
    + SWITCH_ASYNC __LC_GPREGS_SAVE_AREA+64,__LC_MCCK_ENTER_TIMER,__LC_MCCK_CLOCK
    .Lmcck_skip:
    lghi %r14,__LC_GPREGS_SAVE_AREA+64
    stmg %r0,%r7,__PT_R0(%r11)

    \
     
     \ /
      Last update: 2020-12-28 15:26    [W:4.018 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site