From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752176Ab2G2H7e (ORCPT ); Sun, 29 Jul 2012 03:59:34 -0400 Received: from cantor2.suse.de ([195.135.220.15]:47948 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751928Ab2G2H7d (ORCPT ); Sun, 29 Jul 2012 03:59:33 -0400 Date: Sun, 29 Jul 2012 09:59:31 +0200 Message-ID: From: Takashi Iwai To: Daniel Mack Cc: Fengguang Wu , Krzysztof Helt , LKML , Rene Herman Subject: Re: genirq: Flags mismatch irq 5. 00000000 (ES1688) vs. 00000000 In-Reply-To: <501401B1.4070108@gmail.com> References: <20120728132046.GA14210@localhost> <501401B1.4070108@gmail.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/24.1 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Sat, 28 Jul 2012 17:13:53 +0200, Daniel Mack wrote: > > diff --git a/sound/isa/es1688/es1688_lib.c b/sound/isa/es1688/es1688_lib.c > index 1d47be8..7cb309a 100644 > --- a/sound/isa/es1688/es1688_lib.c > +++ b/sound/isa/es1688/es1688_lib.c > @@ -658,18 +658,25 @@ int snd_es1688_create(struct snd_card *card, > chip->irq = -1; > chip->dma8 = -1; > > - if ((chip->res_port = request_region(port + 4, 12, "ES1688")) == NULL) { > + chip->res_port = request_region(port + 4, 12, "ES1688"); > + if (chip->res_port == NULL) { > snd_printk(KERN_ERR "es1688: can't grab port 0x%lx\n", port + 4); > - return -EBUSY; > + err = -EBUSY; > + goto exit; > } > - if (request_irq(irq, snd_es1688_interrupt, 0, "ES1688", (void *) chip)) { > + > + err = request_irq(irq, snd_es1688_interrupt, 0, "ES1688", (void *) chip); > + if (err < 0) { > snd_printk(KERN_ERR "es1688: can't grab IRQ %d\n", irq); > - return -EBUSY; > + goto exit_release_region; > } > + > chip->irq = irq; > - if (request_dma(dma8, "ES1688")) { > + err = request_dma(dma8, "ES1688"); > + > + if (err < 0) { > snd_printk(KERN_ERR "es1688: can't grab DMA8 %d\n", dma8); > - return -EBUSY; > + goto exit_release_irq; > } > chip->dma8 = dma8; > > @@ -685,14 +692,23 @@ int snd_es1688_create(struct snd_card *card, > > err = snd_es1688_probe(chip); > if (err < 0) > - return err; > + goto exit_release_dma; > > err = snd_es1688_init(chip, 1); > if (err < 0) > - return err; > + goto exit_release_dma; > > /* Register device */ > return snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); > + > +exit_release_dma: > + free_dma(chip->dma8); > +exit_release_irq: > + free_irq(chip->irq, chip); > +exit_release_region: > + release_and_free_resource(chip->res_port); > +exit: > + return err; You can simply call snd_es1688_free(chip) instead of a bunch of labels. That is, all goto's can be "goto exit", and exit: snd_es1688_free(chip); return err; thanks, Takashi