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:
"Several bug fixes for old bugs:

- Welcome Leon as co-maintainer for RDMA so we are back to having two
people

- Some corner cases are fixed in mlx5's MR code

- Long standing CM bug where a DREQ at the wrong time can result in a
long timeout

- Missing locking and refcounting in hf1"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma:
RDMA/hfi1: Fix use-after-free bug for mm struct
IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition
IB/cm: Cancel mad on the DREQ event when the state is MRA_REP_RCVD
RDMA/mlx5: Add a missing update of cache->last_add
RDMA/mlx5: Don't remove cache MRs when a delay is needed
MAINTAINERS: Update qib and hfi1 related drivers
MAINTAINERS: Add Leon Romanovsky to RDMA maintainers

+17 -8
+1 -4
MAINTAINERS
··· 8676 8676 F: include/uapi/linux/cciss*.h 8677 8677 8678 8678 HFI1 DRIVER 8679 - M: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> 8680 8679 M: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> 8681 8680 L: linux-rdma@vger.kernel.org 8682 8681 S: Supported ··· 9598 9599 9599 9600 INFINIBAND SUBSYSTEM 9600 9601 M: Jason Gunthorpe <jgg@nvidia.com> 9602 + M: Leon Romanovsky <leonro@nvidia.com> 9601 9603 L: linux-rdma@vger.kernel.org 9602 9604 S: Supported 9603 9605 W: https://github.com/linux-rdma/rdma-core ··· 14657 14657 14658 14658 OPA-VNIC DRIVER 14659 14659 M: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> 14660 - M: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> 14661 14660 L: linux-rdma@vger.kernel.org 14662 14661 S: Supported 14663 14662 F: drivers/infiniband/ulp/opa_vnic ··· 16098 16099 16099 16100 QIB DRIVER 16100 16101 M: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> 16101 - M: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> 16102 16102 L: linux-rdma@vger.kernel.org 16103 16103 S: Supported 16104 16104 F: drivers/infiniband/hw/qib/ ··· 16615 16617 16616 16618 RDMAVT - RDMA verbs software 16617 16619 M: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> 16618 - M: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> 16619 16620 L: linux-rdma@vger.kernel.org 16620 16621 S: Supported 16621 16622 F: drivers/infiniband/sw/rdmavt
+1 -2
drivers/infiniband/core/cm.c
··· 2824 2824 switch (cm_id_priv->id.state) { 2825 2825 case IB_CM_REP_SENT: 2826 2826 case IB_CM_DREQ_SENT: 2827 + case IB_CM_MRA_REP_RCVD: 2827 2828 ib_cancel_mad(cm_id_priv->msg); 2828 2829 break; 2829 2830 case IB_CM_ESTABLISHED: 2830 2831 if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT || 2831 2832 cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD) 2832 2833 ib_cancel_mad(cm_id_priv->msg); 2833 - break; 2834 - case IB_CM_MRA_REP_RCVD: 2835 2834 break; 2836 2835 case IB_CM_TIMEWAIT: 2837 2836 atomic_long_inc(&work->port->counters[CM_RECV_DUPLICATES]
+6
drivers/infiniband/hw/hfi1/mmu_rb.c
··· 80 80 unsigned long flags; 81 81 struct list_head del_list; 82 82 83 + /* Prevent freeing of mm until we are completely finished. */ 84 + mmgrab(handler->mn.mm); 85 + 83 86 /* Unregister first so we don't get any more notifications. */ 84 87 mmu_notifier_unregister(&handler->mn, handler->mn.mm); 85 88 ··· 104 101 spin_unlock_irqrestore(&handler->lock, flags); 105 102 106 103 do_remove(handler, &del_list); 104 + 105 + /* Now the mm may be freed. */ 106 + mmdrop(handler->mn.mm); 107 107 108 108 kfree(handler); 109 109 }
+4 -1
drivers/infiniband/hw/mlx5/mr.c
··· 574 574 spin_lock_irq(&ent->lock); 575 575 if (ent->disabled) 576 576 goto out; 577 - if (need_delay) 577 + if (need_delay) { 578 578 queue_delayed_work(cache->wq, &ent->dwork, 300 * HZ); 579 + goto out; 580 + } 579 581 remove_cache_mr_locked(ent); 580 582 queue_adjust_cache_locked(ent); 581 583 } ··· 627 625 { 628 626 struct mlx5_cache_ent *ent = mr->cache_ent; 629 627 628 + WRITE_ONCE(dev->cache.last_add, jiffies); 630 629 spin_lock_irq(&ent->lock); 631 630 list_add_tail(&mr->list, &ent->head); 632 631 ent->available_mrs++;
+5 -1
drivers/infiniband/sw/rdmavt/qp.c
··· 3190 3190 spin_lock_irqsave(&sqp->s_lock, flags); 3191 3191 rvt_send_complete(sqp, wqe, send_status); 3192 3192 if (sqp->ibqp.qp_type == IB_QPT_RC) { 3193 - int lastwqe = rvt_error_qp(sqp, IB_WC_WR_FLUSH_ERR); 3193 + int lastwqe; 3194 + 3195 + spin_lock(&sqp->r_lock); 3196 + lastwqe = rvt_error_qp(sqp, IB_WC_WR_FLUSH_ERR); 3197 + spin_unlock(&sqp->r_lock); 3194 3198 3195 3199 sqp->s_flags &= ~RVT_S_BUSY; 3196 3200 spin_unlock_irqrestore(&sqp->s_lock, flags);