From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966355AbcAZOxQ (ORCPT ); Tue, 26 Jan 2016 09:53:16 -0500 Received: from comal.ext.ti.com ([198.47.26.152]:51946 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965268AbcAZOxN (ORCPT ); Tue, 26 Jan 2016 09:53:13 -0500 Subject: Re: [PATCH] mmc: omap_hsmmc: don't print uninitialized variables To: Arnd Bergmann , Ulf Hansson References: <1453737031-1959584-1-git-send-email-arnd@arndb.de> CC: , Kishon Vijay Abraham I , Andreas Fenkart , Tony Lindgren , Roger Quadros , , , From: Peter Ujfalusi X-Enigmail-Draft-Status: N1110 Message-ID: <56A78838.3050400@ti.com> Date: Tue, 26 Jan 2016 16:52:40 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <1453737031-1959584-1-git-send-email-arnd@arndb.de> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/25/2016 05:50 PM, Arnd Bergmann wrote: > When DT based probing is used but the DMA request fails, the > driver will print uninitialized stack data from the rx_req > and tx_req variables, as indicated by this warning: > > drivers/mmc/host/omap_hsmmc.c: In function 'omap_hsmmc_probe': > drivers/mmc/host/omap_hsmmc.c:2162:3: warning: 'rx_req' may be used uninitialized in this function [-Wmaybe-uninitialized] > dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req); > > This restructures the function to separate the simple DT probe > from the more complex platform data code path, and only > prints the information that is actually available and > needed in case of an error, which makes it nicer to read > and avoids the warning. > > Signed-off-by: Arnd Bergmann > --- > drivers/mmc/host/omap_hsmmc.c | 48 +++++++++++++++++++++---------------------- > 1 file changed, 23 insertions(+), 25 deletions(-) > > diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c > index b6639ea0bf18..e06b1881b6a1 100644 > --- a/drivers/mmc/host/omap_hsmmc.c > +++ b/drivers/mmc/host/omap_hsmmc.c > @@ -2002,8 +2002,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) > struct resource *res; > int ret, irq; > const struct of_device_id *match; > - dma_cap_mask_t mask; > - unsigned tx_req, rx_req; > const struct omap_mmc_of_data *data; > void __iomem *base; > > @@ -2133,7 +2131,17 @@ static int omap_hsmmc_probe(struct platform_device *pdev) > > omap_hsmmc_conf_bus_power(host); > > - if (!pdev->dev.of_node) { > + host->tx_chan = dma_request_slave_channel(&pdev->dev, "tx"); > + host->rx_chan = dma_request_slave_channel(&pdev->dev, "rx"); > + if (!host->tx_chan || !host->rx_chan) { While it is really unlikely that we are failing to get only one of the channels... It means anyway that the omap_hsmmc is not usable, but we will still try to get via legacy mode and there is a chance that we might get some channel. Too bad that I can not send the conversion to dma_request_chan() yet due to missing things in arch... It might be simpler to just remove the printout of the rx/tx_req from the dev_err() when reporting failed channel requests... > + dma_cap_mask_t mask; > + unsigned tx_req, rx_req; > + > + dev_err(mmc_dev(host->mmc), "falling back to manual DMA configuration\n"); > + > + dma_cap_zero(mask); > + dma_cap_set(DMA_SLAVE, mask); > + > res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); > if (!res) { > dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); > @@ -2141,6 +2149,12 @@ static int omap_hsmmc_probe(struct platform_device *pdev) > goto err_irq; > } > tx_req = res->start; > + host->tx_chan = dma_request_channel(mask, omap_dma_filter_fn, &tx_req); > + if (!host->rx_chan) { > + dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req); > + ret = -ENXIO; > + goto err_irq; > + } > > res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); > if (!res) { > @@ -2149,29 +2163,13 @@ static int omap_hsmmc_probe(struct platform_device *pdev) > goto err_irq; > } > rx_req = res->start; > - } > - > - dma_cap_zero(mask); > - dma_cap_set(DMA_SLAVE, mask); > - > - host->rx_chan = > - dma_request_slave_channel_compat(mask, omap_dma_filter_fn, > - &rx_req, &pdev->dev, "rx"); > + host->tx_chan = dma_request_channel(mask, omap_dma_filter_fn, &rx_req); > > - if (!host->rx_chan) { > - dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req); > - ret = -ENXIO; > - goto err_irq; > - } > - > - host->tx_chan = > - dma_request_slave_channel_compat(mask, omap_dma_filter_fn, > - &tx_req, &pdev->dev, "tx"); > - > - if (!host->tx_chan) { > - dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req); > - ret = -ENXIO; > - goto err_irq; > + if (!host->tx_chan) { > + dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req); > + ret = -ENXIO; > + goto err_irq; > + } > } > > /* Request IRQ for MMC operations */ > -- Péter