From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752712AbdFUJAI (ORCPT ); Wed, 21 Jun 2017 05:00:08 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:43691 "EHLO out3-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751744AbdFUJAC (ORCPT ); Wed, 21 Jun 2017 05:00:02 -0400 X-ME-Sender: X-Sasl-enc: Vn4E/jyrn6cCULUUDiKOSH9fGelrEAnJcu1ZHlplRnmw 1498035600 Message-ID: <1498035541.4855.3.camel@dbalan.in> Subject: Re: [PATCH] staging: sm750fb: move common locking code to a macro From: Dhananjay Balan Reply-To: mail@dbalan.in To: Dan Carpenter Cc: sudipm.mukherjee@gmail.com, devel@driverdev.osuosl.org, linux-fbdev@vger.kernel.org, teddy.wang@siliconmotion.com, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org Date: Wed, 21 Jun 2017 10:59:01 +0200 In-Reply-To: <20170620200538.krwizqgsyk5rqe22@mwanda> References: <20170620165013.11013-1-mail@dbalan.in> <20170620200538.krwizqgsyk5rqe22@mwanda> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.24.2 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Tue, 2017-06-20, 23:05 +0300-യ്ക്ക, Dan Carpenter എഴുതിയിരിക്കുന്നു: > On Tue, Jun 20, 2017 at 06:50:13PM +0200, Dhananjay Balan wrote: > > The locking and unlocking code used by copy routines is common, so > > moved it to a macro. > > > > Signed-off-by: Dhananjay Balan > > --- > > drivers/staging/sm750fb/sm750.c | 81 ++++++++++++++++------------- > > ------------ > > 1 file changed, 31 insertions(+), 50 deletions(-) > > > > diff --git a/drivers/staging/sm750fb/sm750.c > > b/drivers/staging/sm750fb/sm750.c > > index 386d4adcd91d..d8ab83aea46d 100644 > > --- a/drivers/staging/sm750fb/sm750.c > > +++ b/drivers/staging/sm750fb/sm750.c > > @@ -156,12 +156,25 @@ static int lynxfb_ops_cursor(struct fb_info > > *info, struct fb_cursor *fbcursor) > > return 0; > > } > > > > +/* > > + * If not using spin_lock, system will die if user frequently > > loads and > > + * immediately unloads driver (dual) > > + */ > > +#define dual_safe_call(func, ...) > > \ > > + do { > > \ > > + if (sm750_dev->fb_count > 1) > > \ > > + spin_lock(&sm750_dev->slock); > > \ > > + func(__VA_ARGS__); > > \ > > + if (sm750_dev->fb_count > 1) > > \ > > + spin_unlock(&sm750_dev->slock); > > \ > > + } while (0) > > + > > I feel like this is the wrong approach. You could just make a small > lock function and a small unlock function. Except that if statement > seems kind of bogus. What happens if ->fb_count is 0 when we lock > and > 1 when we unlock? Why not lock unconditionally? It is not likely to > be > contested if there are no other users. I've to admit that I don't have much info, but is fb_count supposed to change during this execution? > > > static void lynxfb_ops_fillrect(struct fb_info *info, > > const struct fb_fillrect *region) > > { > > struct lynxfb_par *par; > > struct sm750_dev *sm750_dev; > > - unsigned int base, pitch, Bpp, rop; > > + unsigned int base, pitch, bit_pp, rop; > > This part has nothing to do with locking... *frowny face* Sorry about that, I'll split this into separate commit. Thanks, Dhananjay Balan.