Re: [RFC PATCH v4 18/38] NTB: ntb_transport: Use ntb_get_dma_dev()
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.ntb,dev.linux.lists.iommu,org.kernel.vger.dmaengine,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-pci,org.kernel.vger.linux-renesas-soc,org.kernel.vger.netdev |
|---|---|
| Message-ID | <aW6WW6S3Qq/usQyi@lizhi-Precision-Tower-5810> |
On Sun, Jan 18, 2026 at 10:54:20PM +0900, Koichiro Den wrote: > Replace direct use of ntb->pdev with ntb_get_dma_dev() for DMA-safe > allocations and frees. This allows ntb_transport to operate on NTB > implementations that are not backed by a PCI device from IOMMU > perspective. > > Signed-off-by: Koichiro Den <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > drivers/ntb/ntb_transport.c | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) > > diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c > index 6ed680d0470f..7b320249629c 100644 > --- a/drivers/ntb/ntb_transport.c > +++ b/drivers/ntb/ntb_transport.c > @@ -771,13 +771,13 @@ static void ntb_transport_msi_desc_changed(void *data) > static void ntb_free_mw(struct ntb_transport_ctx *nt, int num_mw) > { > struct ntb_transport_mw *mw = &nt->mw_vec[num_mw]; > - struct pci_dev *pdev = nt->ndev->pdev; > + struct device *dev = ntb_get_dma_dev(nt->ndev); > > - if (!mw->virt_addr) > + if (!dev || !mw->virt_addr) > return; > > ntb_mw_clear_trans(nt->ndev, PIDX, num_mw); > - dma_free_coherent(&pdev->dev, mw->alloc_size, > + dma_free_coherent(dev, mw->alloc_size, > mw->alloc_addr, mw->dma_addr); > mw->xlat_size = 0; > mw->buff_size = 0; > @@ -847,13 +847,13 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, > resource_size_t size) > { > struct ntb_transport_mw *mw = &nt->mw_vec[num_mw]; > - struct pci_dev *pdev = nt->ndev->pdev; > + struct device *dev = ntb_get_dma_dev(nt->ndev); > size_t xlat_size, buff_size; > resource_size_t xlat_align; > resource_size_t xlat_align_size; > int rc; > > - if (!size) > + if (!dev || !size) > return -EINVAL; > > rc = ntb_mw_get_align(nt->ndev, PIDX, num_mw, &xlat_align, > @@ -876,12 +876,12 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, > mw->buff_size = buff_size; > mw->alloc_size = buff_size; > > - rc = ntb_alloc_mw_buffer(mw, &pdev->dev, xlat_align); > + rc = ntb_alloc_mw_buffer(mw, dev, xlat_align); > if (rc) { > mw->alloc_size *= 2; > - rc = ntb_alloc_mw_buffer(mw, &pdev->dev, xlat_align); > + rc = ntb_alloc_mw_buffer(mw, dev, xlat_align); > if (rc) { > - dev_err(&pdev->dev, > + dev_err(dev, > "Unable to alloc aligned MW buff\n"); > mw->xlat_size = 0; > mw->buff_size = 0; > @@ -894,7 +894,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, > rc = ntb_mw_set_trans(nt->ndev, PIDX, num_mw, mw->dma_addr, > mw->xlat_size); > if (rc) { > - dev_err(&pdev->dev, "Unable to set mw%d translation", num_mw); > + dev_err(dev, "Unable to set mw%d translation", num_mw); > ntb_free_mw(nt, num_mw); > return -EIO; > } > -- > 2.51.0 >