Bug 30070

Summary: Hang when hot-unplugging VGA during hibernation
Product: DRI Reporter: Rui Tiago Matos <tiagomatos>
Component: DRM/IntelAssignee: Chris Wilson <chris>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: medium    
Version: unspecified   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
Kernel output since boot until the 2nd hibernation when hang happened none

Description Rui Tiago Matos 2010-09-07 13:48:04 UTC
Created attachment 38533 [details]
Kernel output since boot until the 2nd hibernation when hang happened

I've had my laptop hanged when hibernating. I disconnected the VGA cable right
after sending the laptop into hibernation thus I think it's related.

I'm not sure yet if it always happens. I'll try to duplicate it tomorrow.

The attached kernel output contains several kernel call traces of it.
Comment 1 Chris Wilson 2010-09-08 01:49:13 UTC
I've added a patch:

commit 20a6e5f32ca0a02e423f47e9a6757e1f800a47f4
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Sep 8 09:45:11 2010 +0100

    drm/i915: Disable output polling across suspend & resume
    
    Suspending (especially hibernating) may take a finite amount of time,
    during which a hotplug event may trigger and we will attempt to handle
    it with inconsistent state. Disable hotplug polling around suspend and
    resume.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=30070
    Reported-by: Rui Tiago Matos <tiagomatos@gmail.com>
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

to http://cgit.freedesktop.org/~ickle/drm-intel/ drm-intel-staging
which I hope will help...

I suspect we may need adjust when we disable/enable the hotplug IRQs as well.
Comment 2 Chris Wilson 2011-02-01 01:32:49 UTC
I'm guessing that we hit an OOPS during the hibernate, and this particular OOPS was ever so easy to trigger...

commit 9334ef755f060e251f3f395caeda1a58b6834ea3
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri Jan 28 11:53:03 2011 +0000

    drm: Don't switch fb when disabling an output
    
    In drm_crtc_helper_set_config, we call drm_crtc_helper_set_mode which
    may return early and do no operation if the crtc is to be disabled. In
    this case we merrily swap to the new fb, discarding the old_fb believing
    that it has been cleaned up. However, due to the early return, the
    old_fb was not presented to the backend for correct reaping, and nor was
    the new one - which is about to be reaped via the
    drm_helper_disable_unused_functions(), leading to incorrect refcounting
    of the pinned objects.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=27722
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29857
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29230
    Tested-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.