lkml.org 
[lkml]   [2008]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 01/47] b43: Fix controller restart crash
    -stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Michael Buesch <mb@bu3sch.de>

    upstream commit: 3bf0a32e22fedc0b46443699db2d61ac2a883ac4

    This fixes a kernel crash on rmmod, in the case where the controller
    was restarted before doing the rmmod.

    Signed-off-by: Michael Buesch <mb@bu3sch.de>
    Signed-off-by: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: Chris Wright <chrisw@sous-sol.org>
    ---
    drivers/net/wireless/b43/main.c | 12 ++++++++++--
    1 file changed, 10 insertions(+), 2 deletions(-)

    --- a/drivers/net/wireless/b43/main.c
    +++ b/drivers/net/wireless/b43/main.c
    @@ -3818,7 +3818,9 @@ static void b43_chip_reset(struct work_s
    goto out;
    }
    }
    - out:
    +out:
    + if (err)
    + wl->current_dev = NULL; /* Failed to init the dev. */
    mutex_unlock(&wl->mutex);
    if (err)
    b43err(wl, "Controller restart FAILED\n");
    @@ -3967,9 +3969,11 @@ static void b43_one_core_detach(struct s
    struct b43_wldev *wldev;
    struct b43_wl *wl;

    + /* Do not cancel ieee80211-workqueue based work here.
    + * See comment in b43_remove(). */
    +
    wldev = ssb_get_drvdata(dev);
    wl = wldev->wl;
    - cancel_work_sync(&wldev->restart_work);
    b43_debugfs_remove_device(wldev);
    b43_wireless_core_detach(wldev);
    list_del(&wldev->list);
    @@ -4152,6 +4156,10 @@ static void b43_remove(struct ssb_device
    struct b43_wl *wl = ssb_get_devtypedata(dev);
    struct b43_wldev *wldev = ssb_get_drvdata(dev);

    + /* We must cancel any work here before unregistering from ieee80211,
    + * as the ieee80211 unreg will destroy the workqueue. */
    + cancel_work_sync(&wldev->restart_work);
    +
    B43_WARN_ON(!wl);
    if (wl->current_dev == wldev)
    ieee80211_unregister_hw(wl->hw);
    --


    \
     
     \ /
      Last update: 2008-06-14 02:15    [W:0.021 / U:30.524 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site