Search Linux Wireless

Re: [RFC/RFT 1/2] mac80211: Add NEED_ALIGNED4_SKBS hw flag

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2015-12-17 10:20, Janusz Dziedzic wrote:
> HW/driver should set NEED_ALIGNED4_SKBS flag in case require
> aligned skbs to four-byte boundaries.
> 
> Before we have to do memmove() in the driver before
> pass this to HW and memmove() back in tx completion.
> This patch allow to save CPU and skip such memmoves.
> For each skb we called memmove(ieee80211_hdrsize()) twice.
> 
> Currently this was tested with ath9k, both hw/sw crypt for
> tkip/ccmp.
> For sure more tests required.
> 
> Signed-off-by: Janusz Dziedzic <janusz.dziedzic@xxxxxxxxx>
> ---
>  include/net/mac80211.h |  4 ++++
>  net/mac80211/debugfs.c |  1 +
>  net/mac80211/tkip.c    | 15 ++++++++++++---
>  net/mac80211/tx.c      | 21 +++++++++++++++++++--
>  net/mac80211/wep.c     |  6 ++++++
>  net/mac80211/wpa.c     | 35 +++++++++++++++++++++++++++--------
>  6 files changed, 69 insertions(+), 13 deletions(-)
> 
> diff --git a/net/mac80211/tkip.c b/net/mac80211/tkip.c
> index 0ae2077..26b2663 100644
> --- a/net/mac80211/tkip.c
> +++ b/net/mac80211/tkip.c
> @@ -204,9 +204,18 @@ void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
>  	const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY];
>  	struct tkip_ctx *ctx = &key->u.tkip.tx;
>  	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
> -	const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
> -	u32 iv32 = get_unaligned_le32(&data[4]);
> -	u16 iv16 = data[2] | (data[0] << 8);
> +	unsigned int hdrlen;
> +	const u8 *data;
> +	u32 iv32;
> +	u16 iv16;
> +
> +	hdrlen = ieee80211_hdrlen(hdr->frame_control);
> +	if (ieee80211_hw_check(&key->local->hw, NEEDS_ALIGNED4_SKBS))
> +		hdrlen += hdrlen & 3;
I think this check is duplicated way too often, maybe you should
implement a wrapper for ieee80211_hdrlen and convert all relevant call
sites. Makes it easier to spot places where this was forgotten.

- Felix
--
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



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux