On Thu, Mar 2, 2017 at 5:51 PM, Christian Borntraeger borntraeger@de.ibm.com wrote:
On 03/02/2017 05:38 PM, Arnd Bergmann wrote:
This attempts a rewrite of the two macros, using a simpler implementation for the most common case of having a naturally aligned 1, 2, 4, or (on 64-bit architectures) 8 byte object that can be accessed with a single instruction. For these, we go back to a volatile pointer dereference that we had with the ACCESS_ONCE macro.
We had changed that back then because gcc 4.6 and 4.7 had a bug that could removed the volatile statement on aggregate types like the following one
union ipte_control { unsigned long val; struct { unsigned long k : 1; unsigned long kh : 31; unsigned long kg : 32; }; };
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145
If I see that right, your __ALIGNED_WORD(x) macro would say that for above structure sizeof(x) == sizeof(long)) is true, so it would fall back to the old volatile cast and might reintroduce the old compiler bug?
Ah, right, that's the missing piece. For some reason I didn't find the reference in the source or the git log.
Could you maybe you fence your simple macro for anything older than 4.9? After all there was no kasan support anyway on these older gcc version.
Yes, that should work, thanks!
Arnd