470 Commits

Author SHA1 Message Date
Daniel Verkamp
6887721802 scripts/check_format: use git to find text files
Use 'git grep -I' to determine the list of files that git considers to be
text (rather than hardcoding a list of known text file extensions) and
check all of them for newline at end of file.

Change-Id: I9b947176af2792c139a2782856e3c41061e18f10
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-28 10:24:57 -07:00
Daniel Verkamp
35d53846b1 Remove static_assert fallback for old compilers
This does not work reliably, since the line number is not unique when
multiple headers that use the assert macro are included.

The automated test systems will catch any issues that would
theoretically be missed by contributors compiling with old
pre-static_assert compilers.

Change-Id: I0ded2eeb61d20a28065358cf568a329749283155
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-28 09:16:41 -07:00
Daniel Verkamp
24119894f4 nvme_spec: fix SGL descriptor bitfield order
The type field is in the 4 high bits per the spec, but nvme_spec.h had it
in the low 4 bits.

Change-Id: I04dcb8f194bdcd28da803dd512b0ac5709ce773f
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-28 08:57:58 -07:00
Daniel Verkamp
982095e51f doc: use spdk.io stylesheets
Some styling needs to be applied via the Doxygen stylesheet, since the
class names don't match up with what Bootstrap uses.

Change-Id: Ie7b38259496e262752750235b0630d59b00ae492
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 14:00:15 -07:00
Daniel Verkamp
c843092091 doc: add default Doxygen CSS
Prepare for customizations.

Change-Id: If35d604e71d5cfe814494d542c6ce4c632ac9df6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 14:00:15 -07:00
Daniel Verkamp
32526ba69f doc: enable Doxygen autobrief
This treats the first line of each doc comment as the brief for that
function automatically, rather than requiring an explicit \brief tag.

Change-Id: Ia264c1611ca4b367aeda2b7500cd60c4b72fb364
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 14:00:15 -07:00
Daniel Verkamp
a7cab063bc doc: add links and intro blurb to main page
Change-Id: Icc4e3add7d36804de968b4ad2136af773d044001
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 14:00:12 -07:00
Daniel Verkamp
60811b5bf7 doc: add Doxygen-generated header.html
Prepare to customize the header.

Change-Id: I97ab3d3ea57ca843df9a1f7d76bf00172bea02e7
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 10:06:37 -07:00
Daniel Verkamp
4b1f79b5e7 doc: merge ioat and nvme into a single Doxyfile
Add a top-level index page and convert the I/OAT and NVMe main pages
into normal pages.

Change-Id: I4e7c8d2fd43303a8aa56de921037dac96fe8a1a5
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-25 09:59:39 -07:00
Daniel Verkamp
4671dbd53f nvme: add compile-time assert for SGL alignment
Per the NVMe spec, SGL segments must be Qword (8-byte) aligned.  Add a
static assert to make sure this is true for the sgl member of struct
nvme_tracker (assuming the whole nvme_tracker is at least 8-byte aligned).

Change-Id: I827aa40b56de648d83f524a4f1e79c3202b676be
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-23 10:39:30 -07:00
Daniel Verkamp
6a3735e393 nvme_manage: show supported block sizes for format
Change-Id: I4da94631d9543c6e50b3cd4f8935845a1237ccab
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-23 10:16:18 -07:00
Cunyin Chang
db3fda2e68 nvme: handle NULL ioq array in nvme_ctrlr_destruct()
Fix a potential segmentation fault issue.

Change-Id: I39d2cd1850265ca0dfa987995011563cadeb5bb5
Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
2016-03-23 09:37:02 -07:00
Daniel Verkamp
55d9ff6a66 config: make -Werror optional and off by default
Allow end users to build the code even if, for example, warnings are
added with new compilers versions.

-Werror is still enforced for automated builds.

