[PATCH 1/2] drm/xe: Avoid fbdev suspend at runtime pm suspend
Rodrigo Vivi
rodrigo.vivi at intel.com
Mon Jun 3 21:52:17 UTC 2024
There's no need to suspend fbdev upon runtime_pm, and it is upseting
lockdep:
[ 313.150411] ======================================================
[ 313.150412] WARNING: possible circular locking dependency detected
[ 313.150413] 6.10.0-rc1pz+ #99 Tainted: G E
[ 313.150414] ------------------------------------------------------
[ 313.150414] kworker/2:0/33 is trying to acquire lock:
[ 313.150415] ffffffffb5f61340 (console_lock){+.+.}-{0:0}, at: intel_fbdev_set_suspend+0x115/0x1e0 [xe]
[ 313.150495]
but task is already holding lock:
[ 313.150495] ffffffffc0ce74a0 (xe_pm_runtime_lockdep_map){+.+.}-{0:0}, at: xe_pm_runtime_suspend+0x2a/0x2e0 [xe]
[ 313.150561]
which lock already depends on the new lock.
[snip]
-> #2 (xe_pm_runtime_lockdep_map){+.+.}-{0:0}:
[ 313.150563] xe_pm_runtime_resume_and_get+0x44/0xb0 [xe]
[ 313.150626] intelfb_create+0x150/0x360 [xe]
[snip]
[ 313.150932] xe_device_probe+0x439/0x4a0 [xe]
-> #1 (&helper->lock){+.+.}-{3:3}:
[snip]
[ 313.151097] intel_fbdev_set_par+0x16/0x60 [xe]
[snip]
[ 313.151402] xe_device_probe+0x439/0x4a0 [xe]
[snip]
-> #0 (console_lock){+.+.}-{0:0}:
[snip]
[ 313.151548] intel_fbdev_set_suspend+0x115/0x1e0 [xe]
[ 313.151607] xe_display_pm_suspend+0xd1/0x100 [xe]
[ 313.151679] xe_pm_runtime_suspend+0x2bf/0x2e0 [xe]
[snip]
[ 313.151817] Chain exists of:
console_lock --> &helper->lock --> xe_pm_runtime_lockdep_map
[ 313.151819] Possible unsafe locking scenario:
[ 313.151819] CPU0 CPU1
[ 313.151820] ---- ----
[ 313.151820] lock(xe_pm_runtime_lockdep_map);
[ 313.151821] lock(&helper->lock);
[ 313.151821] lock(xe_pm_runtime_lockdep_map);
[ 313.151822] lock(console_lock);
[ 313.151823]
*** DEADLOCK ***
Although we know that this scenario is a false positive because
runtime_pm suspend can never happen while the probe hasn't finished,
the best approach is to avoid the unnecessary calls.
Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
Cc: Anshuman Gupta <anshuman.gupta at intel.com>
Cc: Francois Dugast <francois.dugast at intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
drivers/gpu/drm/xe/display/xe_display.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
index 2a9b4a4f2e71..cd97975344f1 100644
--- a/drivers/gpu/drm/xe/display/xe_display.c
+++ b/drivers/gpu/drm/xe/display/xe_display.c
@@ -333,7 +333,8 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
- intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
+ if (!runtime)
+ intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
intel_dmc_suspend(xe);
}
@@ -383,7 +384,8 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime)
intel_opregion_resume(xe);
- intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_RUNNING, false);
+ if (!runtime)
+ intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_RUNNING, false);
intel_power_domains_enable(xe);
}
--
2.45.1
More information about the Intel-xe
mailing list