mbox series

[v2,00/14] hw/block/nvme: zoned namespace command set

Message ID 20200929231917.433586-1-its@irrelevant.dk (mailing list archive)
Headers show
Series hw/block/nvme: zoned namespace command set | expand

Message

Klaus Jensen Sept. 29, 2020, 11:19 p.m. UTC
From: Klaus Jensen <k.jensen@samsung.com>

So, things escalated a bit.

I'm removing the old cover letter. I don't think we need it anymore - you all
know the reason I keep posting versions of this implementation ;)

Based-on: <20200922084533.1273962-1-its@irrelevant.dk>

Changes for v2
~~~~~~~~~~~~~~

  * "hw/block/nvme: add support for dulbe and block utilization tracking"
    - Factor out pstate init/load into separate functions.

    - Fixed a stupid off-by-1 bug that would trigger when resetting the
      last zone.

    - I added a more formalized pstate file format that includes a
      header. This is pretty similar to what is done in Dmitry's series,
      but with fewer fields. The device parameters for nvme-ns are still
      the "authoritative" ones, so if any parameters that influence LBA
      size, number of zones, etc. do not match, an error indicating the
      discrepancy will be produced. IIRC, Dmitry's version does the
      same.

      It is set up such that newer versions can load pstate files from
      older versions. The file format header is not unlike a standard
      nvme datastructure with reserved areas. This means that when
      adding new command sets that require persistent state, it is not
      needed to bump the version number, unless the header has to change
      dramatically.  This is demonstrated when the zoned namespace
      command set support is added in "hw/block/nvme: add basic
      read/write for zoned namespaces".

  * "hw/block/nvme: add basic read/write for zoned namespaces"
    - The device will now transition all opened zones to Closed on
      "normal shutdown". You can force the "transition to Full" behavior
      by killing QEMU from the monitor.

  * "hw/block/nvme: add the zone append command"
    - Slightly reordered the logic so a LBA Out of Range error is
      returned before Invalid Field in Command for normal read/write
      commands.

  * "hw/block/nvme: support zone active excursions"
    - Dropped. Optional and non-critical.

  * "hw/block/nvme: support reset/finish recommended limits"
    - Dropped. Optional and non-critical.

Gollu Appalanaidu (1):
  hw/block/nvme: add commands supported and effects log page

Klaus Jensen (13):
  hw/block/nvme: add nsid to get/setfeat trace events
  hw/block/nvme: add trace event for requests with non-zero status code
  hw/block/nvme: make lba data size configurable
  hw/block/nvme: reject io commands if only admin command set selected
  hw/block/nvme: consolidate read, write and write zeroes
  hw/block/nvme: add support for dulbe and block utilization tracking
  hw/block/nvme: support namespace types
  hw/block/nvme: add basic read/write for zoned namespaces
  hw/block/nvme: add the zone management receive command
  hw/block/nvme: add the zone management send command
  hw/block/nvme: add the zone append command
  hw/block/nvme: track and enforce zone resources
  hw/block/nvme: allow open to close transitions by controller

 docs/specs/nvme.txt   |   47 +-
 hw/block/nvme-ns.h    |  180 ++++-
 hw/block/nvme.h       |   22 +
 include/block/nvme.h  |  230 +++++-
 block/nvme.c          |    4 +-
 hw/block/nvme-ns.c    |  456 +++++++++++-
 hw/block/nvme.c       | 1560 +++++++++++++++++++++++++++++++++++++++--
 hw/block/trace-events |   42 +-
 8 files changed, 2443 insertions(+), 98 deletions(-)