xref: /OK3568_Linux_fs/kernel/include/trace/events/target.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #undef TRACE_SYSTEM
3*4882a593Smuzhiyun #define TRACE_SYSTEM target
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #if !defined(_TRACE_TARGET_H) || defined(TRACE_HEADER_MULTI_READ)
6*4882a593Smuzhiyun #define _TRACE_TARGET_H
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/tracepoint.h>
9*4882a593Smuzhiyun #include <linux/trace_seq.h>
10*4882a593Smuzhiyun #include <scsi/scsi_proto.h>
11*4882a593Smuzhiyun #include <scsi/scsi_tcq.h>
12*4882a593Smuzhiyun #include <target/target_core_base.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* cribbed verbatim from <trace/event/scsi.h> */
15*4882a593Smuzhiyun #define scsi_opcode_name(opcode)	{ opcode, #opcode }
16*4882a593Smuzhiyun #define show_opcode_name(val)					\
17*4882a593Smuzhiyun 	__print_symbolic(val,					\
18*4882a593Smuzhiyun 		scsi_opcode_name(TEST_UNIT_READY),		\
19*4882a593Smuzhiyun 		scsi_opcode_name(REZERO_UNIT),			\
20*4882a593Smuzhiyun 		scsi_opcode_name(REQUEST_SENSE),		\
21*4882a593Smuzhiyun 		scsi_opcode_name(FORMAT_UNIT),			\
22*4882a593Smuzhiyun 		scsi_opcode_name(READ_BLOCK_LIMITS),		\
23*4882a593Smuzhiyun 		scsi_opcode_name(REASSIGN_BLOCKS),		\
24*4882a593Smuzhiyun 		scsi_opcode_name(INITIALIZE_ELEMENT_STATUS),	\
25*4882a593Smuzhiyun 		scsi_opcode_name(READ_6),			\
26*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_6),			\
27*4882a593Smuzhiyun 		scsi_opcode_name(SEEK_6),			\
28*4882a593Smuzhiyun 		scsi_opcode_name(READ_REVERSE),			\
29*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_FILEMARKS),		\
30*4882a593Smuzhiyun 		scsi_opcode_name(SPACE),			\
31*4882a593Smuzhiyun 		scsi_opcode_name(INQUIRY),			\
32*4882a593Smuzhiyun 		scsi_opcode_name(RECOVER_BUFFERED_DATA),	\
33*4882a593Smuzhiyun 		scsi_opcode_name(MODE_SELECT),			\
34*4882a593Smuzhiyun 		scsi_opcode_name(RESERVE),			\
35*4882a593Smuzhiyun 		scsi_opcode_name(RELEASE),			\
36*4882a593Smuzhiyun 		scsi_opcode_name(COPY),				\
37*4882a593Smuzhiyun 		scsi_opcode_name(ERASE),			\
38*4882a593Smuzhiyun 		scsi_opcode_name(MODE_SENSE),			\
39*4882a593Smuzhiyun 		scsi_opcode_name(START_STOP),			\
40*4882a593Smuzhiyun 		scsi_opcode_name(RECEIVE_DIAGNOSTIC),		\
41*4882a593Smuzhiyun 		scsi_opcode_name(SEND_DIAGNOSTIC),		\
42*4882a593Smuzhiyun 		scsi_opcode_name(ALLOW_MEDIUM_REMOVAL),		\
43*4882a593Smuzhiyun 		scsi_opcode_name(SET_WINDOW),			\
44*4882a593Smuzhiyun 		scsi_opcode_name(READ_CAPACITY),		\
45*4882a593Smuzhiyun 		scsi_opcode_name(READ_10),			\
46*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_10),			\
47*4882a593Smuzhiyun 		scsi_opcode_name(SEEK_10),			\
48*4882a593Smuzhiyun 		scsi_opcode_name(POSITION_TO_ELEMENT),		\
49*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_VERIFY),			\
50*4882a593Smuzhiyun 		scsi_opcode_name(VERIFY),			\
51*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_HIGH),			\
52*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_EQUAL),			\
53*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_LOW),			\
54*4882a593Smuzhiyun 		scsi_opcode_name(SET_LIMITS),			\
55*4882a593Smuzhiyun 		scsi_opcode_name(PRE_FETCH),			\
56*4882a593Smuzhiyun 		scsi_opcode_name(READ_POSITION),		\
57*4882a593Smuzhiyun 		scsi_opcode_name(SYNCHRONIZE_CACHE),		\
58*4882a593Smuzhiyun 		scsi_opcode_name(LOCK_UNLOCK_CACHE),		\
59*4882a593Smuzhiyun 		scsi_opcode_name(READ_DEFECT_DATA),		\
60*4882a593Smuzhiyun 		scsi_opcode_name(MEDIUM_SCAN),			\
61*4882a593Smuzhiyun 		scsi_opcode_name(COMPARE),			\
62*4882a593Smuzhiyun 		scsi_opcode_name(COPY_VERIFY),			\
63*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_BUFFER),			\
64*4882a593Smuzhiyun 		scsi_opcode_name(READ_BUFFER),			\
65*4882a593Smuzhiyun 		scsi_opcode_name(UPDATE_BLOCK),			\
66*4882a593Smuzhiyun 		scsi_opcode_name(READ_LONG),			\
67*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_LONG),			\
68*4882a593Smuzhiyun 		scsi_opcode_name(CHANGE_DEFINITION),		\
69*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_SAME),			\
70*4882a593Smuzhiyun 		scsi_opcode_name(UNMAP),			\
71*4882a593Smuzhiyun 		scsi_opcode_name(READ_TOC),			\
72*4882a593Smuzhiyun 		scsi_opcode_name(LOG_SELECT),			\
73*4882a593Smuzhiyun 		scsi_opcode_name(LOG_SENSE),			\
74*4882a593Smuzhiyun 		scsi_opcode_name(XDWRITEREAD_10),		\
75*4882a593Smuzhiyun 		scsi_opcode_name(MODE_SELECT_10),		\
76*4882a593Smuzhiyun 		scsi_opcode_name(RESERVE_10),			\
77*4882a593Smuzhiyun 		scsi_opcode_name(RELEASE_10),			\
78*4882a593Smuzhiyun 		scsi_opcode_name(MODE_SENSE_10),		\
79*4882a593Smuzhiyun 		scsi_opcode_name(PERSISTENT_RESERVE_IN),	\
80*4882a593Smuzhiyun 		scsi_opcode_name(PERSISTENT_RESERVE_OUT),	\
81*4882a593Smuzhiyun 		scsi_opcode_name(VARIABLE_LENGTH_CMD),		\
82*4882a593Smuzhiyun 		scsi_opcode_name(REPORT_LUNS),			\
83*4882a593Smuzhiyun 		scsi_opcode_name(MAINTENANCE_IN),		\
84*4882a593Smuzhiyun 		scsi_opcode_name(MAINTENANCE_OUT),		\
85*4882a593Smuzhiyun 		scsi_opcode_name(MOVE_MEDIUM),			\
86*4882a593Smuzhiyun 		scsi_opcode_name(EXCHANGE_MEDIUM),		\
87*4882a593Smuzhiyun 		scsi_opcode_name(READ_12),			\
88*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_12),			\
89*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_VERIFY_12),		\
90*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_HIGH_12),		\
91*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_EQUAL_12),		\
92*4882a593Smuzhiyun 		scsi_opcode_name(SEARCH_LOW_12),		\
93*4882a593Smuzhiyun 		scsi_opcode_name(READ_ELEMENT_STATUS),		\
94*4882a593Smuzhiyun 		scsi_opcode_name(SEND_VOLUME_TAG),		\
95*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_LONG_2),			\
96*4882a593Smuzhiyun 		scsi_opcode_name(READ_16),			\
97*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_16),			\
98*4882a593Smuzhiyun 		scsi_opcode_name(VERIFY_16),			\
99*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_SAME_16),		\
100*4882a593Smuzhiyun 		scsi_opcode_name(SERVICE_ACTION_IN_16),		\
101*4882a593Smuzhiyun 		scsi_opcode_name(SAI_READ_CAPACITY_16),		\
102*4882a593Smuzhiyun 		scsi_opcode_name(SAI_GET_LBA_STATUS),		\
103*4882a593Smuzhiyun 		scsi_opcode_name(MI_REPORT_TARGET_PGS),		\
104*4882a593Smuzhiyun 		scsi_opcode_name(MO_SET_TARGET_PGS),		\
105*4882a593Smuzhiyun 		scsi_opcode_name(READ_32),			\
106*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_32),			\
107*4882a593Smuzhiyun 		scsi_opcode_name(WRITE_SAME_32),		\
108*4882a593Smuzhiyun 		scsi_opcode_name(ATA_16),			\
109*4882a593Smuzhiyun 		scsi_opcode_name(ATA_12))
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define show_task_attribute_name(val)				\
112*4882a593Smuzhiyun 	__print_symbolic(val,					\
113*4882a593Smuzhiyun 		{ TCM_SIMPLE_TAG,	"SIMPLE"	},	\
114*4882a593Smuzhiyun 		{ TCM_HEAD_TAG,		"HEAD"		},	\
115*4882a593Smuzhiyun 		{ TCM_ORDERED_TAG,	"ORDERED"	},	\
116*4882a593Smuzhiyun 		{ TCM_ACA_TAG,		"ACA"		} )
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define show_scsi_status_name(val)				\
119*4882a593Smuzhiyun 	__print_symbolic(val,					\
120*4882a593Smuzhiyun 		{ SAM_STAT_GOOD,	"GOOD" },		\
121*4882a593Smuzhiyun 		{ SAM_STAT_CHECK_CONDITION, "CHECK CONDITION" }, \
122*4882a593Smuzhiyun 		{ SAM_STAT_CONDITION_MET, "CONDITION MET" },	\
123*4882a593Smuzhiyun 		{ SAM_STAT_BUSY,	"BUSY" },		\
124*4882a593Smuzhiyun 		{ SAM_STAT_INTERMEDIATE, "INTERMEDIATE" },	\
125*4882a593Smuzhiyun 		{ SAM_STAT_INTERMEDIATE_CONDITION_MET, "INTERMEDIATE CONDITION MET" }, \
126*4882a593Smuzhiyun 		{ SAM_STAT_RESERVATION_CONFLICT, "RESERVATION CONFLICT" }, \
127*4882a593Smuzhiyun 		{ SAM_STAT_COMMAND_TERMINATED, "COMMAND TERMINATED" }, \
128*4882a593Smuzhiyun 		{ SAM_STAT_TASK_SET_FULL, "TASK SET FULL" },	\
129*4882a593Smuzhiyun 		{ SAM_STAT_ACA_ACTIVE, "ACA ACTIVE" },		\
130*4882a593Smuzhiyun 		{ SAM_STAT_TASK_ABORTED, "TASK ABORTED" } )
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun TRACE_EVENT(target_sequencer_start,
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	TP_PROTO(struct se_cmd *cmd),
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 	TP_ARGS(cmd),
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun 	TP_STRUCT__entry(
139*4882a593Smuzhiyun 		__field( unsigned int,	unpacked_lun	)
140*4882a593Smuzhiyun 		__field( unsigned long long,	tag	)
141*4882a593Smuzhiyun 		__field( unsigned int,	opcode		)
142*4882a593Smuzhiyun 		__field( unsigned int,	data_length	)
143*4882a593Smuzhiyun 		__field( unsigned int,	task_attribute  )
144*4882a593Smuzhiyun 		__field( unsigned char,	control		)
145*4882a593Smuzhiyun 		__array( unsigned char,	cdb, TCM_MAX_COMMAND_SIZE	)
146*4882a593Smuzhiyun 		__string( initiator,	cmd->se_sess->se_node_acl->initiatorname	)
147*4882a593Smuzhiyun 	),
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	TP_fast_assign(
150*4882a593Smuzhiyun 		__entry->unpacked_lun	= cmd->orig_fe_lun;
151*4882a593Smuzhiyun 		__entry->tag		= cmd->tag;
152*4882a593Smuzhiyun 		__entry->opcode		= cmd->t_task_cdb[0];
153*4882a593Smuzhiyun 		__entry->data_length	= cmd->data_length;
154*4882a593Smuzhiyun 		__entry->task_attribute	= cmd->sam_task_attr;
155*4882a593Smuzhiyun 		__entry->control	= scsi_command_control(cmd->t_task_cdb);
156*4882a593Smuzhiyun 		memcpy(__entry->cdb, cmd->t_task_cdb, TCM_MAX_COMMAND_SIZE);
157*4882a593Smuzhiyun 		__assign_str(initiator, cmd->se_sess->se_node_acl->initiatorname);
158*4882a593Smuzhiyun 	),
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun 	TP_printk("%s -> LUN %03u tag %#llx %s data_length %6u  CDB %s  (TA:%s C:%02x)",
161*4882a593Smuzhiyun 		  __get_str(initiator), __entry->unpacked_lun,
162*4882a593Smuzhiyun 		  __entry->tag, show_opcode_name(__entry->opcode),
163*4882a593Smuzhiyun 		  __entry->data_length, __print_hex(__entry->cdb, 16),
164*4882a593Smuzhiyun 		  show_task_attribute_name(__entry->task_attribute),
165*4882a593Smuzhiyun 		  __entry->control
166*4882a593Smuzhiyun 	)
167*4882a593Smuzhiyun );
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun TRACE_EVENT(target_cmd_complete,
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun 	TP_PROTO(struct se_cmd *cmd),
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun 	TP_ARGS(cmd),
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun 	TP_STRUCT__entry(
176*4882a593Smuzhiyun 		__field( unsigned int,	unpacked_lun	)
177*4882a593Smuzhiyun 		__field( unsigned long long,	tag	)
178*4882a593Smuzhiyun 		__field( unsigned int,	opcode		)
179*4882a593Smuzhiyun 		__field( unsigned int,	data_length	)
180*4882a593Smuzhiyun 		__field( unsigned int,	task_attribute  )
181*4882a593Smuzhiyun 		__field( unsigned char,	control		)
182*4882a593Smuzhiyun 		__field( unsigned char,	scsi_status	)
183*4882a593Smuzhiyun 		__field( unsigned char,	sense_length	)
184*4882a593Smuzhiyun 		__array( unsigned char,	cdb, TCM_MAX_COMMAND_SIZE	)
185*4882a593Smuzhiyun 		__array( unsigned char,	sense_data, 18	)
186*4882a593Smuzhiyun 		__string(initiator,	cmd->se_sess->se_node_acl->initiatorname)
187*4882a593Smuzhiyun 	),
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun 	TP_fast_assign(
190*4882a593Smuzhiyun 		__entry->unpacked_lun	= cmd->orig_fe_lun;
191*4882a593Smuzhiyun 		__entry->tag		= cmd->tag;
192*4882a593Smuzhiyun 		__entry->opcode		= cmd->t_task_cdb[0];
193*4882a593Smuzhiyun 		__entry->data_length	= cmd->data_length;
194*4882a593Smuzhiyun 		__entry->task_attribute	= cmd->sam_task_attr;
195*4882a593Smuzhiyun 		__entry->control	= scsi_command_control(cmd->t_task_cdb);
196*4882a593Smuzhiyun 		__entry->scsi_status	= cmd->scsi_status;
197*4882a593Smuzhiyun 		__entry->sense_length	= cmd->scsi_status == SAM_STAT_CHECK_CONDITION ?
198*4882a593Smuzhiyun 			min(18, ((u8 *) cmd->sense_buffer)[SPC_ADD_SENSE_LEN_OFFSET] + 8) : 0;
199*4882a593Smuzhiyun 		memcpy(__entry->cdb, cmd->t_task_cdb, TCM_MAX_COMMAND_SIZE);
200*4882a593Smuzhiyun 		memcpy(__entry->sense_data, cmd->sense_buffer, __entry->sense_length);
201*4882a593Smuzhiyun 		__assign_str(initiator, cmd->se_sess->se_node_acl->initiatorname);
202*4882a593Smuzhiyun 	),
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	TP_printk("%s <- LUN %03u tag %#llx status %s (sense len %d%s%s)  %s data_length %6u  CDB %s  (TA:%s C:%02x)",
205*4882a593Smuzhiyun 		  __get_str(initiator), __entry->unpacked_lun,
206*4882a593Smuzhiyun 		  __entry->tag,
207*4882a593Smuzhiyun 		  show_scsi_status_name(__entry->scsi_status),
208*4882a593Smuzhiyun 		  __entry->sense_length, __entry->sense_length ? " / " : "",
209*4882a593Smuzhiyun 		  __print_hex(__entry->sense_data, __entry->sense_length),
210*4882a593Smuzhiyun 		  show_opcode_name(__entry->opcode),
211*4882a593Smuzhiyun 		  __entry->data_length, __print_hex(__entry->cdb, 16),
212*4882a593Smuzhiyun 		  show_task_attribute_name(__entry->task_attribute),
213*4882a593Smuzhiyun 		  __entry->control
214*4882a593Smuzhiyun 	)
215*4882a593Smuzhiyun );
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun #endif /*  _TRACE_TARGET_H */
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun /* This part must be outside protection */
220*4882a593Smuzhiyun #include <trace/define_trace.h>
221