From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758145AbdKOVH0 (ORCPT ); Wed, 15 Nov 2017 16:07:26 -0500 Received: from mout.web.de ([217.72.192.78]:51110 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753218AbdKOVHT (ORCPT ); Wed, 15 Nov 2017 16:07:19 -0500 Subject: [PATCH 2/2] ALSA: intel8x0m: Use common error handling code in two functions From: SF Markus Elfring To: alsa-devel@alsa-project.org, Arvind Yadav , Bhumika Goyal , Jaroslav Kysela , Takashi Iwai Cc: LKML , kernel-janitors@vger.kernel.org References: Message-ID: <8e16f76a-347a-c764-c7cd-955b52cc2817@users.sourceforge.net> Date: Wed, 15 Nov 2017 22:06:06 +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: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:hO/6E/ddSlxsFT3R95F1ouhxxqLzVbsaPwgUFCR6e0GqieAcCq2 YNW3lj1KHzmAkvZE3FiJYPAA4SarRgftpXlK2/BNS4KzEp1+AXKL62PU0VMrHlWE++cqTj/ EK9/L4gDB3VYvkqvmICZWrO3V8pq0dYVBpbNyBDG6n56ALWjg1aXQtC3ivDH3WImhvgRxAB Gq4FSNhfIzg/9i3Tsdt8w== X-UI-Out-Filterresults: notjunk:1;V01:K0:egiYHpGcXBw=:nz2Ooea19Hmn9RkH0wDRxJ ZsjADFHJokHOLm/jBkfc5pPk+8V1VBoc2v8b2IPnl9bSzaHOks6rIWYLem0qu1fVBE9kYx+ys nTZtM3ZG7clx4Yob8ybQQkQ4rwN479Nm68pkd6fenY0DwmTisPHSZmLbKKNV67/EvQ9280JIi rSQrBegRgRS9bhYZCLaUvVZsGqgy71bTnGo6kW6cIJGNaCERPy1VptptSNPAiacoOaU5Cfgg/ 1O0ycsqbbhZDVJGPG3UJ4qaF1anmKbdHIZGfAEOtb5EqEbM1SzHFChSG95pyjgWFtvn7uKz5p OGo/Z1MpJB/qHtJAOiuabop9KLLmlVDYUJ6Pe4fN6K56jI3uoXhfQ6jRCQ8DeTM3Cj2kye9Oj fbwb6x5o/fVN38mNZwzishItTQwZaks68g6Lt1O+LtivLAwrcJH9adpd3xHsShEHJzG8XfuxB wzTknALmLsTacNrHwlZkJPGO6K5V+cv0TbmOniU2a5vZSBadtLrQujFFYKFpsIlL0YzMf+PLT vmiha8zbFG4ngv7AkDFfapup6HqNlFGYg08AupW+sAVuQZaa6N4FE89yhyux6c9B+GbBiJ58Y Fhg1S1gtCEek6Y0vgUX27EXrrs9CjCxqNZVDr2uHnx/v6FyKkvf3YTRBhtH4sdzxJqtxvl2zt WuRJ087Xb3uLziliishhXXFunmdKGsKByVk1ntdSpRoGwPD8Wx6pltsduCXFM5qtC7fDE/rgS aJvjW5YMyLB+uFYwZIWXRjyvxxHvsdkcwXJdZn1pPlPmQIcsI462LYHmpMHhqEc0KzZx/lYmd lCS49PLJ81Cak8Wb8nN/LEfVgpgleP5mCuZy3tELQ37ILRM/rI= 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 21:52:00 +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/intel8x0m.c | 76 ++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c index ab798533a6bc..3ff994996255 100644 --- a/sound/pci/intel8x0m.c +++ b/sound/pci/intel8x0m.c @@ -1135,8 +1135,8 @@ static int snd_intel8x0m_create(struct snd_card *card, chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { - pci_disable_device(pci); - return -ENOMEM; + err = -ENOMEM; + goto disable_device; } spin_lock_init(&chip->reg_lock); chip->device_type = device_type; @@ -1147,8 +1147,7 @@ static int snd_intel8x0m_create(struct snd_card *card, err = pci_request_regions(pci, card->shortname); if (err < 0) { kfree(chip); - pci_disable_device(pci); - return err; + goto disable_device; } if (device_type == DEVICE_ALI) { @@ -1163,8 +1162,7 @@ static int snd_intel8x0m_create(struct snd_card *card, chip->addr = pci_iomap(pci, 0, 0); if (!chip->addr) { dev_err(card->dev, "AC'97 space ioremap problem\n"); - snd_intel8x0m_free(chip); - return -EIO; + goto e_io; } if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) /* ICH4 */ chip->bmaddr = pci_iomap(pci, 3, 0); @@ -1172,16 +1170,15 @@ static int snd_intel8x0m_create(struct snd_card *card, chip->bmaddr = pci_iomap(pci, 1, 0); if (!chip->bmaddr) { dev_err(card->dev, "Controller space ioremap problem\n"); - snd_intel8x0m_free(chip); - return -EIO; + goto e_io; } port_inited: if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED, KBUILD_MODNAME, chip)) { dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); - snd_intel8x0m_free(chip); - return -EBUSY; + err = -EBUSY; + goto free_sound_chip; } chip->irq = pci->irq; pci_set_master(pci); @@ -1215,8 +1212,8 @@ static int snd_intel8x0m_create(struct snd_card *card, if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, &chip->bdbars) < 0) { - snd_intel8x0m_free(chip); - return -ENOMEM; + err = -ENOMEM; + goto free_sound_chip; } /* tables must be aligned to 8 bytes here, but the kernel pages are much bigger, so we don't care (on i386) */ @@ -1231,19 +1228,25 @@ static int snd_intel8x0m_create(struct snd_card *card, chip->int_sta_mask = int_sta_masks; err = snd_intel8x0m_chip_init(chip, 1); - if (err < 0) { - snd_intel8x0m_free(chip); - return err; - } + if (err < 0) + goto free_sound_chip; err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); - if (err < 0) { - snd_intel8x0m_free(chip); - return err; - } + if (err < 0) + goto free_sound_chip; *r_intel8x0m = chip; return 0; + +disable_device: + pci_disable_device(pci); + return err; + +e_io: + err = -EIO; +free_sound_chip: + snd_intel8x0m_free(chip); + return err; } static struct shortname_table { @@ -1295,35 +1298,34 @@ static int snd_intel8x0m_probe(struct pci_dev *pci, strcat(card->shortname," Modem"); err = snd_intel8x0m_create(card, pci, pci_id->driver_data, &chip); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + card->private_data = chip; err = snd_intel8x0m_mixer(chip, ac97_clock); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; + err = snd_intel8x0m_pcm(chip); - if (err < 0) { - snd_card_free(card); - return err; - } - + if (err < 0) + goto free_card; + snd_intel8x0m_proc_init(chip); sprintf(card->longname, "%s at irq %i", card->shortname, chip->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); return 0; + +free_card: + snd_card_free(card); + return err; } static void snd_intel8x0m_remove(struct pci_dev *pci) -- 2.15.0