staging: sm750fb: fix sparse warning for lock

Started by Peng Fan on Aug 5, 2015 · 3 messages from 3 authors · Last reply Aug 5, 2015

Subsystems (3)

Maintainers (5)

Show 1 more
STALE4116d

open the first message on its own page

Message details and related content
Use __acquire() and __release() in the right place to silence the sparse
lock checking warning.

drivers/staging/sm750fb/sm750.c:177:13: warning: context imbalance in 'lynxfb_ops_fillrect' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:243:9: warning: context imbalance in 'lynxfb_ops_copyarea' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:247:13: warning: context imbalance in 'lynxfb_ops_imageblit' - different lock contexts for basic block

Signed-off-by: Peng Fan <redacted>
Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Cc: Teddy Wang <teddy.wang@siliconmotion.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/staging/sm750fb/sm750.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 8e201f1..5ba1c06 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -203,6 +203,8 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 	 */
 	if (share->dual)
 		spin_lock(&share->slock);
+	else
+		__acquire(&share->slock);
 
 	share->accel.de_fillrect(&share->accel,
 				 base, pitch, Bpp,
@@ -211,6 +213,8 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 				 color, rop);
 	if (share->dual)
 		spin_unlock(&share->slock);
+	else
+		__release(&share->slock);
 }
 
 static void lynxfb_ops_copyarea(struct fb_info *info,
@@ -235,6 +239,8 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
 	 */
 	if (share->dual)
 		spin_lock(&share->slock);
+	else
+		__acquire(&share->slock);
 
 	share->accel.de_copyarea(&share->accel,
 				 base, pitch, region->sx, region->sy,
@@ -242,6 +248,8 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
 				 region->width, region->height, HW_ROP2_COPY);
 	if (share->dual)
 		spin_unlock(&share->slock);
+	else
+		__release(&share->slock);
 }
 
 static void lynxfb_ops_imageblit(struct fb_info *info,
@@ -282,6 +290,8 @@ _do_work:
 	 */
 	if (share->dual)
 		spin_lock(&share->slock);
+	else
+		__acquire(&share->slock);
 
 	share->accel.de_imageblit(&share->accel,
 				  image->data, image->width>>3, 0,
@@ -291,6 +301,8 @@ _do_work:
 				  fgcol, bgcol, HW_ROP2_COPY);
 	if (share->dual)
 		spin_unlock(&share->slock);
+	else
+		__release(&share->slock);
 }
 
 static int lynxfb_ops_pan_display(struct fb_var_screeninfo *var,
-- 
1.8.4
Message details and related content
On Wed, Aug 05, 2015 at 09:26:44PM +0800, Peng Fan wrote:
quoted hunk
Use __acquire() and __release() in the right place to silence the sparse
lock checking warning.

drivers/staging/sm750fb/sm750.c:177:13: warning: context imbalance in 'lynxfb_ops_fillrect' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:243:9: warning: context imbalance in 'lynxfb_ops_copyarea' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:247:13: warning: context imbalance in 'lynxfb_ops_imageblit' - different lock contexts for basic block

Signed-off-by: Peng Fan <redacted>
Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Cc: Teddy Wang <teddy.wang@siliconmotion.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/staging/sm750fb/sm750.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 8e201f1..5ba1c06 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -203,6 +203,8 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 	 */
 	if (share->dual)
 		spin_lock(&share->slock);
+	else
+		__acquire(&share->slock);
That's horrid, please don't do stuff like this just to make a static
checker "quiet".

greg k-h
Message details and related content
On Wed, Aug 05, 2015 at 09:26:44PM +0800, Peng Fan wrote:
Use __acquire() and __release() in the right place to silence the sparse
lock checking warning.

drivers/staging/sm750fb/sm750.c:177:13: warning: context imbalance in 'lynxfb_ops_fillrect' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:243:9: warning: context imbalance in 'lynxfb_ops_copyarea' - different lock contexts for basic block
drivers/staging/sm750fb/sm750.c:247:13: warning: context imbalance in 'lynxfb_ops_imageblit' - different lock contexts for basic block
Sparse is really bad at locking stuff.  Smatch is also really bad for
locking and I have been promising to re-write that check for years, but
I take comfort always in the fact that at least it's not as bad as
Sparse.

You should pretty much ignore Sparse locking warnings.

regards,
dan carpenter
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help