The structure to track single virtual to physical mapping has
been renamed from vmemmap_backing to vmemmap_hw_map which sounds
more appropriate. This forms a single entry of the global linked
list tracking all of the vmemmap physical mapping. The changes
are as follows.

        vmemmap_backing.list -> vmemmap_hw_map.link
        vmemmap_backing.phys -> vmemmap_hw_map.paddr
        vmemmap_backing.virt_addr -> vmemmap_hw_map.vaddr

Signed-off-by: Anshuman Khandual <khand...@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/pgalloc-64.h | 16 +++++++---
 arch/powerpc/kernel/machine_kexec.c   |  8 ++---
 arch/powerpc/mm/init_64.c             | 58 +++++++++++++++++------------------
 3 files changed, 44 insertions(+), 38 deletions(-)

diff --git a/arch/powerpc/include/asm/pgalloc-64.h 
b/arch/powerpc/include/asm/pgalloc-64.h
index 69ef28a..e03b41c 100644
--- a/arch/powerpc/include/asm/pgalloc-64.h
+++ b/arch/powerpc/include/asm/pgalloc-64.h
@@ -11,12 +11,18 @@
 #include <linux/cpumask.h>
 #include <linux/percpu.h>
 
-struct vmemmap_backing {
-       struct vmemmap_backing *list;
-       unsigned long phys;
-       unsigned long virt_addr;
+/*
+ * This structure tracks a single virtual page mapping from
+ * the vmemmap ddress space. This element is required to
+ * track virtual to physical mapping of page structures in
+ * absense of a page table at boot time.
+ */
+struct vmemmap_hw_map {
+       struct vmemmap_hw_map *link;
+       unsigned long paddr;
+       unsigned long vaddr;
 };
-extern struct vmemmap_backing *vmemmap_list;
+extern struct vmemmap_hw_map *vmemmap_list;
 
 /*
  * Functions that deal with pagetables that could be at any level of
diff --git a/arch/powerpc/kernel/machine_kexec.c 
b/arch/powerpc/kernel/machine_kexec.c
index 015ae55..0d90798 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -80,10 +80,10 @@ void arch_crash_save_vmcoreinfo(void)
        VMCOREINFO_SYMBOL(vmemmap_list);
        VMCOREINFO_SYMBOL(mmu_vmemmap_psize);
        VMCOREINFO_SYMBOL(mmu_psize_defs);
-       VMCOREINFO_STRUCT_SIZE(vmemmap_backing);
-       VMCOREINFO_OFFSET(vmemmap_backing, list);
-       VMCOREINFO_OFFSET(vmemmap_backing, phys);
-       VMCOREINFO_OFFSET(vmemmap_backing, virt_addr);
+       VMCOREINFO_STRUCT_SIZE(vmemmap_hw_map);
+       VMCOREINFO_OFFSET(vmemmap_hw_map, link);
+       VMCOREINFO_OFFSET(vmemmap_hw_map, paddr);
+       VMCOREINFO_OFFSET(vmemmap_hw_map, vaddr);
        VMCOREINFO_STRUCT_SIZE(mmu_psize_def);
        VMCOREINFO_OFFSET(mmu_psize_def, shift);
 #endif
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index d6b9b4d..9b5dea3 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -194,7 +194,7 @@ static int __meminit vmemmap_populated(unsigned long start, 
int page_size)
 #ifdef CONFIG_PPC_BOOK3E
 static void __meminit vmemmap_create_mapping(unsigned long start,
                                             unsigned long page_size,
-                                            unsigned long phys)
+                                            unsigned long paddr)
 {
        /* Create a PTE encoding without page size */
        unsigned long i, flags = _PAGE_PRESENT | _PAGE_ACCESSED |
@@ -207,11 +207,11 @@ static void __meminit vmemmap_create_mapping(unsigned 
long start,
        flags |= mmu_psize_defs[mmu_vmemmap_psize].enc << 8;
 
        /* For each PTE for that area, map things. Note that we don't
-        * increment phys because all PTEs are of the large size and
+        * increment paddr because all PTEs are of the large size and
         * thus must have the low bits clear
         */
        for (i = 0; i < page_size; i += PAGE_SIZE)
-               BUG_ON(map_kernel_page(start + i, phys, flags));
+               BUG_ON(map_kernel_page(start + i, paddr, flags));
 }
 
 #ifdef CONFIG_MEMORY_HOTPLUG
@@ -223,9 +223,9 @@ static void vmemmap_remove_mapping(unsigned long start,
 #else /* CONFIG_PPC_BOOK3E */
 static void __meminit vmemmap_create_mapping(unsigned long start,
                                             unsigned long page_size,
-                                            unsigned long phys)
+                                            unsigned long paddr)
 {
-       int  mapped = htab_bolt_mapping(start, start + page_size, phys,
+       int  mapped = htab_bolt_mapping(start, start + page_size, paddr,
                                        pgprot_val(PAGE_KERNEL),
                                        mmu_vmemmap_psize,
                                        mmu_kernel_ssize);
@@ -245,19 +245,19 @@ static void vmemmap_remove_mapping(unsigned long start,
 
 #endif /* CONFIG_PPC_BOOK3E */
 
-struct vmemmap_backing *vmemmap_list;
-static struct vmemmap_backing *next;
+struct vmemmap_hw_map *vmemmap_list;
+static struct vmemmap_hw_map *next;
 static int num_left;
 static int num_freed;
 
-static __meminit struct vmemmap_backing * vmemmap_list_alloc(int node)
+static __meminit struct vmemmap_hw_map * vmemmap_list_alloc(int node)
 {
-       struct vmemmap_backing *vmem_back;
+       struct vmemmap_hw_map *vmem_back;
        /* get from freed entries first */
        if (num_freed) {
                num_freed--;
                vmem_back = next;
-               next = next->list;
+               next = next->link;
 
                return vmem_back;
        }
@@ -269,7 +269,7 @@ static __meminit struct vmemmap_backing * 
vmemmap_list_alloc(int node)
                        WARN_ON(1);
                        return NULL;
                }
-               num_left = PAGE_SIZE / sizeof(struct vmemmap_backing);
+               num_left = PAGE_SIZE / sizeof(struct vmemmap_hw_map);
        }
 
        num_left--;
@@ -277,11 +277,11 @@ static __meminit struct vmemmap_backing * 
vmemmap_list_alloc(int node)
        return next++;
 }
 
-static __meminit void vmemmap_list_populate(unsigned long phys,
+static __meminit void vmemmap_list_populate(unsigned long paddr,
                                            unsigned long start,
                                            int node)
 {
-       struct vmemmap_backing *vmem_back;
+       struct vmemmap_hw_map *vmem_back;
 
        vmem_back = vmemmap_list_alloc(node);
        if (unlikely(!vmem_back)) {
@@ -289,9 +289,9 @@ static __meminit void vmemmap_list_populate(unsigned long 
phys,
                return;
        }
 
-       vmem_back->phys = phys;
-       vmem_back->virt_addr = start;
-       vmem_back->list = vmemmap_list;
+       vmem_back->paddr = paddr;
+       vmem_back->vaddr = start;
+       vmem_back->link = vmemmap_list;
 
        vmemmap_list = vmem_back;
 }
@@ -329,13 +329,13 @@ int __meminit vmemmap_populate(unsigned long start, 
unsigned long end, int node)
 #ifdef CONFIG_MEMORY_HOTPLUG
 static unsigned long vmemmap_list_free(unsigned long start)
 {
-       struct vmemmap_backing *vmem_back, *vmem_back_prev;
+       struct vmemmap_hw_map *vmem_back, *vmem_back_prev;
 
        vmem_back_prev = vmem_back = vmemmap_list;
 
        /* look for it with prev pointer recorded */
-       for (; vmem_back; vmem_back = vmem_back->list) {
-               if (vmem_back->virt_addr == start)
+       for (; vmem_back; vmem_back = vmem_back->link) {
+               if (vmem_back->vaddr == start)
                        break;
                vmem_back_prev = vmem_back;
        }
@@ -347,16 +347,16 @@ static unsigned long vmemmap_list_free(unsigned long 
start)
 
        /* remove it from vmemmap_list */
        if (vmem_back == vmemmap_list) /* remove head */
-               vmemmap_list = vmem_back->list;
+               vmemmap_list = vmem_back->link;
        else
-               vmem_back_prev->list = vmem_back->list;
+               vmem_back_prev->link = vmem_back->link;
 
        /* next point to this freed entry */
-       vmem_back->list = next;
+       vmem_back->link = next;
        next = vmem_back;
        num_freed++;
 
-       return vmem_back->phys;
+       return vmem_back->paddr;
 }
 
 void __ref vmemmap_free(unsigned long start, unsigned long end)
@@ -427,20 +427,20 @@ void register_page_bootmem_memmap(unsigned long 
section_nr,
  */
 struct page *realmode_pfn_to_page(unsigned long pfn)
 {
-       struct vmemmap_backing *vmem_back;
+       struct vmemmap_hw_map *vmem_back;
        struct page *page;
        unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
        unsigned long pg_va = (unsigned long) pfn_to_page(pfn);
 
-       for (vmem_back = vmemmap_list; vmem_back; vmem_back = vmem_back->list) {
-               if (pg_va < vmem_back->virt_addr)
+       for (vmem_back = vmemmap_list; vmem_back; vmem_back = vmem_back->link) {
+               if (pg_va < vmem_back->vaddr)
                        continue;
 
                /* After vmemmap_list entry free is possible, need check all */
                if ((pg_va + sizeof(struct page)) <=
-                               (vmem_back->virt_addr + page_size)) {
-                       page = (struct page *) (vmem_back->phys + pg_va -
-                               vmem_back->virt_addr);
+                               (vmem_back->vaddr + page_size)) {
+                       page = (struct page *) (vmem_back->paddr + pg_va -
+                               vmem_back->vaddr);
                        return page;
                }
        }
-- 
2.1.0

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to