Merge tag 'v3.10.86' into linux-linaro-lsk-v3.10
authorKevin Hilman <khilman@linaro.org>
Fri, 14 Aug 2015 16:36:42 +0000 (09:36 -0700)
committerKevin Hilman <khilman@linaro.org>
Fri, 14 Aug 2015 16:36:42 +0000 (09:36 -0700)
This is the 3.10.86 stable release

* tag 'v3.10.86': (132 commits)
  Linux 3.10.86
  efi: fix 32bit kernel boot failed problem using efi
  iscsi-target: Fix iser explicit logout TX kthread leak
  iscsi-target: Fix use-after-free during TPG session shutdown
  vhost: actually track log eventfd file
  rds: rds_ib_device.refcount overflow
  xhci: prevent bus_suspend if SS port resuming in phase 1
  xhci: report U3 when link is in resume state
  xhci: Calculate old endpoints correctly on device reset
  usb-storage: ignore ZTE MF 823 card reader in mode 0x1225
  ata: pmp: add quirk for Marvell 4140 SATA PMP
  blkcg: fix gendisk reference leak in blkg_conf_prep()
  Input: usbtouchscreen - avoid unresponsive TSC-30 touch screen
  tile: use free_bootmem_late() for initrd
  md/raid1: fix test for 'was read error from last working device'.
  mmc: sdhci-pxav3: fix platform_data is not initialized
  mmc: sdhci-esdhc: Make 8BIT bus work
  mac80211: clear subdir_stations when removing debugfs
  st: null pointer dereference panic caused by use after kref_put by st_open
  ALSA: hda - Fix MacBook Pro 5,2 quirk
  ...

1  2 
arch/arm/kvm/interrupts.S
arch/arm/kvm/interrupts_head.S
arch/arm64/kernel/vdso/Makefile
arch/arm64/mm/init.c
arch/x86/include/asm/kvm_host.h
drivers/regulator/core.c
mm/memory.c

