All of lore.kernel.org
 help / color / mirror / Atom feed
From: andriy.shevchenko@linux.intel.com (Andy Shevchenko)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] dma: Add Xilinx AXI Video Direct Memory Access Engine driver support
Date: Thu, 23 Jan 2014 16:00:37 +0200	[thread overview]
Message-ID: <1390485637.7619.88.camel@smile> (raw)
In-Reply-To: <52E11E39.6090901@metafoo.de>

On Thu, 2014-01-23 at 14:50 +0100, Lars-Peter Clausen wrote:
> On 01/23/2014 02:38 PM, Shevchenko, Andriy wrote:
> > On Thu, 2014-01-23 at 12:25 +0100, Lars-Peter Clausen wrote:
> >> On 01/22/2014 05:52 PM, Srikanth Thokala wrote:
> > 
> > [...]
> > 
> >>> +	/* Request the interrupt */
> >>> +	chan->irq = irq_of_parse_and_map(node, 0);
> >>> +	err = devm_request_irq(xdev->dev, chan->irq, xilinx_vdma_irq_handler,
> >>> +			       IRQF_SHARED, "xilinx-vdma-controller", chan);
> >>
> >> This is a clasic example of where to not use devm_request_irq. 'chan' is
> >> accessed in the interrupt handler, but if you use devm_request_irq 'chan'
> >> will be freed before the interrupt handler has been released, which means
> >> there is now a race condition where the interrupt handler can access already
> >> freed memory.ta
> > 
> > Could you elaborate this case? As far as I understood managed resources
> > are a kind of stack pile. In this case you have no such condition. Where
> > am I wrong?
> 
> The stacked stuff is only ran after the remove() function. Which means that
> you call dma_async_device_unregister() before the interrupt handler is
> freed. Another issue with the interrupt handler is a bit hidden. The driver
> does not call tasklet_kill in the remove function. Which it should though to
> make sure that the tasklet does not race against the freeing of the memory.
> And in order to make sure that the tasklet is not rescheduled you need to
> free the irq before killing the tasklet, since the interrupt handler
> schedules the tasklet.

So, you mean devm_request_irq() will race in any DMA driver?

I think the proper solution is to disable all device work in
the .remove() and devm will care about resources.
> majordomo-info.html

-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy

WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
To: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
Cc: Srikanth Thokala
	<sthokal-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>,
	"Williams,
	Dan J" <dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	"Koul,
	Vinod" <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	"michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org"
	<michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>,
	"grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
	<grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org"
	<robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v2] dma: Add Xilinx AXI Video Direct Memory Access Engine driver support
Date: Thu, 23 Jan 2014 16:00:37 +0200	[thread overview]
Message-ID: <1390485637.7619.88.camel@smile> (raw)
In-Reply-To: <52E11E39.6090901-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>

On Thu, 2014-01-23 at 14:50 +0100, Lars-Peter Clausen wrote:
> On 01/23/2014 02:38 PM, Shevchenko, Andriy wrote:
> > On Thu, 2014-01-23 at 12:25 +0100, Lars-Peter Clausen wrote:
> >> On 01/22/2014 05:52 PM, Srikanth Thokala wrote:
> > 
> > [...]
> > 
> >>> +	/* Request the interrupt */
> >>> +	chan->irq = irq_of_parse_and_map(node, 0);
> >>> +	err = devm_request_irq(xdev->dev, chan->irq, xilinx_vdma_irq_handler,
> >>> +			       IRQF_SHARED, "xilinx-vdma-controller", chan);
> >>
> >> This is a clasic example of where to not use devm_request_irq. 'chan' is
> >> accessed in the interrupt handler, but if you use devm_request_irq 'chan'
> >> will be freed before the interrupt handler has been released, which means
> >> there is now a race condition where the interrupt handler can access already
> >> freed memory.ta
> > 
> > Could you elaborate this case? As far as I understood managed resources
> > are a kind of stack pile. In this case you have no such condition. Where
> > am I wrong?
> 
> The stacked stuff is only ran after the remove() function. Which means that
> you call dma_async_device_unregister() before the interrupt handler is
> freed. Another issue with the interrupt handler is a bit hidden. The driver
> does not call tasklet_kill in the remove function. Which it should though to
> make sure that the tasklet does not race against the freeing of the memory.
> And in order to make sure that the tasklet is not rescheduled you need to
> free the irq before killing the tasklet, since the interrupt handler
> schedules the tasklet.

