|
@@ -6172,13 +6172,16 @@ static int netif_alloc_rx_queues(struct net_device *dev)
|
|
{
|
|
{
|
|
unsigned int i, count = dev->num_rx_queues;
|
|
unsigned int i, count = dev->num_rx_queues;
|
|
struct netdev_rx_queue *rx;
|
|
struct netdev_rx_queue *rx;
|
|
|
|
+ size_t sz = count * sizeof(*rx);
|
|
|
|
|
|
BUG_ON(count < 1);
|
|
BUG_ON(count < 1);
|
|
|
|
|
|
- rx = kcalloc(count, sizeof(struct netdev_rx_queue), GFP_KERNEL);
|
|
|
|
- if (!rx)
|
|
|
|
- return -ENOMEM;
|
|
|
|
-
|
|
|
|
|
|
+ rx = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
|
|
|
|
+ if (!rx) {
|
|
|
|
+ rx = vzalloc(sz);
|
|
|
|
+ if (!rx)
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+ }
|
|
dev->_rx = rx;
|
|
dev->_rx = rx;
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
for (i = 0; i < count; i++)
|
|
@@ -6808,7 +6811,7 @@ void free_netdev(struct net_device *dev)
|
|
|
|
|
|
netif_free_tx_queues(dev);
|
|
netif_free_tx_queues(dev);
|
|
#ifdef CONFIG_SYSFS
|
|
#ifdef CONFIG_SYSFS
|
|
- kfree(dev->_rx);
|
|
|
|
|
|
+ kvfree(dev->_rx);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
kfree(rcu_dereference_protected(dev->ingress_queue, 1));
|
|
kfree(rcu_dereference_protected(dev->ingress_queue, 1));
|