From: Christoph Hellwig <hch@lst.de>
To: Jonathan Corbet <corbet@lwn.net>,
axboe@meta.com, sagi@grimberg.me, kbusch@kernel.org
Cc: linux-nvme@lists.infradead.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Subject: [PATCH] docs, nvme: add a feature and quirk policy document
Date: Thu, 15 Dec 2022 13:51:30 +0100 [thread overview]
Message-ID: <20221215125130.261098-1-hch@lst.de> (raw)
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 <axboe@kernel.dk>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
Documentation/process/index.rst | 1 +
.../process/nvme-feature-and-quirk-policy.rst | 77 +++++++++++++++++++
MAINTAINERS | 1 +
3 files changed, 79 insertions(+)
create mode 100644 Documentation/process/nvme-feature-and-quirk-policy.rst
diff --git a/Documentation/process/index.rst b/Documentation/process/index.rst
index d4b6217472b0a0..0dc33994ddefc5 100644
--- a/Documentation/process/index.rst
+++ b/Documentation/process/index.rst
@@ -50,6 +50,7 @@ Other guides to the community that are of interest to most developers are:
embargoed-hardware-issues
maintainers
researcher-guidelines
+ nvme-feature-and-quirk-policy
These are some overall technical guides that have been put here for now for
lack of a better place.
diff --git a/Documentation/process/nvme-feature-and-quirk-policy.rst b/Documentation/process/nvme-feature-and-quirk-policy.rst
new file mode 100644
index 00000000000000..eee19f3d9904bd
--- /dev/null
+++ b/Documentation/process/nvme-feature-and-quirk-policy.rst
@@ -0,0 +1,77 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=======================================
+Linux NVMe feature and and quirk policy
+=======================================
+
+This file explains the policy used to decide what is supported by the
+Linux NVMe driver and what is not.
+
+
+Introduction
+============
+
+NVM Express is an open collection of standards and information.
+
+The Linux NVMe host driver in drivers/nvme/host/ supports devices
+implementing the NVM Express (NVMe) family of specifications, which
+currently consists of a number of documents:
+
+ - the NVMe Base specification
+ - various Command Set specifications (e.g. NVM Command Set)
+ - various Transport specifications (e.g. PCIe, Fibre Channel, RDMA, TCP)
+ - the NVMe Management Interface specification
+
+See https://nvmexpress.org/developers/ for the NVMe specifications.
+
+
+Supported features
+==================
+
+NVMe is a large suite of specifications, and contains features that are only
+useful or suitable for specific use-cases. It is important to note that Linux
+does not aim to implement every feature in the specification. Every additional
+feature implemented introduces more code, more maintenance and potentially more
+bugs. Hence there is an inherent tradeoff between functionality and
+maintainability of the NVMe host driver.
+
+Any feature implemented in the Linux NVMe host driver must support the
+following requirements:
+
+ 1. The feature is specified in a release version of an official NVMe
+ specification, or in a ratified Technical Proposal (TP) that is
+ available on NVMe website. Or if it is not directly related to the
+ on-wire protocol, does not contradict any of the NVMe specifications.
+ 2. Does not conflict with the Linux architecture, nor the design of the
+ NVMe host driver.
+ 3. Has a clear, indisputable value-proposition and a wide consensus across
+ the community.
+
+Vendor specific extensions are generally not supported in the NVMe host
+driver.
+
+It is strongly recommended to work with the Linux NVMe and block layer
+maintainers and get feedback on specification changes that are intended
+to be used by the Linux NVMe host driver in order to avoid conflict at a
+later stage.
+
+
+Quirks
+======
+
+Sometimes implementations of open standards fail to correctly implement parts
+of the standards. Linux uses identifiers based quirks to work around such
+implementation bugs. The intent of quirks is to deal with widely available
+hardware, usually consumer, which Linux users can't use without these quirks.
+Typically these implementations are not or only superficially tested with Linux
+by the hardware manufacturer.
+
+The Linux NVMe maintainers decide ad hoc whether to quirk implementations
+based on the impact of the problem to Linux users and how it impacts
+maintainability of the driver. In general quirks are a last resort, if no
+firmware updates or other workarounds are available from the vendor.
+
+Quirks will not be added to the Linux kernel for hardware that isn't available
+on the mass market. Hardware that fails qualification for enterprise Linux
+distributions, ChromeOS, Android or other consumers of the Linux kernel
+should be fixed before it is shipped instead of rely on Linux quirk.
diff --git a/MAINTAINERS b/MAINTAINERS
index bb77a3ed9d5423..59e9f2dfa842ad 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14827,6 +14827,7 @@ L: linux-nvme@lists.infradead.org
S: Supported
W: http://git.infradead.org/nvme.git
T: git://git.infradead.org/nvme.git
+F: Documentation/process/nvme-feature-and-quirk-policy.rst
F: drivers/nvme/host/
F: drivers/nvme/common/
F: include/linux/nvme*
--
2.35.1
next reply other threads:[~2022-12-15 12:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-15 12:51 Christoph Hellwig [this message]
2022-12-15 13:08 ` Jonathan Corbet
2022-12-15 13:26 ` Christoph Hellwig
2022-12-21 8:34 ` Christoph Hellwig
2022-12-21 13:45 ` Jonathan Corbet
2022-12-22 16:09 ` Christoph Hellwig
2022-12-22 20:54 ` Jonathan Corbet
2022-12-23 9:33 ` Christoph Hellwig
2022-12-23 14:16 ` Jonathan Corbet
2022-12-15 17:04 ` Randy Dunlap
2022-12-16 7:24 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221215125130.261098-1-hch@lst.de \
--to=hch@lst.de \
--cc=axboe@kernel.dk \
--cc=axboe@meta.com \
--cc=corbet@lwn.net \
--cc=kbusch@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®