From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757790AbdKOO4S (ORCPT ); Wed, 15 Nov 2017 09:56:18 -0500 Received: from mout.web.de ([212.227.17.12]:56790 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754776AbdKOO4H (ORCPT ); Wed, 15 Nov 2017 09:56:07 -0500 To: alsa-devel@alsa-project.org, Bhumika Goyal , Jaroslav Kysela , Takashi Iwai Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Subject: [PATCH] ALSA: ice1712: Use common error handling code in two functions Message-ID: Date: Wed, 15 Nov 2017 15:55:24 +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:9gILUbA6of2pmT4smEqFjjBch+IJJzGCX9gysBD51iIBrcuIEPe wjrvUciv7DLQS7EtQOcYdAtb9FGakRJaLyyuOEIxmRJptDTtEfwCPEwFJz12pWB2FQRDrgZ N7XH3ulDGV1DKxSPhZc8sbwho6m/cM9E7O1dNKHJFVC7X+brnGxg2xf+f9+nVOApOExtbG5 eb/AA3NS+Oc61RdwMUcGA== X-UI-Out-Filterresults: notjunk:1;V01:K0:0P4zHM1p7RE=:y3SplajUak5shqZ4uPAsI4 dQ18J0aqbUI8nTeli+j1jtYDHZvG47E/AFCM7cYV1S7oh+2S4ImmG7ajjL6Q4qeckeAvUaJjK 09OawT733J+Nl2csylGhqLxp4ZWQAZjrcQcX02oEyHORX5bNLM/kF/74PIgpeglfcoqKYYmLx FyuHXboxJwHAL/ruxWQE6iozvVKKgkWTWJK0ictw3dkHKubGSlWcm0f2/jazvuWgm7CQQFopV OoqYCQhB57ZNq0V6wZ/9/W/dKKo4p6ptja7yQUChbqw7AlWALmYFjN//vXp0kmXh6mJYrqpzv 8OQicmUemMTcAwvI8owjoH2wCOgPk0EuIMYL8MsXBxMTRV1BHpVIL165SJe5M9y6NSdLTd4Wb Xa2nZ7rVu4L9c2MBKyPWvC4MZ/lyEGIBmYu+MiwhJkDgkbqLdDs+3s8R9zu1SQZ4cSB1SmXN5 yeEfern20W8wPTMl+Tb2Xu9k1+akQ42RVklOe/Ax2XXIgmC87tW+nW1+7UB+1jrLSxEr5zTds rZT99xS9aFm4ZUrsdCMrazQ4q0QtNbUlEX42ns/PxB2pPhvTNtNzU/sL/KdsNOW3dqO/VdGBH mcqm+0A9IygHSSf6V8y6QSGwEHGP9o5EFmRmCv9tmJtc3puzffQGuwoo1FZEzBwa8nuUz6NSB sZjLLNhYjPmJ6T59djVYjJSkCQKNS32OxuXrZ37UWM5JcrKN0GAXwk8Da+0wWRuPz16Nz77ID CEJOBkcO1qdvYMymCr9xtTQE51SCnieI+LFcJgatVVygs1P+/DHjJgL89I+rWiGOLg8Z8x7MS /1gaNyT0QadoUlqKNubCA6Yw8RWEXyG2Feg18C4uxN0zhpYv4Y= 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 15:50:06 +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/ice1712/ice1712.c | 114 +++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 64 deletions(-) diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c index 0e66afa403a3..691b8844465f 100644 --- a/sound/pci/ice1712/ice1712.c +++ b/sound/pci/ice1712/ice1712.c @@ -2534,14 +2534,14 @@ static int snd_ice1712_create(struct snd_card *card, dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(28)) < 0) { dev_err(card->dev, "architecture does not support 28bit PCI busmaster DMA\n"); - pci_disable_device(pci); - return -ENXIO; + err = -ENXIO; + goto disable_device; } ice = kzalloc(sizeof(*ice), GFP_KERNEL); if (ice == NULL) { - pci_disable_device(pci); - return -ENOMEM; + err = -ENOMEM; + goto disable_device; } ice->omni = omni ? 1 : 0; if (cs8427_timeout < 1) @@ -2580,8 +2580,7 @@ static int snd_ice1712_create(struct snd_card *card, err = pci_request_regions(pci, "ICE1712"); if (err < 0) { kfree(ice); - pci_disable_device(pci); - return err; + goto disable_device; } ice->port = pci_resource_start(pci, 0); ice->ddma_port = pci_resource_start(pci, 1); @@ -2591,29 +2590,31 @@ static int snd_ice1712_create(struct snd_card *card, if (request_irq(pci->irq, snd_ice1712_interrupt, IRQF_SHARED, KBUILD_MODNAME, ice)) { dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); - snd_ice1712_free(ice); - return -EIO; + goto e_io; } ice->irq = pci->irq; - if (snd_ice1712_read_eeprom(ice, modelname) < 0) { - snd_ice1712_free(ice); - return -EIO; - } - if (snd_ice1712_chip_init(ice) < 0) { - snd_ice1712_free(ice); - return -EIO; - } + if (snd_ice1712_read_eeprom(ice, modelname) < 0 || + snd_ice1712_chip_init(ice) < 0) + goto e_io; err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ice, &ops); - if (err < 0) { - snd_ice1712_free(ice); - return err; - } + if (err < 0) + goto free_sound_chip; *r_ice1712 = ice; return 0; + +disable_device: + pci_disable_device(pci); + return err; + +e_io: + err = -EIO; +free_sound_chip: + snd_ice1712_free(ice); + return err; } @@ -2651,10 +2652,8 @@ static int snd_ice1712_probe(struct pci_dev *pci, err = snd_ice1712_create(card, pci, model[dev], omni[dev], cs8427_timeout[dev], dxr_enable[dev], &ice); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; for (tbl = card_tables; *tbl; tbl++) { for (c = *tbl; c->subvendor; c++) { @@ -2665,10 +2664,8 @@ static int snd_ice1712_probe(struct pci_dev *pci, strcpy(card->driver, c->driver); if (c->chip_init) { err = c->chip_init(ice); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; } goto __found; } @@ -2678,45 +2675,33 @@ static int snd_ice1712_probe(struct pci_dev *pci, __found: err = snd_ice1712_pcm_profi(ice, pcm_dev++); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; if (ice_has_con_ac97(ice)) { err = snd_ice1712_pcm(ice, pcm_dev++); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; } err = snd_ice1712_ac97_mixer(ice); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; err = snd_ice1712_build_controls(ice); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; if (c->build_controls) { err = c->build_controls(ice); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; } if (ice_has_con_ac97(ice)) { err = snd_ice1712_pcm_ds(ice, pcm_dev++); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; } if (!c->no_mpu401) { @@ -2725,10 +2710,9 @@ static int snd_ice1712_probe(struct pci_dev *pci, c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK, -1, &ice->rmidi[0]); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + if (c->mpu401_1_name) /* Preferred name available in card_info */ snprintf(ice->rmidi[0]->name, @@ -2743,10 +2727,9 @@ static int snd_ice1712_probe(struct pci_dev *pci, MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK, -1, &ice->rmidi[1]); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + if (c->mpu401_2_name) /* Preferred name available in card_info */ snprintf(ice->rmidi[1]->name, @@ -2762,13 +2745,16 @@ static int snd_ice1712_probe(struct pci_dev *pci, card->shortname, ice->port, ice->irq); 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_ice1712_remove(struct pci_dev *pci) -- 2.15.0