From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932387AbdJYSzq (ORCPT ); Wed, 25 Oct 2017 14:55:46 -0400 Received: from mout.web.de ([212.227.15.14]:55760 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932162AbdJYSzo (ORCPT ); Wed, 25 Oct 2017 14:55:44 -0400 To: linux-iio@vger.kernel.org, Hans de Goede , Hartmut Knaack , Jonathan Cameron , Lars-Peter Clausen , Peter Meerwald-Stadler From: SF Markus Elfring Subject: [PATCH] iio/accel/stk8312: Improve unlocking of a mutex in two functions Cc: LKML , kernel-janitors@vger.kernel.org Message-ID: Date: Wed, 25 Oct 2017 20:55:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:og3tK1YaYLeD7TNbXQmcUETYINP0rVINbViQYUZks23WM65BOVP PApefahrQPdj6ltQVTWkdk8+HgGj7cDcHZ6yRaC91i7cLfJ/n6W05vmCrPk0JGwK27pLc8s QAVmBwzyDZ4/d9v6e0WRH6Y+DopYn805Z+DUk8xRe9cOzfhU+MP9C85xv7XHU3XF+zOSw1t 2HoMhtpPfRwV1irvAJjxw== X-UI-Out-Filterresults: notjunk:1;V01:K0:5Tqr7Bn54sE=:z/pkfgEkQWWIBp5yPLaVoM bVMMdSANUYgQ7o1sGv1cJ7wjoaIXuBOSYoq1KRZD9G1NwHtjlDuJBIDX1sqTP2aOX9b90/WSe QAkGR0Q5/C8+COMuoaBtvAtvCDUKzU38X7sGAgwyNFNiyBHeSce7cWxXBjF+9UucLBtIBWCMM YL6TQ0+SJQPLUU1jOcybNtRDZ2D2Lp6cb+f/KYW49ApVk31+Uf1X0aCSgxvGMnC+2eWyo222v K5p3wHkPJ9FaX0hDdj86WfOKuyHF6caSFvHr25jg+3it8sOv4Eoe3/YBAF3Sl94IeatIJNQv7 U+bfzxyMS3a3CxkQwLqOHK7SP+F4VOCZ6qw2/O9ZRRX4In7jqEYlzsWKx+dWTJTsHPukNpwGu U3+01KW+GiayFk526rSyi7S74DboFCsH4EkZmy4sauUqNsVizxMc7wIUfyJfXbU/hjgKJ4yYd JDyA4gnMC31HrClUkn1wenwrGbjZf4Hm4kA9xyy/waW6S8a4haNc+OYVclxA7OATWsiniYETB Az0XCM8a2ZdsrUcvmUszXi6NK/QVV0JcxSI8vhYfrkjWaRWY5JaJspssJwTz3SUjyaNzPi0rl D8ce6UdFhGJmo3vlFI25bcN4YPiqgGAWYoKh2XRc8orxz6M6oOWPlQPkXDM8J6Jo3yfdn5LAf ACzDbLKJo5ke0ayw+LjT9DAVJ3W7vvhbZ1p2HdPGNDLrUMR2427wEHL3jO9j9jhrnymYuFBf6 R5yCNOe8Erl3iDLcwt+JBmAf0FO/CIIoauoEZ01uCERTCEqPJXz+dm+GdWkIliB22qy7AfNmS Ue+VkP57euBBr/BtIYVIEfIIL0mX6nIuKljYJJ5fSYE7yp/tF0= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Wed, 25 Oct 2017 20:46:18 +0200 * Adjust jump targets so that a call of the function "mutex_unlock" is mostly stored at the end of these function implementations. * Replace four calls by goto statements. * Adjust condition checks. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/iio/accel/stk8312.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/drivers/iio/accel/stk8312.c b/drivers/iio/accel/stk8312.c index cacc0da2f874..5275ab886e39 100644 --- a/drivers/iio/accel/stk8312.c +++ b/drivers/iio/accel/stk8312.c @@ -344,24 +344,24 @@ static int stk8312_read_raw(struct iio_dev *indio_dev, return -EBUSY; mutex_lock(&data->lock); ret = stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE); - if (ret < 0) { - mutex_unlock(&data->lock); - return ret; - } + if (ret) + goto unlock; + ret = stk8312_read_accel(data, chan->address); if (ret < 0) { stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE)); - mutex_unlock(&data->lock); - return ret; + goto unlock; } *val = sign_extend32(ret, 7); ret = stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE)); +unlock: mutex_unlock(&data->lock); - if (ret < 0) - return ret; - return IIO_VAL_INT; + if (!ret) + ret = IIO_VAL_INT; + + return ret; case IIO_CHAN_INFO_SCALE: *val = stk8312_scale_table[data->range - 1][0]; *val2 = stk8312_scale_table[data->range - 1][1]; @@ -444,17 +444,15 @@ static irqreturn_t stk8312_trigger_handler(int irq, void *p) data->buffer); if (ret < STK8312_ALL_CHANNEL_SIZE) { dev_err(&data->client->dev, "register read failed\n"); - mutex_unlock(&data->lock); - goto err; + goto unlock_after_failure; } } else { for_each_set_bit(bit, indio_dev->active_scan_mask, indio_dev->masklength) { ret = stk8312_read_accel(data, bit); - if (ret < 0) { - mutex_unlock(&data->lock); - goto err; - } + if (ret < 0) + goto unlock_after_failure; + data->buffer[i++] = ret; } } @@ -462,10 +460,13 @@ static irqreturn_t stk8312_trigger_handler(int irq, void *p) iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, pf->timestamp); -err: +notify_trigger: iio_trigger_notify_done(indio_dev->trig); - return IRQ_HANDLED; + +unlock_after_failure: + mutex_unlock(&data->lock); + goto notify_trigger; } static irqreturn_t stk8312_data_rdy_trig_poll(int irq, void *private) -- 2.14.3