Messages in this thread Patch in this message | | | From | Shaokun Zhang <> | Subject | [PATCH] net: optimize cmpxchg in ip_idents_reserve | Date | Wed, 15 Jan 2020 11:23:40 +0800 |
| |
From: Yuqi Jin <jinyuqi@huawei.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@davemloft.net> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> Cc: Eric Dumazet <edumazet@google.com> Cc: Yang Guo <guoyang2@huawei.com> Signed-off-by: Yuqi Jin <jinyuqi@huawei.com> Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.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
| |