{
  "slug": "nvme-controller-shutdown",
  "term": "NVMe controller shutdown",
  "aliases": [
    "NVMe shutdown notification",
    "CC.SHN",
    "CSTS.SHST"
  ],
  "definition": "NVMe controller shutdown is a host-requested protocol that prepares a controller for power removal and reports progress separately from the initiating notification.",
  "note": "The host sets CC.SHN to 01b for normal shutdown or 10b for abrupt shutdown. Abrupt shutdown is still signaled, not an unexpected removal of power. For normal PCIe shutdown of an enabled controller, stop new I/O and allow outstanding commands to complete; delete I/O queues if implemented before notification. Controller-shutdown completion is CSTS.SHST = 10b with CSTS.ST = 0; sending CC.SHN alone is insufficient. Base 2.3 recommends waiting at least the reported RTD3 Entry Latency, or one second if zero; a minimum wait is not proof of completion. [nvme-poweroff]\n\nPower scope matters: CAP.CPS can require every controller in a domain or NVM subsystem to be ready before power removal. Controller shutdown is distinct from the separately specified NVM Subsystem Shutdown mechanism. A Controller Level Reset may preserve readiness or reinitialize media; qualifying out-of-band media access can also invalidate readiness. [nvme-poweroff]\n\nTransitioning CC.EN from 1 to 0 requests a Controller Reset, not shutdown. Linux v6.12 waits on SHST for shutdown but RDY for reset, and its wait routine reports an error on timeout. A host timeout is not observed controller completion. [linux-poweroff]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "A completed device protocol does not certify application transaction atomicity or recover writes that never reached the controller.",
      "citationIds": [
        "nvme-poweroff"
      ]
    }
  ],
  "related": [
    "nvme",
    "nvme-unexpected-power-losses",
    "nvme-volatile-write-cache",
    "nvm-subsystem",
    "power-loss-protection"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "nvme-poweroff",
      "title": "NVM Express Base 2.3, sections 3.6-3.7, Figures 41, 42 and 85: notification, completion, power scope and reset.",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.3-2025.08.01-Ratified.pdf",
      "accessed": "2026-11-13"
    },
    {
      "id": "linux-poweroff",
      "title": "Linux v6.12, drivers/nvme/host/core.c: nvme_disable_ctrl and nvme_wait_ready.",
      "url": "https://github.com/torvalds/linux/blob/v6.12/drivers/nvme/host/core.c#L2251-L2299",
      "accessed": "2026-11-13"
    },
    {
      "id": "hesela-health",
      "title": "Hesela: NVMe health-log interpretation and controller power-off readiness.",
      "url": "https://hesela.com/analyses/nvme-health-log-coverage/#controller-poweroff",
      "accessed": "2026-11-13"
    }
  ],
  "updated": "2026-11-13"
}
