From: Keith Busch > Sent: 03 March 2022 20:13 > > The NVMe protocol extended the data integrity fields with unaligned > 48-bit reference tags. If they are reference tags, are they only interpreted by the sending system? In which case they don't need to be big-endian since the actual value doesn't really matter. > Provide some helper accessors in preparation for these. > ... > diff --git a/include/asm-generic/unaligned.h b/include/asm-generic/unaligned.h > index 1c4242416c9f..8fc637379899 100644 > --- a/include/asm-generic/unaligned.h > +++ b/include/asm-generic/unaligned.h > @@ -126,4 +126,30 @@ static inline void put_unaligned_le24(const u32 val, void *p) > __put_unaligned_le24(val, p); > } > > +static inline void __put_unaligned_be48(const u64 val, __u8 *p) > +{ > + *p++ = val >> 40; > + *p++ = val >> 32; > + *p++ = val >> 24; > + *p++ = val >> 16; > + *p++ = val >> 8; > + *p++ = val; > +} Although that matches __put_unaligned_be24() I think I'd use array indexing not pointer increments. The compiler will probably generate the same code anyway. However it is probably better to do: put_unaligned_be16(val >> 32, p); put_unaligned_be32(val, p + 2); so you get 2 memory accesses on x86 (etc) instead of 6. Similarly for __get_unaligned_be48() where it is likely so make a bigger difference. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)