Add MCQ hardware queue ID in the existing trace event
ufshcd_command().
Signed-off-by: Ziqi Chen <[email protected]>
---
Changes to v5:
- Changed hwq_id type from u32 to int.
- Changed printing string of hwq id from "hqid" to "hwq_id".
- Moved the assignment statement of hwq into the MCQ if-statement.
Changes to v4:
- Merged MCQ and SDB trace event as one.
Changes to v3:
- Free trace_ufshcd_command_mcq() from dependency on trace_ufshcd_command().
Changes to v2:
- Shorten printing strings.
Changes to v1:
- Adjust the order of fields to keep them aligned.
---
drivers/ufs/core/ufshcd.c | 15 ++++++++++++---
include/trace/events/ufs.h | 24 +++++++++++++-----------
2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 3b3cf78..1d58cb2 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -422,7 +422,9 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag,
{
u64 lba = 0;
u8 opcode = 0, group_id = 0;
- u32 intr, doorbell;
+ u32 doorbell = 0;
+ u32 intr;
+ int hwq_id = -1;
struct ufshcd_lrb *lrbp = &hba->lrb[tag];
struct scsi_cmnd *cmd = lrbp->cmd;
struct request *rq = scsi_cmd_to_rq(cmd);
@@ -456,9 +458,16 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag,
}
intr = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
- doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
+
+ if (is_mcq_enabled(hba)) {
+ struct ufs_hw_queue *hwq = ufshcd_mcq_req_to_hwq(hba, rq);
+
+ hwq_id = hwq->id;
+ } else {
+ doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
+ }
trace_ufshcd_command(dev_name(hba->dev), str_t, tag,
- doorbell, transfer_len, intr, lba, opcode, group_id);
+ doorbell, hwq_id, transfer_len, intr, lba, opcode, group_id);
}
static void ufshcd_print_clk_freqs(struct ufs_hba *hba)
diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h
index 599739e..f467472 100644
--- a/include/trace/events/ufs.h
+++ b/include/trace/events/ufs.h
@@ -268,20 +268,21 @@ DEFINE_EVENT(ufshcd_template, ufshcd_wl_runtime_resume,
TRACE_EVENT(ufshcd_command,
TP_PROTO(const char *dev_name, enum ufs_trace_str_t str_t,
- unsigned int tag, u32 doorbell, int transfer_len, u32 intr,
- u64 lba, u8 opcode, u8 group_id),
+ unsigned int tag, u32 doorbell, u32 hwq_id, int transfer_len,
+ u32 intr, u64 lba, u8 opcode, u8 group_id),
- TP_ARGS(dev_name, str_t, tag, doorbell, transfer_len,
- intr, lba, opcode, group_id),
+ TP_ARGS(dev_name, str_t, tag, doorbell, hwq_id, transfer_len,
+ intr, lba, opcode, group_id),
TP_STRUCT__entry(
__string(dev_name, dev_name)
__field(enum ufs_trace_str_t, str_t)
__field(unsigned int, tag)
__field(u32, doorbell)
- __field(int, transfer_len)
+ __field(u32, hwq_id)
__field(u32, intr)
__field(u64, lba)
+ __field(int, transfer_len)
__field(u8, opcode)
__field(u8, group_id)
),
@@ -291,19 +292,20 @@ TRACE_EVENT(ufshcd_command,
__entry->str_t = str_t;
__entry->tag = tag;
__entry->doorbell = doorbell;
- __entry->transfer_len = transfer_len;
+ __entry->hwq_id = hwq_id;
__entry->intr = intr;
__entry->lba = lba;
+ __entry->transfer_len = transfer_len;
__entry->opcode = opcode;
__entry->group_id = group_id;
),
TP_printk(
- "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x",
- show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
- __entry->tag, __entry->doorbell, __entry->transfer_len,
- __entry->intr, __entry->lba, (u32)__entry->opcode,
- str_opcode(__entry->opcode), (u32)__entry->group_id
+ "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x, hwq_id: %d",
+ show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
+ __entry->tag, __entry->doorbell, __entry->transfer_len, __entry->intr,
+ __entry->lba, (u32)__entry->opcode, str_opcode(__entry->opcode),
+ (u32)__entry->group_id, __entry->hwq_id
)
);
--
2.7.4
On 3/14/23 04:15, Ziqi Chen wrote:
> TP_printk(
> - "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x",
> - show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
> - __entry->tag, __entry->doorbell, __entry->transfer_len,
> - __entry->intr, __entry->lba, (u32)__entry->opcode,
> - str_opcode(__entry->opcode), (u32)__entry->group_id
> + "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x, hwq_id: %d",
> + show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
> + __entry->tag, __entry->doorbell, __entry->transfer_len, __entry->intr,
> + __entry->lba, (u32)__entry->opcode, str_opcode(__entry->opcode),
> + (u32)__entry->group_id, __entry->hwq_id
The alignment of the TP_printk() arguments looks odd. Please make sure
that arguments 2 and later start in the same column as the opening
double quote (") instead of one column to the right of that double quote.
Thanks,
Bart.
Hi Bart,
Sure, will fix it.
Best Regards,
Ziqi
On 3/15/2023 2:13 AM, Bart Van Assche wrote:
> On 3/14/23 04:15, Ziqi Chen wrote:
>> TP_printk(
>> - "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu,
>> opcode: 0x%x (%s), group_id: 0x%x",
>> - show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
>> - __entry->tag, __entry->doorbell, __entry->transfer_len,
>> - __entry->intr, __entry->lba, (u32)__entry->opcode,
>> - str_opcode(__entry->opcode), (u32)__entry->group_id
>> + "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu,
>> opcode: 0x%x (%s), group_id: 0x%x, hwq_id: %d",
>> + show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name),
>> + __entry->tag, __entry->doorbell, __entry->transfer_len,
>> __entry->intr,
>> + __entry->lba, (u32)__entry->opcode,
>> str_opcode(__entry->opcode),
>> + (u32)__entry->group_id, __entry->hwq_id
>
> The alignment of the TP_printk() arguments looks odd. Please make sure
> that arguments 2 and later start in the same column as the opening
> double quote (") instead of one column to the right of that double quote.
>
> Thanks,
>
> Bart.
>