Commit 97af1ce2 authored by Dhananjay Balan's avatar Dhananjay Balan Committed by Greg Kroah-Hartman

drivers: staging: sm750: Hold lock irrespective of fb numbers.

Start holding the lock for all cases irrespective of number of fb,
there could be a deadlock since this number could change in the
lifetime of this lock
Signed-off-by: default avatarDhananjay Balan <mail@dbalan.in>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8a21ff77
...@@ -183,10 +183,11 @@ static void lynxfb_ops_fillrect(struct fb_info *info, ...@@ -183,10 +183,11 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
rop = (region->rop != ROP_COPY) ? HW_ROP2_XOR : HW_ROP2_COPY; rop = (region->rop != ROP_COPY) ? HW_ROP2_XOR : HW_ROP2_COPY;
/* /*
* If not use spin_lock,system will die if user load driver * If not use spin_lock, system will die if user load driver
* and immediately unload driver frequently (dual) * and immediately unload driver frequently (dual)
* since they fb_count could change during the lifetime of
* this lock, we are holding it for all cases.
*/ */
if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock); spin_lock(&sm750_dev->slock);
sm750_dev->accel.de_fillrect(&sm750_dev->accel, sm750_dev->accel.de_fillrect(&sm750_dev->accel,
...@@ -194,7 +195,6 @@ static void lynxfb_ops_fillrect(struct fb_info *info, ...@@ -194,7 +195,6 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
region->dx, region->dy, region->dx, region->dy,
region->width, region->height, region->width, region->height,
color, rop); color, rop);
if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock); spin_unlock(&sm750_dev->slock);
} }
...@@ -219,8 +219,9 @@ static void lynxfb_ops_copyarea(struct fb_info *info, ...@@ -219,8 +219,9 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
/* /*
* If not use spin_lock, system will die if user load driver * If not use spin_lock, system will die if user load driver
* and immediately unload driver frequently (dual) * and immediately unload driver frequently (dual)
* since they fb_count could change during the lifetime of
* this lock, we are holding it for all cases.
*/ */
if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock); spin_lock(&sm750_dev->slock);
sm750_dev->accel.de_copyarea(&sm750_dev->accel, sm750_dev->accel.de_copyarea(&sm750_dev->accel,
...@@ -228,7 +229,6 @@ static void lynxfb_ops_copyarea(struct fb_info *info, ...@@ -228,7 +229,6 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
base, pitch, Bpp, region->dx, region->dy, base, pitch, Bpp, region->dx, region->dy,
region->width, region->height, region->width, region->height,
HW_ROP2_COPY); HW_ROP2_COPY);
if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock); spin_unlock(&sm750_dev->slock);
} }
...@@ -268,8 +268,9 @@ static void lynxfb_ops_imageblit(struct fb_info *info, ...@@ -268,8 +268,9 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
/* /*
* If not use spin_lock, system will die if user load driver * If not use spin_lock, system will die if user load driver
* and immediately unload driver frequently (dual) * and immediately unload driver frequently (dual)
* since they fb_count could change during the lifetime of
* this lock, we are holding it for all cases.
*/ */
if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock); spin_lock(&sm750_dev->slock);
sm750_dev->accel.de_imageblit(&sm750_dev->accel, sm750_dev->accel.de_imageblit(&sm750_dev->accel,
...@@ -278,7 +279,6 @@ static void lynxfb_ops_imageblit(struct fb_info *info, ...@@ -278,7 +279,6 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
image->dx, image->dy, image->dx, image->dy,
image->width, image->height, image->width, image->height,
fgcol, bgcol, HW_ROP2_COPY); fgcol, bgcol, HW_ROP2_COPY);
if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock); spin_unlock(&sm750_dev->slock);
} }
......
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