USB: fix wrong order of events in usb serial suspension
if a subdriver has an additional suspend method, it must be called first to allow the subdriver to return -EBUSY, because the second half cannot be easily undone. Signed-off-by: Oliver Neukum <oliver@neukum.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
807fcb5e19
Коммит
81e5b23cd2
|
@ -1157,15 +1157,19 @@ int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
|
||||||
|
|
||||||
serial->suspending = 1;
|
serial->suspending = 1;
|
||||||
|
|
||||||
|
if (serial->type->suspend) {
|
||||||
|
r = serial->type->suspend(serial, message);
|
||||||
|
if (r < 0)
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < serial->num_ports; ++i) {
|
for (i = 0; i < serial->num_ports; ++i) {
|
||||||
port = serial->port[i];
|
port = serial->port[i];
|
||||||
if (port)
|
if (port)
|
||||||
kill_traffic(port);
|
kill_traffic(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serial->type->suspend)
|
err_out:
|
||||||
r = serial->type->suspend(serial, message);
|
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(usb_serial_suspend);
|
EXPORT_SYMBOL(usb_serial_suspend);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче