dmatest regression in 3.10-rc1
Will Deacon
will.deacon at arm.com
Fri May 17 10:18:57 EDT 2013
Hi Vinod,
Thanks for the reply.
On Fri, May 17, 2013 at 01:34:23PM +0100, Vinod Koul wrote:
> On Thu, May 16, 2013 at 04:35:53PM +0100, Will Deacon wrote:
> > Right, so I think I understand what's causing this, but I'll leave it to
> > Andriy to suggest a fix. The problem comes about because the dmatest
> > module is now driven from debugfs, making it possible to unload the module
> > whilst a test run is in progress. In this case:
> >
> > - The DMA threads will return from wait_event_freezable_timeout(...)
> > due to kthread_should_stop() returning true, and subsequently
> > report failure because done.done is false.
> >
> > - The DMA engines may not be idle, so the asynchronous callback can
> > be invoked after we've started cleaning up, explaining the NULL
> > dereference I'm seeing.
> >
> > The solutions are either fixing the module exit code to cope with concurrent
> > DMA transfers or to revert 77101ce578bb and not allow the channel threads to
> > return mid-transfer.
> We need to properly abort the channels on removal. This is already handled in
> the code but the kthread_stop is called after the transactions are aborted. It
> should be the other way round. Can you try with below patch
Unfortunately, I can trigger the exact same panic with this patch applied.
Isn't there a race between terminating the dmaengine transfers
(dmaengine_terminate_all) and killing the test threads (kthread_stop) where
a new transfer could be kicked off by dmatest_func?
Will
More information about the linux-arm-kernel
mailing list