Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0228-4.9.129-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3229 - (show annotations) (download)
Mon Oct 1 09:59:45 2018 UTC (5 years, 7 months ago) by niro
File size: 100794 byte(s)
-linux-4.9.129
1 diff --git a/Makefile b/Makefile
2 index 1892bdb6a760..3f3c340374c5 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 128
9 +SUBLEVEL = 129
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
14 index c0fb4a698c56..386b93c06a8c 100644
15 --- a/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
16 +++ b/arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
17 @@ -188,6 +188,8 @@
18 regulator-max-microvolt = <2950000>;
19
20 regulator-boot-on;
21 + regulator-system-load = <200000>;
22 + regulator-allow-set-load;
23 };
24
25 l21 {
26 diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c
27 index 06332f626565..3e1430a886b2 100644
28 --- a/arch/arm/mach-exynos/suspend.c
29 +++ b/arch/arm/mach-exynos/suspend.c
30 @@ -252,6 +252,7 @@ static int __init exynos_pmu_irq_init(struct device_node *node,
31 NULL);
32 if (!domain) {
33 iounmap(pmu_base_addr);
34 + pmu_base_addr = NULL;
35 return -ENOMEM;
36 }
37
38 diff --git a/arch/arm/mach-hisi/hotplug.c b/arch/arm/mach-hisi/hotplug.c
39 index a129aae72602..909bb2493781 100644
40 --- a/arch/arm/mach-hisi/hotplug.c
41 +++ b/arch/arm/mach-hisi/hotplug.c
42 @@ -148,13 +148,20 @@ static int hi3xxx_hotplug_init(void)
43 struct device_node *node;
44
45 node = of_find_compatible_node(NULL, NULL, "hisilicon,sysctrl");
46 - if (node) {
47 - ctrl_base = of_iomap(node, 0);
48 - id = HI3620_CTRL;
49 - return 0;
50 + if (!node) {
51 + id = ERROR_CTRL;
52 + return -ENOENT;
53 }
54 - id = ERROR_CTRL;
55 - return -ENOENT;
56 +
57 + ctrl_base = of_iomap(node, 0);
58 + of_node_put(node);
59 + if (!ctrl_base) {
60 + id = ERROR_CTRL;
61 + return -ENOMEM;
62 + }
63 +
64 + id = HI3620_CTRL;
65 + return 0;
66 }
67
68 void hi3xxx_set_cpu(int cpu, bool enable)
69 @@ -173,11 +180,15 @@ static bool hix5hd2_hotplug_init(void)
70 struct device_node *np;
71
72 np = of_find_compatible_node(NULL, NULL, "hisilicon,cpuctrl");
73 - if (np) {
74 - ctrl_base = of_iomap(np, 0);
75 - return true;
76 - }
77 - return false;
78 + if (!np)
79 + return false;
80 +
81 + ctrl_base = of_iomap(np, 0);
82 + of_node_put(np);
83 + if (!ctrl_base)
84 + return false;
85 +
86 + return true;
87 }
88
89 void hix5hd2_set_cpu(int cpu, bool enable)
90 @@ -219,10 +230,10 @@ void hip01_set_cpu(int cpu, bool enable)
91
92 if (!ctrl_base) {
93 np = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
94 - if (np)
95 - ctrl_base = of_iomap(np, 0);
96 - else
97 - BUG();
98 + BUG_ON(!np);
99 + ctrl_base = of_iomap(np, 0);
100 + of_node_put(np);
101 + BUG_ON(!ctrl_base);
102 }
103
104 if (enable) {
105 diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
106 index bb062b547110..601be6127628 100644
107 --- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
108 +++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
109 @@ -170,7 +170,7 @@
110 led@6 {
111 label = "apq8016-sbc:blue:bt";
112 gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
113 - linux,default-trigger = "bt";
114 + linux,default-trigger = "bluetooth-power";
115 default-state = "off";
116 };
117 };
118 diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
119 index f206dafbb0a3..26a058d58d37 100644
120 --- a/arch/mips/ath79/setup.c
121 +++ b/arch/mips/ath79/setup.c
122 @@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYPE_LEN];
123
124 static void ath79_restart(char *command)
125 {
126 + local_irq_disable();
127 ath79_device_reset_set(AR71XX_RESET_FULL_CHIP);
128 for (;;)
129 if (cpu_wait)
130 diff --git a/arch/mips/include/asm/mach-ath79/ath79.h b/arch/mips/include/asm/mach-ath79/ath79.h
131 index 441faa92c3cd..6e6c0fead776 100644
132 --- a/arch/mips/include/asm/mach-ath79/ath79.h
133 +++ b/arch/mips/include/asm/mach-ath79/ath79.h
134 @@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned reg)
135 static inline void ath79_reset_wr(unsigned reg, u32 val)
136 {
137 __raw_writel(val, ath79_reset_base + reg);
138 + (void) __raw_readl(ath79_reset_base + reg); /* flush */
139 }
140
141 static inline u32 ath79_reset_rr(unsigned reg)
142 diff --git a/arch/mips/jz4740/Platform b/arch/mips/jz4740/Platform
143 index 28448d358c10..a2a5a85ea1f9 100644
144 --- a/arch/mips/jz4740/Platform
145 +++ b/arch/mips/jz4740/Platform
146 @@ -1,4 +1,4 @@
147 platform-$(CONFIG_MACH_INGENIC) += jz4740/
148 cflags-$(CONFIG_MACH_INGENIC) += -I$(srctree)/arch/mips/include/asm/mach-jz4740
149 load-$(CONFIG_MACH_INGENIC) += 0xffffffff80010000
150 -zload-$(CONFIG_MACH_INGENIC) += 0xffffffff80600000
151 +zload-$(CONFIG_MACH_INGENIC) += 0xffffffff81000000
152 diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
153 index f9dbfb14af33..e88344e3d508 100644
154 --- a/arch/mips/kernel/vdso.c
155 +++ b/arch/mips/kernel/vdso.c
156 @@ -14,12 +14,14 @@
157 #include <linux/init.h>
158 #include <linux/ioport.h>
159 #include <linux/irqchip/mips-gic.h>
160 +#include <linux/kernel.h>
161 #include <linux/mm.h>
162 #include <linux/sched.h>
163 #include <linux/slab.h>
164 #include <linux/timekeeper_internal.h>
165
166 #include <asm/abi.h>
167 +#include <asm/page.h>
168 #include <asm/vdso.h>
169
170 /* Kernel-provided data used by the VDSO. */
171 @@ -129,12 +131,30 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
172 vvar_size = gic_size + PAGE_SIZE;
173 size = vvar_size + image->size;
174
175 + /*
176 + * Find a region that's large enough for us to perform the
177 + * colour-matching alignment below.
178 + */
179 + if (cpu_has_dc_aliases)
180 + size += shm_align_mask + 1;
181 +
182 base = get_unmapped_area(NULL, 0, size, 0, 0);
183 if (IS_ERR_VALUE(base)) {
184 ret = base;
185 goto out;
186 }
187
188 + /*
189 + * If we suffer from dcache aliasing, ensure that the VDSO data page
190 + * mapping is coloured the same as the kernel's mapping of that memory.
191 + * This ensures that when the kernel updates the VDSO data userland
192 + * will observe it without requiring cache invalidations.
193 + */
194 + if (cpu_has_dc_aliases) {
195 + base = __ALIGN_MASK(base, shm_align_mask);
196 + base += ((unsigned long)&vdso_data - gic_size) & shm_align_mask;
197 + }
198 +
199 data_addr = base + gic_size;
200 vdso_addr = data_addr + PAGE_SIZE;
201
202 diff --git a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
203 index f7c905e50dc4..92dc6bafc127 100644
204 --- a/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
205 +++ b/arch/mips/loongson64/common/cs5536/cs5536_ohci.c
206 @@ -138,7 +138,7 @@ u32 pci_ohci_read_reg(int reg)
207 break;
208 case PCI_OHCI_INT_REG:
209 _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
210 - if ((lo & 0x00000f00) == CS5536_USB_INTR)
211 + if (((lo >> PIC_YSEL_LOW_USB_SHIFT) & 0xf) == CS5536_USB_INTR)
212 conf_data = 1;
213 break;
214 default:
215 diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
216 index 6c9a65b52e63..7fb61ebc99a2 100644
217 --- a/arch/powerpc/platforms/powernv/opal.c
218 +++ b/arch/powerpc/platforms/powernv/opal.c
219 @@ -369,7 +369,7 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
220 /* Closed or other error drop */
221 if (rc != OPAL_SUCCESS && rc != OPAL_BUSY &&
222 rc != OPAL_BUSY_EVENT) {
223 - written = total_len;
224 + written += total_len;
225 break;
226 }
227 if (rc == OPAL_SUCCESS) {
228 diff --git a/crypto/api.c b/crypto/api.c
229 index bbc147cb5dec..abf53e67e3d8 100644
230 --- a/crypto/api.c
231 +++ b/crypto/api.c
232 @@ -215,7 +215,7 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
233 type &= mask;
234
235 alg = crypto_alg_lookup(name, type, mask);
236 - if (!alg) {
237 + if (!alg && !(mask & CRYPTO_NOLOAD)) {
238 request_module("crypto-%s", name);
239
240 if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask &
241 diff --git a/drivers/base/core.c b/drivers/base/core.c
242 index a0ed957d738f..f43caad30e1e 100644
243 --- a/drivers/base/core.c
244 +++ b/drivers/base/core.c
245 @@ -2072,6 +2072,9 @@ void device_shutdown(void)
246 {
247 struct device *dev, *parent;
248
249 + wait_for_device_probe();
250 + device_block_probing();
251 +
252 spin_lock(&devices_kset->list_lock);
253 /*
254 * Walk the devices list backward, shutting down each in turn.
255 diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c
256 index a5d402de5584..20724abd38bd 100644
257 --- a/drivers/clk/clk-fixed-factor.c
258 +++ b/drivers/clk/clk-fixed-factor.c
259 @@ -177,8 +177,15 @@ static struct clk *_of_fixed_factor_clk_setup(struct device_node *node)
260
261 clk = clk_register_fixed_factor(NULL, clk_name, parent_name, flags,
262 mult, div);
263 - if (IS_ERR(clk))
264 + if (IS_ERR(clk)) {
265 + /*
266 + * If parent clock is not registered, registration would fail.
267 + * Clear OF_POPULATED flag so that clock registration can be
268 + * attempted again from probe function.
269 + */
270 + of_node_clear_flag(node, OF_POPULATED);
271 return clk;
272 + }
273
274 ret = of_clk_add_provider(node, of_clk_src_simple_get, clk);
275 if (ret) {
276 diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c
277 index d1d7787ce211..db2901646403 100644
278 --- a/drivers/clk/imx/clk-imx6ul.c
279 +++ b/drivers/clk/imx/clk-imx6ul.c
280 @@ -120,6 +120,7 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node)
281
282 np = of_find_compatible_node(NULL, NULL, "fsl,imx6ul-anatop");
283 base = of_iomap(np, 0);
284 + of_node_put(np);
285 WARN_ON(!base);
286
287 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));
288 diff --git a/drivers/crypto/sahara.c b/drivers/crypto/sahara.c
289 index 0c49956ee0ce..4d0ec7bb3bc9 100644
290 --- a/drivers/crypto/sahara.c
291 +++ b/drivers/crypto/sahara.c
292 @@ -1352,7 +1352,7 @@ err_sha_v4_algs:
293
294 err_sha_v3_algs:
295 for (j = 0; j < k; j++)
296 - crypto_unregister_ahash(&sha_v4_algs[j]);
297 + crypto_unregister_ahash(&sha_v3_algs[j]);
298
299 err_aes_algs:
300 for (j = 0; j < i; j++)
301 @@ -1368,7 +1368,7 @@ static void sahara_unregister_algs(struct sahara_dev *dev)
302 for (i = 0; i < ARRAY_SIZE(aes_algs); i++)
303 crypto_unregister_alg(&aes_algs[i]);
304
305 - for (i = 0; i < ARRAY_SIZE(sha_v4_algs); i++)
306 + for (i = 0; i < ARRAY_SIZE(sha_v3_algs); i++)
307 crypto_unregister_ahash(&sha_v3_algs[i]);
308
309 if (dev->version > SAHARA_VERSION_3)
310 diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c
311 index 71866646ffef..be1f5c26fae8 100644
312 --- a/drivers/dma/mv_xor_v2.c
313 +++ b/drivers/dma/mv_xor_v2.c
314 @@ -844,6 +844,8 @@ static int mv_xor_v2_remove(struct platform_device *pdev)
315
316 platform_msi_domain_free_irqs(&pdev->dev);
317
318 + tasklet_kill(&xor_dev->irq_tasklet);
319 +
320 clk_disable_unprepare(xor_dev->clk);
321
322 return 0;
323 diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
324 index b9dad4e40bb8..6d7e3cd4aba4 100644
325 --- a/drivers/dma/pl330.c
326 +++ b/drivers/dma/pl330.c
327 @@ -2167,13 +2167,14 @@ static int pl330_terminate_all(struct dma_chan *chan)
328
329 pm_runtime_get_sync(pl330->ddma.dev);
330 spin_lock_irqsave(&pch->lock, flags);
331 +
332 spin_lock(&pl330->lock);
333 _stop(pch->thread);
334 - spin_unlock(&pl330->lock);
335 -
336 pch->thread->req[0].desc = NULL;
337 pch->thread->req[1].desc = NULL;
338 pch->thread->req_running = -1;
339 + spin_unlock(&pl330->lock);
340 +
341 power_down = pch->active;
342 pch->active = false;
343
344 diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
345 index 8efe13075c92..1d1c9693ebfb 100644
346 --- a/drivers/firmware/efi/arm-init.c
347 +++ b/drivers/firmware/efi/arm-init.c
348 @@ -250,7 +250,6 @@ void __init efi_init(void)
349 reserve_regions();
350 efi_memattr_init();
351 efi_esrt_init();
352 - efi_memmap_unmap();
353
354 memblock_reserve(params.mmap & PAGE_MASK,
355 PAGE_ALIGN(params.mmap_size +
356 diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
357 index 6bdf39e1e385..4d788e0debfe 100644
358 --- a/drivers/firmware/efi/arm-runtime.c
359 +++ b/drivers/firmware/efi/arm-runtime.c
360 @@ -118,11 +118,13 @@ static int __init arm_enable_runtime_services(void)
361 {
362 u64 mapsize;
363
364 - if (!efi_enabled(EFI_BOOT)) {
365 + if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
366 pr_info("EFI services will not be available.\n");
367 return 0;
368 }
369
370 + efi_memmap_unmap();
371 +
372 if (efi_runtime_disabled()) {
373 pr_info("EFI runtime services will be disabled.\n");
374 return 0;
375 diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
376 index 311c9d0e8cbb..241dd7c63d2c 100644
377 --- a/drivers/firmware/efi/esrt.c
378 +++ b/drivers/firmware/efi/esrt.c
379 @@ -333,7 +333,8 @@ void __init efi_esrt_init(void)
380
381 end = esrt_data + size;
382 pr_info("Reserving ESRT space from %pa to %pa.\n", &esrt_data, &end);
383 - efi_mem_reserve(esrt_data, esrt_data_size);
384 + if (md.type == EFI_BOOT_SERVICES_DATA)
385 + efi_mem_reserve(esrt_data, esrt_data_size);
386
387 pr_debug("esrt-init: loaded.\n");
388 err_memunmap:
389 diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
390 index 76ac906b4d78..7a6305884f97 100644
391 --- a/drivers/gpio/gpio-pxa.c
392 +++ b/drivers/gpio/gpio-pxa.c
393 @@ -660,6 +660,8 @@ static int pxa_gpio_probe(struct platform_device *pdev)
394 pchip->irq0 = irq0;
395 pchip->irq1 = irq1;
396 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
397 + if (!res)
398 + return -EINVAL;
399 gpio_reg_base = devm_ioremap(&pdev->dev, res->start,
400 resource_size(res));
401 if (!gpio_reg_base)
402 diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
403 index 346fbda39220..6c4d72872309 100644
404 --- a/drivers/gpio/gpiolib.h
405 +++ b/drivers/gpio/gpiolib.h
406 @@ -85,7 +85,7 @@ struct acpi_gpio_info {
407 };
408
409 /* gpio suffixes used for ACPI and device tree lookup */
410 -static const char * const gpio_suffixes[] = { "gpios", "gpio" };
411 +static __maybe_unused const char * const gpio_suffixes[] = { "gpios", "gpio" };
412
413 #ifdef CONFIG_OF_GPIO
414 struct gpio_desc *of_find_gpio(struct device *dev,
415 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
416 index 171480bb95d0..6e7eb76189f9 100644
417 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
418 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
419 @@ -124,6 +124,8 @@ struct kfd_process *kfd_get_process(const struct task_struct *thread)
420 return ERR_PTR(-EINVAL);
421
422 process = find_process(thread);
423 + if (!process)
424 + return ERR_PTR(-EINVAL);
425
426 return process;
427 }
428 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
429 index 9b638bd905ff..d370bf8bc409 100644
430 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
431 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
432 @@ -23,6 +23,10 @@
433 #ifdef CONFIG_NOUVEAU_PLATFORM_DRIVER
434 #include "priv.h"
435
436 +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
437 +#include <asm/dma-iommu.h>
438 +#endif
439 +
440 static int
441 nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
442 {
443 @@ -95,6 +99,15 @@ nvkm_device_tegra_probe_iommu(struct nvkm_device_tegra *tdev)
444 unsigned long pgsize_bitmap;
445 int ret;
446
447 +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
448 + if (dev->archdata.mapping) {
449 + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
450 +
451 + arm_iommu_detach_device(dev);
452 + arm_iommu_release_mapping(mapping);
453 + }
454 +#endif
455 +
456 if (!tdev->func->iommu_bit)
457 return;
458
459 diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
460 index a188a3959f1a..6ad827b93ae1 100644
461 --- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
462 +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
463 @@ -823,7 +823,7 @@ static void s6e8aa0_read_mtp_id(struct s6e8aa0 *ctx)
464 int ret, i;
465
466 ret = s6e8aa0_dcs_read(ctx, 0xd1, id, ARRAY_SIZE(id));
467 - if (ret < ARRAY_SIZE(id) || id[0] == 0x00) {
468 + if (ret < 0 || ret < ARRAY_SIZE(id) || id[0] == 0x00) {
469 dev_err(ctx->dev, "read id failed\n");
470 ctx->error = -EIO;
471 return;
472 diff --git a/drivers/gpu/ipu-v3/ipu-csi.c b/drivers/gpu/ipu-v3/ipu-csi.c
473 index d6e5ded24418..8774bf17c853 100644
474 --- a/drivers/gpu/ipu-v3/ipu-csi.c
475 +++ b/drivers/gpu/ipu-v3/ipu-csi.c
476 @@ -316,13 +316,17 @@ static int mbus_code_to_bus_cfg(struct ipu_csi_bus_config *cfg, u32 mbus_code)
477 /*
478 * Fill a CSI bus config struct from mbus_config and mbus_framefmt.
479 */
480 -static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
481 +static int fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
482 struct v4l2_mbus_config *mbus_cfg,
483 struct v4l2_mbus_framefmt *mbus_fmt)
484 {
485 + int ret;
486 +
487 memset(csicfg, 0, sizeof(*csicfg));
488
489 - mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
490 + ret = mbus_code_to_bus_cfg(csicfg, mbus_fmt->code);
491 + if (ret < 0)
492 + return ret;
493
494 switch (mbus_cfg->type) {
495 case V4L2_MBUS_PARALLEL:
496 @@ -353,6 +357,8 @@ static void fill_csi_bus_cfg(struct ipu_csi_bus_config *csicfg,
497 /* will never get here, keep compiler quiet */
498 break;
499 }
500 +
501 + return 0;
502 }
503
504 int ipu_csi_init_interface(struct ipu_csi *csi,
505 @@ -362,8 +368,11 @@ int ipu_csi_init_interface(struct ipu_csi *csi,
506 struct ipu_csi_bus_config cfg;
507 unsigned long flags;
508 u32 width, height, data = 0;
509 + int ret;
510
511 - fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
512 + ret = fill_csi_bus_cfg(&cfg, mbus_cfg, mbus_fmt);
513 + if (ret < 0)
514 + return ret;
515
516 /* set default sensor frame width and height */
517 width = mbus_fmt->width;
518 @@ -567,11 +576,14 @@ int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc,
519 struct ipu_csi_bus_config cfg;
520 unsigned long flags;
521 u32 temp;
522 + int ret;
523
524 if (vc > 3)
525 return -EINVAL;
526
527 - mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
528 + ret = mbus_code_to_bus_cfg(&cfg, mbus_fmt->code);
529 + if (ret < 0)
530 + return ret;
531
532 spin_lock_irqsave(&csi->lock, flags);
533
534 diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
535 index ff579a7c6d00..7473c6ea99e9 100644
536 --- a/drivers/hwtracing/coresight/coresight-tpiu.c
537 +++ b/drivers/hwtracing/coresight/coresight-tpiu.c
538 @@ -47,8 +47,9 @@
539
540 /** register definition **/
541 /* FFSR - 0x300 */
542 -#define FFSR_FT_STOPPED BIT(1)
543 +#define FFSR_FT_STOPPED_BIT 1
544 /* FFCR - 0x304 */
545 +#define FFCR_FON_MAN_BIT 6
546 #define FFCR_FON_MAN BIT(6)
547 #define FFCR_STOP_FI BIT(12)
548
549 @@ -93,9 +94,9 @@ static void tpiu_disable_hw(struct tpiu_drvdata *drvdata)
550 /* Generate manual flush */
551 writel_relaxed(FFCR_STOP_FI | FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
552 /* Wait for flush to complete */
553 - coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN, 0);
554 + coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN_BIT, 0);
555 /* Wait for formatter to stop */
556 - coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED, 1);
557 + coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED_BIT, 1);
558
559 CS_LOCK(drvdata->base);
560 }
561 diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
562 index 4383324ec01c..398e44a9ec45 100644
563 --- a/drivers/hwtracing/coresight/coresight.c
564 +++ b/drivers/hwtracing/coresight/coresight.c
565 @@ -107,7 +107,7 @@ static int coresight_find_link_inport(struct coresight_device *csdev,
566 dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n",
567 dev_name(&parent->dev), dev_name(&csdev->dev));
568
569 - return 0;
570 + return -ENODEV;
571 }
572
573 static int coresight_find_link_outport(struct coresight_device *csdev,
574 @@ -125,7 +125,7 @@ static int coresight_find_link_outport(struct coresight_device *csdev,
575 dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n",
576 dev_name(&csdev->dev), dev_name(&child->dev));
577
578 - return 0;
579 + return -ENODEV;
580 }
581
582 static int coresight_enable_sink(struct coresight_device *csdev, u32 mode)
583 @@ -178,6 +178,9 @@ static int coresight_enable_link(struct coresight_device *csdev,
584 else
585 refport = 0;
586
587 + if (refport < 0)
588 + return refport;
589 +
590 if (atomic_inc_return(&csdev->refcnt[refport]) == 1) {
591 if (link_ops(csdev)->enable) {
592 ret = link_ops(csdev)->enable(csdev, inport, outport);
593 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
594 index 575afba1056a..85d4ef319c90 100644
595 --- a/drivers/infiniband/core/cma.c
596 +++ b/drivers/infiniband/core/cma.c
597 @@ -673,6 +673,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
598 dgid = (union ib_gid *) &addr->sib_addr;
599 pkey = ntohs(addr->sib_pkey);
600
601 + mutex_lock(&lock);
602 list_for_each_entry(cur_dev, &dev_list, list) {
603 for (p = 1; p <= cur_dev->device->phys_port_cnt; ++p) {
604 if (!rdma_cap_af_ib(cur_dev->device, p))
605 @@ -696,18 +697,19 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
606 cma_dev = cur_dev;
607 sgid = gid;
608 id_priv->id.port_num = p;
609 + goto found;
610 }
611 }
612 }
613 }
614 -
615 - if (!cma_dev)
616 - return -ENODEV;
617 + mutex_unlock(&lock);
618 + return -ENODEV;
619
620 found:
621 cma_attach_to_dev(id_priv, cma_dev);
622 - addr = (struct sockaddr_ib *) cma_src_addr(id_priv);
623 - memcpy(&addr->sib_addr, &sgid, sizeof sgid);
624 + mutex_unlock(&lock);
625 + addr = (struct sockaddr_ib *)cma_src_addr(id_priv);
626 + memcpy(&addr->sib_addr, &sgid, sizeof(sgid));
627 cma_translate_ib(addr, &id_priv->id.route.addr.dev_addr);
628 return 0;
629 }
630 diff --git a/drivers/infiniband/sw/rxe/rxe_recv.c b/drivers/infiniband/sw/rxe/rxe_recv.c
631 index 46f062842a9a..db6bb026ae90 100644
632 --- a/drivers/infiniband/sw/rxe/rxe_recv.c
633 +++ b/drivers/infiniband/sw/rxe/rxe_recv.c
634 @@ -225,9 +225,14 @@ static int hdr_check(struct rxe_pkt_info *pkt)
635 goto err1;
636 }
637
638 + if (unlikely(qpn == 0)) {
639 + pr_warn_once("QP 0 not supported");
640 + goto err1;
641 + }
642 +
643 if (qpn != IB_MULTICAST_QPN) {
644 - index = (qpn == 0) ? port->qp_smi_index :
645 - ((qpn == 1) ? port->qp_gsi_index : qpn);
646 + index = (qpn == 1) ? port->qp_gsi_index : qpn;
647 +
648 qp = rxe_pool_get_index(&rxe->qp_pool, index);
649 if (unlikely(!qp)) {
650 pr_warn_ratelimited("no qp matches qpn 0x%x\n", qpn);
651 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
652 index 75761667be59..ad9b486ca7ea 100644
653 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
654 +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
655 @@ -1009,12 +1009,14 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
656
657 skb_queue_head_init(&skqueue);
658
659 + netif_tx_lock_bh(p->dev);
660 spin_lock_irq(&priv->lock);
661 set_bit(IPOIB_FLAG_OPER_UP, &p->flags);
662 if (p->neigh)
663 while ((skb = __skb_dequeue(&p->neigh->queue)))
664 __skb_queue_tail(&skqueue, skb);
665 spin_unlock_irq(&priv->lock);
666 + netif_tx_unlock_bh(p->dev);
667
668 while ((skb = __skb_dequeue(&skqueue))) {
669 skb->dev = p->dev;
670 diff --git a/drivers/input/touchscreen/rohm_bu21023.c b/drivers/input/touchscreen/rohm_bu21023.c
671 index 611156a2ef80..be29984c0e4c 100644
672 --- a/drivers/input/touchscreen/rohm_bu21023.c
673 +++ b/drivers/input/touchscreen/rohm_bu21023.c
674 @@ -304,7 +304,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
675 msg[1].len = len;
676 msg[1].buf = buf;
677
678 - i2c_lock_adapter(adap);
679 + i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
680
681 for (i = 0; i < 2; i++) {
682 if (__i2c_transfer(adap, &msg[i], 1) < 0) {
683 @@ -313,7 +313,7 @@ static int rohm_i2c_burst_read(struct i2c_client *client, u8 start, void *buf,
684 }
685 }
686
687 - i2c_unlock_adapter(adap);
688 + i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
689
690 return ret;
691 }
692 diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
693 index 7f294f785ce6..ff4be1174ff0 100644
694 --- a/drivers/iommu/arm-smmu-v3.c
695 +++ b/drivers/iommu/arm-smmu-v3.c
696 @@ -1233,6 +1233,7 @@ static irqreturn_t arm_smmu_priq_thread(int irq, void *dev)
697
698 /* Sync our overflow flag, as we believe we're up to speed */
699 q->cons = Q_OVF(q, q->prod) | Q_WRP(q, q->cons) | Q_IDX(q, q->cons);
700 + writel(q->cons, q->cons_reg);
701 return IRQ_HANDLED;
702 }
703
704 diff --git a/drivers/media/pci/tw686x/tw686x-video.c b/drivers/media/pci/tw686x/tw686x-video.c
705 index 0ea8dd44026c..3a06c000f97b 100644
706 --- a/drivers/media/pci/tw686x/tw686x-video.c
707 +++ b/drivers/media/pci/tw686x/tw686x-video.c
708 @@ -1190,6 +1190,14 @@ int tw686x_video_init(struct tw686x_dev *dev)
709 return err;
710 }
711
712 + /* Initialize vc->dev and vc->ch for the error path */
713 + for (ch = 0; ch < max_channels(dev); ch++) {
714 + struct tw686x_video_channel *vc = &dev->video_channels[ch];
715 +
716 + vc->dev = dev;
717 + vc->ch = ch;
718 + }
719 +
720 for (ch = 0; ch < max_channels(dev); ch++) {
721 struct tw686x_video_channel *vc = &dev->video_channels[ch];
722 struct video_device *vdev;
723 @@ -1198,9 +1206,6 @@ int tw686x_video_init(struct tw686x_dev *dev)
724 spin_lock_init(&vc->qlock);
725 INIT_LIST_HEAD(&vc->vidq_queued);
726
727 - vc->dev = dev;
728 - vc->ch = ch;
729 -
730 /* default settings */
731 err = tw686x_set_standard(vc, V4L2_STD_NTSC);
732 if (err)
733 diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
734 index b3a9fa75e8e7..f7ca1fab4808 100644
735 --- a/drivers/media/v4l2-core/videobuf2-core.c
736 +++ b/drivers/media/v4l2-core/videobuf2-core.c
737 @@ -1375,6 +1375,11 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb)
738 struct vb2_buffer *vb;
739 int ret;
740
741 + if (q->error) {
742 + dprintk(1, "fatal error occurred on queue\n");
743 + return -EIO;
744 + }
745 +
746 vb = q->bufs[index];
747
748 switch (vb->state) {
749 diff --git a/drivers/mfd/88pm860x-i2c.c b/drivers/mfd/88pm860x-i2c.c
750 index 84e313107233..7b9052ea7413 100644
751 --- a/drivers/mfd/88pm860x-i2c.c
752 +++ b/drivers/mfd/88pm860x-i2c.c
753 @@ -146,14 +146,14 @@ int pm860x_page_reg_write(struct i2c_client *i2c, int reg,
754 unsigned char zero;
755 int ret;
756
757 - i2c_lock_adapter(i2c->adapter);
758 + i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
759 read_device(i2c, 0xFA, 0, &zero);
760 read_device(i2c, 0xFB, 0, &zero);
761 read_device(i2c, 0xFF, 0, &zero);
762 ret = write_device(i2c, reg, 1, &data);
763 read_device(i2c, 0xFE, 0, &zero);
764 read_device(i2c, 0xFC, 0, &zero);
765 - i2c_unlock_adapter(i2c->adapter);
766 + i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
767 return ret;
768 }
769 EXPORT_SYMBOL(pm860x_page_reg_write);
770 @@ -164,14 +164,14 @@ int pm860x_page_bulk_read(struct i2c_client *i2c, int reg,
771 unsigned char zero = 0;
772 int ret;
773
774 - i2c_lock_adapter(i2c->adapter);
775 + i2c_lock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
776 read_device(i2c, 0xfa, 0, &zero);
777 read_device(i2c, 0xfb, 0, &zero);
778 read_device(i2c, 0xff, 0, &zero);
779 ret = read_device(i2c, reg, count, buf);
780 read_device(i2c, 0xFE, 0, &zero);
781 read_device(i2c, 0xFC, 0, &zero);
782 - i2c_unlock_adapter(i2c->adapter);
783 + i2c_unlock_bus(i2c->adapter, I2C_LOCK_SEGMENT);
784 return ret;
785 }
786 EXPORT_SYMBOL(pm860x_page_bulk_read);
787 diff --git a/drivers/misc/hmc6352.c b/drivers/misc/hmc6352.c
788 index 90520d76633f..9cde4c5bfba4 100644
789 --- a/drivers/misc/hmc6352.c
790 +++ b/drivers/misc/hmc6352.c
791 @@ -27,6 +27,7 @@
792 #include <linux/err.h>
793 #include <linux/delay.h>
794 #include <linux/sysfs.h>
795 +#include <linux/nospec.h>
796
797 static DEFINE_MUTEX(compass_mutex);
798
799 @@ -50,6 +51,7 @@ static int compass_store(struct device *dev, const char *buf, size_t count,
800 return ret;
801 if (val >= strlen(map))
802 return -EINVAL;
803 + val = array_index_nospec(val, strlen(map));
804 mutex_lock(&compass_mutex);
805 ret = compass_command(c, map[val]);
806 mutex_unlock(&compass_mutex);
807 diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
808 index 75b9d4ac8b1e..371f5f66a9d6 100644
809 --- a/drivers/misc/mei/bus-fixup.c
810 +++ b/drivers/misc/mei/bus-fixup.c
811 @@ -178,7 +178,7 @@ static int mei_nfc_if_version(struct mei_cl *cl,
812
813 ret = 0;
814 bytes_recv = __mei_cl_recv(cl, (u8 *)reply, if_version_length);
815 - if (bytes_recv < if_version_length) {
816 + if (bytes_recv < 0 || bytes_recv < if_version_length) {
817 dev_err(bus->dev, "Could not read IF version\n");
818 ret = -EIO;
819 goto err;
820 diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
821 index dd7f15a65eed..ae4a570abae3 100644
822 --- a/drivers/misc/mei/hbm.c
823 +++ b/drivers/misc/mei/hbm.c
824 @@ -1137,15 +1137,18 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
825
826 props_res = (struct hbm_props_response *)mei_msg;
827
828 - if (props_res->status) {
829 + if (props_res->status == MEI_HBMS_CLIENT_NOT_FOUND) {
830 + dev_dbg(dev->dev, "hbm: properties response: %d CLIENT_NOT_FOUND\n",
831 + props_res->me_addr);
832 + } else if (props_res->status) {
833 dev_err(dev->dev, "hbm: properties response: wrong status = %d %s\n",
834 props_res->status,
835 mei_hbm_status_str(props_res->status));
836 return -EPROTO;
837 + } else {
838 + mei_hbm_me_cl_add(dev, props_res);
839 }
840
841 - mei_hbm_me_cl_add(dev, props_res);
842 -
843 /* request property for the next client */
844 if (mei_hbm_prop_req(dev, props_res->me_addr + 1))
845 return -EIO;
846 diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
847 index a082aa330f47..f7d1c8c4e5ad 100644
848 --- a/drivers/mmc/host/omap_hsmmc.c
849 +++ b/drivers/mmc/host/omap_hsmmc.c
850 @@ -2215,6 +2215,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
851 dma_release_channel(host->tx_chan);
852 dma_release_channel(host->rx_chan);
853
854 + dev_pm_clear_wake_irq(host->dev);
855 pm_runtime_dont_use_autosuspend(host->dev);
856 pm_runtime_put_sync(host->dev);
857 pm_runtime_disable(host->dev);
858 diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
859 index 20b6ff5b4af1..088a3ae0dff0 100644
860 --- a/drivers/mmc/host/sdhci-tegra.c
861 +++ b/drivers/mmc/host/sdhci-tegra.c
862 @@ -350,7 +350,8 @@ static const struct sdhci_pltfm_data sdhci_tegra30_pdata = {
863 SDHCI_QUIRK_NO_HISPD_BIT |
864 SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC |
865 SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN,
866 - .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
867 + .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
868 + SDHCI_QUIRK2_BROKEN_HS200,
869 .ops = &tegra_sdhci_ops,
870 };
871
872 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
873 index 44ea9d88651f..6bf58d27b6fc 100644
874 --- a/drivers/mmc/host/sdhci.c
875 +++ b/drivers/mmc/host/sdhci.c
876 @@ -3328,14 +3328,21 @@ int sdhci_setup_host(struct sdhci_host *host)
877 mmc_gpio_get_cd(host->mmc) < 0)
878 mmc->caps |= MMC_CAP_NEEDS_POLL;
879
880 - /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
881 if (!IS_ERR(mmc->supply.vqmmc)) {
882 ret = regulator_enable(mmc->supply.vqmmc);
883 +
884 + /* If vqmmc provides no 1.8V signalling, then there's no UHS */
885 if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 1700000,
886 1950000))
887 host->caps1 &= ~(SDHCI_SUPPORT_SDR104 |
888 SDHCI_SUPPORT_SDR50 |
889 SDHCI_SUPPORT_DDR50);
890 +
891 + /* In eMMC case vqmmc might be a fixed 1.8V regulator */
892 + if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 2700000,
893 + 3600000))
894 + host->flags &= ~SDHCI_SIGNALING_330;
895 +
896 if (ret) {
897 pr_warn("%s: Failed to enable vqmmc regulator: %d\n",
898 mmc_hostname(mmc), ret);
899 diff --git a/drivers/mtd/maps/solutionengine.c b/drivers/mtd/maps/solutionengine.c
900 index bb580bc16445..c07f21b20463 100644
901 --- a/drivers/mtd/maps/solutionengine.c
902 +++ b/drivers/mtd/maps/solutionengine.c
903 @@ -59,9 +59,9 @@ static int __init init_soleng_maps(void)
904 return -ENXIO;
905 }
906 }
907 - printk(KERN_NOTICE "Solution Engine: Flash at 0x%08lx, EPROM at 0x%08lx\n",
908 - soleng_flash_map.phys & 0x1fffffff,
909 - soleng_eprom_map.phys & 0x1fffffff);
910 + printk(KERN_NOTICE "Solution Engine: Flash at 0x%pap, EPROM at 0x%pap\n",
911 + &soleng_flash_map.phys,
912 + &soleng_eprom_map.phys);
913 flash_mtd->owner = THIS_MODULE;
914
915 eprom_mtd = do_map_probe("map_rom", &soleng_eprom_map);
916 diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
917 index b4092eab53ac..95b6a6640bca 100644
918 --- a/drivers/mtd/mtdchar.c
919 +++ b/drivers/mtd/mtdchar.c
920 @@ -160,8 +160,12 @@ static ssize_t mtdchar_read(struct file *file, char __user *buf, size_t count,
921
922 pr_debug("MTD_read\n");
923
924 - if (*ppos + count > mtd->size)
925 - count = mtd->size - *ppos;
926 + if (*ppos + count > mtd->size) {
927 + if (*ppos < mtd->size)
928 + count = mtd->size - *ppos;
929 + else
930 + count = 0;
931 + }
932
933 if (!count)
934 return 0;
935 @@ -246,7 +250,7 @@ static ssize_t mtdchar_write(struct file *file, const char __user *buf, size_t c
936
937 pr_debug("MTD_write\n");
938
939 - if (*ppos == mtd->size)
940 + if (*ppos >= mtd->size)
941 return -ENOSPC;
942
943 if (*ppos + count > mtd->size)
944 diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
945 index 30e855004c57..8887dd3abed7 100644
946 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c
947 +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
948 @@ -4500,7 +4500,7 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
949 port_res->max_vfs += le16_to_cpu(pcie->num_vfs);
950 }
951 }
952 - return status;
953 + goto err;
954 }
955
956 pcie = be_get_pcie_desc(resp->func_param, desc_count,
957 diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h
958 index afb7ebe20b24..824fd44e25f0 100644
959 --- a/drivers/net/ethernet/intel/e1000e/defines.h
960 +++ b/drivers/net/ethernet/intel/e1000e/defines.h
961 @@ -400,6 +400,10 @@
962 #define E1000_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */
963 #define E1000_ICR_RXO 0x00000040 /* Receiver Overrun */
964 #define E1000_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */
965 +#define E1000_ICR_MDAC 0x00000200 /* MDIO Access Complete */
966 +#define E1000_ICR_SRPD 0x00010000 /* Small Receive Packet Detected */
967 +#define E1000_ICR_ACK 0x00020000 /* Receive ACK Frame Detected */
968 +#define E1000_ICR_MNG 0x00040000 /* Manageability Event Detected */
969 #define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */
970 /* If this bit asserted, the driver should claim the interrupt */
971 #define E1000_ICR_INT_ASSERTED 0x80000000
972 @@ -407,7 +411,7 @@
973 #define E1000_ICR_RXQ1 0x00200000 /* Rx Queue 1 Interrupt */
974 #define E1000_ICR_TXQ0 0x00400000 /* Tx Queue 0 Interrupt */
975 #define E1000_ICR_TXQ1 0x00800000 /* Tx Queue 1 Interrupt */
976 -#define E1000_ICR_OTHER 0x01000000 /* Other Interrupts */
977 +#define E1000_ICR_OTHER 0x01000000 /* Other Interrupt */
978
979 /* PBA ECC Register */
980 #define E1000_PBA_ECC_COUNTER_MASK 0xFFF00000 /* ECC counter mask */
981 @@ -431,12 +435,27 @@
982 E1000_IMS_RXSEQ | \
983 E1000_IMS_LSC)
984
985 +/* These are all of the events related to the OTHER interrupt.
986 + */
987 +#define IMS_OTHER_MASK ( \
988 + E1000_IMS_LSC | \
989 + E1000_IMS_RXO | \
990 + E1000_IMS_MDAC | \
991 + E1000_IMS_SRPD | \
992 + E1000_IMS_ACK | \
993 + E1000_IMS_MNG)
994 +
995 /* Interrupt Mask Set */
996 #define E1000_IMS_TXDW E1000_ICR_TXDW /* Transmit desc written back */
997 #define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */
998 #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
999 #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
1000 +#define E1000_IMS_RXO E1000_ICR_RXO /* Receiver Overrun */
1001 #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */
1002 +#define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO Access Complete */
1003 +#define E1000_IMS_SRPD E1000_ICR_SRPD /* Small Receive Packet */
1004 +#define E1000_IMS_ACK E1000_ICR_ACK /* Receive ACK Frame Detected */
1005 +#define E1000_IMS_MNG E1000_ICR_MNG /* Manageability Event */
1006 #define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */
1007 #define E1000_IMS_RXQ0 E1000_ICR_RXQ0 /* Rx Queue 0 Interrupt */
1008 #define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */
1009 diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
1010 index 7ddac956ffb5..dc7d671b903c 100644
1011 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
1012 +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
1013 @@ -1364,9 +1364,6 @@ out:
1014 * Checks to see of the link status of the hardware has changed. If a
1015 * change in link status has been detected, then we read the PHY registers
1016 * to get the current speed/duplex if link exists.
1017 - *
1018 - * Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link
1019 - * up).
1020 **/
1021 static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1022 {
1023 @@ -1382,7 +1379,8 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1024 * Change or Rx Sequence Error interrupt.
1025 */
1026 if (!mac->get_link_status)
1027 - return 1;
1028 + return 0;
1029 + mac->get_link_status = false;
1030
1031 /* First we want to see if the MII Status Register reports
1032 * link. If so, then we want to get the current speed/duplex
1033 @@ -1390,12 +1388,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1034 */
1035 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1036 if (ret_val)
1037 - return ret_val;
1038 + goto out;
1039
1040 if (hw->mac.type == e1000_pchlan) {
1041 ret_val = e1000_k1_gig_workaround_hv(hw, link);
1042 if (ret_val)
1043 - return ret_val;
1044 + goto out;
1045 }
1046
1047 /* When connected at 10Mbps half-duplex, some parts are excessively
1048 @@ -1430,7 +1428,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1049
1050 ret_val = hw->phy.ops.acquire(hw);
1051 if (ret_val)
1052 - return ret_val;
1053 + goto out;
1054
1055 if (hw->mac.type == e1000_pch2lan)
1056 emi_addr = I82579_RX_CONFIG;
1057 @@ -1453,7 +1451,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1058 hw->phy.ops.release(hw);
1059
1060 if (ret_val)
1061 - return ret_val;
1062 + goto out;
1063
1064 if (hw->mac.type == e1000_pch_spt) {
1065 u16 data;
1066 @@ -1462,14 +1460,14 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1067 if (speed == SPEED_1000) {
1068 ret_val = hw->phy.ops.acquire(hw);
1069 if (ret_val)
1070 - return ret_val;
1071 + goto out;
1072
1073 ret_val = e1e_rphy_locked(hw,
1074 PHY_REG(776, 20),
1075 &data);
1076 if (ret_val) {
1077 hw->phy.ops.release(hw);
1078 - return ret_val;
1079 + goto out;
1080 }
1081
1082 ptr_gap = (data & (0x3FF << 2)) >> 2;
1083 @@ -1483,18 +1481,18 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1084 }
1085 hw->phy.ops.release(hw);
1086 if (ret_val)
1087 - return ret_val;
1088 + goto out;
1089 } else {
1090 ret_val = hw->phy.ops.acquire(hw);
1091 if (ret_val)
1092 - return ret_val;
1093 + goto out;
1094
1095 ret_val = e1e_wphy_locked(hw,
1096 PHY_REG(776, 20),
1097 0xC023);
1098 hw->phy.ops.release(hw);
1099 if (ret_val)
1100 - return ret_val;
1101 + goto out;
1102
1103 }
1104 }
1105 @@ -1521,7 +1519,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1106 (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_V3)) {
1107 ret_val = e1000_k1_workaround_lpt_lp(hw, link);
1108 if (ret_val)
1109 - return ret_val;
1110 + goto out;
1111 }
1112 if ((hw->mac.type == e1000_pch_lpt) ||
1113 (hw->mac.type == e1000_pch_spt)) {
1114 @@ -1530,7 +1528,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1115 */
1116 ret_val = e1000_platform_pm_pch_lpt(hw, link);
1117 if (ret_val)
1118 - return ret_val;
1119 + goto out;
1120 }
1121
1122 /* Clear link partner's EEE ability */
1123 @@ -1550,9 +1548,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1124 }
1125
1126 if (!link)
1127 - return 0; /* No link detected */
1128 -
1129 - mac->get_link_status = false;
1130 + goto out;
1131
1132 switch (hw->mac.type) {
1133 case e1000_pch2lan:
1134 @@ -1600,7 +1596,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1135 * we have already determined whether we have link or not.
1136 */
1137 if (!mac->autoneg)
1138 - return 1;
1139 + return -E1000_ERR_CONFIG;
1140
1141 /* Auto-Neg is enabled. Auto Speed Detection takes care
1142 * of MAC speed/duplex configuration. So we only need to
1143 @@ -1614,12 +1610,14 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
1144 * different link partner.
1145 */
1146 ret_val = e1000e_config_fc_after_link_up(hw);
1147 - if (ret_val) {
1148 + if (ret_val)
1149 e_dbg("Error configuring flow control\n");
1150 - return ret_val;
1151 - }
1152
1153 - return 1;
1154 + return ret_val;
1155 +
1156 +out:
1157 + mac->get_link_status = true;
1158 + return ret_val;
1159 }
1160
1161 static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
1162 diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c
1163 index db735644b312..5bdc3a2d4fd7 100644
1164 --- a/drivers/net/ethernet/intel/e1000e/mac.c
1165 +++ b/drivers/net/ethernet/intel/e1000e/mac.c
1166 @@ -410,9 +410,6 @@ void e1000e_clear_hw_cntrs_base(struct e1000_hw *hw)
1167 * Checks to see of the link status of the hardware has changed. If a
1168 * change in link status has been detected, then we read the PHY registers
1169 * to get the current speed/duplex if link exists.
1170 - *
1171 - * Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link
1172 - * up).
1173 **/
1174 s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1175 {
1176 @@ -426,20 +423,16 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1177 * Change or Rx Sequence Error interrupt.
1178 */
1179 if (!mac->get_link_status)
1180 - return 1;
1181 + return 0;
1182 + mac->get_link_status = false;
1183
1184 /* First we want to see if the MII Status Register reports
1185 * link. If so, then we want to get the current speed/duplex
1186 * of the PHY.
1187 */
1188 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1189 - if (ret_val)
1190 - return ret_val;
1191 -
1192 - if (!link)
1193 - return 0; /* No link detected */
1194 -
1195 - mac->get_link_status = false;
1196 + if (ret_val || !link)
1197 + goto out;
1198
1199 /* Check if there was DownShift, must be checked
1200 * immediately after link-up
1201 @@ -450,7 +443,7 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1202 * we have already determined whether we have link or not.
1203 */
1204 if (!mac->autoneg)
1205 - return 1;
1206 + return -E1000_ERR_CONFIG;
1207
1208 /* Auto-Neg is enabled. Auto Speed Detection takes care
1209 * of MAC speed/duplex configuration. So we only need to
1210 @@ -464,12 +457,14 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)
1211 * different link partner.
1212 */
1213 ret_val = e1000e_config_fc_after_link_up(hw);
1214 - if (ret_val) {
1215 + if (ret_val)
1216 e_dbg("Error configuring flow control\n");
1217 - return ret_val;
1218 - }
1219
1220 - return 1;
1221 + return ret_val;
1222 +
1223 +out:
1224 + mac->get_link_status = true;
1225 + return ret_val;
1226 }
1227
1228 /**
1229 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
1230 index 9c95222e6536..6855b3380a83 100644
1231 --- a/drivers/net/ethernet/intel/e1000e/netdev.c
1232 +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
1233 @@ -1911,30 +1911,20 @@ static irqreturn_t e1000_msix_other(int __always_unused irq, void *data)
1234 struct net_device *netdev = data;
1235 struct e1000_adapter *adapter = netdev_priv(netdev);
1236 struct e1000_hw *hw = &adapter->hw;
1237 - u32 icr;
1238 - bool enable = true;
1239 -
1240 - icr = er32(ICR);
1241 - if (icr & E1000_ICR_RXO) {
1242 - ew32(ICR, E1000_ICR_RXO);
1243 - enable = false;
1244 - /* napi poll will re-enable Other, make sure it runs */
1245 - if (napi_schedule_prep(&adapter->napi)) {
1246 - adapter->total_rx_bytes = 0;
1247 - adapter->total_rx_packets = 0;
1248 - __napi_schedule(&adapter->napi);
1249 - }
1250 - }
1251 + u32 icr = er32(ICR);
1252 +
1253 + if (icr & adapter->eiac_mask)
1254 + ew32(ICS, (icr & adapter->eiac_mask));
1255 +
1256 if (icr & E1000_ICR_LSC) {
1257 - ew32(ICR, E1000_ICR_LSC);
1258 hw->mac.get_link_status = true;
1259 /* guard against interrupt when we're going down */
1260 if (!test_bit(__E1000_DOWN, &adapter->state))
1261 mod_timer(&adapter->watchdog_timer, jiffies + 1);
1262 }
1263
1264 - if (enable && !test_bit(__E1000_DOWN, &adapter->state))
1265 - ew32(IMS, E1000_IMS_OTHER);
1266 + if (!test_bit(__E1000_DOWN, &adapter->state))
1267 + ew32(IMS, E1000_IMS_OTHER | IMS_OTHER_MASK);
1268
1269 return IRQ_HANDLED;
1270 }
1271 @@ -2037,7 +2027,6 @@ static void e1000_configure_msix(struct e1000_adapter *adapter)
1272 hw->hw_addr + E1000_EITR_82574(vector));
1273 else
1274 writel(1, hw->hw_addr + E1000_EITR_82574(vector));
1275 - adapter->eiac_mask |= E1000_IMS_OTHER;
1276
1277 /* Cause Tx interrupts on every write back */
1278 ivar |= BIT(31);
1279 @@ -2262,7 +2251,8 @@ static void e1000_irq_enable(struct e1000_adapter *adapter)
1280
1281 if (adapter->msix_entries) {
1282 ew32(EIAC_82574, adapter->eiac_mask & E1000_EIAC_MASK_82574);
1283 - ew32(IMS, adapter->eiac_mask | E1000_IMS_LSC);
1284 + ew32(IMS, adapter->eiac_mask | E1000_IMS_OTHER |
1285 + IMS_OTHER_MASK);
1286 } else if ((hw->mac.type == e1000_pch_lpt) ||
1287 (hw->mac.type == e1000_pch_spt)) {
1288 ew32(IMS, IMS_ENABLE_MASK | E1000_IMS_ECCER);
1289 @@ -2705,8 +2695,7 @@ static int e1000e_poll(struct napi_struct *napi, int weight)
1290 napi_complete_done(napi, work_done);
1291 if (!test_bit(__E1000_DOWN, &adapter->state)) {
1292 if (adapter->msix_entries)
1293 - ew32(IMS, adapter->rx_ring->ims_val |
1294 - E1000_IMS_OTHER);
1295 + ew32(IMS, adapter->rx_ring->ims_val);
1296 else
1297 e1000_irq_enable(adapter);
1298 }
1299 @@ -5085,7 +5074,7 @@ static bool e1000e_has_link(struct e1000_adapter *adapter)
1300 case e1000_media_type_copper:
1301 if (hw->mac.get_link_status) {
1302 ret_val = hw->mac.ops.check_for_link(hw);
1303 - link_active = ret_val > 0;
1304 + link_active = !hw->mac.get_link_status;
1305 } else {
1306 link_active = true;
1307 }
1308 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
1309 index 8beecd615a21..448e71e07668 100644
1310 --- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
1311 +++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
1312 @@ -339,9 +339,17 @@ void mlx5_start_health_poll(struct mlx5_core_dev *dev)
1313 add_timer(&health->timer);
1314 }
1315
1316 -void mlx5_stop_health_poll(struct mlx5_core_dev *dev)
1317 +void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health)
1318 {
1319 struct mlx5_core_health *health = &dev->priv.health;
1320 + unsigned long flags;
1321 +
1322 + if (disable_health) {
1323 + spin_lock_irqsave(&health->wq_lock, flags);
1324 + set_bit(MLX5_DROP_NEW_HEALTH_WORK, &health->flags);
1325 + set_bit(MLX5_DROP_NEW_RECOVERY_WORK, &health->flags);
1326 + spin_unlock_irqrestore(&health->wq_lock, flags);
1327 + }
1328
1329 del_timer_sync(&health->timer);
1330 }
1331 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1332 index 3c183b8c083a..6698a3a07406 100644
1333 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
1334 +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1335 @@ -787,8 +787,10 @@ static int mlx5_pci_init(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
1336 priv->numa_node = dev_to_node(&dev->pdev->dev);
1337
1338 priv->dbg_root = debugfs_create_dir(dev_name(&pdev->dev), mlx5_debugfs_root);
1339 - if (!priv->dbg_root)
1340 + if (!priv->dbg_root) {
1341 + dev_err(&pdev->dev, "Cannot create debugfs dir, aborting\n");
1342 return -ENOMEM;
1343 + }
1344
1345 err = mlx5_pci_enable_device(dev);
1346 if (err) {
1347 @@ -837,7 +839,7 @@ static void mlx5_pci_close(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
1348 pci_clear_master(dev->pdev);
1349 release_bar(dev->pdev);
1350 mlx5_pci_disable_device(dev);
1351 - debugfs_remove(priv->dbg_root);
1352 + debugfs_remove_recursive(priv->dbg_root);
1353 }
1354
1355 static int mlx5_init_once(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
1356 @@ -1130,7 +1132,7 @@ err_cleanup_once:
1357 mlx5_cleanup_once(dev);
1358
1359 err_stop_poll:
1360 - mlx5_stop_health_poll(dev);
1361 + mlx5_stop_health_poll(dev, boot);
1362 if (mlx5_cmd_teardown_hca(dev)) {
1363 dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
1364 goto out_err;
1365 @@ -1187,7 +1189,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
1366 mlx5_disable_msix(dev);
1367 if (cleanup)
1368 mlx5_cleanup_once(dev);
1369 - mlx5_stop_health_poll(dev);
1370 + mlx5_stop_health_poll(dev, cleanup);
1371 err = mlx5_cmd_teardown_hca(dev);
1372 if (err) {
1373 dev_err(&dev->pdev->dev, "tear_down_hca failed, skip cleanup\n");
1374 diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
1375 index eee6e59e6cf3..2e8703da536d 100644
1376 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
1377 +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
1378 @@ -990,7 +990,7 @@ static void nfp_net_tx_complete(struct nfp_net_tx_ring *tx_ring)
1379 * @nn: NFP Net device
1380 * @tx_ring: TX ring structure
1381 *
1382 - * Assumes that the device is stopped
1383 + * Assumes that the device is stopped, must be idempotent.
1384 */
1385 static void
1386 nfp_net_tx_ring_reset(struct nfp_net *nn, struct nfp_net_tx_ring *tx_ring)
1387 @@ -1144,13 +1144,18 @@ static void nfp_net_rx_give_one(struct nfp_net_rx_ring *rx_ring,
1388 * nfp_net_rx_ring_reset() - Reflect in SW state of freelist after disable
1389 * @rx_ring: RX ring structure
1390 *
1391 - * Warning: Do *not* call if ring buffers were never put on the FW freelist
1392 - * (i.e. device was not enabled)!
1393 + * Assumes that the device is stopped, must be idempotent.
1394 */
1395 static void nfp_net_rx_ring_reset(struct nfp_net_rx_ring *rx_ring)
1396 {
1397 unsigned int wr_idx, last_idx;
1398
1399 + /* wr_p == rd_p means ring was never fed FL bufs. RX rings are always
1400 + * kept at cnt - 1 FL bufs.
1401 + */
1402 + if (rx_ring->wr_p == 0 && rx_ring->rd_p == 0)
1403 + return;
1404 +
1405 /* Move the empty entry to the end of the list */
1406 wr_idx = rx_ring->wr_p % rx_ring->cnt;
1407 last_idx = rx_ring->cnt - 1;
1408 @@ -1919,6 +1924,8 @@ static void nfp_net_vec_clear_ring_data(struct nfp_net *nn, unsigned int idx)
1409 /**
1410 * nfp_net_clear_config_and_disable() - Clear control BAR and disable NFP
1411 * @nn: NFP Net device to reconfigure
1412 + *
1413 + * Warning: must be fully idempotent.
1414 */
1415 static void nfp_net_clear_config_and_disable(struct nfp_net *nn)
1416 {
1417 diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
1418 index a8bd68f252e9..7a62316c570d 100644
1419 --- a/drivers/net/wan/fsl_ucc_hdlc.c
1420 +++ b/drivers/net/wan/fsl_ucc_hdlc.c
1421 @@ -161,7 +161,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
1422 priv->ucc_pram_offset = qe_muram_alloc(sizeof(struct ucc_hdlc_param),
1423 ALIGNMENT_OF_UCC_HDLC_PRAM);
1424
1425 - if (priv->ucc_pram_offset < 0) {
1426 + if (IS_ERR_VALUE(priv->ucc_pram_offset)) {
1427 dev_err(priv->dev, "Can not allocate MURAM for hdlc parameter.\n");
1428 ret = -ENOMEM;
1429 goto free_tx_bd;
1430 @@ -197,14 +197,14 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
1431
1432 /* Alloc riptr, tiptr */
1433 riptr = qe_muram_alloc(32, 32);
1434 - if (riptr < 0) {
1435 + if (IS_ERR_VALUE(riptr)) {
1436 dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n");
1437 ret = -ENOMEM;
1438 goto free_tx_skbuff;
1439 }
1440
1441 tiptr = qe_muram_alloc(32, 32);
1442 - if (tiptr < 0) {
1443 + if (IS_ERR_VALUE(tiptr)) {
1444 dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n");
1445 ret = -ENOMEM;
1446 goto free_riptr;
1447 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
1448 index cd2c6ffdbdde..7f6af10f09ee 100644
1449 --- a/drivers/net/xen-netfront.c
1450 +++ b/drivers/net/xen-netfront.c
1451 @@ -86,8 +86,7 @@ struct netfront_cb {
1452 /* IRQ name is queue name with "-tx" or "-rx" appended */
1453 #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3)
1454
1455 -static DECLARE_WAIT_QUEUE_HEAD(module_load_q);
1456 -static DECLARE_WAIT_QUEUE_HEAD(module_unload_q);
1457 +static DECLARE_WAIT_QUEUE_HEAD(module_wq);
1458
1459 struct netfront_stats {
1460 u64 packets;
1461 @@ -1350,11 +1349,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
1462 netif_carrier_off(netdev);
1463
1464 xenbus_switch_state(dev, XenbusStateInitialising);
1465 - wait_event(module_load_q,
1466 - xenbus_read_driver_state(dev->otherend) !=
1467 - XenbusStateClosed &&
1468 - xenbus_read_driver_state(dev->otherend) !=
1469 - XenbusStateUnknown);
1470 + wait_event(module_wq,
1471 + xenbus_read_driver_state(dev->otherend) !=
1472 + XenbusStateClosed &&
1473 + xenbus_read_driver_state(dev->otherend) !=
1474 + XenbusStateUnknown);
1475 return netdev;
1476
1477 exit:
1478 @@ -1622,6 +1621,7 @@ static int xennet_init_queue(struct netfront_queue *queue)
1479 {
1480 unsigned short i;
1481 int err = 0;
1482 + char *devid;
1483
1484 spin_lock_init(&queue->tx_lock);
1485 spin_lock_init(&queue->rx_lock);
1486 @@ -1629,8 +1629,9 @@ static int xennet_init_queue(struct netfront_queue *queue)
1487 setup_timer(&queue->rx_refill_timer, rx_refill_timeout,
1488 (unsigned long)queue);
1489
1490 - snprintf(queue->name, sizeof(queue->name), "%s-q%u",
1491 - queue->info->netdev->name, queue->id);
1492 + devid = strrchr(queue->info->xbdev->nodename, '/') + 1;
1493 + snprintf(queue->name, sizeof(queue->name), "vif%s-q%u",
1494 + devid, queue->id);
1495
1496 /* Initialise tx_skbs as a free chain containing every entry. */
1497 queue->tx_skb_freelist = 0;
1498 @@ -2037,15 +2038,14 @@ static void netback_changed(struct xenbus_device *dev,
1499
1500 dev_dbg(&dev->dev, "%s\n", xenbus_strstate(backend_state));
1501
1502 + wake_up_all(&module_wq);
1503 +
1504 switch (backend_state) {
1505 case XenbusStateInitialising:
1506 case XenbusStateInitialised:
1507 case XenbusStateReconfiguring:
1508 case XenbusStateReconfigured:
1509 - break;
1510 -
1511 case XenbusStateUnknown:
1512 - wake_up_all(&module_unload_q);
1513 break;
1514
1515 case XenbusStateInitWait:
1516 @@ -2061,12 +2061,10 @@ static void netback_changed(struct xenbus_device *dev,
1517 break;
1518
1519 case XenbusStateClosed:
1520 - wake_up_all(&module_unload_q);
1521 if (dev->state == XenbusStateClosed)
1522 break;
1523 /* Missed the backend's CLOSING state -- fallthrough */
1524 case XenbusStateClosing:
1525 - wake_up_all(&module_unload_q);
1526 xenbus_frontend_closed(dev);
1527 break;
1528 }
1529 @@ -2174,14 +2172,14 @@ static int xennet_remove(struct xenbus_device *dev)
1530
1531 if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {
1532 xenbus_switch_state(dev, XenbusStateClosing);
1533 - wait_event(module_unload_q,
1534 + wait_event(module_wq,
1535 xenbus_read_driver_state(dev->otherend) ==
1536 XenbusStateClosing ||
1537 xenbus_read_driver_state(dev->otherend) ==
1538 XenbusStateUnknown);
1539
1540 xenbus_switch_state(dev, XenbusStateClosed);
1541 - wait_event(module_unload_q,
1542 + wait_event(module_wq,
1543 xenbus_read_driver_state(dev->otherend) ==
1544 XenbusStateClosed ||
1545 xenbus_read_driver_state(dev->otherend) ==
1546 diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c
1547 index 01cf1c1a841a..8de329546b82 100644
1548 --- a/drivers/parport/parport_sunbpp.c
1549 +++ b/drivers/parport/parport_sunbpp.c
1550 @@ -286,12 +286,16 @@ static int bpp_probe(struct platform_device *op)
1551
1552 ops = kmemdup(&parport_sunbpp_ops, sizeof(struct parport_operations),
1553 GFP_KERNEL);
1554 - if (!ops)
1555 + if (!ops) {
1556 + err = -ENOMEM;
1557 goto out_unmap;
1558 + }
1559
1560 dprintk(("register_port\n"));
1561 - if (!(p = parport_register_port((unsigned long)base, irq, dma, ops)))
1562 + if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) {
1563 + err = -ENOMEM;
1564 goto out_free_ops;
1565 + }
1566
1567 p->size = size;
1568 p->dev = &op->dev;
1569 diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
1570 index 664b641fd776..8093afd17aa4 100644
1571 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
1572 +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
1573 @@ -287,31 +287,47 @@ static int pmic_gpio_config_get(struct pinctrl_dev *pctldev,
1574
1575 switch (param) {
1576 case PIN_CONFIG_DRIVE_PUSH_PULL:
1577 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_CMOS;
1578 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_CMOS)
1579 + return -EINVAL;
1580 + arg = 1;
1581 break;
1582 case PIN_CONFIG_DRIVE_OPEN_DRAIN:
1583 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS;
1584 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS)
1585 + return -EINVAL;
1586 + arg = 1;
1587 break;
1588 case PIN_CONFIG_DRIVE_OPEN_SOURCE:
1589 - arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS;
1590 + if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS)
1591 + return -EINVAL;
1592 + arg = 1;
1593 break;
1594 case PIN_CONFIG_BIAS_PULL_DOWN:
1595 - arg = pad->pullup == PMIC_GPIO_PULL_DOWN;
1596 + if (pad->pullup != PMIC_GPIO_PULL_DOWN)
1597 + return -EINVAL;
1598 + arg = 1;
1599 break;
1600 case PIN_CONFIG_BIAS_DISABLE:
1601 - arg = pad->pullup = PMIC_GPIO_PULL_DISABLE;
1602 + if (pad->pullup != PMIC_GPIO_PULL_DISABLE)
1603 + return -EINVAL;
1604 + arg = 1;
1605 break;
1606 case PIN_CONFIG_BIAS_PULL_UP:
1607 - arg = pad->pullup == PMIC_GPIO_PULL_UP_30;
1608 + if (pad->pullup != PMIC_GPIO_PULL_UP_30)
1609 + return -EINVAL;
1610 + arg = 1;
1611 break;
1612 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1613 - arg = !pad->is_enabled;
1614 + if (pad->is_enabled)
1615 + return -EINVAL;
1616 + arg = 1;
1617 break;
1618 case PIN_CONFIG_POWER_SOURCE:
1619 arg = pad->power_source;
1620 break;
1621 case PIN_CONFIG_INPUT_ENABLE:
1622 - arg = pad->input_enabled;
1623 + if (!pad->input_enabled)
1624 + return -EINVAL;
1625 + arg = 1;
1626 break;
1627 case PIN_CONFIG_OUTPUT:
1628 arg = pad->out_value;
1629 diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
1630 index 074bf2fa1c55..79a228937072 100644
1631 --- a/drivers/platform/x86/toshiba_acpi.c
1632 +++ b/drivers/platform/x86/toshiba_acpi.c
1633 @@ -34,6 +34,7 @@
1634 #define TOSHIBA_ACPI_VERSION "0.24"
1635 #define PROC_INTERFACE_VERSION 1
1636
1637 +#include <linux/compiler.h>
1638 #include <linux/kernel.h>
1639 #include <linux/module.h>
1640 #include <linux/moduleparam.h>
1641 @@ -1687,7 +1688,7 @@ static const struct file_operations keys_proc_fops = {
1642 .write = keys_proc_write,
1643 };
1644
1645 -static int version_proc_show(struct seq_file *m, void *v)
1646 +static int __maybe_unused version_proc_show(struct seq_file *m, void *v)
1647 {
1648 seq_printf(m, "driver: %s\n", TOSHIBA_ACPI_VERSION);
1649 seq_printf(m, "proc_interface: %d\n", PROC_INTERFACE_VERSION);
1650 diff --git a/drivers/rtc/rtc-bq4802.c b/drivers/rtc/rtc-bq4802.c
1651 index bd170cb3361c..5747a54cbd42 100644
1652 --- a/drivers/rtc/rtc-bq4802.c
1653 +++ b/drivers/rtc/rtc-bq4802.c
1654 @@ -164,6 +164,10 @@ static int bq4802_probe(struct platform_device *pdev)
1655 } else if (p->r->flags & IORESOURCE_MEM) {
1656 p->regs = devm_ioremap(&pdev->dev, p->r->start,
1657 resource_size(p->r));
1658 + if (!p->regs){
1659 + err = -ENOMEM;
1660 + goto out;
1661 + }
1662 p->read = bq4802_read_mem;
1663 p->write = bq4802_write_mem;
1664 } else {
1665 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
1666 index 283416aefa56..258a72869f57 100644
1667 --- a/drivers/s390/net/qeth_core_main.c
1668 +++ b/drivers/s390/net/qeth_core_main.c
1669 @@ -3499,13 +3499,14 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
1670 qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
1671 if (atomic_read(&queue->set_pci_flags_count))
1672 qdio_flags |= QDIO_FLAG_PCI_OUT;
1673 + atomic_add(count, &queue->used_buffers);
1674 +
1675 rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
1676 queue->queue_no, index, count);
1677 if (queue->card->options.performance_stats)
1678 queue->card->perf_stats.outbound_do_qdio_time +=
1679 qeth_get_micros() -
1680 queue->card->perf_stats.outbound_do_qdio_start_time;
1681 - atomic_add(count, &queue->used_buffers);
1682 if (rc) {
1683 queue->card->stats.tx_errors += count;
1684 /* ignore temporary SIGA errors without busy condition */
1685 diff --git a/drivers/s390/net/qeth_core_sys.c b/drivers/s390/net/qeth_core_sys.c
1686 index db6a285d41e0..0a7a6da36dfd 100644
1687 --- a/drivers/s390/net/qeth_core_sys.c
1688 +++ b/drivers/s390/net/qeth_core_sys.c
1689 @@ -423,6 +423,7 @@ static ssize_t qeth_dev_layer2_store(struct device *dev,
1690 if (card->discipline) {
1691 card->discipline->remove(card->gdev);
1692 qeth_core_free_discipline(card);
1693 + card->options.layer2 = -1;
1694 }
1695
1696 rc = qeth_core_load_discipline(card, newdis);
1697 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1698 index a9c950d29ce2..25ae9b9895a9 100644
1699 --- a/drivers/usb/class/cdc-acm.c
1700 +++ b/drivers/usb/class/cdc-acm.c
1701 @@ -705,20 +705,9 @@ static int acm_tty_write(struct tty_struct *tty,
1702 }
1703
1704 if (acm->susp_count) {
1705 - if (acm->putbuffer) {
1706 - /* now to preserve order */
1707 - usb_anchor_urb(acm->putbuffer->urb, &acm->delayed);
1708 - acm->putbuffer = NULL;
1709 - }
1710 usb_anchor_urb(wb->urb, &acm->delayed);
1711 spin_unlock_irqrestore(&acm->write_lock, flags);
1712 return count;
1713 - } else {
1714 - if (acm->putbuffer) {
1715 - /* at this point there is no good way to handle errors */
1716 - acm_start_wb(acm, acm->putbuffer);
1717 - acm->putbuffer = NULL;
1718 - }
1719 }
1720
1721 stat = acm_start_wb(acm, wb);
1722 @@ -729,66 +718,6 @@ static int acm_tty_write(struct tty_struct *tty,
1723 return count;
1724 }
1725
1726 -static void acm_tty_flush_chars(struct tty_struct *tty)
1727 -{
1728 - struct acm *acm = tty->driver_data;
1729 - struct acm_wb *cur;
1730 - int err;
1731 - unsigned long flags;
1732 -
1733 - spin_lock_irqsave(&acm->write_lock, flags);
1734 -
1735 - cur = acm->putbuffer;
1736 - if (!cur) /* nothing to do */
1737 - goto out;
1738 -
1739 - acm->putbuffer = NULL;
1740 - err = usb_autopm_get_interface_async(acm->control);
1741 - if (err < 0) {
1742 - cur->use = 0;
1743 - acm->putbuffer = cur;
1744 - goto out;
1745 - }
1746 -
1747 - if (acm->susp_count)
1748 - usb_anchor_urb(cur->urb, &acm->delayed);
1749 - else
1750 - acm_start_wb(acm, cur);
1751 -out:
1752 - spin_unlock_irqrestore(&acm->write_lock, flags);
1753 - return;
1754 -}
1755 -
1756 -static int acm_tty_put_char(struct tty_struct *tty, unsigned char ch)
1757 -{
1758 - struct acm *acm = tty->driver_data;
1759 - struct acm_wb *cur;
1760 - int wbn;
1761 - unsigned long flags;
1762 -
1763 -overflow:
1764 - cur = acm->putbuffer;
1765 - if (!cur) {
1766 - spin_lock_irqsave(&acm->write_lock, flags);
1767 - wbn = acm_wb_alloc(acm);
1768 - if (wbn >= 0) {
1769 - cur = &acm->wb[wbn];
1770 - acm->putbuffer = cur;
1771 - }
1772 - spin_unlock_irqrestore(&acm->write_lock, flags);
1773 - if (!cur)
1774 - return 0;
1775 - }
1776 -
1777 - if (cur->len == acm->writesize) {
1778 - acm_tty_flush_chars(tty);
1779 - goto overflow;
1780 - }
1781 -
1782 - cur->buf[cur->len++] = ch;
1783 - return 1;
1784 -}
1785 -
1786 static int acm_tty_write_room(struct tty_struct *tty)
1787 {
1788 struct acm *acm = tty->driver_data;
1789 @@ -1940,8 +1869,6 @@ static const struct tty_operations acm_ops = {
1790 .cleanup = acm_tty_cleanup,
1791 .hangup = acm_tty_hangup,
1792 .write = acm_tty_write,
1793 - .put_char = acm_tty_put_char,
1794 - .flush_chars = acm_tty_flush_chars,
1795 .write_room = acm_tty_write_room,
1796 .ioctl = acm_tty_ioctl,
1797 .throttle = acm_tty_throttle,
1798 diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
1799 index 1f1eabfd8462..b30ac5fcde68 100644
1800 --- a/drivers/usb/class/cdc-acm.h
1801 +++ b/drivers/usb/class/cdc-acm.h
1802 @@ -94,7 +94,6 @@ struct acm {
1803 unsigned long read_urbs_free;
1804 struct urb *read_urbs[ACM_NR];
1805 struct acm_rb read_buffers[ACM_NR];
1806 - struct acm_wb *putbuffer; /* for acm_tty_put_char() */
1807 int rx_buflimit;
1808 spinlock_t read_lock;
1809 int write_used; /* number of non-empty write buffers */
1810 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
1811 index 9f001659807a..adc0f78dc54d 100644
1812 --- a/drivers/usb/class/cdc-wdm.c
1813 +++ b/drivers/usb/class/cdc-wdm.c
1814 @@ -470,7 +470,7 @@ static int service_outstanding_interrupt(struct wdm_device *desc)
1815
1816 set_bit(WDM_RESPONDING, &desc->flags);
1817 spin_unlock_irq(&desc->iuspin);
1818 - rv = usb_submit_urb(desc->response, GFP_KERNEL);
1819 + rv = usb_submit_urb(desc->response, GFP_ATOMIC);
1820 spin_lock_irq(&desc->iuspin);
1821 if (rv) {
1822 dev_err(&desc->intf->dev,
1823 diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
1824 index 7859d738df41..7af23b215254 100644
1825 --- a/drivers/usb/core/hcd-pci.c
1826 +++ b/drivers/usb/core/hcd-pci.c
1827 @@ -528,8 +528,6 @@ static int resume_common(struct device *dev, int event)
1828 event == PM_EVENT_RESTORE);
1829 if (retval) {
1830 dev_err(dev, "PCI post-resume error %d!\n", retval);
1831 - if (hcd->shared_hcd)
1832 - usb_hc_died(hcd->shared_hcd);
1833 usb_hc_died(hcd);
1834 }
1835 }
1836 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1837 index 9cb66475c211..c0c5d5b3ec40 100644
1838 --- a/drivers/usb/core/message.c
1839 +++ b/drivers/usb/core/message.c
1840 @@ -1279,6 +1279,11 @@ void usb_enable_interface(struct usb_device *dev,
1841 * is submitted that needs that bandwidth. Some other operating systems
1842 * allocate bandwidth early, when a configuration is chosen.
1843 *
1844 + * xHCI reserves bandwidth and configures the alternate setting in
1845 + * usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting
1846 + * may be disabled. Drivers cannot rely on any particular alternate
1847 + * setting being in effect after a failure.
1848 + *
1849 * This call is synchronous, and may not be used in an interrupt context.
1850 * Also, drivers must not change altsettings while urbs are scheduled for
1851 * endpoints in that interface; all such urbs must first be completed
1852 @@ -1314,6 +1319,12 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1853 alternate);
1854 return -EINVAL;
1855 }
1856 + /*
1857 + * usb3 hosts configure the interface in usb_hcd_alloc_bandwidth,
1858 + * including freeing dropped endpoint ring buffers.
1859 + * Make sure the interface endpoints are flushed before that
1860 + */
1861 + usb_disable_interface(dev, iface, false);
1862
1863 /* Make sure we have enough bandwidth for this alternate interface.
1864 * Remove the current alt setting and add the new alt setting.
1865 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1866 index 99f67764765f..37a5e07b3488 100644
1867 --- a/drivers/usb/core/quirks.c
1868 +++ b/drivers/usb/core/quirks.c
1869 @@ -37,6 +37,10 @@ static const struct usb_device_id usb_quirk_list[] = {
1870 /* CBM - Flash disk */
1871 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
1872
1873 + /* WORLDE Controller KS49 or Prodipe MIDI 49C USB controller */
1874 + { USB_DEVICE(0x0218, 0x0201), .driver_info =
1875 + USB_QUIRK_CONFIG_INTF_STRINGS },
1876 +
1877 /* WORLDE easy key (easykey.25) MIDI controller */
1878 { USB_DEVICE(0x0218, 0x0401), .driver_info =
1879 USB_QUIRK_CONFIG_INTF_STRINGS },
1880 @@ -259,6 +263,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1881 { USB_DEVICE(0x2040, 0x7200), .driver_info =
1882 USB_QUIRK_CONFIG_INTF_STRINGS },
1883
1884 + /* DJI CineSSD */
1885 + { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
1886 +
1887 /* INTEL VALUE SSD */
1888 { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
1889
1890 diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
1891 index d133252ef2c3..7a8c36642293 100644
1892 --- a/drivers/usb/gadget/udc/net2280.c
1893 +++ b/drivers/usb/gadget/udc/net2280.c
1894 @@ -1549,11 +1549,14 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
1895 writel(tmp | BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
1896 } else {
1897 writel(tmp & ~BIT(USB_DETECT_ENABLE), &dev->usb->usbctl);
1898 - stop_activity(dev, dev->driver);
1899 + stop_activity(dev, NULL);
1900 }
1901
1902 spin_unlock_irqrestore(&dev->lock, flags);
1903
1904 + if (!is_on && dev->driver)
1905 + dev->driver->disconnect(&dev->gadget);
1906 +
1907 return 0;
1908 }
1909
1910 @@ -2470,8 +2473,11 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
1911 nuke(&dev->ep[i]);
1912
1913 /* report disconnect; the driver is already quiesced */
1914 - if (driver)
1915 + if (driver) {
1916 + spin_unlock(&dev->lock);
1917 driver->disconnect(&dev->gadget);
1918 + spin_lock(&dev->lock);
1919 + }
1920
1921 usb_reinit(dev);
1922 }
1923 @@ -3345,6 +3351,8 @@ next_endpoints:
1924 BIT(PCI_RETRY_ABORT_INTERRUPT))
1925
1926 static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
1927 +__releases(dev->lock)
1928 +__acquires(dev->lock)
1929 {
1930 struct net2280_ep *ep;
1931 u32 tmp, num, mask, scratch;
1932 @@ -3385,12 +3393,14 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
1933 if (disconnect || reset) {
1934 stop_activity(dev, dev->driver);
1935 ep0_start(dev);
1936 + spin_unlock(&dev->lock);
1937 if (reset)
1938 usb_gadget_udc_reset
1939 (&dev->gadget, dev->driver);
1940 else
1941 (dev->driver->disconnect)
1942 (&dev->gadget);
1943 + spin_lock(&dev->lock);
1944 return;
1945 }
1946 }
1947 @@ -3409,6 +3419,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
1948 tmp = BIT(SUSPEND_REQUEST_CHANGE_INTERRUPT);
1949 if (stat & tmp) {
1950 writel(tmp, &dev->regs->irqstat1);
1951 + spin_unlock(&dev->lock);
1952 if (stat & BIT(SUSPEND_REQUEST_INTERRUPT)) {
1953 if (dev->driver->suspend)
1954 dev->driver->suspend(&dev->gadget);
1955 @@ -3419,6 +3430,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
1956 dev->driver->resume(&dev->gadget);
1957 /* at high speed, note erratum 0133 */
1958 }
1959 + spin_lock(&dev->lock);
1960 stat &= ~tmp;
1961 }
1962
1963 diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
1964 index b1ae944c83a9..924c08ab0724 100644
1965 --- a/drivers/usb/gadget/udc/renesas_usb3.c
1966 +++ b/drivers/usb/gadget/udc/renesas_usb3.c
1967 @@ -628,12 +628,15 @@ static void usb3_irq_epc_int_1_speed(struct renesas_usb3 *usb3)
1968 switch (speed) {
1969 case USB_STA_SPEED_SS:
1970 usb3->gadget.speed = USB_SPEED_SUPER;
1971 + usb3->gadget.ep0->maxpacket = USB3_EP0_SS_MAX_PACKET_SIZE;
1972 break;
1973 case USB_STA_SPEED_HS:
1974 usb3->gadget.speed = USB_SPEED_HIGH;
1975 + usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
1976 break;
1977 case USB_STA_SPEED_FS:
1978 usb3->gadget.speed = USB_SPEED_FULL;
1979 + usb3->gadget.ep0->maxpacket = USB3_EP0_HSFS_MAX_PACKET_SIZE;
1980 break;
1981 default:
1982 usb3->gadget.speed = USB_SPEED_UNKNOWN;
1983 @@ -1858,7 +1861,7 @@ static int renesas_usb3_init_ep(struct renesas_usb3 *usb3, struct device *dev,
1984 /* for control pipe */
1985 usb3->gadget.ep0 = &usb3_ep->ep;
1986 usb_ep_set_maxpacket_limit(&usb3_ep->ep,
1987 - USB3_EP0_HSFS_MAX_PACKET_SIZE);
1988 + USB3_EP0_SS_MAX_PACKET_SIZE);
1989 usb3_ep->ep.caps.type_control = true;
1990 usb3_ep->ep.caps.dir_in = true;
1991 usb3_ep->ep.caps.dir_out = true;
1992 diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
1993 index 43d52931b5bf..43618976d68a 100644
1994 --- a/drivers/usb/host/u132-hcd.c
1995 +++ b/drivers/usb/host/u132-hcd.c
1996 @@ -2559,7 +2559,7 @@ static int u132_get_frame(struct usb_hcd *hcd)
1997 } else {
1998 int frame = 0;
1999 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n");
2000 - msleep(100);
2001 + mdelay(100);
2002 return frame;
2003 }
2004 }
2005 diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
2006 index 9ff66525924e..e77465a30ac6 100644
2007 --- a/drivers/usb/misc/uss720.c
2008 +++ b/drivers/usb/misc/uss720.c
2009 @@ -385,7 +385,7 @@ static unsigned char parport_uss720_frob_control(struct parport *pp, unsigned ch
2010 mask &= 0x0f;
2011 val &= 0x0f;
2012 d = (priv->reg[1] & (~mask)) ^ val;
2013 - if (set_1284_register(pp, 2, d, GFP_KERNEL))
2014 + if (set_1284_register(pp, 2, d, GFP_ATOMIC))
2015 return 0;
2016 priv->reg[1] = d;
2017 return d & 0xf;
2018 @@ -395,7 +395,7 @@ static unsigned char parport_uss720_read_status(struct parport *pp)
2019 {
2020 unsigned char ret;
2021
2022 - if (get_1284_register(pp, 1, &ret, GFP_KERNEL))
2023 + if (get_1284_register(pp, 1, &ret, GFP_ATOMIC))
2024 return 0;
2025 return ret & 0xf8;
2026 }
2027 diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
2028 index f36968ee2e70..e36c6c6452cd 100644
2029 --- a/drivers/usb/misc/yurex.c
2030 +++ b/drivers/usb/misc/yurex.c
2031 @@ -431,13 +431,13 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
2032 {
2033 struct usb_yurex *dev;
2034 int i, set = 0, retval = 0;
2035 - char buffer[16];
2036 + char buffer[16 + 1];
2037 char *data = buffer;
2038 unsigned long long c, c2 = 0;
2039 signed long timeout = 0;
2040 DEFINE_WAIT(wait);
2041
2042 - count = min(sizeof(buffer), count);
2043 + count = min(sizeof(buffer) - 1, count);
2044 dev = file->private_data;
2045
2046 /* verify that we actually have some data to write */
2047 @@ -456,6 +456,7 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
2048 retval = -EFAULT;
2049 goto error;
2050 }
2051 + buffer[count] = 0;
2052 memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE);
2053
2054 switch (buffer[0]) {
2055 diff --git a/drivers/usb/serial/io_ti.h b/drivers/usb/serial/io_ti.h
2056 index 1bd67b24f916..bc9ff5ebd67c 100644
2057 --- a/drivers/usb/serial/io_ti.h
2058 +++ b/drivers/usb/serial/io_ti.h
2059 @@ -178,7 +178,7 @@ struct ump_interrupt {
2060 } __attribute__((packed));
2061
2062
2063 -#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
2064 +#define TIUMP_GET_PORT_FROM_CODE(c) (((c) >> 6) & 0x01)
2065 #define TIUMP_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
2066 #define TIUMP_INTERRUPT_CODE_LSR 0x03
2067 #define TIUMP_INTERRUPT_CODE_MSR 0x04
2068 diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
2069 index 6bcb874b4832..836cb93ba49e 100644
2070 --- a/drivers/usb/serial/ti_usb_3410_5052.c
2071 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
2072 @@ -1129,7 +1129,7 @@ static void ti_break(struct tty_struct *tty, int break_state)
2073
2074 static int ti_get_port_from_code(unsigned char code)
2075 {
2076 - return (code >> 4) - 3;
2077 + return (code >> 6) & 0x01;
2078 }
2079
2080 static int ti_get_func_from_code(unsigned char code)
2081 diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
2082 index 8cd2926fb1fe..344ec8631481 100644
2083 --- a/drivers/usb/storage/scsiglue.c
2084 +++ b/drivers/usb/storage/scsiglue.c
2085 @@ -392,6 +392,15 @@ static int queuecommand_lck(struct scsi_cmnd *srb,
2086 return 0;
2087 }
2088
2089 + if ((us->fflags & US_FL_NO_ATA_1X) &&
2090 + (srb->cmnd[0] == ATA_12 || srb->cmnd[0] == ATA_16)) {
2091 + memcpy(srb->sense_buffer, usb_stor_sense_invalidCDB,
2092 + sizeof(usb_stor_sense_invalidCDB));
2093 + srb->result = SAM_STAT_CHECK_CONDITION;
2094 + done(srb);
2095 + return 0;
2096 + }
2097 +
2098 /* enqueue the command and wake up the control thread */
2099 srb->scsi_done = done;
2100 us->srb = srb;
2101 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
2102 index 8dd200f92020..64af88977b03 100644
2103 --- a/drivers/usb/storage/uas.c
2104 +++ b/drivers/usb/storage/uas.c
2105 @@ -842,6 +842,27 @@ static int uas_slave_configure(struct scsi_device *sdev)
2106 sdev->skip_ms_page_8 = 1;
2107 sdev->wce_default_on = 1;
2108 }
2109 +
2110 + /*
2111 + * Some disks return the total number of blocks in response
2112 + * to READ CAPACITY rather than the highest block number.
2113 + * If this device makes that mistake, tell the sd driver.
2114 + */
2115 + if (devinfo->flags & US_FL_FIX_CAPACITY)
2116 + sdev->fix_capacity = 1;
2117 +
2118 + /*
2119 + * Some devices don't like MODE SENSE with page=0x3f,
2120 + * which is the command used for checking if a device
2121 + * is write-protected. Now that we tell the sd driver
2122 + * to do a 192-byte transfer with this command the
2123 + * majority of devices work fine, but a few still can't
2124 + * handle it. The sd driver will simply assume those
2125 + * devices are write-enabled.
2126 + */
2127 + if (devinfo->flags & US_FL_NO_WP_DETECT)
2128 + sdev->skip_ms_page_3f = 1;
2129 +
2130 scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
2131 return 0;
2132 }
2133 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
2134 index fc5ed351defb..0a86b3f3638e 100644
2135 --- a/drivers/usb/storage/unusual_devs.h
2136 +++ b/drivers/usb/storage/unusual_devs.h
2137 @@ -2307,6 +2307,13 @@ UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999,
2138 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2139 US_FL_GO_SLOW ),
2140
2141 +/* Reported-by: Tim Anderson <tsa@biglakesoftware.com> */
2142 +UNUSUAL_DEV( 0x2ca3, 0x0031, 0x0000, 0x9999,
2143 + "DJI",
2144 + "CineSSD",
2145 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
2146 + US_FL_NO_ATA_1X),
2147 +
2148 /*
2149 * Reported by Frederic Marchal <frederic.marchal@wowcompany.com>
2150 * Mio Moov 330
2151 diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
2152 index 2510fa728d77..de119f11b78f 100644
2153 --- a/drivers/video/fbdev/core/modedb.c
2154 +++ b/drivers/video/fbdev/core/modedb.c
2155 @@ -644,7 +644,7 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
2156 *
2157 * Valid mode specifiers for @mode_option:
2158 *
2159 - * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m] or
2160 + * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][p][m] or
2161 * <name>[-<bpp>][@<refresh>]
2162 *
2163 * with <xres>, <yres>, <bpp> and <refresh> decimal numbers and
2164 @@ -653,10 +653,10 @@ static int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
2165 * If 'M' is present after yres (and before refresh/bpp if present),
2166 * the function will compute the timings using VESA(tm) Coordinated
2167 * Video Timings (CVT). If 'R' is present after 'M', will compute with
2168 - * reduced blanking (for flatpanels). If 'i' is present, compute
2169 - * interlaced mode. If 'm' is present, add margins equal to 1.8%
2170 - * of xres rounded down to 8 pixels, and 1.8% of yres. The char
2171 - * 'i' and 'm' must be after 'M' and 'R'. Example:
2172 + * reduced blanking (for flatpanels). If 'i' or 'p' are present, compute
2173 + * interlaced or progressive mode. If 'm' is present, add margins equal
2174 + * to 1.8% of xres rounded down to 8 pixels, and 1.8% of yres. The chars
2175 + * 'i', 'p' and 'm' must be after 'M' and 'R'. Example:
2176 *
2177 * 1024x768MR-8@60m - Reduced blank with margins at 60Hz.
2178 *
2179 @@ -697,7 +697,8 @@ int fb_find_mode(struct fb_var_screeninfo *var,
2180 unsigned int namelen = strlen(name);
2181 int res_specified = 0, bpp_specified = 0, refresh_specified = 0;
2182 unsigned int xres = 0, yres = 0, bpp = default_bpp, refresh = 0;
2183 - int yres_specified = 0, cvt = 0, rb = 0, interlace = 0;
2184 + int yres_specified = 0, cvt = 0, rb = 0;
2185 + int interlace_specified = 0, interlace = 0;
2186 int margins = 0;
2187 u32 best, diff, tdiff;
2188
2189 @@ -748,9 +749,17 @@ int fb_find_mode(struct fb_var_screeninfo *var,
2190 if (!cvt)
2191 margins = 1;
2192 break;
2193 + case 'p':
2194 + if (!cvt) {
2195 + interlace = 0;
2196 + interlace_specified = 1;
2197 + }
2198 + break;
2199 case 'i':
2200 - if (!cvt)
2201 + if (!cvt) {
2202 interlace = 1;
2203 + interlace_specified = 1;
2204 + }
2205 break;
2206 default:
2207 goto done;
2208 @@ -819,11 +828,21 @@ done:
2209 if ((name_matches(db[i], name, namelen) ||
2210 (res_specified && res_matches(db[i], xres, yres))) &&
2211 !fb_try_mode(var, info, &db[i], bpp)) {
2212 - if (refresh_specified && db[i].refresh == refresh)
2213 - return 1;
2214 + const int db_interlace = (db[i].vmode &
2215 + FB_VMODE_INTERLACED ? 1 : 0);
2216 + int score = abs(db[i].refresh - refresh);
2217 +
2218 + if (interlace_specified)
2219 + score += abs(db_interlace - interlace);
2220 +
2221 + if (!interlace_specified ||
2222 + db_interlace == interlace)
2223 + if (refresh_specified &&
2224 + db[i].refresh == refresh)
2225 + return 1;
2226
2227 - if (abs(db[i].refresh - refresh) < diff) {
2228 - diff = abs(db[i].refresh - refresh);
2229 + if (score < diff) {
2230 + diff = score;
2231 best = i;
2232 }
2233 }
2234 diff --git a/drivers/video/fbdev/goldfishfb.c b/drivers/video/fbdev/goldfishfb.c
2235 index 7f6c9e6cfc6c..14a93cb21310 100644
2236 --- a/drivers/video/fbdev/goldfishfb.c
2237 +++ b/drivers/video/fbdev/goldfishfb.c
2238 @@ -301,6 +301,7 @@ static int goldfish_fb_remove(struct platform_device *pdev)
2239 dma_free_coherent(&pdev->dev, framesize, (void *)fb->fb.screen_base,
2240 fb->fb.fix.smem_start);
2241 iounmap(fb->reg_base);
2242 + kfree(fb);
2243 return 0;
2244 }
2245
2246 diff --git a/drivers/video/fbdev/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c
2247 index 6429f33167f5..77c97c697fea 100644
2248 --- a/drivers/video/fbdev/omap/omapfb_main.c
2249 +++ b/drivers/video/fbdev/omap/omapfb_main.c
2250 @@ -956,7 +956,7 @@ int omapfb_register_client(struct omapfb_notifier_block *omapfb_nb,
2251 {
2252 int r;
2253
2254 - if ((unsigned)omapfb_nb->plane_idx > OMAPFB_PLANE_NUM)
2255 + if ((unsigned)omapfb_nb->plane_idx >= OMAPFB_PLANE_NUM)
2256 return -EINVAL;
2257
2258 if (!notifier_inited) {
2259 diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c
2260 index ef73f14d7ba0..8503310a3816 100644
2261 --- a/drivers/video/fbdev/pxafb.c
2262 +++ b/drivers/video/fbdev/pxafb.c
2263 @@ -2128,8 +2128,8 @@ static int of_get_pxafb_display(struct device *dev, struct device_node *disp,
2264 return -EINVAL;
2265
2266 ret = -ENOMEM;
2267 - info->modes = kmalloc_array(timings->num_timings,
2268 - sizeof(info->modes[0]), GFP_KERNEL);
2269 + info->modes = kcalloc(timings->num_timings, sizeof(info->modes[0]),
2270 + GFP_KERNEL);
2271 if (!info->modes)
2272 goto out;
2273 info->num_modes = timings->num_timings;
2274 diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
2275 index badee04ef496..71b5dca95bdb 100644
2276 --- a/drivers/video/fbdev/via/viafbdev.c
2277 +++ b/drivers/video/fbdev/via/viafbdev.c
2278 @@ -19,6 +19,7 @@
2279 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2280 */
2281
2282 +#include <linux/compiler.h>
2283 #include <linux/module.h>
2284 #include <linux/seq_file.h>
2285 #include <linux/slab.h>
2286 @@ -1468,7 +1469,7 @@ static const struct file_operations viafb_vt1636_proc_fops = {
2287
2288 #endif /* CONFIG_FB_VIA_DIRECT_PROCFS */
2289
2290 -static int viafb_sup_odev_proc_show(struct seq_file *m, void *v)
2291 +static int __maybe_unused viafb_sup_odev_proc_show(struct seq_file *m, void *v)
2292 {
2293 via_odev_to_seq(m, supported_odev_map[
2294 viaparinfo->shared->chip_info.gfx_chip_name]);
2295 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
2296 index a4fabf60d5ee..e7e25a86bbff 100644
2297 --- a/fs/binfmt_elf.c
2298 +++ b/fs/binfmt_elf.c
2299 @@ -1706,7 +1706,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
2300 const struct user_regset *regset = &view->regsets[i];
2301 do_thread_regset_writeback(t->task, regset);
2302 if (regset->core_note_type && regset->get &&
2303 - (!regset->active || regset->active(t->task, regset))) {
2304 + (!regset->active || regset->active(t->task, regset) > 0)) {
2305 int ret;
2306 size_t size = regset->n * regset->size;
2307 void *data = kmalloc(size, GFP_KERNEL);
2308 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
2309 index a27fc8791551..ef24b4527459 100644
2310 --- a/fs/cifs/readdir.c
2311 +++ b/fs/cifs/readdir.c
2312 @@ -376,8 +376,15 @@ static char *nxt_dir_entry(char *old_entry, char *end_of_smb, int level)
2313
2314 new_entry = old_entry + sizeof(FIND_FILE_STANDARD_INFO) +
2315 pfData->FileNameLength;
2316 - } else
2317 - new_entry = old_entry + le32_to_cpu(pDirInfo->NextEntryOffset);
2318 + } else {
2319 + u32 next_offset = le32_to_cpu(pDirInfo->NextEntryOffset);
2320 +
2321 + if (old_entry + next_offset < old_entry) {
2322 + cifs_dbg(VFS, "invalid offset %u\n", next_offset);
2323 + return NULL;
2324 + }
2325 + new_entry = old_entry + next_offset;
2326 + }
2327 cifs_dbg(FYI, "new entry %p old entry %p\n", new_entry, old_entry);
2328 /* validate that new_entry is not past end of SMB */
2329 if (new_entry >= end_of_smb) {
2330 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
2331 index 383cf8148fe7..50251a8af0ce 100644
2332 --- a/fs/cifs/smb2pdu.c
2333 +++ b/fs/cifs/smb2pdu.c
2334 @@ -2565,33 +2565,38 @@ num_entries(char *bufstart, char *end_of_buf, char **lastentry, size_t size)
2335 int len;
2336 unsigned int entrycount = 0;
2337 unsigned int next_offset = 0;
2338 - FILE_DIRECTORY_INFO *entryptr;
2339 + char *entryptr;
2340 + FILE_DIRECTORY_INFO *dir_info;
2341
2342 if (bufstart == NULL)
2343 return 0;
2344
2345 - entryptr = (FILE_DIRECTORY_INFO *)bufstart;
2346 + entryptr = bufstart;
2347
2348 while (1) {
2349 - entryptr = (FILE_DIRECTORY_INFO *)
2350 - ((char *)entryptr + next_offset);
2351 -
2352 - if ((char *)entryptr + size > end_of_buf) {
2353 + if (entryptr + next_offset < entryptr ||
2354 + entryptr + next_offset > end_of_buf ||
2355 + entryptr + next_offset + size > end_of_buf) {
2356 cifs_dbg(VFS, "malformed search entry would overflow\n");
2357 break;
2358 }
2359
2360 - len = le32_to_cpu(entryptr->FileNameLength);
2361 - if ((char *)entryptr + len + size > end_of_buf) {
2362 + entryptr = entryptr + next_offset;
2363 + dir_info = (FILE_DIRECTORY_INFO *)entryptr;
2364 +
2365 + len = le32_to_cpu(dir_info->FileNameLength);
2366 + if (entryptr + len < entryptr ||
2367 + entryptr + len > end_of_buf ||
2368 + entryptr + len + size > end_of_buf) {
2369 cifs_dbg(VFS, "directory entry name would overflow frame end of buf %p\n",
2370 end_of_buf);
2371 break;
2372 }
2373
2374 - *lastentry = (char *)entryptr;
2375 + *lastentry = entryptr;
2376 entrycount++;
2377
2378 - next_offset = le32_to_cpu(entryptr->NextEntryOffset);
2379 + next_offset = le32_to_cpu(dir_info->NextEntryOffset);
2380 if (!next_offset)
2381 break;
2382 }
2383 diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
2384 index 56fb26127fef..d2a1a79fa324 100644
2385 --- a/fs/configfs/dir.c
2386 +++ b/fs/configfs/dir.c
2387 @@ -1777,6 +1777,16 @@ void configfs_unregister_group(struct config_group *group)
2388 struct dentry *dentry = group->cg_item.ci_dentry;
2389 struct dentry *parent = group->cg_item.ci_parent->ci_dentry;
2390
2391 + mutex_lock(&subsys->su_mutex);
2392 + if (!group->cg_item.ci_parent->ci_group) {
2393 + /*
2394 + * The parent has already been unlinked and detached
2395 + * due to a rmdir.
2396 + */
2397 + goto unlink_group;
2398 + }
2399 + mutex_unlock(&subsys->su_mutex);
2400 +
2401 inode_lock_nested(d_inode(parent), I_MUTEX_PARENT);
2402 spin_lock(&configfs_dirent_lock);
2403 configfs_detach_prep(dentry, NULL);
2404 @@ -1791,6 +1801,7 @@ void configfs_unregister_group(struct config_group *group)
2405 dput(dentry);
2406
2407 mutex_lock(&subsys->su_mutex);
2408 +unlink_group:
2409 unlink_group(group);
2410 mutex_unlock(&subsys->su_mutex);
2411 }
2412 diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
2413 index fc5da4cbe88c..39af17b407f0 100644
2414 --- a/fs/gfs2/bmap.c
2415 +++ b/fs/gfs2/bmap.c
2416 @@ -1472,7 +1472,7 @@ int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
2417 end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
2418 lblock = offset >> shift;
2419 lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
2420 - if (lblock_stop > end_of_file)
2421 + if (lblock_stop > end_of_file && ip != GFS2_I(sdp->sd_rindex))
2422 return 1;
2423
2424 size = (lblock_stop - lblock) << shift;
2425 diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
2426 index 86ccc0159393..832824994aae 100644
2427 --- a/fs/gfs2/rgrp.c
2428 +++ b/fs/gfs2/rgrp.c
2429 @@ -1675,7 +1675,8 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
2430
2431 while(1) {
2432 bi = rbm_bi(rbm);
2433 - if (test_bit(GBF_FULL, &bi->bi_flags) &&
2434 + if ((ip == NULL || !gfs2_rs_active(&ip->i_res)) &&
2435 + test_bit(GBF_FULL, &bi->bi_flags) &&
2436 (state == GFS2_BLKST_FREE))
2437 goto next_bitmap;
2438
2439 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2440 index e7ca62a86dab..eb55ab6930b5 100644
2441 --- a/fs/nfs/nfs4proc.c
2442 +++ b/fs/nfs/nfs4proc.c
2443 @@ -2539,14 +2539,18 @@ static void nfs41_check_delegation_stateid(struct nfs4_state *state)
2444 }
2445
2446 nfs4_stateid_copy(&stateid, &delegation->stateid);
2447 - if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) ||
2448 - !test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
2449 - &delegation->flags)) {
2450 + if (test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) {
2451 rcu_read_unlock();
2452 nfs_finish_clear_delegation_stateid(state, &stateid);
2453 return;
2454 }
2455
2456 + if (!test_and_clear_bit(NFS_DELEGATION_TEST_EXPIRED,
2457 + &delegation->flags)) {
2458 + rcu_read_unlock();
2459 + return;
2460 + }
2461 +
2462 cred = get_rpccred(delegation->cred);
2463 rcu_read_unlock();
2464 status = nfs41_test_and_free_expired_stateid(server, &stateid, cred);
2465 diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
2466 index 353691366fca..857af951831f 100644
2467 --- a/fs/nfs/nfs4state.c
2468 +++ b/fs/nfs/nfs4state.c
2469 @@ -1336,6 +1336,8 @@ int nfs4_schedule_stateid_recovery(const struct nfs_server *server, struct nfs4_
2470
2471 if (!nfs4_state_mark_reclaim_nograce(clp, state))
2472 return -EBADF;
2473 + nfs_inode_find_delegation_state_and_recover(state->inode,
2474 + &state->stateid);
2475 dprintk("%s: scheduling stateid recovery for server %s\n", __func__,
2476 clp->cl_hostname);
2477 nfs4_schedule_state_manager(clp);
2478 diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
2479 index e11672aa4575..ecdb3baa1283 100644
2480 --- a/fs/pstore/ram_core.c
2481 +++ b/fs/pstore/ram_core.c
2482 @@ -421,7 +421,12 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size,
2483 vaddr = vmap(pages, page_count, VM_MAP, prot);
2484 kfree(pages);
2485
2486 - return vaddr;
2487 + /*
2488 + * Since vmap() uses page granularity, we must add the offset
2489 + * into the page here, to get the byte granularity address
2490 + * into the mapping to represent the actual "start" location.
2491 + */
2492 + return vaddr + offset_in_page(start);
2493 }
2494
2495 static void *persistent_ram_iomap(phys_addr_t start, size_t size,
2496 @@ -440,6 +445,11 @@ static void *persistent_ram_iomap(phys_addr_t start, size_t size,
2497 else
2498 va = ioremap_wc(start, size);
2499
2500 + /*
2501 + * Since request_mem_region() and ioremap() are byte-granularity
2502 + * there is no need handle anything special like we do when the
2503 + * vmap() case in persistent_ram_vmap() above.
2504 + */
2505 return va;
2506 }
2507
2508 @@ -460,7 +470,7 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
2509 return -ENOMEM;
2510 }
2511
2512 - prz->buffer = prz->vaddr + offset_in_page(start);
2513 + prz->buffer = prz->vaddr;
2514 prz->buffer_size = size - sizeof(struct persistent_ram_buffer);
2515
2516 return 0;
2517 @@ -507,7 +517,8 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
2518
2519 if (prz->vaddr) {
2520 if (pfn_valid(prz->paddr >> PAGE_SHIFT)) {
2521 - vunmap(prz->vaddr);
2522 + /* We must vunmap() at page-granularity. */
2523 + vunmap(prz->vaddr - offset_in_page(prz->paddr));
2524 } else {
2525 iounmap(prz->vaddr);
2526 release_mem_region(prz->paddr, prz->size);
2527 diff --git a/include/linux/crypto.h b/include/linux/crypto.h
2528 index 8edb3ba6f640..9de26962338e 100644
2529 --- a/include/linux/crypto.h
2530 +++ b/include/linux/crypto.h
2531 @@ -108,6 +108,11 @@
2532 */
2533 #define CRYPTO_ALG_OPTIONAL_KEY 0x00004000
2534
2535 +/*
2536 + * Don't trigger module loading
2537 + */
2538 +#define CRYPTO_NOLOAD 0x00008000
2539 +
2540 /*
2541 * Transform masks and values (for crt_flags).
2542 */
2543 diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
2544 index 7751d72a6a40..859fd209603a 100644
2545 --- a/include/linux/mlx5/driver.h
2546 +++ b/include/linux/mlx5/driver.h
2547 @@ -786,7 +786,7 @@ void mlx5_unmap_free_uar(struct mlx5_core_dev *mdev, struct mlx5_uar *uar);
2548 void mlx5_health_cleanup(struct mlx5_core_dev *dev);
2549 int mlx5_health_init(struct mlx5_core_dev *dev);
2550 void mlx5_start_health_poll(struct mlx5_core_dev *dev);
2551 -void mlx5_stop_health_poll(struct mlx5_core_dev *dev);
2552 +void mlx5_stop_health_poll(struct mlx5_core_dev *dev, bool disable_health);
2553 void mlx5_drain_health_wq(struct mlx5_core_dev *dev);
2554 void mlx5_drain_health_recovery(struct mlx5_core_dev *dev);
2555 int mlx5_buf_alloc_node(struct mlx5_core_dev *dev, int size,
2556 diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
2557 index 690e1e3c59f7..f036b6ada6ef 100644
2558 --- a/kernel/audit_watch.c
2559 +++ b/kernel/audit_watch.c
2560 @@ -419,6 +419,13 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
2561 struct path parent_path;
2562 int h, ret = 0;
2563
2564 + /*
2565 + * When we will be calling audit_add_to_parent, krule->watch might have
2566 + * been updated and watch might have been freed.
2567 + * So we need to keep a reference of watch.
2568 + */
2569 + audit_get_watch(watch);
2570 +
2571 mutex_unlock(&audit_filter_mutex);
2572
2573 /* Avoid calling path_lookup under audit_filter_mutex. */
2574 @@ -427,8 +434,10 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
2575 /* caller expects mutex locked */
2576 mutex_lock(&audit_filter_mutex);
2577
2578 - if (ret)
2579 + if (ret) {
2580 + audit_put_watch(watch);
2581 return ret;
2582 + }
2583
2584 /* either find an old parent or attach a new one */
2585 parent = audit_find_parent(d_backing_inode(parent_path.dentry));
2586 @@ -446,6 +455,7 @@ int audit_add_watch(struct audit_krule *krule, struct list_head **list)
2587 *list = &audit_inode_hash[h];
2588 error:
2589 path_put(&parent_path);
2590 + audit_put_watch(watch);
2591 return ret;
2592 }
2593
2594 diff --git a/kernel/events/core.c b/kernel/events/core.c
2595 index 6e6ec229c780..95bd00d9f2c3 100644
2596 --- a/kernel/events/core.c
2597 +++ b/kernel/events/core.c
2598 @@ -5563,6 +5563,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
2599 unsigned long sp;
2600 unsigned int rem;
2601 u64 dyn_size;
2602 + mm_segment_t fs;
2603
2604 /*
2605 * We dump:
2606 @@ -5580,7 +5581,10 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
2607
2608 /* Data. */
2609 sp = perf_user_stack_pointer(regs);
2610 + fs = get_fs();
2611 + set_fs(USER_DS);
2612 rem = __output_copy_user(handle, (void *) sp, dump_size);
2613 + set_fs(fs);
2614 dyn_size = dump_size - rem;
2615
2616 perf_output_skip(handle, rem);
2617 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2618 index d7801f6877af..e63fd12f923a 100644
2619 --- a/net/mac80211/cfg.c
2620 +++ b/net/mac80211/cfg.c
2621 @@ -454,7 +454,7 @@ static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
2622 goto out_unlock;
2623 }
2624
2625 - ieee80211_key_free(key, true);
2626 + ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION);
2627
2628 ret = 0;
2629 out_unlock:
2630 diff --git a/net/mac80211/key.c b/net/mac80211/key.c
2631 index 4c625a325ce2..6e02f8dfce2b 100644
2632 --- a/net/mac80211/key.c
2633 +++ b/net/mac80211/key.c
2634 @@ -648,11 +648,15 @@ int ieee80211_key_link(struct ieee80211_key *key,
2635 {
2636 struct ieee80211_local *local = sdata->local;
2637 struct ieee80211_key *old_key;
2638 - int idx, ret;
2639 - bool pairwise;
2640 -
2641 - pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
2642 - idx = key->conf.keyidx;
2643 + int idx = key->conf.keyidx;
2644 + bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
2645 + /*
2646 + * We want to delay tailroom updates only for station - in that
2647 + * case it helps roaming speed, but in other cases it hurts and
2648 + * can cause warnings to appear.
2649 + */
2650 + bool delay_tailroom = sdata->vif.type == NL80211_IFTYPE_STATION;
2651 + int ret;
2652
2653 mutex_lock(&sdata->local->key_mtx);
2654
2655 @@ -680,14 +684,14 @@ int ieee80211_key_link(struct ieee80211_key *key,
2656 increment_tailroom_need_count(sdata);
2657
2658 ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
2659 - ieee80211_key_destroy(old_key, true);
2660 + ieee80211_key_destroy(old_key, delay_tailroom);
2661
2662 ieee80211_debugfs_key_add(key);
2663
2664 if (!local->wowlan) {
2665 ret = ieee80211_key_enable_hw_accel(key);
2666 if (ret)
2667 - ieee80211_key_free(key, true);
2668 + ieee80211_key_free(key, delay_tailroom);
2669 } else {
2670 ret = 0;
2671 }
2672 @@ -922,7 +926,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
2673 ieee80211_key_replace(key->sdata, key->sta,
2674 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
2675 key, NULL);
2676 - __ieee80211_key_destroy(key, true);
2677 + __ieee80211_key_destroy(key, key->sdata->vif.type ==
2678 + NL80211_IFTYPE_STATION);
2679 }
2680
2681 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
2682 @@ -932,7 +937,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
2683 ieee80211_key_replace(key->sdata, key->sta,
2684 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
2685 key, NULL);
2686 - __ieee80211_key_destroy(key, true);
2687 + __ieee80211_key_destroy(key, key->sdata->vif.type ==
2688 + NL80211_IFTYPE_STATION);
2689 }
2690
2691 mutex_unlock(&local->key_mtx);
2692 diff --git a/net/rds/bind.c b/net/rds/bind.c
2693 index adb53ae97a02..cc7e3a138598 100644
2694 --- a/net/rds/bind.c
2695 +++ b/net/rds/bind.c
2696 @@ -60,11 +60,13 @@ struct rds_sock *rds_find_bound(__be32 addr, __be16 port)
2697 u64 key = ((u64)addr << 32) | port;
2698 struct rds_sock *rs;
2699
2700 - rs = rhashtable_lookup_fast(&bind_hash_table, &key, ht_parms);
2701 + rcu_read_lock();
2702 + rs = rhashtable_lookup(&bind_hash_table, &key, ht_parms);
2703 if (rs && !sock_flag(rds_rs_to_sk(rs), SOCK_DEAD))
2704 rds_sock_addref(rs);
2705 else
2706 rs = NULL;
2707 + rcu_read_unlock();
2708
2709 rdsdebug("returning rs %p for %pI4:%u\n", rs, &addr,
2710 ntohs(port));
2711 @@ -157,6 +159,7 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2712 goto out;
2713 }
2714
2715 + sock_set_flag(sk, SOCK_RCU_FREE);
2716 ret = rds_add_bound(rs, sin->sin_addr.s_addr, &sin->sin_port);
2717 if (ret)
2718 goto out;
2719 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
2720 index 1f943d97dc29..d0dcfc68c043 100644
2721 --- a/net/xfrm/xfrm_policy.c
2722 +++ b/net/xfrm/xfrm_policy.c
2723 @@ -1873,7 +1873,10 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
2724 /* Try to instantiate a bundle */
2725 err = xfrm_tmpl_resolve(pols, num_pols, fl, xfrm, family);
2726 if (err <= 0) {
2727 - if (err != 0 && err != -EAGAIN)
2728 + if (err == 0)
2729 + return NULL;
2730 +
2731 + if (err != -EAGAIN)
2732 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR);
2733 return ERR_PTR(err);
2734 }
2735 diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
2736 index 63774307a751..8f8965608ee3 100644
2737 --- a/scripts/Kbuild.include
2738 +++ b/scripts/Kbuild.include
2739 @@ -394,3 +394,6 @@ endif
2740 endef
2741 #
2742 ###############################################################################
2743 +
2744 +# delete partially updated (i.e. corrupted) files on error
2745 +.DELETE_ON_ERROR:
2746 diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
2747 index bf663915412e..6fcbd8e99baf 100644
2748 --- a/security/integrity/evm/evm_crypto.c
2749 +++ b/security/integrity/evm/evm_crypto.c
2750 @@ -94,7 +94,8 @@ static struct shash_desc *init_desc(char type)
2751 mutex_lock(&mutex);
2752 if (*tfm)
2753 goto out;
2754 - *tfm = crypto_alloc_shash(algo, 0, CRYPTO_ALG_ASYNC);
2755 + *tfm = crypto_alloc_shash(algo, 0,
2756 + CRYPTO_ALG_ASYNC | CRYPTO_NOLOAD);
2757 if (IS_ERR(*tfm)) {
2758 rc = PTR_ERR(*tfm);
2759 pr_err("Can not allocate %s (reason: %ld)\n", algo, rc);
2760 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
2761 index ca3ea985c100..fb7c534fb57d 100644
2762 --- a/security/smack/smack_lsm.c
2763 +++ b/security/smack/smack_lsm.c
2764 @@ -3966,15 +3966,19 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
2765 struct smack_known *skp = NULL;
2766 int rc = 0;
2767 struct smk_audit_info ad;
2768 + u16 family = sk->sk_family;
2769 #ifdef CONFIG_AUDIT
2770 struct lsm_network_audit net;
2771 #endif
2772 #if IS_ENABLED(CONFIG_IPV6)
2773 struct sockaddr_in6 sadd;
2774 int proto;
2775 +
2776 + if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
2777 + family = PF_INET;
2778 #endif /* CONFIG_IPV6 */
2779
2780 - switch (sk->sk_family) {
2781 + switch (family) {
2782 case PF_INET:
2783 #ifdef CONFIG_SECURITY_SMACK_NETFILTER
2784 /*
2785 @@ -3992,7 +3996,7 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
2786 */
2787 netlbl_secattr_init(&secattr);
2788
2789 - rc = netlbl_skbuff_getattr(skb, sk->sk_family, &secattr);
2790 + rc = netlbl_skbuff_getattr(skb, family, &secattr);
2791 if (rc == 0)
2792 skp = smack_from_secattr(&secattr, ssp);
2793 else
2794 @@ -4005,7 +4009,7 @@ access_check:
2795 #endif
2796 #ifdef CONFIG_AUDIT
2797 smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
2798 - ad.a.u.net->family = sk->sk_family;
2799 + ad.a.u.net->family = family;
2800 ad.a.u.net->netif = skb->skb_iif;
2801 ipv4_skb_to_auditdata(skb, &ad.a, NULL);
2802 #endif
2803 @@ -4019,7 +4023,7 @@ access_check:
2804 rc = smk_bu_note("IPv4 delivery", skp, ssp->smk_in,
2805 MAY_WRITE, rc);
2806 if (rc != 0)
2807 - netlbl_skbuff_err(skb, sk->sk_family, rc, 0);
2808 + netlbl_skbuff_err(skb, family, rc, 0);
2809 break;
2810 #if IS_ENABLED(CONFIG_IPV6)
2811 case PF_INET6:
2812 @@ -4035,7 +4039,7 @@ access_check:
2813 skp = smack_net_ambient;
2814 #ifdef CONFIG_AUDIT
2815 smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
2816 - ad.a.u.net->family = sk->sk_family;
2817 + ad.a.u.net->family = family;
2818 ad.a.u.net->netif = skb->skb_iif;
2819 ipv6_skb_to_auditdata(skb, &ad.a, NULL);
2820 #endif /* CONFIG_AUDIT */
2821 diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
2822 index 9306604f5070..f57a58ac7ae0 100644
2823 --- a/sound/core/pcm_lib.c
2824 +++ b/sound/core/pcm_lib.c
2825 @@ -648,27 +648,33 @@ EXPORT_SYMBOL(snd_interval_refine);
2826
2827 static int snd_interval_refine_first(struct snd_interval *i)
2828 {
2829 + const unsigned int last_max = i->max;
2830 +
2831 if (snd_BUG_ON(snd_interval_empty(i)))
2832 return -EINVAL;
2833 if (snd_interval_single(i))
2834 return 0;
2835 i->max = i->min;
2836 - i->openmax = i->openmin;
2837 - if (i->openmax)
2838 + if (i->openmin)
2839 i->max++;
2840 + /* only exclude max value if also excluded before refine */
2841 + i->openmax = (i->openmax && i->max >= last_max);
2842 return 1;
2843 }
2844
2845 static int snd_interval_refine_last(struct snd_interval *i)
2846 {
2847 + const unsigned int last_min = i->min;
2848 +
2849 if (snd_BUG_ON(snd_interval_empty(i)))
2850 return -EINVAL;
2851 if (snd_interval_single(i))
2852 return 0;
2853 i->min = i->max;
2854 - i->openmin = i->openmax;
2855 - if (i->openmin)
2856 + if (i->openmax)
2857 i->min--;
2858 + /* only exclude min value if also excluded before refine */
2859 + i->openmin = (i->openmin && i->min <= last_min);
2860 return 1;
2861 }
2862
2863 diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c
2864 index a31ea6c22d19..2d7379dec1f0 100644
2865 --- a/sound/isa/msnd/msnd_pinnacle.c
2866 +++ b/sound/isa/msnd/msnd_pinnacle.c
2867 @@ -82,10 +82,10 @@
2868
2869 static void set_default_audio_parameters(struct snd_msnd *chip)
2870 {
2871 - chip->play_sample_size = DEFSAMPLESIZE;
2872 + chip->play_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
2873 chip->play_sample_rate = DEFSAMPLERATE;
2874 chip->play_channels = DEFCHANNELS;
2875 - chip->capture_sample_size = DEFSAMPLESIZE;
2876 + chip->capture_sample_size = snd_pcm_format_width(DEFSAMPLESIZE);
2877 chip->capture_sample_rate = DEFSAMPLERATE;
2878 chip->capture_channels = DEFCHANNELS;
2879 }
2880 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
2881 index 69bf5cf1e91e..15cbe2565703 100644
2882 --- a/sound/usb/quirks-table.h
2883 +++ b/sound/usb/quirks-table.h
2884 @@ -2875,7 +2875,8 @@ YAMAHA_DEVICE(0x7010, "UB99"),
2885 */
2886
2887 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2888 - USB_DEVICE_VENDOR_SPEC(vid, pid), \
2889 + .idVendor = vid, \
2890 + .idProduct = pid, \
2891 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2892 USB_DEVICE_ID_MATCH_INT_CLASS | \
2893 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2894 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
2895 index 60a94b3e532e..177480066816 100644
2896 --- a/tools/hv/hv_kvp_daemon.c
2897 +++ b/tools/hv/hv_kvp_daemon.c
2898 @@ -286,7 +286,7 @@ static int kvp_key_delete(int pool, const __u8 *key, int key_size)
2899 * Found a match; just move the remaining
2900 * entries up.
2901 */
2902 - if (i == num_records) {
2903 + if (i == (num_records - 1)) {
2904 kvp_file_info[pool].num_records--;
2905 kvp_update_file(pool);
2906 return 0;
2907 diff --git a/tools/perf/arch/powerpc/util/skip-callchain-idx.c b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
2908 index bd630c222e65..9a53f6e9ef43 100644
2909 --- a/tools/perf/arch/powerpc/util/skip-callchain-idx.c
2910 +++ b/tools/perf/arch/powerpc/util/skip-callchain-idx.c
2911 @@ -58,9 +58,13 @@ static int check_return_reg(int ra_regno, Dwarf_Frame *frame)
2912 }
2913
2914 /*
2915 - * Check if return address is on the stack.
2916 + * Check if return address is on the stack. If return address
2917 + * is in a register (typically R0), it is yet to be saved on
2918 + * the stack.
2919 */
2920 - if (nops != 0 || ops != NULL)
2921 + if ((nops != 0 || ops != NULL) &&
2922 + !(nops == 1 && ops[0].atom == DW_OP_regx &&
2923 + ops[0].number2 == 0 && ops[0].offset == 0))
2924 return 0;
2925
2926 /*
2927 @@ -246,7 +250,7 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain)
2928 if (!chain || chain->nr < 3)
2929 return skip_slot;
2930
2931 - ip = chain->ips[2];
2932 + ip = chain->ips[1];
2933
2934 thread__find_addr_location(thread, PERF_RECORD_MISC_USER,
2935 MAP__FUNCTION, ip, &al);
2936 diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
2937 index 778668a2a966..ade7213943ad 100644
2938 --- a/tools/perf/tests/builtin-test.c
2939 +++ b/tools/perf/tests/builtin-test.c
2940 @@ -413,7 +413,7 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
2941 for (subi = 0; subi < subn; subi++) {
2942 pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
2943 t->subtest.get_desc(subi));
2944 - err = test_and_print(t, skip, subi);
2945 + err = test_and_print(t, skip, subi + 1);
2946 if (err != TEST_OK && t->subtest.skip_if_fail)
2947 skip = true;
2948 }
2949 diff --git a/tools/testing/selftests/timers/raw_skew.c b/tools/testing/selftests/timers/raw_skew.c
2950 index 30906bfd9c1b..0ab937a17ebb 100644
2951 --- a/tools/testing/selftests/timers/raw_skew.c
2952 +++ b/tools/testing/selftests/timers/raw_skew.c
2953 @@ -146,6 +146,11 @@ int main(int argv, char **argc)
2954 printf(" %lld.%i(act)", ppm/1000, abs((int)(ppm%1000)));
2955
2956 if (llabs(eppm - ppm) > 1000) {
2957 + if (tx1.offset || tx2.offset ||
2958 + tx1.freq != tx2.freq || tx1.tick != tx2.tick) {
2959 + printf(" [SKIP]\n");
2960 + return ksft_exit_skip("The clock was adjusted externally. Shutdown NTPd or other time sync daemons\n");
2961 + }
2962 printf(" [FAILED]\n");
2963 return ksft_exit_fail();
2964 }
2965 diff --git a/virt/kvm/arm/vgic/vgic-init.c b/virt/kvm/arm/vgic/vgic-init.c
2966 index 539d3f5cb619..80d8888549ee 100644
2967 --- a/virt/kvm/arm/vgic/vgic-init.c
2968 +++ b/virt/kvm/arm/vgic/vgic-init.c
2969 @@ -241,6 +241,10 @@ int vgic_init(struct kvm *kvm)
2970 if (vgic_initialized(kvm))
2971 return 0;
2972
2973 + /* Are we also in the middle of creating a VCPU? */
2974 + if (kvm->created_vcpus != atomic_read(&kvm->online_vcpus))
2975 + return -EBUSY;
2976 +
2977 /* freeze the number of spis */
2978 if (!dist->nr_spis)
2979 dist->nr_spis = VGIC_NR_IRQS_LEGACY - VGIC_NR_PRIVATE_IRQS;