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_ctrlr.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_ctrlr.c')
-rw-r--r-- | sys/dev/nvme/nvme_ctrlr.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index f759a60..6328134 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -592,10 +592,10 @@ nvme_ctrlr_construct_and_submit_aer(struct nvme_controller *ctrlr, aer->req = req; /* - * Override default timeout value here, since asynchronous event - * requests should by nature never be timed out. + * Disable timeout here, since asynchronous event requests should by + * nature never be timed out. */ - req->timeout = 0; + req->timeout = FALSE; req->cmd.opc = NVME_OPC_ASYNC_EVENT_REQUEST; nvme_ctrlr_submit_admin_request(ctrlr, req); } @@ -791,6 +791,7 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev) union cap_lo_register cap_lo; union cap_hi_register cap_hi; int num_vectors, per_cpu_io_queues, status = 0; + int timeout_period; ctrlr->dev = dev; ctrlr->is_started = FALSE; @@ -822,6 +823,12 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev) cap_lo.raw = nvme_mmio_read_4(ctrlr, cap_lo); ctrlr->ready_timeout_in_ms = cap_lo.bits.to * 500; + timeout_period = NVME_DEFAULT_TIMEOUT_PERIOD; + TUNABLE_INT_FETCH("hw.nvme.timeout_period", &timeout_period); + timeout_period = min(timeout_period, NVME_MAX_TIMEOUT_PERIOD); + timeout_period = max(timeout_period, NVME_MIN_TIMEOUT_PERIOD); + ctrlr->timeout_period = timeout_period; + per_cpu_io_queues = 1; TUNABLE_INT_FETCH("hw.nvme.per_cpu_io_queues", &per_cpu_io_queues); ctrlr->per_cpu_io_queues = per_cpu_io_queues ? TRUE : FALSE; |