[Intel-gfx] [PATCH] drm/i915: intel_audio clear eld buf when disconnecting monitor
Takashi Iwai
tiwai at suse.de
Mon Mar 21 10:44:38 UTC 2016
On Mon, 21 Mar 2016 06:03:29 +0100,
libin.yang at linux.intel.com wrote:
>
> From: Libin Yang <libin.yang at linux.intel.com>
>
> When disconnecting monitor, dev_priv->dig_port_map[port]
> will be set NULL, which causes eld will not be updated in
> i915_audio_component_get_eld().
>
> This patch clears the eld buf when dev_priv->dig_port_map[port]
> is NULL.
>
> Signed-off-by: Libin Yang <libin.yang at linux.intel.com>
While this isn't certainly bad, I don't think it's mandatory. The
function returns zero, i.e. no data is copied. So the caller
shouldn't expect that the buffer is cleared in this case.
Actually, if we do zero-clear, a safer fix would be to do it at the
beginning. The similar "leak" can be seen, as we do memcpy() only for
drm_eld_size() bytes at max.
thanks,
Takashi
> ---
> drivers/gpu/drm/i915/intel_audio.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index fdc8b2a..9d3879e 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -732,6 +732,13 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
> ret = drm_eld_size(eld);
> memcpy(buf, eld, min(max_bytes, ret));
> }
> + } else {
> + /* dev_priv->dig_port_map[port] will be set NULL in
> + * intel_audio_codec_disable when disconnecting monitor.
> + * We need clear the eld buf.
> + */
> + memset(buf, 0, max_bytes);
> + ret = 0;
> }
>
> mutex_unlock(&dev_priv->av_mutex);
> --
> 1.9.1
>
More information about the Intel-gfx
mailing list