So, you mean devm_request_irq() will race in any DMA driver?

I think the proper solution is to disable all device work in
the .remove() and devm will care about resources.
> majordomo-info.html

-- 
Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Intel Finland Oy

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: Srikanth Thokala <sthokal@xilinx.com>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"Koul, Vinod" <vinod.koul@intel.com>,
	"michal.simek@xilinx.com" <michal.simek@xilinx.com>,
	"grant.likely@linaro.org" <grant.likely@linaro.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"dmaengine@vger.kernel.org" <dmaengine@vger.kernel.org>
Subject: Re: [PATCH v2] dma: Add Xilinx AXI Video Direct Memory Access Engine driver support
Date: Thu, 23 Jan 2014 16:00:37 +0200	[thread overview]
Message-ID: <1390485637.7619.88.camel@smile> (raw)
In-Reply-To: <52E11E39.6090901@metafoo.de>

On Thu, 2014-01-23 at 14:50 +0100, Lars-Peter Clausen wrote:
> On 01/23/2014 02:38 PM, Shevchenko, Andriy wrote:
> > On Thu, 2014-01-23 at 12:25 +0100, Lars-Peter Clausen wrote:
> >> On 01/22/2014 05:52 PM, Srikanth Thokala wrote:
> > 
> > [...]
> > 
> >>> +	/* Request the interrupt */
> >>> +	chan->irq = irq_of_parse_and_map(node, 0);
> >>> +	err = devm_request_irq(xdev->dev, chan->irq, xilinx_vdma_irq_handler,
> >>> +			       IRQF_SHARED, "xilinx-vdma-controller", chan);
> >>
> >> This is a clasic example of where to not use devm_request_irq. 'chan' is
> >> accessed in the interrupt handler, but if you use devm_request_irq 'chan'
> >> will be freed before the interrupt handler has been released, which means
> >> there is now a race condition where the interrupt handler can access already
> >> freed memory.ta
> > 
> > Could you elaborate this case? As far as I understood managed resources
> > are a kind of stack pile. In this case you have no such condition. Where
> > am I wrong?
> 
> The stacked stuff is only ran after the remove() function. Which means that
> you call dma_async_device_unregister() before the interrupt handler is
> freed. Another issue with the interrupt handler is a bit hidden. The driver
> does not call tasklet_kill in the remove function. Which it should though to
> make sure that the tasklet does not race against the freeing of the memory.
> And in order to make sure that the tasklet is not rescheduled you need to
> free the irq before killing the tasklet, since the interrupt handler
> schedules the tasklet.

So, you mean devm_request_irq() will race in any DMA driver?

I think the proper solution is to disable all device work in
the .remove() and devm will care about resources.
> majordomo-info.html

