X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fbase%2Fsys.c;h=358bb0be3c0838b9233bae7b1eab1cc2b05ef1e6;hb=754cdd4aba225b74dcc35cc384aeb0c42b505e8b;hp=8e13fd9421635753f7b634ba4177b5df003a074f;hpb=afbf331ed1252c85753ac6790356c11e171f3d0b;p=linux-2.6 diff --git a/drivers/base/sys.c b/drivers/base/sys.c index 8e13fd9421..358bb0be3c 100644 --- a/drivers/base/sys.c +++ b/drivers/base/sys.c @@ -167,6 +167,21 @@ int sysdev_driver_register(struct sysdev_class *cls, struct sysdev_driver *drv) { int err = 0; + if (!cls) { + printk(KERN_WARNING "sysdev: invalid class passed to " + "sysdev_driver_register!\n"); + WARN_ON(1); + return -EINVAL; + } + + /* Check whether this driver has already been added to a class. */ + if (drv->entry.next && !list_empty(&drv->entry)) { + printk(KERN_WARNING "sysdev: class %s: driver (%p) has already" + " been registered to a class, something is wrong, but " + "will forge on!\n", cls->name, drv); + WARN_ON(1); + } + mutex_lock(&sysdev_drivers_lock); if (cls && kset_get(&cls->kset)) { list_add_tail(&drv->entry, &cls->drivers); @@ -179,7 +194,7 @@ int sysdev_driver_register(struct sysdev_class *cls, struct sysdev_driver *drv) } } else { err = -EINVAL; - printk(KERN_ERR "%s: invalid device class\n", __FUNCTION__); + printk(KERN_ERR "%s: invalid device class\n", __func__); WARN_ON(1); } mutex_unlock(&sysdev_drivers_lock);