mirror of
https://github.com/fail0verflow/switch-linux.git
synced 2025-11-06 11:07:37 -05:00
usb: don't use PREPARE_DELAYED_WORK
PREPARE_[DELAYED_]WORK() are being phased out. They have few users
and a nasty surprise in terms of reentrancy guarantee as workqueue
considers work items to be different if they don't have the same work
function.
usb_hub->init_work is multiplexed with multiple work functions;
however, the work item is never queued while in-flight, so we can
simply use INIT_DELAYED_WORK() before each queueing.
It would probably be best to route this with other related updates
through the workqueue tree.
Lightly tested.
v2: Greg and Alan confirm that the work item is never queued while
in-flight. Simply use INIT_DELAYED_WORK().
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org
This commit is contained in:
parent
75ddb38f09
commit
77fa83cf74
1 changed files with 2 additions and 2 deletions
|
|
@ -1040,7 +1040,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
|
||||||
*/
|
*/
|
||||||
if (type == HUB_INIT) {
|
if (type == HUB_INIT) {
|
||||||
delay = hub_power_on(hub, false);
|
delay = hub_power_on(hub, false);
|
||||||
PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func2);
|
INIT_DELAYED_WORK(&hub->init_work, hub_init_func2);
|
||||||
schedule_delayed_work(&hub->init_work,
|
schedule_delayed_work(&hub->init_work,
|
||||||
msecs_to_jiffies(delay));
|
msecs_to_jiffies(delay));
|
||||||
|
|
||||||
|
|
@ -1194,7 +1194,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
|
||||||
|
|
||||||
/* Don't do a long sleep inside a workqueue routine */
|
/* Don't do a long sleep inside a workqueue routine */
|
||||||
if (type == HUB_INIT2) {
|
if (type == HUB_INIT2) {
|
||||||
PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func3);
|
INIT_DELAYED_WORK(&hub->init_work, hub_init_func3);
|
||||||
schedule_delayed_work(&hub->init_work,
|
schedule_delayed_work(&hub->init_work,
|
||||||
msecs_to_jiffies(delay));
|
msecs_to_jiffies(delay));
|
||||||
return; /* Continues at init3: below */
|
return; /* Continues at init3: below */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue