• Kent Overstreet's avatar
    six locks: Kill six_lock_state union · 1fb4fe63
    Kent Overstreet authored
    As suggested by Linus, this drops the six_lock_state union in favor of
    raw bitmasks.
    
    On the one hand, bitfields give more type-level structure to the code.
    However, a significant amount of the code was working with
    six_lock_state as a u64/atomic64_t, and the conversions from the
    bitfields to the u64 were deemed a bit too out-there.
    
    More significantly, because bitfield order is poorly defined (#ifdef
    __LITTLE_ENDIAN_BITFIELD can be used, but is gross), incrementing the
    sequence number would overflow into the rest of the bitfield if the
    compiler didn't put the sequence number at the high end of the word.
    
    The new code is a bit saner when we're on an architecture without real
    atomic64_t support - all accesses to lock->state now go through
    atomic64_*() operations.
    
    On architectures with real atomic64_t support, we additionally use
    atomic bit ops for setting/clearing individual bits.
    
    Text size: 7467 bytes -> 4649 bytes - compilers still suck at
    bitfields.
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    1fb4fe63
trace.h 30.9 KB