Loading arch/arm64/mm/mmu.c +12 −3 Original line number Diff line number Diff line Loading @@ -1145,6 +1145,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) pgd_t *pgd; pud_t *pud; pmd_t *pmd; int ret = 0; do { next = pmd_addr_end(addr, end); Loading @@ -1162,15 +1163,23 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node); if (!p) return -ENOMEM; if (!p) { #ifdef CONFIG_MEMORY_HOTPLUG vmemmap_free(start, end); #endif ret = -ENOMEM; break; } set_pmd(pmd, __pmd(__pa(p) | PROT_SECT_NORMAL)); } else vmemmap_verify((pte_t *)pmd, node, addr, next); } while (addr = next, addr != end); return 0; if (ret) return vmemmap_populate_basepages(start, end, node); else return ret; } #endif /* CONFIG_ARM64_64K_PAGES */ void vmemmap_free(unsigned long start, unsigned long end) Loading Loading
arch/arm64/mm/mmu.c +12 −3 Original line number Diff line number Diff line Loading @@ -1145,6 +1145,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) pgd_t *pgd; pud_t *pud; pmd_t *pmd; int ret = 0; do { next = pmd_addr_end(addr, end); Loading @@ -1162,15 +1163,23 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node); if (!p) return -ENOMEM; if (!p) { #ifdef CONFIG_MEMORY_HOTPLUG vmemmap_free(start, end); #endif ret = -ENOMEM; break; } set_pmd(pmd, __pmd(__pa(p) | PROT_SECT_NORMAL)); } else vmemmap_verify((pte_t *)pmd, node, addr, next); } while (addr = next, addr != end); return 0; if (ret) return vmemmap_populate_basepages(start, end, node); else return ret; } #endif /* CONFIG_ARM64_64K_PAGES */ void vmemmap_free(unsigned long start, unsigned long end) Loading