]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvmet: pci-epf: move DMA initialization to EPC init callback
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tue, 9 Sep 2025 11:21:22 +0000 (13:21 +0200)
committerKeith Busch <kbusch@kernel.org>
Mon, 1 Dec 2025 21:45:56 +0000 (13:45 -0800)
For DMA initialization to work across all EPC drivers, the DMA
initialization has to be done in the .init() callback.

This is because not all EPC drivers will have a refclock (which is often
needed to access registers of a DMA controller embedded in a PCIe
controller) at the time the .bind() callback is called.

However, all EPC drivers are guaranteed to have a refclock by the time
the .init() callback is called.

Thus, move the DMA initialization to the .init() callback.

This change was already done for other EPF drivers in
commit 60bd3e039aa2 ("PCI: endpoint: pci-epf-{mhi/test}: Move DMA
initialization to EPC init callback").

Cc: stable@vger.kernel.org
Fixes: 0faa0fe6f90e ("nvmet: New NVMe PCI endpoint function target driver")
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/target/pci-epf.c

index 2e78397a7373a7d8ba67150f301f392123db88d1..9c5b0f78ce8dfc94ae02b8d1def1d3122e696d17 100644 (file)
@@ -2325,6 +2325,8 @@ static int nvmet_pci_epf_epc_init(struct pci_epf *epf)
                return ret;
        }
 
+       nvmet_pci_epf_init_dma(nvme_epf);
+
        /* Set device ID, class, etc. */
        epf->header->vendorid = ctrl->tctrl->subsys->vendor_id;
        epf->header->subsys_vendor_id = ctrl->tctrl->subsys->subsys_vendor_id;
@@ -2422,8 +2424,6 @@ static int nvmet_pci_epf_bind(struct pci_epf *epf)
        if (ret)
                return ret;
 
-       nvmet_pci_epf_init_dma(nvme_epf);
-
        return 0;
 }