diff options
| -rw-r--r-- | drivers/infiniband/core/mad.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_cm.c | 10 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 9 |
4 files changed, 17 insertions, 7 deletions
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 58463da814d1..e351b1548535 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c | |||
| @@ -2953,6 +2953,9 @@ static void ib_mad_remove_device(struct ib_device *device) | |||
| 2953 | { | 2953 | { |
| 2954 | int i, num_ports, cur_port; | 2954 | int i, num_ports, cur_port; |
| 2955 | 2955 | ||
| 2956 | if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) | ||
| 2957 | return; | ||
| 2958 | |||
| 2956 | if (device->node_type == RDMA_NODE_IB_SWITCH) { | 2959 | if (device->node_type == RDMA_NODE_IB_SWITCH) { |
| 2957 | num_ports = 1; | 2960 | num_ports = 1; |
| 2958 | cur_port = 0; | 2961 | cur_port = 0; |
diff --git a/drivers/infiniband/hw/cxgb3/iwch.c b/drivers/infiniband/hw/cxgb3/iwch.c index ee1d8b4d4541..63f975f3e30f 100644 --- a/drivers/infiniband/hw/cxgb3/iwch.c +++ b/drivers/infiniband/hw/cxgb3/iwch.c | |||
| @@ -189,6 +189,7 @@ static void close_rnic_dev(struct t3cdev *tdev) | |||
| 189 | list_for_each_entry_safe(dev, tmp, &dev_list, entry) { | 189 | list_for_each_entry_safe(dev, tmp, &dev_list, entry) { |
| 190 | if (dev->rdev.t3cdev_p == tdev) { | 190 | if (dev->rdev.t3cdev_p == tdev) { |
| 191 | dev->rdev.flags = CXIO_ERROR_FATAL; | 191 | dev->rdev.flags = CXIO_ERROR_FATAL; |
| 192 | synchronize_net(); | ||
| 192 | cancel_delayed_work_sync(&dev->db_drop_task); | 193 | cancel_delayed_work_sync(&dev->db_drop_task); |
| 193 | list_del(&dev->entry); | 194 | list_del(&dev->entry); |
| 194 | iwch_unregister_device(dev); | 195 | iwch_unregister_device(dev); |
| @@ -217,6 +218,7 @@ static void iwch_event_handler(struct t3cdev *tdev, u32 evt, u32 port_id) | |||
| 217 | switch (evt) { | 218 | switch (evt) { |
| 218 | case OFFLOAD_STATUS_DOWN: { | 219 | case OFFLOAD_STATUS_DOWN: { |
| 219 | rdev->flags = CXIO_ERROR_FATAL; | 220 | rdev->flags = CXIO_ERROR_FATAL; |
| 221 | synchronize_net(); | ||
| 220 | event.event = IB_EVENT_DEVICE_FATAL; | 222 | event.event = IB_EVENT_DEVICE_FATAL; |
| 221 | dispatch = 1; | 223 | dispatch = 1; |
| 222 | break; | 224 | break; |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 83a7751c38d6..bc658373ad55 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c | |||
| @@ -708,6 +708,7 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_ | |||
| 708 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 708 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
| 709 | struct ipoib_cm_tx_buf *tx_req; | 709 | struct ipoib_cm_tx_buf *tx_req; |
| 710 | u64 addr; | 710 | u64 addr; |
| 711 | int rc; | ||
| 711 | 712 | ||
| 712 | if (unlikely(skb->len > tx->mtu)) { | 713 | if (unlikely(skb->len > tx->mtu)) { |
| 713 | ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n", | 714 | ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n", |
| @@ -739,9 +740,10 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_ | |||
| 739 | 740 | ||
| 740 | tx_req->mapping = addr; | 741 | tx_req->mapping = addr; |
| 741 | 742 | ||
| 742 | if (unlikely(post_send(priv, tx, tx->tx_head & (ipoib_sendq_size - 1), | 743 | rc = post_send(priv, tx, tx->tx_head & (ipoib_sendq_size - 1), |
| 743 | addr, skb->len))) { | 744 | addr, skb->len); |
| 744 | ipoib_warn(priv, "post_send failed\n"); | 745 | if (unlikely(rc)) { |
| 746 | ipoib_warn(priv, "post_send failed, error %d\n", rc); | ||
| 745 | ++dev->stats.tx_errors; | 747 | ++dev->stats.tx_errors; |
| 746 | ib_dma_unmap_single(priv->ca, addr, skb->len, DMA_TO_DEVICE); | 748 | ib_dma_unmap_single(priv->ca, addr, skb->len, DMA_TO_DEVICE); |
| 747 | dev_kfree_skb_any(skb); | 749 | dev_kfree_skb_any(skb); |
| @@ -752,6 +754,8 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_ | |||
| 752 | if (++priv->tx_outstanding == ipoib_sendq_size) { | 754 | if (++priv->tx_outstanding == ipoib_sendq_size) { |
| 753 | ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n", | 755 | ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n", |
| 754 | tx->qp->qp_num); | 756 | tx->qp->qp_num); |
| 757 | if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP)) | ||
| 758 | ipoib_warn(priv, "request notify on send CQ failed\n"); | ||
| 755 | netif_stop_queue(dev); | 759 | netif_stop_queue(dev); |
| 756 | } | 760 | } |
| 757 | } | 761 | } |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 8c91d9f37ada..5df40b128f81 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
| @@ -529,7 +529,7 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb, | |||
| 529 | { | 529 | { |
| 530 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 530 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
| 531 | struct ipoib_tx_buf *tx_req; | 531 | struct ipoib_tx_buf *tx_req; |
| 532 | int hlen; | 532 | int hlen, rc; |
| 533 | void *phead; | 533 | void *phead; |
| 534 | 534 | ||
| 535 | if (skb_is_gso(skb)) { | 535 | if (skb_is_gso(skb)) { |
| @@ -585,9 +585,10 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb, | |||
| 585 | netif_stop_queue(dev); | 585 | netif_stop_queue(dev); |
| 586 | } | 586 | } |
| 587 | 587 | ||
| 588 | if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), | 588 | rc = post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), |
| 589 | address->ah, qpn, tx_req, phead, hlen))) { | 589 | address->ah, qpn, tx_req, phead, hlen); |
| 590 | ipoib_warn(priv, "post_send failed\n"); | 590 | if (unlikely(rc)) { |
| 591 | ipoib_warn(priv, "post_send failed, error %d\n", rc); | ||
| 591 | ++dev->stats.tx_errors; | 592 | ++dev->stats.tx_errors; |
| 592 | --priv->tx_outstanding; | 593 | --priv->tx_outstanding; |
| 593 | ipoib_dma_unmap_tx(priv->ca, tx_req); | 594 | ipoib_dma_unmap_tx(priv->ca, tx_req); |
