Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0177-4.19.78-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3474 - (hide annotations) (download)
Tue Oct 29 10:31:33 2019 UTC (5 years ago) by niro
File size: 132141 byte(s)
-linux-4.19.78
1 niro 3474 diff --git a/Makefile b/Makefile
2     index aeabc6459acc..440c5b5c4f4b 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 19
9     -SUBLEVEL = 77
10     +SUBLEVEL = 78
11     EXTRAVERSION =
12     NAME = "People's Front"
13    
14     diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
15     index 51794c7fa6d5..185e552f1461 100644
16     --- a/arch/arm/Kconfig
17     +++ b/arch/arm/Kconfig
18     @@ -1586,8 +1586,9 @@ config ARM_PATCH_IDIV
19     code to do integer division.
20    
21     config AEABI
22     - bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && !CPU_V7M && !CPU_V6 && !CPU_V6K
23     - default CPU_V7 || CPU_V7M || CPU_V6 || CPU_V6K
24     + bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && \
25     + !CPU_V7M && !CPU_V6 && !CPU_V6K && !CC_IS_CLANG
26     + default CPU_V7 || CPU_V7M || CPU_V6 || CPU_V6K || CC_IS_CLANG
27     help
28     This option allows for the kernel to be compiled using the latest
29     ARM ABI (aka EABI). This is only useful if you are using a user
30     diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
31     index 3232afb6fdc0..a9ee0d9dc740 100644
32     --- a/arch/arm/mm/fault.c
33     +++ b/arch/arm/mm/fault.c
34     @@ -216,7 +216,7 @@ static inline bool access_error(unsigned int fsr, struct vm_area_struct *vma)
35     {
36     unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;
37    
38     - if (fsr & FSR_WRITE)
39     + if ((fsr & FSR_WRITE) && !(fsr & FSR_CM))
40     mask = VM_WRITE;
41     if (fsr & FSR_LNX_PF)
42     mask = VM_EXEC;
43     @@ -287,7 +287,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
44    
45     if (user_mode(regs))
46     flags |= FAULT_FLAG_USER;
47     - if (fsr & FSR_WRITE)
48     + if ((fsr & FSR_WRITE) && !(fsr & FSR_CM))
49     flags |= FAULT_FLAG_WRITE;
50    
51     /*
52     diff --git a/arch/arm/mm/fault.h b/arch/arm/mm/fault.h
53     index c063708fa503..9ecc2097a87a 100644
54     --- a/arch/arm/mm/fault.h
55     +++ b/arch/arm/mm/fault.h
56     @@ -6,6 +6,7 @@
57     * Fault status register encodings. We steal bit 31 for our own purposes.
58     */
59     #define FSR_LNX_PF (1 << 31)
60     +#define FSR_CM (1 << 13)
61     #define FSR_WRITE (1 << 11)
62     #define FSR_FS4 (1 << 10)
63     #define FSR_FS3_0 (15)
64     diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
65     index f866870db749..0b94b674aa91 100644
66     --- a/arch/arm/mm/mmap.c
67     +++ b/arch/arm/mm/mmap.c
68     @@ -18,8 +18,9 @@
69     (((pgoff)<<PAGE_SHIFT) & (SHMLBA-1)))
70    
71     /* gap between mmap and stack */
72     -#define MIN_GAP (128*1024*1024UL)
73     -#define MAX_GAP ((TASK_SIZE)/6*5)
74     +#define MIN_GAP (128*1024*1024UL)
75     +#define MAX_GAP ((STACK_TOP)/6*5)
76     +#define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12))
77    
78     static int mmap_is_legacy(struct rlimit *rlim_stack)
79     {
80     @@ -35,13 +36,22 @@ static int mmap_is_legacy(struct rlimit *rlim_stack)
81     static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
82     {
83     unsigned long gap = rlim_stack->rlim_cur;
84     + unsigned long pad = stack_guard_gap;
85     +
86     + /* Account for stack randomization if necessary */
87     + if (current->flags & PF_RANDOMIZE)
88     + pad += (STACK_RND_MASK << PAGE_SHIFT);
89     +
90     + /* Values close to RLIM_INFINITY can overflow. */
91     + if (gap + pad > gap)
92     + gap += pad;
93    
94     if (gap < MIN_GAP)
95     gap = MIN_GAP;
96     else if (gap > MAX_GAP)
97     gap = MAX_GAP;
98    
99     - return PAGE_ALIGN(TASK_SIZE - gap - rnd);
100     + return PAGE_ALIGN(STACK_TOP - gap - rnd);
101     }
102    
103     /*
104     diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
105     index e46a6a446cdd..70e560cf8ca0 100644
106     --- a/arch/arm/mm/mmu.c
107     +++ b/arch/arm/mm/mmu.c
108     @@ -1175,6 +1175,22 @@ void __init adjust_lowmem_bounds(void)
109     */
110     vmalloc_limit = (u64)(uintptr_t)vmalloc_min - PAGE_OFFSET + PHYS_OFFSET;
111    
112     + /*
113     + * The first usable region must be PMD aligned. Mark its start
114     + * as MEMBLOCK_NOMAP if it isn't
115     + */
116     + for_each_memblock(memory, reg) {
117     + if (!memblock_is_nomap(reg)) {
118     + if (!IS_ALIGNED(reg->base, PMD_SIZE)) {
119     + phys_addr_t len;
120     +
121     + len = round_up(reg->base, PMD_SIZE) - reg->base;
122     + memblock_mark_nomap(reg->base, len);
123     + }
124     + break;
125     + }
126     + }
127     +
128     for_each_memblock(memory, reg) {
129     phys_addr_t block_start = reg->base;
130     phys_addr_t block_end = reg->base + reg->size;
131     diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h
132     index 3b0938281541..d8b01c7c9cd3 100644
133     --- a/arch/arm64/include/asm/cmpxchg.h
134     +++ b/arch/arm64/include/asm/cmpxchg.h
135     @@ -74,7 +74,7 @@ __XCHG_CASE( , , mb_8, dmb ish, nop, , a, l, "memory")
136     #undef __XCHG_CASE
137    
138     #define __XCHG_GEN(sfx) \
139     -static inline unsigned long __xchg##sfx(unsigned long x, \
140     +static __always_inline unsigned long __xchg##sfx(unsigned long x, \
141     volatile void *ptr, \
142     int size) \
143     { \
144     @@ -116,7 +116,7 @@ __XCHG_GEN(_mb)
145     #define xchg(...) __xchg_wrapper( _mb, __VA_ARGS__)
146    
147     #define __CMPXCHG_GEN(sfx) \
148     -static inline unsigned long __cmpxchg##sfx(volatile void *ptr, \
149     +static __always_inline unsigned long __cmpxchg##sfx(volatile void *ptr, \
150     unsigned long old, \
151     unsigned long new, \
152     int size) \
153     @@ -223,7 +223,7 @@ __CMPWAIT_CASE( , , 8);
154     #undef __CMPWAIT_CASE
155    
156     #define __CMPWAIT_GEN(sfx) \
157     -static inline void __cmpwait##sfx(volatile void *ptr, \
158     +static __always_inline void __cmpwait##sfx(volatile void *ptr, \
159     unsigned long val, \
160     int size) \
161     { \
162     diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c
163     index 842c8a5fcd53..157f2caa1351 100644
164     --- a/arch/arm64/mm/mmap.c
165     +++ b/arch/arm64/mm/mmap.c
166     @@ -65,7 +65,11 @@ unsigned long arch_mmap_rnd(void)
167     static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
168     {
169     unsigned long gap = rlim_stack->rlim_cur;
170     - unsigned long pad = (STACK_RND_MASK << PAGE_SHIFT) + stack_guard_gap;
171     + unsigned long pad = stack_guard_gap;
172     +
173     + /* Account for stack randomization if necessary */
174     + if (current->flags & PF_RANDOMIZE)
175     + pad += (STACK_RND_MASK << PAGE_SHIFT);
176    
177     /* Values close to RLIM_INFINITY can overflow. */
178     if (gap + pad > gap)
179     diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
180     index 01df9ad62fb8..1bb9448777c5 100644
181     --- a/arch/mips/include/asm/mipsregs.h
182     +++ b/arch/mips/include/asm/mipsregs.h
183     @@ -688,6 +688,9 @@
184     #define MIPS_CONF7_IAR (_ULCAST_(1) << 10)
185     #define MIPS_CONF7_AR (_ULCAST_(1) << 16)
186    
187     +/* Ingenic Config7 bits */
188     +#define MIPS_CONF7_BTB_LOOP_EN (_ULCAST_(1) << 4)
189     +
190     /* Config7 Bits specific to MIPS Technologies. */
191    
192     /* Performance counters implemented Per TC */
193     @@ -2774,6 +2777,7 @@ __BUILD_SET_C0(status)
194     __BUILD_SET_C0(cause)
195     __BUILD_SET_C0(config)
196     __BUILD_SET_C0(config5)
197     +__BUILD_SET_C0(config7)
198     __BUILD_SET_C0(intcontrol)
199     __BUILD_SET_C0(intctl)
200     __BUILD_SET_C0(srsmap)
201     diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
202     index d535fc706a8b..25cd8737e7fe 100644
203     --- a/arch/mips/kernel/cpu-probe.c
204     +++ b/arch/mips/kernel/cpu-probe.c
205     @@ -1879,6 +1879,13 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)
206     c->cputype = CPU_JZRISC;
207     c->writecombine = _CACHE_UNCACHED_ACCELERATED;
208     __cpu_name[cpu] = "Ingenic JZRISC";
209     + /*
210     + * The XBurst core by default attempts to avoid branch target
211     + * buffer lookups by detecting & special casing loops. This
212     + * feature will cause BogoMIPS and lpj calculate in error.
213     + * Set cp0 config7 bit 4 to disable this feature.
214     + */
215     + set_c0_config7(MIPS_CONF7_BTB_LOOP_EN);
216     break;
217     default:
218     panic("Unknown Ingenic Processor ID!");
219     diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
220     index 1b705fb2f10c..233033f99d8f 100644
221     --- a/arch/mips/mm/mmap.c
222     +++ b/arch/mips/mm/mmap.c
223     @@ -21,8 +21,9 @@ unsigned long shm_align_mask = PAGE_SIZE - 1; /* Sane caches */
224     EXPORT_SYMBOL(shm_align_mask);
225    
226     /* gap between mmap and stack */
227     -#define MIN_GAP (128*1024*1024UL)
228     -#define MAX_GAP ((TASK_SIZE)/6*5)
229     +#define MIN_GAP (128*1024*1024UL)
230     +#define MAX_GAP ((TASK_SIZE)/6*5)
231     +#define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12))
232    
233     static int mmap_is_legacy(struct rlimit *rlim_stack)
234     {
235     @@ -38,6 +39,15 @@ static int mmap_is_legacy(struct rlimit *rlim_stack)
236     static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
237     {
238     unsigned long gap = rlim_stack->rlim_cur;
239     + unsigned long pad = stack_guard_gap;
240     +
241     + /* Account for stack randomization if necessary */
242     + if (current->flags & PF_RANDOMIZE)
243     + pad += (STACK_RND_MASK << PAGE_SHIFT);
244     +
245     + /* Values close to RLIM_INFINITY can overflow. */
246     + if (gap + pad > gap)
247     + gap += pad;
248    
249     if (gap < MIN_GAP)
250     gap = MIN_GAP;
251     diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
252     index 8c4fda52b91d..355f8eadb1cd 100644
253     --- a/arch/mips/mm/tlbex.c
254     +++ b/arch/mips/mm/tlbex.c
255     @@ -630,7 +630,7 @@ static __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
256     return;
257     }
258    
259     - if (cpu_has_rixi && _PAGE_NO_EXEC) {
260     + if (cpu_has_rixi && !!_PAGE_NO_EXEC) {
261     if (fill_includes_sw_bits) {
262     UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL));
263     } else {
264     diff --git a/arch/powerpc/include/asm/futex.h b/arch/powerpc/include/asm/futex.h
265     index 94542776a62d..2a7b01f97a56 100644
266     --- a/arch/powerpc/include/asm/futex.h
267     +++ b/arch/powerpc/include/asm/futex.h
268     @@ -59,8 +59,7 @@ static inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval,
269    
270     pagefault_enable();
271    
272     - if (!ret)
273     - *oval = oldval;
274     + *oval = oldval;
275    
276     return ret;
277     }
278     diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
279     index 67619b4b3f96..110eba400de7 100644
280     --- a/arch/powerpc/kernel/eeh_driver.c
281     +++ b/arch/powerpc/kernel/eeh_driver.c
282     @@ -811,6 +811,10 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
283     pr_warn("EEH: This PCI device has failed %d times in the last hour and will be permanently disabled after %d failures.\n",
284     pe->freeze_count, eeh_max_freezes);
285    
286     + eeh_for_each_pe(pe, tmp_pe)
287     + eeh_pe_for_each_dev(tmp_pe, edev, tmp)
288     + edev->mode &= ~EEH_DEV_NO_HANDLER;
289     +
290     /* Walk the various device drivers attached to this slot through
291     * a reset sequence, giving each an opportunity to do what it needs
292     * to accomplish the reset. Each child gets a report of the
293     @@ -1004,7 +1008,8 @@ final:
294     */
295     void eeh_handle_special_event(void)
296     {
297     - struct eeh_pe *pe, *phb_pe;
298     + struct eeh_pe *pe, *phb_pe, *tmp_pe;
299     + struct eeh_dev *edev, *tmp_edev;
300     struct pci_bus *bus;
301     struct pci_controller *hose;
302     unsigned long flags;
303     @@ -1075,6 +1080,10 @@ void eeh_handle_special_event(void)
304     (phb_pe->state & EEH_PE_RECOVERING))
305     continue;
306    
307     + eeh_for_each_pe(pe, tmp_pe)
308     + eeh_pe_for_each_dev(tmp_pe, edev, tmp_edev)
309     + edev->mode &= ~EEH_DEV_NO_HANDLER;
310     +
311     /* Notify all devices to be down */
312     eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
313     eeh_set_channel_state(pe, pci_channel_io_perm_failure);
314     diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
315     index 06cc77813dbb..90af86f143a9 100644
316     --- a/arch/powerpc/kernel/exceptions-64s.S
317     +++ b/arch/powerpc/kernel/exceptions-64s.S
318     @@ -520,6 +520,10 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
319     RFI_TO_USER_OR_KERNEL
320     9:
321     /* Deliver the machine check to host kernel in V mode. */
322     +BEGIN_FTR_SECTION
323     + ld r10,ORIG_GPR3(r1)
324     + mtspr SPRN_CFAR,r10
325     +END_FTR_SECTION_IFSET(CPU_FTR_CFAR)
326     MACHINE_CHECK_HANDLER_WINDUP
327     b machine_check_pSeries
328    
329     diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
330     index 8afd146bc9c7..9e41a9de4323 100644
331     --- a/arch/powerpc/kernel/rtas.c
332     +++ b/arch/powerpc/kernel/rtas.c
333     @@ -875,15 +875,17 @@ static int rtas_cpu_state_change_mask(enum rtas_cpu_state state,
334     return 0;
335    
336     for_each_cpu(cpu, cpus) {
337     + struct device *dev = get_cpu_device(cpu);
338     +
339     switch (state) {
340     case DOWN:
341     - cpuret = cpu_down(cpu);
342     + cpuret = device_offline(dev);
343     break;
344     case UP:
345     - cpuret = cpu_up(cpu);
346     + cpuret = device_online(dev);
347     break;
348     }
349     - if (cpuret) {
350     + if (cpuret < 0) {
351     pr_debug("%s: cpu_%s for cpu#%d returned %d.\n",
352     __func__,
353     ((state == UP) ? "up" : "down"),
354     @@ -972,6 +974,8 @@ int rtas_ibm_suspend_me(u64 handle)
355     data.token = rtas_token("ibm,suspend-me");
356     data.complete = &done;
357    
358     + lock_device_hotplug();
359     +
360     /* All present CPUs must be online */
361     cpumask_andnot(offline_mask, cpu_present_mask, cpu_online_mask);
362     cpuret = rtas_online_cpus_mask(offline_mask);
363     @@ -1003,6 +1007,7 @@ int rtas_ibm_suspend_me(u64 handle)
364     __func__);
365    
366     out:
367     + unlock_device_hotplug();
368     free_cpumask_var(offline_mask);
369     return atomic_read(&data.error);
370     }
371     diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
372     index 02fe6d020174..d5f351f02c15 100644
373     --- a/arch/powerpc/kernel/traps.c
374     +++ b/arch/powerpc/kernel/traps.c
375     @@ -399,6 +399,7 @@ void system_reset_exception(struct pt_regs *regs)
376     if (debugger(regs))
377     goto out;
378    
379     + kmsg_dump(KMSG_DUMP_OOPS);
380     /*
381     * A system reset is a request to dump, so we always send
382     * it through the crashdump code (if fadump or kdump are
383     diff --git a/arch/powerpc/platforms/powernv/pci-ioda-tce.c b/arch/powerpc/platforms/powernv/pci-ioda-tce.c
384     index f5adb6b756f7..29e66d6e5763 100644
385     --- a/arch/powerpc/platforms/powernv/pci-ioda-tce.c
386     +++ b/arch/powerpc/platforms/powernv/pci-ioda-tce.c
387     @@ -36,7 +36,8 @@ static __be64 *pnv_alloc_tce_level(int nid, unsigned int shift)
388     struct page *tce_mem = NULL;
389     __be64 *addr;
390    
391     - tce_mem = alloc_pages_node(nid, GFP_KERNEL, shift - PAGE_SHIFT);
392     + tce_mem = alloc_pages_node(nid, GFP_ATOMIC | __GFP_NOWARN,
393     + shift - PAGE_SHIFT);
394     if (!tce_mem) {
395     pr_err("Failed to allocate a TCE memory, level shift=%d\n",
396     shift);
397     @@ -161,6 +162,9 @@ void pnv_tce_free(struct iommu_table *tbl, long index, long npages)
398    
399     if (ptce)
400     *ptce = cpu_to_be64(0);
401     + else
402     + /* Skip the rest of the level */
403     + i |= tbl->it_level_size - 1;
404     }
405     }
406    
407     @@ -260,7 +264,6 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
408     unsigned int table_shift = max_t(unsigned int, entries_shift + 3,
409     PAGE_SHIFT);
410     const unsigned long tce_table_size = 1UL << table_shift;
411     - unsigned int tmplevels = levels;
412    
413     if (!levels || (levels > POWERNV_IOMMU_MAX_LEVELS))
414     return -EINVAL;
415     @@ -268,9 +271,6 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
416     if (!is_power_of_2(window_size))
417     return -EINVAL;
418    
419     - if (alloc_userspace_copy && (window_size > (1ULL << 32)))
420     - tmplevels = 1;
421     -
422     /* Adjust direct table size from window_size and levels */
423     entries_shift = (entries_shift + levels - 1) / levels;
424     level_shift = entries_shift + 3;
425     @@ -281,7 +281,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
426    
427     /* Allocate TCE table */
428     addr = pnv_pci_ioda2_table_do_alloc_pages(nid, level_shift,
429     - tmplevels, tce_table_size, &offset, &total_allocated);
430     + 1, tce_table_size, &offset, &total_allocated);
431    
432     /* addr==NULL means that the first level allocation failed */
433     if (!addr)
434     @@ -292,18 +292,18 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
435     * we did not allocate as much as we wanted,
436     * release partially allocated table.
437     */
438     - if (tmplevels == levels && offset < tce_table_size)
439     + if (levels == 1 && offset < tce_table_size)
440     goto free_tces_exit;
441    
442     /* Allocate userspace view of the TCE table */
443     if (alloc_userspace_copy) {
444     offset = 0;
445     uas = pnv_pci_ioda2_table_do_alloc_pages(nid, level_shift,
446     - tmplevels, tce_table_size, &offset,
447     + 1, tce_table_size, &offset,
448     &total_allocated_uas);
449     if (!uas)
450     goto free_tces_exit;
451     - if (tmplevels == levels && (offset < tce_table_size ||
452     + if (levels == 1 && (offset < tce_table_size ||
453     total_allocated_uas != total_allocated))
454     goto free_uas_exit;
455     }
456     @@ -318,7 +318,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
457    
458     pr_debug("Created TCE table: ws=%08llx ts=%lx @%08llx base=%lx uas=%p levels=%d/%d\n",
459     window_size, tce_table_size, bus_offset, tbl->it_base,
460     - tbl->it_userspace, tmplevels, levels);
461     + tbl->it_userspace, 1, levels);
462    
463     return 0;
464    
465     diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
466     index 8b37b28e3831..e302aa092d4f 100644
467     --- a/arch/powerpc/platforms/powernv/pci.h
468     +++ b/arch/powerpc/platforms/powernv/pci.h
469     @@ -243,7 +243,7 @@ extern void pnv_npu_release_ownership(struct pnv_ioda_pe *npe);
470     extern int pnv_npu2_init(struct pnv_phb *phb);
471    
472     /* pci-ioda-tce.c */
473     -#define POWERNV_IOMMU_DEFAULT_LEVELS 1
474     +#define POWERNV_IOMMU_DEFAULT_LEVELS 2
475     #define POWERNV_IOMMU_MAX_LEVELS 5
476    
477     extern int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
478     diff --git a/arch/powerpc/platforms/pseries/mobility.c b/arch/powerpc/platforms/pseries/mobility.c
479     index 7b60fcf04dc4..e4ea71383383 100644
480     --- a/arch/powerpc/platforms/pseries/mobility.c
481     +++ b/arch/powerpc/platforms/pseries/mobility.c
482     @@ -12,6 +12,7 @@
483     #include <linux/cpu.h>
484     #include <linux/kernel.h>
485     #include <linux/kobject.h>
486     +#include <linux/sched.h>
487     #include <linux/smp.h>
488     #include <linux/stat.h>
489     #include <linux/completion.h>
490     @@ -209,7 +210,11 @@ static int update_dt_node(__be32 phandle, s32 scope)
491    
492     prop_data += vd;
493     }
494     +
495     + cond_resched();
496     }
497     +
498     + cond_resched();
499     } while (rtas_rc == 1);
500    
501     of_node_put(dn);
502     @@ -318,8 +323,12 @@ int pseries_devicetree_update(s32 scope)
503     add_dt_node(phandle, drc_index);
504     break;
505     }
506     +
507     + cond_resched();
508     }
509     }
510     +
511     + cond_resched();
512     } while (rc == 1);
513    
514     kfree(rtas_buf);
515     diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
516     index ba1791fd3234..67f49159ea70 100644
517     --- a/arch/powerpc/platforms/pseries/setup.c
518     +++ b/arch/powerpc/platforms/pseries/setup.c
519     @@ -325,6 +325,9 @@ static void pseries_lpar_idle(void)
520     * low power mode by ceding processor to hypervisor
521     */
522    
523     + if (!prep_irq_for_idle())
524     + return;
525     +
526     /* Indicate to hypervisor that we are idle. */
527     get_lppaca()->idle = 1;
528    
529     diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
530     index 74cfc1be04d6..bb5db7bfd853 100644
531     --- a/arch/powerpc/xmon/xmon.c
532     +++ b/arch/powerpc/xmon/xmon.c
533     @@ -2497,13 +2497,16 @@ static void dump_pacas(void)
534     static void dump_one_xive(int cpu)
535     {
536     unsigned int hwid = get_hard_smp_processor_id(cpu);
537     + bool hv = cpu_has_feature(CPU_FTR_HVMODE);
538    
539     - opal_xive_dump(XIVE_DUMP_TM_HYP, hwid);
540     - opal_xive_dump(XIVE_DUMP_TM_POOL, hwid);
541     - opal_xive_dump(XIVE_DUMP_TM_OS, hwid);
542     - opal_xive_dump(XIVE_DUMP_TM_USER, hwid);
543     - opal_xive_dump(XIVE_DUMP_VP, hwid);
544     - opal_xive_dump(XIVE_DUMP_EMU_STATE, hwid);
545     + if (hv) {
546     + opal_xive_dump(XIVE_DUMP_TM_HYP, hwid);
547     + opal_xive_dump(XIVE_DUMP_TM_POOL, hwid);
548     + opal_xive_dump(XIVE_DUMP_TM_OS, hwid);
549     + opal_xive_dump(XIVE_DUMP_TM_USER, hwid);
550     + opal_xive_dump(XIVE_DUMP_VP, hwid);
551     + opal_xive_dump(XIVE_DUMP_EMU_STATE, hwid);
552     + }
553    
554     if (setjmp(bus_error_jmp) != 0) {
555     catch_memory_errors = 0;
556     diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
557     index c681329fdeec..e4d17d9ea93d 100644
558     --- a/arch/s390/hypfs/inode.c
559     +++ b/arch/s390/hypfs/inode.c
560     @@ -269,7 +269,7 @@ static int hypfs_show_options(struct seq_file *s, struct dentry *root)
561     static int hypfs_fill_super(struct super_block *sb, void *data, int silent)
562     {
563     struct inode *root_inode;
564     - struct dentry *root_dentry;
565     + struct dentry *root_dentry, *update_file;
566     int rc = 0;
567     struct hypfs_sb_info *sbi;
568    
569     @@ -300,9 +300,10 @@ static int hypfs_fill_super(struct super_block *sb, void *data, int silent)
570     rc = hypfs_diag_create_files(root_dentry);
571     if (rc)
572     return rc;
573     - sbi->update_file = hypfs_create_update_file(root_dentry);
574     - if (IS_ERR(sbi->update_file))
575     - return PTR_ERR(sbi->update_file);
576     + update_file = hypfs_create_update_file(root_dentry);
577     + if (IS_ERR(update_file))
578     + return PTR_ERR(update_file);
579     + sbi->update_file = update_file;
580     hypfs_update_update(sb);
581     pr_info("Hypervisor filesystem mounted\n");
582     return 0;
583     diff --git a/block/mq-deadline.c b/block/mq-deadline.c
584     index d5e21ce44d2c..69094d641062 100644
585     --- a/block/mq-deadline.c
586     +++ b/block/mq-deadline.c
587     @@ -376,13 +376,6 @@ done:
588     * hardware queue, but we may return a request that is for a
589     * different hardware queue. This is because mq-deadline has shared
590     * state for all hardware queues, in terms of sorting, FIFOs, etc.
591     - *
592     - * For a zoned block device, __dd_dispatch_request() may return NULL
593     - * if all the queued write requests are directed at zones that are already
594     - * locked due to on-going write requests. In this case, make sure to mark
595     - * the queue as needing a restart to ensure that the queue is run again
596     - * and the pending writes dispatched once the target zones for the ongoing
597     - * write requests are unlocked in dd_finish_request().
598     */
599     static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
600     {
601     @@ -391,9 +384,6 @@ static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
602    
603     spin_lock(&dd->lock);
604     rq = __dd_dispatch_request(dd);
605     - if (!rq && blk_queue_is_zoned(hctx->queue) &&
606     - !list_empty(&dd->fifo_list[WRITE]))
607     - blk_mq_sched_mark_restart_hctx(hctx);
608     spin_unlock(&dd->lock);
609    
610     return rq;
611     @@ -559,6 +549,13 @@ static void dd_prepare_request(struct request *rq, struct bio *bio)
612     * spinlock so that the zone is never unlocked while deadline_fifo_request()
613     * or deadline_next_request() are executing. This function is called for
614     * all requests, whether or not these requests complete successfully.
615     + *
616     + * For a zoned block device, __dd_dispatch_request() may have stopped
617     + * dispatching requests if all the queued requests are write requests directed
618     + * at zones that are already locked due to on-going write requests. To ensure
619     + * write request dispatch progress in this case, mark the queue as needing a
620     + * restart to ensure that the queue is run again after completion of the
621     + * request and zones being unlocked.
622     */
623     static void dd_finish_request(struct request *rq)
624     {
625     @@ -570,6 +567,12 @@ static void dd_finish_request(struct request *rq)
626    
627     spin_lock_irqsave(&dd->zone_lock, flags);
628     blk_req_zone_write_unlock(rq);
629     + if (!list_empty(&dd->fifo_list[WRITE])) {
630     + struct blk_mq_hw_ctx *hctx;
631     +
632     + hctx = blk_mq_map_queue(q, rq->mq_ctx->cpu);
633     + blk_mq_sched_mark_restart_hctx(hctx);
634     + }
635     spin_unlock_irqrestore(&dd->zone_lock, flags);
636     }
637     }
638     diff --git a/drivers/base/regmap/Kconfig b/drivers/base/regmap/Kconfig
639     index 6ad5ef48b61e..8cd2ac650b50 100644
640     --- a/drivers/base/regmap/Kconfig
641     +++ b/drivers/base/regmap/Kconfig
642     @@ -44,7 +44,7 @@ config REGMAP_IRQ
643    
644     config REGMAP_SOUNDWIRE
645     tristate
646     - depends on SOUNDWIRE_BUS
647     + depends on SOUNDWIRE
648    
649     config REGMAP_SCCB
650     tristate
651     diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
652     index 6f1d25c1eb64..0bc344d22f01 100644
653     --- a/drivers/block/pktcdvd.c
654     +++ b/drivers/block/pktcdvd.c
655     @@ -2596,7 +2596,6 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
656     if (ret)
657     return ret;
658     if (!blk_queue_scsi_passthrough(bdev_get_queue(bdev))) {
659     - WARN_ONCE(true, "Attempt to register a non-SCSI queue\n");
660     blkdev_put(bdev, FMODE_READ | FMODE_NDELAY);
661     return -EINVAL;
662     }
663     diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
664     index 75e5006f395a..006d76525678 100644
665     --- a/drivers/char/ipmi/ipmi_si_intf.c
666     +++ b/drivers/char/ipmi/ipmi_si_intf.c
667     @@ -221,6 +221,9 @@ struct smi_info {
668     */
669     bool irq_enable_broken;
670    
671     + /* Is the driver in maintenance mode? */
672     + bool in_maintenance_mode;
673     +
674     /*
675     * Did we get an attention that we did not handle?
676     */
677     @@ -1013,11 +1016,20 @@ static int ipmi_thread(void *data)
678     spin_unlock_irqrestore(&(smi_info->si_lock), flags);
679     busy_wait = ipmi_thread_busy_wait(smi_result, smi_info,
680     &busy_until);
681     - if (smi_result == SI_SM_CALL_WITHOUT_DELAY)
682     + if (smi_result == SI_SM_CALL_WITHOUT_DELAY) {
683     ; /* do nothing */
684     - else if (smi_result == SI_SM_CALL_WITH_DELAY && busy_wait)
685     - schedule();
686     - else if (smi_result == SI_SM_IDLE) {
687     + } else if (smi_result == SI_SM_CALL_WITH_DELAY && busy_wait) {
688     + /*
689     + * In maintenance mode we run as fast as
690     + * possible to allow firmware updates to
691     + * complete as fast as possible, but normally
692     + * don't bang on the scheduler.
693     + */
694     + if (smi_info->in_maintenance_mode)
695     + schedule();
696     + else
697     + usleep_range(100, 200);
698     + } else if (smi_result == SI_SM_IDLE) {
699     if (atomic_read(&smi_info->need_watch)) {
700     schedule_timeout_interruptible(100);
701     } else {
702     @@ -1025,8 +1037,9 @@ static int ipmi_thread(void *data)
703     __set_current_state(TASK_INTERRUPTIBLE);
704     schedule();
705     }
706     - } else
707     + } else {
708     schedule_timeout_interruptible(1);
709     + }
710     }
711     return 0;
712     }
713     @@ -1201,6 +1214,7 @@ static void set_maintenance_mode(void *send_info, bool enable)
714    
715     if (!enable)
716     atomic_set(&smi_info->req_events, 0);
717     + smi_info->in_maintenance_mode = enable;
718     }
719    
720     static void shutdown_smi(void *send_info);
721     diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
722     index 46caadca916a..0b01eb7b14e5 100644
723     --- a/drivers/char/tpm/tpm-chip.c
724     +++ b/drivers/char/tpm/tpm-chip.c
725     @@ -187,12 +187,13 @@ static int tpm_class_shutdown(struct device *dev)
726     {
727     struct tpm_chip *chip = container_of(dev, struct tpm_chip, dev);
728    
729     + down_write(&chip->ops_sem);
730     if (chip->flags & TPM_CHIP_FLAG_TPM2) {
731     - down_write(&chip->ops_sem);
732     tpm2_shutdown(chip, TPM2_SU_CLEAR);
733     chip->ops = NULL;
734     - up_write(&chip->ops_sem);
735     }
736     + chip->ops = NULL;
737     + up_write(&chip->ops_sem);
738    
739     return 0;
740     }
741     diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
742     index 83a77a445538..177a60e5c6ec 100644
743     --- a/drivers/char/tpm/tpm-sysfs.c
744     +++ b/drivers/char/tpm/tpm-sysfs.c
745     @@ -39,7 +39,6 @@ static ssize_t pubek_show(struct device *dev, struct device_attribute *attr,
746     {
747     struct tpm_buf tpm_buf;
748     struct tpm_readpubek_out *out;
749     - ssize_t rc;
750     int i;
751     char *str = buf;
752     struct tpm_chip *chip = to_tpm_chip(dev);
753     @@ -47,19 +46,18 @@ static ssize_t pubek_show(struct device *dev, struct device_attribute *attr,
754    
755     memset(&anti_replay, 0, sizeof(anti_replay));
756    
757     - rc = tpm_buf_init(&tpm_buf, TPM_TAG_RQU_COMMAND, TPM_ORD_READPUBEK);
758     - if (rc)
759     - return rc;
760     + if (tpm_try_get_ops(chip))
761     + return 0;
762     +
763     + if (tpm_buf_init(&tpm_buf, TPM_TAG_RQU_COMMAND, TPM_ORD_READPUBEK))
764     + goto out_ops;
765    
766     tpm_buf_append(&tpm_buf, anti_replay, sizeof(anti_replay));
767    
768     - rc = tpm_transmit_cmd(chip, NULL, tpm_buf.data, PAGE_SIZE,
769     + if (tpm_transmit_cmd(chip, NULL, tpm_buf.data, PAGE_SIZE,
770     READ_PUBEK_RESULT_MIN_BODY_SIZE, 0,
771     - "attempting to read the PUBEK");
772     - if (rc) {
773     - tpm_buf_destroy(&tpm_buf);
774     - return 0;
775     - }
776     + "attempting to read the PUBEK"))
777     + goto out_buf;
778    
779     out = (struct tpm_readpubek_out *)&tpm_buf.data[10];
780     str +=
781     @@ -90,9 +88,11 @@ static ssize_t pubek_show(struct device *dev, struct device_attribute *attr,
782     str += sprintf(str, "\n");
783     }
784    
785     - rc = str - buf;
786     +out_buf:
787     tpm_buf_destroy(&tpm_buf);
788     - return rc;
789     +out_ops:
790     + tpm_put_ops(chip);
791     + return str - buf;
792     }
793     static DEVICE_ATTR_RO(pubek);
794    
795     @@ -106,12 +106,16 @@ static ssize_t pcrs_show(struct device *dev, struct device_attribute *attr,
796     char *str = buf;
797     struct tpm_chip *chip = to_tpm_chip(dev);
798    
799     - rc = tpm_getcap(chip, TPM_CAP_PROP_PCR, &cap,
800     - "attempting to determine the number of PCRS",
801     - sizeof(cap.num_pcrs));
802     - if (rc)
803     + if (tpm_try_get_ops(chip))
804     return 0;
805    
806     + if (tpm_getcap(chip, TPM_CAP_PROP_PCR, &cap,
807     + "attempting to determine the number of PCRS",
808     + sizeof(cap.num_pcrs))) {
809     + tpm_put_ops(chip);
810     + return 0;
811     + }
812     +
813     num_pcrs = be32_to_cpu(cap.num_pcrs);
814     for (i = 0; i < num_pcrs; i++) {
815     rc = tpm_pcr_read_dev(chip, i, digest);
816     @@ -122,6 +126,7 @@ static ssize_t pcrs_show(struct device *dev, struct device_attribute *attr,
817     str += sprintf(str, "%02X ", digest[j]);
818     str += sprintf(str, "\n");
819     }
820     + tpm_put_ops(chip);
821     return str - buf;
822     }
823     static DEVICE_ATTR_RO(pcrs);
824     @@ -129,16 +134,21 @@ static DEVICE_ATTR_RO(pcrs);
825     static ssize_t enabled_show(struct device *dev, struct device_attribute *attr,
826     char *buf)
827     {
828     + struct tpm_chip *chip = to_tpm_chip(dev);
829     + ssize_t rc = 0;
830     cap_t cap;
831     - ssize_t rc;
832    
833     - rc = tpm_getcap(to_tpm_chip(dev), TPM_CAP_FLAG_PERM, &cap,
834     - "attempting to determine the permanent enabled state",
835     - sizeof(cap.perm_flags));
836     - if (rc)
837     + if (tpm_try_get_ops(chip))
838     return 0;
839    
840     + if (tpm_getcap(chip, TPM_CAP_FLAG_PERM, &cap,
841     + "attempting to determine the permanent enabled state",
842     + sizeof(cap.perm_flags)))
843     + goto out_ops;
844     +
845     rc = sprintf(buf, "%d\n", !cap.perm_flags.disable);
846     +out_ops:
847     + tpm_put_ops(chip);
848     return rc;
849     }
850     static DEVICE_ATTR_RO(enabled);
851     @@ -146,16 +156,21 @@ static DEVICE_ATTR_RO(enabled);
852     static ssize_t active_show(struct device *dev, struct device_attribute *attr,
853     char *buf)
854     {
855     + struct tpm_chip *chip = to_tpm_chip(dev);
856     + ssize_t rc = 0;
857     cap_t cap;
858     - ssize_t rc;
859    
860     - rc = tpm_getcap(to_tpm_chip(dev), TPM_CAP_FLAG_PERM, &cap,
861     - "attempting to determine the permanent active state",
862     - sizeof(cap.perm_flags));
863     - if (rc)
864     + if (tpm_try_get_ops(chip))
865     return 0;
866    
867     + if (tpm_getcap(chip, TPM_CAP_FLAG_PERM, &cap,
868     + "attempting to determine the permanent active state",
869     + sizeof(cap.perm_flags)))
870     + goto out_ops;
871     +
872     rc = sprintf(buf, "%d\n", !cap.perm_flags.deactivated);
873     +out_ops:
874     + tpm_put_ops(chip);
875     return rc;
876     }
877     static DEVICE_ATTR_RO(active);
878     @@ -163,16 +178,21 @@ static DEVICE_ATTR_RO(active);
879     static ssize_t owned_show(struct device *dev, struct device_attribute *attr,
880     char *buf)
881     {
882     + struct tpm_chip *chip = to_tpm_chip(dev);
883     + ssize_t rc = 0;
884     cap_t cap;
885     - ssize_t rc;
886    
887     - rc = tpm_getcap(to_tpm_chip(dev), TPM_CAP_PROP_OWNER, &cap,
888     - "attempting to determine the owner state",
889     - sizeof(cap.owned));
890     - if (rc)
891     + if (tpm_try_get_ops(chip))
892     return 0;
893    
894     + if (tpm_getcap(to_tpm_chip(dev), TPM_CAP_PROP_OWNER, &cap,
895     + "attempting to determine the owner state",
896     + sizeof(cap.owned)))
897     + goto out_ops;
898     +
899     rc = sprintf(buf, "%d\n", cap.owned);
900     +out_ops:
901     + tpm_put_ops(chip);
902     return rc;
903     }
904     static DEVICE_ATTR_RO(owned);
905     @@ -180,16 +200,21 @@ static DEVICE_ATTR_RO(owned);
906     static ssize_t temp_deactivated_show(struct device *dev,
907     struct device_attribute *attr, char *buf)
908     {
909     + struct tpm_chip *chip = to_tpm_chip(dev);
910     + ssize_t rc = 0;
911     cap_t cap;
912     - ssize_t rc;
913    
914     - rc = tpm_getcap(to_tpm_chip(dev), TPM_CAP_FLAG_VOL, &cap,
915     - "attempting to determine the temporary state",
916     - sizeof(cap.stclear_flags));
917     - if (rc)
918     + if (tpm_try_get_ops(chip))
919     return 0;
920    
921     + if (tpm_getcap(to_tpm_chip(dev), TPM_CAP_FLAG_VOL, &cap,
922     + "attempting to determine the temporary state",
923     + sizeof(cap.stclear_flags)))
924     + goto out_ops;
925     +
926     rc = sprintf(buf, "%d\n", cap.stclear_flags.deactivated);
927     +out_ops:
928     + tpm_put_ops(chip);
929     return rc;
930     }
931     static DEVICE_ATTR_RO(temp_deactivated);
932     @@ -198,15 +223,18 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
933     char *buf)
934     {
935     struct tpm_chip *chip = to_tpm_chip(dev);
936     - cap_t cap;
937     - ssize_t rc;
938     + ssize_t rc = 0;
939     char *str = buf;
940     + cap_t cap;
941    
942     - rc = tpm_getcap(chip, TPM_CAP_PROP_MANUFACTURER, &cap,
943     - "attempting to determine the manufacturer",
944     - sizeof(cap.manufacturer_id));
945     - if (rc)
946     + if (tpm_try_get_ops(chip))
947     return 0;
948     +
949     + if (tpm_getcap(chip, TPM_CAP_PROP_MANUFACTURER, &cap,
950     + "attempting to determine the manufacturer",
951     + sizeof(cap.manufacturer_id)))
952     + goto out_ops;
953     +
954     str += sprintf(str, "Manufacturer: 0x%x\n",
955     be32_to_cpu(cap.manufacturer_id));
956    
957     @@ -223,20 +251,22 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
958     cap.tpm_version_1_2.revMinor);
959     } else {
960     /* Otherwise just use TPM_STRUCT_VER */
961     - rc = tpm_getcap(chip, TPM_CAP_VERSION_1_1, &cap,
962     - "attempting to determine the 1.1 version",
963     - sizeof(cap.tpm_version));
964     - if (rc)
965     - return 0;
966     + if (tpm_getcap(chip, TPM_CAP_VERSION_1_1, &cap,
967     + "attempting to determine the 1.1 version",
968     + sizeof(cap.tpm_version)))
969     + goto out_ops;
970     +
971     str += sprintf(str,
972     "TCG version: %d.%d\nFirmware version: %d.%d\n",
973     cap.tpm_version.Major,
974     cap.tpm_version.Minor,
975     cap.tpm_version.revMajor,
976     cap.tpm_version.revMinor);
977     - }
978     -
979     - return str - buf;
980     +}
981     + rc = str - buf;
982     +out_ops:
983     + tpm_put_ops(chip);
984     + return rc;
985     }
986     static DEVICE_ATTR_RO(caps);
987    
988     @@ -244,10 +274,12 @@ static ssize_t cancel_store(struct device *dev, struct device_attribute *attr,
989     const char *buf, size_t count)
990     {
991     struct tpm_chip *chip = to_tpm_chip(dev);
992     - if (chip == NULL)
993     +
994     + if (tpm_try_get_ops(chip))
995     return 0;
996    
997     chip->ops->cancel(chip);
998     + tpm_put_ops(chip);
999     return count;
1000     }
1001     static DEVICE_ATTR_WO(cancel);
1002     diff --git a/drivers/clk/actions/owl-common.c b/drivers/clk/actions/owl-common.c
1003     index 61c1071b5180..e9be34b17f3f 100644
1004     --- a/drivers/clk/actions/owl-common.c
1005     +++ b/drivers/clk/actions/owl-common.c
1006     @@ -67,16 +67,17 @@ int owl_clk_probe(struct device *dev, struct clk_hw_onecell_data *hw_clks)
1007     struct clk_hw *hw;
1008    
1009     for (i = 0; i < hw_clks->num; i++) {
1010     + const char *name;
1011    
1012     hw = hw_clks->hws[i];
1013     -
1014     if (IS_ERR_OR_NULL(hw))
1015     continue;
1016    
1017     + name = hw->init->name;
1018     ret = devm_clk_hw_register(dev, hw);
1019     if (ret) {
1020     dev_err(dev, "Couldn't register clock %d - %s\n",
1021     - i, hw->init->name);
1022     + i, name);
1023     return ret;
1024     }
1025     }
1026     diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c
1027     index c813c27f2e58..2f97a843d6d6 100644
1028     --- a/drivers/clk/at91/clk-main.c
1029     +++ b/drivers/clk/at91/clk-main.c
1030     @@ -27,6 +27,10 @@
1031    
1032     #define MOR_KEY_MASK (0xff << 16)
1033    
1034     +#define clk_main_parent_select(s) (((s) & \
1035     + (AT91_PMC_MOSCEN | \
1036     + AT91_PMC_OSCBYPASS)) ? 1 : 0)
1037     +
1038     struct clk_main_osc {
1039     struct clk_hw hw;
1040     struct regmap *regmap;
1041     @@ -119,7 +123,7 @@ static int clk_main_osc_is_prepared(struct clk_hw *hw)
1042    
1043     regmap_read(regmap, AT91_PMC_SR, &status);
1044    
1045     - return (status & AT91_PMC_MOSCS) && (tmp & AT91_PMC_MOSCEN);
1046     + return (status & AT91_PMC_MOSCS) && clk_main_parent_select(tmp);
1047     }
1048    
1049     static const struct clk_ops main_osc_ops = {
1050     @@ -530,7 +534,7 @@ static u8 clk_sam9x5_main_get_parent(struct clk_hw *hw)
1051    
1052     regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status);
1053    
1054     - return status & AT91_PMC_MOSCEN ? 1 : 0;
1055     + return clk_main_parent_select(status);
1056     }
1057    
1058     static const struct clk_ops sam9x5_main_ops = {
1059     @@ -572,7 +576,7 @@ at91_clk_register_sam9x5_main(struct regmap *regmap,
1060     clkmain->hw.init = &init;
1061     clkmain->regmap = regmap;
1062     regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status);
1063     - clkmain->parent = status & AT91_PMC_MOSCEN ? 1 : 0;
1064     + clkmain->parent = clk_main_parent_select(status);
1065    
1066     hw = &clkmain->hw;
1067     ret = clk_hw_register(NULL, &clkmain->hw);
1068     diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
1069     index 3a1812f65e5d..8abc5c8cb8b8 100644
1070     --- a/drivers/clk/clk-qoriq.c
1071     +++ b/drivers/clk/clk-qoriq.c
1072     @@ -610,7 +610,7 @@ static const struct clockgen_chipinfo chipinfo[] = {
1073     .guts_compat = "fsl,qoriq-device-config-1.0",
1074     .init_periph = p5020_init_periph,
1075     .cmux_groups = {
1076     - &p2041_cmux_grp1, &p2041_cmux_grp2
1077     + &p5020_cmux_grp1, &p5020_cmux_grp2
1078     },
1079     .cmux_to_group = {
1080     0, 1, -1
1081     diff --git a/drivers/clk/qcom/gcc-sdm845.c b/drivers/clk/qcom/gcc-sdm845.c
1082     index 3bf11a620094..ada3e4aeb38f 100644
1083     --- a/drivers/clk/qcom/gcc-sdm845.c
1084     +++ b/drivers/clk/qcom/gcc-sdm845.c
1085     @@ -647,7 +647,7 @@ static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1086     .name = "gcc_sdcc2_apps_clk_src",
1087     .parent_names = gcc_parent_names_10,
1088     .num_parents = 5,
1089     - .ops = &clk_rcg2_ops,
1090     + .ops = &clk_rcg2_floor_ops,
1091     },
1092     };
1093    
1094     @@ -671,7 +671,7 @@ static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1095     .name = "gcc_sdcc4_apps_clk_src",
1096     .parent_names = gcc_parent_names_0,
1097     .num_parents = 4,
1098     - .ops = &clk_rcg2_ops,
1099     + .ops = &clk_rcg2_floor_ops,
1100     },
1101     };
1102    
1103     diff --git a/drivers/clk/renesas/clk-mstp.c b/drivers/clk/renesas/clk-mstp.c
1104     index e82adcb16a52..45d94fb9703d 100644
1105     --- a/drivers/clk/renesas/clk-mstp.c
1106     +++ b/drivers/clk/renesas/clk-mstp.c
1107     @@ -341,7 +341,8 @@ void __init cpg_mstp_add_clk_domain(struct device_node *np)
1108     return;
1109    
1110     pd->name = np->name;
1111     - pd->flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_ACTIVE_WAKEUP;
1112     + pd->flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_ALWAYS_ON |
1113     + GENPD_FLAG_ACTIVE_WAKEUP;
1114     pd->attach_dev = cpg_mstp_attach_dev;
1115     pd->detach_dev = cpg_mstp_detach_dev;
1116     pm_genpd_init(pd, &pm_domain_always_on_gov, false);
1117     diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
1118     index 24485bee9b49..d7a2ad617369 100644
1119     --- a/drivers/clk/renesas/renesas-cpg-mssr.c
1120     +++ b/drivers/clk/renesas/renesas-cpg-mssr.c
1121     @@ -514,7 +514,8 @@ static int __init cpg_mssr_add_clk_domain(struct device *dev,
1122    
1123     genpd = &pd->genpd;
1124     genpd->name = np->name;
1125     - genpd->flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_ACTIVE_WAKEUP;
1126     + genpd->flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_ALWAYS_ON |
1127     + GENPD_FLAG_ACTIVE_WAKEUP;
1128     genpd->attach_dev = cpg_mssr_attach_dev;
1129     genpd->detach_dev = cpg_mssr_detach_dev;
1130     pm_genpd_init(genpd, &pm_domain_always_on_gov, false);
1131     diff --git a/drivers/clk/sirf/clk-common.c b/drivers/clk/sirf/clk-common.c
1132     index d8f9efa5129a..25351d6a55ba 100644
1133     --- a/drivers/clk/sirf/clk-common.c
1134     +++ b/drivers/clk/sirf/clk-common.c
1135     @@ -298,9 +298,10 @@ static u8 dmn_clk_get_parent(struct clk_hw *hw)
1136     {
1137     struct clk_dmn *clk = to_dmnclk(hw);
1138     u32 cfg = clkc_readl(clk->regofs);
1139     + const char *name = clk_hw_get_name(hw);
1140    
1141     /* parent of io domain can only be pll3 */
1142     - if (strcmp(hw->init->name, "io") == 0)
1143     + if (strcmp(name, "io") == 0)
1144     return 4;
1145    
1146     WARN_ON((cfg & (BIT(3) - 1)) > 4);
1147     @@ -312,9 +313,10 @@ static int dmn_clk_set_parent(struct clk_hw *hw, u8 parent)
1148     {
1149     struct clk_dmn *clk = to_dmnclk(hw);
1150     u32 cfg = clkc_readl(clk->regofs);
1151     + const char *name = clk_hw_get_name(hw);
1152    
1153     /* parent of io domain can only be pll3 */
1154     - if (strcmp(hw->init->name, "io") == 0)
1155     + if (strcmp(name, "io") == 0)
1156     return -EINVAL;
1157    
1158     cfg &= ~(BIT(3) - 1);
1159     @@ -354,7 +356,8 @@ static long dmn_clk_round_rate(struct clk_hw *hw, unsigned long rate,
1160     {
1161     unsigned long fin;
1162     unsigned ratio, wait, hold;
1163     - unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
1164     + const char *name = clk_hw_get_name(hw);
1165     + unsigned bits = (strcmp(name, "mem") == 0) ? 3 : 4;
1166    
1167     fin = *parent_rate;
1168     ratio = fin / rate;
1169     @@ -376,7 +379,8 @@ static int dmn_clk_set_rate(struct clk_hw *hw, unsigned long rate,
1170     struct clk_dmn *clk = to_dmnclk(hw);
1171     unsigned long fin;
1172     unsigned ratio, wait, hold, reg;
1173     - unsigned bits = (strcmp(hw->init->name, "mem") == 0) ? 3 : 4;
1174     + const char *name = clk_hw_get_name(hw);
1175     + unsigned bits = (strcmp(name, "mem") == 0) ? 3 : 4;
1176    
1177     fin = parent_rate;
1178     ratio = fin / rate;
1179     diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c
1180     index e038b0447206..8bdab1c3013b 100644
1181     --- a/drivers/clk/sprd/common.c
1182     +++ b/drivers/clk/sprd/common.c
1183     @@ -71,16 +71,17 @@ int sprd_clk_probe(struct device *dev, struct clk_hw_onecell_data *clkhw)
1184     struct clk_hw *hw;
1185    
1186     for (i = 0; i < clkhw->num; i++) {
1187     + const char *name;
1188    
1189     hw = clkhw->hws[i];
1190     -
1191     if (!hw)
1192     continue;
1193    
1194     + name = hw->init->name;
1195     ret = devm_clk_hw_register(dev, hw);
1196     if (ret) {
1197     dev_err(dev, "Couldn't register clock %d - %s\n",
1198     - i, hw->init->name);
1199     + i, name);
1200     return ret;
1201     }
1202     }
1203     diff --git a/drivers/clk/sprd/pll.c b/drivers/clk/sprd/pll.c
1204     index 36b4402bf09e..640270f51aa5 100644
1205     --- a/drivers/clk/sprd/pll.c
1206     +++ b/drivers/clk/sprd/pll.c
1207     @@ -136,6 +136,7 @@ static unsigned long _sprd_pll_recalc_rate(const struct sprd_pll *pll,
1208     k2 + refin * nint * CLK_PLL_1M;
1209     }
1210    
1211     + kfree(cfg);
1212     return rate;
1213     }
1214    
1215     @@ -222,6 +223,7 @@ static int _sprd_pll_set_rate(const struct sprd_pll *pll,
1216     if (!ret)
1217     udelay(pll->udelay);
1218    
1219     + kfree(cfg);
1220     return ret;
1221     }
1222    
1223     diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
1224     index ac12f261f8ca..9e3f4088724b 100644
1225     --- a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
1226     +++ b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
1227     @@ -499,6 +499,9 @@ static struct clk_hw_onecell_data sun8i_v3s_hw_clks = {
1228     [CLK_MMC1] = &mmc1_clk.common.hw,
1229     [CLK_MMC1_SAMPLE] = &mmc1_sample_clk.common.hw,
1230     [CLK_MMC1_OUTPUT] = &mmc1_output_clk.common.hw,
1231     + [CLK_MMC2] = &mmc2_clk.common.hw,
1232     + [CLK_MMC2_SAMPLE] = &mmc2_sample_clk.common.hw,
1233     + [CLK_MMC2_OUTPUT] = &mmc2_output_clk.common.hw,
1234     [CLK_CE] = &ce_clk.common.hw,
1235     [CLK_SPI0] = &spi0_clk.common.hw,
1236     [CLK_USB_PHY0] = &usb_phy0_clk.common.hw,
1237     diff --git a/drivers/clk/zte/clk-zx296718.c b/drivers/clk/zte/clk-zx296718.c
1238     index 354dd508c516..8dfb8523b79d 100644
1239     --- a/drivers/clk/zte/clk-zx296718.c
1240     +++ b/drivers/clk/zte/clk-zx296718.c
1241     @@ -567,6 +567,7 @@ static int __init top_clocks_init(struct device_node *np)
1242     {
1243     void __iomem *reg_base;
1244     int i, ret;
1245     + const char *name;
1246    
1247     reg_base = of_iomap(np, 0);
1248     if (!reg_base) {
1249     @@ -576,11 +577,10 @@ static int __init top_clocks_init(struct device_node *np)
1250    
1251     for (i = 0; i < ARRAY_SIZE(zx296718_pll_clk); i++) {
1252     zx296718_pll_clk[i].reg_base += (uintptr_t)reg_base;
1253     + name = zx296718_pll_clk[i].hw.init->name;
1254     ret = clk_hw_register(NULL, &zx296718_pll_clk[i].hw);
1255     - if (ret) {
1256     - pr_warn("top clk %s init error!\n",
1257     - zx296718_pll_clk[i].hw.init->name);
1258     - }
1259     + if (ret)
1260     + pr_warn("top clk %s init error!\n", name);
1261     }
1262    
1263     for (i = 0; i < ARRAY_SIZE(top_ffactor_clk); i++) {
1264     @@ -588,11 +588,10 @@ static int __init top_clocks_init(struct device_node *np)
1265     top_hw_onecell_data.hws[top_ffactor_clk[i].id] =
1266     &top_ffactor_clk[i].factor.hw;
1267    
1268     + name = top_ffactor_clk[i].factor.hw.init->name;
1269     ret = clk_hw_register(NULL, &top_ffactor_clk[i].factor.hw);
1270     - if (ret) {
1271     - pr_warn("top clk %s init error!\n",
1272     - top_ffactor_clk[i].factor.hw.init->name);
1273     - }
1274     + if (ret)
1275     + pr_warn("top clk %s init error!\n", name);
1276     }
1277    
1278     for (i = 0; i < ARRAY_SIZE(top_mux_clk); i++) {
1279     @@ -601,11 +600,10 @@ static int __init top_clocks_init(struct device_node *np)
1280     &top_mux_clk[i].mux.hw;
1281    
1282     top_mux_clk[i].mux.reg += (uintptr_t)reg_base;
1283     + name = top_mux_clk[i].mux.hw.init->name;
1284     ret = clk_hw_register(NULL, &top_mux_clk[i].mux.hw);
1285     - if (ret) {
1286     - pr_warn("top clk %s init error!\n",
1287     - top_mux_clk[i].mux.hw.init->name);
1288     - }
1289     + if (ret)
1290     + pr_warn("top clk %s init error!\n", name);
1291     }
1292    
1293     for (i = 0; i < ARRAY_SIZE(top_gate_clk); i++) {
1294     @@ -614,11 +612,10 @@ static int __init top_clocks_init(struct device_node *np)
1295     &top_gate_clk[i].gate.hw;
1296    
1297     top_gate_clk[i].gate.reg += (uintptr_t)reg_base;
1298     + name = top_gate_clk[i].gate.hw.init->name;
1299     ret = clk_hw_register(NULL, &top_gate_clk[i].gate.hw);
1300     - if (ret) {
1301     - pr_warn("top clk %s init error!\n",
1302     - top_gate_clk[i].gate.hw.init->name);
1303     - }
1304     + if (ret)
1305     + pr_warn("top clk %s init error!\n", name);
1306     }
1307    
1308     for (i = 0; i < ARRAY_SIZE(top_div_clk); i++) {
1309     @@ -627,11 +624,10 @@ static int __init top_clocks_init(struct device_node *np)
1310     &top_div_clk[i].div.hw;
1311    
1312     top_div_clk[i].div.reg += (uintptr_t)reg_base;
1313     + name = top_div_clk[i].div.hw.init->name;
1314     ret = clk_hw_register(NULL, &top_div_clk[i].div.hw);
1315     - if (ret) {
1316     - pr_warn("top clk %s init error!\n",
1317     - top_div_clk[i].div.hw.init->name);
1318     - }
1319     + if (ret)
1320     + pr_warn("top clk %s init error!\n", name);
1321     }
1322    
1323     ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get,
1324     @@ -757,6 +753,7 @@ static int __init lsp0_clocks_init(struct device_node *np)
1325     {
1326     void __iomem *reg_base;
1327     int i, ret;
1328     + const char *name;
1329    
1330     reg_base = of_iomap(np, 0);
1331     if (!reg_base) {
1332     @@ -770,11 +767,10 @@ static int __init lsp0_clocks_init(struct device_node *np)
1333     &lsp0_mux_clk[i].mux.hw;
1334    
1335     lsp0_mux_clk[i].mux.reg += (uintptr_t)reg_base;
1336     + name = lsp0_mux_clk[i].mux.hw.init->name;
1337     ret = clk_hw_register(NULL, &lsp0_mux_clk[i].mux.hw);
1338     - if (ret) {
1339     - pr_warn("lsp0 clk %s init error!\n",
1340     - lsp0_mux_clk[i].mux.hw.init->name);
1341     - }
1342     + if (ret)
1343     + pr_warn("lsp0 clk %s init error!\n", name);
1344     }
1345    
1346     for (i = 0; i < ARRAY_SIZE(lsp0_gate_clk); i++) {
1347     @@ -783,11 +779,10 @@ static int __init lsp0_clocks_init(struct device_node *np)
1348     &lsp0_gate_clk[i].gate.hw;
1349    
1350     lsp0_gate_clk[i].gate.reg += (uintptr_t)reg_base;
1351     + name = lsp0_gate_clk[i].gate.hw.init->name;
1352     ret = clk_hw_register(NULL, &lsp0_gate_clk[i].gate.hw);
1353     - if (ret) {
1354     - pr_warn("lsp0 clk %s init error!\n",
1355     - lsp0_gate_clk[i].gate.hw.init->name);
1356     - }
1357     + if (ret)
1358     + pr_warn("lsp0 clk %s init error!\n", name);
1359     }
1360    
1361     for (i = 0; i < ARRAY_SIZE(lsp0_div_clk); i++) {
1362     @@ -796,11 +791,10 @@ static int __init lsp0_clocks_init(struct device_node *np)
1363     &lsp0_div_clk[i].div.hw;
1364    
1365     lsp0_div_clk[i].div.reg += (uintptr_t)reg_base;
1366     + name = lsp0_div_clk[i].div.hw.init->name;
1367     ret = clk_hw_register(NULL, &lsp0_div_clk[i].div.hw);
1368     - if (ret) {
1369     - pr_warn("lsp0 clk %s init error!\n",
1370     - lsp0_div_clk[i].div.hw.init->name);
1371     - }
1372     + if (ret)
1373     + pr_warn("lsp0 clk %s init error!\n", name);
1374     }
1375    
1376     ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get,
1377     @@ -865,6 +859,7 @@ static int __init lsp1_clocks_init(struct device_node *np)
1378     {
1379     void __iomem *reg_base;
1380     int i, ret;
1381     + const char *name;
1382    
1383     reg_base = of_iomap(np, 0);
1384     if (!reg_base) {
1385     @@ -878,11 +873,10 @@ static int __init lsp1_clocks_init(struct device_node *np)
1386     &lsp0_mux_clk[i].mux.hw;
1387    
1388     lsp1_mux_clk[i].mux.reg += (uintptr_t)reg_base;
1389     + name = lsp1_mux_clk[i].mux.hw.init->name;
1390     ret = clk_hw_register(NULL, &lsp1_mux_clk[i].mux.hw);
1391     - if (ret) {
1392     - pr_warn("lsp1 clk %s init error!\n",
1393     - lsp1_mux_clk[i].mux.hw.init->name);
1394     - }
1395     + if (ret)
1396     + pr_warn("lsp1 clk %s init error!\n", name);
1397     }
1398    
1399     for (i = 0; i < ARRAY_SIZE(lsp1_gate_clk); i++) {
1400     @@ -891,11 +885,10 @@ static int __init lsp1_clocks_init(struct device_node *np)
1401     &lsp1_gate_clk[i].gate.hw;
1402    
1403     lsp1_gate_clk[i].gate.reg += (uintptr_t)reg_base;
1404     + name = lsp1_gate_clk[i].gate.hw.init->name;
1405     ret = clk_hw_register(NULL, &lsp1_gate_clk[i].gate.hw);
1406     - if (ret) {
1407     - pr_warn("lsp1 clk %s init error!\n",
1408     - lsp1_gate_clk[i].gate.hw.init->name);
1409     - }
1410     + if (ret)
1411     + pr_warn("lsp1 clk %s init error!\n", name);
1412     }
1413    
1414     for (i = 0; i < ARRAY_SIZE(lsp1_div_clk); i++) {
1415     @@ -904,11 +897,10 @@ static int __init lsp1_clocks_init(struct device_node *np)
1416     &lsp1_div_clk[i].div.hw;
1417    
1418     lsp1_div_clk[i].div.reg += (uintptr_t)reg_base;
1419     + name = lsp1_div_clk[i].div.hw.init->name;
1420     ret = clk_hw_register(NULL, &lsp1_div_clk[i].div.hw);
1421     - if (ret) {
1422     - pr_warn("lsp1 clk %s init error!\n",
1423     - lsp1_div_clk[i].div.hw.init->name);
1424     - }
1425     + if (ret)
1426     + pr_warn("lsp1 clk %s init error!\n", name);
1427     }
1428    
1429     ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get,
1430     @@ -982,6 +974,7 @@ static int __init audio_clocks_init(struct device_node *np)
1431     {
1432     void __iomem *reg_base;
1433     int i, ret;
1434     + const char *name;
1435    
1436     reg_base = of_iomap(np, 0);
1437     if (!reg_base) {
1438     @@ -995,11 +988,10 @@ static int __init audio_clocks_init(struct device_node *np)
1439     &audio_mux_clk[i].mux.hw;
1440    
1441     audio_mux_clk[i].mux.reg += (uintptr_t)reg_base;
1442     + name = audio_mux_clk[i].mux.hw.init->name;
1443     ret = clk_hw_register(NULL, &audio_mux_clk[i].mux.hw);
1444     - if (ret) {
1445     - pr_warn("audio clk %s init error!\n",
1446     - audio_mux_clk[i].mux.hw.init->name);
1447     - }
1448     + if (ret)
1449     + pr_warn("audio clk %s init error!\n", name);
1450     }
1451    
1452     for (i = 0; i < ARRAY_SIZE(audio_adiv_clk); i++) {
1453     @@ -1008,11 +1000,10 @@ static int __init audio_clocks_init(struct device_node *np)
1454     &audio_adiv_clk[i].hw;
1455    
1456     audio_adiv_clk[i].reg_base += (uintptr_t)reg_base;
1457     + name = audio_adiv_clk[i].hw.init->name;
1458     ret = clk_hw_register(NULL, &audio_adiv_clk[i].hw);
1459     - if (ret) {
1460     - pr_warn("audio clk %s init error!\n",
1461     - audio_adiv_clk[i].hw.init->name);
1462     - }
1463     + if (ret)
1464     + pr_warn("audio clk %s init error!\n", name);
1465     }
1466    
1467     for (i = 0; i < ARRAY_SIZE(audio_div_clk); i++) {
1468     @@ -1021,11 +1012,10 @@ static int __init audio_clocks_init(struct device_node *np)
1469     &audio_div_clk[i].div.hw;
1470    
1471     audio_div_clk[i].div.reg += (uintptr_t)reg_base;
1472     + name = audio_div_clk[i].div.hw.init->name;
1473     ret = clk_hw_register(NULL, &audio_div_clk[i].div.hw);
1474     - if (ret) {
1475     - pr_warn("audio clk %s init error!\n",
1476     - audio_div_clk[i].div.hw.init->name);
1477     - }
1478     + if (ret)
1479     + pr_warn("audio clk %s init error!\n", name);
1480     }
1481    
1482     for (i = 0; i < ARRAY_SIZE(audio_gate_clk); i++) {
1483     @@ -1034,11 +1024,10 @@ static int __init audio_clocks_init(struct device_node *np)
1484     &audio_gate_clk[i].gate.hw;
1485    
1486     audio_gate_clk[i].gate.reg += (uintptr_t)reg_base;
1487     + name = audio_gate_clk[i].gate.hw.init->name;
1488     ret = clk_hw_register(NULL, &audio_gate_clk[i].gate.hw);
1489     - if (ret) {
1490     - pr_warn("audio clk %s init error!\n",
1491     - audio_gate_clk[i].gate.hw.init->name);
1492     - }
1493     + if (ret)
1494     + pr_warn("audio clk %s init error!\n", name);
1495     }
1496    
1497     ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get,
1498     diff --git a/drivers/crypto/hisilicon/sec/sec_algs.c b/drivers/crypto/hisilicon/sec/sec_algs.c
1499     index cdc4f9a171d9..db2983c51f1e 100644
1500     --- a/drivers/crypto/hisilicon/sec/sec_algs.c
1501     +++ b/drivers/crypto/hisilicon/sec/sec_algs.c
1502     @@ -215,17 +215,18 @@ static void sec_free_hw_sgl(struct sec_hw_sgl *hw_sgl,
1503     dma_addr_t psec_sgl, struct sec_dev_info *info)
1504     {
1505     struct sec_hw_sgl *sgl_current, *sgl_next;
1506     + dma_addr_t sgl_next_dma;
1507    
1508     - if (!hw_sgl)
1509     - return;
1510     sgl_current = hw_sgl;
1511     - while (sgl_current->next) {
1512     + while (sgl_current) {
1513     sgl_next = sgl_current->next;
1514     - dma_pool_free(info->hw_sgl_pool, sgl_current,
1515     - sgl_current->next_sgl);
1516     + sgl_next_dma = sgl_current->next_sgl;
1517     +
1518     + dma_pool_free(info->hw_sgl_pool, sgl_current, psec_sgl);
1519     +
1520     sgl_current = sgl_next;
1521     + psec_sgl = sgl_next_dma;
1522     }
1523     - dma_pool_free(info->hw_sgl_pool, hw_sgl, psec_sgl);
1524     }
1525    
1526     static int sec_alg_skcipher_setkey(struct crypto_skcipher *tfm,
1527     diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c
1528     index 53c1d6d36a64..81ba4eb34890 100644
1529     --- a/drivers/dma-buf/sw_sync.c
1530     +++ b/drivers/dma-buf/sw_sync.c
1531     @@ -141,17 +141,14 @@ static void timeline_fence_release(struct dma_fence *fence)
1532     {
1533     struct sync_pt *pt = dma_fence_to_sync_pt(fence);
1534     struct sync_timeline *parent = dma_fence_parent(fence);
1535     + unsigned long flags;
1536    
1537     + spin_lock_irqsave(fence->lock, flags);
1538     if (!list_empty(&pt->link)) {
1539     - unsigned long flags;
1540     -
1541     - spin_lock_irqsave(fence->lock, flags);
1542     - if (!list_empty(&pt->link)) {
1543     - list_del(&pt->link);
1544     - rb_erase(&pt->node, &parent->pt_tree);
1545     - }
1546     - spin_unlock_irqrestore(fence->lock, flags);
1547     + list_del(&pt->link);
1548     + rb_erase(&pt->node, &parent->pt_tree);
1549     }
1550     + spin_unlock_irqrestore(fence->lock, flags);
1551    
1552     sync_timeline_put(parent);
1553     dma_fence_free(fence);
1554     @@ -274,7 +271,8 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj,
1555     p = &parent->rb_left;
1556     } else {
1557     if (dma_fence_get_rcu(&other->base)) {
1558     - dma_fence_put(&pt->base);
1559     + sync_timeline_put(obj);
1560     + kfree(pt);
1561     pt = other;
1562     goto unlock;
1563     }
1564     diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
1565     index c364ef94cc36..77c9f4d8668a 100644
1566     --- a/drivers/gpu/drm/amd/amdgpu/si.c
1567     +++ b/drivers/gpu/drm/amd/amdgpu/si.c
1568     @@ -1813,7 +1813,7 @@ static void si_program_aspm(struct amdgpu_device *adev)
1569     if (orig != data)
1570     si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data);
1571    
1572     - if ((adev->family != CHIP_OLAND) && (adev->family != CHIP_HAINAN)) {
1573     + if ((adev->asic_type != CHIP_OLAND) && (adev->asic_type != CHIP_HAINAN)) {
1574     orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0);
1575     data &= ~PLL_RAMP_UP_TIME_0_MASK;
1576     if (orig != data)
1577     @@ -1862,14 +1862,14 @@ static void si_program_aspm(struct amdgpu_device *adev)
1578    
1579     orig = data = si_pif_phy0_rreg(adev,PB0_PIF_CNTL);
1580     data &= ~LS2_EXIT_TIME_MASK;
1581     - if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1582     + if ((adev->asic_type == CHIP_OLAND) || (adev->asic_type == CHIP_HAINAN))
1583     data |= LS2_EXIT_TIME(5);
1584     if (orig != data)
1585     si_pif_phy0_wreg(adev,PB0_PIF_CNTL, data);
1586    
1587     orig = data = si_pif_phy1_rreg(adev,PB1_PIF_CNTL);
1588     data &= ~LS2_EXIT_TIME_MASK;
1589     - if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1590     + if ((adev->asic_type == CHIP_OLAND) || (adev->asic_type == CHIP_HAINAN))
1591     data |= LS2_EXIT_TIME(5);
1592     if (orig != data)
1593     si_pif_phy1_wreg(adev,PB1_PIF_CNTL, data);
1594     diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
1595     index f4b89d1ea6f6..2b2efe443c36 100644
1596     --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
1597     +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
1598     @@ -1585,6 +1585,14 @@ void dc_set_power_state(
1599     dc_resource_state_construct(dc, dc->current_state);
1600    
1601     dc->hwss.init_hw(dc);
1602     +
1603     +#ifdef CONFIG_DRM_AMD_DC_DCN2_0
1604     + if (dc->hwss.init_sys_ctx != NULL &&
1605     + dc->vm_pa_config.valid) {
1606     + dc->hwss.init_sys_ctx(dc->hwseq, dc, &dc->vm_pa_config);
1607     + }
1608     +#endif
1609     +
1610     break;
1611     default:
1612    
1613     diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
1614     index f0d68aa7c8fc..d440b28ee43f 100644
1615     --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
1616     +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
1617     @@ -229,12 +229,10 @@ bool resource_construct(
1618     DC_ERR("DC: failed to create audio!\n");
1619     return false;
1620     }
1621     -
1622     if (!aud->funcs->endpoint_valid(aud)) {
1623     aud->funcs->destroy(&aud);
1624     break;
1625     }
1626     -
1627     pool->audios[i] = aud;
1628     pool->audio_count++;
1629     }
1630     @@ -1703,24 +1701,25 @@ static struct audio *find_first_free_audio(
1631     const struct resource_pool *pool,
1632     enum engine_id id)
1633     {
1634     - int i;
1635     - for (i = 0; i < pool->audio_count; i++) {
1636     + int i, available_audio_count;
1637     +
1638     + available_audio_count = pool->audio_count;
1639     +
1640     + for (i = 0; i < available_audio_count; i++) {
1641     if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) {
1642     /*we have enough audio endpoint, find the matching inst*/
1643     if (id != i)
1644     continue;
1645     -
1646     return pool->audios[i];
1647     }
1648     }
1649    
1650     - /* use engine id to find free audio */
1651     - if ((id < pool->audio_count) && (res_ctx->is_audio_acquired[id] == false)) {
1652     + /* use engine id to find free audio */
1653     + if ((id < available_audio_count) && (res_ctx->is_audio_acquired[id] == false)) {
1654     return pool->audios[id];
1655     }
1656     -
1657     /*not found the matching one, first come first serve*/
1658     - for (i = 0; i < pool->audio_count; i++) {
1659     + for (i = 0; i < available_audio_count; i++) {
1660     if (res_ctx->is_audio_acquired[i] == false) {
1661     return pool->audios[i];
1662     }
1663     diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
1664     index 7f6d724686f1..abb559ce6408 100644
1665     --- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
1666     +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
1667     @@ -611,6 +611,8 @@ void dce_aud_az_configure(
1668    
1669     AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_SINK_INFO1,
1670     value);
1671     + DC_LOG_HW_AUDIO("\n\tAUDIO:az_configure: index: %u data, 0x%x, displayName %s: \n",
1672     + audio->inst, value, audio_info->display_name);
1673    
1674     /*
1675     *write the port ID:
1676     @@ -922,7 +924,6 @@ static const struct audio_funcs funcs = {
1677     .az_configure = dce_aud_az_configure,
1678     .destroy = dce_aud_destroy,
1679     };
1680     -
1681     void dce_aud_destroy(struct audio **audio)
1682     {
1683     struct dce_audio *aud = DCE_AUD(*audio);
1684     @@ -953,7 +954,6 @@ struct audio *dce_audio_create(
1685     audio->regs = reg;
1686     audio->shifts = shifts;
1687     audio->masks = masks;
1688     -
1689     return &audio->base;
1690     }
1691    
1692     diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
1693     index 5d95a997fd9f..f8904f73f57b 100644
1694     --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
1695     +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
1696     @@ -292,9 +292,10 @@ bool cm_helper_translate_curve_to_hw_format(
1697     seg_distr[7] = 4;
1698     seg_distr[8] = 4;
1699     seg_distr[9] = 4;
1700     + seg_distr[10] = 1;
1701    
1702     region_start = -10;
1703     - region_end = 0;
1704     + region_end = 1;
1705     }
1706    
1707     for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
1708     diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
1709     index d68986cea132..84abf5d6f760 100644
1710     --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
1711     +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
1712     @@ -1040,16 +1040,17 @@ static int analogix_dp_commit(struct analogix_dp_device *dp)
1713     if (ret)
1714     return ret;
1715    
1716     + /* Check whether panel supports fast training */
1717     + ret = analogix_dp_fast_link_train_detection(dp);
1718     + if (ret)
1719     + dp->psr_enable = false;
1720     +
1721     if (dp->psr_enable) {
1722     ret = analogix_dp_enable_sink_psr(dp);
1723     if (ret)
1724     return ret;
1725     }
1726    
1727     - /* Check whether panel supports fast training */
1728     - ret = analogix_dp_fast_link_train_detection(dp);
1729     - if (ret)
1730     - dp->psr_enable = false;
1731    
1732     return ret;
1733     }
1734     diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
1735     index aaca5248da07..d728b6cf6109 100644
1736     --- a/drivers/gpu/drm/bridge/tc358767.c
1737     +++ b/drivers/gpu/drm/bridge/tc358767.c
1738     @@ -302,7 +302,7 @@ static ssize_t tc_aux_transfer(struct drm_dp_aux *aux,
1739     struct drm_dp_aux_msg *msg)
1740     {
1741     struct tc_data *tc = aux_to_tc(aux);
1742     - size_t size = min_t(size_t, 8, msg->size);
1743     + size_t size = min_t(size_t, DP_AUX_MAX_PAYLOAD_BYTES - 1, msg->size);
1744     u8 request = msg->request & ~DP_AUX_I2C_MOT;
1745     u8 *buf = msg->buffer;
1746     u32 tmp = 0;
1747     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c
1748     index 7143ea4611aa..33a9fb5ac558 100644
1749     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c
1750     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c
1751     @@ -96,6 +96,8 @@ nvbios_volt_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
1752     info->min = min(info->base,
1753     info->base + info->step * info->vidmask);
1754     info->max = nvbios_rd32(bios, volt + 0x0e);
1755     + if (!info->max)
1756     + info->max = max(info->base, info->base + info->step * info->vidmask);
1757     break;
1758     case 0x50:
1759     info->min = nvbios_rd32(bios, volt + 0x0a);
1760     diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
1761     index 2c9c9722734f..9a2cb8aeab3a 100644
1762     --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
1763     +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
1764     @@ -400,7 +400,13 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
1765    
1766     /* Look up the DSI host. It needs to probe before we do. */
1767     endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
1768     + if (!endpoint)
1769     + return -ENODEV;
1770     +
1771     dsi_host_node = of_graph_get_remote_port_parent(endpoint);
1772     + if (!dsi_host_node)
1773     + goto error;
1774     +
1775     host = of_find_mipi_dsi_host_by_node(dsi_host_node);
1776     of_node_put(dsi_host_node);
1777     if (!host) {
1778     @@ -409,6 +415,9 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
1779     }
1780    
1781     info.node = of_graph_get_remote_port(endpoint);
1782     + if (!info.node)
1783     + goto error;
1784     +
1785     of_node_put(endpoint);
1786    
1787     ts->dsi = mipi_dsi_device_register_full(host, &info);
1788     @@ -429,6 +438,10 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
1789     return ret;
1790    
1791     return 0;
1792     +
1793     +error:
1794     + of_node_put(endpoint);
1795     + return -ENODEV;
1796     }
1797    
1798     static int rpi_touchscreen_remove(struct i2c_client *i2c)
1799     diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
1800     index 5fd94e206029..654fea2b4312 100644
1801     --- a/drivers/gpu/drm/panel/panel-simple.c
1802     +++ b/drivers/gpu/drm/panel/panel-simple.c
1803     @@ -689,9 +689,9 @@ static const struct panel_desc auo_g133han01 = {
1804     static const struct display_timing auo_g185han01_timings = {
1805     .pixelclock = { 120000000, 144000000, 175000000 },
1806     .hactive = { 1920, 1920, 1920 },
1807     - .hfront_porch = { 18, 60, 74 },
1808     - .hback_porch = { 12, 44, 54 },
1809     - .hsync_len = { 10, 24, 32 },
1810     + .hfront_porch = { 36, 120, 148 },
1811     + .hback_porch = { 24, 88, 108 },
1812     + .hsync_len = { 20, 48, 64 },
1813     .vactive = { 1080, 1080, 1080 },
1814     .vfront_porch = { 6, 10, 40 },
1815     .vback_porch = { 2, 5, 20 },
1816     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
1817     index 414642e5b7a3..de656f555383 100644
1818     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
1819     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
1820     @@ -751,7 +751,7 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct
1821    
1822     radeon_encoder->output_csc = val;
1823    
1824     - if (connector->encoder->crtc) {
1825     + if (connector->encoder && connector->encoder->crtc) {
1826     struct drm_crtc *crtc = connector->encoder->crtc;
1827     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
1828    
1829     diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
1830     index 2a7977a23b31..25b5407c74b5 100644
1831     --- a/drivers/gpu/drm/radeon/radeon_drv.c
1832     +++ b/drivers/gpu/drm/radeon/radeon_drv.c
1833     @@ -364,11 +364,19 @@ radeon_pci_remove(struct pci_dev *pdev)
1834     static void
1835     radeon_pci_shutdown(struct pci_dev *pdev)
1836     {
1837     + struct drm_device *ddev = pci_get_drvdata(pdev);
1838     +
1839     /* if we are running in a VM, make sure the device
1840     * torn down properly on reboot/shutdown
1841     */
1842     if (radeon_device_is_virtual())
1843     radeon_pci_remove(pdev);
1844     +
1845     + /* Some adapters need to be suspended before a
1846     + * shutdown occurs in order to prevent an error
1847     + * during kexec.
1848     + */
1849     + radeon_suspend_kms(ddev, true, true, false);
1850     }
1851    
1852     static int radeon_pmops_suspend(struct device *dev)
1853     diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
1854     index 808d9fb627e9..477d0a27b9a5 100644
1855     --- a/drivers/gpu/drm/stm/ltdc.c
1856     +++ b/drivers/gpu/drm/stm/ltdc.c
1857     @@ -19,6 +19,7 @@
1858     #include <drm/drm_crtc_helper.h>
1859     #include <drm/drm_fb_cma_helper.h>
1860     #include <drm/drm_gem_cma_helper.h>
1861     +#include <drm/drm_gem_framebuffer_helper.h>
1862     #include <drm/drm_of.h>
1863     #include <drm/drm_bridge.h>
1864     #include <drm/drm_plane_helper.h>
1865     @@ -825,6 +826,7 @@ static const struct drm_plane_funcs ltdc_plane_funcs = {
1866     };
1867    
1868     static const struct drm_plane_helper_funcs ltdc_plane_helper_funcs = {
1869     + .prepare_fb = drm_gem_fb_prepare_fb,
1870     .atomic_check = ltdc_plane_atomic_check,
1871     .atomic_update = ltdc_plane_atomic_update,
1872     .atomic_disable = ltdc_plane_atomic_disable,
1873     diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
1874     index 1cb41992aaa1..d0a81a03ddbd 100644
1875     --- a/drivers/hid/hid-apple.c
1876     +++ b/drivers/hid/hid-apple.c
1877     @@ -57,7 +57,6 @@ MODULE_PARM_DESC(swap_opt_cmd, "Swap the Option (\"Alt\") and Command (\"Flag\")
1878     struct apple_sc {
1879     unsigned long quirks;
1880     unsigned int fn_on;
1881     - DECLARE_BITMAP(pressed_fn, KEY_CNT);
1882     DECLARE_BITMAP(pressed_numlock, KEY_CNT);
1883     };
1884    
1885     @@ -184,6 +183,8 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
1886     {
1887     struct apple_sc *asc = hid_get_drvdata(hid);
1888     const struct apple_key_translation *trans, *table;
1889     + bool do_translate;
1890     + u16 code = 0;
1891    
1892     if (usage->code == KEY_FN) {
1893     asc->fn_on = !!value;
1894     @@ -192,8 +193,6 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
1895     }
1896    
1897     if (fnmode) {
1898     - int do_translate;
1899     -
1900     if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
1901     hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS)
1902     table = macbookair_fn_keys;
1903     @@ -205,25 +204,33 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
1904     trans = apple_find_translation (table, usage->code);
1905    
1906     if (trans) {
1907     - if (test_bit(usage->code, asc->pressed_fn))
1908     - do_translate = 1;
1909     - else if (trans->flags & APPLE_FLAG_FKEY)
1910     - do_translate = (fnmode == 2 && asc->fn_on) ||
1911     - (fnmode == 1 && !asc->fn_on);
1912     - else
1913     - do_translate = asc->fn_on;
1914     -
1915     - if (do_translate) {
1916     - if (value)
1917     - set_bit(usage->code, asc->pressed_fn);
1918     - else
1919     - clear_bit(usage->code, asc->pressed_fn);
1920     -
1921     - input_event(input, usage->type, trans->to,
1922     - value);
1923     -
1924     - return 1;
1925     + if (test_bit(trans->from, input->key))
1926     + code = trans->from;
1927     + else if (test_bit(trans->to, input->key))
1928     + code = trans->to;
1929     +
1930     + if (!code) {
1931     + if (trans->flags & APPLE_FLAG_FKEY) {
1932     + switch (fnmode) {
1933     + case 1:
1934     + do_translate = !asc->fn_on;
1935     + break;
1936     + case 2:
1937     + do_translate = asc->fn_on;
1938     + break;
1939     + default:
1940     + /* should never happen */
1941     + do_translate = false;
1942     + }
1943     + } else {
1944     + do_translate = asc->fn_on;
1945     + }
1946     +
1947     + code = do_translate ? trans->to : trans->from;
1948     }
1949     +
1950     + input_event(input, usage->type, code, value);
1951     + return 1;
1952     }
1953    
1954     if (asc->quirks & APPLE_NUMLOCK_EMULATION &&
1955     diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
1956     index 5a2d5140c1f4..3038c975e417 100644
1957     --- a/drivers/hid/wacom_sys.c
1958     +++ b/drivers/hid/wacom_sys.c
1959     @@ -91,7 +91,7 @@ static void wacom_wac_queue_flush(struct hid_device *hdev,
1960     }
1961    
1962     static int wacom_wac_pen_serial_enforce(struct hid_device *hdev,
1963     - struct hid_report *report, u8 *raw_data, int size)
1964     + struct hid_report *report, u8 *raw_data, int report_size)
1965     {
1966     struct wacom *wacom = hid_get_drvdata(hdev);
1967     struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1968     @@ -152,7 +152,8 @@ static int wacom_wac_pen_serial_enforce(struct hid_device *hdev,
1969     if (flush)
1970     wacom_wac_queue_flush(hdev, &wacom_wac->pen_fifo);
1971     else if (insert)
1972     - wacom_wac_queue_insert(hdev, &wacom_wac->pen_fifo, raw_data, size);
1973     + wacom_wac_queue_insert(hdev, &wacom_wac->pen_fifo,
1974     + raw_data, report_size);
1975    
1976     return insert && !flush;
1977     }
1978     @@ -2147,7 +2148,7 @@ static void wacom_update_name(struct wacom *wacom, const char *suffix)
1979     {
1980     struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1981     struct wacom_features *features = &wacom_wac->features;
1982     - char name[WACOM_NAME_MAX];
1983     + char name[WACOM_NAME_MAX - 20]; /* Leave some room for suffixes */
1984    
1985     /* Generic devices name unspecified */
1986     if ((features->type == HID_GENERIC) && !strcmp("Wacom HID", features->name)) {
1987     diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
1988     index 6f5c838f9d47..1df037e7f0b4 100644
1989     --- a/drivers/hid/wacom_wac.c
1990     +++ b/drivers/hid/wacom_wac.c
1991     @@ -255,7 +255,7 @@ static int wacom_dtu_irq(struct wacom_wac *wacom)
1992    
1993     static int wacom_dtus_irq(struct wacom_wac *wacom)
1994     {
1995     - char *data = wacom->data;
1996     + unsigned char *data = wacom->data;
1997     struct input_dev *input = wacom->pen_input;
1998     unsigned short prox, pressure = 0;
1999    
2000     @@ -576,7 +576,7 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)
2001     strip2 = ((data[3] & 0x1f) << 8) | data[4];
2002     }
2003    
2004     - prox = (buttons & ~(~0 << nbuttons)) | (keys & ~(~0 << nkeys)) |
2005     + prox = (buttons & ~(~0U << nbuttons)) | (keys & ~(~0U << nkeys)) |
2006     (ring1 & 0x80) | (ring2 & 0x80) | strip1 | strip2;
2007    
2008     wacom_report_numbered_buttons(input, nbuttons, buttons);
2009     diff --git a/drivers/i2c/busses/i2c-cht-wc.c b/drivers/i2c/busses/i2c-cht-wc.c
2010     index c4d176f5ed79..f890af67f501 100644
2011     --- a/drivers/i2c/busses/i2c-cht-wc.c
2012     +++ b/drivers/i2c/busses/i2c-cht-wc.c
2013     @@ -187,6 +187,51 @@ static const struct i2c_algorithm cht_wc_i2c_adap_algo = {
2014     .smbus_xfer = cht_wc_i2c_adap_smbus_xfer,
2015     };
2016    
2017     +/*
2018     + * We are an i2c-adapter which itself is part of an i2c-client. This means that
2019     + * transfers done through us take adapter->bus_lock twice, once for our parent
2020     + * i2c-adapter and once to take our own bus_lock. Lockdep does not like this
2021     + * nested locking, to make lockdep happy in the case of busses with muxes, the
2022     + * i2c-core's i2c_adapter_lock_bus function calls:
2023     + * rt_mutex_lock_nested(&adapter->bus_lock, i2c_adapter_depth(adapter));
2024     + *
2025     + * But i2c_adapter_depth only works when the direct parent of the adapter is
2026     + * another adapter, as it is only meant for muxes. In our case there is an
2027     + * i2c-client and MFD instantiated platform_device in the parent->child chain
2028     + * between the 2 devices.
2029     + *
2030     + * So we override the default i2c_lock_operations and pass a hardcoded
2031     + * depth of 1 to rt_mutex_lock_nested, to make lockdep happy.
2032     + *
2033     + * Note that if there were to be a mux attached to our adapter, this would
2034     + * break things again since the i2c-mux code expects the root-adapter to have
2035     + * a locking depth of 0. But we always have only 1 client directly attached
2036     + * in the form of the Charger IC paired with the CHT Whiskey Cove PMIC.
2037     + */
2038     +static void cht_wc_i2c_adap_lock_bus(struct i2c_adapter *adapter,
2039     + unsigned int flags)
2040     +{
2041     + rt_mutex_lock_nested(&adapter->bus_lock, 1);
2042     +}
2043     +
2044     +static int cht_wc_i2c_adap_trylock_bus(struct i2c_adapter *adapter,
2045     + unsigned int flags)
2046     +{
2047     + return rt_mutex_trylock(&adapter->bus_lock);
2048     +}
2049     +
2050     +static void cht_wc_i2c_adap_unlock_bus(struct i2c_adapter *adapter,
2051     + unsigned int flags)
2052     +{
2053     + rt_mutex_unlock(&adapter->bus_lock);
2054     +}
2055     +
2056     +static const struct i2c_lock_operations cht_wc_i2c_adap_lock_ops = {
2057     + .lock_bus = cht_wc_i2c_adap_lock_bus,
2058     + .trylock_bus = cht_wc_i2c_adap_trylock_bus,
2059     + .unlock_bus = cht_wc_i2c_adap_unlock_bus,
2060     +};
2061     +
2062     /**** irqchip for the client connected to the extchgr i2c adapter ****/
2063     static void cht_wc_i2c_irq_lock(struct irq_data *data)
2064     {
2065     @@ -295,6 +340,7 @@ static int cht_wc_i2c_adap_i2c_probe(struct platform_device *pdev)
2066     adap->adapter.owner = THIS_MODULE;
2067     adap->adapter.class = I2C_CLASS_HWMON;
2068     adap->adapter.algo = &cht_wc_i2c_adap_algo;
2069     + adap->adapter.lock_ops = &cht_wc_i2c_adap_lock_ops;
2070     strlcpy(adap->adapter.name, "PMIC I2C Adapter",
2071     sizeof(adap->adapter.name));
2072     adap->adapter.dev.parent = &pdev->dev;
2073     diff --git a/drivers/mailbox/qcom-apcs-ipc-mailbox.c b/drivers/mailbox/qcom-apcs-ipc-mailbox.c
2074     index 333ed4a9d4b8..5255dcb551a7 100644
2075     --- a/drivers/mailbox/qcom-apcs-ipc-mailbox.c
2076     +++ b/drivers/mailbox/qcom-apcs-ipc-mailbox.c
2077     @@ -55,7 +55,6 @@ static const struct mbox_chan_ops qcom_apcs_ipc_ops = {
2078    
2079     static int qcom_apcs_ipc_probe(struct platform_device *pdev)
2080     {
2081     - struct device_node *np = pdev->dev.of_node;
2082     struct qcom_apcs_ipc *apcs;
2083     struct regmap *regmap;
2084     struct resource *res;
2085     @@ -63,6 +62,11 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
2086     void __iomem *base;
2087     unsigned long i;
2088     int ret;
2089     + const struct of_device_id apcs_clk_match_table[] = {
2090     + { .compatible = "qcom,msm8916-apcs-kpss-global", },
2091     + { .compatible = "qcom,qcs404-apcs-apps-global", },
2092     + {}
2093     + };
2094    
2095     apcs = devm_kzalloc(&pdev->dev, sizeof(*apcs), GFP_KERNEL);
2096     if (!apcs)
2097     @@ -97,7 +101,7 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
2098     return ret;
2099     }
2100    
2101     - if (of_device_is_compatible(np, "qcom,msm8916-apcs-kpss-global")) {
2102     + if (of_match_device(apcs_clk_match_table, &pdev->dev)) {
2103     apcs->clk = platform_device_register_data(&pdev->dev,
2104     "qcom-apcs-msm8916-clk",
2105     -1, NULL, 0);
2106     diff --git a/drivers/mfd/intel-lpss-pci.c b/drivers/mfd/intel-lpss-pci.c
2107     index 0e5282fc1467..c37c8bb86068 100644
2108     --- a/drivers/mfd/intel-lpss-pci.c
2109     +++ b/drivers/mfd/intel-lpss-pci.c
2110     @@ -39,6 +39,8 @@ static int intel_lpss_pci_probe(struct pci_dev *pdev,
2111     info->mem = &pdev->resource[0];
2112     info->irq = pdev->irq;
2113    
2114     + pdev->d3cold_delay = 0;
2115     +
2116     /* Probably it is enough to set this for iDMA capable devices only */
2117     pci_set_master(pdev);
2118     pci_try_set_mwi(pdev);
2119     diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c
2120     index 35b767baf21f..c281c488a306 100644
2121     --- a/drivers/net/dsa/rtl8366.c
2122     +++ b/drivers/net/dsa/rtl8366.c
2123     @@ -339,10 +339,12 @@ int rtl8366_vlan_prepare(struct dsa_switch *ds, int port,
2124     const struct switchdev_obj_port_vlan *vlan)
2125     {
2126     struct realtek_smi *smi = ds->priv;
2127     + u16 vid;
2128     int ret;
2129    
2130     - if (!smi->ops->is_vlan_valid(smi, port))
2131     - return -EINVAL;
2132     + for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++)
2133     + if (!smi->ops->is_vlan_valid(smi, vid))
2134     + return -EINVAL;
2135    
2136     dev_info(smi->dev, "prepare VLANs %04x..%04x\n",
2137     vlan->vid_begin, vlan->vid_end);
2138     @@ -370,8 +372,9 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
2139     u16 vid;
2140     int ret;
2141    
2142     - if (!smi->ops->is_vlan_valid(smi, port))
2143     - return;
2144     + for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++)
2145     + if (!smi->ops->is_vlan_valid(smi, vid))
2146     + return;
2147    
2148     dev_info(smi->dev, "add VLAN on port %d, %s, %s\n",
2149     port,
2150     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
2151     index 4bc211093c98..dba8a0c1eda3 100644
2152     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
2153     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
2154     @@ -137,13 +137,12 @@ static int uldrx_handler(struct sge_rspq *q, const __be64 *rsp,
2155     static int alloc_uld_rxqs(struct adapter *adap,
2156     struct sge_uld_rxq_info *rxq_info, bool lro)
2157     {
2158     - struct sge *s = &adap->sge;
2159     unsigned int nq = rxq_info->nrxq + rxq_info->nciq;
2160     + int i, err, msi_idx, que_idx = 0, bmap_idx = 0;
2161     struct sge_ofld_rxq *q = rxq_info->uldrxq;
2162     unsigned short *ids = rxq_info->rspq_id;
2163     - unsigned int bmap_idx = 0;
2164     + struct sge *s = &adap->sge;
2165     unsigned int per_chan;
2166     - int i, err, msi_idx, que_idx = 0;
2167    
2168     per_chan = rxq_info->nrxq / adap->params.nports;
2169    
2170     @@ -161,6 +160,10 @@ static int alloc_uld_rxqs(struct adapter *adap,
2171    
2172     if (msi_idx >= 0) {
2173     bmap_idx = get_msix_idx_from_bmap(adap);
2174     + if (bmap_idx < 0) {
2175     + err = -ENOSPC;
2176     + goto freeout;
2177     + }
2178     msi_idx = adap->msix_info_ulds[bmap_idx].idx;
2179     }
2180     err = t4_sge_alloc_rxq(adap, &q->rspq, false,
2181     diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
2182     index 10b075bc5959..783ee6a32b5d 100644
2183     --- a/drivers/net/ethernet/qlogic/qla3xxx.c
2184     +++ b/drivers/net/ethernet/qlogic/qla3xxx.c
2185     @@ -2788,6 +2788,7 @@ static int ql_alloc_large_buffers(struct ql3_adapter *qdev)
2186     netdev_err(qdev->ndev,
2187     "PCI mapping failed with error: %d\n",
2188     err);
2189     + dev_kfree_skb_irq(skb);
2190     ql_free_large_buffers(qdev);
2191     return -ENOMEM;
2192     }
2193     diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
2194     index d6916f787fce..5251c5f6f96e 100644
2195     --- a/drivers/net/usb/hso.c
2196     +++ b/drivers/net/usb/hso.c
2197     @@ -2634,14 +2634,18 @@ static struct hso_device *hso_create_bulk_serial_device(
2198     */
2199     if (serial->tiocmget) {
2200     tiocmget = serial->tiocmget;
2201     + tiocmget->endp = hso_get_ep(interface,
2202     + USB_ENDPOINT_XFER_INT,
2203     + USB_DIR_IN);
2204     + if (!tiocmget->endp) {
2205     + dev_err(&interface->dev, "Failed to find INT IN ep\n");
2206     + goto exit;
2207     + }
2208     +
2209     tiocmget->urb = usb_alloc_urb(0, GFP_KERNEL);
2210     if (tiocmget->urb) {
2211     mutex_init(&tiocmget->mutex);
2212     init_waitqueue_head(&tiocmget->waitq);
2213     - tiocmget->endp = hso_get_ep(
2214     - interface,
2215     - USB_ENDPOINT_XFER_INT,
2216     - USB_DIR_IN);
2217     } else
2218     hso_free_tiomget(serial);
2219     }
2220     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2221     index 51017c6bb3bc..6f517e673020 100644
2222     --- a/drivers/net/usb/qmi_wwan.c
2223     +++ b/drivers/net/usb/qmi_wwan.c
2224     @@ -1286,6 +1286,7 @@ static const struct usb_device_id products[] = {
2225     {QMI_FIXED_INTF(0x1e2d, 0x0082, 4)}, /* Cinterion PHxx,PXxx (2 RmNet) */
2226     {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */
2227     {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/
2228     + {QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */
2229     {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
2230     {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
2231     {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
2232     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
2233     index a2a4c19bc95e..6b4675a9494b 100644
2234     --- a/drivers/net/xen-netfront.c
2235     +++ b/drivers/net/xen-netfront.c
2236     @@ -890,9 +890,9 @@ static int xennet_set_skb_gso(struct sk_buff *skb,
2237     return 0;
2238     }
2239    
2240     -static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
2241     - struct sk_buff *skb,
2242     - struct sk_buff_head *list)
2243     +static int xennet_fill_frags(struct netfront_queue *queue,
2244     + struct sk_buff *skb,
2245     + struct sk_buff_head *list)
2246     {
2247     RING_IDX cons = queue->rx.rsp_cons;
2248     struct sk_buff *nskb;
2249     @@ -911,7 +911,7 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
2250     if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
2251     queue->rx.rsp_cons = ++cons + skb_queue_len(list);
2252     kfree_skb(nskb);
2253     - return ~0U;
2254     + return -ENOENT;
2255     }
2256    
2257     skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
2258     @@ -922,7 +922,9 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
2259     kfree_skb(nskb);
2260     }
2261    
2262     - return cons;
2263     + queue->rx.rsp_cons = cons;
2264     +
2265     + return 0;
2266     }
2267    
2268     static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
2269     @@ -1048,8 +1050,7 @@ err:
2270     skb->data_len = rx->status;
2271     skb->len += rx->status;
2272    
2273     - i = xennet_fill_frags(queue, skb, &tmpq);
2274     - if (unlikely(i == ~0U))
2275     + if (unlikely(xennet_fill_frags(queue, skb, &tmpq)))
2276     goto err;
2277    
2278     if (rx->flags & XEN_NETRXF_csum_blank)
2279     @@ -1059,7 +1060,7 @@ err:
2280    
2281     __skb_queue_tail(&rxq, skb);
2282    
2283     - queue->rx.rsp_cons = ++i;
2284     + i = ++queue->rx.rsp_cons;
2285     work_done++;
2286     }
2287    
2288     diff --git a/drivers/pci/controller/dwc/pci-exynos.c b/drivers/pci/controller/dwc/pci-exynos.c
2289     index cee5f2f590e2..14a6ba4067fb 100644
2290     --- a/drivers/pci/controller/dwc/pci-exynos.c
2291     +++ b/drivers/pci/controller/dwc/pci-exynos.c
2292     @@ -465,7 +465,7 @@ static int __init exynos_pcie_probe(struct platform_device *pdev)
2293    
2294     ep->phy = devm_of_phy_get(dev, np, NULL);
2295     if (IS_ERR(ep->phy)) {
2296     - if (PTR_ERR(ep->phy) == -EPROBE_DEFER)
2297     + if (PTR_ERR(ep->phy) != -ENODEV)
2298     return PTR_ERR(ep->phy);
2299    
2300     ep->phy = NULL;
2301     diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
2302     index 3826b444298c..3b2ceb566728 100644
2303     --- a/drivers/pci/controller/dwc/pci-imx6.c
2304     +++ b/drivers/pci/controller/dwc/pci-imx6.c
2305     @@ -807,8 +807,8 @@ static int imx6_pcie_probe(struct platform_device *pdev)
2306    
2307     imx6_pcie->vpcie = devm_regulator_get_optional(&pdev->dev, "vpcie");
2308     if (IS_ERR(imx6_pcie->vpcie)) {
2309     - if (PTR_ERR(imx6_pcie->vpcie) == -EPROBE_DEFER)
2310     - return -EPROBE_DEFER;
2311     + if (PTR_ERR(imx6_pcie->vpcie) != -ENODEV)
2312     + return PTR_ERR(imx6_pcie->vpcie);
2313     imx6_pcie->vpcie = NULL;
2314     }
2315    
2316     diff --git a/drivers/pci/controller/dwc/pcie-histb.c b/drivers/pci/controller/dwc/pcie-histb.c
2317     index 7b32e619b959..a3489839a8fc 100644
2318     --- a/drivers/pci/controller/dwc/pcie-histb.c
2319     +++ b/drivers/pci/controller/dwc/pcie-histb.c
2320     @@ -340,8 +340,8 @@ static int histb_pcie_probe(struct platform_device *pdev)
2321    
2322     hipcie->vpcie = devm_regulator_get_optional(dev, "vpcie");
2323     if (IS_ERR(hipcie->vpcie)) {
2324     - if (PTR_ERR(hipcie->vpcie) == -EPROBE_DEFER)
2325     - return -EPROBE_DEFER;
2326     + if (PTR_ERR(hipcie->vpcie) != -ENODEV)
2327     + return PTR_ERR(hipcie->vpcie);
2328     hipcie->vpcie = NULL;
2329     }
2330    
2331     diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c
2332     index f4f53d092e00..976eaa9a9f26 100644
2333     --- a/drivers/pci/controller/pci-tegra.c
2334     +++ b/drivers/pci/controller/pci-tegra.c
2335     @@ -1975,14 +1975,15 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
2336     err = of_pci_get_devfn(port);
2337     if (err < 0) {
2338     dev_err(dev, "failed to parse address: %d\n", err);
2339     - return err;
2340     + goto err_node_put;
2341     }
2342    
2343     index = PCI_SLOT(err);
2344    
2345     if (index < 1 || index > soc->num_ports) {
2346     dev_err(dev, "invalid port number: %d\n", index);
2347     - return -EINVAL;
2348     + err = -EINVAL;
2349     + goto err_node_put;
2350     }
2351    
2352     index--;
2353     @@ -1991,12 +1992,13 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
2354     if (err < 0) {
2355     dev_err(dev, "failed to parse # of lanes: %d\n",
2356     err);
2357     - return err;
2358     + goto err_node_put;
2359     }
2360    
2361     if (value > 16) {
2362     dev_err(dev, "invalid # of lanes: %u\n", value);
2363     - return -EINVAL;
2364     + err = -EINVAL;
2365     + goto err_node_put;
2366     }
2367    
2368     lanes |= value << (index << 3);
2369     @@ -2010,13 +2012,15 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
2370     lane += value;
2371    
2372     rp = devm_kzalloc(dev, sizeof(*rp), GFP_KERNEL);
2373     - if (!rp)
2374     - return -ENOMEM;
2375     + if (!rp) {
2376     + err = -ENOMEM;
2377     + goto err_node_put;
2378     + }
2379    
2380     err = of_address_to_resource(port, 0, &rp->regs);
2381     if (err < 0) {
2382     dev_err(dev, "failed to parse address: %d\n", err);
2383     - return err;
2384     + goto err_node_put;
2385     }
2386    
2387     INIT_LIST_HEAD(&rp->list);
2388     @@ -2043,6 +2047,10 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
2389     return err;
2390    
2391     return 0;
2392     +
2393     +err_node_put:
2394     + of_node_put(port);
2395     + return err;
2396     }
2397    
2398     /*
2399     diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
2400     index 1372d270764f..5ce8e6375687 100644
2401     --- a/drivers/pci/controller/pcie-rockchip-host.c
2402     +++ b/drivers/pci/controller/pcie-rockchip-host.c
2403     @@ -608,29 +608,29 @@ static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip)
2404    
2405     rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v");
2406     if (IS_ERR(rockchip->vpcie12v)) {
2407     - if (PTR_ERR(rockchip->vpcie12v) == -EPROBE_DEFER)
2408     - return -EPROBE_DEFER;
2409     + if (PTR_ERR(rockchip->vpcie12v) != -ENODEV)
2410     + return PTR_ERR(rockchip->vpcie12v);
2411     dev_info(dev, "no vpcie12v regulator found\n");
2412     }
2413    
2414     rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3");
2415     if (IS_ERR(rockchip->vpcie3v3)) {
2416     - if (PTR_ERR(rockchip->vpcie3v3) == -EPROBE_DEFER)
2417     - return -EPROBE_DEFER;
2418     + if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV)
2419     + return PTR_ERR(rockchip->vpcie3v3);
2420     dev_info(dev, "no vpcie3v3 regulator found\n");
2421     }
2422    
2423     rockchip->vpcie1v8 = devm_regulator_get_optional(dev, "vpcie1v8");
2424     if (IS_ERR(rockchip->vpcie1v8)) {
2425     - if (PTR_ERR(rockchip->vpcie1v8) == -EPROBE_DEFER)
2426     - return -EPROBE_DEFER;
2427     + if (PTR_ERR(rockchip->vpcie1v8) != -ENODEV)
2428     + return PTR_ERR(rockchip->vpcie1v8);
2429     dev_info(dev, "no vpcie1v8 regulator found\n");
2430     }
2431    
2432     rockchip->vpcie0v9 = devm_regulator_get_optional(dev, "vpcie0v9");
2433     if (IS_ERR(rockchip->vpcie0v9)) {
2434     - if (PTR_ERR(rockchip->vpcie0v9) == -EPROBE_DEFER)
2435     - return -EPROBE_DEFER;
2436     + if (PTR_ERR(rockchip->vpcie0v9) != -ENODEV)
2437     + return PTR_ERR(rockchip->vpcie0v9);
2438     dev_info(dev, "no vpcie0v9 regulator found\n");
2439     }
2440    
2441     diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
2442     index 857c358b727b..cc860c5f7d26 100644
2443     --- a/drivers/pci/hotplug/rpaphp_core.c
2444     +++ b/drivers/pci/hotplug/rpaphp_core.c
2445     @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
2446     struct of_drc_info drc;
2447     const __be32 *value;
2448     char cell_drc_name[MAX_DRC_NAME_LEN];
2449     - int j, fndit;
2450     + int j;
2451    
2452     info = of_find_property(dn->parent, "ibm,drc-info", NULL);
2453     if (info == NULL)
2454     @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
2455    
2456     /* Should now know end of current entry */
2457    
2458     - if (my_index > drc.last_drc_index)
2459     - continue;
2460     -
2461     - fndit = 1;
2462     - break;
2463     + /* Found it */
2464     + if (my_index <= drc.last_drc_index) {
2465     + sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
2466     + my_index);
2467     + break;
2468     + }
2469     }
2470     - /* Found it */
2471     -
2472     - if (fndit)
2473     - sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
2474     - my_index);
2475    
2476     if (((drc_name == NULL) ||
2477     (drc_name && !strcmp(drc_name, cell_drc_name))) &&
2478     diff --git a/drivers/pinctrl/meson/pinctrl-meson-gxbb.c b/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
2479     index 4edeb4cae72a..c4c70dc57dbe 100644
2480     --- a/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
2481     +++ b/drivers/pinctrl/meson/pinctrl-meson-gxbb.c
2482     @@ -198,8 +198,8 @@ static const unsigned int uart_rts_b_pins[] = { GPIODV_27 };
2483    
2484     static const unsigned int uart_tx_c_pins[] = { GPIOY_13 };
2485     static const unsigned int uart_rx_c_pins[] = { GPIOY_14 };
2486     -static const unsigned int uart_cts_c_pins[] = { GPIOX_11 };
2487     -static const unsigned int uart_rts_c_pins[] = { GPIOX_12 };
2488     +static const unsigned int uart_cts_c_pins[] = { GPIOY_11 };
2489     +static const unsigned int uart_rts_c_pins[] = { GPIOY_12 };
2490    
2491     static const unsigned int i2c_sck_a_pins[] = { GPIODV_25 };
2492     static const unsigned int i2c_sda_a_pins[] = { GPIODV_24 };
2493     @@ -445,10 +445,10 @@ static struct meson_pmx_group meson_gxbb_periphs_groups[] = {
2494     GROUP(pwm_f_x, 3, 18),
2495    
2496     /* Bank Y */
2497     - GROUP(uart_cts_c, 1, 19),
2498     - GROUP(uart_rts_c, 1, 18),
2499     - GROUP(uart_tx_c, 1, 17),
2500     - GROUP(uart_rx_c, 1, 16),
2501     + GROUP(uart_cts_c, 1, 17),
2502     + GROUP(uart_rts_c, 1, 16),
2503     + GROUP(uart_tx_c, 1, 19),
2504     + GROUP(uart_rx_c, 1, 18),
2505     GROUP(pwm_a_y, 1, 21),
2506     GROUP(pwm_f_y, 1, 20),
2507     GROUP(i2s_out_ch23_y, 1, 5),
2508     diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
2509     index 1425c2874d40..cd7a5d95b499 100644
2510     --- a/drivers/pinctrl/pinctrl-amd.c
2511     +++ b/drivers/pinctrl/pinctrl-amd.c
2512     @@ -569,15 +569,25 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
2513     !(regval & BIT(INTERRUPT_MASK_OFF)))
2514     continue;
2515     irq = irq_find_mapping(gc->irq.domain, irqnr + i);
2516     - generic_handle_irq(irq);
2517     + if (irq != 0)
2518     + generic_handle_irq(irq);
2519    
2520     /* Clear interrupt.
2521     * We must read the pin register again, in case the
2522     * value was changed while executing
2523     * generic_handle_irq() above.
2524     + * If we didn't find a mapping for the interrupt,
2525     + * disable it in order to avoid a system hang caused
2526     + * by an interrupt storm.
2527     */
2528     raw_spin_lock_irqsave(&gpio_dev->lock, flags);
2529     regval = readl(regs + i);
2530     + if (irq == 0) {
2531     + regval &= ~BIT(INTERRUPT_ENABLE_OFF);
2532     + dev_dbg(&gpio_dev->pdev->dev,
2533     + "Disabling spurious GPIO IRQ %d\n",
2534     + irqnr + i);
2535     + }
2536     writel(regval, regs + i);
2537     raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
2538     ret = IRQ_HANDLED;
2539     diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.c b/drivers/pinctrl/tegra/pinctrl-tegra.c
2540     index 1aba75897d14..26a3f1eb9c6b 100644
2541     --- a/drivers/pinctrl/tegra/pinctrl-tegra.c
2542     +++ b/drivers/pinctrl/tegra/pinctrl-tegra.c
2543     @@ -40,7 +40,9 @@ static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)
2544    
2545     static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg)
2546     {
2547     - writel(val, pmx->regs[bank] + reg);
2548     + writel_relaxed(val, pmx->regs[bank] + reg);
2549     + /* make sure pinmux register write completed */
2550     + pmx_readl(pmx, bank, reg);
2551     }
2552    
2553     static int tegra_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
2554     diff --git a/drivers/rtc/rtc-pcf85363.c b/drivers/rtc/rtc-pcf85363.c
2555     index c04a1edcd571..c3702684b342 100644
2556     --- a/drivers/rtc/rtc-pcf85363.c
2557     +++ b/drivers/rtc/rtc-pcf85363.c
2558     @@ -169,7 +169,12 @@ static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)
2559     buf[DT_YEARS] = bin2bcd(tm->tm_year % 100);
2560    
2561     ret = regmap_bulk_write(pcf85363->regmap, CTRL_STOP_EN,
2562     - tmp, sizeof(tmp));
2563     + tmp, 2);
2564     + if (ret)
2565     + return ret;
2566     +
2567     + ret = regmap_bulk_write(pcf85363->regmap, DT_100THS,
2568     + buf, sizeof(tmp) - 2);
2569     if (ret)
2570     return ret;
2571    
2572     diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
2573     index b2483a749ac4..3cf011e12053 100644
2574     --- a/drivers/rtc/rtc-snvs.c
2575     +++ b/drivers/rtc/rtc-snvs.c
2576     @@ -273,6 +273,10 @@ static int snvs_rtc_probe(struct platform_device *pdev)
2577     if (!data)
2578     return -ENOMEM;
2579    
2580     + data->rtc = devm_rtc_allocate_device(&pdev->dev);
2581     + if (IS_ERR(data->rtc))
2582     + return PTR_ERR(data->rtc);
2583     +
2584     data->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "regmap");
2585    
2586     if (IS_ERR(data->regmap)) {
2587     @@ -335,10 +339,9 @@ static int snvs_rtc_probe(struct platform_device *pdev)
2588     goto error_rtc_device_register;
2589     }
2590    
2591     - data->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
2592     - &snvs_rtc_ops, THIS_MODULE);
2593     - if (IS_ERR(data->rtc)) {
2594     - ret = PTR_ERR(data->rtc);
2595     + data->rtc->ops = &snvs_rtc_ops;
2596     + ret = rtc_register_device(data->rtc);
2597     + if (ret) {
2598     dev_err(&pdev->dev, "failed to register rtc: %d\n", ret);
2599     goto error_rtc_device_register;
2600     }
2601     diff --git a/drivers/scsi/scsi_logging.c b/drivers/scsi/scsi_logging.c
2602     index bd70339c1242..03d9855a6afd 100644
2603     --- a/drivers/scsi/scsi_logging.c
2604     +++ b/drivers/scsi/scsi_logging.c
2605     @@ -16,57 +16,15 @@
2606     #include <scsi/scsi_eh.h>
2607     #include <scsi/scsi_dbg.h>
2608    
2609     -#define SCSI_LOG_SPOOLSIZE 4096
2610     -
2611     -#if (SCSI_LOG_SPOOLSIZE / SCSI_LOG_BUFSIZE) > BITS_PER_LONG
2612     -#warning SCSI logging bitmask too large
2613     -#endif
2614     -
2615     -struct scsi_log_buf {
2616     - char buffer[SCSI_LOG_SPOOLSIZE];
2617     - unsigned long map;
2618     -};
2619     -
2620     -static DEFINE_PER_CPU(struct scsi_log_buf, scsi_format_log);
2621     -
2622     static char *scsi_log_reserve_buffer(size_t *len)
2623     {
2624     - struct scsi_log_buf *buf;
2625     - unsigned long map_bits = sizeof(buf->buffer) / SCSI_LOG_BUFSIZE;
2626     - unsigned long idx = 0;
2627     -
2628     - preempt_disable();
2629     - buf = this_cpu_ptr(&scsi_format_log);
2630     - idx = find_first_zero_bit(&buf->map, map_bits);
2631     - if (likely(idx < map_bits)) {
2632     - while (test_and_set_bit(idx, &buf->map)) {
2633     - idx = find_next_zero_bit(&buf->map, map_bits, idx);
2634     - if (idx >= map_bits)
2635     - break;
2636     - }
2637     - }
2638     - if (WARN_ON(idx >= map_bits)) {
2639     - preempt_enable();
2640     - return NULL;
2641     - }
2642     - *len = SCSI_LOG_BUFSIZE;
2643     - return buf->buffer + idx * SCSI_LOG_BUFSIZE;
2644     + *len = 128;
2645     + return kmalloc(*len, GFP_ATOMIC);
2646     }
2647    
2648     static void scsi_log_release_buffer(char *bufptr)
2649     {
2650     - struct scsi_log_buf *buf;
2651     - unsigned long idx;
2652     - int ret;
2653     -
2654     - buf = this_cpu_ptr(&scsi_format_log);
2655     - if (bufptr >= buf->buffer &&
2656     - bufptr < buf->buffer + SCSI_LOG_SPOOLSIZE) {
2657     - idx = (bufptr - buf->buffer) / SCSI_LOG_BUFSIZE;
2658     - ret = test_and_clear_bit(idx, &buf->map);
2659     - WARN_ON(!ret);
2660     - }
2661     - preempt_enable();
2662     + kfree(bufptr);
2663     }
2664    
2665     static inline const char *scmd_name(const struct scsi_cmnd *scmd)
2666     diff --git a/drivers/soundwire/Kconfig b/drivers/soundwire/Kconfig
2667     index 19c8efb9a5ee..1ba1556f1987 100644
2668     --- a/drivers/soundwire/Kconfig
2669     +++ b/drivers/soundwire/Kconfig
2670     @@ -3,8 +3,8 @@
2671     #
2672    
2673     menuconfig SOUNDWIRE
2674     - bool "SoundWire support"
2675     - ---help---
2676     + tristate "SoundWire support"
2677     + help
2678     SoundWire is a 2-Pin interface with data and clock line ratified
2679     by the MIPI Alliance. SoundWire is used for transporting data
2680     typically related to audio functions. SoundWire interface is
2681     @@ -16,17 +16,12 @@ if SOUNDWIRE
2682    
2683     comment "SoundWire Devices"
2684    
2685     -config SOUNDWIRE_BUS
2686     - tristate
2687     - select REGMAP_SOUNDWIRE
2688     -
2689     config SOUNDWIRE_CADENCE
2690     tristate
2691    
2692     config SOUNDWIRE_INTEL
2693     tristate "Intel SoundWire Master driver"
2694     select SOUNDWIRE_CADENCE
2695     - select SOUNDWIRE_BUS
2696     depends on X86 && ACPI && SND_SOC
2697     ---help---
2698     SoundWire Intel Master driver.
2699     diff --git a/drivers/soundwire/Makefile b/drivers/soundwire/Makefile
2700     index 5817beaca0e1..1e2c00163142 100644
2701     --- a/drivers/soundwire/Makefile
2702     +++ b/drivers/soundwire/Makefile
2703     @@ -4,7 +4,7 @@
2704    
2705     #Bus Objs
2706     soundwire-bus-objs := bus_type.o bus.o slave.o mipi_disco.o stream.o
2707     -obj-$(CONFIG_SOUNDWIRE_BUS) += soundwire-bus.o
2708     +obj-$(CONFIG_SOUNDWIRE) += soundwire-bus.o
2709    
2710     #Cadence Objs
2711     soundwire-cadence-objs := cadence_master.o
2712     diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
2713     index a6e2581ada70..29bc99c4a7b6 100644
2714     --- a/drivers/soundwire/intel.c
2715     +++ b/drivers/soundwire/intel.c
2716     @@ -282,6 +282,16 @@ intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool pcm)
2717    
2718     if (pcm) {
2719     count = intel_readw(shim, SDW_SHIM_PCMSYCHC(link_id, pdi_num));
2720     +
2721     + /*
2722     + * WORKAROUND: on all existing Intel controllers, pdi
2723     + * number 2 reports channel count as 1 even though it
2724     + * supports 8 channels. Performing hardcoding for pdi
2725     + * number 2.
2726     + */
2727     + if (pdi_num == 2)
2728     + count = 7;
2729     +
2730     } else {
2731     count = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
2732     count = ((count & SDW_SHIM_PDMSCAP_CPSS) >>
2733     diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
2734     index 6cf00d9f512b..a92c2868d902 100644
2735     --- a/drivers/vfio/pci/vfio_pci.c
2736     +++ b/drivers/vfio/pci/vfio_pci.c
2737     @@ -373,11 +373,20 @@ static void vfio_pci_disable(struct vfio_pci_device *vdev)
2738     pci_write_config_word(pdev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
2739    
2740     /*
2741     - * Try to reset the device. The success of this is dependent on
2742     - * being able to lock the device, which is not always possible.
2743     + * Try to get the locks ourselves to prevent a deadlock. The
2744     + * success of this is dependent on being able to lock the device,
2745     + * which is not always possible.
2746     + * We can not use the "try" reset interface here, which will
2747     + * overwrite the previously restored configuration information.
2748     */
2749     - if (vdev->reset_works && !pci_try_reset_function(pdev))
2750     - vdev->needs_reset = false;
2751     + if (vdev->reset_works && pci_cfg_access_trylock(pdev)) {
2752     + if (device_trylock(&pdev->dev)) {
2753     + if (!__pci_reset_function_locked(pdev))
2754     + vdev->needs_reset = false;
2755     + device_unlock(&pdev->dev);
2756     + }
2757     + pci_cfg_access_unlock(pdev);
2758     + }
2759    
2760     pci_restore_state(pdev);
2761     out:
2762     diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
2763     index 6439231f2db2..da565f39c9b0 100644
2764     --- a/drivers/video/fbdev/ssd1307fb.c
2765     +++ b/drivers/video/fbdev/ssd1307fb.c
2766     @@ -433,7 +433,7 @@ static int ssd1307fb_init(struct ssd1307fb_par *par)
2767     if (ret < 0)
2768     return ret;
2769    
2770     - ret = ssd1307fb_write_cmd(par->client, 0x0);
2771     + ret = ssd1307fb_write_cmd(par->client, par->page_offset);
2772     if (ret < 0)
2773     return ret;
2774    
2775     diff --git a/fs/9p/cache.c b/fs/9p/cache.c
2776     index 9eb34701a566..a43a8d2436db 100644
2777     --- a/fs/9p/cache.c
2778     +++ b/fs/9p/cache.c
2779     @@ -66,6 +66,8 @@ void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses)
2780     if (!v9ses->cachetag) {
2781     if (v9fs_random_cachetag(v9ses) < 0) {
2782     v9ses->fscache = NULL;
2783     + kfree(v9ses->cachetag);
2784     + v9ses->cachetag = NULL;
2785     return;
2786     }
2787     }
2788     diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
2789     index e8e27cdc2f67..7edc8172c53a 100644
2790     --- a/fs/ext4/block_validity.c
2791     +++ b/fs/ext4/block_validity.c
2792     @@ -38,6 +38,7 @@ int __init ext4_init_system_zone(void)
2793    
2794     void ext4_exit_system_zone(void)
2795     {
2796     + rcu_barrier();
2797     kmem_cache_destroy(ext4_system_zone_cachep);
2798     }
2799    
2800     @@ -49,17 +50,26 @@ static inline int can_merge(struct ext4_system_zone *entry1,
2801     return 0;
2802     }
2803    
2804     +static void release_system_zone(struct ext4_system_blocks *system_blks)
2805     +{
2806     + struct ext4_system_zone *entry, *n;
2807     +
2808     + rbtree_postorder_for_each_entry_safe(entry, n,
2809     + &system_blks->root, node)
2810     + kmem_cache_free(ext4_system_zone_cachep, entry);
2811     +}
2812     +
2813     /*
2814     * Mark a range of blocks as belonging to the "system zone" --- that
2815     * is, filesystem metadata blocks which should never be used by
2816     * inodes.
2817     */
2818     -static int add_system_zone(struct ext4_sb_info *sbi,
2819     +static int add_system_zone(struct ext4_system_blocks *system_blks,
2820     ext4_fsblk_t start_blk,
2821     unsigned int count)
2822     {
2823     struct ext4_system_zone *new_entry = NULL, *entry;
2824     - struct rb_node **n = &sbi->system_blks.rb_node, *node;
2825     + struct rb_node **n = &system_blks->root.rb_node, *node;
2826     struct rb_node *parent = NULL, *new_node = NULL;
2827    
2828     while (*n) {
2829     @@ -91,7 +101,7 @@ static int add_system_zone(struct ext4_sb_info *sbi,
2830     new_node = &new_entry->node;
2831    
2832     rb_link_node(new_node, parent, n);
2833     - rb_insert_color(new_node, &sbi->system_blks);
2834     + rb_insert_color(new_node, &system_blks->root);
2835     }
2836    
2837     /* Can we merge to the left? */
2838     @@ -101,7 +111,7 @@ static int add_system_zone(struct ext4_sb_info *sbi,
2839     if (can_merge(entry, new_entry)) {
2840     new_entry->start_blk = entry->start_blk;
2841     new_entry->count += entry->count;
2842     - rb_erase(node, &sbi->system_blks);
2843     + rb_erase(node, &system_blks->root);
2844     kmem_cache_free(ext4_system_zone_cachep, entry);
2845     }
2846     }
2847     @@ -112,7 +122,7 @@ static int add_system_zone(struct ext4_sb_info *sbi,
2848     entry = rb_entry(node, struct ext4_system_zone, node);
2849     if (can_merge(new_entry, entry)) {
2850     new_entry->count += entry->count;
2851     - rb_erase(node, &sbi->system_blks);
2852     + rb_erase(node, &system_blks->root);
2853     kmem_cache_free(ext4_system_zone_cachep, entry);
2854     }
2855     }
2856     @@ -126,7 +136,7 @@ static void debug_print_tree(struct ext4_sb_info *sbi)
2857     int first = 1;
2858    
2859     printk(KERN_INFO "System zones: ");
2860     - node = rb_first(&sbi->system_blks);
2861     + node = rb_first(&sbi->system_blks->root);
2862     while (node) {
2863     entry = rb_entry(node, struct ext4_system_zone, node);
2864     printk(KERN_CONT "%s%llu-%llu", first ? "" : ", ",
2865     @@ -137,7 +147,47 @@ static void debug_print_tree(struct ext4_sb_info *sbi)
2866     printk(KERN_CONT "\n");
2867     }
2868    
2869     -static int ext4_protect_reserved_inode(struct super_block *sb, u32 ino)
2870     +/*
2871     + * Returns 1 if the passed-in block region (start_blk,
2872     + * start_blk+count) is valid; 0 if some part of the block region
2873     + * overlaps with filesystem metadata blocks.
2874     + */
2875     +static int ext4_data_block_valid_rcu(struct ext4_sb_info *sbi,
2876     + struct ext4_system_blocks *system_blks,
2877     + ext4_fsblk_t start_blk,
2878     + unsigned int count)
2879     +{
2880     + struct ext4_system_zone *entry;
2881     + struct rb_node *n;
2882     +
2883     + if ((start_blk <= le32_to_cpu(sbi->s_es->s_first_data_block)) ||
2884     + (start_blk + count < start_blk) ||
2885     + (start_blk + count > ext4_blocks_count(sbi->s_es))) {
2886     + sbi->s_es->s_last_error_block = cpu_to_le64(start_blk);
2887     + return 0;
2888     + }
2889     +
2890     + if (system_blks == NULL)
2891     + return 1;
2892     +
2893     + n = system_blks->root.rb_node;
2894     + while (n) {
2895     + entry = rb_entry(n, struct ext4_system_zone, node);
2896     + if (start_blk + count - 1 < entry->start_blk)
2897     + n = n->rb_left;
2898     + else if (start_blk >= (entry->start_blk + entry->count))
2899     + n = n->rb_right;
2900     + else {
2901     + sbi->s_es->s_last_error_block = cpu_to_le64(start_blk);
2902     + return 0;
2903     + }
2904     + }
2905     + return 1;
2906     +}
2907     +
2908     +static int ext4_protect_reserved_inode(struct super_block *sb,
2909     + struct ext4_system_blocks *system_blks,
2910     + u32 ino)
2911     {
2912     struct inode *inode;
2913     struct ext4_sb_info *sbi = EXT4_SB(sb);
2914     @@ -163,14 +213,15 @@ static int ext4_protect_reserved_inode(struct super_block *sb, u32 ino)
2915     if (n == 0) {
2916     i++;
2917     } else {
2918     - if (!ext4_data_block_valid(sbi, map.m_pblk, n)) {
2919     + if (!ext4_data_block_valid_rcu(sbi, system_blks,
2920     + map.m_pblk, n)) {
2921     ext4_error(sb, "blocks %llu-%llu from inode %u "
2922     "overlap system zone", map.m_pblk,
2923     map.m_pblk + map.m_len - 1, ino);
2924     err = -EFSCORRUPTED;
2925     break;
2926     }
2927     - err = add_system_zone(sbi, map.m_pblk, n);
2928     + err = add_system_zone(system_blks, map.m_pblk, n);
2929     if (err < 0)
2930     break;
2931     i += n;
2932     @@ -180,93 +231,129 @@ static int ext4_protect_reserved_inode(struct super_block *sb, u32 ino)
2933     return err;
2934     }
2935    
2936     +static void ext4_destroy_system_zone(struct rcu_head *rcu)
2937     +{
2938     + struct ext4_system_blocks *system_blks;
2939     +
2940     + system_blks = container_of(rcu, struct ext4_system_blocks, rcu);
2941     + release_system_zone(system_blks);
2942     + kfree(system_blks);
2943     +}
2944     +
2945     +/*
2946     + * Build system zone rbtree which is used for block validity checking.
2947     + *
2948     + * The update of system_blks pointer in this function is protected by
2949     + * sb->s_umount semaphore. However we have to be careful as we can be
2950     + * racing with ext4_data_block_valid() calls reading system_blks rbtree
2951     + * protected only by RCU. That's why we first build the rbtree and then
2952     + * swap it in place.
2953     + */
2954     int ext4_setup_system_zone(struct super_block *sb)
2955     {
2956     ext4_group_t ngroups = ext4_get_groups_count(sb);
2957     struct ext4_sb_info *sbi = EXT4_SB(sb);
2958     + struct ext4_system_blocks *system_blks;
2959     struct ext4_group_desc *gdp;
2960     ext4_group_t i;
2961     int flex_size = ext4_flex_bg_size(sbi);
2962     int ret;
2963    
2964     if (!test_opt(sb, BLOCK_VALIDITY)) {
2965     - if (sbi->system_blks.rb_node)
2966     + if (sbi->system_blks)
2967     ext4_release_system_zone(sb);
2968     return 0;
2969     }
2970     - if (sbi->system_blks.rb_node)
2971     + if (sbi->system_blks)
2972     return 0;
2973    
2974     + system_blks = kzalloc(sizeof(*system_blks), GFP_KERNEL);
2975     + if (!system_blks)
2976     + return -ENOMEM;
2977     +
2978     for (i=0; i < ngroups; i++) {
2979     if (ext4_bg_has_super(sb, i) &&
2980     ((i < 5) || ((i % flex_size) == 0)))
2981     - add_system_zone(sbi, ext4_group_first_block_no(sb, i),
2982     + add_system_zone(system_blks,
2983     + ext4_group_first_block_no(sb, i),
2984     ext4_bg_num_gdb(sb, i) + 1);
2985     gdp = ext4_get_group_desc(sb, i, NULL);
2986     - ret = add_system_zone(sbi, ext4_block_bitmap(sb, gdp), 1);
2987     + ret = add_system_zone(system_blks,
2988     + ext4_block_bitmap(sb, gdp), 1);
2989     if (ret)
2990     - return ret;
2991     - ret = add_system_zone(sbi, ext4_inode_bitmap(sb, gdp), 1);
2992     + goto err;
2993     + ret = add_system_zone(system_blks,
2994     + ext4_inode_bitmap(sb, gdp), 1);
2995     if (ret)
2996     - return ret;
2997     - ret = add_system_zone(sbi, ext4_inode_table(sb, gdp),
2998     + goto err;
2999     + ret = add_system_zone(system_blks,
3000     + ext4_inode_table(sb, gdp),
3001     sbi->s_itb_per_group);
3002     if (ret)
3003     - return ret;
3004     + goto err;
3005     }
3006     if (ext4_has_feature_journal(sb) && sbi->s_es->s_journal_inum) {
3007     - ret = ext4_protect_reserved_inode(sb,
3008     + ret = ext4_protect_reserved_inode(sb, system_blks,
3009     le32_to_cpu(sbi->s_es->s_journal_inum));
3010     if (ret)
3011     - return ret;
3012     + goto err;
3013     }
3014    
3015     + /*
3016     + * System blks rbtree complete, announce it once to prevent racing
3017     + * with ext4_data_block_valid() accessing the rbtree at the same
3018     + * time.
3019     + */
3020     + rcu_assign_pointer(sbi->system_blks, system_blks);
3021     +
3022     if (test_opt(sb, DEBUG))
3023     debug_print_tree(sbi);
3024     return 0;
3025     +err:
3026     + release_system_zone(system_blks);
3027     + kfree(system_blks);
3028     + return ret;
3029     }
3030    
3031     -/* Called when the filesystem is unmounted */
3032     +/*
3033     + * Called when the filesystem is unmounted or when remounting it with
3034     + * noblock_validity specified.
3035     + *
3036     + * The update of system_blks pointer in this function is protected by
3037     + * sb->s_umount semaphore. However we have to be careful as we can be
3038     + * racing with ext4_data_block_valid() calls reading system_blks rbtree
3039     + * protected only by RCU. So we first clear the system_blks pointer and
3040     + * then free the rbtree only after RCU grace period expires.
3041     + */
3042     void ext4_release_system_zone(struct super_block *sb)
3043     {
3044     - struct ext4_system_zone *entry, *n;
3045     + struct ext4_system_blocks *system_blks;
3046    
3047     - rbtree_postorder_for_each_entry_safe(entry, n,
3048     - &EXT4_SB(sb)->system_blks, node)
3049     - kmem_cache_free(ext4_system_zone_cachep, entry);
3050     + system_blks = rcu_dereference_protected(EXT4_SB(sb)->system_blks,
3051     + lockdep_is_held(&sb->s_umount));
3052     + rcu_assign_pointer(EXT4_SB(sb)->system_blks, NULL);
3053    
3054     - EXT4_SB(sb)->system_blks = RB_ROOT;
3055     + if (system_blks)
3056     + call_rcu(&system_blks->rcu, ext4_destroy_system_zone);
3057     }
3058    
3059     -/*
3060     - * Returns 1 if the passed-in block region (start_blk,
3061     - * start_blk+count) is valid; 0 if some part of the block region
3062     - * overlaps with filesystem metadata blocks.
3063     - */
3064     int ext4_data_block_valid(struct ext4_sb_info *sbi, ext4_fsblk_t start_blk,
3065     unsigned int count)
3066     {
3067     - struct ext4_system_zone *entry;
3068     - struct rb_node *n = sbi->system_blks.rb_node;
3069     + struct ext4_system_blocks *system_blks;
3070     + int ret;
3071    
3072     - if ((start_blk <= le32_to_cpu(sbi->s_es->s_first_data_block)) ||
3073     - (start_blk + count < start_blk) ||
3074     - (start_blk + count > ext4_blocks_count(sbi->s_es))) {
3075     - sbi->s_es->s_last_error_block = cpu_to_le64(start_blk);
3076     - return 0;
3077     - }
3078     - while (n) {
3079     - entry = rb_entry(n, struct ext4_system_zone, node);
3080     - if (start_blk + count - 1 < entry->start_blk)
3081     - n = n->rb_left;
3082     - else if (start_blk >= (entry->start_blk + entry->count))
3083     - n = n->rb_right;
3084     - else {
3085     - sbi->s_es->s_last_error_block = cpu_to_le64(start_blk);
3086     - return 0;
3087     - }
3088     - }
3089     - return 1;
3090     + /*
3091     + * Lock the system zone to prevent it being released concurrently
3092     + * when doing a remount which inverse current "[no]block_validity"
3093     + * mount option.
3094     + */
3095     + rcu_read_lock();
3096     + system_blks = rcu_dereference(sbi->system_blks);
3097     + ret = ext4_data_block_valid_rcu(sbi, system_blks, start_blk,
3098     + count);
3099     + rcu_read_unlock();
3100     + return ret;
3101     }
3102    
3103     int ext4_check_blockref(const char *function, unsigned int line,
3104     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
3105     index 1ee51d3a978a..f8456a423c4e 100644
3106     --- a/fs/ext4/ext4.h
3107     +++ b/fs/ext4/ext4.h
3108     @@ -194,6 +194,14 @@ struct ext4_map_blocks {
3109     unsigned int m_flags;
3110     };
3111    
3112     +/*
3113     + * Block validity checking, system zone rbtree.
3114     + */
3115     +struct ext4_system_blocks {
3116     + struct rb_root root;
3117     + struct rcu_head rcu;
3118     +};
3119     +
3120     /*
3121     * Flags for ext4_io_end->flags
3122     */
3123     @@ -1409,7 +1417,7 @@ struct ext4_sb_info {
3124     int s_jquota_fmt; /* Format of quota to use */
3125     #endif
3126     unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */
3127     - struct rb_root system_blks;
3128     + struct ext4_system_blocks __rcu *system_blks;
3129    
3130     #ifdef EXTENTS_STATS
3131     /* ext4 extents stats */
3132     diff --git a/fs/fat/dir.c b/fs/fat/dir.c
3133     index 7f5f3699fc6c..de60c05c0ca1 100644
3134     --- a/fs/fat/dir.c
3135     +++ b/fs/fat/dir.c
3136     @@ -1097,8 +1097,11 @@ static int fat_zeroed_cluster(struct inode *dir, sector_t blknr, int nr_used,
3137     err = -ENOMEM;
3138     goto error;
3139     }
3140     + /* Avoid race with userspace read via bdev */
3141     + lock_buffer(bhs[n]);
3142     memset(bhs[n]->b_data, 0, sb->s_blocksize);
3143     set_buffer_uptodate(bhs[n]);
3144     + unlock_buffer(bhs[n]);
3145     mark_buffer_dirty_inode(bhs[n], dir);
3146    
3147     n++;
3148     @@ -1155,6 +1158,8 @@ int fat_alloc_new_dir(struct inode *dir, struct timespec64 *ts)
3149     fat_time_unix2fat(sbi, ts, &time, &date, &time_cs);
3150    
3151     de = (struct msdos_dir_entry *)bhs[0]->b_data;
3152     + /* Avoid race with userspace read via bdev */
3153     + lock_buffer(bhs[0]);
3154     /* filling the new directory slots ("." and ".." entries) */
3155     memcpy(de[0].name, MSDOS_DOT, MSDOS_NAME);
3156     memcpy(de[1].name, MSDOS_DOTDOT, MSDOS_NAME);
3157     @@ -1177,6 +1182,7 @@ int fat_alloc_new_dir(struct inode *dir, struct timespec64 *ts)
3158     de[0].size = de[1].size = 0;
3159     memset(de + 2, 0, sb->s_blocksize - 2 * sizeof(*de));
3160     set_buffer_uptodate(bhs[0]);
3161     + unlock_buffer(bhs[0]);
3162     mark_buffer_dirty_inode(bhs[0], dir);
3163    
3164     err = fat_zeroed_cluster(dir, blknr, 1, bhs, MAX_BUF_PER_PAGE);
3165     @@ -1234,11 +1240,14 @@ static int fat_add_new_entries(struct inode *dir, void *slots, int nr_slots,
3166    
3167     /* fill the directory entry */
3168     copy = min(size, sb->s_blocksize);
3169     + /* Avoid race with userspace read via bdev */
3170     + lock_buffer(bhs[n]);
3171     memcpy(bhs[n]->b_data, slots, copy);
3172     - slots += copy;
3173     - size -= copy;
3174     set_buffer_uptodate(bhs[n]);
3175     + unlock_buffer(bhs[n]);
3176     mark_buffer_dirty_inode(bhs[n], dir);
3177     + slots += copy;
3178     + size -= copy;
3179     if (!size)
3180     break;
3181     n++;
3182     diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
3183     index f58c0cacc531..4c6c635bc8aa 100644
3184     --- a/fs/fat/fatent.c
3185     +++ b/fs/fat/fatent.c
3186     @@ -390,8 +390,11 @@ static int fat_mirror_bhs(struct super_block *sb, struct buffer_head **bhs,
3187     err = -ENOMEM;
3188     goto error;
3189     }
3190     + /* Avoid race with userspace read via bdev */
3191     + lock_buffer(c_bh);
3192     memcpy(c_bh->b_data, bhs[n]->b_data, sb->s_blocksize);
3193     set_buffer_uptodate(c_bh);
3194     + unlock_buffer(c_bh);
3195     mark_buffer_dirty_inode(c_bh, sbi->fat_inode);
3196     if (sb->s_flags & SB_SYNCHRONOUS)
3197     err = sync_dirty_buffer(c_bh);
3198     diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c
3199     index 63d701cd1e2e..c8e9b7031d9a 100644
3200     --- a/fs/ocfs2/dlm/dlmunlock.c
3201     +++ b/fs/ocfs2/dlm/dlmunlock.c
3202     @@ -105,7 +105,8 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
3203     enum dlm_status status;
3204     int actions = 0;
3205     int in_use;
3206     - u8 owner;
3207     + u8 owner;
3208     + int recovery_wait = 0;
3209    
3210     mlog(0, "master_node = %d, valblk = %d\n", master_node,
3211     flags & LKM_VALBLK);
3212     @@ -208,9 +209,12 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
3213     }
3214     if (flags & LKM_CANCEL)
3215     lock->cancel_pending = 0;
3216     - else
3217     - lock->unlock_pending = 0;
3218     -
3219     + else {
3220     + if (!lock->unlock_pending)
3221     + recovery_wait = 1;
3222     + else
3223     + lock->unlock_pending = 0;
3224     + }
3225     }
3226    
3227     /* get an extra ref on lock. if we are just switching
3228     @@ -244,6 +248,17 @@ leave:
3229     spin_unlock(&res->spinlock);
3230     wake_up(&res->wq);
3231    
3232     + if (recovery_wait) {
3233     + spin_lock(&res->spinlock);
3234     + /* Unlock request will directly succeed after owner dies,
3235     + * and the lock is already removed from grant list. We have to
3236     + * wait for RECOVERING done or we miss the chance to purge it
3237     + * since the removement is much faster than RECOVERING proc.
3238     + */
3239     + __dlm_wait_on_lockres_flags(res, DLM_LOCK_RES_RECOVERING);
3240     + spin_unlock(&res->spinlock);
3241     + }
3242     +
3243     /* let the caller's final dlm_lock_put handle the actual kfree */
3244     if (actions & DLM_UNLOCK_FREE_LOCK) {
3245     /* this should always be coupled with list removal */
3246     diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
3247     index 316c16463b20..015d74ee31a0 100644
3248     --- a/fs/pstore/ram.c
3249     +++ b/fs/pstore/ram.c
3250     @@ -162,6 +162,7 @@ static int ramoops_read_kmsg_hdr(char *buffer, struct timespec64 *time,
3251     if (sscanf(buffer, RAMOOPS_KERNMSG_HDR "%lld.%lu-%c\n%n",
3252     (time64_t *)&time->tv_sec, &time->tv_nsec, &data_type,
3253     &header_length) == 3) {
3254     + time->tv_nsec *= 1000;
3255     if (data_type == 'C')
3256     *compressed = true;
3257     else
3258     @@ -169,6 +170,7 @@ static int ramoops_read_kmsg_hdr(char *buffer, struct timespec64 *time,
3259     } else if (sscanf(buffer, RAMOOPS_KERNMSG_HDR "%lld.%lu\n%n",
3260     (time64_t *)&time->tv_sec, &time->tv_nsec,
3261     &header_length) == 2) {
3262     + time->tv_nsec *= 1000;
3263     *compressed = false;
3264     } else {
3265     time->tv_sec = 0;
3266     diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h
3267     index e03bd9d41fa8..7b196d234626 100644
3268     --- a/include/scsi/scsi_dbg.h
3269     +++ b/include/scsi/scsi_dbg.h
3270     @@ -6,8 +6,6 @@ struct scsi_cmnd;
3271     struct scsi_device;
3272     struct scsi_sense_hdr;
3273    
3274     -#define SCSI_LOG_BUFSIZE 128
3275     -
3276     extern void scsi_print_command(struct scsi_cmnd *);
3277     extern size_t __scsi_format_command(char *, size_t,
3278     const unsigned char *, size_t);
3279     diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
3280     index 815dcfa64743..0fe169c6afd8 100644
3281     --- a/include/trace/events/rxrpc.h
3282     +++ b/include/trace/events/rxrpc.h
3283     @@ -1073,7 +1073,7 @@ TRACE_EVENT(rxrpc_recvmsg,
3284     ),
3285    
3286     TP_fast_assign(
3287     - __entry->call = call->debug_id;
3288     + __entry->call = call ? call->debug_id : 0;
3289     __entry->why = why;
3290     __entry->seq = seq;
3291     __entry->offset = offset;
3292     diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
3293     index 118e3a8fc764..6e544e364821 100644
3294     --- a/kernel/bpf/syscall.c
3295     +++ b/kernel/bpf/syscall.c
3296     @@ -1454,19 +1454,25 @@ static int bpf_prog_load(union bpf_attr *attr)
3297     if (err)
3298     goto free_used_maps;
3299    
3300     + /* Upon success of bpf_prog_alloc_id(), the BPF prog is
3301     + * effectively publicly exposed. However, retrieving via
3302     + * bpf_prog_get_fd_by_id() will take another reference,
3303     + * therefore it cannot be gone underneath us.
3304     + *
3305     + * Only for the time /after/ successful bpf_prog_new_fd()
3306     + * and before returning to userspace, we might just hold
3307     + * one reference and any parallel close on that fd could
3308     + * rip everything out. Hence, below notifications must
3309     + * happen before bpf_prog_new_fd().
3310     + *
3311     + * Also, any failure handling from this point onwards must
3312     + * be using bpf_prog_put() given the program is exposed.
3313     + */
3314     + bpf_prog_kallsyms_add(prog);
3315     +
3316     err = bpf_prog_new_fd(prog);
3317     - if (err < 0) {
3318     - /* failed to allocate fd.
3319     - * bpf_prog_put() is needed because the above
3320     - * bpf_prog_alloc_id() has published the prog
3321     - * to the userspace and the userspace may
3322     - * have refcnt-ed it through BPF_PROG_GET_FD_BY_ID.
3323     - */
3324     + if (err < 0)
3325     bpf_prog_put(prog);
3326     - return err;
3327     - }
3328     -
3329     - bpf_prog_kallsyms_add(prog);
3330     return err;
3331    
3332     free_used_maps:
3333     diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
3334     index 23a83a4da38a..f50b90d0d1c2 100644
3335     --- a/kernel/kexec_core.c
3336     +++ b/kernel/kexec_core.c
3337     @@ -301,6 +301,8 @@ static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order)
3338     {
3339     struct page *pages;
3340    
3341     + if (fatal_signal_pending(current))
3342     + return NULL;
3343     pages = alloc_pages(gfp_mask & ~__GFP_ZERO, order);
3344     if (pages) {
3345     unsigned int count, i;
3346     diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
3347     index 722c27c40e5b..a1250ad591c1 100644
3348     --- a/kernel/livepatch/core.c
3349     +++ b/kernel/livepatch/core.c
3350     @@ -1027,6 +1027,7 @@ err:
3351     pr_warn("patch '%s' failed for module '%s', refusing to load module '%s'\n",
3352     patch->mod->name, obj->mod->name, obj->mod->name);
3353     mod->klp_alive = false;
3354     + obj->mod = NULL;
3355     klp_cleanup_module_patches_limited(mod, patch);
3356     mutex_unlock(&klp_mutex);
3357    
3358     diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
3359     index 3dea52f7be9c..46a910acce3f 100644
3360     --- a/lib/Kconfig.debug
3361     +++ b/lib/Kconfig.debug
3362     @@ -570,7 +570,7 @@ config DEBUG_KMEMLEAK_EARLY_LOG_SIZE
3363     int "Maximum kmemleak early log entries"
3364     depends on DEBUG_KMEMLEAK
3365     range 200 40000
3366     - default 400
3367     + default 16000
3368     help
3369     Kmemleak must track all the memory allocations to avoid
3370     reporting false positives. Since memory may be allocated or
3371     diff --git a/net/core/sock.c b/net/core/sock.c
3372     index 9c32e8eb64da..f881eea1c4a4 100644
3373     --- a/net/core/sock.c
3374     +++ b/net/core/sock.c
3375     @@ -1563,8 +1563,6 @@ static void __sk_destruct(struct rcu_head *head)
3376     sk_filter_uncharge(sk, filter);
3377     RCU_INIT_POINTER(sk->sk_filter, NULL);
3378     }
3379     - if (rcu_access_pointer(sk->sk_reuseport_cb))
3380     - reuseport_detach_sock(sk);
3381    
3382     sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
3383    
3384     @@ -1587,7 +1585,14 @@ static void __sk_destruct(struct rcu_head *head)
3385    
3386     void sk_destruct(struct sock *sk)
3387     {
3388     - if (sock_flag(sk, SOCK_RCU_FREE))
3389     + bool use_call_rcu = sock_flag(sk, SOCK_RCU_FREE);
3390     +
3391     + if (rcu_access_pointer(sk->sk_reuseport_cb)) {
3392     + reuseport_detach_sock(sk);
3393     + use_call_rcu = true;
3394     + }
3395     +
3396     + if (use_call_rcu)
3397     call_rcu(&sk->sk_rcu, __sk_destruct);
3398     else
3399     __sk_destruct(&sk->sk_rcu);
3400     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
3401     index 3c734832bb7c..0b87558f265e 100644
3402     --- a/net/ipv4/ip_gre.c
3403     +++ b/net/ipv4/ip_gre.c
3404     @@ -1531,6 +1531,7 @@ static void erspan_setup(struct net_device *dev)
3405     struct ip_tunnel *t = netdev_priv(dev);
3406    
3407     ether_setup(dev);
3408     + dev->max_mtu = 0;
3409     dev->netdev_ops = &erspan_netdev_ops;
3410     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
3411     dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
3412     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
3413     index 232581c140a0..7065d68086ab 100644
3414     --- a/net/ipv4/route.c
3415     +++ b/net/ipv4/route.c
3416     @@ -908,16 +908,15 @@ void ip_rt_send_redirect(struct sk_buff *skb)
3417     if (peer->rate_tokens == 0 ||
3418     time_after(jiffies,
3419     (peer->rate_last +
3420     - (ip_rt_redirect_load << peer->rate_tokens)))) {
3421     + (ip_rt_redirect_load << peer->n_redirects)))) {
3422     __be32 gw = rt_nexthop(rt, ip_hdr(skb)->daddr);
3423    
3424     icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw);
3425     peer->rate_last = jiffies;
3426     - ++peer->rate_tokens;
3427     ++peer->n_redirects;
3428     #ifdef CONFIG_IP_ROUTE_VERBOSE
3429     if (log_martians &&
3430     - peer->rate_tokens == ip_rt_redirect_number)
3431     + peer->n_redirects == ip_rt_redirect_number)
3432     net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n",
3433     &ip_hdr(skb)->saddr, inet_iif(skb),
3434     &ip_hdr(skb)->daddr, &gw);
3435     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
3436     index 2085fc0046de..aa59acc8ee0e 100644
3437     --- a/net/ipv4/udp.c
3438     +++ b/net/ipv4/udp.c
3439     @@ -775,6 +775,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
3440     int is_udplite = IS_UDPLITE(sk);
3441     int offset = skb_transport_offset(skb);
3442     int len = skb->len - offset;
3443     + int datalen = len - sizeof(*uh);
3444     __wsum csum = 0;
3445    
3446     /*
3447     @@ -808,10 +809,12 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
3448     return -EIO;
3449     }
3450    
3451     - skb_shinfo(skb)->gso_size = cork->gso_size;
3452     - skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
3453     - skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(len - sizeof(uh),
3454     - cork->gso_size);
3455     + if (datalen > cork->gso_size) {
3456     + skb_shinfo(skb)->gso_size = cork->gso_size;
3457     + skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
3458     + skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(datalen,
3459     + cork->gso_size);
3460     + }
3461     goto csum_partial;
3462     }
3463    
3464     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
3465     index 49e2f6dac646..d2968a79abea 100644
3466     --- a/net/ipv6/addrconf.c
3467     +++ b/net/ipv6/addrconf.c
3468     @@ -5678,13 +5678,20 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
3469     switch (event) {
3470     case RTM_NEWADDR:
3471     /*
3472     - * If the address was optimistic
3473     - * we inserted the route at the start of
3474     - * our DAD process, so we don't need
3475     - * to do it again
3476     + * If the address was optimistic we inserted the route at the
3477     + * start of our DAD process, so we don't need to do it again.
3478     + * If the device was taken down in the middle of the DAD
3479     + * cycle there is a race where we could get here without a
3480     + * host route, so nothing to insert. That will be fixed when
3481     + * the device is brought up.
3482     */
3483     - if (!rcu_access_pointer(ifp->rt->fib6_node))
3484     + if (ifp->rt && !rcu_access_pointer(ifp->rt->fib6_node)) {
3485     ip6_ins_rt(net, ifp->rt);
3486     + } else if (!ifp->rt && (ifp->idev->dev->flags & IFF_UP)) {
3487     + pr_warn("BUG: Address %pI6c on device %s is missing its host route.\n",
3488     + &ifp->addr, ifp->idev->dev->name);
3489     + }
3490     +
3491     if (ifp->idev->cnf.forwarding)
3492     addrconf_join_anycast(ifp);
3493     if (!ipv6_addr_any(&ifp->peer_addr))
3494     diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
3495     index 6b74523fc1c4..2b6d43022383 100644
3496     --- a/net/ipv6/ip6_input.c
3497     +++ b/net/ipv6/ip6_input.c
3498     @@ -220,6 +220,16 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev,
3499     if (ipv6_addr_is_multicast(&hdr->saddr))
3500     goto err;
3501    
3502     + /* While RFC4291 is not explicit about v4mapped addresses
3503     + * in IPv6 headers, it seems clear linux dual-stack
3504     + * model can not deal properly with these.
3505     + * Security models could be fooled by ::ffff:127.0.0.1 for example.
3506     + *
3507     + * https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02
3508     + */
3509     + if (ipv6_addr_v4mapped(&hdr->saddr))
3510     + goto err;
3511     +
3512     skb->transport_header = skb->network_header + sizeof(*hdr);
3513     IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
3514    
3515     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3516     index 3a27c04ff62f..d1c59cb6dceb 100644
3517     --- a/net/ipv6/udp.c
3518     +++ b/net/ipv6/udp.c
3519     @@ -1047,6 +1047,7 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
3520     __wsum csum = 0;
3521     int offset = skb_transport_offset(skb);
3522     int len = skb->len - offset;
3523     + int datalen = len - sizeof(*uh);
3524    
3525     /*
3526     * Create a UDP header
3527     @@ -1079,8 +1080,12 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
3528     return -EIO;
3529     }
3530    
3531     - skb_shinfo(skb)->gso_size = cork->gso_size;
3532     - skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
3533     + if (datalen > cork->gso_size) {
3534     + skb_shinfo(skb)->gso_size = cork->gso_size;
3535     + skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
3536     + skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(datalen,
3537     + cork->gso_size);
3538     + }
3539     goto csum_partial;
3540     }
3541    
3542     diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
3543     index ff254e8c0c44..e0a2cb8a029f 100644
3544     --- a/net/nfc/llcp_sock.c
3545     +++ b/net/nfc/llcp_sock.c
3546     @@ -119,9 +119,14 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
3547     llcp_sock->service_name = kmemdup(llcp_addr.service_name,
3548     llcp_sock->service_name_len,
3549     GFP_KERNEL);
3550     -
3551     + if (!llcp_sock->service_name) {
3552     + ret = -ENOMEM;
3553     + goto put_dev;
3554     + }
3555     llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
3556     if (llcp_sock->ssap == LLCP_SAP_MAX) {
3557     + kfree(llcp_sock->service_name);
3558     + llcp_sock->service_name = NULL;
3559     ret = -EADDRINUSE;
3560     goto put_dev;
3561     }
3562     diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
3563     index 9f2875efb4ac..b3662264aa24 100644
3564     --- a/net/nfc/netlink.c
3565     +++ b/net/nfc/netlink.c
3566     @@ -981,7 +981,8 @@ static int nfc_genl_dep_link_down(struct sk_buff *skb, struct genl_info *info)
3567     int rc;
3568     u32 idx;
3569    
3570     - if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
3571     + if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
3572     + !info->attrs[NFC_ATTR_TARGET_INDEX])
3573     return -EINVAL;
3574    
3575     idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
3576     @@ -1029,7 +1030,8 @@ static int nfc_genl_llc_get_params(struct sk_buff *skb, struct genl_info *info)
3577     struct sk_buff *msg = NULL;
3578     u32 idx;
3579    
3580     - if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
3581     + if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
3582     + !info->attrs[NFC_ATTR_FIRMWARE_NAME])
3583     return -EINVAL;
3584    
3585     idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
3586     diff --git a/net/rds/ib.c b/net/rds/ib.c
3587     index eba75c1ba359..ba3379085c52 100644
3588     --- a/net/rds/ib.c
3589     +++ b/net/rds/ib.c
3590     @@ -143,6 +143,9 @@ static void rds_ib_add_one(struct ib_device *device)
3591     refcount_set(&rds_ibdev->refcount, 1);
3592     INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free);
3593    
3594     + INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
3595     + INIT_LIST_HEAD(&rds_ibdev->conn_list);
3596     +
3597     rds_ibdev->max_wrs = device->attrs.max_qp_wr;
3598     rds_ibdev->max_sge = min(device->attrs.max_send_sge, RDS_IB_MAX_SGE);
3599    
3600     @@ -203,9 +206,6 @@ static void rds_ib_add_one(struct ib_device *device)
3601     device->name,
3602     rds_ibdev->use_fastreg ? "FRMR" : "FMR");
3603    
3604     - INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
3605     - INIT_LIST_HEAD(&rds_ibdev->conn_list);
3606     -
3607     down_write(&rds_ib_devices_lock);
3608     list_add_tail_rcu(&rds_ibdev->list, &rds_ib_devices);
3609     up_write(&rds_ib_devices_lock);
3610     diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
3611     index f42025d53cfe..ebc3c8c7e666 100644
3612     --- a/net/sched/sch_cbq.c
3613     +++ b/net/sched/sch_cbq.c
3614     @@ -1132,6 +1132,32 @@ static const struct nla_policy cbq_policy[TCA_CBQ_MAX + 1] = {
3615     [TCA_CBQ_POLICE] = { .len = sizeof(struct tc_cbq_police) },
3616     };
3617    
3618     +static int cbq_opt_parse(struct nlattr *tb[TCA_CBQ_MAX + 1],
3619     + struct nlattr *opt,
3620     + struct netlink_ext_ack *extack)
3621     +{
3622     + int err;
3623     +
3624     + if (!opt) {
3625     + NL_SET_ERR_MSG(extack, "CBQ options are required for this operation");
3626     + return -EINVAL;
3627     + }
3628     +
3629     + err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, extack);
3630     + if (err < 0)
3631     + return err;
3632     +
3633     + if (tb[TCA_CBQ_WRROPT]) {
3634     + const struct tc_cbq_wrropt *wrr = nla_data(tb[TCA_CBQ_WRROPT]);
3635     +
3636     + if (wrr->priority > TC_CBQ_MAXPRIO) {
3637     + NL_SET_ERR_MSG(extack, "priority is bigger than TC_CBQ_MAXPRIO");
3638     + err = -EINVAL;
3639     + }
3640     + }
3641     + return err;
3642     +}
3643     +
3644     static int cbq_init(struct Qdisc *sch, struct nlattr *opt,
3645     struct netlink_ext_ack *extack)
3646     {
3647     @@ -1144,12 +1170,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt,
3648     hrtimer_init(&q->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED);
3649     q->delay_timer.function = cbq_undelay;
3650    
3651     - if (!opt) {
3652     - NL_SET_ERR_MSG(extack, "CBQ options are required for this operation");
3653     - return -EINVAL;
3654     - }
3655     -
3656     - err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, extack);
3657     + err = cbq_opt_parse(tb, opt, extack);
3658     if (err < 0)
3659     return err;
3660    
3661     @@ -1466,12 +1487,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
3662     struct cbq_class *parent;
3663     struct qdisc_rate_table *rtab = NULL;
3664    
3665     - if (!opt) {
3666     - NL_SET_ERR_MSG(extack, "Mandatory qdisc options missing");
3667     - return -EINVAL;
3668     - }
3669     -
3670     - err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, extack);
3671     + err = cbq_opt_parse(tb, opt, extack);
3672     if (err < 0)
3673     return err;
3674    
3675     diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
3676     index 049714c57075..84c948c91914 100644
3677     --- a/net/sched/sch_dsmark.c
3678     +++ b/net/sched/sch_dsmark.c
3679     @@ -357,6 +357,8 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt,
3680     goto errout;
3681    
3682     err = -EINVAL;
3683     + if (!tb[TCA_DSMARK_INDICES])
3684     + goto errout;
3685     indices = nla_get_u16(tb[TCA_DSMARK_INDICES]);
3686    
3687     if (hweight32(indices) != 1)
3688     diff --git a/net/tipc/link.c b/net/tipc/link.c
3689     index 836727e363c4..6344aca4487b 100644
3690     --- a/net/tipc/link.c
3691     +++ b/net/tipc/link.c
3692     @@ -161,6 +161,7 @@ struct tipc_link {
3693     struct {
3694     u16 len;
3695     u16 limit;
3696     + struct sk_buff *target_bskb;
3697     } backlog[5];
3698     u16 snd_nxt;
3699     u16 last_retransm;
3700     @@ -846,6 +847,7 @@ static void link_prepare_wakeup(struct tipc_link *l)
3701     void tipc_link_reset(struct tipc_link *l)
3702     {
3703     struct sk_buff_head list;
3704     + u32 imp;
3705    
3706     __skb_queue_head_init(&list);
3707    
3708     @@ -864,11 +866,10 @@ void tipc_link_reset(struct tipc_link *l)
3709     __skb_queue_purge(&l->transmq);
3710     __skb_queue_purge(&l->deferdq);
3711     __skb_queue_purge(&l->backlogq);
3712     - l->backlog[TIPC_LOW_IMPORTANCE].len = 0;
3713     - l->backlog[TIPC_MEDIUM_IMPORTANCE].len = 0;
3714     - l->backlog[TIPC_HIGH_IMPORTANCE].len = 0;
3715     - l->backlog[TIPC_CRITICAL_IMPORTANCE].len = 0;
3716     - l->backlog[TIPC_SYSTEM_IMPORTANCE].len = 0;
3717     + for (imp = 0; imp <= TIPC_SYSTEM_IMPORTANCE; imp++) {
3718     + l->backlog[imp].len = 0;
3719     + l->backlog[imp].target_bskb = NULL;
3720     + }
3721     kfree_skb(l->reasm_buf);
3722     kfree_skb(l->failover_reasm_skb);
3723     l->reasm_buf = NULL;
3724     @@ -909,7 +910,7 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
3725     u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1;
3726     struct sk_buff_head *transmq = &l->transmq;
3727     struct sk_buff_head *backlogq = &l->backlogq;
3728     - struct sk_buff *skb, *_skb, *bskb;
3729     + struct sk_buff *skb, *_skb, **tskb;
3730     int pkt_cnt = skb_queue_len(list);
3731     int rc = 0;
3732    
3733     @@ -955,19 +956,21 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
3734     seqno++;
3735     continue;
3736     }
3737     - if (tipc_msg_bundle(skb_peek_tail(backlogq), hdr, mtu)) {
3738     + tskb = &l->backlog[imp].target_bskb;
3739     + if (tipc_msg_bundle(*tskb, hdr, mtu)) {
3740     kfree_skb(__skb_dequeue(list));
3741     l->stats.sent_bundled++;
3742     continue;
3743     }
3744     - if (tipc_msg_make_bundle(&bskb, hdr, mtu, l->addr)) {
3745     + if (tipc_msg_make_bundle(tskb, hdr, mtu, l->addr)) {
3746     kfree_skb(__skb_dequeue(list));
3747     - __skb_queue_tail(backlogq, bskb);
3748     - l->backlog[msg_importance(buf_msg(bskb))].len++;
3749     + __skb_queue_tail(backlogq, *tskb);
3750     + l->backlog[imp].len++;
3751     l->stats.sent_bundled++;
3752     l->stats.sent_bundles++;
3753     continue;
3754     }
3755     + l->backlog[imp].target_bskb = NULL;
3756     l->backlog[imp].len += skb_queue_len(list);
3757     skb_queue_splice_tail_init(list, backlogq);
3758     }
3759     @@ -983,6 +986,7 @@ static void tipc_link_advance_backlog(struct tipc_link *l,
3760     u16 seqno = l->snd_nxt;
3761     u16 ack = l->rcv_nxt - 1;
3762     u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1;
3763     + u32 imp;
3764    
3765     while (skb_queue_len(&l->transmq) < l->window) {
3766     skb = skb_peek(&l->backlogq);
3767     @@ -993,7 +997,10 @@ static void tipc_link_advance_backlog(struct tipc_link *l,
3768     break;
3769     __skb_dequeue(&l->backlogq);
3770     hdr = buf_msg(skb);
3771     - l->backlog[msg_importance(hdr)].len--;
3772     + imp = msg_importance(hdr);
3773     + l->backlog[imp].len--;
3774     + if (unlikely(skb == l->backlog[imp].target_bskb))
3775     + l->backlog[imp].target_bskb = NULL;
3776     __skb_queue_tail(&l->transmq, skb);
3777     __skb_queue_tail(xmitq, _skb);
3778     TIPC_SKB_CB(skb)->ackers = l->ackers;
3779     diff --git a/net/tipc/msg.c b/net/tipc/msg.c
3780     index b61891054709..cbccf1791d3c 100644
3781     --- a/net/tipc/msg.c
3782     +++ b/net/tipc/msg.c
3783     @@ -484,10 +484,7 @@ bool tipc_msg_make_bundle(struct sk_buff **skb, struct tipc_msg *msg,
3784     bmsg = buf_msg(_skb);
3785     tipc_msg_init(msg_prevnode(msg), bmsg, MSG_BUNDLER, 0,
3786     INT_H_SIZE, dnode);
3787     - if (msg_isdata(msg))
3788     - msg_set_importance(bmsg, TIPC_CRITICAL_IMPORTANCE);
3789     - else
3790     - msg_set_importance(bmsg, TIPC_SYSTEM_IMPORTANCE);
3791     + msg_set_importance(bmsg, msg_importance(msg));
3792     msg_set_seqno(bmsg, msg_seqno(msg));
3793     msg_set_ack(bmsg, msg_ack(msg));
3794     msg_set_bcast_ack(bmsg, msg_bcast_ack(msg));
3795     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
3796     index 2e30bf197583..2a4613b239e0 100644
3797     --- a/net/vmw_vsock/af_vsock.c
3798     +++ b/net/vmw_vsock/af_vsock.c
3799     @@ -641,7 +641,7 @@ struct sock *__vsock_create(struct net *net,
3800     }
3801     EXPORT_SYMBOL_GPL(__vsock_create);
3802    
3803     -static void __vsock_release(struct sock *sk)
3804     +static void __vsock_release(struct sock *sk, int level)
3805     {
3806     if (sk) {
3807     struct sk_buff *skb;
3808     @@ -651,9 +651,17 @@ static void __vsock_release(struct sock *sk)
3809     vsk = vsock_sk(sk);
3810     pending = NULL; /* Compiler warning. */
3811    
3812     + /* The release call is supposed to use lock_sock_nested()
3813     + * rather than lock_sock(), if a sock lock should be acquired.
3814     + */
3815     transport->release(vsk);
3816    
3817     - lock_sock(sk);
3818     + /* When "level" is SINGLE_DEPTH_NESTING, use the nested
3819     + * version to avoid the warning "possible recursive locking
3820     + * detected". When "level" is 0, lock_sock_nested(sk, level)
3821     + * is the same as lock_sock(sk).
3822     + */
3823     + lock_sock_nested(sk, level);
3824     sock_orphan(sk);
3825     sk->sk_shutdown = SHUTDOWN_MASK;
3826    
3827     @@ -662,7 +670,7 @@ static void __vsock_release(struct sock *sk)
3828    
3829     /* Clean up any sockets that never were accepted. */
3830     while ((pending = vsock_dequeue_accept(sk)) != NULL) {
3831     - __vsock_release(pending);
3832     + __vsock_release(pending, SINGLE_DEPTH_NESTING);
3833     sock_put(pending);
3834     }
3835    
3836     @@ -711,7 +719,7 @@ EXPORT_SYMBOL_GPL(vsock_stream_has_space);
3837    
3838     static int vsock_release(struct socket *sock)
3839     {
3840     - __vsock_release(sock->sk);
3841     + __vsock_release(sock->sk, 0);
3842     sock->sk = NULL;
3843     sock->state = SS_FREE;
3844    
3845     diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
3846     index 98f193fd5315..70350dc67366 100644
3847     --- a/net/vmw_vsock/hyperv_transport.c
3848     +++ b/net/vmw_vsock/hyperv_transport.c
3849     @@ -538,7 +538,7 @@ static void hvs_release(struct vsock_sock *vsk)
3850     struct sock *sk = sk_vsock(vsk);
3851     bool remove_sock;
3852    
3853     - lock_sock(sk);
3854     + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
3855     remove_sock = hvs_close_lock_held(vsk);
3856     release_sock(sk);
3857     if (remove_sock)
3858     diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
3859     index e30f53728725..3c199f752fd3 100644
3860     --- a/net/vmw_vsock/virtio_transport_common.c
3861     +++ b/net/vmw_vsock/virtio_transport_common.c
3862     @@ -791,7 +791,7 @@ void virtio_transport_release(struct vsock_sock *vsk)
3863     struct sock *sk = &vsk->sk;
3864     bool remove_sock = true;
3865    
3866     - lock_sock(sk);
3867     + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
3868     if (sk->sk_type == SOCK_STREAM)
3869     remove_sock = virtio_transport_close(vsk);
3870    
3871     diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
3872     index 9a4c0ad46518..c071c356a963 100644
3873     --- a/security/smack/smack_access.c
3874     +++ b/security/smack/smack_access.c
3875     @@ -469,7 +469,7 @@ char *smk_parse_smack(const char *string, int len)
3876     if (i == 0 || i >= SMK_LONGLABEL)
3877     return ERR_PTR(-EINVAL);
3878    
3879     - smack = kzalloc(i + 1, GFP_KERNEL);
3880     + smack = kzalloc(i + 1, GFP_NOFS);
3881     if (smack == NULL)
3882     return ERR_PTR(-ENOMEM);
3883    
3884     @@ -504,7 +504,7 @@ int smk_netlbl_mls(int level, char *catset, struct netlbl_lsm_secattr *sap,
3885     if ((m & *cp) == 0)
3886     continue;
3887     rc = netlbl_catmap_setbit(&sap->attr.mls.cat,
3888     - cat, GFP_KERNEL);
3889     + cat, GFP_NOFS);
3890     if (rc < 0) {
3891     netlbl_catmap_free(sap->attr.mls.cat);
3892     return rc;
3893     @@ -540,7 +540,7 @@ struct smack_known *smk_import_entry(const char *string, int len)
3894     if (skp != NULL)
3895     goto freeout;
3896    
3897     - skp = kzalloc(sizeof(*skp), GFP_KERNEL);
3898     + skp = kzalloc(sizeof(*skp), GFP_NOFS);
3899     if (skp == NULL) {
3900     skp = ERR_PTR(-ENOMEM);
3901     goto freeout;
3902     diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
3903     index 017c47eb795e..221de4c755c3 100644
3904     --- a/security/smack/smack_lsm.c
3905     +++ b/security/smack/smack_lsm.c
3906     @@ -270,7 +270,7 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip,
3907     if (!(ip->i_opflags & IOP_XATTR))
3908     return ERR_PTR(-EOPNOTSUPP);
3909    
3910     - buffer = kzalloc(SMK_LONGLABEL, GFP_KERNEL);
3911     + buffer = kzalloc(SMK_LONGLABEL, GFP_NOFS);
3912     if (buffer == NULL)
3913     return ERR_PTR(-ENOMEM);
3914    
3915     @@ -947,7 +947,8 @@ static int smack_bprm_set_creds(struct linux_binprm *bprm)
3916    
3917     if (rc != 0)
3918     return rc;
3919     - } else if (bprm->unsafe)
3920     + }
3921     + if (bprm->unsafe & ~LSM_UNSAFE_PTRACE)
3922     return -EPERM;
3923    
3924     bsp->smk_task = isp->smk_task;
3925     @@ -4005,6 +4006,8 @@ access_check:
3926     skp = smack_ipv6host_label(&sadd);
3927     if (skp == NULL)
3928     skp = smack_net_ambient;
3929     + if (skb == NULL)
3930     + break;
3931     #ifdef CONFIG_AUDIT
3932     smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
3933     ad.a.u.net->family = family;
3934     diff --git a/tools/testing/selftests/net/udpgso.c b/tools/testing/selftests/net/udpgso.c
3935     index e279051bc631..270c17ab071e 100644
3936     --- a/tools/testing/selftests/net/udpgso.c
3937     +++ b/tools/testing/selftests/net/udpgso.c
3938     @@ -90,12 +90,9 @@ struct testcase testcases_v4[] = {
3939     .tfail = true,
3940     },
3941     {
3942     - /* send a single MSS: will fail with GSO, because the segment
3943     - * logic in udp4_ufo_fragment demands a gso skb to be > MTU
3944     - */
3945     + /* send a single MSS: will fall back to no GSO */
3946     .tlen = CONST_MSS_V4,
3947     .gso_len = CONST_MSS_V4,
3948     - .tfail = true,
3949     .r_num_mss = 1,
3950     },
3951     {
3952     @@ -140,10 +137,9 @@ struct testcase testcases_v4[] = {
3953     .tfail = true,
3954     },
3955     {
3956     - /* send a single 1B MSS: will fail, see single MSS above */
3957     + /* send a single 1B MSS: will fall back to no GSO */
3958     .tlen = 1,
3959     .gso_len = 1,
3960     - .tfail = true,
3961     .r_num_mss = 1,
3962     },
3963     {
3964     @@ -197,12 +193,9 @@ struct testcase testcases_v6[] = {
3965     .tfail = true,
3966     },
3967     {
3968     - /* send a single MSS: will fail with GSO, because the segment
3969     - * logic in udp4_ufo_fragment demands a gso skb to be > MTU
3970     - */
3971     + /* send a single MSS: will fall back to no GSO */
3972     .tlen = CONST_MSS_V6,
3973     .gso_len = CONST_MSS_V6,
3974     - .tfail = true,
3975     .r_num_mss = 1,
3976     },
3977     {
3978     @@ -247,10 +240,9 @@ struct testcase testcases_v6[] = {
3979     .tfail = true,
3980     },
3981     {
3982     - /* send a single 1B MSS: will fail, see single MSS above */
3983     + /* send a single 1B MSS: will fall back to no GSO */
3984     .tlen = 1,
3985     .gso_len = 1,
3986     - .tfail = true,
3987     .r_num_mss = 1,
3988     },
3989     {
3990     diff --git a/usr/Makefile b/usr/Makefile
3991     index 748f6a60bb1e..138c18cefb52 100644
3992     --- a/usr/Makefile
3993     +++ b/usr/Makefile
3994     @@ -11,6 +11,9 @@ datafile_y = initramfs_data.cpio$(suffix_y)
3995     datafile_d_y = .$(datafile_y).d
3996     AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/$(datafile_y)"
3997    
3998     +# clean rules do not have CONFIG_INITRAMFS_COMPRESSION. So clean up after all
3999     +# possible compression formats.
4000     +clean-files += initramfs_data.cpio*
4001    
4002     # Generate builtin.o based on initramfs_data.o
4003     obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o