Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0249-4.9.150-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3302 - (hide annotations) (download)
Tue Mar 12 10:43:10 2019 UTC (5 years, 3 months ago) by niro
File size: 73070 byte(s)
-linux-4.9.150
1 niro 3302 diff --git a/Makefile b/Makefile
2     index 1feac0246fe2..0e7874951ac5 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 149
9     +SUBLEVEL = 150
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arm/boot/dts/imx7d-nitrogen7.dts b/arch/arm/boot/dts/imx7d-nitrogen7.dts
14     index ce08f180f213..080a4ea841c9 100644
15     --- a/arch/arm/boot/dts/imx7d-nitrogen7.dts
16     +++ b/arch/arm/boot/dts/imx7d-nitrogen7.dts
17     @@ -117,13 +117,17 @@
18     compatible = "regulator-fixed";
19     regulator-min-microvolt = <3300000>;
20     regulator-max-microvolt = <3300000>;
21     - clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
22     - clock-names = "slow";
23     regulator-name = "reg_wlan";
24     startup-delay-us = <70000>;
25     gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
26     enable-active-high;
27     };
28     +
29     + usdhc2_pwrseq: usdhc2_pwrseq {
30     + compatible = "mmc-pwrseq-simple";
31     + clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
32     + clock-names = "ext_clock";
33     + };
34     };
35    
36     &adc1 {
37     @@ -430,6 +434,7 @@
38     bus-width = <4>;
39     non-removable;
40     vmmc-supply = <&reg_wlan>;
41     + mmc-pwrseq = <&usdhc2_pwrseq>;
42     cap-power-off-card;
43     keep-power-in-suspend;
44     status = "okay";
45     diff --git a/arch/arm/mach-imx/cpuidle-imx6sx.c b/arch/arm/mach-imx/cpuidle-imx6sx.c
46     index c5a5c3a70ab1..edb888ac5ad3 100644
47     --- a/arch/arm/mach-imx/cpuidle-imx6sx.c
48     +++ b/arch/arm/mach-imx/cpuidle-imx6sx.c
49     @@ -108,7 +108,7 @@ int __init imx6sx_cpuidle_init(void)
50     * except for power up sw2iso which need to be
51     * larger than LDO ramp up time.
52     */
53     - imx_gpc_set_arm_power_up_timing(2, 1);
54     + imx_gpc_set_arm_power_up_timing(0xf, 1);
55     imx_gpc_set_arm_power_down_timing(1, 1);
56    
57     return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
58     diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
59     index e88344e3d508..c6297a03d945 100644
60     --- a/arch/mips/kernel/vdso.c
61     +++ b/arch/mips/kernel/vdso.c
62     @@ -111,8 +111,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
63    
64     /* Map delay slot emulation page */
65     base = mmap_region(NULL, STACK_TOP, PAGE_SIZE,
66     - VM_READ|VM_WRITE|VM_EXEC|
67     - VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC,
68     + VM_READ | VM_EXEC |
69     + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
70     0);
71     if (IS_ERR_VALUE(base)) {
72     ret = base;
73     diff --git a/arch/mips/math-emu/dsemul.c b/arch/mips/math-emu/dsemul.c
74     index 4a094f7acb3d..7b4329861056 100644
75     --- a/arch/mips/math-emu/dsemul.c
76     +++ b/arch/mips/math-emu/dsemul.c
77     @@ -211,8 +211,9 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir,
78     {
79     int isa16 = get_isa16_mode(regs->cp0_epc);
80     mips_instruction break_math;
81     - struct emuframe __user *fr;
82     - int err, fr_idx;
83     + unsigned long fr_uaddr;
84     + struct emuframe fr;
85     + int fr_idx, ret;
86    
87     /* NOP is easy */
88     if (ir == 0)
89     @@ -247,27 +248,31 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir,
90     fr_idx = alloc_emuframe();
91     if (fr_idx == BD_EMUFRAME_NONE)
92     return SIGBUS;
93     - fr = &dsemul_page()[fr_idx];
94    
95     /* Retrieve the appropriately encoded break instruction */
96     break_math = BREAK_MATH(isa16);
97    
98     /* Write the instructions to the frame */
99     if (isa16) {
100     - err = __put_user(ir >> 16,
101     - (u16 __user *)(&fr->emul));
102     - err |= __put_user(ir & 0xffff,
103     - (u16 __user *)((long)(&fr->emul) + 2));
104     - err |= __put_user(break_math >> 16,
105     - (u16 __user *)(&fr->badinst));
106     - err |= __put_user(break_math & 0xffff,
107     - (u16 __user *)((long)(&fr->badinst) + 2));
108     + union mips_instruction _emul = {
109     + .halfword = { ir >> 16, ir }
110     + };
111     + union mips_instruction _badinst = {
112     + .halfword = { break_math >> 16, break_math }
113     + };
114     +
115     + fr.emul = _emul.word;
116     + fr.badinst = _badinst.word;
117     } else {
118     - err = __put_user(ir, &fr->emul);
119     - err |= __put_user(break_math, &fr->badinst);
120     + fr.emul = ir;
121     + fr.badinst = break_math;
122     }
123    
124     - if (unlikely(err)) {
125     + /* Write the frame to user memory */
126     + fr_uaddr = (unsigned long)&dsemul_page()[fr_idx];
127     + ret = access_process_vm(current, fr_uaddr, &fr, sizeof(fr),
128     + FOLL_FORCE | FOLL_WRITE);
129     + if (unlikely(ret != sizeof(fr))) {
130     MIPS_FPU_EMU_INC_STATS(errors);
131     free_emuframe(fr_idx, current->mm);
132     return SIGBUS;
133     @@ -279,10 +284,7 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir,
134     atomic_set(&current->thread.bd_emu_frame, fr_idx);
135    
136     /* Change user register context to execute the frame */
137     - regs->cp0_epc = (unsigned long)&fr->emul | isa16;
138     -
139     - /* Ensure the icache observes our newly written frame */
140     - flush_cache_sigtramp((unsigned long)&fr->emul);
141     + regs->cp0_epc = fr_uaddr | isa16;
142    
143     return 0;
144     }
145     diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
146     index 5c2199857aa8..a3550e8f1a77 100644
147     --- a/arch/powerpc/boot/crt0.S
148     +++ b/arch/powerpc/boot/crt0.S
149     @@ -15,7 +15,7 @@
150     RELA = 7
151     RELACOUNT = 0x6ffffff9
152    
153     - .text
154     + .data
155     /* A procedure descriptor used when booting this as a COFF file.
156     * When making COFF, this comes first in the link and we're
157     * linked at 0x500000.
158     @@ -23,6 +23,8 @@ RELACOUNT = 0x6ffffff9
159     .globl _zimage_start_opd
160     _zimage_start_opd:
161     .long 0x500000, 0, 0, 0
162     + .text
163     + b _zimage_start
164    
165     #ifdef __powerpc64__
166     .balign 8
167     diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
168     index 27aa913ac91d..2bfa5a7bb672 100644
169     --- a/arch/powerpc/kernel/signal_32.c
170     +++ b/arch/powerpc/kernel/signal_32.c
171     @@ -866,7 +866,23 @@ static long restore_tm_user_regs(struct pt_regs *regs,
172     /* If TM bits are set to the reserved value, it's an invalid context */
173     if (MSR_TM_RESV(msr_hi))
174     return 1;
175     - /* Pull in the MSR TM bits from the user context */
176     +
177     + /*
178     + * Disabling preemption, since it is unsafe to be preempted
179     + * with MSR[TS] set without recheckpointing.
180     + */
181     + preempt_disable();
182     +
183     + /*
184     + * CAUTION:
185     + * After regs->MSR[TS] being updated, make sure that get_user(),
186     + * put_user() or similar functions are *not* called. These
187     + * functions can generate page faults which will cause the process
188     + * to be de-scheduled with MSR[TS] set but without calling
189     + * tm_recheckpoint(). This can cause a bug.
190     + *
191     + * Pull in the MSR TM bits from the user context
192     + */
193     regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr_hi & MSR_TS_MASK);
194     /* Now, recheckpoint. This loads up all of the checkpointed (older)
195     * registers, including FP and V[S]Rs. After recheckpointing, the
196     @@ -891,6 +907,8 @@ static long restore_tm_user_regs(struct pt_regs *regs,
197     }
198     #endif
199    
200     + preempt_enable();
201     +
202     return 0;
203     }
204     #endif
205     diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
206     index 04e92257fd69..d929afab7b24 100644
207     --- a/arch/powerpc/kernel/signal_64.c
208     +++ b/arch/powerpc/kernel/signal_64.c
209     @@ -452,20 +452,6 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
210     if (MSR_TM_RESV(msr))
211     return -EINVAL;
212    
213     - /* pull in MSR TS bits from user context */
214     - regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
215     -
216     - /*
217     - * Ensure that TM is enabled in regs->msr before we leave the signal
218     - * handler. It could be the case that (a) user disabled the TM bit
219     - * through the manipulation of the MSR bits in uc_mcontext or (b) the
220     - * TM bit was disabled because a sufficient number of context switches
221     - * happened whilst in the signal handler and load_tm overflowed,
222     - * disabling the TM bit. In either case we can end up with an illegal
223     - * TM state leading to a TM Bad Thing when we return to userspace.
224     - */
225     - regs->msr |= MSR_TM;
226     -
227     /* pull in MSR LE from user context */
228     regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
229    
230     @@ -557,6 +543,34 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
231     tm_enable();
232     /* Make sure the transaction is marked as failed */
233     tsk->thread.tm_texasr |= TEXASR_FS;
234     +
235     + /*
236     + * Disabling preemption, since it is unsafe to be preempted
237     + * with MSR[TS] set without recheckpointing.
238     + */
239     + preempt_disable();
240     +
241     + /* pull in MSR TS bits from user context */
242     + regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
243     +
244     + /*
245     + * Ensure that TM is enabled in regs->msr before we leave the signal
246     + * handler. It could be the case that (a) user disabled the TM bit
247     + * through the manipulation of the MSR bits in uc_mcontext or (b) the
248     + * TM bit was disabled because a sufficient number of context switches
249     + * happened whilst in the signal handler and load_tm overflowed,
250     + * disabling the TM bit. In either case we can end up with an illegal
251     + * TM state leading to a TM Bad Thing when we return to userspace.
252     + *
253     + * CAUTION:
254     + * After regs->MSR[TS] being updated, make sure that get_user(),
255     + * put_user() or similar functions are *not* called. These
256     + * functions can generate page faults which will cause the process
257     + * to be de-scheduled with MSR[TS] set but without calling
258     + * tm_recheckpoint(). This can cause a bug.
259     + */
260     + regs->msr |= MSR_TM;
261     +
262     /* This loads the checkpointed FP/VEC state, if used */
263     tm_recheckpoint(&tsk->thread, msr);
264    
265     @@ -570,6 +584,8 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
266     regs->msr |= MSR_VEC;
267     }
268    
269     + preempt_enable();
270     +
271     return err;
272     }
273     #endif
274     diff --git a/arch/x86/crypto/chacha20_glue.c b/arch/x86/crypto/chacha20_glue.c
275     index f910d1d449f0..0a5fedf43bdc 100644
276     --- a/arch/x86/crypto/chacha20_glue.c
277     +++ b/arch/x86/crypto/chacha20_glue.c
278     @@ -77,6 +77,7 @@ static int chacha20_simd(struct blkcipher_desc *desc, struct scatterlist *dst,
279    
280     blkcipher_walk_init(&walk, dst, src, nbytes);
281     err = blkcipher_walk_virt_block(desc, &walk, CHACHA20_BLOCK_SIZE);
282     + desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
283    
284     crypto_chacha20_init(state, crypto_blkcipher_ctx(desc->tfm), walk.iv);
285    
286     diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
287     index a2d8630058ed..70051bf0ee5c 100644
288     --- a/drivers/gpu/drm/vc4/vc4_plane.c
289     +++ b/drivers/gpu/drm/vc4/vc4_plane.c
290     @@ -352,6 +352,7 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
291     if (vc4_state->is_unity)
292     vc4_state->x_scaling[0] = VC4_SCALING_PPF;
293     } else {
294     + vc4_state->is_yuv = false;
295     vc4_state->x_scaling[1] = VC4_SCALING_NONE;
296     vc4_state->y_scaling[1] = VC4_SCALING_NONE;
297     }
298     diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
299     index e8d55a153a65..f91d9faf14ea 100644
300     --- a/drivers/hwtracing/intel_th/msu.c
301     +++ b/drivers/hwtracing/intel_th/msu.c
302     @@ -1429,7 +1429,8 @@ nr_pages_store(struct device *dev, struct device_attribute *attr,
303     if (!end)
304     break;
305    
306     - len -= end - p;
307     + /* consume the number and the following comma, hence +1 */
308     + len -= end - p + 1;
309     p = end + 1;
310     } while (len);
311    
312     diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
313     index 14ddb7506085..d9c71750e22d 100644
314     --- a/drivers/infiniband/hw/hfi1/verbs.c
315     +++ b/drivers/infiniband/hw/hfi1/verbs.c
316     @@ -1088,6 +1088,8 @@ int hfi1_verbs_send_pio(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
317    
318     if (slen > len)
319     slen = len;
320     + if (slen > ss->sge.sge_length)
321     + slen = ss->sge.sge_length;
322     update_sge(ss, slen);
323     seg_pio_copy_mid(pbuf, addr, slen);
324     len -= slen;
325     diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
326     index 2152c71a99d3..297653ab4004 100644
327     --- a/drivers/infiniband/sw/rxe/rxe_resp.c
328     +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
329     @@ -826,11 +826,16 @@ static enum resp_states do_complete(struct rxe_qp *qp,
330    
331     memset(&cqe, 0, sizeof(cqe));
332    
333     - wc->wr_id = wqe->wr_id;
334     - wc->status = qp->resp.status;
335     - wc->qp = &qp->ibqp;
336     + if (qp->rcq->is_user) {
337     + uwc->status = qp->resp.status;
338     + uwc->qp_num = qp->ibqp.qp_num;
339     + uwc->wr_id = wqe->wr_id;
340     + } else {
341     + wc->status = qp->resp.status;
342     + wc->qp = &qp->ibqp;
343     + wc->wr_id = wqe->wr_id;
344     + }
345    
346     - /* fields after status are not required for errors */
347     if (wc->status == IB_WC_SUCCESS) {
348     wc->opcode = (pkt->mask & RXE_IMMDT_MASK &&
349     pkt->mask & RXE_WRITE_MASK) ?
350     diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
351     index f78c464899db..3d2c60c8de83 100644
352     --- a/drivers/input/keyboard/omap4-keypad.c
353     +++ b/drivers/input/keyboard/omap4-keypad.c
354     @@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
355     {
356     struct omap4_keypad *keypad_data = dev_id;
357    
358     - if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
359     - /* Disable interrupts */
360     - kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
361     - OMAP4_VAL_IRQDISABLE);
362     + if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
363     return IRQ_WAKE_THREAD;
364     - }
365    
366     return IRQ_NONE;
367     }
368     @@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
369     kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
370     kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
371    
372     - /* enable interrupts */
373     - kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
374     - OMAP4_DEF_IRQENABLE_EVENTEN |
375     - OMAP4_DEF_IRQENABLE_LONGKEY);
376     -
377     return IRQ_HANDLED;
378     }
379    
380     @@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
381    
382     disable_irq(keypad_data->irq);
383    
384     - /* Disable interrupts */
385     + /* Disable interrupts and wake-up events */
386     kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
387     OMAP4_VAL_IRQDISABLE);
388     + kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
389    
390     /* clear pending interrupts */
391     kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
392     @@ -364,7 +356,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
393     }
394    
395     error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
396     - omap4_keypad_irq_thread_fn, 0,
397     + omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
398     "omap4-keypad", keypad_data);
399     if (error) {
400     dev_err(&pdev->dev, "failed to register interrupt\n");
401     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
402     index f8c8537f0587..86e349614e21 100644
403     --- a/drivers/iommu/intel-iommu.c
404     +++ b/drivers/iommu/intel-iommu.c
405     @@ -2084,7 +2084,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
406     * than default. Unnecessary for PT mode.
407     */
408     if (translation != CONTEXT_TT_PASS_THROUGH) {
409     - for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
410     + for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
411     ret = -ENOMEM;
412     pgd = phys_to_virt(dma_pte_addr(pgd));
413     if (!dma_pte_present(pgd))
414     @@ -2098,7 +2098,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
415     translation = CONTEXT_TT_MULTI_LEVEL;
416    
417     context_set_address_root(context, virt_to_phys(pgd));
418     - context_set_address_width(context, iommu->agaw);
419     + context_set_address_width(context, agaw);
420     } else {
421     /*
422     * In pass through mode, AW must be programmed to
423     diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
424     index fc2794b513fa..466a9b711480 100644
425     --- a/drivers/misc/genwqe/card_utils.c
426     +++ b/drivers/misc/genwqe/card_utils.c
427     @@ -217,7 +217,7 @@ u32 genwqe_crc32(u8 *buff, size_t len, u32 init)
428     void *__genwqe_alloc_consistent(struct genwqe_dev *cd, size_t size,
429     dma_addr_t *dma_handle)
430     {
431     - if (get_order(size) > MAX_ORDER)
432     + if (get_order(size) >= MAX_ORDER)
433     return NULL;
434    
435     return dma_zalloc_coherent(&cd->pci_dev->dev, size, dma_handle,
436     diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
437     index fca2e428cd86..de4b5d267c30 100644
438     --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
439     +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
440     @@ -29,9 +29,6 @@
441     #define RES_RING_CSR 1
442     #define RES_RING_CMD 2
443    
444     -static const struct of_device_id xgene_enet_of_match[];
445     -static const struct acpi_device_id xgene_enet_acpi_match[];
446     -
447     static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool)
448     {
449     struct xgene_enet_raw_desc16 *raw_desc;
450     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
451     index d5e4c42662b6..162b809422f4 100644
452     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
453     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
454     @@ -1278,6 +1278,7 @@ enum sp_rtnl_flag {
455     BNX2X_SP_RTNL_TX_STOP,
456     BNX2X_SP_RTNL_GET_DRV_VERSION,
457     BNX2X_SP_RTNL_CHANGE_UDP_PORT,
458     + BNX2X_SP_RTNL_UPDATE_SVID,
459     };
460    
461     enum bnx2x_iov_flag {
462     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
463     index 54dab4eac804..4bc2c806eb61 100644
464     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
465     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
466     @@ -2925,6 +2925,10 @@ static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
467     func_params.f_obj = &bp->func_obj;
468     func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
469    
470     + /* Prepare parameters for function state transitions */
471     + __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
472     + __set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
473     +
474     if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
475     int func = BP_ABS_FUNC(bp);
476     u32 val;
477     @@ -4301,7 +4305,8 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
478     bnx2x_handle_eee_event(bp);
479    
480     if (val & DRV_STATUS_OEM_UPDATE_SVID)
481     - bnx2x_handle_update_svid_cmd(bp);
482     + bnx2x_schedule_sp_rtnl(bp,
483     + BNX2X_SP_RTNL_UPDATE_SVID, 0);
484    
485     if (bp->link_vars.periodic_flags &
486     PERIODIC_FLAGS_LINK_EVENT) {
487     @@ -8462,6 +8467,7 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
488     /* Fill a user request section if needed */
489     if (!test_bit(RAMROD_CONT, ramrod_flags)) {
490     ramrod_param.user_req.u.vlan.vlan = vlan;
491     + __set_bit(BNX2X_VLAN, &ramrod_param.user_req.vlan_mac_flags);
492     /* Set the command: ADD or DEL */
493     if (set)
494     ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
495     @@ -8482,6 +8488,27 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
496     return rc;
497     }
498    
499     +static int bnx2x_del_all_vlans(struct bnx2x *bp)
500     +{
501     + struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
502     + unsigned long ramrod_flags = 0, vlan_flags = 0;
503     + struct bnx2x_vlan_entry *vlan;
504     + int rc;
505     +
506     + __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
507     + __set_bit(BNX2X_VLAN, &vlan_flags);
508     + rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_flags, &ramrod_flags);
509     + if (rc)
510     + return rc;
511     +
512     + /* Mark that hw forgot all entries */
513     + list_for_each_entry(vlan, &bp->vlan_reg, link)
514     + vlan->hw = false;
515     + bp->vlan_cnt = 0;
516     +
517     + return 0;
518     +}
519     +
520     int bnx2x_del_all_macs(struct bnx2x *bp,
521     struct bnx2x_vlan_mac_obj *mac_obj,
522     int mac_type, bool wait_for_comp)
523     @@ -9320,6 +9347,17 @@ void bnx2x_chip_cleanup(struct bnx2x *bp, int unload_mode, bool keep_link)
524     BNX2X_ERR("Failed to schedule DEL commands for UC MACs list: %d\n",
525     rc);
526    
527     + /* The whole *vlan_obj structure may be not initialized if VLAN
528     + * filtering offload is not supported by hardware. Currently this is
529     + * true for all hardware covered by CHIP_IS_E1x().
530     + */
531     + if (!CHIP_IS_E1x(bp)) {
532     + /* Remove all currently configured VLANs */
533     + rc = bnx2x_del_all_vlans(bp);
534     + if (rc < 0)
535     + BNX2X_ERR("Failed to delete all VLANs\n");
536     + }
537     +
538     /* Disable LLH */
539     if (!CHIP_IS_E1(bp))
540     REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
541     @@ -10342,6 +10380,9 @@ sp_rtnl_not_reset:
542     &bp->sp_rtnl_state))
543     bnx2x_update_mng_version(bp);
544    
545     + if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
546     + bnx2x_handle_update_svid_cmd(bp);
547     +
548     if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
549     &bp->sp_rtnl_state)) {
550     if (bnx2x_udp_port_update(bp)) {
551     @@ -11733,8 +11774,10 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp)
552     * If maximum allowed number of connections is zero -
553     * disable the feature.
554     */
555     - if (!bp->cnic_eth_dev.max_fcoe_conn)
556     + if (!bp->cnic_eth_dev.max_fcoe_conn) {
557     bp->flags |= NO_FCOE_FLAG;
558     + eth_zero_addr(bp->fip_mac);
559     + }
560     }
561    
562     static void bnx2x_get_cnic_info(struct bnx2x *bp)
563     @@ -13005,13 +13048,6 @@ static void bnx2x_vlan_configure(struct bnx2x *bp, bool set_rx_mode)
564    
565     int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp)
566     {
567     - struct bnx2x_vlan_entry *vlan;
568     -
569     - /* The hw forgot all entries after reload */
570     - list_for_each_entry(vlan, &bp->vlan_reg, link)
571     - vlan->hw = false;
572     - bp->vlan_cnt = 0;
573     -
574     /* Don't set rx mode here. Our caller will do it. */
575     bnx2x_vlan_configure(bp, false);
576    
577     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
578     index 0bf2fd470819..7a6e82db4231 100644
579     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
580     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
581     @@ -265,6 +265,7 @@ enum {
582     BNX2X_ETH_MAC,
583     BNX2X_ISCSI_ETH_MAC,
584     BNX2X_NETQ_ETH_MAC,
585     + BNX2X_VLAN,
586     BNX2X_DONT_CONSUME_CAM_CREDIT,
587     BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
588     };
589     @@ -272,7 +273,8 @@ enum {
590     #define BNX2X_VLAN_MAC_CMP_MASK (1 << BNX2X_UC_LIST_MAC | \
591     1 << BNX2X_ETH_MAC | \
592     1 << BNX2X_ISCSI_ETH_MAC | \
593     - 1 << BNX2X_NETQ_ETH_MAC)
594     + 1 << BNX2X_NETQ_ETH_MAC | \
595     + 1 << BNX2X_VLAN)
596     #define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
597     ((flags) & BNX2X_VLAN_MAC_CMP_MASK)
598    
599     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
600     index b7c8433a7a37..0b4d90ceea7a 100644
601     --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
602     +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
603     @@ -290,6 +290,9 @@ void hns_ae_stop(struct hnae_handle *handle)
604    
605     hns_ae_ring_enable_all(handle, 0);
606    
607     + /* clean rx fbd. */
608     + hns_rcb_wait_fbd_clean(handle->qs, handle->q_num, RCB_INT_FLAG_RX);
609     +
610     (void)hns_mac_vm_config_bc_en(mac_cb, 0, false);
611     }
612    
613     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
614     index 02a03bccde7b..95967470d423 100644
615     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
616     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
617     @@ -67,11 +67,14 @@ static void hns_gmac_enable(void *mac_drv, enum mac_commom_mode mode)
618     struct mac_driver *drv = (struct mac_driver *)mac_drv;
619    
620     /*enable GE rX/tX */
621     - if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
622     + if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
623     dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 1);
624    
625     - if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
626     + if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
627     + /* enable rx pcs */
628     + dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 0);
629     dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 1);
630     + }
631     }
632    
633     static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
634     @@ -79,11 +82,14 @@ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
635     struct mac_driver *drv = (struct mac_driver *)mac_drv;
636    
637     /*disable GE rX/tX */
638     - if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
639     + if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
640     dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 0);
641    
642     - if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
643     + if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
644     + /* disable rx pcs */
645     + dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 1);
646     dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 0);
647     + }
648     }
649    
650     /* hns_gmac_get_en - get port enable
651     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
652     index ec8c738af726..b6429be2b8bd 100644
653     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
654     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
655     @@ -724,6 +724,17 @@ static void hns_mac_register_phy(struct hns_mac_cb *mac_cb)
656     mac_cb->mac_id, addr);
657     }
658    
659     +static void hns_mac_remove_phydev(struct hns_mac_cb *mac_cb)
660     +{
661     + if (!to_acpi_device_node(mac_cb->fw_port) || !mac_cb->phy_dev)
662     + return;
663     +
664     + phy_device_remove(mac_cb->phy_dev);
665     + phy_device_free(mac_cb->phy_dev);
666     +
667     + mac_cb->phy_dev = NULL;
668     +}
669     +
670     #define MAC_MEDIA_TYPE_MAX_LEN 16
671    
672     static const struct {
673     @@ -1030,7 +1041,11 @@ void hns_mac_uninit(struct dsaf_device *dsaf_dev)
674     int max_port_num = hns_mac_get_max_port_num(dsaf_dev);
675    
676     for (i = 0; i < max_port_num; i++) {
677     + if (!dsaf_dev->mac_cb[i])
678     + continue;
679     +
680     dsaf_dev->misc_op->cpld_reset_led(dsaf_dev->mac_cb[i]);
681     + hns_mac_remove_phydev(dsaf_dev->mac_cb[i]);
682     dsaf_dev->mac_cb[i] = NULL;
683     }
684     }
685     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
686     index 8ea3d95fa483..5bb019d49409 100644
687     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
688     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
689     @@ -2163,9 +2163,9 @@ void hns_dsaf_update_stats(struct dsaf_device *dsaf_dev, u32 node_num)
690     DSAF_INODE_LOCAL_ADDR_FALSE_NUM_0_REG + 0x80 * (u64)node_num);
691    
692     hw_stats->vlan_drop += dsaf_read_dev(dsaf_dev,
693     - DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 0x80 * (u64)node_num);
694     + DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 4 * (u64)node_num);
695     hw_stats->stp_drop += dsaf_read_dev(dsaf_dev,
696     - DSAF_INODE_IN_DATA_STP_DISC_0_REG + 0x80 * (u64)node_num);
697     + DSAF_INODE_IN_DATA_STP_DISC_0_REG + 4 * (u64)node_num);
698    
699     /* pfc pause frame statistics stored in dsaf inode*/
700     if ((node_num < DSAF_SERVICE_NW_NUM) && !is_ver1) {
701     @@ -2282,237 +2282,237 @@ void hns_dsaf_get_regs(struct dsaf_device *ddev, u32 port, void *data)
702     DSAF_INODE_BD_ORDER_STATUS_0_REG + j * 4);
703     p[223 + i] = dsaf_read_dev(ddev,
704     DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + j * 4);
705     - p[224 + i] = dsaf_read_dev(ddev,
706     + p[226 + i] = dsaf_read_dev(ddev,
707     DSAF_INODE_IN_DATA_STP_DISC_0_REG + j * 4);
708     }
709    
710     - p[227] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
711     + p[229] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
712    
713     for (i = 0; i < DSAF_INODE_NUM / DSAF_COMM_CHN; i++) {
714     j = i * DSAF_COMM_CHN + port;
715     - p[228 + i] = dsaf_read_dev(ddev,
716     + p[230 + i] = dsaf_read_dev(ddev,
717     DSAF_INODE_VC0_IN_PKT_NUM_0_REG + j * 4);
718     }
719    
720     - p[231] = dsaf_read_dev(ddev,
721     - DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 4);
722     + p[233] = dsaf_read_dev(ddev,
723     + DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 0x80);
724    
725     /* dsaf inode registers */
726     for (i = 0; i < HNS_DSAF_SBM_NUM(ddev) / DSAF_COMM_CHN; i++) {
727     j = i * DSAF_COMM_CHN + port;
728     - p[232 + i] = dsaf_read_dev(ddev,
729     + p[234 + i] = dsaf_read_dev(ddev,
730     DSAF_SBM_CFG_REG_0_REG + j * 0x80);
731     - p[235 + i] = dsaf_read_dev(ddev,
732     + p[237 + i] = dsaf_read_dev(ddev,
733     DSAF_SBM_BP_CFG_0_XGE_REG_0_REG + j * 0x80);
734     - p[238 + i] = dsaf_read_dev(ddev,
735     + p[240 + i] = dsaf_read_dev(ddev,
736     DSAF_SBM_BP_CFG_1_REG_0_REG + j * 0x80);
737     - p[241 + i] = dsaf_read_dev(ddev,
738     + p[243 + i] = dsaf_read_dev(ddev,
739     DSAF_SBM_BP_CFG_2_XGE_REG_0_REG + j * 0x80);
740     - p[244 + i] = dsaf_read_dev(ddev,
741     + p[246 + i] = dsaf_read_dev(ddev,
742     DSAF_SBM_FREE_CNT_0_0_REG + j * 0x80);
743     - p[245 + i] = dsaf_read_dev(ddev,
744     + p[249 + i] = dsaf_read_dev(ddev,
745     DSAF_SBM_FREE_CNT_1_0_REG + j * 0x80);
746     - p[248 + i] = dsaf_read_dev(ddev,
747     + p[252 + i] = dsaf_read_dev(ddev,
748     DSAF_SBM_BP_CNT_0_0_REG + j * 0x80);
749     - p[251 + i] = dsaf_read_dev(ddev,
750     + p[255 + i] = dsaf_read_dev(ddev,
751     DSAF_SBM_BP_CNT_1_0_REG + j * 0x80);
752     - p[254 + i] = dsaf_read_dev(ddev,
753     + p[258 + i] = dsaf_read_dev(ddev,
754     DSAF_SBM_BP_CNT_2_0_REG + j * 0x80);
755     - p[257 + i] = dsaf_read_dev(ddev,
756     + p[261 + i] = dsaf_read_dev(ddev,
757     DSAF_SBM_BP_CNT_3_0_REG + j * 0x80);
758     - p[260 + i] = dsaf_read_dev(ddev,
759     + p[264 + i] = dsaf_read_dev(ddev,
760     DSAF_SBM_INER_ST_0_REG + j * 0x80);
761     - p[263 + i] = dsaf_read_dev(ddev,
762     + p[267 + i] = dsaf_read_dev(ddev,
763     DSAF_SBM_MIB_REQ_FAILED_TC_0_REG + j * 0x80);
764     - p[266 + i] = dsaf_read_dev(ddev,
765     + p[270 + i] = dsaf_read_dev(ddev,
766     DSAF_SBM_LNK_INPORT_CNT_0_REG + j * 0x80);
767     - p[269 + i] = dsaf_read_dev(ddev,
768     + p[273 + i] = dsaf_read_dev(ddev,
769     DSAF_SBM_LNK_DROP_CNT_0_REG + j * 0x80);
770     - p[272 + i] = dsaf_read_dev(ddev,
771     + p[276 + i] = dsaf_read_dev(ddev,
772     DSAF_SBM_INF_OUTPORT_CNT_0_REG + j * 0x80);
773     - p[275 + i] = dsaf_read_dev(ddev,
774     + p[279 + i] = dsaf_read_dev(ddev,
775     DSAF_SBM_LNK_INPORT_TC0_CNT_0_REG + j * 0x80);
776     - p[278 + i] = dsaf_read_dev(ddev,
777     + p[282 + i] = dsaf_read_dev(ddev,
778     DSAF_SBM_LNK_INPORT_TC1_CNT_0_REG + j * 0x80);
779     - p[281 + i] = dsaf_read_dev(ddev,
780     + p[285 + i] = dsaf_read_dev(ddev,
781     DSAF_SBM_LNK_INPORT_TC2_CNT_0_REG + j * 0x80);
782     - p[284 + i] = dsaf_read_dev(ddev,
783     + p[288 + i] = dsaf_read_dev(ddev,
784     DSAF_SBM_LNK_INPORT_TC3_CNT_0_REG + j * 0x80);
785     - p[287 + i] = dsaf_read_dev(ddev,
786     + p[291 + i] = dsaf_read_dev(ddev,
787     DSAF_SBM_LNK_INPORT_TC4_CNT_0_REG + j * 0x80);
788     - p[290 + i] = dsaf_read_dev(ddev,
789     + p[294 + i] = dsaf_read_dev(ddev,
790     DSAF_SBM_LNK_INPORT_TC5_CNT_0_REG + j * 0x80);
791     - p[293 + i] = dsaf_read_dev(ddev,
792     + p[297 + i] = dsaf_read_dev(ddev,
793     DSAF_SBM_LNK_INPORT_TC6_CNT_0_REG + j * 0x80);
794     - p[296 + i] = dsaf_read_dev(ddev,
795     + p[300 + i] = dsaf_read_dev(ddev,
796     DSAF_SBM_LNK_INPORT_TC7_CNT_0_REG + j * 0x80);
797     - p[299 + i] = dsaf_read_dev(ddev,
798     + p[303 + i] = dsaf_read_dev(ddev,
799     DSAF_SBM_LNK_REQ_CNT_0_REG + j * 0x80);
800     - p[302 + i] = dsaf_read_dev(ddev,
801     + p[306 + i] = dsaf_read_dev(ddev,
802     DSAF_SBM_LNK_RELS_CNT_0_REG + j * 0x80);
803     - p[305 + i] = dsaf_read_dev(ddev,
804     + p[309 + i] = dsaf_read_dev(ddev,
805     DSAF_SBM_BP_CFG_3_REG_0_REG + j * 0x80);
806     - p[308 + i] = dsaf_read_dev(ddev,
807     + p[312 + i] = dsaf_read_dev(ddev,
808     DSAF_SBM_BP_CFG_4_REG_0_REG + j * 0x80);
809     }
810    
811     /* dsaf onode registers */
812     for (i = 0; i < DSAF_XOD_NUM; i++) {
813     - p[311 + i] = dsaf_read_dev(ddev,
814     + p[315 + i] = dsaf_read_dev(ddev,
815     DSAF_XOD_ETS_TSA_TC0_TC3_CFG_0_REG + i * 0x90);
816     - p[319 + i] = dsaf_read_dev(ddev,
817     + p[323 + i] = dsaf_read_dev(ddev,
818     DSAF_XOD_ETS_TSA_TC4_TC7_CFG_0_REG + i * 0x90);
819     - p[327 + i] = dsaf_read_dev(ddev,
820     + p[331 + i] = dsaf_read_dev(ddev,
821     DSAF_XOD_ETS_BW_TC0_TC3_CFG_0_REG + i * 0x90);
822     - p[335 + i] = dsaf_read_dev(ddev,
823     + p[339 + i] = dsaf_read_dev(ddev,
824     DSAF_XOD_ETS_BW_TC4_TC7_CFG_0_REG + i * 0x90);
825     - p[343 + i] = dsaf_read_dev(ddev,
826     + p[347 + i] = dsaf_read_dev(ddev,
827     DSAF_XOD_ETS_BW_OFFSET_CFG_0_REG + i * 0x90);
828     - p[351 + i] = dsaf_read_dev(ddev,
829     + p[355 + i] = dsaf_read_dev(ddev,
830     DSAF_XOD_ETS_TOKEN_CFG_0_REG + i * 0x90);
831     }
832    
833     - p[359] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
834     - p[360] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
835     - p[361] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
836     + p[363] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
837     + p[364] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
838     + p[365] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
839    
840     for (i = 0; i < DSAF_XOD_BIG_NUM / DSAF_COMM_CHN; i++) {
841     j = i * DSAF_COMM_CHN + port;
842     - p[362 + i] = dsaf_read_dev(ddev,
843     + p[366 + i] = dsaf_read_dev(ddev,
844     DSAF_XOD_GNT_L_0_REG + j * 0x90);
845     - p[365 + i] = dsaf_read_dev(ddev,
846     + p[369 + i] = dsaf_read_dev(ddev,
847     DSAF_XOD_GNT_H_0_REG + j * 0x90);
848     - p[368 + i] = dsaf_read_dev(ddev,
849     + p[372 + i] = dsaf_read_dev(ddev,
850     DSAF_XOD_CONNECT_STATE_0_REG + j * 0x90);
851     - p[371 + i] = dsaf_read_dev(ddev,
852     + p[375 + i] = dsaf_read_dev(ddev,
853     DSAF_XOD_RCVPKT_CNT_0_REG + j * 0x90);
854     - p[374 + i] = dsaf_read_dev(ddev,
855     + p[378 + i] = dsaf_read_dev(ddev,
856     DSAF_XOD_RCVTC0_CNT_0_REG + j * 0x90);
857     - p[377 + i] = dsaf_read_dev(ddev,
858     + p[381 + i] = dsaf_read_dev(ddev,
859     DSAF_XOD_RCVTC1_CNT_0_REG + j * 0x90);
860     - p[380 + i] = dsaf_read_dev(ddev,
861     + p[384 + i] = dsaf_read_dev(ddev,
862     DSAF_XOD_RCVTC2_CNT_0_REG + j * 0x90);
863     - p[383 + i] = dsaf_read_dev(ddev,
864     + p[387 + i] = dsaf_read_dev(ddev,
865     DSAF_XOD_RCVTC3_CNT_0_REG + j * 0x90);
866     - p[386 + i] = dsaf_read_dev(ddev,
867     + p[390 + i] = dsaf_read_dev(ddev,
868     DSAF_XOD_RCVVC0_CNT_0_REG + j * 0x90);
869     - p[389 + i] = dsaf_read_dev(ddev,
870     + p[393 + i] = dsaf_read_dev(ddev,
871     DSAF_XOD_RCVVC1_CNT_0_REG + j * 0x90);
872     }
873    
874     - p[392] = dsaf_read_dev(ddev,
875     + p[396] = dsaf_read_dev(ddev,
876     DSAF_XOD_XGE_RCVIN0_CNT_0_REG + port * 0x90);
877     - p[393] = dsaf_read_dev(ddev,
878     + p[397] = dsaf_read_dev(ddev,
879     DSAF_XOD_XGE_RCVIN1_CNT_0_REG + port * 0x90);
880     - p[394] = dsaf_read_dev(ddev,
881     + p[398] = dsaf_read_dev(ddev,
882     DSAF_XOD_XGE_RCVIN2_CNT_0_REG + port * 0x90);
883     - p[395] = dsaf_read_dev(ddev,
884     + p[399] = dsaf_read_dev(ddev,
885     DSAF_XOD_XGE_RCVIN3_CNT_0_REG + port * 0x90);
886     - p[396] = dsaf_read_dev(ddev,
887     + p[400] = dsaf_read_dev(ddev,
888     DSAF_XOD_XGE_RCVIN4_CNT_0_REG + port * 0x90);
889     - p[397] = dsaf_read_dev(ddev,
890     + p[401] = dsaf_read_dev(ddev,
891     DSAF_XOD_XGE_RCVIN5_CNT_0_REG + port * 0x90);
892     - p[398] = dsaf_read_dev(ddev,
893     + p[402] = dsaf_read_dev(ddev,
894     DSAF_XOD_XGE_RCVIN6_CNT_0_REG + port * 0x90);
895     - p[399] = dsaf_read_dev(ddev,
896     + p[403] = dsaf_read_dev(ddev,
897     DSAF_XOD_XGE_RCVIN7_CNT_0_REG + port * 0x90);
898     - p[400] = dsaf_read_dev(ddev,
899     + p[404] = dsaf_read_dev(ddev,
900     DSAF_XOD_PPE_RCVIN0_CNT_0_REG + port * 0x90);
901     - p[401] = dsaf_read_dev(ddev,
902     + p[405] = dsaf_read_dev(ddev,
903     DSAF_XOD_PPE_RCVIN1_CNT_0_REG + port * 0x90);
904     - p[402] = dsaf_read_dev(ddev,
905     + p[406] = dsaf_read_dev(ddev,
906     DSAF_XOD_ROCEE_RCVIN0_CNT_0_REG + port * 0x90);
907     - p[403] = dsaf_read_dev(ddev,
908     + p[407] = dsaf_read_dev(ddev,
909     DSAF_XOD_ROCEE_RCVIN1_CNT_0_REG + port * 0x90);
910     - p[404] = dsaf_read_dev(ddev,
911     + p[408] = dsaf_read_dev(ddev,
912     DSAF_XOD_FIFO_STATUS_0_REG + port * 0x90);
913    
914     /* dsaf voq registers */
915     for (i = 0; i < DSAF_VOQ_NUM / DSAF_COMM_CHN; i++) {
916     j = (i * DSAF_COMM_CHN + port) * 0x90;
917     - p[405 + i] = dsaf_read_dev(ddev,
918     + p[409 + i] = dsaf_read_dev(ddev,
919     DSAF_VOQ_ECC_INVERT_EN_0_REG + j);
920     - p[408 + i] = dsaf_read_dev(ddev,
921     + p[412 + i] = dsaf_read_dev(ddev,
922     DSAF_VOQ_SRAM_PKT_NUM_0_REG + j);
923     - p[411 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
924     - p[414 + i] = dsaf_read_dev(ddev,
925     + p[415 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
926     + p[418 + i] = dsaf_read_dev(ddev,
927     DSAF_VOQ_OUT_PKT_NUM_0_REG + j);
928     - p[417 + i] = dsaf_read_dev(ddev,
929     + p[421 + i] = dsaf_read_dev(ddev,
930     DSAF_VOQ_ECC_ERR_ADDR_0_REG + j);
931     - p[420 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
932     - p[423 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
933     - p[426 + i] = dsaf_read_dev(ddev,
934     + p[424 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
935     + p[427 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
936     + p[430 + i] = dsaf_read_dev(ddev,
937     DSAF_VOQ_XGE_XOD_REQ_0_0_REG + j);
938     - p[429 + i] = dsaf_read_dev(ddev,
939     + p[433 + i] = dsaf_read_dev(ddev,
940     DSAF_VOQ_XGE_XOD_REQ_1_0_REG + j);
941     - p[432 + i] = dsaf_read_dev(ddev,
942     + p[436 + i] = dsaf_read_dev(ddev,
943     DSAF_VOQ_PPE_XOD_REQ_0_REG + j);
944     - p[435 + i] = dsaf_read_dev(ddev,
945     + p[439 + i] = dsaf_read_dev(ddev,
946     DSAF_VOQ_ROCEE_XOD_REQ_0_REG + j);
947     - p[438 + i] = dsaf_read_dev(ddev,
948     + p[442 + i] = dsaf_read_dev(ddev,
949     DSAF_VOQ_BP_ALL_THRD_0_REG + j);
950     }
951    
952     /* dsaf tbl registers */
953     - p[441] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
954     - p[442] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
955     - p[443] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
956     - p[444] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
957     - p[445] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
958     - p[446] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
959     - p[447] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
960     - p[448] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
961     - p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
962     - p[450] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
963     - p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
964     - p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
965     - p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
966     - p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
967     - p[455] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
968     - p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
969     - p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
970     - p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
971     - p[459] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
972     - p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
973     - p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
974     - p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
975     - p[463] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
976     + p[445] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
977     + p[446] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
978     + p[447] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
979     + p[448] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
980     + p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
981     + p[450] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
982     + p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
983     + p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
984     + p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
985     + p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
986     + p[455] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
987     + p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
988     + p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
989     + p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
990     + p[459] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
991     + p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
992     + p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
993     + p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
994     + p[463] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
995     + p[464] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
996     + p[465] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
997     + p[466] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
998     + p[467] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
999    
1000     for (i = 0; i < DSAF_SW_PORT_NUM; i++) {
1001     j = i * 0x8;
1002     - p[464 + 2 * i] = dsaf_read_dev(ddev,
1003     + p[468 + 2 * i] = dsaf_read_dev(ddev,
1004     DSAF_TBL_DA0_MIS_INFO1_0_REG + j);
1005     - p[465 + 2 * i] = dsaf_read_dev(ddev,
1006     + p[469 + 2 * i] = dsaf_read_dev(ddev,
1007     DSAF_TBL_DA0_MIS_INFO0_0_REG + j);
1008     }
1009    
1010     - p[480] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
1011     - p[481] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
1012     - p[482] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
1013     - p[483] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
1014     - p[484] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
1015     - p[485] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
1016     - p[486] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
1017     - p[487] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
1018     - p[488] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
1019     - p[489] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
1020     - p[490] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
1021     - p[491] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
1022     + p[484] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
1023     + p[485] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
1024     + p[486] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
1025     + p[487] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
1026     + p[488] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
1027     + p[489] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
1028     + p[490] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
1029     + p[491] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
1030     + p[492] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
1031     + p[493] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
1032     + p[494] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
1033     + p[495] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
1034    
1035     /* dsaf other registers */
1036     - p[492] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
1037     - p[493] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
1038     - p[494] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
1039     - p[495] = dsaf_read_dev(ddev,
1040     + p[496] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
1041     + p[497] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
1042     + p[498] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
1043     + p[499] = dsaf_read_dev(ddev,
1044     DSAF_XGE_APP_RX_LINK_UP_0_REG + port * 0x4);
1045     - p[496] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
1046     - p[497] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
1047     + p[500] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
1048     + p[501] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
1049    
1050     if (!is_ver1)
1051     - p[498] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
1052     + p[502] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
1053    
1054     /* mark end of dsaf regs */
1055     - for (i = 499; i < 504; i++)
1056     + for (i = 503; i < 504; i++)
1057     p[i] = 0xdddddddd;
1058     }
1059    
1060     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
1061     index 2cf8b1d82d6a..6f3ec2f1535d 100644
1062     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
1063     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
1064     @@ -173,7 +173,7 @@
1065     #define DSAF_INODE_IN_DATA_STP_DISC_0_REG 0x1A50
1066     #define DSAF_INODE_GE_FC_EN_0_REG 0x1B00
1067     #define DSAF_INODE_VC0_IN_PKT_NUM_0_REG 0x1B50
1068     -#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x1C00
1069     +#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x103C
1070     #define DSAF_INODE_IN_PRIO_PAUSE_BASE_REG 0x1C00
1071     #define DSAF_INODE_IN_PRIO_PAUSE_BASE_OFFSET 0x100
1072     #define DSAF_INODE_IN_PRIO_PAUSE_OFFSET 0x50
1073     @@ -400,11 +400,11 @@
1074     #define RCB_ECC_ERR_ADDR4_REG 0x460
1075     #define RCB_ECC_ERR_ADDR5_REG 0x464
1076    
1077     -#define RCB_COM_SF_CFG_INTMASK_RING 0x480
1078     -#define RCB_COM_SF_CFG_RING_STS 0x484
1079     -#define RCB_COM_SF_CFG_RING 0x488
1080     -#define RCB_COM_SF_CFG_INTMASK_BD 0x48C
1081     -#define RCB_COM_SF_CFG_BD_RINT_STS 0x470
1082     +#define RCB_COM_SF_CFG_INTMASK_RING 0x470
1083     +#define RCB_COM_SF_CFG_RING_STS 0x474
1084     +#define RCB_COM_SF_CFG_RING 0x478
1085     +#define RCB_COM_SF_CFG_INTMASK_BD 0x47C
1086     +#define RCB_COM_SF_CFG_BD_RINT_STS 0x480
1087     #define RCB_COM_RCB_RD_BD_BUSY 0x490
1088     #define RCB_COM_RCB_FBD_CRT_EN 0x494
1089     #define RCB_COM_AXI_WR_ERR_INTMASK 0x498
1090     @@ -528,6 +528,7 @@
1091     #define GMAC_LD_LINK_COUNTER_REG 0x01D0UL
1092     #define GMAC_LOOP_REG 0x01DCUL
1093     #define GMAC_RECV_CONTROL_REG 0x01E0UL
1094     +#define GMAC_PCS_RX_EN_REG 0x01E4UL
1095     #define GMAC_VLAN_CODE_REG 0x01E8UL
1096     #define GMAC_RX_OVERRUN_CNT_REG 0x01ECUL
1097     #define GMAC_RX_LENGTHFIELD_ERR_CNT_REG 0x01F4UL
1098     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1099     index 92ed6534ceae..a2f7d0834071 100644
1100     --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1101     +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1102     @@ -1079,6 +1079,9 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
1103     if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
1104     phy_dev->autoneg = false;
1105    
1106     + if (h->phy_if == PHY_INTERFACE_MODE_SGMII)
1107     + phy_stop(phy_dev);
1108     +
1109     return 0;
1110     }
1111    
1112     @@ -1192,6 +1195,22 @@ static void hns_set_irq_affinity(struct hns_nic_priv *priv)
1113     }
1114     }
1115    
1116     +static void hns_nic_free_irq(int q_num, struct hns_nic_priv *priv)
1117     +{
1118     + int i;
1119     +
1120     + for (i = 0; i < q_num * 2; i++) {
1121     + if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
1122     + irq_set_affinity_hint(priv->ring_data[i].ring->irq,
1123     + NULL);
1124     + free_irq(priv->ring_data[i].ring->irq,
1125     + &priv->ring_data[i]);
1126     + priv->ring_data[i].ring->irq_init_flag =
1127     + RCB_IRQ_NOT_INITED;
1128     + }
1129     + }
1130     +}
1131     +
1132     static int hns_nic_init_irq(struct hns_nic_priv *priv)
1133     {
1134     struct hnae_handle *h = priv->ae_handle;
1135     @@ -1216,7 +1235,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
1136     if (ret) {
1137     netdev_err(priv->netdev, "request irq(%d) fail\n",
1138     rd->ring->irq);
1139     - return ret;
1140     + goto out_free_irq;
1141     }
1142     disable_irq(rd->ring->irq);
1143     rd->ring->irq_init_flag = RCB_IRQ_INITED;
1144     @@ -1226,6 +1245,10 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
1145     hns_set_irq_affinity(priv);
1146    
1147     return 0;
1148     +
1149     +out_free_irq:
1150     + hns_nic_free_irq(h->q_num, priv);
1151     + return ret;
1152     }
1153    
1154     static int hns_nic_net_up(struct net_device *ndev)
1155     @@ -1235,6 +1258,9 @@ static int hns_nic_net_up(struct net_device *ndev)
1156     int i, j;
1157     int ret;
1158    
1159     + if (!test_bit(NIC_STATE_DOWN, &priv->state))
1160     + return 0;
1161     +
1162     ret = hns_nic_init_irq(priv);
1163     if (ret != 0) {
1164     netdev_err(ndev, "hns init irq failed! ret=%d\n", ret);
1165     @@ -1270,6 +1296,7 @@ out_has_some_queues:
1166     for (j = i - 1; j >= 0; j--)
1167     hns_nic_ring_close(ndev, j);
1168    
1169     + hns_nic_free_irq(h->q_num, priv);
1170     set_bit(NIC_STATE_DOWN, &priv->state);
1171    
1172     return ret;
1173     @@ -1380,11 +1407,19 @@ static int hns_nic_net_stop(struct net_device *ndev)
1174     }
1175    
1176     static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
1177     +#define HNS_TX_TIMEO_LIMIT (40 * HZ)
1178     static void hns_nic_net_timeout(struct net_device *ndev)
1179     {
1180     struct hns_nic_priv *priv = netdev_priv(ndev);
1181    
1182     - hns_tx_timeout_reset(priv);
1183     + if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
1184     + ndev->watchdog_timeo *= 2;
1185     + netdev_info(ndev, "watchdog_timo changed to %d.\n",
1186     + ndev->watchdog_timeo);
1187     + } else {
1188     + ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
1189     + hns_tx_timeout_reset(priv);
1190     + }
1191     }
1192    
1193     static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
1194     @@ -1718,11 +1753,11 @@ static void hns_nic_service_task(struct work_struct *work)
1195     = container_of(work, struct hns_nic_priv, service_task);
1196     struct hnae_handle *h = priv->ae_handle;
1197    
1198     + hns_nic_reset_subtask(priv);
1199     hns_nic_update_link_status(priv->netdev);
1200     h->dev->ops->update_led_status(h);
1201     hns_nic_update_stats(priv->netdev);
1202    
1203     - hns_nic_reset_subtask(priv);
1204     hns_nic_service_event_complete(priv);
1205     }
1206    
1207     @@ -2001,7 +2036,7 @@ static int hns_nic_dev_probe(struct platform_device *pdev)
1208    
1209     switch (priv->enet_ver) {
1210     case AE_VERSION_2:
1211     - ndev->features |= NETIF_F_TSO | NETIF_F_TSO6;
1212     + ndev->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_NTUPLE;
1213     ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
1214     NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
1215     NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6;
1216     diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
1217     index 6223930a8155..6f57b0b7d57a 100644
1218     --- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
1219     +++ b/drivers/net/ethernet/neterion/vxge/vxge-config.c
1220     @@ -808,7 +808,7 @@ __vxge_hw_vpath_fw_ver_get(struct __vxge_hw_virtualpath *vpath,
1221     struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
1222     struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
1223     struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
1224     - u64 data0, data1 = 0, steer_ctrl = 0;
1225     + u64 data0 = 0, data1 = 0, steer_ctrl = 0;
1226     enum vxge_hw_status status;
1227    
1228     status = vxge_hw_vpath_fw_api(vpath,
1229     diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
1230     index 712d8bcb7d8c..a2960169a784 100644
1231     --- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
1232     +++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
1233     @@ -918,7 +918,7 @@ static const struct net_device_ops w90p910_ether_netdev_ops = {
1234     .ndo_change_mtu = eth_change_mtu,
1235     };
1236    
1237     -static void __init get_mac_address(struct net_device *dev)
1238     +static void get_mac_address(struct net_device *dev)
1239     {
1240     struct w90p910_ether *ether = netdev_priv(dev);
1241     struct platform_device *pdev;
1242     diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
1243     index 7b43a3b4abdc..5cf551914767 100644
1244     --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
1245     +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
1246     @@ -1125,7 +1125,8 @@ netxen_validate_firmware(struct netxen_adapter *adapter)
1247     return -EINVAL;
1248     }
1249     val = nx_get_bios_version(adapter);
1250     - netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios);
1251     + if (netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios))
1252     + return -EIO;
1253     if ((__force u32)val != bios) {
1254     dev_err(&pdev->dev, "%s: firmware bios is incompatible\n",
1255     fw_name[fw_type]);
1256     diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
1257     index 6b4e38105b72..e143a7fe9320 100644
1258     --- a/drivers/net/usb/lan78xx.c
1259     +++ b/drivers/net/usb/lan78xx.c
1260     @@ -2014,6 +2014,10 @@ static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
1261     ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1262     ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1263    
1264     + /* Added to support MAC address changes */
1265     + ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1266     + ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1267     +
1268     return 0;
1269     }
1270    
1271     diff --git a/drivers/net/wireless/broadcom/b43/phy_common.c b/drivers/net/wireless/broadcom/b43/phy_common.c
1272     index 85f2ca989565..ef3ffa5ad466 100644
1273     --- a/drivers/net/wireless/broadcom/b43/phy_common.c
1274     +++ b/drivers/net/wireless/broadcom/b43/phy_common.c
1275     @@ -616,7 +616,7 @@ struct b43_c32 b43_cordic(int theta)
1276     u8 i;
1277     s32 tmp;
1278     s8 signx = 1;
1279     - u32 angle = 0;
1280     + s32 angle = 0;
1281     struct b43_c32 ret = { .i = 39797, .q = 0, };
1282    
1283     while (theta > (180 << 16))
1284     diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
1285     index df61a71420b1..8e73641bd823 100644
1286     --- a/drivers/pinctrl/meson/pinctrl-meson.c
1287     +++ b/drivers/pinctrl/meson/pinctrl-meson.c
1288     @@ -274,7 +274,8 @@ static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
1289     case PIN_CONFIG_BIAS_DISABLE:
1290     dev_dbg(pc->dev, "pin %u: disable bias\n", pin);
1291    
1292     - meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
1293     + meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg,
1294     + &bit);
1295     ret = regmap_update_bits(pc->reg_pullen, reg,
1296     BIT(bit), 0);
1297     if (ret)
1298     diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
1299     index 9e29b1321648..15783869e1a0 100644
1300     --- a/drivers/power/supply/olpc_battery.c
1301     +++ b/drivers/power/supply/olpc_battery.c
1302     @@ -427,14 +427,14 @@ static int olpc_bat_get_property(struct power_supply *psy,
1303     if (ret)
1304     return ret;
1305    
1306     - val->intval = (s16)be16_to_cpu(ec_word) * 100 / 256;
1307     + val->intval = (s16)be16_to_cpu(ec_word) * 10 / 256;
1308     break;
1309     case POWER_SUPPLY_PROP_TEMP_AMBIENT:
1310     ret = olpc_ec_cmd(EC_AMB_TEMP, NULL, 0, (void *)&ec_word, 2);
1311     if (ret)
1312     return ret;
1313    
1314     - val->intval = (int)be16_to_cpu(ec_word) * 100 / 256;
1315     + val->intval = (int)be16_to_cpu(ec_word) * 10 / 256;
1316     break;
1317     case POWER_SUPPLY_PROP_CHARGE_COUNTER:
1318     ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2);
1319     diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
1320     index b3f9243cfed5..36eb298329d8 100644
1321     --- a/drivers/s390/scsi/zfcp_aux.c
1322     +++ b/drivers/s390/scsi/zfcp_aux.c
1323     @@ -275,16 +275,16 @@ static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter)
1324     */
1325     int zfcp_status_read_refill(struct zfcp_adapter *adapter)
1326     {
1327     - while (atomic_read(&adapter->stat_miss) > 0)
1328     + while (atomic_add_unless(&adapter->stat_miss, -1, 0))
1329     if (zfcp_fsf_status_read(adapter->qdio)) {
1330     + atomic_inc(&adapter->stat_miss); /* undo add -1 */
1331     if (atomic_read(&adapter->stat_miss) >=
1332     adapter->stat_read_buf_num) {
1333     zfcp_erp_adapter_reopen(adapter, 0, "axsref1");
1334     return 1;
1335     }
1336     break;
1337     - } else
1338     - atomic_dec(&adapter->stat_miss);
1339     + }
1340     return 0;
1341     }
1342    
1343     diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
1344     index bee7d37367ca..68cc332bd6cb 100644
1345     --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
1346     +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
1347     @@ -2331,7 +2331,7 @@ static int _bnx2fc_create(struct net_device *netdev,
1348     if (!interface) {
1349     printk(KERN_ERR PFX "bnx2fc_interface_create failed\n");
1350     rc = -ENOMEM;
1351     - goto ifput_err;
1352     + goto netdev_err;
1353     }
1354    
1355     if (netdev->priv_flags & IFF_802_1Q_VLAN) {
1356     diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
1357     index 2fb1bf1a26c5..8652475e01d0 100644
1358     --- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
1359     +++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
1360     @@ -631,8 +631,11 @@ static void cxgbit_send_halfclose(struct cxgbit_sock *csk)
1361    
1362     static void cxgbit_arp_failure_discard(void *handle, struct sk_buff *skb)
1363     {
1364     + struct cxgbit_sock *csk = handle;
1365     +
1366     pr_debug("%s cxgbit_device %p\n", __func__, handle);
1367     kfree_skb(skb);
1368     + cxgbit_put_csk(csk);
1369     }
1370    
1371     static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
1372     @@ -1136,7 +1139,7 @@ cxgbit_pass_accept_rpl(struct cxgbit_sock *csk, struct cpl_pass_accept_req *req)
1373     rpl5->opt0 = cpu_to_be64(opt0);
1374     rpl5->opt2 = cpu_to_be32(opt2);
1375     set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->ctrlq_idx);
1376     - t4_set_arp_err_handler(skb, NULL, cxgbit_arp_failure_discard);
1377     + t4_set_arp_err_handler(skb, csk, cxgbit_arp_failure_discard);
1378     cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
1379     }
1380    
1381     diff --git a/drivers/target/iscsi/cxgbit/cxgbit_main.c b/drivers/target/iscsi/cxgbit/cxgbit_main.c
1382     index ad26b9372f10..d55261e1d522 100644
1383     --- a/drivers/target/iscsi/cxgbit/cxgbit_main.c
1384     +++ b/drivers/target/iscsi/cxgbit/cxgbit_main.c
1385     @@ -58,6 +58,7 @@ static void *cxgbit_uld_add(const struct cxgb4_lld_info *lldi)
1386     return ERR_PTR(-ENOMEM);
1387    
1388     kref_init(&cdev->kref);
1389     + spin_lock_init(&cdev->np_lock);
1390    
1391     cdev->lldi = *lldi;
1392    
1393     diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
1394     index 9ad98eaa35bf..26ae83026c52 100644
1395     --- a/drivers/tty/serial/sunsu.c
1396     +++ b/drivers/tty/serial/sunsu.c
1397     @@ -1393,22 +1393,43 @@ static inline struct console *SUNSU_CONSOLE(void)
1398     static enum su_type su_get_type(struct device_node *dp)
1399     {
1400     struct device_node *ap = of_find_node_by_path("/aliases");
1401     + enum su_type rc = SU_PORT_PORT;
1402    
1403     if (ap) {
1404     const char *keyb = of_get_property(ap, "keyboard", NULL);
1405     const char *ms = of_get_property(ap, "mouse", NULL);
1406     + struct device_node *match;
1407    
1408     if (keyb) {
1409     - if (dp == of_find_node_by_path(keyb))
1410     - return SU_PORT_KBD;
1411     + match = of_find_node_by_path(keyb);
1412     +
1413     + /*
1414     + * The pointer is used as an identifier not
1415     + * as a pointer, we can drop the refcount on
1416     + * the of__node immediately after getting it.
1417     + */
1418     + of_node_put(match);
1419     +
1420     + if (dp == match) {
1421     + rc = SU_PORT_KBD;
1422     + goto out;
1423     + }
1424     }
1425     if (ms) {
1426     - if (dp == of_find_node_by_path(ms))
1427     - return SU_PORT_MS;
1428     + match = of_find_node_by_path(ms);
1429     +
1430     + of_node_put(match);
1431     +
1432     + if (dp == match) {
1433     + rc = SU_PORT_MS;
1434     + goto out;
1435     + }
1436     }
1437     }
1438    
1439     - return SU_PORT_PORT;
1440     +out:
1441     + of_node_put(ap);
1442     + return rc;
1443     }
1444    
1445     static int su_probe(struct platform_device *op)
1446     diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
1447     index 46f966d7c328..72e914de473e 100644
1448     --- a/drivers/vhost/vsock.c
1449     +++ b/drivers/vhost/vsock.c
1450     @@ -520,6 +520,8 @@ static int vhost_vsock_dev_open(struct inode *inode, struct file *file)
1451     goto out;
1452     }
1453    
1454     + vsock->guest_cid = 0; /* no CID assigned yet */
1455     +
1456     atomic_set(&vsock->queued_replies, 0);
1457    
1458     vqs[VSOCK_VQ_TX] = &vsock->vqs[VSOCK_VQ_TX];
1459     diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
1460     index 3e1c136aadb7..f916cd7b1918 100644
1461     --- a/fs/ceph/caps.c
1462     +++ b/fs/ceph/caps.c
1463     @@ -3343,7 +3343,6 @@ retry:
1464     tcap->cap_id = t_cap_id;
1465     tcap->seq = t_seq - 1;
1466     tcap->issue_seq = t_seq - 1;
1467     - tcap->mseq = t_mseq;
1468     tcap->issued |= issued;
1469     tcap->implemented |= issued;
1470     if (cap == ci->i_auth_cap)
1471     diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
1472     index 35502d4046f5..3a7f401e943c 100644
1473     --- a/fs/dlm/lock.c
1474     +++ b/fs/dlm/lock.c
1475     @@ -1210,6 +1210,7 @@ static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
1476    
1477     if (rv < 0) {
1478     log_error(ls, "create_lkb idr error %d", rv);
1479     + dlm_free_lkb(lkb);
1480     return rv;
1481     }
1482    
1483     @@ -4177,6 +4178,7 @@ static int receive_convert(struct dlm_ls *ls, struct dlm_message *ms)
1484     (unsigned long long)lkb->lkb_recover_seq,
1485     ms->m_header.h_nodeid, ms->m_lkid);
1486     error = -ENOENT;
1487     + dlm_put_lkb(lkb);
1488     goto fail;
1489     }
1490    
1491     @@ -4230,6 +4232,7 @@ static int receive_unlock(struct dlm_ls *ls, struct dlm_message *ms)
1492     lkb->lkb_id, lkb->lkb_remid,
1493     ms->m_header.h_nodeid, ms->m_lkid);
1494     error = -ENOENT;
1495     + dlm_put_lkb(lkb);
1496     goto fail;
1497     }
1498    
1499     @@ -5792,20 +5795,20 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua,
1500     goto out;
1501     }
1502     }
1503     -
1504     - /* After ua is attached to lkb it will be freed by dlm_free_lkb().
1505     - When DLM_IFL_USER is set, the dlm knows that this is a userspace
1506     - lock and that lkb_astparam is the dlm_user_args structure. */
1507     -
1508     error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs,
1509     fake_astfn, ua, fake_bastfn, &args);
1510     - lkb->lkb_flags |= DLM_IFL_USER;
1511     -
1512     if (error) {
1513     + kfree(ua->lksb.sb_lvbptr);
1514     + ua->lksb.sb_lvbptr = NULL;
1515     + kfree(ua);
1516     __put_lkb(ls, lkb);
1517     goto out;
1518     }
1519    
1520     + /* After ua is attached to lkb it will be freed by dlm_free_lkb().
1521     + When DLM_IFL_USER is set, the dlm knows that this is a userspace
1522     + lock and that lkb_astparam is the dlm_user_args structure. */
1523     + lkb->lkb_flags |= DLM_IFL_USER;
1524     error = request_lock(ls, lkb, name, namelen, &args);
1525    
1526     switch (error) {
1527     diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
1528     index f3e72787e7f9..30e4e01db35a 100644
1529     --- a/fs/dlm/lockspace.c
1530     +++ b/fs/dlm/lockspace.c
1531     @@ -673,11 +673,11 @@ static int new_lockspace(const char *name, const char *cluster,
1532     kfree(ls->ls_recover_buf);
1533     out_lkbidr:
1534     idr_destroy(&ls->ls_lkbidr);
1535     + out_rsbtbl:
1536     for (i = 0; i < DLM_REMOVE_NAMES_MAX; i++) {
1537     if (ls->ls_remove_names[i])
1538     kfree(ls->ls_remove_names[i]);
1539     }
1540     - out_rsbtbl:
1541     vfree(ls->ls_rsbtbl);
1542     out_lsfree:
1543     if (do_unreg)
1544     diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
1545     index fe3f84995c48..bd6202b70447 100644
1546     --- a/fs/gfs2/inode.c
1547     +++ b/fs/gfs2/inode.c
1548     @@ -740,17 +740,19 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
1549     the gfs2 structures. */
1550     if (default_acl) {
1551     error = __gfs2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
1552     + if (error)
1553     + goto fail_gunlock3;
1554     posix_acl_release(default_acl);
1555     + default_acl = NULL;
1556     }
1557     if (acl) {
1558     - if (!error)
1559     - error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
1560     + error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
1561     + if (error)
1562     + goto fail_gunlock3;
1563     posix_acl_release(acl);
1564     + acl = NULL;
1565     }
1566    
1567     - if (error)
1568     - goto fail_gunlock3;
1569     -
1570     error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name,
1571     &gfs2_initxattrs, NULL);
1572     if (error)
1573     @@ -783,10 +785,8 @@ fail_free_inode:
1574     gfs2_glock_put(ip->i_gl);
1575     gfs2_rsqa_delete(ip, NULL);
1576     fail_free_acls:
1577     - if (default_acl)
1578     - posix_acl_release(default_acl);
1579     - if (acl)
1580     - posix_acl_release(acl);
1581     + posix_acl_release(default_acl);
1582     + posix_acl_release(acl);
1583     fail_gunlock:
1584     gfs2_dir_no_add(&da);
1585     gfs2_glock_dq_uninit(ghs);
1586     diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
1587     index 073126707270..05f1ec728840 100644
1588     --- a/fs/gfs2/rgrp.c
1589     +++ b/fs/gfs2/rgrp.c
1590     @@ -1705,9 +1705,9 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
1591     goto next_iter;
1592     }
1593     if (ret == -E2BIG) {
1594     + n += rbm->bii - initial_bii;
1595     rbm->bii = 0;
1596     rbm->offset = 0;
1597     - n += (rbm->bii - initial_bii);
1598     goto res_covered_end_of_rgrp;
1599     }
1600     return ret;
1601     diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
1602     index 3af60ee69053..b584868e1b26 100644
1603     --- a/include/uapi/linux/input-event-codes.h
1604     +++ b/include/uapi/linux/input-event-codes.h
1605     @@ -739,6 +739,15 @@
1606    
1607     #define ABS_MISC 0x28
1608    
1609     +/*
1610     + * 0x2e is reserved and should not be used in input drivers.
1611     + * It was used by HID as ABS_MISC+6 and userspace needs to detect if
1612     + * the next ABS_* event is correct or is just ABS_MISC + n.
1613     + * We define here ABS_RESERVED so userspace can rely on it and detect
1614     + * the situation described above.
1615     + */
1616     +#define ABS_RESERVED 0x2e
1617     +
1618     #define ABS_MT_SLOT 0x2f /* MT slot being modified */
1619     #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
1620     #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
1621     diff --git a/kernel/fork.c b/kernel/fork.c
1622     index 73beb8dfa9df..e92b06351dec 100644
1623     --- a/kernel/fork.c
1624     +++ b/kernel/fork.c
1625     @@ -1606,8 +1606,6 @@ static __latent_entropy struct task_struct *copy_process(
1626    
1627     posix_cpu_timers_init(p);
1628    
1629     - p->start_time = ktime_get_ns();
1630     - p->real_start_time = ktime_get_boot_ns();
1631     p->io_context = NULL;
1632     p->audit_context = NULL;
1633     cgroup_fork(p);
1634     @@ -1767,6 +1765,17 @@ static __latent_entropy struct task_struct *copy_process(
1635     if (retval)
1636     goto bad_fork_free_pid;
1637    
1638     + /*
1639     + * From this point on we must avoid any synchronous user-space
1640     + * communication until we take the tasklist-lock. In particular, we do
1641     + * not want user-space to be able to predict the process start-time by
1642     + * stalling fork(2) after we recorded the start_time but before it is
1643     + * visible to the system.
1644     + */
1645     +
1646     + p->start_time = ktime_get_ns();
1647     + p->real_start_time = ktime_get_boot_ns();
1648     +
1649     /*
1650     * Make it visible to the rest of the system, but dont wake it up yet.
1651     * Need tasklist lock for parent etc handling!
1652     diff --git a/kernel/memremap.c b/kernel/memremap.c
1653     index f61a8c387c3e..9a8b594fbbb6 100644
1654     --- a/kernel/memremap.c
1655     +++ b/kernel/memremap.c
1656     @@ -305,15 +305,12 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
1657     is_ram = region_intersects(align_start, align_size,
1658     IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE);
1659    
1660     - if (is_ram == REGION_MIXED) {
1661     - WARN_ONCE(1, "%s attempted on mixed region %pr\n",
1662     - __func__, res);
1663     + if (is_ram != REGION_DISJOINT) {
1664     + WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__,
1665     + is_ram == REGION_MIXED ? "mixed" : "ram", res);
1666     return ERR_PTR(-ENXIO);
1667     }
1668    
1669     - if (is_ram == REGION_INTERSECTS)
1670     - return __va(res->start);
1671     -
1672     if (!ref)
1673     return ERR_PTR(-EINVAL);
1674    
1675     @@ -399,7 +396,7 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
1676     devres_free(page_map);
1677     return ERR_PTR(error);
1678     }
1679     -EXPORT_SYMBOL(devm_memremap_pages);
1680     +EXPORT_SYMBOL_GPL(devm_memremap_pages);
1681    
1682     unsigned long vmem_altmap_offset(struct vmem_altmap *altmap)
1683     {
1684     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
1685     index 0f962cc3f1bf..e4c271298074 100644
1686     --- a/mm/memory_hotplug.c
1687     +++ b/mm/memory_hotplug.c
1688     @@ -34,6 +34,7 @@
1689     #include <linux/memblock.h>
1690     #include <linux/bootmem.h>
1691     #include <linux/compaction.h>
1692     +#include <linux/rmap.h>
1693    
1694     #include <asm/tlbflush.h>
1695    
1696     @@ -1617,6 +1618,21 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
1697     continue;
1698     }
1699    
1700     + /*
1701     + * HWPoison pages have elevated reference counts so the migration would
1702     + * fail on them. It also doesn't make any sense to migrate them in the
1703     + * first place. Still try to unmap such a page in case it is still mapped
1704     + * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
1705     + * the unmap as the catch all safety net).
1706     + */
1707     + if (PageHWPoison(page)) {
1708     + if (WARN_ON(PageLRU(page)))
1709     + isolate_lru_page(page);
1710     + if (page_mapped(page))
1711     + try_to_unmap(page, TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS);
1712     + continue;
1713     + }
1714     +
1715     if (!get_page_unless_zero(page))
1716     continue;
1717     /*
1718     diff --git a/net/9p/client.c b/net/9p/client.c
1719     index 98d299ea52ee..142afe70edb9 100644
1720     --- a/net/9p/client.c
1721     +++ b/net/9p/client.c
1722     @@ -156,6 +156,12 @@ static int parse_opts(char *opts, struct p9_client *clnt)
1723     ret = r;
1724     continue;
1725     }
1726     + if (option < 4096) {
1727     + p9_debug(P9_DEBUG_ERROR,
1728     + "msize should be at least 4k\n");
1729     + ret = -EINVAL;
1730     + continue;
1731     + }
1732     clnt->msize = option;
1733     break;
1734     case Opt_trans:
1735     @@ -972,10 +978,18 @@ static int p9_client_version(struct p9_client *c)
1736     else if (!strncmp(version, "9P2000", 6))
1737     c->proto_version = p9_proto_legacy;
1738     else {
1739     + p9_debug(P9_DEBUG_ERROR,
1740     + "server returned an unknown version: %s\n", version);
1741     err = -EREMOTEIO;
1742     goto error;
1743     }
1744    
1745     + if (msize < 4096) {
1746     + p9_debug(P9_DEBUG_ERROR,
1747     + "server returned a msize < 4096: %d\n", msize);
1748     + err = -EREMOTEIO;
1749     + goto error;
1750     + }
1751     if (msize < c->msize)
1752     c->msize = msize;
1753    
1754     @@ -1040,6 +1054,13 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
1755     if (clnt->msize > clnt->trans_mod->maxsize)
1756     clnt->msize = clnt->trans_mod->maxsize;
1757    
1758     + if (clnt->msize < 4096) {
1759     + p9_debug(P9_DEBUG_ERROR,
1760     + "Please specify a msize of at least 4k\n");
1761     + err = -EINVAL;
1762     + goto free_client;
1763     + }
1764     +
1765     err = p9_client_version(clnt);
1766     if (err)
1767     goto close_trans;
1768     diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
1769     index 29e23b5cb2ed..a4896e4a1c9a 100644
1770     --- a/net/ceph/auth_x.c
1771     +++ b/net/ceph/auth_x.c
1772     @@ -804,7 +804,7 @@ static int calc_signature(struct ceph_x_authorizer *au, struct ceph_msg *msg,
1773     void *enc_buf = au->enc_buf;
1774     int ret;
1775    
1776     - if (msg->con->peer_features & CEPH_FEATURE_CEPHX_V2) {
1777     + if (!(msg->con->peer_features & CEPH_FEATURE_CEPHX_V2)) {
1778     struct {
1779     __le32 len;
1780     __le32 header_crc;
1781     diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
1782     index a2a89e4e0a14..e82157285d34 100644
1783     --- a/net/netfilter/ipset/ip_set_list_set.c
1784     +++ b/net/netfilter/ipset/ip_set_list_set.c
1785     @@ -518,8 +518,8 @@ nla_put_failure:
1786     ret = -EMSGSIZE;
1787     } else {
1788     cb->args[IPSET_CB_ARG0] = i;
1789     + ipset_nest_end(skb, atd);
1790     }
1791     - ipset_nest_end(skb, atd);
1792     out:
1793     rcu_read_unlock();
1794     return ret;
1795     diff --git a/net/netfilter/nf_conntrack_seqadj.c b/net/netfilter/nf_conntrack_seqadj.c
1796     index ef7063eced7c..dad08b9eaf62 100644
1797     --- a/net/netfilter/nf_conntrack_seqadj.c
1798     +++ b/net/netfilter/nf_conntrack_seqadj.c
1799     @@ -115,12 +115,12 @@ static void nf_ct_sack_block_adjust(struct sk_buff *skb,
1800     /* TCP SACK sequence number adjustment */
1801     static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
1802     unsigned int protoff,
1803     - struct tcphdr *tcph,
1804     struct nf_conn *ct,
1805     enum ip_conntrack_info ctinfo)
1806     {
1807     - unsigned int dir, optoff, optend;
1808     + struct tcphdr *tcph = (void *)skb->data + protoff;
1809     struct nf_conn_seqadj *seqadj = nfct_seqadj(ct);
1810     + unsigned int dir, optoff, optend;
1811    
1812     optoff = protoff + sizeof(struct tcphdr);
1813     optend = protoff + tcph->doff * 4;
1814     @@ -128,6 +128,7 @@ static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
1815     if (!skb_make_writable(skb, optend))
1816     return 0;
1817    
1818     + tcph = (void *)skb->data + protoff;
1819     dir = CTINFO2DIR(ctinfo);
1820    
1821     while (optoff < optend) {
1822     @@ -207,7 +208,7 @@ int nf_ct_seq_adjust(struct sk_buff *skb,
1823     ntohl(newack));
1824     tcph->ack_seq = newack;
1825    
1826     - res = nf_ct_sack_adjust(skb, protoff, tcph, ct, ctinfo);
1827     + res = nf_ct_sack_adjust(skb, protoff, ct, ctinfo);
1828     out:
1829     spin_unlock_bh(&ct->lock);
1830    
1831     diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
1832     index 6a08bc451247..b4b68c6e3f8b 100644
1833     --- a/net/sunrpc/auth_gss/svcauth_gss.c
1834     +++ b/net/sunrpc/auth_gss/svcauth_gss.c
1835     @@ -1112,7 +1112,7 @@ static int svcauth_gss_legacy_init(struct svc_rqst *rqstp,
1836     struct kvec *resv = &rqstp->rq_res.head[0];
1837     struct rsi *rsip, rsikey;
1838     int ret;
1839     - struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
1840     + struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
1841    
1842     memset(&rsikey, 0, sizeof(rsikey));
1843     ret = gss_read_verf(gc, argv, authp,
1844     @@ -1223,7 +1223,7 @@ static int svcauth_gss_proxy_init(struct svc_rqst *rqstp,
1845     uint64_t handle;
1846     int status;
1847     int ret;
1848     - struct net *net = rqstp->rq_xprt->xpt_net;
1849     + struct net *net = SVC_NET(rqstp);
1850     struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1851    
1852     memset(&ud, 0, sizeof(ud));
1853     @@ -1414,7 +1414,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
1854     __be32 *rpcstart;
1855     __be32 *reject_stat = resv->iov_base + resv->iov_len;
1856     int ret;
1857     - struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
1858     + struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
1859    
1860     dprintk("RPC: svcauth_gss: argv->iov_len = %zd\n",
1861     argv->iov_len);
1862     @@ -1702,7 +1702,7 @@ svcauth_gss_release(struct svc_rqst *rqstp)
1863     struct rpc_gss_wire_cred *gc = &gsd->clcred;
1864     struct xdr_buf *resbuf = &rqstp->rq_res;
1865     int stat = -EINVAL;
1866     - struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
1867     + struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
1868    
1869     if (gc->gc_proc != RPC_GSS_PROC_DATA)
1870     goto out;
1871     diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
1872     index 8aabe12201f8..cab50ece6f3d 100644
1873     --- a/net/sunrpc/cache.c
1874     +++ b/net/sunrpc/cache.c
1875     @@ -54,6 +54,11 @@ static void cache_init(struct cache_head *h, struct cache_detail *detail)
1876     h->last_refresh = now;
1877     }
1878    
1879     +static void cache_fresh_locked(struct cache_head *head, time_t expiry,
1880     + struct cache_detail *detail);
1881     +static void cache_fresh_unlocked(struct cache_head *head,
1882     + struct cache_detail *detail);
1883     +
1884     struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
1885     struct cache_head *key, int hash)
1886     {
1887     @@ -95,6 +100,7 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
1888     if (cache_is_expired(detail, tmp)) {
1889     hlist_del_init(&tmp->cache_list);
1890     detail->entries --;
1891     + cache_fresh_locked(tmp, 0, detail);
1892     freeme = tmp;
1893     break;
1894     }
1895     @@ -110,8 +116,10 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
1896     cache_get(new);
1897     write_unlock(&detail->hash_lock);
1898    
1899     - if (freeme)
1900     + if (freeme) {
1901     + cache_fresh_unlocked(freeme, detail);
1902     cache_put(freeme, detail);
1903     + }
1904     return new;
1905     }
1906     EXPORT_SYMBOL_GPL(sunrpc_cache_lookup);
1907     diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
1908     index 1bf9153004cd..280fb3178708 100644
1909     --- a/net/sunrpc/xprtsock.c
1910     +++ b/net/sunrpc/xprtsock.c
1911     @@ -2209,8 +2209,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
1912     trace_rpc_socket_connect(xprt, sock, 0);
1913     status = 0;
1914     out:
1915     - xprt_unlock_connect(xprt, transport);
1916     xprt_clear_connecting(xprt);
1917     + xprt_unlock_connect(xprt, transport);
1918     xprt_wake_pending_tasks(xprt, status);
1919     }
1920    
1921     @@ -2395,8 +2395,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
1922     }
1923     status = -EAGAIN;
1924     out:
1925     - xprt_unlock_connect(xprt, transport);
1926     xprt_clear_connecting(xprt);
1927     + xprt_unlock_connect(xprt, transport);
1928     xprt_wake_pending_tasks(xprt, status);
1929     }
1930    
1931     diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
1932     index 71a94e549301..884f2136b34b 100644
1933     --- a/net/xfrm/xfrm_state.c
1934     +++ b/net/xfrm/xfrm_state.c
1935     @@ -641,7 +641,7 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si)
1936     {
1937     spin_lock_bh(&net->xfrm.xfrm_state_lock);
1938     si->sadcnt = net->xfrm.state_num;
1939     - si->sadhcnt = net->xfrm.state_hmask;
1940     + si->sadhcnt = net->xfrm.state_hmask + 1;
1941     si->sadhmcnt = xfrm_state_hashmax;
1942     spin_unlock_bh(&net->xfrm.xfrm_state_lock);
1943     }
1944     diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
1945     index dd8397894d5c..12a6940741fe 100755
1946     --- a/scripts/checkstack.pl
1947     +++ b/scripts/checkstack.pl
1948     @@ -46,8 +46,8 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
1949     $xs = "[0-9a-f ]"; # hex character or space
1950     $funcre = qr/^$x* <(.*)>:$/;
1951     if ($arch eq 'aarch64') {
1952     - #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp,#-80]!
1953     - $re = qr/^.*stp.*sp,\#-([0-9]{1,8})\]\!/o;
1954     + #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]!
1955     + $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
1956     } elsif ($arch eq 'arm') {
1957     #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64
1958     $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
1959     diff --git a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
1960     index 4a0cbd2241d8..3191666ac129 100644
1961     --- a/sound/pci/cs46xx/dsp_spos.c
1962     +++ b/sound/pci/cs46xx/dsp_spos.c
1963     @@ -899,6 +899,9 @@ int cs46xx_dsp_proc_done (struct snd_cs46xx *chip)
1964     struct dsp_spos_instance * ins = chip->dsp_spos_instance;
1965     int i;
1966    
1967     + if (!ins)
1968     + return 0;
1969     +
1970     snd_info_free_entry(ins->proc_sym_info_entry);
1971     ins->proc_sym_info_entry = NULL;
1972    
1973     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
1974     index db8404e31fae..64b90b8ec661 100644
1975     --- a/sound/usb/mixer.c
1976     +++ b/sound/usb/mixer.c
1977     @@ -1882,7 +1882,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
1978     char *name)
1979     {
1980     struct uac_processing_unit_descriptor *desc = raw_desc;
1981     - int num_ins = desc->bNrInPins;
1982     + int num_ins;
1983     struct usb_mixer_elem_info *cval;
1984     struct snd_kcontrol *kctl;
1985     int i, err, nameid, type, len;
1986     @@ -1897,7 +1897,13 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
1987     0, NULL, default_value_info
1988     };
1989    
1990     - if (desc->bLength < 13 || desc->bLength < 13 + num_ins ||
1991     + if (desc->bLength < 13) {
1992     + usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
1993     + return -EINVAL;
1994     + }
1995     +
1996     + num_ins = desc->bNrInPins;
1997     + if (desc->bLength < 13 + num_ins ||
1998     desc->bLength < num_ins + uac_processing_unit_bControlSize(desc, state->mixer->protocol)) {
1999     usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
2000     return -EINVAL;
2001     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
2002     index 15cbe2565703..d32727c74a16 100644
2003     --- a/sound/usb/quirks-table.h
2004     +++ b/sound/usb/quirks-table.h
2005     @@ -3321,6 +3321,9 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2006     }
2007     }
2008     },
2009     + {
2010     + .ifnum = -1
2011     + },
2012     }
2013     }
2014     },
2015     diff --git a/tools/testing/nvdimm/test/iomap.c b/tools/testing/nvdimm/test/iomap.c
2016     index 64cae1a5deff..5c7ad24cd931 100644
2017     --- a/tools/testing/nvdimm/test/iomap.c
2018     +++ b/tools/testing/nvdimm/test/iomap.c
2019     @@ -114,7 +114,7 @@ void *__wrap_devm_memremap_pages(struct device *dev, struct resource *res,
2020     return nfit_res->buf + offset - nfit_res->res.start;
2021     return devm_memremap_pages(dev, res, ref, altmap);
2022     }
2023     -EXPORT_SYMBOL(__wrap_devm_memremap_pages);
2024     +EXPORT_SYMBOL_GPL(__wrap_devm_memremap_pages);
2025    
2026     pfn_t __wrap_phys_to_pfn_t(phys_addr_t addr, unsigned long flags)
2027     {