Skip to content

Commit 8ca4fc3

Browse files
author
Christoph Hellwig
committed
docs, nvme: add a feature and quirk policy document
This adds a document about what specification features are supported by the Linux NVMe driver, and what qualifies for a quirk if an implementation has problems following the specification. Signed-off-by: Jens Axboe <[email protected]> Signed-off-by: Keith Busch <[email protected]> Signed-off-by: Sagi Grimberg <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Randy Dunlap <[email protected]> Acked-by: Jonathan Corbet <[email protected]>
1 parent 88d356c commit 8ca4fc3

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed

Documentation/maintainer/maintainer-entry-profile.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,4 @@ to do something different in the near future.
104104
../riscv/patch-acceptance
105105
../driver-api/media/maintainer-entry-profile
106106
../driver-api/vfio-pci-device-specific-driver-acceptance
107+
../nvme/feature-and-quirk-policy
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
=======================================
4+
Linux NVMe feature and and quirk policy
5+
=======================================
6+
7+
This file explains the policy used to decide what is supported by the
8+
Linux NVMe driver and what is not.
9+
10+
11+
Introduction
12+
============
13+
14+
NVM Express is an open collection of standards and information.
15+
16+
The Linux NVMe host driver in drivers/nvme/host/ supports devices
17+
implementing the NVM Express (NVMe) family of specifications, which
18+
currently consists of a number of documents:
19+
20+
- the NVMe Base specification
21+
- various Command Set specifications (e.g. NVM Command Set)
22+
- various Transport specifications (e.g. PCIe, Fibre Channel, RDMA, TCP)
23+
- the NVMe Management Interface specification
24+
25+
See https://nvmexpress.org/developers/ for the NVMe specifications.
26+
27+
28+
Supported features
29+
==================
30+
31+
NVMe is a large suite of specifications, and contains features that are only
32+
useful or suitable for specific use-cases. It is important to note that Linux
33+
does not aim to implement every feature in the specification. Every additional
34+
feature implemented introduces more code, more maintenance and potentially more
35+
bugs. Hence there is an inherent tradeoff between functionality and
36+
maintainability of the NVMe host driver.
37+
38+
Any feature implemented in the Linux NVMe host driver must support the
39+
following requirements:
40+
41+
1. The feature is specified in a release version of an official NVMe
42+
specification, or in a ratified Technical Proposal (TP) that is
43+
available on NVMe website. Or if it is not directly related to the
44+
on-wire protocol, does not contradict any of the NVMe specifications.
45+
2. Does not conflict with the Linux architecture, nor the design of the
46+
NVMe host driver.
47+
3. Has a clear, indisputable value-proposition and a wide consensus across
48+
the community.
49+
50+
Vendor specific extensions are generally not supported in the NVMe host
51+
driver.
52+
53+
It is strongly recommended to work with the Linux NVMe and block layer
54+
maintainers and get feedback on specification changes that are intended
55+
to be used by the Linux NVMe host driver in order to avoid conflict at a
56+
later stage.
57+
58+
59+
Quirks
60+
======
61+
62+
Sometimes implementations of open standards fail to correctly implement parts
63+
of the standards. Linux uses identifier-based quirks to work around such
64+
implementation bugs. The intent of quirks is to deal with widely available
65+
hardware, usually consumer, which Linux users can't use without these quirks.
66+
Typically these implementations are not or only superficially tested with Linux
67+
by the hardware manufacturer.
68+
69+
The Linux NVMe maintainers decide ad hoc whether to quirk implementations
70+
based on the impact of the problem to Linux users and how it impacts
71+
maintainability of the driver. In general quirks are a last resort, if no
72+
firmware updates or other workarounds are available from the vendor.
73+
74+
Quirks will not be added to the Linux kernel for hardware that isn't available
75+
on the mass market. Hardware that fails qualification for enterprise Linux
76+
distributions, ChromeOS, Android or other consumers of the Linux kernel
77+
should be fixed before it is shipped instead of relying on Linux quirks.

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14827,6 +14827,7 @@ L: [email protected]
1482714827
S: Supported
1482814828
W: http://git.infradead.org/nvme.git
1482914829
T: git://git.infradead.org/nvme.git
14830+
F: Documentation/nvme/
1483014831
F: drivers/nvme/host/
1483114832
F: drivers/nvme/common/
1483214833
F: include/linux/nvme*

0 commit comments

Comments
 (0)