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 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma

Pull rdma fixes from Jason Gunthorpe:

- Fix hang in bnxt_re due to miscomputing the budget

- Avoid a -Wformat-security message in dev_set_name()

- Avoid an unused definition warning in fs.c with some kconfigs

- Fix error handling in usnic and remove IS_ERR_OR_NULL() usage

- Regression in RXE support foudn by blktests due to missing ODP
exclusions

- Set the dma_segment_size on HNS so it doesn't corrupt DMA when using
very large IOs

- Move a INIT_WORK to near when the work is allocated in cm.c to fix a
racey crash where work in progress was being init'd

- Use __GFP_NOWARN to not dump in kvcalloc() if userspace requests a
very big MR

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma:
RDMA/bnxt_re: Remove unusable nq variable
RDMA/core: Silence oversized kvmalloc() warning
RDMA/cma: Fix workqueue crash in cma_netevent_work_handler
RDMA/hns: Fix wrong maximum DMA segment size
RDMA/rxe: Fix null pointer dereference in ODP MR check
RDMA/mlx5: Fix compilation warning when USER_ACCESS isn't set
RDMA/usnic: Fix passing zero to PTR_ERR in usnic_ib_pci_probe()
RDMA/ucaps: Avoid format-security warning
RDMA/bnxt_re: Fix budget handling of notification queue

