All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will@kernel.org>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	corbet@lwn.net, catalin.marinas@arm.com,
	linux-arm-kernel@lists.infradead.org, maz@kernel.org,
	james.morse@arm.com, vladimir.murzin@arm.com,
	matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com,
	steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de,
	selindag@gmail.com, tyhicks@linux.microsoft.com,
	kernelfans@gmail.com, akpm@linux-foundation.org,
	madvenka@linux.microsoft.com
Subject: Re: [PATCH v17 10/15] arm64: kexec: use ld script for relocation function
Date: Wed, 29 Sep 2021 13:45:13 +0100	[thread overview]
Message-ID: <20210929124513.GD21631@willie-the-truck> (raw)
In-Reply-To: <20210916231325.125533-11-pasha.tatashin@soleen.com>

On Thu, Sep 16, 2021 at 07:13:20PM -0400, Pasha Tatashin wrote:
> Currently, relocation code declares start and end variables
> which are used to compute its size.
> 
> The better way to do this is to use ld script incited, and put relocation
> function in its own section.

"incited"? I don't understand ...

> 
> Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
> ---
>  arch/arm64/include/asm/sections.h   |  1 +
>  arch/arm64/kernel/machine_kexec.c   | 16 ++++++----------
>  arch/arm64/kernel/relocate_kernel.S | 15 ++-------------
>  arch/arm64/kernel/vmlinux.lds.S     | 19 +++++++++++++++++++
>  4 files changed, 28 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/sections.h b/arch/arm64/include/asm/sections.h
> index e4ad9db53af1..152cb35bf9df 100644
> --- a/arch/arm64/include/asm/sections.h
> +++ b/arch/arm64/include/asm/sections.h
> @@ -21,5 +21,6 @@ extern char __exittext_begin[], __exittext_end[];
>  extern char __irqentry_text_start[], __irqentry_text_end[];
>  extern char __mmuoff_data_start[], __mmuoff_data_end[];
>  extern char __entry_tramp_text_start[], __entry_tramp_text_end[];
> +extern char __relocate_new_kernel_start[], __relocate_new_kernel_end[];
>  
>  #endif /* __ASM_SECTIONS_H */
> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
> index cf5d6f22a041..83da6045cd45 100644
> --- a/arch/arm64/kernel/machine_kexec.c
> +++ b/arch/arm64/kernel/machine_kexec.c
> @@ -21,14 +21,11 @@
>  #include <asm/mmu.h>
>  #include <asm/mmu_context.h>
>  #include <asm/page.h>
> +#include <asm/sections.h>
>  #include <asm/trans_pgd.h>
>  
>  #include "cpu-reset.h"
>  
> -/* Global variables for the arm64_relocate_new_kernel routine. */
> -extern const unsigned char arm64_relocate_new_kernel[];
> -extern const unsigned long arm64_relocate_new_kernel_size;
> -
>  /**
>   * kexec_image_info - For debugging output.
>   */
> @@ -163,6 +160,7 @@ static void *kexec_page_alloc(void *arg)
>  int machine_kexec_post_load(struct kimage *kimage)
>  {
>  	void *reloc_code = page_to_virt(kimage->control_code_page);
> +	long reloc_size;
>  	struct trans_pgd_info info = {
>  		.trans_alloc_page	= kexec_page_alloc,
>  		.trans_alloc_arg	= kimage,
> @@ -183,17 +181,15 @@ int machine_kexec_post_load(struct kimage *kimage)
>  			return rc;
>  	}
>  
> -	memcpy(reloc_code, arm64_relocate_new_kernel,
> -	       arm64_relocate_new_kernel_size);
> +	reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start;
> +	memcpy(reloc_code, __relocate_new_kernel_start, reloc_size);
>  	kimage->arch.kern_reloc = __pa(reloc_code);
>  
>  	/* Flush the reloc_code in preparation for its execution. */
>  	dcache_clean_inval_poc((unsigned long)reloc_code,
> -			       (unsigned long)reloc_code +
> -			       arm64_relocate_new_kernel_size);
> +			       (unsigned long)reloc_code +  reloc_size);

Extra whitespace.

