public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Hanjun Guo <guohanjun@huawei.com>
To: Al Viro <viro@ZenIV.linux.org.uk>,
	Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Will Deacon <will.deacon@arm.com>,
	"Catalin Marinas" <catalin.marinas@arm.com>
Subject: Re: Linux 4.10-rc1
Date: Mon, 26 Dec 2016 17:45:10 +0800	[thread overview]
Message-ID: <5860E6A6.4020905@huawei.com> (raw)
In-Reply-To: <20161226091854.GO1555@ZenIV.linux.org.uk>

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 <viro@zeniv.linux.org.uk>
>
> diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h
> new file mode 100644
> index 000000000000..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 <asm/alternative.h>
> +#include <asm/kernel-pgtable.h>
> +#include <asm/sysreg.h>
> +#include <asm/assembler.h>
> +
> +/*
> + * 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 <asm/kernel-pgtable.h>
>  #include <asm/sysreg.h>
>  
> -#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 <asm/assembler.h>
> -
> -/*
> - * 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 */

I think we need to remove the split and keep it unchanged, just
add the change below.

Thanks
Hanjun

> 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
> @@ -17,7 +17,7 @@
>   */
>  #include <linux/linkage.h>
>  
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  
>  	.text
>  
> diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S
> index fd6cd05593f9..4b5d826895ff 100644
> --- a/arch/arm64/lib/copy_from_user.S
> +++ b/arch/arm64/lib/copy_from_user.S
> @@ -17,7 +17,7 @@
>  #include <linux/linkage.h>
>  
>  #include <asm/cache.h>
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  
>  /*
>   * Copy from user space to a kernel buffer (alignment handled by the hardware)
> diff --git a/arch/arm64/lib/copy_in_user.S b/arch/arm64/lib/copy_in_user.S
> index d828540ded6f..47184c3a97da 100644
> --- a/arch/arm64/lib/copy_in_user.S
> +++ b/arch/arm64/lib/copy_in_user.S
> @@ -19,7 +19,7 @@
>  #include <linux/linkage.h>
>  
>  #include <asm/cache.h>
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  
>  /*
>   * Copy from user space to user space (alignment handled by the hardware)
> diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S
> index 3e6ae2663b82..351f0766f7a6 100644
> --- a/arch/arm64/lib/copy_to_user.S
> +++ b/arch/arm64/lib/copy_to_user.S
> @@ -17,7 +17,7 @@
>  #include <linux/linkage.h>
>  
>  #include <asm/cache.h>
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  
>  /*
>   * Copy to user space from a kernel buffer (alignment handled by the hardware)
> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S
> index 17f422a4dc55..83c27b6e6dca 100644
> --- a/arch/arm64/mm/cache.S
> +++ b/arch/arm64/mm/cache.S
> @@ -23,7 +23,7 @@
>  #include <asm/assembler.h>
>  #include <asm/cpufeature.h>
>  #include <asm/alternative.h>
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  
>  /*
>   *	flush_icache_range(start,end)
> diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S
> index 47cf3f9d89ff..947830a459d2 100644
> --- a/arch/arm64/xen/hypercall.S
> +++ b/arch/arm64/xen/hypercall.S
> @@ -49,7 +49,7 @@
>  
>  #include <linux/linkage.h>
>  #include <asm/assembler.h>
> -#include <linux/uaccess.h>
> +#include <asm/asm-uaccess.h>
>  #include <xen/interface/xen.h>
>  
>  
>
> .
>

  parent reply	other threads:[~2016-12-26  9:47 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-26  0:41 Linux 4.10-rc1 Linus Torvalds
2016-12-26  8:38 ` Hanjun Guo
2016-12-26  9:05   ` Kefeng Wang
2016-12-26  9:18     ` Al Viro
2016-12-26  9:38       ` Hanjun Guo
2016-12-26  9:45       ` Hanjun Guo [this message]
2016-12-26 14:23         ` Al Viro
2016-12-26 15:14           ` Al Viro
2016-12-26  9:15   ` Al Viro
2016-12-26 12:17 ` linux-next: stats (Was: Linux 4.10-rc1) Stephen Rothwell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5860E6A6.4020905@huawei.com \
    --to=guohanjun@huawei.com \
    --cc=catalin.marinas@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@ZenIV.linux.org.uk \
    --cc=wangkefeng.wang@huawei.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox