Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0171-4.14.72-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 159643 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index dd4eaeeb2050..734722bda173 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 71
10 +SUBLEVEL = 72
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 diff --git a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
15 index 4dc0b347b1ee..c2dc9d09484a 100644
16 --- a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
17 +++ b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
18 @@ -189,6 +189,8 @@
19 regulator-max-microvolt = <2950000>;
20
21 regulator-boot-on;
22 + regulator-system-load = <200000>;
23 + regulator-allow-set-load;
24 };
25
26 l21 {
27 diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c
28 index b529ba04ed16..eafa26d9f692 100644
29 --- a/arch/arm/mach-exynos/suspend.c
30 +++ b/arch/arm/mach-exynos/suspend.c
31 @@ -209,6 +209,7 @@ static int __init exynos_pmu_irq_init(struct device_node *node,
32 NULL);
33 if (!domain) {
34 iounmap(pmu_base_addr);
35 + pmu_base_addr = NULL;
36 return -ENOMEM;
37 }
38
39 diff --git a/arch/arm/mach-hisi/hotplug.c b/arch/arm/mach-hisi/hotplug.c
40 index a129aae72602..909bb2493781 100644
41 --- a/arch/arm/mach-hisi/hotplug.c
42 +++ b/arch/arm/mach-hisi/hotplug.c
43 @@ -148,13 +148,20 @@ static int hi3xxx_hotplug_init(void)
44 struct device_node *node;
45
46 node = of_find_compatible_node(NULL, NULL, "hisilicon,sysctrl");
47 - if (node) {
48 - ctrl_base = of_iomap(node, 0);
49 - id = HI3620_CTRL;
50 - return 0;
51 + if (!node) {
52 + id = ERROR_CTRL;
53 + return -ENOENT;
54 }
55 - id = ERROR_CTRL;
56 - return -ENOENT;
57 +
58 + ctrl_base = of_iomap(node, 0);
59 + of_node_put(node);
60 + if (!ctrl_base) {
61 + id = ERROR_CTRL;
62 + return -ENOMEM;
63 + }
64 +
65 + id = HI3620_CTRL;
66 + return 0;
67 }
68
69 void hi3xxx_set_cpu(int cpu, bool enable)
70 @@ -173,11 +180,15 @@ static bool hix5hd2_hotplug_init(void)
71 struct device_node *np;
72
73 np = of_find_compatible_node(NULL, NULL, "hisilicon,cpuctrl");
74 - if (np) {
75 - ctrl_base = of_iomap(np, 0);
76 - return true;
77 - }
78 - return false;
79 + if (!np)
80 + return false;
81 +
82 + ctrl_base = of_iomap(np, 0);
83 + of_node_put(np);
84 + if (!ctrl_base)
85 + return false;
86 +
87 + return true;
88 }
89
90 void hix5hd2_set_cpu(int cpu, bool enable)
91 @@ -219,10 +230,10 @@ void hip01_set_cpu(int cpu, bool enable)
92
93 if (!ctrl_base) {
94 np = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
95 - if (np)
96 - ctrl_base = of_iomap(np, 0);
97 - else
98 - BUG();
99 + BUG_ON(!np);
100 + ctrl_base = of_iomap(np, 0);
101 + of_node_put(np);
102 + BUG_ON(!ctrl_base);
103 }
104
105 if (enable) {
106 diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
107 index 1d63e6b879de..b6b44fdf7fac 100644
108 --- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
109 +++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
110 @@ -187,7 +187,7 @@
111 led@6 {
112 label = "apq8016-sbc:blue:bt";
113 gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
114 - linux,default-trigger = "bt";
115 + linux,default-trigger = "bluetooth-power";
116 default-state = "off";
117 };
118 };
119 diff --git a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
120 index a29c279b6e8e..dba6f0ff8106 100644
121 --- a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
122 +++ b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
123 @@ -55,6 +55,7 @@
124 clocks = <&sys_clk 32>;
125 enable-method = "psci";
126 operating-points-v2 = <&cluster0_opp>;
127 + #cooling-cells = <2>;
128 };
129
130 cpu2: cpu@100 {
131 @@ -73,6 +74,7 @@
132 clocks = <&sys_clk 33>;
133 enable-method = "psci";
134 operating-points-v2 = <&cluster1_opp>;
135 + #cooling-cells = <2>;
136 };
137 };
138
139 diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
140 index edaf346d13d5..34d915b6974b 100644
141 --- a/arch/arm64/kernel/ptrace.c
142 +++ b/arch/arm64/kernel/ptrace.c
143 @@ -274,19 +274,22 @@ static int ptrace_hbp_set_event(unsigned int note_type,
144
145 switch (note_type) {
146 case NT_ARM_HW_BREAK:
147 - if (idx < ARM_MAX_BRP) {
148 - tsk->thread.debug.hbp_break[idx] = bp;
149 - err = 0;
150 - }
151 + if (idx >= ARM_MAX_BRP)
152 + goto out;
153 + idx = array_index_nospec(idx, ARM_MAX_BRP);
154 + tsk->thread.debug.hbp_break[idx] = bp;
155 + err = 0;
156 break;
157 case NT_ARM_HW_WATCH:
158 - if (idx < ARM_MAX_WRP) {
159 - tsk->thread.debug.hbp_watch[idx] = bp;
160 - err = 0;
161 - }
162 + if (idx >= ARM_MAX_WRP)
163 + goto out;
164 + idx = array_index_nospec(idx, ARM_MAX_WRP);
165 + tsk->thread.debug.hbp_watch[idx] = bp;
166 + err = 0;
167 break;
168 }
169
170 +out:
171 return err;
172 }
173
174 diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
175 index f206dafbb0a3..26a058d58d37 100644
176 --- a/arch/mips/ath79/setup.c
177 +++ b/arch/mips/ath79/setup.c
178 @@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYPE_LEN];
179
180 static void ath79_restart(char *command)
181 {
182 + local_irq_disable();
183 ath79_device_reset_set(AR71XX_RESET_FULL_CHIP);
184 for (;;)
185 if (cpu_wait)
186 diff --git a/arch/mips/include/asm/mach-ath79/ath79.h b/arch/mips/include/asm/mach-ath79/ath79.h
187 index 441faa92c3cd..6e6c0fead776 100644
188 --- a/arch/mips/include/asm/mach-ath79/ath79.h
189 +++ b/arch/mips/include/asm/mach-ath79/ath79.h
190 @@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned reg)
191 static inline void ath79_reset_wr(unsigned reg, u32 val)
192 {
193 __raw_writel(val, ath79_reset_base + reg);
194 + (void) __raw_readl(ath79_reset_base + reg); /* flush */
195 }
196
197 static inline u32 ath79_reset_rr(unsigned reg)
198 diff --git a/arch/mips/jz4740/Platform b/arch/mips/jz4740/Platform
199 index 28448d358c10..a2a5a85ea1f9 100644
200 --- a/arch/mips/jz4740/Platform
201 +++ b/arch/mips/jz4740/Platform
202 @@ -1,4 +1,4 @@
203 platform-$(CONFIG_MACH_INGENIC) += jz4740/
204 cflags-$(CONFIG_MACH_INGENIC) += -I$(srctree)/arch/mips/include/asm/mach-jz4740
205 load-$(CONFIG_MACH_INGENIC) += 0xffffffff80010000
206 -zload-$(CONFIG_MACH_INGENIC) += 0xffffffff80600000
207 +zload-$(CONFIG_MACH_INGENIC) += 0xffffffff81000000
208 diff --git a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
209 index f7c905e50dc4..92dc6bafc127 100644
210 --- a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
211 +++ b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
212 @@ -138,7 +138,7 @@ u32 pci_ohci_read_reg(int reg)
213 break;
214 case PCI_OHCI_INT_REG:
215 _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
216 - if ((lo & 0x00000f00) == CS5536_USB_INTR)
217 + if (((lo >> PIC_YSEL_LOW_USB_SHIFT) & 0xf) == CS5536_USB_INTR)
218 conf_data = 1;
219 break;
220 default:
221 diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
222 index 377d1420bd02..58746328b9bd 100644
223 --- a/arch/powerpc/kvm/book3s_hv.c
224 +++ b/arch/powerpc/kvm/book3s_hv.c
225 @@ -4356,6 +4356,8 @@ static int kvmppc_book3s_init_hv(void)
226 pr_err("KVM-HV: Cannot determine method for accessing XICS\n");
227 return -ENODEV;
228 }
229 + /* presence of intc confirmed - node can be dropped again */
230 + of_node_put(np);
231 }
232 #endif
233
234 diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
235 index 65c79ecf5a4d..c8a743af6bf5 100644
236 --- a/arch/powerpc/platforms/powernv/opal.c
237 +++ b/arch/powerpc/platforms/powernv/opal.c
238 @@ -388,7 +388,7 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
239 /* Closed or other error drop */
240 if (rc != OPAL_SUCCESS && rc != OPAL_BUSY &&
241 rc != OPAL_BUSY_EVENT) {
242 - written = total_len;
243 + written += total_len;
244 break;
245 }
246 if (rc == OPAL_SUCCESS) {
247 diff --git a/arch/s390/crypto/paes_s390.c b/arch/s390/crypto/paes_s390.c
248 index a4e903ed7e21..b429aceff050 100644
249 --- a/arch/s390/crypto/paes_s390.c
250 +++ b/arch/s390/crypto/paes_s390.c
251 @@ -212,7 +212,7 @@ static int cbc_paes_crypt(struct blkcipher_desc *desc, unsigned long modifier,
252 walk->dst.virt.addr, walk->src.virt.addr, n);
253 if (k)
254 ret = blkcipher_walk_done(desc, walk, nbytes - k);
255 - if (n < k) {
256 + if (k < n) {
257 if (__cbc_paes_set_key(ctx) != 0)
258 return blkcipher_walk_done(desc, walk, -EIO);
259 memcpy(param.key, ctx->pk.protkey, MAXPROTKEYSIZE);
260 diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
261 index f260e452e4f8..e8c8c5d78dbd 100644
262 --- a/arch/x86/kernel/eisa.c
263 +++ b/arch/x86/kernel/eisa.c
264 @@ -7,11 +7,17 @@
265 #include <linux/eisa.h>
266 #include <linux/io.h>
267
268 +#include <xen/xen.h>
269 +
270 static __init int eisa_bus_probe(void)
271 {
272 - void __iomem *p = ioremap(0x0FFFD9, 4);
273 + void __iomem *p;
274 +
275 + if (xen_pv_domain() && !xen_initial_domain())
276 + return 0;
277
278 - if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
279 + p = ioremap(0x0FFFD9, 4);
280 + if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
281 EISA_bus = 1;
282 iounmap(p);
283 return 0;
284 diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
285 index d6f11accd37a..b07e3ffc5ac5 100644
286 --- a/arch/x86/mm/pti.c
287 +++ b/arch/x86/mm/pti.c
288 @@ -162,7 +162,7 @@ static __init p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)
289
290 if (pgd_none(*pgd)) {
291 unsigned long new_p4d_page = __get_free_page(gfp);
292 - if (!new_p4d_page)
293 + if (WARN_ON_ONCE(!new_p4d_page))
294 return NULL;
295
296 set_pgd(pgd, __pgd(_KERNPG_TABLE | __pa(new_p4d_page)));
297 @@ -181,13 +181,17 @@ static __init p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)
298 static __init pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
299 {
300 gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
301 - p4d_t *p4d = pti_user_pagetable_walk_p4d(address);
302 + p4d_t *p4d;
303 pud_t *pud;
304
305 + p4d = pti_user_pagetable_walk_p4d(address);
306 + if (!p4d)
307 + return NULL;
308 +
309 BUILD_BUG_ON(p4d_large(*p4d) != 0);
310 if (p4d_none(*p4d)) {
311 unsigned long new_pud_page = __get_free_page(gfp);
312 - if (!new_pud_page)
313 + if (WARN_ON_ONCE(!new_pud_page))
314 return NULL;
315
316 set_p4d(p4d, __p4d(_KERNPG_TABLE | __pa(new_pud_page)));
317 @@ -201,7 +205,7 @@ static __init pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
318 }
319 if (pud_none(*pud)) {
320 unsigned long new_pmd_page = __get_free_page(gfp);
321 - if (!new_pmd_page)
322 + if (WARN_ON_ONCE(!new_pmd_page))
323 return NULL;
324
325 set_pud(pud, __pud(_KERNPG_TABLE | __pa(new_pmd_page)));
326 @@ -223,9 +227,13 @@ static __init pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
327 static __init pte_t *pti_user_pagetable_walk_pte(unsigned long address)
328 {
329 gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
330 - pmd_t *pmd = pti_user_pagetable_walk_pmd(address);
331 + pmd_t *pmd;
332 pte_t *pte;
333
334 + pmd = pti_user_pagetable_walk_pmd(address);
335 + if (!pmd)
336 + return NULL;
337 +
338 /* We can't do anything sensible if we hit a large mapping. */
339 if (pmd_large(*pmd)) {
340 WARN_ON(1);
341 @@ -283,6 +291,10 @@ pti_clone_pmds(unsigned long start, unsigned long end, pmdval_t clear)
342 p4d_t *p4d;
343 pud_t *pud;
344
345 + /* Overflow check */
346 + if (addr < start)
347 + break;
348 +
349 pgd = pgd_offset_k(addr);
350 if (WARN_ON(pgd_none(*pgd)))
351 return;
352 @@ -319,6 +331,9 @@ static void __init pti_clone_p4d(unsigned long addr)
353 pgd_t *kernel_pgd;
354
355 user_p4d = pti_user_pagetable_walk_p4d(addr);
356 + if (!user_p4d)
357 + return;
358 +
359 kernel_pgd = pgd_offset_k(addr);
360 kernel_p4d = p4d_offset(kernel_pgd, addr);
361 *user_p4d = *kernel_p4d;
362 diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c
363 index f4bbb28026f8..58709e89a8ed 100644
364 --- a/arch/xtensa/platforms/iss/setup.c
365 +++ b/arch/xtensa/platforms/iss/setup.c
366 @@ -78,23 +78,28 @@ static struct notifier_block iss_panic_block = {
367
368 void __init platform_setup(char **p_cmdline)
369 {
370 + static void *argv[COMMAND_LINE_SIZE / sizeof(void *)] __initdata;
371 + static char cmdline[COMMAND_LINE_SIZE] __initdata;
372 int argc = simc_argc();
373 int argv_size = simc_argv_size();
374
375 if (argc > 1) {
376 - void **argv = alloc_bootmem(argv_size);
377 - char *cmdline = alloc_bootmem(argv_size);
378 - int i;
379 + if (argv_size > sizeof(argv)) {
380 + pr_err("%s: command line too long: argv_size = %d\n",
381 + __func__, argv_size);
382 + } else {
383 + int i;
384
385 - cmdline[0] = 0;
386 - simc_argv((void *)argv);
387 + cmdline[0] = 0;
388 + simc_argv((void *)argv);
389
390 - for (i = 1; i < argc; ++i) {
391 - if (i > 1)
392 - strcat(cmdline, " ");
393 - strcat(cmdline, argv[i]);
394 + for (i = 1; i < argc; ++i) {
395 + if (i > 1)
396 + strcat(cmdline, " ");
397 + strcat(cmdline, argv[i]);
398 + }
399 + *p_cmdline = cmdline;
400 }
401 - *p_cmdline = cmdline;
402 }
403
404 atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);
405 diff --git a/block/blk-core.c b/block/blk-core.c
406 index 1d27e2a152e0..6aa2bc4e9652 100644
407 --- a/block/blk-core.c
408 +++ b/block/blk-core.c
409 @@ -669,9 +669,13 @@ void blk_cleanup_queue(struct request_queue *q)
410 * make sure all in-progress dispatch are completed because
411 * blk_freeze_queue() can only complete all requests, and
412 * dispatch may still be in-progress since we dispatch requests
413 - * from more than one contexts
414 + * from more than one contexts.
415 + *
416 + * No need to quiesce queue if it isn't initialized yet since
417 + * blk_freeze_queue() should be enough for cases of passthrough
418 + * request.
419 */
420 - if (q->mq_ops)
421 + if (q->mq_ops && blk_queue_init_done(q))
422 blk_mq_quiesce_queue(q);
423
424 /* for synchronous bio-based driver finish in-flight integrity i/o */
425 diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
426 index eca011fdfa0e..ae5d8f10a27c 100644
427 --- a/block/blk-mq-sched.c
428 +++ b/block/blk-mq-sched.c
429 @@ -236,7 +236,8 @@ bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio)
430 return e->type->ops.mq.bio_merge(hctx, bio);
431 }
432
433 - if (hctx->flags & BLK_MQ_F_SHOULD_MERGE) {
434 + if ((hctx->flags & BLK_MQ_F_SHOULD_MERGE) &&
435 + !list_empty_careful(&ctx->rq_list)) {
436 /* default per sw-queue merge */
437 spin_lock(&ctx->lock);
438 ret = blk_mq_attempt_merge(q, ctx, bio);
439 diff --git a/block/blk-settings.c b/block/blk-settings.c
440 index 8559e9563c52..474b0b95fcd1 100644
441 --- a/block/blk-settings.c
442 +++ b/block/blk-settings.c
443 @@ -128,7 +128,7 @@ void blk_set_stacking_limits(struct queue_limits *lim)
444
445 /* Inherit limits from component devices */
446 lim->max_segments = USHRT_MAX;
447 - lim->max_discard_segments = 1;
448 + lim->max_discard_segments = USHRT_MAX;
449 lim->max_hw_sectors = UINT_MAX;
450 lim->max_segment_size = UINT_MAX;
451 lim->max_sectors = UINT_MAX;
452 diff --git a/crypto/api.c b/crypto/api.c
453 index 941cd4c6c7ec..e485aed11ad0 100644
454 --- a/crypto/api.c
455 +++ b/crypto/api.c
456 @@ -215,7 +215,7 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
457 mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD);
458
459 alg = crypto_alg_lookup(name, type, mask);
460 - if (!alg) {
461 + if (!alg && !(mask & CRYPTO_NOLOAD)) {
462 request_module("crypto-%s", name);
463
464 if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask &
465 diff --git a/drivers/base/core.c b/drivers/base/core.c
466 index b054cb2fd2b9..eb066cc827ef 100644
467 --- a/drivers/base/core.c
468 +++ b/drivers/base/core.c
469 @@ -2783,6 +2783,9 @@ void device_shutdown(void)
470 {
471 struct device *dev, *parent;
472
473 + wait_for_device_probe();
474 + device_block_probing();
475 +
476 spin_lock(&devices_kset->list_lock);
477 /*
478 * Walk the devices list backward, shutting down each in turn.
479 diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
480 index 6f2eaba1cd6a..932678617dfa 100644
481 --- a/drivers/char/ipmi/ipmi_ssif.c
482 +++ b/drivers/char/ipmi/ipmi_ssif.c
483 @@ -184,6 +184,8 @@ struct ssif_addr_info {
484 struct device *dev;
485 struct i2c_client *client;
486
487 + struct i2c_client *added_client;
488 +
489 struct mutex clients_mutex;
490 struct list_head clients;
491
492 @@ -1710,15 +1712,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
493
494 out:
495 if (rv) {
496 - /*
497 - * Note that if addr_info->client is assigned, we
498 - * leave it. The i2c client hangs around even if we
499 - * return a failure here, and the failure here is not
500 - * propagated back to the i2c code. This seems to be
501 - * design intent, strange as it may be. But if we
502 - * don't leave it, ssif_platform_remove will not remove
503 - * the client like it should.
504 - */
505 + addr_info->client = NULL;
506 dev_err(&client->dev, "Unable to start IPMI SSIF: %d\n", rv);
507 kfree(ssif_info);
508 }
509 @@ -1737,7 +1731,8 @@ static int ssif_adapter_handler(struct device *adev, void *opaque)
510 if (adev->type != &i2c_adapter_type)
511 return 0;
512
513 - i2c_new_device(to_i2c_adapter(adev), &addr_info->binfo);
514 + addr_info->added_client = i2c_new_device(to_i2c_adapter(adev),
515 + &addr_info->binfo);
516
517 if (!addr_info->adapter_name)
518 return 1; /* Only try the first I2C adapter by default. */
519 @@ -2018,8 +2013,8 @@ static int ssif_platform_remove(struct platform_device *dev)
520 return 0;
521
522 mutex_lock(&ssif_infos_mutex);
523 - if (addr_info->client)
524 - i2c_unregister_device(addr_info->client);
525 + if (addr_info->added_client)
526 + i2c_unregister_device(addr_info->added_client);
527
528 list_del(&addr_info->link);
529 kfree(addr_info);
530 diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c
531 index a5d402de5584..20724abd38bd 100644
532 --- a/drivers/clk/clk-fixed-factor.c
533 +++ b/drivers/clk/clk-fixed-factor.c
534 @@ -177,8 +177,15 @@ static struct clk *_of_fixed_factor_clk_setup(struct device_node *node)
535
536 clk = clk_register_fixed_factor(NULL, clk_name, parent_name, flags,
537 mult, div);
538 - if (IS_ERR(clk))
539 + if (IS_ERR(clk)) {
540 + /*
541 + * If parent clock is not registered, registration would fail.
542 + * Clear OF_POPULATED flag so that clock registration can be
543 + * attempted again from probe function.
544 + */
545 + of_node_clear_flag(node, OF_POPULATED);
546 return clk;
547 + }
548
549 ret = of_clk_add_provider(node, of_clk_src_simple_get, clk);
550 if (ret) {
551 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
552 index 6f4c98ca6e50..a3f52f678211 100644
553 --- a/drivers/clk/clk.c
554 +++ b/drivers/clk/clk.c
555 @@ -2557,6 +2557,7 @@ struct clk *__clk_create_clk(struct clk_hw *hw, const char *dev_id,
556 return clk;
557 }
558
559 +/* keep in sync with __clk_put */
560 void __clk_free_clk(struct clk *clk)
561 {
562 clk_prepare_lock();
563 @@ -2922,6 +2923,7 @@ int __clk_get(struct clk *clk)
564 return 1;
565 }
566
567 +/* keep in sync with __clk_free_clk */
568 void __clk_put(struct clk *clk)
569 {
570 struct module *owner;
571 @@ -2943,6 +2945,7 @@ void __clk_put(struct clk *clk)
572
573 module_put(owner);
574
575 + kfree_const(clk->con_id);
576 kfree(clk);
577 }
578
579 diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c
580 index 41c08fc892b9..5cc5ff1b4e1f 100644
581 --- a/drivers/clk/imx/clk-imx6ul.c
582 +++ b/drivers/clk/imx/clk-imx6ul.c
583 @@ -135,6 +135,7 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node)
584
585 np = of_find_compatible_node(NULL, NULL, "fsl,imx6ul-anatop");
586 base = of_iomap(np, 0);
587 + of_node_put(np);
588 WARN_ON(!base);
589
590 clks[IMX6UL_PLL1_BYPASS_SRC] = imx_clk_mux("pll1_bypass_src", base + 0x00, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
591 diff --git a/drivers/clk/tegra/clk-bpmp.c b/drivers/clk/tegra/clk-bpmp.c
592 index 638ace64033b..6c933b0e29a3 100644
593 --- a/drivers/clk/tegra/clk-bpmp.c
594 +++ b/drivers/clk/tegra/clk-bpmp.c
595 @@ -581,9 +581,15 @@ static struct clk_hw *tegra_bpmp_clk_of_xlate(struct of_phandle_args *clkspec,
596 unsigned int id = clkspec->args[0], i;
597 struct tegra_bpmp *bpmp = data;
598
599 - for (i = 0; i < bpmp->num_clocks; i++)
600 - if (bpmp->clocks[i]->id == id)
601 - return &bpmp->clocks[i]->hw;
602 + for (i = 0; i < bpmp->num_clocks; i++) {
603 + struct tegra_bpmp_clk *clk = bpmp->clocks[i];
604 +
605 + if (!clk)
606 + continue;
607 +
608 + if (clk->id == id)
609 + return &clk->hw;
610 + }
611
612 return NULL;
613 }
614 diff --git a/drivers/crypto/sahara.c b/drivers/crypto/sahara.c
615 index 08e7bdcaa6e3..085c229eab1d 100644
616 --- a/drivers/crypto/sahara.c
617 +++ b/drivers/crypto/sahara.c
618 @@ -1351,7 +1351,7 @@ err_sha_v4_algs:
619
620 err_sha_v3_algs:
621 for (j = 0; j < k; j++)
622 - crypto_unregister_ahash(&sha_v4_algs[j]);
623 + crypto_unregister_ahash(&sha_v3_algs[j]);
624
625 err_aes_algs:
626 for (j = 0; j < i; j++)
627 @@ -1367,7 +1367,7 @@ static void sahara_unregister_algs(struct sahara_dev *dev)
628 for (i = 0; i < ARRAY_SIZE(aes_algs); i++)
629 crypto_unregister_alg(&aes_algs[i]);
630
631 - for (i = 0; i < ARRAY_SIZE(sha_v4_algs); i++)
632 + for (i = 0; i < ARRAY_SIZE(sha_v3_algs); i++)
633 crypto_unregister_ahash(&sha_v3_algs[i]);
634
635 if (dev->version > SAHARA_VERSION_3)
636 diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c
637 index 3548caa9e933..75eef589d0ec 100644
638 --- a/drivers/dma/mv_xor_v2.c
639 +++ b/drivers/dma/mv_xor_v2.c
640 @@ -898,6 +898,8 @@ static int mv_xor_v2_remove(struct platform_device *pdev)
641
642 platform_msi_domain_free_irqs(&pdev->dev);
643
644 + tasklet_kill(&xor_dev->irq_tasklet);
645 +
646 clk_disable_unprepare(xor_dev->clk);
647
648 return 0;
649 diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
650 index d19862f4dc9a..6afd42cfbf5d 100644
651 --- a/drivers/dma/pl330.c
652 +++ b/drivers/dma/pl330.c
653 @@ -2142,13 +2142,14 @@ static int pl330_terminate_all(struct dma_chan *chan)
654
655 pm_runtime_get_sync(pl330->ddma.dev);
656 spin_lock_irqsave(&pch->lock, flags);
657 +
658 spin_lock(&pl330->lock);
659 _stop(pch->thread);
660 - spin_unlock(&pl330->lock);
661 -
662 pch->thread->req[0].desc = NULL;
663 pch->thread->req[1].desc = NULL;
664 pch->thread->req_running = -1;
665 + spin_unlock(&pl330->lock);
666 +
667 power_down = pch->active;
668 pch->active = false;
669
670 diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
671 index 80d1a885def5..a7c522eac640 100644
672 --- a/drivers/firmware/efi/arm-init.c
673 +++ b/drivers/firmware/efi/arm-init.c
674 @@ -259,7 +259,6 @@ void __init efi_init(void)
675
676 reserve_regions();
677 efi_esrt_init();
678 - efi_memmap_unmap();
679
680 memblock_reserve(params.mmap & PAGE_MASK,
681 PAGE_ALIGN(params.mmap_size +
682 diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
683 index 86a1ad17a32e..8995a48bd067 100644
684 --- a/drivers/firmware/efi/arm-runtime.c
685 +++ b/drivers/firmware/efi/arm-runtime.c
686 @@ -122,11 +122,13 @@ static int __init arm_enable_runtime_services(void)
687 {
688 u64 mapsize;
689
690 - if (!efi_enabled(EFI_BOOT)) {
691 + if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
692 pr_info("EFI services will not be available.\n");
693 return 0;
694 }
695
696 + efi_memmap_unmap();
697 +
698 if (efi_runtime_disabled()) {
699 pr_info("EFI runtime services will be disabled.\n");
700 return 0;
701 diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
702 index c47e0c6ec00f..f3c28777b8c6 100644
703 --- a/drivers/firmware/efi/esrt.c
704 +++ b/drivers/firmware/efi/esrt.c
705 @@ -333,7 +333,8 @@ void __init efi_esrt_init(void)
706
707 end = esrt_data + size;
708 pr_info("Reserving ESRT space from %pa to %pa.\n", &esrt_data, &end);
709 - efi_mem_reserve(esrt_data, esrt_data_size);
710 + if (md.type == EFI_BOOT_SERVICES_DATA)
711 + efi_mem_reserve(esrt_data, esrt_data_size);
712
713 pr_debug("esrt-init: loaded.\n");
714 err_memunmap:
715 diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
716 index 6029899789f3..2943dfc4c470 100644
717 --- a/drivers/gpio/gpio-pxa.c
718 +++ b/drivers/gpio/gpio-pxa.c
719 @@ -662,6 +662,8 @@ static int pxa_gpio_probe(struct platform_device *pdev)
720 pchip->irq0 = irq0;
721 pchip->irq1 = irq1;
722 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
723 + if (!res)
724 + return -EINVAL;
725 gpio_reg_base = devm_ioremap(&pdev->dev, res->start,
726 resource_size(res));
727 if (!gpio_reg_base)
728 diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
729 index 3d4d0634c9dd..7a3d9658d74c 100644
730 --- a/drivers/gpio/gpiolib.h
731 +++ b/drivers/gpio/gpiolib.h
732 @@ -88,7 +88,7 @@ struct acpi_gpio_info {
733 };
734
735 /* gpio suffixes used for ACPI and device tree lookup */
736 -static const char * const gpio_suffixes[] = { "gpios", "gpio" };
737 +static __maybe_unused const char * const gpio_suffixes[] = { "gpios", "gpio" };
738
739 #ifdef CONFIG_OF_GPIO
740 struct gpio_desc *of_find_gpio(struct device *dev,
741 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
742 index c74cf22a1ed9..3ae88dcff08d 100644
743 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
744 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
745 @@ -123,6 +123,8 @@ struct kfd_process *kfd_get_process(const struct task_struct *thread)
746 return ERR_PTR(-EINVAL);
747
748 process = find_process(thread);
749 + if (!process)
750 + return ERR_PTR(-EINVAL);
751
752 return process;
753 }
754 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
755 index 90359c7954c8..3c0ce3ee0710 100644
756 --- a/drivers/gpu/drm/i915/i915_gem.c
757 +++ b/drivers/gpu/drm/i915/i915_gem.c
758 @@ -687,10 +687,10 @@ flush_write_domain(struct drm_i915_gem_object *obj, unsigned int flush_domains)
759
760 switch (obj->base.write_domain) {
761 case I915_GEM_DOMAIN_GTT:
762 - if (INTEL_GEN(dev_priv) >= 6 && !HAS_LLC(dev_priv)) {
763 + if (!HAS_LLC(dev_priv)) {
764 intel_runtime_pm_get(dev_priv);
765 spin_lock_irq(&dev_priv->uncore.lock);
766 - POSTING_READ_FW(RING_ACTHD(dev_priv->engine[RCS]->mmio_base));
767 + POSTING_READ_FW(RING_HEAD(dev_priv->engine[RCS]->mmio_base));
768 spin_unlock_irq(&dev_priv->uncore.lock);
769 intel_runtime_pm_put(dev_priv);
770 }
771 diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
772 index 963a4dba8213..9109b69cd052 100644
773 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
774 +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
775 @@ -160,7 +160,11 @@ nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf,
776 args.ustate = value;
777 }
778
779 + ret = pm_runtime_get_sync(drm->dev);
780 + if (IS_ERR_VALUE(ret) && ret != -EACCES)
781 + return ret;
782 ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_USER, &args, sizeof(args));
783 + pm_runtime_put_autosuspend(drm->dev);
784 if (ret < 0)
785 return ret;
786
787 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
788 index 362a34cb435d..d6f13d7254de 100644
789 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
790 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
791 @@ -848,8 +848,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
792 get_task_comm(tmpname, current);
793 snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
794
795 - if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL)))
796 - return ret;
797 + if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
798 + ret = -ENOMEM;
799 + goto done;
800 + }
801
802 ret = nouveau_cli_init(drm, name, cli);
803 if (ret)
804 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
805 index 189ed80e21ff..fa1ead337c23 100644
806 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
807 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
808 @@ -23,6 +23,10 @@
809 #ifdef CONFIG_NOUVEAU_PLATFORM_DRIVER
810 #include "priv.h"
811
812 +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
813 +#include <asm/dma-iommu.h>
814 +#endif
815 +
816 static int
817 nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
818 {
819 @@ -105,6 +109,15 @@ nvkm_device_tegra_probe_iommu(struct nvkm_device_tegra *tdev)
820 unsigned long pgsize_bitmap;
821 int ret;
822
823 +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
824 + if (dev->archdata.mapping) {
825 + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
826 +
827 + arm_iommu_detach_device(dev);
828 + arm_iommu_release_mapping(mapping);
829 + }
830 +#endif
831 +
832 if (!tdev->func->iommu_bit)
833 return;
834
835 diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
836 index a188a3959f1a..6ad827b93ae1 100644
837 --- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
838 +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
839 @@ -823,7 +823,7 @@ static void s6e8aa0_read_mtp_id(struct s6e8aa0 *ctx)
840 int ret, i;
841
842 ret = s6e8aa0_dcs_read(ctx, 0xd1, id, ARRAY_SIZE(id));
843 - if (ret < ARRAY_SIZE(id) || id[0] == 0x00) {
844 + if (ret < 0 || ret < ARRAY_SIZE(id) || id[0] == 0x00) {
845 dev_err(ctx->dev, "read id failed\n");
846 ctx->error = -EIO;
847 return;
848 diff --git a/drivers/gpu/ipu-v3/ipu-csi.c b/drivers/gpu/ipu-v3/ipu-csi.c
849 index 24e12b87a0cb..2bc51d4d3f1e 100644
850 --- a/drivers/gpu/ipu-v3/ipu-csi.c
851 +++ b/drivers/gpu/ipu-v3/ipu-csi.c
852 @@ -316,13 +316,17 @@ static int mbus_code_to_bus_cfg(struct ipu_csi_bus_config *cfg, u32 mbus_code)
853 /*
854 * Fill a CSI bus config struct from mbus_config and mbus_framefmt.
855 */
856 -static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
857 +static int fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
858 struct v4l2_mbus_config *mbus_cfg,
859 struct v4l2_mbus_framefmt *mbus_fmt)
860 {
861 + int ret;
862 +
863 memset(csicfg, 0, sizeof(*csicfg));
864
865 - mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
866 + ret = mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
867 + if (ret < 0)
868 + return ret;
869
870 switch (mbus_cfg->type) {
871 case V4L2_MBUS_PARALLEL:
872 @@ -353,6 +357,8 @@ static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
873 /* will never get here, keep compiler quiet */
874 break;
875 }
876 +
877 + return 0;
878 }
879
880 int ipu_csi_init_interface(struct ipu_csi *csi,
881 @@ -362,8 +368,11 @@ int ipu_csi_init_interface(struct ipu_csi *csi,
882 struct ipu_csi_bus_config cfg;
883 unsigned long flags;
884 u32 width, height, data = 0;
885 + int ret;
886
887 - fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
888 + ret = fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
889 + if (ret < 0)
890 + return ret;
891
892 /* set default sensor frame width and height */
893 width = mbus_fmt->width;
894 @@ -584,11 +593,14 @@ int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc,
895 struct ipu_csi_bus_config cfg;
896 unsigned long flags;
897 u32 temp;
898 + int ret;
899
900 if (vc > 3)
901 return -EINVAL;
902
903 - mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
904 + ret = mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
905 + if (ret < 0)
906 + return ret;
907
908 spin_lock_irqsave(&csi->lock, flags);
909
910 diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
911 index cf364a514c12..5a1a14bcae72 100644
912 --- a/drivers/hwtracing/coresight/coresight-etm4x.c
913 +++ b/drivers/hwtracing/coresight/coresight-etm4x.c
914 @@ -1034,7 +1034,8 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
915 }
916
917 pm_runtime_put(&adev->dev);
918 - dev_info(dev, "%s initialized\n", (char *)id->data);
919 + dev_info(dev, "CPU%d: ETM v%d.%d initialized\n",
920 + drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
921
922 if (boot_enable) {
923 coresight_enable(drvdata->csdev);
924 @@ -1052,23 +1053,19 @@ err_arch_supported:
925 return ret;
926 }
927
928 +#define ETM4x_AMBA_ID(pid) \
929 + { \
930 + .id = pid, \
931 + .mask = 0x000fffff, \
932 + }
933 +
934 static const struct amba_id etm4_ids[] = {
935 - { /* ETM 4.0 - Cortex-A53 */
936 - .id = 0x000bb95d,
937 - .mask = 0x000fffff,
938 - .data = "ETM 4.0",
939 - },
940 - { /* ETM 4.0 - Cortex-A57 */
941 - .id = 0x000bb95e,
942 - .mask = 0x000fffff,
943 - .data = "ETM 4.0",
944 - },
945 - { /* ETM 4.0 - A72, Maia, HiSilicon */
946 - .id = 0x000bb95a,
947 - .mask = 0x000fffff,
948 - .data = "ETM 4.0",
949 - },
950 - { 0, 0},
951 + ETM4x_AMBA_ID(0x000bb95d), /* Cortex-A53 */
952 + ETM4x_AMBA_ID(0x000bb95e), /* Cortex-A57 */
953 + ETM4x_AMBA_ID(0x000bb95a), /* Cortex-A72 */
954 + ETM4x_AMBA_ID(0x000bb959), /* Cortex-A73 */
955 + ETM4x_AMBA_ID(0x000bb9da), /* Cortex-A35 */
956 + {},
957 };
958
959 static struct amba_driver etm4x_driver = {
960 diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
961 index 735dca089389..15dd01f8c197 100644
962 --- a/drivers/hwtracing/coresight/coresight-tpiu.c
963 +++ b/drivers/hwtracing/coresight/coresight-tpiu.c
964 @@ -47,8 +47,9 @@
965
966 /** register definition **/
967 /* FFSR - 0x300 */
968 -#define FFSR_FT_STOPPED BIT(1)
969 +#define FFSR_FT_STOPPED_BIT 1
970 /* FFCR - 0x304 */
971 +#define FFCR_FON_MAN_BIT 6
972 #define FFCR_FON_MAN BIT(6)
973 #define FFCR_STOP_FI BIT(12)
974
975 @@ -93,9 +94,9 @@ static void tpiu_disable_hw(struct tpiu_drvdata *drvdata)
976 /* Generate manual flush */
977 writel_relaxed(FFCR_STOP_FI | FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
978 /* Wait for flush to complete */
979 - coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN, 0);
980 + coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN_BIT, 0);
981 /* Wait for formatter to stop */
982 - coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED, 1);
983 + coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED_BIT, 1);
984
985 CS_LOCK(drvdata->base);
986 }
987 diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
988 index b8091bef21dc..e571e4010dff 100644
989 --- a/drivers/hwtracing/coresight/coresight.c
990 +++ b/drivers/hwtracing/coresight/coresight.c
991 @@ -115,7 +115,7 @@ static int coresight_find_link_inport(struct coresight_device *csdev,
992 dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n",
993 dev_name(&parent->dev), dev_name(&csdev->dev));
994
995 - return 0;
996 + return -ENODEV;
997 }
998
999 static int coresight_find_link_outport(struct coresight_device *csdev,
1000 @@ -133,7 +133,7 @@ static int coresight_find_link_outport(struct coresight_device *csdev,
1001 dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n",
1002 dev_name(&csdev->dev), dev_name(&child->dev));
1003
1004 - return 0;
1005 + return -ENODEV;
1006 }
1007
1008 static int coresight_enable_sink(struct coresight_device *csdev, u32 mode)
1009 @@ -186,6 +186,9 @@ static int coresight_enable_link(struct coresight_device *csdev,
1010 else
1011 refport = 0;
1012
1013 + if (refport < 0)
1014 + return refport;
1015 +
1016 if (atomic_inc_return(&csdev->refcnt[refport]) == 1) {
1017 if (link_ops(csdev)->enable) {
1018 ret = link_ops(csdev)->enable(csdev, inport, outport);
1019 diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
1020 index 2feae9a421e6..a074735456bc 100644
1021 --- a/drivers/i2c/busses/i2c-aspeed.c
1022 +++ b/drivers/i2c/busses/i2c-aspeed.c
1023 @@ -110,22 +110,22 @@
1024 #define ASPEED_I2CD_DEV_ADDR_MASK GENMASK(6, 0)
1025
1026 enum aspeed_i2c_master_state {
1027 + ASPEED_I2C_MASTER_INACTIVE,
1028 ASPEED_I2C_MASTER_START,
1029 ASPEED_I2C_MASTER_TX_FIRST,
1030 ASPEED_I2C_MASTER_TX,
1031 ASPEED_I2C_MASTER_RX_FIRST,
1032 ASPEED_I2C_MASTER_RX,
1033 ASPEED_I2C_MASTER_STOP,
1034 - ASPEED_I2C_MASTER_INACTIVE,
1035 };
1036
1037 enum aspeed_i2c_slave_state {
1038 + ASPEED_I2C_SLAVE_STOP,
1039 ASPEED_I2C_SLAVE_START,
1040 ASPEED_I2C_SLAVE_READ_REQUESTED,
1041 ASPEED_I2C_SLAVE_READ_PROCESSED,
1042 ASPEED_I2C_SLAVE_WRITE_REQUESTED,
1043 ASPEED_I2C_SLAVE_WRITE_RECEIVED,
1044 - ASPEED_I2C_SLAVE_STOP,
1045 };
1046
1047 struct aspeed_i2c_bus {
1048 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1049 index 752dbc388c27..7c5eca312aa8 100644
1050 --- a/drivers/infiniband/core/cma.c
1051 +++ b/drivers/infiniband/core/cma.c
1052 @@ -730,6 +730,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
1053 dgid = (union ib_gid *) &addr->sib_addr;
1054 pkey = ntohs(addr->sib_pkey);
1055
1056 + mutex_lock(&lock);
1057 list_for_each_entry(cur_dev, &dev_list, list) {
1058 for (p = 1; p <= cur_dev->device->phys_port_cnt; ++p) {
1059 if (!rdma_cap_af_ib(cur_dev->device, p))
1060 @@ -756,18 +757,19 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
1061 cma_dev = cur_dev;
1062 sgid = gid;
1063 id_priv->id.port_num = p;
1064 + goto found;
1065 }
1066 }
1067 }
1068 }
1069 -
1070 - if (!cma_dev)
1071 - return -ENODEV;
1072 + mutex_unlock(&lock);
1073 + return -ENODEV;
1074
1075 found:
1076 cma_attach_to_dev(id_priv, cma_dev);
1077 - addr = (struct sockaddr_ib *) cma_src_addr(id_priv);
1078 - memcpy(&addr->sib_addr, &sgid, sizeof sgid);
1079 + mutex_unlock(&lock);
1080 + addr = (struct sockaddr_ib *)cma_src_addr(id_priv);
1081 + memcpy(&addr->sib_addr, &sgid, sizeof(sgid));
1082 cma_translate_ib(addr, &id_priv->id.route.addr.dev_addr);
1083 return 0;
1084 }
1085 diff --git a/drivers/infiniband/sw/rxe/rxe_recv.c b/drivers/infiniband/sw/rxe/rxe_recv.c
1086 index fb8c83e055e1..83412df726a5 100644
1087 --- a/drivers/infiniband/sw/rxe/rxe_recv.c
1088 +++ b/drivers/infiniband/sw/rxe/rxe_recv.c
1089 @@ -225,9 +225,14 @@ static int hdr_check(struct rxe_pkt_info *pkt)
1090 goto err1;
1091 }
1092
1093 + if (unlikely(qpn == 0)) {
1094 + pr_warn_once("QP 0 not supported");
1095 + goto err1;
1096 + }
1097 +
1098 if (qpn != IB_MULTICAST_QPN) {
1099 - index = (qpn == 0) ? port->qp_smi_index :
1100 - ((qpn == 1) ? port->qp_gsi_index : qpn);
1101 + index = (qpn == 1) ? port->qp_gsi_index : qpn;
1102 +
1103 qp = rxe_pool_get_index(&rxe->qp_pool, index);
1104 if (unlikely(!qp)) {
1105 pr_warn_ratelimited("no qp matches qpn 0x%x\n", qpn);
1106 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
1107 index 7a5ed5a5391e..9939f32d0154 100644
1108 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
1109 +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
1110 @@ -1018,12 +1018,14 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
1111
1112 skb_queue_head_init(&skqueue);
1113
1114 + netif_tx_lock_bh(p->dev);
1115 spin_lock_irq(&priv->lock);
1116 set_bit(IPOIB_FLAG_OPER_UP, &p->flags);
1117 if (p->neigh)
1118 while ((skb = __skb_dequeue(&p->neigh->queue)))
1119 __skb_queue_tail(&skqueue, skb);
1120 spin_unlock_irq(&priv->lock);
1121 + netif_tx_unlock_bh(p->dev);
1122
1123 while ((skb = __skb_dequeue(&skqueue))) {
1124 skb->dev = p->dev;
1125 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1126 index 6bc9a768f721..e6ff16b27acd 100644
1127 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
1128 +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1129 @@ -1752,7 +1752,8 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
1130 goto out_free_pd;
1131 }
1132
1133 - if (ipoib_neigh_hash_init(priv) < 0) {
1134 + ret = ipoib_neigh_hash_init(priv);
1135 + if (ret) {
1136 pr_warn("%s failed to init neigh hash\n", dev->name);
1137 goto out_dev_uninit;
1138 }
1139 diff --git a/drivers/input/touchscreen/rohm_bu21023.c b/drivers/input/touchscreen/rohm_bu21023.c
1140 index eeaf6ff03597..fc54e044fece 100644
1141 --- a/drivers/input/touchscreen/rohm_bu21023.c
1142 +++ b/drivers/input/touchscreen/rohm_bu21023.c
1143 @@ -304,7 +304,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
1144 msg[1].len = len;
1145 msg[1].buf = buf;
1146
1147 - i2c_lock_adapter(adap);
1148 + i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
1149
1150 for (i = 0; i < 2; i++) {
1151 if (__i2c_transfer(adap, &msg[i], 1) < 0) {
1152 @@ -313,7 +313,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
1153 }
1154 }
1155
1156 - i2c_unlock_adapter(adap);
1157 + i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
1158
1159 return ret;
1160 }
1161 diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
1162 index 8f7a3c00b6cf..26e99c03390f 100644
1163 --- a/drivers/iommu/arm-smmu-v3.c
1164 +++ b/drivers/iommu/arm-smmu-v3.c
1165 @@ -1272,6 +1272,7 @@ static irqreturn_t arm_smmu_priq_thread(int irq, void *dev)
1166
1167 /* Sync our overflow flag, as we believe we're up to speed */
1168 q->cons = Q_OVF(q, q->prod) | Q_WRP(q, q->cons) | Q_IDX(q, q->cons);
1169 + writel(q->cons, q->cons_reg);
1170 return IRQ_HANDLED;
1171 }
1172
1173 diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
1174 index 6961fc393f0b..29b7a6755fcd 100644
1175 --- a/drivers/iommu/io-pgtable-arm-v7s.c
1176 +++ b/drivers/iommu/io-pgtable-arm-v7s.c
1177 @@ -192,6 +192,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
1178 {
1179 struct io_pgtable_cfg *cfg = &data->iop.cfg;
1180 struct device *dev = cfg->iommu_dev;
1181 + phys_addr_t phys;
1182 dma_addr_t dma;
1183 size_t size = ARM_V7S_TABLE_SIZE(lvl);
1184 void *table = NULL;
1185 @@ -200,6 +201,10 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
1186 table = (void *)__get_dma_pages(__GFP_ZERO, get_order(size));
1187 else if (lvl == 2)
1188 table = kmem_cache_zalloc(data->l2_tables, gfp | GFP_DMA);
1189 + phys = virt_to_phys(table);
1190 + if (phys != (arm_v7s_iopte)phys)
1191 + /* Doesn't fit in PTE */
1192 + goto out_free;
1193 if (table && !(cfg->quirks & IO_PGTABLE_QUIRK_NO_DMA)) {
1194 dma = dma_map_single(dev, table, size, DMA_TO_DEVICE);
1195 if (dma_mapping_error(dev, dma))
1196 @@ -209,7 +214,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
1197 * address directly, so if the DMA layer suggests otherwise by
1198 * translating or truncating them, that bodes very badly...
1199 */
1200 - if (dma != virt_to_phys(table))
1201 + if (dma != phys)
1202 goto out_unmap;
1203 }
1204 kmemleak_ignore(table);
1205 diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c
1206 index a31fe18c71d6..2d96c1849759 100644
1207 --- a/drivers/media/i2c/ov5645.c
1208 +++ b/drivers/media/i2c/ov5645.c
1209 @@ -510,8 +510,8 @@ static const struct reg_value ov5645_setting_full[] = {
1210 };
1211
1212 static const s64 link_freq[] = {
1213 - 222880000,
1214 - 334320000
1215 + 224000000,
1216 + 336000000
1217 };
1218
1219 static const struct ov5645_mode_info ov5645_mode_info_data[] = {
1220 @@ -520,7 +520,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
1221 .height = 960,
1222 .data = ov5645_setting_sxga,
1223 .data_size = ARRAY_SIZE(ov5645_setting_sxga),
1224 - .pixel_clock = 111440000,
1225 + .pixel_clock = 112000000,
1226 .link_freq = 0 /* an index in link_freq[] */
1227 },
1228 {
1229 @@ -528,7 +528,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
1230 .height = 1080,
1231 .data = ov5645_setting_1080p,
1232 .data_size = ARRAY_SIZE(ov5645_setting_1080p),
1233 - .pixel_clock = 167160000,
1234 + .pixel_clock = 168000000,
1235 .link_freq = 1 /* an index in link_freq[] */
1236 },
1237 {
1238 @@ -536,7 +536,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
1239 .height = 1944,
1240 .data = ov5645_setting_full,
1241 .data_size = ARRAY_SIZE(ov5645_setting_full),
1242 - .pixel_clock = 167160000,
1243 + .pixel_clock = 168000000,
1244 .link_freq = 1 /* an index in link_freq[] */
1245 },
1246 };
1247 @@ -1157,7 +1157,8 @@ static int ov5645_probe(struct i2c_client *client,
1248 return ret;
1249 }
1250
1251 - if (xclk_freq != 23880000) {
1252 + /* external clock must be 24MHz, allow 1% tolerance */
1253 + if (xclk_freq < 23760000 || xclk_freq > 24240000) {
1254 dev_err(dev, "external clock frequency %u is not supported\n",
1255 xclk_freq);
1256 return -EINVAL;
1257 diff --git a/drivers/media/pci/tw686x/tw686x-video.c b/drivers/media/pci/tw686x/tw686x-video.c
1258 index 0ea8dd44026c..3a06c000f97b 100644
1259 --- a/drivers/media/pci/tw686x/tw686x-video.c
1260 +++ b/drivers/media/pci/tw686x/tw686x-video.c
1261 @@ -1190,6 +1190,14 @@ int tw686x_video_init(struct tw686x_dev *dev)
1262 return err;
1263 }
1264
1265 + /* Initialize vc->dev and vc->ch for the error path */
1266 + for (ch = 0; ch < max_channels(dev); ch++) {
1267 + struct tw686x_video_channel *vc = &dev->video_channels[ch];
1268 +
1269 + vc->dev = dev;
1270 + vc->ch = ch;
1271 + }
1272 +
1273 for (ch = 0; ch < max_channels(dev); ch++) {
1274 struct tw686x_video_channel *vc = &dev->video_channels[ch];
1275 struct video_device *vdev;
1276 @@ -1198,9 +1206,6 @@ int tw686x_video_init(struct tw686x_dev *dev)
1277 spin_lock_init(&vc->qlock);
1278 INIT_LIST_HEAD(&vc->vidq_queued);
1279
1280 - vc->dev = dev;
1281 - vc->ch = ch;
1282 -
1283 /* default settings */
1284 err = tw686x_set_standard(vc, V4L2_STD_NTSC);
1285 if (err)
1286 diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
1287 index 2dbf632c10de..43522a09b11d 100644
1288 --- a/drivers/media/v4l2-core/videobuf2-core.c
1289 +++ b/drivers/media/v4l2-core/videobuf2-core.c
1290 @@ -1373,6 +1373,11 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb)
1291 struct vb2_buffer *vb;
1292 int ret;
1293
1294 + if (q->error) {
1295 + dprintk(1, "fatal error occurred on queue\n");
1296 + return -EIO;
1297 + }
1298 +
1299 vb = q->bufs[index];
1300
1301 switch (vb->state) {
1302 diff --git a/drivers/mfd/88pm860x-i2c.c b/drivers/mfd/88pm860x-i2c.c
1303 index 84e313107233..7b9052ea7413 100644
1304 --- a/drivers/mfd/88pm860x-i2c.c
1305 +++ b/drivers/mfd/88pm860x-i2c.c
1306 @@ -146,14 +146,14 @@ int pm860x_page_reg_write(struct i2c_client *i2c, int reg,
1307 unsigned char zero;
1308 int ret;
1309
1310 - i2c_lock_adapter(i2c->adapter);
1311 + i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
1312 read_device(i2c, 0xFA, 0, &zero);
1313 read_device(i2c, 0xFB, 0, &zero);
1314 read_device(i2c, 0xFF, 0, &zero);
1315 ret = write_device(i2c, reg, 1, &data);
1316 read_device(i2c, 0xFE, 0, &zero);
1317 read_device(i2c, 0xFC, 0, &zero);
1318 - i2c_unlock_adapter(i2c->adapter);
1319 + i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
1320 return ret;
1321 }
1322 EXPORT_SYMBOL(pm860x_page_reg_write);
1323 @@ -164,14 +164,14 @@ int pm860x_page_bulk_read(struct i2c_client *i2c, int reg,
1324 unsigned char zero = 0;
1325 int ret;
1326
1327 - i2c_lock_adapter(i2c->adapter);
1328 + i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
1329 read_device(i2c, 0xfa, 0, &zero);
1330 read_device(i2c, 0xfb, 0, &zero);
1331 read_device(i2c, 0xff, 0, &zero);
1332 ret = read_device(i2c, reg, count, buf);
1333 read_device(i2c, 0xFE, 0, &zero);
1334 read_device(i2c, 0xFC, 0, &zero);
1335 - i2c_unlock_adapter(i2c->adapter);
1336 + i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
1337 return ret;
1338 }
1339 EXPORT_SYMBOL(pm860x_page_bulk_read);
1340 diff --git a/drivers/misc/hmc6352.c b/drivers/misc/hmc6352.c
1341 index eeb7eef62174..38f90e179927 100644
1342 --- a/drivers/misc/hmc6352.c
1343 +++ b/drivers/misc/hmc6352.c
1344 @@ -27,6 +27,7 @@
1345 #include <linux/err.h>
1346 #include <linux/delay.h>
1347 #include <linux/sysfs.h>
1348 +#include <linux/nospec.h>
1349
1350 static DEFINE_MUTEX(compass_mutex);
1351
1352 @@ -50,6 +51,7 @@ static int compass_store(struct device *dev, const char *buf, size_t count,
1353 return ret;
1354 if (val >= strlen(map))
1355 return -EINVAL;
1356 + val = array_index_nospec(val, strlen(map));
1357 mutex_lock(&compass_mutex);
1358 ret = compass_command(c, map[val]);
1359 mutex_unlock(&compass_mutex);
1360 diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
1361 index 0208c4b027c5..fa0236a5e59a 100644
1362 --- a/drivers/misc/mei/bus-fixup.c
1363 +++ b/drivers/misc/mei/bus-fixup.c
1364 @@ -267,7 +267,7 @@ static int mei_nfc_if_version(struct mei_cl *cl,
1365
1366 ret = 0;
1367 bytes_recv = __mei_cl_recv(cl, (u8 *)reply, if_version_length, 0);
1368 - if (bytes_recv < if_version_length) {
1369 + if (bytes_recv < 0 || bytes_recv < if_version_length) {
1370 dev_err(bus->dev, "Could not read IF version\n");
1371 ret = -EIO;
1372 goto err;
1373 diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
1374 index 1ac10cb64d6e..37b13bc5c16f 100644
1375 --- a/drivers/misc/mei/bus.c
1376 +++ b/drivers/misc/mei/bus.c
1377 @@ -465,17 +465,15 @@ int mei_cldev_enable(struct mei_cl_device *cldev)
1378
1379 cl = cldev->cl;
1380
1381 + mutex_lock(&bus->device_lock);
1382 if (cl->state == MEI_FILE_UNINITIALIZED) {
1383 - mutex_lock(&bus->device_lock);
1384 ret = mei_cl_link(cl);
1385 - mutex_unlock(&bus->device_lock);
1386 if (ret)
1387 - return ret;
1388 + goto out;
1389 /* update pointers */
1390 cl->cldev = cldev;
1391 }
1392
1393 - mutex_lock(&bus->device_lock);
1394 if (mei_cl_is_connected(cl)) {
1395 ret = 0;
1396 goto out;
1397 @@ -841,12 +839,13 @@ static void mei_cl_bus_dev_release(struct device *dev)
1398
1399 mei_me_cl_put(cldev->me_cl);
1400 mei_dev_bus_put(cldev->bus);
1401 + mei_cl_unlink(cldev->cl);
1402 kfree(cldev->cl);
1403 kfree(cldev);
1404 }
1405
1406 static const struct device_type mei_cl_device_type = {
1407 - .release = mei_cl_bus_dev_release,
1408 + .release = mei_cl_bus_dev_release,
1409 };
1410
1411 /**
1412 diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
1413 index fe6595fe94f1..995ff1b7e7b5 100644
1414 --- a/drivers/misc/mei/hbm.c
1415 +++ b/drivers/misc/mei/hbm.c
1416 @@ -1140,15 +1140,18 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
1417
1418 props_res = (struct hbm_props_response *)mei_msg;
1419
1420 - if (props_res->status) {
1421 + if (props_res->status == MEI_HBMS_CLIENT_NOT_FOUND) {
1422 + dev_dbg(dev->dev, "hbm: properties response: %d CLIENT_NOT_FOUND\n",
1423 + props_res->me_addr);
1424 + } else if (props_res->status) {
1425 dev_err(dev->dev, "hbm: properties response: wrong status = %d %s\n",
1426 props_res->status,
1427 mei_hbm_status_str(props_res->status));
1428 return -EPROTO;
1429 + } else {
1430 + mei_hbm_me_cl_add(dev, props_res);
1431 }
1432
1433 - mei_hbm_me_cl_add(dev, props_res);
1434 -
1435 /* request property for the next client */
1436 if (mei_hbm_prop_req(dev, props_res->me_addr + 1))
1437 return -EIO;
1438 diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
1439 index 3b5e6d11069b..9e03fada16dc 100644
1440 --- a/drivers/mmc/host/omap_hsmmc.c
1441 +++ b/drivers/mmc/host/omap_hsmmc.c
1442 @@ -2194,6 +2194,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
1443 dma_release_channel(host->tx_chan);
1444 dma_release_channel(host->rx_chan);
1445
1446 + dev_pm_clear_wake_irq(host->dev);
1447 pm_runtime_dont_use_autosuspend(host->dev);
1448 pm_runtime_put_sync(host->dev);
1449 pm_runtime_disable(host->dev);
1450 diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
1451 index 4ffa6b173a21..8332f56e6c0d 100644
1452 --- a/drivers/mmc/host/sdhci-of-esdhc.c
1453 +++ b/drivers/mmc/host/sdhci-of-esdhc.c
1454 @@ -22,6 +22,7 @@
1455 #include <linux/sys_soc.h>
1456 #include <linux/clk.h>
1457 #include <linux/ktime.h>
1458 +#include <linux/dma-mapping.h>
1459 #include <linux/mmc/host.h>
1460 #include "sdhci-pltfm.h"
1461 #include "sdhci-esdhc.h"
1462 @@ -427,6 +428,11 @@ static void esdhc_of_adma_workaround(struct sdhci_host *host, u32 intmask)
1463 static int esdhc_of_enable_dma(struct sdhci_host *host)
1464 {
1465 u32 value;
1466 + struct device *dev = mmc_dev(host->mmc);
1467 +
1468 + if (of_device_is_compatible(dev->of_node, "fsl,ls1043a-esdhc") ||
1469 + of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc"))
1470 + dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
1471
1472 value = sdhci_readl(host, ESDHC_DMA_SYSCTL);
1473 value |= ESDHC_DMA_SNOOP;
1474 diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
1475 index 0cd6fa80db66..ce3f344d2b66 100644
1476 --- a/drivers/mmc/host/sdhci-tegra.c
1477 +++ b/drivers/mmc/host/sdhci-tegra.c
1478 @@ -334,7 +334,8 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
1479 SDHCI_QUIRK_NO_HISPD_BIT |
1480 SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC |
1481 SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN,
1482 - .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
1483 + .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
1484 + SDHCI_QUIRK2_BROKEN_HS200,
1485 .ops = &tegra_sdhci_ops,
1486 };
1487
1488 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
1489 index d35deb79965d..f063fe569339 100644
1490 --- a/drivers/mmc/host/sdhci.c
1491 +++ b/drivers/mmc/host/sdhci.c
1492 @@ -3631,14 +3631,21 @@ int sdhci_setup_host(struct sdhci_host *host)
1493 mmc_gpio_get_cd(host->mmc) < 0)
1494 mmc->caps |= MMC_CAP_NEEDS_POLL;
1495
1496 - /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
1497 if (!IS_ERR(mmc->supply.vqmmc)) {
1498 ret = regulator_enable(mmc->supply.vqmmc);
1499 +
1500 + /* If vqmmc provides no 1.8V signalling, then there's no UHS */
1501 if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 1700000,
1502 1950000))
1503 host->caps1 &= ~(SDHCI_SUPPORT_SDR104 |
1504 SDHCI_SUPPORT_SDR50 |
1505 SDHCI_SUPPORT_DDR50);
1506 +
1507 + /* In eMMC case vqmmc might be a fixed 1.8V regulator */
1508 + if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 2700000,
1509 + 3600000))
1510 + host->flags &= ~SDHCI_SIGNALING_330;
1511 +
1512 if (ret) {
1513 pr_warn("%s: Failed to enable vqmmc regulator: %d\n",
1514 mmc_hostname(mmc), ret);
1515 diff --git a/drivers/mtd/maps/solutionengine.c b/drivers/mtd/maps/solutionengine.c
1516 index bb580bc16445..c07f21b20463 100644
1517 --- a/drivers/mtd/maps/solutionengine.c
1518 +++ b/drivers/mtd/maps/solutionengine.c
1519 @@ -59,9 +59,9 @@ static int __init init_soleng_maps(void)
1520 return -ENXIO;
1521 }
1522 }
1523 - printk(KERN_NOTICE "Solution Engine: Flash at 0x%08lx, EPROM at 0x%08lx\n",
1524 - soleng_flash_map.phys & 0x1fffffff,
1525 - soleng_eprom_map.phys & 0x1fffffff);
1526 + printk(KERN_NOTICE "Solution Engine: Flash at 0x%pap, EPROM at 0x%pap\n",
1527 + &soleng_flash_map.phys,
1528 + &soleng_eprom_map.phys);
1529 flash_mtd->owner = THIS_MODULE;
1530
1531 eprom_mtd = do_map_probe("map_rom", &soleng_eprom_map);
1532 diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
1533 index b25f444c5914..fa4d12217652 100644
1534 --- a/drivers/mtd/mtdchar.c
1535 +++ b/drivers/mtd/mtdchar.c
1536 @@ -160,8 +160,12 @@ static ssize_t mtdchar_read(struct file *file, char __user *buf, size_t count,
1537
1538 pr_debug("MTD_read\n");
1539
1540 - if (*ppos + count > mtd->size)
1541 - count = mtd->size - *ppos;
1542 + if (*ppos + count > mtd->size) {
1543 + if (*ppos < mtd->size)
1544 + count = mtd->size - *ppos;
1545 + else
1546 + count = 0;
1547 + }
1548
1549 if (!count)
1550 return 0;
1551 @@ -246,7 +250,7 @@ static ssize_t mtdchar_write(struct file *file, const char __user *buf, size_t c
1552
1553 pr_debug("MTD_write\n");
1554
1555 - if (*ppos == mtd->size)
1556 + if (*ppos >= mtd->size)
1557 return -ENOSPC;
1558
1559 if (*ppos + count > mtd->size)
1560 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
1561 index 45d92304068e..a5eaf174d914 100644
1562 --- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
1563 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
1564 @@ -289,7 +289,7 @@ static int xgbe_alloc_pages(struct xgbe_prv_data *pdata,
1565 struct page *pages = NULL;
1566 dma_addr_t pages_dma;
1567 gfp_t gfp;
1568 - int order, ret;
1569 + int order;
1570
1571 again:
1572 order = alloc_order;
1573 @@ -316,10 +316,9 @@ again:
1574 /* Map the pages */
1575 pages_dma = dma_map_page(pdata->dev, pages, 0,
1576 PAGE_SIZE << order, DMA_FROM_DEVICE);
1577 - ret = dma_mapping_error(pdata->dev, pages_dma);
1578 - if (ret) {
1579 + if (dma_mapping_error(pdata->dev, pages_dma)) {
1580 put_page(pages);
1581 - return ret;
1582 + return -ENOMEM;
1583 }
1584
1585 pa->pages = pages;
1586 diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
1587 index e8b290473ee2..2e089b5ff8f3 100644
1588 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
1589 +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
1590 @@ -493,6 +493,9 @@ static void cn23xx_pf_setup_global_output_regs(struct octeon_device *oct)
1591 for (q_no = srn; q_no < ern; q_no++) {
1592 reg_val = octeon_read_csr(oct, CN23XX_SLI_OQ_PKT_CONTROL(q_no));
1593
1594 + /* clear IPTR */
1595 + reg_val &= ~CN23XX_PKT_OUTPUT_CTL_IPTR;
1596 +
1597 /* set DPTR */
1598 reg_val |= CN23XX_PKT_OUTPUT_CTL_DPTR;
1599
1600 diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
1601 index 9338a0008378..1f8b7f651254 100644
1602 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
1603 +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
1604 @@ -165,6 +165,9 @@ static void cn23xx_vf_setup_global_output_regs(struct octeon_device *oct)
1605 reg_val =
1606 octeon_read_csr(oct, CN23XX_VF_SLI_OQ_PKT_CONTROL(q_no));
1607
1608 + /* clear IPTR */
1609 + reg_val &= ~CN23XX_PKT_OUTPUT_CTL_IPTR;
1610 +
1611 /* set DPTR */
1612 reg_val |= CN23XX_PKT_OUTPUT_CTL_DPTR;
1613
1614 diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
1615 index 02dd5246dfae..1589a568bfe0 100644
1616 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c
1617 +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
1618 @@ -4500,7 +4500,7 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
1619 port_res->max_vfs += le16_to_cpu(pcie->num_vfs);
1620 }
1621 }
1622 - return status;
1623 + goto err;
1624 }
1625
1626 pcie = be_get_pcie_desc(resp->func_param, desc_count,
1627 diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h
1628 index afb7ebe20b24..824fd44e25f0 100644
1629 --- a/drivers/net/ethernet/intel/e1000e/defines.h
1630 +++ b/drivers/net/ethernet/intel/e1000e/defines.h
1631 @@ -400,6 +400,10 @@
1632 #define E1000_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */
1633 #define E1000_ICR_RXO 0x00000040 /* Receiver Overrun */
1634 #define E1000_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */
1635 +#define E1000_ICR_MDAC 0x00000200 /* MDIO Access Complete */
1636 +#define E1000_ICR_SRPD 0x00010000 /* Small Receive Packet Detected */
1637 +#define E1000_ICR_ACK 0x00020000 /* Receive ACK Frame Detected */
1638 +#define E1000_ICR_MNG 0x00040000 /* Manageability Event Detected */
1639 #define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */
1640 /* If this bit asserted, the driver should claim the interrupt */
1641 #define E1000_ICR_INT_ASSERTED 0x80000000
1642 @@ -407,7 +411,7 @@
1643 #define E1000_ICR_RXQ1 0x00200000 /* Rx Queue 1 Interrupt */
1644 #define E1000_ICR_TXQ0 0x00400000 /* Tx Queue 0 Interrupt */
1645 #define E1000_ICR_TXQ1 0x00800000 /* Tx Queue 1 Interrupt */
1646 -#define E1000_ICR_OTHER 0x01000000 /* Other Interrupts */
1647 +#define E1000_ICR_OTHER 0x01000000 /* Other Interrupt */
1648
1649 /* PBA ECC Register */
1650 #define E1000_PBA_ECC_COUNTER_MASK 0xFFF00000 /* ECC counter mask */
1651 @@ -431,12 +435,27 @@
1652 E1000_IMS_RXSEQ | \
1653 E1000_IMS_LSC)
1654
1655 +/* These are all of the events related to the OTHER interrupt.
1656 + */
1657 +#define IMS_OTHER_MASK ( \
1658 + E1000_IMS_LSC | \
1659 + E1000_IMS_RXO | \
1660 + E1000_IMS_MDAC | \
1661 + E1000_IMS_SRPD | \
1662 + E1000_IMS_ACK | \
1663 + E1000_IMS_MNG)
1664 +
1665 /* Interrupt Mask Set */
1666 #define E1000_IMS_TXDW E1000_ICR_TXDW /* Transmit desc written back */
1667 #define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */
1668 #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
1669 #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
1670 +#define E1000_IMS_RXO E1000_ICR_RXO /* Receiver Overrun */
1671 #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */
1672 +#define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO Access Complete */
1673 +#define E1000_IMS_SRPD E1000_ICR_SRPD /* Small Receive Packet */
1674 +#define E1000_IMS_ACK E1000_ICR_ACK /* Receive ACK Frame Detected */
1675 +#define E1000_IMS_MNG E1000_ICR_MNG /* Manageability Event */
1676 #define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */
1677 #define E1000_IMS_RXQ0 E1000_ICR_RXQ0 /* Rx Queue 0 Interrupt */
1678 #define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */
1679 diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
1680 index ff308b05d68c..00eedf202e62 100644
1681 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
1682 +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
1683 @@ -1367,9 +1367,6 @@ out:
1684 * Checks to see of the link status of the hardware has changed. If a
1685 * change in link status has been detected, then we read the PHY registers
1686 * to get the current speed/duplex if link exists.
1687 - *
1688 - * Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link
1689 - * up).
1690 **/
1691 static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1692 {
1693 @@ -1385,7 +1382,8 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1694 * Change or Rx Sequence Error interrupt.
1695 */
1696 if (!mac->get_link_status)
1697 - return 1;
1698 + return 0;
1699 + mac->get_link_status = false;
1700
1701 /* First we want to see if the MII Status Register reports
1702 * link. If so, then we want to get the current speed/duplex
1703 @@ -1393,12 +1391,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1704 */
1705 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1706 if (ret_val)
1707 - return ret_val;
1708 + goto out;
1709
1710 if (hw->mac.type == e1000_pchlan) {
1711 ret_val = e1000_k1_gig_workaround_hv(hw, link);
1712 if (ret_val)
1713 - return ret_val;
1714 + goto out;
1715 }
1716
1717 /* When connected at 10Mbps half-duplex, some parts are excessively
1718 @@ -1431,7 +1429,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1719
1720 ret_val = hw->phy.ops.acquire(hw);
1721 if (ret_val)
1722 - return ret_val;
1723 + goto out;
1724
1725 if (hw->mac.type == e1000_pch2lan)
1726 emi_addr = I82579_RX_CONFIG;
1727 @@ -1453,7 +1451,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1728 hw->phy.ops.release(hw);
1729
1730 if (ret_val)
1731 - return ret_val;
1732 + goto out;
1733
1734 if (hw->mac.type >= e1000_pch_spt) {
1735 u16 data;
1736 @@ -1462,14 +1460,14 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1737 if (speed == SPEED_1000) {
1738 ret_val = hw->phy.ops.acquire(hw);
1739 if (ret_val)
1740 - return ret_val;
1741 + goto out;
1742
1743 ret_val = e1e_rphy_locked(hw,
1744 PHY_REG(776, 20),
1745 &data);
1746 if (ret_val) {
1747 hw->phy.ops.release(hw);
1748 - return ret_val;
1749 + goto out;
1750 }
1751
1752 ptr_gap = (data & (0x3FF << 2)) >> 2;
1753 @@ -1483,18 +1481,18 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1754 }
1755 hw->phy.ops.release(hw);
1756 if (ret_val)
1757 - return ret_val;
1758 + goto out;
1759 } else {
1760 ret_val = hw->phy.ops.acquire(hw);
1761 if (ret_val)
1762 - return ret_val;
1763 + goto out;
1764
1765 ret_val = e1e_wphy_locked(hw,
1766 PHY_REG(776, 20),
1767 0xC023);
1768 hw->phy.ops.release(hw);
1769 if (ret_val)
1770 - return ret_val;
1771 + goto out;
1772
1773 }
1774 }
1775 @@ -1521,7 +1519,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1776 (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_V3)) {
1777 ret_val = e1000_k1_workaround_lpt_lp(hw, link);
1778 if (ret_val)
1779 - return ret_val;
1780 + goto out;
1781 }
1782 if (hw->mac.type >= e1000_pch_lpt) {
1783 /* Set platform power management values for
1784 @@ -1529,7 +1527,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1785 */
1786 ret_val = e1000_platform_pm_pch_lpt(hw, link);
1787 if (ret_val)
1788 - return ret_val;
1789 + goto out;
1790 }
1791
1792 /* Clear link partner's EEE ability */
1793 @@ -1552,9 +1550,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1794 }
1795
1796 if (!link)
1797 - return 0; /* No link detected */
1798 -
1799 - mac->get_link_status = false;
1800 + goto out;
1801
1802 switch (hw->mac.type) {
1803 case e1000_pch2lan:
1804 @@ -1616,12 +1612,14 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1805 * different link partner.
1806 */
1807 ret_val = e1000e_config_fc_after_link_up(hw);
1808 - if (ret_val) {
1809 + if (ret_val)
1810 e_dbg("Error configuring flow control\n");
1811 - return ret_val;
1812 - }
1813
1814 - return 1;
1815 + return ret_val;
1816 +
1817 +out:
1818 + mac->get_link_status = true;
1819 + return ret_val;
1820 }
1821
1822 static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
1823 diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c
1824 index db735644b312..48cc945fc8b0 100644
1825 --- a/drivers/net/ethernet/intel/e1000e/mac.c
1826 +++ b/drivers/net/ethernet/intel/e1000e/mac.c
1827 @@ -410,9 +410,6 @@ void e1000e_clear_hw_cntrs_base(struct e1000_hw *hw)
1828 * Checks to see of the link status of the hardware has changed. If a
1829 * change in link status has been detected, then we read the PHY registers
1830 * to get the current speed/duplex if link exists.
1831 - *
1832 - * Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link
1833 - * up).
1834 **/
1835 s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1836 {
1837 @@ -426,20 +423,16 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1838 * Change or Rx Sequence Error interrupt.
1839 */
1840 if (!mac->get_link_status)
1841 - return 1;
1842 + return 0;
1843 + mac->get_link_status = false;
1844
1845 /* First we want to see if the MII Status Register reports
1846 * link. If so, then we want to get the current speed/duplex
1847 * of the PHY.
1848 */
1849 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1850 - if (ret_val)
1851 - return ret_val;
1852 -
1853 - if (!link)
1854 - return 0; /* No link detected */
1855 -
1856 - mac->get_link_status = false;
1857 + if (ret_val || !link)
1858 + goto out;
1859
1860 /* Check if there was DownShift, must be checked
1861 * immediately after link-up
1862 @@ -464,12 +457,14 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1863 * different link partner.
1864 */
1865 ret_val = e1000e_config_fc_after_link_up(hw);
1866 - if (ret_val) {
1867 + if (ret_val)
1868 e_dbg("Error configuring flow control\n");
1869 - return ret_val;
1870 - }
1871
1872 - return 1;
1873 + return ret_val;
1874 +
1875 +out:
1876 + mac->get_link_status = true;
1877 + return ret_val;
1878 }
1879
1880 /**
1881 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
1882 index 6265ce8915b6..a25dc581a903 100644
1883 --- a/drivers/net/ethernet/intel/e1000e/netdev.c
1884 +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
1885 @@ -1910,30 +1910,20 @@ static irqreturn_t e1000_msix_other(int __always_unused irq, void *data)
1886 struct net_device *netdev = data;
1887 struct e1000_adapter *adapter = netdev_priv(netdev);
1888 struct e1000_hw *hw = &adapter->hw;
1889 - u32 icr;
1890 - bool enable = true;
1891 -
1892 - icr = er32(ICR);
1893 - if (icr & E1000_ICR_RXO) {
1894 - ew32(ICR, E1000_ICR_RXO);
1895 - enable = false;
1896 - /* napi poll will re-enable Other, make sure it runs */
1897 - if (napi_schedule_prep(&adapter->napi)) {
1898 - adapter->total_rx_bytes = 0;
1899 - adapter->total_rx_packets = 0;
1900 - __napi_schedule(&adapter->napi);
1901 - }
1902 - }
1903 + u32 icr = er32(ICR);
1904 +
1905 + if (icr & adapter->eiac_mask)
1906 + ew32(ICS, (icr & adapter->eiac_mask));
1907 +
1908 if (icr & E1000_ICR_LSC) {
1909 - ew32(ICR, E1000_ICR_LSC);
1910 hw->mac.get_link_status = true;
1911 /* guard against interrupt when we're going down */
1912 if (!test_bit(__E1000_DOWN, &adapter->state))
1913 mod_timer(&adapter->watchdog_timer, jiffies + 1);
1914 }
1915
1916 - if (enable && !test_bit(__E1000_DOWN, &adapter->state))
1917 - ew32(IMS, E1000_IMS_OTHER);
1918 + if (!test_bit(__E1000_DOWN, &adapter->state))
1919 + ew32(IMS, E1000_IMS_OTHER | IMS_OTHER_MASK);
1920
1921 return IRQ_HANDLED;
1922 }
1923 @@ -2036,7 +2026,6 @@ static void e1000_configure_msix(struct e1000_adapter *adapter)
1924 hw->hw_addr + E1000_EITR_82574(vector));
1925 else
1926 writel(1, hw->hw_addr + E1000_EITR_82574(vector));
1927 - adapter->eiac_mask |= E1000_IMS_OTHER;
1928
1929 /* Cause Tx interrupts on every write back */
1930 ivar |= BIT(31);
1931 @@ -2261,7 +2250,8 @@ static void e1000_irq_enable(struct e1000_adapter *adapter)
1932
1933 if (adapter->msix_entries) {
1934 ew32(EIAC_82574, adapter->eiac_mask & E1000_EIAC_MASK_82574);
1935 - ew32(IMS, adapter->eiac_mask | E1000_IMS_LSC);
1936 + ew32(IMS, adapter->eiac_mask | E1000_IMS_OTHER |
1937 + IMS_OTHER_MASK);
1938 } else if (hw->mac.type >= e1000_pch_lpt) {
1939 ew32(IMS, IMS_ENABLE_MASK | E1000_IMS_ECCER);
1940 } else {
1941 @@ -2703,8 +2693,7 @@ static int e1000e_poll(struct napi_struct *napi, int weight)
1942 napi_complete_done(napi, work_done);
1943 if (!test_bit(__E1000_DOWN, &adapter->state)) {
1944 if (adapter->msix_entries)
1945 - ew32(IMS, adapter->rx_ring->ims_val |
1946 - E1000_IMS_OTHER);
1947 + ew32(IMS, adapter->rx_ring->ims_val);
1948 else
1949 e1000_irq_enable(adapter);
1950 }
1951 @@ -5100,7 +5089,7 @@ static bool e1000e_has_link(struct e1000_adapter *adapter)
1952 case e1000_media_type_copper:
1953 if (hw->mac.get_link_status) {
1954 ret_val = hw->mac.ops.check_for_link(hw);
1955 - link_active = ret_val > 0;
1956 + link_active = !hw->mac.get_link_status;
1957 } else {
1958 link_active = true;
1959 }
1960 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1961 index cf94fdf25155..c7654209668b 100644
1962 --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1963 +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1964 @@ -449,6 +449,7 @@ const char *mlx5_command_str(int command)
1965 MLX5_COMMAND_STR_CASE(SET_HCA_CAP);
1966 MLX5_COMMAND_STR_CASE(QUERY_ISSI);
1967 MLX5_COMMAND_STR_CASE(SET_ISSI);
1968 + MLX5_COMMAND_STR_CASE(SET_DRIVER_VERSION);
1969 MLX5_COMMAND_STR_CASE(CREATE_MKEY);
1970 MLX5_COMMAND_STR_CASE(QUERY_MKEY);
1971 MLX5_COMMAND_STR_CASE(DESTROY_MKEY);
1972 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
1973 index 17b723218b0c..9f9c9ff10735 100644
1974 --- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c
1975 +++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
1976 @@ -132,11 +132,11 @@ void mlx5_add_device(struct mlx5_interface *intf, struct mlx5_priv *priv)
1977 delayed_event_start(priv);
1978
1979 dev_ctx->context = intf->add(dev);
1980 - set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
1981 - if (intf->attach)
1982 - set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
1983 -
1984 if (dev_ctx->context) {
1985 + set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
1986 + if (intf->attach)
1987 + set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
1988 +
1989 spin_lock_irq(&priv->ctx_lock);
1990 list_add_tail(&dev_ctx->list, &priv->ctx_list);
1991
1992 @@ -211,12 +211,17 @@ static void mlx5_attach_interface(struct mlx5_interface *intf, struct mlx5_priv
1993 if (intf->attach) {
1994 if (test_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state))
1995 goto out;
1996 - intf->attach(dev, dev_ctx->context);
1997 + if (intf->attach(dev, dev_ctx->context))
1998 + goto out;
1999 +
2000 set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
2001 } else {
2002 if (test_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state))
2003 goto out;
2004 dev_ctx->context = intf->add(dev);
2005 + if (!dev_ctx->context)
2006 + goto out;
2007 +
2008 set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
2009 }
2010
2011 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2012 index c699055c0ffd..4b52b722135d 100644
2013 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2014 +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2015 @@ -557,6 +557,7 @@ static int esw_create_offloads_fdb_tables(struct mlx5_eswitch *esw, int nvports)
2016 if (err)
2017 goto miss_rule_err;
2018
2019 + kvfree(flow_group_in);
2020 return 0;
2021
2022 miss_rule_err:
2023 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
2024 index db86e1506c8b..61f284966a8c 100644
2025 --- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
2026 +++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
2027 @@ -333,9 +333,17 @@ void mlx5_start_health_poll(struct mlx5_core_dev *dev)
2028 add_timer(&health->timer);
2029 }
2030
2031 -void mlx5_stop_health_poll(struct mlx5_core_dev *dev)
2032 +void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health)
2033 {
2034 struct mlx5_core_health *health = &dev->priv.health;
2035 + unsigned long flags;
2036 +
2037 + if (disable_health) {
2038 + spin_lock_irqsave(&health->wq_lock, flags);
2039 + set_bit(MLX5_DROP_NEW_HEALTH_WORK, &health->flags);
2040 + set_bit(MLX5_DROP_NEW_RECOVERY_WORK, &health->flags);
2041 + spin_unlock_irqrestore(&health->wq_lock, flags);
2042 + }
2043
2044 del_timer_sync(&health->timer);
2045 }
2046 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
2047 index 4ddd632d10f9..e99f1382a4f0 100644
2048 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
2049 +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
2050 @@ -857,8 +857,10 @@ static int mlx5_pci_init(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
2051 priv->numa_node = dev_to_node(&dev->pdev->dev);
2052
2053 priv->dbg_root = debugfs_create_dir(dev_name(&pdev->dev), mlx5_debugfs_root);
2054 - if (!priv->dbg_root)
2055 + if (!priv->dbg_root) {
2056 + dev_err(&pdev->dev, "Cannot create debugfs dir, aborting\n");
2057 return -ENOMEM;
2058 + }
2059
2060 err = mlx5_pci_enable_device(dev);
2061 if (err) {
2062 @@ -907,7 +909,7 @@ static void mlx5_pci_close(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
2063 pci_clear_master(dev->pdev);
2064 release_bar(dev->pdev);
2065 mlx5_pci_disable_device(dev);
2066 - debugfs_remove(priv->dbg_root);
2067 + debugfs_remove_recursive(priv->dbg_root);
2068 }
2069
2070 static int mlx5_init_once(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
2071 @@ -1227,7 +1229,7 @@ err_cleanup_once:
2072 mlx5_cleanup_once(dev);
2073
2074 err_stop_poll:
2075 - mlx5_stop_health_poll(dev);
2076 + mlx5_stop_health_poll(dev, boot);
2077 if (mlx5_cmd_teardown_hca(dev)) {
2078 dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
2079 goto out_err;
2080 @@ -1286,7 +1288,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
2081 mlx5_free_irq_vectors(dev);
2082 if (cleanup)
2083 mlx5_cleanup_once(dev);
2084 - mlx5_stop_health_poll(dev);
2085 + mlx5_stop_health_poll(dev, cleanup);
2086 err = mlx5_cmd_teardown_hca(dev);
2087 if (err) {
2088 dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
2089 @@ -1548,7 +1550,7 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *dev)
2090 * with the HCA, so the health polll is no longer needed.
2091 */
2092 mlx5_drain_health_wq(dev);
2093 - mlx5_stop_health_poll(dev);
2094 + mlx5_stop_health_poll(dev, false);
2095
2096 ret = mlx5_cmd_force_teardown_hca(dev);
2097 if (ret) {
2098 diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2099 index b482a8fb0e92..56751990bcee 100644
2100 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2101 +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2102 @@ -1087,7 +1087,7 @@ static bool nfp_net_xdp_complete(struct nfp_net_tx_ring *tx_ring)
2103 * @dp: NFP Net data path struct
2104 * @tx_ring: TX ring structure
2105 *
2106 - * Assumes that the device is stopped
2107 + * Assumes that the device is stopped, must be idempotent.
2108 */
2109 static void
2110 nfp_net_tx_ring_reset(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
2111 @@ -1289,13 +1289,18 @@ static void nfp_net_rx_give_one(const struct nfp_net_dp *dp,
2112 * nfp_net_rx_ring_reset() - Reflect in SW state of freelist after disable
2113 * @rx_ring: RX ring structure
2114 *
2115 - * Warning: Do *not* call if ring buffers were never put on the FW freelist
2116 - * (i.e. device was not enabled)!
2117 + * Assumes that the device is stopped, must be idempotent.
2118 */
2119 static void nfp_net_rx_ring_reset(struct nfp_net_rx_ring *rx_ring)
2120 {
2121 unsigned int wr_idx, last_idx;
2122
2123 + /* wr_p == rd_p means ring was never fed FL bufs. RX rings are always
2124 + * kept at cnt - 1 FL bufs.
2125 + */
2126 + if (rx_ring->wr_p == 0 && rx_ring->rd_p == 0)
2127 + return;
2128 +
2129 /* Move the empty entry to the end of the list */
2130 wr_idx = D_IDX(rx_ring, rx_ring->wr_p);
2131 last_idx = rx_ring->cnt - 1;
2132 @@ -2505,6 +2510,8 @@ static void nfp_net_vec_clear_ring_data(struct nfp_net *nn, unsigned int idx)
2133 /**
2134 * nfp_net_clear_config_and_disable() - Clear control BAR and disable NFP
2135 * @nn: NFP Net device to reconfigure
2136 + *
2137 + * Warning: must be fully idempotent.
2138 */
2139 static void nfp_net_clear_config_and_disable(struct nfp_net *nn)
2140 {
2141 diff --git a/drivers/net/ethernet/qualcomm/qca_7k.c b/drivers/net/ethernet/qualcomm/qca_7k.c
2142 index ffe7a16bdfc8..6c8543fb90c0 100644
2143 --- a/drivers/net/ethernet/qualcomm/qca_7k.c
2144 +++ b/drivers/net/ethernet/qualcomm/qca_7k.c
2145 @@ -45,34 +45,33 @@ qcaspi_read_register(struct qcaspi *qca, u16 reg, u16 *result)
2146 {
2147 __be16 rx_data;
2148 __be16 tx_data;
2149 - struct spi_transfer *transfer;
2150 - struct spi_message *msg;
2151 + struct spi_transfer transfer[2];
2152 + struct spi_message msg;
2153 int ret;
2154
2155 + memset(transfer, 0, sizeof(transfer));
2156 +
2157 + spi_message_init(&msg);
2158 +
2159 tx_data = cpu_to_be16(QCA7K_SPI_READ | QCA7K_SPI_INTERNAL | reg);
2160 + *result = 0;
2161 +
2162 + transfer[0].tx_buf = &tx_data;
2163 + transfer[0].len = QCASPI_CMD_LEN;
2164 + transfer[1].rx_buf = &rx_data;
2165 + transfer[1].len = QCASPI_CMD_LEN;
2166 +
2167 + spi_message_add_tail(&transfer[0], &msg);
2168
2169 if (qca->legacy_mode) {
2170 - msg = &qca->spi_msg1;
2171 - transfer = &qca->spi_xfer1;
2172 - transfer->tx_buf = &tx_data;
2173 - transfer->rx_buf = NULL;
2174 - transfer->len = QCASPI_CMD_LEN;
2175 - spi_sync(qca->spi_dev, msg);
2176 - } else {
2177 - msg = &qca->spi_msg2;
2178 - transfer = &qca->spi_xfer2[0];
2179 - transfer->tx_buf = &tx_data;
2180 - transfer->rx_buf = NULL;
2181 - transfer->len = QCASPI_CMD_LEN;
2182 - transfer = &qca->spi_xfer2[1];
2183 + spi_sync(qca->spi_dev, &msg);
2184 + spi_message_init(&msg);
2185 }
2186 - transfer->tx_buf = NULL;
2187 - transfer->rx_buf = &rx_data;
2188 - transfer->len = QCASPI_CMD_LEN;
2189 - ret = spi_sync(qca->spi_dev, msg);
2190 + spi_message_add_tail(&transfer[1], &msg);
2191 + ret = spi_sync(qca->spi_dev, &msg);
2192
2193 if (!ret)
2194 - ret = msg->status;
2195 + ret = msg.status;
2196
2197 if (ret)
2198 qcaspi_spi_error(qca);
2199 @@ -86,35 +85,32 @@ int
2200 qcaspi_write_register(struct qcaspi *qca, u16 reg, u16 value)
2201 {
2202 __be16 tx_data[2];
2203 - struct spi_transfer *transfer;
2204 - struct spi_message *msg;
2205 + struct spi_transfer transfer[2];
2206 + struct spi_message msg;
2207 int ret;
2208
2209 + memset(&transfer, 0, sizeof(transfer));
2210 +
2211 + spi_message_init(&msg);
2212 +
2213 tx_data[0] = cpu_to_be16(QCA7K_SPI_WRITE | QCA7K_SPI_INTERNAL | reg);
2214 tx_data[1] = cpu_to_be16(value);
2215
2216 + transfer[0].tx_buf = &tx_data[0];
2217 + transfer[0].len = QCASPI_CMD_LEN;
2218 + transfer[1].tx_buf = &tx_data[1];
2219 + transfer[1].len = QCASPI_CMD_LEN;
2220 +
2221 + spi_message_add_tail(&transfer[0], &msg);
2222 if (qca->legacy_mode) {
2223 - msg = &qca->spi_msg1;
2224 - transfer = &qca->spi_xfer1;
2225 - transfer->tx_buf = &tx_data[0];
2226 - transfer->rx_buf = NULL;
2227 - transfer->len = QCASPI_CMD_LEN;
2228 - spi_sync(qca->spi_dev, msg);
2229 - } else {
2230 - msg = &qca->spi_msg2;
2231 - transfer = &qca->spi_xfer2[0];
2232 - transfer->tx_buf = &tx_data[0];
2233 - transfer->rx_buf = NULL;
2234 - transfer->len = QCASPI_CMD_LEN;
2235 - transfer = &qca->spi_xfer2[1];
2236 + spi_sync(qca->spi_dev, &msg);
2237 + spi_message_init(&msg);
2238 }
2239 - transfer->tx_buf = &tx_data[1];
2240 - transfer->rx_buf = NULL;
2241 - transfer->len = QCASPI_CMD_LEN;
2242 - ret = spi_sync(qca->spi_dev, msg);
2243 + spi_message_add_tail(&transfer[1], &msg);
2244 + ret = spi_sync(qca->spi_dev, &msg);
2245
2246 if (!ret)
2247 - ret = msg->status;
2248 + ret = msg.status;
2249
2250 if (ret)
2251 qcaspi_spi_error(qca);
2252 diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
2253 index b1f5f0b8e546..275fc6f154a7 100644
2254 --- a/drivers/net/ethernet/qualcomm/qca_spi.c
2255 +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
2256 @@ -99,22 +99,24 @@ static u32
2257 qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
2258 {
2259 __be16 cmd;
2260 - struct spi_message *msg = &qca->spi_msg2;
2261 - struct spi_transfer *transfer = &qca->spi_xfer2[0];
2262 + struct spi_message msg;
2263 + struct spi_transfer transfer[2];
2264 int ret;
2265
2266 + memset(&transfer, 0, sizeof(transfer));
2267 + spi_message_init(&msg);
2268 +
2269 cmd = cpu_to_be16(QCA7K_SPI_WRITE | QCA7K_SPI_EXTERNAL);
2270 - transfer->tx_buf = &cmd;
2271 - transfer->rx_buf = NULL;
2272 - transfer->len = QCASPI_CMD_LEN;
2273 - transfer = &qca->spi_xfer2[1];
2274 - transfer->tx_buf = src;
2275 - transfer->rx_buf = NULL;
2276 - transfer->len = len;
2277 + transfer[0].tx_buf = &cmd;
2278 + transfer[0].len = QCASPI_CMD_LEN;
2279 + transfer[1].tx_buf = src;
2280 + transfer[1].len = len;
2281
2282 - ret = spi_sync(qca->spi_dev, msg);
2283 + spi_message_add_tail(&transfer[0], &msg);
2284 + spi_message_add_tail(&transfer[1], &msg);
2285 + ret = spi_sync(qca->spi_dev, &msg);
2286
2287 - if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
2288 + if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
2289 qcaspi_spi_error(qca);
2290 return 0;
2291 }
2292 @@ -125,17 +127,20 @@ qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
2293 static u32
2294 qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
2295 {
2296 - struct spi_message *msg = &qca->spi_msg1;
2297 - struct spi_transfer *transfer = &qca->spi_xfer1;
2298 + struct spi_message msg;
2299 + struct spi_transfer transfer;
2300 int ret;
2301
2302 - transfer->tx_buf = src;
2303 - transfer->rx_buf = NULL;
2304 - transfer->len = len;
2305 + memset(&transfer, 0, sizeof(transfer));
2306 + spi_message_init(&msg);
2307 +
2308 + transfer.tx_buf = src;
2309 + transfer.len = len;
2310
2311 - ret = spi_sync(qca->spi_dev, msg);
2312 + spi_message_add_tail(&transfer, &msg);
2313 + ret = spi_sync(qca->spi_dev, &msg);
2314
2315 - if (ret || (msg->actual_length != len)) {
2316 + if (ret || (msg.actual_length != len)) {
2317 qcaspi_spi_error(qca);
2318 return 0;
2319 }
2320 @@ -146,23 +151,25 @@ qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
2321 static u32
2322 qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
2323 {
2324 - struct spi_message *msg = &qca->spi_msg2;
2325 + struct spi_message msg;
2326 __be16 cmd;
2327 - struct spi_transfer *transfer = &qca->spi_xfer2[0];
2328 + struct spi_transfer transfer[2];
2329 int ret;
2330
2331 + memset(&transfer, 0, sizeof(transfer));
2332 + spi_message_init(&msg);
2333 +
2334 cmd = cpu_to_be16(QCA7K_SPI_READ | QCA7K_SPI_EXTERNAL);
2335 - transfer->tx_buf = &cmd;
2336 - transfer->rx_buf = NULL;
2337 - transfer->len = QCASPI_CMD_LEN;
2338 - transfer = &qca->spi_xfer2[1];
2339 - transfer->tx_buf = NULL;
2340 - transfer->rx_buf = dst;
2341 - transfer->len = len;
2342 + transfer[0].tx_buf = &cmd;
2343 + transfer[0].len = QCASPI_CMD_LEN;
2344 + transfer[1].rx_buf = dst;
2345 + transfer[1].len = len;
2346
2347 - ret = spi_sync(qca->spi_dev, msg);
2348 + spi_message_add_tail(&transfer[0], &msg);
2349 + spi_message_add_tail(&transfer[1], &msg);
2350 + ret = spi_sync(qca->spi_dev, &msg);
2351
2352 - if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
2353 + if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
2354 qcaspi_spi_error(qca);
2355 return 0;
2356 }
2357 @@ -173,17 +180,20 @@ qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
2358 static u32
2359 qcaspi_read_legacy(struct qcaspi *qca, u8 *dst, u32 len)
2360 {
2361 - struct spi_message *msg = &qca->spi_msg1;
2362 - struct spi_transfer *transfer = &qca->spi_xfer1;
2363 + struct spi_message msg;
2364 + struct spi_transfer transfer;
2365 int ret;
2366
2367 - transfer->tx_buf = NULL;
2368 - transfer->rx_buf = dst;
2369 - transfer->len = len;
2370 + memset(&transfer, 0, sizeof(transfer));
2371 + spi_message_init(&msg);
2372
2373 - ret = spi_sync(qca->spi_dev, msg);
2374 + transfer.rx_buf = dst;
2375 + transfer.len = len;
2376
2377 - if (ret || (msg->actual_length != len)) {
2378 + spi_message_add_tail(&transfer, &msg);
2379 + ret = spi_sync(qca->spi_dev, &msg);
2380 +
2381 + if (ret || (msg.actual_length != len)) {
2382 qcaspi_spi_error(qca);
2383 return 0;
2384 }
2385 @@ -195,19 +205,23 @@ static int
2386 qcaspi_tx_cmd(struct qcaspi *qca, u16 cmd)
2387 {
2388 __be16 tx_data;
2389 - struct spi_message *msg = &qca->spi_msg1;
2390 - struct spi_transfer *transfer = &qca->spi_xfer1;
2391 + struct spi_message msg;
2392 + struct spi_transfer transfer;
2393 int ret;
2394
2395 + memset(&transfer, 0, sizeof(transfer));
2396 +
2397 + spi_message_init(&msg);
2398 +
2399 tx_data = cpu_to_be16(cmd);
2400 - transfer->len = sizeof(tx_data);
2401 - transfer->tx_buf = &tx_data;
2402 - transfer->rx_buf = NULL;
2403 + transfer.len = sizeof(cmd);
2404 + transfer.tx_buf = &tx_data;
2405 + spi_message_add_tail(&transfer, &msg);
2406
2407 - ret = spi_sync(qca->spi_dev, msg);
2408 + ret = spi_sync(qca->spi_dev, &msg);
2409
2410 if (!ret)
2411 - ret = msg->status;
2412 + ret = msg.status;
2413
2414 if (ret)
2415 qcaspi_spi_error(qca);
2416 @@ -836,16 +850,6 @@ qcaspi_netdev_setup(struct net_device *dev)
2417 qca = netdev_priv(dev);
2418 memset(qca, 0, sizeof(struct qcaspi));
2419
2420 - memset(&qca->spi_xfer1, 0, sizeof(struct spi_transfer));
2421 - memset(&qca->spi_xfer2, 0, sizeof(struct spi_transfer) * 2);
2422 -
2423 - spi_message_init(&qca->spi_msg1);
2424 - spi_message_add_tail(&qca->spi_xfer1, &qca->spi_msg1);
2425 -
2426 - spi_message_init(&qca->spi_msg2);
2427 - spi_message_add_tail(&qca->spi_xfer2[0], &qca->spi_msg2);
2428 - spi_message_add_tail(&qca->spi_xfer2[1], &qca->spi_msg2);
2429 -
2430 memset(&qca->txr, 0, sizeof(qca->txr));
2431 qca->txr.count = TX_RING_MAX_LEN;
2432 }
2433 diff --git a/drivers/net/ethernet/qualcomm/qca_spi.h b/drivers/net/ethernet/qualcomm/qca_spi.h
2434 index fc4beb1b32d1..fc0e98726b36 100644
2435 --- a/drivers/net/ethernet/qualcomm/qca_spi.h
2436 +++ b/drivers/net/ethernet/qualcomm/qca_spi.h
2437 @@ -83,11 +83,6 @@ struct qcaspi {
2438 struct tx_ring txr;
2439 struct qcaspi_stats stats;
2440
2441 - struct spi_message spi_msg1;
2442 - struct spi_message spi_msg2;
2443 - struct spi_transfer spi_xfer1;
2444 - struct spi_transfer spi_xfer2[2];
2445 -
2446 u8 *rx_buffer;
2447 u32 buffer_size;
2448 u8 sync;
2449 diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
2450 index 328c37e9096d..17025d46bdac 100644
2451 --- a/drivers/net/hyperv/rndis_filter.c
2452 +++ b/drivers/net/hyperv/rndis_filter.c
2453 @@ -1299,7 +1299,7 @@ out:
2454 /* setting up multiple channels failed */
2455 net_device->max_chn = 1;
2456 net_device->num_chn = 1;
2457 - return 0;
2458 + return net_device;
2459
2460 err_dev_remv:
2461 rndis_filter_device_remove(dev, net_device);
2462 diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
2463 index 33df76405b86..18b648648adb 100644
2464 --- a/drivers/net/wan/fsl_ucc_hdlc.c
2465 +++ b/drivers/net/wan/fsl_ucc_hdlc.c
2466 @@ -192,7 +192,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
2467 priv->ucc_pram_offset = qe_muram_alloc(sizeof(struct ucc_hdlc_param),
2468 ALIGNMENT_OF_UCC_HDLC_PRAM);
2469
2470 - if (priv->ucc_pram_offset < 0) {
2471 + if (IS_ERR_VALUE(priv->ucc_pram_offset)) {
2472 dev_err(priv->dev, "Can not allocate MURAM for hdlc parameter.\n");
2473 ret = -ENOMEM;
2474 goto free_tx_bd;
2475 @@ -228,14 +228,14 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
2476
2477 /* Alloc riptr, tiptr */
2478 riptr = qe_muram_alloc(32, 32);
2479 - if (riptr < 0) {
2480 + if (IS_ERR_VALUE(riptr)) {
2481 dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n");
2482 ret = -ENOMEM;
2483 goto free_tx_skbuff;
2484 }
2485
2486 tiptr = qe_muram_alloc(32, 32);
2487 - if (tiptr < 0) {
2488 + if (IS_ERR_VALUE(tiptr)) {
2489 dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n");
2490 ret = -ENOMEM;
2491 goto free_riptr;
2492 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
2493 index d5e790dd589a..d80343429de5 100644
2494 --- a/drivers/net/xen-netfront.c
2495 +++ b/drivers/net/xen-netfront.c
2496 @@ -87,8 +87,7 @@ struct netfront_cb {
2497 /* IRQ name is queue name with "-tx" or "-rx" appended */
2498 #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3)
2499
2500 -static DECLARE_WAIT_QUEUE_HEAD(module_load_q);
2501 -static DECLARE_WAIT_QUEUE_HEAD(module_unload_q);
2502 +static DECLARE_WAIT_QUEUE_HEAD(module_wq);
2503
2504 struct netfront_stats {
2505 u64 packets;
2506 @@ -1331,11 +1330,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
2507 netif_carrier_off(netdev);
2508
2509 xenbus_switch_state(dev, XenbusStateInitialising);
2510 - wait_event(module_load_q,
2511 - xenbus_read_driver_state(dev->otherend) !=
2512 - XenbusStateClosed &&
2513 - xenbus_read_driver_state(dev->otherend) !=
2514 - XenbusStateUnknown);
2515 + wait_event(module_wq,
2516 + xenbus_read_driver_state(dev->otherend) !=
2517 + XenbusStateClosed &&
2518 + xenbus_read_driver_state(dev->otherend) !=
2519 + XenbusStateUnknown);
2520 return netdev;
2521
2522 exit:
2523 @@ -1603,6 +1602,7 @@ static int xennet_init_queue(struct netfront_queue *queue)
2524 {
2525 unsigned short i;
2526 int err = 0;
2527 + char *devid;
2528
2529 spin_lock_init(&queue->tx_lock);
2530 spin_lock_init(&queue->rx_lock);
2531 @@ -1610,8 +1610,9 @@ static int xennet_init_queue(struct netfront_queue *queue)
2532 setup_timer(&queue->rx_refill_timer, rx_refill_timeout,
2533 (unsigned long)queue);
2534
2535 - snprintf(queue->name, sizeof(queue->name), "%s-q%u",
2536 - queue->info->netdev->name, queue->id);
2537 + devid = strrchr(queue->info->xbdev->nodename, '/') + 1;
2538 + snprintf(queue->name, sizeof(queue->name), "vif%s-q%u",
2539 + devid, queue->id);
2540
2541 /* Initialise tx_skbs as a free chain containing every entry. */
2542 queue->tx_skb_freelist = 0;
2543 @@ -2007,15 +2008,14 @@ static void netback_changed(struct xenbus_device *dev,
2544
2545 dev_dbg(&dev->dev, "%s\n", xenbus_strstate(backend_state));
2546
2547 + wake_up_all(&module_wq);
2548 +
2549 switch (backend_state) {
2550 case XenbusStateInitialising:
2551 case XenbusStateInitialised:
2552 case XenbusStateReconfiguring:
2553 case XenbusStateReconfigured:
2554 - break;
2555 -
2556 case XenbusStateUnknown:
2557 - wake_up_all(&module_unload_q);
2558 break;
2559
2560 case XenbusStateInitWait:
2561 @@ -2031,12 +2031,10 @@ static void netback_changed(struct xenbus_device *dev,
2562 break;
2563
2564 case XenbusStateClosed:
2565 - wake_up_all(&module_unload_q);
2566 if (dev->state == XenbusStateClosed)
2567 break;
2568 /* Missed the backend's CLOSING state -- fallthrough */
2569 case XenbusStateClosing:
2570 - wake_up_all(&module_unload_q);
2571 xenbus_frontend_closed(dev);
2572 break;
2573 }
2574 @@ -2144,14 +2142,14 @@ static int xennet_remove(struct xenbus_device *dev)
2575
2576 if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {
2577 xenbus_switch_state(dev, XenbusStateClosing);
2578 - wait_event(module_unload_q,
2579 + wait_event(module_wq,
2580 xenbus_read_driver_state(dev->otherend) ==
2581 XenbusStateClosing ||
2582 xenbus_read_driver_state(dev->otherend) ==
2583 XenbusStateUnknown);
2584
2585 xenbus_switch_state(dev, XenbusStateClosed);
2586 - wait_event(module_unload_q,
2587 + wait_event(module_wq,
2588 xenbus_read_driver_state(dev->otherend) ==
2589 XenbusStateClosed ||
2590 xenbus_read_driver_state(dev->otherend) ==
2591 diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
2592 index 48a831d58e7a..9fffe41ead50 100644
2593 --- a/drivers/nvme/host/rdma.c
2594 +++ b/drivers/nvme/host/rdma.c
2595 @@ -1728,6 +1728,8 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
2596 nvme_stop_queues(&ctrl->ctrl);
2597 blk_mq_tagset_busy_iter(&ctrl->tag_set,
2598 nvme_cancel_request, &ctrl->ctrl);
2599 + if (shutdown)
2600 + nvme_start_queues(&ctrl->ctrl);
2601 nvme_rdma_destroy_io_queues(ctrl, shutdown);
2602 }
2603
2604 diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c
2605 index 01cf1c1a841a..8de329546b82 100644
2606 --- a/drivers/parport/parport_sunbpp.c
2607 +++ b/drivers/parport/parport_sunbpp.c
2608 @@ -286,12 +286,16 @@ static int bpp_probe(struct platform_device *op)
2609
2610 ops = kmemdup(&parport_sunbpp_ops, sizeof(struct parport_operations),
2611 GFP_KERNEL);
2612 - if (!ops)
2613 + if (!ops) {
2614 + err = -ENOMEM;
2615 goto out_unmap;
2616 + }
2617
2618 dprintk(("register_port\n"));
2619 - if (!(p = parport_register_port((unsigned long)base, irq, dma, ops)))
2620 + if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) {
2621 + err = -ENOMEM;
2622 goto out_free_ops;
2623 + }
2624
2625 p->size = size;
2626 p->dev = &op->dev;
2627 diff --git a/drivers/pinctrl/pinctrl-rza1.c b/drivers/pinctrl/pinctrl-rza1.c
2628 index 04d058706b80..a865dc56a491 100644
2629 --- a/drivers/pinctrl/pinctrl-rza1.c
2630 +++ b/drivers/pinctrl/pinctrl-rza1.c
2631 @@ -878,6 +878,7 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
2632 const char *grpname;
2633 const char **fngrps;
2634 int ret, npins;
2635 + int gsel, fsel;
2636
2637 npins = rza1_dt_node_pin_count(np);
2638 if (npins < 0) {
2639 @@ -927,18 +928,19 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
2640 fngrps[0] = grpname;
2641
2642 mutex_lock(&rza1_pctl->mutex);
2643 - ret = pinctrl_generic_add_group(pctldev, grpname, grpins, npins,
2644 - NULL);
2645 - if (ret) {
2646 + gsel = pinctrl_generic_add_group(pctldev, grpname, grpins, npins,
2647 + NULL);
2648 + if (gsel < 0) {
2649 mutex_unlock(&rza1_pctl->mutex);
2650 - return ret;
2651 + return gsel;
2652 }
2653
2654 - ret = pinmux_generic_add_function(pctldev, grpname, fngrps, 1,
2655 - mux_confs);
2656 - if (ret)
2657 + fsel = pinmux_generic_add_function(pctldev, grpname, fngrps, 1,
2658 + mux_confs);
2659 + if (fsel < 0) {
2660 + ret = fsel;
2661 goto remove_group;
2662 - mutex_unlock(&rza1_pctl->mutex);
2663 + }
2664
2665 dev_info(rza1_pctl->dev, "Parsed function and group %s with %d pins\n",
2666 grpname, npins);
2667 @@ -955,15 +957,15 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
2668 (*map)->data.mux.group = np->name;
2669 (*map)->data.mux.function = np->name;
2670 *num_maps = 1;
2671 + mutex_unlock(&rza1_pctl->mutex);
2672
2673 return 0;
2674
2675 remove_function:
2676 - mutex_lock(&rza1_pctl->mutex);
2677 - pinmux_generic_remove_last_function(pctldev);
2678 + pinmux_generic_remove_function(pctldev, fsel);
2679
2680 remove_group:
2681 - pinctrl_generic_remove_last_group(pctldev);
2682 + pinctrl_generic_remove_group(pctldev, gsel);
2683 mutex_unlock(&rza1_pctl->mutex);
2684
2685 dev_info(rza1_pctl->dev, "Unable to parse function and group %s\n",
2686 diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
2687 index ff491da64dab..31632c087504 100644
2688 --- a/drivers/pinctrl/qcom/pinctrl-msm.c
2689 +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
2690 @@ -238,22 +238,30 @@ static int msm_config_group_get(struct pinctrl_dev *pctldev,
2691 /* Convert register value to pinconf value */
2692 switch (param) {
2693 case PIN_CONFIG_BIAS_DISABLE:
2694 - arg = arg == MSM_NO_PULL;
2695 + if (arg != MSM_NO_PULL)
2696 + return -EINVAL;
2697 + arg = 1;
2698 break;
2699 case PIN_CONFIG_BIAS_PULL_DOWN:
2700 - arg = arg == MSM_PULL_DOWN;
2701 + if (arg != MSM_PULL_DOWN)
2702 + return -EINVAL;
2703 + arg = 1;
2704 break;
2705 case PIN_CONFIG_BIAS_BUS_HOLD:
2706 if (pctrl->soc->pull_no_keeper)
2707 return -ENOTSUPP;
2708
2709 - arg = arg == MSM_KEEPER;
2710 + if (arg != MSM_KEEPER)
2711 + return -EINVAL;
2712 + arg = 1;
2713 break;
2714 case PIN_CONFIG_BIAS_PULL_UP:
2715 if (pctrl->soc->pull_no_keeper)
2716 arg = arg == MSM_PULL_UP_NO_KEEPER;
2717 else
2718 arg = arg == MSM_PULL_UP;
2719 + if (!arg)
2720 + return -EINVAL;
2721 break;
2722 case PIN_CONFIG_DRIVE_STRENGTH:
2723 arg = msm_regval_to_drive(arg);
2724 diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2725 index c2c0bab04257..22aaf4375fac 100644
2726 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2727 +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2728 @@ -390,31 +390,47 @@ static int pmic_gpio_config_get(struct pinctrl_dev *pctldev,
2729
2730 switch (param) {
2731 case PIN_CONFIG_DRIVE_PUSH_PULL:
2732 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_CMOS;
2733 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_CMOS)
2734 + return -EINVAL;
2735 + arg = 1;
2736 break;
2737 case PIN_CONFIG_DRIVE_OPEN_DRAIN:
2738 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS;
2739 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS)
2740 + return -EINVAL;
2741 + arg = 1;
2742 break;
2743 case PIN_CONFIG_DRIVE_OPEN_SOURCE:
2744 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS;
2745 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS)
2746 + return -EINVAL;
2747 + arg = 1;
2748 break;
2749 case PIN_CONFIG_BIAS_PULL_DOWN:
2750 - arg = pad->pullup == PMIC_GPIO_PULL_DOWN;
2751 + if (pad->pullup != PMIC_GPIO_PULL_DOWN)
2752 + return -EINVAL;
2753 + arg = 1;
2754 break;
2755 case PIN_CONFIG_BIAS_DISABLE:
2756 - arg = pad->pullup = PMIC_GPIO_PULL_DISABLE;
2757 + if (pad->pullup != PMIC_GPIO_PULL_DISABLE)
2758 + return -EINVAL;
2759 + arg = 1;
2760 break;
2761 case PIN_CONFIG_BIAS_PULL_UP:
2762 - arg = pad->pullup == PMIC_GPIO_PULL_UP_30;
2763 + if (pad->pullup != PMIC_GPIO_PULL_UP_30)
2764 + return -EINVAL;
2765 + arg = 1;
2766 break;
2767 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
2768 - arg = !pad->is_enabled;
2769 + if (pad->is_enabled)
2770 + return -EINVAL;
2771 + arg = 1;
2772 break;
2773 case PIN_CONFIG_POWER_SOURCE:
2774 arg = pad->power_source;
2775 break;
2776 case PIN_CONFIG_INPUT_ENABLE:
2777 - arg = pad->input_enabled;
2778 + if (!pad->input_enabled)
2779 + return -EINVAL;
2780 + arg = 1;
2781 break;
2782 case PIN_CONFIG_OUTPUT:
2783 arg = pad->out_value;
2784 diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
2785 index bb1dcd7fbdeb..8221e000c8c2 100644
2786 --- a/drivers/platform/x86/toshiba_acpi.c
2787 +++ b/drivers/platform/x86/toshiba_acpi.c
2788 @@ -34,6 +34,7 @@
2789 #define TOSHIBA_ACPI_VERSION "0.24"
2790 #define PROC_INTERFACE_VERSION 1
2791
2792 +#include <linux/compiler.h>
2793 #include <linux/kernel.h>
2794 #include <linux/module.h>
2795 #include <linux/moduleparam.h>
2796 @@ -1682,7 +1683,7 @@ static const struct file_operations keys_proc_fops = {
2797 .write = keys_proc_write,
2798 };
2799
2800 -static int version_proc_show(struct seq_file *m, void *v)
2801 +static int __maybe_unused version_proc_show(struct seq_file *m, void *v)
2802 {
2803 seq_printf(m, "driver: %s\n", TOSHIBA_ACPI_VERSION);
2804 seq_printf(m, "proc_interface: %d\n", PROC_INTERFACE_VERSION);
2805 diff --git a/drivers/reset/reset-imx7.c b/drivers/reset/reset-imx7.c
2806 index 4db177bc89bc..fdeac1946429 100644
2807 --- a/drivers/reset/reset-imx7.c
2808 +++ b/drivers/reset/reset-imx7.c
2809 @@ -80,7 +80,7 @@ static int imx7_reset_set(struct reset_controller_dev *rcdev,
2810 {
2811 struct imx7_src *imx7src = to_imx7_src(rcdev);
2812 const struct imx7_src_signal *signal = &imx7_src_signals[id];
2813 - unsigned int value = 0;
2814 + unsigned int value = assert ? signal->bit : 0;
2815
2816 switch (id) {
2817 case IMX7_RESET_PCIEPHY:
2818 diff --git a/drivers/rtc/rtc-bq4802.c b/drivers/rtc/rtc-bq4802.c
2819 index bd170cb3361c..5747a54cbd42 100644
2820 --- a/drivers/rtc/rtc-bq4802.c
2821 +++ b/drivers/rtc/rtc-bq4802.c
2822 @@ -164,6 +164,10 @@ static int bq4802_probe(struct platform_device *pdev)
2823 } else if (p->r->flags & IORESOURCE_MEM) {
2824 p->regs = devm_ioremap(&pdev->dev, p->r->start,
2825 resource_size(p->r));
2826 + if (!p->regs){
2827 + err = -ENOMEM;
2828 + goto out;
2829 + }
2830 p->read = bq4802_read_mem;
2831 p->write = bq4802_write_mem;
2832 } else {
2833 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
2834 index 939b5b5e97ef..0a6afd4b283d 100644
2835 --- a/drivers/s390/net/qeth_core_main.c
2836 +++ b/drivers/s390/net/qeth_core_main.c
2837 @@ -3507,13 +3507,14 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
2838 qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
2839 if (atomic_read(&queue->set_pci_flags_count))
2840 qdio_flags |= QDIO_FLAG_PCI_OUT;
2841 + atomic_add(count, &queue->used_buffers);
2842 +
2843 rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
2844 queue->queue_no, index, count);
2845 if (queue->card->options.performance_stats)
2846 queue->card->perf_stats.outbound_do_qdio_time +=
2847 qeth_get_micros() -
2848 queue->card->perf_stats.outbound_do_qdio_start_time;
2849 - atomic_add(count, &queue->used_buffers);
2850 if (rc) {
2851 queue->card->stats.tx_errors += count;
2852 /* ignore temporary SIGA errors without busy condition */
2853 diff --git a/drivers/s390/net/qeth_core_sys.c b/drivers/s390/net/qeth_core_sys.c
2854 index d1ee9e30c68b..21e91fbb2860 100644
2855 --- a/drivers/s390/net/qeth_core_sys.c
2856 +++ b/drivers/s390/net/qeth_core_sys.c
2857 @@ -423,6 +423,7 @@ static ssize_t qeth_dev_layer2_store(struct device *dev,
2858 if (card->discipline) {
2859 card->discipline->remove(card->gdev);
2860 qeth_core_free_discipline(card);
2861 + card->options.layer2 = -1;
2862 }
2863
2864 rc = qeth_core_load_discipline(card, newdis);
2865 diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c
2866 index 8660f923ace0..bb9c1c016643 100644
2867 --- a/drivers/scsi/libfc/fc_disc.c
2868 +++ b/drivers/scsi/libfc/fc_disc.c
2869 @@ -294,9 +294,11 @@ static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
2870 * discovery, reverify or log them in. Otherwise, log them out.
2871 * Skip ports which were never discovered. These are the dNS port
2872 * and ports which were created by PLOGI.
2873 + *
2874 + * We don't need to use the _rcu variant here as the rport list
2875 + * is protected by the disc mutex which is already held on entry.
2876 */
2877 - rcu_read_lock();
2878 - list_for_each_entry_rcu(rdata, &disc->rports, peers) {
2879 + list_for_each_entry(rdata, &disc->rports, peers) {
2880 if (!kref_get_unless_zero(&rdata->kref))
2881 continue;
2882 if (rdata->disc_id) {
2883 @@ -307,7 +309,6 @@ static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
2884 }
2885 kref_put(&rdata->kref, fc_rport_destroy);
2886 }
2887 - rcu_read_unlock();
2888 mutex_unlock(&disc->disc_mutex);
2889 disc->disc_callback(lport, event);
2890 mutex_lock(&disc->disc_mutex);
2891 diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
2892 index 4be864dbd41c..9eb3b625a1b1 100644
2893 --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
2894 +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
2895 @@ -442,16 +442,16 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
2896 my_workqueue_init(alsa_stream);
2897
2898 ret = bcm2835_audio_open_connection(alsa_stream);
2899 - if (ret) {
2900 - ret = -1;
2901 - goto exit;
2902 - }
2903 + if (ret)
2904 + goto free_wq;
2905 +
2906 instance = alsa_stream->instance;
2907 LOG_DBG(" instance (%p)\n", instance);
2908
2909 if (mutex_lock_interruptible(&instance->vchi_mutex)) {
2910 LOG_DBG("Interrupted whilst waiting for lock on (%d)\n", instance->num_connections);
2911 - return -EINTR;
2912 + ret = -EINTR;
2913 + goto free_wq;
2914 }
2915 vchi_service_use(instance->vchi_handle[0]);
2916
2917 @@ -474,7 +474,11 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
2918 unlock:
2919 vchi_service_release(instance->vchi_handle[0]);
2920 mutex_unlock(&instance->vchi_mutex);
2921 -exit:
2922 +
2923 +free_wq:
2924 + if (ret)
2925 + destroy_workqueue(alsa_stream->my_wq);
2926 +
2927 return ret;
2928 }
2929
2930 diff --git a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
2931 index be936b8fe317..377da037f31c 100644
2932 --- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
2933 +++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
2934 @@ -580,6 +580,7 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
2935 static void stop_streaming(struct vb2_queue *vq)
2936 {
2937 int ret;
2938 + unsigned long timeout;
2939 struct bm2835_mmal_dev *dev = vb2_get_drv_priv(vq);
2940
2941 v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, "%s: dev:%p\n",
2942 @@ -605,10 +606,10 @@ static void stop_streaming(struct vb2_queue *vq)
2943 sizeof(dev->capture.frame_count));
2944
2945 /* wait for last frame to complete */
2946 - ret = wait_for_completion_timeout(&dev->capture.frame_cmplt, HZ);
2947 - if (ret <= 0)
2948 + timeout = wait_for_completion_timeout(&dev->capture.frame_cmplt, HZ);
2949 + if (timeout == 0)
2950 v4l2_err(&dev->v4l2_dev,
2951 - "error %d waiting for frame completion\n", ret);
2952 + "timed out waiting for frame completion\n");
2953
2954 v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
2955 "disabling connection\n");
2956 diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
2957 index 4360db6d4392..b3176f42c820 100644
2958 --- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
2959 +++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
2960 @@ -834,6 +834,7 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
2961 {
2962 struct mmal_msg_context *msg_context;
2963 int ret;
2964 + unsigned long timeout;
2965
2966 /* payload size must not cause message to exceed max size */
2967 if (payload_len >
2968 @@ -872,11 +873,11 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
2969 return ret;
2970 }
2971
2972 - ret = wait_for_completion_timeout(&msg_context->u.sync.cmplt, 3 * HZ);
2973 - if (ret <= 0) {
2974 - pr_err("error %d waiting for sync completion\n", ret);
2975 - if (ret == 0)
2976 - ret = -ETIME;
2977 + timeout = wait_for_completion_timeout(&msg_context->u.sync.cmplt,
2978 + 3 * HZ);
2979 + if (timeout == 0) {
2980 + pr_err("timed out waiting for sync completion\n");
2981 + ret = -ETIME;
2982 /* todo: what happens if the message arrives after aborting */
2983 release_msg_context(msg_context);
2984 return ret;
2985 diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
2986 index ac667b47f199..7b0a3a1688e8 100644
2987 --- a/drivers/tty/serial/earlycon.c
2988 +++ b/drivers/tty/serial/earlycon.c
2989 @@ -254,7 +254,6 @@ int __init of_setup_earlycon(const struct earlycon_id *match,
2990 return -ENXIO;
2991 }
2992 port->mapbase = addr;
2993 - port->uartclk = BASE_BAUD * 16;
2994
2995 val = of_get_flat_dt_prop(node, "reg-offset", NULL);
2996 if (val)
2997 @@ -289,6 +288,10 @@ int __init of_setup_earlycon(const struct earlycon_id *match,
2998 if (val)
2999 early_console_dev.baud = be32_to_cpu(*val);
3000
3001 + val = of_get_flat_dt_prop(node, "clock-frequency", NULL);
3002 + if (val)
3003 + port->uartclk = be32_to_cpu(*val);
3004 +
3005 if (options) {
3006 early_console_dev.baud = simple_strtoul(options, NULL, 0);
3007 strlcpy(early_console_dev.options, options,
3008 diff --git a/drivers/tty/tty_baudrate.c b/drivers/tty/tty_baudrate.c
3009 index 5c33fd25676d..ebc797fc1afd 100644
3010 --- a/drivers/tty/tty_baudrate.c
3011 +++ b/drivers/tty/tty_baudrate.c
3012 @@ -156,18 +156,25 @@ void tty_termios_encode_baud_rate(struct ktermios *termios,
3013 termios->c_ospeed = obaud;
3014
3015 #ifdef BOTHER
3016 + if ((termios->c_cflag >> IBSHIFT) & CBAUD)
3017 + ibinput = 1; /* An input speed was specified */
3018 +
3019 /* If the user asked for a precise weird speed give a precise weird
3020 answer. If they asked for a Bfoo speed they may have problems
3021 digesting non-exact replies so fuzz a bit */
3022
3023 - if ((termios->c_cflag & CBAUD) == BOTHER)
3024 + if ((termios->c_cflag & CBAUD) == BOTHER) {
3025 oclose = 0;
3026 + if (!ibinput)
3027 + iclose = 0;
3028 + }
3029 if (((termios->c_cflag >> IBSHIFT) & CBAUD) == BOTHER)
3030 iclose = 0;
3031 - if ((termios->c_cflag >> IBSHIFT) & CBAUD)
3032 - ibinput = 1; /* An input speed was specified */
3033 #endif
3034 termios->c_cflag &= ~CBAUD;
3035 +#ifdef IBSHIFT
3036 + termios->c_cflag &= ~(CBAUD << IBSHIFT);
3037 +#endif
3038
3039 /*
3040 * Our goal is to find a close match to the standard baud rate
3041 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
3042 index f2f31fc16f29..feaa0d8f830a 100644
3043 --- a/drivers/usb/class/cdc-acm.c
3044 +++ b/drivers/usb/class/cdc-acm.c
3045 @@ -792,20 +792,9 @@ static int acm_tty_write(struct tty_struct *tty,
3046 }
3047
3048 if (acm->susp_count) {
3049 - if (acm->putbuffer) {
3050 - /* now to preserve order */
3051 - usb_anchor_urb(acm->putbuffer->urb, &acm->delayed);
3052 - acm->putbuffer = NULL;
3053 - }
3054 usb_anchor_urb(wb->urb, &acm->delayed);
3055 spin_unlock_irqrestore(&acm->write_lock, flags);
3056 return count;
3057 - } else {
3058 - if (acm->putbuffer) {
3059 - /* at this point there is no good way to handle errors */
3060 - acm_start_wb(acm, acm->putbuffer);
3061 - acm->putbuffer = NULL;
3062 - }
3063 }
3064
3065 stat = acm_start_wb(acm, wb);
3066 @@ -816,66 +805,6 @@ static int acm_tty_write(struct tty_struct *tty,
3067 return count;
3068 }
3069
3070 -static void acm_tty_flush_chars(struct tty_struct *tty)
3071 -{
3072 - struct acm *acm = tty->driver_data;
3073 - struct acm_wb *cur;
3074 - int err;
3075 - unsigned long flags;
3076 -
3077 - spin_lock_irqsave(&acm->write_lock, flags);
3078 -
3079 - cur = acm->putbuffer;
3080 - if (!cur) /* nothing to do */
3081 - goto out;
3082 -
3083 - acm->putbuffer = NULL;
3084 - err = usb_autopm_get_interface_async(acm->control);
3085 - if (err < 0) {
3086 - cur->use = 0;
3087 - acm->putbuffer = cur;
3088 - goto out;
3089 - }
3090 -
3091 - if (acm->susp_count)
3092 - usb_anchor_urb(cur->urb, &acm->delayed);
3093 - else
3094 - acm_start_wb(acm, cur);
3095 -out:
3096 - spin_unlock_irqrestore(&acm->write_lock, flags);
3097 - return;
3098 -}
3099 -
3100 -static int acm_tty_put_char(struct tty_struct *tty, unsigned char ch)
3101 -{
3102 - struct acm *acm = tty->driver_data;
3103 - struct acm_wb *cur;
3104 - int wbn;
3105 - unsigned long flags;
3106 -
3107 -overflow:
3108 - cur = acm->putbuffer;
3109 - if (!cur) {
3110 - spin_lock_irqsave(&acm->write_lock, flags);
3111 - wbn = acm_wb_alloc(acm);
3112 - if (wbn >= 0) {
3113 - cur = &acm->wb[wbn];
3114 - acm->putbuffer = cur;
3115 - }
3116 - spin_unlock_irqrestore(&acm->write_lock, flags);
3117 - if (!cur)
3118 - return 0;
3119 - }
3120 -
3121 - if (cur->len == acm->writesize) {
3122 - acm_tty_flush_chars(tty);
3123 - goto overflow;
3124 - }
3125 -
3126 - cur->buf[cur->len++] = ch;
3127 - return 1;
3128 -}
3129 -
3130 static int acm_tty_write_room(struct tty_struct *tty)
3131 {
3132 struct acm *acm = tty->driver_data;
3133 @@ -2000,8 +1929,6 @@ static const struct tty_operations acm_ops = {
3134 .cleanup = acm_tty_cleanup,
3135 .hangup = acm_tty_hangup,
3136 .write = acm_tty_write,
3137 - .put_char = acm_tty_put_char,
3138 - .flush_chars = acm_tty_flush_chars,
3139 .write_room = acm_tty_write_room,
3140 .ioctl = acm_tty_ioctl,
3141 .throttle = acm_tty_throttle,
3142 diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
3143 index eacc116e83da..ca06b20d7af9 100644
3144 --- a/drivers/usb/class/cdc-acm.h
3145 +++ b/drivers/usb/class/cdc-acm.h
3146 @@ -96,7 +96,6 @@ struct acm {
3147 unsigned long read_urbs_free;
3148 struct urb *read_urbs[ACM_NR];
3149 struct acm_rb read_buffers[ACM_NR];
3150 - struct acm_wb *putbuffer; /* for acm_tty_put_char() */
3151 int rx_buflimit;
3152 spinlock_t read_lock;
3153 u8 *notification_buffer; /* to reassemble fragmented notifications */
3154 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
3155 index 3e865dbf878c..a9509ecccedb 100644
3156 --- a/drivers/usb/class/cdc-wdm.c
3157 +++ b/drivers/usb/class/cdc-wdm.c
3158 @@ -457,7 +457,7 @@ static int service_outstanding_interrupt(struct wdm_device *desc)
3159
3160 set_bit(WDM_RESPONDING, &desc->flags);
3161 spin_unlock_irq(&desc->iuspin);
3162 - rv = usb_submit_urb(desc->response, GFP_KERNEL);
3163 + rv = usb_submit_urb(desc->response, GFP_ATOMIC);
3164 spin_lock_irq(&desc->iuspin);
3165 if (rv) {
3166 dev_err(&desc->intf->dev,
3167 diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
3168 index ea829ad798c0..5340d433cdf0 100644
3169 --- a/drivers/usb/core/hcd-pci.c
3170 +++ b/drivers/usb/core/hcd-pci.c
3171 @@ -528,8 +528,6 @@ static int resume_common(struct device *dev, int event)
3172 event == PM_EVENT_RESTORE);
3173 if (retval) {
3174 dev_err(dev, "PCI post-resume error %d!\n", retval);
3175 - if (hcd->shared_hcd)
3176 - usb_hc_died(hcd->shared_hcd);
3177 usb_hc_died(hcd);
3178 }
3179 }
3180 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
3181 index dd29e6ec1c43..833ddd228e3a 100644
3182 --- a/drivers/usb/core/message.c
3183 +++ b/drivers/usb/core/message.c
3184 @@ -1280,6 +1280,11 @@ void usb_enable_interface(struct usb_device *dev,
3185 * is submitted that needs that bandwidth. Some other operating systems
3186 * allocate bandwidth early, when a configuration is chosen.
3187 *
3188 + * xHCI reserves bandwidth and configures the alternate setting in
3189 + * usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting
3190 + * may be disabled. Drivers cannot rely on any particular alternate
3191 + * setting being in effect after a failure.
3192 + *
3193 * This call is synchronous, and may not be used in an interrupt context.
3194 * Also, drivers must not change altsettings while urbs are scheduled for
3195 * endpoints in that interface; all such urbs must first be completed
3196 @@ -1315,6 +1320,12 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
3197 alternate);
3198 return -EINVAL;
3199 }
3200 + /*
3201 + * usb3 hosts configure the interface in usb_hcd_alloc_bandwidth,
3202 + * including freeing dropped endpoint ring buffers.
3203 + * Make sure the interface endpoints are flushed before that
3204 + */
3205 + usb_disable_interface(dev, iface, false);
3206
3207 /* Make sure we have enough bandwidth for this alternate interface.
3208 * Remove the current alt setting and add the new alt setting.
3209 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
3210 index 99f67764765f..37a5e07b3488 100644
3211 --- a/drivers/usb/core/quirks.c
3212 +++ b/drivers/usb/core/quirks.c
3213 @@ -37,6 +37,10 @@ static const struct usb_device_id usb_quirk_list[] = {
3214 /* CBM - Flash disk */
3215 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
3216
3217 + /* WORLDE Controller KS49 or Prodipe MIDI 49C USB controller */
3218 + { USB_DEVICE(0x0218, 0x0201), .driver_info =
3219 + USB_QUIRK_CONFIG_INTF_STRINGS },
3220 +
3221 /* WORLDE easy key (easykey.25) MIDI controller */
3222 { USB_DEVICE(0x0218, 0x0401), .driver_info =
3223 USB_QUIRK_CONFIG_INTF_STRINGS },
3224 @@ -259,6 +263,9 @@ static const struct usb_device_id usb_quirk_list[] = {
3225 { USB_DEVICE(0x2040, 0x7200), .driver_info =
3226 USB_QUIRK_CONFIG_INTF_STRINGS },
3227
3228 + /* DJI CineSSD */
3229 + { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
3230 +
3231 /* INTEL VALUE SSD */
3232 { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
3233
3234 diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
3235 index 4a3227543255..5cc9fd730656 100644
3236 --- a/drivers/usb/dwc3/gadget.h
3237 +++ b/drivers/usb/dwc3/gadget.h
3238 @@ -33,7 +33,7 @@ struct dwc3;
3239 #define DWC3_DEPCFG_XFER_IN_PROGRESS_EN BIT(9)
3240 #define DWC3_DEPCFG_XFER_NOT_READY_EN BIT(10)
3241 #define DWC3_DEPCFG_FIFO_ERROR_EN BIT(11)
3242 -#define DWC3_DEPCFG_STREAM_EVENT_EN BIT(12)
3243 +#define DWC3_DEPCFG_STREAM_EVENT_EN BIT(13)
3244 #define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16)
3245 #define DWC3_DEPCFG_STREAM_CAPABLE BIT(24)
3246 #define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25)
3247 diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
3248 index f608c1f85e61..9cbb061582a7 100644
3249 --- a/drivers/usb/gadget/udc/net2280.c
3250 +++ b/drivers/usb/gadget/udc/net2280.c
3251 @@ -1549,11 +1549,14 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
3252 writel(tmp | BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
3253 } else {
3254 writel(tmp & ~BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
3255 - stop_activity(dev, dev->driver);
3256 + stop_activity(dev, NULL);
3257 }
3258
3259 spin_unlock_irqrestore(&dev->lock, flags);
3260
3261 + if (!is_on && dev->driver)
3262 + dev->driver->disconnect(&dev->gadget);
3263 +
3264 return 0;
3265 }
3266
3267 @@ -2470,8 +2473,11 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
3268 nuke(&dev->ep[i]);
3269
3270 /* report disconnect; the driver is already quiesced */
3271 - if (driver)
3272 + if (driver) {
3273 + spin_unlock(&dev->lock);
3274 driver->disconnect(&dev->gadget);
3275 + spin_lock(&dev->lock);
3276 + }
3277
3278 usb_reinit(dev);
3279 }
3280 @@ -3345,6 +3351,8 @@ next_endpoints:
3281 BIT(PCI_RETRY_ABORT_INTERRUPT))
3282
3283 static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3284 +__releases(dev->lock)
3285 +__acquires(dev->lock)
3286 {
3287 struct net2280_ep *ep;
3288 u32 tmp, num, mask, scratch;
3289 @@ -3385,12 +3393,14 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3290 if (disconnect || reset) {
3291 stop_activity(dev, dev->driver);
3292 ep0_start(dev);
3293 + spin_unlock(&dev->lock);
3294 if (reset)
3295 usb_gadget_udc_reset
3296 (&dev->gadget, dev->driver);
3297 else
3298 (dev->driver->disconnect)
3299 (&dev->gadget);
3300 + spin_lock(&dev->lock);
3301 return;
3302 }
3303 }
3304 @@ -3409,6 +3419,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3305 tmp = BIT(SUSPEND_REQUEST_CHANGE_INTERRUPT);
3306 if (stat & tmp) {
3307 writel(tmp, &dev->regs->irqstat1);
3308 + spin_unlock(&dev->lock);
3309 if (stat & BIT(SUSPEND_REQUEST_INTERRUPT)) {
3310 if (dev->driver->suspend)
3311 dev->driver->suspend(&dev->gadget);
3312 @@ -3419,6 +3430,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3313 dev->driver->resume(&dev->gadget);
3314 /* at high speed, note erratum 0133 */
3315 }
3316 + spin_lock(&dev->lock);
3317 stat &= ~tmp;
3318 }
3319
3320 diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
3321 index c12a1a6554ba..36a706f475d2 100644
3322 --- a/drivers/usb/gadget/udc/renesas_usb3.c
3323 +++ b/drivers/usb/gadget/udc/renesas_usb3.c
3324 @@ -788,12 +788,15 @@ static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
3325 switch (speed) {
3326 case USB_STA_SPEED_SS:
3327 usb3->gadget.speed = USB_SPEED_SUPER;
3328 + usb3->gadget.ep0->maxpacket = USB3_EP0_SS_MAX_PACKET_SIZE;
3329 break;
3330 case USB_STA_SPEED_HS:
3331 usb3->gadget.speed = USB_SPEED_HIGH;
3332 + usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
3333 break;
3334 case USB_STA_SPEED_FS:
3335 usb3->gadget.speed = USB_SPEED_FULL;
3336 + usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
3337 break;
3338 default:
3339 usb3->gadget.speed = USB_SPEED_UNKNOWN;
3340 @@ -2458,7 +2461,7 @@ static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
3341 /* for control pipe */
3342 usb3->gadget.ep0 = &usb3_ep->ep;
3343 usb_ep_set_maxpacket_limit(&usb3_ep->ep,
3344 - USB3_EP0_HSFS_MAX_PACKET_SIZE);
3345 + USB3_EP0_SS_MAX_PACKET_SIZE);
3346 usb3_ep->ep.caps.type_control = true;
3347 usb3_ep->ep.caps.dir_in = true;
3348 usb3_ep->ep.caps.dir_out = true;
3349 diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
3350 index c38855aed62c..65c0086e25ae 100644
3351 --- a/drivers/usb/host/u132-hcd.c
3352 +++ b/drivers/usb/host/u132-hcd.c
3353 @@ -2559,7 +2559,7 @@ static int u132_get_frame(struct usb_hcd *hcd)
3354 } else {
3355 int frame = 0;
3356 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n");
3357 - msleep(100);
3358 + mdelay(100);
3359 return frame;
3360 }
3361 }
3362 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
3363 index 6b11fd9d8efe..64ddba3f79a9 100644
3364 --- a/drivers/usb/host/xhci.c
3365 +++ b/drivers/usb/host/xhci.c
3366 @@ -47,6 +47,21 @@ static unsigned int quirks;
3367 module_param(quirks, uint, S_IRUGO);
3368 MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
3369
3370 +static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
3371 +{
3372 + struct xhci_segment *seg = ring->first_seg;
3373 +
3374 + if (!td || !td->start_seg)
3375 + return false;
3376 + do {
3377 + if (seg == td->start_seg)
3378 + return true;
3379 + seg = seg->next;
3380 + } while (seg && seg != ring->first_seg);
3381 +
3382 + return false;
3383 +}
3384 +
3385 /* TODO: copied from ehci-hcd.c - can this be refactored? */
3386 /*
3387 * xhci_handshake - spin reading hc until handshake completes or fails
3388 @@ -1511,6 +1526,21 @@ static int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
3389 goto done;
3390 }
3391
3392 + /*
3393 + * check ring is not re-allocated since URB was enqueued. If it is, then
3394 + * make sure none of the ring related pointers in this URB private data
3395 + * are touched, such as td_list, otherwise we overwrite freed data
3396 + */
3397 + if (!td_on_ring(&urb_priv->td[0], ep_ring)) {
3398 + xhci_err(xhci, "Canceled URB td not found on endpoint ring");
3399 + for (i = urb_priv->num_tds_done; i < urb_priv->num_tds; i++) {
3400 + td = &urb_priv->td[i];
3401 + if (!list_empty(&td->cancelled_td_list))
3402 + list_del_init(&td->cancelled_td_list);
3403 + }
3404 + goto err_giveback;
3405 + }
3406 +
3407 if (xhci->xhc_state & XHCI_STATE_HALTED) {
3408 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
3409 "HC halted, freeing TD manually.");
3410 diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
3411 index 8a13b2fcf3e1..03152f98108c 100644
3412 --- a/drivers/usb/misc/uss720.c
3413 +++ b/drivers/usb/misc/uss720.c
3414 @@ -382,7 +382,7 @@ static unsigned char parport_uss720_frob_control(struct parport *pp, unsigned ch
3415 mask &= 0x0f;
3416 val &= 0x0f;
3417 d = (priv->reg[1] & (~mask)) ^ val;
3418 - if (set_1284_register(pp, 2, d, GFP_KERNEL))
3419 + if (set_1284_register(pp, 2, d, GFP_ATOMIC))
3420 return 0;
3421 priv->reg[1] = d;
3422 return d & 0xf;
3423 @@ -392,7 +392,7 @@ static unsigned char parport_uss720_read_status(struct parport *pp)
3424 {
3425 unsigned char ret;
3426
3427 - if (get_1284_register(pp, 1, &ret, GFP_KERNEL))
3428 + if (get_1284_register(pp, 1, &ret, GFP_ATOMIC))
3429 return 0;
3430 return ret & 0xf8;
3431 }
3432 diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
3433 index 47763311a42e..0673f286afbd 100644
3434 --- a/drivers/usb/misc/yurex.c
3435 +++ b/drivers/usb/misc/yurex.c
3436 @@ -425,13 +425,13 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
3437 {
3438 struct usb_yurex *dev;
3439 int i, set = 0, retval = 0;
3440 - char buffer[16];
3441 + char buffer[16 + 1];
3442 char *data = buffer;
3443 unsigned long long c, c2 = 0;
3444 signed long timeout = 0;
3445 DEFINE_WAIT(wait);
3446
3447 - count = min(sizeof(buffer), count);
3448 + count = min(sizeof(buffer) - 1, count);
3449 dev = file->private_data;
3450
3451 /* verify that we actually have some data to write */
3452 @@ -450,6 +450,7 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
3453 retval = -EFAULT;
3454 goto error;
3455 }
3456 + buffer[count] = 0;
3457 memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE);
3458
3459 switch (buffer[0]) {
3460 diff --git a/drivers/usb/serial/io_ti.h b/drivers/usb/serial/io_ti.h
3461 index 1bd67b24f916..bc9ff5ebd67c 100644
3462 --- a/drivers/usb/serial/io_ti.h
3463 +++ b/drivers/usb/serial/io_ti.h
3464 @@ -178,7 +178,7 @@ struct ump_interrupt {
3465 } __attribute__((packed));
3466
3467
3468 -#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
3469 +#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 6) & 0x01)
3470 #define TIUMP_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
3471 #define TIUMP_INTERRUPT_CODE_LSR 0x03
3472 #define TIUMP_INTERRUPT_CODE_MSR 0x04
3473 diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
3474 index 8fc3854e5e69..57e9f6617084 100644
3475 --- a/drivers/usb/serial/ti_usb_3410_5052.c
3476 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
3477 @@ -1123,7 +1123,7 @@ static void ti_break(struct tty_struct *tty, int break_state)
3478
3479 static int ti_get_port_from_code(unsigned char code)
3480 {
3481 - return (code >> 4) - 3;
3482 + return (code >> 6) & 0x01;
3483 }
3484
3485 static int ti_get_func_from_code(unsigned char code)
3486 diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
3487 index 8cd2926fb1fe..344ec8631481 100644
3488 --- a/drivers/usb/storage/scsiglue.c
3489 +++ b/drivers/usb/storage/scsiglue.c
3490 @@ -392,6 +392,15 @@ static int queuecommand_lck(struct scsi_cmnd *srb,
3491 return 0;
3492 }
3493
3494 + if ((us->fflags & US_FL_NO_ATA_1X) &&
3495 + (srb->cmnd[0] == ATA_12 || srb->cmnd[0] == ATA_16)) {
3496 + memcpy(srb->sense_buffer, usb_stor_sense_invalidCDB,
3497 + sizeof(usb_stor_sense_invalidCDB));
3498 + srb->result = SAM_STAT_CHECK_CONDITION;
3499 + done(srb);
3500 + return 0;
3501 + }
3502 +
3503 /* enqueue the command and wake up the control thread */
3504 srb->scsi_done = done;
3505 us->srb = srb;
3506 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
3507 index 33a6d624c843..24de9c00d8e2 100644
3508 --- a/drivers/usb/storage/uas.c
3509 +++ b/drivers/usb/storage/uas.c
3510 @@ -842,6 +842,27 @@ static int uas_slave_configure(struct scsi_device *sdev)
3511 sdev->skip_ms_page_8 = 1;
3512 sdev->wce_default_on = 1;
3513 }
3514 +
3515 + /*
3516 + * Some disks return the total number of blocks in response
3517 + * to READ CAPACITY rather than the highest block number.
3518 + * If this device makes that mistake, tell the sd driver.
3519 + */
3520 + if (devinfo->flags & US_FL_FIX_CAPACITY)
3521 + sdev->fix_capacity = 1;
3522 +
3523 + /*
3524 + * Some devices don't like MODE SENSE with page=0x3f,
3525 + * which is the command used for checking if a device
3526 + * is write-protected. Now that we tell the sd driver
3527 + * to do a 192-byte transfer with this command the
3528 + * majority of devices work fine, but a few still can't
3529 + * handle it. The sd driver will simply assume those
3530 + * devices are write-enabled.
3531 + */
3532 + if (devinfo->flags & US_FL_NO_WP_DETECT)
3533 + sdev->skip_ms_page_3f = 1;
3534 +
3535 scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
3536 return 0;
3537 }
3538 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
3539 index d100290628bd..5e9b35a91431 100644
3540 --- a/drivers/usb/storage/unusual_devs.h
3541 +++ b/drivers/usb/storage/unusual_devs.h
3542 @@ -2307,6 +2307,13 @@ UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999,
3543 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3544 US_FL_GO_SLOW ),
3545
3546 +/* Reported-by: Tim Anderson <tsa@biglakesoftware.com> */
3547 +UNUSUAL_DEV( 0x2ca3, 0x0031, 0x0000, 0x9999,
3548 + "DJI",
3549 + "CineSSD",
3550 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3551 + US_FL_NO_ATA_1X),
3552 +
3553 /*
3554 * Reported by Frederic Marchal <frederic.marchal@wowcompany.com>
3555 * Mio Moov 330
3556 diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
3557 index 2510fa728d77..de119f11b78f 100644
3558 --- a/drivers/video/fbdev/core/modedb.c
3559 +++ b/drivers/video/fbdev/core/modedb.c
3560 @@ -644,7 +644,7 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
3561 *
3562 * Valid mode specifiers for @mode_option:
3563 *
3564 - * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m] or
3565 + * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][p][m] or
3566 * <name>[-<bpp>][@<refresh>]
3567 *
3568 * with <xres>, <yres>, <bpp> and <refresh> decimal numbers and
3569 @@ -653,10 +653,10 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
3570 * If 'M' is present after yres (and before refresh/bpp if present),
3571 * the function will compute the timings using VESA(tm) Coordinated
3572 * Video Timings (CVT). If 'R' is present after 'M', will compute with
3573 - * reduced blanking (for flatpanels). If 'i' is present, compute
3574 - * interlaced mode. If 'm' is present, add margins equal to 1.8%
3575 - * of xres rounded down to 8 pixels, and 1.8% of yres. The char
3576 - * 'i' and 'm' must be after 'M' and 'R'. Example:
3577 + * reduced blanking (for flatpanels). If 'i' or 'p' are present, compute
3578 + * interlaced or progressive mode. If 'm' is present, add margins equal
3579 + * to 1.8% of xres rounded down to 8 pixels, and 1.8% of yres. The chars
3580 + * 'i', 'p' and 'm' must be after 'M' and 'R'. Example:
3581 *
3582 * 1024x768MR-8@60m - Reduced blank with margins at 60Hz.
3583 *
3584 @@ -697,7 +697,8 @@ int fb_find_mode(struct fb_var_screeninfo *var,
3585 unsigned int namelen = strlen(name);
3586 int res_specified = 0, bpp_specified = 0, refresh_specified = 0;
3587 unsigned int xres = 0, yres = 0, bpp = default_bpp, refresh = 0;
3588 - int yres_specified = 0, cvt = 0, rb = 0, interlace = 0;
3589 + int yres_specified = 0, cvt = 0, rb = 0;
3590 + int interlace_specified = 0, interlace = 0;
3591 int margins = 0;
3592 u32 best, diff, tdiff;
3593
3594 @@ -748,9 +749,17 @@ int fb_find_mode(struct fb_var_screeninfo *var,
3595 if (!cvt)
3596 margins = 1;
3597 break;
3598 + case 'p':
3599 + if (!cvt) {
3600 + interlace = 0;
3601 + interlace_specified = 1;
3602 + }
3603 + break;
3604 case 'i':
3605 - if (!cvt)
3606 + if (!cvt) {
3607 interlace = 1;
3608 + interlace_specified = 1;
3609 + }
3610 break;
3611 default:
3612 goto done;
3613 @@ -819,11 +828,21 @@ done:
3614 if ((name_matches(db[i], name, namelen) ||
3615 (res_specified && res_matches(db[i], xres, yres))) &&
3616 !fb_try_mode(var, info, &db[i], bpp)) {
3617 - if (refresh_specified && db[i].refresh == refresh)
3618 - return 1;
3619 + const int db_interlace = (db[i].vmode &
3620 + FB_VMODE_INTERLACED ? 1 : 0);
3621 + int score = abs(db[i].refresh - refresh);
3622 +
3623 + if (interlace_specified)
3624 + score += abs(db_interlace - interlace);
3625 +
3626 + if (!interlace_specified ||
3627 + db_interlace == interlace)
3628 + if (refresh_specified &&
3629 + db[i].refresh == refresh)
3630 + return 1;
3631
3632 - if (abs(db[i].refresh - refresh) < diff) {
3633 - diff = abs(db[i].refresh - refresh);
3634 + if (score < diff) {
3635 + diff = score;
3636 best = i;
3637 }
3638 }
3639 diff --git a/drivers/video/fbdev/goldfishfb.c b/drivers/video/fbdev/goldfishfb.c
3640 index 7f6c9e6cfc6c..14a93cb21310 100644
3641 --- a/drivers/video/fbdev/goldfishfb.c
3642 +++ b/drivers/video/fbdev/goldfishfb.c
3643 @@ -301,6 +301,7 @@ static int goldfish_fb_remove(struct platform_device *pdev)
3644 dma_free_coherent(&pdev->dev, framesize, (void *)fb->fb.screen_base,
3645 fb->fb.fix.smem_start);
3646 iounmap(fb->reg_base);
3647 + kfree(fb);
3648 return 0;
3649 }
3650
3651 diff --git a/drivers/video/fbdev/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c
3652 index 3479a47a3082..0eee8a29d28d 100644
3653 --- a/drivers/video/fbdev/omap/omapfb_main.c
3654 +++ b/drivers/video/fbdev/omap/omapfb_main.c
3655 @@ -958,7 +958,7 @@ int omapfb_register_client(struct omapfb_notifier_block *omapfb_nb,
3656 {
3657 int r;
3658
3659 - if ((unsigned)omapfb_nb->plane_idx > OMAPFB_PLANE_NUM)
3660 + if ((unsigned)omapfb_nb->plane_idx >= OMAPFB_PLANE_NUM)
3661 return -EINVAL;
3662
3663 if (!notifier_inited) {
3664 diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c
3665 index c3d49e13643c..29f00eccdd01 100644
3666 --- a/drivers/video/fbdev/pxafb.c
3667 +++ b/drivers/video/fbdev/pxafb.c
3668 @@ -2130,8 +2130,8 @@ static int of_get_pxafb_display(struct device *dev, struct device_node *disp,
3669 return -EINVAL;
3670
3671 ret = -ENOMEM;
3672 - info->modes = kmalloc_array(timings->num_timings,
3673 - sizeof(info->modes[0]), GFP_KERNEL);
3674 + info->modes = kcalloc(timings->num_timings, sizeof(info->modes[0]),
3675 + GFP_KERNEL);
3676 if (!info->modes)
3677 goto out;
3678 info->num_modes = timings->num_timings;
3679 diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
3680 index badee04ef496..71b5dca95bdb 100644
3681 --- a/drivers/video/fbdev/via/viafbdev.c
3682 +++ b/drivers/video/fbdev/via/viafbdev.c
3683 @@ -19,6 +19,7 @@
3684 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
3685 */
3686
3687 +#include <linux/compiler.h>
3688 #include <linux/module.h>
3689 #include <linux/seq_file.h>
3690 #include <linux/slab.h>
3691 @@ -1468,7 +1469,7 @@ static const struct file_operations viafb_vt1636_proc_fops = {
3692
3693 #endif /* CONFIG_FB_VIA_DIRECT_PROCFS */
3694
3695 -static int viafb_sup_odev_proc_show(struct seq_file *m, void *v)
3696 +static int __maybe_unused viafb_sup_odev_proc_show(struct seq_file *m, void *v)
3697 {
3698 via_odev_to_seq(m, supported_odev_map[
3699 viaparinfo->shared->chip_info.gfx_chip_name]);
3700 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
3701 index c0e3f91e28e9..469666df91da 100644
3702 --- a/fs/binfmt_elf.c
3703 +++ b/fs/binfmt_elf.c
3704 @@ -1725,7 +1725,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
3705 const struct user_regset *regset = &view->regsets[i];
3706 do_thread_regset_writeback(t->task, regset);
3707 if (regset->core_note_type && regset->get &&
3708 - (!regset->active || regset->active(t->task, regset))) {
3709 + (!regset->active || regset->active(t->task, regset) > 0)) {
3710 int ret;
3711 size_t size = regset->n * regset->size;
3712 void *data = kmalloc(size, GFP_KERNEL);
3713 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
3714 index a27fc8791551..ef24b4527459 100644
3715 --- a/fs/cifs/readdir.c
3716 +++ b/fs/cifs/readdir.c
3717 @@ -376,8 +376,15 @@ static char *nxt_dir_entry(char *old_entry, char *end_of_smb, int level)
3718
3719 new_entry = old_entry + sizeof(FIND_FILE_STANDARD_INFO) +
3720 pfData->FileNameLength;
3721 - } else
3722 - new_entry = old_entry + le32_to_cpu(pDirInfo->NextEntryOffset);
3723 + } else {
3724 + u32 next_offset = le32_to_cpu(pDirInfo->NextEntryOffset);
3725 +
3726 + if (old_entry + next_offset < old_entry) {
3727 + cifs_dbg(VFS, "invalid offset %u\n", next_offset);
3728 + return NULL;
3729 + }
3730 + new_entry = old_entry + next_offset;
3731 + }
3732 cifs_dbg(FYI, "new entry %p old entry %p\n", new_entry, old_entry);
3733 /* validate that new_entry is not past end of SMB */
3734 if (new_entry >= end_of_smb) {
3735 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
3736 index 078ec705a5cc..69309538ffb8 100644
3737 --- a/fs/cifs/smb2pdu.c
3738 +++ b/fs/cifs/smb2pdu.c
3739 @@ -2939,33 +2939,38 @@ num_entries(char *bufstart, char *end_of_buf, char **lastentry, size_t size)
3740 int len;
3741 unsigned int entrycount = 0;
3742 unsigned int next_offset = 0;
3743 - FILE_DIRECTORY_INFO *entryptr;
3744 + char *entryptr;
3745 + FILE_DIRECTORY_INFO *dir_info;
3746
3747 if (bufstart == NULL)
3748 return 0;
3749
3750 - entryptr = (FILE_DIRECTORY_INFO *)bufstart;
3751 + entryptr = bufstart;
3752
3753 while (1) {
3754 - entryptr = (FILE_DIRECTORY_INFO *)
3755 - ((char *)entryptr + next_offset);
3756 -
3757 - if ((char *)entryptr + size > end_of_buf) {
3758 + if (entryptr + next_offset < entryptr ||
3759 + entryptr + next_offset > end_of_buf ||
3760 + entryptr + next_offset + size > end_of_buf) {
3761 cifs_dbg(VFS, "malformed search entry would overflow\n");
3762 break;
3763 }
3764
3765 - len = le32_to_cpu(entryptr->FileNameLength);
3766 - if ((char *)entryptr + len + size > end_of_buf) {
3767 + entryptr = entryptr + next_offset;
3768 + dir_info = (FILE_DIRECTORY_INFO *)entryptr;
3769 +
3770 + len = le32_to_cpu(dir_info->FileNameLength);
3771 + if (entryptr + len < entryptr ||
3772 + entryptr + len > end_of_buf ||
3773 + entryptr + len + size > end_of_buf) {
3774 cifs_dbg(VFS, "directory entry name would overflow frame end of buf %p\n",
3775 end_of_buf);
3776 break;
3777 }
3778
3779 - *lastentry = (char *)entryptr;
3780 + *lastentry = entryptr;
3781 entrycount++;
3782
3783 - next_offset = le32_to_cpu(entryptr->NextEntryOffset);
3784 + next_offset = le32_to_cpu(dir_info->NextEntryOffset);
3785 if (!next_offset)
3786 break;
3787 }
3788 diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
3789 index 56fb26127fef..d2a1a79fa324 100644
3790 --- a/fs/configfs/dir.c
3791 +++ b/fs/configfs/dir.c
3792 @@ -1777,6 +1777,16 @@ void configfs_unregister_group(struct config_group *group)
3793 struct dentry *dentry = group->cg_item.ci_dentry;
3794 struct dentry *parent = group->cg_item.ci_parent->ci_dentry;
3795
3796 + mutex_lock(&subsys->su_mutex);
3797 + if (!group->cg_item.ci_parent->ci_group) {
3798 + /*
3799 + * The parent has already been unlinked and detached
3800 + * due to a rmdir.
3801 + */
3802 + goto unlink_group;
3803 + }
3804 + mutex_unlock(&subsys->su_mutex);
3805 +
3806 inode_lock_nested(d_inode(parent), I_MUTEX_PARENT);
3807 spin_lock(&configfs_dirent_lock);
3808 configfs_detach_prep(dentry, NULL);
3809 @@ -1791,6 +1801,7 @@ void configfs_unregister_group(struct config_group *group)
3810 dput(dentry);
3811
3812 mutex_lock(&subsys->su_mutex);
3813 +unlink_group:
3814 unlink_group(group);
3815 mutex_unlock(&subsys->su_mutex);
3816 }
3817 diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
3818 index 3dd0cceefa43..bc8787718feb 100644
3819 --- a/fs/gfs2/bmap.c
3820 +++ b/fs/gfs2/bmap.c
3821 @@ -1680,7 +1680,7 @@ int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
3822 end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
3823 lblock = offset >> shift;
3824 lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
3825 - if (lblock_stop > end_of_file)
3826 + if (lblock_stop > end_of_file && ip != GFS2_I(sdp->sd_rindex))
3827 return 1;
3828
3829 size = (lblock_stop - lblock) << shift;
3830 diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
3831 index 95b2a57ded33..5fe033131f03 100644
3832 --- a/fs/gfs2/rgrp.c
3833 +++ b/fs/gfs2/rgrp.c
3834 @@ -1665,7 +1665,8 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
3835
3836 while(1) {
3837 bi = rbm_bi(rbm);
3838 - if (test_bit(GBF_FULL, &bi->bi_flags) &&
3839 + if ((ip == NULL || !gfs2_rs_active(&ip->i_res)) &&
3840 + test_bit(GBF_FULL, &bi->bi_flags) &&
3841 (state == GFS2_BLKST_FREE))
3842 goto next_bitmap;
3843
3844 diff --git a/fs/namespace.c b/fs/namespace.c
3845 index 9dc146e7b5e0..3ee3ee5819bc 100644
3846 --- a/fs/namespace.c
3847 +++ b/fs/namespace.c
3848 @@ -446,10 +446,10 @@ int mnt_want_write_file_path(struct file *file)
3849 {
3850 int ret;
3851
3852 - sb_start_write(file->f_path.mnt->mnt_sb);
3853 + sb_start_write(file_inode(file)->i_sb);
3854 ret = __mnt_want_write_file(file);
3855 if (ret)
3856 - sb_end_write(file->f_path.mnt->mnt_sb);
3857 + sb_end_write(file_inode(file)->i_sb);
3858 return ret;
3859 }
3860
3861 @@ -540,7 +540,8 @@ void __mnt_drop_write_file(struct file *file)
3862
3863 void mnt_drop_write_file_path(struct file *file)
3864 {
3865 - mnt_drop_write(file->f_path.mnt);
3866 + __mnt_drop_write_file(file);
3867 + sb_end_write(file_inode(file)->i_sb);
3868 }
3869
3870 void mnt_drop_write_file(struct file *file)
3871 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
3872 index 77c7d29fcd3b..a3b67d3b1dfb 100644
3873 --- a/fs/nfs/nfs4proc.c
3874 +++ b/fs/nfs/nfs4proc.c
3875 @@ -2533,14 +2533,18 @@ static void nfs41_check_delegation_stateid(struct nfs4_state *state)
3876 }
3877
3878 nfs4_stateid_copy(&stateid, &delegation->stateid);
3879 - if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) ||
3880 - !test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
3881 - &delegation->flags)) {
3882 + if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) {
3883 rcu_read_unlock();
3884 nfs_finish_clear_delegation_stateid(state, &stateid);
3885 return;
3886 }
3887
3888 + if (!test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
3889 + &delegation->flags)) {
3890 + rcu_read_unlock();
3891 + return;
3892 + }
3893 +
3894 cred = get_rpccred(delegation->cred);
3895 rcu_read_unlock();
3896 status = nfs41_test_and_free_expired_stateid(server, &stateid, cred);
3897 diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
3898 index 45873ed92057..e1d88bca815e 100644
3899 --- a/fs/nfs/nfs4state.c
3900 +++ b/fs/nfs/nfs4state.c
3901 @@ -1354,6 +1354,8 @@ int nfs4_schedule_stateid_recovery(const struct nfs_server *server, struct nfs4_
3902
3903 if (!nfs4_state_mark_reclaim_nograce(clp, state))
3904 return -EBADF;
3905 + nfs_inode_find_delegation_state_and_recover(state->inode,
3906 + &state->stateid);
3907 dprintk("%s: scheduling stateid recovery for server %s\n", __func__,
3908 clp->cl_hostname);
3909 nfs4_schedule_state_manager(clp);
3910 diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
3911 index e11672aa4575..ecdb3baa1283 100644
3912 --- a/fs/pstore/ram_core.c
3913 +++ b/fs/pstore/ram_core.c
3914 @@ -421,7 +421,12 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size,
3915 vaddr = vmap(pages, page_count, VM_MAP, prot);
3916 kfree(pages);
3917
3918 - return vaddr;
3919 + /*
3920 + * Since vmap() uses page granularity, we must add the offset
3921 + * into the page here, to get the byte granularity address
3922 + * into the mapping to represent the actual "start" location.
3923 + */
3924 + return vaddr + offset_in_page(start);
3925 }
3926
3927 static void *persistent_ram_iomap(phys_addr_t start, size_t size,
3928 @@ -440,6 +445,11 @@ static void *persistent_ram_iomap(phys_addr_t start, size_t size,
3929 else
3930 va = ioremap_wc(start, size);
3931
3932 + /*
3933 + * Since request_mem_region() and ioremap() are byte-granularity
3934 + * there is no need handle anything special like we do when the
3935 + * vmap() case in persistent_ram_vmap() above.
3936 + */
3937 return va;
3938 }
3939
3940 @@ -460,7 +470,7 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
3941 return -ENOMEM;
3942 }
3943
3944 - prz->buffer = prz->vaddr + offset_in_page(start);
3945 + prz->buffer = prz->vaddr;
3946 prz->buffer_size = size - sizeof(struct persistent_ram_buffer);
3947
3948 return 0;
3949 @@ -507,7 +517,8 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
3950
3951 if (prz->vaddr) {
3952 if (pfn_valid(prz->paddr >> PAGE_SHIFT)) {
3953 - vunmap(prz->vaddr);
3954 + /* We must vunmap() at page-granularity. */
3955 + vunmap(prz->vaddr - offset_in_page(prz->paddr));
3956 } else {
3957 iounmap(prz->vaddr);
3958 release_mem_region(prz->paddr, prz->size);
3959 diff --git a/include/linux/crypto.h b/include/linux/crypto.h
3960 index cc36484d29e1..de96913306cb 100644
3961 --- a/include/linux/crypto.h
3962 +++ b/include/linux/crypto.h
3963 @@ -111,6 +111,11 @@
3964 */
3965 #define CRYPTO_ALG_OPTIONAL_KEY 0x00004000
3966
3967 +/*
3968 + * Don't trigger module loading
3969 + */
3970 +#define CRYPTO_NOLOAD 0x00008000
3971 +
3972 /*
3973 * Transform masks and values (for crt_flags).
3974 */
3975 diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
3976 index f2f9e957bf1b..c4d19e77fea8 100644
3977 --- a/include/linux/mlx5/driver.h
3978 +++ b/include/linux/mlx5/driver.h
3979 @@ -950,7 +950,7 @@ int mlx5_cmd_free_uar(struct mlx5_core_dev *dev, u32 uarn);
3980 void mlx5_health_cleanup(struct mlx5_core_dev *dev);
3981 int mlx5_health_init(struct mlx5_core_dev *dev);
3982 void mlx5_start_health_poll(struct mlx5_core_dev *dev);
3983 -void mlx5_stop_health_poll(struct mlx5_core_dev *dev);
3984 +void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health);
3985 void mlx5_drain_health_wq(struct mlx5_core_dev *dev);
3986 void mlx5_trigger_health_work(struct mlx5_core_dev *dev);
3987 void mlx5_drain_health_recovery(struct mlx5_core_dev *dev);
3988 diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
3989 index 9eb8b3511636..4a98f6e314a9 100644
3990 --- a/kernel/audit_watch.c
3991 +++ b/kernel/audit_watch.c
3992 @@ -419,6 +419,13 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
3993 struct path parent_path;
3994 int h, ret = 0;
3995
3996 + /*
3997 + * When we will be calling audit_add_to_parent, krule->watch might have
3998 + * been updated and watch might have been freed.
3999 + * So we need to keep a reference of watch.
4000 + */
4001 + audit_get_watch(watch);
4002 +
4003 mutex_unlock(&audit_filter_mutex);
4004
4005 /* Avoid calling path_lookup under audit_filter_mutex. */
4006 @@ -427,8 +434,10 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
4007 /* caller expects mutex locked */
4008 mutex_lock(&audit_filter_mutex);
4009
4010 - if (ret)
4011 + if (ret) {
4012 + audit_put_watch(watch);
4013 return ret;
4014 + }
4015
4016 /* either find an old parent or attach a new one */
4017 parent = audit_find_parent(d_backing_inode(parent_path.dentry));
4018 @@ -446,6 +455,7 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
4019 *list = &audit_inode_hash[h];
4020 error:
4021 path_put(&parent_path);
4022 + audit_put_watch(watch);
4023 return ret;
4024 }
4025
4026 diff --git a/kernel/events/core.c b/kernel/events/core.c
4027 index 7c394ddf1ce6..812ebf1cbb87 100644
4028 --- a/kernel/events/core.c
4029 +++ b/kernel/events/core.c
4030 @@ -5700,6 +5700,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
4031 unsigned long sp;
4032 unsigned int rem;
4033 u64 dyn_size;
4034 + mm_segment_t fs;
4035
4036 /*
4037 * We dump:
4038 @@ -5717,7 +5718,10 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
4039
4040 /* Data. */
4041 sp = perf_user_stack_pointer(regs);
4042 + fs = get_fs();
4043 + set_fs(USER_DS);
4044 rem = __output_copy_user(handle, (void *) sp, dump_size);
4045 + set_fs(fs);
4046 dyn_size = dump_size - rem;
4047
4048 perf_output_skip(handle, rem);
4049 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
4050 index 0cc7098c6dfd..a5e20ceb0b5a 100644
4051 --- a/kernel/sched/fair.c
4052 +++ b/kernel/sched/fair.c
4053 @@ -757,11 +757,12 @@ static void attach_entity_cfs_rq(struct sched_entity *se);
4054 * To solve this problem, we also cap the util_avg of successive tasks to
4055 * only 1/2 of the left utilization budget:
4056 *
4057 - * util_avg_cap = (1024 - cfs_rq->avg.util_avg) / 2^n
4058 + * util_avg_cap = (cpu_scale - cfs_rq->avg.util_avg) / 2^n
4059 *
4060 - * where n denotes the nth task.
4061 + * where n denotes the nth task and cpu_scale the CPU capacity.
4062 *
4063 - * For example, a simplest series from the beginning would be like:
4064 + * For example, for a CPU with 1024 of capacity, a simplest series from
4065 + * the beginning would be like:
4066 *
4067 * task util_avg: 512, 256, 128, 64, 32, 16, 8, ...
4068 * cfs_rq util_avg: 512, 768, 896, 960, 992, 1008, 1016, ...
4069 @@ -773,7 +774,8 @@ void post_init_entity_util_avg(struct sched_entity *se)
4070 {
4071 struct cfs_rq *cfs_rq = cfs_rq_of(se);
4072 struct sched_avg *sa = &se->avg;
4073 - long cap = (long)(SCHED_CAPACITY_SCALE - cfs_rq->avg.util_avg) / 2;
4074 + long cpu_scale = arch_scale_cpu_capacity(NULL, cpu_of(rq_of(cfs_rq)));
4075 + long cap = (long)(cpu_scale - cfs_rq->avg.util_avg) / 2;
4076
4077 if (cap > 0) {
4078 if (cfs_rq->avg.util_avg != 0) {
4079 diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
4080 index 929ecb7d6b78..e29608464382 100644
4081 --- a/kernel/sched/wait.c
4082 +++ b/kernel/sched/wait.c
4083 @@ -395,35 +395,36 @@ static inline bool is_kthread_should_stop(void)
4084 * if (condition)
4085 * break;
4086 *
4087 - * p->state = mode; condition = true;
4088 - * smp_mb(); // A smp_wmb(); // C
4089 - * if (!wq_entry->flags & WQ_FLAG_WOKEN) wq_entry->flags |= WQ_FLAG_WOKEN;
4090 - * schedule() try_to_wake_up();
4091 - * p->state = TASK_RUNNING; ~~~~~~~~~~~~~~~~~~
4092 - * wq_entry->flags &= ~WQ_FLAG_WOKEN; condition = true;
4093 - * smp_mb() // B smp_wmb(); // C
4094 - * wq_entry->flags |= WQ_FLAG_WOKEN;
4095 - * }
4096 - * remove_wait_queue(&wq_head, &wait);
4097 + * // in wait_woken() // in woken_wake_function()
4098 *
4099 + * p->state = mode; wq_entry->flags |= WQ_FLAG_WOKEN;
4100 + * smp_mb(); // A try_to_wake_up():
4101 + * if (!(wq_entry->flags & WQ_FLAG_WOKEN)) <full barrier>
4102 + * schedule() if (p->state & mode)
4103 + * p->state = TASK_RUNNING; p->state = TASK_RUNNING;
4104 + * wq_entry->flags &= ~WQ_FLAG_WOKEN; ~~~~~~~~~~~~~~~~~~
4105 + * smp_mb(); // B condition = true;
4106 + * } smp_mb(); // C
4107 + * remove_wait_queue(&wq_head, &wait); wq_entry->flags |= WQ_FLAG_WOKEN;
4108 */
4109 long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout)
4110 {
4111 - set_current_state(mode); /* A */
4112 /*
4113 - * The above implies an smp_mb(), which matches with the smp_wmb() from
4114 - * woken_wake_function() such that if we observe WQ_FLAG_WOKEN we must
4115 - * also observe all state before the wakeup.
4116 + * The below executes an smp_mb(), which matches with the full barrier
4117 + * executed by the try_to_wake_up() in woken_wake_function() such that
4118 + * either we see the store to wq_entry->flags in woken_wake_function()
4119 + * or woken_wake_function() sees our store to current->state.
4120 */
4121 + set_current_state(mode); /* A */
4122 if (!(wq_entry->flags & WQ_FLAG_WOKEN) && !is_kthread_should_stop())
4123 timeout = schedule_timeout(timeout);
4124 __set_current_state(TASK_RUNNING);
4125
4126 /*
4127 - * The below implies an smp_mb(), it too pairs with the smp_wmb() from
4128 - * woken_wake_function() such that we must either observe the wait
4129 - * condition being true _OR_ WQ_FLAG_WOKEN such that we will not miss
4130 - * an event.
4131 + * The below executes an smp_mb(), which matches with the smp_mb() (C)
4132 + * in woken_wake_function() such that either we see the wait condition
4133 + * being true or the store to wq_entry->flags in woken_wake_function()
4134 + * follows ours in the coherence order.
4135 */
4136 smp_store_mb(wq_entry->flags, wq_entry->flags & ~WQ_FLAG_WOKEN); /* B */
4137
4138 @@ -433,14 +434,8 @@ EXPORT_SYMBOL(wait_woken);
4139
4140 int woken_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int sync, void *key)
4141 {
4142 - /*
4143 - * Although this function is called under waitqueue lock, LOCK
4144 - * doesn't imply write barrier and the users expects write
4145 - * barrier semantics on wakeup functions. The following
4146 - * smp_wmb() is equivalent to smp_wmb() in try_to_wake_up()
4147 - * and is paired with smp_store_mb() in wait_woken().
4148 - */
4149 - smp_wmb(); /* C */
4150 + /* Pairs with the smp_store_mb() in wait_woken(). */
4151 + smp_mb(); /* C */
4152 wq_entry->flags |= WQ_FLAG_WOKEN;
4153
4154 return default_wake_function(wq_entry, mode, sync, key);
4155 diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
4156 index 91e3ba280706..583951e82cee 100644
4157 --- a/net/bluetooth/af_bluetooth.c
4158 +++ b/net/bluetooth/af_bluetooth.c
4159 @@ -159,7 +159,7 @@ void bt_accept_enqueue(struct sock *parent, struct sock *sk)
4160 BT_DBG("parent %p, sk %p", parent, sk);
4161
4162 sock_hold(sk);
4163 - lock_sock(sk);
4164 + lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
4165 list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
4166 bt_sk(sk)->parent = parent;
4167 release_sock(sk);
4168 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
4169 index 168a3e8883d4..9f80b947f53b 100644
4170 --- a/net/core/skbuff.c
4171 +++ b/net/core/skbuff.c
4172 @@ -937,9 +937,6 @@ struct ubuf_info *sock_zerocopy_alloc(struct sock *sk, size_t size)
4173
4174 WARN_ON_ONCE(!in_task());
4175
4176 - if (!sock_flag(sk, SOCK_ZEROCOPY))
4177 - return NULL;
4178 -
4179 skb = sock_omalloc(sk, 0, GFP_KERNEL);
4180 if (!skb)
4181 return NULL;
4182 diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
4183 index 2459e9cc22a6..dd3bcf22fe8b 100644
4184 --- a/net/ipv4/ip_gre.c
4185 +++ b/net/ipv4/ip_gre.c
4186 @@ -177,6 +177,8 @@ static void ipgre_err(struct sk_buff *skb, u32 info,
4187
4188 if (tpi->proto == htons(ETH_P_TEB))
4189 itn = net_generic(net, gre_tap_net_id);
4190 + else if (tpi->proto == htons(ETH_P_ERSPAN))
4191 + itn = net_generic(net, erspan_net_id);
4192 else
4193 itn = net_generic(net, ipgre_net_id);
4194
4195 @@ -320,6 +322,8 @@ static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi,
4196 ip_tunnel_rcv(tunnel, skb, tpi, tun_dst, log_ecn_error);
4197 return PACKET_RCVD;
4198 }
4199 + return PACKET_REJECT;
4200 +
4201 drop:
4202 kfree_skb(skb);
4203 return PACKET_RCVD;
4204 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
4205 index 7462ec7587ce..f9c985460faa 100644
4206 --- a/net/ipv4/tcp.c
4207 +++ b/net/ipv4/tcp.c
4208 @@ -1177,7 +1177,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
4209
4210 flags = msg->msg_flags;
4211
4212 - if (flags & MSG_ZEROCOPY && size) {
4213 + if (flags & MSG_ZEROCOPY && size && sock_flag(sk, SOCK_ZEROCOPY)) {
4214 if (sk->sk_state != TCP_ESTABLISHED) {
4215 err = -EINVAL;
4216 goto out_err;
4217 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
4218 index 60efd326014b..30204bc2fc48 100644
4219 --- a/net/ipv6/route.c
4220 +++ b/net/ipv6/route.c
4221 @@ -3239,11 +3239,16 @@ static int ip6_route_multipath_add(struct fib6_config *cfg,
4222
4223 err_nh = NULL;
4224 list_for_each_entry(nh, &rt6_nh_list, next) {
4225 - rt_last = nh->rt6_info;
4226 err = __ip6_ins_rt(nh->rt6_info, info, &nh->mxc, extack);
4227 - /* save reference to first route for notification */
4228 - if (!rt_notif && !err)
4229 - rt_notif = nh->rt6_info;
4230 +
4231 + if (!err) {
4232 + /* save reference to last route successfully inserted */
4233 + rt_last = nh->rt6_info;
4234 +
4235 + /* save reference to first route for notification */
4236 + if (!rt_notif)
4237 + rt_notif = nh->rt6_info;
4238 + }
4239
4240 /* nh->rt6_info is used or freed at this point, reset to NULL*/
4241 nh->rt6_info = NULL;
4242 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
4243 index 288640471c2f..b456b882a6ea 100644
4244 --- a/net/mac80211/cfg.c
4245 +++ b/net/mac80211/cfg.c
4246 @@ -494,7 +494,7 @@ static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
4247 goto out_unlock;
4248 }
4249
4250 - ieee80211_key_free(key, true);
4251 + ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION);
4252
4253 ret = 0;
4254 out_unlock:
4255 diff --git a/net/mac80211/key.c b/net/mac80211/key.c
4256 index 938049395f90..fa10c6142244 100644
4257 --- a/net/mac80211/key.c
4258 +++ b/net/mac80211/key.c
4259 @@ -649,11 +649,15 @@ int ieee80211_key_link(struct ieee80211_key *key,
4260 {
4261 struct ieee80211_local *local = sdata->local;
4262 struct ieee80211_key *old_key;
4263 - int idx, ret;
4264 - bool pairwise;
4265 -
4266 - pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
4267 - idx = key->conf.keyidx;
4268 + int idx = key->conf.keyidx;
4269 + bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
4270 + /*
4271 + * We want to delay tailroom updates only for station - in that
4272 + * case it helps roaming speed, but in other cases it hurts and
4273 + * can cause warnings to appear.
4274 + */
4275 + bool delay_tailroom = sdata->vif.type == NL80211_IFTYPE_STATION;
4276 + int ret;
4277
4278 mutex_lock(&sdata->local->key_mtx);
4279
4280 @@ -681,14 +685,14 @@ int ieee80211_key_link(struct ieee80211_key *key,
4281 increment_tailroom_need_count(sdata);
4282
4283 ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
4284 - ieee80211_key_destroy(old_key, true);
4285 + ieee80211_key_destroy(old_key, delay_tailroom);
4286
4287 ieee80211_debugfs_key_add(key);
4288
4289 if (!local->wowlan) {
4290 ret = ieee80211_key_enable_hw_accel(key);
4291 if (ret)
4292 - ieee80211_key_free(key, true);
4293 + ieee80211_key_free(key, delay_tailroom);
4294 } else {
4295 ret = 0;
4296 }
4297 @@ -923,7 +927,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
4298 ieee80211_key_replace(key->sdata, key->sta,
4299 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
4300 key, NULL);
4301 - __ieee80211_key_destroy(key, true);
4302 + __ieee80211_key_destroy(key, key->sdata->vif.type ==
4303 + NL80211_IFTYPE_STATION);
4304 }
4305
4306 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
4307 @@ -933,7 +938,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
4308 ieee80211_key_replace(key->sdata, key->sta,
4309 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
4310 key, NULL);
4311 - __ieee80211_key_destroy(key, true);
4312 + __ieee80211_key_destroy(key, key->sdata->vif.type ==
4313 + NL80211_IFTYPE_STATION);
4314 }
4315
4316 mutex_unlock(&local->key_mtx);
4317 diff --git a/net/rds/bind.c b/net/rds/bind.c
4318 index 5aa3a64aa4f0..48257d3a4201 100644
4319 --- a/net/rds/bind.c
4320 +++ b/net/rds/bind.c
4321 @@ -60,11 +60,13 @@ struct rds_sock *rds_find_bound(__be32 addr, __be16 port)
4322 u64 key = ((u64)addr << 32) | port;
4323 struct rds_sock *rs;
4324
4325 - rs = rhashtable_lookup_fast(&bind_hash_table, &key, ht_parms);
4326 + rcu_read_lock();
4327 + rs = rhashtable_lookup(&bind_hash_table, &key, ht_parms);
4328 if (rs && !sock_flag(rds_rs_to_sk(rs), SOCK_DEAD))
4329 rds_sock_addref(rs);
4330 else
4331 rs = NULL;
4332 + rcu_read_unlock();
4333
4334 rdsdebug("returning rs %p for %pI4:%u\n", rs, &addr,
4335 ntohs(port));
4336 @@ -157,6 +159,7 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
4337 goto out;
4338 }
4339
4340 + sock_set_flag(sk, SOCK_RCU_FREE);
4341 ret = rds_add_bound(rs, sin->sin_addr.s_addr, &sin->sin_port);
4342 if (ret)
4343 goto out;
4344 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
4345 index fb79caf56d0e..b81aa6d7dc45 100644
4346 --- a/net/tls/tls_sw.c
4347 +++ b/net/tls/tls_sw.c
4348 @@ -170,6 +170,9 @@ static int alloc_encrypted_sg(struct sock *sk, int len)
4349 rc = alloc_sg(sk, len, ctx->sg_encrypted_data,
4350 &ctx->sg_encrypted_num_elem, &ctx->sg_encrypted_size, 0);
4351
4352 + if (rc == -ENOSPC)
4353 + ctx->sg_encrypted_num_elem = ARRAY_SIZE(ctx->sg_encrypted_data);
4354 +
4355 return rc;
4356 }
4357
4358 @@ -183,6 +186,9 @@ static int alloc_plaintext_sg(struct sock *sk, int len)
4359 &ctx->sg_plaintext_num_elem, &ctx->sg_plaintext_size,
4360 tls_ctx->pending_open_record_frags);
4361
4362 + if (rc == -ENOSPC)
4363 + ctx->sg_plaintext_num_elem = ARRAY_SIZE(ctx->sg_plaintext_data);
4364 +
4365 return rc;
4366 }
4367
4368 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
4369 index a6c0027cadb5..2fb7a78308e1 100644
4370 --- a/net/xfrm/xfrm_policy.c
4371 +++ b/net/xfrm/xfrm_policy.c
4372 @@ -1831,7 +1831,10 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
4373 /* Try to instantiate a bundle */
4374 err = xfrm_tmpl_resolve(pols, num_pols, fl, xfrm, family);
4375 if (err <= 0) {
4376 - if (err != 0 && err != -EAGAIN)
4377 + if (err == 0)
4378 + return NULL;
4379 +
4380 + if (err != -EAGAIN)
4381 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR);
4382 return ERR_PTR(err);
4383 }
4384 diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
4385 index fcbbecf92395..a0ad87e869f9 100644
4386 --- a/scripts/Kbuild.include
4387 +++ b/scripts/Kbuild.include
4388 @@ -403,3 +403,6 @@ endif
4389 endef
4390 #
4391 ###############################################################################
4392 +
4393 +# delete partially updated (i.e. corrupted) files on error
4394 +.DELETE_ON_ERROR:
4395 diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
4396 index 1d32cd20009a..ee9c3de5065a 100644
4397 --- a/security/integrity/evm/evm_crypto.c
4398 +++ b/security/integrity/evm/evm_crypto.c
4399 @@ -94,7 +94,8 @@ static struct shash_desc *init_desc(char type)
4400 mutex_lock(&mutex);
4401 if (*tfm)
4402 goto out;
4403 - *tfm = crypto_alloc_shash(algo, 0, CRYPTO_ALG_ASYNC);
4404 + *tfm = crypto_alloc_shash(algo, 0,
4405 + CRYPTO_ALG_ASYNC | CRYPTO_NOLOAD);
4406 if (IS_ERR(*tfm)) {
4407 rc = PTR_ERR(*tfm);
4408 pr_err("Can not allocate %s (reason: %ld)\n", algo, rc);
4409 diff --git a/security/security.c b/security/security.c
4410 index 4bf0f571b4ef..95a1a0f52880 100644
4411 --- a/security/security.c
4412 +++ b/security/security.c
4413 @@ -111,6 +111,8 @@ static int lsm_append(char *new, char **result)
4414
4415 if (*result == NULL) {
4416 *result = kstrdup(new, GFP_KERNEL);
4417 + if (*result == NULL)
4418 + return -ENOMEM;
4419 } else {
4420 /* Check if it is the last registered name */
4421 if (match_last_lsm(*result, new))
4422 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
4423 index fdf01bfd1b07..c8fd5c10b7c6 100644
4424 --- a/security/smack/smack_lsm.c
4425 +++ b/security/smack/smack_lsm.c
4426 @@ -3960,15 +3960,19 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
4427 struct smack_known *skp = NULL;
4428 int rc = 0;
4429 struct smk_audit_info ad;
4430 + u16 family = sk->sk_family;
4431 #ifdef CONFIG_AUDIT
4432 struct lsm_network_audit net;
4433 #endif
4434 #if IS_ENABLED(CONFIG_IPV6)
4435 struct sockaddr_in6 sadd;
4436 int proto;
4437 +
4438 + if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
4439 + family = PF_INET;
4440 #endif /* CONFIG_IPV6 */
4441
4442 - switch (sk->sk_family) {
4443 + switch (family) {
4444 case PF_INET:
4445 #ifdef CONFIG_SECURITY_SMACK_NETFILTER
4446 /*
4447 @@ -3986,7 +3990,7 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
4448 */
4449 netlbl_secattr_init(&secattr);
4450
4451 - rc = netlbl_skbuff_getattr(skb, sk->sk_family, &secattr);
4452 + rc = netlbl_skbuff_getattr(skb, family, &secattr);
4453 if (rc == 0)
4454 skp = smack_from_secattr(&secattr, ssp);
4455 else
4456 @@ -3999,7 +4003,7 @@ access_check:
4457 #endif
4458 #ifdef CONFIG_AUDIT
4459 smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
4460 - ad.a.u.net->family = sk->sk_family;
4461 + ad.a.u.net->family = family;
4462 ad.a.u.net->netif = skb->skb_iif;
4463 ipv4_skb_to_auditdata(skb, &ad.a, NULL);
4464 #endif
4465 @@ -4013,7 +4017,7 @@ access_check:
4466 rc = smk_bu_note("IPv4 delivery", skp, ssp->smk_in,
4467 MAY_WRITE, rc);
4468 if (rc != 0)
4469 - netlbl_skbuff_err(skb, sk->sk_family, rc, 0);
4470 + netlbl_skbuff_err(skb, family, rc, 0);
4471 break;
4472 #if IS_ENABLED(CONFIG_IPV6)
4473 case PF_INET6:
4474 @@ -4029,7 +4033,7 @@ access_check:
4475 skp = smack_net_ambient;
4476 #ifdef CONFIG_AUDIT
4477 smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
4478 - ad.a.u.net->family = sk->sk_family;
4479 + ad.a.u.net->family = family;
4480 ad.a.u.net->netif = skb->skb_iif;
4481 ipv6_skb_to_auditdata(skb, &ad.a, NULL);
4482 #endif /* CONFIG_AUDIT */
4483 diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
4484 index faa67861cbc1..729a85a6211d 100644
4485 --- a/sound/core/pcm_lib.c
4486 +++ b/sound/core/pcm_lib.c
4487 @@ -629,27 +629,33 @@ EXPORT_SYMBOL(snd_interval_refine);
4488
4489 static int snd_interval_refine_first(struct snd_interval *i)
4490 {
4491 + const unsigned int last_max = i->max;
4492 +
4493 if (snd_BUG_ON(snd_interval_empty(i)))
4494 return -EINVAL;
4495 if (snd_interval_single(i))
4496 return 0;
4497 i->max = i->min;
4498 - i->openmax = i->openmin;
4499 - if (i->openmax)
4500 + if (i->openmin)
4501 i->max++;
4502 + /* only exclude max value if also excluded before refine */
4503 + i->openmax = (i->openmax && i->max >= last_max);
4504 return 1;
4505 }
4506
4507 static int snd_interval_refine_last(struct snd_interval *i)
4508 {
4509 + const unsigned int last_min = i->min;
4510 +
4511 if (snd_BUG_ON(snd_interval_empty(i)))
4512 return -EINVAL;
4513 if (snd_interval_single(i))
4514 return 0;
4515 i->min = i->max;
4516 - i->openmin = i->openmax;
4517 - if (i->openmin)
4518 + if (i->openmax)
4519 i->min--;
4520 + /* only exclude min value if also excluded before refine */
4521 + i->openmin = (i->openmin && i->min <= last_min);
4522 return 1;
4523 }
4524
4525 diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c
4526 index 45e561c425bf..a3cf837c0ffd 100644
4527 --- a/sound/isa/msnd/msnd_pinnacle.c
4528 +++ b/sound/isa/msnd/msnd_pinnacle.c
4529 @@ -82,10 +82,10 @@
4530
4531 static void set_default_audio_parameters(struct snd_msnd *chip)
4532 {
4533 - chip->play_sample_size = DEFSAMPLESIZE;
4534 + chip->play_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
4535 chip->play_sample_rate = DEFSAMPLERATE;
4536 chip->play_channels = DEFCHANNELS;
4537 - chip->capture_sample_size = DEFSAMPLESIZE;
4538 + chip->capture_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
4539 chip->capture_sample_rate = DEFSAMPLERATE;
4540 chip->capture_channels = DEFCHANNELS;
4541 }
4542 diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
4543 index e52e68b56238..1bfc8db1826a 100644
4544 --- a/sound/soc/codecs/rt5514.c
4545 +++ b/sound/soc/codecs/rt5514.c
4546 @@ -64,8 +64,8 @@ static const struct reg_sequence rt5514_patch[] = {
4547 {RT5514_ANA_CTRL_LDO10, 0x00028604},
4548 {RT5514_ANA_CTRL_ADCFED, 0x00000800},
4549 {RT5514_ASRC_IN_CTRL1, 0x00000003},
4550 - {RT5514_DOWNFILTER0_CTRL3, 0x10000362},
4551 - {RT5514_DOWNFILTER1_CTRL3, 0x10000362},
4552 + {RT5514_DOWNFILTER0_CTRL3, 0x10000352},
4553 + {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
4554 };
4555
4556 static const struct reg_default rt5514_reg[] = {
4557 @@ -92,10 +92,10 @@ static const struct reg_default rt5514_reg[] = {
4558 {RT5514_ASRC_IN_CTRL1, 0x00000003},
4559 {RT5514_DOWNFILTER0_CTRL1, 0x00020c2f},
4560 {RT5514_DOWNFILTER0_CTRL2, 0x00020c2f},
4561 - {RT5514_DOWNFILTER0_CTRL3, 0x10000362},
4562 + {RT5514_DOWNFILTER0_CTRL3, 0x10000352},
4563 {RT5514_DOWNFILTER1_CTRL1, 0x00020c2f},
4564 {RT5514_DOWNFILTER1_CTRL2, 0x00020c2f},
4565 - {RT5514_DOWNFILTER1_CTRL3, 0x10000362},
4566 + {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
4567 {RT5514_ANA_CTRL_LDO10, 0x00028604},
4568 {RT5514_ANA_CTRL_LDO18_16, 0x02000345},
4569 {RT5514_ANA_CTRL_ADC12, 0x0000a2a8},
4570 diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
4571 index f058f2bdd519..33b4d14af2b3 100644
4572 --- a/sound/soc/samsung/i2s.c
4573 +++ b/sound/soc/samsung/i2s.c
4574 @@ -552,8 +552,11 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
4575 }
4576
4577 ret = clk_prepare_enable(i2s->op_clk);
4578 - if (ret)
4579 + if (ret) {
4580 + clk_put(i2s->op_clk);
4581 + i2s->op_clk = NULL;
4582 goto err;
4583 + }
4584 i2s->rclk_srcrate = clk_get_rate(i2s->op_clk);
4585
4586 /* Over-ride the other's */
4587 diff --git a/sound/soc/samsung/tm2_wm5110.c b/sound/soc/samsung/tm2_wm5110.c
4588 index 68698f3d72f9..52e2fbe446d1 100644
4589 --- a/sound/soc/samsung/tm2_wm5110.c
4590 +++ b/sound/soc/samsung/tm2_wm5110.c
4591 @@ -436,8 +436,7 @@ static int tm2_probe(struct platform_device *pdev)
4592 snd_soc_card_set_drvdata(card, priv);
4593 card->dev = dev;
4594
4595 - priv->gpio_mic_bias = devm_gpiod_get(dev, "mic-bias",
4596 - GPIOF_OUT_INIT_LOW);
4597 + priv->gpio_mic_bias = devm_gpiod_get(dev, "mic-bias", GPIOD_OUT_HIGH);
4598 if (IS_ERR(priv->gpio_mic_bias)) {
4599 dev_err(dev, "Failed to get mic bias gpio\n");
4600 return PTR_ERR(priv->gpio_mic_bias);
4601 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
4602 index 69bf5cf1e91e..15cbe2565703 100644
4603 --- a/sound/usb/quirks-table.h
4604 +++ b/sound/usb/quirks-table.h
4605 @@ -2875,7 +2875,8 @@ YAMAHA_DEVICE(0x7010, "UB99"),
4606 */
4607
4608 #define AU0828_DEVICE(vid, pid, vname, pname) { \
4609 - USB_DEVICE_VENDOR_SPEC(vid, pid), \
4610 + .idVendor = vid, \
4611 + .idProduct = pid, \
4612 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
4613 USB_DEVICE_ID_MATCH_INT_CLASS | \
4614 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
4615 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
4616 index 4c99c57736ce..3965186b375a 100644
4617 --- a/tools/hv/hv_kvp_daemon.c
4618 +++ b/tools/hv/hv_kvp_daemon.c
4619 @@ -286,7 +286,7 @@ static int kvp_key_delete(int pool, const __u8 *key, int key_size)
4620 * Found a match; just move the remaining
4621 * entries up.
4622 */
4623 - if (i == num_records) {
4624 + if (i == (num_records - 1)) {
4625 kvp_file_info[pool].num_records--;
4626 kvp_update_file(pool);
4627 return 0;
4628 diff --git a/tools/perf/arch/powerpc/util/skip-callchain-idx.c b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
4629 index bd630c222e65..9a53f6e9ef43 100644
4630 --- a/tools/perf/arch/powerpc/util/skip-callchain-idx.c
4631 +++ b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
4632 @@ -58,9 +58,13 @@ static int check_return_reg(int ra_regno, Dwarf_Frame *frame)
4633 }
4634
4635 /*
4636 - * Check if return address is on the stack.
4637 + * Check if return address is on the stack. If return address
4638 + * is in a register (typically R0), it is yet to be saved on
4639 + * the stack.
4640 */
4641 - if (nops != 0 || ops != NULL)
4642 + if ((nops != 0 || ops != NULL) &&
4643 + !(nops == 1 && ops[0].atom == DW_OP_regx &&
4644 + ops[0].number2 == 0 && ops[0].offset == 0))
4645 return 0;
4646
4647 /*
4648 @@ -246,7 +250,7 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain)
4649 if (!chain || chain->nr < 3)
4650 return skip_slot;
4651
4652 - ip = chain->ips[2];
4653 + ip = chain->ips[1];
4654
4655 thread__find_addr_location(thread, PERF_RECORD_MISC_USER,
4656 MAP__FUNCTION, ip, &al);
4657 diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
4658 index 53d06f37406a..5966f1f9b160 100644
4659 --- a/tools/perf/tests/builtin-test.c
4660 +++ b/tools/perf/tests/builtin-test.c
4661 @@ -589,7 +589,7 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
4662 for (subi = 0; subi < subn; subi++) {
4663 pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
4664 t->subtest.get_desc(subi));
4665 - err = test_and_print(t, skip, subi);
4666 + err = test_and_print(t, skip, subi + 1);
4667 if (err != TEST_OK && t->subtest.skip_if_fail)
4668 skip = true;
4669 }
4670 diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
4671 index 8808570f8e9c..327e01cb1aa2 100644
4672 --- a/tools/perf/util/comm.c
4673 +++ b/tools/perf/util/comm.c
4674 @@ -18,9 +18,10 @@ static struct rb_root comm_str_root;
4675
4676 static struct comm_str *comm_str__get(struct comm_str *cs)
4677 {
4678 - if (cs)
4679 - refcount_inc(&cs->refcnt);
4680 - return cs;
4681 + if (cs && refcount_inc_not_zero(&cs->refcnt))
4682 + return cs;
4683 +
4684 + return NULL;
4685 }
4686
4687 static void comm_str__put(struct comm_str *cs)
4688 @@ -62,9 +63,14 @@ static struct comm_str *comm_str__findnew(const char *str, struct rb_root *root)
4689 parent = *p;
4690 iter = rb_entry(parent, struct comm_str, rb_node);
4691
4692 + /*
4693 + * If we race with comm_str__put, iter->refcnt is 0
4694 + * and it will be removed within comm_str__put call
4695 + * shortly, ignore it in this search.
4696 + */
4697 cmp = strcmp(str, iter->str);
4698 - if (!cmp)
4699 - return comm_str__get(iter);
4700 + if (!cmp && comm_str__get(iter))
4701 + return iter;
4702
4703 if (cmp < 0)
4704 p = &(*p)->rb_left;
4705 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
4706 index 8a678a3d5a2a..1ceb332575bd 100644
4707 --- a/tools/perf/util/header.c
4708 +++ b/tools/perf/util/header.c
4709 @@ -2209,7 +2209,7 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
4710 FEAT_OPR(NUMA_TOPOLOGY, numa_topology, true),
4711 FEAT_OPN(BRANCH_STACK, branch_stack, false),
4712 FEAT_OPR(PMU_MAPPINGS, pmu_mappings, false),
4713 - FEAT_OPN(GROUP_DESC, group_desc, false),
4714 + FEAT_OPR(GROUP_DESC, group_desc, false),
4715 FEAT_OPN(AUXTRACE, auxtrace, false),
4716 FEAT_OPN(STAT, stat, false),
4717 FEAT_OPN(CACHE, cache, true),
4718 diff --git a/tools/testing/selftests/timers/raw_skew.c b/tools/testing/selftests/timers/raw_skew.c
4719 index ca6cd146aafe..dcf73c5dab6e 100644
4720 --- a/tools/testing/selftests/timers/raw_skew.c
4721 +++ b/tools/testing/selftests/timers/raw_skew.c
4722 @@ -134,6 +134,11 @@ int main(int argv, char **argc)
4723 printf(" %lld.%i(act)", ppm/1000, abs((int)(ppm%1000)));
4724
4725 if (llabs(eppm - ppm) > 1000) {
4726 + if (tx1.offset || tx2.offset ||
4727 + tx1.freq != tx2.freq || tx1.tick != tx2.tick) {
4728 + printf(" [SKIP]\n");
4729 + return ksft_exit_skip("The clock was adjusted externally. Shutdown NTPd or other time sync daemons\n");
4730 + }
4731 printf(" [FAILED]\n");
4732 return ksft_exit_fail();
4733 }
4734 diff --git a/virt/kvm/arm/vgic/vgic-init.c b/virt/kvm/arm/vgic/vgic-init.c
4735 index 5801261f3add..6f7f26ae72b4 100644
4736 --- a/virt/kvm/arm/vgic/vgic-init.c
4737 +++ b/virt/kvm/arm/vgic/vgic-init.c
4738 @@ -277,6 +277,10 @@ int vgic_init(struct kvm *kvm)
4739 if (vgic_initialized(kvm))
4740 return 0;
4741
4742 + /* Are we also in the middle of creating a VCPU? */
4743 + if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus))
4744 + return -EBUSY;
4745 +
4746 /* freeze the number of spis */
4747 if (!dist->nr_spis)
4748 dist->nr_spis = VGIC_NR_IRQS_LEGACY - VGIC_NR_PRIVATE_IRQS;
4749 diff --git a/virt/kvm/arm/vgic/vgic-mmio-v2.c b/virt/kvm/arm/vgic/vgic-mmio-v2.c
4750 index af003268bf3e..7ea5928244fa 100644
4751 --- a/virt/kvm/arm/vgic/vgic-mmio-v2.c
4752 +++ b/virt/kvm/arm/vgic/vgic-mmio-v2.c
4753 @@ -348,6 +348,9 @@ static void vgic_mmio_write_apr(struct kvm_vcpu *vcpu,
4754
4755 if (n > vgic_v3_max_apr_idx(vcpu))
4756 return;
4757 +
4758 + n = array_index_nospec(n, 4);
4759 +
4760 /* GICv3 only uses ICH_AP1Rn for memory mapped (GICv2) guests */
4761 vgicv3->vgic_ap1r[n] = val;
4762 }