Kent! On Sun, Jun 02 2024 at 20:33, Kent Overstreet wrote: > +/* > + * ringbuffer_ptrs - head and tail pointers for a ringbuffer, mappped to > + * userspace: > + */ > +struct ringbuffer_ptrs { The naming is confusing. ringbuffer_ctrl or something like that would be more clear because it's more than just the pointers, which are in fact positions. You have size, mask ... too, no? > + /* > + * We use u32s because this type is shared between the kernel and > + * userspace - ulong/size_t won't work here, we might be 32bit userland > + * and 64 bit kernel, and u64 would be preferable (reduced probability > + * of ABA) but not all architectures can atomically read/write to a u64; > + * we need to avoid torn reads/writes. union rbmagic { u64 __val64; struct { // TOOTIRED: Add big/little endian voodoo u32 __val32; u32 __unused; }; }; Plus a bunch of accessors which depend on BITS_PER_LONG, no? Thanks, tglx