Message ID | 20200102031240.44484-3-zong.li@sifive.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | riscv: mm: add support for CONFIG_DEBUG_VIRTUAL | expand |
On Thu, Jan 2, 2020 at 8:42 AM Zong Li <zong.li@sifive.com> wrote: > > __pa_symbol is the marcro that should be used for kernel symbols. It is > also a pre-requisite for DEBUG_VIRTUAL which will do bounds checking. > > Signed-off-by: Zong Li <zong.li@sifive.com> > --- > arch/riscv/mm/init.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index 69f6678db7f3..965a8cf4829c 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -99,13 +99,13 @@ static void __init setup_initrd(void) > pr_info("initrd not found or empty"); > goto disable; > } > - if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { > + if (__pa_symbol(initrd_end) > PFN_PHYS(max_low_pfn)) { > pr_err("initrd extends beyond end of memory"); > goto disable; > } > > size = initrd_end - initrd_start; > - memblock_reserve(__pa(initrd_start), size); > + memblock_reserve(__pa_symbol(initrd_start), size); > initrd_below_start_ok = 1; > > pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n", > @@ -124,8 +124,8 @@ void __init setup_bootmem(void) > { > struct memblock_region *reg; > phys_addr_t mem_size = 0; > - phys_addr_t vmlinux_end = __pa(&_end); > - phys_addr_t vmlinux_start = __pa(&_start); > + phys_addr_t vmlinux_end = __pa_symbol(&_end); > + phys_addr_t vmlinux_start = __pa_symbol(&_start); > > /* Find the memory region containing the kernel */ > for_each_memblock(memory, reg) { > @@ -445,7 +445,7 @@ static void __init setup_vm_final(void) > > /* Setup swapper PGD for fixmap */ > create_pgd_mapping(swapper_pg_dir, FIXADDR_START, > - __pa(fixmap_pgd_next), > + __pa_symbol(fixmap_pgd_next), > PGDIR_SIZE, PAGE_TABLE); > > /* Map all memory banks */ > @@ -474,7 +474,7 @@ static void __init setup_vm_final(void) > clear_fixmap(FIX_PMD); > > /* Move to swapper page table */ > - csr_write(CSR_SATP, PFN_DOWN(__pa(swapper_pg_dir)) | SATP_MODE); > + csr_write(CSR_SATP, PFN_DOWN(__pa_symbol(swapper_pg_dir)) | SATP_MODE); > local_flush_tlb_all(); > } > #else > -- > 2.24.1 > Overall looks good to me. Reviewed-by: Anup Patel <anup@brainfault.org> I have not tried this patch but can you confirm that __pa_symbol() works fine even when DEBUG_VIRTUAL=n Regards, Anup
On Thu, Jan 2, 2020 at 11:32 AM Anup Patel <anup@brainfault.org> wrote: > > On Thu, Jan 2, 2020 at 8:42 AM Zong Li <zong.li@sifive.com> wrote: > > > > __pa_symbol is the marcro that should be used for kernel symbols. It is > > also a pre-requisite for DEBUG_VIRTUAL which will do bounds checking. > > > > Signed-off-by: Zong Li <zong.li@sifive.com> > > --- > > arch/riscv/mm/init.c | 12 ++++++------ > > 1 file changed, 6 insertions(+), 6 deletions(-) > > > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > > index 69f6678db7f3..965a8cf4829c 100644 > > --- a/arch/riscv/mm/init.c > > +++ b/arch/riscv/mm/init.c > > @@ -99,13 +99,13 @@ static void __init setup_initrd(void) > > pr_info("initrd not found or empty"); > > goto disable; > > } > > - if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { > > + if (__pa_symbol(initrd_end) > PFN_PHYS(max_low_pfn)) { > > pr_err("initrd extends beyond end of memory"); > > goto disable; > > } > > > > size = initrd_end - initrd_start; > > - memblock_reserve(__pa(initrd_start), size); > > + memblock_reserve(__pa_symbol(initrd_start), size); > > initrd_below_start_ok = 1; > > > > pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n", > > @@ -124,8 +124,8 @@ void __init setup_bootmem(void) > > { > > struct memblock_region *reg; > > phys_addr_t mem_size = 0; > > - phys_addr_t vmlinux_end = __pa(&_end); > > - phys_addr_t vmlinux_start = __pa(&_start); > > + phys_addr_t vmlinux_end = __pa_symbol(&_end); > > + phys_addr_t vmlinux_start = __pa_symbol(&_start); > > > > /* Find the memory region containing the kernel */ > > for_each_memblock(memory, reg) { > > @@ -445,7 +445,7 @@ static void __init setup_vm_final(void) > > > > /* Setup swapper PGD for fixmap */ > > create_pgd_mapping(swapper_pg_dir, FIXADDR_START, > > - __pa(fixmap_pgd_next), > > + __pa_symbol(fixmap_pgd_next), > > PGDIR_SIZE, PAGE_TABLE); > > > > /* Map all memory banks */ > > @@ -474,7 +474,7 @@ static void __init setup_vm_final(void) > > clear_fixmap(FIX_PMD); > > > > /* Move to swapper page table */ > > - csr_write(CSR_SATP, PFN_DOWN(__pa(swapper_pg_dir)) | SATP_MODE); > > + csr_write(CSR_SATP, PFN_DOWN(__pa_symbol(swapper_pg_dir)) | SATP_MODE); > > local_flush_tlb_all(); > > } > > #else > > -- > > 2.24.1 > > > > Overall looks good to me. > > Reviewed-by: Anup Patel <anup@brainfault.org> > > I have not tried this patch but can you confirm that > __pa_symbol() works fine even when DEBUG_VIRTUAL=n Yes, it works fine through original way when DEBUG_VIRTUAL is not set. > > Regards, > Anup
On Thu, 2 Jan 2020, Zong Li wrote: > __pa_symbol is the marcro that should be used for kernel symbols. It is > also a pre-requisite for DEBUG_VIRTUAL which will do bounds checking. > > Signed-off-by: Zong Li <zong.li@sifive.com> Thanks, queued for v5.5-rc. - Paul
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 69f6678db7f3..965a8cf4829c 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -99,13 +99,13 @@ static void __init setup_initrd(void) pr_info("initrd not found or empty"); goto disable; } - if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { + if (__pa_symbol(initrd_end) > PFN_PHYS(max_low_pfn)) { pr_err("initrd extends beyond end of memory"); goto disable; } size = initrd_end - initrd_start; - memblock_reserve(__pa(initrd_start), size); + memblock_reserve(__pa_symbol(initrd_start), size); initrd_below_start_ok = 1; pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n", @@ -124,8 +124,8 @@ void __init setup_bootmem(void) { struct memblock_region *reg; phys_addr_t mem_size = 0; - phys_addr_t vmlinux_end = __pa(&_end); - phys_addr_t vmlinux_start = __pa(&_start); + phys_addr_t vmlinux_end = __pa_symbol(&_end); + phys_addr_t vmlinux_start = __pa_symbol(&_start); /* Find the memory region containing the kernel */ for_each_memblock(memory, reg) { @@ -445,7 +445,7 @@ static void __init setup_vm_final(void) /* Setup swapper PGD for fixmap */ create_pgd_mapping(swapper_pg_dir, FIXADDR_START, - __pa(fixmap_pgd_next), + __pa_symbol(fixmap_pgd_next), PGDIR_SIZE, PAGE_TABLE); /* Map all memory banks */ @@ -474,7 +474,7 @@ static void __init setup_vm_final(void) clear_fixmap(FIX_PMD); /* Move to swapper page table */ - csr_write(CSR_SATP, PFN_DOWN(__pa(swapper_pg_dir)) | SATP_MODE); + csr_write(CSR_SATP, PFN_DOWN(__pa_symbol(swapper_pg_dir)) | SATP_MODE); local_flush_tlb_all(); } #else
__pa_symbol is the marcro that should be used for kernel symbols. It is also a pre-requisite for DEBUG_VIRTUAL which will do bounds checking. Signed-off-by: Zong Li <zong.li@sifive.com> --- arch/riscv/mm/init.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)