aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/driver.c
diff options
context:
space:
mode:
authorStas Sergeev <stsp@aknet.ru>2008-04-26 11:52:35 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-04-30 19:52:47 -0400
commit16dc42e018c2868211b4928f20a957c0c216126c (patch)
tree2551571326e4927e70485159fafdc8ee7a3eb2ca /drivers/base/driver.c
parent93dd40013f4f7f4b18d19d0d77855f025bcc57c3 (diff)
driver core: warn about duplicate driver names on the same bus
Currently an attempt to register multiple drivers with the same name causes the stack trace with some cryptic error message. The attached patch adds the necessary check and the clear error message. Signed-off-by: Stas Sergeev <stsp@aknet.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/base/driver.c')
-rw-r--r--drivers/base/driver.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 9a6537f14401..2ef5acf4368b 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -217,12 +217,22 @@ static void driver_remove_groups(struct device_driver *drv,
217int driver_register(struct device_driver *drv) 217int driver_register(struct device_driver *drv)
218{ 218{
219 int ret; 219 int ret;
220 struct device_driver *other;
220 221
221 if ((drv->bus->probe && drv->probe) || 222 if ((drv->bus->probe && drv->probe) ||
222 (drv->bus->remove && drv->remove) || 223 (drv->bus->remove && drv->remove) ||
223 (drv->bus->shutdown && drv->shutdown)) 224 (drv->bus->shutdown && drv->shutdown))
224 printk(KERN_WARNING "Driver '%s' needs updating - please use " 225 printk(KERN_WARNING "Driver '%s' needs updating - please use "
225 "bus_type methods\n", drv->name); 226 "bus_type methods\n", drv->name);
227
228 other = driver_find(drv->name, drv->bus);
229 if (other) {
230 put_driver(other);
231 printk(KERN_ERR "Error: Driver '%s' is already registered, "
232 "aborting...\n", drv->name);
233 return -EEXIST;
234 }
235
226 ret = bus_add_driver(drv); 236 ret = bus_add_driver(drv);
227 if (ret) 237 if (ret)
228 return ret; 238 return ret;