Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (43 commits) net: Fix 'Re: PACKET_TX_RING: packet size is too long' netdev: usb: dm9601.c can drive a device not supported yet, add support for it qlge: Fix firmware mailbox command timeout. qlge: Fix EEH handling. AF_RAW: Augment raw_send_hdrinc to expand skb to fit iphdr->ihl (v2) bonding: fix a race condition in calls to slave MII ioctls virtio-net: fix data corruption with OOM sfc: Set ip_summed correctly for page buffers passed to GRO cnic: Fix L2CTX_STATUSB_NUM offset in context memory. MAINTAINERS: rt2x00 list is moderated airo: Reorder tests, check bounds before element mac80211: fix for incorrect sequence number on hostapd injected frames libertas spi: fix sparse errors mac80211: trivial: fix spelling in mesh_hwmp cfg80211: sme: deauthenticate on assoc failure mac80211: keep auth state when assoc fails mac80211: fix ibss joining b43: add 'struct b43_wl' missing declaration b43: Fix Bugzilla #14181 and the bug from the previous 'fix' rt2x00: Fix crypto in TX frame for rt2800usb ...
This commit is contained in:
@ -732,7 +732,7 @@ static int igb_set_ringparam(struct net_device *netdev,
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(netdev);
|
||||
struct igb_ring *temp_ring;
|
||||
int i, err;
|
||||
int i, err = 0;
|
||||
u32 new_rx_count, new_tx_count;
|
||||
|
||||
if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
|
||||
@ -752,18 +752,30 @@ static int igb_set_ringparam(struct net_device *netdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
|
||||
msleep(1);
|
||||
|
||||
if (!netif_running(adapter->netdev)) {
|
||||
for (i = 0; i < adapter->num_tx_queues; i++)
|
||||
adapter->tx_ring[i].count = new_tx_count;
|
||||
for (i = 0; i < adapter->num_rx_queues; i++)
|
||||
adapter->rx_ring[i].count = new_rx_count;
|
||||
adapter->tx_ring_count = new_tx_count;
|
||||
adapter->rx_ring_count = new_rx_count;
|
||||
goto clear_reset;
|
||||
}
|
||||
|
||||
if (adapter->num_tx_queues > adapter->num_rx_queues)
|
||||
temp_ring = vmalloc(adapter->num_tx_queues * sizeof(struct igb_ring));
|
||||
else
|
||||
temp_ring = vmalloc(adapter->num_rx_queues * sizeof(struct igb_ring));
|
||||
if (!temp_ring)
|
||||
return -ENOMEM;
|
||||
|
||||
while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
|
||||
msleep(1);
|
||||
if (!temp_ring) {
|
||||
err = -ENOMEM;
|
||||
goto clear_reset;
|
||||
}
|
||||
|
||||
if (netif_running(adapter->netdev))
|
||||
igb_down(adapter);
|
||||
igb_down(adapter);
|
||||
|
||||
/*
|
||||
* We can't just free everything and then setup again,
|
||||
@ -820,14 +832,11 @@ static int igb_set_ringparam(struct net_device *netdev,
|
||||
|
||||
adapter->rx_ring_count = new_rx_count;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
err_setup:
|
||||
if (netif_running(adapter->netdev))
|
||||
igb_up(adapter);
|
||||
|
||||
clear_bit(__IGB_RESETTING, &adapter->state);
|
||||
igb_up(adapter);
|
||||
vfree(temp_ring);
|
||||
clear_reset:
|
||||
clear_bit(__IGB_RESETTING, &adapter->state);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user