video: rockchip: fb: fix inconsistent returns 'mutex:&dev_drv->front_lock'
authorHuang Jiachai <hjc@rock-chips.com>
Fri, 11 Nov 2016 10:36:47 +0000 (18:36 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Tue, 15 Nov 2016 14:05:00 +0000 (22:05 +0800)
Change-Id: If937a6cbc6d89ff0b4dbd2f540a87da1af3c4123
Signed-off-by: Huang Jiachai <hjc@rock-chips.com>
drivers/video/rockchip/rkfb_sysfs.c

index 4cfc84ee36cbc91c47325dee535715eb33634f70..81a1b759d8036de0b8189c23ad3bd666b4c8b86a 100644 (file)
@@ -431,17 +431,14 @@ static ssize_t set_dump_buffer(struct device *dev,
                return PTR_ERR(dentry);
        }
 
+       mutex_lock(&dev_drv->front_lock);
        if (!num_frames) {
-               mutex_lock(&dev_drv->front_lock);
-
                if (!dev_drv->front_regs) {
                        u16 xact, yact;
                        int data_format;
                        u32 dsp_addr;
                        int ymirror;
 
-                       mutex_unlock(&dev_drv->front_lock);
-
                        if (dev_drv->ops->get_dspbuf_info)
                                dev_drv->ops->get_dspbuf_info(dev_drv, &xact,
                                                &yact, &data_format, &dsp_addr,
@@ -452,8 +449,10 @@ static ssize_t set_dump_buffer(struct device *dev,
                        goto out;
                }
                front_regs = kmalloc(sizeof(*front_regs), GFP_KERNEL);
-               if (!front_regs)
+               if (!front_regs) {
+                       mutex_unlock(&dev_drv->front_lock);
                        return -ENOMEM;
+               }
                memcpy(front_regs, dev_drv->front_regs, sizeof(*front_regs));
 
                for (i = 0; i < front_regs->win_num; i++) {
@@ -491,8 +490,6 @@ static ssize_t set_dump_buffer(struct device *dev,
                }
 
                kfree(front_regs);
-
-               mutex_unlock(&dev_drv->front_lock);
        } else {
                trace->num_frames = num_frames;
                trace->count_frame = 0;
@@ -502,7 +499,7 @@ static ssize_t set_dump_buffer(struct device *dev,
                trace->mask_area = mask_area;
        }
 out:
-
+       mutex_unlock(&dev_drv->front_lock);
        return count;
 }