> Looks like you have Optimus (intel + nvidia), and the backtrace has > runtime pm in it, which is something new Dave added for 3.12, adding > him in explicitly. The simplest explanation is that disp->init is > NULL. And it seems like there are no outputs from the earlier nouveau > init prints. I guess that the call to nouveau_display_resume from > nouveau_pmops_runtime_resume should be guarded by a if > (dev->mode_config.num_crtc) like it is everywhere else. > > -iliaYour guess was right, this (hopefully attached patch) fixes it for me! Thanks, Tobias
Tobias Klausmann
2013-Sep-08 21:21 UTC
[Nouveau] [PATCH] Bail in nouveau_display_resume() if there are no output available!
--- drivers/gpu/drm/nouveau/nouveau_display.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index d2712e6..a4ba734 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -452,7 +452,12 @@ void nouveau_display_resume(struct drm_device *dev) { struct drm_crtc *crtc; - nouveau_display_init(dev); + int ret; + if (dev->mode_config.num_crtc) { + ret = nouveau_display_init(dev); + if (ret) + nouveau_display_destroy(dev); + } /* Force CLUT to get re-loaded during modeset */ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { -- 1.8.1.4
>> Looks like you have Optimus (intel + nvidia), and the backtrace has >> runtime pm in it, which is something new Dave added for 3.12, adding >> him in explicitly. The simplest explanation is that disp->init is >> NULL. And it seems like there are no outputs from the earlier nouveau >> init prints. I guess that the call to nouveau_display_resume from >> nouveau_pmops_runtime_resume should be guarded by a if >> (dev->mode_config.num_crtc) like it is everywhere else. >> >> -ilia > > Your guess was right, this (hopefully attached patch) fixes it for me!Does it look like this one? Dave. -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-drm-nouveau-fix-oops-on-runtime-suspend-resume.patch Type: application/octet-stream Size: 1745 bytes Desc: not available URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20130909/0390b566/attachment.obj>
On 08.09.2013 23:33, Dave Airlie wrote:>>> Looks like you have Optimus (intel + nvidia), and the backtrace has >>> runtime pm in it, which is something new Dave added for 3.12, adding >>> him in explicitly. The simplest explanation is that disp->init is >>> NULL. And it seems like there are no outputs from the earlier nouveau >>> init prints. I guess that the call to nouveau_display_resume from >>> nouveau_pmops_runtime_resume should be guarded by a if >>> (dev->mode_config.num_crtc) like it is everywhere else. >>> >>> -ilia >> Your guess was right, this (hopefully attached patch) fixes it for me! > Does it look like this one? > > Dave.No, mine was quick and dirty, reverted it and took yours. But i'm a little bit confused that this is a suspend/resume problem, i booted the kernel for the first time while seeing the oops. But anyway i tested it and it works. Tobias