[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <201312021858.48074.sw@simonwunderlich.de>
Date: Mon, 2 Dec 2013 18:58:47 +0100
From: Simon Wunderlich <sw@...onwunderlich.de>
To: David Miller <davem@...emloft.net>
Cc: linux@....linux.org.uk, mareklindner@...mailbox.ch,
antonio@...hcoding.com, b.a.t.m.a.n@...ts.open-mesh.org,
netdev@...r.kernel.org
Subject: Re: [PATCH] Fix ARM BUILD_BUG_ON() errors with batman-adv
David,
> From: Russell King - ARM Linux <linux@....linux.org.uk>
> Date: Sat, 30 Nov 2013 19:15:53 +0000
>
> > so there should be no undesired side effect from this packing.
>
> There is a huge side effect from ever using the packed attribute, in
> that the compiler can assume absolutely nothing about the alignment of
> any object or sub-object of the type you apply this attribute to.
>
> Even if it is "obvious" that some members will be aligned, the
> compiler cannot take advantage of this assumption because this
> attribute also means that an array of such elements might have
> arbitrary alignment. So you when you get a pointer to one of these
> objects, the compiler has to assume the worst possible case.
>
> This means using 4 byte loads to load a 32-bit quantity, always,
> unconditionally, no matter what.
>
> That's why we should do whatever is necessary to align things properly
> by hand, and use packed only as the last possible and least desirable
> resort.
so far we have two feasible options how to handle batadv_header:
1) Russells patch
2) unrolling these 3 bytes of header into every packet structure
I understand your concerns for __packed in generally, but in this case it
might not be that bad:
* batadv_header is only used by embedding it in other structs (like
batadv_unicast_packet, batadv_broadcast_packet ...) which are well aligned - I
guess there should be no performance problem when accessing through the parent
structure (like unicast_packet->header.version)
* there is one exception in batadv_interface_rx() where we use this
batadv_header directly, but we can easily replace that by using e.g.
batadv_bcast_packet instead.
* It's easier to read and maintain than copying these 3 bytes in every other
structure.
Therefore I'd suggest to pick Russels patch, I can send a fix for
batadv_interface_rx() later, too.
Thanks,
Simon
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists