nvme_admin_opcode_name(nvme_admin_security_recv),       \
                nvme_admin_opcode_name(nvme_admin_sanitize_nvm))
 
-const char *nvme_trace_parse_admin_cmd(struct trace_seq *p, u8 opcode,
-                                      u8 *cdw10);
-#define __parse_nvme_admin_cmd(opcode, cdw10) \
-       nvme_trace_parse_admin_cmd(p, opcode, cdw10)
-
 #define nvme_opcode_name(opcode)       { opcode, #opcode }
-#define show_opcode_name(val)                                  \
+#define show_nvm_opcode_name(val)                              \
        __print_symbolic(val,                                   \
                nvme_opcode_name(nvme_cmd_flush),               \
                nvme_opcode_name(nvme_cmd_write),               \
                nvme_opcode_name(nvme_cmd_resv_acquire),        \
                nvme_opcode_name(nvme_cmd_resv_release))
 
-const char *nvme_trace_parse_nvm_cmd(struct trace_seq *p, u8 opcode,
-                                    u8 *cdw10);
-#define __parse_nvme_cmd(opcode, cdw10) \
-       nvme_trace_parse_nvm_cmd(p, opcode, cdw10)
+#define show_opcode_name(qid, opcode)                                  \
+       (qid ? show_nvm_opcode_name(opcode) : show_admin_opcode_name(opcode))
 
-TRACE_EVENT(nvme_setup_admin_cmd,
-           TP_PROTO(struct nvme_command *cmd),
-           TP_ARGS(cmd),
-           TP_STRUCT__entry(
-                   __field(u8, opcode)
-                   __field(u8, flags)
-                   __field(u16, cid)
-                   __field(u64, metadata)
-                   __array(u8, cdw10, 24)
-           ),
-           TP_fast_assign(
-                   __entry->opcode = cmd->common.opcode;
-                   __entry->flags = cmd->common.flags;
-                   __entry->cid = cmd->common.command_id;
-                   __entry->metadata = le64_to_cpu(cmd->common.metadata);
-                   memcpy(__entry->cdw10, cmd->common.cdw10,
-                          sizeof(__entry->cdw10));
-           ),
-           TP_printk(" cmdid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)",
-                     __entry->cid, __entry->flags, __entry->metadata,
-                     show_admin_opcode_name(__entry->opcode),
-                     __parse_nvme_admin_cmd(__entry->opcode, __entry->cdw10))
-);
+const char *nvme_trace_parse_admin_cmd(struct trace_seq *p, u8 opcode,
+               u8 *cdw10);
+const char *nvme_trace_parse_nvm_cmd(struct trace_seq *p, u8 opcode,
+               u8 *cdw10);
 
+#define parse_nvme_cmd(qid, opcode, cdw10)                     \
+       (qid ?                                                  \
+        nvme_trace_parse_nvm_cmd(p, opcode, cdw10) :           \
+        nvme_trace_parse_admin_cmd(p, opcode, cdw10))
 
-TRACE_EVENT(nvme_setup_nvm_cmd,
-           TP_PROTO(int qid, struct nvme_command *cmd),
-           TP_ARGS(qid, cmd),
+TRACE_EVENT(nvme_setup_cmd,
+           TP_PROTO(struct request *req, struct nvme_command *cmd),
+           TP_ARGS(req, cmd),
            TP_STRUCT__entry(
-                   __field(int, qid)
-                   __field(u8, opcode)
-                   __field(u8, flags)
-                   __field(u16, cid)
-                   __field(u32, nsid)
-                   __field(u64, metadata)
-                   __array(u8, cdw10, 24)
+               __field(int, qid)
+               __field(u8, opcode)
+               __field(u8, flags)
+               __field(u16, cid)
+               __field(u32, nsid)
+               __field(u64, metadata)
+               __array(u8, cdw10, 24)
            ),
            TP_fast_assign(
-                   __entry->qid = qid;
-                   __entry->opcode = cmd->common.opcode;
-                   __entry->flags = cmd->common.flags;
-                   __entry->cid = cmd->common.command_id;
-                   __entry->nsid = le32_to_cpu(cmd->common.nsid);
-                   __entry->metadata = le64_to_cpu(cmd->common.metadata);
-                   memcpy(__entry->cdw10, cmd->common.cdw10,
-                          sizeof(__entry->cdw10));
+               __entry->qid = nvme_req_qid(req);
+               __entry->opcode = cmd->common.opcode;
+               __entry->flags = cmd->common.flags;
+               __entry->cid = cmd->common.command_id;
+               __entry->nsid = le32_to_cpu(cmd->common.nsid);
+               __entry->metadata = le64_to_cpu(cmd->common.metadata);
+               memcpy(__entry->cdw10, cmd->common.cdw10,
+                      sizeof(__entry->cdw10));
            ),
-           TP_printk("qid=%d, nsid=%u, cmdid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)",
-                     __entry->qid, __entry->nsid, __entry->cid,
+           TP_printk("qid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)",
+                     __entry->qid, __entry->cid, __entry->nsid,
                      __entry->flags, __entry->metadata,
-                     show_opcode_name(__entry->opcode),
-                     __parse_nvme_cmd(__entry->opcode, __entry->cdw10))
+                     show_opcode_name(__entry->qid, __entry->opcode),
+                     parse_nvme_cmd(__entry->qid, __entry->opcode, __entry->cdw10))
 );
 
 TRACE_EVENT(nvme_complete_rq,
            TP_PROTO(struct request *req),
            TP_ARGS(req),
            TP_STRUCT__entry(
-                   __field(int, qid)
-                   __field(int, cid)
-                   __field(u64, result)
-                   __field(u8, retries)
-                   __field(u8, flags)
-                   __field(u16, status)
+               __field(int, qid)
+               __field(int, cid)
+               __field(u64, result)
+               __field(u8, retries)
+               __field(u8, flags)
+               __field(u16, status)
            ),
            TP_fast_assign(
-                   __entry->qid = req->q->id;
-                   __entry->cid = req->tag;
-                   __entry->result = le64_to_cpu(nvme_req(req)->result.u64);
-                   __entry->retries = nvme_req(req)->retries;
-                   __entry->flags = nvme_req(req)->flags;
-                   __entry->status = nvme_req(req)->status;
+               __entry->qid = nvme_req_qid(req);
+               __entry->cid = req->tag;
+               __entry->result = le64_to_cpu(nvme_req(req)->result.u64);
+               __entry->retries = nvme_req(req)->retries;
+               __entry->flags = nvme_req(req)->flags;
+               __entry->status = nvme_req(req)->status;
            ),
            TP_printk("qid=%d, cmdid=%u, res=%llu, retries=%u, flags=0x%x, status=%u",
                      __entry->qid, __entry->cid, __entry->result,