Hi Takashi,
On Thu, Oct 22, 2020 at 03:20:49PM +0200, Takashi Iwai wrote:
On Thu, 22 Oct 2020 14:57:41 +0200, Maxime Ripard wrote:
On Thu, Oct 22, 2020 at 12:03:19PM +0200, Jaroslav Kysela wrote:
Dne 22. 10. 20 v 11:50 Maxime Ripard napsal(a):
So, I'm not really sure what I'm supposed to do here. The drivers involved don't appear to be doing anything extraordinary, but the issues lockdep report are definitely valid too. What are the expectations in terms of context from ALSA when running the callbacks, and how can we fix it?
I think that you should set the non-atomic flag and wake up the workqueue or so from interrupt handler in this case. Call snd_pcm_period_elapsed() from the workqueue not the interrupt handler context.
Yeah, that was my first guess too. However, the DMA driver uses some kind of generic helpers using a tasklet, so getting rid of it would take some work and would very likely not be eligible for stable.
Who sets the nonatomic flag for vc4? I couldn't find the relevant code in the latest upstream.
Sorry if this wasn't clear enough, it's not there at the moment, ALSA takes a spinlock and lockdep complains that we're sleeping in an atomic context.
I tried to add the nonatomic flag in my tree to see if it was fixing the issue, but ran into another lockdep complain now with ALSA taking a mutex in a tasklet.
Ideally dmaengine PCM helper should support the nonatomic mode, but until then, the other side needs to drop the nonatomic flag, I suppose.
In this case, I'm not sure the blame is in the PCM helper but if there's any blame, I guess it's the virt-chan layer inside dmaengine (so for providers) that use a tasklet instead of something that allows sleeping
Maxime