]> Git Repo - linux.git/commitdiff
dma: tegra: fix interrupt name issue with apb dma.
authorLaxman Dewangan <[email protected]>
Wed, 3 Oct 2012 17:18:07 +0000 (22:48 +0530)
committerVinod Koul <[email protected]>
Thu, 4 Oct 2012 15:21:24 +0000 (20:51 +0530)
When watching the interrupts through /proc/interrupts,
the name of the interrupts are blank or garbage. The
reason is the pointer passed for devname during irq
registration is stack and so it get changed after
dma registration completes.
Allocate the pointer as part of dma channel and pass
this pointer as the devname for irq registration to
avoid change of name.

Signed-off-by: Laxman Dewangan <[email protected]>
Reported-by: Stephen Warren <[email protected]>
Acked-by: Stephen Warren <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
Signed-off-by: Vinod Koul <[email protected]>
drivers/dma/tegra20-apb-dma.c

index 6ed3f43be41ebbb3f1c2cb14ddb2a7232110e0c8..e447c8aad48ad6764cbca97d8ae0de381fb3ecb8 100644 (file)
@@ -169,6 +169,7 @@ typedef void (*dma_isr_handler)(struct tegra_dma_channel *tdc,
 /* tegra_dma_channel: Channel specific information */
 struct tegra_dma_channel {
        struct dma_chan         dma_chan;
+       char                    name[30];
        bool                    config_init;
        int                     id;
        int                     irq;
@@ -1282,7 +1283,6 @@ static int __devinit tegra_dma_probe(struct platform_device *pdev)
        INIT_LIST_HEAD(&tdma->dma_dev.channels);
        for (i = 0; i < cdata->nr_channels; i++) {
                struct tegra_dma_channel *tdc = &tdma->channels[i];
-               char irq_name[30];
 
                tdc->chan_base_offset = TEGRA_APBDMA_CHANNEL_BASE_ADD_OFFSET +
                                        i * TEGRA_APBDMA_CHANNEL_REGISTER_SIZE;
@@ -1294,9 +1294,9 @@ static int __devinit tegra_dma_probe(struct platform_device *pdev)
                        goto err_irq;
                }
                tdc->irq = res->start;
-               snprintf(irq_name, sizeof(irq_name), "apbdma.%d", i);
+               snprintf(tdc->name, sizeof(tdc->name), "apbdma.%d", i);
                ret = devm_request_irq(&pdev->dev, tdc->irq,
-                               tegra_dma_isr, 0, irq_name, tdc);
+                               tegra_dma_isr, 0, tdc->name, tdc);
                if (ret) {
                        dev_err(&pdev->dev,
                                "request_irq failed with err %d channel %d\n",
This page took 0.049145 seconds and 4 git commands to generate.