Annotation of /trunk/kernel-alx/patches-5.4/0255-5.4.156-all-fixes.patch
Parent Directory | Revision Log
Revision 3637 -
(hide annotations)
(download)
Mon Oct 24 12:40:44 2022 UTC (18 months, 3 weeks ago) by niro
File size: 70122 byte(s)
Mon Oct 24 12:40:44 2022 UTC (18 months, 3 weeks ago) by niro
File size: 70122 byte(s)
-add missing
1 | niro | 3637 | diff --git a/Makefile b/Makefile |
2 | index f7e2bf924463b..ced1f0fd48dc6 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 5 | ||
8 | PATCHLEVEL = 4 | ||
9 | -SUBLEVEL = 155 | ||
10 | +SUBLEVEL = 156 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Kleptomaniac Octopus | ||
13 | |||
14 | diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig | ||
15 | index 9aa88715f196c..4b36bbcf5a5b4 100644 | ||
16 | --- a/arch/arm/Kconfig | ||
17 | +++ b/arch/arm/Kconfig | ||
18 | @@ -85,6 +85,7 @@ config ARM | ||
19 | select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL | ||
20 | select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG | ||
21 | select HAVE_FUNCTION_TRACER if !XIP_KERNEL && (CC_IS_GCC || CLANG_VERSION >= 100000) | ||
22 | + select HAVE_FUTEX_CMPXCHG if FUTEX | ||
23 | select HAVE_GCC_PLUGINS | ||
24 | select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7) | ||
25 | select HAVE_IDE if PCI || ISA || PCMCIA | ||
26 | diff --git a/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts b/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts | ||
27 | index 89f0c9979b89c..4f63158d6b9bd 100644 | ||
28 | --- a/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts | ||
29 | +++ b/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts | ||
30 | @@ -69,7 +69,6 @@ | ||
31 | isc: isc@f0008000 { | ||
32 | pinctrl-names = "default"; | ||
33 | pinctrl-0 = <&pinctrl_isc_base &pinctrl_isc_data_8bit &pinctrl_isc_data_9_10 &pinctrl_isc_data_11_12>; | ||
34 | - status = "okay"; | ||
35 | }; | ||
36 | |||
37 | qspi1: spi@f0024000 { | ||
38 | diff --git a/arch/arm/boot/dts/spear3xx.dtsi b/arch/arm/boot/dts/spear3xx.dtsi | ||
39 | index f266b7b034823..cc88ebe7a60ce 100644 | ||
40 | --- a/arch/arm/boot/dts/spear3xx.dtsi | ||
41 | +++ b/arch/arm/boot/dts/spear3xx.dtsi | ||
42 | @@ -47,7 +47,7 @@ | ||
43 | }; | ||
44 | |||
45 | gmac: eth@e0800000 { | ||
46 | - compatible = "st,spear600-gmac"; | ||
47 | + compatible = "snps,dwmac-3.40a"; | ||
48 | reg = <0xe0800000 0x8000>; | ||
49 | interrupts = <23 22>; | ||
50 | interrupt-names = "macirq", "eth_wake_irq"; | ||
51 | diff --git a/arch/nios2/include/asm/irqflags.h b/arch/nios2/include/asm/irqflags.h | ||
52 | index b3ec3e510706d..25acf27862f91 100644 | ||
53 | --- a/arch/nios2/include/asm/irqflags.h | ||
54 | +++ b/arch/nios2/include/asm/irqflags.h | ||
55 | @@ -9,7 +9,7 @@ | ||
56 | |||
57 | static inline unsigned long arch_local_save_flags(void) | ||
58 | { | ||
59 | - return RDCTL(CTL_STATUS); | ||
60 | + return RDCTL(CTL_FSTATUS); | ||
61 | } | ||
62 | |||
63 | /* | ||
64 | @@ -18,7 +18,7 @@ static inline unsigned long arch_local_save_flags(void) | ||
65 | */ | ||
66 | static inline void arch_local_irq_restore(unsigned long flags) | ||
67 | { | ||
68 | - WRCTL(CTL_STATUS, flags); | ||
69 | + WRCTL(CTL_FSTATUS, flags); | ||
70 | } | ||
71 | |||
72 | static inline void arch_local_irq_disable(void) | ||
73 | diff --git a/arch/nios2/include/asm/registers.h b/arch/nios2/include/asm/registers.h | ||
74 | index 183c720e454d9..95b67dd16f818 100644 | ||
75 | --- a/arch/nios2/include/asm/registers.h | ||
76 | +++ b/arch/nios2/include/asm/registers.h | ||
77 | @@ -11,7 +11,7 @@ | ||
78 | #endif | ||
79 | |||
80 | /* control register numbers */ | ||
81 | -#define CTL_STATUS 0 | ||
82 | +#define CTL_FSTATUS 0 | ||
83 | #define CTL_ESTATUS 1 | ||
84 | #define CTL_BSTATUS 2 | ||
85 | #define CTL_IENABLE 3 | ||
86 | diff --git a/arch/parisc/math-emu/fpudispatch.c b/arch/parisc/math-emu/fpudispatch.c | ||
87 | index 7c46969ead9b1..01ed133227c25 100644 | ||
88 | --- a/arch/parisc/math-emu/fpudispatch.c | ||
89 | +++ b/arch/parisc/math-emu/fpudispatch.c | ||
90 | @@ -310,12 +310,15 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
91 | r1 &= ~3; | ||
92 | fpregs[t+3] = fpregs[r1+3]; | ||
93 | fpregs[t+2] = fpregs[r1+2]; | ||
94 | + fallthrough; | ||
95 | case 1: /* double */ | ||
96 | fpregs[t+1] = fpregs[r1+1]; | ||
97 | + fallthrough; | ||
98 | case 0: /* single */ | ||
99 | fpregs[t] = fpregs[r1]; | ||
100 | return(NOEXCEPTION); | ||
101 | } | ||
102 | + BUG(); | ||
103 | case 3: /* FABS */ | ||
104 | switch (fmt) { | ||
105 | case 2: /* illegal */ | ||
106 | @@ -325,13 +328,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
107 | r1 &= ~3; | ||
108 | fpregs[t+3] = fpregs[r1+3]; | ||
109 | fpregs[t+2] = fpregs[r1+2]; | ||
110 | + fallthrough; | ||
111 | case 1: /* double */ | ||
112 | fpregs[t+1] = fpregs[r1+1]; | ||
113 | + fallthrough; | ||
114 | case 0: /* single */ | ||
115 | /* copy and clear sign bit */ | ||
116 | fpregs[t] = fpregs[r1] & 0x7fffffff; | ||
117 | return(NOEXCEPTION); | ||
118 | } | ||
119 | + BUG(); | ||
120 | case 6: /* FNEG */ | ||
121 | switch (fmt) { | ||
122 | case 2: /* illegal */ | ||
123 | @@ -341,13 +347,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
124 | r1 &= ~3; | ||
125 | fpregs[t+3] = fpregs[r1+3]; | ||
126 | fpregs[t+2] = fpregs[r1+2]; | ||
127 | + fallthrough; | ||
128 | case 1: /* double */ | ||
129 | fpregs[t+1] = fpregs[r1+1]; | ||
130 | + fallthrough; | ||
131 | case 0: /* single */ | ||
132 | /* copy and invert sign bit */ | ||
133 | fpregs[t] = fpregs[r1] ^ 0x80000000; | ||
134 | return(NOEXCEPTION); | ||
135 | } | ||
136 | + BUG(); | ||
137 | case 7: /* FNEGABS */ | ||
138 | switch (fmt) { | ||
139 | case 2: /* illegal */ | ||
140 | @@ -357,13 +366,16 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
141 | r1 &= ~3; | ||
142 | fpregs[t+3] = fpregs[r1+3]; | ||
143 | fpregs[t+2] = fpregs[r1+2]; | ||
144 | + fallthrough; | ||
145 | case 1: /* double */ | ||
146 | fpregs[t+1] = fpregs[r1+1]; | ||
147 | + fallthrough; | ||
148 | case 0: /* single */ | ||
149 | /* copy and set sign bit */ | ||
150 | fpregs[t] = fpregs[r1] | 0x80000000; | ||
151 | return(NOEXCEPTION); | ||
152 | } | ||
153 | + BUG(); | ||
154 | case 4: /* FSQRT */ | ||
155 | switch (fmt) { | ||
156 | case 0: | ||
157 | @@ -376,6 +388,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
158 | case 3: /* quad not implemented */ | ||
159 | return(MAJOR_0C_EXCP); | ||
160 | } | ||
161 | + BUG(); | ||
162 | case 5: /* FRND */ | ||
163 | switch (fmt) { | ||
164 | case 0: | ||
165 | @@ -389,7 +402,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
166 | return(MAJOR_0C_EXCP); | ||
167 | } | ||
168 | } /* end of switch (subop) */ | ||
169 | - | ||
170 | + BUG(); | ||
171 | case 1: /* class 1 */ | ||
172 | df = extru(ir,fpdfpos,2); /* get dest format */ | ||
173 | if ((df & 2) || (fmt & 2)) { | ||
174 | @@ -419,6 +432,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
175 | case 3: /* dbl/dbl */ | ||
176 | return(MAJOR_0C_EXCP); | ||
177 | } | ||
178 | + BUG(); | ||
179 | case 1: /* FCNVXF */ | ||
180 | switch(fmt) { | ||
181 | case 0: /* sgl/sgl */ | ||
182 | @@ -434,6 +448,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
183 | return(dbl_to_dbl_fcnvxf(&fpregs[r1],0, | ||
184 | &fpregs[t],status)); | ||
185 | } | ||
186 | + BUG(); | ||
187 | case 2: /* FCNVFX */ | ||
188 | switch(fmt) { | ||
189 | case 0: /* sgl/sgl */ | ||
190 | @@ -449,6 +464,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
191 | return(dbl_to_dbl_fcnvfx(&fpregs[r1],0, | ||
192 | &fpregs[t],status)); | ||
193 | } | ||
194 | + BUG(); | ||
195 | case 3: /* FCNVFXT */ | ||
196 | switch(fmt) { | ||
197 | case 0: /* sgl/sgl */ | ||
198 | @@ -464,6 +480,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
199 | return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0, | ||
200 | &fpregs[t],status)); | ||
201 | } | ||
202 | + BUG(); | ||
203 | case 5: /* FCNVUF (PA2.0 only) */ | ||
204 | switch(fmt) { | ||
205 | case 0: /* sgl/sgl */ | ||
206 | @@ -479,6 +496,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
207 | return(dbl_to_dbl_fcnvuf(&fpregs[r1],0, | ||
208 | &fpregs[t],status)); | ||
209 | } | ||
210 | + BUG(); | ||
211 | case 6: /* FCNVFU (PA2.0 only) */ | ||
212 | switch(fmt) { | ||
213 | case 0: /* sgl/sgl */ | ||
214 | @@ -494,6 +512,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
215 | return(dbl_to_dbl_fcnvfu(&fpregs[r1],0, | ||
216 | &fpregs[t],status)); | ||
217 | } | ||
218 | + BUG(); | ||
219 | case 7: /* FCNVFUT (PA2.0 only) */ | ||
220 | switch(fmt) { | ||
221 | case 0: /* sgl/sgl */ | ||
222 | @@ -509,10 +528,11 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
223 | return(dbl_to_dbl_fcnvfut(&fpregs[r1],0, | ||
224 | &fpregs[t],status)); | ||
225 | } | ||
226 | + BUG(); | ||
227 | case 4: /* undefined */ | ||
228 | return(MAJOR_0C_EXCP); | ||
229 | } /* end of switch subop */ | ||
230 | - | ||
231 | + BUG(); | ||
232 | case 2: /* class 2 */ | ||
233 | fpu_type_flags=fpregs[FPU_TYPE_FLAG_POS]; | ||
234 | r2 = extru(ir, fpr2pos, 5) * sizeof(double)/sizeof(u_int); | ||
235 | @@ -590,6 +610,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
236 | case 3: /* quad not implemented */ | ||
237 | return(MAJOR_0C_EXCP); | ||
238 | } | ||
239 | + BUG(); | ||
240 | case 1: /* FTEST */ | ||
241 | switch (fmt) { | ||
242 | case 0: | ||
243 | @@ -609,8 +630,10 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
244 | case 3: | ||
245 | return(MAJOR_0C_EXCP); | ||
246 | } | ||
247 | + BUG(); | ||
248 | } /* end of switch subop */ | ||
249 | } /* end of else for PA1.0 & PA1.1 */ | ||
250 | + BUG(); | ||
251 | case 3: /* class 3 */ | ||
252 | r2 = extru(ir,fpr2pos,5) * sizeof(double)/sizeof(u_int); | ||
253 | if (r2 == 0) | ||
254 | @@ -633,6 +656,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
255 | case 3: /* quad not implemented */ | ||
256 | return(MAJOR_0C_EXCP); | ||
257 | } | ||
258 | + BUG(); | ||
259 | case 1: /* FSUB */ | ||
260 | switch (fmt) { | ||
261 | case 0: | ||
262 | @@ -645,6 +669,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
263 | case 3: /* quad not implemented */ | ||
264 | return(MAJOR_0C_EXCP); | ||
265 | } | ||
266 | + BUG(); | ||
267 | case 2: /* FMPY */ | ||
268 | switch (fmt) { | ||
269 | case 0: | ||
270 | @@ -657,6 +682,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
271 | case 3: /* quad not implemented */ | ||
272 | return(MAJOR_0C_EXCP); | ||
273 | } | ||
274 | + BUG(); | ||
275 | case 3: /* FDIV */ | ||
276 | switch (fmt) { | ||
277 | case 0: | ||
278 | @@ -669,6 +695,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
279 | case 3: /* quad not implemented */ | ||
280 | return(MAJOR_0C_EXCP); | ||
281 | } | ||
282 | + BUG(); | ||
283 | case 4: /* FREM */ | ||
284 | switch (fmt) { | ||
285 | case 0: | ||
286 | @@ -681,6 +708,7 @@ decode_0c(u_int ir, u_int class, u_int subop, u_int fpregs[]) | ||
287 | case 3: /* quad not implemented */ | ||
288 | return(MAJOR_0C_EXCP); | ||
289 | } | ||
290 | + BUG(); | ||
291 | } /* end of class 3 switch */ | ||
292 | } /* end of switch(class) */ | ||
293 | |||
294 | @@ -736,10 +764,12 @@ u_int fpregs[]; | ||
295 | return(MAJOR_0E_EXCP); | ||
296 | case 1: /* double */ | ||
297 | fpregs[t+1] = fpregs[r1+1]; | ||
298 | + fallthrough; | ||
299 | case 0: /* single */ | ||
300 | fpregs[t] = fpregs[r1]; | ||
301 | return(NOEXCEPTION); | ||
302 | } | ||
303 | + BUG(); | ||
304 | case 3: /* FABS */ | ||
305 | switch (fmt) { | ||
306 | case 2: | ||
307 | @@ -747,10 +777,12 @@ u_int fpregs[]; | ||
308 | return(MAJOR_0E_EXCP); | ||
309 | case 1: /* double */ | ||
310 | fpregs[t+1] = fpregs[r1+1]; | ||
311 | + fallthrough; | ||
312 | case 0: /* single */ | ||
313 | fpregs[t] = fpregs[r1] & 0x7fffffff; | ||
314 | return(NOEXCEPTION); | ||
315 | } | ||
316 | + BUG(); | ||
317 | case 6: /* FNEG */ | ||
318 | switch (fmt) { | ||
319 | case 2: | ||
320 | @@ -758,10 +790,12 @@ u_int fpregs[]; | ||
321 | return(MAJOR_0E_EXCP); | ||
322 | case 1: /* double */ | ||
323 | fpregs[t+1] = fpregs[r1+1]; | ||
324 | + fallthrough; | ||
325 | case 0: /* single */ | ||
326 | fpregs[t] = fpregs[r1] ^ 0x80000000; | ||
327 | return(NOEXCEPTION); | ||
328 | } | ||
329 | + BUG(); | ||
330 | case 7: /* FNEGABS */ | ||
331 | switch (fmt) { | ||
332 | case 2: | ||
333 | @@ -769,10 +803,12 @@ u_int fpregs[]; | ||
334 | return(MAJOR_0E_EXCP); | ||
335 | case 1: /* double */ | ||
336 | fpregs[t+1] = fpregs[r1+1]; | ||
337 | + fallthrough; | ||
338 | case 0: /* single */ | ||
339 | fpregs[t] = fpregs[r1] | 0x80000000; | ||
340 | return(NOEXCEPTION); | ||
341 | } | ||
342 | + BUG(); | ||
343 | case 4: /* FSQRT */ | ||
344 | switch (fmt) { | ||
345 | case 0: | ||
346 | @@ -785,6 +821,7 @@ u_int fpregs[]; | ||
347 | case 3: | ||
348 | return(MAJOR_0E_EXCP); | ||
349 | } | ||
350 | + BUG(); | ||
351 | case 5: /* FRMD */ | ||
352 | switch (fmt) { | ||
353 | case 0: | ||
354 | @@ -798,7 +835,7 @@ u_int fpregs[]; | ||
355 | return(MAJOR_0E_EXCP); | ||
356 | } | ||
357 | } /* end of switch (subop */ | ||
358 | - | ||
359 | + BUG(); | ||
360 | case 1: /* class 1 */ | ||
361 | df = extru(ir,fpdfpos,2); /* get dest format */ | ||
362 | /* | ||
363 | @@ -826,6 +863,7 @@ u_int fpregs[]; | ||
364 | case 3: /* dbl/dbl */ | ||
365 | return(MAJOR_0E_EXCP); | ||
366 | } | ||
367 | + BUG(); | ||
368 | case 1: /* FCNVXF */ | ||
369 | switch(fmt) { | ||
370 | case 0: /* sgl/sgl */ | ||
371 | @@ -841,6 +879,7 @@ u_int fpregs[]; | ||
372 | return(dbl_to_dbl_fcnvxf(&fpregs[r1],0, | ||
373 | &fpregs[t],status)); | ||
374 | } | ||
375 | + BUG(); | ||
376 | case 2: /* FCNVFX */ | ||
377 | switch(fmt) { | ||
378 | case 0: /* sgl/sgl */ | ||
379 | @@ -856,6 +895,7 @@ u_int fpregs[]; | ||
380 | return(dbl_to_dbl_fcnvfx(&fpregs[r1],0, | ||
381 | &fpregs[t],status)); | ||
382 | } | ||
383 | + BUG(); | ||
384 | case 3: /* FCNVFXT */ | ||
385 | switch(fmt) { | ||
386 | case 0: /* sgl/sgl */ | ||
387 | @@ -871,6 +911,7 @@ u_int fpregs[]; | ||
388 | return(dbl_to_dbl_fcnvfxt(&fpregs[r1],0, | ||
389 | &fpregs[t],status)); | ||
390 | } | ||
391 | + BUG(); | ||
392 | case 5: /* FCNVUF (PA2.0 only) */ | ||
393 | switch(fmt) { | ||
394 | case 0: /* sgl/sgl */ | ||
395 | @@ -886,6 +927,7 @@ u_int fpregs[]; | ||
396 | return(dbl_to_dbl_fcnvuf(&fpregs[r1],0, | ||
397 | &fpregs[t],status)); | ||
398 | } | ||
399 | + BUG(); | ||
400 | case 6: /* FCNVFU (PA2.0 only) */ | ||
401 | switch(fmt) { | ||
402 | case 0: /* sgl/sgl */ | ||
403 | @@ -901,6 +943,7 @@ u_int fpregs[]; | ||
404 | return(dbl_to_dbl_fcnvfu(&fpregs[r1],0, | ||
405 | &fpregs[t],status)); | ||
406 | } | ||
407 | + BUG(); | ||
408 | case 7: /* FCNVFUT (PA2.0 only) */ | ||
409 | switch(fmt) { | ||
410 | case 0: /* sgl/sgl */ | ||
411 | @@ -916,9 +959,11 @@ u_int fpregs[]; | ||
412 | return(dbl_to_dbl_fcnvfut(&fpregs[r1],0, | ||
413 | &fpregs[t],status)); | ||
414 | } | ||
415 | + BUG(); | ||
416 | case 4: /* undefined */ | ||
417 | return(MAJOR_0C_EXCP); | ||
418 | } /* end of switch subop */ | ||
419 | + BUG(); | ||
420 | case 2: /* class 2 */ | ||
421 | /* | ||
422 | * Be careful out there. | ||
423 | @@ -994,6 +1039,7 @@ u_int fpregs[]; | ||
424 | } | ||
425 | } /* end of switch subop */ | ||
426 | } /* end of else for PA1.0 & PA1.1 */ | ||
427 | + BUG(); | ||
428 | case 3: /* class 3 */ | ||
429 | /* | ||
430 | * Be careful out there. | ||
431 | @@ -1026,6 +1072,7 @@ u_int fpregs[]; | ||
432 | return(dbl_fadd(&fpregs[r1],&fpregs[r2], | ||
433 | &fpregs[t],status)); | ||
434 | } | ||
435 | + BUG(); | ||
436 | case 1: /* FSUB */ | ||
437 | switch (fmt) { | ||
438 | case 0: | ||
439 | @@ -1035,6 +1082,7 @@ u_int fpregs[]; | ||
440 | return(dbl_fsub(&fpregs[r1],&fpregs[r2], | ||
441 | &fpregs[t],status)); | ||
442 | } | ||
443 | + BUG(); | ||
444 | case 2: /* FMPY or XMPYU */ | ||
445 | /* | ||
446 | * check for integer multiply (x bit set) | ||
447 | @@ -1071,6 +1119,7 @@ u_int fpregs[]; | ||
448 | &fpregs[r2],&fpregs[t],status)); | ||
449 | } | ||
450 | } | ||
451 | + BUG(); | ||
452 | case 3: /* FDIV */ | ||
453 | switch (fmt) { | ||
454 | case 0: | ||
455 | @@ -1080,6 +1129,7 @@ u_int fpregs[]; | ||
456 | return(dbl_fdiv(&fpregs[r1],&fpregs[r2], | ||
457 | &fpregs[t],status)); | ||
458 | } | ||
459 | + BUG(); | ||
460 | case 4: /* FREM */ | ||
461 | switch (fmt) { | ||
462 | case 0: | ||
463 | diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S | ||
464 | index d32751994a62c..c3f62c9ce7406 100644 | ||
465 | --- a/arch/powerpc/kernel/idle_book3s.S | ||
466 | +++ b/arch/powerpc/kernel/idle_book3s.S | ||
467 | @@ -50,28 +50,32 @@ _GLOBAL(isa300_idle_stop_mayloss) | ||
468 | std r1,PACAR1(r13) | ||
469 | mflr r4 | ||
470 | mfcr r5 | ||
471 | - /* use stack red zone rather than a new frame for saving regs */ | ||
472 | - std r2,-8*0(r1) | ||
473 | - std r14,-8*1(r1) | ||
474 | - std r15,-8*2(r1) | ||
475 | - std r16,-8*3(r1) | ||
476 | - std r17,-8*4(r1) | ||
477 | - std r18,-8*5(r1) | ||
478 | - std r19,-8*6(r1) | ||
479 | - std r20,-8*7(r1) | ||
480 | - std r21,-8*8(r1) | ||
481 | - std r22,-8*9(r1) | ||
482 | - std r23,-8*10(r1) | ||
483 | - std r24,-8*11(r1) | ||
484 | - std r25,-8*12(r1) | ||
485 | - std r26,-8*13(r1) | ||
486 | - std r27,-8*14(r1) | ||
487 | - std r28,-8*15(r1) | ||
488 | - std r29,-8*16(r1) | ||
489 | - std r30,-8*17(r1) | ||
490 | - std r31,-8*18(r1) | ||
491 | - std r4,-8*19(r1) | ||
492 | - std r5,-8*20(r1) | ||
493 | + /* | ||
494 | + * Use the stack red zone rather than a new frame for saving regs since | ||
495 | + * in the case of no GPR loss the wakeup code branches directly back to | ||
496 | + * the caller without deallocating the stack frame first. | ||
497 | + */ | ||
498 | + std r2,-8*1(r1) | ||
499 | + std r14,-8*2(r1) | ||
500 | + std r15,-8*3(r1) | ||
501 | + std r16,-8*4(r1) | ||
502 | + std r17,-8*5(r1) | ||
503 | + std r18,-8*6(r1) | ||
504 | + std r19,-8*7(r1) | ||
505 | + std r20,-8*8(r1) | ||
506 | + std r21,-8*9(r1) | ||
507 | + std r22,-8*10(r1) | ||
508 | + std r23,-8*11(r1) | ||
509 | + std r24,-8*12(r1) | ||
510 | + std r25,-8*13(r1) | ||
511 | + std r26,-8*14(r1) | ||
512 | + std r27,-8*15(r1) | ||
513 | + std r28,-8*16(r1) | ||
514 | + std r29,-8*17(r1) | ||
515 | + std r30,-8*18(r1) | ||
516 | + std r31,-8*19(r1) | ||
517 | + std r4,-8*20(r1) | ||
518 | + std r5,-8*21(r1) | ||
519 | /* 168 bytes */ | ||
520 | PPC_STOP | ||
521 | b . /* catch bugs */ | ||
522 | @@ -87,8 +91,8 @@ _GLOBAL(isa300_idle_stop_mayloss) | ||
523 | */ | ||
524 | _GLOBAL(idle_return_gpr_loss) | ||
525 | ld r1,PACAR1(r13) | ||
526 | - ld r4,-8*19(r1) | ||
527 | - ld r5,-8*20(r1) | ||
528 | + ld r4,-8*20(r1) | ||
529 | + ld r5,-8*21(r1) | ||
530 | mtlr r4 | ||
531 | mtcr r5 | ||
532 | /* | ||
533 | @@ -96,38 +100,40 @@ _GLOBAL(idle_return_gpr_loss) | ||
534 | * from PACATOC. This could be avoided for that less common case | ||
535 | * if KVM saved its r2. | ||
536 | */ | ||
537 | - ld r2,-8*0(r1) | ||
538 | - ld r14,-8*1(r1) | ||
539 | - ld r15,-8*2(r1) | ||
540 | - ld r16,-8*3(r1) | ||
541 | - ld r17,-8*4(r1) | ||
542 | - ld r18,-8*5(r1) | ||
543 | - ld r19,-8*6(r1) | ||
544 | - ld r20,-8*7(r1) | ||
545 | - ld r21,-8*8(r1) | ||
546 | - ld r22,-8*9(r1) | ||
547 | - ld r23,-8*10(r1) | ||
548 | - ld r24,-8*11(r1) | ||
549 | - ld r25,-8*12(r1) | ||
550 | - ld r26,-8*13(r1) | ||
551 | - ld r27,-8*14(r1) | ||
552 | - ld r28,-8*15(r1) | ||
553 | - ld r29,-8*16(r1) | ||
554 | - ld r30,-8*17(r1) | ||
555 | - ld r31,-8*18(r1) | ||
556 | + ld r2,-8*1(r1) | ||
557 | + ld r14,-8*2(r1) | ||
558 | + ld r15,-8*3(r1) | ||
559 | + ld r16,-8*4(r1) | ||
560 | + ld r17,-8*5(r1) | ||
561 | + ld r18,-8*6(r1) | ||
562 | + ld r19,-8*7(r1) | ||
563 | + ld r20,-8*8(r1) | ||
564 | + ld r21,-8*9(r1) | ||
565 | + ld r22,-8*10(r1) | ||
566 | + ld r23,-8*11(r1) | ||
567 | + ld r24,-8*12(r1) | ||
568 | + ld r25,-8*13(r1) | ||
569 | + ld r26,-8*14(r1) | ||
570 | + ld r27,-8*15(r1) | ||
571 | + ld r28,-8*16(r1) | ||
572 | + ld r29,-8*17(r1) | ||
573 | + ld r30,-8*18(r1) | ||
574 | + ld r31,-8*19(r1) | ||
575 | blr | ||
576 | |||
577 | /* | ||
578 | * This is the sequence required to execute idle instructions, as | ||
579 | * specified in ISA v2.07 (and earlier). MSR[IR] and MSR[DR] must be 0. | ||
580 | - * | ||
581 | - * The 0(r1) slot is used to save r2 in isa206, so use that here. | ||
582 | + * We have to store a GPR somewhere, ptesync, then reload it, and create | ||
583 | + * a false dependency on the result of the load. It doesn't matter which | ||
584 | + * GPR we store, or where we store it. We have already stored r2 to the | ||
585 | + * stack at -8(r1) in isa206_idle_insn_mayloss, so use that. | ||
586 | */ | ||
587 | #define IDLE_STATE_ENTER_SEQ_NORET(IDLE_INST) \ | ||
588 | /* Magic NAP/SLEEP/WINKLE mode enter sequence */ \ | ||
589 | - std r2,0(r1); \ | ||
590 | + std r2,-8(r1); \ | ||
591 | ptesync; \ | ||
592 | - ld r2,0(r1); \ | ||
593 | + ld r2,-8(r1); \ | ||
594 | 236: cmpd cr0,r2,r2; \ | ||
595 | bne 236b; \ | ||
596 | IDLE_INST; \ | ||
597 | @@ -152,28 +158,32 @@ _GLOBAL(isa206_idle_insn_mayloss) | ||
598 | std r1,PACAR1(r13) | ||
599 | mflr r4 | ||
600 | mfcr r5 | ||
601 | - /* use stack red zone rather than a new frame for saving regs */ | ||
602 | - std r2,-8*0(r1) | ||
603 | - std r14,-8*1(r1) | ||
604 | - std r15,-8*2(r1) | ||
605 | - std r16,-8*3(r1) | ||
606 | - std r17,-8*4(r1) | ||
607 | - std r18,-8*5(r1) | ||
608 | - std r19,-8*6(r1) | ||
609 | - std r20,-8*7(r1) | ||
610 | - std r21,-8*8(r1) | ||
611 | - std r22,-8*9(r1) | ||
612 | - std r23,-8*10(r1) | ||
613 | - std r24,-8*11(r1) | ||
614 | - std r25,-8*12(r1) | ||
615 | - std r26,-8*13(r1) | ||
616 | - std r27,-8*14(r1) | ||
617 | - std r28,-8*15(r1) | ||
618 | - std r29,-8*16(r1) | ||
619 | - std r30,-8*17(r1) | ||
620 | - std r31,-8*18(r1) | ||
621 | - std r4,-8*19(r1) | ||
622 | - std r5,-8*20(r1) | ||
623 | + /* | ||
624 | + * Use the stack red zone rather than a new frame for saving regs since | ||
625 | + * in the case of no GPR loss the wakeup code branches directly back to | ||
626 | + * the caller without deallocating the stack frame first. | ||
627 | + */ | ||
628 | + std r2,-8*1(r1) | ||
629 | + std r14,-8*2(r1) | ||
630 | + std r15,-8*3(r1) | ||
631 | + std r16,-8*4(r1) | ||
632 | + std r17,-8*5(r1) | ||
633 | + std r18,-8*6(r1) | ||
634 | + std r19,-8*7(r1) | ||
635 | + std r20,-8*8(r1) | ||
636 | + std r21,-8*9(r1) | ||
637 | + std r22,-8*10(r1) | ||
638 | + std r23,-8*11(r1) | ||
639 | + std r24,-8*12(r1) | ||
640 | + std r25,-8*13(r1) | ||
641 | + std r26,-8*14(r1) | ||
642 | + std r27,-8*15(r1) | ||
643 | + std r28,-8*16(r1) | ||
644 | + std r29,-8*17(r1) | ||
645 | + std r30,-8*18(r1) | ||
646 | + std r31,-8*19(r1) | ||
647 | + std r4,-8*20(r1) | ||
648 | + std r5,-8*21(r1) | ||
649 | cmpwi r3,PNV_THREAD_NAP | ||
650 | bne 1f | ||
651 | IDLE_STATE_ENTER_SEQ_NORET(PPC_NAP) | ||
652 | diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
653 | index feaf6ca2e76c1..f9c7326672b95 100644 | ||
654 | --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
655 | +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
656 | @@ -292,13 +292,16 @@ kvm_novcpu_exit: | ||
657 | * r3 contains the SRR1 wakeup value, SRR1 is trashed. | ||
658 | */ | ||
659 | _GLOBAL(idle_kvm_start_guest) | ||
660 | - ld r4,PACAEMERGSP(r13) | ||
661 | mfcr r5 | ||
662 | mflr r0 | ||
663 | - std r1,0(r4) | ||
664 | - std r5,8(r4) | ||
665 | - std r0,16(r4) | ||
666 | - subi r1,r4,STACK_FRAME_OVERHEAD | ||
667 | + std r5, 8(r1) // Save CR in caller's frame | ||
668 | + std r0, 16(r1) // Save LR in caller's frame | ||
669 | + // Create frame on emergency stack | ||
670 | + ld r4, PACAEMERGSP(r13) | ||
671 | + stdu r1, -SWITCH_FRAME_SIZE(r4) | ||
672 | + // Switch to new frame on emergency stack | ||
673 | + mr r1, r4 | ||
674 | + std r3, 32(r1) // Save SRR1 wakeup value | ||
675 | SAVE_NVGPRS(r1) | ||
676 | |||
677 | /* | ||
678 | @@ -350,6 +353,10 @@ kvm_unsplit_wakeup: | ||
679 | |||
680 | kvm_secondary_got_guest: | ||
681 | |||
682 | + // About to go to guest, clear saved SRR1 | ||
683 | + li r0, 0 | ||
684 | + std r0, 32(r1) | ||
685 | + | ||
686 | /* Set HSTATE_DSCR(r13) to something sensible */ | ||
687 | ld r6, PACA_DSCR_DEFAULT(r13) | ||
688 | std r6, HSTATE_DSCR(r13) | ||
689 | @@ -441,13 +448,12 @@ kvm_no_guest: | ||
690 | mfspr r4, SPRN_LPCR | ||
691 | rlwimi r4, r3, 0, LPCR_PECE0 | LPCR_PECE1 | ||
692 | mtspr SPRN_LPCR, r4 | ||
693 | - /* set up r3 for return */ | ||
694 | - mfspr r3,SPRN_SRR1 | ||
695 | + // Return SRR1 wakeup value, or 0 if we went into the guest | ||
696 | + ld r3, 32(r1) | ||
697 | REST_NVGPRS(r1) | ||
698 | - addi r1, r1, STACK_FRAME_OVERHEAD | ||
699 | - ld r0, 16(r1) | ||
700 | - ld r5, 8(r1) | ||
701 | - ld r1, 0(r1) | ||
702 | + ld r1, 0(r1) // Switch back to caller stack | ||
703 | + ld r0, 16(r1) // Reload LR | ||
704 | + ld r5, 8(r1) // Reload CR | ||
705 | mtlr r0 | ||
706 | mtcr r5 | ||
707 | blr | ||
708 | diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c | ||
709 | index 829115bb381f8..4edccb4d4a5ff 100644 | ||
710 | --- a/arch/xtensa/platforms/xtfpga/setup.c | ||
711 | +++ b/arch/xtensa/platforms/xtfpga/setup.c | ||
712 | @@ -50,8 +50,12 @@ void platform_power_off(void) | ||
713 | |||
714 | void platform_restart(void) | ||
715 | { | ||
716 | - /* Flush and reset the mmu, simulate a processor reset, and | ||
717 | - * jump to the reset vector. */ | ||
718 | + /* Try software reset first. */ | ||
719 | + WRITE_ONCE(*(u32 *)XTFPGA_SWRST_VADDR, 0xdead); | ||
720 | + | ||
721 | + /* If software reset did not work, flush and reset the mmu, | ||
722 | + * simulate a processor reset, and jump to the reset vector. | ||
723 | + */ | ||
724 | cpu_reset(); | ||
725 | /* control never gets here */ | ||
726 | } | ||
727 | @@ -81,7 +85,7 @@ void __init platform_calibrate_ccount(void) | ||
728 | |||
729 | #endif | ||
730 | |||
731 | -#ifdef CONFIG_OF | ||
732 | +#ifdef CONFIG_USE_OF | ||
733 | |||
734 | static void __init xtfpga_clk_setup(struct device_node *np) | ||
735 | { | ||
736 | @@ -299,4 +303,4 @@ static int __init xtavnet_init(void) | ||
737 | */ | ||
738 | arch_initcall(xtavnet_init); | ||
739 | |||
740 | -#endif /* CONFIG_OF */ | ||
741 | +#endif /* CONFIG_USE_OF */ | ||
742 | diff --git a/drivers/input/keyboard/snvs_pwrkey.c b/drivers/input/keyboard/snvs_pwrkey.c | ||
743 | index e76b7a400a1c1..248bb86f4b3f4 100644 | ||
744 | --- a/drivers/input/keyboard/snvs_pwrkey.c | ||
745 | +++ b/drivers/input/keyboard/snvs_pwrkey.c | ||
746 | @@ -3,6 +3,7 @@ | ||
747 | // Driver for the IMX SNVS ON/OFF Power Key | ||
748 | // Copyright (C) 2015 Freescale Semiconductor, Inc. All Rights Reserved. | ||
749 | |||
750 | +#include <linux/clk.h> | ||
751 | #include <linux/device.h> | ||
752 | #include <linux/err.h> | ||
753 | #include <linux/init.h> | ||
754 | @@ -81,6 +82,11 @@ static irqreturn_t imx_snvs_pwrkey_interrupt(int irq, void *dev_id) | ||
755 | return IRQ_HANDLED; | ||
756 | } | ||
757 | |||
758 | +static void imx_snvs_pwrkey_disable_clk(void *data) | ||
759 | +{ | ||
760 | + clk_disable_unprepare(data); | ||
761 | +} | ||
762 | + | ||
763 | static void imx_snvs_pwrkey_act(void *pdata) | ||
764 | { | ||
765 | struct pwrkey_drv_data *pd = pdata; | ||
766 | @@ -93,6 +99,7 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev) | ||
767 | struct pwrkey_drv_data *pdata = NULL; | ||
768 | struct input_dev *input = NULL; | ||
769 | struct device_node *np; | ||
770 | + struct clk *clk; | ||
771 | int error; | ||
772 | |||
773 | /* Get SNVS register Page */ | ||
774 | @@ -115,6 +122,28 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev) | ||
775 | dev_warn(&pdev->dev, "KEY_POWER without setting in dts\n"); | ||
776 | } | ||
777 | |||
778 | + clk = devm_clk_get_optional(&pdev->dev, NULL); | ||
779 | + if (IS_ERR(clk)) { | ||
780 | + dev_err(&pdev->dev, "Failed to get snvs clock (%pe)\n", clk); | ||
781 | + return PTR_ERR(clk); | ||
782 | + } | ||
783 | + | ||
784 | + error = clk_prepare_enable(clk); | ||
785 | + if (error) { | ||
786 | + dev_err(&pdev->dev, "Failed to enable snvs clock (%pe)\n", | ||
787 | + ERR_PTR(error)); | ||
788 | + return error; | ||
789 | + } | ||
790 | + | ||
791 | + error = devm_add_action_or_reset(&pdev->dev, | ||
792 | + imx_snvs_pwrkey_disable_clk, clk); | ||
793 | + if (error) { | ||
794 | + dev_err(&pdev->dev, | ||
795 | + "Failed to register clock cleanup handler (%pe)\n", | ||
796 | + ERR_PTR(error)); | ||
797 | + return error; | ||
798 | + } | ||
799 | + | ||
800 | pdata->wakeup = of_property_read_bool(np, "wakeup-source"); | ||
801 | |||
802 | pdata->irq = platform_get_irq(pdev, 0); | ||
803 | diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c | ||
804 | index 18de41a266ebe..aa625b7ddcce2 100644 | ||
805 | --- a/drivers/isdn/capi/kcapi.c | ||
806 | +++ b/drivers/isdn/capi/kcapi.c | ||
807 | @@ -565,6 +565,11 @@ int detach_capi_ctr(struct capi_ctr *ctr) | ||
808 | |||
809 | ctr_down(ctr, CAPI_CTR_DETACHED); | ||
810 | |||
811 | + if (ctr->cnr < 1 || ctr->cnr - 1 >= CAPI_MAXCONTR) { | ||
812 | + err = -EINVAL; | ||
813 | + goto unlock_out; | ||
814 | + } | ||
815 | + | ||
816 | if (capi_controller[ctr->cnr - 1] != ctr) { | ||
817 | err = -EINVAL; | ||
818 | goto unlock_out; | ||
819 | diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c | ||
820 | index 9e6aab04f9d61..8299defff55ae 100644 | ||
821 | --- a/drivers/isdn/hardware/mISDN/netjet.c | ||
822 | +++ b/drivers/isdn/hardware/mISDN/netjet.c | ||
823 | @@ -949,8 +949,8 @@ nj_release(struct tiger_hw *card) | ||
824 | nj_disable_hwirq(card); | ||
825 | mode_tiger(&card->bc[0], ISDN_P_NONE); | ||
826 | mode_tiger(&card->bc[1], ISDN_P_NONE); | ||
827 | - card->isac.release(&card->isac); | ||
828 | spin_unlock_irqrestore(&card->lock, flags); | ||
829 | + card->isac.release(&card->isac); | ||
830 | release_region(card->base, card->base_s); | ||
831 | card->base_s = 0; | ||
832 | } | ||
833 | diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c | ||
834 | index bf5adea9c0a38..ac52288fa3bfe 100644 | ||
835 | --- a/drivers/net/can/rcar/rcar_can.c | ||
836 | +++ b/drivers/net/can/rcar/rcar_can.c | ||
837 | @@ -848,10 +848,12 @@ static int __maybe_unused rcar_can_suspend(struct device *dev) | ||
838 | struct rcar_can_priv *priv = netdev_priv(ndev); | ||
839 | u16 ctlr; | ||
840 | |||
841 | - if (netif_running(ndev)) { | ||
842 | - netif_stop_queue(ndev); | ||
843 | - netif_device_detach(ndev); | ||
844 | - } | ||
845 | + if (!netif_running(ndev)) | ||
846 | + return 0; | ||
847 | + | ||
848 | + netif_stop_queue(ndev); | ||
849 | + netif_device_detach(ndev); | ||
850 | + | ||
851 | ctlr = readw(&priv->regs->ctlr); | ||
852 | ctlr |= RCAR_CAN_CTLR_CANM_HALT; | ||
853 | writew(ctlr, &priv->regs->ctlr); | ||
854 | @@ -870,6 +872,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev) | ||
855 | u16 ctlr; | ||
856 | int err; | ||
857 | |||
858 | + if (!netif_running(ndev)) | ||
859 | + return 0; | ||
860 | + | ||
861 | err = clk_enable(priv->clk); | ||
862 | if (err) { | ||
863 | netdev_err(ndev, "clk_enable() failed, error %d\n", err); | ||
864 | @@ -883,10 +888,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev) | ||
865 | writew(ctlr, &priv->regs->ctlr); | ||
866 | priv->can.state = CAN_STATE_ERROR_ACTIVE; | ||
867 | |||
868 | - if (netif_running(ndev)) { | ||
869 | - netif_device_attach(ndev); | ||
870 | - netif_start_queue(ndev); | ||
871 | - } | ||
872 | + netif_device_attach(ndev); | ||
873 | + netif_start_queue(ndev); | ||
874 | + | ||
875 | return 0; | ||
876 | } | ||
877 | |||
878 | diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c | ||
879 | index 8c0244f51059e..41a63777030cb 100644 | ||
880 | --- a/drivers/net/can/sja1000/peak_pci.c | ||
881 | +++ b/drivers/net/can/sja1000/peak_pci.c | ||
882 | @@ -731,16 +731,15 @@ static void peak_pci_remove(struct pci_dev *pdev) | ||
883 | struct net_device *prev_dev = chan->prev_dev; | ||
884 | |||
885 | dev_info(&pdev->dev, "removing device %s\n", dev->name); | ||
886 | + /* do that only for first channel */ | ||
887 | + if (!prev_dev && chan->pciec_card) | ||
888 | + peak_pciec_remove(chan->pciec_card); | ||
889 | unregister_sja1000dev(dev); | ||
890 | free_sja1000dev(dev); | ||
891 | dev = prev_dev; | ||
892 | |||
893 | - if (!dev) { | ||
894 | - /* do that only for first channel */ | ||
895 | - if (chan->pciec_card) | ||
896 | - peak_pciec_remove(chan->pciec_card); | ||
897 | + if (!dev) | ||
898 | break; | ||
899 | - } | ||
900 | priv = netdev_priv(dev); | ||
901 | chan = priv->priv; | ||
902 | } | ||
903 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
904 | index 96bbdef672bc9..571d9b0bfe518 100644 | ||
905 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
906 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c | ||
907 | @@ -551,11 +551,10 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if, | ||
908 | } else if (sm->channel_p_w_b & PUCAN_BUS_WARNING) { | ||
909 | new_state = CAN_STATE_ERROR_WARNING; | ||
910 | } else { | ||
911 | - /* no error bit (so, no error skb, back to active state) */ | ||
912 | - dev->can.state = CAN_STATE_ERROR_ACTIVE; | ||
913 | + /* back to (or still in) ERROR_ACTIVE state */ | ||
914 | + new_state = CAN_STATE_ERROR_ACTIVE; | ||
915 | pdev->bec.txerr = 0; | ||
916 | pdev->bec.rxerr = 0; | ||
917 | - return 0; | ||
918 | } | ||
919 | |||
920 | /* state hasn't changed */ | ||
921 | diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c | ||
922 | index 3225de0f655f2..60e36f46f8abe 100644 | ||
923 | --- a/drivers/net/dsa/lantiq_gswip.c | ||
924 | +++ b/drivers/net/dsa/lantiq_gswip.c | ||
925 | @@ -229,7 +229,7 @@ | ||
926 | #define GSWIP_SDMA_PCTRLp(p) (0xBC0 + ((p) * 0x6)) | ||
927 | #define GSWIP_SDMA_PCTRL_EN BIT(0) /* SDMA Port Enable */ | ||
928 | #define GSWIP_SDMA_PCTRL_FCEN BIT(1) /* Flow Control Enable */ | ||
929 | -#define GSWIP_SDMA_PCTRL_PAUFWD BIT(1) /* Pause Frame Forwarding */ | ||
930 | +#define GSWIP_SDMA_PCTRL_PAUFWD BIT(3) /* Pause Frame Forwarding */ | ||
931 | |||
932 | #define GSWIP_TABLE_ACTIVE_VLAN 0x01 | ||
933 | #define GSWIP_TABLE_VLAN_MAPPING 0x02 | ||
934 | diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | ||
935 | index 89121d7ce3e6f..636aa6d81d8fe 100644 | ||
936 | --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | ||
937 | +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | ||
938 | @@ -155,7 +155,7 @@ static const struct { | ||
939 | { ENETC_PM0_TFRM, "MAC tx frames" }, | ||
940 | { ENETC_PM0_TFCS, "MAC tx fcs errors" }, | ||
941 | { ENETC_PM0_TVLAN, "MAC tx VLAN frames" }, | ||
942 | - { ENETC_PM0_TERR, "MAC tx frames" }, | ||
943 | + { ENETC_PM0_TERR, "MAC tx frame errors" }, | ||
944 | { ENETC_PM0_TUCA, "MAC tx unicast frames" }, | ||
945 | { ENETC_PM0_TMCA, "MAC tx multicast frames" }, | ||
946 | { ENETC_PM0_TBCA, "MAC tx broadcast frames" }, | ||
947 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.c b/drivers/net/ethernet/hisilicon/hns3/hnae3.c | ||
948 | index 03ca7d925e8e0..2e38c7d214c45 100644 | ||
949 | --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.c | ||
950 | +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.c | ||
951 | @@ -10,6 +10,27 @@ static LIST_HEAD(hnae3_ae_algo_list); | ||
952 | static LIST_HEAD(hnae3_client_list); | ||
953 | static LIST_HEAD(hnae3_ae_dev_list); | ||
954 | |||
955 | +void hnae3_unregister_ae_algo_prepare(struct hnae3_ae_algo *ae_algo) | ||
956 | +{ | ||
957 | + const struct pci_device_id *pci_id; | ||
958 | + struct hnae3_ae_dev *ae_dev; | ||
959 | + | ||
960 | + if (!ae_algo) | ||
961 | + return; | ||
962 | + | ||
963 | + list_for_each_entry(ae_dev, &hnae3_ae_dev_list, node) { | ||
964 | + if (!hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B)) | ||
965 | + continue; | ||
966 | + | ||
967 | + pci_id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev); | ||
968 | + if (!pci_id) | ||
969 | + continue; | ||
970 | + if (IS_ENABLED(CONFIG_PCI_IOV)) | ||
971 | + pci_disable_sriov(ae_dev->pdev); | ||
972 | + } | ||
973 | +} | ||
974 | +EXPORT_SYMBOL(hnae3_unregister_ae_algo_prepare); | ||
975 | + | ||
976 | /* we are keeping things simple and using single lock for all the | ||
977 | * list. This is a non-critical code so other updations, if happen | ||
978 | * in parallel, can wait. | ||
979 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h | ||
980 | index 0db835d87d09d..6cf8490110642 100644 | ||
981 | --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h | ||
982 | +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h | ||
983 | @@ -666,6 +666,7 @@ struct hnae3_handle { | ||
984 | int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev); | ||
985 | void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev); | ||
986 | |||
987 | +void hnae3_unregister_ae_algo_prepare(struct hnae3_ae_algo *ae_algo); | ||
988 | void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo); | ||
989 | void hnae3_register_ae_algo(struct hnae3_ae_algo *ae_algo); | ||
990 | |||
991 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | ||
992 | index d16488bab86f5..9076605403a74 100644 | ||
993 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | ||
994 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | ||
995 | @@ -132,6 +132,15 @@ static int hclge_ets_validate(struct hclge_dev *hdev, struct ieee_ets *ets, | ||
996 | *changed = true; | ||
997 | break; | ||
998 | case IEEE_8021QAZ_TSA_ETS: | ||
999 | + /* The hardware will switch to sp mode if bandwidth is | ||
1000 | + * 0, so limit ets bandwidth must be greater than 0. | ||
1001 | + */ | ||
1002 | + if (!ets->tc_tx_bw[i]) { | ||
1003 | + dev_err(&hdev->pdev->dev, | ||
1004 | + "tc%u ets bw cannot be 0\n", i); | ||
1005 | + return -EINVAL; | ||
1006 | + } | ||
1007 | + | ||
1008 | if (hdev->tm_info.tc_info[i].tc_sch_mode != | ||
1009 | HCLGE_SCH_MODE_DWRR) | ||
1010 | *changed = true; | ||
1011 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | ||
1012 | index f44e8401496b1..8ecfabaefa85b 100644 | ||
1013 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | ||
1014 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | ||
1015 | @@ -10274,6 +10274,7 @@ static int hclge_init(void) | ||
1016 | |||
1017 | static void hclge_exit(void) | ||
1018 | { | ||
1019 | + hnae3_unregister_ae_algo_prepare(&ae_algo); | ||
1020 | hnae3_unregister_ae_algo(&ae_algo); | ||
1021 | } | ||
1022 | module_init(hclge_init); | ||
1023 | diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | ||
1024 | index 62399cc1c5a63..d98f0e2ec7aa3 100644 | ||
1025 | --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | ||
1026 | +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | ||
1027 | @@ -633,6 +633,8 @@ static void hclge_tm_pg_info_init(struct hclge_dev *hdev) | ||
1028 | hdev->tm_info.pg_info[i].tc_bit_map = hdev->hw_tc_map; | ||
1029 | for (k = 0; k < hdev->tm_info.num_tc; k++) | ||
1030 | hdev->tm_info.pg_info[i].tc_dwrr[k] = BW_PERCENT; | ||
1031 | + for (; k < HNAE3_MAX_TC; k++) | ||
1032 | + hdev->tm_info.pg_info[i].tc_dwrr[k] = 0; | ||
1033 | } | ||
1034 | } | ||
1035 | |||
1036 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c | ||
1037 | index fad503820e040..b3365b34cac7c 100644 | ||
1038 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c | ||
1039 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c | ||
1040 | @@ -71,6 +71,7 @@ err_remove_config_dt: | ||
1041 | |||
1042 | static const struct of_device_id dwmac_generic_match[] = { | ||
1043 | { .compatible = "st,spear600-gmac"}, | ||
1044 | + { .compatible = "snps,dwmac-3.40a"}, | ||
1045 | { .compatible = "snps,dwmac-3.50a"}, | ||
1046 | { .compatible = "snps,dwmac-3.610"}, | ||
1047 | { .compatible = "snps,dwmac-3.70a"}, | ||
1048 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
1049 | index 835ac178bc8c0..94c652b9a0a8b 100644 | ||
1050 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
1051 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
1052 | @@ -604,7 +604,7 @@ static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) | ||
1053 | config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; | ||
1054 | ptp_v2 = PTP_TCR_TSVER2ENA; | ||
1055 | snap_type_sel = PTP_TCR_SNAPTYPSEL_1; | ||
1056 | - if (priv->synopsys_id != DWMAC_CORE_5_10) | ||
1057 | + if (priv->synopsys_id < DWMAC_CORE_4_10) | ||
1058 | ts_event_en = PTP_TCR_TSEVNTENA; | ||
1059 | ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; | ||
1060 | ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; | ||
1061 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
1062 | index 678aa2b001e01..a46fea472bc46 100644 | ||
1063 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
1064 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
1065 | @@ -505,6 +505,14 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) | ||
1066 | plat->pmt = 1; | ||
1067 | } | ||
1068 | |||
1069 | + if (of_device_is_compatible(np, "snps,dwmac-3.40a")) { | ||
1070 | + plat->has_gmac = 1; | ||
1071 | + plat->enh_desc = 1; | ||
1072 | + plat->tx_coe = 1; | ||
1073 | + plat->bugged_jumbo = 1; | ||
1074 | + plat->pmt = 1; | ||
1075 | + } | ||
1076 | + | ||
1077 | if (of_device_is_compatible(np, "snps,dwmac-4.00") || | ||
1078 | of_device_is_compatible(np, "snps,dwmac-4.10a") || | ||
1079 | of_device_is_compatible(np, "snps,dwmac-4.20a")) { | ||
1080 | diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c | ||
1081 | index bec73f0640d03..8377ff229a303 100644 | ||
1082 | --- a/drivers/net/phy/mdio_bus.c | ||
1083 | +++ b/drivers/net/phy/mdio_bus.c | ||
1084 | @@ -395,6 +395,7 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner) | ||
1085 | err = device_register(&bus->dev); | ||
1086 | if (err) { | ||
1087 | pr_err("mii_bus %s failed to register\n", bus->id); | ||
1088 | + put_device(&bus->dev); | ||
1089 | return -EINVAL; | ||
1090 | } | ||
1091 | |||
1092 | diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig | ||
1093 | index ca234d1a0e3bf..d7005cc76ce91 100644 | ||
1094 | --- a/drivers/net/usb/Kconfig | ||
1095 | +++ b/drivers/net/usb/Kconfig | ||
1096 | @@ -117,6 +117,7 @@ config USB_LAN78XX | ||
1097 | select PHYLIB | ||
1098 | select MICROCHIP_PHY | ||
1099 | select FIXED_PHY | ||
1100 | + select CRC32 | ||
1101 | help | ||
1102 | This option adds support for Microchip LAN78XX based USB 2 | ||
1103 | & USB 3 10/100/1000 Ethernet adapters. | ||
1104 | diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c | ||
1105 | index bac1d040bacab..138cbc012cd89 100644 | ||
1106 | --- a/drivers/pinctrl/stm32/pinctrl-stm32.c | ||
1107 | +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c | ||
1108 | @@ -1554,8 +1554,8 @@ int __maybe_unused stm32_pinctrl_resume(struct device *dev) | ||
1109 | struct stm32_pinctrl_group *g = pctl->groups; | ||
1110 | int i; | ||
1111 | |||
1112 | - for (i = g->pin; i < g->pin + pctl->ngroups; i++) | ||
1113 | - stm32_pinctrl_restore_gpio_regs(pctl, i); | ||
1114 | + for (i = 0; i < pctl->ngroups; i++, g++) | ||
1115 | + stm32_pinctrl_restore_gpio_regs(pctl, g->pin); | ||
1116 | |||
1117 | return 0; | ||
1118 | } | ||
1119 | diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c | ||
1120 | index e330ec73c465d..bcb516892d01d 100644 | ||
1121 | --- a/drivers/platform/x86/intel_scu_ipc.c | ||
1122 | +++ b/drivers/platform/x86/intel_scu_ipc.c | ||
1123 | @@ -181,7 +181,7 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu) | ||
1124 | return 0; | ||
1125 | } | ||
1126 | |||
1127 | -/* Wait till ipc ioc interrupt is received or timeout in 3 HZ */ | ||
1128 | +/* Wait till ipc ioc interrupt is received or timeout in 10 HZ */ | ||
1129 | static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) | ||
1130 | { | ||
1131 | int status; | ||
1132 | diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c | ||
1133 | index 7c736e4ddafe7..45885e80992fb 100644 | ||
1134 | --- a/drivers/scsi/hosts.c | ||
1135 | +++ b/drivers/scsi/hosts.c | ||
1136 | @@ -219,7 +219,8 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, | ||
1137 | goto fail; | ||
1138 | } | ||
1139 | |||
1140 | - shost->cmd_per_lun = min_t(short, shost->cmd_per_lun, | ||
1141 | + /* Use min_t(int, ...) in case shost->can_queue exceeds SHRT_MAX */ | ||
1142 | + shost->cmd_per_lun = min_t(int, shost->cmd_per_lun, | ||
1143 | shost->can_queue); | ||
1144 | |||
1145 | error = scsi_init_sense_cache(shost); | ||
1146 | diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c | ||
1147 | index 4bb4c8f28cbd7..5eaef45799e61 100644 | ||
1148 | --- a/drivers/tee/optee/core.c | ||
1149 | +++ b/drivers/tee/optee/core.c | ||
1150 | @@ -582,6 +582,9 @@ static struct optee *optee_probe(struct device_node *np) | ||
1151 | if (sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) | ||
1152 | pool = optee_config_dyn_shm(); | ||
1153 | |||
1154 | + /* Unregister OP-TEE specific client devices on TEE bus */ | ||
1155 | + optee_unregister_devices(); | ||
1156 | + | ||
1157 | /* | ||
1158 | * If dynamic shared memory is not available or failed - try static one | ||
1159 | */ | ||
1160 | diff --git a/drivers/tee/optee/device.c b/drivers/tee/optee/device.c | ||
1161 | index e3a148521ec1d..acff7dd677d67 100644 | ||
1162 | --- a/drivers/tee/optee/device.c | ||
1163 | +++ b/drivers/tee/optee/device.c | ||
1164 | @@ -65,6 +65,13 @@ static int get_devices(struct tee_context *ctx, u32 session, | ||
1165 | return 0; | ||
1166 | } | ||
1167 | |||
1168 | +static void optee_release_device(struct device *dev) | ||
1169 | +{ | ||
1170 | + struct tee_client_device *optee_device = to_tee_client_device(dev); | ||
1171 | + | ||
1172 | + kfree(optee_device); | ||
1173 | +} | ||
1174 | + | ||
1175 | static int optee_register_device(const uuid_t *device_uuid, u32 device_id) | ||
1176 | { | ||
1177 | struct tee_client_device *optee_device = NULL; | ||
1178 | @@ -75,6 +82,7 @@ static int optee_register_device(const uuid_t *device_uuid, u32 device_id) | ||
1179 | return -ENOMEM; | ||
1180 | |||
1181 | optee_device->dev.bus = &tee_bus_type; | ||
1182 | + optee_device->dev.release = optee_release_device; | ||
1183 | dev_set_name(&optee_device->dev, "optee-clnt%u", device_id); | ||
1184 | uuid_copy(&optee_device->id.uuid, device_uuid); | ||
1185 | |||
1186 | @@ -158,3 +166,17 @@ out_ctx: | ||
1187 | |||
1188 | return rc; | ||
1189 | } | ||
1190 | + | ||
1191 | +static int __optee_unregister_device(struct device *dev, void *data) | ||
1192 | +{ | ||
1193 | + if (!strncmp(dev_name(dev), "optee-clnt", strlen("optee-clnt"))) | ||
1194 | + device_unregister(dev); | ||
1195 | + | ||
1196 | + return 0; | ||
1197 | +} | ||
1198 | + | ||
1199 | +void optee_unregister_devices(void) | ||
1200 | +{ | ||
1201 | + bus_for_each_dev(&tee_bus_type, NULL, NULL, | ||
1202 | + __optee_unregister_device); | ||
1203 | +} | ||
1204 | diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h | ||
1205 | index 3eeaad2a28686..54c3fa01d0024 100644 | ||
1206 | --- a/drivers/tee/optee/optee_private.h | ||
1207 | +++ b/drivers/tee/optee/optee_private.h | ||
1208 | @@ -175,6 +175,7 @@ void optee_fill_pages_list(u64 *dst, struct page **pages, int num_pages, | ||
1209 | size_t page_offset); | ||
1210 | |||
1211 | int optee_enumerate_devices(void); | ||
1212 | +void optee_unregister_devices(void); | ||
1213 | |||
1214 | /* | ||
1215 | * Small helpers | ||
1216 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c | ||
1217 | index 9d358dafef367..f342055699870 100644 | ||
1218 | --- a/fs/btrfs/tree-log.c | ||
1219 | +++ b/fs/btrfs/tree-log.c | ||
1220 | @@ -900,9 +900,11 @@ out: | ||
1221 | } | ||
1222 | |||
1223 | /* | ||
1224 | - * helper function to see if a given name and sequence number found | ||
1225 | - * in an inode back reference are already in a directory and correctly | ||
1226 | - * point to this inode | ||
1227 | + * See if a given name and sequence number found in an inode back reference are | ||
1228 | + * already in a directory and correctly point to this inode. | ||
1229 | + * | ||
1230 | + * Returns: < 0 on error, 0 if the directory entry does not exists and 1 if it | ||
1231 | + * exists. | ||
1232 | */ | ||
1233 | static noinline int inode_in_dir(struct btrfs_root *root, | ||
1234 | struct btrfs_path *path, | ||
1235 | @@ -911,29 +913,35 @@ static noinline int inode_in_dir(struct btrfs_root *root, | ||
1236 | { | ||
1237 | struct btrfs_dir_item *di; | ||
1238 | struct btrfs_key location; | ||
1239 | - int match = 0; | ||
1240 | + int ret = 0; | ||
1241 | |||
1242 | di = btrfs_lookup_dir_index_item(NULL, root, path, dirid, | ||
1243 | index, name, name_len, 0); | ||
1244 | - if (di && !IS_ERR(di)) { | ||
1245 | + if (IS_ERR(di)) { | ||
1246 | + if (PTR_ERR(di) != -ENOENT) | ||
1247 | + ret = PTR_ERR(di); | ||
1248 | + goto out; | ||
1249 | + } else if (di) { | ||
1250 | btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); | ||
1251 | if (location.objectid != objectid) | ||
1252 | goto out; | ||
1253 | - } else | ||
1254 | + } else { | ||
1255 | goto out; | ||
1256 | - btrfs_release_path(path); | ||
1257 | + } | ||
1258 | |||
1259 | + btrfs_release_path(path); | ||
1260 | di = btrfs_lookup_dir_item(NULL, root, path, dirid, name, name_len, 0); | ||
1261 | - if (di && !IS_ERR(di)) { | ||
1262 | - btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); | ||
1263 | - if (location.objectid != objectid) | ||
1264 | - goto out; | ||
1265 | - } else | ||
1266 | + if (IS_ERR(di)) { | ||
1267 | + ret = PTR_ERR(di); | ||
1268 | goto out; | ||
1269 | - match = 1; | ||
1270 | + } else if (di) { | ||
1271 | + btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); | ||
1272 | + if (location.objectid == objectid) | ||
1273 | + ret = 1; | ||
1274 | + } | ||
1275 | out: | ||
1276 | btrfs_release_path(path); | ||
1277 | - return match; | ||
1278 | + return ret; | ||
1279 | } | ||
1280 | |||
1281 | /* | ||
1282 | @@ -1500,10 +1508,12 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, | ||
1283 | if (ret) | ||
1284 | goto out; | ||
1285 | |||
1286 | - /* if we already have a perfect match, we're done */ | ||
1287 | - if (!inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)), | ||
1288 | - btrfs_ino(BTRFS_I(inode)), ref_index, | ||
1289 | - name, namelen)) { | ||
1290 | + ret = inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)), | ||
1291 | + btrfs_ino(BTRFS_I(inode)), ref_index, | ||
1292 | + name, namelen); | ||
1293 | + if (ret < 0) { | ||
1294 | + goto out; | ||
1295 | + } else if (ret == 0) { | ||
1296 | /* | ||
1297 | * look for a conflicting back reference in the | ||
1298 | * metadata. if we find one we have to unlink that name | ||
1299 | @@ -1561,6 +1571,7 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, | ||
1300 | |||
1301 | btrfs_update_inode(trans, root, inode); | ||
1302 | } | ||
1303 | + /* Else, ret == 1, we already have a perfect match, we're done. */ | ||
1304 | |||
1305 | ref_ptr = (unsigned long)(ref_ptr + ref_struct_size) + namelen; | ||
1306 | kfree(name); | ||
1307 | diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c | ||
1308 | index 0fad044a5752b..06e9b26bf277a 100644 | ||
1309 | --- a/fs/ceph/caps.c | ||
1310 | +++ b/fs/ceph/caps.c | ||
1311 | @@ -2249,7 +2249,6 @@ static int unsafe_request_wait(struct inode *inode) | ||
1312 | |||
1313 | int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync) | ||
1314 | { | ||
1315 | - struct ceph_file_info *fi = file->private_data; | ||
1316 | struct inode *inode = file->f_mapping->host; | ||
1317 | struct ceph_inode_info *ci = ceph_inode(inode); | ||
1318 | u64 flush_tid; | ||
1319 | @@ -2280,14 +2279,9 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync) | ||
1320 | if (err < 0) | ||
1321 | ret = err; | ||
1322 | |||
1323 | - if (errseq_check(&ci->i_meta_err, READ_ONCE(fi->meta_err))) { | ||
1324 | - spin_lock(&file->f_lock); | ||
1325 | - err = errseq_check_and_advance(&ci->i_meta_err, | ||
1326 | - &fi->meta_err); | ||
1327 | - spin_unlock(&file->f_lock); | ||
1328 | - if (err < 0) | ||
1329 | - ret = err; | ||
1330 | - } | ||
1331 | + err = file_check_and_advance_wb_err(file); | ||
1332 | + if (err < 0) | ||
1333 | + ret = err; | ||
1334 | out: | ||
1335 | dout("fsync %p%s result=%d\n", inode, datasync ? " datasync" : "", ret); | ||
1336 | return ret; | ||
1337 | diff --git a/fs/ceph/file.c b/fs/ceph/file.c | ||
1338 | index 34785a203461d..aa1eac6d89f2e 100644 | ||
1339 | --- a/fs/ceph/file.c | ||
1340 | +++ b/fs/ceph/file.c | ||
1341 | @@ -234,7 +234,6 @@ static int ceph_init_file_info(struct inode *inode, struct file *file, | ||
1342 | fi->fmode = fmode; | ||
1343 | spin_lock_init(&fi->rw_contexts_lock); | ||
1344 | INIT_LIST_HEAD(&fi->rw_contexts); | ||
1345 | - fi->meta_err = errseq_sample(&ci->i_meta_err); | ||
1346 | fi->filp_gen = READ_ONCE(ceph_inode_to_client(inode)->filp_gen); | ||
1347 | |||
1348 | return 0; | ||
1349 | diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c | ||
1350 | index 5beebbbb42f09..af85a72376040 100644 | ||
1351 | --- a/fs/ceph/inode.c | ||
1352 | +++ b/fs/ceph/inode.c | ||
1353 | @@ -515,8 +515,6 @@ struct inode *ceph_alloc_inode(struct super_block *sb) | ||
1354 | |||
1355 | ceph_fscache_inode_init(ci); | ||
1356 | |||
1357 | - ci->i_meta_err = 0; | ||
1358 | - | ||
1359 | return &ci->vfs_inode; | ||
1360 | } | ||
1361 | |||
1362 | diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c | ||
1363 | index 1ef370913c007..37fb71797b341 100644 | ||
1364 | --- a/fs/ceph/mds_client.c | ||
1365 | +++ b/fs/ceph/mds_client.c | ||
1366 | @@ -1272,7 +1272,6 @@ static void cleanup_session_requests(struct ceph_mds_client *mdsc, | ||
1367 | { | ||
1368 | struct ceph_mds_request *req; | ||
1369 | struct rb_node *p; | ||
1370 | - struct ceph_inode_info *ci; | ||
1371 | |||
1372 | dout("cleanup_session_requests mds%d\n", session->s_mds); | ||
1373 | mutex_lock(&mdsc->mutex); | ||
1374 | @@ -1281,16 +1280,10 @@ static void cleanup_session_requests(struct ceph_mds_client *mdsc, | ||
1375 | struct ceph_mds_request, r_unsafe_item); | ||
1376 | pr_warn_ratelimited(" dropping unsafe request %llu\n", | ||
1377 | req->r_tid); | ||
1378 | - if (req->r_target_inode) { | ||
1379 | - /* dropping unsafe change of inode's attributes */ | ||
1380 | - ci = ceph_inode(req->r_target_inode); | ||
1381 | - errseq_set(&ci->i_meta_err, -EIO); | ||
1382 | - } | ||
1383 | - if (req->r_unsafe_dir) { | ||
1384 | - /* dropping unsafe directory operation */ | ||
1385 | - ci = ceph_inode(req->r_unsafe_dir); | ||
1386 | - errseq_set(&ci->i_meta_err, -EIO); | ||
1387 | - } | ||
1388 | + if (req->r_target_inode) | ||
1389 | + mapping_set_error(req->r_target_inode->i_mapping, -EIO); | ||
1390 | + if (req->r_unsafe_dir) | ||
1391 | + mapping_set_error(req->r_unsafe_dir->i_mapping, -EIO); | ||
1392 | __unregister_request(mdsc, req); | ||
1393 | } | ||
1394 | /* zero r_attempts, so kick_requests() will re-send requests */ | ||
1395 | @@ -1436,7 +1429,7 @@ static int remove_session_caps_cb(struct inode *inode, struct ceph_cap *cap, | ||
1396 | spin_unlock(&mdsc->cap_dirty_lock); | ||
1397 | |||
1398 | if (dirty_dropped) { | ||
1399 | - errseq_set(&ci->i_meta_err, -EIO); | ||
1400 | + mapping_set_error(inode->i_mapping, -EIO); | ||
1401 | |||
1402 | if (ci->i_wrbuffer_ref_head == 0 && | ||
1403 | ci->i_wr_ref == 0 && | ||
1404 | diff --git a/fs/ceph/super.h b/fs/ceph/super.h | ||
1405 | index 8ffc8e88dd3d2..6db7b3387e1cc 100644 | ||
1406 | --- a/fs/ceph/super.h | ||
1407 | +++ b/fs/ceph/super.h | ||
1408 | @@ -402,8 +402,6 @@ struct ceph_inode_info { | ||
1409 | struct fscache_cookie *fscache; | ||
1410 | u32 i_fscache_gen; | ||
1411 | #endif | ||
1412 | - errseq_t i_meta_err; | ||
1413 | - | ||
1414 | struct inode vfs_inode; /* at end */ | ||
1415 | }; | ||
1416 | |||
1417 | @@ -712,7 +710,6 @@ struct ceph_file_info { | ||
1418 | spinlock_t rw_contexts_lock; | ||
1419 | struct list_head rw_contexts; | ||
1420 | |||
1421 | - errseq_t meta_err; | ||
1422 | u32 filp_gen; | ||
1423 | atomic_t num_locks; | ||
1424 | }; | ||
1425 | diff --git a/fs/exec.c b/fs/exec.c | ||
1426 | index 1b4d2206d53a1..098de820abcc9 100644 | ||
1427 | --- a/fs/exec.c | ||
1428 | +++ b/fs/exec.c | ||
1429 | @@ -988,7 +988,7 @@ int kernel_read_file_from_fd(int fd, void **buf, loff_t *size, loff_t max_size, | ||
1430 | struct fd f = fdget(fd); | ||
1431 | int ret = -EBADF; | ||
1432 | |||
1433 | - if (!f.file) | ||
1434 | + if (!f.file || !(f.file->f_mode & FMODE_READ)) | ||
1435 | goto out; | ||
1436 | |||
1437 | ret = kernel_read_file(f.file, buf, size, max_size, id); | ||
1438 | diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c | ||
1439 | index 8e03d6c25097a..730386c130e0f 100644 | ||
1440 | --- a/fs/nfsd/nfsctl.c | ||
1441 | +++ b/fs/nfsd/nfsctl.c | ||
1442 | @@ -792,7 +792,10 @@ out_close: | ||
1443 | svc_xprt_put(xprt); | ||
1444 | } | ||
1445 | out_err: | ||
1446 | - nfsd_destroy(net); | ||
1447 | + if (!list_empty(&nn->nfsd_serv->sv_permsocks)) | ||
1448 | + nn->nfsd_serv->sv_nrthreads--; | ||
1449 | + else | ||
1450 | + nfsd_destroy(net); | ||
1451 | return err; | ||
1452 | } | ||
1453 | |||
1454 | diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c | ||
1455 | index 0a6fe7d5aba74..4db87b26cf7b2 100644 | ||
1456 | --- a/fs/ocfs2/alloc.c | ||
1457 | +++ b/fs/ocfs2/alloc.c | ||
1458 | @@ -7048,7 +7048,7 @@ void ocfs2_set_inode_data_inline(struct inode *inode, struct ocfs2_dinode *di) | ||
1459 | int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1460 | struct buffer_head *di_bh) | ||
1461 | { | ||
1462 | - int ret, i, has_data, num_pages = 0; | ||
1463 | + int ret, has_data, num_pages = 0; | ||
1464 | int need_free = 0; | ||
1465 | u32 bit_off, num; | ||
1466 | handle_t *handle; | ||
1467 | @@ -7057,26 +7057,17 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1468 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | ||
1469 | struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; | ||
1470 | struct ocfs2_alloc_context *data_ac = NULL; | ||
1471 | - struct page **pages = NULL; | ||
1472 | - loff_t end = osb->s_clustersize; | ||
1473 | + struct page *page = NULL; | ||
1474 | struct ocfs2_extent_tree et; | ||
1475 | int did_quota = 0; | ||
1476 | |||
1477 | has_data = i_size_read(inode) ? 1 : 0; | ||
1478 | |||
1479 | if (has_data) { | ||
1480 | - pages = kcalloc(ocfs2_pages_per_cluster(osb->sb), | ||
1481 | - sizeof(struct page *), GFP_NOFS); | ||
1482 | - if (pages == NULL) { | ||
1483 | - ret = -ENOMEM; | ||
1484 | - mlog_errno(ret); | ||
1485 | - return ret; | ||
1486 | - } | ||
1487 | - | ||
1488 | ret = ocfs2_reserve_clusters(osb, 1, &data_ac); | ||
1489 | if (ret) { | ||
1490 | mlog_errno(ret); | ||
1491 | - goto free_pages; | ||
1492 | + goto out; | ||
1493 | } | ||
1494 | } | ||
1495 | |||
1496 | @@ -7096,7 +7087,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1497 | } | ||
1498 | |||
1499 | if (has_data) { | ||
1500 | - unsigned int page_end; | ||
1501 | + unsigned int page_end = min_t(unsigned, PAGE_SIZE, | ||
1502 | + osb->s_clustersize); | ||
1503 | u64 phys; | ||
1504 | |||
1505 | ret = dquot_alloc_space_nodirty(inode, | ||
1506 | @@ -7120,15 +7112,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1507 | */ | ||
1508 | block = phys = ocfs2_clusters_to_blocks(inode->i_sb, bit_off); | ||
1509 | |||
1510 | - /* | ||
1511 | - * Non sparse file systems zero on extend, so no need | ||
1512 | - * to do that now. | ||
1513 | - */ | ||
1514 | - if (!ocfs2_sparse_alloc(osb) && | ||
1515 | - PAGE_SIZE < osb->s_clustersize) | ||
1516 | - end = PAGE_SIZE; | ||
1517 | - | ||
1518 | - ret = ocfs2_grab_eof_pages(inode, 0, end, pages, &num_pages); | ||
1519 | + ret = ocfs2_grab_eof_pages(inode, 0, page_end, &page, | ||
1520 | + &num_pages); | ||
1521 | if (ret) { | ||
1522 | mlog_errno(ret); | ||
1523 | need_free = 1; | ||
1524 | @@ -7139,20 +7124,15 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1525 | * This should populate the 1st page for us and mark | ||
1526 | * it up to date. | ||
1527 | */ | ||
1528 | - ret = ocfs2_read_inline_data(inode, pages[0], di_bh); | ||
1529 | + ret = ocfs2_read_inline_data(inode, page, di_bh); | ||
1530 | if (ret) { | ||
1531 | mlog_errno(ret); | ||
1532 | need_free = 1; | ||
1533 | goto out_unlock; | ||
1534 | } | ||
1535 | |||
1536 | - page_end = PAGE_SIZE; | ||
1537 | - if (PAGE_SIZE > osb->s_clustersize) | ||
1538 | - page_end = osb->s_clustersize; | ||
1539 | - | ||
1540 | - for (i = 0; i < num_pages; i++) | ||
1541 | - ocfs2_map_and_dirty_page(inode, handle, 0, page_end, | ||
1542 | - pages[i], i > 0, &phys); | ||
1543 | + ocfs2_map_and_dirty_page(inode, handle, 0, page_end, page, 0, | ||
1544 | + &phys); | ||
1545 | } | ||
1546 | |||
1547 | spin_lock(&oi->ip_lock); | ||
1548 | @@ -7183,8 +7163,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | ||
1549 | } | ||
1550 | |||
1551 | out_unlock: | ||
1552 | - if (pages) | ||
1553 | - ocfs2_unlock_and_free_pages(pages, num_pages); | ||
1554 | + if (page) | ||
1555 | + ocfs2_unlock_and_free_pages(&page, num_pages); | ||
1556 | |||
1557 | out_commit: | ||
1558 | if (ret < 0 && did_quota) | ||
1559 | @@ -7208,8 +7188,6 @@ out_commit: | ||
1560 | out: | ||
1561 | if (data_ac) | ||
1562 | ocfs2_free_alloc_context(data_ac); | ||
1563 | -free_pages: | ||
1564 | - kfree(pages); | ||
1565 | return ret; | ||
1566 | } | ||
1567 | |||
1568 | diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c | ||
1569 | index 60b4b6df1ed36..eaec97892dce8 100644 | ||
1570 | --- a/fs/ocfs2/super.c | ||
1571 | +++ b/fs/ocfs2/super.c | ||
1572 | @@ -2150,11 +2150,17 @@ static int ocfs2_initialize_super(struct super_block *sb, | ||
1573 | } | ||
1574 | |||
1575 | if (ocfs2_clusterinfo_valid(osb)) { | ||
1576 | + /* | ||
1577 | + * ci_stack and ci_cluster in ocfs2_cluster_info may not be null | ||
1578 | + * terminated, so make sure no overflow happens here by using | ||
1579 | + * memcpy. Destination strings will always be null terminated | ||
1580 | + * because osb is allocated using kzalloc. | ||
1581 | + */ | ||
1582 | osb->osb_stackflags = | ||
1583 | OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags; | ||
1584 | - strlcpy(osb->osb_cluster_stack, | ||
1585 | + memcpy(osb->osb_cluster_stack, | ||
1586 | OCFS2_RAW_SB(di)->s_cluster_info.ci_stack, | ||
1587 | - OCFS2_STACK_LABEL_LEN + 1); | ||
1588 | + OCFS2_STACK_LABEL_LEN); | ||
1589 | if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) { | ||
1590 | mlog(ML_ERROR, | ||
1591 | "couldn't mount because of an invalid " | ||
1592 | @@ -2163,9 +2169,9 @@ static int ocfs2_initialize_super(struct super_block *sb, | ||
1593 | status = -EINVAL; | ||
1594 | goto bail; | ||
1595 | } | ||
1596 | - strlcpy(osb->osb_cluster_name, | ||
1597 | + memcpy(osb->osb_cluster_name, | ||
1598 | OCFS2_RAW_SB(di)->s_cluster_info.ci_cluster, | ||
1599 | - OCFS2_CLUSTER_NAME_LEN + 1); | ||
1600 | + OCFS2_CLUSTER_NAME_LEN); | ||
1601 | } else { | ||
1602 | /* The empty string is identical with classic tools that | ||
1603 | * don't know about s_cluster_info. */ | ||
1604 | diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h | ||
1605 | index b81f9e1d74b0a..9d249dfbab726 100644 | ||
1606 | --- a/include/linux/elfcore.h | ||
1607 | +++ b/include/linux/elfcore.h | ||
1608 | @@ -58,7 +58,7 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse | ||
1609 | } | ||
1610 | #endif | ||
1611 | |||
1612 | -#if defined(CONFIG_UM) || defined(CONFIG_IA64) | ||
1613 | +#if (defined(CONFIG_UML) && defined(CONFIG_X86_32)) || defined(CONFIG_IA64) | ||
1614 | /* | ||
1615 | * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out | ||
1616 | * extra segments containing the gate DSO contents. Dumping its | ||
1617 | diff --git a/kernel/auditsc.c b/kernel/auditsc.c | ||
1618 | index 4effe01ebbe2b..d33c5dccde1c7 100644 | ||
1619 | --- a/kernel/auditsc.c | ||
1620 | +++ b/kernel/auditsc.c | ||
1621 | @@ -624,7 +624,7 @@ static int audit_filter_rules(struct task_struct *tsk, | ||
1622 | result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val); | ||
1623 | break; | ||
1624 | case AUDIT_SADDR_FAM: | ||
1625 | - if (ctx->sockaddr) | ||
1626 | + if (ctx && ctx->sockaddr) | ||
1627 | result = audit_comparator(ctx->sockaddr->ss_family, | ||
1628 | f->op, f->val); | ||
1629 | break; | ||
1630 | diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c | ||
1631 | index 01e893cf9b9f7..b28665f4d8c7a 100644 | ||
1632 | --- a/kernel/dma/debug.c | ||
1633 | +++ b/kernel/dma/debug.c | ||
1634 | @@ -1354,6 +1354,12 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, | ||
1635 | if (unlikely(dma_debug_disabled())) | ||
1636 | return; | ||
1637 | |||
1638 | + for_each_sg(sg, s, nents, i) { | ||
1639 | + check_for_stack(dev, sg_page(s), s->offset); | ||
1640 | + if (!PageHighMem(sg_page(s))) | ||
1641 | + check_for_illegal_area(dev, sg_virt(s), s->length); | ||
1642 | + } | ||
1643 | + | ||
1644 | for_each_sg(sg, s, mapped_ents, i) { | ||
1645 | entry = dma_entry_alloc(); | ||
1646 | if (!entry) | ||
1647 | @@ -1369,12 +1375,6 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, | ||
1648 | entry->sg_call_ents = nents; | ||
1649 | entry->sg_mapped_ents = mapped_ents; | ||
1650 | |||
1651 | - check_for_stack(dev, sg_page(s), s->offset); | ||
1652 | - | ||
1653 | - if (!PageHighMem(sg_page(s))) { | ||
1654 | - check_for_illegal_area(dev, sg_virt(s), sg_dma_len(s)); | ||
1655 | - } | ||
1656 | - | ||
1657 | check_sg_segment(dev, s); | ||
1658 | |||
1659 | add_dma_entry(entry); | ||
1660 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
1661 | index 2b55016d5164b..efc338969b98b 100644 | ||
1662 | --- a/kernel/trace/ftrace.c | ||
1663 | +++ b/kernel/trace/ftrace.c | ||
1664 | @@ -6336,7 +6336,7 @@ __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, | ||
1665 | struct ftrace_ops *op; | ||
1666 | int bit; | ||
1667 | |||
1668 | - bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX); | ||
1669 | + bit = trace_test_and_set_recursion(TRACE_LIST_START); | ||
1670 | if (bit < 0) | ||
1671 | return; | ||
1672 | |||
1673 | @@ -6411,7 +6411,7 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip, | ||
1674 | { | ||
1675 | int bit; | ||
1676 | |||
1677 | - bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX); | ||
1678 | + bit = trace_test_and_set_recursion(TRACE_LIST_START); | ||
1679 | if (bit < 0) | ||
1680 | return; | ||
1681 | |||
1682 | diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h | ||
1683 | index fc3aa81a43e3c..35e9a01b54800 100644 | ||
1684 | --- a/kernel/trace/trace.h | ||
1685 | +++ b/kernel/trace/trace.h | ||
1686 | @@ -518,23 +518,8 @@ struct tracer { | ||
1687 | * When function tracing occurs, the following steps are made: | ||
1688 | * If arch does not support a ftrace feature: | ||
1689 | * call internal function (uses INTERNAL bits) which calls... | ||
1690 | - * If callback is registered to the "global" list, the list | ||
1691 | - * function is called and recursion checks the GLOBAL bits. | ||
1692 | - * then this function calls... | ||
1693 | * The function callback, which can use the FTRACE bits to | ||
1694 | * check for recursion. | ||
1695 | - * | ||
1696 | - * Now if the arch does not suppport a feature, and it calls | ||
1697 | - * the global list function which calls the ftrace callback | ||
1698 | - * all three of these steps will do a recursion protection. | ||
1699 | - * There's no reason to do one if the previous caller already | ||
1700 | - * did. The recursion that we are protecting against will | ||
1701 | - * go through the same steps again. | ||
1702 | - * | ||
1703 | - * To prevent the multiple recursion checks, if a recursion | ||
1704 | - * bit is set that is higher than the MAX bit of the current | ||
1705 | - * check, then we know that the check was made by the previous | ||
1706 | - * caller, and we can skip the current check. | ||
1707 | */ | ||
1708 | enum { | ||
1709 | TRACE_BUFFER_BIT, | ||
1710 | @@ -547,12 +532,14 @@ enum { | ||
1711 | TRACE_FTRACE_NMI_BIT, | ||
1712 | TRACE_FTRACE_IRQ_BIT, | ||
1713 | TRACE_FTRACE_SIRQ_BIT, | ||
1714 | + TRACE_FTRACE_TRANSITION_BIT, | ||
1715 | |||
1716 | - /* INTERNAL_BITs must be greater than FTRACE_BITs */ | ||
1717 | + /* Internal use recursion bits */ | ||
1718 | TRACE_INTERNAL_BIT, | ||
1719 | TRACE_INTERNAL_NMI_BIT, | ||
1720 | TRACE_INTERNAL_IRQ_BIT, | ||
1721 | TRACE_INTERNAL_SIRQ_BIT, | ||
1722 | + TRACE_INTERNAL_TRANSITION_BIT, | ||
1723 | |||
1724 | TRACE_BRANCH_BIT, | ||
1725 | /* | ||
1726 | @@ -592,12 +579,6 @@ enum { | ||
1727 | * function is called to clear it. | ||
1728 | */ | ||
1729 | TRACE_GRAPH_NOTRACE_BIT, | ||
1730 | - | ||
1731 | - /* | ||
1732 | - * When transitioning between context, the preempt_count() may | ||
1733 | - * not be correct. Allow for a single recursion to cover this case. | ||
1734 | - */ | ||
1735 | - TRACE_TRANSITION_BIT, | ||
1736 | }; | ||
1737 | |||
1738 | #define trace_recursion_set(bit) do { (current)->trace_recursion |= (1<<(bit)); } while (0) | ||
1739 | @@ -617,12 +598,18 @@ enum { | ||
1740 | #define TRACE_CONTEXT_BITS 4 | ||
1741 | |||
1742 | #define TRACE_FTRACE_START TRACE_FTRACE_BIT | ||
1743 | -#define TRACE_FTRACE_MAX ((1 << (TRACE_FTRACE_START + TRACE_CONTEXT_BITS)) - 1) | ||
1744 | |||
1745 | #define TRACE_LIST_START TRACE_INTERNAL_BIT | ||
1746 | -#define TRACE_LIST_MAX ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1) | ||
1747 | |||
1748 | -#define TRACE_CONTEXT_MASK TRACE_LIST_MAX | ||
1749 | +#define TRACE_CONTEXT_MASK ((1 << (TRACE_LIST_START + TRACE_CONTEXT_BITS)) - 1) | ||
1750 | + | ||
1751 | +enum { | ||
1752 | + TRACE_CTX_NMI, | ||
1753 | + TRACE_CTX_IRQ, | ||
1754 | + TRACE_CTX_SOFTIRQ, | ||
1755 | + TRACE_CTX_NORMAL, | ||
1756 | + TRACE_CTX_TRANSITION, | ||
1757 | +}; | ||
1758 | |||
1759 | static __always_inline int trace_get_context_bit(void) | ||
1760 | { | ||
1761 | @@ -630,59 +617,48 @@ static __always_inline int trace_get_context_bit(void) | ||
1762 | |||
1763 | if (in_interrupt()) { | ||
1764 | if (in_nmi()) | ||
1765 | - bit = 0; | ||
1766 | + bit = TRACE_CTX_NMI; | ||
1767 | |||
1768 | else if (in_irq()) | ||
1769 | - bit = 1; | ||
1770 | + bit = TRACE_CTX_IRQ; | ||
1771 | else | ||
1772 | - bit = 2; | ||
1773 | + bit = TRACE_CTX_SOFTIRQ; | ||
1774 | } else | ||
1775 | - bit = 3; | ||
1776 | + bit = TRACE_CTX_NORMAL; | ||
1777 | |||
1778 | return bit; | ||
1779 | } | ||
1780 | |||
1781 | -static __always_inline int trace_test_and_set_recursion(int start, int max) | ||
1782 | +static __always_inline int trace_test_and_set_recursion(int start) | ||
1783 | { | ||
1784 | unsigned int val = current->trace_recursion; | ||
1785 | int bit; | ||
1786 | |||
1787 | - /* A previous recursion check was made */ | ||
1788 | - if ((val & TRACE_CONTEXT_MASK) > max) | ||
1789 | - return 0; | ||
1790 | - | ||
1791 | bit = trace_get_context_bit() + start; | ||
1792 | if (unlikely(val & (1 << bit))) { | ||
1793 | /* | ||
1794 | * It could be that preempt_count has not been updated during | ||
1795 | * a switch between contexts. Allow for a single recursion. | ||
1796 | */ | ||
1797 | - bit = TRACE_TRANSITION_BIT; | ||
1798 | + bit = start + TRACE_CTX_TRANSITION; | ||
1799 | if (trace_recursion_test(bit)) | ||
1800 | return -1; | ||
1801 | trace_recursion_set(bit); | ||
1802 | barrier(); | ||
1803 | - return bit + 1; | ||
1804 | + return bit; | ||
1805 | } | ||
1806 | |||
1807 | - /* Normal check passed, clear the transition to allow it again */ | ||
1808 | - trace_recursion_clear(TRACE_TRANSITION_BIT); | ||
1809 | - | ||
1810 | val |= 1 << bit; | ||
1811 | current->trace_recursion = val; | ||
1812 | barrier(); | ||
1813 | |||
1814 | - return bit + 1; | ||
1815 | + return bit; | ||
1816 | } | ||
1817 | |||
1818 | static __always_inline void trace_clear_recursion(int bit) | ||
1819 | { | ||
1820 | unsigned int val = current->trace_recursion; | ||
1821 | |||
1822 | - if (!bit) | ||
1823 | - return; | ||
1824 | - | ||
1825 | - bit--; | ||
1826 | bit = 1 << bit; | ||
1827 | val &= ~bit; | ||
1828 | |||
1829 | diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c | ||
1830 | index b611cd36e22db..4e8acfe3437fd 100644 | ||
1831 | --- a/kernel/trace/trace_functions.c | ||
1832 | +++ b/kernel/trace/trace_functions.c | ||
1833 | @@ -138,7 +138,7 @@ function_trace_call(unsigned long ip, unsigned long parent_ip, | ||
1834 | pc = preempt_count(); | ||
1835 | preempt_disable_notrace(); | ||
1836 | |||
1837 | - bit = trace_test_and_set_recursion(TRACE_FTRACE_START, TRACE_FTRACE_MAX); | ||
1838 | + bit = trace_test_and_set_recursion(TRACE_FTRACE_START); | ||
1839 | if (bit < 0) | ||
1840 | goto out; | ||
1841 | |||
1842 | diff --git a/mm/slub.c b/mm/slub.c | ||
1843 | index ca7143fe25b56..63fe43c8d3323 100644 | ||
1844 | --- a/mm/slub.c | ||
1845 | +++ b/mm/slub.c | ||
1846 | @@ -1455,7 +1455,8 @@ static __always_inline bool slab_free_hook(struct kmem_cache *s, void *x) | ||
1847 | } | ||
1848 | |||
1849 | static inline bool slab_free_freelist_hook(struct kmem_cache *s, | ||
1850 | - void **head, void **tail) | ||
1851 | + void **head, void **tail, | ||
1852 | + int *cnt) | ||
1853 | { | ||
1854 | |||
1855 | void *object; | ||
1856 | @@ -1490,6 +1491,12 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s, | ||
1857 | *head = object; | ||
1858 | if (!*tail) | ||
1859 | *tail = object; | ||
1860 | + } else { | ||
1861 | + /* | ||
1862 | + * Adjust the reconstructed freelist depth | ||
1863 | + * accordingly if object's reuse is delayed. | ||
1864 | + */ | ||
1865 | + --(*cnt); | ||
1866 | } | ||
1867 | } while (object != old_tail); | ||
1868 | |||
1869 | @@ -3049,7 +3056,7 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page, | ||
1870 | * With KASAN enabled slab_free_freelist_hook modifies the freelist | ||
1871 | * to remove objects, whose reuse must be delayed. | ||
1872 | */ | ||
1873 | - if (slab_free_freelist_hook(s, &head, &tail)) | ||
1874 | + if (slab_free_freelist_hook(s, &head, &tail, &cnt)) | ||
1875 | do_slab_free(s, page, head, tail, cnt, addr); | ||
1876 | } | ||
1877 | |||
1878 | @@ -3727,8 +3734,8 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags) | ||
1879 | if (alloc_kmem_cache_cpus(s)) | ||
1880 | return 0; | ||
1881 | |||
1882 | - free_kmem_cache_nodes(s); | ||
1883 | error: | ||
1884 | + __kmem_cache_release(s); | ||
1885 | return -EINVAL; | ||
1886 | } | ||
1887 | |||
1888 | diff --git a/net/can/j1939/j1939-priv.h b/net/can/j1939/j1939-priv.h | ||
1889 | index 12369b604ce95..cea712fb2a9e0 100644 | ||
1890 | --- a/net/can/j1939/j1939-priv.h | ||
1891 | +++ b/net/can/j1939/j1939-priv.h | ||
1892 | @@ -326,6 +326,7 @@ int j1939_session_activate(struct j1939_session *session); | ||
1893 | void j1939_tp_schedule_txtimer(struct j1939_session *session, int msec); | ||
1894 | void j1939_session_timers_cancel(struct j1939_session *session); | ||
1895 | |||
1896 | +#define J1939_MIN_TP_PACKET_SIZE 9 | ||
1897 | #define J1939_MAX_TP_PACKET_SIZE (7 * 0xff) | ||
1898 | #define J1939_MAX_ETP_PACKET_SIZE (7 * 0x00ffffff) | ||
1899 | |||
1900 | diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c | ||
1901 | index 6884d18f919c7..266c189f1e809 100644 | ||
1902 | --- a/net/can/j1939/main.c | ||
1903 | +++ b/net/can/j1939/main.c | ||
1904 | @@ -249,11 +249,14 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev) | ||
1905 | struct j1939_priv *priv, *priv_new; | ||
1906 | int ret; | ||
1907 | |||
1908 | - priv = j1939_priv_get_by_ndev(ndev); | ||
1909 | + spin_lock(&j1939_netdev_lock); | ||
1910 | + priv = j1939_priv_get_by_ndev_locked(ndev); | ||
1911 | if (priv) { | ||
1912 | kref_get(&priv->rx_kref); | ||
1913 | + spin_unlock(&j1939_netdev_lock); | ||
1914 | return priv; | ||
1915 | } | ||
1916 | + spin_unlock(&j1939_netdev_lock); | ||
1917 | |||
1918 | priv = j1939_priv_create(ndev); | ||
1919 | if (!priv) | ||
1920 | @@ -269,10 +272,10 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev) | ||
1921 | /* Someone was faster than us, use their priv and roll | ||
1922 | * back our's. | ||
1923 | */ | ||
1924 | + kref_get(&priv_new->rx_kref); | ||
1925 | spin_unlock(&j1939_netdev_lock); | ||
1926 | dev_put(ndev); | ||
1927 | kfree(priv); | ||
1928 | - kref_get(&priv_new->rx_kref); | ||
1929 | return priv_new; | ||
1930 | } | ||
1931 | j1939_priv_set(ndev, priv); | ||
1932 | diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c | ||
1933 | index 6571895228f01..7a54170da09df 100644 | ||
1934 | --- a/net/can/j1939/transport.c | ||
1935 | +++ b/net/can/j1939/transport.c | ||
1936 | @@ -1230,12 +1230,11 @@ static enum hrtimer_restart j1939_tp_rxtimer(struct hrtimer *hrtimer) | ||
1937 | session->err = -ETIME; | ||
1938 | j1939_session_deactivate(session); | ||
1939 | } else { | ||
1940 | - netdev_alert(priv->ndev, "%s: 0x%p: rx timeout, send abort\n", | ||
1941 | - __func__, session); | ||
1942 | - | ||
1943 | j1939_session_list_lock(session->priv); | ||
1944 | if (session->state >= J1939_SESSION_ACTIVE && | ||
1945 | session->state < J1939_SESSION_ACTIVE_MAX) { | ||
1946 | + netdev_alert(priv->ndev, "%s: 0x%p: rx timeout, send abort\n", | ||
1947 | + __func__, session); | ||
1948 | j1939_session_get(session); | ||
1949 | hrtimer_start(&session->rxtimer, | ||
1950 | ms_to_ktime(J1939_XTP_ABORT_TIMEOUT_MS), | ||
1951 | @@ -1597,6 +1596,8 @@ j1939_session *j1939_xtp_rx_rts_session_new(struct j1939_priv *priv, | ||
1952 | abort = J1939_XTP_ABORT_FAULT; | ||
1953 | else if (len > priv->tp_max_packet_size) | ||
1954 | abort = J1939_XTP_ABORT_RESOURCE; | ||
1955 | + else if (len < J1939_MIN_TP_PACKET_SIZE) | ||
1956 | + abort = J1939_XTP_ABORT_FAULT; | ||
1957 | } | ||
1958 | |||
1959 | if (abort != J1939_XTP_NO_ABORT) { | ||
1960 | @@ -1771,6 +1772,7 @@ static void j1939_xtp_rx_dpo(struct j1939_priv *priv, struct sk_buff *skb, | ||
1961 | static void j1939_xtp_rx_dat_one(struct j1939_session *session, | ||
1962 | struct sk_buff *skb) | ||
1963 | { | ||
1964 | + enum j1939_xtp_abort abort = J1939_XTP_ABORT_FAULT; | ||
1965 | struct j1939_priv *priv = session->priv; | ||
1966 | struct j1939_sk_buff_cb *skcb; | ||
1967 | struct sk_buff *se_skb = NULL; | ||
1968 | @@ -1785,9 +1787,11 @@ static void j1939_xtp_rx_dat_one(struct j1939_session *session, | ||
1969 | |||
1970 | skcb = j1939_skb_to_cb(skb); | ||
1971 | dat = skb->data; | ||
1972 | - if (skb->len <= 1) | ||
1973 | + if (skb->len != 8) { | ||
1974 | /* makes no sense */ | ||
1975 | + abort = J1939_XTP_ABORT_UNEXPECTED_DATA; | ||
1976 | goto out_session_cancel; | ||
1977 | + } | ||
1978 | |||
1979 | switch (session->last_cmd) { | ||
1980 | case 0xff: | ||
1981 | @@ -1885,7 +1889,7 @@ static void j1939_xtp_rx_dat_one(struct j1939_session *session, | ||
1982 | out_session_cancel: | ||
1983 | kfree_skb(se_skb); | ||
1984 | j1939_session_timers_cancel(session); | ||
1985 | - j1939_session_cancel(session, J1939_XTP_ABORT_FAULT); | ||
1986 | + j1939_session_cancel(session, abort); | ||
1987 | j1939_session_put(session); | ||
1988 | } | ||
1989 | |||
1990 | diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig | ||
1991 | index 91efae88e8c2a..ef72819d9d315 100644 | ||
1992 | --- a/net/netfilter/Kconfig | ||
1993 | +++ b/net/netfilter/Kconfig | ||
1994 | @@ -94,7 +94,7 @@ config NF_CONNTRACK_MARK | ||
1995 | config NF_CONNTRACK_SECMARK | ||
1996 | bool 'Connection tracking security mark support' | ||
1997 | depends on NETWORK_SECMARK | ||
1998 | - default m if NETFILTER_ADVANCED=n | ||
1999 | + default y if NETFILTER_ADVANCED=n | ||
2000 | help | ||
2001 | This option enables security markings to be applied to | ||
2002 | connections. Typically they are copied to connections from | ||
2003 | diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c | ||
2004 | index f93fa0e210979..07242503d74d3 100644 | ||
2005 | --- a/net/netfilter/ipvs/ip_vs_ctl.c | ||
2006 | +++ b/net/netfilter/ipvs/ip_vs_ctl.c | ||
2007 | @@ -4047,6 +4047,11 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs) | ||
2008 | tbl[idx++].data = &ipvs->sysctl_conn_reuse_mode; | ||
2009 | tbl[idx++].data = &ipvs->sysctl_schedule_icmp; | ||
2010 | tbl[idx++].data = &ipvs->sysctl_ignore_tunneled; | ||
2011 | +#ifdef CONFIG_IP_VS_DEBUG | ||
2012 | + /* Global sysctls must be ro in non-init netns */ | ||
2013 | + if (!net_eq(net, &init_net)) | ||
2014 | + tbl[idx++].mode = 0444; | ||
2015 | +#endif | ||
2016 | |||
2017 | ipvs->sysctl_hdr = register_net_sysctl(net, "net/ipv4/vs", tbl); | ||
2018 | if (ipvs->sysctl_hdr == NULL) { | ||
2019 | diff --git a/net/nfc/nci/rsp.c b/net/nfc/nci/rsp.c | ||
2020 | index a48297b79f34f..b0ed2b47ac437 100644 | ||
2021 | --- a/net/nfc/nci/rsp.c | ||
2022 | +++ b/net/nfc/nci/rsp.c | ||
2023 | @@ -277,6 +277,8 @@ static void nci_core_conn_close_rsp_packet(struct nci_dev *ndev, | ||
2024 | ndev->cur_conn_id); | ||
2025 | if (conn_info) { | ||
2026 | list_del(&conn_info->list); | ||
2027 | + if (conn_info == ndev->rf_conn_info) | ||
2028 | + ndev->rf_conn_info = NULL; | ||
2029 | devm_kfree(&ndev->nfc_dev->dev, conn_info); | ||
2030 | } | ||
2031 | } | ||
2032 | diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c | ||
2033 | index ea9ddea35a886..96773555af5ca 100644 | ||
2034 | --- a/net/switchdev/switchdev.c | ||
2035 | +++ b/net/switchdev/switchdev.c | ||
2036 | @@ -476,6 +476,9 @@ static int __switchdev_handle_port_obj_add(struct net_device *dev, | ||
2037 | * necessary to go through this helper. | ||
2038 | */ | ||
2039 | netdev_for_each_lower_dev(dev, lower_dev, iter) { | ||
2040 | + if (netif_is_bridge_master(lower_dev)) | ||
2041 | + continue; | ||
2042 | + | ||
2043 | err = __switchdev_handle_port_obj_add(lower_dev, port_obj_info, | ||
2044 | check_cb, add_cb); | ||
2045 | if (err && err != -EOPNOTSUPP) | ||
2046 | @@ -528,6 +531,9 @@ static int __switchdev_handle_port_obj_del(struct net_device *dev, | ||
2047 | * necessary to go through this helper. | ||
2048 | */ | ||
2049 | netdev_for_each_lower_dev(dev, lower_dev, iter) { | ||
2050 | + if (netif_is_bridge_master(lower_dev)) | ||
2051 | + continue; | ||
2052 | + | ||
2053 | err = __switchdev_handle_port_obj_del(lower_dev, port_obj_info, | ||
2054 | check_cb, del_cb); | ||
2055 | if (err && err != -EOPNOTSUPP) | ||
2056 | @@ -579,6 +585,9 @@ static int __switchdev_handle_port_attr_set(struct net_device *dev, | ||
2057 | * necessary to go through this helper. | ||
2058 | */ | ||
2059 | netdev_for_each_lower_dev(dev, lower_dev, iter) { | ||
2060 | + if (netif_is_bridge_master(lower_dev)) | ||
2061 | + continue; | ||
2062 | + | ||
2063 | err = __switchdev_handle_port_attr_set(lower_dev, port_attr_info, | ||
2064 | check_cb, set_cb); | ||
2065 | if (err && err != -EOPNOTSUPP) | ||
2066 | diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins | ||
2067 | index 5f7df50cfe7aa..63d21489216b0 100644 | ||
2068 | --- a/scripts/Makefile.gcc-plugins | ||
2069 | +++ b/scripts/Makefile.gcc-plugins | ||
2070 | @@ -19,6 +19,10 @@ gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF) \ | ||
2071 | += -fplugin-arg-structleak_plugin-byref | ||
2072 | gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL) \ | ||
2073 | += -fplugin-arg-structleak_plugin-byref-all | ||
2074 | +ifdef CONFIG_GCC_PLUGIN_STRUCTLEAK | ||
2075 | + DISABLE_STRUCTLEAK_PLUGIN += -fplugin-arg-structleak_plugin-disable | ||
2076 | +endif | ||
2077 | +export DISABLE_STRUCTLEAK_PLUGIN | ||
2078 | gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STRUCTLEAK) \ | ||
2079 | += -DSTRUCTLEAK_PLUGIN | ||
2080 | |||
2081 | diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c | ||
2082 | index 7e7be8e4dcf9c..87ba66dcfd478 100644 | ||
2083 | --- a/sound/hda/hdac_controller.c | ||
2084 | +++ b/sound/hda/hdac_controller.c | ||
2085 | @@ -395,8 +395,9 @@ int snd_hdac_bus_reset_link(struct hdac_bus *bus, bool full_reset) | ||
2086 | if (!full_reset) | ||
2087 | goto skip_reset; | ||
2088 | |||
2089 | - /* clear STATESTS */ | ||
2090 | - snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); | ||
2091 | + /* clear STATESTS if not in reset */ | ||
2092 | + if (snd_hdac_chip_readb(bus, GCTL) & AZX_GCTL_RESET) | ||
2093 | + snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); | ||
2094 | |||
2095 | /* reset controller */ | ||
2096 | snd_hdac_bus_enter_link_reset(bus); | ||
2097 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
2098 | index c4837c78a8624..49aefb7875e72 100644 | ||
2099 | --- a/sound/pci/hda/patch_realtek.c | ||
2100 | +++ b/sound/pci/hda/patch_realtek.c | ||
2101 | @@ -2537,6 +2537,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | ||
2102 | SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2103 | SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2104 | SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2105 | + SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2106 | SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2107 | SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2108 | SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
2109 | diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c | ||
2110 | index 708fc4ed54eda..512f8899dcbbd 100644 | ||
2111 | --- a/sound/soc/codecs/wm8960.c | ||
2112 | +++ b/sound/soc/codecs/wm8960.c | ||
2113 | @@ -752,9 +752,16 @@ static int wm8960_configure_clocking(struct snd_soc_component *component) | ||
2114 | int i, j, k; | ||
2115 | int ret; | ||
2116 | |||
2117 | - if (!(iface1 & (1<<6))) { | ||
2118 | - dev_dbg(component->dev, | ||
2119 | - "Codec is slave mode, no need to configure clock\n"); | ||
2120 | + /* | ||
2121 | + * For Slave mode clocking should still be configured, | ||
2122 | + * so this if statement should be removed, but some platform | ||
2123 | + * may not work if the sysclk is not configured, to avoid such | ||
2124 | + * compatible issue, just add '!wm8960->sysclk' condition in | ||
2125 | + * this if statement. | ||
2126 | + */ | ||
2127 | + if (!(iface1 & (1 << 6)) && !wm8960->sysclk) { | ||
2128 | + dev_warn(component->dev, | ||
2129 | + "slave mode, but proceeding with no clock configuration\n"); | ||
2130 | return 0; | ||
2131 | } | ||
2132 | |||
2133 | diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c | ||
2134 | index 7c4d5963692dd..66f6b698a5436 100644 | ||
2135 | --- a/sound/soc/soc-dapm.c | ||
2136 | +++ b/sound/soc/soc-dapm.c | ||
2137 | @@ -2546,6 +2546,7 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, | ||
2138 | const char *pin, int status) | ||
2139 | { | ||
2140 | struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true); | ||
2141 | + int ret = 0; | ||
2142 | |||
2143 | dapm_assert_locked(dapm); | ||
2144 | |||
2145 | @@ -2558,13 +2559,14 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, | ||
2146 | dapm_mark_dirty(w, "pin configuration"); | ||
2147 | dapm_widget_invalidate_input_paths(w); | ||
2148 | dapm_widget_invalidate_output_paths(w); | ||
2149 | + ret = 1; | ||
2150 | } | ||
2151 | |||
2152 | w->connected = status; | ||
2153 | if (status == 0) | ||
2154 | w->force = 0; | ||
2155 | |||
2156 | - return 0; | ||
2157 | + return ret; | ||
2158 | } | ||
2159 | |||
2160 | /** | ||
2161 | @@ -3580,14 +3582,15 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, | ||
2162 | { | ||
2163 | struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); | ||
2164 | const char *pin = (const char *)kcontrol->private_value; | ||
2165 | + int ret; | ||
2166 | |||
2167 | if (ucontrol->value.integer.value[0]) | ||
2168 | - snd_soc_dapm_enable_pin(&card->dapm, pin); | ||
2169 | + ret = snd_soc_dapm_enable_pin(&card->dapm, pin); | ||
2170 | else | ||
2171 | - snd_soc_dapm_disable_pin(&card->dapm, pin); | ||
2172 | + ret = snd_soc_dapm_disable_pin(&card->dapm, pin); | ||
2173 | |||
2174 | snd_soc_dapm_sync(&card->dapm); | ||
2175 | - return 0; | ||
2176 | + return ret; | ||
2177 | } | ||
2178 | EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch); | ||
2179 | |||
2180 | @@ -4029,7 +4032,7 @@ static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol, | ||
2181 | |||
2182 | rtd->params_select = ucontrol->value.enumerated.item[0]; | ||
2183 | |||
2184 | - return 0; | ||
2185 | + return 1; | ||
2186 | } | ||
2187 | |||
2188 | static void | ||
2189 | diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h | ||
2190 | index 9620ae0003ce4..01dee2074ab36 100644 | ||
2191 | --- a/sound/usb/quirks-table.h | ||
2192 | +++ b/sound/usb/quirks-table.h | ||
2193 | @@ -3806,5 +3806,37 @@ ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */ | ||
2194 | } | ||
2195 | } | ||
2196 | }, | ||
2197 | +{ | ||
2198 | + /* | ||
2199 | + * Sennheiser GSP670 | ||
2200 | + * Change order of interfaces loaded | ||
2201 | + */ | ||
2202 | + USB_DEVICE(0x1395, 0x0300), | ||
2203 | + .bInterfaceClass = USB_CLASS_PER_INTERFACE, | ||
2204 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2205 | + .ifnum = QUIRK_ANY_INTERFACE, | ||
2206 | + .type = QUIRK_COMPOSITE, | ||
2207 | + .data = &(const struct snd_usb_audio_quirk[]) { | ||
2208 | + // Communication | ||
2209 | + { | ||
2210 | + .ifnum = 3, | ||
2211 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
2212 | + }, | ||
2213 | + // Recording | ||
2214 | + { | ||
2215 | + .ifnum = 4, | ||
2216 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
2217 | + }, | ||
2218 | + // Main | ||
2219 | + { | ||
2220 | + .ifnum = 1, | ||
2221 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
2222 | + }, | ||
2223 | + { | ||
2224 | + .ifnum = -1 | ||
2225 | + } | ||
2226 | + } | ||
2227 | + } | ||
2228 | +}, | ||
2229 | |||
2230 | #undef USB_DEVICE_VENDOR_SPEC | ||
2231 | diff --git a/tools/testing/selftests/netfilter/nft_flowtable.sh b/tools/testing/selftests/netfilter/nft_flowtable.sh | ||
2232 | index 16571ac1dab40..1ccb12fe2511a 100755 | ||
2233 | --- a/tools/testing/selftests/netfilter/nft_flowtable.sh | ||
2234 | +++ b/tools/testing/selftests/netfilter/nft_flowtable.sh | ||
2235 | @@ -174,7 +174,6 @@ fi | ||
2236 | ip netns exec ns1 ping -c 1 -q 10.0.2.99 > /dev/null | ||
2237 | if [ $? -ne 0 ];then | ||
2238 | echo "ERROR: ns1 cannot reach ns2" 1>&2 | ||
2239 | - bash | ||
2240 | exit 1 | ||
2241 | fi | ||
2242 |