]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/audio: use eld_mutex to protect access to connector->eld
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 6 Dec 2024 09:43:09 +0000 (11:43 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 16 Dec 2024 16:02:08 +0000 (18:02 +0200)
Reading access to connector->eld can happen at the same time the
drm_edid_to_eld() updates the data. Take the newly added eld_mutex in
order to protect connector->eld from concurrent access.

Reviewed-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241206-drm-connector-eld-mutex-v2-6-c9bce1ee8bea@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/i915/display/intel_audio.c

index 32aa9ec1a204d2ecde46cad36598aa768a3af671..3902ab8431139c3ff4dc17b841d94b6d3241dec3 100644 (file)
@@ -699,10 +699,12 @@ bool intel_audio_compute_config(struct intel_encoder *encoder,
        const struct drm_display_mode *adjusted_mode =
                &crtc_state->hw.adjusted_mode;
 
+       mutex_lock(&connector->eld_mutex);
        if (!connector->eld[0]) {
                drm_dbg_kms(&i915->drm,
                            "Bogus ELD on [CONNECTOR:%d:%s]\n",
                            connector->base.id, connector->name);
+               mutex_unlock(&connector->eld_mutex);
                return false;
        }
 
@@ -710,6 +712,7 @@ bool intel_audio_compute_config(struct intel_encoder *encoder,
        memcpy(crtc_state->eld, connector->eld, sizeof(crtc_state->eld));
 
        crtc_state->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
+       mutex_unlock(&connector->eld_mutex);
 
        return true;
 }