diff options
-rw-r--r-- | net/core/dev.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 683d493aa1bf..805456147c30 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -6172,13 +6172,16 @@ static int netif_alloc_rx_queues(struct net_device *dev) | |||
6172 | { | 6172 | { |
6173 | unsigned int i, count = dev->num_rx_queues; | 6173 | unsigned int i, count = dev->num_rx_queues; |
6174 | struct netdev_rx_queue *rx; | 6174 | struct netdev_rx_queue *rx; |
6175 | size_t sz = count * sizeof(*rx); | ||
6175 | 6176 | ||
6176 | BUG_ON(count < 1); | 6177 | BUG_ON(count < 1); |
6177 | 6178 | ||
6178 | rx = kcalloc(count, sizeof(struct netdev_rx_queue), GFP_KERNEL); | 6179 | rx = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT); |
6179 | if (!rx) | 6180 | if (!rx) { |
6180 | return -ENOMEM; | 6181 | rx = vzalloc(sz); |
6181 | 6182 | if (!rx) | |
6183 | return -ENOMEM; | ||
6184 | } | ||
6182 | dev->_rx = rx; | 6185 | dev->_rx = rx; |
6183 | 6186 | ||
6184 | for (i = 0; i < count; i++) | 6187 | for (i = 0; i < count; i++) |
@@ -6808,7 +6811,7 @@ void free_netdev(struct net_device *dev) | |||
6808 | 6811 | ||
6809 | netif_free_tx_queues(dev); | 6812 | netif_free_tx_queues(dev); |
6810 | #ifdef CONFIG_SYSFS | 6813 | #ifdef CONFIG_SYSFS |
6811 | kfree(dev->_rx); | 6814 | kvfree(dev->_rx); |
6812 | #endif | 6815 | #endif |
6813 | 6816 | ||
6814 | kfree(rcu_dereference_protected(dev->ingress_queue, 1)); | 6817 | kfree(rcu_dereference_protected(dev->ingress_queue, 1)); |