-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'nvme-4.16' of git://git.infradead.org/nvme into for-4.1…
…6/block Pull NVMe fixes from Christoph: "The additional week before the 4.15 release gave us time for a few more nvme fixes, as well as the nifty trace points from Johannes" * 'nvme-4.16' of git://git.infradead.org/nvme: nvme: add tracepoint for nvme_complete_rq nvme: add tracepoint for nvme_setup_cmd nvme-pci: introduce RECONNECTING state to mark initializing procedure nvme-rdma: remove redundant boolean for inline_data nvme: don't free uuid pointer before printing it nvme-pci: Suspend queues after deleting them nvme-pci: Fix queue double allocations
- Loading branch information
Showing
7 changed files
with
339 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
/* | ||
* NVM Express device driver tracepoints | ||
* Copyright (c) 2018 Johannes Thumshirn, SUSE Linux GmbH | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms and conditions of the GNU General Public License, | ||
* version 2, as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
* more details. | ||
*/ | ||
|
||
#include <asm/unaligned.h> | ||
#include "trace.h" | ||
|
||
static const char *nvme_trace_create_sq(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
u16 sqid = get_unaligned_le16(cdw10); | ||
u16 qsize = get_unaligned_le16(cdw10 + 2); | ||
u16 sq_flags = get_unaligned_le16(cdw10 + 4); | ||
u16 cqid = get_unaligned_le16(cdw10 + 6); | ||
|
||
|
||
trace_seq_printf(p, "sqid=%u, qsize=%u, sq_flags=0x%x, cqid=%u", | ||
sqid, qsize, sq_flags, cqid); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
static const char *nvme_trace_create_cq(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
u16 cqid = get_unaligned_le16(cdw10); | ||
u16 qsize = get_unaligned_le16(cdw10 + 2); | ||
u16 cq_flags = get_unaligned_le16(cdw10 + 4); | ||
u16 irq_vector = get_unaligned_le16(cdw10 + 6); | ||
|
||
trace_seq_printf(p, "cqid=%u, qsize=%u, cq_flags=0x%x, irq_vector=%u", | ||
cqid, qsize, cq_flags, irq_vector); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
static const char *nvme_trace_admin_identify(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
u8 cns = cdw10[0]; | ||
u16 ctrlid = get_unaligned_le16(cdw10 + 2); | ||
|
||
trace_seq_printf(p, "cns=%u, ctrlid=%u", cns, ctrlid); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
|
||
|
||
static const char *nvme_trace_read_write(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
u64 slba = get_unaligned_le64(cdw10); | ||
u16 length = get_unaligned_le16(cdw10 + 8); | ||
u16 control = get_unaligned_le16(cdw10 + 10); | ||
u32 dsmgmt = get_unaligned_le32(cdw10 + 12); | ||
u32 reftag = get_unaligned_le32(cdw10 + 16); | ||
|
||
trace_seq_printf(p, | ||
"slba=%llu, len=%u, ctrl=0x%x, dsmgmt=%u, reftag=%u", | ||
slba, length, control, dsmgmt, reftag); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
static const char *nvme_trace_dsm(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
|
||
trace_seq_printf(p, "nr=%u, attributes=%u", | ||
get_unaligned_le32(cdw10), | ||
get_unaligned_le32(cdw10 + 4)); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
static const char *nvme_trace_common(struct trace_seq *p, u8 *cdw10) | ||
{ | ||
const char *ret = trace_seq_buffer_ptr(p); | ||
|
||
trace_seq_printf(p, "cdw10=%*ph", 24, cdw10); | ||
trace_seq_putc(p, 0); | ||
|
||
return ret; | ||
} | ||
|
||
const char *nvme_trace_parse_admin_cmd(struct trace_seq *p, | ||
u8 opcode, u8 *cdw10) | ||
{ | ||
switch (opcode) { | ||
case nvme_admin_create_sq: | ||
return nvme_trace_create_sq(p, cdw10); | ||
case nvme_admin_create_cq: | ||
return nvme_trace_create_cq(p, cdw10); | ||
case nvme_admin_identify: | ||
return nvme_trace_admin_identify(p, cdw10); | ||
default: | ||
return nvme_trace_common(p, cdw10); | ||
} | ||
} | ||
|
||
const char *nvme_trace_parse_nvm_cmd(struct trace_seq *p, | ||
u8 opcode, u8 *cdw10) | ||
{ | ||
switch (opcode) { | ||
case nvme_cmd_read: | ||
case nvme_cmd_write: | ||
case nvme_cmd_write_zeroes: | ||
return nvme_trace_read_write(p, cdw10); | ||
case nvme_cmd_dsm: | ||
return nvme_trace_dsm(p, cdw10); | ||
default: | ||
return nvme_trace_common(p, cdw10); | ||
} | ||
} |
Oops, something went wrong.