Re: [PATCH 3/4] dmaengine: imx-sdma: implement channel termination via worker

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Dienstag, den 04.09.2018, 02:36 +0000 schrieb Robin Gong:
> > -----Original Message-----
> > From: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
> > Sent: 2018年9月3日 21:12
> > To: Robin Gong <yibin.gong@xxxxxxx>; Vinod Koul <vkoul@xxxxxxxxxx>
> > Cc: dmaengine@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>;
> > kernel@xxxxxxxxxxxxxx; patchwork-lst@xxxxxxxxxxxxxx
> > Subject: Re: [PATCH 3/4] dmaengine: imx-sdma: implement channel
> > termination via worker
> > 
> > Am Montag, den 03.09.2018, 08:59 +0000 schrieb Robin Gong:
> > > > -----Original Message-----
> > > > From: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
> > > > Sent: 2018年9月3日 16:41
> > > > To: Robin Gong <yibin.gong@xxxxxxx>; Vinod Koul <vkoul@kernel.o
> > > > rg>
> > > > Cc: dmaengine@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>
> > > > ;
> > > > kernel@xxxxxxxxxxxxxx; patchwork-lst@xxxxxxxxxxxxxx
> > > > Subject: Re: [PATCH 3/4] dmaengine: imx-sdma: implement channel
> > > > termination via worker
> > > > 
> > > > Hi Robin,
> > > > 
> > > > Am Freitag, den 31.08.2018, 09:49 +0000 schrieb Robin Gong:
> > > > > Hi Lucas,
> > > > > 	Seems I miss your previous mail. Thanks for your patch,
> > > > > but if
> > > > > move most jobs of sdma_disable_channel_with_delay() into
> > > > > worker,
> > > > > that will bring another race condition that upper driver such
> > > > > as
> > > > > Audio terminate channel and free resource of dma channel
> > > > > without
> > > > > really channel stop, if dma transfer done interrupt come
> > > > > after
> > > > > that, oops or kernel cash may be caught. Leave 'sdmac->desc =
> > > > > NULL' in the
> > > > 
> > > > sdma_disable_channel_with_delay() may fix such potential issue.
> > > > 
> > > > No, there is no such issue. The audio channel terminate will
> > > > call
> > > > dmaengine_terminate_sync(), which internally calls
> > > > dmaengine_terminate_async() and then does a
> > > > dmaengine_synchronize().
> > > > As this patchset implements the device_synchronize function in
> > > > the
> > > > sdma driver, this will wait for the worker to finish its
> > > > execution,
> > > > so there is no race condition to worry about here.
> > > > 
> > > > Regards,
> > > > Lucas
> > > 
> > > Yes, but how about other drivers which not call
> > > dmaengine_terminate_sync()?
> > 
> > Please read the dmaengine documentation. device_terminate_all has
> > no
> > requirement that the transfer is actually canceled when the call
> > returns. If the
> > caller needs a guarantee that the channel is stopped it _must_ call
> > device_synchronize.
> 
> I know that, but the fact is some driver still use
> dmaengine_terminate_all() such as
> Spi/uart driver.  My concern is how to avoid to break their
> function. 

They should simply be fixed to not use a deprecated function. Both of
those are only using device_terminate_all in error or shutdown paths,
so the risk of races is pretty minimal even with the current code. And
I think the SPI driver is trivial to fix, as we can just use the
terminate_sync variant  there. The UART driver is a bit more tricky.

Regards,
Lucas



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux PCI]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux