Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0332-4.9.233-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3616 - (show annotations) (download)
Wed Aug 26 13:04:44 2020 UTC (3 years, 8 months ago) by niro
File size: 195456 byte(s)
-linux-4.9.233
1 diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
2 index 0406076e44059..743ffbcc6b5f0 100644
3 --- a/Documentation/ABI/testing/sysfs-bus-iio
4 +++ b/Documentation/ABI/testing/sysfs-bus-iio
5 @@ -1491,7 +1491,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw
6 KernelVersion: 4.3
7 Contact: linux-iio@vger.kernel.org
8 Description:
9 - Raw (unscaled no offset etc.) percentage reading of a substance.
10 + Raw (unscaled no offset etc.) reading of a substance. Units
11 + after application of scale and offset are percents.
12
13 What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
14 What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
15 diff --git a/Makefile b/Makefile
16 index 934db3609c16f..af68e8c3fb962 100644
17 --- a/Makefile
18 +++ b/Makefile
19 @@ -1,6 +1,6 @@
20 VERSION = 4
21 PATCHLEVEL = 9
22 -SUBLEVEL = 232
23 +SUBLEVEL = 233
24 EXTRAVERSION =
25 NAME = Roaring Lionus
26
27 diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h
28 index a89b4076cde47..72821b4721add 100644
29 --- a/arch/arm/include/asm/percpu.h
30 +++ b/arch/arm/include/asm/percpu.h
31 @@ -16,6 +16,8 @@
32 #ifndef _ASM_ARM_PERCPU_H_
33 #define _ASM_ARM_PERCPU_H_
34
35 +#include <asm/thread_info.h>
36 +
37 /*
38 * Same as asm-generic/percpu.h, except that we store the per cpu offset
39 * in the TPIDRPRW. TPIDRPRW only exists on V6K and V7
40 diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c
41 index 25538a9358741..283084f6286d9 100644
42 --- a/arch/arm/kernel/hw_breakpoint.c
43 +++ b/arch/arm/kernel/hw_breakpoint.c
44 @@ -688,6 +688,12 @@ static void disable_single_step(struct perf_event *bp)
45 arch_install_hw_breakpoint(bp);
46 }
47
48 +static int watchpoint_fault_on_uaccess(struct pt_regs *regs,
49 + struct arch_hw_breakpoint *info)
50 +{
51 + return !user_mode(regs) && info->ctrl.privilege == ARM_BREAKPOINT_USER;
52 +}
53 +
54 static void watchpoint_handler(unsigned long addr, unsigned int fsr,
55 struct pt_regs *regs)
56 {
57 @@ -747,16 +753,27 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,
58 }
59
60 pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
61 +
62 + /*
63 + * If we triggered a user watchpoint from a uaccess routine,
64 + * then handle the stepping ourselves since userspace really
65 + * can't help us with this.
66 + */
67 + if (watchpoint_fault_on_uaccess(regs, info))
68 + goto step;
69 +
70 perf_bp_event(wp, regs);
71
72 /*
73 - * If no overflow handler is present, insert a temporary
74 - * mismatch breakpoint so we can single-step over the
75 - * watchpoint trigger.
76 + * Defer stepping to the overflow handler if one is installed.
77 + * Otherwise, insert a temporary mismatch breakpoint so that
78 + * we can single-step over the watchpoint trigger.
79 */
80 - if (is_default_overflow_handler(wp))
81 - enable_single_step(wp, instruction_pointer(regs));
82 + if (!is_default_overflow_handler(wp))
83 + goto unlock;
84
85 +step:
86 + enable_single_step(wp, instruction_pointer(regs));
87 unlock:
88 rcu_read_unlock();
89 }
90 diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
91 index 92b72375c4c72..6e8a50de40e2b 100644
92 --- a/arch/arm/kernel/stacktrace.c
93 +++ b/arch/arm/kernel/stacktrace.c
94 @@ -19,6 +19,19 @@
95 * A simple function epilogue looks like this:
96 * ldm sp, {fp, sp, pc}
97 *
98 + * When compiled with clang, pc and sp are not pushed. A simple function
99 + * prologue looks like this when built with clang:
100 + *
101 + * stmdb {..., fp, lr}
102 + * add fp, sp, #x
103 + * sub sp, sp, #y
104 + *
105 + * A simple function epilogue looks like this when built with clang:
106 + *
107 + * sub sp, fp, #x
108 + * ldm {..., fp, pc}
109 + *
110 + *
111 * Note that with framepointer enabled, even the leaf functions have the same
112 * prologue and epilogue, therefore we can ignore the LR value in this case.
113 */
114 @@ -31,6 +44,16 @@ int notrace unwind_frame(struct stackframe *frame)
115 low = frame->sp;
116 high = ALIGN(low, THREAD_SIZE);
117
118 +#ifdef CONFIG_CC_IS_CLANG
119 + /* check current frame pointer is within bounds */
120 + if (fp < low + 4 || fp > high - 4)
121 + return -EINVAL;
122 +
123 + frame->sp = frame->fp;
124 + frame->fp = *(unsigned long *)(fp);
125 + frame->pc = frame->lr;
126 + frame->lr = *(unsigned long *)(fp + 4);
127 +#else
128 /* check current frame pointer is within bounds */
129 if (fp < low + 12 || fp > high - 4)
130 return -EINVAL;
131 @@ -39,6 +62,7 @@ int notrace unwind_frame(struct stackframe *frame)
132 frame->fp = *(unsigned long *)(fp - 12);
133 frame->sp = *(unsigned long *)(fp - 8);
134 frame->pc = *(unsigned long *)(fp - 4);
135 +#endif
136
137 return 0;
138 }
139 diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
140 index 8ba0e2e5ad97c..0efac1404418e 100644
141 --- a/arch/arm/mach-at91/pm.c
142 +++ b/arch/arm/mach-at91/pm.c
143 @@ -411,13 +411,13 @@ static void __init at91_pm_sram_init(void)
144 sram_pool = gen_pool_get(&pdev->dev, NULL);
145 if (!sram_pool) {
146 pr_warn("%s: sram pool unavailable!\n", __func__);
147 - return;
148 + goto out_put_device;
149 }
150
151 sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz);
152 if (!sram_base) {
153 pr_warn("%s: unable to alloc sram!\n", __func__);
154 - return;
155 + goto out_put_device;
156 }
157
158 sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base);
159 @@ -425,12 +425,17 @@ static void __init at91_pm_sram_init(void)
160 at91_pm_suspend_in_sram_sz, false);
161 if (!at91_suspend_sram_fn) {
162 pr_warn("SRAM: Could not map\n");
163 - return;
164 + goto out_put_device;
165 }
166
167 /* Copy the pm suspend handler to SRAM */
168 at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn,
169 &at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz);
170 + return;
171 +
172 +out_put_device:
173 + put_device(&pdev->dev);
174 + return;
175 }
176
177 static const struct of_device_id atmel_pmc_ids[] __initconst = {
178 diff --git a/arch/arm/mach-socfpga/pm.c b/arch/arm/mach-socfpga/pm.c
179 index c378ab0c24317..93f2245c97750 100644
180 --- a/arch/arm/mach-socfpga/pm.c
181 +++ b/arch/arm/mach-socfpga/pm.c
182 @@ -60,14 +60,14 @@ static int socfpga_setup_ocram_self_refresh(void)
183 if (!ocram_pool) {
184 pr_warn("%s: ocram pool unavailable!\n", __func__);
185 ret = -ENODEV;
186 - goto put_node;
187 + goto put_device;
188 }
189
190 ocram_base = gen_pool_alloc(ocram_pool, socfpga_sdram_self_refresh_sz);
191 if (!ocram_base) {
192 pr_warn("%s: unable to alloc ocram!\n", __func__);
193 ret = -ENOMEM;
194 - goto put_node;
195 + goto put_device;
196 }
197
198 ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base);
199 @@ -78,7 +78,7 @@ static int socfpga_setup_ocram_self_refresh(void)
200 if (!suspend_ocram_base) {
201 pr_warn("%s: __arm_ioremap_exec failed!\n", __func__);
202 ret = -ENOMEM;
203 - goto put_node;
204 + goto put_device;
205 }
206
207 /* Copy the code that puts DDR in self refresh to ocram */
208 @@ -92,6 +92,8 @@ static int socfpga_setup_ocram_self_refresh(void)
209 if (!socfpga_sdram_self_refresh_in_ocram)
210 ret = -EFAULT;
211
212 +put_device:
213 + put_device(&pdev->dev);
214 put_node:
215 of_node_put(np);
216
217 diff --git a/arch/arm64/boot/dts/exynos/exynos7-espresso.dts b/arch/arm64/boot/dts/exynos/exynos7-espresso.dts
218 index c528dd52ba2d3..2f7d144d556da 100644
219 --- a/arch/arm64/boot/dts/exynos/exynos7-espresso.dts
220 +++ b/arch/arm64/boot/dts/exynos/exynos7-espresso.dts
221 @@ -131,6 +131,7 @@
222 regulator-min-microvolt = <700000>;
223 regulator-max-microvolt = <1150000>;
224 regulator-enable-ramp-delay = <125>;
225 + regulator-always-on;
226 };
227
228 ldo8_reg: LDO8 {
229 diff --git a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
230 index 10c83e11c272f..fabc0cebe2aa2 100644
231 --- a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
232 +++ b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
233 @@ -542,7 +542,7 @@
234 pins = "gpio63", "gpio64", "gpio65", "gpio66",
235 "gpio67", "gpio68";
236 drive-strength = <8>;
237 - bias-pull-none;
238 + bias-disable;
239 };
240 };
241 cdc_pdm_lines_sus: pdm_lines_off {
242 @@ -571,7 +571,7 @@
243 pins = "gpio113", "gpio114", "gpio115",
244 "gpio116";
245 drive-strength = <8>;
246 - bias-pull-none;
247 + bias-disable;
248 };
249 };
250
251 @@ -599,7 +599,7 @@
252 pinconf {
253 pins = "gpio110";
254 drive-strength = <8>;
255 - bias-pull-none;
256 + bias-disable;
257 };
258 };
259
260 @@ -625,7 +625,7 @@
261 pinconf {
262 pins = "gpio116";
263 drive-strength = <8>;
264 - bias-pull-none;
265 + bias-disable;
266 };
267 };
268 ext_mclk_tlmm_lines_sus: mclk_lines_off {
269 @@ -653,7 +653,7 @@
270 pins = "gpio112", "gpio117", "gpio118",
271 "gpio119";
272 drive-strength = <8>;
273 - bias-pull-none;
274 + bias-disable;
275 };
276 };
277 ext_sec_tlmm_lines_sus: tlmm_lines_off {
278 diff --git a/arch/arm64/include/asm/checksum.h b/arch/arm64/include/asm/checksum.h
279 index 09f65339d66df..e6d66c508d81b 100644
280 --- a/arch/arm64/include/asm/checksum.h
281 +++ b/arch/arm64/include/asm/checksum.h
282 @@ -30,16 +30,17 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
283 {
284 __uint128_t tmp;
285 u64 sum;
286 + int n = ihl; /* we want it signed */
287
288 tmp = *(const __uint128_t *)iph;
289 iph += 16;
290 - ihl -= 4;
291 + n -= 4;
292 tmp += ((tmp >> 64) | (tmp << 64));
293 sum = tmp >> 64;
294 do {
295 sum += *(const u32 *)iph;
296 iph += 4;
297 - } while (--ihl);
298 + } while (--n > 0);
299
300 sum += ((sum >> 32) | (sum << 32));
301 return csum_fold(sum >> 32);
302 diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c
303 index 7990b6f50105b..cb516cacc819b 100644
304 --- a/arch/m68k/mac/iop.c
305 +++ b/arch/m68k/mac/iop.c
306 @@ -173,7 +173,7 @@ static __inline__ void iop_writeb(volatile struct mac_iop *iop, __u16 addr, __u8
307
308 static __inline__ void iop_stop(volatile struct mac_iop *iop)
309 {
310 - iop->status_ctrl &= ~IOP_RUN;
311 + iop->status_ctrl = IOP_AUTOINC;
312 }
313
314 static __inline__ void iop_start(volatile struct mac_iop *iop)
315 @@ -181,14 +181,9 @@ static __inline__ void iop_start(volatile struct mac_iop *iop)
316 iop->status_ctrl = IOP_RUN | IOP_AUTOINC;
317 }
318
319 -static __inline__ void iop_bypass(volatile struct mac_iop *iop)
320 -{
321 - iop->status_ctrl |= IOP_BYPASS;
322 -}
323 -
324 static __inline__ void iop_interrupt(volatile struct mac_iop *iop)
325 {
326 - iop->status_ctrl |= IOP_IRQ;
327 + iop->status_ctrl = IOP_IRQ | IOP_RUN | IOP_AUTOINC;
328 }
329
330 static int iop_alive(volatile struct mac_iop *iop)
331 @@ -239,7 +234,6 @@ void __init iop_preinit(void)
332 } else {
333 iop_base[IOP_NUM_SCC] = (struct mac_iop *) SCC_IOP_BASE_QUADRA;
334 }
335 - iop_base[IOP_NUM_SCC]->status_ctrl = 0x87;
336 iop_scc_present = 1;
337 } else {
338 iop_base[IOP_NUM_SCC] = NULL;
339 @@ -251,7 +245,7 @@ void __init iop_preinit(void)
340 } else {
341 iop_base[IOP_NUM_ISM] = (struct mac_iop *) ISM_IOP_BASE_QUADRA;
342 }
343 - iop_base[IOP_NUM_ISM]->status_ctrl = 0;
344 + iop_stop(iop_base[IOP_NUM_ISM]);
345 iop_ism_present = 1;
346 } else {
347 iop_base[IOP_NUM_ISM] = NULL;
348 @@ -416,7 +410,8 @@ static void iop_handle_send(uint iop_num, uint chan)
349 iop_free_msg(msg2);
350
351 iop_send_queue[iop_num][chan] = msg;
352 - if (msg) iop_do_send(msg);
353 + if (msg && iop_readb(iop, IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE)
354 + iop_do_send(msg);
355 }
356
357 /*
358 @@ -497,16 +492,12 @@ int iop_send_message(uint iop_num, uint chan, void *privdata,
359
360 if (!(q = iop_send_queue[iop_num][chan])) {
361 iop_send_queue[iop_num][chan] = msg;
362 + iop_do_send(msg);
363 } else {
364 while (q->next) q = q->next;
365 q->next = msg;
366 }
367
368 - if (iop_readb(iop_base[iop_num],
369 - IOP_ADDR_SEND_STATE + chan) == IOP_MSG_IDLE) {
370 - iop_do_send(msg);
371 - }
372 -
373 return 0;
374 }
375
376 diff --git a/arch/mips/include/uapi/asm/Kbuild b/arch/mips/include/uapi/asm/Kbuild
377 index f2cf414611467..6298280cb2fe0 100644
378 --- a/arch/mips/include/uapi/asm/Kbuild
379 +++ b/arch/mips/include/uapi/asm/Kbuild
380 @@ -39,3 +39,6 @@ header-y += termbits.h
381 header-y += termios.h
382 header-y += types.h
383 header-y += unistd.h
384 +header-y += hwcap.h
385 +header-y += reg.h
386 +header-y += ucontext.h
387 diff --git a/arch/mips/kernel/topology.c b/arch/mips/kernel/topology.c
388 index cf3eb61fad121..68da7613874aa 100644
389 --- a/arch/mips/kernel/topology.c
390 +++ b/arch/mips/kernel/topology.c
391 @@ -19,7 +19,7 @@ static int __init topology_init(void)
392 for_each_present_cpu(i) {
393 struct cpu *c = &per_cpu(cpu_devices, i);
394
395 - c->hotpluggable = 1;
396 + c->hotpluggable = !!i;
397 ret = register_cpu(c, i);
398 if (ret)
399 printk(KERN_WARNING "topology_init: register_cpu %d "
400 diff --git a/arch/parisc/include/asm/cmpxchg.h b/arch/parisc/include/asm/cmpxchg.h
401 index 90253bdc2ee5e..536690a68917c 100644
402 --- a/arch/parisc/include/asm/cmpxchg.h
403 +++ b/arch/parisc/include/asm/cmpxchg.h
404 @@ -59,6 +59,7 @@ extern void __cmpxchg_called_with_bad_pointer(void);
405 extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old,
406 unsigned int new_);
407 extern u64 __cmpxchg_u64(volatile u64 *ptr, u64 old, u64 new_);
408 +extern u8 __cmpxchg_u8(volatile u8 *ptr, u8 old, u8 new_);
409
410 /* don't worry...optimizer will get rid of most of this */
411 static inline unsigned long
412 @@ -70,6 +71,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
413 #endif
414 case 4: return __cmpxchg_u32((unsigned int *)ptr,
415 (unsigned int)old, (unsigned int)new_);
416 + case 1: return __cmpxchg_u8((u8 *)ptr, (u8)old, (u8)new_);
417 }
418 __cmpxchg_called_with_bad_pointer();
419 return old;
420 diff --git a/arch/parisc/lib/bitops.c b/arch/parisc/lib/bitops.c
421 index 8e45b0a97abf6..3284a7adb0a35 100644
422 --- a/arch/parisc/lib/bitops.c
423 +++ b/arch/parisc/lib/bitops.c
424 @@ -78,3 +78,15 @@ unsigned long __cmpxchg_u32(volatile unsigned int *ptr, unsigned int old, unsign
425 _atomic_spin_unlock_irqrestore(ptr, flags);
426 return (unsigned long)prev;
427 }
428 +
429 +u8 __cmpxchg_u8(volatile u8 *ptr, u8 old, u8 new)
430 +{
431 + unsigned long flags;
432 + u8 prev;
433 +
434 + _atomic_spin_lock_irqsave(ptr, flags);
435 + if ((prev = *ptr) == old)
436 + *ptr = new;
437 + _atomic_spin_unlock_irqrestore(ptr, flags);
438 + return prev;
439 +}
440 diff --git a/arch/powerpc/include/asm/percpu.h b/arch/powerpc/include/asm/percpu.h
441 index 2cedefddba37f..61c78205a1d36 100644
442 --- a/arch/powerpc/include/asm/percpu.h
443 +++ b/arch/powerpc/include/asm/percpu.h
444 @@ -9,8 +9,6 @@
445
446 #ifdef CONFIG_SMP
447
448 -#include <asm/paca.h>
449 -
450 #define __my_cpu_offset local_paca->data_offset
451
452 #endif /* CONFIG_SMP */
453 @@ -18,4 +16,6 @@
454
455 #include <asm-generic/percpu.h>
456
457 +#include <asm/paca.h>
458 +
459 #endif /* _ASM_POWERPC_PERCPU_H_ */
460 diff --git a/arch/powerpc/include/uapi/asm/Kbuild b/arch/powerpc/include/uapi/asm/Kbuild
461 index dab3717e3ea09..95cff47822180 100644
462 --- a/arch/powerpc/include/uapi/asm/Kbuild
463 +++ b/arch/powerpc/include/uapi/asm/Kbuild
464 @@ -45,3 +45,4 @@ header-y += tm.h
465 header-y += types.h
466 header-y += ucontext.h
467 header-y += unistd.h
468 +header-y += perf_regs.h
469 diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
470 index 4111d30badfad..d24aea160352b 100644
471 --- a/arch/powerpc/kernel/vdso.c
472 +++ b/arch/powerpc/kernel/vdso.c
473 @@ -704,7 +704,7 @@ int vdso_getcpu_init(void)
474 node = cpu_to_node(cpu);
475 WARN_ON_ONCE(node > 0xffff);
476
477 - val = (cpu & 0xfff) | ((node & 0xffff) << 16);
478 + val = (cpu & 0xffff) | ((node & 0xffff) << 16);
479 mtspr(SPRN_SPRG_VDSO_WRITE, val);
480 get_paca()->sprg_vdso = val;
481
482 diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
483 index eee45b9220e04..1fd0b684bf5fc 100644
484 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
485 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
486 @@ -29,7 +29,7 @@ static bool rtas_hp_event;
487 unsigned long pseries_memory_block_size(void)
488 {
489 struct device_node *np;
490 - unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE;
491 + u64 memblock_size = MIN_MEMORY_BLOCK_SIZE;
492 struct resource r;
493
494 np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory");
495 diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c
496 index f1147caebacf0..af69fb7fef7c7 100644
497 --- a/arch/sh/boards/mach-landisk/setup.c
498 +++ b/arch/sh/boards/mach-landisk/setup.c
499 @@ -85,6 +85,9 @@ device_initcall(landisk_devices_setup);
500
501 static void __init landisk_setup(char **cmdline_p)
502 {
503 + /* I/O port identity mapping */
504 + __set_io_port_base(0);
505 +
506 /* LED ON */
507 __raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED);
508
509 diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S
510 index 28cc61216b649..ed5b758c650d7 100644
511 --- a/arch/sh/kernel/entry-common.S
512 +++ b/arch/sh/kernel/entry-common.S
513 @@ -203,7 +203,7 @@ syscall_trace_entry:
514 mov.l @(OFF_R7,r15), r7 ! arg3
515 mov.l @(OFF_R3,r15), r3 ! syscall_nr
516 !
517 - mov.l 2f, r10 ! Number of syscalls
518 + mov.l 6f, r10 ! Number of syscalls
519 cmp/hs r10, r3
520 bf syscall_call
521 mov #-ENOSYS, r0
522 @@ -357,7 +357,7 @@ ENTRY(system_call)
523 tst r9, r8
524 bf syscall_trace_entry
525 !
526 - mov.l 2f, r8 ! Number of syscalls
527 + mov.l 6f, r8 ! Number of syscalls
528 cmp/hs r8, r3
529 bt syscall_badsys
530 !
531 @@ -396,7 +396,7 @@ syscall_exit:
532 #if !defined(CONFIG_CPU_SH2)
533 1: .long TRA
534 #endif
535 -2: .long NR_syscalls
536 +6: .long NR_syscalls
537 3: .long sys_call_table
538 7: .long do_syscall_trace_enter
539 8: .long do_syscall_trace_leave
540 diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
541 index 26d5451b6b421..32e459ecff7a9 100644
542 --- a/arch/x86/kernel/i8259.c
543 +++ b/arch/x86/kernel/i8259.c
544 @@ -205,7 +205,7 @@ spurious_8259A_irq:
545 * lets ACK and report it. [once per IRQ]
546 */
547 if (!(spurious_irq_mask & irqmask)) {
548 - printk(KERN_DEBUG
549 + printk_deferred(KERN_DEBUG
550 "spurious 8259A interrupt: IRQ%d.\n", irq);
551 spurious_irq_mask |= irqmask;
552 }
553 diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
554 index 097268f85e4ee..a1082dc61bb96 100644
555 --- a/arch/x86/kernel/vmlinux.lds.S
556 +++ b/arch/x86/kernel/vmlinux.lds.S
557 @@ -329,7 +329,8 @@ SECTIONS
558 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
559 __bss_start = .;
560 *(.bss..page_aligned)
561 - *(.bss)
562 + . = ALIGN(PAGE_SIZE);
563 + *(BSS_MAIN)
564 . = ALIGN(PAGE_SIZE);
565 __bss_stop = .;
566 }
567 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
568 index 3988e26af3b58..bfed29a4c2cec 100644
569 --- a/arch/x86/kvm/lapic.c
570 +++ b/arch/x86/kvm/lapic.c
571 @@ -1756,7 +1756,7 @@ void kvm_set_lapic_tscdeadline_msr(struct kvm_vcpu *vcpu, u64 data)
572 {
573 struct kvm_lapic *apic = vcpu->arch.apic;
574
575 - if (!lapic_in_kernel(vcpu) || apic_lvtt_oneshot(apic) ||
576 + if (!kvm_apic_present(vcpu) || apic_lvtt_oneshot(apic) ||
577 apic_lvtt_period(apic))
578 return;
579
580 diff --git a/arch/xtensa/kernel/perf_event.c b/arch/xtensa/kernel/perf_event.c
581 index 0fecc8a2c0b58..f6dd8e148be8c 100644
582 --- a/arch/xtensa/kernel/perf_event.c
583 +++ b/arch/xtensa/kernel/perf_event.c
584 @@ -404,7 +404,7 @@ static struct pmu xtensa_pmu = {
585 .read = xtensa_pmu_read,
586 };
587
588 -static int xtensa_pmu_setup(int cpu)
589 +static int xtensa_pmu_setup(unsigned int cpu)
590 {
591 unsigned i;
592
593 diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c
594 index aed8d34592209..c2c391d5c5a1c 100644
595 --- a/drivers/acpi/acpica/exprep.c
596 +++ b/drivers/acpi/acpica/exprep.c
597 @@ -507,10 +507,6 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
598 (u8)access_byte_width;
599 }
600 }
601 - /* An additional reference for the container */
602 -
603 - acpi_ut_add_reference(obj_desc->field.region_obj);
604 -
605 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
606 "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
607 obj_desc->field.start_field_bit_offset,
608 diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c
609 index 529d6c38ea7ce..03a2282ceb9ca 100644
610 --- a/drivers/acpi/acpica/utdelete.c
611 +++ b/drivers/acpi/acpica/utdelete.c
612 @@ -591,11 +591,6 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
613 next_object = object->buffer_field.buffer_obj;
614 break;
615
616 - case ACPI_TYPE_LOCAL_REGION_FIELD:
617 -
618 - next_object = object->field.region_obj;
619 - break;
620 -
621 case ACPI_TYPE_LOCAL_BANK_FIELD:
622
623 next_object = object->bank_field.bank_obj;
624 @@ -636,6 +631,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
625 }
626 break;
627
628 + case ACPI_TYPE_LOCAL_REGION_FIELD:
629 case ACPI_TYPE_REGION:
630 default:
631
632 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
633 index e12288c245b54..f4c0b62959450 100644
634 --- a/drivers/android/binder.c
635 +++ b/drivers/android/binder.c
636 @@ -1427,6 +1427,10 @@ static void binder_transaction(struct binder_proc *proc,
637 return_error = BR_DEAD_REPLY;
638 goto err_dead_binder;
639 }
640 + if (WARN_ON(proc == target_proc)) {
641 + return_error = BR_FAILED_REPLY;
642 + goto err_invalid_target_handle;
643 + }
644 if (security_binder_transaction(proc->tsk,
645 target_proc->tsk) < 0) {
646 return_error = BR_FAILED_REPLY;
647 @@ -1830,6 +1834,11 @@ static int binder_thread_write(struct binder_proc *proc,
648 ptr += sizeof(uint32_t);
649 if (target == 0 && binder_context_mgr_node &&
650 (cmd == BC_INCREFS || cmd == BC_ACQUIRE)) {
651 + if (binder_context_mgr_node->proc == proc) {
652 + binder_user_error("%d:%d context manager tried to acquire desc 0\n",
653 + proc->pid, thread->pid);
654 + return -EINVAL;
655 + }
656 ref = binder_get_ref_for_node(proc,
657 binder_context_mgr_node);
658 if (ref->desc != target) {
659 diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
660 index 480fa6ffbc090..04fca6db273ef 100644
661 --- a/drivers/atm/atmtcp.c
662 +++ b/drivers/atm/atmtcp.c
663 @@ -432,9 +432,15 @@ static int atmtcp_remove_persistent(int itf)
664 return -EMEDIUMTYPE;
665 }
666 dev_data = PRIV(dev);
667 - if (!dev_data->persist) return 0;
668 + if (!dev_data->persist) {
669 + atm_dev_put(dev);
670 + return 0;
671 + }
672 dev_data->persist = 0;
673 - if (PRIV(dev)->vcc) return 0;
674 + if (PRIV(dev)->vcc) {
675 + atm_dev_put(dev);
676 + return 0;
677 + }
678 kfree(dev_data);
679 atm_dev_put(dev);
680 atm_dev_deregister(dev);
681 diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
682 index 871e7f4994e8c..667882e996ecc 100644
683 --- a/drivers/char/agp/intel-gtt.c
684 +++ b/drivers/char/agp/intel-gtt.c
685 @@ -303,8 +303,10 @@ static int intel_gtt_setup_scratch_page(void)
686 if (intel_private.needs_dmar) {
687 dma_addr = pci_map_page(intel_private.pcidev, page, 0,
688 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
689 - if (pci_dma_mapping_error(intel_private.pcidev, dma_addr))
690 + if (pci_dma_mapping_error(intel_private.pcidev, dma_addr)) {
691 + __free_page(page);
692 return -EINVAL;
693 + }
694
695 intel_private.scratch_page_dma = dma_addr;
696 } else
697 diff --git a/drivers/char/random.c b/drivers/char/random.c
698 index 4cbc73173701d..c417aa19f9962 100644
699 --- a/drivers/char/random.c
700 +++ b/drivers/char/random.c
701 @@ -1211,6 +1211,7 @@ void add_interrupt_randomness(int irq, int irq_flags)
702
703 fast_mix(fast_pool);
704 add_interrupt_bench(cycles);
705 + this_cpu_add(net_rand_state.s1, fast_pool->pool[cycles & 3]);
706
707 if (unlikely(crng_init == 0)) {
708 if ((fast_pool->count >= 64) &&
709 diff --git a/drivers/clk/sirf/clk-atlas6.c b/drivers/clk/sirf/clk-atlas6.c
710 index 665fa681b2e1e..1e6bdf22c3b64 100644
711 --- a/drivers/clk/sirf/clk-atlas6.c
712 +++ b/drivers/clk/sirf/clk-atlas6.c
713 @@ -136,7 +136,7 @@ static void __init atlas6_clk_init(struct device_node *np)
714
715 for (i = pll1; i < maxclk; i++) {
716 atlas6_clks[i] = clk_register(NULL, atlas6_clk_hw_array[i]);
717 - BUG_ON(!atlas6_clks[i]);
718 + BUG_ON(IS_ERR(atlas6_clks[i]));
719 }
720 clk_register_clkdev(atlas6_clks[cpu], NULL, "cpu");
721 clk_register_clkdev(atlas6_clks[io], NULL, "io");
722 diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h
723 index cfe21d0337454..56c8c9ba12bcc 100644
724 --- a/drivers/crypto/ccp/ccp-dev.h
725 +++ b/drivers/crypto/ccp/ccp-dev.h
726 @@ -444,6 +444,7 @@ struct ccp_sg_workarea {
727 int nents;
728
729 struct scatterlist *dma_sg;
730 + struct scatterlist *dma_sg_head;
731 struct device *dma_dev;
732 unsigned int dma_count;
733 enum dma_data_direction dma_dir;
734 diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c
735 index 7d4cd518e6022..c3f13d6505e15 100644
736 --- a/drivers/crypto/ccp/ccp-ops.c
737 +++ b/drivers/crypto/ccp/ccp-ops.c
738 @@ -52,7 +52,7 @@ static u32 ccp_gen_jobid(struct ccp_device *ccp)
739 static void ccp_sg_free(struct ccp_sg_workarea *wa)
740 {
741 if (wa->dma_count)
742 - dma_unmap_sg(wa->dma_dev, wa->dma_sg, wa->nents, wa->dma_dir);
743 + dma_unmap_sg(wa->dma_dev, wa->dma_sg_head, wa->nents, wa->dma_dir);
744
745 wa->dma_count = 0;
746 }
747 @@ -81,6 +81,7 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev,
748 return 0;
749
750 wa->dma_sg = sg;
751 + wa->dma_sg_head = sg;
752 wa->dma_dev = dev;
753 wa->dma_dir = dma_dir;
754 wa->dma_count = dma_map_sg(dev, sg, wa->nents, dma_dir);
755 @@ -93,14 +94,28 @@ static int ccp_init_sg_workarea(struct ccp_sg_workarea *wa, struct device *dev,
756 static void ccp_update_sg_workarea(struct ccp_sg_workarea *wa, unsigned int len)
757 {
758 unsigned int nbytes = min_t(u64, len, wa->bytes_left);
759 + unsigned int sg_combined_len = 0;
760
761 if (!wa->sg)
762 return;
763
764 wa->sg_used += nbytes;
765 wa->bytes_left -= nbytes;
766 - if (wa->sg_used == wa->sg->length) {
767 - wa->sg = sg_next(wa->sg);
768 + if (wa->sg_used == sg_dma_len(wa->dma_sg)) {
769 + /* Advance to the next DMA scatterlist entry */
770 + wa->dma_sg = sg_next(wa->dma_sg);
771 +
772 + /* In the case that the DMA mapped scatterlist has entries
773 + * that have been merged, the non-DMA mapped scatterlist
774 + * must be advanced multiple times for each merged entry.
775 + * This ensures that the current non-DMA mapped entry
776 + * corresponds to the current DMA mapped entry.
777 + */
778 + do {
779 + sg_combined_len += wa->sg->length;
780 + wa->sg = sg_next(wa->sg);
781 + } while (wa->sg_used > sg_combined_len);
782 +
783 wa->sg_used = 0;
784 }
785 }
786 @@ -298,7 +313,7 @@ static unsigned int ccp_queue_buf(struct ccp_data *data, unsigned int from)
787 /* Update the structures and generate the count */
788 buf_count = 0;
789 while (sg_wa->bytes_left && (buf_count < dm_wa->length)) {
790 - nbytes = min(sg_wa->sg->length - sg_wa->sg_used,
791 + nbytes = min(sg_dma_len(sg_wa->dma_sg) - sg_wa->sg_used,
792 dm_wa->length - buf_count);
793 nbytes = min_t(u64, sg_wa->bytes_left, nbytes);
794
795 @@ -330,11 +345,11 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
796 * and destination. The resulting len values will always be <= UINT_MAX
797 * because the dma length is an unsigned int.
798 */
799 - sg_src_len = sg_dma_len(src->sg_wa.sg) - src->sg_wa.sg_used;
800 + sg_src_len = sg_dma_len(src->sg_wa.dma_sg) - src->sg_wa.sg_used;
801 sg_src_len = min_t(u64, src->sg_wa.bytes_left, sg_src_len);
802
803 if (dst) {
804 - sg_dst_len = sg_dma_len(dst->sg_wa.sg) - dst->sg_wa.sg_used;
805 + sg_dst_len = sg_dma_len(dst->sg_wa.dma_sg) - dst->sg_wa.sg_used;
806 sg_dst_len = min_t(u64, src->sg_wa.bytes_left, sg_dst_len);
807 op_len = min(sg_src_len, sg_dst_len);
808 } else {
809 @@ -364,7 +379,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
810 /* Enough data in the sg element, but we need to
811 * adjust for any previously copied data
812 */
813 - op->src.u.dma.address = sg_dma_address(src->sg_wa.sg);
814 + op->src.u.dma.address = sg_dma_address(src->sg_wa.dma_sg);
815 op->src.u.dma.offset = src->sg_wa.sg_used;
816 op->src.u.dma.length = op_len & ~(block_size - 1);
817
818 @@ -385,7 +400,7 @@ static void ccp_prepare_data(struct ccp_data *src, struct ccp_data *dst,
819 /* Enough room in the sg element, but we need to
820 * adjust for any previously used area
821 */
822 - op->dst.u.dma.address = sg_dma_address(dst->sg_wa.sg);
823 + op->dst.u.dma.address = sg_dma_address(dst->sg_wa.dma_sg);
824 op->dst.u.dma.offset = dst->sg_wa.sg_used;
825 op->dst.u.dma.length = op->src.u.dma.length;
826 }
827 @@ -1216,8 +1231,9 @@ static int ccp_run_sha_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
828 digest_size);
829 break;
830 default:
831 + kfree(hmac_buf);
832 ret = -EINVAL;
833 - goto e_ctx;
834 + goto e_data;
835 }
836
837 memset(&hmac_cmd, 0, sizeof(hmac_cmd));
838 @@ -1446,7 +1462,7 @@ static int ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q,
839 dst.sg_wa.sg_used = 0;
840 for (i = 1; i <= src.sg_wa.dma_count; i++) {
841 if (!dst.sg_wa.sg ||
842 - (dst.sg_wa.sg->length < src.sg_wa.sg->length)) {
843 + (sg_dma_len(dst.sg_wa.sg) < sg_dma_len(src.sg_wa.sg))) {
844 ret = -EINVAL;
845 goto e_dst;
846 }
847 @@ -1472,8 +1488,8 @@ static int ccp_run_passthru_cmd(struct ccp_cmd_queue *cmd_q,
848 goto e_dst;
849 }
850
851 - dst.sg_wa.sg_used += src.sg_wa.sg->length;
852 - if (dst.sg_wa.sg_used == dst.sg_wa.sg->length) {
853 + dst.sg_wa.sg_used += sg_dma_len(src.sg_wa.sg);
854 + if (dst.sg_wa.sg_used == sg_dma_len(dst.sg_wa.sg)) {
855 dst.sg_wa.sg = sg_next(dst.sg_wa.sg);
856 dst.sg_wa.sg_used = 0;
857 }
858 diff --git a/drivers/crypto/qat/qat_common/qat_uclo.c b/drivers/crypto/qat/qat_common/qat_uclo.c
859 index e2454d90d9498..4f1cd83bf56f9 100644
860 --- a/drivers/crypto/qat/qat_common/qat_uclo.c
861 +++ b/drivers/crypto/qat/qat_common/qat_uclo.c
862 @@ -332,13 +332,18 @@ static int qat_uclo_create_batch_init_list(struct icp_qat_fw_loader_handle
863 }
864 return 0;
865 out_err:
866 + /* Do not free the list head unless we allocated it. */
867 + tail_old = tail_old->next;
868 + if (flag) {
869 + kfree(*init_tab_base);
870 + *init_tab_base = NULL;
871 + }
872 +
873 while (tail_old) {
874 mem_init = tail_old->next;
875 kfree(tail_old);
876 tail_old = mem_init;
877 }
878 - if (flag)
879 - kfree(*init_tab_base);
880 return -ENOMEM;
881 }
882
883 diff --git a/drivers/edac/edac_device_sysfs.c b/drivers/edac/edac_device_sysfs.c
884 index 93da1a45c7161..470b02fc2de96 100644
885 --- a/drivers/edac/edac_device_sysfs.c
886 +++ b/drivers/edac/edac_device_sysfs.c
887 @@ -275,6 +275,7 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
888
889 /* Error exit stack */
890 err_kobj_reg:
891 + kobject_put(&edac_dev->kobj);
892 module_put(edac_dev->owner);
893
894 err_out:
895 diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c
896 index 6e3428ba400f3..622d117e25335 100644
897 --- a/drivers/edac/edac_pci_sysfs.c
898 +++ b/drivers/edac/edac_pci_sysfs.c
899 @@ -386,7 +386,7 @@ static int edac_pci_main_kobj_setup(void)
900
901 /* Error unwind statck */
902 kobject_init_and_add_fail:
903 - kfree(edac_pci_top_main_kobj);
904 + kobject_put(edac_pci_top_main_kobj);
905
906 kzalloc_fail:
907 module_put(THIS_MODULE);
908 diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
909 index b863386be9113..9e40914c09840 100644
910 --- a/drivers/gpio/gpiolib-of.c
911 +++ b/drivers/gpio/gpiolib-of.c
912 @@ -80,7 +80,7 @@ struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
913 &gpiospec);
914 if (ret) {
915 pr_debug("%s: can't parse '%s' property of node '%s[%d]'\n",
916 - __func__, propname, np->full_name, index);
917 + __func__, propname, np ? np->full_name : NULL, index);
918 return ERR_PTR(ret);
919 }
920
921 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
922 index 24941a7b659f4..ab5134d920d96 100644
923 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
924 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
925 @@ -452,8 +452,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
926 return n ? -EFAULT : 0;
927 }
928 case AMDGPU_INFO_DEV_INFO: {
929 - struct drm_amdgpu_info_device dev_info = {};
930 + struct drm_amdgpu_info_device dev_info;
931
932 + memset(&dev_info, 0, sizeof(dev_info));
933 dev_info.device_id = dev->pdev->device;
934 dev_info.chip_rev = adev->rev_id;
935 dev_info.external_rev = adev->external_rev_id;
936 diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
937 index 1205790ed960c..5ffe4b664cfbf 100644
938 --- a/drivers/gpu/drm/drm_debugfs.c
939 +++ b/drivers/gpu/drm/drm_debugfs.c
940 @@ -287,13 +287,13 @@ static ssize_t connector_write(struct file *file, const char __user *ubuf,
941
942 buf[len] = '\0';
943
944 - if (!strcmp(buf, "on"))
945 + if (sysfs_streq(buf, "on"))
946 connector->force = DRM_FORCE_ON;
947 - else if (!strcmp(buf, "digital"))
948 + else if (sysfs_streq(buf, "digital"))
949 connector->force = DRM_FORCE_ON_DIGITAL;
950 - else if (!strcmp(buf, "off"))
951 + else if (sysfs_streq(buf, "off"))
952 connector->force = DRM_FORCE_OFF;
953 - else if (!strcmp(buf, "unspecified"))
954 + else if (sysfs_streq(buf, "unspecified"))
955 connector->force = DRM_FORCE_UNSPECIFIED;
956 else
957 return -EINVAL;
958 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
959 index ae5c0952a7a3b..3133aa6e89c18 100644
960 --- a/drivers/gpu/drm/drm_gem.c
961 +++ b/drivers/gpu/drm/drm_gem.c
962 @@ -694,9 +694,6 @@ err:
963 * @file_priv: drm file-private structure
964 *
965 * Open an object using the global name, returning a handle and the size.
966 - *
967 - * This handle (of course) holds a reference to the object, so the object
968 - * will not go away until the handle is deleted.
969 */
970 int
971 drm_gem_open_ioctl(struct drm_device *dev, void *data,
972 @@ -721,14 +718,15 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data,
973
974 /* drm_gem_handle_create_tail unlocks dev->object_name_lock. */
975 ret = drm_gem_handle_create_tail(file_priv, obj, &handle);
976 - drm_gem_object_unreference_unlocked(obj);
977 if (ret)
978 - return ret;
979 + goto err;
980
981 args->handle = handle;
982 args->size = obj->size;
983
984 - return 0;
985 +err:
986 + drm_gem_object_unreference_unlocked(obj);
987 + return ret;
988 }
989
990 /**
991 diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
992 index 1160a579e0dc0..99415808e9f91 100644
993 --- a/drivers/gpu/drm/drm_mipi_dsi.c
994 +++ b/drivers/gpu/drm/drm_mipi_dsi.c
995 @@ -1029,11 +1029,11 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format);
996 */
997 int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)
998 {
999 - u8 payload[3] = { MIPI_DCS_SET_TEAR_SCANLINE, scanline >> 8,
1000 - scanline & 0xff };
1001 + u8 payload[2] = { scanline >> 8, scanline & 0xff };
1002 ssize_t err;
1003
1004 - err = mipi_dsi_generic_write(dsi, payload, sizeof(payload));
1005 + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_SCANLINE, payload,
1006 + sizeof(payload));
1007 if (err < 0)
1008 return err;
1009
1010 diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
1011 index 89cf0090feaca..9ae515f3171ec 100644
1012 --- a/drivers/gpu/drm/imx/imx-tve.c
1013 +++ b/drivers/gpu/drm/imx/imx-tve.c
1014 @@ -511,6 +511,13 @@ static int imx_tve_register(struct drm_device *drm, struct imx_tve *tve)
1015 return 0;
1016 }
1017
1018 +static void imx_tve_disable_regulator(void *data)
1019 +{
1020 + struct imx_tve *tve = data;
1021 +
1022 + regulator_disable(tve->dac_reg);
1023 +}
1024 +
1025 static bool imx_tve_readable_reg(struct device *dev, unsigned int reg)
1026 {
1027 return (reg % 4 == 0) && (reg <= 0xdc);
1028 @@ -635,6 +642,9 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data)
1029 ret = regulator_enable(tve->dac_reg);
1030 if (ret)
1031 return ret;
1032 + ret = devm_add_action_or_reset(dev, imx_tve_disable_regulator, tve);
1033 + if (ret)
1034 + return ret;
1035 }
1036
1037 tve->clk = devm_clk_get(dev, "tve");
1038 @@ -681,18 +691,8 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data)
1039 return 0;
1040 }
1041
1042 -static void imx_tve_unbind(struct device *dev, struct device *master,
1043 - void *data)
1044 -{
1045 - struct imx_tve *tve = dev_get_drvdata(dev);
1046 -
1047 - if (!IS_ERR(tve->dac_reg))
1048 - regulator_disable(tve->dac_reg);
1049 -}
1050 -
1051 static const struct component_ops imx_tve_ops = {
1052 .bind = imx_tve_bind,
1053 - .unbind = imx_tve_unbind,
1054 };
1055
1056 static int imx_tve_probe(struct platform_device *pdev)
1057 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
1058 index 42829a942e33c..4e12d3d59651b 100644
1059 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
1060 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
1061 @@ -823,8 +823,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
1062
1063 /* need to bring up power immediately if opening device */
1064 ret = pm_runtime_get_sync(dev->dev);
1065 - if (ret < 0 && ret != -EACCES)
1066 + if (ret < 0 && ret != -EACCES) {
1067 + pm_runtime_put_autosuspend(dev->dev);
1068 return ret;
1069 + }
1070
1071 get_task_comm(tmpname, current);
1072 snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
1073 @@ -912,8 +914,10 @@ nouveau_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1074 long ret;
1075
1076 ret = pm_runtime_get_sync(dev->dev);
1077 - if (ret < 0 && ret != -EACCES)
1078 + if (ret < 0 && ret != -EACCES) {
1079 + pm_runtime_put_autosuspend(dev->dev);
1080 return ret;
1081 + }
1082
1083 switch (_IOC_NR(cmd) - DRM_COMMAND_BASE) {
1084 case DRM_NOUVEAU_NVIF:
1085 diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1086 index 2b79e27dd89c6..275abc424ce25 100644
1087 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1088 +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1089 @@ -584,6 +584,7 @@ fini:
1090 drm_fb_helper_fini(&fbcon->helper);
1091 free:
1092 kfree(fbcon);
1093 + drm->fbcon = NULL;
1094 return ret;
1095 }
1096
1097 diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
1098 index 505dca48b9f80..be6672da33a65 100644
1099 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c
1100 +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
1101 @@ -42,8 +42,10 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
1102 int ret;
1103
1104 ret = pm_runtime_get_sync(dev);
1105 - if (WARN_ON(ret < 0 && ret != -EACCES))
1106 + if (WARN_ON(ret < 0 && ret != -EACCES)) {
1107 + pm_runtime_put_autosuspend(dev);
1108 return;
1109 + }
1110
1111 if (gem->import_attach)
1112 drm_prime_gem_destroy(gem, nvbo->bo.sg);
1113 diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
1114 index 68a2b25deb50d..57f32d1bb3127 100644
1115 --- a/drivers/gpu/drm/panel/panel-simple.c
1116 +++ b/drivers/gpu/drm/panel/panel-simple.c
1117 @@ -1041,7 +1041,7 @@ static const struct drm_display_mode lg_lb070wv8_mode = {
1118 static const struct panel_desc lg_lb070wv8 = {
1119 .modes = &lg_lb070wv8_mode,
1120 .num_modes = 1,
1121 - .bpc = 16,
1122 + .bpc = 8,
1123 .size = {
1124 .width = 151,
1125 .height = 91,
1126 diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
1127 index be43582811dfc..50bad42527b1c 100644
1128 --- a/drivers/gpu/drm/radeon/ci_dpm.c
1129 +++ b/drivers/gpu/drm/radeon/ci_dpm.c
1130 @@ -4348,7 +4348,7 @@ static int ci_set_mc_special_registers(struct radeon_device *rdev,
1131 table->mc_reg_table_entry[k].mc_data[j] |= 0x100;
1132 }
1133 j++;
1134 - if (j > SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE)
1135 + if (j >= SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE)
1136 return -EINVAL;
1137
1138 if (!pi->mem_gddr5) {
1139 diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
1140 index 432ad7d73cb9b..99e23800cadc7 100644
1141 --- a/drivers/gpu/drm/radeon/radeon_display.c
1142 +++ b/drivers/gpu/drm/radeon/radeon_display.c
1143 @@ -639,8 +639,10 @@ radeon_crtc_set_config(struct drm_mode_set *set)
1144 dev = set->crtc->dev;
1145
1146 ret = pm_runtime_get_sync(dev->dev);
1147 - if (ret < 0)
1148 + if (ret < 0) {
1149 + pm_runtime_put_autosuspend(dev->dev);
1150 return ret;
1151 + }
1152
1153 ret = drm_crtc_helper_set_config(set);
1154
1155 diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
1156 index 30bd4a6a9d466..7648fd0d10751 100644
1157 --- a/drivers/gpu/drm/radeon/radeon_drv.c
1158 +++ b/drivers/gpu/drm/radeon/radeon_drv.c
1159 @@ -496,8 +496,10 @@ long radeon_drm_ioctl(struct file *filp,
1160 long ret;
1161 dev = file_priv->minor->dev;
1162 ret = pm_runtime_get_sync(dev->dev);
1163 - if (ret < 0)
1164 + if (ret < 0) {
1165 + pm_runtime_put_autosuspend(dev->dev);
1166 return ret;
1167 + }
1168
1169 ret = drm_ioctl(filp, cmd, arg);
1170
1171 diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
1172 index 4388ddeec8d24..96d2a564d9a3c 100644
1173 --- a/drivers/gpu/drm/radeon/radeon_kms.c
1174 +++ b/drivers/gpu/drm/radeon/radeon_kms.c
1175 @@ -634,8 +634,10 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
1176 file_priv->driver_priv = NULL;
1177
1178 r = pm_runtime_get_sync(dev->dev);
1179 - if (r < 0)
1180 + if (r < 0) {
1181 + pm_runtime_put_autosuspend(dev->dev);
1182 return r;
1183 + }
1184
1185 /* new gpu have virtual address space support */
1186 if (rdev->family >= CHIP_CAYMAN) {
1187 diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1188 index 2134bb20fbe9d..2836154dbb126 100644
1189 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1190 +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
1191 @@ -159,12 +159,16 @@ static int panel_connector_get_modes(struct drm_connector *connector)
1192 int i;
1193
1194 for (i = 0; i < timings->num_timings; i++) {
1195 - struct drm_display_mode *mode = drm_mode_create(dev);
1196 + struct drm_display_mode *mode;
1197 struct videomode vm;
1198
1199 if (videomode_from_timings(timings, &vm, i))
1200 break;
1201
1202 + mode = drm_mode_create(dev);
1203 + if (!mode)
1204 + break;
1205 +
1206 drm_display_mode_from_videomode(&vm, mode);
1207
1208 mode->type = DRM_MODE_TYPE_DRIVER;
1209 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1210 index 33ca24ab983e1..39ac7566b705b 100644
1211 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1212 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
1213 @@ -2109,7 +2109,7 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv,
1214 ++i;
1215 }
1216
1217 - if (i != unit) {
1218 + if (&con->head == &dev_priv->dev->mode_config.connector_list) {
1219 DRM_ERROR("Could not find initial display unit.\n");
1220 return -EINVAL;
1221 }
1222 @@ -2131,13 +2131,13 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv,
1223 break;
1224 }
1225
1226 - if (mode->type & DRM_MODE_TYPE_PREFERRED)
1227 - *p_mode = mode;
1228 - else {
1229 + if (&mode->head == &con->modes) {
1230 WARN_ONCE(true, "Could not find initial preferred mode.\n");
1231 *p_mode = list_first_entry(&con->modes,
1232 struct drm_display_mode,
1233 head);
1234 + } else {
1235 + *p_mode = mode;
1236 }
1237
1238 return 0;
1239 diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c
1240 index 50b73f3876fb7..098b86eb26d74 100644
1241 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c
1242 +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c
1243 @@ -987,9 +987,10 @@ done:
1244 return IRQ_WAKE_THREAD;
1245 }
1246
1247 -static irqreturn_t norotate_irq(int irq, void *data)
1248 +static irqreturn_t eof_irq(int irq, void *data)
1249 {
1250 struct ipu_image_convert_chan *chan = data;
1251 + struct ipu_image_convert_priv *priv = chan->priv;
1252 struct ipu_image_convert_ctx *ctx;
1253 struct ipu_image_convert_run *run;
1254 unsigned long flags;
1255 @@ -1006,45 +1007,26 @@ static irqreturn_t norotate_irq(int irq, void *data)
1256
1257 ctx = run->ctx;
1258
1259 - if (ipu_rot_mode_is_irt(ctx->rot_mode)) {
1260 - /* this is a rotation operation, just ignore */
1261 - spin_unlock_irqrestore(&chan->irqlock, flags);
1262 - return IRQ_HANDLED;
1263 - }
1264 -
1265 - ret = do_irq(run);
1266 -out:
1267 - spin_unlock_irqrestore(&chan->irqlock, flags);
1268 - return ret;
1269 -}
1270 -
1271 -static irqreturn_t rotate_irq(int irq, void *data)
1272 -{
1273 - struct ipu_image_convert_chan *chan = data;
1274 - struct ipu_image_convert_priv *priv = chan->priv;
1275 - struct ipu_image_convert_ctx *ctx;
1276 - struct ipu_image_convert_run *run;
1277 - unsigned long flags;
1278 - irqreturn_t ret;
1279 -
1280 - spin_lock_irqsave(&chan->irqlock, flags);
1281 -
1282 - /* get current run and its context */
1283 - run = chan->current_run;
1284 - if (!run) {
1285 + if (irq == chan->out_eof_irq) {
1286 + if (ipu_rot_mode_is_irt(ctx->rot_mode)) {
1287 + /* this is a rotation op, just ignore */
1288 + ret = IRQ_HANDLED;
1289 + goto out;
1290 + }
1291 + } else if (irq == chan->rot_out_eof_irq) {
1292 + if (!ipu_rot_mode_is_irt(ctx->rot_mode)) {
1293 + /* this was NOT a rotation op, shouldn't happen */
1294 + dev_err(priv->ipu->dev,
1295 + "Unexpected rotation interrupt\n");
1296 + ret = IRQ_HANDLED;
1297 + goto out;
1298 + }
1299 + } else {
1300 + dev_err(priv->ipu->dev, "Received unknown irq %d\n", irq);
1301 ret = IRQ_NONE;
1302 goto out;
1303 }
1304
1305 - ctx = run->ctx;
1306 -
1307 - if (!ipu_rot_mode_is_irt(ctx->rot_mode)) {
1308 - /* this was NOT a rotation operation, shouldn't happen */
1309 - dev_err(priv->ipu->dev, "Unexpected rotation interrupt\n");
1310 - spin_unlock_irqrestore(&chan->irqlock, flags);
1311 - return IRQ_HANDLED;
1312 - }
1313 -
1314 ret = do_irq(run);
1315 out:
1316 spin_unlock_irqrestore(&chan->irqlock, flags);
1317 @@ -1137,7 +1119,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan)
1318 chan->out_chan,
1319 IPU_IRQ_EOF);
1320
1321 - ret = request_threaded_irq(chan->out_eof_irq, norotate_irq, do_bh,
1322 + ret = request_threaded_irq(chan->out_eof_irq, eof_irq, do_bh,
1323 0, "ipu-ic", chan);
1324 if (ret < 0) {
1325 dev_err(priv->ipu->dev, "could not acquire irq %d\n",
1326 @@ -1150,7 +1132,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan)
1327 chan->rotation_out_chan,
1328 IPU_IRQ_EOF);
1329
1330 - ret = request_threaded_irq(chan->rot_out_eof_irq, rotate_irq, do_bh,
1331 + ret = request_threaded_irq(chan->rot_out_eof_irq, eof_irq, do_bh,
1332 0, "ipu-ic", chan);
1333 if (ret < 0) {
1334 dev_err(priv->ipu->dev, "could not acquire irq %d\n",
1335 diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
1336 index 59c08d5b75d6a..45d6771fac8ce 100644
1337 --- a/drivers/i2c/busses/i2c-cadence.c
1338 +++ b/drivers/i2c/busses/i2c-cadence.c
1339 @@ -382,10 +382,8 @@ static void cdns_i2c_mrecv(struct cdns_i2c *id)
1340 * Check for the message size against FIFO depth and set the
1341 * 'hold bus' bit if it is greater than FIFO depth.
1342 */
1343 - if ((id->recv_count > CDNS_I2C_FIFO_DEPTH) || id->bus_hold_flag)
1344 + if (id->recv_count > CDNS_I2C_FIFO_DEPTH)
1345 ctrl_reg |= CDNS_I2C_CR_HOLD;
1346 - else
1347 - ctrl_reg = ctrl_reg & ~CDNS_I2C_CR_HOLD;
1348
1349 cdns_i2c_writereg(ctrl_reg, CDNS_I2C_CR_OFFSET);
1350
1351 @@ -442,11 +440,8 @@ static void cdns_i2c_msend(struct cdns_i2c *id)
1352 * Check for the message size against FIFO depth and set the
1353 * 'hold bus' bit if it is greater than FIFO depth.
1354 */
1355 - if ((id->send_count > CDNS_I2C_FIFO_DEPTH) || id->bus_hold_flag)
1356 + if (id->send_count > CDNS_I2C_FIFO_DEPTH)
1357 ctrl_reg |= CDNS_I2C_CR_HOLD;
1358 - else
1359 - ctrl_reg = ctrl_reg & ~CDNS_I2C_CR_HOLD;
1360 -
1361 cdns_i2c_writereg(ctrl_reg, CDNS_I2C_CR_OFFSET);
1362
1363 /* Clear the interrupts in interrupt status register. */
1364 diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
1365 index 93b8069041bb1..4231673435e7b 100644
1366 --- a/drivers/i2c/busses/i2c-rcar.c
1367 +++ b/drivers/i2c/busses/i2c-rcar.c
1368 @@ -527,13 +527,14 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
1369 rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR);
1370 }
1371
1372 - rcar_i2c_write(priv, ICSSR, ~SAR & 0xff);
1373 + /* Clear SSR, too, because of old STOPs to other clients than us */
1374 + rcar_i2c_write(priv, ICSSR, ~(SAR | SSR) & 0xff);
1375 }
1376
1377 /* master sent stop */
1378 if (ssr_filtered & SSR) {
1379 i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value);
1380 - rcar_i2c_write(priv, ICSIER, SAR | SSR);
1381 + rcar_i2c_write(priv, ICSIER, SAR);
1382 rcar_i2c_write(priv, ICSSR, ~SSR & 0xff);
1383 }
1384
1385 @@ -762,7 +763,7 @@ static int rcar_reg_slave(struct i2c_client *slave)
1386 priv->slave = slave;
1387 rcar_i2c_write(priv, ICSAR, slave->addr);
1388 rcar_i2c_write(priv, ICSSR, 0);
1389 - rcar_i2c_write(priv, ICSIER, SAR | SSR);
1390 + rcar_i2c_write(priv, ICSIER, SAR);
1391 rcar_i2c_write(priv, ICSCR, SIE | SDBS);
1392
1393 return 0;
1394 diff --git a/drivers/iio/dac/ad5592r-base.c b/drivers/iio/dac/ad5592r-base.c
1395 index 69bde59098542..5c998ac8c840b 100644
1396 --- a/drivers/iio/dac/ad5592r-base.c
1397 +++ b/drivers/iio/dac/ad5592r-base.c
1398 @@ -417,7 +417,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev,
1399 s64 tmp = *val * (3767897513LL / 25LL);
1400 *val = div_s64_rem(tmp, 1000000000LL, val2);
1401
1402 - ret = IIO_VAL_INT_PLUS_MICRO;
1403 + return IIO_VAL_INT_PLUS_MICRO;
1404 } else {
1405 int mult;
1406
1407 @@ -448,7 +448,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev,
1408 ret = IIO_VAL_INT;
1409 break;
1410 default:
1411 - ret = -EINVAL;
1412 + return -EINVAL;
1413 }
1414
1415 unlock:
1416 diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c
1417 index 11c32ac8234b2..779d0b9341c0d 100644
1418 --- a/drivers/input/mouse/sentelic.c
1419 +++ b/drivers/input/mouse/sentelic.c
1420 @@ -454,7 +454,7 @@ static ssize_t fsp_attr_set_setreg(struct psmouse *psmouse, void *data,
1421
1422 fsp_reg_write_enable(psmouse, false);
1423
1424 - return count;
1425 + return retval;
1426 }
1427
1428 PSMOUSE_DEFINE_WO_ATTR(setreg, S_IWUSR, NULL, fsp_attr_set_setreg);
1429 diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c
1430 index 505548aafeff2..cec33e90e3998 100644
1431 --- a/drivers/iommu/omap-iommu-debug.c
1432 +++ b/drivers/iommu/omap-iommu-debug.c
1433 @@ -101,8 +101,11 @@ static ssize_t debug_read_regs(struct file *file, char __user *userbuf,
1434 mutex_lock(&iommu_debug_lock);
1435
1436 bytes = omap_iommu_dump_ctx(obj, p, count);
1437 + if (bytes < 0)
1438 + goto err;
1439 bytes = simple_read_from_buffer(userbuf, count, ppos, buf, bytes);
1440
1441 +err:
1442 mutex_unlock(&iommu_debug_lock);
1443 kfree(buf);
1444
1445 diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
1446 index aa84e5b375931..7d3f23bad88dd 100644
1447 --- a/drivers/leds/led-class.c
1448 +++ b/drivers/leds/led-class.c
1449 @@ -110,6 +110,7 @@ void led_classdev_suspend(struct led_classdev *led_cdev)
1450 {
1451 led_cdev->flags |= LED_SUSPENDED;
1452 led_set_brightness_nopm(led_cdev, 0);
1453 + flush_work(&led_cdev->set_brightness_work);
1454 }
1455 EXPORT_SYMBOL_GPL(led_classdev_suspend);
1456
1457 diff --git a/drivers/leds/leds-88pm860x.c b/drivers/leds/leds-88pm860x.c
1458 index 77a104d2b1243..13f414ff6fd00 100644
1459 --- a/drivers/leds/leds-88pm860x.c
1460 +++ b/drivers/leds/leds-88pm860x.c
1461 @@ -207,21 +207,33 @@ static int pm860x_led_probe(struct platform_device *pdev)
1462 data->cdev.brightness_set_blocking = pm860x_led_set;
1463 mutex_init(&data->lock);
1464
1465 - ret = devm_led_classdev_register(chip->dev, &data->cdev);
1466 + ret = led_classdev_register(chip->dev, &data->cdev);
1467 if (ret < 0) {
1468 dev_err(&pdev->dev, "Failed to register LED: %d\n", ret);
1469 return ret;
1470 }
1471 pm860x_led_set(&data->cdev, 0);
1472 +
1473 + platform_set_drvdata(pdev, data);
1474 +
1475 return 0;
1476 }
1477
1478 +static int pm860x_led_remove(struct platform_device *pdev)
1479 +{
1480 + struct pm860x_led *data = platform_get_drvdata(pdev);
1481 +
1482 + led_classdev_unregister(&data->cdev);
1483 +
1484 + return 0;
1485 +}
1486
1487 static struct platform_driver pm860x_led_driver = {
1488 .driver = {
1489 .name = "88pm860x-led",
1490 },
1491 .probe = pm860x_led_probe,
1492 + .remove = pm860x_led_remove,
1493 };
1494
1495 module_platform_driver(pm860x_led_driver);
1496 diff --git a/drivers/leds/leds-da903x.c b/drivers/leds/leds-da903x.c
1497 index 5ff7d72f73aa4..ecc265bb69a02 100644
1498 --- a/drivers/leds/leds-da903x.c
1499 +++ b/drivers/leds/leds-da903x.c
1500 @@ -113,12 +113,23 @@ static int da903x_led_probe(struct platform_device *pdev)
1501 led->flags = pdata->flags;
1502 led->master = pdev->dev.parent;
1503
1504 - ret = devm_led_classdev_register(led->master, &led->cdev);
1505 + ret = led_classdev_register(led->master, &led->cdev);
1506 if (ret) {
1507 dev_err(&pdev->dev, "failed to register LED %d\n", id);
1508 return ret;
1509 }
1510
1511 + platform_set_drvdata(pdev, led);
1512 +
1513 + return 0;
1514 +}
1515 +
1516 +static int da903x_led_remove(struct platform_device *pdev)
1517 +{
1518 + struct da903x_led *led = platform_get_drvdata(pdev);
1519 +
1520 + led_classdev_unregister(&led->cdev);
1521 +
1522 return 0;
1523 }
1524
1525 @@ -127,6 +138,7 @@ static struct platform_driver da903x_led_driver = {
1526 .name = "da903x-led",
1527 },
1528 .probe = da903x_led_probe,
1529 + .remove = da903x_led_remove,
1530 };
1531
1532 module_platform_driver(da903x_led_driver);
1533 diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c
1534 index 5b529dc013d29..3d147489fc452 100644
1535 --- a/drivers/leds/leds-lm3533.c
1536 +++ b/drivers/leds/leds-lm3533.c
1537 @@ -698,7 +698,7 @@ static int lm3533_led_probe(struct platform_device *pdev)
1538
1539 platform_set_drvdata(pdev, led);
1540
1541 - ret = devm_led_classdev_register(pdev->dev.parent, &led->cdev);
1542 + ret = led_classdev_register(pdev->dev.parent, &led->cdev);
1543 if (ret) {
1544 dev_err(&pdev->dev, "failed to register LED %d\n", pdev->id);
1545 return ret;
1546 @@ -708,13 +708,18 @@ static int lm3533_led_probe(struct platform_device *pdev)
1547
1548 ret = lm3533_led_setup(led, pdata);
1549 if (ret)
1550 - return ret;
1551 + goto err_deregister;
1552
1553 ret = lm3533_ctrlbank_enable(&led->cb);
1554 if (ret)
1555 - return ret;
1556 + goto err_deregister;
1557
1558 return 0;
1559 +
1560 +err_deregister:
1561 + led_classdev_unregister(&led->cdev);
1562 +
1563 + return ret;
1564 }
1565
1566 static int lm3533_led_remove(struct platform_device *pdev)
1567 @@ -724,6 +729,7 @@ static int lm3533_led_remove(struct platform_device *pdev)
1568 dev_dbg(&pdev->dev, "%s\n", __func__);
1569
1570 lm3533_ctrlbank_disable(&led->cb);
1571 + led_classdev_unregister(&led->cdev);
1572
1573 return 0;
1574 }
1575 diff --git a/drivers/leds/leds-lm355x.c b/drivers/leds/leds-lm355x.c
1576 index 6cb94f9a2f3f3..b9c60dd2b1327 100644
1577 --- a/drivers/leds/leds-lm355x.c
1578 +++ b/drivers/leds/leds-lm355x.c
1579 @@ -168,18 +168,19 @@ static int lm355x_chip_init(struct lm355x_chip_data *chip)
1580 /* input and output pins configuration */
1581 switch (chip->type) {
1582 case CHIP_LM3554:
1583 - reg_val = pdata->pin_tx2 | pdata->ntc_pin;
1584 + reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin;
1585 ret = regmap_update_bits(chip->regmap, 0xE0, 0x28, reg_val);
1586 if (ret < 0)
1587 goto out;
1588 - reg_val = pdata->pass_mode;
1589 + reg_val = (u32)pdata->pass_mode;
1590 ret = regmap_update_bits(chip->regmap, 0xA0, 0x04, reg_val);
1591 if (ret < 0)
1592 goto out;
1593 break;
1594
1595 case CHIP_LM3556:
1596 - reg_val = pdata->pin_tx2 | pdata->ntc_pin | pdata->pass_mode;
1597 + reg_val = (u32)pdata->pin_tx2 | (u32)pdata->ntc_pin |
1598 + (u32)pdata->pass_mode;
1599 ret = regmap_update_bits(chip->regmap, 0x0A, 0xC4, reg_val);
1600 if (ret < 0)
1601 goto out;
1602 diff --git a/drivers/leds/leds-wm831x-status.c b/drivers/leds/leds-wm831x-status.c
1603 index be93b20e792a7..4f0ba19c35773 100644
1604 --- a/drivers/leds/leds-wm831x-status.c
1605 +++ b/drivers/leds/leds-wm831x-status.c
1606 @@ -283,12 +283,23 @@ static int wm831x_status_probe(struct platform_device *pdev)
1607 drvdata->cdev.blink_set = wm831x_status_blink_set;
1608 drvdata->cdev.groups = wm831x_status_groups;
1609
1610 - ret = devm_led_classdev_register(wm831x->dev, &drvdata->cdev);
1611 + ret = led_classdev_register(wm831x->dev, &drvdata->cdev);
1612 if (ret < 0) {
1613 dev_err(&pdev->dev, "Failed to register LED: %d\n", ret);
1614 return ret;
1615 }
1616
1617 + platform_set_drvdata(pdev, drvdata);
1618 +
1619 + return 0;
1620 +}
1621 +
1622 +static int wm831x_status_remove(struct platform_device *pdev)
1623 +{
1624 + struct wm831x_status *drvdata = platform_get_drvdata(pdev);
1625 +
1626 + led_classdev_unregister(&drvdata->cdev);
1627 +
1628 return 0;
1629 }
1630
1631 @@ -297,6 +308,7 @@ static struct platform_driver wm831x_status_driver = {
1632 .name = "wm831x-status",
1633 },
1634 .probe = wm831x_status_probe,
1635 + .remove = wm831x_status_remove,
1636 };
1637
1638 module_platform_driver(wm831x_status_driver);
1639 diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
1640 index 158eae17031c4..1440436214291 100644
1641 --- a/drivers/md/bcache/bset.c
1642 +++ b/drivers/md/bcache/bset.c
1643 @@ -317,7 +317,7 @@ int bch_btree_keys_alloc(struct btree_keys *b, unsigned page_order, gfp_t gfp)
1644
1645 b->page_order = page_order;
1646
1647 - t->data = (void *) __get_free_pages(gfp, b->page_order);
1648 + t->data = (void *) __get_free_pages(__GFP_COMP|gfp, b->page_order);
1649 if (!t->data)
1650 goto err;
1651
1652 diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
1653 index 12849829077dd..764d519a7f1c6 100644
1654 --- a/drivers/md/bcache/btree.c
1655 +++ b/drivers/md/bcache/btree.c
1656 @@ -790,7 +790,7 @@ int bch_btree_cache_alloc(struct cache_set *c)
1657 mutex_init(&c->verify_lock);
1658
1659 c->verify_ondisk = (void *)
1660 - __get_free_pages(GFP_KERNEL, ilog2(bucket_pages(c)));
1661 + __get_free_pages(GFP_KERNEL|__GFP_COMP, ilog2(bucket_pages(c)));
1662
1663 c->verify_data = mca_bucket_alloc(c, &ZERO_KEY, GFP_KERNEL);
1664
1665 diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
1666 index 6ee5370eb9169..423cb1a310d62 100644
1667 --- a/drivers/md/bcache/journal.c
1668 +++ b/drivers/md/bcache/journal.c
1669 @@ -839,8 +839,8 @@ int bch_journal_alloc(struct cache_set *c)
1670 j->w[1].c = c;
1671
1672 if (!(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) ||
1673 - !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)) ||
1674 - !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)))
1675 + !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS)) ||
1676 + !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS)))
1677 return -ENOMEM;
1678
1679 return 0;
1680 diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
1681 index 526e9d5a4fb16..95e9a33de06a2 100644
1682 --- a/drivers/md/bcache/super.c
1683 +++ b/drivers/md/bcache/super.c
1684 @@ -1468,7 +1468,7 @@ void bch_cache_set_unregister(struct cache_set *c)
1685 }
1686
1687 #define alloc_bucket_pages(gfp, c) \
1688 - ((void *) __get_free_pages(__GFP_ZERO|gfp, ilog2(bucket_pages(c))))
1689 + ((void *) __get_free_pages(__GFP_ZERO|__GFP_COMP|gfp, ilog2(bucket_pages(c))))
1690
1691 struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
1692 {
1693 @@ -1778,7 +1778,14 @@ found:
1694 sysfs_create_link(&c->kobj, &ca->kobj, buf))
1695 goto err;
1696
1697 - if (ca->sb.seq > c->sb.seq) {
1698 + /*
1699 + * A special case is both ca->sb.seq and c->sb.seq are 0,
1700 + * such condition happens on a new created cache device whose
1701 + * super block is never flushed yet. In this case c->sb.version
1702 + * and other members should be updated too, otherwise we will
1703 + * have a mistaken super block version in cache set.
1704 + */
1705 + if (ca->sb.seq > c->sb.seq || c->sb.seq == 0) {
1706 c->sb.version = ca->sb.version;
1707 memcpy(c->sb.set_uuid, ca->sb.set_uuid, 16);
1708 c->sb.flags = ca->sb.flags;
1709 diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
1710 index e870b09b2c84d..d08c63aaf10bb 100644
1711 --- a/drivers/md/md-cluster.c
1712 +++ b/drivers/md/md-cluster.c
1713 @@ -1234,6 +1234,7 @@ static void unlock_all_bitmaps(struct mddev *mddev)
1714 }
1715 }
1716 kfree(cinfo->other_bitmap_lockres);
1717 + cinfo->other_bitmap_lockres = NULL;
1718 }
1719 }
1720
1721 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1722 index 1143860f00283..30a853b187802 100644
1723 --- a/drivers/md/raid5.c
1724 +++ b/drivers/md/raid5.c
1725 @@ -3364,6 +3364,7 @@ static int need_this_block(struct stripe_head *sh, struct stripe_head_state *s,
1726 * is missing/faulty, then we need to read everything we can.
1727 */
1728 if (sh->raid_conf->level != 6 &&
1729 + sh->raid_conf->rmw_level != PARITY_DISABLE_RMW &&
1730 sh->sector < sh->raid_conf->mddev->recovery_cp)
1731 /* reconstruct-write isn't being forced */
1732 return 0;
1733 @@ -4498,7 +4499,7 @@ static void handle_stripe(struct stripe_head *sh)
1734 * or to load a block that is being partially written.
1735 */
1736 if (s.to_read || s.non_overwrite
1737 - || (conf->level == 6 && s.to_write && s.failed)
1738 + || (s.to_write && s.failed)
1739 || (s.syncing && (s.uptodate + s.compute < disks))
1740 || s.replacing
1741 || s.expanding)
1742 diff --git a/drivers/media/firewire/firedtv-fw.c b/drivers/media/firewire/firedtv-fw.c
1743 index 247f0e7cb5f7f..5d634706a7eaa 100644
1744 --- a/drivers/media/firewire/firedtv-fw.c
1745 +++ b/drivers/media/firewire/firedtv-fw.c
1746 @@ -271,6 +271,8 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
1747
1748 name_len = fw_csr_string(unit->directory, CSR_MODEL,
1749 name, sizeof(name));
1750 + if (name_len < 0)
1751 + return name_len;
1752 for (i = ARRAY_SIZE(model_names); --i; )
1753 if (strlen(model_names[i]) <= name_len &&
1754 strncmp(name, model_names[i], name_len) == 0)
1755 diff --git a/drivers/media/pci/cx23885/cx23888-ir.c b/drivers/media/pci/cx23885/cx23888-ir.c
1756 index c1aa888af7054..83864a99d3a66 100644
1757 --- a/drivers/media/pci/cx23885/cx23888-ir.c
1758 +++ b/drivers/media/pci/cx23885/cx23888-ir.c
1759 @@ -1179,8 +1179,11 @@ int cx23888_ir_probe(struct cx23885_dev *dev)
1760 return -ENOMEM;
1761
1762 spin_lock_init(&state->rx_kfifo_lock);
1763 - if (kfifo_alloc(&state->rx_kfifo, CX23888_IR_RX_KFIFO_SIZE, GFP_KERNEL))
1764 + if (kfifo_alloc(&state->rx_kfifo, CX23888_IR_RX_KFIFO_SIZE,
1765 + GFP_KERNEL)) {
1766 + kfree(state);
1767 return -ENOMEM;
1768 + }
1769
1770 state->dev = dev;
1771 sd = &state->sd;
1772 diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c
1773 index ef6ccb5b89525..cdaf3a8e2555e 100644
1774 --- a/drivers/media/platform/exynos4-is/media-dev.c
1775 +++ b/drivers/media/platform/exynos4-is/media-dev.c
1776 @@ -1257,6 +1257,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd)
1777
1778 pctl->state_idle = pinctrl_lookup_state(pctl->pinctrl,
1779 PINCTRL_STATE_IDLE);
1780 + if (IS_ERR(pctl->state_idle))
1781 + return PTR_ERR(pctl->state_idle);
1782 +
1783 return 0;
1784 }
1785
1786 diff --git a/drivers/media/platform/omap3isp/isppreview.c b/drivers/media/platform/omap3isp/isppreview.c
1787 index e981eb2330f18..ac005ae4d21b4 100644
1788 --- a/drivers/media/platform/omap3isp/isppreview.c
1789 +++ b/drivers/media/platform/omap3isp/isppreview.c
1790 @@ -2290,7 +2290,7 @@ static int preview_init_entities(struct isp_prev_device *prev)
1791 me->ops = &preview_media_ops;
1792 ret = media_entity_pads_init(me, PREV_PADS_NUM, pads);
1793 if (ret < 0)
1794 - return ret;
1795 + goto error_handler_free;
1796
1797 preview_init_formats(sd, NULL);
1798
1799 @@ -2323,6 +2323,8 @@ error_video_out:
1800 omap3isp_video_cleanup(&prev->video_in);
1801 error_video_in:
1802 media_entity_cleanup(&prev->subdev.entity);
1803 +error_handler_free:
1804 + v4l2_ctrl_handler_free(&prev->ctrls);
1805 return ret;
1806 }
1807
1808 diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
1809 index 1f0c2b594654e..3382845d4b67d 100644
1810 --- a/drivers/mfd/arizona-core.c
1811 +++ b/drivers/mfd/arizona-core.c
1812 @@ -1537,6 +1537,15 @@ err_irq:
1813 arizona_irq_exit(arizona);
1814 err_pm:
1815 pm_runtime_disable(arizona->dev);
1816 +
1817 + switch (arizona->pdata.clk32k_src) {
1818 + case ARIZONA_32KZ_MCLK1:
1819 + case ARIZONA_32KZ_MCLK2:
1820 + arizona_clk32k_disable(arizona);
1821 + break;
1822 + default:
1823 + break;
1824 + }
1825 err_reset:
1826 arizona_enable_reset(arizona);
1827 regulator_disable(arizona->dcvdd);
1828 @@ -1558,6 +1567,15 @@ int arizona_dev_exit(struct arizona *arizona)
1829 regulator_disable(arizona->dcvdd);
1830 regulator_put(arizona->dcvdd);
1831
1832 + switch (arizona->pdata.clk32k_src) {
1833 + case ARIZONA_32KZ_MCLK1:
1834 + case ARIZONA_32KZ_MCLK2:
1835 + arizona_clk32k_disable(arizona);
1836 + break;
1837 + default:
1838 + break;
1839 + }
1840 +
1841 mfd_remove_devices(arizona->dev);
1842 arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona);
1843 arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona);
1844 diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c
1845 index 672831d5ee32e..97a69cd6f1278 100644
1846 --- a/drivers/mfd/dln2.c
1847 +++ b/drivers/mfd/dln2.c
1848 @@ -294,7 +294,11 @@ static void dln2_rx(struct urb *urb)
1849 len = urb->actual_length - sizeof(struct dln2_header);
1850
1851 if (handle == DLN2_HANDLE_EVENT) {
1852 + unsigned long flags;
1853 +
1854 + spin_lock_irqsave(&dln2->event_cb_lock, flags);
1855 dln2_run_event_callbacks(dln2, id, echo, data, len);
1856 + spin_unlock_irqrestore(&dln2->event_cb_lock, flags);
1857 } else {
1858 /* URB will be re-submitted in _dln2_transfer (free_rx_slot) */
1859 if (dln2_transfer_complete(dln2, urb, handle, echo))
1860 diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c
1861 index a8b6d6a635e96..e97b3b26805d1 100644
1862 --- a/drivers/misc/cxl/sysfs.c
1863 +++ b/drivers/misc/cxl/sysfs.c
1864 @@ -598,7 +598,7 @@ static struct afu_config_record *cxl_sysfs_afu_new_cr(struct cxl_afu *afu, int c
1865 rc = kobject_init_and_add(&cr->kobj, &afu_config_record_type,
1866 &afu->dev.kobj, "cr%i", cr->cr);
1867 if (rc)
1868 - goto err;
1869 + goto err1;
1870
1871 rc = sysfs_create_bin_file(&cr->kobj, &cr->config_attr);
1872 if (rc)
1873 diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
1874 index 95b6a6640bca4..331183548bc58 100644
1875 --- a/drivers/mtd/mtdchar.c
1876 +++ b/drivers/mtd/mtdchar.c
1877 @@ -372,9 +372,6 @@ static int mtdchar_writeoob(struct file *file, struct mtd_info *mtd,
1878 uint32_t retlen;
1879 int ret = 0;
1880
1881 - if (!(file->f_mode & FMODE_WRITE))
1882 - return -EPERM;
1883 -
1884 if (length > 4096)
1885 return -EINVAL;
1886
1887 @@ -681,6 +678,48 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
1888 return -EFAULT;
1889 }
1890
1891 + /*
1892 + * Check the file mode to require "dangerous" commands to have write
1893 + * permissions.
1894 + */
1895 + switch (cmd) {
1896 + /* "safe" commands */
1897 + case MEMGETREGIONCOUNT:
1898 + case MEMGETREGIONINFO:
1899 + case MEMGETINFO:
1900 + case MEMREADOOB:
1901 + case MEMREADOOB64:
1902 + case MEMLOCK:
1903 + case MEMUNLOCK:
1904 + case MEMISLOCKED:
1905 + case MEMGETOOBSEL:
1906 + case MEMGETBADBLOCK:
1907 + case MEMSETBADBLOCK:
1908 + case OTPSELECT:
1909 + case OTPGETREGIONCOUNT:
1910 + case OTPGETREGIONINFO:
1911 + case OTPLOCK:
1912 + case ECCGETLAYOUT:
1913 + case ECCGETSTATS:
1914 + case MTDFILEMODE:
1915 + case BLKPG:
1916 + case BLKRRPART:
1917 + break;
1918 +
1919 + /* "dangerous" commands */
1920 + case MEMERASE:
1921 + case MEMERASE64:
1922 + case MEMWRITEOOB:
1923 + case MEMWRITEOOB64:
1924 + case MEMWRITE:
1925 + if (!(file->f_mode & FMODE_WRITE))
1926 + return -EPERM;
1927 + break;
1928 +
1929 + default:
1930 + return -ENOTTY;
1931 + }
1932 +
1933 switch (cmd) {
1934 case MEMGETREGIONCOUNT:
1935 if (copy_to_user(argp, &(mtd->numeraseregions), sizeof(int)))
1936 @@ -728,9 +767,6 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
1937 {
1938 struct erase_info *erase;
1939
1940 - if(!(file->f_mode & FMODE_WRITE))
1941 - return -EPERM;
1942 -
1943 erase=kzalloc(sizeof(struct erase_info),GFP_KERNEL);
1944 if (!erase)
1945 ret = -ENOMEM;
1946 @@ -1051,9 +1087,6 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
1947 ret = 0;
1948 break;
1949 }
1950 -
1951 - default:
1952 - ret = -ENOTTY;
1953 }
1954
1955 return ret;
1956 @@ -1097,6 +1130,11 @@ static long mtdchar_compat_ioctl(struct file *file, unsigned int cmd,
1957 struct mtd_oob_buf32 buf;
1958 struct mtd_oob_buf32 __user *buf_user = argp;
1959
1960 + if (!(file->f_mode & FMODE_WRITE)) {
1961 + ret = -EPERM;
1962 + break;
1963 + }
1964 +
1965 if (copy_from_user(&buf, argp, sizeof(buf)))
1966 ret = -EFAULT;
1967 else
1968 diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c
1969 index 380c4a2f65161..6a11f9916116c 100644
1970 --- a/drivers/net/ethernet/freescale/fman/fman.c
1971 +++ b/drivers/net/ethernet/freescale/fman/fman.c
1972 @@ -1446,8 +1446,7 @@ static void enable_time_stamp(struct fman *fman)
1973 {
1974 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1975 u16 fm_clk_freq = fman->state->fm_clk_freq;
1976 - u32 tmp, intgr, ts_freq;
1977 - u64 frac;
1978 + u32 tmp, intgr, ts_freq, frac;
1979
1980 ts_freq = (u32)(1 << fman->state->count1_micro_bit);
1981 /* configure timestamp so that bit 8 will count 1 microsecond
1982 diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
1983 index 641b916f122ba..332b60f03d225 100644
1984 --- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
1985 +++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
1986 @@ -1095,7 +1095,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
1987 list_for_each(pos,
1988 &dtsec->multicast_addr_hash->lsts[bucket]) {
1989 hash_entry = ETH_HASH_ENTRY_OBJ(pos);
1990 - if (hash_entry->addr == addr) {
1991 + if (hash_entry && hash_entry->addr == addr) {
1992 list_del_init(&hash_entry->node);
1993 kfree(hash_entry);
1994 break;
1995 @@ -1108,7 +1108,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
1996 list_for_each(pos,
1997 &dtsec->unicast_addr_hash->lsts[bucket]) {
1998 hash_entry = ETH_HASH_ENTRY_OBJ(pos);
1999 - if (hash_entry->addr == addr) {
2000 + if (hash_entry && hash_entry->addr == addr) {
2001 list_del_init(&hash_entry->node);
2002 kfree(hash_entry);
2003 break;
2004 diff --git a/drivers/net/ethernet/freescale/fman/fman_mac.h b/drivers/net/ethernet/freescale/fman/fman_mac.h
2005 index dd6d0526f6c1f..19f327efdaff3 100644
2006 --- a/drivers/net/ethernet/freescale/fman/fman_mac.h
2007 +++ b/drivers/net/ethernet/freescale/fman/fman_mac.h
2008 @@ -252,7 +252,7 @@ static inline struct eth_hash_t *alloc_hash_table(u16 size)
2009 struct eth_hash_t *hash;
2010
2011 /* Allocate address hash table */
2012 - hash = kmalloc_array(size, sizeof(struct eth_hash_t *), GFP_KERNEL);
2013 + hash = kmalloc(sizeof(*hash), GFP_KERNEL);
2014 if (!hash)
2015 return NULL;
2016
2017 diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
2018 index c30994a09a7c2..4b0be0cebd199 100644
2019 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c
2020 +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
2021 @@ -851,7 +851,6 @@ int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority,
2022
2023 tmp = ioread32be(&regs->command_config);
2024 tmp &= ~CMD_CFG_PFC_MODE;
2025 - priority = 0;
2026
2027 iowrite32be(tmp, &regs->command_config);
2028
2029 @@ -953,7 +952,7 @@ int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr)
2030
2031 list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) {
2032 hash_entry = ETH_HASH_ENTRY_OBJ(pos);
2033 - if (hash_entry->addr == addr) {
2034 + if (hash_entry && hash_entry->addr == addr) {
2035 list_del_init(&hash_entry->node);
2036 kfree(hash_entry);
2037 break;
2038 diff --git a/drivers/net/ethernet/freescale/fman/fman_port.c b/drivers/net/ethernet/freescale/fman/fman_port.c
2039 index 9f3bb50a23651..4986f6ba278a3 100644
2040 --- a/drivers/net/ethernet/freescale/fman/fman_port.c
2041 +++ b/drivers/net/ethernet/freescale/fman/fman_port.c
2042 @@ -1623,6 +1623,7 @@ static int fman_port_probe(struct platform_device *of_dev)
2043 struct fman_port *port;
2044 struct fman *fman;
2045 struct device_node *fm_node, *port_node;
2046 + struct platform_device *fm_pdev;
2047 struct resource res;
2048 struct resource *dev_res;
2049 u32 val;
2050 @@ -1647,8 +1648,14 @@ static int fman_port_probe(struct platform_device *of_dev)
2051 goto return_err;
2052 }
2053
2054 - fman = dev_get_drvdata(&of_find_device_by_node(fm_node)->dev);
2055 + fm_pdev = of_find_device_by_node(fm_node);
2056 of_node_put(fm_node);
2057 + if (!fm_pdev) {
2058 + err = -EINVAL;
2059 + goto return_err;
2060 + }
2061 +
2062 + fman = dev_get_drvdata(&fm_pdev->dev);
2063 if (!fman) {
2064 err = -EINVAL;
2065 goto return_err;
2066 diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c
2067 index e575259d20f40..c8ad9b8a75f8e 100644
2068 --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c
2069 +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c
2070 @@ -585,7 +585,7 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr)
2071
2072 list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) {
2073 hash_entry = ETH_HASH_ENTRY_OBJ(pos);
2074 - if (hash_entry->addr == addr) {
2075 + if (hash_entry && hash_entry->addr == addr) {
2076 list_del_init(&hash_entry->node);
2077 kfree(hash_entry);
2078 break;
2079 diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
2080 index 20f7ab4aa2f15..d25b76440c114 100644
2081 --- a/drivers/net/ethernet/ibm/ibmvnic.c
2082 +++ b/drivers/net/ethernet/ibm/ibmvnic.c
2083 @@ -1515,7 +1515,7 @@ req_rx_irq_failed:
2084 req_tx_irq_failed:
2085 for (j = 0; j < i; j++) {
2086 free_irq(adapter->tx_scrq[j]->irq, adapter->tx_scrq[j]);
2087 - irq_dispose_mapping(adapter->rx_scrq[j]->irq);
2088 + irq_dispose_mapping(adapter->tx_scrq[j]->irq);
2089 }
2090 release_sub_crqs_no_irqs(adapter);
2091 return rc;
2092 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
2093 index 90eab0521be12..43fb77c6c51ed 100644
2094 --- a/drivers/net/ethernet/intel/igb/igb_main.c
2095 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
2096 @@ -5381,9 +5381,18 @@ static void igb_reset_task(struct work_struct *work)
2097 struct igb_adapter *adapter;
2098 adapter = container_of(work, struct igb_adapter, reset_task);
2099
2100 + rtnl_lock();
2101 + /* If we're already down or resetting, just bail */
2102 + if (test_bit(__IGB_DOWN, &adapter->state) ||
2103 + test_bit(__IGB_RESETTING, &adapter->state)) {
2104 + rtnl_unlock();
2105 + return;
2106 + }
2107 +
2108 igb_dump(adapter);
2109 netdev_err(adapter->netdev, "Reset adapter\n");
2110 igb_reinit_locked(adapter);
2111 + rtnl_unlock();
2112 }
2113
2114 /**
2115 diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
2116 index 751aac54f2d55..9b6a96074df80 100644
2117 --- a/drivers/net/ethernet/mellanox/mlx4/main.c
2118 +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
2119 @@ -4176,12 +4176,14 @@ end:
2120 static void mlx4_shutdown(struct pci_dev *pdev)
2121 {
2122 struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
2123 + struct mlx4_dev *dev = persist->dev;
2124
2125 mlx4_info(persist->dev, "mlx4_shutdown was called\n");
2126 mutex_lock(&persist->interface_state_mutex);
2127 if (persist->interface_state & MLX4_INTERFACE_STATE_UP)
2128 mlx4_unload_one(pdev);
2129 mutex_unlock(&persist->interface_state_mutex);
2130 + mlx4_pci_disable_device(dev);
2131 }
2132
2133 static const struct pci_error_handlers mlx4_err_handler = {
2134 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
2135 index b210c171a3806..f3d3ad25f05e9 100644
2136 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
2137 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
2138 @@ -139,7 +139,7 @@ int mlx5e_attr_get(struct net_device *dev, struct switchdev_attr *attr)
2139 struct mlx5_eswitch_rep *rep = priv->ppriv;
2140 struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
2141
2142 - if (esw->mode == SRIOV_NONE)
2143 + if (esw->mode != SRIOV_OFFLOADS)
2144 return -EOPNOTSUPP;
2145
2146 switch (attr->id) {
2147 diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
2148 index aa33d58b9f81c..808d924dbe21e 100644
2149 --- a/drivers/net/ethernet/mellanox/mlxsw/core.c
2150 +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
2151 @@ -1370,7 +1370,7 @@ static int mlxsw_core_reg_access_emad(struct mlxsw_core *mlxsw_core,
2152 err = mlxsw_emad_reg_access(mlxsw_core, reg, payload, type, trans,
2153 bulk_list, cb, cb_priv, tid);
2154 if (err) {
2155 - kfree(trans);
2156 + kfree_rcu(trans, rcu);
2157 return err;
2158 }
2159 return 0;
2160 @@ -1584,9 +1584,10 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
2161 break;
2162 }
2163 }
2164 - rcu_read_unlock();
2165 - if (!found)
2166 + if (!found) {
2167 + rcu_read_unlock();
2168 goto drop;
2169 + }
2170
2171 pcpu_stats = this_cpu_ptr(mlxsw_core->pcpu_stats);
2172 u64_stats_update_begin(&pcpu_stats->syncp);
2173 @@ -1597,6 +1598,7 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
2174 u64_stats_update_end(&pcpu_stats->syncp);
2175
2176 rxl->func(skb, local_port, rxl_item->priv);
2177 + rcu_read_unlock();
2178 return;
2179
2180 drop:
2181 diff --git a/drivers/net/ethernet/qlogic/qed/qed_int.c b/drivers/net/ethernet/qlogic/qed/qed_int.c
2182 index fd19372db2f86..6e1d38041d0ac 100644
2183 --- a/drivers/net/ethernet/qlogic/qed/qed_int.c
2184 +++ b/drivers/net/ethernet/qlogic/qed/qed_int.c
2185 @@ -2158,7 +2158,8 @@ static int qed_int_attentions(struct qed_hwfn *p_hwfn)
2186 index, attn_bits, attn_acks, asserted_bits,
2187 deasserted_bits, p_sb_attn_sw->known_attn);
2188 } else if (asserted_bits == 0x100) {
2189 - DP_INFO(p_hwfn, "MFW indication via attention\n");
2190 + DP_VERBOSE(p_hwfn, NETIF_MSG_INTR,
2191 + "MFW indication via attention\n");
2192 } else {
2193 DP_VERBOSE(p_hwfn, NETIF_MSG_INTR,
2194 "MFW indication [deassertion]\n");
2195 diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c
2196 index 57b35aeac51a0..adc088033c15d 100644
2197 --- a/drivers/net/ethernet/qualcomm/emac/emac.c
2198 +++ b/drivers/net/ethernet/qualcomm/emac/emac.c
2199 @@ -477,13 +477,24 @@ static int emac_clks_phase1_init(struct platform_device *pdev,
2200
2201 ret = clk_prepare_enable(adpt->clk[EMAC_CLK_CFG_AHB]);
2202 if (ret)
2203 - return ret;
2204 + goto disable_clk_axi;
2205
2206 ret = clk_set_rate(adpt->clk[EMAC_CLK_HIGH_SPEED], 19200000);
2207 if (ret)
2208 - return ret;
2209 + goto disable_clk_cfg_ahb;
2210 +
2211 + ret = clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]);
2212 + if (ret)
2213 + goto disable_clk_cfg_ahb;
2214
2215 - return clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]);
2216 + return 0;
2217 +
2218 +disable_clk_cfg_ahb:
2219 + clk_disable_unprepare(adpt->clk[EMAC_CLK_CFG_AHB]);
2220 +disable_clk_axi:
2221 + clk_disable_unprepare(adpt->clk[EMAC_CLK_AXI]);
2222 +
2223 + return ret;
2224 }
2225
2226 /* Enable clocks; needs emac_clks_phase1_init to be called before */
2227 diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
2228 index 545cb6262cffd..93d3152752ff4 100644
2229 --- a/drivers/net/ethernet/renesas/ravb_main.c
2230 +++ b/drivers/net/ethernet/renesas/ravb_main.c
2231 @@ -1444,6 +1444,7 @@ static void ravb_tx_timeout_work(struct work_struct *work)
2232 struct ravb_private *priv = container_of(work, struct ravb_private,
2233 work);
2234 struct net_device *ndev = priv->ndev;
2235 + int error;
2236
2237 netif_tx_stop_all_queues(ndev);
2238
2239 @@ -1452,15 +1453,36 @@ static void ravb_tx_timeout_work(struct work_struct *work)
2240 ravb_ptp_stop(ndev);
2241
2242 /* Wait for DMA stopping */
2243 - ravb_stop_dma(ndev);
2244 + if (ravb_stop_dma(ndev)) {
2245 + /* If ravb_stop_dma() fails, the hardware is still operating
2246 + * for TX and/or RX. So, this should not call the following
2247 + * functions because ravb_dmac_init() is possible to fail too.
2248 + * Also, this should not retry ravb_stop_dma() again and again
2249 + * here because it's possible to wait forever. So, this just
2250 + * re-enables the TX and RX and skip the following
2251 + * re-initialization procedure.
2252 + */
2253 + ravb_rcv_snd_enable(ndev);
2254 + goto out;
2255 + }
2256
2257 ravb_ring_free(ndev, RAVB_BE);
2258 ravb_ring_free(ndev, RAVB_NC);
2259
2260 /* Device init */
2261 - ravb_dmac_init(ndev);
2262 + error = ravb_dmac_init(ndev);
2263 + if (error) {
2264 + /* If ravb_dmac_init() fails, descriptors are freed. So, this
2265 + * should return here to avoid re-enabling the TX and RX in
2266 + * ravb_emac_init().
2267 + */
2268 + netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n",
2269 + __func__, error);
2270 + return;
2271 + }
2272 ravb_emac_init(ndev);
2273
2274 +out:
2275 /* Initialise PTP Clock driver */
2276 if (priv->chip_id == RCAR_GEN2)
2277 ravb_ptp_init(ndev, priv->pdev);
2278 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
2279 index bcc5d1e16ce2c..1924788d28da0 100644
2280 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
2281 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
2282 @@ -362,6 +362,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
2283 plat_dat->has_gmac = true;
2284 plat_dat->bsp_priv = gmac;
2285 plat_dat->fix_mac_speed = ipq806x_gmac_fix_mac_speed;
2286 + plat_dat->multicast_filter_bins = 0;
2287
2288 err = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
2289 if (err)
2290 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
2291 index 3a2edf9f51e22..bd265eb36e70c 100644
2292 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
2293 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
2294 @@ -172,6 +172,9 @@ static void dwmac1000_set_filter(struct mac_device_info *hw,
2295 value = GMAC_FRAME_FILTER_PR;
2296 } else if (dev->flags & IFF_ALLMULTI) {
2297 value = GMAC_FRAME_FILTER_PM; /* pass all multi */
2298 + } else if (!netdev_mc_empty(dev) && (mcbitslog2 == 0)) {
2299 + /* Fall back to all multicast if we've no filter */
2300 + value = GMAC_FRAME_FILTER_PM;
2301 } else if (!netdev_mc_empty(dev)) {
2302 struct netdev_hw_addr *ha;
2303
2304 diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c
2305 index 1085987946212..9507ca2e02acd 100644
2306 --- a/drivers/net/ethernet/toshiba/spider_net.c
2307 +++ b/drivers/net/ethernet/toshiba/spider_net.c
2308 @@ -296,8 +296,8 @@ spider_net_free_chain(struct spider_net_card *card,
2309 descr = descr->next;
2310 } while (descr != chain->ring);
2311
2312 - dma_free_coherent(&card->pdev->dev, chain->num_desc,
2313 - chain->hwring, chain->dma_addr);
2314 + dma_free_coherent(&card->pdev->dev, chain->num_desc * sizeof(struct spider_net_hw_descr),
2315 + chain->hwring, chain->dma_addr);
2316 }
2317
2318 /**
2319 diff --git a/drivers/net/phy/mdio-bcm-unimac.c b/drivers/net/phy/mdio-bcm-unimac.c
2320 index 8c73b2e771ddd..e6ff731d753d9 100644
2321 --- a/drivers/net/phy/mdio-bcm-unimac.c
2322 +++ b/drivers/net/phy/mdio-bcm-unimac.c
2323 @@ -177,6 +177,8 @@ static int unimac_mdio_probe(struct platform_device *pdev)
2324 return -ENOMEM;
2325
2326 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2327 + if (!r)
2328 + return -EINVAL;
2329
2330 /* Just ioremap, as this MDIO block is usually integrated into an
2331 * Ethernet MAC controller register range
2332 diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
2333 index 27fc699d8be5b..c4b4c2c347647 100644
2334 --- a/drivers/net/usb/hso.c
2335 +++ b/drivers/net/usb/hso.c
2336 @@ -1404,8 +1404,9 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old)
2337 unsigned long flags;
2338
2339 if (old)
2340 - hso_dbg(0x16, "Termios called with: cflags new[%d] - old[%d]\n",
2341 - tty->termios.c_cflag, old->c_cflag);
2342 + hso_dbg(0x16, "Termios called with: cflags new[%u] - old[%u]\n",
2343 + (unsigned int)tty->termios.c_cflag,
2344 + (unsigned int)old->c_cflag);
2345
2346 /* the actual setup */
2347 spin_lock_irqsave(&serial->serial_lock, flags);
2348 @@ -2273,12 +2274,14 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
2349
2350 minor = get_free_serial_index();
2351 if (minor < 0)
2352 - goto exit;
2353 + goto exit2;
2354
2355 /* register our minor number */
2356 serial->parent->dev = tty_port_register_device_attr(&serial->port,
2357 tty_drv, minor, &serial->parent->interface->dev,
2358 serial->parent, hso_serial_dev_groups);
2359 + if (IS_ERR(serial->parent->dev))
2360 + goto exit2;
2361 dev = serial->parent->dev;
2362
2363 /* fill in specific data for later use */
2364 @@ -2324,6 +2327,7 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
2365 return 0;
2366 exit:
2367 hso_serial_tty_unregister(serial);
2368 +exit2:
2369 hso_serial_common_free(serial);
2370 return -1;
2371 }
2372 diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
2373 index 65e94dffaabc9..bca6237597233 100644
2374 --- a/drivers/net/usb/lan78xx.c
2375 +++ b/drivers/net/usb/lan78xx.c
2376 @@ -315,10 +315,6 @@ struct lan78xx_net {
2377 struct tasklet_struct bh;
2378 struct delayed_work wq;
2379
2380 - struct usb_host_endpoint *ep_blkin;
2381 - struct usb_host_endpoint *ep_blkout;
2382 - struct usb_host_endpoint *ep_intr;
2383 -
2384 int msg_enable;
2385
2386 struct urb *urb_intr;
2387 @@ -2554,78 +2550,12 @@ lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
2388 return NETDEV_TX_OK;
2389 }
2390
2391 -static int
2392 -lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf)
2393 -{
2394 - int tmp;
2395 - struct usb_host_interface *alt = NULL;
2396 - struct usb_host_endpoint *in = NULL, *out = NULL;
2397 - struct usb_host_endpoint *status = NULL;
2398 -
2399 - for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
2400 - unsigned ep;
2401 -
2402 - in = NULL;
2403 - out = NULL;
2404 - status = NULL;
2405 - alt = intf->altsetting + tmp;
2406 -
2407 - for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
2408 - struct usb_host_endpoint *e;
2409 - int intr = 0;
2410 -
2411 - e = alt->endpoint + ep;
2412 - switch (e->desc.bmAttributes) {
2413 - case USB_ENDPOINT_XFER_INT:
2414 - if (!usb_endpoint_dir_in(&e->desc))
2415 - continue;
2416 - intr = 1;
2417 - /* FALLTHROUGH */
2418 - case USB_ENDPOINT_XFER_BULK:
2419 - break;
2420 - default:
2421 - continue;
2422 - }
2423 - if (usb_endpoint_dir_in(&e->desc)) {
2424 - if (!intr && !in)
2425 - in = e;
2426 - else if (intr && !status)
2427 - status = e;
2428 - } else {
2429 - if (!out)
2430 - out = e;
2431 - }
2432 - }
2433 - if (in && out)
2434 - break;
2435 - }
2436 - if (!alt || !in || !out)
2437 - return -EINVAL;
2438 -
2439 - dev->pipe_in = usb_rcvbulkpipe(dev->udev,
2440 - in->desc.bEndpointAddress &
2441 - USB_ENDPOINT_NUMBER_MASK);
2442 - dev->pipe_out = usb_sndbulkpipe(dev->udev,
2443 - out->desc.bEndpointAddress &
2444 - USB_ENDPOINT_NUMBER_MASK);
2445 - dev->ep_intr = status;
2446 -
2447 - return 0;
2448 -}
2449 -
2450 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
2451 {
2452 struct lan78xx_priv *pdata = NULL;
2453 int ret;
2454 int i;
2455
2456 - ret = lan78xx_get_endpoints(dev, intf);
2457 - if (ret) {
2458 - netdev_warn(dev->net, "lan78xx_get_endpoints failed: %d\n",
2459 - ret);
2460 - return ret;
2461 - }
2462 -
2463 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
2464
2465 pdata = (struct lan78xx_priv *)(dev->data[0]);
2466 @@ -3333,6 +3263,7 @@ static void lan78xx_stat_monitor(unsigned long param)
2467 static int lan78xx_probe(struct usb_interface *intf,
2468 const struct usb_device_id *id)
2469 {
2470 + struct usb_host_endpoint *ep_blkin, *ep_blkout, *ep_intr;
2471 struct lan78xx_net *dev;
2472 struct net_device *netdev;
2473 struct usb_device *udev;
2474 @@ -3383,6 +3314,34 @@ static int lan78xx_probe(struct usb_interface *intf,
2475
2476 mutex_init(&dev->stats.access_lock);
2477
2478 + if (intf->cur_altsetting->desc.bNumEndpoints < 3) {
2479 + ret = -ENODEV;
2480 + goto out2;
2481 + }
2482 +
2483 + dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
2484 + ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in);
2485 + if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) {
2486 + ret = -ENODEV;
2487 + goto out2;
2488 + }
2489 +
2490 + dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
2491 + ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out);
2492 + if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) {
2493 + ret = -ENODEV;
2494 + goto out2;
2495 + }
2496 +
2497 + ep_intr = &intf->cur_altsetting->endpoint[2];
2498 + if (!usb_endpoint_is_int_in(&ep_intr->desc)) {
2499 + ret = -ENODEV;
2500 + goto out2;
2501 + }
2502 +
2503 + dev->pipe_intr = usb_rcvintpipe(dev->udev,
2504 + usb_endpoint_num(&ep_intr->desc));
2505 +
2506 ret = lan78xx_bind(dev, intf);
2507 if (ret < 0)
2508 goto out2;
2509 @@ -3392,18 +3351,7 @@ static int lan78xx_probe(struct usb_interface *intf,
2510 netdev->mtu = dev->hard_mtu - netdev->hard_header_len;
2511 netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);
2512
2513 - dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
2514 - dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
2515 - dev->ep_intr = (intf->cur_altsetting)->endpoint + 2;
2516 -
2517 - dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
2518 - dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
2519 -
2520 - dev->pipe_intr = usb_rcvintpipe(dev->udev,
2521 - dev->ep_intr->desc.bEndpointAddress &
2522 - USB_ENDPOINT_NUMBER_MASK);
2523 - period = dev->ep_intr->desc.bInterval;
2524 -
2525 + period = ep_intr->desc.bInterval;
2526 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
2527 buf = kmalloc(maxp, GFP_KERNEL);
2528 if (buf) {
2529 @@ -3416,6 +3364,7 @@ static int lan78xx_probe(struct usb_interface *intf,
2530 usb_fill_int_urb(dev->urb_intr, dev->udev,
2531 dev->pipe_intr, buf, maxp,
2532 intr_complete, dev, period);
2533 + dev->urb_intr->transfer_flags |= URB_FREE_BUFFER;
2534 }
2535 }
2536
2537 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
2538 index b1470d30d079f..088bb5870ac5b 100644
2539 --- a/drivers/net/vxlan.c
2540 +++ b/drivers/net/vxlan.c
2541 @@ -889,6 +889,7 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
2542 for (h = 0; h < FDB_HASH_SIZE; ++h) {
2543 struct vxlan_fdb *f;
2544
2545 + rcu_read_lock();
2546 hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) {
2547 struct vxlan_rdst *rd;
2548
2549 @@ -901,12 +902,15 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
2550 cb->nlh->nlmsg_seq,
2551 RTM_NEWNEIGH,
2552 NLM_F_MULTI, rd);
2553 - if (err < 0)
2554 + if (err < 0) {
2555 + rcu_read_unlock();
2556 goto out;
2557 + }
2558 skip:
2559 *idx += 1;
2560 }
2561 }
2562 + rcu_read_unlock();
2563 }
2564 out:
2565 return err;
2566 @@ -2106,7 +2110,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
2567 else if (info->key.tun_flags & TUNNEL_DONT_FRAGMENT)
2568 df = htons(IP_DF);
2569
2570 - tos = ip_tunnel_ecn_encap(RT_TOS(tos), old_iph, skb);
2571 + tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2572 ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
2573 err = vxlan_build_skb(skb, &rt->dst, sizeof(struct iphdr),
2574 vni, md, flags, udp_sum);
2575 @@ -2165,7 +2169,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
2576 if (!info)
2577 udp_sum = !(flags & VXLAN_F_UDP_ZERO_CSUM6_TX);
2578
2579 - tos = ip_tunnel_ecn_encap(RT_TOS(tos), old_iph, skb);
2580 + tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2581 ttl = ttl ? : ip6_dst_hoplimit(ndst);
2582 skb_scrub_packet(skb, xnet);
2583 err = vxlan_build_skb(skb, ndst, sizeof(struct ipv6hdr),
2584 diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
2585 index f5657783fad4e..6eb0f7a85e531 100644
2586 --- a/drivers/net/wan/lapbether.c
2587 +++ b/drivers/net/wan/lapbether.c
2588 @@ -160,6 +160,12 @@ static netdev_tx_t lapbeth_xmit(struct sk_buff *skb,
2589 if (!netif_running(dev))
2590 goto drop;
2591
2592 + /* There should be a pseudo header of 1 byte added by upper layers.
2593 + * Check to make sure it is there before reading it.
2594 + */
2595 + if (skb->len < 1)
2596 + goto drop;
2597 +
2598 switch (skb->data[0]) {
2599 case X25_IFACE_DATA:
2600 break;
2601 @@ -308,6 +314,7 @@ static void lapbeth_setup(struct net_device *dev)
2602 dev->netdev_ops = &lapbeth_netdev_ops;
2603 dev->destructor = free_netdev;
2604 dev->type = ARPHRD_X25;
2605 + dev->hard_header_len = 0;
2606 dev->mtu = 1000;
2607 dev->addr_len = 0;
2608 }
2609 @@ -334,7 +341,8 @@ static int lapbeth_new_device(struct net_device *dev)
2610 * then this driver prepends a length field of 2 bytes,
2611 * then the underlying Ethernet device prepends its own header.
2612 */
2613 - ndev->hard_header_len = -1 + 3 + 2 + dev->hard_header_len;
2614 + ndev->needed_headroom = -1 + 3 + 2 + dev->hard_header_len
2615 + + dev->needed_headroom;
2616
2617 lapbeth = netdev_priv(ndev);
2618 lapbeth->axdev = ndev;
2619 diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
2620 index 257b6ee51e54b..1af216aa5adae 100644
2621 --- a/drivers/net/wireless/ath/ath9k/htc_hst.c
2622 +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
2623 @@ -175,6 +175,7 @@ static int htc_config_pipe_credits(struct htc_target *target)
2624 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
2625 if (!time_left) {
2626 dev_err(target->dev, "HTC credit config timeout\n");
2627 + kfree_skb(skb);
2628 return -ETIMEDOUT;
2629 }
2630
2631 @@ -211,6 +212,7 @@ static int htc_setup_complete(struct htc_target *target)
2632 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
2633 if (!time_left) {
2634 dev_err(target->dev, "HTC start timeout\n");
2635 + kfree_skb(skb);
2636 return -ETIMEDOUT;
2637 }
2638
2639 @@ -284,6 +286,7 @@ int htc_connect_service(struct htc_target *target,
2640 if (!time_left) {
2641 dev_err(target->dev, "Service connection timeout for: %d\n",
2642 service_connreq->service_id);
2643 + kfree_skb(skb);
2644 return -ETIMEDOUT;
2645 }
2646
2647 diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
2648 index 8f14897ae5a33..f100533eb7adc 100644
2649 --- a/drivers/net/wireless/ath/ath9k/wmi.c
2650 +++ b/drivers/net/wireless/ath/ath9k/wmi.c
2651 @@ -340,6 +340,7 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
2652 ath_dbg(common, WMI, "Timeout waiting for WMI command: %s\n",
2653 wmi_cmd_to_name(cmd_id));
2654 mutex_unlock(&wmi->op_mutex);
2655 + kfree_skb(skb);
2656 return -ETIMEDOUT;
2657 }
2658
2659 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
2660 index 59013572fbe3f..d6a4a08fd3c44 100644
2661 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
2662 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
2663 @@ -30,7 +30,7 @@
2664 #define BRCMF_ARP_OL_PEER_AUTO_REPLY 0x00000008
2665
2666 #define BRCMF_BSS_INFO_VERSION 109 /* curr ver of brcmf_bss_info_le struct */
2667 -#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0002
2668 +#define BRCMF_BSS_RSSI_ON_CHANNEL 0x0004
2669
2670 #define BRCMF_STA_WME 0x00000002 /* WMM association */
2671 #define BRCMF_STA_AUTHE 0x00000008 /* Authenticated */
2672 diff --git a/drivers/net/wireless/intel/iwlegacy/common.c b/drivers/net/wireless/intel/iwlegacy/common.c
2673 index db2373fe8ac32..55573d090503b 100644
2674 --- a/drivers/net/wireless/intel/iwlegacy/common.c
2675 +++ b/drivers/net/wireless/intel/iwlegacy/common.c
2676 @@ -4302,8 +4302,8 @@ il_apm_init(struct il_priv *il)
2677 * power savings, even without L1.
2678 */
2679 if (il->cfg->set_l0s) {
2680 - pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl);
2681 - if (lctl & PCI_EXP_LNKCTL_ASPM_L1) {
2682 + ret = pcie_capability_read_word(il->pci_dev, PCI_EXP_LNKCTL, &lctl);
2683 + if (!ret && (lctl & PCI_EXP_LNKCTL_ASPM_L1)) {
2684 /* L1-ASPM enabled; disable(!) L0S */
2685 il_set_bit(il, CSR_GIO_REG,
2686 CSR_GIO_REG_VAL_L0S_ENABLED);
2687 diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
2688 index 8548027abf71b..1e26936c0d727 100644
2689 --- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
2690 +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
2691 @@ -586,6 +586,11 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
2692 {
2693 struct host_cmd_ds_802_11_key_material *key =
2694 &resp->params.key_material;
2695 + int len;
2696 +
2697 + len = le16_to_cpu(key->key_param_set.key_len);
2698 + if (len > sizeof(key->key_param_set.key))
2699 + return -EINVAL;
2700
2701 if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) {
2702 if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) {
2703 @@ -599,9 +604,8 @@ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv,
2704
2705 memset(priv->aes_key.key_param_set.key, 0,
2706 sizeof(key->key_param_set.key));
2707 - priv->aes_key.key_param_set.key_len = key->key_param_set.key_len;
2708 - memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key,
2709 - le16_to_cpu(priv->aes_key.key_param_set.key_len));
2710 + priv->aes_key.key_param_set.key_len = cpu_to_le16(len);
2711 + memcpy(priv->aes_key.key_param_set.key, key->key_param_set.key, len);
2712
2713 return 0;
2714 }
2715 @@ -616,9 +620,14 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
2716 struct host_cmd_ds_command *resp)
2717 {
2718 struct host_cmd_ds_802_11_key_material_v2 *key_v2;
2719 - __le16 len;
2720 + int len;
2721
2722 key_v2 = &resp->params.key_material_v2;
2723 +
2724 + len = le16_to_cpu(key_v2->key_param_set.key_params.aes.key_len);
2725 + if (len > WLAN_KEY_LEN_CCMP)
2726 + return -EINVAL;
2727 +
2728 if (le16_to_cpu(key_v2->action) == HostCmd_ACT_GEN_SET) {
2729 if ((le16_to_cpu(key_v2->key_param_set.key_info) & KEY_MCAST)) {
2730 mwifiex_dbg(priv->adapter, INFO, "info: key: GTK is set\n");
2731 @@ -634,10 +643,9 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,
2732 memset(priv->aes_key_v2.key_param_set.key_params.aes.key, 0,
2733 WLAN_KEY_LEN_CCMP);
2734 priv->aes_key_v2.key_param_set.key_params.aes.key_len =
2735 - key_v2->key_param_set.key_params.aes.key_len;
2736 - len = priv->aes_key_v2.key_param_set.key_params.aes.key_len;
2737 + cpu_to_le16(len);
2738 memcpy(priv->aes_key_v2.key_param_set.key_params.aes.key,
2739 - key_v2->key_param_set.key_params.aes.key, le16_to_cpu(len));
2740 + key_v2->key_param_set.key_params.aes.key, len);
2741
2742 return 0;
2743 }
2744 diff --git a/drivers/net/wireless/ti/wl1251/event.c b/drivers/net/wireless/ti/wl1251/event.c
2745 index d0593bc1f1a92..daddeaa66bf4a 100644
2746 --- a/drivers/net/wireless/ti/wl1251/event.c
2747 +++ b/drivers/net/wireless/ti/wl1251/event.c
2748 @@ -84,7 +84,7 @@ static int wl1251_event_ps_report(struct wl1251 *wl,
2749 break;
2750 }
2751
2752 - return 0;
2753 + return ret;
2754 }
2755
2756 static void wl1251_event_mbox_dump(struct event_mailbox *mbox)
2757 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
2758 index 6d391a268469f..ceaf6b30d683d 100644
2759 --- a/drivers/net/xen-netfront.c
2760 +++ b/drivers/net/xen-netfront.c
2761 @@ -62,6 +62,8 @@ module_param_named(max_queues, xennet_max_queues, uint, 0644);
2762 MODULE_PARM_DESC(max_queues,
2763 "Maximum number of queues per virtual interface");
2764
2765 +#define XENNET_TIMEOUT (5 * HZ)
2766 +
2767 static const struct ethtool_ops xennet_ethtool_ops;
2768
2769 struct netfront_cb {
2770 @@ -1355,12 +1357,15 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
2771
2772 netif_carrier_off(netdev);
2773
2774 - xenbus_switch_state(dev, XenbusStateInitialising);
2775 - wait_event(module_wq,
2776 - xenbus_read_driver_state(dev->otherend) !=
2777 - XenbusStateClosed &&
2778 - xenbus_read_driver_state(dev->otherend) !=
2779 - XenbusStateUnknown);
2780 + do {
2781 + xenbus_switch_state(dev, XenbusStateInitialising);
2782 + err = wait_event_timeout(module_wq,
2783 + xenbus_read_driver_state(dev->otherend) !=
2784 + XenbusStateClosed &&
2785 + xenbus_read_driver_state(dev->otherend) !=
2786 + XenbusStateUnknown, XENNET_TIMEOUT);
2787 + } while (!err);
2788 +
2789 return netdev;
2790
2791 exit:
2792 @@ -2172,28 +2177,43 @@ static const struct attribute_group xennet_dev_group = {
2793 };
2794 #endif /* CONFIG_SYSFS */
2795
2796 -static int xennet_remove(struct xenbus_device *dev)
2797 +static void xennet_bus_close(struct xenbus_device *dev)
2798 {
2799 - struct netfront_info *info = dev_get_drvdata(&dev->dev);
2800 -
2801 - dev_dbg(&dev->dev, "%s\n", dev->nodename);
2802 + int ret;
2803
2804 - if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {
2805 + if (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)
2806 + return;
2807 + do {
2808 xenbus_switch_state(dev, XenbusStateClosing);
2809 - wait_event(module_wq,
2810 - xenbus_read_driver_state(dev->otherend) ==
2811 - XenbusStateClosing ||
2812 - xenbus_read_driver_state(dev->otherend) ==
2813 - XenbusStateUnknown);
2814 + ret = wait_event_timeout(module_wq,
2815 + xenbus_read_driver_state(dev->otherend) ==
2816 + XenbusStateClosing ||
2817 + xenbus_read_driver_state(dev->otherend) ==
2818 + XenbusStateClosed ||
2819 + xenbus_read_driver_state(dev->otherend) ==
2820 + XenbusStateUnknown,
2821 + XENNET_TIMEOUT);
2822 + } while (!ret);
2823 +
2824 + if (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)
2825 + return;
2826
2827 + do {
2828 xenbus_switch_state(dev, XenbusStateClosed);
2829 - wait_event(module_wq,
2830 - xenbus_read_driver_state(dev->otherend) ==
2831 - XenbusStateClosed ||
2832 - xenbus_read_driver_state(dev->otherend) ==
2833 - XenbusStateUnknown);
2834 - }
2835 + ret = wait_event_timeout(module_wq,
2836 + xenbus_read_driver_state(dev->otherend) ==
2837 + XenbusStateClosed ||
2838 + xenbus_read_driver_state(dev->otherend) ==
2839 + XenbusStateUnknown,
2840 + XENNET_TIMEOUT);
2841 + } while (!ret);
2842 +}
2843 +
2844 +static int xennet_remove(struct xenbus_device *dev)
2845 +{
2846 + struct netfront_info *info = dev_get_drvdata(&dev->dev);
2847
2848 + xennet_bus_close(dev);
2849 xennet_disconnect_backend(info);
2850
2851 if (info->netdev->reg_state == NETREG_REGISTERED)
2852 diff --git a/drivers/nfc/s3fwrn5/core.c b/drivers/nfc/s3fwrn5/core.c
2853 index 9d9c8d57a042d..64b58455e620b 100644
2854 --- a/drivers/nfc/s3fwrn5/core.c
2855 +++ b/drivers/nfc/s3fwrn5/core.c
2856 @@ -209,6 +209,7 @@ int s3fwrn5_recv_frame(struct nci_dev *ndev, struct sk_buff *skb,
2857 case S3FWRN5_MODE_FW:
2858 return s3fwrn5_fw_recv_frame(ndev, skb);
2859 default:
2860 + kfree_skb(skb);
2861 return -ENODEV;
2862 }
2863 }
2864 diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
2865 index 188fab57d170e..a7f542e784dd0 100644
2866 --- a/drivers/parisc/sba_iommu.c
2867 +++ b/drivers/parisc/sba_iommu.c
2868 @@ -1283,7 +1283,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
2869 ** (one that doesn't overlap memory or LMMIO space) in the
2870 ** IBASE and IMASK registers.
2871 */
2872 - ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE);
2873 + ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE) & ~0x1fffffULL;
2874 iova_space_size = ~(READ_REG(ioc->ioc_hpa + IOC_IMASK) & 0xFFFFFFFFUL) + 1;
2875
2876 if ((ioc->ibase < 0xfed00000UL) && ((ioc->ibase + iova_space_size) > 0xfee00000UL)) {
2877 diff --git a/drivers/pci/access.c b/drivers/pci/access.c
2878 index 7b5cf6d1181a9..6f2a07567532d 100644
2879 --- a/drivers/pci/access.c
2880 +++ b/drivers/pci/access.c
2881 @@ -185,17 +185,13 @@ EXPORT_SYMBOL(pci_bus_set_ops);
2882 static DECLARE_WAIT_QUEUE_HEAD(pci_cfg_wait);
2883
2884 static noinline void pci_wait_cfg(struct pci_dev *dev)
2885 + __must_hold(&pci_lock)
2886 {
2887 - DECLARE_WAITQUEUE(wait, current);
2888 -
2889 - __add_wait_queue(&pci_cfg_wait, &wait);
2890 do {
2891 - set_current_state(TASK_UNINTERRUPTIBLE);
2892 raw_spin_unlock_irq(&pci_lock);
2893 - schedule();
2894 + wait_event(pci_cfg_wait, !dev->block_cfg_access);
2895 raw_spin_lock_irq(&pci_lock);
2896 } while (dev->block_cfg_access);
2897 - __remove_wait_queue(&pci_cfg_wait, &wait);
2898 }
2899
2900 /* Returns 0 on success, negative values indicate error. */
2901 diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
2902 index d44b55879c673..7f2b9ef185e44 100644
2903 --- a/drivers/pci/hotplug/acpiphp_glue.c
2904 +++ b/drivers/pci/hotplug/acpiphp_glue.c
2905 @@ -136,13 +136,21 @@ static struct acpiphp_context *acpiphp_grab_context(struct acpi_device *adev)
2906 struct acpiphp_context *context;
2907
2908 acpi_lock_hp_context();
2909 +
2910 context = acpiphp_get_context(adev);
2911 - if (!context || context->func.parent->is_going_away) {
2912 - acpi_unlock_hp_context();
2913 - return NULL;
2914 + if (!context)
2915 + goto unlock;
2916 +
2917 + if (context->func.parent->is_going_away) {
2918 + acpiphp_put_context(context);
2919 + context = NULL;
2920 + goto unlock;
2921 }
2922 +
2923 get_bridge(context->func.parent);
2924 acpiphp_put_context(context);
2925 +
2926 +unlock:
2927 acpi_unlock_hp_context();
2928 return context;
2929 }
2930 diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
2931 index 75551a781e887..5eae5f35dcc7b 100644
2932 --- a/drivers/pci/pcie/aspm.c
2933 +++ b/drivers/pci/pcie/aspm.c
2934 @@ -832,6 +832,7 @@ static int pcie_aspm_get_policy(char *buffer, struct kernel_param *kp)
2935 cnt += sprintf(buffer + cnt, "[%s] ", policy_str[i]);
2936 else
2937 cnt += sprintf(buffer + cnt, "%s ", policy_str[i]);
2938 + cnt += sprintf(buffer + cnt, "\n");
2939 return cnt;
2940 }
2941
2942 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
2943 index 496296bc35816..1fdb1ef5eaaeb 100644
2944 --- a/drivers/pci/quirks.c
2945 +++ b/drivers/pci/quirks.c
2946 @@ -2046,6 +2046,19 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f1, quirk_disable_aspm_l0s);
2947 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f4, quirk_disable_aspm_l0s);
2948 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1508, quirk_disable_aspm_l0s);
2949
2950 +static void quirk_disable_aspm_l0s_l1(struct pci_dev *dev)
2951 +{
2952 + pci_info(dev, "Disabling ASPM L0s/L1\n");
2953 + pci_disable_link_state(dev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1);
2954 +}
2955 +
2956 +/*
2957 + * ASM1083/1085 PCIe-PCI bridge devices cause AER timeout errors on the
2958 + * upstream PCIe root port when ASPM is enabled. At least L0s mode is affected;
2959 + * disable both L0s and L1 for now to be safe.
2960 + */
2961 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASMEDIA, 0x1080, quirk_disable_aspm_l0s_l1);
2962 +
2963 /*
2964 * Some Pericom PCIe-to-PCI bridges in reverse mode need the PCIe Retrain
2965 * Link bit cleared after starting the link retrain process to allow this
2966 diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
2967 index bfdf720db270d..8769a579ecb13 100644
2968 --- a/drivers/pinctrl/pinctrl-single.c
2969 +++ b/drivers/pinctrl/pinctrl-single.c
2970 @@ -1078,7 +1078,7 @@ static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np,
2971
2972 /* If pinconf isn't supported, don't parse properties in below. */
2973 if (!PCS_HAS_PINCONF)
2974 - return 0;
2975 + return -ENOTSUPP;
2976
2977 /* cacluate how much properties are supported in current node */
2978 for (i = 0; i < ARRAY_SIZE(prop2); i++) {
2979 @@ -1090,7 +1090,7 @@ static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np,
2980 nconfs++;
2981 }
2982 if (!nconfs)
2983 - return 0;
2984 + return -ENOTSUPP;
2985
2986 func->conf = devm_kzalloc(pcs->dev,
2987 sizeof(struct pcs_conf_vals) * nconfs,
2988 @@ -1203,9 +1203,12 @@ static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
2989
2990 if (PCS_HAS_PINCONF) {
2991 res = pcs_parse_pinconf(pcs, np, function, map);
2992 - if (res)
2993 + if (res == 0)
2994 + *num_maps = 2;
2995 + else if (res == -ENOTSUPP)
2996 + *num_maps = 1;
2997 + else
2998 goto free_pingroups;
2999 - *num_maps = 2;
3000 } else {
3001 *num_maps = 1;
3002 }
3003 diff --git a/drivers/platform/x86/intel-hid.c b/drivers/platform/x86/intel-hid.c
3004 index 12dbb50633761..a5c645b9e3f2a 100644
3005 --- a/drivers/platform/x86/intel-hid.c
3006 +++ b/drivers/platform/x86/intel-hid.c
3007 @@ -264,7 +264,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv)
3008 return AE_OK;
3009
3010 if (acpi_match_device_ids(dev, ids) == 0)
3011 - if (acpi_create_platform_device(dev, NULL))
3012 + if (!IS_ERR_OR_NULL(acpi_create_platform_device(dev, NULL)))
3013 dev_info(&dev->dev,
3014 "intel-hid: created platform device\n");
3015
3016 diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c
3017 index a74340dff530e..1cf2a38add5f9 100644
3018 --- a/drivers/platform/x86/intel-vbtn.c
3019 +++ b/drivers/platform/x86/intel-vbtn.c
3020 @@ -168,7 +168,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv)
3021 return AE_OK;
3022
3023 if (acpi_match_device_ids(dev, ids) == 0)
3024 - if (acpi_create_platform_device(dev, NULL))
3025 + if (!IS_ERR_OR_NULL(acpi_create_platform_device(dev, NULL)))
3026 dev_info(&dev->dev,
3027 "intel-vbtn: created platform device\n");
3028
3029 diff --git a/drivers/power/supply/88pm860x_battery.c b/drivers/power/supply/88pm860x_battery.c
3030 index 63c57dc82ac1d..4eda5065b5bbc 100644
3031 --- a/drivers/power/supply/88pm860x_battery.c
3032 +++ b/drivers/power/supply/88pm860x_battery.c
3033 @@ -436,7 +436,7 @@ static void pm860x_init_battery(struct pm860x_battery_info *info)
3034 int ret;
3035 int data;
3036 int bat_remove;
3037 - int soc;
3038 + int soc = 0;
3039
3040 /* measure enable on GPADC1 */
3041 data = MEAS1_GP1;
3042 @@ -499,7 +499,9 @@ static void pm860x_init_battery(struct pm860x_battery_info *info)
3043 }
3044 mutex_unlock(&info->lock);
3045
3046 - calc_soc(info, OCV_MODE_ACTIVE, &soc);
3047 + ret = calc_soc(info, OCV_MODE_ACTIVE, &soc);
3048 + if (ret < 0)
3049 + goto out;
3050
3051 data = pm860x_reg_read(info->i2c, PM8607_POWER_UP_LOG);
3052 bat_remove = data & BAT_WU_LOG;
3053 diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c
3054 index 31b01035d0ab3..8cfba3614e601 100644
3055 --- a/drivers/pwm/pwm-bcm-iproc.c
3056 +++ b/drivers/pwm/pwm-bcm-iproc.c
3057 @@ -85,8 +85,6 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
3058 u64 tmp, multi, rate;
3059 u32 value, prescale;
3060
3061 - rate = clk_get_rate(ip->clk);
3062 -
3063 value = readl(ip->base + IPROC_PWM_CTRL_OFFSET);
3064
3065 if (value & BIT(IPROC_PWM_CTRL_EN_SHIFT(pwm->hwpwm)))
3066 @@ -99,6 +97,13 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
3067 else
3068 state->polarity = PWM_POLARITY_INVERSED;
3069
3070 + rate = clk_get_rate(ip->clk);
3071 + if (rate == 0) {
3072 + state->period = 0;
3073 + state->duty_cycle = 0;
3074 + return;
3075 + }
3076 +
3077 value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET);
3078 prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm);
3079 prescale &= IPROC_PWM_PRESCALE_MAX;
3080 diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
3081 index 51152681aba6e..c878c87966163 100644
3082 --- a/drivers/s390/net/qeth_l2_main.c
3083 +++ b/drivers/s390/net/qeth_l2_main.c
3084 @@ -1675,6 +1675,10 @@ static void qeth_bridge_state_change(struct qeth_card *card,
3085 int extrasize;
3086
3087 QETH_CARD_TEXT(card, 2, "brstchng");
3088 + if (qports->num_entries == 0) {
3089 + QETH_CARD_TEXT(card, 2, "BPempty");
3090 + return;
3091 + }
3092 if (qports->entry_length != sizeof(struct qeth_sbp_port_entry)) {
3093 QETH_CARD_TEXT_(card, 2, "BPsz%04x", qports->entry_length);
3094 return;
3095 diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c
3096 index edce5f3cfdba0..93ba83e3148eb 100644
3097 --- a/drivers/scsi/arm/cumana_2.c
3098 +++ b/drivers/scsi/arm/cumana_2.c
3099 @@ -454,7 +454,7 @@ static int cumanascsi2_probe(struct expansion_card *ec,
3100
3101 if (info->info.scsi.dma != NO_DMA)
3102 free_dma(info->info.scsi.dma);
3103 - free_irq(ec->irq, host);
3104 + free_irq(ec->irq, info);
3105
3106 out_release:
3107 fas216_release(host);
3108 diff --git a/drivers/scsi/arm/eesox.c b/drivers/scsi/arm/eesox.c
3109 index e93e047f43165..65bb34ce93b94 100644
3110 --- a/drivers/scsi/arm/eesox.c
3111 +++ b/drivers/scsi/arm/eesox.c
3112 @@ -575,7 +575,7 @@ static int eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
3113
3114 if (info->info.scsi.dma != NO_DMA)
3115 free_dma(info->info.scsi.dma);
3116 - free_irq(ec->irq, host);
3117 + free_irq(ec->irq, info);
3118
3119 out_remove:
3120 fas216_remove(host);
3121 diff --git a/drivers/scsi/arm/powertec.c b/drivers/scsi/arm/powertec.c
3122 index 79aa88911b7f3..b5e4a25ea1ef3 100644
3123 --- a/drivers/scsi/arm/powertec.c
3124 +++ b/drivers/scsi/arm/powertec.c
3125 @@ -382,7 +382,7 @@ static int powertecscsi_probe(struct expansion_card *ec,
3126
3127 if (info->info.scsi.dma != NO_DMA)
3128 free_dma(info->info.scsi.dma);
3129 - free_irq(ec->irq, host);
3130 + free_irq(ec->irq, info);
3131
3132 out_release:
3133 fas216_release(host);
3134 diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
3135 index 1753e42826dd9..a880abf5abaad 100644
3136 --- a/drivers/scsi/mesh.c
3137 +++ b/drivers/scsi/mesh.c
3138 @@ -1044,6 +1044,8 @@ static void handle_error(struct mesh_state *ms)
3139 while ((in_8(&mr->bus_status1) & BS1_RST) != 0)
3140 udelay(1);
3141 printk("done\n");
3142 + if (ms->dma_started)
3143 + halt_dma(ms);
3144 handle_reset(ms);
3145 /* request_q is empty, no point in mesh_start() */
3146 return;
3147 @@ -1356,7 +1358,8 @@ static void halt_dma(struct mesh_state *ms)
3148 ms->conn_tgt, ms->data_ptr, scsi_bufflen(cmd),
3149 ms->tgts[ms->conn_tgt].data_goes_out);
3150 }
3151 - scsi_dma_unmap(cmd);
3152 + if (cmd)
3153 + scsi_dma_unmap(cmd);
3154 ms->dma_started = 0;
3155 }
3156
3157 @@ -1711,6 +1714,9 @@ static int mesh_host_reset(struct scsi_cmnd *cmd)
3158
3159 spin_lock_irqsave(ms->host->host_lock, flags);
3160
3161 + if (ms->dma_started)
3162 + halt_dma(ms);
3163 +
3164 /* Reset the controller & dbdma channel */
3165 out_le32(&md->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* stop dma */
3166 out_8(&mr->exception, 0xff); /* clear all exception bits */
3167 diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
3168 index d7118d3767c35..99bfb003be3fc 100644
3169 --- a/drivers/scsi/scsi_debug.c
3170 +++ b/drivers/scsi/scsi_debug.c
3171 @@ -4986,6 +4986,12 @@ static int __init scsi_debug_init(void)
3172 pr_err("submit_queues must be 1 or more\n");
3173 return -EINVAL;
3174 }
3175 +
3176 + if ((sdebug_max_queue > SDEBUG_CANQUEUE) || (sdebug_max_queue < 1)) {
3177 + pr_err("max_queue must be in range [1, %d]\n", SDEBUG_CANQUEUE);
3178 + return -EINVAL;
3179 + }
3180 +
3181 sdebug_q_arr = kcalloc(submit_queues, sizeof(struct sdebug_queue),
3182 GFP_KERNEL);
3183 if (sdebug_q_arr == NULL)
3184 diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c
3185 index 6ec3790566504..fa4c47c7d2166 100644
3186 --- a/drivers/staging/rtl8192u/r8192U_core.c
3187 +++ b/drivers/staging/rtl8192u/r8192U_core.c
3188 @@ -2522,7 +2522,7 @@ static int rtl8192_read_eeprom_info(struct net_device *dev)
3189 ret = eprom_read(dev, (EEPROM_TxPwIndex_CCK >> 1));
3190 if (ret < 0)
3191 return ret;
3192 - priv->EEPROMTxPowerLevelCCK = ((u16)ret & 0xff) >> 8;
3193 + priv->EEPROMTxPowerLevelCCK = ((u16)ret & 0xff00) >> 8;
3194 } else
3195 priv->EEPROMTxPowerLevelCCK = 0x10;
3196 RT_TRACE(COMP_EPROM, "CCK Tx Power Levl: 0x%02x\n", priv->EEPROMTxPowerLevelCCK);
3197 diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
3198 index 38926495c751d..f985315ebd3bd 100644
3199 --- a/drivers/usb/dwc2/platform.c
3200 +++ b/drivers/usb/dwc2/platform.c
3201 @@ -668,6 +668,7 @@ static int dwc2_driver_probe(struct platform_device *dev)
3202 if (hsotg->gadget_enabled) {
3203 retval = usb_add_gadget_udc(hsotg->dev, &hsotg->gadget);
3204 if (retval) {
3205 + hsotg->gadget.udc = NULL;
3206 dwc2_hsotg_remove(hsotg);
3207 goto error;
3208 }
3209 @@ -676,7 +677,8 @@ static int dwc2_driver_probe(struct platform_device *dev)
3210 return 0;
3211
3212 error:
3213 - dwc2_lowlevel_hw_disable(hsotg);
3214 + if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL)
3215 + dwc2_lowlevel_hw_disable(hsotg);
3216 return retval;
3217 }
3218
3219 diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
3220 index e9bd8d4abca00..f09a74d79c9eb 100644
3221 --- a/drivers/usb/gadget/udc/bdc/bdc_core.c
3222 +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
3223 @@ -286,6 +286,7 @@ static void bdc_mem_init(struct bdc *bdc, bool reinit)
3224 * in that case reinit is passed as 1
3225 */
3226 if (reinit) {
3227 + int i;
3228 /* Enable interrupts */
3229 temp = bdc_readl(bdc->regs, BDC_BDCSC);
3230 temp |= BDC_GIE;
3231 @@ -295,6 +296,9 @@ static void bdc_mem_init(struct bdc *bdc, bool reinit)
3232 /* Initialize SRR to 0 */
3233 memset(bdc->srr.sr_bds, 0,
3234 NUM_SR_ENTRIES * sizeof(struct bdc_bd));
3235 + /* clear ep flags to avoid post disconnect stops/deconfigs */
3236 + for (i = 1; i < bdc->num_eps; ++i)
3237 + bdc->bdc_ep_array[i]->flags = 0;
3238 } else {
3239 /* One time initiaization only */
3240 /* Enable status report function pointers */
3241 diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.c b/drivers/usb/gadget/udc/bdc/bdc_ep.c
3242 index 303735c7990c8..8b1b48fa4ebfc 100644
3243 --- a/drivers/usb/gadget/udc/bdc/bdc_ep.c
3244 +++ b/drivers/usb/gadget/udc/bdc/bdc_ep.c
3245 @@ -621,7 +621,6 @@ int bdc_ep_enable(struct bdc_ep *ep)
3246 }
3247 bdc_dbg_bd_list(bdc, ep);
3248 /* only for ep0: config ep is called for ep0 from connect event */
3249 - ep->flags |= BDC_EP_ENABLED;
3250 if (ep->ep_num == 1)
3251 return ret;
3252
3253 @@ -765,10 +764,13 @@ static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req)
3254 __func__, ep->name, start_bdi, end_bdi);
3255 dev_dbg(bdc->dev, "ep_dequeue ep=%p ep->desc=%p\n",
3256 ep, (void *)ep->usb_ep.desc);
3257 - /* Stop the ep to see where the HW is ? */
3258 - ret = bdc_stop_ep(bdc, ep->ep_num);
3259 - /* if there is an issue with stopping ep, then no need to go further */
3260 - if (ret)
3261 + /* if still connected, stop the ep to see where the HW is ? */
3262 + if (!(bdc_readl(bdc->regs, BDC_USPC) & BDC_PST_MASK)) {
3263 + ret = bdc_stop_ep(bdc, ep->ep_num);
3264 + /* if there is an issue, then no need to go further */
3265 + if (ret)
3266 + return 0;
3267 + } else
3268 return 0;
3269
3270 /*
3271 @@ -1917,7 +1919,9 @@ static int bdc_gadget_ep_disable(struct usb_ep *_ep)
3272 __func__, ep->name, ep->flags);
3273
3274 if (!(ep->flags & BDC_EP_ENABLED)) {
3275 - dev_warn(bdc->dev, "%s is already disabled\n", ep->name);
3276 + if (bdc->gadget.speed != USB_SPEED_UNKNOWN)
3277 + dev_warn(bdc->dev, "%s is already disabled\n",
3278 + ep->name);
3279 return 0;
3280 }
3281 spin_lock_irqsave(&bdc->lock, flags);
3282 diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
3283 index dfaed8e8cc524..c8c45264e94cc 100644
3284 --- a/drivers/usb/gadget/udc/net2280.c
3285 +++ b/drivers/usb/gadget/udc/net2280.c
3286 @@ -3785,8 +3785,10 @@ static int net2280_probe(struct pci_dev *pdev, const struct pci_device_id *id)
3287 return 0;
3288
3289 done:
3290 - if (dev)
3291 + if (dev) {
3292 net2280_remove(pdev);
3293 + kfree(dev);
3294 + }
3295 return retval;
3296 }
3297
3298 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
3299 index 613544d25fadc..abf8a3cac2651 100644
3300 --- a/drivers/usb/serial/cp210x.c
3301 +++ b/drivers/usb/serial/cp210x.c
3302 @@ -255,6 +255,8 @@ static struct usb_serial_driver cp210x_device = {
3303 .break_ctl = cp210x_break_ctl,
3304 .set_termios = cp210x_set_termios,
3305 .tx_empty = cp210x_tx_empty,
3306 + .throttle = usb_serial_generic_throttle,
3307 + .unthrottle = usb_serial_generic_unthrottle,
3308 .tiocmget = cp210x_tiocmget,
3309 .tiocmset = cp210x_tiocmset,
3310 .port_probe = cp210x_port_probe,
3311 @@ -765,6 +767,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
3312 u32 baud;
3313 u16 bits;
3314 u32 ctl_hs;
3315 + u32 flow_repl;
3316
3317 cp210x_read_u32_reg(port, CP210X_GET_BAUDRATE, &baud);
3318
3319 @@ -865,6 +868,22 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
3320 ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
3321 if (ctl_hs & CP210X_SERIAL_CTS_HANDSHAKE) {
3322 dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__);
3323 + /*
3324 + * When the port is closed, the CP210x hardware disables
3325 + * auto-RTS and RTS is deasserted but it leaves auto-CTS when
3326 + * in hardware flow control mode. When re-opening the port, if
3327 + * auto-CTS is enabled on the cp210x, then auto-RTS must be
3328 + * re-enabled in the driver.
3329 + */
3330 + flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
3331 + flow_repl &= ~CP210X_SERIAL_RTS_MASK;
3332 + flow_repl |= CP210X_SERIAL_RTS_SHIFT(CP210X_SERIAL_RTS_FLOW_CTL);
3333 + flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
3334 + cp210x_write_reg_block(port,
3335 + CP210X_SET_FLOW,
3336 + &flow_ctl,
3337 + sizeof(flow_ctl));
3338 +
3339 cflag |= CRTSCTS;
3340 } else {
3341 dev_dbg(dev, "%s - flow control = NONE\n", __func__);
3342 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
3343 index a7cb0968259ee..0c8b24ff44a05 100644
3344 --- a/drivers/usb/serial/ftdi_sio.c
3345 +++ b/drivers/usb/serial/ftdi_sio.c
3346 @@ -2051,12 +2051,11 @@ static int ftdi_prepare_write_buffer(struct usb_serial_port *port,
3347 #define FTDI_RS_ERR_MASK (FTDI_RS_BI | FTDI_RS_PE | FTDI_RS_FE | FTDI_RS_OE)
3348
3349 static int ftdi_process_packet(struct usb_serial_port *port,
3350 - struct ftdi_private *priv, char *packet, int len)
3351 + struct ftdi_private *priv, unsigned char *buf, int len)
3352 {
3353 + unsigned char status;
3354 int i;
3355 - char status;
3356 char flag;
3357 - char *ch;
3358
3359 if (len < 2) {
3360 dev_dbg(&port->dev, "malformed packet\n");
3361 @@ -2066,7 +2065,7 @@ static int ftdi_process_packet(struct usb_serial_port *port,
3362 /* Compare new line status to the old one, signal if different/
3363 N.B. packet may be processed more than once, but differences
3364 are only processed once. */
3365 - status = packet[0] & FTDI_STATUS_B0_MASK;
3366 + status = buf[0] & FTDI_STATUS_B0_MASK;
3367 if (status != priv->prev_status) {
3368 char diff_status = status ^ priv->prev_status;
3369
3370 @@ -2092,13 +2091,12 @@ static int ftdi_process_packet(struct usb_serial_port *port,
3371 }
3372
3373 /* save if the transmitter is empty or not */
3374 - if (packet[1] & FTDI_RS_TEMT)
3375 + if (buf[1] & FTDI_RS_TEMT)
3376 priv->transmit_empty = 1;
3377 else
3378 priv->transmit_empty = 0;
3379
3380 - len -= 2;
3381 - if (!len)
3382 + if (len == 2)
3383 return 0; /* status only */
3384
3385 /*
3386 @@ -2106,40 +2104,41 @@ static int ftdi_process_packet(struct usb_serial_port *port,
3387 * data payload to avoid over-reporting.
3388 */
3389 flag = TTY_NORMAL;
3390 - if (packet[1] & FTDI_RS_ERR_MASK) {
3391 + if (buf[1] & FTDI_RS_ERR_MASK) {
3392 /* Break takes precedence over parity, which takes precedence
3393 * over framing errors */
3394 - if (packet[1] & FTDI_RS_BI) {
3395 + if (buf[1] & FTDI_RS_BI) {
3396 flag = TTY_BREAK;
3397 port->icount.brk++;
3398 usb_serial_handle_break(port);
3399 - } else if (packet[1] & FTDI_RS_PE) {
3400 + } else if (buf[1] & FTDI_RS_PE) {
3401 flag = TTY_PARITY;
3402 port->icount.parity++;
3403 - } else if (packet[1] & FTDI_RS_FE) {
3404 + } else if (buf[1] & FTDI_RS_FE) {
3405 flag = TTY_FRAME;
3406 port->icount.frame++;
3407 }
3408 /* Overrun is special, not associated with a char */
3409 - if (packet[1] & FTDI_RS_OE) {
3410 + if (buf[1] & FTDI_RS_OE) {
3411 port->icount.overrun++;
3412 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
3413 }
3414 }
3415
3416 - port->icount.rx += len;
3417 - ch = packet + 2;
3418 + port->icount.rx += len - 2;
3419
3420 if (port->port.console && port->sysrq) {
3421 - for (i = 0; i < len; i++, ch++) {
3422 - if (!usb_serial_handle_sysrq_char(port, *ch))
3423 - tty_insert_flip_char(&port->port, *ch, flag);
3424 + for (i = 2; i < len; i++) {
3425 + if (usb_serial_handle_sysrq_char(port, buf[i]))
3426 + continue;
3427 + tty_insert_flip_char(&port->port, buf[i], flag);
3428 }
3429 } else {
3430 - tty_insert_flip_string_fixed_flag(&port->port, ch, flag, len);
3431 + tty_insert_flip_string_fixed_flag(&port->port, buf + 2, flag,
3432 + len - 2);
3433 }
3434
3435 - return len;
3436 + return len - 2;
3437 }
3438
3439 static void ftdi_process_read_urb(struct urb *urb)
3440 diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
3441 index d6ac1f472b779..bdeb2b2489549 100644
3442 --- a/drivers/usb/serial/iuu_phoenix.c
3443 +++ b/drivers/usb/serial/iuu_phoenix.c
3444 @@ -369,10 +369,11 @@ static void iuu_led_activity_on(struct urb *urb)
3445 struct usb_serial_port *port = urb->context;
3446 int result;
3447 char *buf_ptr = port->write_urb->transfer_buffer;
3448 - *buf_ptr++ = IUU_SET_LED;
3449 +
3450 if (xmas) {
3451 - get_random_bytes(buf_ptr, 6);
3452 - *(buf_ptr+7) = 1;
3453 + buf_ptr[0] = IUU_SET_LED;
3454 + get_random_bytes(buf_ptr + 1, 6);
3455 + buf_ptr[7] = 1;
3456 } else {
3457 iuu_rgbf_fill_buffer(buf_ptr, 255, 255, 0, 0, 0, 0, 255);
3458 }
3459 @@ -390,13 +391,14 @@ static void iuu_led_activity_off(struct urb *urb)
3460 struct usb_serial_port *port = urb->context;
3461 int result;
3462 char *buf_ptr = port->write_urb->transfer_buffer;
3463 +
3464 if (xmas) {
3465 iuu_rxcmd(urb);
3466 return;
3467 - } else {
3468 - *buf_ptr++ = IUU_SET_LED;
3469 - iuu_rgbf_fill_buffer(buf_ptr, 0, 0, 255, 255, 0, 0, 255);
3470 }
3471 +
3472 + iuu_rgbf_fill_buffer(buf_ptr, 0, 0, 255, 255, 0, 0, 255);
3473 +
3474 usb_fill_bulk_urb(port->write_urb, port->serial->dev,
3475 usb_sndbulkpipe(port->serial->dev,
3476 port->bulk_out_endpointAddress),
3477 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
3478 index c59e6d4a8a612..11fb4d78e2dbc 100644
3479 --- a/drivers/usb/serial/qcserial.c
3480 +++ b/drivers/usb/serial/qcserial.c
3481 @@ -159,6 +159,7 @@ static const struct usb_device_id id_table[] = {
3482 {DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */
3483 {DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */
3484 {DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */
3485 + {DEVICE_SWI(0x1199, 0x9062)}, /* Sierra Wireless EM7305 QDL */
3486 {DEVICE_SWI(0x1199, 0x9063)}, /* Sierra Wireless EM7305 */
3487 {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx */
3488 {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx */
3489 diff --git a/drivers/video/console/bitblit.c b/drivers/video/console/bitblit.c
3490 index dbfe4eecf12e5..05d1d36a56654 100644
3491 --- a/drivers/video/console/bitblit.c
3492 +++ b/drivers/video/console/bitblit.c
3493 @@ -216,7 +216,7 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
3494 region.color = 0;
3495 region.rop = ROP_COPY;
3496
3497 - if (rw && !bottom_only) {
3498 + if ((int) rw > 0 && !bottom_only) {
3499 region.dx = info->var.xoffset + rs;
3500 region.dy = 0;
3501 region.width = rw;
3502 @@ -224,7 +224,7 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
3503 info->fbops->fb_fillrect(info, &region);
3504 }
3505
3506 - if (bh) {
3507 + if ((int) bh > 0) {
3508 region.dx = info->var.xoffset;
3509 region.dy = info->var.yoffset + bs;
3510 region.width = rs;
3511 diff --git a/drivers/video/console/fbcon_ccw.c b/drivers/video/console/fbcon_ccw.c
3512 index 5a3cbf6dff4d9..34da8bba9273a 100644
3513 --- a/drivers/video/console/fbcon_ccw.c
3514 +++ b/drivers/video/console/fbcon_ccw.c
3515 @@ -201,7 +201,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info,
3516 region.color = 0;
3517 region.rop = ROP_COPY;
3518
3519 - if (rw && !bottom_only) {
3520 + if ((int) rw > 0 && !bottom_only) {
3521 region.dx = 0;
3522 region.dy = info->var.yoffset;
3523 region.height = rw;
3524 @@ -209,7 +209,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info,
3525 info->fbops->fb_fillrect(info, &region);
3526 }
3527
3528 - if (bh) {
3529 + if ((int) bh > 0) {
3530 region.dx = info->var.xoffset + bs;
3531 region.dy = 0;
3532 region.height = info->var.yres_virtual;
3533 diff --git a/drivers/video/console/fbcon_cw.c b/drivers/video/console/fbcon_cw.c
3534 index e7ee44db4e98b..0b552b3fc22ab 100644
3535 --- a/drivers/video/console/fbcon_cw.c
3536 +++ b/drivers/video/console/fbcon_cw.c
3537 @@ -184,7 +184,7 @@ static void cw_clear_margins(struct vc_data *vc, struct fb_info *info,
3538 region.color = 0;
3539 region.rop = ROP_COPY;
3540
3541 - if (rw && !bottom_only) {
3542 + if ((int) rw > 0 && !bottom_only) {
3543 region.dx = 0;
3544 region.dy = info->var.yoffset + rs;
3545 region.height = rw;
3546 @@ -192,7 +192,7 @@ static void cw_clear_margins(struct vc_data *vc, struct fb_info *info,
3547 info->fbops->fb_fillrect(info, &region);
3548 }
3549
3550 - if (bh) {
3551 + if ((int) bh > 0) {
3552 region.dx = info->var.xoffset;
3553 region.dy = info->var.yoffset;
3554 region.height = info->var.yres;
3555 diff --git a/drivers/video/console/fbcon_ud.c b/drivers/video/console/fbcon_ud.c
3556 index 19e3714abfe8f..7f62efe2da526 100644
3557 --- a/drivers/video/console/fbcon_ud.c
3558 +++ b/drivers/video/console/fbcon_ud.c
3559 @@ -231,7 +231,7 @@ static void ud_clear_margins(struct vc_data *vc, struct fb_info *info,
3560 region.color = 0;
3561 region.rop = ROP_COPY;
3562
3563 - if (rw && !bottom_only) {
3564 + if ((int) rw > 0 && !bottom_only) {
3565 region.dy = 0;
3566 region.dx = info->var.xoffset;
3567 region.width = rw;
3568 @@ -239,7 +239,7 @@ static void ud_clear_margins(struct vc_data *vc, struct fb_info *info,
3569 info->fbops->fb_fillrect(info, &region);
3570 }
3571
3572 - if (bh) {
3573 + if ((int) bh > 0) {
3574 region.dy = info->var.yoffset;
3575 region.dx = info->var.xoffset;
3576 region.height = bh;
3577 diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
3578 index e3b9521e4ec3e..33bddf3f30406 100644
3579 --- a/drivers/video/console/newport_con.c
3580 +++ b/drivers/video/console/newport_con.c
3581 @@ -31,6 +31,8 @@
3582 #include <linux/linux_logo.h>
3583 #include <linux/font.h>
3584
3585 +#define NEWPORT_LEN 0x10000
3586 +
3587 #define FONT_DATA ((unsigned char *)font_vga_8x16.data)
3588
3589 /* borrowed from fbcon.c */
3590 @@ -42,6 +44,7 @@
3591 static unsigned char *font_data[MAX_NR_CONSOLES];
3592
3593 static struct newport_regs *npregs;
3594 +static unsigned long newport_addr;
3595
3596 static int logo_active;
3597 static int topscan;
3598 @@ -701,7 +704,6 @@ const struct consw newport_con = {
3599 static int newport_probe(struct gio_device *dev,
3600 const struct gio_device_id *id)
3601 {
3602 - unsigned long newport_addr;
3603 int err;
3604
3605 if (!dev->resource.start)
3606 @@ -711,7 +713,7 @@ static int newport_probe(struct gio_device *dev,
3607 return -EBUSY; /* we only support one Newport as console */
3608
3609 newport_addr = dev->resource.start + 0xF0000;
3610 - if (!request_mem_region(newport_addr, 0x10000, "Newport"))
3611 + if (!request_mem_region(newport_addr, NEWPORT_LEN, "Newport"))
3612 return -ENODEV;
3613
3614 npregs = (struct newport_regs *)/* ioremap cannot fail */
3615 @@ -719,6 +721,11 @@ static int newport_probe(struct gio_device *dev,
3616 console_lock();
3617 err = do_take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1);
3618 console_unlock();
3619 +
3620 + if (err) {
3621 + iounmap((void *)npregs);
3622 + release_mem_region(newport_addr, NEWPORT_LEN);
3623 + }
3624 return err;
3625 }
3626
3627 @@ -726,6 +733,7 @@ static void newport_remove(struct gio_device *dev)
3628 {
3629 give_up_console(&newport_con);
3630 iounmap((void *)npregs);
3631 + release_mem_region(newport_addr, NEWPORT_LEN);
3632 }
3633
3634 static struct gio_device_id newport_ids[] = {
3635 diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
3636 index 42c0a26646f66..d45ba7317b225 100644
3637 --- a/drivers/video/console/vgacon.c
3638 +++ b/drivers/video/console/vgacon.c
3639 @@ -219,6 +219,10 @@ static void vgacon_scrollback_update(struct vc_data *c, int t, int count)
3640 p = (void *) (c->vc_origin + t * c->vc_size_row);
3641
3642 while (count--) {
3643 + if ((vgacon_scrollback_tail + c->vc_size_row) >
3644 + vgacon_scrollback_size)
3645 + vgacon_scrollback_tail = 0;
3646 +
3647 scr_memcpyw(vgacon_scrollback + vgacon_scrollback_tail,
3648 p, c->vc_size_row);
3649 vgacon_scrollback_cnt++;
3650 diff --git a/drivers/video/fbdev/neofb.c b/drivers/video/fbdev/neofb.c
3651 index db023a97d1eae..e243254a57214 100644
3652 --- a/drivers/video/fbdev/neofb.c
3653 +++ b/drivers/video/fbdev/neofb.c
3654 @@ -1820,6 +1820,7 @@ static int neo_scan_monitor(struct fb_info *info)
3655 #else
3656 printk(KERN_ERR
3657 "neofb: Only 640x480, 800x600/480 and 1024x768 panels are currently supported\n");
3658 + kfree(info->monspecs.modedb);
3659 return -1;
3660 #endif
3661 default:
3662 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
3663 index 48c6500c24e1f..4429ad37b64cd 100644
3664 --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
3665 +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
3666 @@ -843,7 +843,7 @@ static const struct dss_features omap34xx_dss_feats = {
3667 };
3668
3669 static const struct dss_features omap3630_dss_feats = {
3670 - .fck_div_max = 32,
3671 + .fck_div_max = 31,
3672 .dss_fck_multiplier = 1,
3673 .parent_clk_name = "dpll4_ck",
3674 .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
3675 diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c
3676 index 8503310a38167..7f8b6af29aab4 100644
3677 --- a/drivers/video/fbdev/pxafb.c
3678 +++ b/drivers/video/fbdev/pxafb.c
3679 @@ -2447,8 +2447,8 @@ static int pxafb_remove(struct platform_device *dev)
3680
3681 free_pages_exact(fbi->video_mem, fbi->video_mem_size);
3682
3683 - dma_free_wc(&dev->dev, fbi->dma_buff_size, fbi->dma_buff,
3684 - fbi->dma_buff_phys);
3685 + dma_free_coherent(&dev->dev, fbi->dma_buff_size, fbi->dma_buff,
3686 + fbi->dma_buff_phys);
3687
3688 iounmap(fbi->mmio_base);
3689
3690 diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c
3691 index 0d92ff366a7b7..17efcdd4dc99b 100644
3692 --- a/drivers/video/fbdev/sm712fb.c
3693 +++ b/drivers/video/fbdev/sm712fb.c
3694 @@ -1428,6 +1428,8 @@ static int smtc_map_smem(struct smtcfb_info *sfb,
3695 static void smtc_unmap_smem(struct smtcfb_info *sfb)
3696 {
3697 if (sfb && sfb->fb->screen_base) {
3698 + if (sfb->chip_id == 0x720)
3699 + sfb->fb->screen_base -= 0x00200000;
3700 iounmap(sfb->fb->screen_base);
3701 sfb->fb->screen_base = NULL;
3702 }
3703 diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c
3704 index 88cd2a52d8d32..ae4974701e5c7 100644
3705 --- a/drivers/watchdog/f71808e_wdt.c
3706 +++ b/drivers/watchdog/f71808e_wdt.c
3707 @@ -688,9 +688,9 @@ static int __init watchdog_init(int sioaddr)
3708 * into the module have been registered yet.
3709 */
3710 watchdog.sioaddr = sioaddr;
3711 - watchdog.ident.options = WDIOC_SETTIMEOUT
3712 - | WDIOF_MAGICCLOSE
3713 - | WDIOF_KEEPALIVEPING;
3714 + watchdog.ident.options = WDIOF_MAGICCLOSE
3715 + | WDIOF_KEEPALIVEPING
3716 + | WDIOF_CARDRESET;
3717
3718 snprintf(watchdog.ident.identity,
3719 sizeof(watchdog.ident.identity), "%s watchdog",
3720 @@ -704,6 +704,13 @@ static int __init watchdog_init(int sioaddr)
3721 wdt_conf = superio_inb(sioaddr, F71808FG_REG_WDT_CONF);
3722 watchdog.caused_reboot = wdt_conf & BIT(F71808FG_FLAG_WDTMOUT_STS);
3723
3724 + /*
3725 + * We don't want WDTMOUT_STS to stick around till regular reboot.
3726 + * Write 1 to the bit to clear it to zero.
3727 + */
3728 + superio_outb(sioaddr, F71808FG_REG_WDT_CONF,
3729 + wdt_conf | BIT(F71808FG_FLAG_WDTMOUT_STS));
3730 +
3731 superio_exit(sioaddr);
3732
3733 err = watchdog_set_timeout(timeout);
3734 diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
3735 index 05f9f5983ee17..1b76e8a99c40b 100644
3736 --- a/drivers/xen/balloon.c
3737 +++ b/drivers/xen/balloon.c
3738 @@ -634,11 +634,13 @@ static int add_ballooned_pages(int nr_pages)
3739 if (xen_hotplug_unpopulated) {
3740 st = reserve_additional_memory();
3741 if (st != BP_ECANCELED) {
3742 + int rc;
3743 +
3744 mutex_unlock(&balloon_mutex);
3745 - wait_event(balloon_wq,
3746 + rc = wait_event_interruptible(balloon_wq,
3747 !list_empty(&ballooned_pages));
3748 mutex_lock(&balloon_mutex);
3749 - return 0;
3750 + return rc ? -ENOMEM : 0;
3751 }
3752 }
3753
3754 @@ -694,6 +696,12 @@ int alloc_xenballooned_pages(int nr_pages, struct page **pages)
3755 out_undo:
3756 mutex_unlock(&balloon_mutex);
3757 free_xenballooned_pages(pgno, pages);
3758 + /*
3759 + * NB: free_xenballooned_pages will only subtract pgno pages, but since
3760 + * target_unpopulated is incremented with nr_pages at the start we need
3761 + * to remove the remaining ones also, or accounting will be screwed.
3762 + */
3763 + balloon_stats.target_unpopulated -= nr_pages - pgno;
3764 return ret;
3765 }
3766 EXPORT_SYMBOL(alloc_xenballooned_pages);
3767 diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c
3768 index a8ff430686196..719c737ace262 100644
3769 --- a/fs/9p/v9fs.c
3770 +++ b/fs/9p/v9fs.c
3771 @@ -457,10 +457,9 @@ void v9fs_session_close(struct v9fs_session_info *v9ses)
3772 }
3773
3774 #ifdef CONFIG_9P_FSCACHE
3775 - if (v9ses->fscache) {
3776 + if (v9ses->fscache)
3777 v9fs_cache_session_put_cookie(v9ses);
3778 - kfree(v9ses->cachetag);
3779 - }
3780 + kfree(v9ses->cachetag);
3781 #endif
3782 kfree(v9ses->uname);
3783 kfree(v9ses->aname);
3784 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
3785 index 1de0170519280..d9909e2fc4c21 100644
3786 --- a/fs/btrfs/disk-io.c
3787 +++ b/fs/btrfs/disk-io.c
3788 @@ -1527,9 +1527,16 @@ int btrfs_init_fs_root(struct btrfs_root *root)
3789 spin_lock_init(&root->ino_cache_lock);
3790 init_waitqueue_head(&root->ino_cache_wait);
3791
3792 - ret = get_anon_bdev(&root->anon_dev);
3793 - if (ret)
3794 - goto fail;
3795 + /*
3796 + * Don't assign anonymous block device to roots that are not exposed to
3797 + * userspace, the id pool is limited to 1M
3798 + */
3799 + if (is_fstree(root->root_key.objectid) &&
3800 + btrfs_root_refs(&root->root_item) > 0) {
3801 + ret = get_anon_bdev(&root->anon_dev);
3802 + if (ret)
3803 + goto fail;
3804 + }
3805
3806 mutex_lock(&root->objectid_mutex);
3807 ret = btrfs_find_highest_objectid(root,
3808 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
3809 index 8c0ff985c1919..fa22bb29eee6f 100644
3810 --- a/fs/btrfs/extent_io.c
3811 +++ b/fs/btrfs/extent_io.c
3812 @@ -4340,6 +4340,8 @@ int try_release_extent_mapping(struct extent_map_tree *map,
3813
3814 /* once for us */
3815 free_extent_map(em);
3816 +
3817 + cond_resched(); /* Allow large-extent preemption. */
3818 }
3819 }
3820 return try_release_extent_state(map, tree, page, mask);
3821 diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
3822 index a84a1ceb260af..568ff2ee015be 100644
3823 --- a/fs/btrfs/free-space-cache.c
3824 +++ b/fs/btrfs/free-space-cache.c
3825 @@ -2152,7 +2152,7 @@ out:
3826 static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,
3827 struct btrfs_free_space *info, bool update_stat)
3828 {
3829 - struct btrfs_free_space *left_info;
3830 + struct btrfs_free_space *left_info = NULL;
3831 struct btrfs_free_space *right_info;
3832 bool merged = false;
3833 u64 offset = info->offset;
3834 @@ -2167,7 +2167,7 @@ static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,
3835 if (right_info && rb_prev(&right_info->offset_index))
3836 left_info = rb_entry(rb_prev(&right_info->offset_index),
3837 struct btrfs_free_space, offset_index);
3838 - else
3839 + else if (!right_info)
3840 left_info = tree_search_offset(ctl, offset - 1, 0, 0);
3841
3842 if (right_info && !right_info->bitmap) {
3843 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
3844 index f79682937faf4..c28ac9c464251 100644
3845 --- a/fs/btrfs/tree-log.c
3846 +++ b/fs/btrfs/tree-log.c
3847 @@ -3755,11 +3755,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
3848 log->fs_info->csum_root,
3849 ds + cs, ds + cs + cl - 1,
3850 &ordered_sums, 0);
3851 - if (ret) {
3852 - btrfs_release_path(dst_path);
3853 - kfree(ins_data);
3854 - return ret;
3855 - }
3856 + if (ret)
3857 + break;
3858 }
3859 }
3860 }
3861 @@ -3772,7 +3769,6 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
3862 * we have to do this after the loop above to avoid changing the
3863 * log tree while trying to change the log tree.
3864 */
3865 - ret = 0;
3866 while (!list_empty(&ordered_sums)) {
3867 struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
3868 struct btrfs_ordered_sum,
3869 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
3870 index 0a23b6002ff12..cf1a3d2f6ad8b 100644
3871 --- a/fs/cifs/smb2pdu.c
3872 +++ b/fs/cifs/smb2pdu.c
3873 @@ -776,6 +776,8 @@ SMB2_auth_kerberos(struct SMB2_sess_data *sess_data)
3874 spnego_key = cifs_get_spnego_key(ses);
3875 if (IS_ERR(spnego_key)) {
3876 rc = PTR_ERR(spnego_key);
3877 + if (rc == -ENOKEY)
3878 + cifs_dbg(VFS, "Verify user has a krb5 ticket and keyutils is installed\n");
3879 spnego_key = NULL;
3880 goto out;
3881 }
3882 diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
3883 index b14bb2c460426..499f54f99891c 100644
3884 --- a/fs/dlm/lockspace.c
3885 +++ b/fs/dlm/lockspace.c
3886 @@ -626,6 +626,9 @@ static int new_lockspace(const char *name, const char *cluster,
3887 wait_event(ls->ls_recover_lock_wait,
3888 test_bit(LSFL_RECOVER_LOCK, &ls->ls_flags));
3889
3890 + /* let kobject handle freeing of ls if there's an error */
3891 + do_unreg = 1;
3892 +
3893 ls->ls_kobj.kset = dlm_kset;
3894 error = kobject_init_and_add(&ls->ls_kobj, &dlm_ktype, NULL,
3895 "%s", ls->ls_name);
3896 @@ -633,9 +636,6 @@ static int new_lockspace(const char *name, const char *cluster,
3897 goto out_recoverd;
3898 kobject_uevent(&ls->ls_kobj, KOBJ_ADD);
3899
3900 - /* let kobject handle freeing of ls if there's an error */
3901 - do_unreg = 1;
3902 -
3903 /* This uevent triggers dlm_controld in userspace to add us to the
3904 group of nodes that are members of this lockspace (managed by the
3905 cluster infrastructure.) Once it's done that, it tells us who the
3906 diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c
3907 index 395fc074c0db8..6e1907cc1741a 100644
3908 --- a/fs/ext2/ialloc.c
3909 +++ b/fs/ext2/ialloc.c
3910 @@ -79,6 +79,7 @@ static void ext2_release_inode(struct super_block *sb, int group, int dir)
3911 if (dir)
3912 le16_add_cpu(&desc->bg_used_dirs_count, -1);
3913 spin_unlock(sb_bgl_lock(EXT2_SB(sb), group));
3914 + percpu_counter_inc(&EXT2_SB(sb)->s_freeinodes_counter);
3915 if (dir)
3916 percpu_counter_dec(&EXT2_SB(sb)->s_dirs_counter);
3917 mark_buffer_dirty(bh);
3918 @@ -530,7 +531,7 @@ got:
3919 goto fail;
3920 }
3921
3922 - percpu_counter_add(&sbi->s_freeinodes_counter, -1);
3923 + percpu_counter_dec(&sbi->s_freeinodes_counter);
3924 if (S_ISDIR(mode))
3925 percpu_counter_inc(&sbi->s_dirs_counter);
3926
3927 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
3928 index d8780e04aaf00..ccce89de6d7e3 100644
3929 --- a/fs/ext4/inode.c
3930 +++ b/fs/ext4/inode.c
3931 @@ -3575,6 +3575,11 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter)
3932 struct address_space *mapping = iocb->ki_filp->f_mapping;
3933 struct inode *inode = mapping->host;
3934 ssize_t ret;
3935 + loff_t offset = iocb->ki_pos;
3936 + loff_t size = i_size_read(inode);
3937 +
3938 + if (offset >= size)
3939 + return 0;
3940
3941 /*
3942 * Shared inode_lock is enough for us - it protects against concurrent
3943 diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
3944 index b414892be08b7..9a11b48e55ca2 100644
3945 --- a/fs/f2fs/dir.c
3946 +++ b/fs/f2fs/dir.c
3947 @@ -843,6 +843,17 @@ bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
3948 de_name.name = d->filename[bit_pos];
3949 de_name.len = le16_to_cpu(de->name_len);
3950
3951 + /* check memory boundary before moving forward */
3952 + bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
3953 + if (unlikely(bit_pos > d->max ||
3954 + le16_to_cpu(de->name_len) > F2FS_NAME_LEN)) {
3955 + f2fs_msg(F2FS_I_SB(d->inode)->sb, KERN_WARNING,
3956 + "%s: corrupted namelen=%d, run fsck to fix.",
3957 + __func__, le16_to_cpu(de->name_len));
3958 + set_sbi_flag(F2FS_I_SB(d->inode)->sb->s_fs_info, SBI_NEED_FSCK);
3959 + return -EINVAL;
3960 + }
3961 +
3962 if (f2fs_encrypted_inode(d->inode)) {
3963 int save_len = fstr->len;
3964 int err;
3965 @@ -861,7 +872,6 @@ bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
3966 le32_to_cpu(de->ino), d_type))
3967 return true;
3968
3969 - bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
3970 ctx->pos = start_pos + bit_pos;
3971 }
3972 return false;
3973 diff --git a/fs/minix/inode.c b/fs/minix/inode.c
3974 index f975d667c5390..1191f293ef1db 100644
3975 --- a/fs/minix/inode.c
3976 +++ b/fs/minix/inode.c
3977 @@ -155,6 +155,23 @@ static int minix_remount (struct super_block * sb, int * flags, char * data)
3978 return 0;
3979 }
3980
3981 +static bool minix_check_superblock(struct minix_sb_info *sbi)
3982 +{
3983 + if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0)
3984 + return false;
3985 +
3986 + /*
3987 + * s_max_size must not exceed the block mapping limitation. This check
3988 + * is only needed for V1 filesystems, since V2/V3 support an extra level
3989 + * of indirect blocks which places the limit well above U32_MAX.
3990 + */
3991 + if (sbi->s_version == MINIX_V1 &&
3992 + sbi->s_max_size > (7 + 512 + 512*512) * BLOCK_SIZE)
3993 + return false;
3994 +
3995 + return true;
3996 +}
3997 +
3998 static int minix_fill_super(struct super_block *s, void *data, int silent)
3999 {
4000 struct buffer_head *bh;
4001 @@ -233,11 +250,12 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
4002 } else
4003 goto out_no_fs;
4004
4005 + if (!minix_check_superblock(sbi))
4006 + goto out_illegal_sb;
4007 +
4008 /*
4009 * Allocate the buffer map to keep the superblock small.
4010 */
4011 - if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0)
4012 - goto out_illegal_sb;
4013 i = (sbi->s_imap_blocks + sbi->s_zmap_blocks) * sizeof(bh);
4014 map = kzalloc(i, GFP_KERNEL);
4015 if (!map)
4016 @@ -472,6 +490,13 @@ static struct inode *V1_minix_iget(struct inode *inode)
4017 iget_failed(inode);
4018 return ERR_PTR(-EIO);
4019 }
4020 + if (raw_inode->i_nlinks == 0) {
4021 + printk("MINIX-fs: deleted inode referenced: %lu\n",
4022 + inode->i_ino);
4023 + brelse(bh);
4024 + iget_failed(inode);
4025 + return ERR_PTR(-ESTALE);
4026 + }
4027 inode->i_mode = raw_inode->i_mode;
4028 i_uid_write(inode, raw_inode->i_uid);
4029 i_gid_write(inode, raw_inode->i_gid);
4030 @@ -505,6 +530,13 @@ static struct inode *V2_minix_iget(struct inode *inode)
4031 iget_failed(inode);
4032 return ERR_PTR(-EIO);
4033 }
4034 + if (raw_inode->i_nlinks == 0) {
4035 + printk("MINIX-fs: deleted inode referenced: %lu\n",
4036 + inode->i_ino);
4037 + brelse(bh);
4038 + iget_failed(inode);
4039 + return ERR_PTR(-ESTALE);
4040 + }
4041 inode->i_mode = raw_inode->i_mode;
4042 i_uid_write(inode, raw_inode->i_uid);
4043 i_gid_write(inode, raw_inode->i_gid);
4044 diff --git a/fs/minix/itree_common.c b/fs/minix/itree_common.c
4045 index 4c57c9af6946f..0417c4c5ebbd8 100644
4046 --- a/fs/minix/itree_common.c
4047 +++ b/fs/minix/itree_common.c
4048 @@ -74,6 +74,7 @@ static int alloc_branch(struct inode *inode,
4049 int n = 0;
4050 int i;
4051 int parent = minix_new_block(inode);
4052 + int err = -ENOSPC;
4053
4054 branch[0].key = cpu_to_block(parent);
4055 if (parent) for (n = 1; n < num; n++) {
4056 @@ -84,6 +85,11 @@ static int alloc_branch(struct inode *inode,
4057 break;
4058 branch[n].key = cpu_to_block(nr);
4059 bh = sb_getblk(inode->i_sb, parent);
4060 + if (!bh) {
4061 + minix_free_block(inode, nr);
4062 + err = -ENOMEM;
4063 + break;
4064 + }
4065 lock_buffer(bh);
4066 memset(bh->b_data, 0, bh->b_size);
4067 branch[n].bh = bh;
4068 @@ -102,7 +108,7 @@ static int alloc_branch(struct inode *inode,
4069 bforget(branch[i].bh);
4070 for (i = 0; i < n; i++)
4071 minix_free_block(inode, block_to_cpu(branch[i].key));
4072 - return -ENOSPC;
4073 + return err;
4074 }
4075
4076 static inline int splice_branch(struct inode *inode,
4077 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
4078 index c189722bf9c71..714457bb1440a 100644
4079 --- a/fs/nfs/nfs4proc.c
4080 +++ b/fs/nfs/nfs4proc.c
4081 @@ -5212,8 +5212,6 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf,
4082 return ret;
4083 if (!(fattr.valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL))
4084 return -ENOENT;
4085 - if (buflen < label.len)
4086 - return -ERANGE;
4087 return 0;
4088 }
4089
4090 diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
4091 index d7f8d5ce30e3e..0a7c4e30a385e 100644
4092 --- a/fs/nfs/nfs4xdr.c
4093 +++ b/fs/nfs/nfs4xdr.c
4094 @@ -4163,7 +4163,11 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap,
4095 goto out_overflow;
4096 if (len < NFS4_MAXLABELLEN) {
4097 if (label) {
4098 - memcpy(label->label, p, len);
4099 + if (label->len) {
4100 + if (label->len < len)
4101 + return -ERANGE;
4102 + memcpy(label->label, p, len);
4103 + }
4104 label->len = len;
4105 label->pi = pi;
4106 label->lfs = lfs;
4107 diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
4108 index 594575e380e81..994a8abdd3701 100644
4109 --- a/fs/ocfs2/ocfs2.h
4110 +++ b/fs/ocfs2/ocfs2.h
4111 @@ -337,8 +337,8 @@ struct ocfs2_super
4112 spinlock_t osb_lock;
4113 u32 s_next_generation;
4114 unsigned long osb_flags;
4115 - s16 s_inode_steal_slot;
4116 - s16 s_meta_steal_slot;
4117 + u16 s_inode_steal_slot;
4118 + u16 s_meta_steal_slot;
4119 atomic_t s_num_inodes_stolen;
4120 atomic_t s_num_meta_stolen;
4121
4122 diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
4123 index 00558bc59052e..f8d092b80a49f 100644
4124 --- a/fs/ocfs2/suballoc.c
4125 +++ b/fs/ocfs2/suballoc.c
4126 @@ -895,9 +895,9 @@ static void __ocfs2_set_steal_slot(struct ocfs2_super *osb, int slot, int type)
4127 {
4128 spin_lock(&osb->osb_lock);
4129 if (type == INODE_ALLOC_SYSTEM_INODE)
4130 - osb->s_inode_steal_slot = slot;
4131 + osb->s_inode_steal_slot = (u16)slot;
4132 else if (type == EXTENT_ALLOC_SYSTEM_INODE)
4133 - osb->s_meta_steal_slot = slot;
4134 + osb->s_meta_steal_slot = (u16)slot;
4135 spin_unlock(&osb->osb_lock);
4136 }
4137
4138 diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
4139 index 64dfbe5755da5..4d6e99ea37b8e 100644
4140 --- a/fs/ocfs2/super.c
4141 +++ b/fs/ocfs2/super.c
4142 @@ -91,7 +91,7 @@ struct mount_options
4143 unsigned long commit_interval;
4144 unsigned long mount_opt;
4145 unsigned int atime_quantum;
4146 - signed short slot;
4147 + unsigned short slot;
4148 int localalloc_opt;
4149 unsigned int resv_level;
4150 int dir_resv_level;
4151 @@ -1369,7 +1369,7 @@ static int ocfs2_parse_options(struct super_block *sb,
4152 goto bail;
4153 }
4154 if (option)
4155 - mopt->slot = (s16)option;
4156 + mopt->slot = (u16)option;
4157 break;
4158 case Opt_commit:
4159 if (match_int(&args[0], &option)) {
4160 diff --git a/fs/ufs/super.c b/fs/ufs/super.c
4161 index 351162ff1bfd2..e320d824ee4d9 100644
4162 --- a/fs/ufs/super.c
4163 +++ b/fs/ufs/super.c
4164 @@ -99,7 +99,7 @@ static struct inode *ufs_nfs_get_inode(struct super_block *sb, u64 ino, u32 gene
4165 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
4166 struct inode *inode;
4167
4168 - if (ino < UFS_ROOTINO || ino > uspi->s_ncg * uspi->s_ipg)
4169 + if (ino < UFS_ROOTINO || ino > (u64)uspi->s_ncg * uspi->s_ipg)
4170 return ERR_PTR(-ESTALE);
4171
4172 inode = ufs_iget(sb, ino);
4173 diff --git a/fs/xattr.c b/fs/xattr.c
4174 index 2f64231823013..c0fd99c95aa15 100644
4175 --- a/fs/xattr.c
4176 +++ b/fs/xattr.c
4177 @@ -203,10 +203,22 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
4178 return error;
4179 }
4180
4181 -
4182 +/**
4183 + * __vfs_setxattr_locked: set an extended attribute while holding the inode
4184 + * lock
4185 + *
4186 + * @dentry - object to perform setxattr on
4187 + * @name - xattr name to set
4188 + * @value - value to set @name to
4189 + * @size - size of @value
4190 + * @flags - flags to pass into filesystem operations
4191 + * @delegated_inode - on return, will contain an inode pointer that
4192 + * a delegation was broken on, NULL if none.
4193 + */
4194 int
4195 -vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
4196 - size_t size, int flags)
4197 +__vfs_setxattr_locked(struct dentry *dentry, const char *name,
4198 + const void *value, size_t size, int flags,
4199 + struct inode **delegated_inode)
4200 {
4201 struct inode *inode = dentry->d_inode;
4202 int error;
4203 @@ -215,15 +227,40 @@ vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
4204 if (error)
4205 return error;
4206
4207 - inode_lock(inode);
4208 error = security_inode_setxattr(dentry, name, value, size, flags);
4209 if (error)
4210 goto out;
4211
4212 + error = try_break_deleg(inode, delegated_inode);
4213 + if (error)
4214 + goto out;
4215 +
4216 error = __vfs_setxattr_noperm(dentry, name, value, size, flags);
4217
4218 out:
4219 + return error;
4220 +}
4221 +EXPORT_SYMBOL_GPL(__vfs_setxattr_locked);
4222 +
4223 +int
4224 +vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
4225 + size_t size, int flags)
4226 +{
4227 + struct inode *inode = dentry->d_inode;
4228 + struct inode *delegated_inode = NULL;
4229 + int error;
4230 +
4231 +retry_deleg:
4232 + inode_lock(inode);
4233 + error = __vfs_setxattr_locked(dentry, name, value, size, flags,
4234 + &delegated_inode);
4235 inode_unlock(inode);
4236 +
4237 + if (delegated_inode) {
4238 + error = break_deleg_wait(&delegated_inode);
4239 + if (!error)
4240 + goto retry_deleg;
4241 + }
4242 return error;
4243 }
4244 EXPORT_SYMBOL_GPL(vfs_setxattr);
4245 @@ -379,8 +416,18 @@ __vfs_removexattr(struct dentry *dentry, const char *name)
4246 }
4247 EXPORT_SYMBOL(__vfs_removexattr);
4248
4249 +/**
4250 + * __vfs_removexattr_locked: set an extended attribute while holding the inode
4251 + * lock
4252 + *
4253 + * @dentry - object to perform setxattr on
4254 + * @name - name of xattr to remove
4255 + * @delegated_inode - on return, will contain an inode pointer that
4256 + * a delegation was broken on, NULL if none.
4257 + */
4258 int
4259 -vfs_removexattr(struct dentry *dentry, const char *name)
4260 +__vfs_removexattr_locked(struct dentry *dentry, const char *name,
4261 + struct inode **delegated_inode)
4262 {
4263 struct inode *inode = dentry->d_inode;
4264 int error;
4265 @@ -389,11 +436,14 @@ vfs_removexattr(struct dentry *dentry, const char *name)
4266 if (error)
4267 return error;
4268
4269 - inode_lock(inode);
4270 error = security_inode_removexattr(dentry, name);
4271 if (error)
4272 goto out;
4273
4274 + error = try_break_deleg(inode, delegated_inode);
4275 + if (error)
4276 + goto out;
4277 +
4278 error = __vfs_removexattr(dentry, name);
4279
4280 if (!error) {
4281 @@ -402,12 +452,32 @@ vfs_removexattr(struct dentry *dentry, const char *name)
4282 }
4283
4284 out:
4285 + return error;
4286 +}
4287 +EXPORT_SYMBOL_GPL(__vfs_removexattr_locked);
4288 +
4289 +int
4290 +vfs_removexattr(struct dentry *dentry, const char *name)
4291 +{
4292 + struct inode *inode = dentry->d_inode;
4293 + struct inode *delegated_inode = NULL;
4294 + int error;
4295 +
4296 +retry_deleg:
4297 + inode_lock(inode);
4298 + error = __vfs_removexattr_locked(dentry, name, &delegated_inode);
4299 inode_unlock(inode);
4300 +
4301 + if (delegated_inode) {
4302 + error = break_deleg_wait(&delegated_inode);
4303 + if (!error)
4304 + goto retry_deleg;
4305 + }
4306 +
4307 return error;
4308 }
4309 EXPORT_SYMBOL_GPL(vfs_removexattr);
4310
4311 -
4312 /*
4313 * Extended attribute SET operations
4314 */
4315 diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
4316 index c6c15e5717e42..70da4113c2baf 100644
4317 --- a/fs/xfs/libxfs/xfs_attr_leaf.c
4318 +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
4319 @@ -785,9 +785,8 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args)
4320 ASSERT(blkno == 0);
4321 error = xfs_attr3_leaf_create(args, blkno, &bp);
4322 if (error) {
4323 - error = xfs_da_shrink_inode(args, 0, bp);
4324 - bp = NULL;
4325 - if (error)
4326 + /* xfs_attr3_leaf_create may not have instantiated a block */
4327 + if (bp && (xfs_da_shrink_inode(args, 0, bp) != 0))
4328 goto out;
4329 xfs_idata_realloc(dp, size, XFS_ATTR_FORK); /* try to put */
4330 memcpy(ifp->if_u1.if_data, tmpbuffer, size); /* it back */
4331 diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
4332 index 86a4911520cc5..69c112ddb544d 100644
4333 --- a/fs/xfs/xfs_icache.c
4334 +++ b/fs/xfs/xfs_icache.c
4335 @@ -307,6 +307,46 @@ xfs_reinit_inode(
4336 return error;
4337 }
4338
4339 +/*
4340 + * If we are allocating a new inode, then check what was returned is
4341 + * actually a free, empty inode. If we are not allocating an inode,
4342 + * then check we didn't find a free inode.
4343 + *
4344 + * Returns:
4345 + * 0 if the inode free state matches the lookup context
4346 + * -ENOENT if the inode is free and we are not allocating
4347 + * -EFSCORRUPTED if there is any state mismatch at all
4348 + */
4349 +static int
4350 +xfs_iget_check_free_state(
4351 + struct xfs_inode *ip,
4352 + int flags)
4353 +{
4354 + if (flags & XFS_IGET_CREATE) {
4355 + /* should be a free inode */
4356 + if (VFS_I(ip)->i_mode != 0) {
4357 + xfs_warn(ip->i_mount,
4358 +"Corruption detected! Free inode 0x%llx not marked free! (mode 0x%x)",
4359 + ip->i_ino, VFS_I(ip)->i_mode);
4360 + return -EFSCORRUPTED;
4361 + }
4362 +
4363 + if (ip->i_d.di_nblocks != 0) {
4364 + xfs_warn(ip->i_mount,
4365 +"Corruption detected! Free inode 0x%llx has blocks allocated!",
4366 + ip->i_ino);
4367 + return -EFSCORRUPTED;
4368 + }
4369 + return 0;
4370 + }
4371 +
4372 + /* should be an allocated inode */
4373 + if (VFS_I(ip)->i_mode == 0)
4374 + return -ENOENT;
4375 +
4376 + return 0;
4377 +}
4378 +
4379 /*
4380 * Check the validity of the inode we just found it the cache
4381 */
4382 @@ -356,12 +396,12 @@ xfs_iget_cache_hit(
4383 }
4384
4385 /*
4386 - * If lookup is racing with unlink return an error immediately.
4387 + * Check the inode free state is valid. This also detects lookup
4388 + * racing with unlinks.
4389 */
4390 - if (VFS_I(ip)->i_mode == 0 && !(flags & XFS_IGET_CREATE)) {
4391 - error = -ENOENT;
4392 + error = xfs_iget_check_free_state(ip, flags);
4393 + if (error)
4394 goto out_error;
4395 - }
4396
4397 /*
4398 * If IRECLAIMABLE is set, we've torn down the VFS inode already.
4399 @@ -471,10 +511,14 @@ xfs_iget_cache_miss(
4400
4401 trace_xfs_iget_miss(ip);
4402
4403 - if ((VFS_I(ip)->i_mode == 0) && !(flags & XFS_IGET_CREATE)) {
4404 - error = -ENOENT;
4405 +
4406 + /*
4407 + * Check the inode free state is valid. This also detects lookup
4408 + * racing with unlinks.
4409 + */
4410 + error = xfs_iget_check_free_state(ip, flags);
4411 + if (error)
4412 goto out_destroy;
4413 - }
4414
4415 /*
4416 * Preload the radix tree so we can insert safely under the
4417 diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
4418 index 7bfcd09d446b7..6bc949c63a75d 100644
4419 --- a/fs/xfs/xfs_log.c
4420 +++ b/fs/xfs/xfs_log.c
4421 @@ -2634,7 +2634,6 @@ xlog_state_do_callback(
4422 int funcdidcallbacks; /* flag: function did callbacks */
4423 int repeats; /* for issuing console warnings if
4424 * looping too many times */
4425 - int wake = 0;
4426
4427 spin_lock(&log->l_icloglock);
4428 first_iclog = iclog = log->l_iclog;
4429 @@ -2836,11 +2835,9 @@ xlog_state_do_callback(
4430 #endif
4431
4432 if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR))
4433 - wake = 1;
4434 - spin_unlock(&log->l_icloglock);
4435 -
4436 - if (wake)
4437 wake_up_all(&log->l_flush_wait);
4438 +
4439 + spin_unlock(&log->l_icloglock);
4440 }
4441
4442
4443 @@ -4002,7 +3999,9 @@ xfs_log_force_umount(
4444 * item committed callback functions will do this again under lock to
4445 * avoid races.
4446 */
4447 + spin_lock(&log->l_cilp->xc_push_lock);
4448 wake_up_all(&log->l_cilp->xc_commit_wait);
4449 + spin_unlock(&log->l_cilp->xc_push_lock);
4450 xlog_state_do_callback(log, XFS_LI_ABORTED, NULL);
4451
4452 #ifdef XFSERRORDEBUG
4453 diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
4454 index 6b753b969f7b8..aa99711a8ff96 100644
4455 --- a/fs/xfs/xfs_reflink.c
4456 +++ b/fs/xfs/xfs_reflink.c
4457 @@ -1108,6 +1108,7 @@ xfs_reflink_remap_extent(
4458 xfs_filblks_t rlen;
4459 xfs_filblks_t unmap_len;
4460 xfs_off_t newlen;
4461 + int64_t qres;
4462 int error;
4463
4464 unmap_len = irec->br_startoff + irec->br_blockcount - destoff;
4465 @@ -1135,13 +1136,19 @@ xfs_reflink_remap_extent(
4466 xfs_ilock(ip, XFS_ILOCK_EXCL);
4467 xfs_trans_ijoin(tp, ip, 0);
4468
4469 - /* If we're not just clearing space, then do we have enough quota? */
4470 - if (real_extent) {
4471 - error = xfs_trans_reserve_quota_nblks(tp, ip,
4472 - irec->br_blockcount, 0, XFS_QMOPT_RES_REGBLKS);
4473 - if (error)
4474 - goto out_cancel;
4475 - }
4476 + /*
4477 + * Reserve quota for this operation. We don't know if the first unmap
4478 + * in the dest file will cause a bmap btree split, so we always reserve
4479 + * at least enough blocks for that split. If the extent being mapped
4480 + * in is written, we need to reserve quota for that too.
4481 + */
4482 + qres = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK);
4483 + if (real_extent)
4484 + qres += irec->br_blockcount;
4485 + error = xfs_trans_reserve_quota_nblks(tp, ip, qres, 0,
4486 + XFS_QMOPT_RES_REGBLKS);
4487 + if (error)
4488 + goto out_cancel;
4489
4490 trace_xfs_reflink_remap(ip, irec->br_startoff,
4491 irec->br_blockcount, irec->br_startblock);
4492 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
4493 index 1462071a19bf2..4fdb1d9848444 100644
4494 --- a/include/asm-generic/vmlinux.lds.h
4495 +++ b/include/asm-generic/vmlinux.lds.h
4496 @@ -250,7 +250,8 @@
4497
4498 #define PAGE_ALIGNED_DATA(page_align) \
4499 . = ALIGN(page_align); \
4500 - *(.data..page_aligned)
4501 + *(.data..page_aligned) \
4502 + . = ALIGN(page_align);
4503
4504 #define READ_MOSTLY_DATA(align) \
4505 . = ALIGN(align); \
4506 @@ -625,7 +626,9 @@
4507 . = ALIGN(bss_align); \
4508 .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \
4509 BSS_FIRST_SECTIONS \
4510 + . = ALIGN(PAGE_SIZE); \
4511 *(.bss..page_aligned) \
4512 + . = ALIGN(PAGE_SIZE); \
4513 *(.dynbss) \
4514 *(BSS_MAIN) \
4515 *(COMMON) \
4516 diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
4517 index 27dbab59f034c..d86ac620f0aac 100644
4518 --- a/include/linux/intel-iommu.h
4519 +++ b/include/linux/intel-iommu.h
4520 @@ -317,8 +317,8 @@ enum {
4521
4522 #define QI_DEV_EIOTLB_ADDR(a) ((u64)(a) & VTD_PAGE_MASK)
4523 #define QI_DEV_EIOTLB_SIZE (((u64)1) << 11)
4524 -#define QI_DEV_EIOTLB_GLOB(g) ((u64)g)
4525 -#define QI_DEV_EIOTLB_PASID(p) (((u64)p) << 32)
4526 +#define QI_DEV_EIOTLB_GLOB(g) ((u64)(g) & 0x1)
4527 +#define QI_DEV_EIOTLB_PASID(p) ((u64)((p) & 0xfffff) << 32)
4528 #define QI_DEV_EIOTLB_SID(sid) ((u64)((sid) & 0xffff) << 16)
4529 #define QI_DEV_EIOTLB_QDEP(qd) ((u64)((qd) & 0x1f) << 4)
4530 #define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \
4531 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
4532 index e3d7754f25f00..5c7645e156a50 100644
4533 --- a/include/linux/mmzone.h
4534 +++ b/include/linux/mmzone.h
4535 @@ -756,7 +756,8 @@ static inline bool is_dev_zone(const struct zone *zone)
4536 #include <linux/memory_hotplug.h>
4537
4538 extern struct mutex zonelists_mutex;
4539 -void build_all_zonelists(pg_data_t *pgdat, struct zone *zone);
4540 +void build_all_zonelists(pg_data_t *pgdat, struct zone *zone,
4541 + bool hotplug_context);
4542 void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx);
4543 bool __zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark,
4544 int classzone_idx, unsigned int alloc_flags,
4545 diff --git a/include/linux/prandom.h b/include/linux/prandom.h
4546 new file mode 100644
4547 index 0000000000000..aa16e6468f91e
4548 --- /dev/null
4549 +++ b/include/linux/prandom.h
4550 @@ -0,0 +1,78 @@
4551 +/* SPDX-License-Identifier: GPL-2.0 */
4552 +/*
4553 + * include/linux/prandom.h
4554 + *
4555 + * Include file for the fast pseudo-random 32-bit
4556 + * generation.
4557 + */
4558 +#ifndef _LINUX_PRANDOM_H
4559 +#define _LINUX_PRANDOM_H
4560 +
4561 +#include <linux/types.h>
4562 +#include <linux/percpu.h>
4563 +
4564 +u32 prandom_u32(void);
4565 +void prandom_bytes(void *buf, size_t nbytes);
4566 +void prandom_seed(u32 seed);
4567 +void prandom_reseed_late(void);
4568 +
4569 +struct rnd_state {
4570 + __u32 s1, s2, s3, s4;
4571 +};
4572 +
4573 +DECLARE_PER_CPU(struct rnd_state, net_rand_state);
4574 +
4575 +u32 prandom_u32_state(struct rnd_state *state);
4576 +void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes);
4577 +void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
4578 +
4579 +#define prandom_init_once(pcpu_state) \
4580 + DO_ONCE(prandom_seed_full_state, (pcpu_state))
4581 +
4582 +/**
4583 + * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
4584 + * @ep_ro: right open interval endpoint
4585 + *
4586 + * Returns a pseudo-random number that is in interval [0, ep_ro). Note
4587 + * that the result depends on PRNG being well distributed in [0, ~0U]
4588 + * u32 space. Here we use maximally equidistributed combined Tausworthe
4589 + * generator, that is, prandom_u32(). This is useful when requesting a
4590 + * random index of an array containing ep_ro elements, for example.
4591 + *
4592 + * Returns: pseudo-random number in interval [0, ep_ro)
4593 + */
4594 +static inline u32 prandom_u32_max(u32 ep_ro)
4595 +{
4596 + return (u32)(((u64) prandom_u32() * ep_ro) >> 32);
4597 +}
4598 +
4599 +/*
4600 + * Handle minimum values for seeds
4601 + */
4602 +static inline u32 __seed(u32 x, u32 m)
4603 +{
4604 + return (x < m) ? x + m : x;
4605 +}
4606 +
4607 +/**
4608 + * prandom_seed_state - set seed for prandom_u32_state().
4609 + * @state: pointer to state structure to receive the seed.
4610 + * @seed: arbitrary 64-bit value to use as a seed.
4611 + */
4612 +static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
4613 +{
4614 + u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
4615 +
4616 + state->s1 = __seed(i, 2U);
4617 + state->s2 = __seed(i, 8U);
4618 + state->s3 = __seed(i, 16U);
4619 + state->s4 = __seed(i, 128U);
4620 +}
4621 +
4622 +/* Pseudo random number generator from numerical recipes. */
4623 +static inline u32 next_pseudo_random32(u32 seed)
4624 +{
4625 + return seed * 1664525 + 1013904223;
4626 +}
4627 +
4628 +#endif
4629 diff --git a/include/linux/random.h b/include/linux/random.h
4630 index 16ab429735a78..15cd754544686 100644
4631 --- a/include/linux/random.h
4632 +++ b/include/linux/random.h
4633 @@ -46,61 +46,12 @@ unsigned int get_random_int(void);
4634 unsigned long get_random_long(void);
4635 unsigned long randomize_page(unsigned long start, unsigned long range);
4636
4637 -u32 prandom_u32(void);
4638 -void prandom_bytes(void *buf, size_t nbytes);
4639 -void prandom_seed(u32 seed);
4640 -void prandom_reseed_late(void);
4641 -
4642 -struct rnd_state {
4643 - __u32 s1, s2, s3, s4;
4644 -};
4645 -
4646 -u32 prandom_u32_state(struct rnd_state *state);
4647 -void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes);
4648 -void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
4649 -
4650 -#define prandom_init_once(pcpu_state) \
4651 - DO_ONCE(prandom_seed_full_state, (pcpu_state))
4652 -
4653 -/**
4654 - * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
4655 - * @ep_ro: right open interval endpoint
4656 - *
4657 - * Returns a pseudo-random number that is in interval [0, ep_ro). Note
4658 - * that the result depends on PRNG being well distributed in [0, ~0U]
4659 - * u32 space. Here we use maximally equidistributed combined Tausworthe
4660 - * generator, that is, prandom_u32(). This is useful when requesting a
4661 - * random index of an array containing ep_ro elements, for example.
4662 - *
4663 - * Returns: pseudo-random number in interval [0, ep_ro)
4664 - */
4665 -static inline u32 prandom_u32_max(u32 ep_ro)
4666 -{
4667 - return (u32)(((u64) prandom_u32() * ep_ro) >> 32);
4668 -}
4669 -
4670 /*
4671 - * Handle minimum values for seeds
4672 + * This is designed to be standalone for just prandom
4673 + * users, but for now we include it from <linux/random.h>
4674 + * for legacy reasons.
4675 */
4676 -static inline u32 __seed(u32 x, u32 m)
4677 -{
4678 - return (x < m) ? x + m : x;
4679 -}
4680 -
4681 -/**
4682 - * prandom_seed_state - set seed for prandom_u32_state().
4683 - * @state: pointer to state structure to receive the seed.
4684 - * @seed: arbitrary 64-bit value to use as a seed.
4685 - */
4686 -static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
4687 -{
4688 - u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
4689 -
4690 - state->s1 = __seed(i, 2U);
4691 - state->s2 = __seed(i, 8U);
4692 - state->s3 = __seed(i, 16U);
4693 - state->s4 = __seed(i, 128U);
4694 -}
4695 +#include <linux/prandom.h>
4696
4697 #ifdef CONFIG_ARCH_RANDOM
4698 # include <asm/archrandom.h>
4699 @@ -131,10 +82,4 @@ static inline bool arch_has_random_seed(void)
4700 }
4701 #endif
4702
4703 -/* Pseudo random number generator from numerical recipes. */
4704 -static inline u32 next_pseudo_random32(u32 seed)
4705 -{
4706 - return seed * 1664525 + 1013904223;
4707 -}
4708 -
4709 #endif /* _LINUX_RANDOM_H */
4710 diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
4711 index be586c632a0c0..f261114e2758a 100644
4712 --- a/include/linux/tracepoint.h
4713 +++ b/include/linux/tracepoint.h
4714 @@ -314,7 +314,7 @@ extern void syscall_unregfunc(void);
4715 static const char *___tp_str __tracepoint_string = str; \
4716 ___tp_str; \
4717 })
4718 -#define __tracepoint_string __attribute__((section("__tracepoint_str")))
4719 +#define __tracepoint_string __attribute__((section("__tracepoint_str"), used))
4720 #else
4721 /*
4722 * tracepoint_string() is used to save the string address for userspace
4723 diff --git a/include/linux/xattr.h b/include/linux/xattr.h
4724 index e77605a0c8da3..1b1c9bfd24e99 100644
4725 --- a/include/linux/xattr.h
4726 +++ b/include/linux/xattr.h
4727 @@ -51,8 +51,10 @@ ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
4728 ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
4729 int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
4730 int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int);
4731 +int __vfs_setxattr_locked(struct dentry *, const char *, const void *, size_t, int, struct inode **);
4732 int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
4733 int __vfs_removexattr(struct dentry *, const char *);
4734 +int __vfs_removexattr_locked(struct dentry *, const char *, struct inode **);
4735 int vfs_removexattr(struct dentry *, const char *);
4736
4737 ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
4738 diff --git a/include/net/addrconf.h b/include/net/addrconf.h
4739 index 019b06c035a84..34ea021df0083 100644
4740 --- a/include/net/addrconf.h
4741 +++ b/include/net/addrconf.h
4742 @@ -253,6 +253,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex,
4743 const struct in6_addr *addr);
4744 int ipv6_sock_ac_drop(struct sock *sk, int ifindex,
4745 const struct in6_addr *addr);
4746 +void __ipv6_sock_ac_close(struct sock *sk);
4747 void ipv6_sock_ac_close(struct sock *sk);
4748
4749 int __ipv6_dev_ac_inc(struct inet6_dev *idev, const struct in6_addr *addr);
4750 diff --git a/include/net/sock.h b/include/net/sock.h
4751 index db68c72126d54..d0e18917d8be8 100644
4752 --- a/include/net/sock.h
4753 +++ b/include/net/sock.h
4754 @@ -784,6 +784,8 @@ static inline int sk_memalloc_socks(void)
4755 {
4756 return static_key_false(&memalloc_socks);
4757 }
4758 +
4759 +void __receive_sock(struct file *file);
4760 #else
4761
4762 static inline int sk_memalloc_socks(void)
4763 @@ -791,6 +793,8 @@ static inline int sk_memalloc_socks(void)
4764 return 0;
4765 }
4766
4767 +static inline void __receive_sock(struct file *file)
4768 +{ }
4769 #endif
4770
4771 static inline gfp_t sk_gfp_mask(const struct sock *sk, gfp_t gfp_mask)
4772 diff --git a/include/uapi/drm/Kbuild b/include/uapi/drm/Kbuild
4773 index 9355dd8eff3ba..489b093580dd0 100644
4774 --- a/include/uapi/drm/Kbuild
4775 +++ b/include/uapi/drm/Kbuild
4776 @@ -20,3 +20,6 @@ header-y += vmwgfx_drm.h
4777 header-y += msm_drm.h
4778 header-y += vc4_drm.h
4779 header-y += virtgpu_drm.h
4780 +header-y += armada_drm.h
4781 +header-y += etnaviv_drm.h
4782 +header-y += vgem_drm.h
4783 diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
4784 index cd2be1c8e9fb6..39bf68b36332e 100644
4785 --- a/include/uapi/linux/Kbuild
4786 +++ b/include/uapi/linux/Kbuild
4787 @@ -475,3 +475,23 @@ header-y += xilinx-v4l2-controls.h
4788 header-y += zorro.h
4789 header-y += zorro_ids.h
4790 header-y += userfaultfd.h
4791 +header-y += auto_dev-ioctl.h
4792 +header-y += bcache.h
4793 +header-y += btrfs_tree.h
4794 +header-y += coresight-stm.h
4795 +header-y += cryptouser.h
4796 +header-y += hash_info.h
4797 +header-y += kcm.h
4798 +header-y += kcov.h
4799 +header-y += kfd_ioctl.h
4800 +header-y += lightnvm.h
4801 +header-y += module.h
4802 +header-y += nilfs2_api.h
4803 +header-y += nilfs2_ondisk.h
4804 +header-y += nsfs.h
4805 +header-y += pr.h
4806 +header-y += qrtr.h
4807 +header-y += stm.h
4808 +header-y += wil6210_uapi.h
4809 +header-y += cifs/
4810 +header-y += genwqe/
4811 diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h
4812 index 8562b1cb776b7..3b92610502ca8 100644
4813 --- a/include/uapi/linux/bcache.h
4814 +++ b/include/uapi/linux/bcache.h
4815 @@ -5,7 +5,7 @@
4816 * Bcache on disk data structures
4817 */
4818
4819 -#include <asm/types.h>
4820 +#include <linux/types.h>
4821
4822 #define BITMASK(name, type, field, offset, size) \
4823 static inline __u64 name(const type *k) \
4824 diff --git a/include/uapi/linux/btrfs_tree.h b/include/uapi/linux/btrfs_tree.h
4825 index a1ded2a1bf1da..2abf660e9f65c 100644
4826 --- a/include/uapi/linux/btrfs_tree.h
4827 +++ b/include/uapi/linux/btrfs_tree.h
4828 @@ -1,6 +1,8 @@
4829 #ifndef _BTRFS_CTREE_H_
4830 #define _BTRFS_CTREE_H_
4831
4832 +#include <linux/types.h>
4833 +
4834 /*
4835 * This header contains the structure definitions and constants used
4836 * by file system objects that can be retrieved using
4837 diff --git a/include/uapi/linux/cifs/Kbuild b/include/uapi/linux/cifs/Kbuild
4838 new file mode 100644
4839 index 0000000000000..829f5d44f5be4
4840 --- /dev/null
4841 +++ b/include/uapi/linux/cifs/Kbuild
4842 @@ -0,0 +1 @@
4843 +header-y += cifs_mount.h
4844 diff --git a/include/uapi/linux/cryptouser.h b/include/uapi/linux/cryptouser.h
4845 index 79b5ded2001a3..3d0aa2bc69f32 100644
4846 --- a/include/uapi/linux/cryptouser.h
4847 +++ b/include/uapi/linux/cryptouser.h
4848 @@ -18,6 +18,8 @@
4849 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
4850 */
4851
4852 +#include <linux/types.h>
4853 +
4854 /* Netlink configuration messages. */
4855 enum {
4856 CRYPTO_MSG_BASE = 0x10,
4857 diff --git a/include/uapi/linux/genwqe/Kbuild b/include/uapi/linux/genwqe/Kbuild
4858 new file mode 100644
4859 index 0000000000000..027f11d24ca31
4860 --- /dev/null
4861 +++ b/include/uapi/linux/genwqe/Kbuild
4862 @@ -0,0 +1 @@
4863 +header-y += genwqe_card.h
4864 diff --git a/include/uapi/linux/pr.h b/include/uapi/linux/pr.h
4865 index 57d7c0f916b6f..645ef3cf3dd08 100644
4866 --- a/include/uapi/linux/pr.h
4867 +++ b/include/uapi/linux/pr.h
4868 @@ -1,6 +1,8 @@
4869 #ifndef _UAPI_PR_H
4870 #define _UAPI_PR_H
4871
4872 +#include <linux/types.h>
4873 +
4874 enum pr_type {
4875 PR_WRITE_EXCLUSIVE = 1,
4876 PR_EXCLUSIVE_ACCESS = 2,
4877 diff --git a/include/uapi/linux/qrtr.h b/include/uapi/linux/qrtr.h
4878 index 66c0748d26e2b..9d76c566f66e8 100644
4879 --- a/include/uapi/linux/qrtr.h
4880 +++ b/include/uapi/linux/qrtr.h
4881 @@ -2,6 +2,7 @@
4882 #define _LINUX_QRTR_H
4883
4884 #include <linux/socket.h>
4885 +#include <linux/types.h>
4886
4887 struct sockaddr_qrtr {
4888 __kernel_sa_family_t sq_family;
4889 diff --git a/init/main.c b/init/main.c
4890 index d47860dbe8969..7ad08957dd180 100644
4891 --- a/init/main.c
4892 +++ b/init/main.c
4893 @@ -512,7 +512,7 @@ asmlinkage __visible void __init start_kernel(void)
4894 smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
4895 boot_cpu_hotplug_init();
4896
4897 - build_all_zonelists(NULL, NULL);
4898 + build_all_zonelists(NULL, NULL, false);
4899 page_alloc_init();
4900
4901 pr_notice("Kernel command line: %s\n", boot_command_line);
4902 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
4903 index f047c73189f36..684d02f343b4c 100644
4904 --- a/kernel/cgroup.c
4905 +++ b/kernel/cgroup.c
4906 @@ -6355,6 +6355,8 @@ void cgroup_sk_clone(struct sock_cgroup_data *skcd)
4907 {
4908 /* Socket clone path */
4909 if (skcd->val) {
4910 + if (skcd->no_refcnt)
4911 + return;
4912 /*
4913 * We might be cloning a socket which is left in an empty
4914 * cgroup and the cgroup might have already been rmdir'd.
4915 diff --git a/kernel/kprobes.c b/kernel/kprobes.c
4916 index a864e94ecb6b6..9aa2dbe6a4568 100644
4917 --- a/kernel/kprobes.c
4918 +++ b/kernel/kprobes.c
4919 @@ -2029,6 +2029,13 @@ static void kill_kprobe(struct kprobe *p)
4920 * the original probed function (which will be freed soon) any more.
4921 */
4922 arch_remove_kprobe(p);
4923 +
4924 + /*
4925 + * The module is going away. We should disarm the kprobe which
4926 + * is using ftrace.
4927 + */
4928 + if (kprobe_ftrace(p))
4929 + disarm_kprobe_ftrace(p);
4930 }
4931
4932 /* Disable one kprobe */
4933 diff --git a/kernel/time/timer.c b/kernel/time/timer.c
4934 index 88c2c597f61c4..d2e4698d43fec 100644
4935 --- a/kernel/time/timer.c
4936 +++ b/kernel/time/timer.c
4937 @@ -42,6 +42,7 @@
4938 #include <linux/sched/sysctl.h>
4939 #include <linux/slab.h>
4940 #include <linux/compat.h>
4941 +#include <linux/random.h>
4942
4943 #include <asm/uaccess.h>
4944 #include <asm/unistd.h>
4945 @@ -1635,6 +1636,13 @@ void update_process_times(int user_tick)
4946 #endif
4947 scheduler_tick();
4948 run_posix_cpu_timers(p);
4949 +
4950 + /* The current CPU might make use of net randoms without receiving IRQs
4951 + * to renew them often enough. Let's update the net_rand_state from a
4952 + * non-constant value that's not affine to the number of calls to make
4953 + * sure it's updated when there's some activity (we don't care in idle).
4954 + */
4955 + this_cpu_add(net_rand_state.s1, rol32(jiffies, 24) + user_tick);
4956 }
4957
4958 /**
4959 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
4960 index 2ae98f8bce81b..4d1be82e7011a 100644
4961 --- a/kernel/trace/ftrace.c
4962 +++ b/kernel/trace/ftrace.c
4963 @@ -4987,8 +4987,11 @@ static int referenced_filters(struct dyn_ftrace *rec)
4964 int cnt = 0;
4965
4966 for (ops = ftrace_ops_list; ops != &ftrace_list_end; ops = ops->next) {
4967 - if (ops_references_rec(ops, rec))
4968 - cnt++;
4969 + if (ops_references_rec(ops, rec)) {
4970 + cnt++;
4971 + if (ops->flags & FTRACE_OPS_FL_SAVE_REGS)
4972 + rec->flags |= FTRACE_FL_REGS;
4973 + }
4974 }
4975
4976 return cnt;
4977 @@ -5084,8 +5087,8 @@ void ftrace_module_enable(struct module *mod)
4978 if (ftrace_start_up)
4979 cnt += referenced_filters(rec);
4980
4981 - /* This clears FTRACE_FL_DISABLED */
4982 - rec->flags = cnt;
4983 + rec->flags &= ~FTRACE_FL_DISABLED;
4984 + rec->flags += cnt;
4985
4986 if (ftrace_start_up && cnt) {
4987 int failed = __ftrace_replace_code(rec, 1);
4988 diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
4989 index c7c96bc7654af..91c451e0f4741 100644
4990 --- a/lib/dynamic_debug.c
4991 +++ b/lib/dynamic_debug.c
4992 @@ -85,22 +85,22 @@ static struct { unsigned flag:8; char opt_char; } opt_array[] = {
4993 { _DPRINTK_FLAGS_NONE, '_' },
4994 };
4995
4996 +struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; };
4997 +
4998 /* format a string into buf[] which describes the _ddebug's flags */
4999 -static char *ddebug_describe_flags(struct _ddebug *dp, char *buf,
5000 - size_t maxlen)
5001 +static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb)
5002 {
5003 - char *p = buf;
5004 + char *p = fb->buf;
5005 int i;
5006
5007 - BUG_ON(maxlen < 6);
5008 for (i = 0; i < ARRAY_SIZE(opt_array); ++i)
5009 - if (dp->flags & opt_array[i].flag)
5010 + if (flags & opt_array[i].flag)
5011 *p++ = opt_array[i].opt_char;
5012 - if (p == buf)
5013 + if (p == fb->buf)
5014 *p++ = '_';
5015 *p = '\0';
5016
5017 - return buf;
5018 + return fb->buf;
5019 }
5020
5021 #define vpr_info(fmt, ...) \
5022 @@ -142,7 +142,7 @@ static int ddebug_change(const struct ddebug_query *query,
5023 struct ddebug_table *dt;
5024 unsigned int newflags;
5025 unsigned int nfound = 0;
5026 - char flagbuf[10];
5027 + struct flagsbuf fbuf;
5028
5029 /* search for matching ddebugs */
5030 mutex_lock(&ddebug_lock);
5031 @@ -199,8 +199,7 @@ static int ddebug_change(const struct ddebug_query *query,
5032 vpr_info("changed %s:%d [%s]%s =%s\n",
5033 trim_prefix(dp->filename), dp->lineno,
5034 dt->mod_name, dp->function,
5035 - ddebug_describe_flags(dp, flagbuf,
5036 - sizeof(flagbuf)));
5037 + ddebug_describe_flags(dp->flags, &fbuf));
5038 }
5039 }
5040 mutex_unlock(&ddebug_lock);
5041 @@ -779,7 +778,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p)
5042 {
5043 struct ddebug_iter *iter = m->private;
5044 struct _ddebug *dp = p;
5045 - char flagsbuf[10];
5046 + struct flagsbuf flags;
5047
5048 vpr_info("called m=%p p=%p\n", m, p);
5049
5050 @@ -792,7 +791,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p)
5051 seq_printf(m, "%s:%u [%s]%s =%s \"",
5052 trim_prefix(dp->filename), dp->lineno,
5053 iter->table->mod_name, dp->function,
5054 - ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf)));
5055 + ddebug_describe_flags(dp->flags, &flags));
5056 seq_escape(m, dp->format, "\t\r\n\"");
5057 seq_puts(m, "\"\n");
5058
5059 diff --git a/lib/random32.c b/lib/random32.c
5060 index fa594b1140e64..889dab44bd747 100644
5061 --- a/lib/random32.c
5062 +++ b/lib/random32.c
5063 @@ -47,7 +47,7 @@ static inline void prandom_state_selftest(void)
5064 }
5065 #endif
5066
5067 -static DEFINE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy;
5068 +DEFINE_PER_CPU(struct rnd_state, net_rand_state);
5069
5070 /**
5071 * prandom_u32_state - seeded pseudo-random number generator.
5072 diff --git a/mm/khugepaged.c b/mm/khugepaged.c
5073 index 8217ee5d66ef2..3080c6415493c 100644
5074 --- a/mm/khugepaged.c
5075 +++ b/mm/khugepaged.c
5076 @@ -1250,6 +1250,7 @@ static void collect_mm_slot(struct mm_slot *mm_slot)
5077 static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
5078 {
5079 struct vm_area_struct *vma;
5080 + struct mm_struct *mm;
5081 unsigned long addr;
5082 pmd_t *pmd, _pmd;
5083
5084 @@ -1263,7 +1264,8 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
5085 continue;
5086 if (vma->vm_end < addr + HPAGE_PMD_SIZE)
5087 continue;
5088 - pmd = mm_find_pmd(vma->vm_mm, addr);
5089 + mm = vma->vm_mm;
5090 + pmd = mm_find_pmd(mm, addr);
5091 if (!pmd)
5092 continue;
5093 /*
5094 @@ -1272,14 +1274,16 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
5095 * re-fault. Not ideal, but it's more important to not disturb
5096 * the system too much.
5097 */
5098 - if (down_write_trylock(&vma->vm_mm->mmap_sem)) {
5099 - spinlock_t *ptl = pmd_lock(vma->vm_mm, pmd);
5100 - /* assume page table is clear */
5101 - _pmd = pmdp_collapse_flush(vma, addr, pmd);
5102 - spin_unlock(ptl);
5103 - up_write(&vma->vm_mm->mmap_sem);
5104 - atomic_long_dec(&vma->vm_mm->nr_ptes);
5105 - pte_free(vma->vm_mm, pmd_pgtable(_pmd));
5106 + if (down_write_trylock(&mm->mmap_sem)) {
5107 + if (!khugepaged_test_exit(mm)) {
5108 + spinlock_t *ptl = pmd_lock(mm, pmd);
5109 + /* assume page table is clear */
5110 + _pmd = pmdp_collapse_flush(vma, addr, pmd);
5111 + spin_unlock(ptl);
5112 + atomic_long_dec(&mm->nr_ptes);
5113 + pte_free(mm, pmd_pgtable(_pmd));
5114 + }
5115 + up_write(&mm->mmap_sem);
5116 }
5117 }
5118 i_mmap_unlock_write(mapping);
5119 diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
5120 index 449999657c0bb..a4ffe59963176 100644
5121 --- a/mm/memory_hotplug.c
5122 +++ b/mm/memory_hotplug.c
5123 @@ -1125,7 +1125,7 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ
5124 mutex_lock(&zonelists_mutex);
5125 if (!populated_zone(zone)) {
5126 need_zonelists_rebuild = 1;
5127 - build_all_zonelists(NULL, zone);
5128 + build_all_zonelists(NULL, zone, true);
5129 }
5130
5131 ret = walk_system_ram_range(pfn, nr_pages, &onlined_pages,
5132 @@ -1146,7 +1146,7 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ
5133 if (onlined_pages) {
5134 node_states_set_node(nid, &arg);
5135 if (need_zonelists_rebuild)
5136 - build_all_zonelists(NULL, NULL);
5137 + build_all_zonelists(NULL, NULL, true);
5138 else
5139 zone_pcp_update(zone);
5140 }
5141 @@ -1220,7 +1220,7 @@ static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
5142 * to access not-initialized zonelist, build here.
5143 */
5144 mutex_lock(&zonelists_mutex);
5145 - build_all_zonelists(pgdat, NULL);
5146 + build_all_zonelists(pgdat, NULL, true);
5147 mutex_unlock(&zonelists_mutex);
5148
5149 /*
5150 @@ -1276,7 +1276,7 @@ int try_online_node(int nid)
5151
5152 if (pgdat->node_zonelists->_zonerefs->zone == NULL) {
5153 mutex_lock(&zonelists_mutex);
5154 - build_all_zonelists(NULL, NULL);
5155 + build_all_zonelists(NULL, NULL, true);
5156 mutex_unlock(&zonelists_mutex);
5157 }
5158
5159 @@ -2016,7 +2016,7 @@ repeat:
5160 if (!populated_zone(zone)) {
5161 zone_pcp_reset(zone);
5162 mutex_lock(&zonelists_mutex);
5163 - build_all_zonelists(NULL, NULL);
5164 + build_all_zonelists(NULL, NULL, true);
5165 mutex_unlock(&zonelists_mutex);
5166 } else
5167 zone_pcp_update(zone);
5168 diff --git a/mm/mmap.c b/mm/mmap.c
5169 index d221266d100f4..7109f886e739e 100644
5170 --- a/mm/mmap.c
5171 +++ b/mm/mmap.c
5172 @@ -3018,6 +3018,7 @@ void exit_mmap(struct mm_struct *mm)
5173 if (vma->vm_flags & VM_ACCOUNT)
5174 nr_accounted += vma_pages(vma);
5175 vma = remove_vma(vma);
5176 + cond_resched();
5177 }
5178 vm_unacct_memory(nr_accounted);
5179 }
5180 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
5181 index de00e0fec4845..f394dd87fa033 100644
5182 --- a/mm/page_alloc.c
5183 +++ b/mm/page_alloc.c
5184 @@ -4608,7 +4608,7 @@ int numa_zonelist_order_handler(struct ctl_table *table, int write,
5185 user_zonelist_order = oldval;
5186 } else if (oldval != user_zonelist_order) {
5187 mutex_lock(&zonelists_mutex);
5188 - build_all_zonelists(NULL, NULL);
5189 + build_all_zonelists(NULL, NULL, false);
5190 mutex_unlock(&zonelists_mutex);
5191 }
5192 }
5193 @@ -4988,11 +4988,12 @@ build_all_zonelists_init(void)
5194 * (2) call of __init annotated helper build_all_zonelists_init
5195 * [protected by SYSTEM_BOOTING].
5196 */
5197 -void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone)
5198 +void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone,
5199 + bool hotplug_context)
5200 {
5201 set_zonelist_order();
5202
5203 - if (system_state == SYSTEM_BOOTING) {
5204 + if (system_state == SYSTEM_BOOTING && !hotplug_context) {
5205 build_all_zonelists_init();
5206 } else {
5207 #ifdef CONFIG_MEMORY_HOTPLUG
5208 diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
5209 index aa4586672cee9..bad27b0ec65d6 100644
5210 --- a/net/9p/trans_fd.c
5211 +++ b/net/9p/trans_fd.c
5212 @@ -295,7 +295,6 @@ static void p9_read_work(struct work_struct *work)
5213 {
5214 int n, err;
5215 struct p9_conn *m;
5216 - int status = REQ_STATUS_ERROR;
5217
5218 m = container_of(work, struct p9_conn, rq);
5219
5220 @@ -375,11 +374,21 @@ static void p9_read_work(struct work_struct *work)
5221 if ((m->req) && (m->rc.offset == m->rc.capacity)) {
5222 p9_debug(P9_DEBUG_TRANS, "got new packet\n");
5223 spin_lock(&m->client->lock);
5224 - if (m->req->status != REQ_STATUS_ERROR)
5225 - status = REQ_STATUS_RCVD;
5226 - list_del(&m->req->req_list);
5227 - /* update req->status while holding client->lock */
5228 - p9_client_cb(m->client, m->req, status);
5229 + if (m->req->status == REQ_STATUS_SENT) {
5230 + list_del(&m->req->req_list);
5231 + p9_client_cb(m->client, m->req, REQ_STATUS_RCVD);
5232 + } else if (m->req->status == REQ_STATUS_FLSHD) {
5233 + /* Ignore replies associated with a cancelled request. */
5234 + p9_debug(P9_DEBUG_TRANS,
5235 + "Ignore replies associated with a cancelled request\n");
5236 + } else {
5237 + spin_unlock(&m->client->lock);
5238 + p9_debug(P9_DEBUG_ERROR,
5239 + "Request tag %d errored out while we were reading the reply\n",
5240 + m->rc.tag);
5241 + err = -EIO;
5242 + goto error;
5243 + }
5244 spin_unlock(&m->client->lock);
5245 m->rc.sdata = NULL;
5246 m->rc.offset = 0;
5247 @@ -712,11 +721,20 @@ static int p9_fd_cancelled(struct p9_client *client, struct p9_req_t *req)
5248 {
5249 p9_debug(P9_DEBUG_TRANS, "client %p req %p\n", client, req);
5250
5251 + spin_lock(&client->lock);
5252 + /* Ignore cancelled request if message has been received
5253 + * before lock.
5254 + */
5255 + if (req->status == REQ_STATUS_RCVD) {
5256 + spin_unlock(&client->lock);
5257 + return 0;
5258 + }
5259 +
5260 /* we haven't received a response for oldreq,
5261 * remove it from the list.
5262 */
5263 - spin_lock(&client->lock);
5264 list_del(&req->req_list);
5265 + req->status = REQ_STATUS_FLSHD;
5266 spin_unlock(&client->lock);
5267
5268 return 0;
5269 @@ -797,20 +815,28 @@ static int p9_fd_open(struct p9_client *client, int rfd, int wfd)
5270 return -ENOMEM;
5271
5272 ts->rd = fget(rfd);
5273 + if (!ts->rd)
5274 + goto out_free_ts;
5275 + if (!(ts->rd->f_mode & FMODE_READ))
5276 + goto out_put_rd;
5277 ts->wr = fget(wfd);
5278 - if (!ts->rd || !ts->wr) {
5279 - if (ts->rd)
5280 - fput(ts->rd);
5281 - if (ts->wr)
5282 - fput(ts->wr);
5283 - kfree(ts);
5284 - return -EIO;
5285 - }
5286 + if (!ts->wr)
5287 + goto out_put_rd;
5288 + if (!(ts->wr->f_mode & FMODE_WRITE))
5289 + goto out_put_wr;
5290
5291 client->trans = ts;
5292 client->status = Connected;
5293
5294 return 0;
5295 +
5296 +out_put_wr:
5297 + fput(ts->wr);
5298 +out_put_rd:
5299 + fput(ts->rd);
5300 +out_free_ts:
5301 + kfree(ts);
5302 + return -EIO;
5303 }
5304
5305 static int p9_socket_open(struct p9_client *client, struct socket *csocket)
5306 diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
5307 index 21096c8822231..3bfd747aa515b 100644
5308 --- a/net/bluetooth/6lowpan.c
5309 +++ b/net/bluetooth/6lowpan.c
5310 @@ -57,6 +57,7 @@ static bool enable_6lowpan;
5311 /* We are listening incoming connections via this channel
5312 */
5313 static struct l2cap_chan *listen_chan;
5314 +static DEFINE_MUTEX(set_lock);
5315
5316 struct lowpan_peer {
5317 struct list_head list;
5318 @@ -1187,12 +1188,14 @@ static void do_enable_set(struct work_struct *work)
5319
5320 enable_6lowpan = set_enable->flag;
5321
5322 + mutex_lock(&set_lock);
5323 if (listen_chan) {
5324 l2cap_chan_close(listen_chan, 0);
5325 l2cap_chan_put(listen_chan);
5326 }
5327
5328 listen_chan = bt_6lowpan_listen();
5329 + mutex_unlock(&set_lock);
5330
5331 kfree(set_enable);
5332 }
5333 @@ -1244,11 +1247,13 @@ static ssize_t lowpan_control_write(struct file *fp,
5334 if (ret == -EINVAL)
5335 return ret;
5336
5337 + mutex_lock(&set_lock);
5338 if (listen_chan) {
5339 l2cap_chan_close(listen_chan, 0);
5340 l2cap_chan_put(listen_chan);
5341 listen_chan = NULL;
5342 }
5343 + mutex_unlock(&set_lock);
5344
5345 if (conn) {
5346 struct lowpan_peer *peer;
5347 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
5348 index a8aa3f29f2d61..757977c54d9ef 100644
5349 --- a/net/bluetooth/hci_event.c
5350 +++ b/net/bluetooth/hci_event.c
5351 @@ -2094,7 +2094,7 @@ static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
5352
5353 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
5354
5355 - if (!num_rsp)
5356 + if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
5357 return;
5358
5359 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
5360 @@ -3623,6 +3623,9 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
5361 struct inquiry_info_with_rssi_and_pscan_mode *info;
5362 info = (void *) (skb->data + 1);
5363
5364 + if (skb->len < num_rsp * sizeof(*info) + 1)
5365 + goto unlock;
5366 +
5367 for (; num_rsp; num_rsp--, info++) {
5368 u32 flags;
5369
5370 @@ -3644,6 +3647,9 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
5371 } else {
5372 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
5373
5374 + if (skb->len < num_rsp * sizeof(*info) + 1)
5375 + goto unlock;
5376 +
5377 for (; num_rsp; num_rsp--, info++) {
5378 u32 flags;
5379
5380 @@ -3664,6 +3670,7 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
5381 }
5382 }
5383
5384 +unlock:
5385 hci_dev_unlock(hdev);
5386 }
5387
5388 @@ -3826,7 +3833,7 @@ static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
5389
5390 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
5391
5392 - if (!num_rsp)
5393 + if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
5394 return;
5395
5396 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
5397 diff --git a/net/compat.c b/net/compat.c
5398 index 633fcf6ee3697..ce851cf4d0f9d 100644
5399 --- a/net/compat.c
5400 +++ b/net/compat.c
5401 @@ -284,6 +284,7 @@ void scm_detach_fds_compat(struct msghdr *kmsg, struct scm_cookie *scm)
5402 break;
5403 }
5404 /* Bump the usage count and install the file. */
5405 + __receive_sock(fp[i]);
5406 fd_install(new_fd, get_file(fp[i]));
5407 }
5408
5409 diff --git a/net/core/sock.c b/net/core/sock.c
5410 index 3be209f749654..d468ffb5a31c6 100644
5411 --- a/net/core/sock.c
5412 +++ b/net/core/sock.c
5413 @@ -2323,6 +2323,27 @@ int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *
5414 }
5415 EXPORT_SYMBOL(sock_no_mmap);
5416
5417 +/*
5418 + * When a file is received (via SCM_RIGHTS, etc), we must bump the
5419 + * various sock-based usage counts.
5420 + */
5421 +void __receive_sock(struct file *file)
5422 +{
5423 + struct socket *sock;
5424 + int error;
5425 +
5426 + /*
5427 + * The resulting value of "error" is ignored here since we only
5428 + * need to take action when the file is a socket and testing
5429 + * "sock" for NULL is sufficient.
5430 + */
5431 + sock = sock_from_file(file, &error);
5432 + if (sock) {
5433 + sock_update_netprioidx(&sock->sk->sk_cgrp_data);
5434 + sock_update_classid(&sock->sk->sk_cgrp_data);
5435 + }
5436 +}
5437 +
5438 ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
5439 {
5440 ssize_t res;
5441 diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
5442 index a1a7ed6fc8dda..88e357b5fc0f8 100644
5443 --- a/net/ipv4/fib_trie.c
5444 +++ b/net/ipv4/fib_trie.c
5445 @@ -1719,7 +1719,7 @@ struct fib_table *fib_trie_unmerge(struct fib_table *oldtb)
5446 while ((l = leaf_walk_rcu(&tp, key)) != NULL) {
5447 struct key_vector *local_l = NULL, *local_tp;
5448
5449 - hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) {
5450 + hlist_for_each_entry(fa, &l->leaf, fa_list) {
5451 struct fib_alias *new_fa;
5452
5453 if (local_tb->tb_id != fa->tb_id)
5454 diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
5455 index 514ac259f5433..b831e9b2e9063 100644
5456 --- a/net/ipv6/anycast.c
5457 +++ b/net/ipv6/anycast.c
5458 @@ -170,7 +170,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
5459 return 0;
5460 }
5461
5462 -void ipv6_sock_ac_close(struct sock *sk)
5463 +void __ipv6_sock_ac_close(struct sock *sk)
5464 {
5465 struct ipv6_pinfo *np = inet6_sk(sk);
5466 struct net_device *dev = NULL;
5467 @@ -178,10 +178,7 @@ void ipv6_sock_ac_close(struct sock *sk)
5468 struct net *net = sock_net(sk);
5469 int prev_index;
5470
5471 - if (!np->ipv6_ac_list)
5472 - return;
5473 -
5474 - rtnl_lock();
5475 + ASSERT_RTNL();
5476 pac = np->ipv6_ac_list;
5477 np->ipv6_ac_list = NULL;
5478
5479 @@ -198,6 +195,16 @@ void ipv6_sock_ac_close(struct sock *sk)
5480 sock_kfree_s(sk, pac, sizeof(*pac));
5481 pac = next;
5482 }
5483 +}
5484 +
5485 +void ipv6_sock_ac_close(struct sock *sk)
5486 +{
5487 + struct ipv6_pinfo *np = inet6_sk(sk);
5488 +
5489 + if (!np->ipv6_ac_list)
5490 + return;
5491 + rtnl_lock();
5492 + __ipv6_sock_ac_close(sk);
5493 rtnl_unlock();
5494 }
5495
5496 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
5497 index 2c770bba212cf..622063438953b 100644
5498 --- a/net/ipv6/ipv6_sockglue.c
5499 +++ b/net/ipv6/ipv6_sockglue.c
5500 @@ -206,6 +206,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
5501
5502 fl6_free_socklist(sk);
5503 __ipv6_sock_mc_close(sk);
5504 + __ipv6_sock_ac_close(sk);
5505
5506 /*
5507 * Sock is moving from IPv6 to IPv4 (sk_prot), so
5508 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
5509 index 88dd5d218fe30..1a13715b9a591 100644
5510 --- a/net/mac80211/cfg.c
5511 +++ b/net/mac80211/cfg.c
5512 @@ -1964,6 +1964,7 @@ static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev)
5513 ieee80211_stop_mesh(sdata);
5514 mutex_lock(&sdata->local->mtx);
5515 ieee80211_vif_release_channel(sdata);
5516 + kfree(sdata->u.mesh.ie);
5517 mutex_unlock(&sdata->local->mtx);
5518
5519 return 0;
5520 diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
5521 index 8c17d498df301..7c409ba1ddc74 100644
5522 --- a/net/mac80211/mesh_pathtbl.c
5523 +++ b/net/mac80211/mesh_pathtbl.c
5524 @@ -555,6 +555,7 @@ static void mesh_path_free_rcu(struct mesh_table *tbl,
5525 del_timer_sync(&mpath->timer);
5526 atomic_dec(&sdata->u.mesh.mpaths);
5527 atomic_dec(&tbl->entries);
5528 + mesh_path_flush_pending(mpath);
5529 kfree_rcu(mpath, rcu);
5530 }
5531
5532 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
5533 index 4f7061c3b7706..fef8d7758dae9 100644
5534 --- a/net/mac80211/sta_info.c
5535 +++ b/net/mac80211/sta_info.c
5536 @@ -946,7 +946,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
5537 might_sleep();
5538 lockdep_assert_held(&local->sta_mtx);
5539
5540 - while (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
5541 + if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
5542 ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
5543 WARN_ON_ONCE(ret);
5544 }
5545 diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
5546 index e386e6c90b179..574af981806fa 100644
5547 --- a/net/nfc/rawsock.c
5548 +++ b/net/nfc/rawsock.c
5549 @@ -344,10 +344,13 @@ static int rawsock_create(struct net *net, struct socket *sock,
5550 if ((sock->type != SOCK_SEQPACKET) && (sock->type != SOCK_RAW))
5551 return -ESOCKTNOSUPPORT;
5552
5553 - if (sock->type == SOCK_RAW)
5554 + if (sock->type == SOCK_RAW) {
5555 + if (!capable(CAP_NET_RAW))
5556 + return -EPERM;
5557 sock->ops = &rawsock_raw_ops;
5558 - else
5559 + } else {
5560 sock->ops = &rawsock_ops;
5561 + }
5562
5563 sk = sk_alloc(net, PF_NFC, GFP_ATOMIC, nfc_proto->proto, kern);
5564 if (!sk)
5565 diff --git a/net/rds/recv.c b/net/rds/recv.c
5566 index f16ee1b13b8d6..488a198be3e1f 100644
5567 --- a/net/rds/recv.c
5568 +++ b/net/rds/recv.c
5569 @@ -405,12 +405,13 @@ static int rds_still_queued(struct rds_sock *rs, struct rds_incoming *inc,
5570 int rds_notify_queue_get(struct rds_sock *rs, struct msghdr *msghdr)
5571 {
5572 struct rds_notifier *notifier;
5573 - struct rds_rdma_notify cmsg = { 0 }; /* fill holes with zero */
5574 + struct rds_rdma_notify cmsg;
5575 unsigned int count = 0, max_messages = ~0U;
5576 unsigned long flags;
5577 LIST_HEAD(copy);
5578 int err = 0;
5579
5580 + memset(&cmsg, 0, sizeof(cmsg)); /* fill holes with zero */
5581
5582 /* put_cmsg copies to user space and thus may sleep. We can't do this
5583 * with rs_lock held, so first grab as many notifications as we can stuff
5584 diff --git a/net/socket.c b/net/socket.c
5585 index 88abc72df2a69..ab64ae80ca2cd 100644
5586 --- a/net/socket.c
5587 +++ b/net/socket.c
5588 @@ -498,7 +498,7 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)
5589 if (f.file) {
5590 sock = sock_from_file(f.file, err);
5591 if (likely(sock)) {
5592 - *fput_needed = f.flags;
5593 + *fput_needed = f.flags & FDPUT_FPUT;
5594 return sock;
5595 }
5596 fdput(f);
5597 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
5598 index 0048f90944ddf..e107754e29a77 100644
5599 --- a/net/wireless/nl80211.c
5600 +++ b/net/wireless/nl80211.c
5601 @@ -11317,13 +11317,13 @@ static int nl80211_vendor_cmd(struct sk_buff *skb, struct genl_info *info)
5602 if (!wdev->netdev && !wdev->p2p_started)
5603 return -ENETDOWN;
5604 }
5605 -
5606 - if (!vcmd->doit)
5607 - return -EOPNOTSUPP;
5608 } else {
5609 wdev = NULL;
5610 }
5611
5612 + if (!vcmd->doit)
5613 + return -EOPNOTSUPP;
5614 +
5615 if (info->attrs[NL80211_ATTR_VENDOR_DATA]) {
5616 data = nla_data(info->attrs[NL80211_ATTR_VENDOR_DATA]);
5617 len = nla_len(info->attrs[NL80211_ATTR_VENDOR_DATA]);
5618 diff --git a/net/x25/x25_subr.c b/net/x25/x25_subr.c
5619 index 6b5af65f491fb..a3163645b5bd3 100644
5620 --- a/net/x25/x25_subr.c
5621 +++ b/net/x25/x25_subr.c
5622 @@ -368,6 +368,12 @@ void x25_disconnect(struct sock *sk, int reason, unsigned char cause,
5623 sk->sk_state_change(sk);
5624 sock_set_flag(sk, SOCK_DEAD);
5625 }
5626 + if (x25->neighbour) {
5627 + read_lock_bh(&x25_list_lock);
5628 + x25_neigh_put(x25->neighbour);
5629 + x25->neighbour = NULL;
5630 + read_unlock_bh(&x25_list_lock);
5631 + }
5632 }
5633
5634 /*
5635 diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
5636 index 3397b216bc6ca..4aecdc8f74b2a 100644
5637 --- a/security/smack/smackfs.c
5638 +++ b/security/smack/smackfs.c
5639 @@ -907,7 +907,7 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
5640 }
5641
5642 ret = sscanf(rule, "%d", &maplevel);
5643 - if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL)
5644 + if (ret != 1 || maplevel < 0 || maplevel > SMACK_CIPSO_MAXLEVEL)
5645 goto out;
5646
5647 rule += SMK_DIGITLEN;
5648 @@ -928,6 +928,10 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
5649
5650 for (i = 0; i < catlen; i++) {
5651 rule += SMK_DIGITLEN;
5652 + if (rule > data + count) {
5653 + rc = -EOVERFLOW;
5654 + goto out;
5655 + }
5656 ret = sscanf(rule, "%u", &cat);
5657 if (ret != 1 || cat > SMACK_CIPSO_MAXCATNUM)
5658 goto out;
5659 @@ -2741,7 +2745,6 @@ static int smk_open_relabel_self(struct inode *inode, struct file *file)
5660 static ssize_t smk_write_relabel_self(struct file *file, const char __user *buf,
5661 size_t count, loff_t *ppos)
5662 {
5663 - struct task_smack *tsp = current_security();
5664 char *data;
5665 int rc;
5666 LIST_HEAD(list_tmp);
5667 @@ -2766,11 +2769,21 @@ static ssize_t smk_write_relabel_self(struct file *file, const char __user *buf,
5668 kfree(data);
5669
5670 if (!rc || (rc == -EINVAL && list_empty(&list_tmp))) {
5671 + struct cred *new;
5672 + struct task_smack *tsp;
5673 +
5674 + new = prepare_creds();
5675 + if (!new) {
5676 + rc = -ENOMEM;
5677 + goto out;
5678 + }
5679 + tsp = new->security;
5680 smk_destroy_label_list(&tsp->smk_relabel);
5681 list_splice(&list_tmp, &tsp->smk_relabel);
5682 + commit_creds(new);
5683 return count;
5684 }
5685 -
5686 +out:
5687 smk_destroy_label_list(&list_tmp);
5688 return rc;
5689 }
5690 diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
5691 index 8cdf489df80e0..4b78979599131 100644
5692 --- a/sound/core/seq/oss/seq_oss.c
5693 +++ b/sound/core/seq/oss/seq_oss.c
5694 @@ -181,10 +181,16 @@ static long
5695 odev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
5696 {
5697 struct seq_oss_devinfo *dp;
5698 + long rc;
5699 +
5700 dp = file->private_data;
5701 if (snd_BUG_ON(!dp))
5702 return -ENXIO;
5703 - return snd_seq_oss_ioctl(dp, cmd, arg);
5704 +
5705 + mutex_lock(&register_mutex);
5706 + rc = snd_seq_oss_ioctl(dp, cmd, arg);
5707 + mutex_unlock(&register_mutex);
5708 + return rc;
5709 }
5710
5711 #ifdef CONFIG_COMPAT
5712 diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
5713 index d73ee11a32bd0..db14ee43e461a 100644
5714 --- a/sound/pci/echoaudio/echoaudio.c
5715 +++ b/sound/pci/echoaudio/echoaudio.c
5716 @@ -2215,7 +2215,6 @@ static int snd_echo_resume(struct device *dev)
5717 if (err < 0) {
5718 kfree(commpage_bak);
5719 dev_err(dev, "resume init_hw err=%d\n", err);
5720 - snd_echo_free(chip);
5721 return err;
5722 }
5723
5724 @@ -2242,7 +2241,6 @@ static int snd_echo_resume(struct device *dev)
5725 if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
5726 KBUILD_MODNAME, chip)) {
5727 dev_err(chip->card->dev, "cannot grab irq\n");
5728 - snd_echo_free(chip);
5729 return -EBUSY;
5730 }
5731 chip->irq = pci->irq;
5732 diff --git a/sound/usb/card.h b/sound/usb/card.h
5733 index 111b0f009afa4..f1a517ac49b28 100644
5734 --- a/sound/usb/card.h
5735 +++ b/sound/usb/card.h
5736 @@ -125,6 +125,7 @@ struct snd_usb_substream {
5737 unsigned int tx_length_quirk:1; /* add length specifier to transfers */
5738 unsigned int fmt_type; /* USB audio format type (1-3) */
5739 unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */
5740 + unsigned int stream_offset_adj; /* Bytes to drop from beginning of stream (for non-compliant devices) */
5741
5742 unsigned int running: 1; /* running status */
5743
5744 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
5745 index 198515f86fcc2..1f2c69e599d9c 100644
5746 --- a/sound/usb/mixer_quirks.c
5747 +++ b/sound/usb/mixer_quirks.c
5748 @@ -195,6 +195,7 @@ static const struct rc_config {
5749 { USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
5750 { USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
5751 { USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
5752 + { USB_ID(0x041e, 0x3263), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
5753 { USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
5754 };
5755
5756 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
5757 index 9bc995f9b4e17..ec7bea45c852c 100644
5758 --- a/sound/usb/pcm.c
5759 +++ b/sound/usb/pcm.c
5760 @@ -1312,6 +1312,12 @@ static void retire_capture_urb(struct snd_usb_substream *subs,
5761 // continue;
5762 }
5763 bytes = urb->iso_frame_desc[i].actual_length;
5764 + if (subs->stream_offset_adj > 0) {
5765 + unsigned int adj = min(subs->stream_offset_adj, bytes);
5766 + cp += adj;
5767 + bytes -= adj;
5768 + subs->stream_offset_adj -= adj;
5769 + }
5770 frames = bytes / stride;
5771 if (!subs->txfr_quirk)
5772 bytes = frames * stride;
5773 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
5774 index ec56ce3820619..689fd3103e5b6 100644
5775 --- a/sound/usb/quirks-table.h
5776 +++ b/sound/usb/quirks-table.h
5777 @@ -3335,7 +3335,13 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
5778 * with.
5779 */
5780 {
5781 - USB_DEVICE(0x534d, 0x2109),
5782 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
5783 + USB_DEVICE_ID_MATCH_INT_CLASS |
5784 + USB_DEVICE_ID_MATCH_INT_SUBCLASS,
5785 + .idVendor = 0x534d,
5786 + .idProduct = 0x2109,
5787 + .bInterfaceClass = USB_CLASS_AUDIO,
5788 + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
5789 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
5790 .vendor_name = "MacroSilicon",
5791 .product_name = "MS2109",
5792 @@ -3374,5 +3380,61 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
5793 }
5794 }
5795 },
5796 +{
5797 + /*
5798 + * PIONEER DJ DDJ-RB
5799 + * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
5800 + * The feedback for the output is the dummy input.
5801 + */
5802 + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
5803 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
5804 + .ifnum = QUIRK_ANY_INTERFACE,
5805 + .type = QUIRK_COMPOSITE,
5806 + .data = (const struct snd_usb_audio_quirk[]) {
5807 + {
5808 + .ifnum = 0,
5809 + .type = QUIRK_AUDIO_FIXED_ENDPOINT,
5810 + .data = &(const struct audioformat) {
5811 + .formats = SNDRV_PCM_FMTBIT_S24_3LE,
5812 + .channels = 4,
5813 + .iface = 0,
5814 + .altsetting = 1,
5815 + .altset_idx = 1,
5816 + .endpoint = 0x01,
5817 + .ep_attr = USB_ENDPOINT_XFER_ISOC|
5818 + USB_ENDPOINT_SYNC_ASYNC,
5819 + .rates = SNDRV_PCM_RATE_44100,
5820 + .rate_min = 44100,
5821 + .rate_max = 44100,
5822 + .nr_rates = 1,
5823 + .rate_table = (unsigned int[]) { 44100 }
5824 + }
5825 + },
5826 + {
5827 + .ifnum = 0,
5828 + .type = QUIRK_AUDIO_FIXED_ENDPOINT,
5829 + .data = &(const struct audioformat) {
5830 + .formats = SNDRV_PCM_FMTBIT_S24_3LE,
5831 + .channels = 2,
5832 + .iface = 0,
5833 + .altsetting = 1,
5834 + .altset_idx = 1,
5835 + .endpoint = 0x82,
5836 + .ep_attr = USB_ENDPOINT_XFER_ISOC|
5837 + USB_ENDPOINT_SYNC_ASYNC|
5838 + USB_ENDPOINT_USAGE_IMPLICIT_FB,
5839 + .rates = SNDRV_PCM_RATE_44100,
5840 + .rate_min = 44100,
5841 + .rate_max = 44100,
5842 + .nr_rates = 1,
5843 + .rate_table = (unsigned int[]) { 44100 }
5844 + }
5845 + },
5846 + {
5847 + .ifnum = -1
5848 + }
5849 + }
5850 + }
5851 +},
5852
5853 #undef USB_DEVICE_VENDOR_SPEC
5854 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
5855 index 486d27129ac39..08e1af85af384 100644
5856 --- a/sound/usb/quirks.c
5857 +++ b/sound/usb/quirks.c
5858 @@ -1121,6 +1121,9 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
5859 case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */
5860 set_format_emu_quirk(subs, fmt);
5861 break;
5862 + case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */
5863 + subs->stream_offset_adj = 2;
5864 + break;
5865 }
5866 }
5867
5868 diff --git a/sound/usb/stream.c b/sound/usb/stream.c
5869 index 8e9548bc1f1a9..499f8def98de8 100644
5870 --- a/sound/usb/stream.c
5871 +++ b/sound/usb/stream.c
5872 @@ -95,6 +95,7 @@ static void snd_usb_init_substream(struct snd_usb_stream *as,
5873 subs->tx_length_quirk = as->chip->tx_length_quirk;
5874 subs->speed = snd_usb_get_speed(subs->dev);
5875 subs->pkt_offset_adj = 0;
5876 + subs->stream_offset_adj = 0;
5877
5878 snd_usb_set_pcm_ops(as->pcm, stream);
5879
5880 diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
5881 index 62f4cacf253ab..b9db8739487dc 100644
5882 --- a/tools/lib/traceevent/event-parse.c
5883 +++ b/tools/lib/traceevent/event-parse.c
5884 @@ -2764,6 +2764,7 @@ process_dynamic_array_len(struct event_format *event, struct print_arg *arg,
5885 if (read_expected(EVENT_DELIM, ")") < 0)
5886 goto out_err;
5887
5888 + free_token(token);
5889 type = read_token(&token);
5890 *tok = token;
5891
5892 diff --git a/tools/testing/selftests/powerpc/benchmarks/context_switch.c b/tools/testing/selftests/powerpc/benchmarks/context_switch.c
5893 index a36883ad48a45..4b4d2ce912566 100644
5894 --- a/tools/testing/selftests/powerpc/benchmarks/context_switch.c
5895 +++ b/tools/testing/selftests/powerpc/benchmarks/context_switch.c
5896 @@ -22,6 +22,7 @@
5897 #include <limits.h>
5898 #include <sys/time.h>
5899 #include <sys/syscall.h>
5900 +#include <sys/sysinfo.h>
5901 #include <sys/types.h>
5902 #include <sys/shm.h>
5903 #include <linux/futex.h>
5904 @@ -97,8 +98,9 @@ static void start_thread_on(void *(*fn)(void *), void *arg, unsigned long cpu)
5905
5906 static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu)
5907 {
5908 - int pid;
5909 - cpu_set_t cpuset;
5910 + int pid, ncpus;
5911 + cpu_set_t *cpuset;
5912 + size_t size;
5913
5914 pid = fork();
5915 if (pid == -1) {
5916 @@ -109,14 +111,23 @@ static void start_process_on(void *(*fn)(void *), void *arg, unsigned long cpu)
5917 if (pid)
5918 return;
5919
5920 - CPU_ZERO(&cpuset);
5921 - CPU_SET(cpu, &cpuset);
5922 + ncpus = get_nprocs();
5923 + size = CPU_ALLOC_SIZE(ncpus);
5924 + cpuset = CPU_ALLOC(ncpus);
5925 + if (!cpuset) {
5926 + perror("malloc");
5927 + exit(1);
5928 + }
5929 + CPU_ZERO_S(size, cpuset);
5930 + CPU_SET_S(cpu, size, cpuset);
5931
5932 - if (sched_setaffinity(0, sizeof(cpuset), &cpuset)) {
5933 + if (sched_setaffinity(0, size, cpuset)) {
5934 perror("sched_setaffinity");
5935 + CPU_FREE(cpuset);
5936 exit(1);
5937 }
5938
5939 + CPU_FREE(cpuset);
5940 fn(arg);
5941
5942 exit(0);
5943 diff --git a/tools/testing/selftests/powerpc/utils.c b/tools/testing/selftests/powerpc/utils.c
5944 index dcf74184bfd0a..bafb70d0ee264 100644
5945 --- a/tools/testing/selftests/powerpc/utils.c
5946 +++ b/tools/testing/selftests/powerpc/utils.c
5947 @@ -12,6 +12,7 @@
5948 #include <sched.h>
5949 #include <stdio.h>
5950 #include <sys/stat.h>
5951 +#include <sys/sysinfo.h>
5952 #include <sys/types.h>
5953 #include <unistd.h>
5954
5955 @@ -62,26 +63,38 @@ out:
5956
5957 int pick_online_cpu(void)
5958 {
5959 - cpu_set_t mask;
5960 - int cpu;
5961 + int ncpus, cpu = -1;
5962 + cpu_set_t *mask;
5963 + size_t size;
5964 +
5965 + ncpus = get_nprocs_conf();
5966 + size = CPU_ALLOC_SIZE(ncpus);
5967 + mask = CPU_ALLOC(ncpus);
5968 + if (!mask) {
5969 + perror("malloc");
5970 + return -1;
5971 + }
5972
5973 - CPU_ZERO(&mask);
5974 + CPU_ZERO_S(size, mask);
5975
5976 - if (sched_getaffinity(0, sizeof(mask), &mask)) {
5977 + if (sched_getaffinity(0, size, mask)) {
5978 perror("sched_getaffinity");
5979 - return -1;
5980 + goto done;
5981 }
5982
5983 /* We prefer a primary thread, but skip 0 */
5984 - for (cpu = 8; cpu < CPU_SETSIZE; cpu += 8)
5985 - if (CPU_ISSET(cpu, &mask))
5986 - return cpu;
5987 + for (cpu = 8; cpu < ncpus; cpu += 8)
5988 + if (CPU_ISSET_S(cpu, size, mask))
5989 + goto done;
5990
5991 /* Search for anything, but in reverse */
5992 - for (cpu = CPU_SETSIZE - 1; cpu >= 0; cpu--)
5993 - if (CPU_ISSET(cpu, &mask))
5994 - return cpu;
5995 + for (cpu = ncpus - 1; cpu >= 0; cpu--)
5996 + if (CPU_ISSET_S(cpu, size, mask))
5997 + goto done;
5998
5999 printf("No cpus in affinity mask?!\n");
6000 - return -1;
6001 +
6002 +done:
6003 + CPU_FREE(mask);
6004 + return cpu;
6005 }