On 12.12.19 19:06, Will Deacon wrote: > On Thu, Dec 12, 2019 at 09:41:32AM -0800, Linus Torvalds wrote: >> On Thu, Dec 12, 2019 at 2:46 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: >>> >>> +#ifdef GCC_VERSION < 40800 >> >> Where does that 4.8 version check come from, and why? >> >> Yeah, I know, but this really wants a comment. Sadly it looks like gcc >> bugzilla is down, so >> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 >> >> currently gives an "Internal Server Error" for me. >> >> [ Delete the horrid code we have because of gcc bugs ] >> >>> +#else /* GCC_VERSION < 40800 */ >>> + >>> +#define READ_ONCE_NOCHECK(x) \ >>> +({ \ >>> + typeof(x) __x = *(volatile typeof(x))&(x); \ >> >> I think we can/should just do this unconditionally if it helps th eissue. > > I'm currently trying to solve the issue by removing volatile from the bitop > function signatures, but it's grotty because there are quite a few callers > to fix up. I'm still trying to do it, because removing volatile fields from > structurs is generally a "good thing", but I'd be keen to simplify > READ_ONCE() as you suggest regardless. As I am the one who added the foundation of READ_ONCEs uglyness, I am now in favour of re-simplifying it again. I was first a bit scared about re-introducing bugs, but the gcc testsuite has this particular case covered, so hopefully we should not see the issue with volatile and aggregate types again. Christian