From a8bcaa980cfa8c3c1f207fb359305ca60b9809e4 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Thu, 12 Oct 2006 01:06:23 -0400 Subject: [PATCH] --- yaml --- r: 39660 b: refs/heads/master c: 0a66045bcfd3a7ba5d1253f9f305b78bf636ac57 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/input/serio/serio.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 178a24bbaa5d..5c20c427f771 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 07646e217f473a3e6213f8228336a9046833d6aa +refs/heads/master: 0a66045bcfd3a7ba5d1253f9f305b78bf636ac57 diff --git a/trunk/drivers/input/serio/serio.c b/trunk/drivers/input/serio/serio.c index 480fdc5d20b3..211943f85cb6 100644 --- a/trunk/drivers/input/serio/serio.c +++ b/trunk/drivers/input/serio/serio.c @@ -118,6 +118,8 @@ static int serio_match_port(const struct serio_device_id *ids, struct serio *ser static void serio_bind_driver(struct serio *serio, struct serio_driver *drv) { + int error; + down_write(&serio_bus.subsys.rwsem); if (serio_match_port(drv->id_table, serio)) { @@ -126,9 +128,19 @@ static void serio_bind_driver(struct serio *serio, struct serio_driver *drv) serio->dev.driver = NULL; goto out; } - device_bind_driver(&serio->dev); + error = device_bind_driver(&serio->dev); + if (error) { + printk(KERN_WARNING + "serio: device_bind_driver() failed " + "for %s (%s) and %s, error: %d\n", + serio->phys, serio->name, + drv->description, error); + serio_disconnect_driver(serio); + serio->dev.driver = NULL; + goto out; + } } -out: + out: up_write(&serio_bus.subsys.rwsem); }