Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband

Pull infiniband/rdma fixes from Roland Dreier:
- cxgb4 hardware driver regression fixes
- mlx5 hardware driver regression fixes

* tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
IB/mlx5: Enable "block multicast loopback" for kernel consumers
RDMA/cxgb4: Call iwpm_init() only once
mlx5_core: Fix possible race between mr tree insert/delete
RDMA/cxgb4: Initialize the device status page
RDMA/cxgb4: Clean up connection on ARP error
RDMA/cxgb4: Fix skb_leak in reject_cr()

+39 -16
+11 -3
drivers/infiniband/hw/cxgb4/cm.c
··· 432 432 */ 433 433 static void act_open_req_arp_failure(void *handle, struct sk_buff *skb) 434 434 { 435 + struct c4iw_ep *ep = handle; 436 + 435 437 printk(KERN_ERR MOD "ARP failure duing connect\n"); 436 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 /* ··· 667 658 opt2 |= T5_OPT_2_VALID; 668 659 opt2 |= V_CONG_CNTRL(CONG_ALG_TAHOE); 669 660 } 670 - t4_set_arp_err_handler(skb, NULL, act_open_req_arp_failure); 661 + t4_set_arp_err_handler(skb, ep, act_open_req_arp_failure); 671 662 672 663 if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) { 673 664 if (ep->com.remote_addr.ss_family == AF_INET) { ··· 2189 2180 PDBG("%s c4iw_dev %p tid %u\n", __func__, dev, hwtid); 2190 2181 BUG_ON(skb_cloned(skb)); 2191 2182 skb_trim(skb, sizeof(struct cpl_tid_release)); 2192 - skb_get(skb); 2193 2183 release_tid(&dev->rdev, hwtid, skb); 2194 2184 return; 2195 2185 } ··· 3925 3917 return 0; 3926 3918 } 3927 3919 3928 - void __exit c4iw_cm_term(void) 3920 + void c4iw_cm_term(void) 3929 3921 { 3930 3922 WARN_ON(!list_empty(&timeout_list)); 3931 3923 flush_workqueue(workq);
+11 -7
drivers/infiniband/hw/cxgb4/device.c
··· 696 696 pr_err(MOD "error allocating status page\n"); 697 697 goto err4; 698 698 } 699 + rdev->status_page->db_off = 0; 699 700 return 0; 700 701 err4: 701 702 c4iw_rqtpool_destroy(rdev); ··· 730 729 if (ctx->dev->rdev.oc_mw_kva) 731 730 iounmap(ctx->dev->rdev.oc_mw_kva); 732 731 ib_dealloc_device(&ctx->dev->ibdev); 733 - iwpm_exit(RDMA_NL_C4IW); 734 732 ctx->dev = NULL; 735 733 } 736 734 ··· 826 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 830 return devp; 837 831 } ··· 1326 1332 pr_err("%s[%u]: Failed to add netlink callback\n" 1327 1333 , __func__, __LINE__); 1328 1334 1335 + err = iwpm_init(RDMA_NL_C4IW); 1336 + if (err) { 1337 + pr_err("port mapper initialization failed with %d\n", err); 1338 + ibnl_remove_client(RDMA_NL_C4IW); 1339 + c4iw_cm_term(); 1340 + debugfs_remove_recursive(c4iw_debugfs_root); 1341 + return err; 1342 + } 1343 + 1329 1344 cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); 1330 1345 1331 1346 return 0; ··· 1352 1349 } 1353 1350 mutex_unlock(&dev_mutex); 1354 1351 cxgb4_unregister_uld(CXGB4_ULD_RDMA); 1352 + iwpm_exit(RDMA_NL_C4IW); 1355 1353 ibnl_remove_client(RDMA_NL_C4IW); 1356 1354 c4iw_cm_term(); 1357 1355 debugfs_remove_recursive(c4iw_debugfs_root);
+1 -1
drivers/infiniband/hw/cxgb4/iw_cxgb4.h
··· 908 908 int c4iw_register_device(struct c4iw_dev *dev); 909 909 void c4iw_unregister_device(struct c4iw_dev *dev); 910 910 int __init c4iw_cm_init(void); 911 - void __exit c4iw_cm_term(void); 911 + void c4iw_cm_term(void); 912 912 void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev, 913 913 struct c4iw_dev_ucontext *uctx); 914 914 void c4iw_init_dev_ucontext(struct c4iw_rdev *rdev,
+1 -1
drivers/infiniband/hw/mlx5/qp.c
··· 675 675 int err; 676 676 677 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 679 return -EINVAL; 680 680 681 681 if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
+15 -4
drivers/net/ethernet/mellanox/mlx5/core/mr.c
··· 94 94 write_lock_irq(&table->lock); 95 95 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->key), mr); 96 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 103 return err; 99 104 } ··· 109 104 struct mlx5_mr_table *table = &dev->priv.mr_table; 110 105 struct mlx5_destroy_mkey_mbox_in in; 111 106 struct mlx5_destroy_mkey_mbox_out out; 107 + struct mlx5_core_mr *deleted_mr; 112 108 unsigned long flags; 113 109 int err; 114 110 115 111 memset(&in, 0, sizeof(in)); 116 112 memset(&out, 0, sizeof(out)); 113 + 114 + write_lock_irqsave(&table->lock, flags); 115 + deleted_mr = radix_tree_delete(&table->tree, mlx5_base_mkey(mr->key)); 116 + write_unlock_irqrestore(&table->lock, flags); 117 + if (!deleted_mr) { 118 + mlx5_core_warn(dev, "failed radix tree delete of mr 0x%x\n", 119 + mlx5_base_mkey(mr->key)); 120 + return -ENOENT; 121 + } 117 122 118 123 in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_DESTROY_MKEY); 119 124 in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mr->key)); ··· 133 118 134 119 if (out.hdr.status) 135 120 return mlx5_cmd_status_to_err(&out.hdr); 136 - 137 - write_lock_irqsave(&table->lock, flags); 138 - radix_tree_delete(&table->tree, mlx5_base_mkey(mr->key)); 139 - write_unlock_irqrestore(&table->lock, flags); 140 121 141 122 return err; 142 123 }