[PATCH 1/4] nvmet: pci-epf: Clear completion queue IRQ flag on delete
Niklas Cassel
cassel at kernel.org
Thu May 8 06:07:14 PDT 2025
On Thu, May 08, 2025 at 03:57:42PM +0900, Damien Le Moal wrote:
> The function nvmet_pci_epf_delete_cq() unconditionnally calls
s/unconditionnally/unconditionally/
> nvmet_pci_epf_remove_irq_vector() even for completion queues that do not
> have interrupts enabled. Furthermore, for completion queues that do
> have IRQ enabled, deleting and re-creating the completion queue leaves
> the flag NVMET_PCI_EPF_Q_IRQ_ENABLED set, even if the completion queue
> is being re-created with IRQ disabled.
>
> Fix these issues by calling nvmet_pci_epf_remove_irq_vector() only if
> NVMET_PCI_EPF_Q_IRQ_ENABLED is set and make sure to always clear that
> flag.
>
> Fixes: 0faa0fe6f90e ("nvmet: New NVMe PCI endpoint function target driver")
> Cc: stable at vger.kernel.org
> Signed-off-by: Damien Le Moal <dlemoal at kernel.org>
> ---
> drivers/nvme/target/pci-epf.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c
> index 7fab7f3d79b7..d5442991f2fb 100644
> --- a/drivers/nvme/target/pci-epf.c
> +++ b/drivers/nvme/target/pci-epf.c
> @@ -1344,7 +1344,8 @@ static u16 nvmet_pci_epf_delete_cq(struct nvmet_ctrl *tctrl, u16 cqid)
>
> cancel_delayed_work_sync(&cq->work);
> nvmet_pci_epf_drain_queue(cq);
> - nvmet_pci_epf_remove_irq_vector(ctrl, cq->vector);
> + if (test_and_clear_bit(NVMET_PCI_EPF_Q_IRQ_ENABLED, &cq->flags))
> + nvmet_pci_epf_remove_irq_vector(ctrl, cq->vector);
I agree that we should only call nvmet_pci_epf_remove_irq_vector() if
NVMET_PCI_EPF_Q_IRQ_ENABLED is set.
However, it looks a bit weird to explicitly only clear only this flag bit.
What about the other flag bits?
I would have expected a memset() of flags, or flags = 0; in either
.create_cq/.create_sq, or in .delete_cq/.delete_sq.
And it also seems that flag NVMET_PCI_EPF_Q_IS_SQ is unused, so that flag
can probably be dropped.
Kind regards,
Niklas
More information about the Linux-nvme
mailing list