-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy


  reply	other threads:[~2014-01-23 14:00 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-22 16:52 [PATCH v2] Add Xilinx AXI Video DMA Engine driver Srikanth Thokala
2014-01-22 16:52 ` Srikanth Thokala
2014-01-22 16:52 ` Srikanth Thokala
2014-01-22 16:52 ` [PATCH v2] dma: Add Xilinx AXI Video Direct Memory Access Engine driver support Srikanth Thokala
2014-01-22 16:52   ` Srikanth Thokala
2014-01-22 21:30   ` Levente Kurusa
2014-01-22 21:30     ` Levente Kurusa
2014-01-22 21:30     ` Levente Kurusa
2014-01-23 17:35     ` Srikanth Thokala
2014-01-23 17:35       ` Srikanth Thokala
2014-01-23 17:35       ` Srikanth Thokala
2014-01-23 11:25   ` Lars-Peter Clausen
2014-01-23 11:25     ` Lars-Peter Clausen
2014-01-23 13:38     ` Shevchenko, Andriy
2014-01-23 13:38       ` Shevchenko, Andriy
2014-01-23 13:38       ` Shevchenko, Andriy
2014-01-23 13:50       ` Lars-Peter Clausen
2014-01-23 13:50         ` Lars-Peter Clausen
2014-01-23 13:50         ` Lars-Peter Clausen
2014-01-23 14:00         ` Andy Shevchenko [this message]
2014-01-23 14:00           ` Andy Shevchenko
2014-01-23 14:00           ` Andy Shevchenko
2014-01-23 14:07           ` Lars-Peter Clausen
2014-01-23 14:07             ` Lars-Peter Clausen
2014-01-23 14:07             ` Lars-Peter Clausen
2014-01-26 14:03             ` Vinod Koul
2014-01-26 14:03               ` Vinod Koul
2014-01-26 14:03               ` Vinod Koul
2014-01-26 17:41               ` Lars-Peter Clausen
2014-01-26 17:41                 ` Lars-Peter Clausen
2014-01-24 11:16     ` Srikanth Thokala
2014-01-24 11:16       ` Srikanth Thokala
2014-01-24 13:24       ` Lars-Peter Clausen
2014-01-24 13:24         ` Lars-Peter Clausen
2014-01-24 13:24         ` Lars-Peter Clausen
2014-01-26 13:59         ` Vinod Koul
2014-01-26 13:59           ` Vinod Koul
2014-01-26 17:39           ` Lars-Peter Clausen
2014-01-26 17:39             ` Lars-Peter Clausen
2014-01-26 17:39             ` Lars-Peter Clausen
2014-01-27 13:12             ` Srikanth Thokala
2014-01-27 13:12               ` Srikanth Thokala
2014-01-28  3:13               ` Vinod Koul
2014-01-28  3:13                 ` Vinod Koul
2014-01-31  6:51                 ` Srikanth Thokala
2014-01-31  6:51                   ` Srikanth Thokala
2014-01-31  6:51                   ` Srikanth Thokala
2014-02-05 16:25                   ` Srikanth Thokala
2014-02-05 16:25                     ` Srikanth Thokala
2014-02-05 16:30                     ` Lars-Peter Clausen
2014-02-05 16:30                       ` Lars-Peter Clausen
2014-02-05 16:30                       ` Lars-Peter Clausen
2014-02-06 13:34                       ` Srikanth Thokala
2014-02-06 13:34                         ` Srikanth Thokala
2014-02-06 13:34                         ` Srikanth Thokala
2014-02-06 15:53                         ` Lars-Peter Clausen
2014-02-06 15:53                           ` Lars-Peter Clausen
2014-02-06 15:53                           ` Lars-Peter Clausen
2014-02-10 12:51                           ` Srikanth Thokala
2014-02-10 12:51                             ` Srikanth Thokala
2014-01-28  3:09             ` Vinod Koul
2014-01-28  3:09               ` Vinod Koul
2014-01-28  3:09               ` Vinod Koul
2014-01-27 11:06           ` Srikanth Thokala
2014-01-27 11:06             ` Srikanth Thokala
2014-01-27 11:06             ` Srikanth Thokala
2014-01-31  6:52             ` Srikanth Thokala
2014-01-31  6:52               ` Srikanth Thokala
2014-01-31  6:52               ` Srikanth Thokala
2014-02-04  5:28               ` Vinod Koul
2014-02-04  5:28                 ` Vinod Koul
2014-02-04  5:28                 ` Vinod Koul
2014-02-04 10:35                 ` Srikanth Thokala
2014-02-04 10:35                   ` Srikanth Thokala
2014-02-04 10:35                   ` Srikanth Thokala
2014-01-31 17:44         ` Andy Gross
2014-01-31 17:44           ` Andy Gross
2014-02-01 18:23           ` Lars-Peter Clausen
2014-02-01 18:23             ` Lars-Peter Clausen
2014-02-01 18:23             ` Lars-Peter Clausen
2014-01-23 13:32   ` Andy Shevchenko
2014-01-23 13:32     ` Andy Shevchenko
2014-01-23 17:52     ` Srikanth Thokala
2014-01-23 17:52       ` Srikanth Thokala
2014-01-23 17:52       ` Srikanth Thokala
2014-01-26 14:24   ` Vinod Koul
2014-01-26 14:24     ` Vinod Koul
2014-01-26 17:46     ` Lars-Peter Clausen
2014-01-26 17:46       ` Lars-Peter Clausen
2014-01-26 17:46       ` Lars-Peter Clausen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1390485637.7619.88.camel@smile \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.