xen/arm: Pair call to set_fixmap with call to clear_fixmap in copy_from_paddr
authorJulien Grall <julien.grall@arm.com>
Sun, 2 Dec 2018 19:12:54 +0000 (19:12 +0000)
committerJulien Grall <julien.grall@arm.com>
Thu, 6 Jun 2019 17:44:33 +0000 (18:44 +0100)
At the moment, set_fixmap may replace a valid entry without following
the break-before-make sequence. This may result to TLB conflict abort.

Rather than dealing with Break-Before-Make in set_fixmap, each call to
set_fixmap in copy_from_paddr is paired with a call to clear_fixmap.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/arch/arm/kernel.c

index e3ffdb2fa1cb4aa21f2cb9dd07a0ab8cc5cb9bc1..389bef2afae9bd218017fdba267954ba380223cc 100644 (file)
@@ -58,13 +58,12 @@ void __init copy_from_paddr(void *dst, paddr_t paddr, unsigned long len)
         set_fixmap(FIXMAP_MISC, maddr_to_mfn(paddr), PAGE_HYPERVISOR_WC);
         memcpy(dst, src + s, l);
         clean_dcache_va_range(dst, l);
+        clear_fixmap(FIXMAP_MISC);
 
         paddr += l;
         dst += l;
         len -= l;
     }
-
-    clear_fixmap(FIXMAP_MISC);
 }
 
 static void __init place_modules(struct kernel_info *info,