>  	icache_inval_pou((uintptr_t)reloc_code,
> -			 (uintptr_t)reloc_code +
> -			 arm64_relocate_new_kernel_size);
> +			 (uintptr_t)reloc_code + reloc_size);
>  	kexec_list_flush(kimage);
>  	kexec_image_info(kimage);
>  
> diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_kernel.S
> index b4fb97312a80..9d2400855ee4 100644
> --- a/arch/arm64/kernel/relocate_kernel.S
> +++ b/arch/arm64/kernel/relocate_kernel.S
> @@ -15,6 +15,7 @@
>  #include <asm/sysreg.h>
>  #include <asm/virt.h>
>  
> +.pushsection    ".kexec_relocate.text", "ax"

Just use .section if you're putting the entire file in there?

>  /*
>   * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot it.
>   *
> @@ -77,16 +78,4 @@ SYM_CODE_START(arm64_relocate_new_kernel)
>  	mov	x3, xzr
>  	br	x4				/* Jumps from el1 */
>  SYM_CODE_END(arm64_relocate_new_kernel)
> -
> -.align 3	/* To keep the 64-bit values below naturally aligned. */
> -
> -.Lcopy_end:
> -.org	KEXEC_CONTROL_PAGE_SIZE
> -
> -/*
> - * arm64_relocate_new_kernel_size - Number of bytes to copy to the
> - * control_code_page.
> - */
> -.globl arm64_relocate_new_kernel_size
> -arm64_relocate_new_kernel_size:
> -	.quad	.Lcopy_end - arm64_relocate_new_kernel
> +.popsection
> diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
> index f6b1a88245db..ab457b609e69 100644
> --- a/arch/arm64/kernel/vmlinux.lds.S
> +++ b/arch/arm64/kernel/vmlinux.lds.S
> @@ -63,6 +63,7 @@
>  #include <asm-generic/vmlinux.lds.h>
>  #include <asm/cache.h>
>  #include <asm/kernel-pgtable.h>
> +#include <asm/kexec.h>
>  #include <asm/memory.h>
>  #include <asm/page.h>
>  
> @@ -100,6 +101,16 @@ jiffies = jiffies_64;
>  #define HIBERNATE_TEXT
>  #endif
>  
> +#ifdef CONFIG_KEXEC_CORE
> +#define KEXEC_TEXT					\
> +	. = ALIGN(SZ_4K);				\
> +	__relocate_new_kernel_start = .;		\
> +	*(.kexec_relocate.text)				\
> +	__relocate_new_kernel_end = .;
> +#else
> +#define KEXEC_TEXT
> +#endif
> +
>  #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
>  #define TRAMP_TEXT					\
>  	. = ALIGN(PAGE_SIZE);				\
> @@ -160,6 +171,7 @@ SECTIONS
>  			HYPERVISOR_TEXT
>  			IDMAP_TEXT
>  			HIBERNATE_TEXT
> +			KEXEC_TEXT
>  			TRAMP_TEXT
>  			*(.fixup)
>  			*(.gnu.warning)
> @@ -348,3 +360,10 @@ ASSERT(swapper_pg_dir - reserved_pg_dir == RESERVED_SWAPPER_OFFSET,
>  ASSERT(swapper_pg_dir - tramp_pg_dir == TRAMP_SWAPPER_OFFSET,
>         "TRAMP_SWAPPER_OFFSET is wrong!")
>  #endif
> +
> +#ifdef CONFIG_KEXEC_CORE
> +/* kexec relocation code should fit into one KEXEC_CONTROL_PAGE_SIZE */
> +ASSERT(__relocate_new_kernel_end - (__relocate_new_kernel_start & ~(SZ_4K - 1))
> +	<= SZ_4K, "kexec relocation code is too big or misaligned")
> +ASSERT(KEXEC_CONTROL_PAGE_SIZE >= SZ_4K, "KEXEC_CONTROL_PAGE_SIZE is brokern")

Typo: "brokern",

Will

WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will@kernel.org>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	corbet@lwn.net, catalin.marinas@arm.com,
	linux-arm-kernel@lists.infradead.org, maz@kernel.org,
	james.morse@arm.com, vladimir.murzin@arm.com,
	matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com,
	steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de,
	selindag@gmail.com, tyhicks@linux.microsoft.com,
	kernelfans@gmail.com, akpm@linux-foundation.org,
	madvenka@linux.microsoft.com
Subject: Re: [PATCH v17 10/15] arm64: kexec: use ld script for relocation function
Date: Wed, 29 Sep 2021 13:45:13 +0100	[thread overview]
Message-ID: <20210929124513.GD21631@willie-the-truck> (raw)
In-Reply-To: <20210916231325.125533-11-pasha.tatashin@soleen.com>

On Thu, Sep 16, 2021 at 07:13:20PM -0400, Pasha Tatashin wrote:
> Currently, relocation code declares start and end variables
> which are used to compute its size.
> 
> The better way to do this is to use ld script incited, and put relocation
> function in its own section.

"incited"? I don't understand ...

> 
> Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
> ---
>  arch/arm64/include/asm/sections.h   |  1 +
>  arch/arm64/kernel/machine_kexec.c   | 16 ++++++----------
>  arch/arm64/kernel/relocate_kernel.S | 15 ++-------------
>  arch/arm64/kernel/vmlinux.lds.S     | 19 +++++++++++++++++++
>  4 files changed, 28 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/sections.h b/arch/arm64/include/asm/sections.h
> index e4ad9db53af1..152cb35bf9df 100644
> --- a/arch/arm64/include/asm/sections.h
> +++ b/arch/arm64/include/asm/sections.h
> @@ -21,5 +21,6 @@ extern char __exittext_begin[], __exittext_end[];
>  extern char __irqentry_text_start[], __irqentry_text_end[];
>  extern char __mmuoff_data_start[], __mmuoff_data_end[];
>  extern char __entry_tramp_text_start[], __entry_tramp_text_end[];
> +extern char __relocate_new_kernel_start[], __relocate_new_kernel_end[];
>  
>  #endif /* __ASM_SECTIONS_H */
> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
> index cf5d6f22a041..83da6045cd45 100644
> --- a/arch/arm64/kernel/machine_kexec.c
> +++ b/arch/arm64/kernel/machine_kexec.c
> @@ -21,14 +21,11 @@
>  #include <asm/mmu.h>
>  #include <asm/mmu_context.h>
>  #include <asm/page.h>
> +#include <asm/sections.h>
>  #include <asm/trans_pgd.h>
>  
>  #include "cpu-reset.h"
>  
> -/* Global variables for the arm64_relocate_new_kernel routine. */
> -extern const unsigned char arm64_relocate_new_kernel[];
> -extern const unsigned long arm64_relocate_new_kernel_size;
> -
>  /**
>   * kexec_image_info - For debugging output.
>   */
> @@ -163,6 +160,7 @@ static void *kexec_page_alloc(void *arg)
>  int machine_kexec_post_load(struct kimage *kimage)
>  {
>  	void *reloc_code = page_to_virt(kimage->control_code_page);
> +	long reloc_size;
>  	struct trans_pgd_info info = {
>  		.trans_alloc_page	= kexec_page_alloc,
>  		.trans_alloc_arg	= kimage,
> @@ -183,17 +181,15 @@ int machine_kexec_post_load(struct kimage *kimage)
>  			return rc;
>  	}
>  
> -	memcpy(reloc_code, arm64_relocate_new_kernel,
> -	       arm64_relocate_new_kernel_size);
> +	reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start;
> +	memcpy(reloc_code, __relocate_new_kernel_start, reloc_size);
>  	kimage->arch.kern_reloc = __pa(reloc_code);
>  
>  	/* Flush the reloc_code in preparation for its execution. */
>  	dcache_clean_inval_poc((unsigned long)reloc_code,
> -			       (unsigned long)reloc_code +
> -			       arm64_relocate_new_kernel_size);
> +			       (unsigned long)reloc_code +  reloc_size);

Extra whitespace.

>  	icache_inval_pou((uintptr_t)reloc_code,
> -			 (uintptr_t)reloc_code +
> -			 arm64_relocate_new_kernel_size);
> +			 (uintptr_t)reloc_code + reloc_size);
>  	kexec_list_flush(kimage);
>  	kexec_image_info(kimage);
>  
> diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_kernel.S
> index b4fb97312a80..9d2400855ee4 100644
> --- a/arch/arm64/kernel/relocate_kernel.S
> +++ b/arch/arm64/kernel/relocate_kernel.S
> @@ -15,6 +15,7 @@
>  #include <asm/sysreg.h>
>  #include <asm/virt.h>
>  
> +.pushsection    ".kexec_relocate.text", "ax"

