Messages in this thread | | | Subject | Re: [PATCH 2/3] asm-generic, x86: wrap atomic operations | From | Andrey Ryabinin <> | Date | Mon, 20 Mar 2017 19:41:16 +0300 |
| |
On 03/14/2017 10:24 PM, Dmitry Vyukov wrote:
> diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h > index 14635c5ea025..95dd167eb3af 100644 > --- a/arch/x86/include/asm/atomic.h > +++ b/arch/x86/include/asm/atomic.h > @@ -16,36 +16,46 @@ > #define ATOMIC_INIT(i) { (i) } > > /** > - * atomic_read - read atomic variable > + * arch_atomic_read - read atomic variable > * @v: pointer of type atomic_t > * > * Atomically reads the value of @v. > */ > -static __always_inline int atomic_read(const atomic_t *v) > +static __always_inline int arch_atomic_read(const atomic_t *v) > { > - return READ_ONCE((v)->counter); > + /* > + * We use READ_ONCE_NOCHECK() because atomic_read() contains KASAN > + * instrumentation. Double instrumentation is unnecessary. > + */ > + return READ_ONCE_NOCHECK((v)->counter);
This is kinda questionable "optimization". READ_ONCE_NOCHECK() is actually function call to __read_once_size_nocheck(). So this _NOCHECK adds some bloat to the kernel. E.g. on my .config remove of _NOCHECK() saves ~400K of .text:
size vmlinux_read text data bss dec hex filename 40548235 16418838 23289856 80256929 4c89fa1 vmlinux_read size vmlinux_read_nocheck text data bss dec hex filename 40938418 16451958 23289856 80680232 4cf1528 vmlinux_read_nocheck
| |