lkml.org 
[lkml]   [2023]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] arch/powerpc/include/asm/barrier.h: redefine rmb and wmb to lwsync
    Date
    A link from ibm.com states:
    "Ensures that all instructions preceding the call to __lwsync
    complete before any subsequent store instructions can be executed
    on the processor that executed the function. Also, it ensures that
    all load instructions preceding the call to __lwsync complete before
    any subsequent load instructions can be executed on the processor
    that executed the function. This allows you to synchronize between
    multiple processors with minimal performance impact, as __lwsync
    does not wait for confirmation from each processor."

    Thats why smp_rmb() and smp_wmb() are defined to lwsync.
    But this same understanding applies to parallel pipeline
    execution on each PowerPC processor.
    So, use the lwsync instruction for rmb() and wmb() on the PPC
    architectures that support it.

    Also removed some useless spaces.

    Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
    ---
    arch/powerpc/include/asm/barrier.h | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h
    index e80b2c0e9315..553f5a5d20bd 100644
    --- a/arch/powerpc/include/asm/barrier.h
    +++ b/arch/powerpc/include/asm/barrier.h
    @@ -41,11 +41,17 @@

    /* The sub-arch has lwsync */
    #if defined(CONFIG_PPC64) || defined(CONFIG_PPC_E500MC)
    -# define SMPWMB LWSYNC
    +#undef rmb
    +#undef wmb
    +/* Redefine rmb() to lwsync. */
    +#define rmb() ({__asm__ __volatile__ ("lwsync" : : : "memory"); })
    +/* Redefine wmb() to lwsync. */
    +#define wmb() ({__asm__ __volatile__ ("lwsync" : : : "memory"); })
    +#define SMPWMB LWSYNC
    #elif defined(CONFIG_BOOKE)
    -# define SMPWMB mbar
    +#define SMPWMB mbar
    #else
    -# define SMPWMB eieio
    +#define SMPWMB eieio
    #endif

    /* clang defines this macro for a builtin, which will not work with runtime patching */
    --
    2.31.1
    \
     
     \ /
      Last update: 2023-03-27 00:32    [W:4.414 / U:1.820 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site