X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fbase%2Fdriver.c;h=2ef5acf4368b9e8deef4440d865a87cef8d0b0a6;hb=e5a4a72d4f88f4389e9340d383ca67031d1b8536;hp=9a6537f14401df5aae7a81842c7bd7a145c2f849;hpb=d478376cb0dc9ab16a2b6e02fd8cd1174e724c64;p=linux-2.6 diff --git a/drivers/base/driver.c b/drivers/base/driver.c index 9a6537f144..2ef5acf436 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -217,12 +217,22 @@ static void driver_remove_groups(struct device_driver *drv, int driver_register(struct device_driver *drv) { int ret; + struct device_driver *other; if ((drv->bus->probe && drv->probe) || (drv->bus->remove && drv->remove) || (drv->bus->shutdown && drv->shutdown)) printk(KERN_WARNING "Driver '%s' needs updating - please use " "bus_type methods\n", drv->name); + + other = driver_find(drv->name, drv->bus); + if (other) { + put_driver(other); + printk(KERN_ERR "Error: Driver '%s' is already registered, " + "aborting...\n", drv->name); + return -EEXIST; + } + ret = bus_add_driver(drv); if (ret) return ret;