driver core: skip removal test for non-removable drivers
PATCH 1/2 driver core: skip removal test for non-removable drivers
Some drivers do not support removal/unbinding. These drivers should have drv->suppress_bind_attrs set to true, so use that to skip the removal test.
This doesn't fix anything reported so far, but should prevent some other cases. Some drivers will need fixes to set suppress_bind_attrs to avoid this test.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=177021
--- drivers/base/dd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/base/dd.c +2 -1
@@ -324,7 +324,8 @@ static int really_probe(struct device *dev, struct device_driver *drv) {int ret = -EPROBE_DEFER ;int local_trigger_count =atomic_read (&deferred_trigger_count); -bool test_remove =IS_ENABLED (CONFIG_DEBUG_TEST_DRIVER_REMOVE ); +bool test_remove =IS_ENABLED (CONFIG_DEBUG_TEST_DRIVER_REMOVE ) && + !drv->suppress_bind_attrs;if (defer_all_probes) {/*
Signature · 1 line
2.10.0
PATCH 2/2 driver core: fix smatch warning on dev->bus check
Commit d42a09802174 (driver core: skip removal test for non-removable drivers) introduced a smatch warning:
drivers/base/dd.c:386 really_probe()
warn: variable dereferenced before check 'dev->bus' (see line 373)
Fix the warning by removing the dev->bus NULL check. dev->bus will never be NULL, so the check was unnecessary.
--- drivers/base/dd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/base/dd.c +1 -1
@@ -384,7 +384,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)if (test_remove) { test_remove = false; -if (dev->bus && dev->bus->remove) +if (dev->bus->remove) dev->bus->remove (dev);else if (drv->remove) drv->remove (dev);
Signature · 1 line
2.10.0
Hi Rob,
Quoted 22 lines · Rob Herring
Some drivers do not support removal/unbinding. These drivers should have
drv->suppress_bind_attrsset to true, so use that to skip the removal test.This doesn't fix anything reported so far, but should prevent some other cases. Some drivers will need fixes to set
suppress_bind_attrsto avoid this test.Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=177021
Fixes bea5b158ff0d ("driver core: add test of driver remove calls during probe")Reported-by Laszlo Ersek <[email protected]>Signed-off-by Rob Herring <[email protected]>--- drivers/base/dd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)drivers/base/dd.c +0
-0
drivers/base/dd.c static int really_probe(struct device *dev, struct device_driver *drv) · line 331
Quoted 9 lines
drivers/base/dd.c +2
-1@@ -324,7 +324,8 @@ static int really_probe(struct device *dev, struct device_driver *drv) {int ret = -EPROBE_DEFER ;int local_trigger_count =atomic_read (&deferred_trigger_count); -bool test_remove =IS_ENABLED (CONFIG_DEBUG_TEST_DRIVER_REMOVE ); +bool test_remove =IS_ENABLED (CONFIG_DEBUG_TEST_DRIVER_REMOVE ) && + !drv->suppress_bind_attrs;if (defer_all_probes) {/*
can you please repost the full series with me CC'd on all of the messages; I'm not subscribed to LKML.
Thanks,
Laszlo