• Paul E. McKenney's avatar
    lib: Add one-byte emulation function · a88d970c
    Paul E. McKenney authored
    Architectures are required to provide four-byte cmpxchg() and 64-bit
    architectures are additionally required to provide eight-byte cmpxchg().
    However, there are cases where one-byte cmpxchg() would be extremely
    useful.  Therefore, provide cmpxchg_emu_u8() that emulates one-byte
    cmpxchg() in terms of four-byte cmpxchg().
    
    Note that this emulations is fully ordered, and can (for example) cause
    one-byte cmpxchg_relaxed() to incur the overhead of full ordering.
    If this causes problems for a given architecture, that architecture is
    free to provide its own lighter-weight primitives.
    
    [ paulmck: Apply Marco Elver feedback. ]
    [ paulmck: Apply kernel test robot feedback. ]
    [ paulmck: Drop two-byte support per Arnd Bergmann feedback. ]
    
    Link: https://lore.kernel.org/all/0733eb10-5e7a-4450-9b8a-527b97c842ff@paulmck-laptop/Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Acked-by: default avatarMarco Elver <elver@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
    Cc: Douglas Anderson <dianders@chromium.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: <linux-arch@vger.kernel.org>
    a88d970c
cmpxchg-emu.c 1.06 KB