From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932533AbdKOMsy (ORCPT ); Wed, 15 Nov 2017 07:48:54 -0500 Received: from mout.web.de ([212.227.17.11]:59820 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932496AbdKOMsm (ORCPT ); Wed, 15 Nov 2017 07:48:42 -0500 Subject: [PATCH 2/3] ALSA: fm801: Use common error handling code in two functions From: SF Markus Elfring To: alsa-devel@alsa-project.org, Andy Shevchenko , Bhumika Goyal , Jaroslav Kysela , Takashi Iwai Cc: LKML , kernel-janitors@vger.kernel.org References: <86b94d9c-77fb-fed5-b55c-a0565f619dc7@users.sourceforge.net> Message-ID: <8dd7d1f7-4174-3fe3-2a76-6c84fb1de375@users.sourceforge.net> Date: Wed, 15 Nov 2017 13:47: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: <86b94d9c-77fb-fed5-b55c-a0565f619dc7@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:7QGN7P+ppimG4yCIKFSNzuyiE0Q4AOVi/dU7aoEr83VhGOe3S9m o3wKkzbMd8ri6jpT7mjElq9LvHY4imero+ucWJ763wYxPLL8DPdRXJk4dsy7Hbra3ogr42Z LXjKnGTOLBknpVK3XHWYB2TRsH4VqcScQbY+XbGLzNOCLFTiwdB4hO1+vVUqStr3fHDKaC0 UJjnwy7dEJAI80U4Yo/KA== X-UI-Out-Filterresults: notjunk:1;V01:K0:aDt6XKRnTHY=:jjHDEIIfyhtaE7kDEPOz7F kUF4mkiQU6mRC48oFw/SjcdXIc8noJurjOWHytVwr4NNZ1NIOKECB0eVQAvQvtaiGA3JgB9MB qw5Eh0+lgrkzvly4unoNvHT19ETqqvQ5gIqHHPKO3io7JtUEssXdIj/8t/1Fov0214ySiM54X +cUQBPlLaN//62nem93vMuP79f4v28GfzSR6dImYL+tyO9YAJQ3ctfG88QTrygQiym0SOcxc2 Bc8eNUvFvnVOeDFLJiVYiB5Uuqu0M71BZ6FhsVxfKTUlwa2HwXIX93t9sj/9nUJzbC5Tt1lNE jneHEZsL7cP99kjZaBVv5ZrXGzu20a5isanPsIRI+U0GxB58TiLDEt9GDFaDdu6t1Rx6TPmh5 Th/MD1qL8ps6YqTPT5odMTlsHIbncHo7Y6R6UA0YMg6vQe2L+8S8X00J7d2ElX4uRNTku0eur ZnfhdYig0sivhvi955ko4CMW6MxVp0+0DXJeB5AP9FpCjJrX0fdrx4eGqf76wdmet02AGaU4q PInXmpYs2ZVigFmY0bSGDPOL/RLCVPtA9TEgzw3+t20daTLfQ4dlhZr+vzz0Ia3Fn04W23kTS 223dCIuTP842y20jRTV6QRD7h3bN4MGY3hfOzjLBwO5phMV+dxdSdj21tRyhNPgjKvYmB21II BN2SDBn+iyUtGzAOvv1rw87YQdELRAjrGjgU0uBtrwYruX4VWi2GGIrkJWx7Ln+ybQduZYzvM qDikoB82QhKznK08K+IebL3KNCoFmu4tBaYQgHkPrthXD2OVHZ+BSu6Tu9PESaET2C814VsWA IdO32RitIh5hLVOut3p3jd58e67uHqI+a2Ix6miFTIjdLfNDns= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Wed, 15 Nov 2017 13:27:57 +0100 Add jump targets so that a bit of exception handling can be better reused at the end of these functions. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- sound/pci/fm801.c | 77 ++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 3648af4581a0..e4c0fa8db5f6 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -1245,8 +1245,8 @@ static int snd_fm801_create(struct snd_card *card, if (devm_request_irq(&pci->dev, pci->irq, snd_fm801_interrupt, IRQF_SHARED, KBUILD_MODNAME, chip)) { dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); - snd_fm801_free(chip); - return -EBUSY; + err = -EBUSY; + goto free_sound_chip; } chip->irq = pci->irq; pci_set_master(pci); @@ -1255,17 +1255,14 @@ static int snd_fm801_create(struct snd_card *card, snd_fm801_chip_init(chip); err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); - if (err < 0) { - snd_fm801_free(chip); - return err; - } + if (err < 0) + goto free_sound_chip; #ifdef CONFIG_SND_FM801_TEA575X_BOOL err = v4l2_device_register(&pci->dev, &chip->v4l2_dev); - if (err < 0) { - snd_fm801_free(chip); - return err; - } + if (err < 0) + goto free_sound_chip; + chip->tea.v4l2_dev = &chip->v4l2_dev; chip->tea.radio_nr = radio_nr; chip->tea.private_data = chip; @@ -1275,8 +1272,8 @@ static int snd_fm801_create(struct snd_card *card, (chip->tea575x_tuner & TUNER_TYPE_MASK) < 4) { if (snd_tea575x_init(&chip->tea, THIS_MODULE)) { dev_err(card->dev, "TEA575x radio not found\n"); - snd_fm801_free(chip); - return -ENODEV; + err = -ENODEV; + goto free_sound_chip; } } else if ((chip->tea575x_tuner & TUNER_TYPE_MASK) == 0) { unsigned int tuner_only = chip->tea575x_tuner & TUNER_ONLY; @@ -1306,6 +1303,10 @@ static int snd_fm801_create(struct snd_card *card, *rchip = chip; return 0; + +free_sound_chip: + snd_fm801_free(chip); + return err; } static int snd_card_fm801_probe(struct pci_dev *pci, @@ -1331,10 +1332,9 @@ static int snd_card_fm801_probe(struct pci_dev *pci, err = snd_fm801_create(card, pci, tea575x_tuner[dev], radio_nr[dev], &chip); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + card->private_data = chip; strcpy(card->driver, "FM801"); @@ -1347,45 +1347,42 @@ static int snd_card_fm801_probe(struct pci_dev *pci, goto __fm801_tuner_only; err = snd_fm801_pcm(chip, 0); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + err = snd_fm801_mixer(chip); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801, chip->port + FM801_MPU401_DATA, MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK, -1, &chip->rmidi); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + err = snd_opl3_create(card, chip->port + FM801_OPL3_BANK0, chip->port + FM801_OPL3_BANK1, OPL3_HW_OPL3_FM801, 1, &opl3); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; __fm801_tuner_only: err = snd_card_register(card); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + pci_set_drvdata(pci, card); dev++; return 0; + +free_card: + snd_card_free(card); + return err; } static void snd_card_fm801_remove(struct pci_dev *pci) -- 2.15.0