aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/cxgb4/provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/provider.c')
-rw-r--r--drivers/infiniband/hw/cxgb4/provider.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
index 3c5197ee77f5..74b795642fca 100644
--- a/drivers/infiniband/hw/cxgb4/provider.c
+++ b/drivers/infiniband/hw/cxgb4/provider.c
@@ -510,6 +510,14 @@ static const struct ib_device_ops c4iw_dev_ops = {
510 .get_dma_mr = c4iw_get_dma_mr, 510 .get_dma_mr = c4iw_get_dma_mr,
511 .get_hw_stats = c4iw_get_mib, 511 .get_hw_stats = c4iw_get_mib,
512 .get_port_immutable = c4iw_port_immutable, 512 .get_port_immutable = c4iw_port_immutable,
513 .iw_accept = c4iw_accept_cr,
514 .iw_add_ref = c4iw_qp_add_ref,
515 .iw_connect = c4iw_connect,
516 .iw_create_listen = c4iw_create_listen,
517 .iw_destroy_listen = c4iw_destroy_listen,
518 .iw_get_qp = c4iw_get_qp,
519 .iw_reject = c4iw_reject_cr,
520 .iw_rem_ref = c4iw_qp_rem_ref,
513 .map_mr_sg = c4iw_map_mr_sg, 521 .map_mr_sg = c4iw_map_mr_sg,
514 .mmap = c4iw_mmap, 522 .mmap = c4iw_mmap,
515 .modify_qp = c4iw_ib_modify_qp, 523 .modify_qp = c4iw_ib_modify_qp,
@@ -588,36 +596,20 @@ void c4iw_register_device(struct work_struct *work)
588 dev->ibdev.dev.parent = &dev->rdev.lldi.pdev->dev; 596 dev->ibdev.dev.parent = &dev->rdev.lldi.pdev->dev;
589 dev->ibdev.uverbs_abi_ver = C4IW_UVERBS_ABI_VERSION; 597 dev->ibdev.uverbs_abi_ver = C4IW_UVERBS_ABI_VERSION;
590 598
591 dev->ibdev.iwcm = kzalloc(sizeof(struct iw_cm_verbs), GFP_KERNEL); 599 memcpy(dev->ibdev.iw_ifname, dev->rdev.lldi.ports[0]->name,
592 if (!dev->ibdev.iwcm) { 600 sizeof(dev->ibdev.iw_ifname));
593 ret = -ENOMEM;
594 goto err_dealloc_ctx;
595 }
596
597 dev->ibdev.iwcm->connect = c4iw_connect;
598 dev->ibdev.iwcm->accept = c4iw_accept_cr;
599 dev->ibdev.iwcm->reject = c4iw_reject_cr;
600 dev->ibdev.iwcm->create_listen = c4iw_create_listen;
601 dev->ibdev.iwcm->destroy_listen = c4iw_destroy_listen;
602 dev->ibdev.iwcm->add_ref = c4iw_qp_add_ref;
603 dev->ibdev.iwcm->rem_ref = c4iw_qp_rem_ref;
604 dev->ibdev.iwcm->get_qp = c4iw_get_qp;
605 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,
606 sizeof(dev->ibdev.iwcm->ifname));
607 601
608 rdma_set_device_sysfs_group(&dev->ibdev, &c4iw_attr_group); 602 rdma_set_device_sysfs_group(&dev->ibdev, &c4iw_attr_group);
609 dev->ibdev.driver_id = RDMA_DRIVER_CXGB4; 603 dev->ibdev.driver_id = RDMA_DRIVER_CXGB4;
610 ib_set_device_ops(&dev->ibdev, &c4iw_dev_ops); 604 ib_set_device_ops(&dev->ibdev, &c4iw_dev_ops);
611 ret = set_netdevs(&dev->ibdev, &dev->rdev); 605 ret = set_netdevs(&dev->ibdev, &dev->rdev);
612 if (ret) 606 if (ret)
613 goto err_kfree_iwcm; 607 goto err_dealloc_ctx;
614 ret = ib_register_device(&dev->ibdev, "cxgb4_%d"); 608 ret = ib_register_device(&dev->ibdev, "cxgb4_%d");
615 if (ret) 609 if (ret)
616 goto err_kfree_iwcm; 610 goto err_dealloc_ctx;
617 return; 611 return;
618 612
619err_kfree_iwcm:
620 kfree(dev->ibdev.iwcm);
621err_dealloc_ctx: 613err_dealloc_ctx:
622 pr_err("%s - Failed registering iwarp device: %d\n", 614 pr_err("%s - Failed registering iwarp device: %d\n",
623 pci_name(ctx->lldi.pdev), ret); 615 pci_name(ctx->lldi.pdev), ret);
@@ -629,6 +621,5 @@ void c4iw_unregister_device(struct c4iw_dev *dev)
629{ 621{
630 pr_debug("c4iw_dev %p\n", dev); 622 pr_debug("c4iw_dev %p\n", dev);
631 ib_unregister_device(&dev->ibdev); 623 ib_unregister_device(&dev->ibdev);
632 kfree(dev->ibdev.iwcm);
633 return; 624 return;
634} 625}