From: Arnd Bergmann > Sent: 14 August 2018 12:08 ... > > There are also a whole load of crappy __packed in that header file. > > There might be one or two 64bit items on 32bit boundaries but > > that can be solved without using __packed. > > Agreed, this likely causes problems on architectures without unaligned > load/store instructions that end up doing byte accesses to the descriptor > fields, which in turn can confuse the hardware, and can become very > slow when they live in dma_alloc_coherent() memory. That looks > like a completely unrelated issue though.
If you ever define a variable of one of those types (or embed one in another structure that contains non-word sized items) you'll get the entire structure misaligned. I doubt that is what you had in mind. Maybe you could use __packed __attribute__((aligned(4))). But it is much better just to use a 64bit type with only 4 byte alignment (I think there is a standard one in one of the header files). I'd also add a compile-time assert on the length of the non-trivial structures. That will detect all sorts of errors. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)