index 01dcb0e752d9f04cbb1492378cc6382397c9c8e8,bb117abb1b3ba64810cdc51a48bd468b32fca3c8..d66d608f7ce7bc0a77830488eb9ce20d8d707032
@@@ -52,10 -52,10 +52,10 @@@ ENTRY(__kvm_tlb_flush_vmid_ipa
        dsb     ishst
        add     r0, r0, #KVM_VTTBR
        ldrd    r2, r3, [r0]
 -      mcrr    p15, 6, r2, r3, c2      @ Write VTTBR
 +      mcrr    p15, 6, rr_lo_hi(r2, r3), c2    @ Write VTTBR
        isb
        mcr     p15, 0, r0, c8, c3, 0   @ TLBIALLIS (rt ignored)
 -      dsb
 +      dsb     ish
        isb
        mov     r2, #0
        mov     r3, #0
@@@ -79,7 -79,7 +79,7 @@@ ENTRY(__kvm_flush_vm_context
        mcr     p15, 4, r0, c8, c3, 4
        /* Invalidate instruction caches Inner Shareable (ICIALLUIS) */
        mcr     p15, 0, r0, c7, c1, 0
 -      dsb
 +      dsb     ish
        isb                             @ Not necessary if followed by eret
  
        bx      lr
@@@ -135,7 -135,7 +135,7 @@@ ENTRY(__kvm_vcpu_run
        ldr     r1, [vcpu, #VCPU_KVM]
        add     r1, r1, #KVM_VTTBR
        ldrd    r2, r3, [r1]
 -      mcrr    p15, 6, r2, r3, c2      @ Write VTTBR
 +      mcrr    p15, 6, rr_lo_hi(r2, r3), c2    @ Write VTTBR
  
        @ We're all done, just restore the GPRs and go to the guest
        restore_guest_regs
@@@ -159,13 -159,9 +159,9 @@@ __kvm_vcpu_return
        @ Don't trap coprocessor accesses for host kernel
        set_hstr vmexit
        set_hdcr vmexit
-       set_hcptr vmexit, (HCPTR_TTA | HCPTR_TCP(10) | HCPTR_TCP(11))
+       set_hcptr vmexit, (HCPTR_TTA | HCPTR_TCP(10) | HCPTR_TCP(11)), after_vfp_restore
  
  #ifdef CONFIG_VFPv3
-       @ Save floating point registers we if let guest use them.
-       tst     r2, #(HCPTR_TCP(10) | HCPTR_TCP(11))
-       bne     after_vfp_restore
        @ Switch VFP/NEON hardware state to the host's
        add     r7, vcpu, #VCPU_VFP_GUEST
        store_vfp_state r7
@@@ -177,6 -173,8 +173,8 @@@ after_vfp_restore
        @ Restore FPEXC_EN which we clobbered on entry
        pop     {r2}
        VFPFMXR FPEXC, r2
+ #else
+ after_vfp_restore:
  #endif
  
        @ Reset Hyp-role
  
        restore_host_regs
        clrex                           @ Clear exclusive monitor
 +#ifndef CONFIG_CPU_ENDIAN_BE8
        mov     r0, r1                  @ Return the return code
        mov     r1, #0                  @ Clear upper bits in return value
 +#else
 +      @ r1 already has return code
 +      mov     r0, #0                  @ Clear upper bits in return value
 +#endif /* CONFIG_CPU_ENDIAN_BE8 */
        bx      lr                      @ return to IOCTL
  
  /********************************************************************
   * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c).  Return values are
   * passed in r0 and r1.
   *
 + * A function pointer with a value of 0xffffffff has a special meaning,
 + * and is used to implement __hyp_get_vectors in the same way as in
 + * arch/arm/kernel/hyp_stub.S.
 + *
   * The calling convention follows the standard AAPCS:
   *   r0 - r3: caller save
   *   r12:     caller save
@@@ -372,11 -361,6 +370,11 @@@ hyp_hvc
  host_switch_to_hyp:
        pop     {r0, r1, r2}
  
 +      /* Check for __hyp_get_vectors */
 +      cmp     r0, #-1
 +      mrceq   p15, 4, r0, c12, c0, 0  @ get HVBAR
 +      beq     1f
 +
        push    {lr}
        mrs     lr, SPSR
        push    {lr}
@@@ -392,7 -376,7 +390,7 @@@ THUMB(     orr     lr, #1
        pop     {lr}
        msr     SPSR_csxf, lr
        pop     {lr}
 -      eret
 +1:    eret
  
  guest_trap:
        load_vcpu                       @ Load VCPU pointer to r0
@@@ -472,7 -456,7 +470,7 @@@ switch_to_guest_vfp
        push    {r3-r7}
  
        @ NEON/VFP used.  Turn on VFP access.
-       set_hcptr vmexit, (HCPTR_TCP(10) | HCPTR_TCP(11))
+       set_hcptr vmtrap, (HCPTR_TCP(10) | HCPTR_TCP(11))
  
        @ Switch VFP/NEON hardware state to the guest's
        add     r7, r0, #VCPU_VFP_HOST
@@@ -506,10 -490,10 +504,10 @@@ __kvm_hyp_code_end
        .section ".rodata"
  
  und_die_str:
 -      .ascii  "unexpected undefined exception in Hyp mode at: %#08x"
 +      .ascii  "unexpected undefined exception in Hyp mode at: %#08x\n"
  pabt_die_str:
 -      .ascii  "unexpected prefetch abort in Hyp mode at: %#08x"
 +      .ascii  "unexpected prefetch abort in Hyp mode at: %#08x\n"
  dabt_die_str:
 -      .ascii  "unexpected data abort in Hyp mode at: %#08x"
 +      .ascii  "unexpected data abort in Hyp mode at: %#08x\n"
  svc_die_str:
 -      .ascii  "unexpected HVC/SVC trap in Hyp mode at: %#08x"
 +      .ascii  "unexpected HVC/SVC trap in Hyp mode at: %#08x\n"
index 98c8c5b9a87f392a0410a1ca51481e93172bad8f,b6f6137f59846a36afd5c76979ea872f83ee0a7e..f8f322102989200015970a2dce38ebce9d115d9b
@@@ -1,5 -1,4 +1,5 @@@
  #include <linux/irqchip/arm-gic.h>
 +#include <asm/assembler.h>
  
  #define VCPU_USR_REG(_reg_nr) (VCPU_USR_REGS + (_reg_nr * 4))
  #define VCPU_USR_SP           (VCPU_USR_REG(13))
@@@ -304,17 -303,13 +304,17 @@@ vcpu    .req    r0              @ vcpu pointer always in 
  
        mrc     p15, 0, r2, c14, c1, 0  @ CNTKCTL
        mrrc    p15, 0, r4, r5, c7      @ PAR
 +      mrc     p15, 0, r6, c10, c3, 0  @ AMAIR0
 +      mrc     p15, 0, r7, c10, c3, 1  @ AMAIR1
  
        .if \store_to_vcpu == 0
 -      push    {r2,r4-r5}
 +      push    {r2,r4-r7}
        .else
        str     r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)]
        add     r12, vcpu, #CP15_OFFSET(c7_PAR)
        strd    r4, r5, [r12]
 +      str     r6, [vcpu, #CP15_OFFSET(c10_AMAIR0)]
 +      str     r7, [vcpu, #CP15_OFFSET(c10_AMAIR1)]
        .endif
  .endm
  
   */
  .macro write_cp15_state read_from_vcpu
        .if \read_from_vcpu == 0
 -      pop     {r2,r4-r5}
 +      pop     {r2,r4-r7}
        .else
        ldr     r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)]
        add     r12, vcpu, #CP15_OFFSET(c7_PAR)
        ldrd    r4, r5, [r12]
 +      ldr     r6, [vcpu, #CP15_OFFSET(c10_AMAIR0)]
 +      ldr     r7, [vcpu, #CP15_OFFSET(c10_AMAIR1)]
        .endif
  
        mcr     p15, 0, r2, c14, c1, 0  @ CNTKCTL
        mcrr    p15, 0, r4, r5, c7      @ PAR
 +      mcr     p15, 0, r6, c10, c3, 0  @ AMAIR0
 +      mcr     p15, 0, r7, c10, c3, 1  @ AMAIR1
  
        .if \read_from_vcpu == 0
        pop     {r2-r12}
        ldr     r8, [r2, #GICH_ELRSR0]
        ldr     r9, [r2, #GICH_ELRSR1]
        ldr     r10, [r2, #GICH_APR]
 -
 -      str     r3, [r11, #VGIC_CPU_HCR]
 -      str     r4, [r11, #VGIC_CPU_VMCR]
 -      str     r5, [r11, #VGIC_CPU_MISR]
 -      str     r6, [r11, #VGIC_CPU_EISR]
 -      str     r7, [r11, #(VGIC_CPU_EISR + 4)]
 -      str     r8, [r11, #VGIC_CPU_ELRSR]
 -      str     r9, [r11, #(VGIC_CPU_ELRSR + 4)]
 -      str     r10, [r11, #VGIC_CPU_APR]
 +ARM_BE8(rev   r3, r3  )
 +ARM_BE8(rev   r4, r4  )
 +ARM_BE8(rev   r5, r5  )
 +ARM_BE8(rev   r6, r6  )
 +ARM_BE8(rev   r7, r7  )
 +ARM_BE8(rev   r8, r8  )
 +ARM_BE8(rev   r9, r9  )
 +ARM_BE8(rev   r10, r10        )
 +
 +      str     r3, [r11, #VGIC_V2_CPU_HCR]
 +      str     r4, [r11, #VGIC_V2_CPU_VMCR]
 +      str     r5, [r11, #VGIC_V2_CPU_MISR]
 +      str     r6, [r11, #VGIC_V2_CPU_EISR]
 +      str     r7, [r11, #(VGIC_V2_CPU_EISR + 4)]
 +      str     r8, [r11, #VGIC_V2_CPU_ELRSR]
 +      str     r9, [r11, #(VGIC_V2_CPU_ELRSR + 4)]
 +      str     r10, [r11, #VGIC_V2_CPU_APR]
  
        /* Clear GICH_HCR */
        mov     r5, #0
  
        /* Save list registers */
        add     r2, r2, #GICH_LR0
 -      add     r3, r11, #VGIC_CPU_LR
 +      add     r3, r11, #VGIC_V2_CPU_LR
        ldr     r4, [r11, #VGIC_CPU_NR_LR]
  1:    ldr     r6, [r2], #4
 +ARM_BE8(rev   r6, r6  )
        str     r6, [r3], #4
        subs    r4, r4, #1
        bne     1b
        add     r11, vcpu, #VCPU_VGIC_CPU
  
        /* We only restore a minimal set of registers */
 -      ldr     r3, [r11, #VGIC_CPU_HCR]
 -      ldr     r4, [r11, #VGIC_CPU_VMCR]
 -      ldr     r8, [r11, #VGIC_CPU_APR]
 +      ldr     r3, [r11, #VGIC_V2_CPU_HCR]
 +      ldr     r4, [r11, #VGIC_V2_CPU_VMCR]
 +      ldr     r8, [r11, #VGIC_V2_CPU_APR]
 +ARM_BE8(rev   r3, r3  )
 +ARM_BE8(rev   r4, r4  )
 +ARM_BE8(rev   r8, r8  )
  
        str     r3, [r2, #GICH_HCR]
        str     r4, [r2, #GICH_VMCR]
  
        /* Restore list registers */
        add     r2, r2, #GICH_LR0
 -      add     r3, r11, #VGIC_CPU_LR
 +      add     r3, r11, #VGIC_V2_CPU_LR
        ldr     r4, [r11, #VGIC_CPU_NR_LR]
  1:    ldr     r6, [r3], #4
 +ARM_BE8(rev   r6, r6  )
        str     r6, [r2], #4
        subs    r4, r4, #1
        bne     1b
        mcr     p15, 0, r2, c14, c3, 1  @ CNTV_CTL
        isb
  
 -      mrrc    p15, 3, r2, r3, c14     @ CNTV_CVAL
 +      mrrc    p15, 3, rr_lo_hi(r2, r3), c14   @ CNTV_CVAL
        ldr     r4, =VCPU_TIMER_CNTV_CVAL
        add     r5, vcpu, r4
        strd    r2, r3, [r5]
  
        ldr     r2, [r4, #KVM_TIMER_CNTVOFF]
        ldr     r3, [r4, #(KVM_TIMER_CNTVOFF + 4)]
 -      mcrr    p15, 4, r2, r3, c14     @ CNTVOFF
 +      mcrr    p15, 4, rr_lo_hi(r2, r3), c14   @ CNTVOFF
  
        ldr     r4, =VCPU_TIMER_CNTV_CVAL
        add     r5, vcpu, r4
        ldrd    r2, r3, [r5]
 -      mcrr    p15, 3, r2, r3, c14     @ CNTV_CVAL
 +      mcrr    p15, 3, rr_lo_hi(r2, r3), c14   @ CNTV_CVAL
        isb
  
        ldr     r2, [vcpu, #VCPU_TIMER_CNTV_CTL]
  .endm
  
  /* Configures the HCPTR (Hyp Coprocessor Trap Register) on entry/return
-  * (hardware reset value is 0). Keep previous value in r2. */
- .macro set_hcptr operation, mask
+  * (hardware reset value is 0). Keep previous value in r2.
+  * An ISB is emited on vmexit/vmtrap, but executed on vmexit only if
+  * VFP wasn't already enabled (always executed on vmtrap).
+  * If a label is specified with vmexit, it is branched to if VFP wasn't
+  * enabled.
+  */
+ .macro set_hcptr operation, mask, label = none
        mrc     p15, 4, r2, c1, c1, 2
        ldr     r3, =\mask
        .if \operation == vmentry
        bic     r3, r2, r3              @ Don't trap defined coproc-accesses
        .endif
        mcr     p15, 4, r3, c1, c1, 2
+       .if \operation != vmentry
+       .if \operation == vmexit
+       tst     r2, #(HCPTR_TCP(10) | HCPTR_TCP(11))
+       beq     1f
+       .endif
+       isb
+       .if \label != none
+       b       \label
+       .endif
+ 1:
+       .endif
  .endm
  
  /* Configures the HDCR (Hyp Debug Configuration Register) on entry/return
  
  /* Enable/Disable: stage-2 trans., trap interrupts, trap wfi, trap smc */
  .macro configure_hyp_role operation
 -      mrc     p15, 4, r2, c1, c1, 0   @ HCR
 -      bic     r2, r2, #HCR_VIRT_EXCP_MASK
 -      ldr     r3, =HCR_GUEST_MASK
        .if \operation == vmentry
 -      orr     r2, r2, r3
 +      ldr     r2, [vcpu, #VCPU_HCR]
        ldr     r3, [vcpu, #VCPU_IRQ_LINES]
        orr     r2, r2, r3
        .else
 -      bic     r2, r2, r3
 +      mov     r2, #0
        .endif
 -      mcr     p15, 4, r2, c1, c1, 0
 +      mcr     p15, 4, r2, c1, c1, 0   @ HCR
  .endm
  
  .macro load_vcpu
index ff3bddea482dd84ced8711376af1084f6ae594ee,fdda6dd71ac628c298e5de252c6ee839e28c1435..f6fe17d88da55d0b212b4d6ffe900f962e1e7bd5
@@@ -15,6 -15,10 +15,10 @@@ ccflags-y := -shared -fno-common -fno-b
  ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 \
                $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
  
+ # Workaround for bare-metal (ELF) toolchains that neglect to pass -shared
+ # down to collect2, resulting in silent corruption of the vDSO image.
+ ccflags-y += -Wl,-shared
  obj-y += vdso.o
  extra-y += vdso.lds vdso-offsets.h
  CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
@@@ -43,13 -47,13 +47,13 @@@ $(obj)/vdso-offsets.h: $(obj)/vdso.so.d
        $(call if_changed,vdsosym)
  
  # Assembly rules for the .S files
 -$(obj-vdso): %.o: %.S
 +$(obj-vdso): %.o: %.S FORCE
        $(call if_changed_dep,vdsoas)
  
  # Actual build commands
 -quiet_cmd_vdsold = VDSOL $@
 +quiet_cmd_vdsold = VDSOL   $@
        cmd_vdsold = $(CC) $(c_flags) -Wl,-n -Wl,-T $^ -o $@
 -quiet_cmd_vdsoas = VDSOA $@
 +quiet_cmd_vdsoas = VDSOA   $@
        cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $<
  
  # Install commands for the unstripped file
diff --combined arch/arm64/mm/init.c
index f2bded0254c32a4aa4692fd4b022582a6e1c6bbb,5c5516611b5e5fbbd68dd7ed6f080be4b5168a9d..67ad3c079ae6497ffbbc2593511da64c5e207765
@@@ -30,8 -30,6 +30,8 @@@
  #include <linux/memblock.h>
  #include <linux/sort.h>
  #include <linux/of_fdt.h>
 +#include <linux/dma-mapping.h>
 +#include <linux/dma-contiguous.h>
  
  #include <asm/prom.h>
  #include <asm/sections.h>
@@@ -46,7 -44,8 +46,7 @@@ static unsigned long phys_initrd_size _
  
  phys_addr_t memstart_addr __read_mostly = 0;
  
 -void __init early_init_dt_setup_initrd_arch(unsigned long start,
 -                                          unsigned long end)
 +void __init early_init_dt_setup_initrd_arch(u64 start, u64 end)
  {
        phys_initrd_start = start;
        phys_initrd_size = end - start;
@@@ -68,31 -67,22 +68,31 @@@ static int __init early_initrd(char *p
  }
  early_param("initrd", early_initrd);
  
 -#define MAX_DMA32_PFN ((4UL * 1024 * 1024 * 1024) >> PAGE_SHIFT)
 +/*
 + * Return the maximum physical address for ZONE_DMA (DMA_BIT_MASK(32)). It
 + * currently assumes that for memory starting above 4G, 32-bit devices will
 + * use a DMA offset.
 + */
 +static phys_addr_t max_zone_dma_phys(void)
 +{
 +      phys_addr_t offset = memblock_start_of_DRAM() & GENMASK_ULL(63, 32);
 +      return min(offset + (1ULL << 32), memblock_end_of_DRAM());
 +}
  
  static void __init zone_sizes_init(unsigned long min, unsigned long max)
  {
        struct memblock_region *reg;
        unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES];
 -      unsigned long max_dma32 = min;
 +      unsigned long max_dma = min;
  
        memset(zone_size, 0, sizeof(zone_size));
  
 -#ifdef CONFIG_ZONE_DMA32
        /* 4GB maximum for 32-bit only capable devices */
 -      max_dma32 = max(min, min(max, MAX_DMA32_PFN));
 -      zone_size[ZONE_DMA32] = max_dma32 - min;
 -#endif
 -      zone_size[ZONE_NORMAL] = max - max_dma32;
 +      if (IS_ENABLED(CONFIG_ZONE_DMA)) {
 +              max_dma = PFN_DOWN(max_zone_dma_phys());
 +              zone_size[ZONE_DMA] = max_dma - min;
 +      }
 +      zone_size[ZONE_NORMAL] = max - max_dma;
  
        memcpy(zhole_size, zone_size, sizeof(zhole_size));
  
  
                if (start >= max)
                        continue;
 -#ifdef CONFIG_ZONE_DMA32
 -              if (start < max_dma32) {
 -                      unsigned long dma_end = min(end, max_dma32);
 -                      zhole_size[ZONE_DMA32] -= dma_end - start;
 +
 +              if (IS_ENABLED(CONFIG_ZONE_DMA) && start < max_dma) {
 +                      unsigned long dma_end = min(end, max_dma);
 +                      zhole_size[ZONE_DMA] -= dma_end - start;
                }
 -#endif
 -              if (end > max_dma32) {
 +
 +              if (end > max_dma) {
                        unsigned long normal_end = min(end, max);
 -                      unsigned long normal_start = max(start, max_dma32);
 +                      unsigned long normal_start = max(start, max_dma);
                        zhole_size[ZONE_NORMAL] -= normal_end - normal_start;
                }
        }
@@@ -141,34 -131,11 +141,34 @@@ static void arm64_memory_present(void
  }
  #endif
  
 +static phys_addr_t memory_limit = (phys_addr_t)ULLONG_MAX;
 +
 +/*
 + * Limit the memory size that was specified via FDT.
 + */
 +static int __init early_mem(char *p)
 +{
 +      if (!p)
 +              return 1;
 +
 +      memory_limit = memparse(p, &p) & PAGE_MASK;
 +      pr_notice("Memory limited to %lldMB\n", memory_limit >> 20);
 +
 +      return 0;
 +}
 +early_param("mem", early_mem);
 +
  void __init arm64_memblock_init(void)
  {
        u64 *reserve_map, base, size;
 +      phys_addr_t dma_phys_limit = 0;
  
 -      /* Register the kernel text, kernel data and initrd with memblock */
 +      memblock_enforce_memory_limit(memory_limit);
 +
 +      /*
 +       * Register the kernel text, kernel data, initrd, and initial
 +       * pagetables with memblock.
 +       */
        memblock_reserve(__pa(_text), _end - _text);
  #ifdef CONFIG_BLK_DEV_INITRD
        if (phys_initrd_size) {
        }
  #endif
  
 -      /*
 -       * Reserve the page tables.  These are already in use,
 -       * and can only be in node 0.
 -       */
 -      memblock_reserve(__pa(swapper_pg_dir), SWAPPER_DIR_SIZE);
 -      memblock_reserve(__pa(idmap_pg_dir), IDMAP_DIR_SIZE);
 -
        /* Reserve the dtb region */
        memblock_reserve(virt_to_phys(initial_boot_params),
                         be32_to_cpu(initial_boot_params->totalsize));
                memblock_reserve(base, size);
        }
  
 +      early_init_fdt_scan_reserved_mem();
 +
 +      /* 4GB maximum for 32-bit only capable devices */
 +      if (IS_ENABLED(CONFIG_ZONE_DMA))
 +              dma_phys_limit = max_zone_dma_phys();
 +      dma_contiguous_reserve(dma_phys_limit);
 +
        memblock_allow_resize();
        memblock_dump_all();
  }
@@@ -295,7 -262,7 +295,7 @@@ static void __init free_unused_memmap(v
                 * memmap entries are valid from the bank end aligned to
                 * MAX_ORDER_NR_PAGES.
                 */
-               prev_end = ALIGN(start + __phys_to_pfn(reg->size),
+               prev_end = ALIGN(__phys_to_pfn(reg->base + reg->size),
                                 MAX_ORDER_NR_PAGES);
        }
  
@@@ -316,6 -283,8 +316,6 @@@ void __init mem_init(void
        unsigned long reserved_pages, free_pages;
        struct memblock_region *reg;
  
 -      arm64_swiotlb_init();
 -
        max_mapnr   = pfn_to_page(max_pfn + PHYS_PFN_OFFSET) - mem_map;
  
  #ifndef CONFIG_SPARSEMEM_VMEMMAP
index b15a6b5fa3417b4b6b9b48e8a7f8f066b0ff1f73,98b68c2f1a1cfa68bbbd57165ffe83211ef8964f..693ab2d3920950e7206a931600bb4b261e6648f2
  #define KVM_HPAGE_MASK(x)     (~(KVM_HPAGE_SIZE(x) - 1))
  #define KVM_PAGES_PER_HPAGE(x)        (KVM_HPAGE_SIZE(x) / PAGE_SIZE)
  
 +static inline gfn_t gfn_to_index(gfn_t gfn, gfn_t base_gfn, int level)
 +{
 +      /* KVM_HPAGE_GFN_SHIFT(PT_PAGE_TABLE_LEVEL) must be 0. */
 +      return (gfn >> KVM_HPAGE_GFN_SHIFT(level)) -
 +              (base_gfn >> KVM_HPAGE_GFN_SHIFT(level));
 +}
 +
  #define SELECTOR_TI_MASK (1 << 2)
  #define SELECTOR_RPL_MASK 0x03
  
  
  #define ASYNC_PF_PER_VCPU 64
  
 -struct kvm_vcpu;
 -struct kvm;
 -struct kvm_async_pf;
 -
  enum kvm_reg {
        VCPU_REGS_RAX = 0,
        VCPU_REGS_RCX = 1,
@@@ -544,7 -541,7 +544,7 @@@ struct kvm_arch 
        struct kvm_pic *vpic;
        struct kvm_ioapic *vioapic;
        struct kvm_pit *vpit;
-       int vapics_in_nmi_mode;
+       atomic_t vapics_in_nmi_mode;
        struct mutex apic_map_lock;
        struct kvm_apic_map *apic_map;
  
@@@ -635,8 -632,8 +635,8 @@@ struct msr_data 
  struct kvm_x86_ops {
        int (*cpu_has_kvm_support)(void);          /* __init */
        int (*disabled_by_bios)(void);             /* __init */
 -      int (*hardware_enable)(void *dummy);
 -      void (*hardware_disable)(void *dummy);
 +      int (*hardware_enable)(void);
 +      void (*hardware_disable)(void);
        void (*check_processor_compatibility)(void *rtn);
        int (*hardware_setup)(void);               /* __init */
        void (*hardware_unsetup)(void);            /* __exit */
diff --combined drivers/regulator/core.c
index 73cc3bba0d78dec6e309566c0f0110c449f013b0,70ccc20100546fca8fee99dea431aed6e636600b..eaaae3080802e0d382b5a5f77917e5acfe573fa6
@@@ -769,7 -769,7 +769,7 @@@ static int suspend_prepare(struct regul
  static void print_constraints(struct regulator_dev *rdev)
  {
        struct regulation_constraints *constraints = rdev->constraints;
-       char buf[80] = "";
+       char buf[160] = "";
        int count = 0;
        int ret;
  
@@@ -1893,9 -1893,8 +1893,9 @@@ int regulator_disable_deferred(struct r
        rdev->deferred_disables++;
        mutex_unlock(&rdev->mutex);
  
 -      ret = schedule_delayed_work(&rdev->disable_work,
 -                                  msecs_to_jiffies(ms));
 +      ret = queue_delayed_work(system_power_efficient_wq,
 +                               &rdev->disable_work,
 +                               msecs_to_jiffies(ms));
        if (ret < 0)
                return ret;
        else
diff --combined mm/memory.c
index 7c86434d9cfeebdea0e7ed0eee12c2942fa6e10f,30bf9cce8c2b046922a79a19b4a4ac046bb82f81..50671e5105ab85fc0e908396666e5274c98b0f65
@@@ -118,8 -118,6 +118,8 @@@ __setup("norandmaps", disable_randmaps)
  unsigned long zero_pfn __read_mostly;
  unsigned long highest_memmap_pfn __read_mostly;
  
 +EXPORT_SYMBOL(zero_pfn);
 +
  /*
   * CONFIG_MMU architectures set up ZERO_PAGE in their paging_init()
   */
@@@ -3232,6 -3230,10 +3232,10 @@@ static int do_anonymous_page(struct mm_
  
        pte_unmap(page_table);
  
+       /* File mapping without ->vm_ops ? */
+       if (vma->vm_flags & VM_SHARED)
+               return VM_FAULT_SIGBUS;
        /* Check if we need to add a guard page to the stack */
        if (check_stack_guard_page(vma, address) < 0)
                return VM_FAULT_SIGSEGV;
@@@ -3497,6 -3499,9 +3501,9 @@@ static int do_linear_fault(struct mm_st
                        - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
  
        pte_unmap(page_table);
+       /* The VMA was not fully populated on mmap() or missing VM_DONTEXPAND */
+       if (!vma->vm_ops->fault)
+               return VM_FAULT_SIGBUS;
        return __do_fault(mm, vma, address, pmd, pgoff, flags, orig_pte);
  }
  
@@@ -3708,11 -3713,9 +3715,9 @@@ int handle_pte_fault(struct mm_struct *
        entry = *pte;
        if (!pte_present(entry)) {
                if (pte_none(entry)) {
-                       if (vma->vm_ops) {
-                               if (likely(vma->vm_ops->fault))
-                                       return do_linear_fault(mm, vma, address,
+                       if (vma->vm_ops)
+                               return do_linear_fault(mm, vma, address,
                                                pte, pmd, flags, entry);
-                       }
                        return do_anonymous_page(mm, vma, address,
                                                 pte, pmd, flags);
                }