Hi, All of drivers in ALSA firewire stack processes two chances to process isochronous packets in any isochronous context; in software IRQ context for 1394 OHCI, and in process context of ALSA PCM application. In the process context, callbacks of .pointer and .ack are utilized. The callbacks are done by ALSA PCM core under acquiring lock of PCM substream, In design of ALSA PCM core, call of snd_pcm_period_elapsed() is used for drivers to awaken user processes from waiting for available frames. The function voluntarily acquires lock of PCM substream, therefore it is not called in the process context since it causes dead lock. As a workaround to avoid the dead lock, all of drivers in ALSA firewire stack uses workqueue to delegate the call. This patchset is my attempt for the issue. A variant of 'snd_pcm_period_elapsed()' without lock acquisition is going to be added, named 'snd_pcm_period_elapsed_without_lock()'. This is used in callbacks of .pointer and .ack of snd_pcm_ops structure. The patchset is still under my test, but it looks to work well in my easy and rough test. Before posting for merge, I'd like to get your comment to the idea. When evaluating, please merge below two histories: * 64584f329352 (for-next) * 9981b20a5e36 (for-linus) Takashi Sakamoto (3): ALSA: pcm: add snd_pcm_period_elapsed() variant without acquiring lock of PCM substream ALSA: firewire-lib: queue event of period elapse in process context ALSA: firewire-lib: obsolete workqueue for period update include/sound/pcm.h | 53 ++++++++++++++++++++++++++++++++++- sound/core/pcm_lib.c | 25 +++-------------- sound/firewire/amdtp-stream.c | 46 +++++++++--------------------- sound/firewire/amdtp-stream.h | 1 - 4 files changed, 70 insertions(+), 55 deletions(-) -- 2.27.0