* [PATCH 0/3] drm/amd/display: Fix FRL status polling work lifetime
@ 2026-11-10 4:21 ` Eren Özen
0 siblings, 0 replies; 10+ messages in thread
From: Eren Özen @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
The HDMI FRL status polling work and its workqueue, added in commit
5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm"), have
three lifetime problems:
1. The delayed work is initialized in amdgpu_dm_connector_init_helper(),
which also runs at runtime for every new MST connector. A hotplug
while FRL polling is armed re-initializes a pending delayed work.
2. amdgpu_dm_fini() never cancels the self-rearming work and never
destroys the workqueue, so the workqueue and its rescuer thread
leak on every unbind, and the work can run after dc_destroy().
3. If the workqueue allocation fails, amdgpu_dm_atomic_commit_tail()
still passes the NULL workqueue to queue_delayed_work().
Patch 1 moves the initialization to amdgpu_dm_init(). Patch 2 tears
the work and workqueue down in amdgpu_dm_fini(), and depends on
patch 1. Patch 3 skips queueing when the workqueue does not exist.
These issues were pointed out by an automated review of the
workqueue rename patch earlier this year.
This series should combine cleanly with Timur's pending "Check HDMI
FRL support before creating polling workqueue". With that patch, the
workqueue is NULL on hardware without FRL, and the NULL checks in
patches 2 and 3 handle that case. If his patch lands first, patch 1
needs a trivial rebase because both touch the same context.
Testing:
- Built for x86_64 with GCC 16, no new warnings with W=1 on the
changed files.
- amdgpu_dm KUnit suite (UML): 1910/1912 pass both with and without
this series. The two failures are pre-existing
(dm_test_detect_hides_secondary_tile and
dm_test_dmub_sw_init_gtt_only_asic).
- Booted on a Cezanne (DCN 2.1) laptop with
CONFIG_DEBUG_OBJECTS_WORK and CONFIG_DEBUG_OBJECTS_TIMERS: one
polling workqueue thread, no ODEBUG warnings, and a clean s2idle
suspend/resume.
- Unbinding amdgpu through sysfs on the same laptop, then counting the
hdmi_frl_status_polling rescuer threads:
without this series (Fedora 7.2.15): 1 before, 1 after (leaked)
with this series: 1 before, 0 after
No ODEBUG warnings or splats during the unbind with this series.
- Not tested: MST hotplug with an active HDMI FRL stream, since I
have no FRL sink or MST hub. Cezanne has no HDMI FRL, so the
polling work itself never runs on my machine.
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
Eren Özen (3):
drm/amd/display: Initialize FRL status polling work once at DM init
drm/amd/display: Destroy FRL status polling workqueue in amdgpu_dm_fini()
drm/amd/display: Don't queue FRL status polling on a NULL workqueue
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++++++++-
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 2 --
2 files changed, 11 insertions(+), 3 deletions(-)
---
base-commit: 47df73aa49d1988c8f684b7caf8be6570e966844
change-id: 20261110-frl-polling-wq-teardown-2b3336cce9e6
Best regards,
--
Eren Özen <erenozen@protonmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/3] drm/amd/display: Initialize FRL status polling work once at DM init
2026-11-10 4:21 ` Eren Özen
@ 2026-11-10 4:21 ` Eren Özen
-1 siblings, 0 replies; 10+ messages in thread
From: Eren Özen via B4 Relay @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
From: Eren Özen <erenozen@protonmail.com>
hdmi_frl_status_polling_work is a single delayed work item shared by the
whole display manager, but it is initialized from
amdgpu_dm_connector_init_helper(), which runs once for every connector.
That helper is also called at runtime from dm_dp_add_mst_connector()
when a DisplayPort MST branch device is plugged in. If an HDMI FRL
stream is active at that moment, the polling work is queued and
re-arming itself every 200ms, and INIT_DELAYED_WORK() on it
reinitializes the timer and work entry of a pending item, which can
corrupt the timer and workqueue state.
The work item belongs to the display manager, not to a connector, so
initialize it, along with its polling delay, once in amdgpu_dm_init()
next to the workqueue it runs on.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++++
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 2 --
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 33c73ca9cf..bf2f74d7d9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -774,6 +774,10 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
dc_init_callbacks(adev->dm.dc, &init_params);
}
+
+ adev->dm.hdmi_frl_status_polling_delay_ms = 200;
+ INIT_DELAYED_WORK(&adev->dm.hdmi_frl_status_polling_work,
+ hdmi_frl_status_polling_work);
if (adev->dm.dc->caps.max_links > 0) {
adev->dm.hdmi_frl_status_polling_wq =
create_singlethread_workqueue("hdmi_frl_status_polling_wq");
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
index e8f050feb6..b1bdb94d74 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
@@ -3327,8 +3327,6 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
aconnector->hdmi_hpd_debounce_delay_ms = 0;
}
- dm->hdmi_frl_status_polling_delay_ms = 200;
- INIT_DELAYED_WORK(&dm->hdmi_frl_status_polling_work, hdmi_frl_status_polling_work);
/*
* configure support HPD hot plug connector_>polled default value is 0
* which means HPD hot plug not supported
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 1/3] drm/amd/display: Initialize FRL status polling work once at DM init
@ 2026-11-10 4:21 ` Eren Özen
0 siblings, 0 replies; 10+ messages in thread
From: Eren Özen @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
hdmi_frl_status_polling_work is a single delayed work item shared by the
whole display manager, but it is initialized from
amdgpu_dm_connector_init_helper(), which runs once for every connector.
That helper is also called at runtime from dm_dp_add_mst_connector()
when a DisplayPort MST branch device is plugged in. If an HDMI FRL
stream is active at that moment, the polling work is queued and
re-arming itself every 200ms, and INIT_DELAYED_WORK() on it
reinitializes the timer and work entry of a pending item, which can
corrupt the timer and workqueue state.
The work item belongs to the display manager, not to a connector, so
initialize it, along with its polling delay, once in amdgpu_dm_init()
next to the workqueue it runs on.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++++
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 2 --
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 33c73ca9cf..bf2f74d7d9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -774,6 +774,10 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
dc_init_callbacks(adev->dm.dc, &init_params);
}
+
+ adev->dm.hdmi_frl_status_polling_delay_ms = 200;
+ INIT_DELAYED_WORK(&adev->dm.hdmi_frl_status_polling_work,
+ hdmi_frl_status_polling_work);
if (adev->dm.dc->caps.max_links > 0) {
adev->dm.hdmi_frl_status_polling_wq =
create_singlethread_workqueue("hdmi_frl_status_polling_wq");
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
index e8f050feb6..b1bdb94d74 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
@@ -3327,8 +3327,6 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
aconnector->hdmi_hpd_debounce_delay_ms = 0;
}
- dm->hdmi_frl_status_polling_delay_ms = 200;
- INIT_DELAYED_WORK(&dm->hdmi_frl_status_polling_work, hdmi_frl_status_polling_work);
/*
* configure support HPD hot plug connector_>polled default value is 0
* which means HPD hot plug not supported
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH 1/3] drm/amd/display: Initialize FRL status polling work once at DM init
2026-11-10 4:21 ` Eren Özen
(?)
@ 2026-11-10 4:35 ` sashiko-bot
2026-11-10 13:53 ` Eren Özen
-1 siblings, 1 reply; 10+ messages in thread
From: sashiko-bot @ 2026-11-10 4:35 UTC (permalink / raw)
To: Eren Özen; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] drm/amd/display: Fixes trailer cites 5c9b8b27a883 instead of
0e967e086e75
--
commit 3f93b63ddceded95cea3ea6ed4bbadf253534d70
Author: Eren Özen <erenozen@protonmail.com>
> drm/amd/display: Initialize FRL status polling work once at DM init
>
> hdmi_frl_status_polling_work is a single delayed work item shared by the
> whole display manager, but it is initialized from
> amdgpu_dm_connector_init_helper(), which runs once for every connector.
> That helper is also called at runtime from dm_dp_add_mst_connector()
> when a DisplayPort MST branch device is plugged in. If an HDMI FRL
> stream is active at that moment, the polling work is queued and
> re-arming itself every 200ms, and INIT_DELAYED_WORK() on it
> reinitializes the timer and work entry of a pending item, which can
> corrupt the timer and workqueue state.
>
> The work item belongs to the display manager, not to a connector, so
> initialize it, along with its polling delay, once in amdgpu_dm_init()
> next to the workqueue it runs on.
>
> Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
> Assisted-by: Claude:claude-opus-5-5
> Signed-off-by: Eren Özen <erenozen@protonmail.com>
[Severity: Low]
5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm") originally
initialized hdmi_frl_status_polling_delay_ms and hdmi_frl_status_polling_work
once inside amdgpu_dm_init(), and 0e967e086e75 ("drm/amd/display: Extract
connector and encoder code to amdgpu_dm_connector") moved those two lines into
amdgpu_dm_connector_init_helper(). Should the Fixes: tag reference that
commit instead?
Fixes: 0e967e086e75 ("drm/amd/display: Extract connector and encoder code to amdgpu_dm_connector")
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261110-frl-polling-wq-teardown-v1-0-0ff028d5c35b@protonmail.com?part=1
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 1/3] drm/amd/display: Initialize FRL status polling work once at DM init
2026-11-10 4:35 ` sashiko-bot
@ 2026-11-10 13:53 ` Eren Özen
0 siblings, 0 replies; 10+ messages in thread
From: Eren Özen @ 2026-11-10 13:53 UTC (permalink / raw)
To: sashiko-reviews; +Cc: dri-devel
On Tue, 10 Nov 2026 04:35:38 +0000, sashiko-bot@kernel.org wrote:
> 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm") originally
> initialized hdmi_frl_status_polling_delay_ms and hdmi_frl_status_polling_work
> once inside amdgpu_dm_init(), and 0e967e086e75 ("drm/amd/display: Extract
> connector and encoder code to amdgpu_dm_connector") moved those two lines into
> amdgpu_dm_connector_init_helper(). Should the Fixes: tag reference that
> commit instead?
Yes, thanks. 5c9b8b27a883 initialized the work once in amdgpu_dm_init(),
and the per-connector initialization came in with 0e967e086e75. I'll
change patch 1 to
Fixes: 0e967e086e75 ("drm/amd/display: Extract connector and encoder code to amdgpu_dm_connector")
in v2. Patches 2 and 3 keep 5c9b8b27a883, since the missing teardown
and the unchecked workqueue pointer date back to that commit.
Eren Özen
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/3] drm/amd/display: Destroy FRL status polling workqueue in amdgpu_dm_fini()
2026-11-10 4:21 ` Eren Özen
@ 2026-11-10 4:21 ` Eren Özen
-1 siblings, 0 replies; 10+ messages in thread
From: Eren Özen via B4 Relay @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
From: Eren Özen <erenozen@protonmail.com>
amdgpu_dm_init() allocates hdmi_frl_status_polling_wq on every device
with at least one display link, but amdgpu_dm_fini() never destroys it,
unlike the other display manager workqueues. Every unbind or unload of
amdgpu leaks the workqueue and its rescuer thread, and each rebind adds
another one, visible as an extra kworker/R-hdmi_frl_status_polling_wq
thread.
The polling work also re-queues itself every 200ms while an HDMI FRL
stream is active and dereferences dm->dc under dm->dc_lock. Nothing on
the teardown path cancels it, so if it is still pending when
amdgpu_dm_fini() runs, it can run after dc_destroy() and
mutex_destroy(&dm->dc_lock).
Cancel the polling work and destroy its workqueue at the start of
amdgpu_dm_fini(), next to the vblank control workqueue. With the
previous patch, the work item is initialized before the workqueue is
allocated, so checking the workqueue pointer is enough to know that
both are valid, including on the amdgpu_dm_init() error path. This
patch depends on that ordering.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index bf2f74d7d9..fed1893d2f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -889,6 +889,12 @@ static void amdgpu_dm_fini(struct amdgpu_device *adev)
adev->dm.vblank_control_workqueue = NULL;
}
+ if (adev->dm.hdmi_frl_status_polling_wq) {
+ cancel_delayed_work_sync(&adev->dm.hdmi_frl_status_polling_work);
+ destroy_workqueue(adev->dm.hdmi_frl_status_polling_wq);
+ adev->dm.hdmi_frl_status_polling_wq = NULL;
+ }
+
if (adev->dm.idle_workqueue) {
if (adev->dm.idle_workqueue->running) {
adev->dm.idle_workqueue->enable = false;
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 2/3] drm/amd/display: Destroy FRL status polling workqueue in amdgpu_dm_fini()
@ 2026-11-10 4:21 ` Eren Özen
0 siblings, 0 replies; 10+ messages in thread
From: Eren Özen @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
amdgpu_dm_init() allocates hdmi_frl_status_polling_wq on every device
with at least one display link, but amdgpu_dm_fini() never destroys it,
unlike the other display manager workqueues. Every unbind or unload of
amdgpu leaks the workqueue and its rescuer thread, and each rebind adds
another one, visible as an extra kworker/R-hdmi_frl_status_polling_wq
thread.
The polling work also re-queues itself every 200ms while an HDMI FRL
stream is active and dereferences dm->dc under dm->dc_lock. Nothing on
the teardown path cancels it, so if it is still pending when
amdgpu_dm_fini() runs, it can run after dc_destroy() and
mutex_destroy(&dm->dc_lock).
Cancel the polling work and destroy its workqueue at the start of
amdgpu_dm_fini(), next to the vblank control workqueue. With the
previous patch, the work item is initialized before the workqueue is
allocated, so checking the workqueue pointer is enough to know that
both are valid, including on the amdgpu_dm_init() error path. This
patch depends on that ordering.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index bf2f74d7d9..fed1893d2f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -889,6 +889,12 @@ static void amdgpu_dm_fini(struct amdgpu_device *adev)
adev->dm.vblank_control_workqueue = NULL;
}
+ if (adev->dm.hdmi_frl_status_polling_wq) {
+ cancel_delayed_work_sync(&adev->dm.hdmi_frl_status_polling_work);
+ destroy_workqueue(adev->dm.hdmi_frl_status_polling_wq);
+ adev->dm.hdmi_frl_status_polling_wq = NULL;
+ }
+
if (adev->dm.idle_workqueue) {
if (adev->dm.idle_workqueue->running) {
adev->dm.idle_workqueue->enable = false;
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/3] drm/amd/display: Don't queue FRL status polling on a NULL workqueue
2026-11-10 4:21 ` Eren Özen
@ 2026-11-10 4:21 ` Eren Özen
-1 siblings, 0 replies; 10+ messages in thread
From: Eren Özen via B4 Relay @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
From: Eren Özen <erenozen@protonmail.com>
If create_singlethread_workqueue() fails in amdgpu_dm_init(), the
driver only logs an error and continues with
hdmi_frl_status_polling_wq set to NULL. The next atomic commit that
enables an HDMI FRL stream then passes that NULL pointer to
queue_delayed_work() and crashes.
Skip the polling when the workqueue is missing, the same way
amdgpu_dm_atomic_commit_tail() already checks vblank_control_workqueue
before using it. FRL link status is then not polled, but the display
keeps working.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index fed1893d2f..798e4401fe 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -4769,7 +4769,7 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_commit *state,
break;
}
}
- if (frl_stream_found) {
+ if (frl_stream_found && dm->hdmi_frl_status_polling_wq) {
if (queue_delayed_work(dm->hdmi_frl_status_polling_wq,
&dm->hdmi_frl_status_polling_work,
msecs_to_jiffies(dm->hdmi_frl_status_polling_delay_ms)))
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 3/3] drm/amd/display: Don't queue FRL status polling on a NULL workqueue
@ 2026-11-10 4:21 ` Eren Özen
0 siblings, 0 replies; 10+ messages in thread
From: Eren Özen @ 2026-11-10 4:21 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter, Fangzhi Zuo
Cc: amd-gfx, dri-devel, linux-kernel, Eren Özen, timur.kristof
If create_singlethread_workqueue() fails in amdgpu_dm_init(), the
driver only logs an error and continues with
hdmi_frl_status_polling_wq set to NULL. The next atomic commit that
enables an HDMI FRL stream then passes that NULL pointer to
queue_delayed_work() and crashes.
Skip the polling when the workqueue is missing, the same way
amdgpu_dm_atomic_commit_tail() already checks vblank_control_workqueue
before using it. FRL link status is then not polled, but the display
keeps working.
Fixes: 5c9b8b27a883 ("drm/amd/display: Tie FRL support into amdgpu_dm")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Eren Özen <erenozen@protonmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index fed1893d2f..798e4401fe 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -4769,7 +4769,7 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_commit *state,
break;
}
}
- if (frl_stream_found) {
+ if (frl_stream_found && dm->hdmi_frl_status_polling_wq) {
if (queue_delayed_work(dm->hdmi_frl_status_polling_wq,
&dm->hdmi_frl_status_polling_work,
msecs_to_jiffies(dm->hdmi_frl_status_polling_delay_ms)))
--
2.56.0
^ permalink raw reply related [flat|nested] 10+ messages in thread