From a77e3d1a8d278989e854369ed352727d12c8fdf2 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Mon, 2 Jun 2008 00:41:57 -0400 Subject: [PATCH] --- yaml --- r: 104199 b: refs/heads/master c: e8ef4347099584b49ecf74144ad2089b724292cf h: refs/heads/master i: 104197: 79f5d622d35fb9fba020d93ef824cd55530fdc51 104195: c8c08a4f217c140a3bbc3912d26849600809cf29 104191: 48eb18563cd8036976572066f7d8429414f03158 v: v3 --- [refs] | 2 +- trunk/drivers/input/serio/serio.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 9f757039c243..36bccb28f6b0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f6d65610df3bd4e7138da03aec391224219df135 +refs/heads/master: e8ef4347099584b49ecf74144ad2089b724292cf diff --git a/trunk/drivers/input/serio/serio.c b/trunk/drivers/input/serio/serio.c index 7f5293828fbf..78f2abb5c11b 100644 --- a/trunk/drivers/input/serio/serio.c +++ b/trunk/drivers/input/serio/serio.c @@ -331,9 +331,10 @@ static void serio_handle_event(void) } /* - * Remove all events that have been submitted for a given serio port. + * Remove all events that have been submitted for a given + * object, be it serio port or driver. */ -static void serio_remove_pending_events(struct serio *serio) +static void serio_remove_pending_events(void *object) { struct list_head *node, *next; struct serio_event *event; @@ -343,7 +344,7 @@ static void serio_remove_pending_events(struct serio *serio) list_for_each_safe(node, next, &serio_event_list) { event = list_entry(node, struct serio_event, node); - if (event->object == serio) { + if (event->object == object) { list_del_init(node); serio_free_event(event); } @@ -837,7 +838,9 @@ void serio_unregister_driver(struct serio_driver *drv) struct serio *serio; mutex_lock(&serio_mutex); + drv->manual_bind = 1; /* so serio_find_driver ignores it */ + serio_remove_pending_events(drv); start_over: list_for_each_entry(serio, &serio_list, node) {