From: Thomas Richter <richter@rus.uni-stuttgart.de>
To: ville.syrjala@linux.intel.com
Cc: intel-gfx@lists.freedesktop.org
Subject: Deadlock in intel_enable_pipe_a()
Date: Mon, 09 Jun 2014 01:14:22 +0200 [thread overview]
Message-ID: <5394EE4E.3040402@rus.uni-stuttgart.de> (raw)
In-Reply-To: <1402092584-16413-1-git-send-email-ville.syrjala@linux.intel.com>
Hi Ville, hi Daniel, dear intel experts,
just went through the problem I send around, and I guess I understand
now what happens here. The reason *why* resume fails is that there is a
deadlock situation in intel_display.c:
*) loading the module calls intel_modeset_init()
*) intel_modeset_init() calls intel_modeset_setup_hw_state(), but
protects access to it with a global lock.
*) intel_modeset_setup_hw_state() calls intel_sanitize_crtc()
*) intel_sanitize_crtc() finds that the pipe-a quirk is enabled and
calls intel_enable_pipe_a()
*) intel_enable_pipe_a() calls intel_release_load_detect_pipe(), however
not using the same mutex context as the caller (intel_modeset_init()).
*) intel_release_load_detect_pipe() again gets the mutex of the crtc.
Unfortunately, at this time, the caller (intel_modeset_init()) had
already everything locked.
Needless to say, this deadlocks and blocks the kernel completely,
causing the problem I found above.
To verify my hypothesis, I removed the locks in
intel_release_load_detect_pipe(), (obviously risking race conditions,
but never mind for the test).
The result is that the machine is responsive after the resume. It still
does not show a display (apparently, intel_sanitize_crtc() is
insufficient and does not sanitize enough), but at least one can
force-enable it again.
Thus, two bugs:
1) attempting to lock the same lock twice, nested, causing a deadlock.
The pipe A quirk is not working correctly by requiring a call into a
method that requires a lock that is already held.
2) not sanitizing the chipset sufficiently, still keeping the display
black. (This, being, of course a side effect of the buggy bios).
Hope this helps!
Thomas
next prev parent reply other threads:[~2014-06-08 23:14 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 16:15 [PATCH 00/15] drm/i915: Fix 830M/ns2501 for real, well almost ville.syrjala
2014-06-05 16:15 ` [PATCH 01/15] drm/i915: Use named initializers for gmch wm params ville.syrjala
2014-06-05 20:43 ` Chris Wilson
2014-06-05 21:02 ` Thomas Richter
2014-06-05 21:33 ` Bug reports on 830MG patches (thanks, but more trouble) Thomas Richter
2014-06-06 8:46 ` Ville Syrjälä
2014-06-06 17:24 ` Thomas Richter
2014-06-06 20:08 ` Ville Syrjälä
2014-06-06 21:09 ` Thomas Richter
2014-06-06 21:41 ` Ville Syrjälä
2014-06-08 21:29 ` [PATCH] Check for a min level when computing the watermark Thomas Richter
2014-06-06 16:38 ` [PATCH 01/15] drm/i915: Use named initializers for gmch wm params Daniel Vetter
2014-06-05 16:15 ` [PATCH 02/15] drm/i915: Fix gen2 planes B and C max watermark value ville.syrjala
2014-06-05 16:15 ` [PATCH 03/15] drm/i915: Don't get hw state from DVO chip unless DVO is enabled ville.syrjala
2014-06-06 16:39 ` Daniel Vetter
2014-06-05 16:15 ` [PATCH 04/15] drm/i915: ns2501 is on DVOB ville.syrjala
2014-06-06 16:57 ` Daniel Vetter
2014-06-06 21:46 ` Ville Syrjälä
2014-06-05 16:15 ` [PATCH 05/15] drm/i915: Enable DVO between mode_set and dpms hooks ville.syrjala
2014-06-05 16:15 ` [PATCH 06/15] drm/i915: Don't call DVO mode_set hook on DPMS changes ville.syrjala
2014-06-05 16:15 ` [PATCH 07/15] drm/i915: Kill useless ns2501_dump_regs ville.syrjala
2014-06-05 16:15 ` [PATCH 08/15] drm/i915: Rewrite ns2501 driver a bit ville.syrjala
2014-06-05 16:15 ` [PATCH 09/15] drm/i915: Ignore VBT int_crt_support on 830M ville.syrjala
2014-06-06 17:00 ` Daniel Vetter
2014-06-06 19:44 ` [PATCH v2 " ville.syrjala
2014-06-06 20:13 ` Daniel Vetter
2014-06-07 20:37 ` [Patch] Add minimum watermark level for I830 Thomas Richter
2014-06-06 21:15 ` [PATCH v2 09/15] drm/i915: Ignore VBT int_crt_support on 830M Bob Paauwe
2014-06-06 22:23 ` Daniel Vetter
2014-06-06 22:51 ` Jesse Barnes
[not found] ` <2094_1402093395_53923F53_2094_10301_1_CAKMK7uGAnNP4VR9+zXd0KD5v0Vo=XuDS=NhRNFRqHKcae7T4XQ@mail.gmail.com>
2014-06-07 17:32 ` Thomas Richter
2014-10-24 13:23 ` Jani Nikula
2014-10-24 14:11 ` Ville Syrjälä
2014-06-05 16:15 ` [PATCH 10/15] drm/i915: Fix DVO 2x clock enable " ville.syrjala
2014-06-05 16:16 ` [PATCH 11/15] Revert "drm/i915: Nuke pipe A quirk on i830M" ville.syrjala
2014-06-05 16:16 ` [PATCH 12/15] drm/i915: Add pipe B force quirk for 830M ville.syrjala
2014-06-05 16:16 ` [PATCH 13/15] drm/i915: Eliminate rmw from .update_primary_plane() ville.syrjala
2014-06-06 0:02 ` Matt Roper
2014-06-06 19:45 ` [PATCH v2 " ville.syrjala
2014-06-05 16:16 ` [PATCH 14/15] drm/i915: Call .update_primary_plane in intel_{enable, disable}_primary_hw_plane() ville.syrjala
2014-06-06 0:02 ` Matt Roper
2014-06-06 8:40 ` Ville Syrjälä
2014-06-06 19:46 ` [PATCH v2 " ville.syrjala
2014-06-05 16:16 ` [PATCH 15/15] drm/i915: Check pixel clock in ns2501 mode_valid hook ville.syrjala
2014-06-06 19:47 ` [PATCH 16/15] drm/i915: Pass intel_crtc to intel_disable_pipe() and intel_wait_for_pipe_off() ville.syrjala
2014-06-06 19:47 ` [PATCH 17/15] drm/i915: Disable double wide even when leaving the pipe on ville.syrjala
2014-06-06 22:09 ` [PATCH v2 " ville.syrjala
2014-06-08 23:14 ` Thomas Richter [this message]
2014-06-09 6:47 ` [PATCH] drm/i915: Avoid double mutex lock applying pipe A quirk during sanitize_crtc() Chris Wilson
2014-06-09 8:30 ` Ville Syrjälä
2014-06-09 8:50 ` Chris Wilson
[not found] ` <28223_1402303866_5395757A_28223_3428_1_20140609085045.GE16767@nuc-i3427.alporthouse.com>
2014-06-09 10:57 ` Partial success - Fixing resume from s2ram on S6010 Thomas Richter
2014-06-09 11:08 ` Ville Syrjälä
[not found] ` <28223_1402312148_539595D3_28223_4884_1_20140609110857.GM27580@intel.com>
2014-06-09 11:19 ` Thomas Richter
2014-06-09 11:31 ` Ville Syrjälä
[not found] ` <2086_1402313568_53959B5F_2086_895_1_20140609113155.GN27580@intel.com>
2014-06-09 12:33 ` Thomas Richter
2014-06-09 12:57 ` Thomas Richter
2014-06-09 18:41 ` Thomas Richter
2014-06-09 19:46 ` [PATCH] drm/i915: Init important ns2501 registers ville.syrjala
[not found] ` <28223_1402343538_53961072_28223_7661_1_1402343204-28608-1-git-send-email-ville.syrjala@linux.intel.com>
2014-06-09 20:58 ` Thomas Richter
2014-06-09 22:29 ` Thomas Richter
2014-06-10 14:04 ` Ville Syrjälä
[not found] ` <29040_1402409145_539710B9_29040_2220_1_20140610140430.GD27580@intel.com>
2014-06-10 16:38 ` Thomas Richter
2014-06-18 16:03 ` i830GM on IBM R31 works with alm_fixes5 repository Thomas Richter
2014-06-10 7:02 ` [PATCH] drm/i915: Avoid double mutex lock applying pipe A quirk during sanitize_crtc() Daniel Vetter
2014-06-10 8:53 ` Ville Syrjälä
2014-06-10 9:22 ` Daniel Vetter
2014-06-10 6:59 ` Daniel Vetter
2014-06-10 7:13 ` Chris Wilson
2014-06-06 19:47 ` [PATCH 18/15] drm/i915: Preserve VGACNTR bits from the BIOS ville.syrjala
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5394EE4E.3040402@rus.uni-stuttgart.de \
--to=richter@rus.uni-stuttgart.de \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox