|
@@ -339,14 +339,20 @@ static struct gameport_event *gameport_get_event(void)
|
|
|
return event;
|
|
|
}
|
|
|
|
|
|
-static void gameport_handle_events(void)
|
|
|
+static void gameport_handle_event(void)
|
|
|
{
|
|
|
struct gameport_event *event;
|
|
|
struct gameport_driver *gameport_drv;
|
|
|
|
|
|
down(&gameport_sem);
|
|
|
|
|
|
- while ((event = gameport_get_event())) {
|
|
|
+ /*
|
|
|
+ * Note that we handle only one event here to give swsusp
|
|
|
+ * a chance to freeze kgameportd thread. Gameport events
|
|
|
+ * should be pretty rare so we are not concerned about
|
|
|
+ * taking performance hit.
|
|
|
+ */
|
|
|
+ if ((event = gameport_get_event())) {
|
|
|
|
|
|
switch (event->type) {
|
|
|
case GAMEPORT_REGISTER_PORT:
|
|
@@ -433,7 +439,7 @@ static struct gameport *gameport_get_pending_child(struct gameport *parent)
|
|
|
static int gameport_thread(void *nothing)
|
|
|
{
|
|
|
do {
|
|
|
- gameport_handle_events();
|
|
|
+ gameport_handle_event();
|
|
|
wait_event_interruptible(gameport_wait,
|
|
|
kthread_should_stop() || !list_empty(&gameport_event_list));
|
|
|
try_to_freeze();
|