2013-02-23 17:41:01

by Felix Fietkau

[permalink] [raw]
Subject: [PATCH 3.9] mac80211: fix idle handling in monitor mode

When the driver does not want a monitor mode VIF, no channel context is
allocated for it. This causes ieee80211_recalc_idle to put the hardware
into idle mode if only a monitor mode is active, breaking injection.

Fix this by checking local->monitors in addition to active channel
contexts.

Signed-off-by: Felix Fietkau <[email protected]>
---
net/mac80211/iface.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 2c059e5..640afab 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -107,7 +107,7 @@ void ieee80211_recalc_idle(struct ieee80211_local *local)

lockdep_assert_held(&local->mtx);

- active = !list_empty(&local->chanctx_list);
+ active = !list_empty(&local->chanctx_list) || local->monitors;

if (!local->ops->remain_on_channel) {
list_for_each_entry(roc, &local->roc_list, list) {
--
1.8.0.2



2013-02-26 20:53:23

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3.9] mac80211: fix idle handling in monitor mode

On Sat, 2013-02-23 at 18:40 +0100, Felix Fietkau wrote:
> When the driver does not want a monitor mode VIF, no channel context is
> allocated for it. This causes ieee80211_recalc_idle to put the hardware
> into idle mode if only a monitor mode is active, breaking injection.
>
> Fix this by checking local->monitors in addition to active channel
> contexts.

Applied.

johannes