diff options
author | Keith Busch <kbusch@kernel.org> | 2021-10-14 19:45:42 +0300 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2021-10-20 20:23:29 +0300 |
commit | 58847f12fe7823c56f844218abcca6920901097d (patch) | |
tree | 99d693288812f084c2cd71ff1226b873962b800d /drivers/nvme | |
parent | 09748122009aed7bfaa7acc33c10c083a4758322 (diff) | |
download | linux-58847f12fe7823c56f844218abcca6920901097d.tar.xz |
nvme-pci: clear shadow doorbell memory on resets
The host memory doorbell and event buffers need to be initialized on
each reset so the driver doesn't observe stale values from the previous
instantiation.
Signed-off-by: Keith Busch <kbusch@kernel.org>
Tested-by: John Levon <john.levon@nutanix.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/nvme')
-rw-r--r-- | drivers/nvme/host/pci.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index ed684874842f..6e05cfb4879f 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -245,8 +245,15 @@ static int nvme_dbbuf_dma_alloc(struct nvme_dev *dev) { unsigned int mem_size = nvme_dbbuf_size(dev); - if (dev->dbbuf_dbs) + if (dev->dbbuf_dbs) { + /* + * Clear the dbbuf memory so the driver doesn't observe stale + * values from the previous instantiation. + */ + memset(dev->dbbuf_dbs, 0, mem_size); + memset(dev->dbbuf_eis, 0, mem_size); return 0; + } dev->dbbuf_dbs = dma_alloc_coherent(dev->dev, mem_size, &dev->dbbuf_dbs_dma_addr, |