]>
git.proxmox.com Git - mirror_ubuntu-kernels.git/blob - drivers/nvme/host/trace.c
1 // SPDX-License-Identifier: GPL-2.0
3 * NVM Express device driver tracepoints
4 * Copyright (c) 2018 Johannes Thumshirn, SUSE Linux GmbH
7 #include <asm/unaligned.h>
10 static const char *nvme_trace_create_sq(struct trace_seq
*p
, u8
*cdw10
)
12 const char *ret
= trace_seq_buffer_ptr(p
);
13 u16 sqid
= get_unaligned_le16(cdw10
);
14 u16 qsize
= get_unaligned_le16(cdw10
+ 2);
15 u16 sq_flags
= get_unaligned_le16(cdw10
+ 4);
16 u16 cqid
= get_unaligned_le16(cdw10
+ 6);
19 trace_seq_printf(p
, "sqid=%u, qsize=%u, sq_flags=0x%x, cqid=%u",
20 sqid
, qsize
, sq_flags
, cqid
);
26 static const char *nvme_trace_create_cq(struct trace_seq
*p
, u8
*cdw10
)
28 const char *ret
= trace_seq_buffer_ptr(p
);
29 u16 cqid
= get_unaligned_le16(cdw10
);
30 u16 qsize
= get_unaligned_le16(cdw10
+ 2);
31 u16 cq_flags
= get_unaligned_le16(cdw10
+ 4);
32 u16 irq_vector
= get_unaligned_le16(cdw10
+ 6);
34 trace_seq_printf(p
, "cqid=%u, qsize=%u, cq_flags=0x%x, irq_vector=%u",
35 cqid
, qsize
, cq_flags
, irq_vector
);
41 static const char *nvme_trace_admin_identify(struct trace_seq
*p
, u8
*cdw10
)
43 const char *ret
= trace_seq_buffer_ptr(p
);
45 u16 ctrlid
= get_unaligned_le16(cdw10
+ 2);
47 trace_seq_printf(p
, "cns=%u, ctrlid=%u", cns
, ctrlid
);
53 static const char *nvme_trace_admin_get_features(struct trace_seq
*p
,
56 const char *ret
= trace_seq_buffer_ptr(p
);
58 u8 sel
= cdw10
[1] & 0x7;
59 u32 cdw11
= get_unaligned_le32(cdw10
+ 4);
61 trace_seq_printf(p
, "fid=0x%x sel=0x%x cdw11=0x%x", fid
, sel
, cdw11
);
67 static const char *nvme_trace_read_write(struct trace_seq
*p
, u8
*cdw10
)
69 const char *ret
= trace_seq_buffer_ptr(p
);
70 u64 slba
= get_unaligned_le64(cdw10
);
71 u16 length
= get_unaligned_le16(cdw10
+ 8);
72 u16 control
= get_unaligned_le16(cdw10
+ 10);
73 u32 dsmgmt
= get_unaligned_le32(cdw10
+ 12);
74 u32 reftag
= get_unaligned_le32(cdw10
+ 16);
77 "slba=%llu, len=%u, ctrl=0x%x, dsmgmt=%u, reftag=%u",
78 slba
, length
, control
, dsmgmt
, reftag
);
84 static const char *nvme_trace_dsm(struct trace_seq
*p
, u8
*cdw10
)
86 const char *ret
= trace_seq_buffer_ptr(p
);
88 trace_seq_printf(p
, "nr=%u, attributes=%u",
89 get_unaligned_le32(cdw10
),
90 get_unaligned_le32(cdw10
+ 4));
96 static const char *nvme_trace_common(struct trace_seq
*p
, u8
*cdw10
)
98 const char *ret
= trace_seq_buffer_ptr(p
);
100 trace_seq_printf(p
, "cdw10=%*ph", 24, cdw10
);
101 trace_seq_putc(p
, 0);
106 const char *nvme_trace_parse_admin_cmd(struct trace_seq
*p
,
107 u8 opcode
, u8
*cdw10
)
110 case nvme_admin_create_sq
:
111 return nvme_trace_create_sq(p
, cdw10
);
112 case nvme_admin_create_cq
:
113 return nvme_trace_create_cq(p
, cdw10
);
114 case nvme_admin_identify
:
115 return nvme_trace_admin_identify(p
, cdw10
);
116 case nvme_admin_get_features
:
117 return nvme_trace_admin_get_features(p
, cdw10
);
119 return nvme_trace_common(p
, cdw10
);
123 const char *nvme_trace_parse_nvm_cmd(struct trace_seq
*p
,
124 u8 opcode
, u8
*cdw10
)
129 case nvme_cmd_write_zeroes
:
130 return nvme_trace_read_write(p
, cdw10
);
132 return nvme_trace_dsm(p
, cdw10
);
134 return nvme_trace_common(p
, cdw10
);
138 const char *nvme_trace_disk_name(struct trace_seq
*p
, char *name
)
140 const char *ret
= trace_seq_buffer_ptr(p
);
143 trace_seq_printf(p
, "disk=%s, ", name
);
144 trace_seq_putc(p
, 0);
148 EXPORT_SYMBOL_GPL(nvme_trace_disk_name
);
150 EXPORT_TRACEPOINT_SYMBOL_GPL(nvme_sq
);