----- On Jul 2, 2018, at 7:22 PM, Linus Torvalds torvalds@xxxxxxxxxxxxxxxxxxxx wrote: > On Mon, Jul 2, 2018 at 4:17 PM Mathieu Desnoyers > <mathieu.desnoyers@xxxxxxxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html