Message ID | 5439a181cdd7ba185d55457200ddda2d2efa5eb1.1715286093.git.namcao@linutronix.de (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | remove size limit on XIP kernel | expand |
Context | Check | Description |
---|---|---|
conchuod/vmtest-fixes-PR | fail | merge-conflict |
On 10/05/2024 08:28, Nam Cao wrote: > XIP_OFFSET is the hard-coded offset of writable data section within the > kernel. > > By hard-coding this value, the read-only section of the kernel (which is > placed before the writable data section) is restricted in size. > > As a preparation to remove this hard-coded macro XIP_OFFSET entirely, > remove the use of XIP_OFFSET in kernel_mapping_va_to_pa(). The macro > XIP_OFFSET is used in this case to check if the virtual address is mapped > to Flash or to RAM. The same check can be done with kernel_map.xiprom_sz. > > Signed-off-by: Nam Cao <namcao@linutronix.de> > --- > arch/riscv/include/asm/page.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h > index 14d0de928f9b..bcd77df15835 100644 > --- a/arch/riscv/include/asm/page.h > +++ b/arch/riscv/include/asm/page.h > @@ -159,7 +159,7 @@ phys_addr_t linear_mapping_va_to_pa(unsigned long x); > #ifdef CONFIG_XIP_KERNEL > #define kernel_mapping_va_to_pa(y) ({ \ > unsigned long _y = (unsigned long)(y); \ > - (_y < kernel_map.virt_addr + XIP_OFFSET) ? \ > + (_y < kernel_map.virt_addr + kernel_map.xiprom_sz) ? \ > (_y - kernel_map.va_kernel_xip_pa_offset) : \ > (_y - kernel_map.va_kernel_data_pa_offset); \ > }) Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com> Thanks, Alex
diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h index 14d0de928f9b..bcd77df15835 100644 --- a/arch/riscv/include/asm/page.h +++ b/arch/riscv/include/asm/page.h @@ -159,7 +159,7 @@ phys_addr_t linear_mapping_va_to_pa(unsigned long x); #ifdef CONFIG_XIP_KERNEL #define kernel_mapping_va_to_pa(y) ({ \ unsigned long _y = (unsigned long)(y); \ - (_y < kernel_map.virt_addr + XIP_OFFSET) ? \ + (_y < kernel_map.virt_addr + kernel_map.xiprom_sz) ? \ (_y - kernel_map.va_kernel_xip_pa_offset) : \ (_y - kernel_map.va_kernel_data_pa_offset); \ })
XIP_OFFSET is the hard-coded offset of writable data section within the kernel. By hard-coding this value, the read-only section of the kernel (which is placed before the writable data section) is restricted in size. As a preparation to remove this hard-coded macro XIP_OFFSET entirely, remove the use of XIP_OFFSET in kernel_mapping_va_to_pa(). The macro XIP_OFFSET is used in this case to check if the virtual address is mapped to Flash or to RAM. The same check can be done with kernel_map.xiprom_sz. Signed-off-by: Nam Cao <namcao@linutronix.de> --- arch/riscv/include/asm/page.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)