Hi, On Tue, May 12, 2009 at 01:43:11PM -0700, akpm@xxxxxxxxxxxxxxxxxxxx wrote: > From: Shaohua Li <shaohua.li@xxxxxxxxx> > > serio shutdown is quite slow. It sometimes will take 0.2s for each port. > This depends on the other patch you sent to Greg, I think these should go together. But I am uncomfortable at the ide of blasting all ports on i8042 simultaneously during shutdown. I'd be more comfortable if we were taking serio_mutex in serio_cleanup() so only one port is being worked on at a time. > Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx> > Cc: Arjan van de Ven <arjan@xxxxxxxxxxxxx> > Cc: Dmitry Torokhov <dtor@xxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > > drivers/input/serio/serio.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff -puN drivers/input/serio/serio.c~serios-async-shutdown drivers/input/serio/serio.c > --- a/drivers/input/serio/serio.c~serios-async-shutdown > +++ a/drivers/input/serio/serio.c > @@ -36,6 +36,7 @@ > #include <linux/kthread.h> > #include <linux/mutex.h> > #include <linux/freezer.h> > +#include <linux/async.h> > > MODULE_AUTHOR("Vojtech Pavlik <vojtech@xxxxxx>"); > MODULE_DESCRIPTION("Serio abstraction core"); > @@ -792,11 +793,17 @@ static void serio_cleanup(struct serio * > mutex_unlock(&serio->drv_mutex); > } > > +static void serio_async_shutdown(void *data, async_cookie_t cookie) > +{ > + struct serio *serio = data; > + serio_cleanup(serio); > +} > + > static void serio_shutdown(struct device *dev) > { > struct serio *serio = to_serio_port(dev); > > - serio_cleanup(serio); > + async_schedule(serio_async_shutdown, serio); > } > > static void serio_attach_driver(struct serio_driver *drv) > _ > -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html