![]() | |||||||||||||
Messages in this thread |
On 11/7/06, Akinobu Mita <akinobu.mita@gmail.com> wrote: > serio_register_driver() may fail under memory shortage. > > When serio_register_driver() called, it queues SERIO_REGISTER_DRIVER > event into global serio_event_list, and then kseriod kernel thread > handles that event and do driver_register(). > > But event allocation by serio_register_driver() may fail. > Because it is GFP_ATOMIC allocation. It will cause the problem > by serio_unregister_driver() with not being registered driver > at module_exit() time > > This patch makes serio_register_driver() call driver_register() > directly instead of kseriod so that it can check whether > driver_register() is succeeded or not. > This slows down boot process because probing for mice and keyboards takes too long (for some touchpads it takes about 4 seconds to do reset). We could change allocation from GFP_ATOMIC to GFP_KERNEL for SERIO_REGISTER_DRIVER events to make it more robust but otherwise I'd leave serio_register_driver return void. You could also add a flag to serio driver indicating whether registration is complete and check that flag in serio_unregister_driver so it does not do stupid things. -- Dmitry - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ | ||||||||||||
| Last update: 2006-11-07 14:23 [from the cache] ©2003-2008 | |||||||||||||