lkml.org 
[lkml]   [2022]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 133/230] powerpc/vdso: Remove cvdso_call_time macro
    Date
    From: Christophe Leroy <christophe.leroy@csgroup.eu>

    [ Upstream commit 9b97bea90072a075363a200dd7b54ad4a24e9491 ]

    cvdso_call_time macro is very similar to cvdso_call macro.

    Add a call_time argument to cvdso_call which is 0 by default
    and set to 1 when using cvdso_call to call __c_kernel_time().

    Return returned value as is with CR[SO] cleared when it is used
    for time().

    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/837a260ad86fc1ce297a562c2117fd69be5f7b5c.1642782130.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/include/asm/vdso/gettimeofday.h | 37 ++++++--------------
    arch/powerpc/kernel/vdso32/gettimeofday.S | 2 +-
    2 files changed, 11 insertions(+), 28 deletions(-)

    diff --git a/arch/powerpc/include/asm/vdso/gettimeofday.h b/arch/powerpc/include/asm/vdso/gettimeofday.h
    index 1faff0be1111..df00e91c9a90 100644
    --- a/arch/powerpc/include/asm/vdso/gettimeofday.h
    +++ b/arch/powerpc/include/asm/vdso/gettimeofday.h
    @@ -9,12 +9,12 @@
    #include <asm/ppc_asm.h>

    /*
    - * The macros sets two stack frames, one for the caller and one for the callee
    + * The macro sets two stack frames, one for the caller and one for the callee
    * because there are no requirement for the caller to set a stack frame when
    * calling VDSO so it may have omitted to set one, especially on PPC64
    */

    -.macro cvdso_call funct
    +.macro cvdso_call funct call_time=0
    .cfi_startproc
    PPC_STLU r1, -PPC_MIN_STKFRM(r1)
    mflr r0
    @@ -25,45 +25,28 @@
    PPC_STL r2, PPC_MIN_STKFRM + STK_GOT(r1)
    #endif
    get_datapage r5
    + .ifeq \call_time
    addi r5, r5, VDSO_DATA_OFFSET
    + .else
    + addi r4, r5, VDSO_DATA_OFFSET
    + .endif
    bl DOTSYM(\funct)
    PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1)
    #ifdef __powerpc64__
    PPC_LL r2, PPC_MIN_STKFRM + STK_GOT(r1)
    #endif
    + .ifeq \call_time
    cmpwi r3, 0
    + .endif
    mtlr r0
    .cfi_restore lr
    addi r1, r1, 2 * PPC_MIN_STKFRM
    crclr so
    + .ifeq \call_time
    beqlr+
    crset so
    neg r3, r3
    - blr
    - .cfi_endproc
    -.endm
    -
    -.macro cvdso_call_time funct
    - .cfi_startproc
    - PPC_STLU r1, -PPC_MIN_STKFRM(r1)
    - mflr r0
    - .cfi_register lr, r0
    - PPC_STLU r1, -PPC_MIN_STKFRM(r1)
    - PPC_STL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1)
    -#ifdef __powerpc64__
    - PPC_STL r2, PPC_MIN_STKFRM + STK_GOT(r1)
    -#endif
    - get_datapage r4
    - addi r4, r4, VDSO_DATA_OFFSET
    - bl DOTSYM(\funct)
    - PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1)
    -#ifdef __powerpc64__
    - PPC_LL r2, PPC_MIN_STKFRM + STK_GOT(r1)
    -#endif
    - crclr so
    - mtlr r0
    - .cfi_restore lr
    - addi r1, r1, 2 * PPC_MIN_STKFRM
    + .endif
    blr
    .cfi_endproc
    .endm
    diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S
    index d21d08140a5e..9b3ac09423c8 100644
    --- a/arch/powerpc/kernel/vdso32/gettimeofday.S
    +++ b/arch/powerpc/kernel/vdso32/gettimeofday.S
    @@ -63,7 +63,7 @@ V_FUNCTION_END(__kernel_clock_getres)
    *
    */
    V_FUNCTION_BEGIN(__kernel_time)
    - cvdso_call_time __c_kernel_time
    + cvdso_call __c_kernel_time call_time=1
    V_FUNCTION_END(__kernel_time)

    /* Routines for restoring integer registers, called by the compiler. */
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-11 11:58    [W:4.361 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site