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 IB regression fixes from Roland Dreier:

- Fix mlx4 VFs not working on old guests because of 64B CQE changes

- Fix ill-considered sparse fix for qib

- Fix IPoIB crash due to skb double destruct introduced in 3.8-rc1

* tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
IB/qib: Fix for broken sparse warning fix
mlx4_core: Fix advertisement of wrong PF context behaviour
IPoIB: Fix crash due to skb double destruct

+10 -15
+3 -8
drivers/infiniband/hw/qib/qib_qp.c
··· 263 263 struct qib_qp __rcu **qpp; 264 264 265 265 qpp = &dev->qp_table[n]; 266 - q = rcu_dereference_protected(*qpp, 267 - lockdep_is_held(&dev->qpt_lock)); 268 - for (; q; qpp = &q->next) { 266 + for (; (q = rcu_dereference_protected(*qpp, 267 + lockdep_is_held(&dev->qpt_lock))) != NULL; 268 + qpp = &q->next) 269 269 if (q == qp) { 270 270 atomic_dec(&qp->refcount); 271 271 *qpp = qp->next; 272 272 rcu_assign_pointer(qp->next, NULL); 273 - q = rcu_dereference_protected(*qpp, 274 - lockdep_is_held(&dev->qpt_lock)); 275 273 break; 276 274 } 277 - q = rcu_dereference_protected(*qpp, 278 - lockdep_is_held(&dev->qpt_lock)); 279 - } 280 275 } 281 276 282 277 spin_unlock_irqrestore(&dev->qpt_lock, flags);
+3 -3
drivers/infiniband/ulp/ipoib/ipoib_cm.c
··· 741 741 742 742 tx_req->mapping = addr; 743 743 744 + skb_orphan(skb); 745 + skb_dst_drop(skb); 746 + 744 747 rc = post_send(priv, tx, tx->tx_head & (ipoib_sendq_size - 1), 745 748 addr, skb->len); 746 749 if (unlikely(rc)) { ··· 754 751 } else { 755 752 dev->trans_start = jiffies; 756 753 ++tx->tx_head; 757 - 758 - skb_orphan(skb); 759 - skb_dst_drop(skb); 760 754 761 755 if (++priv->tx_outstanding == ipoib_sendq_size) { 762 756 ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n",
+3 -3
drivers/infiniband/ulp/ipoib/ipoib_ib.c
··· 600 600 netif_stop_queue(dev); 601 601 } 602 602 603 + skb_orphan(skb); 604 + skb_dst_drop(skb); 605 + 603 606 rc = post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), 604 607 address->ah, qpn, tx_req, phead, hlen); 605 608 if (unlikely(rc)) { ··· 618 615 619 616 address->last_send = priv->tx_head; 620 617 ++priv->tx_head; 621 - 622 - skb_orphan(skb); 623 - skb_dst_drop(skb); 624 618 } 625 619 626 620 if (unlikely(priv->tx_outstanding > MAX_SEND_CQE))
+1 -1
drivers/net/ethernet/mellanox/mlx4/main.c
··· 380 380 } 381 381 } 382 382 383 - if ((dev_cap->flags & 383 + if ((dev->caps.flags & 384 384 (MLX4_DEV_CAP_FLAG_64B_CQE | MLX4_DEV_CAP_FLAG_64B_EQE)) && 385 385 mlx4_is_master(dev)) 386 386 dev->caps.function_caps |= MLX4_FUNC_CAP_64B_EQE_CQE;