Commit 5e20e349 authored by Fuad Tabba's avatar Fuad Tabba Committed by Will Deacon
Browse files

arm64: Downgrade flush_icache_range to invalidate



Since __flush_dcache_area is called right before,
invalidate_icache_range is sufficient in this case.

Rewrite the comment to better explain the rationale behind the
cache maintenance operations used here.

No functional change intended.
Possible performance impact due to invalidating only the icache
rather than invalidating and cleaning both caches.

Reported-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reported-by: default avatarWill Deacon <will@kernel.org>
Link: https://lore.kernel.org/linux-arch/20200511110014.lb9PEahJ4hVOYrbwIb_qUHXyNy9KQzNFdb_I3YlzY6A@z/


Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarFuad Tabba <tabba@google.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20210524083001.2586635-7-tabba@google.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 7908072d
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -68,9 +68,13 @@ int machine_kexec_post_load(struct kimage *kimage)
	kimage->arch.kern_reloc = __pa(reloc_code);
	kexec_image_info(kimage);

	/* Flush the reloc_code in preparation for its execution. */
	/*
	 * For execution with the MMU off, reloc_code needs to be cleaned to the
	 * PoC and invalidated from the I-cache.
	 */
	__flush_dcache_area(reloc_code, arm64_relocate_new_kernel_size);
	flush_icache_range((uintptr_t)reloc_code, (uintptr_t)reloc_code +
	invalidate_icache_range((uintptr_t)reloc_code,
				(uintptr_t)reloc_code +
					arm64_relocate_new_kernel_size);

	return 0;