From patchwork Thu Jun 29 11:24:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dhananjay Balan X-Patchwork-Id: 9816449 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A6509603D7 for ; Thu, 29 Jun 2017 11:25:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 967532861C for ; Thu, 29 Jun 2017 11:25:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8B38528650; Thu, 29 Jun 2017 11:25:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B43BF2861C for ; Thu, 29 Jun 2017 11:25:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752143AbdF2LZu (ORCPT ); Thu, 29 Jun 2017 07:25:50 -0400 Received: from out5-smtp.messagingengine.com ([66.111.4.29]:33183 "EHLO out5-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751848AbdF2LZu (ORCPT ); Thu, 29 Jun 2017 07:25:50 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 25E2120AAA; Thu, 29 Jun 2017 07:25:49 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Thu, 29 Jun 2017 07:25:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dbalan.in; h=cc :date:from:message-id:subject:to:x-me-sender:x-me-sender :x-sasl-enc:x-sasl-enc; s=mesmtp; bh=sZ4kJj5fDawcRHMvjkA5eL/smUy pTSIwu130m6FkktM=; b=GIUpP2NQUMIupsSJlxcSvGQjKKHWUqRaJsYyQHhFpW+ J7KZqAUwbgkrk23Xvo1acwSuv5qfq7USlne6blzMJA1kAJUZq11uupXT9fDChaOp K633YPJ22+1BXYkap+4BnIA6BZoy3hQgKOqMF0XwoyHUnXIZnIxNzEhCN7GFz3BY = DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=fm1; bh=sZ4kJj 5fDawcRHMvjkA5eL/smUypTSIwu130m6FkktM=; b=Kwas7x/F6WxoSr7Hc2fKUj lHUAeFPKlst1ESREdKnwcrLRadbhPmLA95ks7kYiGaUuYbOwlEk4oOiB1AgPvxq+ +9vCZW7AJOjXcLDAW6eE/RlCZMBty8QLGB+Y24WO4IJbG2pNiz3BE5ayU35z58zU pEpZRZHKInpJLxTsOLCY/Z4r4xHn/kI5qiJlSAM2nOPK7y7+F3+0J08mKBxOy/OS DahoaipahGr2GAw1VVaCsUxcpa+vssStvcarfya+eq1mnS2T3HOC4+rl3SqJ7q4b jcSrDTtY76Qa5a0MzvnNHnZgZ9LXswNVHBIBzPuT6+p8ZtBFrrOcAJtenFP/VC/g == X-ME-Sender: X-Sasl-enc: 46AJItSxeQArmiC0bM59aAPj48ehdnhy9lfOawJNuPDi 1498735548 Received: from localhost (x2f7f136.dyn.telefonica.de [2.247.241.54]) by mail.messagingengine.com (Postfix) with ESMTPA id 9075E24788; Thu, 29 Jun 2017 07:25:48 -0400 (EDT) From: Dhananjay Balan To: sudipm.mukherjee@gmail.com Cc: teddy.wang@siliconmotion.com, gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Dhananjay Balan Subject: [PATCH] drivers: staging: sm750: Hold lock irrespective of fb numbers. Date: Thu, 29 Jun 2017 13:24:35 +0200 Message-Id: <20170629112435.30376-1-mail@dbalan.in> X-Mailer: git-send-email 2.13.2 Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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: Dhananjay Balan --- drivers/staging/sm750fb/sm750.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c index d5934f372387..af5c3c93a077 100644 --- a/drivers/staging/sm750fb/sm750.c +++ b/drivers/staging/sm750fb/sm750.c @@ -183,19 +183,19 @@ static void lynxfb_ops_fillrect(struct fb_info *info, 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) + * 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, base, pitch, Bpp, region->dx, region->dy, region->width, region->height, color, rop); - if (sm750_dev->fb_count > 1) - spin_unlock(&sm750_dev->slock); + spin_unlock(&sm750_dev->slock); } static void lynxfb_ops_copyarea(struct fb_info *info, @@ -219,17 +219,17 @@ static void lynxfb_ops_copyarea(struct fb_info *info, /* * If not use spin_lock, system will die if user load driver * 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, base, pitch, region->sx, region->sy, base, pitch, Bpp, region->dx, region->dy, region->width, region->height, HW_ROP2_COPY); - if (sm750_dev->fb_count > 1) - spin_unlock(&sm750_dev->slock); + spin_unlock(&sm750_dev->slock); } static void lynxfb_ops_imageblit(struct fb_info *info, @@ -268,9 +268,10 @@ static void lynxfb_ops_imageblit(struct fb_info *info, /* * If not use spin_lock, system will die if user load driver * 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, image->data, image->width >> 3, 0, @@ -278,8 +279,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info, image->dx, image->dy, image->width, image->height, fgcol, bgcol, HW_ROP2_COPY); - if (sm750_dev->fb_count > 1) - spin_unlock(&sm750_dev->slock); + spin_unlock(&sm750_dev->slock); } static int lynxfb_ops_pan_display(struct fb_var_screeninfo *var,