Just use .section if you're putting the entire file in there?

>  /*
>   * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot it.
>   *
> @@ -77,16 +78,4 @@ SYM_CODE_START(arm64_relocate_new_kernel)
>  	mov	x3, xzr
>  	br	x4				/* Jumps from el1 */
>  SYM_CODE_END(arm64_relocate_new_kernel)
> -
> -.align 3	/* To keep the 64-bit values below naturally aligned. */
> -
> -.Lcopy_end:
> -.org	KEXEC_CONTROL_PAGE_SIZE
> -
> -/*
> - * arm64_relocate_new_kernel_size - Number of bytes to copy to the
> - * control_code_page.
> - */
> -.globl arm64_relocate_new_kernel_size
> -arm64_relocate_new_kernel_size:
> -	.quad	.Lcopy_end - arm64_relocate_new_kernel
> +.popsection
> diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
> index f6b1a88245db..ab457b609e69 100644
> --- a/arch/arm64/kernel/vmlinux.lds.S
> +++ b/arch/arm64/kernel/vmlinux.lds.S
> @@ -63,6 +63,7 @@
>  #include <asm-generic/vmlinux.lds.h>
>  #include <asm/cache.h>
>  #include <asm/kernel-pgtable.h>
> +#include <asm/kexec.h>
>  #include <asm/memory.h>
>  #include <asm/page.h>
>  
> @@ -100,6 +101,16 @@ jiffies = jiffies_64;
>  #define HIBERNATE_TEXT
>  #endif
>  
> +#ifdef CONFIG_KEXEC_CORE
> +#define KEXEC_TEXT					\
> +	. = ALIGN(SZ_4K);				\
> +	__relocate_new_kernel_start = .;		\
> +	*(.kexec_relocate.text)				\
> +	__relocate_new_kernel_end = .;
> +#else
> +#define KEXEC_TEXT
> +#endif
> +
>  #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
>  #define TRAMP_TEXT					\
>  	. = ALIGN(PAGE_SIZE);				\
> @@ -160,6 +171,7 @@ SECTIONS
>  			HYPERVISOR_TEXT
>  			IDMAP_TEXT
>  			HIBERNATE_TEXT
> +			KEXEC_TEXT
>  			TRAMP_TEXT
>  			*(.fixup)
>  			*(.gnu.warning)
> @@ -348,3 +360,10 @@ ASSERT(swapper_pg_dir - reserved_pg_dir == RESERVED_SWAPPER_OFFSET,
>  ASSERT(swapper_pg_dir - tramp_pg_dir == TRAMP_SWAPPER_OFFSET,
>         "TRAMP_SWAPPER_OFFSET is wrong!")
>  #endif
> +
> +#ifdef CONFIG_KEXEC_CORE
> +/* kexec relocation code should fit into one KEXEC_CONTROL_PAGE_SIZE */
> +ASSERT(__relocate_new_kernel_end - (__relocate_new_kernel_start & ~(SZ_4K - 1))
> +	<= SZ_4K, "kexec relocation code is too big or misaligned")
> +ASSERT(KEXEC_CONTROL_PAGE_SIZE >= SZ_4K, "KEXEC_CONTROL_PAGE_SIZE is brokern")

Typo: "brokern",

Will

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will@kernel.org>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	corbet@lwn.net, catalin.marinas@arm.com,
	linux-arm-kernel@lists.infradead.org, maz@kernel.org,
	james.morse@arm.com, vladimir.murzin@arm.com,
	matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com,
	steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de,
	selindag@gmail.com, tyhicks@linux.microsoft.com,
	kernelfans@gmail.com, akpm@linux-foundation.org,
	madvenka@linux.microsoft.com
Subject: Re: [PATCH v17 10/15] arm64: kexec: use ld script for relocation function
Date: Wed, 29 Sep 2021 13:45:13 +0100	[thread overview]
Message-ID: <20210929124513.GD21631@willie-the-truck> (raw)
In-Reply-To: <20210916231325.125533-11-pasha.tatashin@soleen.com>

On Thu, Sep 16, 2021 at 07:13:20PM -0400, Pasha Tatashin wrote:
> Currently, relocation code declares start and end variables
> which are used to compute its size.
> 
> The better way to do this is to use ld script incited, and put relocation
> function in its own section.

"incited"? I don't understand ...

> 
> Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
> ---
>  arch/arm64/include/asm/sections.h   |  1 +
>  arch/arm64/kernel/machine_kexec.c   | 16 ++++++----------
>  arch/arm64/kernel/relocate_kernel.S | 15 ++-------------
>  arch/arm64/kernel/vmlinux.lds.S     | 19 +++++++++++++++++++
>  4 files changed, 28 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/sections.h b/arch/arm64/include/asm/sections.h
> index e4ad9db53af1..152cb35bf9df 100644
> --- a/arch/arm64/include/asm/sections.h
> +++ b/arch/arm64/include/asm/sections.h
> @@ -21,5 +21,6 @@ extern char __exittext_begin[], __exittext_end[];
>  extern char __irqentry_text_start[], __irqentry_text_end[];
>  extern char __mmuoff_data_start[], __mmuoff_data_end[];
>  extern char __entry_tramp_text_start[], __entry_tramp_text_end[];
> +extern char __relocate_new_kernel_start[], __relocate_new_kernel_end[];
>  
>  #endif /* __ASM_SECTIONS_H */
> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
> index cf5d6f22a041..83da6045cd45 100644
> --- a/arch/arm64/kernel/machine_kexec.c
> +++ b/arch/arm64/kernel/machine_kexec.c
> @@ -21,14 +21,11 @@
>  #include <asm/mmu.h>
>  #include <asm/mmu_context.h>
>  #include <asm/page.h>
> +#include <asm/sections.h>
>  #include <asm/trans_pgd.h>
>  
>  #include "cpu-reset.h"
>  
> -/* Global variables for the arm64_relocate_new_kernel routine. */
> -extern const unsigned char arm64_relocate_new_kernel[];
> -extern const unsigned long arm64_relocate_new_kernel_size;
> -
>  /**
>   * kexec_image_info - For debugging output.
>   */
> @@ -163,6 +160,7 @@ static void *kexec_page_alloc(void *arg)
>  int machine_kexec_post_load(struct kimage *kimage)
>  {
>  	void *reloc_code = page_to_virt(kimage->control_code_page);
> +	long reloc_size;
>  	struct trans_pgd_info info = {
>  		.trans_alloc_page	= kexec_page_alloc,
>  		.trans_alloc_arg	= kimage,
> @@ -183,17 +181,15 @@ int machine_kexec_post_load(struct kimage *kimage)
>  			return rc;
>  	}
>  
> -	memcpy(reloc_code, arm64_relocate_new_kernel,
> -	       arm64_relocate_new_kernel_size);
> +	reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start;
> +	memcpy(reloc_code, __relocate_new_kernel_start, reloc_size);
>  	kimage->arch.kern_reloc = __pa(reloc_code);
>  
>  	/* Flush the reloc_code in preparation for its execution. */
>  	dcache_clean_inval_poc((unsigned long)reloc_code,
> -			       (unsigned long)reloc_code +
> -			       arm64_relocate_new_kernel_size);
> +			       (unsigned long)reloc_code +  reloc_size);

Extra whitespace.

>  	icache_inval_pou((uintptr_t)reloc_code,
> -			 (uintptr_t)reloc_code +
> -			 arm64_relocate_new_kernel_size);
> +			 (uintptr_t)reloc_code + reloc_size);
>  	kexec_list_flush(kimage);
>  	kexec_image_info(kimage);
>  
> diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_kernel.S
> index b4fb97312a80..9d2400855ee4 100644
> --- a/arch/arm64/kernel/relocate_kernel.S
> +++ b/arch/arm64/kernel/relocate_kernel.S
> @@ -15,6 +15,7 @@
>  #include <asm/sysreg.h>
>  #include <asm/virt.h>
>  
> +.pushsection    ".kexec_relocate.text", "ax"

