Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3229 - (hide 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 niro 3229 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;