Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.18 commit in: /
Date: Wed, 14 Nov 2018 11:38:02
Message-Id: 1542195385.a593437457757a3aee0bc1ec58a17bfd226271e3.mpagano@gentoo
1 commit: a593437457757a3aee0bc1ec58a17bfd226271e3
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Wed Sep 26 10:40:05 2018 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Wed Nov 14 11:36:25 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=a5934374
7
8 Linux patch 4.18.10
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1009_linux-4.18.10.patch | 6974 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 6978 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 6534d27..a9e2bd7 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -79,6 +79,10 @@ Patch: 1008_linux-4.18.9.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.18.9
23
24 +Patch: 1009_linux-4.18.10.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.18.10
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1009_linux-4.18.10.patch b/1009_linux-4.18.10.patch
33 new file mode 100644
34 index 0000000..16ee162
35 --- /dev/null
36 +++ b/1009_linux-4.18.10.patch
37 @@ -0,0 +1,6974 @@
38 +diff --git a/Makefile b/Makefile
39 +index 1178348fb9ca..ffab15235ff0 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 4
45 + PATCHLEVEL = 18
46 +-SUBLEVEL = 9
47 ++SUBLEVEL = 10
48 + EXTRAVERSION =
49 + NAME = Merciless Moray
50 +
51 +@@ -225,10 +225,12 @@ no-dot-config-targets := $(clean-targets) \
52 + cscope gtags TAGS tags help% %docs check% coccicheck \
53 + $(version_h) headers_% archheaders archscripts \
54 + kernelversion %src-pkg
55 ++no-sync-config-targets := $(no-dot-config-targets) install %install
56 +
57 +-config-targets := 0
58 +-mixed-targets := 0
59 +-dot-config := 1
60 ++config-targets := 0
61 ++mixed-targets := 0
62 ++dot-config := 1
63 ++may-sync-config := 1
64 +
65 + ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
66 + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
67 +@@ -236,6 +238,16 @@ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
68 + endif
69 + endif
70 +
71 ++ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
72 ++ ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
73 ++ may-sync-config := 0
74 ++ endif
75 ++endif
76 ++
77 ++ifneq ($(KBUILD_EXTMOD),)
78 ++ may-sync-config := 0
79 ++endif
80 ++
81 + ifeq ($(KBUILD_EXTMOD),)
82 + ifneq ($(filter config %config,$(MAKECMDGOALS)),)
83 + config-targets := 1
84 +@@ -610,7 +622,7 @@ ARCH_CFLAGS :=
85 + include arch/$(SRCARCH)/Makefile
86 +
87 + ifeq ($(dot-config),1)
88 +-ifeq ($(KBUILD_EXTMOD),)
89 ++ifeq ($(may-sync-config),1)
90 + # Read in dependencies to all Kconfig* files, make sure to run syncconfig if
91 + # changes are detected. This should be included after arch/$(SRCARCH)/Makefile
92 + # because some architectures define CROSS_COMPILE there.
93 +@@ -625,8 +637,9 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
94 + include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
95 + $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
96 + else
97 +-# external modules needs include/generated/autoconf.h and include/config/auto.conf
98 +-# but do not care if they are up-to-date. Use auto.conf to trigger the test
99 ++# External modules and some install targets need include/generated/autoconf.h
100 ++# and include/config/auto.conf but do not care if they are up-to-date.
101 ++# Use auto.conf to trigger the test
102 + PHONY += include/config/auto.conf
103 +
104 + include/config/auto.conf:
105 +@@ -638,7 +651,7 @@ include/config/auto.conf:
106 + echo >&2 ; \
107 + /bin/false)
108 +
109 +-endif # KBUILD_EXTMOD
110 ++endif # may-sync-config
111 +
112 + else
113 + # Dummy target needed, because used as prerequisite
114 +diff --git a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
115 +index 4dc0b347b1ee..c2dc9d09484a 100644
116 +--- a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
117 ++++ b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
118 +@@ -189,6 +189,8 @@
119 + regulator-max-microvolt = <2950000>;
120 +
121 + regulator-boot-on;
122 ++ regulator-system-load = <200000>;
123 ++ regulator-allow-set-load;
124 + };
125 +
126 + l21 {
127 +diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c
128 +index d3db306a5a70..941b0ffd9806 100644
129 +--- a/arch/arm/mach-exynos/suspend.c
130 ++++ b/arch/arm/mach-exynos/suspend.c
131 +@@ -203,6 +203,7 @@ static int __init exynos_pmu_irq_init(struct device_node *node,
132 + NULL);
133 + if (!domain) {
134 + iounmap(pmu_base_addr);
135 ++ pmu_base_addr = NULL;
136 + return -ENOMEM;
137 + }
138 +
139 +diff --git a/arch/arm/mach-hisi/hotplug.c b/arch/arm/mach-hisi/hotplug.c
140 +index a129aae72602..909bb2493781 100644
141 +--- a/arch/arm/mach-hisi/hotplug.c
142 ++++ b/arch/arm/mach-hisi/hotplug.c
143 +@@ -148,13 +148,20 @@ static int hi3xxx_hotplug_init(void)
144 + struct device_node *node;
145 +
146 + node = of_find_compatible_node(NULL, NULL, "hisilicon,sysctrl");
147 +- if (node) {
148 +- ctrl_base = of_iomap(node, 0);
149 +- id = HI3620_CTRL;
150 +- return 0;
151 ++ if (!node) {
152 ++ id = ERROR_CTRL;
153 ++ return -ENOENT;
154 + }
155 +- id = ERROR_CTRL;
156 +- return -ENOENT;
157 ++
158 ++ ctrl_base = of_iomap(node, 0);
159 ++ of_node_put(node);
160 ++ if (!ctrl_base) {
161 ++ id = ERROR_CTRL;
162 ++ return -ENOMEM;
163 ++ }
164 ++
165 ++ id = HI3620_CTRL;
166 ++ return 0;
167 + }
168 +
169 + void hi3xxx_set_cpu(int cpu, bool enable)
170 +@@ -173,11 +180,15 @@ static bool hix5hd2_hotplug_init(void)
171 + struct device_node *np;
172 +
173 + np = of_find_compatible_node(NULL, NULL, "hisilicon,cpuctrl");
174 +- if (np) {
175 +- ctrl_base = of_iomap(np, 0);
176 +- return true;
177 +- }
178 +- return false;
179 ++ if (!np)
180 ++ return false;
181 ++
182 ++ ctrl_base = of_iomap(np, 0);
183 ++ of_node_put(np);
184 ++ if (!ctrl_base)
185 ++ return false;
186 ++
187 ++ return true;
188 + }
189 +
190 + void hix5hd2_set_cpu(int cpu, bool enable)
191 +@@ -219,10 +230,10 @@ void hip01_set_cpu(int cpu, bool enable)
192 +
193 + if (!ctrl_base) {
194 + np = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
195 +- if (np)
196 +- ctrl_base = of_iomap(np, 0);
197 +- else
198 +- BUG();
199 ++ BUG_ON(!np);
200 ++ ctrl_base = of_iomap(np, 0);
201 ++ of_node_put(np);
202 ++ BUG_ON(!ctrl_base);
203 + }
204 +
205 + if (enable) {
206 +diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
207 +index 9213c966c224..ec7ea8dca777 100644
208 +--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
209 ++++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
210 +@@ -331,7 +331,7 @@
211 + reg = <0 0x11002000 0 0x400>;
212 + interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_LOW>;
213 + clocks = <&topckgen CLK_TOP_UART_SEL>,
214 +- <&pericfg CLK_PERI_UART1_PD>;
215 ++ <&pericfg CLK_PERI_UART0_PD>;
216 + clock-names = "baud", "bus";
217 + status = "disabled";
218 + };
219 +diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
220 +index 9ff848792712..78ce3979ef09 100644
221 +--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
222 ++++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
223 +@@ -338,7 +338,7 @@
224 + led@6 {
225 + label = "apq8016-sbc:blue:bt";
226 + gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
227 +- linux,default-trigger = "bt";
228 ++ linux,default-trigger = "bluetooth-power";
229 + default-state = "off";
230 + };
231 + };
232 +diff --git a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
233 +index 0298bd0d0e1a..caf112629caa 100644
234 +--- a/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
235 ++++ b/arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
236 +@@ -58,6 +58,7 @@
237 + clocks = <&sys_clk 32>;
238 + enable-method = "psci";
239 + operating-points-v2 = <&cluster0_opp>;
240 ++ #cooling-cells = <2>;
241 + };
242 +
243 + cpu2: cpu@100 {
244 +@@ -77,6 +78,7 @@
245 + clocks = <&sys_clk 33>;
246 + enable-method = "psci";
247 + operating-points-v2 = <&cluster1_opp>;
248 ++ #cooling-cells = <2>;
249 + };
250 + };
251 +
252 +diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
253 +index 33147aacdafd..dd5b4fab114f 100644
254 +--- a/arch/arm64/kernel/perf_event.c
255 ++++ b/arch/arm64/kernel/perf_event.c
256 +@@ -670,6 +670,28 @@ static void armv8pmu_disable_event(struct perf_event *event)
257 + raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
258 + }
259 +
260 ++static void armv8pmu_start(struct arm_pmu *cpu_pmu)
261 ++{
262 ++ unsigned long flags;
263 ++ struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
264 ++
265 ++ raw_spin_lock_irqsave(&events->pmu_lock, flags);
266 ++ /* Enable all counters */
267 ++ armv8pmu_pmcr_write(armv8pmu_pmcr_read() | ARMV8_PMU_PMCR_E);
268 ++ raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
269 ++}
270 ++
271 ++static void armv8pmu_stop(struct arm_pmu *cpu_pmu)
272 ++{
273 ++ unsigned long flags;
274 ++ struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
275 ++
276 ++ raw_spin_lock_irqsave(&events->pmu_lock, flags);
277 ++ /* Disable all counters */
278 ++ armv8pmu_pmcr_write(armv8pmu_pmcr_read() & ~ARMV8_PMU_PMCR_E);
279 ++ raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
280 ++}
281 ++
282 + static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
283 + {
284 + u32 pmovsr;
285 +@@ -694,6 +716,11 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
286 + */
287 + regs = get_irq_regs();
288 +
289 ++ /*
290 ++ * Stop the PMU while processing the counter overflows
291 ++ * to prevent skews in group events.
292 ++ */
293 ++ armv8pmu_stop(cpu_pmu);
294 + for (idx = 0; idx < cpu_pmu->num_events; ++idx) {
295 + struct perf_event *event = cpuc->events[idx];
296 + struct hw_perf_event *hwc;
297 +@@ -718,6 +745,7 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
298 + if (perf_event_overflow(event, &data, regs))
299 + cpu_pmu->disable(event);
300 + }
301 ++ armv8pmu_start(cpu_pmu);
302 +
303 + /*
304 + * Handle the pending perf events.
305 +@@ -731,28 +759,6 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
306 + return IRQ_HANDLED;
307 + }
308 +
309 +-static void armv8pmu_start(struct arm_pmu *cpu_pmu)
310 +-{
311 +- unsigned long flags;
312 +- struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
313 +-
314 +- raw_spin_lock_irqsave(&events->pmu_lock, flags);
315 +- /* Enable all counters */
316 +- armv8pmu_pmcr_write(armv8pmu_pmcr_read() | ARMV8_PMU_PMCR_E);
317 +- raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
318 +-}
319 +-
320 +-static void armv8pmu_stop(struct arm_pmu *cpu_pmu)
321 +-{
322 +- unsigned long flags;
323 +- struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
324 +-
325 +- raw_spin_lock_irqsave(&events->pmu_lock, flags);
326 +- /* Disable all counters */
327 +- armv8pmu_pmcr_write(armv8pmu_pmcr_read() & ~ARMV8_PMU_PMCR_E);
328 +- raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
329 +-}
330 +-
331 + static int armv8pmu_get_event_idx(struct pmu_hw_events *cpuc,
332 + struct perf_event *event)
333 + {
334 +diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
335 +index 5c338ce5a7fa..db5440339ab3 100644
336 +--- a/arch/arm64/kernel/ptrace.c
337 ++++ b/arch/arm64/kernel/ptrace.c
338 +@@ -277,19 +277,22 @@ static int ptrace_hbp_set_event(unsigned int note_type,
339 +
340 + switch (note_type) {
341 + case NT_ARM_HW_BREAK:
342 +- if (idx < ARM_MAX_BRP) {
343 +- tsk->thread.debug.hbp_break[idx] = bp;
344 +- err = 0;
345 +- }
346 ++ if (idx >= ARM_MAX_BRP)
347 ++ goto out;
348 ++ idx = array_index_nospec(idx, ARM_MAX_BRP);
349 ++ tsk->thread.debug.hbp_break[idx] = bp;
350 ++ err = 0;
351 + break;
352 + case NT_ARM_HW_WATCH:
353 +- if (idx < ARM_MAX_WRP) {
354 +- tsk->thread.debug.hbp_watch[idx] = bp;
355 +- err = 0;
356 +- }
357 ++ if (idx >= ARM_MAX_WRP)
358 ++ goto out;
359 ++ idx = array_index_nospec(idx, ARM_MAX_WRP);
360 ++ tsk->thread.debug.hbp_watch[idx] = bp;
361 ++ err = 0;
362 + break;
363 + }
364 +
365 ++out:
366 + return err;
367 + }
368 +
369 +diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
370 +index f206dafbb0a3..26a058d58d37 100644
371 +--- a/arch/mips/ath79/setup.c
372 ++++ b/arch/mips/ath79/setup.c
373 +@@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYPE_LEN];
374 +
375 + static void ath79_restart(char *command)
376 + {
377 ++ local_irq_disable();
378 + ath79_device_reset_set(AR71XX_RESET_FULL_CHIP);
379 + for (;;)
380 + if (cpu_wait)
381 +diff --git a/arch/mips/include/asm/mach-ath79/ath79.h b/arch/mips/include/asm/mach-ath79/ath79.h
382 +index 441faa92c3cd..6e6c0fead776 100644
383 +--- a/arch/mips/include/asm/mach-ath79/ath79.h
384 ++++ b/arch/mips/include/asm/mach-ath79/ath79.h
385 +@@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned reg)
386 + static inline void ath79_reset_wr(unsigned reg, u32 val)
387 + {
388 + __raw_writel(val, ath79_reset_base + reg);
389 ++ (void) __raw_readl(ath79_reset_base + reg); /* flush */
390 + }
391 +
392 + static inline u32 ath79_reset_rr(unsigned reg)
393 +diff --git a/arch/mips/jz4740/Platform b/arch/mips/jz4740/Platform
394 +index 28448d358c10..a2a5a85ea1f9 100644
395 +--- a/arch/mips/jz4740/Platform
396 ++++ b/arch/mips/jz4740/Platform
397 +@@ -1,4 +1,4 @@
398 + platform-$(CONFIG_MACH_INGENIC) += jz4740/
399 + cflags-$(CONFIG_MACH_INGENIC) += -I$(srctree)/arch/mips/include/asm/mach-jz4740
400 + load-$(CONFIG_MACH_INGENIC) += 0xffffffff80010000
401 +-zload-$(CONFIG_MACH_INGENIC) += 0xffffffff80600000
402 ++zload-$(CONFIG_MACH_INGENIC) += 0xffffffff81000000
403 +diff --git a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
404 +index f7c905e50dc4..92dc6bafc127 100644
405 +--- a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
406 ++++ b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
407 +@@ -138,7 +138,7 @@ u32 pci_ohci_read_reg(int reg)
408 + break;
409 + case PCI_OHCI_INT_REG:
410 + _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
411 +- if ((lo & 0x00000f00) == CS5536_USB_INTR)
412 ++ if (((lo >> PIC_YSEL_LOW_USB_SHIFT) & 0xf) == CS5536_USB_INTR)
413 + conf_data = 1;
414 + break;
415 + default:
416 +diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
417 +index 8c456fa691a5..8167ce8e0cdd 100644
418 +--- a/arch/powerpc/kvm/book3s_64_vio.c
419 ++++ b/arch/powerpc/kvm/book3s_64_vio.c
420 +@@ -180,7 +180,7 @@ extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
421 + if ((tbltmp->it_page_shift <= stt->page_shift) &&
422 + (tbltmp->it_offset << tbltmp->it_page_shift ==
423 + stt->offset << stt->page_shift) &&
424 +- (tbltmp->it_size << tbltmp->it_page_shift ==
425 ++ (tbltmp->it_size << tbltmp->it_page_shift >=
426 + stt->size << stt->page_shift)) {
427 + /*
428 + * Reference the table to avoid races with
429 +@@ -296,7 +296,7 @@ long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
430 + {
431 + struct kvmppc_spapr_tce_table *stt = NULL;
432 + struct kvmppc_spapr_tce_table *siter;
433 +- unsigned long npages, size;
434 ++ unsigned long npages, size = args->size;
435 + int ret = -ENOMEM;
436 + int i;
437 +
438 +@@ -304,7 +304,6 @@ long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
439 + (args->offset + args->size > (ULLONG_MAX >> args->page_shift)))
440 + return -EINVAL;
441 +
442 +- size = _ALIGN_UP(args->size, PAGE_SIZE >> 3);
443 + npages = kvmppc_tce_pages(size);
444 + ret = kvmppc_account_memlimit(kvmppc_stt_pages(npages), true);
445 + if (ret)
446 +diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
447 +index a995513573c2..2ebd5132a29f 100644
448 +--- a/arch/powerpc/kvm/book3s_hv.c
449 ++++ b/arch/powerpc/kvm/book3s_hv.c
450 +@@ -4562,6 +4562,8 @@ static int kvmppc_book3s_init_hv(void)
451 + pr_err("KVM-HV: Cannot determine method for accessing XICS\n");
452 + return -ENODEV;
453 + }
454 ++ /* presence of intc confirmed - node can be dropped again */
455 ++ of_node_put(np);
456 + }
457 + #endif
458 +
459 +diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
460 +index 0d539c661748..371e33ecc547 100644
461 +--- a/arch/powerpc/platforms/powernv/opal.c
462 ++++ b/arch/powerpc/platforms/powernv/opal.c
463 +@@ -388,7 +388,7 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
464 + /* Closed or other error drop */
465 + if (rc != OPAL_SUCCESS && rc != OPAL_BUSY &&
466 + rc != OPAL_BUSY_EVENT) {
467 +- written = total_len;
468 ++ written += total_len;
469 + break;
470 + }
471 + if (rc == OPAL_SUCCESS) {
472 +diff --git a/arch/s390/crypto/paes_s390.c b/arch/s390/crypto/paes_s390.c
473 +index 80b27294c1de..ab9a0ebecc19 100644
474 +--- a/arch/s390/crypto/paes_s390.c
475 ++++ b/arch/s390/crypto/paes_s390.c
476 +@@ -208,7 +208,7 @@ static int cbc_paes_crypt(struct blkcipher_desc *desc, unsigned long modifier,
477 + walk->dst.virt.addr, walk->src.virt.addr, n);
478 + if (k)
479 + ret = blkcipher_walk_done(desc, walk, nbytes - k);
480 +- if (n < k) {
481 ++ if (k < n) {
482 + if (__cbc_paes_set_key(ctx) != 0)
483 + return blkcipher_walk_done(desc, walk, -EIO);
484 + memcpy(param.key, ctx->pk.protkey, MAXPROTKEYSIZE);
485 +diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
486 +index f260e452e4f8..e8c8c5d78dbd 100644
487 +--- a/arch/x86/kernel/eisa.c
488 ++++ b/arch/x86/kernel/eisa.c
489 +@@ -7,11 +7,17 @@
490 + #include <linux/eisa.h>
491 + #include <linux/io.h>
492 +
493 ++#include <xen/xen.h>
494 ++
495 + static __init int eisa_bus_probe(void)
496 + {
497 +- void __iomem *p = ioremap(0x0FFFD9, 4);
498 ++ void __iomem *p;
499 ++
500 ++ if (xen_pv_domain() && !xen_initial_domain())
501 ++ return 0;
502 +
503 +- if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
504 ++ p = ioremap(0x0FFFD9, 4);
505 ++ if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
506 + EISA_bus = 1;
507 + iounmap(p);
508 + return 0;
509 +diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
510 +index 946455e9cfef..1d2106d83b4e 100644
511 +--- a/arch/x86/mm/pti.c
512 ++++ b/arch/x86/mm/pti.c
513 +@@ -177,7 +177,7 @@ static p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)
514 +
515 + if (pgd_none(*pgd)) {
516 + unsigned long new_p4d_page = __get_free_page(gfp);
517 +- if (!new_p4d_page)
518 ++ if (WARN_ON_ONCE(!new_p4d_page))
519 + return NULL;
520 +
521 + set_pgd(pgd, __pgd(_KERNPG_TABLE | __pa(new_p4d_page)));
522 +@@ -196,13 +196,17 @@ static p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)
523 + static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
524 + {
525 + gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
526 +- p4d_t *p4d = pti_user_pagetable_walk_p4d(address);
527 ++ p4d_t *p4d;
528 + pud_t *pud;
529 +
530 ++ p4d = pti_user_pagetable_walk_p4d(address);
531 ++ if (!p4d)
532 ++ return NULL;
533 ++
534 + BUILD_BUG_ON(p4d_large(*p4d) != 0);
535 + if (p4d_none(*p4d)) {
536 + unsigned long new_pud_page = __get_free_page(gfp);
537 +- if (!new_pud_page)
538 ++ if (WARN_ON_ONCE(!new_pud_page))
539 + return NULL;
540 +
541 + set_p4d(p4d, __p4d(_KERNPG_TABLE | __pa(new_pud_page)));
542 +@@ -216,7 +220,7 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
543 + }
544 + if (pud_none(*pud)) {
545 + unsigned long new_pmd_page = __get_free_page(gfp);
546 +- if (!new_pmd_page)
547 ++ if (WARN_ON_ONCE(!new_pmd_page))
548 + return NULL;
549 +
550 + set_pud(pud, __pud(_KERNPG_TABLE | __pa(new_pmd_page)));
551 +@@ -238,9 +242,13 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
552 + static __init pte_t *pti_user_pagetable_walk_pte(unsigned long address)
553 + {
554 + gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
555 +- pmd_t *pmd = pti_user_pagetable_walk_pmd(address);
556 ++ pmd_t *pmd;
557 + pte_t *pte;
558 +
559 ++ pmd = pti_user_pagetable_walk_pmd(address);
560 ++ if (!pmd)
561 ++ return NULL;
562 ++
563 + /* We can't do anything sensible if we hit a large mapping. */
564 + if (pmd_large(*pmd)) {
565 + WARN_ON(1);
566 +@@ -298,6 +306,10 @@ pti_clone_pmds(unsigned long start, unsigned long end, pmdval_t clear)
567 + p4d_t *p4d;
568 + pud_t *pud;
569 +
570 ++ /* Overflow check */
571 ++ if (addr < start)
572 ++ break;
573 ++
574 + pgd = pgd_offset_k(addr);
575 + if (WARN_ON(pgd_none(*pgd)))
576 + return;
577 +@@ -355,6 +367,9 @@ static void __init pti_clone_p4d(unsigned long addr)
578 + pgd_t *kernel_pgd;
579 +
580 + user_p4d = pti_user_pagetable_walk_p4d(addr);
581 ++ if (!user_p4d)
582 ++ return;
583 ++
584 + kernel_pgd = pgd_offset_k(addr);
585 + kernel_p4d = p4d_offset(kernel_pgd, addr);
586 + *user_p4d = *kernel_p4d;
587 +diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c
588 +index f4bbb28026f8..58709e89a8ed 100644
589 +--- a/arch/xtensa/platforms/iss/setup.c
590 ++++ b/arch/xtensa/platforms/iss/setup.c
591 +@@ -78,23 +78,28 @@ static struct notifier_block iss_panic_block = {
592 +
593 + void __init platform_setup(char **p_cmdline)
594 + {
595 ++ static void *argv[COMMAND_LINE_SIZE / sizeof(void *)] __initdata;
596 ++ static char cmdline[COMMAND_LINE_SIZE] __initdata;
597 + int argc = simc_argc();
598 + int argv_size = simc_argv_size();
599 +
600 + if (argc > 1) {
601 +- void **argv = alloc_bootmem(argv_size);
602 +- char *cmdline = alloc_bootmem(argv_size);
603 +- int i;
604 ++ if (argv_size > sizeof(argv)) {
605 ++ pr_err("%s: command line too long: argv_size = %d\n",
606 ++ __func__, argv_size);
607 ++ } else {
608 ++ int i;
609 +
610 +- cmdline[0] = 0;
611 +- simc_argv((void *)argv);
612 ++ cmdline[0] = 0;
613 ++ simc_argv((void *)argv);
614 +
615 +- for (i = 1; i < argc; ++i) {
616 +- if (i > 1)
617 +- strcat(cmdline, " ");
618 +- strcat(cmdline, argv[i]);
619 ++ for (i = 1; i < argc; ++i) {
620 ++ if (i > 1)
621 ++ strcat(cmdline, " ");
622 ++ strcat(cmdline, argv[i]);
623 ++ }
624 ++ *p_cmdline = cmdline;
625 + }
626 +- *p_cmdline = cmdline;
627 + }
628 +
629 + atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);
630 +diff --git a/block/blk-core.c b/block/blk-core.c
631 +index cbaca5a73f2e..f9d2e1b66e05 100644
632 +--- a/block/blk-core.c
633 ++++ b/block/blk-core.c
634 +@@ -791,9 +791,13 @@ void blk_cleanup_queue(struct request_queue *q)
635 + * make sure all in-progress dispatch are completed because
636 + * blk_freeze_queue() can only complete all requests, and
637 + * dispatch may still be in-progress since we dispatch requests
638 +- * from more than one contexts
639 ++ * from more than one contexts.
640 ++ *
641 ++ * No need to quiesce queue if it isn't initialized yet since
642 ++ * blk_freeze_queue() should be enough for cases of passthrough
643 ++ * request.
644 + */
645 +- if (q->mq_ops)
646 ++ if (q->mq_ops && blk_queue_init_done(q))
647 + blk_mq_quiesce_queue(q);
648 +
649 + /* for synchronous bio-based driver finish in-flight integrity i/o */
650 +diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
651 +index 56c493c6cd90..f5745acc2d98 100644
652 +--- a/block/blk-mq-sched.c
653 ++++ b/block/blk-mq-sched.c
654 +@@ -339,7 +339,8 @@ bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio)
655 + return e->type->ops.mq.bio_merge(hctx, bio);
656 + }
657 +
658 +- if (hctx->flags & BLK_MQ_F_SHOULD_MERGE) {
659 ++ if ((hctx->flags & BLK_MQ_F_SHOULD_MERGE) &&
660 ++ !list_empty_careful(&ctx->rq_list)) {
661 + /* default per sw-queue merge */
662 + spin_lock(&ctx->lock);
663 + ret = blk_mq_attempt_merge(q, ctx, bio);
664 +diff --git a/block/blk-settings.c b/block/blk-settings.c
665 +index d1de71124656..24fff4a3d08a 100644
666 +--- a/block/blk-settings.c
667 ++++ b/block/blk-settings.c
668 +@@ -128,7 +128,7 @@ void blk_set_stacking_limits(struct queue_limits *lim)
669 +
670 + /* Inherit limits from component devices */
671 + lim->max_segments = USHRT_MAX;
672 +- lim->max_discard_segments = 1;
673 ++ lim->max_discard_segments = USHRT_MAX;
674 + lim->max_hw_sectors = UINT_MAX;
675 + lim->max_segment_size = UINT_MAX;
676 + lim->max_sectors = UINT_MAX;
677 +diff --git a/crypto/api.c b/crypto/api.c
678 +index 0ee632bba064..7aca9f86c5f3 100644
679 +--- a/crypto/api.c
680 ++++ b/crypto/api.c
681 +@@ -229,7 +229,7 @@ static struct crypto_alg *crypto_larval_lookup(const char *name, u32 type,
682 + mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD);
683 +
684 + alg = crypto_alg_lookup(name, type, mask);
685 +- if (!alg) {
686 ++ if (!alg && !(mask & CRYPTO_NOLOAD)) {
687 + request_module("crypto-%s", name);
688 +
689 + if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask &
690 +diff --git a/drivers/base/core.c b/drivers/base/core.c
691 +index df3e1a44707a..3aba4ad8af5c 100644
692 +--- a/drivers/base/core.c
693 ++++ b/drivers/base/core.c
694 +@@ -2809,6 +2809,9 @@ void device_shutdown(void)
695 + {
696 + struct device *dev, *parent;
697 +
698 ++ wait_for_device_probe();
699 ++ device_block_probing();
700 ++
701 + spin_lock(&devices_kset->list_lock);
702 + /*
703 + * Walk the devices list backward, shutting down each in turn.
704 +diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
705 +index f6518067aa7d..f99e5c883368 100644
706 +--- a/drivers/block/DAC960.c
707 ++++ b/drivers/block/DAC960.c
708 +@@ -21,6 +21,7 @@
709 + #define DAC960_DriverDate "21 Aug 2007"
710 +
711 +
712 ++#include <linux/compiler.h>
713 + #include <linux/module.h>
714 + #include <linux/types.h>
715 + #include <linux/miscdevice.h>
716 +@@ -6426,7 +6427,7 @@ static bool DAC960_V2_ExecuteUserCommand(DAC960_Controller_T *Controller,
717 + return true;
718 + }
719 +
720 +-static int dac960_proc_show(struct seq_file *m, void *v)
721 ++static int __maybe_unused dac960_proc_show(struct seq_file *m, void *v)
722 + {
723 + unsigned char *StatusMessage = "OK\n";
724 + int ControllerNumber;
725 +@@ -6446,14 +6447,16 @@ static int dac960_proc_show(struct seq_file *m, void *v)
726 + return 0;
727 + }
728 +
729 +-static int dac960_initial_status_proc_show(struct seq_file *m, void *v)
730 ++static int __maybe_unused dac960_initial_status_proc_show(struct seq_file *m,
731 ++ void *v)
732 + {
733 + DAC960_Controller_T *Controller = (DAC960_Controller_T *)m->private;
734 + seq_printf(m, "%.*s", Controller->InitialStatusLength, Controller->CombinedStatusBuffer);
735 + return 0;
736 + }
737 +
738 +-static int dac960_current_status_proc_show(struct seq_file *m, void *v)
739 ++static int __maybe_unused dac960_current_status_proc_show(struct seq_file *m,
740 ++ void *v)
741 + {
742 + DAC960_Controller_T *Controller = (DAC960_Controller_T *) m->private;
743 + unsigned char *StatusMessage =
744 +diff --git a/drivers/char/ipmi/ipmi_bt_sm.c b/drivers/char/ipmi/ipmi_bt_sm.c
745 +index a3397664f800..97d6856c9c0f 100644
746 +--- a/drivers/char/ipmi/ipmi_bt_sm.c
747 ++++ b/drivers/char/ipmi/ipmi_bt_sm.c
748 +@@ -59,8 +59,6 @@ enum bt_states {
749 + BT_STATE_RESET3,
750 + BT_STATE_RESTART,
751 + BT_STATE_PRINTME,
752 +- BT_STATE_CAPABILITIES_BEGIN,
753 +- BT_STATE_CAPABILITIES_END,
754 + BT_STATE_LONG_BUSY /* BT doesn't get hosed :-) */
755 + };
756 +
757 +@@ -86,7 +84,6 @@ struct si_sm_data {
758 + int error_retries; /* end of "common" fields */
759 + int nonzero_status; /* hung BMCs stay all 0 */
760 + enum bt_states complete; /* to divert the state machine */
761 +- int BT_CAP_outreqs;
762 + long BT_CAP_req2rsp;
763 + int BT_CAP_retries; /* Recommended retries */
764 + };
765 +@@ -137,8 +134,6 @@ static char *state2txt(unsigned char state)
766 + case BT_STATE_RESET3: return("RESET3");
767 + case BT_STATE_RESTART: return("RESTART");
768 + case BT_STATE_LONG_BUSY: return("LONG_BUSY");
769 +- case BT_STATE_CAPABILITIES_BEGIN: return("CAP_BEGIN");
770 +- case BT_STATE_CAPABILITIES_END: return("CAP_END");
771 + }
772 + return("BAD STATE");
773 + }
774 +@@ -185,7 +180,6 @@ static unsigned int bt_init_data(struct si_sm_data *bt, struct si_sm_io *io)
775 + bt->complete = BT_STATE_IDLE; /* end here */
776 + bt->BT_CAP_req2rsp = BT_NORMAL_TIMEOUT * USEC_PER_SEC;
777 + bt->BT_CAP_retries = BT_NORMAL_RETRY_LIMIT;
778 +- /* BT_CAP_outreqs == zero is a flag to read BT Capabilities */
779 + return 3; /* We claim 3 bytes of space; ought to check SPMI table */
780 + }
781 +
782 +@@ -451,7 +445,7 @@ static enum si_sm_result error_recovery(struct si_sm_data *bt,
783 +
784 + static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
785 + {
786 +- unsigned char status, BT_CAP[8];
787 ++ unsigned char status;
788 + static enum bt_states last_printed = BT_STATE_PRINTME;
789 + int i;
790 +
791 +@@ -504,12 +498,6 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
792 + if (status & BT_H_BUSY) /* clear a leftover H_BUSY */
793 + BT_CONTROL(BT_H_BUSY);
794 +
795 +- bt->timeout = bt->BT_CAP_req2rsp;
796 +-
797 +- /* Read BT capabilities if it hasn't been done yet */
798 +- if (!bt->BT_CAP_outreqs)
799 +- BT_STATE_CHANGE(BT_STATE_CAPABILITIES_BEGIN,
800 +- SI_SM_CALL_WITHOUT_DELAY);
801 + BT_SI_SM_RETURN(SI_SM_IDLE);
802 +
803 + case BT_STATE_XACTION_START:
804 +@@ -614,37 +602,6 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
805 + BT_STATE_CHANGE(BT_STATE_XACTION_START,
806 + SI_SM_CALL_WITH_DELAY);
807 +
808 +- /*
809 +- * Get BT Capabilities, using timing of upper level state machine.
810 +- * Set outreqs to prevent infinite loop on timeout.
811 +- */
812 +- case BT_STATE_CAPABILITIES_BEGIN:
813 +- bt->BT_CAP_outreqs = 1;
814 +- {
815 +- unsigned char GetBT_CAP[] = { 0x18, 0x36 };
816 +- bt->state = BT_STATE_IDLE;
817 +- bt_start_transaction(bt, GetBT_CAP, sizeof(GetBT_CAP));
818 +- }
819 +- bt->complete = BT_STATE_CAPABILITIES_END;
820 +- BT_STATE_CHANGE(BT_STATE_XACTION_START,
821 +- SI_SM_CALL_WITH_DELAY);
822 +-
823 +- case BT_STATE_CAPABILITIES_END:
824 +- i = bt_get_result(bt, BT_CAP, sizeof(BT_CAP));
825 +- bt_init_data(bt, bt->io);
826 +- if ((i == 8) && !BT_CAP[2]) {
827 +- bt->BT_CAP_outreqs = BT_CAP[3];
828 +- bt->BT_CAP_req2rsp = BT_CAP[6] * USEC_PER_SEC;
829 +- bt->BT_CAP_retries = BT_CAP[7];
830 +- } else
831 +- printk(KERN_WARNING "IPMI BT: using default values\n");
832 +- if (!bt->BT_CAP_outreqs)
833 +- bt->BT_CAP_outreqs = 1;
834 +- printk(KERN_WARNING "IPMI BT: req2rsp=%ld secs retries=%d\n",
835 +- bt->BT_CAP_req2rsp / USEC_PER_SEC, bt->BT_CAP_retries);
836 +- bt->timeout = bt->BT_CAP_req2rsp;
837 +- return SI_SM_CALL_WITHOUT_DELAY;
838 +-
839 + default: /* should never occur */
840 + return error_recovery(bt,
841 + status,
842 +@@ -655,6 +612,11 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
843 +
844 + static int bt_detect(struct si_sm_data *bt)
845 + {
846 ++ unsigned char GetBT_CAP[] = { 0x18, 0x36 };
847 ++ unsigned char BT_CAP[8];
848 ++ enum si_sm_result smi_result;
849 ++ int rv;
850 ++
851 + /*
852 + * It's impossible for the BT status and interrupt registers to be
853 + * all 1's, (assuming a properly functioning, self-initialized BMC)
854 +@@ -665,6 +627,48 @@ static int bt_detect(struct si_sm_data *bt)
855 + if ((BT_STATUS == 0xFF) && (BT_INTMASK_R == 0xFF))
856 + return 1;
857 + reset_flags(bt);
858 ++
859 ++ /*
860 ++ * Try getting the BT capabilities here.
861 ++ */
862 ++ rv = bt_start_transaction(bt, GetBT_CAP, sizeof(GetBT_CAP));
863 ++ if (rv) {
864 ++ dev_warn(bt->io->dev,
865 ++ "Can't start capabilities transaction: %d\n", rv);
866 ++ goto out_no_bt_cap;
867 ++ }
868 ++
869 ++ smi_result = SI_SM_CALL_WITHOUT_DELAY;
870 ++ for (;;) {
871 ++ if (smi_result == SI_SM_CALL_WITH_DELAY ||
872 ++ smi_result == SI_SM_CALL_WITH_TICK_DELAY) {
873 ++ schedule_timeout_uninterruptible(1);
874 ++ smi_result = bt_event(bt, jiffies_to_usecs(1));
875 ++ } else if (smi_result == SI_SM_CALL_WITHOUT_DELAY) {
876 ++ smi_result = bt_event(bt, 0);
877 ++ } else
878 ++ break;
879 ++ }
880 ++
881 ++ rv = bt_get_result(bt, BT_CAP, sizeof(BT_CAP));
882 ++ bt_init_data(bt, bt->io);
883 ++ if (rv < 8) {
884 ++ dev_warn(bt->io->dev, "bt cap response too short: %d\n", rv);
885 ++ goto out_no_bt_cap;
886 ++ }
887 ++
888 ++ if (BT_CAP[2]) {
889 ++ dev_warn(bt->io->dev, "Error fetching bt cap: %x\n", BT_CAP[2]);
890 ++out_no_bt_cap:
891 ++ dev_warn(bt->io->dev, "using default values\n");
892 ++ } else {
893 ++ bt->BT_CAP_req2rsp = BT_CAP[6] * USEC_PER_SEC;
894 ++ bt->BT_CAP_retries = BT_CAP[7];
895 ++ }
896 ++
897 ++ dev_info(bt->io->dev, "req2rsp=%ld secs retries=%d\n",
898 ++ bt->BT_CAP_req2rsp / USEC_PER_SEC, bt->BT_CAP_retries);
899 ++
900 + return 0;
901 + }
902 +
903 +diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
904 +index 51832b8a2c62..7fc9612070a1 100644
905 +--- a/drivers/char/ipmi/ipmi_msghandler.c
906 ++++ b/drivers/char/ipmi/ipmi_msghandler.c
907 +@@ -3381,39 +3381,45 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
908 +
909 + rv = handlers->start_processing(send_info, intf);
910 + if (rv)
911 +- goto out;
912 ++ goto out_err;
913 +
914 + rv = __bmc_get_device_id(intf, NULL, &id, NULL, NULL, i);
915 + if (rv) {
916 + dev_err(si_dev, "Unable to get the device id: %d\n", rv);
917 +- goto out;
918 ++ goto out_err_started;
919 + }
920 +
921 + mutex_lock(&intf->bmc_reg_mutex);
922 + rv = __scan_channels(intf, &id);
923 + mutex_unlock(&intf->bmc_reg_mutex);
924 ++ if (rv)
925 ++ goto out_err_bmc_reg;
926 +
927 +- out:
928 +- if (rv) {
929 +- ipmi_bmc_unregister(intf);
930 +- list_del_rcu(&intf->link);
931 +- mutex_unlock(&ipmi_interfaces_mutex);
932 +- synchronize_srcu(&ipmi_interfaces_srcu);
933 +- cleanup_srcu_struct(&intf->users_srcu);
934 +- kref_put(&intf->refcount, intf_free);
935 +- } else {
936 +- /*
937 +- * Keep memory order straight for RCU readers. Make
938 +- * sure everything else is committed to memory before
939 +- * setting intf_num to mark the interface valid.
940 +- */
941 +- smp_wmb();
942 +- intf->intf_num = i;
943 +- mutex_unlock(&ipmi_interfaces_mutex);
944 ++ /*
945 ++ * Keep memory order straight for RCU readers. Make
946 ++ * sure everything else is committed to memory before
947 ++ * setting intf_num to mark the interface valid.
948 ++ */
949 ++ smp_wmb();
950 ++ intf->intf_num = i;
951 ++ mutex_unlock(&ipmi_interfaces_mutex);
952 +
953 +- /* After this point the interface is legal to use. */
954 +- call_smi_watchers(i, intf->si_dev);
955 +- }
956 ++ /* After this point the interface is legal to use. */
957 ++ call_smi_watchers(i, intf->si_dev);
958 ++
959 ++ return 0;
960 ++
961 ++ out_err_bmc_reg:
962 ++ ipmi_bmc_unregister(intf);
963 ++ out_err_started:
964 ++ if (intf->handlers->shutdown)
965 ++ intf->handlers->shutdown(intf->send_info);
966 ++ out_err:
967 ++ list_del_rcu(&intf->link);
968 ++ mutex_unlock(&ipmi_interfaces_mutex);
969 ++ synchronize_srcu(&ipmi_interfaces_srcu);
970 ++ cleanup_srcu_struct(&intf->users_srcu);
971 ++ kref_put(&intf->refcount, intf_free);
972 +
973 + return rv;
974 + }
975 +@@ -3504,7 +3510,8 @@ void ipmi_unregister_smi(struct ipmi_smi *intf)
976 + }
977 + srcu_read_unlock(&intf->users_srcu, index);
978 +
979 +- intf->handlers->shutdown(intf->send_info);
980 ++ if (intf->handlers->shutdown)
981 ++ intf->handlers->shutdown(intf->send_info);
982 +
983 + cleanup_smi_msgs(intf);
984 +
985 +diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
986 +index 90ec010bffbd..5faa917df1b6 100644
987 +--- a/drivers/char/ipmi/ipmi_si_intf.c
988 ++++ b/drivers/char/ipmi/ipmi_si_intf.c
989 +@@ -2083,18 +2083,9 @@ static int try_smi_init(struct smi_info *new_smi)
990 + si_to_str[new_smi->io.si_type]);
991 +
992 + WARN_ON(new_smi->io.dev->init_name != NULL);
993 +- kfree(init_name);
994 +-
995 +- return 0;
996 +-
997 +-out_err:
998 +- if (new_smi->intf) {
999 +- ipmi_unregister_smi(new_smi->intf);
1000 +- new_smi->intf = NULL;
1001 +- }
1002 +
1003 ++ out_err:
1004 + kfree(init_name);
1005 +-
1006 + return rv;
1007 + }
1008 +
1009 +@@ -2227,6 +2218,8 @@ static void shutdown_smi(void *send_info)
1010 +
1011 + kfree(smi_info->si_sm);
1012 + smi_info->si_sm = NULL;
1013 ++
1014 ++ smi_info->intf = NULL;
1015 + }
1016 +
1017 + /*
1018 +@@ -2240,10 +2233,8 @@ static void cleanup_one_si(struct smi_info *smi_info)
1019 +
1020 + list_del(&smi_info->link);
1021 +
1022 +- if (smi_info->intf) {
1023 ++ if (smi_info->intf)
1024 + ipmi_unregister_smi(smi_info->intf);
1025 +- smi_info->intf = NULL;
1026 +- }
1027 +
1028 + if (smi_info->pdev) {
1029 + if (smi_info->pdev_registered)
1030 +diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
1031 +index 18e4650c233b..265d6a6583bc 100644
1032 +--- a/drivers/char/ipmi/ipmi_ssif.c
1033 ++++ b/drivers/char/ipmi/ipmi_ssif.c
1034 +@@ -181,6 +181,8 @@ struct ssif_addr_info {
1035 + struct device *dev;
1036 + struct i2c_client *client;
1037 +
1038 ++ struct i2c_client *added_client;
1039 ++
1040 + struct mutex clients_mutex;
1041 + struct list_head clients;
1042 +
1043 +@@ -1214,18 +1216,11 @@ static void shutdown_ssif(void *send_info)
1044 + complete(&ssif_info->wake_thread);
1045 + kthread_stop(ssif_info->thread);
1046 + }
1047 +-
1048 +- /*
1049 +- * No message can be outstanding now, we have removed the
1050 +- * upper layer and it permitted us to do so.
1051 +- */
1052 +- kfree(ssif_info);
1053 + }
1054 +
1055 + static int ssif_remove(struct i2c_client *client)
1056 + {
1057 + struct ssif_info *ssif_info = i2c_get_clientdata(client);
1058 +- struct ipmi_smi *intf;
1059 + struct ssif_addr_info *addr_info;
1060 +
1061 + if (!ssif_info)
1062 +@@ -1235,9 +1230,7 @@ static int ssif_remove(struct i2c_client *client)
1063 + * After this point, we won't deliver anything asychronously
1064 + * to the message handler. We can unregister ourself.
1065 + */
1066 +- intf = ssif_info->intf;
1067 +- ssif_info->intf = NULL;
1068 +- ipmi_unregister_smi(intf);
1069 ++ ipmi_unregister_smi(ssif_info->intf);
1070 +
1071 + list_for_each_entry(addr_info, &ssif_infos, link) {
1072 + if (addr_info->client == client) {
1073 +@@ -1246,6 +1239,8 @@ static int ssif_remove(struct i2c_client *client)
1074 + }
1075 + }
1076 +
1077 ++ kfree(ssif_info);
1078 ++
1079 + return 0;
1080 + }
1081 +
1082 +@@ -1648,15 +1643,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
1083 +
1084 + out:
1085 + if (rv) {
1086 +- /*
1087 +- * Note that if addr_info->client is assigned, we
1088 +- * leave it. The i2c client hangs around even if we
1089 +- * return a failure here, and the failure here is not
1090 +- * propagated back to the i2c code. This seems to be
1091 +- * design intent, strange as it may be. But if we
1092 +- * don't leave it, ssif_platform_remove will not remove
1093 +- * the client like it should.
1094 +- */
1095 ++ addr_info->client = NULL;
1096 + dev_err(&client->dev, "Unable to start IPMI SSIF: %d\n", rv);
1097 + kfree(ssif_info);
1098 + }
1099 +@@ -1676,7 +1663,8 @@ static int ssif_adapter_handler(struct device *adev, void *opaque)
1100 + if (adev->type != &i2c_adapter_type)
1101 + return 0;
1102 +
1103 +- i2c_new_device(to_i2c_adapter(adev), &addr_info->binfo);
1104 ++ addr_info->added_client = i2c_new_device(to_i2c_adapter(adev),
1105 ++ &addr_info->binfo);
1106 +
1107 + if (!addr_info->adapter_name)
1108 + return 1; /* Only try the first I2C adapter by default. */
1109 +@@ -1849,7 +1837,7 @@ static int ssif_platform_remove(struct platform_device *dev)
1110 + return 0;
1111 +
1112 + mutex_lock(&ssif_infos_mutex);
1113 +- i2c_unregister_device(addr_info->client);
1114 ++ i2c_unregister_device(addr_info->added_client);
1115 +
1116 + list_del(&addr_info->link);
1117 + kfree(addr_info);
1118 +diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c
1119 +index a5d402de5584..20724abd38bd 100644
1120 +--- a/drivers/clk/clk-fixed-factor.c
1121 ++++ b/drivers/clk/clk-fixed-factor.c
1122 +@@ -177,8 +177,15 @@ static struct clk *_of_fixed_factor_clk_setup(struct device_node *node)
1123 +
1124 + clk = clk_register_fixed_factor(NULL, clk_name, parent_name, flags,
1125 + mult, div);
1126 +- if (IS_ERR(clk))
1127 ++ if (IS_ERR(clk)) {
1128 ++ /*
1129 ++ * If parent clock is not registered, registration would fail.
1130 ++ * Clear OF_POPULATED flag so that clock registration can be
1131 ++ * attempted again from probe function.
1132 ++ */
1133 ++ of_node_clear_flag(node, OF_POPULATED);
1134 + return clk;
1135 ++ }
1136 +
1137 + ret = of_clk_add_provider(node, of_clk_src_simple_get, clk);
1138 + if (ret) {
1139 +diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
1140 +index e2ed078abd90..2d96e7966e94 100644
1141 +--- a/drivers/clk/clk.c
1142 ++++ b/drivers/clk/clk.c
1143 +@@ -2933,6 +2933,7 @@ struct clk *__clk_create_clk(struct clk_hw *hw, const char *dev_id,
1144 + return clk;
1145 + }
1146 +
1147 ++/* keep in sync with __clk_put */
1148 + void __clk_free_clk(struct clk *clk)
1149 + {
1150 + clk_prepare_lock();
1151 +@@ -3312,6 +3313,7 @@ int __clk_get(struct clk *clk)
1152 + return 1;
1153 + }
1154 +
1155 ++/* keep in sync with __clk_free_clk */
1156 + void __clk_put(struct clk *clk)
1157 + {
1158 + struct module *owner;
1159 +@@ -3345,6 +3347,7 @@ void __clk_put(struct clk *clk)
1160 +
1161 + module_put(owner);
1162 +
1163 ++ kfree_const(clk->con_id);
1164 + kfree(clk);
1165 + }
1166 +
1167 +diff --git a/drivers/clk/imx/clk-imx6sll.c b/drivers/clk/imx/clk-imx6sll.c
1168 +index 3651c77fbabe..645d8a42007c 100644
1169 +--- a/drivers/clk/imx/clk-imx6sll.c
1170 ++++ b/drivers/clk/imx/clk-imx6sll.c
1171 +@@ -92,6 +92,7 @@ static void __init imx6sll_clocks_init(struct device_node *ccm_node)
1172 +
1173 + np = of_find_compatible_node(NULL, NULL, "fsl,imx6sll-anatop");
1174 + base = of_iomap(np, 0);
1175 ++ of_node_put(np);
1176 + WARN_ON(!base);
1177 +
1178 + /* Do not bypass PLLs initially */
1179 +diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c
1180 +index ba563ba50b40..9f1a40498642 100644
1181 +--- a/drivers/clk/imx/clk-imx6ul.c
1182 ++++ b/drivers/clk/imx/clk-imx6ul.c
1183 +@@ -142,6 +142,7 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node)
1184 +
1185 + np = of_find_compatible_node(NULL, NULL, "fsl,imx6ul-anatop");
1186 + base = of_iomap(np, 0);
1187 ++ of_node_put(np);
1188 + WARN_ON(!base);
1189 +
1190 + 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));
1191 +diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c
1192 +index 44e4e27eddad..6f7637b19738 100644
1193 +--- a/drivers/clk/mvebu/armada-37xx-periph.c
1194 ++++ b/drivers/clk/mvebu/armada-37xx-periph.c
1195 +@@ -429,9 +429,6 @@ static u8 clk_pm_cpu_get_parent(struct clk_hw *hw)
1196 + val &= pm_cpu->mask_mux;
1197 + }
1198 +
1199 +- if (val >= num_parents)
1200 +- return -EINVAL;
1201 +-
1202 + return val;
1203 + }
1204 +
1205 +diff --git a/drivers/clk/tegra/clk-bpmp.c b/drivers/clk/tegra/clk-bpmp.c
1206 +index a896692b74ec..01dada561c10 100644
1207 +--- a/drivers/clk/tegra/clk-bpmp.c
1208 ++++ b/drivers/clk/tegra/clk-bpmp.c
1209 +@@ -586,9 +586,15 @@ static struct clk_hw *tegra_bpmp_clk_of_xlate(struct of_phandle_args *clkspec,
1210 + unsigned int id = clkspec->args[0], i;
1211 + struct tegra_bpmp *bpmp = data;
1212 +
1213 +- for (i = 0; i < bpmp->num_clocks; i++)
1214 +- if (bpmp->clocks[i]->id == id)
1215 +- return &bpmp->clocks[i]->hw;
1216 ++ for (i = 0; i < bpmp->num_clocks; i++) {
1217 ++ struct tegra_bpmp_clk *clk = bpmp->clocks[i];
1218 ++
1219 ++ if (!clk)
1220 ++ continue;
1221 ++
1222 ++ if (clk->id == id)
1223 ++ return &clk->hw;
1224 ++ }
1225 +
1226 + return NULL;
1227 + }
1228 +diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c
1229 +index 051b8c6bae64..a9c85095bd56 100644
1230 +--- a/drivers/crypto/ccp/psp-dev.c
1231 ++++ b/drivers/crypto/ccp/psp-dev.c
1232 +@@ -38,6 +38,17 @@ static DEFINE_MUTEX(sev_cmd_mutex);
1233 + static struct sev_misc_dev *misc_dev;
1234 + static struct psp_device *psp_master;
1235 +
1236 ++static int psp_cmd_timeout = 100;
1237 ++module_param(psp_cmd_timeout, int, 0644);
1238 ++MODULE_PARM_DESC(psp_cmd_timeout, " default timeout value, in seconds, for PSP commands");
1239 ++
1240 ++static int psp_probe_timeout = 5;
1241 ++module_param(psp_probe_timeout, int, 0644);
1242 ++MODULE_PARM_DESC(psp_probe_timeout, " default timeout value, in seconds, during PSP device probe");
1243 ++
1244 ++static bool psp_dead;
1245 ++static int psp_timeout;
1246 ++
1247 + static struct psp_device *psp_alloc_struct(struct sp_device *sp)
1248 + {
1249 + struct device *dev = sp->dev;
1250 +@@ -82,10 +93,19 @@ done:
1251 + return IRQ_HANDLED;
1252 + }
1253 +
1254 +-static void sev_wait_cmd_ioc(struct psp_device *psp, unsigned int *reg)
1255 ++static int sev_wait_cmd_ioc(struct psp_device *psp,
1256 ++ unsigned int *reg, unsigned int timeout)
1257 + {
1258 +- wait_event(psp->sev_int_queue, psp->sev_int_rcvd);
1259 ++ int ret;
1260 ++
1261 ++ ret = wait_event_timeout(psp->sev_int_queue,
1262 ++ psp->sev_int_rcvd, timeout * HZ);
1263 ++ if (!ret)
1264 ++ return -ETIMEDOUT;
1265 ++
1266 + *reg = ioread32(psp->io_regs + PSP_CMDRESP);
1267 ++
1268 ++ return 0;
1269 + }
1270 +
1271 + static int sev_cmd_buffer_len(int cmd)
1272 +@@ -133,12 +153,15 @@ static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret)
1273 + if (!psp)
1274 + return -ENODEV;
1275 +
1276 ++ if (psp_dead)
1277 ++ return -EBUSY;
1278 ++
1279 + /* Get the physical address of the command buffer */
1280 + phys_lsb = data ? lower_32_bits(__psp_pa(data)) : 0;
1281 + phys_msb = data ? upper_32_bits(__psp_pa(data)) : 0;
1282 +
1283 +- dev_dbg(psp->dev, "sev command id %#x buffer 0x%08x%08x\n",
1284 +- cmd, phys_msb, phys_lsb);
1285 ++ dev_dbg(psp->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n",
1286 ++ cmd, phys_msb, phys_lsb, psp_timeout);
1287 +
1288 + print_hex_dump_debug("(in): ", DUMP_PREFIX_OFFSET, 16, 2, data,
1289 + sev_cmd_buffer_len(cmd), false);
1290 +@@ -154,7 +177,18 @@ static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret)
1291 + iowrite32(reg, psp->io_regs + PSP_CMDRESP);
1292 +
1293 + /* wait for command completion */
1294 +- sev_wait_cmd_ioc(psp, &reg);
1295 ++ ret = sev_wait_cmd_ioc(psp, &reg, psp_timeout);
1296 ++ if (ret) {
1297 ++ if (psp_ret)
1298 ++ *psp_ret = 0;
1299 ++
1300 ++ dev_err(psp->dev, "sev command %#x timed out, disabling PSP \n", cmd);
1301 ++ psp_dead = true;
1302 ++
1303 ++ return ret;
1304 ++ }
1305 ++
1306 ++ psp_timeout = psp_cmd_timeout;
1307 +
1308 + if (psp_ret)
1309 + *psp_ret = reg & PSP_CMDRESP_ERR_MASK;
1310 +@@ -886,6 +920,8 @@ void psp_pci_init(void)
1311 +
1312 + psp_master = sp->psp_data;
1313 +
1314 ++ psp_timeout = psp_probe_timeout;
1315 ++
1316 + if (sev_get_api_version())
1317 + goto err;
1318 +
1319 +diff --git a/drivers/crypto/sahara.c b/drivers/crypto/sahara.c
1320 +index 0f2245e1af2b..97d86dca7e85 100644
1321 +--- a/drivers/crypto/sahara.c
1322 ++++ b/drivers/crypto/sahara.c
1323 +@@ -1351,7 +1351,7 @@ err_sha_v4_algs:
1324 +
1325 + err_sha_v3_algs:
1326 + for (j = 0; j < k; j++)
1327 +- crypto_unregister_ahash(&sha_v4_algs[j]);
1328 ++ crypto_unregister_ahash(&sha_v3_algs[j]);
1329 +
1330 + err_aes_algs:
1331 + for (j = 0; j < i; j++)
1332 +@@ -1367,7 +1367,7 @@ static void sahara_unregister_algs(struct sahara_dev *dev)
1333 + for (i = 0; i < ARRAY_SIZE(aes_algs); i++)
1334 + crypto_unregister_alg(&aes_algs[i]);
1335 +
1336 +- for (i = 0; i < ARRAY_SIZE(sha_v4_algs); i++)
1337 ++ for (i = 0; i < ARRAY_SIZE(sha_v3_algs); i++)
1338 + crypto_unregister_ahash(&sha_v3_algs[i]);
1339 +
1340 + if (dev->version > SAHARA_VERSION_3)
1341 +diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
1342 +index 0b5b3abe054e..e26adf67e218 100644
1343 +--- a/drivers/devfreq/devfreq.c
1344 ++++ b/drivers/devfreq/devfreq.c
1345 +@@ -625,7 +625,8 @@ struct devfreq *devfreq_add_device(struct device *dev,
1346 + err = device_register(&devfreq->dev);
1347 + if (err) {
1348 + mutex_unlock(&devfreq->lock);
1349 +- goto err_dev;
1350 ++ put_device(&devfreq->dev);
1351 ++ goto err_out;
1352 + }
1353 +
1354 + devfreq->trans_table =
1355 +@@ -672,6 +673,7 @@ err_init:
1356 + mutex_unlock(&devfreq_list_lock);
1357 +
1358 + device_unregister(&devfreq->dev);
1359 ++ devfreq = NULL;
1360 + err_dev:
1361 + if (devfreq)
1362 + kfree(devfreq);
1363 +diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c
1364 +index c6589ccf1b9a..d349fedf4ab2 100644
1365 +--- a/drivers/dma/mv_xor_v2.c
1366 ++++ b/drivers/dma/mv_xor_v2.c
1367 +@@ -899,6 +899,8 @@ static int mv_xor_v2_remove(struct platform_device *pdev)
1368 +
1369 + platform_msi_domain_free_irqs(&pdev->dev);
1370 +
1371 ++ tasklet_kill(&xor_dev->irq_tasklet);
1372 ++
1373 + clk_disable_unprepare(xor_dev->clk);
1374 +
1375 + return 0;
1376 +diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
1377 +index de0957fe9668..bb6dfa2e1e8a 100644
1378 +--- a/drivers/dma/pl330.c
1379 ++++ b/drivers/dma/pl330.c
1380 +@@ -2257,13 +2257,14 @@ static int pl330_terminate_all(struct dma_chan *chan)
1381 +
1382 + pm_runtime_get_sync(pl330->ddma.dev);
1383 + spin_lock_irqsave(&pch->lock, flags);
1384 ++
1385 + spin_lock(&pl330->lock);
1386 + _stop(pch->thread);
1387 +- spin_unlock(&pl330->lock);
1388 +-
1389 + pch->thread->req[0].desc = NULL;
1390 + pch->thread->req[1].desc = NULL;
1391 + pch->thread->req_running = -1;
1392 ++ spin_unlock(&pl330->lock);
1393 ++
1394 + power_down = pch->active;
1395 + pch->active = false;
1396 +
1397 +diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
1398 +index 2a2ccd9c78e4..8305a1ce8a9b 100644
1399 +--- a/drivers/dma/sh/rcar-dmac.c
1400 ++++ b/drivers/dma/sh/rcar-dmac.c
1401 +@@ -774,8 +774,9 @@ static void rcar_dmac_sync_tcr(struct rcar_dmac_chan *chan)
1402 + /* make sure all remaining data was flushed */
1403 + rcar_dmac_chcr_de_barrier(chan);
1404 +
1405 +- /* back DE */
1406 +- rcar_dmac_chan_write(chan, RCAR_DMACHCR, chcr);
1407 ++ /* back DE if remain data exists */
1408 ++ if (rcar_dmac_chan_read(chan, RCAR_DMATCR))
1409 ++ rcar_dmac_chan_write(chan, RCAR_DMACHCR, chcr);
1410 + }
1411 +
1412 + static void rcar_dmac_chan_halt(struct rcar_dmac_chan *chan)
1413 +diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
1414 +index b5214c143fee..388a929baf95 100644
1415 +--- a/drivers/firmware/efi/arm-init.c
1416 ++++ b/drivers/firmware/efi/arm-init.c
1417 +@@ -259,7 +259,6 @@ void __init efi_init(void)
1418 +
1419 + reserve_regions();
1420 + efi_esrt_init();
1421 +- efi_memmap_unmap();
1422 +
1423 + memblock_reserve(params.mmap & PAGE_MASK,
1424 + PAGE_ALIGN(params.mmap_size +
1425 +diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
1426 +index 5889cbea60b8..4712445c3213 100644
1427 +--- a/drivers/firmware/efi/arm-runtime.c
1428 ++++ b/drivers/firmware/efi/arm-runtime.c
1429 +@@ -110,11 +110,13 @@ static int __init arm_enable_runtime_services(void)
1430 + {
1431 + u64 mapsize;
1432 +
1433 +- if (!efi_enabled(EFI_BOOT)) {
1434 ++ if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
1435 + pr_info("EFI services will not be available.\n");
1436 + return 0;
1437 + }
1438 +
1439 ++ efi_memmap_unmap();
1440 ++
1441 + if (efi_runtime_disabled()) {
1442 + pr_info("EFI runtime services will be disabled.\n");
1443 + return 0;
1444 +diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
1445 +index 1ab80e06e7c5..e5d80ebd72b6 100644
1446 +--- a/drivers/firmware/efi/esrt.c
1447 ++++ b/drivers/firmware/efi/esrt.c
1448 +@@ -326,7 +326,8 @@ void __init efi_esrt_init(void)
1449 +
1450 + end = esrt_data + size;
1451 + pr_info("Reserving ESRT space from %pa to %pa.\n", &esrt_data, &end);
1452 +- efi_mem_reserve(esrt_data, esrt_data_size);
1453 ++ if (md.type == EFI_BOOT_SERVICES_DATA)
1454 ++ efi_mem_reserve(esrt_data, esrt_data_size);
1455 +
1456 + pr_debug("esrt-init: loaded.\n");
1457 + }
1458 +diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
1459 +index 2e33fd552899..99070e2ac3cd 100644
1460 +--- a/drivers/gpio/gpio-pxa.c
1461 ++++ b/drivers/gpio/gpio-pxa.c
1462 +@@ -665,6 +665,8 @@ static int pxa_gpio_probe(struct platform_device *pdev)
1463 + pchip->irq0 = irq0;
1464 + pchip->irq1 = irq1;
1465 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1466 ++ if (!res)
1467 ++ return -EINVAL;
1468 + gpio_reg_base = devm_ioremap(&pdev->dev, res->start,
1469 + resource_size(res));
1470 + if (!gpio_reg_base)
1471 +diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
1472 +index 1a8e20363861..a7e49fef73d4 100644
1473 +--- a/drivers/gpio/gpiolib.h
1474 ++++ b/drivers/gpio/gpiolib.h
1475 +@@ -92,7 +92,7 @@ struct acpi_gpio_info {
1476 + };
1477 +
1478 + /* gpio suffixes used for ACPI and device tree lookup */
1479 +-static const char * const gpio_suffixes[] = { "gpios", "gpio" };
1480 ++static __maybe_unused const char * const gpio_suffixes[] = { "gpios", "gpio" };
1481 +
1482 + #ifdef CONFIG_OF_GPIO
1483 + struct gpio_desc *of_find_gpio(struct device *dev,
1484 +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
1485 +index c3744d89352c..ebe79bf00145 100644
1486 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
1487 ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
1488 +@@ -188,9 +188,9 @@ void __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd,
1489 + *doorbell_off = kfd->doorbell_id_offset + inx;
1490 +
1491 + pr_debug("Get kernel queue doorbell\n"
1492 +- " doorbell offset == 0x%08X\n"
1493 +- " kernel address == %p\n",
1494 +- *doorbell_off, (kfd->doorbell_kernel_ptr + inx));
1495 ++ " doorbell offset == 0x%08X\n"
1496 ++ " doorbell index == 0x%x\n",
1497 ++ *doorbell_off, inx);
1498 +
1499 + return kfd->doorbell_kernel_ptr + inx;
1500 + }
1501 +@@ -199,7 +199,8 @@ void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr)
1502 + {
1503 + unsigned int inx;
1504 +
1505 +- inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr);
1506 ++ inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr)
1507 ++ * sizeof(u32) / kfd->device_info->doorbell_size;
1508 +
1509 + mutex_lock(&kfd->doorbell_mutex);
1510 + __clear_bit(inx, kfd->doorbell_available_index);
1511 +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1512 +index 1d80b4f7c681..4694386cc623 100644
1513 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1514 ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1515 +@@ -244,6 +244,8 @@ struct kfd_process *kfd_get_process(const struct task_struct *thread)
1516 + return ERR_PTR(-EINVAL);
1517 +
1518 + process = find_process(thread);
1519 ++ if (!process)
1520 ++ return ERR_PTR(-EINVAL);
1521 +
1522 + return process;
1523 + }
1524 +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
1525 +index 8a7890b03d97..6ccd59b87403 100644
1526 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
1527 ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
1528 +@@ -497,6 +497,10 @@ static bool detect_dp(
1529 + sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT_MST;
1530 + link->type = dc_connection_mst_branch;
1531 +
1532 ++ dal_ddc_service_set_transaction_type(
1533 ++ link->ddc,
1534 ++ sink_caps->transaction_type);
1535 ++
1536 + /*
1537 + * This call will initiate MST topology discovery. Which
1538 + * will detect MST ports and add new DRM connector DRM
1539 +diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
1540 +index d567be49c31b..b487774d8041 100644
1541 +--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
1542 ++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
1543 +@@ -1020,7 +1020,7 @@ static int pp_get_display_power_level(void *handle,
1544 + static int pp_get_current_clocks(void *handle,
1545 + struct amd_pp_clock_info *clocks)
1546 + {
1547 +- struct amd_pp_simple_clock_info simple_clocks;
1548 ++ struct amd_pp_simple_clock_info simple_clocks = { 0 };
1549 + struct pp_clock_info hw_clocks;
1550 + struct pp_hwmgr *hwmgr = handle;
1551 + int ret = 0;
1552 +@@ -1056,7 +1056,10 @@ static int pp_get_current_clocks(void *handle,
1553 + clocks->max_engine_clock_in_sr = hw_clocks.max_eng_clk;
1554 + clocks->min_engine_clock_in_sr = hw_clocks.min_eng_clk;
1555 +
1556 +- clocks->max_clocks_state = simple_clocks.level;
1557 ++ if (simple_clocks.level == 0)
1558 ++ clocks->max_clocks_state = PP_DAL_POWERLEVEL_7;
1559 ++ else
1560 ++ clocks->max_clocks_state = simple_clocks.level;
1561 +
1562 + if (0 == phm_get_current_shallow_sleep_clocks(hwmgr, &hwmgr->current_ps->hardware, &hw_clocks)) {
1563 + clocks->max_engine_clock_in_sr = hw_clocks.max_eng_clk;
1564 +@@ -1159,6 +1162,8 @@ static int pp_get_display_mode_validation_clocks(void *handle,
1565 + if (!hwmgr || !hwmgr->pm_en ||!clocks)
1566 + return -EINVAL;
1567 +
1568 ++ clocks->level = PP_DAL_POWERLEVEL_7;
1569 ++
1570 + mutex_lock(&hwmgr->smu_lock);
1571 +
1572 + if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DynamicPatchPowerState))
1573 +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
1574 +index f8e866ceda02..77779adeef28 100644
1575 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
1576 ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
1577 +@@ -4555,12 +4555,12 @@ static int smu7_get_sclks(struct pp_hwmgr *hwmgr, struct amd_pp_clocks *clocks)
1578 + return -EINVAL;
1579 + dep_sclk_table = table_info->vdd_dep_on_sclk;
1580 + for (i = 0; i < dep_sclk_table->count; i++)
1581 +- clocks->clock[i] = dep_sclk_table->entries[i].clk;
1582 ++ clocks->clock[i] = dep_sclk_table->entries[i].clk * 10;
1583 + clocks->count = dep_sclk_table->count;
1584 + } else if (hwmgr->pp_table_version == PP_TABLE_V0) {
1585 + sclk_table = hwmgr->dyn_state.vddc_dependency_on_sclk;
1586 + for (i = 0; i < sclk_table->count; i++)
1587 +- clocks->clock[i] = sclk_table->entries[i].clk;
1588 ++ clocks->clock[i] = sclk_table->entries[i].clk * 10;
1589 + clocks->count = sclk_table->count;
1590 + }
1591 +
1592 +@@ -4592,7 +4592,7 @@ static int smu7_get_mclks(struct pp_hwmgr *hwmgr, struct amd_pp_clocks *clocks)
1593 + return -EINVAL;
1594 + dep_mclk_table = table_info->vdd_dep_on_mclk;
1595 + for (i = 0; i < dep_mclk_table->count; i++) {
1596 +- clocks->clock[i] = dep_mclk_table->entries[i].clk;
1597 ++ clocks->clock[i] = dep_mclk_table->entries[i].clk * 10;
1598 + clocks->latency[i] = smu7_get_mem_latency(hwmgr,
1599 + dep_mclk_table->entries[i].clk);
1600 + }
1601 +@@ -4600,7 +4600,7 @@ static int smu7_get_mclks(struct pp_hwmgr *hwmgr, struct amd_pp_clocks *clocks)
1602 + } else if (hwmgr->pp_table_version == PP_TABLE_V0) {
1603 + mclk_table = hwmgr->dyn_state.vddc_dependency_on_mclk;
1604 + for (i = 0; i < mclk_table->count; i++)
1605 +- clocks->clock[i] = mclk_table->entries[i].clk;
1606 ++ clocks->clock[i] = mclk_table->entries[i].clk * 10;
1607 + clocks->count = mclk_table->count;
1608 + }
1609 + return 0;
1610 +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
1611 +index 617557bd8c24..0adfc5392cd3 100644
1612 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
1613 ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
1614 +@@ -1605,17 +1605,17 @@ static int smu8_get_clock_by_type(struct pp_hwmgr *hwmgr, enum amd_pp_clock_type
1615 + switch (type) {
1616 + case amd_pp_disp_clock:
1617 + for (i = 0; i < clocks->count; i++)
1618 +- clocks->clock[i] = data->sys_info.display_clock[i];
1619 ++ clocks->clock[i] = data->sys_info.display_clock[i] * 10;
1620 + break;
1621 + case amd_pp_sys_clock:
1622 + table = hwmgr->dyn_state.vddc_dependency_on_sclk;
1623 + for (i = 0; i < clocks->count; i++)
1624 +- clocks->clock[i] = table->entries[i].clk;
1625 ++ clocks->clock[i] = table->entries[i].clk * 10;
1626 + break;
1627 + case amd_pp_mem_clock:
1628 + clocks->count = SMU8_NUM_NBPMEMORYCLOCK;
1629 + for (i = 0; i < clocks->count; i++)
1630 +- clocks->clock[i] = data->sys_info.nbp_memory_clock[clocks->count - 1 - i];
1631 ++ clocks->clock[i] = data->sys_info.nbp_memory_clock[clocks->count - 1 - i] * 10;
1632 + break;
1633 + default:
1634 + return -1;
1635 +diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
1636 +index 963a4dba8213..9109b69cd052 100644
1637 +--- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
1638 ++++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
1639 +@@ -160,7 +160,11 @@ nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf,
1640 + args.ustate = value;
1641 + }
1642 +
1643 ++ ret = pm_runtime_get_sync(drm->dev);
1644 ++ if (IS_ERR_VALUE(ret) && ret != -EACCES)
1645 ++ return ret;
1646 + ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_USER, &args, sizeof(args));
1647 ++ pm_runtime_put_autosuspend(drm->dev);
1648 + if (ret < 0)
1649 + return ret;
1650 +
1651 +diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
1652 +index f5d3158f0378..c7ec86d6c3c9 100644
1653 +--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
1654 ++++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
1655 +@@ -908,8 +908,10 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
1656 + get_task_comm(tmpname, current);
1657 + snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
1658 +
1659 +- if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL)))
1660 +- return ret;
1661 ++ if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
1662 ++ ret = -ENOMEM;
1663 ++ goto done;
1664 ++ }
1665 +
1666 + ret = nouveau_cli_init(drm, name, cli);
1667 + if (ret)
1668 +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
1669 +index 78597da6313a..0e372a190d3f 100644
1670 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
1671 ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
1672 +@@ -23,6 +23,10 @@
1673 + #ifdef CONFIG_NOUVEAU_PLATFORM_DRIVER
1674 + #include "priv.h"
1675 +
1676 ++#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
1677 ++#include <asm/dma-iommu.h>
1678 ++#endif
1679 ++
1680 + static int
1681 + nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
1682 + {
1683 +@@ -105,6 +109,15 @@ nvkm_device_tegra_probe_iommu(struct nvkm_device_tegra *tdev)
1684 + unsigned long pgsize_bitmap;
1685 + int ret;
1686 +
1687 ++#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
1688 ++ if (dev->archdata.mapping) {
1689 ++ struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1690 ++
1691 ++ arm_iommu_detach_device(dev);
1692 ++ arm_iommu_release_mapping(mapping);
1693 ++ }
1694 ++#endif
1695 ++
1696 + if (!tdev->func->iommu_bit)
1697 + return;
1698 +
1699 +diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
1700 +index a188a3959f1a..6ad827b93ae1 100644
1701 +--- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
1702 ++++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
1703 +@@ -823,7 +823,7 @@ static void s6e8aa0_read_mtp_id(struct s6e8aa0 *ctx)
1704 + int ret, i;
1705 +
1706 + ret = s6e8aa0_dcs_read(ctx, 0xd1, id, ARRAY_SIZE(id));
1707 +- if (ret < ARRAY_SIZE(id) || id[0] == 0x00) {
1708 ++ if (ret < 0 || ret < ARRAY_SIZE(id) || id[0] == 0x00) {
1709 + dev_err(ctx->dev, "read id failed\n");
1710 + ctx->error = -EIO;
1711 + return;
1712 +diff --git a/drivers/gpu/ipu-v3/ipu-csi.c b/drivers/gpu/ipu-v3/ipu-csi.c
1713 +index 5450a2db1219..2beadb3f79c2 100644
1714 +--- a/drivers/gpu/ipu-v3/ipu-csi.c
1715 ++++ b/drivers/gpu/ipu-v3/ipu-csi.c
1716 +@@ -318,13 +318,17 @@ static int mbus_code_to_bus_cfg(struct ipu_csi_bus_config *cfg, u32 mbus_code)
1717 + /*
1718 + * Fill a CSI bus config struct from mbus_config and mbus_framefmt.
1719 + */
1720 +-static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
1721 ++static int fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
1722 + struct v4l2_mbus_config *mbus_cfg,
1723 + struct v4l2_mbus_framefmt *mbus_fmt)
1724 + {
1725 ++ int ret;
1726 ++
1727 + memset(csicfg, 0, sizeof(*csicfg));
1728 +
1729 +- mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
1730 ++ ret = mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
1731 ++ if (ret < 0)
1732 ++ return ret;
1733 +
1734 + switch (mbus_cfg->type) {
1735 + case V4L2_MBUS_PARALLEL:
1736 +@@ -356,6 +360,8 @@ static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
1737 + /* will never get here, keep compiler quiet */
1738 + break;
1739 + }
1740 ++
1741 ++ return 0;
1742 + }
1743 +
1744 + int ipu_csi_init_interface(struct ipu_csi *csi,
1745 +@@ -365,8 +371,11 @@ int ipu_csi_init_interface(struct ipu_csi *csi,
1746 + struct ipu_csi_bus_config cfg;
1747 + unsigned long flags;
1748 + u32 width, height, data = 0;
1749 ++ int ret;
1750 +
1751 +- fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
1752 ++ ret = fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
1753 ++ if (ret < 0)
1754 ++ return ret;
1755 +
1756 + /* set default sensor frame width and height */
1757 + width = mbus_fmt->width;
1758 +@@ -587,11 +596,14 @@ int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc,
1759 + struct ipu_csi_bus_config cfg;
1760 + unsigned long flags;
1761 + u32 temp;
1762 ++ int ret;
1763 +
1764 + if (vc > 3)
1765 + return -EINVAL;
1766 +
1767 +- mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
1768 ++ ret = mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
1769 ++ if (ret < 0)
1770 ++ return ret;
1771 +
1772 + spin_lock_irqsave(&csi->lock, flags);
1773 +
1774 +diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
1775 +index b10fe26c4891..c9a466be7709 100644
1776 +--- a/drivers/hv/vmbus_drv.c
1777 ++++ b/drivers/hv/vmbus_drv.c
1778 +@@ -1178,6 +1178,9 @@ static ssize_t vmbus_chan_attr_show(struct kobject *kobj,
1779 + if (!attribute->show)
1780 + return -EIO;
1781 +
1782 ++ if (chan->state != CHANNEL_OPENED_STATE)
1783 ++ return -EINVAL;
1784 ++
1785 + return attribute->show(chan, buf);
1786 + }
1787 +
1788 +diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
1789 +index 9bc04c50d45b..1d94ebec027b 100644
1790 +--- a/drivers/hwtracing/coresight/coresight-etm4x.c
1791 ++++ b/drivers/hwtracing/coresight/coresight-etm4x.c
1792 +@@ -1027,7 +1027,8 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
1793 + }
1794 +
1795 + pm_runtime_put(&adev->dev);
1796 +- dev_info(dev, "%s initialized\n", (char *)id->data);
1797 ++ dev_info(dev, "CPU%d: ETM v%d.%d initialized\n",
1798 ++ drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
1799 +
1800 + if (boot_enable) {
1801 + coresight_enable(drvdata->csdev);
1802 +@@ -1045,23 +1046,19 @@ err_arch_supported:
1803 + return ret;
1804 + }
1805 +
1806 ++#define ETM4x_AMBA_ID(pid) \
1807 ++ { \
1808 ++ .id = pid, \
1809 ++ .mask = 0x000fffff, \
1810 ++ }
1811 ++
1812 + static const struct amba_id etm4_ids[] = {
1813 +- { /* ETM 4.0 - Cortex-A53 */
1814 +- .id = 0x000bb95d,
1815 +- .mask = 0x000fffff,
1816 +- .data = "ETM 4.0",
1817 +- },
1818 +- { /* ETM 4.0 - Cortex-A57 */
1819 +- .id = 0x000bb95e,
1820 +- .mask = 0x000fffff,
1821 +- .data = "ETM 4.0",
1822 +- },
1823 +- { /* ETM 4.0 - A72, Maia, HiSilicon */
1824 +- .id = 0x000bb95a,
1825 +- .mask = 0x000fffff,
1826 +- .data = "ETM 4.0",
1827 +- },
1828 +- { 0, 0},
1829 ++ ETM4x_AMBA_ID(0x000bb95d), /* Cortex-A53 */
1830 ++ ETM4x_AMBA_ID(0x000bb95e), /* Cortex-A57 */
1831 ++ ETM4x_AMBA_ID(0x000bb95a), /* Cortex-A72 */
1832 ++ ETM4x_AMBA_ID(0x000bb959), /* Cortex-A73 */
1833 ++ ETM4x_AMBA_ID(0x000bb9da), /* Cortex-A35 */
1834 ++ {},
1835 + };
1836 +
1837 + static struct amba_driver etm4x_driver = {
1838 +diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
1839 +index 01b7457fe8fc..459ef930d98c 100644
1840 +--- a/drivers/hwtracing/coresight/coresight-tpiu.c
1841 ++++ b/drivers/hwtracing/coresight/coresight-tpiu.c
1842 +@@ -40,8 +40,9 @@
1843 +
1844 + /** register definition **/
1845 + /* FFSR - 0x300 */
1846 +-#define FFSR_FT_STOPPED BIT(1)
1847 ++#define FFSR_FT_STOPPED_BIT 1
1848 + /* FFCR - 0x304 */
1849 ++#define FFCR_FON_MAN_BIT 6
1850 + #define FFCR_FON_MAN BIT(6)
1851 + #define FFCR_STOP_FI BIT(12)
1852 +
1853 +@@ -86,9 +87,9 @@ static void tpiu_disable_hw(struct tpiu_drvdata *drvdata)
1854 + /* Generate manual flush */
1855 + writel_relaxed(FFCR_STOP_FI | FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
1856 + /* Wait for flush to complete */
1857 +- coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN, 0);
1858 ++ coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN_BIT, 0);
1859 + /* Wait for formatter to stop */
1860 +- coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED, 1);
1861 ++ coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED_BIT, 1);
1862 +
1863 + CS_LOCK(drvdata->base);
1864 + }
1865 +diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
1866 +index 29e834aab539..b673718952f6 100644
1867 +--- a/drivers/hwtracing/coresight/coresight.c
1868 ++++ b/drivers/hwtracing/coresight/coresight.c
1869 +@@ -108,7 +108,7 @@ static int coresight_find_link_inport(struct coresight_device *csdev,
1870 + dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n",
1871 + dev_name(&parent->dev), dev_name(&csdev->dev));
1872 +
1873 +- return 0;
1874 ++ return -ENODEV;
1875 + }
1876 +
1877 + static int coresight_find_link_outport(struct coresight_device *csdev,
1878 +@@ -126,7 +126,7 @@ static int coresight_find_link_outport(struct coresight_device *csdev,
1879 + dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n",
1880 + dev_name(&csdev->dev), dev_name(&child->dev));
1881 +
1882 +- return 0;
1883 ++ return -ENODEV;
1884 + }
1885 +
1886 + static int coresight_enable_sink(struct coresight_device *csdev, u32 mode)
1887 +@@ -179,6 +179,9 @@ static int coresight_enable_link(struct coresight_device *csdev,
1888 + else
1889 + refport = 0;
1890 +
1891 ++ if (refport < 0)
1892 ++ return refport;
1893 ++
1894 + if (atomic_inc_return(&csdev->refcnt[refport]) == 1) {
1895 + if (link_ops(csdev)->enable) {
1896 + ret = link_ops(csdev)->enable(csdev, inport, outport);
1897 +diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
1898 +index 715b6fdb4989..5c8ea4e9203c 100644
1899 +--- a/drivers/i2c/busses/i2c-aspeed.c
1900 ++++ b/drivers/i2c/busses/i2c-aspeed.c
1901 +@@ -111,22 +111,22 @@
1902 + #define ASPEED_I2CD_DEV_ADDR_MASK GENMASK(6, 0)
1903 +
1904 + enum aspeed_i2c_master_state {
1905 ++ ASPEED_I2C_MASTER_INACTIVE,
1906 + ASPEED_I2C_MASTER_START,
1907 + ASPEED_I2C_MASTER_TX_FIRST,
1908 + ASPEED_I2C_MASTER_TX,
1909 + ASPEED_I2C_MASTER_RX_FIRST,
1910 + ASPEED_I2C_MASTER_RX,
1911 + ASPEED_I2C_MASTER_STOP,
1912 +- ASPEED_I2C_MASTER_INACTIVE,
1913 + };
1914 +
1915 + enum aspeed_i2c_slave_state {
1916 ++ ASPEED_I2C_SLAVE_STOP,
1917 + ASPEED_I2C_SLAVE_START,
1918 + ASPEED_I2C_SLAVE_READ_REQUESTED,
1919 + ASPEED_I2C_SLAVE_READ_PROCESSED,
1920 + ASPEED_I2C_SLAVE_WRITE_REQUESTED,
1921 + ASPEED_I2C_SLAVE_WRITE_RECEIVED,
1922 +- ASPEED_I2C_SLAVE_STOP,
1923 + };
1924 +
1925 + struct aspeed_i2c_bus {
1926 +diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1927 +index dafcb6f019b3..2702ead01a03 100644
1928 +--- a/drivers/infiniband/core/cma.c
1929 ++++ b/drivers/infiniband/core/cma.c
1930 +@@ -722,6 +722,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
1931 + dgid = (union ib_gid *) &addr->sib_addr;
1932 + pkey = ntohs(addr->sib_pkey);
1933 +
1934 ++ mutex_lock(&lock);
1935 + list_for_each_entry(cur_dev, &dev_list, list) {
1936 + for (p = 1; p <= cur_dev->device->phys_port_cnt; ++p) {
1937 + if (!rdma_cap_af_ib(cur_dev->device, p))
1938 +@@ -748,18 +749,19 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
1939 + cma_dev = cur_dev;
1940 + sgid = gid;
1941 + id_priv->id.port_num = p;
1942 ++ goto found;
1943 + }
1944 + }
1945 + }
1946 + }
1947 +-
1948 +- if (!cma_dev)
1949 +- return -ENODEV;
1950 ++ mutex_unlock(&lock);
1951 ++ return -ENODEV;
1952 +
1953 + found:
1954 + cma_attach_to_dev(id_priv, cma_dev);
1955 +- addr = (struct sockaddr_ib *) cma_src_addr(id_priv);
1956 +- memcpy(&addr->sib_addr, &sgid, sizeof sgid);
1957 ++ mutex_unlock(&lock);
1958 ++ addr = (struct sockaddr_ib *)cma_src_addr(id_priv);
1959 ++ memcpy(&addr->sib_addr, &sgid, sizeof(sgid));
1960 + cma_translate_ib(addr, &id_priv->id.route.addr.dev_addr);
1961 + return 0;
1962 + }
1963 +diff --git a/drivers/infiniband/hw/mlx5/cong.c b/drivers/infiniband/hw/mlx5/cong.c
1964 +index 985fa2637390..7e4e358a4fd8 100644
1965 +--- a/drivers/infiniband/hw/mlx5/cong.c
1966 ++++ b/drivers/infiniband/hw/mlx5/cong.c
1967 +@@ -359,9 +359,6 @@ static ssize_t get_param(struct file *filp, char __user *buf, size_t count,
1968 + int ret;
1969 + char lbuf[11];
1970 +
1971 +- if (*pos)
1972 +- return 0;
1973 +-
1974 + ret = mlx5_ib_get_cc_params(param->dev, param->port_num, offset, &var);
1975 + if (ret)
1976 + return ret;
1977 +@@ -370,11 +367,7 @@ static ssize_t get_param(struct file *filp, char __user *buf, size_t count,
1978 + if (ret < 0)
1979 + return ret;
1980 +
1981 +- if (copy_to_user(buf, lbuf, ret))
1982 +- return -EFAULT;
1983 +-
1984 +- *pos += ret;
1985 +- return ret;
1986 ++ return simple_read_from_buffer(buf, count, pos, lbuf, ret);
1987 + }
1988 +
1989 + static const struct file_operations dbg_cc_fops = {
1990 +diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
1991 +index 90a9c461cedc..308456d28afb 100644
1992 +--- a/drivers/infiniband/hw/mlx5/mr.c
1993 ++++ b/drivers/infiniband/hw/mlx5/mr.c
1994 +@@ -271,16 +271,16 @@ static ssize_t size_write(struct file *filp, const char __user *buf,
1995 + {
1996 + struct mlx5_cache_ent *ent = filp->private_data;
1997 + struct mlx5_ib_dev *dev = ent->dev;
1998 +- char lbuf[20];
1999 ++ char lbuf[20] = {0};
2000 + u32 var;
2001 + int err;
2002 + int c;
2003 +
2004 +- if (copy_from_user(lbuf, buf, sizeof(lbuf)))
2005 ++ count = min(count, sizeof(lbuf) - 1);
2006 ++ if (copy_from_user(lbuf, buf, count))
2007 + return -EFAULT;
2008 +
2009 + c = order2idx(dev, ent->order);
2010 +- lbuf[sizeof(lbuf) - 1] = 0;
2011 +
2012 + if (sscanf(lbuf, "%u", &var) != 1)
2013 + return -EINVAL;
2014 +@@ -310,19 +310,11 @@ static ssize_t size_read(struct file *filp, char __user *buf, size_t count,
2015 + char lbuf[20];
2016 + int err;
2017 +
2018 +- if (*pos)
2019 +- return 0;
2020 +-
2021 + err = snprintf(lbuf, sizeof(lbuf), "%d\n", ent->size);
2022 + if (err < 0)
2023 + return err;
2024 +
2025 +- if (copy_to_user(buf, lbuf, err))
2026 +- return -EFAULT;
2027 +-
2028 +- *pos += err;
2029 +-
2030 +- return err;
2031 ++ return simple_read_from_buffer(buf, count, pos, lbuf, err);
2032 + }
2033 +
2034 + static const struct file_operations size_fops = {
2035 +@@ -337,16 +329,16 @@ static ssize_t limit_write(struct file *filp, const char __user *buf,
2036 + {
2037 + struct mlx5_cache_ent *ent = filp->private_data;
2038 + struct mlx5_ib_dev *dev = ent->dev;
2039 +- char lbuf[20];
2040 ++ char lbuf[20] = {0};
2041 + u32 var;
2042 + int err;
2043 + int c;
2044 +
2045 +- if (copy_from_user(lbuf, buf, sizeof(lbuf)))
2046 ++ count = min(count, sizeof(lbuf) - 1);
2047 ++ if (copy_from_user(lbuf, buf, count))
2048 + return -EFAULT;
2049 +
2050 + c = order2idx(dev, ent->order);
2051 +- lbuf[sizeof(lbuf) - 1] = 0;
2052 +
2053 + if (sscanf(lbuf, "%u", &var) != 1)
2054 + return -EINVAL;
2055 +@@ -372,19 +364,11 @@ static ssize_t limit_read(struct file *filp, char __user *buf, size_t count,
2056 + char lbuf[20];
2057 + int err;
2058 +
2059 +- if (*pos)
2060 +- return 0;
2061 +-
2062 + err = snprintf(lbuf, sizeof(lbuf), "%d\n", ent->limit);
2063 + if (err < 0)
2064 + return err;
2065 +
2066 +- if (copy_to_user(buf, lbuf, err))
2067 +- return -EFAULT;
2068 +-
2069 +- *pos += err;
2070 +-
2071 +- return err;
2072 ++ return simple_read_from_buffer(buf, count, pos, lbuf, err);
2073 + }
2074 +
2075 + static const struct file_operations limit_fops = {
2076 +diff --git a/drivers/infiniband/sw/rxe/rxe_recv.c b/drivers/infiniband/sw/rxe/rxe_recv.c
2077 +index dfba44a40f0b..fe45d6cad6cd 100644
2078 +--- a/drivers/infiniband/sw/rxe/rxe_recv.c
2079 ++++ b/drivers/infiniband/sw/rxe/rxe_recv.c
2080 +@@ -225,9 +225,14 @@ static int hdr_check(struct rxe_pkt_info *pkt)
2081 + goto err1;
2082 + }
2083 +
2084 ++ if (unlikely(qpn == 0)) {
2085 ++ pr_warn_once("QP 0 not supported");
2086 ++ goto err1;
2087 ++ }
2088 ++
2089 + if (qpn != IB_MULTICAST_QPN) {
2090 +- index = (qpn == 0) ? port->qp_smi_index :
2091 +- ((qpn == 1) ? port->qp_gsi_index : qpn);
2092 ++ index = (qpn == 1) ? port->qp_gsi_index : qpn;
2093 ++
2094 + qp = rxe_pool_get_index(&rxe->qp_pool, index);
2095 + if (unlikely(!qp)) {
2096 + pr_warn_ratelimited("no qp matches qpn 0x%x\n", qpn);
2097 +diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2098 +index 6535d9beb24d..a620701f9d41 100644
2099 +--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2100 ++++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
2101 +@@ -1028,12 +1028,14 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
2102 +
2103 + skb_queue_head_init(&skqueue);
2104 +
2105 ++ netif_tx_lock_bh(p->dev);
2106 + spin_lock_irq(&priv->lock);
2107 + set_bit(IPOIB_FLAG_OPER_UP, &p->flags);
2108 + if (p->neigh)
2109 + while ((skb = __skb_dequeue(&p->neigh->queue)))
2110 + __skb_queue_tail(&skqueue, skb);
2111 + spin_unlock_irq(&priv->lock);
2112 ++ netif_tx_unlock_bh(p->dev);
2113 +
2114 + while ((skb = __skb_dequeue(&skqueue))) {
2115 + skb->dev = p->dev;
2116 +diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2117 +index 26cde95bc0f3..7630d5ed2b41 100644
2118 +--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
2119 ++++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2120 +@@ -1787,7 +1787,8 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
2121 + goto out_free_pd;
2122 + }
2123 +
2124 +- if (ipoib_neigh_hash_init(priv) < 0) {
2125 ++ ret = ipoib_neigh_hash_init(priv);
2126 ++ if (ret) {
2127 + pr_warn("%s failed to init neigh hash\n", dev->name);
2128 + goto out_dev_uninit;
2129 + }
2130 +diff --git a/drivers/input/joystick/pxrc.c b/drivers/input/joystick/pxrc.c
2131 +index 07a0dbd3ced2..cfb410cf0789 100644
2132 +--- a/drivers/input/joystick/pxrc.c
2133 ++++ b/drivers/input/joystick/pxrc.c
2134 +@@ -120,48 +120,51 @@ static void pxrc_close(struct input_dev *input)
2135 + mutex_unlock(&pxrc->pm_mutex);
2136 + }
2137 +
2138 ++static void pxrc_free_urb(void *_pxrc)
2139 ++{
2140 ++ struct pxrc *pxrc = _pxrc;
2141 ++
2142 ++ usb_free_urb(pxrc->urb);
2143 ++}
2144 ++
2145 + static int pxrc_usb_init(struct pxrc *pxrc)
2146 + {
2147 + struct usb_endpoint_descriptor *epirq;
2148 + unsigned int pipe;
2149 +- int retval;
2150 ++ int error;
2151 +
2152 + /* Set up the endpoint information */
2153 + /* This device only has an interrupt endpoint */
2154 +- retval = usb_find_common_endpoints(pxrc->intf->cur_altsetting,
2155 +- NULL, NULL, &epirq, NULL);
2156 +- if (retval) {
2157 +- dev_err(&pxrc->intf->dev,
2158 +- "Could not find endpoint\n");
2159 +- goto error;
2160 ++ error = usb_find_common_endpoints(pxrc->intf->cur_altsetting,
2161 ++ NULL, NULL, &epirq, NULL);
2162 ++ if (error) {
2163 ++ dev_err(&pxrc->intf->dev, "Could not find endpoint\n");
2164 ++ return error;
2165 + }
2166 +
2167 + pxrc->bsize = usb_endpoint_maxp(epirq);
2168 + pxrc->epaddr = epirq->bEndpointAddress;
2169 + pxrc->data = devm_kmalloc(&pxrc->intf->dev, pxrc->bsize, GFP_KERNEL);
2170 +- if (!pxrc->data) {
2171 +- retval = -ENOMEM;
2172 +- goto error;
2173 +- }
2174 ++ if (!pxrc->data)
2175 ++ return -ENOMEM;
2176 +
2177 + usb_set_intfdata(pxrc->intf, pxrc);
2178 + usb_make_path(pxrc->udev, pxrc->phys, sizeof(pxrc->phys));
2179 + strlcat(pxrc->phys, "/input0", sizeof(pxrc->phys));
2180 +
2181 + pxrc->urb = usb_alloc_urb(0, GFP_KERNEL);
2182 +- if (!pxrc->urb) {
2183 +- retval = -ENOMEM;
2184 +- goto error;
2185 +- }
2186 ++ if (!pxrc->urb)
2187 ++ return -ENOMEM;
2188 ++
2189 ++ error = devm_add_action_or_reset(&pxrc->intf->dev, pxrc_free_urb, pxrc);
2190 ++ if (error)
2191 ++ return error;
2192 +
2193 + pipe = usb_rcvintpipe(pxrc->udev, pxrc->epaddr),
2194 + usb_fill_int_urb(pxrc->urb, pxrc->udev, pipe, pxrc->data, pxrc->bsize,
2195 + pxrc_usb_irq, pxrc, 1);
2196 +
2197 +-error:
2198 +- return retval;
2199 +-
2200 +-
2201 ++ return 0;
2202 + }
2203 +
2204 + static int pxrc_input_init(struct pxrc *pxrc)
2205 +@@ -197,7 +200,7 @@ static int pxrc_probe(struct usb_interface *intf,
2206 + const struct usb_device_id *id)
2207 + {
2208 + struct pxrc *pxrc;
2209 +- int retval;
2210 ++ int error;
2211 +
2212 + pxrc = devm_kzalloc(&intf->dev, sizeof(*pxrc), GFP_KERNEL);
2213 + if (!pxrc)
2214 +@@ -207,29 +210,20 @@ static int pxrc_probe(struct usb_interface *intf,
2215 + pxrc->udev = usb_get_dev(interface_to_usbdev(intf));
2216 + pxrc->intf = intf;
2217 +
2218 +- retval = pxrc_usb_init(pxrc);
2219 +- if (retval)
2220 +- goto error;
2221 ++ error = pxrc_usb_init(pxrc);
2222 ++ if (error)
2223 ++ return error;
2224 +
2225 +- retval = pxrc_input_init(pxrc);
2226 +- if (retval)
2227 +- goto err_free_urb;
2228 ++ error = pxrc_input_init(pxrc);
2229 ++ if (error)
2230 ++ return error;
2231 +
2232 + return 0;
2233 +-
2234 +-err_free_urb:
2235 +- usb_free_urb(pxrc->urb);
2236 +-
2237 +-error:
2238 +- return retval;
2239 + }
2240 +
2241 + static void pxrc_disconnect(struct usb_interface *intf)
2242 + {
2243 +- struct pxrc *pxrc = usb_get_intfdata(intf);
2244 +-
2245 +- usb_free_urb(pxrc->urb);
2246 +- usb_set_intfdata(intf, NULL);
2247 ++ /* All driver resources are devm-managed. */
2248 + }
2249 +
2250 + static int pxrc_suspend(struct usb_interface *intf, pm_message_t message)
2251 +diff --git a/drivers/input/touchscreen/rohm_bu21023.c b/drivers/input/touchscreen/rohm_bu21023.c
2252 +index bda0500c9b57..714affdd742f 100644
2253 +--- a/drivers/input/touchscreen/rohm_bu21023.c
2254 ++++ b/drivers/input/touchscreen/rohm_bu21023.c
2255 +@@ -304,7 +304,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
2256 + msg[1].len = len;
2257 + msg[1].buf = buf;
2258 +
2259 +- i2c_lock_adapter(adap);
2260 ++ i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
2261 +
2262 + for (i = 0; i < 2; i++) {
2263 + if (__i2c_transfer(adap, &msg[i], 1) < 0) {
2264 +@@ -313,7 +313,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
2265 + }
2266 + }
2267 +
2268 +- i2c_unlock_adapter(adap);
2269 ++ i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
2270 +
2271 + return ret;
2272 + }
2273 +diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
2274 +index b73c6a7bf7f2..b7076aa24d6b 100644
2275 +--- a/drivers/iommu/arm-smmu-v3.c
2276 ++++ b/drivers/iommu/arm-smmu-v3.c
2277 +@@ -1302,6 +1302,7 @@ static irqreturn_t arm_smmu_priq_thread(int irq, void *dev)
2278 +
2279 + /* Sync our overflow flag, as we believe we're up to speed */
2280 + q->cons = Q_OVF(q, q->prod) | Q_WRP(q, q->cons) | Q_IDX(q, q->cons);
2281 ++ writel(q->cons, q->cons_reg);
2282 + return IRQ_HANDLED;
2283 + }
2284 +
2285 +diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
2286 +index 50e3a9fcf43e..b5948ba6b3b3 100644
2287 +--- a/drivers/iommu/io-pgtable-arm-v7s.c
2288 ++++ b/drivers/iommu/io-pgtable-arm-v7s.c
2289 +@@ -192,6 +192,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
2290 + {
2291 + struct io_pgtable_cfg *cfg = &data->iop.cfg;
2292 + struct device *dev = cfg->iommu_dev;
2293 ++ phys_addr_t phys;
2294 + dma_addr_t dma;
2295 + size_t size = ARM_V7S_TABLE_SIZE(lvl);
2296 + void *table = NULL;
2297 +@@ -200,6 +201,10 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
2298 + table = (void *)__get_dma_pages(__GFP_ZERO, get_order(size));
2299 + else if (lvl == 2)
2300 + table = kmem_cache_zalloc(data->l2_tables, gfp | GFP_DMA);
2301 ++ phys = virt_to_phys(table);
2302 ++ if (phys != (arm_v7s_iopte)phys)
2303 ++ /* Doesn't fit in PTE */
2304 ++ goto out_free;
2305 + if (table && !(cfg->quirks & IO_PGTABLE_QUIRK_NO_DMA)) {
2306 + dma = dma_map_single(dev, table, size, DMA_TO_DEVICE);
2307 + if (dma_mapping_error(dev, dma))
2308 +@@ -209,7 +214,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
2309 + * address directly, so if the DMA layer suggests otherwise by
2310 + * translating or truncating them, that bodes very badly...
2311 + */
2312 +- if (dma != virt_to_phys(table))
2313 ++ if (dma != phys)
2314 + goto out_unmap;
2315 + }
2316 + kmemleak_ignore(table);
2317 +diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
2318 +index 010a254305dd..88641b4560bc 100644
2319 +--- a/drivers/iommu/io-pgtable-arm.c
2320 ++++ b/drivers/iommu/io-pgtable-arm.c
2321 +@@ -237,7 +237,8 @@ static void *__arm_lpae_alloc_pages(size_t size, gfp_t gfp,
2322 + void *pages;
2323 +
2324 + VM_BUG_ON((gfp & __GFP_HIGHMEM));
2325 +- p = alloc_pages_node(dev_to_node(dev), gfp | __GFP_ZERO, order);
2326 ++ p = alloc_pages_node(dev ? dev_to_node(dev) : NUMA_NO_NODE,
2327 ++ gfp | __GFP_ZERO, order);
2328 + if (!p)
2329 + return NULL;
2330 +
2331 +diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
2332 +index feb1664815b7..6e2882cda55d 100644
2333 +--- a/drivers/iommu/ipmmu-vmsa.c
2334 ++++ b/drivers/iommu/ipmmu-vmsa.c
2335 +@@ -47,6 +47,7 @@ struct ipmmu_features {
2336 + unsigned int number_of_contexts;
2337 + bool setup_imbuscr;
2338 + bool twobit_imttbcr_sl0;
2339 ++ bool reserved_context;
2340 + };
2341 +
2342 + struct ipmmu_vmsa_device {
2343 +@@ -916,6 +917,7 @@ static const struct ipmmu_features ipmmu_features_default = {
2344 + .number_of_contexts = 1, /* software only tested with one context */
2345 + .setup_imbuscr = true,
2346 + .twobit_imttbcr_sl0 = false,
2347 ++ .reserved_context = false,
2348 + };
2349 +
2350 + static const struct ipmmu_features ipmmu_features_r8a7795 = {
2351 +@@ -924,6 +926,7 @@ static const struct ipmmu_features ipmmu_features_r8a7795 = {
2352 + .number_of_contexts = 8,
2353 + .setup_imbuscr = false,
2354 + .twobit_imttbcr_sl0 = true,
2355 ++ .reserved_context = true,
2356 + };
2357 +
2358 + static const struct of_device_id ipmmu_of_ids[] = {
2359 +@@ -1017,6 +1020,11 @@ static int ipmmu_probe(struct platform_device *pdev)
2360 + }
2361 +
2362 + ipmmu_device_reset(mmu);
2363 ++
2364 ++ if (mmu->features->reserved_context) {
2365 ++ dev_info(&pdev->dev, "IPMMU context 0 is reserved\n");
2366 ++ set_bit(0, mmu->ctx);
2367 ++ }
2368 + }
2369 +
2370 + /*
2371 +diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
2372 +index b57f764d6a16..93ebba6dcc25 100644
2373 +--- a/drivers/lightnvm/pblk-init.c
2374 ++++ b/drivers/lightnvm/pblk-init.c
2375 +@@ -716,10 +716,11 @@ static int pblk_setup_line_meta_12(struct pblk *pblk, struct pblk_line *line,
2376 +
2377 + /*
2378 + * In 1.2 spec. chunk state is not persisted by the device. Thus
2379 +- * some of the values are reset each time pblk is instantiated.
2380 ++ * some of the values are reset each time pblk is instantiated,
2381 ++ * so we have to assume that the block is closed.
2382 + */
2383 + if (lun_bb_meta[line->id] == NVM_BLK_T_FREE)
2384 +- chunk->state = NVM_CHK_ST_FREE;
2385 ++ chunk->state = NVM_CHK_ST_CLOSED;
2386 + else
2387 + chunk->state = NVM_CHK_ST_OFFLINE;
2388 +
2389 +diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c
2390 +index 3a5069183859..d83466b3821b 100644
2391 +--- a/drivers/lightnvm/pblk-recovery.c
2392 ++++ b/drivers/lightnvm/pblk-recovery.c
2393 +@@ -742,9 +742,10 @@ static int pblk_recov_check_line_version(struct pblk *pblk,
2394 + return 1;
2395 + }
2396 +
2397 +-#ifdef NVM_DEBUG
2398 ++#ifdef CONFIG_NVM_PBLK_DEBUG
2399 + if (header->version_minor > EMETA_VERSION_MINOR)
2400 +- pr_info("pblk: newer line minor version found: %d\n", line_v);
2401 ++ pr_info("pblk: newer line minor version found: %d\n",
2402 ++ header->version_minor);
2403 + #endif
2404 +
2405 + return 0;
2406 +diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
2407 +index 12decdbd722d..fc65f0dedf7f 100644
2408 +--- a/drivers/md/dm-verity-target.c
2409 ++++ b/drivers/md/dm-verity-target.c
2410 +@@ -99,10 +99,26 @@ static int verity_hash_update(struct dm_verity *v, struct ahash_request *req,
2411 + {
2412 + struct scatterlist sg;
2413 +
2414 +- sg_init_one(&sg, data, len);
2415 +- ahash_request_set_crypt(req, &sg, NULL, len);
2416 +-
2417 +- return crypto_wait_req(crypto_ahash_update(req), wait);
2418 ++ if (likely(!is_vmalloc_addr(data))) {
2419 ++ sg_init_one(&sg, data, len);
2420 ++ ahash_request_set_crypt(req, &sg, NULL, len);
2421 ++ return crypto_wait_req(crypto_ahash_update(req), wait);
2422 ++ } else {
2423 ++ do {
2424 ++ int r;
2425 ++ size_t this_step = min_t(size_t, len, PAGE_SIZE - offset_in_page(data));
2426 ++ flush_kernel_vmap_range((void *)data, this_step);
2427 ++ sg_init_table(&sg, 1);
2428 ++ sg_set_page(&sg, vmalloc_to_page(data), this_step, offset_in_page(data));
2429 ++ ahash_request_set_crypt(req, &sg, NULL, this_step);
2430 ++ r = crypto_wait_req(crypto_ahash_update(req), wait);
2431 ++ if (unlikely(r))
2432 ++ return r;
2433 ++ data += this_step;
2434 ++ len -= this_step;
2435 ++ } while (len);
2436 ++ return 0;
2437 ++ }
2438 + }
2439 +
2440 + /*
2441 +diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
2442 +index f32ec7342ef0..5653e8eebe2b 100644
2443 +--- a/drivers/media/common/videobuf2/videobuf2-core.c
2444 ++++ b/drivers/media/common/videobuf2/videobuf2-core.c
2445 +@@ -1377,6 +1377,11 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb)
2446 + struct vb2_buffer *vb;
2447 + int ret;
2448 +
2449 ++ if (q->error) {
2450 ++ dprintk(1, "fatal error occurred on queue\n");
2451 ++ return -EIO;
2452 ++ }
2453 ++
2454 + vb = q->bufs[index];
2455 +
2456 + switch (vb->state) {
2457 +diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c
2458 +index b3f762578f7f..1722cdab0daf 100644
2459 +--- a/drivers/media/i2c/ov5645.c
2460 ++++ b/drivers/media/i2c/ov5645.c
2461 +@@ -510,8 +510,8 @@ static const struct reg_value ov5645_setting_full[] = {
2462 + };
2463 +
2464 + static const s64 link_freq[] = {
2465 +- 222880000,
2466 +- 334320000
2467 ++ 224000000,
2468 ++ 336000000
2469 + };
2470 +
2471 + static const struct ov5645_mode_info ov5645_mode_info_data[] = {
2472 +@@ -520,7 +520,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
2473 + .height = 960,
2474 + .data = ov5645_setting_sxga,
2475 + .data_size = ARRAY_SIZE(ov5645_setting_sxga),
2476 +- .pixel_clock = 111440000,
2477 ++ .pixel_clock = 112000000,
2478 + .link_freq = 0 /* an index in link_freq[] */
2479 + },
2480 + {
2481 +@@ -528,7 +528,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
2482 + .height = 1080,
2483 + .data = ov5645_setting_1080p,
2484 + .data_size = ARRAY_SIZE(ov5645_setting_1080p),
2485 +- .pixel_clock = 167160000,
2486 ++ .pixel_clock = 168000000,
2487 + .link_freq = 1 /* an index in link_freq[] */
2488 + },
2489 + {
2490 +@@ -536,7 +536,7 @@ static const struct ov5645_mode_info ov5645_mode_info_data[] = {
2491 + .height = 1944,
2492 + .data = ov5645_setting_full,
2493 + .data_size = ARRAY_SIZE(ov5645_setting_full),
2494 +- .pixel_clock = 167160000,
2495 ++ .pixel_clock = 168000000,
2496 + .link_freq = 1 /* an index in link_freq[] */
2497 + },
2498 + };
2499 +@@ -1145,7 +1145,8 @@ static int ov5645_probe(struct i2c_client *client,
2500 + return ret;
2501 + }
2502 +
2503 +- if (xclk_freq != 23880000) {
2504 ++ /* external clock must be 24MHz, allow 1% tolerance */
2505 ++ if (xclk_freq < 23760000 || xclk_freq > 24240000) {
2506 + dev_err(dev, "external clock frequency %u is not supported\n",
2507 + xclk_freq);
2508 + return -EINVAL;
2509 +diff --git a/drivers/media/pci/tw686x/tw686x-video.c b/drivers/media/pci/tw686x/tw686x-video.c
2510 +index 0ea8dd44026c..3a06c000f97b 100644
2511 +--- a/drivers/media/pci/tw686x/tw686x-video.c
2512 ++++ b/drivers/media/pci/tw686x/tw686x-video.c
2513 +@@ -1190,6 +1190,14 @@ int tw686x_video_init(struct tw686x_dev *dev)
2514 + return err;
2515 + }
2516 +
2517 ++ /* Initialize vc->dev and vc->ch for the error path */
2518 ++ for (ch = 0; ch < max_channels(dev); ch++) {
2519 ++ struct tw686x_video_channel *vc = &dev->video_channels[ch];
2520 ++
2521 ++ vc->dev = dev;
2522 ++ vc->ch = ch;
2523 ++ }
2524 ++
2525 + for (ch = 0; ch < max_channels(dev); ch++) {
2526 + struct tw686x_video_channel *vc = &dev->video_channels[ch];
2527 + struct video_device *vdev;
2528 +@@ -1198,9 +1206,6 @@ int tw686x_video_init(struct tw686x_dev *dev)
2529 + spin_lock_init(&vc->qlock);
2530 + INIT_LIST_HEAD(&vc->vidq_queued);
2531 +
2532 +- vc->dev = dev;
2533 +- vc->ch = ch;
2534 +-
2535 + /* default settings */
2536 + err = tw686x_set_standard(vc, V4L2_STD_NTSC);
2537 + if (err)
2538 +diff --git a/drivers/mfd/88pm860x-i2c.c b/drivers/mfd/88pm860x-i2c.c
2539 +index 84e313107233..7b9052ea7413 100644
2540 +--- a/drivers/mfd/88pm860x-i2c.c
2541 ++++ b/drivers/mfd/88pm860x-i2c.c
2542 +@@ -146,14 +146,14 @@ int pm860x_page_reg_write(struct i2c_client *i2c, int reg,
2543 + unsigned char zero;
2544 + int ret;
2545 +
2546 +- i2c_lock_adapter(i2c->adapter);
2547 ++ i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
2548 + read_device(i2c, 0xFA, 0, &zero);
2549 + read_device(i2c, 0xFB, 0, &zero);
2550 + read_device(i2c, 0xFF, 0, &zero);
2551 + ret = write_device(i2c, reg, 1, &data);
2552 + read_device(i2c, 0xFE, 0, &zero);
2553 + read_device(i2c, 0xFC, 0, &zero);
2554 +- i2c_unlock_adapter(i2c->adapter);
2555 ++ i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
2556 + return ret;
2557 + }
2558 + EXPORT_SYMBOL(pm860x_page_reg_write);
2559 +@@ -164,14 +164,14 @@ int pm860x_page_bulk_read(struct i2c_client *i2c, int reg,
2560 + unsigned char zero = 0;
2561 + int ret;
2562 +
2563 +- i2c_lock_adapter(i2c->adapter);
2564 ++ i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
2565 + read_device(i2c, 0xfa, 0, &zero);
2566 + read_device(i2c, 0xfb, 0, &zero);
2567 + read_device(i2c, 0xff, 0, &zero);
2568 + ret = read_device(i2c, reg, count, buf);
2569 + read_device(i2c, 0xFE, 0, &zero);
2570 + read_device(i2c, 0xFC, 0, &zero);
2571 +- i2c_unlock_adapter(i2c->adapter);
2572 ++ i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
2573 + return ret;
2574 + }
2575 + EXPORT_SYMBOL(pm860x_page_bulk_read);
2576 +diff --git a/drivers/misc/hmc6352.c b/drivers/misc/hmc6352.c
2577 +index eeb7eef62174..38f90e179927 100644
2578 +--- a/drivers/misc/hmc6352.c
2579 ++++ b/drivers/misc/hmc6352.c
2580 +@@ -27,6 +27,7 @@
2581 + #include <linux/err.h>
2582 + #include <linux/delay.h>
2583 + #include <linux/sysfs.h>
2584 ++#include <linux/nospec.h>
2585 +
2586 + static DEFINE_MUTEX(compass_mutex);
2587 +
2588 +@@ -50,6 +51,7 @@ static int compass_store(struct device *dev, const char *buf, size_t count,
2589 + return ret;
2590 + if (val >= strlen(map))
2591 + return -EINVAL;
2592 ++ val = array_index_nospec(val, strlen(map));
2593 + mutex_lock(&compass_mutex);
2594 + ret = compass_command(c, map[val]);
2595 + mutex_unlock(&compass_mutex);
2596 +diff --git a/drivers/misc/ibmvmc.c b/drivers/misc/ibmvmc.c
2597 +index fb83d1375638..50d82c3d032a 100644
2598 +--- a/drivers/misc/ibmvmc.c
2599 ++++ b/drivers/misc/ibmvmc.c
2600 +@@ -2131,7 +2131,7 @@ static int ibmvmc_init_crq_queue(struct crq_server_adapter *adapter)
2601 + retrc = plpar_hcall_norets(H_REG_CRQ,
2602 + vdev->unit_address,
2603 + queue->msg_token, PAGE_SIZE);
2604 +- retrc = rc;
2605 ++ rc = retrc;
2606 +
2607 + if (rc == H_RESOURCE)
2608 + rc = ibmvmc_reset_crq_queue(adapter);
2609 +diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
2610 +index 0208c4b027c5..fa0236a5e59a 100644
2611 +--- a/drivers/misc/mei/bus-fixup.c
2612 ++++ b/drivers/misc/mei/bus-fixup.c
2613 +@@ -267,7 +267,7 @@ static int mei_nfc_if_version(struct mei_cl *cl,
2614 +
2615 + ret = 0;
2616 + bytes_recv = __mei_cl_recv(cl, (u8 *)reply, if_version_length, 0);
2617 +- if (bytes_recv < if_version_length) {
2618 ++ if (bytes_recv < 0 || bytes_recv < if_version_length) {
2619 + dev_err(bus->dev, "Could not read IF version\n");
2620 + ret = -EIO;
2621 + goto err;
2622 +diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
2623 +index b1133739fb4b..692b2f9a18cb 100644
2624 +--- a/drivers/misc/mei/bus.c
2625 ++++ b/drivers/misc/mei/bus.c
2626 +@@ -505,17 +505,15 @@ int mei_cldev_enable(struct mei_cl_device *cldev)
2627 +
2628 + cl = cldev->cl;
2629 +
2630 ++ mutex_lock(&bus->device_lock);
2631 + if (cl->state == MEI_FILE_UNINITIALIZED) {
2632 +- mutex_lock(&bus->device_lock);
2633 + ret = mei_cl_link(cl);
2634 +- mutex_unlock(&bus->device_lock);
2635 + if (ret)
2636 +- return ret;
2637 ++ goto out;
2638 + /* update pointers */
2639 + cl->cldev = cldev;
2640 + }
2641 +
2642 +- mutex_lock(&bus->device_lock);
2643 + if (mei_cl_is_connected(cl)) {
2644 + ret = 0;
2645 + goto out;
2646 +@@ -600,9 +598,8 @@ int mei_cldev_disable(struct mei_cl_device *cldev)
2647 + if (err < 0)
2648 + dev_err(bus->dev, "Could not disconnect from the ME client\n");
2649 +
2650 +-out:
2651 + mei_cl_bus_module_put(cldev);
2652 +-
2653 ++out:
2654 + /* Flush queues and remove any pending read */
2655 + mei_cl_flush_queues(cl, NULL);
2656 + mei_cl_unlink(cl);
2657 +@@ -860,12 +857,13 @@ static void mei_cl_bus_dev_release(struct device *dev)
2658 +
2659 + mei_me_cl_put(cldev->me_cl);
2660 + mei_dev_bus_put(cldev->bus);
2661 ++ mei_cl_unlink(cldev->cl);
2662 + kfree(cldev->cl);
2663 + kfree(cldev);
2664 + }
2665 +
2666 + static const struct device_type mei_cl_device_type = {
2667 +- .release = mei_cl_bus_dev_release,
2668 ++ .release = mei_cl_bus_dev_release,
2669 + };
2670 +
2671 + /**
2672 +diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
2673 +index fe6595fe94f1..995ff1b7e7b5 100644
2674 +--- a/drivers/misc/mei/hbm.c
2675 ++++ b/drivers/misc/mei/hbm.c
2676 +@@ -1140,15 +1140,18 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
2677 +
2678 + props_res = (struct hbm_props_response *)mei_msg;
2679 +
2680 +- if (props_res->status) {
2681 ++ if (props_res->status == MEI_HBMS_CLIENT_NOT_FOUND) {
2682 ++ dev_dbg(dev->dev, "hbm: properties response: %d CLIENT_NOT_FOUND\n",
2683 ++ props_res->me_addr);
2684 ++ } else if (props_res->status) {
2685 + dev_err(dev->dev, "hbm: properties response: wrong status = %d %s\n",
2686 + props_res->status,
2687 + mei_hbm_status_str(props_res->status));
2688 + return -EPROTO;
2689 ++ } else {
2690 ++ mei_hbm_me_cl_add(dev, props_res);
2691 + }
2692 +
2693 +- mei_hbm_me_cl_add(dev, props_res);
2694 +-
2695 + /* request property for the next client */
2696 + if (mei_hbm_prop_req(dev, props_res->me_addr + 1))
2697 + return -EIO;
2698 +diff --git a/drivers/mmc/host/meson-mx-sdio.c b/drivers/mmc/host/meson-mx-sdio.c
2699 +index 09cb89645d06..2cfec33178c1 100644
2700 +--- a/drivers/mmc/host/meson-mx-sdio.c
2701 ++++ b/drivers/mmc/host/meson-mx-sdio.c
2702 +@@ -517,19 +517,23 @@ static struct mmc_host_ops meson_mx_mmc_ops = {
2703 + static struct platform_device *meson_mx_mmc_slot_pdev(struct device *parent)
2704 + {
2705 + struct device_node *slot_node;
2706 ++ struct platform_device *pdev;
2707 +
2708 + /*
2709 + * TODO: the MMC core framework currently does not support
2710 + * controllers with multiple slots properly. So we only register
2711 + * the first slot for now
2712 + */
2713 +- slot_node = of_find_compatible_node(parent->of_node, NULL, "mmc-slot");
2714 ++ slot_node = of_get_compatible_child(parent->of_node, "mmc-slot");
2715 + if (!slot_node) {
2716 + dev_warn(parent, "no 'mmc-slot' sub-node found\n");
2717 + return ERR_PTR(-ENOENT);
2718 + }
2719 +
2720 +- return of_platform_device_create(slot_node, NULL, parent);
2721 ++ pdev = of_platform_device_create(slot_node, NULL, parent);
2722 ++ of_node_put(slot_node);
2723 ++
2724 ++ return pdev;
2725 + }
2726 +
2727 + static int meson_mx_mmc_add_host(struct meson_mx_mmc_host *host)
2728 +diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
2729 +index 071693ebfe18..68760d4a5d3d 100644
2730 +--- a/drivers/mmc/host/omap_hsmmc.c
2731 ++++ b/drivers/mmc/host/omap_hsmmc.c
2732 +@@ -2177,6 +2177,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
2733 + dma_release_channel(host->tx_chan);
2734 + dma_release_channel(host->rx_chan);
2735 +
2736 ++ dev_pm_clear_wake_irq(host->dev);
2737 + pm_runtime_dont_use_autosuspend(host->dev);
2738 + pm_runtime_put_sync(host->dev);
2739 + pm_runtime_disable(host->dev);
2740 +diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
2741 +index 4ffa6b173a21..8332f56e6c0d 100644
2742 +--- a/drivers/mmc/host/sdhci-of-esdhc.c
2743 ++++ b/drivers/mmc/host/sdhci-of-esdhc.c
2744 +@@ -22,6 +22,7 @@
2745 + #include <linux/sys_soc.h>
2746 + #include <linux/clk.h>
2747 + #include <linux/ktime.h>
2748 ++#include <linux/dma-mapping.h>
2749 + #include <linux/mmc/host.h>
2750 + #include "sdhci-pltfm.h"
2751 + #include "sdhci-esdhc.h"
2752 +@@ -427,6 +428,11 @@ static void esdhc_of_adma_workaround(struct sdhci_host *host, u32 intmask)
2753 + static int esdhc_of_enable_dma(struct sdhci_host *host)
2754 + {
2755 + u32 value;
2756 ++ struct device *dev = mmc_dev(host->mmc);
2757 ++
2758 ++ if (of_device_is_compatible(dev->of_node, "fsl,ls1043a-esdhc") ||
2759 ++ of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc"))
2760 ++ dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
2761 +
2762 + value = sdhci_readl(host, ESDHC_DMA_SYSCTL);
2763 + value |= ESDHC_DMA_SNOOP;
2764 +diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
2765 +index 970d38f68939..137df06b9b6e 100644
2766 +--- a/drivers/mmc/host/sdhci-tegra.c
2767 ++++ b/drivers/mmc/host/sdhci-tegra.c
2768 +@@ -334,7 +334,8 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
2769 + SDHCI_QUIRK_NO_HISPD_BIT |
2770 + SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC |
2771 + SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN,
2772 +- .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
2773 ++ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
2774 ++ SDHCI_QUIRK2_BROKEN_HS200,
2775 + .ops = &tegra_sdhci_ops,
2776 + };
2777 +
2778 +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
2779 +index 1c828e0e9905..a7b5602ef6f7 100644
2780 +--- a/drivers/mmc/host/sdhci.c
2781 ++++ b/drivers/mmc/host/sdhci.c
2782 +@@ -3734,14 +3734,21 @@ int sdhci_setup_host(struct sdhci_host *host)
2783 + mmc_gpio_get_cd(host->mmc) < 0)
2784 + mmc->caps |= MMC_CAP_NEEDS_POLL;
2785 +
2786 +- /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
2787 + if (!IS_ERR(mmc->supply.vqmmc)) {
2788 + ret = regulator_enable(mmc->supply.vqmmc);
2789 ++
2790 ++ /* If vqmmc provides no 1.8V signalling, then there's no UHS */
2791 + if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 1700000,
2792 + 1950000))
2793 + host->caps1 &= ~(SDHCI_SUPPORT_SDR104 |
2794 + SDHCI_SUPPORT_SDR50 |
2795 + SDHCI_SUPPORT_DDR50);
2796 ++
2797 ++ /* In eMMC case vqmmc might be a fixed 1.8V regulator */
2798 ++ if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 2700000,
2799 ++ 3600000))
2800 ++ host->flags &= ~SDHCI_SIGNALING_330;
2801 ++
2802 + if (ret) {
2803 + pr_warn("%s: Failed to enable vqmmc regulator: %d\n",
2804 + mmc_hostname(mmc), ret);
2805 +diff --git a/drivers/mtd/maps/solutionengine.c b/drivers/mtd/maps/solutionengine.c
2806 +index bb580bc16445..c07f21b20463 100644
2807 +--- a/drivers/mtd/maps/solutionengine.c
2808 ++++ b/drivers/mtd/maps/solutionengine.c
2809 +@@ -59,9 +59,9 @@ static int __init init_soleng_maps(void)
2810 + return -ENXIO;
2811 + }
2812 + }
2813 +- printk(KERN_NOTICE "Solution Engine: Flash at 0x%08lx, EPROM at 0x%08lx\n",
2814 +- soleng_flash_map.phys & 0x1fffffff,
2815 +- soleng_eprom_map.phys & 0x1fffffff);
2816 ++ printk(KERN_NOTICE "Solution Engine: Flash at 0x%pap, EPROM at 0x%pap\n",
2817 ++ &soleng_flash_map.phys,
2818 ++ &soleng_eprom_map.phys);
2819 + flash_mtd->owner = THIS_MODULE;
2820 +
2821 + eprom_mtd = do_map_probe("map_rom", &soleng_eprom_map);
2822 +diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
2823 +index cd67c85cc87d..02389528f622 100644
2824 +--- a/drivers/mtd/mtdchar.c
2825 ++++ b/drivers/mtd/mtdchar.c
2826 +@@ -160,8 +160,12 @@ static ssize_t mtdchar_read(struct file *file, char __user *buf, size_t count,
2827 +
2828 + pr_debug("MTD_read\n");
2829 +
2830 +- if (*ppos + count > mtd->size)
2831 +- count = mtd->size - *ppos;
2832 ++ if (*ppos + count > mtd->size) {
2833 ++ if (*ppos < mtd->size)
2834 ++ count = mtd->size - *ppos;
2835 ++ else
2836 ++ count = 0;
2837 ++ }
2838 +
2839 + if (!count)
2840 + return 0;
2841 +@@ -246,7 +250,7 @@ static ssize_t mtdchar_write(struct file *file, const char __user *buf, size_t c
2842 +
2843 + pr_debug("MTD_write\n");
2844 +
2845 +- if (*ppos == mtd->size)
2846 ++ if (*ppos >= mtd->size)
2847 + return -ENOSPC;
2848 +
2849 + if (*ppos + count > mtd->size)
2850 +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
2851 +index cc1e4f820e64..533094233659 100644
2852 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
2853 ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
2854 +@@ -289,7 +289,7 @@ static int xgbe_alloc_pages(struct xgbe_prv_data *pdata,
2855 + struct page *pages = NULL;
2856 + dma_addr_t pages_dma;
2857 + gfp_t gfp;
2858 +- int order, ret;
2859 ++ int order;
2860 +
2861 + again:
2862 + order = alloc_order;
2863 +@@ -316,10 +316,9 @@ again:
2864 + /* Map the pages */
2865 + pages_dma = dma_map_page(pdata->dev, pages, 0,
2866 + PAGE_SIZE << order, DMA_FROM_DEVICE);
2867 +- ret = dma_mapping_error(pdata->dev, pages_dma);
2868 +- if (ret) {
2869 ++ if (dma_mapping_error(pdata->dev, pages_dma)) {
2870 + put_page(pages);
2871 +- return ret;
2872 ++ return -ENOMEM;
2873 + }
2874 +
2875 + pa->pages = pages;
2876 +diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
2877 +index 929d485a3a2f..e088dedc1747 100644
2878 +--- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
2879 ++++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
2880 +@@ -493,6 +493,9 @@ static void cn23xx_pf_setup_global_output_regs(struct octeon_device *oct)
2881 + for (q_no = srn; q_no < ern; q_no++) {
2882 + reg_val = octeon_read_csr(oct, CN23XX_SLI_OQ_PKT_CONTROL(q_no));
2883 +
2884 ++ /* clear IPTR */
2885 ++ reg_val &= ~CN23XX_PKT_OUTPUT_CTL_IPTR;
2886 ++
2887 + /* set DPTR */
2888 + reg_val |= CN23XX_PKT_OUTPUT_CTL_DPTR;
2889 +
2890 +diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
2891 +index 9338a0008378..1f8b7f651254 100644
2892 +--- a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
2893 ++++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c
2894 +@@ -165,6 +165,9 @@ static void cn23xx_vf_setup_global_output_regs(struct octeon_device *oct)
2895 + reg_val =
2896 + octeon_read_csr(oct, CN23XX_VF_SLI_OQ_PKT_CONTROL(q_no));
2897 +
2898 ++ /* clear IPTR */
2899 ++ reg_val &= ~CN23XX_PKT_OUTPUT_CTL_IPTR;
2900 ++
2901 + /* set DPTR */
2902 + reg_val |= CN23XX_PKT_OUTPUT_CTL_DPTR;
2903 +
2904 +diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c
2905 +index 6d7404f66f84..c9a061e707c4 100644
2906 +--- a/drivers/net/ethernet/cortina/gemini.c
2907 ++++ b/drivers/net/ethernet/cortina/gemini.c
2908 +@@ -1753,7 +1753,10 @@ static int gmac_open(struct net_device *netdev)
2909 + phy_start(netdev->phydev);
2910 +
2911 + err = geth_resize_freeq(port);
2912 +- if (err) {
2913 ++ /* It's fine if it's just busy, the other port has set up
2914 ++ * the freeq in that case.
2915 ++ */
2916 ++ if (err && (err != -EBUSY)) {
2917 + netdev_err(netdev, "could not resize freeq\n");
2918 + goto err_stop_phy;
2919 + }
2920 +diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
2921 +index ff92ab1daeb8..1e9d882c04ef 100644
2922 +--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
2923 ++++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
2924 +@@ -4500,7 +4500,7 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
2925 + port_res->max_vfs += le16_to_cpu(pcie->num_vfs);
2926 + }
2927 + }
2928 +- return status;
2929 ++ goto err;
2930 + }
2931 +
2932 + pcie = be_get_pcie_desc(resp->func_param, desc_count,
2933 +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
2934 +index 25a73bb2e642..9d69621f5ab4 100644
2935 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
2936 ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
2937 +@@ -3081,7 +3081,6 @@ static int hns3_client_init(struct hnae3_handle *handle)
2938 + priv->dev = &pdev->dev;
2939 + priv->netdev = netdev;
2940 + priv->ae_handle = handle;
2941 +- priv->ae_handle->reset_level = HNAE3_NONE_RESET;
2942 + priv->ae_handle->last_reset_time = jiffies;
2943 + priv->tx_timeout_count = 0;
2944 +
2945 +@@ -3102,6 +3101,11 @@ static int hns3_client_init(struct hnae3_handle *handle)
2946 + /* Carrier off reporting is important to ethtool even BEFORE open */
2947 + netif_carrier_off(netdev);
2948 +
2949 ++ if (handle->flags & HNAE3_SUPPORT_VF)
2950 ++ handle->reset_level = HNAE3_VF_RESET;
2951 ++ else
2952 ++ handle->reset_level = HNAE3_FUNC_RESET;
2953 ++
2954 + ret = hns3_get_ring_config(priv);
2955 + if (ret) {
2956 + ret = -ENOMEM;
2957 +@@ -3418,7 +3422,7 @@ static int hns3_reset_notify_down_enet(struct hnae3_handle *handle)
2958 + struct net_device *ndev = kinfo->netdev;
2959 +
2960 + if (!netif_running(ndev))
2961 +- return -EIO;
2962 ++ return 0;
2963 +
2964 + return hns3_nic_net_stop(ndev);
2965 + }
2966 +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2967 +index 6fd7ea8074b0..13f43b74fd6d 100644
2968 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2969 ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
2970 +@@ -2825,15 +2825,13 @@ static void hclge_clear_reset_cause(struct hclge_dev *hdev)
2971 + static void hclge_reset(struct hclge_dev *hdev)
2972 + {
2973 + /* perform reset of the stack & ae device for a client */
2974 +-
2975 ++ rtnl_lock();
2976 + hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
2977 +
2978 + if (!hclge_reset_wait(hdev)) {
2979 +- rtnl_lock();
2980 + hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
2981 + hclge_reset_ae_dev(hdev->ae_dev);
2982 + hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
2983 +- rtnl_unlock();
2984 +
2985 + hclge_clear_reset_cause(hdev);
2986 + } else {
2987 +@@ -2843,6 +2841,7 @@ static void hclge_reset(struct hclge_dev *hdev)
2988 + }
2989 +
2990 + hclge_notify_client(hdev, HNAE3_UP_CLIENT);
2991 ++ rtnl_unlock();
2992 + }
2993 +
2994 + static void hclge_reset_event(struct hnae3_handle *handle)
2995 +diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
2996 +index 0319ed9ef8b8..f7f08e3fa761 100644
2997 +--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
2998 ++++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
2999 +@@ -5011,6 +5011,12 @@ static int mvpp2_probe(struct platform_device *pdev)
3000 + (unsigned long)of_device_get_match_data(&pdev->dev);
3001 + }
3002 +
3003 ++ /* multi queue mode isn't supported on PPV2.1, fallback to single
3004 ++ * mode
3005 ++ */
3006 ++ if (priv->hw_version == MVPP21)
3007 ++ queue_mode = MVPP2_QDIST_SINGLE_MODE;
3008 ++
3009 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3010 + base = devm_ioremap_resource(&pdev->dev, res);
3011 + if (IS_ERR(base))
3012 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
3013 +index 384c1fa49081..f167f4eec3ff 100644
3014 +--- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
3015 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
3016 +@@ -452,6 +452,7 @@ const char *mlx5_command_str(int command)
3017 + MLX5_COMMAND_STR_CASE(SET_HCA_CAP);
3018 + MLX5_COMMAND_STR_CASE(QUERY_ISSI);
3019 + MLX5_COMMAND_STR_CASE(SET_ISSI);
3020 ++ MLX5_COMMAND_STR_CASE(SET_DRIVER_VERSION);
3021 + MLX5_COMMAND_STR_CASE(CREATE_MKEY);
3022 + MLX5_COMMAND_STR_CASE(QUERY_MKEY);
3023 + MLX5_COMMAND_STR_CASE(DESTROY_MKEY);
3024 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
3025 +index b994b80d5714..922811fb66e7 100644
3026 +--- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c
3027 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
3028 +@@ -132,11 +132,11 @@ void mlx5_add_device(struct mlx5_interface *intf, struct mlx5_priv *priv)
3029 + delayed_event_start(priv);
3030 +
3031 + dev_ctx->context = intf->add(dev);
3032 +- set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
3033 +- if (intf->attach)
3034 +- set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
3035 +-
3036 + if (dev_ctx->context) {
3037 ++ set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
3038 ++ if (intf->attach)
3039 ++ set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
3040 ++
3041 + spin_lock_irq(&priv->ctx_lock);
3042 + list_add_tail(&dev_ctx->list, &priv->ctx_list);
3043 +
3044 +@@ -211,12 +211,17 @@ static void mlx5_attach_interface(struct mlx5_interface *intf, struct mlx5_priv
3045 + if (intf->attach) {
3046 + if (test_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state))
3047 + goto out;
3048 +- intf->attach(dev, dev_ctx->context);
3049 ++ if (intf->attach(dev, dev_ctx->context))
3050 ++ goto out;
3051 ++
3052 + set_bit(MLX5_INTERFACE_ATTACHED, &dev_ctx->state);
3053 + } else {
3054 + if (test_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state))
3055 + goto out;
3056 + dev_ctx->context = intf->add(dev);
3057 ++ if (!dev_ctx->context)
3058 ++ goto out;
3059 ++
3060 + set_bit(MLX5_INTERFACE_ADDED, &dev_ctx->state);
3061 + }
3062 +
3063 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
3064 +index 91f1209886ff..4c53957c918c 100644
3065 +--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
3066 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
3067 +@@ -658,6 +658,7 @@ static int esw_create_offloads_fdb_tables(struct mlx5_eswitch *esw, int nvports)
3068 + if (err)
3069 + goto miss_rule_err;
3070 +
3071 ++ kvfree(flow_group_in);
3072 + return 0;
3073 +
3074 + miss_rule_err:
3075 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
3076 +index 6ddb2565884d..0031c510ab68 100644
3077 +--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
3078 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
3079 +@@ -1649,6 +1649,33 @@ static u64 matched_fgs_get_version(struct list_head *match_head)
3080 + return version;
3081 + }
3082 +
3083 ++static struct fs_fte *
3084 ++lookup_fte_locked(struct mlx5_flow_group *g,
3085 ++ u32 *match_value,
3086 ++ bool take_write)
3087 ++{
3088 ++ struct fs_fte *fte_tmp;
3089 ++
3090 ++ if (take_write)
3091 ++ nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);
3092 ++ else
3093 ++ nested_down_read_ref_node(&g->node, FS_LOCK_PARENT);
3094 ++ fte_tmp = rhashtable_lookup_fast(&g->ftes_hash, match_value,
3095 ++ rhash_fte);
3096 ++ if (!fte_tmp || !tree_get_node(&fte_tmp->node)) {
3097 ++ fte_tmp = NULL;
3098 ++ goto out;
3099 ++ }
3100 ++
3101 ++ nested_down_write_ref_node(&fte_tmp->node, FS_LOCK_CHILD);
3102 ++out:
3103 ++ if (take_write)
3104 ++ up_write_ref_node(&g->node);
3105 ++ else
3106 ++ up_read_ref_node(&g->node);
3107 ++ return fte_tmp;
3108 ++}
3109 ++
3110 + static struct mlx5_flow_handle *
3111 + try_add_to_existing_fg(struct mlx5_flow_table *ft,
3112 + struct list_head *match_head,
3113 +@@ -1671,10 +1698,6 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
3114 + if (IS_ERR(fte))
3115 + return ERR_PTR(-ENOMEM);
3116 +
3117 +- list_for_each_entry(iter, match_head, list) {
3118 +- nested_down_read_ref_node(&iter->g->node, FS_LOCK_PARENT);
3119 +- }
3120 +-
3121 + search_again_locked:
3122 + version = matched_fgs_get_version(match_head);
3123 + /* Try to find a fg that already contains a matching fte */
3124 +@@ -1682,20 +1705,9 @@ search_again_locked:
3125 + struct fs_fte *fte_tmp;
3126 +
3127 + g = iter->g;
3128 +- fte_tmp = rhashtable_lookup_fast(&g->ftes_hash, spec->match_value,
3129 +- rhash_fte);
3130 +- if (!fte_tmp || !tree_get_node(&fte_tmp->node))
3131 ++ fte_tmp = lookup_fte_locked(g, spec->match_value, take_write);
3132 ++ if (!fte_tmp)
3133 + continue;
3134 +-
3135 +- nested_down_write_ref_node(&fte_tmp->node, FS_LOCK_CHILD);
3136 +- if (!take_write) {
3137 +- list_for_each_entry(iter, match_head, list)
3138 +- up_read_ref_node(&iter->g->node);
3139 +- } else {
3140 +- list_for_each_entry(iter, match_head, list)
3141 +- up_write_ref_node(&iter->g->node);
3142 +- }
3143 +-
3144 + rule = add_rule_fg(g, spec->match_value,
3145 + flow_act, dest, dest_num, fte_tmp);
3146 + up_write_ref_node(&fte_tmp->node);
3147 +@@ -1704,19 +1716,6 @@ search_again_locked:
3148 + return rule;
3149 + }
3150 +
3151 +- /* No group with matching fte found. Try to add a new fte to any
3152 +- * matching fg.
3153 +- */
3154 +-
3155 +- if (!take_write) {
3156 +- list_for_each_entry(iter, match_head, list)
3157 +- up_read_ref_node(&iter->g->node);
3158 +- list_for_each_entry(iter, match_head, list)
3159 +- nested_down_write_ref_node(&iter->g->node,
3160 +- FS_LOCK_PARENT);
3161 +- take_write = true;
3162 +- }
3163 +-
3164 + /* Check the ft version, for case that new flow group
3165 + * was added while the fgs weren't locked
3166 + */
3167 +@@ -1728,27 +1727,30 @@ search_again_locked:
3168 + /* Check the fgs version, for case the new FTE with the
3169 + * same values was added while the fgs weren't locked
3170 + */
3171 +- if (version != matched_fgs_get_version(match_head))
3172 ++ if (version != matched_fgs_get_version(match_head)) {
3173 ++ take_write = true;
3174 + goto search_again_locked;
3175 ++ }
3176 +
3177 + list_for_each_entry(iter, match_head, list) {
3178 + g = iter->g;
3179 +
3180 + if (!g->node.active)
3181 + continue;
3182 ++
3183 ++ nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);
3184 ++
3185 + err = insert_fte(g, fte);
3186 + if (err) {
3187 ++ up_write_ref_node(&g->node);
3188 + if (err == -ENOSPC)
3189 + continue;
3190 +- list_for_each_entry(iter, match_head, list)
3191 +- up_write_ref_node(&iter->g->node);
3192 + kmem_cache_free(steering->ftes_cache, fte);
3193 + return ERR_PTR(err);
3194 + }
3195 +
3196 + nested_down_write_ref_node(&fte->node, FS_LOCK_CHILD);
3197 +- list_for_each_entry(iter, match_head, list)
3198 +- up_write_ref_node(&iter->g->node);
3199 ++ up_write_ref_node(&g->node);
3200 + rule = add_rule_fg(g, spec->match_value,
3201 + flow_act, dest, dest_num, fte);
3202 + up_write_ref_node(&fte->node);
3203 +@@ -1757,8 +1759,6 @@ search_again_locked:
3204 + }
3205 + rule = ERR_PTR(-ENOENT);
3206 + out:
3207 +- list_for_each_entry(iter, match_head, list)
3208 +- up_write_ref_node(&iter->g->node);
3209 + kmem_cache_free(steering->ftes_cache, fte);
3210 + return rule;
3211 + }
3212 +@@ -1797,6 +1797,8 @@ search_again_locked:
3213 + if (err) {
3214 + if (take_write)
3215 + up_write_ref_node(&ft->node);
3216 ++ else
3217 ++ up_read_ref_node(&ft->node);
3218 + return ERR_PTR(err);
3219 + }
3220 +
3221 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
3222 +index d39b0b7011b2..9f39aeca863f 100644
3223 +--- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
3224 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
3225 +@@ -331,9 +331,17 @@ void mlx5_start_health_poll(struct mlx5_core_dev *dev)
3226 + add_timer(&health->timer);
3227 + }
3228 +
3229 +-void mlx5_stop_health_poll(struct mlx5_core_dev *dev)
3230 ++void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health)
3231 + {
3232 + struct mlx5_core_health *health = &dev->priv.health;
3233 ++ unsigned long flags;
3234 ++
3235 ++ if (disable_health) {
3236 ++ spin_lock_irqsave(&health->wq_lock, flags);
3237 ++ set_bit(MLX5_DROP_NEW_HEALTH_WORK, &health->flags);
3238 ++ set_bit(MLX5_DROP_NEW_RECOVERY_WORK, &health->flags);
3239 ++ spin_unlock_irqrestore(&health->wq_lock, flags);
3240 ++ }
3241 +
3242 + del_timer_sync(&health->timer);
3243 + }
3244 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
3245 +index 615005e63819..76e6ca87db11 100644
3246 +--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
3247 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
3248 +@@ -874,8 +874,10 @@ static int mlx5_pci_init(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
3249 + priv->numa_node = dev_to_node(&dev->pdev->dev);
3250 +
3251 + priv->dbg_root = debugfs_create_dir(dev_name(&pdev->dev), mlx5_debugfs_root);
3252 +- if (!priv->dbg_root)
3253 ++ if (!priv->dbg_root) {
3254 ++ dev_err(&pdev->dev, "Cannot create debugfs dir, aborting\n");
3255 + return -ENOMEM;
3256 ++ }
3257 +
3258 + err = mlx5_pci_enable_device(dev);
3259 + if (err) {
3260 +@@ -924,7 +926,7 @@ static void mlx5_pci_close(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
3261 + pci_clear_master(dev->pdev);
3262 + release_bar(dev->pdev);
3263 + mlx5_pci_disable_device(dev);
3264 +- debugfs_remove(priv->dbg_root);
3265 ++ debugfs_remove_recursive(priv->dbg_root);
3266 + }
3267 +
3268 + static int mlx5_init_once(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
3269 +@@ -1266,7 +1268,7 @@ err_cleanup_once:
3270 + mlx5_cleanup_once(dev);
3271 +
3272 + err_stop_poll:
3273 +- mlx5_stop_health_poll(dev);
3274 ++ mlx5_stop_health_poll(dev, boot);
3275 + if (mlx5_cmd_teardown_hca(dev)) {
3276 + dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
3277 + goto out_err;
3278 +@@ -1325,7 +1327,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
3279 + mlx5_free_irq_vectors(dev);
3280 + if (cleanup)
3281 + mlx5_cleanup_once(dev);
3282 +- mlx5_stop_health_poll(dev);
3283 ++ mlx5_stop_health_poll(dev, cleanup);
3284 + err = mlx5_cmd_teardown_hca(dev);
3285 + if (err) {
3286 + dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
3287 +@@ -1587,7 +1589,7 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *dev)
3288 + * with the HCA, so the health polll is no longer needed.
3289 + */
3290 + mlx5_drain_health_wq(dev);
3291 +- mlx5_stop_health_poll(dev);
3292 ++ mlx5_stop_health_poll(dev, false);
3293 +
3294 + ret = mlx5_cmd_force_teardown_hca(dev);
3295 + if (ret) {
3296 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/wq.c b/drivers/net/ethernet/mellanox/mlx5/core/wq.c
3297 +index c8c315eb5128..d838af9539b1 100644
3298 +--- a/drivers/net/ethernet/mellanox/mlx5/core/wq.c
3299 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/wq.c
3300 +@@ -39,9 +39,9 @@ u32 mlx5_wq_cyc_get_size(struct mlx5_wq_cyc *wq)
3301 + return (u32)wq->fbc.sz_m1 + 1;
3302 + }
3303 +
3304 +-u32 mlx5_wq_cyc_get_frag_size(struct mlx5_wq_cyc *wq)
3305 ++u16 mlx5_wq_cyc_get_frag_size(struct mlx5_wq_cyc *wq)
3306 + {
3307 +- return (u32)wq->fbc.frag_sz_m1 + 1;
3308 ++ return wq->fbc.frag_sz_m1 + 1;
3309 + }
3310 +
3311 + u32 mlx5_cqwq_get_size(struct mlx5_cqwq *wq)
3312 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/wq.h b/drivers/net/ethernet/mellanox/mlx5/core/wq.h
3313 +index 0b47126815b6..16476cc1a602 100644
3314 +--- a/drivers/net/ethernet/mellanox/mlx5/core/wq.h
3315 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/wq.h
3316 +@@ -80,7 +80,7 @@ int mlx5_wq_cyc_create(struct mlx5_core_dev *mdev, struct mlx5_wq_param *param,
3317 + void *wqc, struct mlx5_wq_cyc *wq,
3318 + struct mlx5_wq_ctrl *wq_ctrl);
3319 + u32 mlx5_wq_cyc_get_size(struct mlx5_wq_cyc *wq);
3320 +-u32 mlx5_wq_cyc_get_frag_size(struct mlx5_wq_cyc *wq);
3321 ++u16 mlx5_wq_cyc_get_frag_size(struct mlx5_wq_cyc *wq);
3322 +
3323 + int mlx5_wq_qp_create(struct mlx5_core_dev *mdev, struct mlx5_wq_param *param,
3324 + void *qpc, struct mlx5_wq_qp *wq,
3325 +diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c
3326 +index 152283d7e59c..4a540c5e27fe 100644
3327 +--- a/drivers/net/ethernet/netronome/nfp/nfp_main.c
3328 ++++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c
3329 +@@ -236,16 +236,20 @@ static int nfp_pcie_sriov_read_nfd_limit(struct nfp_pf *pf)
3330 + int err;
3331 +
3332 + pf->limit_vfs = nfp_rtsym_read_le(pf->rtbl, "nfd_vf_cfg_max_vfs", &err);
3333 +- if (!err)
3334 +- return pci_sriov_set_totalvfs(pf->pdev, pf->limit_vfs);
3335 ++ if (err) {
3336 ++ /* For backwards compatibility if symbol not found allow all */
3337 ++ pf->limit_vfs = ~0;
3338 ++ if (err == -ENOENT)
3339 ++ return 0;
3340 +
3341 +- pf->limit_vfs = ~0;
3342 +- /* Allow any setting for backwards compatibility if symbol not found */
3343 +- if (err == -ENOENT)
3344 +- return 0;
3345 ++ nfp_warn(pf->cpp, "Warning: VF limit read failed: %d\n", err);
3346 ++ return err;
3347 ++ }
3348 +
3349 +- nfp_warn(pf->cpp, "Warning: VF limit read failed: %d\n", err);
3350 +- return err;
3351 ++ err = pci_sriov_set_totalvfs(pf->pdev, pf->limit_vfs);
3352 ++ if (err)
3353 ++ nfp_warn(pf->cpp, "Failed to set VF count in sysfs: %d\n", err);
3354 ++ return 0;
3355 + }
3356 +
3357 + static int nfp_pcie_sriov_enable(struct pci_dev *pdev, int num_vfs)
3358 +diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
3359 +index c2a9e64bc57b..bfccc1955907 100644
3360 +--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
3361 ++++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
3362 +@@ -1093,7 +1093,7 @@ static bool nfp_net_xdp_complete(struct nfp_net_tx_ring *tx_ring)
3363 + * @dp: NFP Net data path struct
3364 + * @tx_ring: TX ring structure
3365 + *
3366 +- * Assumes that the device is stopped
3367 ++ * Assumes that the device is stopped, must be idempotent.
3368 + */
3369 + static void
3370 + nfp_net_tx_ring_reset(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
3371 +@@ -1295,13 +1295,18 @@ static void nfp_net_rx_give_one(const struct nfp_net_dp *dp,
3372 + * nfp_net_rx_ring_reset() - Reflect in SW state of freelist after disable
3373 + * @rx_ring: RX ring structure
3374 + *
3375 +- * Warning: Do *not* call if ring buffers were never put on the FW freelist
3376 +- * (i.e. device was not enabled)!
3377 ++ * Assumes that the device is stopped, must be idempotent.
3378 + */
3379 + static void nfp_net_rx_ring_reset(struct nfp_net_rx_ring *rx_ring)
3380 + {
3381 + unsigned int wr_idx, last_idx;
3382 +
3383 ++ /* wr_p == rd_p means ring was never fed FL bufs. RX rings are always
3384 ++ * kept at cnt - 1 FL bufs.
3385 ++ */
3386 ++ if (rx_ring->wr_p == 0 && rx_ring->rd_p == 0)
3387 ++ return;
3388 ++
3389 + /* Move the empty entry to the end of the list */
3390 + wr_idx = D_IDX(rx_ring, rx_ring->wr_p);
3391 + last_idx = rx_ring->cnt - 1;
3392 +@@ -2524,6 +2529,8 @@ static void nfp_net_vec_clear_ring_data(struct nfp_net *nn, unsigned int idx)
3393 + /**
3394 + * nfp_net_clear_config_and_disable() - Clear control BAR and disable NFP
3395 + * @nn: NFP Net device to reconfigure
3396 ++ *
3397 ++ * Warning: must be fully idempotent.
3398 + */
3399 + static void nfp_net_clear_config_and_disable(struct nfp_net *nn)
3400 + {
3401 +diff --git a/drivers/net/ethernet/qualcomm/qca_7k.c b/drivers/net/ethernet/qualcomm/qca_7k.c
3402 +index ffe7a16bdfc8..6c8543fb90c0 100644
3403 +--- a/drivers/net/ethernet/qualcomm/qca_7k.c
3404 ++++ b/drivers/net/ethernet/qualcomm/qca_7k.c
3405 +@@ -45,34 +45,33 @@ qcaspi_read_register(struct qcaspi *qca, u16 reg, u16 *result)
3406 + {
3407 + __be16 rx_data;
3408 + __be16 tx_data;
3409 +- struct spi_transfer *transfer;
3410 +- struct spi_message *msg;
3411 ++ struct spi_transfer transfer[2];
3412 ++ struct spi_message msg;
3413 + int ret;
3414 +
3415 ++ memset(transfer, 0, sizeof(transfer));
3416 ++
3417 ++ spi_message_init(&msg);
3418 ++
3419 + tx_data = cpu_to_be16(QCA7K_SPI_READ | QCA7K_SPI_INTERNAL | reg);
3420 ++ *result = 0;
3421 ++
3422 ++ transfer[0].tx_buf = &tx_data;
3423 ++ transfer[0].len = QCASPI_CMD_LEN;
3424 ++ transfer[1].rx_buf = &rx_data;
3425 ++ transfer[1].len = QCASPI_CMD_LEN;
3426 ++
3427 ++ spi_message_add_tail(&transfer[0], &msg);
3428 +
3429 + if (qca->legacy_mode) {
3430 +- msg = &qca->spi_msg1;
3431 +- transfer = &qca->spi_xfer1;
3432 +- transfer->tx_buf = &tx_data;
3433 +- transfer->rx_buf = NULL;
3434 +- transfer->len = QCASPI_CMD_LEN;
3435 +- spi_sync(qca->spi_dev, msg);
3436 +- } else {
3437 +- msg = &qca->spi_msg2;
3438 +- transfer = &qca->spi_xfer2[0];
3439 +- transfer->tx_buf = &tx_data;
3440 +- transfer->rx_buf = NULL;
3441 +- transfer->len = QCASPI_CMD_LEN;
3442 +- transfer = &qca->spi_xfer2[1];
3443 ++ spi_sync(qca->spi_dev, &msg);
3444 ++ spi_message_init(&msg);
3445 + }
3446 +- transfer->tx_buf = NULL;
3447 +- transfer->rx_buf = &rx_data;
3448 +- transfer->len = QCASPI_CMD_LEN;
3449 +- ret = spi_sync(qca->spi_dev, msg);
3450 ++ spi_message_add_tail(&transfer[1], &msg);
3451 ++ ret = spi_sync(qca->spi_dev, &msg);
3452 +
3453 + if (!ret)
3454 +- ret = msg->status;
3455 ++ ret = msg.status;
3456 +
3457 + if (ret)
3458 + qcaspi_spi_error(qca);
3459 +@@ -86,35 +85,32 @@ int
3460 + qcaspi_write_register(struct qcaspi *qca, u16 reg, u16 value)
3461 + {
3462 + __be16 tx_data[2];
3463 +- struct spi_transfer *transfer;
3464 +- struct spi_message *msg;
3465 ++ struct spi_transfer transfer[2];
3466 ++ struct spi_message msg;
3467 + int ret;
3468 +
3469 ++ memset(&transfer, 0, sizeof(transfer));
3470 ++
3471 ++ spi_message_init(&msg);
3472 ++
3473 + tx_data[0] = cpu_to_be16(QCA7K_SPI_WRITE | QCA7K_SPI_INTERNAL | reg);
3474 + tx_data[1] = cpu_to_be16(value);
3475 +
3476 ++ transfer[0].tx_buf = &tx_data[0];
3477 ++ transfer[0].len = QCASPI_CMD_LEN;
3478 ++ transfer[1].tx_buf = &tx_data[1];
3479 ++ transfer[1].len = QCASPI_CMD_LEN;
3480 ++
3481 ++ spi_message_add_tail(&transfer[0], &msg);
3482 + if (qca->legacy_mode) {
3483 +- msg = &qca->spi_msg1;
3484 +- transfer = &qca->spi_xfer1;
3485 +- transfer->tx_buf = &tx_data[0];
3486 +- transfer->rx_buf = NULL;
3487 +- transfer->len = QCASPI_CMD_LEN;
3488 +- spi_sync(qca->spi_dev, msg);
3489 +- } else {
3490 +- msg = &qca->spi_msg2;
3491 +- transfer = &qca->spi_xfer2[0];
3492 +- transfer->tx_buf = &tx_data[0];
3493 +- transfer->rx_buf = NULL;
3494 +- transfer->len = QCASPI_CMD_LEN;
3495 +- transfer = &qca->spi_xfer2[1];
3496 ++ spi_sync(qca->spi_dev, &msg);
3497 ++ spi_message_init(&msg);
3498 + }
3499 +- transfer->tx_buf = &tx_data[1];
3500 +- transfer->rx_buf = NULL;
3501 +- transfer->len = QCASPI_CMD_LEN;
3502 +- ret = spi_sync(qca->spi_dev, msg);
3503 ++ spi_message_add_tail(&transfer[1], &msg);
3504 ++ ret = spi_sync(qca->spi_dev, &msg);
3505 +
3506 + if (!ret)
3507 +- ret = msg->status;
3508 ++ ret = msg.status;
3509 +
3510 + if (ret)
3511 + qcaspi_spi_error(qca);
3512 +diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
3513 +index 206f0266463e..66b775d462fd 100644
3514 +--- a/drivers/net/ethernet/qualcomm/qca_spi.c
3515 ++++ b/drivers/net/ethernet/qualcomm/qca_spi.c
3516 +@@ -99,22 +99,24 @@ static u32
3517 + qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
3518 + {
3519 + __be16 cmd;
3520 +- struct spi_message *msg = &qca->spi_msg2;
3521 +- struct spi_transfer *transfer = &qca->spi_xfer2[0];
3522 ++ struct spi_message msg;
3523 ++ struct spi_transfer transfer[2];
3524 + int ret;
3525 +
3526 ++ memset(&transfer, 0, sizeof(transfer));
3527 ++ spi_message_init(&msg);
3528 ++
3529 + cmd = cpu_to_be16(QCA7K_SPI_WRITE | QCA7K_SPI_EXTERNAL);
3530 +- transfer->tx_buf = &cmd;
3531 +- transfer->rx_buf = NULL;
3532 +- transfer->len = QCASPI_CMD_LEN;
3533 +- transfer = &qca->spi_xfer2[1];
3534 +- transfer->tx_buf = src;
3535 +- transfer->rx_buf = NULL;
3536 +- transfer->len = len;
3537 ++ transfer[0].tx_buf = &cmd;
3538 ++ transfer[0].len = QCASPI_CMD_LEN;
3539 ++ transfer[1].tx_buf = src;
3540 ++ transfer[1].len = len;
3541 +
3542 +- ret = spi_sync(qca->spi_dev, msg);
3543 ++ spi_message_add_tail(&transfer[0], &msg);
3544 ++ spi_message_add_tail(&transfer[1], &msg);
3545 ++ ret = spi_sync(qca->spi_dev, &msg);
3546 +
3547 +- if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
3548 ++ if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
3549 + qcaspi_spi_error(qca);
3550 + return 0;
3551 + }
3552 +@@ -125,17 +127,20 @@ qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
3553 + static u32
3554 + qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
3555 + {
3556 +- struct spi_message *msg = &qca->spi_msg1;
3557 +- struct spi_transfer *transfer = &qca->spi_xfer1;
3558 ++ struct spi_message msg;
3559 ++ struct spi_transfer transfer;
3560 + int ret;
3561 +
3562 +- transfer->tx_buf = src;
3563 +- transfer->rx_buf = NULL;
3564 +- transfer->len = len;
3565 ++ memset(&transfer, 0, sizeof(transfer));
3566 ++ spi_message_init(&msg);
3567 ++
3568 ++ transfer.tx_buf = src;
3569 ++ transfer.len = len;
3570 +
3571 +- ret = spi_sync(qca->spi_dev, msg);
3572 ++ spi_message_add_tail(&transfer, &msg);
3573 ++ ret = spi_sync(qca->spi_dev, &msg);
3574 +
3575 +- if (ret || (msg->actual_length != len)) {
3576 ++ if (ret || (msg.actual_length != len)) {
3577 + qcaspi_spi_error(qca);
3578 + return 0;
3579 + }
3580 +@@ -146,23 +151,25 @@ qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
3581 + static u32
3582 + qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
3583 + {
3584 +- struct spi_message *msg = &qca->spi_msg2;
3585 ++ struct spi_message msg;
3586 + __be16 cmd;
3587 +- struct spi_transfer *transfer = &qca->spi_xfer2[0];
3588 ++ struct spi_transfer transfer[2];
3589 + int ret;
3590 +
3591 ++ memset(&transfer, 0, sizeof(transfer));
3592 ++ spi_message_init(&msg);
3593 ++
3594 + cmd = cpu_to_be16(QCA7K_SPI_READ | QCA7K_SPI_EXTERNAL);
3595 +- transfer->tx_buf = &cmd;
3596 +- transfer->rx_buf = NULL;
3597 +- transfer->len = QCASPI_CMD_LEN;
3598 +- transfer = &qca->spi_xfer2[1];
3599 +- transfer->tx_buf = NULL;
3600 +- transfer->rx_buf = dst;
3601 +- transfer->len = len;
3602 ++ transfer[0].tx_buf = &cmd;
3603 ++ transfer[0].len = QCASPI_CMD_LEN;
3604 ++ transfer[1].rx_buf = dst;
3605 ++ transfer[1].len = len;
3606 +
3607 +- ret = spi_sync(qca->spi_dev, msg);
3608 ++ spi_message_add_tail(&transfer[0], &msg);
3609 ++ spi_message_add_tail(&transfer[1], &msg);
3610 ++ ret = spi_sync(qca->spi_dev, &msg);
3611 +
3612 +- if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
3613 ++ if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
3614 + qcaspi_spi_error(qca);
3615 + return 0;
3616 + }
3617 +@@ -173,17 +180,20 @@ qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
3618 + static u32
3619 + qcaspi_read_legacy(struct qcaspi *qca, u8 *dst, u32 len)
3620 + {
3621 +- struct spi_message *msg = &qca->spi_msg1;
3622 +- struct spi_transfer *transfer = &qca->spi_xfer1;
3623 ++ struct spi_message msg;
3624 ++ struct spi_transfer transfer;
3625 + int ret;
3626 +
3627 +- transfer->tx_buf = NULL;
3628 +- transfer->rx_buf = dst;
3629 +- transfer->len = len;
3630 ++ memset(&transfer, 0, sizeof(transfer));
3631 ++ spi_message_init(&msg);
3632 +
3633 +- ret = spi_sync(qca->spi_dev, msg);
3634 ++ transfer.rx_buf = dst;
3635 ++ transfer.len = len;
3636 +
3637 +- if (ret || (msg->actual_length != len)) {
3638 ++ spi_message_add_tail(&transfer, &msg);
3639 ++ ret = spi_sync(qca->spi_dev, &msg);
3640 ++
3641 ++ if (ret || (msg.actual_length != len)) {
3642 + qcaspi_spi_error(qca);
3643 + return 0;
3644 + }
3645 +@@ -195,19 +205,23 @@ static int
3646 + qcaspi_tx_cmd(struct qcaspi *qca, u16 cmd)
3647 + {
3648 + __be16 tx_data;
3649 +- struct spi_message *msg = &qca->spi_msg1;
3650 +- struct spi_transfer *transfer = &qca->spi_xfer1;
3651 ++ struct spi_message msg;
3652 ++ struct spi_transfer transfer;
3653 + int ret;
3654 +
3655 ++ memset(&transfer, 0, sizeof(transfer));
3656 ++
3657 ++ spi_message_init(&msg);
3658 ++
3659 + tx_data = cpu_to_be16(cmd);
3660 +- transfer->len = sizeof(tx_data);
3661 +- transfer->tx_buf = &tx_data;
3662 +- transfer->rx_buf = NULL;
3663 ++ transfer.len = sizeof(cmd);
3664 ++ transfer.tx_buf = &tx_data;
3665 ++ spi_message_add_tail(&transfer, &msg);
3666 +
3667 +- ret = spi_sync(qca->spi_dev, msg);
3668 ++ ret = spi_sync(qca->spi_dev, &msg);
3669 +
3670 + if (!ret)
3671 +- ret = msg->status;
3672 ++ ret = msg.status;
3673 +
3674 + if (ret)
3675 + qcaspi_spi_error(qca);
3676 +@@ -835,16 +849,6 @@ qcaspi_netdev_setup(struct net_device *dev)
3677 + qca = netdev_priv(dev);
3678 + memset(qca, 0, sizeof(struct qcaspi));
3679 +
3680 +- memset(&qca->spi_xfer1, 0, sizeof(struct spi_transfer));
3681 +- memset(&qca->spi_xfer2, 0, sizeof(struct spi_transfer) * 2);
3682 +-
3683 +- spi_message_init(&qca->spi_msg1);
3684 +- spi_message_add_tail(&qca->spi_xfer1, &qca->spi_msg1);
3685 +-
3686 +- spi_message_init(&qca->spi_msg2);
3687 +- spi_message_add_tail(&qca->spi_xfer2[0], &qca->spi_msg2);
3688 +- spi_message_add_tail(&qca->spi_xfer2[1], &qca->spi_msg2);
3689 +-
3690 + memset(&qca->txr, 0, sizeof(qca->txr));
3691 + qca->txr.count = TX_RING_MAX_LEN;
3692 + }
3693 +diff --git a/drivers/net/ethernet/qualcomm/qca_spi.h b/drivers/net/ethernet/qualcomm/qca_spi.h
3694 +index fc4beb1b32d1..fc0e98726b36 100644
3695 +--- a/drivers/net/ethernet/qualcomm/qca_spi.h
3696 ++++ b/drivers/net/ethernet/qualcomm/qca_spi.h
3697 +@@ -83,11 +83,6 @@ struct qcaspi {
3698 + struct tx_ring txr;
3699 + struct qcaspi_stats stats;
3700 +
3701 +- struct spi_message spi_msg1;
3702 +- struct spi_message spi_msg2;
3703 +- struct spi_transfer spi_xfer1;
3704 +- struct spi_transfer spi_xfer2[2];
3705 +-
3706 + u8 *rx_buffer;
3707 + u32 buffer_size;
3708 + u8 sync;
3709 +diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
3710 +index 9b09c9d0d0fb..5f0366a125e2 100644
3711 +--- a/drivers/net/wan/fsl_ucc_hdlc.c
3712 ++++ b/drivers/net/wan/fsl_ucc_hdlc.c
3713 +@@ -192,7 +192,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
3714 + priv->ucc_pram_offset = qe_muram_alloc(sizeof(struct ucc_hdlc_param),
3715 + ALIGNMENT_OF_UCC_HDLC_PRAM);
3716 +
3717 +- if (priv->ucc_pram_offset < 0) {
3718 ++ if (IS_ERR_VALUE(priv->ucc_pram_offset)) {
3719 + dev_err(priv->dev, "Can not allocate MURAM for hdlc parameter.\n");
3720 + ret = -ENOMEM;
3721 + goto free_tx_bd;
3722 +@@ -230,14 +230,14 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
3723 +
3724 + /* Alloc riptr, tiptr */
3725 + riptr = qe_muram_alloc(32, 32);
3726 +- if (riptr < 0) {
3727 ++ if (IS_ERR_VALUE(riptr)) {
3728 + dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n");
3729 + ret = -ENOMEM;
3730 + goto free_tx_skbuff;
3731 + }
3732 +
3733 + tiptr = qe_muram_alloc(32, 32);
3734 +- if (tiptr < 0) {
3735 ++ if (IS_ERR_VALUE(tiptr)) {
3736 + dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n");
3737 + ret = -ENOMEM;
3738 + goto free_riptr;
3739 +diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
3740 +index 45ea32796cda..92b38a21cd10 100644
3741 +--- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
3742 ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
3743 +@@ -660,7 +660,7 @@ static inline void iwl_enable_fw_load_int(struct iwl_trans *trans)
3744 + }
3745 + }
3746 +
3747 +-static inline u8 iwl_pcie_get_cmd_index(struct iwl_txq *q, u32 index)
3748 ++static inline u8 iwl_pcie_get_cmd_index(const struct iwl_txq *q, u32 index)
3749 + {
3750 + return index & (q->n_window - 1);
3751 + }
3752 +@@ -730,9 +730,13 @@ static inline void iwl_stop_queue(struct iwl_trans *trans,
3753 +
3754 + static inline bool iwl_queue_used(const struct iwl_txq *q, int i)
3755 + {
3756 +- return q->write_ptr >= q->read_ptr ?
3757 +- (i >= q->read_ptr && i < q->write_ptr) :
3758 +- !(i < q->read_ptr && i >= q->write_ptr);
3759 ++ int index = iwl_pcie_get_cmd_index(q, i);
3760 ++ int r = iwl_pcie_get_cmd_index(q, q->read_ptr);
3761 ++ int w = iwl_pcie_get_cmd_index(q, q->write_ptr);
3762 ++
3763 ++ return w >= r ?
3764 ++ (index >= r && index < w) :
3765 ++ !(index < r && index >= w);
3766 + }
3767 +
3768 + static inline bool iwl_is_rfkill_set(struct iwl_trans *trans)
3769 +diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
3770 +index 473fe7ccb07c..11bd7ce2be8e 100644
3771 +--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
3772 ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
3773 +@@ -1225,9 +1225,13 @@ static void iwl_pcie_cmdq_reclaim(struct iwl_trans *trans, int txq_id, int idx)
3774 + struct iwl_txq *txq = trans_pcie->txq[txq_id];
3775 + unsigned long flags;
3776 + int nfreed = 0;
3777 ++ u16 r;
3778 +
3779 + lockdep_assert_held(&txq->lock);
3780 +
3781 ++ idx = iwl_pcie_get_cmd_index(txq, idx);
3782 ++ r = iwl_pcie_get_cmd_index(txq, txq->read_ptr);
3783 ++
3784 + if ((idx >= TFD_QUEUE_SIZE_MAX) || (!iwl_queue_used(txq, idx))) {
3785 + IWL_ERR(trans,
3786 + "%s: Read index for DMA queue txq id (%d), index %d is out of range [0-%d] %d %d.\n",
3787 +@@ -1236,12 +1240,13 @@ static void iwl_pcie_cmdq_reclaim(struct iwl_trans *trans, int txq_id, int idx)
3788 + return;
3789 + }
3790 +
3791 +- for (idx = iwl_queue_inc_wrap(idx); txq->read_ptr != idx;
3792 +- txq->read_ptr = iwl_queue_inc_wrap(txq->read_ptr)) {
3793 ++ for (idx = iwl_queue_inc_wrap(idx); r != idx;
3794 ++ r = iwl_queue_inc_wrap(r)) {
3795 ++ txq->read_ptr = iwl_queue_inc_wrap(txq->read_ptr);
3796 +
3797 + if (nfreed++ > 0) {
3798 + IWL_ERR(trans, "HCMD skipped: index (%d) %d %d\n",
3799 +- idx, txq->write_ptr, txq->read_ptr);
3800 ++ idx, txq->write_ptr, r);
3801 + iwl_force_nmi(trans);
3802 + }
3803 + }
3804 +diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
3805 +index 9dd2ca62d84a..c2b6aa1d485f 100644
3806 +--- a/drivers/net/xen-netfront.c
3807 ++++ b/drivers/net/xen-netfront.c
3808 +@@ -87,8 +87,7 @@ struct netfront_cb {
3809 + /* IRQ name is queue name with "-tx" or "-rx" appended */
3810 + #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3)
3811 +
3812 +-static DECLARE_WAIT_QUEUE_HEAD(module_load_q);
3813 +-static DECLARE_WAIT_QUEUE_HEAD(module_unload_q);
3814 ++static DECLARE_WAIT_QUEUE_HEAD(module_wq);
3815 +
3816 + struct netfront_stats {
3817 + u64 packets;
3818 +@@ -1331,11 +1330,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
3819 + netif_carrier_off(netdev);
3820 +
3821 + xenbus_switch_state(dev, XenbusStateInitialising);
3822 +- wait_event(module_load_q,
3823 +- xenbus_read_driver_state(dev->otherend) !=
3824 +- XenbusStateClosed &&
3825 +- xenbus_read_driver_state(dev->otherend) !=
3826 +- XenbusStateUnknown);
3827 ++ wait_event(module_wq,
3828 ++ xenbus_read_driver_state(dev->otherend) !=
3829 ++ XenbusStateClosed &&
3830 ++ xenbus_read_driver_state(dev->otherend) !=
3831 ++ XenbusStateUnknown);
3832 + return netdev;
3833 +
3834 + exit:
3835 +@@ -1603,14 +1602,16 @@ static int xennet_init_queue(struct netfront_queue *queue)
3836 + {
3837 + unsigned short i;
3838 + int err = 0;
3839 ++ char *devid;
3840 +
3841 + spin_lock_init(&queue->tx_lock);
3842 + spin_lock_init(&queue->rx_lock);
3843 +
3844 + timer_setup(&queue->rx_refill_timer, rx_refill_timeout, 0);
3845 +
3846 +- snprintf(queue->name, sizeof(queue->name), "%s-q%u",
3847 +- queue->info->netdev->name, queue->id);
3848 ++ devid = strrchr(queue->info->xbdev->nodename, '/') + 1;
3849 ++ snprintf(queue->name, sizeof(queue->name), "vif%s-q%u",
3850 ++ devid, queue->id);
3851 +
3852 + /* Initialise tx_skbs as a free chain containing every entry. */
3853 + queue->tx_skb_freelist = 0;
3854 +@@ -2007,15 +2008,14 @@ static void netback_changed(struct xenbus_device *dev,
3855 +
3856 + dev_dbg(&dev->dev, "%s\n", xenbus_strstate(backend_state));
3857 +
3858 ++ wake_up_all(&module_wq);
3859 ++
3860 + switch (backend_state) {
3861 + case XenbusStateInitialising:
3862 + case XenbusStateInitialised:
3863 + case XenbusStateReconfiguring:
3864 + case XenbusStateReconfigured:
3865 +- break;
3866 +-
3867 + case XenbusStateUnknown:
3868 +- wake_up_all(&module_unload_q);
3869 + break;
3870 +
3871 + case XenbusStateInitWait:
3872 +@@ -2031,12 +2031,10 @@ static void netback_changed(struct xenbus_device *dev,
3873 + break;
3874 +
3875 + case XenbusStateClosed:
3876 +- wake_up_all(&module_unload_q);
3877 + if (dev->state == XenbusStateClosed)
3878 + break;
3879 + /* Missed the backend's CLOSING state -- fallthrough */
3880 + case XenbusStateClosing:
3881 +- wake_up_all(&module_unload_q);
3882 + xenbus_frontend_closed(dev);
3883 + break;
3884 + }
3885 +@@ -2144,14 +2142,14 @@ static int xennet_remove(struct xenbus_device *dev)
3886 +
3887 + if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {
3888 + xenbus_switch_state(dev, XenbusStateClosing);
3889 +- wait_event(module_unload_q,
3890 ++ wait_event(module_wq,
3891 + xenbus_read_driver_state(dev->otherend) ==
3892 + XenbusStateClosing ||
3893 + xenbus_read_driver_state(dev->otherend) ==
3894 + XenbusStateUnknown);
3895 +
3896 + xenbus_switch_state(dev, XenbusStateClosed);
3897 +- wait_event(module_unload_q,
3898 ++ wait_event(module_wq,
3899 + xenbus_read_driver_state(dev->otherend) ==
3900 + XenbusStateClosed ||
3901 + xenbus_read_driver_state(dev->otherend) ==
3902 +diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
3903 +index 66ec5985c9f3..69fb62feb833 100644
3904 +--- a/drivers/nvme/host/rdma.c
3905 ++++ b/drivers/nvme/host/rdma.c
3906 +@@ -1741,6 +1741,8 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
3907 + nvme_rdma_stop_io_queues(ctrl);
3908 + blk_mq_tagset_busy_iter(&ctrl->tag_set,
3909 + nvme_cancel_request, &ctrl->ctrl);
3910 ++ if (shutdown)
3911 ++ nvme_start_queues(&ctrl->ctrl);
3912 + nvme_rdma_destroy_io_queues(ctrl, shutdown);
3913 + }
3914 +
3915 +diff --git a/drivers/nvme/target/io-cmd-file.c b/drivers/nvme/target/io-cmd-file.c
3916 +index 8c42b3a8c420..64c7596a46a1 100644
3917 +--- a/drivers/nvme/target/io-cmd-file.c
3918 ++++ b/drivers/nvme/target/io-cmd-file.c
3919 +@@ -209,22 +209,24 @@ static void nvmet_file_execute_discard(struct nvmet_req *req)
3920 + {
3921 + int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
3922 + struct nvme_dsm_range range;
3923 +- loff_t offset;
3924 +- loff_t len;
3925 +- int i, ret;
3926 ++ loff_t offset, len;
3927 ++ u16 ret;
3928 ++ int i;
3929 +
3930 + for (i = 0; i <= le32_to_cpu(req->cmd->dsm.nr); i++) {
3931 +- if (nvmet_copy_from_sgl(req, i * sizeof(range), &range,
3932 +- sizeof(range)))
3933 ++ ret = nvmet_copy_from_sgl(req, i * sizeof(range), &range,
3934 ++ sizeof(range));
3935 ++ if (ret)
3936 + break;
3937 + offset = le64_to_cpu(range.slba) << req->ns->blksize_shift;
3938 + len = le32_to_cpu(range.nlb) << req->ns->blksize_shift;
3939 +- ret = vfs_fallocate(req->ns->file, mode, offset, len);
3940 +- if (ret)
3941 ++ if (vfs_fallocate(req->ns->file, mode, offset, len)) {
3942 ++ ret = NVME_SC_INTERNAL | NVME_SC_DNR;
3943 + break;
3944 ++ }
3945 + }
3946 +
3947 +- nvmet_req_complete(req, ret < 0 ? NVME_SC_INTERNAL | NVME_SC_DNR : 0);
3948 ++ nvmet_req_complete(req, ret);
3949 + }
3950 +
3951 + static void nvmet_file_dsm_work(struct work_struct *w)
3952 +diff --git a/drivers/of/base.c b/drivers/of/base.c
3953 +index 466e3c8582f0..53a51c6911eb 100644
3954 +--- a/drivers/of/base.c
3955 ++++ b/drivers/of/base.c
3956 +@@ -118,6 +118,9 @@ void of_populate_phandle_cache(void)
3957 + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL)
3958 + phandles++;
3959 +
3960 ++ if (!phandles)
3961 ++ goto out;
3962 ++
3963 + cache_entries = roundup_pow_of_two(phandles);
3964 + phandle_cache_mask = cache_entries - 1;
3965 +
3966 +@@ -719,6 +722,31 @@ struct device_node *of_get_next_available_child(const struct device_node *node,
3967 + }
3968 + EXPORT_SYMBOL(of_get_next_available_child);
3969 +
3970 ++/**
3971 ++ * of_get_compatible_child - Find compatible child node
3972 ++ * @parent: parent node
3973 ++ * @compatible: compatible string
3974 ++ *
3975 ++ * Lookup child node whose compatible property contains the given compatible
3976 ++ * string.
3977 ++ *
3978 ++ * Returns a node pointer with refcount incremented, use of_node_put() on it
3979 ++ * when done; or NULL if not found.
3980 ++ */
3981 ++struct device_node *of_get_compatible_child(const struct device_node *parent,
3982 ++ const char *compatible)
3983 ++{
3984 ++ struct device_node *child;
3985 ++
3986 ++ for_each_child_of_node(parent, child) {
3987 ++ if (of_device_is_compatible(child, compatible))
3988 ++ break;
3989 ++ }
3990 ++
3991 ++ return child;
3992 ++}
3993 ++EXPORT_SYMBOL(of_get_compatible_child);
3994 ++
3995 + /**
3996 + * of_get_child_by_name - Find the child node by name for a given parent
3997 + * @node: parent node
3998 +diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c
3999 +index 01cf1c1a841a..8de329546b82 100644
4000 +--- a/drivers/parport/parport_sunbpp.c
4001 ++++ b/drivers/parport/parport_sunbpp.c
4002 +@@ -286,12 +286,16 @@ static int bpp_probe(struct platform_device *op)
4003 +
4004 + ops = kmemdup(&parport_sunbpp_ops, sizeof(struct parport_operations),
4005 + GFP_KERNEL);
4006 +- if (!ops)
4007 ++ if (!ops) {
4008 ++ err = -ENOMEM;
4009 + goto out_unmap;
4010 ++ }
4011 +
4012 + dprintk(("register_port\n"));
4013 +- if (!(p = parport_register_port((unsigned long)base, irq, dma, ops)))
4014 ++ if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) {
4015 ++ err = -ENOMEM;
4016 + goto out_free_ops;
4017 ++ }
4018 +
4019 + p->size = size;
4020 + p->dev = &op->dev;
4021 +diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
4022 +index a2e88386af28..0fbf612b8ef2 100644
4023 +--- a/drivers/pci/pcie/aer.c
4024 ++++ b/drivers/pci/pcie/aer.c
4025 +@@ -303,6 +303,9 @@ int pcie_aer_get_firmware_first(struct pci_dev *dev)
4026 + if (!pci_is_pcie(dev))
4027 + return 0;
4028 +
4029 ++ if (pcie_ports_native)
4030 ++ return 0;
4031 ++
4032 + if (!dev->__aer_firmware_first_valid)
4033 + aer_set_firmware_first(dev);
4034 + return dev->__aer_firmware_first;
4035 +@@ -323,6 +326,9 @@ bool aer_acpi_firmware_first(void)
4036 + .firmware_first = 0,
4037 + };
4038 +
4039 ++ if (pcie_ports_native)
4040 ++ return false;
4041 ++
4042 + if (!parsed) {
4043 + apei_hest_parse(aer_hest_parse, &info);
4044 + aer_firmware_first = info.firmware_first;
4045 +diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7622.c b/drivers/pinctrl/mediatek/pinctrl-mt7622.c
4046 +index 4c4740ffeb9c..3ea685634b6c 100644
4047 +--- a/drivers/pinctrl/mediatek/pinctrl-mt7622.c
4048 ++++ b/drivers/pinctrl/mediatek/pinctrl-mt7622.c
4049 +@@ -1537,7 +1537,7 @@ static int mtk_build_groups(struct mtk_pinctrl *hw)
4050 + err = pinctrl_generic_add_group(hw->pctrl, group->name,
4051 + group->pins, group->num_pins,
4052 + group->data);
4053 +- if (err) {
4054 ++ if (err < 0) {
4055 + dev_err(hw->dev, "Failed to register group %s\n",
4056 + group->name);
4057 + return err;
4058 +@@ -1558,7 +1558,7 @@ static int mtk_build_functions(struct mtk_pinctrl *hw)
4059 + func->group_names,
4060 + func->num_group_names,
4061 + func->data);
4062 +- if (err) {
4063 ++ if (err < 0) {
4064 + dev_err(hw->dev, "Failed to register function %s\n",
4065 + func->name);
4066 + return err;
4067 +diff --git a/drivers/pinctrl/pinctrl-rza1.c b/drivers/pinctrl/pinctrl-rza1.c
4068 +index 717c0f4449a0..f76edf664539 100644
4069 +--- a/drivers/pinctrl/pinctrl-rza1.c
4070 ++++ b/drivers/pinctrl/pinctrl-rza1.c
4071 +@@ -1006,6 +1006,7 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
4072 + const char *grpname;
4073 + const char **fngrps;
4074 + int ret, npins;
4075 ++ int gsel, fsel;
4076 +
4077 + npins = rza1_dt_node_pin_count(np);
4078 + if (npins < 0) {
4079 +@@ -1055,18 +1056,19 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
4080 + fngrps[0] = grpname;
4081 +
4082 + mutex_lock(&rza1_pctl->mutex);
4083 +- ret = pinctrl_generic_add_group(pctldev, grpname, grpins, npins,
4084 +- NULL);
4085 +- if (ret) {
4086 ++ gsel = pinctrl_generic_add_group(pctldev, grpname, grpins, npins,
4087 ++ NULL);
4088 ++ if (gsel < 0) {
4089 + mutex_unlock(&rza1_pctl->mutex);
4090 +- return ret;
4091 ++ return gsel;
4092 + }
4093 +
4094 +- ret = pinmux_generic_add_function(pctldev, grpname, fngrps, 1,
4095 +- mux_confs);
4096 +- if (ret)
4097 ++ fsel = pinmux_generic_add_function(pctldev, grpname, fngrps, 1,
4098 ++ mux_confs);
4099 ++ if (fsel < 0) {
4100 ++ ret = fsel;
4101 + goto remove_group;
4102 +- mutex_unlock(&rza1_pctl->mutex);
4103 ++ }
4104 +
4105 + dev_info(rza1_pctl->dev, "Parsed function and group %s with %d pins\n",
4106 + grpname, npins);
4107 +@@ -1083,15 +1085,15 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,
4108 + (*map)->data.mux.group = np->name;
4109 + (*map)->data.mux.function = np->name;
4110 + *num_maps = 1;
4111 ++ mutex_unlock(&rza1_pctl->mutex);
4112 +
4113 + return 0;
4114 +
4115 + remove_function:
4116 +- mutex_lock(&rza1_pctl->mutex);
4117 +- pinmux_generic_remove_last_function(pctldev);
4118 ++ pinmux_generic_remove_function(pctldev, fsel);
4119 +
4120 + remove_group:
4121 +- pinctrl_generic_remove_last_group(pctldev);
4122 ++ pinctrl_generic_remove_group(pctldev, gsel);
4123 + mutex_unlock(&rza1_pctl->mutex);
4124 +
4125 + dev_info(rza1_pctl->dev, "Unable to parse function and group %s\n",
4126 +diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
4127 +index 0e22f52b2a19..2155a30c282b 100644
4128 +--- a/drivers/pinctrl/qcom/pinctrl-msm.c
4129 ++++ b/drivers/pinctrl/qcom/pinctrl-msm.c
4130 +@@ -250,22 +250,30 @@ static int msm_config_group_get(struct pinctrl_dev *pctldev,
4131 + /* Convert register value to pinconf value */
4132 + switch (param) {
4133 + case PIN_CONFIG_BIAS_DISABLE:
4134 +- arg = arg == MSM_NO_PULL;
4135 ++ if (arg != MSM_NO_PULL)
4136 ++ return -EINVAL;
4137 ++ arg = 1;
4138 + break;
4139 + case PIN_CONFIG_BIAS_PULL_DOWN:
4140 +- arg = arg == MSM_PULL_DOWN;
4141 ++ if (arg != MSM_PULL_DOWN)
4142 ++ return -EINVAL;
4143 ++ arg = 1;
4144 + break;
4145 + case PIN_CONFIG_BIAS_BUS_HOLD:
4146 + if (pctrl->soc->pull_no_keeper)
4147 + return -ENOTSUPP;
4148 +
4149 +- arg = arg == MSM_KEEPER;
4150 ++ if (arg != MSM_KEEPER)
4151 ++ return -EINVAL;
4152 ++ arg = 1;
4153 + break;
4154 + case PIN_CONFIG_BIAS_PULL_UP:
4155 + if (pctrl->soc->pull_no_keeper)
4156 + arg = arg == MSM_PULL_UP_NO_KEEPER;
4157 + else
4158 + arg = arg == MSM_PULL_UP;
4159 ++ if (!arg)
4160 ++ return -EINVAL;
4161 + break;
4162 + case PIN_CONFIG_DRIVE_STRENGTH:
4163 + arg = msm_regval_to_drive(arg);
4164 +diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
4165 +index 3e66e0d10010..cf82db78e69e 100644
4166 +--- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
4167 ++++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
4168 +@@ -390,31 +390,47 @@ static int pmic_gpio_config_get(struct pinctrl_dev *pctldev,
4169 +
4170 + switch (param) {
4171 + case PIN_CONFIG_DRIVE_PUSH_PULL:
4172 +- arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_CMOS;
4173 ++ if (pad->buffer_type != PMIC_GPIO_OUT_BUF_CMOS)
4174 ++ return -EINVAL;
4175 ++ arg = 1;
4176 + break;
4177 + case PIN_CONFIG_DRIVE_OPEN_DRAIN:
4178 +- arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS;
4179 ++ if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS)
4180 ++ return -EINVAL;
4181 ++ arg = 1;
4182 + break;
4183 + case PIN_CONFIG_DRIVE_OPEN_SOURCE:
4184 +- arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS;
4185 ++ if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS)
4186 ++ return -EINVAL;
4187 ++ arg = 1;
4188 + break;
4189 + case PIN_CONFIG_BIAS_PULL_DOWN:
4190 +- arg = pad->pullup == PMIC_GPIO_PULL_DOWN;
4191 ++ if (pad->pullup != PMIC_GPIO_PULL_DOWN)
4192 ++ return -EINVAL;
4193 ++ arg = 1;
4194 + break;
4195 + case PIN_CONFIG_BIAS_DISABLE:
4196 +- arg = pad->pullup = PMIC_GPIO_PULL_DISABLE;
4197 ++ if (pad->pullup != PMIC_GPIO_PULL_DISABLE)
4198 ++ return -EINVAL;
4199 ++ arg = 1;
4200 + break;
4201 + case PIN_CONFIG_BIAS_PULL_UP:
4202 +- arg = pad->pullup == PMIC_GPIO_PULL_UP_30;
4203 ++ if (pad->pullup != PMIC_GPIO_PULL_UP_30)
4204 ++ return -EINVAL;
4205 ++ arg = 1;
4206 + break;
4207 + case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
4208 +- arg = !pad->is_enabled;
4209 ++ if (pad->is_enabled)
4210 ++ return -EINVAL;
4211 ++ arg = 1;
4212 + break;
4213 + case PIN_CONFIG_POWER_SOURCE:
4214 + arg = pad->power_source;
4215 + break;
4216 + case PIN_CONFIG_INPUT_ENABLE:
4217 +- arg = pad->input_enabled;
4218 ++ if (!pad->input_enabled)
4219 ++ return -EINVAL;
4220 ++ arg = 1;
4221 + break;
4222 + case PIN_CONFIG_OUTPUT:
4223 + arg = pad->out_value;
4224 +diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
4225 +index eef76bfa5d73..e50941c3ba54 100644
4226 +--- a/drivers/platform/x86/toshiba_acpi.c
4227 ++++ b/drivers/platform/x86/toshiba_acpi.c
4228 +@@ -34,6 +34,7 @@
4229 + #define TOSHIBA_ACPI_VERSION "0.24"
4230 + #define PROC_INTERFACE_VERSION 1
4231 +
4232 ++#include <linux/compiler.h>
4233 + #include <linux/kernel.h>
4234 + #include <linux/module.h>
4235 + #include <linux/moduleparam.h>
4236 +@@ -1682,7 +1683,7 @@ static const struct file_operations keys_proc_fops = {
4237 + .write = keys_proc_write,
4238 + };
4239 +
4240 +-static int version_proc_show(struct seq_file *m, void *v)
4241 ++static int __maybe_unused version_proc_show(struct seq_file *m, void *v)
4242 + {
4243 + seq_printf(m, "driver: %s\n", TOSHIBA_ACPI_VERSION);
4244 + seq_printf(m, "proc_interface: %d\n", PROC_INTERFACE_VERSION);
4245 +diff --git a/drivers/regulator/qcom_spmi-regulator.c b/drivers/regulator/qcom_spmi-regulator.c
4246 +index 9817f1a75342..ba3d5e63ada6 100644
4247 +--- a/drivers/regulator/qcom_spmi-regulator.c
4248 ++++ b/drivers/regulator/qcom_spmi-regulator.c
4249 +@@ -1752,7 +1752,8 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
4250 + const char *name;
4251 + struct device *dev = &pdev->dev;
4252 + struct device_node *node = pdev->dev.of_node;
4253 +- struct device_node *syscon;
4254 ++ struct device_node *syscon, *reg_node;
4255 ++ struct property *reg_prop;
4256 + int ret, lenp;
4257 + struct list_head *vreg_list;
4258 +
4259 +@@ -1774,16 +1775,19 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
4260 + syscon = of_parse_phandle(node, "qcom,saw-reg", 0);
4261 + saw_regmap = syscon_node_to_regmap(syscon);
4262 + of_node_put(syscon);
4263 +- if (IS_ERR(regmap))
4264 ++ if (IS_ERR(saw_regmap))
4265 + dev_err(dev, "ERROR reading SAW regmap\n");
4266 + }
4267 +
4268 + for (reg = match->data; reg->name; reg++) {
4269 +
4270 +- if (saw_regmap && \
4271 +- of_find_property(of_find_node_by_name(node, reg->name), \
4272 +- "qcom,saw-slave", &lenp)) {
4273 +- continue;
4274 ++ if (saw_regmap) {
4275 ++ reg_node = of_get_child_by_name(node, reg->name);
4276 ++ reg_prop = of_find_property(reg_node, "qcom,saw-slave",
4277 ++ &lenp);
4278 ++ of_node_put(reg_node);
4279 ++ if (reg_prop)
4280 ++ continue;
4281 + }
4282 +
4283 + vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
4284 +@@ -1816,13 +1820,17 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
4285 + if (ret)
4286 + continue;
4287 +
4288 +- if (saw_regmap && \
4289 +- of_find_property(of_find_node_by_name(node, reg->name), \
4290 +- "qcom,saw-leader", &lenp)) {
4291 +- spmi_saw_ops = *(vreg->desc.ops);
4292 +- spmi_saw_ops.set_voltage_sel = \
4293 +- spmi_regulator_saw_set_voltage;
4294 +- vreg->desc.ops = &spmi_saw_ops;
4295 ++ if (saw_regmap) {
4296 ++ reg_node = of_get_child_by_name(node, reg->name);
4297 ++ reg_prop = of_find_property(reg_node, "qcom,saw-leader",
4298 ++ &lenp);
4299 ++ of_node_put(reg_node);
4300 ++ if (reg_prop) {
4301 ++ spmi_saw_ops = *(vreg->desc.ops);
4302 ++ spmi_saw_ops.set_voltage_sel =
4303 ++ spmi_regulator_saw_set_voltage;
4304 ++ vreg->desc.ops = &spmi_saw_ops;
4305 ++ }
4306 + }
4307 +
4308 + config.dev = dev;
4309 +diff --git a/drivers/remoteproc/qcom_q6v5_pil.c b/drivers/remoteproc/qcom_q6v5_pil.c
4310 +index 2bf8e7c49f2a..e5ec59102b01 100644
4311 +--- a/drivers/remoteproc/qcom_q6v5_pil.c
4312 ++++ b/drivers/remoteproc/qcom_q6v5_pil.c
4313 +@@ -1370,7 +1370,6 @@ static const struct rproc_hexagon_res sdm845_mss = {
4314 + .hexagon_mba_image = "mba.mbn",
4315 + .proxy_clk_names = (char*[]){
4316 + "xo",
4317 +- "axis2",
4318 + "prng",
4319 + NULL
4320 + },
4321 +diff --git a/drivers/reset/reset-imx7.c b/drivers/reset/reset-imx7.c
4322 +index 4db177bc89bc..fdeac1946429 100644
4323 +--- a/drivers/reset/reset-imx7.c
4324 ++++ b/drivers/reset/reset-imx7.c
4325 +@@ -80,7 +80,7 @@ static int imx7_reset_set(struct reset_controller_dev *rcdev,
4326 + {
4327 + struct imx7_src *imx7src = to_imx7_src(rcdev);
4328 + const struct imx7_src_signal *signal = &imx7_src_signals[id];
4329 +- unsigned int value = 0;
4330 ++ unsigned int value = assert ? signal->bit : 0;
4331 +
4332 + switch (id) {
4333 + case IMX7_RESET_PCIEPHY:
4334 +diff --git a/drivers/rtc/rtc-bq4802.c b/drivers/rtc/rtc-bq4802.c
4335 +index d768f6747961..113493b52149 100644
4336 +--- a/drivers/rtc/rtc-bq4802.c
4337 ++++ b/drivers/rtc/rtc-bq4802.c
4338 +@@ -162,6 +162,10 @@ static int bq4802_probe(struct platform_device *pdev)
4339 + } else if (p->r->flags & IORESOURCE_MEM) {
4340 + p->regs = devm_ioremap(&pdev->dev, p->r->start,
4341 + resource_size(p->r));
4342 ++ if (!p->regs){
4343 ++ err = -ENOMEM;
4344 ++ goto out;
4345 ++ }
4346 + p->read = bq4802_read_mem;
4347 + p->write = bq4802_write_mem;
4348 + } else {
4349 +diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
4350 +index d01ac29fd986..ffdb78421a25 100644
4351 +--- a/drivers/s390/net/qeth_core_main.c
4352 ++++ b/drivers/s390/net/qeth_core_main.c
4353 +@@ -3530,13 +3530,14 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
4354 + qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
4355 + if (atomic_read(&queue->set_pci_flags_count))
4356 + qdio_flags |= QDIO_FLAG_PCI_OUT;
4357 ++ atomic_add(count, &queue->used_buffers);
4358 ++
4359 + rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
4360 + queue->queue_no, index, count);
4361 + if (queue->card->options.performance_stats)
4362 + queue->card->perf_stats.outbound_do_qdio_time +=
4363 + qeth_get_micros() -
4364 + queue->card->perf_stats.outbound_do_qdio_start_time;
4365 +- atomic_add(count, &queue->used_buffers);
4366 + if (rc) {
4367 + queue->card->stats.tx_errors += count;
4368 + /* ignore temporary SIGA errors without busy condition */
4369 +diff --git a/drivers/s390/net/qeth_core_sys.c b/drivers/s390/net/qeth_core_sys.c
4370 +index c3f18afb368b..cfb659747693 100644
4371 +--- a/drivers/s390/net/qeth_core_sys.c
4372 ++++ b/drivers/s390/net/qeth_core_sys.c
4373 +@@ -426,6 +426,7 @@ static ssize_t qeth_dev_layer2_store(struct device *dev,
4374 + if (card->discipline) {
4375 + card->discipline->remove(card->gdev);
4376 + qeth_core_free_discipline(card);
4377 ++ card->options.layer2 = -1;
4378 + }
4379 +
4380 + rc = qeth_core_load_discipline(card, newdis);
4381 +diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c
4382 +index 3f3569ec5ce3..ddc7921ae5da 100644
4383 +--- a/drivers/scsi/libfc/fc_disc.c
4384 ++++ b/drivers/scsi/libfc/fc_disc.c
4385 +@@ -294,9 +294,11 @@ static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
4386 + * discovery, reverify or log them in. Otherwise, log them out.
4387 + * Skip ports which were never discovered. These are the dNS port
4388 + * and ports which were created by PLOGI.
4389 ++ *
4390 ++ * We don't need to use the _rcu variant here as the rport list
4391 ++ * is protected by the disc mutex which is already held on entry.
4392 + */
4393 +- rcu_read_lock();
4394 +- list_for_each_entry_rcu(rdata, &disc->rports, peers) {
4395 ++ list_for_each_entry(rdata, &disc->rports, peers) {
4396 + if (!kref_get_unless_zero(&rdata->kref))
4397 + continue;
4398 + if (rdata->disc_id) {
4399 +@@ -307,7 +309,6 @@ static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
4400 + }
4401 + kref_put(&rdata->kref, fc_rport_destroy);
4402 + }
4403 +- rcu_read_unlock();
4404 + mutex_unlock(&disc->disc_mutex);
4405 + disc->disc_callback(lport, event);
4406 + mutex_lock(&disc->disc_mutex);
4407 +diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
4408 +index d723fd1d7b26..cab1fb087e6a 100644
4409 +--- a/drivers/scsi/lpfc/lpfc_nvme.c
4410 ++++ b/drivers/scsi/lpfc/lpfc_nvme.c
4411 +@@ -2976,7 +2976,7 @@ lpfc_nvme_wait_for_io_drain(struct lpfc_hba *phba)
4412 + struct lpfc_sli_ring *pring;
4413 + u32 i, wait_cnt = 0;
4414 +
4415 +- if (phba->sli_rev < LPFC_SLI_REV4)
4416 ++ if (phba->sli_rev < LPFC_SLI_REV4 || !phba->sli4_hba.nvme_wq)
4417 + return;
4418 +
4419 + /* Cycle through all NVME rings and make sure all outstanding
4420 +@@ -2985,6 +2985,9 @@ lpfc_nvme_wait_for_io_drain(struct lpfc_hba *phba)
4421 + for (i = 0; i < phba->cfg_nvme_io_channel; i++) {
4422 + pring = phba->sli4_hba.nvme_wq[i]->pring;
4423 +
4424 ++ if (!pring)
4425 ++ continue;
4426 ++
4427 + /* Retrieve everything on the txcmplq */
4428 + while (!list_empty(&pring->txcmplq)) {
4429 + msleep(LPFC_XRI_EXCH_BUSY_WAIT_T1);
4430 +diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
4431 +index 7271c9d885dd..5e5ec3363b44 100644
4432 +--- a/drivers/scsi/lpfc/lpfc_nvmet.c
4433 ++++ b/drivers/scsi/lpfc/lpfc_nvmet.c
4434 +@@ -402,6 +402,7 @@ lpfc_nvmet_ctxbuf_post(struct lpfc_hba *phba, struct lpfc_nvmet_ctxbuf *ctx_buf)
4435 +
4436 + /* Process FCP command */
4437 + if (rc == 0) {
4438 ++ ctxp->rqb_buffer = NULL;
4439 + atomic_inc(&tgtp->rcv_fcp_cmd_out);
4440 + nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
4441 + return;
4442 +@@ -1116,8 +1117,17 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
4443 + lpfc_nvmeio_data(phba, "NVMET DEFERRCV: xri x%x sz %d CPU %02x\n",
4444 + ctxp->oxid, ctxp->size, smp_processor_id());
4445 +
4446 ++ if (!nvmebuf) {
4447 ++ lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
4448 ++ "6425 Defer rcv: no buffer xri x%x: "
4449 ++ "flg %x ste %x\n",
4450 ++ ctxp->oxid, ctxp->flag, ctxp->state);
4451 ++ return;
4452 ++ }
4453 ++
4454 + tgtp = phba->targetport->private;
4455 +- atomic_inc(&tgtp->rcv_fcp_cmd_defer);
4456 ++ if (tgtp)
4457 ++ atomic_inc(&tgtp->rcv_fcp_cmd_defer);
4458 +
4459 + /* Free the nvmebuf since a new buffer already replaced it */
4460 + nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
4461 +diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c
4462 +index 70b2ee80d6bd..bf4bd71ab53f 100644
4463 +--- a/drivers/soc/qcom/smem.c
4464 ++++ b/drivers/soc/qcom/smem.c
4465 +@@ -364,11 +364,6 @@ static int qcom_smem_alloc_private(struct qcom_smem *smem,
4466 + end = phdr_to_last_uncached_entry(phdr);
4467 + cached = phdr_to_last_cached_entry(phdr);
4468 +
4469 +- if (smem->global_partition) {
4470 +- dev_err(smem->dev, "Already found the global partition\n");
4471 +- return -EINVAL;
4472 +- }
4473 +-
4474 + while (hdr < end) {
4475 + if (hdr->canary != SMEM_PRIVATE_CANARY)
4476 + goto bad_canary;
4477 +@@ -736,6 +731,11 @@ static int qcom_smem_set_global_partition(struct qcom_smem *smem)
4478 + bool found = false;
4479 + int i;
4480 +
4481 ++ if (smem->global_partition) {
4482 ++ dev_err(smem->dev, "Already found the global partition\n");
4483 ++ return -EINVAL;
4484 ++ }
4485 ++
4486 + ptable = qcom_smem_get_ptable(smem);
4487 + if (IS_ERR(ptable))
4488 + return PTR_ERR(ptable);
4489 +diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
4490 +index f693bfe95ab9..a087464efdd7 100644
4491 +--- a/drivers/spi/spi-dw.c
4492 ++++ b/drivers/spi/spi-dw.c
4493 +@@ -485,6 +485,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
4494 + dws->dma_inited = 0;
4495 + dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR);
4496 +
4497 ++ spi_controller_set_devdata(master, dws);
4498 ++
4499 + ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dev_name(dev),
4500 + master);
4501 + if (ret < 0) {
4502 +@@ -518,7 +520,6 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
4503 + }
4504 + }
4505 +
4506 +- spi_controller_set_devdata(master, dws);
4507 + ret = devm_spi_register_controller(dev, master);
4508 + if (ret) {
4509 + dev_err(&master->dev, "problem registering spi master\n");
4510 +diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4511 +index 396371728aa1..537d5bb5e294 100644
4512 +--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4513 ++++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
4514 +@@ -767,7 +767,7 @@ static void free_bufs(struct dpaa2_eth_priv *priv, u64 *buf_array, int count)
4515 + for (i = 0; i < count; i++) {
4516 + vaddr = dpaa2_iova_to_virt(priv->iommu_domain, buf_array[i]);
4517 + dma_unmap_single(dev, buf_array[i], DPAA2_ETH_RX_BUF_SIZE,
4518 +- DMA_BIDIRECTIONAL);
4519 ++ DMA_FROM_DEVICE);
4520 + skb_free_frag(vaddr);
4521 + }
4522 + }
4523 +diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
4524 +index f0cefa1b7b0f..b20d34449ed4 100644
4525 +--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
4526 ++++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
4527 +@@ -439,16 +439,16 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
4528 + my_workqueue_init(alsa_stream);
4529 +
4530 + ret = bcm2835_audio_open_connection(alsa_stream);
4531 +- if (ret) {
4532 +- ret = -1;
4533 +- goto exit;
4534 +- }
4535 ++ if (ret)
4536 ++ goto free_wq;
4537 ++
4538 + instance = alsa_stream->instance;
4539 + LOG_DBG(" instance (%p)\n", instance);
4540 +
4541 + if (mutex_lock_interruptible(&instance->vchi_mutex)) {
4542 + LOG_DBG("Interrupted whilst waiting for lock on (%d)\n", instance->num_connections);
4543 +- return -EINTR;
4544 ++ ret = -EINTR;
4545 ++ goto free_wq;
4546 + }
4547 + vchi_service_use(instance->vchi_handle[0]);
4548 +
4549 +@@ -471,7 +471,11 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
4550 + unlock:
4551 + vchi_service_release(instance->vchi_handle[0]);
4552 + mutex_unlock(&instance->vchi_mutex);
4553 +-exit:
4554 ++
4555 ++free_wq:
4556 ++ if (ret)
4557 ++ destroy_workqueue(alsa_stream->my_wq);
4558 ++
4559 + return ret;
4560 + }
4561 +
4562 +diff --git a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
4563 +index ce26741ae9d9..3f61d04c47ab 100644
4564 +--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
4565 ++++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
4566 +@@ -580,6 +580,7 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
4567 + static void stop_streaming(struct vb2_queue *vq)
4568 + {
4569 + int ret;
4570 ++ unsigned long timeout;
4571 + struct bm2835_mmal_dev *dev = vb2_get_drv_priv(vq);
4572 +
4573 + v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, "%s: dev:%p\n",
4574 +@@ -605,10 +606,10 @@ static void stop_streaming(struct vb2_queue *vq)
4575 + sizeof(dev->capture.frame_count));
4576 +
4577 + /* wait for last frame to complete */
4578 +- ret = wait_for_completion_timeout(&dev->capture.frame_cmplt, HZ);
4579 +- if (ret <= 0)
4580 ++ timeout = wait_for_completion_timeout(&dev->capture.frame_cmplt, HZ);
4581 ++ if (timeout == 0)
4582 + v4l2_err(&dev->v4l2_dev,
4583 +- "error %d waiting for frame completion\n", ret);
4584 ++ "timed out waiting for frame completion\n");
4585 +
4586 + v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
4587 + "disabling connection\n");
4588 +diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
4589 +index f5b5ead6347c..51e5b04ff0f5 100644
4590 +--- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
4591 ++++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
4592 +@@ -630,6 +630,7 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
4593 + {
4594 + struct mmal_msg_context *msg_context;
4595 + int ret;
4596 ++ unsigned long timeout;
4597 +
4598 + /* payload size must not cause message to exceed max size */
4599 + if (payload_len >
4600 +@@ -668,11 +669,11 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
4601 + return ret;
4602 + }
4603 +
4604 +- ret = wait_for_completion_timeout(&msg_context->u.sync.cmplt, 3 * HZ);
4605 +- if (ret <= 0) {
4606 +- pr_err("error %d waiting for sync completion\n", ret);
4607 +- if (ret == 0)
4608 +- ret = -ETIME;
4609 ++ timeout = wait_for_completion_timeout(&msg_context->u.sync.cmplt,
4610 ++ 3 * HZ);
4611 ++ if (timeout == 0) {
4612 ++ pr_err("timed out waiting for sync completion\n");
4613 ++ ret = -ETIME;
4614 + /* todo: what happens if the message arrives after aborting */
4615 + release_msg_context(msg_context);
4616 + return ret;
4617 +diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
4618 +index bfb37f0be22f..863e86b9a424 100644
4619 +--- a/drivers/tty/serial/8250/8250_of.c
4620 ++++ b/drivers/tty/serial/8250/8250_of.c
4621 +@@ -124,7 +124,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
4622 + dev_warn(&ofdev->dev, "unsupported reg-io-width (%d)\n",
4623 + prop);
4624 + ret = -EINVAL;
4625 +- goto err_dispose;
4626 ++ goto err_unprepare;
4627 + }
4628 + }
4629 + port->flags |= UPF_IOREMAP;
4630 +diff --git a/drivers/tty/tty_baudrate.c b/drivers/tty/tty_baudrate.c
4631 +index 6ff8cdfc9d2a..3e827a3d48d5 100644
4632 +--- a/drivers/tty/tty_baudrate.c
4633 ++++ b/drivers/tty/tty_baudrate.c
4634 +@@ -157,18 +157,25 @@ void tty_termios_encode_baud_rate(struct ktermios *termios,
4635 + termios->c_ospeed = obaud;
4636 +
4637 + #ifdef BOTHER
4638 ++ if ((termios->c_cflag >> IBSHIFT) & CBAUD)
4639 ++ ibinput = 1; /* An input speed was specified */
4640 ++
4641 + /* If the user asked for a precise weird speed give a precise weird
4642 + answer. If they asked for a Bfoo speed they may have problems
4643 + digesting non-exact replies so fuzz a bit */
4644 +
4645 +- if ((termios->c_cflag & CBAUD) == BOTHER)
4646 ++ if ((termios->c_cflag & CBAUD) == BOTHER) {
4647 + oclose = 0;
4648 ++ if (!ibinput)
4649 ++ iclose = 0;
4650 ++ }
4651 + if (((termios->c_cflag >> IBSHIFT) & CBAUD) == BOTHER)
4652 + iclose = 0;
4653 +- if ((termios->c_cflag >> IBSHIFT) & CBAUD)
4654 +- ibinput = 1; /* An input speed was specified */
4655 + #endif
4656 + termios->c_cflag &= ~CBAUD;
4657 ++#ifdef IBSHIFT
4658 ++ termios->c_cflag &= ~(CBAUD << IBSHIFT);
4659 ++#endif
4660 +
4661 + /*
4662 + * Our goal is to find a close match to the standard baud rate
4663 +diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
4664 +index 75c4623ad779..f8ee32d9843a 100644
4665 +--- a/drivers/usb/class/cdc-acm.c
4666 ++++ b/drivers/usb/class/cdc-acm.c
4667 +@@ -779,20 +779,9 @@ static int acm_tty_write(struct tty_struct *tty,
4668 + }
4669 +
4670 + if (acm->susp_count) {
4671 +- if (acm->putbuffer) {
4672 +- /* now to preserve order */
4673 +- usb_anchor_urb(acm->putbuffer->urb, &acm->delayed);
4674 +- acm->putbuffer = NULL;
4675 +- }
4676 + usb_anchor_urb(wb->urb, &acm->delayed);
4677 + spin_unlock_irqrestore(&acm->write_lock, flags);
4678 + return count;
4679 +- } else {
4680 +- if (acm->putbuffer) {
4681 +- /* at this point there is no good way to handle errors */
4682 +- acm_start_wb(acm, acm->putbuffer);
4683 +- acm->putbuffer = NULL;
4684 +- }
4685 + }
4686 +
4687 + stat = acm_start_wb(acm, wb);
4688 +@@ -803,66 +792,6 @@ static int acm_tty_write(struct tty_struct *tty,
4689 + return count;
4690 + }
4691 +
4692 +-static void acm_tty_flush_chars(struct tty_struct *tty)
4693 +-{
4694 +- struct acm *acm = tty->driver_data;
4695 +- struct acm_wb *cur;
4696 +- int err;
4697 +- unsigned long flags;
4698 +-
4699 +- spin_lock_irqsave(&acm->write_lock, flags);
4700 +-
4701 +- cur = acm->putbuffer;
4702 +- if (!cur) /* nothing to do */
4703 +- goto out;
4704 +-
4705 +- acm->putbuffer = NULL;
4706 +- err = usb_autopm_get_interface_async(acm->control);
4707 +- if (err < 0) {
4708 +- cur->use = 0;
4709 +- acm->putbuffer = cur;
4710 +- goto out;
4711 +- }
4712 +-
4713 +- if (acm->susp_count)
4714 +- usb_anchor_urb(cur->urb, &acm->delayed);
4715 +- else
4716 +- acm_start_wb(acm, cur);
4717 +-out:
4718 +- spin_unlock_irqrestore(&acm->write_lock, flags);
4719 +- return;
4720 +-}
4721 +-
4722 +-static int acm_tty_put_char(struct tty_struct *tty, unsigned char ch)
4723 +-{
4724 +- struct acm *acm = tty->driver_data;
4725 +- struct acm_wb *cur;
4726 +- int wbn;
4727 +- unsigned long flags;
4728 +-
4729 +-overflow:
4730 +- cur = acm->putbuffer;
4731 +- if (!cur) {
4732 +- spin_lock_irqsave(&acm->write_lock, flags);
4733 +- wbn = acm_wb_alloc(acm);
4734 +- if (wbn >= 0) {
4735 +- cur = &acm->wb[wbn];
4736 +- acm->putbuffer = cur;
4737 +- }
4738 +- spin_unlock_irqrestore(&acm->write_lock, flags);
4739 +- if (!cur)
4740 +- return 0;
4741 +- }
4742 +-
4743 +- if (cur->len == acm->writesize) {
4744 +- acm_tty_flush_chars(tty);
4745 +- goto overflow;
4746 +- }
4747 +-
4748 +- cur->buf[cur->len++] = ch;
4749 +- return 1;
4750 +-}
4751 +-
4752 + static int acm_tty_write_room(struct tty_struct *tty)
4753 + {
4754 + struct acm *acm = tty->driver_data;
4755 +@@ -1987,8 +1916,6 @@ static const struct tty_operations acm_ops = {
4756 + .cleanup = acm_tty_cleanup,
4757 + .hangup = acm_tty_hangup,
4758 + .write = acm_tty_write,
4759 +- .put_char = acm_tty_put_char,
4760 +- .flush_chars = acm_tty_flush_chars,
4761 + .write_room = acm_tty_write_room,
4762 + .ioctl = acm_tty_ioctl,
4763 + .throttle = acm_tty_throttle,
4764 +diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
4765 +index eacc116e83da..ca06b20d7af9 100644
4766 +--- a/drivers/usb/class/cdc-acm.h
4767 ++++ b/drivers/usb/class/cdc-acm.h
4768 +@@ -96,7 +96,6 @@ struct acm {
4769 + unsigned long read_urbs_free;
4770 + struct urb *read_urbs[ACM_NR];
4771 + struct acm_rb read_buffers[ACM_NR];
4772 +- struct acm_wb *putbuffer; /* for acm_tty_put_char() */
4773 + int rx_buflimit;
4774 + spinlock_t read_lock;
4775 + u8 *notification_buffer; /* to reassemble fragmented notifications */
4776 +diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
4777 +index a0d284ef3f40..632a2bfabc08 100644
4778 +--- a/drivers/usb/class/cdc-wdm.c
4779 ++++ b/drivers/usb/class/cdc-wdm.c
4780 +@@ -458,7 +458,7 @@ static int service_outstanding_interrupt(struct wdm_device *desc)
4781 +
4782 + set_bit(WDM_RESPONDING, &desc->flags);
4783 + spin_unlock_irq(&desc->iuspin);
4784 +- rv = usb_submit_urb(desc->response, GFP_KERNEL);
4785 ++ rv = usb_submit_urb(desc->response, GFP_ATOMIC);
4786 + spin_lock_irq(&desc->iuspin);
4787 + if (rv) {
4788 + dev_err(&desc->intf->dev,
4789 +diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
4790 +index 66fe1b78d952..03432467b05f 100644
4791 +--- a/drivers/usb/core/hcd-pci.c
4792 ++++ b/drivers/usb/core/hcd-pci.c
4793 +@@ -515,8 +515,6 @@ static int resume_common(struct device *dev, int event)
4794 + event == PM_EVENT_RESTORE);
4795 + if (retval) {
4796 + dev_err(dev, "PCI post-resume error %d!\n", retval);
4797 +- if (hcd->shared_hcd)
4798 +- usb_hc_died(hcd->shared_hcd);
4799 + usb_hc_died(hcd);
4800 + }
4801 + }
4802 +diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
4803 +index 1a15392326fc..525ebd03cfe5 100644
4804 +--- a/drivers/usb/core/message.c
4805 ++++ b/drivers/usb/core/message.c
4806 +@@ -1340,6 +1340,11 @@ void usb_enable_interface(struct usb_device *dev,
4807 + * is submitted that needs that bandwidth. Some other operating systems
4808 + * allocate bandwidth early, when a configuration is chosen.
4809 + *
4810 ++ * xHCI reserves bandwidth and configures the alternate setting in
4811 ++ * usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting
4812 ++ * may be disabled. Drivers cannot rely on any particular alternate
4813 ++ * setting being in effect after a failure.
4814 ++ *
4815 + * This call is synchronous, and may not be used in an interrupt context.
4816 + * Also, drivers must not change altsettings while urbs are scheduled for
4817 + * endpoints in that interface; all such urbs must first be completed
4818 +@@ -1375,6 +1380,12 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
4819 + alternate);
4820 + return -EINVAL;
4821 + }
4822 ++ /*
4823 ++ * usb3 hosts configure the interface in usb_hcd_alloc_bandwidth,
4824 ++ * including freeing dropped endpoint ring buffers.
4825 ++ * Make sure the interface endpoints are flushed before that
4826 ++ */
4827 ++ usb_disable_interface(dev, iface, false);
4828 +
4829 + /* Make sure we have enough bandwidth for this alternate interface.
4830 + * Remove the current alt setting and add the new alt setting.
4831 +diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
4832 +index 097057d2eacf..e77dfe5ed5ec 100644
4833 +--- a/drivers/usb/core/quirks.c
4834 ++++ b/drivers/usb/core/quirks.c
4835 +@@ -178,6 +178,10 @@ static const struct usb_device_id usb_quirk_list[] = {
4836 + /* CBM - Flash disk */
4837 + { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
4838 +
4839 ++ /* WORLDE Controller KS49 or Prodipe MIDI 49C USB controller */
4840 ++ { USB_DEVICE(0x0218, 0x0201), .driver_info =
4841 ++ USB_QUIRK_CONFIG_INTF_STRINGS },
4842 ++
4843 + /* WORLDE easy key (easykey.25) MIDI controller */
4844 + { USB_DEVICE(0x0218, 0x0401), .driver_info =
4845 + USB_QUIRK_CONFIG_INTF_STRINGS },
4846 +@@ -406,6 +410,9 @@ static const struct usb_device_id usb_quirk_list[] = {
4847 + { USB_DEVICE(0x2040, 0x7200), .driver_info =
4848 + USB_QUIRK_CONFIG_INTF_STRINGS },
4849 +
4850 ++ /* DJI CineSSD */
4851 ++ { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
4852 ++
4853 + /* INTEL VALUE SSD */
4854 + { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
4855 +
4856 +diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
4857 +index db610c56f1d6..2aacd1afd9ff 100644
4858 +--- a/drivers/usb/dwc3/gadget.h
4859 ++++ b/drivers/usb/dwc3/gadget.h
4860 +@@ -25,7 +25,7 @@ struct dwc3;
4861 + #define DWC3_DEPCFG_XFER_IN_PROGRESS_EN BIT(9)
4862 + #define DWC3_DEPCFG_XFER_NOT_READY_EN BIT(10)
4863 + #define DWC3_DEPCFG_FIFO_ERROR_EN BIT(11)
4864 +-#define DWC3_DEPCFG_STREAM_EVENT_EN BIT(12)
4865 ++#define DWC3_DEPCFG_STREAM_EVENT_EN BIT(13)
4866 + #define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16)
4867 + #define DWC3_DEPCFG_STREAM_CAPABLE BIT(24)
4868 + #define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25)
4869 +diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
4870 +index 318246d8b2e2..b02ab2a8d927 100644
4871 +--- a/drivers/usb/gadget/udc/net2280.c
4872 ++++ b/drivers/usb/gadget/udc/net2280.c
4873 +@@ -1545,11 +1545,14 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
4874 + writel(tmp | BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
4875 + } else {
4876 + writel(tmp & ~BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
4877 +- stop_activity(dev, dev->driver);
4878 ++ stop_activity(dev, NULL);
4879 + }
4880 +
4881 + spin_unlock_irqrestore(&dev->lock, flags);
4882 +
4883 ++ if (!is_on && dev->driver)
4884 ++ dev->driver->disconnect(&dev->gadget);
4885 ++
4886 + return 0;
4887 + }
4888 +
4889 +@@ -2466,8 +2469,11 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
4890 + nuke(&dev->ep[i]);
4891 +
4892 + /* report disconnect; the driver is already quiesced */
4893 +- if (driver)
4894 ++ if (driver) {
4895 ++ spin_unlock(&dev->lock);
4896 + driver->disconnect(&dev->gadget);
4897 ++ spin_lock(&dev->lock);
4898 ++ }
4899 +
4900 + usb_reinit(dev);
4901 + }
4902 +@@ -3341,6 +3347,8 @@ next_endpoints:
4903 + BIT(PCI_RETRY_ABORT_INTERRUPT))
4904 +
4905 + static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
4906 ++__releases(dev->lock)
4907 ++__acquires(dev->lock)
4908 + {
4909 + struct net2280_ep *ep;
4910 + u32 tmp, num, mask, scratch;
4911 +@@ -3381,12 +3389,14 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
4912 + if (disconnect || reset) {
4913 + stop_activity(dev, dev->driver);
4914 + ep0_start(dev);
4915 ++ spin_unlock(&dev->lock);
4916 + if (reset)
4917 + usb_gadget_udc_reset
4918 + (&dev->gadget, dev->driver);
4919 + else
4920 + (dev->driver->disconnect)
4921 + (&dev->gadget);
4922 ++ spin_lock(&dev->lock);
4923 + return;
4924 + }
4925 + }
4926 +@@ -3405,6 +3415,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
4927 + tmp = BIT(SUSPEND_REQUEST_CHANGE_INTERRUPT);
4928 + if (stat & tmp) {
4929 + writel(tmp, &dev->regs->irqstat1);
4930 ++ spin_unlock(&dev->lock);
4931 + if (stat & BIT(SUSPEND_REQUEST_INTERRUPT)) {
4932 + if (dev->driver->suspend)
4933 + dev->driver->suspend(&dev->gadget);
4934 +@@ -3415,6 +3426,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
4935 + dev->driver->resume(&dev->gadget);
4936 + /* at high speed, note erratum 0133 */
4937 + }
4938 ++ spin_lock(&dev->lock);
4939 + stat &= ~tmp;
4940 + }
4941 +
4942 +diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
4943 +index 7cf98c793e04..5b5f1c8b47c9 100644
4944 +--- a/drivers/usb/gadget/udc/renesas_usb3.c
4945 ++++ b/drivers/usb/gadget/udc/renesas_usb3.c
4946 +@@ -787,12 +787,15 @@ static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
4947 + switch (speed) {
4948 + case USB_STA_SPEED_SS:
4949 + usb3->gadget.speed = USB_SPEED_SUPER;
4950 ++ usb3->gadget.ep0->maxpacket = USB3_EP0_SS_MAX_PACKET_SIZE;
4951 + break;
4952 + case USB_STA_SPEED_HS:
4953 + usb3->gadget.speed = USB_SPEED_HIGH;
4954 ++ usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
4955 + break;
4956 + case USB_STA_SPEED_FS:
4957 + usb3->gadget.speed = USB_SPEED_FULL;
4958 ++ usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
4959 + break;
4960 + default:
4961 + usb3->gadget.speed = USB_SPEED_UNKNOWN;
4962 +@@ -2451,7 +2454,7 @@ static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
4963 + /* for control pipe */
4964 + usb3->gadget.ep0 = &usb3_ep->ep;
4965 + usb_ep_set_maxpacket_limit(&usb3_ep->ep,
4966 +- USB3_EP0_HSFS_MAX_PACKET_SIZE);
4967 ++ USB3_EP0_SS_MAX_PACKET_SIZE);
4968 + usb3_ep->ep.caps.type_control = true;
4969 + usb3_ep->ep.caps.dir_in = true;
4970 + usb3_ep->ep.caps.dir_out = true;
4971 +diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
4972 +index 032b8652910a..02f8e08b3ee8 100644
4973 +--- a/drivers/usb/host/u132-hcd.c
4974 ++++ b/drivers/usb/host/u132-hcd.c
4975 +@@ -2555,7 +2555,7 @@ static int u132_get_frame(struct usb_hcd *hcd)
4976 + } else {
4977 + int frame = 0;
4978 + dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n");
4979 +- msleep(100);
4980 ++ mdelay(100);
4981 + return frame;
4982 + }
4983 + }
4984 +diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
4985 +index ef350c33dc4a..b1f27aa38b10 100644
4986 +--- a/drivers/usb/host/xhci-mem.c
4987 ++++ b/drivers/usb/host/xhci-mem.c
4988 +@@ -1613,6 +1613,10 @@ void xhci_endpoint_copy(struct xhci_hcd *xhci,
4989 + in_ep_ctx->ep_info2 = out_ep_ctx->ep_info2;
4990 + in_ep_ctx->deq = out_ep_ctx->deq;
4991 + in_ep_ctx->tx_info = out_ep_ctx->tx_info;
4992 ++ if (xhci->quirks & XHCI_MTK_HOST) {
4993 ++ in_ep_ctx->reserved[0] = out_ep_ctx->reserved[0];
4994 ++ in_ep_ctx->reserved[1] = out_ep_ctx->reserved[1];
4995 ++ }
4996 + }
4997 +
4998 + /* Copy output xhci_slot_ctx to the input xhci_slot_ctx.
4999 +diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
5000 +index 68e6132aa8b2..c2220a7fc758 100644
5001 +--- a/drivers/usb/host/xhci.c
5002 ++++ b/drivers/usb/host/xhci.c
5003 +@@ -37,6 +37,21 @@ static unsigned long long quirks;
5004 + module_param(quirks, ullong, S_IRUGO);
5005 + MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
5006 +
5007 ++static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
5008 ++{
5009 ++ struct xhci_segment *seg = ring->first_seg;
5010 ++
5011 ++ if (!td || !td->start_seg)
5012 ++ return false;
5013 ++ do {
5014 ++ if (seg == td->start_seg)
5015 ++ return true;
5016 ++ seg = seg->next;
5017 ++ } while (seg && seg != ring->first_seg);
5018 ++
5019 ++ return false;
5020 ++}
5021 ++
5022 + /* TODO: copied from ehci-hcd.c - can this be refactored? */
5023 + /*
5024 + * xhci_handshake - spin reading hc until handshake completes or fails
5025 +@@ -1571,6 +1586,21 @@ static int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
5026 + goto done;
5027 + }
5028 +
5029 ++ /*
5030 ++ * check ring is not re-allocated since URB was enqueued. If it is, then
5031 ++ * make sure none of the ring related pointers in this URB private data
5032 ++ * are touched, such as td_list, otherwise we overwrite freed data
5033 ++ */
5034 ++ if (!td_on_ring(&urb_priv->td[0], ep_ring)) {
5035 ++ xhci_err(xhci, "Canceled URB td not found on endpoint ring");
5036 ++ for (i = urb_priv->num_tds_done; i < urb_priv->num_tds; i++) {
5037 ++ td = &urb_priv->td[i];
5038 ++ if (!list_empty(&td->cancelled_td_list))
5039 ++ list_del_init(&td->cancelled_td_list);
5040 ++ }
5041 ++ goto err_giveback;
5042 ++ }
5043 ++
5044 + if (xhci->xhc_state & XHCI_STATE_HALTED) {
5045 + xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
5046 + "HC halted, freeing TD manually.");
5047 +diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
5048 +index de9a502491c2..69822852888a 100644
5049 +--- a/drivers/usb/misc/uss720.c
5050 ++++ b/drivers/usb/misc/uss720.c
5051 +@@ -369,7 +369,7 @@ static unsigned char parport_uss720_frob_control(struct parport *pp, unsigned ch
5052 + mask &= 0x0f;
5053 + val &= 0x0f;
5054 + d = (priv->reg[1] & (~mask)) ^ val;
5055 +- if (set_1284_register(pp, 2, d, GFP_KERNEL))
5056 ++ if (set_1284_register(pp, 2, d, GFP_ATOMIC))
5057 + return 0;
5058 + priv->reg[1] = d;
5059 + return d & 0xf;
5060 +@@ -379,7 +379,7 @@ static unsigned char parport_uss720_read_status(struct parport *pp)
5061 + {
5062 + unsigned char ret;
5063 +
5064 +- if (get_1284_register(pp, 1, &ret, GFP_KERNEL))
5065 ++ if (get_1284_register(pp, 1, &ret, GFP_ATOMIC))
5066 + return 0;
5067 + return ret & 0xf8;
5068 + }
5069 +diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
5070 +index 3be40eaa1ac9..1232dd49556d 100644
5071 +--- a/drivers/usb/misc/yurex.c
5072 ++++ b/drivers/usb/misc/yurex.c
5073 +@@ -421,13 +421,13 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
5074 + {
5075 + struct usb_yurex *dev;
5076 + int i, set = 0, retval = 0;
5077 +- char buffer[16];
5078 ++ char buffer[16 + 1];
5079 + char *data = buffer;
5080 + unsigned long long c, c2 = 0;
5081 + signed long timeout = 0;
5082 + DEFINE_WAIT(wait);
5083 +
5084 +- count = min(sizeof(buffer), count);
5085 ++ count = min(sizeof(buffer) - 1, count);
5086 + dev = file->private_data;
5087 +
5088 + /* verify that we actually have some data to write */
5089 +@@ -446,6 +446,7 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
5090 + retval = -EFAULT;
5091 + goto error;
5092 + }
5093 ++ buffer[count] = 0;
5094 + memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE);
5095 +
5096 + switch (buffer[0]) {
5097 +diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c
5098 +index eecfd0671362..d045d8458f81 100644
5099 +--- a/drivers/usb/mtu3/mtu3_core.c
5100 ++++ b/drivers/usb/mtu3/mtu3_core.c
5101 +@@ -107,8 +107,12 @@ static int mtu3_device_enable(struct mtu3 *mtu)
5102 + (SSUSB_U2_PORT_DIS | SSUSB_U2_PORT_PDN |
5103 + SSUSB_U2_PORT_HOST_SEL));
5104 +
5105 +- if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG)
5106 ++ if (mtu->ssusb->dr_mode == USB_DR_MODE_OTG) {
5107 + mtu3_setbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_OTG_SEL);
5108 ++ if (mtu->is_u3_ip)
5109 ++ mtu3_setbits(ibase, SSUSB_U3_CTRL(0),
5110 ++ SSUSB_U3_PORT_DUAL_MODE);
5111 ++ }
5112 +
5113 + return ssusb_check_clocks(mtu->ssusb, check_clk);
5114 + }
5115 +diff --git a/drivers/usb/mtu3/mtu3_hw_regs.h b/drivers/usb/mtu3/mtu3_hw_regs.h
5116 +index 6ee371478d89..a45bb253939f 100644
5117 +--- a/drivers/usb/mtu3/mtu3_hw_regs.h
5118 ++++ b/drivers/usb/mtu3/mtu3_hw_regs.h
5119 +@@ -459,6 +459,7 @@
5120 +
5121 + /* U3D_SSUSB_U3_CTRL_0P */
5122 + #define SSUSB_U3_PORT_SSP_SPEED BIT(9)
5123 ++#define SSUSB_U3_PORT_DUAL_MODE BIT(7)
5124 + #define SSUSB_U3_PORT_HOST_SEL BIT(2)
5125 + #define SSUSB_U3_PORT_PDN BIT(1)
5126 + #define SSUSB_U3_PORT_DIS BIT(0)
5127 +diff --git a/drivers/usb/serial/io_ti.h b/drivers/usb/serial/io_ti.h
5128 +index e53c68261017..9bbcee37524e 100644
5129 +--- a/drivers/usb/serial/io_ti.h
5130 ++++ b/drivers/usb/serial/io_ti.h
5131 +@@ -173,7 +173,7 @@ struct ump_interrupt {
5132 + } __attribute__((packed));
5133 +
5134 +
5135 +-#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
5136 ++#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 6) & 0x01)
5137 + #define TIUMP_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
5138 + #define TIUMP_INTERRUPT_CODE_LSR 0x03
5139 + #define TIUMP_INTERRUPT_CODE_MSR 0x04
5140 +diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
5141 +index 6b22857f6e52..58fc7964ee6b 100644
5142 +--- a/drivers/usb/serial/ti_usb_3410_5052.c
5143 ++++ b/drivers/usb/serial/ti_usb_3410_5052.c
5144 +@@ -1119,7 +1119,7 @@ static void ti_break(struct tty_struct *tty, int break_state)
5145 +
5146 + static int ti_get_port_from_code(unsigned char code)
5147 + {
5148 +- return (code >> 4) - 3;
5149 ++ return (code >> 6) & 0x01;
5150 + }
5151 +
5152 + static int ti_get_func_from_code(unsigned char code)
5153 +diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
5154 +index c267f2812a04..e227bb5b794f 100644
5155 +--- a/drivers/usb/storage/scsiglue.c
5156 ++++ b/drivers/usb/storage/scsiglue.c
5157 +@@ -376,6 +376,15 @@ static int queuecommand_lck(struct scsi_cmnd *srb,
5158 + return 0;
5159 + }
5160 +
5161 ++ if ((us->fflags & US_FL_NO_ATA_1X) &&
5162 ++ (srb->cmnd[0] == ATA_12 || srb->cmnd[0] == ATA_16)) {
5163 ++ memcpy(srb->sense_buffer, usb_stor_sense_invalidCDB,
5164 ++ sizeof(usb_stor_sense_invalidCDB));
5165 ++ srb->result = SAM_STAT_CHECK_CONDITION;
5166 ++ done(srb);
5167 ++ return 0;
5168 ++ }
5169 ++
5170 + /* enqueue the command and wake up the control thread */
5171 + srb->scsi_done = done;
5172 + us->srb = srb;
5173 +diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
5174 +index 9e9de5452860..1f7b401c4d04 100644
5175 +--- a/drivers/usb/storage/uas.c
5176 ++++ b/drivers/usb/storage/uas.c
5177 +@@ -842,6 +842,27 @@ static int uas_slave_configure(struct scsi_device *sdev)
5178 + sdev->skip_ms_page_8 = 1;
5179 + sdev->wce_default_on = 1;
5180 + }
5181 ++
5182 ++ /*
5183 ++ * Some disks return the total number of blocks in response
5184 ++ * to READ CAPACITY rather than the highest block number.
5185 ++ * If this device makes that mistake, tell the sd driver.
5186 ++ */
5187 ++ if (devinfo->flags & US_FL_FIX_CAPACITY)
5188 ++ sdev->fix_capacity = 1;
5189 ++
5190 ++ /*
5191 ++ * Some devices don't like MODE SENSE with page=0x3f,
5192 ++ * which is the command used for checking if a device
5193 ++ * is write-protected. Now that we tell the sd driver
5194 ++ * to do a 192-byte transfer with this command the
5195 ++ * majority of devices work fine, but a few still can't
5196 ++ * handle it. The sd driver will simply assume those
5197 ++ * devices are write-enabled.
5198 ++ */
5199 ++ if (devinfo->flags & US_FL_NO_WP_DETECT)
5200 ++ sdev->skip_ms_page_3f = 1;
5201 ++
5202 + scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
5203 + return 0;
5204 + }
5205 +diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
5206 +index 22fcfccf453a..f7f83b21dc74 100644
5207 +--- a/drivers/usb/storage/unusual_devs.h
5208 ++++ b/drivers/usb/storage/unusual_devs.h
5209 +@@ -2288,6 +2288,13 @@ UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999,
5210 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
5211 + US_FL_GO_SLOW ),
5212 +
5213 ++/* Reported-by: Tim Anderson <tsa@×××××××××××××××.com> */
5214 ++UNUSUAL_DEV( 0x2ca3, 0x0031, 0x0000, 0x9999,
5215 ++ "DJI",
5216 ++ "CineSSD",
5217 ++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
5218 ++ US_FL_NO_ATA_1X),
5219 ++
5220 + /*
5221 + * Reported by Frederic Marchal <frederic.marchal@××××××××××.com>
5222 + * Mio Moov 330
5223 +diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
5224 +index 2510fa728d77..de119f11b78f 100644
5225 +--- a/drivers/video/fbdev/core/modedb.c
5226 ++++ b/drivers/video/fbdev/core/modedb.c
5227 +@@ -644,7 +644,7 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
5228 + *
5229 + * Valid mode specifiers for @mode_option:
5230 + *
5231 +- * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m] or
5232 ++ * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][p][m] or
5233 + * <name>[-<bpp>][@<refresh>]
5234 + *
5235 + * with <xres>, <yres>, <bpp> and <refresh> decimal numbers and
5236 +@@ -653,10 +653,10 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
5237 + * If 'M' is present after yres (and before refresh/bpp if present),
5238 + * the function will compute the timings using VESA(tm) Coordinated
5239 + * Video Timings (CVT). If 'R' is present after 'M', will compute with
5240 +- * reduced blanking (for flatpanels). If 'i' is present, compute
5241 +- * interlaced mode. If 'm' is present, add margins equal to 1.8%
5242 +- * of xres rounded down to 8 pixels, and 1.8% of yres. The char
5243 +- * 'i' and 'm' must be after 'M' and 'R'. Example:
5244 ++ * reduced blanking (for flatpanels). If 'i' or 'p' are present, compute
5245 ++ * interlaced or progressive mode. If 'm' is present, add margins equal
5246 ++ * to 1.8% of xres rounded down to 8 pixels, and 1.8% of yres. The chars
5247 ++ * 'i', 'p' and 'm' must be after 'M' and 'R'. Example:
5248 + *
5249 + * 1024x768MR-8@60m - Reduced blank with margins at 60Hz.
5250 + *
5251 +@@ -697,7 +697,8 @@ int fb_find_mode(struct fb_var_screeninfo *var,
5252 + unsigned int namelen = strlen(name);
5253 + int res_specified = 0, bpp_specified = 0, refresh_specified = 0;
5254 + unsigned int xres = 0, yres = 0, bpp = default_bpp, refresh = 0;
5255 +- int yres_specified = 0, cvt = 0, rb = 0, interlace = 0;
5256 ++ int yres_specified = 0, cvt = 0, rb = 0;
5257 ++ int interlace_specified = 0, interlace = 0;
5258 + int margins = 0;
5259 + u32 best, diff, tdiff;
5260 +
5261 +@@ -748,9 +749,17 @@ int fb_find_mode(struct fb_var_screeninfo *var,
5262 + if (!cvt)
5263 + margins = 1;
5264 + break;
5265 ++ case 'p':
5266 ++ if (!cvt) {
5267 ++ interlace = 0;
5268 ++ interlace_specified = 1;
5269 ++ }
5270 ++ break;
5271 + case 'i':
5272 +- if (!cvt)
5273 ++ if (!cvt) {
5274 + interlace = 1;
5275 ++ interlace_specified = 1;
5276 ++ }
5277 + break;
5278 + default:
5279 + goto done;
5280 +@@ -819,11 +828,21 @@ done:
5281 + if ((name_matches(db[i], name, namelen) ||
5282 + (res_specified && res_matches(db[i], xres, yres))) &&
5283 + !fb_try_mode(var, info, &db[i], bpp)) {
5284 +- if (refresh_specified && db[i].refresh == refresh)
5285 +- return 1;
5286 ++ const int db_interlace = (db[i].vmode &
5287 ++ FB_VMODE_INTERLACED ? 1 : 0);
5288 ++ int score = abs(db[i].refresh - refresh);
5289 ++
5290 ++ if (interlace_specified)
5291 ++ score += abs(db_interlace - interlace);
5292 ++
5293 ++ if (!interlace_specified ||
5294 ++ db_interlace == interlace)
5295 ++ if (refresh_specified &&
5296 ++ db[i].refresh == refresh)
5297 ++ return 1;
5298 +
5299 +- if (abs(db[i].refresh - refresh) < diff) {
5300 +- diff = abs(db[i].refresh - refresh);
5301 ++ if (score < diff) {
5302 ++ diff = score;
5303 + best = i;
5304 + }
5305 + }
5306 +diff --git a/drivers/video/fbdev/goldfishfb.c b/drivers/video/fbdev/goldfishfb.c
5307 +index 3b70044773b6..9fe7edf725c6 100644
5308 +--- a/drivers/video/fbdev/goldfishfb.c
5309 ++++ b/drivers/video/fbdev/goldfishfb.c
5310 +@@ -301,6 +301,7 @@ static int goldfish_fb_remove(struct platform_device *pdev)
5311 + dma_free_coherent(&pdev->dev, framesize, (void *)fb->fb.screen_base,
5312 + fb->fb.fix.smem_start);
5313 + iounmap(fb->reg_base);
5314 ++ kfree(fb);
5315 + return 0;
5316 + }
5317 +
5318 +diff --git a/drivers/video/fbdev/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c
5319 +index 585f39efcff6..1c75f4806ed3 100644
5320 +--- a/drivers/video/fbdev/omap/omapfb_main.c
5321 ++++ b/drivers/video/fbdev/omap/omapfb_main.c
5322 +@@ -958,7 +958,7 @@ int omapfb_register_client(struct omapfb_notifier_block *omapfb_nb,
5323 + {
5324 + int r;
5325 +
5326 +- if ((unsigned)omapfb_nb->plane_idx > OMAPFB_PLANE_NUM)
5327 ++ if ((unsigned)omapfb_nb->plane_idx >= OMAPFB_PLANE_NUM)
5328 + return -EINVAL;
5329 +
5330 + if (!notifier_inited) {
5331 +diff --git a/drivers/video/fbdev/omap2/omapfb/Makefile b/drivers/video/fbdev/omap2/omapfb/Makefile
5332 +index 602edfed09df..f54c3f56b641 100644
5333 +--- a/drivers/video/fbdev/omap2/omapfb/Makefile
5334 ++++ b/drivers/video/fbdev/omap2/omapfb/Makefile
5335 +@@ -2,5 +2,5 @@
5336 + obj-$(CONFIG_OMAP2_VRFB) += vrfb.o
5337 + obj-y += dss/
5338 + obj-y += displays/
5339 +-obj-$(CONFIG_FB_OMAP2) += omapfb.o
5340 +-omapfb-y := omapfb-main.o omapfb-sysfs.o omapfb-ioctl.o
5341 ++obj-$(CONFIG_FB_OMAP2) += omap2fb.o
5342 ++omap2fb-y := omapfb-main.o omapfb-sysfs.o omapfb-ioctl.o
5343 +diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c
5344 +index 76722a59f55e..dfe382e68287 100644
5345 +--- a/drivers/video/fbdev/pxafb.c
5346 ++++ b/drivers/video/fbdev/pxafb.c
5347 +@@ -2128,8 +2128,8 @@ static int of_get_pxafb_display(struct device *dev, struct device_node *disp,
5348 + return -EINVAL;
5349 +
5350 + ret = -ENOMEM;
5351 +- info->modes = kmalloc_array(timings->num_timings,
5352 +- sizeof(info->modes[0]), GFP_KERNEL);
5353 ++ info->modes = kcalloc(timings->num_timings, sizeof(info->modes[0]),
5354 ++ GFP_KERNEL);
5355 + if (!info->modes)
5356 + goto out;
5357 + info->num_modes = timings->num_timings;
5358 +diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
5359 +index d2f785068ef4..7bb7e90b8f00 100644
5360 +--- a/drivers/video/fbdev/via/viafbdev.c
5361 ++++ b/drivers/video/fbdev/via/viafbdev.c
5362 +@@ -19,6 +19,7 @@
5363 + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
5364 + */
5365 +
5366 ++#include <linux/compiler.h>
5367 + #include <linux/module.h>
5368 + #include <linux/seq_file.h>
5369 + #include <linux/slab.h>
5370 +@@ -1468,7 +1469,7 @@ static const struct file_operations viafb_vt1636_proc_fops = {
5371 +
5372 + #endif /* CONFIG_FB_VIA_DIRECT_PROCFS */
5373 +
5374 +-static int viafb_sup_odev_proc_show(struct seq_file *m, void *v)
5375 ++static int __maybe_unused viafb_sup_odev_proc_show(struct seq_file *m, void *v)
5376 + {
5377 + via_odev_to_seq(m, supported_odev_map[
5378 + viaparinfo->shared->chip_info.gfx_chip_name]);
5379 +diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
5380 +index 816cc921cf36..efae2fb0930a 100644
5381 +--- a/fs/binfmt_elf.c
5382 ++++ b/fs/binfmt_elf.c
5383 +@@ -1751,7 +1751,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
5384 + const struct user_regset *regset = &view->regsets[i];
5385 + do_thread_regset_writeback(t->task, regset);
5386 + if (regset->core_note_type && regset->get &&
5387 +- (!regset->active || regset->active(t->task, regset))) {
5388 ++ (!regset->active || regset->active(t->task, regset) > 0)) {
5389 + int ret;
5390 + size_t size = regset_size(t->task, regset);
5391 + void *data = kmalloc(size, GFP_KERNEL);
5392 +diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
5393 +index eeab81c9452f..e169e1a5fd35 100644
5394 +--- a/fs/cifs/readdir.c
5395 ++++ b/fs/cifs/readdir.c
5396 +@@ -376,8 +376,15 @@ static char *nxt_dir_entry(char *old_entry, char *end_of_smb, int level)
5397 +
5398 + new_entry = old_entry + sizeof(FIND_FILE_STANDARD_INFO) +
5399 + pfData->FileNameLength;
5400 +- } else
5401 +- new_entry = old_entry + le32_to_cpu(pDirInfo->NextEntryOffset);
5402 ++ } else {
5403 ++ u32 next_offset = le32_to_cpu(pDirInfo->NextEntryOffset);
5404 ++
5405 ++ if (old_entry + next_offset < old_entry) {
5406 ++ cifs_dbg(VFS, "invalid offset %u\n", next_offset);
5407 ++ return NULL;
5408 ++ }
5409 ++ new_entry = old_entry + next_offset;
5410 ++ }
5411 + cifs_dbg(FYI, "new entry %p old entry %p\n", new_entry, old_entry);
5412 + /* validate that new_entry is not past end of SMB */
5413 + if (new_entry >= end_of_smb) {
5414 +diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
5415 +index 82be1dfeca33..29cce842ed04 100644
5416 +--- a/fs/cifs/smb2pdu.c
5417 ++++ b/fs/cifs/smb2pdu.c
5418 +@@ -2418,14 +2418,14 @@ SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,
5419 + /* We check for obvious errors in the output buffer length and offset */
5420 + if (*plen == 0)
5421 + goto ioctl_exit; /* server returned no data */
5422 +- else if (*plen > 0xFF00) {
5423 ++ else if (*plen > rsp_iov.iov_len || *plen > 0xFF00) {
5424 + cifs_dbg(VFS, "srv returned invalid ioctl length: %d\n", *plen);
5425 + *plen = 0;
5426 + rc = -EIO;
5427 + goto ioctl_exit;
5428 + }
5429 +
5430 +- if (rsp_iov.iov_len < le32_to_cpu(rsp->OutputOffset) + *plen) {
5431 ++ if (rsp_iov.iov_len - *plen < le32_to_cpu(rsp->OutputOffset)) {
5432 + cifs_dbg(VFS, "Malformed ioctl resp: len %d offset %d\n", *plen,
5433 + le32_to_cpu(rsp->OutputOffset));
5434 + *plen = 0;
5435 +@@ -3492,33 +3492,38 @@ num_entries(char *bufstart, char *end_of_buf, char **lastentry, size_t size)
5436 + int len;
5437 + unsigned int entrycount = 0;
5438 + unsigned int next_offset = 0;
5439 +- FILE_DIRECTORY_INFO *entryptr;
5440 ++ char *entryptr;
5441 ++ FILE_DIRECTORY_INFO *dir_info;
5442 +
5443 + if (bufstart == NULL)
5444 + return 0;
5445 +
5446 +- entryptr = (FILE_DIRECTORY_INFO *)bufstart;
5447 ++ entryptr = bufstart;
5448 +
5449 + while (1) {
5450 +- entryptr = (FILE_DIRECTORY_INFO *)
5451 +- ((char *)entryptr + next_offset);
5452 +-
5453 +- if ((char *)entryptr + size > end_of_buf) {
5454 ++ if (entryptr + next_offset < entryptr ||
5455 ++ entryptr + next_offset > end_of_buf ||
5456 ++ entryptr + next_offset + size > end_of_buf) {
5457 + cifs_dbg(VFS, "malformed search entry would overflow\n");
5458 + break;
5459 + }
5460 +
5461 +- len = le32_to_cpu(entryptr->FileNameLength);
5462 +- if ((char *)entryptr + len + size > end_of_buf) {
5463 ++ entryptr = entryptr + next_offset;
5464 ++ dir_info = (FILE_DIRECTORY_INFO *)entryptr;
5465 ++
5466 ++ len = le32_to_cpu(dir_info->FileNameLength);
5467 ++ if (entryptr + len < entryptr ||
5468 ++ entryptr + len > end_of_buf ||
5469 ++ entryptr + len + size > end_of_buf) {
5470 + cifs_dbg(VFS, "directory entry name would overflow frame end of buf %p\n",
5471 + end_of_buf);
5472 + break;
5473 + }
5474 +
5475 +- *lastentry = (char *)entryptr;
5476 ++ *lastentry = entryptr;
5477 + entrycount++;
5478 +
5479 +- next_offset = le32_to_cpu(entryptr->NextEntryOffset);
5480 ++ next_offset = le32_to_cpu(dir_info->NextEntryOffset);
5481 + if (!next_offset)
5482 + break;
5483 + }
5484 +diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
5485 +index 577cff24707b..39843fa7e11b 100644
5486 +--- a/fs/configfs/dir.c
5487 ++++ b/fs/configfs/dir.c
5488 +@@ -1777,6 +1777,16 @@ void configfs_unregister_group(struct config_group *group)
5489 + struct dentry *dentry = group->cg_item.ci_dentry;
5490 + struct dentry *parent = group->cg_item.ci_parent->ci_dentry;
5491 +
5492 ++ mutex_lock(&subsys->su_mutex);
5493 ++ if (!group->cg_item.ci_parent->ci_group) {
5494 ++ /*
5495 ++ * The parent has already been unlinked and detached
5496 ++ * due to a rmdir.
5497 ++ */
5498 ++ goto unlink_group;
5499 ++ }
5500 ++ mutex_unlock(&subsys->su_mutex);
5501 ++
5502 + inode_lock_nested(d_inode(parent), I_MUTEX_PARENT);
5503 + spin_lock(&configfs_dirent_lock);
5504 + configfs_detach_prep(dentry, NULL);
5505 +@@ -1791,6 +1801,7 @@ void configfs_unregister_group(struct config_group *group)
5506 + dput(dentry);
5507 +
5508 + mutex_lock(&subsys->su_mutex);
5509 ++unlink_group:
5510 + unlink_group(group);
5511 + mutex_unlock(&subsys->su_mutex);
5512 + }
5513 +diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
5514 +index 128d489acebb..742147cbe759 100644
5515 +--- a/fs/f2fs/super.c
5516 ++++ b/fs/f2fs/super.c
5517 +@@ -3106,9 +3106,19 @@ static struct dentry *f2fs_mount(struct file_system_type *fs_type, int flags,
5518 + static void kill_f2fs_super(struct super_block *sb)
5519 + {
5520 + if (sb->s_root) {
5521 +- set_sbi_flag(F2FS_SB(sb), SBI_IS_CLOSE);
5522 +- f2fs_stop_gc_thread(F2FS_SB(sb));
5523 +- f2fs_stop_discard_thread(F2FS_SB(sb));
5524 ++ struct f2fs_sb_info *sbi = F2FS_SB(sb);
5525 ++
5526 ++ set_sbi_flag(sbi, SBI_IS_CLOSE);
5527 ++ f2fs_stop_gc_thread(sbi);
5528 ++ f2fs_stop_discard_thread(sbi);
5529 ++
5530 ++ if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
5531 ++ !is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
5532 ++ struct cp_control cpc = {
5533 ++ .reason = CP_UMOUNT,
5534 ++ };
5535 ++ f2fs_write_checkpoint(sbi, &cpc);
5536 ++ }
5537 + }
5538 + kill_block_super(sb);
5539 + }
5540 +diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
5541 +index ed6699705c13..fd5bea55fd60 100644
5542 +--- a/fs/gfs2/bmap.c
5543 ++++ b/fs/gfs2/bmap.c
5544 +@@ -2060,7 +2060,7 @@ int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
5545 + end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
5546 + lblock = offset >> shift;
5547 + lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
5548 +- if (lblock_stop > end_of_file)
5549 ++ if (lblock_stop > end_of_file && ip != GFS2_I(sdp->sd_rindex))
5550 + return 1;
5551 +
5552 + size = (lblock_stop - lblock) << shift;
5553 +diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
5554 +index 33abcf29bc05..b86249ebde11 100644
5555 +--- a/fs/gfs2/rgrp.c
5556 ++++ b/fs/gfs2/rgrp.c
5557 +@@ -1686,7 +1686,8 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
5558 +
5559 + while(1) {
5560 + bi = rbm_bi(rbm);
5561 +- if (test_bit(GBF_FULL, &bi->bi_flags) &&
5562 ++ if ((ip == NULL || !gfs2_rs_active(&ip->i_res)) &&
5563 ++ test_bit(GBF_FULL, &bi->bi_flags) &&
5564 + (state == GFS2_BLKST_FREE))
5565 + goto next_bitmap;
5566 +
5567 +diff --git a/fs/namespace.c b/fs/namespace.c
5568 +index bd2f4c68506a..1949e0939d40 100644
5569 +--- a/fs/namespace.c
5570 ++++ b/fs/namespace.c
5571 +@@ -446,10 +446,10 @@ int mnt_want_write_file_path(struct file *file)
5572 + {
5573 + int ret;
5574 +
5575 +- sb_start_write(file->f_path.mnt->mnt_sb);
5576 ++ sb_start_write(file_inode(file)->i_sb);
5577 + ret = __mnt_want_write_file(file);
5578 + if (ret)
5579 +- sb_end_write(file->f_path.mnt->mnt_sb);
5580 ++ sb_end_write(file_inode(file)->i_sb);
5581 + return ret;
5582 + }
5583 +
5584 +@@ -540,7 +540,8 @@ void __mnt_drop_write_file(struct file *file)
5585 +
5586 + void mnt_drop_write_file_path(struct file *file)
5587 + {
5588 +- mnt_drop_write(file->f_path.mnt);
5589 ++ __mnt_drop_write_file(file);
5590 ++ sb_end_write(file_inode(file)->i_sb);
5591 + }
5592 +
5593 + void mnt_drop_write_file(struct file *file)
5594 +diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
5595 +index ff98e2a3f3cc..f688338b0482 100644
5596 +--- a/fs/nfs/nfs4proc.c
5597 ++++ b/fs/nfs/nfs4proc.c
5598 +@@ -2642,14 +2642,18 @@ static void nfs41_check_delegation_stateid(struct nfs4_state *state)
5599 + }
5600 +
5601 + nfs4_stateid_copy(&stateid, &delegation->stateid);
5602 +- if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) ||
5603 +- !test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
5604 +- &delegation->flags)) {
5605 ++ if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) {
5606 + rcu_read_unlock();
5607 + nfs_finish_clear_delegation_stateid(state, &stateid);
5608 + return;
5609 + }
5610 +
5611 ++ if (!test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
5612 ++ &delegation->flags)) {
5613 ++ rcu_read_unlock();
5614 ++ return;
5615 ++ }
5616 ++
5617 + cred = get_rpccred(delegation->cred);
5618 + rcu_read_unlock();
5619 + status = nfs41_test_and_free_expired_stateid(server, &stateid, cred);
5620 +diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
5621 +index 2bf2eaa08ca7..3c18c12a5c4c 100644
5622 +--- a/fs/nfs/nfs4state.c
5623 ++++ b/fs/nfs/nfs4state.c
5624 +@@ -1390,6 +1390,8 @@ int nfs4_schedule_stateid_recovery(const struct nfs_server *server, struct nfs4_
5625 +
5626 + if (!nfs4_state_mark_reclaim_nograce(clp, state))
5627 + return -EBADF;
5628 ++ nfs_inode_find_delegation_state_and_recover(state->inode,
5629 ++ &state->stateid);
5630 + dprintk("%s: scheduling stateid recovery for server %s\n", __func__,
5631 + clp->cl_hostname);
5632 + nfs4_schedule_state_manager(clp);
5633 +diff --git a/fs/nfs/nfs4trace.h b/fs/nfs/nfs4trace.h
5634 +index a275fba93170..708342f4692f 100644
5635 +--- a/fs/nfs/nfs4trace.h
5636 ++++ b/fs/nfs/nfs4trace.h
5637 +@@ -1194,7 +1194,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event,
5638 + TP_fast_assign(
5639 + __entry->error = error;
5640 + __entry->fhandle = nfs_fhandle_hash(fhandle);
5641 +- if (inode != NULL) {
5642 ++ if (!IS_ERR_OR_NULL(inode)) {
5643 + __entry->fileid = NFS_FILEID(inode);
5644 + __entry->dev = inode->i_sb->s_dev;
5645 + } else {
5646 +diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
5647 +index 704b37311467..fa2121f877c1 100644
5648 +--- a/fs/overlayfs/super.c
5649 ++++ b/fs/overlayfs/super.c
5650 +@@ -970,16 +970,6 @@ static int ovl_get_upper(struct ovl_fs *ofs, struct path *upperpath)
5651 + if (err)
5652 + goto out;
5653 +
5654 +- err = -EBUSY;
5655 +- if (ovl_inuse_trylock(upperpath->dentry)) {
5656 +- ofs->upperdir_locked = true;
5657 +- } else if (ofs->config.index) {
5658 +- pr_err("overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection.\n");
5659 +- goto out;
5660 +- } else {
5661 +- pr_warn("overlayfs: upperdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
5662 +- }
5663 +-
5664 + upper_mnt = clone_private_mount(upperpath);
5665 + err = PTR_ERR(upper_mnt);
5666 + if (IS_ERR(upper_mnt)) {
5667 +@@ -990,6 +980,17 @@ static int ovl_get_upper(struct ovl_fs *ofs, struct path *upperpath)
5668 + /* Don't inherit atime flags */
5669 + upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME);
5670 + ofs->upper_mnt = upper_mnt;
5671 ++
5672 ++ err = -EBUSY;
5673 ++ if (ovl_inuse_trylock(ofs->upper_mnt->mnt_root)) {
5674 ++ ofs->upperdir_locked = true;
5675 ++ } else if (ofs->config.index) {
5676 ++ pr_err("overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection.\n");
5677 ++ goto out;
5678 ++ } else {
5679 ++ pr_warn("overlayfs: upperdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
5680 ++ }
5681 ++
5682 + err = 0;
5683 + out:
5684 + return err;
5685 +@@ -1089,8 +1090,10 @@ static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
5686 + goto out;
5687 + }
5688 +
5689 ++ ofs->workbasedir = dget(workpath.dentry);
5690 ++
5691 + err = -EBUSY;
5692 +- if (ovl_inuse_trylock(workpath.dentry)) {
5693 ++ if (ovl_inuse_trylock(ofs->workbasedir)) {
5694 + ofs->workdir_locked = true;
5695 + } else if (ofs->config.index) {
5696 + pr_err("overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.\n");
5697 +@@ -1099,7 +1102,6 @@ static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
5698 + pr_warn("overlayfs: workdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
5699 + }
5700 +
5701 +- ofs->workbasedir = dget(workpath.dentry);
5702 + err = ovl_make_workdir(ofs, &workpath);
5703 + if (err)
5704 + goto out;
5705 +diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
5706 +index 951a14edcf51..0792595ebcfb 100644
5707 +--- a/fs/pstore/ram_core.c
5708 ++++ b/fs/pstore/ram_core.c
5709 +@@ -429,7 +429,12 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size,
5710 + vaddr = vmap(pages, page_count, VM_MAP, prot);
5711 + kfree(pages);
5712 +
5713 +- return vaddr;
5714 ++ /*
5715 ++ * Since vmap() uses page granularity, we must add the offset
5716 ++ * into the page here, to get the byte granularity address
5717 ++ * into the mapping to represent the actual "start" location.
5718 ++ */
5719 ++ return vaddr + offset_in_page(start);
5720 + }
5721 +
5722 + static void *persistent_ram_iomap(phys_addr_t start, size_t size,
5723 +@@ -448,6 +453,11 @@ static void *persistent_ram_iomap(phys_addr_t start, size_t size,
5724 + else
5725 + va = ioremap_wc(start, size);
5726 +
5727 ++ /*
5728 ++ * Since request_mem_region() and ioremap() are byte-granularity
5729 ++ * there is no need handle anything special like we do when the
5730 ++ * vmap() case in persistent_ram_vmap() above.
5731 ++ */
5732 + return va;
5733 + }
5734 +
5735 +@@ -468,7 +478,7 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
5736 + return -ENOMEM;
5737 + }
5738 +
5739 +- prz->buffer = prz->vaddr + offset_in_page(start);
5740 ++ prz->buffer = prz->vaddr;
5741 + prz->buffer_size = size - sizeof(struct persistent_ram_buffer);
5742 +
5743 + return 0;
5744 +@@ -515,7 +525,8 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
5745 +
5746 + if (prz->vaddr) {
5747 + if (pfn_valid(prz->paddr >> PAGE_SHIFT)) {
5748 +- vunmap(prz->vaddr);
5749 ++ /* We must vunmap() at page-granularity. */
5750 ++ vunmap(prz->vaddr - offset_in_page(prz->paddr));
5751 + } else {
5752 + iounmap(prz->vaddr);
5753 + release_mem_region(prz->paddr, prz->size);
5754 +diff --git a/include/linux/crypto.h b/include/linux/crypto.h
5755 +index 6eb06101089f..e8839d3a7559 100644
5756 +--- a/include/linux/crypto.h
5757 ++++ b/include/linux/crypto.h
5758 +@@ -112,6 +112,11 @@
5759 + */
5760 + #define CRYPTO_ALG_OPTIONAL_KEY 0x00004000
5761 +
5762 ++/*
5763 ++ * Don't trigger module loading
5764 ++ */
5765 ++#define CRYPTO_NOLOAD 0x00008000
5766 ++
5767 + /*
5768 + * Transform masks and values (for crt_flags).
5769 + */
5770 +diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
5771 +index 83957920653a..64f450593b54 100644
5772 +--- a/include/linux/mlx5/driver.h
5773 ++++ b/include/linux/mlx5/driver.h
5774 +@@ -357,7 +357,7 @@ struct mlx5_frag_buf {
5775 + struct mlx5_frag_buf_ctrl {
5776 + struct mlx5_frag_buf frag_buf;
5777 + u32 sz_m1;
5778 +- u32 frag_sz_m1;
5779 ++ u16 frag_sz_m1;
5780 + u32 strides_offset;
5781 + u8 log_sz;
5782 + u8 log_stride;
5783 +@@ -1042,7 +1042,7 @@ int mlx5_cmd_free_uar(struct mlx5_core_dev *dev, u32 uarn);
5784 + void mlx5_health_cleanup(struct mlx5_core_dev *dev);
5785 + int mlx5_health_init(struct mlx5_core_dev *dev);
5786 + void mlx5_start_health_poll(struct mlx5_core_dev *dev);
5787 +-void mlx5_stop_health_poll(struct mlx5_core_dev *dev);
5788 ++void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health);
5789 + void mlx5_drain_health_wq(struct mlx5_core_dev *dev);
5790 + void mlx5_trigger_health_work(struct mlx5_core_dev *dev);
5791 + void mlx5_drain_health_recovery(struct mlx5_core_dev *dev);
5792 +diff --git a/include/linux/of.h b/include/linux/of.h
5793 +index 4d25e4f952d9..b99a1a8c2952 100644
5794 +--- a/include/linux/of.h
5795 ++++ b/include/linux/of.h
5796 +@@ -290,6 +290,8 @@ extern struct device_node *of_get_next_child(const struct device_node *node,
5797 + extern struct device_node *of_get_next_available_child(
5798 + const struct device_node *node, struct device_node *prev);
5799 +
5800 ++extern struct device_node *of_get_compatible_child(const struct device_node *parent,
5801 ++ const char *compatible);
5802 + extern struct device_node *of_get_child_by_name(const struct device_node *node,
5803 + const char *name);
5804 +
5805 +@@ -632,6 +634,12 @@ static inline bool of_have_populated_dt(void)
5806 + return false;
5807 + }
5808 +
5809 ++static inline struct device_node *of_get_compatible_child(const struct device_node *parent,
5810 ++ const char *compatible)
5811 ++{
5812 ++ return NULL;
5813 ++}
5814 ++
5815 + static inline struct device_node *of_get_child_by_name(
5816 + const struct device_node *node,
5817 + const char *name)
5818 +diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
5819 +index c17c0c268436..dce35e16bff4 100644
5820 +--- a/kernel/audit_watch.c
5821 ++++ b/kernel/audit_watch.c
5822 +@@ -419,6 +419,13 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
5823 + struct path parent_path;
5824 + int h, ret = 0;
5825 +
5826 ++ /*
5827 ++ * When we will be calling audit_add_to_parent, krule->watch might have
5828 ++ * been updated and watch might have been freed.
5829 ++ * So we need to keep a reference of watch.
5830 ++ */
5831 ++ audit_get_watch(watch);
5832 ++
5833 + mutex_unlock(&audit_filter_mutex);
5834 +
5835 + /* Avoid calling path_lookup under audit_filter_mutex. */
5836 +@@ -427,8 +434,10 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
5837 + /* caller expects mutex locked */
5838 + mutex_lock(&audit_filter_mutex);
5839 +
5840 +- if (ret)
5841 ++ if (ret) {
5842 ++ audit_put_watch(watch);
5843 + return ret;
5844 ++ }
5845 +
5846 + /* either find an old parent or attach a new one */
5847 + parent = audit_find_parent(d_backing_inode(parent_path.dentry));
5848 +@@ -446,6 +455,7 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
5849 + *list = &audit_inode_hash[h];
5850 + error:
5851 + path_put(&parent_path);
5852 ++ audit_put_watch(watch);
5853 + return ret;
5854 + }
5855 +
5856 +diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
5857 +index 3d83ee7df381..badabb0b435c 100644
5858 +--- a/kernel/bpf/cgroup.c
5859 ++++ b/kernel/bpf/cgroup.c
5860 +@@ -95,7 +95,7 @@ static int compute_effective_progs(struct cgroup *cgrp,
5861 + enum bpf_attach_type type,
5862 + struct bpf_prog_array __rcu **array)
5863 + {
5864 +- struct bpf_prog_array __rcu *progs;
5865 ++ struct bpf_prog_array *progs;
5866 + struct bpf_prog_list *pl;
5867 + struct cgroup *p = cgrp;
5868 + int cnt = 0;
5869 +@@ -120,13 +120,12 @@ static int compute_effective_progs(struct cgroup *cgrp,
5870 + &p->bpf.progs[type], node) {
5871 + if (!pl->prog)
5872 + continue;
5873 +- rcu_dereference_protected(progs, 1)->
5874 +- progs[cnt++] = pl->prog;
5875 ++ progs->progs[cnt++] = pl->prog;
5876 + }
5877 + p = cgroup_parent(p);
5878 + } while (p);
5879 +
5880 +- *array = progs;
5881 ++ rcu_assign_pointer(*array, progs);
5882 + return 0;
5883 + }
5884 +
5885 +diff --git a/kernel/events/core.c b/kernel/events/core.c
5886 +index eec2d5fb676b..c7b3e34811ec 100644
5887 +--- a/kernel/events/core.c
5888 ++++ b/kernel/events/core.c
5889 +@@ -5948,6 +5948,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
5890 + unsigned long sp;
5891 + unsigned int rem;
5892 + u64 dyn_size;
5893 ++ mm_segment_t fs;
5894 +
5895 + /*
5896 + * We dump:
5897 +@@ -5965,7 +5966,10 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
5898 +
5899 + /* Data. */
5900 + sp = perf_user_stack_pointer(regs);
5901 ++ fs = get_fs();
5902 ++ set_fs(USER_DS);
5903 + rem = __output_copy_user(handle, (void *) sp, dump_size);
5904 ++ set_fs(fs);
5905 + dyn_size = dump_size - rem;
5906 +
5907 + perf_output_skip(handle, rem);
5908 +diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
5909 +index 42fcb7f05fac..f42cf69ef539 100644
5910 +--- a/kernel/rcu/rcutorture.c
5911 ++++ b/kernel/rcu/rcutorture.c
5912 +@@ -1446,7 +1446,7 @@ static int rcu_torture_stall(void *args)
5913 + VERBOSE_TOROUT_STRING("rcu_torture_stall end holdoff");
5914 + }
5915 + if (!kthread_should_stop()) {
5916 +- stop_at = get_seconds() + stall_cpu;
5917 ++ stop_at = ktime_get_seconds() + stall_cpu;
5918 + /* RCU CPU stall is expected behavior in following code. */
5919 + rcu_read_lock();
5920 + if (stall_cpu_irqsoff)
5921 +@@ -1455,7 +1455,8 @@ static int rcu_torture_stall(void *args)
5922 + preempt_disable();
5923 + pr_alert("rcu_torture_stall start on CPU %d.\n",
5924 + smp_processor_id());
5925 +- while (ULONG_CMP_LT(get_seconds(), stop_at))
5926 ++ while (ULONG_CMP_LT((unsigned long)ktime_get_seconds(),
5927 ++ stop_at))
5928 + continue; /* Induce RCU CPU stall warning. */
5929 + if (stall_cpu_irqsoff)
5930 + local_irq_enable();
5931 +diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
5932 +index 9c219f7b0970..478d9d3e6be9 100644
5933 +--- a/kernel/sched/fair.c
5934 ++++ b/kernel/sched/fair.c
5935 +@@ -735,11 +735,12 @@ static void attach_entity_cfs_rq(struct sched_entity *se);
5936 + * To solve this problem, we also cap the util_avg of successive tasks to
5937 + * only 1/2 of the left utilization budget:
5938 + *
5939 +- * util_avg_cap = (1024 - cfs_rq->avg.util_avg) / 2^n
5940 ++ * util_avg_cap = (cpu_scale - cfs_rq->avg.util_avg) / 2^n
5941 + *
5942 +- * where n denotes the nth task.
5943 ++ * where n denotes the nth task and cpu_scale the CPU capacity.
5944 + *
5945 +- * For example, a simplest series from the beginning would be like:
5946 ++ * For example, for a CPU with 1024 of capacity, a simplest series from
5947 ++ * the beginning would be like:
5948 + *
5949 + * task util_avg: 512, 256, 128, 64, 32, 16, 8, ...
5950 + * cfs_rq util_avg: 512, 768, 896, 960, 992, 1008, 1016, ...
5951 +@@ -751,7 +752,8 @@ void post_init_entity_util_avg(struct sched_entity *se)
5952 + {
5953 + struct cfs_rq *cfs_rq = cfs_rq_of(se);
5954 + struct sched_avg *sa = &se->avg;
5955 +- long cap = (long)(SCHED_CAPACITY_SCALE - cfs_rq->avg.util_avg) / 2;
5956 ++ long cpu_scale = arch_scale_cpu_capacity(NULL, cpu_of(rq_of(cfs_rq)));
5957 ++ long cap = (long)(cpu_scale - cfs_rq->avg.util_avg) / 2;
5958 +
5959 + if (cap > 0) {
5960 + if (cfs_rq->avg.util_avg != 0) {
5961 +diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
5962 +index 928be527477e..a7a2aaa3026a 100644
5963 +--- a/kernel/sched/wait.c
5964 ++++ b/kernel/sched/wait.c
5965 +@@ -392,35 +392,36 @@ static inline bool is_kthread_should_stop(void)
5966 + * if (condition)
5967 + * break;
5968 + *
5969 +- * p->state = mode; condition = true;
5970 +- * smp_mb(); // A smp_wmb(); // C
5971 +- * if (!wq_entry->flags & WQ_FLAG_WOKEN) wq_entry->flags |= WQ_FLAG_WOKEN;
5972 +- * schedule() try_to_wake_up();
5973 +- * p->state = TASK_RUNNING; ~~~~~~~~~~~~~~~~~~
5974 +- * wq_entry->flags &= ~WQ_FLAG_WOKEN; condition = true;
5975 +- * smp_mb() // B smp_wmb(); // C
5976 +- * wq_entry->flags |= WQ_FLAG_WOKEN;
5977 +- * }
5978 +- * remove_wait_queue(&wq_head, &wait);
5979 ++ * // in wait_woken() // in woken_wake_function()
5980 + *
5981 ++ * p->state = mode; wq_entry->flags |= WQ_FLAG_WOKEN;
5982 ++ * smp_mb(); // A try_to_wake_up():
5983 ++ * if (!(wq_entry->flags & WQ_FLAG_WOKEN)) <full barrier>
5984 ++ * schedule() if (p->state & mode)
5985 ++ * p->state = TASK_RUNNING; p->state = TASK_RUNNING;
5986 ++ * wq_entry->flags &= ~WQ_FLAG_WOKEN; ~~~~~~~~~~~~~~~~~~
5987 ++ * smp_mb(); // B condition = true;
5988 ++ * } smp_mb(); // C
5989 ++ * remove_wait_queue(&wq_head, &wait); wq_entry->flags |= WQ_FLAG_WOKEN;
5990 + */
5991 + long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout)
5992 + {
5993 +- set_current_state(mode); /* A */
5994 + /*
5995 +- * The above implies an smp_mb(), which matches with the smp_wmb() from
5996 +- * woken_wake_function() such that if we observe WQ_FLAG_WOKEN we must
5997 +- * also observe all state before the wakeup.
5998 ++ * The below executes an smp_mb(), which matches with the full barrier
5999 ++ * executed by the try_to_wake_up() in woken_wake_function() such that
6000 ++ * either we see the store to wq_entry->flags in woken_wake_function()
6001 ++ * or woken_wake_function() sees our store to current->state.
6002 + */
6003 ++ set_current_state(mode); /* A */
6004 + if (!(wq_entry->flags & WQ_FLAG_WOKEN) && !is_kthread_should_stop())
6005 + timeout = schedule_timeout(timeout);
6006 + __set_current_state(TASK_RUNNING);
6007 +
6008 + /*
6009 +- * The below implies an smp_mb(), it too pairs with the smp_wmb() from
6010 +- * woken_wake_function() such that we must either observe the wait
6011 +- * condition being true _OR_ WQ_FLAG_WOKEN such that we will not miss
6012 +- * an event.
6013 ++ * The below executes an smp_mb(), which matches with the smp_mb() (C)
6014 ++ * in woken_wake_function() such that either we see the wait condition
6015 ++ * being true or the store to wq_entry->flags in woken_wake_function()
6016 ++ * follows ours in the coherence order.
6017 + */
6018 + smp_store_mb(wq_entry->flags, wq_entry->flags & ~WQ_FLAG_WOKEN); /* B */
6019 +
6020 +@@ -430,14 +431,8 @@ EXPORT_SYMBOL(wait_woken);
6021 +
6022 + int woken_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int sync, void *key)
6023 + {
6024 +- /*
6025 +- * Although this function is called under waitqueue lock, LOCK
6026 +- * doesn't imply write barrier and the users expects write
6027 +- * barrier semantics on wakeup functions. The following
6028 +- * smp_wmb() is equivalent to smp_wmb() in try_to_wake_up()
6029 +- * and is paired with smp_store_mb() in wait_woken().
6030 +- */
6031 +- smp_wmb(); /* C */
6032 ++ /* Pairs with the smp_store_mb() in wait_woken(). */
6033 ++ smp_mb(); /* C */
6034 + wq_entry->flags |= WQ_FLAG_WOKEN;
6035 +
6036 + return default_wake_function(wq_entry, mode, sync, key);
6037 +diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
6038 +index 3264e1873219..deacc52d7ff1 100644
6039 +--- a/net/bluetooth/af_bluetooth.c
6040 ++++ b/net/bluetooth/af_bluetooth.c
6041 +@@ -159,7 +159,7 @@ void bt_accept_enqueue(struct sock *parent, struct sock *sk)
6042 + BT_DBG("parent %p, sk %p", parent, sk);
6043 +
6044 + sock_hold(sk);
6045 +- lock_sock(sk);
6046 ++ lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
6047 + list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
6048 + bt_sk(sk)->parent = parent;
6049 + release_sock(sk);
6050 +diff --git a/net/core/skbuff.c b/net/core/skbuff.c
6051 +index fb35b62af272..3680912f056a 100644
6052 +--- a/net/core/skbuff.c
6053 ++++ b/net/core/skbuff.c
6054 +@@ -939,9 +939,6 @@ struct ubuf_info *sock_zerocopy_alloc(struct sock *sk, size_t size)
6055 +
6056 + WARN_ON_ONCE(!in_task());
6057 +
6058 +- if (!sock_flag(sk, SOCK_ZEROCOPY))
6059 +- return NULL;
6060 +-
6061 + skb = sock_omalloc(sk, 0, GFP_KERNEL);
6062 + if (!skb)
6063 + return NULL;
6064 +diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
6065 +index 055f4bbba86b..41883c34a385 100644
6066 +--- a/net/ipv4/ip_gre.c
6067 ++++ b/net/ipv4/ip_gre.c
6068 +@@ -178,6 +178,9 @@ static void ipgre_err(struct sk_buff *skb, u32 info,
6069 +
6070 + if (tpi->proto == htons(ETH_P_TEB))
6071 + itn = net_generic(net, gre_tap_net_id);
6072 ++ else if (tpi->proto == htons(ETH_P_ERSPAN) ||
6073 ++ tpi->proto == htons(ETH_P_ERSPAN2))
6074 ++ itn = net_generic(net, erspan_net_id);
6075 + else
6076 + itn = net_generic(net, ipgre_net_id);
6077 +
6078 +@@ -328,6 +331,8 @@ static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi,
6079 + ip_tunnel_rcv(tunnel, skb, tpi, tun_dst, log_ecn_error);
6080 + return PACKET_RCVD;
6081 + }
6082 ++ return PACKET_REJECT;
6083 ++
6084 + drop:
6085 + kfree_skb(skb);
6086 + return PACKET_RCVD;
6087 +diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
6088 +index 4491faf83f4f..086201d96d54 100644
6089 +--- a/net/ipv4/tcp.c
6090 ++++ b/net/ipv4/tcp.c
6091 +@@ -1186,7 +1186,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
6092 +
6093 + flags = msg->msg_flags;
6094 +
6095 +- if (flags & MSG_ZEROCOPY && size) {
6096 ++ if (flags & MSG_ZEROCOPY && size && sock_flag(sk, SOCK_ZEROCOPY)) {
6097 + if (sk->sk_state != TCP_ESTABLISHED) {
6098 + err = -EINVAL;
6099 + goto out_err;
6100 +diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
6101 +index bdf6fa78d0d2..aa082b71d2e4 100644
6102 +--- a/net/mac80211/cfg.c
6103 ++++ b/net/mac80211/cfg.c
6104 +@@ -495,7 +495,7 @@ static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
6105 + goto out_unlock;
6106 + }
6107 +
6108 +- ieee80211_key_free(key, true);
6109 ++ ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION);
6110 +
6111 + ret = 0;
6112 + out_unlock:
6113 +diff --git a/net/mac80211/key.c b/net/mac80211/key.c
6114 +index ee0d0cc8dc3b..c054ac85793c 100644
6115 +--- a/net/mac80211/key.c
6116 ++++ b/net/mac80211/key.c
6117 +@@ -656,11 +656,15 @@ int ieee80211_key_link(struct ieee80211_key *key,
6118 + {
6119 + struct ieee80211_local *local = sdata->local;
6120 + struct ieee80211_key *old_key;
6121 +- int idx, ret;
6122 +- bool pairwise;
6123 +-
6124 +- pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
6125 +- idx = key->conf.keyidx;
6126 ++ int idx = key->conf.keyidx;
6127 ++ bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
6128 ++ /*
6129 ++ * We want to delay tailroom updates only for station - in that
6130 ++ * case it helps roaming speed, but in other cases it hurts and
6131 ++ * can cause warnings to appear.
6132 ++ */
6133 ++ bool delay_tailroom = sdata->vif.type == NL80211_IFTYPE_STATION;
6134 ++ int ret;
6135 +
6136 + mutex_lock(&sdata->local->key_mtx);
6137 +
6138 +@@ -688,14 +692,14 @@ int ieee80211_key_link(struct ieee80211_key *key,
6139 + increment_tailroom_need_count(sdata);
6140 +
6141 + ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
6142 +- ieee80211_key_destroy(old_key, true);
6143 ++ ieee80211_key_destroy(old_key, delay_tailroom);
6144 +
6145 + ieee80211_debugfs_key_add(key);
6146 +
6147 + if (!local->wowlan) {
6148 + ret = ieee80211_key_enable_hw_accel(key);
6149 + if (ret)
6150 +- ieee80211_key_free(key, true);
6151 ++ ieee80211_key_free(key, delay_tailroom);
6152 + } else {
6153 + ret = 0;
6154 + }
6155 +@@ -930,7 +934,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
6156 + ieee80211_key_replace(key->sdata, key->sta,
6157 + key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
6158 + key, NULL);
6159 +- __ieee80211_key_destroy(key, true);
6160 ++ __ieee80211_key_destroy(key, key->sdata->vif.type ==
6161 ++ NL80211_IFTYPE_STATION);
6162 + }
6163 +
6164 + for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
6165 +@@ -940,7 +945,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
6166 + ieee80211_key_replace(key->sdata, key->sta,
6167 + key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
6168 + key, NULL);
6169 +- __ieee80211_key_destroy(key, true);
6170 ++ __ieee80211_key_destroy(key, key->sdata->vif.type ==
6171 ++ NL80211_IFTYPE_STATION);
6172 + }
6173 +
6174 + mutex_unlock(&local->key_mtx);
6175 +diff --git a/net/rds/bind.c b/net/rds/bind.c
6176 +index 5aa3a64aa4f0..48257d3a4201 100644
6177 +--- a/net/rds/bind.c
6178 ++++ b/net/rds/bind.c
6179 +@@ -60,11 +60,13 @@ struct rds_sock *rds_find_bound(__be32 addr, __be16 port)
6180 + u64 key = ((u64)addr << 32) | port;
6181 + struct rds_sock *rs;
6182 +
6183 +- rs = rhashtable_lookup_fast(&bind_hash_table, &key, ht_parms);
6184 ++ rcu_read_lock();
6185 ++ rs = rhashtable_lookup(&bind_hash_table, &key, ht_parms);
6186 + if (rs && !sock_flag(rds_rs_to_sk(rs), SOCK_DEAD))
6187 + rds_sock_addref(rs);
6188 + else
6189 + rs = NULL;
6190 ++ rcu_read_unlock();
6191 +
6192 + rdsdebug("returning rs %p for %pI4:%u\n", rs, &addr,
6193 + ntohs(port));
6194 +@@ -157,6 +159,7 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
6195 + goto out;
6196 + }
6197 +
6198 ++ sock_set_flag(sk, SOCK_RCU_FREE);
6199 + ret = rds_add_bound(rs, sin->sin_addr.s_addr, &sin->sin_port);
6200 + if (ret)
6201 + goto out;
6202 +diff --git a/net/tipc/socket.c b/net/tipc/socket.c
6203 +index 0a5fa347135e..ac8ca238c541 100644
6204 +--- a/net/tipc/socket.c
6205 ++++ b/net/tipc/socket.c
6206 +@@ -578,6 +578,7 @@ static int tipc_release(struct socket *sock)
6207 + sk_stop_timer(sk, &sk->sk_timer);
6208 + tipc_sk_remove(tsk);
6209 +
6210 ++ sock_orphan(sk);
6211 + /* Reject any messages that accumulated in backlog queue */
6212 + release_sock(sk);
6213 + tipc_dest_list_purge(&tsk->cong_links);
6214 +diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
6215 +index 1f3d9789af30..b3344bbe336b 100644
6216 +--- a/net/tls/tls_sw.c
6217 ++++ b/net/tls/tls_sw.c
6218 +@@ -149,6 +149,9 @@ static int alloc_encrypted_sg(struct sock *sk, int len)
6219 + &ctx->sg_encrypted_num_elem,
6220 + &ctx->sg_encrypted_size, 0);
6221 +
6222 ++ if (rc == -ENOSPC)
6223 ++ ctx->sg_encrypted_num_elem = ARRAY_SIZE(ctx->sg_encrypted_data);
6224 ++
6225 + return rc;
6226 + }
6227 +
6228 +@@ -162,6 +165,9 @@ static int alloc_plaintext_sg(struct sock *sk, int len)
6229 + &ctx->sg_plaintext_num_elem, &ctx->sg_plaintext_size,
6230 + tls_ctx->pending_open_record_frags);
6231 +
6232 ++ if (rc == -ENOSPC)
6233 ++ ctx->sg_plaintext_num_elem = ARRAY_SIZE(ctx->sg_plaintext_data);
6234 ++
6235 + return rc;
6236 + }
6237 +
6238 +@@ -280,7 +286,7 @@ static int zerocopy_from_iter(struct sock *sk, struct iov_iter *from,
6239 + int length, int *pages_used,
6240 + unsigned int *size_used,
6241 + struct scatterlist *to, int to_max_pages,
6242 +- bool charge)
6243 ++ bool charge, bool revert)
6244 + {
6245 + struct page *pages[MAX_SKB_FRAGS];
6246 +
6247 +@@ -331,6 +337,8 @@ static int zerocopy_from_iter(struct sock *sk, struct iov_iter *from,
6248 + out:
6249 + *size_used = size;
6250 + *pages_used = num_elem;
6251 ++ if (revert)
6252 ++ iov_iter_revert(from, size);
6253 +
6254 + return rc;
6255 + }
6256 +@@ -432,7 +440,7 @@ alloc_encrypted:
6257 + &ctx->sg_plaintext_size,
6258 + ctx->sg_plaintext_data,
6259 + ARRAY_SIZE(ctx->sg_plaintext_data),
6260 +- true);
6261 ++ true, false);
6262 + if (ret)
6263 + goto fallback_to_reg_send;
6264 +
6265 +@@ -820,7 +828,7 @@ int tls_sw_recvmsg(struct sock *sk,
6266 + err = zerocopy_from_iter(sk, &msg->msg_iter,
6267 + to_copy, &pages,
6268 + &chunk, &sgin[1],
6269 +- MAX_SKB_FRAGS, false);
6270 ++ MAX_SKB_FRAGS, false, true);
6271 + if (err < 0)
6272 + goto fallback_to_reg_recv;
6273 +
6274 +diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
6275 +index 7c5e8978aeaa..a94983e03a8b 100644
6276 +--- a/net/xfrm/xfrm_policy.c
6277 ++++ b/net/xfrm/xfrm_policy.c
6278 +@@ -1831,7 +1831,10 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
6279 + /* Try to instantiate a bundle */
6280 + err = xfrm_tmpl_resolve(pols, num_pols, fl, xfrm, family);
6281 + if (err <= 0) {
6282 +- if (err != 0 && err != -EAGAIN)
6283 ++ if (err == 0)
6284 ++ return NULL;
6285 ++
6286 ++ if (err != -EAGAIN)
6287 + XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR);
6288 + return ERR_PTR(err);
6289 + }
6290 +diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
6291 +index 86321f06461e..ed303f552f9d 100644
6292 +--- a/scripts/Kbuild.include
6293 ++++ b/scripts/Kbuild.include
6294 +@@ -400,3 +400,6 @@ endif
6295 + endef
6296 + #
6297 + ###############################################################################
6298 ++
6299 ++# delete partially updated (i.e. corrupted) files on error
6300 ++.DELETE_ON_ERROR:
6301 +diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
6302 +index b60524310855..c20e3142b541 100644
6303 +--- a/security/integrity/evm/evm_crypto.c
6304 ++++ b/security/integrity/evm/evm_crypto.c
6305 +@@ -97,7 +97,8 @@ static struct shash_desc *init_desc(char type)
6306 + mutex_lock(&mutex);
6307 + if (*tfm)
6308 + goto out;
6309 +- *tfm = crypto_alloc_shash(algo, 0, CRYPTO_ALG_ASYNC);
6310 ++ *tfm = crypto_alloc_shash(algo, 0,
6311 ++ CRYPTO_ALG_ASYNC | CRYPTO_NOLOAD);
6312 + if (IS_ERR(*tfm)) {
6313 + rc = PTR_ERR(*tfm);
6314 + pr_err("Can not allocate %s (reason: %ld)\n", algo, rc);
6315 +diff --git a/security/security.c b/security/security.c
6316 +index 68f46d849abe..4e572b38937d 100644
6317 +--- a/security/security.c
6318 ++++ b/security/security.c
6319 +@@ -118,6 +118,8 @@ static int lsm_append(char *new, char **result)
6320 +
6321 + if (*result == NULL) {
6322 + *result = kstrdup(new, GFP_KERNEL);
6323 ++ if (*result == NULL)
6324 ++ return -ENOMEM;
6325 + } else {
6326 + /* Check if it is the last registered name */
6327 + if (match_last_lsm(*result, new))
6328 +diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
6329 +index 19de675d4504..8b6cd5a79bfa 100644
6330 +--- a/security/smack/smack_lsm.c
6331 ++++ b/security/smack/smack_lsm.c
6332 +@@ -3924,15 +3924,19 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
6333 + struct smack_known *skp = NULL;
6334 + int rc = 0;
6335 + struct smk_audit_info ad;
6336 ++ u16 family = sk->sk_family;
6337 + #ifdef CONFIG_AUDIT
6338 + struct lsm_network_audit net;
6339 + #endif
6340 + #if IS_ENABLED(CONFIG_IPV6)
6341 + struct sockaddr_in6 sadd;
6342 + int proto;
6343 ++
6344 ++ if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
6345 ++ family = PF_INET;
6346 + #endif /* CONFIG_IPV6 */
6347 +
6348 +- switch (sk->sk_family) {
6349 ++ switch (family) {
6350 + case PF_INET:
6351 + #ifdef CONFIG_SECURITY_SMACK_NETFILTER
6352 + /*
6353 +@@ -3950,7 +3954,7 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
6354 + */
6355 + netlbl_secattr_init(&secattr);
6356 +
6357 +- rc = netlbl_skbuff_getattr(skb, sk->sk_family, &secattr);
6358 ++ rc = netlbl_skbuff_getattr(skb, family, &secattr);
6359 + if (rc == 0)
6360 + skp = smack_from_secattr(&secattr, ssp);
6361 + else
6362 +@@ -3963,7 +3967,7 @@ access_check:
6363 + #endif
6364 + #ifdef CONFIG_AUDIT
6365 + smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
6366 +- ad.a.u.net->family = sk->sk_family;
6367 ++ ad.a.u.net->family = family;
6368 + ad.a.u.net->netif = skb->skb_iif;
6369 + ipv4_skb_to_auditdata(skb, &ad.a, NULL);
6370 + #endif
6371 +@@ -3977,7 +3981,7 @@ access_check:
6372 + rc = smk_bu_note("IPv4 delivery", skp, ssp->smk_in,
6373 + MAY_WRITE, rc);
6374 + if (rc != 0)
6375 +- netlbl_skbuff_err(skb, sk->sk_family, rc, 0);
6376 ++ netlbl_skbuff_err(skb, family, rc, 0);
6377 + break;
6378 + #if IS_ENABLED(CONFIG_IPV6)
6379 + case PF_INET6:
6380 +@@ -3993,7 +3997,7 @@ access_check:
6381 + skp = smack_net_ambient;
6382 + #ifdef CONFIG_AUDIT
6383 + smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
6384 +- ad.a.u.net->family = sk->sk_family;
6385 ++ ad.a.u.net->family = family;
6386 + ad.a.u.net->netif = skb->skb_iif;
6387 + ipv6_skb_to_auditdata(skb, &ad.a, NULL);
6388 + #endif /* CONFIG_AUDIT */
6389 +diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
6390 +index 44b5ae833082..a4aac948ea49 100644
6391 +--- a/sound/core/pcm_lib.c
6392 ++++ b/sound/core/pcm_lib.c
6393 +@@ -626,27 +626,33 @@ EXPORT_SYMBOL(snd_interval_refine);
6394 +
6395 + static int snd_interval_refine_first(struct snd_interval *i)
6396 + {
6397 ++ const unsigned int last_max = i->max;
6398 ++
6399 + if (snd_BUG_ON(snd_interval_empty(i)))
6400 + return -EINVAL;
6401 + if (snd_interval_single(i))
6402 + return 0;
6403 + i->max = i->min;
6404 +- i->openmax = i->openmin;
6405 +- if (i->openmax)
6406 ++ if (i->openmin)
6407 + i->max++;
6408 ++ /* only exclude max value if also excluded before refine */
6409 ++ i->openmax = (i->openmax && i->max >= last_max);
6410 + return 1;
6411 + }
6412 +
6413 + static int snd_interval_refine_last(struct snd_interval *i)
6414 + {
6415 ++ const unsigned int last_min = i->min;
6416 ++
6417 + if (snd_BUG_ON(snd_interval_empty(i)))
6418 + return -EINVAL;
6419 + if (snd_interval_single(i))
6420 + return 0;
6421 + i->min = i->max;
6422 +- i->openmin = i->openmax;
6423 +- if (i->openmin)
6424 ++ if (i->openmax)
6425 + i->min--;
6426 ++ /* only exclude min value if also excluded before refine */
6427 ++ i->openmin = (i->openmin && i->min <= last_min);
6428 + return 1;
6429 + }
6430 +
6431 +diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c
6432 +index 6c584d9b6c42..a19f802b2071 100644
6433 +--- a/sound/isa/msnd/msnd_pinnacle.c
6434 ++++ b/sound/isa/msnd/msnd_pinnacle.c
6435 +@@ -82,10 +82,10 @@
6436 +
6437 + static void set_default_audio_parameters(struct snd_msnd *chip)
6438 + {
6439 +- chip->play_sample_size = DEFSAMPLESIZE;
6440 ++ chip->play_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
6441 + chip->play_sample_rate = DEFSAMPLERATE;
6442 + chip->play_channels = DEFCHANNELS;
6443 +- chip->capture_sample_size = DEFSAMPLESIZE;
6444 ++ chip->capture_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
6445 + chip->capture_sample_rate = DEFSAMPLERATE;
6446 + chip->capture_channels = DEFCHANNELS;
6447 + }
6448 +diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
6449 +index 38e4a8515709..d00734d31e04 100644
6450 +--- a/sound/soc/codecs/hdmi-codec.c
6451 ++++ b/sound/soc/codecs/hdmi-codec.c
6452 +@@ -291,10 +291,6 @@ static const struct snd_soc_dapm_widget hdmi_widgets[] = {
6453 + SND_SOC_DAPM_OUTPUT("TX"),
6454 + };
6455 +
6456 +-static const struct snd_soc_dapm_route hdmi_routes[] = {
6457 +- { "TX", NULL, "Playback" },
6458 +-};
6459 +-
6460 + enum {
6461 + DAI_ID_I2S = 0,
6462 + DAI_ID_SPDIF,
6463 +@@ -689,9 +685,23 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
6464 + return snd_ctl_add(rtd->card->snd_card, kctl);
6465 + }
6466 +
6467 ++static int hdmi_dai_probe(struct snd_soc_dai *dai)
6468 ++{
6469 ++ struct snd_soc_dapm_context *dapm;
6470 ++ struct snd_soc_dapm_route route = {
6471 ++ .sink = "TX",
6472 ++ .source = dai->driver->playback.stream_name,
6473 ++ };
6474 ++
6475 ++ dapm = snd_soc_component_get_dapm(dai->component);
6476 ++
6477 ++ return snd_soc_dapm_add_routes(dapm, &route, 1);
6478 ++}
6479 ++
6480 + static const struct snd_soc_dai_driver hdmi_i2s_dai = {
6481 + .name = "i2s-hifi",
6482 + .id = DAI_ID_I2S,
6483 ++ .probe = hdmi_dai_probe,
6484 + .playback = {
6485 + .stream_name = "I2S Playback",
6486 + .channels_min = 2,
6487 +@@ -707,6 +717,7 @@ static const struct snd_soc_dai_driver hdmi_i2s_dai = {
6488 + static const struct snd_soc_dai_driver hdmi_spdif_dai = {
6489 + .name = "spdif-hifi",
6490 + .id = DAI_ID_SPDIF,
6491 ++ .probe = hdmi_dai_probe,
6492 + .playback = {
6493 + .stream_name = "SPDIF Playback",
6494 + .channels_min = 2,
6495 +@@ -733,8 +744,6 @@ static int hdmi_of_xlate_dai_id(struct snd_soc_component *component,
6496 + static const struct snd_soc_component_driver hdmi_driver = {
6497 + .dapm_widgets = hdmi_widgets,
6498 + .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets),
6499 +- .dapm_routes = hdmi_routes,
6500 +- .num_dapm_routes = ARRAY_SIZE(hdmi_routes),
6501 + .of_xlate_dai_id = hdmi_of_xlate_dai_id,
6502 + .idle_bias_on = 1,
6503 + .use_pmdown_time = 1,
6504 +diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
6505 +index 1570b91bf018..dca82dd6e3bf 100644
6506 +--- a/sound/soc/codecs/rt5514.c
6507 ++++ b/sound/soc/codecs/rt5514.c
6508 +@@ -64,8 +64,8 @@ static const struct reg_sequence rt5514_patch[] = {
6509 + {RT5514_ANA_CTRL_LDO10, 0x00028604},
6510 + {RT5514_ANA_CTRL_ADCFED, 0x00000800},
6511 + {RT5514_ASRC_IN_CTRL1, 0x00000003},
6512 +- {RT5514_DOWNFILTER0_CTRL3, 0x10000362},
6513 +- {RT5514_DOWNFILTER1_CTRL3, 0x10000362},
6514 ++ {RT5514_DOWNFILTER0_CTRL3, 0x10000352},
6515 ++ {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
6516 + };
6517 +
6518 + static const struct reg_default rt5514_reg[] = {
6519 +@@ -92,10 +92,10 @@ static const struct reg_default rt5514_reg[] = {
6520 + {RT5514_ASRC_IN_CTRL1, 0x00000003},
6521 + {RT5514_DOWNFILTER0_CTRL1, 0x00020c2f},
6522 + {RT5514_DOWNFILTER0_CTRL2, 0x00020c2f},
6523 +- {RT5514_DOWNFILTER0_CTRL3, 0x10000362},
6524 ++ {RT5514_DOWNFILTER0_CTRL3, 0x10000352},
6525 + {RT5514_DOWNFILTER1_CTRL1, 0x00020c2f},
6526 + {RT5514_DOWNFILTER1_CTRL2, 0x00020c2f},
6527 +- {RT5514_DOWNFILTER1_CTRL3, 0x10000362},
6528 ++ {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
6529 + {RT5514_ANA_CTRL_LDO10, 0x00028604},
6530 + {RT5514_ANA_CTRL_LDO18_16, 0x02000345},
6531 + {RT5514_ANA_CTRL_ADC12, 0x0000a2a8},
6532 +diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
6533 +index 6b5669f3e85d..39d2c67cd064 100644
6534 +--- a/sound/soc/codecs/rt5651.c
6535 ++++ b/sound/soc/codecs/rt5651.c
6536 +@@ -1696,6 +1696,13 @@ static irqreturn_t rt5651_irq(int irq, void *data)
6537 + return IRQ_HANDLED;
6538 + }
6539 +
6540 ++static void rt5651_cancel_work(void *data)
6541 ++{
6542 ++ struct rt5651_priv *rt5651 = data;
6543 ++
6544 ++ cancel_work_sync(&rt5651->jack_detect_work);
6545 ++}
6546 ++
6547 + static int rt5651_set_jack(struct snd_soc_component *component,
6548 + struct snd_soc_jack *hp_jack, void *data)
6549 + {
6550 +@@ -2036,6 +2043,11 @@ static int rt5651_i2c_probe(struct i2c_client *i2c,
6551 +
6552 + INIT_WORK(&rt5651->jack_detect_work, rt5651_jack_detect_work);
6553 +
6554 ++ /* Make sure work is stopped on probe-error / remove */
6555 ++ ret = devm_add_action_or_reset(&i2c->dev, rt5651_cancel_work, rt5651);
6556 ++ if (ret)
6557 ++ return ret;
6558 ++
6559 + ret = devm_snd_soc_register_component(&i2c->dev,
6560 + &soc_component_dev_rt5651,
6561 + rt5651_dai, ARRAY_SIZE(rt5651_dai));
6562 +@@ -2043,15 +2055,6 @@ static int rt5651_i2c_probe(struct i2c_client *i2c,
6563 + return ret;
6564 + }
6565 +
6566 +-static int rt5651_i2c_remove(struct i2c_client *i2c)
6567 +-{
6568 +- struct rt5651_priv *rt5651 = i2c_get_clientdata(i2c);
6569 +-
6570 +- cancel_work_sync(&rt5651->jack_detect_work);
6571 +-
6572 +- return 0;
6573 +-}
6574 +-
6575 + static struct i2c_driver rt5651_i2c_driver = {
6576 + .driver = {
6577 + .name = "rt5651",
6578 +@@ -2059,7 +2062,6 @@ static struct i2c_driver rt5651_i2c_driver = {
6579 + .of_match_table = of_match_ptr(rt5651_of_match),
6580 + },
6581 + .probe = rt5651_i2c_probe,
6582 +- .remove = rt5651_i2c_remove,
6583 + .id_table = rt5651_i2c_id,
6584 + };
6585 + module_i2c_driver(rt5651_i2c_driver);
6586 +diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c
6587 +index 5002dd05bf27..f8298be7038f 100644
6588 +--- a/sound/soc/qcom/qdsp6/q6afe-dai.c
6589 ++++ b/sound/soc/qcom/qdsp6/q6afe-dai.c
6590 +@@ -1180,7 +1180,7 @@ static void of_q6afe_parse_dai_data(struct device *dev,
6591 + int id, i, num_lines;
6592 +
6593 + ret = of_property_read_u32(node, "reg", &id);
6594 +- if (ret || id > AFE_PORT_MAX) {
6595 ++ if (ret || id < 0 || id >= AFE_PORT_MAX) {
6596 + dev_err(dev, "valid dai id not found:%d\n", ret);
6597 + continue;
6598 + }
6599 +diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
6600 +index 8aac48f9c322..08aa78007020 100644
6601 +--- a/sound/usb/quirks-table.h
6602 ++++ b/sound/usb/quirks-table.h
6603 +@@ -2875,7 +2875,8 @@ YAMAHA_DEVICE(0x7010, "UB99"),
6604 + */
6605 +
6606 + #define AU0828_DEVICE(vid, pid, vname, pname) { \
6607 +- USB_DEVICE_VENDOR_SPEC(vid, pid), \
6608 ++ .idVendor = vid, \
6609 ++ .idProduct = pid, \
6610 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
6611 + USB_DEVICE_ID_MATCH_INT_CLASS | \
6612 + USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
6613 +diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
6614 +index 02b6cc02767f..dde87d64bc32 100644
6615 +--- a/sound/usb/quirks.c
6616 ++++ b/sound/usb/quirks.c
6617 +@@ -1373,6 +1373,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6618 + return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6619 + break;
6620 +
6621 ++ case USB_ID(0x16d0, 0x09dd): /* Encore mDSD */
6622 + case USB_ID(0x0d8c, 0x0316): /* Hegel HD12 DSD */
6623 + case USB_ID(0x16b0, 0x06b2): /* NuPrime DAC-10 */
6624 + case USB_ID(0x16d0, 0x0733): /* Furutech ADL Stratos */
6625 +@@ -1443,6 +1444,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
6626 + */
6627 + switch (USB_ID_VENDOR(chip->usb_id)) {
6628 + case 0x20b1: /* XMOS based devices */
6629 ++ case 0x152a: /* Thesycon devices */
6630 + case 0x25ce: /* Mytek devices */
6631 + if (fp->dsd_raw)
6632 + return SNDRV_PCM_FMTBIT_DSD_U32_BE;
6633 +diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
6634 +index dbf6e8bd98ba..bbb2a8ef367c 100644
6635 +--- a/tools/hv/hv_kvp_daemon.c
6636 ++++ b/tools/hv/hv_kvp_daemon.c
6637 +@@ -286,7 +286,7 @@ static int kvp_key_delete(int pool, const __u8 *key, int key_size)
6638 + * Found a match; just move the remaining
6639 + * entries up.
6640 + */
6641 +- if (i == num_records) {
6642 ++ if (i == (num_records - 1)) {
6643 + kvp_file_info[pool].num_records--;
6644 + kvp_update_file(pool);
6645 + return 0;
6646 +diff --git a/tools/perf/arch/powerpc/util/skip-callchain-idx.c b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
6647 +index ef5d59a5742e..7c6eeb4633fe 100644
6648 +--- a/tools/perf/arch/powerpc/util/skip-callchain-idx.c
6649 ++++ b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
6650 +@@ -58,9 +58,13 @@ static int check_return_reg(int ra_regno, Dwarf_Frame *frame)
6651 + }
6652 +
6653 + /*
6654 +- * Check if return address is on the stack.
6655 ++ * Check if return address is on the stack. If return address
6656 ++ * is in a register (typically R0), it is yet to be saved on
6657 ++ * the stack.
6658 + */
6659 +- if (nops != 0 || ops != NULL)
6660 ++ if ((nops != 0 || ops != NULL) &&
6661 ++ !(nops == 1 && ops[0].atom == DW_OP_regx &&
6662 ++ ops[0].number2 == 0 && ops[0].offset == 0))
6663 + return 0;
6664 +
6665 + /*
6666 +@@ -246,7 +250,7 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain)
6667 + if (!chain || chain->nr < 3)
6668 + return skip_slot;
6669 +
6670 +- ip = chain->ips[2];
6671 ++ ip = chain->ips[1];
6672 +
6673 + thread__find_symbol(thread, PERF_RECORD_MISC_USER, ip, &al);
6674 +
6675 +diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
6676 +index dd850a26d579..4f5de8245b32 100644
6677 +--- a/tools/perf/tests/builtin-test.c
6678 ++++ b/tools/perf/tests/builtin-test.c
6679 +@@ -599,7 +599,7 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
6680 + for (subi = 0; subi < subn; subi++) {
6681 + pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
6682 + t->subtest.get_desc(subi));
6683 +- err = test_and_print(t, skip, subi);
6684 ++ err = test_and_print(t, skip, subi + 1);
6685 + if (err != TEST_OK && t->subtest.skip_if_fail)
6686 + skip = true;
6687 + }
6688 +diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
6689 +index 94e513e62b34..3013ac8f83d0 100755
6690 +--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
6691 ++++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
6692 +@@ -13,11 +13,24 @@
6693 + libc=$(grep -w libc /proc/self/maps | head -1 | sed -r 's/.*[[:space:]](\/.*)/\1/g')
6694 + nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254
6695 +
6696 ++event_pattern='probe_libc:inet_pton(\_[[:digit:]]+)?'
6697 ++
6698 ++add_libc_inet_pton_event() {
6699 ++
6700 ++ event_name=$(perf probe -f -x $libc -a inet_pton 2>&1 | tail -n +2 | head -n -5 | \
6701 ++ grep -P -o "$event_pattern(?=[[:space:]]\(on inet_pton in $libc\))")
6702 ++
6703 ++ if [ $? -ne 0 -o -z "$event_name" ] ; then
6704 ++ printf "FAIL: could not add event\n"
6705 ++ return 1
6706 ++ fi
6707 ++}
6708 ++
6709 + trace_libc_inet_pton_backtrace() {
6710 +
6711 + expected=`mktemp -u /tmp/expected.XXX`
6712 +
6713 +- echo "ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\)" > $expected
6714 ++ echo "ping[][0-9 \.:]+$event_name: \([[:xdigit:]]+\)" > $expected
6715 + echo ".*inet_pton\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected
6716 + case "$(uname -m)" in
6717 + s390x)
6718 +@@ -26,6 +39,12 @@ trace_libc_inet_pton_backtrace() {
6719 + echo "(__GI_)?getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected
6720 + echo "main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected
6721 + ;;
6722 ++ ppc64|ppc64le)
6723 ++ eventattr='max-stack=4'
6724 ++ echo "gaih_inet.*\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
6725 ++ echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
6726 ++ echo ".*\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected
6727 ++ ;;
6728 + *)
6729 + eventattr='max-stack=3'
6730 + echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
6731 +@@ -35,7 +54,7 @@ trace_libc_inet_pton_backtrace() {
6732 +
6733 + perf_data=`mktemp -u /tmp/perf.data.XXX`
6734 + perf_script=`mktemp -u /tmp/perf.script.XXX`
6735 +- perf record -e probe_libc:inet_pton/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > /dev/null 2>&1
6736 ++ perf record -e $event_name/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > /dev/null 2>&1
6737 + perf script -i $perf_data > $perf_script
6738 +
6739 + exec 3<$perf_script
6740 +@@ -46,7 +65,7 @@ trace_libc_inet_pton_backtrace() {
6741 + echo "$line" | egrep -q "$pattern"
6742 + if [ $? -ne 0 ] ; then
6743 + printf "FAIL: expected backtrace entry \"%s\" got \"%s\"\n" "$pattern" "$line"
6744 +- exit 1
6745 ++ return 1
6746 + fi
6747 + done
6748 +
6749 +@@ -56,13 +75,20 @@ trace_libc_inet_pton_backtrace() {
6750 + # even if the perf script output does not match.
6751 + }
6752 +
6753 ++delete_libc_inet_pton_event() {
6754 ++
6755 ++ if [ -n "$event_name" ] ; then
6756 ++ perf probe -q -d $event_name
6757 ++ fi
6758 ++}
6759 ++
6760 + # Check for IPv6 interface existence
6761 + ip a sh lo | fgrep -q inet6 || exit 2
6762 +
6763 + skip_if_no_perf_probe && \
6764 +-perf probe -q $libc inet_pton && \
6765 ++add_libc_inet_pton_event && \
6766 + trace_libc_inet_pton_backtrace
6767 + err=$?
6768 + rm -f ${perf_data} ${perf_script} ${expected}
6769 +-perf probe -q -d probe_libc:inet_pton
6770 ++delete_libc_inet_pton_event
6771 + exit $err
6772 +diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
6773 +index 7798a2cc8a86..31279a7bd919 100644
6774 +--- a/tools/perf/util/comm.c
6775 ++++ b/tools/perf/util/comm.c
6776 +@@ -20,9 +20,10 @@ static struct rw_semaphore comm_str_lock = {.lock = PTHREAD_RWLOCK_INITIALIZER,}
6777 +
6778 + static struct comm_str *comm_str__get(struct comm_str *cs)
6779 + {
6780 +- if (cs)
6781 +- refcount_inc(&cs->refcnt);
6782 +- return cs;
6783 ++ if (cs && refcount_inc_not_zero(&cs->refcnt))
6784 ++ return cs;
6785 ++
6786 ++ return NULL;
6787 + }
6788 +
6789 + static void comm_str__put(struct comm_str *cs)
6790 +@@ -67,9 +68,14 @@ struct comm_str *__comm_str__findnew(const char *str, struct rb_root *root)
6791 + parent = *p;
6792 + iter = rb_entry(parent, struct comm_str, rb_node);
6793 +
6794 ++ /*
6795 ++ * If we race with comm_str__put, iter->refcnt is 0
6796 ++ * and it will be removed within comm_str__put call
6797 ++ * shortly, ignore it in this search.
6798 ++ */
6799 + cmp = strcmp(str, iter->str);
6800 +- if (!cmp)
6801 +- return comm_str__get(iter);
6802 ++ if (!cmp && comm_str__get(iter))
6803 ++ return iter;
6804 +
6805 + if (cmp < 0)
6806 + p = &(*p)->rb_left;
6807 +diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
6808 +index 653ff65aa2c3..5af58aac91ad 100644
6809 +--- a/tools/perf/util/header.c
6810 ++++ b/tools/perf/util/header.c
6811 +@@ -2587,7 +2587,7 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
6812 + FEAT_OPR(NUMA_TOPOLOGY, numa_topology, true),
6813 + FEAT_OPN(BRANCH_STACK, branch_stack, false),
6814 + FEAT_OPR(PMU_MAPPINGS, pmu_mappings, false),
6815 +- FEAT_OPN(GROUP_DESC, group_desc, false),
6816 ++ FEAT_OPR(GROUP_DESC, group_desc, false),
6817 + FEAT_OPN(AUXTRACE, auxtrace, false),
6818 + FEAT_OPN(STAT, stat, false),
6819 + FEAT_OPN(CACHE, cache, true),
6820 +diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
6821 +index e7b4a8b513f2..22dbb6612b41 100644
6822 +--- a/tools/perf/util/machine.c
6823 ++++ b/tools/perf/util/machine.c
6824 +@@ -2272,6 +2272,7 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
6825 + {
6826 + struct callchain_cursor *cursor = arg;
6827 + const char *srcline = NULL;
6828 ++ u64 addr;
6829 +
6830 + if (symbol_conf.hide_unresolved && entry->sym == NULL)
6831 + return 0;
6832 +@@ -2279,7 +2280,13 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
6833 + if (append_inlines(cursor, entry->map, entry->sym, entry->ip) == 0)
6834 + return 0;
6835 +
6836 +- srcline = callchain_srcline(entry->map, entry->sym, entry->ip);
6837 ++ /*
6838 ++ * Convert entry->ip from a virtual address to an offset in
6839 ++ * its corresponding binary.
6840 ++ */
6841 ++ addr = map__map_ip(entry->map, entry->ip);
6842 ++
6843 ++ srcline = callchain_srcline(entry->map, entry->sym, addr);
6844 + return callchain_cursor_append(cursor, entry->ip,
6845 + entry->map, entry->sym,
6846 + false, NULL, 0, 0, 0, srcline);
6847 +diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
6848 +index 89ac5b5dc218..f5431092c6d1 100644
6849 +--- a/tools/perf/util/map.c
6850 ++++ b/tools/perf/util/map.c
6851 +@@ -590,6 +590,13 @@ struct symbol *map_groups__find_symbol(struct map_groups *mg,
6852 + return NULL;
6853 + }
6854 +
6855 ++static bool map__contains_symbol(struct map *map, struct symbol *sym)
6856 ++{
6857 ++ u64 ip = map->unmap_ip(map, sym->start);
6858 ++
6859 ++ return ip >= map->start && ip < map->end;
6860 ++}
6861 ++
6862 + struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name,
6863 + struct map **mapp)
6864 + {
6865 +@@ -605,6 +612,10 @@ struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name,
6866 +
6867 + if (sym == NULL)
6868 + continue;
6869 ++ if (!map__contains_symbol(pos, sym)) {
6870 ++ sym = NULL;
6871 ++ continue;
6872 ++ }
6873 + if (mapp != NULL)
6874 + *mapp = pos;
6875 + goto out;
6876 +diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
6877 +index 538db4e5d1e6..6f318b15950e 100644
6878 +--- a/tools/perf/util/unwind-libdw.c
6879 ++++ b/tools/perf/util/unwind-libdw.c
6880 +@@ -77,7 +77,7 @@ static int entry(u64 ip, struct unwind_info *ui)
6881 + if (__report_module(&al, ip, ui))
6882 + return -1;
6883 +
6884 +- e->ip = al.addr;
6885 ++ e->ip = ip;
6886 + e->map = al.map;
6887 + e->sym = al.sym;
6888 +
6889 +diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c
6890 +index 6a11bc7e6b27..79f521a552cf 100644
6891 +--- a/tools/perf/util/unwind-libunwind-local.c
6892 ++++ b/tools/perf/util/unwind-libunwind-local.c
6893 +@@ -575,7 +575,7 @@ static int entry(u64 ip, struct thread *thread,
6894 + struct addr_location al;
6895 +
6896 + e.sym = thread__find_symbol(thread, PERF_RECORD_MISC_USER, ip, &al);
6897 +- e.ip = al.addr;
6898 ++ e.ip = ip;
6899 + e.map = al.map;
6900 +
6901 + pr_debug("unwind: %s:ip = 0x%" PRIx64 " (0x%" PRIx64 ")\n",
6902 +diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c
6903 +index e2926f72a821..94c3bdf82ff7 100644
6904 +--- a/tools/testing/nvdimm/test/nfit.c
6905 ++++ b/tools/testing/nvdimm/test/nfit.c
6906 +@@ -1308,7 +1308,8 @@ static void smart_init(struct nfit_test *t)
6907 + | ND_INTEL_SMART_ALARM_VALID
6908 + | ND_INTEL_SMART_USED_VALID
6909 + | ND_INTEL_SMART_SHUTDOWN_VALID
6910 +- | ND_INTEL_SMART_MTEMP_VALID,
6911 ++ | ND_INTEL_SMART_MTEMP_VALID
6912 ++ | ND_INTEL_SMART_CTEMP_VALID,
6913 + .health = ND_INTEL_SMART_NON_CRITICAL_HEALTH,
6914 + .media_temperature = 23 * 16,
6915 + .ctrl_temperature = 25 * 16,
6916 +diff --git a/tools/testing/selftests/android/ion/ionapp_export.c b/tools/testing/selftests/android/ion/ionapp_export.c
6917 +index a944e72621a9..b5fa0a2dc968 100644
6918 +--- a/tools/testing/selftests/android/ion/ionapp_export.c
6919 ++++ b/tools/testing/selftests/android/ion/ionapp_export.c
6920 +@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
6921 +
6922 + heap_size = 0;
6923 + flags = 0;
6924 ++ heap_type = ION_HEAP_TYPE_SYSTEM;
6925 +
6926 + while ((opt = getopt(argc, argv, "hi:s:")) != -1) {
6927 + switch (opt) {
6928 +diff --git a/tools/testing/selftests/timers/raw_skew.c b/tools/testing/selftests/timers/raw_skew.c
6929 +index ca6cd146aafe..dcf73c5dab6e 100644
6930 +--- a/tools/testing/selftests/timers/raw_skew.c
6931 ++++ b/tools/testing/selftests/timers/raw_skew.c
6932 +@@ -134,6 +134,11 @@ int main(int argv, char **argc)
6933 + printf(" %lld.%i(act)", ppm/1000, abs((int)(ppm%1000)));
6934 +
6935 + if (llabs(eppm - ppm) > 1000) {
6936 ++ if (tx1.offset || tx2.offset ||
6937 ++ tx1.freq != tx2.freq || tx1.tick != tx2.tick) {
6938 ++ printf(" [SKIP]\n");
6939 ++ return ksft_exit_skip("The clock was adjusted externally. Shutdown NTPd or other time sync daemons\n");
6940 ++ }
6941 + printf(" [FAILED]\n");
6942 + return ksft_exit_fail();
6943 + }
6944 +diff --git a/tools/testing/selftests/vDSO/vdso_test.c b/tools/testing/selftests/vDSO/vdso_test.c
6945 +index 2df26bd0099c..eda53f833d8e 100644
6946 +--- a/tools/testing/selftests/vDSO/vdso_test.c
6947 ++++ b/tools/testing/selftests/vDSO/vdso_test.c
6948 +@@ -15,6 +15,8 @@
6949 + #include <sys/auxv.h>
6950 + #include <sys/time.h>
6951 +
6952 ++#include "../kselftest.h"
6953 ++
6954 + extern void *vdso_sym(const char *version, const char *name);
6955 + extern void vdso_init_from_sysinfo_ehdr(uintptr_t base);
6956 + extern void vdso_init_from_auxv(void *auxv);
6957 +@@ -37,7 +39,7 @@ int main(int argc, char **argv)
6958 + unsigned long sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR);
6959 + if (!sysinfo_ehdr) {
6960 + printf("AT_SYSINFO_EHDR is not present!\n");
6961 +- return 0;
6962 ++ return KSFT_SKIP;
6963 + }
6964 +
6965 + vdso_init_from_sysinfo_ehdr(getauxval(AT_SYSINFO_EHDR));
6966 +@@ -48,7 +50,7 @@ int main(int argc, char **argv)
6967 +
6968 + if (!gtod) {
6969 + printf("Could not find %s\n", name);
6970 +- return 1;
6971 ++ return KSFT_SKIP;
6972 + }
6973 +
6974 + struct timeval tv;
6975 +@@ -59,6 +61,7 @@ int main(int argc, char **argv)
6976 + (long long)tv.tv_sec, (long long)tv.tv_usec);
6977 + } else {
6978 + printf("%s failed\n", name);
6979 ++ return KSFT_FAIL;
6980 + }
6981 +
6982 + return 0;
6983 +diff --git a/virt/kvm/arm/vgic/vgic-init.c b/virt/kvm/arm/vgic/vgic-init.c
6984 +index 2673efce65f3..b71417913741 100644
6985 +--- a/virt/kvm/arm/vgic/vgic-init.c
6986 ++++ b/virt/kvm/arm/vgic/vgic-init.c
6987 +@@ -271,6 +271,10 @@ int vgic_init(struct kvm *kvm)
6988 + if (vgic_initialized(kvm))
6989 + return 0;
6990 +
6991 ++ /* Are we also in the middle of creating a VCPU? */
6992 ++ if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus))
6993 ++ return -EBUSY;
6994 ++
6995 + /* freeze the number of spis */
6996 + if (!dist->nr_spis)
6997 + dist->nr_spis = VGIC_NR_IRQS_LEGACY - VGIC_NR_PRIVATE_IRQS;
6998 +diff --git a/virt/kvm/arm/vgic/vgic-mmio-v2.c b/virt/kvm/arm/vgic/vgic-mmio-v2.c
6999 +index ffc587bf4742..64e571cc02df 100644
7000 +--- a/virt/kvm/arm/vgic/vgic-mmio-v2.c
7001 ++++ b/virt/kvm/arm/vgic/vgic-mmio-v2.c
7002 +@@ -352,6 +352,9 @@ static void vgic_mmio_write_apr(struct kvm_vcpu *vcpu,
7003 +
7004 + if (n > vgic_v3_max_apr_idx(vcpu))
7005 + return;
7006 ++
7007 ++ n = array_index_nospec(n, 4);
7008 ++
7009 + /* GICv3 only uses ICH_AP1Rn for memory mapped (GICv2) guests */
7010 + vgicv3->vgic_ap1r[n] = val;
7011 + }