Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 56585 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 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;