linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ivo van Doorn <ivdoorn@gmail.com>
To: Gertjan van Wingerde <gwingerde@gmail.com>
Cc: users@rt2x00.serialmonkey.com, linux-wireless@vger.kernel.org,
	Alban Browaeys <prahal@yahoo.com>
Subject: Re: [PATCH] rt2x00: Further L2 padding fixes.
Date: Sat, 28 Nov 2009 22:26:57 +0100	[thread overview]
Message-ID: <200911282226.58091.IvDoorn@gmail.com> (raw)
In-Reply-To: <1259433154-2587-1-git-send-email-gwingerde@gmail.com>

> 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);

Not sure about this, the l2pad should be the total bytes between the header and payload.
What if we have a frame for which both the header and the payload should be moved?

The code in this function handles multiple scenarios, one where both the payload and
header must be moved or when only one of both should be moved. In each case the l2pad
depends on both the payload and header alignment sizes.

>  	if (header_align == payload_align) {
>  		/*
> @@ -216,6 +216,7 @@ void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length)
>  		memmove(skb->data + header_length + l2pad,
>  			skb->data + header_length + l2pad + payload_align,
>  			frame_length - header_length);
> +		skb_trim(skb, frame_length + l2pad);
>  		skbdesc->flags |= SKBDESC_L2_PADDED;
>  	}
>  }
> @@ -346,7 +347,7 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
>  	 * Header and alignment information.
>  	 */
>  	txdesc->header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
> -	txdesc->l2pad = ALIGN_SIZE(entry->skb, txdesc->header_length);
> +	txdesc->l2pad = 4 - (txdesc->header_length & 3);

ALIGN_SIZE() depends on the actual address of the payload, and thus should be better
and indicating the amount of padding which is required. However the bug might be that we need
to do the same calculation as in rt2x00queue_insert_l2pad() and make it depend on the ALIGN_SIZE
values from header and payload.

Ivo

  reply	other threads:[~2009-11-28 21:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-28 18:32 [PATCH] rt2x00: Further L2 padding fixes Gertjan van Wingerde
2009-11-28 21:26 ` Ivo van Doorn [this message]
2009-11-28 21:44   ` Gertjan van Wingerde
2009-11-28 23:55     ` [rt2x00-users] " Benoit PAPILLAULT
2009-11-29 11:44       ` Gertjan van Wingerde
2009-11-29 13:02         ` Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200911282226.58091.IvDoorn@gmail.com \
    --to=ivdoorn@gmail.com \
    --cc=gwingerde@gmail.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=prahal@yahoo.com \
    --cc=users@rt2x00.serialmonkey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).