Crash introduced by commit b8b2c7d845d5 ("base/platform: assert that dev_pm_domain callbacks are called unconditionally")

From: Alan Stern
Date: Tue Jan 19 2016 - 13:22:34 EST


Uwe:

Your commit causes my ASUS laptop to crash during early boot. The
problem occurs in platform_drv_probe(), affecting both the alarmtimer
and the asus_laptop platform drivers (I can't tell which is the
critical one).

The old code would not call platform_drv_probe() at all, and probing
would always succeed immediately because these drivers have no probe
routine. But with the new code, platform_drv_probe() does run. The
call to of_clk_set_defaults() returns -ENODEV, as does the call to
dev_pm_domain_attach(). The call to drv->probe() gets skipped, of
course. The final return value is -ENODEV, and so probing fails. This
causes the kernel to crash: blank screen, NumLock LED blinking.

The patch below fixes the problem, but I'm not sure that it's the best
solution. What is your advice?

Alan Stern



Index: usb-4.4/drivers/base/platform.c
===================================================================
--- usb-4.4.orig/drivers/base/platform.c
+++ usb-4.4/drivers/base/platform.c
@@ -524,6 +524,8 @@ static int platform_drv_probe(struct dev
ret = -ENXIO;
}

+ if (!drv->probe)
+ ret = 0;
return ret;
}