[PATCH] drm/amd/display: Use separate iterator for preferred mode lookup

From: Yibiao Li

Date: Thu Oct 08 2026 - 01:17:27 EST


From: Yibiao Li <biaobiao2233@xxxxxxxxx>

create_stream_for_sink() uses preferred_mode both as the list iterator
and as the selected mode. This triggers a false positive from
scripts/coccinelle/iterators/use_after_iter.cocci: native_mode_found
already ensures that an exhausted iterator is replaced before use.

Use a separate iterator and assign preferred_mode only when a preferred
entry is found. This keeps the selected mode separate from the iterator
state and makes native_mode_found unnecessary. Preserve the fallback to
the first entry, or NULL when the list is empty.

No functional change intended.

Reported-by: kernel test robot <lkp@xxxxxxxxx>
Link: https://lore.kernel.org/oe-kbuild-all/202609190901.yKTzhsGz-lkp@xxxxxxxxx/
Assisted-by: LLM coccinelle
Signed-off-by: Yibiao Li <biaobiao2233@xxxxxxxxx>
---
.../drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

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 d386bb1475..ceea8fe481 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
@@ -1453,12 +1453,12 @@ create_stream_for_sink(struct drm_connector *connector,
struct drm_device *dev = connector->dev;
struct amdgpu_dm_connector *aconnector = NULL;
struct drm_display_mode *preferred_mode = NULL;
+ struct drm_display_mode *connector_mode;
const struct drm_connector_state *con_state = &dm_state->base;
struct dc_stream_state *stream = NULL;
struct drm_display_mode mode;
struct drm_display_mode saved_mode;
struct drm_display_mode *freesync_mode = NULL;
- bool native_mode_found = false;
bool recalculate_timing = false;
bool scale = dm_state->scaling != RMX_OFF;
int mode_refresh;
@@ -1509,14 +1509,14 @@ create_stream_for_sink(struct drm_connector *connector,
stream->timing.flags.LTE_340MCSC_SCRAMBLE =
connector->display_info.hdmi.scdc.scrambling.low_rates;

- list_for_each_entry(preferred_mode, &connector->modes, head) {
+ list_for_each_entry(connector_mode, &connector->modes, head) {
/* Search for preferred mode */
- if (preferred_mode->type & DRM_MODE_TYPE_PREFERRED) {
- native_mode_found = true;
+ if (connector_mode->type & DRM_MODE_TYPE_PREFERRED) {
+ preferred_mode = connector_mode;
break;
}
}
- if (!native_mode_found)
+ if (!preferred_mode)
preferred_mode = list_first_entry_or_null(
&connector->modes,
struct drm_display_mode,
--
2.43.0