Change-Id: I567009d55cf5b941c452bd41d09f75d03b037209
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-18 10:42:28 -07:00
Cunyin Chang
eae688576a spdk: Add nvme format interface and unit tests.
Change-Id: Ie0506debf547a5fc011e116421387a5adb7abf0e
Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
2016-03-17 13:37:20 -07:00
Daniel Verkamp
4fc355ba68 examples/nvme/reserve: add malloc checks and frees
Change-Id: I576ac640c3c8a94237e5437e7e7f029d8526c071
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-17 10:07:55 -07:00
Daniel Verkamp
e3eba25d92 test/nvme/sgl: free SGL element buffers
Change-Id: I1bfcbda4722ae42bd54433bf43e5c954b0775f01
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
af058fd758 test/nvme/sgl: calculate physical address earlier
The next_sge callback can be called multiple times for a single I/O if
the I/O is split.  Get the physical address for each element once
instead of every time the SGL is walked.

Also bake the SGL element offset into the physical address.

Change-Id: I5d83426a234ffe9d13b89621077dbbb1561181c9
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
e1c602bdc3 test/nvme/sgl: remove unused pci_dev field
Change-Id: Icf85717e43476d1f9f0856f2ece3afa6743f555a
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
51f7c833f3 test/nvme/sgl: factor out common len calculation
Also use uint32_t consistently for counting SGL elements.

Change-Id: Ibeffffdc5e0eccd11681703cd333bfb64319e164
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
50e43f1ea0 test/nvme/sgl: add SGL element offset field
This allows us to test elements with particular (mis-)alignments without
depending on the internal behavior of the DPDK allocator.

Change-Id: I006358b82ae3a677353333954ba88d1bcfe289f6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
dffd55353b test/nvme/sgl: replace iovec with custom struct
There's no reason to use the system-defined iovec structure; we only use
it for our internal scatter-gather callbacks.  Define our own structure
so it can be extended.

Change-Id: Ifc055adfdae8cddd53e7f5d638a24f1e812b1ac6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:53:56 -07:00
Daniel Verkamp
57a1e89303 check_format.sh: enforce newline at end of file
Change-Id: I4fd1338ec3d95ffcd8a0727e87b845399676ccfa
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:35:17 -07:00
Daniel Verkamp
9d9023846c test/nvme/sgl: print test names
This helps identify which iteration of the test failed.

Change-Id: I9186de08ea8217348b8ee61b0ecba4e9d7ab986e
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 15:34:45 -07:00
Daniel Verkamp
1698689412 nvme_manage: handle fgets() failure
fgets() will return NULL if it encounters EOF.

Change-Id: I35b1744514f2a90d6e95156c3916a18c1a4ecce2
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 14:39:42 -07:00
Daniel Verkamp
58e46b9469 doc/nvme: fix outdated references
Change-Id: I90d62dce25c5e9fdd0b346a585e6ec361dafb19d
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 14:39:28 -07:00
Daniel Verkamp
eb555b139e nvme: add return code to nvme_qpair_submit_request
If the controller is failed, attempting to submit additional I/O is
futile - it will be immediately failed using the completion callback,
which can result in infinite recursion if the application code resubmits
I/Os on failure.

Instead, provide a way for request submission to indicate failure, and
use it to exit early if the controller is failed; this can only happen
when a reset failed (timed out).

If a request is submitted directly by the user when the controller has
failed, we can return an error code directly.  For the case where I/O
was queued and is being resubmitted after a reset, we still need to call
the completion handler via _nvme_fail_request_ctrlr_failed().

Change-Id: I9e144328d524b25db2acf48e923b584746e8d0b6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 12:16:47 -07:00
Daniel Verkamp
c1592f3880 autotest: shorten nvme/perf runtime
This test is only intended to validate functionality, not actual
performance, so one second is plenty.

Change-Id: I2ff198c035226b50a113f9ff189c1abbd0fd1c17
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 12:10:32 -07:00
Daniel Verkamp
7198a4701a build: don't print subdir banners
Since the individual build steps include the path now, the subdirectory
printouts are less useful (especially with parallel make, where output
from multiple subdirs gets mixed together).

