ARM: kvm: round HYP section to page size instead of log2 upper bound
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 27 Mar 2015 10:18:01 +0000 (10:18 +0000)
committerWill Deacon <will.deacon@arm.com>
Fri, 27 Mar 2015 12:21:27 +0000 (12:21 +0000)
Older binutils do not support expressions involving the values of
external symbols so just round up the HYP region to the page size.

Tested-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
[will: when will this ever end?!]
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/kernel/vmlinux.lds.S
arch/arm/kvm/init.S

index 808398e..f2db429 100644 (file)
 #include <asm/pgtable.h>
 #endif
 
-/*
- * Poor man's version of LOG2CEIL(), which is
- * not available in binutils before v2.24.
- */
-#define LOG2_ROUNDUP(size) (           \
-       __LOG2_ROUNDUP(size,  2)        \
-       __LOG2_ROUNDUP(size,  3)        \
-       __LOG2_ROUNDUP(size,  4)        \
-       __LOG2_ROUNDUP(size,  5)        \
-       __LOG2_ROUNDUP(size,  6)        \
-       __LOG2_ROUNDUP(size,  7)        \
-       __LOG2_ROUNDUP(size,  8)        \
-       __LOG2_ROUNDUP(size,  9)        \
-       __LOG2_ROUNDUP(size, 10)        \
-       __LOG2_ROUNDUP(size, 11)        \
-       12)
-
-#define __LOG2_ROUNDUP(size, order)    \
-       (size) <= (1 << order) ? order :
-
 #define PROC_INFO                                                      \
        . = ALIGN(4);                                                   \
        VMLINUX_SYMBOL(__proc_info_begin) = .;                          \
        VMLINUX_SYMBOL(__idmap_text_start) = .;                         \
        *(.idmap.text)                                                  \
        VMLINUX_SYMBOL(__idmap_text_end) = .;                           \
-       . = ALIGN(1 << LOG2_ROUNDUP(__hyp_idmap_size));                 \
+       . = ALIGN(PAGE_SIZE);                                           \
        VMLINUX_SYMBOL(__hyp_idmap_text_start) = .;                     \
        *(.hyp.idmap.text)                                              \
        VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
 
-/*
- * If the HYP idmap .text section is populated, it needs to be positioned
- * such that it will not cross a page boundary in the final output image.
- * So align it to the section size rounded up to the next power of 2.
- * If __hyp_idmap_size is undefined, the section will be empty so define
- * it as 0 in that case.
- */
-PROVIDE(__hyp_idmap_size = 0);
-
 #ifdef CONFIG_HOTPLUG_CPU
 #define ARM_CPU_DISCARD(x)
 #define ARM_CPU_KEEP(x)                x
index 11fb1d5..3988e72 100644 (file)
@@ -157,6 +157,3 @@ target:     @ We're now in the trampoline code, switch page tables
 __kvm_hyp_init_end:
 
        .popsection
-
-       .global __hyp_idmap_size
-       .set    __hyp_idmap_size, __kvm_hyp_init_end - __kvm_hyp_init