+33 -28
+3 -1
drivers/infiniband/core/cma.c
··· 72 72 static void cma_iboe_set_mgid(struct sockaddr *addr, union ib_gid *mgid, 73 73 enum ib_gid_type gid_type); 74 74 75 + static void cma_netevent_work_handler(struct work_struct *_work); 76 + 75 77 const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event) 76 78 { 77 79 size_t index = event; ··· 1049 1047 get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num); 1050 1048 id_priv->id.route.addr.dev_addr.net = get_net(net); 1051 1049 id_priv->seq_num &= 0x00ffffff; 1050 + INIT_WORK(&id_priv->id.net_work, cma_netevent_work_handler); 1052 1051 1053 1052 rdma_restrack_new(&id_priv->res, RDMA_RESTRACK_CM_ID); 1054 1053 if (parent) ··· 5244 5241 if (!memcmp(current_id->id.route.addr.dev_addr.dst_dev_addr, 5245 5242 neigh->ha, ETH_ALEN)) 5246 5243 continue; 5247 - INIT_WORK(&current_id->id.net_work, cma_netevent_work_handler); 5248 5244 cma_id_get(current_id); 5249 5245 queue_work(cma_wq, &current_id->id.net_work); 5250 5246 }
+1 -1
drivers/infiniband/core/ucaps.c
··· 170 170 ucap->dev.class = &ucaps_class; 171 171 ucap->dev.devt = MKDEV(MAJOR(ucaps_base_dev), type); 172 172 ucap->dev.release = ucap_dev_release; 173 - ret = dev_set_name(&ucap->dev, ucap_names[type]); 173 + ret = dev_set_name(&ucap->dev, "%s", ucap_names[type]); 174 174 if (ret) 175 175 goto err_device; 176 176
+4 -2
drivers/infiniband/core/umem_odp.c
··· 76 76 77 77 npfns = (end - start) >> PAGE_SHIFT; 78 78 umem_odp->pfn_list = kvcalloc( 79 - npfns, sizeof(*umem_odp->pfn_list), GFP_KERNEL); 79 + npfns, sizeof(*umem_odp->pfn_list), 80 + GFP_KERNEL | __GFP_NOWARN); 80 81 if (!umem_odp->pfn_list) 81 82 return -ENOMEM; 82 83 83 84 umem_odp->dma_list = kvcalloc( 84 - ndmas, sizeof(*umem_odp->dma_list), GFP_KERNEL); 85 + ndmas, sizeof(*umem_odp->dma_list), 86 + GFP_KERNEL | __GFP_NOWARN); 85 87 if (!umem_odp->dma_list) { 86 88 ret = -ENOMEM; 87 89 goto out_pfn_list;
-10
drivers/infiniband/hw/bnxt_re/ib_verbs.c
··· 1774 1774 ib_srq); 1775 1775 struct bnxt_re_dev *rdev = srq->rdev; 1776 1776 struct bnxt_qplib_srq *qplib_srq = &srq->qplib_srq; 1777 - struct bnxt_qplib_nq *nq = NULL; 1778 1777 1779 - if (qplib_srq->cq) 1780 - nq = qplib_srq->cq->nq; 1781 1778 if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT) { 1782 1779 free_page((unsigned long)srq->uctx_srq_page); 1783 1780 hash_del(&srq->hash_entry); ··· 1782 1785 bnxt_qplib_destroy_srq(&rdev->qplib_res, qplib_srq); 1783 1786 ib_umem_release(srq->umem); 1784 1787 atomic_dec(&rdev->stats.res.srq_count); 1785 - if (nq) 1786 - nq->budget--; 1787 1788 return 0; 1788 1789 } 1789 1790 ··· 1822 1827 struct ib_udata *udata) 1823 1828 { 1824 1829 struct bnxt_qplib_dev_attr *dev_attr; 1825 - struct bnxt_qplib_nq *nq = NULL; 1826 1830 struct bnxt_re_ucontext *uctx; 1827 1831 struct bnxt_re_dev *rdev; 1828 1832 struct bnxt_re_srq *srq; ··· 1867 1873 srq->qplib_srq.eventq_hw_ring_id = rdev->nqr->nq[0].ring_id; 1868 1874 srq->qplib_srq.sg_info.pgsize = PAGE_SIZE; 1869 1875 srq->qplib_srq.sg_info.pgshft = PAGE_SHIFT; 1870 - nq = &rdev->nqr->nq[0]; 1871 1876 1872 1877 if (udata) { 1873 1878 rc = bnxt_re_init_user_srq(rdev, pd, srq, udata); ··· 1901 1908 goto fail; 1902 1909 } 1903 1910 } 1904 - if (nq) 1905 - nq->budget++; 1906 1911 active_srqs = atomic_inc_return(&rdev->stats.res.srq_count); 1907 1912 if (active_srqs > rdev->stats.res.srq_watermark) 1908 1913 rdev->stats.res.srq_watermark = active_srqs; ··· 3070 3079 ib_umem_release(cq->umem); 3071 3080 3072 3081 atomic_dec(&rdev->stats.res.cq_count); 3073 - nq->budget--; 3074 3082 kfree(cq->cql); 3075 3083 return 0; 3076 3084 }
+1 -1
drivers/infiniband/hw/hns/hns_roce_main.c
··· 763 763 if (ret) 764 764 return ret; 765 765 } 766 - dma_set_max_seg_size(dev, UINT_MAX); 766 + dma_set_max_seg_size(dev, SZ_2G); 767 767 ret = ib_register_device(ib_dev, "hns_%d", dev); 768 768 if (ret) { 769 769 dev_err(dev, "ib_register_device failed!\n");
-2
drivers/infiniband/hw/mlx5/fs.c
··· 3461 3461 &UVERBS_METHOD(MLX5_IB_METHOD_STEERING_ANCHOR_DESTROY)); 3462 3462 3463 3463 const struct uapi_definition mlx5_ib_flow_defs[] = { 3464 - #if IS_ENABLED(CONFIG_INFINIBAND_USER_ACCESS) 3465 3464 UAPI_DEF_CHAIN_OBJ_TREE_NAMED( 3466 3465 MLX5_IB_OBJECT_FLOW_MATCHER), 3467 3466 UAPI_DEF_CHAIN_OBJ_TREE( ··· 3471 3472 UAPI_DEF_CHAIN_OBJ_TREE_NAMED( 3472 3473 MLX5_IB_OBJECT_STEERING_ANCHOR, 3473 3474 UAPI_DEF_IS_OBJ_SUPPORTED(mlx5_ib_shared_ft_allowed)), 3474 - #endif 3475 3475 {}, 3476 3476 }; 3477 3477
+7 -7
drivers/infiniband/hw/usnic/usnic_ib_main.c
··· 397 397 if (!us_ibdev) { 398 398 usnic_err("Device %s context alloc failed\n", 399 399 netdev_name(pci_get_drvdata(dev))); 400 - return ERR_PTR(-EFAULT); 400 + return NULL; 401 401 } 402 402 403 403 us_ibdev->ufdev = usnic_fwd_dev_alloc(dev); ··· 517 517 } 518 518 519 519 us_ibdev = usnic_ib_device_add(parent_pci); 520 - if (IS_ERR_OR_NULL(us_ibdev)) { 521 - us_ibdev = us_ibdev ? us_ibdev : ERR_PTR(-EFAULT); 520 + if (!us_ibdev) { 521 + us_ibdev = ERR_PTR(-EFAULT); 522 522 goto out; 523 523 } 524 524 ··· 586 586 } 587 587 588 588 pf = usnic_ib_discover_pf(vf->vnic); 589 - if (IS_ERR_OR_NULL(pf)) { 590 - usnic_err("Failed to discover pf of vnic %s with err%ld\n", 591 - pci_name(pdev), PTR_ERR(pf)); 592 - err = pf ? PTR_ERR(pf) : -EFAULT; 589 + if (IS_ERR(pf)) { 590 + err = PTR_ERR(pf); 591 + usnic_err("Failed to discover pf of vnic %s with err%d\n", 592 + pci_name(pdev), err); 593 593 goto out_clean_vnic; 594 594 } 595 595
+6
drivers/infiniband/sw/rxe/rxe_loc.h
··· 140 140 return IB_MTU_4096; 141 141 } 142 142 143 + static inline bool is_odp_mr(struct rxe_mr *mr) 144 + { 145 + return IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING) && mr->umem && 146 + mr->umem->is_odp; 147 + } 148 + 143 149 void free_rd_atomic_resource(struct resp_res *res); 144 150 145 151 static inline void rxe_advance_resp_resource(struct rxe_qp *qp)
+2 -2
drivers/infiniband/sw/rxe/rxe_mr.c
··· 323 323 return err; 324 324 } 325 325 326 - if (mr->umem->is_odp) 326 + if (is_odp_mr(mr)) 327 327 return rxe_odp_mr_copy(mr, iova, addr, length, dir); 328 328 else 329 329 return rxe_mr_copy_xarray(mr, iova, addr, length, dir); ··· 536 536 u64 *va; 537 537 538 538 /* ODP is not supported right now. WIP. */ 539 - if (mr->umem->is_odp) 539 + if (is_odp_mr(mr)) 540 540 return RESPST_ERR_UNSUPPORTED_OPCODE; 541 541 542 542 /* See IBA oA19-28 */
+2 -2
drivers/infiniband/sw/rxe/rxe_resp.c
··· 650 650 struct resp_res *res = qp->resp.res; 651 651 652 652 /* ODP is not supported right now. WIP. */ 653 - if (mr->umem->is_odp) 653 + if (is_odp_mr(mr)) 654 654 return RESPST_ERR_UNSUPPORTED_OPCODE; 655 655 656 656 /* oA19-14, oA19-15 */ ··· 706 706 if (!res->replay) { 707 707 u64 iova = qp->resp.va + qp->resp.offset; 708 708 709 - if (mr->umem->is_odp) 709 + if (is_odp_mr(mr)) 710 710 err = rxe_odp_atomic_op(mr, iova, pkt->opcode, 711 711 atmeth_comp(pkt), 712 712 atmeth_swap_add(pkt),
+7
include/rdma/ib_verbs.h
··· 4790 4790 4791 4791 struct ib_ucontext *ib_uverbs_get_ucontext_file(struct ib_uverbs_file *ufile); 4792 4792 4793 + #if IS_ENABLED(CONFIG_INFINIBAND_USER_ACCESS) 4793 4794 int uverbs_destroy_def_handler(struct uverbs_attr_bundle *attrs); 4795 + #else 4796 + static inline int uverbs_destroy_def_handler(struct uverbs_attr_bundle *attrs) 4797 + { 4798 + return 0; 4799 + } 4800 + #endif 4794 4801 4795 4802 struct net_device *rdma_alloc_netdev(struct ib_device *device, u32 port_num, 4796 4803 enum rdma_netdev_t type, const char *name,