[PATCH] NVMe: do not touch sq door bell if nvmeq has been suspended
Wenbo Wang
wenbo.wang at memblaze.com
Tue Feb 2 16:49:14 PST 2016
nvme interrupt handler touches cq door bell, so actually before unmap it must be taken care of too. Currently it checks cq_vector >= 0 to avoid touching unmapped door bell.
I think it is better to let queue_rq and interrupt handler use the same mechanism to detect unmap, by driver itself (e.g. cq_vector) or by block layer (e.g. a new API to guarantee no inflight IO under hw queue).
-----Original Message-----
From: Sagi Grimberg [mailto:sagig at dev.mellanox.co.il]
Sent: Wednesday, February 3, 2016 1:20 AM
To: Keith Busch
Cc: Wenbo Wang; Jens Axboe; Wenbo Wang; Wenwei.Tao; linux-kernel at vger.kernel.org; linux-nvme at lists.infradead.org
Subject: Re: [PATCH] NVMe: do not touch sq door bell if nvmeq has been suspended
> We free the transfer buffers when a command is cancelled. The
> controller, however, may still own the command and may try to write to
> them. We have to fence the controller off from being able to do that,
> so we can't cancel inflight commands while the PCI device is still bus master enabled.
>
> In a perfect world, we could trust in disabling with NVMe registers,
> but sometimes we can't rely on that.
OK, I wasn't aware that we cannot rely on that.
So it looks like we cannot change the ordering. So this leaves us with the need to guarantee that no queue_rq is inflight before we unmap.
More information about the Linux-nvme
mailing list