Commit c6e360a0 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Revert "base: dd: don't remove driver_data in -EPROBE_DEFER case"

This reverts commit ded9db38.

Thierry Reding writes:
	This causes a boot regression on at least one board, caused by
	one of the drivers looking at driver data to check whether or
	not the driver has properly loaded. If the code encounters a
	non-NULL pointer it tries to dereference it, but because it's
	already been freed there is no memory backing it and things
	crash.

	I don't think keeping stale pointers around is a good idea. The
	whole point of setting this to NULL in the core is so that probe
	failures result in the same starting conditions no matter what.

	Can we please get this reverted?
Reported-by: default avatarThierry Reding <thierry.reding@gmail.com>
Cc: Yi Zhang <yizhang_hust@163.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cc736607
...@@ -402,8 +402,7 @@ static int really_probe(struct device *dev, struct device_driver *drv) ...@@ -402,8 +402,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)
devres_release_all(dev); devres_release_all(dev);
driver_sysfs_remove(dev); driver_sysfs_remove(dev);
dev->driver = NULL; dev->driver = NULL;
if (ret != -EPROBE_DEFER) dev_set_drvdata(dev, NULL);
dev_set_drvdata(dev, NULL);
if (dev->pm_domain && dev->pm_domain->dismiss) if (dev->pm_domain && dev->pm_domain->dismiss)
dev->pm_domain->dismiss(dev); dev->pm_domain->dismiss(dev);
pm_runtime_reinit(dev); pm_runtime_reinit(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment