forked from Minki/linux
1034872123
The snd-firewire-lib.ko has 'amdtp-packet' event of tracepoints. Current
printk format for the event includes 'sizeof(u8)' macro expected to be
extended in compilation time. However, this is not done. As a result,
perf tools cannot parse the event for printing:
$ mount -l -t debugfs
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
$ cat /sys/kernel/debug/tracing/events/snd_firewire_lib/amdtp_packet/format
...
print fmt: "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u %s",
REC->second, REC->cycle, REC->src, REC->dest, REC->channel,
REC->payload_quadlets, REC->data_blocks, REC->data_block_counter,
REC->packet_index, REC->irq, REC->index,
__print_array(__get_dynamic_array(cip_header),
__get_dynamic_array_len(cip_header),
sizeof(u8))
$ sudo perf record -e snd_firewire_lib:amdtp_packet
[snd_firewire_lib:amdtp_packet] function sizeof not defined
Error: expected type 5 but read 0
This commit fixes it by obsoleting the macro with actual size.
Cc: <stable@vger.kernel.org>
Fixes: bde2bbdb30
("ALSA: firewire-lib: use dynamic array for CIP header of tracing events")
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200503045718.86337-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
79 lines
2.4 KiB
C
79 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* amdtp-stream-trace.h - tracepoint definitions to dump a part of packet data
|
|
*
|
|
* Copyright (c) 2016 Takashi Sakamoto
|
|
*/
|
|
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM snd_firewire_lib
|
|
|
|
#if !defined(_AMDTP_STREAM_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _AMDTP_STREAM_TRACE_H
|
|
|
|
#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_STRUCT__entry(
|
|
__field(unsigned int, second)
|
|
__field(unsigned int, cycle)
|
|
__field(int, channel)
|
|
__field(int, src)
|
|
__field(int, dest)
|
|
__dynamic_array(u8, cip_header, cip_header ? 8 : 0)
|
|
__field(unsigned int, payload_quadlets)
|
|
__field(unsigned int, data_blocks)
|
|
__field(unsigned int, data_block_counter)
|
|
__field(unsigned int, packet_index)
|
|
__field(unsigned int, irq)
|
|
__field(unsigned int, index)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->second = cycles / CYCLES_PER_SECOND;
|
|
__entry->cycle = cycles % CYCLES_PER_SECOND;
|
|
__entry->channel = s->context->channel;
|
|
if (s->direction == AMDTP_IN_STREAM) {
|
|
__entry->src = fw_parent_device(s->unit)->node_id;
|
|
__entry->dest = fw_parent_device(s->unit)->card->node_id;
|
|
} else {
|
|
__entry->src = fw_parent_device(s->unit)->card->node_id;
|
|
__entry->dest = fw_parent_device(s->unit)->node_id;
|
|
}
|
|
if (cip_header) {
|
|
memcpy(__get_dynamic_array(cip_header), cip_header,
|
|
__get_dynamic_array_len(cip_header));
|
|
}
|
|
__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->irq = !!in_interrupt();
|
|
__entry->index = index;
|
|
),
|
|
TP_printk(
|
|
"%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u %s",
|
|
__entry->second,
|
|
__entry->cycle,
|
|
__entry->src,
|
|
__entry->dest,
|
|
__entry->channel,
|
|
__entry->payload_quadlets,
|
|
__entry->data_blocks,
|
|
__entry->data_block_counter,
|
|
__entry->packet_index,
|
|
__entry->irq,
|
|
__entry->index,
|
|
__print_array(__get_dynamic_array(cip_header),
|
|
__get_dynamic_array_len(cip_header), 1))
|
|
);
|
|
|
|
#endif
|
|
|
|
#undef TRACE_INCLUDE_PATH
|
|
#define TRACE_INCLUDE_PATH .
|
|
#undef TRACE_INCLUDE_FILE
|
|
#define TRACE_INCLUDE_FILE amdtp-stream-trace
|
|
#include <trace/define_trace.h>
|