1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2bf816235SKei Tokunaga #undef TRACE_SYSTEM 3bf816235SKei Tokunaga #define TRACE_SYSTEM scsi 4bf816235SKei Tokunaga 5bf816235SKei Tokunaga #if !defined(_TRACE_SCSI_H) || defined(TRACE_HEADER_MULTI_READ) 6bf816235SKei Tokunaga #define _TRACE_SCSI_H 7bf816235SKei Tokunaga 8bf816235SKei Tokunaga #include <scsi/scsi_cmnd.h> 9bf816235SKei Tokunaga #include <scsi/scsi_host.h> 10bf816235SKei Tokunaga #include <linux/tracepoint.h> 11bf816235SKei Tokunaga #include <linux/trace_seq.h> 12bf816235SKei Tokunaga 13bf816235SKei Tokunaga #define scsi_opcode_name(opcode) { opcode, #opcode } 14bf816235SKei Tokunaga #define show_opcode_name(val) \ 15bf816235SKei Tokunaga __print_symbolic(val, \ 16bf816235SKei Tokunaga scsi_opcode_name(TEST_UNIT_READY), \ 17bf816235SKei Tokunaga scsi_opcode_name(REZERO_UNIT), \ 18bf816235SKei Tokunaga scsi_opcode_name(REQUEST_SENSE), \ 19bf816235SKei Tokunaga scsi_opcode_name(FORMAT_UNIT), \ 20bf816235SKei Tokunaga scsi_opcode_name(READ_BLOCK_LIMITS), \ 21bf816235SKei Tokunaga scsi_opcode_name(REASSIGN_BLOCKS), \ 22bf816235SKei Tokunaga scsi_opcode_name(INITIALIZE_ELEMENT_STATUS), \ 23bf816235SKei Tokunaga scsi_opcode_name(READ_6), \ 24bf816235SKei Tokunaga scsi_opcode_name(WRITE_6), \ 25bf816235SKei Tokunaga scsi_opcode_name(SEEK_6), \ 26bf816235SKei Tokunaga scsi_opcode_name(READ_REVERSE), \ 27bf816235SKei Tokunaga scsi_opcode_name(WRITE_FILEMARKS), \ 28bf816235SKei Tokunaga scsi_opcode_name(SPACE), \ 29bf816235SKei Tokunaga scsi_opcode_name(INQUIRY), \ 30bf816235SKei Tokunaga scsi_opcode_name(RECOVER_BUFFERED_DATA), \ 31bf816235SKei Tokunaga scsi_opcode_name(MODE_SELECT), \ 32bf816235SKei Tokunaga scsi_opcode_name(RESERVE), \ 33bf816235SKei Tokunaga scsi_opcode_name(RELEASE), \ 34bf816235SKei Tokunaga scsi_opcode_name(COPY), \ 35bf816235SKei Tokunaga scsi_opcode_name(ERASE), \ 36bf816235SKei Tokunaga scsi_opcode_name(MODE_SENSE), \ 37bf816235SKei Tokunaga scsi_opcode_name(START_STOP), \ 38bf816235SKei Tokunaga scsi_opcode_name(RECEIVE_DIAGNOSTIC), \ 39bf816235SKei Tokunaga scsi_opcode_name(SEND_DIAGNOSTIC), \ 40bf816235SKei Tokunaga scsi_opcode_name(ALLOW_MEDIUM_REMOVAL), \ 41bf816235SKei Tokunaga scsi_opcode_name(SET_WINDOW), \ 42bf816235SKei Tokunaga scsi_opcode_name(READ_CAPACITY), \ 43bf816235SKei Tokunaga scsi_opcode_name(READ_10), \ 44bf816235SKei Tokunaga scsi_opcode_name(WRITE_10), \ 45bf816235SKei Tokunaga scsi_opcode_name(SEEK_10), \ 46bf816235SKei Tokunaga scsi_opcode_name(POSITION_TO_ELEMENT), \ 47bf816235SKei Tokunaga scsi_opcode_name(WRITE_VERIFY), \ 48bf816235SKei Tokunaga scsi_opcode_name(VERIFY), \ 49bf816235SKei Tokunaga scsi_opcode_name(SEARCH_HIGH), \ 50bf816235SKei Tokunaga scsi_opcode_name(SEARCH_EQUAL), \ 51bf816235SKei Tokunaga scsi_opcode_name(SEARCH_LOW), \ 52bf816235SKei Tokunaga scsi_opcode_name(SET_LIMITS), \ 53bf816235SKei Tokunaga scsi_opcode_name(PRE_FETCH), \ 54bf816235SKei Tokunaga scsi_opcode_name(READ_POSITION), \ 55bf816235SKei Tokunaga scsi_opcode_name(SYNCHRONIZE_CACHE), \ 56bf816235SKei Tokunaga scsi_opcode_name(LOCK_UNLOCK_CACHE), \ 57bf816235SKei Tokunaga scsi_opcode_name(READ_DEFECT_DATA), \ 58bf816235SKei Tokunaga scsi_opcode_name(MEDIUM_SCAN), \ 59bf816235SKei Tokunaga scsi_opcode_name(COMPARE), \ 60bf816235SKei Tokunaga scsi_opcode_name(COPY_VERIFY), \ 61bf816235SKei Tokunaga scsi_opcode_name(WRITE_BUFFER), \ 62bf816235SKei Tokunaga scsi_opcode_name(READ_BUFFER), \ 63bf816235SKei Tokunaga scsi_opcode_name(UPDATE_BLOCK), \ 64bf816235SKei Tokunaga scsi_opcode_name(READ_LONG), \ 65bf816235SKei Tokunaga scsi_opcode_name(WRITE_LONG), \ 66bf816235SKei Tokunaga scsi_opcode_name(CHANGE_DEFINITION), \ 67bf816235SKei Tokunaga scsi_opcode_name(WRITE_SAME), \ 68bf816235SKei Tokunaga scsi_opcode_name(UNMAP), \ 69bf816235SKei Tokunaga scsi_opcode_name(READ_TOC), \ 70bf816235SKei Tokunaga scsi_opcode_name(LOG_SELECT), \ 71bf816235SKei Tokunaga scsi_opcode_name(LOG_SENSE), \ 72bf816235SKei Tokunaga scsi_opcode_name(XDWRITEREAD_10), \ 73bf816235SKei Tokunaga scsi_opcode_name(MODE_SELECT_10), \ 74bf816235SKei Tokunaga scsi_opcode_name(RESERVE_10), \ 75bf816235SKei Tokunaga scsi_opcode_name(RELEASE_10), \ 76bf816235SKei Tokunaga scsi_opcode_name(MODE_SENSE_10), \ 77bf816235SKei Tokunaga scsi_opcode_name(PERSISTENT_RESERVE_IN), \ 78bf816235SKei Tokunaga scsi_opcode_name(PERSISTENT_RESERVE_OUT), \ 79bf816235SKei Tokunaga scsi_opcode_name(VARIABLE_LENGTH_CMD), \ 80bf816235SKei Tokunaga scsi_opcode_name(REPORT_LUNS), \ 81bf816235SKei Tokunaga scsi_opcode_name(MAINTENANCE_IN), \ 82bf816235SKei Tokunaga scsi_opcode_name(MAINTENANCE_OUT), \ 83bf816235SKei Tokunaga scsi_opcode_name(MOVE_MEDIUM), \ 84bf816235SKei Tokunaga scsi_opcode_name(EXCHANGE_MEDIUM), \ 85bf816235SKei Tokunaga scsi_opcode_name(READ_12), \ 86bf816235SKei Tokunaga scsi_opcode_name(WRITE_12), \ 87bf816235SKei Tokunaga scsi_opcode_name(WRITE_VERIFY_12), \ 88bf816235SKei Tokunaga scsi_opcode_name(SEARCH_HIGH_12), \ 89bf816235SKei Tokunaga scsi_opcode_name(SEARCH_EQUAL_12), \ 90bf816235SKei Tokunaga scsi_opcode_name(SEARCH_LOW_12), \ 91bf816235SKei Tokunaga scsi_opcode_name(READ_ELEMENT_STATUS), \ 92bf816235SKei Tokunaga scsi_opcode_name(SEND_VOLUME_TAG), \ 93bf816235SKei Tokunaga scsi_opcode_name(WRITE_LONG_2), \ 94bf816235SKei Tokunaga scsi_opcode_name(READ_16), \ 95bf816235SKei Tokunaga scsi_opcode_name(WRITE_16), \ 96bf816235SKei Tokunaga scsi_opcode_name(VERIFY_16), \ 97bf816235SKei Tokunaga scsi_opcode_name(WRITE_SAME_16), \ 980008f1e7SHannes Reinecke scsi_opcode_name(ZBC_OUT), \ 990008f1e7SHannes Reinecke scsi_opcode_name(ZBC_IN), \ 100eb846d9fSHannes Reinecke scsi_opcode_name(SERVICE_ACTION_IN_16), \ 101bf816235SKei Tokunaga scsi_opcode_name(READ_32), \ 102bf816235SKei Tokunaga scsi_opcode_name(WRITE_32), \ 103bf816235SKei Tokunaga scsi_opcode_name(WRITE_SAME_32), \ 104bf816235SKei Tokunaga scsi_opcode_name(ATA_16), \ 105bf816235SKei Tokunaga scsi_opcode_name(ATA_12)) 106bf816235SKei Tokunaga 107bf816235SKei Tokunaga #define scsi_hostbyte_name(result) { result, #result } 108bf816235SKei Tokunaga #define show_hostbyte_name(val) \ 109bf816235SKei Tokunaga __print_symbolic(val, \ 110bf816235SKei Tokunaga scsi_hostbyte_name(DID_OK), \ 111bf816235SKei Tokunaga scsi_hostbyte_name(DID_NO_CONNECT), \ 112bf816235SKei Tokunaga scsi_hostbyte_name(DID_BUS_BUSY), \ 113bf816235SKei Tokunaga scsi_hostbyte_name(DID_TIME_OUT), \ 114bf816235SKei Tokunaga scsi_hostbyte_name(DID_BAD_TARGET), \ 115bf816235SKei Tokunaga scsi_hostbyte_name(DID_ABORT), \ 116bf816235SKei Tokunaga scsi_hostbyte_name(DID_PARITY), \ 117bf816235SKei Tokunaga scsi_hostbyte_name(DID_ERROR), \ 118bf816235SKei Tokunaga scsi_hostbyte_name(DID_RESET), \ 119bf816235SKei Tokunaga scsi_hostbyte_name(DID_BAD_INTR), \ 120bf816235SKei Tokunaga scsi_hostbyte_name(DID_PASSTHROUGH), \ 121bf816235SKei Tokunaga scsi_hostbyte_name(DID_SOFT_ERROR), \ 122bf816235SKei Tokunaga scsi_hostbyte_name(DID_IMM_RETRY), \ 123bf816235SKei Tokunaga scsi_hostbyte_name(DID_REQUEUE), \ 124bf816235SKei Tokunaga scsi_hostbyte_name(DID_TRANSPORT_DISRUPTED), \ 125bf816235SKei Tokunaga scsi_hostbyte_name(DID_TRANSPORT_FAILFAST)) 126bf816235SKei Tokunaga 127bf816235SKei Tokunaga #define scsi_statusbyte_name(result) { result, #result } 128bf816235SKei Tokunaga #define show_statusbyte_name(val) \ 129bf816235SKei Tokunaga __print_symbolic(val, \ 130bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_GOOD), \ 131bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_CHECK_CONDITION), \ 132bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_CONDITION_MET), \ 133bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_BUSY), \ 134bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_INTERMEDIATE), \ 135bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_INTERMEDIATE_CONDITION_MET), \ 136bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_RESERVATION_CONFLICT), \ 137bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_COMMAND_TERMINATED), \ 138bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_TASK_SET_FULL), \ 139bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_ACA_ACTIVE), \ 140bf816235SKei Tokunaga scsi_statusbyte_name(SAM_STAT_TASK_ABORTED)) 141bf816235SKei Tokunaga 14272f7d322SMartin K. Petersen #define scsi_prot_op_name(result) { result, #result } 14372f7d322SMartin K. Petersen #define show_prot_op_name(val) \ 14472f7d322SMartin K. Petersen __print_symbolic(val, \ 14572f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_NORMAL), \ 14672f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_READ_INSERT), \ 14772f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_WRITE_STRIP), \ 14872f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_READ_STRIP), \ 14972f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_WRITE_INSERT), \ 15072f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_READ_PASS), \ 15172f7d322SMartin K. Petersen scsi_prot_op_name(SCSI_PROT_WRITE_PASS)) 15272f7d322SMartin K. Petersen 153bf816235SKei Tokunaga const char *scsi_trace_parse_cdb(struct trace_seq*, unsigned char*, int); 154bf816235SKei Tokunaga #define __parse_cdb(cdb, len) scsi_trace_parse_cdb(p, cdb, len) 155bf816235SKei Tokunaga 156bf816235SKei Tokunaga TRACE_EVENT(scsi_dispatch_cmd_start, 157bf816235SKei Tokunaga 158bf816235SKei Tokunaga TP_PROTO(struct scsi_cmnd *cmd), 159bf816235SKei Tokunaga 160bf816235SKei Tokunaga TP_ARGS(cmd), 161bf816235SKei Tokunaga 162bf816235SKei Tokunaga TP_STRUCT__entry( 163bf816235SKei Tokunaga __field( unsigned int, host_no ) 164bf816235SKei Tokunaga __field( unsigned int, channel ) 165bf816235SKei Tokunaga __field( unsigned int, id ) 166bf816235SKei Tokunaga __field( unsigned int, lun ) 167bf816235SKei Tokunaga __field( unsigned int, opcode ) 168bf816235SKei Tokunaga __field( unsigned int, cmd_len ) 169cc06af0bSChangyuan Lyu __field( int, driver_tag) 170cc06af0bSChangyuan Lyu __field( int, scheduler_tag) 171c446c1f9SMartin K. Petersen __field( unsigned int, data_sglen ) 172c446c1f9SMartin K. Petersen __field( unsigned int, prot_sglen ) 17372f7d322SMartin K. Petersen __field( unsigned char, prot_op ) 174bf816235SKei Tokunaga __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 175bf816235SKei Tokunaga ), 176bf816235SKei Tokunaga 177bf816235SKei Tokunaga TP_fast_assign( 178bf816235SKei Tokunaga __entry->host_no = cmd->device->host->host_no; 179bf816235SKei Tokunaga __entry->channel = cmd->device->channel; 180bf816235SKei Tokunaga __entry->id = cmd->device->id; 181bf816235SKei Tokunaga __entry->lun = cmd->device->lun; 182bf816235SKei Tokunaga __entry->opcode = cmd->cmnd[0]; 183bf816235SKei Tokunaga __entry->cmd_len = cmd->cmd_len; 184cc06af0bSChangyuan Lyu __entry->driver_tag = scsi_cmd_to_rq(cmd)->tag; 185cc06af0bSChangyuan Lyu __entry->scheduler_tag = scsi_cmd_to_rq(cmd)->internal_tag; 186c446c1f9SMartin K. Petersen __entry->data_sglen = scsi_sg_count(cmd); 187c446c1f9SMartin K. Petersen __entry->prot_sglen = scsi_prot_sg_count(cmd); 18872f7d322SMartin K. Petersen __entry->prot_op = scsi_get_prot_op(cmd); 189bf816235SKei Tokunaga memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 190bf816235SKei Tokunaga ), 191bf816235SKei Tokunaga 192c446c1f9SMartin K. Petersen TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 193cc06af0bSChangyuan Lyu " prot_op=%s driver_tag=%d scheduler_tag=%d cmnd=(%s %s raw=%s)", 194bf816235SKei Tokunaga __entry->host_no, __entry->channel, __entry->id, 195c446c1f9SMartin K. Petersen __entry->lun, __entry->data_sglen, __entry->prot_sglen, 196cc06af0bSChangyuan Lyu show_prot_op_name(__entry->prot_op), __entry->driver_tag, 197cc06af0bSChangyuan Lyu __entry->scheduler_tag, show_opcode_name(__entry->opcode), 198bf816235SKei Tokunaga __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 199bf816235SKei Tokunaga __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len)) 200bf816235SKei Tokunaga ); 201bf816235SKei Tokunaga 202bf816235SKei Tokunaga TRACE_EVENT(scsi_dispatch_cmd_error, 203bf816235SKei Tokunaga 204bf816235SKei Tokunaga TP_PROTO(struct scsi_cmnd *cmd, int rtn), 205bf816235SKei Tokunaga 206bf816235SKei Tokunaga TP_ARGS(cmd, rtn), 207bf816235SKei Tokunaga 208bf816235SKei Tokunaga TP_STRUCT__entry( 209bf816235SKei Tokunaga __field( unsigned int, host_no ) 210bf816235SKei Tokunaga __field( unsigned int, channel ) 211bf816235SKei Tokunaga __field( unsigned int, id ) 212bf816235SKei Tokunaga __field( unsigned int, lun ) 213bf816235SKei Tokunaga __field( int, rtn ) 214bf816235SKei Tokunaga __field( unsigned int, opcode ) 215bf816235SKei Tokunaga __field( unsigned int, cmd_len ) 216cc06af0bSChangyuan Lyu __field( int, driver_tag) 217cc06af0bSChangyuan Lyu __field( int, scheduler_tag) 218c446c1f9SMartin K. Petersen __field( unsigned int, data_sglen ) 219c446c1f9SMartin K. Petersen __field( unsigned int, prot_sglen ) 22072f7d322SMartin K. Petersen __field( unsigned char, prot_op ) 221bf816235SKei Tokunaga __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 222bf816235SKei Tokunaga ), 223bf816235SKei Tokunaga 224bf816235SKei Tokunaga TP_fast_assign( 225bf816235SKei Tokunaga __entry->host_no = cmd->device->host->host_no; 226bf816235SKei Tokunaga __entry->channel = cmd->device->channel; 227bf816235SKei Tokunaga __entry->id = cmd->device->id; 228bf816235SKei Tokunaga __entry->lun = cmd->device->lun; 229bf816235SKei Tokunaga __entry->rtn = rtn; 230bf816235SKei Tokunaga __entry->opcode = cmd->cmnd[0]; 231bf816235SKei Tokunaga __entry->cmd_len = cmd->cmd_len; 232cc06af0bSChangyuan Lyu __entry->driver_tag = scsi_cmd_to_rq(cmd)->tag; 233cc06af0bSChangyuan Lyu __entry->scheduler_tag = scsi_cmd_to_rq(cmd)->internal_tag; 234c446c1f9SMartin K. Petersen __entry->data_sglen = scsi_sg_count(cmd); 235c446c1f9SMartin K. Petersen __entry->prot_sglen = scsi_prot_sg_count(cmd); 23672f7d322SMartin K. Petersen __entry->prot_op = scsi_get_prot_op(cmd); 237bf816235SKei Tokunaga memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 238bf816235SKei Tokunaga ), 239bf816235SKei Tokunaga 240c446c1f9SMartin K. Petersen TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 241cc06af0bSChangyuan Lyu " prot_op=%s driver_tag=%d scheduler_tag=%d cmnd=(%s %s raw=%s)" \ 242cc06af0bSChangyuan Lyu " rtn=%d", 243bf816235SKei Tokunaga __entry->host_no, __entry->channel, __entry->id, 244c446c1f9SMartin K. Petersen __entry->lun, __entry->data_sglen, __entry->prot_sglen, 245cc06af0bSChangyuan Lyu show_prot_op_name(__entry->prot_op), __entry->driver_tag, 246cc06af0bSChangyuan Lyu __entry->scheduler_tag, show_opcode_name(__entry->opcode), 247bf816235SKei Tokunaga __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 248bf816235SKei Tokunaga __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len), 249bf816235SKei Tokunaga __entry->rtn) 250bf816235SKei Tokunaga ); 251bf816235SKei Tokunaga 252bf816235SKei Tokunaga DECLARE_EVENT_CLASS(scsi_cmd_done_timeout_template, 253bf816235SKei Tokunaga 254bf816235SKei Tokunaga TP_PROTO(struct scsi_cmnd *cmd), 255bf816235SKei Tokunaga 256bf816235SKei Tokunaga TP_ARGS(cmd), 257bf816235SKei Tokunaga 258bf816235SKei Tokunaga TP_STRUCT__entry( 259bf816235SKei Tokunaga __field( unsigned int, host_no ) 260bf816235SKei Tokunaga __field( unsigned int, channel ) 261bf816235SKei Tokunaga __field( unsigned int, id ) 262bf816235SKei Tokunaga __field( unsigned int, lun ) 263bf816235SKei Tokunaga __field( int, result ) 264bf816235SKei Tokunaga __field( unsigned int, opcode ) 265bf816235SKei Tokunaga __field( unsigned int, cmd_len ) 266cc06af0bSChangyuan Lyu __field( int, driver_tag) 267cc06af0bSChangyuan Lyu __field( int, scheduler_tag) 268c446c1f9SMartin K. Petersen __field( unsigned int, data_sglen ) 269c446c1f9SMartin K. Petersen __field( unsigned int, prot_sglen ) 27072f7d322SMartin K. Petersen __field( unsigned char, prot_op ) 271bf816235SKei Tokunaga __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 272*8bb1c624SBart Van Assche __field( u8, sense_key ) 273*8bb1c624SBart Van Assche __field( u8, asc ) 274*8bb1c624SBart Van Assche __field( u8, ascq ) 275bf816235SKei Tokunaga ), 276bf816235SKei Tokunaga 277bf816235SKei Tokunaga TP_fast_assign( 278*8bb1c624SBart Van Assche struct scsi_sense_hdr sshdr; 279*8bb1c624SBart Van Assche 280bf816235SKei Tokunaga __entry->host_no = cmd->device->host->host_no; 281bf816235SKei Tokunaga __entry->channel = cmd->device->channel; 282bf816235SKei Tokunaga __entry->id = cmd->device->id; 283bf816235SKei Tokunaga __entry->lun = cmd->device->lun; 284bf816235SKei Tokunaga __entry->result = cmd->result; 285bf816235SKei Tokunaga __entry->opcode = cmd->cmnd[0]; 286bf816235SKei Tokunaga __entry->cmd_len = cmd->cmd_len; 287cc06af0bSChangyuan Lyu __entry->driver_tag = scsi_cmd_to_rq(cmd)->tag; 288cc06af0bSChangyuan Lyu __entry->scheduler_tag = scsi_cmd_to_rq(cmd)->internal_tag; 289c446c1f9SMartin K. Petersen __entry->data_sglen = scsi_sg_count(cmd); 290c446c1f9SMartin K. Petersen __entry->prot_sglen = scsi_prot_sg_count(cmd); 29172f7d322SMartin K. Petersen __entry->prot_op = scsi_get_prot_op(cmd); 292bf816235SKei Tokunaga memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 293*8bb1c624SBart Van Assche if (cmd->sense_buffer && SCSI_SENSE_VALID(cmd) && 294*8bb1c624SBart Van Assche scsi_command_normalize_sense(cmd, &sshdr)) { 295*8bb1c624SBart Van Assche __entry->sense_key = sshdr.sense_key; 296*8bb1c624SBart Van Assche __entry->asc = sshdr.asc; 297*8bb1c624SBart Van Assche __entry->ascq = sshdr.ascq; 298*8bb1c624SBart Van Assche } else { 299*8bb1c624SBart Van Assche __entry->sense_key = 0; 300*8bb1c624SBart Van Assche __entry->asc = 0; 301*8bb1c624SBart Van Assche __entry->ascq = 0; 302*8bb1c624SBart Van Assche } 303bf816235SKei Tokunaga ), 304bf816235SKei Tokunaga 305cc06af0bSChangyuan Lyu TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u " \ 306cc06af0bSChangyuan Lyu "prot_op=%s driver_tag=%d scheduler_tag=%d cmnd=(%s %s raw=%s) " \ 307*8bb1c624SBart Van Assche "result=(driver=%s host=%s message=%s status=%s) " 308*8bb1c624SBart Van Assche "sense=(key=%#x asc=%#x ascq=%#x)", 309bf816235SKei Tokunaga __entry->host_no, __entry->channel, __entry->id, 310c446c1f9SMartin K. Petersen __entry->lun, __entry->data_sglen, __entry->prot_sglen, 311cc06af0bSChangyuan Lyu show_prot_op_name(__entry->prot_op), __entry->driver_tag, 312cc06af0bSChangyuan Lyu __entry->scheduler_tag, show_opcode_name(__entry->opcode), 313bf816235SKei Tokunaga __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 314bf816235SKei Tokunaga __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len), 31554c29086SHannes Reinecke "DRIVER_OK", 316bf816235SKei Tokunaga show_hostbyte_name(((__entry->result) >> 16) & 0xff), 317a7479a84SHannes Reinecke "COMMAND_COMPLETE", 318*8bb1c624SBart Van Assche show_statusbyte_name(__entry->result & 0xff), 319*8bb1c624SBart Van Assche __entry->sense_key, __entry->asc, __entry->ascq) 320bf816235SKei Tokunaga ); 321bf816235SKei Tokunaga 322bf816235SKei Tokunaga DEFINE_EVENT(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_done, 323bf816235SKei Tokunaga TP_PROTO(struct scsi_cmnd *cmd), 324bf816235SKei Tokunaga TP_ARGS(cmd)); 325bf816235SKei Tokunaga 326bf816235SKei Tokunaga DEFINE_EVENT(scsi_cmd_done_timeout_template, scsi_dispatch_cmd_timeout, 327bf816235SKei Tokunaga TP_PROTO(struct scsi_cmnd *cmd), 328bf816235SKei Tokunaga TP_ARGS(cmd)); 329bf816235SKei Tokunaga 330bf816235SKei Tokunaga TRACE_EVENT(scsi_eh_wakeup, 331bf816235SKei Tokunaga 332bf816235SKei Tokunaga TP_PROTO(struct Scsi_Host *shost), 333bf816235SKei Tokunaga 334bf816235SKei Tokunaga TP_ARGS(shost), 335bf816235SKei Tokunaga 336bf816235SKei Tokunaga TP_STRUCT__entry( 337bf816235SKei Tokunaga __field( unsigned int, host_no ) 338bf816235SKei Tokunaga ), 339bf816235SKei Tokunaga 340bf816235SKei Tokunaga TP_fast_assign( 341bf816235SKei Tokunaga __entry->host_no = shost->host_no; 342bf816235SKei Tokunaga ), 343bf816235SKei Tokunaga 344bf816235SKei Tokunaga TP_printk("host_no=%u", __entry->host_no) 345bf816235SKei Tokunaga ); 346bf816235SKei Tokunaga 347bf816235SKei Tokunaga #endif /* _TRACE_SCSI_H */ 348bf816235SKei Tokunaga 349bf816235SKei Tokunaga /* This part must be outside protection */ 350bf816235SKei Tokunaga #include <trace/define_trace.h> 351