Re: Linux 4.10-rc1

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Al Viro
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)

2016-12-26 Thread Stephen Rothwell
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


linux-next: stats (Was: Linux 4.10-rc1)

2016-12-26 Thread Stephen Rothwell
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

2016-12-26 Thread Hanjun Guo
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

2016-12-26 Thread Hanjun Guo
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

2016-12-26 Thread Hanjun Guo
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

2016-12-26 Thread Hanjun Guo
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

2016-12-26 Thread Al Viro
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
+++ 

Re: Linux 4.10-rc1

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Al Viro
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

2016-12-26 Thread Kefeng Wang


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

2016-12-26 Thread Kefeng Wang


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

2016-12-26 Thread Hanjun Guo
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

2016-12-26 Thread Hanjun Guo
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

2016-12-25 Thread Linus Torvalds
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

2016-12-25 Thread Linus Torvalds
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