Re: mac80211 truesize bugs
flat view
From: Johannes Berg <hidden>
Date: 2008-05-04 01:42:34
Also in:
linux-wireless
quoted
Why don't we update the socket allocation when doing pskb_expand_head()? Sure, it could become negative, but is that so bad?The socket locked state at this time is variable and unknown. The socket must be locked in order to modify these values. And such locks cannot be taken, for example, from HW interrupt context, amongst other restrictions.
Ok, that makes sense.
quoted
We need more space though. Should we then just increase the built-in headroom?I simply don't know what to suggest at this point, that's why we are having this discussion :-)
I'm still not sure about the dependencies between LL_MAX_HEADER, dev->hard_header_len and similar. Why, for example, does ipip set it to LL_MAX_HEADER + sizeof(struct iphdr)? Because it doesn't know better since the packets it creates could be routed anywhere? Could mac80211 announce it needs a very long hard_header_len (say 48 (or 54) bytes)? Am I right in thinking that then we'd have to increase LL_MAX_HEADER as well? I haven't found a check somewhere that warns you if you set dev->hard_header_len > LL_MAX_HEADER, should there be one? If I increase dev->hard_header_len, will that have any negative impact on the caching since I'm still just using regular ethernet headers? As far as I understand we have a few options: (a) go along with it as we do now, use pskb_expand_head, just call skb_orphan before. I assume this has a number of requirements just like sock size accounting would have, does this work from within a hard_start_xmit path? I haven't seen any problems with it so far anyway. (b) clone the skb and free the original. pretty much equivalent (c) increase hard_header_len/LL_MAX_HEADER constants to 48 (54). Options (a) and (b) make the accounting pretty useless since that would drop the charge to the socket quite early. (c) doesn't seem to work, I tried just increasing LL_MAX_HEADER doesn't seem to help although MAX_TCP_HEADER suggests it should be getting enough headroom then. Ideally, we'd have enough headroom in the skb to start with, since right now we're apparently reallocating a lot, especially encrypted frames. Not that I understand why we don't get a truesize bug (without the monitors) when we do that. With smart hardware like b43 we could even think about putting the 802.11 header stuff into a separate buffer and have the hardware to gather-dma but there are so many dumb usb devices that this won't help much anyway. johannes
Attachments
- signature.asc [application/pgp-signature] 828 bytes