This is a sweep of the tree to remove volatile qualifier from bitops, and I
have then tried to fix the resulting fallout. This will be split up as
individual patches before submission, but for now I include the entire thing
The benefit of this is to relieve the compiler of the constraints demanded
by volatile, we get a smaller icache footprint, generally due to fewer loads
and stores. It saves over 20k of text on an allyesconfig on x86-64. (BTW. gcc
really does some idiotic things when inline is nooped: it out of lines things
The downside is that we can no longer use bitops on volatile data types, but
there are very few users of this, and it would be nice to convert them away
from volatile anyway. I have attempted to do that here:
s2io: only affected is use of test_bit on a previously volatile type. btw:
set_bit and clear_bit do not provide SMP ordering guarantees, in
particular they can't be used for critical sections. Just be careful
eg. with __S2IO_STATE_LINK_TASK bit.
drm: Made wrapped and context_state non volatile. Remember set_bit and
clear_bit can't be used to open and close a critical section (is
wrapped OK here?).
3w-xxxx: made flags non volatile. Only test_bit should be affected.
sn2: small change to sn_ack_irq and sn_end_irq... I know ia64 guys have
been known to rely on gcc generating hardware barriers with volatile.
Please take a look.
Cc: Dave Airlie <email@example.com>
Documentation/atomic_ops.txt | 26 ++++++-------