Skip to content

Commit

Permalink
Revert "IPoIB: change init sequence ordering"
Browse files Browse the repository at this point in the history
This reverts commit 3bcce48.

The series of IPoIB bug fixes that went into 3.19-rc1 introduce
regressions, and after trying to sort things out, we decided to revert
to 3.18's IPoIB driver and get things right for 3.20.

Signed-off-by: Roland Dreier <roland@purestorage.com>
  • Loading branch information
Roland Dreier committed Jan 30, 2015
1 parent 0306eda commit bb75963
Showing 1 changed file with 7 additions and 17 deletions.
24 changes: 7 additions & 17 deletions drivers/infiniband/ulp/ipoib/ipoib_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1262,13 +1262,15 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);

if (ipoib_neigh_hash_init(priv) < 0)
goto out;
/* Allocate RX/TX "rings" to hold queued skbs */
priv->rx_ring = kzalloc(ipoib_recvq_size * sizeof *priv->rx_ring,
GFP_KERNEL);
if (!priv->rx_ring) {
printk(KERN_WARNING "%s: failed to allocate RX ring (%d entries)\n",
ca->name, ipoib_recvq_size);
goto out;
goto out_neigh_hash_cleanup;
}

priv->tx_ring = vzalloc(ipoib_sendq_size * sizeof *priv->tx_ring);
Expand All @@ -1283,24 +1285,16 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
if (ipoib_ib_dev_init(dev, ca, port))
goto out_tx_ring_cleanup;

/*
* Must be after ipoib_ib_dev_init so we can allocate a per
* device wq there and use it here
*/
if (ipoib_neigh_hash_init(priv) < 0)
goto out_dev_uninit;

return 0;

out_dev_uninit:
ipoib_ib_dev_cleanup();

out_tx_ring_cleanup:
vfree(priv->tx_ring);

out_rx_ring_cleanup:
kfree(priv->rx_ring);

out_neigh_hash_cleanup:
ipoib_neigh_hash_uninit(dev);
out:
return -ENOMEM;
}
Expand All @@ -1323,19 +1317,15 @@ void ipoib_dev_cleanup(struct net_device *dev)
}
unregister_netdevice_many(&head);

/*
* Must be before ipoib_ib_dev_cleanup or we delete an in use
* work queue
*/
ipoib_neigh_hash_uninit(dev);

ipoib_ib_dev_cleanup(dev);

kfree(priv->rx_ring);
vfree(priv->tx_ring);

priv->rx_ring = NULL;
priv->tx_ring = NULL;

ipoib_neigh_hash_uninit(dev);
}

static const struct header_ops ipoib_header_ops = {
Expand Down

0 comments on commit bb75963

Please sign in to comment.