13d030e41SJohannes Thumshirn /* 23d030e41SJohannes Thumshirn * NVM Express device driver tracepoints 33d030e41SJohannes Thumshirn * Copyright (c) 2018 Johannes Thumshirn, SUSE Linux GmbH 43d030e41SJohannes Thumshirn * 53d030e41SJohannes Thumshirn * This program is free software; you can redistribute it and/or modify it 63d030e41SJohannes Thumshirn * under the terms and conditions of the GNU General Public License, 73d030e41SJohannes Thumshirn * version 2, as published by the Free Software Foundation. 83d030e41SJohannes Thumshirn * 93d030e41SJohannes Thumshirn * This program is distributed in the hope it will be useful, but WITHOUT 103d030e41SJohannes Thumshirn * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 113d030e41SJohannes Thumshirn * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 123d030e41SJohannes Thumshirn * more details. 133d030e41SJohannes Thumshirn */ 143d030e41SJohannes Thumshirn 153d030e41SJohannes Thumshirn #undef TRACE_SYSTEM 163d030e41SJohannes Thumshirn #define TRACE_SYSTEM nvme 173d030e41SJohannes Thumshirn 183d030e41SJohannes Thumshirn #if !defined(_TRACE_NVME_H) || defined(TRACE_HEADER_MULTI_READ) 193d030e41SJohannes Thumshirn #define _TRACE_NVME_H 203d030e41SJohannes Thumshirn 213d030e41SJohannes Thumshirn #include <linux/nvme.h> 223d030e41SJohannes Thumshirn #include <linux/tracepoint.h> 233d030e41SJohannes Thumshirn #include <linux/trace_seq.h> 243d030e41SJohannes Thumshirn 253d030e41SJohannes Thumshirn #include "nvme.h" 263d030e41SJohannes Thumshirn 273d030e41SJohannes Thumshirn #define nvme_admin_opcode_name(opcode) { opcode, #opcode } 283d030e41SJohannes Thumshirn #define show_admin_opcode_name(val) \ 293d030e41SJohannes Thumshirn __print_symbolic(val, \ 303d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_delete_sq), \ 313d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_create_sq), \ 323d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_get_log_page), \ 333d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_delete_cq), \ 343d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_create_cq), \ 353d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_identify), \ 363d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_abort_cmd), \ 373d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_set_features), \ 383d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_get_features), \ 393d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_async_event), \ 403d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_ns_mgmt), \ 413d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_activate_fw), \ 423d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_download_fw), \ 433d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_ns_attach), \ 443d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_keep_alive), \ 453d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_directive_send), \ 463d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_directive_recv), \ 473d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_dbbuf), \ 483d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_format_nvm), \ 493d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_security_send), \ 503d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_security_recv), \ 513d030e41SJohannes Thumshirn nvme_admin_opcode_name(nvme_admin_sanitize_nvm)) 523d030e41SJohannes Thumshirn 533d030e41SJohannes Thumshirn const char *nvme_trace_parse_admin_cmd(struct trace_seq *p, u8 opcode, 543d030e41SJohannes Thumshirn u8 *cdw10); 553d030e41SJohannes Thumshirn #define __parse_nvme_admin_cmd(opcode, cdw10) \ 563d030e41SJohannes Thumshirn nvme_trace_parse_admin_cmd(p, opcode, cdw10) 573d030e41SJohannes Thumshirn 583d030e41SJohannes Thumshirn #define nvme_opcode_name(opcode) { opcode, #opcode } 593d030e41SJohannes Thumshirn #define show_opcode_name(val) \ 603d030e41SJohannes Thumshirn __print_symbolic(val, \ 613d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_flush), \ 623d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_write), \ 633d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_read), \ 643d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_write_uncor), \ 653d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_compare), \ 663d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_write_zeroes), \ 673d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_dsm), \ 683d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_resv_register), \ 693d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_resv_report), \ 703d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_resv_acquire), \ 713d030e41SJohannes Thumshirn nvme_opcode_name(nvme_cmd_resv_release)) 723d030e41SJohannes Thumshirn 733d030e41SJohannes Thumshirn const char *nvme_trace_parse_nvm_cmd(struct trace_seq *p, u8 opcode, 743d030e41SJohannes Thumshirn u8 *cdw10); 753d030e41SJohannes Thumshirn #define __parse_nvme_cmd(opcode, cdw10) \ 763d030e41SJohannes Thumshirn nvme_trace_parse_nvm_cmd(p, opcode, cdw10) 773d030e41SJohannes Thumshirn 783d030e41SJohannes Thumshirn TRACE_EVENT(nvme_setup_admin_cmd, 793d030e41SJohannes Thumshirn TP_PROTO(struct nvme_command *cmd), 803d030e41SJohannes Thumshirn TP_ARGS(cmd), 813d030e41SJohannes Thumshirn TP_STRUCT__entry( 823d030e41SJohannes Thumshirn __field(u8, opcode) 833d030e41SJohannes Thumshirn __field(u8, flags) 843d030e41SJohannes Thumshirn __field(u16, cid) 853d030e41SJohannes Thumshirn __field(u64, metadata) 863d030e41SJohannes Thumshirn __array(u8, cdw10, 24) 873d030e41SJohannes Thumshirn ), 883d030e41SJohannes Thumshirn TP_fast_assign( 893d030e41SJohannes Thumshirn __entry->opcode = cmd->common.opcode; 903d030e41SJohannes Thumshirn __entry->flags = cmd->common.flags; 913d030e41SJohannes Thumshirn __entry->cid = cmd->common.command_id; 923d030e41SJohannes Thumshirn __entry->metadata = le64_to_cpu(cmd->common.metadata); 933d030e41SJohannes Thumshirn memcpy(__entry->cdw10, cmd->common.cdw10, 943d030e41SJohannes Thumshirn sizeof(__entry->cdw10)); 953d030e41SJohannes Thumshirn ), 963d030e41SJohannes Thumshirn TP_printk(" cmdid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)", 973d030e41SJohannes Thumshirn __entry->cid, __entry->flags, __entry->metadata, 983d030e41SJohannes Thumshirn show_admin_opcode_name(__entry->opcode), 993d030e41SJohannes Thumshirn __parse_nvme_admin_cmd(__entry->opcode, __entry->cdw10)) 1003d030e41SJohannes Thumshirn ); 1013d030e41SJohannes Thumshirn 1023d030e41SJohannes Thumshirn 1033d030e41SJohannes Thumshirn TRACE_EVENT(nvme_setup_nvm_cmd, 1043d030e41SJohannes Thumshirn TP_PROTO(int qid, struct nvme_command *cmd), 1053d030e41SJohannes Thumshirn TP_ARGS(qid, cmd), 1063d030e41SJohannes Thumshirn TP_STRUCT__entry( 1073d030e41SJohannes Thumshirn __field(int, qid) 1083d030e41SJohannes Thumshirn __field(u8, opcode) 1093d030e41SJohannes Thumshirn __field(u8, flags) 1103d030e41SJohannes Thumshirn __field(u16, cid) 1113d030e41SJohannes Thumshirn __field(u32, nsid) 1123d030e41SJohannes Thumshirn __field(u64, metadata) 1133d030e41SJohannes Thumshirn __array(u8, cdw10, 24) 1143d030e41SJohannes Thumshirn ), 1153d030e41SJohannes Thumshirn TP_fast_assign( 1163d030e41SJohannes Thumshirn __entry->qid = qid; 1173d030e41SJohannes Thumshirn __entry->opcode = cmd->common.opcode; 1183d030e41SJohannes Thumshirn __entry->flags = cmd->common.flags; 1193d030e41SJohannes Thumshirn __entry->cid = cmd->common.command_id; 1203d030e41SJohannes Thumshirn __entry->nsid = le32_to_cpu(cmd->common.nsid); 1213d030e41SJohannes Thumshirn __entry->metadata = le64_to_cpu(cmd->common.metadata); 1223d030e41SJohannes Thumshirn memcpy(__entry->cdw10, cmd->common.cdw10, 1233d030e41SJohannes Thumshirn sizeof(__entry->cdw10)); 1243d030e41SJohannes Thumshirn ), 1253d030e41SJohannes Thumshirn TP_printk("qid=%d, nsid=%u, cmdid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)", 1263d030e41SJohannes Thumshirn __entry->qid, __entry->nsid, __entry->cid, 1273d030e41SJohannes Thumshirn __entry->flags, __entry->metadata, 1283d030e41SJohannes Thumshirn show_opcode_name(__entry->opcode), 1293d030e41SJohannes Thumshirn __parse_nvme_cmd(__entry->opcode, __entry->cdw10)) 1303d030e41SJohannes Thumshirn ); 1313d030e41SJohannes Thumshirn 1323d030e41SJohannes Thumshirn #endif /* _TRACE_NVME_H */ 1333d030e41SJohannes Thumshirn 1343d030e41SJohannes Thumshirn #undef TRACE_INCLUDE_PATH 1353d030e41SJohannes Thumshirn #define TRACE_INCLUDE_PATH . 1363d030e41SJohannes Thumshirn #undef TRACE_INCLUDE_FILE 1373d030e41SJohannes Thumshirn #define TRACE_INCLUDE_FILE trace 1383d030e41SJohannes Thumshirn 1393d030e41SJohannes Thumshirn /* This part must be outside protection */ 1403d030e41SJohannes Thumshirn #include <trace/define_trace.h> 141