diff options
Diffstat (limited to '4.8.7/1006_linux-4.8.7.patch')
-rw-r--r-- | 4.8.7/1006_linux-4.8.7.patch | 4331 |
1 files changed, 0 insertions, 4331 deletions
diff --git a/4.8.7/1006_linux-4.8.7.patch b/4.8.7/1006_linux-4.8.7.patch deleted file mode 100644 index d96f1e2..0000000 --- a/4.8.7/1006_linux-4.8.7.patch +++ /dev/null @@ -1,4331 +0,0 @@ -diff --git a/Documentation/device-mapper/dm-raid.txt b/Documentation/device-mapper/dm-raid.txt -index e5b6497..c75b64a 100644 ---- a/Documentation/device-mapper/dm-raid.txt -+++ b/Documentation/device-mapper/dm-raid.txt -@@ -309,3 +309,4 @@ Version History - with a reshape in progress. - 1.9.0 Add support for RAID level takeover/reshape/region size - and set size reduction. -+1.9.1 Fix activation of existing RAID 4/10 mapped devices -diff --git a/Makefile b/Makefile -index b249529..4d0f28c 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,6 +1,6 @@ - VERSION = 4 - PATCHLEVEL = 8 --SUBLEVEL = 6 -+SUBLEVEL = 7 - EXTRAVERSION = - NAME = Psychotic Stoned Sheep - -diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts -index b3df1c6..386eee6 100644 ---- a/arch/arm/boot/dts/ste-snowball.dts -+++ b/arch/arm/boot/dts/ste-snowball.dts -@@ -239,14 +239,25 @@ - arm,primecell-periphid = <0x10480180>; - max-frequency = <100000000>; - bus-width = <4>; -+ cap-sd-highspeed; - cap-mmc-highspeed; -+ sd-uhs-sdr12; -+ sd-uhs-sdr25; -+ /* All direction control is used */ -+ st,sig-dir-cmd; -+ st,sig-dir-dat0; -+ st,sig-dir-dat2; -+ st,sig-dir-dat31; -+ st,sig-pin-fbclk; -+ full-pwr-cycle; - vmmc-supply = <&ab8500_ldo_aux3_reg>; - vqmmc-supply = <&vmmci>; - pinctrl-names = "default", "sleep"; - pinctrl-0 = <&sdi0_default_mode>; - pinctrl-1 = <&sdi0_sleep_mode>; - -- cd-gpios = <&gpio6 26 GPIO_ACTIVE_LOW>; // 218 -+ /* GPIO218 MMC_CD */ -+ cd-gpios = <&gpio6 26 GPIO_ACTIVE_LOW>; - - status = "okay"; - }; -@@ -549,7 +560,7 @@ - /* VMMCI level-shifter enable */ - snowball_cfg3 { - pins = "GPIO217_AH12"; -- ste,config = <&gpio_out_lo>; -+ ste,config = <&gpio_out_hi>; - }; - /* VMMCI level-shifter voltage select */ - snowball_cfg4 { -diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig -index f9b6bd3..541647f 100644 ---- a/arch/arm/mach-mvebu/Kconfig -+++ b/arch/arm/mach-mvebu/Kconfig -@@ -23,6 +23,7 @@ config MACH_MVEBU_V7 - select CACHE_L2X0 - select ARM_CPU_SUSPEND - select MACH_MVEBU_ANY -+ select MVEBU_CLK_COREDIV - - config MACH_ARMADA_370 - bool "Marvell Armada 370 boards" -@@ -32,7 +33,6 @@ config MACH_ARMADA_370 - select CPU_PJ4B - select MACH_MVEBU_V7 - select PINCTRL_ARMADA_370 -- select MVEBU_CLK_COREDIV - help - Say 'Y' here if you want your kernel to support boards based - on the Marvell Armada 370 SoC with device tree. -@@ -50,7 +50,6 @@ config MACH_ARMADA_375 - select HAVE_SMP - select MACH_MVEBU_V7 - select PINCTRL_ARMADA_375 -- select MVEBU_CLK_COREDIV - help - Say 'Y' here if you want your kernel to support boards based - on the Marvell Armada 375 SoC with device tree. -@@ -68,7 +67,6 @@ config MACH_ARMADA_38X - select HAVE_SMP - select MACH_MVEBU_V7 - select PINCTRL_ARMADA_38X -- select MVEBU_CLK_COREDIV - help - Say 'Y' here if you want your kernel to support boards based - on the Marvell Armada 380/385 SoC with device tree. -diff --git a/arch/arm/mm/abort-lv4t.S b/arch/arm/mm/abort-lv4t.S -index 6d8e8e3..4cdfab3 100644 ---- a/arch/arm/mm/abort-lv4t.S -+++ b/arch/arm/mm/abort-lv4t.S -@@ -7,7 +7,7 @@ - * : r4 = aborted context pc - * : r5 = aborted context psr - * -- * Returns : r4-r5, r10-r11, r13 preserved -+ * Returns : r4-r5, r9-r11, r13 preserved - * - * Purpose : obtain information about current aborted instruction. - * Note: we read user space. This means we might cause a data -@@ -48,7 +48,10 @@ ENTRY(v4t_late_abort) - /* c */ b do_DataAbort @ ldc rd, [rn], #m @ Same as ldr rd, [rn], #m - /* d */ b do_DataAbort @ ldc rd, [rn, #m] - /* e */ b .data_unknown --/* f */ -+/* f */ b .data_unknown -+ -+.data_unknown_r9: -+ ldr r9, [sp], #4 - .data_unknown: @ Part of jumptable - mov r0, r4 - mov r1, r8 -@@ -57,6 +60,7 @@ ENTRY(v4t_late_abort) - .data_arm_ldmstm: - tst r8, #1 << 21 @ check writeback bit - beq do_DataAbort @ no writeback -> no fixup -+ str r9, [sp, #-4]! - mov r7, #0x11 - orr r7, r7, #0x1100 - and r6, r8, r7 -@@ -75,12 +79,14 @@ ENTRY(v4t_late_abort) - subne r7, r7, r6, lsl #2 @ Undo increment - addeq r7, r7, r6, lsl #2 @ Undo decrement - str r7, [r2, r9, lsr #14] @ Put register 'Rn' -+ ldr r9, [sp], #4 - b do_DataAbort - - .data_arm_lateldrhpre: - tst r8, #1 << 21 @ Check writeback bit - beq do_DataAbort @ No writeback -> no fixup - .data_arm_lateldrhpost: -+ str r9, [sp, #-4]! - and r9, r8, #0x00f @ get Rm / low nibble of immediate value - tst r8, #1 << 22 @ if (immediate offset) - andne r6, r8, #0xf00 @ { immediate high nibble -@@ -93,6 +99,7 @@ ENTRY(v4t_late_abort) - subne r7, r7, r6 @ Undo incrmenet - addeq r7, r7, r6 @ Undo decrement - str r7, [r2, r9, lsr #14] @ Put register 'Rn' -+ ldr r9, [sp], #4 - b do_DataAbort - - .data_arm_lateldrpreconst: -@@ -101,12 +108,14 @@ ENTRY(v4t_late_abort) - .data_arm_lateldrpostconst: - movs r6, r8, lsl #20 @ Get offset - beq do_DataAbort @ zero -> no fixup -+ str r9, [sp, #-4]! - and r9, r8, #15 << 16 @ Extract 'n' from instruction - ldr r7, [r2, r9, lsr #14] @ Get register 'Rn' - tst r8, #1 << 23 @ Check U bit - subne r7, r7, r6, lsr #20 @ Undo increment - addeq r7, r7, r6, lsr #20 @ Undo decrement - str r7, [r2, r9, lsr #14] @ Put register 'Rn' -+ ldr r9, [sp], #4 - b do_DataAbort - - .data_arm_lateldrprereg: -@@ -115,6 +124,7 @@ ENTRY(v4t_late_abort) - .data_arm_lateldrpostreg: - and r7, r8, #15 @ Extract 'm' from instruction - ldr r6, [r2, r7, lsl #2] @ Get register 'Rm' -+ str r9, [sp, #-4]! - mov r9, r8, lsr #7 @ get shift count - ands r9, r9, #31 - and r7, r8, #0x70 @ get shift type -@@ -126,33 +136,33 @@ ENTRY(v4t_late_abort) - b .data_arm_apply_r6_and_rn - b .data_arm_apply_r6_and_rn @ 1: LSL #0 - nop -- b .data_unknown @ 2: MUL? -+ b .data_unknown_r9 @ 2: MUL? - nop -- b .data_unknown @ 3: MUL? -+ b .data_unknown_r9 @ 3: MUL? - nop - mov r6, r6, lsr r9 @ 4: LSR #!0 - b .data_arm_apply_r6_and_rn - mov r6, r6, lsr #32 @ 5: LSR #32 - b .data_arm_apply_r6_and_rn -- b .data_unknown @ 6: MUL? -+ b .data_unknown_r9 @ 6: MUL? - nop -- b .data_unknown @ 7: MUL? -+ b .data_unknown_r9 @ 7: MUL? - nop - mov r6, r6, asr r9 @ 8: ASR #!0 - b .data_arm_apply_r6_and_rn - mov r6, r6, asr #32 @ 9: ASR #32 - b .data_arm_apply_r6_and_rn -- b .data_unknown @ A: MUL? -+ b .data_unknown_r9 @ A: MUL? - nop -- b .data_unknown @ B: MUL? -+ b .data_unknown_r9 @ B: MUL? - nop - mov r6, r6, ror r9 @ C: ROR #!0 - b .data_arm_apply_r6_and_rn - mov r6, r6, rrx @ D: RRX - b .data_arm_apply_r6_and_rn -- b .data_unknown @ E: MUL? -+ b .data_unknown_r9 @ E: MUL? - nop -- b .data_unknown @ F: MUL? -+ b .data_unknown_r9 @ F: MUL? - - .data_thumb_abort: - ldrh r8, [r4] @ read instruction -@@ -190,6 +200,7 @@ ENTRY(v4t_late_abort) - .data_thumb_pushpop: - tst r8, #1 << 10 - beq .data_unknown -+ str r9, [sp, #-4]! - and r6, r8, #0x55 @ hweight8(r8) + R bit - and r9, r8, #0xaa - add r6, r6, r9, lsr #1 -@@ -204,9 +215,11 @@ ENTRY(v4t_late_abort) - addeq r7, r7, r6, lsl #2 @ increment SP if PUSH - subne r7, r7, r6, lsl #2 @ decrement SP if POP - str r7, [r2, #13 << 2] -+ ldr r9, [sp], #4 - b do_DataAbort - - .data_thumb_ldmstm: -+ str r9, [sp, #-4]! - and r6, r8, #0x55 @ hweight8(r8) - and r9, r8, #0xaa - add r6, r6, r9, lsr #1 -@@ -219,4 +232,5 @@ ENTRY(v4t_late_abort) - and r6, r6, #15 @ number of regs to transfer - sub r7, r7, r6, lsl #2 @ always decrement - str r7, [r2, r9, lsr #6] -+ ldr r9, [sp], #4 - b do_DataAbort -diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi -index da31bbb..3992718 100644 ---- a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi -+++ b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi -@@ -131,7 +131,7 @@ - #address-cells = <0x1>; - #size-cells = <0x0>; - cell-index = <1>; -- clocks = <&cpm_syscon0 0 3>; -+ clocks = <&cpm_syscon0 1 21>; - status = "disabled"; - }; - -diff --git a/arch/h8300/include/asm/thread_info.h b/arch/h8300/include/asm/thread_info.h -index b408fe6..3cef068 100644 ---- a/arch/h8300/include/asm/thread_info.h -+++ b/arch/h8300/include/asm/thread_info.h -@@ -31,7 +31,6 @@ struct thread_info { - int cpu; /* cpu we're on */ - int preempt_count; /* 0 => preemptable, <0 => BUG */ - mm_segment_t addr_limit; -- struct restart_block restart_block; - }; - - /* -@@ -44,9 +43,6 @@ struct thread_info { - .cpu = 0, \ - .preempt_count = INIT_PREEMPT_COUNT, \ - .addr_limit = KERNEL_DS, \ -- .restart_block = { \ -- .fn = do_no_restart_syscall, \ -- }, \ - } - - #define init_thread_info (init_thread_union.thread_info) -diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c -index ad1f81f..7138303 100644 ---- a/arch/h8300/kernel/signal.c -+++ b/arch/h8300/kernel/signal.c -@@ -79,7 +79,7 @@ restore_sigcontext(struct sigcontext *usc, int *pd0) - unsigned int er0; - - /* Always make any pending restarted system calls return -EINTR */ -- current_thread_info()->restart_block.fn = do_no_restart_syscall; -+ current->restart_block.fn = do_no_restart_syscall; - - /* restore passed registers */ - #define COPY(r) do { err |= get_user(regs->r, &usc->sc_##r); } while (0) -diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h -index b54bcad..45799ef 100644 ---- a/arch/mips/include/asm/kvm_host.h -+++ b/arch/mips/include/asm/kvm_host.h -@@ -279,7 +279,10 @@ struct kvm_vcpu_arch { - /* Host KSEG0 address of the EI/DI offset */ - void *kseg0_commpage; - -- u32 io_gpr; /* GPR used as IO source/target */ -+ /* Resume PC after MMIO completion */ -+ unsigned long io_pc; -+ /* GPR used as IO source/target */ -+ u32 io_gpr; - - struct hrtimer comparecount_timer; - /* Count timer control KVM register */ -@@ -301,8 +304,6 @@ struct kvm_vcpu_arch { - /* Bitmask of pending exceptions to be cleared */ - unsigned long pending_exceptions_clr; - -- u32 pending_load_cause; -- - /* Save/Restore the entryhi register when are are preempted/scheduled back in */ - unsigned long preempt_entryhi; - -diff --git a/arch/mips/kernel/relocate.c b/arch/mips/kernel/relocate.c -index ca1cc30..1958910 100644 ---- a/arch/mips/kernel/relocate.c -+++ b/arch/mips/kernel/relocate.c -@@ -200,7 +200,7 @@ static inline __init unsigned long get_random_boot(void) - - #if defined(CONFIG_USE_OF) - /* Get any additional entropy passed in device tree */ -- { -+ if (initial_boot_params) { - int node, len; - u64 *prop; - -diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c -index 43853ec..4d65285 100644 ---- a/arch/mips/kvm/emulate.c -+++ b/arch/mips/kvm/emulate.c -@@ -791,15 +791,15 @@ enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu) - struct mips_coproc *cop0 = vcpu->arch.cop0; - enum emulation_result er = EMULATE_DONE; - -- if (kvm_read_c0_guest_status(cop0) & ST0_EXL) { -+ if (kvm_read_c0_guest_status(cop0) & ST0_ERL) { -+ kvm_clear_c0_guest_status(cop0, ST0_ERL); -+ vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0); -+ } else if (kvm_read_c0_guest_status(cop0) & ST0_EXL) { - kvm_debug("[%#lx] ERET to %#lx\n", vcpu->arch.pc, - kvm_read_c0_guest_epc(cop0)); - kvm_clear_c0_guest_status(cop0, ST0_EXL); - vcpu->arch.pc = kvm_read_c0_guest_epc(cop0); - -- } else if (kvm_read_c0_guest_status(cop0) & ST0_ERL) { -- kvm_clear_c0_guest_status(cop0, ST0_ERL); -- vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0); - } else { - kvm_err("[%#lx] ERET when MIPS_SR_EXL|MIPS_SR_ERL == 0\n", - vcpu->arch.pc); -@@ -1522,13 +1522,25 @@ enum emulation_result kvm_mips_emulate_load(union mips_instruction inst, - struct kvm_vcpu *vcpu) - { - enum emulation_result er = EMULATE_DO_MMIO; -+ unsigned long curr_pc; - u32 op, rt; - u32 bytes; - - rt = inst.i_format.rt; - op = inst.i_format.opcode; - -- vcpu->arch.pending_load_cause = cause; -+ /* -+ * Find the resume PC now while we have safe and easy access to the -+ * prior branch instruction, and save it for -+ * kvm_mips_complete_mmio_load() to restore later. -+ */ -+ curr_pc = vcpu->arch.pc; -+ er = update_pc(vcpu, cause); -+ if (er == EMULATE_FAIL) -+ return er; -+ vcpu->arch.io_pc = vcpu->arch.pc; -+ vcpu->arch.pc = curr_pc; -+ - vcpu->arch.io_gpr = rt; - - switch (op) { -@@ -2488,9 +2500,8 @@ enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu, - goto done; - } - -- er = update_pc(vcpu, vcpu->arch.pending_load_cause); -- if (er == EMULATE_FAIL) -- return er; -+ /* Restore saved resume PC */ -+ vcpu->arch.pc = vcpu->arch.io_pc; - - switch (run->mmio.len) { - case 4: -@@ -2512,11 +2523,6 @@ enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu, - break; - } - -- if (vcpu->arch.pending_load_cause & CAUSEF_BD) -- kvm_debug("[%#lx] Completing %d byte BD Load to gpr %d (0x%08lx) type %d\n", -- vcpu->arch.pc, run->mmio.len, vcpu->arch.io_gpr, *gpr, -- vcpu->mmio_needed); -- - done: - return er; - } -diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S -index d03422e..7ed036c 100644 ---- a/arch/parisc/kernel/syscall.S -+++ b/arch/parisc/kernel/syscall.S -@@ -106,8 +106,6 @@ linux_gateway_entry: - mtsp %r0,%sr4 /* get kernel space into sr4 */ - mtsp %r0,%sr5 /* get kernel space into sr5 */ - mtsp %r0,%sr6 /* get kernel space into sr6 */ -- mfsp %sr7,%r1 /* save user sr7 */ -- mtsp %r1,%sr3 /* and store it in sr3 */ - - #ifdef CONFIG_64BIT - /* for now we can *always* set the W bit on entry to the syscall -@@ -133,6 +131,14 @@ linux_gateway_entry: - depdi 0, 31, 32, %r21 - 1: - #endif -+ -+ /* We use a rsm/ssm pair to prevent sr3 from being clobbered -+ * by external interrupts. -+ */ -+ mfsp %sr7,%r1 /* save user sr7 */ -+ rsm PSW_SM_I, %r0 /* disable interrupts */ -+ mtsp %r1,%sr3 /* and store it in sr3 */ -+ - mfctl %cr30,%r1 - xor %r1,%r30,%r30 /* ye olde xor trick */ - xor %r1,%r30,%r1 -@@ -147,6 +153,7 @@ linux_gateway_entry: - */ - - mtsp %r0,%sr7 /* get kernel space into sr7 */ -+ ssm PSW_SM_I, %r0 /* enable interrupts */ - STREGM %r1,FRAME_SIZE(%r30) /* save r1 (usp) here for now */ - mfctl %cr30,%r1 /* get task ptr in %r1 */ - LDREG TI_TASK(%r1),%r1 -diff --git a/arch/powerpc/include/asm/cpuidle.h b/arch/powerpc/include/asm/cpuidle.h -index 01b8a13..3919332 100644 ---- a/arch/powerpc/include/asm/cpuidle.h -+++ b/arch/powerpc/include/asm/cpuidle.h -@@ -26,7 +26,7 @@ extern u64 pnv_first_deep_stop_state; - std r0,0(r1); \ - ptesync; \ - ld r0,0(r1); \ --1: cmp cr0,r0,r0; \ -+1: cmpd cr0,r0,r0; \ - bne 1b; \ - IDLE_INST; \ - b . -diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h -index f6f68f7..99e1397 100644 ---- a/arch/powerpc/include/asm/tlb.h -+++ b/arch/powerpc/include/asm/tlb.h -@@ -52,11 +52,23 @@ static inline int mm_is_core_local(struct mm_struct *mm) - return cpumask_subset(mm_cpumask(mm), - topology_sibling_cpumask(smp_processor_id())); - } -+ -+static inline int mm_is_thread_local(struct mm_struct *mm) -+{ -+ return cpumask_equal(mm_cpumask(mm), -+ cpumask_of(smp_processor_id())); -+} -+ - #else - static inline int mm_is_core_local(struct mm_struct *mm) - { - return 1; - } -+ -+static inline int mm_is_thread_local(struct mm_struct *mm) -+{ -+ return 1; -+} - #endif - - #endif /* __KERNEL__ */ -diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S -index bd739fe..72dac0b 100644 ---- a/arch/powerpc/kernel/idle_book3s.S -+++ b/arch/powerpc/kernel/idle_book3s.S -@@ -90,6 +90,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_300) - * Threads will spin in HMT_LOW until the lock bit is cleared. - * r14 - pointer to core_idle_state - * r15 - used to load contents of core_idle_state -+ * r9 - used as a temporary variable - */ - - core_idle_lock_held: -@@ -99,6 +100,8 @@ core_idle_lock_held: - bne 3b - HMT_MEDIUM - lwarx r15,0,r14 -+ andi. r9,r15,PNV_CORE_IDLE_LOCK_BIT -+ bne core_idle_lock_held - blr - - /* -@@ -163,12 +166,6 @@ _GLOBAL(pnv_powersave_common) - std r9,_MSR(r1) - std r1,PACAR1(r13) - --#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE -- /* Tell KVM we're entering idle */ -- li r4,KVM_HWTHREAD_IN_IDLE -- stb r4,HSTATE_HWTHREAD_STATE(r13) --#endif -- - /* - * Go to real mode to do the nap, as required by the architecture. - * Also, we need to be in real mode before setting hwthread_state, -@@ -185,6 +182,26 @@ _GLOBAL(pnv_powersave_common) - - .globl pnv_enter_arch207_idle_mode - pnv_enter_arch207_idle_mode: -+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE -+ /* Tell KVM we're entering idle */ -+ li r4,KVM_HWTHREAD_IN_IDLE -+ /******************************************************/ -+ /* N O T E W E L L ! ! ! N O T E W E L L */ -+ /* The following store to HSTATE_HWTHREAD_STATE(r13) */ -+ /* MUST occur in real mode, i.e. with the MMU off, */ -+ /* and the MMU must stay off until we clear this flag */ -+ /* and test HSTATE_HWTHREAD_REQ(r13) in the system */ -+ /* reset interrupt vector in exceptions-64s.S. */ -+ /* The reason is that another thread can switch the */ -+ /* MMU to a guest context whenever this flag is set */ -+ /* to KVM_HWTHREAD_IN_IDLE, and if the MMU was on, */ -+ /* that would potentially cause this thread to start */ -+ /* executing instructions from guest memory in */ -+ /* hypervisor mode, leading to a host crash or data */ -+ /* corruption, or worse. */ -+ /******************************************************/ -+ stb r4,HSTATE_HWTHREAD_STATE(r13) -+#endif - stb r3,PACA_THREAD_IDLE_STATE(r13) - cmpwi cr3,r3,PNV_THREAD_SLEEP - bge cr3,2f -@@ -250,6 +267,12 @@ enter_winkle: - * r3 - requested stop state - */ - power_enter_stop: -+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE -+ /* Tell KVM we're entering idle */ -+ li r4,KVM_HWTHREAD_IN_IDLE -+ /* DO THIS IN REAL MODE! See comment above. */ -+ stb r4,HSTATE_HWTHREAD_STATE(r13) -+#endif - /* - * Check if the requested state is a deep idle state. - */ -diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c -index 48df05e..d696068 100644 ---- a/arch/powerpc/mm/tlb-radix.c -+++ b/arch/powerpc/mm/tlb-radix.c -@@ -175,7 +175,7 @@ void radix__flush_tlb_mm(struct mm_struct *mm) - if (unlikely(pid == MMU_NO_CONTEXT)) - goto no_context; - -- if (!mm_is_core_local(mm)) { -+ if (!mm_is_thread_local(mm)) { - int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE); - - if (lock_tlbie) -@@ -201,7 +201,7 @@ void radix__flush_tlb_pwc(struct mmu_gather *tlb, unsigned long addr) - if (unlikely(pid == MMU_NO_CONTEXT)) - goto no_context; - -- if (!mm_is_core_local(mm)) { -+ if (!mm_is_thread_local(mm)) { - int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE); - - if (lock_tlbie) -@@ -226,7 +226,7 @@ void radix__flush_tlb_page_psize(struct mm_struct *mm, unsigned long vmaddr, - pid = mm ? mm->context.id : 0; - if (unlikely(pid == MMU_NO_CONTEXT)) - goto bail; -- if (!mm_is_core_local(mm)) { -+ if (!mm_is_thread_local(mm)) { - int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE); - - if (lock_tlbie) -@@ -321,7 +321,7 @@ void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, - { - unsigned long pid; - unsigned long addr; -- int local = mm_is_core_local(mm); -+ int local = mm_is_thread_local(mm); - unsigned long ap = mmu_get_ap(psize); - int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE); - unsigned long page_size = 1UL << mmu_psize_defs[psize].shift; -diff --git a/arch/s390/kvm/sthyi.c b/arch/s390/kvm/sthyi.c -index bd98b7d..05c98bb 100644 ---- a/arch/s390/kvm/sthyi.c -+++ b/arch/s390/kvm/sthyi.c -@@ -315,7 +315,7 @@ static void fill_diag(struct sthyi_sctns *sctns) - if (r < 0) - goto out; - -- diag224_buf = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA); -+ diag224_buf = (void *)__get_free_page(GFP_KERNEL | GFP_DMA); - if (!diag224_buf || diag224(diag224_buf)) - goto out; - -@@ -378,7 +378,7 @@ static void fill_diag(struct sthyi_sctns *sctns) - sctns->par.infpval1 |= PAR_WGHT_VLD; - - out: -- kfree(diag224_buf); -+ free_page((unsigned long)diag224_buf); - vfree(diag204_buf); - } - -diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c -index 620ab06..017bda1 100644 ---- a/arch/x86/kernel/cpu/microcode/amd.c -+++ b/arch/x86/kernel/cpu/microcode/amd.c -@@ -429,7 +429,7 @@ int __init save_microcode_in_initrd_amd(void) - * We need the physical address of the container for both bitness since - * boot_params.hdr.ramdisk_image is a physical address. - */ -- cont = __pa(container); -+ cont = __pa_nodebug(container); - cont_va = container; - #endif - -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 98c9cd6..d5219b1 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -1222,11 +1222,16 @@ void __init setup_arch(char **cmdline_p) - if (smp_found_config) - get_smp_config(); - -+ /* -+ * Systems w/o ACPI and mptables might not have it mapped the local -+ * APIC yet, but prefill_possible_map() might need to access it. -+ */ -+ init_apic_mappings(); -+ - prefill_possible_map(); - - init_cpu_to_node(); - -- init_apic_mappings(); - io_apic_init_mappings(); - - kvm_guest_init(); -diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c -index 4e95d3e..cbd7b92 100644 ---- a/arch/x86/kvm/emulate.c -+++ b/arch/x86/kvm/emulate.c -@@ -5045,7 +5045,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) - /* Decode and fetch the destination operand: register or memory. */ - rc = decode_operand(ctxt, &ctxt->dst, (ctxt->d >> DstShift) & OpMask); - -- if (ctxt->rip_relative) -+ if (ctxt->rip_relative && likely(ctxt->memopp)) - ctxt->memopp->addr.mem.ea = address_mask(ctxt, - ctxt->memopp->addr.mem.ea + ctxt->_eip); - -diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index 699f872..46f74d4 100644 ---- a/arch/x86/kvm/x86.c -+++ b/arch/x86/kvm/x86.c -@@ -7372,10 +7372,12 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu) - - void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) - { -+ void *wbinvd_dirty_mask = vcpu->arch.wbinvd_dirty_mask; -+ - kvmclock_reset(vcpu); - -- free_cpumask_var(vcpu->arch.wbinvd_dirty_mask); - kvm_x86_ops->vcpu_free(vcpu); -+ free_cpumask_var(wbinvd_dirty_mask); - } - - struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, -diff --git a/drivers/android/binder.c b/drivers/android/binder.c -index 16288e7..4b1e4ea 100644 ---- a/drivers/android/binder.c -+++ b/drivers/android/binder.c -@@ -1003,7 +1003,7 @@ static int binder_dec_node(struct binder_node *node, int strong, int internal) - - - static struct binder_ref *binder_get_ref(struct binder_proc *proc, -- uint32_t desc) -+ u32 desc, bool need_strong_ref) - { - struct rb_node *n = proc->refs_by_desc.rb_node; - struct binder_ref *ref; -@@ -1011,12 +1011,16 @@ static struct binder_ref *binder_get_ref(struct binder_proc *proc, - while (n) { - ref = rb_entry(n, struct binder_ref, rb_node_desc); - -- if (desc < ref->desc) -+ if (desc < ref->desc) { - n = n->rb_left; -- else if (desc > ref->desc) -+ } else if (desc > ref->desc) { - n = n->rb_right; -- else -+ } else if (need_strong_ref && !ref->strong) { -+ binder_user_error("tried to use weak ref as strong ref\n"); -+ return NULL; -+ } else { - return ref; -+ } - } - return NULL; - } -@@ -1286,7 +1290,10 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, - } break; - case BINDER_TYPE_HANDLE: - case BINDER_TYPE_WEAK_HANDLE: { -- struct binder_ref *ref = binder_get_ref(proc, fp->handle); -+ struct binder_ref *ref; -+ -+ ref = binder_get_ref(proc, fp->handle, -+ fp->type == BINDER_TYPE_HANDLE); - - if (ref == NULL) { - pr_err("transaction release %d bad handle %d\n", -@@ -1381,7 +1388,7 @@ static void binder_transaction(struct binder_proc *proc, - if (tr->target.handle) { - struct binder_ref *ref; - -- ref = binder_get_ref(proc, tr->target.handle); -+ ref = binder_get_ref(proc, tr->target.handle, true); - if (ref == NULL) { - binder_user_error("%d:%d got transaction to invalid handle\n", - proc->pid, thread->pid); -@@ -1578,7 +1585,9 @@ static void binder_transaction(struct binder_proc *proc, - fp->type = BINDER_TYPE_HANDLE; - else - fp->type = BINDER_TYPE_WEAK_HANDLE; -+ fp->binder = 0; - fp->handle = ref->desc; -+ fp->cookie = 0; - binder_inc_ref(ref, fp->type == BINDER_TYPE_HANDLE, - &thread->todo); - -@@ -1590,7 +1599,10 @@ static void binder_transaction(struct binder_proc *proc, - } break; - case BINDER_TYPE_HANDLE: - case BINDER_TYPE_WEAK_HANDLE: { -- struct binder_ref *ref = binder_get_ref(proc, fp->handle); -+ struct binder_ref *ref; -+ -+ ref = binder_get_ref(proc, fp->handle, -+ fp->type == BINDER_TYPE_HANDLE); - - if (ref == NULL) { - binder_user_error("%d:%d got transaction with invalid handle, %d\n", -@@ -1625,7 +1637,9 @@ static void binder_transaction(struct binder_proc *proc, - return_error = BR_FAILED_REPLY; - goto err_binder_get_ref_for_node_failed; - } -+ fp->binder = 0; - fp->handle = new_ref->desc; -+ fp->cookie = 0; - binder_inc_ref(new_ref, fp->type == BINDER_TYPE_HANDLE, NULL); - trace_binder_transaction_ref_to_ref(t, ref, - new_ref); -@@ -1679,6 +1693,7 @@ static void binder_transaction(struct binder_proc *proc, - binder_debug(BINDER_DEBUG_TRANSACTION, - " fd %d -> %d\n", fp->handle, target_fd); - /* TODO: fput? */ -+ fp->binder = 0; - fp->handle = target_fd; - } break; - -@@ -1801,7 +1816,9 @@ static int binder_thread_write(struct binder_proc *proc, - ref->desc); - } - } else -- ref = binder_get_ref(proc, target); -+ ref = binder_get_ref(proc, target, -+ cmd == BC_ACQUIRE || -+ cmd == BC_RELEASE); - if (ref == NULL) { - binder_user_error("%d:%d refcount change on invalid ref %d\n", - proc->pid, thread->pid, target); -@@ -1997,7 +2014,7 @@ static int binder_thread_write(struct binder_proc *proc, - if (get_user(cookie, (binder_uintptr_t __user *)ptr)) - return -EFAULT; - ptr += sizeof(binder_uintptr_t); -- ref = binder_get_ref(proc, target); -+ ref = binder_get_ref(proc, target, false); - if (ref == NULL) { - binder_user_error("%d:%d %s invalid ref %d\n", - proc->pid, thread->pid, -diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c -index 5da47e26..4aae0d2 100644 ---- a/drivers/char/virtio_console.c -+++ b/drivers/char/virtio_console.c -@@ -1540,19 +1540,29 @@ static void remove_port_data(struct port *port) - spin_lock_irq(&port->inbuf_lock); - /* Remove unused data this port might have received. */ - discard_port_data(port); -+ spin_unlock_irq(&port->inbuf_lock); - - /* Remove buffers we queued up for the Host to send us data in. */ -- while ((buf = virtqueue_detach_unused_buf(port->in_vq))) -- free_buf(buf, true); -- spin_unlock_irq(&port->inbuf_lock); -+ do { -+ spin_lock_irq(&port->inbuf_lock); -+ buf = virtqueue_detach_unused_buf(port->in_vq); -+ spin_unlock_irq(&port->inbuf_lock); -+ if (buf) -+ free_buf(buf, true); -+ } while (buf); - - spin_lock_irq(&port->outvq_lock); - reclaim_consumed_buffers(port); -+ spin_unlock_irq(&port->outvq_lock); - - /* Free pending buffers from the out-queue. */ -- while ((buf = virtqueue_detach_unused_buf(port->out_vq))) -- free_buf(buf, true); -- spin_unlock_irq(&port->outvq_lock); -+ do { -+ spin_lock_irq(&port->outvq_lock); -+ buf = virtqueue_detach_unused_buf(port->out_vq); -+ spin_unlock_irq(&port->outvq_lock); -+ if (buf) -+ free_buf(buf, true); -+ } while (buf); - } - - /* -diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c -index b46547e..8c347f5 100644 ---- a/drivers/cpufreq/intel_pstate.c -+++ b/drivers/cpufreq/intel_pstate.c -@@ -1133,10 +1133,8 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max) - *min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf); - } - --static void intel_pstate_set_min_pstate(struct cpudata *cpu) -+static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) - { -- int pstate = cpu->pstate.min_pstate; -- - trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu); - cpu->pstate.current_pstate = pstate; - /* -@@ -1148,6 +1146,20 @@ static void intel_pstate_set_min_pstate(struct cpudata *cpu) - pstate_funcs.get_val(cpu, pstate)); - } - -+static void intel_pstate_set_min_pstate(struct cpudata *cpu) -+{ -+ intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate); -+} -+ -+static void intel_pstate_max_within_limits(struct cpudata *cpu) -+{ -+ int min_pstate, max_pstate; -+ -+ update_turbo_state(); -+ intel_pstate_get_min_max(cpu, &min_pstate, &max_pstate); -+ intel_pstate_set_pstate(cpu, max_pstate); -+} -+ - static void intel_pstate_get_cpu_pstates(struct cpudata *cpu) - { - cpu->pstate.min_pstate = pstate_funcs.get_min(); -@@ -1465,7 +1477,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy) - pr_debug("set_policy cpuinfo.max %u policy->max %u\n", - policy->cpuinfo.max_freq, policy->max); - -- cpu = all_cpu_data[0]; -+ cpu = all_cpu_data[policy->cpu]; - if (cpu->pstate.max_pstate_physical > cpu->pstate.max_pstate && - policy->max < policy->cpuinfo.max_freq && - policy->max > cpu->pstate.max_pstate * cpu->pstate.scaling) { -@@ -1509,6 +1521,15 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy) - limits->max_perf = round_up(limits->max_perf, FRAC_BITS); - - out: -+ if (policy->policy == CPUFREQ_POLICY_PERFORMANCE) { -+ /* -+ * NOHZ_FULL CPUs need this as the governor callback may not -+ * be invoked on them. -+ */ -+ intel_pstate_clear_update_util_hook(policy->cpu); -+ intel_pstate_max_within_limits(cpu); -+ } -+ - intel_pstate_set_update_util_hook(policy->cpu); - - intel_pstate_hwp_set_policy(policy); -diff --git a/drivers/dax/pmem.c b/drivers/dax/pmem.c -index 1f01e98..73ae849 100644 ---- a/drivers/dax/pmem.c -+++ b/drivers/dax/pmem.c -@@ -44,7 +44,6 @@ static void dax_pmem_percpu_exit(void *data) - - dev_dbg(dax_pmem->dev, "%s\n", __func__); - percpu_ref_exit(ref); -- wait_for_completion(&dax_pmem->cmp); - } - - static void dax_pmem_percpu_kill(void *data) -@@ -54,6 +53,7 @@ static void dax_pmem_percpu_kill(void *data) - - dev_dbg(dax_pmem->dev, "%s\n", __func__); - percpu_ref_kill(ref); -+ wait_for_completion(&dax_pmem->cmp); - } - - static int dax_pmem_probe(struct device *dev) -diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c -index 309311b..1547589 100644 ---- a/drivers/firewire/net.c -+++ b/drivers/firewire/net.c -@@ -73,13 +73,13 @@ struct rfc2734_header { - - #define fwnet_get_hdr_lf(h) (((h)->w0 & 0xc0000000) >> 30) - #define fwnet_get_hdr_ether_type(h) (((h)->w0 & 0x0000ffff)) --#define fwnet_get_hdr_dg_size(h) (((h)->w0 & 0x0fff0000) >> 16) -+#define fwnet_get_hdr_dg_size(h) ((((h)->w0 & 0x0fff0000) >> 16) + 1) - #define fwnet_get_hdr_fg_off(h) (((h)->w0 & 0x00000fff)) - #define fwnet_get_hdr_dgl(h) (((h)->w1 & 0xffff0000) >> 16) - --#define fwnet_set_hdr_lf(lf) ((lf) << 30) -+#define fwnet_set_hdr_lf(lf) ((lf) << 30) - #define fwnet_set_hdr_ether_type(et) (et) --#define fwnet_set_hdr_dg_size(dgs) ((dgs) << 16) -+#define fwnet_set_hdr_dg_size(dgs) (((dgs) - 1) << 16) - #define fwnet_set_hdr_fg_off(fgo) (fgo) - - #define fwnet_set_hdr_dgl(dgl) ((dgl) << 16) -@@ -578,6 +578,9 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, - int retval; - u16 ether_type; - -+ if (len <= RFC2374_UNFRAG_HDR_SIZE) -+ return 0; -+ - hdr.w0 = be32_to_cpu(buf[0]); - lf = fwnet_get_hdr_lf(&hdr); - if (lf == RFC2374_HDR_UNFRAG) { -@@ -602,7 +605,12 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, - return fwnet_finish_incoming_packet(net, skb, source_node_id, - is_broadcast, ether_type); - } -+ - /* A datagram fragment has been received, now the fun begins. */ -+ -+ if (len <= RFC2374_FRAG_HDR_SIZE) -+ return 0; -+ - hdr.w1 = ntohl(buf[1]); - buf += 2; - len -= RFC2374_FRAG_HDR_SIZE; -@@ -614,7 +622,10 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len, - fg_off = fwnet_get_hdr_fg_off(&hdr); - } - datagram_label = fwnet_get_hdr_dgl(&hdr); -- dg_size = fwnet_get_hdr_dg_size(&hdr); /* ??? + 1 */ -+ dg_size = fwnet_get_hdr_dg_size(&hdr); -+ -+ if (fg_off + len > dg_size) -+ return 0; - - spin_lock_irqsave(&dev->lock, flags); - -@@ -722,6 +733,22 @@ static void fwnet_receive_packet(struct fw_card *card, struct fw_request *r, - fw_send_response(card, r, rcode); - } - -+static int gasp_source_id(__be32 *p) -+{ -+ return be32_to_cpu(p[0]) >> 16; -+} -+ -+static u32 gasp_specifier_id(__be32 *p) -+{ -+ return (be32_to_cpu(p[0]) & 0xffff) << 8 | -+ (be32_to_cpu(p[1]) & 0xff000000) >> 24; -+} -+ -+static u32 gasp_version(__be32 *p) -+{ -+ return be32_to_cpu(p[1]) & 0xffffff; -+} -+ - static void fwnet_receive_broadcast(struct fw_iso_context *context, - u32 cycle, size_t header_length, void *header, void *data) - { -@@ -731,9 +758,6 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, - __be32 *buf_ptr; - int retval; - u32 length; -- u16 source_node_id; -- u32 specifier_id; -- u32 ver; - unsigned long offset; - unsigned long flags; - -@@ -750,22 +774,17 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context, - - spin_unlock_irqrestore(&dev->lock, flags); - -- specifier_id = (be32_to_cpu(buf_ptr[0]) & 0xffff) << 8 -- | (be32_to_cpu(buf_ptr[1]) & 0xff000000) >> 24; -- ver = be32_to_cpu(buf_ptr[1]) & 0xffffff; -- source_node_id = be32_to_cpu(buf_ptr[0]) >> 16; -- -- if (specifier_id == IANA_SPECIFIER_ID && -- (ver == RFC2734_SW_VERSION -+ if (length > IEEE1394_GASP_HDR_SIZE && -+ gasp_specifier_id(buf_ptr) == IANA_SPECIFIER_ID && -+ (gasp_version(buf_ptr) == RFC2734_SW_VERSION - #if IS_ENABLED(CONFIG_IPV6) -- || ver == RFC3146_SW_VERSION -+ || gasp_version(buf_ptr) == RFC3146_SW_VERSION - #endif -- )) { -- buf_ptr += 2; -- length -= IEEE1394_GASP_HDR_SIZE; -- fwnet_incoming_packet(dev, buf_ptr, length, source_node_id, -+ )) -+ fwnet_incoming_packet(dev, buf_ptr + 2, -+ length - IEEE1394_GASP_HDR_SIZE, -+ gasp_source_id(buf_ptr), - context->card->generation, true); -- } - - packet.payload_length = dev->rcv_buffer_size; - packet.interrupt = 1; -diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c -index af51461..14f2d98 100644 ---- a/drivers/gpio/gpiolib-acpi.c -+++ b/drivers/gpio/gpiolib-acpi.c -@@ -602,14 +602,17 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) - { - int idx, i; - unsigned int irq_flags; -+ int ret = -ENOENT; - - for (i = 0, idx = 0; idx <= index; i++) { - struct acpi_gpio_info info; - struct gpio_desc *desc; - - desc = acpi_get_gpiod_by_index(adev, NULL, i, &info); -- if (IS_ERR(desc)) -+ if (IS_ERR(desc)) { -+ ret = PTR_ERR(desc); - break; -+ } - if (info.gpioint && idx++ == index) { - int irq = gpiod_to_irq(desc); - -@@ -628,7 +631,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) - } - - } -- return -ENOENT; -+ return ret; - } - EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get); - -diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c -index 53ff25a..b2dee10 100644 ---- a/drivers/gpio/gpiolib.c -+++ b/drivers/gpio/gpiolib.c -@@ -21,6 +21,7 @@ - #include <linux/uaccess.h> - #include <linux/compat.h> - #include <linux/anon_inodes.h> -+#include <linux/file.h> - #include <linux/kfifo.h> - #include <linux/poll.h> - #include <linux/timekeeping.h> -@@ -331,6 +332,13 @@ struct linehandle_state { - u32 numdescs; - }; - -+#define GPIOHANDLE_REQUEST_VALID_FLAGS \ -+ (GPIOHANDLE_REQUEST_INPUT | \ -+ GPIOHANDLE_REQUEST_OUTPUT | \ -+ GPIOHANDLE_REQUEST_ACTIVE_LOW | \ -+ GPIOHANDLE_REQUEST_OPEN_DRAIN | \ -+ GPIOHANDLE_REQUEST_OPEN_SOURCE) -+ - static long linehandle_ioctl(struct file *filep, unsigned int cmd, - unsigned long arg) - { -@@ -342,6 +350,8 @@ static long linehandle_ioctl(struct file *filep, unsigned int cmd, - if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) { - int val; - -+ memset(&ghd, 0, sizeof(ghd)); -+ - /* TODO: check if descriptors are really input */ - for (i = 0; i < lh->numdescs; i++) { - val = gpiod_get_value_cansleep(lh->descs[i]); -@@ -412,6 +422,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) - { - struct gpiohandle_request handlereq; - struct linehandle_state *lh; -+ struct file *file; - int fd, i, ret; - - if (copy_from_user(&handlereq, ip, sizeof(handlereq))) -@@ -442,6 +453,17 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) - u32 lflags = handlereq.flags; - struct gpio_desc *desc; - -+ if (offset >= gdev->ngpio) { -+ ret = -EINVAL; -+ goto out_free_descs; -+ } -+ -+ /* Return an error if a unknown flag is set */ -+ if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) { -+ ret = -EINVAL; -+ goto out_free_descs; -+ } -+ - desc = &gdev->descs[offset]; - ret = gpiod_request(desc, lh->label); - if (ret) -@@ -477,26 +499,41 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) - i--; - lh->numdescs = handlereq.lines; - -- fd = anon_inode_getfd("gpio-linehandle", -- &linehandle_fileops, -- lh, -- O_RDONLY | O_CLOEXEC); -+ fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC); - if (fd < 0) { - ret = fd; - goto out_free_descs; - } - -+ file = anon_inode_getfile("gpio-linehandle", -+ &linehandle_fileops, -+ lh, -+ O_RDONLY | O_CLOEXEC); -+ if (IS_ERR(file)) { -+ ret = PTR_ERR(file); -+ goto out_put_unused_fd; -+ } -+ - handlereq.fd = fd; - if (copy_to_user(ip, &handlereq, sizeof(handlereq))) { -- ret = -EFAULT; -- goto out_free_descs; -+ /* -+ * fput() will trigger the release() callback, so do not go onto -+ * the regular error cleanup path here. -+ */ -+ fput(file); -+ put_unused_fd(fd); -+ return -EFAULT; - } - -+ fd_install(fd, file); -+ - dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", - lh->numdescs); - - return 0; - -+out_put_unused_fd: -+ put_unused_fd(fd); - out_free_descs: - for (; i >= 0; i--) - gpiod_free(lh->descs[i]); -@@ -534,6 +571,10 @@ struct lineevent_state { - struct mutex read_lock; - }; - -+#define GPIOEVENT_REQUEST_VALID_FLAGS \ -+ (GPIOEVENT_REQUEST_RISING_EDGE | \ -+ GPIOEVENT_REQUEST_FALLING_EDGE) -+ - static unsigned int lineevent_poll(struct file *filep, - struct poll_table_struct *wait) - { -@@ -621,6 +662,8 @@ static long lineevent_ioctl(struct file *filep, unsigned int cmd, - if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) { - int val; - -+ memset(&ghd, 0, sizeof(ghd)); -+ - val = gpiod_get_value_cansleep(le->desc); - if (val < 0) - return val; -@@ -693,6 +736,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) - struct gpioevent_request eventreq; - struct lineevent_state *le; - struct gpio_desc *desc; -+ struct file *file; - u32 offset; - u32 lflags; - u32 eflags; -@@ -724,6 +768,18 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) - lflags = eventreq.handleflags; - eflags = eventreq.eventflags; - -+ if (offset >= gdev->ngpio) { -+ ret = -EINVAL; -+ goto out_free_label; -+ } -+ -+ /* Return an error if a unknown flag is set */ -+ if ((lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) || -+ (eflags & ~GPIOEVENT_REQUEST_VALID_FLAGS)) { -+ ret = -EINVAL; -+ goto out_free_label; -+ } -+ - /* This is just wrong: we don't look for events on output lines */ - if (lflags & GPIOHANDLE_REQUEST_OUTPUT) { - ret = -EINVAL; -@@ -775,23 +831,38 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) - if (ret) - goto out_free_desc; - -- fd = anon_inode_getfd("gpio-event", -- &lineevent_fileops, -- le, -- O_RDONLY | O_CLOEXEC); -+ fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC); - if (fd < 0) { - ret = fd; - goto out_free_irq; - } - -+ file = anon_inode_getfile("gpio-event", -+ &lineevent_fileops, -+ le, -+ O_RDONLY | O_CLOEXEC); -+ if (IS_ERR(file)) { -+ ret = PTR_ERR(file); -+ goto out_put_unused_fd; -+ } -+ - eventreq.fd = fd; - if (copy_to_user(ip, &eventreq, sizeof(eventreq))) { -- ret = -EFAULT; -- goto out_free_irq; -+ /* -+ * fput() will trigger the release() callback, so do not go onto -+ * the regular error cleanup path here. -+ */ -+ fput(file); -+ put_unused_fd(fd); -+ return -EFAULT; - } - -+ fd_install(fd, file); -+ - return 0; - -+out_put_unused_fd: -+ put_unused_fd(fd); - out_free_irq: - free_irq(le->irq, le); - out_free_desc: -@@ -821,6 +892,8 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) - if (cmd == GPIO_GET_CHIPINFO_IOCTL) { - struct gpiochip_info chipinfo; - -+ memset(&chipinfo, 0, sizeof(chipinfo)); -+ - strncpy(chipinfo.name, dev_name(&gdev->dev), - sizeof(chipinfo.name)); - chipinfo.name[sizeof(chipinfo.name)-1] = '\0'; -@@ -837,7 +910,7 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) - - if (copy_from_user(&lineinfo, ip, sizeof(lineinfo))) - return -EFAULT; -- if (lineinfo.line_offset > gdev->ngpio) -+ if (lineinfo.line_offset >= gdev->ngpio) - return -EINVAL; - - desc = &gdev->descs[lineinfo.line_offset]; -diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c -index 2a3ded4..7c8c185 100644 ---- a/drivers/gpu/drm/drm_atomic.c -+++ b/drivers/gpu/drm/drm_atomic.c -@@ -420,18 +420,21 @@ drm_atomic_replace_property_blob_from_id(struct drm_crtc *crtc, - ssize_t expected_size, - bool *replaced) - { -- struct drm_device *dev = crtc->dev; - struct drm_property_blob *new_blob = NULL; - - if (blob_id != 0) { -- new_blob = drm_property_lookup_blob(dev, blob_id); -+ new_blob = drm_property_lookup_blob(crtc->dev, blob_id); - if (new_blob == NULL) - return -EINVAL; -- if (expected_size > 0 && expected_size != new_blob->length) -+ -+ if (expected_size > 0 && expected_size != new_blob->length) { -+ drm_property_unreference_blob(new_blob); - return -EINVAL; -+ } - } - - drm_atomic_replace_property_blob(blob, new_blob, replaced); -+ drm_property_unreference_blob(new_blob); - - return 0; - } -diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c -index 04e4571..aa64448 100644 ---- a/drivers/gpu/drm/drm_dp_mst_topology.c -+++ b/drivers/gpu/drm/drm_dp_mst_topology.c -@@ -914,6 +914,7 @@ static void drm_dp_destroy_port(struct kref *kref) - /* no need to clean up vcpi - * as if we have no connector we never setup a vcpi */ - drm_dp_port_teardown_pdt(port, port->pdt); -+ port->pdt = DP_PEER_DEVICE_NONE; - } - kfree(port); - } -@@ -1159,7 +1160,9 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, - drm_dp_put_port(port); - goto out; - } -- if (port->port_num >= DP_MST_LOGICAL_PORT_0) { -+ if ((port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV || -+ port->pdt == DP_PEER_DEVICE_SST_SINK) && -+ port->port_num >= DP_MST_LOGICAL_PORT_0) { - port->cached_edid = drm_get_edid(port->connector, &port->aux.ddc); - drm_mode_connector_set_tile_property(port->connector); - } -@@ -2919,6 +2922,7 @@ static void drm_dp_destroy_connector_work(struct work_struct *work) - mgr->cbs->destroy_connector(mgr, port->connector); - - drm_dp_port_teardown_pdt(port, port->pdt); -+ port->pdt = DP_PEER_DEVICE_NONE; - - if (!port->input && port->vcpi.vcpi > 0) { - drm_dp_mst_reset_vcpi_slots(mgr, port); -diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c -index 0a06f91..337c555 100644 ---- a/drivers/gpu/drm/drm_fb_helper.c -+++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -129,7 +129,12 @@ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper) - return 0; - fail: - for (i = 0; i < fb_helper->connector_count; i++) { -- kfree(fb_helper->connector_info[i]); -+ struct drm_fb_helper_connector *fb_helper_connector = -+ fb_helper->connector_info[i]; -+ -+ drm_connector_unreference(fb_helper_connector->connector); -+ -+ kfree(fb_helper_connector); - fb_helper->connector_info[i] = NULL; - } - fb_helper->connector_count = 0; -@@ -601,6 +606,24 @@ int drm_fb_helper_blank(int blank, struct fb_info *info) - } - EXPORT_SYMBOL(drm_fb_helper_blank); - -+static void drm_fb_helper_modeset_release(struct drm_fb_helper *helper, -+ struct drm_mode_set *modeset) -+{ -+ int i; -+ -+ for (i = 0; i < modeset->num_connectors; i++) { -+ drm_connector_unreference(modeset->connectors[i]); -+ modeset->connectors[i] = NULL; -+ } -+ modeset->num_connectors = 0; -+ -+ drm_mode_destroy(helper->dev, modeset->mode); -+ modeset->mode = NULL; -+ -+ /* FIXME should hold a ref? */ -+ modeset->fb = NULL; -+} -+ - static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper) - { - int i; -@@ -610,10 +633,12 @@ static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper) - kfree(helper->connector_info[i]); - } - kfree(helper->connector_info); -+ - for (i = 0; i < helper->crtc_count; i++) { -- kfree(helper->crtc_info[i].mode_set.connectors); -- if (helper->crtc_info[i].mode_set.mode) -- drm_mode_destroy(helper->dev, helper->crtc_info[i].mode_set.mode); -+ struct drm_mode_set *modeset = &helper->crtc_info[i].mode_set; -+ -+ drm_fb_helper_modeset_release(helper, modeset); -+ kfree(modeset->connectors); - } - kfree(helper->crtc_info); - } -@@ -632,7 +657,9 @@ static void drm_fb_helper_dirty_work(struct work_struct *work) - clip->x2 = clip->y2 = 0; - spin_unlock_irqrestore(&helper->dirty_lock, flags); - -- helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, &clip_copy, 1); -+ /* call dirty callback only when it has been really touched */ -+ if (clip_copy.x1 < clip_copy.x2 && clip_copy.y1 < clip_copy.y2) -+ helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, &clip_copy, 1); - } - - /** -@@ -2027,7 +2054,6 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper) - struct drm_fb_helper_crtc **crtcs; - struct drm_display_mode **modes; - struct drm_fb_offset *offsets; -- struct drm_mode_set *modeset; - bool *enabled; - int width, height; - int i; -@@ -2075,45 +2101,35 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper) - - /* need to set the modesets up here for use later */ - /* fill out the connector<->crtc mappings into the modesets */ -- for (i = 0; i < fb_helper->crtc_count; i++) { -- modeset = &fb_helper->crtc_info[i].mode_set; -- modeset->num_connectors = 0; -- modeset->fb = NULL; -- } -+ for (i = 0; i < fb_helper->crtc_count; i++) -+ drm_fb_helper_modeset_release(fb_helper, -+ &fb_helper->crtc_info[i].mode_set); - - for (i = 0; i < fb_helper->connector_count; i++) { - struct drm_display_mode *mode = modes[i]; - struct drm_fb_helper_crtc *fb_crtc = crtcs[i]; - struct drm_fb_offset *offset = &offsets[i]; -- modeset = &fb_crtc->mode_set; -+ struct drm_mode_set *modeset = &fb_crtc->mode_set; - - if (mode && fb_crtc) { -+ struct drm_connector *connector = -+ fb_helper->connector_info[i]->connector; -+ - DRM_DEBUG_KMS("desired mode %s set on crtc %d (%d,%d)\n", - mode->name, fb_crtc->mode_set.crtc->base.id, offset->x, offset->y); -+ - fb_crtc->desired_mode = mode; - fb_crtc->x = offset->x; - fb_crtc->y = offset->y; -- if (modeset->mode) -- drm_mode_destroy(dev, modeset->mode); - modeset->mode = drm_mode_duplicate(dev, - fb_crtc->desired_mode); -- modeset->connectors[modeset->num_connectors++] = fb_helper->connector_info[i]->connector; -+ drm_connector_reference(connector); -+ modeset->connectors[modeset->num_connectors++] = connector; - modeset->fb = fb_helper->fb; - modeset->x = offset->x; - modeset->y = offset->y; - } - } -- -- /* Clear out any old modes if there are no more connected outputs. */ -- for (i = 0; i < fb_helper->crtc_count; i++) { -- modeset = &fb_helper->crtc_info[i].mode_set; -- if (modeset->num_connectors == 0) { -- BUG_ON(modeset->fb); -- if (modeset->mode) -- drm_mode_destroy(dev, modeset->mode); -- modeset->mode = NULL; -- } -- } - out: - kfree(crtcs); - kfree(modes); -diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c -index c6e69e4..1f8af87 100644 ---- a/drivers/gpu/drm/i915/intel_bios.c -+++ b/drivers/gpu/drm/i915/intel_bios.c -@@ -1031,6 +1031,77 @@ static u8 translate_iboost(u8 val) - return mapping[val]; - } - -+static void sanitize_ddc_pin(struct drm_i915_private *dev_priv, -+ enum port port) -+{ -+ const struct ddi_vbt_port_info *info = -+ &dev_priv->vbt.ddi_port_info[port]; -+ enum port p; -+ -+ if (!info->alternate_ddc_pin) -+ return; -+ -+ for_each_port_masked(p, (1 << port) - 1) { -+ struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; -+ -+ if (info->alternate_ddc_pin != i->alternate_ddc_pin) -+ continue; -+ -+ DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, " -+ "disabling port %c DVI/HDMI support\n", -+ port_name(p), i->alternate_ddc_pin, -+ port_name(port), port_name(p)); -+ -+ /* -+ * If we have multiple ports supposedly sharing the -+ * pin, then dvi/hdmi couldn't exist on the shared -+ * port. Otherwise they share the same ddc bin and -+ * system couldn't communicate with them separately. -+ * -+ * Due to parsing the ports in alphabetical order, -+ * a higher port will always clobber a lower one. -+ */ -+ i->supports_dvi = false; -+ i->supports_hdmi = false; -+ i->alternate_ddc_pin = 0; -+ } -+} -+ -+static void sanitize_aux_ch(struct drm_i915_private *dev_priv, -+ enum port port) -+{ -+ const struct ddi_vbt_port_info *info = -+ &dev_priv->vbt.ddi_port_info[port]; -+ enum port p; -+ -+ if (!info->alternate_aux_channel) -+ return; -+ -+ for_each_port_masked(p, (1 << port) - 1) { -+ struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; -+ -+ if (info->alternate_aux_channel != i->alternate_aux_channel) -+ continue; -+ -+ DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, " -+ "disabling port %c DP support\n", -+ port_name(p), i->alternate_aux_channel, -+ port_name(port), port_name(p)); -+ -+ /* -+ * If we have multiple ports supposedlt sharing the -+ * aux channel, then DP couldn't exist on the shared -+ * port. Otherwise they share the same aux channel -+ * and system couldn't communicate with them separately. -+ * -+ * Due to parsing the ports in alphabetical order, -+ * a higher port will always clobber a lower one. -+ */ -+ i->supports_dp = false; -+ i->alternate_aux_channel = 0; -+ } -+} -+ - static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, - const struct bdb_header *bdb) - { -@@ -1105,54 +1176,15 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, - DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port)); - - if (is_dvi) { -- if (port == PORT_E) { -- info->alternate_ddc_pin = ddc_pin; -- /* if DDIE share ddc pin with other port, then -- * dvi/hdmi couldn't exist on the shared port. -- * Otherwise they share the same ddc bin and system -- * couldn't communicate with them seperately. */ -- if (ddc_pin == DDC_PIN_B) { -- dev_priv->vbt.ddi_port_info[PORT_B].supports_dvi = 0; -- dev_priv->vbt.ddi_port_info[PORT_B].supports_hdmi = 0; -- } else if (ddc_pin == DDC_PIN_C) { -- dev_priv->vbt.ddi_port_info[PORT_C].supports_dvi = 0; -- dev_priv->vbt.ddi_port_info[PORT_C].supports_hdmi = 0; -- } else if (ddc_pin == DDC_PIN_D) { -- dev_priv->vbt.ddi_port_info[PORT_D].supports_dvi = 0; -- dev_priv->vbt.ddi_port_info[PORT_D].supports_hdmi = 0; -- } -- } else if (ddc_pin == DDC_PIN_B && port != PORT_B) -- DRM_DEBUG_KMS("Unexpected DDC pin for port B\n"); -- else if (ddc_pin == DDC_PIN_C && port != PORT_C) -- DRM_DEBUG_KMS("Unexpected DDC pin for port C\n"); -- else if (ddc_pin == DDC_PIN_D && port != PORT_D) -- DRM_DEBUG_KMS("Unexpected DDC pin for port D\n"); -+ info->alternate_ddc_pin = ddc_pin; -+ -+ sanitize_ddc_pin(dev_priv, port); - } - - if (is_dp) { -- if (port == PORT_E) { -- info->alternate_aux_channel = aux_channel; -- /* if DDIE share aux channel with other port, then -- * DP couldn't exist on the shared port. Otherwise -- * they share the same aux channel and system -- * couldn't communicate with them seperately. */ -- if (aux_channel == DP_AUX_A) -- dev_priv->vbt.ddi_port_info[PORT_A].supports_dp = 0; -- else if (aux_channel == DP_AUX_B) -- dev_priv->vbt.ddi_port_info[PORT_B].supports_dp = 0; -- else if (aux_channel == DP_AUX_C) -- dev_priv->vbt.ddi_port_info[PORT_C].supports_dp = 0; -- else if (aux_channel == DP_AUX_D) -- dev_priv->vbt.ddi_port_info[PORT_D].supports_dp = 0; -- } -- else if (aux_channel == DP_AUX_A && port != PORT_A) -- DRM_DEBUG_KMS("Unexpected AUX channel for port A\n"); -- else if (aux_channel == DP_AUX_B && port != PORT_B) -- DRM_DEBUG_KMS("Unexpected AUX channel for port B\n"); -- else if (aux_channel == DP_AUX_C && port != PORT_C) -- DRM_DEBUG_KMS("Unexpected AUX channel for port C\n"); -- else if (aux_channel == DP_AUX_D && port != PORT_D) -- DRM_DEBUG_KMS("Unexpected AUX channel for port D\n"); -+ info->alternate_aux_channel = aux_channel; -+ -+ sanitize_aux_ch(dev_priv, port); - } - - if (bdb->version >= 158) { -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index e9a64fb..63462f2 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13834,7 +13834,7 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) - - for_each_plane_in_state(state, plane, plane_state, i) { - struct intel_plane_state *intel_plane_state = -- to_intel_plane_state(plane_state); -+ to_intel_plane_state(plane->state); - - if (!intel_plane_state->wait_req) - continue; -diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c -index 1ca155f..3051182 100644 ---- a/drivers/gpu/drm/i915/intel_dp.c -+++ b/drivers/gpu/drm/i915/intel_dp.c -@@ -1090,6 +1090,44 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) - return ret; - } - -+static enum port intel_aux_port(struct drm_i915_private *dev_priv, -+ enum port port) -+{ -+ const struct ddi_vbt_port_info *info = -+ &dev_priv->vbt.ddi_port_info[port]; -+ enum port aux_port; -+ -+ if (!info->alternate_aux_channel) { -+ DRM_DEBUG_KMS("using AUX %c for port %c (platform default)\n", -+ port_name(port), port_name(port)); -+ return port; -+ } -+ -+ switch (info->alternate_aux_channel) { -+ case DP_AUX_A: -+ aux_port = PORT_A; -+ break; -+ case DP_AUX_B: -+ aux_port = PORT_B; -+ break; -+ case DP_AUX_C: -+ aux_port = PORT_C; -+ break; -+ case DP_AUX_D: -+ aux_port = PORT_D; -+ break; -+ default: -+ MISSING_CASE(info->alternate_aux_channel); -+ aux_port = PORT_A; -+ break; -+ } -+ -+ DRM_DEBUG_KMS("using AUX %c for port %c (VBT)\n", -+ port_name(aux_port), port_name(port)); -+ -+ return aux_port; -+} -+ - static i915_reg_t g4x_aux_ctl_reg(struct drm_i915_private *dev_priv, - enum port port) - { -@@ -1150,36 +1188,9 @@ static i915_reg_t ilk_aux_data_reg(struct drm_i915_private *dev_priv, - } - } - --/* -- * On SKL we don't have Aux for port E so we rely -- * on VBT to set a proper alternate aux channel. -- */ --static enum port skl_porte_aux_port(struct drm_i915_private *dev_priv) --{ -- const struct ddi_vbt_port_info *info = -- &dev_priv->vbt.ddi_port_info[PORT_E]; -- -- switch (info->alternate_aux_channel) { -- case DP_AUX_A: -- return PORT_A; -- case DP_AUX_B: -- return PORT_B; -- case DP_AUX_C: -- return PORT_C; -- case DP_AUX_D: -- return PORT_D; -- default: -- MISSING_CASE(info->alternate_aux_channel); -- return PORT_A; -- } --} -- - static i915_reg_t skl_aux_ctl_reg(struct drm_i915_private *dev_priv, - enum port port) - { -- if (port == PORT_E) -- port = skl_porte_aux_port(dev_priv); -- - switch (port) { - case PORT_A: - case PORT_B: -@@ -1195,9 +1206,6 @@ static i915_reg_t skl_aux_ctl_reg(struct drm_i915_private *dev_priv, - static i915_reg_t skl_aux_data_reg(struct drm_i915_private *dev_priv, - enum port port, int index) - { -- if (port == PORT_E) -- port = skl_porte_aux_port(dev_priv); -- - switch (port) { - case PORT_A: - case PORT_B: -@@ -1235,7 +1243,8 @@ static i915_reg_t intel_aux_data_reg(struct drm_i915_private *dev_priv, - static void intel_aux_reg_init(struct intel_dp *intel_dp) - { - struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp)); -- enum port port = dp_to_dig_port(intel_dp)->port; -+ enum port port = intel_aux_port(dev_priv, -+ dp_to_dig_port(intel_dp)->port); - int i; - - intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port); -diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c -index 3836a1c..ad483376 100644 ---- a/drivers/gpu/drm/i915/intel_fbc.c -+++ b/drivers/gpu/drm/i915/intel_fbc.c -@@ -104,8 +104,10 @@ static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv, - int lines; - - intel_fbc_get_plane_source_size(cache, NULL, &lines); -- if (INTEL_INFO(dev_priv)->gen >= 7) -+ if (INTEL_GEN(dev_priv) == 7) - lines = min(lines, 2048); -+ else if (INTEL_GEN(dev_priv) >= 8) -+ lines = min(lines, 2560); - - /* Hardware needs the full buffer stride, not just the active area. */ - return lines * cache->fb.stride; -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index e59a28c..a691605 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3363,13 +3363,15 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - int num_active; - int id, i; - -+ /* Clear the partitioning for disabled planes. */ -+ memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -+ memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe])); -+ - if (WARN_ON(!state)) - return 0; - - if (!cstate->base.active) { - ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; -- memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -- memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe])); - return 0; - } - -@@ -3469,12 +3471,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - return 0; - } - --static uint32_t skl_pipe_pixel_rate(const struct intel_crtc_state *config) --{ -- /* TODO: Take into account the scalers once we support them */ -- return config->base.adjusted_mode.crtc_clock; --} -- - /* - * The max latency should be 257 (max the punit can code is 255 and we add 2us - * for the read latency) and cpp should always be <= 8, so that -@@ -3525,7 +3521,7 @@ static uint32_t skl_adjusted_plane_pixel_rate(const struct intel_crtc_state *cst - * Adjusted plane pixel rate is just the pipe's adjusted pixel rate - * with additional adjustments for plane-specific scaling. - */ -- adjusted_pixel_rate = skl_pipe_pixel_rate(cstate); -+ adjusted_pixel_rate = ilk_pipe_pixel_rate(cstate); - downscale_amount = skl_plane_downscale_amount(pstate); - - pixel_rate = adjusted_pixel_rate * downscale_amount >> 16; -@@ -3737,11 +3733,11 @@ skl_compute_linetime_wm(struct intel_crtc_state *cstate) - if (!cstate->base.active) - return 0; - -- if (WARN_ON(skl_pipe_pixel_rate(cstate) == 0)) -+ if (WARN_ON(ilk_pipe_pixel_rate(cstate) == 0)) - return 0; - - return DIV_ROUND_UP(8 * cstate->base.adjusted_mode.crtc_htotal * 1000, -- skl_pipe_pixel_rate(cstate)); -+ ilk_pipe_pixel_rate(cstate)); - } - - static void skl_compute_transition_wm(struct intel_crtc_state *cstate, -@@ -4051,6 +4047,12 @@ skl_compute_ddb(struct drm_atomic_state *state) - intel_state->wm_results.dirty_pipes = ~0; - } - -+ /* -+ * We're not recomputing for the pipes not included in the commit, so -+ * make sure we start with the current state. -+ */ -+ memcpy(ddb, &dev_priv->wm.skl_hw.ddb, sizeof(*ddb)); -+ - for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { - struct intel_crtc_state *cstate; - -diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c -index 29423e75..927c51e 100644 ---- a/drivers/gpu/drm/imx/ipuv3-plane.c -+++ b/drivers/gpu/drm/imx/ipuv3-plane.c -@@ -108,6 +108,7 @@ static void ipu_plane_atomic_set_base(struct ipu_plane *ipu_plane, - { - struct drm_plane *plane = &ipu_plane->base; - struct drm_plane_state *state = plane->state; -+ struct drm_crtc_state *crtc_state = state->crtc->state; - struct drm_framebuffer *fb = state->fb; - unsigned long eba, ubo, vbo; - int active; -@@ -149,7 +150,7 @@ static void ipu_plane_atomic_set_base(struct ipu_plane *ipu_plane, - break; - } - -- if (old_state->fb) { -+ if (!drm_atomic_crtc_needs_modeset(crtc_state)) { - active = ipu_idmac_get_current_buffer(ipu_plane->ipu_ch); - ipu_cpmem_set_buffer(ipu_plane->ipu_ch, !active, eba); - ipu_idmac_select_buffer(ipu_plane->ipu_ch, !active); -@@ -359,7 +360,9 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, - if ((ubo > 0xfffff8) || (vbo > 0xfffff8)) - return -EINVAL; - -- if (old_fb) { -+ if (old_fb && -+ (old_fb->pixel_format == DRM_FORMAT_YUV420 || -+ old_fb->pixel_format == DRM_FORMAT_YVU420)) { - old_ubo = drm_plane_state_to_ubo(old_state); - old_vbo = drm_plane_state_to_vbo(old_state); - if (ubo != old_ubo || vbo != old_vbo) -diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c -index dc57b62..193573d 100644 ---- a/drivers/gpu/drm/nouveau/nouveau_acpi.c -+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c -@@ -240,7 +240,8 @@ static bool nouveau_pr3_present(struct pci_dev *pdev) - if (!parent_adev) - return false; - -- return acpi_has_method(parent_adev->handle, "_PR3"); -+ return parent_adev->power.flags.power_resources && -+ acpi_has_method(parent_adev->handle, "_PR3"); - } - - static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out, -diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c -index 4a3d7ca..4b9c2d5 100644 ---- a/drivers/gpu/drm/radeon/ni.c -+++ b/drivers/gpu/drm/radeon/ni.c -@@ -1396,9 +1396,7 @@ static void cayman_pcie_gart_fini(struct radeon_device *rdev) - void cayman_cp_int_cntl_setup(struct radeon_device *rdev, - int ring, u32 cp_int_cntl) - { -- u32 srbm_gfx_cntl = RREG32(SRBM_GFX_CNTL) & ~3; -- -- WREG32(SRBM_GFX_CNTL, srbm_gfx_cntl | (ring & 3)); -+ WREG32(SRBM_GFX_CNTL, RINGID(ring)); - WREG32(CP_INT_CNTL, cp_int_cntl); - } - -diff --git a/drivers/gpu/drm/radeon/radeon_dp_auxch.c b/drivers/gpu/drm/radeon/radeon_dp_auxch.c -index db64e00..3b0c229 100644 ---- a/drivers/gpu/drm/radeon/radeon_dp_auxch.c -+++ b/drivers/gpu/drm/radeon/radeon_dp_auxch.c -@@ -105,7 +105,7 @@ radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg - - tmp &= AUX_HPD_SEL(0x7); - tmp |= AUX_HPD_SEL(chan->rec.hpd); -- tmp |= AUX_EN | AUX_LS_READ_EN | AUX_HPD_DISCON(0x1); -+ tmp |= AUX_EN | AUX_LS_READ_EN; - - WREG32(AUX_CONTROL + aux_offset[instance], tmp); - -diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c -index 89bdf20..c4993452 100644 ---- a/drivers/gpu/drm/radeon/si_dpm.c -+++ b/drivers/gpu/drm/radeon/si_dpm.c -@@ -2999,6 +2999,49 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, - int i; - struct si_dpm_quirk *p = si_dpm_quirk_list; - -+ /* limit all SI kickers */ -+ if (rdev->family == CHIP_PITCAIRN) { -+ if ((rdev->pdev->revision == 0x81) || -+ (rdev->pdev->device == 0x6810) || -+ (rdev->pdev->device == 0x6811) || -+ (rdev->pdev->device == 0x6816) || -+ (rdev->pdev->device == 0x6817) || -+ (rdev->pdev->device == 0x6806)) -+ max_mclk = 120000; -+ } else if (rdev->family == CHIP_VERDE) { -+ if ((rdev->pdev->revision == 0x81) || -+ (rdev->pdev->revision == 0x83) || -+ (rdev->pdev->revision == 0x87) || -+ (rdev->pdev->device == 0x6820) || -+ (rdev->pdev->device == 0x6821) || -+ (rdev->pdev->device == 0x6822) || -+ (rdev->pdev->device == 0x6823) || -+ (rdev->pdev->device == 0x682A) || -+ (rdev->pdev->device == 0x682B)) { -+ max_sclk = 75000; -+ max_mclk = 80000; -+ } -+ } else if (rdev->family == CHIP_OLAND) { -+ if ((rdev->pdev->revision == 0xC7) || -+ (rdev->pdev->revision == 0x80) || -+ (rdev->pdev->revision == 0x81) || -+ (rdev->pdev->revision == 0x83) || -+ (rdev->pdev->device == 0x6604) || -+ (rdev->pdev->device == 0x6605)) { -+ max_sclk = 75000; -+ max_mclk = 80000; -+ } -+ } else if (rdev->family == CHIP_HAINAN) { -+ if ((rdev->pdev->revision == 0x81) || -+ (rdev->pdev->revision == 0x83) || -+ (rdev->pdev->revision == 0xC3) || -+ (rdev->pdev->device == 0x6664) || -+ (rdev->pdev->device == 0x6665) || -+ (rdev->pdev->device == 0x6667)) { -+ max_sclk = 75000; -+ max_mclk = 80000; -+ } -+ } - /* Apply dpm quirks */ - while (p && p->chip_device != 0) { - if (rdev->pdev->vendor == p->chip_vendor && -@@ -3011,16 +3054,6 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, - } - ++p; - } -- /* limit mclk on all R7 370 parts for stability */ -- if (rdev->pdev->device == 0x6811 && -- rdev->pdev->revision == 0x81) -- max_mclk = 120000; -- /* limit sclk/mclk on Jet parts for stability */ -- if (rdev->pdev->device == 0x6665 && -- rdev->pdev->revision == 0xc3) { -- max_sclk = 75000; -- max_mclk = 80000; -- } - - if (rps->vce_active) { - rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk; -diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h -index e92b09d..9ab703c 100644 ---- a/drivers/hid/hid-ids.h -+++ b/drivers/hid/hid-ids.h -@@ -179,6 +179,7 @@ - #define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205 - #define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208 - #define USB_DEVICE_ID_ATEN_CS682 0x2213 -+#define USB_DEVICE_ID_ATEN_CS692 0x8021 - - #define USB_VENDOR_ID_ATMEL 0x03eb - #define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c -diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c -index bb40008..85fcf60 100644 ---- a/drivers/hid/usbhid/hid-quirks.c -+++ b/drivers/hid/usbhid/hid-quirks.c -@@ -63,6 +63,7 @@ static const struct hid_blacklist { - { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, - { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET }, - { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET }, -+ { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692, HID_QUIRK_NOGET }, - { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET }, - { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET }, - { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET }, -diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c -index d5acaa2..9dc6372 100644 ---- a/drivers/hv/hv_util.c -+++ b/drivers/hv/hv_util.c -@@ -283,10 +283,14 @@ static void heartbeat_onchannelcallback(void *context) - u8 *hbeat_txf_buf = util_heartbeat.recv_buffer; - struct icmsg_negotiate *negop = NULL; - -- vmbus_recvpacket(channel, hbeat_txf_buf, -- PAGE_SIZE, &recvlen, &requestid); -+ while (1) { -+ -+ vmbus_recvpacket(channel, hbeat_txf_buf, -+ PAGE_SIZE, &recvlen, &requestid); -+ -+ if (!recvlen) -+ break; - -- if (recvlen > 0) { - icmsghdrp = (struct icmsg_hdr *)&hbeat_txf_buf[ - sizeof(struct vmbuspipe_hdr)]; - -diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c -index 5c5b7ca..dfae435 100644 ---- a/drivers/i2c/busses/i2c-rk3x.c -+++ b/drivers/i2c/busses/i2c-rk3x.c -@@ -694,6 +694,8 @@ static int rk3x_i2c_v0_calc_timings(unsigned long clk_rate, - t_calc->div_low--; - t_calc->div_high--; - -+ /* Give the tuning value 0, that would not update con register */ -+ t_calc->tuning = 0; - /* Maximum divider supported by hw is 0xffff */ - if (t_calc->div_low > 0xffff) { - t_calc->div_low = 0xffff; -diff --git a/drivers/i2c/busses/i2c-xgene-slimpro.c b/drivers/i2c/busses/i2c-xgene-slimpro.c -index 4233f56..3c38029 100644 ---- a/drivers/i2c/busses/i2c-xgene-slimpro.c -+++ b/drivers/i2c/busses/i2c-xgene-slimpro.c -@@ -105,7 +105,7 @@ struct slimpro_i2c_dev { - struct mbox_chan *mbox_chan; - struct mbox_client mbox_client; - struct completion rd_complete; -- u8 dma_buffer[I2C_SMBUS_BLOCK_MAX]; -+ u8 dma_buffer[I2C_SMBUS_BLOCK_MAX + 1]; /* dma_buffer[0] is used for length */ - u32 *resp_msg; - }; - -diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c -index da3a02e..a9a9f66 100644 ---- a/drivers/i2c/i2c-core.c -+++ b/drivers/i2c/i2c-core.c -@@ -1592,6 +1592,7 @@ static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap, - static void of_i2c_register_devices(struct i2c_adapter *adap) - { - struct device_node *node; -+ struct i2c_client *client; - - /* Only register child devices if the adapter has a node pointer set */ - if (!adap->dev.of_node) -@@ -1602,7 +1603,14 @@ static void of_i2c_register_devices(struct i2c_adapter *adap) - for_each_available_child_of_node(adap->dev.of_node, node) { - if (of_node_test_and_set_flag(node, OF_POPULATED)) - continue; -- of_i2c_register_device(adap, node); -+ -+ client = of_i2c_register_device(adap, node); -+ if (IS_ERR(client)) { -+ dev_warn(&adap->dev, -+ "Failed to create I2C device for %s\n", -+ node->full_name); -+ of_node_clear_flag(node, OF_POPULATED); -+ } - } - } - -@@ -2073,6 +2081,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) - /* add the driver to the list of i2c drivers in the driver core */ - driver->driver.owner = owner; - driver->driver.bus = &i2c_bus_type; -+ INIT_LIST_HEAD(&driver->clients); - - /* When registration returns, the driver core - * will have called probe() for all matching-but-unbound devices. -@@ -2083,7 +2092,6 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) - - pr_debug("driver [%s] registered\n", driver->driver.name); - -- INIT_LIST_HEAD(&driver->clients); - /* Walk the adapters that are already present */ - i2c_for_each_dev(driver, __process_new_driver); - -@@ -2201,6 +2209,7 @@ static int of_i2c_notify(struct notifier_block *nb, unsigned long action, - if (IS_ERR(client)) { - dev_err(&adap->dev, "failed to create client for '%s'\n", - rd->dn->full_name); -+ of_node_clear_flag(rd->dn, OF_POPULATED); - return notifier_from_errno(PTR_ERR(client)); - } - break; -diff --git a/drivers/iio/chemical/atlas-ph-sensor.c b/drivers/iio/chemical/atlas-ph-sensor.c -index 407f141..a3fbdb7 100644 ---- a/drivers/iio/chemical/atlas-ph-sensor.c -+++ b/drivers/iio/chemical/atlas-ph-sensor.c -@@ -207,13 +207,14 @@ static int atlas_check_ec_calibration(struct atlas_data *data) - struct device *dev = &data->client->dev; - int ret; - unsigned int val; -+ __be16 rval; - -- ret = regmap_bulk_read(data->regmap, ATLAS_REG_EC_PROBE, &val, 2); -+ ret = regmap_bulk_read(data->regmap, ATLAS_REG_EC_PROBE, &rval, 2); - if (ret) - return ret; - -- dev_info(dev, "probe set to K = %d.%.2d", be16_to_cpu(val) / 100, -- be16_to_cpu(val) % 100); -+ val = be16_to_cpu(rval); -+ dev_info(dev, "probe set to K = %d.%.2d", val / 100, val % 100); - - ret = regmap_read(data->regmap, ATLAS_REG_EC_CALIB_STATUS, &val); - if (ret) -diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h -index f4bfb4b..073246c 100644 ---- a/drivers/input/serio/i8042-x86ia64io.h -+++ b/drivers/input/serio/i8042-x86ia64io.h -@@ -877,6 +877,13 @@ static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = { - DMI_MATCH(DMI_PRODUCT_NAME, "P34"), - }, - }, -+ { -+ /* Schenker XMG C504 - Elantech touchpad */ -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "XMG"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "C504"), -+ }, -+ }, - { } - }; - -diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c -index 8abde6b..6d53810 100644 ---- a/drivers/md/dm-raid.c -+++ b/drivers/md/dm-raid.c -@@ -266,7 +266,7 @@ static struct raid_type { - {"raid10_offset", "raid10 offset (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_OFFSET}, - {"raid10_near", "raid10 near (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_NEAR}, - {"raid10", "raid10 (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_DEFAULT}, -- {"raid4", "raid4 (dedicated last parity disk)", 1, 2, 4, ALGORITHM_PARITY_N}, /* raid4 layout = raid5_n */ -+ {"raid4", "raid4 (dedicated first parity disk)", 1, 2, 5, ALGORITHM_PARITY_0}, /* raid4 layout = raid5_0 */ - {"raid5_n", "raid5 (dedicated last parity disk)", 1, 2, 5, ALGORITHM_PARITY_N}, - {"raid5_ls", "raid5 (left symmetric)", 1, 2, 5, ALGORITHM_LEFT_SYMMETRIC}, - {"raid5_rs", "raid5 (right symmetric)", 1, 2, 5, ALGORITHM_RIGHT_SYMMETRIC}, -@@ -2087,11 +2087,11 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev) - /* - * No takeover/reshaping, because we don't have the extended v1.9.0 metadata - */ -- if (le32_to_cpu(sb->level) != mddev->level) { -+ if (le32_to_cpu(sb->level) != mddev->new_level) { - DMERR("Reshaping/takeover raid sets not yet supported. (raid level/stripes/size change)"); - return -EINVAL; - } -- if (le32_to_cpu(sb->layout) != mddev->layout) { -+ if (le32_to_cpu(sb->layout) != mddev->new_layout) { - DMERR("Reshaping raid sets not yet supported. (raid layout change)"); - DMERR(" 0x%X vs 0x%X", le32_to_cpu(sb->layout), mddev->layout); - DMERR(" Old layout: %s w/ %d copies", -@@ -2102,7 +2102,7 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev) - raid10_md_layout_to_copies(mddev->layout)); - return -EINVAL; - } -- if (le32_to_cpu(sb->stripe_sectors) != mddev->chunk_sectors) { -+ if (le32_to_cpu(sb->stripe_sectors) != mddev->new_chunk_sectors) { - DMERR("Reshaping raid sets not yet supported. (stripe sectors change)"); - return -EINVAL; - } -@@ -2115,6 +2115,8 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev) - return -EINVAL; - } - -+ DMINFO("Discovered old metadata format; upgrading to extended metadata format"); -+ - /* Table line is checked vs. authoritative superblock */ - rs_set_new(rs); - } -@@ -2258,7 +2260,8 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev) - if (!mddev->events && super_init_validation(rs, rdev)) - return -EINVAL; - -- if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { -+ if (le32_to_cpu(sb->compat_features) && -+ le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { - rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags"; - return -EINVAL; - } -@@ -3646,7 +3649,7 @@ static void raid_resume(struct dm_target *ti) - - static struct target_type raid_target = { - .name = "raid", -- .version = {1, 9, 0}, -+ .version = {1, 9, 1}, - .module = THIS_MODULE, - .ctr = raid_ctr, - .dtr = raid_dtr, -diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c -index bdf1606..7a6254d 100644 ---- a/drivers/md/dm-raid1.c -+++ b/drivers/md/dm-raid1.c -@@ -1292,6 +1292,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error) - - dm_bio_restore(bd, bio); - bio_record->details.bi_bdev = NULL; -+ bio->bi_error = 0; - - queue_bio(ms, bio, rw); - return DM_ENDIO_INCOMPLETE; -diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c -index 5da86c8..2154596 100644 ---- a/drivers/md/dm-rq.c -+++ b/drivers/md/dm-rq.c -@@ -835,8 +835,11 @@ int dm_old_init_request_queue(struct mapped_device *md) - init_kthread_worker(&md->kworker); - md->kworker_task = kthread_run(kthread_worker_fn, &md->kworker, - "kdmwork-%s", dm_device_name(md)); -- if (IS_ERR(md->kworker_task)) -- return PTR_ERR(md->kworker_task); -+ if (IS_ERR(md->kworker_task)) { -+ int error = PTR_ERR(md->kworker_task); -+ md->kworker_task = NULL; -+ return error; -+ } - - elv_register_queue(md->queue); - -diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c -index 3e407a9..c4b53b3 100644 ---- a/drivers/md/dm-table.c -+++ b/drivers/md/dm-table.c -@@ -695,37 +695,32 @@ int dm_table_add_target(struct dm_table *t, const char *type, - - tgt->type = dm_get_target_type(type); - if (!tgt->type) { -- DMERR("%s: %s: unknown target type", dm_device_name(t->md), -- type); -+ DMERR("%s: %s: unknown target type", dm_device_name(t->md), type); - return -EINVAL; - } - - if (dm_target_needs_singleton(tgt->type)) { - if (t->num_targets) { -- DMERR("%s: target type %s must appear alone in table", -- dm_device_name(t->md), type); -- return -EINVAL; -+ tgt->error = "singleton target type must appear alone in table"; -+ goto bad; - } - t->singleton = true; - } - - if (dm_target_always_writeable(tgt->type) && !(t->mode & FMODE_WRITE)) { -- DMERR("%s: target type %s may not be included in read-only tables", -- dm_device_name(t->md), type); -- return -EINVAL; -+ tgt->error = "target type may not be included in a read-only table"; -+ goto bad; - } - - if (t->immutable_target_type) { - if (t->immutable_target_type != tgt->type) { -- DMERR("%s: immutable target type %s cannot be mixed with other target types", -- dm_device_name(t->md), t->immutable_target_type->name); -- return -EINVAL; -+ tgt->error = "immutable target type cannot be mixed with other target types"; -+ goto bad; - } - } else if (dm_target_is_immutable(tgt->type)) { - if (t->num_targets) { -- DMERR("%s: immutable target type %s cannot be mixed with other target types", -- dm_device_name(t->md), tgt->type->name); -- return -EINVAL; -+ tgt->error = "immutable target type cannot be mixed with other target types"; -+ goto bad; - } - t->immutable_target_type = tgt->type; - } -@@ -740,7 +735,6 @@ int dm_table_add_target(struct dm_table *t, const char *type, - */ - if (!adjoin(t, tgt)) { - tgt->error = "Gap in table"; -- r = -EINVAL; - goto bad; - } - -diff --git a/drivers/md/dm.c b/drivers/md/dm.c -index 0f2928b..eeef575 100644 ---- a/drivers/md/dm.c -+++ b/drivers/md/dm.c -@@ -1423,8 +1423,6 @@ static void cleanup_mapped_device(struct mapped_device *md) - if (md->bs) - bioset_free(md->bs); - -- cleanup_srcu_struct(&md->io_barrier); -- - if (md->disk) { - spin_lock(&_minor_lock); - md->disk->private_data = NULL; -@@ -1436,6 +1434,8 @@ static void cleanup_mapped_device(struct mapped_device *md) - if (md->queue) - blk_cleanup_queue(md->queue); - -+ cleanup_srcu_struct(&md->io_barrier); -+ - if (md->bdev) { - bdput(md->bdev); - md->bdev = NULL; -diff --git a/drivers/md/md.c b/drivers/md/md.c -index 915e84d..db0aa6c 100644 ---- a/drivers/md/md.c -+++ b/drivers/md/md.c -@@ -8120,14 +8120,14 @@ void md_do_sync(struct md_thread *thread) - - if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && - !test_bit(MD_RECOVERY_INTR, &mddev->recovery) && -- mddev->curr_resync > 2) { -+ mddev->curr_resync > 3) { - mddev->curr_resync_completed = mddev->curr_resync; - sysfs_notify(&mddev->kobj, NULL, "sync_completed"); - } - mddev->pers->sync_request(mddev, max_sectors, &skipped); - - if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) && -- mddev->curr_resync > 2) { -+ mddev->curr_resync > 3) { - if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { - if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { - if (mddev->curr_resync >= mddev->recovery_cp) { -diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index 21dc00e..95bf4cd 100644 ---- a/drivers/md/raid1.c -+++ b/drivers/md/raid1.c -@@ -407,11 +407,14 @@ static void raid1_end_write_request(struct bio *bio) - struct bio *to_put = NULL; - int mirror = find_bio_disk(r1_bio, bio); - struct md_rdev *rdev = conf->mirrors[mirror].rdev; -+ bool discard_error; -+ -+ discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD; - - /* - * 'one mirror IO has finished' event handler: - */ -- if (bio->bi_error) { -+ if (bio->bi_error && !discard_error) { - set_bit(WriteErrorSeen, &rdev->flags); - if (!test_and_set_bit(WantReplacement, &rdev->flags)) - set_bit(MD_RECOVERY_NEEDED, & -@@ -448,7 +451,7 @@ static void raid1_end_write_request(struct bio *bio) - - /* Maybe we can clear some bad blocks. */ - if (is_badblock(rdev, r1_bio->sector, r1_bio->sectors, -- &first_bad, &bad_sectors)) { -+ &first_bad, &bad_sectors) && !discard_error) { - r1_bio->bios[mirror] = IO_MADE_GOOD; - set_bit(R1BIO_MadeGood, &r1_bio->state); - } -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index be1a9fc..39fddda 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -447,6 +447,9 @@ static void raid10_end_write_request(struct bio *bio) - struct r10conf *conf = r10_bio->mddev->private; - int slot, repl; - struct md_rdev *rdev = NULL; -+ bool discard_error; -+ -+ discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD; - - dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl); - -@@ -460,7 +463,7 @@ static void raid10_end_write_request(struct bio *bio) - /* - * this branch is our 'one mirror IO has finished' event handler: - */ -- if (bio->bi_error) { -+ if (bio->bi_error && !discard_error) { - if (repl) - /* Never record new bad blocks to replacement, - * just fail it. -@@ -503,7 +506,7 @@ static void raid10_end_write_request(struct bio *bio) - if (is_badblock(rdev, - r10_bio->devs[slot].addr, - r10_bio->sectors, -- &first_bad, &bad_sectors)) { -+ &first_bad, &bad_sectors) && !discard_error) { - bio_put(bio); - if (repl) - r10_bio->devs[slot].repl_bio = IO_MADE_GOOD; -diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c -index 9fb4fc2..ed9759e 100644 ---- a/drivers/media/platform/vsp1/vsp1_video.c -+++ b/drivers/media/platform/vsp1/vsp1_video.c -@@ -675,6 +675,13 @@ static void vsp1_video_stop_streaming(struct vb2_queue *vq) - unsigned long flags; - int ret; - -+ /* Clear the buffers ready flag to make sure the device won't be started -+ * by a QBUF on the video node on the other side of the pipeline. -+ */ -+ spin_lock_irqsave(&video->irqlock, flags); -+ pipe->buffers_ready &= ~(1 << video->pipe_index); -+ spin_unlock_irqrestore(&video->irqlock, flags); -+ - mutex_lock(&pipe->lock); - if (--pipe->stream_count == pipe->num_inputs) { - /* Stop the pipeline. */ -diff --git a/drivers/misc/cxl/api.c b/drivers/misc/cxl/api.c -index af23d7d..2e5233b 100644 ---- a/drivers/misc/cxl/api.c -+++ b/drivers/misc/cxl/api.c -@@ -247,7 +247,9 @@ int cxl_start_context(struct cxl_context *ctx, u64 wed, - cxl_ctx_get(); - - if ((rc = cxl_ops->attach_process(ctx, kernel, wed, 0))) { -+ put_pid(ctx->glpid); - put_pid(ctx->pid); -+ ctx->glpid = ctx->pid = NULL; - cxl_adapter_context_put(ctx->afu->adapter); - cxl_ctx_put(); - goto out; -diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c -index d0b421f..77080cc 100644 ---- a/drivers/misc/cxl/file.c -+++ b/drivers/misc/cxl/file.c -@@ -194,6 +194,16 @@ static long afu_ioctl_start_work(struct cxl_context *ctx, - ctx->mmio_err_ff = !!(work.flags & CXL_START_WORK_ERR_FF); - - /* -+ * Increment the mapped context count for adapter. This also checks -+ * if adapter_context_lock is taken. -+ */ -+ rc = cxl_adapter_context_get(ctx->afu->adapter); -+ if (rc) { -+ afu_release_irqs(ctx, ctx); -+ goto out; -+ } -+ -+ /* - * We grab the PID here and not in the file open to allow for the case - * where a process (master, some daemon, etc) has opened the chardev on - * behalf of another process, so the AFU's mm gets bound to the process -@@ -205,15 +215,6 @@ static long afu_ioctl_start_work(struct cxl_context *ctx, - ctx->pid = get_task_pid(current, PIDTYPE_PID); - ctx->glpid = get_task_pid(current->group_leader, PIDTYPE_PID); - -- /* -- * Increment the mapped context count for adapter. This also checks -- * if adapter_context_lock is taken. -- */ -- rc = cxl_adapter_context_get(ctx->afu->adapter); -- if (rc) { -- afu_release_irqs(ctx, ctx); -- goto out; -- } - - trace_cxl_attach(ctx, work.work_element_descriptor, work.num_interrupts, amr); - -@@ -221,6 +222,9 @@ static long afu_ioctl_start_work(struct cxl_context *ctx, - amr))) { - afu_release_irqs(ctx, ctx); - cxl_adapter_context_put(ctx->afu->adapter); -+ put_pid(ctx->glpid); -+ put_pid(ctx->pid); -+ ctx->glpid = ctx->pid = NULL; - goto out; - } - -diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c -index 222367c..524660510 100644 ---- a/drivers/misc/genwqe/card_utils.c -+++ b/drivers/misc/genwqe/card_utils.c -@@ -352,17 +352,27 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, - if (copy_from_user(sgl->lpage, user_addr + user_size - - sgl->lpage_size, sgl->lpage_size)) { - rc = -EFAULT; -- goto err_out1; -+ goto err_out2; - } - } - return 0; - -+ err_out2: -+ __genwqe_free_consistent(cd, PAGE_SIZE, sgl->lpage, -+ sgl->lpage_dma_addr); -+ sgl->lpage = NULL; -+ sgl->lpage_dma_addr = 0; - err_out1: - __genwqe_free_consistent(cd, PAGE_SIZE, sgl->fpage, - sgl->fpage_dma_addr); -+ sgl->fpage = NULL; -+ sgl->fpage_dma_addr = 0; - err_out: - __genwqe_free_consistent(cd, sgl->sgl_size, sgl->sgl, - sgl->sgl_dma_addr); -+ sgl->sgl = NULL; -+ sgl->sgl_dma_addr = 0; -+ sgl->sgl_size = 0; - return -ENOMEM; - } - -diff --git a/drivers/misc/mei/hw-txe.c b/drivers/misc/mei/hw-txe.c -index 4a6c1b8..2d23cdf 100644 ---- a/drivers/misc/mei/hw-txe.c -+++ b/drivers/misc/mei/hw-txe.c -@@ -978,11 +978,13 @@ static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack) - hisr = mei_txe_br_reg_read(hw, HISR_REG); - - aliveness = mei_txe_aliveness_get(dev); -- if (hhisr & IPC_HHIER_SEC && aliveness) -+ if (hhisr & IPC_HHIER_SEC && aliveness) { - ipc_isr = mei_txe_sec_reg_read_silent(hw, - SEC_IPC_HOST_INT_STATUS_REG); -- else -+ } else { - ipc_isr = 0; -+ hhisr &= ~IPC_HHIER_SEC; -+ } - - generated = generated || - (hisr & HISR_INT_STS_MSK) || -diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c -index c0bb0c7..dbbc430 100644 ---- a/drivers/mmc/host/dw_mmc-pltfm.c -+++ b/drivers/mmc/host/dw_mmc-pltfm.c -@@ -46,12 +46,13 @@ int dw_mci_pltfm_register(struct platform_device *pdev, - host->pdata = pdev->dev.platform_data; - - regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- /* Get registers' physical base address */ -- host->phy_regs = regs->start; - host->regs = devm_ioremap_resource(&pdev->dev, regs); - if (IS_ERR(host->regs)) - return PTR_ERR(host->regs); - -+ /* Get registers' physical base address */ -+ host->phy_regs = regs->start; -+ - platform_set_drvdata(pdev, host); - return dw_mci_probe(host); - } -diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c -index 48eb55f..a01a70a 100644 ---- a/drivers/mtd/ubi/fastmap.c -+++ b/drivers/mtd/ubi/fastmap.c -@@ -515,10 +515,11 @@ static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai, - unsigned long long ec = be64_to_cpu(ech->ec); - unmap_peb(ai, pnum); - dbg_bld("Adding PEB to free: %i", pnum); -+ - if (err == UBI_IO_FF_BITFLIPS) -- add_aeb(ai, free, pnum, ec, 1); -- else -- add_aeb(ai, free, pnum, ec, 0); -+ scrub = 1; -+ -+ add_aeb(ai, free, pnum, ec, scrub); - continue; - } else if (err == 0 || err == UBI_IO_BITFLIPS) { - dbg_bld("Found non empty PEB:%i in pool", pnum); -@@ -750,11 +751,11 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, - fmvhdr->vol_type, - be32_to_cpu(fmvhdr->last_eb_bytes)); - -- if (!av) -- goto fail_bad; -- if (PTR_ERR(av) == -EINVAL) { -- ubi_err(ubi, "volume (ID %i) already exists", -- fmvhdr->vol_id); -+ if (IS_ERR(av)) { -+ if (PTR_ERR(av) == -EEXIST) -+ ubi_err(ubi, "volume (ID %i) already exists", -+ fmvhdr->vol_id); -+ - goto fail_bad; - } - -diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h -index 30ae5bf..76ad825 100644 ---- a/drivers/net/wireless/ath/ath10k/core.h -+++ b/drivers/net/wireless/ath/ath10k/core.h -@@ -445,6 +445,7 @@ struct ath10k_debug { - u32 pktlog_filter; - u32 reg_addr; - u32 nf_cal_period; -+ void *cal_data; - - struct ath10k_fw_crash_data *fw_crash_data; - }; -diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c -index 8f0fd41..8c6a5dd 100644 ---- a/drivers/net/wireless/ath/ath10k/debug.c -+++ b/drivers/net/wireless/ath/ath10k/debug.c -@@ -30,6 +30,8 @@ - /* ms */ - #define ATH10K_DEBUG_HTT_STATS_INTERVAL 1000 - -+#define ATH10K_DEBUG_CAL_DATA_LEN 12064 -+ - #define ATH10K_FW_CRASH_DUMP_VERSION 1 - - /** -@@ -1450,56 +1452,51 @@ static const struct file_operations fops_fw_dbglog = { - .llseek = default_llseek, - }; - --static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file) -+static int ath10k_debug_cal_data_fetch(struct ath10k *ar) - { -- struct ath10k *ar = inode->i_private; -- void *buf; - u32 hi_addr; - __le32 addr; - int ret; - -- mutex_lock(&ar->conf_mutex); -- -- if (ar->state != ATH10K_STATE_ON && -- ar->state != ATH10K_STATE_UTF) { -- ret = -ENETDOWN; -- goto err; -- } -+ lockdep_assert_held(&ar->conf_mutex); - -- buf = vmalloc(ar->hw_params.cal_data_len); -- if (!buf) { -- ret = -ENOMEM; -- goto err; -- } -+ if (WARN_ON(ar->hw_params.cal_data_len > ATH10K_DEBUG_CAL_DATA_LEN)) -+ return -EINVAL; - - hi_addr = host_interest_item_address(HI_ITEM(hi_board_data)); - - ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr)); - if (ret) { -- ath10k_warn(ar, "failed to read hi_board_data address: %d\n", ret); -- goto err_vfree; -+ ath10k_warn(ar, "failed to read hi_board_data address: %d\n", -+ ret); -+ return ret; - } - -- ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), buf, -+ ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), ar->debug.cal_data, - ar->hw_params.cal_data_len); - if (ret) { - ath10k_warn(ar, "failed to read calibration data: %d\n", ret); -- goto err_vfree; -+ return ret; - } - -- file->private_data = buf; -+ return 0; -+} - -- mutex_unlock(&ar->conf_mutex); -+static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file) -+{ -+ struct ath10k *ar = inode->i_private; - -- return 0; -+ mutex_lock(&ar->conf_mutex); - --err_vfree: -- vfree(buf); -+ if (ar->state == ATH10K_STATE_ON || -+ ar->state == ATH10K_STATE_UTF) { -+ ath10k_debug_cal_data_fetch(ar); -+ } - --err: -+ file->private_data = ar; - mutex_unlock(&ar->conf_mutex); - -- return ret; -+ return 0; - } - - static ssize_t ath10k_debug_cal_data_read(struct file *file, -@@ -1507,18 +1504,16 @@ static ssize_t ath10k_debug_cal_data_read(struct file *file, - size_t count, loff_t *ppos) - { - struct ath10k *ar = file->private_data; -- void *buf = file->private_data; - -- return simple_read_from_buffer(user_buf, count, ppos, -- buf, ar->hw_params.cal_data_len); --} -+ mutex_lock(&ar->conf_mutex); - --static int ath10k_debug_cal_data_release(struct inode *inode, -- struct file *file) --{ -- vfree(file->private_data); -+ count = simple_read_from_buffer(user_buf, count, ppos, -+ ar->debug.cal_data, -+ ar->hw_params.cal_data_len); - -- return 0; -+ mutex_unlock(&ar->conf_mutex); -+ -+ return count; - } - - static ssize_t ath10k_write_ani_enable(struct file *file, -@@ -1579,7 +1574,6 @@ static const struct file_operations fops_ani_enable = { - static const struct file_operations fops_cal_data = { - .open = ath10k_debug_cal_data_open, - .read = ath10k_debug_cal_data_read, -- .release = ath10k_debug_cal_data_release, - .owner = THIS_MODULE, - .llseek = default_llseek, - }; -@@ -1931,6 +1925,8 @@ void ath10k_debug_stop(struct ath10k *ar) - { - lockdep_assert_held(&ar->conf_mutex); - -+ ath10k_debug_cal_data_fetch(ar); -+ - /* Must not use _sync to avoid deadlock, we do that in - * ath10k_debug_destroy(). The check for htt_stats_mask is to avoid - * warning from del_timer(). */ -@@ -2343,6 +2339,10 @@ int ath10k_debug_create(struct ath10k *ar) - if (!ar->debug.fw_crash_data) - return -ENOMEM; - -+ ar->debug.cal_data = vzalloc(ATH10K_DEBUG_CAL_DATA_LEN); -+ if (!ar->debug.cal_data) -+ return -ENOMEM; -+ - INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs); - INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs); - INIT_LIST_HEAD(&ar->debug.fw_stats.peers); -@@ -2356,6 +2356,9 @@ void ath10k_debug_destroy(struct ath10k *ar) - vfree(ar->debug.fw_crash_data); - ar->debug.fw_crash_data = NULL; - -+ vfree(ar->debug.cal_data); -+ ar->debug.cal_data = NULL; -+ - ath10k_debug_fw_stats_reset(ar); - - kfree(ar->debug.tpc_stats); -diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c -index b6f064a..7e27a06 100644 ---- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c -@@ -33,7 +33,6 @@ struct coeff { - - enum ar9003_cal_types { - IQ_MISMATCH_CAL = BIT(0), -- TEMP_COMP_CAL = BIT(1), - }; - - static void ar9003_hw_setup_calibration(struct ath_hw *ah, -@@ -59,12 +58,6 @@ static void ar9003_hw_setup_calibration(struct ath_hw *ah, - /* Kick-off cal */ - REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL); - break; -- case TEMP_COMP_CAL: -- ath_dbg(common, CALIBRATE, -- "starting Temperature Compensation Calibration\n"); -- REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_LOCAL); -- REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_START); -- break; - default: - ath_err(common, "Invalid calibration type\n"); - break; -@@ -93,8 +86,7 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah, - /* - * Accumulate cal measures for active chains - */ -- if (cur_caldata->calCollect) -- cur_caldata->calCollect(ah); -+ cur_caldata->calCollect(ah); - ah->cal_samples++; - - if (ah->cal_samples >= cur_caldata->calNumSamples) { -@@ -107,8 +99,7 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah, - /* - * Process accumulated data - */ -- if (cur_caldata->calPostProc) -- cur_caldata->calPostProc(ah, numChains); -+ cur_caldata->calPostProc(ah, numChains); - - /* Calibration has finished. */ - caldata->CalValid |= cur_caldata->calType; -@@ -323,16 +314,9 @@ static const struct ath9k_percal_data iq_cal_single_sample = { - ar9003_hw_iqcalibrate - }; - --static const struct ath9k_percal_data temp_cal_single_sample = { -- TEMP_COMP_CAL, -- MIN_CAL_SAMPLES, -- PER_MAX_LOG_COUNT, --}; -- - static void ar9003_hw_init_cal_settings(struct ath_hw *ah) - { - ah->iq_caldata.calData = &iq_cal_single_sample; -- ah->temp_caldata.calData = &temp_cal_single_sample; - - if (AR_SREV_9300_20_OR_LATER(ah)) { - ah->enabled_cals |= TX_IQ_CAL; -@@ -340,7 +324,7 @@ static void ar9003_hw_init_cal_settings(struct ath_hw *ah) - ah->enabled_cals |= TX_IQ_ON_AGC_CAL; - } - -- ah->supp_cals = IQ_MISMATCH_CAL | TEMP_COMP_CAL; -+ ah->supp_cals = IQ_MISMATCH_CAL; - } - - #define OFF_UPPER_LT 24 -@@ -1399,9 +1383,6 @@ static void ar9003_hw_init_cal_common(struct ath_hw *ah) - INIT_CAL(&ah->iq_caldata); - INSERT_CAL(ah, &ah->iq_caldata); - -- INIT_CAL(&ah->temp_caldata); -- INSERT_CAL(ah, &ah->temp_caldata); -- - /* Initialize current pointer to first element in list */ - ah->cal_list_curr = ah->cal_list; - -diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h -index 2a5d3ad..9cbca12 100644 ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -830,7 +830,6 @@ struct ath_hw { - /* Calibration */ - u32 supp_cals; - struct ath9k_cal_list iq_caldata; -- struct ath9k_cal_list temp_caldata; - struct ath9k_cal_list adcgain_caldata; - struct ath9k_cal_list adcdc_caldata; - struct ath9k_cal_list *cal_list; -diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h -index 4341d56..a280932 100644 ---- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h -+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h -@@ -231,7 +231,7 @@ struct rtl8xxxu_rxdesc16 { - u32 pattern1match:1; - u32 pattern0match:1; - #endif -- __le32 tsfl; -+ u32 tsfl; - #if 0 - u32 bassn:12; - u32 bavld:1; -@@ -361,7 +361,7 @@ struct rtl8xxxu_rxdesc24 { - u32 ldcp:1; - u32 splcp:1; - #endif -- __le32 tsfl; -+ u32 tsfl; - }; - - struct rtl8xxxu_txdesc32 { -diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c -index 9d45afb..c831a586 100644 ---- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c -+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c -@@ -1498,6 +1498,10 @@ static void rtl8723b_enable_rf(struct rtl8xxxu_priv *priv) - u32 val32; - u8 val8; - -+ val32 = rtl8xxxu_read32(priv, REG_RX_WAIT_CCA); -+ val32 |= (BIT(22) | BIT(23)); -+ rtl8xxxu_write32(priv, REG_RX_WAIT_CCA, val32); -+ - /* - * No indication anywhere as to what 0x0790 does. The 2 antenna - * vendor code preserves bits 6-7 here. -diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c -index 77048db..c6b246a 100644 ---- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c -+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c -@@ -5201,7 +5201,12 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb) - pkt_offset = roundup(pkt_len + drvinfo_sz + desc_shift + - sizeof(struct rtl8xxxu_rxdesc16), 128); - -- if (pkt_cnt > 1) -+ /* -+ * Only clone the skb if there's enough data at the end to -+ * at least cover the rx descriptor -+ */ -+ if (pkt_cnt > 1 && -+ urb_len > (pkt_offset + sizeof(struct rtl8xxxu_rxdesc16))) - next_skb = skb_clone(skb, GFP_ATOMIC); - - rx_status = IEEE80211_SKB_RXCB(skb); -@@ -5219,7 +5224,7 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb) - rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats, - rx_desc->rxmcs); - -- rx_status->mactime = le32_to_cpu(rx_desc->tsfl); -+ rx_status->mactime = rx_desc->tsfl; - rx_status->flag |= RX_FLAG_MACTIME_START; - - if (!rx_desc->swdec) -@@ -5289,7 +5294,7 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb) - rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats, - rx_desc->rxmcs); - -- rx_status->mactime = le32_to_cpu(rx_desc->tsfl); -+ rx_status->mactime = rx_desc->tsfl; - rx_status->flag |= RX_FLAG_MACTIME_START; - - if (!rx_desc->swdec) -diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c -index 0dbd29e..172ef82 100644 ---- a/drivers/pwm/core.c -+++ b/drivers/pwm/core.c -@@ -339,6 +339,8 @@ int pwmchip_remove(struct pwm_chip *chip) - unsigned int i; - int ret = 0; - -+ pwmchip_sysfs_unexport_children(chip); -+ - mutex_lock(&pwm_lock); - - for (i = 0; i < chip->npwm; i++) { -diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c -index 18ed725..0296d81 100644 ---- a/drivers/pwm/sysfs.c -+++ b/drivers/pwm/sysfs.c -@@ -409,6 +409,24 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip) - } - } - -+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) -+{ -+ struct device *parent; -+ unsigned int i; -+ -+ parent = class_find_device(&pwm_class, NULL, chip, -+ pwmchip_sysfs_match); -+ if (!parent) -+ return; -+ -+ for (i = 0; i < chip->npwm; i++) { -+ struct pwm_device *pwm = &chip->pwms[i]; -+ -+ if (test_bit(PWMF_EXPORTED, &pwm->flags)) -+ pwm_unexport_child(parent, pwm); -+ } -+} -+ - static int __init pwm_sysfs_init(void) - { - return class_register(&pwm_class); -diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c -index 3d53d63..f0cfb04 100644 ---- a/drivers/scsi/arcmsr/arcmsr_hba.c -+++ b/drivers/scsi/arcmsr/arcmsr_hba.c -@@ -2636,18 +2636,9 @@ static int arcmsr_queue_command_lck(struct scsi_cmnd *cmd, - struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; - struct CommandControlBlock *ccb; - int target = cmd->device->id; -- int lun = cmd->device->lun; -- uint8_t scsicmd = cmd->cmnd[0]; - cmd->scsi_done = done; - cmd->host_scribble = NULL; - cmd->result = 0; -- if ((scsicmd == SYNCHRONIZE_CACHE) ||(scsicmd == SEND_DIAGNOSTIC)){ -- if(acb->devstate[target][lun] == ARECA_RAID_GONE) { -- cmd->result = (DID_NO_CONNECT << 16); -- } -- cmd->scsi_done(cmd); -- return 0; -- } - if (target == 16) { - /* virtual device for iop message transfer */ - arcmsr_handle_virtual_command(acb, cmd); -diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c -index 6a219a0..05e892a 100644 ---- a/drivers/scsi/scsi_debug.c -+++ b/drivers/scsi/scsi_debug.c -@@ -5134,6 +5134,7 @@ static void __exit scsi_debug_exit(void) - bus_unregister(&pseudo_lld_bus); - root_device_unregister(pseudo_primary); - -+ vfree(map_storep); - vfree(dif_storep); - vfree(fake_storep); - kfree(sdebug_q_arr); -diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c -index 8d85a3c..3f35613 100644 ---- a/drivers/spi/spi-fsl-espi.c -+++ b/drivers/spi/spi-fsl-espi.c -@@ -581,7 +581,7 @@ void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) - - mspi->len -= rx_nr_bytes; - -- if (mspi->rx) -+ if (rx_nr_bytes && mspi->rx) - mspi->get_rx(rx_data, mspi); - } - -diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index 200ca22..935f1a5 100644 ---- a/drivers/spi/spi.c -+++ b/drivers/spi/spi.c -@@ -1607,9 +1607,11 @@ static void of_register_spi_devices(struct spi_master *master) - if (of_node_test_and_set_flag(nc, OF_POPULATED)) - continue; - spi = of_register_spi_device(master, nc); -- if (IS_ERR(spi)) -+ if (IS_ERR(spi)) { - dev_warn(&master->dev, "Failed to create SPI device for %s\n", - nc->full_name); -+ of_node_clear_flag(nc, OF_POPULATED); -+ } - } - } - #else -@@ -3120,6 +3122,7 @@ static int of_spi_notify(struct notifier_block *nb, unsigned long action, - if (IS_ERR(spi)) { - pr_err("%s: failed to create for '%s'\n", - __func__, rd->dn->full_name); -+ of_node_clear_flag(rd->dn, OF_POPULATED); - return notifier_from_errno(PTR_ERR(spi)); - } - break; -diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c -index 78f524f..f4dbcb1 100644 ---- a/drivers/staging/wilc1000/host_interface.c -+++ b/drivers/staging/wilc1000/host_interface.c -@@ -3391,7 +3391,6 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler) - - clients_count++; - -- destroy_workqueue(hif_workqueue); - _fail_: - return result; - } -diff --git a/drivers/thermal/intel_powerclamp.c b/drivers/thermal/intel_powerclamp.c -index 0e4dc0a..7a22307 100644 ---- a/drivers/thermal/intel_powerclamp.c -+++ b/drivers/thermal/intel_powerclamp.c -@@ -669,20 +669,10 @@ static struct thermal_cooling_device_ops powerclamp_cooling_ops = { - .set_cur_state = powerclamp_set_cur_state, - }; - --static const struct x86_cpu_id intel_powerclamp_ids[] __initconst = { -- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_MWAIT }, -- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_ARAT }, -- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_NONSTOP_TSC }, -- { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_CONSTANT_TSC}, -- {} --}; --MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids); -- - static int __init powerclamp_probe(void) - { -- if (!x86_match_cpu(intel_powerclamp_ids)) { -- pr_err("Intel powerclamp does not run on family %d model %d\n", -- boot_cpu_data.x86, boot_cpu_data.x86_model); -+ if (!boot_cpu_has(X86_FEATURE_MWAIT)) { -+ pr_err("CPU does not support MWAIT"); - return -ENODEV; - } - -diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c -index 2705ca9..fd375f1 100644 ---- a/drivers/tty/vt/vt.c -+++ b/drivers/tty/vt/vt.c -@@ -870,10 +870,15 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, - if (new_cols == vc->vc_cols && new_rows == vc->vc_rows) - return 0; - -+ if (new_screen_size > (4 << 20)) -+ return -EINVAL; - newscreen = kmalloc(new_screen_size, GFP_USER); - if (!newscreen) - return -ENOMEM; - -+ if (vc == sel_cons) -+ clear_selection(); -+ - old_rows = vc->vc_rows; - old_row_size = vc->vc_size_row; - -@@ -1176,7 +1181,7 @@ static void csi_J(struct vc_data *vc, int vpar) - break; - case 3: /* erase scroll-back buffer (and whole display) */ - scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char, -- vc->vc_screenbuf_size >> 1); -+ vc->vc_screenbuf_size); - set_origin(vc); - if (con_is_visible(vc)) - update_screen(vc); -diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c -index 053bac9..887be34 100644 ---- a/drivers/usb/chipidea/host.c -+++ b/drivers/usb/chipidea/host.c -@@ -185,6 +185,8 @@ static void host_stop(struct ci_hdrc *ci) - - if (hcd) { - usb_remove_hcd(hcd); -+ ci->role = CI_ROLE_END; -+ synchronize_irq(ci->irq); - usb_put_hcd(hcd); - if (ci->platdata->reg_vbus && !ci_otg_is_fsm_mode(ci) && - (ci->platdata->flags & CI_HDRC_TURN_VBUS_EARLY_ON)) -diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c -index 6854461..6443cfb 100644 ---- a/drivers/usb/dwc3/gadget.c -+++ b/drivers/usb/dwc3/gadget.c -@@ -3055,7 +3055,7 @@ int dwc3_gadget_init(struct dwc3 *dwc) - kfree(dwc->setup_buf); - - err2: -- dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb), -+ dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2, - dwc->ep0_trb, dwc->ep0_trb_addr); - - err1: -@@ -3080,7 +3080,7 @@ void dwc3_gadget_exit(struct dwc3 *dwc) - kfree(dwc->setup_buf); - kfree(dwc->zlp_buf); - -- dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb), -+ dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2, - dwc->ep0_trb, dwc->ep0_trb_addr); - - dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req), -diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c -index 5f562c1..9b9e71f 100644 ---- a/drivers/usb/gadget/function/u_ether.c -+++ b/drivers/usb/gadget/function/u_ether.c -@@ -587,8 +587,9 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, - - /* throttle high/super speed IRQ rate back slightly */ - if (gadget_is_dualspeed(dev->gadget)) -- req->no_interrupt = (dev->gadget->speed == USB_SPEED_HIGH || -- dev->gadget->speed == USB_SPEED_SUPER) -+ req->no_interrupt = (((dev->gadget->speed == USB_SPEED_HIGH || -+ dev->gadget->speed == USB_SPEED_SUPER)) && -+ !list_empty(&dev->tx_reqs)) - ? ((atomic_read(&dev->tx_qlen) % dev->qmult) != 0) - : 0; - -diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c -index bb1f6c8..45bc997 100644 ---- a/drivers/usb/gadget/udc/atmel_usba_udc.c -+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c -@@ -1978,7 +1978,7 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev, - dev_err(&pdev->dev, "of_probe: name error(%d)\n", ret); - goto err; - } -- ep->ep.name = name; -+ ep->ep.name = kasprintf(GFP_KERNEL, "ep%d", ep->index); - - ep->ep_regs = udc->regs + USBA_EPT_BASE(i); - ep->dma_regs = udc->regs + USBA_DMA_BASE(i); -diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c -index 1700908..86612ac 100644 ---- a/drivers/usb/host/ohci-hcd.c -+++ b/drivers/usb/host/ohci-hcd.c -@@ -72,7 +72,7 @@ - static const char hcd_name [] = "ohci_hcd"; - - #define STATECHANGE_DELAY msecs_to_jiffies(300) --#define IO_WATCHDOG_DELAY msecs_to_jiffies(250) -+#define IO_WATCHDOG_DELAY msecs_to_jiffies(275) - - #include "ohci.h" - #include "pci-quirks.h" -diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c -index 730b9fd..0ef1690 100644 ---- a/drivers/usb/host/xhci-hub.c -+++ b/drivers/usb/host/xhci-hub.c -@@ -1166,7 +1166,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, - xhci_set_link_state(xhci, port_array, wIndex, - XDEV_RESUME); - spin_unlock_irqrestore(&xhci->lock, flags); -- msleep(20); -+ msleep(USB_RESUME_TIMEOUT); - spin_lock_irqsave(&xhci->lock, flags); - xhci_set_link_state(xhci, port_array, wIndex, - XDEV_U0); -@@ -1355,6 +1355,35 @@ int xhci_bus_suspend(struct usb_hcd *hcd) - return 0; - } - -+/* -+ * Workaround for missing Cold Attach Status (CAS) if device re-plugged in S3. -+ * warm reset a USB3 device stuck in polling or compliance mode after resume. -+ * See Intel 100/c230 series PCH specification update Doc #332692-006 Errata #8 -+ */ -+static bool xhci_port_missing_cas_quirk(int port_index, -+ __le32 __iomem **port_array) -+{ -+ u32 portsc; -+ -+ portsc = readl(port_array[port_index]); -+ -+ /* if any of these are set we are not stuck */ -+ if (portsc & (PORT_CONNECT | PORT_CAS)) -+ return false; -+ -+ if (((portsc & PORT_PLS_MASK) != XDEV_POLLING) && -+ ((portsc & PORT_PLS_MASK) != XDEV_COMP_MODE)) -+ return false; -+ -+ /* clear wakeup/change bits, and do a warm port reset */ -+ portsc &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS); -+ portsc |= PORT_WR; -+ writel(portsc, port_array[port_index]); -+ /* flush write */ -+ readl(port_array[port_index]); -+ return true; -+} -+ - int xhci_bus_resume(struct usb_hcd *hcd) - { - struct xhci_hcd *xhci = hcd_to_xhci(hcd); -@@ -1392,6 +1421,14 @@ int xhci_bus_resume(struct usb_hcd *hcd) - u32 temp; - - temp = readl(port_array[port_index]); -+ -+ /* warm reset CAS limited ports stuck in polling/compliance */ -+ if ((xhci->quirks & XHCI_MISSING_CAS) && -+ (hcd->speed >= HCD_USB3) && -+ xhci_port_missing_cas_quirk(port_index, port_array)) { -+ xhci_dbg(xhci, "reset stuck port %d\n", port_index); -+ continue; -+ } - if (DEV_SUPERSPEED_ANY(temp)) - temp &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS); - else -@@ -1410,7 +1447,7 @@ int xhci_bus_resume(struct usb_hcd *hcd) - - if (need_usb2_u3_exit) { - spin_unlock_irqrestore(&xhci->lock, flags); -- msleep(20); -+ msleep(USB_RESUME_TIMEOUT); - spin_lock_irqsave(&xhci->lock, flags); - } - -diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index d7b0f97..e96ae80 100644 ---- a/drivers/usb/host/xhci-pci.c -+++ b/drivers/usb/host/xhci-pci.c -@@ -45,11 +45,13 @@ - - #define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 - #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 -+#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI 0x9cb1 - #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI 0x22b5 - #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI 0xa12f - #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI 0x9d2f - #define PCI_DEVICE_ID_INTEL_BROXTON_M_XHCI 0x0aa8 - #define PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI 0x1aa8 -+#define PCI_DEVICE_ID_INTEL_APL_XHCI 0x5aa8 - - static const char hcd_name[] = "xhci_hcd"; - -@@ -153,7 +155,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) - xhci->quirks |= XHCI_SPURIOUS_REBOOT; - } - if (pdev->vendor == PCI_VENDOR_ID_INTEL && -- pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { -+ (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI || -+ pdev->device == PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI)) { - xhci->quirks |= XHCI_SPURIOUS_REBOOT; - xhci->quirks |= XHCI_SPURIOUS_WAKEUP; - } -@@ -169,6 +172,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) - pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI) { - xhci->quirks |= XHCI_SSIC_PORT_UNUSED; - } -+ if (pdev->vendor == PCI_VENDOR_ID_INTEL && -+ (pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI || -+ pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI)) -+ xhci->quirks |= XHCI_MISSING_CAS; -+ - if (pdev->vendor == PCI_VENDOR_ID_ETRON && - pdev->device == PCI_DEVICE_ID_EJ168) { - xhci->quirks |= XHCI_RESET_ON_RESUME; -diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h -index b2c1dc5..f945380 100644 ---- a/drivers/usb/host/xhci.h -+++ b/drivers/usb/host/xhci.h -@@ -314,6 +314,8 @@ struct xhci_op_regs { - #define XDEV_U2 (0x2 << 5) - #define XDEV_U3 (0x3 << 5) - #define XDEV_INACTIVE (0x6 << 5) -+#define XDEV_POLLING (0x7 << 5) -+#define XDEV_COMP_MODE (0xa << 5) - #define XDEV_RESUME (0xf << 5) - /* true: port has power (see HCC_PPC) */ - #define PORT_POWER (1 << 9) -@@ -1653,6 +1655,7 @@ struct xhci_hcd { - #define XHCI_MTK_HOST (1 << 21) - #define XHCI_SSIC_PORT_UNUSED (1 << 22) - #define XHCI_NO_64BIT_SUPPORT (1 << 23) -+#define XHCI_MISSING_CAS (1 << 24) - unsigned int num_active_eps; - unsigned int limit_active_eps; - /* There are two roothubs to keep track of bus suspend info for */ -diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c -index 0b4cec9..dae92de 100644 ---- a/drivers/usb/musb/omap2430.c -+++ b/drivers/usb/musb/omap2430.c -@@ -337,6 +337,7 @@ static int omap2430_musb_init(struct musb *musb) - } - musb->isr = omap2430_musb_interrupt; - phy_init(musb->phy); -+ phy_power_on(musb->phy); - - l = musb_readl(musb->mregs, OTG_INTERFSEL); - -@@ -373,8 +374,6 @@ static void omap2430_musb_enable(struct musb *musb) - struct musb_hdrc_platform_data *pdata = dev_get_platdata(dev); - struct omap_musb_board_data *data = pdata->board_data; - -- if (!WARN_ON(!musb->phy)) -- phy_power_on(musb->phy); - - omap2430_set_power(musb, true, glue->cable_connected); - -@@ -413,9 +412,6 @@ static void omap2430_musb_disable(struct musb *musb) - struct device *dev = musb->controller; - struct omap2430_glue *glue = dev_get_drvdata(dev->parent); - -- if (!WARN_ON(!musb->phy)) -- phy_power_off(musb->phy); -- - if (glue->status != MUSB_UNKNOWN) - omap_control_usb_set_mode(glue->control_otghs, - USB_MODE_DISCONNECT); -@@ -429,6 +425,7 @@ static int omap2430_musb_exit(struct musb *musb) - struct omap2430_glue *glue = dev_get_drvdata(dev->parent); - - omap2430_low_level_exit(musb); -+ phy_power_off(musb->phy); - phy_exit(musb->phy); - musb->phy = NULL; - cancel_work_sync(&glue->omap_musb_mailbox_work); -diff --git a/drivers/usb/renesas_usbhs/rcar3.c b/drivers/usb/renesas_usbhs/rcar3.c -index 1d70add..d544b33 100644 ---- a/drivers/usb/renesas_usbhs/rcar3.c -+++ b/drivers/usb/renesas_usbhs/rcar3.c -@@ -9,6 +9,7 @@ - * - */ - -+#include <linux/delay.h> - #include <linux/io.h> - #include "common.h" - #include "rcar3.h" -@@ -35,10 +36,13 @@ static int usbhs_rcar3_power_ctrl(struct platform_device *pdev, - - usbhs_write32(priv, UGCTRL2, UGCTRL2_RESERVED_3 | UGCTRL2_USB0SEL_OTG); - -- if (enable) -+ if (enable) { - usbhs_bset(priv, LPSTS, LPSTS_SUSPM, LPSTS_SUSPM); -- else -+ /* The controller on R-Car Gen3 needs to wait up to 45 usec */ -+ udelay(45); -+ } else { - usbhs_bset(priv, LPSTS, LPSTS_SUSPM, 0); -+ } - - return 0; - } -diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c -index 54a4de0..f61477b 100644 ---- a/drivers/usb/serial/cp210x.c -+++ b/drivers/usb/serial/cp210x.c -@@ -1077,7 +1077,9 @@ static int cp210x_tiocmget(struct tty_struct *tty) - u8 control; - int result; - -- cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control); -+ result = cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control); -+ if (result) -+ return result; - - result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0) - |((control & CONTROL_RTS) ? TIOCM_RTS : 0) -diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c -index b2d767e..0ff7f38 100644 ---- a/drivers/usb/serial/ftdi_sio.c -+++ b/drivers/usb/serial/ftdi_sio.c -@@ -986,7 +986,8 @@ static const struct usb_device_id id_table_combined[] = { - /* ekey Devices */ - { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) }, - /* Infineon Devices */ -- { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, -+ { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC1798_PID, 1) }, -+ { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC2X7_PID, 1) }, - /* GE Healthcare devices */ - { USB_DEVICE(GE_HEALTHCARE_VID, GE_HEALTHCARE_NEMO_TRACKER_PID) }, - /* Active Research (Actisense) devices */ -diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h -index f87a938..21011c0 100644 ---- a/drivers/usb/serial/ftdi_sio_ids.h -+++ b/drivers/usb/serial/ftdi_sio_ids.h -@@ -626,8 +626,9 @@ - /* - * Infineon Technologies - */ --#define INFINEON_VID 0x058b --#define INFINEON_TRIBOARD_PID 0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */ -+#define INFINEON_VID 0x058b -+#define INFINEON_TRIBOARD_TC1798_PID 0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */ -+#define INFINEON_TRIBOARD_TC2X7_PID 0x0043 /* DAS JTAG TriBoard TC2X7 V1.0 */ - - /* - * Acton Research Corp. -diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c -index d213cf4..4a037b4 100644 ---- a/drivers/usb/serial/usb-serial.c -+++ b/drivers/usb/serial/usb-serial.c -@@ -1078,7 +1078,8 @@ static int usb_serial_probe(struct usb_interface *interface, - - serial->disconnected = 0; - -- usb_serial_console_init(serial->port[0]->minor); -+ if (num_ports > 0) -+ usb_serial_console_init(serial->port[0]->minor); - exit: - module_put(type->driver.owner); - return 0; -diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c -index 9e4800a..951dd93 100644 ---- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c -+++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c -@@ -5348,7 +5348,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) - - dsi->phy_base = devm_ioremap(&dsidev->dev, res->start, - resource_size(res)); -- if (!dsi->proto_base) { -+ if (!dsi->phy_base) { - DSSERR("can't ioremap DSI PHY\n"); - return -ENOMEM; - } -@@ -5368,7 +5368,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) - - dsi->pll_base = devm_ioremap(&dsidev->dev, res->start, - resource_size(res)); -- if (!dsi->proto_base) { -+ if (!dsi->pll_base) { - DSSERR("can't ioremap DSI PLL\n"); - return -ENOMEM; - } -diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c -index 2c0487f..ed41fdb 100644 ---- a/drivers/video/fbdev/pxafb.c -+++ b/drivers/video/fbdev/pxafb.c -@@ -2125,7 +2125,7 @@ static int of_get_pxafb_display(struct device *dev, struct device_node *disp, - - timings = of_get_display_timings(disp); - if (!timings) -- goto out; -+ return -EINVAL; - - ret = -ENOMEM; - info->modes = kmalloc_array(timings->num_timings, -diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c -index 8c4e617..6d9e517 100644 ---- a/drivers/virtio/virtio_pci_legacy.c -+++ b/drivers/virtio/virtio_pci_legacy.c -@@ -212,10 +212,18 @@ int virtio_pci_legacy_probe(struct virtio_pci_device *vp_dev) - return -ENODEV; - } - -- rc = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(64)); -- if (rc) -- rc = dma_set_mask_and_coherent(&pci_dev->dev, -- DMA_BIT_MASK(32)); -+ rc = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64)); -+ if (rc) { -+ rc = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(32)); -+ } else { -+ /* -+ * The virtio ring base address is expressed as a 32-bit PFN, -+ * with a page size of 1 << VIRTIO_PCI_QUEUE_ADDR_SHIFT. -+ */ -+ dma_set_coherent_mask(&pci_dev->dev, -+ DMA_BIT_MASK(32 + VIRTIO_PCI_QUEUE_ADDR_SHIFT)); -+ } -+ - if (rc) - dev_warn(&pci_dev->dev, "Failed to enable 64-bit or 32-bit DMA. Trying to continue, but this might not work.\n"); - -diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c -index ed9c9ee..6b2cd92 100644 ---- a/drivers/virtio/virtio_ring.c -+++ b/drivers/virtio/virtio_ring.c -@@ -732,7 +732,8 @@ void virtqueue_disable_cb(struct virtqueue *_vq) - - if (!(vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT)) { - vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT; -- vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); -+ if (!vq->event) -+ vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); - } - - } -@@ -764,7 +765,8 @@ unsigned virtqueue_enable_cb_prepare(struct virtqueue *_vq) - * entry. Always do both to keep code simple. */ - if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) { - vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT; -- vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); -+ if (!vq->event) -+ vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); - } - vring_used_event(&vq->vring) = cpu_to_virtio16(_vq->vdev, last_used_idx = vq->last_used_idx); - END_USE(vq); -@@ -832,10 +834,11 @@ bool virtqueue_enable_cb_delayed(struct virtqueue *_vq) - * more to do. */ - /* Depending on the VIRTIO_RING_F_USED_EVENT_IDX feature, we need to - * either clear the flags bit or point the event index at the next -- * entry. Always do both to keep code simple. */ -+ * entry. Always update the event index to keep code simple. */ - if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) { - vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT; -- vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); -+ if (!vq->event) -+ vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow); - } - /* TODO: tune this threshold */ - bufs = (u16)(vq->avail_idx_shadow - vq->last_used_idx) * 3 / 4; -@@ -953,7 +956,8 @@ struct virtqueue *__vring_new_virtqueue(unsigned int index, - /* No callback? Tell other side not to bother us. */ - if (!callback) { - vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT; -- vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow); -+ if (!vq->event) -+ vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow); - } - - /* Put everything in free lists. */ -diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c -index e6811c4..bc1a004 100644 ---- a/fs/btrfs/inode.c -+++ b/fs/btrfs/inode.c -@@ -8915,9 +8915,14 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset, - * So even we call qgroup_free_data(), it won't decrease reserved - * space. - * 2) Not written to disk -- * This means the reserved space should be freed here. -+ * This means the reserved space should be freed here. However, -+ * if a truncate invalidates the page (by clearing PageDirty) -+ * and the page is accounted for while allocating extent -+ * in btrfs_check_data_free_space() we let delayed_ref to -+ * free the entire extent. - */ -- btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE); -+ if (PageDirty(page)) -+ btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE); - if (!inode_evicting) { - clear_extent_bit(tree, page_start, page_end, - EXTENT_LOCKED | EXTENT_DIRTY | -diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c -index ef9c55b..90e1198 100644 ---- a/fs/btrfs/tree-log.c -+++ b/fs/btrfs/tree-log.c -@@ -2713,14 +2713,12 @@ static inline void btrfs_remove_all_log_ctxs(struct btrfs_root *root, - int index, int error) - { - struct btrfs_log_ctx *ctx; -+ struct btrfs_log_ctx *safe; - -- if (!error) { -- INIT_LIST_HEAD(&root->log_ctxs[index]); -- return; -- } -- -- list_for_each_entry(ctx, &root->log_ctxs[index], list) -+ list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) { -+ list_del_init(&ctx->list); - ctx->log_ret = error; -+ } - - INIT_LIST_HEAD(&root->log_ctxs[index]); - } -@@ -2961,13 +2959,9 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, - mutex_unlock(&root->log_mutex); - - out_wake_log_root: -- /* -- * We needn't get log_mutex here because we are sure all -- * the other tasks are blocked. -- */ -+ mutex_lock(&log_root_tree->log_mutex); - btrfs_remove_all_log_ctxs(log_root_tree, index2, ret); - -- mutex_lock(&log_root_tree->log_mutex); - log_root_tree->log_transid_committed++; - atomic_set(&log_root_tree->log_commit[index2], 0); - mutex_unlock(&log_root_tree->log_mutex); -@@ -2978,10 +2972,8 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, - if (waitqueue_active(&log_root_tree->log_commit_wait[index2])) - wake_up(&log_root_tree->log_commit_wait[index2]); - out: -- /* See above. */ -- btrfs_remove_all_log_ctxs(root, index1, ret); -- - mutex_lock(&root->log_mutex); -+ btrfs_remove_all_log_ctxs(root, index1, ret); - root->log_transid_committed++; - atomic_set(&root->log_commit[index1], 0); - mutex_unlock(&root->log_mutex); -diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c -index a204d7e..0fe31b4 100644 ---- a/fs/nfsd/nfs4state.c -+++ b/fs/nfsd/nfs4state.c -@@ -1147,9 +1147,7 @@ static void put_ol_stateid_locked(struct nfs4_ol_stateid *stp, - - static bool unhash_lock_stateid(struct nfs4_ol_stateid *stp) - { -- struct nfs4_openowner *oo = openowner(stp->st_openstp->st_stateowner); -- -- lockdep_assert_held(&oo->oo_owner.so_client->cl_lock); -+ lockdep_assert_held(&stp->st_stid.sc_client->cl_lock); - - list_del_init(&stp->st_locks); - nfs4_unhash_stid(&stp->st_stid); -@@ -1158,12 +1156,12 @@ static bool unhash_lock_stateid(struct nfs4_ol_stateid *stp) - - static void release_lock_stateid(struct nfs4_ol_stateid *stp) - { -- struct nfs4_openowner *oo = openowner(stp->st_openstp->st_stateowner); -+ struct nfs4_client *clp = stp->st_stid.sc_client; - bool unhashed; - -- spin_lock(&oo->oo_owner.so_client->cl_lock); -+ spin_lock(&clp->cl_lock); - unhashed = unhash_lock_stateid(stp); -- spin_unlock(&oo->oo_owner.so_client->cl_lock); -+ spin_unlock(&clp->cl_lock); - if (unhashed) - nfs4_put_stid(&stp->st_stid); - } -diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c -index abadbc3..767377e 100644 ---- a/fs/overlayfs/copy_up.c -+++ b/fs/overlayfs/copy_up.c -@@ -171,6 +171,8 @@ static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) - len -= bytes; - } - -+ if (!error) -+ error = vfs_fsync(new_file, 0); - fput(new_file); - out_fput: - fput(old_file); -diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c -index c75625c..cf2bfeb 100644 ---- a/fs/overlayfs/inode.c -+++ b/fs/overlayfs/inode.c -@@ -294,9 +294,6 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type) - if (!IS_ENABLED(CONFIG_FS_POSIX_ACL) || !IS_POSIXACL(realinode)) - return NULL; - -- if (!realinode->i_op->get_acl) -- return NULL; -- - old_cred = ovl_override_creds(inode->i_sb); - acl = get_acl(realinode, type); - revert_creds(old_cred); -diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c -index e2a94a2..a78415d 100644 ---- a/fs/overlayfs/super.c -+++ b/fs/overlayfs/super.c -@@ -1026,6 +1026,21 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler, - - posix_acl_release(acl); - -+ /* -+ * Check if sgid bit needs to be cleared (actual setacl operation will -+ * be done with mounter's capabilities and so that won't do it for us). -+ */ -+ if (unlikely(inode->i_mode & S_ISGID) && -+ handler->flags == ACL_TYPE_ACCESS && -+ !in_group_p(inode->i_gid) && -+ !capable_wrt_inode_uidgid(inode, CAP_FSETID)) { -+ struct iattr iattr = { .ia_valid = ATTR_KILL_SGID }; -+ -+ err = ovl_setattr(dentry, &iattr); -+ if (err) -+ return err; -+ } -+ - err = ovl_xattr_set(dentry, handler->name, value, size, flags); - if (!err) - ovl_copyattr(ovl_inode_real(inode, NULL), inode); -diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c -index 4b86d3a..3b27145 100644 ---- a/fs/ubifs/dir.c -+++ b/fs/ubifs/dir.c -@@ -350,7 +350,7 @@ static unsigned int vfs_dent_type(uint8_t type) - */ - static int ubifs_readdir(struct file *file, struct dir_context *ctx) - { -- int err; -+ int err = 0; - struct qstr nm; - union ubifs_key key; - struct ubifs_dent_node *dent; -@@ -452,14 +452,20 @@ static int ubifs_readdir(struct file *file, struct dir_context *ctx) - kfree(file->private_data); - file->private_data = NULL; - -- if (err != -ENOENT) { -+ if (err != -ENOENT) - ubifs_err(c, "cannot find next direntry, error %d", err); -- return err; -- } -+ else -+ /* -+ * -ENOENT is a non-fatal error in this context, the TNC uses -+ * it to indicate that the cursor moved past the current directory -+ * and readdir() has to stop. -+ */ -+ err = 0; -+ - - /* 2 is a special value indicating that there are no more direntries */ - ctx->pos = 2; -- return 0; -+ return err; - } - - /* Free saved readdir() state when the directory is closed */ -diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c -index 3cc3cf7..ac9a003 100644 ---- a/fs/xfs/libxfs/xfs_dquot_buf.c -+++ b/fs/xfs/libxfs/xfs_dquot_buf.c -@@ -191,8 +191,7 @@ xfs_dquot_buf_verify_crc( - if (mp->m_quotainfo) - ndquots = mp->m_quotainfo->qi_dqperchunk; - else -- ndquots = xfs_calc_dquots_per_chunk( -- XFS_BB_TO_FSB(mp, bp->b_length)); -+ ndquots = xfs_calc_dquots_per_chunk(bp->b_length); - - for (i = 0; i < ndquots; i++, d++) { - if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), -diff --git a/include/linux/pwm.h b/include/linux/pwm.h -index f1bbae0..2c6c511 100644 ---- a/include/linux/pwm.h -+++ b/include/linux/pwm.h -@@ -641,6 +641,7 @@ static inline void pwm_remove_table(struct pwm_lookup *table, size_t num) - #ifdef CONFIG_PWM_SYSFS - void pwmchip_sysfs_export(struct pwm_chip *chip); - void pwmchip_sysfs_unexport(struct pwm_chip *chip); -+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip); - #else - static inline void pwmchip_sysfs_export(struct pwm_chip *chip) - { -@@ -649,6 +650,10 @@ static inline void pwmchip_sysfs_export(struct pwm_chip *chip) - static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip) - { - } -+ -+static inline void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) -+{ -+} - #endif /* CONFIG_PWM_SYSFS */ - - #endif /* __LINUX_PWM_H */ -diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild -index 185f8ea..407ca0d 100644 ---- a/include/uapi/linux/Kbuild -+++ b/include/uapi/linux/Kbuild -@@ -396,6 +396,7 @@ header-y += string.h - header-y += suspend_ioctls.h - header-y += swab.h - header-y += synclink.h -+header-y += sync_file.h - header-y += sysctl.h - header-y += sysinfo.h - header-y += target_core_user.h -diff --git a/kernel/time/timer.c b/kernel/time/timer.c -index 32bf6f7..96db64b 100644 ---- a/kernel/time/timer.c -+++ b/kernel/time/timer.c -@@ -878,7 +878,7 @@ static inline struct timer_base *get_timer_base(u32 tflags) - - #ifdef CONFIG_NO_HZ_COMMON - static inline struct timer_base * --__get_target_base(struct timer_base *base, unsigned tflags) -+get_target_base(struct timer_base *base, unsigned tflags) - { - #ifdef CONFIG_SMP - if ((tflags & TIMER_PINNED) || !base->migration_enabled) -@@ -891,25 +891,27 @@ __get_target_base(struct timer_base *base, unsigned tflags) - - static inline void forward_timer_base(struct timer_base *base) - { -+ unsigned long jnow = READ_ONCE(jiffies); -+ - /* - * We only forward the base when it's idle and we have a delta between - * base clock and jiffies. - */ -- if (!base->is_idle || (long) (jiffies - base->clk) < 2) -+ if (!base->is_idle || (long) (jnow - base->clk) < 2) - return; - - /* - * If the next expiry value is > jiffies, then we fast forward to - * jiffies otherwise we forward to the next expiry value. - */ -- if (time_after(base->next_expiry, jiffies)) -- base->clk = jiffies; -+ if (time_after(base->next_expiry, jnow)) -+ base->clk = jnow; - else - base->clk = base->next_expiry; - } - #else - static inline struct timer_base * --__get_target_base(struct timer_base *base, unsigned tflags) -+get_target_base(struct timer_base *base, unsigned tflags) - { - return get_timer_this_cpu_base(tflags); - } -@@ -917,14 +919,6 @@ __get_target_base(struct timer_base *base, unsigned tflags) - static inline void forward_timer_base(struct timer_base *base) { } - #endif - --static inline struct timer_base * --get_target_base(struct timer_base *base, unsigned tflags) --{ -- struct timer_base *target = __get_target_base(base, tflags); -- -- forward_timer_base(target); -- return target; --} - - /* - * We are using hashed locking: Holding per_cpu(timer_bases[x]).lock means -@@ -943,7 +937,14 @@ static struct timer_base *lock_timer_base(struct timer_list *timer, - { - for (;;) { - struct timer_base *base; -- u32 tf = timer->flags; -+ u32 tf; -+ -+ /* -+ * We need to use READ_ONCE() here, otherwise the compiler -+ * might re-read @tf between the check for TIMER_MIGRATING -+ * and spin_lock(). -+ */ -+ tf = READ_ONCE(timer->flags); - - if (!(tf & TIMER_MIGRATING)) { - base = get_timer_base(tf); -@@ -964,6 +965,8 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only) - unsigned long clk = 0, flags; - int ret = 0; - -+ BUG_ON(!timer->function); -+ - /* - * This is a common optimization triggered by the networking code - if - * the timer is re-modified to have the same timeout or ends up in the -@@ -972,13 +975,16 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only) - if (timer_pending(timer)) { - if (timer->expires == expires) - return 1; -+ - /* -- * Take the current timer_jiffies of base, but without holding -- * the lock! -+ * We lock timer base and calculate the bucket index right -+ * here. If the timer ends up in the same bucket, then we -+ * just update the expiry time and avoid the whole -+ * dequeue/enqueue dance. - */ -- base = get_timer_base(timer->flags); -- clk = base->clk; -+ base = lock_timer_base(timer, &flags); - -+ clk = base->clk; - idx = calc_wheel_index(expires, clk); - - /* -@@ -988,14 +994,14 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only) - */ - if (idx == timer_get_idx(timer)) { - timer->expires = expires; -- return 1; -+ ret = 1; -+ goto out_unlock; - } -+ } else { -+ base = lock_timer_base(timer, &flags); - } - - timer_stats_timer_set_start_info(timer); -- BUG_ON(!timer->function); -- -- base = lock_timer_base(timer, &flags); - - ret = detach_if_pending(timer, base, false); - if (!ret && pending_only) -@@ -1025,12 +1031,16 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only) - } - } - -+ /* Try to forward a stale timer base clock */ -+ forward_timer_base(base); -+ - timer->expires = expires; - /* - * If 'idx' was calculated above and the base time did not advance -- * between calculating 'idx' and taking the lock, only enqueue_timer() -- * and trigger_dyntick_cpu() is required. Otherwise we need to -- * (re)calculate the wheel index via internal_add_timer(). -+ * between calculating 'idx' and possibly switching the base, only -+ * enqueue_timer() and trigger_dyntick_cpu() is required. Otherwise -+ * we need to (re)calculate the wheel index via -+ * internal_add_timer(). - */ - if (idx != UINT_MAX && clk == base->clk) { - enqueue_timer(base, timer, idx); -@@ -1510,12 +1520,16 @@ u64 get_next_timer_interrupt(unsigned long basej, u64 basem) - is_max_delta = (nextevt == base->clk + NEXT_TIMER_MAX_DELTA); - base->next_expiry = nextevt; - /* -- * We have a fresh next event. Check whether we can forward the base: -+ * We have a fresh next event. Check whether we can forward the -+ * base. We can only do that when @basej is past base->clk -+ * otherwise we might rewind base->clk. - */ -- if (time_after(nextevt, jiffies)) -- base->clk = jiffies; -- else if (time_after(nextevt, base->clk)) -- base->clk = nextevt; -+ if (time_after(basej, base->clk)) { -+ if (time_after(nextevt, basej)) -+ base->clk = basej; -+ else if (time_after(nextevt, base->clk)) -+ base->clk = nextevt; -+ } - - if (time_before_eq(nextevt, basej)) { - expires = basem; -diff --git a/mm/list_lru.c b/mm/list_lru.c -index 1d05cb9..234676e 100644 ---- a/mm/list_lru.c -+++ b/mm/list_lru.c -@@ -554,6 +554,8 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware, - err = memcg_init_list_lru(lru, memcg_aware); - if (err) { - kfree(lru->node); -+ /* Do this so a list_lru_destroy() doesn't crash: */ -+ lru->node = NULL; - goto out; - } - -diff --git a/mm/memcontrol.c b/mm/memcontrol.c -index 4be518d..dddead1 100644 ---- a/mm/memcontrol.c -+++ b/mm/memcontrol.c -@@ -1947,6 +1947,15 @@ static int try_charge(struct mem_cgroup *memcg, gfp_t gfp_mask, - current->flags & PF_EXITING)) - goto force; - -+ /* -+ * Prevent unbounded recursion when reclaim operations need to -+ * allocate memory. This might exceed the limits temporarily, -+ * but we prefer facilitating memory reclaim and getting back -+ * under the limit over triggering OOM kills in these cases. -+ */ -+ if (unlikely(current->flags & PF_MEMALLOC)) -+ goto force; -+ - if (unlikely(task_in_memcg_oom(current))) - goto nomem; - -diff --git a/mm/slab.c b/mm/slab.c -index b672710..525a911 100644 ---- a/mm/slab.c -+++ b/mm/slab.c -@@ -964,7 +964,7 @@ static int setup_kmem_cache_node(struct kmem_cache *cachep, - * guaranteed to be valid until irq is re-enabled, because it will be - * freed after synchronize_sched(). - */ -- if (force_change) -+ if (old_shared && force_change) - synchronize_sched(); - - fail: -diff --git a/mm/vmscan.c b/mm/vmscan.c -index 0fe8b71..ba0fad7 100644 ---- a/mm/vmscan.c -+++ b/mm/vmscan.c -@@ -3048,7 +3048,9 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, - sc.gfp_mask, - sc.reclaim_idx); - -+ current->flags |= PF_MEMALLOC; - nr_reclaimed = do_try_to_free_pages(zonelist, &sc); -+ current->flags &= ~PF_MEMALLOC; - - trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed); - -diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c -index 9dce3b1..59a9603 100644 ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -2253,16 +2253,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) - if (!(status->rx_flags & IEEE80211_RX_AMSDU)) - return RX_CONTINUE; - -- if (ieee80211_has_a4(hdr->frame_control) && -- rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && -- !rx->sdata->u.vlan.sta) -- return RX_DROP_UNUSABLE; -+ if (unlikely(ieee80211_has_a4(hdr->frame_control))) { -+ switch (rx->sdata->vif.type) { -+ case NL80211_IFTYPE_AP_VLAN: -+ if (!rx->sdata->u.vlan.sta) -+ return RX_DROP_UNUSABLE; -+ break; -+ case NL80211_IFTYPE_STATION: -+ if (!rx->sdata->u.mgd.use_4addr) -+ return RX_DROP_UNUSABLE; -+ break; -+ default: -+ return RX_DROP_UNUSABLE; -+ } -+ } - -- if (is_multicast_ether_addr(hdr->addr1) && -- ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && -- rx->sdata->u.vlan.sta) || -- (rx->sdata->vif.type == NL80211_IFTYPE_STATION && -- rx->sdata->u.mgd.use_4addr))) -+ if (is_multicast_ether_addr(hdr->addr1)) - return RX_DROP_UNUSABLE; - - skb->dev = dev; -diff --git a/net/netfilter/xt_NFLOG.c b/net/netfilter/xt_NFLOG.c -index 018eed7..8668a5c 100644 ---- a/net/netfilter/xt_NFLOG.c -+++ b/net/netfilter/xt_NFLOG.c -@@ -32,6 +32,7 @@ nflog_tg(struct sk_buff *skb, const struct xt_action_param *par) - li.u.ulog.copy_len = info->len; - li.u.ulog.group = info->group; - li.u.ulog.qthreshold = info->threshold; -+ li.u.ulog.flags = 0; - - if (info->flags & XT_NFLOG_F_COPY_LEN) - li.u.ulog.flags |= NF_LOG_F_COPY_LEN; -diff --git a/security/keys/Kconfig b/security/keys/Kconfig -index f826e87..d942c7c 100644 ---- a/security/keys/Kconfig -+++ b/security/keys/Kconfig -@@ -41,7 +41,7 @@ config BIG_KEYS - bool "Large payload keys" - depends on KEYS - depends on TMPFS -- select CRYPTO -+ depends on (CRYPTO_ANSI_CPRNG = y || CRYPTO_DRBG = y) - select CRYPTO_AES - select CRYPTO_ECB - select CRYPTO_RNG -diff --git a/security/keys/big_key.c b/security/keys/big_key.c -index c0b3030..835c1ab 100644 ---- a/security/keys/big_key.c -+++ b/security/keys/big_key.c -@@ -9,6 +9,7 @@ - * 2 of the Licence, or (at your option) any later version. - */ - -+#define pr_fmt(fmt) "big_key: "fmt - #include <linux/init.h> - #include <linux/seq_file.h> - #include <linux/file.h> -@@ -341,44 +342,48 @@ long big_key_read(const struct key *key, char __user *buffer, size_t buflen) - */ - static int __init big_key_init(void) - { -- return register_key_type(&key_type_big_key); --} -- --/* -- * Initialize big_key crypto and RNG algorithms -- */ --static int __init big_key_crypto_init(void) --{ -- int ret = -EINVAL; -+ struct crypto_skcipher *cipher; -+ struct crypto_rng *rng; -+ int ret; - -- /* init RNG */ -- big_key_rng = crypto_alloc_rng(big_key_rng_name, 0, 0); -- if (IS_ERR(big_key_rng)) { -- big_key_rng = NULL; -- return -EFAULT; -+ rng = crypto_alloc_rng(big_key_rng_name, 0, 0); -+ if (IS_ERR(rng)) { -+ pr_err("Can't alloc rng: %ld\n", PTR_ERR(rng)); -+ return PTR_ERR(rng); - } - -+ big_key_rng = rng; -+ - /* seed RNG */ -- ret = crypto_rng_reset(big_key_rng, NULL, crypto_rng_seedsize(big_key_rng)); -- if (ret) -- goto error; -+ ret = crypto_rng_reset(rng, NULL, crypto_rng_seedsize(rng)); -+ if (ret) { -+ pr_err("Can't reset rng: %d\n", ret); -+ goto error_rng; -+ } - - /* init block cipher */ -- big_key_skcipher = crypto_alloc_skcipher(big_key_alg_name, -- 0, CRYPTO_ALG_ASYNC); -- if (IS_ERR(big_key_skcipher)) { -- big_key_skcipher = NULL; -- ret = -EFAULT; -- goto error; -+ cipher = crypto_alloc_skcipher(big_key_alg_name, 0, CRYPTO_ALG_ASYNC); -+ if (IS_ERR(cipher)) { -+ ret = PTR_ERR(cipher); -+ pr_err("Can't alloc crypto: %d\n", ret); -+ goto error_rng; -+ } -+ -+ big_key_skcipher = cipher; -+ -+ ret = register_key_type(&key_type_big_key); -+ if (ret < 0) { -+ pr_err("Can't register type: %d\n", ret); -+ goto error_cipher; - } - - return 0; - --error: -+error_cipher: -+ crypto_free_skcipher(big_key_skcipher); -+error_rng: - crypto_free_rng(big_key_rng); -- big_key_rng = NULL; - return ret; - } - --device_initcall(big_key_init); --late_initcall(big_key_crypto_init); -+late_initcall(big_key_init); -diff --git a/security/keys/proc.c b/security/keys/proc.c -index f0611a6..b9f531c 100644 ---- a/security/keys/proc.c -+++ b/security/keys/proc.c -@@ -181,7 +181,7 @@ static int proc_keys_show(struct seq_file *m, void *v) - struct timespec now; - unsigned long timo; - key_ref_t key_ref, skey_ref; -- char xbuf[12]; -+ char xbuf[16]; - int rc; - - struct keyring_search_context ctx = { -diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c -index dcc1028..37d9cfb 100644 ---- a/sound/core/seq/seq_timer.c -+++ b/sound/core/seq/seq_timer.c -@@ -448,8 +448,8 @@ snd_seq_real_time_t snd_seq_timer_get_cur_time(struct snd_seq_timer *tmr) - - ktime_get_ts64(&tm); - tm = timespec64_sub(tm, tmr->last_update); -- cur_time.tv_nsec = tm.tv_nsec; -- cur_time.tv_sec = tm.tv_sec; -+ cur_time.tv_nsec += tm.tv_nsec; -+ cur_time.tv_sec += tm.tv_sec; - snd_seq_sanity_real_time(&cur_time); - } - spin_unlock_irqrestore(&tmr->lock, flags); -diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c -index 160c7f7..487fcbf 100644 ---- a/sound/pci/hda/hda_intel.c -+++ b/sound/pci/hda/hda_intel.c -@@ -340,8 +340,7 @@ enum { - - /* quirks for Nvidia */ - #define AZX_DCAPS_PRESET_NVIDIA \ -- (AZX_DCAPS_NO_MSI | /*AZX_DCAPS_ALIGN_BUFSIZE |*/ \ -- AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\ -+ (AZX_DCAPS_NO_MSI | AZX_DCAPS_CORBRP_SELF_CLEAR |\ - AZX_DCAPS_SNOOP_TYPE(NVIDIA)) - - #define AZX_DCAPS_PRESET_CTHDA \ -@@ -1699,6 +1698,10 @@ static int azx_first_init(struct azx *chip) - } - } - -+ /* NVidia hardware normally only supports up to 40 bits of DMA */ -+ if (chip->pci->vendor == PCI_VENDOR_ID_NVIDIA) -+ dma_bits = 40; -+ - /* disable 64bit DMA address on some devices */ - if (chip->driver_caps & AZX_DCAPS_NO_64BIT) { - dev_dbg(card->dev, "Disabling 64bit DMA\n"); -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index bd481ac..26e866f 100644 ---- a/sound/pci/hda/patch_realtek.c -+++ b/sound/pci/hda/patch_realtek.c -@@ -5809,8 +5809,6 @@ static const struct hda_model_fixup alc269_fixup_models[] = { - #define ALC295_STANDARD_PINS \ - {0x12, 0xb7a60130}, \ - {0x14, 0x90170110}, \ -- {0x17, 0x21014020}, \ -- {0x18, 0x21a19030}, \ - {0x21, 0x04211020} - - #define ALC298_STANDARD_PINS \ -@@ -5857,11 +5855,19 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { - {0x1b, 0x02011020}, - {0x21, 0x0221101f}), - SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, -+ {0x14, 0x90170110}, -+ {0x1b, 0x01011020}, -+ {0x21, 0x0221101f}), -+ SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, - {0x14, 0x90170130}, - {0x1b, 0x01014020}, - {0x21, 0x0221103f}), - SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, - {0x14, 0x90170130}, -+ {0x1b, 0x01011020}, -+ {0x21, 0x0221103f}), -+ SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, -+ {0x14, 0x90170130}, - {0x1b, 0x02011020}, - {0x21, 0x0221103f}), - SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, -@@ -6037,7 +6043,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { - ALC292_STANDARD_PINS, - {0x13, 0x90a60140}), - SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, -- ALC295_STANDARD_PINS), -+ ALC295_STANDARD_PINS, -+ {0x17, 0x21014020}, -+ {0x18, 0x21a19030}), -+ SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, -+ ALC295_STANDARD_PINS, -+ {0x17, 0x21014040}, -+ {0x18, 0x21a19050}), - SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE, - ALC298_STANDARD_PINS, - {0x17, 0x90170110}), -@@ -6611,6 +6623,7 @@ enum { - ALC891_FIXUP_HEADSET_MODE, - ALC891_FIXUP_DELL_MIC_NO_PRESENCE, - ALC662_FIXUP_ACER_VERITON, -+ ALC892_FIXUP_ASROCK_MOBO, - }; - - static const struct hda_fixup alc662_fixups[] = { -@@ -6887,6 +6900,16 @@ static const struct hda_fixup alc662_fixups[] = { - { } - } - }, -+ [ALC892_FIXUP_ASROCK_MOBO] = { -+ .type = HDA_FIXUP_PINS, -+ .v.pins = (const struct hda_pintbl[]) { -+ { 0x15, 0x40f000f0 }, /* disabled */ -+ { 0x16, 0x40f000f0 }, /* disabled */ -+ { 0x18, 0x01014011 }, /* LO */ -+ { 0x1a, 0x01014012 }, /* LO */ -+ { } -+ } -+ }, - }; - - static const struct snd_pci_quirk alc662_fixup_tbl[] = { -@@ -6924,6 +6947,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { - SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), - SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), - SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD), -+ SND_PCI_QUIRK(0x1849, 0x5892, "ASRock B150M", ALC892_FIXUP_ASROCK_MOBO), - SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68), - SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON), - SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T), -diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h -index c60a776..8a59d47 100644 ---- a/sound/usb/quirks-table.h -+++ b/sound/usb/quirks-table.h -@@ -2907,6 +2907,23 @@ AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"), - AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"), - AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), - -+/* Syntek STK1160 */ -+{ -+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | -+ USB_DEVICE_ID_MATCH_INT_CLASS | -+ USB_DEVICE_ID_MATCH_INT_SUBCLASS, -+ .idVendor = 0x05e1, -+ .idProduct = 0x0408, -+ .bInterfaceClass = USB_CLASS_AUDIO, -+ .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, -+ .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { -+ .vendor_name = "Syntek", -+ .product_name = "STK1160", -+ .ifnum = QUIRK_ANY_INTERFACE, -+ .type = QUIRK_AUDIO_ALIGN_TRANSFER -+ } -+}, -+ - /* Digidesign Mbox */ - { - /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ |