OMAPFB: move dssdev->sync call out from omapfb_realloc_fbmem
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 7 Dec 2012 14:47:28 +0000 (16:47 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 7 Dec 2012 14:51:36 +0000 (16:51 +0200)
Currently omapfb_realloc_fbmem() calls dssdev->sync to ensure any
possible frame update is finished. This patch moves the call to
dssdev->sync from omapfb_realloc_fbmem to the callers of
omapfb_realloc_fbmem.

This keeps dssdev related calls out from omapfb_realloc_fbmem, which
makes sense as the function should only deal with fb memory. Also, this
seems to avoid a lockdep warning about possible circular locking.
However, the exact reason for that warning is still unclear.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/omapfb/omapfb-ioctl.c
drivers/video/omap2/omapfb/omapfb-main.c
drivers/video/omap2/omapfb/omapfb-sysfs.c

index 94de47e..d30b45d 100644 (file)
@@ -211,6 +211,7 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi)
 {
        struct omapfb_info *ofbi = FB2OFB(fbi);
        struct omapfb2_device *fbdev = ofbi->fbdev;
+       struct omap_dss_device *display = fb2display(fbi);
        struct omapfb2_mem_region *rg;
        int r = 0, i;
        size_t size;
@@ -220,6 +221,9 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi)
 
        size = PAGE_ALIGN(mi->size);
 
+       if (display && display->driver->sync)
+               display->driver->sync(display);
+
        rg = ofbi->region;
 
        down_write_nested(&rg->lock, rg->id);
index 1a69d7c..85130fa 100644 (file)
@@ -1611,7 +1611,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type)
 {
        struct omapfb_info *ofbi = FB2OFB(fbi);
        struct omapfb2_device *fbdev = ofbi->fbdev;
-       struct omap_dss_device *display = fb2display(fbi);
        struct omapfb2_mem_region *rg = ofbi->region;
        unsigned long old_size = rg->size;
        unsigned long old_paddr = rg->paddr;
@@ -1626,9 +1625,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type)
        if (old_size == size && old_type == type)
                return 0;
 
-       if (display && display->driver->sync)
-                       display->driver->sync(display);
-
        omapfb_free_fbmem(fbi);
 
        if (size == 0) {
index 17aa174..18fa9e1 100644 (file)
@@ -441,6 +441,7 @@ static ssize_t store_size(struct device *dev, struct device_attribute *attr,
        struct fb_info *fbi = dev_get_drvdata(dev);
        struct omapfb_info *ofbi = FB2OFB(fbi);
        struct omapfb2_device *fbdev = ofbi->fbdev;
+       struct omap_dss_device *display = fb2display(fbi);
        struct omapfb2_mem_region *rg;
        unsigned long size;
        int r;
@@ -455,6 +456,9 @@ static ssize_t store_size(struct device *dev, struct device_attribute *attr,
        if (!lock_fb_info(fbi))
                return -ENODEV;
 
+       if (display && display->driver->sync)
+               display->driver->sync(display);
+
        rg = ofbi->region;
 
        down_write_nested(&rg->lock, rg->id);