Commit 636f4e1b authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAPFB: move dssdev->sync call out from omapfb_realloc_fbmem

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: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 09645d25
...@@ -211,6 +211,7 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi) ...@@ -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 omapfb_info *ofbi = FB2OFB(fbi);
struct omapfb2_device *fbdev = ofbi->fbdev; struct omapfb2_device *fbdev = ofbi->fbdev;
struct omap_dss_device *display = fb2display(fbi);
struct omapfb2_mem_region *rg; struct omapfb2_mem_region *rg;
int r = 0, i; int r = 0, i;
size_t size; size_t size;
...@@ -220,6 +221,9 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi) ...@@ -220,6 +221,9 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi)
size = PAGE_ALIGN(mi->size); size = PAGE_ALIGN(mi->size);
if (display && display->driver->sync)
display->driver->sync(display);
rg = ofbi->region; rg = ofbi->region;
down_write_nested(&rg->lock, rg->id); down_write_nested(&rg->lock, rg->id);
......
...@@ -1611,7 +1611,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) ...@@ -1611,7 +1611,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type)
{ {
struct omapfb_info *ofbi = FB2OFB(fbi); struct omapfb_info *ofbi = FB2OFB(fbi);
struct omapfb2_device *fbdev = ofbi->fbdev; struct omapfb2_device *fbdev = ofbi->fbdev;
struct omap_dss_device *display = fb2display(fbi);
struct omapfb2_mem_region *rg = ofbi->region; struct omapfb2_mem_region *rg = ofbi->region;
unsigned long old_size = rg->size; unsigned long old_size = rg->size;
unsigned long old_paddr = rg->paddr; unsigned long old_paddr = rg->paddr;
...@@ -1626,9 +1625,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) ...@@ -1626,9 +1625,6 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type)
if (old_size == size && old_type == type) if (old_size == size && old_type == type)
return 0; return 0;
if (display && display->driver->sync)
display->driver->sync(display);
omapfb_free_fbmem(fbi); omapfb_free_fbmem(fbi);
if (size == 0) { if (size == 0) {
......
...@@ -441,6 +441,7 @@ static ssize_t store_size(struct device *dev, struct device_attribute *attr, ...@@ -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 fb_info *fbi = dev_get_drvdata(dev);
struct omapfb_info *ofbi = FB2OFB(fbi); struct omapfb_info *ofbi = FB2OFB(fbi);
struct omapfb2_device *fbdev = ofbi->fbdev; struct omapfb2_device *fbdev = ofbi->fbdev;
struct omap_dss_device *display = fb2display(fbi);
struct omapfb2_mem_region *rg; struct omapfb2_mem_region *rg;
unsigned long size; unsigned long size;
int r; int r;
...@@ -455,6 +456,9 @@ static ssize_t store_size(struct device *dev, struct device_attribute *attr, ...@@ -455,6 +456,9 @@ static ssize_t store_size(struct device *dev, struct device_attribute *attr,
if (!lock_fb_info(fbi)) if (!lock_fb_info(fbi))
return -ENODEV; return -ENODEV;
if (display && display->driver->sync)
display->driver->sync(display);
rg = ofbi->region; rg = ofbi->region;
down_write_nested(&rg->lock, rg->id); down_write_nested(&rg->lock, rg->id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment