diff options
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index fa314cb005a4..856c18c207f3 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
| @@ -798,7 +798,7 @@ static int ixgbe_set_ringparam(struct net_device *netdev, | |||
| 798 | { | 798 | { |
| 799 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 799 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
| 800 | struct ixgbe_ring *temp_tx_ring, *temp_rx_ring; | 800 | struct ixgbe_ring *temp_tx_ring, *temp_rx_ring; |
| 801 | int i, err; | 801 | int i, err = 0; |
| 802 | u32 new_rx_count, new_tx_count; | 802 | u32 new_rx_count, new_tx_count; |
| 803 | bool need_update = false; | 803 | bool need_update = false; |
| 804 | 804 | ||
| @@ -822,6 +822,16 @@ static int ixgbe_set_ringparam(struct net_device *netdev, | |||
| 822 | while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state)) | 822 | while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state)) |
| 823 | msleep(1); | 823 | msleep(1); |
| 824 | 824 | ||
| 825 | if (!netif_running(adapter->netdev)) { | ||
| 826 | for (i = 0; i < adapter->num_tx_queues; i++) | ||
| 827 | adapter->tx_ring[i].count = new_tx_count; | ||
| 828 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 829 | adapter->rx_ring[i].count = new_rx_count; | ||
| 830 | adapter->tx_ring_count = new_tx_count; | ||
| 831 | adapter->rx_ring_count = new_rx_count; | ||
| 832 | goto err_setup; | ||
| 833 | } | ||
| 834 | |||
| 825 | temp_tx_ring = kcalloc(adapter->num_tx_queues, | 835 | temp_tx_ring = kcalloc(adapter->num_tx_queues, |
| 826 | sizeof(struct ixgbe_ring), GFP_KERNEL); | 836 | sizeof(struct ixgbe_ring), GFP_KERNEL); |
| 827 | if (!temp_tx_ring) { | 837 | if (!temp_tx_ring) { |
| @@ -879,8 +889,7 @@ static int ixgbe_set_ringparam(struct net_device *netdev, | |||
| 879 | 889 | ||
| 880 | /* if rings need to be updated, here's the place to do it in one shot */ | 890 | /* if rings need to be updated, here's the place to do it in one shot */ |
| 881 | if (need_update) { | 891 | if (need_update) { |
| 882 | if (netif_running(netdev)) | 892 | ixgbe_down(adapter); |
| 883 | ixgbe_down(adapter); | ||
| 884 | 893 | ||
| 885 | /* tx */ | 894 | /* tx */ |
| 886 | if (new_tx_count != adapter->tx_ring_count) { | 895 | if (new_tx_count != adapter->tx_ring_count) { |
| @@ -897,13 +906,8 @@ static int ixgbe_set_ringparam(struct net_device *netdev, | |||
| 897 | temp_rx_ring = NULL; | 906 | temp_rx_ring = NULL; |
| 898 | adapter->rx_ring_count = new_rx_count; | 907 | adapter->rx_ring_count = new_rx_count; |
| 899 | } | 908 | } |
| 900 | } | ||
| 901 | |||
| 902 | /* success! */ | ||
| 903 | err = 0; | ||
| 904 | if (netif_running(netdev)) | ||
| 905 | ixgbe_up(adapter); | 909 | ixgbe_up(adapter); |
| 906 | 910 | } | |
| 907 | err_setup: | 911 | err_setup: |
| 908 | clear_bit(__IXGBE_RESETTING, &adapter->state); | 912 | clear_bit(__IXGBE_RESETTING, &adapter->state); |
| 909 | return err; | 913 | return err; |
