Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fe9ef9b authored by Arun KS's avatar Arun KS
Browse files

arm64: Add fallback option during memory hot add



Section mapping is good for TLB. But sometimes, when
system is low on physically continuous memory, this can
cause memory allocation failures. Add a fallback option to
allocate vmemmap pages from discontinuous pages.

Change-Id: Ide921c36c1e8980a8af047e2c991310405804858
Signed-off-by: default avatarArun KS <arunks@codeaurora.org>
Signed-off-by: default avatarVinayak Menon <vinmenon@codeaurora.org>
parent ea4e70e7
Loading
Loading
Loading
Loading
+12 −3
Original line number Original line Diff line number Diff line
@@ -1073,6 +1073,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
	pgd_t *pgd;
	pgd_t *pgd;
	pud_t *pud;
	pud_t *pud;
	pmd_t *pmd;
	pmd_t *pmd;
	int ret = 0;


	do {
	do {
		next = pmd_addr_end(addr, end);
		next = pmd_addr_end(addr, end);
@@ -1090,15 +1091,23 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
			void *p = NULL;
			void *p = NULL;


			p = vmemmap_alloc_block_buf(PMD_SIZE, node);
			p = vmemmap_alloc_block_buf(PMD_SIZE, node);
			if (!p)
			if (!p) {
				return -ENOMEM;
#ifdef CONFIG_MEMORY_HOTPLUG
				vmemmap_free(start, end);
#endif
				ret = -ENOMEM;
				break;
			}


			set_pmd(pmd, __pmd(__pa(p) | PROT_SECT_NORMAL));
			set_pmd(pmd, __pmd(__pa(p) | PROT_SECT_NORMAL));
		} else
		} else
			vmemmap_verify((pte_t *)pmd, node, addr, next);
			vmemmap_verify((pte_t *)pmd, node, addr, next);
	} while (addr = next, addr != end);
	} while (addr = next, addr != end);


	return 0;
	if (ret)
		return vmemmap_populate_basepages(start, end, node);
	else
		return ret;
}
}
#endif	/* CONFIG_ARM64_64K_PAGES */
#endif	/* CONFIG_ARM64_64K_PAGES */
void vmemmap_free(unsigned long start, unsigned long end)
void vmemmap_free(unsigned long start, unsigned long end)