From: Alex Ghiti <alex@ghiti.fr>
To: gregkh@linuxfoundation.org, jszhang@kernel.org, kernel@esmil.dk,
palmerdabbelt@google.com
Cc: stable@vger.kernel.org
Subject: Re: FAILED: patch "[PATCH] riscv: Get rid of CONFIG_PHYS_RAM_BASE in kernel physical" failed to apply to 5.13-stable tree
Date: Tue, 10 Aug 2021 10:26:31 +0200 [thread overview]
Message-ID: <7728bd11-a1b2-b980-fc71-108187660217@ghiti.fr> (raw)
In-Reply-To: <1628505733235131@kroah.com>
Hi Greg,
Le 9/08/2021 à 12:42, gregkh@linuxfoundation.org a écrit :
>
> The patch below does not apply to the 5.13-stable tree.
I don't know when stable was cc on this patch, this fixes something
introduced in 5.14-rc1, so this is not normal it can't be applied.
Sorry for the noise,
Alex
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.
>
> thanks,
>
> greg k-h
>
> ------------------ original commit in Linus's tree ------------------
>
> From 6d7f91d914bc90a15ebc426440c26081337ceaa1 Mon Sep 17 00:00:00 2001
> From: Alexandre Ghiti <alex@ghiti.fr>
> Date: Wed, 21 Jul 2021 09:59:35 +0200
> Subject: [PATCH] riscv: Get rid of CONFIG_PHYS_RAM_BASE in kernel physical
> address conversion
>
> The usage of CONFIG_PHYS_RAM_BASE for all kernel types was a mistake:
> this value is implementation-specific and this breaks the genericity of
> the RISC-V kernel.
>
> Fix this by introducing a new variable phys_ram_base that holds this
> value at runtime and use it in the kernel physical address conversion
> macro. Since this value is used only for XIP kernels, evaluate it only if
> CONFIG_XIP_KERNEL is set which in addition optimizes this macro for
> standard kernels at compile-time.
>
> Signed-off-by: Alexandre Ghiti <alex@ghiti.fr>
> Tested-by: Emil Renner Berthing <kernel@esmil.dk>
> Reviewed-by: Jisheng Zhang <jszhang@kernel.org>
> Fixes: 44c922572952 ("RISC-V: enable XIP")
> Cc: stable@vger.kernel.org
> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
>
> diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h
> index cca8764aed83..b0ca5058e7ae 100644
> --- a/arch/riscv/include/asm/page.h
> +++ b/arch/riscv/include/asm/page.h
> @@ -103,6 +103,7 @@ struct kernel_mapping {
> };
>
> extern struct kernel_mapping kernel_map;
> +extern phys_addr_t phys_ram_base;
>
> #ifdef CONFIG_64BIT
> #define is_kernel_mapping(x) \
> @@ -113,9 +114,9 @@ extern struct kernel_mapping kernel_map;
> #define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
> #define kernel_mapping_pa_to_va(y) ({ \
> unsigned long _y = y; \
> - (_y >= CONFIG_PHYS_RAM_BASE) ? \
> - (void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET) : \
> - (void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset); \
> + (IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
> + (void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset) : \
> + (void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
> })
> #define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)
>
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index a14bf3910eec..88134cc288d9 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -36,6 +36,9 @@ EXPORT_SYMBOL(kernel_map);
> #define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
> #endif
>
> +phys_addr_t phys_ram_base __ro_after_init;
> +EXPORT_SYMBOL(phys_ram_base);
> +
> #ifdef CONFIG_XIP_KERNEL
> extern char _xiprom[], _exiprom[];
> #endif
> @@ -160,7 +163,7 @@ static void __init setup_bootmem(void)
> phys_addr_t vmlinux_end = __pa_symbol(&_end);
> phys_addr_t vmlinux_start = __pa_symbol(&_start);
> phys_addr_t __maybe_unused max_mapped_addr;
> - phys_addr_t dram_end;
> + phys_addr_t phys_ram_end;
>
> #ifdef CONFIG_XIP_KERNEL
> vmlinux_start = __pa_symbol(&_sdata);
> @@ -181,9 +184,12 @@ static void __init setup_bootmem(void)
> #endif
> memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
>
> - dram_end = memblock_end_of_DRAM();
>
> + phys_ram_end = memblock_end_of_DRAM();
> #ifndef CONFIG_64BIT
> +#ifndef CONFIG_XIP_KERNEL
> + phys_ram_base = memblock_start_of_DRAM();
> +#endif
> /*
> * memblock allocator is not aware of the fact that last 4K bytes of
> * the addressable memory can not be mapped because of IS_ERR_VALUE
> @@ -194,12 +200,12 @@ static void __init setup_bootmem(void)
> * be done in create_kernel_page_table.
> */
> max_mapped_addr = __pa(~(ulong)0);
> - if (max_mapped_addr == (dram_end - 1))
> + if (max_mapped_addr == (phys_ram_end - 1))
> memblock_set_current_limit(max_mapped_addr - 4096);
> #endif
>
> - min_low_pfn = PFN_UP(memblock_start_of_DRAM());
> - max_low_pfn = max_pfn = PFN_DOWN(dram_end);
> + min_low_pfn = PFN_UP(phys_ram_base);
> + max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
>
> dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
> set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
> @@ -558,6 +564,7 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
> kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
> kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
>
> + phys_ram_base = CONFIG_PHYS_RAM_BASE;
> kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
> kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata);
>
>
next prev parent reply other threads:[~2021-08-10 8:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-09 10:42 FAILED: patch "[PATCH] riscv: Get rid of CONFIG_PHYS_RAM_BASE in kernel physical" failed to apply to 5.13-stable tree gregkh
2021-08-10 8:26 ` Alex Ghiti [this message]
2021-08-10 9:35 ` Greg KH
2021-08-10 15:07 ` Palmer Dabbelt
2021-08-10 20:14 ` Alex Ghiti
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=7728bd11-a1b2-b980-fc71-108187660217@ghiti.fr \
--to=alex@ghiti.fr \
--cc=gregkh@linuxfoundation.org \
--cc=jszhang@kernel.org \
--cc=kernel@esmil.dk \
--cc=palmerdabbelt@google.com \
--cc=stable@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).