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