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

Commit 2dece445 authored by Laura Abbott's avatar Laura Abbott Committed by Will Deacon
Browse files

mm/cma: Cleanup highmem check



6b101e2a ("mm/CMA: fix boot regression due to physical address of
high_memory") added checks to use __pa_nodebug on x86 since
CONFIG_DEBUG_VIRTUAL complains about high_memory not being linearlly
mapped. arm64 is now getting support for CONFIG_DEBUG_VIRTUAL as well.
Rather than add an explosion of arches to the #ifdef, switch to an
alternate method to calculate the physical start of highmem using
the page before highmem starts. This avoids the need for the #ifdef and
extra __pa_nodebug calls.

Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Tested-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarLaura Abbott <labbott@redhat.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent fa5b6ec9
Loading
Loading
Loading
Loading
+5 −10
Original line number Original line Diff line number Diff line
@@ -235,18 +235,13 @@ int __init cma_declare_contiguous(phys_addr_t base,
	phys_addr_t highmem_start;
	phys_addr_t highmem_start;
	int ret = 0;
	int ret = 0;


#ifdef CONFIG_X86
	/*
	/*
	 * high_memory isn't direct mapped memory so retrieving its physical
	 * We can't use __pa(high_memory) directly, since high_memory
	 * address isn't appropriate.  But it would be useful to check the
	 * isn't a valid direct map VA, and DEBUG_VIRTUAL will (validly)
	 * physical address of the highmem boundary so it's justifiable to get
	 * complain. Find the boundary by adding one to the last valid
	 * the physical address from it.  On x86 there is a validation check for
	 * address.
	 * this case, so the following workaround is needed to avoid it.
	 */
	 */
	highmem_start = __pa_nodebug(high_memory);
	highmem_start = __pa(high_memory - 1) + 1;
#else
	highmem_start = __pa(high_memory);
#endif
	pr_debug("%s(size %pa, base %pa, limit %pa alignment %pa)\n",
	pr_debug("%s(size %pa, base %pa, limit %pa alignment %pa)\n",
		__func__, &size, &base, &limit, &alignment);
		__func__, &size, &base, &limit, &alignment);