commit:     5daaf1bd8061d1dcbeca1d1a1cd16880585a89f8
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Sep  9 17:58:21 2020 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Sep  9 17:58:21 2020 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=5daaf1bd

Linux patch 4.14.197

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README               |    4 +
 1196_linux-4.14.197.patch | 2688 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2692 insertions(+)

diff --git a/0000_README b/0000_README
index 923cca1..7b69642 100644
--- a/0000_README
+++ b/0000_README
@@ -827,6 +827,10 @@ Patch:  1195_linux-4.14.196.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.196
 
+Patch:  1196_linux-4.14.197.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.197
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1196_linux-4.14.197.patch b/1196_linux-4.14.197.patch
new file mode 100644
index 0000000..c2a0343
--- /dev/null
+++ b/1196_linux-4.14.197.patch
@@ -0,0 +1,2688 @@
+diff --git a/Documentation/filesystems/affs.txt 
b/Documentation/filesystems/affs.txt
+index 71b63c2b98410..a8f1a58e36922 100644
+--- a/Documentation/filesystems/affs.txt
++++ b/Documentation/filesystems/affs.txt
+@@ -93,13 +93,15 @@ The Amiga protection flags RWEDRWEDHSPARWED are handled as 
follows:
+ 
+   - R maps to r for user, group and others. On directories, R implies x.
+ 
+-  - If both W and D are allowed, w will be set.
++  - W maps to w.
+ 
+   - E maps to x.
+ 
+-  - H and P are always retained and ignored under Linux.
++  - D is ignored.
+ 
+-  - A is always reset when a file is written to.
++  - H, S and P are always retained and ignored under Linux.
++
++  - A is cleared when a file is written to.
+ 
+ User id and group id will be used unless set[gu]id are given as mount
+ options. Since most of the Amiga file systems are single user systems
+@@ -111,11 +113,13 @@ Linux -> Amiga:
+ 
+ The Linux rwxrwxrwx file mode is handled as follows:
+ 
+-  - r permission will set R for user, group and others.
++  - r permission will allow R for user, group and others.
++
++  - w permission will allow W for user, group and others.
+ 
+-  - w permission will set W and D for user, group and others.
++  - x permission of the user will allow E for plain files.
+ 
+-  - x permission of the user will set E for plain files.
++  - D will be allowed for user, group and others.
+ 
+   - All other flags (suid, sgid, ...) are ignored and will
+     not be retained.
+diff --git a/Makefile b/Makefile
+index 5c8b785f72919..3712b4deafbed 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 196
++SUBLEVEL = 197
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+diff --git a/arch/arm64/include/asm/kvm_arm.h 
b/arch/arm64/include/asm/kvm_arm.h
+index 1d6d980f80ac0..f88611e241f0e 100644
+--- a/arch/arm64/include/asm/kvm_arm.h
++++ b/arch/arm64/include/asm/kvm_arm.h
+@@ -78,10 +78,11 @@
+  * IMO:               Override CPSR.I and enable signaling with VI
+  * FMO:               Override CPSR.F and enable signaling with VF
+  * SWIO:      Turn set/way invalidates into set/way clean+invalidate
++ * PTW:               Take a stage2 fault if a stage1 walk steps in device 
memory
+  */
+ #define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \
+                        HCR_TVM | HCR_BSU_IS | HCR_FB | HCR_TAC | \
+-                       HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW)
++                       HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_PTW)
+ #define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF)
+ #define HCR_INT_OVERRIDE   (HCR_FMO | HCR_IMO)
+ #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK)
+diff --git a/arch/arm64/include/asm/kvm_asm.h 
b/arch/arm64/include/asm/kvm_asm.h
+index c59e81b651328..b0f0fb81f5f5e 100644
+--- a/arch/arm64/include/asm/kvm_asm.h
++++ b/arch/arm64/include/asm/kvm_asm.h
+@@ -83,6 +83,34 @@ extern u32 __init_stage2_translation(void);
+               *__hyp_this_cpu_ptr(sym);                               \
+        })
+ 
++#define __KVM_EXTABLE(from, to)                                               
\
++      "       .pushsection    __kvm_ex_table, \"a\"\n"                \
++      "       .align          3\n"                                    \
++      "       .long           (" #from " - .), (" #to " - .)\n"       \
++      "       .popsection\n"
++
++
++#define __kvm_at(at_op, addr)                                         \
++( {                                                                   \
++      int __kvm_at_err = 0;                                           \
++      u64 spsr, elr;                                                  \
++      asm volatile(                                                   \
++      "       mrs     %1, spsr_el2\n"                                 \
++      "       mrs     %2, elr_el2\n"                                  \
++      "1:     at      "at_op", %3\n"                                  \
++      "       isb\n"                                                  \
++      "       b       9f\n"                                           \
++      "2:     msr     spsr_el2, %1\n"                                 \
++      "       msr     elr_el2, %2\n"                                  \
++      "       mov     %w0, %4\n"                                      \
++      "9:\n"                                                          \
++      __KVM_EXTABLE(1b, 2b)                                           \
++      : "+r" (__kvm_at_err), "=&r" (spsr), "=&r" (elr)                \
++      : "r" (addr), "i" (-EFAULT));                                   \
++      __kvm_at_err;                                                   \
++} )
++
++
+ #else /* __ASSEMBLY__ */
+ 
+ .macro hyp_adr_this_cpu reg, sym, tmp
+@@ -107,6 +135,21 @@ extern u32 __init_stage2_translation(void);
+       kern_hyp_va     \vcpu
+ .endm
+ 
++/*
++ * KVM extable for unexpected exceptions.
++ * In the same format _asm_extable, but output to a different section so that
++ * it can be mapped to EL2. The KVM version is not sorted. The caller must
++ * ensure:
++ * x18 has the hypervisor value to allow any Shadow-Call-Stack instrumented
++ * code to write to it, and that SPSR_EL2 and ELR_EL2 are restored by the 
fixup.
++ */
++.macro        _kvm_extable, from, to
++      .pushsection    __kvm_ex_table, "a"
++      .align          3
++      .long           (\from - .), (\to - .)
++      .popsection
++.endm
++
+ #endif
+ 
+ #endif /* __ARM_KVM_ASM_H__ */
+diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
+index c4e55176f4b6d..4c11d3e64aef4 100644
+--- a/arch/arm64/kernel/vmlinux.lds.S
++++ b/arch/arm64/kernel/vmlinux.lds.S
+@@ -24,6 +24,13 @@ ENTRY(_text)
+ 
+ jiffies = jiffies_64;
+ 
++
++#define HYPERVISOR_EXTABLE                                    \
++      . = ALIGN(SZ_8);                                        \
++      VMLINUX_SYMBOL(__start___kvm_ex_table) = .;             \
++      *(__kvm_ex_table)                                       \
++      VMLINUX_SYMBOL(__stop___kvm_ex_table) = .;
++
+ #define HYPERVISOR_TEXT                                       \
+       /*                                              \
+        * Align to 4 KB so that                        \
+@@ -39,6 +46,7 @@ jiffies = jiffies_64;
+       VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;       \
+       VMLINUX_SYMBOL(__hyp_text_start) = .;           \
+       *(.hyp.text)                                    \
++      HYPERVISOR_EXTABLE                              \
+       VMLINUX_SYMBOL(__hyp_text_end) = .;
+ 
+ #define IDMAP_TEXT                                    \
+diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S
+index a360ac6e89e9d..4e0eac361f87c 100644
+--- a/arch/arm64/kvm/hyp/entry.S
++++ b/arch/arm64/kvm/hyp/entry.S
+@@ -17,6 +17,7 @@
+ 
+ #include <linux/linkage.h>
+ 
++#include <asm/alternative.h>
+ #include <asm/asm-offsets.h>
+ #include <asm/assembler.h>
+ #include <asm/fpsimdmacros.h>
+@@ -62,6 +63,15 @@ ENTRY(__guest_enter)
+       // Store the host regs
+       save_callee_saved_regs x1
+ 
++      // Now the host state is stored if we have a pending RAS SError it must
++      // affect the host. If any asynchronous exception is pending we defer
++      // the guest entry.
++      mrs     x1, isr_el1
++      cbz     x1,  1f
++      mov     x0, #ARM_EXCEPTION_IRQ
++      ret
++
++1:
+       add     x18, x0, #VCPU_CONTEXT
+ 
+       // Restore guest regs x0-x17
+@@ -135,18 +145,22 @@ ENTRY(__guest_exit)
+       // This is our single instruction exception window. A pending
+       // SError is guaranteed to occur at the earliest when we unmask
+       // it, and at the latest just after the ISB.
+-      .global abort_guest_exit_start
+ abort_guest_exit_start:
+ 
+       isb
+ 
+-      .global abort_guest_exit_end
+ abort_guest_exit_end:
++      msr     daifset, #4     // Mask aborts
++      ret
++
++      _kvm_extable    abort_guest_exit_start, 9997f
++      _kvm_extable    abort_guest_exit_end, 9997f
++9997:
++      msr     daifset, #4     // Mask aborts
++      mov     x0, #(1 << ARM_EXIT_WITH_SERROR_BIT)
+ 
+-      // If the exception took place, restore the EL1 exception
+-      // context so that we can report some information.
+-      // Merge the exception code with the SError pending bit.
+-      tbz     x0, #ARM_EXIT_WITH_SERROR_BIT, 1f
++      // restore the EL1 exception context so that we can report some
++      // information. Merge the exception code with the SError pending bit.
+       msr     elr_el2, x2
+       msr     esr_el2, x3
+       msr     spsr_el2, x4
+diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S
+index 3c283fd8c8f5a..5e041eabdd03e 100644
+--- a/arch/arm64/kvm/hyp/hyp-entry.S
++++ b/arch/arm64/kvm/hyp/hyp-entry.S
+@@ -25,6 +25,30 @@
+ #include <asm/kvm_asm.h>
+ #include <asm/kvm_mmu.h>
+ 
++.macro save_caller_saved_regs_vect
++      stp     x0, x1,   [sp, #-16]!
++      stp     x2, x3,   [sp, #-16]!
++      stp     x4, x5,   [sp, #-16]!
++      stp     x6, x7,   [sp, #-16]!
++      stp     x8, x9,   [sp, #-16]!
++      stp     x10, x11, [sp, #-16]!
++      stp     x12, x13, [sp, #-16]!
++      stp     x14, x15, [sp, #-16]!
++      stp     x16, x17, [sp, #-16]!
++.endm
++
++.macro restore_caller_saved_regs_vect
++      ldp     x16, x17, [sp], #16
++      ldp     x14, x15, [sp], #16
++      ldp     x12, x13, [sp], #16
++      ldp     x10, x11, [sp], #16
++      ldp     x8, x9,   [sp], #16
++      ldp     x6, x7,   [sp], #16
++      ldp     x4, x5,   [sp], #16
++      ldp     x2, x3,   [sp], #16
++      ldp     x0, x1,   [sp], #16
++.endm
++
+       .text
+       .pushsection    .hyp.text, "ax"
+ 
+@@ -183,26 +207,24 @@ el1_error:
+       mov     x0, #ARM_EXCEPTION_EL1_SERROR
+       b       __guest_exit
+ 
++el2_sync:
++      save_caller_saved_regs_vect
++      stp     x29, x30, [sp, #-16]!
++      bl      kvm_unexpected_el2_exception
++      ldp     x29, x30, [sp], #16
++      restore_caller_saved_regs_vect
++
++      eret
++
+ el2_error:
+-      /*
+-       * Only two possibilities:
+-       * 1) Either we come from the exit path, having just unmasked
+-       *    PSTATE.A: change the return code to an EL2 fault, and
+-       *    carry on, as we're already in a sane state to handle it.
+-       * 2) Or we come from anywhere else, and that's a bug: we panic.
+-       *
+-       * For (1), x0 contains the original return code and x1 doesn't
+-       * contain anything meaningful at that stage. We can reuse them
+-       * as temp registers.
+-       * For (2), who cares?
+-       */
+-      mrs     x0, elr_el2
+-      adr     x1, abort_guest_exit_start
+-      cmp     x0, x1
+-      adr     x1, abort_guest_exit_end
+-      ccmp    x0, x1, #4, ne
+-      b.ne    __hyp_panic
+-      mov     x0, #(1 << ARM_EXIT_WITH_SERROR_BIT)
++      save_caller_saved_regs_vect
++      stp     x29, x30, [sp, #-16]!
++
++      bl      kvm_unexpected_el2_exception
++
++      ldp     x29, x30, [sp], #16
++      restore_caller_saved_regs_vect
++
+       eret
+ 
+ ENTRY(__hyp_do_panic)
+@@ -231,7 +253,6 @@ ENDPROC(\label)
+       invalid_vector  el2t_irq_invalid
+       invalid_vector  el2t_fiq_invalid
+       invalid_vector  el2t_error_invalid
+-      invalid_vector  el2h_sync_invalid
+       invalid_vector  el2h_irq_invalid
+       invalid_vector  el2h_fiq_invalid
+       invalid_vector  el1_sync_invalid
+@@ -248,7 +269,7 @@ ENTRY(__kvm_hyp_vector)
+       ventry  el2t_fiq_invalid                // FIQ EL2t
+       ventry  el2t_error_invalid              // Error EL2t
+ 
+-      ventry  el2h_sync_invalid               // Synchronous EL2h
++      ventry  el2_sync                        // Synchronous EL2h
+       ventry  el2h_irq_invalid                // IRQ EL2h
+       ventry  el2h_fiq_invalid                // FIQ EL2h
+       ventry  el2_error                       // Error EL2h
+diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
+index 0ad952e074457..99ae75a43985c 100644
+--- a/arch/arm64/kvm/hyp/switch.c
++++ b/arch/arm64/kvm/hyp/switch.c
+@@ -22,11 +22,15 @@
+ 
+ #include <kvm/arm_psci.h>
+ 
++#include <asm/extable.h>
+ #include <asm/kvm_asm.h>
+ #include <asm/kvm_emulate.h>
+ #include <asm/kvm_hyp.h>
+ #include <asm/fpsimd.h>
+ 
++extern struct exception_table_entry __start___kvm_ex_table;
++extern struct exception_table_entry __stop___kvm_ex_table;
++
+ static bool __hyp_text __fpsimd_enabled_nvhe(void)
+ {
+       return !(read_sysreg(cptr_el2) & CPTR_EL2_TFP);
+@@ -216,10 +220,10 @@ static bool __hyp_text __translate_far_to_hpfar(u64 far, 
u64 *hpfar)
+        * saved the guest context yet, and we may return early...
+        */
+       par = read_sysreg(par_el1);
+-      asm volatile("at s1e1r, %0" : : "r" (far));
+-      isb();
+-
+-      tmp = read_sysreg(par_el1);
++      if (!__kvm_at("s1e1r", far))
++              tmp = read_sysreg(par_el1);
++      else
++              tmp = 1; /* back to the guest */
+       write_sysreg(par, par_el1);
+ 
+       if (unlikely(tmp & 1))
+@@ -486,3 +490,30 @@ void __hyp_text __noreturn hyp_panic(struct 
kvm_cpu_context *host_ctxt)
+ 
+       unreachable();
+ }
++
++asmlinkage void __hyp_text kvm_unexpected_el2_exception(void)
++{
++      unsigned long addr, fixup;
++      struct kvm_cpu_context *host_ctxt;
++      struct exception_table_entry *entry, *end;
++      unsigned long elr_el2 = read_sysreg(elr_el2);
++
++      entry = hyp_symbol_addr(__start___kvm_ex_table);
++      end = hyp_symbol_addr(__stop___kvm_ex_table);
++      host_ctxt = __hyp_this_cpu_ptr(kvm_host_cpu_state);
++
++      while (entry < end) {
++              addr = (unsigned long)&entry->insn + entry->insn;
++              fixup = (unsigned long)&entry->fixup + entry->fixup;
++
++              if (addr != elr_el2) {
++                      entry++;
++                      continue;
++              }
++
++              write_sysreg(fixup, elr_el2);
++              return;
++      }
++
++      hyp_panic(host_ctxt);
++}
+diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
+index 45fbcbbf2504e..3018582794efc 100644
+--- a/arch/mips/kernel/smp-bmips.c
++++ b/arch/mips/kernel/smp-bmips.c
+@@ -240,6 +240,8 @@ static int bmips_boot_secondary(int cpu, struct 
task_struct *idle)
+  */
+ static void bmips_init_secondary(void)
+ {
++      bmips_cpu_setup();
++
+       switch (current_cpu_type()) {
+       case CPU_BMIPS4350:
+       case CPU_BMIPS4380:
+diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
+index bacd67f5d71df..e4de107bf7fd8 100644
+--- a/arch/mips/mm/c-r4k.c
++++ b/arch/mips/mm/c-r4k.c
+@@ -1781,7 +1781,11 @@ static void setup_scache(void)
+                               printk("MIPS secondary cache %ldkB, %s, 
linesize %d bytes.\n",
+                                      scache_size >> 10,
+                                      way_string[c->scache.ways], 
c->scache.linesz);
++
++                              if (current_cpu_type() == CPU_BMIPS5000)
++                                      c->options |= MIPS_CPU_INCLUSIVE_CACHES;
+                       }
++
+ #else
+                       if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
+                               panic("Dunno how to handle MIPS32 / MIPS64 
second level cache");
+diff --git a/arch/s390/include/asm/percpu.h b/arch/s390/include/asm/percpu.h
+index 0095ddb58ff69..50f6661ba5664 100644
+--- a/arch/s390/include/asm/percpu.h
++++ b/arch/s390/include/asm/percpu.h
+@@ -29,7 +29,7 @@
+       typedef typeof(pcp) pcp_op_T__;                                 \
+       pcp_op_T__ old__, new__, prev__;                                \
+       pcp_op_T__ *ptr__;                                              \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                                    \
+       prev__ = *ptr__;                                                \
+       do {                                                            \
+@@ -37,7 +37,7 @@
+               new__ = old__ op (val);                                 \
+               prev__ = cmpxchg(ptr__, old__, new__);                  \
+       } while (prev__ != old__);                                      \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+       new__;                                                          \
+ })
+ 
+@@ -68,7 +68,7 @@
+       typedef typeof(pcp) pcp_op_T__;                                 \
+       pcp_op_T__ val__ = (val);                                       \
+       pcp_op_T__ old__, *ptr__;                                       \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                            \
+       if (__builtin_constant_p(val__) &&                              \
+           ((szcast)val__ > -129) && ((szcast)val__ < 128)) {          \
+@@ -84,7 +84,7 @@
+                       : [val__] "d" (val__)                           \
+                       : "cc");                                        \
+       }                                                               \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+ }
+ 
+ #define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", 
int)
+@@ -95,14 +95,14 @@
+       typedef typeof(pcp) pcp_op_T__;                                 \
+       pcp_op_T__ val__ = (val);                                       \
+       pcp_op_T__ old__, *ptr__;                                       \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                                    \
+       asm volatile(                                                   \
+               op "    %[old__],%[val__],%[ptr__]\n"                   \
+               : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__)           \
+               : [val__] "d" (val__)                                   \
+               : "cc");                                                \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                               
\
+       old__ + val__;                                                  \
+ })
+ 
+@@ -114,14 +114,14 @@
+       typedef typeof(pcp) pcp_op_T__;                                 \
+       pcp_op_T__ val__ = (val);                                       \
+       pcp_op_T__ old__, *ptr__;                                       \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                                    \
+       asm volatile(                                                   \
+               op "    %[old__],%[val__],%[ptr__]\n"                   \
+               : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__)           \
+               : [val__] "d" (val__)                                   \
+               : "cc");                                                \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+ }
+ 
+ #define this_cpu_and_4(pcp, val)      arch_this_cpu_to_op(pcp, val, "lan")
+@@ -136,10 +136,10 @@
+       typedef typeof(pcp) pcp_op_T__;                                 \
+       pcp_op_T__ ret__;                                               \
+       pcp_op_T__ *ptr__;                                              \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                                    \
+       ret__ = cmpxchg(ptr__, oval, nval);                             \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+       ret__;                                                          \
+ })
+ 
+@@ -152,10 +152,10 @@
+ ({                                                                    \
+       typeof(pcp) *ptr__;                                             \
+       typeof(pcp) ret__;                                              \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       ptr__ = raw_cpu_ptr(&(pcp));                                    \
+       ret__ = xchg(ptr__, nval);                                      \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+       ret__;                                                          \
+ })
+ 
+@@ -171,11 +171,11 @@
+       typeof(pcp1) *p1__;                                             \
+       typeof(pcp2) *p2__;                                             \
+       int ret__;                                                      \
+-      preempt_disable();                                              \
++      preempt_disable_notrace();                                      \
+       p1__ = raw_cpu_ptr(&(pcp1));                                    \
+       p2__ = raw_cpu_ptr(&(pcp2));                                    \
+       ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__);   \
+-      preempt_enable();                                               \
++      preempt_enable_notrace();                                       \
+       ret__;                                                          \
+ })
+ 
+diff --git a/arch/xtensa/platforms/iss/simdisk.c 
b/arch/xtensa/platforms/iss/simdisk.c
+index c45b90bb93393..c75e75932807e 100644
+--- a/arch/xtensa/platforms/iss/simdisk.c
++++ b/arch/xtensa/platforms/iss/simdisk.c
+@@ -21,7 +21,6 @@
+ #include <platform/simcall.h>
+ 
+ #define SIMDISK_MAJOR 240
+-#define SECTOR_SHIFT 9
+ #define SIMDISK_MINORS 1
+ #define MAX_SIMDISK_COUNT 10
+ 
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index a3a65f5490c02..f90a20cad3fef 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -4488,9 +4488,8 @@ static const struct ata_blacklist_entry 
ata_device_blacklist [] = {
+       /* https://bugzilla.kernel.org/show_bug.cgi?id=15573 */
+       { "C300-CTFDDAC128MAG", "0001",         ATA_HORKAGE_NONCQ, },
+ 
+-      /* Some Sandisk SSDs lock up hard with NCQ enabled.  Reported on
+-         SD7SN6S256G and SD8SN8U256G */
+-      { "SanDisk SD[78]SN*G", NULL,           ATA_HORKAGE_NONCQ, },
++      /* Sandisk SD7/8/9s lock up hard on large trims */
++      { "SanDisk SD[789]*",   NULL,           ATA_HORKAGE_MAX_TRIM_128M, },
+ 
+       /* devices which puke on READ_NATIVE_MAX */
+       { "HDS724040KLSA80",    "KFAOA20N",     ATA_HORKAGE_BROKEN_HPA, },
+diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
+index bc2c27f0493fc..4b299efbd8047 100644
+--- a/drivers/ata/libata-scsi.c
++++ b/drivers/ata/libata-scsi.c
+@@ -2392,6 +2392,7 @@ static unsigned int ata_scsiop_inq_89(struct 
ata_scsi_args *args, u8 *rbuf)
+ 
+ static unsigned int ata_scsiop_inq_b0(struct ata_scsi_args *args, u8 *rbuf)
+ {
++      struct ata_device *dev = args->dev;
+       u16 min_io_sectors;
+ 
+       rbuf[1] = 0xb0;
+@@ -2417,7 +2418,12 @@ static unsigned int ata_scsiop_inq_b0(struct 
ata_scsi_args *args, u8 *rbuf)
+        * with the unmap bit set.
+        */
+       if (ata_id_has_trim(args->id)) {
+-              put_unaligned_be64(65535 * ATA_MAX_TRIM_RNUM, &rbuf[36]);
++              u64 max_blocks = 65535 * ATA_MAX_TRIM_RNUM;
++
++              if (dev->horkage & ATA_HORKAGE_MAX_TRIM_128M)
++                      max_blocks = 128 << (20 - SECTOR_SHIFT);
++
++              put_unaligned_be64(max_blocks, &rbuf[36]);
+               put_unaligned_be32(1, &rbuf[28]);
+       }
+ 
+diff --git a/drivers/block/brd.c b/drivers/block/brd.c
+index 0129b1921cb36..78287f029cf07 100644
+--- a/drivers/block/brd.c
++++ b/drivers/block/brd.c
+@@ -28,7 +28,6 @@
+ 
+ #include <linux/uaccess.h>
+ 
+-#define SECTOR_SHIFT          9
+ #define PAGE_SECTORS_SHIFT    (PAGE_SHIFT - SECTOR_SHIFT)
+ #define PAGE_SECTORS          (1 << PAGE_SECTORS_SHIFT)
+ 
+diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
+index ec670a1b7e02f..b499e72b2847e 100644
+--- a/drivers/block/null_blk.c
++++ b/drivers/block/null_blk.c
+@@ -16,10 +16,8 @@
+ #include <linux/configfs.h>
+ #include <linux/badblocks.h>
+ 
+-#define SECTOR_SHIFT          9
+ #define PAGE_SECTORS_SHIFT    (PAGE_SHIFT - SECTOR_SHIFT)
+ #define PAGE_SECTORS          (1 << PAGE_SECTORS_SHIFT)
+-#define SECTOR_SIZE           (1 << SECTOR_SHIFT)
+ #define SECTOR_MASK           (PAGE_SECTORS - 1)
+ 
+ #define FREE_BATCH            16
+diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
+index 557cf52f674b5..b9b20e1fa8c88 100644
+--- a/drivers/block/rbd.c
++++ b/drivers/block/rbd.c
+@@ -50,15 +50,6 @@
+ 
+ #define RBD_DEBUG     /* Activate rbd_assert() calls */
+ 
+-/*
+- * The basic unit of block I/O is a sector.  It is interpreted in a
+- * number of contexts in Linux (blk, bio, genhd), but the default is
+- * universally 512 bytes.  These symbols are just slightly more
+- * meaningful than the bare numbers they represent.
+- */
+-#define       SECTOR_SHIFT    9
+-#define       SECTOR_SIZE     (1ULL << SECTOR_SHIFT)
+-
+ /*
+  * Increment the given counter and return its updated value.
+  * If the counter is already 0 it will not be incremented.
+diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
+index 31762db861e38..1e9bf65c0bfba 100644
+--- a/drivers/block/zram/zram_drv.h
++++ b/drivers/block/zram/zram_drv.h
+@@ -37,7 +37,6 @@ static const size_t max_zpage_size = PAGE_SIZE / 4 * 3;
+ 
+ /*-- End of configurable params */
+ 
+-#define SECTOR_SHIFT          9
+ #define SECTORS_PER_PAGE_SHIFT        (PAGE_SHIFT - SECTOR_SHIFT)
+ #define SECTORS_PER_PAGE      (1 << SECTORS_PER_PAGE_SHIFT)
+ #define ZRAM_LOGICAL_BLOCK_SHIFT 12
+diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
+index ed4df58a855e1..da9eb38d79d9c 100644
+--- a/drivers/cpuidle/cpuidle.c
++++ b/drivers/cpuidle/cpuidle.c
+@@ -144,7 +144,8 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
+        */
+       stop_critical_timings();
+       drv->states[index].enter_s2idle(dev, drv, index);
+-      WARN_ON(!irqs_disabled());
++      if (WARN_ON_ONCE(!irqs_disabled()))
++              local_irq_disable();
+       /*
+        * timekeeping_resume() that will be called by tick_unfreeze() for the
+        * first CPU executing it calls functions containing RCU read-side
+diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
+index 21ed0e20c5d91..cf3225a229890 100644
+--- a/drivers/dma/at_hdmac.c
++++ b/drivers/dma/at_hdmac.c
+@@ -1677,6 +1677,8 @@ static struct dma_chan *at_dma_xlate(struct 
of_phandle_args *dma_spec,
+               return NULL;
+ 
+       dmac_pdev = of_find_device_by_node(dma_spec->np);
++      if (!dmac_pdev)
++              return NULL;
+ 
+       dma_cap_zero(mask);
+       dma_cap_set(DMA_SLAVE, mask);
+diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c
+index 91fd395c90c4c..8344a60c2131b 100644
+--- a/drivers/dma/of-dma.c
++++ b/drivers/dma/of-dma.c
+@@ -72,12 +72,12 @@ static struct dma_chan *of_dma_router_xlate(struct 
of_phandle_args *dma_spec,
+               return NULL;
+ 
+       chan = ofdma_target->of_dma_xlate(&dma_spec_target, ofdma_target);
+-      if (chan) {
+-              chan->router = ofdma->dma_router;
+-              chan->route_data = route_data;
+-      } else {
++      if (IS_ERR_OR_NULL(chan)) {
+               ofdma->dma_router->route_free(ofdma->dma_router->dev,
+                                             route_data);
++      } else {
++              chan->router = ofdma->dma_router;
++              chan->route_data = route_data;
+       }
+ 
+       /*
+diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
+index b4fa555a243f9..ff8b7042d28f4 100644
+--- a/drivers/dma/pl330.c
++++ b/drivers/dma/pl330.c
+@@ -2661,6 +2661,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t 
dst,
+       while (burst != (1 << desc->rqcfg.brst_size))
+               desc->rqcfg.brst_size++;
+ 
++      desc->rqcfg.brst_len = get_burst_len(desc, len);
+       /*
+        * If burst size is smaller than bus width then make sure we only
+        * transfer one at a time to avoid a burst stradling an MFIFO entry.
+@@ -2668,7 +2669,6 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t 
dst,
+       if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width)
+               desc->rqcfg.brst_len = 1;
+ 
+-      desc->rqcfg.brst_len = get_burst_len(desc, len);
+       desc->bytes_requested = len;
+ 
+       desc->txd.flags = flags;
+diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
+index d9c0687435a05..c59240b566d83 100644
+--- a/drivers/gpu/drm/msm/msm_drv.c
++++ b/drivers/gpu/drm/msm/msm_drv.c
+@@ -1134,6 +1134,13 @@ static int msm_pdev_remove(struct platform_device *pdev)
+       return 0;
+ }
+ 
++static void msm_pdev_shutdown(struct platform_device *pdev)
++{
++      struct drm_device *drm = platform_get_drvdata(pdev);
++
++      drm_atomic_helper_shutdown(drm);
++}
++
+ static const struct of_device_id dt_match[] = {
+       { .compatible = "qcom,mdp4", .data = (void *)4 },       /* MDP4 */
+       { .compatible = "qcom,mdss", .data = (void *)5 },       /* MDP5 MDSS */
+@@ -1144,6 +1151,7 @@ MODULE_DEVICE_TABLE(of, dt_match);
+ static struct platform_driver msm_platform_driver = {
+       .probe      = msm_pdev_probe,
+       .remove     = msm_pdev_remove,
++      .shutdown   = msm_pdev_shutdown,
+       .driver     = {
+               .name   = "msm",
+               .of_match_table = dt_match,
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 75b0a337114df..ff6e327cbd027 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1426,6 +1426,17 @@ static void hid_output_field(const struct hid_device 
*hid,
+       }
+ }
+ 
++/*
++ * Compute the size of a report.
++ */
++static size_t hid_compute_report_size(struct hid_report *report)
++{
++      if (report->size)
++              return ((report->size - 1) >> 3) + 1;
++
++      return 0;
++}
++
+ /*
+  * Create a report. 'data' has to be allocated using
+  * hid_alloc_report_buf() so that it has proper size.
+@@ -1438,7 +1449,7 @@ void hid_output_report(struct hid_report *report, __u8 
*data)
+       if (report->id > 0)
+               *data++ = report->id;
+ 
+-      memset(data, 0, ((report->size - 1) >> 3) + 1);
++      memset(data, 0, hid_compute_report_size(report));
+       for (n = 0; n < report->maxfield; n++)
+               hid_output_field(report->device, report->field[n], data);
+ }
+@@ -1565,7 +1576,7 @@ int hid_report_raw_event(struct hid_device *hid, int 
type, u8 *data, u32 size,
+               csize--;
+       }
+ 
+-      rsize = ((report->size - 1) >> 3) + 1;
++      rsize = hid_compute_report_size(report);
+ 
+       if (report_enum->numbered && rsize >= HID_MAX_BUFFER_SIZE)
+               rsize = HID_MAX_BUFFER_SIZE - 1;
+diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
+index 204ccf6745333..3624d6e3384ff 100644
+--- a/drivers/hid/hid-input.c
++++ b/drivers/hid/hid-input.c
+@@ -1116,6 +1116,10 @@ static void hidinput_configure_usage(struct hid_input 
*hidinput, struct hid_fiel
+       }
+ 
+ mapped:
++      /* Mapping failed, bail out */
++      if (!bit)
++              return;
++
+       if (device->driver->input_mapped &&
+           device->driver->input_mapped(device, hidinput, field, usage,
+                                        &bit, &max) < 0) {
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index db29bf539a4b2..ac31998f93a88 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -616,6 +616,8 @@ static int mt_touch_input_mapping(struct hid_device *hdev, 
struct hid_input *hi,
+                   (usage->hid & HID_USAGE) > 1)
+                       code--;
+               hid_map_usage(hi, usage, bit, max, EV_KEY, code);
++              if (!*bit)
++                      return -1;
+               input_set_capability(hi->input, EV_KEY, code);
+               return 1;
+ 
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index 5c677ba440143..b201129a9beae 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -760,15 +760,18 @@ static ssize_t applesmc_light_show(struct device *dev,
+       }
+ 
+       ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
++      if (ret)
++              goto out;
+       /* newer macbooks report a single 10-bit bigendian value */
+       if (data_length == 10) {
+               left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2;
+               goto out;
+       }
+       left = buffer[2];
++
++      ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
+       if (ret)
+               goto out;
+-      ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
+       right = buffer[2];
+ 
+ out:
+@@ -817,12 +820,11 @@ static ssize_t applesmc_show_fan_speed(struct device 
*dev,
+                 to_index(attr));
+ 
+       ret = applesmc_read_key(newkey, buffer, 2);
+-      speed = ((buffer[0] << 8 | buffer[1]) >> 2);
+-
+       if (ret)
+               return ret;
+-      else
+-              return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed);
++
++      speed = ((buffer[0] << 8 | buffer[1]) >> 2);
++      return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed);
+ }
+ 
+ static ssize_t applesmc_store_fan_speed(struct device *dev,
+@@ -858,12 +860,11 @@ static ssize_t applesmc_show_fan_manual(struct device 
*dev,
+       u8 buffer[2];
+ 
+       ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
+-      manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
+-
+       if (ret)
+               return ret;
+-      else
+-              return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual);
++
++      manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
++      return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual);
+ }
+ 
+ static ssize_t applesmc_store_fan_manual(struct device *dev,
+@@ -879,10 +880,11 @@ static ssize_t applesmc_store_fan_manual(struct device 
*dev,
+               return -EINVAL;
+ 
+       ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
+-      val = (buffer[0] << 8 | buffer[1]);
+       if (ret)
+               goto out;
+ 
++      val = (buffer[0] << 8 | buffer[1]);
++
+       if (input)
+               val = val | (0x01 << to_index(attr));
+       else
+@@ -958,13 +960,12 @@ static ssize_t applesmc_key_count_show(struct device 
*dev,
+       u32 count;
+ 
+       ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4);
+-      count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) +
+-                                              ((u32)buffer[2]<<8) + buffer[3];
+-
+       if (ret)
+               return ret;
+-      else
+-              return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count);
++
++      count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) +
++                                              ((u32)buffer[2]<<8) + buffer[3];
++      return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count);
+ }
+ 
+ static ssize_t applesmc_key_at_index_read_show(struct device *dev,
+diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
+index 4de45db76756c..5aed1de845d0d 100644
+--- a/drivers/ide/ide-cd.c
++++ b/drivers/ide/ide-cd.c
+@@ -712,7 +712,7 @@ static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, 
struct request *rq)
+       struct request_queue *q = drive->queue;
+       int write = rq_data_dir(rq) == WRITE;
+       unsigned short sectors_per_frame =
+-              queue_logical_block_size(q) >> SECTOR_BITS;
++              queue_logical_block_size(q) >> SECTOR_SHIFT;
+ 
+       ide_debug_log(IDE_DBG_RQ, "rq->cmd[0]: 0x%x, rq->cmd_flags: 0x%x, "
+                                 "secs_per_frame: %u",
+@@ -919,7 +919,7 @@ static int cdrom_read_capacity(ide_drive_t *drive, 
unsigned long *capacity,
+        * end up being bogus.
+        */
+       blocklen = be32_to_cpu(capbuf.blocklen);
+-      blocklen = (blocklen >> SECTOR_BITS) << SECTOR_BITS;
++      blocklen = (blocklen >> SECTOR_SHIFT) << SECTOR_SHIFT;
+       switch (blocklen) {
+       case 512:
+       case 1024:
+@@ -935,7 +935,7 @@ static int cdrom_read_capacity(ide_drive_t *drive, 
unsigned long *capacity,
+       }
+ 
+       *capacity = 1 + be32_to_cpu(capbuf.lba);
+-      *sectors_per_frame = blocklen >> SECTOR_BITS;
++      *sectors_per_frame = blocklen >> SECTOR_SHIFT;
+ 
+       ide_debug_log(IDE_DBG_PROBE, "cap: %lu, sectors_per_frame: %lu",
+                                    *capacity, *sectors_per_frame);
+@@ -1012,7 +1012,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct 
request_sense *sense)
+       drive->probed_capacity = toc->capacity * sectors_per_frame;
+ 
+       blk_queue_logical_block_size(drive->queue,
+-                                   sectors_per_frame << SECTOR_BITS);
++                                   sectors_per_frame << SECTOR_SHIFT);
+ 
+       /* first read just the header, so we know how long the TOC is */
+       stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
+diff --git a/drivers/ide/ide-cd.h b/drivers/ide/ide-cd.h
+index 264e822eba58a..04f0f310a8566 100644
+--- a/drivers/ide/ide-cd.h
++++ b/drivers/ide/ide-cd.h
+@@ -21,11 +21,7 @@
+ 
+ /************************************************************************/
+ 
+-#define SECTOR_BITS           9
+-#ifndef SECTOR_SIZE
+-#define SECTOR_SIZE           (1 << SECTOR_BITS)
+-#endif
+-#define SECTORS_PER_FRAME     (CD_FRAMESIZE >> SECTOR_BITS)
++#define SECTORS_PER_FRAME     (CD_FRAMESIZE >> SECTOR_SHIFT)
+ #define SECTOR_BUFFER_SIZE    (CD_FRAMESIZE * 32)
+ 
+ /* Capabilities Page size including 8 bytes of Mode Page Header */
+diff --git a/drivers/iommu/intel_irq_remapping.c 
b/drivers/iommu/intel_irq_remapping.c
+index 7cc5b04e30b7a..09c6b17aaf80e 100644
+--- a/drivers/iommu/intel_irq_remapping.c
++++ b/drivers/iommu/intel_irq_remapping.c
+@@ -479,12 +479,18 @@ static void iommu_enable_irq_remapping(struct 
intel_iommu *iommu)
+ 
+       /* Enable interrupt-remapping */
+       iommu->gcmd |= DMA_GCMD_IRE;
+-      iommu->gcmd &= ~DMA_GCMD_CFI;  /* Block compatibility-format MSIs */
+       writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
+-
+       IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
+                     readl, (sts & DMA_GSTS_IRES), sts);
+ 
++      /* Block compatibility-format MSIs */
++      if (sts & DMA_GSTS_CFIS) {
++              iommu->gcmd &= ~DMA_GCMD_CFI;
++              writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
++              IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
++                            readl, !(sts & DMA_GSTS_CFIS), sts);
++      }
++
+       /*
+        * With CFI clear in the Global Command register, we should be
+        * protected from dangerous (i.e. compatibility) interrupts
+diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c
+index 394e53afc2593..0acd10d3b7bff 100644
+--- a/drivers/md/dm-cache-metadata.c
++++ b/drivers/md/dm-cache-metadata.c
+@@ -536,12 +536,16 @@ static int __create_persistent_data_objects(struct 
dm_cache_metadata *cmd,
+                                         CACHE_MAX_CONCURRENT_LOCKS);
+       if (IS_ERR(cmd->bm)) {
+               DMERR("could not create block manager");
+-              return PTR_ERR(cmd->bm);
++              r = PTR_ERR(cmd->bm);
++              cmd->bm = NULL;
++              return r;
+       }
+ 
+       r = __open_or_format_metadata(cmd, may_format_device);
+-      if (r)
++      if (r) {
+               dm_block_manager_destroy(cmd->bm);
++              cmd->bm = NULL;
++      }
+ 
+       return r;
+ }
+diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
+index b85a66f42814e..29f8a632b42b2 100644
+--- a/drivers/md/dm-thin-metadata.c
++++ b/drivers/md/dm-thin-metadata.c
+@@ -698,12 +698,16 @@ static int __create_persistent_data_objects(struct 
dm_pool_metadata *pmd, bool f
+                                         THIN_MAX_CONCURRENT_LOCKS);
+       if (IS_ERR(pmd->bm)) {
+               DMERR("could not create block manager");
+-              return PTR_ERR(pmd->bm);
++              r = PTR_ERR(pmd->bm);
++              pmd->bm = NULL;
++              return r;
+       }
+ 
+       r = __open_or_format_metadata(pmd, format_device);
+-      if (r)
++      if (r) {
+               dm_block_manager_destroy(pmd->bm);
++              pmd->bm = NULL;
++      }
+ 
+       return r;
+ }
+diff --git a/drivers/net/ethernet/arc/emac_mdio.c 
b/drivers/net/ethernet/arc/emac_mdio.c
+index 0187dbf3b87df..54cdafdd067db 100644
+--- a/drivers/net/ethernet/arc/emac_mdio.c
++++ b/drivers/net/ethernet/arc/emac_mdio.c
+@@ -153,6 +153,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv)
+       if (IS_ERR(data->reset_gpio)) {
+               error = PTR_ERR(data->reset_gpio);
+               dev_err(priv->dev, "Failed to request gpio: %d\n", error);
++              mdiobus_free(bus);
+               return error;
+       }
+ 
+diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c 
b/drivers/net/ethernet/broadcom/bcmsysport.c
+index 123ee5c11bc0c..11eb393497a2a 100644
+--- a/drivers/net/ethernet/broadcom/bcmsysport.c
++++ b/drivers/net/ethernet/broadcom/bcmsysport.c
+@@ -2087,8 +2087,10 @@ static int bcm_sysport_probe(struct platform_device 
*pdev)
+       priv->tx_rings = devm_kcalloc(&pdev->dev, txq,
+                                     sizeof(struct bcm_sysport_tx_ring),
+                                     GFP_KERNEL);
+-      if (!priv->tx_rings)
+-              return -ENOMEM;
++      if (!priv->tx_rings) {
++              ret = -ENOMEM;
++              goto err_free_netdev;
++      }
+ 
+       priv->is_lite = params->is_lite;
+       priv->num_rx_desc_words = params->num_rx_desc_words;
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+index a189061d8f97e..7de38ae5c18f2 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+@@ -8251,6 +8251,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const 
struct pci_device_id *ent)
+ 
+       bnxt_parse_log_pcie_link(bp);
+ 
++      pci_save_state(pdev);
+       return 0;
+ 
+ init_err_cleanup_tc:
+@@ -8412,6 +8413,8 @@ static pci_ers_result_t bnxt_io_slot_reset(struct 
pci_dev *pdev)
+                       "Cannot re-enable PCI device after reset.\n");
+       } else {
+               pci_set_master(pdev);
++              pci_restore_state(pdev);
++              pci_save_state(pdev);
+ 
+               err = bnxt_hwrm_func_reset(bp);
+               if (!err && netif_running(netdev))
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+index 6edbbfc1709a2..a38433cb9015d 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+@@ -1761,6 +1761,9 @@ static int bnxt_get_nvram_directory(struct net_device 
*dev, u32 len, u8 *data)
+       if (rc != 0)
+               return rc;
+ 
++      if (!dir_entries || !entry_length)
++              return -EIO;
++
+       /* Insert 2 bytes of directory info (count and size of entries) */
+       if (len < 2)
+               return -EINVAL;
+diff --git a/drivers/net/ethernet/broadcom/tg3.c 
b/drivers/net/ethernet/broadcom/tg3.c
+index e40d31b405253..480179ddc45b6 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -7204,8 +7204,8 @@ static inline void tg3_reset_task_schedule(struct tg3 
*tp)
+ 
+ static inline void tg3_reset_task_cancel(struct tg3 *tp)
+ {
+-      cancel_work_sync(&tp->reset_task);
+-      tg3_flag_clear(tp, RESET_TASK_PENDING);
++      if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
++              cancel_work_sync(&tp->reset_task);
+       tg3_flag_clear(tp, TX_RECOVERY_PENDING);
+ }
+ 
+@@ -11182,18 +11182,27 @@ static void tg3_reset_task(struct work_struct *work)
+ 
+       tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
+       err = tg3_init_hw(tp, true);
+-      if (err)
++      if (err) {
++              tg3_full_unlock(tp);
++              tp->irq_sync = 0;
++              tg3_napi_enable(tp);
++              /* Clear this flag so that tg3_reset_task_cancel() will not
++               * call cancel_work_sync() and wait forever.
++               */
++              tg3_flag_clear(tp, RESET_TASK_PENDING);
++              dev_close(tp->dev);
+               goto out;
++      }
+ 
+       tg3_netif_start(tp);
+ 
+-out:
+       tg3_full_unlock(tp);
+ 
+       if (!err)
+               tg3_phy_start(tp);
+ 
+       tg3_flag_clear(tp, RESET_TASK_PENDING);
++out:
+       rtnl_unlock();
+ }
+ 
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c 
b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index 0733745f4be6c..af832929ae287 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -2433,8 +2433,10 @@ static int hns_nic_dev_probe(struct platform_device 
*pdev)
+                       priv->enet_ver = AE_VERSION_1;
+               else if (acpi_dev_found(hns_enet_acpi_match[1].id))
+                       priv->enet_ver = AE_VERSION_2;
+-              else
+-                      return -ENXIO;
++              else {
++                      ret = -ENXIO;
++                      goto out_read_prop_fail;
++              }
+ 
+               /* try to find port-idx-in-ae first */
+               ret = acpi_node_get_property_reference(dev->fwnode,
+@@ -2446,7 +2448,8 @@ static int hns_nic_dev_probe(struct platform_device 
*pdev)
+               priv->fwnode = acpi_fwnode_handle(args.adev);
+       } else {
+               dev_err(dev, "cannot read cfg data from OF or acpi\n");
+-              return -ENXIO;
++              ret = -ENXIO;
++              goto out_read_prop_fail;
+       }
+ 
+       ret = device_property_read_u32(dev, "port-idx-in-ae", &port_id);
+diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c 
b/drivers/net/ethernet/mellanox/mlx4/mr.c
+index 20043f82c1d82..7c212d6618640 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/mr.c
++++ b/drivers/net/ethernet/mellanox/mlx4/mr.c
+@@ -114,7 +114,7 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int 
max_order)
+               goto err_out;
+ 
+       for (i = 0; i <= buddy->max_order; ++i) {
+-              s = BITS_TO_LONGS(1 << (buddy->max_order - i));
++              s = BITS_TO_LONGS(1UL << (buddy->max_order - i));
+               buddy->bits[i] = kvmalloc_array(s, sizeof(long), GFP_KERNEL | 
__GFP_ZERO);
+               if (!buddy->bits[i])
+                       goto err_out_free;
+diff --git a/drivers/net/ethernet/renesas/ravb_main.c 
b/drivers/net/ethernet/renesas/ravb_main.c
+index 9f4d93a16b7e5..19fb3dbb80f58 100644
+--- a/drivers/net/ethernet/renesas/ravb_main.c
++++ b/drivers/net/ethernet/renesas/ravb_main.c
+@@ -1374,6 +1374,51 @@ static inline int ravb_hook_irq(unsigned int irq, 
irq_handler_t handler,
+       return error;
+ }
+ 
++/* MDIO bus init function */
++static int ravb_mdio_init(struct ravb_private *priv)
++{
++      struct platform_device *pdev = priv->pdev;
++      struct device *dev = &pdev->dev;
++      int error;
++
++      /* Bitbang init */
++      priv->mdiobb.ops = &bb_ops;
++
++      /* MII controller setting */
++      priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb);
++      if (!priv->mii_bus)
++              return -ENOMEM;
++
++      /* Hook up MII support for ethtool */
++      priv->mii_bus->name = "ravb_mii";
++      priv->mii_bus->parent = dev;
++      snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
++               pdev->name, pdev->id);
++
++      /* Register MDIO bus */
++      error = of_mdiobus_register(priv->mii_bus, dev->of_node);
++      if (error)
++              goto out_free_bus;
++
++      return 0;
++
++out_free_bus:
++      free_mdio_bitbang(priv->mii_bus);
++      return error;
++}
++
++/* MDIO bus release function */
++static int ravb_mdio_release(struct ravb_private *priv)
++{
++      /* Unregister mdio bus */
++      mdiobus_unregister(priv->mii_bus);
++
++      /* Free bitbang info */
++      free_mdio_bitbang(priv->mii_bus);
++
++      return 0;
++}
++
+ /* Network device open function for Ethernet AVB */
+ static int ravb_open(struct net_device *ndev)
+ {
+@@ -1382,6 +1427,13 @@ static int ravb_open(struct net_device *ndev)
+       struct device *dev = &pdev->dev;
+       int error;
+ 
++      /* MDIO bus init */
++      error = ravb_mdio_init(priv);
++      if (error) {
++              netdev_err(ndev, "failed to initialize MDIO\n");
++              return error;
++      }
++
+       napi_enable(&priv->napi[RAVB_BE]);
+       napi_enable(&priv->napi[RAVB_NC]);
+ 
+@@ -1459,6 +1511,7 @@ out_free_irq:
+ out_napi_off:
+       napi_disable(&priv->napi[RAVB_NC]);
+       napi_disable(&priv->napi[RAVB_BE]);
++      ravb_mdio_release(priv);
+       return error;
+ }
+ 
+@@ -1757,6 +1810,8 @@ static int ravb_close(struct net_device *ndev)
+       ravb_ring_free(ndev, RAVB_BE);
+       ravb_ring_free(ndev, RAVB_NC);
+ 
++      ravb_mdio_release(priv);
++
+       return 0;
+ }
+ 
+@@ -1858,51 +1913,6 @@ static const struct net_device_ops ravb_netdev_ops = {
+       .ndo_set_mac_address    = eth_mac_addr,
+ };
+ 
+-/* MDIO bus init function */
+-static int ravb_mdio_init(struct ravb_private *priv)
+-{
+-      struct platform_device *pdev = priv->pdev;
+-      struct device *dev = &pdev->dev;
+-      int error;
+-
+-      /* Bitbang init */
+-      priv->mdiobb.ops = &bb_ops;
+-
+-      /* MII controller setting */
+-      priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb);
+-      if (!priv->mii_bus)
+-              return -ENOMEM;
+-
+-      /* Hook up MII support for ethtool */
+-      priv->mii_bus->name = "ravb_mii";
+-      priv->mii_bus->parent = dev;
+-      snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
+-               pdev->name, pdev->id);
+-
+-      /* Register MDIO bus */
+-      error = of_mdiobus_register(priv->mii_bus, dev->of_node);
+-      if (error)
+-              goto out_free_bus;
+-
+-      return 0;
+-
+-out_free_bus:
+-      free_mdio_bitbang(priv->mii_bus);
+-      return error;
+-}
+-
+-/* MDIO bus release function */
+-static int ravb_mdio_release(struct ravb_private *priv)
+-{
+-      /* Unregister mdio bus */
+-      mdiobus_unregister(priv->mii_bus);
+-
+-      /* Free bitbang info */
+-      free_mdio_bitbang(priv->mii_bus);
+-
+-      return 0;
+-}
+-
+ static const struct of_device_id ravb_match_table[] = {
+       { .compatible = "renesas,etheravb-r8a7790", .data = (void *)RCAR_GEN2 },
+       { .compatible = "renesas,etheravb-r8a7794", .data = (void *)RCAR_GEN2 },
+@@ -2132,13 +2142,6 @@ static int ravb_probe(struct platform_device *pdev)
+               eth_hw_addr_random(ndev);
+       }
+ 
+-      /* MDIO bus init */
+-      error = ravb_mdio_init(priv);
+-      if (error) {
+-              dev_err(&pdev->dev, "failed to initialize MDIO\n");
+-              goto out_dma_free;
+-      }
+-
+       netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll, 64);
+       netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll, 64);
+ 
+@@ -2161,8 +2164,6 @@ static int ravb_probe(struct platform_device *pdev)
+ out_napi_del:
+       netif_napi_del(&priv->napi[RAVB_NC]);
+       netif_napi_del(&priv->napi[RAVB_BE]);
+-      ravb_mdio_release(priv);
+-out_dma_free:
+       dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
+                         priv->desc_bat_dma);
+ 
+@@ -2195,7 +2196,6 @@ static int ravb_remove(struct platform_device *pdev)
+       unregister_netdev(ndev);
+       netif_napi_del(&priv->napi[RAVB_NC]);
+       netif_napi_del(&priv->napi[RAVB_BE]);
+-      ravb_mdio_release(priv);
+       pm_runtime_disable(&pdev->dev);
+       free_netdev(ndev);
+       platform_set_drvdata(pdev, NULL);
+diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
+index 090607e725a24..d3ccd6929579a 100644
+--- a/drivers/net/gtp.c
++++ b/drivers/net/gtp.c
+@@ -1187,6 +1187,7 @@ static int gtp_genl_fill_info(struct sk_buff *skb, u32 
snd_portid, u32 snd_seq,
+               goto nlmsg_failure;
+ 
+       if (nla_put_u32(skb, GTPA_VERSION, pctx->gtp_version) ||
++          nla_put_u32(skb, GTPA_LINK, pctx->dev->ifindex) ||
+           nla_put_be32(skb, GTPA_PEER_ADDRESS, pctx->peer_addr_ip4.s_addr) ||
+           nla_put_be32(skb, GTPA_MS_ADDRESS, pctx->ms_addr_ip4.s_addr))
+               goto nla_put_failure;
+diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
+index e9fcf6ef716a8..9bf18127e63a1 100644
+--- a/drivers/net/usb/asix_common.c
++++ b/drivers/net/usb/asix_common.c
+@@ -309,7 +309,7 @@ int asix_read_phy_addr(struct usbnet *dev, int internal)
+ 
+       netdev_dbg(dev->net, "asix_get_phy_addr()\n");
+ 
+-      if (ret < 0) {
++      if (ret < 2) {
+               netdev_err(dev->net, "Error reading PHYID register: %02x\n", 
ret);
+               goto out;
+       }
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 88b8ba0ad2cda..3e3dca59b7a69 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -1216,6 +1216,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x19d2, 0x2002, 4)},    /* ZTE (Vodafone) K3765-Z */
+       {QMI_FIXED_INTF(0x2001, 0x7e19, 4)},    /* D-Link DWM-221 B1 */
+       {QMI_FIXED_INTF(0x2001, 0x7e35, 4)},    /* D-Link DWM-222 */
++      {QMI_FIXED_INTF(0x2001, 0x7e3d, 4)},    /* D-Link DWM-222 A2 */
+       {QMI_FIXED_INTF(0x2020, 0x2031, 4)},    /* Olicard 600 */
+       {QMI_FIXED_INTF(0x2020, 0x2033, 4)},    /* BroadMobi BM806U */
+       {QMI_FIXED_INTF(0x2020, 0x2060, 4)},    /* BroadMobi BM818 */
+@@ -1251,6 +1252,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x2357, 0x9000, 4)},    /* TP-LINK MA260 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */
+       {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)},    /* Telit ME910 */
+       {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)},    /* Telit ME910 dual modem */
+       {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)},    /* Telit LE920 */
+diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
+index e3f060f0b83ea..dd3cb53846290 100644
+--- a/drivers/nvdimm/nd.h
++++ b/drivers/nvdimm/nd.h
+@@ -29,7 +29,6 @@ enum {
+        * BTT instance
+        */
+       ND_MAX_LANES = 256,
+-      SECTOR_SHIFT = 9,
+       INT_LBASIZE_ALIGNMENT = 64,
+       NVDIMM_IO_ATOMIC = 1,
+ };
+diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
+index 09a39f4aaf821..d0be85d0c289a 100644
+--- a/drivers/nvme/target/core.c
++++ b/drivers/nvme/target/core.c
+@@ -208,6 +208,9 @@ static void nvmet_keep_alive_timer(struct work_struct 
*work)
+ 
+ static void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl)
+ {
++      if (unlikely(ctrl->kato == 0))
++              return;
++
+       pr_debug("ctrl %d start keep-alive timer for %d secs\n",
+               ctrl->cntlid, ctrl->kato);
+ 
+@@ -217,6 +220,9 @@ static void nvmet_start_keep_alive_timer(struct nvmet_ctrl 
*ctrl)
+ 
+ static void nvmet_stop_keep_alive_timer(struct nvmet_ctrl *ctrl)
+ {
++      if (unlikely(ctrl->kato == 0))
++              return;
++
+       pr_debug("ctrl %d stop keep-alive\n", ctrl->cntlid);
+ 
+       cancel_delayed_work_sync(&ctrl->ka_work);
+diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c
+index b7a5d1065378d..df1c6dee255bf 100644
+--- a/drivers/nvme/target/fc.c
++++ b/drivers/nvme/target/fc.c
+@@ -1994,9 +1994,9 @@ nvmet_fc_fod_op_done(struct nvmet_fc_fcp_iod *fod)
+                       return;
+               if (fcpreq->fcp_error ||
+                   fcpreq->transferred_length != fcpreq->transfer_length) {
+-                      spin_lock(&fod->flock);
++                      spin_lock_irqsave(&fod->flock, flags);
+                       fod->abort = true;
+-                      spin_unlock(&fod->flock);
++                      spin_unlock_irqrestore(&fod->flock, flags);
+ 
+                       nvmet_req_complete(&fod->req, NVME_SC_INTERNAL);
+                       return;
+diff --git a/drivers/scsi/gdth.h b/drivers/scsi/gdth.h
+index 95fc720c1b304..e6e5ccb1e0f38 100644
+--- a/drivers/scsi/gdth.h
++++ b/drivers/scsi/gdth.h
+@@ -178,9 +178,6 @@
+ #define MSG_SIZE        34                      /* size of message structure 
*/
+ #define MSG_REQUEST     0                       /* async. event: message */
+ 
+-/* cacheservice defines */
+-#define SECTOR_SIZE     0x200                   /* always 512 bytes per sec. 
*/
+-
+ /* DPMEM constants */
+ #define DPMEM_MAGIC     0xC0FFEE11
+ #define IC_HEADER_BYTES 48
+diff --git a/drivers/thermal/ti-soc-thermal/omap4-thermal-data.c 
b/drivers/thermal/ti-soc-thermal/omap4-thermal-data.c
+index fd11133606038..0c3141746edfe 100644
+--- a/drivers/thermal/ti-soc-thermal/omap4-thermal-data.c
++++ b/drivers/thermal/ti-soc-thermal/omap4-thermal-data.c
+@@ -49,20 +49,21 @@ static struct temp_sensor_data 
omap4430_mpu_temp_sensor_data = {
+ 
+ /*
+  * Temperature values in milli degree celsius
+- * ADC code values from 530 to 923
++ * ADC code values from 13 to 107, see TRM
++ * "18.4.10.2.3 ADC Codes Versus Temperature".
+  */
+ static const int
+ omap4430_adc_to_temp[OMAP4430_ADC_END_VALUE - OMAP4430_ADC_START_VALUE + 1] = 
{
+-      -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000, -22000,
+-      -20000, -18000, -17000, -15000, -13000, -12000, -10000, -8000, -6000,
+-      -5000, -3000, -1000, 0, 2000, 3000, 5000, 6000, 8000, 10000, 12000,
+-      13000, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28000, 30000,
+-      32000, 33000, 35000, 37000, 38000, 40000, 42000, 43000, 45000, 47000,
+-      48000, 50000, 52000, 53000, 55000, 57000, 58000, 60000, 62000, 64000,
+-      66000, 68000, 70000, 71000, 73000, 75000, 77000, 78000, 80000, 82000,
+-      83000, 85000, 87000, 88000, 90000, 92000, 93000, 95000, 97000, 98000,
+-      100000, 102000, 103000, 105000, 107000, 109000, 111000, 113000, 115000,
+-      117000, 118000, 120000, 122000, 123000,
++      -40000, -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000,
++      -22000, -20000, -18500, -17000, -15000, -13500, -12000, -10000, -8000,
++      -6500, -5000, -3500, -1500, 0, 2000, 3500, 5000, 6500, 8500, 10000,
++      12000, 13500, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500,
++      30000, 32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,
++      47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000, 62000,
++      64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000, 78500, 80000,
++      82000, 83500, 85000, 87000, 88500, 90000, 92000, 93500, 95000, 97000,
++      98500, 100000, 102000, 103500, 105000, 107000, 109000, 111000, 113000,
++      115000, 117000, 118500, 120000, 122000, 123500, 125000,
+ };
+ 
+ /* OMAP4430 data */
+diff --git a/drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h 
b/drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h
+index 6f2de3a3356d4..86850082b24b9 100644
+--- a/drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h
++++ b/drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h
+@@ -67,9 +67,13 @@
+  * and thresholds for OMAP4430.
+  */
+ 
+-/* ADC conversion table limits */
+-#define OMAP4430_ADC_START_VALUE                      0
+-#define OMAP4430_ADC_END_VALUE                                127
++/*
++ * ADC conversion table limits. Ignore values outside the TRM listed
++ * range to avoid bogus thermal shutdowns. See omap4430 TRM chapter
++ * "18.4.10.2.3 ADC Codes Versus Temperature".
++ */
++#define OMAP4430_ADC_START_VALUE                      13
++#define OMAP4430_ADC_END_VALUE                                107
+ /* bandgap clock limits (no control on 4430) */
+ #define OMAP4430_MAX_FREQ                             32768
+ #define OMAP4430_MIN_FREQ                             32768
+diff --git a/drivers/xen/xenbus/xenbus_client.c 
b/drivers/xen/xenbus/xenbus_client.c
+index e94a61eaeceb0..f7b553faadb10 100644
+--- a/drivers/xen/xenbus/xenbus_client.c
++++ b/drivers/xen/xenbus/xenbus_client.c
+@@ -365,8 +365,14 @@ int xenbus_grant_ring(struct xenbus_device *dev, void 
*vaddr,
+       int i, j;
+ 
+       for (i = 0; i < nr_pages; i++) {
+-              err = gnttab_grant_foreign_access(dev->otherend_id,
+-                                                virt_to_gfn(vaddr), 0);
++              unsigned long gfn;
++
++              if (is_vmalloc_addr(vaddr))
++                      gfn = pfn_to_gfn(vmalloc_to_pfn(vaddr));
++              else
++                      gfn = virt_to_gfn(vaddr);
++
++              err = gnttab_grant_foreign_access(dev->otherend_id, gfn, 0);
+               if (err < 0) {
+                       xenbus_dev_fatal(dev, err,
+                                        "granting access to ring page");
+diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c
+index 185d5ab7e986a..a80ce75b5bad1 100644
+--- a/fs/affs/amigaffs.c
++++ b/fs/affs/amigaffs.c
+@@ -419,24 +419,51 @@ affs_mode_to_prot(struct inode *inode)
+       u32 prot = AFFS_I(inode)->i_protect;
+       umode_t mode = inode->i_mode;
+ 
++      /*
++       * First, clear all RWED bits for owner, group, other.
++       * Then, recalculate them afresh.
++       *
++       * We'll always clear the delete-inhibit bit for the owner, as that is
++       * the classic single-user mode AmigaOS protection bit and we need to
++       * stay compatible with all scenarios.
++       *
++       * Since multi-user AmigaOS is an extension, we'll only set the
++       * delete-allow bit if any of the other bits in the same user class
++       * (group/other) are used.
++       */
++      prot &= ~(FIBF_NOEXECUTE | FIBF_NOREAD
++                | FIBF_NOWRITE | FIBF_NODELETE
++                | FIBF_GRP_EXECUTE | FIBF_GRP_READ
++                | FIBF_GRP_WRITE   | FIBF_GRP_DELETE
++                | FIBF_OTR_EXECUTE | FIBF_OTR_READ
++                | FIBF_OTR_WRITE   | FIBF_OTR_DELETE);
++
++      /* Classic single-user AmigaOS flags. These are inverted. */
+       if (!(mode & 0100))
+               prot |= FIBF_NOEXECUTE;
+       if (!(mode & 0400))
+               prot |= FIBF_NOREAD;
+       if (!(mode & 0200))
+               prot |= FIBF_NOWRITE;
++
++      /* Multi-user extended flags. Not inverted. */
+       if (mode & 0010)
+               prot |= FIBF_GRP_EXECUTE;
+       if (mode & 0040)
+               prot |= FIBF_GRP_READ;
+       if (mode & 0020)
+               prot |= FIBF_GRP_WRITE;
++      if (mode & 0070)
++              prot |= FIBF_GRP_DELETE;
++
+       if (mode & 0001)
+               prot |= FIBF_OTR_EXECUTE;
+       if (mode & 0004)
+               prot |= FIBF_OTR_READ;
+       if (mode & 0002)
+               prot |= FIBF_OTR_WRITE;
++      if (mode & 0007)
++              prot |= FIBF_OTR_DELETE;
+ 
+       AFFS_I(inode)->i_protect = prot;
+ }
+diff --git a/fs/affs/file.c b/fs/affs/file.c
+index a85817f54483f..ba084b0b214b9 100644
+--- a/fs/affs/file.c
++++ b/fs/affs/file.c
+@@ -428,6 +428,24 @@ static int affs_write_begin(struct file *file, struct 
address_space *mapping,
+       return ret;
+ }
+ 
++static int affs_write_end(struct file *file, struct address_space *mapping,
++                        loff_t pos, unsigned int len, unsigned int copied,
++                        struct page *page, void *fsdata)
++{
++      struct inode *inode = mapping->host;
++      int ret;
++
++      ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
++
++      /* Clear Archived bit on file writes, as AmigaOS would do */
++      if (AFFS_I(inode)->i_protect & FIBF_ARCHIVED) {
++              AFFS_I(inode)->i_protect &= ~FIBF_ARCHIVED;
++              mark_inode_dirty(inode);
++      }
++
++      return ret;
++}
++
+ static sector_t _affs_bmap(struct address_space *mapping, sector_t block)
+ {
+       return generic_block_bmap(mapping,block,affs_get_block);
+@@ -437,7 +455,7 @@ const struct address_space_operations affs_aops = {
+       .readpage = affs_readpage,
+       .writepage = affs_writepage,
+       .write_begin = affs_write_begin,
+-      .write_end = generic_write_end,
++      .write_end = affs_write_end,
+       .direct_IO = affs_direct_IO,
+       .bmap = _affs_bmap
+ };
+@@ -794,6 +812,12 @@ done:
+       if (tmp > inode->i_size)
+               inode->i_size = AFFS_I(inode)->mmu_private = tmp;
+ 
++      /* Clear Archived bit on file writes, as AmigaOS would do */
++      if (AFFS_I(inode)->i_protect & FIBF_ARCHIVED) {
++              AFFS_I(inode)->i_protect &= ~FIBF_ARCHIVED;
++              mark_inode_dirty(inode);
++      }
++
+ err_first_bh:
+       unlock_page(page);
+       put_page(page);
+diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
+index f5a8c0d26cf36..cf1e8ba50f6bf 100644
+--- a/fs/btrfs/ctree.c
++++ b/fs/btrfs/ctree.c
+@@ -1367,7 +1367,8 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, 
struct btrfs_path *path,
+       btrfs_tree_read_unlock_blocking(eb);
+       free_extent_buffer(eb);
+ 
+-      extent_buffer_get(eb_rewin);
++      btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb_rewin),
++                                     eb_rewin, btrfs_header_level(eb_rewin));
+       btrfs_tree_read_lock(eb_rewin);
+       __tree_mod_log_rewind(fs_info, eb_rewin, time_seq, tm);
+       WARN_ON(btrfs_header_nritems(eb_rewin) >
+@@ -1438,8 +1439,6 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
+ 
+       if (!eb)
+               return NULL;
+-      extent_buffer_get(eb);
+-      btrfs_tree_read_lock(eb);
+       if (old_root) {
+               btrfs_set_header_bytenr(eb, eb->start);
+               btrfs_set_header_backref_rev(eb, BTRFS_MIXED_BACKREF_REV);
+@@ -1447,6 +1446,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
+               btrfs_set_header_level(eb, old_root->level);
+               btrfs_set_header_generation(eb, old_generation);
+       }
++      btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb), eb,
++                                     btrfs_header_level(eb));
++      btrfs_tree_read_lock(eb);
+       if (tm)
+               __tree_mod_log_rewind(fs_info, eb, time_seq, tm);
+       else
+diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
+index ef1fd6a09d8e5..0ba338cffa937 100644
+--- a/fs/btrfs/extent_io.c
++++ b/fs/btrfs/extent_io.c
+@@ -5448,9 +5448,9 @@ void read_extent_buffer(const struct extent_buffer *eb, 
void *dstv,
+       }
+ }
+ 
+-int read_extent_buffer_to_user(const struct extent_buffer *eb,
+-                             void __user *dstv,
+-                             unsigned long start, unsigned long len)
++int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb,
++                                     void __user *dstv,
++                                     unsigned long start, unsigned long len)
+ {
+       size_t cur;
+       size_t offset;
+@@ -5471,7 +5471,7 @@ int read_extent_buffer_to_user(const struct 
extent_buffer *eb,
+ 
+               cur = min(len, (PAGE_SIZE - offset));
+               kaddr = page_address(page);
+-              if (copy_to_user(dst, kaddr + offset, cur)) {
++              if (probe_user_write(dst, kaddr + offset, cur)) {
+                       ret = -EFAULT;
+                       break;
+               }
+diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
+index e5535bbe69537..90c5095ae97ee 100644
+--- a/fs/btrfs/extent_io.h
++++ b/fs/btrfs/extent_io.h
+@@ -455,9 +455,9 @@ int memcmp_extent_buffer(const struct extent_buffer *eb, 
const void *ptrv,
+ void read_extent_buffer(const struct extent_buffer *eb, void *dst,
+                       unsigned long start,
+                       unsigned long len);
+-int read_extent_buffer_to_user(const struct extent_buffer *eb,
+-                             void __user *dst, unsigned long start,
+-                             unsigned long len);
++int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb,
++                                     void __user *dst, unsigned long start,
++                                     unsigned long len);
+ void write_extent_buffer_fsid(struct extent_buffer *eb, const void *src);
+ void write_extent_buffer_chunk_tree_uuid(struct extent_buffer *eb,
+               const void *src);
+diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
+index e82b4f3f490c1..7b3e41987d072 100644
+--- a/fs/btrfs/ioctl.c
++++ b/fs/btrfs/ioctl.c
+@@ -2021,9 +2021,14 @@ static noinline int copy_to_sk(struct btrfs_path *path,
+               sh.len = item_len;
+               sh.transid = found_transid;
+ 
+-              /* copy search result header */
+-              if (copy_to_user(ubuf + *sk_offset, &sh, sizeof(sh))) {
+-                      ret = -EFAULT;
++              /*
++               * Copy search result header. If we fault then loop again so we
++               * can fault in the pages and -EFAULT there if there's a
++               * problem. Otherwise we'll fault and then copy the buffer in
++               * properly this next time through
++               */
++              if (probe_user_write(ubuf + *sk_offset, &sh, sizeof(sh))) {
++                      ret = 0;
+                       goto out;
+               }
+ 
+@@ -2031,10 +2036,14 @@ static noinline int copy_to_sk(struct btrfs_path *path,
+ 
+               if (item_len) {
+                       char __user *up = ubuf + *sk_offset;
+-                      /* copy the item */
+-                      if (read_extent_buffer_to_user(leaf, up,
+-                                                     item_off, item_len)) {
+-                              ret = -EFAULT;
++                      /*
++                       * Copy the item, same behavior as above, but reset the
++                       * * sk_offset so we copy the full thing again.
++                       */
++                      if (read_extent_buffer_to_user_nofault(leaf, up,
++                                              item_off, item_len)) {
++                              ret = 0;
++                              *sk_offset -= sizeof(sh);
+                               goto out;
+                       }
+ 
+@@ -2122,6 +2131,10 @@ static noinline int search_ioctl(struct inode *inode,
+       key.offset = sk->min_offset;
+ 
+       while (1) {
++              ret = fault_in_pages_writeable(ubuf, *buf_size - sk_offset);
++              if (ret)
++                      break;
++
+               ret = btrfs_search_forward(root, &key, path, sk->min_transid);
+               if (ret != 0) {
+                       if (ret > 0)
+diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
+index 4ff96e0aa26a9..a57f847303fcd 100644
+--- a/fs/btrfs/volumes.c
++++ b/fs/btrfs/volumes.c
+@@ -4174,6 +4174,7 @@ static int btrfs_uuid_scan_kthread(void *data)
+                       goto skip;
+               }
+ update_tree:
++              btrfs_release_path(path);
+               if (!btrfs_is_empty_uuid(root_item.uuid)) {
+                       ret = btrfs_uuid_tree_add(trans, fs_info,
+                                                 root_item.uuid,
+@@ -4199,6 +4200,7 @@ update_tree:
+               }
+ 
+ skip:
++              btrfs_release_path(path);
+               if (trans) {
+                       ret = btrfs_end_transaction(trans);
+                       trans = NULL;
+@@ -4206,7 +4208,6 @@ skip:
+                               break;
+               }
+ 
+-              btrfs_release_path(path);
+               if (key.offset < (u64)-1) {
+                       key.offset++;
+               } else if (key.type < BTRFS_ROOT_ITEM_KEY) {
+diff --git a/fs/ceph/file.c b/fs/ceph/file.c
+index 6d653235e323b..1f873034f4691 100644
+--- a/fs/ceph/file.c
++++ b/fs/ceph/file.c
+@@ -1728,6 +1728,7 @@ const struct file_operations ceph_file_fops = {
+       .mmap = ceph_mmap,
+       .fsync = ceph_fsync,
+       .lock = ceph_lock,
++      .setlease = simple_nosetlease,
+       .flock = ceph_flock,
+       .splice_read = generic_file_splice_read,
+       .splice_write = iter_file_splice_write,
+diff --git a/fs/eventpoll.c b/fs/eventpoll.c
+index 00f0902e27e88..af9dfa494b1fa 100644
+--- a/fs/eventpoll.c
++++ b/fs/eventpoll.c
+@@ -1901,9 +1901,9 @@ static int ep_loop_check_proc(void *priv, void *cookie, 
int call_nests)
+                        * during ep_insert().
+                        */
+                       if (list_empty(&epi->ffd.file->f_tfile_llink)) {
+-                              get_file(epi->ffd.file);
+-                              list_add(&epi->ffd.file->f_tfile_llink,
+-                                       &tfile_check_list);
++                              if (get_file_rcu(epi->ffd.file))
++                                      list_add(&epi->ffd.file->f_tfile_llink,
++                                               &tfile_check_list);
+                       }
+               }
+       }
+diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
+index 5999d80316759..1c3d774d3c839 100644
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -1015,6 +1015,19 @@ static inline struct request_queue 
*bdev_get_queue(struct block_device *bdev)
+       return bdev->bd_disk->queue;    /* this is never NULL */
+ }
+ 
++/*
++ * The basic unit of block I/O is a sector. It is used in a number of contexts
++ * in Linux (blk, bio, genhd). The size of one sector is 512 = 2**9
++ * bytes. Variables of type sector_t represent an offset or size that is a
++ * multiple of 512 bytes. Hence these two constants.
++ */
++#ifndef SECTOR_SHIFT
++#define SECTOR_SHIFT 9
++#endif
++#ifndef SECTOR_SIZE
++#define SECTOR_SIZE (1 << SECTOR_SHIFT)
++#endif
++
+ /*
+  * blk_rq_pos()                       : the current sector
+  * blk_rq_bytes()             : bytes left in the entire request
+@@ -1042,12 +1055,12 @@ extern unsigned int blk_rq_err_bytes(const struct 
request *rq);
+ 
+ static inline unsigned int blk_rq_sectors(const struct request *rq)
+ {
+-      return blk_rq_bytes(rq) >> 9;
++      return blk_rq_bytes(rq) >> SECTOR_SHIFT;
+ }
+ 
+ static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
+ {
+-      return blk_rq_cur_bytes(rq) >> 9;
++      return blk_rq_cur_bytes(rq) >> SECTOR_SHIFT;
+ }
+ 
+ /*
+@@ -1067,7 +1080,8 @@ static inline unsigned int 
blk_queue_get_max_sectors(struct request_queue *q,
+                                                    int op)
+ {
+       if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE))
+-              return min(q->limits.max_discard_sectors, UINT_MAX >> 9);
++              return min(q->limits.max_discard_sectors,
++                         UINT_MAX >> SECTOR_SHIFT);
+ 
+       if (unlikely(op == REQ_OP_WRITE_SAME))
+               return q->limits.max_write_same_sectors;
+@@ -1376,16 +1390,21 @@ extern int blkdev_issue_zeroout(struct block_device 
*bdev, sector_t sector,
+ static inline int sb_issue_discard(struct super_block *sb, sector_t block,
+               sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)
+ {
+-      return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits 
- 9),
+-                                  nr_blocks << (sb->s_blocksize_bits - 9),
++      return blkdev_issue_discard(sb->s_bdev,
++                                  block << (sb->s_blocksize_bits -
++                                            SECTOR_SHIFT),
++                                  nr_blocks << (sb->s_blocksize_bits -
++                                                SECTOR_SHIFT),
+                                   gfp_mask, flags);
+ }
+ static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
+               sector_t nr_blocks, gfp_t gfp_mask)
+ {
+       return blkdev_issue_zeroout(sb->s_bdev,
+-                                  block << (sb->s_blocksize_bits - 9),
+-                                  nr_blocks << (sb->s_blocksize_bits - 9),
++                                  block << (sb->s_blocksize_bits -
++                                            SECTOR_SHIFT),
++                                  nr_blocks << (sb->s_blocksize_bits -
++                                                SECTOR_SHIFT),
+                                   gfp_mask, 0);
+ }
+ 
+@@ -1492,7 +1511,8 @@ static inline int queue_alignment_offset(struct 
request_queue *q)
+ static inline int queue_limit_alignment_offset(struct queue_limits *lim, 
sector_t sector)
+ {
+       unsigned int granularity = max(lim->physical_block_size, lim->io_min);
+-      unsigned int alignment = sector_div(sector, granularity >> 9) << 9;
++      unsigned int alignment = sector_div(sector, granularity >> SECTOR_SHIFT)
++              << SECTOR_SHIFT;
+ 
+       return (granularity + lim->alignment_offset - alignment) % granularity;
+ }
+@@ -1526,8 +1546,8 @@ static inline int queue_limit_discard_alignment(struct 
queue_limits *lim, sector
+               return 0;
+ 
+       /* Why are these in bytes, not sectors? */
+-      alignment = lim->discard_alignment >> 9;
+-      granularity = lim->discard_granularity >> 9;
++      alignment = lim->discard_alignment >> SECTOR_SHIFT;
++      granularity = lim->discard_granularity >> SECTOR_SHIFT;
+       if (!granularity)
+               return 0;
+ 
+@@ -1538,7 +1558,7 @@ static inline int queue_limit_discard_alignment(struct 
queue_limits *lim, sector
+       offset = (granularity + alignment - offset) % granularity;
+ 
+       /* Turn it back into bytes, gaah */
+-      return offset << 9;
++      return offset << SECTOR_SHIFT;
+ }
+ 
+ static inline int bdev_discard_alignment(struct block_device *bdev)
+diff --git a/include/linux/bvec.h b/include/linux/bvec.h
+index ec8a4d7af6bda..f7dc68cd0a392 100644
+--- a/include/linux/bvec.h
++++ b/include/linux/bvec.h
+@@ -119,10 +119,17 @@ static inline bool bvec_iter_rewind(const struct bio_vec 
*bv,
+       return true;
+ }
+ 
++static inline void bvec_iter_skip_zero_bvec(struct bvec_iter *iter)
++{
++      iter->bi_bvec_done = 0;
++      iter->bi_idx++;
++}
++
+ #define for_each_bvec(bvl, bio_vec, iter, start)                      \
+       for (iter = (start);                                            \
+            (iter).bi_size &&                                          \
+               ((bvl = bvec_iter_bvec((bio_vec), (iter))), 1); \
+-           bvec_iter_advance((bio_vec), &(iter), (bvl).bv_len))
++           (bvl).bv_len ? (void)bvec_iter_advance((bio_vec), &(iter), \
++                   (bvl).bv_len) : bvec_iter_skip_zero_bvec(&(iter)))
+ 
+ #endif /* __LINUX_BVEC_ITER_H */
+diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
+index 91a063a1f3b37..5d067136fc27d 100644
+--- a/include/linux/device-mapper.h
++++ b/include/linux/device-mapper.h
+@@ -577,8 +577,6 @@ do {                                                       
                \
+ #define DMEMIT(x...) sz += ((sz >= maxlen) ? \
+                         0 : scnprintf(result + sz, maxlen - sz, x))
+ 
+-#define SECTOR_SHIFT 9
+-
+ /*
+  * Definitions of return values from target end_io function.
+  */
+diff --git a/include/linux/hid.h b/include/linux/hid.h
+index ba1f675598314..40409453ef3e5 100644
+--- a/include/linux/hid.h
++++ b/include/linux/hid.h
+@@ -919,34 +919,49 @@ static inline void hid_device_io_stop(struct hid_device 
*hid) {
+  * @max: maximal valid usage->code to consider later (out parameter)
+  * @type: input event type (EV_KEY, EV_REL, ...)
+  * @c: code which corresponds to this usage and type
++ *
++ * The value pointed to by @bit will be set to NULL if either @type is
++ * an unhandled event type, or if @c is out of range for @type. This
++ * can be used as an error condition.
+  */
+ static inline void hid_map_usage(struct hid_input *hidinput,
+               struct hid_usage *usage, unsigned long **bit, int *max,
+-              __u8 type, __u16 c)
++              __u8 type, unsigned int c)
+ {
+       struct input_dev *input = hidinput->input;
+-
+-      usage->type = type;
+-      usage->code = c;
++      unsigned long *bmap = NULL;
++      unsigned int limit = 0;
+ 
+       switch (type) {
+       case EV_ABS:
+-              *bit = input->absbit;
+-              *max = ABS_MAX;
++              bmap = input->absbit;
++              limit = ABS_MAX;
+               break;
+       case EV_REL:
+-              *bit = input->relbit;
+-              *max = REL_MAX;
++              bmap = input->relbit;
++              limit = REL_MAX;
+               break;
+       case EV_KEY:
+-              *bit = input->keybit;
+-              *max = KEY_MAX;
++              bmap = input->keybit;
++              limit = KEY_MAX;
+               break;
+       case EV_LED:
+-              *bit = input->ledbit;
+-              *max = LED_MAX;
++              bmap = input->ledbit;
++              limit = LED_MAX;
+               break;
+       }
++
++      if (unlikely(c > limit || !bmap)) {
++              pr_warn_ratelimited("%s: Invalid code %d type %d\n",
++                                  input->name, c, type);
++              *bit = NULL;
++              return;
++      }
++
++      usage->type = type;
++      usage->code = c;
++      *max = limit;
++      *bit = bmap;
+ }
+ 
+ /**
+@@ -960,7 +975,8 @@ static inline void hid_map_usage_clear(struct hid_input 
*hidinput,
+               __u8 type, __u16 c)
+ {
+       hid_map_usage(hidinput, usage, bit, max, type, c);
+-      clear_bit(c, *bit);
++      if (*bit)
++              clear_bit(usage->code, *bit);
+ }
+ 
+ /**
+diff --git a/include/linux/ide.h b/include/linux/ide.h
+index 70db3af045417..9885080c21c5c 100644
+--- a/include/linux/ide.h
++++ b/include/linux/ide.h
+@@ -165,7 +165,6 @@ struct ide_io_ports {
+  */
+ #define PARTN_BITS    6       /* number of minor dev bits for partitions */
+ #define MAX_DRIVES    2       /* per interface; 2 assumed by lots of code */
+-#define SECTOR_SIZE   512
+ 
+ /*
+  * Timeouts for various operations:
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index 5c9a44e3a0278..f772c55ed901d 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -440,6 +440,7 @@ enum {
+       ATA_HORKAGE_NO_DMA_LOG  = (1 << 23),    /* don't use DMA for log read */
+       ATA_HORKAGE_NOTRIM      = (1 << 24),    /* don't use TRIM */
+       ATA_HORKAGE_MAX_SEC_1024 = (1 << 25),   /* Limit max sects to 1024 */
++      ATA_HORKAGE_MAX_TRIM_128M = (1 << 26),  /* Limit max trim size to 128M 
*/
+ 
+        /* DMA mask for user DMA control: User visible values; DO NOT
+           renumber */
+diff --git a/include/linux/log2.h b/include/linux/log2.h
+index c373295f359fa..cca606609e1bc 100644
+--- a/include/linux/log2.h
++++ b/include/linux/log2.h
+@@ -159,7 +159,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
+ #define roundup_pow_of_two(n)                 \
+ (                                             \
+       __builtin_constant_p(n) ? (             \
+-              (n == 1) ? 1 :                  \
++              ((n) == 1) ? 1 :                \
+               (1UL << (ilog2((n) - 1) + 1))   \
+                                  ) :          \
+       __roundup_pow_of_two(n)                 \
+diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
+index ec4f0053d6d8e..d49f193a44a29 100644
+--- a/include/linux/uaccess.h
++++ b/include/linux/uaccess.h
+@@ -242,6 +242,17 @@ static inline unsigned long 
__copy_from_user_inatomic_nocache(void *to,
+ extern long probe_kernel_read(void *dst, const void *src, size_t size);
+ extern long __probe_kernel_read(void *dst, const void *src, size_t size);
+ 
++/*
++ * probe_user_read(): safely attempt to read from a location in user space
++ * @dst: pointer to the buffer that shall take the data
++ * @src: address to read from
++ * @size: size of the data chunk
++ *
++ * Safely read from address @src to the buffer at @dst.  If a kernel fault
++ * happens, handle that and return -EFAULT.
++ */
++extern long probe_user_read(void *dst, const void __user *src, size_t size);
++
+ /*
+  * probe_kernel_write(): safely attempt to write to a location
+  * @dst: address to write to
+@@ -254,7 +265,22 @@ extern long __probe_kernel_read(void *dst, const void 
*src, size_t size);
+ extern long notrace probe_kernel_write(void *dst, const void *src, size_t 
size);
+ extern long notrace __probe_kernel_write(void *dst, const void *src, size_t 
size);
+ 
++/*
++ * probe_user_write(): safely attempt to write to a location in user space
++ * @dst: address to write to
++ * @src: pointer to the data that shall be written
++ * @size: size of the data chunk
++ *
++ * Safely write to address @dst from the buffer at @src.  If a kernel fault
++ * happens, handle that and return -EFAULT.
++ */
++extern long notrace probe_user_write(void __user *dst, const void *src, 
size_t size);
++extern long notrace __probe_user_write(void __user *dst, const void *src, 
size_t size);
++
+ extern long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long 
count);
++extern long strncpy_from_unsafe_user(char *dst, const void __user 
*unsafe_addr,
++                                   long count);
++extern long strnlen_unsafe_user(const void __user *unsafe_addr, long count);
+ 
+ /**
+  * probe_kernel_address(): safely attempt to read from a location
+diff --git a/include/net/netfilter/nf_tables.h 
b/include/net/netfilter/nf_tables.h
+index a9704c57430db..3107895115c25 100644
+--- a/include/net/netfilter/nf_tables.h
++++ b/include/net/netfilter/nf_tables.h
+@@ -136,6 +136,8 @@ static inline u8 nft_reg_load8(u32 *sreg)
+ static inline void nft_data_copy(u32 *dst, const struct nft_data *src,
+                                unsigned int len)
+ {
++      if (len % NFT_REG32_SIZE)
++              dst[len / NFT_REG32_SIZE] = 0;
+       memcpy(dst, src, len);
+ }
+ 
+diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h
+index a45d0754102e0..fde753735abae 100644
+--- a/include/uapi/linux/msdos_fs.h
++++ b/include/uapi/linux/msdos_fs.h
+@@ -10,7 +10,9 @@
+  * The MS-DOS filesystem constants/structures
+  */
+ 
++#ifndef SECTOR_SIZE
+ #define SECTOR_SIZE   512             /* sector size (bytes) */
++#endif
+ #define SECTOR_BITS   9               /* log2(SECTOR_SIZE) */
+ #define MSDOS_DPB     (MSDOS_DPS)     /* dir entries per block */
+ #define MSDOS_DPB_BITS        4               /* log2(MSDOS_DPB) */
+diff --git a/include/uapi/linux/netfilter/nf_tables.h 
b/include/uapi/linux/netfilter/nf_tables.h
+index a3ee277b17a17..49b6997c32550 100644
+--- a/include/uapi/linux/netfilter/nf_tables.h
++++ b/include/uapi/linux/netfilter/nf_tables.h
+@@ -125,7 +125,7 @@ enum nf_tables_msg_types {
+  * @NFTA_LIST_ELEM: list element (NLA_NESTED)
+  */
+ enum nft_list_attributes {
+-      NFTA_LIST_UNPEC,
++      NFTA_LIST_UNSPEC,
+       NFTA_LIST_ELEM,
+       __NFTA_LIST_MAX
+ };
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index 194125cf2d2b9..3d919635004e9 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -2911,6 +2911,22 @@ static unsigned int cpuset_mems_nr(unsigned int *array)
+ }
+ 
+ #ifdef CONFIG_SYSCTL
++static int proc_hugetlb_doulongvec_minmax(struct ctl_table *table, int write,
++                                        void *buffer, size_t *length,
++                                        loff_t *ppos, unsigned long *out)
++{
++      struct ctl_table dup_table;
++
++      /*
++       * In order to avoid races with __do_proc_doulongvec_minmax(), we
++       * can duplicate the @table and alter the duplicate of it.
++       */
++      dup_table = *table;
++      dup_table.data = out;
++
++      return proc_doulongvec_minmax(&dup_table, write, buffer, length, ppos);
++}
++
+ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+                        struct ctl_table *table, int write,
+                        void __user *buffer, size_t *length, loff_t *ppos)
+@@ -2922,9 +2938,8 @@ static int hugetlb_sysctl_handler_common(bool 
obey_mempolicy,
+       if (!hugepages_supported())
+               return -EOPNOTSUPP;
+ 
+-      table->data = &tmp;
+-      table->maxlen = sizeof(unsigned long);
+-      ret = proc_doulongvec_minmax(table, write, buffer, length, ppos);
++      ret = proc_hugetlb_doulongvec_minmax(table, write, buffer, length, ppos,
++                                           &tmp);
+       if (ret)
+               goto out;
+ 
+@@ -2968,9 +2983,8 @@ int hugetlb_overcommit_handler(struct ctl_table *table, 
int write,
+       if (write && hstate_is_gigantic(h))
+               return -EINVAL;
+ 
+-      table->data = &tmp;
+-      table->maxlen = sizeof(unsigned long);
+-      ret = proc_doulongvec_minmax(table, write, buffer, length, ppos);
++      ret = proc_hugetlb_doulongvec_minmax(table, write, buffer, length, ppos,
++                                           &tmp);
+       if (ret)
+               goto out;
+ 
+diff --git a/mm/maccess.c b/mm/maccess.c
+index 78f9274dd49d0..03ea550f5a743 100644
+--- a/mm/maccess.c
++++ b/mm/maccess.c
+@@ -5,8 +5,32 @@
+ #include <linux/mm.h>
+ #include <linux/uaccess.h>
+ 
++static __always_inline long
++probe_read_common(void *dst, const void __user *src, size_t size)
++{
++      long ret;
++
++      pagefault_disable();
++      ret = __copy_from_user_inatomic(dst, src, size);
++      pagefault_enable();
++
++      return ret ? -EFAULT : 0;
++}
++
++static __always_inline long
++probe_write_common(void __user *dst, const void *src, size_t size)
++{
++      long ret;
++
++      pagefault_disable();
++      ret = __copy_to_user_inatomic(dst, src, size);
++      pagefault_enable();
++
++      return ret ? -EFAULT : 0;
++}
++
+ /**
+- * probe_kernel_read(): safely attempt to read from a location
++ * probe_kernel_read(): safely attempt to read from a kernel-space location
+  * @dst: pointer to the buffer that shall take the data
+  * @src: address to read from
+  * @size: size of the data chunk
+@@ -29,16 +53,40 @@ long __probe_kernel_read(void *dst, const void *src, 
size_t size)
+       mm_segment_t old_fs = get_fs();
+ 
+       set_fs(KERNEL_DS);
+-      pagefault_disable();
+-      ret = __copy_from_user_inatomic(dst,
+-                      (__force const void __user *)src, size);
+-      pagefault_enable();
++      ret = probe_read_common(dst, (__force const void __user *)src, size);
+       set_fs(old_fs);
+ 
+-      return ret ? -EFAULT : 0;
++      return ret;
+ }
+ EXPORT_SYMBOL_GPL(probe_kernel_read);
+ 
++/**
++ * probe_user_read(): safely attempt to read from a user-space location
++ * @dst: pointer to the buffer that shall take the data
++ * @src: address to read from. This must be a user address.
++ * @size: size of the data chunk
++ *
++ * Safely read from user address @src to the buffer at @dst. If a kernel fault
++ * happens, handle that and return -EFAULT.
++ */
++
++long __weak probe_user_read(void *dst, const void __user *src, size_t size)
++    __attribute__((alias("__probe_user_read")));
++
++long __probe_user_read(void *dst, const void __user *src, size_t size)
++{
++      long ret = -EFAULT;
++      mm_segment_t old_fs = get_fs();
++
++      set_fs(USER_DS);
++      if (access_ok(VERIFY_READ, src, size))
++              ret = probe_read_common(dst, src, size);
++      set_fs(old_fs);
++
++      return ret;
++}
++EXPORT_SYMBOL_GPL(probe_user_read);
++
+ /**
+  * probe_kernel_write(): safely attempt to write to a location
+  * @dst: address to write to
+@@ -48,6 +96,7 @@ EXPORT_SYMBOL_GPL(probe_kernel_read);
+  * Safely write to address @dst from the buffer at @src.  If a kernel fault
+  * happens, handle that and return -EFAULT.
+  */
++
+ long __weak probe_kernel_write(void *dst, const void *src, size_t size)
+     __attribute__((alias("__probe_kernel_write")));
+ 
+@@ -57,15 +106,40 @@ long __probe_kernel_write(void *dst, const void *src, 
size_t size)
+       mm_segment_t old_fs = get_fs();
+ 
+       set_fs(KERNEL_DS);
+-      pagefault_disable();
+-      ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
+-      pagefault_enable();
++      ret = probe_write_common((__force void __user *)dst, src, size);
+       set_fs(old_fs);
+ 
+-      return ret ? -EFAULT : 0;
++      return ret;
+ }
+ EXPORT_SYMBOL_GPL(probe_kernel_write);
+ 
++/**
++ * probe_user_write(): safely attempt to write to a user-space location
++ * @dst: address to write to
++ * @src: pointer to the data that shall be written
++ * @size: size of the data chunk
++ *
++ * Safely write to address @dst from the buffer at @src.  If a kernel fault
++ * happens, handle that and return -EFAULT.
++ */
++
++long __weak probe_user_write(void __user *dst, const void *src, size_t size)
++    __attribute__((alias("__probe_user_write")));
++
++long __probe_user_write(void __user *dst, const void *src, size_t size)
++{
++      long ret = -EFAULT;
++      mm_segment_t old_fs = get_fs();
++
++      set_fs(USER_DS);
++      if (access_ok(VERIFY_WRITE, dst, size))
++              ret = probe_write_common(dst, src, size);
++      set_fs(old_fs);
++
++      return ret;
++}
++EXPORT_SYMBOL_GPL(probe_user_write);
++
+ /**
+  * strncpy_from_unsafe: - Copy a NUL terminated string from unsafe address.
+  * @dst:   Destination address, in kernel space.  This buffer must be at
+@@ -105,3 +179,76 @@ long strncpy_from_unsafe(char *dst, const void 
*unsafe_addr, long count)
+ 
+       return ret ? -EFAULT : src - unsafe_addr;
+ }
++
++/**
++ * strncpy_from_unsafe_user: - Copy a NUL terminated string from unsafe user
++ *                            address.
++ * @dst:   Destination address, in kernel space.  This buffer must be at
++ *         least @count bytes long.
++ * @unsafe_addr: Unsafe user address.
++ * @count: Maximum number of bytes to copy, including the trailing NUL.
++ *
++ * Copies a NUL-terminated string from unsafe user address to kernel buffer.
++ *
++ * On success, returns the length of the string INCLUDING the trailing NUL.
++ *
++ * If access fails, returns -EFAULT (some data may have been copied
++ * and the trailing NUL added).
++ *
++ * If @count is smaller than the length of the string, copies @count-1 bytes,
++ * sets the last byte of @dst buffer to NUL and returns @count.
++ */
++long strncpy_from_unsafe_user(char *dst, const void __user *unsafe_addr,
++                            long count)
++{
++      mm_segment_t old_fs = get_fs();
++      long ret;
++
++      if (unlikely(count <= 0))
++              return 0;
++
++      set_fs(USER_DS);
++      pagefault_disable();
++      ret = strncpy_from_user(dst, unsafe_addr, count);
++      pagefault_enable();
++      set_fs(old_fs);
++
++      if (ret >= count) {
++              ret = count;
++              dst[ret - 1] = '\0';
++      } else if (ret > 0) {
++              ret++;
++      }
++
++      return ret;
++}
++
++/**
++ * strnlen_unsafe_user: - Get the size of a user string INCLUDING final NUL.
++ * @unsafe_addr: The string to measure.
++ * @count: Maximum count (including NUL)
++ *
++ * Get the size of a NUL-terminated string in user space without pagefault.
++ *
++ * Returns the size of the string INCLUDING the terminating NUL.
++ *
++ * If the string is too long, returns a number larger than @count. User
++ * has to check the return value against "> count".
++ * On exception (or invalid count), returns 0.
++ *
++ * Unlike strnlen_user, this can be used from IRQ handler etc. because
++ * it disables pagefaults.
++ */
++long strnlen_unsafe_user(const void __user *unsafe_addr, long count)
++{
++      mm_segment_t old_fs = get_fs();
++      int ret;
++
++      set_fs(USER_DS);
++      pagefault_disable();
++      ret = strnlen_user(unsafe_addr, count);
++      pagefault_enable();
++      set_fs(old_fs);
++
++      return ret;
++}
+diff --git a/mm/slub.c b/mm/slub.c
+index 09d4cc4391bb2..db2639832037d 100644
+--- a/mm/slub.c
++++ b/mm/slub.c
+@@ -659,12 +659,12 @@ static void slab_fix(struct kmem_cache *s, char *fmt, 
...)
+ }
+ 
+ static bool freelist_corrupted(struct kmem_cache *s, struct page *page,
+-                             void *freelist, void *nextfree)
++                             void **freelist, void *nextfree)
+ {
+       if ((s->flags & SLAB_CONSISTENCY_CHECKS) &&
+-          !check_valid_pointer(s, page, nextfree)) {
+-              object_err(s, page, freelist, "Freechain corrupt");
+-              freelist = NULL;
++          !check_valid_pointer(s, page, nextfree) && freelist) {
++              object_err(s, page, *freelist, "Freechain corrupt");
++              *freelist = NULL;
+               slab_fix(s, "Isolate corrupted freechain");
+               return true;
+       }
+@@ -1354,7 +1354,7 @@ static inline void dec_slabs_node(struct kmem_cache *s, 
int node,
+                                                       int objects) {}
+ 
+ static bool freelist_corrupted(struct kmem_cache *s, struct page *page,
+-                             void *freelist, void *nextfree)
++                             void **freelist, void *nextfree)
+ {
+       return false;
+ }
+@@ -2053,7 +2053,7 @@ static void deactivate_slab(struct kmem_cache *s, struct 
page *page,
+                * 'freelist' is already corrupted.  So isolate all objects
+                * starting at 'freelist'.
+                */
+-              if (freelist_corrupted(s, page, freelist, nextfree))
++              if (freelist_corrupted(s, page, &freelist, nextfree))
+                       break;
+ 
+               do {
+diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c
+index f0abbbdafe07f..c49c48866a3fc 100644
+--- a/net/batman-adv/bat_v_ogm.c
++++ b/net/batman-adv/bat_v_ogm.c
+@@ -715,6 +715,12 @@ static void batadv_v_ogm_process(const struct sk_buff 
*skb, int ogm_offset,
+                  ntohl(ogm_packet->seqno), ogm_throughput, ogm_packet->ttl,
+                  ogm_packet->version, ntohs(ogm_packet->tvlv_len));
+ 
++      if (batadv_is_my_mac(bat_priv, ogm_packet->orig)) {
++              batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
++                         "Drop packet: originator packet from ourself\n");
++              return;
++      }
++
+       /* If the throughput metric is 0, immediately drop the packet. No need
+        * to create orig_node / neigh_node for an unusable route.
+        */
+@@ -842,11 +848,6 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb,
+       if (batadv_is_my_mac(bat_priv, ethhdr->h_source))
+               goto free_skb;
+ 
+-      ogm_packet = (struct batadv_ogm2_packet *)skb->data;
+-
+-      if (batadv_is_my_mac(bat_priv, ogm_packet->orig))
+-              goto free_skb;
+-
+       batadv_inc_counter(bat_priv, BATADV_CNT_MGMT_RX);
+       batadv_add_counter(bat_priv, BATADV_CNT_MGMT_RX_BYTES,
+                          skb->len + ETH_HLEN);
+diff --git a/net/batman-adv/bridge_loop_avoidance.c 
b/net/batman-adv/bridge_loop_avoidance.c
+index c761c0c233e4b..ae647fa69ce85 100644
+--- a/net/batman-adv/bridge_loop_avoidance.c
++++ b/net/batman-adv/bridge_loop_avoidance.c
+@@ -450,7 +450,10 @@ static void batadv_bla_send_claim(struct batadv_priv 
*bat_priv, u8 *mac,
+       batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES,
+                          skb->len + ETH_HLEN);
+ 
+-      netif_rx(skb);
++      if (in_interrupt())
++              netif_rx(skb);
++      else
++              netif_rx_ni(skb);
+ out:
+       if (primary_if)
+               batadv_hardif_put(primary_if);
+diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
+index c6a7341f05270..056af2eec4a2a 100644
+--- a/net/batman-adv/gateway_client.c
++++ b/net/batman-adv/gateway_client.c
+@@ -674,8 +674,10 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, 
unsigned int *header_len,
+ 
+       chaddr_offset = *header_len + BATADV_DHCP_CHADDR_OFFSET;
+       /* store the client address if the message is going to a client */
+-      if (ret == BATADV_DHCP_TO_CLIENT &&
+-          pskb_may_pull(skb, chaddr_offset + ETH_ALEN)) {
++      if (ret == BATADV_DHCP_TO_CLIENT) {
++              if (!pskb_may_pull(skb, chaddr_offset + ETH_ALEN))
++                      return BATADV_DHCP_NO;
++
+               /* check if the DHCP packet carries an Ethernet DHCP */
+               p = skb->data + *header_len + BATADV_DHCP_HTYPE_OFFSET;
+               if (*p != BATADV_DHCP_HTYPE_ETHERNET)
+diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
+index 5b8d5bfeb7ac5..7c95314f0b7de 100644
+--- a/net/netfilter/nf_tables_api.c
++++ b/net/netfilter/nf_tables_api.c
+@@ -2882,7 +2882,8 @@ static int nf_tables_fill_set(struct sk_buff *skb, const 
struct nft_ctx *ctx,
+                       goto nla_put_failure;
+       }
+ 
+-      if (nla_put(skb, NFTA_SET_USERDATA, set->udlen, set->udata))
++      if (set->udata &&
++          nla_put(skb, NFTA_SET_USERDATA, set->udlen, set->udata))
+               goto nla_put_failure;
+ 
+       desc = nla_nest_start(skb, NFTA_SET_DESC);
+diff --git a/net/netfilter/nft_payload.c b/net/netfilter/nft_payload.c
+index 19446a89a2a81..b1a9f330a51fe 100644
+--- a/net/netfilter/nft_payload.c
++++ b/net/netfilter/nft_payload.c
+@@ -79,7 +79,9 @@ static void nft_payload_eval(const struct nft_expr *expr,
+       u32 *dest = &regs->data[priv->dreg];
+       int offset;
+ 
+-      dest[priv->len / NFT_REG32_SIZE] = 0;
++      if (priv->len % NFT_REG32_SIZE)
++              dest[priv->len / NFT_REG32_SIZE] = 0;
++
+       switch (priv->base) {
+       case NFT_PAYLOAD_LL_HEADER:
+               if (!skb_mac_header_was_set(skb))
+diff --git a/net/wireless/reg.c b/net/wireless/reg.c
+index b95d1c2bdef7e..9eb9d34cef7b1 100644
+--- a/net/wireless/reg.c
++++ b/net/wireless/reg.c
+@@ -2408,6 +2408,9 @@ int regulatory_hint_user(const char *alpha2,
+       if (WARN_ON(!alpha2))
+               return -EINVAL;
+ 
++      if (!is_world_regdom(alpha2) && !is_an_alpha2(alpha2))
++              return -EINVAL;
++
+       request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
+       if (!request)
+               return -ENOMEM;
+diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
+index 8b80bac055e49..d702bdf19eb10 100755
+--- a/scripts/checkpatch.pl
++++ b/scripts/checkpatch.pl
+@@ -2428,8 +2428,8 @@ sub process {
+ 
+ # Check if the commit log has what seems like a diff which can confuse patch
+               if ($in_commit_log && !$commit_log_has_diff &&
+-                  (($line =~ m@^\s+diff\b.*a/[\w/]+@ &&
+-                    $line =~ m@^\s+diff\b.*a/([\w/]+)\s+b/$1\b@) ||
++                  (($line =~ m@^\s+diff\b.*a/([\w/]+)@ &&
++                    $line =~ m@^\s+diff\b.*a/[\w/]+\s+b/$1\b@) ||
+                    $line =~ m@^\s*(?:\-\-\-\s+a/|\+\+\+\s+b/)@ ||
+                    $line =~ m/^\s*\@\@ \-\d+,\d+ \+\d+,\d+ \@\@/)) {
+                       ERROR("DIFF_IN_COMMIT_MSG",
+diff --git a/sound/core/oss/mulaw.c b/sound/core/oss/mulaw.c
+index 3788906421a73..fe27034f28460 100644
+--- a/sound/core/oss/mulaw.c
++++ b/sound/core/oss/mulaw.c
+@@ -329,8 +329,8 @@ int snd_pcm_plugin_build_mulaw(struct snd_pcm_substream 
*plug,
+               snd_BUG();
+               return -EINVAL;
+       }
+-      if (snd_BUG_ON(!snd_pcm_format_linear(format->format)))
+-              return -ENXIO;
++      if (!snd_pcm_format_linear(format->format))
++              return -EINVAL;
+ 
+       err = snd_pcm_plugin_build(plug, "Mu-Law<->linear conversion",
+                                  src_format, dst_format,
+diff --git a/sound/firewire/digi00x/digi00x.c 
b/sound/firewire/digi00x/digi00x.c
+index ef689997d6a5b..bf53e342788e2 100644
+--- a/sound/firewire/digi00x/digi00x.c
++++ b/sound/firewire/digi00x/digi00x.c
+@@ -15,6 +15,7 @@ MODULE_LICENSE("GPL v2");
+ #define VENDOR_DIGIDESIGN     0x00a07e
+ #define MODEL_CONSOLE         0x000001
+ #define MODEL_RACK            0x000002
++#define SPEC_VERSION          0x000001
+ 
+ static int name_card(struct snd_dg00x *dg00x)
+ {
+@@ -185,14 +186,18 @@ static const struct ieee1394_device_id 
snd_dg00x_id_table[] = {
+       /* Both of 002/003 use the same ID. */
+       {
+               .match_flags = IEEE1394_MATCH_VENDOR_ID |
++                             IEEE1394_MATCH_VERSION |
+                              IEEE1394_MATCH_MODEL_ID,
+               .vendor_id = VENDOR_DIGIDESIGN,
++              .version = SPEC_VERSION,
+               .model_id = MODEL_CONSOLE,
+       },
+       {
+               .match_flags = IEEE1394_MATCH_VENDOR_ID |
++                             IEEE1394_MATCH_VERSION |
+                              IEEE1394_MATCH_MODEL_ID,
+               .vendor_id = VENDOR_DIGIDESIGN,
++              .version = SPEC_VERSION,
+               .model_id = MODEL_RACK,
+       },
+       {}
+diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c
+index cd27b55366544..675b812e96d63 100644
+--- a/sound/pci/ca0106/ca0106_main.c
++++ b/sound/pci/ca0106/ca0106_main.c
+@@ -551,7 +551,8 @@ static int snd_ca0106_pcm_power_dac(struct snd_ca0106 
*chip, int channel_id,
+               else
+                       /* Power down */
+                       chip->spi_dac_reg[reg] |= bit;
+-              return snd_ca0106_spi_write(chip, chip->spi_dac_reg[reg]);
++              if (snd_ca0106_spi_write(chip, chip->spi_dac_reg[reg]) != 0)
++                      return -ENXIO;
+       }
+       return 0;
+ }
+diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
+index 9e8cfc409b4b3..cb7047bf844df 100644
+--- a/sound/pci/hda/patch_hdmi.c
++++ b/sound/pci/hda/patch_hdmi.c
+@@ -2546,6 +2546,7 @@ static void i915_pin_cvt_fixup(struct hda_codec *codec,
+                              hda_nid_t cvt_nid)
+ {
+       if (per_pin) {
++              haswell_verify_D0(codec, per_pin->cvt_nid, per_pin->pin_nid);
+               snd_hda_set_dev_select(codec, per_pin->pin_nid,
+                              per_pin->dev_id);
+               intel_verify_pin_cvt_connect(codec, per_pin);
+diff --git a/tools/include/uapi/linux/perf_event.h 
b/tools/include/uapi/linux/perf_event.h
+index 362493a2f950b..3b733511bb2b3 100644
+--- a/tools/include/uapi/linux/perf_event.h
++++ b/tools/include/uapi/linux/perf_event.h
+@@ -1033,7 +1033,7 @@ union perf_mem_data_src {
+ 
+ #define PERF_MEM_SNOOPX_FWD   0x01 /* forward */
+ /* 1 free */
+-#define PERF_MEM_SNOOPX_SHIFT 37
++#define PERF_MEM_SNOOPX_SHIFT 38
+ 
+ /* locked instruction */
+ #define PERF_MEM_LOCK_NA      0x01 /* not available */
+diff --git a/tools/perf/Documentation/perf-record.txt 
b/tools/perf/Documentation/perf-record.txt
+index 63526f4416ea4..7b36bc6e32bb0 100644
+--- a/tools/perf/Documentation/perf-record.txt
++++ b/tools/perf/Documentation/perf-record.txt
+@@ -33,6 +33,10 @@ OPTIONS
+         - a raw PMU event (eventsel+umask) in the form of rNNN where NNN is a
+         hexadecimal event descriptor.
+ 
++        - a symbolic or raw PMU event followed by an optional colon
++        and a list of event modifiers, e.g., cpu-cycles:p.  See the
++        linkperf:perf-list[1] man page for details on event modifiers.
++
+       - a symbolically formed PMU event like 'pmu/param1=0x3,param2/' where
+         'param1', 'param2', etc are defined as formats for the PMU in
+         /sys/bus/event_source/devices/<pmu>/format/*.
+diff --git a/tools/perf/Documentation/perf-stat.txt 
b/tools/perf/Documentation/perf-stat.txt
+index c37d61682dfb1..670aff81518b6 100644
+--- a/tools/perf/Documentation/perf-stat.txt
++++ b/tools/perf/Documentation/perf-stat.txt
+@@ -39,6 +39,10 @@ report::
+       - a raw PMU event (eventsel+umask) in the form of rNNN where NNN is a
+         hexadecimal event descriptor.
+ 
++        - a symbolic or raw PMU event followed by an optional colon
++        and a list of event modifiers, e.g., cpu-cycles:p.  See the
++        linkperf:perf-list[1] man page for details on event modifiers.
++
+       - a symbolically formed event like 'pmu/param1=0x3,param2/' where
+         param1 and param2 are defined as formats for the PMU in
+         /sys/bus/event_source/devices/<pmu>/format/*

Reply via email to