2013-05-08 19:43:56

by Daniel Drake

[permalink] [raw]
Subject: [PATCH] mwifiex: fix setting of multicast filter

A small bug in this code was causing the ALLMULTI filter to be set
when in fact we were just wanting to program a selective multicast list
to the hardware.

Fix that bug and remove a redundant if condition in the code that
follows.

This fixes wakeup behaviour when multicast WOL is enabled. Previously,
all multicast packets would wake up the system. Now, only those that the
host intended to receive trigger wakeups.

Signed-off-by: Daniel Drake <[email protected]>
---
drivers/net/wireless/mwifiex/sta_ioctl.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
index 311d0b2..1a8a19d 100644
--- a/drivers/net/wireless/mwifiex/sta_ioctl.c
+++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
@@ -96,7 +96,7 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
} else {
/* Multicast */
priv->curr_pkt_filter &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
- if (mcast_list->mode == MWIFIEX_MULTICAST_MODE) {
+ if (mcast_list->mode == MWIFIEX_ALL_MULTI_MODE) {
dev_dbg(priv->adapter->dev,
"info: Enabling All Multicast!\n");
priv->curr_pkt_filter |=
@@ -108,20 +108,11 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
dev_dbg(priv->adapter->dev,
"info: Set multicast list=%d\n",
mcast_list->num_multicast_addr);
- /* Set multicast addresses to firmware */
- if (old_pkt_filter == priv->curr_pkt_filter) {
- /* Send request to firmware */
- ret = mwifiex_send_cmd_async(priv,
- HostCmd_CMD_MAC_MULTICAST_ADR,
- HostCmd_ACT_GEN_SET, 0,
- mcast_list);
- } else {
- /* Send request to firmware */
- ret = mwifiex_send_cmd_async(priv,
- HostCmd_CMD_MAC_MULTICAST_ADR,
- HostCmd_ACT_GEN_SET, 0,
- mcast_list);
- }
+ /* Send multicast addresses to firmware */
+ ret = mwifiex_send_cmd_async(priv,
+ HostCmd_CMD_MAC_MULTICAST_ADR,
+ HostCmd_ACT_GEN_SET, 0,
+ mcast_list);
}
}
}
--
1.8.1.4



2013-05-08 21:05:54

by Bing Zhao

[permalink] [raw]
Subject: RE: [PATCH] mwifiex: fix setting of multicast filter

Hi Daniel,

Thanks for the patch.

> A small bug in this code was causing the ALLMULTI filter to be set
> when in fact we were just wanting to program a selective multicast list
> to the hardware.
>
> Fix that bug and remove a redundant if condition in the code that
> follows.
>
> This fixes wakeup behaviour when multicast WOL is enabled. Previously,
> all multicast packets would wake up the system. Now, only those that the
> host intended to receive trigger wakeups.
>
> Signed-off-by: Daniel Drake <[email protected]>

Cc: <[email protected]>
Acked-by: Bing Zhao <[email protected]>

Regards,
Bing

> ---
> drivers/net/wireless/mwifiex/sta_ioctl.c | 21 ++++++---------------
> 1 file changed, 6 insertions(+), 15 deletions(-)