forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-02-20 ea08eeccae9297f7aabd2ef7f0c2517ac4549acc
kernel/drivers/nvme/host/trace.h
....@@ -1,15 +1,7 @@
1
+/* SPDX-License-Identifier: GPL-2.0 */
12 /*
23 * NVM Express device driver tracepoints
34 * Copyright (c) 2018 Johannes Thumshirn, SUSE Linux GmbH
4
- *
5
- * This program is free software; you can redistribute it and/or modify it
6
- * under the terms and conditions of the GNU General Public License,
7
- * version 2, as published by the Free Software Foundation.
8
- *
9
- * This program is distributed in the hope it will be useful, but WITHOUT
10
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
- * more details.
135 */
146
157 #undef TRACE_SYSTEM
....@@ -24,59 +16,19 @@
2416
2517 #include "nvme.h"
2618
27
-#define nvme_admin_opcode_name(opcode) { opcode, #opcode }
28
-#define show_admin_opcode_name(val) \
29
- __print_symbolic(val, \
30
- nvme_admin_opcode_name(nvme_admin_delete_sq), \
31
- nvme_admin_opcode_name(nvme_admin_create_sq), \
32
- nvme_admin_opcode_name(nvme_admin_get_log_page), \
33
- nvme_admin_opcode_name(nvme_admin_delete_cq), \
34
- nvme_admin_opcode_name(nvme_admin_create_cq), \
35
- nvme_admin_opcode_name(nvme_admin_identify), \
36
- nvme_admin_opcode_name(nvme_admin_abort_cmd), \
37
- nvme_admin_opcode_name(nvme_admin_set_features), \
38
- nvme_admin_opcode_name(nvme_admin_get_features), \
39
- nvme_admin_opcode_name(nvme_admin_async_event), \
40
- nvme_admin_opcode_name(nvme_admin_ns_mgmt), \
41
- nvme_admin_opcode_name(nvme_admin_activate_fw), \
42
- nvme_admin_opcode_name(nvme_admin_download_fw), \
43
- nvme_admin_opcode_name(nvme_admin_ns_attach), \
44
- nvme_admin_opcode_name(nvme_admin_keep_alive), \
45
- nvme_admin_opcode_name(nvme_admin_directive_send), \
46
- nvme_admin_opcode_name(nvme_admin_directive_recv), \
47
- nvme_admin_opcode_name(nvme_admin_dbbuf), \
48
- nvme_admin_opcode_name(nvme_admin_format_nvm), \
49
- nvme_admin_opcode_name(nvme_admin_security_send), \
50
- nvme_admin_opcode_name(nvme_admin_security_recv), \
51
- nvme_admin_opcode_name(nvme_admin_sanitize_nvm))
52
-
53
-#define nvme_opcode_name(opcode) { opcode, #opcode }
54
-#define show_nvm_opcode_name(val) \
55
- __print_symbolic(val, \
56
- nvme_opcode_name(nvme_cmd_flush), \
57
- nvme_opcode_name(nvme_cmd_write), \
58
- nvme_opcode_name(nvme_cmd_read), \
59
- nvme_opcode_name(nvme_cmd_write_uncor), \
60
- nvme_opcode_name(nvme_cmd_compare), \
61
- nvme_opcode_name(nvme_cmd_write_zeroes), \
62
- nvme_opcode_name(nvme_cmd_dsm), \
63
- nvme_opcode_name(nvme_cmd_resv_register), \
64
- nvme_opcode_name(nvme_cmd_resv_report), \
65
- nvme_opcode_name(nvme_cmd_resv_acquire), \
66
- nvme_opcode_name(nvme_cmd_resv_release))
67
-
68
-#define show_opcode_name(qid, opcode) \
69
- (qid ? show_nvm_opcode_name(opcode) : show_admin_opcode_name(opcode))
70
-
7119 const char *nvme_trace_parse_admin_cmd(struct trace_seq *p, u8 opcode,
7220 u8 *cdw10);
7321 const char *nvme_trace_parse_nvm_cmd(struct trace_seq *p, u8 opcode,
7422 u8 *cdw10);
23
+const char *nvme_trace_parse_fabrics_cmd(struct trace_seq *p, u8 fctype,
24
+ u8 *spc);
7525
76
-#define parse_nvme_cmd(qid, opcode, cdw10) \
77
- (qid ? \
78
- nvme_trace_parse_nvm_cmd(p, opcode, cdw10) : \
79
- nvme_trace_parse_admin_cmd(p, opcode, cdw10))
26
+#define parse_nvme_cmd(qid, opcode, fctype, cdw10) \
27
+ ((opcode) == nvme_fabrics_command ? \
28
+ nvme_trace_parse_fabrics_cmd(p, fctype, cdw10) : \
29
+ ((qid) ? \
30
+ nvme_trace_parse_nvm_cmd(p, opcode, cdw10) : \
31
+ nvme_trace_parse_admin_cmd(p, opcode, cdw10)))
8032
8133 const char *nvme_trace_disk_name(struct trace_seq *p, char *name);
8234 #define __print_disk_name(name) \
....@@ -101,9 +53,10 @@
10153 __field(int, qid)
10254 __field(u8, opcode)
10355 __field(u8, flags)
56
+ __field(u8, fctype)
10457 __field(u16, cid)
10558 __field(u32, nsid)
106
- __field(u64, metadata)
59
+ __field(bool, metadata)
10760 __array(u8, cdw10, 24)
10861 ),
10962 TP_fast_assign(
....@@ -113,17 +66,20 @@
11366 __entry->flags = cmd->common.flags;
11467 __entry->cid = cmd->common.command_id;
11568 __entry->nsid = le32_to_cpu(cmd->common.nsid);
116
- __entry->metadata = le64_to_cpu(cmd->common.metadata);
69
+ __entry->metadata = !!blk_integrity_rq(req);
70
+ __entry->fctype = cmd->fabrics.fctype;
11771 __assign_disk_name(__entry->disk, req->rq_disk);
118
- memcpy(__entry->cdw10, cmd->common.cdw10,
119
- sizeof(__entry->cdw10));
72
+ memcpy(__entry->cdw10, &cmd->common.cdw10,
73
+ sizeof(__entry->cdw10));
12074 ),
121
- TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)",
75
+ TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%x, cmd=(%s %s)",
12276 __entry->ctrl_id, __print_disk_name(__entry->disk),
12377 __entry->qid, __entry->cid, __entry->nsid,
12478 __entry->flags, __entry->metadata,
125
- show_opcode_name(__entry->qid, __entry->opcode),
126
- parse_nvme_cmd(__entry->qid, __entry->opcode, __entry->cdw10))
79
+ show_opcode_name(__entry->qid, __entry->opcode,
80
+ __entry->fctype),
81
+ parse_nvme_cmd(__entry->qid, __entry->opcode,
82
+ __entry->fctype, __entry->cdw10))
12783 );
12884
12985 TRACE_EVENT(nvme_complete_rq,
....@@ -142,20 +98,69 @@
14298 TP_fast_assign(
14399 __entry->ctrl_id = nvme_req(req)->ctrl->instance;
144100 __entry->qid = nvme_req_qid(req);
145
- __entry->cid = req->tag;
101
+ __entry->cid = nvme_req(req)->cmd->common.command_id;
146102 __entry->result = le64_to_cpu(nvme_req(req)->result.u64);
147103 __entry->retries = nvme_req(req)->retries;
148104 __entry->flags = nvme_req(req)->flags;
149105 __entry->status = nvme_req(req)->status;
150106 __assign_disk_name(__entry->disk, req->rq_disk);
151107 ),
152
- TP_printk("nvme%d: %sqid=%d, cmdid=%u, res=%llu, retries=%u, flags=0x%x, status=%u",
108
+ TP_printk("nvme%d: %sqid=%d, cmdid=%u, res=%#llx, retries=%u, flags=0x%x, status=%#x",
153109 __entry->ctrl_id, __print_disk_name(__entry->disk),
154110 __entry->qid, __entry->cid, __entry->result,
155111 __entry->retries, __entry->flags, __entry->status)
156112
157113 );
158114
115
+#define aer_name(aer) { aer, #aer }
116
+
117
+TRACE_EVENT(nvme_async_event,
118
+ TP_PROTO(struct nvme_ctrl *ctrl, u32 result),
119
+ TP_ARGS(ctrl, result),
120
+ TP_STRUCT__entry(
121
+ __field(int, ctrl_id)
122
+ __field(u32, result)
123
+ ),
124
+ TP_fast_assign(
125
+ __entry->ctrl_id = ctrl->instance;
126
+ __entry->result = result;
127
+ ),
128
+ TP_printk("nvme%d: NVME_AEN=%#08x [%s]",
129
+ __entry->ctrl_id, __entry->result,
130
+ __print_symbolic(__entry->result & 0x7,
131
+ aer_name(NVME_AER_ERROR),
132
+ aer_name(NVME_AER_SMART),
133
+ aer_name(NVME_AER_NOTICE),
134
+ aer_name(NVME_AER_CSS),
135
+ aer_name(NVME_AER_VS))
136
+ )
137
+);
138
+
139
+#undef aer_name
140
+
141
+TRACE_EVENT(nvme_sq,
142
+ TP_PROTO(struct request *req, __le16 sq_head, int sq_tail),
143
+ TP_ARGS(req, sq_head, sq_tail),
144
+ TP_STRUCT__entry(
145
+ __field(int, ctrl_id)
146
+ __array(char, disk, DISK_NAME_LEN)
147
+ __field(int, qid)
148
+ __field(u16, sq_head)
149
+ __field(u16, sq_tail)
150
+ ),
151
+ TP_fast_assign(
152
+ __entry->ctrl_id = nvme_req(req)->ctrl->instance;
153
+ __assign_disk_name(__entry->disk, req->rq_disk);
154
+ __entry->qid = nvme_req_qid(req);
155
+ __entry->sq_head = le16_to_cpu(sq_head);
156
+ __entry->sq_tail = sq_tail;
157
+ ),
158
+ TP_printk("nvme%d: %sqid=%d, head=%u, tail=%u",
159
+ __entry->ctrl_id, __print_disk_name(__entry->disk),
160
+ __entry->qid, __entry->sq_head, __entry->sq_tail
161
+ )
162
+);
163
+
159164 #endif /* _TRACE_NVME_H */
160165
161166 #undef TRACE_INCLUDE_PATH