Commit 939f1b95 authored by Pasha Tatashin's avatar Pasha Tatashin Committed by Will Deacon
Browse files

arm64: kexec: remove the pre-kexec PoC maintenance



Now that kexec does its relocations with the MMU enabled, we no longer
need to clean the relocation data to the PoC.

Suggested-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarPasha Tatashin <pasha.tatashin@soleen.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20210930143113.1502553-14-pasha.tatashin@soleen.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent efc2d0f2
Loading
Loading
Loading
Loading
+0 −43
Original line number Diff line number Diff line
@@ -77,48 +77,6 @@ int machine_kexec_prepare(struct kimage *kimage)
	return 0;
}

/**
 * kexec_list_flush - Helper to flush the kimage list and source pages to PoC.
 */
static void kexec_list_flush(struct kimage *kimage)
{
	kimage_entry_t *entry;

	dcache_clean_inval_poc((unsigned long)kimage,
			       (unsigned long)kimage + sizeof(*kimage));

	for (entry = &kimage->head; ; entry++) {
		unsigned int flag;
		unsigned long addr;

		/* flush the list entries. */
		dcache_clean_inval_poc((unsigned long)entry,
				    (unsigned long)entry +
					    sizeof(kimage_entry_t));

		flag = *entry & IND_FLAGS;
		if (flag == IND_DONE)
			break;

		addr = (unsigned long)phys_to_virt(*entry & PAGE_MASK);

		switch (flag) {
		case IND_INDIRECTION:
			/* Set entry point just before the new list page. */
			entry = (kimage_entry_t *)addr - 1;
			break;
		case IND_SOURCE:
			/* flush the source pages. */
			dcache_clean_inval_poc(addr, addr + PAGE_SIZE);
			break;
		case IND_DESTINATION:
			break;
		default:
			BUG();
		}
	}
}

/**
 * kexec_segment_flush - Helper to flush the kimage segments to PoC.
 */
@@ -207,7 +165,6 @@ int machine_kexec_post_load(struct kimage *kimage)
			       (unsigned long)reloc_code + reloc_size);
	icache_inval_pou((uintptr_t)reloc_code,
			 (uintptr_t)reloc_code + reloc_size);
	kexec_list_flush(kimage);
	kexec_image_info(kimage);

	return 0;