Suspend fails when RC6 power saving feature of the i915 is enabled. The display turns off, but the system never goes to S3: it is possible to access it via SSH. This happens with all three RC6 levels (RC6, RC6p and RC6pp).
Based on some debugging it seems that the suspend is prevented because "gen6_pm_rps_work_func" (@sys/dev/drm2/i915/i915_irq.c) hangs on a "DRM_LOCK(dev)" call, thus the "taskqueue_drain(dev_priv->tq, &dev_priv->rps_task);" call in ironlake_irq_uninstall (@sys/dev/drm2/i915/i915_irq.c) can never finish.
How-To-Repeat: 1. Enable RC6 in /boot/loader.conf:
drm.i915.enable_rc6=1 # or 3 for RC6p, 7 for RC6pp
2. With RC6 enabled, try to suspend the machine:
Created attachment 150427 [details]
don't lock in gen6_pm_rps_work_func if already locked
I can confirm this issue. I've been using the attached patch for a while now.
works flawless with
FreeBSD paperino 10.1-RELEASE-p12 FreeBSD 10.1-RELEASE-p12 #1 r284344M: Mon Jun 15 19:28:55 CEST 2015 root@paperino:/usr/obj/usr/src/sys/GENERIC amd64
I can confirm that the latest DRM and/or i915 imports have fixed this bug (in CURRENT at least).
For bugs matching the following conditions:
- Status == In Progress
- Assignee == "bugs@FreeBSD.org"
- Last Modified Year <= 2017
- Set Status to "Open"
Multiple reports confirm this has been fixed, and I can confirm on my X220 running recentish -CURRENT.