lkml.org 
[lkml]   [2019]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 1/8] powerpc/32: Add VDSO version of getcpu on non SMP
    Date
    Commit 18ad51dd342a ("powerpc: Add VDSO version of getcpu") added
    getcpu() for PPC64 only, by making use of a user readable general
    purpose SPR.

    PPC32 doesn't have any such SPR.

    For non SMP, just return CPU id 0 from the VDSO directly.
    PPC32 doesn't support CONFIG_NUMA so NUMA node is always 0.

    Before the patch, vdsotest reported:
    getcpu: syscall: 1572 nsec/call
    getcpu: libc: 1787 nsec/call
    getcpu: vdso: not tested

    Now, vdsotest reports:
    getcpu: syscall: 1582 nsec/call
    getcpu: libc: 502 nsec/call
    getcpu: vdso: 187 nsec/call

    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>

    ---
    v2: fixed build error in getcpu.S
    v3: dropped the fast system call, only support non SMP for now.
    ---
    arch/powerpc/kernel/vdso32/Makefile | 4 +---
    arch/powerpc/kernel/vdso32/getcpu.S | 17 +++++++++++++++++
    arch/powerpc/kernel/vdso32/vdso32.lds.S | 2 +-
    3 files changed, 19 insertions(+), 4 deletions(-)

    diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile
    index 06f54d947057..e147bbdc12cd 100644
    --- a/arch/powerpc/kernel/vdso32/Makefile
    +++ b/arch/powerpc/kernel/vdso32/Makefile
    @@ -2,9 +2,7 @@

    # List of files in the vdso, has to be asm only for now

    -obj-vdso32-$(CONFIG_PPC64) = getcpu.o
    -obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o \
    - $(obj-vdso32-y)
    +obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o

    # Build rules

    diff --git a/arch/powerpc/kernel/vdso32/getcpu.S b/arch/powerpc/kernel/vdso32/getcpu.S
    index 63e914539e1a..90b39af14383 100644
    --- a/arch/powerpc/kernel/vdso32/getcpu.S
    +++ b/arch/powerpc/kernel/vdso32/getcpu.S
    @@ -15,6 +15,7 @@
    * int __kernel_getcpu(unsigned *cpu, unsigned *node);
    *
    */
    +#if defined(CONFIG_PPC64)
    V_FUNCTION_BEGIN(__kernel_getcpu)
    .cfi_startproc
    mfspr r5,SPRN_SPRG_VDSO_READ
    @@ -31,3 +32,19 @@ V_FUNCTION_BEGIN(__kernel_getcpu)
    blr
    .cfi_endproc
    V_FUNCTION_END(__kernel_getcpu)
    +#elif !defined(CONFIG_SMP)
    +V_FUNCTION_BEGIN(__kernel_getcpu)
    + .cfi_startproc
    + cmpwi cr0, r3, 0
    + cmpwi cr1, r4, 0
    + li r5, 0
    + beq cr0, 1f
    + stw r5, 0(r3)
    +1: li r3, 0 /* always success */
    + crclr cr0*4+so
    + beqlr cr1
    + stw r5, 0(r4)
    + blr
    + .cfi_endproc
    +V_FUNCTION_END(__kernel_getcpu)
    +#endif
    diff --git a/arch/powerpc/kernel/vdso32/vdso32.lds.S b/arch/powerpc/kernel/vdso32/vdso32.lds.S
    index 00c025ba4a92..5206c2eb2a1d 100644
    --- a/arch/powerpc/kernel/vdso32/vdso32.lds.S
    +++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S
    @@ -155,7 +155,7 @@ VERSION
    __kernel_sync_dicache_p5;
    __kernel_sigtramp32;
    __kernel_sigtramp_rt32;
    -#ifdef CONFIG_PPC64
    +#if defined(CONFIG_PPC64) || !defined(CONFIG_SMP)
    __kernel_getcpu;
    #endif

    --
    2.13.3
    \
     
     \ /
      Last update: 2019-10-29 10:54    [W:3.332 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site