net-gro: use ffs() to speedup napi_gro_flush()
authorEric Dumazet <edumazet@google.com>
Wed, 21 Nov 2018 19:39:28 +0000 (11:39 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Nov 2018 19:32:55 +0000 (11:32 -0800)
We very often have few flows/chains to look at, and we
might increase GRO_HASH_BUCKETS to 32 or 64 in the future.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c

index f2bfd2e..d835826 100644 (file)
@@ -5364,11 +5364,13 @@ static void __napi_gro_flush_chain(struct napi_struct *napi, u32 index,
  */
 void napi_gro_flush(struct napi_struct *napi, bool flush_old)
 {
-       u32 i;
+       unsigned long bitmask = napi->gro_bitmask;
+       unsigned int i, base = ~0U;
 
-       for (i = 0; i < GRO_HASH_BUCKETS; i++) {
-               if (test_bit(i, &napi->gro_bitmask))
-                       __napi_gro_flush_chain(napi, i, flush_old);
+       while ((i = ffs(bitmask)) != 0) {
+               bitmask >>= i;
+               base += i;
+               __napi_gro_flush_chain(napi, base, flush_old);
        }
 }
 EXPORT_SYMBOL(napi_gro_flush);