diff options
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/provider.c')
-rw-r--r-- | drivers/infiniband/hw/cxgb4/provider.c | 33 |
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 | ||
619 | err_kfree_iwcm: | ||
620 | kfree(dev->ibdev.iwcm); | ||
621 | err_dealloc_ctx: | 613 | err_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 | } |