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 17 December 2015 at 11:12, Felix Fietkau <nbd@xxxxxxxxxxx> wrote:
> 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.
>
Or other option is to add this to ieee80211_tx_data - while this param
we pass to most of encrypt funtions ...
>From other side I see ieee80211_tx_data skbs list could be used -
seems only for fragmentation?

@Johannes - will be safe add "real" hdrlen to ieee80211_tx_data?

Other option I see is ieee80211_tx_info or like Felix suggest new
hdrlen() function.

BR
Janusz

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