• Rami Rosen's avatar
    rt2x00: fix a wrong parameter for __test_and_clear_bit() in rt2x00rfkill_free(). · e223b6dc
    Rami Rosen authored
    When running modprobe rt73usb, and then rmmod rt73usb, and then
    iwconfig, the wlan0 device does not disappear. When repeating this
    process again, we get a kernel Oops errors and "BUG: unable to handle
    kernel paging request..." message in the kernel log.
    
    The reason for this is that there is an error in rt2x00rfkill_free(),
    which is called in the process of removing the device
    (rt2x00lib_remove_dev() in rt2x00dev.c).
    rt2x00rfkill_free() clears the RFKILL_STATE_ALLOCATED bit , which is
    bit number 1 () in rt2x00dev->flags instead of in
    rt2x00dev->rfkill_state. As a result, when checking the
    DEVICE_STATE_REGISTERED_HW bit (bit number 1 in rt2x00dev->flags) in
    rt2x00lib_remove_hw() it is **unset**, and we wrongly **don't** call
    ieee80211_unregister_hw().
    
    This patch corrects this: the parameter for __test_and_clear_bit() in
    rt2x00rfkill_free() should be &rt2x00dev->rfkill_state and not
    &rt2x00dev->flags.
    Signed-off-by: default avatarRami Rosen <ramirose@gmail.com>
    Acked-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    e223b6dc
rt2x00rfkill.c 4.82 KB