Contents of /trunk/kernel-alx/patches-4.9/0249-4.9.150-all-fixes.patch
Parent Directory | Revision Log
Revision 3302 -
(show annotations)
(download)
Tue Mar 12 10:43:10 2019 UTC (5 years, 6 months ago) by niro
File size: 73070 byte(s)
Tue Mar 12 10:43:10 2019 UTC (5 years, 6 months ago) by niro
File size: 73070 byte(s)
-linux-4.9.150
1 | 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 = <®_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(¤t->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, ®, &bit); |
1293 | + meson_calc_reg_and_bit(bank, pin, REG_PULLEN, ®, |
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 | { |