On Wed, 02 Sep 2020 10:44:43 +0200, Takashi Sakamoto wrote:
To Iwai-san,
I'm review your patch in 'test/kill-tasklet' branch in sound.git[1]. Although I agree with the direction to obsolete tasklet usage with workqueue, 'in_interrupt()' helper function is used in two lines in 'sound/firewire/amdtp-stream.c' since it's convenient to distinguish running context (any softirq or user task). We need enough care of the cases about which below two patches mention:
- 1dba9db0eaa6 ('ALSA: firewire-lib: permit to flush queued packets only in process context for better PCM period granularity')
- 4a9bfafc64f4 ('ALSA: firewire-lib: Fix stall of process context at packet error)
As long as I know, we have no helper function to distinguish workqueue task from user task. The simple replacement is not good way in the case.
Thanks for pointing this out, it was indeed an overlook.
We can use current_work() to check whether the current task comes from the dedicated work or not, e.g.
if (current_work() == &myobject->some_work) its_from_my_work();
Takashi