From: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx> Date: Mon, 13 Nov 2017 09:49:15 +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 <elfring@xxxxxxxxxxxxxxxxxxxxx> --- sound/pci/aw2/aw2-alsa.c | 85 +++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 45 deletions(-) diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c index 9a49e4243a9c..25710043c79d 100644 --- a/sound/pci/aw2/aw2-alsa.c +++ b/sound/pci/aw2/aw2-alsa.c @@ -261,13 +261,13 @@ static int snd_aw2_create(struct snd_card *card, if ((dma_set_mask(&pci->dev, DMA_BIT_MASK(32)) < 0) || (dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32)) < 0)) { dev_err(card->dev, "Impossible to set 32bit mask DMA\n"); - pci_disable_device(pci); - return -ENXIO; + err = -ENXIO; + goto disable_device; } chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { - pci_disable_device(pci); - return -ENOMEM; + err = -ENOMEM; + goto disable_device; } /* initialize the stuff */ @@ -277,11 +277,9 @@ static int snd_aw2_create(struct snd_card *card, /* (1) PCI resource allocation */ err = pci_request_regions(pci, "Audiowerk2"); - if (err < 0) { - pci_disable_device(pci); - kfree(chip); - return err; - } + if (err < 0) + goto free_data; + chip->iobase_phys = pci_resource_start(pci, 0); chip->iobase_virt = ioremap_nocache(chip->iobase_phys, @@ -289,10 +287,8 @@ static int snd_aw2_create(struct snd_card *card, if (chip->iobase_virt == NULL) { dev_err(card->dev, "unable to remap memory region"); - pci_release_regions(pci); - pci_disable_device(pci); - kfree(chip); - return -ENOMEM; + err = -ENOMEM; + goto release_regions; } /* (2) initialization of the chip hardware */ @@ -301,23 +297,15 @@ static int snd_aw2_create(struct snd_card *card, if (request_irq(pci->irq, snd_aw2_saa7146_interrupt, IRQF_SHARED, KBUILD_MODNAME, chip)) { dev_err(card->dev, "Cannot grab irq %d\n", pci->irq); - - iounmap(chip->iobase_virt); - pci_release_regions(chip->pci); - pci_disable_device(chip->pci); - kfree(chip); - return -EBUSY; + err = -EBUSY; + goto unmap_io; } chip->irq = pci->irq; err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); if (err < 0) { free_irq(chip->irq, (void *)chip); - iounmap(chip->iobase_virt); - pci_release_regions(chip->pci); - pci_disable_device(chip->pci); - kfree(chip); - return err; + goto unmap_io; } *rchip = chip; @@ -325,6 +313,16 @@ static int snd_aw2_create(struct snd_card *card, dev_info(card->dev, "Audiowerk 2 sound card (saa7146 chipset) detected and managed\n"); return 0; + +unmap_io: + iounmap(chip->iobase_virt); +release_regions: + pci_release_regions(pci); +free_data: + kfree(chip); +disable_device: + pci_disable_device(pci); + return err; } /* constructor */ @@ -352,10 +350,8 @@ static int snd_aw2_probe(struct pci_dev *pci, /* (3) Create main component */ err = snd_aw2_create(card, pci, &chip); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; /* initialize mutex */ mutex_init(&chip->mtx); @@ -373,16 +369,18 @@ static int snd_aw2_probe(struct pci_dev *pci, /* (6) Register card instance */ err = snd_card_register(card); - if (err < 0) { - snd_card_free(card); - return err; - } + if (err < 0) + goto free_card; /* (7) Set PCI driver data */ pci_set_drvdata(pci, card); dev++; return 0; + +free_card: + snd_card_free(card); + return err; } /* destructor */ @@ -599,10 +597,8 @@ static int snd_aw2_new_pcm(struct aw2 *chip) err = snd_pcm_new(chip->card, "Audiowerk2 analog playback", 0, 1, 0, &pcm_playback_ana); - if (err < 0) { - dev_err(chip->card->dev, "snd_pcm_new error (0x%X)\n", err); - return err; - } + if (err < 0) + goto report_failure; /* Creation ok */ pcm_device = &chip->device_playback[NUM_STREAM_PLAYBACK_ANA]; @@ -636,11 +632,9 @@ static int snd_aw2_new_pcm(struct aw2 *chip) err = snd_pcm_new(chip->card, "Audiowerk2 digital playback", 1, 1, 0, &pcm_playback_num); + if (err < 0) + goto report_failure; - if (err < 0) { - dev_err(chip->card->dev, "snd_pcm_new error (0x%X)\n", err); - return err; - } /* Creation ok */ pcm_device = &chip->device_playback[NUM_STREAM_PLAYBACK_DIG]; @@ -673,11 +667,8 @@ static int snd_aw2_new_pcm(struct aw2 *chip) err = snd_pcm_new(chip->card, "Audiowerk2 capture", 2, 0, 1, &pcm_capture); - - if (err < 0) { - dev_err(chip->card->dev, "snd_pcm_new error (0x%X)\n", err); - return err; - } + if (err < 0) + goto report_failure; /* Creation ok */ pcm_device = &chip->device_capture[NUM_STREAM_CAPTURE_ANA]; @@ -718,6 +709,10 @@ static int snd_aw2_new_pcm(struct aw2 *chip) } return 0; + +report_failure: + dev_err(chip->card->dev, "snd_pcm_new error (0x%X)\n", err); + return err; } static int snd_aw2_control_switch_capture_info(struct snd_kcontrol *kcontrol, -- 2.15.0 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel