There is warning reported by kobject lib in kobject_put(): kobject: '(null)' (00000000be81a546): is not initialized, yet kobject_put() is being called. WARNING: CPU: 0 PID: 535 at lib/kobject.c:718 kobject_put+0x12c/0x180 Call Trace: cdev_device_add __iio_device_register __devm_iio_device_register tmp117_probe If don't need to register chardev for most of IIO devices, we just register them with device_add() only, and use device_del() to unregister them. Otherwise, when device_add() fails in internal and calls kobject_put() in error handling path, it would report warning because the device never be registered as chardev and there is no release function for it. Fixes: 8ebaa3ff1e71 ("iio: core: register chardev only if needed") Signed-off-by: Zeng Heng <zengheng4@xxxxxxxxxx> --- drivers/iio/industrialio-core.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 151ff3993354..f4f48bda07f7 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -1982,7 +1982,11 @@ int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod) /* assign device groups now; they should be all registered now */ indio_dev->dev.groups = iio_dev_opaque->groups; - ret = cdev_device_add(&iio_dev_opaque->chrdev, &indio_dev->dev); + if (iio_dev_opaque->attached_buffers_cnt || iio_dev_opaque->event_interface) + ret = cdev_device_add(&iio_dev_opaque->chrdev, &indio_dev->dev); + else + ret = device_add(&indio_dev->dev); + if (ret < 0) goto error_unreg_eventset; @@ -2008,7 +2012,10 @@ void iio_device_unregister(struct iio_dev *indio_dev) { struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); - cdev_device_del(&iio_dev_opaque->chrdev, &indio_dev->dev); + if (iio_dev_opaque->chrdev.kobj.state_initialized) + cdev_device_del(&iio_dev_opaque->chrdev, &indio_dev->dev); + else + device_del(&indio_dev->dev); mutex_lock(&iio_dev_opaque->info_exist_lock); -- 2.25.1