From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161195AbdKQVU6 (ORCPT ); Fri, 17 Nov 2017 16:20:58 -0500 Received: from mout.web.de ([212.227.15.14]:49348 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965979AbdKQVUs (ORCPT ); Fri, 17 Nov 2017 16:20:48 -0500 Subject: [PATCH 3/3] ALSA: rme32: Improve unlocking of an IRQ in two functions From: SF Markus Elfring To: alsa-devel@alsa-project.org, Bhumika Goyal , Jaroslav Kysela , Takashi Iwai , Takashi Sakamoto Cc: LKML , kernel-janitors@vger.kernel.org References: <67820e63-aed9-c775-8417-b0f531a9b305@users.sourceforge.net> Message-ID: <5aae0bad-92ba-8d01-2379-e2d80ab180b3@users.sourceforge.net> Date: Fri, 17 Nov 2017 22:20:02 +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: <67820e63-aed9-c775-8417-b0f531a9b305@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:dPZeqysSBFCLbEJLuLqk1ddClPpCioq4cpcD7o0DFuzVz20WlBd NRnwGV0tlwvBaABuH+R87N4IeiZnvy5LBLB+IumS2x1ioWB3swOe9v/i45Bk0Jpj0frmn8m X3hJP/mZ0medb6pzjT9Rnp15K3BljYS00EwWcdPky7ggVBqTwDnubkKahQZzuIP5FIzEwBT WpD8oeYBUZkSfZS0JxhwA== X-UI-Out-Filterresults: notjunk:1;V01:K0:ooTjrw2+k0c=:VrcbWi1/uLb5L2Gw9NFSYq z762qU3J9uCTWtWQVqn4uEgazJBQjz85lcDIebpCqonmitwJSUvTnk28WKaG51ZZF61i7vBNs i20fsYLlsDfmLImP0LeyakN5bFNRty3228PgHZ0rsVdwqQI03L01M5xSk1zu+21Kt5vmdqGL+ lwpd2VEXvZ8X8GkFwl8liUXa1PInT56Ph7GXAEKA6exicQrhrN6QPLUBycWPBrYepyO+WBGhj 6f9CjrzfgIotPRCHdZFgfhgXoXWKYXIYczgPe+9onax9Bb6ArZ7rFMTP3EIlKgoxR0Erp1L/f 2eqH0n6X1FhbQMEIn9ZedH9RcNZSWR0mudUzEm9CXJlNwz+W6MeLwsazbQkbPVNidnWWESI46 rA1lS9Kq6rIYIX3WgY+SDJzUwn4xzBr0LodpvachRnKJRsrLdcSmd3FOUgcFhrJg1aBqQSEKK Kx8NqQewA1GZeDlOlCtKChqWqoe7gVhFOsWWV0CgLXccLGQ8JBbL+w/Xgzfv3uuaWjNsgmZnx 4Tuhl7DXAujKsMksEG6c76rV6RuXT8MFAOjZv2H++z/6HsZvxygQ3OXGYVNHj2nJwBjLPNjKf nRyJy3nGcVxz81Vh0MmtjeghNd1Qam0ovElva6Vnvo2uFDu1+gsMOSzVODK18tNZudYChVjo9 1oyGM6GJ5aABtjZcV1ZnppZJI174RwCA+ntA5fuIVqMhfvgFyFgrR4IdskPv87CqXksJ2vPZR S8H/y7hFz/O4eMqtVv4vzTrLeVBFTla8BMSCW66QNWqq8+dk1RVGGedSRCX/I3EqohesxgVRT PpljEk7Ry29MDao8lLOQDMajjS7/C41DlWhnjeplgBVMi0QCx0= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Fri, 17 Nov 2017 21:51:54 +0100 * Add jump targets so that a call of the function "spin_unlock_irq" is stored only twice in these function implementations. * Replace nine calls by goto statements. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- sound/pci/rme32.c | 65 +++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c index 9e6e0fe3a285..81de4f8f2ca3 100644 --- a/sound/pci/rme32.c +++ b/sound/pci/rme32.c @@ -688,28 +688,24 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream, (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) { /* AutoSync */ if ((int)params_rate(params) != rate) { - spin_unlock_irq(&rme32->lock); - return -EIO; + err = -EIO; + goto unlock; } } else { err = snd_rme32_playback_setrate(rme32, params_rate(params)); - if (err < 0) { - spin_unlock_irq(&rme32->lock); - return err; - } + if (err < 0) + goto unlock; } err = snd_rme32_setformat(rme32, params_format(params)); - if (err < 0) { - spin_unlock_irq(&rme32->lock); - return err; - } + if (err < 0) + goto unlock; snd_rme32_setframelog(rme32, params_channels(params), 1); if (rme32->capture_periodsize != 0) { if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) { - spin_unlock_irq(&rme32->lock); - return -EBUSY; + err = -EBUSY; + goto unlock; } } rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog; @@ -722,6 +718,10 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream, spin_unlock_irq(&rme32->lock); return 0; + +unlock: + spin_unlock_irq(&rme32->lock); + return err; } static int @@ -749,27 +749,20 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream, writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); err = snd_rme32_setformat(rme32, params_format(params)); - if (err < 0) { - spin_unlock_irq(&rme32->lock); - return err; - } + if (err < 0) + goto unlock; + err = snd_rme32_playback_setrate(rme32, params_rate(params)); - if (err < 0) { - spin_unlock_irq(&rme32->lock); - return err; - } + if (err < 0) + goto unlock; + rate = snd_rme32_capture_getrate(rme32, &isadat); - if (rate > 0) { - if ((int)params_rate(params) != rate) { - spin_unlock_irq(&rme32->lock); - return -EIO; - } - if ((isadat && runtime->hw.channels_min == 2) || - (!isadat && runtime->hw.channels_min == 8)) { - spin_unlock_irq(&rme32->lock); - return -EIO; - } - } + if (rate > 0 && + ((int)params_rate(params) != rate || + (isadat && runtime->hw.channels_min == 2) || + (!isadat && runtime->hw.channels_min == 8))) + goto e_io; + /* AutoSync off for recording */ rme32->wcreg &= ~RME32_WCR_AUTOSYNC; writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); @@ -778,8 +771,8 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream, if (rme32->playback_periodsize != 0) { if (params_period_size(params) << rme32->capture_frlog != rme32->playback_periodsize) { - spin_unlock_irq(&rme32->lock); - return -EBUSY; + err = -EBUSY; + goto unlock; } } rme32->capture_periodsize = @@ -787,6 +780,12 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream, spin_unlock_irq(&rme32->lock); return 0; + +e_io: + err = -EIO; +unlock: + spin_unlock_irq(&rme32->lock); + return err; } static int snd_rme32_pcm_hw_free(struct snd_pcm_substream *substream) -- 2.15.0