Gertjan van Wingerde a écrit : > On 11/28/09 22:26, Ivo van Doorn wrote: >>> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c >>> index b8f0954..562a344 100644 >>> --- a/drivers/net/wireless/rt2x00/rt2x00queue.c >>> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c >>> @@ -181,7 +181,7 @@ void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length) >>> unsigned int frame_length = skb->len; >>> unsigned int header_align = ALIGN_SIZE(skb, 0); >>> unsigned int payload_align = ALIGN_SIZE(skb, header_length); >>> - unsigned int l2pad = 4 - (payload_align - header_align); >>> + unsigned int l2pad = 4 - (header_length & 3); Humm... is header_length = 24, then your formula gives l2pad = 4. If so, this is wrong. Do I miss something? BTW, I'm trying to prepare some patches for rt2800usb and padding. I must admit the current framework is a bit complex compared to other drivers (ath9k for instance). To give something similar to ath9k where the pad position is computed based on the hdr->frame_control field only (my guess is that's what the HW does anyway), we have : int rt2800usb_padpos(__le16 frame_control) { int padpos = 24; if (ieee80211_is_data(frame_control)) { padpos = ieee80211_hdrlen(frame_control); } return padpos; } then later : int padsize = padpos & 3; then the usual check before doing the real padding or unpadding : if (padsize && skb->len>padpos) { do padding or unpadding } My 2 cents, Benoit -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html