aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/core/dev.c13
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));