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 <eduma...@google.com>
---
 net/core/dev.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 
f2bfd2eda7b2734d29d30f0e82c1a48c1b5b166a..d83582623cd74523033a4798218f8da4760b7a09
 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -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);
-- 
2.19.1.1215.g8438c0b245-goog

Reply via email to