FAILED: patch "[PATCH] ALSA: firewire-lib: fix amdtp_packet tracepoints event for" failed to apply to 5.4-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 814b43127f4ac69332e809152e30773941438aff Mon Sep 17 00:00:00 2001
From: Takashi Sakamoto <[email protected]>
Date: Thu, 13 May 2021 21:56:52 +0900
Subject: [PATCH] ALSA: firewire-lib: fix amdtp_packet tracepoints event for
packet_index field
The snd_firewire_lib:amdtp_packet tracepoints event includes index of packet processed in a context handling. However in IR context, it is not calculated as expected.
Cc <[email protected]>
Fixes 753e717986c2 ("ALSA: firewire-lib: use packet descriptor for IR context")
Signed-off-by Takashi Sakamoto <[email protected]>
Signed-off-by Takashi Iwai <[email protected]>
sound/firewire/amdtp-stream-trace.h +3 -3
@@ -14,8 +14,8 @@#include <linux/tracepoint.h> TRACE_EVENT(amdtp_packet, - TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int data_block_counter, unsigned int index), - TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, data_block_counter, index), + TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int data_block_counter, unsigned int packet_index, unsigned int index), + TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, data_block_counter, packet_index, index), TP_STRUCT__entry( __field(unsigned int, second) __field(unsigned int, cycle)
@@ -48,7 +48,7 @@ TRACE_EVENT(amdtp_packet, __entry->payload_quadlets = payload_length /sizeof (__be32); __entry->data_blocks = data_blocks; __entry->data_block_counter = data_block_counter, - __entry->packet_index = s->packet_index; + __entry->packet_index = packet_index; __entry->irq = !!in_interrupt (); __entry->index = index; ),
sound/firewire/amdtp-stream.c +9 -6
@@ -526,7 +526,7 @@ static void build_it_pkt_header(struct amdtp_stream *s, unsigned int cycle, }trace_amdtp_packet (s, cycle, cip_header, payload_length, data_blocks, - data_block_counter, index); + data_block_counter, s->packet_index, index); } static int check_cip_header(struct amdtp_stream *s, const __be32 *buf,
@@ -630,7 +630,7 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle,unsigned int *payload_length, unsigned int *data_blocks, unsigned int *data_block_counter, - unsigned int *syt, unsigned int index) + unsigned int *syt, unsigned int packet_index, unsigned int index) { const __be32 *cip_header;unsigned int cip_header_size;
@@ -668,7 +668,7 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle, }trace_amdtp_packet (s, cycle, cip_header, *payload_length, *data_blocks, - *data_block_counter, index); + *data_block_counter, packet_index, index);return err; }
@@ -707,12 +707,13 @@ static int generate_device_pkt_descs(struct amdtp_stream *s, unsigned int packets) {unsigned int dbc = s->data_block_counter; +unsigned int packet_index = s->packet_index; +unsigned int queue_size = s->queue_size;int i;int err;for (i =0 ; i < packets; ++i) {struct pkt_desc *desc = descs + i; -unsigned int index = (s->packet_index + i) % s->queue_size;unsigned int cycle;unsigned int payload_length;unsigned int data_blocks;
@@ -721,7 +722,7 @@ static int generate_device_pkt_descs(struct amdtp_stream *s, cycle =compute_cycle_count (ctx_header[1 ]); err =parse_ir_ctx_header (s, cycle, ctx_header, &payload_length, - &data_blocks, &dbc, &syt, i); + &data_blocks, &dbc, &syt, packet_index, i);if (err <0 )return err;
@@ -729,13 +730,15 @@ static int generate_device_pkt_descs(struct amdtp_stream *s, desc->syt = syt; desc->data_blocks = data_blocks; desc->data_block_counter = dbc; - desc->ctx_payload = s->buffer.packets[index].buffer; + desc->ctx_payload = s->buffer.packets[packet_index].buffer;if (!(s->flags &CIP_DBC_IS_END_EVENT )) dbc = (dbc + desc->data_blocks) &0xff ; ctx_header += s->ctx_data.tx.ctx_header_size /sizeof (*ctx_header); + + packet_index = (packet_index +1 ) % queue_size; } s->data_block_counter = dbc;