Message ID | 20210111123223.76248-2-its@irrelevant.dk |
---|---|
State | New |
Headers | show |
Series | hw/block/nvme: zoned misc fixes | expand |
On Mon, Jan 11, 2021 at 01:32:18PM +0100, Klaus Jensen wrote: > From: Klaus Jensen <k.jensen@samsung.com> > > A shutdown is only about flushing stuff. It is the host that should > delete any queues, so do not perform a reset here. > > Also, on shutdown, make sure that the PMR is flushed if in use. > > Fixes: 368f4e752cf9 ("hw/block/nvme: Process controller reset and shutdown differently") > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> Yes, and exiting a controller shutdown state requires a controller reset, so a functioning host shouldn't require the controller behave the way it's currently done. Reviewed-by: Keith Busch <kbusch@kernel.org>
diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 0854ee307227..cba509e90537 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3413,7 +3413,7 @@ static void nvme_process_sq(void *opaque) } } -static void nvme_clear_ctrl(NvmeCtrl *n) +static void nvme_ctrl_reset(NvmeCtrl *n) { NvmeNamespace *ns; int i; @@ -3447,11 +3447,7 @@ static void nvme_clear_ctrl(NvmeCtrl *n) n->aer_queued = 0; n->outstanding_aers = 0; n->qs_created = false; -} -static void nvme_ctrl_reset(NvmeCtrl *n) -{ - nvme_clear_ctrl(n); n->bar.cc = 0; } @@ -3460,7 +3456,9 @@ static void nvme_ctrl_shutdown(NvmeCtrl *n) NvmeNamespace *ns; int i; - nvme_clear_ctrl(n); + if (n->pmrdev) { + memory_region_msync(&n->pmrdev->mr, 0, n->pmrdev->size); + } for (i = 1; i <= n->num_namespaces; i++) { ns = nvme_ns(n, i); @@ -4303,7 +4301,7 @@ static void nvme_exit(PCIDevice *pci_dev) NvmeNamespace *ns; int i; - nvme_ctrl_shutdown(n); + nvme_ctrl_reset(n); for (i = 1; i <= n->num_namespaces; i++) { ns = nvme_ns(n, i);