[PATCH 2/2] drm/xe/display: Do not do intel_fbdev_set_suspend during runtime
Rodrigo Vivi
rodrigo.vivi at intel.com
Fri Sep 13 20:39:41 UTC 2024
On Thu, Sep 12, 2024 at 06:55:45AM +0530, Suraj Kandpal wrote:
> Do not do intel_fbdev_set_suspend during runtime_suspend/resume
> functions. This cause a big circular lock_dep splat.
>
> kworker/0:4/198 is trying to acquire lock:
> <4> [77.185594] ffffffff83398500 (console_lock){+.+.}-{0:0}, at:
> intel_fbdev_set_suspend+0x169/0x1f0 [xe]
> <4> [77.185947]
> but task is already holding lock:
> <4> [77.185949] ffffffffa09e9460
> (xe_pm_runtime_lockdep_map){+.+.}-{0:0}, at:
> xe_pm_runtime_suspend+0x51/0x3f0 [xe]
> <4> [77.186262]
> which lock already depends on the new lock.
> <4> [77.186264]
> the existing dependency chain (in reverse order) is:
> <4> [77.186266]
> -> #2 (xe_pm_runtime_lockdep_map){+.+.}-{0:0}:
> <4> [77.186276] pm_runtime_lockdep_prime+0x2f/0x50 [xe]
> <4> [77.186572] xe_pm_runtime_resume_and_get+0x29/0x90 [xe]
> <4> [77.186867] intelfb_create+0x150/0x390 [xe]
> <4> [77.187197]
> __drm_fb_helper_initial_config_and_unlock+0x31c/0x5e0 [drm_kms_helper]
> <4> [77.187243] drm_fb_helper_initial_config+0x3d/0x50
> [drm_kms_helper]
> <4> [77.187274] intel_fbdev_client_hotplug+0xb1/0x140 [xe]
> <4> [77.187603] drm_client_register+0x87/0xd0 [drm]
> <4> [77.187704] intel_fbdev_setup+0x51c/0x640 [xe]
> <4> [77.188033] intel_display_driver_register+0xb7/0xf0 [xe]
> <4> [77.188438] xe_display_register+0x21/0x40 [xe]
> <4> [77.188809] xe_device_probe+0xa8d/0xbf0 [xe]
> <4> [77.189035] xe_pci_probe+0x333/0x5b0 [xe]
> <4> [77.189330] local_pci_probe+0x48/0xb0
> <4> [77.189341] pci_device_probe+0xc8/0x280
> <4> [77.189351] really_probe+0xf8/0x390
> <4> [77.189362] __driver_probe_device+0x8a/0x170
> <4> [77.189373] driver_probe_device+0x23/0xb0
same here, please let me see the full log
>
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
> drivers/gpu/drm/xe/display/xe_display.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 39da79069b5a..a3131a67e5b1 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -322,7 +322,9 @@ static void __xe_display_pm_suspend(struct xe_device *xe, bool runtime)
> * properly.
> */
> intel_power_domains_disable(xe);
> - intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
> + if (!runtime)
> + intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
> +
> if (!runtime && has_display(xe)) {
> drm_kms_helper_poll_disable(&xe->drm);
> intel_display_driver_disable_user_access(xe);
> @@ -457,7 +459,8 @@ static void __xe_display_pm_resume(struct xe_device *xe, bool runtime)
>
> intel_opregion_resume(display);
>
> - 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.43.2
>
More information about the Intel-xe
mailing list