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

Commit f55575a6 authored by Arun KS's avatar Arun KS Committed by Swathi Sridhar
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>
Signed-off-by: default avatarSudarshan Rajagopalan <sudaraja@codeaurora.org>
[swatsrid@codeaurora.org: Fix merge conflicts]
Signed-off-by: default avatarSwathi Sridhar <swatsrid@codeaurora.org>
parent fd2f5e0c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -1159,6 +1159,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
	pgd_t *pgdp;
	pud_t *pudp;
	pmd_t *pmdp;
	int ret = 0;

	do {
		next = pmd_addr_end(addr, end);
@@ -1176,15 +1177,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;
			}

			pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL));
		} else
			vmemmap_verify((pte_t *)pmdp, 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,