[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1579058620-26684-1-git-send-email-zhangshaokun@hisilicon.com>
Date: Wed, 15 Jan 2020 11:23:40 +0800
From: Shaokun Zhang <zhangshaokun@...ilicon.com>
To: <netdev@...r.kernel.org>, <linux-kernel@...r.kernel.org>
CC: Yuqi Jin <jinyuqi@...wei.com>,
"David S. Miller" <davem@...emloft.net>,
Alexey Kuznetsov <kuznet@....inr.ac.ru>,
Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>,
Eric Dumazet <edumazet@...gle.com>,
Yang Guo <guoyang2@...wei.com>,
Shaokun Zhang <zhangshaokun@...ilicon.com>
Subject: [PATCH] net: optimize cmpxchg in ip_idents_reserve
From: Yuqi Jin <jinyuqi@...wei.com>
atomic_try_cmpxchg is called instead of atomic_cmpxchg that can reduce
the access number of the global variable @p_id in the loop. Let's
optimize it for performance.
Cc: "David S. Miller" <davem@...emloft.net>
Cc: Alexey Kuznetsov <kuznet@....inr.ac.ru>
Cc: Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>
Cc: Eric Dumazet <edumazet@...gle.com>
Cc: Yang Guo <guoyang2@...wei.com>
Signed-off-by: Yuqi Jin <jinyuqi@...wei.com>
Signed-off-by: Shaokun Zhang <zhangshaokun@...ilicon.com>
---
net/ipv4/route.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 87e979f2b74a..7e28c7121c20 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -496,10 +496,10 @@ u32 ip_idents_reserve(u32 hash, int segs)
delta = prandom_u32_max(now - old);
/* Do not use atomic_add_return() as it makes UBSAN unhappy */
+ old = (u32)atomic_read(p_id);
do {
- old = (u32)atomic_read(p_id);
new = old + delta + segs;
- } while (atomic_cmpxchg(p_id, old, new) != old);
+ } while (!atomic_try_cmpxchg(p_id, &old, new));
return new - segs;
}
--
2.7.4
Powered by blists - more mailing lists