----- On Jul 2, 2018, at 7:22 PM, Linus Torvalds torva...@linux-foundation.org wrote:
> On Mon, Jul 2, 2018 at 4:17 PM Mathieu Desnoyers > <mathieu.desnoy...@efficios.com> wrote: >> >> Are there any kind of guarantees that a __u64 update on a 32-bit architecture >> won't be torn into something daft like byte-per-byte stores when performed >> from C code ? > > Guarantees? No. Not that there are any guarantees that the same won't > happen for a plain 32-bit value either. > > Will compilers generate that kind of code? I guess some crazy compiler > could simply be really bad at handling 64-bit values, and just happen > to handle 32-bit values better. So in that sense a 64-bit entity is > certainly a bit riskier. But that would be a really bad compiler, I > have to say. Given that the only C code updating that field is rseq_prepare_unload() (the rest is only ever updated from assembly), we could perhaps mandate that user-space always update it from assembly, and therefore implement rseq_prepare_unload as an inline asm which clears rseq->rseq_cs. Does it sound better than the LINUX_FIELD_u32_u64 macro ? Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com