Thread (19 messages) flat view 19 messages, 6 authors, 2014-08-26

Re: [RFC 1/4] net: allow large number of rx queues

From: Pankaj Gupta <hidden>
Date: 2014-08-19 05:15:45
Also in: lkml

Hello.

On 08/18/2014 05:37 PM, Pankaj Gupta wrote:
quoted
netif_alloc_rx_queues() uses kcalloc() to allocate memory
for "struct netdev_queue *_rx" array.
If we are doing large rx queue allocation kcalloc() might
fail, so this patch does a fallback to vzalloc().
Similar implementation is done for tx queue allocation in
netif_alloc_netdev_queues().
quoted
We avoid failure of high order memory allocation
with the help of vzalloc(), this allows us to do large
rx and tx queue allocation which in turn helps us to
increase the number of queues in tun.
quoted
As vmalloc() adds overhead on a critical network path,
__GFP_REPEAT flag is used with kzalloc() to do this fallback
only when really needed.
quoted
Signed-off-by: Pankaj Gupta <redacted>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: David Gibson <redacted>
---
  net/core/dev.c | 20 +++++++++++++-------
  1 file changed, 13 insertions(+), 7 deletions(-)
quoted
diff --git a/net/core/dev.c b/net/core/dev.c
index 1c15b18..a455a02 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5942,17 +5942,24 @@ void netif_stacked_transfer_operstate(const struct
net_device *rootdev,
  EXPORT_SYMBOL(netif_stacked_transfer_operstate);

  #ifdef CONFIG_SYSFS
+static void netif_free_rx_queues(struct net_device *dev)
+{
+	kvfree(dev->_rx);
+}
+
  static int netif_alloc_rx_queues(struct net_device *dev)
  {
  	unsigned int i, count = dev->num_rx_queues;
  	struct netdev_rx_queue *rx;
-
+	size_t sz = count * sizeof(*rx);
   Please keep an empty line after declarations.
     Yes, I will add it. Thanks
quoted
  	BUG_ON(count < 1);
WBR, Sergei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help