diff options
-rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 14 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb4/device.c | 18 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx5/qp.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/mr.c | 19 |
5 files changed, 39 insertions, 16 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 5e153f6d4b48..768a0fb67dd6 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c | |||
@@ -432,8 +432,17 @@ static void arp_failure_discard(void *handle, struct sk_buff *skb) | |||
432 | */ | 432 | */ |
433 | static void act_open_req_arp_failure(void *handle, struct sk_buff *skb) | 433 | static void act_open_req_arp_failure(void *handle, struct sk_buff *skb) |
434 | { | 434 | { |
435 | struct c4iw_ep *ep = handle; | ||
436 | |||
435 | printk(KERN_ERR MOD "ARP failure duing connect\n"); | 437 | printk(KERN_ERR MOD "ARP failure duing connect\n"); |
436 | kfree_skb(skb); | 438 | kfree_skb(skb); |
439 | connect_reply_upcall(ep, -EHOSTUNREACH); | ||
440 | state_set(&ep->com, DEAD); | ||
441 | remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid); | ||
442 | cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid); | ||
443 | dst_release(ep->dst); | ||
444 | cxgb4_l2t_release(ep->l2t); | ||
445 | c4iw_put_ep(&ep->com); | ||
437 | } | 446 | } |
438 | 447 | ||
439 | /* | 448 | /* |
@@ -658,7 +667,7 @@ static int send_connect(struct c4iw_ep *ep) | |||
658 | opt2 |= T5_OPT_2_VALID; | 667 | opt2 |= T5_OPT_2_VALID; |
659 | opt2 |= V_CONG_CNTRL(CONG_ALG_TAHOE); | 668 | opt2 |= V_CONG_CNTRL(CONG_ALG_TAHOE); |
660 | } | 669 | } |
661 | t4_set_arp_err_handler(skb, NULL, act_open_req_arp_failure); | 670 | t4_set_arp_err_handler(skb, ep, act_open_req_arp_failure); |
662 | 671 | ||
663 | if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) { | 672 | if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) { |
664 | if (ep->com.remote_addr.ss_family == AF_INET) { | 673 | if (ep->com.remote_addr.ss_family == AF_INET) { |
@@ -2180,7 +2189,6 @@ static void reject_cr(struct c4iw_dev *dev, u32 hwtid, struct sk_buff *skb) | |||
2180 | PDBG("%s c4iw_dev %p tid %u\n", __func__, dev, hwtid); | 2189 | PDBG("%s c4iw_dev %p tid %u\n", __func__, dev, hwtid); |
2181 | BUG_ON(skb_cloned(skb)); | 2190 | BUG_ON(skb_cloned(skb)); |
2182 | skb_trim(skb, sizeof(struct cpl_tid_release)); | 2191 | skb_trim(skb, sizeof(struct cpl_tid_release)); |
2183 | skb_get(skb); | ||
2184 | release_tid(&dev->rdev, hwtid, skb); | 2192 | release_tid(&dev->rdev, hwtid, skb); |
2185 | return; | 2193 | return; |
2186 | } | 2194 | } |
@@ -3917,7 +3925,7 @@ int __init c4iw_cm_init(void) | |||
3917 | return 0; | 3925 | return 0; |
3918 | } | 3926 | } |
3919 | 3927 | ||
3920 | void __exit c4iw_cm_term(void) | 3928 | void c4iw_cm_term(void) |
3921 | { | 3929 | { |
3922 | WARN_ON(!list_empty(&timeout_list)); | 3930 | WARN_ON(!list_empty(&timeout_list)); |
3923 | flush_workqueue(workq); | 3931 | flush_workqueue(workq); |
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c index dd93aadc996e..7db82b24302b 100644 --- a/drivers/infiniband/hw/cxgb4/device.c +++ b/drivers/infiniband/hw/cxgb4/device.c | |||
@@ -696,6 +696,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev) | |||
696 | pr_err(MOD "error allocating status page\n"); | 696 | pr_err(MOD "error allocating status page\n"); |
697 | goto err4; | 697 | goto err4; |
698 | } | 698 | } |
699 | rdev->status_page->db_off = 0; | ||
699 | return 0; | 700 | return 0; |
700 | err4: | 701 | err4: |
701 | c4iw_rqtpool_destroy(rdev); | 702 | c4iw_rqtpool_destroy(rdev); |
@@ -729,7 +730,6 @@ static void c4iw_dealloc(struct uld_ctx *ctx) | |||
729 | if (ctx->dev->rdev.oc_mw_kva) | 730 | if (ctx->dev->rdev.oc_mw_kva) |
730 | iounmap(ctx->dev->rdev.oc_mw_kva); | 731 | iounmap(ctx->dev->rdev.oc_mw_kva); |
731 | ib_dealloc_device(&ctx->dev->ibdev); | 732 | ib_dealloc_device(&ctx->dev->ibdev); |
732 | iwpm_exit(RDMA_NL_C4IW); | ||
733 | ctx->dev = NULL; | 733 | ctx->dev = NULL; |
734 | } | 734 | } |
735 | 735 | ||
@@ -826,12 +826,6 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop) | |||
826 | setup_debugfs(devp); | 826 | setup_debugfs(devp); |
827 | } | 827 | } |
828 | 828 | ||
829 | ret = iwpm_init(RDMA_NL_C4IW); | ||
830 | if (ret) { | ||
831 | pr_err("port mapper initialization failed with %d\n", ret); | ||
832 | ib_dealloc_device(&devp->ibdev); | ||
833 | return ERR_PTR(ret); | ||
834 | } | ||
835 | 829 | ||
836 | return devp; | 830 | return devp; |
837 | } | 831 | } |
@@ -1332,6 +1326,15 @@ static int __init c4iw_init_module(void) | |||
1332 | pr_err("%s[%u]: Failed to add netlink callback\n" | 1326 | pr_err("%s[%u]: Failed to add netlink callback\n" |
1333 | , __func__, __LINE__); | 1327 | , __func__, __LINE__); |
1334 | 1328 | ||
1329 | err = iwpm_init(RDMA_NL_C4IW); | ||
1330 | if (err) { | ||
1331 | pr_err("port mapper initialization failed with %d\n", err); | ||
1332 | ibnl_remove_client(RDMA_NL_C4IW); | ||
1333 | c4iw_cm_term(); | ||
1334 | debugfs_remove_recursive(c4iw_debugfs_root); | ||
1335 | return err; | ||
1336 | } | ||
1337 | |||
1335 | cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); | 1338 | cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); |
1336 | 1339 | ||
1337 | return 0; | 1340 | return 0; |
@@ -1349,6 +1352,7 @@ static void __exit c4iw_exit_module(void) | |||
1349 | } | 1352 | } |
1350 | mutex_unlock(&dev_mutex); | 1353 | mutex_unlock(&dev_mutex); |
1351 | cxgb4_unregister_uld(CXGB4_ULD_RDMA); | 1354 | cxgb4_unregister_uld(CXGB4_ULD_RDMA); |
1355 | iwpm_exit(RDMA_NL_C4IW); | ||
1352 | ibnl_remove_client(RDMA_NL_C4IW); | 1356 | ibnl_remove_client(RDMA_NL_C4IW); |
1353 | c4iw_cm_term(); | 1357 | c4iw_cm_term(); |
1354 | debugfs_remove_recursive(c4iw_debugfs_root); | 1358 | debugfs_remove_recursive(c4iw_debugfs_root); |
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h index 125bc5d1e175..361fff7a0742 100644 --- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h +++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h | |||
@@ -908,7 +908,7 @@ int c4iw_destroy_ctrl_qp(struct c4iw_rdev *rdev); | |||
908 | int c4iw_register_device(struct c4iw_dev *dev); | 908 | int c4iw_register_device(struct c4iw_dev *dev); |
909 | void c4iw_unregister_device(struct c4iw_dev *dev); | 909 | void c4iw_unregister_device(struct c4iw_dev *dev); |
910 | int __init c4iw_cm_init(void); | 910 | int __init c4iw_cm_init(void); |
911 | void __exit c4iw_cm_term(void); | 911 | void c4iw_cm_term(void); |
912 | void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev, | 912 | void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev, |
913 | struct c4iw_dev_ucontext *uctx); | 913 | struct c4iw_dev_ucontext *uctx); |
914 | void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev, | 914 | void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev, |
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index d13ddf1c0033..bbbcf389272c 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c | |||
@@ -675,7 +675,7 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev, | |||
675 | int err; | 675 | int err; |
676 | 676 | ||
677 | uuari = &dev->mdev.priv.uuari; | 677 | uuari = &dev->mdev.priv.uuari; |
678 | if (init_attr->create_flags & ~IB_QP_CREATE_SIGNATURE_EN) | 678 | if (init_attr->create_flags & ~(IB_QP_CREATE_SIGNATURE_EN | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK)) |
679 | return -EINVAL; | 679 | return -EINVAL; |
680 | 680 | ||
681 | if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR) | 681 | if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR) |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mr.c b/drivers/net/ethernet/mellanox/mlx5/core/mr.c index ba0401d4af50..184c3615f479 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/mr.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/mr.c | |||
@@ -94,6 +94,11 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, | |||
94 | write_lock_irq(&table->lock); | 94 | write_lock_irq(&table->lock); |
95 | err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->key), mr); | 95 | err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->key), mr); |
96 | write_unlock_irq(&table->lock); | 96 | write_unlock_irq(&table->lock); |
97 | if (err) { | ||
98 | mlx5_core_warn(dev, "failed radix tree insert of mr 0x%x, %d\n", | ||
99 | mlx5_base_mkey(mr->key), err); | ||
100 | mlx5_core_destroy_mkey(dev, mr); | ||
101 | } | ||
97 | 102 | ||
98 | return err; | 103 | return err; |
99 | } | 104 | } |
@@ -104,12 +109,22 @@ int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr) | |||
104 | struct mlx5_mr_table *table = &dev->priv.mr_table; | 109 | struct mlx5_mr_table *table = &dev->priv.mr_table; |
105 | struct mlx5_destroy_mkey_mbox_in in; | 110 | struct mlx5_destroy_mkey_mbox_in in; |
106 | struct mlx5_destroy_mkey_mbox_out out; | 111 | struct mlx5_destroy_mkey_mbox_out out; |
112 | struct mlx5_core_mr *deleted_mr; | ||
107 | unsigned long flags; | 113 | unsigned long flags; |
108 | int err; | 114 | int err; |
109 | 115 | ||
110 | memset(&in, 0, sizeof(in)); | 116 | memset(&in, 0, sizeof(in)); |
111 | memset(&out, 0, sizeof(out)); | 117 | memset(&out, 0, sizeof(out)); |
112 | 118 | ||
119 | write_lock_irqsave(&table->lock, flags); | ||
120 | deleted_mr = radix_tree_delete(&table->tree, mlx5_base_mkey(mr->key)); | ||
121 | write_unlock_irqrestore(&table->lock, flags); | ||
122 | if (!deleted_mr) { | ||
123 | mlx5_core_warn(dev, "failed radix tree delete of mr 0x%x\n", | ||
124 | mlx5_base_mkey(mr->key)); | ||
125 | return -ENOENT; | ||
126 | } | ||
127 | |||
113 | in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_DESTROY_MKEY); | 128 | in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_DESTROY_MKEY); |
114 | in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mr->key)); | 129 | in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mr->key)); |
115 | err = mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out)); | 130 | err = mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out)); |
@@ -119,10 +134,6 @@ int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr) | |||
119 | if (out.hdr.status) | 134 | if (out.hdr.status) |
120 | return mlx5_cmd_status_to_err(&out.hdr); | 135 | return mlx5_cmd_status_to_err(&out.hdr); |
121 | 136 | ||
122 | write_lock_irqsave(&table->lock, flags); | ||
123 | radix_tree_delete(&table->tree, mlx5_base_mkey(mr->key)); | ||
124 | write_unlock_irqrestore(&table->lock, flags); | ||
125 | |||
126 | return err; | 137 | return err; |
127 | } | 138 | } |
128 | EXPORT_SYMBOL(mlx5_core_destroy_mkey); | 139 | EXPORT_SYMBOL(mlx5_core_destroy_mkey); |