rt2x00: Fix broken recover-on-error path
During initialization the initialize() callback function in rt2x00pci and rt2x00usb will cleanup the mess they made. rt2x00lib shouldn't call uninitialize because the callback function already cleaned up _and_ the DEVICE_INITIALIZED isn't set which causes the rt2x00lib_uninitialize() to halt directly anyway. All that is required to be cleaned up by rt2x00lib is the queue, and that can be done by calling rt2x00queue_uninitialize() directly. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7872089745
commit
ed499983b8
1 changed files with 4 additions and 7 deletions
|
@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
|
|||
* Initialize the device.
|
||||
*/
|
||||
status = rt2x00dev->ops->lib->initialize(rt2x00dev);
|
||||
if (status)
|
||||
goto exit;
|
||||
if (status) {
|
||||
rt2x00queue_uninitialize(rt2x00dev);
|
||||
return status;
|
||||
}
|
||||
|
||||
__set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);
|
||||
|
||||
|
@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
|
|||
rt2x00rfkill_register(rt2x00dev);
|
||||
|
||||
return 0;
|
||||
|
||||
exit:
|
||||
rt2x00lib_uninitialize(rt2x00dev);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
|
||||
|
|
Loading…
Reference in a new issue