From mboxrd@z Thu Jan 1 00:00:00 1970 From: will.deacon@arm.com (Will Deacon) Date: Fri, 17 May 2013 15:18:57 +0100 Subject: dmatest regression in 3.10-rc1 In-Reply-To: <20130517123423.GR14863@intel.com> References: <20130515152803.GL23869@mudshark.cambridge.arm.com> <20130516153553.GI11706@mudshark.cambridge.arm.com> <20130517123423.GR14863@intel.com> Message-ID: <20130517141857.GM23112@mudshark.cambridge.arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org 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