Re: [PATCH v2 3/3] PCI: endpoint: pci-epf-vntb: Implement .get_dma_dev()
Dave Jiang <[email protected]> Fri, 6 Mar 2026 08:24:48 -0700
| Newsgroups | dev.linux.lists.ntb,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
On 3/5/26 8:14 PM, Koichiro Den wrote: > When vNTB is used as a PCI endpoint function, the NTB device is backed > by a virtual PCI function. For DMA API allocations and mappings, NTB > clients must use the device that is associated with the IOMMU domain. > > Implement ntb_dev_ops->get_dma_dev() for pci-epf-vntb and return the EPC > parent device. > > Suggested-by: Frank Li <[email protected]> > Signed-off-by: Koichiro Den <[email protected]> Reviewed-by: Dave Jiang <[email protected]> > --- > drivers/pci/endpoint/functions/pci-epf-vntb.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/endpoint/functions/pci-epf-vntb.c > index 20a400e83439..e5433404f573 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c > +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c > @@ -1436,6 +1436,14 @@ static int vntb_epf_link_disable(struct ntb_dev *ntb) > return 0; > } > > +static struct device *vntb_epf_get_dma_dev(struct ntb_dev *ndev) > +{ > + struct epf_ntb *ntb = ntb_ndev(ndev); > + struct pci_epc *epc = ntb->epf->epc; > + > + return epc->dev.parent; > +} > + > static const struct ntb_dev_ops vntb_epf_ops = { > .mw_count = vntb_epf_mw_count, > .spad_count = vntb_epf_spad_count, > @@ -1457,6 +1465,7 @@ static const struct ntb_dev_ops vntb_epf_ops = { > .db_clear_mask = vntb_epf_db_clear_mask, > .db_clear = vntb_epf_db_clear, > .link_disable = vntb_epf_link_disable, > + .get_dma_dev = vntb_epf_get_dma_dev, > }; > > static int pci_vntb_probe(struct pci_dev *pdev, const struct pci_device_id *id)