Annotation of /trunk/kernel-alx/patches-4.9/0185-4.9.86-all-fixes.patch
Parent Directory | Revision Log
Revision 3205 -
(hide annotations)
(download)
Wed Aug 8 14:26:12 2018 UTC (6 years, 1 month ago) by niro
File size: 56585 byte(s)
Wed Aug 8 14:26:12 2018 UTC (6 years, 1 month ago) by niro
File size: 56585 byte(s)
-linux-4.9.86
1 | niro | 3205 | diff --git a/Makefile b/Makefile |
2 | index 77deaa395d69..e918d25e95bb 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 85 | ||
9 | +SUBLEVEL = 86 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm/boot/dts/ls1021a-qds.dts b/arch/arm/boot/dts/ls1021a-qds.dts | ||
14 | index 940875316d0f..67b4de0e3439 100644 | ||
15 | --- a/arch/arm/boot/dts/ls1021a-qds.dts | ||
16 | +++ b/arch/arm/boot/dts/ls1021a-qds.dts | ||
17 | @@ -215,7 +215,7 @@ | ||
18 | reg = <0x2a>; | ||
19 | VDDA-supply = <®_3p3v>; | ||
20 | VDDIO-supply = <®_3p3v>; | ||
21 | - clocks = <&sys_mclk 1>; | ||
22 | + clocks = <&sys_mclk>; | ||
23 | }; | ||
24 | }; | ||
25 | }; | ||
26 | diff --git a/arch/arm/boot/dts/ls1021a-twr.dts b/arch/arm/boot/dts/ls1021a-twr.dts | ||
27 | index a8b148ad1dd2..44715c8ef756 100644 | ||
28 | --- a/arch/arm/boot/dts/ls1021a-twr.dts | ||
29 | +++ b/arch/arm/boot/dts/ls1021a-twr.dts | ||
30 | @@ -187,7 +187,7 @@ | ||
31 | reg = <0x0a>; | ||
32 | VDDA-supply = <®_3p3v>; | ||
33 | VDDIO-supply = <®_3p3v>; | ||
34 | - clocks = <&sys_mclk 1>; | ||
35 | + clocks = <&sys_mclk>; | ||
36 | }; | ||
37 | }; | ||
38 | |||
39 | diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c | ||
40 | index 2a35c1963f6d..7f868d9bb5ed 100644 | ||
41 | --- a/arch/arm/kvm/mmu.c | ||
42 | +++ b/arch/arm/kvm/mmu.c | ||
43 | @@ -1284,7 +1284,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, | ||
44 | return -EFAULT; | ||
45 | } | ||
46 | |||
47 | - if (vma_kernel_pagesize(vma) && !logging_active) { | ||
48 | + if (vma_kernel_pagesize(vma) == PMD_SIZE && !logging_active) { | ||
49 | hugetlb = true; | ||
50 | gfn = (fault_ipa & PMD_MASK) >> PAGE_SHIFT; | ||
51 | } else { | ||
52 | diff --git a/arch/arm/lib/csumpartialcopyuser.S b/arch/arm/lib/csumpartialcopyuser.S | ||
53 | index 1712f132b80d..b83fdc06286a 100644 | ||
54 | --- a/arch/arm/lib/csumpartialcopyuser.S | ||
55 | +++ b/arch/arm/lib/csumpartialcopyuser.S | ||
56 | @@ -85,7 +85,11 @@ | ||
57 | .pushsection .text.fixup,"ax" | ||
58 | .align 4 | ||
59 | 9001: mov r4, #-EFAULT | ||
60 | +#ifdef CONFIG_CPU_SW_DOMAIN_PAN | ||
61 | + ldr r5, [sp, #9*4] @ *err_ptr | ||
62 | +#else | ||
63 | ldr r5, [sp, #8*4] @ *err_ptr | ||
64 | +#endif | ||
65 | str r4, [r5] | ||
66 | ldmia sp, {r1, r2} @ retrieve dst, len | ||
67 | add r2, r2, r1 | ||
68 | diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile | ||
69 | index 0344e575f522..fba4ca56e46a 100644 | ||
70 | --- a/arch/mips/lib/Makefile | ||
71 | +++ b/arch/mips/lib/Makefile | ||
72 | @@ -15,4 +15,5 @@ obj-$(CONFIG_CPU_R3000) += r3k_dump_tlb.o | ||
73 | obj-$(CONFIG_CPU_TX39XX) += r3k_dump_tlb.o | ||
74 | |||
75 | # libgcc-style stuff needed in the kernel | ||
76 | -obj-y += ashldi3.o ashrdi3.o bswapsi.o bswapdi.o cmpdi2.o lshrdi3.o ucmpdi2.o | ||
77 | +obj-y += ashldi3.o ashrdi3.o bswapsi.o bswapdi.o cmpdi2.o lshrdi3.o multi3.o \ | ||
78 | + ucmpdi2.o | ||
79 | diff --git a/arch/mips/lib/libgcc.h b/arch/mips/lib/libgcc.h | ||
80 | index 05909d58e2fe..56ea0df60a44 100644 | ||
81 | --- a/arch/mips/lib/libgcc.h | ||
82 | +++ b/arch/mips/lib/libgcc.h | ||
83 | @@ -9,10 +9,18 @@ typedef int word_type __attribute__ ((mode (__word__))); | ||
84 | struct DWstruct { | ||
85 | int high, low; | ||
86 | }; | ||
87 | + | ||
88 | +struct TWstruct { | ||
89 | + long long high, low; | ||
90 | +}; | ||
91 | #elif defined(__LITTLE_ENDIAN) | ||
92 | struct DWstruct { | ||
93 | int low, high; | ||
94 | }; | ||
95 | + | ||
96 | +struct TWstruct { | ||
97 | + long long low, high; | ||
98 | +}; | ||
99 | #else | ||
100 | #error I feel sick. | ||
101 | #endif | ||
102 | @@ -22,4 +30,13 @@ typedef union { | ||
103 | long long ll; | ||
104 | } DWunion; | ||
105 | |||
106 | +#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) | ||
107 | +typedef int ti_type __attribute__((mode(TI))); | ||
108 | + | ||
109 | +typedef union { | ||
110 | + struct TWstruct s; | ||
111 | + ti_type ti; | ||
112 | +} TWunion; | ||
113 | +#endif | ||
114 | + | ||
115 | #endif /* __ASM_LIBGCC_H */ | ||
116 | diff --git a/arch/mips/lib/multi3.c b/arch/mips/lib/multi3.c | ||
117 | new file mode 100644 | ||
118 | index 000000000000..111ad475aa0c | ||
119 | --- /dev/null | ||
120 | +++ b/arch/mips/lib/multi3.c | ||
121 | @@ -0,0 +1,54 @@ | ||
122 | +// SPDX-License-Identifier: GPL-2.0 | ||
123 | +#include <linux/export.h> | ||
124 | + | ||
125 | +#include "libgcc.h" | ||
126 | + | ||
127 | +/* | ||
128 | + * GCC 7 suboptimally generates __multi3 calls for mips64r6, so for that | ||
129 | + * specific case only we'll implement it here. | ||
130 | + * | ||
131 | + * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82981 | ||
132 | + */ | ||
133 | +#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) && (__GNUC__ == 7) | ||
134 | + | ||
135 | +/* multiply 64-bit values, low 64-bits returned */ | ||
136 | +static inline long long notrace dmulu(long long a, long long b) | ||
137 | +{ | ||
138 | + long long res; | ||
139 | + | ||
140 | + asm ("dmulu %0,%1,%2" : "=r" (res) : "r" (a), "r" (b)); | ||
141 | + return res; | ||
142 | +} | ||
143 | + | ||
144 | +/* multiply 64-bit unsigned values, high 64-bits of 128-bit result returned */ | ||
145 | +static inline long long notrace dmuhu(long long a, long long b) | ||
146 | +{ | ||
147 | + long long res; | ||
148 | + | ||
149 | + asm ("dmuhu %0,%1,%2" : "=r" (res) : "r" (a), "r" (b)); | ||
150 | + return res; | ||
151 | +} | ||
152 | + | ||
153 | +/* multiply 128-bit values, low 128-bits returned */ | ||
154 | +ti_type notrace __multi3(ti_type a, ti_type b) | ||
155 | +{ | ||
156 | + TWunion res, aa, bb; | ||
157 | + | ||
158 | + aa.ti = a; | ||
159 | + bb.ti = b; | ||
160 | + | ||
161 | + /* | ||
162 | + * a * b = (a.lo * b.lo) | ||
163 | + * + 2^64 * (a.hi * b.lo + a.lo * b.hi) | ||
164 | + * [+ 2^128 * (a.hi * b.hi)] | ||
165 | + */ | ||
166 | + res.s.low = dmulu(aa.s.low, bb.s.low); | ||
167 | + res.s.high = dmuhu(aa.s.low, bb.s.low); | ||
168 | + res.s.high += dmulu(aa.s.high, bb.s.low); | ||
169 | + res.s.high += dmulu(aa.s.low, bb.s.high); | ||
170 | + | ||
171 | + return res.ti; | ||
172 | +} | ||
173 | +EXPORT_SYMBOL(__multi3); | ||
174 | + | ||
175 | +#endif /* 64BIT && CPU_MIPSR6 && GCC7 */ | ||
176 | diff --git a/arch/sh/boards/mach-se/770x/setup.c b/arch/sh/boards/mach-se/770x/setup.c | ||
177 | index 658326f44df8..5e0267624d8d 100644 | ||
178 | --- a/arch/sh/boards/mach-se/770x/setup.c | ||
179 | +++ b/arch/sh/boards/mach-se/770x/setup.c | ||
180 | @@ -8,6 +8,7 @@ | ||
181 | */ | ||
182 | #include <linux/init.h> | ||
183 | #include <linux/platform_device.h> | ||
184 | +#include <linux/sh_eth.h> | ||
185 | #include <mach-se/mach/se.h> | ||
186 | #include <mach-se/mach/mrshpc.h> | ||
187 | #include <asm/machvec.h> | ||
188 | @@ -114,6 +115,11 @@ static struct platform_device heartbeat_device = { | ||
189 | #if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\ | ||
190 | defined(CONFIG_CPU_SUBTYPE_SH7712) | ||
191 | /* SH771X Ethernet driver */ | ||
192 | +static struct sh_eth_plat_data sh_eth_plat = { | ||
193 | + .phy = PHY_ID, | ||
194 | + .phy_interface = PHY_INTERFACE_MODE_MII, | ||
195 | +}; | ||
196 | + | ||
197 | static struct resource sh_eth0_resources[] = { | ||
198 | [0] = { | ||
199 | .start = SH_ETH0_BASE, | ||
200 | @@ -131,7 +137,7 @@ static struct platform_device sh_eth0_device = { | ||
201 | .name = "sh771x-ether", | ||
202 | .id = 0, | ||
203 | .dev = { | ||
204 | - .platform_data = PHY_ID, | ||
205 | + .platform_data = &sh_eth_plat, | ||
206 | }, | ||
207 | .num_resources = ARRAY_SIZE(sh_eth0_resources), | ||
208 | .resource = sh_eth0_resources, | ||
209 | @@ -154,7 +160,7 @@ static struct platform_device sh_eth1_device = { | ||
210 | .name = "sh771x-ether", | ||
211 | .id = 1, | ||
212 | .dev = { | ||
213 | - .platform_data = PHY_ID, | ||
214 | + .platform_data = &sh_eth_plat, | ||
215 | }, | ||
216 | .num_resources = ARRAY_SIZE(sh_eth1_resources), | ||
217 | .resource = sh_eth1_resources, | ||
218 | diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h | ||
219 | index 7bb29a416b77..f35f246a26bf 100644 | ||
220 | --- a/arch/x86/include/asm/asm.h | ||
221 | +++ b/arch/x86/include/asm/asm.h | ||
222 | @@ -128,6 +128,7 @@ | ||
223 | #endif | ||
224 | |||
225 | #ifndef __ASSEMBLY__ | ||
226 | +#ifndef __BPF__ | ||
227 | /* | ||
228 | * This output constraint should be used for any inline asm which has a "call" | ||
229 | * instruction. Otherwise the asm may be inserted before the frame pointer | ||
230 | @@ -137,5 +138,6 @@ | ||
231 | register unsigned long current_stack_pointer asm(_ASM_SP); | ||
232 | #define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer) | ||
233 | #endif | ||
234 | +#endif | ||
235 | |||
236 | #endif /* _ASM_X86_ASM_H */ | ||
237 | diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c | ||
238 | index 6775f2c74e25..c7568869284e 100644 | ||
239 | --- a/drivers/dma/fsl-edma.c | ||
240 | +++ b/drivers/dma/fsl-edma.c | ||
241 | @@ -863,11 +863,11 @@ static void fsl_edma_irq_exit( | ||
242 | } | ||
243 | } | ||
244 | |||
245 | -static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma) | ||
246 | +static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_clocks) | ||
247 | { | ||
248 | int i; | ||
249 | |||
250 | - for (i = 0; i < DMAMUX_NR; i++) | ||
251 | + for (i = 0; i < nr_clocks; i++) | ||
252 | clk_disable_unprepare(fsl_edma->muxclk[i]); | ||
253 | } | ||
254 | |||
255 | @@ -904,25 +904,25 @@ static int fsl_edma_probe(struct platform_device *pdev) | ||
256 | |||
257 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1 + i); | ||
258 | fsl_edma->muxbase[i] = devm_ioremap_resource(&pdev->dev, res); | ||
259 | - if (IS_ERR(fsl_edma->muxbase[i])) | ||
260 | + if (IS_ERR(fsl_edma->muxbase[i])) { | ||
261 | + /* on error: disable all previously enabled clks */ | ||
262 | + fsl_disable_clocks(fsl_edma, i); | ||
263 | return PTR_ERR(fsl_edma->muxbase[i]); | ||
264 | + } | ||
265 | |||
266 | sprintf(clkname, "dmamux%d", i); | ||
267 | fsl_edma->muxclk[i] = devm_clk_get(&pdev->dev, clkname); | ||
268 | if (IS_ERR(fsl_edma->muxclk[i])) { | ||
269 | dev_err(&pdev->dev, "Missing DMAMUX block clock.\n"); | ||
270 | + /* on error: disable all previously enabled clks */ | ||
271 | + fsl_disable_clocks(fsl_edma, i); | ||
272 | return PTR_ERR(fsl_edma->muxclk[i]); | ||
273 | } | ||
274 | |||
275 | ret = clk_prepare_enable(fsl_edma->muxclk[i]); | ||
276 | - if (ret) { | ||
277 | - /* disable only clks which were enabled on error */ | ||
278 | - for (; i >= 0; i--) | ||
279 | - clk_disable_unprepare(fsl_edma->muxclk[i]); | ||
280 | - | ||
281 | - dev_err(&pdev->dev, "DMAMUX clk block failed.\n"); | ||
282 | - return ret; | ||
283 | - } | ||
284 | + if (ret) | ||
285 | + /* on error: disable all previously enabled clks */ | ||
286 | + fsl_disable_clocks(fsl_edma, i); | ||
287 | |||
288 | } | ||
289 | |||
290 | @@ -976,7 +976,7 @@ static int fsl_edma_probe(struct platform_device *pdev) | ||
291 | if (ret) { | ||
292 | dev_err(&pdev->dev, | ||
293 | "Can't register Freescale eDMA engine. (%d)\n", ret); | ||
294 | - fsl_disable_clocks(fsl_edma); | ||
295 | + fsl_disable_clocks(fsl_edma, DMAMUX_NR); | ||
296 | return ret; | ||
297 | } | ||
298 | |||
299 | @@ -985,7 +985,7 @@ static int fsl_edma_probe(struct platform_device *pdev) | ||
300 | dev_err(&pdev->dev, | ||
301 | "Can't register Freescale eDMA of_dma. (%d)\n", ret); | ||
302 | dma_async_device_unregister(&fsl_edma->dma_dev); | ||
303 | - fsl_disable_clocks(fsl_edma); | ||
304 | + fsl_disable_clocks(fsl_edma, DMAMUX_NR); | ||
305 | return ret; | ||
306 | } | ||
307 | |||
308 | @@ -1015,7 +1015,7 @@ static int fsl_edma_remove(struct platform_device *pdev) | ||
309 | fsl_edma_cleanup_vchan(&fsl_edma->dma_dev); | ||
310 | of_dma_controller_free(np); | ||
311 | dma_async_device_unregister(&fsl_edma->dma_dev); | ||
312 | - fsl_disable_clocks(fsl_edma); | ||
313 | + fsl_disable_clocks(fsl_edma, DMAMUX_NR); | ||
314 | |||
315 | return 0; | ||
316 | } | ||
317 | diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c | ||
318 | index a4cb82495cee..245c946ea661 100644 | ||
319 | --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c | ||
320 | +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c | ||
321 | @@ -136,6 +136,13 @@ nvkm_pci_init(struct nvkm_subdev *subdev) | ||
322 | return ret; | ||
323 | |||
324 | pci->irq = pdev->irq; | ||
325 | + | ||
326 | + /* Ensure MSI interrupts are armed, for the case where there are | ||
327 | + * already interrupts pending (for whatever reason) at load time. | ||
328 | + */ | ||
329 | + if (pci->msi) | ||
330 | + pci->func->msi_rearm(pci); | ||
331 | + | ||
332 | return ret; | ||
333 | } | ||
334 | |||
335 | diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c | ||
336 | index ddd6badd0eee..c756b2b7f5dc 100644 | ||
337 | --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c | ||
338 | +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c | ||
339 | @@ -818,6 +818,8 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages) | ||
340 | pr_info("Initializing pool allocator\n"); | ||
341 | |||
342 | _manager = kzalloc(sizeof(*_manager), GFP_KERNEL); | ||
343 | + if (!_manager) | ||
344 | + return -ENOMEM; | ||
345 | |||
346 | ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc"); | ||
347 | |||
348 | diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c | ||
349 | index 809f4d4e93a0..340e037b3224 100644 | ||
350 | --- a/drivers/i2c/busses/i2c-designware-core.c | ||
351 | +++ b/drivers/i2c/busses/i2c-designware-core.c | ||
352 | @@ -507,7 +507,7 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev) | ||
353 | i2c_dw_disable_int(dev); | ||
354 | |||
355 | /* Enable the adapter */ | ||
356 | - __i2c_dw_enable(dev, true); | ||
357 | + __i2c_dw_enable_and_wait(dev, true); | ||
358 | |||
359 | /* Clear and enable interrupts */ | ||
360 | dw_readl(dev, DW_IC_CLR_INTR); | ||
361 | diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c | ||
362 | index 5d73989d9771..ae41623e0f13 100644 | ||
363 | --- a/drivers/infiniband/hw/mlx4/mr.c | ||
364 | +++ b/drivers/infiniband/hw/mlx4/mr.c | ||
365 | @@ -406,7 +406,6 @@ struct ib_mr *mlx4_ib_alloc_mr(struct ib_pd *pd, | ||
366 | goto err_free_mr; | ||
367 | |||
368 | mr->max_pages = max_num_sg; | ||
369 | - | ||
370 | err = mlx4_mr_enable(dev->dev, &mr->mmr); | ||
371 | if (err) | ||
372 | goto err_free_pl; | ||
373 | @@ -417,6 +416,7 @@ struct ib_mr *mlx4_ib_alloc_mr(struct ib_pd *pd, | ||
374 | return &mr->ibmr; | ||
375 | |||
376 | err_free_pl: | ||
377 | + mr->ibmr.device = pd->device; | ||
378 | mlx4_free_priv_pages(mr); | ||
379 | err_free_mr: | ||
380 | (void) mlx4_mr_free(dev->dev, &mr->mmr); | ||
381 | diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c | ||
382 | index 0a260a06876d..c7d5786d366b 100644 | ||
383 | --- a/drivers/infiniband/hw/mlx5/mr.c | ||
384 | +++ b/drivers/infiniband/hw/mlx5/mr.c | ||
385 | @@ -1648,6 +1648,7 @@ struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd, | ||
386 | MLX5_SET(mkc, mkc, access_mode, mr->access_mode); | ||
387 | MLX5_SET(mkc, mkc, umr_en, 1); | ||
388 | |||
389 | + mr->ibmr.device = pd->device; | ||
390 | err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, inlen); | ||
391 | if (err) | ||
392 | goto err_destroy_psv; | ||
393 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
394 | index 183db0cd849e..e37e918cb935 100644 | ||
395 | --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
396 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | ||
397 | @@ -919,8 +919,8 @@ static int path_rec_start(struct net_device *dev, | ||
398 | return 0; | ||
399 | } | ||
400 | |||
401 | -static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
402 | - struct net_device *dev) | ||
403 | +static struct ipoib_neigh *neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
404 | + struct net_device *dev) | ||
405 | { | ||
406 | struct ipoib_dev_priv *priv = netdev_priv(dev); | ||
407 | struct ipoib_path *path; | ||
408 | @@ -933,7 +933,15 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
409 | spin_unlock_irqrestore(&priv->lock, flags); | ||
410 | ++dev->stats.tx_dropped; | ||
411 | dev_kfree_skb_any(skb); | ||
412 | - return; | ||
413 | + return NULL; | ||
414 | + } | ||
415 | + | ||
416 | + /* To avoid race condition, make sure that the | ||
417 | + * neigh will be added only once. | ||
418 | + */ | ||
419 | + if (unlikely(!list_empty(&neigh->list))) { | ||
420 | + spin_unlock_irqrestore(&priv->lock, flags); | ||
421 | + return neigh; | ||
422 | } | ||
423 | |||
424 | path = __path_find(dev, daddr + 4); | ||
425 | @@ -971,7 +979,7 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
426 | spin_unlock_irqrestore(&priv->lock, flags); | ||
427 | ipoib_send(dev, skb, path->ah, IPOIB_QPN(daddr)); | ||
428 | ipoib_neigh_put(neigh); | ||
429 | - return; | ||
430 | + return NULL; | ||
431 | } | ||
432 | } else { | ||
433 | neigh->ah = NULL; | ||
434 | @@ -988,7 +996,7 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
435 | |||
436 | spin_unlock_irqrestore(&priv->lock, flags); | ||
437 | ipoib_neigh_put(neigh); | ||
438 | - return; | ||
439 | + return NULL; | ||
440 | |||
441 | err_path: | ||
442 | ipoib_neigh_free(neigh); | ||
443 | @@ -998,6 +1006,8 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr, | ||
444 | |||
445 | spin_unlock_irqrestore(&priv->lock, flags); | ||
446 | ipoib_neigh_put(neigh); | ||
447 | + | ||
448 | + return NULL; | ||
449 | } | ||
450 | |||
451 | static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev, | ||
452 | @@ -1103,8 +1113,9 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
453 | case htons(ETH_P_TIPC): | ||
454 | neigh = ipoib_neigh_get(dev, phdr->hwaddr); | ||
455 | if (unlikely(!neigh)) { | ||
456 | - neigh_add_path(skb, phdr->hwaddr, dev); | ||
457 | - return NETDEV_TX_OK; | ||
458 | + neigh = neigh_add_path(skb, phdr->hwaddr, dev); | ||
459 | + if (likely(!neigh)) | ||
460 | + return NETDEV_TX_OK; | ||
461 | } | ||
462 | break; | ||
463 | case htons(ETH_P_ARP): | ||
464 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c | ||
465 | index fddff403d5d2..6b6826f3e446 100644 | ||
466 | --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c | ||
467 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c | ||
468 | @@ -818,7 +818,10 @@ void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb) | ||
469 | spin_lock_irqsave(&priv->lock, flags); | ||
470 | if (!neigh) { | ||
471 | neigh = ipoib_neigh_alloc(daddr, dev); | ||
472 | - if (neigh) { | ||
473 | + /* Make sure that the neigh will be added only | ||
474 | + * once to mcast list. | ||
475 | + */ | ||
476 | + if (neigh && list_empty(&neigh->list)) { | ||
477 | kref_get(&mcast->ah->ref); | ||
478 | neigh->ah = mcast->ah; | ||
479 | list_add_tail(&neigh->list, &mcast->neigh_list); | ||
480 | diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c | ||
481 | index 3bce44893021..d70d4a5273b8 100644 | ||
482 | --- a/drivers/leds/led-core.c | ||
483 | +++ b/drivers/leds/led-core.c | ||
484 | @@ -186,7 +186,7 @@ void led_blink_set(struct led_classdev *led_cdev, | ||
485 | unsigned long *delay_on, | ||
486 | unsigned long *delay_off) | ||
487 | { | ||
488 | - del_timer_sync(&led_cdev->blink_timer); | ||
489 | + led_stop_software_blink(led_cdev); | ||
490 | |||
491 | led_cdev->flags &= ~LED_BLINK_ONESHOT; | ||
492 | led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; | ||
493 | diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c | ||
494 | index 1a4a790054e4..ef9a6b22c9fa 100644 | ||
495 | --- a/drivers/mtd/nand/brcmnand/brcmnand.c | ||
496 | +++ b/drivers/mtd/nand/brcmnand/brcmnand.c | ||
497 | @@ -1763,7 +1763,7 @@ static int brcmnand_read(struct mtd_info *mtd, struct nand_chip *chip, | ||
498 | err = brcmstb_nand_verify_erased_page(mtd, chip, buf, | ||
499 | addr); | ||
500 | /* erased page bitflips corrected */ | ||
501 | - if (err > 0) | ||
502 | + if (err >= 0) | ||
503 | return err; | ||
504 | } | ||
505 | |||
506 | diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
507 | index 6c062b8251d2..427039b77668 100644 | ||
508 | --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
509 | +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
510 | @@ -1059,9 +1059,6 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip, | ||
511 | return ret; | ||
512 | } | ||
513 | |||
514 | - /* handle the block mark swapping */ | ||
515 | - block_mark_swapping(this, payload_virt, auxiliary_virt); | ||
516 | - | ||
517 | /* Loop over status bytes, accumulating ECC status. */ | ||
518 | status = auxiliary_virt + nfc_geo->auxiliary_status_offset; | ||
519 | |||
520 | @@ -1150,6 +1147,9 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip, | ||
521 | max_bitflips = max_t(unsigned int, max_bitflips, *status); | ||
522 | } | ||
523 | |||
524 | + /* handle the block mark swapping */ | ||
525 | + block_mark_swapping(this, buf, auxiliary_virt); | ||
526 | + | ||
527 | if (oob_required) { | ||
528 | /* | ||
529 | * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob() | ||
530 | diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c | ||
531 | index 16f7cadda5c3..47f43bdecd51 100644 | ||
532 | --- a/drivers/net/can/flexcan.c | ||
533 | +++ b/drivers/net/can/flexcan.c | ||
534 | @@ -493,7 +493,7 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
535 | data = be32_to_cpup((__be32 *)&cf->data[0]); | ||
536 | flexcan_write(data, ®s->mb[FLEXCAN_TX_BUF_ID].data[0]); | ||
537 | } | ||
538 | - if (cf->can_dlc > 3) { | ||
539 | + if (cf->can_dlc > 4) { | ||
540 | data = be32_to_cpup((__be32 *)&cf->data[4]); | ||
541 | flexcan_write(data, ®s->mb[FLEXCAN_TX_BUF_ID].data[1]); | ||
542 | } | ||
543 | diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c | ||
544 | index be865b4dada2..aba4853e6b70 100644 | ||
545 | --- a/drivers/net/ethernet/arc/emac_main.c | ||
546 | +++ b/drivers/net/ethernet/arc/emac_main.c | ||
547 | @@ -210,39 +210,48 @@ static int arc_emac_rx(struct net_device *ndev, int budget) | ||
548 | continue; | ||
549 | } | ||
550 | |||
551 | - pktlen = info & LEN_MASK; | ||
552 | - stats->rx_packets++; | ||
553 | - stats->rx_bytes += pktlen; | ||
554 | - skb = rx_buff->skb; | ||
555 | - skb_put(skb, pktlen); | ||
556 | - skb->dev = ndev; | ||
557 | - skb->protocol = eth_type_trans(skb, ndev); | ||
558 | - | ||
559 | - dma_unmap_single(&ndev->dev, dma_unmap_addr(rx_buff, addr), | ||
560 | - dma_unmap_len(rx_buff, len), DMA_FROM_DEVICE); | ||
561 | - | ||
562 | - /* Prepare the BD for next cycle */ | ||
563 | - rx_buff->skb = netdev_alloc_skb_ip_align(ndev, | ||
564 | - EMAC_BUFFER_SIZE); | ||
565 | - if (unlikely(!rx_buff->skb)) { | ||
566 | + /* Prepare the BD for next cycle. netif_receive_skb() | ||
567 | + * only if new skb was allocated and mapped to avoid holes | ||
568 | + * in the RX fifo. | ||
569 | + */ | ||
570 | + skb = netdev_alloc_skb_ip_align(ndev, EMAC_BUFFER_SIZE); | ||
571 | + if (unlikely(!skb)) { | ||
572 | + if (net_ratelimit()) | ||
573 | + netdev_err(ndev, "cannot allocate skb\n"); | ||
574 | + /* Return ownership to EMAC */ | ||
575 | + rxbd->info = cpu_to_le32(FOR_EMAC | EMAC_BUFFER_SIZE); | ||
576 | stats->rx_errors++; | ||
577 | - /* Because receive_skb is below, increment rx_dropped */ | ||
578 | stats->rx_dropped++; | ||
579 | continue; | ||
580 | } | ||
581 | |||
582 | - /* receive_skb only if new skb was allocated to avoid holes */ | ||
583 | - netif_receive_skb(skb); | ||
584 | - | ||
585 | - addr = dma_map_single(&ndev->dev, (void *)rx_buff->skb->data, | ||
586 | + addr = dma_map_single(&ndev->dev, (void *)skb->data, | ||
587 | EMAC_BUFFER_SIZE, DMA_FROM_DEVICE); | ||
588 | if (dma_mapping_error(&ndev->dev, addr)) { | ||
589 | if (net_ratelimit()) | ||
590 | - netdev_err(ndev, "cannot dma map\n"); | ||
591 | - dev_kfree_skb(rx_buff->skb); | ||
592 | + netdev_err(ndev, "cannot map dma buffer\n"); | ||
593 | + dev_kfree_skb(skb); | ||
594 | + /* Return ownership to EMAC */ | ||
595 | + rxbd->info = cpu_to_le32(FOR_EMAC | EMAC_BUFFER_SIZE); | ||
596 | stats->rx_errors++; | ||
597 | + stats->rx_dropped++; | ||
598 | continue; | ||
599 | } | ||
600 | + | ||
601 | + /* unmap previosly mapped skb */ | ||
602 | + dma_unmap_single(&ndev->dev, dma_unmap_addr(rx_buff, addr), | ||
603 | + dma_unmap_len(rx_buff, len), DMA_FROM_DEVICE); | ||
604 | + | ||
605 | + pktlen = info & LEN_MASK; | ||
606 | + stats->rx_packets++; | ||
607 | + stats->rx_bytes += pktlen; | ||
608 | + skb_put(rx_buff->skb, pktlen); | ||
609 | + rx_buff->skb->dev = ndev; | ||
610 | + rx_buff->skb->protocol = eth_type_trans(rx_buff->skb, ndev); | ||
611 | + | ||
612 | + netif_receive_skb(rx_buff->skb); | ||
613 | + | ||
614 | + rx_buff->skb = skb; | ||
615 | dma_unmap_addr_set(rx_buff, addr, addr); | ||
616 | dma_unmap_len_set(rx_buff, len, EMAC_BUFFER_SIZE); | ||
617 | |||
618 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | ||
619 | index 0a5ee1d973ac..596f88b693ef 100644 | ||
620 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | ||
621 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | ||
622 | @@ -3034,7 +3034,7 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link) | ||
623 | |||
624 | del_timer_sync(&bp->timer); | ||
625 | |||
626 | - if (IS_PF(bp)) { | ||
627 | + if (IS_PF(bp) && !BP_NOMCP(bp)) { | ||
628 | /* Set ALWAYS_ALIVE bit in shmem */ | ||
629 | bp->fw_drv_pulse_wr_seq |= DRV_PULSE_ALWAYS_ALIVE; | ||
630 | bnx2x_drv_pulse(bp); | ||
631 | @@ -3120,7 +3120,7 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link) | ||
632 | bp->cnic_loaded = false; | ||
633 | |||
634 | /* Clear driver version indication in shmem */ | ||
635 | - if (IS_PF(bp)) | ||
636 | + if (IS_PF(bp) && !BP_NOMCP(bp)) | ||
637 | bnx2x_update_mng_version(bp); | ||
638 | |||
639 | /* Check if there are pending parity attentions. If there are - set | ||
640 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
641 | index 5d958b5bb8b1..554c4086b3c6 100644 | ||
642 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
643 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
644 | @@ -9578,6 +9578,15 @@ static int bnx2x_init_shmem(struct bnx2x *bp) | ||
645 | |||
646 | do { | ||
647 | bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR); | ||
648 | + | ||
649 | + /* If we read all 0xFFs, means we are in PCI error state and | ||
650 | + * should bail out to avoid crashes on adapter's FW reads. | ||
651 | + */ | ||
652 | + if (bp->common.shmem_base == 0xFFFFFFFF) { | ||
653 | + bp->flags |= NO_MCP_FLAG; | ||
654 | + return -ENODEV; | ||
655 | + } | ||
656 | + | ||
657 | if (bp->common.shmem_base) { | ||
658 | val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]); | ||
659 | if (val & SHR_MEM_VALIDITY_MB) | ||
660 | @@ -14312,7 +14321,10 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev) | ||
661 | BNX2X_ERR("IO slot reset --> driver unload\n"); | ||
662 | |||
663 | /* MCP should have been reset; Need to wait for validity */ | ||
664 | - bnx2x_init_shmem(bp); | ||
665 | + if (bnx2x_init_shmem(bp)) { | ||
666 | + rtnl_unlock(); | ||
667 | + return PCI_ERS_RESULT_DISCONNECT; | ||
668 | + } | ||
669 | |||
670 | if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) { | ||
671 | u32 v; | ||
672 | diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | ||
673 | index 60e2af8678bd..393cce3bf2fc 100644 | ||
674 | --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | ||
675 | +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | ||
676 | @@ -68,7 +68,7 @@ static int bnxt_vf_ndo_prep(struct bnxt *bp, int vf_id) | ||
677 | netdev_err(bp->dev, "vf ndo called though sriov is disabled\n"); | ||
678 | return -EINVAL; | ||
679 | } | ||
680 | - if (vf_id >= bp->pf.max_vfs) { | ||
681 | + if (vf_id >= bp->pf.active_vfs) { | ||
682 | netdev_err(bp->dev, "Invalid VF id %d\n", vf_id); | ||
683 | return -EINVAL; | ||
684 | } | ||
685 | diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c | ||
686 | index bb22d325e965..795a133fb074 100644 | ||
687 | --- a/drivers/net/ethernet/broadcom/tg3.c | ||
688 | +++ b/drivers/net/ethernet/broadcom/tg3.c | ||
689 | @@ -10049,6 +10049,16 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) | ||
690 | |||
691 | tw32(GRC_MODE, tp->grc_mode | val); | ||
692 | |||
693 | + /* On one of the AMD platform, MRRS is restricted to 4000 because of | ||
694 | + * south bridge limitation. As a workaround, Driver is setting MRRS | ||
695 | + * to 2048 instead of default 4096. | ||
696 | + */ | ||
697 | + if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && | ||
698 | + tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { | ||
699 | + val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; | ||
700 | + tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); | ||
701 | + } | ||
702 | + | ||
703 | /* Setup the timer prescalar register. Clock is always 66Mhz. */ | ||
704 | val = tr32(GRC_MISC_CFG); | ||
705 | val &= ~0xff; | ||
706 | @@ -14228,7 +14238,8 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu) | ||
707 | */ | ||
708 | if (tg3_asic_rev(tp) == ASIC_REV_57766 || | ||
709 | tg3_asic_rev(tp) == ASIC_REV_5717 || | ||
710 | - tg3_asic_rev(tp) == ASIC_REV_5719) | ||
711 | + tg3_asic_rev(tp) == ASIC_REV_5719 || | ||
712 | + tg3_asic_rev(tp) == ASIC_REV_5720) | ||
713 | reset_phy = true; | ||
714 | |||
715 | err = tg3_restart_hw(tp, reset_phy); | ||
716 | diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h | ||
717 | index 3b5e98ecba00..6e51b793615c 100644 | ||
718 | --- a/drivers/net/ethernet/broadcom/tg3.h | ||
719 | +++ b/drivers/net/ethernet/broadcom/tg3.h | ||
720 | @@ -95,6 +95,7 @@ | ||
721 | #define TG3PCI_SUBDEVICE_ID_DELL_JAGUAR 0x0106 | ||
722 | #define TG3PCI_SUBDEVICE_ID_DELL_MERLOT 0x0109 | ||
723 | #define TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT 0x010a | ||
724 | +#define TG3PCI_SUBDEVICE_ID_DELL_5762 0x07f0 | ||
725 | #define TG3PCI_SUBVENDOR_ID_COMPAQ PCI_VENDOR_ID_COMPAQ | ||
726 | #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE 0x007c | ||
727 | #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2 0x009a | ||
728 | @@ -280,6 +281,9 @@ | ||
729 | #define TG3PCI_STD_RING_PROD_IDX 0x00000098 /* 64-bit */ | ||
730 | #define TG3PCI_RCV_RET_RING_CON_IDX 0x000000a0 /* 64-bit */ | ||
731 | /* 0xa8 --> 0xb8 unused */ | ||
732 | +#define TG3PCI_DEV_STATUS_CTRL 0x000000b4 | ||
733 | +#define MAX_READ_REQ_SIZE_2048 0x00004000 | ||
734 | +#define MAX_READ_REQ_MASK 0x00007000 | ||
735 | #define TG3PCI_DUAL_MAC_CTRL 0x000000b8 | ||
736 | #define DUAL_MAC_CTRL_CH_MASK 0x00000003 | ||
737 | #define DUAL_MAC_CTRL_ID 0x00000004 | ||
738 | diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c | ||
739 | index 57798814160d..ec4b6997f24a 100644 | ||
740 | --- a/drivers/net/ethernet/freescale/gianfar_ptp.c | ||
741 | +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c | ||
742 | @@ -314,11 +314,10 @@ static int ptp_gianfar_adjtime(struct ptp_clock_info *ptp, s64 delta) | ||
743 | now = tmr_cnt_read(etsects); | ||
744 | now += delta; | ||
745 | tmr_cnt_write(etsects, now); | ||
746 | + set_fipers(etsects); | ||
747 | |||
748 | spin_unlock_irqrestore(&etsects->lock, flags); | ||
749 | |||
750 | - set_fipers(etsects); | ||
751 | - | ||
752 | return 0; | ||
753 | } | ||
754 | |||
755 | diff --git a/drivers/net/ethernet/intel/e1000/e1000.h b/drivers/net/ethernet/intel/e1000/e1000.h | ||
756 | index d7bdea79e9fa..8fd2458060a0 100644 | ||
757 | --- a/drivers/net/ethernet/intel/e1000/e1000.h | ||
758 | +++ b/drivers/net/ethernet/intel/e1000/e1000.h | ||
759 | @@ -331,7 +331,8 @@ struct e1000_adapter { | ||
760 | enum e1000_state_t { | ||
761 | __E1000_TESTING, | ||
762 | __E1000_RESETTING, | ||
763 | - __E1000_DOWN | ||
764 | + __E1000_DOWN, | ||
765 | + __E1000_DISABLED | ||
766 | }; | ||
767 | |||
768 | #undef pr_fmt | ||
769 | diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c | ||
770 | index f42129d09e2c..dd112aa5cebb 100644 | ||
771 | --- a/drivers/net/ethernet/intel/e1000/e1000_main.c | ||
772 | +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | ||
773 | @@ -940,7 +940,7 @@ static int e1000_init_hw_struct(struct e1000_adapter *adapter, | ||
774 | static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | ||
775 | { | ||
776 | struct net_device *netdev; | ||
777 | - struct e1000_adapter *adapter; | ||
778 | + struct e1000_adapter *adapter = NULL; | ||
779 | struct e1000_hw *hw; | ||
780 | |||
781 | static int cards_found; | ||
782 | @@ -950,6 +950,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | ||
783 | u16 tmp = 0; | ||
784 | u16 eeprom_apme_mask = E1000_EEPROM_APME; | ||
785 | int bars, need_ioport; | ||
786 | + bool disable_dev = false; | ||
787 | |||
788 | /* do not allocate ioport bars when not needed */ | ||
789 | need_ioport = e1000_is_need_ioport(pdev); | ||
790 | @@ -1250,11 +1251,13 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | ||
791 | iounmap(hw->ce4100_gbe_mdio_base_virt); | ||
792 | iounmap(hw->hw_addr); | ||
793 | err_ioremap: | ||
794 | + disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags); | ||
795 | free_netdev(netdev); | ||
796 | err_alloc_etherdev: | ||
797 | pci_release_selected_regions(pdev, bars); | ||
798 | err_pci_reg: | ||
799 | - pci_disable_device(pdev); | ||
800 | + if (!adapter || disable_dev) | ||
801 | + pci_disable_device(pdev); | ||
802 | return err; | ||
803 | } | ||
804 | |||
805 | @@ -1272,6 +1275,7 @@ static void e1000_remove(struct pci_dev *pdev) | ||
806 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
807 | struct e1000_adapter *adapter = netdev_priv(netdev); | ||
808 | struct e1000_hw *hw = &adapter->hw; | ||
809 | + bool disable_dev; | ||
810 | |||
811 | e1000_down_and_stop(adapter); | ||
812 | e1000_release_manageability(adapter); | ||
813 | @@ -1290,9 +1294,11 @@ static void e1000_remove(struct pci_dev *pdev) | ||
814 | iounmap(hw->flash_address); | ||
815 | pci_release_selected_regions(pdev, adapter->bars); | ||
816 | |||
817 | + disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags); | ||
818 | free_netdev(netdev); | ||
819 | |||
820 | - pci_disable_device(pdev); | ||
821 | + if (disable_dev) | ||
822 | + pci_disable_device(pdev); | ||
823 | } | ||
824 | |||
825 | /** | ||
826 | @@ -5166,7 +5172,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake) | ||
827 | if (netif_running(netdev)) | ||
828 | e1000_free_irq(adapter); | ||
829 | |||
830 | - pci_disable_device(pdev); | ||
831 | + if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags)) | ||
832 | + pci_disable_device(pdev); | ||
833 | |||
834 | return 0; | ||
835 | } | ||
836 | @@ -5210,6 +5217,10 @@ static int e1000_resume(struct pci_dev *pdev) | ||
837 | pr_err("Cannot enable PCI device from suspend\n"); | ||
838 | return err; | ||
839 | } | ||
840 | + | ||
841 | + /* flush memory to make sure state is correct */ | ||
842 | + smp_mb__before_atomic(); | ||
843 | + clear_bit(__E1000_DISABLED, &adapter->flags); | ||
844 | pci_set_master(pdev); | ||
845 | |||
846 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
847 | @@ -5284,7 +5295,9 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev, | ||
848 | |||
849 | if (netif_running(netdev)) | ||
850 | e1000_down(adapter); | ||
851 | - pci_disable_device(pdev); | ||
852 | + | ||
853 | + if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags)) | ||
854 | + pci_disable_device(pdev); | ||
855 | |||
856 | /* Request a slot slot reset. */ | ||
857 | return PCI_ERS_RESULT_NEED_RESET; | ||
858 | @@ -5312,6 +5325,10 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev) | ||
859 | pr_err("Cannot re-enable PCI device after reset.\n"); | ||
860 | return PCI_ERS_RESULT_DISCONNECT; | ||
861 | } | ||
862 | + | ||
863 | + /* flush memory to make sure state is correct */ | ||
864 | + smp_mb__before_atomic(); | ||
865 | + clear_bit(__E1000_DISABLED, &adapter->flags); | ||
866 | pci_set_master(pdev); | ||
867 | |||
868 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
869 | diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c | ||
870 | index c5430394fac9..28b640fa2e35 100644 | ||
871 | --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c | ||
872 | +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c | ||
873 | @@ -2670,10 +2670,30 @@ bool __i40e_chk_linearize(struct sk_buff *skb) | ||
874 | /* Walk through fragments adding latest fragment, testing it, and | ||
875 | * then removing stale fragments from the sum. | ||
876 | */ | ||
877 | - stale = &skb_shinfo(skb)->frags[0]; | ||
878 | - for (;;) { | ||
879 | + for (stale = &skb_shinfo(skb)->frags[0];; stale++) { | ||
880 | + int stale_size = skb_frag_size(stale); | ||
881 | + | ||
882 | sum += skb_frag_size(frag++); | ||
883 | |||
884 | + /* The stale fragment may present us with a smaller | ||
885 | + * descriptor than the actual fragment size. To account | ||
886 | + * for that we need to remove all the data on the front and | ||
887 | + * figure out what the remainder would be in the last | ||
888 | + * descriptor associated with the fragment. | ||
889 | + */ | ||
890 | + if (stale_size > I40E_MAX_DATA_PER_TXD) { | ||
891 | + int align_pad = -(stale->page_offset) & | ||
892 | + (I40E_MAX_READ_REQ_SIZE - 1); | ||
893 | + | ||
894 | + sum -= align_pad; | ||
895 | + stale_size -= align_pad; | ||
896 | + | ||
897 | + do { | ||
898 | + sum -= I40E_MAX_DATA_PER_TXD_ALIGNED; | ||
899 | + stale_size -= I40E_MAX_DATA_PER_TXD_ALIGNED; | ||
900 | + } while (stale_size > I40E_MAX_DATA_PER_TXD); | ||
901 | + } | ||
902 | + | ||
903 | /* if sum is negative we failed to make sufficient progress */ | ||
904 | if (sum < 0) | ||
905 | return true; | ||
906 | @@ -2681,7 +2701,7 @@ bool __i40e_chk_linearize(struct sk_buff *skb) | ||
907 | if (!nr_frags--) | ||
908 | break; | ||
909 | |||
910 | - sum -= skb_frag_size(stale++); | ||
911 | + sum -= stale_size; | ||
912 | } | ||
913 | |||
914 | return false; | ||
915 | diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c | ||
916 | index c03800d1000a..90ebc5ac16fd 100644 | ||
917 | --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c | ||
918 | +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c | ||
919 | @@ -1872,10 +1872,30 @@ bool __i40evf_chk_linearize(struct sk_buff *skb) | ||
920 | /* Walk through fragments adding latest fragment, testing it, and | ||
921 | * then removing stale fragments from the sum. | ||
922 | */ | ||
923 | - stale = &skb_shinfo(skb)->frags[0]; | ||
924 | - for (;;) { | ||
925 | + for (stale = &skb_shinfo(skb)->frags[0];; stale++) { | ||
926 | + int stale_size = skb_frag_size(stale); | ||
927 | + | ||
928 | sum += skb_frag_size(frag++); | ||
929 | |||
930 | + /* The stale fragment may present us with a smaller | ||
931 | + * descriptor than the actual fragment size. To account | ||
932 | + * for that we need to remove all the data on the front and | ||
933 | + * figure out what the remainder would be in the last | ||
934 | + * descriptor associated with the fragment. | ||
935 | + */ | ||
936 | + if (stale_size > I40E_MAX_DATA_PER_TXD) { | ||
937 | + int align_pad = -(stale->page_offset) & | ||
938 | + (I40E_MAX_READ_REQ_SIZE - 1); | ||
939 | + | ||
940 | + sum -= align_pad; | ||
941 | + stale_size -= align_pad; | ||
942 | + | ||
943 | + do { | ||
944 | + sum -= I40E_MAX_DATA_PER_TXD_ALIGNED; | ||
945 | + stale_size -= I40E_MAX_DATA_PER_TXD_ALIGNED; | ||
946 | + } while (stale_size > I40E_MAX_DATA_PER_TXD); | ||
947 | + } | ||
948 | + | ||
949 | /* if sum is negative we failed to make sufficient progress */ | ||
950 | if (sum < 0) | ||
951 | return true; | ||
952 | @@ -1883,7 +1903,7 @@ bool __i40evf_chk_linearize(struct sk_buff *skb) | ||
953 | if (!nr_frags--) | ||
954 | break; | ||
955 | |||
956 | - sum -= skb_frag_size(stale++); | ||
957 | + sum -= stale_size; | ||
958 | } | ||
959 | |||
960 | return false; | ||
961 | diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||
962 | index 4832223f1500..20de37a414fe 100644 | ||
963 | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||
964 | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||
965 | @@ -1842,11 +1842,12 @@ static int mtk_hw_init(struct mtk_eth *eth) | ||
966 | /* set GE2 TUNE */ | ||
967 | regmap_write(eth->pctl, GPIO_BIAS_CTRL, 0x0); | ||
968 | |||
969 | - /* GE1, Force 1000M/FD, FC ON */ | ||
970 | - mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(0)); | ||
971 | - | ||
972 | - /* GE2, Force 1000M/FD, FC ON */ | ||
973 | - mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(1)); | ||
974 | + /* Set linkdown as the default for each GMAC. Its own MCR would be set | ||
975 | + * up with the more appropriate value when mtk_phy_link_adjust call is | ||
976 | + * being invoked. | ||
977 | + */ | ||
978 | + for (i = 0; i < MTK_MAC_COUNT; i++) | ||
979 | + mtk_w32(eth, 0, MTK_MAC_MCR(i)); | ||
980 | |||
981 | /* Enable RX VLan Offloading */ | ||
982 | mtk_w32(eth, 1, MTK_CDMP_EG_CTRL); | ||
983 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | ||
984 | index 10d6059b2f26..f4074e25fb71 100644 | ||
985 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | ||
986 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | ||
987 | @@ -38,6 +38,7 @@ static u32 stmmac_config_sub_second_increment(void __iomem *ioaddr, | ||
988 | { | ||
989 | u32 value = readl(ioaddr + PTP_TCR); | ||
990 | unsigned long data; | ||
991 | + u32 reg_value; | ||
992 | |||
993 | /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second | ||
994 | * formula = (1/ptp_clock) * 1000000000 | ||
995 | @@ -54,10 +55,11 @@ static u32 stmmac_config_sub_second_increment(void __iomem *ioaddr, | ||
996 | |||
997 | data &= PTP_SSIR_SSINC_MASK; | ||
998 | |||
999 | + reg_value = data; | ||
1000 | if (gmac4) | ||
1001 | - data = data << GMAC4_PTP_SSIR_SSINC_SHIFT; | ||
1002 | + reg_value <<= GMAC4_PTP_SSIR_SSINC_SHIFT; | ||
1003 | |||
1004 | - writel(data, ioaddr + PTP_SSIR); | ||
1005 | + writel(reg_value, ioaddr + PTP_SSIR); | ||
1006 | |||
1007 | return data; | ||
1008 | } | ||
1009 | diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c | ||
1010 | index 6d55049cd3dc..e8ad4d060da7 100644 | ||
1011 | --- a/drivers/net/macvlan.c | ||
1012 | +++ b/drivers/net/macvlan.c | ||
1013 | @@ -1377,9 +1377,14 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | ||
1014 | return 0; | ||
1015 | |||
1016 | unregister_netdev: | ||
1017 | + /* macvlan_uninit would free the macvlan port */ | ||
1018 | unregister_netdevice(dev); | ||
1019 | + return err; | ||
1020 | destroy_macvlan_port: | ||
1021 | - if (create) | ||
1022 | + /* the macvlan port may be freed by macvlan_uninit when fail to register. | ||
1023 | + * so we destroy the macvlan port only when it's valid. | ||
1024 | + */ | ||
1025 | + if (create && macvlan_port_get_rtnl(dev)) | ||
1026 | macvlan_port_destroy(port->dev); | ||
1027 | return err; | ||
1028 | } | ||
1029 | diff --git a/drivers/net/phy/mdio-sun4i.c b/drivers/net/phy/mdio-sun4i.c | ||
1030 | index 135296508a7e..6425ce04d3f9 100644 | ||
1031 | --- a/drivers/net/phy/mdio-sun4i.c | ||
1032 | +++ b/drivers/net/phy/mdio-sun4i.c | ||
1033 | @@ -118,8 +118,10 @@ static int sun4i_mdio_probe(struct platform_device *pdev) | ||
1034 | |||
1035 | data->regulator = devm_regulator_get(&pdev->dev, "phy"); | ||
1036 | if (IS_ERR(data->regulator)) { | ||
1037 | - if (PTR_ERR(data->regulator) == -EPROBE_DEFER) | ||
1038 | - return -EPROBE_DEFER; | ||
1039 | + if (PTR_ERR(data->regulator) == -EPROBE_DEFER) { | ||
1040 | + ret = -EPROBE_DEFER; | ||
1041 | + goto err_out_free_mdiobus; | ||
1042 | + } | ||
1043 | |||
1044 | dev_info(&pdev->dev, "no regulator found\n"); | ||
1045 | data->regulator = NULL; | ||
1046 | diff --git a/drivers/net/phy/mdio-xgene.c b/drivers/net/phy/mdio-xgene.c | ||
1047 | index 92af182951be..8eb077b677f6 100644 | ||
1048 | --- a/drivers/net/phy/mdio-xgene.c | ||
1049 | +++ b/drivers/net/phy/mdio-xgene.c | ||
1050 | @@ -197,8 +197,11 @@ static int xgene_mdio_reset(struct xgene_mdio_pdata *pdata) | ||
1051 | } | ||
1052 | |||
1053 | ret = xgene_enet_ecc_init(pdata); | ||
1054 | - if (ret) | ||
1055 | + if (ret) { | ||
1056 | + if (pdata->dev->of_node) | ||
1057 | + clk_disable_unprepare(pdata->clk); | ||
1058 | return ret; | ||
1059 | + } | ||
1060 | xgene_gmac_reset(pdata); | ||
1061 | |||
1062 | return 0; | ||
1063 | @@ -364,8 +367,10 @@ static int xgene_mdio_probe(struct platform_device *pdev) | ||
1064 | return ret; | ||
1065 | |||
1066 | mdio_bus = mdiobus_alloc(); | ||
1067 | - if (!mdio_bus) | ||
1068 | - return -ENOMEM; | ||
1069 | + if (!mdio_bus) { | ||
1070 | + ret = -ENOMEM; | ||
1071 | + goto out_clk; | ||
1072 | + } | ||
1073 | |||
1074 | mdio_bus->name = "APM X-Gene MDIO bus"; | ||
1075 | |||
1076 | @@ -394,7 +399,7 @@ static int xgene_mdio_probe(struct platform_device *pdev) | ||
1077 | mdio_bus->phy_mask = ~0; | ||
1078 | ret = mdiobus_register(mdio_bus); | ||
1079 | if (ret) | ||
1080 | - goto out; | ||
1081 | + goto out_mdiobus; | ||
1082 | |||
1083 | acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_HANDLE(dev), 1, | ||
1084 | acpi_register_phy, NULL, mdio_bus, NULL); | ||
1085 | @@ -402,16 +407,20 @@ static int xgene_mdio_probe(struct platform_device *pdev) | ||
1086 | } | ||
1087 | |||
1088 | if (ret) | ||
1089 | - goto out; | ||
1090 | + goto out_mdiobus; | ||
1091 | |||
1092 | pdata->mdio_bus = mdio_bus; | ||
1093 | xgene_mdio_status = true; | ||
1094 | |||
1095 | return 0; | ||
1096 | |||
1097 | -out: | ||
1098 | +out_mdiobus: | ||
1099 | mdiobus_free(mdio_bus); | ||
1100 | |||
1101 | +out_clk: | ||
1102 | + if (dev->of_node) | ||
1103 | + clk_disable_unprepare(pdata->clk); | ||
1104 | + | ||
1105 | return ret; | ||
1106 | } | ||
1107 | |||
1108 | diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c | ||
1109 | index e1e5e8438457..a30d6a6dbd95 100644 | ||
1110 | --- a/drivers/net/usb/qmi_wwan.c | ||
1111 | +++ b/drivers/net/usb/qmi_wwan.c | ||
1112 | @@ -805,6 +805,7 @@ static const struct usb_device_id products[] = { | ||
1113 | {QMI_FIXED_INTF(0x05c6, 0x9084, 4)}, | ||
1114 | {QMI_FIXED_INTF(0x05c6, 0x920d, 0)}, | ||
1115 | {QMI_FIXED_INTF(0x05c6, 0x920d, 5)}, | ||
1116 | + {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */ | ||
1117 | {QMI_FIXED_INTF(0x0846, 0x68a2, 8)}, | ||
1118 | {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ | ||
1119 | {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */ | ||
1120 | @@ -914,6 +915,7 @@ static const struct usb_device_id products[] = { | ||
1121 | {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ | ||
1122 | {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ | ||
1123 | {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ | ||
1124 | + {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ | ||
1125 | {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ | ||
1126 | {QMI_FIXED_INTF(0x1bc7, 0x1201, 2)}, /* Telit LE920 */ | ||
1127 | {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */ | ||
1128 | diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c | ||
1129 | index 4b462dc21c41..61e85eac706a 100644 | ||
1130 | --- a/drivers/net/wireless/mac80211_hwsim.c | ||
1131 | +++ b/drivers/net/wireless/mac80211_hwsim.c | ||
1132 | @@ -3154,7 +3154,7 @@ static int hwsim_get_radio_nl(struct sk_buff *msg, struct genl_info *info) | ||
1133 | if (!net_eq(wiphy_net(data->hw->wiphy), genl_info_net(info))) | ||
1134 | continue; | ||
1135 | |||
1136 | - skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); | ||
1137 | + skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); | ||
1138 | if (!skb) { | ||
1139 | res = -ENOMEM; | ||
1140 | goto out_err; | ||
1141 | diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c | ||
1142 | index 1a9dadf7b3cc..b09c81e882b4 100644 | ||
1143 | --- a/drivers/net/xen-netfront.c | ||
1144 | +++ b/drivers/net/xen-netfront.c | ||
1145 | @@ -1345,6 +1345,7 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev) | ||
1146 | |||
1147 | netif_carrier_off(netdev); | ||
1148 | |||
1149 | + xenbus_switch_state(dev, XenbusStateInitialising); | ||
1150 | return netdev; | ||
1151 | |||
1152 | exit: | ||
1153 | diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c | ||
1154 | index 719ee5fb2626..ad9d82eb2aed 100644 | ||
1155 | --- a/drivers/nvme/host/core.c | ||
1156 | +++ b/drivers/nvme/host/core.c | ||
1157 | @@ -1204,7 +1204,8 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl, | ||
1158 | blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors); | ||
1159 | blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX)); | ||
1160 | } | ||
1161 | - if (ctrl->quirks & NVME_QUIRK_STRIPE_SIZE) | ||
1162 | + if ((ctrl->quirks & NVME_QUIRK_STRIPE_SIZE) && | ||
1163 | + is_power_of_2(ctrl->max_hw_sectors)) | ||
1164 | blk_queue_chunk_sectors(q, ctrl->max_hw_sectors); | ||
1165 | blk_queue_virt_boundary(q, ctrl->page_size - 1); | ||
1166 | if (ctrl->vwc & NVME_CTRL_VWC_PRESENT) | ||
1167 | diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c | ||
1168 | index 8305ab688d57..a20dc2940d2d 100644 | ||
1169 | --- a/drivers/s390/block/dasd_3990_erp.c | ||
1170 | +++ b/drivers/s390/block/dasd_3990_erp.c | ||
1171 | @@ -2755,6 +2755,16 @@ dasd_3990_erp_action(struct dasd_ccw_req * cqr) | ||
1172 | erp = dasd_3990_erp_handle_match_erp(cqr, erp); | ||
1173 | } | ||
1174 | |||
1175 | + | ||
1176 | + /* | ||
1177 | + * For path verification work we need to stick with the path that was | ||
1178 | + * originally chosen so that the per path configuration data is | ||
1179 | + * assigned correctly. | ||
1180 | + */ | ||
1181 | + if (test_bit(DASD_CQR_VERIFY_PATH, &erp->flags) && cqr->lpm) { | ||
1182 | + erp->lpm = cqr->lpm; | ||
1183 | + } | ||
1184 | + | ||
1185 | if (device->features & DASD_FEATURE_ERPLOG) { | ||
1186 | /* print current erp_chain */ | ||
1187 | dev_err(&device->cdev->dev, | ||
1188 | diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c | ||
1189 | index 2bf96d33428a..0dd1984e381e 100644 | ||
1190 | --- a/drivers/scsi/storvsc_drv.c | ||
1191 | +++ b/drivers/scsi/storvsc_drv.c | ||
1192 | @@ -915,10 +915,11 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, | ||
1193 | case TEST_UNIT_READY: | ||
1194 | break; | ||
1195 | default: | ||
1196 | - set_host_byte(scmnd, DID_TARGET_FAILURE); | ||
1197 | + set_host_byte(scmnd, DID_ERROR); | ||
1198 | } | ||
1199 | break; | ||
1200 | case SRB_STATUS_INVALID_LUN: | ||
1201 | + set_host_byte(scmnd, DID_NO_CONNECT); | ||
1202 | do_work = true; | ||
1203 | process_err_fn = storvsc_remove_lun; | ||
1204 | break; | ||
1205 | diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c | ||
1206 | index 8feac599e9ab..44be6b593b30 100644 | ||
1207 | --- a/drivers/spi/spi-atmel.c | ||
1208 | +++ b/drivers/spi/spi-atmel.c | ||
1209 | @@ -1669,12 +1669,12 @@ static int atmel_spi_remove(struct platform_device *pdev) | ||
1210 | pm_runtime_get_sync(&pdev->dev); | ||
1211 | |||
1212 | /* reset the hardware and block queue progress */ | ||
1213 | - spin_lock_irq(&as->lock); | ||
1214 | if (as->use_dma) { | ||
1215 | atmel_spi_stop_dma(as); | ||
1216 | atmel_spi_release_dma(as); | ||
1217 | } | ||
1218 | |||
1219 | + spin_lock_irq(&as->lock); | ||
1220 | spi_writel(as, CR, SPI_BIT(SWRST)); | ||
1221 | spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */ | ||
1222 | spi_readl(as, SR); | ||
1223 | diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c | ||
1224 | index 79b8ab4c6663..910b5d40c6e9 100644 | ||
1225 | --- a/drivers/xen/gntdev.c | ||
1226 | +++ b/drivers/xen/gntdev.c | ||
1227 | @@ -378,10 +378,8 @@ static int unmap_grant_pages(struct grant_map *map, int offset, int pages) | ||
1228 | } | ||
1229 | range = 0; | ||
1230 | while (range < pages) { | ||
1231 | - if (map->unmap_ops[offset+range].handle == -1) { | ||
1232 | - range--; | ||
1233 | + if (map->unmap_ops[offset+range].handle == -1) | ||
1234 | break; | ||
1235 | - } | ||
1236 | range++; | ||
1237 | } | ||
1238 | err = __unmap_grant_pages(map, offset, range); | ||
1239 | @@ -1079,8 +1077,10 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma) | ||
1240 | out_unlock_put: | ||
1241 | mutex_unlock(&priv->lock); | ||
1242 | out_put_map: | ||
1243 | - if (use_ptemod) | ||
1244 | + if (use_ptemod) { | ||
1245 | map->vma = NULL; | ||
1246 | + unmap_grant_pages(map, 0, map->count); | ||
1247 | + } | ||
1248 | gntdev_put_map(priv, map); | ||
1249 | return err; | ||
1250 | } | ||
1251 | diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c | ||
1252 | index 7b32ce979fe1..63e519658d73 100644 | ||
1253 | --- a/fs/f2fs/extent_cache.c | ||
1254 | +++ b/fs/f2fs/extent_cache.c | ||
1255 | @@ -177,7 +177,7 @@ static void __drop_largest_extent(struct inode *inode, | ||
1256 | } | ||
1257 | |||
1258 | /* return true, if inode page is changed */ | ||
1259 | -bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) | ||
1260 | +static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) | ||
1261 | { | ||
1262 | struct f2fs_sb_info *sbi = F2FS_I_SB(inode); | ||
1263 | struct extent_tree *et; | ||
1264 | @@ -215,6 +215,16 @@ bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) | ||
1265 | return false; | ||
1266 | } | ||
1267 | |||
1268 | +bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) | ||
1269 | +{ | ||
1270 | + bool ret = __f2fs_init_extent_tree(inode, i_ext); | ||
1271 | + | ||
1272 | + if (!F2FS_I(inode)->extent_tree) | ||
1273 | + set_inode_flag(inode, FI_NO_EXTENT); | ||
1274 | + | ||
1275 | + return ret; | ||
1276 | +} | ||
1277 | + | ||
1278 | static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs, | ||
1279 | struct extent_info *ei) | ||
1280 | { | ||
1281 | diff --git a/fs/super.c b/fs/super.c | ||
1282 | index 1058bf3e8724..7e9beab77259 100644 | ||
1283 | --- a/fs/super.c | ||
1284 | +++ b/fs/super.c | ||
1285 | @@ -519,7 +519,11 @@ struct super_block *sget_userns(struct file_system_type *type, | ||
1286 | hlist_add_head(&s->s_instances, &type->fs_supers); | ||
1287 | spin_unlock(&sb_lock); | ||
1288 | get_filesystem(type); | ||
1289 | - register_shrinker(&s->s_shrink); | ||
1290 | + err = register_shrinker(&s->s_shrink); | ||
1291 | + if (err) { | ||
1292 | + deactivate_locked_super(s); | ||
1293 | + s = ERR_PTR(err); | ||
1294 | + } | ||
1295 | return s; | ||
1296 | } | ||
1297 | |||
1298 | diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c | ||
1299 | index 1fdd3face2d9..e3edaa547216 100644 | ||
1300 | --- a/fs/xfs/xfs_qm.c | ||
1301 | +++ b/fs/xfs/xfs_qm.c | ||
1302 | @@ -47,7 +47,7 @@ | ||
1303 | STATIC int xfs_qm_init_quotainos(xfs_mount_t *); | ||
1304 | STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); | ||
1305 | |||
1306 | - | ||
1307 | +STATIC void xfs_qm_destroy_quotainos(xfs_quotainfo_t *qi); | ||
1308 | STATIC void xfs_qm_dqfree_one(struct xfs_dquot *dqp); | ||
1309 | /* | ||
1310 | * We use the batch lookup interface to iterate over the dquots as it | ||
1311 | @@ -694,9 +694,17 @@ xfs_qm_init_quotainfo( | ||
1312 | qinf->qi_shrinker.scan_objects = xfs_qm_shrink_scan; | ||
1313 | qinf->qi_shrinker.seeks = DEFAULT_SEEKS; | ||
1314 | qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE; | ||
1315 | - register_shrinker(&qinf->qi_shrinker); | ||
1316 | + | ||
1317 | + error = register_shrinker(&qinf->qi_shrinker); | ||
1318 | + if (error) | ||
1319 | + goto out_free_inos; | ||
1320 | + | ||
1321 | return 0; | ||
1322 | |||
1323 | +out_free_inos: | ||
1324 | + mutex_destroy(&qinf->qi_quotaofflock); | ||
1325 | + mutex_destroy(&qinf->qi_tree_lock); | ||
1326 | + xfs_qm_destroy_quotainos(qinf); | ||
1327 | out_free_lru: | ||
1328 | list_lru_destroy(&qinf->qi_lru); | ||
1329 | out_free_qinf: | ||
1330 | @@ -705,7 +713,6 @@ xfs_qm_init_quotainfo( | ||
1331 | return error; | ||
1332 | } | ||
1333 | |||
1334 | - | ||
1335 | /* | ||
1336 | * Gets called when unmounting a filesystem or when all quotas get | ||
1337 | * turned off. | ||
1338 | @@ -722,19 +729,8 @@ xfs_qm_destroy_quotainfo( | ||
1339 | |||
1340 | unregister_shrinker(&qi->qi_shrinker); | ||
1341 | list_lru_destroy(&qi->qi_lru); | ||
1342 | - | ||
1343 | - if (qi->qi_uquotaip) { | ||
1344 | - IRELE(qi->qi_uquotaip); | ||
1345 | - qi->qi_uquotaip = NULL; /* paranoia */ | ||
1346 | - } | ||
1347 | - if (qi->qi_gquotaip) { | ||
1348 | - IRELE(qi->qi_gquotaip); | ||
1349 | - qi->qi_gquotaip = NULL; | ||
1350 | - } | ||
1351 | - if (qi->qi_pquotaip) { | ||
1352 | - IRELE(qi->qi_pquotaip); | ||
1353 | - qi->qi_pquotaip = NULL; | ||
1354 | - } | ||
1355 | + xfs_qm_destroy_quotainos(qi); | ||
1356 | + mutex_destroy(&qi->qi_tree_lock); | ||
1357 | mutex_destroy(&qi->qi_quotaofflock); | ||
1358 | kmem_free(qi); | ||
1359 | mp->m_quotainfo = NULL; | ||
1360 | @@ -1619,6 +1615,24 @@ xfs_qm_init_quotainos( | ||
1361 | return error; | ||
1362 | } | ||
1363 | |||
1364 | +STATIC void | ||
1365 | +xfs_qm_destroy_quotainos( | ||
1366 | + xfs_quotainfo_t *qi) | ||
1367 | +{ | ||
1368 | + if (qi->qi_uquotaip) { | ||
1369 | + IRELE(qi->qi_uquotaip); | ||
1370 | + qi->qi_uquotaip = NULL; /* paranoia */ | ||
1371 | + } | ||
1372 | + if (qi->qi_gquotaip) { | ||
1373 | + IRELE(qi->qi_gquotaip); | ||
1374 | + qi->qi_gquotaip = NULL; | ||
1375 | + } | ||
1376 | + if (qi->qi_pquotaip) { | ||
1377 | + IRELE(qi->qi_pquotaip); | ||
1378 | + qi->qi_pquotaip = NULL; | ||
1379 | + } | ||
1380 | +} | ||
1381 | + | ||
1382 | STATIC void | ||
1383 | xfs_qm_dqfree_one( | ||
1384 | struct xfs_dquot *dqp) | ||
1385 | diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h | ||
1386 | index 44b8a6bd5fe1..774cb2db1b89 100644 | ||
1387 | --- a/include/uapi/linux/libc-compat.h | ||
1388 | +++ b/include/uapi/linux/libc-compat.h | ||
1389 | @@ -167,46 +167,99 @@ | ||
1390 | |||
1391 | /* If we did not see any headers from any supported C libraries, | ||
1392 | * or we are being included in the kernel, then define everything | ||
1393 | - * that we need. */ | ||
1394 | + * that we need. Check for previous __UAPI_* definitions to give | ||
1395 | + * unsupported C libraries a way to opt out of any kernel definition. */ | ||
1396 | #else /* !defined(__GLIBC__) */ | ||
1397 | |||
1398 | /* Definitions for if.h */ | ||
1399 | +#ifndef __UAPI_DEF_IF_IFCONF | ||
1400 | #define __UAPI_DEF_IF_IFCONF 1 | ||
1401 | +#endif | ||
1402 | +#ifndef __UAPI_DEF_IF_IFMAP | ||
1403 | #define __UAPI_DEF_IF_IFMAP 1 | ||
1404 | +#endif | ||
1405 | +#ifndef __UAPI_DEF_IF_IFNAMSIZ | ||
1406 | #define __UAPI_DEF_IF_IFNAMSIZ 1 | ||
1407 | +#endif | ||
1408 | +#ifndef __UAPI_DEF_IF_IFREQ | ||
1409 | #define __UAPI_DEF_IF_IFREQ 1 | ||
1410 | +#endif | ||
1411 | /* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */ | ||
1412 | +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS | ||
1413 | #define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1 | ||
1414 | +#endif | ||
1415 | /* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */ | ||
1416 | +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO | ||
1417 | #define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1 | ||
1418 | +#endif | ||
1419 | |||
1420 | /* Definitions for in.h */ | ||
1421 | +#ifndef __UAPI_DEF_IN_ADDR | ||
1422 | #define __UAPI_DEF_IN_ADDR 1 | ||
1423 | +#endif | ||
1424 | +#ifndef __UAPI_DEF_IN_IPPROTO | ||
1425 | #define __UAPI_DEF_IN_IPPROTO 1 | ||
1426 | +#endif | ||
1427 | +#ifndef __UAPI_DEF_IN_PKTINFO | ||
1428 | #define __UAPI_DEF_IN_PKTINFO 1 | ||
1429 | +#endif | ||
1430 | +#ifndef __UAPI_DEF_IP_MREQ | ||
1431 | #define __UAPI_DEF_IP_MREQ 1 | ||
1432 | +#endif | ||
1433 | +#ifndef __UAPI_DEF_SOCKADDR_IN | ||
1434 | #define __UAPI_DEF_SOCKADDR_IN 1 | ||
1435 | +#endif | ||
1436 | +#ifndef __UAPI_DEF_IN_CLASS | ||
1437 | #define __UAPI_DEF_IN_CLASS 1 | ||
1438 | +#endif | ||
1439 | |||
1440 | /* Definitions for in6.h */ | ||
1441 | +#ifndef __UAPI_DEF_IN6_ADDR | ||
1442 | #define __UAPI_DEF_IN6_ADDR 1 | ||
1443 | +#endif | ||
1444 | +#ifndef __UAPI_DEF_IN6_ADDR_ALT | ||
1445 | #define __UAPI_DEF_IN6_ADDR_ALT 1 | ||
1446 | +#endif | ||
1447 | +#ifndef __UAPI_DEF_SOCKADDR_IN6 | ||
1448 | #define __UAPI_DEF_SOCKADDR_IN6 1 | ||
1449 | +#endif | ||
1450 | +#ifndef __UAPI_DEF_IPV6_MREQ | ||
1451 | #define __UAPI_DEF_IPV6_MREQ 1 | ||
1452 | +#endif | ||
1453 | +#ifndef __UAPI_DEF_IPPROTO_V6 | ||
1454 | #define __UAPI_DEF_IPPROTO_V6 1 | ||
1455 | +#endif | ||
1456 | +#ifndef __UAPI_DEF_IPV6_OPTIONS | ||
1457 | #define __UAPI_DEF_IPV6_OPTIONS 1 | ||
1458 | +#endif | ||
1459 | +#ifndef __UAPI_DEF_IN6_PKTINFO | ||
1460 | #define __UAPI_DEF_IN6_PKTINFO 1 | ||
1461 | +#endif | ||
1462 | +#ifndef __UAPI_DEF_IP6_MTUINFO | ||
1463 | #define __UAPI_DEF_IP6_MTUINFO 1 | ||
1464 | +#endif | ||
1465 | |||
1466 | /* Definitions for ipx.h */ | ||
1467 | +#ifndef __UAPI_DEF_SOCKADDR_IPX | ||
1468 | #define __UAPI_DEF_SOCKADDR_IPX 1 | ||
1469 | +#endif | ||
1470 | +#ifndef __UAPI_DEF_IPX_ROUTE_DEFINITION | ||
1471 | #define __UAPI_DEF_IPX_ROUTE_DEFINITION 1 | ||
1472 | +#endif | ||
1473 | +#ifndef __UAPI_DEF_IPX_INTERFACE_DEFINITION | ||
1474 | #define __UAPI_DEF_IPX_INTERFACE_DEFINITION 1 | ||
1475 | +#endif | ||
1476 | +#ifndef __UAPI_DEF_IPX_CONFIG_DATA | ||
1477 | #define __UAPI_DEF_IPX_CONFIG_DATA 1 | ||
1478 | +#endif | ||
1479 | +#ifndef __UAPI_DEF_IPX_ROUTE_DEF | ||
1480 | #define __UAPI_DEF_IPX_ROUTE_DEF 1 | ||
1481 | +#endif | ||
1482 | |||
1483 | /* Definitions for xattr.h */ | ||
1484 | +#ifndef __UAPI_DEF_XATTR | ||
1485 | #define __UAPI_DEF_XATTR 1 | ||
1486 | +#endif | ||
1487 | |||
1488 | #endif /* __GLIBC__ */ | ||
1489 | |||
1490 | diff --git a/kernel/irq/debug.h b/kernel/irq/debug.h | ||
1491 | index e75e29e4434a..3514d955af94 100644 | ||
1492 | --- a/kernel/irq/debug.h | ||
1493 | +++ b/kernel/irq/debug.h | ||
1494 | @@ -11,6 +11,11 @@ | ||
1495 | |||
1496 | static inline void print_irq_desc(unsigned int irq, struct irq_desc *desc) | ||
1497 | { | ||
1498 | + static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5); | ||
1499 | + | ||
1500 | + if (!__ratelimit(&ratelimit)) | ||
1501 | + return; | ||
1502 | + | ||
1503 | printk("irq %d, desc: %p, depth: %d, count: %d, unhandled: %d\n", | ||
1504 | irq, desc, desc->depth, desc->irq_count, desc->irqs_unhandled); | ||
1505 | printk("->handle_irq(): %p, ", desc->handle_irq); | ||
1506 | diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c | ||
1507 | index 54fd2fed36e9..c93729661be0 100644 | ||
1508 | --- a/kernel/time/hrtimer.c | ||
1509 | +++ b/kernel/time/hrtimer.c | ||
1510 | @@ -1134,7 +1134,12 @@ static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id, | ||
1511 | |||
1512 | cpu_base = raw_cpu_ptr(&hrtimer_bases); | ||
1513 | |||
1514 | - if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS) | ||
1515 | + /* | ||
1516 | + * POSIX magic: Relative CLOCK_REALTIME timers are not affected by | ||
1517 | + * clock modifications, so they needs to become CLOCK_MONOTONIC to | ||
1518 | + * ensure POSIX compliance. | ||
1519 | + */ | ||
1520 | + if (clock_id == CLOCK_REALTIME && mode & HRTIMER_MODE_REL) | ||
1521 | clock_id = CLOCK_MONOTONIC; | ||
1522 | |||
1523 | base = hrtimer_clockid_to_base(clock_id); | ||
1524 | diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h | ||
1525 | index 93336502af08..0f64fcee4ccd 100644 | ||
1526 | --- a/lib/mpi/longlong.h | ||
1527 | +++ b/lib/mpi/longlong.h | ||
1528 | @@ -671,7 +671,23 @@ do { \ | ||
1529 | ************** MIPS/64 ************** | ||
1530 | ***************************************/ | ||
1531 | #if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64 | ||
1532 | -#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) | ||
1533 | +#if defined(__mips_isa_rev) && __mips_isa_rev >= 6 | ||
1534 | +/* | ||
1535 | + * GCC ends up emitting a __multi3 intrinsic call for MIPS64r6 with the plain C | ||
1536 | + * code below, so we special case MIPS64r6 until the compiler can do better. | ||
1537 | + */ | ||
1538 | +#define umul_ppmm(w1, w0, u, v) \ | ||
1539 | +do { \ | ||
1540 | + __asm__ ("dmulu %0,%1,%2" \ | ||
1541 | + : "=d" ((UDItype)(w0)) \ | ||
1542 | + : "d" ((UDItype)(u)), \ | ||
1543 | + "d" ((UDItype)(v))); \ | ||
1544 | + __asm__ ("dmuhu %0,%1,%2" \ | ||
1545 | + : "=d" ((UDItype)(w1)) \ | ||
1546 | + : "d" ((UDItype)(u)), \ | ||
1547 | + "d" ((UDItype)(v))); \ | ||
1548 | +} while (0) | ||
1549 | +#elif (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) | ||
1550 | #define umul_ppmm(w1, w0, u, v) \ | ||
1551 | do { \ | ||
1552 | typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ | ||
1553 | diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c | ||
1554 | index 131e6aa954bc..a2fcf7bdb597 100644 | ||
1555 | --- a/net/ipv6/ip6_tunnel.c | ||
1556 | +++ b/net/ipv6/ip6_tunnel.c | ||
1557 | @@ -1127,8 +1127,13 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield, | ||
1558 | max_headroom += 8; | ||
1559 | mtu -= 8; | ||
1560 | } | ||
1561 | - if (mtu < IPV6_MIN_MTU) | ||
1562 | - mtu = IPV6_MIN_MTU; | ||
1563 | + if (skb->protocol == htons(ETH_P_IPV6)) { | ||
1564 | + if (mtu < IPV6_MIN_MTU) | ||
1565 | + mtu = IPV6_MIN_MTU; | ||
1566 | + } else if (mtu < 576) { | ||
1567 | + mtu = 576; | ||
1568 | + } | ||
1569 | + | ||
1570 | if (skb_dst(skb) && !t->parms.collect_md) | ||
1571 | skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu); | ||
1572 | if (skb->len - t->tun_hlen - eth_hlen > mtu && !skb_is_gso(skb)) { | ||
1573 | diff --git a/net/ipv6/route.c b/net/ipv6/route.c | ||
1574 | index 6e8bacb0b458..a8f80bd20c55 100644 | ||
1575 | --- a/net/ipv6/route.c | ||
1576 | +++ b/net/ipv6/route.c | ||
1577 | @@ -1651,6 +1651,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev, | ||
1578 | } | ||
1579 | |||
1580 | rt->dst.flags |= DST_HOST; | ||
1581 | + rt->dst.input = ip6_input; | ||
1582 | rt->dst.output = ip6_output; | ||
1583 | atomic_set(&rt->dst.__refcnt, 1); | ||
1584 | rt->rt6i_gateway = fl6->daddr; | ||
1585 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c | ||
1586 | index 439e597fd374..404284a14d75 100644 | ||
1587 | --- a/net/mac80211/rx.c | ||
1588 | +++ b/net/mac80211/rx.c | ||
1589 | @@ -3611,6 +3611,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx) | ||
1590 | } | ||
1591 | return true; | ||
1592 | case NL80211_IFTYPE_MESH_POINT: | ||
1593 | + if (ether_addr_equal(sdata->vif.addr, hdr->addr2)) | ||
1594 | + return false; | ||
1595 | if (multicast) | ||
1596 | return true; | ||
1597 | return ether_addr_equal(sdata->vif.addr, hdr->addr1); | ||
1598 | diff --git a/net/sctp/socket.c b/net/sctp/socket.c | ||
1599 | index fd5b9d573b38..8cdd6bbe2efa 100644 | ||
1600 | --- a/net/sctp/socket.c | ||
1601 | +++ b/net/sctp/socket.c | ||
1602 | @@ -4765,7 +4765,7 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv | ||
1603 | len = sizeof(int); | ||
1604 | if (put_user(len, optlen)) | ||
1605 | return -EFAULT; | ||
1606 | - if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int))) | ||
1607 | + if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len)) | ||
1608 | return -EFAULT; | ||
1609 | return 0; | ||
1610 | } | ||
1611 | @@ -5342,6 +5342,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | ||
1612 | err = -EFAULT; | ||
1613 | goto out; | ||
1614 | } | ||
1615 | + /* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too, | ||
1616 | + * but we can't change it anymore. | ||
1617 | + */ | ||
1618 | if (put_user(bytes_copied, optlen)) | ||
1619 | err = -EFAULT; | ||
1620 | out: | ||
1621 | @@ -5778,7 +5781,7 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len, | ||
1622 | params.assoc_id = 0; | ||
1623 | } else if (len >= sizeof(struct sctp_assoc_value)) { | ||
1624 | len = sizeof(struct sctp_assoc_value); | ||
1625 | - if (copy_from_user(¶ms, optval, sizeof(params))) | ||
1626 | + if (copy_from_user(¶ms, optval, len)) | ||
1627 | return -EFAULT; | ||
1628 | } else | ||
1629 | return -EINVAL; | ||
1630 | @@ -5947,7 +5950,9 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len, | ||
1631 | |||
1632 | if (len < sizeof(struct sctp_authkeyid)) | ||
1633 | return -EINVAL; | ||
1634 | - if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid))) | ||
1635 | + | ||
1636 | + len = sizeof(struct sctp_authkeyid); | ||
1637 | + if (copy_from_user(&val, optval, len)) | ||
1638 | return -EFAULT; | ||
1639 | |||
1640 | asoc = sctp_id2assoc(sk, val.scact_assoc_id); | ||
1641 | @@ -5959,7 +5964,6 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len, | ||
1642 | else | ||
1643 | val.scact_keynumber = ep->active_key_id; | ||
1644 | |||
1645 | - len = sizeof(struct sctp_authkeyid); | ||
1646 | if (put_user(len, optlen)) | ||
1647 | return -EFAULT; | ||
1648 | if (copy_to_user(optval, &val, len)) | ||
1649 | @@ -5985,7 +5989,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len, | ||
1650 | if (len < sizeof(struct sctp_authchunks)) | ||
1651 | return -EINVAL; | ||
1652 | |||
1653 | - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) | ||
1654 | + if (copy_from_user(&val, optval, sizeof(val))) | ||
1655 | return -EFAULT; | ||
1656 | |||
1657 | to = p->gauth_chunks; | ||
1658 | @@ -6030,7 +6034,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len, | ||
1659 | if (len < sizeof(struct sctp_authchunks)) | ||
1660 | return -EINVAL; | ||
1661 | |||
1662 | - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) | ||
1663 | + if (copy_from_user(&val, optval, sizeof(val))) | ||
1664 | return -EFAULT; | ||
1665 | |||
1666 | to = p->gauth_chunks; | ||
1667 | diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c | ||
1668 | index 52d74760fb68..ca68db207965 100644 | ||
1669 | --- a/net/tipc/bearer.c | ||
1670 | +++ b/net/tipc/bearer.c | ||
1671 | @@ -322,6 +322,7 @@ static int tipc_enable_bearer(struct net *net, const char *name, | ||
1672 | if (res) { | ||
1673 | pr_warn("Bearer <%s> rejected, enable failure (%d)\n", | ||
1674 | name, -res); | ||
1675 | + kfree(b); | ||
1676 | return -EINVAL; | ||
1677 | } | ||
1678 | |||
1679 | @@ -345,8 +346,10 @@ static int tipc_enable_bearer(struct net *net, const char *name, | ||
1680 | if (skb) | ||
1681 | tipc_bearer_xmit_skb(net, bearer_id, skb, &b->bcast_addr); | ||
1682 | |||
1683 | - if (tipc_mon_create(net, bearer_id)) | ||
1684 | + if (tipc_mon_create(net, bearer_id)) { | ||
1685 | + bearer_disable(net, b); | ||
1686 | return -ENOMEM; | ||
1687 | + } | ||
1688 | |||
1689 | pr_info("Enabled bearer <%s>, discovery domain %s, priority %u\n", | ||
1690 | name, | ||
1691 | diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c | ||
1692 | index 9e109bb1a207..0fcfb3916dcf 100644 | ||
1693 | --- a/net/tipc/monitor.c | ||
1694 | +++ b/net/tipc/monitor.c | ||
1695 | @@ -633,9 +633,13 @@ void tipc_mon_delete(struct net *net, int bearer_id) | ||
1696 | { | ||
1697 | struct tipc_net *tn = tipc_net(net); | ||
1698 | struct tipc_monitor *mon = tipc_monitor(net, bearer_id); | ||
1699 | - struct tipc_peer *self = get_self(net, bearer_id); | ||
1700 | + struct tipc_peer *self; | ||
1701 | struct tipc_peer *peer, *tmp; | ||
1702 | |||
1703 | + if (!mon) | ||
1704 | + return; | ||
1705 | + | ||
1706 | + self = get_self(net, bearer_id); | ||
1707 | write_lock_bh(&mon->lock); | ||
1708 | tn->monitors[bearer_id] = NULL; | ||
1709 | list_for_each_entry_safe(peer, tmp, &self->list, list) { | ||
1710 | diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c | ||
1711 | index 91722e97cdd5..a89061d59c74 100644 | ||
1712 | --- a/net/wireless/nl80211.c | ||
1713 | +++ b/net/wireless/nl80211.c | ||
1714 | @@ -10777,7 +10777,8 @@ static int nl80211_nan_add_func(struct sk_buff *skb, | ||
1715 | break; | ||
1716 | case NL80211_NAN_FUNC_FOLLOW_UP: | ||
1717 | if (!tb[NL80211_NAN_FUNC_FOLLOW_UP_ID] || | ||
1718 | - !tb[NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID]) { | ||
1719 | + !tb[NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID] || | ||
1720 | + !tb[NL80211_NAN_FUNC_FOLLOW_UP_DEST]) { | ||
1721 | err = -EINVAL; | ||
1722 | goto out; | ||
1723 | } | ||
1724 | diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c | ||
1725 | index f9f2737c4ad2..a4871c4adcb0 100644 | ||
1726 | --- a/sound/soc/codecs/nau8825.c | ||
1727 | +++ b/sound/soc/codecs/nau8825.c | ||
1728 | @@ -882,6 +882,7 @@ static int nau8825_adc_event(struct snd_soc_dapm_widget *w, | ||
1729 | |||
1730 | switch (event) { | ||
1731 | case SND_SOC_DAPM_POST_PMU: | ||
1732 | + msleep(125); | ||
1733 | regmap_update_bits(nau8825->regmap, NAU8825_REG_ENA_CTRL, | ||
1734 | NAU8825_ENABLE_ADC, NAU8825_ENABLE_ADC); | ||
1735 | break; |