Skip to content

Commit

Permalink
nvme: Display raw APST configuration via DYNAMIC_DEBUG
Browse files Browse the repository at this point in the history
Debugging APST is currently a bit of a pain.  This gives optional
simple log messages that describe the APST state.

The easiest way to use this is probably with the nvme_core.dyndbg=+p
module parameter.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
Andy Lutomirski authored and Jens Axboe committed Apr 25, 2017
1 parent 76e4ad0 commit fb0dc39
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions drivers/nvme/host/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,8 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)

unsigned apste;
struct nvme_feat_auto_pst *table;
u64 max_lat_us = 0;
int max_ps = -1;
int ret;

/*
Expand All @@ -1357,6 +1359,7 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)
if (ctrl->ps_max_latency_us == 0) {
/* Turn off APST. */
apste = 0;
dev_dbg(ctrl->device, "APST disabled\n");
} else {
__le64 target = cpu_to_le64(0);
int state;
Expand Down Expand Up @@ -1406,9 +1409,22 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl)

target = cpu_to_le64((state << 3) |
(transition_ms << 8));

if (max_ps == -1)
max_ps = state;

if (total_latency_us > max_lat_us)
max_lat_us = total_latency_us;
}

apste = 1;

if (max_ps == -1) {
dev_dbg(ctrl->device, "APST enabled but no non-operational states are available\n");
} else {
dev_dbg(ctrl->device, "APST enabled: max PS = %d, max round-trip latency = %lluus, table = %*phN\n",
max_ps, max_lat_us, (int)sizeof(*table), table);
}
}

ret = nvme_set_features(ctrl, NVME_FEAT_AUTO_PST, apste,
Expand Down

0 comments on commit fb0dc39

Please sign in to comment.