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

Commit fdee3b6b authored by Sudarshan Rajagopalan's avatar Sudarshan Rajagopalan Committed by Isaac J. Manjarres
Browse files

soc: qcom: mem-offline: Clear page-table entries after offline



After a memory block is offlined, the page-table entries should be removed
in order to avoid any CPU speculative accesses happening on this region.
Clear off the entries at the leaf levels (PUD or PMD) on a block mapped
memory region. This only zeroes the entries and does not free the page
table memory. During online, we create mappings again for these regions.

Change-Id: I71091c33589645567c60457ba569dd393ddcab59
Signed-off-by: default avatarSudarshan Rajagopalan <sudaraja@codeaurora.org>
[isaacm@codeaurora.org: resolve merge conflicts]
Signed-off-by: default avatarIsaac J. Manjarres <isaacm@codeaurora.org>
parent 1f1fb52e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -391,6 +391,14 @@ static phys_addr_t pgd_pgtable_alloc(int shift)
	return pa;
}

void create_pgtable_mapping(phys_addr_t start, phys_addr_t end)
{
	unsigned long virt = (unsigned long)phys_to_virt(start);

	__create_pgd_mapping(init_mm.pgd, start, virt, end - start,
				PAGE_KERNEL, NULL, 0);
}

/*
 * This function can only be used to modify existing table entries,
 * without allocating new levels of table. Note that this permits the
+1 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ void __next_reserved_mem_region(u64 *idx, phys_addr_t *out_start,
				phys_addr_t *out_end);

void __memblock_free_late(phys_addr_t base, phys_addr_t size);

void create_pgtable_mapping(phys_addr_t start, phys_addr_t end);
/**
 * for_each_mem_range - iterate through memblock areas from type_a and not
 * included in type_b. Or just type_a if type_b is NULL.