v2: rebased on top of block-next/block branch Zoned Namespace (ZNS) Command Set is a newly introduced command set published by the NVM Express, Inc. organization as TP 4053. The main design goals of ZNS are to provide hardware designers the means to reduce NVMe controller complexity and to allow achieving a better I/O latency and throughput. SSDs that implement this interface are commonly known as ZNS SSDs.
This command set is implementing a zoned storage model, similarly to ZAC/ZBC. As such, there is already support in Linux, allowing one to perform the majority of tasks needed for managing ZNS SSDs. The Zoned Namespace Command Set relies on another TP, known as Namespace Types (NVMe TP 4056), which introduces support for having multiple command sets per namespace. Both ZNS and Namespace Types specifications can be downloaded by visiting the following link - https://nvmexpress.org/wp-content/uploads/NVM-Express-1.4-Ratified-TPs.zip This patch series adds Namespace Types support and zoned namespace emulation capability to the existing NVMe PCI driver. The patchset is organized as follows - The first several patches are preparatory and are added to allow for an easier review of the subsequent commits. The group of patches that follows adds NS Types support with only NVM Command Set being available. Finally, the last group of commits makes definitions and adds new code to support Zoned Namespace Command Set. Based-on: <20200609205944.3549240-1-ebl...@redhat.com> Ajay Joshi (1): hw/block/nvme: Define 64 bit cqe.result Dmitry Fomichev (15): hw/block/nvme: Move NvmeRequest has_sg field to a bit flag hw/block/nvme: Clean up unused AER definitions hw/block/nvme: Add Commands Supported and Effects log hw/block/nvme: Define trace events related to NS Types hw/block/nvme: Make Zoned NS Command Set definitions hw/block/nvme: Define Zoned NS Command Set trace events hw/block/nvme: Support Zoned Namespace Command Set hw/block/nvme: Introduce max active and open zone limits hw/block/nvme: Simulate Zone Active excursions hw/block/nvme: Set Finish/Reset Zone Recommended attributes hw/block/nvme: Generate zone AENs hw/block/nvme: Support Zone Descriptor Extensions hw/block/nvme: Add injection of Offline/Read-Only zones hw/block/nvme: Use zone metadata file for persistence hw/block/nvme: Document zoned parameters in usage text Niklas Cassel (2): hw/block/nvme: Introduce the Namespace Types definitions hw/block/nvme: Add support for Namespace Types block/nvme.c | 2 +- block/trace-events | 2 +- hw/block/nvme.c | 2316 ++++++++++++++++++++++++++++++++++++++++- hw/block/nvme.h | 228 +++- hw/block/trace-events | 56 + include/block/nvme.h | 282 ++++- 6 files changed, 2820 insertions(+), 66 deletions(-) -- 2.21.0