* [PATCH 0/3] pci-epf and tcp fixes
@ 2025-02-10 0:28 Damien Le Moal
2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Damien Le Moal @ 2025-02-10 0:28 UTC (permalink / raw)
To: linux-nvme, Keith Busch, Christoph Hellwig, Sagi Grimberg
All,
3 patches in this series to fix a couple of issues with the PCI endpoint
function target driver and a trivial fix for a compilation warning with
the tcp fabrics host driver.
Damien Le Moal (3):
nvmet: pci-epf: Correctly initialize CSTS when enabling the controller
nvmet: pci-epf: Do not uselessly write the CSTS register
nvme: tcp: Fix compilation warning with W=1
drivers/nvme/host/tcp.c | 2 +-
drivers/nvme/target/pci-epf.c | 28 ++++++++++++++++++----------
2 files changed, 19 insertions(+), 11 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller 2025-02-10 0:28 [PATCH 0/3] pci-epf and tcp fixes Damien Le Moal @ 2025-02-10 0:28 ` Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 2025-02-10 0:28 ` [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register Damien Le Moal 2025-02-10 0:28 ` [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 Damien Le Moal 2 siblings, 2 replies; 10+ messages in thread From: Damien Le Moal @ 2025-02-10 0:28 UTC (permalink / raw) To: linux-nvme, Keith Busch, Christoph Hellwig, Sagi Grimberg The function nvmet_pci_epf_poll_cc_work() sets the NVME_CSTS_RDY bit of the controller status register (CSTS) when nvmet_pci_epf_enable_ctrl() returns success. However, since this function can be called several times (e.g. if the host reboots), instead of setting the bit in ctrl->csts, initialize this field to only have NVME_CSTS_RDY set. Conversely, if nvmet_pci_epf_enable_ctrl() fails, make sure to clear all bits from ctrl->csts. To simplify nvmet_pci_epf_poll_cc_work(), initialize ctrl->csts to NVME_CSTS_RDY directly inside nvmet_pci_epf_enable_ctrl() and clear this field in that function as well in case of a failure. To be consistent, move clearing the NVME_CSTS_RDY bit from ctrl->csts when the controller is being disabled from nvmet_pci_epf_poll_cc_work() into nvmet_pci_epf_disable_ctrl(). Fixes: 0faa0fe6f90e ("nvmet: New NVMe PCI endpoint function target driver") Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/nvme/target/pci-epf.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c index ac30b42cc622..efd4623fb002 100644 --- a/drivers/nvme/target/pci-epf.c +++ b/drivers/nvme/target/pci-epf.c @@ -1822,14 +1822,14 @@ static int nvmet_pci_epf_enable_ctrl(struct nvmet_pci_epf_ctrl *ctrl) if (ctrl->io_sqes < sizeof(struct nvme_command)) { dev_err(ctrl->dev, "Unsupported I/O SQES %zu (need %zu)\n", ctrl->io_sqes, sizeof(struct nvme_command)); - return -EINVAL; + goto err; } ctrl->io_cqes = 1UL << nvmet_cc_iocqes(ctrl->cc); if (ctrl->io_cqes < sizeof(struct nvme_completion)) { dev_err(ctrl->dev, "Unsupported I/O CQES %zu (need %zu)\n", ctrl->io_sqes, sizeof(struct nvme_completion)); - return -EINVAL; + goto err; } /* Create the admin queue. */ @@ -1844,7 +1844,7 @@ static int nvmet_pci_epf_enable_ctrl(struct nvmet_pci_epf_ctrl *ctrl) qsize, pci_addr, 0); if (status != NVME_SC_SUCCESS) { dev_err(ctrl->dev, "Failed to create admin completion queue\n"); - return -EINVAL; + goto err; } qsize = aqa & 0x00000fff; @@ -1854,17 +1854,22 @@ static int nvmet_pci_epf_enable_ctrl(struct nvmet_pci_epf_ctrl *ctrl) if (status != NVME_SC_SUCCESS) { dev_err(ctrl->dev, "Failed to create admin submission queue\n"); nvmet_pci_epf_delete_cq(ctrl->tctrl, 0); - return -EINVAL; + goto err; } ctrl->sq_ab = NVMET_PCI_EPF_SQ_AB; ctrl->irq_vector_threshold = NVMET_PCI_EPF_IV_THRESHOLD; ctrl->enabled = true; + ctrl->csts = NVME_CSTS_RDY; /* Start polling the controller SQs. */ schedule_delayed_work(&ctrl->poll_sqs, 0); return 0; + +err: + ctrl->csts = 0; + return -EINVAL; } static void nvmet_pci_epf_disable_ctrl(struct nvmet_pci_epf_ctrl *ctrl) @@ -1889,6 +1894,8 @@ static void nvmet_pci_epf_disable_ctrl(struct nvmet_pci_epf_ctrl *ctrl) /* Delete the admin queue last. */ nvmet_pci_epf_delete_sq(ctrl->tctrl, 0); nvmet_pci_epf_delete_cq(ctrl->tctrl, 0); + + ctrl->csts &= ~NVME_CSTS_RDY; } static void nvmet_pci_epf_poll_cc_work(struct work_struct *work) @@ -1909,13 +1916,10 @@ static void nvmet_pci_epf_poll_cc_work(struct work_struct *work) ret = nvmet_pci_epf_enable_ctrl(ctrl); if (ret) return; - ctrl->csts |= NVME_CSTS_RDY; } - if (!nvmet_cc_en(new_cc) && nvmet_cc_en(old_cc)) { + if (!nvmet_cc_en(new_cc) && nvmet_cc_en(old_cc)) nvmet_pci_epf_disable_ctrl(ctrl); - ctrl->csts &= ~NVME_CSTS_RDY; - } if (nvmet_cc_shn(new_cc) && !nvmet_cc_shn(old_cc)) { nvmet_pci_epf_disable_ctrl(ctrl); -- 2.48.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller 2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal @ 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2025-02-13 5:59 UTC (permalink / raw) To: Damien Le Moal; +Cc: linux-nvme, Keith Busch, Sagi Grimberg Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller 2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig @ 2025-02-17 7:48 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Sagi Grimberg @ 2025-02-17 7:48 UTC (permalink / raw) To: Damien Le Moal, linux-nvme, Keith Busch, Christoph Hellwig Reviewed-by: Sagi Grimberg <sagi@grimberg.me> ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register 2025-02-10 0:28 [PATCH 0/3] pci-epf and tcp fixes Damien Le Moal 2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal @ 2025-02-10 0:28 ` Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 2025-02-10 0:28 ` [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 Damien Le Moal 2 siblings, 2 replies; 10+ messages in thread From: Damien Le Moal @ 2025-02-10 0:28 UTC (permalink / raw) To: linux-nvme, Keith Busch, Christoph Hellwig, Sagi Grimberg The function nvmet_pci_epf_poll_cc_work() will do nothing if there are no changes to the controller configuration (CC) register. However, even for such case, this function still calls nvmet_update_cc() and uselessly writes the CSTS register. Avoid this by simply rescheduling the poll_cc work if the CC register has not changed. Also reschedule the poll_cc work if the function nvmet_pci_epf_enable_ctrl() fails to allow the host the chance to try again enabling the controller. While at it, since there is no point in trying to handle the CC register as quickly as possible, change the poll_cc work scheduling interval to 10 ms (from 5ms), to avoid excessive read accesses to that register. Fixes: 0faa0fe6f90e ("nvmet: New NVMe PCI endpoint function target driver") Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/nvme/target/pci-epf.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c index efd4623fb002..b646a8f468ea 100644 --- a/drivers/nvme/target/pci-epf.c +++ b/drivers/nvme/target/pci-epf.c @@ -46,7 +46,7 @@ static DEFINE_MUTEX(nvmet_pci_epf_ports_mutex); /* * BAR CC register and SQ polling intervals. */ -#define NVMET_PCI_EPF_CC_POLL_INTERVAL msecs_to_jiffies(5) +#define NVMET_PCI_EPF_CC_POLL_INTERVAL msecs_to_jiffies(10) #define NVMET_PCI_EPF_SQ_POLL_INTERVAL msecs_to_jiffies(5) #define NVMET_PCI_EPF_SQ_POLL_IDLE msecs_to_jiffies(5000) @@ -1910,12 +1910,15 @@ static void nvmet_pci_epf_poll_cc_work(struct work_struct *work) old_cc = ctrl->cc; new_cc = nvmet_pci_epf_bar_read32(ctrl, NVME_REG_CC); + if (new_cc == old_cc) + goto reschedule_work; + ctrl->cc = new_cc; if (nvmet_cc_en(new_cc) && !nvmet_cc_en(old_cc)) { ret = nvmet_pci_epf_enable_ctrl(ctrl); if (ret) - return; + goto reschedule_work; } if (!nvmet_cc_en(new_cc) && nvmet_cc_en(old_cc)) @@ -1932,6 +1935,7 @@ static void nvmet_pci_epf_poll_cc_work(struct work_struct *work) nvmet_update_cc(ctrl->tctrl, ctrl->cc); nvmet_pci_epf_bar_write32(ctrl, NVME_REG_CSTS, ctrl->csts); +reschedule_work: schedule_delayed_work(&ctrl->poll_cc, NVMET_PCI_EPF_CC_POLL_INTERVAL); } -- 2.48.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register 2025-02-10 0:28 ` [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register Damien Le Moal @ 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2025-02-13 5:59 UTC (permalink / raw) To: Damien Le Moal; +Cc: linux-nvme, Keith Busch, Sagi Grimberg Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register 2025-02-10 0:28 ` [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig @ 2025-02-17 7:48 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Sagi Grimberg @ 2025-02-17 7:48 UTC (permalink / raw) To: Damien Le Moal, linux-nvme, Keith Busch, Christoph Hellwig Reviewed-by: Sagi Grimberg <sagi@grimberg.me>** ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 2025-02-10 0:28 [PATCH 0/3] pci-epf and tcp fixes Damien Le Moal 2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal 2025-02-10 0:28 ` [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register Damien Le Moal @ 2025-02-10 0:28 ` Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:47 ` Sagi Grimberg 2 siblings, 2 replies; 10+ messages in thread From: Damien Le Moal @ 2025-02-10 0:28 UTC (permalink / raw) To: linux-nvme, Keith Busch, Christoph Hellwig, Sagi Grimberg When compiling with W=1, a warning result for the function nvme_tcp_set_queue_io_cpu(): host/tcp.c:1578: warning: Function parameter or struct member 'queue' not described in 'nvme_tcp_set_queue_io_cpu' host/tcp.c:1578: warning: expecting prototype for Track the number of queues assigned to each cpu using a global per(). Prototype was for nvme_tcp_set_queue_io_cpu() instead Avoid this warning by using the regular comment format for the function nvme_tcp_set_queue_io_cpu() instead of the kdoc comment format. Fixes: 32193789878c ("nvme-tcp: Fix I/O queue cpu spreading for multiple controllers") Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/nvme/host/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 841238f38fdd..4162893d4939 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -1565,7 +1565,7 @@ static bool nvme_tcp_poll_queue(struct nvme_tcp_queue *queue) ctrl->io_queues[HCTX_TYPE_POLL]; } -/** +/* * Track the number of queues assigned to each cpu using a global per-cpu * counter and select the least used cpu from the mq_map. Our goal is to spread * different controllers I/O threads across different cpu cores. -- 2.48.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 2025-02-10 0:28 ` [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 Damien Le Moal @ 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:47 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2025-02-13 5:59 UTC (permalink / raw) To: Damien Le Moal; +Cc: linux-nvme, Keith Busch, Sagi Grimberg Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 2025-02-10 0:28 ` [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig @ 2025-02-17 7:47 ` Sagi Grimberg 1 sibling, 0 replies; 10+ messages in thread From: Sagi Grimberg @ 2025-02-17 7:47 UTC (permalink / raw) To: Damien Le Moal, linux-nvme, Keith Busch, Christoph Hellwig Reviewed-by: Sagi Grimberg <sagi@grimberg.me> ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-02-17 7:48 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-02-10 0:28 [PATCH 0/3] pci-epf and tcp fixes Damien Le Moal 2025-02-10 0:28 ` [PATCH 1/3] nvmet: pci-epf: Correctly initialize CSTS when enabling the controller Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 2025-02-10 0:28 ` [PATCH 2/3] nvmet: pci-epf: Do not uselessly write the CSTS register Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:48 ` Sagi Grimberg 2025-02-10 0:28 ` [PATCH 3/3] nvme: tcp: Fix compilation warning with W=1 Damien Le Moal 2025-02-13 5:59 ` Christoph Hellwig 2025-02-17 7:47 ` Sagi Grimberg
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.