Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 4 Nov 2017 21:26:30 +0000 (14:26 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 4 Nov 2017 21:26:30 +0000 (14:26 -0700)
Pull ARM fixes from Russell King:

 - omit EFI memory map sorting, which was recently introduced, but
   caused problems with the decompressor due to additional sections
   being emitted.

 - avoid unaligned load fault-generating instructions in the
   decompressor by switching to a private unaligned implementation.

 - add a symbol into the decompressor to further debug non-boot
   situations (ld's documentation is extremely poor for how "." works,
   ld doesn't seem to follow its own documentation!)

 - parse endian information to sparse

* 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
  ARM: add debug ".edata_real" symbol
  ARM: 8716/1: pass endianness info to sparse
  efi/libstub: arm: omit sorting of the UEFI memory map
  ARM: 8715/1: add a private asm/unaligned.h

1  2 
drivers/firmware/efi/libstub/Makefile
drivers/firmware/efi/libstub/arm-stub.c

index 2371a92808bee3f8e09da14c42499cffc8c55dde,f3e8431565ea589424e727dda296ba3a3210c392..adaa4a964f0c548811dedae5f22e846f76fe44a1
@@@ -1,4 -1,3 +1,4 @@@
 +# SPDX-License-Identifier: GPL-2.0
  #
  # The stub may be linked into the kernel proper or into a separate boot binary,
  # but in either case, it executes before the kernel does (with MMU disabled) so
@@@ -34,13 -33,14 +34,14 @@@ lib-y                              := efi-stub-helper.o gop.o sec
  lib-$(CONFIG_RESET_ATTACK_MITIGATION) += tpm.o
  
  # include the stub's generic dependencies from lib/ when building for ARM/arm64
- arm-deps := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c sort.c
+ arm-deps-y := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c
+ arm-deps-$(CONFIG_ARM64) += sort.c
  
  $(obj)/lib-%.o: $(srctree)/lib/%.c FORCE
        $(call if_changed_rule,cc_o_c)
  
  lib-$(CONFIG_EFI_ARMSTUB)     += arm-stub.o fdt.o string.o random.o \
-                                  $(patsubst %.c,lib-%.o,$(arm-deps))
+                                  $(patsubst %.c,lib-%.o,$(arm-deps-y))
  
  lib-$(CONFIG_ARM)             += arm32-stub.o
  lib-$(CONFIG_ARM64)           += arm64-stub.o
@@@ -91,5 -91,4 +92,4 @@@ quiet_cmd_stubcopy = STUBCPY $
  # explicitly by the decompressor linker script.
  #
  STUBCOPY_FLAGS-$(CONFIG_ARM)  += --rename-section .data=.data.efistub
- STUBCOPY_RM-$(CONFIG_ARM)     += -R ___ksymtab+sort -R ___kcrctab+sort
  STUBCOPY_RELOC-$(CONFIG_ARM)  := R_ARM_ABS
index a94601d5939e2f51c2ebfd542cbf90dcfc2f0b7c,3061e40574838454d8fe0561de9bc15c239fcbaa..01a9d78ee4154702e89ab8534727dc1ab66998d4
@@@ -238,8 -238,7 +238,8 @@@ unsigned long efi_entry(void *handle, e
  
        efi_random_get_seed(sys_table);
  
 -      if (!nokaslr()) {
 +      /* hibernation expects the runtime regions to stay in the same place */
 +      if (!IS_ENABLED(CONFIG_HIBERNATION) && !nokaslr()) {
                /*
                 * Randomize the base of the UEFI runtime services region.
                 * Preserve the 2 MB alignment of the region by taking a
@@@ -350,7 -349,9 +350,9 @@@ void efi_get_virtmap(efi_memory_desc_t 
         * The easiest way to find adjacent regions is to sort the memory map
         * before traversing it.
         */
-       sort(memory_map, map_size / desc_size, desc_size, cmp_mem_desc, NULL);
+       if (IS_ENABLED(CONFIG_ARM64))
+               sort(memory_map, map_size / desc_size, desc_size, cmp_mem_desc,
+                    NULL);
  
        for (l = 0; l < map_size; l += desc_size, prev = in) {
                u64 paddr, size;
                 * a 4k page size kernel to kexec a 64k page size kernel and
                 * vice versa.
                 */
-               if (!regions_are_adjacent(prev, in) ||
+               if ((IS_ENABLED(CONFIG_ARM64) &&
+                    !regions_are_adjacent(prev, in)) ||
                    !regions_have_compatible_memory_type_attrs(prev, in)) {
  
                        paddr = round_down(in->phys_addr, SZ_64K);