diff options
author | jimharris <jimharris@FreeBSD.org> | 2013-03-26 20:02:35 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2013-03-26 20:02:35 +0000 |
commit | 83032bc2394df6e15ddb874995f794f0c8c660b1 (patch) | |
tree | 5ebc789383fbca5abbead81ca4e0081cc57c742d /sys/dev/nvme/nvme_sysctl.c | |
parent | 711dabaf432762eec4942b5f5f7611e7df825260 (diff) | |
download | FreeBSD-src-83032bc2394df6e15ddb874995f794f0c8c660b1.zip FreeBSD-src-83032bc2394df6e15ddb874995f794f0c8c660b1.tar.gz |
Add a tunable for the I/O timeout interval. Default is still 30 seconds,
but can be adjusted between a min/max of 5 and 120 seconds.
Sponsored by: Intel
Reviewed by: carl
Diffstat (limited to 'sys/dev/nvme/nvme_sysctl.c')
-rw-r--r-- | sys/dev/nvme/nvme_sysctl.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_sysctl.c b/sys/dev/nvme/nvme_sysctl.c index 85187af..6e0aa0c 100644 --- a/sys/dev/nvme/nvme_sysctl.c +++ b/sys/dev/nvme/nvme_sysctl.c @@ -123,6 +123,25 @@ nvme_sysctl_int_coal_threshold(SYSCTL_HANDLER_ARGS) return (0); } +static int +nvme_sysctl_timeout_period(SYSCTL_HANDLER_ARGS) +{ + struct nvme_controller *ctrlr = arg1; + uint32_t oldval = ctrlr->timeout_period; + int error = sysctl_handle_int(oidp, &ctrlr->timeout_period, 0, req); + + if (error) + return (error); + + if (ctrlr->timeout_period > NVME_MAX_TIMEOUT_PERIOD || + ctrlr->timeout_period < NVME_MIN_TIMEOUT_PERIOD) { + ctrlr->timeout_period = oldval; + return (EINVAL); + } + + return (0); +} + static void nvme_qpair_reset_stats(struct nvme_qpair *qpair) { @@ -244,6 +263,11 @@ nvme_sysctl_initialize_ctrlr(struct nvme_controller *ctrlr) "Interrupt coalescing threshold"); SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, + "timeout_period", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0, + nvme_sysctl_timeout_period, "IU", + "Timeout period (in seconds)"); + + SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, "num_cmds", CTLTYPE_S64 | CTLFLAG_RD, ctrlr, 0, nvme_sysctl_num_cmds, "IU", "Number of commands submitted"); |