diff mbox

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

Message ID Pine.LNX.4.44L0.1601191312260.1312-100000@iolanthe.rowland.org (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Alan Stern Jan. 19, 2016, 6:22 p.m. UTC
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




--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Uwe Kleine-König Jan. 19, 2016, 7:07 p.m. UTC | #1
Hello Alan,

On Tue, Jan 19, 2016 at 01:22:22PM -0500, Alan Stern wrote:
> 
> 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?
You want

	http://mid.gmane.org/1449132704-9952-1-git-send-email-martin.wilck@ts.fujitsu.com

.

Greg, I'd welcome this fix in mainline and 4.4.x.

Best regards
Uwe
Greg KH Jan. 19, 2016, 7:55 p.m. UTC | #2
On Tue, Jan 19, 2016 at 08:07:09PM +0100, Uwe Kleine-König wrote:
> Hello Alan,
> 
> On Tue, Jan 19, 2016 at 01:22:22PM -0500, Alan Stern wrote:
> > 
> > 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?
> You want
> 
> 	http://mid.gmane.org/1449132704-9952-1-git-send-email-martin.wilck@ts.fujitsu.com
> 
> .
> 
> Greg, I'd welcome this fix in mainline and 4.4.x.

Yes it's in my queue to get to after 4.5-rc1 -s out.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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;
 }