Skip to content

Commit

Permalink
Input: serio/gameport - use 'long' system workqueue
Browse files Browse the repository at this point in the history
Commit 8ee294c converted serio
subsystem event handling from using a dedicated thread to using
common workqueue. Unfortunately, this regressed our boot times,
due to the fact that serio jobs take long time to execute. While
the new concurrency managed workqueue code manages long-playing
works just fine and schedules additional workers as needed, such
works wreck havoc among remaining users of flush_scheduled_work().

To solve this problem let's move serio/gameport works from system_wq
to system_long_wq which nobody tries to flush.

Reported-and-tested-by: Hernando Torque <[email protected]>
Acked-by: Tejun Heo <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
  • Loading branch information
dtor committed Feb 23, 2011
1 parent 9bb794a commit 1d64b65
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion drivers/input/gameport/gameport.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ static int gameport_queue_event(void *object, struct module *owner,
event->owner = owner;

list_add_tail(&event->node, &gameport_event_list);
schedule_work(&gameport_event_work);
queue_work(system_long_wq, &gameport_event_work);

out:
spin_unlock_irqrestore(&gameport_event_lock, flags);
Expand Down
2 changes: 1 addition & 1 deletion drivers/input/serio/serio.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ static int serio_queue_event(void *object, struct module *owner,
event->owner = owner;

list_add_tail(&event->node, &serio_event_list);
schedule_work(&serio_event_work);
queue_work(system_long_wq, &serio_event_work);

out:
spin_unlock_irqrestore(&serio_event_lock, flags);
Expand Down

0 comments on commit 1d64b65

Please sign in to comment.