lkml.org 
[lkml]   [2010]   [Jan]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 58/97] mac80211: fix race with suspend and dynamic_ps_disable_work
    Date
    From: Luis R. Rodriguez <lrodriguez@atheros.com>

    commit b98c06b6debfe84c90200143bb1102f312f50a33 upstream.

    When mac80211 suspends it calls a driver's suspend callback
    as a last step and after that the driver assumes no calls will
    be made to it until we resume and its start callback is kicked.
    If such calls are made, however, suspend can end up throwing
    hardware in an unexpected state and making the device unusable
    upon resume.

    Fix this by preventing mac80211 to schedule dynamic_ps_disable_work
    by checking for when mac80211 starts to suspend and starts
    quiescing. Frames should be allowed to go through though as
    that is part of the quiescing steps and we do not flush the
    mac80211 workqueue since it was already done towards the
    beginning of suspend cycle.

    The other mac80211 issue will be hanled in the next patch.

    For further details see refer to the thread:

    http://marc.info/?t=126144866100001&r=1&w=2

    Cc: stable@kernel.org
    Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
    Signed-off-by: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    net/mac80211/tx.c | 1 +
    1 files changed, 1 insertions(+), 0 deletions(-)

    diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
    index eaa4118..d398197 100644
    --- a/net/mac80211/tx.c
    +++ b/net/mac80211/tx.c
    @@ -1401,6 +1401,7 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata,

    if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&
    local->hw.conf.dynamic_ps_timeout > 0 &&
    + !local->quiescing &&
    !(local->scanning) && local->ps_sdata) {
    if (local->hw.conf.flags & IEEE80211_CONF_PS) {
    ieee80211_stop_queues_by_reason(&local->hw,
    --
    1.6.6


    \
     
     \ /
      Last update: 2010-01-05 01:49    [W:4.252 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site