[lkml]   [2022]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] 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 <>
    Signed-off-by: Keith Busch <>
    Signed-off-by: Sagi Grimberg <>
    Signed-off-by: Christoph Hellwig <>
    Documentation/process/index.rst | 1 +
    .../process/nvme-feature-and-quirk-policy.rst | 77 +++++++++++++++++++
    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:
    + 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.
    +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 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
    +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.
    +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.
    index bb77a3ed9d5423..59e9f2dfa842ad 100644
    @@ -14827,6 +14827,7 @@ L:
    S: Supported
    T: git://
    +F: Documentation/process/nvme-feature-and-quirk-policy.rst
    F: drivers/nvme/host/
    F: drivers/nvme/common/
    F: include/linux/nvme*
     \ /
      Last update: 2022-12-15 13:52    [W:3.060 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site