From: Johannes Berg <johannes@sipsolutions.net>
To: "Luis R. Rodriguez" <lrodriguez@atheros.com>
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
amod.bodas@atheros.com, pstew@google.com, stable@kernel.org
Subject: Re: [PATCH 5/5] mac80211: fix issuing idle calls when device open count is 0
Date: Tue, 07 Dec 2010 10:38:29 +0100 [thread overview]
Message-ID: <1291714709.3607.2.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <1291690135-4535-6-git-send-email-lrodriguez@atheros.com>
On Mon, 2010-12-06 at 18:48 -0800, Luis R. Rodriguez wrote:
> There are a few places where mac80211 may issue a hw config
> but the hw config will be ignored and got into a black hole if
> the device count is already 0. Further hw config calls will also
> be discarded as the device is already marked as idle, in these
> cases mac80211 assumes the radio is idle but the driver never
> really got the notification. We need to ensure that places that
> will call a hw reconfig with open_count set to 0 will send the
> notification to the driver. This forces these checks in a few
> other key missing places.
>
> Without this suspend and resume is broken on devices which require
> notifying the driver to become idle once the open_count already
> has reached 0. This fixes suspend/resume when using new DBus APIs
> are used which idle the device in places which had not yet gotten
> widely tested.
>
> Cc: stable@kernel.org
> Cc: Paul Stewart <pstew@google.com>
> Cc: Amod Bodas <amod.bodas@atheros.com>
> Cc: Johannes Berg <johannes.berg@intel.com>
> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
> ---
> net/mac80211/ieee80211_i.h | 1 +
> net/mac80211/iface.c | 16 ++++++++++++++--
> net/mac80211/pm.c | 2 ++
> net/mac80211/scan.c | 2 +-
> net/mac80211/util.c | 1 +
> 5 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index ae32349..78ab6ff 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -1211,6 +1211,7 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
>
> /* Suspend/resume and hw reconfiguration */
> int ieee80211_reconfig(struct ieee80211_local *local);
> +void ieee80211_recalc_idle_force(struct ieee80211_local *local);
> void ieee80211_stop_device(struct ieee80211_local *local);
>
> #ifdef CONFIG_PM
> diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
> index 36b7000..a590bae 100644
> --- a/net/mac80211/iface.c
> +++ b/net/mac80211/iface.c
> @@ -1320,7 +1320,8 @@ u32 __ieee80211_recalc_idle(struct ieee80211_local *local)
> return 0;
> }
>
> -void ieee80211_recalc_idle(struct ieee80211_local *local)
> +static void ieee80211_recalc_idle_check(struct ieee80211_local *local,
> + bool force)
> {
> u32 chg;
>
> @@ -1328,7 +1329,18 @@ void ieee80211_recalc_idle(struct ieee80211_local *local)
> chg = __ieee80211_recalc_idle(local);
> mutex_unlock(&local->iflist_mtx);
> if (chg)
> - ieee80211_hw_config(local, chg);
> + __ieee80211_hw_config(local, chg, force);
> +}
> +
> +void ieee80211_recalc_idle(struct ieee80211_local *local)
> +{
> + ieee80211_recalc_idle_check(local, false);
> +}
I think I'd probably prefer an inline too.
> --- a/net/mac80211/pm.c
> +++ b/net/mac80211/pm.c
> @@ -98,6 +98,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
> if (local->open_count)
> ieee80211_stop_device(local);
>
> + ieee80211_recalc_idle_force(local);
Err? You just added a call to stop_device() too, and at the wrong place
as well...
> @@ -301,7 +301,7 @@ static void __ieee80211_scan_completed_finish(struct ieee80211_hw *hw,
> }
>
> mutex_lock(&local->mtx);
> - ieee80211_recalc_idle(local);
> + ieee80211_recalc_idle_force(local);
Does this really occur afterwards closing interfaces?
> @@ -1121,6 +1121,7 @@ void ieee80211_stop_device(struct ieee80211_local *local)
>
> flush_workqueue(local->workqueue);
> drv_stop(local);
> + ieee80211_recalc_idle_force(local);
That one definitely can't be after drv_stop().
johannes
next prev parent reply other threads:[~2010-12-07 9:38 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-07 2:48 [PATCH 0/5] mac80211/ath9k: few suspend checks and fixes Luis R. Rodriguez
2010-12-07 2:48 ` [PATCH 1/5] ath9k: warn when we get a ATH9K_INT_TIM_TIMER and are idle Luis R. Rodriguez
2011-01-19 1:34 ` Ben Greear
2011-01-19 1:38 ` Luis R. Rodriguez
2011-01-19 1:42 ` Ben Greear
2011-01-19 1:43 ` Luis R. Rodriguez
2010-12-07 2:48 ` [PATCH 2/5] ath9k: Fix power save count imbalance on ath_radio_enable() Luis R. Rodriguez
2010-12-07 2:48 ` [PATCH 3/5] ath9k_hw: warn if we cannot change the power to the chip Luis R. Rodriguez
2010-12-07 2:48 ` [PATCH 4/5] mac80211: fix idle change notifications upon device stop Luis R. Rodriguez
2010-12-07 2:48 ` [PATCH 5/5] mac80211: fix issuing idle calls when device open count is 0 Luis R. Rodriguez
2010-12-07 9:38 ` Johannes Berg [this message]
2010-12-07 15:20 ` Paul Stewart
2010-12-07 15:23 ` Johannes Berg
2010-12-07 17:28 ` Paul Stewart
2010-12-07 17:31 ` Johannes Berg
2010-12-07 15:44 ` Luis R. Rodriguez
2010-12-07 15:48 ` Johannes Berg
2010-12-07 15:51 ` Luis R. Rodriguez
2010-12-07 15:54 ` Johannes Berg
2010-12-07 15:59 ` Luis R. Rodriguez
2010-12-07 17:32 ` Johannes Berg
2010-12-07 18:04 ` Luis R. Rodriguez
2010-12-07 18:12 ` Johannes Berg
2010-12-07 20:49 ` Luis R. Rodriguez
2010-12-07 20:54 ` Johannes Berg
2010-12-07 20:56 ` Luis R. Rodriguez
2010-12-07 20:57 ` Johannes Berg
2010-12-07 21:28 ` Luis R. Rodriguez
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1291714709.3607.2.camel@jlt3.sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=amod.bodas@atheros.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=lrodriguez@atheros.com \
--cc=pstew@google.com \
--cc=stable@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).