Remove duplicating code, by using common functions
vmemmap_pud_populate and vmemmap_pgd_populate functions.

Signed-off-by: Pavel Tatashin <pasha.tatas...@oracle.com>
Reviewed-by: Shannon Nelson <shannon.nel...@oracle.com>
---
 arch/sparc/mm/init_64.c |   23 ++++++-----------------
 1 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 2c0cb2a..01eccab 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2526,30 +2526,19 @@ int __meminit vmemmap_populate(unsigned long vstart, 
unsigned long vend,
        vstart = vstart & PMD_MASK;
        vend = ALIGN(vend, PMD_SIZE);
        for (; vstart < vend; vstart += PMD_SIZE) {
-               pgd_t *pgd = pgd_offset_k(vstart);
+               pgd_t *pgd = vmemmap_pgd_populate(vstart, node);
                unsigned long pte;
                pud_t *pud;
                pmd_t *pmd;
 
-               if (pgd_none(*pgd)) {
-                       pud_t *new = vmemmap_alloc_block(PAGE_SIZE, node);
+               if (!pgd)
+                       return -ENOMEM;
 
-                       if (!new)
-                               return -ENOMEM;
-                       pgd_populate(&init_mm, pgd, new);
-               }
-
-               pud = pud_offset(pgd, vstart);
-               if (pud_none(*pud)) {
-                       pmd_t *new = vmemmap_alloc_block(PAGE_SIZE, node);
-
-                       if (!new)
-                               return -ENOMEM;
-                       pud_populate(&init_mm, pud, new);
-               }
+               pud = vmemmap_pud_populate(pgd, vstart, node);
+               if (!pud)
+                       return -ENOMEM;
 
                pmd = pmd_offset(pud, vstart);
-
                pte = pmd_val(*pmd);
                if (!(pte & _PAGE_VALID)) {
                        void *block = vmemmap_alloc_block(PMD_SIZE, node);
-- 
1.7.1

Reply via email to