ALSA: firewire-lib: replace in_interrupt() with in_softirq()
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Fri, 11 Jun 2021 08:34:25 +0000 (17:34 +0900)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jun 2021 07:31:41 +0000 (09:31 +0200)
Tasklet is used to handle isochronous context of 1394 OHCI. The explicit
usage of in_softirq() may be preferable than in_interrupt().

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210611083425.61204-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/amdtp-stream-trace.h
sound/firewire/amdtp-stream.c

index aa53c13..5fd2aec 100644 (file)
@@ -49,7 +49,7 @@ TRACE_EVENT(amdtp_packet,
                __entry->data_blocks = data_blocks;
                __entry->data_block_counter = data_block_counter,
                __entry->packet_index = packet_index;
-               __entry->irq = !!in_interrupt();
+               __entry->irq = !!in_softirq();
                __entry->index = index;
        ),
        TP_printk(
index 1d9bc7b..aad9778 100644 (file)
@@ -610,7 +610,7 @@ static void update_pcm_pointers(struct amdtp_stream *s,
                // buffer associated to PCM substream to process PCM frames in the buffer, instead
                // of receiving notification of period elapsed by poll wait.
                if (!pcm->runtime->no_period_wakeup) {
-                       if (in_interrupt()) {
+                       if (in_softirq()) {
                                // In software IRQ context for 1394 OHCI.
                                snd_pcm_period_elapsed(pcm);
                        } else {
@@ -1026,7 +1026,7 @@ static void generate_pkt_descs(struct amdtp_stream *s, const __be32 *ctx_header,
 static inline void cancel_stream(struct amdtp_stream *s)
 {
        s->packet_index = -1;
-       if (in_interrupt())
+       if (in_softirq())
                amdtp_stream_pcm_abort(s);
        WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
 }
@@ -1738,7 +1738,7 @@ unsigned long amdtp_domain_stream_pcm_pointer(struct amdtp_domain *d,
        if (irq_target && amdtp_stream_running(irq_target)) {
                // In software IRQ context, the call causes dead-lock to disable the tasklet
                // synchronously.
-               if (!in_interrupt())
+               if (!in_softirq())
                        fw_iso_context_flush_completions(irq_target->context);
        }