diff --git a/Makefile b/Makefile
index 3eb21d269b42..cbcc04da790a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 4
-SUBLEVEL = 122
+SUBLEVEL = 123
 EXTRAVERSION =
 NAME = Blurry Fish Butt
 
diff --git a/arch/arm/boot/dts/am335x-pepper.dts 
b/arch/arm/boot/dts/am335x-pepper.dts
index 7106114c7464..2dbe13a3d89b 100644
--- a/arch/arm/boot/dts/am335x-pepper.dts
+++ b/arch/arm/boot/dts/am335x-pepper.dts
@@ -139,7 +139,7 @@
 &audio_codec {
        status = "okay";
 
-       gpio-reset = <&gpio1 16 GPIO_ACTIVE_LOW>;
+       reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
        AVDD-supply = <&ldo3_reg>;
        IOVDD-supply = <&ldo3_reg>;
        DRVDD-supply = <&ldo3_reg>;
diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts 
b/arch/arm/boot/dts/exynos4412-trats2.dts
index 40a474c4374b..4c52358734ef 100644
--- a/arch/arm/boot/dts/exynos4412-trats2.dts
+++ b/arch/arm/boot/dts/exynos4412-trats2.dts
@@ -359,7 +359,7 @@
                reg = <0>;
                vdd3-supply = <&lcd_vdd3_reg>;
                vci-supply = <&ldo25_reg>;
-               reset-gpios = <&gpy4 5 GPIO_ACTIVE_HIGH>;
+               reset-gpios = <&gpf2 1 GPIO_ACTIVE_HIGH>;
                power-on-delay= <50>;
                reset-delay = <100>;
                init-delay = <100>;
diff --git a/arch/arm/boot/dts/logicpd-torpedo-som.dtsi 
b/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
index 80f6c786a37e..e05670423d8b 100644
--- a/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
+++ b/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
@@ -90,6 +90,8 @@
 };
 
 &i2c1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c1_pins>;
        clock-frequency = <2600000>;
 
        twl: twl@48 {
@@ -137,6 +139,12 @@
                        OMAP3_CORE1_IOPAD(0x218e, PIN_OUTPUT | MUX_MODE4)       
/* mcbsp1_fsr.gpio_157 */
                >;
        };
