On Mon, Sep 16, 2013 at 12:08 AM, Rusty Russell <ru...@rustcorp.com.au> wrote: > Predates git, does anyone remember the rationale? > > ie: > int test_bit(int nr, const volatile unsigned long *addr)
Both of Stephen Rothwell's guesses are correct. One reason is that we used to use "volatile" a lot more than we do now, and "const volatile *" is the most permissive pointer that allows any use without warnings. We've largely stopped using "volatile" in favor of explicit barriers and locks (ie "cpu_relax()" and "barrier()") and explicit volatility in code (ACCESS_ONCE() and "rcu_access_pointer()" etc). The other reasons is for fear of having some old code that does effectively while (condition) /* nothing */ using "test_bit()", and forcing a reload. They used to happen. They were rare even before, and I'd hope they are nonexistent now, but they were real. We could try to see what happens if we remove "volatile" from the bitops these days. But the scary part is all the random drivers potentially doing that second thing. So it's not exactly easily testable. It would need to be worth it to bother. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/