Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 02:23:43PM +, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:45:10PM +0800, Hanjun Guo wrote: > > On 2016/12/26 17:18, Al Viro wrote: > > > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > > >> It looks like we need revert the changes from assembly files. > > > > I tested Kefeng's patch and works. more comments below. > > > > > Better yet, split the damn thing in two and include the asm-only part. > > > > split will cause other places for building errors, because there is no > > > > -#ifndef __ASSEMBLY__ > > Huh? It's included only from assembler files, so what would use the other > parts? FWIW, my arguments for splitting it are * asm and non-asm parts have almost no overlap - only uaccess_{en,dis}able_not_uao (as asm macro and static inline resp.), but that's it. It's not as if there had been arseloads of constants shared between C and assembler, etc. * having no asm/uaccess.h includes left allows to consolidate stuff into linux/uaccess.h; sure, in this case the stuff getting moved there would be under ifndef anyway, but "no includes outside of linux/uaccess.h" is easier to verify than "no includes outside of linux/uaccess.h and arch/arm64/.../*.S" I can live with reverting those several includes to asm/uaccess.h (all interesting stuff is under that ifndef), but I think splitting the asm part away would be cleaner. PS: if that variant does cause any build errors, I would very much like to see .config. Hanjun, could you post one that is triggering those?
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 02:23:43PM +, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:45:10PM +0800, Hanjun Guo wrote: > > On 2016/12/26 17:18, Al Viro wrote: > > > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > > >> It looks like we need revert the changes from assembly files. > > > > I tested Kefeng's patch and works. more comments below. > > > > > Better yet, split the damn thing in two and include the asm-only part. > > > > split will cause other places for building errors, because there is no > > > > -#ifndef __ASSEMBLY__ > > Huh? It's included only from assembler files, so what would use the other > parts? FWIW, my arguments for splitting it are * asm and non-asm parts have almost no overlap - only uaccess_{en,dis}able_not_uao (as asm macro and static inline resp.), but that's it. It's not as if there had been arseloads of constants shared between C and assembler, etc. * having no asm/uaccess.h includes left allows to consolidate stuff into linux/uaccess.h; sure, in this case the stuff getting moved there would be under ifndef anyway, but "no includes outside of linux/uaccess.h" is easier to verify than "no includes outside of linux/uaccess.h and arch/arm64/.../*.S" I can live with reverting those several includes to asm/uaccess.h (all interesting stuff is under that ifndef), but I think splitting the asm part away would be cleaner. PS: if that variant does cause any build errors, I would very much like to see .config. Hanjun, could you post one that is triggering those?
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 05:45:10PM +0800, Hanjun Guo wrote: > On 2016/12/26 17:18, Al Viro wrote: > > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > >> It looks like we need revert the changes from assembly files. > > I tested Kefeng's patch and works. more comments below. > > > Better yet, split the damn thing in two and include the asm-only part. > > split will cause other places for building errors, because there is no > > -#ifndef __ASSEMBLY__ Huh? It's included only from assembler files, so what would use the other parts?
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 05:45:10PM +0800, Hanjun Guo wrote: > On 2016/12/26 17:18, Al Viro wrote: > > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > >> It looks like we need revert the changes from assembly files. > > I tested Kefeng's patch and works. more comments below. > > > Better yet, split the damn thing in two and include the asm-only part. > > split will cause other places for building errors, because there is no > > -#ifndef __ASSEMBLY__ Huh? It's included only from assembler files, so what would use the other parts?
linux-next: stats (Was: Linux 4.10-rc1)
Hi All, On Sun, 25 Dec 2016 16:41:46 -0800 Linus Torvaldswrote: > > It's Christmas Day, and it's two weeks since the merge window opened. > Thus, the merge window is now closed. As usual, the executive friendly graph is at http://neuling.org/linux-next-size.html :-) (No merge commits counted, next-20161212 was the first linux-next after the merge window opened.) Commits in v4.10-rc1 (relative to v4.9): 11455 Commits in next-20161212: 10625 Commits with the same SHA1: 9927 Commits with the same patch_id: 437 (1) Commits with the same subject line: 25 (1) (1) not counting those in the lines above. So commits in -rc1 that were in next-20161212: 10389 90% Some breakdown of the list of extra commits (relative to next-20161212) in -rc1: Top ten first word of commit summary: 153 ib 64 drm 46 x86 38 i40iw 34 net 33 s390 33 input 30 ubifs 27 perf 26 btrfs Top ten authors: 32 t...@linutronix.de 27 rich...@nod.at 26 bart.vanass...@sandisk.com 22 henry.oro...@intel.com 20 l...@kernel.org 19 je...@suse.com 18 m...@redhat.com 18 idryo...@gmail.com 15 trond.mykleb...@primarydata.com 13 vinod.k...@intel.com Top ten commiters: 225 dledf...@redhat.com 115 da...@davemloft.net 63 t...@linutronix.de 34 torva...@linux-foundation.org 34 m...@redhat.com 33 schwidef...@de.ibm.com 33 a...@redhat.com 32 idryo...@gmail.com 32 dmitry.torok...@gmail.com 31 rich...@nod.at There are also 236 commits in next-20161212 that didn't make it into v4.10-rc1. Top ten first word of commit summary: 24 arm 21 rcu 9 keys 9 coresight 9 btrfs 8 vfs 8 torture 8 thermal 6 mm 6 bf609 Top ten authors: 24 paul...@linux.vnet.ibm.com 15 mszer...@redhat.com 14 a...@linux-foundation.org 11 o...@lixom.net 11 dhowe...@redhat.com 10 v...@zeniv.linux.org.uk 8 wangxg.f...@cn.fujitsu.com 6 vitalyw...@gmail.com 6 colin.k...@canonical.com 5 sonic.zh...@analog.com Some of Andrew's patches are fixes for other patches in his tree (and have been merged into those). Top ten commiters: 39 s...@canb.auug.org.au 36 paul...@linux.vnet.ibm.com 16 steven@ubuntu-virtualbox.(none) 15 mszer...@redhat.com 13 o...@lixom.net 11 dhowe...@redhat.com 10 v...@zeniv.linux.org.uk 10 edubez...@gmail.com 9 mathieu.poir...@linaro.org 9 dste...@suse.com Those commits by me are from the quilt series (mainly Andrew's mmotm tree). Turns out that steven@ubuntu-virtualbox.(none) is Steven Miao and all those commits are old stuff left over in the blackfin tree since March, 2016 - it would be nice if they were cleaned up. -- Cheers, Stephen Rothwell
linux-next: stats (Was: Linux 4.10-rc1)
Hi All, On Sun, 25 Dec 2016 16:41:46 -0800 Linus Torvalds wrote: > > It's Christmas Day, and it's two weeks since the merge window opened. > Thus, the merge window is now closed. As usual, the executive friendly graph is at http://neuling.org/linux-next-size.html :-) (No merge commits counted, next-20161212 was the first linux-next after the merge window opened.) Commits in v4.10-rc1 (relative to v4.9): 11455 Commits in next-20161212: 10625 Commits with the same SHA1: 9927 Commits with the same patch_id: 437 (1) Commits with the same subject line: 25 (1) (1) not counting those in the lines above. So commits in -rc1 that were in next-20161212: 10389 90% Some breakdown of the list of extra commits (relative to next-20161212) in -rc1: Top ten first word of commit summary: 153 ib 64 drm 46 x86 38 i40iw 34 net 33 s390 33 input 30 ubifs 27 perf 26 btrfs Top ten authors: 32 t...@linutronix.de 27 rich...@nod.at 26 bart.vanass...@sandisk.com 22 henry.oro...@intel.com 20 l...@kernel.org 19 je...@suse.com 18 m...@redhat.com 18 idryo...@gmail.com 15 trond.mykleb...@primarydata.com 13 vinod.k...@intel.com Top ten commiters: 225 dledf...@redhat.com 115 da...@davemloft.net 63 t...@linutronix.de 34 torva...@linux-foundation.org 34 m...@redhat.com 33 schwidef...@de.ibm.com 33 a...@redhat.com 32 idryo...@gmail.com 32 dmitry.torok...@gmail.com 31 rich...@nod.at There are also 236 commits in next-20161212 that didn't make it into v4.10-rc1. Top ten first word of commit summary: 24 arm 21 rcu 9 keys 9 coresight 9 btrfs 8 vfs 8 torture 8 thermal 6 mm 6 bf609 Top ten authors: 24 paul...@linux.vnet.ibm.com 15 mszer...@redhat.com 14 a...@linux-foundation.org 11 o...@lixom.net 11 dhowe...@redhat.com 10 v...@zeniv.linux.org.uk 8 wangxg.f...@cn.fujitsu.com 6 vitalyw...@gmail.com 6 colin.k...@canonical.com 5 sonic.zh...@analog.com Some of Andrew's patches are fixes for other patches in his tree (and have been merged into those). Top ten commiters: 39 s...@canb.auug.org.au 36 paul...@linux.vnet.ibm.com 16 steven@ubuntu-virtualbox.(none) 15 mszer...@redhat.com 13 o...@lixom.net 11 dhowe...@redhat.com 10 v...@zeniv.linux.org.uk 10 edubez...@gmail.com 9 mathieu.poir...@linaro.org 9 dste...@suse.com Those commits by me are from the quilt series (mainly Andrew's mmotm tree). Turns out that steven@ubuntu-virtualbox.(none) is Steven Miao and all those commits are old stuff left over in the blackfin tree since March, 2016 - it would be nice if they were cleaned up. -- Cheers, Stephen Rothwell
Re: Linux 4.10-rc1
On 2016/12/26 17:18, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: >> It looks like we need revert the changes from assembly files. I tested Kefeng's patch and works. more comments below. > Better yet, split the damn thing in two and include the asm-only part. split will cause other places for building errors, because there is no -#ifndef __ASSEMBLY__ in the file. > >> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S >> diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S > Missed those two... OK, how about this? > > arm64: don't pull uaccess.h into *.S > > Split asm-only parts of arm64 uaccess.h into a new header and use that > from *.S. > > Signed-off-by: Al Viro> > diff --git a/arch/arm64/include/asm/asm-uaccess.h > b/arch/arm64/include/asm/asm-uaccess.h > new file mode 100644 > index ..df411f3e083c > --- /dev/null > +++ b/arch/arm64/include/asm/asm-uaccess.h > @@ -0,0 +1,65 @@ > +#ifndef __ASM_ASM_UACCESS_H > +#define __ASM_ASM_UACCESS_H > + > +#include > +#include > +#include > +#include > + > +/* > + * User access enabling/disabling macros. > + */ > +#ifdef CONFIG_ARM64_SW_TTBR0_PAN > + .macro __uaccess_ttbr0_disable, tmp1 > + mrs \tmp1, ttbr1_el1// swapper_pg_dir > + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > + isb > + .endm > + > + .macro __uaccess_ttbr0_enable, tmp1 > + get_thread_info \tmp1 > + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 > + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 > + isb > + .endm > + > + .macro uaccess_ttbr0_disable, tmp1 > +alternative_if_not ARM64_HAS_PAN > + __uaccess_ttbr0_disable \tmp1 > +alternative_else_nop_endif > + .endm > + > + .macro uaccess_ttbr0_enable, tmp1, tmp2 > +alternative_if_not ARM64_HAS_PAN > + save_and_disable_irq \tmp2 // avoid preemption > + __uaccess_ttbr0_enable \tmp1 > + restore_irq \tmp2 > +alternative_else_nop_endif > + .endm > +#else > + .macro uaccess_ttbr0_disable, tmp1 > + .endm > + > + .macro uaccess_ttbr0_enable, tmp1, tmp2 > + .endm > +#endif > + > +/* > + * These macros are no-ops when UAO is present. > + */ > + .macro uaccess_disable_not_uao, tmp1 > + uaccess_ttbr0_disable \tmp1 > +alternative_if ARM64_ALT_PAN_NOT_UAO > + SET_PSTATE_PAN(1) > +alternative_else_nop_endif > + .endm > + > + .macro uaccess_enable_not_uao, tmp1, tmp2 > + uaccess_ttbr0_enable \tmp1, \tmp2 > +alternative_if ARM64_ALT_PAN_NOT_UAO > + SET_PSTATE_PAN(0) > +alternative_else_nop_endif > + .endm > + > +#endif > diff --git a/arch/arm64/include/asm/uaccess.h > b/arch/arm64/include/asm/uaccess.h > index d26750ca6e06..46da3ea638bb 100644 > --- a/arch/arm64/include/asm/uaccess.h > +++ b/arch/arm64/include/asm/uaccess.h > @@ -22,8 +22,6 @@ > #include > #include > > -#ifndef __ASSEMBLY__ > - > /* > * User space memory access functions > */ > @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char > __user *src, long count); > extern __must_check long strlen_user(const char __user *str); > extern __must_check long strnlen_user(const char __user *str, long n); > > -#else/* __ASSEMBLY__ */ > - > -#include > - > -/* > - * User access enabling/disabling macros. > - */ > -#ifdef CONFIG_ARM64_SW_TTBR0_PAN > - .macro __uaccess_ttbr0_disable, tmp1 > - mrs \tmp1, ttbr1_el1// swapper_pg_dir > - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > - isb > - .endm > - > - .macro __uaccess_ttbr0_enable, tmp1 > - get_thread_info \tmp1 > - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 > - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 > - isb > - .endm > - > - .macro uaccess_ttbr0_disable, tmp1 > -alternative_if_not ARM64_HAS_PAN > - __uaccess_ttbr0_disable \tmp1 > -alternative_else_nop_endif > - .endm > - > - .macro uaccess_ttbr0_enable, tmp1, tmp2 > -alternative_if_not ARM64_HAS_PAN > - save_and_disable_irq \tmp2 // avoid preemption > - __uaccess_ttbr0_enable \tmp1 > - restore_irq \tmp2 > -alternative_else_nop_endif > - .endm > -#else > - .macro uaccess_ttbr0_disable, tmp1 > - .endm > - > - .macro uaccess_ttbr0_enable, tmp1, tmp2 > - .endm > -#endif > - > -/* > - * These macros are no-ops when UAO is present. > - */ > - .macro uaccess_disable_not_uao, tmp1 > - uaccess_ttbr0_disable \tmp1 > -alternative_if ARM64_ALT_PAN_NOT_UAO > - SET_PSTATE_PAN(1) > -alternative_else_nop_endif > - .endm > - > - .macro
Re: Linux 4.10-rc1
On 2016/12/26 17:18, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: >> It looks like we need revert the changes from assembly files. I tested Kefeng's patch and works. more comments below. > Better yet, split the damn thing in two and include the asm-only part. split will cause other places for building errors, because there is no -#ifndef __ASSEMBLY__ in the file. > >> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S >> diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S > Missed those two... OK, how about this? > > arm64: don't pull uaccess.h into *.S > > Split asm-only parts of arm64 uaccess.h into a new header and use that > from *.S. > > Signed-off-by: Al Viro > > diff --git a/arch/arm64/include/asm/asm-uaccess.h > b/arch/arm64/include/asm/asm-uaccess.h > new file mode 100644 > index ..df411f3e083c > --- /dev/null > +++ b/arch/arm64/include/asm/asm-uaccess.h > @@ -0,0 +1,65 @@ > +#ifndef __ASM_ASM_UACCESS_H > +#define __ASM_ASM_UACCESS_H > + > +#include > +#include > +#include > +#include > + > +/* > + * User access enabling/disabling macros. > + */ > +#ifdef CONFIG_ARM64_SW_TTBR0_PAN > + .macro __uaccess_ttbr0_disable, tmp1 > + mrs \tmp1, ttbr1_el1// swapper_pg_dir > + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > + isb > + .endm > + > + .macro __uaccess_ttbr0_enable, tmp1 > + get_thread_info \tmp1 > + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 > + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 > + isb > + .endm > + > + .macro uaccess_ttbr0_disable, tmp1 > +alternative_if_not ARM64_HAS_PAN > + __uaccess_ttbr0_disable \tmp1 > +alternative_else_nop_endif > + .endm > + > + .macro uaccess_ttbr0_enable, tmp1, tmp2 > +alternative_if_not ARM64_HAS_PAN > + save_and_disable_irq \tmp2 // avoid preemption > + __uaccess_ttbr0_enable \tmp1 > + restore_irq \tmp2 > +alternative_else_nop_endif > + .endm > +#else > + .macro uaccess_ttbr0_disable, tmp1 > + .endm > + > + .macro uaccess_ttbr0_enable, tmp1, tmp2 > + .endm > +#endif > + > +/* > + * These macros are no-ops when UAO is present. > + */ > + .macro uaccess_disable_not_uao, tmp1 > + uaccess_ttbr0_disable \tmp1 > +alternative_if ARM64_ALT_PAN_NOT_UAO > + SET_PSTATE_PAN(1) > +alternative_else_nop_endif > + .endm > + > + .macro uaccess_enable_not_uao, tmp1, tmp2 > + uaccess_ttbr0_enable \tmp1, \tmp2 > +alternative_if ARM64_ALT_PAN_NOT_UAO > + SET_PSTATE_PAN(0) > +alternative_else_nop_endif > + .endm > + > +#endif > diff --git a/arch/arm64/include/asm/uaccess.h > b/arch/arm64/include/asm/uaccess.h > index d26750ca6e06..46da3ea638bb 100644 > --- a/arch/arm64/include/asm/uaccess.h > +++ b/arch/arm64/include/asm/uaccess.h > @@ -22,8 +22,6 @@ > #include > #include > > -#ifndef __ASSEMBLY__ > - > /* > * User space memory access functions > */ > @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char > __user *src, long count); > extern __must_check long strlen_user(const char __user *str); > extern __must_check long strnlen_user(const char __user *str, long n); > > -#else/* __ASSEMBLY__ */ > - > -#include > - > -/* > - * User access enabling/disabling macros. > - */ > -#ifdef CONFIG_ARM64_SW_TTBR0_PAN > - .macro __uaccess_ttbr0_disable, tmp1 > - mrs \tmp1, ttbr1_el1// swapper_pg_dir > - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > - isb > - .endm > - > - .macro __uaccess_ttbr0_enable, tmp1 > - get_thread_info \tmp1 > - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 > - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 > - isb > - .endm > - > - .macro uaccess_ttbr0_disable, tmp1 > -alternative_if_not ARM64_HAS_PAN > - __uaccess_ttbr0_disable \tmp1 > -alternative_else_nop_endif > - .endm > - > - .macro uaccess_ttbr0_enable, tmp1, tmp2 > -alternative_if_not ARM64_HAS_PAN > - save_and_disable_irq \tmp2 // avoid preemption > - __uaccess_ttbr0_enable \tmp1 > - restore_irq \tmp2 > -alternative_else_nop_endif > - .endm > -#else > - .macro uaccess_ttbr0_disable, tmp1 > - .endm > - > - .macro uaccess_ttbr0_enable, tmp1, tmp2 > - .endm > -#endif > - > -/* > - * These macros are no-ops when UAO is present. > - */ > - .macro uaccess_disable_not_uao, tmp1 > - uaccess_ttbr0_disable \tmp1 > -alternative_if ARM64_ALT_PAN_NOT_UAO > - SET_PSTATE_PAN(1) > -alternative_else_nop_endif > - .endm > - > - .macro uaccess_enable_not_uao,
Re: Linux 4.10-rc1
On 2016/12/26 17:18, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: >> It looks like we need revert the changes from assembly files. > Better yet, split the damn thing in two and include the asm-only part. > >> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S >> diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S > Missed those two... OK, how about this? It happens some where else, ./include/asm-generic/rwsem.h:48: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:49: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:50: Error: unknown mnemonic `return' -- `return 0' ./include/asm-generic/rwsem.h:51: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:56: Error: unknown mnemonic `static' -- `static inline void __down_write(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:57: Error: junk at end of line, first unrecognized character is `{' ./include/asm-generic/rwsem.h:58: Error: unknown mnemonic `long' -- `long tmp' ./include/asm-generic/rwsem.h:60: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:61: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:62: Error: unknown mnemonic `if' -- `if (unlikely(tmp!=((-0xL-1)+0x0001L)))' ./include/asm-generic/rwsem.h:63: Error: unknown mnemonic `rwsem_down_write_failed' -- `rwsem_down_write_failed(sem)' ./include/asm-generic/rwsem.h:64: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:66: Error: unknown mnemonic `static' -- `static inline int __down_write_killable(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:67: Error: junk at end of line, first unrecognized character is `{' ./include/asm-generic/rwsem.h:68: Error: unknown mnemonic `long' -- `long tmp' ./include/asm-generic/rwsem.h:70: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:71: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:72: Error: unknown mnemonic `if' -- `if (unlikely(tmp!=((-0xL-1)+0x0001L)))' ./include/asm-generic/rwsem.h:73: Error: unknown mnemonic `if' -- `if (IS_ERR(rwsem_down_write_failed_killable(sem)))' ./include/asm-generic/rwsem.h:74: Error: unknown mnemonic `return' -- `return -4' ./include/asm-generic/rwsem.h:75: Error: unknown mnemonic `return' -- `return 0' ./include/asm-generic/rwsem.h:76: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:78: Error: unknown mnemonic `static' -- `static inline int __down_write_trylock(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:79: Error: junk at end of line, first unrecognized character is `{' ./include/linux/highuid.h:34: Error: unknown mnemonic `extern' -- `extern int overflowuid' ./include/linux/highuid.h:35: Error: unknown mnemonic `extern' -- `extern int overflowgid' ./include/linux/highuid.h:37: Error: unknown mnemonic `extern' -- `extern void __bad_uid(void)' ./include/linux/uidgid.h:21: Error: unknown mnemonic `uid_t' -- `uid_t val' ./include/linux/uidgid.h:22: Error: junk at end of line, first unrecognized character is `}' ./include/linux/uidgid.h:25: Error: unknown mnemonic `typedef' -- `typedef struct{' ./include/linux/uidgid.h:26: Error: unknown mnemonic `gid_t' -- `gid_t val' ./include/linux/uidgid.h:27: Error: junk at end of line, first unrecognized character is `}' ./include/uapi/linux/sysctl.h:34: Error: unknown mnemonic `struct' -- `struct __sysctl_args{' ./include/uapi/linux/sysctl.h:35: Error: unknown mnemonic `int' -- `int __user*name' ./include/uapi/linux/sysctl.h:36: Error: unknown mnemonic `int' -- `int nlen' ./include/uapi/linux/sysctl.h:37: Error: unknown mnemonic `void' -- `void __user*oldval' Thanks Hanjun > > arm64: don't pull uaccess.h into *.S > > Split asm-only parts of arm64 uaccess.h into a new header and use that > from *.S. > > Signed-off-by: Al Viro> > diff --git a/arch/arm64/include/asm/asm-uaccess.h > b/arch/arm64/include/asm/asm-uaccess.h > new file mode 100644 > index ..df411f3e083c > --- /dev/null > +++ b/arch/arm64/include/asm/asm-uaccess.h > @@ -0,0 +1,65 @@ > +#ifndef __ASM_ASM_UACCESS_H > +#define __ASM_ASM_UACCESS_H > + > +#include > +#include > +#include > +#include > + > +/* > + * User access enabling/disabling macros. > + */ > +#ifdef CONFIG_ARM64_SW_TTBR0_PAN > + .macro __uaccess_ttbr0_disable, tmp1 > + mrs \tmp1, ttbr1_el1// swapper_pg_dir > + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > + isb > + .endm > + > + .macro __uaccess_ttbr0_enable, tmp1 > +
Re: Linux 4.10-rc1
On 2016/12/26 17:18, Al Viro wrote: > On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: >> It looks like we need revert the changes from assembly files. > Better yet, split the damn thing in two and include the asm-only part. > >> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S >> diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S > Missed those two... OK, how about this? It happens some where else, ./include/asm-generic/rwsem.h:48: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:49: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:50: Error: unknown mnemonic `return' -- `return 0' ./include/asm-generic/rwsem.h:51: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:56: Error: unknown mnemonic `static' -- `static inline void __down_write(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:57: Error: junk at end of line, first unrecognized character is `{' ./include/asm-generic/rwsem.h:58: Error: unknown mnemonic `long' -- `long tmp' ./include/asm-generic/rwsem.h:60: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:61: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:62: Error: unknown mnemonic `if' -- `if (unlikely(tmp!=((-0xL-1)+0x0001L)))' ./include/asm-generic/rwsem.h:63: Error: unknown mnemonic `rwsem_down_write_failed' -- `rwsem_down_write_failed(sem)' ./include/asm-generic/rwsem.h:64: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:66: Error: unknown mnemonic `static' -- `static inline int __down_write_killable(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:67: Error: junk at end of line, first unrecognized character is `{' ./include/asm-generic/rwsem.h:68: Error: unknown mnemonic `long' -- `long tmp' ./include/asm-generic/rwsem.h:70: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:71: Error: junk at end of line, first unrecognized character is `(' ./include/asm-generic/rwsem.h:72: Error: unknown mnemonic `if' -- `if (unlikely(tmp!=((-0xL-1)+0x0001L)))' ./include/asm-generic/rwsem.h:73: Error: unknown mnemonic `if' -- `if (IS_ERR(rwsem_down_write_failed_killable(sem)))' ./include/asm-generic/rwsem.h:74: Error: unknown mnemonic `return' -- `return -4' ./include/asm-generic/rwsem.h:75: Error: unknown mnemonic `return' -- `return 0' ./include/asm-generic/rwsem.h:76: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/rwsem.h:78: Error: unknown mnemonic `static' -- `static inline int __down_write_trylock(struct rw_semaphore*sem)' ./include/asm-generic/rwsem.h:79: Error: junk at end of line, first unrecognized character is `{' ./include/linux/highuid.h:34: Error: unknown mnemonic `extern' -- `extern int overflowuid' ./include/linux/highuid.h:35: Error: unknown mnemonic `extern' -- `extern int overflowgid' ./include/linux/highuid.h:37: Error: unknown mnemonic `extern' -- `extern void __bad_uid(void)' ./include/linux/uidgid.h:21: Error: unknown mnemonic `uid_t' -- `uid_t val' ./include/linux/uidgid.h:22: Error: junk at end of line, first unrecognized character is `}' ./include/linux/uidgid.h:25: Error: unknown mnemonic `typedef' -- `typedef struct{' ./include/linux/uidgid.h:26: Error: unknown mnemonic `gid_t' -- `gid_t val' ./include/linux/uidgid.h:27: Error: junk at end of line, first unrecognized character is `}' ./include/uapi/linux/sysctl.h:34: Error: unknown mnemonic `struct' -- `struct __sysctl_args{' ./include/uapi/linux/sysctl.h:35: Error: unknown mnemonic `int' -- `int __user*name' ./include/uapi/linux/sysctl.h:36: Error: unknown mnemonic `int' -- `int nlen' ./include/uapi/linux/sysctl.h:37: Error: unknown mnemonic `void' -- `void __user*oldval' Thanks Hanjun > > arm64: don't pull uaccess.h into *.S > > Split asm-only parts of arm64 uaccess.h into a new header and use that > from *.S. > > Signed-off-by: Al Viro > > diff --git a/arch/arm64/include/asm/asm-uaccess.h > b/arch/arm64/include/asm/asm-uaccess.h > new file mode 100644 > index ..df411f3e083c > --- /dev/null > +++ b/arch/arm64/include/asm/asm-uaccess.h > @@ -0,0 +1,65 @@ > +#ifndef __ASM_ASM_UACCESS_H > +#define __ASM_ASM_UACCESS_H > + > +#include > +#include > +#include > +#include > + > +/* > + * User access enabling/disabling macros. > + */ > +#ifdef CONFIG_ARM64_SW_TTBR0_PAN > + .macro __uaccess_ttbr0_disable, tmp1 > + mrs \tmp1, ttbr1_el1// swapper_pg_dir > + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of > swapper_pg_dir > + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 > + isb > + .endm > + > + .macro __uaccess_ttbr0_enable, tmp1 > + get_thread_info \tmp1 > +
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > It looks like we need revert the changes from assembly files. Better yet, split the damn thing in two and include the asm-only part. > diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S > diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S Missed those two... OK, how about this? arm64: don't pull uaccess.h into *.S Split asm-only parts of arm64 uaccess.h into a new header and use that from *.S. Signed-off-by: Al Virodiff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h new file mode 100644 index ..df411f3e083c --- /dev/null +++ b/arch/arm64/include/asm/asm-uaccess.h @@ -0,0 +1,65 @@ +#ifndef __ASM_ASM_UACCESS_H +#define __ASM_ASM_UACCESS_H + +#include +#include +#include +#include + +/* + * User access enabling/disabling macros. + */ +#ifdef CONFIG_ARM64_SW_TTBR0_PAN + .macro __uaccess_ttbr0_disable, tmp1 + mrs \tmp1, ttbr1_el1// swapper_pg_dir + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 + isb + .endm + + .macro __uaccess_ttbr0_enable, tmp1 + get_thread_info \tmp1 + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 + isb + .endm + + .macro uaccess_ttbr0_disable, tmp1 +alternative_if_not ARM64_HAS_PAN + __uaccess_ttbr0_disable \tmp1 +alternative_else_nop_endif + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 +alternative_if_not ARM64_HAS_PAN + save_and_disable_irq \tmp2 // avoid preemption + __uaccess_ttbr0_enable \tmp1 + restore_irq \tmp2 +alternative_else_nop_endif + .endm +#else + .macro uaccess_ttbr0_disable, tmp1 + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 + .endm +#endif + +/* + * These macros are no-ops when UAO is present. + */ + .macro uaccess_disable_not_uao, tmp1 + uaccess_ttbr0_disable \tmp1 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(1) +alternative_else_nop_endif + .endm + + .macro uaccess_enable_not_uao, tmp1, tmp2 + uaccess_ttbr0_enable \tmp1, \tmp2 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(0) +alternative_else_nop_endif + .endm + +#endif diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h index d26750ca6e06..46da3ea638bb 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h @@ -22,8 +22,6 @@ #include #include -#ifndef __ASSEMBLY__ - /* * User space memory access functions */ @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); -#else /* __ASSEMBLY__ */ - -#include - -/* - * User access enabling/disabling macros. - */ -#ifdef CONFIG_ARM64_SW_TTBR0_PAN - .macro __uaccess_ttbr0_disable, tmp1 - mrs \tmp1, ttbr1_el1// swapper_pg_dir - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 - isb - .endm - - .macro __uaccess_ttbr0_enable, tmp1 - get_thread_info \tmp1 - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 - isb - .endm - - .macro uaccess_ttbr0_disable, tmp1 -alternative_if_not ARM64_HAS_PAN - __uaccess_ttbr0_disable \tmp1 -alternative_else_nop_endif - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 -alternative_if_not ARM64_HAS_PAN - save_and_disable_irq \tmp2 // avoid preemption - __uaccess_ttbr0_enable \tmp1 - restore_irq \tmp2 -alternative_else_nop_endif - .endm -#else - .macro uaccess_ttbr0_disable, tmp1 - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 - .endm -#endif - -/* - * These macros are no-ops when UAO is present. - */ - .macro uaccess_disable_not_uao, tmp1 - uaccess_ttbr0_disable \tmp1 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(1) -alternative_else_nop_endif - .endm - - .macro uaccess_enable_not_uao, tmp1, tmp2 - uaccess_ttbr0_enable \tmp1, \tmp2 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(0) -alternative_else_nop_endif - .endm - -#endif /* __ASSEMBLY__ */ - #endif /* __ASM_UACCESS_H */ diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S index add4a1334085..e88fb99c1561 100644 --- a/arch/arm64/lib/clear_user.S +++
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 05:05:37PM +0800, Kefeng Wang wrote: > It looks like we need revert the changes from assembly files. Better yet, split the damn thing in two and include the asm-only part. > diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S > diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S Missed those two... OK, how about this? arm64: don't pull uaccess.h into *.S Split asm-only parts of arm64 uaccess.h into a new header and use that from *.S. Signed-off-by: Al Viro diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h new file mode 100644 index ..df411f3e083c --- /dev/null +++ b/arch/arm64/include/asm/asm-uaccess.h @@ -0,0 +1,65 @@ +#ifndef __ASM_ASM_UACCESS_H +#define __ASM_ASM_UACCESS_H + +#include +#include +#include +#include + +/* + * User access enabling/disabling macros. + */ +#ifdef CONFIG_ARM64_SW_TTBR0_PAN + .macro __uaccess_ttbr0_disable, tmp1 + mrs \tmp1, ttbr1_el1// swapper_pg_dir + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 + isb + .endm + + .macro __uaccess_ttbr0_enable, tmp1 + get_thread_info \tmp1 + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 + isb + .endm + + .macro uaccess_ttbr0_disable, tmp1 +alternative_if_not ARM64_HAS_PAN + __uaccess_ttbr0_disable \tmp1 +alternative_else_nop_endif + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 +alternative_if_not ARM64_HAS_PAN + save_and_disable_irq \tmp2 // avoid preemption + __uaccess_ttbr0_enable \tmp1 + restore_irq \tmp2 +alternative_else_nop_endif + .endm +#else + .macro uaccess_ttbr0_disable, tmp1 + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 + .endm +#endif + +/* + * These macros are no-ops when UAO is present. + */ + .macro uaccess_disable_not_uao, tmp1 + uaccess_ttbr0_disable \tmp1 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(1) +alternative_else_nop_endif + .endm + + .macro uaccess_enable_not_uao, tmp1, tmp2 + uaccess_ttbr0_enable \tmp1, \tmp2 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(0) +alternative_else_nop_endif + .endm + +#endif diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h index d26750ca6e06..46da3ea638bb 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h @@ -22,8 +22,6 @@ #include #include -#ifndef __ASSEMBLY__ - /* * User space memory access functions */ @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); -#else /* __ASSEMBLY__ */ - -#include - -/* - * User access enabling/disabling macros. - */ -#ifdef CONFIG_ARM64_SW_TTBR0_PAN - .macro __uaccess_ttbr0_disable, tmp1 - mrs \tmp1, ttbr1_el1// swapper_pg_dir - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 - isb - .endm - - .macro __uaccess_ttbr0_enable, tmp1 - get_thread_info \tmp1 - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 - isb - .endm - - .macro uaccess_ttbr0_disable, tmp1 -alternative_if_not ARM64_HAS_PAN - __uaccess_ttbr0_disable \tmp1 -alternative_else_nop_endif - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 -alternative_if_not ARM64_HAS_PAN - save_and_disable_irq \tmp2 // avoid preemption - __uaccess_ttbr0_enable \tmp1 - restore_irq \tmp2 -alternative_else_nop_endif - .endm -#else - .macro uaccess_ttbr0_disable, tmp1 - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 - .endm -#endif - -/* - * These macros are no-ops when UAO is present. - */ - .macro uaccess_disable_not_uao, tmp1 - uaccess_ttbr0_disable \tmp1 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(1) -alternative_else_nop_endif - .endm - - .macro uaccess_enable_not_uao, tmp1, tmp2 - uaccess_ttbr0_enable \tmp1, \tmp2 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(0) -alternative_else_nop_endif - .endm - -#endif /* __ASSEMBLY__ */ - #endif /* __ASM_UACCESS_H */ diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S index add4a1334085..e88fb99c1561 100644 --- a/arch/arm64/lib/clear_user.S +++ b/arch/arm64/lib/clear_user.S @@
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 04:38:13PM +0800, Hanjun Guo wrote: > ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- > `typedef atomic64_t atomic_long_t' *blink* OK, I see what has happened here - it's "arm64: Factor out PAN enabling/disabling into separate uaccess_* macros" that went in during this window, adding an include of asm/uaccess.h into several assembler files. AFAICS, the easiest way to deal with that is to separate for-asm parts of uaccess.h into a new header and use _that_ from *.S, as in (completely untested) diff below. Seeing that there's basically no overlap between the __ASSEMBLY__ and normal parts of arm64 uaccess.h, that would seem to be a fairly obvious solution... Objections? diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h new file mode 100644 index ..df411f3e083c --- /dev/null +++ b/arch/arm64/include/asm/asm-uaccess.h @@ -0,0 +1,65 @@ +#ifndef __ASM_ASM_UACCESS_H +#define __ASM_ASM_UACCESS_H + +#include +#include +#include +#include + +/* + * User access enabling/disabling macros. + */ +#ifdef CONFIG_ARM64_SW_TTBR0_PAN + .macro __uaccess_ttbr0_disable, tmp1 + mrs \tmp1, ttbr1_el1// swapper_pg_dir + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 + isb + .endm + + .macro __uaccess_ttbr0_enable, tmp1 + get_thread_info \tmp1 + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 + isb + .endm + + .macro uaccess_ttbr0_disable, tmp1 +alternative_if_not ARM64_HAS_PAN + __uaccess_ttbr0_disable \tmp1 +alternative_else_nop_endif + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 +alternative_if_not ARM64_HAS_PAN + save_and_disable_irq \tmp2 // avoid preemption + __uaccess_ttbr0_enable \tmp1 + restore_irq \tmp2 +alternative_else_nop_endif + .endm +#else + .macro uaccess_ttbr0_disable, tmp1 + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 + .endm +#endif + +/* + * These macros are no-ops when UAO is present. + */ + .macro uaccess_disable_not_uao, tmp1 + uaccess_ttbr0_disable \tmp1 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(1) +alternative_else_nop_endif + .endm + + .macro uaccess_enable_not_uao, tmp1, tmp2 + uaccess_ttbr0_enable \tmp1, \tmp2 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(0) +alternative_else_nop_endif + .endm + +#endif diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h index d26750ca6e06..46da3ea638bb 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h @@ -22,8 +22,6 @@ #include #include -#ifndef __ASSEMBLY__ - /* * User space memory access functions */ @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); -#else /* __ASSEMBLY__ */ - -#include - -/* - * User access enabling/disabling macros. - */ -#ifdef CONFIG_ARM64_SW_TTBR0_PAN - .macro __uaccess_ttbr0_disable, tmp1 - mrs \tmp1, ttbr1_el1// swapper_pg_dir - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 - isb - .endm - - .macro __uaccess_ttbr0_enable, tmp1 - get_thread_info \tmp1 - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 - isb - .endm - - .macro uaccess_ttbr0_disable, tmp1 -alternative_if_not ARM64_HAS_PAN - __uaccess_ttbr0_disable \tmp1 -alternative_else_nop_endif - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 -alternative_if_not ARM64_HAS_PAN - save_and_disable_irq \tmp2 // avoid preemption - __uaccess_ttbr0_enable \tmp1 - restore_irq \tmp2 -alternative_else_nop_endif - .endm -#else - .macro uaccess_ttbr0_disable, tmp1 - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 - .endm -#endif - -/* - * These macros are no-ops when UAO is present. - */ - .macro uaccess_disable_not_uao, tmp1 - uaccess_ttbr0_disable \tmp1 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(1) -alternative_else_nop_endif - .endm - - .macro uaccess_enable_not_uao, tmp1, tmp2 - uaccess_ttbr0_enable \tmp1, \tmp2 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(0) -alternative_else_nop_endif - .endm - -#endif /* __ASSEMBLY__ */ -
Re: Linux 4.10-rc1
On Mon, Dec 26, 2016 at 04:38:13PM +0800, Hanjun Guo wrote: > ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- > `typedef atomic64_t atomic_long_t' *blink* OK, I see what has happened here - it's "arm64: Factor out PAN enabling/disabling into separate uaccess_* macros" that went in during this window, adding an include of asm/uaccess.h into several assembler files. AFAICS, the easiest way to deal with that is to separate for-asm parts of uaccess.h into a new header and use _that_ from *.S, as in (completely untested) diff below. Seeing that there's basically no overlap between the __ASSEMBLY__ and normal parts of arm64 uaccess.h, that would seem to be a fairly obvious solution... Objections? diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h new file mode 100644 index ..df411f3e083c --- /dev/null +++ b/arch/arm64/include/asm/asm-uaccess.h @@ -0,0 +1,65 @@ +#ifndef __ASM_ASM_UACCESS_H +#define __ASM_ASM_UACCESS_H + +#include +#include +#include +#include + +/* + * User access enabling/disabling macros. + */ +#ifdef CONFIG_ARM64_SW_TTBR0_PAN + .macro __uaccess_ttbr0_disable, tmp1 + mrs \tmp1, ttbr1_el1// swapper_pg_dir + add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir + msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 + isb + .endm + + .macro __uaccess_ttbr0_enable, tmp1 + get_thread_info \tmp1 + ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 + msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 + isb + .endm + + .macro uaccess_ttbr0_disable, tmp1 +alternative_if_not ARM64_HAS_PAN + __uaccess_ttbr0_disable \tmp1 +alternative_else_nop_endif + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 +alternative_if_not ARM64_HAS_PAN + save_and_disable_irq \tmp2 // avoid preemption + __uaccess_ttbr0_enable \tmp1 + restore_irq \tmp2 +alternative_else_nop_endif + .endm +#else + .macro uaccess_ttbr0_disable, tmp1 + .endm + + .macro uaccess_ttbr0_enable, tmp1, tmp2 + .endm +#endif + +/* + * These macros are no-ops when UAO is present. + */ + .macro uaccess_disable_not_uao, tmp1 + uaccess_ttbr0_disable \tmp1 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(1) +alternative_else_nop_endif + .endm + + .macro uaccess_enable_not_uao, tmp1, tmp2 + uaccess_ttbr0_enable \tmp1, \tmp2 +alternative_if ARM64_ALT_PAN_NOT_UAO + SET_PSTATE_PAN(0) +alternative_else_nop_endif + .endm + +#endif diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h index d26750ca6e06..46da3ea638bb 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h @@ -22,8 +22,6 @@ #include #include -#ifndef __ASSEMBLY__ - /* * User space memory access functions */ @@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); -#else /* __ASSEMBLY__ */ - -#include - -/* - * User access enabling/disabling macros. - */ -#ifdef CONFIG_ARM64_SW_TTBR0_PAN - .macro __uaccess_ttbr0_disable, tmp1 - mrs \tmp1, ttbr1_el1// swapper_pg_dir - add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir - msr ttbr0_el1, \tmp1// set reserved TTBR0_EL1 - isb - .endm - - .macro __uaccess_ttbr0_enable, tmp1 - get_thread_info \tmp1 - ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1 - msr ttbr0_el1, \tmp1// set the non-PAN TTBR0_EL1 - isb - .endm - - .macro uaccess_ttbr0_disable, tmp1 -alternative_if_not ARM64_HAS_PAN - __uaccess_ttbr0_disable \tmp1 -alternative_else_nop_endif - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 -alternative_if_not ARM64_HAS_PAN - save_and_disable_irq \tmp2 // avoid preemption - __uaccess_ttbr0_enable \tmp1 - restore_irq \tmp2 -alternative_else_nop_endif - .endm -#else - .macro uaccess_ttbr0_disable, tmp1 - .endm - - .macro uaccess_ttbr0_enable, tmp1, tmp2 - .endm -#endif - -/* - * These macros are no-ops when UAO is present. - */ - .macro uaccess_disable_not_uao, tmp1 - uaccess_ttbr0_disable \tmp1 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(1) -alternative_else_nop_endif - .endm - - .macro uaccess_enable_not_uao, tmp1, tmp2 - uaccess_ttbr0_enable \tmp1, \tmp2 -alternative_if ARM64_ALT_PAN_NOT_UAO - SET_PSTATE_PAN(0) -alternative_else_nop_endif - .endm - -#endif /* __ASSEMBLY__ */ -
Re: Linux 4.10-rc1
On 2016/12/26 16:38, Hanjun Guo wrote: > Hi Linus, > > On 2016/12/26 8:41, Linus Torvalds wrote: >> It's Christmas Day, and it's two weeks since the merge window opened. >> Thus, the merge window is now closed. >> >> I did a few final pulls today, but I also rejected a couple of pulls >> that came in late in the window and looked dodgy. You know who you >> are. >> >> On the whole, this wasn't all that big a release - nothing like 4.9. >> Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might >> have been too. It's xmas day, and right now I can't be arsed to >> actually do the statistics I'd normally do. >> >> Everything looks pretty normal, although we had an unusual amount of >> tree-wide final cleanups in the last days of the merge window. But the >> general statistics look fairly common: a bit over half is drivers, >> maybe slightly less arch updates than normal, and a fair amount of >> documentation updates due to the sphinx conversion. And then the usual >> misc noise all over, although the perf tooling updates do stand out. >> >> The shortlog is much too big, as it always is during the merge window, >> so as usual you just get the merge-log. > > Kejian and I got massive compile error when cross-compile the kernel for > ARM64, such as > > ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- > `typedef atomic64_t atomic_long_t' > ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `static' -- > `static inline long atomic_long_read(const > atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `return' -- > `return (long)READ_ONCE((v)->counter)' > ./include/asm-generic/atomic-long.h:44: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `static' -- > `static inline long atomic_long_read_acquire(const > atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `return' -- > `return (long)smp_load_acquire(&(v)->counter)' > ./include/asm-generic/atomic-long.h:45: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `static' -- > `static inline void atomic_long_set(atomic_long_t*l,long > i){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `write_once' > -- `write_once(((v)->counter), (i))' > ./include/asm-generic/atomic-long.h:56: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `static' -- > `static inline void atomic_long_set_release(atomic_long_t*l,long > i){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic > `smp_store_release' -- `smp_store_release(&(v)->counter, (i))' > ./include/asm-generic/atomic-long.h:57: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return(i,v)' > ./include/asm-generic/atomic-long.h:69: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_relaxed(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_relaxed(i,v)' > ./include/asm-generic/atomic-long.h:70: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_acquire(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_acquire(i,v)' > ./include/asm-generic/atomic-long.h:71: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_release(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_release(i,v)' > ./include/asm-generic/atomic-long.h:72: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `static' -- > `static inline long atomic_long_sub_return(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `return' -- > `return
Re: Linux 4.10-rc1
On 2016/12/26 16:38, Hanjun Guo wrote: > Hi Linus, > > On 2016/12/26 8:41, Linus Torvalds wrote: >> It's Christmas Day, and it's two weeks since the merge window opened. >> Thus, the merge window is now closed. >> >> I did a few final pulls today, but I also rejected a couple of pulls >> that came in late in the window and looked dodgy. You know who you >> are. >> >> On the whole, this wasn't all that big a release - nothing like 4.9. >> Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might >> have been too. It's xmas day, and right now I can't be arsed to >> actually do the statistics I'd normally do. >> >> Everything looks pretty normal, although we had an unusual amount of >> tree-wide final cleanups in the last days of the merge window. But the >> general statistics look fairly common: a bit over half is drivers, >> maybe slightly less arch updates than normal, and a fair amount of >> documentation updates due to the sphinx conversion. And then the usual >> misc noise all over, although the perf tooling updates do stand out. >> >> The shortlog is much too big, as it always is during the merge window, >> so as usual you just get the merge-log. > > Kejian and I got massive compile error when cross-compile the kernel for > ARM64, such as > > ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- > `typedef atomic64_t atomic_long_t' > ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `static' -- > `static inline long atomic_long_read(const > atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `return' -- > `return (long)READ_ONCE((v)->counter)' > ./include/asm-generic/atomic-long.h:44: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `static' -- > `static inline long atomic_long_read_acquire(const > atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `return' -- > `return (long)smp_load_acquire(&(v)->counter)' > ./include/asm-generic/atomic-long.h:45: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `static' -- > `static inline void atomic_long_set(atomic_long_t*l,long > i){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `write_once' > -- `write_once(((v)->counter), (i))' > ./include/asm-generic/atomic-long.h:56: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `static' -- > `static inline void atomic_long_set_release(atomic_long_t*l,long > i){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic > `smp_store_release' -- `smp_store_release(&(v)->counter, (i))' > ./include/asm-generic/atomic-long.h:57: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return(i,v)' > ./include/asm-generic/atomic-long.h:69: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_relaxed(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_relaxed(i,v)' > ./include/asm-generic/atomic-long.h:70: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_acquire(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_acquire(i,v)' > ./include/asm-generic/atomic-long.h:71: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `static' -- > `static inline long atomic_long_add_return_release(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `return' -- > `return (long)atomic64_add_return_release(i,v)' > ./include/asm-generic/atomic-long.h:72: Error: junk at end of line, first > unrecognized character is `}' > ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `static' -- > `static inline long atomic_long_sub_return(long > i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' > ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `return' -- > `return
Re: Linux 4.10-rc1
Hi Linus, On 2016/12/26 8:41, Linus Torvalds wrote: > It's Christmas Day, and it's two weeks since the merge window opened. > Thus, the merge window is now closed. > > I did a few final pulls today, but I also rejected a couple of pulls > that came in late in the window and looked dodgy. You know who you > are. > > On the whole, this wasn't all that big a release - nothing like 4.9. > Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might > have been too. It's xmas day, and right now I can't be arsed to > actually do the statistics I'd normally do. > > Everything looks pretty normal, although we had an unusual amount of > tree-wide final cleanups in the last days of the merge window. But the > general statistics look fairly common: a bit over half is drivers, > maybe slightly less arch updates than normal, and a fair amount of > documentation updates due to the sphinx conversion. And then the usual > misc noise all over, although the perf tooling updates do stand out. > > The shortlog is much too big, as it always is during the merge window, > so as usual you just get the merge-log. Kejian and I got massive compile error when cross-compile the kernel for ARM64, such as ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- `typedef atomic64_t atomic_long_t' ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `static' -- `static inline long atomic_long_read(const atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `return' -- `return (long)READ_ONCE((v)->counter)' ./include/asm-generic/atomic-long.h:44: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `static' -- `static inline long atomic_long_read_acquire(const atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `return' -- `return (long)smp_load_acquire(&(v)->counter)' ./include/asm-generic/atomic-long.h:45: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `static' -- `static inline void atomic_long_set(atomic_long_t*l,long i){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `write_once' -- `write_once(((v)->counter), (i))' ./include/asm-generic/atomic-long.h:56: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `static' -- `static inline void atomic_long_set_release(atomic_long_t*l,long i){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `smp_store_release' -- `smp_store_release(&(v)->counter, (i))' ./include/asm-generic/atomic-long.h:57: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return(i,v)' ./include/asm-generic/atomic-long.h:69: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_relaxed(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_relaxed(i,v)' ./include/asm-generic/atomic-long.h:70: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_acquire(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_acquire(i,v)' ./include/asm-generic/atomic-long.h:71: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_release(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_release(i,v)' ./include/asm-generic/atomic-long.h:72: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `static' -- `static inline long atomic_long_sub_return(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `return' -- `return (long)atomic64_sub_return(i,v)' ./include/asm-generic/atomic-long.h:73: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:74: Error: unknown mnemonic
Re: Linux 4.10-rc1
Hi Linus, On 2016/12/26 8:41, Linus Torvalds wrote: > It's Christmas Day, and it's two weeks since the merge window opened. > Thus, the merge window is now closed. > > I did a few final pulls today, but I also rejected a couple of pulls > that came in late in the window and looked dodgy. You know who you > are. > > On the whole, this wasn't all that big a release - nothing like 4.9. > Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might > have been too. It's xmas day, and right now I can't be arsed to > actually do the statistics I'd normally do. > > Everything looks pretty normal, although we had an unusual amount of > tree-wide final cleanups in the last days of the merge window. But the > general statistics look fairly common: a bit over half is drivers, > maybe slightly less arch updates than normal, and a fair amount of > documentation updates due to the sphinx conversion. And then the usual > misc noise all over, although the perf tooling updates do stand out. > > The shortlog is much too big, as it always is during the merge window, > so as usual you just get the merge-log. Kejian and I got massive compile error when cross-compile the kernel for ARM64, such as ./include/asm-generic/atomic-long.h:23: Error: unknown mnemonic `typedef' -- `typedef atomic64_t atomic_long_t' ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `static' -- `static inline long atomic_long_read(const atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:44: Error: unknown mnemonic `return' -- `return (long)READ_ONCE((v)->counter)' ./include/asm-generic/atomic-long.h:44: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `static' -- `static inline long atomic_long_read_acquire(const atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:45: Error: unknown mnemonic `return' -- `return (long)smp_load_acquire(&(v)->counter)' ./include/asm-generic/atomic-long.h:45: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `static' -- `static inline void atomic_long_set(atomic_long_t*l,long i){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:56: Error: unknown mnemonic `write_once' -- `write_once(((v)->counter), (i))' ./include/asm-generic/atomic-long.h:56: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `static' -- `static inline void atomic_long_set_release(atomic_long_t*l,long i){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:57: Error: unknown mnemonic `smp_store_release' -- `smp_store_release(&(v)->counter, (i))' ./include/asm-generic/atomic-long.h:57: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:69: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return(i,v)' ./include/asm-generic/atomic-long.h:69: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_relaxed(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:70: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_relaxed(i,v)' ./include/asm-generic/atomic-long.h:70: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_acquire(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:71: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_acquire(i,v)' ./include/asm-generic/atomic-long.h:71: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `static' -- `static inline long atomic_long_add_return_release(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:72: Error: unknown mnemonic `return' -- `return (long)atomic64_add_return_release(i,v)' ./include/asm-generic/atomic-long.h:72: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `static' -- `static inline long atomic_long_sub_return(long i,atomic_long_t*l){atomic64_t*v=(atomic64_t*)l' ./include/asm-generic/atomic-long.h:73: Error: unknown mnemonic `return' -- `return (long)atomic64_sub_return(i,v)' ./include/asm-generic/atomic-long.h:73: Error: junk at end of line, first unrecognized character is `}' ./include/asm-generic/atomic-long.h:74: Error: unknown mnemonic
Linux 4.10-rc1
It's Christmas Day, and it's two weeks since the merge window opened. Thus, the merge window is now closed. I did a few final pulls today, but I also rejected a couple of pulls that came in late in the window and looked dodgy. You know who you are. On the whole, this wasn't all that big a release - nothing like 4.9. Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might have been too. It's xmas day, and right now I can't be arsed to actually do the statistics I'd normally do. Everything looks pretty normal, although we had an unusual amount of tree-wide final cleanups in the last days of the merge window. But the general statistics look fairly common: a bit over half is drivers, maybe slightly less arch updates than normal, and a fair amount of documentation updates due to the sphinx conversion. And then the usual misc noise all over, although the perf tooling updates do stand out. The shortlog is much too big, as it always is during the merge window, so as usual you just get the merge-log. Linus --- Al Viro (3): vfs updates more vfs updates final vfs updates Alex Williamson (1): VFIO updates Alexandre Belloni (1): RTC updates Andrew Morton (3): updates more updates final set of updates Arnd Bergmann (7): ARM SoC non-urgent fixes ARM SoC platform updates ARM SoC defconfig updates ARM SoC 64-bit updates ARM DT updates ARM 64-bit DT updates ARM SoC driver updates Bart Van Assche (1): scsi target cleanups Bjorn Andersson (2): remoteproc updates rpmsg updates Bjorn Helgaas (1): PCI updates Borislav Petkov (1): EDAC updates Brian Norris (1): MTD updates Bruce Fields (1): nfsd updates Catalin Marinas (1): arm64 updates Chris Mason (1): btrfs updates Chris Metcalf (1): arch/tile updates Christoph Hellwig (1): configfs update Corey Minyard (1): IPMI updates Dan Williams (1): libnvdimm updates Darren Hart (1): more x86 platform driver updates Darrent Hart (1): x86 platform driver updates Dave Airlie (2): drm updates drm fixes Dave Chinner (1): xfs updates David Kleikamp (1): jfs update David Miller (5): networking updates sparc updates networking fixes and cleanups networking fixes and cleanups networking fixes David Teigland (1): dlm fixes Dmitry Torokhov (1): input subsystem updates Doug Ledford (2): rdma updates rdma fixes Eric Biederman (1): namespace updates Geert Uytterhoeven (1): m68k updates Greg KH (5): USB/PHY updates tty/serial updates staging/IIO updates driver core updates char/misc driver updates Greg Ungerer (1): m68knommu updates Guenter Roeck (1): hwmon updates Hans-Christian Noren Egtvedt (1): AVR32 updates Helge Deller (1): parisc updates Herbert Xu (2): crypto updates crypto fixes Ilya Dryomov (1): ceph updates Ingo Molnar (24): RCU updates SMP bootup updates EFI updates locking updates mm/PAT cleanup perf updates scheduler updates hotplug API fix x86 RAS updates x86 apic updates x86 asm updates x86 boot updates x86 build updates x86 cleanups x86 CPU updates x86 FPU updates x86 header fixlet x86 idle updates x86 microcode update x86 platform updates irq fix perf fixes timer fix x86 fixes Jacek Anaszewski (2): LED updates LED maintainer email update Jaegeuk Kim (1): f2fs updates James Bottomley (2): SCSI updates late SCSI updates James Morris (2): security subsystem updates SElinux fix Jan Kara (1): quota, fsnotify and ext2 updates Jassi Brar (1): mailbox updates Jean Delvare (1): dmi fix Jens Axboe (4): block layer updates fs meta data unmap optimization block IO fixes block layer fixes Jesper Nilsson (1): CRIS updates Jessica Yu (1): modules updates Jiri Kosina (3): HID updates livepatch update trivial updates Joerg Roedel (1): IOMMU updates Jon Mason (1): NTB update Jonathan Corbet (3): documentation update more documentation updates documentation fix Juergen Gross (1): xen updates Kees Cook (2): pstore updates gcc plugins updates Konrad Rzeszutek Wilk (1): swiotlb updates Lee Jones (1): MFD updates Len Brown (1): turbostat updates Ley Foon Tan (1): arch/nios2 updates Linus Walleij (1): pinctrl updates Luinus Walleij (1): GPIO updates Luis de Bethencourt (1): befs updates Mark Brown (3): regmap fixlet regulator updates spi updates Martin Schwidefsky (2): s390 updates more s390 updates Mauro Carvalho Chehab (2): edac updates media updates Max Filippov (1): Xtensa updates Michael Ellerman (1): powerpc updates Michael Tsirkin (1): virtio updates Michal Marek (3): kbuild updates kconfig updates
Linux 4.10-rc1
It's Christmas Day, and it's two weeks since the merge window opened. Thus, the merge window is now closed. I did a few final pulls today, but I also rejected a couple of pulls that came in late in the window and looked dodgy. You know who you are. On the whole, this wasn't all that big a release - nothing like 4.9. Although it wasn't tiny either. I think 4.7 was smaller. 4.8 might have been too. It's xmas day, and right now I can't be arsed to actually do the statistics I'd normally do. Everything looks pretty normal, although we had an unusual amount of tree-wide final cleanups in the last days of the merge window. But the general statistics look fairly common: a bit over half is drivers, maybe slightly less arch updates than normal, and a fair amount of documentation updates due to the sphinx conversion. And then the usual misc noise all over, although the perf tooling updates do stand out. The shortlog is much too big, as it always is during the merge window, so as usual you just get the merge-log. Linus --- Al Viro (3): vfs updates more vfs updates final vfs updates Alex Williamson (1): VFIO updates Alexandre Belloni (1): RTC updates Andrew Morton (3): updates more updates final set of updates Arnd Bergmann (7): ARM SoC non-urgent fixes ARM SoC platform updates ARM SoC defconfig updates ARM SoC 64-bit updates ARM DT updates ARM 64-bit DT updates ARM SoC driver updates Bart Van Assche (1): scsi target cleanups Bjorn Andersson (2): remoteproc updates rpmsg updates Bjorn Helgaas (1): PCI updates Borislav Petkov (1): EDAC updates Brian Norris (1): MTD updates Bruce Fields (1): nfsd updates Catalin Marinas (1): arm64 updates Chris Mason (1): btrfs updates Chris Metcalf (1): arch/tile updates Christoph Hellwig (1): configfs update Corey Minyard (1): IPMI updates Dan Williams (1): libnvdimm updates Darren Hart (1): more x86 platform driver updates Darrent Hart (1): x86 platform driver updates Dave Airlie (2): drm updates drm fixes Dave Chinner (1): xfs updates David Kleikamp (1): jfs update David Miller (5): networking updates sparc updates networking fixes and cleanups networking fixes and cleanups networking fixes David Teigland (1): dlm fixes Dmitry Torokhov (1): input subsystem updates Doug Ledford (2): rdma updates rdma fixes Eric Biederman (1): namespace updates Geert Uytterhoeven (1): m68k updates Greg KH (5): USB/PHY updates tty/serial updates staging/IIO updates driver core updates char/misc driver updates Greg Ungerer (1): m68knommu updates Guenter Roeck (1): hwmon updates Hans-Christian Noren Egtvedt (1): AVR32 updates Helge Deller (1): parisc updates Herbert Xu (2): crypto updates crypto fixes Ilya Dryomov (1): ceph updates Ingo Molnar (24): RCU updates SMP bootup updates EFI updates locking updates mm/PAT cleanup perf updates scheduler updates hotplug API fix x86 RAS updates x86 apic updates x86 asm updates x86 boot updates x86 build updates x86 cleanups x86 CPU updates x86 FPU updates x86 header fixlet x86 idle updates x86 microcode update x86 platform updates irq fix perf fixes timer fix x86 fixes Jacek Anaszewski (2): LED updates LED maintainer email update Jaegeuk Kim (1): f2fs updates James Bottomley (2): SCSI updates late SCSI updates James Morris (2): security subsystem updates SElinux fix Jan Kara (1): quota, fsnotify and ext2 updates Jassi Brar (1): mailbox updates Jean Delvare (1): dmi fix Jens Axboe (4): block layer updates fs meta data unmap optimization block IO fixes block layer fixes Jesper Nilsson (1): CRIS updates Jessica Yu (1): modules updates Jiri Kosina (3): HID updates livepatch update trivial updates Joerg Roedel (1): IOMMU updates Jon Mason (1): NTB update Jonathan Corbet (3): documentation update more documentation updates documentation fix Juergen Gross (1): xen updates Kees Cook (2): pstore updates gcc plugins updates Konrad Rzeszutek Wilk (1): swiotlb updates Lee Jones (1): MFD updates Len Brown (1): turbostat updates Ley Foon Tan (1): arch/nios2 updates Linus Walleij (1): pinctrl updates Luinus Walleij (1): GPIO updates Luis de Bethencourt (1): befs updates Mark Brown (3): regmap fixlet regulator updates spi updates Martin Schwidefsky (2): s390 updates more s390 updates Mauro Carvalho Chehab (2): edac updates media updates Max Filippov (1): Xtensa updates Michael Ellerman (1): powerpc updates Michael Tsirkin (1): virtio updates Michal Marek (3): kbuild updates kconfig updates