HDMI: add mutex lock to edid modelist operation.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
This commit is contained in:
Zheng Yang 2015-05-29 10:08:34 +08:00
parent 1fb8cff52e
commit d6f81d1133
3 changed files with 8 additions and 3 deletions

View File

@ -114,10 +114,14 @@ static ssize_t display_show_modes(struct device *dev,
const struct fb_videomode *mode;
int i;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getmodelist) {
if (dsp->ops->getmodelist(dsp, &modelist))
if (dsp->ops->getmodelist(dsp, &modelist)) {
mutex_unlock(&dsp->lock);
return -EINVAL;
}
} else {
mutex_unlock(&dsp->lock);
return 0;
}
i = 0;
@ -131,6 +135,7 @@ static ssize_t display_show_modes(struct device *dev,
mode = &display_modelist->mode;
i += mode_string(buf, i, mode);
}
mutex_unlock(&dsp->lock);
return i;
}

View File

@ -253,10 +253,12 @@ static void hdmi_wq_remove(struct hdmi *hdmi)
#ifdef CONFIG_SWITCH
switch_set_state(&(hdmi->switchdev), 0);
#endif
mutex_lock(&hdmi->ddev->lock);
list_for_each_safe(pos, n, &hdmi->edid.modelist) {
list_del(pos);
kfree(pos);
}
mutex_unlock(&hdmi->ddev->lock);
for (i = 0; i < HDMI_MAX_EDID_BLOCK; i++)
kfree(hdmi->edid.raw[i]);
kfree(hdmi->edid.audio);

View File

@ -39,9 +39,7 @@ static int hdmi_get_modelist(struct rk_display_device *device,
{
struct hdmi *hdmi = device->priv_data;
mutex_lock(&hdmi->lock);
*modelist = &hdmi->edid.modelist;
mutex_unlock(&hdmi->lock);
return 0;
}