This patch fixes a panic when shared receive queues are not used.
Signed-off-by: David Wilder <[EMAIL PROTECTED]>
---
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 21 ++++++++++++---------
1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 41bed52..955934a 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -231,7 +231,10 @@ static void ipoib_cm_free_rx_ring(struct net_device *dev,
dev_kfree_skb_any(rx_ring[i].skb);
}
- ipoib_vfree(&priv->cm.rx_vmap_srq_ring);
+ if (ipoib_cm_has_srq(dev))
+ ipoib_vfree(&priv->cm.rx_vmap_srq_ring);
+ else
+ kfree(rx_ring);
}
static void ipoib_cm_start_rx_drain(struct ipoib_dev_priv *priv)
@@ -1605,21 +1608,21 @@ void ipoib_cm_dev_cleanup(struct net_device *dev)
struct ipoib_dev_priv *priv = netdev_priv(dev);
int ret;
+ ipoib_dbg(priv, "Cleanup ipoib connected mode.\n");
+
if (!priv->cm.srq)
return;
- ipoib_dbg(priv, "Cleanup ipoib connected mode.\n");
+ if (priv->cm.srq_ring) {
+ ipoib_cm_free_rx_ring(dev, priv->cm.srq_ring);
+ priv->cm.srq_ring = NULL;
+ }
ret = ib_destroy_srq(priv->cm.srq);
if (ret)
ipoib_warn(priv, "ib_destroy_srq failed: %d\n", ret);
-
- priv->cm.srq = NULL;
- if (!priv->cm.srq_ring)
- return;
-
- ipoib_cm_free_rx_ring(dev, priv->cm.srq_ring);
- priv->cm.srq_ring = NULL;
+ else
+ priv->cm.srq = NULL;
ipoib_vfree(&priv->cm.rx_vmap_wr_arr);
}
_______________________________________________
ewg mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg