MTD pointer alignment

Gavin Lambert gavinl at compacsort.com
Mon Dec 4 16:11:32 EST 2006


Quoth David Woodhouse [dwmw2 at infradead.org]:
> That's news to me. If we don't always align to sizeof(int)
> and have appropriate (i.e. three bytes) padding after the
> initial 'char' field, then surely the 'int' fields are
> sometimes going to be misaligned?
> 
> What platform is this? Precisely how is it padded/aligned?

The int fields do get their natural alignment (ie. three bytes padding
after the initial char).  But that initial char (and the structure as a
whole) is not necessarily aligned on a four-byte boundary.

This is on Coldfire, using m68k-elf-gcc 3.4.4.

Test case for making it go wrong was embedding it in a structure similar
to this:

struct some_device
{
    u8 a_byte_field;
    struct mtd_info mtd;
    struct device dev;
};

The compiler inserted one single byte of padding between the byte field
and the MTD structure, making the structure aligned on a 2-byte
boundary, not a 4-byte one.


However I've now looked at the latest MTD sources (in 2.6.18) and it
looks like this issue may be moot, since file->private_data is now
pointing at some other structure rather than pointing directly at the
mtd_info.  I didn't check where you're keeping your OTP mode info now,
but as long as you're not hijacking bits then it shouldn't be a problem
:)





More information about the linux-mtd mailing list