Re: [PATCH 1/2] riscv: Register System RAM as iomem resources

From: Zong Li
Date: Tue Jun 16 2020 - 21:23:53 EST


On Tue, Jun 16, 2020 at 7:52 PM Nick Kossifidis <mick@xxxxxxxxxxxx> 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@xxxxxxxxxx>
> > ---
> > 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.