From patchwork Mon Oct 30 15:46:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SF Markus Elfring X-Patchwork-Id: 832097 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yQf3m3jDZz9t2l for ; Tue, 31 Oct 2017 02:46:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932243AbdJ3Pqn (ORCPT ); Mon, 30 Oct 2017 11:46:43 -0400 Received: from mout.web.de ([212.227.17.11]:61050 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932156AbdJ3Pqm (ORCPT ); Mon, 30 Oct 2017 11:46:42 -0400 Received: from [192.168.1.2] ([77.181.252.76]) by smtp.web.de (mrweb103 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MBTIY-1dymwA0MNy-00AUrH; Mon, 30 Oct 2017 16:46:40 +0100 Subject: [PATCH 1/3] pinctrl: mcp23s08: Improve unlocking of a mutex in mcp23s08_irq() From: SF Markus Elfring To: linux-gpio@vger.kernel.org, Linus Walleij , Sebastian Reichel Cc: LKML , kernel-janitors@vger.kernel.org References: Message-ID: <01bfaa76-f947-f148-077b-35949bf8e229@users.sourceforge.net> Date: Mon, 30 Oct 2017 16:46:39 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB X-Provags-ID: V03:K0:kohWUPPsyTlX1ofRUd3rNr0Sljz6f/QENNGIQ60nvUfvvnMW3RN ZkzbJjg5htJ1L7NtgZWJp9W1abfwpdQvqK8NnP1BCB99PCLSllp7SUCxHTty/yt6BNesicY QUlxpl9YcwdDE576BtPpfcOF9Hbo2I0zfbLFv6OZK3bm6EAxX5i/6POrrJTk+aoSsBvh8oa 98g7zySNfi3corihoPrMw== X-UI-Out-Filterresults: notjunk:1; V01:K0:D+TV8U8ty3k=:pvBazPHEEAP/2hUfp0ghbv cHZJIQFOz73RJrmE0w+/6gsXETlPojkGz2KAlxjBEo3IKcrTM5ZrZ0JpPm5yKKntYkp2/a5ez 76TdWpLkeYb5FFzNxTeylgwMs3Cb6LLzgwW+McLXyJw1htYV2KK7P9XpPWPOOPKMNWPRhLMPy vWAgoV4pV+PhIs4/tEjfybmdqhTSYfJFT8BW5fib2CriLLOm5Mwfvdtq13QUykL57v3XfBee8 9Z1KnA03ofyfHGYIyKhuPQIRuspxlgv71qz2YGtwcR22Bp7YUyHV0MC8fd42TUV+kXRw5yRpJ B1SJuW/xJZ190s2cycF517gnQEKofp7u/sZ7bCXciMvW+hTJnjm2hWdtCuMfWHJndncvbJhzq ywyPWMVelf/z4I3nSA3bQ6fo+8AlcDWdUhepLrmkgFIQxNVMSiAXQw6GhB4W/qWvWFCyODZ4o VqqUj0Y/t6Mg1hmw6Zz86B2tyNHCzV+P4ivNZF2GXnEsTz6C6iamcfPkWr49H9hEknqAHTSNh AHJEES3FZpIo7zifU9PdhkWGPnE4VhzzobzBLLuMP+IXFb5ejUqEyMJ018um0c6eJfwfUJ86f uhVeDOnWo4rnb8ZLy7/6MjCyenaPUs8vYbx3rC5m/pVH0khiJCoWDM1TE705mhxrJoUWWNbri vjclxApK90PNHz9nZRRXnT5dMDjBSWVCbArp8KaazvjYhNfQimVVyuI1kC7yervJnil15mB7j m81nF9plNHGzjo3BghNBt6dCyyHlygLiZYWJUS1CvQPRrCIZ8oiZa4dzi5odNx+Rvaem3CLdI Wac0ywfbqiOY9W0q2SppjPN/4E1Oh/9b5aicG47NNsz90HC2js= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Markus Elfring Date: Mon, 30 Oct 2017 16:03:12 +0100 * Add a jump target so that a call of the function "mutex_unlock" is stored only twice in this function implementation. * Replace five calls by goto statements. * Adjust five condition checks. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/pinctrl/pinctrl-mcp23s08.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index 3e40d4245512..919eb7268331 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -457,31 +457,22 @@ static irqreturn_t mcp23s08_irq(int irq, void *data) defval_changed, gpio_set; mutex_lock(&mcp->lock); - if (mcp_read(mcp, MCP_INTF, &intf) < 0) { - mutex_unlock(&mcp->lock); - return IRQ_HANDLED; - } + if (mcp_read(mcp, MCP_INTF, &intf)) + goto unlock; - if (mcp_read(mcp, MCP_INTCAP, &intcap) < 0) { - mutex_unlock(&mcp->lock); - return IRQ_HANDLED; - } + if (mcp_read(mcp, MCP_INTCAP, &intcap)) + goto unlock; - if (mcp_read(mcp, MCP_INTCON, &intcon) < 0) { - mutex_unlock(&mcp->lock); - return IRQ_HANDLED; - } + if (mcp_read(mcp, MCP_INTCON, &intcon)) + goto unlock; - if (mcp_read(mcp, MCP_DEFVAL, &defval) < 0) { - mutex_unlock(&mcp->lock); - return IRQ_HANDLED; - } + if (mcp_read(mcp, MCP_DEFVAL, &defval)) + goto unlock; /* This clears the interrupt(configurable on S18) */ - if (mcp_read(mcp, MCP_GPIO, &gpio) < 0) { - mutex_unlock(&mcp->lock); - return IRQ_HANDLED; - } + if (mcp_read(mcp, MCP_GPIO, &gpio)) + goto unlock; + gpio_orig = mcp->cached_gpio; mcp->cached_gpio = gpio; mutex_unlock(&mcp->lock); @@ -543,6 +534,10 @@ static irqreturn_t mcp23s08_irq(int irq, void *data) } return IRQ_HANDLED; + +unlock: + mutex_unlock(&mcp->lock); + return IRQ_HANDLED; } static void mcp23s08_irq_mask(struct irq_data *data)