diff options
author | Eric Dumazet <edumazet@google.com> | 2013-10-30 16:10:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-03 23:19:00 -0500 |
commit | 74d332c13b2148ae934ea94dac1745ae92efe8e5 (patch) | |
tree | 4f8f287774deaba28fa4c85d085d587ae7515aaf /include | |
parent | b397f99921827e114d7f5600447e172a99c50165 (diff) |
net: extend net_device allocation to vmalloc()
Joby Poriyath provided a xen-netback patch to reduce the size of
xenvif structure as some netdev allocation could fail under
memory pressure/fragmentation.
This patch is handling the problem at the core level, allowing
any netdev structures to use vmalloc() if kmalloc() failed.
As vmalloc() adds overhead on a critical network path, add __GFP_REPEAT
to kzalloc() flags to do this fallback only when really needed.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Joby Poriyath <joby.poriyath@citrix.com>
Cc: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/netdevice.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index cb1d918ecdf1..e6353cafbf05 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -1800,6 +1800,7 @@ static inline void unregister_netdevice(struct net_device *dev) | |||
1800 | 1800 | ||
1801 | int netdev_refcnt_read(const struct net_device *dev); | 1801 | int netdev_refcnt_read(const struct net_device *dev); |
1802 | void free_netdev(struct net_device *dev); | 1802 | void free_netdev(struct net_device *dev); |
1803 | void netdev_freemem(struct net_device *dev); | ||
1803 | void synchronize_net(void); | 1804 | void synchronize_net(void); |
1804 | int init_dummy_netdev(struct net_device *dev); | 1805 | int init_dummy_netdev(struct net_device *dev); |
1805 | 1806 | ||