arm64: kexec: remove the pre-kexec PoC maintenance
authorPasha Tatashin <pasha.tatashin@soleen.com>
Thu, 30 Sep 2021 14:31:11 +0000 (14:31 +0000)
committerWill Deacon <will@kernel.org>
Fri, 1 Oct 2021 12:31:00 +0000 (13:31 +0100)
Now that kexec does its relocations with the MMU enabled, we no longer
need to clean the relocation data to the PoC.

Suggested-by: James Morse <james.morse@arm.com>
Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20210930143113.1502553-14-pasha.tatashin@soleen.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/machine_kexec.c

index 1e9a2a4..559d47a 100644 (file)
@@ -78,48 +78,6 @@ int machine_kexec_prepare(struct kimage *kimage)
 }
 
 /**
- * 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.
  */
 static void kexec_segment_flush(const struct kimage *kimage)
@@ -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;