Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0264-4.9.165-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3341 - (show annotations) (download)
Tue Jun 18 09:41:55 2019 UTC (4 years, 10 months ago) by niro
File size: 127195 byte(s)
-linux-4.9.165
1 diff --git a/Makefile b/Makefile
2 index e1bcc76388dc..9b61da532c42 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 164
9 +SUBLEVEL = 165
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arc/include/asm/uaccess.h b/arch/arc/include/asm/uaccess.h
14 index 0684fd2f42e8..f82393f89215 100644
15 --- a/arch/arc/include/asm/uaccess.h
16 +++ b/arch/arc/include/asm/uaccess.h
17 @@ -209,7 +209,7 @@ __arc_copy_from_user(void *to, const void __user *from, unsigned long n)
18 */
19 "=&r" (tmp), "+r" (to), "+r" (from)
20 :
21 - : "lp_count", "lp_start", "lp_end", "memory");
22 + : "lp_count", "memory");
23
24 return n;
25 }
26 @@ -438,7 +438,7 @@ __arc_copy_to_user(void __user *to, const void *from, unsigned long n)
27 */
28 "=&r" (tmp), "+r" (to), "+r" (from)
29 :
30 - : "lp_count", "lp_start", "lp_end", "memory");
31 + : "lp_count", "memory");
32
33 return n;
34 }
35 @@ -658,7 +658,7 @@ static inline unsigned long __arc_clear_user(void __user *to, unsigned long n)
36 " .previous \n"
37 : "+r"(d_char), "+r"(res)
38 : "i"(0)
39 - : "lp_count", "lp_start", "lp_end", "memory");
40 + : "lp_count", "memory");
41
42 return res;
43 }
44 @@ -691,7 +691,7 @@ __arc_strncpy_from_user(char *dst, const char __user *src, long count)
45 " .previous \n"
46 : "+r"(res), "+r"(dst), "+r"(src), "=r"(val)
47 : "g"(-EFAULT), "r"(count)
48 - : "lp_count", "lp_start", "lp_end", "memory");
49 + : "lp_count", "memory");
50
51 return res;
52 }
53 diff --git a/arch/arc/lib/memcpy-archs.S b/arch/arc/lib/memcpy-archs.S
54 index d61044dd8b58..ea14b0bf3116 100644
55 --- a/arch/arc/lib/memcpy-archs.S
56 +++ b/arch/arc/lib/memcpy-archs.S
57 @@ -25,15 +25,11 @@
58 #endif
59
60 #ifdef CONFIG_ARC_HAS_LL64
61 -# define PREFETCH_READ(RX) prefetch [RX, 56]
62 -# define PREFETCH_WRITE(RX) prefetchw [RX, 64]
63 # define LOADX(DST,RX) ldd.ab DST, [RX, 8]
64 # define STOREX(SRC,RX) std.ab SRC, [RX, 8]
65 # define ZOLSHFT 5
66 # define ZOLAND 0x1F
67 #else
68 -# define PREFETCH_READ(RX) prefetch [RX, 28]
69 -# define PREFETCH_WRITE(RX) prefetchw [RX, 32]
70 # define LOADX(DST,RX) ld.ab DST, [RX, 4]
71 # define STOREX(SRC,RX) st.ab SRC, [RX, 4]
72 # define ZOLSHFT 4
73 @@ -41,8 +37,6 @@
74 #endif
75
76 ENTRY_CFI(memcpy)
77 - prefetch [r1] ; Prefetch the read location
78 - prefetchw [r0] ; Prefetch the write location
79 mov.f 0, r2
80 ;;; if size is zero
81 jz.d [blink]
82 @@ -72,8 +66,6 @@ ENTRY_CFI(memcpy)
83 lpnz @.Lcopy32_64bytes
84 ;; LOOP START
85 LOADX (r6, r1)
86 - PREFETCH_READ (r1)
87 - PREFETCH_WRITE (r3)
88 LOADX (r8, r1)
89 LOADX (r10, r1)
90 LOADX (r4, r1)
91 @@ -117,9 +109,7 @@ ENTRY_CFI(memcpy)
92 lpnz @.Lcopy8bytes_1
93 ;; LOOP START
94 ld.ab r6, [r1, 4]
95 - prefetch [r1, 28] ;Prefetch the next read location
96 ld.ab r8, [r1,4]
97 - prefetchw [r3, 32] ;Prefetch the next write location
98
99 SHIFT_1 (r7, r6, 24)
100 or r7, r7, r5
101 @@ -162,9 +152,7 @@ ENTRY_CFI(memcpy)
102 lpnz @.Lcopy8bytes_2
103 ;; LOOP START
104 ld.ab r6, [r1, 4]
105 - prefetch [r1, 28] ;Prefetch the next read location
106 ld.ab r8, [r1,4]
107 - prefetchw [r3, 32] ;Prefetch the next write location
108
109 SHIFT_1 (r7, r6, 16)
110 or r7, r7, r5
111 @@ -204,9 +192,7 @@ ENTRY_CFI(memcpy)
112 lpnz @.Lcopy8bytes_3
113 ;; LOOP START
114 ld.ab r6, [r1, 4]
115 - prefetch [r1, 28] ;Prefetch the next read location
116 ld.ab r8, [r1,4]
117 - prefetchw [r3, 32] ;Prefetch the next write location
118
119 SHIFT_1 (r7, r6, 8)
120 or r7, r7, r5
121 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
122 index b5d529fdffab..74a70f91b01a 100644
123 --- a/arch/arm/Kconfig
124 +++ b/arch/arm/Kconfig
125 @@ -1457,6 +1457,7 @@ config NR_CPUS
126 config HOTPLUG_CPU
127 bool "Support for hot-pluggable CPUs"
128 depends on SMP
129 + select GENERIC_IRQ_MIGRATION
130 help
131 Say Y here to experiment with turning CPUs off and on. CPUs
132 can be controlled through /sys/devices/system/cpu.
133 diff --git a/arch/arm/include/asm/irq.h b/arch/arm/include/asm/irq.h
134 index e53638c8ed8a..61e1d089ce1a 100644
135 --- a/arch/arm/include/asm/irq.h
136 +++ b/arch/arm/include/asm/irq.h
137 @@ -24,7 +24,6 @@
138 #ifndef __ASSEMBLY__
139 struct irqaction;
140 struct pt_regs;
141 -extern void migrate_irqs(void);
142
143 extern void asm_do_IRQ(unsigned int, struct pt_regs *);
144 void handle_IRQ(unsigned int, struct pt_regs *);
145 diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
146 index ece04a457486..5b07c7a31c31 100644
147 --- a/arch/arm/kernel/irq.c
148 +++ b/arch/arm/kernel/irq.c
149 @@ -31,7 +31,6 @@
150 #include <linux/smp.h>
151 #include <linux/init.h>
152 #include <linux/seq_file.h>
153 -#include <linux/ratelimit.h>
154 #include <linux/errno.h>
155 #include <linux/list.h>
156 #include <linux/kallsyms.h>
157 @@ -119,64 +118,3 @@ int __init arch_probe_nr_irqs(void)
158 return nr_irqs;
159 }
160 #endif
161 -
162 -#ifdef CONFIG_HOTPLUG_CPU
163 -static bool migrate_one_irq(struct irq_desc *desc)
164 -{
165 - struct irq_data *d = irq_desc_get_irq_data(desc);
166 - const struct cpumask *affinity = irq_data_get_affinity_mask(d);
167 - struct irq_chip *c;
168 - bool ret = false;
169 -
170 - /*
171 - * If this is a per-CPU interrupt, or the affinity does not
172 - * include this CPU, then we have nothing to do.
173 - */
174 - if (irqd_is_per_cpu(d) || !cpumask_test_cpu(smp_processor_id(), affinity))
175 - return false;
176 -
177 - if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
178 - affinity = cpu_online_mask;
179 - ret = true;
180 - }
181 -
182 - c = irq_data_get_irq_chip(d);
183 - if (!c->irq_set_affinity)
184 - pr_debug("IRQ%u: unable to set affinity\n", d->irq);
185 - else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK && ret)
186 - cpumask_copy(irq_data_get_affinity_mask(d), affinity);
187 -
188 - return ret;
189 -}
190 -
191 -/*
192 - * The current CPU has been marked offline. Migrate IRQs off this CPU.
193 - * If the affinity settings do not allow other CPUs, force them onto any
194 - * available CPU.
195 - *
196 - * Note: we must iterate over all IRQs, whether they have an attached
197 - * action structure or not, as we need to get chained interrupts too.
198 - */
199 -void migrate_irqs(void)
200 -{
201 - unsigned int i;
202 - struct irq_desc *desc;
203 - unsigned long flags;
204 -
205 - local_irq_save(flags);
206 -
207 - for_each_irq_desc(i, desc) {
208 - bool affinity_broken;
209 -
210 - raw_spin_lock(&desc->lock);
211 - affinity_broken = migrate_one_irq(desc);
212 - raw_spin_unlock(&desc->lock);
213 -
214 - if (affinity_broken)
215 - pr_warn_ratelimited("IRQ%u no longer affine to CPU%u\n",
216 - i, smp_processor_id());
217 - }
218 -
219 - local_irq_restore(flags);
220 -}
221 -#endif /* CONFIG_HOTPLUG_CPU */
222 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
223 index 8faf869e9fb2..bc83ec7ed53f 100644
224 --- a/arch/arm/kernel/smp.c
225 +++ b/arch/arm/kernel/smp.c
226 @@ -253,7 +253,7 @@ int __cpu_disable(void)
227 /*
228 * OK - migrate IRQs away from this CPU
229 */
230 - migrate_irqs();
231 + irq_migrate_all_off_this_cpu();
232
233 /*
234 * Flush user cache and TLB mappings, and then remove this CPU
235 diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
236 index 70b3eaf085e4..5ca7e29ad851 100644
237 --- a/arch/arm/mach-omap2/display.c
238 +++ b/arch/arm/mach-omap2/display.c
239 @@ -115,6 +115,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
240 u32 enable_mask, enable_shift;
241 u32 pipd_mask, pipd_shift;
242 u32 reg;
243 + int ret;
244
245 if (dsi_id == 0) {
246 enable_mask = OMAP4_DSI1_LANEENABLE_MASK;
247 @@ -130,7 +131,11 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
248 return -ENODEV;
249 }
250
251 - regmap_read(omap4_dsi_mux_syscon, OMAP4_DSIPHY_SYSCON_OFFSET, &reg);
252 + ret = regmap_read(omap4_dsi_mux_syscon,
253 + OMAP4_DSIPHY_SYSCON_OFFSET,
254 + &reg);
255 + if (ret)
256 + return ret;
257
258 reg &= ~enable_mask;
259 reg &= ~pipd_mask;
260 diff --git a/arch/arm/mach-s3c24xx/mach-osiris-dvs.c b/arch/arm/mach-s3c24xx/mach-osiris-dvs.c
261 index 262ab0744748..f4fdfca9439b 100644
262 --- a/arch/arm/mach-s3c24xx/mach-osiris-dvs.c
263 +++ b/arch/arm/mach-s3c24xx/mach-osiris-dvs.c
264 @@ -70,16 +70,16 @@ static int osiris_dvs_notify(struct notifier_block *nb,
265
266 switch (val) {
267 case CPUFREQ_PRECHANGE:
268 - if (old_dvs & !new_dvs ||
269 - cur_dvs & !new_dvs) {
270 + if ((old_dvs && !new_dvs) ||
271 + (cur_dvs && !new_dvs)) {
272 pr_debug("%s: exiting dvs\n", __func__);
273 cur_dvs = false;
274 gpio_set_value(OSIRIS_GPIO_DVS, 1);
275 }
276 break;
277 case CPUFREQ_POSTCHANGE:
278 - if (!old_dvs & new_dvs ||
279 - !cur_dvs & new_dvs) {
280 + if ((!old_dvs && new_dvs) ||
281 + (!cur_dvs && new_dvs)) {
282 pr_debug("entering dvs\n");
283 cur_dvs = true;
284 gpio_set_value(OSIRIS_GPIO_DVS, 0);
285 diff --git a/arch/arm64/crypto/aes-ce-ccm-core.S b/arch/arm64/crypto/aes-ce-ccm-core.S
286 index 3363560c79b7..7bc459d9235c 100644
287 --- a/arch/arm64/crypto/aes-ce-ccm-core.S
288 +++ b/arch/arm64/crypto/aes-ce-ccm-core.S
289 @@ -74,12 +74,13 @@ ENTRY(ce_aes_ccm_auth_data)
290 beq 10f
291 ext v0.16b, v0.16b, v0.16b, #1 /* rotate out the mac bytes */
292 b 7b
293 -8: mov w7, w8
294 +8: cbz w8, 91f
295 + mov w7, w8
296 add w8, w8, #16
297 9: ext v1.16b, v1.16b, v1.16b, #1
298 adds w7, w7, #1
299 bne 9b
300 - eor v0.16b, v0.16b, v1.16b
301 +91: eor v0.16b, v0.16b, v1.16b
302 st1 {v0.16b}, [x0]
303 10: str w8, [x3]
304 ret
305 diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
306 index 3289d1458791..db6ff1944c41 100644
307 --- a/arch/arm64/kernel/head.S
308 +++ b/arch/arm64/kernel/head.S
309 @@ -534,8 +534,7 @@ set_hcr:
310 /* GICv3 system register access */
311 mrs x0, id_aa64pfr0_el1
312 ubfx x0, x0, #24, #4
313 - cmp x0, #1
314 - b.ne 3f
315 + cbz x0, 3f
316
317 mrs_s x0, ICC_SRE_EL2
318 orr x0, x0, #ICC_SRE_EL2_SRE // Set ICC_SRE_EL2.SRE==1
319 diff --git a/arch/m68k/Makefile b/arch/m68k/Makefile
320 index f0dd9fc84002..a229d28e14cc 100644
321 --- a/arch/m68k/Makefile
322 +++ b/arch/m68k/Makefile
323 @@ -58,7 +58,10 @@ cpuflags-$(CONFIG_M5206e) := $(call cc-option,-mcpu=5206e,-m5200)
324 cpuflags-$(CONFIG_M5206) := $(call cc-option,-mcpu=5206,-m5200)
325
326 KBUILD_AFLAGS += $(cpuflags-y)
327 -KBUILD_CFLAGS += $(cpuflags-y) -pipe
328 +KBUILD_CFLAGS += $(cpuflags-y)
329 +
330 +KBUILD_CFLAGS += -pipe -ffreestanding
331 +
332 ifdef CONFIG_MMU
333 # without -fno-strength-reduce the 53c7xx.c driver fails ;-(
334 KBUILD_CFLAGS += -fno-strength-reduce -ffixed-a2
335 diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
336 index 3841d749a430..370645687cc7 100644
337 --- a/arch/powerpc/kernel/entry_32.S
338 +++ b/arch/powerpc/kernel/entry_32.S
339 @@ -698,6 +698,9 @@ fast_exception_return:
340 mtcr r10
341 lwz r10,_LINK(r11)
342 mtlr r10
343 + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
344 + li r10, 0
345 + stw r10, 8(r11)
346 REST_GPR(10, r11)
347 mtspr SPRN_SRR1,r9
348 mtspr SPRN_SRR0,r12
349 @@ -932,6 +935,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX)
350 mtcrf 0xFF,r10
351 mtlr r11
352
353 + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
354 + li r10, 0
355 + stw r10, 8(r1)
356 /*
357 * Once we put values in SRR0 and SRR1, we are in a state
358 * where exceptions are not recoverable, since taking an
359 @@ -969,6 +975,9 @@ exc_exit_restart_end:
360 mtlr r11
361 lwz r10,_CCR(r1)
362 mtcrf 0xff,r10
363 + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
364 + li r10, 0
365 + stw r10, 8(r1)
366 REST_2GPRS(9, r1)
367 .globl exc_exit_restart
368 exc_exit_restart:
369 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
370 index 1c141d50fbc6..609f0e87ced7 100644
371 --- a/arch/powerpc/kernel/process.c
372 +++ b/arch/powerpc/kernel/process.c
373 @@ -153,7 +153,7 @@ void __giveup_fpu(struct task_struct *tsk)
374
375 save_fpu(tsk);
376 msr = tsk->thread.regs->msr;
377 - msr &= ~MSR_FP;
378 + msr &= ~(MSR_FP|MSR_FE0|MSR_FE1);
379 #ifdef CONFIG_VSX
380 if (cpu_has_feature(CPU_FTR_VSX))
381 msr &= ~MSR_VSX;
382 diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
383 index adfa63e7df8c..4f2829634d79 100644
384 --- a/arch/powerpc/kernel/ptrace.c
385 +++ b/arch/powerpc/kernel/ptrace.c
386 @@ -547,6 +547,7 @@ static int vr_get(struct task_struct *target, const struct user_regset *regset,
387 /*
388 * Copy out only the low-order word of vrsave.
389 */
390 + int start, end;
391 union {
392 elf_vrreg_t reg;
393 u32 word;
394 @@ -555,8 +556,10 @@ static int vr_get(struct task_struct *target, const struct user_regset *regset,
395
396 vrsave.word = target->thread.vrsave;
397
398 + start = 33 * sizeof(vector128);
399 + end = start + sizeof(vrsave);
400 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &vrsave,
401 - 33 * sizeof(vector128), -1);
402 + start, end);
403 }
404
405 return ret;
406 @@ -594,6 +597,7 @@ static int vr_set(struct task_struct *target, const struct user_regset *regset,
407 /*
408 * We use only the first word of vrsave.
409 */
410 + int start, end;
411 union {
412 elf_vrreg_t reg;
413 u32 word;
414 @@ -602,8 +606,10 @@ static int vr_set(struct task_struct *target, const struct user_regset *regset,
415
416 vrsave.word = target->thread.vrsave;
417
418 + start = 33 * sizeof(vector128);
419 + end = start + sizeof(vrsave);
420 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &vrsave,
421 - 33 * sizeof(vector128), -1);
422 + start, end);
423 if (!ret)
424 target->thread.vrsave = vrsave.word;
425 }
426 diff --git a/arch/powerpc/platforms/83xx/suspend-asm.S b/arch/powerpc/platforms/83xx/suspend-asm.S
427 index 3d1ecd211776..8137f77abad5 100644
428 --- a/arch/powerpc/platforms/83xx/suspend-asm.S
429 +++ b/arch/powerpc/platforms/83xx/suspend-asm.S
430 @@ -26,13 +26,13 @@
431 #define SS_MSR 0x74
432 #define SS_SDR1 0x78
433 #define SS_LR 0x7c
434 -#define SS_SPRG 0x80 /* 4 SPRGs */
435 -#define SS_DBAT 0x90 /* 8 DBATs */
436 -#define SS_IBAT 0xd0 /* 8 IBATs */
437 -#define SS_TB 0x110
438 -#define SS_CR 0x118
439 -#define SS_GPREG 0x11c /* r12-r31 */
440 -#define STATE_SAVE_SIZE 0x16c
441 +#define SS_SPRG 0x80 /* 8 SPRGs */
442 +#define SS_DBAT 0xa0 /* 8 DBATs */
443 +#define SS_IBAT 0xe0 /* 8 IBATs */
444 +#define SS_TB 0x120
445 +#define SS_CR 0x128
446 +#define SS_GPREG 0x12c /* r12-r31 */
447 +#define STATE_SAVE_SIZE 0x17c
448
449 .section .data
450 .align 5
451 @@ -103,6 +103,16 @@ _GLOBAL(mpc83xx_enter_deep_sleep)
452 stw r7, SS_SPRG+12(r3)
453 stw r8, SS_SDR1(r3)
454
455 + mfspr r4, SPRN_SPRG4
456 + mfspr r5, SPRN_SPRG5
457 + mfspr r6, SPRN_SPRG6
458 + mfspr r7, SPRN_SPRG7
459 +
460 + stw r4, SS_SPRG+16(r3)
461 + stw r5, SS_SPRG+20(r3)
462 + stw r6, SS_SPRG+24(r3)
463 + stw r7, SS_SPRG+28(r3)
464 +
465 mfspr r4, SPRN_DBAT0U
466 mfspr r5, SPRN_DBAT0L
467 mfspr r6, SPRN_DBAT1U
468 @@ -493,6 +503,16 @@ mpc83xx_deep_resume:
469 mtspr SPRN_IBAT7U, r6
470 mtspr SPRN_IBAT7L, r7
471
472 + lwz r4, SS_SPRG+16(r3)
473 + lwz r5, SS_SPRG+20(r3)
474 + lwz r6, SS_SPRG+24(r3)
475 + lwz r7, SS_SPRG+28(r3)
476 +
477 + mtspr SPRN_SPRG4, r4
478 + mtspr SPRN_SPRG5, r5
479 + mtspr SPRN_SPRG6, r6
480 + mtspr SPRN_SPRG7, r7
481 +
482 lwz r4, SS_SPRG+0(r3)
483 lwz r5, SS_SPRG+4(r3)
484 lwz r6, SS_SPRG+8(r3)
485 diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c
486 index 3fd683e40bc9..2914529c0695 100644
487 --- a/arch/powerpc/platforms/embedded6xx/wii.c
488 +++ b/arch/powerpc/platforms/embedded6xx/wii.c
489 @@ -104,6 +104,10 @@ unsigned long __init wii_mmu_mapin_mem2(unsigned long top)
490 /* MEM2 64MB@0x10000000 */
491 delta = wii_hole_start + wii_hole_size;
492 size = top - delta;
493 +
494 + if (__map_without_bats)
495 + return delta;
496 +
497 for (bl = 128<<10; bl < max_size; bl <<= 1) {
498 if (bl * 2 > size)
499 break;
500 diff --git a/arch/powerpc/platforms/powernv/opal-msglog.c b/arch/powerpc/platforms/powernv/opal-msglog.c
501 index 39d6ff9e5630..d10bad14097b 100644
502 --- a/arch/powerpc/platforms/powernv/opal-msglog.c
503 +++ b/arch/powerpc/platforms/powernv/opal-msglog.c
504 @@ -98,7 +98,7 @@ static ssize_t opal_msglog_read(struct file *file, struct kobject *kobj,
505 }
506
507 static struct bin_attribute opal_msglog_attr = {
508 - .attr = {.name = "msglog", .mode = 0444},
509 + .attr = {.name = "msglog", .mode = 0400},
510 .read = opal_msglog_read
511 };
512
513 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
514 index 1870fa7387b7..a34fb7284024 100644
515 --- a/arch/x86/kvm/vmx.c
516 +++ b/arch/x86/kvm/vmx.c
517 @@ -5965,6 +5965,7 @@ static int handle_external_interrupt(struct kvm_vcpu *vcpu)
518 static int handle_triple_fault(struct kvm_vcpu *vcpu)
519 {
520 vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN;
521 + vcpu->mmio_needed = 0;
522 return 0;
523 }
524
525 @@ -7046,6 +7047,10 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu,
526 /* Addr = segment_base + offset */
527 /* offset = base + [index * scale] + displacement */
528 off = exit_qualification; /* holds the displacement */
529 + if (addr_size == 1)
530 + off = (gva_t)sign_extend64(off, 31);
531 + else if (addr_size == 0)
532 + off = (gva_t)sign_extend64(off, 15);
533 if (base_is_valid)
534 off += kvm_register_read(vcpu, base_reg);
535 if (index_is_valid)
536 @@ -7088,10 +7093,16 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu,
537 /* Protected mode: #GP(0)/#SS(0) if the segment is unusable.
538 */
539 exn = (s.unusable != 0);
540 - /* Protected mode: #GP(0)/#SS(0) if the memory
541 - * operand is outside the segment limit.
542 +
543 + /*
544 + * Protected mode: #GP(0)/#SS(0) if the memory operand is
545 + * outside the segment limit. All CPUs that support VMX ignore
546 + * limit checks for flat segments, i.e. segments with base==0,
547 + * limit==0xffffffff and of type expand-up data or code.
548 */
549 - exn = exn || (off + sizeof(u64) > s.limit);
550 + if (!(s.base == 0 && s.limit == 0xffffffff &&
551 + ((s.type & 8) || !(s.type & 4))))
552 + exn = exn || (off + sizeof(u64) > s.limit);
553 }
554 if (exn) {
555 kvm_queue_exception_e(vcpu,
556 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
557 index 5a35fee46620..a29df9ccbfde 100644
558 --- a/arch/x86/kvm/x86.c
559 +++ b/arch/x86/kvm/x86.c
560 @@ -6769,6 +6769,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
561 }
562 if (kvm_check_request(KVM_REQ_TRIPLE_FAULT, vcpu)) {
563 vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN;
564 + vcpu->mmio_needed = 0;
565 r = 0;
566 goto out;
567 }
568 diff --git a/crypto/ahash.c b/crypto/ahash.c
569 index 90d73a22f129..9a4e87755a0b 100644
570 --- a/crypto/ahash.c
571 +++ b/crypto/ahash.c
572 @@ -85,17 +85,17 @@ static int hash_walk_new_entry(struct crypto_hash_walk *walk)
573 int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err)
574 {
575 unsigned int alignmask = walk->alignmask;
576 - unsigned int nbytes = walk->entrylen;
577
578 walk->data -= walk->offset;
579
580 - if (nbytes && walk->offset & alignmask && !err) {
581 - walk->offset = ALIGN(walk->offset, alignmask + 1);
582 - nbytes = min(nbytes,
583 - ((unsigned int)(PAGE_SIZE)) - walk->offset);
584 - walk->entrylen -= nbytes;
585 + if (walk->entrylen && (walk->offset & alignmask) && !err) {
586 + unsigned int nbytes;
587
588 + walk->offset = ALIGN(walk->offset, alignmask + 1);
589 + nbytes = min(walk->entrylen,
590 + (unsigned int)(PAGE_SIZE - walk->offset));
591 if (nbytes) {
592 + walk->entrylen -= nbytes;
593 walk->data += walk->offset;
594 return nbytes;
595 }
596 @@ -115,7 +115,7 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err)
597 if (err)
598 return err;
599
600 - if (nbytes) {
601 + if (walk->entrylen) {
602 walk->offset = 0;
603 walk->pg++;
604 return hash_walk_next(walk);
605 @@ -189,6 +189,21 @@ static int ahash_setkey_unaligned(struct crypto_ahash *tfm, const u8 *key,
606 return ret;
607 }
608
609 +static int ahash_nosetkey(struct crypto_ahash *tfm, const u8 *key,
610 + unsigned int keylen)
611 +{
612 + return -ENOSYS;
613 +}
614 +
615 +static void ahash_set_needkey(struct crypto_ahash *tfm)
616 +{
617 + const struct hash_alg_common *alg = crypto_hash_alg_common(tfm);
618 +
619 + if (tfm->setkey != ahash_nosetkey &&
620 + !(alg->base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY))
621 + crypto_ahash_set_flags(tfm, CRYPTO_TFM_NEED_KEY);
622 +}
623 +
624 int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key,
625 unsigned int keylen)
626 {
627 @@ -200,20 +215,16 @@ int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key,
628 else
629 err = tfm->setkey(tfm, key, keylen);
630
631 - if (err)
632 + if (unlikely(err)) {
633 + ahash_set_needkey(tfm);
634 return err;
635 + }
636
637 crypto_ahash_clear_flags(tfm, CRYPTO_TFM_NEED_KEY);
638 return 0;
639 }
640 EXPORT_SYMBOL_GPL(crypto_ahash_setkey);
641
642 -static int ahash_nosetkey(struct crypto_ahash *tfm, const u8 *key,
643 - unsigned int keylen)
644 -{
645 - return -ENOSYS;
646 -}
647 -
648 static inline unsigned int ahash_align_buffer_size(unsigned len,
649 unsigned long mask)
650 {
651 @@ -482,8 +493,7 @@ static int crypto_ahash_init_tfm(struct crypto_tfm *tfm)
652
653 if (alg->setkey) {
654 hash->setkey = alg->setkey;
655 - if (!(alg->halg.base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY))
656 - crypto_ahash_set_flags(hash, CRYPTO_TFM_NEED_KEY);
657 + ahash_set_needkey(hash);
658 }
659 if (alg->export)
660 hash->export = alg->export;
661 diff --git a/crypto/pcbc.c b/crypto/pcbc.c
662 index f654965f0933..de81f716cf26 100644
663 --- a/crypto/pcbc.c
664 +++ b/crypto/pcbc.c
665 @@ -52,7 +52,7 @@ static int crypto_pcbc_encrypt_segment(struct blkcipher_desc *desc,
666 unsigned int nbytes = walk->nbytes;
667 u8 *src = walk->src.virt.addr;
668 u8 *dst = walk->dst.virt.addr;
669 - u8 *iv = walk->iv;
670 + u8 * const iv = walk->iv;
671
672 do {
673 crypto_xor(iv, src, bsize);
674 @@ -76,7 +76,7 @@ static int crypto_pcbc_encrypt_inplace(struct blkcipher_desc *desc,
675 int bsize = crypto_cipher_blocksize(tfm);
676 unsigned int nbytes = walk->nbytes;
677 u8 *src = walk->src.virt.addr;
678 - u8 *iv = walk->iv;
679 + u8 * const iv = walk->iv;
680 u8 tmpbuf[bsize];
681
682 do {
683 @@ -89,8 +89,6 @@ static int crypto_pcbc_encrypt_inplace(struct blkcipher_desc *desc,
684 src += bsize;
685 } while ((nbytes -= bsize) >= bsize);
686
687 - memcpy(walk->iv, iv, bsize);
688 -
689 return nbytes;
690 }
691
692 @@ -130,7 +128,7 @@ static int crypto_pcbc_decrypt_segment(struct blkcipher_desc *desc,
693 unsigned int nbytes = walk->nbytes;
694 u8 *src = walk->src.virt.addr;
695 u8 *dst = walk->dst.virt.addr;
696 - u8 *iv = walk->iv;
697 + u8 * const iv = walk->iv;
698
699 do {
700 fn(crypto_cipher_tfm(tfm), dst, src);
701 @@ -142,8 +140,6 @@ static int crypto_pcbc_decrypt_segment(struct blkcipher_desc *desc,
702 dst += bsize;
703 } while ((nbytes -= bsize) >= bsize);
704
705 - memcpy(walk->iv, iv, bsize);
706 -
707 return nbytes;
708 }
709
710 @@ -156,7 +152,7 @@ static int crypto_pcbc_decrypt_inplace(struct blkcipher_desc *desc,
711 int bsize = crypto_cipher_blocksize(tfm);
712 unsigned int nbytes = walk->nbytes;
713 u8 *src = walk->src.virt.addr;
714 - u8 *iv = walk->iv;
715 + u8 * const iv = walk->iv;
716 u8 tmpbuf[bsize];
717
718 do {
719 @@ -169,8 +165,6 @@ static int crypto_pcbc_decrypt_inplace(struct blkcipher_desc *desc,
720 src += bsize;
721 } while ((nbytes -= bsize) >= bsize);
722
723 - memcpy(walk->iv, iv, bsize);
724 -
725 return nbytes;
726 }
727
728 diff --git a/crypto/shash.c b/crypto/shash.c
729 index 4f047c7eeca7..a1c7609578ea 100644
730 --- a/crypto/shash.c
731 +++ b/crypto/shash.c
732 @@ -52,6 +52,13 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
733 return err;
734 }
735
736 +static void shash_set_needkey(struct crypto_shash *tfm, struct shash_alg *alg)
737 +{
738 + if (crypto_shash_alg_has_setkey(alg) &&
739 + !(alg->base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY))
740 + crypto_shash_set_flags(tfm, CRYPTO_TFM_NEED_KEY);
741 +}
742 +
743 int crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key,
744 unsigned int keylen)
745 {
746 @@ -64,8 +71,10 @@ int crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key,
747 else
748 err = shash->setkey(tfm, key, keylen);
749
750 - if (err)
751 + if (unlikely(err)) {
752 + shash_set_needkey(tfm, shash);
753 return err;
754 + }
755
756 crypto_shash_clear_flags(tfm, CRYPTO_TFM_NEED_KEY);
757 return 0;
758 @@ -367,7 +376,8 @@ int crypto_init_shash_ops_async(struct crypto_tfm *tfm)
759 crt->final = shash_async_final;
760 crt->finup = shash_async_finup;
761 crt->digest = shash_async_digest;
762 - crt->setkey = shash_async_setkey;
763 + if (crypto_shash_alg_has_setkey(alg))
764 + crt->setkey = shash_async_setkey;
765
766 crypto_ahash_set_flags(crt, crypto_shash_get_flags(shash) &
767 CRYPTO_TFM_NEED_KEY);
768 @@ -389,9 +399,7 @@ static int crypto_shash_init_tfm(struct crypto_tfm *tfm)
769
770 hash->descsize = alg->descsize;
771
772 - if (crypto_shash_alg_has_setkey(alg) &&
773 - !(alg->base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY))
774 - crypto_shash_set_flags(hash, CRYPTO_TFM_NEED_KEY);
775 + shash_set_needkey(hash, alg);
776
777 return 0;
778 }
779 diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c
780 index 201c7ceb7052..98b513d049f6 100644
781 --- a/drivers/acpi/device_sysfs.c
782 +++ b/drivers/acpi/device_sysfs.c
783 @@ -202,11 +202,15 @@ static int create_of_modalias(struct acpi_device *acpi_dev, char *modalias,
784 {
785 struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
786 const union acpi_object *of_compatible, *obj;
787 + acpi_status status;
788 int len, count;
789 int i, nval;
790 char *c;
791
792 - acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf);
793 + status = acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf);
794 + if (ACPI_FAILURE(status))
795 + return -ENODEV;
796 +
797 /* DT strings are all in lower case */
798 for (c = buf.pointer; *c != '\0'; c++)
799 *c = tolower(*c);
800 diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
801 index 06cf7427d0c4..31a07609f7a2 100644
802 --- a/drivers/acpi/nfit/core.c
803 +++ b/drivers/acpi/nfit/core.c
804 @@ -307,6 +307,13 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm,
805 return -EINVAL;
806 }
807
808 + if (out_obj->type != ACPI_TYPE_BUFFER) {
809 + dev_dbg(dev, "%s unexpected output object type cmd: %s type: %d\n",
810 + dimm_name, cmd_name, out_obj->type);
811 + rc = -EINVAL;
812 + goto out;
813 + }
814 +
815 if (call_pkg) {
816 call_pkg->nd_fw_size = out_obj->buffer.length;
817 memcpy(call_pkg->nd_payload + call_pkg->nd_size_in,
818 @@ -325,13 +332,6 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm,
819 return 0;
820 }
821
822 - if (out_obj->package.type != ACPI_TYPE_BUFFER) {
823 - dev_dbg(dev, "%s:%s unexpected output object type cmd: %s type: %d\n",
824 - __func__, dimm_name, cmd_name, out_obj->type);
825 - rc = -EINVAL;
826 - goto out;
827 - }
828 -
829 if (IS_ENABLED(CONFIG_ACPI_NFIT_DEBUG)) {
830 dev_dbg(dev, "%s:%s cmd: %s output length: %d\n", __func__,
831 dimm_name, cmd_name, out_obj->buffer.length);
832 diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
833 index f98121f11f7c..9f51a167bf4e 100644
834 --- a/drivers/base/power/wakeup.c
835 +++ b/drivers/base/power/wakeup.c
836 @@ -113,7 +113,6 @@ void wakeup_source_drop(struct wakeup_source *ws)
837 if (!ws)
838 return;
839
840 - del_timer_sync(&ws->timer);
841 __pm_relax(ws);
842 }
843 EXPORT_SYMBOL_GPL(wakeup_source_drop);
844 @@ -201,6 +200,13 @@ void wakeup_source_remove(struct wakeup_source *ws)
845 list_del_rcu(&ws->entry);
846 spin_unlock_irqrestore(&events_lock, flags);
847 synchronize_srcu(&wakeup_srcu);
848 +
849 + del_timer_sync(&ws->timer);
850 + /*
851 + * Clear timer.function to make wakeup_source_not_registered() treat
852 + * this wakeup source as not registered.
853 + */
854 + ws->timer.function = NULL;
855 }
856 EXPORT_SYMBOL_GPL(wakeup_source_remove);
857
858 diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
859 index 326b9ba4518e..6914c6e1e1a8 100644
860 --- a/drivers/block/floppy.c
861 +++ b/drivers/block/floppy.c
862 @@ -3752,7 +3752,7 @@ static unsigned int floppy_check_events(struct gendisk *disk,
863
864 if (time_after(jiffies, UDRS->last_checked + UDP->checkfreq)) {
865 if (lock_fdc(drive))
866 - return -EINTR;
867 + return 0;
868 poll_drive(false, 0);
869 process_fd_request();
870 }
871 diff --git a/drivers/clk/clk-twl6040.c b/drivers/clk/clk-twl6040.c
872 index 7b222a5db931..82d615fe2947 100644
873 --- a/drivers/clk/clk-twl6040.c
874 +++ b/drivers/clk/clk-twl6040.c
875 @@ -41,6 +41,43 @@ static int twl6040_pdmclk_is_prepared(struct clk_hw *hw)
876 return pdmclk->enabled;
877 }
878
879 +static int twl6040_pdmclk_reset_one_clock(struct twl6040_pdmclk *pdmclk,
880 + unsigned int reg)
881 +{
882 + const u8 reset_mask = TWL6040_HPLLRST; /* Same for HPPLL and LPPLL */
883 + int ret;
884 +
885 + ret = twl6040_set_bits(pdmclk->twl6040, reg, reset_mask);
886 + if (ret < 0)
887 + return ret;
888 +
889 + ret = twl6040_clear_bits(pdmclk->twl6040, reg, reset_mask);
890 + if (ret < 0)
891 + return ret;
892 +
893 + return 0;
894 +}
895 +
896 +/*
897 + * TWL6040A2 Phoenix Audio IC erratum #6: "PDM Clock Generation Issue At
898 + * Cold Temperature". This affects cold boot and deeper idle states it
899 + * seems. The workaround consists of resetting HPPLL and LPPLL.
900 + */
901 +static int twl6040_pdmclk_quirk_reset_clocks(struct twl6040_pdmclk *pdmclk)
902 +{
903 + int ret;
904 +
905 + ret = twl6040_pdmclk_reset_one_clock(pdmclk, TWL6040_REG_HPPLLCTL);
906 + if (ret)
907 + return ret;
908 +
909 + ret = twl6040_pdmclk_reset_one_clock(pdmclk, TWL6040_REG_LPPLLCTL);
910 + if (ret)
911 + return ret;
912 +
913 + return 0;
914 +}
915 +
916 static int twl6040_pdmclk_prepare(struct clk_hw *hw)
917 {
918 struct twl6040_pdmclk *pdmclk = container_of(hw, struct twl6040_pdmclk,
919 @@ -48,8 +85,20 @@ static int twl6040_pdmclk_prepare(struct clk_hw *hw)
920 int ret;
921
922 ret = twl6040_power(pdmclk->twl6040, 1);
923 - if (!ret)
924 - pdmclk->enabled = 1;
925 + if (ret)
926 + return ret;
927 +
928 + ret = twl6040_pdmclk_quirk_reset_clocks(pdmclk);
929 + if (ret)
930 + goto out_err;
931 +
932 + pdmclk->enabled = 1;
933 +
934 + return 0;
935 +
936 +out_err:
937 + dev_err(pdmclk->dev, "%s: error %i\n", __func__, ret);
938 + twl6040_power(pdmclk->twl6040, 0);
939
940 return ret;
941 }
942 diff --git a/drivers/clk/ingenic/cgu.c b/drivers/clk/ingenic/cgu.c
943 index e8248f9185f7..4dec9e9ccffe 100644
944 --- a/drivers/clk/ingenic/cgu.c
945 +++ b/drivers/clk/ingenic/cgu.c
946 @@ -364,16 +364,16 @@ ingenic_clk_round_rate(struct clk_hw *hw, unsigned long req_rate,
947 struct ingenic_clk *ingenic_clk = to_ingenic_clk(hw);
948 struct ingenic_cgu *cgu = ingenic_clk->cgu;
949 const struct ingenic_cgu_clk_info *clk_info;
950 - long rate = *parent_rate;
951 + unsigned int div = 1;
952
953 clk_info = &cgu->clock_info[ingenic_clk->idx];
954
955 if (clk_info->type & CGU_CLK_DIV)
956 - rate /= ingenic_clk_calc_div(clk_info, *parent_rate, req_rate);
957 + div = ingenic_clk_calc_div(clk_info, *parent_rate, req_rate);
958 else if (clk_info->type & CGU_CLK_FIXDIV)
959 - rate /= clk_info->fixdiv.div;
960 + div = clk_info->fixdiv.div;
961
962 - return rate;
963 + return DIV_ROUND_UP(*parent_rate, div);
964 }
965
966 static int
967 @@ -393,7 +393,7 @@ ingenic_clk_set_rate(struct clk_hw *hw, unsigned long req_rate,
968
969 if (clk_info->type & CGU_CLK_DIV) {
970 div = ingenic_clk_calc_div(clk_info, parent_rate, req_rate);
971 - rate = parent_rate / div;
972 + rate = DIV_ROUND_UP(parent_rate, div);
973
974 if (rate != req_rate)
975 return -EINVAL;
976 diff --git a/drivers/clk/ingenic/cgu.h b/drivers/clk/ingenic/cgu.h
977 index 09700b2c555d..a22f654b2900 100644
978 --- a/drivers/clk/ingenic/cgu.h
979 +++ b/drivers/clk/ingenic/cgu.h
980 @@ -78,7 +78,7 @@ struct ingenic_cgu_mux_info {
981 * @reg: offset of the divider control register within the CGU
982 * @shift: number of bits to left shift the divide value by (ie. the index of
983 * the lowest bit of the divide value within its control register)
984 - * @div: number of bits to divide the divider value by (i.e. if the
985 + * @div: number to divide the divider value by (i.e. if the
986 * effective divider value is the value written to the register
987 * multiplied by some constant)
988 * @bits: the size of the divide value in bits
989 diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
990 index 6ea5401e6881..7f1281298651 100644
991 --- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
992 +++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
993 @@ -252,9 +252,9 @@ static SUNXI_CCU_GATE(ahb1_mmc1_clk, "ahb1-mmc1", "ahb1",
994 static SUNXI_CCU_GATE(ahb1_mmc2_clk, "ahb1-mmc2", "ahb1",
995 0x060, BIT(10), 0);
996 static SUNXI_CCU_GATE(ahb1_mmc3_clk, "ahb1-mmc3", "ahb1",
997 - 0x060, BIT(12), 0);
998 + 0x060, BIT(11), 0);
999 static SUNXI_CCU_GATE(ahb1_nand1_clk, "ahb1-nand1", "ahb1",
1000 - 0x060, BIT(13), 0);
1001 + 0x060, BIT(12), 0);
1002 static SUNXI_CCU_GATE(ahb1_nand0_clk, "ahb1-nand0", "ahb1",
1003 0x060, BIT(13), 0);
1004 static SUNXI_CCU_GATE(ahb1_sdram_clk, "ahb1-sdram", "ahb1",
1005 diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
1006 index 7f6fed9f0703..fb0cf8b74516 100644
1007 --- a/drivers/clocksource/exynos_mct.c
1008 +++ b/drivers/clocksource/exynos_mct.c
1009 @@ -388,6 +388,13 @@ static void exynos4_mct_tick_start(unsigned long cycles,
1010 exynos4_mct_write(tmp, mevt->base + MCT_L_TCON_OFFSET);
1011 }
1012
1013 +static void exynos4_mct_tick_clear(struct mct_clock_event_device *mevt)
1014 +{
1015 + /* Clear the MCT tick interrupt */
1016 + if (readl_relaxed(reg_base + mevt->base + MCT_L_INT_CSTAT_OFFSET) & 1)
1017 + exynos4_mct_write(0x1, mevt->base + MCT_L_INT_CSTAT_OFFSET);
1018 +}
1019 +
1020 static int exynos4_tick_set_next_event(unsigned long cycles,
1021 struct clock_event_device *evt)
1022 {
1023 @@ -404,6 +411,7 @@ static int set_state_shutdown(struct clock_event_device *evt)
1024
1025 mevt = container_of(evt, struct mct_clock_event_device, evt);
1026 exynos4_mct_tick_stop(mevt);
1027 + exynos4_mct_tick_clear(mevt);
1028 return 0;
1029 }
1030
1031 @@ -420,8 +428,11 @@ static int set_state_periodic(struct clock_event_device *evt)
1032 return 0;
1033 }
1034
1035 -static void exynos4_mct_tick_clear(struct mct_clock_event_device *mevt)
1036 +static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id)
1037 {
1038 + struct mct_clock_event_device *mevt = dev_id;
1039 + struct clock_event_device *evt = &mevt->evt;
1040 +
1041 /*
1042 * This is for supporting oneshot mode.
1043 * Mct would generate interrupt periodically
1044 @@ -430,16 +441,6 @@ static void exynos4_mct_tick_clear(struct mct_clock_event_device *mevt)
1045 if (!clockevent_state_periodic(&mevt->evt))
1046 exynos4_mct_tick_stop(mevt);
1047
1048 - /* Clear the MCT tick interrupt */
1049 - if (readl_relaxed(reg_base + mevt->base + MCT_L_INT_CSTAT_OFFSET) & 1)
1050 - exynos4_mct_write(0x1, mevt->base + MCT_L_INT_CSTAT_OFFSET);
1051 -}
1052 -
1053 -static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id)
1054 -{
1055 - struct mct_clock_event_device *mevt = dev_id;
1056 - struct clock_event_device *evt = &mevt->evt;
1057 -
1058 exynos4_mct_tick_clear(mevt);
1059
1060 evt->event_handler(evt);
1061 diff --git a/drivers/cpufreq/pxa2xx-cpufreq.c b/drivers/cpufreq/pxa2xx-cpufreq.c
1062 index ce345bf34d5d..a24e9f037865 100644
1063 --- a/drivers/cpufreq/pxa2xx-cpufreq.c
1064 +++ b/drivers/cpufreq/pxa2xx-cpufreq.c
1065 @@ -192,7 +192,7 @@ static int pxa_cpufreq_change_voltage(const struct pxa_freqs *pxa_freq)
1066 return ret;
1067 }
1068
1069 -static void __init pxa_cpufreq_init_voltages(void)
1070 +static void pxa_cpufreq_init_voltages(void)
1071 {
1072 vcc_core = regulator_get(NULL, "vcc_core");
1073 if (IS_ERR(vcc_core)) {
1074 @@ -208,7 +208,7 @@ static int pxa_cpufreq_change_voltage(const struct pxa_freqs *pxa_freq)
1075 return 0;
1076 }
1077
1078 -static void __init pxa_cpufreq_init_voltages(void) { }
1079 +static void pxa_cpufreq_init_voltages(void) { }
1080 #endif
1081
1082 static void find_freq_tables(struct cpufreq_frequency_table **freq_table,
1083 diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
1084 index 43530254201a..4bb154f6c54c 100644
1085 --- a/drivers/cpufreq/tegra124-cpufreq.c
1086 +++ b/drivers/cpufreq/tegra124-cpufreq.c
1087 @@ -134,6 +134,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
1088
1089 platform_set_drvdata(pdev, priv);
1090
1091 + of_node_put(np);
1092 +
1093 return 0;
1094
1095 out_switch_to_pllx:
1096 diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
1097 index 0d743c634f25..88caca3370f2 100644
1098 --- a/drivers/crypto/caam/caamalg.c
1099 +++ b/drivers/crypto/caam/caamalg.c
1100 @@ -2131,6 +2131,7 @@ static void init_aead_job(struct aead_request *req,
1101 if (unlikely(req->src != req->dst)) {
1102 if (!edesc->dst_nents) {
1103 dst_dma = sg_dma_address(req->dst);
1104 + out_options = 0;
1105 } else {
1106 dst_dma = edesc->sec4_sg_dma +
1107 sec4_sg_index *
1108 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1109 index 6509031098d5..26c4befcd234 100644
1110 --- a/drivers/gpu/drm/i915/i915_gem.c
1111 +++ b/drivers/gpu/drm/i915/i915_gem.c
1112 @@ -1600,7 +1600,8 @@ __vma_matches(struct vm_area_struct *vma, struct file *filp,
1113 if (vma->vm_file != filp)
1114 return false;
1115
1116 - return vma->vm_start == addr && (vma->vm_end - vma->vm_start) == size;
1117 + return vma->vm_start == addr &&
1118 + (vma->vm_end - vma->vm_start) == PAGE_ALIGN(size);
1119 }
1120
1121 /**
1122 diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c
1123 index d960d3915408..f09388e00523 100644
1124 --- a/drivers/gpu/drm/radeon/evergreen_cs.c
1125 +++ b/drivers/gpu/drm/radeon/evergreen_cs.c
1126 @@ -1299,6 +1299,7 @@ static int evergreen_cs_handle_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
1127 return -EINVAL;
1128 }
1129 ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff);
1130 + break;
1131 case CB_TARGET_MASK:
1132 track->cb_target_mask = radeon_get_ib_value(p, idx);
1133 track->cb_dirty = true;
1134 diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
1135 index 99c813a4ec1f..57d22bc963b5 100644
1136 --- a/drivers/gpu/ipu-v3/ipu-common.c
1137 +++ b/drivers/gpu/ipu-v3/ipu-common.c
1138 @@ -884,8 +884,8 @@ static struct ipu_devtype ipu_type_imx51 = {
1139 .cpmem_ofs = 0x1f000000,
1140 .srm_ofs = 0x1f040000,
1141 .tpm_ofs = 0x1f060000,
1142 - .csi0_ofs = 0x1f030000,
1143 - .csi1_ofs = 0x1f038000,
1144 + .csi0_ofs = 0x1e030000,
1145 + .csi1_ofs = 0x1e038000,
1146 .ic_ofs = 0x1e020000,
1147 .disp0_ofs = 0x1e040000,
1148 .disp1_ofs = 0x1e048000,
1149 @@ -900,8 +900,8 @@ static struct ipu_devtype ipu_type_imx53 = {
1150 .cpmem_ofs = 0x07000000,
1151 .srm_ofs = 0x07040000,
1152 .tpm_ofs = 0x07060000,
1153 - .csi0_ofs = 0x07030000,
1154 - .csi1_ofs = 0x07038000,
1155 + .csi0_ofs = 0x06030000,
1156 + .csi1_ofs = 0x06038000,
1157 .ic_ofs = 0x06020000,
1158 .disp0_ofs = 0x06040000,
1159 .disp1_ofs = 0x06048000,
1160 diff --git a/drivers/hwtracing/intel_th/gth.c b/drivers/hwtracing/intel_th/gth.c
1161 index 33e09369a491..b0502e2782c1 100644
1162 --- a/drivers/hwtracing/intel_th/gth.c
1163 +++ b/drivers/hwtracing/intel_th/gth.c
1164 @@ -599,11 +599,15 @@ static void intel_th_gth_unassign(struct intel_th_device *thdev,
1165 {
1166 struct gth_device *gth = dev_get_drvdata(&thdev->dev);
1167 int port = othdev->output.port;
1168 + int master;
1169
1170 spin_lock(&gth->gth_lock);
1171 othdev->output.port = -1;
1172 othdev->output.active = false;
1173 gth->output[port].output = NULL;
1174 + for (master = 0; master < TH_CONFIGURABLE_MASTERS; master++)
1175 + if (gth->master[master] == port)
1176 + gth->master[master] = -1;
1177 spin_unlock(&gth->gth_lock);
1178 }
1179
1180 diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c
1181 index c38645106783..3c45c1c15f7e 100644
1182 --- a/drivers/hwtracing/stm/core.c
1183 +++ b/drivers/hwtracing/stm/core.c
1184 @@ -252,6 +252,9 @@ static int find_free_channels(unsigned long *bitmap, unsigned int start,
1185 ;
1186 if (i == width)
1187 return pos;
1188 +
1189 + /* step over [pos..pos+i) to continue search */
1190 + pos += i;
1191 }
1192
1193 return -1;
1194 @@ -558,7 +561,7 @@ static int stm_char_policy_set_ioctl(struct stm_file *stmf, void __user *arg)
1195 {
1196 struct stm_device *stm = stmf->stm;
1197 struct stp_policy_id *id;
1198 - int ret = -EINVAL;
1199 + int ret = -EINVAL, wlimit = 1;
1200 u32 size;
1201
1202 if (stmf->output.nr_chans)
1203 @@ -586,8 +589,10 @@ static int stm_char_policy_set_ioctl(struct stm_file *stmf, void __user *arg)
1204 if (id->__reserved_0 || id->__reserved_1)
1205 goto err_free;
1206
1207 - if (id->width < 1 ||
1208 - id->width > PAGE_SIZE / stm->data->sw_mmiosz)
1209 + if (stm->data->sw_mmiosz)
1210 + wlimit = PAGE_SIZE / stm->data->sw_mmiosz;
1211 +
1212 + if (id->width < 1 || id->width > wlimit)
1213 goto err_free;
1214
1215 ret = stm_file_assign(stmf, id->id, id->width);
1216 diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
1217 index 45d6771fac8c..59c08d5b75d6 100644
1218 --- a/drivers/i2c/busses/i2c-cadence.c
1219 +++ b/drivers/i2c/busses/i2c-cadence.c
1220 @@ -382,8 +382,10 @@ static void cdns_i2c_mrecv(struct cdns_i2c *id)
1221 * Check for the message size against FIFO depth and set the
1222 * 'hold bus' bit if it is greater than FIFO depth.
1223 */
1224 - if (id->recv_count > CDNS_I2C_FIFO_DEPTH)
1225 + if ((id->recv_count > CDNS_I2C_FIFO_DEPTH) || id->bus_hold_flag)
1226 ctrl_reg |= CDNS_I2C_CR_HOLD;
1227 + else
1228 + ctrl_reg = ctrl_reg & ~CDNS_I2C_CR_HOLD;
1229
1230 cdns_i2c_writereg(ctrl_reg, CDNS_I2C_CR_OFFSET);
1231
1232 @@ -440,8 +442,11 @@ static void cdns_i2c_msend(struct cdns_i2c *id)
1233 * Check for the message size against FIFO depth and set the
1234 * 'hold bus' bit if it is greater than FIFO depth.
1235 */
1236 - if (id->send_count > CDNS_I2C_FIFO_DEPTH)
1237 + if ((id->send_count > CDNS_I2C_FIFO_DEPTH) || id->bus_hold_flag)
1238 ctrl_reg |= CDNS_I2C_CR_HOLD;
1239 + else
1240 + ctrl_reg = ctrl_reg & ~CDNS_I2C_CR_HOLD;
1241 +
1242 cdns_i2c_writereg(ctrl_reg, CDNS_I2C_CR_OFFSET);
1243
1244 /* Clear the interrupts in interrupt status register. */
1245 diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
1246 index 586e557e113a..36100f453f31 100644
1247 --- a/drivers/i2c/busses/i2c-tegra.c
1248 +++ b/drivers/i2c/busses/i2c-tegra.c
1249 @@ -794,7 +794,7 @@ static const struct i2c_algorithm tegra_i2c_algo = {
1250 /* payload size is only 12 bit */
1251 static struct i2c_adapter_quirks tegra_i2c_quirks = {
1252 .max_read_len = 4096,
1253 - .max_write_len = 4096,
1254 + .max_write_len = 4096 - 12,
1255 };
1256
1257 static const struct tegra_i2c_hw_feature tegra20_i2c_hw = {
1258 diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c
1259 index c15756d7bf7f..eb8b735ca12b 100644
1260 --- a/drivers/iio/adc/exynos_adc.c
1261 +++ b/drivers/iio/adc/exynos_adc.c
1262 @@ -916,7 +916,7 @@ static int exynos_adc_remove(struct platform_device *pdev)
1263 struct iio_dev *indio_dev = platform_get_drvdata(pdev);
1264 struct exynos_adc *info = iio_priv(indio_dev);
1265
1266 - if (IS_REACHABLE(CONFIG_INPUT)) {
1267 + if (IS_REACHABLE(CONFIG_INPUT) && info->input) {
1268 free_irq(info->tsirq, info);
1269 input_unregister_device(info->input);
1270 }
1271 diff --git a/drivers/input/keyboard/cap11xx.c b/drivers/input/keyboard/cap11xx.c
1272 index 4401be225d64..3c53aa5d5c0c 100644
1273 --- a/drivers/input/keyboard/cap11xx.c
1274 +++ b/drivers/input/keyboard/cap11xx.c
1275 @@ -75,9 +75,7 @@
1276 struct cap11xx_led {
1277 struct cap11xx_priv *priv;
1278 struct led_classdev cdev;
1279 - struct work_struct work;
1280 u32 reg;
1281 - enum led_brightness new_brightness;
1282 };
1283 #endif
1284
1285 @@ -233,30 +231,21 @@ static void cap11xx_input_close(struct input_dev *idev)
1286 }
1287
1288 #ifdef CONFIG_LEDS_CLASS
1289 -static void cap11xx_led_work(struct work_struct *work)
1290 +static int cap11xx_led_set(struct led_classdev *cdev,
1291 + enum led_brightness value)
1292 {
1293 - struct cap11xx_led *led = container_of(work, struct cap11xx_led, work);
1294 + struct cap11xx_led *led = container_of(cdev, struct cap11xx_led, cdev);
1295 struct cap11xx_priv *priv = led->priv;
1296 - int value = led->new_brightness;
1297
1298 /*
1299 - * All LEDs share the same duty cycle as this is a HW limitation.
1300 - * Brightness levels per LED are either 0 (OFF) and 1 (ON).
1301 + * All LEDs share the same duty cycle as this is a HW
1302 + * limitation. Brightness levels per LED are either
1303 + * 0 (OFF) and 1 (ON).
1304 */
1305 - regmap_update_bits(priv->regmap, CAP11XX_REG_LED_OUTPUT_CONTROL,
1306 - BIT(led->reg), value ? BIT(led->reg) : 0);
1307 -}
1308 -
1309 -static void cap11xx_led_set(struct led_classdev *cdev,
1310 - enum led_brightness value)
1311 -{
1312 - struct cap11xx_led *led = container_of(cdev, struct cap11xx_led, cdev);
1313 -
1314 - if (led->new_brightness == value)
1315 - return;
1316 -
1317 - led->new_brightness = value;
1318 - schedule_work(&led->work);
1319 + return regmap_update_bits(priv->regmap,
1320 + CAP11XX_REG_LED_OUTPUT_CONTROL,
1321 + BIT(led->reg),
1322 + value ? BIT(led->reg) : 0);
1323 }
1324
1325 static int cap11xx_init_leds(struct device *dev,
1326 @@ -299,7 +288,7 @@ static int cap11xx_init_leds(struct device *dev,
1327 led->cdev.default_trigger =
1328 of_get_property(child, "linux,default-trigger", NULL);
1329 led->cdev.flags = 0;
1330 - led->cdev.brightness_set = cap11xx_led_set;
1331 + led->cdev.brightness_set_blocking = cap11xx_led_set;
1332 led->cdev.max_brightness = 1;
1333 led->cdev.brightness = LED_OFF;
1334
1335 @@ -312,8 +301,6 @@ static int cap11xx_init_leds(struct device *dev,
1336 led->reg = reg;
1337 led->priv = priv;
1338
1339 - INIT_WORK(&led->work, cap11xx_led_work);
1340 -
1341 error = devm_led_classdev_register(dev, &led->cdev);
1342 if (error) {
1343 of_node_put(child);
1344 diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
1345 index c64d87442a62..2e12e31f45c5 100644
1346 --- a/drivers/input/keyboard/matrix_keypad.c
1347 +++ b/drivers/input/keyboard/matrix_keypad.c
1348 @@ -220,7 +220,7 @@ static void matrix_keypad_stop(struct input_dev *dev)
1349 keypad->stopped = true;
1350 spin_unlock_irq(&keypad->lock);
1351
1352 - flush_work(&keypad->work.work);
1353 + flush_delayed_work(&keypad->work);
1354 /*
1355 * matrix_keypad_scan() will leave IRQs enabled;
1356 * we should disable them now.
1357 diff --git a/drivers/input/keyboard/st-keyscan.c b/drivers/input/keyboard/st-keyscan.c
1358 index de7be4f03d91..ebf9f643d910 100644
1359 --- a/drivers/input/keyboard/st-keyscan.c
1360 +++ b/drivers/input/keyboard/st-keyscan.c
1361 @@ -153,6 +153,8 @@ static int keyscan_probe(struct platform_device *pdev)
1362
1363 input_dev->id.bustype = BUS_HOST;
1364
1365 + keypad_data->input_dev = input_dev;
1366 +
1367 error = keypad_matrix_key_parse_dt(keypad_data);
1368 if (error)
1369 return error;
1370 @@ -168,8 +170,6 @@ static int keyscan_probe(struct platform_device *pdev)
1371
1372 input_set_drvdata(input_dev, keypad_data);
1373
1374 - keypad_data->input_dev = input_dev;
1375 -
1376 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1377 keypad_data->base = devm_ioremap_resource(&pdev->dev, res);
1378 if (IS_ERR(keypad_data->base))
1379 diff --git a/drivers/md/bcache/writeback.h b/drivers/md/bcache/writeback.h
1380 index cdf8d253209e..6fb6dd600970 100644
1381 --- a/drivers/md/bcache/writeback.h
1382 +++ b/drivers/md/bcache/writeback.h
1383 @@ -68,6 +68,9 @@ static inline bool should_writeback(struct cached_dev *dc, struct bio *bio,
1384 in_use > CUTOFF_WRITEBACK_SYNC)
1385 return false;
1386
1387 + if (bio_op(bio) == REQ_OP_DISCARD)
1388 + return false;
1389 +
1390 if (dc->partial_stripes_expensive &&
1391 bcache_dev_stripe_dirty(dc, bio->bi_iter.bi_sector,
1392 bio_sectors(bio)))
1393 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1394 index 67414616eb35..717787d09e0f 100644
1395 --- a/drivers/md/raid10.c
1396 +++ b/drivers/md/raid10.c
1397 @@ -3798,6 +3798,8 @@ static int raid10_run(struct mddev *mddev)
1398 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
1399 mddev->sync_thread = md_register_thread(md_do_sync, mddev,
1400 "reshape");
1401 + if (!mddev->sync_thread)
1402 + goto out_free_conf;
1403 }
1404
1405 return 0;
1406 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1407 index 4afc419da60f..9ec74dfe94f4 100644
1408 --- a/drivers/md/raid5.c
1409 +++ b/drivers/md/raid5.c
1410 @@ -6977,6 +6977,8 @@ static int raid5_run(struct mddev *mddev)
1411 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
1412 mddev->sync_thread = md_register_thread(md_do_sync, mddev,
1413 "reshape");
1414 + if (!mddev->sync_thread)
1415 + goto abort;
1416 }
1417
1418 /* Ok, everything is just fine now */
1419 diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
1420 index 48503f30b3a2..dcca723f7155 100644
1421 --- a/drivers/media/usb/uvc/uvc_video.c
1422 +++ b/drivers/media/usb/uvc/uvc_video.c
1423 @@ -638,6 +638,14 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
1424 if (!uvc_hw_timestamps_param)
1425 return;
1426
1427 + /*
1428 + * We will get called from __vb2_queue_cancel() if there are buffers
1429 + * done but not dequeued by the user, but the sample array has already
1430 + * been released at that time. Just bail out in that case.
1431 + */
1432 + if (!clock->samples)
1433 + return;
1434 +
1435 spin_lock_irqsave(&clock->lock, flags);
1436
1437 if (clock->count < clock->size)
1438 diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
1439 index 52ef8833f6b6..7e45da4d52e1 100644
1440 --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
1441 +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
1442 @@ -146,7 +146,6 @@ static void vb2_warn_zero_bytesused(struct vb2_buffer *vb)
1443 return;
1444
1445 check_once = true;
1446 - WARN_ON(1);
1447
1448 pr_warn("use of bytesused == 0 is deprecated and will be removed in the future,\n");
1449 if (vb->vb2_queue->allow_zero_bytesused)
1450 diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
1451 index 2ff465848b65..097a0bf592ab 100644
1452 --- a/drivers/net/ethernet/atheros/atlx/atl2.c
1453 +++ b/drivers/net/ethernet/atheros/atlx/atl2.c
1454 @@ -1338,13 +1338,11 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1455 {
1456 struct net_device *netdev;
1457 struct atl2_adapter *adapter;
1458 - static int cards_found;
1459 + static int cards_found = 0;
1460 unsigned long mmio_start;
1461 int mmio_len;
1462 int err;
1463
1464 - cards_found = 0;
1465 -
1466 err = pci_enable_device(pdev);
1467 if (err)
1468 return err;
1469 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
1470 index 53a506b0d790..95874c10c23b 100644
1471 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
1472 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
1473 @@ -104,6 +104,10 @@ static int bcm_sysport_set_rx_csum(struct net_device *dev,
1474
1475 priv->rx_chk_en = !!(wanted & NETIF_F_RXCSUM);
1476 reg = rxchk_readl(priv, RXCHK_CONTROL);
1477 + /* Clear L2 header checks, which would prevent BPDUs
1478 + * from being received.
1479 + */
1480 + reg &= ~RXCHK_L2_HDR_DIS;
1481 if (priv->rx_chk_en)
1482 reg |= RXCHK_EN;
1483 else
1484 diff --git a/drivers/net/ethernet/cavium/thunder/nic_main.c b/drivers/net/ethernet/cavium/thunder/nic_main.c
1485 index da142f6bd0c3..18ddd243dfa1 100644
1486 --- a/drivers/net/ethernet/cavium/thunder/nic_main.c
1487 +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c
1488 @@ -999,7 +999,7 @@ static void nic_handle_mbx_intr(struct nicpf *nic, int vf)
1489 case NIC_MBOX_MSG_CFG_DONE:
1490 /* Last message of VF config msg sequence */
1491 nic_enable_vf(nic, vf, true);
1492 - goto unlock;
1493 + break;
1494 case NIC_MBOX_MSG_SHUTDOWN:
1495 /* First msg in VF teardown sequence */
1496 if (vf >= nic->num_vf_en)
1497 diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
1498 index c75d4ea9342b..71f228cece03 100644
1499 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
1500 +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
1501 @@ -162,6 +162,17 @@ static int nicvf_check_pf_ready(struct nicvf *nic)
1502 return 1;
1503 }
1504
1505 +static void nicvf_send_cfg_done(struct nicvf *nic)
1506 +{
1507 + union nic_mbx mbx = {};
1508 +
1509 + mbx.msg.msg = NIC_MBOX_MSG_CFG_DONE;
1510 + if (nicvf_send_msg_to_pf(nic, &mbx)) {
1511 + netdev_err(nic->netdev,
1512 + "PF didn't respond to CFG DONE msg\n");
1513 + }
1514 +}
1515 +
1516 static void nicvf_read_bgx_stats(struct nicvf *nic, struct bgx_stats_msg *bgx)
1517 {
1518 if (bgx->rx)
1519 @@ -1178,7 +1189,6 @@ int nicvf_open(struct net_device *netdev)
1520 struct nicvf *nic = netdev_priv(netdev);
1521 struct queue_set *qs = nic->qs;
1522 struct nicvf_cq_poll *cq_poll = NULL;
1523 - union nic_mbx mbx = {};
1524
1525 netif_carrier_off(netdev);
1526
1527 @@ -1267,8 +1277,7 @@ int nicvf_open(struct net_device *netdev)
1528 nicvf_enable_intr(nic, NICVF_INTR_RBDR, qidx);
1529
1530 /* Send VF config done msg to PF */
1531 - mbx.msg.msg = NIC_MBOX_MSG_CFG_DONE;
1532 - nicvf_write_to_mbx(nic, &mbx);
1533 + nicvf_send_cfg_done(nic);
1534
1535 return 0;
1536 cleanup:
1537 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1538 index 5bb019d49409..551b2a9ebf0f 100644
1539 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1540 +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1541 @@ -2820,6 +2820,7 @@ int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset)
1542 dsaf_dev = dev_get_drvdata(&pdev->dev);
1543 if (!dsaf_dev) {
1544 dev_err(&pdev->dev, "dsaf_dev is NULL\n");
1545 + put_device(&pdev->dev);
1546 return -ENODEV;
1547 }
1548
1549 @@ -2827,6 +2828,7 @@ int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset)
1550 if (AE_IS_VER1(dsaf_dev->dsaf_ver)) {
1551 dev_err(dsaf_dev->dev, "%s v1 chip doesn't support RoCE!\n",
1552 dsaf_dev->ae_dev.name);
1553 + put_device(&pdev->dev);
1554 return -ENODEV;
1555 }
1556
1557 diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
1558 index 5b12022adf1f..526d07e02bbc 100644
1559 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
1560 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
1561 @@ -2886,7 +2886,7 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev)
1562
1563 ret = mv643xx_eth_shared_of_probe(pdev);
1564 if (ret)
1565 - return ret;
1566 + goto err_put_clk;
1567 pd = dev_get_platdata(&pdev->dev);
1568
1569 msp->tx_csum_limit = (pd != NULL && pd->tx_csum_limit) ?
1570 @@ -2894,6 +2894,11 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev)
1571 infer_hw_params(msp);
1572
1573 return 0;
1574 +
1575 +err_put_clk:
1576 + if (!IS_ERR(msp->clk))
1577 + clk_disable_unprepare(msp->clk);
1578 + return ret;
1579 }
1580
1581 static int mv643xx_eth_shared_remove(struct platform_device *pdev)
1582 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
1583 index c92ffdf91065..d98b874a7238 100644
1584 --- a/drivers/net/ethernet/marvell/mvneta.c
1585 +++ b/drivers/net/ethernet/marvell/mvneta.c
1586 @@ -2050,7 +2050,7 @@ err_drop_frame:
1587 if (unlikely(!skb))
1588 goto err_drop_frame_ret_pool;
1589
1590 - dma_sync_single_range_for_cpu(dev->dev.parent,
1591 + dma_sync_single_range_for_cpu(&pp->bm_priv->pdev->dev,
1592 rx_desc->buf_phys_addr,
1593 MVNETA_MH_SIZE + NET_SKB_PAD,
1594 rx_bytes,
1595 diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
1596 index f8df5300f49c..73087770d72f 100644
1597 --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
1598 +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
1599 @@ -756,15 +756,10 @@ wrp_alu64_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
1600
1601 static int
1602 wrp_alu32_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
1603 - enum alu_op alu_op, bool skip)
1604 + enum alu_op alu_op)
1605 {
1606 const struct bpf_insn *insn = &meta->insn;
1607
1608 - if (skip) {
1609 - meta->skip = true;
1610 - return 0;
1611 - }
1612 -
1613 wrp_alu_imm(nfp_prog, insn->dst_reg * 2, alu_op, insn->imm);
1614 wrp_immed(nfp_prog, reg_both(insn->dst_reg * 2 + 1), 0);
1615
1616 @@ -1017,7 +1012,7 @@ static int xor_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1617
1618 static int xor_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1619 {
1620 - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR, !~meta->insn.imm);
1621 + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR);
1622 }
1623
1624 static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1625 @@ -1027,7 +1022,7 @@ static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1626
1627 static int and_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1628 {
1629 - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND, !~meta->insn.imm);
1630 + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND);
1631 }
1632
1633 static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1634 @@ -1037,7 +1032,7 @@ static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1635
1636 static int or_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1637 {
1638 - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR, !meta->insn.imm);
1639 + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR);
1640 }
1641
1642 static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1643 @@ -1047,7 +1042,7 @@ static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1644
1645 static int add_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1646 {
1647 - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD, !meta->insn.imm);
1648 + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD);
1649 }
1650
1651 static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1652 @@ -1057,7 +1052,7 @@ static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1653
1654 static int sub_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1655 {
1656 - return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB, !meta->insn.imm);
1657 + return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB);
1658 }
1659
1660 static int shl_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
1661 diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
1662 index 134eb184fa22..16e5c8cd104d 100644
1663 --- a/drivers/net/usb/qmi_wwan.c
1664 +++ b/drivers/net/usb/qmi_wwan.c
1665 @@ -895,8 +895,8 @@ static const struct usb_device_id products[] = {
1666 {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
1667 {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */
1668 {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */
1669 - {QMI_FIXED_INTF(0x1199, 0x68c0, 8)}, /* Sierra Wireless MC7304/MC7354 */
1670 - {QMI_FIXED_INTF(0x1199, 0x68c0, 10)}, /* Sierra Wireless MC7304/MC7354 */
1671 + {QMI_QUIRK_SET_DTR(0x1199, 0x68c0, 8)}, /* Sierra Wireless MC7304/MC7354, WP76xx */
1672 + {QMI_QUIRK_SET_DTR(0x1199, 0x68c0, 10)},/* Sierra Wireless MC7304/MC7354 */
1673 {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */
1674 {QMI_FIXED_INTF(0x1199, 0x901f, 8)}, /* Sierra Wireless EM7355 */
1675 {QMI_FIXED_INTF(0x1199, 0x9041, 8)}, /* Sierra Wireless MC7305/MC7355 */
1676 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
1677 index 780acf23fd19..e9ec1da9935d 100644
1678 --- a/drivers/net/wireless/mac80211_hwsim.c
1679 +++ b/drivers/net/wireless/mac80211_hwsim.c
1680 @@ -3167,7 +3167,7 @@ static int hwsim_get_radio_nl(struct sk_buff *msg, struct genl_info *info)
1681 goto out_err;
1682 }
1683
1684 - genlmsg_reply(skb, info);
1685 + res = genlmsg_reply(skb, info);
1686 break;
1687 }
1688
1689 diff --git a/drivers/net/wireless/marvell/libertas_tf/if_usb.c b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
1690 index e0ade40d9497..4b539209999b 100644
1691 --- a/drivers/net/wireless/marvell/libertas_tf/if_usb.c
1692 +++ b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
1693 @@ -433,8 +433,6 @@ static int __if_usb_submit_rx_urb(struct if_usb_card *cardp,
1694 skb_tail_pointer(skb),
1695 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, cardp);
1696
1697 - cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET;
1698 -
1699 lbtf_deb_usb2(&cardp->udev->dev, "Pointer for rx_urb %p\n",
1700 cardp->rx_urb);
1701 ret = usb_submit_urb(cardp->rx_urb, GFP_ATOMIC);
1702 diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
1703 index d8d189d14834..66a089d561cf 100644
1704 --- a/drivers/nvdimm/label.c
1705 +++ b/drivers/nvdimm/label.c
1706 @@ -492,7 +492,7 @@ static unsigned long nd_label_offset(struct nvdimm_drvdata *ndd,
1707
1708 static int __pmem_label_update(struct nd_region *nd_region,
1709 struct nd_mapping *nd_mapping, struct nd_namespace_pmem *nspm,
1710 - int pos)
1711 + int pos, unsigned long flags)
1712 {
1713 u64 cookie = nd_region_interleave_set_cookie(nd_region);
1714 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
1715 @@ -530,7 +530,7 @@ static int __pmem_label_update(struct nd_region *nd_region,
1716 memcpy(nd_label->uuid, nspm->uuid, NSLABEL_UUID_LEN);
1717 if (nspm->alt_name)
1718 memcpy(nd_label->name, nspm->alt_name, NSLABEL_NAME_LEN);
1719 - nd_label->flags = __cpu_to_le32(NSLABEL_FLAG_UPDATING);
1720 + nd_label->flags = __cpu_to_le32(flags);
1721 nd_label->nlabel = __cpu_to_le16(nd_region->ndr_mappings);
1722 nd_label->position = __cpu_to_le16(pos);
1723 nd_label->isetcookie = __cpu_to_le64(cookie);
1724 @@ -922,13 +922,13 @@ static int del_labels(struct nd_mapping *nd_mapping, u8 *uuid)
1725 int nd_pmem_namespace_label_update(struct nd_region *nd_region,
1726 struct nd_namespace_pmem *nspm, resource_size_t size)
1727 {
1728 - int i;
1729 + int i, rc;
1730
1731 for (i = 0; i < nd_region->ndr_mappings; i++) {
1732 struct nd_mapping *nd_mapping = &nd_region->mapping[i];
1733 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
1734 struct resource *res;
1735 - int rc, count = 0;
1736 + int count = 0;
1737
1738 if (size == 0) {
1739 rc = del_labels(nd_mapping, nspm->uuid);
1740 @@ -946,7 +946,20 @@ int nd_pmem_namespace_label_update(struct nd_region *nd_region,
1741 if (rc < 0)
1742 return rc;
1743
1744 - rc = __pmem_label_update(nd_region, nd_mapping, nspm, i);
1745 + rc = __pmem_label_update(nd_region, nd_mapping, nspm, i,
1746 + NSLABEL_FLAG_UPDATING);
1747 + if (rc)
1748 + return rc;
1749 + }
1750 +
1751 + if (size == 0)
1752 + return 0;
1753 +
1754 + /* Clear the UPDATING flag per UEFI 2.7 expectations */
1755 + for (i = 0; i < nd_region->ndr_mappings; i++) {
1756 + struct nd_mapping *nd_mapping = &nd_region->mapping[i];
1757 +
1758 + rc = __pmem_label_update(nd_region, nd_mapping, nspm, i, 0);
1759 if (rc)
1760 return rc;
1761 }
1762 diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
1763 index 74257ac92490..9bc5f555ee68 100644
1764 --- a/drivers/nvdimm/namespace_devs.c
1765 +++ b/drivers/nvdimm/namespace_devs.c
1766 @@ -138,6 +138,7 @@ bool nd_is_uuid_unique(struct device *dev, u8 *uuid)
1767 bool pmem_should_map_pages(struct device *dev)
1768 {
1769 struct nd_region *nd_region = to_nd_region(dev->parent);
1770 + struct nd_namespace_common *ndns = to_ndns(dev);
1771 struct nd_namespace_io *nsio;
1772
1773 if (!IS_ENABLED(CONFIG_ZONE_DEVICE))
1774 @@ -149,6 +150,9 @@ bool pmem_should_map_pages(struct device *dev)
1775 if (is_nd_pfn(dev) || is_nd_btt(dev))
1776 return false;
1777
1778 + if (ndns->force_raw)
1779 + return false;
1780 +
1781 nsio = to_nd_namespace_io(dev);
1782 if (region_intersects(nsio->res.start, resource_size(&nsio->res),
1783 IORESOURCE_SYSTEM_RAM,
1784 diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
1785 index d6aa59ca68b9..ba9aa8475e6d 100644
1786 --- a/drivers/nvdimm/pfn_devs.c
1787 +++ b/drivers/nvdimm/pfn_devs.c
1788 @@ -515,7 +515,7 @@ static unsigned long init_altmap_base(resource_size_t base)
1789
1790 static unsigned long init_altmap_reserve(resource_size_t base)
1791 {
1792 - unsigned long reserve = PHYS_PFN(SZ_8K);
1793 + unsigned long reserve = PFN_UP(SZ_8K);
1794 unsigned long base_pfn = PHYS_PFN(base);
1795
1796 reserve += base_pfn - PFN_SECTION_ALIGN_DOWN(base_pfn);
1797 diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
1798 index bdce0679674c..02e6485c1ed5 100644
1799 --- a/drivers/parport/parport_pc.c
1800 +++ b/drivers/parport/parport_pc.c
1801 @@ -1377,7 +1377,7 @@ static struct superio_struct *find_superio(struct parport *p)
1802 {
1803 int i;
1804 for (i = 0; i < NR_SUPERIOS; i++)
1805 - if (superios[i].io != p->base)
1806 + if (superios[i].io == p->base)
1807 return &superios[i];
1808 return NULL;
1809 }
1810 diff --git a/drivers/pinctrl/meson/pinctrl-meson8b.c b/drivers/pinctrl/meson/pinctrl-meson8b.c
1811 index cbe5f5cbddb8..e1b689f840ab 100644
1812 --- a/drivers/pinctrl/meson/pinctrl-meson8b.c
1813 +++ b/drivers/pinctrl/meson/pinctrl-meson8b.c
1814 @@ -662,7 +662,7 @@ static const char * const sd_a_groups[] = {
1815
1816 static const char * const sdxc_a_groups[] = {
1817 "sdxc_d0_0_a", "sdxc_d13_0_a", "sdxc_d47_a", "sdxc_clk_a",
1818 - "sdxc_cmd_a", "sdxc_d0_1_a", "sdxc_d0_13_1_a"
1819 + "sdxc_cmd_a", "sdxc_d0_1_a", "sdxc_d13_1_a"
1820 };
1821
1822 static const char * const pcm_a_groups[] = {
1823 diff --git a/drivers/regulator/s2mpa01.c b/drivers/regulator/s2mpa01.c
1824 index 92f88753bfed..2daf751c26c7 100644
1825 --- a/drivers/regulator/s2mpa01.c
1826 +++ b/drivers/regulator/s2mpa01.c
1827 @@ -303,13 +303,13 @@ static const struct regulator_desc regulators[] = {
1828 regulator_desc_ldo(2, STEP_50_MV),
1829 regulator_desc_ldo(3, STEP_50_MV),
1830 regulator_desc_ldo(4, STEP_50_MV),
1831 - regulator_desc_ldo(5, STEP_50_MV),
1832 + regulator_desc_ldo(5, STEP_25_MV),
1833 regulator_desc_ldo(6, STEP_25_MV),
1834 regulator_desc_ldo(7, STEP_50_MV),
1835 regulator_desc_ldo(8, STEP_50_MV),
1836 regulator_desc_ldo(9, STEP_50_MV),
1837 regulator_desc_ldo(10, STEP_50_MV),
1838 - regulator_desc_ldo(11, STEP_25_MV),
1839 + regulator_desc_ldo(11, STEP_50_MV),
1840 regulator_desc_ldo(12, STEP_50_MV),
1841 regulator_desc_ldo(13, STEP_50_MV),
1842 regulator_desc_ldo(14, STEP_50_MV),
1843 @@ -320,11 +320,11 @@ static const struct regulator_desc regulators[] = {
1844 regulator_desc_ldo(19, STEP_50_MV),
1845 regulator_desc_ldo(20, STEP_50_MV),
1846 regulator_desc_ldo(21, STEP_50_MV),
1847 - regulator_desc_ldo(22, STEP_25_MV),
1848 - regulator_desc_ldo(23, STEP_25_MV),
1849 + regulator_desc_ldo(22, STEP_50_MV),
1850 + regulator_desc_ldo(23, STEP_50_MV),
1851 regulator_desc_ldo(24, STEP_50_MV),
1852 regulator_desc_ldo(25, STEP_50_MV),
1853 - regulator_desc_ldo(26, STEP_50_MV),
1854 + regulator_desc_ldo(26, STEP_25_MV),
1855 regulator_desc_buck1_4(1),
1856 regulator_desc_buck1_4(2),
1857 regulator_desc_buck1_4(3),
1858 diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
1859 index d838e77dd947..1fe1c18cc27b 100644
1860 --- a/drivers/regulator/s2mps11.c
1861 +++ b/drivers/regulator/s2mps11.c
1862 @@ -376,7 +376,7 @@ static const struct regulator_desc s2mps11_regulators[] = {
1863 regulator_desc_s2mps11_ldo(32, STEP_50_MV),
1864 regulator_desc_s2mps11_ldo(33, STEP_50_MV),
1865 regulator_desc_s2mps11_ldo(34, STEP_50_MV),
1866 - regulator_desc_s2mps11_ldo(35, STEP_50_MV),
1867 + regulator_desc_s2mps11_ldo(35, STEP_25_MV),
1868 regulator_desc_s2mps11_ldo(36, STEP_50_MV),
1869 regulator_desc_s2mps11_ldo(37, STEP_50_MV),
1870 regulator_desc_s2mps11_ldo(38, STEP_50_MV),
1871 @@ -386,8 +386,8 @@ static const struct regulator_desc s2mps11_regulators[] = {
1872 regulator_desc_s2mps11_buck1_4(4),
1873 regulator_desc_s2mps11_buck5,
1874 regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
1875 - regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_6_25_MV),
1876 - regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_6_25_MV),
1877 + regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_12_5_MV),
1878 + regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_12_5_MV),
1879 regulator_desc_s2mps11_buck9,
1880 regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
1881 };
1882 diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
1883 index be17de9807b6..11c6335b1951 100644
1884 --- a/drivers/s390/block/dasd_eckd.c
1885 +++ b/drivers/s390/block/dasd_eckd.c
1886 @@ -4508,6 +4508,14 @@ static int dasd_symm_io(struct dasd_device *device, void __user *argp)
1887 usrparm.psf_data &= 0x7fffffffULL;
1888 usrparm.rssd_result &= 0x7fffffffULL;
1889 }
1890 + /* at least 2 bytes are accessed and should be allocated */
1891 + if (usrparm.psf_data_len < 2) {
1892 + DBF_DEV_EVENT(DBF_WARNING, device,
1893 + "Symmetrix ioctl invalid data length %d",
1894 + usrparm.psf_data_len);
1895 + rc = -EINVAL;
1896 + goto out;
1897 + }
1898 /* alloc I/O data area */
1899 psf_data = kzalloc(usrparm.psf_data_len, GFP_KERNEL | GFP_DMA);
1900 rssd_result = kzalloc(usrparm.rssd_result_len, GFP_KERNEL | GFP_DMA);
1901 diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c
1902 index 3493d449911c..d5e510ff5437 100644
1903 --- a/drivers/s390/virtio/virtio_ccw.c
1904 +++ b/drivers/s390/virtio/virtio_ccw.c
1905 @@ -283,6 +283,8 @@ static void virtio_ccw_drop_indicators(struct virtio_ccw_device *vcdev)
1906 {
1907 struct virtio_ccw_vq_info *info;
1908
1909 + if (!vcdev->airq_info)
1910 + return;
1911 list_for_each_entry(info, &vcdev->virtqueues, node)
1912 drop_airq_indicator(info->vq, vcdev->airq_info);
1913 }
1914 @@ -424,7 +426,7 @@ static int virtio_ccw_read_vq_conf(struct virtio_ccw_device *vcdev,
1915 ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_VQ_CONF);
1916 if (ret)
1917 return ret;
1918 - return vcdev->config_block->num;
1919 + return vcdev->config_block->num ?: -ENOENT;
1920 }
1921
1922 static void virtio_ccw_del_vq(struct virtqueue *vq, struct ccw1 *ccw)
1923 diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
1924 index c79743de48f9..2ffe10453e30 100644
1925 --- a/drivers/scsi/libiscsi.c
1926 +++ b/drivers/scsi/libiscsi.c
1927 @@ -1448,7 +1448,13 @@ static int iscsi_xmit_task(struct iscsi_conn *conn)
1928 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx))
1929 return -ENODATA;
1930
1931 + spin_lock_bh(&conn->session->back_lock);
1932 + if (conn->task == NULL) {
1933 + spin_unlock_bh(&conn->session->back_lock);
1934 + return -ENODATA;
1935 + }
1936 __iscsi_get_task(task);
1937 + spin_unlock_bh(&conn->session->back_lock);
1938 spin_unlock_bh(&conn->session->frwd_lock);
1939 rc = conn->session->tt->xmit_task(task);
1940 spin_lock_bh(&conn->session->frwd_lock);
1941 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
1942 index 867ae76f93f2..3e9cbba41464 100644
1943 --- a/drivers/scsi/sd.c
1944 +++ b/drivers/scsi/sd.c
1945 @@ -2834,6 +2834,55 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
1946 sdkp->ws10 = 1;
1947 }
1948
1949 +/*
1950 + * Determine the device's preferred I/O size for reads and writes
1951 + * unless the reported value is unreasonably small, large, not a
1952 + * multiple of the physical block size, or simply garbage.
1953 + */
1954 +static bool sd_validate_opt_xfer_size(struct scsi_disk *sdkp,
1955 + unsigned int dev_max)
1956 +{
1957 + struct scsi_device *sdp = sdkp->device;
1958 + unsigned int opt_xfer_bytes =
1959 + logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
1960 +
1961 + if (sdkp->opt_xfer_blocks > dev_max) {
1962 + sd_first_printk(KERN_WARNING, sdkp,
1963 + "Optimal transfer size %u logical blocks " \
1964 + "> dev_max (%u logical blocks)\n",
1965 + sdkp->opt_xfer_blocks, dev_max);
1966 + return false;
1967 + }
1968 +
1969 + if (sdkp->opt_xfer_blocks > SD_DEF_XFER_BLOCKS) {
1970 + sd_first_printk(KERN_WARNING, sdkp,
1971 + "Optimal transfer size %u logical blocks " \
1972 + "> sd driver limit (%u logical blocks)\n",
1973 + sdkp->opt_xfer_blocks, SD_DEF_XFER_BLOCKS);
1974 + return false;
1975 + }
1976 +
1977 + if (opt_xfer_bytes < PAGE_SIZE) {
1978 + sd_first_printk(KERN_WARNING, sdkp,
1979 + "Optimal transfer size %u bytes < " \
1980 + "PAGE_SIZE (%u bytes)\n",
1981 + opt_xfer_bytes, (unsigned int)PAGE_SIZE);
1982 + return false;
1983 + }
1984 +
1985 + if (opt_xfer_bytes & (sdkp->physical_block_size - 1)) {
1986 + sd_first_printk(KERN_WARNING, sdkp,
1987 + "Optimal transfer size %u bytes not a " \
1988 + "multiple of physical block size (%u bytes)\n",
1989 + opt_xfer_bytes, sdkp->physical_block_size);
1990 + return false;
1991 + }
1992 +
1993 + sd_first_printk(KERN_INFO, sdkp, "Optimal transfer size %u bytes\n",
1994 + opt_xfer_bytes);
1995 + return true;
1996 +}
1997 +
1998 /**
1999 * sd_revalidate_disk - called the first time a new disk is seen,
2000 * performs disk spin up, read_capacity, etc.
2001 @@ -2898,15 +2947,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2002 dev_max = min_not_zero(dev_max, sdkp->max_xfer_blocks);
2003 q->limits.max_dev_sectors = logical_to_sectors(sdp, dev_max);
2004
2005 - /*
2006 - * Determine the device's preferred I/O size for reads and writes
2007 - * unless the reported value is unreasonably small, large, or
2008 - * garbage.
2009 - */
2010 - if (sdkp->opt_xfer_blocks &&
2011 - sdkp->opt_xfer_blocks <= dev_max &&
2012 - sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS &&
2013 - logical_to_bytes(sdp, sdkp->opt_xfer_blocks) >= PAGE_SIZE) {
2014 + if (sd_validate_opt_xfer_size(sdkp, dev_max)) {
2015 q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
2016 rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
2017 } else
2018 diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
2019 index cbc8e9388268..7ba0031d3a73 100644
2020 --- a/drivers/scsi/virtio_scsi.c
2021 +++ b/drivers/scsi/virtio_scsi.c
2022 @@ -693,7 +693,6 @@ static int virtscsi_device_reset(struct scsi_cmnd *sc)
2023 return FAILED;
2024
2025 memset(cmd, 0, sizeof(*cmd));
2026 - cmd->sc = sc;
2027 cmd->req.tmf = (struct virtio_scsi_ctrl_tmf_req){
2028 .type = VIRTIO_SCSI_T_TMF,
2029 .subtype = cpu_to_virtio32(vscsi->vdev,
2030 @@ -752,7 +751,6 @@ static int virtscsi_abort(struct scsi_cmnd *sc)
2031 return FAILED;
2032
2033 memset(cmd, 0, sizeof(*cmd));
2034 - cmd->sc = sc;
2035 cmd->req.tmf = (struct virtio_scsi_ctrl_tmf_req){
2036 .type = VIRTIO_SCSI_T_TMF,
2037 .subtype = VIRTIO_SCSI_T_TMF_ABORT_TASK,
2038 diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
2039 index 3f3751e2b521..f2209ec4cb68 100644
2040 --- a/drivers/spi/spi-pxa2xx.c
2041 +++ b/drivers/spi/spi-pxa2xx.c
2042 @@ -1668,6 +1668,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
2043 platform_info->enable_dma = false;
2044 } else {
2045 master->can_dma = pxa2xx_spi_can_dma;
2046 + master->max_dma_len = MAX_DMA_LEN;
2047 }
2048 }
2049
2050 diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
2051 index caeac66a3977..4cb72a8e4646 100644
2052 --- a/drivers/spi/spi-ti-qspi.c
2053 +++ b/drivers/spi/spi-ti-qspi.c
2054 @@ -457,8 +457,8 @@ static void ti_qspi_enable_memory_map(struct spi_device *spi)
2055 ti_qspi_write(qspi, MM_SWITCH, QSPI_SPI_SWITCH_REG);
2056 if (qspi->ctrl_base) {
2057 regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg,
2058 - MEM_CS_EN(spi->chip_select),
2059 - MEM_CS_MASK);
2060 + MEM_CS_MASK,
2061 + MEM_CS_EN(spi->chip_select));
2062 }
2063 qspi->mmap_enabled = true;
2064 }
2065 @@ -470,7 +470,7 @@ static void ti_qspi_disable_memory_map(struct spi_device *spi)
2066 ti_qspi_write(qspi, 0, QSPI_SPI_SWITCH_REG);
2067 if (qspi->ctrl_base)
2068 regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg,
2069 - 0, MEM_CS_MASK);
2070 + MEM_CS_MASK, 0);
2071 qspi->mmap_enabled = false;
2072 }
2073
2074 diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2075 index 80205f3362d4..b6c4f55f79e7 100644
2076 --- a/drivers/target/iscsi/iscsi_target.c
2077 +++ b/drivers/target/iscsi/iscsi_target.c
2078 @@ -4084,9 +4084,9 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
2079 struct se_cmd *se_cmd = &cmd->se_cmd;
2080
2081 if (se_cmd->se_tfo != NULL) {
2082 - spin_lock(&se_cmd->t_state_lock);
2083 + spin_lock_irq(&se_cmd->t_state_lock);
2084 se_cmd->transport_state |= CMD_T_FABRIC_STOP;
2085 - spin_unlock(&se_cmd->t_state_lock);
2086 + spin_unlock_irq(&se_cmd->t_state_lock);
2087 }
2088 }
2089 spin_unlock_bh(&conn->cmd_lock);
2090 diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
2091 index 7a8b5fc81a19..f89dfde934a3 100644
2092 --- a/drivers/tty/serial/8250/8250_of.c
2093 +++ b/drivers/tty/serial/8250/8250_of.c
2094 @@ -97,6 +97,10 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
2095 if (of_property_read_u32(np, "reg-offset", &prop) == 0)
2096 port->mapbase += prop;
2097
2098 + /* Compatibility with the deprecated pxa driver and 8250_pxa drivers. */
2099 + if (of_device_is_compatible(np, "mrvl,mmp-uart"))
2100 + port->regshift = 2;
2101 +
2102 /* Check for registers offset within the devices address range */
2103 if (of_property_read_u32(np, "reg-shift", &prop) == 0)
2104 port->regshift = prop;
2105 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
2106 index e82b3473b6b8..2c38b3a1d518 100644
2107 --- a/drivers/tty/serial/8250/8250_pci.c
2108 +++ b/drivers/tty/serial/8250/8250_pci.c
2109 @@ -1330,6 +1330,30 @@ static int pci_default_setup(struct serial_private *priv,
2110 return setup_port(priv, port, bar, offset, board->reg_shift);
2111 }
2112
2113 +static int pci_pericom_setup(struct serial_private *priv,
2114 + const struct pciserial_board *board,
2115 + struct uart_8250_port *port, int idx)
2116 +{
2117 + unsigned int bar, offset = board->first_offset, maxnr;
2118 +
2119 + bar = FL_GET_BASE(board->flags);
2120 + if (board->flags & FL_BASE_BARS)
2121 + bar += idx;
2122 + else
2123 + offset += idx * board->uart_offset;
2124 +
2125 + if (idx==3)
2126 + offset = 0x38;
2127 +
2128 + maxnr = (pci_resource_len(priv->dev, bar) - board->first_offset) >>
2129 + (board->reg_shift + 3);
2130 +
2131 + if (board->flags & FL_REGION_SZ_CAP && idx >= maxnr)
2132 + return 1;
2133 +
2134 + return setup_port(priv, port, bar, offset, board->reg_shift);
2135 +}
2136 +
2137 static int
2138 ce4100_serial_setup(struct serial_private *priv,
2139 const struct pciserial_board *board,
2140 @@ -2096,6 +2120,16 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
2141 .setup = pci_default_setup,
2142 .exit = pci_plx9050_exit,
2143 },
2144 + /*
2145 + * Pericom (Only 7954 - It have a offset jump for port 4)
2146 + */
2147 + {
2148 + .vendor = PCI_VENDOR_ID_PERICOM,
2149 + .device = PCI_DEVICE_ID_PERICOM_PI7C9X7954,
2150 + .subvendor = PCI_ANY_ID,
2151 + .subdevice = PCI_ANY_ID,
2152 + .setup = pci_pericom_setup,
2153 + },
2154 /*
2155 * PLX
2156 */
2157 @@ -2126,6 +2160,111 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
2158 .setup = pci_default_setup,
2159 .exit = pci_plx9050_exit,
2160 },
2161 + {
2162 + .vendor = PCI_VENDOR_ID_ACCESIO,
2163 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SDB,
2164 + .subvendor = PCI_ANY_ID,
2165 + .subdevice = PCI_ANY_ID,
2166 + .setup = pci_pericom_setup,
2167 + },
2168 + {
2169 + .vendor = PCI_VENDOR_ID_ACCESIO,
2170 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4S,
2171 + .subvendor = PCI_ANY_ID,
2172 + .subdevice = PCI_ANY_ID,
2173 + .setup = pci_pericom_setup,
2174 + },
2175 + {
2176 + .vendor = PCI_VENDOR_ID_ACCESIO,
2177 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4DB,
2178 + .subvendor = PCI_ANY_ID,
2179 + .subdevice = PCI_ANY_ID,
2180 + .setup = pci_pericom_setup,
2181 + },
2182 + {
2183 + .vendor = PCI_VENDOR_ID_ACCESIO,
2184 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM232_4,
2185 + .subvendor = PCI_ANY_ID,
2186 + .subdevice = PCI_ANY_ID,
2187 + .setup = pci_pericom_setup,
2188 + },
2189 + {
2190 + .vendor = PCI_VENDOR_ID_ACCESIO,
2191 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SMDB,
2192 + .subvendor = PCI_ANY_ID,
2193 + .subdevice = PCI_ANY_ID,
2194 + .setup = pci_pericom_setup,
2195 + },
2196 + {
2197 + .vendor = PCI_VENDOR_ID_ACCESIO,
2198 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_COM_4SM,
2199 + .subvendor = PCI_ANY_ID,
2200 + .subdevice = PCI_ANY_ID,
2201 + .setup = pci_pericom_setup,
2202 + },
2203 + {
2204 + .vendor = PCI_VENDOR_ID_ACCESIO,
2205 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM422_4,
2206 + .subvendor = PCI_ANY_ID,
2207 + .subdevice = PCI_ANY_ID,
2208 + .setup = pci_pericom_setup,
2209 + },
2210 + {
2211 + .vendor = PCI_VENDOR_ID_ACCESIO,
2212 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM485_4,
2213 + .subvendor = PCI_ANY_ID,
2214 + .subdevice = PCI_ANY_ID,
2215 + .setup = pci_pericom_setup,
2216 + },
2217 + {
2218 + .vendor = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2219 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM232_4,
2220 + .subvendor = PCI_ANY_ID,
2221 + .subdevice = PCI_ANY_ID,
2222 + .setup = pci_pericom_setup,
2223 + },
2224 + {
2225 + .vendor = PCI_VENDOR_ID_ACCESIO,
2226 + .device = PCI_DEVICE_ID_ACCESIO_MPCIE_ICM232_4,
2227 + .subvendor = PCI_ANY_ID,
2228 + .subdevice = PCI_ANY_ID,
2229 + .setup = pci_pericom_setup,
2230 + },
2231 + {
2232 + .vendor = PCI_VENDOR_ID_ACCESIO,
2233 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM422_4,
2234 + .subvendor = PCI_ANY_ID,
2235 + .subdevice = PCI_ANY_ID,
2236 + .setup = pci_pericom_setup,
2237 + },
2238 + {
2239 + .vendor = PCI_VENDOR_ID_ACCESIO,
2240 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM485_4,
2241 + .subvendor = PCI_ANY_ID,
2242 + .subdevice = PCI_ANY_ID,
2243 + .setup = pci_pericom_setup,
2244 + },
2245 + {
2246 + .vendor = PCI_VENDOR_ID_ACCESIO,
2247 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4,
2248 + .subvendor = PCI_ANY_ID,
2249 + .subdevice = PCI_ANY_ID,
2250 + .setup = pci_pericom_setup,
2251 + },
2252 + {
2253 + .vendor = PCI_VENDOR_ID_ACCESIO,
2254 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SM,
2255 + .subvendor = PCI_ANY_ID,
2256 + .subdevice = PCI_ANY_ID,
2257 + .setup = pci_pericom_setup,
2258 + },
2259 + {
2260 + .vendor = PCI_VENDOR_ID_ACCESIO,
2261 + .device = PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM,
2262 + .subvendor = PCI_ANY_ID,
2263 + .subdevice = PCI_ANY_ID,
2264 + .setup = pci_pericom_setup,
2265 + },
2266 /*
2267 * SBS Technologies, Inc., PMC-OCTALPRO 232
2268 */
2269 @@ -4976,10 +5115,10 @@ static struct pci_device_id serial_pci_tbl[] = {
2270 */
2271 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_2SDB,
2272 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2273 - pbn_pericom_PI7C9X7954 },
2274 + pbn_pericom_PI7C9X7952 },
2275 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_COM_2S,
2276 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2277 - pbn_pericom_PI7C9X7954 },
2278 + pbn_pericom_PI7C9X7952 },
2279 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SDB,
2280 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2281 pbn_pericom_PI7C9X7954 },
2282 @@ -4988,10 +5127,10 @@ static struct pci_device_id serial_pci_tbl[] = {
2283 pbn_pericom_PI7C9X7954 },
2284 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM232_2DB,
2285 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2286 - pbn_pericom_PI7C9X7954 },
2287 + pbn_pericom_PI7C9X7952 },
2288 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_COM232_2,
2289 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2290 - pbn_pericom_PI7C9X7954 },
2291 + pbn_pericom_PI7C9X7952 },
2292 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4DB,
2293 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2294 pbn_pericom_PI7C9X7954 },
2295 @@ -5000,10 +5139,10 @@ static struct pci_device_id serial_pci_tbl[] = {
2296 pbn_pericom_PI7C9X7954 },
2297 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_2SMDB,
2298 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2299 - pbn_pericom_PI7C9X7954 },
2300 + pbn_pericom_PI7C9X7952 },
2301 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_COM_2SM,
2302 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2303 - pbn_pericom_PI7C9X7954 },
2304 + pbn_pericom_PI7C9X7952 },
2305 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SMDB,
2306 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2307 pbn_pericom_PI7C9X7954 },
2308 @@ -5012,13 +5151,13 @@ static struct pci_device_id serial_pci_tbl[] = {
2309 pbn_pericom_PI7C9X7954 },
2310 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_ICM485_1,
2311 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2312 - pbn_pericom_PI7C9X7954 },
2313 + pbn_pericom_PI7C9X7951 },
2314 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_ICM422_2,
2315 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2316 - pbn_pericom_PI7C9X7954 },
2317 + pbn_pericom_PI7C9X7952 },
2318 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_ICM485_2,
2319 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2320 - pbn_pericom_PI7C9X7954 },
2321 + pbn_pericom_PI7C9X7952 },
2322 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_ICM422_4,
2323 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2324 pbn_pericom_PI7C9X7954 },
2325 @@ -5027,16 +5166,16 @@ static struct pci_device_id serial_pci_tbl[] = {
2326 pbn_pericom_PI7C9X7954 },
2327 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM_2S,
2328 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2329 - pbn_pericom_PI7C9X7954 },
2330 + pbn_pericom_PI7C9X7952 },
2331 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4S,
2332 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2333 pbn_pericom_PI7C9X7954 },
2334 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM232_2,
2335 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2336 - pbn_pericom_PI7C9X7954 },
2337 + pbn_pericom_PI7C9X7952 },
2338 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_MPCIE_ICM232_2,
2339 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2340 - pbn_pericom_PI7C9X7954 },
2341 + pbn_pericom_PI7C9X7952 },
2342 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM232_4,
2343 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2344 pbn_pericom_PI7C9X7954 },
2345 @@ -5045,13 +5184,13 @@ static struct pci_device_id serial_pci_tbl[] = {
2346 pbn_pericom_PI7C9X7954 },
2347 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM_2SM,
2348 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2349 - pbn_pericom_PI7C9X7954 },
2350 + pbn_pericom_PI7C9X7952 },
2351 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM422_4,
2352 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2353 - pbn_pericom_PI7C9X7958 },
2354 + pbn_pericom_PI7C9X7954 },
2355 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM485_4,
2356 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2357 - pbn_pericom_PI7C9X7958 },
2358 + pbn_pericom_PI7C9X7954 },
2359 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM422_8,
2360 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2361 pbn_pericom_PI7C9X7958 },
2362 @@ -5060,19 +5199,19 @@ static struct pci_device_id serial_pci_tbl[] = {
2363 pbn_pericom_PI7C9X7958 },
2364 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM232_4,
2365 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2366 - pbn_pericom_PI7C9X7958 },
2367 + pbn_pericom_PI7C9X7954 },
2368 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM232_8,
2369 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2370 pbn_pericom_PI7C9X7958 },
2371 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_4SM,
2372 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2373 - pbn_pericom_PI7C9X7958 },
2374 + pbn_pericom_PI7C9X7954 },
2375 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_COM_8SM,
2376 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2377 pbn_pericom_PI7C9X7958 },
2378 { PCI_VENDOR_ID_ACCESIO, PCI_DEVICE_ID_ACCESIO_PCIE_ICM_4SM,
2379 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2380 - pbn_pericom_PI7C9X7958 },
2381 + pbn_pericom_PI7C9X7954 },
2382 /*
2383 * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
2384 */
2385 diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
2386 index 7333d64f68f2..ffb474c49f0f 100644
2387 --- a/drivers/tty/serial/xilinx_uartps.c
2388 +++ b/drivers/tty/serial/xilinx_uartps.c
2389 @@ -362,7 +362,13 @@ static irqreturn_t cdns_uart_isr(int irq, void *dev_id)
2390 cdns_uart_handle_tx(dev_id);
2391 isrstatus &= ~CDNS_UART_IXR_TXEMPTY;
2392 }
2393 - if (isrstatus & CDNS_UART_IXR_RXMASK)
2394 +
2395 + /*
2396 + * Skip RX processing if RX is disabled as RXEMPTY will never be set
2397 + * as read bytes will not be removed from the FIFO.
2398 + */
2399 + if (isrstatus & CDNS_UART_IXR_RXMASK &&
2400 + !(readl(port->membase + CDNS_UART_CR) & CDNS_UART_CR_RX_DIS))
2401 cdns_uart_handle_rx(dev_id, isrstatus);
2402
2403 spin_unlock(&port->lock);
2404 diff --git a/fs/9p/v9fs_vfs.h b/fs/9p/v9fs_vfs.h
2405 index 5a0db6dec8d1..aaee1e6584e6 100644
2406 --- a/fs/9p/v9fs_vfs.h
2407 +++ b/fs/9p/v9fs_vfs.h
2408 @@ -40,6 +40,9 @@
2409 */
2410 #define P9_LOCK_TIMEOUT (30*HZ)
2411
2412 +/* flags for v9fs_stat2inode() & v9fs_stat2inode_dotl() */
2413 +#define V9FS_STAT2INODE_KEEP_ISIZE 1
2414 +
2415 extern struct file_system_type v9fs_fs_type;
2416 extern const struct address_space_operations v9fs_addr_operations;
2417 extern const struct file_operations v9fs_file_operations;
2418 @@ -61,8 +64,10 @@ int v9fs_init_inode(struct v9fs_session_info *v9ses,
2419 struct inode *inode, umode_t mode, dev_t);
2420 void v9fs_evict_inode(struct inode *inode);
2421 ino_t v9fs_qid2ino(struct p9_qid *qid);
2422 -void v9fs_stat2inode(struct p9_wstat *, struct inode *, struct super_block *);
2423 -void v9fs_stat2inode_dotl(struct p9_stat_dotl *, struct inode *);
2424 +void v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
2425 + struct super_block *sb, unsigned int flags);
2426 +void v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode,
2427 + unsigned int flags);
2428 int v9fs_dir_release(struct inode *inode, struct file *filp);
2429 int v9fs_file_open(struct inode *inode, struct file *file);
2430 void v9fs_inode2stat(struct inode *inode, struct p9_wstat *stat);
2431 @@ -83,4 +88,18 @@ static inline void v9fs_invalidate_inode_attr(struct inode *inode)
2432 }
2433
2434 int v9fs_open_to_dotl_flags(int flags);
2435 +
2436 +static inline void v9fs_i_size_write(struct inode *inode, loff_t i_size)
2437 +{
2438 + /*
2439 + * 32-bit need the lock, concurrent updates could break the
2440 + * sequences and make i_size_read() loop forever.
2441 + * 64-bit updates are atomic and can skip the locking.
2442 + */
2443 + if (sizeof(i_size) > sizeof(long))
2444 + spin_lock(&inode->i_lock);
2445 + i_size_write(inode, i_size);
2446 + if (sizeof(i_size) > sizeof(long))
2447 + spin_unlock(&inode->i_lock);
2448 +}
2449 #endif
2450 diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
2451 index 398a3eddb2df..2f035b15180e 100644
2452 --- a/fs/9p/vfs_file.c
2453 +++ b/fs/9p/vfs_file.c
2454 @@ -442,7 +442,11 @@ v9fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
2455 i_size = i_size_read(inode);
2456 if (iocb->ki_pos > i_size) {
2457 inode_add_bytes(inode, iocb->ki_pos - i_size);
2458 - i_size_write(inode, iocb->ki_pos);
2459 + /*
2460 + * Need to serialize against i_size_write() in
2461 + * v9fs_stat2inode()
2462 + */
2463 + v9fs_i_size_write(inode, iocb->ki_pos);
2464 }
2465 return retval;
2466 }
2467 diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
2468 index f8ab4a66acaf..ddd1eb6aedee 100644
2469 --- a/fs/9p/vfs_inode.c
2470 +++ b/fs/9p/vfs_inode.c
2471 @@ -538,7 +538,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
2472 if (retval)
2473 goto error;
2474
2475 - v9fs_stat2inode(st, inode, sb);
2476 + v9fs_stat2inode(st, inode, sb, 0);
2477 v9fs_cache_inode_get_cookie(inode);
2478 unlock_new_inode(inode);
2479 return inode;
2480 @@ -1078,7 +1078,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
2481 if (IS_ERR(st))
2482 return PTR_ERR(st);
2483
2484 - v9fs_stat2inode(st, d_inode(dentry), dentry->d_sb);
2485 + v9fs_stat2inode(st, d_inode(dentry), dentry->d_sb, 0);
2486 generic_fillattr(d_inode(dentry), stat);
2487
2488 p9stat_free(st);
2489 @@ -1156,12 +1156,13 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
2490 * @stat: Plan 9 metadata (mistat) structure
2491 * @inode: inode to populate
2492 * @sb: superblock of filesystem
2493 + * @flags: control flags (e.g. V9FS_STAT2INODE_KEEP_ISIZE)
2494 *
2495 */
2496
2497 void
2498 v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
2499 - struct super_block *sb)
2500 + struct super_block *sb, unsigned int flags)
2501 {
2502 umode_t mode;
2503 char ext[32];
2504 @@ -1202,10 +1203,11 @@ v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
2505 mode = p9mode2perm(v9ses, stat);
2506 mode |= inode->i_mode & ~S_IALLUGO;
2507 inode->i_mode = mode;
2508 - i_size_write(inode, stat->length);
2509
2510 + if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE))
2511 + v9fs_i_size_write(inode, stat->length);
2512 /* not real number of blocks, but 512 byte ones ... */
2513 - inode->i_blocks = (i_size_read(inode) + 512 - 1) >> 9;
2514 + inode->i_blocks = (stat->length + 512 - 1) >> 9;
2515 v9inode->cache_validity &= ~V9FS_INO_INVALID_ATTR;
2516 }
2517
2518 @@ -1402,9 +1404,9 @@ int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode)
2519 {
2520 int umode;
2521 dev_t rdev;
2522 - loff_t i_size;
2523 struct p9_wstat *st;
2524 struct v9fs_session_info *v9ses;
2525 + unsigned int flags;
2526
2527 v9ses = v9fs_inode2v9ses(inode);
2528 st = p9_client_stat(fid);
2529 @@ -1417,16 +1419,13 @@ int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode)
2530 if ((inode->i_mode & S_IFMT) != (umode & S_IFMT))
2531 goto out;
2532
2533 - spin_lock(&inode->i_lock);
2534 /*
2535 * We don't want to refresh inode->i_size,
2536 * because we may have cached data
2537 */
2538 - i_size = inode->i_size;
2539 - v9fs_stat2inode(st, inode, inode->i_sb);
2540 - if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
2541 - inode->i_size = i_size;
2542 - spin_unlock(&inode->i_lock);
2543 + flags = (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) ?
2544 + V9FS_STAT2INODE_KEEP_ISIZE : 0;
2545 + v9fs_stat2inode(st, inode, inode->i_sb, flags);
2546 out:
2547 p9stat_free(st);
2548 kfree(st);
2549 diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
2550 index c3dd0d42bb3a..425bc1a2b8c1 100644
2551 --- a/fs/9p/vfs_inode_dotl.c
2552 +++ b/fs/9p/vfs_inode_dotl.c
2553 @@ -143,7 +143,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb,
2554 if (retval)
2555 goto error;
2556
2557 - v9fs_stat2inode_dotl(st, inode);
2558 + v9fs_stat2inode_dotl(st, inode, 0);
2559 v9fs_cache_inode_get_cookie(inode);
2560 retval = v9fs_get_acl(inode, fid);
2561 if (retval)
2562 @@ -496,7 +496,7 @@ v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry,
2563 if (IS_ERR(st))
2564 return PTR_ERR(st);
2565
2566 - v9fs_stat2inode_dotl(st, d_inode(dentry));
2567 + v9fs_stat2inode_dotl(st, d_inode(dentry), 0);
2568 generic_fillattr(d_inode(dentry), stat);
2569 /* Change block size to what the server returned */
2570 stat->blksize = st->st_blksize;
2571 @@ -607,11 +607,13 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr)
2572 * v9fs_stat2inode_dotl - populate an inode structure with stat info
2573 * @stat: stat structure
2574 * @inode: inode to populate
2575 + * @flags: ctrl flags (e.g. V9FS_STAT2INODE_KEEP_ISIZE)
2576 *
2577 */
2578
2579 void
2580 -v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode)
2581 +v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode,
2582 + unsigned int flags)
2583 {
2584 umode_t mode;
2585 struct v9fs_inode *v9inode = V9FS_I(inode);
2586 @@ -631,7 +633,8 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode)
2587 mode |= inode->i_mode & ~S_IALLUGO;
2588 inode->i_mode = mode;
2589
2590 - i_size_write(inode, stat->st_size);
2591 + if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE))
2592 + v9fs_i_size_write(inode, stat->st_size);
2593 inode->i_blocks = stat->st_blocks;
2594 } else {
2595 if (stat->st_result_mask & P9_STATS_ATIME) {
2596 @@ -661,8 +664,9 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode)
2597 }
2598 if (stat->st_result_mask & P9_STATS_RDEV)
2599 inode->i_rdev = new_decode_dev(stat->st_rdev);
2600 - if (stat->st_result_mask & P9_STATS_SIZE)
2601 - i_size_write(inode, stat->st_size);
2602 + if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE) &&
2603 + stat->st_result_mask & P9_STATS_SIZE)
2604 + v9fs_i_size_write(inode, stat->st_size);
2605 if (stat->st_result_mask & P9_STATS_BLOCKS)
2606 inode->i_blocks = stat->st_blocks;
2607 }
2608 @@ -928,9 +932,9 @@ v9fs_vfs_get_link_dotl(struct dentry *dentry,
2609
2610 int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode)
2611 {
2612 - loff_t i_size;
2613 struct p9_stat_dotl *st;
2614 struct v9fs_session_info *v9ses;
2615 + unsigned int flags;
2616
2617 v9ses = v9fs_inode2v9ses(inode);
2618 st = p9_client_getattr_dotl(fid, P9_STATS_ALL);
2619 @@ -942,16 +946,13 @@ int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode)
2620 if ((inode->i_mode & S_IFMT) != (st->st_mode & S_IFMT))
2621 goto out;
2622
2623 - spin_lock(&inode->i_lock);
2624 /*
2625 * We don't want to refresh inode->i_size,
2626 * because we may have cached data
2627 */
2628 - i_size = inode->i_size;
2629 - v9fs_stat2inode_dotl(st, inode);
2630 - if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
2631 - inode->i_size = i_size;
2632 - spin_unlock(&inode->i_lock);
2633 + flags = (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) ?
2634 + V9FS_STAT2INODE_KEEP_ISIZE : 0;
2635 + v9fs_stat2inode_dotl(st, inode, flags);
2636 out:
2637 kfree(st);
2638 return 0;
2639 diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c
2640 index de3ed8629196..06ff1a9089e8 100644
2641 --- a/fs/9p/vfs_super.c
2642 +++ b/fs/9p/vfs_super.c
2643 @@ -165,7 +165,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
2644 goto release_sb;
2645 }
2646 d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
2647 - v9fs_stat2inode_dotl(st, d_inode(root));
2648 + v9fs_stat2inode_dotl(st, d_inode(root), 0);
2649 kfree(st);
2650 } else {
2651 struct p9_wstat *st = NULL;
2652 @@ -176,7 +176,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
2653 }
2654
2655 d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
2656 - v9fs_stat2inode(st, d_inode(root), sb);
2657 + v9fs_stat2inode(st, d_inode(root), sb, 0);
2658
2659 p9stat_free(st);
2660 kfree(st);
2661 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
2662 index 5c5c389d8fed..4d901200be13 100644
2663 --- a/fs/btrfs/extent_io.c
2664 +++ b/fs/btrfs/extent_io.c
2665 @@ -3018,11 +3018,11 @@ static int __do_readpage(struct extent_io_tree *tree,
2666 */
2667 if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) &&
2668 prev_em_start && *prev_em_start != (u64)-1 &&
2669 - *prev_em_start != em->orig_start)
2670 + *prev_em_start != em->start)
2671 force_bio_submit = true;
2672
2673 if (prev_em_start)
2674 - *prev_em_start = em->orig_start;
2675 + *prev_em_start = em->start;
2676
2677 free_extent_map(em);
2678 em = NULL;
2679 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
2680 index 5aa2749eaf42..c063ac57c30e 100644
2681 --- a/fs/btrfs/volumes.c
2682 +++ b/fs/btrfs/volumes.c
2683 @@ -6439,10 +6439,10 @@ static int btrfs_check_chunk_valid(struct btrfs_root *root,
2684 }
2685
2686 if ((type & BTRFS_BLOCK_GROUP_RAID10 && sub_stripes != 2) ||
2687 - (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 1) ||
2688 + (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes != 2) ||
2689 (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) ||
2690 (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes < 3) ||
2691 - (type & BTRFS_BLOCK_GROUP_DUP && num_stripes > 2) ||
2692 + (type & BTRFS_BLOCK_GROUP_DUP && num_stripes != 2) ||
2693 ((type & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0 &&
2694 num_stripes != 1)) {
2695 btrfs_err(root->fs_info,
2696 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
2697 index 8ec296308729..1c5099fffaec 100644
2698 --- a/fs/cifs/file.c
2699 +++ b/fs/cifs/file.c
2700 @@ -2797,14 +2797,16 @@ cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
2701 * these pages but not on the region from pos to ppos+len-1.
2702 */
2703 written = cifs_user_writev(iocb, from);
2704 - if (written > 0 && CIFS_CACHE_READ(cinode)) {
2705 + if (CIFS_CACHE_READ(cinode)) {
2706 /*
2707 - * Windows 7 server can delay breaking level2 oplock if a write
2708 - * request comes - break it on the client to prevent reading
2709 - * an old data.
2710 + * We have read level caching and we have just sent a write
2711 + * request to the server thus making data in the cache stale.
2712 + * Zap the cache and set oplock/lease level to NONE to avoid
2713 + * reading stale data from the cache. All subsequent read
2714 + * operations will read new data from the server.
2715 */
2716 cifs_zap_mapping(inode);
2717 - cifs_dbg(FYI, "Set no oplock for inode=%p after a write operation\n",
2718 + cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
2719 inode);
2720 cinode->oplock = 0;
2721 }
2722 diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
2723 index e96a74da756f..244d27bb8fba 100644
2724 --- a/fs/cifs/smb2misc.c
2725 +++ b/fs/cifs/smb2misc.c
2726 @@ -474,7 +474,6 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp,
2727 __u8 lease_state;
2728 struct list_head *tmp;
2729 struct cifsFileInfo *cfile;
2730 - struct TCP_Server_Info *server = tcon->ses->server;
2731 struct cifs_pending_open *open;
2732 struct cifsInodeInfo *cinode;
2733 int ack_req = le32_to_cpu(rsp->Flags &
2734 @@ -494,13 +493,25 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp,
2735 cifs_dbg(FYI, "lease key match, lease break 0x%x\n",
2736 le32_to_cpu(rsp->NewLeaseState));
2737
2738 - server->ops->set_oplock_level(cinode, lease_state, 0, NULL);
2739 -
2740 if (ack_req)
2741 cfile->oplock_break_cancelled = false;
2742 else
2743 cfile->oplock_break_cancelled = true;
2744
2745 + set_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cinode->flags);
2746 +
2747 + /*
2748 + * Set or clear flags depending on the lease state being READ.
2749 + * HANDLE caching flag should be added when the client starts
2750 + * to defer closing remote file handles with HANDLE leases.
2751 + */
2752 + if (lease_state & SMB2_LEASE_READ_CACHING_HE)
2753 + set_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2754 + &cinode->flags);
2755 + else
2756 + clear_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2757 + &cinode->flags);
2758 +
2759 queue_work(cifsoplockd_wq, &cfile->oplock_break);
2760 kfree(lw);
2761 return true;
2762 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
2763 index 2db7968febfe..97d8e2a3df9b 100644
2764 --- a/fs/cifs/smb2ops.c
2765 +++ b/fs/cifs/smb2ops.c
2766 @@ -1376,6 +1376,15 @@ smb2_downgrade_oplock(struct TCP_Server_Info *server,
2767 server->ops->set_oplock_level(cinode, 0, 0, NULL);
2768 }
2769
2770 +static void
2771 +smb21_downgrade_oplock(struct TCP_Server_Info *server,
2772 + struct cifsInodeInfo *cinode, bool set_level2)
2773 +{
2774 + server->ops->set_oplock_level(cinode,
2775 + set_level2 ? SMB2_LEASE_READ_CACHING_HE :
2776 + 0, 0, NULL);
2777 +}
2778 +
2779 static void
2780 smb2_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
2781 unsigned int epoch, bool *purge_cache)
2782 @@ -1681,7 +1690,7 @@ struct smb_version_operations smb21_operations = {
2783 .print_stats = smb2_print_stats,
2784 .is_oplock_break = smb2_is_valid_oplock_break,
2785 .handle_cancelled_mid = smb2_handle_cancelled_mid,
2786 - .downgrade_oplock = smb2_downgrade_oplock,
2787 + .downgrade_oplock = smb21_downgrade_oplock,
2788 .need_neg = smb2_need_neg,
2789 .negotiate = smb2_negotiate,
2790 .negotiate_wsize = smb2_negotiate_wsize,
2791 @@ -1765,7 +1774,7 @@ struct smb_version_operations smb30_operations = {
2792 .dump_share_caps = smb2_dump_share_caps,
2793 .is_oplock_break = smb2_is_valid_oplock_break,
2794 .handle_cancelled_mid = smb2_handle_cancelled_mid,
2795 - .downgrade_oplock = smb2_downgrade_oplock,
2796 + .downgrade_oplock = smb21_downgrade_oplock,
2797 .need_neg = smb2_need_neg,
2798 .negotiate = smb2_negotiate,
2799 .negotiate_wsize = smb2_negotiate_wsize,
2800 @@ -1855,7 +1864,7 @@ struct smb_version_operations smb311_operations = {
2801 .dump_share_caps = smb2_dump_share_caps,
2802 .is_oplock_break = smb2_is_valid_oplock_break,
2803 .handle_cancelled_mid = smb2_handle_cancelled_mid,
2804 - .downgrade_oplock = smb2_downgrade_oplock,
2805 + .downgrade_oplock = smb21_downgrade_oplock,
2806 .need_neg = smb2_need_neg,
2807 .negotiate = smb2_negotiate,
2808 .negotiate_wsize = smb2_negotiate_wsize,
2809 diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
2810 index 108df2e3602c..81be3ba17cbf 100644
2811 --- a/fs/devpts/inode.c
2812 +++ b/fs/devpts/inode.c
2813 @@ -396,6 +396,7 @@ devpts_fill_super(struct super_block *s, void *data, int silent)
2814 s->s_blocksize_bits = 10;
2815 s->s_magic = DEVPTS_SUPER_MAGIC;
2816 s->s_op = &devpts_sops;
2817 + s->s_d_op = &simple_dentry_operations;
2818 s->s_time_gran = 1;
2819
2820 error = -ENOMEM;
2821 diff --git a/fs/ext2/super.c b/fs/ext2/super.c
2822 index 6cb042b53b5b..6fcb29b393d3 100644
2823 --- a/fs/ext2/super.c
2824 +++ b/fs/ext2/super.c
2825 @@ -724,7 +724,8 @@ static loff_t ext2_max_size(int bits)
2826 {
2827 loff_t res = EXT2_NDIR_BLOCKS;
2828 int meta_blocks;
2829 - loff_t upper_limit;
2830 + unsigned int upper_limit;
2831 + unsigned int ppb = 1 << (bits-2);
2832
2833 /* This is calculated to be the largest file size for a
2834 * dense, file such that the total number of
2835 @@ -738,24 +739,34 @@ static loff_t ext2_max_size(int bits)
2836 /* total blocks in file system block size */
2837 upper_limit >>= (bits - 9);
2838
2839 + /* Compute how many blocks we can address by block tree */
2840 + res += 1LL << (bits-2);
2841 + res += 1LL << (2*(bits-2));
2842 + res += 1LL << (3*(bits-2));
2843 + /* Does block tree limit file size? */
2844 + if (res < upper_limit)
2845 + goto check_lfs;
2846
2847 + res = upper_limit;
2848 + /* How many metadata blocks are needed for addressing upper_limit? */
2849 + upper_limit -= EXT2_NDIR_BLOCKS;
2850 /* indirect blocks */
2851 meta_blocks = 1;
2852 + upper_limit -= ppb;
2853 /* double indirect blocks */
2854 - meta_blocks += 1 + (1LL << (bits-2));
2855 - /* tripple indirect blocks */
2856 - meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
2857 -
2858 - upper_limit -= meta_blocks;
2859 - upper_limit <<= bits;
2860 -
2861 - res += 1LL << (bits-2);
2862 - res += 1LL << (2*(bits-2));
2863 - res += 1LL << (3*(bits-2));
2864 + if (upper_limit < ppb * ppb) {
2865 + meta_blocks += 1 + DIV_ROUND_UP(upper_limit, ppb);
2866 + res -= meta_blocks;
2867 + goto check_lfs;
2868 + }
2869 + meta_blocks += 1 + ppb;
2870 + upper_limit -= ppb * ppb;
2871 + /* tripple indirect blocks for the rest */
2872 + meta_blocks += 1 + DIV_ROUND_UP(upper_limit, ppb) +
2873 + DIV_ROUND_UP(upper_limit, ppb*ppb);
2874 + res -= meta_blocks;
2875 +check_lfs:
2876 res <<= bits;
2877 - if (res > upper_limit)
2878 - res = upper_limit;
2879 -
2880 if (res > MAX_LFS_FILESIZE)
2881 res = MAX_LFS_FILESIZE;
2882
2883 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
2884 index 58e6b8a03e90..67b359629a66 100644
2885 --- a/fs/ext4/resize.c
2886 +++ b/fs/ext4/resize.c
2887 @@ -1928,7 +1928,8 @@ retry:
2888 le16_to_cpu(es->s_reserved_gdt_blocks);
2889 n_group = n_desc_blocks * EXT4_DESC_PER_BLOCK(sb);
2890 n_blocks_count = (ext4_fsblk_t)n_group *
2891 - EXT4_BLOCKS_PER_GROUP(sb);
2892 + EXT4_BLOCKS_PER_GROUP(sb) +
2893 + le32_to_cpu(es->s_first_data_block);
2894 n_group--; /* set to last group number */
2895 }
2896
2897 diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
2898 index b320c1ba7fdc..799f96c67211 100644
2899 --- a/fs/jbd2/transaction.c
2900 +++ b/fs/jbd2/transaction.c
2901 @@ -1211,11 +1211,12 @@ int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh)
2902 struct journal_head *jh;
2903 char *committed_data = NULL;
2904
2905 - JBUFFER_TRACE(jh, "entry");
2906 if (jbd2_write_access_granted(handle, bh, true))
2907 return 0;
2908
2909 jh = jbd2_journal_add_journal_head(bh);
2910 + JBUFFER_TRACE(jh, "entry");
2911 +
2912 /*
2913 * Do this first --- it can drop the journal lock, so we want to
2914 * make sure that obtaining the committed_data is done
2915 @@ -1326,15 +1327,17 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
2916
2917 if (is_handle_aborted(handle))
2918 return -EROFS;
2919 - if (!buffer_jbd(bh)) {
2920 - ret = -EUCLEAN;
2921 - goto out;
2922 - }
2923 + if (!buffer_jbd(bh))
2924 + return -EUCLEAN;
2925 +
2926 /*
2927 * We don't grab jh reference here since the buffer must be part
2928 * of the running transaction.
2929 */
2930 jh = bh2jh(bh);
2931 + jbd_debug(5, "journal_head %p\n", jh);
2932 + JBUFFER_TRACE(jh, "entry");
2933 +
2934 /*
2935 * This and the following assertions are unreliable since we may see jh
2936 * in inconsistent state unless we grab bh_state lock. But this is
2937 @@ -1368,9 +1371,6 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
2938 }
2939
2940 journal = transaction->t_journal;
2941 - jbd_debug(5, "journal_head %p\n", jh);
2942 - JBUFFER_TRACE(jh, "entry");
2943 -
2944 jbd_lock_bh_state(bh);
2945
2946 if (jh->b_modified == 0) {
2947 @@ -1568,14 +1568,21 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
2948 /* However, if the buffer is still owned by a prior
2949 * (committing) transaction, we can't drop it yet... */
2950 JBUFFER_TRACE(jh, "belongs to older transaction");
2951 - /* ... but we CAN drop it from the new transaction if we
2952 - * have also modified it since the original commit. */
2953 + /* ... but we CAN drop it from the new transaction through
2954 + * marking the buffer as freed and set j_next_transaction to
2955 + * the new transaction, so that not only the commit code
2956 + * knows it should clear dirty bits when it is done with the
2957 + * buffer, but also the buffer can be checkpointed only
2958 + * after the new transaction commits. */
2959
2960 - if (jh->b_next_transaction) {
2961 - J_ASSERT(jh->b_next_transaction == transaction);
2962 + set_buffer_freed(bh);
2963 +
2964 + if (!jh->b_next_transaction) {
2965 spin_lock(&journal->j_list_lock);
2966 - jh->b_next_transaction = NULL;
2967 + jh->b_next_transaction = transaction;
2968 spin_unlock(&journal->j_list_lock);
2969 + } else {
2970 + J_ASSERT(jh->b_next_transaction == transaction);
2971
2972 /*
2973 * only drop a reference if this transaction modified
2974 diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
2975 index 892c88542ebd..fad4d5188aaf 100644
2976 --- a/fs/nfs/pagelist.c
2977 +++ b/fs/nfs/pagelist.c
2978 @@ -975,6 +975,17 @@ static void nfs_pageio_doio(struct nfs_pageio_descriptor *desc)
2979 }
2980 }
2981
2982 +static void
2983 +nfs_pageio_cleanup_request(struct nfs_pageio_descriptor *desc,
2984 + struct nfs_page *req)
2985 +{
2986 + LIST_HEAD(head);
2987 +
2988 + nfs_list_remove_request(req);
2989 + nfs_list_add_request(req, &head);
2990 + desc->pg_completion_ops->error_cleanup(&head);
2991 +}
2992 +
2993 /**
2994 * nfs_pageio_add_request - Attempt to coalesce a request into a page list.
2995 * @desc: destination io descriptor
2996 @@ -1012,10 +1023,8 @@ static int __nfs_pageio_add_request(struct nfs_pageio_descriptor *desc,
2997 nfs_page_group_unlock(req);
2998 desc->pg_moreio = 1;
2999 nfs_pageio_doio(desc);
3000 - if (desc->pg_error < 0)
3001 - return 0;
3002 - if (mirror->pg_recoalesce)
3003 - return 0;
3004 + if (desc->pg_error < 0 || mirror->pg_recoalesce)
3005 + goto out_cleanup_subreq;
3006 /* retry add_request for this subreq */
3007 nfs_page_group_lock(req, false);
3008 continue;
3009 @@ -1048,6 +1057,10 @@ err_ptr:
3010 desc->pg_error = PTR_ERR(subreq);
3011 nfs_page_group_unlock(req);
3012 return 0;
3013 +out_cleanup_subreq:
3014 + if (req != subreq)
3015 + nfs_pageio_cleanup_request(desc, subreq);
3016 + return 0;
3017 }
3018
3019 static int nfs_do_recoalesce(struct nfs_pageio_descriptor *desc)
3020 @@ -1066,7 +1079,6 @@ static int nfs_do_recoalesce(struct nfs_pageio_descriptor *desc)
3021 struct nfs_page *req;
3022
3023 req = list_first_entry(&head, struct nfs_page, wb_list);
3024 - nfs_list_remove_request(req);
3025 if (__nfs_pageio_add_request(desc, req))
3026 continue;
3027 if (desc->pg_error < 0) {
3028 @@ -1141,11 +1153,14 @@ int nfs_pageio_add_request(struct nfs_pageio_descriptor *desc,
3029 if (nfs_pgio_has_mirroring(desc))
3030 desc->pg_mirror_idx = midx;
3031 if (!nfs_pageio_add_request_mirror(desc, dupreq))
3032 - goto out_failed;
3033 + goto out_cleanup_subreq;
3034 }
3035
3036 return 1;
3037
3038 +out_cleanup_subreq:
3039 + if (req != dupreq)
3040 + nfs_pageio_cleanup_request(desc, dupreq);
3041 out_failed:
3042 /*
3043 * We might have failed before sending any reqs over wire.
3044 @@ -1185,7 +1200,7 @@ static void nfs_pageio_complete_mirror(struct nfs_pageio_descriptor *desc,
3045 desc->pg_mirror_idx = mirror_idx;
3046 for (;;) {
3047 nfs_pageio_doio(desc);
3048 - if (!mirror->pg_recoalesce)
3049 + if (desc->pg_error < 0 || !mirror->pg_recoalesce)
3050 break;
3051 if (!nfs_do_recoalesce(desc))
3052 break;
3053 diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
3054 index d818e4ffd79f..00b472fe77c1 100644
3055 --- a/fs/nfsd/nfs3proc.c
3056 +++ b/fs/nfsd/nfs3proc.c
3057 @@ -431,8 +431,19 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
3058 &resp->common, nfs3svc_encode_entry);
3059 memcpy(resp->verf, argp->verf, 8);
3060 resp->count = resp->buffer - argp->buffer;
3061 - if (resp->offset)
3062 - xdr_encode_hyper(resp->offset, argp->cookie);
3063 + if (resp->offset) {
3064 + loff_t offset = argp->cookie;
3065 +
3066 + if (unlikely(resp->offset1)) {
3067 + /* we ended up with offset on a page boundary */
3068 + *resp->offset = htonl(offset >> 32);
3069 + *resp->offset1 = htonl(offset & 0xffffffff);
3070 + resp->offset1 = NULL;
3071 + } else {
3072 + xdr_encode_hyper(resp->offset, offset);
3073 + }
3074 + resp->offset = NULL;
3075 + }
3076
3077 RETURN_STATUS(nfserr);
3078 }
3079 @@ -500,6 +511,7 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
3080 } else {
3081 xdr_encode_hyper(resp->offset, offset);
3082 }
3083 + resp->offset = NULL;
3084 }
3085
3086 RETURN_STATUS(nfserr);
3087 diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
3088 index 452334694a5d..7e50248ca432 100644
3089 --- a/fs/nfsd/nfs3xdr.c
3090 +++ b/fs/nfsd/nfs3xdr.c
3091 @@ -899,6 +899,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
3092 } else {
3093 xdr_encode_hyper(cd->offset, offset64);
3094 }
3095 + cd->offset = NULL;
3096 }
3097
3098 /*
3099 diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
3100 index 797a155c9a67..f704f90db36c 100644
3101 --- a/fs/nfsd/nfsctl.c
3102 +++ b/fs/nfsd/nfsctl.c
3103 @@ -1103,7 +1103,7 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size)
3104 case 'Y':
3105 case 'y':
3106 case '1':
3107 - if (nn->nfsd_serv)
3108 + if (!nn->nfsd_serv)
3109 return -EBUSY;
3110 nfsd4_end_grace(nn);
3111 break;
3112 diff --git a/fs/pipe.c b/fs/pipe.c
3113 index 34345535f63d..388e09a689de 100644
3114 --- a/fs/pipe.c
3115 +++ b/fs/pipe.c
3116 @@ -238,6 +238,14 @@ static const struct pipe_buf_operations anon_pipe_buf_ops = {
3117 .get = generic_pipe_buf_get,
3118 };
3119
3120 +static const struct pipe_buf_operations anon_pipe_buf_nomerge_ops = {
3121 + .can_merge = 0,
3122 + .confirm = generic_pipe_buf_confirm,
3123 + .release = anon_pipe_buf_release,
3124 + .steal = anon_pipe_buf_steal,
3125 + .get = generic_pipe_buf_get,
3126 +};
3127 +
3128 static const struct pipe_buf_operations packet_pipe_buf_ops = {
3129 .can_merge = 0,
3130 .confirm = generic_pipe_buf_confirm,
3131 @@ -246,6 +254,12 @@ static const struct pipe_buf_operations packet_pipe_buf_ops = {
3132 .get = generic_pipe_buf_get,
3133 };
3134
3135 +void pipe_buf_mark_unmergeable(struct pipe_buffer *buf)
3136 +{
3137 + if (buf->ops == &anon_pipe_buf_ops)
3138 + buf->ops = &anon_pipe_buf_nomerge_ops;
3139 +}
3140 +
3141 static ssize_t
3142 pipe_read(struct kiocb *iocb, struct iov_iter *to)
3143 {
3144 diff --git a/fs/splice.c b/fs/splice.c
3145 index 8dd79ecfd383..01983bea760c 100644
3146 --- a/fs/splice.c
3147 +++ b/fs/splice.c
3148 @@ -1594,6 +1594,8 @@ retry:
3149 */
3150 obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
3151
3152 + pipe_buf_mark_unmergeable(obuf);
3153 +
3154 obuf->len = len;
3155 opipe->nrbufs++;
3156 ibuf->offset += obuf->len;
3157 @@ -1668,6 +1670,8 @@ static int link_pipe(struct pipe_inode_info *ipipe,
3158 */
3159 obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
3160
3161 + pipe_buf_mark_unmergeable(obuf);
3162 +
3163 if (obuf->len > len)
3164 obuf->len = len;
3165
3166 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
3167 index ef7962e84444..9661bb2fbe22 100644
3168 --- a/include/linux/device-mapper.h
3169 +++ b/include/linux/device-mapper.h
3170 @@ -627,7 +627,7 @@ extern struct ratelimit_state dm_ratelimit_state;
3171 */
3172 #define dm_target_offset(ti, sector) ((sector) - (ti)->begin)
3173
3174 -static inline sector_t to_sector(unsigned long n)
3175 +static inline sector_t to_sector(unsigned long long n)
3176 {
3177 return (n >> SECTOR_SHIFT);
3178 }
3179 diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h
3180 index e7497c9dde7f..4f7129389855 100644
3181 --- a/include/linux/pipe_fs_i.h
3182 +++ b/include/linux/pipe_fs_i.h
3183 @@ -182,6 +182,7 @@ void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
3184 int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);
3185 int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);
3186 void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *);
3187 +void pipe_buf_mark_unmergeable(struct pipe_buffer *buf);
3188
3189 extern const struct pipe_buf_operations nosteal_pipe_buf_ops;
3190
3191 diff --git a/include/linux/property.h b/include/linux/property.h
3192 index 459337fb44d0..d5c7ebda4113 100644
3193 --- a/include/linux/property.h
3194 +++ b/include/linux/property.h
3195 @@ -233,7 +233,7 @@ struct property_entry {
3196 #define PROPERTY_ENTRY_STRING(_name_, _val_) \
3197 (struct property_entry) { \
3198 .name = _name_, \
3199 - .length = sizeof(_val_), \
3200 + .length = sizeof(const char *), \
3201 .is_string = true, \
3202 { .value = { .str = _val_ } }, \
3203 }
3204 diff --git a/include/net/phonet/pep.h b/include/net/phonet/pep.h
3205 index b669fe6dbc3b..98f31c7ea23d 100644
3206 --- a/include/net/phonet/pep.h
3207 +++ b/include/net/phonet/pep.h
3208 @@ -63,10 +63,11 @@ struct pnpipehdr {
3209 u8 state_after_reset; /* reset request */
3210 u8 error_code; /* any response */
3211 u8 pep_type; /* status indication */
3212 - u8 data[1];
3213 + u8 data0; /* anything else */
3214 };
3215 + u8 data[];
3216 };
3217 -#define other_pep_type data[1]
3218 +#define other_pep_type data[0]
3219
3220 static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
3221 {
3222 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
3223 index d1a02877a42c..d0b113de3316 100644
3224 --- a/kernel/rcu/tree.c
3225 +++ b/kernel/rcu/tree.c
3226 @@ -1718,15 +1718,23 @@ static int rcu_future_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp)
3227 }
3228
3229 /*
3230 - * Awaken the grace-period kthread for the specified flavor of RCU.
3231 - * Don't do a self-awaken, and don't bother awakening when there is
3232 - * nothing for the grace-period kthread to do (as in several CPUs
3233 - * raced to awaken, and we lost), and finally don't try to awaken
3234 - * a kthread that has not yet been created.
3235 + * Awaken the grace-period kthread. Don't do a self-awaken (unless in
3236 + * an interrupt or softirq handler), and don't bother awakening when there
3237 + * is nothing for the grace-period kthread to do (as in several CPUs raced
3238 + * to awaken, and we lost), and finally don't try to awaken a kthread that
3239 + * has not yet been created. If all those checks are passed, track some
3240 + * debug information and awaken.
3241 + *
3242 + * So why do the self-wakeup when in an interrupt or softirq handler
3243 + * in the grace-period kthread's context? Because the kthread might have
3244 + * been interrupted just as it was going to sleep, and just after the final
3245 + * pre-sleep check of the awaken condition. In this case, a wakeup really
3246 + * is required, and is therefore supplied.
3247 */
3248 static void rcu_gp_kthread_wake(struct rcu_state *rsp)
3249 {
3250 - if (current == rsp->gp_kthread ||
3251 + if ((current == rsp->gp_kthread &&
3252 + !in_interrupt() && !in_serving_softirq()) ||
3253 !READ_ONCE(rsp->gp_flags) ||
3254 !rsp->gp_kthread)
3255 return;
3256 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
3257 index 93c7b02279b9..efd340a510a9 100644
3258 --- a/kernel/sysctl.c
3259 +++ b/kernel/sysctl.c
3260 @@ -2377,7 +2377,16 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
3261 {
3262 struct do_proc_dointvec_minmax_conv_param *param = data;
3263 if (write) {
3264 - int val = *negp ? -*lvalp : *lvalp;
3265 + int val;
3266 + if (*negp) {
3267 + if (*lvalp > (unsigned long) INT_MAX + 1)
3268 + return -EINVAL;
3269 + val = -*lvalp;
3270 + } else {
3271 + if (*lvalp > (unsigned long) INT_MAX)
3272 + return -EINVAL;
3273 + val = *lvalp;
3274 + }
3275 if ((param->min && *param->min > val) ||
3276 (param->max && *param->max < val))
3277 return -EINVAL;
3278 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
3279 index 6786c507f1f9..f18dedf9195e 100644
3280 --- a/kernel/trace/trace.c
3281 +++ b/kernel/trace/trace.c
3282 @@ -5057,7 +5057,6 @@ out:
3283 return ret;
3284
3285 fail:
3286 - kfree(iter->trace);
3287 kfree(iter);
3288 __trace_array_put(tr);
3289 mutex_unlock(&trace_types_lock);
3290 diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
3291 index 0664044ade06..766e5ccad60a 100644
3292 --- a/kernel/trace/trace_events_hist.c
3293 +++ b/kernel/trace/trace_events_hist.c
3294 @@ -871,9 +871,10 @@ static inline void add_to_key(char *compound_key, void *key,
3295 /* ensure NULL-termination */
3296 if (size > key_field->size - 1)
3297 size = key_field->size - 1;
3298 - }
3299
3300 - memcpy(compound_key + key_field->offset, key, size);
3301 + strncpy(compound_key + key_field->offset, (char *)key, size);
3302 + } else
3303 + memcpy(compound_key + key_field->offset, key, size);
3304 }
3305
3306 static void event_hist_trigger(struct event_trigger_data *data, void *rec)
3307 diff --git a/lib/assoc_array.c b/lib/assoc_array.c
3308 index 5cd093589c5a..3b46c5433b7a 100644
3309 --- a/lib/assoc_array.c
3310 +++ b/lib/assoc_array.c
3311 @@ -781,9 +781,11 @@ all_leaves_cluster_together:
3312 new_s0->index_key[i] =
3313 ops->get_key_chunk(index_key, i * ASSOC_ARRAY_KEY_CHUNK_SIZE);
3314
3315 - blank = ULONG_MAX << (level & ASSOC_ARRAY_KEY_CHUNK_MASK);
3316 - pr_devel("blank off [%zu] %d: %lx\n", keylen - 1, level, blank);
3317 - new_s0->index_key[keylen - 1] &= ~blank;
3318 + if (level & ASSOC_ARRAY_KEY_CHUNK_MASK) {
3319 + blank = ULONG_MAX << (level & ASSOC_ARRAY_KEY_CHUNK_MASK);
3320 + pr_devel("blank off [%zu] %d: %lx\n", keylen - 1, level, blank);
3321 + new_s0->index_key[keylen - 1] &= ~blank;
3322 + }
3323
3324 /* This now reduces to a node splitting exercise for which we'll need
3325 * to regenerate the disparity table.
3326 diff --git a/mm/gup.c b/mm/gup.c
3327 index d71da7216c6e..99c2f10188c0 100644
3328 --- a/mm/gup.c
3329 +++ b/mm/gup.c
3330 @@ -1423,7 +1423,8 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,
3331 if (pmd_none(pmd))
3332 return 0;
3333
3334 - if (unlikely(pmd_trans_huge(pmd) || pmd_huge(pmd))) {
3335 + if (unlikely(pmd_trans_huge(pmd) || pmd_huge(pmd) ||
3336 + pmd_devmap(pmd))) {
3337 /*
3338 * NUMA hinting faults need to be handled in the GUP
3339 * slowpath for accounting purposes and so that they
3340 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
3341 index 4f1f5fd12042..d6524dce43b2 100644
3342 --- a/mm/memory-failure.c
3343 +++ b/mm/memory-failure.c
3344 @@ -1705,19 +1705,17 @@ static int soft_offline_in_use_page(struct page *page, int flags)
3345 struct page *hpage = compound_head(page);
3346
3347 if (!PageHuge(page) && PageTransHuge(hpage)) {
3348 - lock_page(hpage);
3349 - if (!PageAnon(hpage) || unlikely(split_huge_page(hpage))) {
3350 - unlock_page(hpage);
3351 - if (!PageAnon(hpage))
3352 + lock_page(page);
3353 + if (!PageAnon(page) || unlikely(split_huge_page(page))) {
3354 + unlock_page(page);
3355 + if (!PageAnon(page))
3356 pr_info("soft offline: %#lx: non anonymous thp\n", page_to_pfn(page));
3357 else
3358 pr_info("soft offline: %#lx: thp split failed\n", page_to_pfn(page));
3359 - put_hwpoison_page(hpage);
3360 + put_hwpoison_page(page);
3361 return -EBUSY;
3362 }
3363 - unlock_page(hpage);
3364 - get_hwpoison_page(page);
3365 - put_hwpoison_page(hpage);
3366 + unlock_page(page);
3367 }
3368
3369 if (PageHuge(page))
3370 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
3371 index 3af727d95c17..05f141e39ac1 100644
3372 --- a/mm/page_alloc.c
3373 +++ b/mm/page_alloc.c
3374 @@ -3955,11 +3955,11 @@ refill:
3375 /* Even if we own the page, we do not use atomic_set().
3376 * This would break get_page_unless_zero() users.
3377 */
3378 - page_ref_add(page, size - 1);
3379 + page_ref_add(page, size);
3380
3381 /* reset page count bias and offset to start of new frag */
3382 nc->pfmemalloc = page_is_pfmemalloc(page);
3383 - nc->pagecnt_bias = size;
3384 + nc->pagecnt_bias = size + 1;
3385 nc->offset = size;
3386 }
3387
3388 @@ -3975,10 +3975,10 @@ refill:
3389 size = nc->size;
3390 #endif
3391 /* OK, page count is 0, we can safely set it */
3392 - set_page_count(page, size);
3393 + set_page_count(page, size + 1);
3394
3395 /* reset page count bias and offset to start of new frag */
3396 - nc->pagecnt_bias = size;
3397 + nc->pagecnt_bias = size + 1;
3398 offset = size - fragsz;
3399 }
3400
3401 diff --git a/mm/shmem.c b/mm/shmem.c
3402 index 9b17bd4cbc5e..944242491059 100644
3403 --- a/mm/shmem.c
3404 +++ b/mm/shmem.c
3405 @@ -2896,16 +2896,20 @@ static int shmem_create(struct inode *dir, struct dentry *dentry, umode_t mode,
3406 static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
3407 {
3408 struct inode *inode = d_inode(old_dentry);
3409 - int ret;
3410 + int ret = 0;
3411
3412 /*
3413 * No ordinary (disk based) filesystem counts links as inodes;
3414 * but each new link needs a new dentry, pinning lowmem, and
3415 * tmpfs dentries cannot be pruned until they are unlinked.
3416 + * But if an O_TMPFILE file is linked into the tmpfs, the
3417 + * first link must skip that, to get the accounting right.
3418 */
3419 - ret = shmem_reserve_inode(inode->i_sb);
3420 - if (ret)
3421 - goto out;
3422 + if (inode->i_nlink) {
3423 + ret = shmem_reserve_inode(inode->i_sb);
3424 + if (ret)
3425 + goto out;
3426 + }
3427
3428 dir->i_size += BOGO_DIRENT_SIZE;
3429 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
3430 diff --git a/mm/vmalloc.c b/mm/vmalloc.c
3431 index fa598162dbf0..e6aa073f01df 100644
3432 --- a/mm/vmalloc.c
3433 +++ b/mm/vmalloc.c
3434 @@ -2191,7 +2191,7 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
3435 if (!(area->flags & VM_USERMAP))
3436 return -EINVAL;
3437
3438 - if (kaddr + size > area->addr + area->size)
3439 + if (kaddr + size > area->addr + get_vm_area_size(area))
3440 return -EINVAL;
3441
3442 do {
3443 diff --git a/net/9p/client.c b/net/9p/client.c
3444 index 142afe70edb9..f1517ca8aba3 100644
3445 --- a/net/9p/client.c
3446 +++ b/net/9p/client.c
3447 @@ -1058,7 +1058,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
3448 p9_debug(P9_DEBUG_ERROR,
3449 "Please specify a msize of at least 4k\n");
3450 err = -EINVAL;
3451 - goto free_client;
3452 + goto close_trans;
3453 }
3454
3455 err = p9_client_version(clnt);
3456 diff --git a/net/phonet/pep.c b/net/phonet/pep.c
3457 index 850a86cde0b3..f6aa532bcbf6 100644
3458 --- a/net/phonet/pep.c
3459 +++ b/net/phonet/pep.c
3460 @@ -131,7 +131,7 @@ static int pep_indicate(struct sock *sk, u8 id, u8 code,
3461 ph->utid = 0;
3462 ph->message_id = id;
3463 ph->pipe_handle = pn->pipe_handle;
3464 - ph->data[0] = code;
3465 + ph->error_code = code;
3466 return pn_skb_send(sk, skb, NULL);
3467 }
3468
3469 @@ -152,7 +152,7 @@ static int pipe_handler_request(struct sock *sk, u8 id, u8 code,
3470 ph->utid = id; /* whatever */
3471 ph->message_id = id;
3472 ph->pipe_handle = pn->pipe_handle;
3473 - ph->data[0] = code;
3474 + ph->error_code = code;
3475 return pn_skb_send(sk, skb, NULL);
3476 }
3477
3478 @@ -207,7 +207,7 @@ static int pep_ctrlreq_error(struct sock *sk, struct sk_buff *oskb, u8 code,
3479 struct pnpipehdr *ph;
3480 struct sockaddr_pn dst;
3481 u8 data[4] = {
3482 - oph->data[0], /* PEP type */
3483 + oph->pep_type, /* PEP type */
3484 code, /* error code, at an unusual offset */
3485 PAD, PAD,
3486 };
3487 @@ -220,7 +220,7 @@ static int pep_ctrlreq_error(struct sock *sk, struct sk_buff *oskb, u8 code,
3488 ph->utid = oph->utid;
3489 ph->message_id = PNS_PEP_CTRL_RESP;
3490 ph->pipe_handle = oph->pipe_handle;
3491 - ph->data[0] = oph->data[1]; /* CTRL id */
3492 + ph->data0 = oph->data[0]; /* CTRL id */
3493
3494 pn_skb_get_src_sockaddr(oskb, &dst);
3495 return pn_skb_send(sk, skb, &dst);
3496 @@ -271,17 +271,17 @@ static int pipe_rcv_status(struct sock *sk, struct sk_buff *skb)
3497 return -EINVAL;
3498
3499 hdr = pnp_hdr(skb);
3500 - if (hdr->data[0] != PN_PEP_TYPE_COMMON) {
3501 + if (hdr->pep_type != PN_PEP_TYPE_COMMON) {
3502 net_dbg_ratelimited("Phonet unknown PEP type: %u\n",
3503 - (unsigned int)hdr->data[0]);
3504 + (unsigned int)hdr->pep_type);
3505 return -EOPNOTSUPP;
3506 }
3507
3508 - switch (hdr->data[1]) {
3509 + switch (hdr->data[0]) {
3510 case PN_PEP_IND_FLOW_CONTROL:
3511 switch (pn->tx_fc) {
3512 case PN_LEGACY_FLOW_CONTROL:
3513 - switch (hdr->data[4]) {
3514 + switch (hdr->data[3]) {
3515 case PEP_IND_BUSY:
3516 atomic_set(&pn->tx_credits, 0);
3517 break;
3518 @@ -291,7 +291,7 @@ static int pipe_rcv_status(struct sock *sk, struct sk_buff *skb)
3519 }
3520 break;
3521 case PN_ONE_CREDIT_FLOW_CONTROL:
3522 - if (hdr->data[4] == PEP_IND_READY)
3523 + if (hdr->data[3] == PEP_IND_READY)
3524 atomic_set(&pn->tx_credits, wake = 1);
3525 break;
3526 }
3527 @@ -300,12 +300,12 @@ static int pipe_rcv_status(struct sock *sk, struct sk_buff *skb)
3528 case PN_PEP_IND_ID_MCFC_GRANT_CREDITS:
3529 if (pn->tx_fc != PN_MULTI_CREDIT_FLOW_CONTROL)
3530 break;
3531 - atomic_add(wake = hdr->data[4], &pn->tx_credits);
3532 + atomic_add(wake = hdr->data[3], &pn->tx_credits);
3533 break;
3534
3535 default:
3536 net_dbg_ratelimited("Phonet unknown PEP indication: %u\n",
3537 - (unsigned int)hdr->data[1]);
3538 + (unsigned int)hdr->data[0]);
3539 return -EOPNOTSUPP;
3540 }
3541 if (wake)
3542 @@ -317,7 +317,7 @@ static int pipe_rcv_created(struct sock *sk, struct sk_buff *skb)
3543 {
3544 struct pep_sock *pn = pep_sk(sk);
3545 struct pnpipehdr *hdr = pnp_hdr(skb);
3546 - u8 n_sb = hdr->data[0];
3547 + u8 n_sb = hdr->data0;
3548
3549 pn->rx_fc = pn->tx_fc = PN_LEGACY_FLOW_CONTROL;
3550 __skb_pull(skb, sizeof(*hdr));
3551 @@ -505,7 +505,7 @@ static int pep_connresp_rcv(struct sock *sk, struct sk_buff *skb)
3552 return -ECONNREFUSED;
3553
3554 /* Parse sub-blocks */
3555 - n_sb = hdr->data[4];
3556 + n_sb = hdr->data[3];
3557 while (n_sb > 0) {
3558 u8 type, buf[6], len = sizeof(buf);
3559 const u8 *data = pep_get_sb(skb, &type, &len, buf);
3560 @@ -738,7 +738,7 @@ static int pipe_do_remove(struct sock *sk)
3561 ph->utid = 0;
3562 ph->message_id = PNS_PIPE_REMOVE_REQ;
3563 ph->pipe_handle = pn->pipe_handle;
3564 - ph->data[0] = PAD;
3565 + ph->data0 = PAD;
3566 return pn_skb_send(sk, skb, NULL);
3567 }
3568
3569 @@ -815,7 +815,7 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp)
3570 peer_type = hdr->other_pep_type << 8;
3571
3572 /* Parse sub-blocks (options) */
3573 - n_sb = hdr->data[4];
3574 + n_sb = hdr->data[3];
3575 while (n_sb > 0) {
3576 u8 type, buf[1], len = sizeof(buf);
3577 const u8 *data = pep_get_sb(skb, &type, &len, buf);
3578 @@ -1106,7 +1106,7 @@ static int pipe_skb_send(struct sock *sk, struct sk_buff *skb)
3579 ph->utid = 0;
3580 if (pn->aligned) {
3581 ph->message_id = PNS_PIPE_ALIGNED_DATA;
3582 - ph->data[0] = 0; /* padding */
3583 + ph->data0 = 0; /* padding */
3584 } else
3585 ph->message_id = PNS_PIPE_DATA;
3586 ph->pipe_handle = pn->pipe_handle;
3587 diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
3588 index 3ef174531344..23ab0d169c11 100644
3589 --- a/sound/soc/fsl/fsl_esai.c
3590 +++ b/sound/soc/fsl/fsl_esai.c
3591 @@ -396,7 +396,8 @@ static int fsl_esai_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
3592 break;
3593 case SND_SOC_DAIFMT_RIGHT_J:
3594 /* Data on rising edge of bclk, frame high, right aligned */
3595 - xccr |= ESAI_xCCR_xCKP | ESAI_xCCR_xHCKP | ESAI_xCR_xWA;
3596 + xccr |= ESAI_xCCR_xCKP | ESAI_xCCR_xHCKP;
3597 + xcr |= ESAI_xCR_xWA;
3598 break;
3599 case SND_SOC_DAIFMT_DSP_A:
3600 /* Data on rising edge of bclk, frame high, 1clk before data */
3601 @@ -453,12 +454,12 @@ static int fsl_esai_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
3602 return -EINVAL;
3603 }
3604
3605 - mask = ESAI_xCR_xFSL | ESAI_xCR_xFSR;
3606 + mask = ESAI_xCR_xFSL | ESAI_xCR_xFSR | ESAI_xCR_xWA;
3607 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCR, mask, xcr);
3608 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCR, mask, xcr);
3609
3610 mask = ESAI_xCCR_xCKP | ESAI_xCCR_xHCKP | ESAI_xCCR_xFSP |
3611 - ESAI_xCCR_xFSD | ESAI_xCCR_xCKD | ESAI_xCR_xWA;
3612 + ESAI_xCCR_xFSD | ESAI_xCCR_xCKD;
3613 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR, mask, xccr);
3614 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR, mask, xccr);
3615
3616 diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
3617 index d6b48c796bfc..086fe4d27f60 100644
3618 --- a/sound/soc/soc-topology.c
3619 +++ b/sound/soc/soc-topology.c
3620 @@ -1989,6 +1989,7 @@ int snd_soc_tplg_component_load(struct snd_soc_component *comp,
3621 struct snd_soc_tplg_ops *ops, const struct firmware *fw, u32 id)
3622 {
3623 struct soc_tplg tplg;
3624 + int ret;
3625
3626 /* setup parsing context */
3627 memset(&tplg, 0, sizeof(tplg));
3628 @@ -2002,7 +2003,12 @@ int snd_soc_tplg_component_load(struct snd_soc_component *comp,
3629 tplg.bytes_ext_ops = ops->bytes_ext_ops;
3630 tplg.bytes_ext_ops_count = ops->bytes_ext_ops_count;
3631
3632 - return soc_tplg_load(&tplg);
3633 + ret = soc_tplg_load(&tplg);
3634 + /* free the created components if fail to load topology */
3635 + if (ret)
3636 + snd_soc_tplg_component_remove(comp, SND_SOC_TPLG_INDEX_ALL);
3637 +
3638 + return ret;
3639 }
3640 EXPORT_SYMBOL_GPL(snd_soc_tplg_component_load);
3641
3642 diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
3643 index 29d015e2d900..b87221efdf7e 100644
3644 --- a/tools/perf/util/auxtrace.c
3645 +++ b/tools/perf/util/auxtrace.c
3646 @@ -1244,9 +1244,9 @@ static int __auxtrace_mmap__read(struct auxtrace_mmap *mm,
3647 }
3648
3649 /* padding must be written by fn() e.g. record__process_auxtrace() */
3650 - padding = size & 7;
3651 + padding = size & (PERF_AUXTRACE_RECORD_ALIGNMENT - 1);
3652 if (padding)
3653 - padding = 8 - padding;
3654 + padding = PERF_AUXTRACE_RECORD_ALIGNMENT - padding;
3655
3656 memset(&ev, 0, sizeof(ev));
3657 ev.auxtrace.header.type = PERF_RECORD_AUXTRACE;
3658 diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
3659 index 26fb1ee5746a..1b6963e09934 100644
3660 --- a/tools/perf/util/auxtrace.h
3661 +++ b/tools/perf/util/auxtrace.h
3662 @@ -37,6 +37,9 @@ struct record_opts;
3663 struct auxtrace_info_event;
3664 struct events_stats;
3665
3666 +/* Auxtrace records must have the same alignment as perf event records */
3667 +#define PERF_AUXTRACE_RECORD_ALIGNMENT 8
3668 +
3669 enum auxtrace_type {
3670 PERF_AUXTRACE_UNKNOWN,
3671 PERF_AUXTRACE_INTEL_PT,
3672 diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
3673 index d27715ff9a5f..94764efb0a6a 100644
3674 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
3675 +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
3676 @@ -26,6 +26,7 @@
3677
3678 #include "../cache.h"
3679 #include "../util.h"
3680 +#include "../auxtrace.h"
3681
3682 #include "intel-pt-insn-decoder.h"
3683 #include "intel-pt-pkt-decoder.h"
3684 @@ -1311,7 +1312,6 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
3685 {
3686 intel_pt_log("ERROR: Buffer overflow\n");
3687 intel_pt_clear_tx_flags(decoder);
3688 - decoder->cbr = 0;
3689 decoder->timestamp_insn_cnt = 0;
3690 decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
3691 decoder->overflow = true;
3692 @@ -2351,6 +2351,34 @@ static int intel_pt_tsc_cmp(uint64_t tsc1, uint64_t tsc2)
3693 }
3694 }
3695
3696 +#define MAX_PADDING (PERF_AUXTRACE_RECORD_ALIGNMENT - 1)
3697 +
3698 +/**
3699 + * adj_for_padding - adjust overlap to account for padding.
3700 + * @buf_b: second buffer
3701 + * @buf_a: first buffer
3702 + * @len_a: size of first buffer
3703 + *
3704 + * @buf_a might have up to 7 bytes of padding appended. Adjust the overlap
3705 + * accordingly.
3706 + *
3707 + * Return: A pointer into @buf_b from where non-overlapped data starts
3708 + */
3709 +static unsigned char *adj_for_padding(unsigned char *buf_b,
3710 + unsigned char *buf_a, size_t len_a)
3711 +{
3712 + unsigned char *p = buf_b - MAX_PADDING;
3713 + unsigned char *q = buf_a + len_a - MAX_PADDING;
3714 + int i;
3715 +
3716 + for (i = MAX_PADDING; i; i--, p++, q++) {
3717 + if (*p != *q)
3718 + break;
3719 + }
3720 +
3721 + return p;
3722 +}
3723 +
3724 /**
3725 * intel_pt_find_overlap_tsc - determine start of non-overlapped trace data
3726 * using TSC.
3727 @@ -2401,8 +2429,11 @@ static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a,
3728
3729 /* Same TSC, so buffers are consecutive */
3730 if (!cmp && rem_b >= rem_a) {
3731 + unsigned char *start;
3732 +
3733 *consecutive = true;
3734 - return buf_b + len_b - (rem_b - rem_a);
3735 + start = buf_b + len_b - (rem_b - rem_a);
3736 + return adj_for_padding(start, buf_a, len_a);
3737 }
3738 if (cmp < 0)
3739 return buf_b; /* tsc_a < tsc_b => no overlap */
3740 @@ -2465,7 +2496,7 @@ unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
3741 found = memmem(buf_a, len_a, buf_b, len_a);
3742 if (found) {
3743 *consecutive = true;
3744 - return buf_b + len_a;
3745 + return adj_for_padding(buf_b + len_a, buf_a, len_a);
3746 }
3747
3748 /* Try again at next PSB in buffer 'a' */
3749 diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
3750 index d40ab4cf8932..24c6621e2d95 100644
3751 --- a/tools/perf/util/intel-pt.c
3752 +++ b/tools/perf/util/intel-pt.c
3753 @@ -2259,6 +2259,8 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
3754 }
3755
3756 pt->timeless_decoding = intel_pt_timeless_decoding(pt);
3757 + if (pt->timeless_decoding && !pt->tc.time_mult)
3758 + pt->tc.time_mult = 1;
3759 pt->have_tsc = intel_pt_have_tsc(pt);
3760 pt->sampling_mode = false;
3761 pt->est_tsc = !pt->timeless_decoding;