Re: [PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread kbuild test robot
Hi Nadav,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17 next-20180604]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nadav-Amit/x86-macrofying-inline-asm-for-better-compilation/20180605-124313
config: um-x86_64_defconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=um SUBARCH=x86_64

All errors (new ones prefixed by >>):

   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:220: Error: no such instruction: `lock_prefix 
>> btsq $0,(%rax)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 28(%r12)'
--
   arch/x86/include/asm/atomic64_64.h: Assembler messages:
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 1000(%rcx,%rdx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 64(%rdx)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:267: Error: no such instruction: `lock_prefix 
>> btrq $8,8(%rax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
>> orb $2,8(%rax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rdx)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rdx)'
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rax)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 16(%r12)'
   arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
decl 16(%r12)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl (%rdx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl (%rdx)'
--
   arch/x86/include/asm/atomic64_64.h: Assembler messages:
>> arch/x86/include/asm/atomic64_64.h:46: Error: no such instruction: 
>> `lock_prefix addq %rsi,1008(%rdx,%rax)'
>> arch/x86/include/asm/atomic64_64.h:46: Error: no such instruction: 
>> `lock_prefix addq %rsi,72(%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 72(%rax)'
>> arch/x86/include/asm/atomic64_64.h:183: Error: no such instruction: 
>> `lock_prefix cmpxchgq %rcx,56(%rdx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 76(%rdi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%r12)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 72(%rdi)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 56(%rsi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 72(%rdi)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 76(%rbx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl -868(%rbx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%rdi)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-5,8(%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl (%rdi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 72(%rbx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 56(%rax)'
>> arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
>> decl 296(%rcx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 24(%rdx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq (%rbx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 8(%rbx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 12(%rbx)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-2,8(%rax)'
>> arch/x86/include/asm/bitops.h:76: 

Re: [PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread kbuild test robot
Hi Nadav,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17 next-20180604]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nadav-Amit/x86-macrofying-inline-asm-for-better-compilation/20180605-124313
config: um-x86_64_defconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=um SUBARCH=x86_64

All errors (new ones prefixed by >>):

   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:220: Error: no such instruction: `lock_prefix 
>> btsq $0,(%rax)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 28(%r12)'
--
   arch/x86/include/asm/atomic64_64.h: Assembler messages:
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 1000(%rcx,%rdx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 64(%rdx)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:267: Error: no such instruction: `lock_prefix 
>> btrq $8,8(%rax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
>> orb $2,8(%rax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rdx)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rdx)'
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,120(%rax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,120(%rax)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 16(%r12)'
   arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
decl 16(%r12)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl (%rdx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl (%rdx)'
--
   arch/x86/include/asm/atomic64_64.h: Assembler messages:
>> arch/x86/include/asm/atomic64_64.h:46: Error: no such instruction: 
>> `lock_prefix addq %rsi,1008(%rdx,%rax)'
>> arch/x86/include/asm/atomic64_64.h:46: Error: no such instruction: 
>> `lock_prefix addq %rsi,72(%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 72(%rax)'
>> arch/x86/include/asm/atomic64_64.h:183: Error: no such instruction: 
>> `lock_prefix cmpxchgq %rcx,56(%rdx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 76(%rdi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%r12)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 72(%rdi)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 56(%rsi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 72(%rdi)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 76(%rbx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl -868(%rbx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%rdi)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-5,8(%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl (%rdi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%rax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 72(%rbx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq 56(%rax)'
>> arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
>> decl 296(%rcx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 24(%rdx)'
>> arch/x86/include/asm/atomic64_64.h:87: Error: no such instruction: 
>> `lock_prefix incq (%rbx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 8(%rbx)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 12(%rbx)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-2,8(%rax)'
>> arch/x86/include/asm/bitops.h:76: 

Re: [PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread kbuild test robot
Hi Nadav,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17 next-20180604]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nadav-Amit/x86-macrofying-inline-asm-for-better-compilation/20180605-124313
config: um-i386_defconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=um SUBARCH=i386

All errors (new ones prefixed by >>):

   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:220: Error: no such instruction: `lock_prefix 
>> btsl $0,once.63562'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 16(%esi)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl contig_page_data+500(%edx)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl vm_zone_stat+32'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:267: Error: no such instruction: `lock_prefix 
>> btrl $8,4(%eax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
>> orb $2,4(%eax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%edx)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%edx)'
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%eax)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 8(%esi)'
   arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
decl 8(%esi)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl host_sleep_count'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl host_sleep_count'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:55: Error: no such instruction: `lock_prefix 
>> addl %edx,contig_page_data+504(%eax)'
>> arch/x86/include/asm/atomic.h:55: Error: no such instruction: `lock_prefix 
>> addl %edx,vm_zone_stat+36'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 36(%eax)'
>> arch/x86/include/asm/atomic.h:197: Error: no such instruction: `lock_prefix 
>> cmpxchgl %ecx,28(%edx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 40(%eax)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%esi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 36(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 28(%eax)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 36(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 40(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl -444(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%ebx)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-5,4(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%eax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 36(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 28(%eax)'
>> arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
>> decl 184(%ecx)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 12(%edi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%esi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 4(%esi)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 8(%esi)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-2,4(%eax)'
>> arch/x86/include/asm/bitops.h:76: Error: 

Re: [PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread kbuild test robot
Hi Nadav,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17 next-20180604]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nadav-Amit/x86-macrofying-inline-asm-for-better-compilation/20180605-124313
config: um-i386_defconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=um SUBARCH=i386

All errors (new ones prefixed by >>):

   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:220: Error: no such instruction: `lock_prefix 
>> btsl $0,once.63562'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 16(%esi)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl contig_page_data+500(%edx)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl vm_zone_stat+32'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:267: Error: no such instruction: `lock_prefix 
>> btrl $8,4(%eax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
>> arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
>> orb $2,4(%eax)'
--
   arch/x86/include/asm/bitops.h: Assembler messages:
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%edx)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%edx)'
   arch/x86/include/asm/bitops.h:76: Error: no such instruction: `lock_prefix 
orb $1,64(%eax)'
>> arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
>> andb $-2,64(%eax)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 8(%esi)'
   arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
decl 8(%esi)'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl host_sleep_count'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl host_sleep_count'
--
   arch/x86/include/asm/atomic.h: Assembler messages:
>> arch/x86/include/asm/atomic.h:55: Error: no such instruction: `lock_prefix 
>> addl %edx,contig_page_data+504(%eax)'
>> arch/x86/include/asm/atomic.h:55: Error: no such instruction: `lock_prefix 
>> addl %edx,vm_zone_stat+36'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 36(%eax)'
>> arch/x86/include/asm/atomic.h:197: Error: no such instruction: `lock_prefix 
>> cmpxchgl %ecx,28(%edx)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 40(%eax)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%esi)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 36(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 28(%eax)'
>> arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
>> decl 36(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl 40(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl -444(%ebx)'
   arch/x86/include/asm/atomic.h:122: Error: no such instruction: `lock_prefix 
decl (%ebx)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-5,4(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%eax)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 36(%eax)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 28(%eax)'
>> arch/x86/include/asm/atomic.h:108: Error: no such instruction: `lock_prefix 
>> decl 184(%ecx)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 12(%edi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl (%esi)'
   arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
incl 4(%esi)'
>> arch/x86/include/asm/atomic.h:96: Error: no such instruction: `lock_prefix 
>> incl 8(%esi)'
   arch/x86/include/asm/bitops.h:114: Error: no such instruction: `lock_prefix 
andb $-2,4(%eax)'
>> arch/x86/include/asm/bitops.h:76: Error: 

[PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread Nadav Amit
GCC considers the number of statements in inlined assembly blocks,
according to new-lines and semicolons, as an indication to the cost of
the block in time and space. This data is distorted by the kernel code,
which puts information in alternative sections. As a result, the
compiler may perform incorrect inlining and branch optimizations.

The solution is to set an assembly macro and call it from the inlined
assembly block. As a result GCC considers the inline assembly block as
a single instruction.

This patch handles the LOCK prefix, allowing more aggresive inlining.

   textdata bss dec hex filename
18140140 10225284 2957312 31322736 1ddf270 ./vmlinux before
18146889 10225380 2957312 31329581 1de0d2d ./vmlinux after (+6845)

Static text symbols:
Before: 40286
After:  40218   (-68)

Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: "H. Peter Anvin" 
Cc: x...@kernel.org
Cc: Josh Poimboeuf 

Signed-off-by: Nadav Amit 
---
 arch/x86/include/asm/alternative-asm.h | 20 ++--
 arch/x86/include/asm/alternative.h | 16 ++--
 arch/x86/kernel/macros.S   |  1 +
 3 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/arch/x86/include/asm/alternative-asm.h 
b/arch/x86/include/asm/alternative-asm.h
index 31b627b43a8e..8e4ea39e55d0 100644
--- a/arch/x86/include/asm/alternative-asm.h
+++ b/arch/x86/include/asm/alternative-asm.h
@@ -7,16 +7,24 @@
 #include 
 
 #ifdef CONFIG_SMP
-   .macro LOCK_PREFIX
-672:   lock
+.macro LOCK_PREFIX_HERE
.pushsection .smp_locks,"a"
.balign 4
-   .long 672b - .
+   .long 671f - .  # offset
.popsection
-   .endm
+671:
+.endm
+
+.macro LOCK_PREFIX insn:vararg
+   LOCK_PREFIX_HERE
+   lock \insn
+.endm
 #else
-   .macro LOCK_PREFIX
-   .endm
+.macro LOCK_PREFIX_HERE
+.endm
+
+.macro LOCK_PREFIX insn:vararg
+.endm
 #endif
 
 /*
diff --git a/arch/x86/include/asm/alternative.h 
b/arch/x86/include/asm/alternative.h
index 4cd6a3b71824..c1a3d7c76151 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -30,20 +30,8 @@
  * and size information.  That keeps the table sizes small.
  */
 
-#ifdef CONFIG_SMP
-#define LOCK_PREFIX_HERE \
-   ".pushsection .smp_locks,\"a\"\n"   \
-   ".balign 4\n"   \
-   ".long 671f - .\n" /* offset */ \
-   ".popsection\n" \
-   "671:"
-
-#define LOCK_PREFIX LOCK_PREFIX_HERE "\n\tlock; "
-
-#else /* ! CONFIG_SMP */
-#define LOCK_PREFIX_HERE ""
-#define LOCK_PREFIX ""
-#endif
+#define LOCK_PREFIX_HERE "LOCK_PREFIX_HERE\n\t"
+#define LOCK_PREFIX "LOCK_PREFIX "
 
 struct alt_instr {
s32 instr_offset;   /* original instruction */
diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
index f1fe1d570365..852487a9fc56 100644
--- a/arch/x86/kernel/macros.S
+++ b/arch/x86/kernel/macros.S
@@ -8,3 +8,4 @@
 
 #include 
 #include 
+#include 
-- 
2.17.0



[PATCH v2 4/9] x86: alternatives: macrofy locks for better inlining

2018-06-04 Thread Nadav Amit
GCC considers the number of statements in inlined assembly blocks,
according to new-lines and semicolons, as an indication to the cost of
the block in time and space. This data is distorted by the kernel code,
which puts information in alternative sections. As a result, the
compiler may perform incorrect inlining and branch optimizations.

The solution is to set an assembly macro and call it from the inlined
assembly block. As a result GCC considers the inline assembly block as
a single instruction.

This patch handles the LOCK prefix, allowing more aggresive inlining.

   textdata bss dec hex filename
18140140 10225284 2957312 31322736 1ddf270 ./vmlinux before
18146889 10225380 2957312 31329581 1de0d2d ./vmlinux after (+6845)

Static text symbols:
Before: 40286
After:  40218   (-68)

Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: "H. Peter Anvin" 
Cc: x...@kernel.org
Cc: Josh Poimboeuf 

Signed-off-by: Nadav Amit 
---
 arch/x86/include/asm/alternative-asm.h | 20 ++--
 arch/x86/include/asm/alternative.h | 16 ++--
 arch/x86/kernel/macros.S   |  1 +
 3 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/arch/x86/include/asm/alternative-asm.h 
b/arch/x86/include/asm/alternative-asm.h
index 31b627b43a8e..8e4ea39e55d0 100644
--- a/arch/x86/include/asm/alternative-asm.h
+++ b/arch/x86/include/asm/alternative-asm.h
@@ -7,16 +7,24 @@
 #include 
 
 #ifdef CONFIG_SMP
-   .macro LOCK_PREFIX
-672:   lock
+.macro LOCK_PREFIX_HERE
.pushsection .smp_locks,"a"
.balign 4
-   .long 672b - .
+   .long 671f - .  # offset
.popsection
-   .endm
+671:
+.endm
+
+.macro LOCK_PREFIX insn:vararg
+   LOCK_PREFIX_HERE
+   lock \insn
+.endm
 #else
-   .macro LOCK_PREFIX
-   .endm
+.macro LOCK_PREFIX_HERE
+.endm
+
+.macro LOCK_PREFIX insn:vararg
+.endm
 #endif
 
 /*
diff --git a/arch/x86/include/asm/alternative.h 
b/arch/x86/include/asm/alternative.h
index 4cd6a3b71824..c1a3d7c76151 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -30,20 +30,8 @@
  * and size information.  That keeps the table sizes small.
  */
 
-#ifdef CONFIG_SMP
-#define LOCK_PREFIX_HERE \
-   ".pushsection .smp_locks,\"a\"\n"   \
-   ".balign 4\n"   \
-   ".long 671f - .\n" /* offset */ \
-   ".popsection\n" \
-   "671:"
-
-#define LOCK_PREFIX LOCK_PREFIX_HERE "\n\tlock; "
-
-#else /* ! CONFIG_SMP */
-#define LOCK_PREFIX_HERE ""
-#define LOCK_PREFIX ""
-#endif
+#define LOCK_PREFIX_HERE "LOCK_PREFIX_HERE\n\t"
+#define LOCK_PREFIX "LOCK_PREFIX "
 
 struct alt_instr {
s32 instr_offset;   /* original instruction */
diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
index f1fe1d570365..852487a9fc56 100644
--- a/arch/x86/kernel/macros.S
+++ b/arch/x86/kernel/macros.S
@@ -8,3 +8,4 @@
 
 #include 
 #include 
+#include 
-- 
2.17.0