Messages in this thread |  | | From | Zong Li <> | Date | Wed, 17 Jun 2020 09:23:37 +0800 | Subject | Re: [PATCH 1/2] riscv: Register System RAM as iomem resources |
| |
On Tue, Jun 16, 2020 at 7:52 PM Nick Kossifidis <mick@ics.forth.gr> wrote: > > Στις 2020-06-16 10:45, Zong Li έγραψε: > > Add System RAM to /proc/iomem, various tools expect it such as kdump. > > It is also needed for page_is_ram API which checks the specified > > address > > whether registered as System RAM in iomem_resource list. > > > > Signed-off-by: Zong Li <zong.li@sifive.com> > > --- > > arch/riscv/mm/init.c | 22 ++++++++++++++++++++++ > > 1 file changed, 22 insertions(+) > > > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > > index f4adb3684f3d..bbe816e03b2f 100644 > > --- a/arch/riscv/mm/init.c > > +++ b/arch/riscv/mm/init.c > > @@ -517,6 +517,27 @@ void mark_rodata_ro(void) > > } > > #endif > > > > +void __init resource_init(void) > > +{ > > + struct memblock_region *region; > > + > > + for_each_memblock(memory, region) { > > + struct resource *res; > > + > > + res = memblock_alloc(sizeof(struct resource), SMP_CACHE_BYTES); > > + if (!res) > > + panic("%s: Failed to allocate %zu bytes\n", __func__, > > + sizeof(struct resource)); > > + > > + res->name = "System RAM"; > > + res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); > > + res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - > > 1; > > + res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; > > + > > + request_resource(&iomem_resource, res); > > + } > > +} > > + > > void __init paging_init(void) > > { > > setup_vm_final(); > > @@ -524,6 +545,7 @@ void __init paging_init(void) > > sparse_init(); > > setup_zero_page(); > > zone_sizes_init(); > > + resource_init(); > > } > > > > #ifdef CONFIG_SPARSEMEM_VMEMMAP > > > I already have a patch for registering System RAM as an iomem resource > on my kexec/kdump series. Since I don't care about System RAM regions > being accurately exposed to userspace (I parse the current device tree > instead) I just use memblock_start_of_DRAM/end_of_DRAM. This approach > from arm64 codebase is better since it also handles the case of sparse > memory regions but in order to be useful for kdump we need to add the > various segments of the kernel image as child nodes to their respective > region for kexec-tools. I'll re-spin my patchset anyway so I'll extend > it to better handle System RAM regions.
OK, great, I would remove this patch here and only reserve the second patch in the next version.
|  |