Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0185-4.9.86-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3205 - (show annotations) (download)
Wed Aug 8 14:26:12 2018 UTC (5 years, 8 months ago) by niro
File size: 56585 byte(s)
-linux-4.9.86
1 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 = <&reg_3p3v>;
20 VDDIO-supply = <&reg_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 = <&reg_3p3v>;
33 VDDIO-supply = <&reg_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, &regs->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, &regs->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(&params, optval, sizeof(params)))
1626 + if (copy_from_user(&params, 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;