All of lore.kernel.org
 help / color / mirror / Atom feed
From: Palmer Dabbelt <palmer@dabbelt.com>
To: lizhengyu3@huawei.com
Cc: liaochang1@huawei.com, alex@ghiti.fr, aou@eecs.berkeley.edu,
	Bjorn Topel <bjorn.topel@gmail.com>,
	ebiederm@xmission.com, guoren@linux.alibaba.com,
	jszhang@kernel.org, kexec@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org,
	mick@ics.forth.gr, Paul Walmsley <paul.walmsley@sifive.com>,
	penberg@kernel.org, sunnanyong@huawei.com,
	wangkefeng.wang@huawei.com
Subject: Re: [PATCH v3 -next 1/6] kexec_file: Fix kexec_file.c build error for riscv platform
Date: Fri, 20 May 2022 08:45:19 -0700 (PDT)	[thread overview]
Message-ID: <mhng-33c63a92-49e5-48a0-8f54-797c797ee373@palmer-mbp2014> (raw)
In-Reply-To: <20220408100914.150110-2-lizhengyu3@huawei.com>

On Fri, 08 Apr 2022 03:09:09 PDT (-0700), lizhengyu3@huawei.com wrote:
> From: Liao Chang <liaochang1@huawei.com>
>
> When CONFIG_KEXEC_FILE is set for riscv platform, the compilation of
> kernel/kexec_file.c generate build error:
>
> kernel/kexec_file.c: In function 'crash_prepare_elf64_headers':
> ./arch/riscv/include/asm/page.h:110:71: error: request for member 'virt_addr' in something not a structure or union
>   110 |  ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < kernel_map.virt_addr))
>       |                                                                       ^
> ./arch/riscv/include/asm/page.h:131:2: note: in expansion of macro 'is_linear_mapping'
>   131 |  is_linear_mapping(_x) ?       \
>       |  ^~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:140:31: note: in expansion of macro '__va_to_pa_nodebug'
>   140 | #define __phys_addr_symbol(x) __va_to_pa_nodebug(x)
>       |                               ^~~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:143:24: note: in expansion of macro '__phys_addr_symbol'
>   143 | #define __pa_symbol(x) __phys_addr_symbol(RELOC_HIDE((unsigned long)(x), 0))
>       |                        ^~~~~~~~~~~~~~~~~~
> kernel/kexec_file.c:1327:36: note: in expansion of macro '__pa_symbol'
>  1327 |   phdr->p_offset = phdr->p_paddr = __pa_symbol(_text);
>
> This occurs is because the "kernel_map" referenced in macro
> is_linear_mapping()  is suppose to be the one of struct kernel_mapping
> defined in arch/riscv/mm/init.c, but the 2nd argument of
> crash_prepare_elf64_header() has same symbol name, in expansion of macro
> is_linear_mapping in function crash_prepare_elf64_header(), "kernel_map"
> actually is the local variable.
>
> Signed-off-by: Liao Chang <liaochang1@huawei.com>
> ---
>  include/linux/kexec.h | 2 +-
>  kernel/kexec_file.c   | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
> index 58d1b58a971e..ebb1bffbf068 100644
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
> @@ -227,7 +227,7 @@ struct crash_mem {
>  extern int crash_exclude_mem_range(struct crash_mem *mem,
>  				   unsigned long long mstart,
>  				   unsigned long long mend);
> -extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +extern int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  				       void **addr, unsigned long *sz);
>  #endif /* CONFIG_KEXEC_FILE */
>
> diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
> index 8347fc158d2b..331a4f0f10f5 100644
> --- a/kernel/kexec_file.c
> +++ b/kernel/kexec_file.c
> @@ -1260,7 +1260,7 @@ int crash_exclude_mem_range(struct crash_mem *mem,
>  	return 0;
>  }
>
> -int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  			  void **addr, unsigned long *sz)
>  {
>  	Elf64_Ehdr *ehdr;
> @@ -1324,7 +1324,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
>  	phdr++;
>
>  	/* Prepare PT_LOAD type program header for kernel text region */
> -	if (kernel_map) {
> +	if (need_kernel_map) {
>  		phdr->p_type = PT_LOAD;
>  		phdr->p_flags = PF_R|PF_W|PF_X;
>  		phdr->p_vaddr = (unsigned long) _text;

IMO this is fine: we could rename all the kernel_map stuff in 
arch/riscv, but this is much more self-contained.  It's not been ack'd 
by anyone else, but get_maintainers just suggests the kexec@ list so I'm 
going to take it via the RISC-V tree along with the rest of these.

Thanks!

WARNING: multiple messages have this Message-ID (diff)
From: Palmer Dabbelt <palmer@dabbelt.com>
To: lizhengyu3@huawei.com
Cc: liaochang1@huawei.com, alex@ghiti.fr, aou@eecs.berkeley.edu,
	Bjorn Topel <bjorn.topel@gmail.com>,
	ebiederm@xmission.com, guoren@linux.alibaba.com,
	jszhang@kernel.org,  kexec@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org,
	 mick@ics.forth.gr, Paul Walmsley <paul.walmsley@sifive.com>,
	penberg@kernel.org, sunnanyong@huawei.com,
	wangkefeng.wang@huawei.com
Subject: Re: [PATCH v3 -next 1/6] kexec_file: Fix kexec_file.c build error for riscv platform
Date: Fri, 20 May 2022 08:45:19 -0700 (PDT)	[thread overview]
Message-ID: <mhng-33c63a92-49e5-48a0-8f54-797c797ee373@palmer-mbp2014> (raw)
In-Reply-To: <20220408100914.150110-2-lizhengyu3@huawei.com>

On Fri, 08 Apr 2022 03:09:09 PDT (-0700), lizhengyu3@huawei.com wrote:
> From: Liao Chang <liaochang1@huawei.com>
>
> When CONFIG_KEXEC_FILE is set for riscv platform, the compilation of
> kernel/kexec_file.c generate build error:
>
> kernel/kexec_file.c: In function 'crash_prepare_elf64_headers':
> ./arch/riscv/include/asm/page.h:110:71: error: request for member 'virt_addr' in something not a structure or union
>   110 |  ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < kernel_map.virt_addr))
>       |                                                                       ^
> ./arch/riscv/include/asm/page.h:131:2: note: in expansion of macro 'is_linear_mapping'
>   131 |  is_linear_mapping(_x) ?       \
>       |  ^~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:140:31: note: in expansion of macro '__va_to_pa_nodebug'
>   140 | #define __phys_addr_symbol(x) __va_to_pa_nodebug(x)
>       |                               ^~~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:143:24: note: in expansion of macro '__phys_addr_symbol'
>   143 | #define __pa_symbol(x) __phys_addr_symbol(RELOC_HIDE((unsigned long)(x), 0))
>       |                        ^~~~~~~~~~~~~~~~~~
> kernel/kexec_file.c:1327:36: note: in expansion of macro '__pa_symbol'
>  1327 |   phdr->p_offset = phdr->p_paddr = __pa_symbol(_text);
>
> This occurs is because the "kernel_map" referenced in macro
> is_linear_mapping()  is suppose to be the one of struct kernel_mapping
> defined in arch/riscv/mm/init.c, but the 2nd argument of
> crash_prepare_elf64_header() has same symbol name, in expansion of macro
> is_linear_mapping in function crash_prepare_elf64_header(), "kernel_map"
> actually is the local variable.
>
> Signed-off-by: Liao Chang <liaochang1@huawei.com>
> ---
>  include/linux/kexec.h | 2 +-
>  kernel/kexec_file.c   | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
> index 58d1b58a971e..ebb1bffbf068 100644
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
> @@ -227,7 +227,7 @@ struct crash_mem {
>  extern int crash_exclude_mem_range(struct crash_mem *mem,
>  				   unsigned long long mstart,
>  				   unsigned long long mend);
> -extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +extern int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  				       void **addr, unsigned long *sz);
>  #endif /* CONFIG_KEXEC_FILE */
>
> diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
> index 8347fc158d2b..331a4f0f10f5 100644
> --- a/kernel/kexec_file.c
> +++ b/kernel/kexec_file.c
> @@ -1260,7 +1260,7 @@ int crash_exclude_mem_range(struct crash_mem *mem,
>  	return 0;
>  }
>
> -int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  			  void **addr, unsigned long *sz)
>  {
>  	Elf64_Ehdr *ehdr;
> @@ -1324,7 +1324,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
>  	phdr++;
>
>  	/* Prepare PT_LOAD type program header for kernel text region */
> -	if (kernel_map) {
> +	if (need_kernel_map) {
>  		phdr->p_type = PT_LOAD;
>  		phdr->p_flags = PF_R|PF_W|PF_X;
>  		phdr->p_vaddr = (unsigned long) _text;

IMO this is fine: we could rename all the kernel_map stuff in 
arch/riscv, but this is much more self-contained.  It's not been ack'd 
by anyone else, but get_maintainers just suggests the kexec@ list so I'm 
going to take it via the RISC-V tree along with the rest of these.

Thanks!

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

WARNING: multiple messages have this Message-ID (diff)
From: Palmer Dabbelt <palmer@dabbelt.com>
To: kexec@lists.infradead.org
Subject: [PATCH v3 -next 1/6] kexec_file: Fix kexec_file.c build error for riscv platform
Date: Fri, 20 May 2022 08:45:19 -0700 (PDT)	[thread overview]
Message-ID: <mhng-33c63a92-49e5-48a0-8f54-797c797ee373@palmer-mbp2014> (raw)
In-Reply-To: <20220408100914.150110-2-lizhengyu3@huawei.com>

On Fri, 08 Apr 2022 03:09:09 PDT (-0700), lizhengyu3 at huawei.com wrote:
> From: Liao Chang <liaochang1@huawei.com>
>
> When CONFIG_KEXEC_FILE is set for riscv platform, the compilation of
> kernel/kexec_file.c generate build error:
>
> kernel/kexec_file.c: In function 'crash_prepare_elf64_headers':
> ./arch/riscv/include/asm/page.h:110:71: error: request for member 'virt_addr' in something not a structure or union
>   110 |  ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < kernel_map.virt_addr))
>       |                                                                       ^
> ./arch/riscv/include/asm/page.h:131:2: note: in expansion of macro 'is_linear_mapping'
>   131 |  is_linear_mapping(_x) ?       \
>       |  ^~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:140:31: note: in expansion of macro '__va_to_pa_nodebug'
>   140 | #define __phys_addr_symbol(x) __va_to_pa_nodebug(x)
>       |                               ^~~~~~~~~~~~~~~~~~
> ./arch/riscv/include/asm/page.h:143:24: note: in expansion of macro '__phys_addr_symbol'
>   143 | #define __pa_symbol(x) __phys_addr_symbol(RELOC_HIDE((unsigned long)(x), 0))
>       |                        ^~~~~~~~~~~~~~~~~~
> kernel/kexec_file.c:1327:36: note: in expansion of macro '__pa_symbol'
>  1327 |   phdr->p_offset = phdr->p_paddr = __pa_symbol(_text);
>
> This occurs is because the "kernel_map" referenced in macro
> is_linear_mapping()  is suppose to be the one of struct kernel_mapping
> defined in arch/riscv/mm/init.c, but the 2nd argument of
> crash_prepare_elf64_header() has same symbol name, in expansion of macro
> is_linear_mapping in function crash_prepare_elf64_header(), "kernel_map"
> actually is the local variable.
>
> Signed-off-by: Liao Chang <liaochang1@huawei.com>
> ---
>  include/linux/kexec.h | 2 +-
>  kernel/kexec_file.c   | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
> index 58d1b58a971e..ebb1bffbf068 100644
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
> @@ -227,7 +227,7 @@ struct crash_mem {
>  extern int crash_exclude_mem_range(struct crash_mem *mem,
>  				   unsigned long long mstart,
>  				   unsigned long long mend);
> -extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +extern int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  				       void **addr, unsigned long *sz);
>  #endif /* CONFIG_KEXEC_FILE */
>
> diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
> index 8347fc158d2b..331a4f0f10f5 100644
> --- a/kernel/kexec_file.c
> +++ b/kernel/kexec_file.c
> @@ -1260,7 +1260,7 @@ int crash_exclude_mem_range(struct crash_mem *mem,
>  	return 0;
>  }
>
> -int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
> +int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
>  			  void **addr, unsigned long *sz)
>  {
>  	Elf64_Ehdr *ehdr;
> @@ -1324,7 +1324,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
>  	phdr++;
>
>  	/* Prepare PT_LOAD type program header for kernel text region */
> -	if (kernel_map) {
> +	if (need_kernel_map) {
>  		phdr->p_type = PT_LOAD;
>  		phdr->p_flags = PF_R|PF_W|PF_X;
>  		phdr->p_vaddr = (unsigned long) _text;

IMO this is fine: we could rename all the kernel_map stuff in 
arch/riscv, but this is much more self-contained.  It's not been ack'd 
by anyone else, but get_maintainers just suggests the kexec@ list so I'm 
going to take it via the RISC-V tree along with the rest of these.

Thanks!


  reply	other threads:[~2022-05-20 15:45 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-08 10:09 [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 1/6] kexec_file: Fix kexec_file.c build error for riscv platform Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-05-20 15:45   ` Palmer Dabbelt [this message]
2022-05-20 15:45     ` Palmer Dabbelt
2022-05-20 15:45     ` Palmer Dabbelt
2022-05-22  3:07     ` Baoquan He
2022-05-22  3:07       ` Baoquan He
2022-05-22  3:07       ` Baoquan He
2022-04-08 10:09 ` [PATCH v3 -next 2/6] RISC-V: use memcpy for kexec_file mode Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 3/6] RISC-V: Add kexec_file support Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 4/6] RISC-V: Support for kexec_file on panic Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 5/6] RISC-V: Add purgatory Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 6/6] RISC-V: Load purgatory in kexec_file Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-08 10:09   ` Li Zhengyu
2022-04-21  3:15 ` [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support lizhengyu (E)
2022-04-21  3:15   ` lizhengyu
2022-04-21  3:15   ` lizhengyu (E)
2022-05-19  8:26 ` lizhengyu (E)
2022-05-19  8:26   ` lizhengyu
2022-05-19  8:26   ` lizhengyu (E)
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-20 15:45   ` Palmer Dabbelt
2022-05-20 15:45   ` Palmer Dabbelt

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=mhng-33c63a92-49e5-48a0-8f54-797c797ee373@palmer-mbp2014 \
    --to=palmer@dabbelt.com \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=bjorn.topel@gmail.com \
    --cc=ebiederm@xmission.com \
    --cc=guoren@linux.alibaba.com \
    --cc=jszhang@kernel.org \
    --cc=kexec@lists.infradead.org \
    --cc=liaochang1@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=lizhengyu3@huawei.com \
    --cc=mick@ics.forth.gr \
    --cc=paul.walmsley@sifive.com \
    --cc=penberg@kernel.org \
    --cc=sunnanyong@huawei.com \
    --cc=wangkefeng.wang@huawei.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.