2010-09-19 16:55:02

by Eliad Peller

[permalink] [raw]
Subject: [PATCH 1/2] wl1271: avoid redundant memcpy of rx_status

copy the rx_status directly to skb->cb (control buffer) instead of copying
it to a local struct and then copying it again (for each rx packet)

Signed-off-by: Eliad Peller <[email protected]>
---
drivers/net/wireless/wl12xx/wl1271_rx.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/wl12xx/wl1271_rx.c b/drivers/net/wireless/wl12xx/wl1271_rx.c
index 019aa79..94da5dd 100644
--- a/drivers/net/wireless/wl12xx/wl1271_rx.c
+++ b/drivers/net/wireless/wl12xx/wl1271_rx.c
@@ -76,7 +76,6 @@ static void wl1271_rx_status(struct wl1271 *wl,

static void wl1271_rx_handle_data(struct wl1271 *wl, u32 length)
{
- struct ieee80211_rx_status rx_status;
struct wl1271_rx_descriptor *desc;
struct sk_buff *skb;
u16 *fc;
@@ -109,14 +108,13 @@ static void wl1271_rx_handle_data(struct wl1271 *wl, u32 length)
if ((*fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_BEACON)
beacon = 1;

- wl1271_rx_status(wl, desc, &rx_status, beacon);
+ wl1271_rx_status(wl, desc, IEEE80211_SKB_RXCB(skb), beacon);

wl1271_debug(DEBUG_RX, "rx skb 0x%p: %d B %s", skb, skb->len,
beacon ? "beacon" : "");

skb_trim(skb, skb->len - desc->pad_len);

- memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
ieee80211_rx_ni(wl->hw, skb);
}

--
1.7.0.4



2010-09-19 19:46:22

by Luciano Coelho

[permalink] [raw]
Subject: Re: [PATCH 1/2] wl1271: avoid redundant memcpy of rx_status

On Sun, 2010-09-19 at 18:55 +0200, ext Eliad Peller wrote:
> copy the rx_status directly to skb->cb (control buffer) instead of copying
> it to a local struct and then copying it again (for each rx packet)
>
> Signed-off-by: Eliad Peller <[email protected]>
> ---

Acked-by: Luciano Coelho <[email protected]>

Thanks, Eliad!


--
Cheers,
Luca.


2010-09-19 16:55:03

by Eliad Peller

[permalink] [raw]
Subject: [PATCH 2/2] wl1271: bugfix: use bitwise-AND instead of logical-AND

typo - while looking for specific bits we should do a bitwise-AND instead of logical-AND.

Signed-off-by: Eliad Peller <[email protected]>
---
drivers/net/wireless/wl12xx/wl1271_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
index e6e0852..d2b8486 100644
--- a/drivers/net/wireless/wl12xx/wl1271_main.c
+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
@@ -1635,7 +1635,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
if (ret < 0)
goto out;

- if ((changed && BSS_CHANGED_BEACON_INT) &&
+ if ((changed & BSS_CHANGED_BEACON_INT) &&
(wl->bss_type == BSS_TYPE_IBSS)) {
wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
bss_conf->beacon_int);
@@ -1644,7 +1644,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
do_join = true;
}

- if ((changed && BSS_CHANGED_BEACON) &&
+ if ((changed & BSS_CHANGED_BEACON) &&
(wl->bss_type == BSS_TYPE_IBSS)) {
struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);

--
1.7.0.4


2010-09-19 19:47:23

by Luciano Coelho

[permalink] [raw]
Subject: Re: [PATCH 2/2] wl1271: bugfix: use bitwise-AND instead of logical-AND

On Sun, 2010-09-19 at 18:55 +0200, ext Eliad Peller wrote:
> typo - while looking for specific bits we should do a bitwise-AND instead of logical-AND.
>
> Signed-off-by: Eliad Peller <[email protected]>
> ---
> drivers/net/wireless/wl12xx/wl1271_main.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
> index e6e0852..d2b8486 100644
> --- a/drivers/net/wireless/wl12xx/wl1271_main.c
> +++ b/drivers/net/wireless/wl12xx/wl1271_main.c
> @@ -1635,7 +1635,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
> if (ret < 0)
> goto out;
>
> - if ((changed && BSS_CHANGED_BEACON_INT) &&
> + if ((changed & BSS_CHANGED_BEACON_INT) &&
> (wl->bss_type == BSS_TYPE_IBSS)) {
> wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
> bss_conf->beacon_int);
> @@ -1644,7 +1644,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
> do_join = true;
> }
>
> - if ((changed && BSS_CHANGED_BEACON) &&
> + if ((changed & BSS_CHANGED_BEACON) &&
> (wl->bss_type == BSS_TYPE_IBSS)) {
> struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);

Acked-by: Luciano Coelho <[email protected]>

Nice catch! Thanks for your patch.

--
Cheers,
Luca.