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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to