• Vineet Gupta's avatar
    ARC: atomics: implement relaxed variants · b64be683
    Vineet Gupta authored
    The current ARC fetch/return atomics provide fully ordered semantics
    only with 2 full barriers around the operation.
    
    Instead implement them as relaxed variants without any barriers and
    rely on generic code to generate the fully-ordered, acquire and release
    varaints by adding the appropriate full barriers.
    
    This helps elide some extra barriers in case of acquire/release/relaxed
    calls.
    
    bloat-o-meter for hsdk defconfig shows codegen improvements, although
    numbers below inflated due to unrelated inlining heuristic changes
    
    | bloat-o-meter vmlinux-643babe34fd7-non-relaxed vmlinux-45aa05cb44d7-relaxed
    | add/remove: 2/5 grow/shrink: 42/1222 up/down: 4158/-14312 (-10154)
    | Function                                     old     new   delta
    | ..
    | sys_renameat                                 462     476     +14
    | ip_mc_inc_group                              424     436     +12
    | do_read_cache_page                          1882    1894     +12
    | ..
    | refcount_dec_and_mutex_lock                  254     250      -4
    | refcount_dec_and_lock_irqsave                258     254      -4
    | refcount_dec_and_lock                        254     250      -4
    | ..
    | tcp_v6_route_req                             246     238      -8
    | tcp_v4_destroy_sock                          286     278      -8
    | tcp_twsk_unique                              352     344      -8
    
    Link: https://lore.kernel.org/r/20180830144344.GW24142@hirez.programming.kicks-ass.netSuggested-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarVineet Gupta <vgupta@kernel.org>
    b64be683
atomic-llsc.h 2.77 KB