From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Warren Subject: Re: [alsa-devel] [PATCH 14/31] ASoC: dmaengine: support deferred probe for DMA channels Date: Mon, 18 Nov 2013 10:59:32 -0700 Message-ID: <528A5584.3030805@wwwdotorg.org> References: <1384548866-13141-1-git-send-email-swarren@wwwdotorg.org> <1384548866-13141-15-git-send-email-swarren@wwwdotorg.org> <52874D9E.1010708@metafoo.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <52874D9E.1010708-Qo5EllUWu/uELgA04lAiVw@public.gmane.org> Sender: linux-tegra-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Lars-Peter Clausen Cc: alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org, Stephen Warren , Liam Girdwood , Mark Brown , linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: linux-tegra@vger.kernel.org On 11/16/2013 03:49 AM, Lars-Peter Clausen wrote: > On 11/15/2013 09:54 PM, Stephen Warren wrote: >> >> @@ -315,6 +343,7 @@ int snd_dmaengine_pcm_register(struct device *dev, >> const struct snd_dmaengine_pcm_config *config, unsigned int flags) >> { >> struct dmaengine_pcm *pcm; >> + int ret; >> >> pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); >> if (!pcm) >> @@ -323,14 +352,26 @@ int snd_dmaengine_pcm_register(struct device *dev, >> pcm->config = config; >> pcm->flags = flags; >> >> - dmaengine_pcm_request_chan_of(pcm, dev); >> + ret = dmaengine_pcm_request_chan_of(pcm, dev); >> + if (ret) >> + goto err_free_pcm; >> > > We should still call dmaengine_pcm_release_chan() in case requesting the > first channel succeeded, but the second did not. Oh yes, I'd meant to do that. I'll modify that goto, and remove the now-unused err_free_pcm label. Thanks. > >> if (flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE) >> - return snd_soc_add_platform(dev, &pcm->platform, >> + ret = snd_soc_add_platform(dev, &pcm->platform, >> &dmaengine_no_residue_pcm_platform); >> else >> - return snd_soc_add_platform(dev, &pcm->platform, >> + ret = snd_soc_add_platform(dev, &pcm->platform, >> &dmaengine_pcm_platform); >> + if (ret) >> + goto err_free_dma; >> + >> + return 0; >> + >> +err_free_dma: >> + dmaengine_pcm_release_chan(pcm); >> +err_free_pcm: >> + kfree(pcm); >> + return ret; >> } >> EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_register); > [...] From mboxrd@z Thu Jan 1 00:00:00 1970 From: swarren@wwwdotorg.org (Stephen Warren) Date: Mon, 18 Nov 2013 10:59:32 -0700 Subject: [alsa-devel] [PATCH 14/31] ASoC: dmaengine: support deferred probe for DMA channels In-Reply-To: <52874D9E.1010708@metafoo.de> References: <1384548866-13141-1-git-send-email-swarren@wwwdotorg.org> <1384548866-13141-15-git-send-email-swarren@wwwdotorg.org> <52874D9E.1010708@metafoo.de> Message-ID: <528A5584.3030805@wwwdotorg.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 11/16/2013 03:49 AM, Lars-Peter Clausen wrote: > On 11/15/2013 09:54 PM, Stephen Warren wrote: >> >> @@ -315,6 +343,7 @@ int snd_dmaengine_pcm_register(struct device *dev, >> const struct snd_dmaengine_pcm_config *config, unsigned int flags) >> { >> struct dmaengine_pcm *pcm; >> + int ret; >> >> pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); >> if (!pcm) >> @@ -323,14 +352,26 @@ int snd_dmaengine_pcm_register(struct device *dev, >> pcm->config = config; >> pcm->flags = flags; >> >> - dmaengine_pcm_request_chan_of(pcm, dev); >> + ret = dmaengine_pcm_request_chan_of(pcm, dev); >> + if (ret) >> + goto err_free_pcm; >> > > We should still call dmaengine_pcm_release_chan() in case requesting the > first channel succeeded, but the second did not. Oh yes, I'd meant to do that. I'll modify that goto, and remove the now-unused err_free_pcm label. Thanks. > >> if (flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE) >> - return snd_soc_add_platform(dev, &pcm->platform, >> + ret = snd_soc_add_platform(dev, &pcm->platform, >> &dmaengine_no_residue_pcm_platform); >> else >> - return snd_soc_add_platform(dev, &pcm->platform, >> + ret = snd_soc_add_platform(dev, &pcm->platform, >> &dmaengine_pcm_platform); >> + if (ret) >> + goto err_free_dma; >> + >> + return 0; >> + >> +err_free_dma: >> + dmaengine_pcm_release_chan(pcm); >> +err_free_pcm: >> + kfree(pcm); >> + return ret; >> } >> EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_register); > [...]