Re: [PATCH v2 0/2] ALSA: firewire-lib: restore process context workqueue to prevent deadlock
Thank you for your sending the revised patches, it looks better than the previous one. However, I have an additional request.
Allright, patch v3 it is.
Should have known git has something like that, how handy!
$ git revert -s b5b519965c4c
Yes, 5b5 can be removed via revert, but what is the difference in effect? Just time saving?
$ git revert -s 7ba5ca32fe6e
This one I'd like to ask you about: The original inline comment in amdtp-stream.c amdtp_domain_stream_pcm_pointer() ``` // This function is called in software IRQ context of // period_work or process context. // // When the software IRQ context was scheduled by software IRQ // context of IT contexts, queued packets were already handled. // Therefore, no need to flush the queue in buffer furthermore. // // When the process context reach here, some packets will be // already queued in the buffer. These packets should be handled // immediately to keep better granularity of PCM pointer. // // Later, the process context will sometimes schedules software // IRQ context of the period_work. Then, no need to flush the // queue by the same reason as described in the above ``` (let's call the above v1) was replaced with ``` // In software IRQ context, the call causes dead-lock to disable the tasklet // synchronously. ``` on occasion of 7ba5ca32fe6e (let's call this v2).
I sought to replace it with ``` // use wq to prevent deadlock between process context spin_lock // of snd_pcm_stream_lock_irq() in snd_pcm_status64() and // softIRQ context spin_lock of snd_pcm_stream_lock_irqsave() // in snd_pcm_period_elapsed() ``` to prevent this issue from occurring again (let's call this v3).
Should I include v1, v3 or a combination of v1 and v3 in my next patch?
Just for safe, it is preferable to execute 'scripts/checkpatch.pl' in kernel tree to check the patchset generated by send-email subcommand[3].
Absolutely should have done so, sorry.
Thank you for your patience and guidance, Edmund Raile.
On Mon, Jul 29, 2024 at 10:16:04AM +0000, edmund.raile wrote:
$ git revert -s b5b519965c4c
Yes, 5b5 can be removed via revert, but what is the difference in effect? Just time saving?
The title of commit generated by git-revert could be helpful when reading history of changes later. The code change is itself important, while the history of changes often assists developers to work between several trees.
$ git revert -s 7ba5ca32fe6e
This one I'd like to ask you about: The original inline comment in amdtp-stream.c amdtp_domain_stream_pcm_pointer()
// This function is called in software IRQ context of // period_work or process context. // // When the software IRQ context was scheduled by software IRQ // context of IT contexts, queued packets were already handled. // Therefore, no need to flush the queue in buffer furthermore. // // When the process context reach here, some packets will be // already queued in the buffer. These packets should be handled // immediately to keep better granularity of PCM pointer. // // Later, the process context will sometimes schedules software // IRQ context of the period_work. Then, no need to flush the // queue by the same reason as described in the above
(let's call the above v1) was replaced with
// In software IRQ context, the call causes dead-lock to disable the tasklet // synchronously.
on occasion of 7ba5ca32fe6e (let's call this v2).
I sought to replace it with
// use wq to prevent deadlock between process context spin_lock // of snd_pcm_stream_lock_irq() in snd_pcm_status64() and // softIRQ context spin_lock of snd_pcm_stream_lock_irqsave() // in snd_pcm_period_elapsed()
to prevent this issue from occurring again (let's call this v3).
Should I include v1, v3 or a combination of v1 and v3 in my next patch?
I think we pay enough attention to regenerate the deadlock, thus v3 is a good choice. But the cause of deadlock in the above description is a bit wrong. It is typical AB/BA deadlock, like:
Thread 0: 1. Acquire stream lock by calling 'snd_pcm_stream_lock_irq()' or so 2. Wait until running tasklet finishes by calling 'tasklet_disable_in_atomic()' (actually at tasklet_unlock_spin_wait())
Thread 1: 1. Launch tasklet 2. Wait until the stream lock released
The softIRQ context does not related to any type of lock in sound subsystem essentially.
Thanks
Takashi Sakamoto
participants (2)
-
edmund.raile
-
Takashi Sakamoto