Skip to content

Commit

Permalink
libata-trace: decode subcommands
Browse files Browse the repository at this point in the history
Some commands like FPDMA RECEIVE or NCQ NON DATA can encapsulate
other commands to NCQ transport. So decode the subcmds, too.

Signed-off-by: Hannes Reinecke <[email protected]>
Signed-off-by: Tejun Heo <[email protected]>
  • Loading branch information
hreinecke authored and htejun committed May 9, 2016
1 parent fe5af0c commit a570384
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
43 changes: 43 additions & 0 deletions drivers/ata/libata-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,46 @@ libata_trace_parse_qc_flags(struct trace_seq *p, unsigned int qc_flags)

return ret;
}

const char *
libata_trace_parse_subcmd(struct trace_seq *p, unsigned char cmd,
unsigned char feature, unsigned char hob_nsect)
{
const char *ret = trace_seq_buffer_ptr(p);

switch (cmd) {
case ATA_CMD_FPDMA_RECV:
switch (hob_nsect & 0x5f) {
case ATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT:
trace_seq_printf(p, " READ_LOG_DMA_EXT");
break;
}
break;
case ATA_CMD_FPDMA_SEND:
switch (hob_nsect & 0x5f) {
case ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT:
trace_seq_printf(p, " WRITE_LOG_DMA_EXT");
break;
case ATA_SUBCMD_FPDMA_SEND_DSM:
trace_seq_printf(p, " DATASET_MANAGEMENT");
break;
}
break;
case ATA_CMD_NCQ_NON_DATA:
switch (feature) {
case ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE:
trace_seq_printf(p, " ABORT_QUEUE");
break;
case ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES:
trace_seq_printf(p, " SET_FEATURES");
break;
case ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT:
trace_seq_printf(p, " ZERO_EXT");
break;
}
break;
}
trace_seq_putc(p, 0);

return ret;
}
17 changes: 17 additions & 0 deletions include/linux/ata.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,11 @@ enum {
ATA_SUBCMD_FPDMA_SEND_DSM = 0x00,
ATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 0x02,

/* Subcmds for ATA_CMD_NCQ_NON_DATA */
ATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0x00,
ATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 0x05,
ATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 0x06,

/* READ_LOG_EXT pages */
ATA_LOG_DIRECTORY = 0x0,
ATA_LOG_SATA_NCQ = 0x10,
Expand All @@ -338,6 +343,18 @@ enum {
ATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = (1 << 0),
ATA_LOG_NCQ_SEND_RECV_SIZE = 0x10,

/* NCQ Non-Data log */
ATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0x00,
ATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0x00,
ATA_LOG_NCQ_NON_DATA_ABORT_NCQ = (1 << 0),
ATA_LOG_NCQ_NON_DATA_ABORT_ALL = (1 << 1),
ATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = (1 << 2),
ATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = (1 << 3),
ATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = (1 << 4),
ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 0x1C,
ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = (1 << 0),
ATA_LOG_NCQ_NON_DATA_SIZE = 0x40,

/* READ/WRITE LONG (obsolete) */
ATA_CMD_READ_LONG = 0x22,
ATA_CMD_READ_LONG_ONCE = 0x23,
Expand Down
7 changes: 6 additions & 1 deletion include/trace/events/libata.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ const char *libata_trace_parse_eh_err_mask(struct trace_seq *, unsigned int);
const char *libata_trace_parse_qc_flags(struct trace_seq *, unsigned int);
#define __parse_qc_flags(f) libata_trace_parse_qc_flags(p, f)

const char *libata_trace_parse_subcmd(struct trace_seq *, unsigned char,
unsigned char, unsigned char);
#define __parse_subcmd(c,f,h) libata_trace_parse_subcmd(p, c, f, h)

TRACE_EVENT(ata_qc_issue,

TP_PROTO(struct ata_queued_cmd *qc),
Expand Down Expand Up @@ -186,11 +190,12 @@ TRACE_EVENT(ata_qc_issue,
__entry->hob_nsect = qc->tf.hob_nsect;
),

TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s " \
TP_printk("ata_port=%u ata_dev=%u tag=%d proto=%s cmd=%s%s " \
" tf=(%02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x)",
__entry->ata_port, __entry->ata_dev, __entry->tag,
show_protocol_name(__entry->proto),
show_opcode_name(__entry->cmd),
__parse_subcmd(__entry->cmd, __entry->feature, __entry->hob_nsect),
__entry->cmd, __entry->feature, __entry->nsect,
__entry->lbal, __entry->lbam, __entry->lbah,
__entry->hob_feature, __entry->hob_nsect,
Expand Down

0 comments on commit a570384

Please sign in to comment.