Στις 2020-07-09 21:27, Palmer Dabbelt έγραψε:
On Tue, 16 Jun 2020 00:45:46 PDT (-0700), [email protected] wrote:
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 <[email protected]>
---
 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;

Looks like everyone else is checking MEMBLOCK_NOMAP before registering memory
regions.  I've added that and put this on for-next.  Thanks!

commit 11dc632bf515874c84887727614e8044452f1f28
gpg: Signature made Thu 09 Jul 2020 11:24:08 AM PDT
gpg: using RSA key 2B3C3747446843B24A943A7A2E1319F35FBB1889
gpg:                issuer "[email protected]"
gpg: Good signature from "Palmer Dabbelt <[email protected]>" [ultimate] gpg: aka "Palmer Dabbelt <[email protected]>" [ultimate]
Author: Zong Li <[email protected]>
Date:   Tue Jun 16 15:45:46 2020 +0800

   riscv: Register System RAM as iomem resources
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 <[email protected]>
   [Palmer: check MEMBLOCK_NOMAP]
   Signed-off-by: Palmer Dabbelt <[email protected]>

diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index f4adb3684f3d..8b78fd23713e 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -517,6 +517,32 @@ 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));
+
+               if (memblock_is_nomap(region) {
+                       res->name = "reserved";
+                       res->flags = IORESOURCE_MEM;
+               } else {
+                       res->name = "System RAM";
+                       res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
+               }
+               res->start = 
__pfn_to_phys(memblock_region_memory_base_pfn(region));
+ res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
+
+               request_resource(&iomem_resource, res);
+       }
+}
+
void __init paging_init(void)
{
        setup_vm_final();
@@ -524,6 +550,7 @@ void __init paging_init(void)
        sparse_init();
        setup_zero_page();
        zone_sizes_init();
+       resource_init();
}

#ifdef CONFIG_SPARSEMEM_VMEMMAP


+
+               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

_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv

Zong Li sent a newer version of this series without this patch, since I'm handling this on the kexec/kdump series as well where other sections needed for kdump are also registered.

Reply via email to