mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
firewire: core: add tracepoints events for allocation/deallocation of isochronous context
It is helpful to trace the allocation and dealocation of isochronous when the core function is requested them by both in-kernel unit drivers and userspace applications. This commit adds some tracepoints events for the aim. Link: https://lore.kernel.org/r/20240623220859.851685-2-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
This commit is contained in:
parent
ae24ba769b
commit
25e6e00d3f
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#include "core.h"
|
||||
|
||||
#include <trace/events/firewire.h>
|
||||
|
||||
/*
|
||||
* Isochronous DMA context management
|
||||
*/
|
||||
|
|
@ -148,12 +150,20 @@ struct fw_iso_context *fw_iso_context_create(struct fw_card *card,
|
|||
ctx->callback.sc = callback;
|
||||
ctx->callback_data = callback_data;
|
||||
|
||||
trace_isoc_outbound_allocate(ctx, channel, speed);
|
||||
trace_isoc_inbound_single_allocate(ctx, channel, header_size);
|
||||
trace_isoc_inbound_multiple_allocate(ctx);
|
||||
|
||||
return ctx;
|
||||
}
|
||||
EXPORT_SYMBOL(fw_iso_context_create);
|
||||
|
||||
void fw_iso_context_destroy(struct fw_iso_context *ctx)
|
||||
{
|
||||
trace_isoc_outbound_destroy(ctx);
|
||||
trace_isoc_inbound_single_destroy(ctx);
|
||||
trace_isoc_inbound_multiple_destroy(ctx);
|
||||
|
||||
ctx->card->driver->free_iso_context(ctx);
|
||||
}
|
||||
EXPORT_SYMBOL(fw_iso_context_destroy);
|
||||
|
|
|
|||
|
|
@ -436,6 +436,111 @@ TRACE_EVENT(self_id_sequence,
|
|||
#undef PHY_PACKET_SELF_ID_GET_POWER_CLASS
|
||||
#undef PHY_PACKET_SELF_ID_GET_INITIATED_RESET
|
||||
|
||||
TRACE_EVENT_CONDITION(isoc_outbound_allocate,
|
||||
TP_PROTO(const struct fw_iso_context *ctx, unsigned int channel, unsigned int scode),
|
||||
TP_ARGS(ctx, channel, scode),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_TRANSMIT),
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, context)
|
||||
__field(u8, card_index)
|
||||
__field(u8, channel)
|
||||
__field(u8, scode)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->context = (uintptr_t)ctx;
|
||||
__entry->card_index = ctx->card->index;
|
||||
__entry->channel = channel;
|
||||
__entry->scode = scode;
|
||||
),
|
||||
TP_printk(
|
||||
"context=0x%llx card_index=%u channel=%u scode=%u",
|
||||
__entry->context,
|
||||
__entry->card_index,
|
||||
__entry->channel,
|
||||
__entry->scode
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT_CONDITION(isoc_inbound_single_allocate,
|
||||
TP_PROTO(const struct fw_iso_context *ctx, unsigned int channel, unsigned int header_size),
|
||||
TP_ARGS(ctx, channel, header_size),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_RECEIVE),
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, context)
|
||||
__field(u8, card_index)
|
||||
__field(u8, channel)
|
||||
__field(u8, header_size)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->context = (uintptr_t)ctx;
|
||||
__entry->card_index = ctx->card->index;
|
||||
__entry->channel = channel;
|
||||
__entry->header_size = header_size;
|
||||
),
|
||||
TP_printk(
|
||||
"context=0x%llx card_index=%u channel=%u header_size=%u",
|
||||
__entry->context,
|
||||
__entry->card_index,
|
||||
__entry->channel,
|
||||
__entry->header_size
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT_CONDITION(isoc_inbound_multiple_allocate,
|
||||
TP_PROTO(const struct fw_iso_context *ctx),
|
||||
TP_ARGS(ctx),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL),
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, context)
|
||||
__field(u8, card_index)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->context = (uintptr_t)ctx;
|
||||
__entry->card_index = ctx->card->index;
|
||||
),
|
||||
TP_printk(
|
||||
"context=0x%llx card_index=%u",
|
||||
__entry->context,
|
||||
__entry->card_index
|
||||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(isoc_destroy_template,
|
||||
TP_PROTO(const struct fw_iso_context *ctx),
|
||||
TP_ARGS(ctx),
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, context)
|
||||
__field(u8, card_index)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->context = (uintptr_t)ctx;
|
||||
__entry->card_index = ctx->card->index;
|
||||
),
|
||||
TP_printk(
|
||||
"context=0x%llx card_index=%u",
|
||||
__entry->context,
|
||||
__entry->card_index
|
||||
)
|
||||
)
|
||||
|
||||
DEFINE_EVENT_CONDITION(isoc_destroy_template, isoc_outbound_destroy,
|
||||
TP_PROTO(const struct fw_iso_context *ctx),
|
||||
TP_ARGS(ctx),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_TRANSMIT)
|
||||
);
|
||||
|
||||
DEFINE_EVENT_CONDITION(isoc_destroy_template, isoc_inbound_single_destroy,
|
||||
TP_PROTO(const struct fw_iso_context *ctx),
|
||||
TP_ARGS(ctx),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_RECEIVE)
|
||||
);
|
||||
|
||||
DEFINE_EVENT_CONDITION(isoc_destroy_template, isoc_inbound_multiple_destroy,
|
||||
TP_PROTO(const struct fw_iso_context *ctx),
|
||||
TP_ARGS(ctx),
|
||||
TP_CONDITION(ctx->type == FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL)
|
||||
);
|
||||
|
||||
#undef QUADLET_SIZE
|
||||
|
||||
#endif // _FIREWIRE_TRACE_EVENT_H
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user