Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.14/0173-4.14.74-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 147995 byte(s)
-added up to patches-4.14.79
1 niro 3238 diff --git a/Documentation/hwmon/ina2xx b/Documentation/hwmon/ina2xx
2     index cfd31d94c872..f8bf14055c2f 100644
3     --- a/Documentation/hwmon/ina2xx
4     +++ b/Documentation/hwmon/ina2xx
5     @@ -32,7 +32,7 @@ Supported chips:
6     Datasheet: Publicly available at the Texas Instruments website
7     http://www.ti.com/
8    
9     -Author: Lothar Felten <l-felten@ti.com>
10     +Author: Lothar Felten <lothar.felten@gmail.com>
11    
12     Description
13     -----------
14     diff --git a/Makefile b/Makefile
15     index 89f30ca964b6..cc0e65a8d7bf 100644
16     --- a/Makefile
17     +++ b/Makefile
18     @@ -1,7 +1,7 @@
19     # SPDX-License-Identifier: GPL-2.0
20     VERSION = 4
21     PATCHLEVEL = 14
22     -SUBLEVEL = 73
23     +SUBLEVEL = 74
24     EXTRAVERSION =
25     NAME = Petit Gorille
26    
27     diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
28     index 02a136a4661a..a5bd8f0205e8 100644
29     --- a/arch/arm/boot/dts/dra7.dtsi
30     +++ b/arch/arm/boot/dts/dra7.dtsi
31     @@ -1818,7 +1818,7 @@
32     };
33     };
34    
35     - dcan1: can@481cc000 {
36     + dcan1: can@4ae3c000 {
37     compatible = "ti,dra7-d_can";
38     ti,hwmods = "dcan1";
39     reg = <0x4ae3c000 0x2000>;
40     @@ -1828,7 +1828,7 @@
41     status = "disabled";
42     };
43    
44     - dcan2: can@481d0000 {
45     + dcan2: can@48480000 {
46     compatible = "ti,dra7-d_can";
47     ti,hwmods = "dcan2";
48     reg = <0x48480000 0x2000>;
49     diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
50     index 4d308d17f040..119b63ffb0fe 100644
51     --- a/arch/arm/boot/dts/imx7d.dtsi
52     +++ b/arch/arm/boot/dts/imx7d.dtsi
53     @@ -144,10 +144,14 @@
54     interrupt-names = "msi";
55     #interrupt-cells = <1>;
56     interrupt-map-mask = <0 0 0 0x7>;
57     - interrupt-map = <0 0 0 1 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
58     - <0 0 0 2 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
59     - <0 0 0 3 &intc GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
60     - <0 0 0 4 &intc GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
61     + /*
62     + * Reference manual lists pci irqs incorrectly
63     + * Real hardware ordering is same as imx6: D+MSI, C, B, A
64     + */
65     + interrupt-map = <0 0 0 1 &intc GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
66     + <0 0 0 2 &intc GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
67     + <0 0 0 3 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
68     + <0 0 0 4 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
69     clocks = <&clks IMX7D_PCIE_CTRL_ROOT_CLK>,
70     <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>,
71     <&clks IMX7D_PCIE_PHY_ROOT_CLK>;
72     diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi
73     index 379b4a03cfe2..2d20f60947b9 100644
74     --- a/arch/arm/boot/dts/ls1021a.dtsi
75     +++ b/arch/arm/boot/dts/ls1021a.dtsi
76     @@ -84,6 +84,7 @@
77     device_type = "cpu";
78     reg = <0xf01>;
79     clocks = <&clockgen 1 0>;
80     + #cooling-cells = <2>;
81     };
82     };
83    
84     diff --git a/arch/arm/boot/dts/mt7623.dtsi b/arch/arm/boot/dts/mt7623.dtsi
85     index 185357323572..028cf4a5887f 100644
86     --- a/arch/arm/boot/dts/mt7623.dtsi
87     +++ b/arch/arm/boot/dts/mt7623.dtsi
88     @@ -98,6 +98,7 @@
89     compatible = "arm,cortex-a7";
90     reg = <0x1>;
91     operating-points-v2 = <&cpu_opp_table>;
92     + #cooling-cells = <2>;
93     clock-frequency = <1300000000>;
94     };
95    
96     @@ -106,6 +107,7 @@
97     compatible = "arm,cortex-a7";
98     reg = <0x2>;
99     operating-points-v2 = <&cpu_opp_table>;
100     + #cooling-cells = <2>;
101     clock-frequency = <1300000000>;
102     };
103    
104     @@ -114,6 +116,7 @@
105     compatible = "arm,cortex-a7";
106     reg = <0x3>;
107     operating-points-v2 = <&cpu_opp_table>;
108     + #cooling-cells = <2>;
109     clock-frequency = <1300000000>;
110     };
111     };
112     diff --git a/arch/arm/boot/dts/omap4-droid4-xt894.dts b/arch/arm/boot/dts/omap4-droid4-xt894.dts
113     index 8b93d37310f2..bad690b23081 100644
114     --- a/arch/arm/boot/dts/omap4-droid4-xt894.dts
115     +++ b/arch/arm/boot/dts/omap4-droid4-xt894.dts
116     @@ -314,7 +314,7 @@
117     &mmc2 {
118     vmmc-supply = <&vsdio>;
119     bus-width = <8>;
120     - non-removable;
121     + ti,non-removable;
122     };
123    
124     &mmc3 {
125     diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c
126     index 27a78c80e5b1..73d5d72dfc3e 100644
127     --- a/arch/arm/mach-mvebu/pmsu.c
128     +++ b/arch/arm/mach-mvebu/pmsu.c
129     @@ -116,8 +116,8 @@ void mvebu_pmsu_set_cpu_boot_addr(int hw_cpu, void *boot_addr)
130     PMSU_BOOT_ADDR_REDIRECT_OFFSET(hw_cpu));
131     }
132    
133     -extern unsigned char mvebu_boot_wa_start;
134     -extern unsigned char mvebu_boot_wa_end;
135     +extern unsigned char mvebu_boot_wa_start[];
136     +extern unsigned char mvebu_boot_wa_end[];
137    
138     /*
139     * This function sets up the boot address workaround needed for SMP
140     @@ -130,7 +130,7 @@ int mvebu_setup_boot_addr_wa(unsigned int crypto_eng_target,
141     phys_addr_t resume_addr_reg)
142     {
143     void __iomem *sram_virt_base;
144     - u32 code_len = &mvebu_boot_wa_end - &mvebu_boot_wa_start;
145     + u32 code_len = mvebu_boot_wa_end - mvebu_boot_wa_start;
146    
147     mvebu_mbus_del_window(BOOTROM_BASE, BOOTROM_SIZE);
148     mvebu_mbus_add_window_by_id(crypto_eng_target, crypto_eng_attribute,
149     diff --git a/arch/arm/mach-omap2/omap_hwmod_reset.c b/arch/arm/mach-omap2/omap_hwmod_reset.c
150     index b68f9c0aff0b..d5ddba00bb73 100644
151     --- a/arch/arm/mach-omap2/omap_hwmod_reset.c
152     +++ b/arch/arm/mach-omap2/omap_hwmod_reset.c
153     @@ -92,11 +92,13 @@ static void omap_rtc_wait_not_busy(struct omap_hwmod *oh)
154     */
155     void omap_hwmod_rtc_unlock(struct omap_hwmod *oh)
156     {
157     - local_irq_disable();
158     + unsigned long flags;
159     +
160     + local_irq_save(flags);
161     omap_rtc_wait_not_busy(oh);
162     omap_hwmod_write(OMAP_RTC_KICK0_VALUE, oh, OMAP_RTC_KICK0_REG);
163     omap_hwmod_write(OMAP_RTC_KICK1_VALUE, oh, OMAP_RTC_KICK1_REG);
164     - local_irq_enable();
165     + local_irq_restore(flags);
166     }
167    
168     /**
169     @@ -110,9 +112,11 @@ void omap_hwmod_rtc_unlock(struct omap_hwmod *oh)
170     */
171     void omap_hwmod_rtc_lock(struct omap_hwmod *oh)
172     {
173     - local_irq_disable();
174     + unsigned long flags;
175     +
176     + local_irq_save(flags);
177     omap_rtc_wait_not_busy(oh);
178     omap_hwmod_write(0x0, oh, OMAP_RTC_KICK0_REG);
179     omap_hwmod_write(0x0, oh, OMAP_RTC_KICK1_REG);
180     - local_irq_enable();
181     + local_irq_restore(flags);
182     }
183     diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
184     index e5df3fce0008..2b55aee7c051 100644
185     --- a/arch/arm64/include/asm/kvm_emulate.h
186     +++ b/arch/arm64/include/asm/kvm_emulate.h
187     @@ -42,6 +42,11 @@ void kvm_inject_vabt(struct kvm_vcpu *vcpu);
188     void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr);
189     void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr);
190    
191     +static inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu)
192     +{
193     + return !(vcpu->arch.hcr_el2 & HCR_RW);
194     +}
195     +
196     static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu)
197     {
198     vcpu->arch.hcr_el2 = HCR_GUEST_FLAGS;
199     diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
200     index 811f04c5760e..76d27edf33cb 100644
201     --- a/arch/arm64/kvm/guest.c
202     +++ b/arch/arm64/kvm/guest.c
203     @@ -57,6 +57,45 @@ static u64 core_reg_offset_from_id(u64 id)
204     return id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_CORE);
205     }
206    
207     +static int validate_core_offset(const struct kvm_one_reg *reg)
208     +{
209     + u64 off = core_reg_offset_from_id(reg->id);
210     + int size;
211     +
212     + switch (off) {
213     + case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
214     + KVM_REG_ARM_CORE_REG(regs.regs[30]):
215     + case KVM_REG_ARM_CORE_REG(regs.sp):
216     + case KVM_REG_ARM_CORE_REG(regs.pc):
217     + case KVM_REG_ARM_CORE_REG(regs.pstate):
218     + case KVM_REG_ARM_CORE_REG(sp_el1):
219     + case KVM_REG_ARM_CORE_REG(elr_el1):
220     + case KVM_REG_ARM_CORE_REG(spsr[0]) ...
221     + KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]):
222     + size = sizeof(__u64);
223     + break;
224     +
225     + case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
226     + KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
227     + size = sizeof(__uint128_t);
228     + break;
229     +
230     + case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
231     + case KVM_REG_ARM_CORE_REG(fp_regs.fpcr):
232     + size = sizeof(__u32);
233     + break;
234     +
235     + default:
236     + return -EINVAL;
237     + }
238     +
239     + if (KVM_REG_SIZE(reg->id) == size &&
240     + IS_ALIGNED(off, size / sizeof(__u32)))
241     + return 0;
242     +
243     + return -EINVAL;
244     +}
245     +
246     static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
247     {
248     /*
249     @@ -76,6 +115,9 @@ static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
250     (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
251     return -ENOENT;
252    
253     + if (validate_core_offset(reg))
254     + return -EINVAL;
255     +
256     if (copy_to_user(uaddr, ((u32 *)regs) + off, KVM_REG_SIZE(reg->id)))
257     return -EFAULT;
258    
259     @@ -98,6 +140,9 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
260     (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
261     return -ENOENT;
262    
263     + if (validate_core_offset(reg))
264     + return -EINVAL;
265     +
266     if (KVM_REG_SIZE(reg->id) > sizeof(tmp))
267     return -EINVAL;
268    
269     @@ -107,17 +152,25 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
270     }
271    
272     if (off == KVM_REG_ARM_CORE_REG(regs.pstate)) {
273     - u32 mode = (*(u32 *)valp) & COMPAT_PSR_MODE_MASK;
274     + u64 mode = (*(u64 *)valp) & COMPAT_PSR_MODE_MASK;
275     switch (mode) {
276     case COMPAT_PSR_MODE_USR:
277     + if (!system_supports_32bit_el0())
278     + return -EINVAL;
279     + break;
280     case COMPAT_PSR_MODE_FIQ:
281     case COMPAT_PSR_MODE_IRQ:
282     case COMPAT_PSR_MODE_SVC:
283     case COMPAT_PSR_MODE_ABT:
284     case COMPAT_PSR_MODE_UND:
285     + if (!vcpu_el1_is_32bit(vcpu))
286     + return -EINVAL;
287     + break;
288     case PSR_MODE_EL0t:
289     case PSR_MODE_EL1t:
290     case PSR_MODE_EL1h:
291     + if (vcpu_el1_is_32bit(vcpu))
292     + return -EINVAL;
293     break;
294     default:
295     err = -EINVAL;
296     diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile
297     index c22da16d67b8..5c7bfa8478e7 100644
298     --- a/arch/mips/boot/Makefile
299     +++ b/arch/mips/boot/Makefile
300     @@ -118,10 +118,12 @@ ifeq ($(ADDR_BITS),64)
301     itb_addr_cells = 2
302     endif
303    
304     +targets += vmlinux.its.S
305     +
306     quiet_cmd_its_cat = CAT $@
307     - cmd_its_cat = cat $^ >$@
308     + cmd_its_cat = cat $(filter-out $(PHONY), $^) >$@
309    
310     -$(obj)/vmlinux.its.S: $(addprefix $(srctree)/arch/mips/$(PLATFORM)/,$(ITS_INPUTS))
311     +$(obj)/vmlinux.its.S: $(addprefix $(srctree)/arch/mips/$(PLATFORM)/,$(ITS_INPUTS)) FORCE
312     $(call if_changed,its_cat)
313    
314     quiet_cmd_cpp_its_S = ITS $@
315     diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
316     index 2694d078741d..9dafd7af39b8 100644
317     --- a/arch/powerpc/kernel/machine_kexec.c
318     +++ b/arch/powerpc/kernel/machine_kexec.c
319     @@ -186,7 +186,12 @@ void __init reserve_crashkernel(void)
320     (unsigned long)(crashk_res.start >> 20),
321     (unsigned long)(memblock_phys_mem_size() >> 20));
322    
323     - memblock_reserve(crashk_res.start, crash_size);
324     + if (!memblock_is_region_memory(crashk_res.start, crash_size) ||
325     + memblock_reserve(crashk_res.start, crash_size)) {
326     + pr_err("Failed to reserve memory for crashkernel!\n");
327     + crashk_res.start = crashk_res.end = 0;
328     + return;
329     + }
330     }
331    
332     int overlaps_crashkernel(unsigned long start, unsigned long size)
333     diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
334     index e919696c7137..ddef22e00ddd 100644
335     --- a/arch/powerpc/platforms/powernv/pci-ioda.c
336     +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
337     @@ -2787,7 +2787,7 @@ static long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
338     level_shift = entries_shift + 3;
339     level_shift = max_t(unsigned, level_shift, PAGE_SHIFT);
340    
341     - if ((level_shift - 3) * levels + page_shift >= 60)
342     + if ((level_shift - 3) * levels + page_shift >= 55)
343     return -EINVAL;
344    
345     /* Allocate TCE table */
346     diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
347     index a441cba8d165..b0fad29c1427 100644
348     --- a/arch/s390/kernel/sysinfo.c
349     +++ b/arch/s390/kernel/sysinfo.c
350     @@ -59,6 +59,8 @@ int stsi(void *sysinfo, int fc, int sel1, int sel2)
351     }
352     EXPORT_SYMBOL(stsi);
353    
354     +#ifdef CONFIG_PROC_FS
355     +
356     static bool convert_ext_name(unsigned char encoding, char *name, size_t len)
357     {
358     switch (encoding) {
359     @@ -311,6 +313,8 @@ static int __init sysinfo_create_proc(void)
360     }
361     device_initcall(sysinfo_create_proc);
362    
363     +#endif /* CONFIG_PROC_FS */
364     +
365     /*
366     * Service levels interface.
367     */
368     diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c
369     index 920d40894535..290e71e57541 100644
370     --- a/arch/s390/mm/extmem.c
371     +++ b/arch/s390/mm/extmem.c
372     @@ -80,7 +80,7 @@ struct qin64 {
373     struct dcss_segment {
374     struct list_head list;
375     char dcss_name[8];
376     - char res_name[15];
377     + char res_name[16];
378     unsigned long start_addr;
379     unsigned long end;
380     atomic_t ref_count;
381     @@ -433,7 +433,7 @@ __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long
382     memcpy(&seg->res_name, seg->dcss_name, 8);
383     EBCASC(seg->res_name, 8);
384     seg->res_name[8] = '\0';
385     - strncat(seg->res_name, " (DCSS)", 7);
386     + strlcat(seg->res_name, " (DCSS)", sizeof(seg->res_name));
387     seg->res->name = seg->res_name;
388     rc = seg->vm_segtype;
389     if (rc == SEG_TYPE_SC ||
390     diff --git a/arch/s390/mm/pgalloc.c b/arch/s390/mm/pgalloc.c
391     index 334b6d103cbd..29653f713162 100644
392     --- a/arch/s390/mm/pgalloc.c
393     +++ b/arch/s390/mm/pgalloc.c
394     @@ -27,7 +27,7 @@ static struct ctl_table page_table_sysctl[] = {
395     .data = &page_table_allocate_pgste,
396     .maxlen = sizeof(int),
397     .mode = S_IRUGO | S_IWUSR,
398     - .proc_handler = proc_dointvec,
399     + .proc_handler = proc_dointvec_minmax,
400     .extra1 = &page_table_allocate_pgste_min,
401     .extra2 = &page_table_allocate_pgste_max,
402     },
403     diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
404     index 0fae7096ae23..164cd7529f0b 100644
405     --- a/arch/x86/entry/entry_64.S
406     +++ b/arch/x86/entry/entry_64.S
407     @@ -88,7 +88,7 @@ END(native_usergs_sysret64)
408     .endm
409    
410     .macro TRACE_IRQS_IRETQ_DEBUG
411     - bt $9, EFLAGS(%rsp) /* interrupts off? */
412     + btl $9, EFLAGS(%rsp) /* interrupts off? */
413     jnc 1f
414     TRACE_IRQS_ON_DEBUG
415     1:
416     @@ -630,7 +630,7 @@ retint_kernel:
417     #ifdef CONFIG_PREEMPT
418     /* Interrupts are off */
419     /* Check if we need preemption */
420     - bt $9, EFLAGS(%rsp) /* were interrupts off? */
421     + btl $9, EFLAGS(%rsp) /* were interrupts off? */
422     jnc 1f
423     0: cmpl $0, PER_CPU_VAR(__preempt_count)
424     jnz 1f
425     diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
426     index cf372b90557e..a4170048a30b 100644
427     --- a/arch/x86/events/intel/lbr.c
428     +++ b/arch/x86/events/intel/lbr.c
429     @@ -346,7 +346,7 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
430    
431     mask = x86_pmu.lbr_nr - 1;
432     tos = task_ctx->tos;
433     - for (i = 0; i < tos; i++) {
434     + for (i = 0; i < task_ctx->valid_lbrs; i++) {
435     lbr_idx = (tos - i) & mask;
436     wrlbr_from(lbr_idx, task_ctx->lbr_from[i]);
437     wrlbr_to (lbr_idx, task_ctx->lbr_to[i]);
438     @@ -354,6 +354,15 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
439     if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
440     wrmsrl(MSR_LBR_INFO_0 + lbr_idx, task_ctx->lbr_info[i]);
441     }
442     +
443     + for (; i < x86_pmu.lbr_nr; i++) {
444     + lbr_idx = (tos - i) & mask;
445     + wrlbr_from(lbr_idx, 0);
446     + wrlbr_to(lbr_idx, 0);
447     + if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
448     + wrmsrl(MSR_LBR_INFO_0 + lbr_idx, 0);
449     + }
450     +
451     wrmsrl(x86_pmu.lbr_tos, tos);
452     task_ctx->lbr_stack_state = LBR_NONE;
453     }
454     @@ -361,7 +370,7 @@ static void __intel_pmu_lbr_restore(struct x86_perf_task_context *task_ctx)
455     static void __intel_pmu_lbr_save(struct x86_perf_task_context *task_ctx)
456     {
457     unsigned lbr_idx, mask;
458     - u64 tos;
459     + u64 tos, from;
460     int i;
461    
462     if (task_ctx->lbr_callstack_users == 0) {
463     @@ -371,13 +380,17 @@ static void __intel_pmu_lbr_save(struct x86_perf_task_context *task_ctx)
464    
465     mask = x86_pmu.lbr_nr - 1;
466     tos = intel_pmu_lbr_tos();
467     - for (i = 0; i < tos; i++) {
468     + for (i = 0; i < x86_pmu.lbr_nr; i++) {
469     lbr_idx = (tos - i) & mask;
470     - task_ctx->lbr_from[i] = rdlbr_from(lbr_idx);
471     + from = rdlbr_from(lbr_idx);
472     + if (!from)
473     + break;
474     + task_ctx->lbr_from[i] = from;
475     task_ctx->lbr_to[i] = rdlbr_to(lbr_idx);
476     if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_INFO)
477     rdmsrl(MSR_LBR_INFO_0 + lbr_idx, task_ctx->lbr_info[i]);
478     }
479     + task_ctx->valid_lbrs = i;
480     task_ctx->tos = tos;
481     task_ctx->lbr_stack_state = LBR_VALID;
482     }
483     @@ -531,7 +544,7 @@ static void intel_pmu_lbr_read_32(struct cpu_hw_events *cpuc)
484     */
485     static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
486     {
487     - bool need_info = false;
488     + bool need_info = false, call_stack = false;
489     unsigned long mask = x86_pmu.lbr_nr - 1;
490     int lbr_format = x86_pmu.intel_cap.lbr_format;
491     u64 tos = intel_pmu_lbr_tos();
492     @@ -542,7 +555,7 @@ static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
493     if (cpuc->lbr_sel) {
494     need_info = !(cpuc->lbr_sel->config & LBR_NO_INFO);
495     if (cpuc->lbr_sel->config & LBR_CALL_STACK)
496     - num = tos;
497     + call_stack = true;
498     }
499    
500     for (i = 0; i < num; i++) {
501     @@ -555,6 +568,13 @@ static void intel_pmu_lbr_read_64(struct cpu_hw_events *cpuc)
502     from = rdlbr_from(lbr_idx);
503     to = rdlbr_to(lbr_idx);
504    
505     + /*
506     + * Read LBR call stack entries
507     + * until invalid entry (0s) is detected.
508     + */
509     + if (call_stack && !from)
510     + break;
511     +
512     if (lbr_format == LBR_FORMAT_INFO && need_info) {
513     u64 info;
514    
515     diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
516     index dc4728eccfd8..c6698c63c047 100644
517     --- a/arch/x86/events/perf_event.h
518     +++ b/arch/x86/events/perf_event.h
519     @@ -646,6 +646,7 @@ struct x86_perf_task_context {
520     u64 lbr_to[MAX_LBR_ENTRIES];
521     u64 lbr_info[MAX_LBR_ENTRIES];
522     int tos;
523     + int valid_lbrs;
524     int lbr_callstack_users;
525     int lbr_stack_state;
526     };
527     diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h
528     index e203169931c7..6390bd8c141b 100644
529     --- a/arch/x86/include/asm/fixmap.h
530     +++ b/arch/x86/include/asm/fixmap.h
531     @@ -14,6 +14,16 @@
532     #ifndef _ASM_X86_FIXMAP_H
533     #define _ASM_X86_FIXMAP_H
534    
535     +/*
536     + * Exposed to assembly code for setting up initial page tables. Cannot be
537     + * calculated in assembly code (fixmap entries are an enum), but is sanity
538     + * checked in the actual fixmap C code to make sure that the fixmap is
539     + * covered fully.
540     + */
541     +#define FIXMAP_PMD_NUM 2
542     +/* fixmap starts downwards from the 507th entry in level2_fixmap_pgt */
543     +#define FIXMAP_PMD_TOP 507
544     +
545     #ifndef __ASSEMBLY__
546     #include <linux/kernel.h>
547     #include <asm/acpi.h>
548     diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
549     index 4ecb72831938..ef938583147e 100644
550     --- a/arch/x86/include/asm/pgtable_64.h
551     +++ b/arch/x86/include/asm/pgtable_64.h
552     @@ -14,6 +14,7 @@
553     #include <asm/processor.h>
554     #include <linux/bitops.h>
555     #include <linux/threads.h>
556     +#include <asm/fixmap.h>
557    
558     extern p4d_t level4_kernel_pgt[512];
559     extern p4d_t level4_ident_pgt[512];
560     @@ -22,7 +23,7 @@ extern pud_t level3_ident_pgt[512];
561     extern pmd_t level2_kernel_pgt[512];
562     extern pmd_t level2_fixmap_pgt[512];
563     extern pmd_t level2_ident_pgt[512];
564     -extern pte_t level1_fixmap_pgt[512];
565     +extern pte_t level1_fixmap_pgt[512 * FIXMAP_PMD_NUM];
566     extern pgd_t init_top_pgt[];
567    
568     #define swapper_pg_dir init_top_pgt
569     diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
570     index 7ba5d819ebe3..45b5c6c4a55e 100644
571     --- a/arch/x86/kernel/head64.c
572     +++ b/arch/x86/kernel/head64.c
573     @@ -31,6 +31,7 @@
574     #include <asm/bootparam_utils.h>
575     #include <asm/microcode.h>
576     #include <asm/kasan.h>
577     +#include <asm/fixmap.h>
578    
579     /*
580     * Manage page tables very early on.
581     @@ -93,7 +94,8 @@ unsigned long __head __startup_64(unsigned long physaddr,
582     pud[511] += load_delta;
583    
584     pmd = fixup_pointer(level2_fixmap_pgt, physaddr);
585     - pmd[506] += load_delta;
586     + for (i = FIXMAP_PMD_TOP; i > FIXMAP_PMD_TOP - FIXMAP_PMD_NUM; i--)
587     + pmd[i] += load_delta;
588    
589     /*
590     * Set up the identity mapping for the switchover. These
591     diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
592     index 0f545b3cf926..8d59dfe629a9 100644
593     --- a/arch/x86/kernel/head_64.S
594     +++ b/arch/x86/kernel/head_64.S
595     @@ -24,6 +24,7 @@
596     #include "../entry/calling.h"
597     #include <asm/export.h>
598     #include <asm/nospec-branch.h>
599     +#include <asm/fixmap.h>
600    
601     #ifdef CONFIG_PARAVIRT
602     #include <asm/asm-offsets.h>
603     @@ -438,13 +439,20 @@ NEXT_PAGE(level2_kernel_pgt)
604     KERNEL_IMAGE_SIZE/PMD_SIZE)
605    
606     NEXT_PAGE(level2_fixmap_pgt)
607     - .fill 506,8,0
608     - .quad level1_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE_NOENC
609     - /* 8MB reserved for vsyscalls + a 2MB hole = 4 + 1 entries */
610     - .fill 5,8,0
611     + .fill (512 - 4 - FIXMAP_PMD_NUM),8,0
612     + pgtno = 0
613     + .rept (FIXMAP_PMD_NUM)
614     + .quad level1_fixmap_pgt + (pgtno << PAGE_SHIFT) - __START_KERNEL_map \
615     + + _PAGE_TABLE_NOENC;
616     + pgtno = pgtno + 1
617     + .endr
618     + /* 6 MB reserved space + a 2MB hole */
619     + .fill 4,8,0
620    
621     NEXT_PAGE(level1_fixmap_pgt)
622     + .rept (FIXMAP_PMD_NUM)
623     .fill 512,8,0
624     + .endr
625    
626     #undef PMDS
627    
628     diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
629     index 19afdbd7d0a7..5532d1be7687 100644
630     --- a/arch/x86/kernel/tsc_msr.c
631     +++ b/arch/x86/kernel/tsc_msr.c
632     @@ -12,6 +12,7 @@
633     #include <asm/setup.h>
634     #include <asm/apic.h>
635     #include <asm/param.h>
636     +#include <asm/tsc.h>
637    
638     #define MAX_NUM_FREQS 9
639    
640     diff --git a/arch/x86/mm/numa_emulation.c b/arch/x86/mm/numa_emulation.c
641     index 34a2a3bfde9c..22cbad56acab 100644
642     --- a/arch/x86/mm/numa_emulation.c
643     +++ b/arch/x86/mm/numa_emulation.c
644     @@ -61,7 +61,7 @@ static int __init emu_setup_memblk(struct numa_meminfo *ei,
645     eb->nid = nid;
646    
647     if (emu_nid_to_phys[nid] == NUMA_NO_NODE)
648     - emu_nid_to_phys[nid] = nid;
649     + emu_nid_to_phys[nid] = pb->nid;
650    
651     pb->start += size;
652     if (pb->start >= pb->end) {
653     diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
654     index 2bdb8e8a9d7c..aafd4edfa2ac 100644
655     --- a/arch/x86/mm/pgtable.c
656     +++ b/arch/x86/mm/pgtable.c
657     @@ -573,6 +573,15 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
658     {
659     unsigned long address = __fix_to_virt(idx);
660    
661     +#ifdef CONFIG_X86_64
662     + /*
663     + * Ensure that the static initial page tables are covering the
664     + * fixmap completely.
665     + */
666     + BUILD_BUG_ON(__end_of_permanent_fixed_addresses >
667     + (FIXMAP_PMD_NUM * PTRS_PER_PTE));
668     +#endif
669     +
670     if (idx >= __end_of_fixed_addresses) {
671     BUG();
672     return;
673     diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
674     index b07e3ffc5ac5..60c48f5d6b0e 100644
675     --- a/arch/x86/mm/pti.c
676     +++ b/arch/x86/mm/pti.c
677     @@ -224,7 +224,7 @@ static __init pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
678     *
679     * Returns a pointer to a PTE on success, or NULL on failure.
680     */
681     -static __init pte_t *pti_user_pagetable_walk_pte(unsigned long address)
682     +static pte_t *pti_user_pagetable_walk_pte(unsigned long address)
683     {
684     gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
685     pmd_t *pmd;
686     diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
687     index 42cfad67b6ac..8ed11a5b1a9d 100644
688     --- a/arch/x86/xen/mmu_pv.c
689     +++ b/arch/x86/xen/mmu_pv.c
690     @@ -1879,7 +1879,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
691     /* L3_k[511] -> level2_fixmap_pgt */
692     convert_pfn_mfn(level3_kernel_pgt);
693    
694     - /* L3_k[511][506] -> level1_fixmap_pgt */
695     + /* L3_k[511][508-FIXMAP_PMD_NUM ... 507] -> level1_fixmap_pgt */
696     convert_pfn_mfn(level2_fixmap_pgt);
697    
698     /* We get [511][511] and have Xen's version of level2_kernel_pgt */
699     @@ -1924,7 +1924,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
700     set_page_prot(level2_ident_pgt, PAGE_KERNEL_RO);
701     set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO);
702     set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO);
703     - set_page_prot(level1_fixmap_pgt, PAGE_KERNEL_RO);
704     +
705     + for (i = 0; i < FIXMAP_PMD_NUM; i++) {
706     + set_page_prot(level1_fixmap_pgt + i * PTRS_PER_PTE,
707     + PAGE_KERNEL_RO);
708     + }
709    
710     /* Pin down new L4 */
711     pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
712     diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c
713     index 4ee7c041bb82..8882e90e868e 100644
714     --- a/crypto/ablkcipher.c
715     +++ b/crypto/ablkcipher.c
716     @@ -368,6 +368,7 @@ static int crypto_ablkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
717     strncpy(rblkcipher.type, "ablkcipher", sizeof(rblkcipher.type));
718     strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<default>",
719     sizeof(rblkcipher.geniv));
720     + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
721    
722     rblkcipher.blocksize = alg->cra_blocksize;
723     rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
724     @@ -442,6 +443,7 @@ static int crypto_givcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
725     strncpy(rblkcipher.type, "givcipher", sizeof(rblkcipher.type));
726     strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<built-in>",
727     sizeof(rblkcipher.geniv));
728     + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
729    
730     rblkcipher.blocksize = alg->cra_blocksize;
731     rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
732     diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
733     index d84c6920ada9..830821f234d2 100644
734     --- a/crypto/blkcipher.c
735     +++ b/crypto/blkcipher.c
736     @@ -511,6 +511,7 @@ static int crypto_blkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
737     strncpy(rblkcipher.type, "blkcipher", sizeof(rblkcipher.type));
738     strncpy(rblkcipher.geniv, alg->cra_blkcipher.geniv ?: "<default>",
739     sizeof(rblkcipher.geniv));
740     + rblkcipher.geniv[sizeof(rblkcipher.geniv) - 1] = '\0';
741    
742     rblkcipher.blocksize = alg->cra_blocksize;
743     rblkcipher.min_keysize = alg->cra_blkcipher.min_keysize;
744     diff --git a/drivers/ata/pata_ftide010.c b/drivers/ata/pata_ftide010.c
745     index 5d4b72e21161..569a4a662dcd 100644
746     --- a/drivers/ata/pata_ftide010.c
747     +++ b/drivers/ata/pata_ftide010.c
748     @@ -256,14 +256,12 @@ static struct ata_port_operations pata_ftide010_port_ops = {
749     .qc_issue = ftide010_qc_issue,
750     };
751    
752     -static struct ata_port_info ftide010_port_info[] = {
753     - {
754     - .flags = ATA_FLAG_SLAVE_POSS,
755     - .mwdma_mask = ATA_MWDMA2,
756     - .udma_mask = ATA_UDMA6,
757     - .pio_mask = ATA_PIO4,
758     - .port_ops = &pata_ftide010_port_ops,
759     - },
760     +static struct ata_port_info ftide010_port_info = {
761     + .flags = ATA_FLAG_SLAVE_POSS,
762     + .mwdma_mask = ATA_MWDMA2,
763     + .udma_mask = ATA_UDMA6,
764     + .pio_mask = ATA_PIO4,
765     + .port_ops = &pata_ftide010_port_ops,
766     };
767    
768     #if IS_ENABLED(CONFIG_SATA_GEMINI)
769     @@ -349,6 +347,7 @@ static int pata_ftide010_gemini_cable_detect(struct ata_port *ap)
770     }
771    
772     static int pata_ftide010_gemini_init(struct ftide010 *ftide,
773     + struct ata_port_info *pi,
774     bool is_ata1)
775     {
776     struct device *dev = ftide->dev;
777     @@ -373,7 +372,13 @@ static int pata_ftide010_gemini_init(struct ftide010 *ftide,
778    
779     /* Flag port as SATA-capable */
780     if (gemini_sata_bridge_enabled(sg, is_ata1))
781     - ftide010_port_info[0].flags |= ATA_FLAG_SATA;
782     + pi->flags |= ATA_FLAG_SATA;
783     +
784     + /* This device has broken DMA, only PIO works */
785     + if (of_machine_is_compatible("itian,sq201")) {
786     + pi->mwdma_mask = 0;
787     + pi->udma_mask = 0;
788     + }
789    
790     /*
791     * We assume that a simple 40-wire cable is used in the PATA mode.
792     @@ -435,6 +440,7 @@ static int pata_ftide010_gemini_init(struct ftide010 *ftide,
793     }
794     #else
795     static int pata_ftide010_gemini_init(struct ftide010 *ftide,
796     + struct ata_port_info *pi,
797     bool is_ata1)
798     {
799     return -ENOTSUPP;
800     @@ -446,7 +452,7 @@ static int pata_ftide010_probe(struct platform_device *pdev)
801     {
802     struct device *dev = &pdev->dev;
803     struct device_node *np = dev->of_node;
804     - const struct ata_port_info pi = ftide010_port_info[0];
805     + struct ata_port_info pi = ftide010_port_info;
806     const struct ata_port_info *ppi[] = { &pi, NULL };
807     struct ftide010 *ftide;
808     struct resource *res;
809     @@ -490,6 +496,7 @@ static int pata_ftide010_probe(struct platform_device *pdev)
810     * are ATA0. This will also set up the cable types.
811     */
812     ret = pata_ftide010_gemini_init(ftide,
813     + &pi,
814     (res->start == 0x63400000));
815     if (ret)
816     goto err_dis_clk;
817     diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
818     index 60c086a53609..3d0287e212fe 100644
819     --- a/drivers/block/floppy.c
820     +++ b/drivers/block/floppy.c
821     @@ -3462,6 +3462,9 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
822     (struct floppy_struct **)&outparam);
823     if (ret)
824     return ret;
825     + memcpy(&inparam.g, outparam,
826     + offsetof(struct floppy_struct, name));
827     + outparam = &inparam.g;
828     break;
829     case FDMSGON:
830     UDP->flags |= FTD_MSG;
831     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
832     index 819521d5895e..b8dffe937f4f 100644
833     --- a/drivers/bluetooth/btusb.c
834     +++ b/drivers/bluetooth/btusb.c
835     @@ -375,6 +375,7 @@ static const struct usb_device_id blacklist_table[] = {
836     { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
837    
838     /* Additional Realtek 8723DE Bluetooth devices */
839     + { USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK },
840     { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK },
841    
842     /* Additional Realtek 8821AE Bluetooth devices */
843     diff --git a/drivers/crypto/cavium/nitrox/nitrox_dev.h b/drivers/crypto/cavium/nitrox/nitrox_dev.h
844     index 9a476bb6d4c7..af596455b420 100644
845     --- a/drivers/crypto/cavium/nitrox/nitrox_dev.h
846     +++ b/drivers/crypto/cavium/nitrox/nitrox_dev.h
847     @@ -35,6 +35,7 @@ struct nitrox_cmdq {
848     /* requests in backlog queues */
849     atomic_t backlog_count;
850    
851     + int write_idx;
852     /* command size 32B/64B */
853     u8 instr_size;
854     u8 qno;
855     @@ -87,7 +88,7 @@ struct nitrox_bh {
856     struct bh_data *slc;
857     };
858    
859     -/* NITROX-5 driver state */
860     +/* NITROX-V driver state */
861     #define NITROX_UCODE_LOADED 0
862     #define NITROX_READY 1
863    
864     diff --git a/drivers/crypto/cavium/nitrox/nitrox_lib.c b/drivers/crypto/cavium/nitrox/nitrox_lib.c
865     index 4fdc921ba611..9906c0086647 100644
866     --- a/drivers/crypto/cavium/nitrox/nitrox_lib.c
867     +++ b/drivers/crypto/cavium/nitrox/nitrox_lib.c
868     @@ -36,6 +36,7 @@ static int cmdq_common_init(struct nitrox_cmdq *cmdq)
869     cmdq->head = PTR_ALIGN(cmdq->head_unaligned, PKT_IN_ALIGN);
870     cmdq->dma = PTR_ALIGN(cmdq->dma_unaligned, PKT_IN_ALIGN);
871     cmdq->qsize = (qsize + PKT_IN_ALIGN);
872     + cmdq->write_idx = 0;
873    
874     spin_lock_init(&cmdq->response_lock);
875     spin_lock_init(&cmdq->cmdq_lock);
876     diff --git a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
877     index 4addc238a6ef..4adf28176a4e 100644
878     --- a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
879     +++ b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
880     @@ -43,6 +43,16 @@
881     * Invalid flag options in AES-CCM IV.
882     */
883    
884     +static inline int incr_index(int index, int count, int max)
885     +{
886     + if ((index + count) >= max)
887     + index = index + count - max;
888     + else
889     + index += count;
890     +
891     + return index;
892     +}
893     +
894     /**
895     * dma_free_sglist - unmap and free the sg lists.
896     * @ndev: N5 device
897     @@ -427,30 +437,29 @@ static void post_se_instr(struct nitrox_softreq *sr,
898     struct nitrox_cmdq *cmdq)
899     {
900     struct nitrox_device *ndev = sr->ndev;
901     - union nps_pkt_in_instr_baoff_dbell pkt_in_baoff_dbell;
902     - u64 offset;
903     + int idx;
904     u8 *ent;
905    
906     spin_lock_bh(&cmdq->cmdq_lock);
907    
908     - /* get the next write offset */
909     - offset = NPS_PKT_IN_INSTR_BAOFF_DBELLX(cmdq->qno);
910     - pkt_in_baoff_dbell.value = nitrox_read_csr(ndev, offset);
911     + idx = cmdq->write_idx;
912     /* copy the instruction */
913     - ent = cmdq->head + pkt_in_baoff_dbell.s.aoff;
914     + ent = cmdq->head + (idx * cmdq->instr_size);
915     memcpy(ent, &sr->instr, cmdq->instr_size);
916     - /* flush the command queue updates */
917     - dma_wmb();
918    
919     - sr->tstamp = jiffies;
920     atomic_set(&sr->status, REQ_POSTED);
921     response_list_add(sr, cmdq);
922     + sr->tstamp = jiffies;
923     + /* flush the command queue updates */
924     + dma_wmb();
925    
926     /* Ring doorbell with count 1 */
927     writeq(1, cmdq->dbell_csr_addr);
928     /* orders the doorbell rings */
929     mmiowb();
930    
931     + cmdq->write_idx = incr_index(idx, 1, ndev->qlen);
932     +
933     spin_unlock_bh(&cmdq->cmdq_lock);
934     }
935    
936     @@ -460,6 +469,9 @@ static int post_backlog_cmds(struct nitrox_cmdq *cmdq)
937     struct nitrox_softreq *sr, *tmp;
938     int ret = 0;
939    
940     + if (!atomic_read(&cmdq->backlog_count))
941     + return 0;
942     +
943     spin_lock_bh(&cmdq->backlog_lock);
944    
945     list_for_each_entry_safe(sr, tmp, &cmdq->backlog_head, backlog) {
946     @@ -467,7 +479,7 @@ static int post_backlog_cmds(struct nitrox_cmdq *cmdq)
947    
948     /* submit until space available */
949     if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
950     - ret = -EBUSY;
951     + ret = -ENOSPC;
952     break;
953     }
954     /* delete from backlog list */
955     @@ -492,23 +504,20 @@ static int nitrox_enqueue_request(struct nitrox_softreq *sr)
956     {
957     struct nitrox_cmdq *cmdq = sr->cmdq;
958     struct nitrox_device *ndev = sr->ndev;
959     - int ret = -EBUSY;
960     +
961     + /* try to post backlog requests */
962     + post_backlog_cmds(cmdq);
963    
964     if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
965     if (!(sr->flags & CRYPTO_TFM_REQ_MAY_BACKLOG))
966     - return -EAGAIN;
967     -
968     + return -ENOSPC;
969     + /* add to backlog list */
970     backlog_list_add(sr, cmdq);
971     - } else {
972     - ret = post_backlog_cmds(cmdq);
973     - if (ret) {
974     - backlog_list_add(sr, cmdq);
975     - return ret;
976     - }
977     - post_se_instr(sr, cmdq);
978     - ret = -EINPROGRESS;
979     + return -EBUSY;
980     }
981     - return ret;
982     + post_se_instr(sr, cmdq);
983     +
984     + return -EINPROGRESS;
985     }
986    
987     /**
988     @@ -625,11 +634,9 @@ int nitrox_process_se_request(struct nitrox_device *ndev,
989     */
990     sr->instr.fdata[0] = *((u64 *)&req->gph);
991     sr->instr.fdata[1] = 0;
992     - /* flush the soft_req changes before posting the cmd */
993     - wmb();
994    
995     ret = nitrox_enqueue_request(sr);
996     - if (ret == -EAGAIN)
997     + if (ret == -ENOSPC)
998     goto send_fail;
999    
1000     return ret;
1001     diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
1002     index e4fcfa84fbd3..79c13301bf41 100644
1003     --- a/drivers/edac/edac_mc_sysfs.c
1004     +++ b/drivers/edac/edac_mc_sysfs.c
1005     @@ -1097,14 +1097,14 @@ int __init edac_mc_sysfs_init(void)
1006    
1007     err = device_add(mci_pdev);
1008     if (err < 0)
1009     - goto out_dev_free;
1010     + goto out_put_device;
1011    
1012     edac_dbg(0, "device %s created\n", dev_name(mci_pdev));
1013    
1014     return 0;
1015    
1016     - out_dev_free:
1017     - kfree(mci_pdev);
1018     + out_put_device:
1019     + put_device(mci_pdev);
1020     out:
1021     return err;
1022     }
1023     diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
1024     index c16c3b931b3d..6c7d5f20eacb 100644
1025     --- a/drivers/edac/i7core_edac.c
1026     +++ b/drivers/edac/i7core_edac.c
1027     @@ -1177,15 +1177,14 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
1028    
1029     rc = device_add(pvt->addrmatch_dev);
1030     if (rc < 0)
1031     - return rc;
1032     + goto err_put_addrmatch;
1033    
1034     if (!pvt->is_registered) {
1035     pvt->chancounts_dev = kzalloc(sizeof(*pvt->chancounts_dev),
1036     GFP_KERNEL);
1037     if (!pvt->chancounts_dev) {
1038     - put_device(pvt->addrmatch_dev);
1039     - device_del(pvt->addrmatch_dev);
1040     - return -ENOMEM;
1041     + rc = -ENOMEM;
1042     + goto err_del_addrmatch;
1043     }
1044    
1045     pvt->chancounts_dev->type = &all_channel_counts_type;
1046     @@ -1199,9 +1198,18 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
1047    
1048     rc = device_add(pvt->chancounts_dev);
1049     if (rc < 0)
1050     - return rc;
1051     + goto err_put_chancounts;
1052     }
1053     return 0;
1054     +
1055     +err_put_chancounts:
1056     + put_device(pvt->chancounts_dev);
1057     +err_del_addrmatch:
1058     + device_del(pvt->addrmatch_dev);
1059     +err_put_addrmatch:
1060     + put_device(pvt->addrmatch_dev);
1061     +
1062     + return rc;
1063     }
1064    
1065     static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
1066     @@ -1211,11 +1219,11 @@ static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
1067     edac_dbg(1, "\n");
1068    
1069     if (!pvt->is_registered) {
1070     - put_device(pvt->chancounts_dev);
1071     device_del(pvt->chancounts_dev);
1072     + put_device(pvt->chancounts_dev);
1073     }
1074     - put_device(pvt->addrmatch_dev);
1075     device_del(pvt->addrmatch_dev);
1076     + put_device(pvt->addrmatch_dev);
1077     }
1078    
1079     /****************************************************************************
1080     diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c
1081     index e1037582e34d..b2635326546e 100644
1082     --- a/drivers/gpio/gpio-menz127.c
1083     +++ b/drivers/gpio/gpio-menz127.c
1084     @@ -56,9 +56,9 @@ static int men_z127_debounce(struct gpio_chip *gc, unsigned gpio,
1085     rnd = fls(debounce) - 1;
1086    
1087     if (rnd && (debounce & BIT(rnd - 1)))
1088     - debounce = round_up(debounce, MEN_Z127_DB_MIN_US);
1089     + debounce = roundup(debounce, MEN_Z127_DB_MIN_US);
1090     else
1091     - debounce = round_down(debounce, MEN_Z127_DB_MIN_US);
1092     + debounce = rounddown(debounce, MEN_Z127_DB_MIN_US);
1093    
1094     if (debounce > MEN_Z127_DB_MAX_US)
1095     debounce = MEN_Z127_DB_MAX_US;
1096     diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
1097     index a7e54820a330..85bcd236890e 100644
1098     --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
1099     +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
1100     @@ -5479,6 +5479,11 @@ static int gfx_v8_0_set_powergating_state(void *handle,
1101     if (amdgpu_sriov_vf(adev))
1102     return 0;
1103    
1104     + if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_SMG |
1105     + AMD_PG_SUPPORT_RLC_SMU_HS |
1106     + AMD_PG_SUPPORT_CP |
1107     + AMD_PG_SUPPORT_GFX_DMG))
1108     + adev->gfx.rlc.funcs->enter_safe_mode(adev);
1109     switch (adev->asic_type) {
1110     case CHIP_CARRIZO:
1111     case CHIP_STONEY:
1112     @@ -5527,7 +5532,11 @@ static int gfx_v8_0_set_powergating_state(void *handle,
1113     default:
1114     break;
1115     }
1116     -
1117     + if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_SMG |
1118     + AMD_PG_SUPPORT_RLC_SMU_HS |
1119     + AMD_PG_SUPPORT_CP |
1120     + AMD_PG_SUPPORT_GFX_DMG))
1121     + adev->gfx.rlc.funcs->exit_safe_mode(adev);
1122     return 0;
1123     }
1124    
1125     diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
1126     index 3bbf2ccfca89..c76073b422d6 100644
1127     --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
1128     +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
1129     @@ -1352,8 +1352,6 @@ static int kv_dpm_enable(struct amdgpu_device *adev)
1130     return ret;
1131     }
1132    
1133     - kv_update_current_ps(adev, adev->pm.dpm.boot_ps);
1134     -
1135     if (adev->irq.installed &&
1136     amdgpu_is_internal_thermal_sensor(adev->pm.int_thermal_type)) {
1137     ret = kv_set_thermal_temperature_range(adev, KV_TEMP_RANGE_MIN, KV_TEMP_RANGE_MAX);
1138     @@ -3054,7 +3052,7 @@ static int kv_dpm_hw_init(void *handle)
1139     else
1140     adev->pm.dpm_enabled = true;
1141     mutex_unlock(&adev->pm.mutex);
1142     -
1143     + amdgpu_pm_compute_clocks(adev);
1144     return ret;
1145     }
1146    
1147     diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
1148     index 6f1dea157a77..55613f425931 100644
1149     --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
1150     +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
1151     @@ -6884,7 +6884,6 @@ static int si_dpm_enable(struct amdgpu_device *adev)
1152    
1153     si_enable_auto_throttle_source(adev, AMDGPU_DPM_AUTO_THROTTLE_SRC_THERMAL, true);
1154     si_thermal_start_thermal_controller(adev);
1155     - ni_update_current_ps(adev, boot_ps);
1156    
1157     return 0;
1158     }
1159     @@ -7758,7 +7757,7 @@ static int si_dpm_hw_init(void *handle)
1160     else
1161     adev->pm.dpm_enabled = true;
1162     mutex_unlock(&adev->pm.mutex);
1163     -
1164     + amdgpu_pm_compute_clocks(adev);
1165     return ret;
1166     }
1167    
1168     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1169     index 3c0ce3ee0710..f354cfe63f7b 100644
1170     --- a/drivers/gpu/drm/i915/i915_gem.c
1171     +++ b/drivers/gpu/drm/i915/i915_gem.c
1172     @@ -3608,7 +3608,8 @@ restart:
1173     return -EBUSY;
1174     }
1175    
1176     - if (i915_gem_valid_gtt_space(vma, cache_level))
1177     + if (!i915_vma_is_closed(vma) &&
1178     + i915_gem_valid_gtt_space(vma, cache_level))
1179     continue;
1180    
1181     ret = i915_vma_unbind(vma);
1182     diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
1183     index 02d1a5eacb00..76eed1fdac09 100644
1184     --- a/drivers/gpu/drm/i915/i915_vma.c
1185     +++ b/drivers/gpu/drm/i915/i915_vma.c
1186     @@ -430,6 +430,7 @@ i915_vma_insert(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
1187     u64 start, end;
1188     int ret;
1189    
1190     + GEM_BUG_ON(i915_vma_is_closed(vma));
1191     GEM_BUG_ON(vma->flags & (I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND));
1192     GEM_BUG_ON(drm_mm_node_allocated(&vma->node));
1193    
1194     @@ -590,7 +591,9 @@ static void i915_vma_destroy(struct i915_vma *vma)
1195     GEM_BUG_ON(i915_gem_active_isset(&vma->last_read[i]));
1196     GEM_BUG_ON(i915_gem_active_isset(&vma->last_fence));
1197    
1198     + list_del(&vma->obj_link);
1199     list_del(&vma->vm_link);
1200     +
1201     if (!i915_vma_is_ggtt(vma))
1202     i915_ppgtt_put(i915_vm_to_ppgtt(vma->vm));
1203    
1204     @@ -602,7 +605,6 @@ void i915_vma_close(struct i915_vma *vma)
1205     GEM_BUG_ON(i915_vma_is_closed(vma));
1206     vma->flags |= I915_VMA_CLOSED;
1207    
1208     - list_del(&vma->obj_link);
1209     rb_erase(&vma->obj_node, &vma->obj->vma_tree);
1210    
1211     if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma))
1212     diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
1213     index ace59651892f..8d3c8070ed86 100644
1214     --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
1215     +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
1216     @@ -241,7 +241,6 @@ static int sun4i_drv_add_endpoints(struct device *dev,
1217     remote = of_graph_get_remote_port_parent(ep);
1218     if (!remote) {
1219     DRM_DEBUG_DRIVER("Error retrieving the output node\n");
1220     - of_node_put(remote);
1221     continue;
1222     }
1223    
1224     @@ -255,11 +254,13 @@ static int sun4i_drv_add_endpoints(struct device *dev,
1225    
1226     if (of_graph_parse_endpoint(ep, &endpoint)) {
1227     DRM_DEBUG_DRIVER("Couldn't parse endpoint\n");
1228     + of_node_put(remote);
1229     continue;
1230     }
1231    
1232     if (!endpoint.id) {
1233     DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n");
1234     + of_node_put(remote);
1235     continue;
1236     }
1237     }
1238     diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c
1239     index 3d121d8ee980..5d2d746e35f6 100644
1240     --- a/drivers/hid/hid-ntrig.c
1241     +++ b/drivers/hid/hid-ntrig.c
1242     @@ -955,6 +955,8 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
1243    
1244     ret = sysfs_create_group(&hdev->dev.kobj,
1245     &ntrig_attribute_group);
1246     + if (ret)
1247     + hid_err(hdev, "cannot create sysfs group\n");
1248    
1249     return 0;
1250     err_free:
1251     diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
1252     index 9ef84998c7f3..37db2eb66ed7 100644
1253     --- a/drivers/hwmon/adt7475.c
1254     +++ b/drivers/hwmon/adt7475.c
1255     @@ -303,14 +303,18 @@ static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
1256     return clamp_val(reg, 0, 1023) & (0xff << 2);
1257     }
1258    
1259     -static u16 adt7475_read_word(struct i2c_client *client, int reg)
1260     +static int adt7475_read_word(struct i2c_client *client, int reg)
1261     {
1262     - u16 val;
1263     + int val1, val2;
1264    
1265     - val = i2c_smbus_read_byte_data(client, reg);
1266     - val |= (i2c_smbus_read_byte_data(client, reg + 1) << 8);
1267     + val1 = i2c_smbus_read_byte_data(client, reg);
1268     + if (val1 < 0)
1269     + return val1;
1270     + val2 = i2c_smbus_read_byte_data(client, reg + 1);
1271     + if (val2 < 0)
1272     + return val2;
1273    
1274     - return val;
1275     + return val1 | (val2 << 8);
1276     }
1277    
1278     static void adt7475_write_word(struct i2c_client *client, int reg, u16 val)
1279     diff --git a/drivers/hwmon/ina2xx.c b/drivers/hwmon/ina2xx.c
1280     index e9e6aeabbf84..71d3445ba869 100644
1281     --- a/drivers/hwmon/ina2xx.c
1282     +++ b/drivers/hwmon/ina2xx.c
1283     @@ -17,7 +17,7 @@
1284     * Bi-directional Current/Power Monitor with I2C Interface
1285     * Datasheet: http://www.ti.com/product/ina230
1286     *
1287     - * Copyright (C) 2012 Lothar Felten <l-felten@ti.com>
1288     + * Copyright (C) 2012 Lothar Felten <lothar.felten@gmail.com>
1289     * Thanks to Jan Volkering
1290     *
1291     * This program is free software; you can redistribute it and/or modify
1292     @@ -329,6 +329,15 @@ static int ina2xx_set_shunt(struct ina2xx_data *data, long val)
1293     return 0;
1294     }
1295    
1296     +static ssize_t ina2xx_show_shunt(struct device *dev,
1297     + struct device_attribute *da,
1298     + char *buf)
1299     +{
1300     + struct ina2xx_data *data = dev_get_drvdata(dev);
1301     +
1302     + return snprintf(buf, PAGE_SIZE, "%li\n", data->rshunt);
1303     +}
1304     +
1305     static ssize_t ina2xx_store_shunt(struct device *dev,
1306     struct device_attribute *da,
1307     const char *buf, size_t count)
1308     @@ -403,7 +412,7 @@ static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ina2xx_show_value, NULL,
1309    
1310     /* shunt resistance */
1311     static SENSOR_DEVICE_ATTR(shunt_resistor, S_IRUGO | S_IWUSR,
1312     - ina2xx_show_value, ina2xx_store_shunt,
1313     + ina2xx_show_shunt, ina2xx_store_shunt,
1314     INA2XX_CALIBRATION);
1315    
1316     /* update interval (ina226 only) */
1317     diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
1318     index c1793313bb08..757801d27604 100644
1319     --- a/drivers/hwtracing/intel_th/core.c
1320     +++ b/drivers/hwtracing/intel_th/core.c
1321     @@ -147,7 +147,8 @@ static int intel_th_remove(struct device *dev)
1322     th->thdev[i] = NULL;
1323     }
1324    
1325     - th->num_thdevs = lowest;
1326     + if (lowest >= 0)
1327     + th->num_thdevs = lowest;
1328     }
1329    
1330     if (thdrv->attr_group)
1331     diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
1332     index 67cbd9f61acc..06debfa903b9 100644
1333     --- a/drivers/i2c/busses/i2c-i801.c
1334     +++ b/drivers/i2c/busses/i2c-i801.c
1335     @@ -1416,6 +1416,13 @@ static void i801_add_tco(struct i801_priv *priv)
1336     }
1337    
1338     #ifdef CONFIG_ACPI
1339     +static bool i801_acpi_is_smbus_ioport(const struct i801_priv *priv,
1340     + acpi_physical_address address)
1341     +{
1342     + return address >= priv->smba &&
1343     + address <= pci_resource_end(priv->pci_dev, SMBBAR);
1344     +}
1345     +
1346     static acpi_status
1347     i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
1348     u64 *value, void *handler_context, void *region_context)
1349     @@ -1431,7 +1438,7 @@ i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
1350     */
1351     mutex_lock(&priv->acpi_lock);
1352    
1353     - if (!priv->acpi_reserved) {
1354     + if (!priv->acpi_reserved && i801_acpi_is_smbus_ioport(priv, address)) {
1355     priv->acpi_reserved = true;
1356    
1357     dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n");
1358     diff --git a/drivers/iio/accel/adxl345_core.c b/drivers/iio/accel/adxl345_core.c
1359     index 9ccb5828db98..3dda7afe8a11 100644
1360     --- a/drivers/iio/accel/adxl345_core.c
1361     +++ b/drivers/iio/accel/adxl345_core.c
1362     @@ -21,6 +21,8 @@
1363     #define ADXL345_REG_DATAX0 0x32
1364     #define ADXL345_REG_DATAY0 0x34
1365     #define ADXL345_REG_DATAZ0 0x36
1366     +#define ADXL345_REG_DATA_AXIS(index) \
1367     + (ADXL345_REG_DATAX0 + (index) * sizeof(__le16))
1368    
1369     #define ADXL345_POWER_CTL_MEASURE BIT(3)
1370     #define ADXL345_POWER_CTL_STANDBY 0x00
1371     @@ -47,19 +49,19 @@ struct adxl345_data {
1372     u8 data_range;
1373     };
1374    
1375     -#define ADXL345_CHANNEL(reg, axis) { \
1376     +#define ADXL345_CHANNEL(index, axis) { \
1377     .type = IIO_ACCEL, \
1378     .modified = 1, \
1379     .channel2 = IIO_MOD_##axis, \
1380     - .address = reg, \
1381     + .address = index, \
1382     .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
1383     .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
1384     }
1385    
1386     static const struct iio_chan_spec adxl345_channels[] = {
1387     - ADXL345_CHANNEL(ADXL345_REG_DATAX0, X),
1388     - ADXL345_CHANNEL(ADXL345_REG_DATAY0, Y),
1389     - ADXL345_CHANNEL(ADXL345_REG_DATAZ0, Z),
1390     + ADXL345_CHANNEL(0, X),
1391     + ADXL345_CHANNEL(1, Y),
1392     + ADXL345_CHANNEL(2, Z),
1393     };
1394    
1395     static int adxl345_read_raw(struct iio_dev *indio_dev,
1396     @@ -67,7 +69,7 @@ static int adxl345_read_raw(struct iio_dev *indio_dev,
1397     int *val, int *val2, long mask)
1398     {
1399     struct adxl345_data *data = iio_priv(indio_dev);
1400     - __le16 regval;
1401     + __le16 accel;
1402     int ret;
1403    
1404     switch (mask) {
1405     @@ -77,12 +79,13 @@ static int adxl345_read_raw(struct iio_dev *indio_dev,
1406     * ADXL345_REG_DATA(X0/Y0/Z0) contain the least significant byte
1407     * and ADXL345_REG_DATA(X0/Y0/Z0) + 1 the most significant byte
1408     */
1409     - ret = regmap_bulk_read(data->regmap, chan->address, &regval,
1410     - sizeof(regval));
1411     + ret = regmap_bulk_read(data->regmap,
1412     + ADXL345_REG_DATA_AXIS(chan->address),
1413     + &accel, sizeof(accel));
1414     if (ret < 0)
1415     return ret;
1416    
1417     - *val = sign_extend32(le16_to_cpu(regval), 12);
1418     + *val = sign_extend32(le16_to_cpu(accel), 12);
1419     return IIO_VAL_INT;
1420     case IIO_CHAN_INFO_SCALE:
1421     *val = 0;
1422     diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c
1423     index 59f99b3a180d..d5b9f831eba7 100644
1424     --- a/drivers/iio/adc/ina2xx-adc.c
1425     +++ b/drivers/iio/adc/ina2xx-adc.c
1426     @@ -30,6 +30,7 @@
1427     #include <linux/module.h>
1428     #include <linux/of_device.h>
1429     #include <linux/regmap.h>
1430     +#include <linux/sched/task.h>
1431     #include <linux/util_macros.h>
1432    
1433     #include <linux/platform_data/ina2xx.h>
1434     @@ -701,6 +702,7 @@ static int ina2xx_buffer_enable(struct iio_dev *indio_dev)
1435     {
1436     struct ina2xx_chip_info *chip = iio_priv(indio_dev);
1437     unsigned int sampling_us = SAMPLING_PERIOD(chip);
1438     + struct task_struct *task;
1439    
1440     dev_dbg(&indio_dev->dev, "Enabling buffer w/ scan_mask %02x, freq = %d, avg =%u\n",
1441     (unsigned int)(*indio_dev->active_scan_mask),
1442     @@ -710,11 +712,17 @@ static int ina2xx_buffer_enable(struct iio_dev *indio_dev)
1443     dev_dbg(&indio_dev->dev, "Async readout mode: %d\n",
1444     chip->allow_async_readout);
1445    
1446     - chip->task = kthread_run(ina2xx_capture_thread, (void *)indio_dev,
1447     - "%s:%d-%uus", indio_dev->name, indio_dev->id,
1448     - sampling_us);
1449     + task = kthread_create(ina2xx_capture_thread, (void *)indio_dev,
1450     + "%s:%d-%uus", indio_dev->name, indio_dev->id,
1451     + sampling_us);
1452     + if (IS_ERR(task))
1453     + return PTR_ERR(task);
1454     +
1455     + get_task_struct(task);
1456     + wake_up_process(task);
1457     + chip->task = task;
1458    
1459     - return PTR_ERR_OR_ZERO(chip->task);
1460     + return 0;
1461     }
1462    
1463     static int ina2xx_buffer_disable(struct iio_dev *indio_dev)
1464     @@ -723,6 +731,7 @@ static int ina2xx_buffer_disable(struct iio_dev *indio_dev)
1465    
1466     if (chip->task) {
1467     kthread_stop(chip->task);
1468     + put_task_struct(chip->task);
1469     chip->task = NULL;
1470     }
1471    
1472     diff --git a/drivers/iio/counter/104-quad-8.c b/drivers/iio/counter/104-quad-8.c
1473     index ba3d9030cd51..181585ae6e17 100644
1474     --- a/drivers/iio/counter/104-quad-8.c
1475     +++ b/drivers/iio/counter/104-quad-8.c
1476     @@ -138,7 +138,7 @@ static int quad8_write_raw(struct iio_dev *indio_dev,
1477     outb(val >> (8 * i), base_offset);
1478    
1479     /* Reset Borrow, Carry, Compare, and Sign flags */
1480     - outb(0x02, base_offset + 1);
1481     + outb(0x04, base_offset + 1);
1482     /* Reset Error flag */
1483     outb(0x06, base_offset + 1);
1484    
1485     diff --git a/drivers/infiniband/core/rw.c b/drivers/infiniband/core/rw.c
1486     index 6ca607e8e293..9939dcfb1b6a 100644
1487     --- a/drivers/infiniband/core/rw.c
1488     +++ b/drivers/infiniband/core/rw.c
1489     @@ -87,7 +87,7 @@ static int rdma_rw_init_one_mr(struct ib_qp *qp, u8 port_num,
1490     }
1491    
1492     ret = ib_map_mr_sg(reg->mr, sg, nents, &offset, PAGE_SIZE);
1493     - if (ret < nents) {
1494     + if (ret < 0 || ret < nents) {
1495     ib_mr_pool_put(qp, &qp->rdma_mrs, reg->mr);
1496     return -EINVAL;
1497     }
1498     diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
1499     index 0f70ff91276e..aff6ef3ad52c 100644
1500     --- a/drivers/infiniband/core/uverbs_main.c
1501     +++ b/drivers/infiniband/core/uverbs_main.c
1502     @@ -424,6 +424,7 @@ static int ib_uverbs_comp_event_close(struct inode *inode, struct file *filp)
1503     list_del(&entry->obj_list);
1504     kfree(entry);
1505     }
1506     + file->ev_queue.is_closed = 1;
1507     spin_unlock_irq(&file->ev_queue.lock);
1508    
1509     uverbs_close_fd(filp);
1510     diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
1511     index 9536de8c5fb8..124c8915b9ee 100644
1512     --- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
1513     +++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
1514     @@ -156,7 +156,7 @@ int bnxt_qplib_get_sgid(struct bnxt_qplib_res *res,
1515     struct bnxt_qplib_sgid_tbl *sgid_tbl, int index,
1516     struct bnxt_qplib_gid *gid)
1517     {
1518     - if (index > sgid_tbl->max) {
1519     + if (index >= sgid_tbl->max) {
1520     dev_err(&res->pdev->dev,
1521     "QPLIB: Index %d exceeded SGID table max (%d)",
1522     index, sgid_tbl->max);
1523     @@ -361,7 +361,7 @@ int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
1524     *pkey = 0xFFFF;
1525     return 0;
1526     }
1527     - if (index > pkey_tbl->max) {
1528     + if (index >= pkey_tbl->max) {
1529     dev_err(&res->pdev->dev,
1530     "QPLIB: Index %d exceeded PKEY table max (%d)",
1531     index, pkey_tbl->max);
1532     diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
1533     index a95ac6246559..19a8e6052820 100644
1534     --- a/drivers/infiniband/hw/hfi1/pio.c
1535     +++ b/drivers/infiniband/hw/hfi1/pio.c
1536     @@ -86,6 +86,7 @@ void pio_send_control(struct hfi1_devdata *dd, int op)
1537     unsigned long flags;
1538     int write = 1; /* write sendctrl back */
1539     int flush = 0; /* re-read sendctrl to make sure it is flushed */
1540     + int i;
1541    
1542     spin_lock_irqsave(&dd->sendctrl_lock, flags);
1543    
1544     @@ -95,9 +96,13 @@ void pio_send_control(struct hfi1_devdata *dd, int op)
1545     reg |= SEND_CTRL_SEND_ENABLE_SMASK;
1546     /* Fall through */
1547     case PSC_DATA_VL_ENABLE:
1548     + mask = 0;
1549     + for (i = 0; i < ARRAY_SIZE(dd->vld); i++)
1550     + if (!dd->vld[i].mtu)
1551     + mask |= BIT_ULL(i);
1552     /* Disallow sending on VLs not enabled */
1553     - mask = (((~0ull) << num_vls) & SEND_CTRL_UNSUPPORTED_VL_MASK) <<
1554     - SEND_CTRL_UNSUPPORTED_VL_SHIFT;
1555     + mask = (mask & SEND_CTRL_UNSUPPORTED_VL_MASK) <<
1556     + SEND_CTRL_UNSUPPORTED_VL_SHIFT;
1557     reg = (reg & ~SEND_CTRL_UNSUPPORTED_VL_SMASK) | mask;
1558     break;
1559     case PSC_GLOBAL_DISABLE:
1560     diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c
1561     index c0c0e0445cbf..8c954a0ae3b6 100644
1562     --- a/drivers/infiniband/hw/hfi1/user_sdma.c
1563     +++ b/drivers/infiniband/hw/hfi1/user_sdma.c
1564     @@ -828,7 +828,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
1565     if (ACCESS_ONCE(iovec->offset) == iovec->iov.iov_len) {
1566     if (++req->iov_idx == req->data_iovs) {
1567     ret = -EFAULT;
1568     - goto free_txreq;
1569     + goto free_tx;
1570     }
1571     iovec = &req->iovs[req->iov_idx];
1572     WARN_ON(iovec->offset);
1573     diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
1574     index e232f3c608b4..63d404a6752a 100644
1575     --- a/drivers/infiniband/hw/hfi1/verbs.c
1576     +++ b/drivers/infiniband/hw/hfi1/verbs.c
1577     @@ -1573,6 +1573,7 @@ static int hfi1_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr)
1578     struct hfi1_pportdata *ppd;
1579     struct hfi1_devdata *dd;
1580     u8 sc5;
1581     + u8 sl;
1582    
1583     if (hfi1_check_mcast(rdma_ah_get_dlid(ah_attr)) &&
1584     !(rdma_ah_get_ah_flags(ah_attr) & IB_AH_GRH))
1585     @@ -1581,8 +1582,13 @@ static int hfi1_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr)
1586     /* test the mapping for validity */
1587     ibp = to_iport(ibdev, rdma_ah_get_port_num(ah_attr));
1588     ppd = ppd_from_ibp(ibp);
1589     - sc5 = ibp->sl_to_sc[rdma_ah_get_sl(ah_attr)];
1590     dd = dd_from_ppd(ppd);
1591     +
1592     + sl = rdma_ah_get_sl(ah_attr);
1593     + if (sl >= ARRAY_SIZE(ibp->sl_to_sc))
1594     + return -EINVAL;
1595     +
1596     + sc5 = ibp->sl_to_sc[sl];
1597     if (sc_to_vlt(dd, sc5) > num_vls && sc_to_vlt(dd, sc5) != 0xf)
1598     return -EINVAL;
1599     return 0;
1600     diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
1601     index b7961f21b555..39398dd074d6 100644
1602     --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
1603     +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
1604     @@ -1408,6 +1408,7 @@ static void i40iw_set_hugetlb_values(u64 addr, struct i40iw_mr *iwmr)
1605     struct vm_area_struct *vma;
1606     struct hstate *h;
1607    
1608     + down_read(&current->mm->mmap_sem);
1609     vma = find_vma(current->mm, addr);
1610     if (vma && is_vm_hugetlb_page(vma)) {
1611     h = hstate_vma(vma);
1612     @@ -1416,6 +1417,7 @@ static void i40iw_set_hugetlb_values(u64 addr, struct i40iw_mr *iwmr)
1613     iwmr->page_msk = huge_page_mask(h);
1614     }
1615     }
1616     + up_read(&current->mm->mmap_sem);
1617     }
1618    
1619     /**
1620     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
1621     index 9354fec8efe7..e10c3d915e38 100644
1622     --- a/drivers/infiniband/hw/mlx4/qp.c
1623     +++ b/drivers/infiniband/hw/mlx4/qp.c
1624     @@ -4014,9 +4014,9 @@ static void to_rdma_ah_attr(struct mlx4_ib_dev *ibdev,
1625     u8 port_num = path->sched_queue & 0x40 ? 2 : 1;
1626    
1627     memset(ah_attr, 0, sizeof(*ah_attr));
1628     - ah_attr->type = rdma_ah_find_type(&ibdev->ib_dev, port_num);
1629     if (port_num == 0 || port_num > dev->caps.num_ports)
1630     return;
1631     + ah_attr->type = rdma_ah_find_type(&ibdev->ib_dev, port_num);
1632    
1633     if (ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE)
1634     rdma_ah_set_sl(ah_attr, ((path->sched_queue >> 3) & 0x7) |
1635     diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
1636     index 299a97b7e17f..ade98c234dcb 100644
1637     --- a/drivers/infiniband/ulp/srp/ib_srp.c
1638     +++ b/drivers/infiniband/ulp/srp/ib_srp.c
1639     @@ -2669,7 +2669,7 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
1640     {
1641     struct srp_target_port *target = host_to_target(scmnd->device->host);
1642     struct srp_rdma_ch *ch;
1643     - int i;
1644     + int i, j;
1645     u8 status;
1646    
1647     shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
1648     @@ -2683,8 +2683,8 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
1649    
1650     for (i = 0; i < target->ch_count; i++) {
1651     ch = &target->ch[i];
1652     - for (i = 0; i < target->req_ring_size; ++i) {
1653     - struct srp_request *req = &ch->req_ring[i];
1654     + for (j = 0; j < target->req_ring_size; ++j) {
1655     + struct srp_request *req = &ch->req_ring[j];
1656    
1657     srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
1658     }
1659     diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
1660     index d91f3b1c5375..92d739649022 100644
1661     --- a/drivers/input/misc/xen-kbdfront.c
1662     +++ b/drivers/input/misc/xen-kbdfront.c
1663     @@ -229,7 +229,7 @@ static int xenkbd_probe(struct xenbus_device *dev,
1664     }
1665     }
1666    
1667     - touch = xenbus_read_unsigned(dev->nodename,
1668     + touch = xenbus_read_unsigned(dev->otherend,
1669     XENKBD_FIELD_FEAT_MTOUCH, 0);
1670     if (touch) {
1671     ret = xenbus_write(XBT_NIL, dev->nodename,
1672     @@ -304,13 +304,13 @@ static int xenkbd_probe(struct xenbus_device *dev,
1673     if (!mtouch)
1674     goto error_nomem;
1675    
1676     - num_cont = xenbus_read_unsigned(info->xbdev->nodename,
1677     + num_cont = xenbus_read_unsigned(info->xbdev->otherend,
1678     XENKBD_FIELD_MT_NUM_CONTACTS,
1679     1);
1680     - width = xenbus_read_unsigned(info->xbdev->nodename,
1681     + width = xenbus_read_unsigned(info->xbdev->otherend,
1682     XENKBD_FIELD_MT_WIDTH,
1683     XENFB_WIDTH);
1684     - height = xenbus_read_unsigned(info->xbdev->nodename,
1685     + height = xenbus_read_unsigned(info->xbdev->otherend,
1686     XENKBD_FIELD_MT_HEIGHT,
1687     XENFB_HEIGHT);
1688    
1689     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
1690     index a250f433eb96..84c69e962230 100644
1691     --- a/drivers/input/mouse/elantech.c
1692     +++ b/drivers/input/mouse/elantech.c
1693     @@ -1180,6 +1180,8 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
1694     static const char * const middle_button_pnp_ids[] = {
1695     "LEN2131", /* ThinkPad P52 w/ NFC */
1696     "LEN2132", /* ThinkPad P52 */
1697     + "LEN2133", /* ThinkPad P72 w/ NFC */
1698     + "LEN2134", /* ThinkPad P72 */
1699     NULL
1700     };
1701    
1702     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
1703     index 10190e361a13..01746e7b90de 100644
1704     --- a/drivers/iommu/amd_iommu.c
1705     +++ b/drivers/iommu/amd_iommu.c
1706     @@ -2400,9 +2400,9 @@ static void __unmap_single(struct dma_ops_domain *dma_dom,
1707     }
1708    
1709     if (amd_iommu_unmap_flush) {
1710     - dma_ops_free_iova(dma_dom, dma_addr, pages);
1711     domain_flush_tlb(&dma_dom->domain);
1712     domain_flush_complete(&dma_dom->domain);
1713     + dma_ops_free_iova(dma_dom, dma_addr, pages);
1714     } else {
1715     pages = __roundup_pow_of_two(pages);
1716     queue_iova(&dma_dom->iovad, dma_addr >> PAGE_SHIFT, pages, 0);
1717     diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
1718     index 04f4d51ffacb..92c8c83ce38c 100644
1719     --- a/drivers/iommu/msm_iommu.c
1720     +++ b/drivers/iommu/msm_iommu.c
1721     @@ -395,20 +395,15 @@ static int msm_iommu_add_device(struct device *dev)
1722     struct msm_iommu_dev *iommu;
1723     struct iommu_group *group;
1724     unsigned long flags;
1725     - int ret = 0;
1726    
1727     spin_lock_irqsave(&msm_iommu_lock, flags);
1728     -
1729     iommu = find_iommu_for_dev(dev);
1730     + spin_unlock_irqrestore(&msm_iommu_lock, flags);
1731     +
1732     if (iommu)
1733     iommu_device_link(&iommu->iommu, dev);
1734     else
1735     - ret = -ENODEV;
1736     -
1737     - spin_unlock_irqrestore(&msm_iommu_lock, flags);
1738     -
1739     - if (ret)
1740     - return ret;
1741     + return -ENODEV;
1742    
1743     group = iommu_group_get_for_dev(dev);
1744     if (IS_ERR(group))
1745     @@ -425,13 +420,12 @@ static void msm_iommu_remove_device(struct device *dev)
1746     unsigned long flags;
1747    
1748     spin_lock_irqsave(&msm_iommu_lock, flags);
1749     -
1750     iommu = find_iommu_for_dev(dev);
1751     + spin_unlock_irqrestore(&msm_iommu_lock, flags);
1752     +
1753     if (iommu)
1754     iommu_device_unlink(&iommu->iommu, dev);
1755    
1756     - spin_unlock_irqrestore(&msm_iommu_lock, flags);
1757     -
1758     iommu_group_remove_device(dev);
1759     }
1760    
1761     diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
1762     index 72ce0bccc865..717aaffc227d 100644
1763     --- a/drivers/md/md-cluster.c
1764     +++ b/drivers/md/md-cluster.c
1765     @@ -304,15 +304,6 @@ static void recover_bitmaps(struct md_thread *thread)
1766     while (cinfo->recovery_map) {
1767     slot = fls64((u64)cinfo->recovery_map) - 1;
1768    
1769     - /* Clear suspend_area associated with the bitmap */
1770     - spin_lock_irq(&cinfo->suspend_lock);
1771     - list_for_each_entry_safe(s, tmp, &cinfo->suspend_list, list)
1772     - if (slot == s->slot) {
1773     - list_del(&s->list);
1774     - kfree(s);
1775     - }
1776     - spin_unlock_irq(&cinfo->suspend_lock);
1777     -
1778     snprintf(str, 64, "bitmap%04d", slot);
1779     bm_lockres = lockres_init(mddev, str, NULL, 1);
1780     if (!bm_lockres) {
1781     @@ -331,6 +322,16 @@ static void recover_bitmaps(struct md_thread *thread)
1782     pr_err("md-cluster: Could not copy data from bitmap %d\n", slot);
1783     goto clear_bit;
1784     }
1785     +
1786     + /* Clear suspend_area associated with the bitmap */
1787     + spin_lock_irq(&cinfo->suspend_lock);
1788     + list_for_each_entry_safe(s, tmp, &cinfo->suspend_list, list)
1789     + if (slot == s->slot) {
1790     + list_del(&s->list);
1791     + kfree(s);
1792     + }
1793     + spin_unlock_irq(&cinfo->suspend_lock);
1794     +
1795     if (hi > 0) {
1796     if (lo < mddev->recovery_cp)
1797     mddev->recovery_cp = lo;
1798     diff --git a/drivers/media/i2c/soc_camera/ov772x.c b/drivers/media/i2c/soc_camera/ov772x.c
1799     index 806383500313..14377af7c888 100644
1800     --- a/drivers/media/i2c/soc_camera/ov772x.c
1801     +++ b/drivers/media/i2c/soc_camera/ov772x.c
1802     @@ -834,7 +834,7 @@ static int ov772x_set_params(struct ov772x_priv *priv,
1803     * set COM8
1804     */
1805     if (priv->band_filter) {
1806     - ret = ov772x_mask_set(client, COM8, BNDF_ON_OFF, 1);
1807     + ret = ov772x_mask_set(client, COM8, BNDF_ON_OFF, BNDF_ON_OFF);
1808     if (!ret)
1809     ret = ov772x_mask_set(client, BDBASE,
1810     0xff, 256 - priv->band_filter);
1811     diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
1812     index 55ba696b8cf4..a920164f53f1 100644
1813     --- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
1814     +++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
1815     @@ -384,12 +384,17 @@ static void __isp_video_try_fmt(struct fimc_isp *isp,
1816     struct v4l2_pix_format_mplane *pixm,
1817     const struct fimc_fmt **fmt)
1818     {
1819     - *fmt = fimc_isp_find_format(&pixm->pixelformat, NULL, 2);
1820     + const struct fimc_fmt *__fmt;
1821     +
1822     + __fmt = fimc_isp_find_format(&pixm->pixelformat, NULL, 2);
1823     +
1824     + if (fmt)
1825     + *fmt = __fmt;
1826    
1827     pixm->colorspace = V4L2_COLORSPACE_SRGB;
1828     pixm->field = V4L2_FIELD_NONE;
1829     - pixm->num_planes = (*fmt)->memplanes;
1830     - pixm->pixelformat = (*fmt)->fourcc;
1831     + pixm->num_planes = __fmt->memplanes;
1832     + pixm->pixelformat = __fmt->fourcc;
1833     /*
1834     * TODO: double check with the docmentation these width/height
1835     * constraints are correct.
1836     diff --git a/drivers/media/platform/fsl-viu.c b/drivers/media/platform/fsl-viu.c
1837     index fb43025df573..254d696dffd8 100644
1838     --- a/drivers/media/platform/fsl-viu.c
1839     +++ b/drivers/media/platform/fsl-viu.c
1840     @@ -1417,7 +1417,7 @@ static int viu_of_probe(struct platform_device *op)
1841     sizeof(struct viu_reg), DRV_NAME)) {
1842     dev_err(&op->dev, "Error while requesting mem region\n");
1843     ret = -EBUSY;
1844     - goto err;
1845     + goto err_irq;
1846     }
1847    
1848     /* remap registers */
1849     @@ -1425,7 +1425,7 @@ static int viu_of_probe(struct platform_device *op)
1850     if (!viu_regs) {
1851     dev_err(&op->dev, "Can't map register set\n");
1852     ret = -ENOMEM;
1853     - goto err;
1854     + goto err_irq;
1855     }
1856    
1857     /* Prepare our private structure */
1858     @@ -1433,7 +1433,7 @@ static int viu_of_probe(struct platform_device *op)
1859     if (!viu_dev) {
1860     dev_err(&op->dev, "Can't allocate private structure\n");
1861     ret = -ENOMEM;
1862     - goto err;
1863     + goto err_irq;
1864     }
1865    
1866     viu_dev->vr = viu_regs;
1867     @@ -1449,16 +1449,21 @@ static int viu_of_probe(struct platform_device *op)
1868     ret = v4l2_device_register(viu_dev->dev, &viu_dev->v4l2_dev);
1869     if (ret < 0) {
1870     dev_err(&op->dev, "v4l2_device_register() failed: %d\n", ret);
1871     - goto err;
1872     + goto err_irq;
1873     }
1874    
1875     ad = i2c_get_adapter(0);
1876     + if (!ad) {
1877     + ret = -EFAULT;
1878     + dev_err(&op->dev, "couldn't get i2c adapter\n");
1879     + goto err_v4l2;
1880     + }
1881    
1882     v4l2_ctrl_handler_init(&viu_dev->hdl, 5);
1883     if (viu_dev->hdl.error) {
1884     ret = viu_dev->hdl.error;
1885     dev_err(&op->dev, "couldn't register control\n");
1886     - goto err_vdev;
1887     + goto err_i2c;
1888     }
1889     /* This control handler will inherit the control(s) from the
1890     sub-device(s). */
1891     @@ -1475,7 +1480,7 @@ static int viu_of_probe(struct platform_device *op)
1892     vdev = video_device_alloc();
1893     if (vdev == NULL) {
1894     ret = -ENOMEM;
1895     - goto err_vdev;
1896     + goto err_hdl;
1897     }
1898    
1899     *vdev = viu_template;
1900     @@ -1496,7 +1501,7 @@ static int viu_of_probe(struct platform_device *op)
1901     ret = video_register_device(viu_dev->vdev, VFL_TYPE_GRABBER, -1);
1902     if (ret < 0) {
1903     video_device_release(viu_dev->vdev);
1904     - goto err_vdev;
1905     + goto err_unlock;
1906     }
1907    
1908     /* enable VIU clock */
1909     @@ -1504,12 +1509,12 @@ static int viu_of_probe(struct platform_device *op)
1910     if (IS_ERR(clk)) {
1911     dev_err(&op->dev, "failed to lookup the clock!\n");
1912     ret = PTR_ERR(clk);
1913     - goto err_clk;
1914     + goto err_vdev;
1915     }
1916     ret = clk_prepare_enable(clk);
1917     if (ret) {
1918     dev_err(&op->dev, "failed to enable the clock!\n");
1919     - goto err_clk;
1920     + goto err_vdev;
1921     }
1922     viu_dev->clk = clk;
1923    
1924     @@ -1520,7 +1525,7 @@ static int viu_of_probe(struct platform_device *op)
1925     if (request_irq(viu_dev->irq, viu_intr, 0, "viu", (void *)viu_dev)) {
1926     dev_err(&op->dev, "Request VIU IRQ failed.\n");
1927     ret = -ENODEV;
1928     - goto err_irq;
1929     + goto err_clk;
1930     }
1931    
1932     mutex_unlock(&viu_dev->lock);
1933     @@ -1528,16 +1533,19 @@ static int viu_of_probe(struct platform_device *op)
1934     dev_info(&op->dev, "Freescale VIU Video Capture Board\n");
1935     return ret;
1936    
1937     -err_irq:
1938     - clk_disable_unprepare(viu_dev->clk);
1939     err_clk:
1940     - video_unregister_device(viu_dev->vdev);
1941     + clk_disable_unprepare(viu_dev->clk);
1942     err_vdev:
1943     - v4l2_ctrl_handler_free(&viu_dev->hdl);
1944     + video_unregister_device(viu_dev->vdev);
1945     +err_unlock:
1946     mutex_unlock(&viu_dev->lock);
1947     +err_hdl:
1948     + v4l2_ctrl_handler_free(&viu_dev->hdl);
1949     +err_i2c:
1950     i2c_put_adapter(ad);
1951     +err_v4l2:
1952     v4l2_device_unregister(&viu_dev->v4l2_dev);
1953     -err:
1954     +err_irq:
1955     irq_dispose_mapping(viu_irq);
1956     return ret;
1957     }
1958     diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
1959     index 9f023bc6e1b7..6e6e978263b0 100644
1960     --- a/drivers/media/platform/omap3isp/isp.c
1961     +++ b/drivers/media/platform/omap3isp/isp.c
1962     @@ -305,7 +305,7 @@ static struct clk *isp_xclk_src_get(struct of_phandle_args *clkspec, void *data)
1963     static int isp_xclk_init(struct isp_device *isp)
1964     {
1965     struct device_node *np = isp->dev->of_node;
1966     - struct clk_init_data init;
1967     + struct clk_init_data init = { 0 };
1968     unsigned int i;
1969    
1970     for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i)
1971     diff --git a/drivers/media/platform/s3c-camif/camif-capture.c b/drivers/media/platform/s3c-camif/camif-capture.c
1972     index 0f0324a14d51..85d26713cedb 100644
1973     --- a/drivers/media/platform/s3c-camif/camif-capture.c
1974     +++ b/drivers/media/platform/s3c-camif/camif-capture.c
1975     @@ -117,6 +117,8 @@ static int sensor_set_power(struct camif_dev *camif, int on)
1976    
1977     if (camif->sensor.power_count == !on)
1978     err = v4l2_subdev_call(sensor->sd, core, s_power, on);
1979     + if (err == -ENOIOCTLCMD)
1980     + err = 0;
1981     if (!err)
1982     sensor->power_count += on ? 1 : -1;
1983    
1984     diff --git a/drivers/media/usb/tm6000/tm6000-dvb.c b/drivers/media/usb/tm6000/tm6000-dvb.c
1985     index 097ac321b7e1..349f578273b6 100644
1986     --- a/drivers/media/usb/tm6000/tm6000-dvb.c
1987     +++ b/drivers/media/usb/tm6000/tm6000-dvb.c
1988     @@ -267,6 +267,11 @@ static int register_dvb(struct tm6000_core *dev)
1989    
1990     ret = dvb_register_adapter(&dvb->adapter, "Trident TVMaster 6000 DVB-T",
1991     THIS_MODULE, &dev->udev->dev, adapter_nr);
1992     + if (ret < 0) {
1993     + pr_err("tm6000: couldn't register the adapter!\n");
1994     + goto err;
1995     + }
1996     +
1997     dvb->adapter.priv = dev;
1998    
1999     if (dvb->frontend) {
2000     diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
2001     index fb86d6af398d..a6d800291883 100644
2002     --- a/drivers/media/usb/uvc/uvc_video.c
2003     +++ b/drivers/media/usb/uvc/uvc_video.c
2004     @@ -163,14 +163,27 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
2005     }
2006     }
2007    
2008     +static size_t uvc_video_ctrl_size(struct uvc_streaming *stream)
2009     +{
2010     + /*
2011     + * Return the size of the video probe and commit controls, which depends
2012     + * on the protocol version.
2013     + */
2014     + if (stream->dev->uvc_version < 0x0110)
2015     + return 26;
2016     + else if (stream->dev->uvc_version < 0x0150)
2017     + return 34;
2018     + else
2019     + return 48;
2020     +}
2021     +
2022     static int uvc_get_video_ctrl(struct uvc_streaming *stream,
2023     struct uvc_streaming_control *ctrl, int probe, __u8 query)
2024     {
2025     + __u16 size = uvc_video_ctrl_size(stream);
2026     __u8 *data;
2027     - __u16 size;
2028     int ret;
2029    
2030     - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
2031     if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
2032     query == UVC_GET_DEF)
2033     return -EIO;
2034     @@ -225,7 +238,7 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
2035     ctrl->dwMaxVideoFrameSize = get_unaligned_le32(&data[18]);
2036     ctrl->dwMaxPayloadTransferSize = get_unaligned_le32(&data[22]);
2037    
2038     - if (size == 34) {
2039     + if (size >= 34) {
2040     ctrl->dwClockFrequency = get_unaligned_le32(&data[26]);
2041     ctrl->bmFramingInfo = data[30];
2042     ctrl->bPreferedVersion = data[31];
2043     @@ -254,11 +267,10 @@ out:
2044     static int uvc_set_video_ctrl(struct uvc_streaming *stream,
2045     struct uvc_streaming_control *ctrl, int probe)
2046     {
2047     + __u16 size = uvc_video_ctrl_size(stream);
2048     __u8 *data;
2049     - __u16 size;
2050     int ret;
2051    
2052     - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
2053     data = kzalloc(size, GFP_KERNEL);
2054     if (data == NULL)
2055     return -ENOMEM;
2056     @@ -275,7 +287,7 @@ static int uvc_set_video_ctrl(struct uvc_streaming *stream,
2057     put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
2058     put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
2059    
2060     - if (size == 34) {
2061     + if (size >= 34) {
2062     put_unaligned_le32(ctrl->dwClockFrequency, &data[26]);
2063     data[30] = ctrl->bmFramingInfo;
2064     data[31] = ctrl->bPreferedVersion;
2065     diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c
2066     index 968c2eb08b5a..568dd4affb33 100644
2067     --- a/drivers/media/v4l2-core/v4l2-event.c
2068     +++ b/drivers/media/v4l2-core/v4l2-event.c
2069     @@ -115,14 +115,6 @@ static void __v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *e
2070     if (sev == NULL)
2071     return;
2072    
2073     - /*
2074     - * If the event has been added to the fh->subscribed list, but its
2075     - * add op has not completed yet elems will be 0, treat this as
2076     - * not being subscribed.
2077     - */
2078     - if (!sev->elems)
2079     - return;
2080     -
2081     /* Increase event sequence number on fh. */
2082     fh->sequence++;
2083    
2084     @@ -208,6 +200,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
2085     struct v4l2_subscribed_event *sev, *found_ev;
2086     unsigned long flags;
2087     unsigned i;
2088     + int ret = 0;
2089    
2090     if (sub->type == V4L2_EVENT_ALL)
2091     return -EINVAL;
2092     @@ -226,31 +219,36 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
2093     sev->flags = sub->flags;
2094     sev->fh = fh;
2095     sev->ops = ops;
2096     + sev->elems = elems;
2097     +
2098     + mutex_lock(&fh->subscribe_lock);
2099    
2100     spin_lock_irqsave(&fh->vdev->fh_lock, flags);
2101     found_ev = v4l2_event_subscribed(fh, sub->type, sub->id);
2102     - if (!found_ev)
2103     - list_add(&sev->list, &fh->subscribed);
2104     spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
2105    
2106     if (found_ev) {
2107     + /* Already listening */
2108     kvfree(sev);
2109     - return 0; /* Already listening */
2110     + goto out_unlock;
2111     }
2112    
2113     if (sev->ops && sev->ops->add) {
2114     - int ret = sev->ops->add(sev, elems);
2115     + ret = sev->ops->add(sev, elems);
2116     if (ret) {
2117     - sev->ops = NULL;
2118     - v4l2_event_unsubscribe(fh, sub);
2119     - return ret;
2120     + kvfree(sev);
2121     + goto out_unlock;
2122     }
2123     }
2124    
2125     - /* Mark as ready for use */
2126     - sev->elems = elems;
2127     + spin_lock_irqsave(&fh->vdev->fh_lock, flags);
2128     + list_add(&sev->list, &fh->subscribed);
2129     + spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
2130    
2131     - return 0;
2132     +out_unlock:
2133     + mutex_unlock(&fh->subscribe_lock);
2134     +
2135     + return ret;
2136     }
2137     EXPORT_SYMBOL_GPL(v4l2_event_subscribe);
2138    
2139     @@ -289,6 +287,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
2140     return 0;
2141     }
2142    
2143     + mutex_lock(&fh->subscribe_lock);
2144     +
2145     spin_lock_irqsave(&fh->vdev->fh_lock, flags);
2146    
2147     sev = v4l2_event_subscribed(fh, sub->type, sub->id);
2148     @@ -306,6 +306,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
2149     if (sev && sev->ops && sev->ops->del)
2150     sev->ops->del(sev);
2151    
2152     + mutex_unlock(&fh->subscribe_lock);
2153     +
2154     kvfree(sev);
2155    
2156     return 0;
2157     diff --git a/drivers/media/v4l2-core/v4l2-fh.c b/drivers/media/v4l2-core/v4l2-fh.c
2158     index 3895999bf880..c91a7bd3ecfc 100644
2159     --- a/drivers/media/v4l2-core/v4l2-fh.c
2160     +++ b/drivers/media/v4l2-core/v4l2-fh.c
2161     @@ -45,6 +45,7 @@ void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev)
2162     INIT_LIST_HEAD(&fh->available);
2163     INIT_LIST_HEAD(&fh->subscribed);
2164     fh->sequence = -1;
2165     + mutex_init(&fh->subscribe_lock);
2166     }
2167     EXPORT_SYMBOL_GPL(v4l2_fh_init);
2168    
2169     @@ -90,6 +91,7 @@ void v4l2_fh_exit(struct v4l2_fh *fh)
2170     return;
2171     v4l_disable_media_source(fh->vdev);
2172     v4l2_event_unsubscribe_all(fh);
2173     + mutex_destroy(&fh->subscribe_lock);
2174     fh->vdev = NULL;
2175     }
2176     EXPORT_SYMBOL_GPL(v4l2_fh_exit);
2177     diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c
2178     index 4dd0d868ff88..8daefb81ba29 100644
2179     --- a/drivers/misc/sram.c
2180     +++ b/drivers/misc/sram.c
2181     @@ -391,23 +391,23 @@ static int sram_probe(struct platform_device *pdev)
2182     if (IS_ERR(sram->pool))
2183     return PTR_ERR(sram->pool);
2184    
2185     - ret = sram_reserve_regions(sram, res);
2186     - if (ret)
2187     - return ret;
2188     -
2189     sram->clk = devm_clk_get(sram->dev, NULL);
2190     if (IS_ERR(sram->clk))
2191     sram->clk = NULL;
2192     else
2193     clk_prepare_enable(sram->clk);
2194    
2195     + ret = sram_reserve_regions(sram, res);
2196     + if (ret)
2197     + goto err_disable_clk;
2198     +
2199     platform_set_drvdata(pdev, sram);
2200    
2201     init_func = of_device_get_match_data(&pdev->dev);
2202     if (init_func) {
2203     ret = init_func();
2204     if (ret)
2205     - goto err_disable_clk;
2206     + goto err_free_partitions;
2207     }
2208    
2209     dev_dbg(sram->dev, "SRAM pool: %zu KiB @ 0x%p\n",
2210     @@ -415,10 +415,11 @@ static int sram_probe(struct platform_device *pdev)
2211    
2212     return 0;
2213    
2214     +err_free_partitions:
2215     + sram_free_partitions(sram);
2216     err_disable_clk:
2217     if (sram->clk)
2218     clk_disable_unprepare(sram->clk);
2219     - sram_free_partitions(sram);
2220    
2221     return ret;
2222     }
2223     diff --git a/drivers/misc/tsl2550.c b/drivers/misc/tsl2550.c
2224     index adf46072cb37..3fce3b6a3624 100644
2225     --- a/drivers/misc/tsl2550.c
2226     +++ b/drivers/misc/tsl2550.c
2227     @@ -177,7 +177,7 @@ static int tsl2550_calculate_lux(u8 ch0, u8 ch1)
2228     } else
2229     lux = 0;
2230     else
2231     - return -EAGAIN;
2232     + return 0;
2233    
2234     /* LUX range check */
2235     return lux > TSL2550_MAX_LUX ? TSL2550_MAX_LUX : lux;
2236     diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c
2237     index 8af5c2672f71..b4570d5c1fe7 100644
2238     --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c
2239     +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c
2240     @@ -755,7 +755,7 @@ static int qp_host_get_user_memory(u64 produce_uva,
2241     retval = get_user_pages_fast((uintptr_t) produce_uva,
2242     produce_q->kernel_if->num_pages, 1,
2243     produce_q->kernel_if->u.h.header_page);
2244     - if (retval < produce_q->kernel_if->num_pages) {
2245     + if (retval < (int)produce_q->kernel_if->num_pages) {
2246     pr_debug("get_user_pages_fast(produce) failed (retval=%d)",
2247     retval);
2248     qp_release_pages(produce_q->kernel_if->u.h.header_page,
2249     @@ -767,7 +767,7 @@ static int qp_host_get_user_memory(u64 produce_uva,
2250     retval = get_user_pages_fast((uintptr_t) consume_uva,
2251     consume_q->kernel_if->num_pages, 1,
2252     consume_q->kernel_if->u.h.header_page);
2253     - if (retval < consume_q->kernel_if->num_pages) {
2254     + if (retval < (int)consume_q->kernel_if->num_pages) {
2255     pr_debug("get_user_pages_fast(consume) failed (retval=%d)",
2256     retval);
2257     qp_release_pages(consume_q->kernel_if->u.h.header_page,
2258     diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c
2259     index 68c9d98a3347..148744418e82 100644
2260     --- a/drivers/mtd/nand/atmel/nand-controller.c
2261     +++ b/drivers/mtd/nand/atmel/nand-controller.c
2262     @@ -129,6 +129,11 @@
2263     #define DEFAULT_TIMEOUT_MS 1000
2264     #define MIN_DMA_LEN 128
2265    
2266     +static bool atmel_nand_avoid_dma __read_mostly;
2267     +
2268     +MODULE_PARM_DESC(avoiddma, "Avoid using DMA");
2269     +module_param_named(avoiddma, atmel_nand_avoid_dma, bool, 0400);
2270     +
2271     enum atmel_nand_rb_type {
2272     ATMEL_NAND_NO_RB,
2273     ATMEL_NAND_NATIVE_RB,
2274     @@ -1975,7 +1980,7 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
2275     return ret;
2276     }
2277    
2278     - if (nc->caps->has_dma) {
2279     + if (nc->caps->has_dma && !atmel_nand_avoid_dma) {
2280     dma_cap_mask_t mask;
2281    
2282     dma_cap_zero(mask);
2283     diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.h b/drivers/net/ethernet/hisilicon/hns/hnae.h
2284     index fa5b30f547f6..cad52bd331f7 100644
2285     --- a/drivers/net/ethernet/hisilicon/hns/hnae.h
2286     +++ b/drivers/net/ethernet/hisilicon/hns/hnae.h
2287     @@ -220,10 +220,10 @@ struct hnae_desc_cb {
2288    
2289     /* priv data for the desc, e.g. skb when use with ip stack*/
2290     void *priv;
2291     - u16 page_offset;
2292     - u16 reuse_flag;
2293     + u32 page_offset;
2294     + u32 length; /* length of the buffer */
2295    
2296     - u16 length; /* length of the buffer */
2297     + u16 reuse_flag;
2298    
2299     /* desc type, used by the ring user to mark the type of the priv data */
2300     u16 type;
2301     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2302     index e77192683dba..25a9732afc84 100644
2303     --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2304     +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2305     @@ -530,7 +530,7 @@ static void hns_nic_reuse_page(struct sk_buff *skb, int i,
2306     }
2307    
2308     skb_add_rx_frag(skb, i, desc_cb->priv, desc_cb->page_offset + pull_len,
2309     - size - pull_len, truesize - pull_len);
2310     + size - pull_len, truesize);
2311    
2312     /* avoid re-using remote pages,flag default unreuse */
2313     if (unlikely(page_to_nid(desc_cb->priv) != numa_node_id()))
2314     diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
2315     index 3b3983a1ffbb..10df2d60c181 100644
2316     --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
2317     +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
2318     @@ -644,14 +644,14 @@ static int e1000_set_ringparam(struct net_device *netdev,
2319     adapter->tx_ring = tx_old;
2320     e1000_free_all_rx_resources(adapter);
2321     e1000_free_all_tx_resources(adapter);
2322     - kfree(tx_old);
2323     - kfree(rx_old);
2324     adapter->rx_ring = rxdr;
2325     adapter->tx_ring = txdr;
2326     err = e1000_up(adapter);
2327     if (err)
2328     goto err_setup;
2329     }
2330     + kfree(tx_old);
2331     + kfree(rx_old);
2332    
2333     clear_bit(__E1000_RESETTING, &adapter->flags);
2334     return 0;
2335     @@ -664,7 +664,8 @@ err_setup_rx:
2336     err_alloc_rx:
2337     kfree(txdr);
2338     err_alloc_tx:
2339     - e1000_up(adapter);
2340     + if (netif_running(adapter->netdev))
2341     + e1000_up(adapter);
2342     err_setup:
2343     clear_bit(__E1000_RESETTING, &adapter->flags);
2344     return err;
2345     diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
2346     index 3c469355f5a4..7938abe9a301 100644
2347     --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
2348     +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
2349     @@ -47,7 +47,7 @@
2350     #include "qed_reg_addr.h"
2351     #include "qed_sriov.h"
2352    
2353     -#define CHIP_MCP_RESP_ITER_US 10
2354     +#define QED_MCP_RESP_ITER_US 10
2355    
2356     #define QED_DRV_MB_MAX_RETRIES (500 * 1000) /* Account for 5 sec */
2357     #define QED_MCP_RESET_RETRIES (50 * 1000) /* Account for 500 msec */
2358     @@ -182,18 +182,57 @@ int qed_mcp_free(struct qed_hwfn *p_hwfn)
2359     return 0;
2360     }
2361    
2362     +/* Maximum of 1 sec to wait for the SHMEM ready indication */
2363     +#define QED_MCP_SHMEM_RDY_MAX_RETRIES 20
2364     +#define QED_MCP_SHMEM_RDY_ITER_MS 50
2365     +
2366     static int qed_load_mcp_offsets(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2367     {
2368     struct qed_mcp_info *p_info = p_hwfn->mcp_info;
2369     + u8 cnt = QED_MCP_SHMEM_RDY_MAX_RETRIES;
2370     + u8 msec = QED_MCP_SHMEM_RDY_ITER_MS;
2371     u32 drv_mb_offsize, mfw_mb_offsize;
2372     u32 mcp_pf_id = MCP_PF_ID(p_hwfn);
2373    
2374     p_info->public_base = qed_rd(p_hwfn, p_ptt, MISC_REG_SHARED_MEM_ADDR);
2375     - if (!p_info->public_base)
2376     - return 0;
2377     + if (!p_info->public_base) {
2378     + DP_NOTICE(p_hwfn,
2379     + "The address of the MCP scratch-pad is not configured\n");
2380     + return -EINVAL;
2381     + }
2382    
2383     p_info->public_base |= GRCBASE_MCP;
2384    
2385     + /* Get the MFW MB address and number of supported messages */
2386     + mfw_mb_offsize = qed_rd(p_hwfn, p_ptt,
2387     + SECTION_OFFSIZE_ADDR(p_info->public_base,
2388     + PUBLIC_MFW_MB));
2389     + p_info->mfw_mb_addr = SECTION_ADDR(mfw_mb_offsize, mcp_pf_id);
2390     + p_info->mfw_mb_length = (u16)qed_rd(p_hwfn, p_ptt,
2391     + p_info->mfw_mb_addr +
2392     + offsetof(struct public_mfw_mb,
2393     + sup_msgs));
2394     +
2395     + /* The driver can notify that there was an MCP reset, and might read the
2396     + * SHMEM values before the MFW has completed initializing them.
2397     + * To avoid this, the "sup_msgs" field in the MFW mailbox is used as a
2398     + * data ready indication.
2399     + */
2400     + while (!p_info->mfw_mb_length && --cnt) {
2401     + msleep(msec);
2402     + p_info->mfw_mb_length =
2403     + (u16)qed_rd(p_hwfn, p_ptt,
2404     + p_info->mfw_mb_addr +
2405     + offsetof(struct public_mfw_mb, sup_msgs));
2406     + }
2407     +
2408     + if (!cnt) {
2409     + DP_NOTICE(p_hwfn,
2410     + "Failed to get the SHMEM ready notification after %d msec\n",
2411     + QED_MCP_SHMEM_RDY_MAX_RETRIES * msec);
2412     + return -EBUSY;
2413     + }
2414     +
2415     /* Calculate the driver and MFW mailbox address */
2416     drv_mb_offsize = qed_rd(p_hwfn, p_ptt,
2417     SECTION_OFFSIZE_ADDR(p_info->public_base,
2418     @@ -203,13 +242,6 @@ static int qed_load_mcp_offsets(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2419     "drv_mb_offsiz = 0x%x, drv_mb_addr = 0x%x mcp_pf_id = 0x%x\n",
2420     drv_mb_offsize, p_info->drv_mb_addr, mcp_pf_id);
2421    
2422     - /* Set the MFW MB address */
2423     - mfw_mb_offsize = qed_rd(p_hwfn, p_ptt,
2424     - SECTION_OFFSIZE_ADDR(p_info->public_base,
2425     - PUBLIC_MFW_MB));
2426     - p_info->mfw_mb_addr = SECTION_ADDR(mfw_mb_offsize, mcp_pf_id);
2427     - p_info->mfw_mb_length = (u16)qed_rd(p_hwfn, p_ptt, p_info->mfw_mb_addr);
2428     -
2429     /* Get the current driver mailbox sequence before sending
2430     * the first command
2431     */
2432     @@ -284,9 +316,15 @@ static void qed_mcp_reread_offsets(struct qed_hwfn *p_hwfn,
2433    
2434     int qed_mcp_reset(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2435     {
2436     - u32 org_mcp_reset_seq, seq, delay = CHIP_MCP_RESP_ITER_US, cnt = 0;
2437     + u32 org_mcp_reset_seq, seq, delay = QED_MCP_RESP_ITER_US, cnt = 0;
2438     int rc = 0;
2439    
2440     + if (p_hwfn->mcp_info->b_block_cmd) {
2441     + DP_NOTICE(p_hwfn,
2442     + "The MFW is not responsive. Avoid sending MCP_RESET mailbox command.\n");
2443     + return -EBUSY;
2444     + }
2445     +
2446     /* Ensure that only a single thread is accessing the mailbox */
2447     spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
2448    
2449     @@ -412,14 +450,41 @@ static void __qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2450     (p_mb_params->cmd | seq_num), p_mb_params->param);
2451     }
2452    
2453     +static void qed_mcp_cmd_set_blocking(struct qed_hwfn *p_hwfn, bool block_cmd)
2454     +{
2455     + p_hwfn->mcp_info->b_block_cmd = block_cmd;
2456     +
2457     + DP_INFO(p_hwfn, "%s sending of mailbox commands to the MFW\n",
2458     + block_cmd ? "Block" : "Unblock");
2459     +}
2460     +
2461     +static void qed_mcp_print_cpu_info(struct qed_hwfn *p_hwfn,
2462     + struct qed_ptt *p_ptt)
2463     +{
2464     + u32 cpu_mode, cpu_state, cpu_pc_0, cpu_pc_1, cpu_pc_2;
2465     + u32 delay = QED_MCP_RESP_ITER_US;
2466     +
2467     + cpu_mode = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE);
2468     + cpu_state = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE);
2469     + cpu_pc_0 = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_PROGRAM_COUNTER);
2470     + udelay(delay);
2471     + cpu_pc_1 = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_PROGRAM_COUNTER);
2472     + udelay(delay);
2473     + cpu_pc_2 = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_PROGRAM_COUNTER);
2474     +
2475     + DP_NOTICE(p_hwfn,
2476     + "MCP CPU info: mode 0x%08x, state 0x%08x, pc {0x%08x, 0x%08x, 0x%08x}\n",
2477     + cpu_mode, cpu_state, cpu_pc_0, cpu_pc_1, cpu_pc_2);
2478     +}
2479     +
2480     static int
2481     _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2482     struct qed_ptt *p_ptt,
2483     struct qed_mcp_mb_params *p_mb_params,
2484     - u32 max_retries, u32 delay)
2485     + u32 max_retries, u32 usecs)
2486     {
2487     + u32 cnt = 0, msecs = DIV_ROUND_UP(usecs, 1000);
2488     struct qed_mcp_cmd_elem *p_cmd_elem;
2489     - u32 cnt = 0;
2490     u16 seq_num;
2491     int rc = 0;
2492    
2493     @@ -442,7 +507,11 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2494     goto err;
2495    
2496     spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
2497     - udelay(delay);
2498     +
2499     + if (QED_MB_FLAGS_IS_SET(p_mb_params, CAN_SLEEP))
2500     + msleep(msecs);
2501     + else
2502     + udelay(usecs);
2503     } while (++cnt < max_retries);
2504    
2505     if (cnt >= max_retries) {
2506     @@ -471,7 +540,11 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2507     * The spinlock stays locked until the list element is removed.
2508     */
2509    
2510     - udelay(delay);
2511     + if (QED_MB_FLAGS_IS_SET(p_mb_params, CAN_SLEEP))
2512     + msleep(msecs);
2513     + else
2514     + udelay(usecs);
2515     +
2516     spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
2517    
2518     if (p_cmd_elem->b_is_completed)
2519     @@ -490,11 +563,15 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2520     DP_NOTICE(p_hwfn,
2521     "The MFW failed to respond to command 0x%08x [param 0x%08x].\n",
2522     p_mb_params->cmd, p_mb_params->param);
2523     + qed_mcp_print_cpu_info(p_hwfn, p_ptt);
2524    
2525     spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
2526     qed_mcp_cmd_del_elem(p_hwfn, p_cmd_elem);
2527     spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
2528    
2529     + if (!QED_MB_FLAGS_IS_SET(p_mb_params, AVOID_BLOCK))
2530     + qed_mcp_cmd_set_blocking(p_hwfn, true);
2531     +
2532     return -EAGAIN;
2533     }
2534    
2535     @@ -506,7 +583,7 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2536     "MFW mailbox: response 0x%08x param 0x%08x [after %d.%03d ms]\n",
2537     p_mb_params->mcp_resp,
2538     p_mb_params->mcp_param,
2539     - (cnt * delay) / 1000, (cnt * delay) % 1000);
2540     + (cnt * usecs) / 1000, (cnt * usecs) % 1000);
2541    
2542     /* Clear the sequence number from the MFW response */
2543     p_mb_params->mcp_resp &= FW_MSG_CODE_MASK;
2544     @@ -524,7 +601,7 @@ static int qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2545     {
2546     size_t union_data_size = sizeof(union drv_union_data);
2547     u32 max_retries = QED_DRV_MB_MAX_RETRIES;
2548     - u32 delay = CHIP_MCP_RESP_ITER_US;
2549     + u32 usecs = QED_MCP_RESP_ITER_US;
2550    
2551     /* MCP not initialized */
2552     if (!qed_mcp_is_init(p_hwfn)) {
2553     @@ -532,6 +609,13 @@ static int qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2554     return -EBUSY;
2555     }
2556    
2557     + if (p_hwfn->mcp_info->b_block_cmd) {
2558     + DP_NOTICE(p_hwfn,
2559     + "The MFW is not responsive. Avoid sending mailbox command 0x%08x [param 0x%08x].\n",
2560     + p_mb_params->cmd, p_mb_params->param);
2561     + return -EBUSY;
2562     + }
2563     +
2564     if (p_mb_params->data_src_size > union_data_size ||
2565     p_mb_params->data_dst_size > union_data_size) {
2566     DP_ERR(p_hwfn,
2567     @@ -541,8 +625,13 @@ static int qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
2568     return -EINVAL;
2569     }
2570    
2571     + if (QED_MB_FLAGS_IS_SET(p_mb_params, CAN_SLEEP)) {
2572     + max_retries = DIV_ROUND_UP(max_retries, 1000);
2573     + usecs *= 1000;
2574     + }
2575     +
2576     return _qed_mcp_cmd_and_union(p_hwfn, p_ptt, p_mb_params, max_retries,
2577     - delay);
2578     + usecs);
2579     }
2580    
2581     int qed_mcp_cmd(struct qed_hwfn *p_hwfn,
2582     @@ -731,6 +820,7 @@ __qed_mcp_load_req(struct qed_hwfn *p_hwfn,
2583     mb_params.data_src_size = sizeof(load_req);
2584     mb_params.p_data_dst = &load_rsp;
2585     mb_params.data_dst_size = sizeof(load_rsp);
2586     + mb_params.flags = QED_MB_FLAG_CAN_SLEEP | QED_MB_FLAG_AVOID_BLOCK;
2587    
2588     DP_VERBOSE(p_hwfn, QED_MSG_SP,
2589     "Load Request: param 0x%08x [init_hw %d, drv_type %d, hsi_ver %d, pda 0x%04x]\n",
2590     @@ -952,7 +1042,8 @@ int qed_mcp_load_req(struct qed_hwfn *p_hwfn,
2591    
2592     int qed_mcp_unload_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2593     {
2594     - u32 wol_param, mcp_resp, mcp_param;
2595     + struct qed_mcp_mb_params mb_params;
2596     + u32 wol_param;
2597    
2598     switch (p_hwfn->cdev->wol_config) {
2599     case QED_OV_WOL_DISABLED:
2600     @@ -970,8 +1061,12 @@ int qed_mcp_unload_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2601     wol_param = DRV_MB_PARAM_UNLOAD_WOL_MCP;
2602     }
2603    
2604     - return qed_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_UNLOAD_REQ, wol_param,
2605     - &mcp_resp, &mcp_param);
2606     + memset(&mb_params, 0, sizeof(mb_params));
2607     + mb_params.cmd = DRV_MSG_CODE_UNLOAD_REQ;
2608     + mb_params.param = wol_param;
2609     + mb_params.flags = QED_MB_FLAG_CAN_SLEEP | QED_MB_FLAG_AVOID_BLOCK;
2610     +
2611     + return qed_mcp_cmd_and_union(p_hwfn, p_ptt, &mb_params);
2612     }
2613    
2614     int qed_mcp_unload_done(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2615     @@ -1966,31 +2061,65 @@ qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn,
2616     return rc;
2617     }
2618    
2619     +/* A maximal 100 msec waiting time for the MCP to halt */
2620     +#define QED_MCP_HALT_SLEEP_MS 10
2621     +#define QED_MCP_HALT_MAX_RETRIES 10
2622     +
2623     int qed_mcp_halt(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2624     {
2625     - u32 resp = 0, param = 0;
2626     + u32 resp = 0, param = 0, cpu_state, cnt = 0;
2627     int rc;
2628    
2629     rc = qed_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_MCP_HALT, 0, &resp,
2630     &param);
2631     - if (rc)
2632     + if (rc) {
2633     DP_ERR(p_hwfn, "MCP response failure, aborting\n");
2634     + return rc;
2635     + }
2636    
2637     - return rc;
2638     + do {
2639     + msleep(QED_MCP_HALT_SLEEP_MS);
2640     + cpu_state = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE);
2641     + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED)
2642     + break;
2643     + } while (++cnt < QED_MCP_HALT_MAX_RETRIES);
2644     +
2645     + if (cnt == QED_MCP_HALT_MAX_RETRIES) {
2646     + DP_NOTICE(p_hwfn,
2647     + "Failed to halt the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n",
2648     + qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE), cpu_state);
2649     + return -EBUSY;
2650     + }
2651     +
2652     + qed_mcp_cmd_set_blocking(p_hwfn, true);
2653     +
2654     + return 0;
2655     }
2656    
2657     +#define QED_MCP_RESUME_SLEEP_MS 10
2658     +
2659     int qed_mcp_resume(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
2660     {
2661     - u32 value, cpu_mode;
2662     + u32 cpu_mode, cpu_state;
2663    
2664     qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_STATE, 0xffffffff);
2665    
2666     - value = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE);
2667     - value &= ~MCP_REG_CPU_MODE_SOFT_HALT;
2668     - qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, value);
2669     cpu_mode = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE);
2670     + cpu_mode &= ~MCP_REG_CPU_MODE_SOFT_HALT;
2671     + qed_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, cpu_mode);
2672     + msleep(QED_MCP_RESUME_SLEEP_MS);
2673     + cpu_state = qed_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE);
2674    
2675     - return (cpu_mode & MCP_REG_CPU_MODE_SOFT_HALT) ? -EAGAIN : 0;
2676     + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED) {
2677     + DP_NOTICE(p_hwfn,
2678     + "Failed to resume the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n",
2679     + cpu_mode, cpu_state);
2680     + return -EBUSY;
2681     + }
2682     +
2683     + qed_mcp_cmd_set_blocking(p_hwfn, false);
2684     +
2685     + return 0;
2686     }
2687    
2688     int qed_mcp_ov_update_current_config(struct qed_hwfn *p_hwfn,
2689     diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
2690     index c7ec2395d1ce..f1fe5e3427ea 100644
2691     --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h
2692     +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
2693     @@ -540,11 +540,14 @@ struct qed_mcp_info {
2694     */
2695     spinlock_t cmd_lock;
2696    
2697     + /* Flag to indicate whether sending a MFW mailbox command is blocked */
2698     + bool b_block_cmd;
2699     +
2700     /* Spinlock used for syncing SW link-changes and link-changes
2701     * originating from attention context.
2702     */
2703     spinlock_t link_lock;
2704     - bool block_mb_sending;
2705     +
2706     u32 public_base;
2707     u32 drv_mb_addr;
2708     u32 mfw_mb_addr;
2709     @@ -565,14 +568,20 @@ struct qed_mcp_info {
2710     };
2711    
2712     struct qed_mcp_mb_params {
2713     - u32 cmd;
2714     - u32 param;
2715     - void *p_data_src;
2716     - u8 data_src_size;
2717     - void *p_data_dst;
2718     - u8 data_dst_size;
2719     - u32 mcp_resp;
2720     - u32 mcp_param;
2721     + u32 cmd;
2722     + u32 param;
2723     + void *p_data_src;
2724     + void *p_data_dst;
2725     + u8 data_src_size;
2726     + u8 data_dst_size;
2727     + u32 mcp_resp;
2728     + u32 mcp_param;
2729     + u32 flags;
2730     +#define QED_MB_FLAG_CAN_SLEEP (0x1 << 0)
2731     +#define QED_MB_FLAG_AVOID_BLOCK (0x1 << 1)
2732     +#define QED_MB_FLAGS_IS_SET(params, flag) \
2733     + ({ typeof(params) __params = (params); \
2734     + (__params && (__params->flags & QED_MB_FLAG_ ## flag)); })
2735     };
2736    
2737     /**
2738     diff --git a/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h b/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
2739     index 0cdb4337b3a0..d1201bb2d4bb 100644
2740     --- a/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
2741     +++ b/drivers/net/ethernet/qlogic/qed/qed_reg_addr.h
2742     @@ -554,8 +554,10 @@
2743     0
2744     #define MCP_REG_CPU_STATE \
2745     0xe05004UL
2746     +#define MCP_REG_CPU_STATE_SOFT_HALTED (0x1UL << 10)
2747     #define MCP_REG_CPU_EVENT_MASK \
2748     0xe05008UL
2749     +#define MCP_REG_CPU_PROGRAM_COUNTER 0xe0501cUL
2750     #define PGLUE_B_REG_PF_BAR0_SIZE \
2751     0x2aae60UL
2752     #define PGLUE_B_REG_PF_BAR1_SIZE \
2753     diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c
2754     index 2e5150b0b8d5..7a14e8170e82 100644
2755     --- a/drivers/net/phy/xilinx_gmii2rgmii.c
2756     +++ b/drivers/net/phy/xilinx_gmii2rgmii.c
2757     @@ -40,8 +40,11 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev)
2758     {
2759     struct gmii2rgmii *priv = phydev->priv;
2760     u16 val = 0;
2761     + int err;
2762    
2763     - priv->phy_drv->read_status(phydev);
2764     + err = priv->phy_drv->read_status(phydev);
2765     + if (err < 0)
2766     + return err;
2767    
2768     val = mdiobus_read(phydev->mdio.bus, priv->addr, XILINX_GMII2RGMII_REG);
2769     val &= ~XILINX_GMII2RGMII_SPEED_MASK;
2770     @@ -81,6 +84,11 @@ static int xgmiitorgmii_probe(struct mdio_device *mdiodev)
2771     return -EPROBE_DEFER;
2772     }
2773    
2774     + if (!priv->phy_dev->drv) {
2775     + dev_info(dev, "Attached phy not ready\n");
2776     + return -EPROBE_DEFER;
2777     + }
2778     +
2779     priv->addr = mdiodev->addr;
2780     priv->phy_drv = priv->phy_dev->drv;
2781     memcpy(&priv->conv_phy_drv, priv->phy_dev->drv,
2782     diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
2783     index 0aeeb233af78..21642bab485a 100644
2784     --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
2785     +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
2786     @@ -215,11 +215,12 @@ int ath10k_htt_rx_ring_refill(struct ath10k *ar)
2787     spin_lock_bh(&htt->rx_ring.lock);
2788     ret = ath10k_htt_rx_ring_fill_n(htt, (htt->rx_ring.fill_level -
2789     htt->rx_ring.fill_cnt));
2790     - spin_unlock_bh(&htt->rx_ring.lock);
2791    
2792     if (ret)
2793     ath10k_htt_rx_ring_free(htt);
2794    
2795     + spin_unlock_bh(&htt->rx_ring.lock);
2796     +
2797     return ret;
2798     }
2799    
2800     @@ -231,7 +232,9 @@ void ath10k_htt_rx_free(struct ath10k_htt *htt)
2801     skb_queue_purge(&htt->rx_in_ord_compl_q);
2802     skb_queue_purge(&htt->tx_fetch_ind_q);
2803    
2804     + spin_lock_bh(&htt->rx_ring.lock);
2805     ath10k_htt_rx_ring_free(htt);
2806     + spin_unlock_bh(&htt->rx_ring.lock);
2807    
2808     dma_free_coherent(htt->ar->dev,
2809     (htt->rx_ring.size *
2810     diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
2811     index 6fa9c223ff93..cdcfb175ad9b 100644
2812     --- a/drivers/net/wireless/ath/ath10k/mac.c
2813     +++ b/drivers/net/wireless/ath/ath10k/mac.c
2814     @@ -4015,6 +4015,7 @@ void ath10k_mac_tx_push_pending(struct ath10k *ar)
2815     rcu_read_unlock();
2816     spin_unlock_bh(&ar->txqs_lock);
2817     }
2818     +EXPORT_SYMBOL(ath10k_mac_tx_push_pending);
2819    
2820     /************/
2821     /* Scanning */
2822     diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
2823     index 03a69e5b1116..da9dbf3ddaa5 100644
2824     --- a/drivers/net/wireless/ath/ath10k/sdio.c
2825     +++ b/drivers/net/wireless/ath/ath10k/sdio.c
2826     @@ -30,6 +30,7 @@
2827     #include "debug.h"
2828     #include "hif.h"
2829     #include "htc.h"
2830     +#include "mac.h"
2831     #include "targaddrs.h"
2832     #include "trace.h"
2833     #include "sdio.h"
2834     @@ -396,6 +397,7 @@ static int ath10k_sdio_mbox_rx_process_packet(struct ath10k *ar,
2835     int ret;
2836    
2837     payload_len = le16_to_cpu(htc_hdr->len);
2838     + skb->len = payload_len + sizeof(struct ath10k_htc_hdr);
2839    
2840     if (trailer_present) {
2841     trailer = skb->data + sizeof(*htc_hdr) +
2842     @@ -434,12 +436,14 @@ static int ath10k_sdio_mbox_rx_process_packets(struct ath10k *ar,
2843     enum ath10k_htc_ep_id id;
2844     int ret, i, *n_lookahead_local;
2845     u32 *lookaheads_local;
2846     + int lookahead_idx = 0;
2847    
2848     for (i = 0; i < ar_sdio->n_rx_pkts; i++) {
2849     lookaheads_local = lookaheads;
2850     n_lookahead_local = n_lookahead;
2851    
2852     - id = ((struct ath10k_htc_hdr *)&lookaheads[i])->eid;
2853     + id = ((struct ath10k_htc_hdr *)
2854     + &lookaheads[lookahead_idx++])->eid;
2855    
2856     if (id >= ATH10K_HTC_EP_COUNT) {
2857     ath10k_warn(ar, "invalid endpoint in look-ahead: %d\n",
2858     @@ -462,6 +466,7 @@ static int ath10k_sdio_mbox_rx_process_packets(struct ath10k *ar,
2859     /* Only read lookahead's from RX trailers
2860     * for the last packet in a bundle.
2861     */
2862     + lookahead_idx--;
2863     lookaheads_local = NULL;
2864     n_lookahead_local = NULL;
2865     }
2866     @@ -1342,6 +1347,8 @@ static void ath10k_sdio_irq_handler(struct sdio_func *func)
2867     break;
2868     } while (time_before(jiffies, timeout) && !done);
2869    
2870     + ath10k_mac_tx_push_pending(ar);
2871     +
2872     sdio_claim_host(ar_sdio->func);
2873    
2874     if (ret && ret != -ECANCELED)
2875     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_qmath.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_qmath.c
2876     index b9672da24a9d..b24bc57ca91b 100644
2877     --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_qmath.c
2878     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_qmath.c
2879     @@ -213,7 +213,7 @@ static const s16 log_table[] = {
2880     30498,
2881     31267,
2882     32024,
2883     - 32768
2884     + 32767
2885     };
2886    
2887     #define LOG_TABLE_SIZE 32 /* log_table size */
2888     diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
2889     index 9935bd09db1f..d4947e3a909e 100644
2890     --- a/drivers/net/wireless/rndis_wlan.c
2891     +++ b/drivers/net/wireless/rndis_wlan.c
2892     @@ -2928,6 +2928,8 @@ static void rndis_wlan_auth_indication(struct usbnet *usbdev,
2893    
2894     while (buflen >= sizeof(*auth_req)) {
2895     auth_req = (void *)buf;
2896     + if (buflen < le32_to_cpu(auth_req->length))
2897     + return;
2898     type = "unknown";
2899     flags = le32_to_cpu(auth_req->flags);
2900     pairwise_error = false;
2901     diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
2902     index 761cf8573a80..f48c3f62966d 100644
2903     --- a/drivers/net/wireless/ti/wlcore/cmd.c
2904     +++ b/drivers/net/wireless/ti/wlcore/cmd.c
2905     @@ -35,6 +35,7 @@
2906     #include "wl12xx_80211.h"
2907     #include "cmd.h"
2908     #include "event.h"
2909     +#include "ps.h"
2910     #include "tx.h"
2911     #include "hw_ops.h"
2912    
2913     @@ -191,6 +192,10 @@ int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
2914    
2915     timeout_time = jiffies + msecs_to_jiffies(WL1271_EVENT_TIMEOUT);
2916    
2917     + ret = wl1271_ps_elp_wakeup(wl);
2918     + if (ret < 0)
2919     + return ret;
2920     +
2921     do {
2922     if (time_after(jiffies, timeout_time)) {
2923     wl1271_debug(DEBUG_CMD, "timeout waiting for event %d",
2924     @@ -222,6 +227,7 @@ int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
2925     } while (!event);
2926    
2927     out:
2928     + wl1271_ps_elp_sleep(wl);
2929     kfree(events_vector);
2930     return ret;
2931     }
2932     diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c
2933     index c0080f6ab2f5..0b0a4825b3eb 100644
2934     --- a/drivers/nvme/target/fcloop.c
2935     +++ b/drivers/nvme/target/fcloop.c
2936     @@ -300,7 +300,7 @@ fcloop_tgt_lsrqst_done_work(struct work_struct *work)
2937     struct fcloop_tport *tport = tls_req->tport;
2938     struct nvmefc_ls_req *lsreq = tls_req->lsreq;
2939    
2940     - if (tport->remoteport)
2941     + if (!tport || tport->remoteport)
2942     lsreq->done(lsreq, tls_req->status);
2943     }
2944    
2945     @@ -318,6 +318,7 @@ fcloop_ls_req(struct nvme_fc_local_port *localport,
2946    
2947     if (!rport->targetport) {
2948     tls_req->status = -ECONNREFUSED;
2949     + tls_req->tport = NULL;
2950     schedule_work(&tls_req->work);
2951     return ret;
2952     }
2953     diff --git a/drivers/power/reset/vexpress-poweroff.c b/drivers/power/reset/vexpress-poweroff.c
2954     index 102f95a09460..e9e749f87517 100644
2955     --- a/drivers/power/reset/vexpress-poweroff.c
2956     +++ b/drivers/power/reset/vexpress-poweroff.c
2957     @@ -35,6 +35,7 @@ static void vexpress_reset_do(struct device *dev, const char *what)
2958     }
2959    
2960     static struct device *vexpress_power_off_device;
2961     +static atomic_t vexpress_restart_nb_refcnt = ATOMIC_INIT(0);
2962    
2963     static void vexpress_power_off(void)
2964     {
2965     @@ -99,10 +100,13 @@ static int _vexpress_register_restart_handler(struct device *dev)
2966     int err;
2967    
2968     vexpress_restart_device = dev;
2969     - err = register_restart_handler(&vexpress_restart_nb);
2970     - if (err) {
2971     - dev_err(dev, "cannot register restart handler (err=%d)\n", err);
2972     - return err;
2973     + if (atomic_inc_return(&vexpress_restart_nb_refcnt) == 1) {
2974     + err = register_restart_handler(&vexpress_restart_nb);
2975     + if (err) {
2976     + dev_err(dev, "cannot register restart handler (err=%d)\n", err);
2977     + atomic_dec(&vexpress_restart_nb_refcnt);
2978     + return err;
2979     + }
2980     }
2981     device_create_file(dev, &dev_attr_active);
2982    
2983     diff --git a/drivers/power/supply/axp288_charger.c b/drivers/power/supply/axp288_charger.c
2984     index 9dc7590e07cb..4d016fbc3527 100644
2985     --- a/drivers/power/supply/axp288_charger.c
2986     +++ b/drivers/power/supply/axp288_charger.c
2987     @@ -771,7 +771,7 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
2988     }
2989    
2990     /* Determine charge current limit */
2991     - cc = (ret & CHRG_CCCV_CC_MASK) >> CHRG_CCCV_CC_BIT_POS;
2992     + cc = (val & CHRG_CCCV_CC_MASK) >> CHRG_CCCV_CC_BIT_POS;
2993     cc = (cc * CHRG_CCCV_CC_LSB_RES) + CHRG_CCCV_CC_OFFSET;
2994     info->cc = cc;
2995    
2996     diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
2997     index 02c6340ae36f..3226faebe0a0 100644
2998     --- a/drivers/power/supply/power_supply_core.c
2999     +++ b/drivers/power/supply/power_supply_core.c
3000     @@ -14,6 +14,7 @@
3001     #include <linux/types.h>
3002     #include <linux/init.h>
3003     #include <linux/slab.h>
3004     +#include <linux/delay.h>
3005     #include <linux/device.h>
3006     #include <linux/notifier.h>
3007     #include <linux/err.h>
3008     @@ -139,8 +140,13 @@ static void power_supply_deferred_register_work(struct work_struct *work)
3009     struct power_supply *psy = container_of(work, struct power_supply,
3010     deferred_register_work.work);
3011    
3012     - if (psy->dev.parent)
3013     - mutex_lock(&psy->dev.parent->mutex);
3014     + if (psy->dev.parent) {
3015     + while (!mutex_trylock(&psy->dev.parent->mutex)) {
3016     + if (psy->removing)
3017     + return;
3018     + msleep(10);
3019     + }
3020     + }
3021    
3022     power_supply_changed(psy);
3023    
3024     @@ -1071,6 +1077,7 @@ EXPORT_SYMBOL_GPL(devm_power_supply_register_no_ws);
3025     void power_supply_unregister(struct power_supply *psy)
3026     {
3027     WARN_ON(atomic_dec_return(&psy->use_cnt));
3028     + psy->removing = true;
3029     cancel_work_sync(&psy->changed_work);
3030     cancel_delayed_work_sync(&psy->deferred_register_work);
3031     sysfs_remove_link(&psy->dev.kobj, "powers");
3032     diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
3033     index b64b7916507f..b2cb4f497ef6 100644
3034     --- a/drivers/regulator/core.c
3035     +++ b/drivers/regulator/core.c
3036     @@ -4115,13 +4115,13 @@ regulator_register(const struct regulator_desc *regulator_desc,
3037     !rdev->desc->fixed_uV)
3038     rdev->is_switch = true;
3039    
3040     + dev_set_drvdata(&rdev->dev, rdev);
3041     ret = device_register(&rdev->dev);
3042     if (ret != 0) {
3043     put_device(&rdev->dev);
3044     goto unset_supplies;
3045     }
3046    
3047     - dev_set_drvdata(&rdev->dev, rdev);
3048     rdev_init_debugfs(rdev);
3049    
3050     /* try to resolve regulators supply since a new one was registered */
3051     diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
3052     index d072f84a8535..92c4f5180ad0 100644
3053     --- a/drivers/s390/block/dasd.c
3054     +++ b/drivers/s390/block/dasd.c
3055     @@ -3190,6 +3190,7 @@ static int dasd_alloc_queue(struct dasd_block *block)
3056     block->tag_set.nr_hw_queues = DASD_NR_HW_QUEUES;
3057     block->tag_set.queue_depth = DASD_MAX_LCU_DEV * DASD_REQ_PER_DEV;
3058     block->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
3059     + block->tag_set.numa_node = NUMA_NO_NODE;
3060    
3061     rc = blk_mq_alloc_tag_set(&block->tag_set);
3062     if (rc)
3063     diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
3064     index eb51893c74a4..5c944ee76ec1 100644
3065     --- a/drivers/s390/block/scm_blk.c
3066     +++ b/drivers/s390/block/scm_blk.c
3067     @@ -454,6 +454,7 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev)
3068     bdev->tag_set.nr_hw_queues = nr_requests;
3069     bdev->tag_set.queue_depth = nr_requests_per_io * nr_requests;
3070     bdev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
3071     + bdev->tag_set.numa_node = NUMA_NO_NODE;
3072    
3073     ret = blk_mq_alloc_tag_set(&bdev->tag_set);
3074     if (ret)
3075     diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
3076     index 42921dbba927..4ca10501647b 100644
3077     --- a/drivers/scsi/bnx2i/bnx2i_hwi.c
3078     +++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
3079     @@ -2742,6 +2742,8 @@ int bnx2i_map_ep_dbell_regs(struct bnx2i_endpoint *ep)
3080     BNX2X_DOORBELL_PCI_BAR);
3081     reg_off = (1 << BNX2X_DB_SHIFT) * (cid_num & 0x1FFFF);
3082     ep->qp.ctx_base = ioremap_nocache(reg_base + reg_off, 4);
3083     + if (!ep->qp.ctx_base)
3084     + return -ENOMEM;
3085     goto arm_cq;
3086     }
3087    
3088     diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
3089     index 7d156b161482..53eb27731373 100644
3090     --- a/drivers/scsi/ibmvscsi/ibmvscsi.c
3091     +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
3092     @@ -93,7 +93,7 @@ static int max_requests = IBMVSCSI_MAX_REQUESTS_DEFAULT;
3093     static int max_events = IBMVSCSI_MAX_REQUESTS_DEFAULT + 2;
3094     static int fast_fail = 1;
3095     static int client_reserve = 1;
3096     -static char partition_name[97] = "UNKNOWN";
3097     +static char partition_name[96] = "UNKNOWN";
3098     static unsigned int partition_number = -1;
3099     static LIST_HEAD(ibmvscsi_head);
3100    
3101     @@ -262,7 +262,7 @@ static void gather_partition_info(void)
3102    
3103     ppartition_name = of_get_property(of_root, "ibm,partition-name", NULL);
3104     if (ppartition_name)
3105     - strncpy(partition_name, ppartition_name,
3106     + strlcpy(partition_name, ppartition_name,
3107     sizeof(partition_name));
3108     p_number_ptr = of_get_property(of_root, "ibm,partition-no", NULL);
3109     if (p_number_ptr)
3110     diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
3111     index 985378e4bb6f..d55c365be238 100644
3112     --- a/drivers/scsi/megaraid/megaraid_sas_base.c
3113     +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
3114     @@ -6597,6 +6597,9 @@ megasas_resume(struct pci_dev *pdev)
3115     goto fail_init_mfi;
3116     }
3117    
3118     + if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS)
3119     + goto fail_init_mfi;
3120     +
3121     tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
3122     (unsigned long)instance);
3123    
3124     diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
3125     index 2a10b3f94ff7..20981e08ee97 100644
3126     --- a/drivers/spi/spi-rspi.c
3127     +++ b/drivers/spi/spi-rspi.c
3128     @@ -598,11 +598,13 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
3129    
3130     ret = wait_event_interruptible_timeout(rspi->wait,
3131     rspi->dma_callbacked, HZ);
3132     - if (ret > 0 && rspi->dma_callbacked)
3133     + if (ret > 0 && rspi->dma_callbacked) {
3134     ret = 0;
3135     - else if (!ret) {
3136     - dev_err(&rspi->master->dev, "DMA timeout\n");
3137     - ret = -ETIMEDOUT;
3138     + } else {
3139     + if (!ret) {
3140     + dev_err(&rspi->master->dev, "DMA timeout\n");
3141     + ret = -ETIMEDOUT;
3142     + }
3143     if (tx)
3144     dmaengine_terminate_all(rspi->master->dma_tx);
3145     if (rx)
3146     @@ -1352,12 +1354,36 @@ static const struct platform_device_id spi_driver_ids[] = {
3147    
3148     MODULE_DEVICE_TABLE(platform, spi_driver_ids);
3149    
3150     +#ifdef CONFIG_PM_SLEEP
3151     +static int rspi_suspend(struct device *dev)
3152     +{
3153     + struct platform_device *pdev = to_platform_device(dev);
3154     + struct rspi_data *rspi = platform_get_drvdata(pdev);
3155     +
3156     + return spi_master_suspend(rspi->master);
3157     +}
3158     +
3159     +static int rspi_resume(struct device *dev)
3160     +{
3161     + struct platform_device *pdev = to_platform_device(dev);
3162     + struct rspi_data *rspi = platform_get_drvdata(pdev);
3163     +
3164     + return spi_master_resume(rspi->master);
3165     +}
3166     +
3167     +static SIMPLE_DEV_PM_OPS(rspi_pm_ops, rspi_suspend, rspi_resume);
3168     +#define DEV_PM_OPS &rspi_pm_ops
3169     +#else
3170     +#define DEV_PM_OPS NULL
3171     +#endif /* CONFIG_PM_SLEEP */
3172     +
3173     static struct platform_driver rspi_driver = {
3174     .probe = rspi_probe,
3175     .remove = rspi_remove,
3176     .id_table = spi_driver_ids,
3177     .driver = {
3178     .name = "renesas_spi",
3179     + .pm = DEV_PM_OPS,
3180     .of_match_table = of_match_ptr(rspi_of_match),
3181     },
3182     };
3183     diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
3184     index 0fea18ab970e..db2a529accae 100644
3185     --- a/drivers/spi/spi-sh-msiof.c
3186     +++ b/drivers/spi/spi-sh-msiof.c
3187     @@ -384,7 +384,8 @@ static void sh_msiof_spi_set_mode_regs(struct sh_msiof_spi_priv *p,
3188    
3189     static void sh_msiof_reset_str(struct sh_msiof_spi_priv *p)
3190     {
3191     - sh_msiof_write(p, STR, sh_msiof_read(p, STR));
3192     + sh_msiof_write(p, STR,
3193     + sh_msiof_read(p, STR) & ~(STR_TDREQ | STR_RDREQ));
3194     }
3195    
3196     static void sh_msiof_spi_write_fifo_8(struct sh_msiof_spi_priv *p,
3197     @@ -1361,12 +1362,37 @@ static const struct platform_device_id spi_driver_ids[] = {
3198     };
3199     MODULE_DEVICE_TABLE(platform, spi_driver_ids);
3200    
3201     +#ifdef CONFIG_PM_SLEEP
3202     +static int sh_msiof_spi_suspend(struct device *dev)
3203     +{
3204     + struct platform_device *pdev = to_platform_device(dev);
3205     + struct sh_msiof_spi_priv *p = platform_get_drvdata(pdev);
3206     +
3207     + return spi_master_suspend(p->master);
3208     +}
3209     +
3210     +static int sh_msiof_spi_resume(struct device *dev)
3211     +{
3212     + struct platform_device *pdev = to_platform_device(dev);
3213     + struct sh_msiof_spi_priv *p = platform_get_drvdata(pdev);
3214     +
3215     + return spi_master_resume(p->master);
3216     +}
3217     +
3218     +static SIMPLE_DEV_PM_OPS(sh_msiof_spi_pm_ops, sh_msiof_spi_suspend,
3219     + sh_msiof_spi_resume);
3220     +#define DEV_PM_OPS &sh_msiof_spi_pm_ops
3221     +#else
3222     +#define DEV_PM_OPS NULL
3223     +#endif /* CONFIG_PM_SLEEP */
3224     +
3225     static struct platform_driver sh_msiof_spi_drv = {
3226     .probe = sh_msiof_spi_probe,
3227     .remove = sh_msiof_spi_remove,
3228     .id_table = spi_driver_ids,
3229     .driver = {
3230     .name = "spi_sh_msiof",
3231     + .pm = DEV_PM_OPS,
3232     .of_match_table = of_match_ptr(sh_msiof_match),
3233     },
3234     };
3235     diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c
3236     index 3e12d5f87ee4..9831c1106945 100644
3237     --- a/drivers/spi/spi-tegra20-slink.c
3238     +++ b/drivers/spi/spi-tegra20-slink.c
3239     @@ -1063,6 +1063,24 @@ static int tegra_slink_probe(struct platform_device *pdev)
3240     goto exit_free_master;
3241     }
3242    
3243     + /* disabled clock may cause interrupt storm upon request */
3244     + tspi->clk = devm_clk_get(&pdev->dev, NULL);
3245     + if (IS_ERR(tspi->clk)) {
3246     + ret = PTR_ERR(tspi->clk);
3247     + dev_err(&pdev->dev, "Can not get clock %d\n", ret);
3248     + goto exit_free_master;
3249     + }
3250     + ret = clk_prepare(tspi->clk);
3251     + if (ret < 0) {
3252     + dev_err(&pdev->dev, "Clock prepare failed %d\n", ret);
3253     + goto exit_free_master;
3254     + }
3255     + ret = clk_enable(tspi->clk);
3256     + if (ret < 0) {
3257     + dev_err(&pdev->dev, "Clock enable failed %d\n", ret);
3258     + goto exit_free_master;
3259     + }
3260     +
3261     spi_irq = platform_get_irq(pdev, 0);
3262     tspi->irq = spi_irq;
3263     ret = request_threaded_irq(tspi->irq, tegra_slink_isr,
3264     @@ -1071,14 +1089,7 @@ static int tegra_slink_probe(struct platform_device *pdev)
3265     if (ret < 0) {
3266     dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
3267     tspi->irq);
3268     - goto exit_free_master;
3269     - }
3270     -
3271     - tspi->clk = devm_clk_get(&pdev->dev, NULL);
3272     - if (IS_ERR(tspi->clk)) {
3273     - dev_err(&pdev->dev, "can not get clock\n");
3274     - ret = PTR_ERR(tspi->clk);
3275     - goto exit_free_irq;
3276     + goto exit_clk_disable;
3277     }
3278    
3279     tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi");
3280     @@ -1138,6 +1149,8 @@ exit_rx_dma_free:
3281     tegra_slink_deinit_dma_param(tspi, true);
3282     exit_free_irq:
3283     free_irq(spi_irq, tspi);
3284     +exit_clk_disable:
3285     + clk_disable(tspi->clk);
3286     exit_free_master:
3287     spi_master_put(master);
3288     return ret;
3289     @@ -1150,6 +1163,8 @@ static int tegra_slink_remove(struct platform_device *pdev)
3290    
3291     free_irq(tspi->irq, tspi);
3292    
3293     + clk_disable(tspi->clk);
3294     +
3295     if (tspi->tx_dma_chan)
3296     tegra_slink_deinit_dma_param(tspi, false);
3297    
3298     diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
3299     index 893b2836089c..4151bb44a410 100644
3300     --- a/drivers/staging/android/ashmem.c
3301     +++ b/drivers/staging/android/ashmem.c
3302     @@ -374,6 +374,12 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
3303     goto out;
3304     }
3305    
3306     + /* requested mapping size larger than object size */
3307     + if (vma->vm_end - vma->vm_start > PAGE_ALIGN(asma->size)) {
3308     + ret = -EINVAL;
3309     + goto out;
3310     + }
3311     +
3312     /* requested protection bits must match our allowed protection mask */
3313     if (unlikely((vma->vm_flags & ~calc_vm_prot_bits(asma->prot_mask, 0)) &
3314     calc_vm_prot_bits(PROT_MASK, 0))) {
3315     diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
3316     index 0790b3d9e255..111afd34aa3c 100644
3317     --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
3318     +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
3319     @@ -210,6 +210,7 @@ static void prp_vb2_buf_done(struct prp_priv *priv, struct ipuv3_channel *ch)
3320    
3321     done = priv->active_vb2_buf[priv->ipu_buf_num];
3322     if (done) {
3323     + done->vbuf.field = vdev->fmt.fmt.pix.field;
3324     vb = &done->vbuf.vb2_buf;
3325     vb->timestamp = ktime_get_ns();
3326     vb2_buffer_done(vb, priv->nfb4eof ?
3327     diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
3328     index 6d856118c223..83ecb5b2fb9e 100644
3329     --- a/drivers/staging/media/imx/imx-media-csi.c
3330     +++ b/drivers/staging/media/imx/imx-media-csi.c
3331     @@ -171,6 +171,7 @@ static void csi_vb2_buf_done(struct csi_priv *priv)
3332    
3333     done = priv->active_vb2_buf[priv->ipu_buf_num];
3334     if (done) {
3335     + done->vbuf.field = vdev->fmt.fmt.pix.field;
3336     vb = &done->vbuf.vb2_buf;
3337     vb->timestamp = ktime_get_ns();
3338     vb2_buffer_done(vb, priv->nfb4eof ?
3339     diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c
3340     index 4033a2cf7ac9..d98d5fe25a17 100644
3341     --- a/drivers/staging/rts5208/sd.c
3342     +++ b/drivers/staging/rts5208/sd.c
3343     @@ -5002,7 +5002,7 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3344     goto sd_execute_write_cmd_failed;
3345     }
3346    
3347     - rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
3348     + retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
3349     if (retval != STATUS_SUCCESS) {
3350     rtsx_trace(chip);
3351     goto sd_execute_write_cmd_failed;
3352     diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
3353     index 594d07a1e995..16e7516052a4 100644
3354     --- a/drivers/target/iscsi/iscsi_target_tpg.c
3355     +++ b/drivers/target/iscsi/iscsi_target_tpg.c
3356     @@ -633,8 +633,7 @@ int iscsit_ta_authentication(struct iscsi_portal_group *tpg, u32 authentication)
3357     none = strstr(buf1, NONE);
3358     if (none)
3359     goto out;
3360     - strncat(buf1, ",", strlen(","));
3361     - strncat(buf1, NONE, strlen(NONE));
3362     + strlcat(buf1, "," NONE, sizeof(buf1));
3363     if (iscsi_update_param_value(param, buf1) < 0)
3364     return -EINVAL;
3365     }
3366     diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
3367     index e8dd6da164b2..84742125f773 100644
3368     --- a/drivers/target/target_core_device.c
3369     +++ b/drivers/target/target_core_device.c
3370     @@ -904,14 +904,20 @@ struct se_device *target_find_device(int id, bool do_depend)
3371     EXPORT_SYMBOL(target_find_device);
3372    
3373     struct devices_idr_iter {
3374     + struct config_item *prev_item;
3375     int (*fn)(struct se_device *dev, void *data);
3376     void *data;
3377     };
3378    
3379     static int target_devices_idr_iter(int id, void *p, void *data)
3380     + __must_hold(&device_mutex)
3381     {
3382     struct devices_idr_iter *iter = data;
3383     struct se_device *dev = p;
3384     + int ret;
3385     +
3386     + config_item_put(iter->prev_item);
3387     + iter->prev_item = NULL;
3388    
3389     /*
3390     * We add the device early to the idr, so it can be used
3391     @@ -922,7 +928,15 @@ static int target_devices_idr_iter(int id, void *p, void *data)
3392     if (!(dev->dev_flags & DF_CONFIGURED))
3393     return 0;
3394    
3395     - return iter->fn(dev, iter->data);
3396     + iter->prev_item = config_item_get_unless_zero(&dev->dev_group.cg_item);
3397     + if (!iter->prev_item)
3398     + return 0;
3399     + mutex_unlock(&device_mutex);
3400     +
3401     + ret = iter->fn(dev, iter->data);
3402     +
3403     + mutex_lock(&device_mutex);
3404     + return ret;
3405     }
3406    
3407     /**
3408     @@ -936,15 +950,13 @@ static int target_devices_idr_iter(int id, void *p, void *data)
3409     int target_for_each_device(int (*fn)(struct se_device *dev, void *data),
3410     void *data)
3411     {
3412     - struct devices_idr_iter iter;
3413     + struct devices_idr_iter iter = { .fn = fn, .data = data };
3414     int ret;
3415    
3416     - iter.fn = fn;
3417     - iter.data = data;
3418     -
3419     mutex_lock(&device_mutex);
3420     ret = idr_for_each(&devices_idr, target_devices_idr_iter, &iter);
3421     mutex_unlock(&device_mutex);
3422     + config_item_put(iter.prev_item);
3423     return ret;
3424     }
3425    
3426     diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
3427     index d04ec3b9e5ff..8a70b57d129c 100644
3428     --- a/drivers/thermal/of-thermal.c
3429     +++ b/drivers/thermal/of-thermal.c
3430     @@ -278,10 +278,13 @@ static int of_thermal_set_mode(struct thermal_zone_device *tz,
3431    
3432     mutex_lock(&tz->lock);
3433    
3434     - if (mode == THERMAL_DEVICE_ENABLED)
3435     + if (mode == THERMAL_DEVICE_ENABLED) {
3436     tz->polling_delay = data->polling_delay;
3437     - else
3438     + tz->passive_delay = data->passive_delay;
3439     + } else {
3440     tz->polling_delay = 0;
3441     + tz->passive_delay = 0;
3442     + }
3443    
3444     mutex_unlock(&tz->lock);
3445    
3446     diff --git a/drivers/tty/serial/8250/serial_cs.c b/drivers/tty/serial/8250/serial_cs.c
3447     index 933c2688dd7e..8106353ce7aa 100644
3448     --- a/drivers/tty/serial/8250/serial_cs.c
3449     +++ b/drivers/tty/serial/8250/serial_cs.c
3450     @@ -637,8 +637,10 @@ static int serial_config(struct pcmcia_device *link)
3451     (link->has_func_id) &&
3452     (link->socket->pcmcia_pfc == 0) &&
3453     ((link->func_id == CISTPL_FUNCID_MULTI) ||
3454     - (link->func_id == CISTPL_FUNCID_SERIAL)))
3455     - pcmcia_loop_config(link, serial_check_for_multi, info);
3456     + (link->func_id == CISTPL_FUNCID_SERIAL))) {
3457     + if (pcmcia_loop_config(link, serial_check_for_multi, info))
3458     + goto failed;
3459     + }
3460    
3461     /*
3462     * Apply any multi-port quirk.
3463     diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
3464     index 9ac142cfc1f1..8b2b694334ec 100644
3465     --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c
3466     +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
3467     @@ -1068,8 +1068,8 @@ static int poll_wait_key(char *obuf, struct uart_cpm_port *pinfo)
3468     /* Get the address of the host memory buffer.
3469     */
3470     bdp = pinfo->rx_cur;
3471     - while (bdp->cbd_sc & BD_SC_EMPTY)
3472     - ;
3473     + if (bdp->cbd_sc & BD_SC_EMPTY)
3474     + return NO_POLL_CHAR;
3475    
3476     /* If the buffer address is in the CPM DPRAM, don't
3477     * convert it.
3478     @@ -1104,7 +1104,11 @@ static int cpm_get_poll_char(struct uart_port *port)
3479     poll_chars = 0;
3480     }
3481     if (poll_chars <= 0) {
3482     - poll_chars = poll_wait_key(poll_buf, pinfo);
3483     + int ret = poll_wait_key(poll_buf, pinfo);
3484     +
3485     + if (ret == NO_POLL_CHAR)
3486     + return ret;
3487     + poll_chars = ret;
3488     pollp = poll_buf;
3489     }
3490     poll_chars--;
3491     diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
3492     index 7a3db9378fa3..fd64ac2c1a74 100644
3493     --- a/drivers/tty/serial/fsl_lpuart.c
3494     +++ b/drivers/tty/serial/fsl_lpuart.c
3495     @@ -983,7 +983,8 @@ static inline int lpuart_start_rx_dma(struct lpuart_port *sport)
3496     struct circ_buf *ring = &sport->rx_ring;
3497     int ret, nent;
3498     int bits, baud;
3499     - struct tty_struct *tty = tty_port_tty_get(&sport->port.state->port);
3500     + struct tty_port *port = &sport->port.state->port;
3501     + struct tty_struct *tty = port->tty;
3502     struct ktermios *termios = &tty->termios;
3503    
3504     baud = tty_get_baud_rate(tty);
3505     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
3506     index 8deaf2ad8b34..4e827e5a52a3 100644
3507     --- a/drivers/tty/serial/imx.c
3508     +++ b/drivers/tty/serial/imx.c
3509     @@ -2213,6 +2213,14 @@ static int serial_imx_probe(struct platform_device *pdev)
3510     ret);
3511     return ret;
3512     }
3513     +
3514     + ret = devm_request_irq(&pdev->dev, rtsirq, imx_rtsint, 0,
3515     + dev_name(&pdev->dev), sport);
3516     + if (ret) {
3517     + dev_err(&pdev->dev, "failed to request rts irq: %d\n",
3518     + ret);
3519     + return ret;
3520     + }
3521     } else {
3522     ret = devm_request_irq(&pdev->dev, rxirq, imx_int, 0,
3523     dev_name(&pdev->dev), sport);
3524     diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
3525     index 8bc8fe2b75f7..37dba940d898 100644
3526     --- a/drivers/tty/serial/sh-sci.c
3527     +++ b/drivers/tty/serial/sh-sci.c
3528     @@ -2060,6 +2060,8 @@ static void sci_shutdown(struct uart_port *port)
3529     }
3530     #endif
3531    
3532     + if (s->rx_trigger > 1 && s->rx_fifo_timeout > 0)
3533     + del_timer_sync(&s->rx_fifo_timer);
3534     sci_free_irq(s);
3535     sci_free_dma(port);
3536     }
3537     diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
3538     index a9509ecccedb..3e865dbf878c 100644
3539     --- a/drivers/usb/class/cdc-wdm.c
3540     +++ b/drivers/usb/class/cdc-wdm.c
3541     @@ -457,7 +457,7 @@ static int service_outstanding_interrupt(struct wdm_device *desc)
3542    
3543     set_bit(WDM_RESPONDING, &desc->flags);
3544     spin_unlock_irq(&desc->iuspin);
3545     - rv = usb_submit_urb(desc->response, GFP_ATOMIC);
3546     + rv = usb_submit_urb(desc->response, GFP_KERNEL);
3547     spin_lock_irq(&desc->iuspin);
3548     if (rv) {
3549     dev_err(&desc->intf->dev,
3550     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
3551     index ab245352f102..76cb9b3649b4 100644
3552     --- a/drivers/usb/core/devio.c
3553     +++ b/drivers/usb/core/devio.c
3554     @@ -1451,10 +1451,13 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
3555     struct async *as = NULL;
3556     struct usb_ctrlrequest *dr = NULL;
3557     unsigned int u, totlen, isofrmlen;
3558     - int i, ret, is_in, num_sgs = 0, ifnum = -1;
3559     + int i, ret, num_sgs = 0, ifnum = -1;
3560     int number_of_packets = 0;
3561     unsigned int stream_id = 0;
3562     void *buf;
3563     + bool is_in;
3564     + bool allow_short = false;
3565     + bool allow_zero = false;
3566     unsigned long mask = USBDEVFS_URB_SHORT_NOT_OK |
3567     USBDEVFS_URB_BULK_CONTINUATION |
3568     USBDEVFS_URB_NO_FSBR |
3569     @@ -1488,6 +1491,8 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
3570     u = 0;
3571     switch (uurb->type) {
3572     case USBDEVFS_URB_TYPE_CONTROL:
3573     + if (is_in)
3574     + allow_short = true;
3575     if (!usb_endpoint_xfer_control(&ep->desc))
3576     return -EINVAL;
3577     /* min 8 byte setup packet */
3578     @@ -1528,6 +1533,10 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
3579     break;
3580    
3581     case USBDEVFS_URB_TYPE_BULK:
3582     + if (!is_in)
3583     + allow_zero = true;
3584     + else
3585     + allow_short = true;
3586     switch (usb_endpoint_type(&ep->desc)) {
3587     case USB_ENDPOINT_XFER_CONTROL:
3588     case USB_ENDPOINT_XFER_ISOC:
3589     @@ -1548,6 +1557,10 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
3590     if (!usb_endpoint_xfer_int(&ep->desc))
3591     return -EINVAL;
3592     interrupt_urb:
3593     + if (!is_in)
3594     + allow_zero = true;
3595     + else
3596     + allow_short = true;
3597     break;
3598    
3599     case USBDEVFS_URB_TYPE_ISO:
3600     @@ -1692,16 +1705,21 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
3601     u = (is_in ? URB_DIR_IN : URB_DIR_OUT);
3602     if (uurb->flags & USBDEVFS_URB_ISO_ASAP)
3603     u |= URB_ISO_ASAP;
3604     - if (uurb->flags & USBDEVFS_URB_SHORT_NOT_OK && is_in)
3605     + if (allow_short && uurb->flags & USBDEVFS_URB_SHORT_NOT_OK)
3606     u |= URB_SHORT_NOT_OK;
3607     if (uurb->flags & USBDEVFS_URB_NO_FSBR)
3608     u |= URB_NO_FSBR;
3609     - if (uurb->flags & USBDEVFS_URB_ZERO_PACKET)
3610     + if (allow_zero && uurb->flags & USBDEVFS_URB_ZERO_PACKET)
3611     u |= URB_ZERO_PACKET;
3612     if (uurb->flags & USBDEVFS_URB_NO_INTERRUPT)
3613     u |= URB_NO_INTERRUPT;
3614     as->urb->transfer_flags = u;
3615    
3616     + if (!allow_short && uurb->flags & USBDEVFS_URB_SHORT_NOT_OK)
3617     + dev_warn(&ps->dev->dev, "Requested nonsensical USBDEVFS_URB_SHORT_NOT_OK.\n");
3618     + if (!allow_zero && uurb->flags & USBDEVFS_URB_ZERO_PACKET)
3619     + dev_warn(&ps->dev->dev, "Requested nonsensical USBDEVFS_URB_ZERO_PACKET.\n");
3620     +
3621     as->urb->transfer_buffer_length = uurb->buffer_length;
3622     as->urb->setup_packet = (unsigned char *)dr;
3623     dr = NULL;
3624     diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
3625     index eb87a259d55c..2f3dbf1c3c2d 100644
3626     --- a/drivers/usb/core/driver.c
3627     +++ b/drivers/usb/core/driver.c
3628     @@ -512,7 +512,6 @@ int usb_driver_claim_interface(struct usb_driver *driver,
3629     struct device *dev;
3630     struct usb_device *udev;
3631     int retval = 0;
3632     - int lpm_disable_error = -ENODEV;
3633    
3634     if (!iface)
3635     return -ENODEV;
3636     @@ -533,16 +532,6 @@ int usb_driver_claim_interface(struct usb_driver *driver,
3637    
3638     iface->condition = USB_INTERFACE_BOUND;
3639    
3640     - /* See the comment about disabling LPM in usb_probe_interface(). */
3641     - if (driver->disable_hub_initiated_lpm) {
3642     - lpm_disable_error = usb_unlocked_disable_lpm(udev);
3643     - if (lpm_disable_error) {
3644     - dev_err(&iface->dev, "%s Failed to disable LPM for driver %s\n.",
3645     - __func__, driver->name);
3646     - return -ENOMEM;
3647     - }
3648     - }
3649     -
3650     /* Claimed interfaces are initially inactive (suspended) and
3651     * runtime-PM-enabled, but only if the driver has autosuspend
3652     * support. Otherwise they are marked active, to prevent the
3653     @@ -561,9 +550,20 @@ int usb_driver_claim_interface(struct usb_driver *driver,
3654     if (device_is_registered(dev))
3655     retval = device_bind_driver(dev);
3656    
3657     - /* Attempt to re-enable USB3 LPM, if the disable was successful. */
3658     - if (!lpm_disable_error)
3659     - usb_unlocked_enable_lpm(udev);
3660     + if (retval) {
3661     + dev->driver = NULL;
3662     + usb_set_intfdata(iface, NULL);
3663     + iface->needs_remote_wakeup = 0;
3664     + iface->condition = USB_INTERFACE_UNBOUND;
3665     +
3666     + /*
3667     + * Unbound interfaces are always runtime-PM-disabled
3668     + * and runtime-PM-suspended
3669     + */
3670     + if (driver->supports_autosuspend)
3671     + pm_runtime_disable(dev);
3672     + pm_runtime_set_suspended(dev);
3673     + }
3674    
3675     return retval;
3676     }
3677     diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
3678     index 17681d5638ac..f8b50eaf6d1e 100644
3679     --- a/drivers/usb/core/usb.c
3680     +++ b/drivers/usb/core/usb.c
3681     @@ -228,6 +228,8 @@ struct usb_host_interface *usb_find_alt_setting(
3682     struct usb_interface_cache *intf_cache = NULL;
3683     int i;
3684    
3685     + if (!config)
3686     + return NULL;
3687     for (i = 0; i < config->desc.bNumInterfaces; i++) {
3688     if (config->intf_cache[i]->altsetting[0].desc.bInterfaceNumber
3689     == iface_num) {
3690     diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
3691     index f6b526606ad1..dbb482b7e0ba 100644
3692     --- a/drivers/usb/musb/musb_dsps.c
3693     +++ b/drivers/usb/musb/musb_dsps.c
3694     @@ -684,16 +684,6 @@ dsps_dma_controller_create(struct musb *musb, void __iomem *base)
3695     return controller;
3696     }
3697    
3698     -static void dsps_dma_controller_destroy(struct dma_controller *c)
3699     -{
3700     - struct musb *musb = c->musb;
3701     - struct dsps_glue *glue = dev_get_drvdata(musb->controller->parent);
3702     - void __iomem *usbss_base = glue->usbss_base;
3703     -
3704     - musb_writel(usbss_base, USBSS_IRQ_CLEARR, USBSS_IRQ_PD_COMP);
3705     - cppi41_dma_controller_destroy(c);
3706     -}
3707     -
3708     #ifdef CONFIG_PM_SLEEP
3709     static void dsps_dma_controller_suspend(struct dsps_glue *glue)
3710     {
3711     @@ -723,7 +713,7 @@ static struct musb_platform_ops dsps_ops = {
3712    
3713     #ifdef CONFIG_USB_TI_CPPI41_DMA
3714     .dma_init = dsps_dma_controller_create,
3715     - .dma_exit = dsps_dma_controller_destroy,
3716     + .dma_exit = cppi41_dma_controller_destroy,
3717     #endif
3718     .enable = dsps_musb_enable,
3719     .disable = dsps_musb_disable,
3720     diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
3721     index 3024b9b25360..75181d3afd95 100644
3722     --- a/drivers/usb/serial/kobil_sct.c
3723     +++ b/drivers/usb/serial/kobil_sct.c
3724     @@ -397,12 +397,20 @@ static int kobil_tiocmget(struct tty_struct *tty)
3725     transfer_buffer_length,
3726     KOBIL_TIMEOUT);
3727    
3728     - dev_dbg(&port->dev, "%s - Send get_status_line_state URB returns: %i. Statusline: %02x\n",
3729     - __func__, result, transfer_buffer[0]);
3730     + dev_dbg(&port->dev, "Send get_status_line_state URB returns: %i\n",
3731     + result);
3732     + if (result < 1) {
3733     + if (result >= 0)
3734     + result = -EIO;
3735     + goto out_free;
3736     + }
3737     +
3738     + dev_dbg(&port->dev, "Statusline: %02x\n", transfer_buffer[0]);
3739    
3740     result = 0;
3741     if ((transfer_buffer[0] & SUSBCR_GSL_DSR) != 0)
3742     result = TIOCM_DSR;
3743     +out_free:
3744     kfree(transfer_buffer);
3745     return result;
3746     }
3747     diff --git a/drivers/usb/wusbcore/security.c b/drivers/usb/wusbcore/security.c
3748     index 170f2c38de9b..5274aa7339b8 100644
3749     --- a/drivers/usb/wusbcore/security.c
3750     +++ b/drivers/usb/wusbcore/security.c
3751     @@ -230,7 +230,7 @@ int wusb_dev_sec_add(struct wusbhc *wusbhc,
3752    
3753     result = usb_get_descriptor(usb_dev, USB_DT_SECURITY,
3754     0, secd, sizeof(*secd));
3755     - if (result < sizeof(*secd)) {
3756     + if (result < (int)sizeof(*secd)) {
3757     dev_err(dev, "Can't read security descriptor or "
3758     "not enough data: %d\n", result);
3759     goto out;
3760     diff --git a/drivers/uwb/hwa-rc.c b/drivers/uwb/hwa-rc.c
3761     index 9a53912bdfe9..5d3ba747ae17 100644
3762     --- a/drivers/uwb/hwa-rc.c
3763     +++ b/drivers/uwb/hwa-rc.c
3764     @@ -873,6 +873,7 @@ error_get_version:
3765     error_rc_add:
3766     usb_put_intf(iface);
3767     usb_put_dev(hwarc->usb_dev);
3768     + kfree(hwarc);
3769     error_alloc:
3770     uwb_rc_put(uwb_rc);
3771     error_rc_alloc:
3772     diff --git a/fs/iomap.c b/fs/iomap.c
3773     index d4801f8dd4fd..8f7673a69273 100644
3774     --- a/fs/iomap.c
3775     +++ b/fs/iomap.c
3776     @@ -693,6 +693,7 @@ struct iomap_dio {
3777     atomic_t ref;
3778     unsigned flags;
3779     int error;
3780     + bool wait_for_completion;
3781    
3782     union {
3783     /* used during submission and for synchronous completion: */
3784     @@ -793,9 +794,8 @@ static void iomap_dio_bio_end_io(struct bio *bio)
3785     iomap_dio_set_error(dio, blk_status_to_errno(bio->bi_status));
3786    
3787     if (atomic_dec_and_test(&dio->ref)) {
3788     - if (is_sync_kiocb(dio->iocb)) {
3789     + if (dio->wait_for_completion) {
3790     struct task_struct *waiter = dio->submit.waiter;
3791     -
3792     WRITE_ONCE(dio->submit.waiter, NULL);
3793     wake_up_process(waiter);
3794     } else if (dio->flags & IOMAP_DIO_WRITE) {
3795     @@ -980,13 +980,12 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
3796     dio->end_io = end_io;
3797     dio->error = 0;
3798     dio->flags = 0;
3799     + dio->wait_for_completion = is_sync_kiocb(iocb);
3800    
3801     dio->submit.iter = iter;
3802     - if (is_sync_kiocb(iocb)) {
3803     - dio->submit.waiter = current;
3804     - dio->submit.cookie = BLK_QC_T_NONE;
3805     - dio->submit.last_queue = NULL;
3806     - }
3807     + dio->submit.waiter = current;
3808     + dio->submit.cookie = BLK_QC_T_NONE;
3809     + dio->submit.last_queue = NULL;
3810    
3811     if (iov_iter_rw(iter) == READ) {
3812     if (pos >= dio->i_size)
3813     @@ -1016,7 +1015,7 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
3814     WARN_ON_ONCE(ret);
3815     ret = 0;
3816    
3817     - if (iov_iter_rw(iter) == WRITE && !is_sync_kiocb(iocb) &&
3818     + if (iov_iter_rw(iter) == WRITE && !dio->wait_for_completion &&
3819     !inode->i_sb->s_dio_done_wq) {
3820     ret = sb_init_dio_done_wq(inode->i_sb);
3821     if (ret < 0)
3822     @@ -1031,8 +1030,10 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
3823     iomap_dio_actor);
3824     if (ret <= 0) {
3825     /* magic error code to fall back to buffered I/O */
3826     - if (ret == -ENOTBLK)
3827     + if (ret == -ENOTBLK) {
3828     + dio->wait_for_completion = true;
3829     ret = 0;
3830     + }
3831     break;
3832     }
3833     pos += ret;
3834     @@ -1046,7 +1047,7 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
3835     iomap_dio_set_error(dio, ret);
3836    
3837     if (!atomic_dec_and_test(&dio->ref)) {
3838     - if (!is_sync_kiocb(iocb))
3839     + if (!dio->wait_for_completion)
3840     return -EIOCBQUEUED;
3841    
3842     for (;;) {
3843     diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
3844     index ed4edcd2bc56..a4994e25e19e 100644
3845     --- a/fs/isofs/inode.c
3846     +++ b/fs/isofs/inode.c
3847     @@ -24,6 +24,7 @@
3848     #include <linux/mpage.h>
3849     #include <linux/user_namespace.h>
3850     #include <linux/seq_file.h>
3851     +#include <linux/blkdev.h>
3852    
3853     #include "isofs.h"
3854     #include "zisofs.h"
3855     @@ -653,6 +654,12 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
3856     /*
3857     * What if bugger tells us to go beyond page size?
3858     */
3859     + if (bdev_logical_block_size(s->s_bdev) > 2048) {
3860     + printk(KERN_WARNING
3861     + "ISOFS: unsupported/invalid hardware sector size %d\n",
3862     + bdev_logical_block_size(s->s_bdev));
3863     + goto out_freesbi;
3864     + }
3865     opt.blocksize = sb_min_blocksize(s, opt.blocksize);
3866    
3867     sbi->s_high_sierra = 0; /* default is iso9660 */
3868     diff --git a/fs/locks.c b/fs/locks.c
3869     index 1bd71c4d663a..665e3ce9ab47 100644
3870     --- a/fs/locks.c
3871     +++ b/fs/locks.c
3872     @@ -2074,6 +2074,13 @@ static pid_t locks_translate_pid(struct file_lock *fl, struct pid_namespace *ns)
3873     return -1;
3874     if (IS_REMOTELCK(fl))
3875     return fl->fl_pid;
3876     + /*
3877     + * If the flock owner process is dead and its pid has been already
3878     + * freed, the translation below won't work, but we still want to show
3879     + * flock owner pid number in init pidns.
3880     + */
3881     + if (ns == &init_pid_ns)
3882     + return (pid_t)fl->fl_pid;
3883    
3884     rcu_read_lock();
3885     pid = find_pid_ns(fl->fl_pid, &init_pid_ns);
3886     diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
3887     index 5b6ff168d11a..6d16399a350e 100644
3888     --- a/fs/nfsd/nfs4proc.c
3889     +++ b/fs/nfsd/nfs4proc.c
3890     @@ -1725,6 +1725,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
3891     if (status) {
3892     op = &args->ops[0];
3893     op->status = status;
3894     + resp->opcnt = 1;
3895     goto encode_op;
3896     }
3897    
3898     diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
3899     index d60900b615f9..efed50304b49 100644
3900     --- a/fs/overlayfs/inode.c
3901     +++ b/fs/overlayfs/inode.c
3902     @@ -14,6 +14,7 @@
3903     #include <linux/posix_acl.h>
3904     #include <linux/ratelimit.h>
3905     #include "overlayfs.h"
3906     +#include "ovl_entry.h"
3907    
3908     int ovl_setattr(struct dentry *dentry, struct iattr *attr)
3909     {
3910     @@ -608,39 +609,63 @@ static bool ovl_verify_inode(struct inode *inode, struct dentry *lowerdentry,
3911     return true;
3912     }
3913    
3914     +/*
3915     + * Does overlay inode need to be hashed by lower inode?
3916     + */
3917     +static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper,
3918     + struct dentry *lower, struct dentry *index)
3919     +{
3920     + struct ovl_fs *ofs = sb->s_fs_info;
3921     +
3922     + /* No, if pure upper */
3923     + if (!lower)
3924     + return false;
3925     +
3926     + /* Yes, if already indexed */
3927     + if (index)
3928     + return true;
3929     +
3930     + /* Yes, if won't be copied up */
3931     + if (!ofs->upper_mnt)
3932     + return true;
3933     +
3934     + /* No, if lower hardlink is or will be broken on copy up */
3935     + if ((upper || !ovl_indexdir(sb)) &&
3936     + !d_is_dir(lower) && d_inode(lower)->i_nlink > 1)
3937     + return false;
3938     +
3939     + /* No, if non-indexed upper with NFS export */
3940     + if (sb->s_export_op && upper)
3941     + return false;
3942     +
3943     + /* Otherwise, hash by lower inode for fsnotify */
3944     + return true;
3945     +}
3946     +
3947     struct inode *ovl_get_inode(struct dentry *dentry, struct dentry *upperdentry,
3948     struct dentry *index)
3949     {
3950     + struct super_block *sb = dentry->d_sb;
3951     struct dentry *lowerdentry = ovl_dentry_lower(dentry);
3952     struct inode *realinode = upperdentry ? d_inode(upperdentry) : NULL;
3953     struct inode *inode;
3954     - /* Already indexed or could be indexed on copy up? */
3955     - bool indexed = (index || (ovl_indexdir(dentry->d_sb) && !upperdentry));
3956     - struct dentry *origin = indexed ? lowerdentry : NULL;
3957     + bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry, index);
3958     bool is_dir;
3959    
3960     - if (WARN_ON(upperdentry && indexed && !lowerdentry))
3961     - return ERR_PTR(-EIO);
3962     -
3963     if (!realinode)
3964     realinode = d_inode(lowerdentry);
3965    
3966     /*
3967     - * Copy up origin (lower) may exist for non-indexed non-dir upper, but
3968     - * we must not use lower as hash key in that case.
3969     - * Hash non-dir that is or could be indexed by origin inode.
3970     - * Hash dir that is or could be merged by origin inode.
3971     - * Hash pure upper and non-indexed non-dir by upper inode.
3972     + * Copy up origin (lower) may exist for non-indexed upper, but we must
3973     + * not use lower as hash key if this is a broken hardlink.
3974     */
3975     is_dir = S_ISDIR(realinode->i_mode);
3976     - if (is_dir)
3977     - origin = lowerdentry;
3978     -
3979     - if (upperdentry || origin) {
3980     - struct inode *key = d_inode(origin ?: upperdentry);
3981     + if (upperdentry || bylower) {
3982     + struct inode *key = d_inode(bylower ? lowerdentry :
3983     + upperdentry);
3984     unsigned int nlink = is_dir ? 1 : realinode->i_nlink;
3985    
3986     - inode = iget5_locked(dentry->d_sb, (unsigned long) key,
3987     + inode = iget5_locked(sb, (unsigned long) key,
3988     ovl_inode_test, ovl_inode_set, key);
3989     if (!inode)
3990     goto out_nomem;
3991     @@ -664,7 +689,8 @@ struct inode *ovl_get_inode(struct dentry *dentry, struct dentry *upperdentry,
3992     nlink = ovl_get_nlink(lowerdentry, upperdentry, nlink);
3993     set_nlink(inode, nlink);
3994     } else {
3995     - inode = new_inode(dentry->d_sb);
3996     + /* Lower hardlink that will be broken on copy up */
3997     + inode = new_inode(sb);
3998     if (!inode)
3999     goto out_nomem;
4000     }
4001     diff --git a/include/linux/arm-smccc.h b/include/linux/arm-smccc.h
4002     index ca1d2cc2cdfa..18863d56273c 100644
4003     --- a/include/linux/arm-smccc.h
4004     +++ b/include/linux/arm-smccc.h
4005     @@ -199,47 +199,57 @@ asmlinkage void __arm_smccc_hvc(unsigned long a0, unsigned long a1,
4006    
4007     #define __declare_arg_0(a0, res) \
4008     struct arm_smccc_res *___res = res; \
4009     - register u32 r0 asm("r0") = a0; \
4010     + register unsigned long r0 asm("r0") = (u32)a0; \
4011     register unsigned long r1 asm("r1"); \
4012     register unsigned long r2 asm("r2"); \
4013     register unsigned long r3 asm("r3")
4014    
4015     #define __declare_arg_1(a0, a1, res) \
4016     + typeof(a1) __a1 = a1; \
4017     struct arm_smccc_res *___res = res; \
4018     - register u32 r0 asm("r0") = a0; \
4019     - register typeof(a1) r1 asm("r1") = a1; \
4020     + register unsigned long r0 asm("r0") = (u32)a0; \
4021     + register unsigned long r1 asm("r1") = __a1; \
4022     register unsigned long r2 asm("r2"); \
4023     register unsigned long r3 asm("r3")
4024    
4025     #define __declare_arg_2(a0, a1, a2, res) \
4026     + typeof(a1) __a1 = a1; \
4027     + typeof(a2) __a2 = a2; \
4028     struct arm_smccc_res *___res = res; \
4029     - register u32 r0 asm("r0") = a0; \
4030     - register typeof(a1) r1 asm("r1") = a1; \
4031     - register typeof(a2) r2 asm("r2") = a2; \
4032     + register unsigned long r0 asm("r0") = (u32)a0; \
4033     + register unsigned long r1 asm("r1") = __a1; \
4034     + register unsigned long r2 asm("r2") = __a2; \
4035     register unsigned long r3 asm("r3")
4036    
4037     #define __declare_arg_3(a0, a1, a2, a3, res) \
4038     + typeof(a1) __a1 = a1; \
4039     + typeof(a2) __a2 = a2; \
4040     + typeof(a3) __a3 = a3; \
4041     struct arm_smccc_res *___res = res; \
4042     - register u32 r0 asm("r0") = a0; \
4043     - register typeof(a1) r1 asm("r1") = a1; \
4044     - register typeof(a2) r2 asm("r2") = a2; \
4045     - register typeof(a3) r3 asm("r3") = a3
4046     + register unsigned long r0 asm("r0") = (u32)a0; \
4047     + register unsigned long r1 asm("r1") = __a1; \
4048     + register unsigned long r2 asm("r2") = __a2; \
4049     + register unsigned long r3 asm("r3") = __a3
4050    
4051     #define __declare_arg_4(a0, a1, a2, a3, a4, res) \
4052     + typeof(a4) __a4 = a4; \
4053     __declare_arg_3(a0, a1, a2, a3, res); \
4054     - register typeof(a4) r4 asm("r4") = a4
4055     + register unsigned long r4 asm("r4") = __a4
4056    
4057     #define __declare_arg_5(a0, a1, a2, a3, a4, a5, res) \
4058     + typeof(a5) __a5 = a5; \
4059     __declare_arg_4(a0, a1, a2, a3, a4, res); \
4060     - register typeof(a5) r5 asm("r5") = a5
4061     + register unsigned long r5 asm("r5") = __a5
4062    
4063     #define __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res) \
4064     + typeof(a6) __a6 = a6; \
4065     __declare_arg_5(a0, a1, a2, a3, a4, a5, res); \
4066     - register typeof(a6) r6 asm("r6") = a6
4067     + register unsigned long r6 asm("r6") = __a6
4068    
4069     #define __declare_arg_7(a0, a1, a2, a3, a4, a5, a6, a7, res) \
4070     + typeof(a7) __a7 = a7; \
4071     __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res); \
4072     - register typeof(a7) r7 asm("r7") = a7
4073     + register unsigned long r7 asm("r7") = __a7
4074    
4075     #define ___declare_args(count, ...) __declare_arg_ ## count(__VA_ARGS__)
4076     #define __declare_args(count, ...) ___declare_args(count, __VA_ARGS__)
4077     diff --git a/include/linux/platform_data/ina2xx.h b/include/linux/platform_data/ina2xx.h
4078     index 9abc0ca7259b..9f0aa1b48c78 100644
4079     --- a/include/linux/platform_data/ina2xx.h
4080     +++ b/include/linux/platform_data/ina2xx.h
4081     @@ -1,7 +1,7 @@
4082     /*
4083     * Driver for Texas Instruments INA219, INA226 power monitor chips
4084     *
4085     - * Copyright (C) 2012 Lothar Felten <l-felten@ti.com>
4086     + * Copyright (C) 2012 Lothar Felten <lothar.felten@gmail.com>
4087     *
4088     * This program is free software; you can redistribute it and/or modify
4089     * it under the terms of the GNU General Public License version 2 as
4090     diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
4091     index 672c4f32311e..437a539898ae 100644
4092     --- a/include/linux/posix-timers.h
4093     +++ b/include/linux/posix-timers.h
4094     @@ -82,8 +82,8 @@ struct k_itimer {
4095     clockid_t it_clock;
4096     timer_t it_id;
4097     int it_active;
4098     - int it_overrun;
4099     - int it_overrun_last;
4100     + s64 it_overrun;
4101     + s64 it_overrun_last;
4102     int it_requeue_pending;
4103     int it_sigev_notify;
4104     ktime_t it_interval;
4105     diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
4106     index 79e90b3d3288..4617cf4f6c5b 100644
4107     --- a/include/linux/power_supply.h
4108     +++ b/include/linux/power_supply.h
4109     @@ -251,6 +251,7 @@ struct power_supply {
4110     spinlock_t changed_lock;
4111     bool changed;
4112     bool initialized;
4113     + bool removing;
4114     atomic_t use_cnt;
4115     #ifdef CONFIG_THERMAL
4116     struct thermal_zone_device *tzd;
4117     diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
4118     index 2038ab531616..f8ced87a2efe 100644
4119     --- a/include/linux/slub_def.h
4120     +++ b/include/linux/slub_def.h
4121     @@ -88,7 +88,8 @@ struct kmem_cache {
4122     int object_size; /* The size of an object without meta data */
4123     int offset; /* Free pointer offset. */
4124     #ifdef CONFIG_SLUB_CPU_PARTIAL
4125     - int cpu_partial; /* Number of per cpu partial objects to keep around */
4126     + /* Number of per cpu partial objects to keep around */
4127     + unsigned int cpu_partial;
4128     #endif
4129     struct kmem_cache_order_objects oo;
4130    
4131     diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h
4132     index 62633e7d2630..0f22a5eda4cc 100644
4133     --- a/include/media/v4l2-fh.h
4134     +++ b/include/media/v4l2-fh.h
4135     @@ -37,10 +37,13 @@ struct v4l2_ctrl_handler;
4136     * @prio: priority of the file handler, as defined by &enum v4l2_priority
4137     *
4138     * @wait: event' s wait queue
4139     + * @subscribe_lock: serialise changes to the subscribed list; guarantee that
4140     + * the add and del event callbacks are orderly called
4141     * @subscribed: list of subscribed events
4142     * @available: list of events waiting to be dequeued
4143     * @navailable: number of available events at @available list
4144     * @sequence: event sequence number
4145     + *
4146     * @m2m_ctx: pointer to &struct v4l2_m2m_ctx
4147     */
4148     struct v4l2_fh {
4149     @@ -51,6 +54,7 @@ struct v4l2_fh {
4150    
4151     /* Events */
4152     wait_queue_head_t wait;
4153     + struct mutex subscribe_lock;
4154     struct list_head subscribed;
4155     struct list_head available;
4156     unsigned int navailable;
4157     diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
4158     index 53a4787c08d8..20eaddfa691c 100644
4159     --- a/kernel/bpf/sockmap.c
4160     +++ b/kernel/bpf/sockmap.c
4161     @@ -313,12 +313,15 @@ out:
4162     static void smap_write_space(struct sock *sk)
4163     {
4164     struct smap_psock *psock;
4165     + void (*write_space)(struct sock *sk);
4166    
4167     rcu_read_lock();
4168     psock = smap_psock_sk(sk);
4169     if (likely(psock && test_bit(SMAP_TX_RUNNING, &psock->state)))
4170     schedule_work(&psock->tx_work);
4171     + write_space = psock->save_write_space;
4172     rcu_read_unlock();
4173     + write_space(sk);
4174     }
4175    
4176     static void smap_stop_sock(struct smap_psock *psock, struct sock *sk)
4177     diff --git a/kernel/module.c b/kernel/module.c
4178     index 321b0b1f87e7..2a44c515f0d7 100644
4179     --- a/kernel/module.c
4180     +++ b/kernel/module.c
4181     @@ -4058,7 +4058,7 @@ static unsigned long mod_find_symname(struct module *mod, const char *name)
4182    
4183     for (i = 0; i < kallsyms->num_symtab; i++)
4184     if (strcmp(name, symname(kallsyms, i)) == 0 &&
4185     - kallsyms->symtab[i].st_info != 'U')
4186     + kallsyms->symtab[i].st_shndx != SHN_UNDEF)
4187     return kallsyms->symtab[i].st_value;
4188     return 0;
4189     }
4190     @@ -4104,6 +4104,10 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
4191     if (mod->state == MODULE_STATE_UNFORMED)
4192     continue;
4193     for (i = 0; i < kallsyms->num_symtab; i++) {
4194     +
4195     + if (kallsyms->symtab[i].st_shndx == SHN_UNDEF)
4196     + continue;
4197     +
4198     ret = fn(data, symname(kallsyms, i),
4199     mod, kallsyms->symtab[i].st_value);
4200     if (ret != 0)
4201     diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
4202     index 639321bf2e39..fa5de5e8de61 100644
4203     --- a/kernel/time/alarmtimer.c
4204     +++ b/kernel/time/alarmtimer.c
4205     @@ -581,11 +581,11 @@ static void alarm_timer_rearm(struct k_itimer *timr)
4206     * @timr: Pointer to the posixtimer data struct
4207     * @now: Current time to forward the timer against
4208     */
4209     -static int alarm_timer_forward(struct k_itimer *timr, ktime_t now)
4210     +static s64 alarm_timer_forward(struct k_itimer *timr, ktime_t now)
4211     {
4212     struct alarm *alarm = &timr->it.alarm.alarmtimer;
4213    
4214     - return (int) alarm_forward(alarm, timr->it_interval, now);
4215     + return alarm_forward(alarm, timr->it_interval, now);
4216     }
4217    
4218     /**
4219     @@ -808,7 +808,8 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
4220     /* Convert (if necessary) to absolute time */
4221     if (flags != TIMER_ABSTIME) {
4222     ktime_t now = alarm_bases[type].gettime();
4223     - exp = ktime_add(now, exp);
4224     +
4225     + exp = ktime_add_safe(now, exp);
4226     }
4227    
4228     ret = alarmtimer_do_nsleep(&alarm, exp, type);
4229     diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
4230     index 5b117110b55b..2da660d53a4b 100644
4231     --- a/kernel/time/posix-cpu-timers.c
4232     +++ b/kernel/time/posix-cpu-timers.c
4233     @@ -84,7 +84,7 @@ static void bump_cpu_timer(struct k_itimer *timer, u64 now)
4234     continue;
4235    
4236     timer->it.cpu.expires += incr;
4237     - timer->it_overrun += 1 << i;
4238     + timer->it_overrun += 1LL << i;
4239     delta -= incr;
4240     }
4241     }
4242     diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
4243     index 708992708332..55d45fe2cc17 100644
4244     --- a/kernel/time/posix-timers.c
4245     +++ b/kernel/time/posix-timers.c
4246     @@ -283,6 +283,17 @@ static __init int init_posix_timers(void)
4247     }
4248     __initcall(init_posix_timers);
4249    
4250     +/*
4251     + * The siginfo si_overrun field and the return value of timer_getoverrun(2)
4252     + * are of type int. Clamp the overrun value to INT_MAX
4253     + */
4254     +static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval)
4255     +{
4256     + s64 sum = timr->it_overrun_last + (s64)baseval;
4257     +
4258     + return sum > (s64)INT_MAX ? INT_MAX : (int)sum;
4259     +}
4260     +
4261     static void common_hrtimer_rearm(struct k_itimer *timr)
4262     {
4263     struct hrtimer *timer = &timr->it.real.timer;
4264     @@ -290,9 +301,8 @@ static void common_hrtimer_rearm(struct k_itimer *timr)
4265     if (!timr->it_interval)
4266     return;
4267    
4268     - timr->it_overrun += (unsigned int) hrtimer_forward(timer,
4269     - timer->base->get_time(),
4270     - timr->it_interval);
4271     + timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(),
4272     + timr->it_interval);
4273     hrtimer_restart(timer);
4274     }
4275    
4276     @@ -321,10 +331,10 @@ void posixtimer_rearm(struct siginfo *info)
4277    
4278     timr->it_active = 1;
4279     timr->it_overrun_last = timr->it_overrun;
4280     - timr->it_overrun = -1;
4281     + timr->it_overrun = -1LL;
4282     ++timr->it_requeue_pending;
4283    
4284     - info->si_overrun += timr->it_overrun_last;
4285     + info->si_overrun = timer_overrun_to_int(timr, info->si_overrun);
4286     }
4287    
4288     unlock_timer(timr, flags);
4289     @@ -418,9 +428,8 @@ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
4290     now = ktime_add(now, kj);
4291     }
4292     #endif
4293     - timr->it_overrun += (unsigned int)
4294     - hrtimer_forward(timer, now,
4295     - timr->it_interval);
4296     + timr->it_overrun += hrtimer_forward(timer, now,
4297     + timr->it_interval);
4298     ret = HRTIMER_RESTART;
4299     ++timr->it_requeue_pending;
4300     timr->it_active = 1;
4301     @@ -524,7 +533,7 @@ static int do_timer_create(clockid_t which_clock, struct sigevent *event,
4302     new_timer->it_id = (timer_t) new_timer_id;
4303     new_timer->it_clock = which_clock;
4304     new_timer->kclock = kc;
4305     - new_timer->it_overrun = -1;
4306     + new_timer->it_overrun = -1LL;
4307    
4308     if (event) {
4309     rcu_read_lock();
4310     @@ -645,11 +654,11 @@ static ktime_t common_hrtimer_remaining(struct k_itimer *timr, ktime_t now)
4311     return __hrtimer_expires_remaining_adjusted(timer, now);
4312     }
4313    
4314     -static int common_hrtimer_forward(struct k_itimer *timr, ktime_t now)
4315     +static s64 common_hrtimer_forward(struct k_itimer *timr, ktime_t now)
4316     {
4317     struct hrtimer *timer = &timr->it.real.timer;
4318    
4319     - return (int)hrtimer_forward(timer, now, timr->it_interval);
4320     + return hrtimer_forward(timer, now, timr->it_interval);
4321     }
4322    
4323     /*
4324     @@ -789,7 +798,7 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)
4325     if (!timr)
4326     return -EINVAL;
4327    
4328     - overrun = timr->it_overrun_last;
4329     + overrun = timer_overrun_to_int(timr, 0);
4330     unlock_timer(timr, flags);
4331    
4332     return overrun;
4333     diff --git a/kernel/time/posix-timers.h b/kernel/time/posix-timers.h
4334     index 151e28f5bf30..ddb21145211a 100644
4335     --- a/kernel/time/posix-timers.h
4336     +++ b/kernel/time/posix-timers.h
4337     @@ -19,7 +19,7 @@ struct k_clock {
4338     void (*timer_get)(struct k_itimer *timr,
4339     struct itimerspec64 *cur_setting);
4340     void (*timer_rearm)(struct k_itimer *timr);
4341     - int (*timer_forward)(struct k_itimer *timr, ktime_t now);
4342     + s64 (*timer_forward)(struct k_itimer *timr, ktime_t now);
4343     ktime_t (*timer_remaining)(struct k_itimer *timr, ktime_t now);
4344     int (*timer_try_to_cancel)(struct k_itimer *timr);
4345     void (*timer_arm)(struct k_itimer *timr, ktime_t expires,
4346     diff --git a/lib/klist.c b/lib/klist.c
4347     index 0507fa5d84c5..f6b547812fe3 100644
4348     --- a/lib/klist.c
4349     +++ b/lib/klist.c
4350     @@ -336,8 +336,9 @@ struct klist_node *klist_prev(struct klist_iter *i)
4351     void (*put)(struct klist_node *) = i->i_klist->put;
4352     struct klist_node *last = i->i_cur;
4353     struct klist_node *prev;
4354     + unsigned long flags;
4355    
4356     - spin_lock(&i->i_klist->k_lock);
4357     + spin_lock_irqsave(&i->i_klist->k_lock, flags);
4358    
4359     if (last) {
4360     prev = to_klist_node(last->n_node.prev);
4361     @@ -356,7 +357,7 @@ struct klist_node *klist_prev(struct klist_iter *i)
4362     prev = to_klist_node(prev->n_node.prev);
4363     }
4364    
4365     - spin_unlock(&i->i_klist->k_lock);
4366     + spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
4367    
4368     if (put && last)
4369     put(last);
4370     @@ -377,8 +378,9 @@ struct klist_node *klist_next(struct klist_iter *i)
4371     void (*put)(struct klist_node *) = i->i_klist->put;
4372     struct klist_node *last = i->i_cur;
4373     struct klist_node *next;
4374     + unsigned long flags;
4375    
4376     - spin_lock(&i->i_klist->k_lock);
4377     + spin_lock_irqsave(&i->i_klist->k_lock, flags);
4378    
4379     if (last) {
4380     next = to_klist_node(last->n_node.next);
4381     @@ -397,7 +399,7 @@ struct klist_node *klist_next(struct klist_iter *i)
4382     next = to_klist_node(next->n_node.next);
4383     }
4384    
4385     - spin_unlock(&i->i_klist->k_lock);
4386     + spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
4387    
4388     if (put && last)
4389     put(last);
4390     diff --git a/mm/slub.c b/mm/slub.c
4391     index 10e54c4acd19..220d42e592ef 100644
4392     --- a/mm/slub.c
4393     +++ b/mm/slub.c
4394     @@ -1807,7 +1807,7 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n,
4395     {
4396     struct page *page, *page2;
4397     void *object = NULL;
4398     - int available = 0;
4399     + unsigned int available = 0;
4400     int objects;
4401    
4402     /*
4403     @@ -4942,10 +4942,10 @@ static ssize_t cpu_partial_show(struct kmem_cache *s, char *buf)
4404     static ssize_t cpu_partial_store(struct kmem_cache *s, const char *buf,
4405     size_t length)
4406     {
4407     - unsigned long objects;
4408     + unsigned int objects;
4409     int err;
4410    
4411     - err = kstrtoul(buf, 10, &objects);
4412     + err = kstrtouint(buf, 10, &objects);
4413     if (err)
4414     return err;
4415     if (objects && !kmem_cache_has_cpu_partial(s))
4416     diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c
4417     index 6b1042e21656..52fad5dad9f7 100644
4418     --- a/net/6lowpan/iphc.c
4419     +++ b/net/6lowpan/iphc.c
4420     @@ -770,6 +770,7 @@ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
4421     hdr.hop_limit, &hdr.daddr);
4422    
4423     skb_push(skb, sizeof(hdr));
4424     + skb_reset_mac_header(skb);
4425     skb_reset_network_header(skb);
4426     skb_copy_to_linear_data(skb, &hdr, sizeof(hdr));
4427    
4428     diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
4429     index efa2cdba99d3..4f2971f528db 100644
4430     --- a/net/tls/tls_main.c
4431     +++ b/net/tls/tls_main.c
4432     @@ -195,9 +195,14 @@ static void tls_write_space(struct sock *sk)
4433     {
4434     struct tls_context *ctx = tls_get_ctx(sk);
4435    
4436     - /* We are already sending pages, ignore notification */
4437     - if (ctx->in_tcp_sendpages)
4438     + /* If in_tcp_sendpages call lower protocol write space handler
4439     + * to ensure we wake up any waiting operations there. For example
4440     + * if do_tcp_sendpages where to call sk_wait_event.
4441     + */
4442     + if (ctx->in_tcp_sendpages) {
4443     + ctx->sk_write_space(sk);
4444     return;
4445     + }
4446    
4447     if (!sk->sk_write_pending && tls_is_pending_closed_record(ctx)) {
4448     gfp_t sk_allocation = sk->sk_allocation;
4449     diff --git a/sound/aoa/core/gpio-feature.c b/sound/aoa/core/gpio-feature.c
4450     index 71960089e207..65557421fe0b 100644
4451     --- a/sound/aoa/core/gpio-feature.c
4452     +++ b/sound/aoa/core/gpio-feature.c
4453     @@ -88,8 +88,10 @@ static struct device_node *get_gpio(char *name,
4454     }
4455    
4456     reg = of_get_property(np, "reg", NULL);
4457     - if (!reg)
4458     + if (!reg) {
4459     + of_node_put(np);
4460     return NULL;
4461     + }
4462    
4463     *gpioptr = *reg;
4464    
4465     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
4466     index 22c13ad6a9ae..873d9824fbcf 100644
4467     --- a/sound/pci/hda/hda_intel.c
4468     +++ b/sound/pci/hda/hda_intel.c
4469     @@ -2510,7 +2510,8 @@ static const struct pci_device_id azx_ids[] = {
4470     .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
4471     /* AMD Raven */
4472     { PCI_DEVICE(0x1022, 0x15e3),
4473     - .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
4474     + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB |
4475     + AZX_DCAPS_PM_RUNTIME },
4476     /* ATI HDMI */
4477     { PCI_DEVICE(0x1002, 0x0002),
4478     .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
4479     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
4480     index 1c9f6a0d234f..53c9d7525639 100644
4481     --- a/sound/soc/soc-dapm.c
4482     +++ b/sound/soc/soc-dapm.c
4483     @@ -4005,6 +4005,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
4484     continue;
4485     }
4486    
4487     + /* let users know there is no DAI to link */
4488     + if (!dai_w->priv) {
4489     + dev_dbg(card->dev, "dai widget %s has no DAI\n",
4490     + dai_w->name);
4491     + continue;
4492     + }
4493     +
4494     dai = dai_w->priv;
4495    
4496     /* ...find all widgets with the same stream and link them */