提交 ed499983 编写于 作者: I Ivo van Doorn 提交者: John W. Linville

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: NIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 78720897
...@@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev) ...@@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
* Initialize the device. * Initialize the device.
*/ */
status = rt2x00dev->ops->lib->initialize(rt2x00dev); status = rt2x00dev->ops->lib->initialize(rt2x00dev);
if (status) if (status) {
goto exit; rt2x00queue_uninitialize(rt2x00dev);
return status;
}
__set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags); __set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);
...@@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev) ...@@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
rt2x00rfkill_register(rt2x00dev); rt2x00rfkill_register(rt2x00dev);
return 0; return 0;
exit:
rt2x00lib_uninitialize(rt2x00dev);
return status;
} }
int rt2x00lib_start(struct rt2x00_dev *rt2x00dev) int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册