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