From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934377AbdKBUXj (ORCPT ); Thu, 2 Nov 2017 16:23:39 -0400 Received: from mout.web.de ([212.227.15.14]:62446 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932241AbdKBUXh (ORCPT ); Thu, 2 Nov 2017 16:23:37 -0400 To: devel@driverdev.osuosl.org, Greg Kroah-Hartman , H Hartley Sweeten , Ian Abbott Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Subject: [PATCH] staging: comedi: usbduxsigma: Improve unlocking of a mutex in three functions Message-ID: Date: Thu, 2 Nov 2017 21:23:26 +0100 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:pD8+un/G3CsIXuZWEvGeJRKScHFhZvX2Bt1YitvctS3OuC3XM5k WY5ufrxCWKV6nQOdHYnmELWJ9+SAJEYownyD0AwyVP0sE7b6bQ+oDEZR45BcfsmIWGwZOf9 jK4QkPg2xKoT2AH+vRut3xWogjxv31tQJBrRTZl1qPnrX/0ZlcJJuLNemclMaSeJcTZkYnA 9LC2EwWQ555Zu1C+n+2lg== X-UI-Out-Filterresults: notjunk:1;V01:K0:Mnglo0JvyUw=:XPlfVY0jy8BGR7RqcZDsxX YqZf/VRzF+xqj7bidiUtM/19qy16j/HMM/VfbHKixvlVkPnian7yJzCVRTk1Tx4MlVaihHsC7 1d79M8OndOikgXod5HvCy6W8rz8bA6aEBouw8P0Co/UpfG7zMykpA528AxyZ/Zwbhya6qtNdj WULleGKI9LrDL8mTVBYtttkjgIkXZfhI7LbgPf1qUYHKFMSdI1q+mrqHuBONO45ZW8YiDfW/k uYgY4/0CJ9EdDvY+dSBSwFitQAq2cwAwiNd6Jp1vIG8o4c2jQOwL01Bd5rhPmmtKyoVg4ZKFL 7TRcEN0uSvMXkBXAchDr/fEu1G9+B3yyeDfrLsZh86LnVVbWBSG9nG+/umJgUKTv8VCrW9Fn9 +PDmcHNYLZmZ3c8Tb4DVzicFzq8MrZ9Ue0RU3h9QfJQE4R04+zh2ifZA2ZZp8KqAvEYyA9izr tRxwKVe5IZ+Lt+YWWUHT0djycfhCtn93J3NlxjwxXRLI0c4XEKiWfQwgHTmm2Z8rDIeHCMe4y htsdbEFnJAZDFGDQDaWpkvqK8sBxZPcSjKxx1Jy/wOTShK4gWN0AEiT21ko3cKuGISWJlobF4 0Mh0G820UZc53FdVIIbCBl05mGP4MN1BgJ/y4cZi5UB2yYM/HcWsuOcu9C0YU7EDatEAEP4t9 2fyjI/pAubuLltNs9XbBeDQTITBvFgVxgDl1fLL3n5SKm4hO60FNTeJVVlLy7cM5UDI/Gv5zj Hzhzx6TCD5thPBy8OVqY8OkCgk11BII+tmKXEgHAqfdUaiD4oDMl5oCn6tbJGF3HQhMzn0gYg ShCxIoWFgNwnOztObUIc6G29oAO64F9N6aeRRmTDi/jiP4GQIE= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Thu, 2 Nov 2017 21:16:50 +0100 * Add a jump target so that a call of the function "mutex_unlock" is stored only twice in these function implementations. * Replace seven calls by goto statements. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/staging/comedi/drivers/usbduxsigma.c | 48 +++++++++++++++------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c index 456e9f13becb..7e8284ed265a 100644 --- a/drivers/staging/comedi/drivers/usbduxsigma.c +++ b/drivers/staging/comedi/drivers/usbduxsigma.c @@ -672,10 +672,8 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, devpriv->dux_commands[8] = sysred; ret = usbbuxsigma_send_cmd(dev, USBBUXSIGMA_AD_CMD); - if (ret < 0) { - mutex_unlock(&devpriv->mut); - return ret; - } + if (ret < 0) + goto unlock; devpriv->ai_counter = devpriv->ai_timer; @@ -686,8 +684,7 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, devpriv->n_ai_urbs, 1); if (ret < 0) { devpriv->ai_cmd_running = 0; - mutex_unlock(&devpriv->mut); - return ret; + goto unlock; } s->async->inttrig = NULL; } else { /* TRIG_INT */ @@ -697,6 +694,10 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, mutex_unlock(&devpriv->mut); return 0; + +unlock: + mutex_unlock(&devpriv->mut); + return ret; } static int usbduxsigma_ai_insn_read(struct comedi_device *dev, @@ -714,8 +715,8 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev, mutex_lock(&devpriv->mut); if (devpriv->ai_cmd_running) { - mutex_unlock(&devpriv->mut); - return -EBUSY; + ret = -EBUSY; + goto unlock; } create_adc_command(chan, &muxsg0, &muxsg1); @@ -730,19 +731,15 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev, /* adc commands */ ret = usbbuxsigma_send_cmd(dev, USBDUXSIGMA_SINGLE_AD_CMD); - if (ret < 0) { - mutex_unlock(&devpriv->mut); - return ret; - } + if (ret < 0) + goto unlock; for (i = 0; i < insn->n; i++) { u32 val; ret = usbduxsigma_receive_cmd(dev, USBDUXSIGMA_SINGLE_AD_CMD); - if (ret < 0) { - mutex_unlock(&devpriv->mut); - return ret; - } + if (ret < 0) + goto unlock; /* 32 bits big endian from the A/D converter */ val = be32_to_cpu(get_unaligned((__be32 @@ -753,6 +750,10 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev, mutex_unlock(&devpriv->mut); return insn->n; + +unlock: + mutex_unlock(&devpriv->mut); + return ret; } static int usbduxsigma_ao_insn_read(struct comedi_device *dev, @@ -782,8 +783,8 @@ static int usbduxsigma_ao_insn_write(struct comedi_device *dev, mutex_lock(&devpriv->mut); if (devpriv->ao_cmd_running) { - mutex_unlock(&devpriv->mut); - return -EBUSY; + ret = -EBUSY; + goto unlock; } for (i = 0; i < insn->n; i++) { @@ -791,15 +792,18 @@ static int usbduxsigma_ao_insn_write(struct comedi_device *dev, devpriv->dux_commands[2] = data[i]; /* value */ devpriv->dux_commands[3] = chan; /* channel number */ ret = usbbuxsigma_send_cmd(dev, USBDUXSIGMA_DA_CMD); - if (ret < 0) { - mutex_unlock(&devpriv->mut); - return ret; - } + if (ret < 0) + goto unlock; + s->readback[chan] = data[i]; } mutex_unlock(&devpriv->mut); return insn->n; + +unlock: + mutex_unlock(&devpriv->mut); + return ret; } static int usbduxsigma_ao_inttrig(struct comedi_device *dev, -- 2.15.0