svn commit: r360548 - stable/12/sys/dev/cxgbe/iw_cxgbe
Navdeep Parhar
np at FreeBSD.org
Fri May 1 21:22:27 UTC 2020
Author: np
Date: Fri May 1 21:22:26 2020
New Revision: 360548
URL: https://svnweb.freebsd.org/changeset/base/360548
Log:
MFC r360211:
cxgbe/iw_cxgbe: Create a LinuxKPI pci device for an adapter and use it
as the dma_device during RDMA registration.
cxgbe's struct device cannot be used as-is because it's a native FreeBSD
driver and ibcore is LinuxKPI based.
Sponsored by: Chelsio Communications
Modified:
stable/12/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
stable/12/sys/dev/cxgbe/iw_cxgbe/provider.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
==============================================================================
--- stable/12/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h Fri May 1 20:29:51 2020 (r360547)
+++ stable/12/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h Fri May 1 21:22:26 2020 (r360548)
@@ -261,6 +261,7 @@ out:
struct c4iw_dev {
struct ib_device ibdev;
+ struct pci_dev pdev;
struct c4iw_rdev rdev;
u32 device_cap_flags;
struct idr cqidr;
Modified: stable/12/sys/dev/cxgbe/iw_cxgbe/provider.c
==============================================================================
--- stable/12/sys/dev/cxgbe/iw_cxgbe/provider.c Fri May 1 20:29:51 2020 (r360547)
+++ stable/12/sys/dev/cxgbe/iw_cxgbe/provider.c Fri May 1 21:22:26 2020 (r360548)
@@ -434,6 +434,9 @@ c4iw_register_device(struct c4iw_dev *dev)
CTR3(KTR_IW_CXGBE, "%s c4iw_dev %p, adapter %p", __func__, dev, sc);
BUG_ON(!sc->port[0]);
+ ret = linux_pci_attach_device(sc->dev, NULL, NULL, &dev->pdev);
+ if (ret)
+ return (ret);
strlcpy(ibdev->name, device_get_nameunit(sc->dev), sizeof(ibdev->name));
memset(&ibdev->node_guid, 0, sizeof(ibdev->node_guid));
memcpy(&ibdev->node_guid, sc->port[0]->vi[0].hw_addr, ETHER_ADDR_LEN);
@@ -465,7 +468,7 @@ c4iw_register_device(struct c4iw_dev *dev)
strlcpy(ibdev->node_desc, C4IW_NODE_DESC, sizeof(ibdev->node_desc));
ibdev->phys_port_cnt = sc->params.nports;
ibdev->num_comp_vectors = 1;
- ibdev->dma_device = NULL;
+ ibdev->dma_device = &dev->pdev.dev;
ibdev->query_device = c4iw_query_device;
ibdev->query_port = c4iw_query_port;
ibdev->modify_port = c4iw_modify_port;
@@ -517,8 +520,10 @@ c4iw_register_device(struct c4iw_dev *dev)
ibdev->iwcm = iwcm;
ret = ib_register_device(&dev->ibdev, NULL);
- if (ret)
+ if (ret) {
kfree(iwcm);
+ linux_pci_detach_device(&dev->pdev);
+ }
return (ret);
}
@@ -531,6 +536,7 @@ c4iw_unregister_device(struct c4iw_dev *dev)
dev->rdev.adap);
ib_unregister_device(&dev->ibdev);
kfree(dev->ibdev.iwcm);
+ linux_pci_detach_device(&dev->pdev);
return;
}
#endif
More information about the svn-src-all
mailing list