From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1947153AbdKRMyh (ORCPT ); Sat, 18 Nov 2017 07:54:37 -0500 Received: from mout.web.de ([212.227.17.11]:58432 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965664AbdKRMya (ORCPT ); Sat, 18 Nov 2017 07:54:30 -0500 Subject: [PATCH 2/2] ALSA: rme96: Improve unlocking of an IRQ in snd_rme96_capture_hw_params() 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: <7b7da9a6-64e1-bde5-99aa-de21f0665323@users.sourceforge.net> Message-ID: <1e2f56b0-df93-d9d3-da79-758439de00a5@users.sourceforge.net> Date: Sat, 18 Nov 2017 13:53:45 +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: <7b7da9a6-64e1-bde5-99aa-de21f0665323@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:wIiE3BJK1xbOONu6EYS4oXWTEuhJKciAjXgXy5Mdn6HMWlQddYV pvSDQRh6XQUdKjV1fjX5Ph+hNkcOxBdhcRYfpcT4XLrTYq7o/4oAKHDxgfXNYwiLt5qRgp0 TmdChpMFLIemjgZ5VnXvbhe67N5dM+LKjRzll4IuqJK9Nc599iXyFpdh1nOYOzdzg0GSBDA RYN8Qhz8XuF4zRoyUGw1g== X-UI-Out-Filterresults: notjunk:1;V01:K0:EGze5CxTswo=:Woh0MHcFDa8O7uzZVU6h1H ixxyZi9sBjpdZMk1clN5wDWIbQgnvbggyMT3U0q5tTym9A75VSFVpZVXUWNilvaWMhgfZ4ESu 0rtUcHClxihedn3uQVjDvVCttBuTBpHU1z0PwfSPHo0/gwETTamV/vfcUu7YNZhhXAt8VaTBO JOj+aEP3YGp4YjZHL9qO5W/Qspvkj1KHkX7RYK6ZqoPUodX3RmoV3SMTojyY7lTu0dBGlO5GR 4P1k2AfydEuoutzel0RXPJtx8j928VmxRxcT58riS6imxtHaOf9+Erw2nchG8V6VQonV08Kz5 bMp58FC6DmIoMbHXzRYCDtYjEZ/6j8xgS0J9C3qq5ZeO+YCDfmJxkC9VizQt+P1YGmPiGErJF rViGGUd6y5O41SJex4AKUiE4Wx0QqFb1DUFBJIO41T3kpEncnSHjMuIfUZPZIbq8YCQNvmzrf 5XcdakkmABJCzaLp1/aTpoSGwITPweFV2PYbVGbSOxBZvAqNQl10dnuppulX1GPRdzhhseIjt fEc2Nseg61FvPVwSbb/KvxvfzRHO5V7VW1OLYEnndTGOoivusmur02KdbB4w7QDKX3ZWE7J9e 5m+1FS23kL3f1t5VclK23ajoda1kNoyC4Pz+n/gX9VHKIeQLcElZ8zXcehe8xhIdN1qPYnUPv PUN26XmdcdZgWPT8sxzSvuDqVJMGxPnFolQ1TlhjegVyTp1sStRE+THovK/IxGuQ9VGMp23LW ILCUZEofnn2edUUnklLZt0UrtItizXYpyKmBdGt5/rsrvhVIKrzLz2tQyfWvnLfaRd6gMQHJ1 3QGzaQaoUE78cLgtAK8CjwEpj4hGol4L4LVHH0AhUQc9AHk9b0= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Sat, 18 Nov 2017 13:26:59 +0100 * Add jump targets so that a call of the function "spin_unlock_irq" is stored only twice in this function implementation. * Replace five calls by goto statements. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- sound/pci/rme96.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c index fd8a62ceffde..1c1106f770e7 100644 --- a/sound/pci/rme96.c +++ b/sound/pci/rme96.c @@ -1066,30 +1066,21 @@ snd_rme96_capture_hw_params(struct snd_pcm_substream *substream, spin_lock_irq(&rme96->lock); err = snd_rme96_capture_setformat(rme96, params_format(params)); - if (err < 0) { - spin_unlock_irq(&rme96->lock); - return err; - } + if (err < 0) + goto unlock; + if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) { err = snd_rme96_capture_analog_setrate(rme96, params_rate(params)); - if (err < 0) { - spin_unlock_irq(&rme96->lock); - return err; - } + if (err < 0) + goto unlock; } else { rate = snd_rme96_capture_getrate(rme96, &isadat); - if (rate > 0) { - if ((int)params_rate(params) != rate) { - spin_unlock_irq(&rme96->lock); - return -EIO; - } - if ((isadat && runtime->hw.channels_min == 2) || - (!isadat && runtime->hw.channels_min == 8)) { - spin_unlock_irq(&rme96->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; } snd_rme96_setframelog(rme96, params_channels(params), 0); @@ -1097,8 +1088,8 @@ snd_rme96_capture_hw_params(struct snd_pcm_substream *substream, if (params_period_size(params) << rme96->capture_frlog != rme96->playback_periodsize) { - spin_unlock_irq(&rme96->lock); - return -EBUSY; + err = -EBUSY; + goto unlock; } } rme96->capture_periodsize = @@ -1107,6 +1098,12 @@ snd_rme96_capture_hw_params(struct snd_pcm_substream *substream, spin_unlock_irq(&rme96->lock); return 0; + +e_io: + err = -EIO; +unlock: + spin_unlock_irq(&rme96->lock); + return err; } static void -- 2.15.0