Commit 0e9cb599 authored by Steven Price's avatar Steven Price Committed by Catalin Marinas
Browse files

arm64: mm: Avoid TLBI when marking pages as valid



When __change_memory_common() is purely setting the valid bit on a PTE
(e.g. via the set_memory_valid() call) there is no need for a TLBI as
either the entry isn't changing (the valid bit was already set) or the
entry was invalid and so should not have been cached in the TLB.

Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reviewed-by: default avatarGavin Shan <gshan@redhat.com>
Reviewed-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: default avatarSteven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20241017131434.40935-9-steven.price@arm.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent fbf979a0
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -60,6 +60,12 @@ static int __change_memory_common(unsigned long start, unsigned long size,
	ret = apply_to_page_range(&init_mm, start, size, change_page_range,
					&data);

	/*
	 * If the memory is being made valid without changing any other bits
	 * then a TLBI isn't required as a non-valid entry cannot be cached in
	 * the TLB.
	 */
	if (pgprot_val(set_mask) != PTE_VALID || pgprot_val(clear_mask))
		flush_tlb_kernel_range(start, start + size);
	return ret;
}