Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.14/0107-4.14.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3068 - (hide annotations) (download)
Wed Jan 17 13:26:46 2018 UTC (6 years, 3 months ago) by niro
File size: 157738 byte(s)
-linux-4.14.8
1 niro 3068 diff --git a/Makefile b/Makefile
2     index 39d7af0165a8..97b5ae76ac8c 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 14
9     -SUBLEVEL = 7
10     +SUBLEVEL = 8
11     EXTRAVERSION =
12     NAME = Petit Gorille
13    
14     diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
15     index 3eb4397150df..7318165cfc90 100644
16     --- a/arch/arm64/Makefile
17     +++ b/arch/arm64/Makefile
18     @@ -14,8 +14,12 @@ LDFLAGS_vmlinux :=-p --no-undefined -X
19     CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
20     GZFLAGS :=-9
21    
22     -ifneq ($(CONFIG_RELOCATABLE),)
23     -LDFLAGS_vmlinux += -pie -shared -Bsymbolic
24     +ifeq ($(CONFIG_RELOCATABLE), y)
25     +# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
26     +# for relative relocs, since this leads to better Image compression
27     +# with the relocation offsets always being zero.
28     +LDFLAGS_vmlinux += -pie -shared -Bsymbolic \
29     + $(call ld-option, --no-apply-dynamic-relocs)
30     endif
31    
32     ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
33     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
34     index 1ffa1c238a72..08b7bb7f5b74 100644
35     --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
36     +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
37     @@ -301,6 +301,7 @@
38    
39     &usb1_phy {
40     status = "okay";
41     + phy-supply = <&usb_otg_pwr>;
42     };
43    
44     &usb0 {
45     diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
46     index c9530b5b5ca8..960d05c8816a 100644
47     --- a/arch/arm64/include/asm/pgtable.h
48     +++ b/arch/arm64/include/asm/pgtable.h
49     @@ -149,12 +149,20 @@ static inline pte_t pte_mkwrite(pte_t pte)
50    
51     static inline pte_t pte_mkclean(pte_t pte)
52     {
53     - return clear_pte_bit(pte, __pgprot(PTE_DIRTY));
54     + pte = clear_pte_bit(pte, __pgprot(PTE_DIRTY));
55     + pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
56     +
57     + return pte;
58     }
59    
60     static inline pte_t pte_mkdirty(pte_t pte)
61     {
62     - return set_pte_bit(pte, __pgprot(PTE_DIRTY));
63     + pte = set_pte_bit(pte, __pgprot(PTE_DIRTY));
64     +
65     + if (pte_write(pte))
66     + pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY));
67     +
68     + return pte;
69     }
70    
71     static inline pte_t pte_mkold(pte_t pte)
72     @@ -642,28 +650,23 @@ static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
73     #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
74    
75     /*
76     - * ptep_set_wrprotect - mark read-only while preserving the hardware update of
77     - * the Access Flag.
78     + * ptep_set_wrprotect - mark read-only while trasferring potential hardware
79     + * dirty status (PTE_DBM && !PTE_RDONLY) to the software PTE_DIRTY bit.
80     */
81     #define __HAVE_ARCH_PTEP_SET_WRPROTECT
82     static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long address, pte_t *ptep)
83     {
84     pte_t old_pte, pte;
85    
86     - /*
87     - * ptep_set_wrprotect() is only called on CoW mappings which are
88     - * private (!VM_SHARED) with the pte either read-only (!PTE_WRITE &&
89     - * PTE_RDONLY) or writable and software-dirty (PTE_WRITE &&
90     - * !PTE_RDONLY && PTE_DIRTY); see is_cow_mapping() and
91     - * protection_map[]. There is no race with the hardware update of the
92     - * dirty state: clearing of PTE_RDONLY when PTE_WRITE (a.k.a. PTE_DBM)
93     - * is set.
94     - */
95     - VM_WARN_ONCE(pte_write(*ptep) && !pte_dirty(*ptep),
96     - "%s: potential race with hardware DBM", __func__);
97     pte = READ_ONCE(*ptep);
98     do {
99     old_pte = pte;
100     + /*
101     + * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY
102     + * clear), set the PTE_DIRTY bit.
103     + */
104     + if (pte_hw_dirty(pte))
105     + pte = pte_mkdirty(pte);
106     pte = pte_wrprotect(pte);
107     pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep),
108     pte_val(old_pte), pte_val(pte));
109     diff --git a/arch/arm64/mm/dump.c b/arch/arm64/mm/dump.c
110     index ca74a2aace42..7b60d62ac593 100644
111     --- a/arch/arm64/mm/dump.c
112     +++ b/arch/arm64/mm/dump.c
113     @@ -389,7 +389,7 @@ void ptdump_check_wx(void)
114     .check_wx = true,
115     };
116    
117     - walk_pgd(&st, &init_mm, 0);
118     + walk_pgd(&st, &init_mm, VA_START);
119     note_page(&st, 0, 0, 0);
120     if (st.wx_pages || st.uxn_pages)
121     pr_warn("Checked W+X mappings: FAILED, %lu W+X pages found, %lu non-UXN pages found\n",
122     diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
123     index 5960bef0170d..00e7b900ca41 100644
124     --- a/arch/arm64/mm/init.c
125     +++ b/arch/arm64/mm/init.c
126     @@ -476,6 +476,8 @@ void __init arm64_memblock_init(void)
127    
128     reserve_elfcorehdr();
129    
130     + high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
131     +
132     dma_contiguous_reserve(arm64_dma_phys_limit);
133    
134     memblock_allow_resize();
135     @@ -502,7 +504,6 @@ void __init bootmem_init(void)
136     sparse_init();
137     zone_sizes_init(min, max);
138    
139     - high_memory = __va((max << PAGE_SHIFT) - 1) + 1;
140     memblock_dump_all();
141     }
142    
143     diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
144     index af5369422032..d9c2866ba618 100644
145     --- a/arch/blackfin/Kconfig
146     +++ b/arch/blackfin/Kconfig
147     @@ -321,11 +321,14 @@ config BF53x
148    
149     config GPIO_ADI
150     def_bool y
151     + depends on !PINCTRL
152     depends on (BF51x || BF52x || BF53x || BF538 || BF539 || BF561)
153    
154     -config PINCTRL
155     +config PINCTRL_BLACKFIN_ADI2
156     def_bool y
157     - depends on BF54x || BF60x
158     + depends on (BF54x || BF60x)
159     + select PINCTRL
160     + select PINCTRL_ADI2
161    
162     config MEM_MT48LC64M4A2FB_7E
163     bool
164     diff --git a/arch/blackfin/Kconfig.debug b/arch/blackfin/Kconfig.debug
165     index 4ddd1b73ee3e..c8d957274cc2 100644
166     --- a/arch/blackfin/Kconfig.debug
167     +++ b/arch/blackfin/Kconfig.debug
168     @@ -18,6 +18,7 @@ config DEBUG_VERBOSE
169    
170     config DEBUG_MMRS
171     tristate "Generate Blackfin MMR tree"
172     + depends on !PINCTRL
173     select DEBUG_FS
174     help
175     Create a tree of Blackfin MMRs via the debugfs tree. If
176     diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
177     index 9c88b82f6229..72238eedc360 100644
178     --- a/arch/powerpc/perf/hv-24x7.c
179     +++ b/arch/powerpc/perf/hv-24x7.c
180     @@ -540,7 +540,7 @@ static int memord(const void *d1, size_t s1, const void *d2, size_t s2)
181     {
182     if (s1 < s2)
183     return 1;
184     - if (s2 > s1)
185     + if (s1 > s2)
186     return -1;
187    
188     return memcmp(d1, d2, s1);
189     diff --git a/arch/powerpc/platforms/powernv/opal-async.c b/arch/powerpc/platforms/powernv/opal-async.c
190     index cf33769a7b72..45b3feb8aa2f 100644
191     --- a/arch/powerpc/platforms/powernv/opal-async.c
192     +++ b/arch/powerpc/platforms/powernv/opal-async.c
193     @@ -39,18 +39,18 @@ int __opal_async_get_token(void)
194     int token;
195    
196     spin_lock_irqsave(&opal_async_comp_lock, flags);
197     - token = find_first_bit(opal_async_complete_map, opal_max_async_tokens);
198     + token = find_first_zero_bit(opal_async_token_map, opal_max_async_tokens);
199     if (token >= opal_max_async_tokens) {
200     token = -EBUSY;
201     goto out;
202     }
203    
204     - if (__test_and_set_bit(token, opal_async_token_map)) {
205     + if (!__test_and_clear_bit(token, opal_async_complete_map)) {
206     token = -EBUSY;
207     goto out;
208     }
209    
210     - __clear_bit(token, opal_async_complete_map);
211     + __set_bit(token, opal_async_token_map);
212    
213     out:
214     spin_unlock_irqrestore(&opal_async_comp_lock, flags);
215     diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
216     index bbb73aa0eb8f..bfe2aa702973 100644
217     --- a/arch/powerpc/platforms/powernv/setup.c
218     +++ b/arch/powerpc/platforms/powernv/setup.c
219     @@ -319,7 +319,7 @@ static unsigned long pnv_get_proc_freq(unsigned int cpu)
220     {
221     unsigned long ret_freq;
222    
223     - ret_freq = cpufreq_quick_get(cpu) * 1000ul;
224     + ret_freq = cpufreq_get(cpu) * 1000ul;
225    
226     /*
227     * If the backend cpufreq driver does not exist,
228     diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
229     index 12277bc9fd9e..d86938260a86 100644
230     --- a/arch/powerpc/platforms/pseries/vio.c
231     +++ b/arch/powerpc/platforms/pseries/vio.c
232     @@ -1592,6 +1592,8 @@ ATTRIBUTE_GROUPS(vio_dev);
233     void vio_unregister_device(struct vio_dev *viodev)
234     {
235     device_unregister(&viodev->dev);
236     + if (viodev->family == VDEVICE)
237     + irq_dispose_mapping(viodev->irq);
238     }
239     EXPORT_SYMBOL(vio_unregister_device);
240    
241     diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
242     index 16f1edd78c40..535cf1f6941c 100644
243     --- a/arch/powerpc/sysdev/ipic.c
244     +++ b/arch/powerpc/sysdev/ipic.c
245     @@ -846,12 +846,12 @@ void ipic_disable_mcp(enum ipic_mcp_irq mcp_irq)
246    
247     u32 ipic_get_mcp_status(void)
248     {
249     - return ipic_read(primary_ipic->regs, IPIC_SERMR);
250     + return ipic_read(primary_ipic->regs, IPIC_SERSR);
251     }
252    
253     void ipic_clear_mcp_status(u32 mask)
254     {
255     - ipic_write(primary_ipic->regs, IPIC_SERMR, mask);
256     + ipic_write(primary_ipic->regs, IPIC_SERSR, mask);
257     }
258    
259     /* Return an interrupt vector or 0 if no interrupt is pending. */
260     diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
261     index 33351c6704b1..c008083fbc4f 100644
262     --- a/arch/powerpc/xmon/xmon.c
263     +++ b/arch/powerpc/xmon/xmon.c
264     @@ -2475,6 +2475,11 @@ static void dump_xives(void)
265     unsigned long num;
266     int c;
267    
268     + if (!xive_enabled()) {
269     + printf("Xive disabled on this system\n");
270     + return;
271     + }
272     +
273     c = inchar();
274     if (c == 'a') {
275     dump_all_xives();
276     diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
277     index f04db3779b34..59eea9c65d3e 100644
278     --- a/arch/s390/kernel/compat_linux.c
279     +++ b/arch/s390/kernel/compat_linux.c
280     @@ -263,6 +263,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setgroups16, int, gidsetsize, u16 __user *, grouplis
281     return retval;
282     }
283    
284     + groups_sort(group_info);
285     retval = set_current_groups(group_info);
286     put_group_info(group_info);
287    
288     diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
289     index 4b7575b00563..98018a621f6b 100644
290     --- a/arch/x86/boot/compressed/Makefile
291     +++ b/arch/x86/boot/compressed/Makefile
292     @@ -78,6 +78,7 @@ vmlinux-objs-$(CONFIG_EARLY_PRINTK) += $(obj)/early_serial_console.o
293     vmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/kaslr.o
294     ifdef CONFIG_X86_64
295     vmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/pagetable.o
296     + vmlinux-objs-y += $(obj)/pgtable_64.o
297     endif
298    
299     $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone
300     diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
301     index beb255b66447..4b3d92a37c80 100644
302     --- a/arch/x86/boot/compressed/head_64.S
303     +++ b/arch/x86/boot/compressed/head_64.S
304     @@ -289,10 +289,18 @@ ENTRY(startup_64)
305     leaq boot_stack_end(%rbx), %rsp
306    
307     #ifdef CONFIG_X86_5LEVEL
308     - /* Check if 5-level paging has already enabled */
309     - movq %cr4, %rax
310     - testl $X86_CR4_LA57, %eax
311     - jnz lvl5
312     + /*
313     + * Check if we need to enable 5-level paging.
314     + * RSI holds real mode data and need to be preserved across
315     + * a function call.
316     + */
317     + pushq %rsi
318     + call l5_paging_required
319     + popq %rsi
320     +
321     + /* If l5_paging_required() returned zero, we're done here. */
322     + cmpq $0, %rax
323     + je lvl5
324    
325     /*
326     * At this point we are in long mode with 4-level paging enabled,
327     diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
328     index b50c42455e25..98761a1576ce 100644
329     --- a/arch/x86/boot/compressed/misc.c
330     +++ b/arch/x86/boot/compressed/misc.c
331     @@ -169,6 +169,16 @@ void __puthex(unsigned long value)
332     }
333     }
334    
335     +static bool l5_supported(void)
336     +{
337     + /* Check if leaf 7 is supported. */
338     + if (native_cpuid_eax(0) < 7)
339     + return 0;
340     +
341     + /* Check if la57 is supported. */
342     + return native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31));
343     +}
344     +
345     #if CONFIG_X86_NEED_RELOCS
346     static void handle_relocations(void *output, unsigned long output_len,
347     unsigned long virt_addr)
348     @@ -362,6 +372,12 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
349     console_init();
350     debug_putstr("early console in extract_kernel\n");
351    
352     + if (IS_ENABLED(CONFIG_X86_5LEVEL) && !l5_supported()) {
353     + error("This linux kernel as configured requires 5-level paging\n"
354     + "This CPU does not support the required 'cr4.la57' feature\n"
355     + "Unable to boot - please use a kernel appropriate for your CPU\n");
356     + }
357     +
358     free_mem_ptr = heap; /* Heap */
359     free_mem_end_ptr = heap + BOOT_HEAP_SIZE;
360    
361     diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c
362     new file mode 100644
363     index 000000000000..b4469a37e9a1
364     --- /dev/null
365     +++ b/arch/x86/boot/compressed/pgtable_64.c
366     @@ -0,0 +1,28 @@
367     +#include <asm/processor.h>
368     +
369     +/*
370     + * __force_order is used by special_insns.h asm code to force instruction
371     + * serialization.
372     + *
373     + * It is not referenced from the code, but GCC < 5 with -fPIE would fail
374     + * due to an undefined symbol. Define it to make these ancient GCCs work.
375     + */
376     +unsigned long __force_order;
377     +
378     +int l5_paging_required(void)
379     +{
380     + /* Check if leaf 7 is supported. */
381     +
382     + if (native_cpuid_eax(0) < 7)
383     + return 0;
384     +
385     + /* Check if la57 is supported. */
386     + if (!(native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31))))
387     + return 0;
388     +
389     + /* Check if 5-level paging has already been enabled. */
390     + if (native_read_cr4() & X86_CR4_LA57)
391     + return 0;
392     +
393     + return 1;
394     +}
395     diff --git a/arch/x86/crypto/salsa20_glue.c b/arch/x86/crypto/salsa20_glue.c
396     index 399a29d067d6..cb91a64a99e7 100644
397     --- a/arch/x86/crypto/salsa20_glue.c
398     +++ b/arch/x86/crypto/salsa20_glue.c
399     @@ -59,13 +59,6 @@ static int encrypt(struct blkcipher_desc *desc,
400    
401     salsa20_ivsetup(ctx, walk.iv);
402    
403     - if (likely(walk.nbytes == nbytes))
404     - {
405     - salsa20_encrypt_bytes(ctx, walk.src.virt.addr,
406     - walk.dst.virt.addr, nbytes);
407     - return blkcipher_walk_done(desc, &walk, 0);
408     - }
409     -
410     while (walk.nbytes >= 64) {
411     salsa20_encrypt_bytes(ctx, walk.src.virt.addr,
412     walk.dst.virt.addr,
413     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
414     index f366e6d3a5e1..bc5921c1e2f2 100644
415     --- a/arch/x86/kvm/vmx.c
416     +++ b/arch/x86/kvm/vmx.c
417     @@ -2845,8 +2845,9 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx)
418     * Advertise EPTP switching unconditionally
419     * since we emulate it
420     */
421     - vmx->nested.nested_vmx_vmfunc_controls =
422     - VMX_VMFUNC_EPTP_SWITCHING;
423     + if (enable_ept)
424     + vmx->nested.nested_vmx_vmfunc_controls =
425     + VMX_VMFUNC_EPTP_SWITCHING;
426     }
427    
428     /*
429     diff --git a/block/badblocks.c b/block/badblocks.c
430     index 43c71166e1e2..91f7bcf979d3 100644
431     --- a/block/badblocks.c
432     +++ b/block/badblocks.c
433     @@ -178,7 +178,7 @@ int badblocks_set(struct badblocks *bb, sector_t s, int sectors,
434    
435     if (bb->shift < 0)
436     /* badblocks are disabled */
437     - return 0;
438     + return 1;
439    
440     if (bb->shift) {
441     /* round the start down, and the end up */
442     diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
443     index 4ab69435708c..eca011fdfa0e 100644
444     --- a/block/blk-mq-sched.c
445     +++ b/block/blk-mq-sched.c
446     @@ -94,7 +94,7 @@ void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
447     struct request_queue *q = hctx->queue;
448     struct elevator_queue *e = q->elevator;
449     const bool has_sched_dispatch = e && e->type->ops.mq.dispatch_request;
450     - bool did_work = false;
451     + bool do_sched_dispatch = true;
452     LIST_HEAD(rq_list);
453    
454     /* RCU or SRCU read lock is needed before checking quiesced flag */
455     @@ -125,18 +125,18 @@ void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
456     */
457     if (!list_empty(&rq_list)) {
458     blk_mq_sched_mark_restart_hctx(hctx);
459     - did_work = blk_mq_dispatch_rq_list(q, &rq_list);
460     + do_sched_dispatch = blk_mq_dispatch_rq_list(q, &rq_list);
461     } else if (!has_sched_dispatch) {
462     blk_mq_flush_busy_ctxs(hctx, &rq_list);
463     blk_mq_dispatch_rq_list(q, &rq_list);
464     }
465    
466     /*
467     - * We want to dispatch from the scheduler if we had no work left
468     - * on the dispatch list, OR if we did have work but weren't able
469     - * to make progress.
470     + * We want to dispatch from the scheduler if there was nothing
471     + * on the dispatch list or we were able to dispatch from the
472     + * dispatch list.
473     */
474     - if (!did_work && has_sched_dispatch) {
475     + if (do_sched_dispatch && has_sched_dispatch) {
476     do {
477     struct request *rq;
478    
479     diff --git a/crypto/af_alg.c b/crypto/af_alg.c
480     index a72659f452a5..e181073ef64d 100644
481     --- a/crypto/af_alg.c
482     +++ b/crypto/af_alg.c
483     @@ -699,14 +699,15 @@ void af_alg_free_areq_sgls(struct af_alg_async_req *areq)
484     }
485    
486     tsgl = areq->tsgl;
487     - for_each_sg(tsgl, sg, areq->tsgl_entries, i) {
488     - if (!sg_page(sg))
489     - continue;
490     - put_page(sg_page(sg));
491     - }
492     + if (tsgl) {
493     + for_each_sg(tsgl, sg, areq->tsgl_entries, i) {
494     + if (!sg_page(sg))
495     + continue;
496     + put_page(sg_page(sg));
497     + }
498    
499     - if (areq->tsgl && areq->tsgl_entries)
500     sock_kfree_s(sk, tsgl, areq->tsgl_entries * sizeof(*tsgl));
501     + }
502     }
503     EXPORT_SYMBOL_GPL(af_alg_free_areq_sgls);
504    
505     diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c
506     index d0b45145cb30..3d793bc2aa82 100644
507     --- a/crypto/algif_aead.c
508     +++ b/crypto/algif_aead.c
509     @@ -503,6 +503,7 @@ static void aead_release(void *private)
510     struct aead_tfm *tfm = private;
511    
512     crypto_free_aead(tfm->aead);
513     + crypto_put_default_null_skcipher2();
514     kfree(tfm);
515     }
516    
517     @@ -535,7 +536,6 @@ static void aead_sock_destruct(struct sock *sk)
518     unsigned int ivlen = crypto_aead_ivsize(tfm);
519    
520     af_alg_pull_tsgl(sk, ctx->used, NULL, 0);
521     - crypto_put_default_null_skcipher2();
522     sock_kzfree_s(sk, ctx->iv, ivlen);
523     sock_kfree_s(sk, ctx, ctx->len);
524     af_alg_release_parent(sk);
525     diff --git a/crypto/hmac.c b/crypto/hmac.c
526     index 92871dc2a63e..e74730224f0a 100644
527     --- a/crypto/hmac.c
528     +++ b/crypto/hmac.c
529     @@ -195,11 +195,15 @@ static int hmac_create(struct crypto_template *tmpl, struct rtattr **tb)
530     salg = shash_attr_alg(tb[1], 0, 0);
531     if (IS_ERR(salg))
532     return PTR_ERR(salg);
533     + alg = &salg->base;
534    
535     + /* The underlying hash algorithm must be unkeyed */
536     err = -EINVAL;
537     + if (crypto_shash_alg_has_setkey(salg))
538     + goto out_put_alg;
539     +
540     ds = salg->digestsize;
541     ss = salg->statesize;
542     - alg = &salg->base;
543     if (ds > alg->cra_blocksize ||
544     ss < alg->cra_blocksize)
545     goto out_put_alg;
546     diff --git a/crypto/rsa_helper.c b/crypto/rsa_helper.c
547     index 0b66dc824606..cad395d70d78 100644
548     --- a/crypto/rsa_helper.c
549     +++ b/crypto/rsa_helper.c
550     @@ -30,7 +30,7 @@ int rsa_get_n(void *context, size_t hdrlen, unsigned char tag,
551     return -EINVAL;
552    
553     if (fips_enabled) {
554     - while (!*ptr && n_sz) {
555     + while (n_sz && !*ptr) {
556     ptr++;
557     n_sz--;
558     }
559     diff --git a/crypto/salsa20_generic.c b/crypto/salsa20_generic.c
560     index f550b5d94630..d7da0eea5622 100644
561     --- a/crypto/salsa20_generic.c
562     +++ b/crypto/salsa20_generic.c
563     @@ -188,13 +188,6 @@ static int encrypt(struct blkcipher_desc *desc,
564    
565     salsa20_ivsetup(ctx, walk.iv);
566    
567     - if (likely(walk.nbytes == nbytes))
568     - {
569     - salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
570     - walk.src.virt.addr, nbytes);
571     - return blkcipher_walk_done(desc, &walk, 0);
572     - }
573     -
574     while (walk.nbytes >= 64) {
575     salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
576     walk.src.virt.addr,
577     diff --git a/crypto/shash.c b/crypto/shash.c
578     index 325a14da5827..e849d3ee2e27 100644
579     --- a/crypto/shash.c
580     +++ b/crypto/shash.c
581     @@ -25,11 +25,12 @@
582    
583     static const struct crypto_type crypto_shash_type;
584    
585     -static int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
586     - unsigned int keylen)
587     +int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
588     + unsigned int keylen)
589     {
590     return -ENOSYS;
591     }
592     +EXPORT_SYMBOL_GPL(shash_no_setkey);
593    
594     static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
595     unsigned int keylen)
596     diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
597     index 0022a18d36ee..f5f58a6eee5d 100644
598     --- a/crypto/tcrypt.c
599     +++ b/crypto/tcrypt.c
600     @@ -340,7 +340,7 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs,
601     }
602    
603     sg_init_aead(sg, xbuf,
604     - *b_size + (enc ? authsize : 0));
605     + *b_size + (enc ? 0 : authsize));
606    
607     sg_init_aead(sgout, xoutbuf,
608     *b_size + (enc ? authsize : 0));
609     @@ -348,7 +348,9 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs,
610     sg_set_buf(&sg[0], assoc, aad_size);
611     sg_set_buf(&sgout[0], assoc, aad_size);
612    
613     - aead_request_set_crypt(req, sg, sgout, *b_size, iv);
614     + aead_request_set_crypt(req, sg, sgout,
615     + *b_size + (enc ? 0 : authsize),
616     + iv);
617     aead_request_set_ad(req, aad_size);
618    
619     if (secs)
620     diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
621     index 8042c26ea9e6..4d55af5c6e5b 100644
622     --- a/drivers/block/null_blk.c
623     +++ b/drivers/block/null_blk.c
624     @@ -1985,8 +1985,10 @@ static int __init null_init(void)
625    
626     for (i = 0; i < nr_devices; i++) {
627     dev = null_alloc_dev();
628     - if (!dev)
629     + if (!dev) {
630     + ret = -ENOMEM;
631     goto err_dev;
632     + }
633     ret = null_add_dev(dev);
634     if (ret) {
635     null_free_dev(dev);
636     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
637     index 7a5c06aaa181..513a7a59d421 100644
638     --- a/drivers/bluetooth/btusb.c
639     +++ b/drivers/bluetooth/btusb.c
640     @@ -272,6 +272,7 @@ static const struct usb_device_id blacklist_table[] = {
641     { USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME },
642     { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME },
643     { USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME },
644     + { USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME },
645     { USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME },
646     { USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME },
647     { USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME },
648     diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
649     index a746627e784e..6e2403805784 100644
650     --- a/drivers/bluetooth/hci_ldisc.c
651     +++ b/drivers/bluetooth/hci_ldisc.c
652     @@ -510,13 +510,13 @@ static void hci_uart_tty_close(struct tty_struct *tty)
653     if (hdev)
654     hci_uart_close(hdev);
655    
656     - cancel_work_sync(&hu->write_work);
657     -
658     if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
659     write_lock_irqsave(&hu->proto_lock, flags);
660     clear_bit(HCI_UART_PROTO_READY, &hu->flags);
661     write_unlock_irqrestore(&hu->proto_lock, flags);
662    
663     + cancel_work_sync(&hu->write_work);
664     +
665     if (hdev) {
666     if (test_bit(HCI_UART_REGISTERED, &hu->flags))
667     hci_unregister_dev(hdev);
668     diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c
669     index 03d7faf51c2b..72fd1750134d 100644
670     --- a/drivers/bus/arm-ccn.c
671     +++ b/drivers/bus/arm-ccn.c
672     @@ -1280,6 +1280,7 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn)
673    
674     /* Perf driver registration */
675     ccn->dt.pmu = (struct pmu) {
676     + .module = THIS_MODULE,
677     .attr_groups = arm_ccn_pmu_attr_groups,
678     .task_ctx_nr = perf_invalid_context,
679     .event_init = arm_ccn_pmu_event_init,
680     diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
681     index c04aa11f0e21..e1cbb78c6806 100644
682     --- a/drivers/char/ipmi/ipmi_si_intf.c
683     +++ b/drivers/char/ipmi/ipmi_si_intf.c
684     @@ -3469,6 +3469,7 @@ static int add_smi(struct smi_info *new_smi)
685     ipmi_addr_src_to_str(new_smi->addr_source),
686     si_to_str[new_smi->si_type]);
687     rv = -EBUSY;
688     + kfree(new_smi);
689     goto out_err;
690     }
691     }
692     diff --git a/drivers/clk/hisilicon/clk-hi6220.c b/drivers/clk/hisilicon/clk-hi6220.c
693     index e786d717f75d..a87809d4bd52 100644
694     --- a/drivers/clk/hisilicon/clk-hi6220.c
695     +++ b/drivers/clk/hisilicon/clk-hi6220.c
696     @@ -145,7 +145,7 @@ static struct hisi_gate_clock hi6220_separated_gate_clks_sys[] __initdata = {
697     { HI6220_BBPPLL_SEL, "bbppll_sel", "pll0_bbp_gate", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x270, 9, 0, },
698     { HI6220_MEDIA_PLL_SRC, "media_pll_src", "pll_media_gate", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x270, 10, 0, },
699     { HI6220_MMC2_SEL, "mmc2_sel", "mmc2_mux1", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x270, 11, 0, },
700     - { HI6220_CS_ATB_SYSPLL, "cs_atb_syspll", "syspll", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x270, 12, 0, },
701     + { HI6220_CS_ATB_SYSPLL, "cs_atb_syspll", "syspll", CLK_SET_RATE_PARENT|CLK_IS_CRITICAL, 0x270, 12, 0, },
702     };
703    
704     static struct hisi_mux_clock hi6220_mux_clks_sys[] __initdata = {
705     diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c
706     index c07df719b8a3..8d518ad5dc13 100644
707     --- a/drivers/clk/imx/clk-imx6q.c
708     +++ b/drivers/clk/imx/clk-imx6q.c
709     @@ -761,7 +761,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
710     clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24);
711     clk[IMX6QDL_CLK_GPU3D_CORE] = imx_clk_gate2("gpu3d_core", "gpu3d_core_podf", base + 0x6c, 26);
712     clk[IMX6QDL_CLK_HDMI_IAHB] = imx_clk_gate2("hdmi_iahb", "ahb", base + 0x70, 0);
713     - clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "video_27m", base + 0x70, 4);
714     + clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "mipi_core_cfg", base + 0x70, 4);
715     clk[IMX6QDL_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_per", base + 0x70, 6);
716     clk[IMX6QDL_CLK_I2C2] = imx_clk_gate2("i2c2", "ipg_per", base + 0x70, 8);
717     clk[IMX6QDL_CLK_I2C3] = imx_clk_gate2("i2c3", "ipg_per", base + 0x70, 10);
718     diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c
719     index 2305699db467..0ac9b30c8b90 100644
720     --- a/drivers/clk/imx/clk-imx7d.c
721     +++ b/drivers/clk/imx/clk-imx7d.c
722     @@ -797,7 +797,7 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
723     clks[IMX7D_MAIN_AXI_ROOT_CLK] = imx_clk_gate4("main_axi_root_clk", "axi_post_div", base + 0x4040, 0);
724     clks[IMX7D_DISP_AXI_ROOT_CLK] = imx_clk_gate4("disp_axi_root_clk", "disp_axi_post_div", base + 0x4050, 0);
725     clks[IMX7D_ENET_AXI_ROOT_CLK] = imx_clk_gate4("enet_axi_root_clk", "enet_axi_post_div", base + 0x4060, 0);
726     - clks[IMX7D_OCRAM_CLK] = imx_clk_gate4("ocram_clk", "axi_post_div", base + 0x4110, 0);
727     + clks[IMX7D_OCRAM_CLK] = imx_clk_gate4("ocram_clk", "main_axi_root_clk", base + 0x4110, 0);
728     clks[IMX7D_OCRAM_S_CLK] = imx_clk_gate4("ocram_s_clk", "ahb_root_clk", base + 0x4120, 0);
729     clks[IMX7D_DRAM_ROOT_CLK] = imx_clk_gate4("dram_root_clk", "dram_post_div", base + 0x4130, 0);
730     clks[IMX7D_DRAM_PHYM_ROOT_CLK] = imx_clk_gate4("dram_phym_root_clk", "dram_phym_cg", base + 0x4130, 0);
731     diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
732     index f5d6b70ce189..210ce8e8025e 100644
733     --- a/drivers/clk/mediatek/clk-mtk.h
734     +++ b/drivers/clk/mediatek/clk-mtk.h
735     @@ -216,6 +216,7 @@ struct mtk_pll_data {
736     uint32_t pcw_reg;
737     int pcw_shift;
738     const struct mtk_pll_div_table *div_table;
739     + const char *parent_name;
740     };
741    
742     void mtk_clk_register_plls(struct device_node *node,
743     diff --git a/drivers/clk/mediatek/clk-pll.c b/drivers/clk/mediatek/clk-pll.c
744     index a409142e9346..7598477ff60f 100644
745     --- a/drivers/clk/mediatek/clk-pll.c
746     +++ b/drivers/clk/mediatek/clk-pll.c
747     @@ -303,7 +303,10 @@ static struct clk *mtk_clk_register_pll(const struct mtk_pll_data *data,
748     init.name = data->name;
749     init.flags = (data->flags & PLL_AO) ? CLK_IS_CRITICAL : 0;
750     init.ops = &mtk_pll_ops;
751     - init.parent_names = &parent_name;
752     + if (data->parent_name)
753     + init.parent_names = &data->parent_name;
754     + else
755     + init.parent_names = &parent_name;
756     init.num_parents = 1;
757    
758     clk = clk_register(NULL, &pll->hw);
759     diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
760     index 6d7a613f2656..b92867814e2d 100644
761     --- a/drivers/clk/tegra/clk-tegra210.c
762     +++ b/drivers/clk/tegra/clk-tegra210.c
763     @@ -2566,8 +2566,8 @@ static int tegra210_enable_pllu(void)
764     reg |= PLL_ENABLE;
765     writel(reg, clk_base + PLLU_BASE);
766    
767     - readl_relaxed_poll_timeout(clk_base + PLLU_BASE, reg,
768     - reg & PLL_BASE_LOCK, 2, 1000);
769     + readl_relaxed_poll_timeout_atomic(clk_base + PLLU_BASE, reg,
770     + reg & PLL_BASE_LOCK, 2, 1000);
771     if (!(reg & PLL_BASE_LOCK)) {
772     pr_err("Timed out waiting for PLL_U to lock\n");
773     return -ETIMEDOUT;
774     diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c
775     index a2d163f759b4..07f5203df01c 100644
776     --- a/drivers/clk/tegra/clk-tegra30.c
777     +++ b/drivers/clk/tegra/clk-tegra30.c
778     @@ -964,7 +964,7 @@ static void __init tegra30_super_clk_init(void)
779     * U71 divider of cclk_lp.
780     */
781     clk = tegra_clk_register_divider("pll_p_out3_cclklp", "pll_p_out3",
782     - clk_base + SUPER_CCLKG_DIVIDER, 0,
783     + clk_base + SUPER_CCLKLP_DIVIDER, 0,
784     TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
785     clk_register_clkdev(clk, "pll_p_out3_cclklp", NULL);
786    
787     diff --git a/drivers/dax/device.c b/drivers/dax/device.c
788     index 375b99bca002..7b0bf825c4e7 100644
789     --- a/drivers/dax/device.c
790     +++ b/drivers/dax/device.c
791     @@ -222,7 +222,8 @@ __weak phys_addr_t dax_pgoff_to_phys(struct dev_dax *dev_dax, pgoff_t pgoff,
792     unsigned long size)
793     {
794     struct resource *res;
795     - phys_addr_t phys;
796     + /* gcc-4.6.3-nolibc for i386 complains that this is uninitialized */
797     + phys_addr_t uninitialized_var(phys);
798     int i;
799    
800     for (i = 0; i < dev_dax->num_resources; i++) {
801     diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
802     index 47edc7fbf91f..ec5f9d2bc820 100644
803     --- a/drivers/dma/dmatest.c
804     +++ b/drivers/dma/dmatest.c
805     @@ -155,6 +155,12 @@ MODULE_PARM_DESC(run, "Run the test (default: false)");
806     #define PATTERN_COUNT_MASK 0x1f
807     #define PATTERN_MEMSET_IDX 0x01
808    
809     +/* poor man's completion - we want to use wait_event_freezable() on it */
810     +struct dmatest_done {
811     + bool done;
812     + wait_queue_head_t *wait;
813     +};
814     +
815     struct dmatest_thread {
816     struct list_head node;
817     struct dmatest_info *info;
818     @@ -165,6 +171,8 @@ struct dmatest_thread {
819     u8 **dsts;
820     u8 **udsts;
821     enum dma_transaction_type type;
822     + wait_queue_head_t done_wait;
823     + struct dmatest_done test_done;
824     bool done;
825     };
826    
827     @@ -342,18 +350,25 @@ static unsigned int dmatest_verify(u8 **bufs, unsigned int start,
828     return error_count;
829     }
830    
831     -/* poor man's completion - we want to use wait_event_freezable() on it */
832     -struct dmatest_done {
833     - bool done;
834     - wait_queue_head_t *wait;
835     -};
836    
837     static void dmatest_callback(void *arg)
838     {
839     struct dmatest_done *done = arg;
840     -
841     - done->done = true;
842     - wake_up_all(done->wait);
843     + struct dmatest_thread *thread =
844     + container_of(arg, struct dmatest_thread, done_wait);
845     + if (!thread->done) {
846     + done->done = true;
847     + wake_up_all(done->wait);
848     + } else {
849     + /*
850     + * If thread->done, it means that this callback occurred
851     + * after the parent thread has cleaned up. This can
852     + * happen in the case that driver doesn't implement
853     + * the terminate_all() functionality and a dma operation
854     + * did not occur within the timeout period
855     + */
856     + WARN(1, "dmatest: Kernel memory may be corrupted!!\n");
857     + }
858     }
859    
860     static unsigned int min_odd(unsigned int x, unsigned int y)
861     @@ -424,9 +439,8 @@ static unsigned long long dmatest_KBs(s64 runtime, unsigned long long len)
862     */
863     static int dmatest_func(void *data)
864     {
865     - DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_wait);
866     struct dmatest_thread *thread = data;
867     - struct dmatest_done done = { .wait = &done_wait };
868     + struct dmatest_done *done = &thread->test_done;
869     struct dmatest_info *info;
870     struct dmatest_params *params;
871     struct dma_chan *chan;
872     @@ -673,9 +687,9 @@ static int dmatest_func(void *data)
873     continue;
874     }
875    
876     - done.done = false;
877     + done->done = false;
878     tx->callback = dmatest_callback;
879     - tx->callback_param = &done;
880     + tx->callback_param = done;
881     cookie = tx->tx_submit(tx);
882    
883     if (dma_submit_error(cookie)) {
884     @@ -688,21 +702,12 @@ static int dmatest_func(void *data)
885     }
886     dma_async_issue_pending(chan);
887    
888     - wait_event_freezable_timeout(done_wait, done.done,
889     + wait_event_freezable_timeout(thread->done_wait, done->done,
890     msecs_to_jiffies(params->timeout));
891    
892     status = dma_async_is_tx_complete(chan, cookie, NULL, NULL);
893    
894     - if (!done.done) {
895     - /*
896     - * We're leaving the timed out dma operation with
897     - * dangling pointer to done_wait. To make this
898     - * correct, we'll need to allocate wait_done for
899     - * each test iteration and perform "who's gonna
900     - * free it this time?" dancing. For now, just
901     - * leave it dangling.
902     - */
903     - WARN(1, "dmatest: Kernel stack may be corrupted!!\n");
904     + if (!done->done) {
905     dmaengine_unmap_put(um);
906     result("test timed out", total_tests, src_off, dst_off,
907     len, 0);
908     @@ -789,7 +794,7 @@ static int dmatest_func(void *data)
909     dmatest_KBs(runtime, total_len), ret);
910    
911     /* terminate all transfers on specified channels */
912     - if (ret)
913     + if (ret || failed_tests)
914     dmaengine_terminate_all(chan);
915    
916     thread->done = true;
917     @@ -849,6 +854,8 @@ static int dmatest_add_threads(struct dmatest_info *info,
918     thread->info = info;
919     thread->chan = dtc->chan;
920     thread->type = type;
921     + thread->test_done.wait = &thread->done_wait;
922     + init_waitqueue_head(&thread->done_wait);
923     smp_wmb();
924     thread->task = kthread_create(dmatest_func, thread, "%s-%s%u",
925     dma_chan_name(chan), op, i);
926     diff --git a/drivers/dma/ti-dma-crossbar.c b/drivers/dma/ti-dma-crossbar.c
927     index f1d04b70ee67..7df910e7c348 100644
928     --- a/drivers/dma/ti-dma-crossbar.c
929     +++ b/drivers/dma/ti-dma-crossbar.c
930     @@ -49,12 +49,12 @@ struct ti_am335x_xbar_data {
931    
932     struct ti_am335x_xbar_map {
933     u16 dma_line;
934     - u16 mux_val;
935     + u8 mux_val;
936     };
937    
938     -static inline void ti_am335x_xbar_write(void __iomem *iomem, int event, u16 val)
939     +static inline void ti_am335x_xbar_write(void __iomem *iomem, int event, u8 val)
940     {
941     - writeb_relaxed(val & 0x1f, iomem + event);
942     + writeb_relaxed(val, iomem + event);
943     }
944    
945     static void ti_am335x_xbar_free(struct device *dev, void *route_data)
946     @@ -105,7 +105,7 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec,
947     }
948    
949     map->dma_line = (u16)dma_spec->args[0];
950     - map->mux_val = (u16)dma_spec->args[2];
951     + map->mux_val = (u8)dma_spec->args[2];
952    
953     dma_spec->args[2] = 0;
954     dma_spec->args_count = 2;
955     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
956     index 5ce65280b396..90adff83e489 100644
957     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
958     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
959     @@ -136,7 +136,8 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring)
960     if (ring->funcs->end_use)
961     ring->funcs->end_use(ring);
962    
963     - amdgpu_ring_lru_touch(ring->adev, ring);
964     + if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ)
965     + amdgpu_ring_lru_touch(ring->adev, ring);
966     }
967    
968     /**
969     diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c
970     index 078026f63b6f..4e940a096b2a 100644
971     --- a/drivers/hid/hid-cp2112.c
972     +++ b/drivers/hid/hid-cp2112.c
973     @@ -196,6 +196,8 @@ static int cp2112_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
974     HID_REQ_GET_REPORT);
975     if (ret != CP2112_GPIO_CONFIG_LENGTH) {
976     hid_err(hdev, "error requesting GPIO config: %d\n", ret);
977     + if (ret >= 0)
978     + ret = -EIO;
979     goto exit;
980     }
981    
982     @@ -205,8 +207,10 @@ static int cp2112_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
983     ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,
984     CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,
985     HID_REQ_SET_REPORT);
986     - if (ret < 0) {
987     + if (ret != CP2112_GPIO_CONFIG_LENGTH) {
988     hid_err(hdev, "error setting GPIO config: %d\n", ret);
989     + if (ret >= 0)
990     + ret = -EIO;
991     goto exit;
992     }
993    
994     @@ -214,7 +218,7 @@ static int cp2112_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
995    
996     exit:
997     mutex_unlock(&dev->lock);
998     - return ret < 0 ? ret : -EIO;
999     + return ret;
1000     }
1001    
1002     static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
1003     diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
1004     index 12523f630b61..d2f74721b3ba 100644
1005     --- a/drivers/infiniband/core/addr.c
1006     +++ b/drivers/infiniband/core/addr.c
1007     @@ -852,7 +852,7 @@ static struct notifier_block nb = {
1008    
1009     int addr_init(void)
1010     {
1011     - addr_wq = alloc_ordered_workqueue("ib_addr", WQ_MEM_RECLAIM);
1012     + addr_wq = alloc_ordered_workqueue("ib_addr", 0);
1013     if (!addr_wq)
1014     return -ENOMEM;
1015    
1016     diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1017     index 852c8fec8088..fa79c7076ccd 100644
1018     --- a/drivers/infiniband/core/cma.c
1019     +++ b/drivers/infiniband/core/cma.c
1020     @@ -1540,7 +1540,7 @@ static struct rdma_id_private *cma_id_from_event(struct ib_cm_id *cm_id,
1021     return id_priv;
1022     }
1023    
1024     -static inline int cma_user_data_offset(struct rdma_id_private *id_priv)
1025     +static inline u8 cma_user_data_offset(struct rdma_id_private *id_priv)
1026     {
1027     return cma_family(id_priv) == AF_IB ? 0 : sizeof(struct cma_hdr);
1028     }
1029     @@ -1942,7 +1942,8 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
1030     struct rdma_id_private *listen_id, *conn_id = NULL;
1031     struct rdma_cm_event event;
1032     struct net_device *net_dev;
1033     - int offset, ret;
1034     + u8 offset;
1035     + int ret;
1036    
1037     listen_id = cma_id_from_event(cm_id, ib_event, &net_dev);
1038     if (IS_ERR(listen_id))
1039     @@ -3440,7 +3441,8 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
1040     struct ib_cm_sidr_req_param req;
1041     struct ib_cm_id *id;
1042     void *private_data;
1043     - int offset, ret;
1044     + u8 offset;
1045     + int ret;
1046    
1047     memset(&req, 0, sizeof req);
1048     offset = cma_user_data_offset(id_priv);
1049     @@ -3497,7 +3499,8 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
1050     struct rdma_route *route;
1051     void *private_data;
1052     struct ib_cm_id *id;
1053     - int offset, ret;
1054     + u8 offset;
1055     + int ret;
1056    
1057     memset(&req, 0, sizeof req);
1058     offset = cma_user_data_offset(id_priv);
1059     diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c
1060     index a337386652b0..feafdb961c48 100644
1061     --- a/drivers/infiniband/core/security.c
1062     +++ b/drivers/infiniband/core/security.c
1063     @@ -739,8 +739,11 @@ int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index)
1064     if (!rdma_protocol_ib(map->agent.device, map->agent.port_num))
1065     return 0;
1066    
1067     - if (map->agent.qp->qp_type == IB_QPT_SMI && !map->agent.smp_allowed)
1068     - return -EACCES;
1069     + if (map->agent.qp->qp_type == IB_QPT_SMI) {
1070     + if (!map->agent.smp_allowed)
1071     + return -EACCES;
1072     + return 0;
1073     + }
1074    
1075     return ib_security_pkey_access(map->agent.device,
1076     map->agent.port_num,
1077     diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
1078     index 52a2cf2d83aa..d8f540054392 100644
1079     --- a/drivers/infiniband/core/uverbs_cmd.c
1080     +++ b/drivers/infiniband/core/uverbs_cmd.c
1081     @@ -1982,6 +1982,12 @@ static int modify_qp(struct ib_uverbs_file *file,
1082     goto release_qp;
1083     }
1084    
1085     + if ((cmd->base.attr_mask & IB_QP_ALT_PATH) &&
1086     + !rdma_is_port_valid(qp->device, cmd->base.alt_port_num)) {
1087     + ret = -EINVAL;
1088     + goto release_qp;
1089     + }
1090     +
1091     attr->qp_state = cmd->base.qp_state;
1092     attr->cur_qp_state = cmd->base.cur_qp_state;
1093     attr->path_mtu = cmd->base.path_mtu;
1094     diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
1095     index be07da1997e6..eae8ea81c6e2 100644
1096     --- a/drivers/infiniband/hw/cxgb4/cq.c
1097     +++ b/drivers/infiniband/hw/cxgb4/cq.c
1098     @@ -410,6 +410,11 @@ void c4iw_flush_hw_cq(struct c4iw_cq *chp)
1099    
1100     static int cqe_completes_wr(struct t4_cqe *cqe, struct t4_wq *wq)
1101     {
1102     + if (CQE_OPCODE(cqe) == C4IW_DRAIN_OPCODE) {
1103     + WARN_ONCE(1, "Unexpected DRAIN CQE qp id %u!\n", wq->sq.qid);
1104     + return 0;
1105     + }
1106     +
1107     if (CQE_OPCODE(cqe) == FW_RI_TERMINATE)
1108     return 0;
1109    
1110     diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
1111     index cb7fc0d35d1d..e69453665a17 100644
1112     --- a/drivers/infiniband/hw/cxgb4/qp.c
1113     +++ b/drivers/infiniband/hw/cxgb4/qp.c
1114     @@ -868,7 +868,12 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
1115    
1116     qhp = to_c4iw_qp(ibqp);
1117     spin_lock_irqsave(&qhp->lock, flag);
1118     - if (t4_wq_in_error(&qhp->wq)) {
1119     +
1120     + /*
1121     + * If the qp has been flushed, then just insert a special
1122     + * drain cqe.
1123     + */
1124     + if (qhp->wq.flushed) {
1125     spin_unlock_irqrestore(&qhp->lock, flag);
1126     complete_sq_drain_wr(qhp, wr);
1127     return err;
1128     @@ -1012,7 +1017,12 @@ int c4iw_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
1129    
1130     qhp = to_c4iw_qp(ibqp);
1131     spin_lock_irqsave(&qhp->lock, flag);
1132     - if (t4_wq_in_error(&qhp->wq)) {
1133     +
1134     + /*
1135     + * If the qp has been flushed, then just insert a special
1136     + * drain cqe.
1137     + */
1138     + if (qhp->wq.flushed) {
1139     spin_unlock_irqrestore(&qhp->lock, flag);
1140     complete_rq_drain_wr(qhp, wr);
1141     return err;
1142     diff --git a/drivers/infiniband/hw/cxgb4/t4.h b/drivers/infiniband/hw/cxgb4/t4.h
1143     index e765c00303cd..bcb80ca67d3d 100644
1144     --- a/drivers/infiniband/hw/cxgb4/t4.h
1145     +++ b/drivers/infiniband/hw/cxgb4/t4.h
1146     @@ -171,7 +171,7 @@ struct t4_cqe {
1147     __be32 msn;
1148     } rcqe;
1149     struct {
1150     - u32 stag;
1151     + __be32 stag;
1152     u16 nada2;
1153     u16 cidx;
1154     } scqe;
1155     diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
1156     index 312444386f54..0e17d03ef1cb 100644
1157     --- a/drivers/infiniband/hw/hfi1/chip.c
1158     +++ b/drivers/infiniband/hw/hfi1/chip.c
1159     @@ -9952,7 +9952,7 @@ int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which)
1160     goto unimplemented;
1161    
1162     case HFI1_IB_CFG_OP_VLS:
1163     - val = ppd->vls_operational;
1164     + val = ppd->actual_vls_operational;
1165     break;
1166     case HFI1_IB_CFG_VL_HIGH_CAP: /* VL arb high priority table size */
1167     val = VL_ARB_HIGH_PRIO_TABLE_SIZE;
1168     diff --git a/drivers/infiniband/hw/hfi1/trace.c b/drivers/infiniband/hw/hfi1/trace.c
1169     index 9938bb983ce6..9749ec9dd9f2 100644
1170     --- a/drivers/infiniband/hw/hfi1/trace.c
1171     +++ b/drivers/infiniband/hw/hfi1/trace.c
1172     @@ -154,7 +154,7 @@ void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
1173     *opcode = ib_bth_get_opcode(ohdr);
1174     *tver = ib_bth_get_tver(ohdr);
1175     *pkey = ib_bth_get_pkey(ohdr);
1176     - *psn = ib_bth_get_psn(ohdr);
1177     + *psn = mask_psn(ib_bth_get_psn(ohdr));
1178     *qpn = ib_bth_get_qpn(ohdr);
1179     }
1180    
1181     @@ -169,7 +169,7 @@ void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr,
1182     *pad = ib_bth_get_pad(ohdr);
1183     *se = ib_bth_get_se(ohdr);
1184     *tver = ib_bth_get_tver(ohdr);
1185     - *psn = ib_bth_get_psn(ohdr);
1186     + *psn = mask_psn(ib_bth_get_psn(ohdr));
1187     *qpn = ib_bth_get_qpn(ohdr);
1188     }
1189    
1190     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
1191     index 17e44c86577a..fcfa08747899 100644
1192     --- a/drivers/infiniband/hw/mlx4/qp.c
1193     +++ b/drivers/infiniband/hw/mlx4/qp.c
1194     @@ -2182,11 +2182,6 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
1195     context->flags = cpu_to_be32((to_mlx4_state(new_state) << 28) |
1196     (to_mlx4_st(dev, qp->mlx4_ib_qp_type) << 16));
1197    
1198     - if (rwq_ind_tbl) {
1199     - fill_qp_rss_context(context, qp);
1200     - context->flags |= cpu_to_be32(1 << MLX4_RSS_QPC_FLAG_OFFSET);
1201     - }
1202     -
1203     if (!(attr_mask & IB_QP_PATH_MIG_STATE))
1204     context->flags |= cpu_to_be32(MLX4_QP_PM_MIGRATED << 11);
1205     else {
1206     @@ -2387,6 +2382,7 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
1207     context->pd = cpu_to_be32(pd->pdn);
1208    
1209     if (!rwq_ind_tbl) {
1210     + context->params1 = cpu_to_be32(MLX4_IB_ACK_REQ_FREQ << 28);
1211     get_cqs(qp, src_type, &send_cq, &recv_cq);
1212     } else { /* Set dummy CQs to be compatible with HV and PRM */
1213     send_cq = to_mcq(rwq_ind_tbl->ind_tbl[0]->cq);
1214     @@ -2394,7 +2390,6 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
1215     }
1216     context->cqn_send = cpu_to_be32(send_cq->mcq.cqn);
1217     context->cqn_recv = cpu_to_be32(recv_cq->mcq.cqn);
1218     - context->params1 = cpu_to_be32(MLX4_IB_ACK_REQ_FREQ << 28);
1219    
1220     /* Set "fast registration enabled" for all kernel QPs */
1221     if (!ibuobject)
1222     @@ -2513,7 +2508,7 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
1223     MLX4_IB_LINK_TYPE_ETH;
1224     if (dev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) {
1225     /* set QP to receive both tunneled & non-tunneled packets */
1226     - if (!(context->flags & cpu_to_be32(1 << MLX4_RSS_QPC_FLAG_OFFSET)))
1227     + if (!rwq_ind_tbl)
1228     context->srqn = cpu_to_be32(7 << 28);
1229     }
1230     }
1231     @@ -2562,6 +2557,13 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
1232     }
1233     }
1234    
1235     + if (rwq_ind_tbl &&
1236     + cur_state == IB_QPS_RESET &&
1237     + new_state == IB_QPS_INIT) {
1238     + fill_qp_rss_context(context, qp);
1239     + context->flags |= cpu_to_be32(1 << MLX4_RSS_QPC_FLAG_OFFSET);
1240     + }
1241     +
1242     err = mlx4_qp_modify(dev->dev, &qp->mtt, to_mlx4_state(cur_state),
1243     to_mlx4_state(new_state), context, optpar,
1244     sqd_event, &qp->mqp);
1245     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1246     index 6cd61638b441..c97384c914a4 100644
1247     --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1248     +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1249     @@ -1203,10 +1203,15 @@ static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv,
1250     ipoib_ib_dev_down(dev);
1251    
1252     if (level == IPOIB_FLUSH_HEAVY) {
1253     + rtnl_lock();
1254     if (test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
1255     ipoib_ib_dev_stop(dev);
1256     - if (ipoib_ib_dev_open(dev) != 0)
1257     +
1258     + result = ipoib_ib_dev_open(dev);
1259     + rtnl_unlock();
1260     + if (result)
1261     return;
1262     +
1263     if (netif_queue_stopped(dev))
1264     netif_start_queue(dev);
1265     }
1266     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
1267     index 8e8874d23717..99a2a57b6cfd 100644
1268     --- a/drivers/iommu/amd_iommu.c
1269     +++ b/drivers/iommu/amd_iommu.c
1270     @@ -3155,7 +3155,7 @@ static void amd_iommu_apply_resv_region(struct device *dev,
1271     unsigned long start, end;
1272    
1273     start = IOVA_PFN(region->start);
1274     - end = IOVA_PFN(region->start + region->length);
1275     + end = IOVA_PFN(region->start + region->length - 1);
1276    
1277     WARN_ON_ONCE(reserve_iova(&dma_dom->iovad, start, end) == NULL);
1278     }
1279     diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
1280     index bc1efbfb9ddf..542930cd183d 100644
1281     --- a/drivers/iommu/mtk_iommu_v1.c
1282     +++ b/drivers/iommu/mtk_iommu_v1.c
1283     @@ -708,7 +708,7 @@ static struct platform_driver mtk_iommu_driver = {
1284     .probe = mtk_iommu_probe,
1285     .remove = mtk_iommu_remove,
1286     .driver = {
1287     - .name = "mtk-iommu",
1288     + .name = "mtk-iommu-v1",
1289     .of_match_table = mtk_iommu_of_ids,
1290     .pm = &mtk_iommu_pm_ops,
1291     }
1292     diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
1293     index 81501644fb15..3f0ddc0d7393 100644
1294     --- a/drivers/lightnvm/pblk-core.c
1295     +++ b/drivers/lightnvm/pblk-core.c
1296     @@ -193,7 +193,7 @@ void pblk_bio_free_pages(struct pblk *pblk, struct bio *bio, int off,
1297     bio_advance(bio, off * PBLK_EXPOSED_PAGE_SIZE);
1298     for (i = off; i < nr_pages + off; i++) {
1299     bv = bio->bi_io_vec[i];
1300     - mempool_free(bv.bv_page, pblk->page_pool);
1301     + mempool_free(bv.bv_page, pblk->page_bio_pool);
1302     }
1303     }
1304    
1305     @@ -205,14 +205,14 @@ int pblk_bio_add_pages(struct pblk *pblk, struct bio *bio, gfp_t flags,
1306     int i, ret;
1307    
1308     for (i = 0; i < nr_pages; i++) {
1309     - page = mempool_alloc(pblk->page_pool, flags);
1310     + page = mempool_alloc(pblk->page_bio_pool, flags);
1311     if (!page)
1312     goto err;
1313    
1314     ret = bio_add_pc_page(q, bio, page, PBLK_EXPOSED_PAGE_SIZE, 0);
1315     if (ret != PBLK_EXPOSED_PAGE_SIZE) {
1316     pr_err("pblk: could not add page to bio\n");
1317     - mempool_free(page, pblk->page_pool);
1318     + mempool_free(page, pblk->page_bio_pool);
1319     goto err;
1320     }
1321     }
1322     @@ -486,12 +486,14 @@ void pblk_dealloc_page(struct pblk *pblk, struct pblk_line *line, int nr_secs)
1323     u64 addr;
1324     int i;
1325    
1326     + spin_lock(&line->lock);
1327     addr = find_next_zero_bit(line->map_bitmap,
1328     pblk->lm.sec_per_line, line->cur_sec);
1329     line->cur_sec = addr - nr_secs;
1330    
1331     for (i = 0; i < nr_secs; i++, line->cur_sec--)
1332     WARN_ON(!test_and_clear_bit(line->cur_sec, line->map_bitmap));
1333     + spin_unlock(&line->lock);
1334     }
1335    
1336     u64 __pblk_alloc_page(struct pblk *pblk, struct pblk_line *line, int nr_secs)
1337     diff --git a/drivers/lightnvm/pblk-gc.c b/drivers/lightnvm/pblk-gc.c
1338     index 6090d28f7995..d6bae085e1d2 100644
1339     --- a/drivers/lightnvm/pblk-gc.c
1340     +++ b/drivers/lightnvm/pblk-gc.c
1341     @@ -486,10 +486,10 @@ void pblk_gc_should_start(struct pblk *pblk)
1342     {
1343     struct pblk_gc *gc = &pblk->gc;
1344    
1345     - if (gc->gc_enabled && !gc->gc_active)
1346     + if (gc->gc_enabled && !gc->gc_active) {
1347     pblk_gc_start(pblk);
1348     -
1349     - pblk_gc_kick(pblk);
1350     + pblk_gc_kick(pblk);
1351     + }
1352     }
1353    
1354     /*
1355     @@ -628,7 +628,8 @@ void pblk_gc_exit(struct pblk *pblk)
1356     flush_workqueue(gc->gc_reader_wq);
1357     flush_workqueue(gc->gc_line_reader_wq);
1358    
1359     - del_timer(&gc->gc_timer);
1360     + gc->gc_enabled = 0;
1361     + del_timer_sync(&gc->gc_timer);
1362     pblk_gc_stop(pblk, 1);
1363    
1364     if (gc->gc_ts)
1365     diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
1366     index 1b0f61233c21..1b75675ee67b 100644
1367     --- a/drivers/lightnvm/pblk-init.c
1368     +++ b/drivers/lightnvm/pblk-init.c
1369     @@ -132,7 +132,6 @@ static int pblk_rwb_init(struct pblk *pblk)
1370     }
1371    
1372     /* Minimum pages needed within a lun */
1373     -#define PAGE_POOL_SIZE 16
1374     #define ADDR_POOL_SIZE 64
1375    
1376     static int pblk_set_ppaf(struct pblk *pblk)
1377     @@ -247,14 +246,16 @@ static int pblk_core_init(struct pblk *pblk)
1378     if (pblk_init_global_caches(pblk))
1379     return -ENOMEM;
1380    
1381     - pblk->page_pool = mempool_create_page_pool(PAGE_POOL_SIZE, 0);
1382     - if (!pblk->page_pool)
1383     + /* internal bios can be at most the sectors signaled by the device. */
1384     + pblk->page_bio_pool = mempool_create_page_pool(nvm_max_phys_sects(dev),
1385     + 0);
1386     + if (!pblk->page_bio_pool)
1387     return -ENOMEM;
1388    
1389     pblk->line_ws_pool = mempool_create_slab_pool(PBLK_WS_POOL_SIZE,
1390     pblk_blk_ws_cache);
1391     if (!pblk->line_ws_pool)
1392     - goto free_page_pool;
1393     + goto free_page_bio_pool;
1394    
1395     pblk->rec_pool = mempool_create_slab_pool(geo->nr_luns, pblk_rec_cache);
1396     if (!pblk->rec_pool)
1397     @@ -309,8 +310,8 @@ static int pblk_core_init(struct pblk *pblk)
1398     mempool_destroy(pblk->rec_pool);
1399     free_blk_ws_pool:
1400     mempool_destroy(pblk->line_ws_pool);
1401     -free_page_pool:
1402     - mempool_destroy(pblk->page_pool);
1403     +free_page_bio_pool:
1404     + mempool_destroy(pblk->page_bio_pool);
1405     return -ENOMEM;
1406     }
1407    
1408     @@ -322,7 +323,7 @@ static void pblk_core_free(struct pblk *pblk)
1409     if (pblk->bb_wq)
1410     destroy_workqueue(pblk->bb_wq);
1411    
1412     - mempool_destroy(pblk->page_pool);
1413     + mempool_destroy(pblk->page_bio_pool);
1414     mempool_destroy(pblk->line_ws_pool);
1415     mempool_destroy(pblk->rec_pool);
1416     mempool_destroy(pblk->g_rq_pool);
1417     @@ -681,8 +682,8 @@ static int pblk_lines_init(struct pblk *pblk)
1418     lm->blk_bitmap_len = BITS_TO_LONGS(geo->nr_luns) * sizeof(long);
1419     lm->sec_bitmap_len = BITS_TO_LONGS(lm->sec_per_line) * sizeof(long);
1420     lm->lun_bitmap_len = BITS_TO_LONGS(geo->nr_luns) * sizeof(long);
1421     - lm->high_thrs = lm->sec_per_line / 2;
1422     - lm->mid_thrs = lm->sec_per_line / 4;
1423     + lm->mid_thrs = lm->sec_per_line / 2;
1424     + lm->high_thrs = lm->sec_per_line / 4;
1425     lm->meta_distance = (geo->nr_luns / 2) * pblk->min_write_pgs;
1426    
1427     /* Calculate necessary pages for smeta. See comment over struct
1428     @@ -923,6 +924,7 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
1429     pblk->dev = dev;
1430     pblk->disk = tdisk;
1431     pblk->state = PBLK_STATE_RUNNING;
1432     + pblk->gc.gc_enabled = 0;
1433    
1434     spin_lock_init(&pblk->trans_lock);
1435     spin_lock_init(&pblk->lock);
1436     @@ -944,6 +946,7 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
1437     atomic_long_set(&pblk->recov_writes, 0);
1438     atomic_long_set(&pblk->recov_writes, 0);
1439     atomic_long_set(&pblk->recov_gc_writes, 0);
1440     + atomic_long_set(&pblk->recov_gc_reads, 0);
1441     #endif
1442    
1443     atomic_long_set(&pblk->read_failed, 0);
1444     diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c
1445     index d682e89e6493..402c732f0970 100644
1446     --- a/drivers/lightnvm/pblk-read.c
1447     +++ b/drivers/lightnvm/pblk-read.c
1448     @@ -238,7 +238,7 @@ static int pblk_fill_partial_read_bio(struct pblk *pblk, struct nvm_rq *rqd,
1449     kunmap_atomic(src_p);
1450     kunmap_atomic(dst_p);
1451    
1452     - mempool_free(src_bv.bv_page, pblk->page_pool);
1453     + mempool_free(src_bv.bv_page, pblk->page_bio_pool);
1454    
1455     hole = find_next_zero_bit(read_bitmap, nr_secs, hole + 1);
1456     } while (hole < nr_secs);
1457     @@ -499,7 +499,7 @@ int pblk_submit_read_gc(struct pblk *pblk, u64 *lba_list, void *data,
1458    
1459     data_len = (*secs_to_gc) * geo->sec_size;
1460     bio = pblk_bio_map_addr(pblk, data, *secs_to_gc, data_len,
1461     - PBLK_KMALLOC_META, GFP_KERNEL);
1462     + PBLK_VMALLOC_META, GFP_KERNEL);
1463     if (IS_ERR(bio)) {
1464     pr_err("pblk: could not allocate GC bio (%lu)\n", PTR_ERR(bio));
1465     goto err_free_dma;
1466     @@ -519,7 +519,7 @@ int pblk_submit_read_gc(struct pblk *pblk, u64 *lba_list, void *data,
1467     if (ret) {
1468     bio_endio(bio);
1469     pr_err("pblk: GC read request failed\n");
1470     - goto err_free_dma;
1471     + goto err_free_bio;
1472     }
1473    
1474     if (!wait_for_completion_io_timeout(&wait,
1475     @@ -541,10 +541,13 @@ int pblk_submit_read_gc(struct pblk *pblk, u64 *lba_list, void *data,
1476     atomic_long_sub(*secs_to_gc, &pblk->inflight_reads);
1477     #endif
1478    
1479     + bio_put(bio);
1480     out:
1481     nvm_dev_dma_free(dev->parent, rqd.meta_list, rqd.dma_meta_list);
1482     return NVM_IO_OK;
1483    
1484     +err_free_bio:
1485     + bio_put(bio);
1486     err_free_dma:
1487     nvm_dev_dma_free(dev->parent, rqd.meta_list, rqd.dma_meta_list);
1488     return NVM_IO_ERR;
1489     diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
1490     index 67e623bd5c2d..053164deb072 100644
1491     --- a/drivers/lightnvm/pblk.h
1492     +++ b/drivers/lightnvm/pblk.h
1493     @@ -618,7 +618,7 @@ struct pblk {
1494    
1495     struct list_head compl_list;
1496    
1497     - mempool_t *page_pool;
1498     + mempool_t *page_bio_pool;
1499     mempool_t *line_ws_pool;
1500     mempool_t *rec_pool;
1501     mempool_t *g_rq_pool;
1502     diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
1503     index 14d13cab5cda..e9fbf2bcd122 100644
1504     --- a/drivers/md/bcache/request.c
1505     +++ b/drivers/md/bcache/request.c
1506     @@ -463,6 +463,7 @@ struct search {
1507     unsigned recoverable:1;
1508     unsigned write:1;
1509     unsigned read_dirty_data:1;
1510     + unsigned cache_missed:1;
1511    
1512     unsigned long start_time;
1513    
1514     @@ -649,6 +650,7 @@ static inline struct search *search_alloc(struct bio *bio,
1515    
1516     s->orig_bio = bio;
1517     s->cache_miss = NULL;
1518     + s->cache_missed = 0;
1519     s->d = d;
1520     s->recoverable = 1;
1521     s->write = op_is_write(bio_op(bio));
1522     @@ -767,7 +769,7 @@ static void cached_dev_read_done_bh(struct closure *cl)
1523     struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);
1524    
1525     bch_mark_cache_accounting(s->iop.c, s->d,
1526     - !s->cache_miss, s->iop.bypass);
1527     + !s->cache_missed, s->iop.bypass);
1528     trace_bcache_read(s->orig_bio, !s->cache_miss, s->iop.bypass);
1529    
1530     if (s->iop.status)
1531     @@ -786,6 +788,8 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,
1532     struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);
1533     struct bio *miss, *cache_bio;
1534    
1535     + s->cache_missed = 1;
1536     +
1537     if (s->cache_miss || s->iop.bypass) {
1538     miss = bio_next_split(bio, sectors, GFP_NOIO, s->d->bio_split);
1539     ret = miss == bio ? MAP_DONE : MAP_CONTINUE;
1540     diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
1541     index fc0a31b13ac4..25bf003fb198 100644
1542     --- a/drivers/md/bcache/super.c
1543     +++ b/drivers/md/bcache/super.c
1544     @@ -2085,6 +2085,7 @@ static void bcache_exit(void)
1545     if (bcache_major)
1546     unregister_blkdev(bcache_major, "bcache");
1547     unregister_reboot_notifier(&reboot);
1548     + mutex_destroy(&bch_register_lock);
1549     }
1550    
1551     static int __init bcache_init(void)
1552     @@ -2103,14 +2104,15 @@ static int __init bcache_init(void)
1553     bcache_major = register_blkdev(0, "bcache");
1554     if (bcache_major < 0) {
1555     unregister_reboot_notifier(&reboot);
1556     + mutex_destroy(&bch_register_lock);
1557     return bcache_major;
1558     }
1559    
1560     if (!(bcache_wq = alloc_workqueue("bcache", WQ_MEM_RECLAIM, 0)) ||
1561     !(bcache_kobj = kobject_create_and_add("bcache", fs_kobj)) ||
1562     - sysfs_create_files(bcache_kobj, files) ||
1563     bch_request_init() ||
1564     - bch_debug_init(bcache_kobj))
1565     + bch_debug_init(bcache_kobj) ||
1566     + sysfs_create_files(bcache_kobj, files))
1567     goto err;
1568    
1569     return 0;
1570     diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
1571     index 0b7edfd0b454..71c3507df9a0 100644
1572     --- a/drivers/md/dm-cache-target.c
1573     +++ b/drivers/md/dm-cache-target.c
1574     @@ -3554,18 +3554,18 @@ static int __init dm_cache_init(void)
1575     {
1576     int r;
1577    
1578     - r = dm_register_target(&cache_target);
1579     - if (r) {
1580     - DMERR("cache target registration failed: %d", r);
1581     - return r;
1582     - }
1583     -
1584     migration_cache = KMEM_CACHE(dm_cache_migration, 0);
1585     if (!migration_cache) {
1586     dm_unregister_target(&cache_target);
1587     return -ENOMEM;
1588     }
1589    
1590     + r = dm_register_target(&cache_target);
1591     + if (r) {
1592     + DMERR("cache target registration failed: %d", r);
1593     + return r;
1594     + }
1595     +
1596     return 0;
1597     }
1598    
1599     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
1600     index e8094d8fbe0d..35e82b14ded7 100644
1601     --- a/drivers/md/dm-mpath.c
1602     +++ b/drivers/md/dm-mpath.c
1603     @@ -1965,13 +1965,6 @@ static int __init dm_multipath_init(void)
1604     {
1605     int r;
1606    
1607     - r = dm_register_target(&multipath_target);
1608     - if (r < 0) {
1609     - DMERR("request-based register failed %d", r);
1610     - r = -EINVAL;
1611     - goto bad_register_target;
1612     - }
1613     -
1614     kmultipathd = alloc_workqueue("kmpathd", WQ_MEM_RECLAIM, 0);
1615     if (!kmultipathd) {
1616     DMERR("failed to create workqueue kmpathd");
1617     @@ -1993,13 +1986,20 @@ static int __init dm_multipath_init(void)
1618     goto bad_alloc_kmpath_handlerd;
1619     }
1620    
1621     + r = dm_register_target(&multipath_target);
1622     + if (r < 0) {
1623     + DMERR("request-based register failed %d", r);
1624     + r = -EINVAL;
1625     + goto bad_register_target;
1626     + }
1627     +
1628     return 0;
1629    
1630     +bad_register_target:
1631     + destroy_workqueue(kmpath_handlerd);
1632     bad_alloc_kmpath_handlerd:
1633     destroy_workqueue(kmultipathd);
1634     bad_alloc_kmultipathd:
1635     - dm_unregister_target(&multipath_target);
1636     -bad_register_target:
1637     return r;
1638     }
1639    
1640     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
1641     index 1113b42e1eda..a0613bd8ed00 100644
1642     --- a/drivers/md/dm-snap.c
1643     +++ b/drivers/md/dm-snap.c
1644     @@ -2411,24 +2411,6 @@ static int __init dm_snapshot_init(void)
1645     return r;
1646     }
1647    
1648     - r = dm_register_target(&snapshot_target);
1649     - if (r < 0) {
1650     - DMERR("snapshot target register failed %d", r);
1651     - goto bad_register_snapshot_target;
1652     - }
1653     -
1654     - r = dm_register_target(&origin_target);
1655     - if (r < 0) {
1656     - DMERR("Origin target register failed %d", r);
1657     - goto bad_register_origin_target;
1658     - }
1659     -
1660     - r = dm_register_target(&merge_target);
1661     - if (r < 0) {
1662     - DMERR("Merge target register failed %d", r);
1663     - goto bad_register_merge_target;
1664     - }
1665     -
1666     r = init_origin_hash();
1667     if (r) {
1668     DMERR("init_origin_hash failed.");
1669     @@ -2449,19 +2431,37 @@ static int __init dm_snapshot_init(void)
1670     goto bad_pending_cache;
1671     }
1672    
1673     + r = dm_register_target(&snapshot_target);
1674     + if (r < 0) {
1675     + DMERR("snapshot target register failed %d", r);
1676     + goto bad_register_snapshot_target;
1677     + }
1678     +
1679     + r = dm_register_target(&origin_target);
1680     + if (r < 0) {
1681     + DMERR("Origin target register failed %d", r);
1682     + goto bad_register_origin_target;
1683     + }
1684     +
1685     + r = dm_register_target(&merge_target);
1686     + if (r < 0) {
1687     + DMERR("Merge target register failed %d", r);
1688     + goto bad_register_merge_target;
1689     + }
1690     +
1691     return 0;
1692    
1693     -bad_pending_cache:
1694     - kmem_cache_destroy(exception_cache);
1695     -bad_exception_cache:
1696     - exit_origin_hash();
1697     -bad_origin_hash:
1698     - dm_unregister_target(&merge_target);
1699     bad_register_merge_target:
1700     dm_unregister_target(&origin_target);
1701     bad_register_origin_target:
1702     dm_unregister_target(&snapshot_target);
1703     bad_register_snapshot_target:
1704     + kmem_cache_destroy(pending_cache);
1705     +bad_pending_cache:
1706     + kmem_cache_destroy(exception_cache);
1707     +bad_exception_cache:
1708     + exit_origin_hash();
1709     +bad_origin_hash:
1710     dm_exception_store_exit();
1711    
1712     return r;
1713     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1714     index 1e25705209c2..02e42ba2ecbc 100644
1715     --- a/drivers/md/dm-thin.c
1716     +++ b/drivers/md/dm-thin.c
1717     @@ -4355,30 +4355,28 @@ static struct target_type thin_target = {
1718    
1719     static int __init dm_thin_init(void)
1720     {
1721     - int r;
1722     + int r = -ENOMEM;
1723    
1724     pool_table_init();
1725    
1726     + _new_mapping_cache = KMEM_CACHE(dm_thin_new_mapping, 0);
1727     + if (!_new_mapping_cache)
1728     + return r;
1729     +
1730     r = dm_register_target(&thin_target);
1731     if (r)
1732     - return r;
1733     + goto bad_new_mapping_cache;
1734    
1735     r = dm_register_target(&pool_target);
1736     if (r)
1737     - goto bad_pool_target;
1738     -
1739     - r = -ENOMEM;
1740     -
1741     - _new_mapping_cache = KMEM_CACHE(dm_thin_new_mapping, 0);
1742     - if (!_new_mapping_cache)
1743     - goto bad_new_mapping_cache;
1744     + goto bad_thin_target;
1745    
1746     return 0;
1747    
1748     -bad_new_mapping_cache:
1749     - dm_unregister_target(&pool_target);
1750     -bad_pool_target:
1751     +bad_thin_target:
1752     dm_unregister_target(&thin_target);
1753     +bad_new_mapping_cache:
1754     + kmem_cache_destroy(_new_mapping_cache);
1755    
1756     return r;
1757     }
1758     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
1759     index e4e8f9e565b7..5a8216b50e38 100644
1760     --- a/drivers/md/raid1.c
1761     +++ b/drivers/md/raid1.c
1762     @@ -1309,12 +1309,12 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
1763     sigset_t full, old;
1764     prepare_to_wait(&conf->wait_barrier,
1765     &w, TASK_INTERRUPTIBLE);
1766     - if (bio_end_sector(bio) <= mddev->suspend_lo ||
1767     - bio->bi_iter.bi_sector >= mddev->suspend_hi ||
1768     - (mddev_is_clustered(mddev) &&
1769     + if ((bio_end_sector(bio) <= mddev->suspend_lo ||
1770     + bio->bi_iter.bi_sector >= mddev->suspend_hi) &&
1771     + (!mddev_is_clustered(mddev) ||
1772     !md_cluster_ops->area_resyncing(mddev, WRITE,
1773     - bio->bi_iter.bi_sector,
1774     - bio_end_sector(bio))))
1775     + bio->bi_iter.bi_sector,
1776     + bio_end_sector(bio))))
1777     break;
1778     sigfillset(&full);
1779     sigprocmask(SIG_BLOCK, &full, &old);
1780     diff --git a/drivers/md/raid5-ppl.c b/drivers/md/raid5-ppl.c
1781     index cd026c88f7ef..702b76008886 100644
1782     --- a/drivers/md/raid5-ppl.c
1783     +++ b/drivers/md/raid5-ppl.c
1784     @@ -758,7 +758,8 @@ static int ppl_recover_entry(struct ppl_log *log, struct ppl_header_entry *e,
1785     (unsigned long long)sector);
1786    
1787     rdev = conf->disks[dd_idx].rdev;
1788     - if (!rdev) {
1789     + if (!rdev || (!test_bit(In_sync, &rdev->flags) &&
1790     + sector >= rdev->recovery_offset)) {
1791     pr_debug("%s:%*s data member disk %d missing\n",
1792     __func__, indent, "", dd_idx);
1793     update_parity = false;
1794     diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1795     index 7aed69a4f655..c406f16f5295 100644
1796     --- a/drivers/md/raid5.c
1797     +++ b/drivers/md/raid5.c
1798     @@ -1818,8 +1818,11 @@ static void ops_complete_reconstruct(void *stripe_head_ref)
1799     struct r5dev *dev = &sh->dev[i];
1800    
1801     if (dev->written || i == pd_idx || i == qd_idx) {
1802     - if (!discard && !test_bit(R5_SkipCopy, &dev->flags))
1803     + if (!discard && !test_bit(R5_SkipCopy, &dev->flags)) {
1804     set_bit(R5_UPTODATE, &dev->flags);
1805     + if (test_bit(STRIPE_EXPAND_READY, &sh->state))
1806     + set_bit(R5_Expanded, &dev->flags);
1807     + }
1808     if (fua)
1809     set_bit(R5_WantFUA, &dev->flags);
1810     if (sync)
1811     diff --git a/drivers/media/platform/qcom/camss-8x16/camss-vfe.c b/drivers/media/platform/qcom/camss-8x16/camss-vfe.c
1812     index b22d2dfcd3c2..55232a912950 100644
1813     --- a/drivers/media/platform/qcom/camss-8x16/camss-vfe.c
1814     +++ b/drivers/media/platform/qcom/camss-8x16/camss-vfe.c
1815     @@ -622,6 +622,9 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
1816     reg = VFE_0_BUS_XBAR_CFG_x_M_PAIR_STREAM_EN;
1817     if (p == V4L2_PIX_FMT_NV12 || p == V4L2_PIX_FMT_NV16)
1818     reg |= VFE_0_BUS_XBAR_CFG_x_M_PAIR_STREAM_SWAP_INTER_INTRA;
1819     + } else {
1820     + /* On current devices output->wm_num is always <= 2 */
1821     + break;
1822     }
1823    
1824     if (output->wm_idx[i] % 2 == 1)
1825     diff --git a/drivers/media/usb/usbtv/usbtv-video.c b/drivers/media/usb/usbtv/usbtv-video.c
1826     index 95b5f4319ec2..3668a04359e8 100644
1827     --- a/drivers/media/usb/usbtv/usbtv-video.c
1828     +++ b/drivers/media/usb/usbtv/usbtv-video.c
1829     @@ -718,8 +718,8 @@ static int usbtv_s_ctrl(struct v4l2_ctrl *ctrl)
1830     */
1831     if (ctrl->id == V4L2_CID_BRIGHTNESS || ctrl->id == V4L2_CID_CONTRAST) {
1832     ret = usb_control_msg(usbtv->udev,
1833     - usb_sndctrlpipe(usbtv->udev, 0), USBTV_CONTROL_REG,
1834     - USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1835     + usb_rcvctrlpipe(usbtv->udev, 0), USBTV_CONTROL_REG,
1836     + USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1837     0, USBTV_BASE + 0x0244, (void *)data, 3, 0);
1838     if (ret < 0)
1839     goto error;
1840     diff --git a/drivers/mfd/fsl-imx25-tsadc.c b/drivers/mfd/fsl-imx25-tsadc.c
1841     index b3767c3141e5..461b0990b56f 100644
1842     --- a/drivers/mfd/fsl-imx25-tsadc.c
1843     +++ b/drivers/mfd/fsl-imx25-tsadc.c
1844     @@ -180,6 +180,19 @@ static int mx25_tsadc_probe(struct platform_device *pdev)
1845     return devm_of_platform_populate(dev);
1846     }
1847    
1848     +static int mx25_tsadc_remove(struct platform_device *pdev)
1849     +{
1850     + struct mx25_tsadc *tsadc = platform_get_drvdata(pdev);
1851     + int irq = platform_get_irq(pdev, 0);
1852     +
1853     + if (irq) {
1854     + irq_set_chained_handler_and_data(irq, NULL, NULL);
1855     + irq_domain_remove(tsadc->domain);
1856     + }
1857     +
1858     + return 0;
1859     +}
1860     +
1861     static const struct of_device_id mx25_tsadc_ids[] = {
1862     { .compatible = "fsl,imx25-tsadc" },
1863     { /* Sentinel */ }
1864     @@ -192,6 +205,7 @@ static struct platform_driver mx25_tsadc_driver = {
1865     .of_match_table = of_match_ptr(mx25_tsadc_ids),
1866     },
1867     .probe = mx25_tsadc_probe,
1868     + .remove = mx25_tsadc_remove,
1869     };
1870     module_platform_driver(mx25_tsadc_driver);
1871    
1872     diff --git a/drivers/mfd/mxs-lradc.c b/drivers/mfd/mxs-lradc.c
1873     index 630bd19b2c0a..98e732a7ae96 100644
1874     --- a/drivers/mfd/mxs-lradc.c
1875     +++ b/drivers/mfd/mxs-lradc.c
1876     @@ -196,8 +196,10 @@ static int mxs_lradc_probe(struct platform_device *pdev)
1877     platform_set_drvdata(pdev, lradc);
1878    
1879     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1880     - if (!res)
1881     - return -ENOMEM;
1882     + if (!res) {
1883     + ret = -ENOMEM;
1884     + goto err_clk;
1885     + }
1886    
1887     switch (lradc->soc) {
1888     case IMX23_LRADC:
1889     diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
1890     index 372b2060fbba..4cc0b42f2acc 100644
1891     --- a/drivers/misc/eeprom/at24.c
1892     +++ b/drivers/misc/eeprom/at24.c
1893     @@ -776,7 +776,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
1894     at24->nvmem_config.reg_read = at24_read;
1895     at24->nvmem_config.reg_write = at24_write;
1896     at24->nvmem_config.priv = at24;
1897     - at24->nvmem_config.stride = 4;
1898     + at24->nvmem_config.stride = 1;
1899     at24->nvmem_config.word_size = 1;
1900     at24->nvmem_config.size = chip.byte_len;
1901    
1902     diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
1903     index deb203026496..e089bb6dde3a 100644
1904     --- a/drivers/misc/pci_endpoint_test.c
1905     +++ b/drivers/misc/pci_endpoint_test.c
1906     @@ -533,6 +533,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev,
1907    
1908     test->base = test->bar[test_reg_bar];
1909     if (!test->base) {
1910     + err = -ENOMEM;
1911     dev_err(dev, "Cannot perform PCI test without BAR%d\n",
1912     test_reg_bar);
1913     goto err_iounmap;
1914     @@ -542,6 +543,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev,
1915    
1916     id = ida_simple_get(&pci_endpoint_test_ida, 0, 0, GFP_KERNEL);
1917     if (id < 0) {
1918     + err = id;
1919     dev_err(dev, "unable to get id\n");
1920     goto err_iounmap;
1921     }
1922     @@ -588,6 +590,8 @@ static void pci_endpoint_test_remove(struct pci_dev *pdev)
1923    
1924     if (sscanf(misc_device->name, DRV_MODULE_NAME ".%d", &id) != 1)
1925     return;
1926     + if (id < 0)
1927     + return;
1928    
1929     misc_deregister(&test->miscdev);
1930     ida_simple_remove(&pci_endpoint_test_ida, id);
1931     diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h
1932     index f06cd91964ce..79a5b985ccf5 100644
1933     --- a/drivers/mmc/core/card.h
1934     +++ b/drivers/mmc/core/card.h
1935     @@ -75,9 +75,11 @@ struct mmc_fixup {
1936     #define EXT_CSD_REV_ANY (-1u)
1937    
1938     #define CID_MANFID_SANDISK 0x2
1939     +#define CID_MANFID_ATP 0x9
1940     #define CID_MANFID_TOSHIBA 0x11
1941     #define CID_MANFID_MICRON 0x13
1942     #define CID_MANFID_SAMSUNG 0x15
1943     +#define CID_MANFID_APACER 0x27
1944     #define CID_MANFID_KINGSTON 0x70
1945     #define CID_MANFID_HYNIX 0x90
1946    
1947     diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
1948     index f664e9cbc9f8..75d317623852 100644
1949     --- a/drivers/mmc/core/quirks.h
1950     +++ b/drivers/mmc/core/quirks.h
1951     @@ -52,6 +52,14 @@ static const struct mmc_fixup mmc_blk_fixups[] = {
1952     MMC_FIXUP("MMC32G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc,
1953     MMC_QUIRK_BLK_NO_CMD23),
1954    
1955     + /*
1956     + * Some SD cards lockup while using CMD23 multiblock transfers.
1957     + */
1958     + MMC_FIXUP("AF SD", CID_MANFID_ATP, CID_OEMID_ANY, add_quirk_sd,
1959     + MMC_QUIRK_BLK_NO_CMD23),
1960     + MMC_FIXUP("APUSD", CID_MANFID_APACER, 0x5048, add_quirk_sd,
1961     + MMC_QUIRK_BLK_NO_CMD23),
1962     +
1963     /*
1964     * Some MMC cards need longer data read timeout than indicated in CSD.
1965     */
1966     diff --git a/drivers/mtd/spi-nor/stm32-quadspi.c b/drivers/mtd/spi-nor/stm32-quadspi.c
1967     index 86c0931543c5..ad6a3e1844cb 100644
1968     --- a/drivers/mtd/spi-nor/stm32-quadspi.c
1969     +++ b/drivers/mtd/spi-nor/stm32-quadspi.c
1970     @@ -240,12 +240,12 @@ static int stm32_qspi_tx_poll(struct stm32_qspi *qspi,
1971     STM32_QSPI_FIFO_TIMEOUT_US);
1972     if (ret) {
1973     dev_err(qspi->dev, "fifo timeout (stat:%#x)\n", sr);
1974     - break;
1975     + return ret;
1976     }
1977     tx_fifo(buf++, qspi->io_base + QUADSPI_DR);
1978     }
1979    
1980     - return ret;
1981     + return 0;
1982     }
1983    
1984     static int stm32_qspi_tx_mm(struct stm32_qspi *qspi,
1985     diff --git a/drivers/net/dsa/lan9303-core.c b/drivers/net/dsa/lan9303-core.c
1986     index b471413d3df9..1e5a69b9d90a 100644
1987     --- a/drivers/net/dsa/lan9303-core.c
1988     +++ b/drivers/net/dsa/lan9303-core.c
1989     @@ -569,7 +569,7 @@ static int lan9303_disable_processing(struct lan9303 *chip)
1990     {
1991     int p;
1992    
1993     - for (p = 0; p < LAN9303_NUM_PORTS; p++) {
1994     + for (p = 1; p < LAN9303_NUM_PORTS; p++) {
1995     int ret = lan9303_disable_processing_port(chip, p);
1996    
1997     if (ret)
1998     diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
1999     index 2e993ce43b66..4d2db22e011b 100644
2000     --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
2001     +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
2002     @@ -1289,6 +1289,9 @@ static int liquidio_stop(struct net_device *netdev)
2003     struct octeon_device *oct = lio->oct_dev;
2004     struct napi_struct *napi, *n;
2005    
2006     + /* tell Octeon to stop forwarding packets to host */
2007     + send_rx_ctrl_cmd(lio, 0);
2008     +
2009     if (oct->props[lio->ifidx].napi_enabled) {
2010     list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
2011     napi_disable(napi);
2012     @@ -1306,9 +1309,6 @@ static int liquidio_stop(struct net_device *netdev)
2013     netif_carrier_off(netdev);
2014     lio->link_changes++;
2015    
2016     - /* tell Octeon to stop forwarding packets to host */
2017     - send_rx_ctrl_cmd(lio, 0);
2018     -
2019     ifstate_reset(lio, LIO_IFSTATE_RUNNING);
2020    
2021     txqs_stop(netdev);
2022     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2023     index c1cdbfd83bdb..a0ef97e7f3c9 100644
2024     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2025     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2026     @@ -3981,7 +3981,7 @@ static int hclge_init_client_instance(struct hnae3_client *client,
2027     vport->roce.client = client;
2028     }
2029    
2030     - if (hdev->roce_client) {
2031     + if (hdev->roce_client && hdev->nic_client) {
2032     ret = hclge_init_roce_base_info(vport);
2033     if (ret)
2034     goto err;
2035     @@ -4007,13 +4007,19 @@ static void hclge_uninit_client_instance(struct hnae3_client *client,
2036    
2037     for (i = 0; i < hdev->num_vmdq_vport + 1; i++) {
2038     vport = &hdev->vport[i];
2039     - if (hdev->roce_client)
2040     + if (hdev->roce_client) {
2041     hdev->roce_client->ops->uninit_instance(&vport->roce,
2042     0);
2043     + hdev->roce_client = NULL;
2044     + vport->roce.client = NULL;
2045     + }
2046     if (client->type == HNAE3_CLIENT_ROCE)
2047     return;
2048     - if (client->ops->uninit_instance)
2049     + if (client->ops->uninit_instance) {
2050     client->ops->uninit_instance(&vport->nic, 0);
2051     + hdev->nic_client = NULL;
2052     + vport->nic.client = NULL;
2053     + }
2054     }
2055     }
2056    
2057     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c
2058     index 35369e1c8036..186772493711 100644
2059     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c
2060     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c
2061     @@ -721,7 +721,7 @@ static void hns3_set_txbd_baseinfo(u16 *bdtp_fe_sc_vld_ra_ri, int frag_end)
2062     HNS3_TXD_BDTYPE_M, 0);
2063     hnae_set_bit(*bdtp_fe_sc_vld_ra_ri, HNS3_TXD_FE_B, !!frag_end);
2064     hnae_set_bit(*bdtp_fe_sc_vld_ra_ri, HNS3_TXD_VLD_B, 1);
2065     - hnae_set_field(*bdtp_fe_sc_vld_ra_ri, HNS3_TXD_SC_M, HNS3_TXD_SC_S, 1);
2066     + hnae_set_field(*bdtp_fe_sc_vld_ra_ri, HNS3_TXD_SC_M, HNS3_TXD_SC_S, 0);
2067     }
2068    
2069     static int hns3_fill_desc(struct hns3_enet_ring *ring, void *priv,
2070     @@ -1546,7 +1546,7 @@ static int hns3_reserve_buffer_map(struct hns3_enet_ring *ring,
2071     return 0;
2072    
2073     out_with_buf:
2074     - hns3_free_buffers(ring);
2075     + hns3_free_buffer(ring, cb);
2076     out:
2077     return ret;
2078     }
2079     @@ -1586,7 +1586,7 @@ static int hns3_alloc_ring_buffers(struct hns3_enet_ring *ring)
2080     static void hns3_replace_buffer(struct hns3_enet_ring *ring, int i,
2081     struct hns3_desc_cb *res_cb)
2082     {
2083     - hns3_map_buffer(ring, &ring->desc_cb[i]);
2084     + hns3_unmap_buffer(ring, &ring->desc_cb[i]);
2085     ring->desc_cb[i] = *res_cb;
2086     ring->desc[i].addr = cpu_to_le64(ring->desc_cb[i].dma);
2087     }
2088     @@ -2460,9 +2460,8 @@ static int hns3_nic_uninit_vector_data(struct hns3_nic_priv *priv)
2089     (void)irq_set_affinity_hint(
2090     priv->tqp_vector[i].vector_irq,
2091     NULL);
2092     - devm_free_irq(&pdev->dev,
2093     - priv->tqp_vector[i].vector_irq,
2094     - &priv->tqp_vector[i]);
2095     + free_irq(priv->tqp_vector[i].vector_irq,
2096     + &priv->tqp_vector[i]);
2097     }
2098    
2099     priv->ring_data[i].ring->irq_init_flag = HNS3_VECTOR_NOT_INITED;
2100     @@ -2489,16 +2488,16 @@ static int hns3_ring_get_cfg(struct hnae3_queue *q, struct hns3_nic_priv *priv,
2101    
2102     if (ring_type == HNAE3_RING_TYPE_TX) {
2103     ring_data[q->tqp_index].ring = ring;
2104     + ring_data[q->tqp_index].queue_index = q->tqp_index;
2105     ring->io_base = (u8 __iomem *)q->io_base + HNS3_TX_REG_OFFSET;
2106     } else {
2107     ring_data[q->tqp_index + queue_num].ring = ring;
2108     + ring_data[q->tqp_index + queue_num].queue_index = q->tqp_index;
2109     ring->io_base = q->io_base;
2110     }
2111    
2112     hnae_set_bit(ring->flag, HNAE3_RING_TYPE_B, ring_type);
2113    
2114     - ring_data[q->tqp_index].queue_index = q->tqp_index;
2115     -
2116     ring->tqp = q;
2117     ring->desc = NULL;
2118     ring->desc_cb = NULL;
2119     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_ethtool.c
2120     index d636399232fb..e590d96e434a 100644
2121     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_ethtool.c
2122     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_ethtool.c
2123     @@ -375,6 +375,9 @@ static int hns3_get_link_ksettings(struct net_device *netdev,
2124     break;
2125     }
2126    
2127     + if (!cmd->base.autoneg)
2128     + advertised_caps &= ~HNS3_LM_AUTONEG_BIT;
2129     +
2130     /* now, map driver link modes to ethtool link modes */
2131     hns3_driv_to_eth_caps(supported_caps, cmd, false);
2132     hns3_driv_to_eth_caps(advertised_caps, cmd, true);
2133     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2134     index 696b99e65a5a..db38880f54b4 100644
2135     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2136     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2137     @@ -2974,6 +2974,7 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port,
2138     if (IS_ERR(mlxsw_sp_port_vlan)) {
2139     dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to create VID 1\n",
2140     mlxsw_sp_port->local_port);
2141     + err = PTR_ERR(mlxsw_sp_port_vlan);
2142     goto err_port_vlan_get;
2143     }
2144    
2145     diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c
2146     index 13f72f5b18d2..09352ee43b55 100644
2147     --- a/drivers/net/ethernet/sfc/ef10.c
2148     +++ b/drivers/net/ethernet/sfc/ef10.c
2149     @@ -5726,7 +5726,7 @@ static int efx_ef10_set_mac_address(struct efx_nic *efx)
2150     * MCFW do not support VFs.
2151     */
2152     rc = efx_ef10_vport_set_mac_address(efx);
2153     - } else {
2154     + } else if (rc) {
2155     efx_mcdi_display_error(efx, MC_CMD_VADAPTOR_SET_MAC,
2156     sizeof(inbuf), NULL, 0, rc);
2157     }
2158     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
2159     index d2aea961e0f4..fb1c9e095d0c 100644
2160     --- a/drivers/net/macvlan.c
2161     +++ b/drivers/net/macvlan.c
2162     @@ -480,7 +480,7 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
2163     struct macvlan_dev, list);
2164     else
2165     vlan = macvlan_hash_lookup(port, eth->h_dest);
2166     - if (vlan == NULL)
2167     + if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE)
2168     return RX_HANDLER_PASS;
2169    
2170     dev = vlan->dev;
2171     diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
2172     index e365866600ba..bf14c51f35e1 100644
2173     --- a/drivers/net/ppp/ppp_generic.c
2174     +++ b/drivers/net/ppp/ppp_generic.c
2175     @@ -959,6 +959,7 @@ static __net_exit void ppp_exit_net(struct net *net)
2176     unregister_netdevice_many(&list);
2177     rtnl_unlock();
2178    
2179     + mutex_destroy(&pn->all_ppp_mutex);
2180     idr_destroy(&pn->units_idr);
2181     }
2182    
2183     diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
2184     index 195dafb98131..d790ea20b95d 100644
2185     --- a/drivers/net/wireless/ath/ath10k/pci.c
2186     +++ b/drivers/net/wireless/ath/ath10k/pci.c
2187     @@ -2577,9 +2577,13 @@ void ath10k_pci_hif_power_down(struct ath10k *ar)
2188     */
2189     }
2190    
2191     -#ifdef CONFIG_PM
2192     -
2193     static int ath10k_pci_hif_suspend(struct ath10k *ar)
2194     +{
2195     + /* Nothing to do; the important stuff is in the driver suspend. */
2196     + return 0;
2197     +}
2198     +
2199     +static int ath10k_pci_suspend(struct ath10k *ar)
2200     {
2201     /* The grace timer can still be counting down and ar->ps_awake be true.
2202     * It is known that the device may be asleep after resuming regardless
2203     @@ -2592,6 +2596,12 @@ static int ath10k_pci_hif_suspend(struct ath10k *ar)
2204     }
2205    
2206     static int ath10k_pci_hif_resume(struct ath10k *ar)
2207     +{
2208     + /* Nothing to do; the important stuff is in the driver resume. */
2209     + return 0;
2210     +}
2211     +
2212     +static int ath10k_pci_resume(struct ath10k *ar)
2213     {
2214     struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
2215     struct pci_dev *pdev = ar_pci->pdev;
2216     @@ -2615,7 +2625,6 @@ static int ath10k_pci_hif_resume(struct ath10k *ar)
2217    
2218     return ret;
2219     }
2220     -#endif
2221    
2222     static bool ath10k_pci_validate_cal(void *data, size_t size)
2223     {
2224     @@ -2770,10 +2779,8 @@ static const struct ath10k_hif_ops ath10k_pci_hif_ops = {
2225     .power_down = ath10k_pci_hif_power_down,
2226     .read32 = ath10k_pci_read32,
2227     .write32 = ath10k_pci_write32,
2228     -#ifdef CONFIG_PM
2229     .suspend = ath10k_pci_hif_suspend,
2230     .resume = ath10k_pci_hif_resume,
2231     -#endif
2232     .fetch_cal_eeprom = ath10k_pci_hif_fetch_cal_eeprom,
2233     };
2234    
2235     @@ -3401,11 +3408,7 @@ static __maybe_unused int ath10k_pci_pm_suspend(struct device *dev)
2236     struct ath10k *ar = dev_get_drvdata(dev);
2237     int ret;
2238    
2239     - if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT,
2240     - ar->running_fw->fw_file.fw_features))
2241     - return 0;
2242     -
2243     - ret = ath10k_hif_suspend(ar);
2244     + ret = ath10k_pci_suspend(ar);
2245     if (ret)
2246     ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
2247    
2248     @@ -3417,11 +3420,7 @@ static __maybe_unused int ath10k_pci_pm_resume(struct device *dev)
2249     struct ath10k *ar = dev_get_drvdata(dev);
2250     int ret;
2251    
2252     - if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT,
2253     - ar->running_fw->fw_file.fw_features))
2254     - return 0;
2255     -
2256     - ret = ath10k_hif_resume(ar);
2257     + ret = ath10k_pci_resume(ar);
2258     if (ret)
2259     ath10k_warn(ar, "failed to resume hif: %d\n", ret);
2260    
2261     diff --git a/drivers/net/wireless/ath/ath9k/tx99.c b/drivers/net/wireless/ath/ath9k/tx99.c
2262     index 49ed1afb913c..fe3a8263b224 100644
2263     --- a/drivers/net/wireless/ath/ath9k/tx99.c
2264     +++ b/drivers/net/wireless/ath/ath9k/tx99.c
2265     @@ -179,6 +179,9 @@ static ssize_t write_file_tx99(struct file *file, const char __user *user_buf,
2266     ssize_t len;
2267     int r;
2268    
2269     + if (count < 1)
2270     + return -EINVAL;
2271     +
2272     if (sc->cur_chan->nvifs > 1)
2273     return -EOPNOTSUPP;
2274    
2275     @@ -186,6 +189,8 @@ static ssize_t write_file_tx99(struct file *file, const char __user *user_buf,
2276     if (copy_from_user(buf, user_buf, len))
2277     return -EFAULT;
2278    
2279     + buf[len] = '\0';
2280     +
2281     if (strtobool(buf, &start))
2282     return -EINVAL;
2283    
2284     diff --git a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
2285     index 69131965a298..146e42a132e7 100644
2286     --- a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
2287     +++ b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
2288     @@ -643,11 +643,11 @@ static int qtnf_tx_queue_ready(struct qtnf_pcie_bus_priv *priv)
2289     {
2290     if (!CIRC_SPACE(priv->tx_bd_w_index, priv->tx_bd_r_index,
2291     priv->tx_bd_num)) {
2292     - pr_err_ratelimited("reclaim full Tx queue\n");
2293     qtnf_pcie_data_tx_reclaim(priv);
2294    
2295     if (!CIRC_SPACE(priv->tx_bd_w_index, priv->tx_bd_r_index,
2296     priv->tx_bd_num)) {
2297     + pr_warn_ratelimited("reclaim full Tx queue\n");
2298     priv->tx_full_count++;
2299     return 0;
2300     }
2301     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
2302     index 37f9039bb9ca..0655f45643d9 100644
2303     --- a/drivers/nvme/host/core.c
2304     +++ b/drivers/nvme/host/core.c
2305     @@ -2299,7 +2299,8 @@ static struct nvme_ns *nvme_find_get_ns(struct nvme_ctrl *ctrl, unsigned nsid)
2306     mutex_lock(&ctrl->namespaces_mutex);
2307     list_for_each_entry(ns, &ctrl->namespaces, list) {
2308     if (ns->ns_id == nsid) {
2309     - kref_get(&ns->kref);
2310     + if (!kref_get_unless_zero(&ns->kref))
2311     + continue;
2312     ret = ns;
2313     break;
2314     }
2315     diff --git a/drivers/pci/pcie/pme.c b/drivers/pci/pcie/pme.c
2316     index fafdb165dd2e..df290aa58dce 100644
2317     --- a/drivers/pci/pcie/pme.c
2318     +++ b/drivers/pci/pcie/pme.c
2319     @@ -226,6 +226,9 @@ static void pcie_pme_work_fn(struct work_struct *work)
2320     break;
2321    
2322     pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
2323     + if (rtsta == (u32) ~0)
2324     + break;
2325     +
2326     if (rtsta & PCI_EXP_RTSTA_PME) {
2327     /*
2328     * Clear PME status of the port. If there are other
2329     @@ -273,7 +276,7 @@ static irqreturn_t pcie_pme_irq(int irq, void *context)
2330     spin_lock_irqsave(&data->lock, flags);
2331     pcie_capability_read_dword(port, PCI_EXP_RTSTA, &rtsta);
2332    
2333     - if (!(rtsta & PCI_EXP_RTSTA_PME)) {
2334     + if (rtsta == (u32) ~0 || !(rtsta & PCI_EXP_RTSTA_PME)) {
2335     spin_unlock_irqrestore(&data->lock, flags);
2336     return IRQ_NONE;
2337     }
2338     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
2339     index ff94b69738a8..f285cd74088e 100644
2340     --- a/drivers/pci/probe.c
2341     +++ b/drivers/pci/probe.c
2342     @@ -1076,7 +1076,8 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
2343     child = pci_add_new_bus(bus, dev, max+1);
2344     if (!child)
2345     goto out;
2346     - pci_bus_insert_busn_res(child, max+1, 0xff);
2347     + pci_bus_insert_busn_res(child, max+1,
2348     + bus->busn_res.end);
2349     }
2350     max++;
2351     buses = (buses & 0xff000000)
2352     @@ -2433,6 +2434,10 @@ unsigned int pci_scan_child_bus(struct pci_bus *bus)
2353     if (bus->self && bus->self->is_hotplug_bridge && pci_hotplug_bus_size) {
2354     if (max - bus->busn_res.start < pci_hotplug_bus_size - 1)
2355     max = bus->busn_res.start + pci_hotplug_bus_size - 1;
2356     +
2357     + /* Do not allocate more buses than we have room left */
2358     + if (max > bus->busn_res.end)
2359     + max = bus->busn_res.end;
2360     }
2361    
2362     /*
2363     diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
2364     index 73a03d382590..2fa0dbde36b7 100644
2365     --- a/drivers/pci/remove.c
2366     +++ b/drivers/pci/remove.c
2367     @@ -19,9 +19,9 @@ static void pci_stop_dev(struct pci_dev *dev)
2368     pci_pme_active(dev, false);
2369    
2370     if (dev->is_added) {
2371     + device_release_driver(&dev->dev);
2372     pci_proc_detach_device(dev);
2373     pci_remove_sysfs_dev_files(dev);
2374     - device_release_driver(&dev->dev);
2375     dev->is_added = 0;
2376     }
2377    
2378     diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
2379     index 82cd8b08d71f..a73c794bed03 100644
2380     --- a/drivers/pinctrl/Kconfig
2381     +++ b/drivers/pinctrl/Kconfig
2382     @@ -33,7 +33,8 @@ config DEBUG_PINCTRL
2383    
2384     config PINCTRL_ADI2
2385     bool "ADI pin controller driver"
2386     - depends on BLACKFIN
2387     + depends on (BF54x || BF60x)
2388     + depends on !GPIO_ADI
2389     select PINMUX
2390     select IRQ_DOMAIN
2391     help
2392     diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c
2393     index 493d8910a74e..7b12abe86b94 100644
2394     --- a/drivers/platform/x86/hp_accel.c
2395     +++ b/drivers/platform/x86/hp_accel.c
2396     @@ -240,6 +240,7 @@ static const struct dmi_system_id lis3lv02d_dmi_ids[] = {
2397     AXIS_DMI_MATCH("HDX18", "HP HDX 18", x_inverted),
2398     AXIS_DMI_MATCH("HPB432x", "HP ProBook 432", xy_rotated_left),
2399     AXIS_DMI_MATCH("HPB440G3", "HP ProBook 440 G3", x_inverted_usd),
2400     + AXIS_DMI_MATCH("HPB440G4", "HP ProBook 440 G4", x_inverted),
2401     AXIS_DMI_MATCH("HPB442x", "HP ProBook 442", xy_rotated_left),
2402     AXIS_DMI_MATCH("HPB452x", "HP ProBook 452", y_inverted),
2403     AXIS_DMI_MATCH("HPB522x", "HP ProBook 522", xy_swap),
2404     diff --git a/drivers/platform/x86/intel_punit_ipc.c b/drivers/platform/x86/intel_punit_ipc.c
2405     index a47a41fc10ad..b5b890127479 100644
2406     --- a/drivers/platform/x86/intel_punit_ipc.c
2407     +++ b/drivers/platform/x86/intel_punit_ipc.c
2408     @@ -252,28 +252,28 @@ static int intel_punit_get_bars(struct platform_device *pdev)
2409     * - GTDRIVER_IPC BASE_IFACE
2410     */
2411     res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
2412     - if (res) {
2413     + if (res && resource_size(res) > 1) {
2414     addr = devm_ioremap_resource(&pdev->dev, res);
2415     if (!IS_ERR(addr))
2416     punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr;
2417     }
2418    
2419     res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
2420     - if (res) {
2421     + if (res && resource_size(res) > 1) {
2422     addr = devm_ioremap_resource(&pdev->dev, res);
2423     if (!IS_ERR(addr))
2424     punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr;
2425     }
2426    
2427     res = platform_get_resource(pdev, IORESOURCE_MEM, 4);
2428     - if (res) {
2429     + if (res && resource_size(res) > 1) {
2430     addr = devm_ioremap_resource(&pdev->dev, res);
2431     if (!IS_ERR(addr))
2432     punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr;
2433     }
2434    
2435     res = platform_get_resource(pdev, IORESOURCE_MEM, 5);
2436     - if (res) {
2437     + if (res && resource_size(res) > 1) {
2438     addr = devm_ioremap_resource(&pdev->dev, res);
2439     if (!IS_ERR(addr))
2440     punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr;
2441     diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c
2442     index e3242a0925a6..e8e12c2b1d0e 100644
2443     --- a/drivers/rpmsg/qcom_glink_native.c
2444     +++ b/drivers/rpmsg/qcom_glink_native.c
2445     @@ -227,6 +227,7 @@ static struct glink_channel *qcom_glink_alloc_channel(struct qcom_glink *glink,
2446    
2447     init_completion(&channel->open_req);
2448     init_completion(&channel->open_ack);
2449     + init_completion(&channel->intent_req_comp);
2450    
2451     INIT_LIST_HEAD(&channel->done_intents);
2452     INIT_WORK(&channel->intent_work, qcom_glink_rx_done_work);
2453     diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
2454     index cea6ea4df970..8c836c51a508 100644
2455     --- a/drivers/rtc/rtc-pcf8563.c
2456     +++ b/drivers/rtc/rtc-pcf8563.c
2457     @@ -422,7 +422,7 @@ static unsigned long pcf8563_clkout_recalc_rate(struct clk_hw *hw,
2458     return 0;
2459    
2460     buf &= PCF8563_REG_CLKO_F_MASK;
2461     - return clkout_rates[ret];
2462     + return clkout_rates[buf];
2463     }
2464    
2465     static long pcf8563_clkout_round_rate(struct clk_hw *hw, unsigned long rate,
2466     diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
2467     index dfe8e70f8d99..525a652dab48 100644
2468     --- a/drivers/scsi/aacraid/commsup.c
2469     +++ b/drivers/scsi/aacraid/commsup.c
2470     @@ -2383,19 +2383,19 @@ static int aac_send_wellness_command(struct aac_dev *dev, char *wellness_str,
2471     goto out;
2472     }
2473    
2474     -int aac_send_safw_hostttime(struct aac_dev *dev, struct timeval *now)
2475     +int aac_send_safw_hostttime(struct aac_dev *dev, struct timespec64 *now)
2476     {
2477     struct tm cur_tm;
2478     char wellness_str[] = "<HW>TD\010\0\0\0\0\0\0\0\0\0DW\0\0ZZ";
2479     u32 datasize = sizeof(wellness_str);
2480     - unsigned long local_time;
2481     + time64_t local_time;
2482     int ret = -ENODEV;
2483    
2484     if (!dev->sa_firmware)
2485     goto out;
2486    
2487     - local_time = (u32)(now->tv_sec - (sys_tz.tz_minuteswest * 60));
2488     - time_to_tm(local_time, 0, &cur_tm);
2489     + local_time = (now->tv_sec - (sys_tz.tz_minuteswest * 60));
2490     + time64_to_tm(local_time, 0, &cur_tm);
2491     cur_tm.tm_mon += 1;
2492     cur_tm.tm_year += 1900;
2493     wellness_str[8] = bin2bcd(cur_tm.tm_hour);
2494     @@ -2412,7 +2412,7 @@ int aac_send_safw_hostttime(struct aac_dev *dev, struct timeval *now)
2495     return ret;
2496     }
2497    
2498     -int aac_send_hosttime(struct aac_dev *dev, struct timeval *now)
2499     +int aac_send_hosttime(struct aac_dev *dev, struct timespec64 *now)
2500     {
2501     int ret = -ENOMEM;
2502     struct fib *fibptr;
2503     @@ -2424,7 +2424,7 @@ int aac_send_hosttime(struct aac_dev *dev, struct timeval *now)
2504    
2505     aac_fib_init(fibptr);
2506     info = (__le32 *)fib_data(fibptr);
2507     - *info = cpu_to_le32(now->tv_sec);
2508     + *info = cpu_to_le32(now->tv_sec); /* overflow in y2106 */
2509     ret = aac_fib_send(SendHostTime, fibptr, sizeof(*info), FsaNormal,
2510     1, 1, NULL, NULL);
2511    
2512     @@ -2496,7 +2496,7 @@ int aac_command_thread(void *data)
2513     }
2514     if (!time_before(next_check_jiffies,next_jiffies)
2515     && ((difference = next_jiffies - jiffies) <= 0)) {
2516     - struct timeval now;
2517     + struct timespec64 now;
2518     int ret;
2519    
2520     /* Don't even try to talk to adapter if its sick */
2521     @@ -2506,15 +2506,15 @@ int aac_command_thread(void *data)
2522     next_check_jiffies = jiffies
2523     + ((long)(unsigned)check_interval)
2524     * HZ;
2525     - do_gettimeofday(&now);
2526     + ktime_get_real_ts64(&now);
2527    
2528     /* Synchronize our watches */
2529     - if (((1000000 - (1000000 / HZ)) > now.tv_usec)
2530     - && (now.tv_usec > (1000000 / HZ)))
2531     - difference = (((1000000 - now.tv_usec) * HZ)
2532     - + 500000) / 1000000;
2533     + if (((NSEC_PER_SEC - (NSEC_PER_SEC / HZ)) > now.tv_nsec)
2534     + && (now.tv_nsec > (NSEC_PER_SEC / HZ)))
2535     + difference = (((NSEC_PER_SEC - now.tv_nsec) * HZ)
2536     + + NSEC_PER_SEC / 2) / NSEC_PER_SEC;
2537     else {
2538     - if (now.tv_usec > 500000)
2539     + if (now.tv_nsec > NSEC_PER_SEC / 2)
2540     ++now.tv_sec;
2541    
2542     if (dev->sa_firmware)
2543     diff --git a/drivers/scsi/bfa/bfad_debugfs.c b/drivers/scsi/bfa/bfad_debugfs.c
2544     index 8dcd8c70c7ee..05f523971348 100644
2545     --- a/drivers/scsi/bfa/bfad_debugfs.c
2546     +++ b/drivers/scsi/bfa/bfad_debugfs.c
2547     @@ -255,7 +255,8 @@ bfad_debugfs_write_regrd(struct file *file, const char __user *buf,
2548     struct bfad_s *bfad = port->bfad;
2549     struct bfa_s *bfa = &bfad->bfa;
2550     struct bfa_ioc_s *ioc = &bfa->ioc;
2551     - int addr, len, rc, i;
2552     + int addr, rc, i;
2553     + u32 len;
2554     u32 *regbuf;
2555     void __iomem *rb, *reg_addr;
2556     unsigned long flags;
2557     @@ -266,7 +267,7 @@ bfad_debugfs_write_regrd(struct file *file, const char __user *buf,
2558     return PTR_ERR(kern_buf);
2559    
2560     rc = sscanf(kern_buf, "%x:%x", &addr, &len);
2561     - if (rc < 2) {
2562     + if (rc < 2 || len > (UINT_MAX >> 2)) {
2563     printk(KERN_INFO
2564     "bfad[%d]: %s failed to read user buf\n",
2565     bfad->inst_no, __func__);
2566     diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
2567     index 16664f2e15fb..8fa9bb336ad4 100644
2568     --- a/drivers/scsi/hisi_sas/hisi_sas_main.c
2569     +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
2570     @@ -185,13 +185,16 @@ void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba, struct sas_task *task,
2571     struct domain_device *device = task->dev;
2572     struct hisi_sas_device *sas_dev = device->lldd_dev;
2573    
2574     + if (!task->lldd_task)
2575     + return;
2576     +
2577     + task->lldd_task = NULL;
2578     +
2579     if (!sas_protocol_ata(task->task_proto))
2580     if (slot->n_elem)
2581     dma_unmap_sg(dev, task->scatter, slot->n_elem,
2582     task->data_dir);
2583    
2584     - task->lldd_task = NULL;
2585     -
2586     if (sas_dev)
2587     atomic64_dec(&sas_dev->running_req);
2588     }
2589     @@ -199,8 +202,8 @@ void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba, struct sas_task *task,
2590     if (slot->buf)
2591     dma_pool_free(hisi_hba->buffer_pool, slot->buf, slot->buf_dma);
2592    
2593     -
2594     list_del_init(&slot->entry);
2595     + slot->buf = NULL;
2596     slot->task = NULL;
2597     slot->port = NULL;
2598     hisi_sas_slot_index_free(hisi_hba, slot->idx);
2599     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
2600     index 4ed3d26ffdde..5fbaf13781b6 100644
2601     --- a/drivers/scsi/hpsa.c
2602     +++ b/drivers/scsi/hpsa.c
2603     @@ -8684,6 +8684,8 @@ static void hpsa_remove_one(struct pci_dev *pdev)
2604     destroy_workqueue(h->rescan_ctlr_wq);
2605     destroy_workqueue(h->resubmit_wq);
2606    
2607     + hpsa_delete_sas_host(h);
2608     +
2609     /*
2610     * Call before disabling interrupts.
2611     * scsi_remove_host can trigger I/O operations especially
2612     @@ -8718,8 +8720,6 @@ static void hpsa_remove_one(struct pci_dev *pdev)
2613     h->lockup_detected = NULL; /* init_one 2 */
2614     /* (void) pci_disable_pcie_error_reporting(pdev); */ /* init_one 1 */
2615    
2616     - hpsa_delete_sas_host(h);
2617     -
2618     kfree(h); /* init_one 1 */
2619     }
2620    
2621     @@ -9207,9 +9207,9 @@ static void hpsa_free_sas_phy(struct hpsa_sas_phy *hpsa_sas_phy)
2622     struct sas_phy *phy = hpsa_sas_phy->phy;
2623    
2624     sas_port_delete_phy(hpsa_sas_phy->parent_port->port, phy);
2625     - sas_phy_free(phy);
2626     if (hpsa_sas_phy->added_to_port)
2627     list_del(&hpsa_sas_phy->phy_list_entry);
2628     + sas_phy_delete(phy);
2629     kfree(hpsa_sas_phy);
2630     }
2631    
2632     diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
2633     index 6b4fd2375178..324d8d8c62de 100644
2634     --- a/drivers/scsi/libsas/sas_expander.c
2635     +++ b/drivers/scsi/libsas/sas_expander.c
2636     @@ -2145,7 +2145,7 @@ void sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
2637     struct sas_rphy *rphy)
2638     {
2639     struct domain_device *dev;
2640     - unsigned int reslen = 0;
2641     + unsigned int rcvlen = 0;
2642     int ret = -EINVAL;
2643    
2644     /* no rphy means no smp target support (ie aic94xx host) */
2645     @@ -2179,12 +2179,12 @@ void sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
2646    
2647     ret = smp_execute_task_sg(dev, job->request_payload.sg_list,
2648     job->reply_payload.sg_list);
2649     - if (ret > 0) {
2650     - /* positive number is the untransferred residual */
2651     - reslen = ret;
2652     + if (ret >= 0) {
2653     + /* bsg_job_done() requires the length received */
2654     + rcvlen = job->reply_payload.payload_len - ret;
2655     ret = 0;
2656     }
2657    
2658     out:
2659     - bsg_job_done(job, ret, reslen);
2660     + bsg_job_done(job, ret, rcvlen);
2661     }
2662     diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
2663     index 09ba494f8896..92bc5b2d24ae 100644
2664     --- a/drivers/scsi/scsi_debug.c
2665     +++ b/drivers/scsi/scsi_debug.c
2666     @@ -3001,11 +3001,11 @@ static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
2667     if (-1 == ret) {
2668     write_unlock_irqrestore(&atomic_rw, iflags);
2669     return DID_ERROR << 16;
2670     - } else if (sdebug_verbose && (ret < (num * sdebug_sector_size)))
2671     + } else if (sdebug_verbose && !ndob && (ret < sdebug_sector_size))
2672     sdev_printk(KERN_INFO, scp->device,
2673     - "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
2674     + "%s: %s: lb size=%u, IO sent=%d bytes\n",
2675     my_name, "write same",
2676     - num * sdebug_sector_size, ret);
2677     + sdebug_sector_size, ret);
2678    
2679     /* Copy first sector to remaining blocks */
2680     for (i = 1 ; i < num ; i++)
2681     diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c
2682     index 01f08c03f2c1..c3765d29fd3f 100644
2683     --- a/drivers/scsi/scsi_debugfs.c
2684     +++ b/drivers/scsi/scsi_debugfs.c
2685     @@ -8,9 +8,11 @@ void scsi_show_rq(struct seq_file *m, struct request *rq)
2686     {
2687     struct scsi_cmnd *cmd = container_of(scsi_req(rq), typeof(*cmd), req);
2688     int msecs = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc);
2689     - char buf[80];
2690     + const u8 *const cdb = READ_ONCE(cmd->cmnd);
2691     + char buf[80] = "(?)";
2692    
2693     - __scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len);
2694     + if (cdb)
2695     + __scsi_format_command(buf, sizeof(buf), cdb, cmd->cmd_len);
2696     seq_printf(m, ", .cmd=%s, .retries=%d, allocated %d.%03d s ago", buf,
2697     cmd->retries, msecs / 1000, msecs % 1000);
2698     }
2699     diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
2700     index 6bf43d94cdc0..b19b00adacb2 100644
2701     --- a/drivers/scsi/scsi_devinfo.c
2702     +++ b/drivers/scsi/scsi_devinfo.c
2703     @@ -161,7 +161,7 @@ static struct {
2704     {"DGC", "RAID", NULL, BLIST_SPARSELUN}, /* Dell PV 650F, storage on LUN 0 */
2705     {"DGC", "DISK", NULL, BLIST_SPARSELUN}, /* Dell PV 650F, no storage on LUN 0 */
2706     {"EMC", "Invista", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
2707     - {"EMC", "SYMMETRIX", NULL, BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_FORCELUN},
2708     + {"EMC", "SYMMETRIX", NULL, BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_REPORTLUN2},
2709     {"EMULEX", "MD21/S2 ESDI", NULL, BLIST_SINGLELUN},
2710     {"easyRAID", "16P", NULL, BLIST_NOREPORTLUN},
2711     {"easyRAID", "X6P", NULL, BLIST_NOREPORTLUN},
2712     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2713     index d175c5c5ccf8..72db0f7d221a 100644
2714     --- a/drivers/scsi/sd.c
2715     +++ b/drivers/scsi/sd.c
2716     @@ -231,11 +231,15 @@ manage_start_stop_store(struct device *dev, struct device_attribute *attr,
2717     {
2718     struct scsi_disk *sdkp = to_scsi_disk(dev);
2719     struct scsi_device *sdp = sdkp->device;
2720     + bool v;
2721    
2722     if (!capable(CAP_SYS_ADMIN))
2723     return -EACCES;
2724    
2725     - sdp->manage_start_stop = simple_strtoul(buf, NULL, 10);
2726     + if (kstrtobool(buf, &v))
2727     + return -EINVAL;
2728     +
2729     + sdp->manage_start_stop = v;
2730    
2731     return count;
2732     }
2733     @@ -253,6 +257,7 @@ static ssize_t
2734     allow_restart_store(struct device *dev, struct device_attribute *attr,
2735     const char *buf, size_t count)
2736     {
2737     + bool v;
2738     struct scsi_disk *sdkp = to_scsi_disk(dev);
2739     struct scsi_device *sdp = sdkp->device;
2740    
2741     @@ -262,7 +267,10 @@ allow_restart_store(struct device *dev, struct device_attribute *attr,
2742     if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
2743     return -EINVAL;
2744    
2745     - sdp->allow_restart = simple_strtoul(buf, NULL, 10);
2746     + if (kstrtobool(buf, &v))
2747     + return -EINVAL;
2748     +
2749     + sdp->allow_restart = v;
2750    
2751     return count;
2752     }
2753     @@ -1284,6 +1292,7 @@ static int sd_init_command(struct scsi_cmnd *cmd)
2754     static void sd_uninit_command(struct scsi_cmnd *SCpnt)
2755     {
2756     struct request *rq = SCpnt->request;
2757     + u8 *cmnd;
2758    
2759     if (SCpnt->flags & SCMD_ZONE_WRITE_LOCK)
2760     sd_zbc_write_unlock_zone(SCpnt);
2761     @@ -1292,9 +1301,10 @@ static void sd_uninit_command(struct scsi_cmnd *SCpnt)
2762     __free_page(rq->special_vec.bv_page);
2763    
2764     if (SCpnt->cmnd != scsi_req(rq)->cmd) {
2765     - mempool_free(SCpnt->cmnd, sd_cdb_pool);
2766     + cmnd = SCpnt->cmnd;
2767     SCpnt->cmnd = NULL;
2768     SCpnt->cmd_len = 0;
2769     + mempool_free(cmnd, sd_cdb_pool);
2770     }
2771     }
2772    
2773     diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/mtk-pmic-wrap.c
2774     index c2048382830f..e3df1e96b141 100644
2775     --- a/drivers/soc/mediatek/mtk-pmic-wrap.c
2776     +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c
2777     @@ -522,7 +522,7 @@ struct pmic_wrapper_type {
2778     u32 int_en_all;
2779     u32 spi_w;
2780     u32 wdt_src;
2781     - int has_bridge:1;
2782     + unsigned int has_bridge:1;
2783     int (*init_reg_clock)(struct pmic_wrapper *wrp);
2784     int (*init_soc_specific)(struct pmic_wrapper *wrp);
2785     };
2786     diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c b/drivers/staging/rtl8188eu/core/rtw_ap.c
2787     index 32a483769975..fa611455109a 100644
2788     --- a/drivers/staging/rtl8188eu/core/rtw_ap.c
2789     +++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
2790     @@ -754,7 +754,7 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf)
2791     }
2792    
2793     /* setting only at first time */
2794     - if (!(pmlmepriv->cur_network.join_res)) {
2795     + if (pmlmepriv->cur_network.join_res != true) {
2796     /* WEP Key will be set before this function, do not
2797     * clear CAM.
2798     */
2799     diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c b/drivers/staging/rtl8188eu/core/rtw_cmd.c
2800     index 9461bce883ea..be8542676adf 100644
2801     --- a/drivers/staging/rtl8188eu/core/rtw_cmd.c
2802     +++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c
2803     @@ -333,7 +333,7 @@ u8 rtw_createbss_cmd(struct adapter *padapter)
2804     else
2805     RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, (" createbss for SSid:%s\n", pmlmepriv->assoc_ssid.Ssid));
2806    
2807     - pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
2808     + pcmd = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
2809     if (!pcmd) {
2810     res = _FAIL;
2811     goto exit;
2812     @@ -508,7 +508,7 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueu
2813    
2814     if (enqueue) {
2815     /* need enqueue, prepare cmd_obj and enqueue */
2816     - cmdobj = kzalloc(sizeof(*cmdobj), GFP_KERNEL);
2817     + cmdobj = kzalloc(sizeof(*cmdobj), GFP_ATOMIC);
2818     if (!cmdobj) {
2819     res = _FAIL;
2820     kfree(param);
2821     diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
2822     index 9fcf2e223f71..1123b4f1e1d6 100644
2823     --- a/drivers/staging/vt6655/device_main.c
2824     +++ b/drivers/staging/vt6655/device_main.c
2825     @@ -1693,10 +1693,11 @@ static int vt6655_suspend(struct pci_dev *pcid, pm_message_t state)
2826     MACbShutdown(priv);
2827    
2828     pci_disable_device(pcid);
2829     - pci_set_power_state(pcid, pci_choose_state(pcid, state));
2830    
2831     spin_unlock_irqrestore(&priv->lock, flags);
2832    
2833     + pci_set_power_state(pcid, pci_choose_state(pcid, state));
2834     +
2835     return 0;
2836     }
2837    
2838     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2839     index d9ba4ee2c62b..52fa52c20be0 100644
2840     --- a/drivers/target/iscsi/iscsi_target.c
2841     +++ b/drivers/target/iscsi/iscsi_target.c
2842     @@ -834,6 +834,7 @@ static int iscsit_add_reject_from_cmd(
2843     unsigned char *buf)
2844     {
2845     struct iscsi_conn *conn;
2846     + const bool do_put = cmd->se_cmd.se_tfo != NULL;
2847    
2848     if (!cmd->conn) {
2849     pr_err("cmd->conn is NULL for ITT: 0x%08x\n",
2850     @@ -864,7 +865,7 @@ static int iscsit_add_reject_from_cmd(
2851     * Perform the kref_put now if se_cmd has already been setup by
2852     * scsit_setup_scsi_cmd()
2853     */
2854     - if (cmd->se_cmd.se_tfo != NULL) {
2855     + if (do_put) {
2856     pr_debug("iscsi reject: calling target_put_sess_cmd >>>>>>\n");
2857     target_put_sess_cmd(&cmd->se_cmd);
2858     }
2859     diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
2860     index 0dd4c45f7575..0ebc4818e132 100644
2861     --- a/drivers/target/iscsi/iscsi_target_configfs.c
2862     +++ b/drivers/target/iscsi/iscsi_target_configfs.c
2863     @@ -1123,7 +1123,7 @@ static struct se_portal_group *lio_target_tiqn_addtpg(
2864    
2865     ret = core_tpg_register(wwn, &tpg->tpg_se_tpg, SCSI_PROTOCOL_ISCSI);
2866     if (ret < 0)
2867     - return NULL;
2868     + goto free_out;
2869    
2870     ret = iscsit_tpg_add_portal_group(tiqn, tpg);
2871     if (ret != 0)
2872     @@ -1135,6 +1135,7 @@ static struct se_portal_group *lio_target_tiqn_addtpg(
2873     return &tpg->tpg_se_tpg;
2874     out:
2875     core_tpg_deregister(&tpg->tpg_se_tpg);
2876     +free_out:
2877     kfree(tpg);
2878     return NULL;
2879     }
2880     diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
2881     index 1e36f83b5961..70c6b9bfc04e 100644
2882     --- a/drivers/target/iscsi/iscsi_target_util.c
2883     +++ b/drivers/target/iscsi/iscsi_target_util.c
2884     @@ -694,6 +694,8 @@ void iscsit_release_cmd(struct iscsi_cmd *cmd)
2885     struct iscsi_session *sess;
2886     struct se_cmd *se_cmd = &cmd->se_cmd;
2887    
2888     + WARN_ON(!list_empty(&cmd->i_conn_node));
2889     +
2890     if (cmd->conn)
2891     sess = cmd->conn->sess;
2892     else
2893     @@ -716,6 +718,8 @@ void __iscsit_free_cmd(struct iscsi_cmd *cmd, bool check_queues)
2894     {
2895     struct iscsi_conn *conn = cmd->conn;
2896    
2897     + WARN_ON(!list_empty(&cmd->i_conn_node));
2898     +
2899     if (cmd->data_direction == DMA_TO_DEVICE) {
2900     iscsit_stop_dataout_timer(cmd);
2901     iscsit_free_r2ts_from_list(cmd);
2902     diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
2903     index c629817a8854..9b2c0c773022 100644
2904     --- a/drivers/target/target_core_file.c
2905     +++ b/drivers/target/target_core_file.c
2906     @@ -482,6 +482,10 @@ fd_execute_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
2907     struct inode *inode = file->f_mapping->host;
2908     int ret;
2909    
2910     + if (!nolb) {
2911     + return 0;
2912     + }
2913     +
2914     if (cmd->se_dev->dev_attrib.pi_prot_type) {
2915     ret = fd_do_prot_unmap(cmd, lba, nolb);
2916     if (ret)
2917     diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
2918     index 9f25c9c6f67d..4ba5004a069e 100644
2919     --- a/drivers/target/target_core_pr.c
2920     +++ b/drivers/target/target_core_pr.c
2921     @@ -58,8 +58,10 @@ void core_pr_dump_initiator_port(
2922     char *buf,
2923     u32 size)
2924     {
2925     - if (!pr_reg->isid_present_at_reg)
2926     + if (!pr_reg->isid_present_at_reg) {
2927     buf[0] = '\0';
2928     + return;
2929     + }
2930    
2931     snprintf(buf, size, ",i,0x%s", pr_reg->pr_reg_isid);
2932     }
2933     diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c
2934     index be95826631b7..ee047ca43084 100644
2935     --- a/drivers/thermal/step_wise.c
2936     +++ b/drivers/thermal/step_wise.c
2937     @@ -31,8 +31,7 @@
2938     * If the temperature is higher than a trip point,
2939     * a. if the trend is THERMAL_TREND_RAISING, use higher cooling
2940     * state for this trip point
2941     - * b. if the trend is THERMAL_TREND_DROPPING, use lower cooling
2942     - * state for this trip point
2943     + * b. if the trend is THERMAL_TREND_DROPPING, do nothing
2944     * c. if the trend is THERMAL_TREND_RAISE_FULL, use upper limit
2945     * for this trip point
2946     * d. if the trend is THERMAL_TREND_DROP_FULL, use lower limit
2947     @@ -94,9 +93,11 @@ static unsigned long get_target_state(struct thermal_instance *instance,
2948     if (!throttle)
2949     next_target = THERMAL_NO_TARGET;
2950     } else {
2951     - next_target = cur_state - 1;
2952     - if (next_target > instance->upper)
2953     - next_target = instance->upper;
2954     + if (!throttle) {
2955     + next_target = cur_state - 1;
2956     + if (next_target > instance->upper)
2957     + next_target = instance->upper;
2958     + }
2959     }
2960     break;
2961     case THERMAL_TREND_DROP_FULL:
2962     diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
2963     index d674e06767a5..1424581fd9af 100644
2964     --- a/drivers/thunderbolt/tb.c
2965     +++ b/drivers/thunderbolt/tb.c
2966     @@ -225,6 +225,7 @@ static void tb_activate_pcie_devices(struct tb *tb)
2967     tb_port_info(up_port,
2968     "PCIe tunnel activation failed, aborting\n");
2969     tb_pci_free(tunnel);
2970     + continue;
2971     }
2972    
2973     list_add(&tunnel->list, &tcm->tunnel_list);
2974     diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
2975     index 7f785d77ba7f..69fc6d9ab490 100644
2976     --- a/drivers/tty/serdev/serdev-ttyport.c
2977     +++ b/drivers/tty/serdev/serdev-ttyport.c
2978     @@ -120,10 +120,10 @@ static int ttyport_open(struct serdev_controller *ctrl)
2979     return PTR_ERR(tty);
2980     serport->tty = tty;
2981    
2982     - if (tty->ops->open)
2983     - tty->ops->open(serport->tty, NULL);
2984     - else
2985     - tty_port_open(serport->port, tty, NULL);
2986     + if (!tty->ops->open)
2987     + goto err_unlock;
2988     +
2989     + tty->ops->open(serport->tty, NULL);
2990    
2991     /* Bring the UART into a known 8 bits no parity hw fc state */
2992     ktermios = tty->termios;
2993     @@ -140,6 +140,12 @@ static int ttyport_open(struct serdev_controller *ctrl)
2994    
2995     tty_unlock(serport->tty);
2996     return 0;
2997     +
2998     +err_unlock:
2999     + tty_unlock(tty);
3000     + tty_release_struct(tty, serport->tty_idx);
3001     +
3002     + return -ENODEV;
3003     }
3004    
3005     static void ttyport_close(struct serdev_controller *ctrl)
3006     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
3007     index c42a3e63eb07..843ef46d2537 100644
3008     --- a/drivers/usb/core/config.c
3009     +++ b/drivers/usb/core/config.c
3010     @@ -555,6 +555,9 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx,
3011     unsigned iad_num = 0;
3012    
3013     memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE);
3014     + nintf = nintf_orig = config->desc.bNumInterfaces;
3015     + config->desc.bNumInterfaces = 0; // Adjusted later
3016     +
3017     if (config->desc.bDescriptorType != USB_DT_CONFIG ||
3018     config->desc.bLength < USB_DT_CONFIG_SIZE ||
3019     config->desc.bLength > size) {
3020     @@ -568,7 +571,6 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx,
3021     buffer += config->desc.bLength;
3022     size -= config->desc.bLength;
3023    
3024     - nintf = nintf_orig = config->desc.bNumInterfaces;
3025     if (nintf > USB_MAXINTERFACES) {
3026     dev_warn(ddev, "config %d has too many interfaces: %d, "
3027     "using maximum allowed: %d\n",
3028     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
3029     index 97f30eb7dac0..ccdc971283d0 100644
3030     --- a/drivers/usb/host/xhci-mem.c
3031     +++ b/drivers/usb/host/xhci-mem.c
3032     @@ -983,10 +983,9 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
3033     return 0;
3034     }
3035    
3036     - xhci->devs[slot_id] = kzalloc(sizeof(*xhci->devs[slot_id]), flags);
3037     - if (!xhci->devs[slot_id])
3038     + dev = kzalloc(sizeof(*dev), flags);
3039     + if (!dev)
3040     return 0;
3041     - dev = xhci->devs[slot_id];
3042    
3043     /* Allocate the (output) device context that will be used in the HC. */
3044     dev->out_ctx = xhci_alloc_container_ctx(xhci, XHCI_CTX_TYPE_DEVICE, flags);
3045     @@ -1027,9 +1026,17 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
3046    
3047     trace_xhci_alloc_virt_device(dev);
3048    
3049     + xhci->devs[slot_id] = dev;
3050     +
3051     return 1;
3052     fail:
3053     - xhci_free_virt_device(xhci, slot_id);
3054     +
3055     + if (dev->in_ctx)
3056     + xhci_free_container_ctx(xhci, dev->in_ctx);
3057     + if (dev->out_ctx)
3058     + xhci_free_container_ctx(xhci, dev->out_ctx);
3059     + kfree(dev);
3060     +
3061     return 0;
3062     }
3063    
3064     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
3065     index 353520005c13..6996235e34a9 100644
3066     --- a/drivers/usb/host/xhci-ring.c
3067     +++ b/drivers/usb/host/xhci-ring.c
3068     @@ -3121,7 +3121,7 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred,
3069     {
3070     u32 maxp, total_packet_count;
3071    
3072     - /* MTK xHCI is mostly 0.97 but contains some features from 1.0 */
3073     + /* MTK xHCI 0.96 contains some features from 1.0 */
3074     if (xhci->hci_version < 0x100 && !(xhci->quirks & XHCI_MTK_HOST))
3075     return ((td_total_len - transferred) >> 10);
3076    
3077     @@ -3130,8 +3130,8 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred,
3078     trb_buff_len == td_total_len)
3079     return 0;
3080    
3081     - /* for MTK xHCI, TD size doesn't include this TRB */
3082     - if (xhci->quirks & XHCI_MTK_HOST)
3083     + /* for MTK xHCI 0.96, TD size include this TRB, but not in 1.x */
3084     + if ((xhci->quirks & XHCI_MTK_HOST) && (xhci->hci_version < 0x100))
3085     trb_buff_len = 0;
3086    
3087     maxp = usb_endpoint_maxp(&urb->ep->desc);
3088     diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
3089     index df88123274ca..972bf4210189 100644
3090     --- a/drivers/usb/musb/da8xx.c
3091     +++ b/drivers/usb/musb/da8xx.c
3092     @@ -305,7 +305,15 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci)
3093     musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
3094     portstate(musb->port1_status |= USB_PORT_STAT_POWER);
3095     del_timer(&otg_workaround);
3096     - } else {
3097     + } else if (!(musb->int_usb & MUSB_INTR_BABBLE)){
3098     + /*
3099     + * When babble condition happens, drvvbus interrupt
3100     + * is also generated. Ignore this drvvbus interrupt
3101     + * and let babble interrupt handler recovers the
3102     + * controller; otherwise, the host-mode flag is lost
3103     + * due to the MUSB_DEV_MODE() call below and babble
3104     + * recovery logic will not called.
3105     + */
3106     musb->is_active = 0;
3107     MUSB_DEV_MODE(musb);
3108     otg->default_a = 0;
3109     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
3110     index eb06d88b41d6..9af39644561f 100644
3111     --- a/drivers/usb/storage/unusual_devs.h
3112     +++ b/drivers/usb/storage/unusual_devs.h
3113     @@ -2113,6 +2113,13 @@ UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116,
3114     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3115     US_FL_BROKEN_FUA ),
3116    
3117     +/* Reported by David Kozub <zub@linux.fjfi.cvut.cz> */
3118     +UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999,
3119     + "JMicron",
3120     + "JMS567",
3121     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3122     + US_FL_BROKEN_FUA),
3123     +
3124     /*
3125     * Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
3126     * JMicron responds to USN and several other SCSI ioctls with a
3127     diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
3128     index cde115359793..9f356f7cf7d5 100644
3129     --- a/drivers/usb/storage/unusual_uas.h
3130     +++ b/drivers/usb/storage/unusual_uas.h
3131     @@ -142,6 +142,13 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999,
3132     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3133     US_FL_BROKEN_FUA | US_FL_NO_REPORT_OPCODES),
3134    
3135     +/* Reported-by: David Kozub <zub@linux.fjfi.cvut.cz> */
3136     +UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999,
3137     + "JMicron",
3138     + "JMS567",
3139     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3140     + US_FL_BROKEN_FUA),
3141     +
3142     /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
3143     UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
3144     "VIA",
3145     diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
3146     index 191b176ffedf..283a9be77a22 100644
3147     --- a/drivers/usb/usbip/stub_rx.c
3148     +++ b/drivers/usb/usbip/stub_rx.c
3149     @@ -336,23 +336,34 @@ static struct stub_priv *stub_priv_alloc(struct stub_device *sdev,
3150     return priv;
3151     }
3152    
3153     -static int get_pipe(struct stub_device *sdev, int epnum, int dir)
3154     +static int get_pipe(struct stub_device *sdev, struct usbip_header *pdu)
3155     {
3156     struct usb_device *udev = sdev->udev;
3157     struct usb_host_endpoint *ep;
3158     struct usb_endpoint_descriptor *epd = NULL;
3159     + int epnum = pdu->base.ep;
3160     + int dir = pdu->base.direction;
3161     +
3162     + if (epnum < 0 || epnum > 15)
3163     + goto err_ret;
3164    
3165     if (dir == USBIP_DIR_IN)
3166     ep = udev->ep_in[epnum & 0x7f];
3167     else
3168     ep = udev->ep_out[epnum & 0x7f];
3169     - if (!ep) {
3170     - dev_err(&sdev->udev->dev, "no such endpoint?, %d\n",
3171     - epnum);
3172     - BUG();
3173     - }
3174     + if (!ep)
3175     + goto err_ret;
3176    
3177     epd = &ep->desc;
3178     +
3179     + /* validate transfer_buffer_length */
3180     + if (pdu->u.cmd_submit.transfer_buffer_length > INT_MAX) {
3181     + dev_err(&sdev->udev->dev,
3182     + "CMD_SUBMIT: -EMSGSIZE transfer_buffer_length %d\n",
3183     + pdu->u.cmd_submit.transfer_buffer_length);
3184     + return -1;
3185     + }
3186     +
3187     if (usb_endpoint_xfer_control(epd)) {
3188     if (dir == USBIP_DIR_OUT)
3189     return usb_sndctrlpipe(udev, epnum);
3190     @@ -375,15 +386,31 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
3191     }
3192    
3193     if (usb_endpoint_xfer_isoc(epd)) {
3194     + /* validate packet size and number of packets */
3195     + unsigned int maxp, packets, bytes;
3196     +
3197     + maxp = usb_endpoint_maxp(epd);
3198     + maxp *= usb_endpoint_maxp_mult(epd);
3199     + bytes = pdu->u.cmd_submit.transfer_buffer_length;
3200     + packets = DIV_ROUND_UP(bytes, maxp);
3201     +
3202     + if (pdu->u.cmd_submit.number_of_packets < 0 ||
3203     + pdu->u.cmd_submit.number_of_packets > packets) {
3204     + dev_err(&sdev->udev->dev,
3205     + "CMD_SUBMIT: isoc invalid num packets %d\n",
3206     + pdu->u.cmd_submit.number_of_packets);
3207     + return -1;
3208     + }
3209     if (dir == USBIP_DIR_OUT)
3210     return usb_sndisocpipe(udev, epnum);
3211     else
3212     return usb_rcvisocpipe(udev, epnum);
3213     }
3214    
3215     +err_ret:
3216     /* NOT REACHED */
3217     - dev_err(&sdev->udev->dev, "get pipe, epnum %d\n", epnum);
3218     - return 0;
3219     + dev_err(&sdev->udev->dev, "CMD_SUBMIT: invalid epnum %d\n", epnum);
3220     + return -1;
3221     }
3222    
3223     static void masking_bogus_flags(struct urb *urb)
3224     @@ -447,7 +474,10 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
3225     struct stub_priv *priv;
3226     struct usbip_device *ud = &sdev->ud;
3227     struct usb_device *udev = sdev->udev;
3228     - int pipe = get_pipe(sdev, pdu->base.ep, pdu->base.direction);
3229     + int pipe = get_pipe(sdev, pdu);
3230     +
3231     + if (pipe == -1)
3232     + return;
3233    
3234     priv = stub_priv_alloc(sdev, pdu);
3235     if (!priv)
3236     @@ -466,7 +496,8 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
3237     }
3238    
3239     /* allocate urb transfer buffer, if needed */
3240     - if (pdu->u.cmd_submit.transfer_buffer_length > 0) {
3241     + if (pdu->u.cmd_submit.transfer_buffer_length > 0 &&
3242     + pdu->u.cmd_submit.transfer_buffer_length <= INT_MAX) {
3243     priv->urb->transfer_buffer =
3244     kzalloc(pdu->u.cmd_submit.transfer_buffer_length,
3245     GFP_KERNEL);
3246     diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c
3247     index be50cef645d8..87ff94be4235 100644
3248     --- a/drivers/usb/usbip/stub_tx.c
3249     +++ b/drivers/usb/usbip/stub_tx.c
3250     @@ -181,6 +181,13 @@ static int stub_send_ret_submit(struct stub_device *sdev)
3251     memset(&pdu_header, 0, sizeof(pdu_header));
3252     memset(&msg, 0, sizeof(msg));
3253    
3254     + if (urb->actual_length > 0 && !urb->transfer_buffer) {
3255     + dev_err(&sdev->udev->dev,
3256     + "urb: actual_length %d transfer_buffer null\n",
3257     + urb->actual_length);
3258     + return -1;
3259     + }
3260     +
3261     if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
3262     iovnum = 2 + urb->number_of_packets;
3263     else
3264     diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
3265     index 3050fc99a417..33737b612b1f 100644
3266     --- a/drivers/usb/usbip/usbip_common.h
3267     +++ b/drivers/usb/usbip/usbip_common.h
3268     @@ -270,6 +270,7 @@ struct usbip_device {
3269     /* lock for status */
3270     spinlock_t lock;
3271    
3272     + int sockfd;
3273     struct socket *tcp_socket;
3274    
3275     struct task_struct *tcp_rx;
3276     diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
3277     index 1b9f60a22e0b..84df63e3130d 100644
3278     --- a/drivers/usb/usbip/vhci_sysfs.c
3279     +++ b/drivers/usb/usbip/vhci_sysfs.c
3280     @@ -31,15 +31,20 @@
3281    
3282     /*
3283     * output example:
3284     - * hub port sta spd dev socket local_busid
3285     - * hs 0000 004 000 00000000 c5a7bb80 1-2.3
3286     + * hub port sta spd dev sockfd local_busid
3287     + * hs 0000 004 000 00000000 3 1-2.3
3288     * ................................................
3289     - * ss 0008 004 000 00000000 d8cee980 2-3.4
3290     + * ss 0008 004 000 00000000 4 2-3.4
3291     * ................................................
3292     *
3293     - * IP address can be retrieved from a socket pointer address by looking
3294     - * up /proc/net/{tcp,tcp6}. Also, a userland program may remember a
3295     - * port number and its peer IP address.
3296     + * Output includes socket fd instead of socket pointer address to avoid
3297     + * leaking kernel memory address in:
3298     + * /sys/devices/platform/vhci_hcd.0/status and in debug output.
3299     + * The socket pointer address is not used at the moment and it was made
3300     + * visible as a convenient way to find IP address from socket pointer
3301     + * address by looking up /proc/net/{tcp,tcp6}. As this opens a security
3302     + * hole, the change is made to use sockfd instead.
3303     + *
3304     */
3305     static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vdev)
3306     {
3307     @@ -53,8 +58,8 @@ static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vd
3308     if (vdev->ud.status == VDEV_ST_USED) {
3309     *out += sprintf(*out, "%03u %08x ",
3310     vdev->speed, vdev->devid);
3311     - *out += sprintf(*out, "%16p %s",
3312     - vdev->ud.tcp_socket,
3313     + *out += sprintf(*out, "%u %s",
3314     + vdev->ud.sockfd,
3315     dev_name(&vdev->udev->dev));
3316    
3317     } else {
3318     @@ -174,7 +179,8 @@ static ssize_t nports_show(struct device *dev, struct device_attribute *attr,
3319     char *s = out;
3320    
3321     /*
3322     - * Half the ports are for SPEED_HIGH and half for SPEED_SUPER, thus the * 2.
3323     + * Half the ports are for SPEED_HIGH and half for SPEED_SUPER,
3324     + * thus the * 2.
3325     */
3326     out += sprintf(out, "%d\n", VHCI_PORTS * vhci_num_controllers);
3327     return out - s;
3328     @@ -380,6 +386,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
3329    
3330     vdev->devid = devid;
3331     vdev->speed = speed;
3332     + vdev->ud.sockfd = sockfd;
3333     vdev->ud.tcp_socket = socket;
3334     vdev->ud.status = VDEV_ST_NOTASSIGNED;
3335    
3336     diff --git a/drivers/video/fbdev/au1200fb.c b/drivers/video/fbdev/au1200fb.c
3337     index 5f04b4096c42..6c542d0ca076 100644
3338     --- a/drivers/video/fbdev/au1200fb.c
3339     +++ b/drivers/video/fbdev/au1200fb.c
3340     @@ -1681,8 +1681,10 @@ static int au1200fb_drv_probe(struct platform_device *dev)
3341    
3342     fbi = framebuffer_alloc(sizeof(struct au1200fb_device),
3343     &dev->dev);
3344     - if (!fbi)
3345     + if (!fbi) {
3346     + ret = -ENOMEM;
3347     goto failed;
3348     + }
3349    
3350     _au1200fb_infos[plane] = fbi;
3351     fbdev = fbi->par;
3352     @@ -1701,7 +1703,8 @@ static int au1200fb_drv_probe(struct platform_device *dev)
3353     if (!fbdev->fb_mem) {
3354     print_err("fail to allocate frambuffer (size: %dK))",
3355     fbdev->fb_len / 1024);
3356     - return -ENOMEM;
3357     + ret = -ENOMEM;
3358     + goto failed;
3359     }
3360    
3361     /*
3362     diff --git a/drivers/video/fbdev/controlfb.h b/drivers/video/fbdev/controlfb.h
3363     index 6026c60fc100..261522fabdac 100644
3364     --- a/drivers/video/fbdev/controlfb.h
3365     +++ b/drivers/video/fbdev/controlfb.h
3366     @@ -141,5 +141,7 @@ static struct max_cmodes control_mac_modes[] = {
3367     {{ 1, 2}}, /* 1152x870, 75Hz */
3368     {{ 0, 1}}, /* 1280x960, 75Hz */
3369     {{ 0, 1}}, /* 1280x1024, 75Hz */
3370     + {{ 1, 2}}, /* 1152x768, 60Hz */
3371     + {{ 0, 1}}, /* 1600x1024, 60Hz */
3372     };
3373    
3374     diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
3375     index ef08a104fb42..d44f14242016 100644
3376     --- a/drivers/video/fbdev/udlfb.c
3377     +++ b/drivers/video/fbdev/udlfb.c
3378     @@ -769,11 +769,11 @@ static int dlfb_get_edid(struct dlfb_data *dev, char *edid, int len)
3379    
3380     for (i = 0; i < len; i++) {
3381     ret = usb_control_msg(dev->udev,
3382     - usb_rcvctrlpipe(dev->udev, 0), (0x02),
3383     - (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
3384     - HZ);
3385     - if (ret < 1) {
3386     - pr_err("Read EDID byte %d failed err %x\n", i, ret);
3387     + usb_rcvctrlpipe(dev->udev, 0), 0x02,
3388     + (0x80 | (0x02 << 5)), i << 8, 0xA1,
3389     + rbuf, 2, USB_CTRL_GET_TIMEOUT);
3390     + if (ret < 2) {
3391     + pr_err("Read EDID byte %d failed: %d\n", i, ret);
3392     i--;
3393     break;
3394     }
3395     diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c
3396     index 8fc41705c7cd..961a12dc6dc8 100644
3397     --- a/fs/autofs4/waitq.c
3398     +++ b/fs/autofs4/waitq.c
3399     @@ -170,7 +170,6 @@ static void autofs4_notify_daemon(struct autofs_sb_info *sbi,
3400    
3401     mutex_unlock(&sbi->wq_mutex);
3402    
3403     - if (autofs4_write(sbi, pipe, &pkt, pktsz))
3404     switch (ret = autofs4_write(sbi, pipe, &pkt, pktsz)) {
3405     case 0:
3406     break;
3407     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
3408     index 6c7a49faf4e0..1f1338d52303 100644
3409     --- a/fs/btrfs/ioctl.c
3410     +++ b/fs/btrfs/ioctl.c
3411     @@ -1842,8 +1842,13 @@ static noinline int btrfs_ioctl_subvol_setflags(struct file *file,
3412    
3413     ret = btrfs_update_root(trans, fs_info->tree_root,
3414     &root->root_key, &root->root_item);
3415     + if (ret < 0) {
3416     + btrfs_end_transaction(trans);
3417     + goto out_reset;
3418     + }
3419     +
3420     + ret = btrfs_commit_transaction(trans);
3421    
3422     - btrfs_commit_transaction(trans);
3423     out_reset:
3424     if (ret)
3425     btrfs_set_root_flags(&root->root_item, root_flags);
3426     diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
3427     index 161694b66038..e8f5e24325f3 100644
3428     --- a/fs/btrfs/super.c
3429     +++ b/fs/btrfs/super.c
3430     @@ -202,7 +202,6 @@ static struct ratelimit_state printk_limits[] = {
3431    
3432     void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
3433     {
3434     - struct super_block *sb = fs_info->sb;
3435     char lvl[PRINTK_MAX_SINGLE_HEADER_LEN + 1] = "\0";
3436     struct va_format vaf;
3437     va_list args;
3438     @@ -228,7 +227,8 @@ void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
3439     vaf.va = &args;
3440    
3441     if (__ratelimit(ratelimit))
3442     - printk("%sBTRFS %s (device %s): %pV\n", lvl, type, sb->s_id, &vaf);
3443     + printk("%sBTRFS %s (device %s): %pV\n", lvl, type,
3444     + fs_info ? fs_info->sb->s_id : "<unknown>", &vaf);
3445    
3446     va_end(args);
3447     }
3448     diff --git a/fs/btrfs/tests/free-space-tree-tests.c b/fs/btrfs/tests/free-space-tree-tests.c
3449     index 1458bb0ea124..8444a018cca2 100644
3450     --- a/fs/btrfs/tests/free-space-tree-tests.c
3451     +++ b/fs/btrfs/tests/free-space-tree-tests.c
3452     @@ -500,7 +500,8 @@ static int run_test(test_func_t test_func, int bitmaps, u32 sectorsize,
3453     path = btrfs_alloc_path();
3454     if (!path) {
3455     test_msg("Couldn't allocate path\n");
3456     - return -ENOMEM;
3457     + ret = -ENOMEM;
3458     + goto out;
3459     }
3460    
3461     ret = add_block_group_free_space(&trans, root->fs_info, cache);
3462     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
3463     index b39737568c22..0c11121a8ace 100644
3464     --- a/fs/btrfs/volumes.c
3465     +++ b/fs/btrfs/volumes.c
3466     @@ -2501,6 +2501,8 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path
3467     return ret;
3468    
3469     error_trans:
3470     + if (seeding_dev)
3471     + sb->s_flags |= MS_RDONLY;
3472     btrfs_end_transaction(trans);
3473     rcu_string_free(device->name);
3474     btrfs_sysfs_rm_device_link(fs_info->fs_devices, device);
3475     @@ -6144,7 +6146,10 @@ static void bbio_error(struct btrfs_bio *bbio, struct bio *bio, u64 logical)
3476    
3477     btrfs_io_bio(bio)->mirror_num = bbio->mirror_num;
3478     bio->bi_iter.bi_sector = logical >> 9;
3479     - bio->bi_status = BLK_STS_IOERR;
3480     + if (atomic_read(&bbio->error) > bbio->max_errors)
3481     + bio->bi_status = BLK_STS_IOERR;
3482     + else
3483     + bio->bi_status = BLK_STS_OK;
3484     btrfs_end_bbio(bbio, bio);
3485     }
3486     }
3487     diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
3488     index 0687ab3c3267..bf378ddca4db 100644
3489     --- a/fs/ceph/mds_client.c
3490     +++ b/fs/ceph/mds_client.c
3491     @@ -1428,6 +1428,29 @@ static int __close_session(struct ceph_mds_client *mdsc,
3492     return request_close_session(mdsc, session);
3493     }
3494    
3495     +static bool drop_negative_children(struct dentry *dentry)
3496     +{
3497     + struct dentry *child;
3498     + bool all_negative = true;
3499     +
3500     + if (!d_is_dir(dentry))
3501     + goto out;
3502     +
3503     + spin_lock(&dentry->d_lock);
3504     + list_for_each_entry(child, &dentry->d_subdirs, d_child) {
3505     + if (d_really_is_positive(child)) {
3506     + all_negative = false;
3507     + break;
3508     + }
3509     + }
3510     + spin_unlock(&dentry->d_lock);
3511     +
3512     + if (all_negative)
3513     + shrink_dcache_parent(dentry);
3514     +out:
3515     + return all_negative;
3516     +}
3517     +
3518     /*
3519     * Trim old(er) caps.
3520     *
3521     @@ -1473,16 +1496,27 @@ static int trim_caps_cb(struct inode *inode, struct ceph_cap *cap, void *arg)
3522     if ((used | wanted) & ~oissued & mine)
3523     goto out; /* we need these caps */
3524    
3525     - session->s_trim_caps--;
3526     if (oissued) {
3527     /* we aren't the only cap.. just remove us */
3528     __ceph_remove_cap(cap, true);
3529     + session->s_trim_caps--;
3530     } else {
3531     + struct dentry *dentry;
3532     /* try dropping referring dentries */
3533     spin_unlock(&ci->i_ceph_lock);
3534     - d_prune_aliases(inode);
3535     - dout("trim_caps_cb %p cap %p pruned, count now %d\n",
3536     - inode, cap, atomic_read(&inode->i_count));
3537     + dentry = d_find_any_alias(inode);
3538     + if (dentry && drop_negative_children(dentry)) {
3539     + int count;
3540     + dput(dentry);
3541     + d_prune_aliases(inode);
3542     + count = atomic_read(&inode->i_count);
3543     + if (count == 1)
3544     + session->s_trim_caps--;
3545     + dout("trim_caps_cb %p cap %p pruned, count now %d\n",
3546     + inode, cap, count);
3547     + } else {
3548     + dput(dentry);
3549     + }
3550     return 0;
3551     }
3552    
3553     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
3554     index 5331631386a2..01346b8b6edb 100644
3555     --- a/fs/cifs/smb2pdu.c
3556     +++ b/fs/cifs/smb2pdu.c
3557     @@ -2678,27 +2678,27 @@ SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms,
3558     cifs_small_buf_release(req);
3559    
3560     rsp = (struct smb2_read_rsp *)rsp_iov.iov_base;
3561     - shdr = get_sync_hdr(rsp);
3562    
3563     - if (shdr->Status == STATUS_END_OF_FILE) {
3564     + if (rc) {
3565     + if (rc != -ENODATA) {
3566     + cifs_stats_fail_inc(io_parms->tcon, SMB2_READ_HE);
3567     + cifs_dbg(VFS, "Send error in read = %d\n", rc);
3568     + }
3569     free_rsp_buf(resp_buftype, rsp_iov.iov_base);
3570     - return 0;
3571     + return rc == -ENODATA ? 0 : rc;
3572     }
3573    
3574     - if (rc) {
3575     - cifs_stats_fail_inc(io_parms->tcon, SMB2_READ_HE);
3576     - cifs_dbg(VFS, "Send error in read = %d\n", rc);
3577     - } else {
3578     - *nbytes = le32_to_cpu(rsp->DataLength);
3579     - if ((*nbytes > CIFS_MAX_MSGSIZE) ||
3580     - (*nbytes > io_parms->length)) {
3581     - cifs_dbg(FYI, "bad length %d for count %d\n",
3582     - *nbytes, io_parms->length);
3583     - rc = -EIO;
3584     - *nbytes = 0;
3585     - }
3586     + *nbytes = le32_to_cpu(rsp->DataLength);
3587     + if ((*nbytes > CIFS_MAX_MSGSIZE) ||
3588     + (*nbytes > io_parms->length)) {
3589     + cifs_dbg(FYI, "bad length %d for count %d\n",
3590     + *nbytes, io_parms->length);
3591     + rc = -EIO;
3592     + *nbytes = 0;
3593     }
3594    
3595     + shdr = get_sync_hdr(rsp);
3596     +
3597     if (*buf) {
3598     memcpy(*buf, (char *)shdr + rsp->DataOffset, *nbytes);
3599     free_rsp_buf(resp_buftype, rsp_iov.iov_base);
3600     diff --git a/fs/exec.c b/fs/exec.c
3601     index 4726c777dd38..3e14ba25f678 100644
3602     --- a/fs/exec.c
3603     +++ b/fs/exec.c
3604     @@ -1340,15 +1340,10 @@ void setup_new_exec(struct linux_binprm * bprm)
3605     * avoid bad behavior from the prior rlimits. This has to
3606     * happen before arch_pick_mmap_layout(), which examines
3607     * RLIMIT_STACK, but after the point of no return to avoid
3608     - * races from other threads changing the limits. This also
3609     - * must be protected from races with prlimit() calls.
3610     + * needing to clean up the change on failure.
3611     */
3612     - task_lock(current->group_leader);
3613     if (current->signal->rlim[RLIMIT_STACK].rlim_cur > _STK_LIM)
3614     current->signal->rlim[RLIMIT_STACK].rlim_cur = _STK_LIM;
3615     - if (current->signal->rlim[RLIMIT_STACK].rlim_max > _STK_LIM)
3616     - current->signal->rlim[RLIMIT_STACK].rlim_max = _STK_LIM;
3617     - task_unlock(current->group_leader);
3618     }
3619    
3620     arch_pick_mmap_layout(current->mm);
3621     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
3622     index 07bca11749d4..c941251ac0c0 100644
3623     --- a/fs/ext4/extents.c
3624     +++ b/fs/ext4/extents.c
3625     @@ -4722,6 +4722,7 @@ static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset,
3626     EXT4_INODE_EOFBLOCKS);
3627     }
3628     ext4_mark_inode_dirty(handle, inode);
3629     + ext4_update_inode_fsync_trans(handle, inode, 1);
3630     ret2 = ext4_journal_stop(handle);
3631     if (ret2)
3632     break;
3633     diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
3634     index c5f697a3fad4..207588dc803e 100644
3635     --- a/fs/ext4/ialloc.c
3636     +++ b/fs/ext4/ialloc.c
3637     @@ -816,6 +816,8 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
3638     #ifdef CONFIG_EXT4_FS_POSIX_ACL
3639     struct posix_acl *p = get_acl(dir, ACL_TYPE_DEFAULT);
3640    
3641     + if (IS_ERR(p))
3642     + return ERR_CAST(p);
3643     if (p) {
3644     int acl_size = p->a_count * sizeof(ext4_acl_entry);
3645    
3646     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
3647     index 38eb621edd80..ea2ccc524bd9 100644
3648     --- a/fs/ext4/inode.c
3649     +++ b/fs/ext4/inode.c
3650     @@ -149,6 +149,15 @@ static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
3651     */
3652     int ext4_inode_is_fast_symlink(struct inode *inode)
3653     {
3654     + if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) {
3655     + int ea_blocks = EXT4_I(inode)->i_file_acl ?
3656     + EXT4_CLUSTER_SIZE(inode->i_sb) >> 9 : 0;
3657     +
3658     + if (ext4_has_inline_data(inode))
3659     + return 0;
3660     +
3661     + return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0);
3662     + }
3663     return S_ISLNK(inode->i_mode) && inode->i_size &&
3664     (inode->i_size < EXT4_N_BLOCKS * 4);
3665     }
3666     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
3667     index bd48a8d83961..fccf295fcb03 100644
3668     --- a/fs/ext4/namei.c
3669     +++ b/fs/ext4/namei.c
3670     @@ -1399,6 +1399,10 @@ static struct buffer_head * ext4_find_entry (struct inode *dir,
3671     "falling back\n"));
3672     }
3673     nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
3674     + if (!nblocks) {
3675     + ret = NULL;
3676     + goto cleanup_and_exit;
3677     + }
3678     start = EXT4_I(dir)->i_dir_start_lookup;
3679     if (start >= nblocks)
3680     start = 0;
3681     diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
3682     index 33a0cb5701a3..2a29cf3371f6 100644
3683     --- a/fs/gfs2/file.c
3684     +++ b/fs/gfs2/file.c
3685     @@ -256,7 +256,7 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
3686     goto out;
3687     }
3688     if ((flags ^ new_flags) & GFS2_DIF_JDATA) {
3689     - if (flags & GFS2_DIF_JDATA)
3690     + if (new_flags & GFS2_DIF_JDATA)
3691     gfs2_log_flush(sdp, ip->i_gl, NORMAL_FLUSH);
3692     error = filemap_fdatawrite(inode->i_mapping);
3693     if (error)
3694     @@ -264,6 +264,8 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
3695     error = filemap_fdatawait(inode->i_mapping);
3696     if (error)
3697     goto out;
3698     + if (new_flags & GFS2_DIF_JDATA)
3699     + gfs2_ordered_del_inode(ip);
3700     }
3701     error = gfs2_trans_begin(sdp, RES_DINODE, 0);
3702     if (error)
3703     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
3704     index babebbccae2a..de325804941d 100644
3705     --- a/fs/nfs/write.c
3706     +++ b/fs/nfs/write.c
3707     @@ -1889,6 +1889,8 @@ int nfs_commit_inode(struct inode *inode, int how)
3708     if (res)
3709     error = nfs_generic_commit_list(inode, &head, how, &cinfo);
3710     nfs_commit_end(cinfo.mds);
3711     + if (res == 0)
3712     + return res;
3713     if (error < 0)
3714     goto out_error;
3715     if (!may_wait)
3716     diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c
3717     index 697f8ae7792d..f650e475d8f0 100644
3718     --- a/fs/nfsd/auth.c
3719     +++ b/fs/nfsd/auth.c
3720     @@ -60,6 +60,9 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
3721     gi->gid[i] = exp->ex_anon_gid;
3722     else
3723     gi->gid[i] = rqgi->gid[i];
3724     +
3725     + /* Each thread allocates its own gi, no race */
3726     + groups_sort(gi);
3727     }
3728     } else {
3729     gi = get_group_info(rqgi);
3730     diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
3731     index bc6d5c5a3443..4bb7e4f53ea6 100644
3732     --- a/fs/overlayfs/namei.c
3733     +++ b/fs/overlayfs/namei.c
3734     @@ -437,7 +437,7 @@ int ovl_verify_index(struct dentry *index, struct path *lowerstack,
3735    
3736     /* Check if index is orphan and don't warn before cleaning it */
3737     if (d_inode(index)->i_nlink == 1 &&
3738     - ovl_get_nlink(index, origin.dentry, 0) == 0)
3739     + ovl_get_nlink(origin.dentry, index, 0) == 0)
3740     err = -ENOENT;
3741    
3742     dput(origin.dentry);
3743     diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
3744     index 698b74dd750e..b2c7f33e08fc 100644
3745     --- a/fs/overlayfs/readdir.c
3746     +++ b/fs/overlayfs/readdir.c
3747     @@ -645,7 +645,10 @@ static int ovl_iterate_real(struct file *file, struct dir_context *ctx)
3748     return PTR_ERR(rdt.cache);
3749     }
3750    
3751     - return iterate_dir(od->realfile, &rdt.ctx);
3752     + err = iterate_dir(od->realfile, &rdt.ctx);
3753     + ctx->pos = rdt.ctx.pos;
3754     +
3755     + return err;
3756     }
3757    
3758    
3759     diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c
3760     index 2da657848cfc..d0cf1c50bb6c 100644
3761     --- a/fs/proc/proc_tty.c
3762     +++ b/fs/proc/proc_tty.c
3763     @@ -15,6 +15,7 @@
3764     #include <linux/tty.h>
3765     #include <linux/seq_file.h>
3766     #include <linux/bitops.h>
3767     +#include "internal.h"
3768    
3769     /*
3770     * The /proc/tty directory inodes...
3771     @@ -165,7 +166,7 @@ void proc_tty_unregister_driver(struct tty_driver *driver)
3772     if (!ent)
3773     return;
3774    
3775     - remove_proc_entry(driver->driver_name, proc_tty_driver);
3776     + remove_proc_entry(ent->name, proc_tty_driver);
3777    
3778     driver->proc_entry = NULL;
3779     }
3780     diff --git a/fs/udf/super.c b/fs/udf/super.c
3781     index 99cb81d0077f..08bf097507f6 100644
3782     --- a/fs/udf/super.c
3783     +++ b/fs/udf/super.c
3784     @@ -703,7 +703,7 @@ static loff_t udf_check_vsd(struct super_block *sb)
3785     else
3786     sectorsize = sb->s_blocksize;
3787    
3788     - sector += (sbi->s_session << sb->s_blocksize_bits);
3789     + sector += (((loff_t)sbi->s_session) << sb->s_blocksize_bits);
3790    
3791     udf_debug("Starting at sector %u (%ld byte sectors)\n",
3792     (unsigned int)(sector >> sb->s_blocksize_bits),
3793     diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
3794     index 89263797cf32..a3cc8afed367 100644
3795     --- a/fs/xfs/libxfs/xfs_bmap.c
3796     +++ b/fs/xfs/libxfs/xfs_bmap.c
3797     @@ -2560,7 +2560,7 @@ xfs_bmap_add_extent_unwritten_real(
3798     &i)))
3799     goto done;
3800     XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
3801     - cur->bc_rec.b.br_state = XFS_EXT_NORM;
3802     + cur->bc_rec.b.br_state = new->br_state;
3803     if ((error = xfs_btree_insert(cur, &i)))
3804     goto done;
3805     XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
3806     diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
3807     index 34227115a5d6..43005fbe8b1e 100644
3808     --- a/fs/xfs/xfs_icache.c
3809     +++ b/fs/xfs/xfs_icache.c
3810     @@ -610,7 +610,7 @@ xfs_iget(
3811     } else {
3812     rcu_read_unlock();
3813     if (flags & XFS_IGET_INCORE) {
3814     - error = -ENOENT;
3815     + error = -ENODATA;
3816     goto out_error_or_again;
3817     }
3818     XFS_STATS_INC(mp, xs_ig_missed);
3819     diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
3820     index 17081c77ef86..f24e5b6cfc86 100644
3821     --- a/fs/xfs/xfs_iops.c
3822     +++ b/fs/xfs/xfs_iops.c
3823     @@ -885,22 +885,6 @@ xfs_setattr_size(
3824     if (error)
3825     return error;
3826    
3827     - /*
3828     - * We are going to log the inode size change in this transaction so
3829     - * any previous writes that are beyond the on disk EOF and the new
3830     - * EOF that have not been written out need to be written here. If we
3831     - * do not write the data out, we expose ourselves to the null files
3832     - * problem. Note that this includes any block zeroing we did above;
3833     - * otherwise those blocks may not be zeroed after a crash.
3834     - */
3835     - if (did_zeroing ||
3836     - (newsize > ip->i_d.di_size && oldsize != ip->i_d.di_size)) {
3837     - error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
3838     - ip->i_d.di_size, newsize);
3839     - if (error)
3840     - return error;
3841     - }
3842     -
3843     /*
3844     * We've already locked out new page faults, so now we can safely remove
3845     * pages from the page cache knowing they won't get refaulted until we
3846     @@ -917,9 +901,29 @@ xfs_setattr_size(
3847     * user visible changes). There's not much we can do about this, except
3848     * to hope that the caller sees ENOMEM and retries the truncate
3849     * operation.
3850     + *
3851     + * And we update in-core i_size and truncate page cache beyond newsize
3852     + * before writeback the [di_size, newsize] range, so we're guaranteed
3853     + * not to write stale data past the new EOF on truncate down.
3854     */
3855     truncate_setsize(inode, newsize);
3856    
3857     + /*
3858     + * We are going to log the inode size change in this transaction so
3859     + * any previous writes that are beyond the on disk EOF and the new
3860     + * EOF that have not been written out need to be written here. If we
3861     + * do not write the data out, we expose ourselves to the null files
3862     + * problem. Note that this includes any block zeroing we did above;
3863     + * otherwise those blocks may not be zeroed after a crash.
3864     + */
3865     + if (did_zeroing ||
3866     + (newsize > ip->i_d.di_size && oldsize != ip->i_d.di_size)) {
3867     + error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
3868     + ip->i_d.di_size, newsize - 1);
3869     + if (error)
3870     + return error;
3871     + }
3872     +
3873     error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp);
3874     if (error)
3875     return error;
3876     diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
3877     index ee34899396b2..d6e049fdd977 100644
3878     --- a/fs/xfs/xfs_log_recover.c
3879     +++ b/fs/xfs/xfs_log_recover.c
3880     @@ -753,7 +753,7 @@ xlog_find_head(
3881     * in the in-core log. The following number can be made tighter if
3882     * we actually look at the block size of the filesystem.
3883     */
3884     - num_scan_bblks = XLOG_TOTAL_REC_SHIFT(log);
3885     + num_scan_bblks = min_t(int, log_bbnum, XLOG_TOTAL_REC_SHIFT(log));
3886     if (head_blk >= num_scan_bblks) {
3887     /*
3888     * We are guaranteed that the entire check can be performed
3889     diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h
3890     index f0b44c16e88f..c2bae8da642c 100644
3891     --- a/include/crypto/internal/hash.h
3892     +++ b/include/crypto/internal/hash.h
3893     @@ -82,6 +82,14 @@ int ahash_register_instance(struct crypto_template *tmpl,
3894     struct ahash_instance *inst);
3895     void ahash_free_instance(struct crypto_instance *inst);
3896    
3897     +int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
3898     + unsigned int keylen);
3899     +
3900     +static inline bool crypto_shash_alg_has_setkey(struct shash_alg *alg)
3901     +{
3902     + return alg->setkey != shash_no_setkey;
3903     +}
3904     +
3905     int crypto_init_ahash_spawn(struct crypto_ahash_spawn *spawn,
3906     struct hash_alg_common *alg,
3907     struct crypto_instance *inst);
3908     diff --git a/include/linux/cred.h b/include/linux/cred.h
3909     index 099058e1178b..631286535d0f 100644
3910     --- a/include/linux/cred.h
3911     +++ b/include/linux/cred.h
3912     @@ -83,6 +83,7 @@ extern int set_current_groups(struct group_info *);
3913     extern void set_groups(struct cred *, struct group_info *);
3914     extern int groups_search(const struct group_info *, kgid_t);
3915     extern bool may_setgroups(void);
3916     +extern void groups_sort(struct group_info *);
3917    
3918     /*
3919     * The security context of a task
3920     diff --git a/include/linux/mman.h b/include/linux/mman.h
3921     index 7c87b6652244..835a6f2fd8d4 100644
3922     --- a/include/linux/mman.h
3923     +++ b/include/linux/mman.h
3924     @@ -64,8 +64,9 @@ static inline bool arch_validate_prot(unsigned long prot)
3925     * ("bit1" and "bit2" must be single bits)
3926     */
3927     #define _calc_vm_trans(x, bit1, bit2) \
3928     + ((!(bit1) || !(bit2)) ? 0 : \
3929     ((bit1) <= (bit2) ? ((x) & (bit1)) * ((bit2) / (bit1)) \
3930     - : ((x) & (bit1)) / ((bit1) / (bit2)))
3931     + : ((x) & (bit1)) / ((bit1) / (bit2))))
3932    
3933     /*
3934     * Combine the mmap "prot" argument into "vm_flags" used internally.
3935     diff --git a/include/linux/oom.h b/include/linux/oom.h
3936     index 01c91d874a57..5bad038ac012 100644
3937     --- a/include/linux/oom.h
3938     +++ b/include/linux/oom.h
3939     @@ -66,6 +66,15 @@ static inline bool tsk_is_oom_victim(struct task_struct * tsk)
3940     return tsk->signal->oom_mm;
3941     }
3942    
3943     +/*
3944     + * Use this helper if tsk->mm != mm and the victim mm needs a special
3945     + * handling. This is guaranteed to stay true after once set.
3946     + */
3947     +static inline bool mm_is_oom_victim(struct mm_struct *mm)
3948     +{
3949     + return test_bit(MMF_OOM_VICTIM, &mm->flags);
3950     +}
3951     +
3952     /*
3953     * Checks whether a page fault on the given mm is still reliable.
3954     * This is no longer true if the oom reaper started to reap the
3955     diff --git a/include/linux/sched/coredump.h b/include/linux/sched/coredump.h
3956     index 9c8847395b5e..ec912d01126f 100644
3957     --- a/include/linux/sched/coredump.h
3958     +++ b/include/linux/sched/coredump.h
3959     @@ -70,6 +70,7 @@ static inline int get_dumpable(struct mm_struct *mm)
3960     #define MMF_UNSTABLE 22 /* mm is unstable for copy_from_user */
3961     #define MMF_HUGE_ZERO_PAGE 23 /* mm has ever used the global huge zero page */
3962     #define MMF_DISABLE_THP 24 /* disable THP for all VMAs */
3963     +#define MMF_OOM_VICTIM 25 /* mm is the oom victim */
3964     #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP)
3965    
3966     #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK |\
3967     diff --git a/include/linux/string.h b/include/linux/string.h
3968     index 410ecf17de3c..cfd83eb2f926 100644
3969     --- a/include/linux/string.h
3970     +++ b/include/linux/string.h
3971     @@ -259,7 +259,10 @@ __FORTIFY_INLINE __kernel_size_t strlen(const char *p)
3972     {
3973     __kernel_size_t ret;
3974     size_t p_size = __builtin_object_size(p, 0);
3975     - if (p_size == (size_t)-1)
3976     +
3977     + /* Work around gcc excess stack consumption issue */
3978     + if (p_size == (size_t)-1 ||
3979     + (__builtin_constant_p(p[p_size - 1]) && p[p_size - 1] == '\0'))
3980     return __builtin_strlen(p);
3981     ret = strnlen(p, p_size);
3982     if (p_size <= ret)
3983     diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h
3984     index ec5008cf5d51..b2a10c762304 100644
3985     --- a/include/rdma/ib_addr.h
3986     +++ b/include/rdma/ib_addr.h
3987     @@ -245,10 +245,11 @@ static inline void rdma_addr_set_dgid(struct rdma_dev_addr *dev_addr, union ib_g
3988     static inline enum ib_mtu iboe_get_mtu(int mtu)
3989     {
3990     /*
3991     - * reduce IB headers from effective IBoE MTU. 28 stands for
3992     - * atomic header which is the biggest possible header after BTH
3993     + * Reduce IB headers from effective IBoE MTU.
3994     */
3995     - mtu = mtu - IB_GRH_BYTES - IB_BTH_BYTES - 28;
3996     + mtu = mtu - (IB_GRH_BYTES + IB_UDP_BYTES + IB_BTH_BYTES +
3997     + IB_EXT_XRC_BYTES + IB_EXT_ATOMICETH_BYTES +
3998     + IB_ICRC_BYTES);
3999    
4000     if (mtu >= ib_mtu_enum_to_int(IB_MTU_4096))
4001     return IB_MTU_4096;
4002     @@ -305,12 +306,12 @@ static inline void rdma_get_ll_mac(struct in6_addr *addr, u8 *mac)
4003    
4004     static inline int rdma_is_multicast_addr(struct in6_addr *addr)
4005     {
4006     - u32 ipv4_addr;
4007     + __be32 ipv4_addr;
4008    
4009     if (addr->s6_addr[0] == 0xff)
4010     return 1;
4011    
4012     - memcpy(&ipv4_addr, addr->s6_addr + 12, 4);
4013     + ipv4_addr = addr->s6_addr32[3];
4014     return (ipv6_addr_v4mapped(addr) && ipv4_is_multicast(ipv4_addr));
4015     }
4016    
4017     diff --git a/include/rdma/ib_pack.h b/include/rdma/ib_pack.h
4018     index 36655899ee02..7ea1382ad0e5 100644
4019     --- a/include/rdma/ib_pack.h
4020     +++ b/include/rdma/ib_pack.h
4021     @@ -37,14 +37,17 @@
4022     #include <uapi/linux/if_ether.h>
4023    
4024     enum {
4025     - IB_LRH_BYTES = 8,
4026     - IB_ETH_BYTES = 14,
4027     - IB_VLAN_BYTES = 4,
4028     - IB_GRH_BYTES = 40,
4029     - IB_IP4_BYTES = 20,
4030     - IB_UDP_BYTES = 8,
4031     - IB_BTH_BYTES = 12,
4032     - IB_DETH_BYTES = 8
4033     + IB_LRH_BYTES = 8,
4034     + IB_ETH_BYTES = 14,
4035     + IB_VLAN_BYTES = 4,
4036     + IB_GRH_BYTES = 40,
4037     + IB_IP4_BYTES = 20,
4038     + IB_UDP_BYTES = 8,
4039     + IB_BTH_BYTES = 12,
4040     + IB_DETH_BYTES = 8,
4041     + IB_EXT_ATOMICETH_BYTES = 28,
4042     + IB_EXT_XRC_BYTES = 4,
4043     + IB_ICRC_BYTES = 4
4044     };
4045    
4046     struct ib_field {
4047     diff --git a/kernel/groups.c b/kernel/groups.c
4048     index e357bc800111..daae2f2dc6d4 100644
4049     --- a/kernel/groups.c
4050     +++ b/kernel/groups.c
4051     @@ -86,11 +86,12 @@ static int gid_cmp(const void *_a, const void *_b)
4052     return gid_gt(a, b) - gid_lt(a, b);
4053     }
4054    
4055     -static void groups_sort(struct group_info *group_info)
4056     +void groups_sort(struct group_info *group_info)
4057     {
4058     sort(group_info->gid, group_info->ngroups, sizeof(*group_info->gid),
4059     gid_cmp, NULL);
4060     }
4061     +EXPORT_SYMBOL(groups_sort);
4062    
4063     /* a simple bsearch */
4064     int groups_search(const struct group_info *group_info, kgid_t grp)
4065     @@ -122,7 +123,6 @@ int groups_search(const struct group_info *group_info, kgid_t grp)
4066     void set_groups(struct cred *new, struct group_info *group_info)
4067     {
4068     put_group_info(new->group_info);
4069     - groups_sort(group_info);
4070     get_group_info(group_info);
4071     new->group_info = group_info;
4072     }
4073     @@ -206,6 +206,7 @@ SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)
4074     return retval;
4075     }
4076    
4077     + groups_sort(group_info);
4078     retval = set_current_groups(group_info);
4079     put_group_info(group_info);
4080    
4081     diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
4082     index ccd2d20e6b06..0685c4499431 100644
4083     --- a/kernel/power/suspend.c
4084     +++ b/kernel/power/suspend.c
4085     @@ -437,7 +437,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
4086     error = suspend_ops->enter(state);
4087     trace_suspend_resume(TPS("machine_suspend"),
4088     state, false);
4089     - events_check_enabled = false;
4090     } else if (*wakeup) {
4091     error = -EBUSY;
4092     }
4093     @@ -582,6 +581,7 @@ static int enter_state(suspend_state_t state)
4094     pm_restore_gfp_mask();
4095    
4096     Finish:
4097     + events_check_enabled = false;
4098     pm_pr_dbg("Finishing wakeup.\n");
4099     suspend_finish();
4100     Unlock:
4101     diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
4102     index d8c43d73e078..7464c5c4de46 100644
4103     --- a/kernel/sched/rt.c
4104     +++ b/kernel/sched/rt.c
4105     @@ -2034,8 +2034,9 @@ static void pull_rt_task(struct rq *this_rq)
4106     bool resched = false;
4107     struct task_struct *p;
4108     struct rq *src_rq;
4109     + int rt_overload_count = rt_overloaded(this_rq);
4110    
4111     - if (likely(!rt_overloaded(this_rq)))
4112     + if (likely(!rt_overload_count))
4113     return;
4114    
4115     /*
4116     @@ -2044,6 +2045,11 @@ static void pull_rt_task(struct rq *this_rq)
4117     */
4118     smp_rmb();
4119    
4120     + /* If we are the only overloaded CPU do nothing */
4121     + if (rt_overload_count == 1 &&
4122     + cpumask_test_cpu(this_rq->cpu, this_rq->rd->rto_mask))
4123     + return;
4124     +
4125     #ifdef HAVE_RT_PUSH_IPI
4126     if (sched_feat(RT_PUSH_IPI)) {
4127     tell_cpu_to_push(this_rq);
4128     diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
4129     index 13d6881f908b..ec999f32c840 100644
4130     --- a/kernel/time/posix-timers.c
4131     +++ b/kernel/time/posix-timers.c
4132     @@ -434,17 +434,22 @@ static struct pid *good_sigevent(sigevent_t * event)
4133     {
4134     struct task_struct *rtn = current->group_leader;
4135    
4136     - if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
4137     - (!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
4138     - !same_thread_group(rtn, current) ||
4139     - (event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_SIGNAL))
4140     + switch (event->sigev_notify) {
4141     + case SIGEV_SIGNAL | SIGEV_THREAD_ID:
4142     + rtn = find_task_by_vpid(event->sigev_notify_thread_id);
4143     + if (!rtn || !same_thread_group(rtn, current))
4144     + return NULL;
4145     + /* FALLTHRU */
4146     + case SIGEV_SIGNAL:
4147     + case SIGEV_THREAD:
4148     + if (event->sigev_signo <= 0 || event->sigev_signo > SIGRTMAX)
4149     + return NULL;
4150     + /* FALLTHRU */
4151     + case SIGEV_NONE:
4152     + return task_pid(rtn);
4153     + default:
4154     return NULL;
4155     -
4156     - if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
4157     - ((event->sigev_signo <= 0) || (event->sigev_signo > SIGRTMAX)))
4158     - return NULL;
4159     -
4160     - return task_pid(rtn);
4161     + }
4162     }
4163    
4164     static struct k_itimer * alloc_posix_timer(void)
4165     @@ -669,7 +674,7 @@ void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting)
4166     struct timespec64 ts64;
4167     bool sig_none;
4168    
4169     - sig_none = (timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE;
4170     + sig_none = timr->it_sigev_notify == SIGEV_NONE;
4171     iv = timr->it_interval;
4172    
4173     /* interval timer ? */
4174     @@ -856,7 +861,7 @@ int common_timer_set(struct k_itimer *timr, int flags,
4175    
4176     timr->it_interval = timespec64_to_ktime(new_setting->it_interval);
4177     expires = timespec64_to_ktime(new_setting->it_value);
4178     - sigev_none = (timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE;
4179     + sigev_none = timr->it_sigev_notify == SIGEV_NONE;
4180    
4181     kc->timer_arm(timr, expires, flags & TIMER_ABSTIME, sigev_none);
4182     timr->it_active = !sigev_none;
4183     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
4184     index 752e5daf0896..80de14973b42 100644
4185     --- a/kernel/trace/trace.c
4186     +++ b/kernel/trace/trace.c
4187     @@ -4178,37 +4178,30 @@ static const struct file_operations show_traces_fops = {
4188     .llseek = seq_lseek,
4189     };
4190    
4191     -/*
4192     - * The tracer itself will not take this lock, but still we want
4193     - * to provide a consistent cpumask to user-space:
4194     - */
4195     -static DEFINE_MUTEX(tracing_cpumask_update_lock);
4196     -
4197     -/*
4198     - * Temporary storage for the character representation of the
4199     - * CPU bitmask (and one more byte for the newline):
4200     - */
4201     -static char mask_str[NR_CPUS + 1];
4202     -
4203     static ssize_t
4204     tracing_cpumask_read(struct file *filp, char __user *ubuf,
4205     size_t count, loff_t *ppos)
4206     {
4207     struct trace_array *tr = file_inode(filp)->i_private;
4208     + char *mask_str;
4209     int len;
4210    
4211     - mutex_lock(&tracing_cpumask_update_lock);
4212     + len = snprintf(NULL, 0, "%*pb\n",
4213     + cpumask_pr_args(tr->tracing_cpumask)) + 1;
4214     + mask_str = kmalloc(len, GFP_KERNEL);
4215     + if (!mask_str)
4216     + return -ENOMEM;
4217    
4218     - len = snprintf(mask_str, count, "%*pb\n",
4219     + len = snprintf(mask_str, len, "%*pb\n",
4220     cpumask_pr_args(tr->tracing_cpumask));
4221     if (len >= count) {
4222     count = -EINVAL;
4223     goto out_err;
4224     }
4225     - count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
4226     + count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
4227    
4228     out_err:
4229     - mutex_unlock(&tracing_cpumask_update_lock);
4230     + kfree(mask_str);
4231    
4232     return count;
4233     }
4234     @@ -4228,8 +4221,6 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf,
4235     if (err)
4236     goto err_unlock;
4237    
4238     - mutex_lock(&tracing_cpumask_update_lock);
4239     -
4240     local_irq_disable();
4241     arch_spin_lock(&tr->max_lock);
4242     for_each_tracing_cpu(cpu) {
4243     @@ -4252,8 +4243,6 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf,
4244     local_irq_enable();
4245    
4246     cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
4247     -
4248     - mutex_unlock(&tracing_cpumask_update_lock);
4249     free_cpumask_var(tracing_cpumask_new);
4250    
4251     return count;
4252     diff --git a/kernel/uid16.c b/kernel/uid16.c
4253     index ce74a4901d2b..ef1da2a5f9bd 100644
4254     --- a/kernel/uid16.c
4255     +++ b/kernel/uid16.c
4256     @@ -192,6 +192,7 @@ SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist)
4257     return retval;
4258     }
4259    
4260     + groups_sort(group_info);
4261     retval = set_current_groups(group_info);
4262     put_group_info(group_info);
4263    
4264     diff --git a/mm/mmap.c b/mm/mmap.c
4265     index 476e810cf100..0de87a376aaa 100644
4266     --- a/mm/mmap.c
4267     +++ b/mm/mmap.c
4268     @@ -3004,20 +3004,20 @@ void exit_mmap(struct mm_struct *mm)
4269     /* Use -1 here to ensure all VMAs in the mm are unmapped */
4270     unmap_vmas(&tlb, vma, 0, -1);
4271    
4272     - set_bit(MMF_OOM_SKIP, &mm->flags);
4273     - if (unlikely(tsk_is_oom_victim(current))) {
4274     + if (unlikely(mm_is_oom_victim(mm))) {
4275     /*
4276     * Wait for oom_reap_task() to stop working on this
4277     * mm. Because MMF_OOM_SKIP is already set before
4278     * calling down_read(), oom_reap_task() will not run
4279     * on this "mm" post up_write().
4280     *
4281     - * tsk_is_oom_victim() cannot be set from under us
4282     - * either because current->mm is already set to NULL
4283     + * mm_is_oom_victim() cannot be set from under us
4284     + * either because victim->mm is already set to NULL
4285     * under task_lock before calling mmput and oom_mm is
4286     - * set not NULL by the OOM killer only if current->mm
4287     + * set not NULL by the OOM killer only if victim->mm
4288     * is found not NULL while holding the task_lock.
4289     */
4290     + set_bit(MMF_OOM_SKIP, &mm->flags);
4291     down_write(&mm->mmap_sem);
4292     up_write(&mm->mmap_sem);
4293     }
4294     diff --git a/mm/oom_kill.c b/mm/oom_kill.c
4295     index 18c5b356b505..10aed8d8c080 100644
4296     --- a/mm/oom_kill.c
4297     +++ b/mm/oom_kill.c
4298     @@ -673,8 +673,10 @@ static void mark_oom_victim(struct task_struct *tsk)
4299     return;
4300    
4301     /* oom_mm is bound to the signal struct life time. */
4302     - if (!cmpxchg(&tsk->signal->oom_mm, NULL, mm))
4303     + if (!cmpxchg(&tsk->signal->oom_mm, NULL, mm)) {
4304     mmgrab(tsk->signal->oom_mm);
4305     + set_bit(MMF_OOM_VICTIM, &mm->flags);
4306     + }
4307    
4308     /*
4309     * Make sure that the task is woken up from uninterruptible sleep
4310     diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
4311     index 681e33998e03..3c1570d3e22f 100644
4312     --- a/net/ipv4/icmp.c
4313     +++ b/net/ipv4/icmp.c
4314     @@ -782,7 +782,7 @@ static bool icmp_tag_validation(int proto)
4315     }
4316    
4317     /*
4318     - * Handle ICMP_DEST_UNREACH, ICMP_TIME_EXCEED, ICMP_QUENCH, and
4319     + * Handle ICMP_DEST_UNREACH, ICMP_TIME_EXCEEDED, ICMP_QUENCH, and
4320     * ICMP_PARAMETERPROB.
4321     */
4322    
4323     @@ -810,7 +810,8 @@ static bool icmp_unreach(struct sk_buff *skb)
4324     if (iph->ihl < 5) /* Mangled header, drop. */
4325     goto out_err;
4326    
4327     - if (icmph->type == ICMP_DEST_UNREACH) {
4328     + switch (icmph->type) {
4329     + case ICMP_DEST_UNREACH:
4330     switch (icmph->code & 15) {
4331     case ICMP_NET_UNREACH:
4332     case ICMP_HOST_UNREACH:
4333     @@ -846,8 +847,16 @@ static bool icmp_unreach(struct sk_buff *skb)
4334     }
4335     if (icmph->code > NR_ICMP_UNREACH)
4336     goto out;
4337     - } else if (icmph->type == ICMP_PARAMETERPROB)
4338     + break;
4339     + case ICMP_PARAMETERPROB:
4340     info = ntohl(icmph->un.gateway) >> 24;
4341     + break;
4342     + case ICMP_TIME_EXCEEDED:
4343     + __ICMP_INC_STATS(net, ICMP_MIB_INTIMEEXCDS);
4344     + if (icmph->code == ICMP_EXC_FRAGTIME)
4345     + goto out;
4346     + break;
4347     + }
4348    
4349     /*
4350     * Throw it at our lower layers
4351     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
4352     index 647cfc972bde..804bead564db 100644
4353     --- a/net/ipv4/route.c
4354     +++ b/net/ipv4/route.c
4355     @@ -1254,7 +1254,7 @@ static void set_class_tag(struct rtable *rt, u32 tag)
4356     static unsigned int ipv4_default_advmss(const struct dst_entry *dst)
4357     {
4358     unsigned int header_size = sizeof(struct tcphdr) + sizeof(struct iphdr);
4359     - unsigned int advmss = max_t(unsigned int, dst->dev->mtu - header_size,
4360     + unsigned int advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size,
4361     ip_rt_min_advmss);
4362    
4363     return min(advmss, IPV4_MAX_PMTU - header_size);
4364     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
4365     index 02d61101b108..af22aa8ae35b 100644
4366     --- a/net/l2tp/l2tp_core.c
4367     +++ b/net/l2tp/l2tp_core.c
4368     @@ -1891,7 +1891,7 @@ static __net_exit void l2tp_exit_net(struct net *net)
4369    
4370     rcu_read_lock_bh();
4371     list_for_each_entry_rcu(tunnel, &pn->l2tp_tunnel_list, list) {
4372     - (void)l2tp_tunnel_delete(tunnel);
4373     + l2tp_tunnel_delete(tunnel);
4374     }
4375     rcu_read_unlock_bh();
4376    
4377     diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
4378     index 7135f4645d3a..c28223d8092b 100644
4379     --- a/net/l2tp/l2tp_netlink.c
4380     +++ b/net/l2tp/l2tp_netlink.c
4381     @@ -282,7 +282,7 @@ static int l2tp_nl_cmd_tunnel_delete(struct sk_buff *skb, struct genl_info *info
4382     l2tp_tunnel_notify(&l2tp_nl_family, info,
4383     tunnel, L2TP_CMD_TUNNEL_DELETE);
4384    
4385     - (void) l2tp_tunnel_delete(tunnel);
4386     + l2tp_tunnel_delete(tunnel);
4387    
4388     l2tp_tunnel_dec_refcount(tunnel);
4389    
4390     diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
4391     index 4f940d7eb2f7..b3245f9a37d1 100644
4392     --- a/net/netfilter/ipvs/ip_vs_ctl.c
4393     +++ b/net/netfilter/ipvs/ip_vs_ctl.c
4394     @@ -2034,12 +2034,16 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
4395     seq_puts(seq,
4396     " -> RemoteAddress:Port Forward Weight ActiveConn InActConn\n");
4397     } else {
4398     + struct net *net = seq_file_net(seq);
4399     + struct netns_ipvs *ipvs = net_ipvs(net);
4400     const struct ip_vs_service *svc = v;
4401     const struct ip_vs_iter *iter = seq->private;
4402     const struct ip_vs_dest *dest;
4403     struct ip_vs_scheduler *sched = rcu_dereference(svc->scheduler);
4404     char *sched_name = sched ? sched->name : "none";
4405    
4406     + if (svc->ipvs != ipvs)
4407     + return 0;
4408     if (iter->table == ip_vs_svc_table) {
4409     #ifdef CONFIG_IP_VS_IPV6
4410     if (svc->af == AF_INET6)
4411     diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
4412     index c4778cae58ef..444380f968f1 100644
4413     --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
4414     +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
4415     @@ -231,6 +231,7 @@ static int gssx_dec_linux_creds(struct xdr_stream *xdr,
4416     goto out_free_groups;
4417     creds->cr_group_info->gid[i] = kgid;
4418     }
4419     + groups_sort(creds->cr_group_info);
4420    
4421     return 0;
4422     out_free_groups:
4423     diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
4424     index 7b1ee5a0b03c..f41ffb22652c 100644
4425     --- a/net/sunrpc/auth_gss/svcauth_gss.c
4426     +++ b/net/sunrpc/auth_gss/svcauth_gss.c
4427     @@ -481,6 +481,7 @@ static int rsc_parse(struct cache_detail *cd,
4428     goto out;
4429     rsci.cred.cr_group_info->gid[i] = kgid;
4430     }
4431     + groups_sort(rsci.cred.cr_group_info);
4432    
4433     /* mech name */
4434     len = qword_get(&mesg, buf, mlen);
4435     diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
4436     index f81eaa8e0888..acb70d235e47 100644
4437     --- a/net/sunrpc/svcauth_unix.c
4438     +++ b/net/sunrpc/svcauth_unix.c
4439     @@ -520,6 +520,7 @@ static int unix_gid_parse(struct cache_detail *cd,
4440     ug.gi->gid[i] = kgid;
4441     }
4442    
4443     + groups_sort(ug.gi);
4444     ugp = unix_gid_lookup(cd, uid);
4445     if (ugp) {
4446     struct cache_head *ch;
4447     @@ -819,6 +820,7 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp)
4448     kgid_t kgid = make_kgid(&init_user_ns, svc_getnl(argv));
4449     cred->cr_group_info->gid[i] = kgid;
4450     }
4451     + groups_sort(cred->cr_group_info);
4452     if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) {
4453     *authp = rpc_autherr_badverf;
4454     return SVC_DENIED;
4455     diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
4456     index 898485e3ece4..8eb0c4f3b3e9 100644
4457     --- a/net/sunrpc/xprt.c
4458     +++ b/net/sunrpc/xprt.c
4459     @@ -1001,6 +1001,7 @@ void xprt_transmit(struct rpc_task *task)
4460     {
4461     struct rpc_rqst *req = task->tk_rqstp;
4462     struct rpc_xprt *xprt = req->rq_xprt;
4463     + unsigned int connect_cookie;
4464     int status, numreqs;
4465    
4466     dprintk("RPC: %5u xprt_transmit(%u)\n", task->tk_pid, req->rq_slen);
4467     @@ -1024,6 +1025,7 @@ void xprt_transmit(struct rpc_task *task)
4468     } else if (!req->rq_bytes_sent)
4469     return;
4470    
4471     + connect_cookie = xprt->connect_cookie;
4472     req->rq_xtime = ktime_get();
4473     status = xprt->ops->send_request(task);
4474     trace_xprt_transmit(xprt, req->rq_xid, status);
4475     @@ -1047,20 +1049,28 @@ void xprt_transmit(struct rpc_task *task)
4476     xprt->stat.bklog_u += xprt->backlog.qlen;
4477     xprt->stat.sending_u += xprt->sending.qlen;
4478     xprt->stat.pending_u += xprt->pending.qlen;
4479     + spin_unlock_bh(&xprt->transport_lock);
4480    
4481     - /* Don't race with disconnect */
4482     - if (!xprt_connected(xprt))
4483     - task->tk_status = -ENOTCONN;
4484     - else {
4485     + req->rq_connect_cookie = connect_cookie;
4486     + if (rpc_reply_expected(task) && !READ_ONCE(req->rq_reply_bytes_recvd)) {
4487     /*
4488     - * Sleep on the pending queue since
4489     - * we're expecting a reply.
4490     + * Sleep on the pending queue if we're expecting a reply.
4491     + * The spinlock ensures atomicity between the test of
4492     + * req->rq_reply_bytes_recvd, and the call to rpc_sleep_on().
4493     */
4494     - if (!req->rq_reply_bytes_recvd && rpc_reply_expected(task))
4495     + spin_lock(&xprt->recv_lock);
4496     + if (!req->rq_reply_bytes_recvd) {
4497     rpc_sleep_on(&xprt->pending, task, xprt_timer);
4498     - req->rq_connect_cookie = xprt->connect_cookie;
4499     + /*
4500     + * Send an extra queue wakeup call if the
4501     + * connection was dropped in case the call to
4502     + * rpc_sleep_on() raced.
4503     + */
4504     + if (!xprt_connected(xprt))
4505     + xprt_wake_pending_tasks(xprt, -ENOTCONN);
4506     + }
4507     + spin_unlock(&xprt->recv_lock);
4508     }
4509     - spin_unlock_bh(&xprt->transport_lock);
4510     }
4511    
4512     static void xprt_add_backlog(struct rpc_xprt *xprt, struct rpc_task *task)
4513     diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
4514     index c84e2b644e13..8cf5ccfe180d 100644
4515     --- a/net/sunrpc/xprtrdma/transport.c
4516     +++ b/net/sunrpc/xprtrdma/transport.c
4517     @@ -686,7 +686,7 @@ xprt_rdma_free(struct rpc_task *task)
4518     dprintk("RPC: %s: called on 0x%p\n", __func__, req->rl_reply);
4519    
4520     if (!list_empty(&req->rl_registered))
4521     - ia->ri_ops->ro_unmap_safe(r_xprt, req, !RPC_IS_ASYNC(task));
4522     + ia->ri_ops->ro_unmap_sync(r_xprt, &req->rl_registered);
4523     rpcrdma_unmap_sges(ia, req);
4524     rpcrdma_buffer_put(req);
4525     }
4526     diff --git a/samples/bpf/xdp1_user.c b/samples/bpf/xdp1_user.c
4527     index 2431c0321b71..fdaefe91801d 100644
4528     --- a/samples/bpf/xdp1_user.c
4529     +++ b/samples/bpf/xdp1_user.c
4530     @@ -14,6 +14,7 @@
4531     #include <string.h>
4532     #include <unistd.h>
4533     #include <libgen.h>
4534     +#include <sys/resource.h>
4535    
4536     #include "bpf_load.h"
4537     #include "bpf_util.h"
4538     @@ -69,6 +70,7 @@ static void usage(const char *prog)
4539    
4540     int main(int argc, char **argv)
4541     {
4542     + struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
4543     const char *optstr = "SN";
4544     char filename[256];
4545     int opt;
4546     @@ -91,6 +93,12 @@ int main(int argc, char **argv)
4547     usage(basename(argv[0]));
4548     return 1;
4549     }
4550     +
4551     + if (setrlimit(RLIMIT_MEMLOCK, &r)) {
4552     + perror("setrlimit(RLIMIT_MEMLOCK)");
4553     + return 1;
4554     + }
4555     +
4556     ifindex = strtoul(argv[optind], NULL, 0);
4557    
4558     snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
4559     diff --git a/sound/soc/intel/skylake/skl-sst-utils.c b/sound/soc/intel/skylake/skl-sst-utils.c
4560     index 369ef7ce981c..8ff89280d9fd 100644
4561     --- a/sound/soc/intel/skylake/skl-sst-utils.c
4562     +++ b/sound/soc/intel/skylake/skl-sst-utils.c
4563     @@ -251,6 +251,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
4564     struct uuid_module *module;
4565     struct firmware stripped_fw;
4566     unsigned int safe_file;
4567     + int ret = 0;
4568    
4569     /* Get the FW pointer to derive ADSP header */
4570     stripped_fw.data = fw->data;
4571     @@ -299,8 +300,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
4572    
4573     for (i = 0; i < num_entry; i++, mod_entry++) {
4574     module = kzalloc(sizeof(*module), GFP_KERNEL);
4575     - if (!module)
4576     - return -ENOMEM;
4577     + if (!module) {
4578     + ret = -ENOMEM;
4579     + goto free_uuid_list;
4580     + }
4581    
4582     uuid_bin = (uuid_le *)mod_entry->uuid.id;
4583     memcpy(&module->uuid, uuid_bin, sizeof(module->uuid));
4584     @@ -311,8 +314,8 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
4585     size = sizeof(int) * mod_entry->instance_max_count;
4586     module->instance_id = devm_kzalloc(ctx->dev, size, GFP_KERNEL);
4587     if (!module->instance_id) {
4588     - kfree(module);
4589     - return -ENOMEM;
4590     + ret = -ENOMEM;
4591     + goto free_uuid_list;
4592     }
4593    
4594     list_add_tail(&module->list, &skl->uuid_list);
4595     @@ -323,6 +326,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
4596     }
4597    
4598     return 0;
4599     +
4600     +free_uuid_list:
4601     + skl_freeup_uuid_list(skl);
4602     + return ret;
4603     }
4604    
4605     void skl_freeup_uuid_list(struct skl_sst *ctx)
4606     diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
4607     index fffc07e72627..2aef7c00cca1 100644
4608     --- a/sound/soc/sh/rcar/ssi.c
4609     +++ b/sound/soc/sh/rcar/ssi.c
4610     @@ -198,10 +198,15 @@ static u32 rsnd_ssi_run_mods(struct rsnd_dai_stream *io)
4611     {
4612     struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
4613     struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
4614     + u32 mods;
4615    
4616     - return rsnd_ssi_multi_slaves_runtime(io) |
4617     - 1 << rsnd_mod_id(ssi_mod) |
4618     - 1 << rsnd_mod_id(ssi_parent_mod);
4619     + mods = rsnd_ssi_multi_slaves_runtime(io) |
4620     + 1 << rsnd_mod_id(ssi_mod);
4621     +
4622     + if (ssi_parent_mod)
4623     + mods |= 1 << rsnd_mod_id(ssi_parent_mod);
4624     +
4625     + return mods;
4626     }
4627    
4628     u32 rsnd_ssi_multi_slaves_runtime(struct rsnd_dai_stream *io)
4629     diff --git a/tools/usb/usbip/libsrc/vhci_driver.c b/tools/usb/usbip/libsrc/vhci_driver.c
4630     index 8a1cd1616de4..d1fc0f9f00fb 100644
4631     --- a/tools/usb/usbip/libsrc/vhci_driver.c
4632     +++ b/tools/usb/usbip/libsrc/vhci_driver.c
4633     @@ -50,14 +50,14 @@ static int parse_status(const char *value)
4634    
4635     while (*c != '\0') {
4636     int port, status, speed, devid;
4637     - unsigned long socket;
4638     + int sockfd;
4639     char lbusid[SYSFS_BUS_ID_SIZE];
4640     struct usbip_imported_device *idev;
4641     char hub[3];
4642    
4643     - ret = sscanf(c, "%2s %d %d %d %x %lx %31s\n",
4644     + ret = sscanf(c, "%2s %d %d %d %x %u %31s\n",
4645     hub, &port, &status, &speed,
4646     - &devid, &socket, lbusid);
4647     + &devid, &sockfd, lbusid);
4648    
4649     if (ret < 5) {
4650     dbg("sscanf failed: %d", ret);
4651     @@ -66,7 +66,7 @@ static int parse_status(const char *value)
4652    
4653     dbg("hub %s port %d status %d speed %d devid %x",
4654     hub, port, status, speed, devid);
4655     - dbg("socket %lx lbusid %s", socket, lbusid);
4656     + dbg("sockfd %u lbusid %s", sockfd, lbusid);
4657    
4658     /* if a device is connected, look at it */
4659     idev = &vhci_driver->idev[port];