From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: [PATCH net-next] net-gro: use ffs() to speedup napi_gro_flush() Date: Wed, 21 Nov 2018 11:39:28 -0800 Message-ID: <20181121193928.46957-1-edumazet@google.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Cc: netdev , Eric Dumazet , Eric Dumazet To: "David S . Miller" Return-path: Received: from mail-pl1-f193.google.com ([209.85.214.193]:38739 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728923AbeKVGPK (ORCPT ); Thu, 22 Nov 2018 01:15:10 -0500 Received: by mail-pl1-f193.google.com with SMTP id e5so6904207plb.5 for ; Wed, 21 Nov 2018 11:39:32 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: 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 --- 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