On Fri, May 22, 2020 at 05:00:25PM +0300, Serge Semin wrote: > On Fri, May 22, 2020 at 04:27:43PM +0300, Serge Semin wrote: > > On Fri, May 22, 2020 at 02:10:13PM +0100, Mark Brown wrote: > > > On Fri, May 22, 2020 at 03:44:06PM +0300, Serge Semin wrote: > > > > On Fri, May 22, 2020 at 03:34:27PM +0300, Andy Shevchenko wrote: ... > > > > > > Realistically it seems unlikely that the clock will be even as slow as > > > > > > double digit kHz though, and if we do I'd not be surprised to see other > > > > > > problems kicking in. It's definitely good to handle such things if we > > > > > > can but so long as everything is OK for realistic use cases I'm not sure > > > > > > it should be a blocker. > > > > > > > As I see it the only way to fix the problem for any use-case is to move the > > > > busy-wait loop out from the tasklet's callback, add a completion variable to the > > > > DW SPI data and wait for all the DMA transfers completion in the > > > > dw_spi_dma_transfer() method. Then execute both busy-wait loops (there we can > > > > use spi_delay_exec() since it's a work-thread) and call > > > > spi_finalize_current_transfer() after it. What do you think? > > > > > > I'm concerned that this will add latency for the common case to handle a > > > potential issue for unrealistically slow buses but yeah, if it's an > > > issue kicking up to task context is how you'd handle it. > > > > I am not that worried about the latency (most likely it'll be the same as > > before), but I am mostly concerned regarding a most likely need to re-implement > > a local version spi_transfer_wait(). We can't afford wait for the completion > > indefinitely here, so the wait_for_completion_timeout() should be used, for which > > I would have to calculate a decent timeout based on the transfer capabilities, > > etc. So basically it would mean to partly copy the spi_transfer_wait() to this > > module.( > > I'd also wait for Andy's suggestion regarding this, since he's been worried > about the delay length in the first place. So he may come up with a better > solution in this regard. The completion approach sounds quite heavy to me. Since we haven't got any report for such an issue, I prefer as simplest as possible approach. If we add might_sleep() wouldn't it be basically reimplementation of the spi_delay_exec() again? And second question, do you experience this warning on your system? My point is: let's warn and see if anybody comes with a bug report. We will solve an issue when it appears. -- With Best Regards, Andy Shevchenko