+       i2c1_pins: pinmux_i2c1_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x21ba, PIN_INPUT | MUX_MODE0)        
/* i2c1_scl.i2c1_scl */
+                       OMAP3_CORE1_IOPAD(0x21bc, PIN_INPUT | MUX_MODE0)        
/* i2c1_sda.i2c1_sda */
+               >;
+       };
 };
 
 &omap3_pmx_core2 {
diff --git a/arch/arm/boot/dts/moxart-uc7112lx.dts 
b/arch/arm/boot/dts/moxart-uc7112lx.dts
index 10d088df0c35..4a962a26482d 100644
--- a/arch/arm/boot/dts/moxart-uc7112lx.dts
+++ b/arch/arm/boot/dts/moxart-uc7112lx.dts
@@ -6,7 +6,7 @@
  */
 
 /dts-v1/;
-/include/ "moxart.dtsi"
+#include "moxart.dtsi"
 
 / {
        model = "MOXA UC-7112-LX";
diff --git a/arch/arm/boot/dts/moxart.dtsi b/arch/arm/boot/dts/moxart.dtsi
index 1fd27ed65a01..64f2f44235d0 100644
--- a/arch/arm/boot/dts/moxart.dtsi
+++ b/arch/arm/boot/dts/moxart.dtsi
@@ -6,6 +6,7 @@
  */
 
 /include/ "skeleton.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
 
 / {
        compatible = "moxa,moxart";
@@ -36,8 +37,8 @@
                ranges;
 
                intc: interrupt-controller@98800000 {
-                       compatible = "moxa,moxart-ic";
-                       reg = <0x98800000 0x38>;
+                       compatible = "moxa,moxart-ic", "faraday,ftintc010";
+                       reg = <0x98800000 0x100>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
                        interrupt-mask = <0x00080000>;
@@ -59,7 +60,7 @@
                timer: timer@98400000 {
                        compatible = "moxa,moxart-timer";
                        reg = <0x98400000 0x42>;
-                       interrupts = <19 1>;
+                       interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
                        clocks = <&clk_apb>;
                };
 
@@ -80,7 +81,7 @@
                dma: dma@90500000 {
                        compatible = "moxa,moxart-dma";
                        reg = <0x90500080 0x40>;
-                       interrupts = <24 0>;
+                       interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                };
 
@@ -93,7 +94,7 @@
                sdhci: sdhci@98e00000 {
                        compatible = "moxa,moxart-sdhci";
                        reg = <0x98e00000 0x5C>;
-                       interrupts = <5 0>;
+                       interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clk_apb>;
                        dmas =  <&dma 5>,
                                <&dma 5>;
@@ -120,7 +121,7 @@
                mac0: mac@90900000 {
                        compatible = "moxa,moxart-mac";
                        reg = <0x90900000 0x90>;
-                       interrupts = <25 0>;
+                       interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
                        phy-handle = <&ethphy0>;
                        phy-mode = "mii";
                        status = "disabled";
@@ -129,7 +130,7 @@
                mac1: mac@92000000 {
                        compatible = "moxa,moxart-mac";
                        reg = <0x92000000 0x90>;
-                       interrupts = <27 0>;
+                       interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
                        phy-handle = <&ethphy1>;
                        phy-mode = "mii";
                        status = "disabled";
@@ -138,7 +139,7 @@
                uart0: uart@98200000 {
                        compatible = "ns16550a";
                        reg = <0x98200000 0x20>;
-                       interrupts = <31 8>;
+                       interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
                        clock-frequency = <14745600>;
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
index 27cd4abfc74d..731860314ab5 100644
--- a/arch/arm/boot/dts/omap3-n900.dts
+++ b/arch/arm/boot/dts/omap3-n900.dts
@@ -488,7 +488,7 @@
        tlv320aic3x: tlv320aic3x@18 {
                compatible = "ti,tlv320aic3x";
                reg = <0x18>;
-               gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */
+               reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */
                ai3x-gpio-func = <
                        0 /* AIC3X_GPIO1_FUNC_DISABLED */
                        5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */
@@ -505,7 +505,7 @@
        tlv320aic3x_aux: tlv320aic3x@19 {
                compatible = "ti,tlv320aic3x";
                reg = <0x19>;
-               gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */
+               reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */
 
                AVDD-supply = <&vmmc2>;
                DRVDD-supply = <&vmmc2>;
diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
index 7b39d8fae61e..bd83a61f724f 100644
--- a/arch/arm/boot/dts/r8a7790.dtsi
+++ b/arch/arm/boot/dts/r8a7790.dtsi
@@ -1360,8 +1360,11 @@
                        compatible = "renesas,r8a7790-mstp-clocks", 
"renesas,cpg-mstp-clocks";
                        reg = <0 0xe6150998 0 4>, <0 0xe61509a8 0 4>;
                        clocks = <&p_clk>,
-                               <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, 
<&p_clk>,
-                               <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, 
<&p_clk>,
+                               <&mstp10_clks R8A7790_CLK_SSI_ALL>, 
<&mstp10_clks R8A7790_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7790_CLK_SSI_ALL>, 
<&mstp10_clks R8A7790_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7790_CLK_SSI_ALL>, 
<&mstp10_clks R8A7790_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7790_CLK_SSI_ALL>, 
<&mstp10_clks R8A7790_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7790_CLK_SSI_ALL>, 
<&mstp10_clks R8A7790_CLK_SSI_ALL>,
                                <&p_clk>,
                                <&mstp10_clks R8A7790_CLK_SCU_ALL>, 
<&mstp10_clks R8A7790_CLK_SCU_ALL>,
                                <&mstp10_clks R8A7790_CLK_SCU_ALL>, 
<&mstp10_clks R8A7790_CLK_SCU_ALL>,
diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts 
b/arch/arm/boot/dts/r8a7791-koelsch.dts
index fc44ea361a4b..62eae315af1f 100644
--- a/arch/arm/boot/dts/r8a7791-koelsch.dts
+++ b/arch/arm/boot/dts/r8a7791-koelsch.dts
@@ -280,7 +280,7 @@
        x2_clk: x2-clock {
                compatible = "fixed-clock";
                #clock-cells = <0>;
-               clock-frequency = <148500000>;
+               clock-frequency = <74250000>;
        };
 
        x13_clk: x13-clock {
diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index 328f48bd15e7..d2585a4c6098 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -1374,8 +1374,11 @@
                        compatible = "renesas,r8a7791-mstp-clocks", 
"renesas,cpg-mstp-clocks";
                        reg = <0 0xe6150998 0 4>, <0 0xe61509a8 0 4>;
                        clocks = <&p_clk>,
-                               <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, 
<&p_clk>,
-                               <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, 
<&p_clk>,
+                               <&mstp10_clks R8A7791_CLK_SSI_ALL>, 
<&mstp10_clks R8A7791_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7791_CLK_SSI_ALL>, 
<&mstp10_clks R8A7791_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7791_CLK_SSI_ALL>, 
<&mstp10_clks R8A7791_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7791_CLK_SSI_ALL>, 
<&mstp10_clks R8A7791_CLK_SSI_ALL>,
+                               <&mstp10_clks R8A7791_CLK_SSI_ALL>, 
<&mstp10_clks R8A7791_CLK_SSI_ALL>,
                                <&p_clk>,
                                <&mstp10_clks R8A7791_CLK_SCU_ALL>, 
<&mstp10_clks R8A7791_CLK_SCU_ALL>,
                                <&mstp10_clks R8A7791_CLK_SCU_ALL>, 
<&mstp10_clks R8A7791_CLK_SCU_ALL>,
diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c 
b/arch/mips/kernel/mips-r2-to-r6-emul.c
index e3384065f5e7..cbe0f025856d 100644
--- a/arch/mips/kernel/mips-r2-to-r6-emul.c
+++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
@@ -1097,10 +1097,20 @@ repeat:
                }
                break;
 
-       case beql_op:
-       case bnel_op:
        case blezl_op:
        case bgtzl_op:
+               /*
+                * For BLEZL and BGTZL, rt field must be set to 0. If this
+                * is not the case, this may be an encoding of a MIPS R6
+                * instruction, so return to CPU execution if this occurs
+                */
+               if (MIPSInst_RT(inst)) {
+                       err = SIGILL;
+                       break;
+               }
+               /* fall through */
+       case beql_op:
+       case bnel_op:
                if (delay_slot(regs)) {
                        err = SIGILL;
                        break;
@@ -2330,6 +2340,8 @@ static int mipsr2_stats_clear_show(struct seq_file *s, 
void *unused)
        __this_cpu_write((mipsr2bremustats).bgezl, 0);
        __this_cpu_write((mipsr2bremustats).bltzll, 0);
        __this_cpu_write((mipsr2bremustats).bgezll, 0);
+       __this_cpu_write((mipsr2bremustats).bltzall, 0);
+       __this_cpu_write((mipsr2bremustats).bgezall, 0);
        __this_cpu_write((mipsr2bremustats).bltzal, 0);
        __this_cpu_write((mipsr2bremustats).bgezal, 0);
        __this_cpu_write((mipsr2bremustats).beql, 0);
diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
index 1a8c96035716..c0c1e9529dbd 100644
--- a/arch/mips/net/bpf_jit.c
+++ b/arch/mips/net/bpf_jit.c
@@ -527,7 +527,8 @@ static void save_bpf_jit_regs(struct jit_ctx *ctx, unsigned 
offset)
        u32 sflags, tmp_flags;
 
        /* Adjust the stack pointer */
-       emit_stack_offset(-align_sp(offset), ctx);
+       if (offset)
+               emit_stack_offset(-align_sp(offset), ctx);
 
        tmp_flags = sflags = ctx->flags >> SEEN_SREG_SFT;
        /* sflags is essentially a bitmap */
@@ -579,7 +580,8 @@ static void restore_bpf_jit_regs(struct jit_ctx *ctx,
                emit_load_stack_reg(r_ra, r_sp, real_off, ctx);
 
        /* Restore the sp and discard the scrach memory */
-       emit_stack_offset(align_sp(offset), ctx);
+       if (offset)
+               emit_stack_offset(align_sp(offset), ctx);
 }
 
 static unsigned int get_stack_depth(struct jit_ctx *ctx)
@@ -626,8 +628,14 @@ static void build_prologue(struct jit_ctx *ctx)
        if (ctx->flags & SEEN_X)
                emit_jit_reg_move(r_X, r_zero, ctx);
 
-       /* Do not leak kernel data to userspace */
-       if (bpf_needs_clear_a(&ctx->skf->insns[0]))
+       /*
+        * Do not leak kernel data to userspace, we only need to clear
+        * r_A if it is ever used.  In fact if it is never used, we
+        * will not save/restore it, so clearing it in this case would
+        * corrupt the state of the caller.
+        */
+       if (bpf_needs_clear_a(&ctx->skf->insns[0]) &&
+           (ctx->flags & SEEN_A))
                emit_jit_reg_move(r_A, r_zero, ctx);
 }
 
diff --git a/arch/mips/net/bpf_jit_asm.S b/arch/mips/net/bpf_jit_asm.S
index 5d2e0c8d29c0..88a2075305d1 100644
--- a/arch/mips/net/bpf_jit_asm.S
+++ b/arch/mips/net/bpf_jit_asm.S
@@ -90,18 +90,14 @@ FEXPORT(sk_load_half_positive)
        is_offset_in_header(2, half)
        /* Offset within header boundaries */
        PTR_ADDU t1, $r_skb_data, offset
-       .set    reorder
-       lh      $r_A, 0(t1)
-       .set    noreorder
+       lhu     $r_A, 0(t1)
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 # if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
-       wsbh    t0, $r_A
-       seh     $r_A, t0
+       wsbh    $r_A, $r_A
 # else
-       sll     t0, $r_A, 24
-       andi    t1, $r_A, 0xff00
-       sra     t0, t0, 16
-       srl     t1, t1, 8
+       sll     t0, $r_A, 8
+       srl     t1, $r_A, 8
+       andi    t0, t0, 0xff00
        or      $r_A, t0, t1
 # endif
 #endif
@@ -115,7 +111,7 @@ FEXPORT(sk_load_byte_positive)
        is_offset_in_header(1, byte)
        /* Offset within header boundaries */
        PTR_ADDU t1, $r_skb_data, offset
-       lb      $r_A, 0(t1)
+       lbu     $r_A, 0(t1)
        jr      $r_ra
         move   $r_ret, zero
        END(sk_load_byte)
@@ -139,6 +135,11 @@ FEXPORT(sk_load_byte_positive)
  * (void *to) is returned in r_s0
  *
  */
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+#define DS_OFFSET(SIZE) (4 * SZREG)
+#else
+#define DS_OFFSET(SIZE) ((4 * SZREG) + (4 - SIZE))
+#endif
 #define bpf_slow_path_common(SIZE)                             \
        /* Quick check. Are we within reasonable boundaries? */ \
        LONG_ADDIU      $r_s1, $r_skb_len, -SIZE;               \
@@ -150,7 +151,7 @@ FEXPORT(sk_load_byte_positive)
        PTR_LA          t0, skb_copy_bits;                      \
        PTR_S           $r_ra, (5 * SZREG)($r_sp);              \
        /* Assign low slot to a2 */                             \
-       move            a2, $r_sp;                              \
+       PTR_ADDIU       a2, $r_sp, DS_OFFSET(SIZE);             \
        jalr            t0;                                     \
        /* Reset our destination slot (DS but it's ok) */       \
         INT_S          zero, (4 * SZREG)($r_sp);               \
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index a67c6d781c52..d154e333f76b 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -294,7 +294,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned 
long address,
         * can result in fault, which will cause a deadlock when called with
         * mmap_sem held
         */
-       if (user_mode(regs))
+       if (!is_exec && user_mode(regs))
                store_update_sp = store_updates_sp(regs);
 
        if (user_mode(regs))
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
index 99d293ea2b49..565e24e9ddf2 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
@@ -196,6 +196,8 @@ retry:
                return (opcode != 0x62 && opcode != 0x67);
        case 0x70:
                return 0; /* can't boost conditional jump */
+       case 0x90:
+               return opcode != 0x9a;  /* can't boost call far */
        case 0xc0:
                /* can't boost software-interruptions */
                return (0xc1 < opcode && opcode < 0xcc) || opcode == 0xcf;
@@ -404,6 +406,8 @@ static int arch_copy_kprobe(struct kprobe *p)
 {
        int ret;
 
+       set_memory_rw((unsigned long)p->ainsn.insn & PAGE_MASK, 1);
+
        /* Copy an instruction with recovering if other optprobe modifies it.*/
        ret = __copy_instruction(p->ainsn.insn, p->addr);
        if (!ret)
@@ -418,6 +422,8 @@ static int arch_copy_kprobe(struct kprobe *p)
        else
                p->ainsn.boostable = -1;
 
+       set_memory_ro((unsigned long)p->ainsn.insn & PAGE_MASK, 1);
+
        /* Check whether the instruction modifies Interrupt Flag or not */
        p->ainsn.if_modifier = is_IF_modifier(p->ainsn.insn);
 
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
index ea8e2b846101..7aba9d6475a5 100644
--- a/arch/x86/kernel/kprobes/opt.c
+++ b/arch/x86/kernel/kprobes/opt.c
@@ -370,6 +370,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe 
*op,
        }
 
        buf = (u8 *)op->optinsn.insn;
+       set_memory_rw((unsigned long)buf & PAGE_MASK, 1);
 
        /* Copy instructions into the out-of-line buffer */
        ret = copy_optimized_instructions(buf + TMPL_END_IDX, op->kp.addr);
@@ -392,6 +393,8 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe 
*op,
        synthesize_reljump(buf + TMPL_END_IDX + op->optinsn.size,
                           (u8 *)op->kp.addr + op->optinsn.size);
 
+       set_memory_ro((unsigned long)buf & PAGE_MASK, 1);
+
        flush_icache_range((unsigned long) buf,
                           (unsigned long) buf + TMPL_END_IDX +
                           op->optinsn.size + RELATIVEJUMP_SIZE);
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
index 510e80da7de4..af57736a0309 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -715,7 +715,8 @@ void handle_vm86_fault(struct kernel_vm86_regs *regs, long 
error_code)
        return;
 
 check_vip:
-       if (VEFLAGS & X86_EFLAGS_VIP) {
+       if ((VEFLAGS & (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) ==
+           (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) {
                save_v86_state(regs, VM86_STI);
                return;
        }
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index e830c71a1323..e0a34b0d381e 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -287,7 +287,7 @@ static noinline int vmalloc_fault(unsigned long address)
        if (!pmd_k)
                return -1;
 
-       if (pmd_huge(*pmd_k))
+       if (pmd_large(*pmd_k))
                return 0;
 
        pte_k = pte_offset_kernel(pmd_k, address);
@@ -407,7 +407,7 @@ static noinline int vmalloc_fault(unsigned long address)
        if (pud_none(*pud) || pud_pfn(*pud) != pud_pfn(*pud_ref))
                BUG();
 
-       if (pud_huge(*pud))
+       if (pud_large(*pud))
                return 0;
 
        pmd = pmd_offset(pud, address);
@@ -418,7 +418,7 @@ static noinline int vmalloc_fault(unsigned long address)
        if (pmd_none(*pmd) || pmd_pfn(*pmd) != pmd_pfn(*pmd_ref))
                BUG();
 
-       if (pmd_huge(*pmd))
+       if (pmd_large(*pmd))
                return 0;
 
        pte_ref = pte_offset_kernel(pmd_ref, address);
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 8161090a1970..46ba2402c8f9 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -1078,10 +1078,8 @@ int blkcg_init_queue(struct request_queue *q)
        if (preloaded)
                radix_tree_preload_end();
 
-       if (IS_ERR(blkg)) {
-               blkg_free(new_blkg);
+       if (IS_ERR(blkg))
                return PTR_ERR(blkg);
-       }
 
        q->root_blkg = blkg;
        q->root_rl.blkg = blkg;
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index 2149a1ddbacf..17bdd6b55beb 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -505,6 +505,17 @@ static void throtl_dequeue_tg(struct throtl_grp *tg)
 static void throtl_schedule_pending_timer(struct throtl_service_queue *sq,
                                          unsigned long expires)
 {
+       unsigned long max_expire = jiffies + 8 * throtl_slice;
+
+       /*
+        * Since we are adjusting the throttle limit dynamically, the sleep
+        * time calculated according to previous limit might be invalid. It's
+        * possible the cgroup sleep time is very long and no other cgroups
+        * have IO running so notify the limit changes. Make sure the cgroup
+        * doesn't sleep too long to avoid the missed notification.
+        */
+       if (time_after(expires, max_expire))
+               expires = max_expire;
        mod_timer(&sq->pending_timer, expires);
        throtl_log(sq, "schedule timer. delay=%lu jiffies=%lu",
                   expires - jiffies, jiffies);
diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
index 1341a94cc779..76afc841232c 100644
--- a/drivers/char/agp/intel-gtt.c
+++ b/drivers/char/agp/intel-gtt.c
@@ -859,6 +859,8 @@ void intel_gtt_insert_sg_entries(struct sg_table *st,
                }
        }
        wmb();
+       if (intel_private.driver->chipset_flush)
+               intel_private.driver->chipset_flush();
 }
 EXPORT_SYMBOL(intel_gtt_insert_sg_entries);
 
diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
index 2e7f03d50f4e..95a4dd290f35 100644
--- a/drivers/clk/qcom/gcc-msm8916.c
+++ b/drivers/clk/qcom/gcc-msm8916.c
@@ -1437,6 +1437,7 @@ static const struct freq_tbl ftbl_codec_clk[] = {
 
 static struct clk_rcg2 codec_digcodec_clk_src = {
        .cmd_rcgr = 0x1c09c,
+       .mnd_width = 8,
        .hid_width = 5,
        .parent_map = gcc_xo_gpll1_emclk_sleep_map,
        .freq_tbl = ftbl_codec_clk,
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index ebed319657e7..c0fb6f12f547 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -551,6 +551,8 @@ static int cpufreq_parse_governor(char *str_governor, 
unsigned int *policy,
                        *governor = t;
                        err = 0;
                }
+               if (t && !try_module_get(t->owner))
+                       t = NULL;
 
                mutex_unlock(&cpufreq_governor_mutex);
        }
@@ -669,6 +671,10 @@ static ssize_t store_scaling_governor(struct 
cpufreq_policy *policy,
                return -EINVAL;
 
        ret = cpufreq_set_policy(policy, &new_policy);
+
+       if (new_policy.governor)
+               module_put(new_policy.governor->owner);
+
        return ret ? ret : count;
 }
 
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 0f6fd42f55ca..f8d740a6740d 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -911,6 +911,21 @@ static int sdma_disable_channel(struct dma_chan *chan)
        return 0;
 }
 
+static int sdma_disable_channel_with_delay(struct dma_chan *chan)
+{
+       sdma_disable_channel(chan);
+
+       /*
+        * According to NXP R&D team a delay of one BD SDMA cost time
+        * (maximum is 1ms) should be added after disable of the channel
+        * bit, to ensure SDMA core has really been stopped after SDMA
+        * clients call .device_terminate_all.
+        */
+       mdelay(1);
+
+       return 0;
+}
+
 static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac)
 {
        struct sdma_engine *sdma = sdmac->sdma;
@@ -1793,7 +1808,7 @@ static int sdma_probe(struct platform_device *pdev)
        sdma->dma_device.device_prep_slave_sg = sdma_prep_slave_sg;
        sdma->dma_device.device_prep_dma_cyclic = sdma_prep_dma_cyclic;
        sdma->dma_device.device_config = sdma_config;
-       sdma->dma_device.device_terminate_all = sdma_disable_channel;
+       sdma->dma_device.device_terminate_all = sdma_disable_channel_with_delay;
        sdma->dma_device.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
        sdma->dma_device.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
        sdma->dma_device.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index 6470c9aa1351..1f0e6ede120c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector 
*connector)
                /* don't do anything if sink is not display port, i.e.,
                 * passive dp->(dvi|hdmi) adaptor
                 */
-               if (dig_connector->dp_sink_type == 
CONNECTOR_OBJECT_ID_DISPLAYPORT) {
-                       int saved_dpms = connector->dpms;
-                       /* Only turn off the display if it's physically 
disconnected */
-                       if (!amdgpu_display_hpd_sense(adev, 
amdgpu_connector->hpd.hpd)) {
-                               drm_helper_connector_dpms(connector, 
DRM_MODE_DPMS_OFF);
-                       } else if 
(amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
-                               /* Don't try to start link training before we
-                                * have the dpcd */
-                               if 
(amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
-                                       return;
-
-                               /* set it to OFF so that 
drm_helper_connector_dpms()
-                                * won't return immediately since the current 
state
-                                * is ON at this point.
-                                */
-                               connector->dpms = DRM_MODE_DPMS_OFF;
-                               drm_helper_connector_dpms(connector, 
DRM_MODE_DPMS_ON);
-                       }
-                       connector->dpms = saved_dpms;
+               if (dig_connector->dp_sink_type == 
CONNECTOR_OBJECT_ID_DISPLAYPORT &&
+                   amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) &&
+                   amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
+                       /* Don't start link training before we have the DPCD */
+                       if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
+                               return;
+
+                       /* Turn the connector off and back on immediately, which
+                        * will trigger link training
+                        */
+                       drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
+                       drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
                }
        }
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index 82903ca78529..c555781685ea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -560,6 +560,12 @@ amdgpu_user_framebuffer_create(struct drm_device *dev,
                return ERR_PTR(-ENOENT);
        }
 
+       /* Handle is imported dma-buf, so cannot be migrated to VRAM for 
scanout */
+       if (obj->import_attach) {
+               DRM_DEBUG_KMS("Cannot create framebuffer from imported 
dma_buf\n");
+               return ERR_PTR(-EINVAL);
+       }
+
        amdgpu_fb = kzalloc(sizeof(*amdgpu_fb), GFP_KERNEL);
        if (amdgpu_fb == NULL) {
                drm_gem_object_unreference_unlocked(obj);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 74909e72a009..2acbd43f9a53 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -519,11 +519,17 @@ static ssize_t sysprops_show(struct kobject *kobj, struct 
attribute *attr,
        return ret;
 }
 
+static void kfd_topology_kobj_release(struct kobject *kobj)
+{
+       kfree(kobj);
+}
+
 static const struct sysfs_ops sysprops_ops = {
        .show = sysprops_show,
 };
 
 static struct kobj_type sysprops_type = {
+       .release = kfd_topology_kobj_release,
        .sysfs_ops = &sysprops_ops,
 };
 
@@ -559,6 +565,7 @@ static const struct sysfs_ops iolink_ops = {
 };
 
 static struct kobj_type iolink_type = {
+       .release = kfd_topology_kobj_release,
        .sysfs_ops = &iolink_ops,
 };
 
@@ -586,6 +593,7 @@ static const struct sysfs_ops mem_ops = {
 };
 
 static struct kobj_type mem_type = {
+       .release = kfd_topology_kobj_release,
        .sysfs_ops = &mem_ops,
 };
 
@@ -625,6 +633,7 @@ static const struct sysfs_ops cache_ops = {
 };
 
 static struct kobj_type cache_type = {
+       .release = kfd_topology_kobj_release,
        .sysfs_ops = &cache_ops,
 };
 
@@ -747,6 +756,7 @@ static const struct sysfs_ops node_ops = {
 };
 
 static struct kobj_type node_type = {
+       .release = kfd_topology_kobj_release,
        .sysfs_ops = &node_ops,
 };
 
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index c641ed9470e1..724f7cf52253 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -3219,8 +3219,7 @@ monitor_name(struct detailed_timing *t, void *data)
  * @edid: EDID to parse
  *
  * Fill the ELD (EDID-Like Data) buffer for passing to the audio driver. The
- * Conn_Type, HDCP and Port_ID ELD fields are left for the graphics driver to
- * fill in.
+ * HDCP and Port_ID ELD fields are left for the graphics driver to fill in.
  */
 void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
 {
@@ -3293,6 +3292,12 @@ void drm_edid_to_eld(struct drm_connector *connector, 
struct edid *edid)
        }
        eld[5] |= sad_count << 4;
 
+       if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
+           connector->connector_type == DRM_MODE_CONNECTOR_eDP)
+               eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_CONN_TYPE_DP;
+       else
+               eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_CONN_TYPE_HDMI;
+
        eld[DRM_ELD_BASELINE_ELD_LEN] =
                DIV_ROUND_UP(drm_eld_calc_baseline_block_size(eld), 4);
 
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 8090989185b2..4ddbc49125cd 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -1271,9 +1271,9 @@ void drm_vblank_put(struct drm_device *dev, unsigned int 
pipe)
        if (atomic_dec_and_test(&vblank->refcount)) {
                if (drm_vblank_offdelay == 0)
                        return;
-               else if (dev->vblank_disable_immediate || drm_vblank_offdelay < 
0)
+               else if (drm_vblank_offdelay < 0)
                        vblank_disable_fn((unsigned long)vblank);
-               else
+               else if (!dev->vblank_disable_immediate)
                        mod_timer(&vblank->disable_timer,
                                  jiffies + ((drm_vblank_offdelay * HZ)/1000));
        }
@@ -1902,6 +1902,16 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned 
int pipe)
        wake_up(&vblank->queue);
        drm_handle_vblank_events(dev, pipe);
 
+       /* With instant-off, we defer disabling the interrupt until after
+        * we finish processing the following vblank. The disable has to
+        * be last (after drm_handle_vblank_events) so that the timestamp
+        * is always accurate.
+        */
+       if (dev->vblank_disable_immediate &&
+           drm_vblank_offdelay > 0 &&
+           !atomic_read(&vblank->refcount))
+               vblank_disable_fn((unsigned long)vblank);
+
        spin_unlock_irqrestore(&dev->event_lock, irqflags);
 
        return true;
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
index c4a552637c93..3ff7689835dc 100644
--- a/drivers/gpu/drm/qxl/qxl_fb.c
+++ b/drivers/gpu/drm/qxl/qxl_fb.c
@@ -494,9 +494,11 @@ static const struct drm_fb_helper_funcs 
qxl_fb_helper_funcs = {
 
 int qxl_fbdev_init(struct qxl_device *qdev)
 {
+       int ret = 0;
+
+#ifdef CONFIG_DRM_FBDEV_EMULATION
        struct qxl_fbdev *qfbdev;
        int bpp_sel = 32; /* TODO: parameter from somewhere? */
-       int ret;
 
        qfbdev = kzalloc(sizeof(struct qxl_fbdev), GFP_KERNEL);
        if (!qfbdev)
@@ -531,6 +533,8 @@ fini:
        drm_fb_helper_fini(&qfbdev->helper);
 free:
        kfree(qfbdev);
+#endif
+
        return ret;
 }
 
@@ -546,6 +550,9 @@ void qxl_fbdev_fini(struct qxl_device *qdev)
 
 void qxl_fbdev_set_suspend(struct qxl_device *qdev, int state)
 {
+       if (!qdev->mode_info.qfbdev)
+               return;
+
        drm_fb_helper_set_suspend(&qdev->mode_info.qfbdev->helper, state);
 }
 
diff --git a/drivers/gpu/drm/radeon/radeon_display.c 
b/drivers/gpu/drm/radeon/radeon_display.c
index 3645b223aa37..446d99062306 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1374,6 +1374,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
                return ERR_PTR(-ENOENT);
        }
 
+       /* Handle is imported dma-buf, so cannot be migrated to VRAM for 
scanout */
+       if (obj->import_attach) {
+               DRM_DEBUG_KMS("Cannot create framebuffer from imported 
dma_buf\n");
+               return ERR_PTR(-EINVAL);
+       }
+
        radeon_fb = kzalloc(sizeof(*radeon_fb), GFP_KERNEL);
        if (radeon_fb == NULL) {
                drm_gem_object_unreference_unlocked(obj);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
index d2d93959b119..aec6e9eef489 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
@@ -433,7 +433,7 @@ static int vmw_fb_kms_detach(struct vmw_fb_par *par,
                set.y = 0;
                set.mode = NULL;
                set.fb = NULL;
-               set.num_connectors = 1;
+               set.num_connectors = 0;
                set.connectors = &par->con;
                ret = drm_mode_set_config_internal(&set);
                if (ret) {
@@ -821,7 +821,9 @@ int vmw_fb_off(struct vmw_private *vmw_priv)
        flush_delayed_work(&par->local_work);
 
        mutex_lock(&par->bo_mutex);
+       drm_modeset_lock_all(vmw_priv->dev);
        (void) vmw_fb_kms_detach(par, true, false);
+       drm_modeset_unlock_all(vmw_priv->dev);
        mutex_unlock(&par->bo_mutex);
 
        return 0;
diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
index 0cd4f7216239..5eea6fe0d7bd 100644
--- a/drivers/hid/hid-elo.c
+++ b/drivers/hid/hid-elo.c
@@ -42,6 +42,12 @@ static int elo_input_configured(struct hid_device *hdev,
 {
        struct input_dev *input = hidinput->input;
 
+       /*
+        * ELO devices have one Button usage in GenDesk field, which makes
+        * hid-input map it to BTN_LEFT; that confuses userspace, which then
+        * considers the device to be a mouse/touchpad instead of touchscreen.
+        */
+       clear_bit(BTN_LEFT, input->keybit);
        set_bit(BTN_TOUCH, input->keybit);
        set_bit(ABS_PRESSURE, input->absbit);
        input_set_abs_params(input, ABS_PRESSURE, 0, 256, 0, 0);
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 2ba6bf69b7d0..53e54855c366 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -1128,18 +1128,26 @@ void hidinput_hid_event(struct hid_device *hid, struct 
hid_field *field, struct
 
        /*
         * Ignore out-of-range values as per HID specification,
-        * section 5.10 and 6.2.25.
+        * section 5.10 and 6.2.25, when NULL state bit is present.
+        * When it's not, clamp the value to match Microsoft's input
+        * driver as mentioned in "Required HID usages for digitizers":
+        * 
https://msdn.microsoft.com/en-us/library/windows/hardware/dn672278(v=vs.85).asp
         *
         * The logical_minimum < logical_maximum check is done so that we
         * don't unintentionally discard values sent by devices which
         * don't specify logical min and max.
         */
        if ((field->flags & HID_MAIN_ITEM_VARIABLE) &&
-           (field->logical_minimum < field->logical_maximum) &&
-           (value < field->logical_minimum ||
-            value > field->logical_maximum)) {
-               dbg_hid("Ignoring out-of-range value %x\n", value);
-               return;
+           (field->logical_minimum < field->logical_maximum)) {
+               if (field->flags & HID_MAIN_ITEM_NULL_STATE &&
+                   (value < field->logical_minimum ||
+                    value > field->logical_maximum)) {
+                       dbg_hid("Ignoring out-of-range value %x\n", value);
+                       return;
+               }
+               value = clamp(value,
+                             field->logical_minimum,
+                             field->logical_maximum);
        }
 
        /*
diff --git a/drivers/hwmon/pmbus/adm1275.c b/drivers/hwmon/pmbus/adm1275.c
index 188af4c89f40..18477dd1e243 100644
--- a/drivers/hwmon/pmbus/adm1275.c
+++ b/drivers/hwmon/pmbus/adm1275.c
@@ -95,8 +95,8 @@ static const struct coefficients adm1075_coefficients[] = {
        [0] = { 27169, 0, -1 },         /* voltage */
        [1] = { 806, 20475, -1 },       /* current, irange25 */
        [2] = { 404, 20475, -1 },       /* current, irange50 */
-       [3] = { 0, -1, 8549 },          /* power, irange25 */
-       [4] = { 0, -1, 4279 },          /* power, irange50 */
+       [3] = { 8549, 0, -1 },          /* power, irange25 */
+       [4] = { 4279, 0, -1 },          /* power, irange50 */
 };
 
 static const struct coefficients adm1275_coefficients[] = {
diff --git a/drivers/hwtracing/coresight/of_coresight.c 
b/drivers/hwtracing/coresight/of_coresight.c
index b0973617826f..7d2bb1549608 100644
--- a/drivers/hwtracing/coresight/of_coresight.c
+++ b/drivers/hwtracing/coresight/of_coresight.c
@@ -150,7 +150,7 @@ struct coresight_platform_data 
*of_get_coresight_platform_data(
                                continue;
 
                        /* The local out port number */
-                       pdata->outports[i] = endpoint.id;
+                       pdata->outports[i] = endpoint.port;
 
                        /*
                         * Get a handle on the remote port and parent
diff --git a/drivers/input/keyboard/qt1070.c b/drivers/input/keyboard/qt1070.c
index 5a5778729e37..76bb51309a78 100644
--- a/drivers/input/keyboard/qt1070.c
+++ b/drivers/input/keyboard/qt1070.c
@@ -274,9 +274,18 @@ static const struct i2c_device_id qt1070_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, qt1070_id);
 
+#ifdef CONFIG_OF
+static const struct of_device_id qt1070_of_match[] = {
+       { .compatible = "qt1070", },
+       { },
+};
+MODULE_DEVICE_TABLE(of, qt1070_of_match);
+#endif
+
 static struct i2c_driver qt1070_driver = {
        .driver = {
                .name   = "qt1070",
+               .of_match_table = of_match_ptr(qt1070_of_match),
                .pm     = &qt1070_pm_ops,
        },
        .id_table       = qt1070_id,
diff --git a/drivers/input/touchscreen/tsc2007.c 
b/drivers/input/touchscreen/tsc2007.c
index 5d0cd51c6f41..a4b7b4c3d27b 100644
--- a/drivers/input/touchscreen/tsc2007.c
+++ b/drivers/input/touchscreen/tsc2007.c
@@ -455,6 +455,14 @@ static int tsc2007_probe(struct i2c_client *client,
 
        tsc2007_stop(ts);
 
+       /* power down the chip (TSC2007_SETUP does not ACK on I2C) */
+       err = tsc2007_xfer(ts, PWRDOWN);
+       if (err < 0) {
+               dev_err(&client->dev,
+                       "Failed to setup chip: %d\n", err);
+               return err;     /* usually, chip does not respond */
+       }
+
        err = input_register_device(input_dev);
        if (err) {
                dev_err(&client->dev,
diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
index fa0adef32bd6..62739766b60b 100644
--- a/drivers/iommu/iova.c
+++ b/drivers/iommu/iova.c
@@ -126,7 +126,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain 
*iovad,
                                break;  /* found a free slot */
                }
 adjust_limit_pfn:
-               limit_pfn = curr_iova->pfn_lo - 1;
+               limit_pfn = curr_iova->pfn_lo ? (curr_iova->pfn_lo - 1) : 0;
 move_left:
                prev = curr;
                curr = rb_prev(curr);
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index c5f1757ac61d..82e00e3ad0e0 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -663,7 +663,7 @@ static struct irq_chip its_irq_chip = {
  * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
  */
 #define IRQS_PER_CHUNK_SHIFT   5
-#define IRQS_PER_CHUNK         (1 << IRQS_PER_CHUNK_SHIFT)
+#define IRQS_PER_CHUNK         (1UL << IRQS_PER_CHUNK_SHIFT)
 
 static unsigned long *lpi_bitmap;
 static u32 lpi_chunks;
@@ -1168,11 +1168,10 @@ static struct its_device *its_create_device(struct 
its_node *its, u32 dev_id,
 
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        /*
-        * At least one bit of EventID is being used, hence a minimum
-        * of two entries. No, the architecture doesn't let you
-        * express an ITT with a single entry.
+        * We allocate at least one chunk worth of LPIs bet device,
+        * and thus that many ITEs. The device may require less though.
         */
-       nr_ites = max(2UL, roundup_pow_of_two(nvecs));
+       nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
        sz = nr_ites * its->ite_size;
        sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
        itt = kzalloc(sz, GFP_KERNEL);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 86ab6d14d782..ca968c3f25c7 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3372,9 +3372,20 @@ static int fetch_block(struct stripe_head *sh, struct 
stripe_head_state *s,
                BUG_ON(test_bit(R5_Wantcompute, &dev->flags));
                BUG_ON(test_bit(R5_Wantread, &dev->flags));
                BUG_ON(sh->batch_head);
+
+               /*
+                * In the raid6 case if the only non-uptodate disk is P
+                * then we already trusted P to compute the other failed
+                * drives. It is safe to compute rather than re-read P.
+                * In other cases we only compute blocks from failed
+                * devices, otherwise check/repair might fail to detect
+                * a real inconsistency.
+                */
+
                if ((s->uptodate == disks - 1) &&
+                   ((sh->qd_idx >= 0 && sh->pd_idx == disk_idx) ||
                    (s->failed && (disk_idx == s->failed_num[0] ||
-                                  disk_idx == s->failed_num[1]))) {
+                                  disk_idx == s->failed_num[1])))) {
                        /* have disk failed, and we're requested to fetch it;
                         * do compute it
                         */
diff --git a/drivers/media/i2c/soc_camera/ov6650.c 
b/drivers/media/i2c/soc_camera/ov6650.c
index 1f8af1ee8352..1e4783b51a35 100644
--- a/drivers/media/i2c/soc_camera/ov6650.c
+++ b/drivers/media/i2c/soc_camera/ov6650.c
@@ -1033,7 +1033,7 @@ static int ov6650_probe(struct i2c_client *client,
        priv->code        = MEDIA_BUS_FMT_YUYV8_2X8;
        priv->colorspace  = V4L2_COLORSPACE_JPEG;
 
-       priv->clk = v4l2_clk_get(&client->dev, "mclk");
+       priv->clk = v4l2_clk_get(&client->dev, NULL);
        if (IS_ERR(priv->clk)) {
                ret = PTR_ERR(priv->clk);
                goto eclkget;
diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2.c 
b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
index f7ce493b1fee..a0b61e88c838 100644
--- a/drivers/media/pci/solo6x10/solo6x10-v4l2.c
+++ b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
@@ -342,6 +342,17 @@ static void solo_stop_streaming(struct vb2_queue *q)
        struct solo_dev *solo_dev = vb2_get_drv_priv(q);
 
        solo_stop_thread(solo_dev);
+
+       spin_lock(&solo_dev->slock);
+       while (!list_empty(&solo_dev->vidq_active)) {
+               struct solo_vb2_buf *buf = list_entry(
+                               solo_dev->vidq_active.next,
+                               struct solo_vb2_buf, list);
+
+               list_del(&buf->list);
+               vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
+       }
+       spin_unlock(&solo_dev->slock);
        INIT_LIST_HEAD(&solo_dev->vidq_active);
 }
 
diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c 
b/drivers/media/usb/cpia2/cpia2_v4l.c
index 9caea8344547..d793c630f1dd 100644
--- a/drivers/media/usb/cpia2/cpia2_v4l.c
+++ b/drivers/media/usb/cpia2/cpia2_v4l.c
@@ -812,7 +812,7 @@ static int cpia2_querybuf(struct file *file, void *fh, 
struct v4l2_buffer *buf)
        struct camera_data *cam = video_drvdata(file);
 
        if(buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
-          buf->index > cam->num_frames)
+          buf->index >= cam->num_frames)
                return -EINVAL;
 
        buf->m.offset = cam->buffers[buf->index].data - cam->frame_buffer;
@@ -863,7 +863,7 @@ static int cpia2_qbuf(struct file *file, void *fh, struct 
v4l2_buffer *buf)
 
        if(buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
           buf->memory != V4L2_MEMORY_MMAP ||
-          buf->index > cam->num_frames)
+          buf->index >= cam->num_frames)
                return -EINVAL;
 
        DBG("QBUF #%d\n", buf->index);
diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
index cc91f7b3d90c..eb29113e0bac 100644
--- a/drivers/misc/enclosure.c
+++ b/drivers/misc/enclosure.c
@@ -148,7 +148,7 @@ enclosure_register(struct device *dev, const char *name, 
int components,
        for (i = 0; i < components; i++) {
                edev->component[i].number = -1;
                edev->component[i].slot = -1;
-               edev->component[i].power_status = 1;
+               edev->component[i].power_status = -1;
        }
 
        mutex_lock(&container_list_lock);
@@ -600,6 +600,11 @@ static ssize_t get_component_power_status(struct device 
*cdev,
 
        if (edev->cb->get_power_status)
                edev->cb->get_power_status(edev, ecomp);
+
+       /* If still uninitialized, the callback failed or does not exist. */
+       if (ecomp->power_status == -1)
+               return (edev->cb->get_power_status) ? -EIO : -ENOTTY;
+
        return snprintf(buf, 40, "%s\n", ecomp->power_status ? "on" : "off");
 }
 
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 27864c0863ef..8406f346b0be 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -626,7 +626,8 @@ static void nand_command(struct mtd_info *mtd, unsigned int 
command,
                chip->cmd_ctrl(mtd, readcmd, ctrl);
                ctrl &= ~NAND_CTRL_CHANGE;
        }
-       chip->cmd_ctrl(mtd, command, ctrl);
+       if (command != NAND_CMD_NONE)
+               chip->cmd_ctrl(mtd, command, ctrl);
 
        /* Address cycle, when necessary */
        ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
@@ -655,6 +656,7 @@ static void nand_command(struct mtd_info *mtd, unsigned int 
command,
         */
        switch (command) {
 
+       case NAND_CMD_NONE:
        case NAND_CMD_PAGEPROG:
        case NAND_CMD_ERASE1:
        case NAND_CMD_ERASE2:
@@ -717,7 +719,9 @@ static void nand_command_lp(struct mtd_info *mtd, unsigned 
int command,
        }
 
        /* Command latch cycle */
-       chip->cmd_ctrl(mtd, command, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
+       if (command != NAND_CMD_NONE)
+               chip->cmd_ctrl(mtd, command,
+                              NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
 
        if (column != -1 || page_addr != -1) {
                int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
@@ -750,6 +754,7 @@ static void nand_command_lp(struct mtd_info *mtd, unsigned 
int command,
         */
        switch (command) {
 
+       case NAND_CMD_NONE:
        case NAND_CMD_CACHEDPROG:
        case NAND_CMD_PAGEPROG:
        case NAND_CMD_ERASE1:
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2cb34b0f3856..eadccf498589 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3276,12 +3276,17 @@ static void bond_fold_stats(struct rtnl_link_stats64 
*_res,
        for (i = 0; i < sizeof(*_res) / sizeof(u64); i++) {
                u64 nv = new[i];
                u64 ov = old[i];
+               s64 delta = nv - ov;
 
                /* detects if this particular field is 32bit only */
                if (((nv | ov) >> 32) == 0)
-                       res[i] += (u32)nv - (u32)ov;
-               else
-                       res[i] += nv - ov;
+                       delta = (s64)(s32)((u32)nv - (u32)ov);
+
+               /* filter anomalies, some drivers reset their stats
+                * at down/up events.
+                */
+               if (delta > 0)
+                       res[i] += delta;
        }
 }
 
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c 
b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
index c31e691d11fc..e8d31640058d 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
@@ -604,6 +604,7 @@ static void xgene_enet_cle_bypass(struct xgene_enet_pdata 
*pdata,
        xgene_enet_rd_csr(pdata, CLE_BYPASS_REG0_0_ADDR, &cb);
        cb |= CFG_CLE_BYPASS_EN0;
        CFG_CLE_IP_PROTOCOL0_SET(&cb, 3);
+       CFG_CLE_IP_HDR_LEN_SET(&cb, 0);
        xgene_enet_wr_csr(pdata, CLE_BYPASS_REG0_0_ADDR, cb);
 
        xgene_enet_rd_csr(pdata, CLE_BYPASS_REG1_0_ADDR, &cb);
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h 
b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
index c153a1dc5ff7..480312105964 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
@@ -147,6 +147,7 @@ enum xgene_enet_rm {
 #define CFG_RXCLK_MUXSEL0_SET(dst, val)        xgene_set_bits(dst, val, 26, 3)
 
 #define CFG_CLE_IP_PROTOCOL0_SET(dst, val)     xgene_set_bits(dst, val, 16, 2)
+#define CFG_CLE_IP_HDR_LEN_SET(dst, val)       xgene_set_bits(dst, val, 8, 5)
 #define CFG_CLE_DSTQID0_SET(dst, val)          xgene_set_bits(dst, val, 0, 12)
 #define CFG_CLE_FPSEL0_SET(dst, val)           xgene_set_bits(dst, val, 16, 4)
 #define CFG_MACMODE_SET(dst, val)              xgene_set_bits(dst, val, 18, 2)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c 
b/drivers/net/ethernet/faraday/ftgmac100.c
index 6d0c5d5eea6d..58c0fccdd8cb 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -28,6 +28,7 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/netdevice.h>
+#include <linux/of.h>
 #include <linux/phy.h>
 #include <linux/platform_device.h>
 #include <net/ip.h>
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c 
b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
index 2ce0eba5e040..38431b49020f 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
@@ -983,7 +983,7 @@ static void fm10k_self_test(struct net_device *dev,
 
        memset(data, 0, sizeof(*data) * FM10K_TEST_LEN);
 
-       if (FM10K_REMOVED(hw)) {
+       if (FM10K_REMOVED(hw->hw_addr)) {
                netif_err(interface, drv, dev,
                          "Interface removed - test blocked\n");
                eth_test->flags |= ETH_TEST_FL_FAILED;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c 
b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index 488a50d59dca..3da1f206ff84 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -1073,6 +1073,11 @@ static int i40e_get_eeprom_len(struct net_device *netdev)
        struct i40e_hw *hw = &np->vsi->back->hw;
        u32 val;
 
+#define X722_EEPROM_SCOPE_LIMIT 0x5B9FFF
+       if (hw->mac.type == I40E_MAC_X722) {
+               val = X722_EEPROM_SCOPE_LIMIT + 1;
+               return val;
+       }
        val = (rd32(hw, I40E_GLPCI_LBARCTRL)
                & I40E_GLPCI_LBARCTRL_FL_SIZE_MASK)
                >> I40E_GLPCI_LBARCTRL_FL_SIZE_SHIFT;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_nvm.c 
b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
index 6100cdd9ad13..dd4e6ea9e0e1 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_nvm.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
@@ -292,14 +292,14 @@ i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 
offset,
 {
        enum i40e_status_code ret_code = 0;
 
-       if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
-               ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
-               if (!ret_code) {
+       ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
+       if (!ret_code) {
+               if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
                        ret_code = i40e_read_nvm_word_aq(hw, offset, data);
-                       i40e_release_nvm(hw);
+               } else {
+                       ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
                }
-       } else {
-               ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
+               i40e_release_nvm(hw);
        }
        return ret_code;
 }
diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c
index 8aecea0d5dbf..142015af43db 100644
--- a/drivers/net/ipvlan/ipvlan_core.c
+++ b/drivers/net/ipvlan/ipvlan_core.c
@@ -282,6 +282,10 @@ static int ipvlan_rcv_frame(struct ipvl_addr *addr, struct 
sk_buff **pskb,
                if (dev_forward_skb(ipvlan->dev, skb) == NET_RX_SUCCESS)
                        success = true;
        } else {
+               if (!ether_addr_equal_64bits(eth_hdr(skb)->h_dest,
+                                            ipvlan->phy_dev->dev_addr))
+                       skb->pkt_type = PACKET_OTHERHOST;
+
                ret = RX_HANDLER_ANOTHER;
                success = true;
        }
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index ba21d072be31..6b4cc1c2e6b4 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -399,6 +399,9 @@ static int veth_newlink(struct net *src_net, struct 
net_device *dev,
        if (ifmp && (dev->ifindex != 0))
                peer->ifindex = ifmp->ifi_index;
 
+       peer->gso_max_size = dev->gso_max_size;
+       peer->gso_max_segs = dev->gso_max_segs;
+
        err = register_netdevice(peer);
        put_net(net);
        net = NULL;
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index dab3bf6649e6..e4ff1e45c02e 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -2834,6 +2834,11 @@ static int vxlan_dev_configure(struct net *src_net, 
struct net_device *dev,
                needed_headroom = lowerdev->hard_header_len;
        }
 
+       if (lowerdev) {
+               dev->gso_max_size = lowerdev->gso_max_size;
+               dev->gso_max_segs = lowerdev->gso_max_segs;
+       }
+
        if (conf->mtu) {
                err = __vxlan_change_mtu(dev, lowerdev, dst, conf->mtu, false);
                if (err)
diff --git a/drivers/net/wireless/ath/ath10k/debug.c 
b/drivers/net/wireless/ath/ath10k/debug.c
index 1a88a24ffeac..30c357567054 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -1892,6 +1892,15 @@ static ssize_t ath10k_write_simulate_radar(struct file 
*file,
                                           size_t count, loff_t *ppos)
 {
        struct ath10k *ar = file->private_data;
+       struct ath10k_vif *arvif;
+
+       /* Just check for for the first vif alone, as all the vifs will be
+        * sharing the same channel and if the channel is disabled, all the
+        * vifs will share the same 'is_started' state.
+        */
+       arvif = list_first_entry(&ar->arvifs, typeof(*arvif), list);
+       if (!arvif->is_started)
+               return -EINVAL;
 
        ieee80211_radar_detected(ar->hw);
 
diff --git a/drivers/net/wireless/ath/ath10k/mac.c 
b/drivers/net/wireless/ath/ath10k/mac.c
index bed8d89fe3a0..09e14ce85dd0 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -5497,6 +5497,16 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
                           "mac vdev %d peer delete %pM (sta gone)\n",
                           arvif->vdev_id, sta->addr);
 
+               if (sta->tdls) {
+                       ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id,
+                                                         sta,
+                                                         
WMI_TDLS_PEER_STATE_TEARDOWN);
+                       if (ret)
+                               ath10k_warn(ar, "failed to update tdls peer 
state for %pM state %d: %i\n",
+                                           sta->addr,
+                                           WMI_TDLS_PEER_STATE_TEARDOWN, ret);
+               }
+
                ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
                if (ret)
                        ath10k_warn(ar, "failed to delete peer %pM for vdev %d: 
%i\n",
@@ -6427,7 +6437,7 @@ ath10k_mac_update_rx_channel(struct ath10k *ar,
        lockdep_assert_held(&ar->data_lock);
 
        WARN_ON(ctx && vifs);
-       WARN_ON(vifs && n_vifs != 1);
+       WARN_ON(vifs && !n_vifs);
 
        /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
         * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h 
b/drivers/net/wireless/ath/ath10k/wmi.h
index 72a4ef709577..a8b2553e8988 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -4826,7 +4826,8 @@ enum wmi_10_4_vdev_param {
 #define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
 
 #define WMI_TXBF_STS_CAP_OFFSET_LSB    4
-#define WMI_TXBF_STS_CAP_OFFSET_MASK   0xf0
+#define WMI_TXBF_STS_CAP_OFFSET_MASK   0x70
+#define WMI_TXBF_CONF_IMPLICIT_BF       BIT(7)
 #define WMI_BF_SOUND_DIM_OFFSET_LSB    8
 #define WMI_BF_SOUND_DIM_OFFSET_MASK   0xf00
 
diff --git a/drivers/net/wireless/ath/wil6210/main.c 
b/drivers/net/wireless/ath/wil6210/main.c
index 85bca557a339..f09fafaaaf1a 100644
--- a/drivers/net/wireless/ath/wil6210/main.c
+++ b/drivers/net/wireless/ath/wil6210/main.c
@@ -125,9 +125,15 @@ void wil_memcpy_fromio_32(void *dst, const volatile void 
__iomem *src,
        u32 *d = dst;
        const volatile u32 __iomem *s = src;
 
-       /* size_t is unsigned, if (count%4 != 0) it will wrap */
-       for (count += 4; count > 4; count -= 4)
+       for (; count >= 4; count -= 4)
                *d++ = __raw_readl(s++);
+
+       if (unlikely(count)) {
+               /* count can be 1..3 */
+               u32 tmp = __raw_readl(s);
+
+               memcpy(d, &tmp, count);
+       }
 }
 
 void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
@@ -136,8 +142,16 @@ void wil_memcpy_toio_32(volatile void __iomem *dst, const 
void *src,
        volatile u32 __iomem *d = dst;
        const u32 *s = src;
 
-       for (count += 4; count > 4; count -= 4)
+       for (; count >= 4; count -= 4)
                __raw_writel(*s++, d++);
+
+       if (unlikely(count)) {
+               /* count can be 1..3 */
+               u32 tmp = 0;
+
+               memcpy(&tmp, s, count);
+               __raw_writel(tmp, d);
+       }
 }
 
 static void wil_disconnect_cid(struct wil6210_priv *wil, int cid,
diff --git a/drivers/net/wireless/mac80211_hwsim.c 
b/drivers/net/wireless/mac80211_hwsim.c
index f877fbc7d7af..8a9164da6c50 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -699,16 +699,21 @@ static int hwsim_fops_ps_write(void *dat, u64 val)
            val != PS_MANUAL_POLL)
                return -EINVAL;
 
-       old_ps = data->ps;
-       data->ps = val;
-
-       local_bh_disable();
        if (val == PS_MANUAL_POLL) {
+               if (data->ps != PS_ENABLED)
+                       return -EINVAL;
+               local_bh_disable();
                ieee80211_iterate_active_interfaces_atomic(
                        data->hw, IEEE80211_IFACE_ITER_NORMAL,
                        hwsim_send_ps_poll, data);
-               data->ps_poll_pending = true;
-       } else if (old_ps == PS_DISABLED && val != PS_DISABLED) {
+               local_bh_enable();
+               return 0;
+       }
+       old_ps = data->ps;
+       data->ps = val;
+
+       local_bh_disable();
+       if (old_ps == PS_DISABLED && val != PS_DISABLED) {
                ieee80211_iterate_active_interfaces_atomic(
                        data->hw, IEEE80211_IFACE_ITER_NORMAL,
                        hwsim_send_nullfunc_ps, data);
diff --git a/drivers/nfc/nfcmrvl/fw_dnld.c b/drivers/nfc/nfcmrvl/fw_dnld.c
index af62c4c854f3..b4f31dad40d6 100644
--- a/drivers/nfc/nfcmrvl/fw_dnld.c
+++ b/drivers/nfc/nfcmrvl/fw_dnld.c
@@ -17,7 +17,7 @@
  */
 
 #include <linux/module.h>
-#include <linux/unaligned/access_ok.h>
+#include <asm/unaligned.h>
 #include <linux/firmware.h>
 #include <linux/nfc.h>
 #include <net/nfc/nci.h>
diff --git a/drivers/nfc/nfcmrvl/spi.c b/drivers/nfc/nfcmrvl/spi.c
index a7faa0bcc01e..fc8e78a29d77 100644
--- a/drivers/nfc/nfcmrvl/spi.c
+++ b/drivers/nfc/nfcmrvl/spi.c
@@ -96,10 +96,9 @@ static int nfcmrvl_spi_nci_send(struct nfcmrvl_private *priv,
        /* Send the SPI packet */
        err = nci_spi_send(drv_data->nci_spi, &drv_data->handshake_completion,
                           skb);
-       if (err != 0) {
+       if (err)
                nfc_err(priv->dev, "spi_send failed %d", err);
-               kfree_skb(skb);
-       }
+
        return err;
 }
 
diff --git a/drivers/of/device.c b/drivers/of/device.c
index 97a280d50d6d..7c509bff9295 100644
--- a/drivers/of/device.c
+++ b/drivers/of/device.c
@@ -223,7 +223,7 @@ ssize_t of_device_get_modalias(struct device *dev, char 
*str, ssize_t len)
                        str[i] = '_';
        }
 
-       return tsize;
+       return repend;
 }
 EXPORT_SYMBOL_GPL(of_device_get_modalias);
 
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 32bd8ab79d53..5e42b5f2f565 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -463,8 +463,6 @@ static void pci_device_shutdown(struct device *dev)
 
        if (drv && drv->shutdown)
                drv->shutdown(pci_dev);
-       pci_msi_shutdown(pci_dev);
-       pci_msix_shutdown(pci_dev);
 
 #ifdef CONFIG_KEXEC_CORE
        /*
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 8af1f900ea65..1ba58fb6f796 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -321,10 +321,16 @@ validate_group(struct perf_event *event)
        return 0;
 }
 
+static struct arm_pmu_platdata *armpmu_get_platdata(struct arm_pmu *armpmu)
+{
+       struct platform_device *pdev = armpmu->plat_device;
+
+       return pdev ? dev_get_platdata(&pdev->dev) : NULL;
+}
+
 static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
 {
        struct arm_pmu *armpmu;
-       struct platform_device *plat_device;
        struct arm_pmu_platdata *plat;
        int ret;
        u64 start_clock, finish_clock;
@@ -336,8 +342,8 @@ static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
         * dereference.
         */
        armpmu = *(void **)dev;
-       plat_device = armpmu->plat_device;
-       plat = dev_get_platdata(&plat_device->dev);
+
+       plat = armpmu_get_platdata(armpmu);
 
        start_clock = sched_clock();
        if (plat && plat->handle_irq)
diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c
index d4de0607b502..3039fb762893 100644
--- a/drivers/pwm/pwm-tegra.c
+++ b/drivers/pwm/pwm-tegra.c
@@ -69,6 +69,7 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct 
pwm_device *pwm,
        struct tegra_pwm_chip *pc = to_tegra_pwm_chip(chip);
        unsigned long long c;
        unsigned long rate, hz;
+       unsigned long long ns100 = NSEC_PER_SEC;
        u32 val = 0;
        int err;
 
@@ -87,9 +88,11 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct 
pwm_device *pwm,
         * cycles at the PWM clock rate will take period_ns nanoseconds.
         */
        rate = clk_get_rate(pc->clk) >> PWM_DUTY_WIDTH;
-       hz = NSEC_PER_SEC / period_ns;
 
-       rate = (rate + (hz / 2)) / hz;
+       /* Consider precision in PWM_SCALE_WIDTH rate calculation */
+       ns100 *= 100;
+       hz = DIV_ROUND_CLOSEST_ULL(ns100, period_ns);
+       rate = DIV_ROUND_CLOSEST(rate * 100, hz);
 
        /*
         * Since the actual PWM divider is the register's frequency divider
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 7a58128a0000..2f61d8cd5882 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -835,8 +835,10 @@ static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd)
 
        qc->err_mask |= AC_ERR_OTHER;
        sata_port->ioasa.status |= ATA_BUSY;
-       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
        ata_qc_complete(qc);
+       if (ipr_cmd->eh_comp)
+               complete(ipr_cmd->eh_comp);
+       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
 }
 
 /**
@@ -5864,8 +5866,10 @@ static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
                res->in_erp = 0;
        }
        scsi_dma_unmap(ipr_cmd->scsi_cmd);
-       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
        scsi_cmd->scsi_done(scsi_cmd);
+       if (ipr_cmd->eh_comp)
+               complete(ipr_cmd->eh_comp);
+       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
 }
 
 /**
@@ -6255,8 +6259,10 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
        }
 
        scsi_dma_unmap(ipr_cmd->scsi_cmd);
-       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
        scsi_cmd->scsi_done(scsi_cmd);
+       if (ipr_cmd->eh_comp)
+               complete(ipr_cmd->eh_comp);
+       list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
 }
 
 /**
@@ -6282,8 +6288,10 @@ static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
                scsi_dma_unmap(scsi_cmd);
 
                spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags);
-               list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
                scsi_cmd->scsi_done(scsi_cmd);
+               if (ipr_cmd->eh_comp)
+                       complete(ipr_cmd->eh_comp);
+               list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
                spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags);
        } else {
                spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 60720e5b1ebc..6b61b09b3226 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -180,7 +180,7 @@ static struct {
        {"HITACHI", "6586-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
        {"HITACHI", "6588-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
        {"HP", "A6189A", NULL, BLIST_SPARSELUN | BLIST_LARGELUN},       /* HP 
VA7400 */
-       {"HP", "OPEN-", "*", BLIST_REPORTLUN2}, /* HP XP Arrays */
+       {"HP", "OPEN-", "*", BLIST_REPORTLUN2 | BLIST_TRY_VPD_PAGES}, /* HP XP 
Arrays */
        {"HP", "NetRAID-4M", NULL, BLIST_FORCELUN},
        {"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
        {"HP", "C1557A", NULL, BLIST_FORCELUN},
@@ -589,17 +589,12 @@ int scsi_get_device_flags_keyed(struct scsi_device *sdev,
                                int key)
 {
        struct scsi_dev_info_list *devinfo;
-       int err;
 
        devinfo = scsi_dev_info_list_find(vendor, model, key);
        if (!IS_ERR(devinfo))
                return devinfo->flags;
 
-       err = PTR_ERR(devinfo);
-       if (err != -ENOENT)
-               return err;
-
-       /* nothing found, return nothing */
+       /* key or device not found: return nothing */
        if (key != SCSI_DEVINFO_GLOBAL)
                return 0;
 
diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c
index 4d655b568269..5711d58f9e81 100644
--- a/drivers/scsi/scsi_dh.c
+++ b/drivers/scsi/scsi_dh.c
@@ -56,10 +56,13 @@ static const struct scsi_dh_blist scsi_dh_blist[] = {
        {"IBM", "1815",                 "rdac", },
        {"IBM", "1818",                 "rdac", },
        {"IBM", "3526",                 "rdac", },
+       {"IBM", "3542",                 "rdac", },
+       {"IBM", "3552",                 "rdac", },
        {"SGI", "TP9",                  "rdac", },
        {"SGI", "IS",                   "rdac", },
-       {"STK", "OPENstorage D280",     "rdac", },
+       {"STK", "OPENstorage",          "rdac", },
        {"STK", "FLEXLINE 380",         "rdac", },
+       {"STK", "BladeCtlr",            "rdac", },
        {"SUN", "CSM",                  "rdac", },
        {"SUN", "LCSM100",              "rdac", },
        {"SUN", "STK6580_6780",         "rdac", },
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
index 044d06410d4c..01168acc864d 100644
--- a/drivers/scsi/ses.c
+++ b/drivers/scsi/ses.c
@@ -546,7 +546,6 @@ static void ses_enclosure_data_process(struct 
enclosure_device *edev,
                                        ecomp = &edev->component[components++];
 
                                if (!IS_ERR(ecomp)) {
-                                       ses_get_power_status(edev, ecomp);
                                        if (addl_desc_ptr)
                                                ses_process_descriptor(
                                                        ecomp,
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 0f0ff75755e0..4b43effbf4fc 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -535,6 +535,7 @@ sg_read(struct file *filp, char __user *buf, size_t count, 
loff_t * ppos)
        } else
                count = (old_hdr->result == 0) ? 0 : -EIO;
        sg_finish_rem_req(srp);
+       sg_remove_request(sfp, srp);
        retval = count;
 free_old_hdr:
        kfree(old_hdr);
@@ -575,6 +576,7 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, 
Sg_request * srp)
        }
 err_out:
        err2 = sg_finish_rem_req(srp);
+       sg_remove_request(sfp, srp);
        return err ? : err2 ? : count;
 }
 
@@ -674,18 +676,14 @@ sg_write(struct file *filp, const char __user *buf, 
size_t count, loff_t * ppos)
         * is a non-zero input_size, so emit a warning.
         */
        if (hp->dxfer_direction == SG_DXFER_TO_FROM_DEV) {
-               static char cmd[TASK_COMM_LEN];
-               if (strcmp(current->comm, cmd)) {
-                       printk_ratelimited(KERN_WARNING
-                                          "sg_write: data in/out %d/%d bytes "
-                                          "for SCSI command 0x%x-- guessing "
-                                          "data in;\n   program %s not setting 
"
-                                          "count and/or reply_len properly\n",
-                                          old_hdr.reply_len - 
(int)SZ_SG_HEADER,
-                                          input_size, (unsigned int) cmnd[0],
-                                          current->comm);
-                       strcpy(cmd, current->comm);
-               }
+               printk_ratelimited(KERN_WARNING
+                                  "sg_write: data in/out %d/%d bytes "
+                                  "for SCSI command 0x%x-- guessing "
+                                  "data in;\n   program %s not setting "
+                                  "count and/or reply_len properly\n",
+                                  old_hdr.reply_len - (int)SZ_SG_HEADER,
+                                  input_size, (unsigned int) cmnd[0],
+                                  current->comm);
        }
        k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking);
        return (k < 0) ? k : count;
@@ -784,11 +782,15 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
                        "sg_common_write:  scsi opcode=0x%02x, cmd_size=%d\n",
                        (int) cmnd[0], (int) hp->cmd_len));
 
+       if (hp->dxfer_len >= SZ_256M)
+               return -EINVAL;
+
        k = sg_start_req(srp, cmnd);
        if (k) {
                SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
                        "sg_common_write: start_req err=%d\n", k));
                sg_finish_rem_req(srp);
+               sg_remove_request(sfp, srp);
                return k;       /* probably out of space --> ENOMEM */
        }
        if (atomic_read(&sdp->detaching)) {
@@ -801,6 +803,7 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
                }
 
                sg_finish_rem_req(srp);
+               sg_remove_request(sfp, srp);
                return -ENODEV;
        }
 
@@ -1290,6 +1293,7 @@ sg_rq_end_io_usercontext(struct work_struct *work)
        struct sg_fd *sfp = srp->parentfp;
 
        sg_finish_rem_req(srp);
+       sg_remove_request(sfp, srp);
        kref_put(&sfp->f_ref, sg_remove_sfp);
 }
 
@@ -1834,8 +1838,6 @@ sg_finish_rem_req(Sg_request *srp)
        else
                sg_remove_scat(sfp, req_schp);
 
-       sg_remove_request(sfp, srp);
-
        return ret;
 }
 
@@ -2182,12 +2184,17 @@ sg_remove_sfp_usercontext(struct work_struct *work)
        struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
        struct sg_device *sdp = sfp->parentdp;
        Sg_request *srp;
+       unsigned long iflags;
 
        /* Cleanup any responses which were never read(). */
+       write_lock_irqsave(&sfp->rq_list_lock, iflags);
        while (!list_empty(&sfp->rq_list)) {
                srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
                sg_finish_rem_req(srp);
+               list_del(&srp->entry);
+               srp->parentfp = NULL;
        }
+       write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
 
        if (sfp->reserve.bufflen > 0) {
                SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp,
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index ed8283e7397a..83b53cd956aa 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -457,6 +457,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct 
spi_transfer *xfer,
        int                     elements = 0;
        int                     word_len, element_count;
        struct omap2_mcspi_cs   *cs = spi->controller_state;
+       void __iomem            *chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
+
        mcspi = spi_master_get_devdata(spi->master);
        mcspi_dma = &mcspi->dma_channels[spi->chip_select];
        count = xfer->len;
@@ -517,8 +519,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct 
spi_transfer *xfer,
        if (l & OMAP2_MCSPI_CHCONF_TURBO) {
                elements--;
 
-               if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
-                                  & OMAP2_MCSPI_CHSTAT_RXS)) {
+               if (!mcspi_wait_for_reg_bit(chstat_reg,
+                                           OMAP2_MCSPI_CHSTAT_RXS)) {
                        u32 w;
 
                        w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
@@ -536,8 +538,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct 
spi_transfer *xfer,
                        return count;
                }
        }
-       if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
-                               & OMAP2_MCSPI_CHSTAT_RXS)) {
+       if (!mcspi_wait_for_reg_bit(chstat_reg, OMAP2_MCSPI_CHSTAT_RXS)) {
                u32 w;
 
                w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
index e77add01b0e9..48888ab630c2 100644
--- a/drivers/spi/spi-sun6i.c
+++ b/drivers/spi/spi-sun6i.c
@@ -457,7 +457,7 @@ err_free_master:
 
 static int sun6i_spi_remove(struct platform_device *pdev)
 {
-       pm_runtime_disable(&pdev->dev);
+       pm_runtime_force_suspend(&pdev->dev);
 
        return 0;
 }
diff --git a/drivers/staging/speakup/kobjects.c 
b/drivers/staging/speakup/kobjects.c
index fdfeb42b2b8f..06ef26872462 100644
--- a/drivers/staging/speakup/kobjects.c
+++ b/drivers/staging/speakup/kobjects.c
@@ -831,7 +831,9 @@ static ssize_t message_show(struct kobject *kobj,
        struct msg_group_t *group = spk_find_msg_group(attr->attr.name);
        unsigned long flags;
 
-       BUG_ON(!group);
+       if (WARN_ON(!group))
+               return -EINVAL;
+
        spin_lock_irqsave(&speakup_info.spinlock, flags);
        retval = message_show_helper(buf, group->start, group->end);
        spin_unlock_irqrestore(&speakup_info.spinlock, flags);
@@ -843,7 +845,9 @@ static ssize_t message_store(struct kobject *kobj, struct 
kobj_attribute *attr,
 {
        struct msg_group_t *group = spk_find_msg_group(attr->attr.name);
 
-       BUG_ON(!group);
+       if (WARN_ON(!group))
+               return -EINVAL;
+
        return message_store_helper(buf, count, group);
 }
 
diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index dbbe72c7e255..f78353ddeea5 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -2179,6 +2179,8 @@ static s32 Handle_Get_InActiveTime(struct host_if_drv 
*hif_drv,
        wid.type = WID_STR;
        wid.size = ETH_ALEN;
        wid.val = kmalloc(wid.size, GFP_KERNEL);
+       if (!wid.val)
+               return -ENOMEM;
 
        stamac = wid.val;
        memcpy(stamac, strHostIfStaInactiveT->mac, ETH_ALEN);
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 571c21727ff9..88bd950665fa 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -1385,6 +1385,7 @@ static void dwc2_conn_id_status_change(struct work_struct 
*work)
                dwc2_core_init(hsotg, false, -1);
                dwc2_enable_global_interrupts(hsotg);
                spin_lock_irqsave(&hsotg->lock, flags);
+               dwc2_hsotg_disconnect(hsotg);
                dwc2_hsotg_core_init_disconnected(hsotg, false);
                spin_unlock_irqrestore(&hsotg->lock, flags);
                dwc2_hsotg_core_connect(hsotg);
diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c 
b/drivers/usb/gadget/udc/bdc/bdc_core.c
index ccb9c213cc9f..e9bd8d4abca0 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_core.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
@@ -475,7 +475,7 @@ static int bdc_probe(struct platform_device *pdev)
        bdc->dev = dev;
        dev_dbg(bdc->dev, "bdc->regs: %p irq=%d\n", bdc->regs, bdc->irq);
 
-       temp = bdc_readl(bdc->regs, BDC_BDCSC);
+       temp = bdc_readl(bdc->regs, BDC_BDCCAP1);
        if ((temp & BDC_P64) &&
                        !dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64))) {
                dev_dbg(bdc->dev, "Using 64-bit address\n");
diff --git a/drivers/usb/gadget/udc/bdc/bdc_pci.c 
b/drivers/usb/gadget/udc/bdc/bdc_pci.c
index 02968842b359..708e36f530d8 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_pci.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_pci.c
@@ -82,6 +82,7 @@ static int bdc_pci_probe(struct pci_dev *pci, const struct 
pci_device_id *id)
        if (ret) {
                dev_err(&pci->dev,
                        "couldn't add resources to bdc device\n");
+               platform_device_put(bdc);
                return ret;
        }
 
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c 
b/drivers/usb/gadget/udc/dummy_hcd.c
index 8080a11947b7..eb876ed96861 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -2105,16 +2105,13 @@ static int dummy_hub_control(
                        }
                        break;
                case USB_PORT_FEAT_POWER:
-                       if (hcd->speed == HCD_USB3) {
-                               if (dum_hcd->port_status & USB_PORT_STAT_POWER)
-                                       dev_dbg(dummy_dev(dum_hcd),
-                                               "power-off\n");
-                       } else
-                               if (dum_hcd->port_status &
-                                                       USB_SS_PORT_STAT_POWER)
-                                       dev_dbg(dummy_dev(dum_hcd),
-                                               "power-off\n");
-                       /* FALLS THROUGH */
+                       dev_dbg(dummy_dev(dum_hcd), "power-off\n");
+                       if (hcd->speed == HCD_USB3)
+                               dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
+                       else
+                               dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
+                       set_link_state(dum_hcd);
+                       break;
                default:
                        dum_hcd->port_status &= ~(1 << wValue);
                        set_link_state(dum_hcd);
@@ -2285,14 +2282,13 @@ static int dummy_hub_control(
                                if ((dum_hcd->port_status &
                                     USB_SS_PORT_STAT_POWER) != 0) {
                                        dum_hcd->port_status |= (1 << wValue);
-                                       set_link_state(dum_hcd);
                                }
                        } else
                                if ((dum_hcd->port_status &
                                     USB_PORT_STAT_POWER) != 0) {
                                        dum_hcd->port_status |= (1 << wValue);
-                                       set_link_state(dum_hcd);
                                }
+                       set_link_state(dum_hcd);
                }
                break;
        case GetPortErrorCount:
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index 9362424c2340..924b3d6c3e9b 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -759,8 +759,8 @@ static int clcdfb_of_dma_setup(struct clcd_fb *fb)
        if (err)
                return err;
 
-       framesize = fb->panel->mode.xres * fb->panel->mode.yres *
-                       fb->panel->bpp / 8;
+       framesize = PAGE_ALIGN(fb->panel->mode.xres * fb->panel->mode.yres *
+                       fb->panel->bpp / 8);
        fb->fb.screen_base = dma_alloc_coherent(&fb->dev->dev, framesize,
                        &dma, GFP_KERNEL);
        if (!fb->fb.screen_base)
diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c
index 162689227a23..b73520aaf697 100644
--- a/drivers/video/hdmi.c
+++ b/drivers/video/hdmi.c
@@ -321,6 +321,17 @@ int hdmi_vendor_infoframe_init(struct 
hdmi_vendor_infoframe *frame)
 }
 EXPORT_SYMBOL(hdmi_vendor_infoframe_init);
 
+static int hdmi_vendor_infoframe_length(const struct hdmi_vendor_infoframe 
*frame)
+{
+       /* for side by side (half) we also need to provide 3D_Ext_Data */
+       if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
+               return 6;
+       else if (frame->vic != 0 || frame->s3d_struct != 
HDMI_3D_STRUCTURE_INVALID)
+               return 5;
+       else
+               return 4;
+}
+
 /**
  * hdmi_vendor_infoframe_pack() - write a HDMI vendor infoframe to binary 
buffer
  * @frame: HDMI infoframe
@@ -341,19 +352,11 @@ ssize_t hdmi_vendor_infoframe_pack(struct 
hdmi_vendor_infoframe *frame,
        u8 *ptr = buffer;
        size_t length;
 
-       /* empty info frame */
-       if (frame->vic == 0 && frame->s3d_struct == HDMI_3D_STRUCTURE_INVALID)
-               return -EINVAL;
-
        /* only one of those can be supplied */
        if (frame->vic != 0 && frame->s3d_struct != HDMI_3D_STRUCTURE_INVALID)
                return -EINVAL;
 
-       /* for side by side (half) we also need to provide 3D_Ext_Data */
-       if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
-               frame->length = 6;
-       else
-               frame->length = 5;
+       frame->length = hdmi_vendor_infoframe_length(frame);
 
        length = HDMI_INFOFRAME_HEADER_SIZE + frame->length;
 
@@ -372,14 +375,16 @@ ssize_t hdmi_vendor_infoframe_pack(struct 
hdmi_vendor_infoframe *frame,
        ptr[5] = 0x0c;
        ptr[6] = 0x00;
 
-       if (frame->vic) {
-               ptr[7] = 0x1 << 5;      /* video format */
-               ptr[8] = frame->vic;
-       } else {
+       if (frame->s3d_struct != HDMI_3D_STRUCTURE_INVALID) {
                ptr[7] = 0x2 << 5;      /* video format */
                ptr[8] = (frame->s3d_struct & 0xf) << 4;
                if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
                        ptr[9] = (frame->s3d_ext_data & 0xf) << 4;
+       } else if (frame->vic) {
+               ptr[7] = 0x1 << 5;      /* video format */
+               ptr[8] = frame->vic;
+       } else {
+               ptr[7] = 0x0 << 5;      /* video format */
        }
 
        hdmi_infoframe_set_checksum(buffer, length);
@@ -1161,7 +1166,7 @@ hdmi_vendor_any_infoframe_unpack(union 
hdmi_vendor_any_infoframe *frame,
 
        if (ptr[0] != HDMI_INFOFRAME_TYPE_VENDOR ||
            ptr[1] != 1 ||
-           (ptr[2] != 5 && ptr[2] != 6))
+           (ptr[2] != 4 && ptr[2] != 5 && ptr[2] != 6))
                return -EINVAL;
 
        length = ptr[2];
@@ -1189,16 +1194,22 @@ hdmi_vendor_any_infoframe_unpack(union 
hdmi_vendor_any_infoframe *frame,
 
        hvf->length = length;
 
-       if (hdmi_video_format == 0x1) {
-               hvf->vic = ptr[4];
-       } else if (hdmi_video_format == 0x2) {
+       if (hdmi_video_format == 0x2) {
+               if (length != 5 && length != 6)
+                       return -EINVAL;
                hvf->s3d_struct = ptr[4] >> 4;
                if (hvf->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF) {
-                       if (length == 6)
-                               hvf->s3d_ext_data = ptr[5] >> 4;
-                       else
+                       if (length != 6)
                                return -EINVAL;
+                       hvf->s3d_ext_data = ptr[5] >> 4;
                }
+       } else if (hdmi_video_format == 0x1) {
+               if (length != 5)
+                       return -EINVAL;
+               hvf->vic = ptr[4];
+       } else {
+               if (length != 4)
+                       return -EINVAL;
        }
 
        return 0;
diff --git a/fs/aio.c b/fs/aio.c
index fe4f49212b99..88ede4a84ce0 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -68,9 +68,9 @@ struct aio_ring {
 #define AIO_RING_PAGES 8
 
 struct kioctx_table {
-       struct rcu_head rcu;
-       unsigned        nr;
-       struct kioctx   *table[];
+       struct rcu_head         rcu;
+       unsigned                nr;
+       struct kioctx __rcu     *table[];
 };
 
 struct kioctx_cpu {
@@ -115,7 +115,8 @@ struct kioctx {
        struct page             **ring_pages;
        long                    nr_pages;
 
-       struct work_struct      free_work;
+       struct rcu_head         free_rcu;
+       struct work_struct      free_work;      /* see free_ioctx() */
 
        /*
         * signals when all in-flight requests are done
@@ -326,7 +327,7 @@ static int aio_ring_mremap(struct vm_area_struct *vma)
        for (i = 0; i < table->nr; i++) {
                struct kioctx *ctx;
 
-               ctx = table->table[i];
+               ctx = rcu_dereference(table->table[i]);
                if (ctx && ctx->aio_ring_file == file) {
                        if (!atomic_read(&ctx->dead)) {
                                ctx->user_id = ctx->mmap_base = vma->vm_start;
@@ -573,6 +574,12 @@ static int kiocb_cancel(struct aio_kiocb *kiocb)
        return cancel(&kiocb->common);
 }
 
+/*
+ * free_ioctx() should be RCU delayed to synchronize against the RCU
+ * protected lookup_ioctx() and also needs process context to call
+ * aio_free_ring(), so the double bouncing through kioctx->free_rcu and
+ * ->free_work.
+ */
 static void free_ioctx(struct work_struct *work)
 {
        struct kioctx *ctx = container_of(work, struct kioctx, free_work);
@@ -586,6 +593,14 @@ static void free_ioctx(struct work_struct *work)
        kmem_cache_free(kioctx_cachep, ctx);
 }
 
+static void free_ioctx_rcufn(struct rcu_head *head)
+{
+       struct kioctx *ctx = container_of(head, struct kioctx, free_rcu);
+
+       INIT_WORK(&ctx->free_work, free_ioctx);
+       schedule_work(&ctx->free_work);
+}
+
 static void free_ioctx_reqs(struct percpu_ref *ref)
 {
        struct kioctx *ctx = container_of(ref, struct kioctx, reqs);
@@ -594,8 +609,8 @@ static void free_ioctx_reqs(struct percpu_ref *ref)
        if (ctx->rq_wait && atomic_dec_and_test(&ctx->rq_wait->count))
                complete(&ctx->rq_wait->comp);
 
-       INIT_WORK(&ctx->free_work, free_ioctx);
-       schedule_work(&ctx->free_work);
+       /* Synchronize against RCU protected table->table[] dereferences */
+       call_rcu(&ctx->free_rcu, free_ioctx_rcufn);
 }
 
 /*
@@ -636,9 +651,9 @@ static int ioctx_add_table(struct kioctx *ctx, struct 
mm_struct *mm)
        while (1) {
                if (table)
                        for (i = 0; i < table->nr; i++)
-                               if (!table->table[i]) {
+                               if (!rcu_access_pointer(table->table[i])) {
                                        ctx->id = i;
-                                       table->table[i] = ctx;
+                                       rcu_assign_pointer(table->table[i], 
ctx);
                                        spin_unlock(&mm->ioctx_lock);
 
                                        /* While kioctx setup is in progress,
@@ -813,11 +828,11 @@ static int kill_ioctx(struct mm_struct *mm, struct kioctx 
*ctx,
        }
 
        table = rcu_dereference_raw(mm->ioctx_table);
-       WARN_ON(ctx != table->table[ctx->id]);
-       table->table[ctx->id] = NULL;
+       WARN_ON(ctx != rcu_access_pointer(table->table[ctx->id]));
+       RCU_INIT_POINTER(table->table[ctx->id], NULL);
        spin_unlock(&mm->ioctx_lock);
 
-       /* percpu_ref_kill() will do the necessary call_rcu() */
+       /* free_ioctx_reqs() will do the necessary RCU synchronization */
        wake_up_all(&ctx->wait);
 
        /*
@@ -859,7 +874,8 @@ void exit_aio(struct mm_struct *mm)
 
        skipped = 0;
        for (i = 0; i < table->nr; ++i) {
-               struct kioctx *ctx = table->table[i];
+               struct kioctx *ctx =
+                       rcu_dereference_protected(table->table[i], true);
 
                if (!ctx) {
                        skipped++;
@@ -1048,7 +1064,7 @@ static struct kioctx *lookup_ioctx(unsigned long ctx_id)
        if (!table || id >= table->nr)
                goto out;
 
-       ctx = table->table[id];
+       ctx = rcu_dereference(table->table[id]);
        if (ctx && ctx->user_id == ctx_id) {
                percpu_ref_get(&ctx->users);
                ret = ctx;
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 600c67ef8a03..6d874b1cd53c 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -568,6 +568,7 @@ void btrfs_free_stale_device(struct btrfs_device *cur_dev)
                                btrfs_sysfs_remove_fsid(fs_devs);
                                list_del(&fs_devs->list);
                                free_fs_devices(fs_devs);
+                               break;
                        } else {
                                fs_devs->num_devices--;
                                list_del(&dev->dev_list);
@@ -4638,10 +4639,13 @@ static int __btrfs_alloc_chunk(struct 
btrfs_trans_handle *trans,
        if (devs_max && ndevs > devs_max)
                ndevs = devs_max;
        /*
-        * the primary goal is to maximize the number of stripes, so use as many
-        * devices as possible, even if the stripes are not maximum sized.
+        * The primary goal is to maximize the number of stripes, so use as
+        * many devices as possible, even if the stripes are not maximum sized.
+        *
+        * The DUP profile stores more than one stripe per device, the
+        * max_avail is the total size so we have to adjust.
         */
-       stripe_size = devices_info[ndevs-1].max_avail;
+       stripe_size = div_u64(devices_info[ndevs - 1].max_avail, dev_stripes);
        num_stripes = ndevs * dev_stripes;
 
        /*
@@ -4681,8 +4685,6 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle 
*trans,
                        stripe_size = devices_info[ndevs-1].max_avail;
        }
 
-       stripe_size = div_u64(stripe_size, dev_stripes);
-
        /* align to BTRFS_STRIPE_LEN */
        stripe_size = div_u64(stripe_size, raid_stripe_len);
        stripe_size *= raid_stripe_len;
diff --git a/fs/dcache.c b/fs/dcache.c
index 3ed642e0a0c2..751a0d88f049 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -634,11 +634,16 @@ again:
                spin_unlock(&parent->d_lock);
                goto again;
        }
-       rcu_read_unlock();
-       if (parent != dentry)
+       if (parent != dentry) {
                spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
-       else
+               if (unlikely(dentry->d_lockref.count < 0)) {
+                       spin_unlock(&parent->d_lock);
+                       parent = NULL;
+               }
+       } else {
                parent = NULL;
+       }
+       rcu_read_unlock();
        return parent;
 }
 
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index fedbf67a0842..928b9e046d8a 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -522,8 +522,10 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct 
f2fs_summary *sum,
        get_node_info(sbi, nid, dni);
 
        if (sum->version != dni->version) {
-               f2fs_put_page(node_page, 1);
-               return false;
+               f2fs_msg(sbi->sb, KERN_WARNING,
+                               "%s: valid data with mismatched node version.",
+                               __func__);
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
        }
 
        *nofs = ofs_of_node(node_page);
diff --git a/fs/namei.c b/fs/namei.c
index 844da20232b9..0fcad42e4d3e 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -570,9 +570,10 @@ static int __nd_alloc_stack(struct nameidata *nd)
 static bool path_connected(const struct path *path)
 {
        struct vfsmount *mnt = path->mnt;
+       struct super_block *sb = mnt->mnt_sb;
 
-       /* Only bind mounts can have disconnected paths */
-       if (mnt->mnt_root == mnt->mnt_sb->s_root)
+       /* Bind mounts and multi-root filesystems can have disconnected paths */
+       if (!(sb->s_iflags & SB_I_MULTIROOT) && (mnt->mnt_root == sb->s_root))
                return true;
 
        return is_subdir(path->dentry, mnt->mnt_root);
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 3149f7e58d6f..62f358f67764 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -2581,6 +2581,8 @@ struct dentry *nfs_fs_mount_common(struct nfs_server 
*server,
                /* initial superblock/root creation */
                mount_info->fill_super(s, mount_info);
                nfs_get_cache_cookie(s, mount_info->parsed, mount_info->cloned);
+               if (!(server->flags & NFS_MOUNT_UNSHARED))
+                       s->s_iflags |= SB_I_MULTIROOT;
        }
 
        mntroot = nfs_get_root(s, mount_info->mntfh, dev_name);
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
index 9d6486d416a3..a72097b625ef 100644
--- a/fs/reiserfs/journal.c
+++ b/fs/reiserfs/journal.c
@@ -1961,7 +1961,7 @@ static int do_journal_release(struct 
reiserfs_transaction_handle *th,
         * will be requeued because superblock is being shutdown and doesn't
         * have MS_ACTIVE set.
         */
-       cancel_delayed_work_sync(&REISERFS_SB(sb)->old_work);
+       reiserfs_cancel_old_flush(sb);
        /* wait for all commits to finish */
        cancel_delayed_work_sync(&SB_JOURNAL(sb)->j_work);
 
diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
index 5dcf3ab83886..6ca00471afbf 100644
--- a/fs/reiserfs/reiserfs.h
+++ b/fs/reiserfs/reiserfs.h
@@ -2948,6 +2948,7 @@ int reiserfs_allocate_list_bitmaps(struct super_block *s,
                                   struct reiserfs_list_bitmap *, unsigned int);
 
 void reiserfs_schedule_old_flush(struct super_block *s);
+void reiserfs_cancel_old_flush(struct super_block *s);
 void add_save_link(struct reiserfs_transaction_handle *th,
                   struct inode *inode, int truncate);
 int remove_save_link(struct inode *inode, int truncate);
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
index f9f3be50081a..ee095246da4e 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -90,7 +90,9 @@ static void flush_old_commits(struct work_struct *work)
        s = sbi->s_journal->j_work_sb;
 
        spin_lock(&sbi->old_work_lock);
-       sbi->work_queued = 0;
+       /* Avoid clobbering the cancel state... */
+       if (sbi->work_queued == 1)
+               sbi->work_queued = 0;
        spin_unlock(&sbi->old_work_lock);
 
        reiserfs_sync_fs(s, 1);
@@ -117,21 +119,22 @@ void reiserfs_schedule_old_flush(struct super_block *s)
        spin_unlock(&sbi->old_work_lock);
 }
 
-static void cancel_old_flush(struct super_block *s)
+void reiserfs_cancel_old_flush(struct super_block *s)
 {
        struct reiserfs_sb_info *sbi = REISERFS_SB(s);
 
-       cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
        spin_lock(&sbi->old_work_lock);
-       sbi->work_queued = 0;
+       /* Make sure no new flushes will be queued */
+       sbi->work_queued = 2;
        spin_unlock(&sbi->old_work_lock);
+       cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
 }
 
 static int reiserfs_freeze(struct super_block *s)
 {
        struct reiserfs_transaction_handle th;
 
-       cancel_old_flush(s);
+       reiserfs_cancel_old_flush(s);
 
        reiserfs_write_lock(s);
        if (!(s->s_flags & MS_RDONLY)) {
@@ -152,7 +155,13 @@ static int reiserfs_freeze(struct super_block *s)
 
 static int reiserfs_unfreeze(struct super_block *s)
 {
+       struct reiserfs_sb_info *sbi = REISERFS_SB(s);
+
        reiserfs_allow_writes(s);
+       spin_lock(&sbi->old_work_lock);
+       /* Allow old_work to run again */
+       sbi->work_queued = 0;
+       spin_unlock(&sbi->old_work_lock);
        return 0;
 }
 
@@ -2187,7 +2196,7 @@ error_unlocked:
        if (sbi->commit_wq)
                destroy_workqueue(sbi->commit_wq);
 
-       cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
+       reiserfs_cancel_old_flush(s);
 
        reiserfs_free_bitmap_cache(s);
        if (SB_BUFFER_WITH_SB(s))
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f746a59fcc88..da79e9d66e5b 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1295,6 +1295,7 @@ struct mm_struct;
 /* sb->s_iflags */
 #define SB_I_CGROUPWB  0x00000001      /* cgroup-aware writeback enabled */
 #define SB_I_NOEXEC    0x00000002      /* Ignore executables on this fs */
+#define SB_I_MULTIROOT 0x00000008      /* Multiple roots to the dentry tree */
 
 /* Possible states of 'frozen' field */
 enum {
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index fbfadba81c5a..771774e13f10 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -153,7 +153,7 @@ static inline int page_cache_get_speculative(struct page 
*page)
 
 #ifdef CONFIG_TINY_RCU
 # ifdef CONFIG_PREEMPT_COUNT
-       VM_BUG_ON(!in_atomic());
+       VM_BUG_ON(!in_atomic() && !irqs_disabled());
 # endif
        /*
         * Preempt must be disabled here - we rely on rcu_read_lock doing
@@ -191,7 +191,7 @@ static inline int page_cache_add_speculative(struct page 
*page, int count)
 
 #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU)
 # ifdef CONFIG_PREEMPT_COUNT
-       VM_BUG_ON(!in_atomic());
+       VM_BUG_ON(!in_atomic() && !irqs_disabled());
 # endif
        VM_BUG_ON_PAGE(page_count(page) == 0, page);
        atomic_add(count, &page->_count);
diff --git a/include/linux/platform_data/isl9305.h 
b/include/linux/platform_data/isl9305.h
index 1419133fa69e..4ac1a070af0a 100644
--- a/include/linux/platform_data/isl9305.h
+++ b/include/linux/platform_data/isl9305.h
@@ -24,7 +24,7 @@
 struct regulator_init_data;
 
 struct isl9305_pdata {
-       struct regulator_init_data *init_data[ISL9305_MAX_REGULATOR];
+       struct regulator_init_data *init_data[ISL9305_MAX_REGULATOR + 1];
 };
 
 #endif
diff --git a/include/net/tcp.h b/include/net/tcp.h
index cecb0e0eff06..a3696b778757 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1199,9 +1199,11 @@ void tcp_select_initial_window(int __space, __u32 mss, 
__u32 *rcv_wnd,
 
 static inline int tcp_win_from_space(int space)
 {
-       return sysctl_tcp_adv_win_scale<=0 ?
-               (space>>(-sysctl_tcp_adv_win_scale)) :
-               space - (space>>sysctl_tcp_adv_win_scale);
+       int tcp_adv_win_scale = sysctl_tcp_adv_win_scale;
+
+       return tcp_adv_win_scale <= 0 ?
+               (space>>(-tcp_adv_win_scale)) :
+               space - (space>>tcp_adv_win_scale);
 }
 
 /* Note: caller must be prepared to deal with negative returns */
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index c14003840bc5..79e3c21a35d0 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -1135,7 +1135,8 @@ static int check_alu_op(struct verifier_env *env, struct 
bpf_insn *insn)
                                regs[insn->dst_reg].type = UNKNOWN_VALUE;
                                regs[insn->dst_reg].map_ptr = NULL;
                        }
-               } else {
+               } else if (BPF_CLASS(insn->code) == BPF_ALU64 ||
+                          insn->imm >= 0) {
                        /* case: R = imm
                         * remember the value we stored into this reg
                         */
diff --git a/kernel/printk/braille.c b/kernel/printk/braille.c
index d5760c42f042..61d41ca41844 100644
--- a/kernel/printk/braille.c
+++ b/kernel/printk/braille.c
@@ -2,12 +2,13 @@
 
 #include <linux/kernel.h>
 #include <linux/console.h>
+#include <linux/errno.h>
 #include <linux/string.h>
 
 #include "console_cmdline.h"
 #include "braille.h"
 
-char *_braille_console_setup(char **str, char **brl_options)
+int _braille_console_setup(char **str, char **brl_options)
 {
        if (!strncmp(*str, "brl,", 4)) {
                *brl_options = "";
@@ -15,14 +16,14 @@ char *_braille_console_setup(char **str, char **brl_options)
        } else if (!strncmp(*str, "brl=", 4)) {
                *brl_options = *str + 4;
                *str = strchr(*brl_options, ',');
-               if (!*str)
+               if (!*str) {
                        pr_err("need port name after brl=\n");
-               else
-                       *((*str)++) = 0;
-       } else
-               return NULL;
+                       return -EINVAL;
+               }
+               *((*str)++) = 0;
+       }
 
-       return *str;
+       return 0;
 }
 
 int
diff --git a/kernel/printk/braille.h b/kernel/printk/braille.h
index 769d771145c8..749a6756843a 100644
--- a/kernel/printk/braille.h
+++ b/kernel/printk/braille.h
@@ -9,7 +9,14 @@ braille_set_options(struct console_cmdline *c, char 
*brl_options)
        c->brl_options = brl_options;
 }
 
-char *
+/*
+ * Setup console according to braille options.
+ * Return -EINVAL on syntax error, 0 on success (or no braille option was
+ * actually given).
+ * Modifies str to point to the serial options
+ * Sets brl_options to the parsed braille options.
+ */
+int
 _braille_console_setup(char **str, char **brl_options);
 
 int
@@ -25,10 +32,10 @@ braille_set_options(struct console_cmdline *c, char 
*brl_options)
 {
 }
 
-static inline char *
+static inline int
 _braille_console_setup(char **str, char **brl_options)
 {
-       return NULL;
+       return 0;
 }
 
 static inline int
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index c5b1c62623cf..65ed3501c2ca 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -601,7 +601,8 @@ void resched_cpu(int cpu)
        unsigned long flags;
 
        raw_spin_lock_irqsave(&rq->lock, flags);
-       resched_curr(rq);
+       if (cpu_online(cpu) || cpu == smp_processor_id())
+               resched_curr(rq);
        raw_spin_unlock_irqrestore(&rq->lock, flags);
 }
 
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index e0b5169aeac4..2ef31c93e195 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -2144,7 +2144,7 @@ static void switched_to_rt(struct rq *rq, struct 
task_struct *p)
                if (p->nr_cpus_allowed > 1 && rq->rt.overloaded)
                        queue_push_tasks(rq);
 #endif /* CONFIG_SMP */
-               if (p->prio < rq->curr->prio)
+               if (p->prio < rq->curr->prio && cpu_online(cpu_of(rq)))
                        resched_curr(rq);
        }
 }
diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index a26036d37a38..382b159d8592 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -205,6 +205,11 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned 
long rate)
 
        update_clock_read_data(&rd);
 
+       if (sched_clock_timer.function != NULL) {
+               /* update timeout for clock wrap */
+               hrtimer_start(&sched_clock_timer, cd.wrap_kt, HRTIMER_MODE_REL);
+       }
+
        r = rate;
        if (r >= 4000000) {
                r /= 1000000;
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index ba7d8b288bb3..ef4f16e81283 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -16,6 +16,7 @@
 #include <linux/sched.h>
 #include <linux/seq_file.h>
 #include <linux/kallsyms.h>
+#include <linux/nmi.h>
 
 #include <asm/uaccess.h>
 
@@ -96,6 +97,9 @@ print_active_timers(struct seq_file *m, struct 
hrtimer_clock_base *base,
 
 next_one:
        i = 0;
+
+       touch_nmi_watchdog();
+
        raw_spin_lock_irqsave(&base->cpu_base->lock, flags);
 
        curr = timerqueue_getnext(&base->active);
@@ -207,6 +211,8 @@ print_tickdevice(struct seq_file *m, struct tick_device 
*td, int cpu)
 {
        struct clock_event_device *dev = td->evtdev;
 
+       touch_nmi_watchdog();
+
        SEQ_printf(m, "Tick Device: mode:     %d\n", td->mode);
        if (cpu < 0)
                SEQ_printf(m, "Broadcast device\n");
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index ca4dc9031073..89da689b6433 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -559,8 +559,7 @@ static int vlan_dev_init(struct net_device *dev)
                           NETIF_F_HIGHDMA | NETIF_F_SCTP_CSUM |
                           NETIF_F_ALL_FCOE;
 
-       dev->features |= real_dev->vlan_features | NETIF_F_LLTX |
-                        NETIF_F_GSO_SOFTWARE;
+       dev->features |= dev->hw_features | NETIF_F_LLTX;
        dev->gso_max_size = real_dev->gso_max_size;
        if (dev->features & NETIF_F_VLAN_FEATURES)
                netdev_warn(real_dev, "VLAN features are set incorrectly.  
Q-in-Q configurations may not work correctly.\n");
diff --git a/net/batman-adv/bridge_loop_avoidance.c 
b/net/batman-adv/bridge_loop_avoidance.c
index f5d2fe5e31cc..c5208136e3fc 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -1603,10 +1603,22 @@ int batadv_bla_tx(struct batadv_priv *bat_priv, struct 
sk_buff *skb,
                /* if yes, the client has roamed and we have
                 * to unclaim it.
                 */
-               batadv_handle_unclaim(bat_priv, primary_if,
-                                     primary_if->net_dev->dev_addr,
-                                     ethhdr->h_source, vid);
-               goto allow;
+               if (batadv_has_timed_out(claim->lasttime, 100)) {
+                       /* only unclaim if the last claim entry is
+                        * older than 100 ms to make sure we really
+                        * have a roaming client here.
+                        */
+                       batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_tx(): Roaming 
client %pM detected. Unclaim it.\n",
+                                  ethhdr->h_source);
+                       batadv_handle_unclaim(bat_priv, primary_if,
+                                             primary_if->net_dev->dev_addr,
+                                             ethhdr->h_source, vid);
+                       goto allow;
+               } else {
+                       batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_tx(): Race 
for claim %pM detected. Drop packet.\n",
+                                  ethhdr->h_source);
+                       goto handled;
+               }
        }
 
        /* check if it is a multicast/broadcast frame */
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index bcb0a1b64556..58588a610b05 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1441,7 +1441,7 @@ static void ieee80211_setup_sdata(struct 
ieee80211_sub_if_data *sdata,
                break;
        case NL80211_IFTYPE_UNSPECIFIED:
        case NUM_NL80211_IFTYPES:
-               BUG();
+               WARN_ON(1);
                break;
        }
 
diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
index eeb3eb3ea9eb..024d6cf342c5 100644
--- a/net/sched/act_csum.c
+++ b/net/sched/act_csum.c
@@ -175,6 +175,9 @@ static int tcf_csum_ipv4_tcp(struct sk_buff *skb,
        struct tcphdr *tcph;
        const struct iphdr *iph;
 
+       if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
+               return 1;
+
        tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
        if (tcph == NULL)
                return 0;
@@ -196,6 +199,9 @@ static int tcf_csum_ipv6_tcp(struct sk_buff *skb,
        struct tcphdr *tcph;
        const struct ipv6hdr *ip6h;
 
+       if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
+               return 1;
+
        tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
        if (tcph == NULL)
                return 0;
@@ -219,6 +225,9 @@ static int tcf_csum_ipv4_udp(struct sk_buff *skb,
        const struct iphdr *iph;
        u16 ul;
 
+       if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
+               return 1;
+
        /*
         * Support both UDP and UDPLITE checksum algorithms, Don't use
         * udph->len to get the real length without any protocol check,
@@ -272,6 +281,9 @@ static int tcf_csum_ipv6_udp(struct sk_buff *skb,
        const struct ipv6hdr *ip6h;
        u16 ul;
 
+       if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
+               return 1;
+
        /*
         * Support both UDP and UDPLITE checksum algorithms, Don't use
         * udph->len to get the real length without any protocol check,
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 4b09a9eaa35f..d95cb69460f0 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1313,7 +1313,7 @@ EXPORT_SYMBOL(xfrm_policy_delete);
 
 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol)
 {
-       struct net *net = xp_net(pol);
+       struct net *net = sock_net(sk);
        struct xfrm_policy *old_pol;
 
 #ifdef CONFIG_XFRM_SUB_POLICY
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 9895a8c56d8c..96d664e198bf 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -1845,6 +1845,13 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 
__user *optval, int optlen
        struct xfrm_mgr *km;
        struct xfrm_policy *pol = NULL;
 
+       if (!optval && !optlen) {
+               xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL);
+               xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL);
+               __sk_dst_reset(sk);
+               return 0;
+       }
+
        if (optlen <= 0 || optlen > PAGE_SIZE)
                return -EMSGSIZE;
 
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
index dec607c17b64..6dc4ce47580f 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
@@ -722,7 +722,7 @@ module_param_named(logsyscall, aa_g_logsyscall, aabool, 
S_IRUSR | S_IWUSR);
 
 /* Maximum pathname length before accesses will start getting rejected */
 unsigned int aa_g_path_max = 2 * PATH_MAX;
-module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR | S_IWUSR);
+module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR);
 
 /* Determines how paranoid loading of policy is and how much verification
  * on the loaded policy is done.
diff --git a/security/integrity/ima/ima_appraise.c 
b/security/integrity/ima/ima_appraise.c
index 19014293f927..8da7c91b725d 100644
--- a/security/integrity/ima/ima_appraise.c
+++ b/security/integrity/ima/ima_appraise.c
@@ -206,7 +206,8 @@ int ima_appraise_measurement(int func, struct 
integrity_iint_cache *iint,
                if (opened & FILE_CREATED)
                        iint->flags |= IMA_NEW_FILE;
                if ((iint->flags & IMA_NEW_FILE) &&
-                   !(iint->flags & IMA_DIGSIG_REQUIRED))
+                   (!(iint->flags & IMA_DIGSIG_REQUIRED) ||
+                    (inode->i_size == 0)))
                        status = INTEGRITY_PASS;
                goto out;
        }
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 3f370eb494d1..4c7db967b7bb 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -4124,10 +4124,18 @@ static int selinux_socket_bind(struct socket *sock, 
struct sockaddr *address, in
                u32 sid, node_perm;
 
                if (family == PF_INET) {
+                       if (addrlen < sizeof(struct sockaddr_in)) {
+                               err = -EINVAL;
+                               goto out;
+                       }
                        addr4 = (struct sockaddr_in *)address;
                        snum = ntohs(addr4->sin_port);
                        addrp = (char *)&addr4->sin_addr.s_addr;
                } else {
+                       if (addrlen < SIN6_LEN_RFC2133) {
+                               err = -EINVAL;
+                               goto out;
+                       }
                        addr6 = (struct sockaddr_in6 *)address;
                        snum = ntohs(addr6->sin6_port);
                        addrp = (char *)&addr6->sin6_addr.s6_addr;
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 494b7b533366..daa1feac66bf 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -1814,10 +1814,9 @@ static int snd_pcm_oss_get_formats(struct 
snd_pcm_oss_file *pcm_oss_file)
                return -ENOMEM;
        _snd_pcm_hw_params_any(params);
        err = snd_pcm_hw_refine(substream, params);
-       format_mask = *hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 
-       kfree(params);
        if (err < 0)
-               return err;
+               goto error;
+       format_mask = *hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
        for (fmt = 0; fmt < 32; ++fmt) {
                if (snd_mask_test(&format_mask, fmt)) {
                        int f = snd_pcm_oss_format_to(fmt);
@@ -1825,7 +1824,10 @@ static int snd_pcm_oss_get_formats(struct 
snd_pcm_oss_file *pcm_oss_file)
                                formats |= f;
                }
        }
-       return formats;
+
+ error:
+       kfree(params);
+       return err < 0 ? err : formats;
 }
 
 static int snd_pcm_oss_set_format(struct snd_pcm_oss_file *pcm_oss_file, int 
format)
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index 94fd3df2cf21..73ee8476584d 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -270,12 +270,12 @@ static int seq_free_client1(struct snd_seq_client *client)
 
        if (!client)
                return 0;
-       snd_seq_delete_all_ports(client);
-       snd_seq_queue_client_leave(client->number);
        spin_lock_irqsave(&clients_lock, flags);
        clienttablock[client->number] = 1;
        clienttab[client->number] = NULL;
        spin_unlock_irqrestore(&clients_lock, flags);
+       snd_seq_delete_all_ports(client);
+       snd_seq_queue_client_leave(client->number);
        snd_use_lock_sync(&client->use_lock);
        snd_seq_queue_client_termination(client->number);
        if (client->pool)
diff --git a/sound/core/seq/seq_prioq.c b/sound/core/seq/seq_prioq.c
index bc1c8488fc2a..2bc6759e4adc 100644
--- a/sound/core/seq/seq_prioq.c
+++ b/sound/core/seq/seq_prioq.c
@@ -87,7 +87,7 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo)
        if (f->cells > 0) {
                /* drain prioQ */
                while (f->cells > 0)
-                       snd_seq_cell_free(snd_seq_prioq_cell_out(f));
+                       snd_seq_cell_free(snd_seq_prioq_cell_out(f, NULL));
        }
        
        kfree(f);
@@ -214,8 +214,18 @@ int snd_seq_prioq_cell_in(struct snd_seq_prioq * f,
        return 0;
 }
 
+/* return 1 if the current time >= event timestamp */
+static int event_is_ready(struct snd_seq_event *ev, void *current_time)
+{
+       if ((ev->flags & SNDRV_SEQ_TIME_STAMP_MASK) == 
SNDRV_SEQ_TIME_STAMP_TICK)
+               return snd_seq_compare_tick_time(current_time, &ev->time.tick);
+       else
+               return snd_seq_compare_real_time(current_time, &ev->time.time);
+}
+
 /* dequeue cell from prioq */
-struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f)
+struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
+                                                 void *current_time)
 {
        struct snd_seq_event_cell *cell;
        unsigned long flags;
@@ -227,6 +237,8 @@ struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct 
snd_seq_prioq *f)
        spin_lock_irqsave(&f->lock, flags);
 
        cell = f->head;
+       if (cell && current_time && !event_is_ready(&cell->event, current_time))
+               cell = NULL;
        if (cell) {
                f->head = cell->next;
 
@@ -252,18 +264,6 @@ int snd_seq_prioq_avail(struct snd_seq_prioq * f)
        return f->cells;
 }
 
-
-/* peek at cell at the head of the prioq */
-struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq * f)
-{
-       if (f == NULL) {
-               pr_debug("ALSA: seq: snd_seq_prioq_cell_in() called with NULL 
prioq\n");
-               return NULL;
-       }
-       return f->head;
-}
-
-
 static inline int prioq_match(struct snd_seq_event_cell *cell,
                              int client, int timestamp)
 {
diff --git a/sound/core/seq/seq_prioq.h b/sound/core/seq/seq_prioq.h
index d38bb78d9345..2c315ca10fc4 100644
--- a/sound/core/seq/seq_prioq.h
+++ b/sound/core/seq/seq_prioq.h
@@ -44,14 +44,12 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo);
 int snd_seq_prioq_cell_in(struct snd_seq_prioq *f, struct snd_seq_event_cell 
*cell);
 
 /* dequeue cell from prioq */ 
-struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f);
+struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
+                                                 void *current_time);
 
 /* return number of events available in prioq */
 int snd_seq_prioq_avail(struct snd_seq_prioq *f);
 
-/* peek at cell at the head of the prioq */
-struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq *f);
-
 /* client left queue */
 void snd_seq_prioq_leave(struct snd_seq_prioq *f, int client, int timestamp);  
      
 
diff --git a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
index 79e0c5604ef8..1a6dc4ff44a6 100644
--- a/sound/core/seq/seq_queue.c
+++ b/sound/core/seq/seq_queue.c
@@ -277,30 +277,20 @@ void snd_seq_check_queue(struct snd_seq_queue *q, int 
atomic, int hop)
 
       __again:
        /* Process tick queue... */
-       while ((cell = snd_seq_prioq_cell_peek(q->tickq)) != NULL) {
-               if (snd_seq_compare_tick_time(&q->timer->tick.cur_tick,
-                                             &cell->event.time.tick)) {
-                       cell = snd_seq_prioq_cell_out(q->tickq);
-                       if (cell)
-                               snd_seq_dispatch_event(cell, atomic, hop);
-               } else {
-                       /* event remains in the queue */
+       for (;;) {
+               cell = snd_seq_prioq_cell_out(q->tickq,
+                                             &q->timer->tick.cur_tick);
+               if (!cell)
                        break;
-               }
+               snd_seq_dispatch_event(cell, atomic, hop);
        }
 
-
        /* Process time queue... */
-       while ((cell = snd_seq_prioq_cell_peek(q->timeq)) != NULL) {
-               if (snd_seq_compare_real_time(&q->timer->cur_time,
-                                             &cell->event.time.time)) {
-                       cell = snd_seq_prioq_cell_out(q->timeq);
-                       if (cell)
-                               snd_seq_dispatch_event(cell, atomic, hop);
-               } else {
-                       /* event remains in the queue */
+       for (;;) {
+               cell = snd_seq_prioq_cell_out(q->timeq, &q->timer->cur_time);
+               if (!cell)
                        break;
-               }
+               snd_seq_dispatch_event(cell, atomic, hop);
        }
 
        /* free lock */
diff --git a/sound/firewire/digi00x/amdtp-dot.c 
b/sound/firewire/digi00x/amdtp-dot.c
index b02a5e8cad44..30e4925bf6b0 100644
--- a/sound/firewire/digi00x/amdtp-dot.c
+++ b/sound/firewire/digi00x/amdtp-dot.c
@@ -28,6 +28,9 @@
  */
 #define MAX_MIDI_RX_BLOCKS     8
 
+/* 3 = MAX(DOT_MIDI_IN_PORTS, DOT_MIDI_OUT_PORTS) + 1. */
+#define MAX_MIDI_PORTS         3
+
 /*
  * The double-oh-three algorithm was discovered by Robin Gareus and Damien
  * Zammit in 2012, with reverse-engineering for Digi 003 Rack.
@@ -42,10 +45,8 @@ struct amdtp_dot {
        unsigned int pcm_channels;
        struct dot_state state;
 
-       unsigned int midi_ports;
-       /* 2 = MAX(DOT_MIDI_IN_PORTS, DOT_MIDI_OUT_PORTS) */
-       struct snd_rawmidi_substream *midi[2];
-       int midi_fifo_used[2];
+       struct snd_rawmidi_substream *midi[MAX_MIDI_PORTS];
+       int midi_fifo_used[MAX_MIDI_PORTS];
        int midi_fifo_limit;
 
        void (*transfer_samples)(struct amdtp_stream *s,
@@ -124,8 +125,8 @@ int amdtp_dot_set_parameters(struct amdtp_stream *s, 
unsigned int rate,
                return -EBUSY;
 
        /*
-        * A first data channel is for MIDI conformant data channel, the rest is
-        * Multi Bit Linear Audio data channel.
+        * A first data channel is for MIDI messages, the rest is Multi Bit
+        * Linear Audio data channel.
         */
        err = amdtp_stream_set_parameters(s, rate, pcm_channels + 1);
        if (err < 0)
@@ -135,11 +136,6 @@ int amdtp_dot_set_parameters(struct amdtp_stream *s, 
unsigned int rate,
 
        p->pcm_channels = pcm_channels;
 
-       if (s->direction == AMDTP_IN_STREAM)
-               p->midi_ports = DOT_MIDI_IN_PORTS;
-       else
-               p->midi_ports = DOT_MIDI_OUT_PORTS;
-
        /*
         * We do not know the actual MIDI FIFO size of most devices.  Just
         * assume two bytes, i.e., one byte can be received over the bus while
@@ -281,13 +277,25 @@ static void write_midi_messages(struct amdtp_stream *s, 
__be32 *buffer,
                b = (u8 *)&buffer[0];
 
                len = 0;
-               if (port < p->midi_ports &&
+               if (port < MAX_MIDI_PORTS &&
                    midi_ratelimit_per_packet(s, port) &&
                    p->midi[port] != NULL)
                        len = snd_rawmidi_transmit(p->midi[port], b + 1, 2);
 
                if (len > 0) {
-                       b[3] = (0x10 << port) | len;
+                       /*
+                        * Upper 4 bits of LSB represent port number.
+                        * - 0000b: physical MIDI port 1.
+                        * - 0010b: physical MIDI port 2.
+                        * - 1110b: console MIDI port.
+                        */
+                       if (port == 2)
+                               b[3] = 0xe0;
+                       else if (port == 1)
+                               b[3] = 0x20;
+                       else
+                               b[3] = 0x00;
+                       b[3] |= len;
                        midi_use_bytes(s, port, len);
                } else {
                        b[1] = 0;
@@ -309,11 +317,22 @@ static void read_midi_messages(struct amdtp_stream *s, 
__be32 *buffer,
 
        for (f = 0; f < data_blocks; f++) {
                b = (u8 *)&buffer[0];
-               port = b[3] >> 4;
-               len = b[3] & 0x0f;
 
-               if (port < p->midi_ports && p->midi[port] && len > 0)
-                       snd_rawmidi_receive(p->midi[port], b + 1, len);
+               len = b[3] & 0x0f;
+               if (len > 0) {
+                       /*
+                        * Upper 4 bits of LSB represent port number.
+                        * - 0000b: physical MIDI port 1. Use port 0.
+                        * - 1110b: console MIDI port. Use port 2.
+                        */
+                       if (b[3] >> 4 > 0)
+                               port = 2;
+                       else
+                               port = 0;
+
+                       if (port < MAX_MIDI_PORTS && p->midi[port])
+                               snd_rawmidi_receive(p->midi[port], b + 1, len);
+               }
 
                buffer += s->data_block_quadlets;
        }
@@ -364,7 +383,7 @@ void amdtp_dot_midi_trigger(struct amdtp_stream *s, 
unsigned int port,
 {
        struct amdtp_dot *p = s->protocol;
 
-       if (port < p->midi_ports)
+       if (port < MAX_MIDI_PORTS)
                ACCESS_ONCE(p->midi[port]) = midi;
 }
 
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index e2212830df0c..fbd00821e326 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -179,11 +179,15 @@ static const struct kernel_param_ops param_ops_xint = {
 };
 #define param_check_xint param_check_int
 
-static int power_save = -1;
+static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
 module_param(power_save, xint, 0644);
 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
                 "(in second, 0 = disable).");
 
+static bool pm_blacklist = true;
+module_param(pm_blacklist, bool, 0644);
+MODULE_PARM_DESC(pm_blacklist, "Enable power-management blacklist");
+
 /* reset the HD-audio controller in power save mode.
  * this may give more power-saving, but will take longer time to
  * wake up.
@@ -2164,10 +2168,9 @@ static int azx_probe_continue(struct azx *chip)
 
        val = power_save;
 #ifdef CONFIG_PM
-       if (val == -1) {
+       if (pm_blacklist) {
                const struct snd_pci_quirk *q;
 
-               val = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
                q = snd_pci_quirk_lookup(chip->pci, power_save_blacklist);
                if (q && val) {
                        dev_info(chip->card->dev, "device %04x:%04x is on the 
power_save blacklist, forcing power_save to 0\n",
diff --git a/sound/soc/nuc900/nuc900-ac97.c b/sound/soc/nuc900/nuc900-ac97.c
index b6615affe571..fde974d52bb2 100644
--- a/sound/soc/nuc900/nuc900-ac97.c
+++ b/sound/soc/nuc900/nuc900-ac97.c
@@ -67,7 +67,7 @@ static unsigned short nuc900_ac97_read(struct snd_ac97 *ac97,
 
        /* polling the AC_R_FINISH */
        while (!(AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_R_FINISH)
-                                                               && timeout--)
+                                                               && --timeout)
                mdelay(1);
 
        if (!timeout) {
@@ -121,7 +121,7 @@ static void nuc900_ac97_write(struct snd_ac97 *ac97, 
unsigned short reg,
 
        /* polling the AC_W_FINISH */
        while ((AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_W_FINISH)
-                                                               && timeout--)
+                                                               && --timeout)
                mdelay(1);
 
        if (!timeout)
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 38aae96267c9..a001331a53c1 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -142,6 +142,15 @@ static int rsnd_ssi_master_clk_start(struct rsnd_ssi *ssi,
         */
        for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) {
 
+               /*
+                * It will set SSIWSR.CONT here, but SSICR.CKDV = 000
+                * with it is not allowed. (SSIWSR.WS_MODE with
+                * SSICR.CKDV = 000 is not allowed either).
+                * Skip it. See SSICR.CKDV
+                */
+               if (j == 0)
+                       continue;
+
                /*
                 * this driver is assuming that
                 * system word is 64fs (= 2 x 32bit)
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
index 132afc97676c..9d4ac90ca87e 100644
--- a/tools/perf/builtin-probe.c
+++ b/tools/perf/builtin-probe.c
@@ -405,9 +405,9 @@ static int perf_del_probe_events(struct strfilter *filter)
        }
 
        if (ret == -ENOENT && ret2 == -ENOENT)
-               pr_debug("\"%s\" does not hit any event.\n", str);
-               /* Note that this is silently ignored */
-       ret = 0;
+               pr_warning("\"%s\" does not hit any event.\n", str);
+       else
+               ret = 0;
 
 error:
        if (kfd >= 0)
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index 26cba64345e3..46af9dde11e2 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -234,8 +234,8 @@ int perf_event__synthesize_mmap_events(struct perf_tool 
*tool,
        if (machine__is_default_guest(machine))
                return 0;
 
-       snprintf(filename, sizeof(filename), "%s/proc/%d/maps",
-                machine->root_dir, pid);
+       snprintf(filename, sizeof(filename), "%s/proc/%d/task/%d/maps",
+                machine->root_dir, pid, pid);
 
        fp = fopen(filename, "r");
        if (fp == NULL) {
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index b1b9e2385f4b..5e58149c4df2 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -79,7 +79,7 @@ static union perf_event *dup_event(struct ordered_events *oe,
 
 static void free_dup_event(struct ordered_events *oe, union perf_event *event)
 {
-       if (oe->copy_on_queue) {
+       if (event && oe->copy_on_queue) {
                oe->cur_alloc_size -= event->header.size;
                free(event);
        }
@@ -150,6 +150,7 @@ void ordered_events__delete(struct ordered_events *oe, 
struct ordered_event *eve
        list_move(&event->list, &oe->cache);
        oe->nr_events--;
        free_dup_event(oe, event->event);
+       event->event = NULL;
 }
 
 int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 468de95bc8bb..0ae4f73dc8eb 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -135,8 +135,14 @@ struct perf_session *perf_session__new(struct 
perf_data_file *file,
                        if (perf_session__open(session) < 0)
                                goto out_close;
 
-                       perf_session__set_id_hdr_size(session);
-                       perf_session__set_comm_exec(session);
+                       /*
+                        * set session attributes that are present in perf.data
+                        * but not in pipe-mode.
+                        */
+                       if (!file->is_pipe) {
+                               perf_session__set_id_hdr_size(session);
+                               perf_session__set_comm_exec(session);
+                       }
                }
        } else  {
                session->machines.host.env = &perf_env;
@@ -151,7 +157,11 @@ struct perf_session *perf_session__new(struct 
perf_data_file *file,
                        pr_warning("Cannot read kernel map\n");
        }
 
-       if (tool && tool->ordering_requires_timestamps &&
+       /*
+        * In pipe-mode, evlist is empty until PERF_RECORD_HEADER_ATTR is
+        * processed, so perf_evlist__sample_id_all is not meaningful here.
+        */
+       if ((!file || !file->is_pipe) && tool && 
tool->ordering_requires_timestamps &&
            tool->ordered_events && 
!perf_evlist__sample_id_all(session->evlist)) {
                dump_printf("WARNING: No sample_id_all support, falling back to 
unordered processing\n");
                tool->ordered_events = false;
@@ -1437,6 +1447,7 @@ static int __perf_session__process_pipe_events(struct 
perf_session *session)
        buf = malloc(cur_size);
        if (!buf)
                return -errno;
+       ordered_events__set_copy_on_queue(oe, true);
 more:
        event = buf;
        err = readn(fd, event, sizeof(struct perf_event_header));
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 2d8ccd4d9e1b..87312056f75d 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -604,6 +604,9 @@ static int hist_entry__mispredict_snprintf(struct 
hist_entry *he, char *bf,
 static int64_t
 sort__cycles_cmp(struct hist_entry *left, struct hist_entry *right)
 {
+       if (!left->branch_info || !right->branch_info)
+               return cmp_null(left->branch_info, right->branch_info);
+
        return left->branch_info->flags.cycles -
                right->branch_info->flags.cycles;
 }
@@ -611,6 +614,8 @@ sort__cycles_cmp(struct hist_entry *left, struct hist_entry 
*right)
 static int hist_entry__cycles_snprintf(struct hist_entry *he, char *bf,
                                    size_t size, unsigned int width)
 {
+       if (!he->branch_info)
+               return scnprintf(bf, size, "%-.*s", width, "N/A");
        if (he->branch_info->flags.cycles == 0)
                return repsep_snprintf(bf, size, "%-*s", width, "-");
        return repsep_snprintf(bf, size, "%-*hd", width,
diff --git a/tools/testing/selftests/firmware/fw_filesystem.sh 
b/tools/testing/selftests/firmware/fw_filesystem.sh
index 856a1f327b3f..61f9b1dbbd9b 100755
--- a/tools/testing/selftests/firmware/fw_filesystem.sh
+++ b/tools/testing/selftests/firmware/fw_filesystem.sh
@@ -28,7 +28,10 @@ test_finish()
        if [ "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then
                echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout
        fi
-       echo -n "$OLD_PATH" >/sys/module/firmware_class/parameters/path
+       if [ "$OLD_FWPATH" = "" ]; then
+               OLD_FWPATH=" "
+       fi
+       echo -n "$OLD_FWPATH" >/sys/module/firmware_class/parameters/path
        rm -f "$FW"
        rmdir "$FWPATH"
 }
diff --git a/tools/testing/selftests/rcutorture/bin/configinit.sh 
b/tools/testing/selftests/rcutorture/bin/configinit.sh
index 3f81a1095206..50a6371b2b2e 100755
--- a/tools/testing/selftests/rcutorture/bin/configinit.sh
+++ b/tools/testing/selftests/rcutorture/bin/configinit.sh
@@ -51,7 +51,7 @@ then
                        mkdir $builddir
                fi
        else
-               echo Bad build directory: \"$builddir\"
+               echo Bad build directory: \"$buildloc\"
                exit 2
        fi
 fi
diff --git a/tools/testing/selftests/x86/entry_from_vm86.c 
b/tools/testing/selftests/x86/entry_from_vm86.c
index d075ea0e5ca1..ade443a88421 100644
--- a/tools/testing/selftests/x86/entry_from_vm86.c
+++ b/tools/testing/selftests/x86/entry_from_vm86.c
@@ -95,6 +95,31 @@ asm (
        "int3\n\t"
        "vmcode_int80:\n\t"
        "int $0x80\n\t"
+       "vmcode_popf_hlt:\n\t"
+       "push %ax\n\t"
+       "popf\n\t"
+       "hlt\n\t"
+       "vmcode_umip:\n\t"
+       /* addressing via displacements */
+       "smsw (2052)\n\t"
+       "sidt (2054)\n\t"
+       "sgdt (2060)\n\t"
+       /* addressing via registers */
+       "mov $2066, %bx\n\t"
+       "smsw (%bx)\n\t"
+       "mov $2068, %bx\n\t"
+       "sidt (%bx)\n\t"
+       "mov $2074, %bx\n\t"
+       "sgdt (%bx)\n\t"
+       /* register operands, only for smsw */
+       "smsw %ax\n\t"
+       "mov %ax, (2080)\n\t"
+       "int3\n\t"
+       "vmcode_umip_str:\n\t"
+       "str %eax\n\t"
+       "vmcode_umip_sldt:\n\t"
+       "sldt %eax\n\t"
+       "int3\n\t"
        ".size vmcode, . - vmcode\n\t"
        "end_vmcode:\n\t"
        ".code32\n\t"
@@ -103,7 +128,8 @@ asm (
 
 extern unsigned char vmcode[], end_vmcode[];
 extern unsigned char vmcode_bound[], vmcode_sysenter[], vmcode_syscall[],
-       vmcode_sti[], vmcode_int3[], vmcode_int80[];
+       vmcode_sti[], vmcode_int3[], vmcode_int80[], vmcode_popf_hlt[],
+       vmcode_umip[], vmcode_umip_str[], vmcode_umip_sldt[];
 
 /* Returns false if the test was skipped. */
 static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
@@ -153,13 +179,75 @@ static bool do_test(struct vm86plus_struct *v86, unsigned 
long eip,
            (VM86_TYPE(ret) == rettype && VM86_ARG(ret) == retarg)) {
                printf("[OK]\tReturned correctly\n");
        } else {
-               printf("[FAIL]\tIncorrect return reason\n");
+               printf("[FAIL]\tIncorrect return reason (started at eip = 
0x%lx, ended at eip = 0x%lx)\n", eip, v86->regs.eip);
                nerrs++;
        }
 
        return true;
 }
 
+void do_umip_tests(struct vm86plus_struct *vm86, unsigned char *test_mem)
+{
+       struct table_desc {
+               unsigned short limit;
+               unsigned long base;
+       } __attribute__((packed));
+
+       /* Initialize variables with arbitrary values */
+       struct table_desc gdt1 = { .base = 0x3c3c3c3c, .limit = 0x9999 };
+       struct table_desc gdt2 = { .base = 0x1a1a1a1a, .limit = 0xaeae };
+       struct table_desc idt1 = { .base = 0x7b7b7b7b, .limit = 0xf1f1 };
+       struct table_desc idt2 = { .base = 0x89898989, .limit = 0x1313 };
+       unsigned short msw1 = 0x1414, msw2 = 0x2525, msw3 = 3737;
+
+       /* UMIP -- exit with INT3 unless kernel emulation did not trap #GP */
+       do_test(vm86, vmcode_umip - vmcode, VM86_TRAP, 3, "UMIP tests");
+
+       /* Results from displacement-only addressing */
+       msw1 = *(unsigned short *)(test_mem + 2052);
+       memcpy(&idt1, test_mem + 2054, sizeof(idt1));
+       memcpy(&gdt1, test_mem + 2060, sizeof(gdt1));
+
+       /* Results from register-indirect addressing */
+       msw2 = *(unsigned short *)(test_mem + 2066);
+       memcpy(&idt2, test_mem + 2068, sizeof(idt2));
+       memcpy(&gdt2, test_mem + 2074, sizeof(gdt2));
+
+       /* Results when using register operands */
+       msw3 = *(unsigned short *)(test_mem + 2080);
+
+       printf("[INFO]\tResult from SMSW:[0x%04x]\n", msw1);
+       printf("[INFO]\tResult from SIDT: limit[0x%04x]base[0x%08lx]\n",
+              idt1.limit, idt1.base);
+       printf("[INFO]\tResult from SGDT: limit[0x%04x]base[0x%08lx]\n",
+              gdt1.limit, gdt1.base);
+
+       if (msw1 != msw2 || msw1 != msw3)
+               printf("[FAIL]\tAll the results of SMSW should be the same.\n");
+       else
+               printf("[PASS]\tAll the results from SMSW are identical.\n");
+
+       if (memcmp(&gdt1, &gdt2, sizeof(gdt1)))
+               printf("[FAIL]\tAll the results of SGDT should be the same.\n");
+       else
+               printf("[PASS]\tAll the results from SGDT are identical.\n");
+
+       if (memcmp(&idt1, &idt2, sizeof(idt1)))
+               printf("[FAIL]\tAll the results of SIDT should be the same.\n");
+       else
+               printf("[PASS]\tAll the results from SIDT are identical.\n");
+
+       sethandler(SIGILL, sighandler, 0);
+       do_test(vm86, vmcode_umip_str - vmcode, VM86_SIGNAL, 0,
+               "STR instruction");
+       clearhandler(SIGILL);
+
+       sethandler(SIGILL, sighandler, 0);
+       do_test(vm86, vmcode_umip_sldt - vmcode, VM86_SIGNAL, 0,
+               "SLDT instruction");
+       clearhandler(SIGILL);
+}
+
 int main(void)
 {
        struct vm86plus_struct v86;
@@ -180,6 +268,9 @@ int main(void)
        v86.regs.ds = load_addr / 16;
        v86.regs.es = load_addr / 16;
 
+       /* Use the end of the page as our stack. */
+       v86.regs.esp = 4096;
+
        assert((v86.regs.cs & 3) == 0); /* Looks like RPL = 0 */
 
        /* #BR -- should deliver SIG??? */
@@ -211,6 +302,23 @@ int main(void)
        v86.regs.eflags &= ~X86_EFLAGS_IF;
        do_test(&v86, vmcode_sti - vmcode, VM86_STI, 0, "STI with VIP set");
 
+       /* POPF with VIP set but IF clear: should not trap */
+       v86.regs.eflags = X86_EFLAGS_VIP;
+       v86.regs.eax = 0;
+       do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP 
set and IF clear");
+
+       /* POPF with VIP set and IF set: should trap */
+       v86.regs.eflags = X86_EFLAGS_VIP;
+       v86.regs.eax = X86_EFLAGS_IF;
+       do_test(&v86, vmcode_popf_hlt - vmcode, VM86_STI, 0, "POPF with VIP and 
IF set");
+
+       /* POPF with VIP clear and IF set: should not trap */
+       v86.regs.eflags = 0;
+       v86.regs.eax = X86_EFLAGS_IF;
+       do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP 
clear and IF set");
+
+       v86.regs.eflags = 0;
+
        /* INT3 -- should cause #BP */
        do_test(&v86, vmcode_int3 - vmcode, VM86_TRAP, 3, "INT3");
 
@@ -218,6 +326,9 @@ int main(void)
        v86.regs.eax = (unsigned int)-1;
        do_test(&v86, vmcode_int80 - vmcode, VM86_INTx, 0x80, "int80");
 
+       /* UMIP -- should exit with INTx 0x80 unless UMIP was not disabled */
+       do_umip_tests(&v86, addr);
+
        /* Execute a null pointer */
        v86.regs.cs = 0;
        v86.regs.ss = 0;
@@ -231,7 +342,7 @@ int main(void)
        clearhandler(SIGSEGV);
 
        /* Make sure nothing explodes if we fork. */
-       if (fork() > 0)
+       if (fork() == 0)
                return 0;
 
        return (nerrs == 0 ? 0 : 1);
diff --git a/tools/usb/usbip/src/usbipd.c b/tools/usb/usbip/src/usbipd.c
index 2a7cd2b8d966..8c5b0faba229 100644
--- a/tools/usb/usbip/src/usbipd.c
+++ b/tools/usb/usbip/src/usbipd.c
@@ -451,7 +451,7 @@ static void set_signal(void)
        sigaction(SIGTERM, &act, NULL);
        sigaction(SIGINT, &act, NULL);
        act.sa_handler = SIG_IGN;
-       sigaction(SIGCLD, &act, NULL);
+       sigaction(SIGCHLD, &act, NULL);
 }
 
 static const char *pid_file;

Reply via email to