Message ID | ZW03ODUKGGhP1ZGU@MiWiFi-R3L-srv (mailing list archive) |
---|---|
State | Accepted |
Commit | c41bd2514184d75db087fe4c1221237fb7922875 |
Headers | show |
Series | [1/2] riscv, crash: don't export some symbols when CONFIG_MMU=n | expand |
On 12/3/23 18:19, Baoquan He wrote: > When dropping select of KEXEC and dependency on ARCH_SUPPORTS_KEXEC > from CRASH_DUMP, compiling error is reported when below config items are > set: > ----------------------- > CONFIG_CRASH_CORE=y > CONFIG_KEXEC_CORE=y > CONFIG_CRASH_DUMP=y > ...... > ----------------------- > [] > > Currently, riscv's ARCH_SUPPORTS_KEXEC has dependency on MMU. Before > dropping ARCH_SUPPORTS_KEXEC, disabling CONFIG_MMU will unset > CONFIG_CRASH_DUMP, CONFIG_KEXEC_CORE, CONFIG_CRASH_CORE. Hence > crash_core related codes won't be compiled. > > --------------------- > arch/riscv/Kconfig: > config ARCH_SUPPORTS_KEXEC > def_bool MMU > --------------------- > > After dropping ARCH_SUPPORTS_KEXEC, CONFIG_CRASH_DUMP, CONFIG_KEXEC_CORE, > CONFIG_CRASH_CORE can be set independently of CONFIG_MMU. However, there > are several macro definitions, such as VA_BITS, VMEMMAP_START, VMEMMAP_END, > MODULES_VADDR, MODULES_END are only available when CONFIG_MMU=y. Then > compiling errors are triggered. > > Here, add CONFIG_MMU ifdeffery in arch_crash_save_vmcoreinfo() to export > those symbols when CONFIG_MMU is enabled. > > Signed-off-by: Baoquan He <bhe@redhat.com> > --- > arch/riscv/kernel/crash_core.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/kernel/crash_core.c b/arch/riscv/kernel/crash_core.c > index 55f1d7856b54..8706736fd4e2 100644 > --- a/arch/riscv/kernel/crash_core.c > +++ b/arch/riscv/kernel/crash_core.c > @@ -5,17 +5,19 @@ > > void arch_crash_save_vmcoreinfo(void) > { > - VMCOREINFO_NUMBER(VA_BITS); > VMCOREINFO_NUMBER(phys_ram_base); > > vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", PAGE_OFFSET); > vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); > vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END); > +#ifdef CONFIG_MMU > + VMCOREINFO_NUMBER(VA_BITS); > vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); > vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); > #ifdef CONFIG_64BIT > vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); > vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); > +#endif > #endif > vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); > vmcoreinfo_append_str("NUMBER(va_kernel_pa_offset)=0x%lx\n", Both riscv 32-bit and 64-bit complain: ../arch/riscv/kernel/crash_core.c: In function 'arch_crash_save_vmcoreinfo': ../arch/riscv/kernel/crash_core.c:11:58: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int' [-Wformat=] 11 | vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); | ~~^ | | | long unsigned int | %x Otherwise this builds without failure. Tested-by: Randy Dunlap <rdunlap@infradead.org> # build-tested Thanks.
On 12/04/23 at 11:14am, Randy Dunlap wrote: ...... > > --- > > arch/riscv/kernel/crash_core.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/arch/riscv/kernel/crash_core.c b/arch/riscv/kernel/crash_core.c > > index 55f1d7856b54..8706736fd4e2 100644 > > --- a/arch/riscv/kernel/crash_core.c > > +++ b/arch/riscv/kernel/crash_core.c > > @@ -5,17 +5,19 @@ > > > > void arch_crash_save_vmcoreinfo(void) > > { > > - VMCOREINFO_NUMBER(VA_BITS); > > VMCOREINFO_NUMBER(phys_ram_base); > > > > vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", PAGE_OFFSET); > > vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); > > vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END); > > +#ifdef CONFIG_MMU > > + VMCOREINFO_NUMBER(VA_BITS); > > vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); > > vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); > > #ifdef CONFIG_64BIT > > vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); > > vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); > > +#endif > > #endif > > vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); > > vmcoreinfo_append_str("NUMBER(va_kernel_pa_offset)=0x%lx\n", > > Both riscv 32-bit and 64-bit complain: > > ../arch/riscv/kernel/crash_core.c: In function 'arch_crash_save_vmcoreinfo': > ../arch/riscv/kernel/crash_core.c:11:58: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int' [-Wformat=] > 11 | vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); > | ~~^ > | | > | long unsigned int > | %x Thanks for all these testing. This warning is irrelevant to the kexec patch, it's becasue VMALLOC_START is defined as 0 which is int when CONFIG_MMU=n. Below patch can fix the warning. From 46984a0287e5f1b41ae3e9adfcfa0d26b71db8f4 Mon Sep 17 00:00:00 2001 From: Baoquan He <bhe@redhat.com> Date: Tue, 5 Dec 2023 11:02:55 +0800 Subject: [PATCH] riscv: fix VMALLC_START definition Content-type: text/plain When below config items are set, compiler complained: -------------------- CONFIG_CRASH_CORE=y CONFIG_KEXEC_CORE=y CONFIG_CRASH_DUMP=y ...... ----------------------- ------------------------------------------------------------------- arch/riscv/kernel/crash_core.c: In function 'arch_crash_save_vmcoreinfo': arch/riscv/kernel/crash_core.c:11:58: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int' [-Wformat=] 11 | vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); | ~~^ | | | long unsigned int | %x ---------------------------------------------------------------------- This is because on riscv macro VMALLOC_START has different type when CONFIG_MMU is set or unset. arch/riscv/include/asm/pgtable.h: -------------------------------------------------- Changing it to _AC(0, UL) in case CONFIG_MMU=n can fix the warning. Signed-off-by: Baoquan He <bhe@redhat.com> --- arch/riscv/include/asm/pgtable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index 294044429e8e..ab00235b018f 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -899,7 +899,7 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte) #define PAGE_KERNEL __pgprot(0) #define swapper_pg_dir NULL #define TASK_SIZE 0xffffffffUL -#define VMALLOC_START 0 +#define VMALLOC_START _AC(0, UL) #define VMALLOC_END TASK_SIZE #endif /* !CONFIG_MMU */
On 12/4/23 23:18, Baoquan He wrote: > On 12/04/23 at 11:14am, Randy Dunlap wrote: [] >> >> Both riscv 32-bit and 64-bit complain: >> >> ../arch/riscv/kernel/crash_core.c: In function 'arch_crash_save_vmcoreinfo': >> ../arch/riscv/kernel/crash_core.c:11:58: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int' [-Wformat=] >> 11 | vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); >> | ~~^ >> | | >> | long unsigned int >> | %x > > Thanks for all these testing. > > This warning is irrelevant to the kexec patch, it's becasue > VMALLOC_START is defined as 0 which is int when CONFIG_MMU=n. > > Below patch can fix the warning. > > From 46984a0287e5f1b41ae3e9adfcfa0d26b71db8f4 Mon Sep 17 00:00:00 2001 > From: Baoquan He <bhe@redhat.com> > Date: Tue, 5 Dec 2023 11:02:55 +0800 > Subject: [PATCH] riscv: fix VMALLC_START definition > Content-type: text/plain > > When below config items are set, compiler complained: > > -------------------- > CONFIG_CRASH_CORE=y > CONFIG_KEXEC_CORE=y > CONFIG_CRASH_DUMP=y > ...... > ----------------------- > > ------------------------------------------------------------------- > arch/riscv/kernel/crash_core.c: In function 'arch_crash_save_vmcoreinfo': > arch/riscv/kernel/crash_core.c:11:58: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int' [-Wformat=] > 11 | vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); > | ~~^ > | | > | long unsigned int > | %x > ---------------------------------------------------------------------- > > This is because on riscv macro VMALLOC_START has different type when > CONFIG_MMU is set or unset. > > arch/riscv/include/asm/pgtable.h: > -------------------------------------------------- > > Changing it to _AC(0, UL) in case CONFIG_MMU=n can fix the warning. > > Signed-off-by: Baoquan He <bhe@redhat.com> Reported-by: Randy Dunlap <rdunlap@infradead.org> Acked-by: Randy Dunlap <rdunlap@infradead.org> Tested-by: Randy Dunlap <rdunlap@infradead.org> # build-tested Thanks. > --- > arch/riscv/include/asm/pgtable.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > index 294044429e8e..ab00235b018f 100644 > --- a/arch/riscv/include/asm/pgtable.h > +++ b/arch/riscv/include/asm/pgtable.h > @@ -899,7 +899,7 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte) > #define PAGE_KERNEL __pgprot(0) > #define swapper_pg_dir NULL > #define TASK_SIZE 0xffffffffUL > -#define VMALLOC_START 0 > +#define VMALLOC_START _AC(0, UL) > #define VMALLOC_END TASK_SIZE > > #endif /* !CONFIG_MMU */
Hello: This series was applied to riscv/linux.git (fixes) by Andrew Morton <akpm@linux-foundation.org>: On Mon, 4 Dec 2023 10:19:36 +0800 you wrote: > When dropping select of KEXEC and dependency on ARCH_SUPPORTS_KEXEC > from CRASH_DUMP, compiling error is reported when below config items are > set: > ----------------------- > CONFIG_CRASH_CORE=y > CONFIG_KEXEC_CORE=y > CONFIG_CRASH_DUMP=y > ...... > > [...] Here is the summary with links: - [1/2] riscv, crash: don't export some symbols when CONFIG_MMU=n https://git.kernel.org/riscv/c/c41bd2514184 - [2/2] riscv, kexec: fix dependency of two items (no matching commit) You are awesome, thank you!
diff --git a/arch/riscv/kernel/crash_core.c b/arch/riscv/kernel/crash_core.c index 55f1d7856b54..8706736fd4e2 100644 --- a/arch/riscv/kernel/crash_core.c +++ b/arch/riscv/kernel/crash_core.c @@ -5,17 +5,19 @@ void arch_crash_save_vmcoreinfo(void) { - VMCOREINFO_NUMBER(VA_BITS); VMCOREINFO_NUMBER(phys_ram_base); vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", PAGE_OFFSET); vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END); +#ifdef CONFIG_MMU + VMCOREINFO_NUMBER(VA_BITS); vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); #ifdef CONFIG_64BIT vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); +#endif #endif vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); vmcoreinfo_append_str("NUMBER(va_kernel_pa_offset)=0x%lx\n",
When dropping select of KEXEC and dependency on ARCH_SUPPORTS_KEXEC from CRASH_DUMP, compiling error is reported when below config items are set: ----------------------- CONFIG_CRASH_CORE=y CONFIG_KEXEC_CORE=y CONFIG_CRASH_DUMP=y ...... ----------------------- ------------------------------------------------------------------------------------------------- arch/riscv/kernel/crash_core.c:8:27: error: 'VA_BITS' undeclared (first use in this function) 8 | VMCOREINFO_NUMBER(VA_BITS); | ^~~~~~~ include/linux/crash_core.h:78:64: note: in definition of macro 'VMCOREINFO_NUMBER' 78 | vmcoreinfo_append_str("NUMBER(%s)=%ld\n", #name, (long)name) | ^~~~ arch/riscv/kernel/crash_core.c:14:64: error: 'VMEMMAP_START' undeclared (first use in this function) 14 | vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); | ^~~~~~~~~~~~~ arch/riscv/kernel/crash_core.c:15:62: error: 'VMEMMAP_END' undeclared (first use in this function); did you mean 'MEMREMAP_ENC'? 15 | vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); | ^~~~~~~~~~~ | MEMREMAP_ENC arch/riscv/kernel/crash_core.c:17:64: error: 'MODULES_VADDR' undeclared (first use in this function) 17 | vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); | ^~~~~~~~~~~~~ arch/riscv/kernel/crash_core.c:18:62: error: 'MODULES_END' undeclared (first use in this function) 18 | vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); ------------------------------------------------------------------------------------------------- Currently, riscv's ARCH_SUPPORTS_KEXEC has dependency on MMU. Before dropping ARCH_SUPPORTS_KEXEC, disabling CONFIG_MMU will unset CONFIG_CRASH_DUMP, CONFIG_KEXEC_CORE, CONFIG_CRASH_CORE. Hence crash_core related codes won't be compiled. --------------------- arch/riscv/Kconfig: config ARCH_SUPPORTS_KEXEC def_bool MMU --------------------- After dropping ARCH_SUPPORTS_KEXEC, CONFIG_CRASH_DUMP, CONFIG_KEXEC_CORE, CONFIG_CRASH_CORE can be set independently of CONFIG_MMU. However, there are several macro definitions, such as VA_BITS, VMEMMAP_START, VMEMMAP_END, MODULES_VADDR, MODULES_END are only available when CONFIG_MMU=y. Then compiling errors are triggered. Here, add CONFIG_MMU ifdeffery in arch_crash_save_vmcoreinfo() to export those symbols when CONFIG_MMU is enabled. Signed-off-by: Baoquan He <bhe@redhat.com> --- arch/riscv/kernel/crash_core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)