Change-Id: Ied71d39b360b847ca32ccd3547def751ddd9434c
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 08:15:42 -07:00
Daniel Verkamp
bfafdec9ea autotest: add timing enter/exit for setup/cleanup
Change-Id: I5367f3d11db016674b4bc0e77fd81bf363c2e55c
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 08:14:45 -07:00
Daniel Verkamp
4ad99808f2 nvme: allow user to override controller defaults
Provide a new structure, spdk_nvme_ctrlr_opts, to let the user modify
the default controller initialization options during probe/attach.

Currently, only the number of queue pairs can be modified in this way;
other options will be added later.

Change-Id: Ie27b9429291d93a9353c0d820f0ad467d3b0e7cb
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-16 08:14:15 -07:00
Liang Yan
23f95df80d nvme/test: Add qprio unit test
Change-Id: I2e7cac7f7a0e65d6a15fed10ef2c0eb46b71c5e9
Signed-off-by: Liang Yan <liangx.yan@intel.com>
2016-03-15 13:02:21 -07:00
Daniel Verkamp
cf0871a57e ioat: make channel allocation explicit
Add a parameter to each I/OAT library function that requires a channel
instead of implicitly using the thread-local channel registration model.

I/OAT channels are already reported by the spdk_ioat_probe() attach
callback, so no infrastructure for channel allocation is necessary.

Change-Id: I8731126fcaea9fe2bafc41a3f75c969a100ef8f0
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-15 09:50:17 -07:00
Daniel Verkamp
1dd7473078 nvme: create tracker pool in a single allocation
Replace the previous code that allocated each tracker individually with
one large allocation per queue pair.

struct nvme_tracker is now explicitly padded to reach exactly 4096 bytes
to allow normal array indexing to work correctly while maintaining the
alignment requirement that ensures each tracker's PRP list does not
cross a page boundary.

This also allows removal of the act_tr array, since the tr array can be
indexed directly now, and each tracker can store its own active state.

Change-Id: Ia7c51735b96594d12f7f478cefcc4aedc84207ad
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-15 09:20:25 -07:00
Daniel Verkamp
3272320c73 nvme: make I/O queue allocation explicit
The previous method for registering I/O queues did not allow the user
to specify queue priority for weighted round robin arbitration, and it
limited the application to one queue per controller per thread.

Change the API to require explicit allocation of each queue for each
controller using the new function spdk_nvme_ctrlr_alloc_io_qpair().

Each function that submits a command on an I/O queue now takes an
explicit qpair parameter rather than implicitly using the thread-local
queue.

This also allows the application to allocate different numbers of
threads per controller; previously, the number of queues was capped at
the smallest value supported by any attached controller.

Weighted round robin arbitration is not supported yet; additional
changes to the controller startup process are required to enable
alternate arbitration methods.

Change-Id: Ia33be1050a6953bc5a3cca9284aefcd95b01116e
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-14 16:00:54 -07:00
Daniel Verkamp
9f67a07fdc nvme: use full nvme_tracker space for PRP list
Since the nvme_tracker struct was extended to allow space for 253 SGL
descriptors at 16 bytes each, we can use the same amount of space in the
other branch of the union to store 506 PRP list entries at 8 bytes each.

This increases the maximum supported I/O size for PRP-only devices from
128 KB to slightly under 2 MB.

Change-Id: I2b9905be41343ff360b4cdaccca87ea6f753e89c
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-14 08:25:57 -07:00
Daniel Verkamp
68ef53d128 nvme: make nvme_tracker fit in a single page
Also add a compile-time assert to make sure this doesn't accidentally
break again in the future.

