Annotation of /trunk/kernel-alx/patches-4.9/0228-4.9.129-all-fixes.patch
Parent Directory | Revision Log
Revision 3229 -
(hide annotations)
(download)
Mon Oct 1 09:59:45 2018 UTC (5 years, 11 months ago) by niro
File size: 100794 byte(s)
Mon Oct 1 09:59:45 2018 UTC (5 years, 11 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; |