Just use .section if you're putting the entire file in there?

>  /*
>   * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot it.
>   *
> @@ -77,16 +78,4 @@ SYM_CODE_START(arm64_relocate_new_kernel)
>  	mov	x3, xzr
>  	br	x4				/* Jumps from el1 */
>  SYM_CODE_END(arm64_relocate_new_kernel)
> -
> -.align 3	/* To keep the 64-bit values below naturally aligned. */
> -
> -.Lcopy_end:
> -.org	KEXEC_CONTROL_PAGE_SIZE
> -
> -/*
> - * arm64_relocate_new_kernel_size - Number of bytes to copy to the
> - * control_code_page.
> - */
> -.globl arm64_relocate_new_kernel_size
> -arm64_relocate_new_kernel_size:
> -	.quad	.Lcopy_end - arm64_relocate_new_kernel
> +.popsection
> diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
> index f6b1a88245db..ab457b609e69 100644
> --- a/arch/arm64/kernel/vmlinux.lds.S
> +++ b/arch/arm64/kernel/vmlinux.lds.S
> @@ -63,6 +63,7 @@
>  #include <asm-generic/vmlinux.lds.h>
>  #include <asm/cache.h>
>  #include <asm/kernel-pgtable.h>
> +#include <asm/kexec.h>
>  #include <asm/memory.h>
>  #include <asm/page.h>
>  
> @@ -100,6 +101,16 @@ jiffies = jiffies_64;
>  #define HIBERNATE_TEXT
>  #endif
>  
> +#ifdef CONFIG_KEXEC_CORE
> +#define KEXEC_TEXT					\
> +	. = ALIGN(SZ_4K);				\
> +	__relocate_new_kernel_start = .;		\
> +	*(.kexec_relocate.text)				\
> +	__relocate_new_kernel_end = .;
> +#else
> +#define KEXEC_TEXT
> +#endif
> +
>  #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
>  #define TRAMP_TEXT					\
>  	. = ALIGN(PAGE_SIZE);				\
> @@ -160,6 +171,7 @@ SECTIONS
>  			HYPERVISOR_TEXT
>  			IDMAP_TEXT
>  			HIBERNATE_TEXT
> +			KEXEC_TEXT
>  			TRAMP_TEXT
>  			*(.fixup)
>  			*(.gnu.warning)
> @@ -348,3 +360,10 @@ ASSERT(swapper_pg_dir - reserved_pg_dir == RESERVED_SWAPPER_OFFSET,
>  ASSERT(swapper_pg_dir - tramp_pg_dir == TRAMP_SWAPPER_OFFSET,
>         "TRAMP_SWAPPER_OFFSET is wrong!")
>  #endif
> +
> +#ifdef CONFIG_KEXEC_CORE
> +/* kexec relocation code should fit into one KEXEC_CONTROL_PAGE_SIZE */
> +ASSERT(__relocate_new_kernel_end - (__relocate_new_kernel_start & ~(SZ_4K - 1))
> +	<= SZ_4K, "kexec relocation code is too big or misaligned")
> +ASSERT(KEXEC_CONTROL_PAGE_SIZE >= SZ_4K, "KEXEC_CONTROL_PAGE_SIZE is brokern")

Typo: "brokern",

Will

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2021-09-29 12:45 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-16 23:13 [PATCH v17 00/15] arm64: MMU enabled kexec relocation Pasha Tatashin
2021-09-16 23:13 ` Pasha Tatashin
2021-09-16 23:13 ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 01/15] arm64: kernel: add helper for booted at EL2 and not VHE Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 02/15] arm64: trans_pgd: hibernate: Add trans_pgd_copy_el2_vectors Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 03/15] arm64: hibernate: abstract ttrb0 setup function Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 04/15] arm64: kexec: flush image and lists during kexec load time Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 05/15] arm64: kexec: skip relocation code for inplace kexec Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-29 12:13   ` Will Deacon
2021-09-29 12:13     ` Will Deacon
2021-09-29 12:13     ` Will Deacon
2021-09-30  2:44     ` Pasha Tatashin
2021-09-30  2:44       ` Pasha Tatashin
2021-09-30  2:44       ` Pasha Tatashin
2021-09-30  2:44       ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 06/15] arm64: kexec: Use dcache ops macros instead of open-coding Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 07/15] arm64: kexec: pass kimage as the only argument to relocation function Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 08/15] arm64: kexec: configure EL2 vectors for kexec Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-29 12:35   ` Will Deacon
2021-09-29 12:35     ` Will Deacon
2021-09-29 12:35     ` Will Deacon
2021-09-30  3:54     ` Pasha Tatashin
2021-09-30  3:54       ` Pasha Tatashin
2021-09-30  3:54       ` Pasha Tatashin
2021-09-30  3:54       ` Pasha Tatashin
2021-09-30  8:16       ` Will Deacon
2021-09-30  8:16         ` Will Deacon
2021-09-30  8:16         ` Will Deacon
2021-09-30 11:59         ` Pasha Tatashin
2021-09-30 11:59           ` Pasha Tatashin
2021-09-30 11:59           ` Pasha Tatashin
2021-09-30 11:59           ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 09/15] arm64: kexec: relocate in EL1 mode Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 10/15] arm64: kexec: use ld script for relocation function Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-29 12:45   ` Will Deacon [this message]
2021-09-29 12:45     ` Will Deacon
2021-09-29 12:45     ` Will Deacon
2021-09-30  3:57     ` Pasha Tatashin
2021-09-30  3:57       ` Pasha Tatashin
2021-09-30  3:57       ` Pasha Tatashin
2021-09-30  3:57       ` Pasha Tatashin
2021-09-30  4:08     ` Pasha Tatashin
2021-09-30  4:08       ` Pasha Tatashin
2021-09-30  4:08       ` Pasha Tatashin
2021-09-30  4:08       ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 11/15] arm64: kexec: install a copy of the linear-map Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 12/15] arm64: kexec: keep MMU enabled during kexec relocation Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 13/15] arm64: kexec: remove the pre-kexec PoC maintenance Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 14/15] arm64: kexec: remove cpu-reset.h Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13 ` [PATCH v17 15/15] arm64: trans_pgd: remove trans_pgd_map_page() Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-16 23:13   ` Pasha Tatashin
2021-09-29 16:43   ` Catalin Marinas
2021-09-29 16:43     ` Catalin Marinas
2021-09-29 16:43     ` Catalin Marinas
2021-09-30  4:12     ` Pasha Tatashin
2021-09-30  4:12       ` Pasha Tatashin
2021-09-30  4:12       ` Pasha Tatashin
2021-09-30  4:12       ` Pasha Tatashin
2021-09-29 12:49 ` [PATCH v17 00/15] arm64: MMU enabled kexec relocation Will Deacon
2021-09-29 12:49   ` Will Deacon
2021-09-29 12:49   ` Will Deacon
2021-09-30  4:13   ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin
2021-09-29 17:21 ` Catalin Marinas
2021-09-29 17:21   ` Catalin Marinas
2021-09-29 17:21   ` Catalin Marinas
2021-09-30  4:13   ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin
2021-09-30  4:13     ` Pasha Tatashin

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=20210929124513.GD21631@willie-the-truck \
    --to=will@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ebiederm@xmission.com \
    --cc=james.morse@arm.com \
    --cc=jmorris@namei.org \
    --cc=kernelfans@gmail.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=madvenka@linux.microsoft.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=maz@kernel.org \
    --cc=pasha.tatashin@soleen.com \
    --cc=rfontana@redhat.com \
    --cc=sashal@kernel.org \
    --cc=selindag@gmail.com \
    --cc=steve.capper@arm.com \
    --cc=tglx@linutronix.de \
    --cc=tyhicks@linux.microsoft.com \
    --cc=vladimir.murzin@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.