• Mark Rutland's avatar
    atomics/treewide: Clean up '*_andnot()' ifdeffery · 7cc7eaad
    Mark Rutland authored
    The ifdeffery for atomic*_{fetch_,}andnot() is unlike that for all the
    other atomics. If atomic*_andnot() is not defined, the corresponding
    atomic*_fetch_andnot() is assumed to not be defined.
    
    Additionally, the fallbacks for the various ordering cases are written
    much later in atomic.h as static inlines.
    
    This isn't problematic today, but gets in the way of scripting the
    generation of atomics. To prepare for scripting, this patch:
    
    * Switches to separate ifdefs for atomic*_andnot() and
      atomic*_fetch_andnot(), updating implementations as appropriate.
    
    * Moves the fallbacks into the standards ifdefs, as macro expansions
      rather than static inlines.
    
    * Removes trivial andnot implementations from architectures, where these
      are superseded by core code.
    
    There should be no functional change as a result of this patch.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/lkml/20180621121321.4761-19-mark.rutland@arm.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    7cc7eaad
atomic.h 13.4 KB