Change-Id: I4d18cfbf21392291e1bdd76eff055429009d28d6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-14 08:25:57 -07:00
Daniel Verkamp
a606a3ed5c nvme/reset: simplify timing logic and shorten test
Change-Id: I070223e25988e9a35a4df91331ea88bc4f7c5f13
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-14 08:12:36 -07:00
Daniel Verkamp
cc0b900e29 nvme: don't set interrupt vector in create_io_cq
nvme_ctrlr_cmd_create_io_cq() was using the queue ID as the
IV (Interrupt Vector) field in the Create I/O Completion Queue command.

Since the SPDK NVMe driver does not enable interrupts, this is
misleading at best.

Change-Id: I3ea53701fdb9f21d9dc8d8fe20ccf2833b76cfbf
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-14 08:04:44 -07:00
Ben Walker
badade1eed Update the README to point users at the examples.
This is very minimal and needs to be expanded, but
at least point the users at the examples as the next
place to go.

Change-Id: I74025f7addb994f97d01accb89d2e9bc870740bf
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2016-03-11 10:23:03 -07:00
Ben Walker
add1515c86 Clarifications to README.md
* List the components in the development kit
* Mention the examples directory
* Add installation commands for dependencies

Change-Id: I31302b3cd2e5df4f24b8da30af66f9f1daa11eaa
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2016-03-11 10:08:16 -07:00
Daniel Verkamp
e3cabfafd7 nvme_manage: accept more PCI address formats
Change-Id: Ie8177b320271c9e7cb9b2216dbdd9c3c11f39579
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-11 09:37:21 -07:00
Cunyin Chang
73b0afa867 nvme manage: nvme manage tool optimization.
Change-Id: I2647451c168a7bcdc739a5f599810387f52b17a8
Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
2016-03-11 09:33:10 -07:00
Cunyin Chang
30089f8939 nvme manage: Add interface for format progress indicator.
This patch just implement the feature of format progress indicator.
the NVMe available does't support FPI currently.

Change-Id: Ie937591fb1720d8a062354322aabcc95ff14b2d3
Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
2016-03-10 09:02:06 +08:00
Daniel Verkamp
17005b5756 nvme: remove nvme_request::timeout field
This field is write-only in the current code; the NVMe library does
not track timeouts on requests.

Change-Id: I50e53bb3c299bf16912c48be8aad3eec829154af
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-09 16:56:05 -07:00
Changpeng Liu
2374599671 spdk: fix wrong length parameter for large IO when uses hardware SGL
When I/O spans a stripe boundary, the driver splits the request into
multiple requests, so for 1 segment memory larger than the stripe
size, we also need to split the segment memory.

Change-Id: I22ea5734d7066865a57a3c90fe18d5f76f373f1d
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
2016-03-09 15:22:08 -07:00
Daniel Verkamp
04cde460cf Add a changelog
Import the release notes from previous releases and fill out the major
features for the next release.

Change-Id: I5050d6cc83a92fac4f1dbed5f7ef039cca208765
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-09 07:25:09 -07:00
Daniel Verkamp
d6540ae907 build: don't print top-level directory
For example, if the source code is located in a directory called "spdk",
don't print the "spdk/" prefix on all of the directories.

Change-Id: I9adc650b13e013773450c721c8434c6e5afeecc2
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-08 10:59:56 -07:00
Daniel Verkamp
bafbc89d3a build: print path in CC, LINK, and LIB messages
This makes it somewhat clearer what is happening during parallel
builds (make -j).

Change-Id: Ibbe8862da7600e784cba64cd333086f1473455ac
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-08 10:43:29 -07:00
Daniel Verkamp
dfeacab2e2 nvme/reset: clean up Makefile
Remove the common code that was factored out to spdk.common.mk.

Change-Id: I2a6265fa144b2c03f3484e2aa528fd1e15d13429
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-08 10:43:27 -07:00
Daniel Verkamp
b1b84a2a66 nvme_manage: use inttypes.h SCN macro for uint64_t
Also switch from %d to %i to allow either decimal or hexidecimal input.

Change-Id: Ia866f9ab804d09e4bf8a2726b8db99208637a5ed
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
2016-03-08 08:45:41 -07:00