From d6f81d11337829cf86fbad53e209ae2cb2f12d88 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Fri, 29 May 2015 10:08:34 +0800 Subject: [PATCH] HDMI: add mutex lock to edid modelist operation. Signed-off-by: Zheng Yang --- drivers/video/rockchip/display-sys.c | 7 ++++++- drivers/video/rockchip/hdmi/rockchip-hdmi-core.c | 2 ++ drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c | 2 -- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/video/rockchip/display-sys.c b/drivers/video/rockchip/display-sys.c index 1380362cbbbd..534f00d01248 100755 --- a/drivers/video/rockchip/display-sys.c +++ b/drivers/video/rockchip/display-sys.c @@ -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; } diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c index 3d1abfe424e4..56d7b8d65e9d 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c @@ -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); diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c index 3d9d5c0cc2c3..f994d96c80f5 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c @@ -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; } -- 2.34.1