Contents of /trunk/kernel-alx-legacy/patches-4.9/0236-4.9.137-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(show annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 131762 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 131762 byte(s)
-added kerenl-alx-legacy pkg
1 | diff --git a/Makefile b/Makefile |
2 | index 79b8f3a44f74..41fe3014b712 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 136 |
9 | +SUBLEVEL = 137 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/arm/boot/dts/exynos3250.dtsi b/arch/arm/boot/dts/exynos3250.dtsi |
14 | index e9d2556c0dfd..2a531beef4c7 100644 |
15 | --- a/arch/arm/boot/dts/exynos3250.dtsi |
16 | +++ b/arch/arm/boot/dts/exynos3250.dtsi |
17 | @@ -80,6 +80,22 @@ |
18 | compatible = "arm,cortex-a7"; |
19 | reg = <1>; |
20 | clock-frequency = <1000000000>; |
21 | + clocks = <&cmu CLK_ARM_CLK>; |
22 | + clock-names = "cpu"; |
23 | + #cooling-cells = <2>; |
24 | + |
25 | + operating-points = < |
26 | + 1000000 1150000 |
27 | + 900000 1112500 |
28 | + 800000 1075000 |
29 | + 700000 1037500 |
30 | + 600000 1000000 |
31 | + 500000 962500 |
32 | + 400000 925000 |
33 | + 300000 887500 |
34 | + 200000 850000 |
35 | + 100000 850000 |
36 | + >; |
37 | }; |
38 | }; |
39 | |
40 | diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi |
41 | index 2d9b02967105..b0c550e56fdb 100644 |
42 | --- a/arch/arm/boot/dts/exynos4210.dtsi |
43 | +++ b/arch/arm/boot/dts/exynos4210.dtsi |
44 | @@ -52,8 +52,6 @@ |
45 | 400000 975000 |
46 | 200000 950000 |
47 | >; |
48 | - cooling-min-level = <4>; |
49 | - cooling-max-level = <2>; |
50 | #cooling-cells = <2>; /* min followed by max */ |
51 | }; |
52 | |
53 | @@ -61,6 +59,19 @@ |
54 | device_type = "cpu"; |
55 | compatible = "arm,cortex-a9"; |
56 | reg = <0x901>; |
57 | + clocks = <&clock CLK_ARM_CLK>; |
58 | + clock-names = "cpu"; |
59 | + clock-latency = <160000>; |
60 | + |
61 | + operating-points = < |
62 | + 1200000 1250000 |
63 | + 1000000 1150000 |
64 | + 800000 1075000 |
65 | + 500000 975000 |
66 | + 400000 975000 |
67 | + 200000 950000 |
68 | + >; |
69 | + #cooling-cells = <2>; /* min followed by max */ |
70 | }; |
71 | }; |
72 | |
73 | diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi |
74 | index 3ebdf01d814c..63b1c5a2cecf 100644 |
75 | --- a/arch/arm/boot/dts/exynos4412.dtsi |
76 | +++ b/arch/arm/boot/dts/exynos4412.dtsi |
77 | @@ -33,8 +33,6 @@ |
78 | clocks = <&clock CLK_ARM_CLK>; |
79 | clock-names = "cpu"; |
80 | operating-points-v2 = <&cpu0_opp_table>; |
81 | - cooling-min-level = <13>; |
82 | - cooling-max-level = <7>; |
83 | #cooling-cells = <2>; /* min followed by max */ |
84 | }; |
85 | |
86 | diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi |
87 | index 64de33d067c9..ecc73f26eac5 100644 |
88 | --- a/arch/arm/boot/dts/exynos5250.dtsi |
89 | +++ b/arch/arm/boot/dts/exynos5250.dtsi |
90 | @@ -57,38 +57,106 @@ |
91 | device_type = "cpu"; |
92 | compatible = "arm,cortex-a15"; |
93 | reg = <0>; |
94 | - clock-frequency = <1700000000>; |
95 | clocks = <&clock CLK_ARM_CLK>; |
96 | clock-names = "cpu"; |
97 | - clock-latency = <140000>; |
98 | - |
99 | - operating-points = < |
100 | - 1700000 1300000 |
101 | - 1600000 1250000 |
102 | - 1500000 1225000 |
103 | - 1400000 1200000 |
104 | - 1300000 1150000 |
105 | - 1200000 1125000 |
106 | - 1100000 1100000 |
107 | - 1000000 1075000 |
108 | - 900000 1050000 |
109 | - 800000 1025000 |
110 | - 700000 1012500 |
111 | - 600000 1000000 |
112 | - 500000 975000 |
113 | - 400000 950000 |
114 | - 300000 937500 |
115 | - 200000 925000 |
116 | - >; |
117 | - cooling-min-level = <15>; |
118 | - cooling-max-level = <9>; |
119 | + operating-points-v2 = <&cpu0_opp_table>; |
120 | #cooling-cells = <2>; /* min followed by max */ |
121 | }; |
122 | cpu@1 { |
123 | device_type = "cpu"; |
124 | compatible = "arm,cortex-a15"; |
125 | reg = <1>; |
126 | - clock-frequency = <1700000000>; |
127 | + clocks = <&clock CLK_ARM_CLK>; |
128 | + clock-names = "cpu"; |
129 | + operating-points-v2 = <&cpu0_opp_table>; |
130 | + #cooling-cells = <2>; /* min followed by max */ |
131 | + }; |
132 | + }; |
133 | + |
134 | + cpu0_opp_table: opp_table0 { |
135 | + compatible = "operating-points-v2"; |
136 | + opp-shared; |
137 | + |
138 | + opp-200000000 { |
139 | + opp-hz = /bits/ 64 <200000000>; |
140 | + opp-microvolt = <925000>; |
141 | + clock-latency-ns = <140000>; |
142 | + }; |
143 | + opp-300000000 { |
144 | + opp-hz = /bits/ 64 <300000000>; |
145 | + opp-microvolt = <937500>; |
146 | + clock-latency-ns = <140000>; |
147 | + }; |
148 | + opp-400000000 { |
149 | + opp-hz = /bits/ 64 <400000000>; |
150 | + opp-microvolt = <950000>; |
151 | + clock-latency-ns = <140000>; |
152 | + }; |
153 | + opp-500000000 { |
154 | + opp-hz = /bits/ 64 <500000000>; |
155 | + opp-microvolt = <975000>; |
156 | + clock-latency-ns = <140000>; |
157 | + }; |
158 | + opp-600000000 { |
159 | + opp-hz = /bits/ 64 <600000000>; |
160 | + opp-microvolt = <1000000>; |
161 | + clock-latency-ns = <140000>; |
162 | + }; |
163 | + opp-700000000 { |
164 | + opp-hz = /bits/ 64 <700000000>; |
165 | + opp-microvolt = <1012500>; |
166 | + clock-latency-ns = <140000>; |
167 | + }; |
168 | + opp-800000000 { |
169 | + opp-hz = /bits/ 64 <800000000>; |
170 | + opp-microvolt = <1025000>; |
171 | + clock-latency-ns = <140000>; |
172 | + }; |
173 | + opp-900000000 { |
174 | + opp-hz = /bits/ 64 <900000000>; |
175 | + opp-microvolt = <1050000>; |
176 | + clock-latency-ns = <140000>; |
177 | + }; |
178 | + opp-1000000000 { |
179 | + opp-hz = /bits/ 64 <1000000000>; |
180 | + opp-microvolt = <1075000>; |
181 | + clock-latency-ns = <140000>; |
182 | + opp-suspend; |
183 | + }; |
184 | + opp-1100000000 { |
185 | + opp-hz = /bits/ 64 <1100000000>; |
186 | + opp-microvolt = <1100000>; |
187 | + clock-latency-ns = <140000>; |
188 | + }; |
189 | + opp-1200000000 { |
190 | + opp-hz = /bits/ 64 <1200000000>; |
191 | + opp-microvolt = <1125000>; |
192 | + clock-latency-ns = <140000>; |
193 | + }; |
194 | + opp-1300000000 { |
195 | + opp-hz = /bits/ 64 <1300000000>; |
196 | + opp-microvolt = <1150000>; |
197 | + clock-latency-ns = <140000>; |
198 | + }; |
199 | + opp-1400000000 { |
200 | + opp-hz = /bits/ 64 <1400000000>; |
201 | + opp-microvolt = <1200000>; |
202 | + clock-latency-ns = <140000>; |
203 | + }; |
204 | + opp-1500000000 { |
205 | + opp-hz = /bits/ 64 <1500000000>; |
206 | + opp-microvolt = <1225000>; |
207 | + clock-latency-ns = <140000>; |
208 | + }; |
209 | + opp-1600000000 { |
210 | + opp-hz = /bits/ 64 <1600000000>; |
211 | + opp-microvolt = <1250000>; |
212 | + clock-latency-ns = <140000>; |
213 | + }; |
214 | + opp-1700000000 { |
215 | + opp-hz = /bits/ 64 <1700000000>; |
216 | + opp-microvolt = <1300000>; |
217 | + clock-latency-ns = <140000>; |
218 | }; |
219 | }; |
220 | |
221 | diff --git a/arch/arm/boot/dts/exynos5420-cpus.dtsi b/arch/arm/boot/dts/exynos5420-cpus.dtsi |
222 | index 5c052d7ff554..7e6b55561b1d 100644 |
223 | --- a/arch/arm/boot/dts/exynos5420-cpus.dtsi |
224 | +++ b/arch/arm/boot/dts/exynos5420-cpus.dtsi |
225 | @@ -33,8 +33,6 @@ |
226 | clock-frequency = <1800000000>; |
227 | cci-control-port = <&cci_control1>; |
228 | operating-points-v2 = <&cluster_a15_opp_table>; |
229 | - cooling-min-level = <0>; |
230 | - cooling-max-level = <11>; |
231 | #cooling-cells = <2>; /* min followed by max */ |
232 | }; |
233 | |
234 | @@ -45,8 +43,6 @@ |
235 | clock-frequency = <1800000000>; |
236 | cci-control-port = <&cci_control1>; |
237 | operating-points-v2 = <&cluster_a15_opp_table>; |
238 | - cooling-min-level = <0>; |
239 | - cooling-max-level = <11>; |
240 | #cooling-cells = <2>; /* min followed by max */ |
241 | }; |
242 | |
243 | @@ -57,8 +53,6 @@ |
244 | clock-frequency = <1800000000>; |
245 | cci-control-port = <&cci_control1>; |
246 | operating-points-v2 = <&cluster_a15_opp_table>; |
247 | - cooling-min-level = <0>; |
248 | - cooling-max-level = <11>; |
249 | #cooling-cells = <2>; /* min followed by max */ |
250 | }; |
251 | |
252 | @@ -69,8 +63,6 @@ |
253 | clock-frequency = <1800000000>; |
254 | cci-control-port = <&cci_control1>; |
255 | operating-points-v2 = <&cluster_a15_opp_table>; |
256 | - cooling-min-level = <0>; |
257 | - cooling-max-level = <11>; |
258 | #cooling-cells = <2>; /* min followed by max */ |
259 | }; |
260 | |
261 | @@ -82,8 +74,6 @@ |
262 | clock-frequency = <1000000000>; |
263 | cci-control-port = <&cci_control0>; |
264 | operating-points-v2 = <&cluster_a7_opp_table>; |
265 | - cooling-min-level = <0>; |
266 | - cooling-max-level = <7>; |
267 | #cooling-cells = <2>; /* min followed by max */ |
268 | }; |
269 | |
270 | @@ -94,8 +84,6 @@ |
271 | clock-frequency = <1000000000>; |
272 | cci-control-port = <&cci_control0>; |
273 | operating-points-v2 = <&cluster_a7_opp_table>; |
274 | - cooling-min-level = <0>; |
275 | - cooling-max-level = <7>; |
276 | #cooling-cells = <2>; /* min followed by max */ |
277 | }; |
278 | |
279 | @@ -106,8 +94,6 @@ |
280 | clock-frequency = <1000000000>; |
281 | cci-control-port = <&cci_control0>; |
282 | operating-points-v2 = <&cluster_a7_opp_table>; |
283 | - cooling-min-level = <0>; |
284 | - cooling-max-level = <7>; |
285 | #cooling-cells = <2>; /* min followed by max */ |
286 | }; |
287 | |
288 | @@ -118,8 +104,6 @@ |
289 | clock-frequency = <1000000000>; |
290 | cci-control-port = <&cci_control0>; |
291 | operating-points-v2 = <&cluster_a7_opp_table>; |
292 | - cooling-min-level = <0>; |
293 | - cooling-max-level = <7>; |
294 | #cooling-cells = <2>; /* min followed by max */ |
295 | }; |
296 | }; |
297 | diff --git a/arch/arm/boot/dts/exynos5422-cpus.dtsi b/arch/arm/boot/dts/exynos5422-cpus.dtsi |
298 | index bf3c6f1ec4ee..c8afdf821a77 100644 |
299 | --- a/arch/arm/boot/dts/exynos5422-cpus.dtsi |
300 | +++ b/arch/arm/boot/dts/exynos5422-cpus.dtsi |
301 | @@ -32,8 +32,6 @@ |
302 | clock-frequency = <1000000000>; |
303 | cci-control-port = <&cci_control0>; |
304 | operating-points-v2 = <&cluster_a7_opp_table>; |
305 | - cooling-min-level = <0>; |
306 | - cooling-max-level = <11>; |
307 | #cooling-cells = <2>; /* min followed by max */ |
308 | }; |
309 | |
310 | @@ -44,8 +42,6 @@ |
311 | clock-frequency = <1000000000>; |
312 | cci-control-port = <&cci_control0>; |
313 | operating-points-v2 = <&cluster_a7_opp_table>; |
314 | - cooling-min-level = <0>; |
315 | - cooling-max-level = <11>; |
316 | #cooling-cells = <2>; /* min followed by max */ |
317 | }; |
318 | |
319 | @@ -56,8 +52,6 @@ |
320 | clock-frequency = <1000000000>; |
321 | cci-control-port = <&cci_control0>; |
322 | operating-points-v2 = <&cluster_a7_opp_table>; |
323 | - cooling-min-level = <0>; |
324 | - cooling-max-level = <11>; |
325 | #cooling-cells = <2>; /* min followed by max */ |
326 | }; |
327 | |
328 | @@ -68,8 +62,6 @@ |
329 | clock-frequency = <1000000000>; |
330 | cci-control-port = <&cci_control0>; |
331 | operating-points-v2 = <&cluster_a7_opp_table>; |
332 | - cooling-min-level = <0>; |
333 | - cooling-max-level = <11>; |
334 | #cooling-cells = <2>; /* min followed by max */ |
335 | }; |
336 | |
337 | @@ -81,8 +73,6 @@ |
338 | clock-frequency = <1800000000>; |
339 | cci-control-port = <&cci_control1>; |
340 | operating-points-v2 = <&cluster_a15_opp_table>; |
341 | - cooling-min-level = <0>; |
342 | - cooling-max-level = <15>; |
343 | #cooling-cells = <2>; /* min followed by max */ |
344 | }; |
345 | |
346 | @@ -93,8 +83,6 @@ |
347 | clock-frequency = <1800000000>; |
348 | cci-control-port = <&cci_control1>; |
349 | operating-points-v2 = <&cluster_a15_opp_table>; |
350 | - cooling-min-level = <0>; |
351 | - cooling-max-level = <15>; |
352 | #cooling-cells = <2>; /* min followed by max */ |
353 | }; |
354 | |
355 | @@ -105,8 +93,6 @@ |
356 | clock-frequency = <1800000000>; |
357 | cci-control-port = <&cci_control1>; |
358 | operating-points-v2 = <&cluster_a15_opp_table>; |
359 | - cooling-min-level = <0>; |
360 | - cooling-max-level = <15>; |
361 | #cooling-cells = <2>; /* min followed by max */ |
362 | }; |
363 | |
364 | @@ -117,8 +103,6 @@ |
365 | clock-frequency = <1800000000>; |
366 | cci-control-port = <&cci_control1>; |
367 | operating-points-v2 = <&cluster_a15_opp_table>; |
368 | - cooling-min-level = <0>; |
369 | - cooling-max-level = <15>; |
370 | #cooling-cells = <2>; /* min followed by max */ |
371 | }; |
372 | }; |
373 | diff --git a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi |
374 | index c2b9bcb0ef61..e79f3defe002 100644 |
375 | --- a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi |
376 | +++ b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi |
377 | @@ -249,7 +249,7 @@ |
378 | |
379 | sysmgr: sysmgr@ffd12000 { |
380 | compatible = "altr,sys-mgr", "syscon"; |
381 | - reg = <0xffd12000 0x1000>; |
382 | + reg = <0xffd12000 0x228>; |
383 | }; |
384 | |
385 | /* Local timer */ |
386 | diff --git a/arch/arm64/lib/Makefile b/arch/arm64/lib/Makefile |
387 | index c86b7909ef31..2f7c60c8e588 100644 |
388 | --- a/arch/arm64/lib/Makefile |
389 | +++ b/arch/arm64/lib/Makefile |
390 | @@ -11,7 +11,7 @@ lib-y := bitops.o clear_user.o delay.o copy_from_user.o \ |
391 | # when supported by the CPU. Result and argument registers are handled |
392 | # correctly, based on the function prototype. |
393 | lib-$(CONFIG_ARM64_LSE_ATOMICS) += atomic_ll_sc.o |
394 | -CFLAGS_atomic_ll_sc.o := -fcall-used-x0 -ffixed-x1 -ffixed-x2 \ |
395 | +CFLAGS_atomic_ll_sc.o := -ffixed-x1 -ffixed-x2 \ |
396 | -ffixed-x3 -ffixed-x4 -ffixed-x5 -ffixed-x6 \ |
397 | -ffixed-x7 -fcall-saved-x8 -fcall-saved-x9 \ |
398 | -fcall-saved-x10 -fcall-saved-x11 -fcall-saved-x12 \ |
399 | diff --git a/arch/mips/cavium-octeon/executive/cvmx-helper.c b/arch/mips/cavium-octeon/executive/cvmx-helper.c |
400 | index 6456af642471..396236a02b8c 100644 |
401 | --- a/arch/mips/cavium-octeon/executive/cvmx-helper.c |
402 | +++ b/arch/mips/cavium-octeon/executive/cvmx-helper.c |
403 | @@ -67,7 +67,7 @@ void (*cvmx_override_pko_queue_priority) (int pko_port, |
404 | void (*cvmx_override_ipd_port_setup) (int ipd_port); |
405 | |
406 | /* Port count per interface */ |
407 | -static int interface_port_count[5]; |
408 | +static int interface_port_count[9]; |
409 | |
410 | /* Port last configured link info index by IPD/PKO port */ |
411 | static cvmx_helper_link_info_t |
412 | diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S |
413 | index 015614405755..63b140bde2a3 100644 |
414 | --- a/arch/parisc/kernel/entry.S |
415 | +++ b/arch/parisc/kernel/entry.S |
416 | @@ -185,7 +185,7 @@ |
417 | bv,n 0(%r3) |
418 | nop |
419 | .word 0 /* checksum (will be patched) */ |
420 | - .word PA(os_hpmc) /* address of handler */ |
421 | + .word 0 /* address of handler */ |
422 | .word 0 /* length of handler */ |
423 | .endm |
424 | |
425 | diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c |
426 | index 378df9207406..11c91697d5f9 100644 |
427 | --- a/arch/parisc/kernel/traps.c |
428 | +++ b/arch/parisc/kernel/traps.c |
429 | @@ -826,7 +826,8 @@ void __init initialize_ivt(const void *iva) |
430 | for (i = 0; i < 8; i++) |
431 | *ivap++ = 0; |
432 | |
433 | - /* Compute Checksum for HPMC handler */ |
434 | + /* Setup IVA and compute checksum for HPMC handler */ |
435 | + ivap[6] = (u32)__pa(os_hpmc); |
436 | length = os_hpmc_size; |
437 | ivap[7] = length; |
438 | |
439 | diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c |
440 | index e02ada312be8..b9db8e529e4d 100644 |
441 | --- a/arch/parisc/mm/init.c |
442 | +++ b/arch/parisc/mm/init.c |
443 | @@ -491,12 +491,8 @@ static void __init map_pages(unsigned long start_vaddr, |
444 | pte = pte_mkhuge(pte); |
445 | } |
446 | |
447 | - if (address >= end_paddr) { |
448 | - if (force) |
449 | - break; |
450 | - else |
451 | - pte_val(pte) = 0; |
452 | - } |
453 | + if (address >= end_paddr) |
454 | + break; |
455 | |
456 | set_pte(pg_table, pte); |
457 | |
458 | diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h |
459 | index 98697611e7b3..705f4dc5073b 100644 |
460 | --- a/arch/powerpc/include/asm/mpic.h |
461 | +++ b/arch/powerpc/include/asm/mpic.h |
462 | @@ -392,7 +392,14 @@ extern struct bus_type mpic_subsys; |
463 | #define MPIC_REGSET_TSI108 MPIC_REGSET(1) /* Tsi108/109 PIC */ |
464 | |
465 | /* Get the version of primary MPIC */ |
466 | +#ifdef CONFIG_MPIC |
467 | extern u32 fsl_mpic_primary_get_version(void); |
468 | +#else |
469 | +static inline u32 fsl_mpic_primary_get_version(void) |
470 | +{ |
471 | + return 0; |
472 | +} |
473 | +#endif |
474 | |
475 | /* Allocate the controller structure and setup the linux irq descs |
476 | * for the range if interrupts passed in. No HW initialization is |
477 | diff --git a/arch/s390/kvm/sthyi.c b/arch/s390/kvm/sthyi.c |
478 | index 2f04ad1ea01c..029fd5e707b4 100644 |
479 | --- a/arch/s390/kvm/sthyi.c |
480 | +++ b/arch/s390/kvm/sthyi.c |
481 | @@ -174,17 +174,19 @@ static void fill_hdr(struct sthyi_sctns *sctns) |
482 | static void fill_stsi_mac(struct sthyi_sctns *sctns, |
483 | struct sysinfo_1_1_1 *sysinfo) |
484 | { |
485 | + sclp_ocf_cpc_name_copy(sctns->mac.infmname); |
486 | + if (*(u64 *)sctns->mac.infmname != 0) |
487 | + sctns->mac.infmval1 |= MAC_NAME_VLD; |
488 | + |
489 | if (stsi(sysinfo, 1, 1, 1)) |
490 | return; |
491 | |
492 | - sclp_ocf_cpc_name_copy(sctns->mac.infmname); |
493 | - |
494 | memcpy(sctns->mac.infmtype, sysinfo->type, sizeof(sctns->mac.infmtype)); |
495 | memcpy(sctns->mac.infmmanu, sysinfo->manufacturer, sizeof(sctns->mac.infmmanu)); |
496 | memcpy(sctns->mac.infmpman, sysinfo->plant, sizeof(sctns->mac.infmpman)); |
497 | memcpy(sctns->mac.infmseq, sysinfo->sequence, sizeof(sctns->mac.infmseq)); |
498 | |
499 | - sctns->mac.infmval1 |= MAC_ID_VLD | MAC_NAME_VLD; |
500 | + sctns->mac.infmval1 |= MAC_ID_VLD; |
501 | } |
502 | |
503 | static void fill_stsi_par(struct sthyi_sctns *sctns, |
504 | diff --git a/arch/sparc/include/asm/cpudata_64.h b/arch/sparc/include/asm/cpudata_64.h |
505 | index 5b0ed48e5b0c..aa2bf904b582 100644 |
506 | --- a/arch/sparc/include/asm/cpudata_64.h |
507 | +++ b/arch/sparc/include/asm/cpudata_64.h |
508 | @@ -27,7 +27,7 @@ typedef struct { |
509 | unsigned short sock_id; /* physical package */ |
510 | unsigned short core_id; |
511 | unsigned short max_cache_id; /* groupings of highest shared cache */ |
512 | - unsigned short proc_id; /* strand (aka HW thread) id */ |
513 | + signed short proc_id; /* strand (aka HW thread) id */ |
514 | } cpuinfo_sparc; |
515 | |
516 | DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); |
517 | diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c |
518 | index 710f3278d448..71e7f77f6776 100644 |
519 | --- a/arch/sparc/kernel/perf_event.c |
520 | +++ b/arch/sparc/kernel/perf_event.c |
521 | @@ -926,6 +926,8 @@ static void read_in_all_counters(struct cpu_hw_events *cpuc) |
522 | sparc_perf_event_update(cp, &cp->hw, |
523 | cpuc->current_idx[i]); |
524 | cpuc->current_idx[i] = PIC_NO_INDEX; |
525 | + if (cp->hw.state & PERF_HES_STOPPED) |
526 | + cp->hw.state |= PERF_HES_ARCH; |
527 | } |
528 | } |
529 | } |
530 | @@ -958,10 +960,12 @@ static void calculate_single_pcr(struct cpu_hw_events *cpuc) |
531 | |
532 | enc = perf_event_get_enc(cpuc->events[i]); |
533 | cpuc->pcr[0] &= ~mask_for_index(idx); |
534 | - if (hwc->state & PERF_HES_STOPPED) |
535 | + if (hwc->state & PERF_HES_ARCH) { |
536 | cpuc->pcr[0] |= nop_for_index(idx); |
537 | - else |
538 | + } else { |
539 | cpuc->pcr[0] |= event_encoding(enc, idx); |
540 | + hwc->state = 0; |
541 | + } |
542 | } |
543 | out: |
544 | cpuc->pcr[0] |= cpuc->event[0]->hw.config_base; |
545 | @@ -987,6 +991,9 @@ static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc) |
546 | |
547 | cpuc->current_idx[i] = idx; |
548 | |
549 | + if (cp->hw.state & PERF_HES_ARCH) |
550 | + continue; |
551 | + |
552 | sparc_pmu_start(cp, PERF_EF_RELOAD); |
553 | } |
554 | out: |
555 | @@ -1078,6 +1085,8 @@ static void sparc_pmu_start(struct perf_event *event, int flags) |
556 | event->hw.state = 0; |
557 | |
558 | sparc_pmu_enable_event(cpuc, &event->hw, idx); |
559 | + |
560 | + perf_event_update_userpage(event); |
561 | } |
562 | |
563 | static void sparc_pmu_stop(struct perf_event *event, int flags) |
564 | @@ -1370,9 +1379,9 @@ static int sparc_pmu_add(struct perf_event *event, int ef_flags) |
565 | cpuc->events[n0] = event->hw.event_base; |
566 | cpuc->current_idx[n0] = PIC_NO_INDEX; |
567 | |
568 | - event->hw.state = PERF_HES_UPTODATE; |
569 | + event->hw.state = PERF_HES_UPTODATE | PERF_HES_STOPPED; |
570 | if (!(ef_flags & PERF_EF_START)) |
571 | - event->hw.state |= PERF_HES_STOPPED; |
572 | + event->hw.state |= PERF_HES_ARCH; |
573 | |
574 | /* |
575 | * If group events scheduling transaction was started, |
576 | diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c |
577 | index 0702d2531bc7..039c4a66aca4 100644 |
578 | --- a/arch/x86/boot/tools/build.c |
579 | +++ b/arch/x86/boot/tools/build.c |
580 | @@ -390,6 +390,13 @@ int main(int argc, char ** argv) |
581 | die("Unable to mmap '%s': %m", argv[2]); |
582 | /* Number of 16-byte paragraphs, including space for a 4-byte CRC */ |
583 | sys_size = (sz + 15 + 4) / 16; |
584 | +#ifdef CONFIG_EFI_STUB |
585 | + /* |
586 | + * COFF requires minimum 32-byte alignment of sections, and |
587 | + * adding a signature is problematic without that alignment. |
588 | + */ |
589 | + sys_size = (sys_size + 1) & ~1; |
590 | +#endif |
591 | |
592 | /* Patch the setup code with the appropriate size parameters */ |
593 | buf[0x1f1] = setup_sectors-1; |
594 | diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h |
595 | index f6d1bc93589c..c56c24347f15 100644 |
596 | --- a/arch/x86/include/asm/cpufeatures.h |
597 | +++ b/arch/x86/include/asm/cpufeatures.h |
598 | @@ -213,6 +213,7 @@ |
599 | #define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */ |
600 | #define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */ |
601 | #define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */ |
602 | +#define X86_FEATURE_IBRS_ENHANCED ( 7*32+30) /* Enhanced IBRS */ |
603 | |
604 | /* Virtualization flags: Linux defined, word 8 */ |
605 | #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ |
606 | diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h |
607 | index 8b38df98548e..1b4132161c1f 100644 |
608 | --- a/arch/x86/include/asm/nospec-branch.h |
609 | +++ b/arch/x86/include/asm/nospec-branch.h |
610 | @@ -215,6 +215,7 @@ enum spectre_v2_mitigation { |
611 | SPECTRE_V2_RETPOLINE_GENERIC, |
612 | SPECTRE_V2_RETPOLINE_AMD, |
613 | SPECTRE_V2_IBRS, |
614 | + SPECTRE_V2_IBRS_ENHANCED, |
615 | }; |
616 | |
617 | /* The Speculative Store Bypass disable variants */ |
618 | diff --git a/arch/x86/kernel/check.c b/arch/x86/kernel/check.c |
619 | index 145863d4d343..a8b215865636 100644 |
620 | --- a/arch/x86/kernel/check.c |
621 | +++ b/arch/x86/kernel/check.c |
622 | @@ -30,6 +30,11 @@ static __init int set_corruption_check(char *arg) |
623 | ssize_t ret; |
624 | unsigned long val; |
625 | |
626 | + if (!arg) { |
627 | + pr_err("memory_corruption_check config string not provided\n"); |
628 | + return -EINVAL; |
629 | + } |
630 | + |
631 | ret = kstrtoul(arg, 10, &val); |
632 | if (ret) |
633 | return ret; |
634 | @@ -44,6 +49,11 @@ static __init int set_corruption_check_period(char *arg) |
635 | ssize_t ret; |
636 | unsigned long val; |
637 | |
638 | + if (!arg) { |
639 | + pr_err("memory_corruption_check_period config string not provided\n"); |
640 | + return -EINVAL; |
641 | + } |
642 | + |
643 | ret = kstrtoul(arg, 10, &val); |
644 | if (ret) |
645 | return ret; |
646 | @@ -58,6 +68,11 @@ static __init int set_corruption_check_size(char *arg) |
647 | char *end; |
648 | unsigned size; |
649 | |
650 | + if (!arg) { |
651 | + pr_err("memory_corruption_check_size config string not provided\n"); |
652 | + return -EINVAL; |
653 | + } |
654 | + |
655 | size = memparse(arg, &end); |
656 | |
657 | if (*end == '\0') |
658 | diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c |
659 | index 8103adacbc83..647a702c29dc 100644 |
660 | --- a/arch/x86/kernel/cpu/bugs.c |
661 | +++ b/arch/x86/kernel/cpu/bugs.c |
662 | @@ -33,12 +33,10 @@ static void __init spectre_v2_select_mitigation(void); |
663 | static void __init ssb_select_mitigation(void); |
664 | static void __init l1tf_select_mitigation(void); |
665 | |
666 | -/* |
667 | - * Our boot-time value of the SPEC_CTRL MSR. We read it once so that any |
668 | - * writes to SPEC_CTRL contain whatever reserved bits have been set. |
669 | - */ |
670 | -u64 __ro_after_init x86_spec_ctrl_base; |
671 | +/* The base value of the SPEC_CTRL MSR that always has to be preserved. */ |
672 | +u64 x86_spec_ctrl_base; |
673 | EXPORT_SYMBOL_GPL(x86_spec_ctrl_base); |
674 | +static DEFINE_MUTEX(spec_ctrl_mutex); |
675 | |
676 | /* |
677 | * The vendor and possibly platform specific bits which can be modified in |
678 | @@ -139,6 +137,7 @@ static const char *spectre_v2_strings[] = { |
679 | [SPECTRE_V2_RETPOLINE_MINIMAL_AMD] = "Vulnerable: Minimal AMD ASM retpoline", |
680 | [SPECTRE_V2_RETPOLINE_GENERIC] = "Mitigation: Full generic retpoline", |
681 | [SPECTRE_V2_RETPOLINE_AMD] = "Mitigation: Full AMD retpoline", |
682 | + [SPECTRE_V2_IBRS_ENHANCED] = "Mitigation: Enhanced IBRS", |
683 | }; |
684 | |
685 | #undef pr_fmt |
686 | @@ -321,6 +320,46 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void) |
687 | return cmd; |
688 | } |
689 | |
690 | +static bool stibp_needed(void) |
691 | +{ |
692 | + if (spectre_v2_enabled == SPECTRE_V2_NONE) |
693 | + return false; |
694 | + |
695 | + if (!boot_cpu_has(X86_FEATURE_STIBP)) |
696 | + return false; |
697 | + |
698 | + return true; |
699 | +} |
700 | + |
701 | +static void update_stibp_msr(void *info) |
702 | +{ |
703 | + wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); |
704 | +} |
705 | + |
706 | +void arch_smt_update(void) |
707 | +{ |
708 | + u64 mask; |
709 | + |
710 | + if (!stibp_needed()) |
711 | + return; |
712 | + |
713 | + mutex_lock(&spec_ctrl_mutex); |
714 | + mask = x86_spec_ctrl_base; |
715 | + if (cpu_smt_control == CPU_SMT_ENABLED) |
716 | + mask |= SPEC_CTRL_STIBP; |
717 | + else |
718 | + mask &= ~SPEC_CTRL_STIBP; |
719 | + |
720 | + if (mask != x86_spec_ctrl_base) { |
721 | + pr_info("Spectre v2 cross-process SMT mitigation: %s STIBP\n", |
722 | + cpu_smt_control == CPU_SMT_ENABLED ? |
723 | + "Enabling" : "Disabling"); |
724 | + x86_spec_ctrl_base = mask; |
725 | + on_each_cpu(update_stibp_msr, NULL, 1); |
726 | + } |
727 | + mutex_unlock(&spec_ctrl_mutex); |
728 | +} |
729 | + |
730 | static void __init spectre_v2_select_mitigation(void) |
731 | { |
732 | enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline(); |
733 | @@ -340,6 +379,13 @@ static void __init spectre_v2_select_mitigation(void) |
734 | |
735 | case SPECTRE_V2_CMD_FORCE: |
736 | case SPECTRE_V2_CMD_AUTO: |
737 | + if (boot_cpu_has(X86_FEATURE_IBRS_ENHANCED)) { |
738 | + mode = SPECTRE_V2_IBRS_ENHANCED; |
739 | + /* Force it so VMEXIT will restore correctly */ |
740 | + x86_spec_ctrl_base |= SPEC_CTRL_IBRS; |
741 | + wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); |
742 | + goto specv2_set_mode; |
743 | + } |
744 | if (IS_ENABLED(CONFIG_RETPOLINE)) |
745 | goto retpoline_auto; |
746 | break; |
747 | @@ -377,6 +423,7 @@ retpoline_auto: |
748 | setup_force_cpu_cap(X86_FEATURE_RETPOLINE); |
749 | } |
750 | |
751 | +specv2_set_mode: |
752 | spectre_v2_enabled = mode; |
753 | pr_info("%s\n", spectre_v2_strings[mode]); |
754 | |
755 | @@ -399,12 +446,22 @@ retpoline_auto: |
756 | |
757 | /* |
758 | * Retpoline means the kernel is safe because it has no indirect |
759 | - * branches. But firmware isn't, so use IBRS to protect that. |
760 | + * branches. Enhanced IBRS protects firmware too, so, enable restricted |
761 | + * speculation around firmware calls only when Enhanced IBRS isn't |
762 | + * supported. |
763 | + * |
764 | + * Use "mode" to check Enhanced IBRS instead of boot_cpu_has(), because |
765 | + * the user might select retpoline on the kernel command line and if |
766 | + * the CPU supports Enhanced IBRS, kernel might un-intentionally not |
767 | + * enable IBRS around firmware calls. |
768 | */ |
769 | - if (boot_cpu_has(X86_FEATURE_IBRS)) { |
770 | + if (boot_cpu_has(X86_FEATURE_IBRS) && mode != SPECTRE_V2_IBRS_ENHANCED) { |
771 | setup_force_cpu_cap(X86_FEATURE_USE_IBRS_FW); |
772 | pr_info("Enabling Restricted Speculation for firmware calls\n"); |
773 | } |
774 | + |
775 | + /* Enable STIBP if appropriate */ |
776 | + arch_smt_update(); |
777 | } |
778 | |
779 | #undef pr_fmt |
780 | @@ -797,6 +854,8 @@ static ssize_t l1tf_show_state(char *buf) |
781 | static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr, |
782 | char *buf, unsigned int bug) |
783 | { |
784 | + int ret; |
785 | + |
786 | if (!boot_cpu_has_bug(bug)) |
787 | return sprintf(buf, "Not affected\n"); |
788 | |
789 | @@ -811,10 +870,12 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr |
790 | return sprintf(buf, "Mitigation: __user pointer sanitization\n"); |
791 | |
792 | case X86_BUG_SPECTRE_V2: |
793 | - return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], |
794 | + ret = sprintf(buf, "%s%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], |
795 | boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "", |
796 | boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "", |
797 | + (x86_spec_ctrl_base & SPEC_CTRL_STIBP) ? ", STIBP" : "", |
798 | spectre_v2_module_string()); |
799 | + return ret; |
800 | |
801 | case X86_BUG_SPEC_STORE_BYPASS: |
802 | return sprintf(buf, "%s\n", ssb_strings[ssb_mode]); |
803 | diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c |
804 | index dc0850bb74be..3c01610c5ba9 100644 |
805 | --- a/arch/x86/kernel/cpu/common.c |
806 | +++ b/arch/x86/kernel/cpu/common.c |
807 | @@ -959,6 +959,9 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c) |
808 | setup_force_cpu_bug(X86_BUG_SPECTRE_V1); |
809 | setup_force_cpu_bug(X86_BUG_SPECTRE_V2); |
810 | |
811 | + if (ia32_cap & ARCH_CAP_IBRS_ALL) |
812 | + setup_force_cpu_cap(X86_FEATURE_IBRS_ENHANCED); |
813 | + |
814 | if (x86_match_cpu(cpu_no_meltdown)) |
815 | return; |
816 | |
817 | diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c |
818 | index 3a9318610c4d..ae52ef05d098 100644 |
819 | --- a/arch/x86/kernel/fpu/signal.c |
820 | +++ b/arch/x86/kernel/fpu/signal.c |
821 | @@ -309,7 +309,6 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) |
822 | * thread's fpu state, reconstruct fxstate from the fsave |
823 | * header. Sanitize the copied state etc. |
824 | */ |
825 | - struct fpu *fpu = &tsk->thread.fpu; |
826 | struct user_i387_ia32_struct env; |
827 | int err = 0; |
828 | |
829 | diff --git a/arch/x86/platform/olpc/olpc-xo1-rtc.c b/arch/x86/platform/olpc/olpc-xo1-rtc.c |
830 | index a2b4efddd61a..8e7ddd7e313a 100644 |
831 | --- a/arch/x86/platform/olpc/olpc-xo1-rtc.c |
832 | +++ b/arch/x86/platform/olpc/olpc-xo1-rtc.c |
833 | @@ -16,6 +16,7 @@ |
834 | |
835 | #include <asm/msr.h> |
836 | #include <asm/olpc.h> |
837 | +#include <asm/x86_init.h> |
838 | |
839 | static void rtc_wake_on(struct device *dev) |
840 | { |
841 | @@ -75,6 +76,8 @@ static int __init xo1_rtc_init(void) |
842 | if (r) |
843 | return r; |
844 | |
845 | + x86_platform.legacy.rtc = 0; |
846 | + |
847 | device_init_wakeup(&xo1_rtc_device.dev, 1); |
848 | return 0; |
849 | } |
850 | diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c |
851 | index 3d6e0064cbfc..8d2c6f071dcc 100644 |
852 | --- a/arch/x86/xen/spinlock.c |
853 | +++ b/arch/x86/xen/spinlock.c |
854 | @@ -8,6 +8,7 @@ |
855 | #include <linux/log2.h> |
856 | #include <linux/gfp.h> |
857 | #include <linux/slab.h> |
858 | +#include <linux/atomic.h> |
859 | |
860 | #include <asm/paravirt.h> |
861 | |
862 | @@ -19,6 +20,7 @@ |
863 | |
864 | static DEFINE_PER_CPU(int, lock_kicker_irq) = -1; |
865 | static DEFINE_PER_CPU(char *, irq_name); |
866 | +static DEFINE_PER_CPU(atomic_t, xen_qlock_wait_nest); |
867 | static bool xen_pvspin = true; |
868 | |
869 | #include <asm/qspinlock.h> |
870 | @@ -40,33 +42,24 @@ static void xen_qlock_kick(int cpu) |
871 | static void xen_qlock_wait(u8 *byte, u8 val) |
872 | { |
873 | int irq = __this_cpu_read(lock_kicker_irq); |
874 | + atomic_t *nest_cnt = this_cpu_ptr(&xen_qlock_wait_nest); |
875 | |
876 | /* If kicker interrupts not initialized yet, just spin */ |
877 | - if (irq == -1) |
878 | + if (irq == -1 || in_nmi()) |
879 | return; |
880 | |
881 | - /* clear pending */ |
882 | - xen_clear_irq_pending(irq); |
883 | - barrier(); |
884 | - |
885 | - /* |
886 | - * We check the byte value after clearing pending IRQ to make sure |
887 | - * that we won't miss a wakeup event because of the clearing. |
888 | - * |
889 | - * The sync_clear_bit() call in xen_clear_irq_pending() is atomic. |
890 | - * So it is effectively a memory barrier for x86. |
891 | - */ |
892 | - if (READ_ONCE(*byte) != val) |
893 | - return; |
894 | + /* Detect reentry. */ |
895 | + atomic_inc(nest_cnt); |
896 | |
897 | - /* |
898 | - * If an interrupt happens here, it will leave the wakeup irq |
899 | - * pending, which will cause xen_poll_irq() to return |
900 | - * immediately. |
901 | - */ |
902 | + /* If irq pending already and no nested call clear it. */ |
903 | + if (atomic_read(nest_cnt) == 1 && xen_test_irq_pending(irq)) { |
904 | + xen_clear_irq_pending(irq); |
905 | + } else if (READ_ONCE(*byte) == val) { |
906 | + /* Block until irq becomes pending (or a spurious wakeup) */ |
907 | + xen_poll_irq(irq); |
908 | + } |
909 | |
910 | - /* Block until irq becomes pending (or perhaps a spurious wakeup) */ |
911 | - xen_poll_irq(irq); |
912 | + atomic_dec(nest_cnt); |
913 | } |
914 | |
915 | static irqreturn_t dummy_handler(int irq, void *dev_id) |
916 | diff --git a/crypto/lrw.c b/crypto/lrw.c |
917 | index 6f9908a7ebcb..d38a382b09eb 100644 |
918 | --- a/crypto/lrw.c |
919 | +++ b/crypto/lrw.c |
920 | @@ -132,7 +132,12 @@ static inline int get_index128(be128 *block) |
921 | return x + ffz(val); |
922 | } |
923 | |
924 | - return x; |
925 | + /* |
926 | + * If we get here, then x == 128 and we are incrementing the counter |
927 | + * from all ones to all zeros. This means we must return index 127, i.e. |
928 | + * the one corresponding to key2*{ 1,...,1 }. |
929 | + */ |
930 | + return 127; |
931 | } |
932 | |
933 | static int crypt(struct blkcipher_desc *d, |
934 | diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c |
935 | index 2a07341aca46..babbda230c07 100644 |
936 | --- a/crypto/tcrypt.c |
937 | +++ b/crypto/tcrypt.c |
938 | @@ -729,6 +729,9 @@ static void test_ahash_speed_common(const char *algo, unsigned int secs, |
939 | break; |
940 | } |
941 | |
942 | + if (speed[i].klen) |
943 | + crypto_ahash_setkey(tfm, tvmem[0], speed[i].klen); |
944 | + |
945 | pr_info("test%3u " |
946 | "(%5u byte blocks,%5u bytes per update,%4u updates): ", |
947 | i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen); |
948 | diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c |
949 | index 3cdd2c3a5bfc..957d3fa3b543 100644 |
950 | --- a/drivers/acpi/acpi_lpss.c |
951 | +++ b/drivers/acpi/acpi_lpss.c |
952 | @@ -278,9 +278,11 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = { |
953 | { "INT33FC", }, |
954 | |
955 | /* Braswell LPSS devices */ |
956 | + { "80862286", LPSS_ADDR(lpss_dma_desc) }, |
957 | { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) }, |
958 | { "8086228A", LPSS_ADDR(bsw_uart_dev_desc) }, |
959 | { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) }, |
960 | + { "808622C0", LPSS_ADDR(lpss_dma_desc) }, |
961 | { "808622C1", LPSS_ADDR(bsw_i2c_dev_desc) }, |
962 | |
963 | /* Broadwell LPSS devices */ |
964 | diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c |
965 | index 2104b1b4ccda..9ab759bcebd5 100644 |
966 | --- a/drivers/block/ataflop.c |
967 | +++ b/drivers/block/ataflop.c |
968 | @@ -1933,6 +1933,11 @@ static int __init atari_floppy_init (void) |
969 | unit[i].disk = alloc_disk(1); |
970 | if (!unit[i].disk) |
971 | goto Enomem; |
972 | + |
973 | + unit[i].disk->queue = blk_init_queue(do_fd_request, |
974 | + &ataflop_lock); |
975 | + if (!unit[i].disk->queue) |
976 | + goto Enomem; |
977 | } |
978 | |
979 | if (UseTrackbuffer < 0) |
980 | @@ -1964,10 +1969,6 @@ static int __init atari_floppy_init (void) |
981 | sprintf(unit[i].disk->disk_name, "fd%d", i); |
982 | unit[i].disk->fops = &floppy_fops; |
983 | unit[i].disk->private_data = &unit[i]; |
984 | - unit[i].disk->queue = blk_init_queue(do_fd_request, |
985 | - &ataflop_lock); |
986 | - if (!unit[i].disk->queue) |
987 | - goto Enomem; |
988 | set_capacity(unit[i].disk, MAX_DISK_SIZE * 2); |
989 | add_disk(unit[i].disk); |
990 | } |
991 | @@ -1982,13 +1983,17 @@ static int __init atari_floppy_init (void) |
992 | |
993 | return 0; |
994 | Enomem: |
995 | - while (i--) { |
996 | - struct request_queue *q = unit[i].disk->queue; |
997 | + do { |
998 | + struct gendisk *disk = unit[i].disk; |
999 | |
1000 | - put_disk(unit[i].disk); |
1001 | - if (q) |
1002 | - blk_cleanup_queue(q); |
1003 | - } |
1004 | + if (disk) { |
1005 | + if (disk->queue) { |
1006 | + blk_cleanup_queue(disk->queue); |
1007 | + disk->queue = NULL; |
1008 | + } |
1009 | + put_disk(unit[i].disk); |
1010 | + } |
1011 | + } while (i--); |
1012 | |
1013 | unregister_blkdev(FLOPPY_MAJOR, "fd"); |
1014 | return -ENOMEM; |
1015 | diff --git a/drivers/block/swim.c b/drivers/block/swim.c |
1016 | index b5afd495d482..eec6e393c124 100644 |
1017 | --- a/drivers/block/swim.c |
1018 | +++ b/drivers/block/swim.c |
1019 | @@ -868,8 +868,17 @@ static int swim_floppy_init(struct swim_priv *swd) |
1020 | |
1021 | exit_put_disks: |
1022 | unregister_blkdev(FLOPPY_MAJOR, "fd"); |
1023 | - while (drive--) |
1024 | - put_disk(swd->unit[drive].disk); |
1025 | + do { |
1026 | + struct gendisk *disk = swd->unit[drive].disk; |
1027 | + |
1028 | + if (disk) { |
1029 | + if (disk->queue) { |
1030 | + blk_cleanup_queue(disk->queue); |
1031 | + disk->queue = NULL; |
1032 | + } |
1033 | + put_disk(disk); |
1034 | + } |
1035 | + } while (drive--); |
1036 | return err; |
1037 | } |
1038 | |
1039 | diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c |
1040 | index f11d62de2272..c08ee8cf1e29 100644 |
1041 | --- a/drivers/block/xen-blkfront.c |
1042 | +++ b/drivers/block/xen-blkfront.c |
1043 | @@ -2524,6 +2524,9 @@ static int blkfront_remove(struct xenbus_device *xbdev) |
1044 | |
1045 | dev_dbg(&xbdev->dev, "%s removed", xbdev->nodename); |
1046 | |
1047 | + if (!info) |
1048 | + return 0; |
1049 | + |
1050 | blkif_free(info, 0); |
1051 | |
1052 | mutex_lock(&info->mutex); |
1053 | diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c |
1054 | index fdb44829ab6f..475f25c2451d 100644 |
1055 | --- a/drivers/bluetooth/btbcm.c |
1056 | +++ b/drivers/bluetooth/btbcm.c |
1057 | @@ -270,6 +270,7 @@ static const struct { |
1058 | { 0x4103, "BCM4330B1" }, /* 002.001.003 */ |
1059 | { 0x410e, "BCM43341B0" }, /* 002.001.014 */ |
1060 | { 0x4406, "BCM4324B3" }, /* 002.004.006 */ |
1061 | + { 0x6109, "BCM4335C0" }, /* 003.001.009 */ |
1062 | { 0x610c, "BCM4354" }, /* 003.001.012 */ |
1063 | { } |
1064 | }; |
1065 | diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c |
1066 | index 121319198478..a0bb52bc6582 100644 |
1067 | --- a/drivers/char/ipmi/ipmi_ssif.c |
1068 | +++ b/drivers/char/ipmi/ipmi_ssif.c |
1069 | @@ -617,8 +617,9 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, |
1070 | flags = ipmi_ssif_lock_cond(ssif_info, &oflags); |
1071 | ssif_info->waiting_alert = true; |
1072 | ssif_info->rtc_us_timer = SSIF_MSG_USEC; |
1073 | - mod_timer(&ssif_info->retry_timer, |
1074 | - jiffies + SSIF_MSG_JIFFIES); |
1075 | + if (!ssif_info->stopping) |
1076 | + mod_timer(&ssif_info->retry_timer, |
1077 | + jiffies + SSIF_MSG_JIFFIES); |
1078 | ipmi_ssif_unlock_cond(ssif_info, flags); |
1079 | return; |
1080 | } |
1081 | @@ -950,8 +951,9 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result, |
1082 | ssif_info->waiting_alert = true; |
1083 | ssif_info->retries_left = SSIF_RECV_RETRIES; |
1084 | ssif_info->rtc_us_timer = SSIF_MSG_PART_USEC; |
1085 | - mod_timer(&ssif_info->retry_timer, |
1086 | - jiffies + SSIF_MSG_PART_JIFFIES); |
1087 | + if (!ssif_info->stopping) |
1088 | + mod_timer(&ssif_info->retry_timer, |
1089 | + jiffies + SSIF_MSG_PART_JIFFIES); |
1090 | ipmi_ssif_unlock_cond(ssif_info, flags); |
1091 | } |
1092 | } |
1093 | diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c |
1094 | index faf2db122ab9..4f0b1945d020 100644 |
1095 | --- a/drivers/char/tpm/tpm-interface.c |
1096 | +++ b/drivers/char/tpm/tpm-interface.c |
1097 | @@ -420,7 +420,8 @@ ssize_t tpm_transmit_cmd(struct tpm_chip *chip, const void *cmd, |
1098 | header = cmd; |
1099 | |
1100 | err = be32_to_cpu(header->return_code); |
1101 | - if (err != 0 && desc) |
1102 | + if (err != 0 && err != TPM_ERR_DISABLED && err != TPM_ERR_DEACTIVATED |
1103 | + && desc) |
1104 | dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err, |
1105 | desc); |
1106 | |
1107 | diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c |
1108 | index a2ab00831df1..97b3e312903d 100644 |
1109 | --- a/drivers/char/tpm/xen-tpmfront.c |
1110 | +++ b/drivers/char/tpm/xen-tpmfront.c |
1111 | @@ -203,7 +203,7 @@ static int setup_ring(struct xenbus_device *dev, struct tpm_private *priv) |
1112 | return -ENOMEM; |
1113 | } |
1114 | |
1115 | - rv = xenbus_grant_ring(dev, &priv->shr, 1, &gref); |
1116 | + rv = xenbus_grant_ring(dev, priv->shr, 1, &gref); |
1117 | if (rv < 0) |
1118 | return rv; |
1119 | |
1120 | diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c |
1121 | index 4d3ec92cbabf..1496617b05d5 100644 |
1122 | --- a/drivers/cpufreq/cpufreq-dt.c |
1123 | +++ b/drivers/cpufreq/cpufreq-dt.c |
1124 | @@ -32,6 +32,7 @@ struct private_data { |
1125 | struct device *cpu_dev; |
1126 | struct thermal_cooling_device *cdev; |
1127 | const char *reg_name; |
1128 | + bool have_static_opps; |
1129 | }; |
1130 | |
1131 | static struct freq_attr *cpufreq_dt_attr[] = { |
1132 | @@ -197,6 +198,15 @@ static int cpufreq_init(struct cpufreq_policy *policy) |
1133 | } |
1134 | } |
1135 | |
1136 | + priv = kzalloc(sizeof(*priv), GFP_KERNEL); |
1137 | + if (!priv) { |
1138 | + ret = -ENOMEM; |
1139 | + goto out_put_regulator; |
1140 | + } |
1141 | + |
1142 | + priv->reg_name = name; |
1143 | + priv->opp_table = opp_table; |
1144 | + |
1145 | /* |
1146 | * Initialize OPP tables for all policy->cpus. They will be shared by |
1147 | * all CPUs which have marked their CPUs shared with OPP bindings. |
1148 | @@ -207,7 +217,8 @@ static int cpufreq_init(struct cpufreq_policy *policy) |
1149 | * |
1150 | * OPPs might be populated at runtime, don't check for error here |
1151 | */ |
1152 | - dev_pm_opp_of_cpumask_add_table(policy->cpus); |
1153 | + if (!dev_pm_opp_of_cpumask_add_table(policy->cpus)) |
1154 | + priv->have_static_opps = true; |
1155 | |
1156 | /* |
1157 | * But we need OPP table to function so if it is not there let's |
1158 | @@ -233,19 +244,10 @@ static int cpufreq_init(struct cpufreq_policy *policy) |
1159 | __func__, ret); |
1160 | } |
1161 | |
1162 | - priv = kzalloc(sizeof(*priv), GFP_KERNEL); |
1163 | - if (!priv) { |
1164 | - ret = -ENOMEM; |
1165 | - goto out_free_opp; |
1166 | - } |
1167 | - |
1168 | - priv->reg_name = name; |
1169 | - priv->opp_table = opp_table; |
1170 | - |
1171 | ret = dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table); |
1172 | if (ret) { |
1173 | dev_err(cpu_dev, "failed to init cpufreq table: %d\n", ret); |
1174 | - goto out_free_priv; |
1175 | + goto out_free_opp; |
1176 | } |
1177 | |
1178 | priv->cpu_dev = cpu_dev; |
1179 | @@ -284,10 +286,11 @@ static int cpufreq_init(struct cpufreq_policy *policy) |
1180 | |
1181 | out_free_cpufreq_table: |
1182 | dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table); |
1183 | -out_free_priv: |
1184 | - kfree(priv); |
1185 | out_free_opp: |
1186 | - dev_pm_opp_of_cpumask_remove_table(policy->cpus); |
1187 | + if (priv->have_static_opps) |
1188 | + dev_pm_opp_of_cpumask_remove_table(policy->cpus); |
1189 | + kfree(priv); |
1190 | +out_put_regulator: |
1191 | if (name) |
1192 | dev_pm_opp_put_regulator(opp_table); |
1193 | out_put_clk: |
1194 | @@ -302,7 +305,8 @@ static int cpufreq_exit(struct cpufreq_policy *policy) |
1195 | |
1196 | cpufreq_cooling_unregister(priv->cdev); |
1197 | dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table); |
1198 | - dev_pm_opp_of_cpumask_remove_table(policy->related_cpus); |
1199 | + if (priv->have_static_opps) |
1200 | + dev_pm_opp_of_cpumask_remove_table(policy->related_cpus); |
1201 | if (priv->reg_name) |
1202 | dev_pm_opp_put_regulator(priv->opp_table); |
1203 | |
1204 | diff --git a/drivers/crypto/caam/regs.h b/drivers/crypto/caam/regs.h |
1205 | index 84d2f838a063..b03e6f54ec14 100644 |
1206 | --- a/drivers/crypto/caam/regs.h |
1207 | +++ b/drivers/crypto/caam/regs.h |
1208 | @@ -68,22 +68,22 @@ |
1209 | |
1210 | extern bool caam_little_end; |
1211 | |
1212 | -#define caam_to_cpu(len) \ |
1213 | -static inline u##len caam##len ## _to_cpu(u##len val) \ |
1214 | -{ \ |
1215 | - if (caam_little_end) \ |
1216 | - return le##len ## _to_cpu(val); \ |
1217 | - else \ |
1218 | - return be##len ## _to_cpu(val); \ |
1219 | +#define caam_to_cpu(len) \ |
1220 | +static inline u##len caam##len ## _to_cpu(u##len val) \ |
1221 | +{ \ |
1222 | + if (caam_little_end) \ |
1223 | + return le##len ## _to_cpu((__force __le##len)val); \ |
1224 | + else \ |
1225 | + return be##len ## _to_cpu((__force __be##len)val); \ |
1226 | } |
1227 | |
1228 | -#define cpu_to_caam(len) \ |
1229 | -static inline u##len cpu_to_caam##len(u##len val) \ |
1230 | -{ \ |
1231 | - if (caam_little_end) \ |
1232 | - return cpu_to_le##len(val); \ |
1233 | - else \ |
1234 | - return cpu_to_be##len(val); \ |
1235 | +#define cpu_to_caam(len) \ |
1236 | +static inline u##len cpu_to_caam##len(u##len val) \ |
1237 | +{ \ |
1238 | + if (caam_little_end) \ |
1239 | + return (__force u##len)cpu_to_le##len(val); \ |
1240 | + else \ |
1241 | + return (__force u##len)cpu_to_be##len(val); \ |
1242 | } |
1243 | |
1244 | caam_to_cpu(16) |
1245 | diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c |
1246 | index 7373b7a555ec..803cfb4523b0 100644 |
1247 | --- a/drivers/dma/dma-jz4780.c |
1248 | +++ b/drivers/dma/dma-jz4780.c |
1249 | @@ -754,6 +754,11 @@ static int jz4780_dma_probe(struct platform_device *pdev) |
1250 | struct resource *res; |
1251 | int i, ret; |
1252 | |
1253 | + if (!dev->of_node) { |
1254 | + dev_err(dev, "This driver must be probed from devicetree\n"); |
1255 | + return -EINVAL; |
1256 | + } |
1257 | + |
1258 | jzdma = devm_kzalloc(dev, sizeof(*jzdma), GFP_KERNEL); |
1259 | if (!jzdma) |
1260 | return -ENOMEM; |
1261 | diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c |
1262 | index 84eb83eb2efe..d139706f01fe 100644 |
1263 | --- a/drivers/dma/ioat/init.c |
1264 | +++ b/drivers/dma/ioat/init.c |
1265 | @@ -1210,8 +1210,15 @@ static void ioat_shutdown(struct pci_dev *pdev) |
1266 | |
1267 | spin_lock_bh(&ioat_chan->prep_lock); |
1268 | set_bit(IOAT_CHAN_DOWN, &ioat_chan->state); |
1269 | - del_timer_sync(&ioat_chan->timer); |
1270 | spin_unlock_bh(&ioat_chan->prep_lock); |
1271 | + /* |
1272 | + * Synchronization rule for del_timer_sync(): |
1273 | + * - The caller must not hold locks which would prevent |
1274 | + * completion of the timer's handler. |
1275 | + * So prep_lock cannot be held before calling it. |
1276 | + */ |
1277 | + del_timer_sync(&ioat_chan->timer); |
1278 | + |
1279 | /* this should quiesce then reset */ |
1280 | ioat_reset_hw(ioat_chan); |
1281 | } |
1282 | diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c |
1283 | index b60932026e34..f95d5b9c5551 100644 |
1284 | --- a/drivers/edac/i7core_edac.c |
1285 | +++ b/drivers/edac/i7core_edac.c |
1286 | @@ -1711,6 +1711,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci, |
1287 | u32 errnum = find_first_bit(&error, 32); |
1288 | |
1289 | if (uncorrected_error) { |
1290 | + core_err_cnt = 1; |
1291 | if (ripv) |
1292 | tp_event = HW_EVENT_ERR_FATAL; |
1293 | else |
1294 | diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c |
1295 | index 3c47e6361d81..e9391950a843 100644 |
1296 | --- a/drivers/edac/sb_edac.c |
1297 | +++ b/drivers/edac/sb_edac.c |
1298 | @@ -2934,6 +2934,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci, |
1299 | recoverable = GET_BITFIELD(m->status, 56, 56); |
1300 | |
1301 | if (uncorrected_error) { |
1302 | + core_err_cnt = 1; |
1303 | if (ripv) { |
1304 | type = "FATAL"; |
1305 | tp_event = HW_EVENT_ERR_FATAL; |
1306 | diff --git a/drivers/edac/skx_edac.c b/drivers/edac/skx_edac.c |
1307 | index 0ff4878c2aa1..321035ad348f 100644 |
1308 | --- a/drivers/edac/skx_edac.c |
1309 | +++ b/drivers/edac/skx_edac.c |
1310 | @@ -606,7 +606,7 @@ sad_found: |
1311 | break; |
1312 | case 2: |
1313 | lchan = (addr >> shift) % 2; |
1314 | - lchan = (lchan << 1) | ~lchan; |
1315 | + lchan = (lchan << 1) | !lchan; |
1316 | break; |
1317 | case 3: |
1318 | lchan = ((addr >> shift) % 2) << 1; |
1319 | @@ -897,6 +897,7 @@ static void skx_mce_output_error(struct mem_ctl_info *mci, |
1320 | recoverable = GET_BITFIELD(m->status, 56, 56); |
1321 | |
1322 | if (uncorrected_error) { |
1323 | + core_err_cnt = 1; |
1324 | if (ripv) { |
1325 | type = "FATAL"; |
1326 | tp_event = HW_EVENT_ERR_FATAL; |
1327 | diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c |
1328 | index b59b15d4caa9..308d8432fea3 100644 |
1329 | --- a/drivers/hid/usbhid/hiddev.c |
1330 | +++ b/drivers/hid/usbhid/hiddev.c |
1331 | @@ -521,14 +521,24 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, |
1332 | if (cmd == HIDIOCGCOLLECTIONINDEX) { |
1333 | if (uref->usage_index >= field->maxusage) |
1334 | goto inval; |
1335 | + uref->usage_index = |
1336 | + array_index_nospec(uref->usage_index, |
1337 | + field->maxusage); |
1338 | } else if (uref->usage_index >= field->report_count) |
1339 | goto inval; |
1340 | } |
1341 | |
1342 | - if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) && |
1343 | - (uref_multi->num_values > HID_MAX_MULTI_USAGES || |
1344 | - uref->usage_index + uref_multi->num_values > field->report_count)) |
1345 | - goto inval; |
1346 | + if (cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) { |
1347 | + if (uref_multi->num_values > HID_MAX_MULTI_USAGES || |
1348 | + uref->usage_index + uref_multi->num_values > |
1349 | + field->report_count) |
1350 | + goto inval; |
1351 | + |
1352 | + uref->usage_index = |
1353 | + array_index_nospec(uref->usage_index, |
1354 | + field->report_count - |
1355 | + uref_multi->num_values); |
1356 | + } |
1357 | |
1358 | switch (cmd) { |
1359 | case HIDIOCGUSAGE: |
1360 | diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c |
1361 | index 44ca8a94873d..2fe5a9952127 100644 |
1362 | --- a/drivers/hwmon/pmbus/pmbus.c |
1363 | +++ b/drivers/hwmon/pmbus/pmbus.c |
1364 | @@ -118,6 +118,8 @@ static int pmbus_identify(struct i2c_client *client, |
1365 | } else { |
1366 | info->pages = 1; |
1367 | } |
1368 | + |
1369 | + pmbus_clear_faults(client); |
1370 | } |
1371 | |
1372 | if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) { |
1373 | diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c |
1374 | index d013acf3f83a..c00bad02761a 100644 |
1375 | --- a/drivers/hwmon/pmbus/pmbus_core.c |
1376 | +++ b/drivers/hwmon/pmbus/pmbus_core.c |
1377 | @@ -1759,7 +1759,10 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data, |
1378 | if (ret >= 0 && (ret & PB_CAPABILITY_ERROR_CHECK)) |
1379 | client->flags |= I2C_CLIENT_PEC; |
1380 | |
1381 | - pmbus_clear_faults(client); |
1382 | + if (data->info->pages) |
1383 | + pmbus_clear_faults(client); |
1384 | + else |
1385 | + pmbus_clear_fault_page(client, -1); |
1386 | |
1387 | if (info->identify) { |
1388 | ret = (*info->identify)(client, info); |
1389 | diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c |
1390 | index f9af3935b427..fb03449de2e0 100644 |
1391 | --- a/drivers/hwmon/pwm-fan.c |
1392 | +++ b/drivers/hwmon/pwm-fan.c |
1393 | @@ -306,9 +306,19 @@ static int pwm_fan_remove(struct platform_device *pdev) |
1394 | static int pwm_fan_suspend(struct device *dev) |
1395 | { |
1396 | struct pwm_fan_ctx *ctx = dev_get_drvdata(dev); |
1397 | + struct pwm_args args; |
1398 | + int ret; |
1399 | + |
1400 | + pwm_get_args(ctx->pwm, &args); |
1401 | + |
1402 | + if (ctx->pwm_value) { |
1403 | + ret = pwm_config(ctx->pwm, 0, args.period); |
1404 | + if (ret < 0) |
1405 | + return ret; |
1406 | |
1407 | - if (ctx->pwm_value) |
1408 | pwm_disable(ctx->pwm); |
1409 | + } |
1410 | + |
1411 | return 0; |
1412 | } |
1413 | |
1414 | diff --git a/drivers/hwtracing/coresight/coresight-etb10.c b/drivers/hwtracing/coresight/coresight-etb10.c |
1415 | index d7325c6534ad..ace55385b26f 100644 |
1416 | --- a/drivers/hwtracing/coresight/coresight-etb10.c |
1417 | +++ b/drivers/hwtracing/coresight/coresight-etb10.c |
1418 | @@ -155,6 +155,10 @@ static int etb_enable(struct coresight_device *csdev, u32 mode) |
1419 | if (val == CS_MODE_PERF) |
1420 | return -EBUSY; |
1421 | |
1422 | + /* Don't let perf disturb sysFS sessions */ |
1423 | + if (val == CS_MODE_SYSFS && mode == CS_MODE_PERF) |
1424 | + return -EBUSY; |
1425 | + |
1426 | /* Nothing to do, the tracer is already enabled. */ |
1427 | if (val == CS_MODE_SYSFS) |
1428 | goto out; |
1429 | diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c |
1430 | index c7592fe30e6e..93b8069041bb 100644 |
1431 | --- a/drivers/i2c/busses/i2c-rcar.c |
1432 | +++ b/drivers/i2c/busses/i2c-rcar.c |
1433 | @@ -723,8 +723,12 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap, |
1434 | |
1435 | time_left = wait_event_timeout(priv->wait, priv->flags & ID_DONE, |
1436 | num * adap->timeout); |
1437 | - if (!time_left) { |
1438 | + |
1439 | + /* cleanup DMA if it couldn't complete properly due to an error */ |
1440 | + if (priv->dma_direction != DMA_NONE) |
1441 | rcar_i2c_cleanup_dma(priv); |
1442 | + |
1443 | + if (!time_left) { |
1444 | rcar_i2c_init(priv); |
1445 | ret = -ETIMEDOUT; |
1446 | } else if (priv->flags & ID_NACK) { |
1447 | diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c |
1448 | index bbdac07f4aaa..e3e2155b0386 100644 |
1449 | --- a/drivers/iio/adc/at91_adc.c |
1450 | +++ b/drivers/iio/adc/at91_adc.c |
1451 | @@ -247,12 +247,14 @@ static irqreturn_t at91_adc_trigger_handler(int irq, void *p) |
1452 | struct iio_poll_func *pf = p; |
1453 | struct iio_dev *idev = pf->indio_dev; |
1454 | struct at91_adc_state *st = iio_priv(idev); |
1455 | + struct iio_chan_spec const *chan; |
1456 | int i, j = 0; |
1457 | |
1458 | for (i = 0; i < idev->masklength; i++) { |
1459 | if (!test_bit(i, idev->active_scan_mask)) |
1460 | continue; |
1461 | - st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, i)); |
1462 | + chan = idev->channels + i; |
1463 | + st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, chan->channel)); |
1464 | j++; |
1465 | } |
1466 | |
1467 | @@ -278,6 +280,8 @@ static void handle_adc_eoc_trigger(int irq, struct iio_dev *idev) |
1468 | iio_trigger_poll(idev->trig); |
1469 | } else { |
1470 | st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, st->chnb)); |
1471 | + /* Needed to ACK the DRDY interruption */ |
1472 | + at91_adc_readl(st, AT91_ADC_LCDR); |
1473 | st->done = true; |
1474 | wake_up_interruptible(&st->wq_data_avail); |
1475 | } |
1476 | diff --git a/drivers/iio/adc/fsl-imx25-gcq.c b/drivers/iio/adc/fsl-imx25-gcq.c |
1477 | index ea264fa9e567..929c617db364 100644 |
1478 | --- a/drivers/iio/adc/fsl-imx25-gcq.c |
1479 | +++ b/drivers/iio/adc/fsl-imx25-gcq.c |
1480 | @@ -209,12 +209,14 @@ static int mx25_gcq_setup_cfgs(struct platform_device *pdev, |
1481 | ret = of_property_read_u32(child, "reg", ®); |
1482 | if (ret) { |
1483 | dev_err(dev, "Failed to get reg property\n"); |
1484 | + of_node_put(child); |
1485 | return ret; |
1486 | } |
1487 | |
1488 | if (reg >= MX25_NUM_CFGS) { |
1489 | dev_err(dev, |
1490 | "reg value is greater than the number of available configuration registers\n"); |
1491 | + of_node_put(child); |
1492 | return -EINVAL; |
1493 | } |
1494 | |
1495 | @@ -228,6 +230,7 @@ static int mx25_gcq_setup_cfgs(struct platform_device *pdev, |
1496 | if (IS_ERR(priv->vref[refp])) { |
1497 | dev_err(dev, "Error, trying to use external voltage reference without a vref-%s regulator.", |
1498 | mx25_gcq_refp_names[refp]); |
1499 | + of_node_put(child); |
1500 | return PTR_ERR(priv->vref[refp]); |
1501 | } |
1502 | priv->channel_vref_mv[reg] = |
1503 | @@ -240,6 +243,7 @@ static int mx25_gcq_setup_cfgs(struct platform_device *pdev, |
1504 | break; |
1505 | default: |
1506 | dev_err(dev, "Invalid positive reference %d\n", refp); |
1507 | + of_node_put(child); |
1508 | return -EINVAL; |
1509 | } |
1510 | |
1511 | @@ -254,10 +258,12 @@ static int mx25_gcq_setup_cfgs(struct platform_device *pdev, |
1512 | |
1513 | if ((refp & MX25_ADCQ_CFG_REFP_MASK) != refp) { |
1514 | dev_err(dev, "Invalid fsl,adc-refp property value\n"); |
1515 | + of_node_put(child); |
1516 | return -EINVAL; |
1517 | } |
1518 | if ((refn & MX25_ADCQ_CFG_REFN_MASK) != refn) { |
1519 | dev_err(dev, "Invalid fsl,adc-refn property value\n"); |
1520 | + of_node_put(child); |
1521 | return -EINVAL; |
1522 | } |
1523 | |
1524 | diff --git a/drivers/iio/dac/ad5064.c b/drivers/iio/dac/ad5064.c |
1525 | index 6803e4a137cd..94d4677cb51e 100644 |
1526 | --- a/drivers/iio/dac/ad5064.c |
1527 | +++ b/drivers/iio/dac/ad5064.c |
1528 | @@ -760,6 +760,40 @@ static int ad5064_set_config(struct ad5064_state *st, unsigned int val) |
1529 | return ad5064_write(st, cmd, 0, val, 0); |
1530 | } |
1531 | |
1532 | +static int ad5064_request_vref(struct ad5064_state *st, struct device *dev) |
1533 | +{ |
1534 | + unsigned int i; |
1535 | + int ret; |
1536 | + |
1537 | + for (i = 0; i < ad5064_num_vref(st); ++i) |
1538 | + st->vref_reg[i].supply = ad5064_vref_name(st, i); |
1539 | + |
1540 | + if (!st->chip_info->internal_vref) |
1541 | + return devm_regulator_bulk_get(dev, ad5064_num_vref(st), |
1542 | + st->vref_reg); |
1543 | + |
1544 | + /* |
1545 | + * This assumes that when the regulator has an internal VREF |
1546 | + * there is only one external VREF connection, which is |
1547 | + * currently the case for all supported devices. |
1548 | + */ |
1549 | + st->vref_reg[0].consumer = devm_regulator_get_optional(dev, "vref"); |
1550 | + if (!IS_ERR(st->vref_reg[0].consumer)) |
1551 | + return 0; |
1552 | + |
1553 | + ret = PTR_ERR(st->vref_reg[0].consumer); |
1554 | + if (ret != -ENODEV) |
1555 | + return ret; |
1556 | + |
1557 | + /* If no external regulator was supplied use the internal VREF */ |
1558 | + st->use_internal_vref = true; |
1559 | + ret = ad5064_set_config(st, AD5064_CONFIG_INT_VREF_ENABLE); |
1560 | + if (ret) |
1561 | + dev_err(dev, "Failed to enable internal vref: %d\n", ret); |
1562 | + |
1563 | + return ret; |
1564 | +} |
1565 | + |
1566 | static int ad5064_probe(struct device *dev, enum ad5064_type type, |
1567 | const char *name, ad5064_write_func write) |
1568 | { |
1569 | @@ -780,22 +814,11 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, |
1570 | st->dev = dev; |
1571 | st->write = write; |
1572 | |
1573 | - for (i = 0; i < ad5064_num_vref(st); ++i) |
1574 | - st->vref_reg[i].supply = ad5064_vref_name(st, i); |
1575 | + ret = ad5064_request_vref(st, dev); |
1576 | + if (ret) |
1577 | + return ret; |
1578 | |
1579 | - ret = devm_regulator_bulk_get(dev, ad5064_num_vref(st), |
1580 | - st->vref_reg); |
1581 | - if (ret) { |
1582 | - if (!st->chip_info->internal_vref) |
1583 | - return ret; |
1584 | - st->use_internal_vref = true; |
1585 | - ret = ad5064_set_config(st, AD5064_CONFIG_INT_VREF_ENABLE); |
1586 | - if (ret) { |
1587 | - dev_err(dev, "Failed to enable internal vref: %d\n", |
1588 | - ret); |
1589 | - return ret; |
1590 | - } |
1591 | - } else { |
1592 | + if (!st->use_internal_vref) { |
1593 | ret = regulator_bulk_enable(ad5064_num_vref(st), st->vref_reg); |
1594 | if (ret) |
1595 | return ret; |
1596 | diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c |
1597 | index 42de5f22da93..a1240ddca026 100644 |
1598 | --- a/drivers/infiniband/core/sysfs.c |
1599 | +++ b/drivers/infiniband/core/sysfs.c |
1600 | @@ -485,7 +485,7 @@ static ssize_t show_pma_counter(struct ib_port *p, struct port_attribute *attr, |
1601 | ret = get_perf_mad(p->ibdev, p->port_num, tab_attr->attr_id, &data, |
1602 | 40 + offset / 8, sizeof(data)); |
1603 | if (ret < 0) |
1604 | - return sprintf(buf, "N/A (no PMA)\n"); |
1605 | + return ret; |
1606 | |
1607 | switch (width) { |
1608 | case 4: |
1609 | @@ -1008,10 +1008,12 @@ static int add_port(struct ib_device *device, int port_num, |
1610 | goto err_put; |
1611 | } |
1612 | |
1613 | - p->pma_table = get_counter_table(device, port_num); |
1614 | - ret = sysfs_create_group(&p->kobj, p->pma_table); |
1615 | - if (ret) |
1616 | - goto err_put_gid_attrs; |
1617 | + if (device->process_mad) { |
1618 | + p->pma_table = get_counter_table(device, port_num); |
1619 | + ret = sysfs_create_group(&p->kobj, p->pma_table); |
1620 | + if (ret) |
1621 | + goto err_put_gid_attrs; |
1622 | + } |
1623 | |
1624 | p->gid_group.name = "gids"; |
1625 | p->gid_group.attrs = alloc_group_attrs(show_port_gid, attr.gid_tbl_len); |
1626 | @@ -1124,7 +1126,8 @@ err_free_gid: |
1627 | p->gid_group.attrs = NULL; |
1628 | |
1629 | err_remove_pma: |
1630 | - sysfs_remove_group(&p->kobj, p->pma_table); |
1631 | + if (p->pma_table) |
1632 | + sysfs_remove_group(&p->kobj, p->pma_table); |
1633 | |
1634 | err_put_gid_attrs: |
1635 | kobject_put(&p->gid_attr_group->kobj); |
1636 | @@ -1236,7 +1239,9 @@ static void free_port_list_attributes(struct ib_device *device) |
1637 | kfree(port->hw_stats); |
1638 | free_hsag(&port->kobj, port->hw_stats_ag); |
1639 | } |
1640 | - sysfs_remove_group(p, port->pma_table); |
1641 | + |
1642 | + if (port->pma_table) |
1643 | + sysfs_remove_group(p, port->pma_table); |
1644 | sysfs_remove_group(p, &port->pkey_group); |
1645 | sysfs_remove_group(p, &port->gid_group); |
1646 | sysfs_remove_group(&port->gid_attr_group->kobj, |
1647 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1648 | index ad9b486ca7ea..95a3e0abd2a4 100644 |
1649 | --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1650 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1651 | @@ -1422,11 +1422,15 @@ static void ipoib_cm_skb_reap(struct work_struct *work) |
1652 | spin_unlock_irqrestore(&priv->lock, flags); |
1653 | netif_tx_unlock_bh(dev); |
1654 | |
1655 | - if (skb->protocol == htons(ETH_P_IP)) |
1656 | + if (skb->protocol == htons(ETH_P_IP)) { |
1657 | + memset(IPCB(skb), 0, sizeof(*IPCB(skb))); |
1658 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu)); |
1659 | + } |
1660 | #if IS_ENABLED(CONFIG_IPV6) |
1661 | - else if (skb->protocol == htons(ETH_P_IPV6)) |
1662 | + else if (skb->protocol == htons(ETH_P_IPV6)) { |
1663 | + memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); |
1664 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); |
1665 | + } |
1666 | #endif |
1667 | dev_kfree_skb_any(skb); |
1668 | |
1669 | diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c |
1670 | index cf7c68920b33..4e34afb6e36a 100644 |
1671 | --- a/drivers/md/bcache/btree.c |
1672 | +++ b/drivers/md/bcache/btree.c |
1673 | @@ -2367,7 +2367,7 @@ static int refill_keybuf_fn(struct btree_op *op, struct btree *b, |
1674 | struct keybuf *buf = refill->buf; |
1675 | int ret = MAP_CONTINUE; |
1676 | |
1677 | - if (bkey_cmp(k, refill->end) >= 0) { |
1678 | + if (bkey_cmp(k, refill->end) > 0) { |
1679 | ret = MAP_DONE; |
1680 | goto out; |
1681 | } |
1682 | diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c |
1683 | index b67414b5a64e..6964b252952a 100644 |
1684 | --- a/drivers/md/dm-ioctl.c |
1685 | +++ b/drivers/md/dm-ioctl.c |
1686 | @@ -1692,8 +1692,7 @@ static void free_params(struct dm_ioctl *param, size_t param_size, int param_fla |
1687 | } |
1688 | |
1689 | static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kernel, |
1690 | - int ioctl_flags, |
1691 | - struct dm_ioctl **param, int *param_flags) |
1692 | + int ioctl_flags, struct dm_ioctl **param, int *param_flags) |
1693 | { |
1694 | struct dm_ioctl *dmi; |
1695 | int secure_data; |
1696 | @@ -1738,18 +1737,13 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kern |
1697 | |
1698 | *param_flags |= DM_PARAMS_MALLOC; |
1699 | |
1700 | - if (copy_from_user(dmi, user, param_kernel->data_size)) |
1701 | - goto bad; |
1702 | + /* Copy from param_kernel (which was already copied from user) */ |
1703 | + memcpy(dmi, param_kernel, minimum_data_size); |
1704 | |
1705 | -data_copied: |
1706 | - /* |
1707 | - * Abort if something changed the ioctl data while it was being copied. |
1708 | - */ |
1709 | - if (dmi->data_size != param_kernel->data_size) { |
1710 | - DMERR("rejecting ioctl: data size modified while processing parameters"); |
1711 | + if (copy_from_user(&dmi->data, (char __user *)user + minimum_data_size, |
1712 | + param_kernel->data_size - minimum_data_size)) |
1713 | goto bad; |
1714 | - } |
1715 | - |
1716 | +data_copied: |
1717 | /* Wipe the user buffer so we do not return it to userspace */ |
1718 | if (secure_data && clear_user(user, param_kernel->data_size)) |
1719 | goto bad; |
1720 | diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c |
1721 | index 998102697619..53048bf0b2b8 100644 |
1722 | --- a/drivers/md/raid1.c |
1723 | +++ b/drivers/md/raid1.c |
1724 | @@ -1589,6 +1589,7 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev) |
1725 | */ |
1726 | if (rdev->saved_raid_disk >= 0 && |
1727 | rdev->saved_raid_disk >= first && |
1728 | + rdev->saved_raid_disk < conf->raid_disks && |
1729 | conf->mirrors[rdev->saved_raid_disk].rdev == NULL) |
1730 | first = last = rdev->saved_raid_disk; |
1731 | |
1732 | diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c |
1733 | index b3046063402c..b62e6ab66b31 100644 |
1734 | --- a/drivers/md/raid10.c |
1735 | +++ b/drivers/md/raid10.c |
1736 | @@ -1734,6 +1734,7 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev) |
1737 | first = last = rdev->raid_disk; |
1738 | |
1739 | if (rdev->saved_raid_disk >= first && |
1740 | + rdev->saved_raid_disk < conf->geo.raid_disks && |
1741 | conf->mirrors[rdev->saved_raid_disk].rdev == NULL) |
1742 | mirror = rdev->saved_raid_disk; |
1743 | else |
1744 | diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c |
1745 | index 1684810cab83..1f463f4c3024 100644 |
1746 | --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c |
1747 | +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c |
1748 | @@ -1650,7 +1650,7 @@ typedef struct { u16 __; u8 _; } __packed x24; |
1749 | pos[7] = (chr & (0x01 << 0) ? fg : bg); \ |
1750 | } \ |
1751 | \ |
1752 | - pos += (tpg->hflip ? -8 : 8) / hdiv; \ |
1753 | + pos += (tpg->hflip ? -8 : 8) / (int)hdiv; \ |
1754 | } \ |
1755 | } \ |
1756 | } while (0) |
1757 | diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c |
1758 | index 59aa4dafb60b..5d9c2b03d83a 100644 |
1759 | --- a/drivers/media/i2c/tvp5150.c |
1760 | +++ b/drivers/media/i2c/tvp5150.c |
1761 | @@ -1527,7 +1527,7 @@ static int tvp5150_probe(struct i2c_client *c, |
1762 | 27000000, 1, 27000000); |
1763 | v4l2_ctrl_new_std_menu_items(&core->hdl, &tvp5150_ctrl_ops, |
1764 | V4L2_CID_TEST_PATTERN, |
1765 | - ARRAY_SIZE(tvp5150_test_patterns), |
1766 | + ARRAY_SIZE(tvp5150_test_patterns) - 1, |
1767 | 0, 0, tvp5150_test_patterns); |
1768 | sd->ctrl_handler = &core->hdl; |
1769 | if (core->hdl.error) { |
1770 | diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c |
1771 | index e397f544f108..e9403aa6fbd2 100644 |
1772 | --- a/drivers/media/usb/em28xx/em28xx-cards.c |
1773 | +++ b/drivers/media/usb/em28xx/em28xx-cards.c |
1774 | @@ -2093,13 +2093,13 @@ struct em28xx_board em28xx_boards[] = { |
1775 | .input = { { |
1776 | .type = EM28XX_VMUX_COMPOSITE, |
1777 | .vmux = TVP5150_COMPOSITE1, |
1778 | - .amux = EM28XX_AUDIO_SRC_LINE, |
1779 | + .amux = EM28XX_AMUX_LINE_IN, |
1780 | .gpio = terratec_av350_unmute_gpio, |
1781 | |
1782 | }, { |
1783 | .type = EM28XX_VMUX_SVIDEO, |
1784 | .vmux = TVP5150_SVIDEO, |
1785 | - .amux = EM28XX_AUDIO_SRC_LINE, |
1786 | + .amux = EM28XX_AMUX_LINE_IN, |
1787 | .gpio = terratec_av350_unmute_gpio, |
1788 | } }, |
1789 | }, |
1790 | diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c |
1791 | index 1f7fa059eb34..1ed7ba3dfdbe 100644 |
1792 | --- a/drivers/media/usb/em28xx/em28xx-video.c |
1793 | +++ b/drivers/media/usb/em28xx/em28xx-video.c |
1794 | @@ -1290,6 +1290,8 @@ static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv) |
1795 | { |
1796 | struct em28xx *dev = priv; |
1797 | |
1798 | + dev->v4l2->field_count = 0; |
1799 | + |
1800 | /* |
1801 | * In the case of non-AC97 volume controls, we still need |
1802 | * to do some setups at em28xx, in order to mute/unmute |
1803 | @@ -1435,9 +1437,9 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, |
1804 | |
1805 | fmt = format_by_fourcc(f->fmt.pix.pixelformat); |
1806 | if (!fmt) { |
1807 | - em28xx_videodbg("Fourcc format (%08x) invalid.\n", |
1808 | - f->fmt.pix.pixelformat); |
1809 | - return -EINVAL; |
1810 | + fmt = &format[0]; |
1811 | + em28xx_videodbg("Fourcc format (%08x) invalid. Using default (%08x).\n", |
1812 | + f->fmt.pix.pixelformat, fmt->fourcc); |
1813 | } |
1814 | |
1815 | if (dev->board.is_em2800) { |
1816 | diff --git a/drivers/misc/genwqe/card_base.h b/drivers/misc/genwqe/card_base.h |
1817 | index cb851c14ca4b..159f35b2bd11 100644 |
1818 | --- a/drivers/misc/genwqe/card_base.h |
1819 | +++ b/drivers/misc/genwqe/card_base.h |
1820 | @@ -404,7 +404,7 @@ struct genwqe_file { |
1821 | struct file *filp; |
1822 | |
1823 | struct fasync_struct *async_queue; |
1824 | - struct task_struct *owner; |
1825 | + struct pid *opener; |
1826 | struct list_head list; /* entry in list of open files */ |
1827 | |
1828 | spinlock_t map_lock; /* lock for dma_mappings */ |
1829 | diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c |
1830 | index 7f1b282d7d96..c0012ca4229e 100644 |
1831 | --- a/drivers/misc/genwqe/card_dev.c |
1832 | +++ b/drivers/misc/genwqe/card_dev.c |
1833 | @@ -52,7 +52,7 @@ static void genwqe_add_file(struct genwqe_dev *cd, struct genwqe_file *cfile) |
1834 | { |
1835 | unsigned long flags; |
1836 | |
1837 | - cfile->owner = current; |
1838 | + cfile->opener = get_pid(task_tgid(current)); |
1839 | spin_lock_irqsave(&cd->file_lock, flags); |
1840 | list_add(&cfile->list, &cd->file_list); |
1841 | spin_unlock_irqrestore(&cd->file_lock, flags); |
1842 | @@ -65,6 +65,7 @@ static int genwqe_del_file(struct genwqe_dev *cd, struct genwqe_file *cfile) |
1843 | spin_lock_irqsave(&cd->file_lock, flags); |
1844 | list_del(&cfile->list); |
1845 | spin_unlock_irqrestore(&cd->file_lock, flags); |
1846 | + put_pid(cfile->opener); |
1847 | |
1848 | return 0; |
1849 | } |
1850 | @@ -275,7 +276,7 @@ static int genwqe_kill_fasync(struct genwqe_dev *cd, int sig) |
1851 | return files; |
1852 | } |
1853 | |
1854 | -static int genwqe_force_sig(struct genwqe_dev *cd, int sig) |
1855 | +static int genwqe_terminate(struct genwqe_dev *cd) |
1856 | { |
1857 | unsigned int files = 0; |
1858 | unsigned long flags; |
1859 | @@ -283,7 +284,7 @@ static int genwqe_force_sig(struct genwqe_dev *cd, int sig) |
1860 | |
1861 | spin_lock_irqsave(&cd->file_lock, flags); |
1862 | list_for_each_entry(cfile, &cd->file_list, list) { |
1863 | - force_sig(sig, cfile->owner); |
1864 | + kill_pid(cfile->opener, SIGKILL, 1); |
1865 | files++; |
1866 | } |
1867 | spin_unlock_irqrestore(&cd->file_lock, flags); |
1868 | @@ -1356,7 +1357,7 @@ static int genwqe_inform_and_stop_processes(struct genwqe_dev *cd) |
1869 | dev_warn(&pci_dev->dev, |
1870 | "[%s] send SIGKILL and wait ...\n", __func__); |
1871 | |
1872 | - rc = genwqe_force_sig(cd, SIGKILL); /* force terminate */ |
1873 | + rc = genwqe_terminate(cd); |
1874 | if (rc) { |
1875 | /* Give kill_timout more seconds to end processes */ |
1876 | for (i = 0; (i < genwqe_kill_timeout) && |
1877 | diff --git a/drivers/misc/vmw_vmci/vmci_driver.c b/drivers/misc/vmw_vmci/vmci_driver.c |
1878 | index d7eaf1eb11e7..003bfba40758 100644 |
1879 | --- a/drivers/misc/vmw_vmci/vmci_driver.c |
1880 | +++ b/drivers/misc/vmw_vmci/vmci_driver.c |
1881 | @@ -113,5 +113,5 @@ module_exit(vmci_drv_exit); |
1882 | |
1883 | MODULE_AUTHOR("VMware, Inc."); |
1884 | MODULE_DESCRIPTION("VMware Virtual Machine Communication Interface."); |
1885 | -MODULE_VERSION("1.1.5.0-k"); |
1886 | +MODULE_VERSION("1.1.6.0-k"); |
1887 | MODULE_LICENSE("GPL v2"); |
1888 | diff --git a/drivers/misc/vmw_vmci/vmci_resource.c b/drivers/misc/vmw_vmci/vmci_resource.c |
1889 | index 9a53a30de445..f1164602cec1 100644 |
1890 | --- a/drivers/misc/vmw_vmci/vmci_resource.c |
1891 | +++ b/drivers/misc/vmw_vmci/vmci_resource.c |
1892 | @@ -56,7 +56,8 @@ static struct vmci_resource *vmci_resource_lookup(struct vmci_handle handle, |
1893 | |
1894 | if (r->type == type && |
1895 | rid == handle.resource && |
1896 | - (cid == handle.context || cid == VMCI_INVALID_ID)) { |
1897 | + (cid == handle.context || cid == VMCI_INVALID_ID || |
1898 | + handle.context == VMCI_INVALID_ID)) { |
1899 | resource = r; |
1900 | break; |
1901 | } |
1902 | diff --git a/drivers/mmc/host/sdhci-pci-o2micro.c b/drivers/mmc/host/sdhci-pci-o2micro.c |
1903 | index d48f03104b5b..e417e4274d66 100644 |
1904 | --- a/drivers/mmc/host/sdhci-pci-o2micro.c |
1905 | +++ b/drivers/mmc/host/sdhci-pci-o2micro.c |
1906 | @@ -334,6 +334,9 @@ int sdhci_pci_o2_probe(struct sdhci_pci_chip *chip) |
1907 | pci_write_config_byte(chip->pdev, O2_SD_LOCK_WP, scratch); |
1908 | break; |
1909 | case PCI_DEVICE_ID_O2_SEABIRD0: |
1910 | + if (chip->pdev->revision == 0x01) |
1911 | + chip->quirks |= SDHCI_QUIRK_DELAY_AFTER_POWER; |
1912 | + /* fall through */ |
1913 | case PCI_DEVICE_ID_O2_SEABIRD1: |
1914 | /* UnLock WP */ |
1915 | ret = pci_read_config_byte(chip->pdev, |
1916 | diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1917 | index 029513294984..75607267e656 100644 |
1918 | --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1919 | +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |
1920 | @@ -3419,6 +3419,10 @@ static void ixgbevf_tx_csum(struct ixgbevf_ring *tx_ring, |
1921 | skb_checksum_help(skb); |
1922 | goto no_csum; |
1923 | } |
1924 | + |
1925 | + if (first->protocol == htons(ETH_P_IP)) |
1926 | + type_tucmd |= IXGBE_ADVTXD_TUCMD_IPV4; |
1927 | + |
1928 | /* update TX checksum flag */ |
1929 | first->tx_flags |= IXGBE_TX_FLAGS_CSUM; |
1930 | vlan_macip_lens = skb_checksum_start_offset(skb) - |
1931 | diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c |
1932 | index b09a6b80d107..355c5fb802cd 100644 |
1933 | --- a/drivers/net/ethernet/qlogic/qla3xxx.c |
1934 | +++ b/drivers/net/ethernet/qlogic/qla3xxx.c |
1935 | @@ -380,8 +380,6 @@ static void fm93c56a_select(struct ql3_adapter *qdev) |
1936 | |
1937 | qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_1; |
1938 | ql_write_nvram_reg(qdev, spir, ISP_NVRAM_MASK | qdev->eeprom_cmd_data); |
1939 | - ql_write_nvram_reg(qdev, spir, |
1940 | - ((ISP_NVRAM_MASK << 16) | qdev->eeprom_cmd_data)); |
1941 | } |
1942 | |
1943 | /* |
1944 | diff --git a/drivers/net/tun.c b/drivers/net/tun.c |
1945 | index eb6dc28e5e52..0260bc15bc0c 100644 |
1946 | --- a/drivers/net/tun.c |
1947 | +++ b/drivers/net/tun.c |
1948 | @@ -1570,6 +1570,8 @@ static void tun_setup(struct net_device *dev) |
1949 | */ |
1950 | static int tun_validate(struct nlattr *tb[], struct nlattr *data[]) |
1951 | { |
1952 | + if (!data) |
1953 | + return 0; |
1954 | return -EINVAL; |
1955 | } |
1956 | |
1957 | diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c |
1958 | index 75f7a7b549df..21aec5c252ee 100644 |
1959 | --- a/drivers/net/wireless/ath/ath10k/wmi.c |
1960 | +++ b/drivers/net/wireless/ath/ath10k/wmi.c |
1961 | @@ -1822,6 +1822,12 @@ int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id) |
1962 | if (ret) |
1963 | dev_kfree_skb_any(skb); |
1964 | |
1965 | + if (ret == -EAGAIN) { |
1966 | + ath10k_warn(ar, "wmi command %d timeout, restarting hardware\n", |
1967 | + cmd_id); |
1968 | + queue_work(ar->workqueue, &ar->restart_work); |
1969 | + } |
1970 | + |
1971 | return ret; |
1972 | } |
1973 | |
1974 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c |
1975 | index d8b79cb72b58..e7584b842dce 100644 |
1976 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c |
1977 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c |
1978 | @@ -77,6 +77,8 @@ static u16 d11ac_bw(enum brcmu_chan_bw bw) |
1979 | return BRCMU_CHSPEC_D11AC_BW_40; |
1980 | case BRCMU_CHAN_BW_80: |
1981 | return BRCMU_CHSPEC_D11AC_BW_80; |
1982 | + case BRCMU_CHAN_BW_160: |
1983 | + return BRCMU_CHSPEC_D11AC_BW_160; |
1984 | default: |
1985 | WARN_ON(1); |
1986 | } |
1987 | @@ -190,8 +192,38 @@ static void brcmu_d11ac_decchspec(struct brcmu_chan *ch) |
1988 | break; |
1989 | } |
1990 | break; |
1991 | - case BRCMU_CHSPEC_D11AC_BW_8080: |
1992 | case BRCMU_CHSPEC_D11AC_BW_160: |
1993 | + switch (ch->sb) { |
1994 | + case BRCMU_CHAN_SB_LLL: |
1995 | + ch->control_ch_num -= CH_70MHZ_APART; |
1996 | + break; |
1997 | + case BRCMU_CHAN_SB_LLU: |
1998 | + ch->control_ch_num -= CH_50MHZ_APART; |
1999 | + break; |
2000 | + case BRCMU_CHAN_SB_LUL: |
2001 | + ch->control_ch_num -= CH_30MHZ_APART; |
2002 | + break; |
2003 | + case BRCMU_CHAN_SB_LUU: |
2004 | + ch->control_ch_num -= CH_10MHZ_APART; |
2005 | + break; |
2006 | + case BRCMU_CHAN_SB_ULL: |
2007 | + ch->control_ch_num += CH_10MHZ_APART; |
2008 | + break; |
2009 | + case BRCMU_CHAN_SB_ULU: |
2010 | + ch->control_ch_num += CH_30MHZ_APART; |
2011 | + break; |
2012 | + case BRCMU_CHAN_SB_UUL: |
2013 | + ch->control_ch_num += CH_50MHZ_APART; |
2014 | + break; |
2015 | + case BRCMU_CHAN_SB_UUU: |
2016 | + ch->control_ch_num += CH_70MHZ_APART; |
2017 | + break; |
2018 | + default: |
2019 | + WARN_ON_ONCE(1); |
2020 | + break; |
2021 | + } |
2022 | + break; |
2023 | + case BRCMU_CHSPEC_D11AC_BW_8080: |
2024 | default: |
2025 | WARN_ON_ONCE(1); |
2026 | break; |
2027 | diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h |
2028 | index 7b9a77981df1..75b2a0438cfa 100644 |
2029 | --- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h |
2030 | +++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h |
2031 | @@ -29,6 +29,8 @@ |
2032 | #define CH_UPPER_SB 0x01 |
2033 | #define CH_LOWER_SB 0x02 |
2034 | #define CH_EWA_VALID 0x04 |
2035 | +#define CH_70MHZ_APART 14 |
2036 | +#define CH_50MHZ_APART 10 |
2037 | #define CH_30MHZ_APART 6 |
2038 | #define CH_20MHZ_APART 4 |
2039 | #define CH_10MHZ_APART 2 |
2040 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c |
2041 | index f251c2afebfc..f45c99756aed 100644 |
2042 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c |
2043 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c |
2044 | @@ -1207,7 +1207,11 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, |
2045 | !(info->flags & IEEE80211_TX_STAT_AMPDU)) |
2046 | return; |
2047 | |
2048 | - rs_rate_from_ucode_rate(tx_resp_hwrate, info->band, &tx_resp_rate); |
2049 | + if (rs_rate_from_ucode_rate(tx_resp_hwrate, info->band, |
2050 | + &tx_resp_rate)) { |
2051 | + WARN_ON_ONCE(1); |
2052 | + return; |
2053 | + } |
2054 | |
2055 | #ifdef CONFIG_MAC80211_DEBUGFS |
2056 | /* Disable last tx check if we are debugging with fixed rate but |
2057 | @@ -1263,7 +1267,10 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, |
2058 | */ |
2059 | table = &lq_sta->lq; |
2060 | lq_hwrate = le32_to_cpu(table->rs_table[0]); |
2061 | - rs_rate_from_ucode_rate(lq_hwrate, info->band, &lq_rate); |
2062 | + if (rs_rate_from_ucode_rate(lq_hwrate, info->band, &lq_rate)) { |
2063 | + WARN_ON_ONCE(1); |
2064 | + return; |
2065 | + } |
2066 | |
2067 | /* Here we actually compare this rate to the latest LQ command */ |
2068 | if (!rs_rate_equal(&tx_resp_rate, &lq_rate, allow_ant_mismatch)) { |
2069 | @@ -1365,8 +1372,12 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, |
2070 | /* Collect data for each rate used during failed TX attempts */ |
2071 | for (i = 0; i <= retries; ++i) { |
2072 | lq_hwrate = le32_to_cpu(table->rs_table[i]); |
2073 | - rs_rate_from_ucode_rate(lq_hwrate, info->band, |
2074 | - &lq_rate); |
2075 | + if (rs_rate_from_ucode_rate(lq_hwrate, info->band, |
2076 | + &lq_rate)) { |
2077 | + WARN_ON_ONCE(1); |
2078 | + return; |
2079 | + } |
2080 | + |
2081 | /* |
2082 | * Only collect stats if retried rate is in the same RS |
2083 | * table as active/search. |
2084 | @@ -3261,7 +3272,10 @@ static void rs_build_rates_table_from_fixed(struct iwl_mvm *mvm, |
2085 | for (i = 0; i < num_rates; i++) |
2086 | lq_cmd->rs_table[i] = ucode_rate_le32; |
2087 | |
2088 | - rs_rate_from_ucode_rate(ucode_rate, band, &rate); |
2089 | + if (rs_rate_from_ucode_rate(ucode_rate, band, &rate)) { |
2090 | + WARN_ON_ONCE(1); |
2091 | + return; |
2092 | + } |
2093 | |
2094 | if (is_mimo(&rate)) |
2095 | lq_cmd->mimo_delim = num_rates - 1; |
2096 | diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
2097 | index 996a928142ad..e58a50d31d96 100644 |
2098 | --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
2099 | +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c |
2100 | @@ -1030,6 +1030,14 @@ void iwl_pcie_rx_free(struct iwl_trans *trans) |
2101 | kfree(trans_pcie->rxq); |
2102 | } |
2103 | |
2104 | +static void iwl_pcie_rx_move_to_allocator(struct iwl_rxq *rxq, |
2105 | + struct iwl_rb_allocator *rba) |
2106 | +{ |
2107 | + spin_lock(&rba->lock); |
2108 | + list_splice_tail_init(&rxq->rx_used, &rba->rbd_empty); |
2109 | + spin_unlock(&rba->lock); |
2110 | +} |
2111 | + |
2112 | /* |
2113 | * iwl_pcie_rx_reuse_rbd - Recycle used RBDs |
2114 | * |
2115 | @@ -1061,9 +1069,7 @@ static void iwl_pcie_rx_reuse_rbd(struct iwl_trans *trans, |
2116 | if ((rxq->used_count % RX_CLAIM_REQ_ALLOC) == RX_POST_REQ_ALLOC) { |
2117 | /* Move the 2 RBDs to the allocator ownership. |
2118 | Allocator has another 6 from pool for the request completion*/ |
2119 | - spin_lock(&rba->lock); |
2120 | - list_splice_tail_init(&rxq->rx_used, &rba->rbd_empty); |
2121 | - spin_unlock(&rba->lock); |
2122 | + iwl_pcie_rx_move_to_allocator(rxq, rba); |
2123 | |
2124 | atomic_inc(&rba->req_pending); |
2125 | queue_work(rba->alloc_wq, &rba->rx_alloc); |
2126 | @@ -1233,10 +1239,18 @@ restart: |
2127 | IWL_DEBUG_RX(trans, "Q %d: HW = SW = %d\n", rxq->id, r); |
2128 | |
2129 | while (i != r) { |
2130 | + struct iwl_rb_allocator *rba = &trans_pcie->rba; |
2131 | struct iwl_rx_mem_buffer *rxb; |
2132 | - |
2133 | - if (unlikely(rxq->used_count == rxq->queue_size / 2)) |
2134 | + /* number of RBDs still waiting for page allocation */ |
2135 | + u32 rb_pending_alloc = |
2136 | + atomic_read(&trans_pcie->rba.req_pending) * |
2137 | + RX_CLAIM_REQ_ALLOC; |
2138 | + |
2139 | + if (unlikely(rb_pending_alloc >= rxq->queue_size / 2 && |
2140 | + !emergency)) { |
2141 | + iwl_pcie_rx_move_to_allocator(rxq, rba); |
2142 | emergency = true; |
2143 | + } |
2144 | |
2145 | if (trans->cfg->mq_rx_supported) { |
2146 | /* |
2147 | @@ -1279,17 +1293,13 @@ restart: |
2148 | iwl_pcie_rx_allocator_get(trans, rxq); |
2149 | |
2150 | if (rxq->used_count % RX_CLAIM_REQ_ALLOC == 0 && !emergency) { |
2151 | - struct iwl_rb_allocator *rba = &trans_pcie->rba; |
2152 | - |
2153 | /* Add the remaining empty RBDs for allocator use */ |
2154 | - spin_lock(&rba->lock); |
2155 | - list_splice_tail_init(&rxq->rx_used, &rba->rbd_empty); |
2156 | - spin_unlock(&rba->lock); |
2157 | + iwl_pcie_rx_move_to_allocator(rxq, rba); |
2158 | } else if (emergency) { |
2159 | count++; |
2160 | if (count == 8) { |
2161 | count = 0; |
2162 | - if (rxq->used_count < rxq->queue_size / 3) |
2163 | + if (rb_pending_alloc < rxq->queue_size / 3) |
2164 | emergency = false; |
2165 | |
2166 | rxq->read = i; |
2167 | diff --git a/drivers/net/wireless/marvell/libertas/if_usb.c b/drivers/net/wireless/marvell/libertas/if_usb.c |
2168 | index aba0c9995b14..a605d569f663 100644 |
2169 | --- a/drivers/net/wireless/marvell/libertas/if_usb.c |
2170 | +++ b/drivers/net/wireless/marvell/libertas/if_usb.c |
2171 | @@ -468,8 +468,6 @@ static int __if_usb_submit_rx_urb(struct if_usb_card *cardp, |
2172 | MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, |
2173 | cardp); |
2174 | |
2175 | - cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET; |
2176 | - |
2177 | lbs_deb_usb2(&cardp->udev->dev, "Pointer for rx_urb %p\n", cardp->rx_urb); |
2178 | if ((ret = usb_submit_urb(cardp->rx_urb, GFP_ATOMIC))) { |
2179 | lbs_deb_usbd(&cardp->udev->dev, "Submit Rx URB failed: %d\n", ret); |
2180 | diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c |
2181 | index de6d3b749c60..5768a4749564 100644 |
2182 | --- a/drivers/nvdimm/bus.c |
2183 | +++ b/drivers/nvdimm/bus.c |
2184 | @@ -424,6 +424,8 @@ static void nd_async_device_register(void *d, async_cookie_t cookie) |
2185 | put_device(dev); |
2186 | } |
2187 | put_device(dev); |
2188 | + if (dev->parent) |
2189 | + put_device(dev->parent); |
2190 | } |
2191 | |
2192 | static void nd_async_device_unregister(void *d, async_cookie_t cookie) |
2193 | @@ -443,6 +445,8 @@ void __nd_device_register(struct device *dev) |
2194 | if (!dev) |
2195 | return; |
2196 | dev->bus = &nvdimm_bus_type; |
2197 | + if (dev->parent) |
2198 | + get_device(dev->parent); |
2199 | get_device(dev); |
2200 | async_schedule_domain(nd_async_device_register, dev, |
2201 | &nd_async_domain); |
2202 | diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c |
2203 | index 0e9a9dbeb184..37f393f27efc 100644 |
2204 | --- a/drivers/pci/msi.c |
2205 | +++ b/drivers/pci/msi.c |
2206 | @@ -981,7 +981,6 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, |
2207 | } |
2208 | } |
2209 | } |
2210 | - WARN_ON(!!dev->msix_enabled); |
2211 | |
2212 | /* Check whether driver already requested for MSI irq */ |
2213 | if (dev->msi_enabled) { |
2214 | @@ -1068,8 +1067,6 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, |
2215 | if (!pci_msi_supported(dev, minvec)) |
2216 | return -EINVAL; |
2217 | |
2218 | - WARN_ON(!!dev->msi_enabled); |
2219 | - |
2220 | /* Check whether driver already requested MSI-X irqs */ |
2221 | if (dev->msix_enabled) { |
2222 | dev_info(&dev->dev, |
2223 | @@ -1080,6 +1077,9 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, |
2224 | if (maxvec < minvec) |
2225 | return -ERANGE; |
2226 | |
2227 | + if (WARN_ON_ONCE(dev->msi_enabled)) |
2228 | + return -EINVAL; |
2229 | + |
2230 | nvec = pci_msi_vec_count(dev); |
2231 | if (nvec < 0) |
2232 | return nvec; |
2233 | @@ -1138,6 +1138,9 @@ static int __pci_enable_msix_range(struct pci_dev *dev, |
2234 | if (maxvec < minvec) |
2235 | return -ERANGE; |
2236 | |
2237 | + if (WARN_ON_ONCE(dev->msix_enabled)) |
2238 | + return -EINVAL; |
2239 | + |
2240 | for (;;) { |
2241 | if (affinity) { |
2242 | nvec = irq_calc_affinity_vectors(dev->irq_affinity, |
2243 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
2244 | index 2250f0d33481..dedb12083d86 100644 |
2245 | --- a/drivers/pci/quirks.c |
2246 | +++ b/drivers/pci/quirks.c |
2247 | @@ -3124,7 +3124,11 @@ static void disable_igfx_irq(struct pci_dev *dev) |
2248 | |
2249 | pci_iounmap(dev, regs); |
2250 | } |
2251 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0042, disable_igfx_irq); |
2252 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0046, disable_igfx_irq); |
2253 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x004a, disable_igfx_irq); |
2254 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); |
2255 | +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0106, disable_igfx_irq); |
2256 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); |
2257 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); |
2258 | |
2259 | diff --git a/drivers/pcmcia/ricoh.h b/drivers/pcmcia/ricoh.h |
2260 | index 01098c841f87..8ac7b138c094 100644 |
2261 | --- a/drivers/pcmcia/ricoh.h |
2262 | +++ b/drivers/pcmcia/ricoh.h |
2263 | @@ -119,6 +119,10 @@ |
2264 | #define RL5C4XX_MISC_CONTROL 0x2F /* 8 bit */ |
2265 | #define RL5C4XX_ZV_ENABLE 0x08 |
2266 | |
2267 | +/* Misc Control 3 Register */ |
2268 | +#define RL5C4XX_MISC3 0x00A2 /* 16 bit */ |
2269 | +#define RL5C47X_MISC3_CB_CLKRUN_DIS BIT(1) |
2270 | + |
2271 | #ifdef __YENTA_H |
2272 | |
2273 | #define rl_misc(socket) ((socket)->private[0]) |
2274 | @@ -156,6 +160,35 @@ static void ricoh_set_zv(struct yenta_socket *socket) |
2275 | } |
2276 | } |
2277 | |
2278 | +static void ricoh_set_clkrun(struct yenta_socket *socket, bool quiet) |
2279 | +{ |
2280 | + u16 misc3; |
2281 | + |
2282 | + /* |
2283 | + * RL5C475II likely has this setting, too, however no datasheet |
2284 | + * is publicly available for this chip |
2285 | + */ |
2286 | + if (socket->dev->device != PCI_DEVICE_ID_RICOH_RL5C476 && |
2287 | + socket->dev->device != PCI_DEVICE_ID_RICOH_RL5C478) |
2288 | + return; |
2289 | + |
2290 | + if (socket->dev->revision < 0x80) |
2291 | + return; |
2292 | + |
2293 | + misc3 = config_readw(socket, RL5C4XX_MISC3); |
2294 | + if (misc3 & RL5C47X_MISC3_CB_CLKRUN_DIS) { |
2295 | + if (!quiet) |
2296 | + dev_dbg(&socket->dev->dev, |
2297 | + "CLKRUN feature already disabled\n"); |
2298 | + } else if (disable_clkrun) { |
2299 | + if (!quiet) |
2300 | + dev_info(&socket->dev->dev, |
2301 | + "Disabling CLKRUN feature\n"); |
2302 | + misc3 |= RL5C47X_MISC3_CB_CLKRUN_DIS; |
2303 | + config_writew(socket, RL5C4XX_MISC3, misc3); |
2304 | + } |
2305 | +} |
2306 | + |
2307 | static void ricoh_save_state(struct yenta_socket *socket) |
2308 | { |
2309 | rl_misc(socket) = config_readw(socket, RL5C4XX_MISC); |
2310 | @@ -172,6 +205,7 @@ static void ricoh_restore_state(struct yenta_socket *socket) |
2311 | config_writew(socket, RL5C4XX_16BIT_IO_0, rl_io(socket)); |
2312 | config_writew(socket, RL5C4XX_16BIT_MEM_0, rl_mem(socket)); |
2313 | config_writew(socket, RL5C4XX_CONFIG, rl_config(socket)); |
2314 | + ricoh_set_clkrun(socket, true); |
2315 | } |
2316 | |
2317 | |
2318 | @@ -197,6 +231,7 @@ static int ricoh_override(struct yenta_socket *socket) |
2319 | config_writew(socket, RL5C4XX_CONFIG, config); |
2320 | |
2321 | ricoh_set_zv(socket); |
2322 | + ricoh_set_clkrun(socket, false); |
2323 | |
2324 | return 0; |
2325 | } |
2326 | diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c |
2327 | index 5d6d9b1549bc..5034422a1d96 100644 |
2328 | --- a/drivers/pcmcia/yenta_socket.c |
2329 | +++ b/drivers/pcmcia/yenta_socket.c |
2330 | @@ -26,7 +26,8 @@ |
2331 | |
2332 | static bool disable_clkrun; |
2333 | module_param(disable_clkrun, bool, 0444); |
2334 | -MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please try this option"); |
2335 | +MODULE_PARM_DESC(disable_clkrun, |
2336 | + "If PC card doesn't function properly, please try this option (TI and Ricoh bridges only)"); |
2337 | |
2338 | static bool isa_probe = 1; |
2339 | module_param(isa_probe, bool, 0444); |
2340 | diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c |
2341 | index 6556dbeae65e..ac251c62bc66 100644 |
2342 | --- a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c |
2343 | +++ b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c |
2344 | @@ -319,6 +319,8 @@ static int pmic_mpp_set_mux(struct pinctrl_dev *pctldev, unsigned function, |
2345 | pad->function = function; |
2346 | |
2347 | ret = pmic_mpp_write_mode_ctl(state, pad); |
2348 | + if (ret < 0) |
2349 | + return ret; |
2350 | |
2351 | val = pad->is_enabled << PMIC_MPP_REG_MASTER_EN_SHIFT; |
2352 | |
2353 | @@ -343,13 +345,12 @@ static int pmic_mpp_config_get(struct pinctrl_dev *pctldev, |
2354 | |
2355 | switch (param) { |
2356 | case PIN_CONFIG_BIAS_DISABLE: |
2357 | - arg = pad->pullup == PMIC_MPP_PULL_UP_OPEN; |
2358 | + if (pad->pullup != PMIC_MPP_PULL_UP_OPEN) |
2359 | + return -EINVAL; |
2360 | + arg = 1; |
2361 | break; |
2362 | case PIN_CONFIG_BIAS_PULL_UP: |
2363 | switch (pad->pullup) { |
2364 | - case PMIC_MPP_PULL_UP_OPEN: |
2365 | - arg = 0; |
2366 | - break; |
2367 | case PMIC_MPP_PULL_UP_0P6KOHM: |
2368 | arg = 600; |
2369 | break; |
2370 | @@ -364,13 +365,17 @@ static int pmic_mpp_config_get(struct pinctrl_dev *pctldev, |
2371 | } |
2372 | break; |
2373 | case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: |
2374 | - arg = !pad->is_enabled; |
2375 | + if (pad->is_enabled) |
2376 | + return -EINVAL; |
2377 | + arg = 1; |
2378 | break; |
2379 | case PIN_CONFIG_POWER_SOURCE: |
2380 | arg = pad->power_source; |
2381 | break; |
2382 | case PIN_CONFIG_INPUT_ENABLE: |
2383 | - arg = pad->input_enabled; |
2384 | + if (!pad->input_enabled) |
2385 | + return -EINVAL; |
2386 | + arg = 1; |
2387 | break; |
2388 | case PIN_CONFIG_OUTPUT: |
2389 | arg = pad->out_value; |
2390 | @@ -382,7 +387,9 @@ static int pmic_mpp_config_get(struct pinctrl_dev *pctldev, |
2391 | arg = pad->amux_input; |
2392 | break; |
2393 | case PMIC_MPP_CONF_PAIRED: |
2394 | - arg = pad->paired; |
2395 | + if (!pad->paired) |
2396 | + return -EINVAL; |
2397 | + arg = 1; |
2398 | break; |
2399 | case PIN_CONFIG_DRIVE_STRENGTH: |
2400 | arg = pad->drive_strength; |
2401 | @@ -455,7 +462,7 @@ static int pmic_mpp_config_set(struct pinctrl_dev *pctldev, unsigned int pin, |
2402 | pad->dtest = arg; |
2403 | break; |
2404 | case PIN_CONFIG_DRIVE_STRENGTH: |
2405 | - arg = pad->drive_strength; |
2406 | + pad->drive_strength = arg; |
2407 | break; |
2408 | case PMIC_MPP_CONF_AMUX_ROUTE: |
2409 | if (arg >= PMIC_MPP_AMUX_ROUTE_ABUS4) |
2410 | @@ -502,6 +509,10 @@ static int pmic_mpp_config_set(struct pinctrl_dev *pctldev, unsigned int pin, |
2411 | if (ret < 0) |
2412 | return ret; |
2413 | |
2414 | + ret = pmic_mpp_write(state, pad, PMIC_MPP_REG_SINK_CTL, pad->drive_strength); |
2415 | + if (ret < 0) |
2416 | + return ret; |
2417 | + |
2418 | val = pad->is_enabled << PMIC_MPP_REG_MASTER_EN_SHIFT; |
2419 | |
2420 | return pmic_mpp_write(state, pad, PMIC_MPP_REG_EN_CTL, val); |
2421 | diff --git a/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c b/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c |
2422 | index d3f5501d17ee..e86c4de2f6db 100644 |
2423 | --- a/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c |
2424 | +++ b/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c |
2425 | @@ -260,22 +260,32 @@ static int pm8xxx_pin_config_get(struct pinctrl_dev *pctldev, |
2426 | |
2427 | switch (param) { |
2428 | case PIN_CONFIG_BIAS_DISABLE: |
2429 | - arg = pin->bias == PM8XXX_GPIO_BIAS_NP; |
2430 | + if (pin->bias != PM8XXX_GPIO_BIAS_NP) |
2431 | + return -EINVAL; |
2432 | + arg = 1; |
2433 | break; |
2434 | case PIN_CONFIG_BIAS_PULL_DOWN: |
2435 | - arg = pin->bias == PM8XXX_GPIO_BIAS_PD; |
2436 | + if (pin->bias != PM8XXX_GPIO_BIAS_PD) |
2437 | + return -EINVAL; |
2438 | + arg = 1; |
2439 | break; |
2440 | case PIN_CONFIG_BIAS_PULL_UP: |
2441 | - arg = pin->bias <= PM8XXX_GPIO_BIAS_PU_1P5_30; |
2442 | + if (pin->bias > PM8XXX_GPIO_BIAS_PU_1P5_30) |
2443 | + return -EINVAL; |
2444 | + arg = 1; |
2445 | break; |
2446 | case PM8XXX_QCOM_PULL_UP_STRENGTH: |
2447 | arg = pin->pull_up_strength; |
2448 | break; |
2449 | case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: |
2450 | - arg = pin->disable; |
2451 | + if (!pin->disable) |
2452 | + return -EINVAL; |
2453 | + arg = 1; |
2454 | break; |
2455 | case PIN_CONFIG_INPUT_ENABLE: |
2456 | - arg = pin->mode == PM8XXX_GPIO_MODE_INPUT; |
2457 | + if (pin->mode != PM8XXX_GPIO_MODE_INPUT) |
2458 | + return -EINVAL; |
2459 | + arg = 1; |
2460 | break; |
2461 | case PIN_CONFIG_OUTPUT: |
2462 | if (pin->mode & PM8XXX_GPIO_MODE_OUTPUT) |
2463 | @@ -290,10 +300,14 @@ static int pm8xxx_pin_config_get(struct pinctrl_dev *pctldev, |
2464 | arg = pin->output_strength; |
2465 | break; |
2466 | case PIN_CONFIG_DRIVE_PUSH_PULL: |
2467 | - arg = !pin->open_drain; |
2468 | + if (pin->open_drain) |
2469 | + return -EINVAL; |
2470 | + arg = 1; |
2471 | break; |
2472 | case PIN_CONFIG_DRIVE_OPEN_DRAIN: |
2473 | - arg = pin->open_drain; |
2474 | + if (!pin->open_drain) |
2475 | + return -EINVAL; |
2476 | + arg = 1; |
2477 | break; |
2478 | default: |
2479 | return -EINVAL; |
2480 | diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c |
2481 | index fd3d9419c468..312cb7fec5b0 100644 |
2482 | --- a/drivers/rpmsg/qcom_smd.c |
2483 | +++ b/drivers/rpmsg/qcom_smd.c |
2484 | @@ -1012,8 +1012,10 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed |
2485 | |
2486 | channel->edge = edge; |
2487 | channel->name = kstrdup(name, GFP_KERNEL); |
2488 | - if (!channel->name) |
2489 | - return ERR_PTR(-ENOMEM); |
2490 | + if (!channel->name) { |
2491 | + ret = -ENOMEM; |
2492 | + goto free_channel; |
2493 | + } |
2494 | |
2495 | mutex_init(&channel->tx_lock); |
2496 | spin_lock_init(&channel->recv_lock); |
2497 | @@ -1062,6 +1064,7 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed |
2498 | |
2499 | free_name_and_channel: |
2500 | kfree(channel->name); |
2501 | +free_channel: |
2502 | kfree(channel); |
2503 | |
2504 | return ERR_PTR(ret); |
2505 | diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c |
2506 | index 71cb05b1c3eb..60be0742e2c8 100644 |
2507 | --- a/drivers/scsi/esp_scsi.c |
2508 | +++ b/drivers/scsi/esp_scsi.c |
2509 | @@ -1349,6 +1349,7 @@ static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent, |
2510 | |
2511 | bytes_sent = esp->data_dma_len; |
2512 | bytes_sent -= ecount; |
2513 | + bytes_sent -= esp->send_cmd_residual; |
2514 | |
2515 | /* |
2516 | * The am53c974 has a DMA 'pecularity'. The doc states: |
2517 | diff --git a/drivers/scsi/esp_scsi.h b/drivers/scsi/esp_scsi.h |
2518 | index 84dcbe4a6268..55be43fe7667 100644 |
2519 | --- a/drivers/scsi/esp_scsi.h |
2520 | +++ b/drivers/scsi/esp_scsi.h |
2521 | @@ -540,6 +540,8 @@ struct esp { |
2522 | |
2523 | void *dma; |
2524 | int dmarev; |
2525 | + |
2526 | + u32 send_cmd_residual; |
2527 | }; |
2528 | |
2529 | /* A front-end driver for the ESP chip should do the following in |
2530 | diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c |
2531 | index 6df06e716da1..c05fc61a383b 100644 |
2532 | --- a/drivers/scsi/lpfc/lpfc_sli.c |
2533 | +++ b/drivers/scsi/lpfc/lpfc_sli.c |
2534 | @@ -3512,6 +3512,7 @@ lpfc_sli_handle_slow_ring_event_s4(struct lpfc_hba *phba, |
2535 | struct hbq_dmabuf *dmabuf; |
2536 | struct lpfc_cq_event *cq_event; |
2537 | unsigned long iflag; |
2538 | + int count = 0; |
2539 | |
2540 | spin_lock_irqsave(&phba->hbalock, iflag); |
2541 | phba->hba_flag &= ~HBA_SP_QUEUE_EVT; |
2542 | @@ -3533,16 +3534,22 @@ lpfc_sli_handle_slow_ring_event_s4(struct lpfc_hba *phba, |
2543 | if (irspiocbq) |
2544 | lpfc_sli_sp_handle_rspiocb(phba, pring, |
2545 | irspiocbq); |
2546 | + count++; |
2547 | break; |
2548 | case CQE_CODE_RECEIVE: |
2549 | case CQE_CODE_RECEIVE_V1: |
2550 | dmabuf = container_of(cq_event, struct hbq_dmabuf, |
2551 | cq_event); |
2552 | lpfc_sli4_handle_received_buffer(phba, dmabuf); |
2553 | + count++; |
2554 | break; |
2555 | default: |
2556 | break; |
2557 | } |
2558 | + |
2559 | + /* Limit the number of events to 64 to avoid soft lockups */ |
2560 | + if (count == 64) |
2561 | + break; |
2562 | } |
2563 | } |
2564 | |
2565 | diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c |
2566 | index 26c67c42985c..1002124bd8bf 100644 |
2567 | --- a/drivers/scsi/mac_esp.c |
2568 | +++ b/drivers/scsi/mac_esp.c |
2569 | @@ -426,6 +426,8 @@ static void mac_esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count, |
2570 | scsi_esp_cmd(esp, ESP_CMD_TI); |
2571 | } |
2572 | } |
2573 | + |
2574 | + esp->send_cmd_residual = esp_count; |
2575 | } |
2576 | |
2577 | static int mac_esp_irq_pending(struct esp *esp) |
2578 | diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c |
2579 | index 090fdcdd15c9..5de024a50e15 100644 |
2580 | --- a/drivers/scsi/megaraid/megaraid_sas_base.c |
2581 | +++ b/drivers/scsi/megaraid/megaraid_sas_base.c |
2582 | @@ -6901,6 +6901,9 @@ static int megasas_mgmt_compat_ioctl_fw(struct file *file, unsigned long arg) |
2583 | get_user(user_sense_off, &cioc->sense_off)) |
2584 | return -EFAULT; |
2585 | |
2586 | + if (local_sense_off != user_sense_off) |
2587 | + return -EINVAL; |
2588 | + |
2589 | if (local_sense_len) { |
2590 | void __user **sense_ioc_ptr = |
2591 | (void __user **)((u8 *)((unsigned long)&ioc->frame.raw) + local_sense_off); |
2592 | diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c |
2593 | index 7792ed88d80b..9685f9b8be07 100644 |
2594 | --- a/drivers/soc/tegra/pmc.c |
2595 | +++ b/drivers/soc/tegra/pmc.c |
2596 | @@ -1189,7 +1189,7 @@ static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc) |
2597 | if (!pmc->soc->has_tsense_reset) |
2598 | return; |
2599 | |
2600 | - np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip"); |
2601 | + np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip"); |
2602 | if (!np) { |
2603 | dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled); |
2604 | return; |
2605 | diff --git a/drivers/tc/tc.c b/drivers/tc/tc.c |
2606 | index 3be9519654e5..cf3fad2cb871 100644 |
2607 | --- a/drivers/tc/tc.c |
2608 | +++ b/drivers/tc/tc.c |
2609 | @@ -2,7 +2,7 @@ |
2610 | * TURBOchannel bus services. |
2611 | * |
2612 | * Copyright (c) Harald Koerfgen, 1998 |
2613 | - * Copyright (c) 2001, 2003, 2005, 2006 Maciej W. Rozycki |
2614 | + * Copyright (c) 2001, 2003, 2005, 2006, 2018 Maciej W. Rozycki |
2615 | * Copyright (c) 2005 James Simmons |
2616 | * |
2617 | * This file is subject to the terms and conditions of the GNU |
2618 | @@ -10,6 +10,7 @@ |
2619 | * directory of this archive for more details. |
2620 | */ |
2621 | #include <linux/compiler.h> |
2622 | +#include <linux/dma-mapping.h> |
2623 | #include <linux/errno.h> |
2624 | #include <linux/init.h> |
2625 | #include <linux/ioport.h> |
2626 | @@ -92,6 +93,11 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus) |
2627 | tdev->dev.bus = &tc_bus_type; |
2628 | tdev->slot = slot; |
2629 | |
2630 | + /* TURBOchannel has 34-bit DMA addressing (16GiB space). */ |
2631 | + tdev->dma_mask = DMA_BIT_MASK(34); |
2632 | + tdev->dev.dma_mask = &tdev->dma_mask; |
2633 | + tdev->dev.coherent_dma_mask = DMA_BIT_MASK(34); |
2634 | + |
2635 | for (i = 0; i < 8; i++) { |
2636 | tdev->firmware[i] = |
2637 | readb(module + offset + TC_FIRM_VER + 4 * i); |
2638 | diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c |
2639 | index a260cde743e2..2db68dfe497d 100644 |
2640 | --- a/drivers/tty/serial/kgdboc.c |
2641 | +++ b/drivers/tty/serial/kgdboc.c |
2642 | @@ -133,6 +133,11 @@ static void kgdboc_unregister_kbd(void) |
2643 | |
2644 | static int kgdboc_option_setup(char *opt) |
2645 | { |
2646 | + if (!opt) { |
2647 | + pr_err("kgdboc: config string not provided\n"); |
2648 | + return -EINVAL; |
2649 | + } |
2650 | + |
2651 | if (strlen(opt) >= MAX_CONFIG_LEN) { |
2652 | printk(KERN_ERR "kgdboc: config string too long\n"); |
2653 | return -ENOSPC; |
2654 | diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c |
2655 | index f0a9ea2740df..cfbfef08c94a 100644 |
2656 | --- a/drivers/uio/uio.c |
2657 | +++ b/drivers/uio/uio.c |
2658 | @@ -249,6 +249,8 @@ static struct class uio_class = { |
2659 | .dev_groups = uio_groups, |
2660 | }; |
2661 | |
2662 | +bool uio_class_registered; |
2663 | + |
2664 | /* |
2665 | * device functions |
2666 | */ |
2667 | @@ -780,6 +782,9 @@ static int init_uio_class(void) |
2668 | printk(KERN_ERR "class_register failed for uio\n"); |
2669 | goto err_class_register; |
2670 | } |
2671 | + |
2672 | + uio_class_registered = true; |
2673 | + |
2674 | return 0; |
2675 | |
2676 | err_class_register: |
2677 | @@ -790,6 +795,7 @@ exit: |
2678 | |
2679 | static void release_uio_class(void) |
2680 | { |
2681 | + uio_class_registered = false; |
2682 | class_unregister(&uio_class); |
2683 | uio_major_cleanup(); |
2684 | } |
2685 | @@ -809,6 +815,9 @@ int __uio_register_device(struct module *owner, |
2686 | struct uio_device *idev; |
2687 | int ret = 0; |
2688 | |
2689 | + if (!uio_class_registered) |
2690 | + return -EPROBE_DEFER; |
2691 | + |
2692 | if (!parent || !info || !info->name || !info->version) |
2693 | return -EINVAL; |
2694 | |
2695 | diff --git a/drivers/usb/chipidea/otg.h b/drivers/usb/chipidea/otg.h |
2696 | index 9ecb598e48f0..a5557c70034a 100644 |
2697 | --- a/drivers/usb/chipidea/otg.h |
2698 | +++ b/drivers/usb/chipidea/otg.h |
2699 | @@ -20,7 +20,8 @@ void ci_handle_vbus_change(struct ci_hdrc *ci); |
2700 | static inline void ci_otg_queue_work(struct ci_hdrc *ci) |
2701 | { |
2702 | disable_irq_nosync(ci->irq); |
2703 | - queue_work(ci->wq, &ci->work); |
2704 | + if (queue_work(ci->wq, &ci->work) == false) |
2705 | + enable_irq(ci->irq); |
2706 | } |
2707 | |
2708 | #endif /* __DRIVERS_USB_CHIPIDEA_OTG_H */ |
2709 | diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c |
2710 | index ad8402906f77..9705bcdbc577 100644 |
2711 | --- a/drivers/usb/gadget/udc/atmel_usba_udc.c |
2712 | +++ b/drivers/usb/gadget/udc/atmel_usba_udc.c |
2713 | @@ -1922,6 +1922,8 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev, |
2714 | |
2715 | udc->errata = match->data; |
2716 | udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9g45-pmc"); |
2717 | + if (IS_ERR(udc->pmc)) |
2718 | + udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9rl-pmc"); |
2719 | if (IS_ERR(udc->pmc)) |
2720 | udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9x5-pmc"); |
2721 | if (udc->errata && IS_ERR(udc->pmc)) |
2722 | diff --git a/drivers/usb/usbip/vudc_main.c b/drivers/usb/usbip/vudc_main.c |
2723 | index 9e655714e389..916e2eefc886 100644 |
2724 | --- a/drivers/usb/usbip/vudc_main.c |
2725 | +++ b/drivers/usb/usbip/vudc_main.c |
2726 | @@ -85,6 +85,10 @@ static int __init init(void) |
2727 | cleanup: |
2728 | list_for_each_entry_safe(udc_dev, udc_dev2, &vudc_devices, dev_entry) { |
2729 | list_del(&udc_dev->dev_entry); |
2730 | + /* |
2731 | + * Just do platform_device_del() here, put_vudc_device() |
2732 | + * calls the platform_device_put() |
2733 | + */ |
2734 | platform_device_del(udc_dev->pdev); |
2735 | put_vudc_device(udc_dev); |
2736 | } |
2737 | @@ -101,7 +105,11 @@ static void __exit cleanup(void) |
2738 | |
2739 | list_for_each_entry_safe(udc_dev, udc_dev2, &vudc_devices, dev_entry) { |
2740 | list_del(&udc_dev->dev_entry); |
2741 | - platform_device_unregister(udc_dev->pdev); |
2742 | + /* |
2743 | + * Just do platform_device_del() here, put_vudc_device() |
2744 | + * calls the platform_device_put() |
2745 | + */ |
2746 | + platform_device_del(udc_dev->pdev); |
2747 | put_vudc_device(udc_dev); |
2748 | } |
2749 | platform_driver_unregister(&vudc_driver); |
2750 | diff --git a/drivers/w1/masters/omap_hdq.c b/drivers/w1/masters/omap_hdq.c |
2751 | index bb09de633939..86637fec4eaa 100644 |
2752 | --- a/drivers/w1/masters/omap_hdq.c |
2753 | +++ b/drivers/w1/masters/omap_hdq.c |
2754 | @@ -784,6 +784,8 @@ static int omap_hdq_remove(struct platform_device *pdev) |
2755 | /* remove module dependency */ |
2756 | pm_runtime_disable(&pdev->dev); |
2757 | |
2758 | + w1_remove_master_device(&omap_w1_master); |
2759 | + |
2760 | return 0; |
2761 | } |
2762 | |
2763 | diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c |
2764 | index 2fe7353ab720..5d04b362837d 100644 |
2765 | --- a/drivers/xen/swiotlb-xen.c |
2766 | +++ b/drivers/xen/swiotlb-xen.c |
2767 | @@ -310,6 +310,9 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
2768 | */ |
2769 | flags &= ~(__GFP_DMA | __GFP_HIGHMEM); |
2770 | |
2771 | + /* Convert the size to actually allocated. */ |
2772 | + size = 1UL << (order + XEN_PAGE_SHIFT); |
2773 | + |
2774 | /* On ARM this function returns an ioremap'ped virtual address for |
2775 | * which virt_to_phys doesn't return the corresponding physical |
2776 | * address. In fact on ARM virt_to_phys only works for kernel direct |
2777 | @@ -359,6 +362,9 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr, |
2778 | * physical address */ |
2779 | phys = xen_bus_to_phys(dev_addr); |
2780 | |
2781 | + /* Convert the size to actually allocated. */ |
2782 | + size = 1UL << (order + XEN_PAGE_SHIFT); |
2783 | + |
2784 | if (((dev_addr + size - 1 <= dma_mask)) || |
2785 | range_straddles_page_boundary(phys, size)) |
2786 | xen_destroy_contiguous_region(phys, order); |
2787 | diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c |
2788 | index 6661116c47d9..163b61a92b59 100644 |
2789 | --- a/fs/btrfs/extent-tree.c |
2790 | +++ b/fs/btrfs/extent-tree.c |
2791 | @@ -8263,6 +8263,19 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
2792 | if (IS_ERR(buf)) |
2793 | return buf; |
2794 | |
2795 | + /* |
2796 | + * Extra safety check in case the extent tree is corrupted and extent |
2797 | + * allocator chooses to use a tree block which is already used and |
2798 | + * locked. |
2799 | + */ |
2800 | + if (buf->lock_owner == current->pid) { |
2801 | + btrfs_err_rl(root->fs_info, |
2802 | +"tree block %llu owner %llu already locked by pid=%d, extent tree corruption detected", |
2803 | + buf->start, btrfs_header_owner(buf), current->pid); |
2804 | + free_extent_buffer(buf); |
2805 | + return ERR_PTR(-EUCLEAN); |
2806 | + } |
2807 | + |
2808 | btrfs_set_header_generation(buf, trans->transid); |
2809 | btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); |
2810 | btrfs_tree_lock(buf); |
2811 | @@ -9100,15 +9113,14 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, |
2812 | if (eb == root->node) { |
2813 | if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) |
2814 | parent = eb->start; |
2815 | - else |
2816 | - BUG_ON(root->root_key.objectid != |
2817 | - btrfs_header_owner(eb)); |
2818 | + else if (root->root_key.objectid != btrfs_header_owner(eb)) |
2819 | + goto owner_mismatch; |
2820 | } else { |
2821 | if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) |
2822 | parent = path->nodes[level + 1]->start; |
2823 | - else |
2824 | - BUG_ON(root->root_key.objectid != |
2825 | - btrfs_header_owner(path->nodes[level + 1])); |
2826 | + else if (root->root_key.objectid != |
2827 | + btrfs_header_owner(path->nodes[level + 1])) |
2828 | + goto owner_mismatch; |
2829 | } |
2830 | |
2831 | btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); |
2832 | @@ -9116,6 +9128,11 @@ out: |
2833 | wc->refs[level] = 0; |
2834 | wc->flags[level] = 0; |
2835 | return 0; |
2836 | + |
2837 | +owner_mismatch: |
2838 | + btrfs_err_rl(root->fs_info, "unexpected tree owner, have %llu expect %llu", |
2839 | + btrfs_header_owner(eb), root->root_key.objectid); |
2840 | + return -EUCLEAN; |
2841 | } |
2842 | |
2843 | static noinline int walk_down_tree(struct btrfs_trans_handle *trans, |
2844 | @@ -9169,6 +9186,8 @@ static noinline int walk_up_tree(struct btrfs_trans_handle *trans, |
2845 | ret = walk_up_proc(trans, root, path, wc); |
2846 | if (ret > 0) |
2847 | return 0; |
2848 | + if (ret < 0) |
2849 | + return ret; |
2850 | |
2851 | if (path->locks[level]) { |
2852 | btrfs_tree_unlock_rw(path->nodes[level], |
2853 | @@ -9933,6 +9952,7 @@ void btrfs_put_block_group_cache(struct btrfs_fs_info *info) |
2854 | |
2855 | block_group = btrfs_lookup_first_block_group(info, last); |
2856 | while (block_group) { |
2857 | + wait_block_group_cache_done(block_group); |
2858 | spin_lock(&block_group->lock); |
2859 | if (block_group->iref) |
2860 | break; |
2861 | @@ -10332,7 +10352,7 @@ error: |
2862 | void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans, |
2863 | struct btrfs_root *root) |
2864 | { |
2865 | - struct btrfs_block_group_cache *block_group, *tmp; |
2866 | + struct btrfs_block_group_cache *block_group; |
2867 | struct btrfs_root *extent_root = root->fs_info->extent_root; |
2868 | struct btrfs_block_group_item item; |
2869 | struct btrfs_key key; |
2870 | @@ -10340,7 +10360,10 @@ void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans, |
2871 | bool can_flush_pending_bgs = trans->can_flush_pending_bgs; |
2872 | |
2873 | trans->can_flush_pending_bgs = false; |
2874 | - list_for_each_entry_safe(block_group, tmp, &trans->new_bgs, bg_list) { |
2875 | + while (!list_empty(&trans->new_bgs)) { |
2876 | + block_group = list_first_entry(&trans->new_bgs, |
2877 | + struct btrfs_block_group_cache, |
2878 | + bg_list); |
2879 | if (ret) |
2880 | goto next; |
2881 | |
2882 | @@ -11052,6 +11075,10 @@ static int btrfs_trim_free_extents(struct btrfs_device *device, |
2883 | |
2884 | *trimmed = 0; |
2885 | |
2886 | + /* Discard not supported = nothing to do. */ |
2887 | + if (!blk_queue_discard(bdev_get_queue(device->bdev))) |
2888 | + return 0; |
2889 | + |
2890 | /* Not writeable = nothing to do. */ |
2891 | if (!device->writeable) |
2892 | return 0; |
2893 | @@ -11174,8 +11201,8 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range) |
2894 | } |
2895 | |
2896 | mutex_lock(&root->fs_info->fs_devices->device_list_mutex); |
2897 | - devices = &root->fs_info->fs_devices->alloc_list; |
2898 | - list_for_each_entry(device, devices, dev_alloc_list) { |
2899 | + devices = &root->fs_info->fs_devices->devices; |
2900 | + list_for_each_entry(device, devices, dev_list) { |
2901 | ret = btrfs_trim_free_extents(device, range->minlen, |
2902 | &group_trimmed); |
2903 | if (ret) |
2904 | diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c |
2905 | index c56253a1e5b4..5ca0dbb9074d 100644 |
2906 | --- a/fs/btrfs/free-space-cache.c |
2907 | +++ b/fs/btrfs/free-space-cache.c |
2908 | @@ -1693,6 +1693,8 @@ static inline void __bitmap_clear_bits(struct btrfs_free_space_ctl *ctl, |
2909 | bitmap_clear(info->bitmap, start, count); |
2910 | |
2911 | info->bytes -= bytes; |
2912 | + if (info->max_extent_size > ctl->unit) |
2913 | + info->max_extent_size = 0; |
2914 | } |
2915 | |
2916 | static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl, |
2917 | @@ -1776,6 +1778,13 @@ static int search_bitmap(struct btrfs_free_space_ctl *ctl, |
2918 | return -1; |
2919 | } |
2920 | |
2921 | +static inline u64 get_max_extent_size(struct btrfs_free_space *entry) |
2922 | +{ |
2923 | + if (entry->bitmap) |
2924 | + return entry->max_extent_size; |
2925 | + return entry->bytes; |
2926 | +} |
2927 | + |
2928 | /* Cache the size of the max extent in bytes */ |
2929 | static struct btrfs_free_space * |
2930 | find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes, |
2931 | @@ -1797,8 +1806,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes, |
2932 | for (node = &entry->offset_index; node; node = rb_next(node)) { |
2933 | entry = rb_entry(node, struct btrfs_free_space, offset_index); |
2934 | if (entry->bytes < *bytes) { |
2935 | - if (entry->bytes > *max_extent_size) |
2936 | - *max_extent_size = entry->bytes; |
2937 | + *max_extent_size = max(get_max_extent_size(entry), |
2938 | + *max_extent_size); |
2939 | continue; |
2940 | } |
2941 | |
2942 | @@ -1816,8 +1825,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes, |
2943 | } |
2944 | |
2945 | if (entry->bytes < *bytes + align_off) { |
2946 | - if (entry->bytes > *max_extent_size) |
2947 | - *max_extent_size = entry->bytes; |
2948 | + *max_extent_size = max(get_max_extent_size(entry), |
2949 | + *max_extent_size); |
2950 | continue; |
2951 | } |
2952 | |
2953 | @@ -1829,8 +1838,10 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes, |
2954 | *offset = tmp; |
2955 | *bytes = size; |
2956 | return entry; |
2957 | - } else if (size > *max_extent_size) { |
2958 | - *max_extent_size = size; |
2959 | + } else { |
2960 | + *max_extent_size = |
2961 | + max(get_max_extent_size(entry), |
2962 | + *max_extent_size); |
2963 | } |
2964 | continue; |
2965 | } |
2966 | @@ -2689,8 +2700,8 @@ static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group, |
2967 | |
2968 | err = search_bitmap(ctl, entry, &search_start, &search_bytes, true); |
2969 | if (err) { |
2970 | - if (search_bytes > *max_extent_size) |
2971 | - *max_extent_size = search_bytes; |
2972 | + *max_extent_size = max(get_max_extent_size(entry), |
2973 | + *max_extent_size); |
2974 | return 0; |
2975 | } |
2976 | |
2977 | @@ -2727,8 +2738,9 @@ u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group, |
2978 | |
2979 | entry = rb_entry(node, struct btrfs_free_space, offset_index); |
2980 | while (1) { |
2981 | - if (entry->bytes < bytes && entry->bytes > *max_extent_size) |
2982 | - *max_extent_size = entry->bytes; |
2983 | + if (entry->bytes < bytes) |
2984 | + *max_extent_size = max(get_max_extent_size(entry), |
2985 | + *max_extent_size); |
2986 | |
2987 | if (entry->bytes < bytes || |
2988 | (!entry->bitmap && entry->offset < min_start)) { |
2989 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
2990 | index 5ebdb58079e1..17e143d91fa9 100644 |
2991 | --- a/fs/btrfs/inode.c |
2992 | +++ b/fs/btrfs/inode.c |
2993 | @@ -489,6 +489,7 @@ again: |
2994 | pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS); |
2995 | if (!pages) { |
2996 | /* just bail out to the uncompressed code */ |
2997 | + nr_pages = 0; |
2998 | goto cont; |
2999 | } |
3000 | |
3001 | diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c |
3002 | index 9afad8c14220..f25233093d68 100644 |
3003 | --- a/fs/btrfs/qgroup.c |
3004 | +++ b/fs/btrfs/qgroup.c |
3005 | @@ -2498,6 +2498,7 @@ qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_info) |
3006 | qgroup->rfer_cmpr = 0; |
3007 | qgroup->excl = 0; |
3008 | qgroup->excl_cmpr = 0; |
3009 | + qgroup_dirty(fs_info, qgroup); |
3010 | } |
3011 | spin_unlock(&fs_info->qgroup_lock); |
3012 | } |
3013 | diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c |
3014 | index 9140aede5869..b0c3a6afe664 100644 |
3015 | --- a/fs/btrfs/relocation.c |
3016 | +++ b/fs/btrfs/relocation.c |
3017 | @@ -1325,7 +1325,7 @@ static void __del_reloc_root(struct btrfs_root *root) |
3018 | struct mapping_node *node = NULL; |
3019 | struct reloc_control *rc = root->fs_info->reloc_ctl; |
3020 | |
3021 | - if (rc) { |
3022 | + if (rc && root->node) { |
3023 | spin_lock(&rc->reloc_root_tree.lock); |
3024 | rb_node = tree_search(&rc->reloc_root_tree.rb_root, |
3025 | root->node->start); |
3026 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c |
3027 | index 44966fd00790..47d11a30bee7 100644 |
3028 | --- a/fs/btrfs/tree-log.c |
3029 | +++ b/fs/btrfs/tree-log.c |
3030 | @@ -3016,9 +3016,12 @@ static void free_log_tree(struct btrfs_trans_handle *trans, |
3031 | }; |
3032 | |
3033 | ret = walk_log_tree(trans, log, &wc); |
3034 | - /* I don't think this can happen but just in case */ |
3035 | - if (ret) |
3036 | - btrfs_abort_transaction(trans, ret); |
3037 | + if (ret) { |
3038 | + if (trans) |
3039 | + btrfs_abort_transaction(trans, ret); |
3040 | + else |
3041 | + btrfs_handle_fs_error(log->fs_info, ret, NULL); |
3042 | + } |
3043 | |
3044 | while (1) { |
3045 | ret = find_first_extent_bit(&log->dirty_log_pages, |
3046 | @@ -5370,9 +5373,33 @@ static int btrfs_log_all_parents(struct btrfs_trans_handle *trans, |
3047 | |
3048 | dir_inode = btrfs_iget(root->fs_info->sb, &inode_key, |
3049 | root, NULL); |
3050 | - /* If parent inode was deleted, skip it. */ |
3051 | - if (IS_ERR(dir_inode)) |
3052 | - continue; |
3053 | + /* |
3054 | + * If the parent inode was deleted, return an error to |
3055 | + * fallback to a transaction commit. This is to prevent |
3056 | + * getting an inode that was moved from one parent A to |
3057 | + * a parent B, got its former parent A deleted and then |
3058 | + * it got fsync'ed, from existing at both parents after |
3059 | + * a log replay (and the old parent still existing). |
3060 | + * Example: |
3061 | + * |
3062 | + * mkdir /mnt/A |
3063 | + * mkdir /mnt/B |
3064 | + * touch /mnt/B/bar |
3065 | + * sync |
3066 | + * mv /mnt/B/bar /mnt/A/bar |
3067 | + * mv -T /mnt/A /mnt/B |
3068 | + * fsync /mnt/B/bar |
3069 | + * <power fail> |
3070 | + * |
3071 | + * If we ignore the old parent B which got deleted, |
3072 | + * after a log replay we would have file bar linked |
3073 | + * at both parents and the old parent B would still |
3074 | + * exist. |
3075 | + */ |
3076 | + if (IS_ERR(dir_inode)) { |
3077 | + ret = PTR_ERR(dir_inode); |
3078 | + goto out; |
3079 | + } |
3080 | |
3081 | if (ctx) |
3082 | ctx->log_new_dentries = false; |
3083 | diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c |
3084 | index e06468f8e041..98fc77dd7b45 100644 |
3085 | --- a/fs/cifs/cifs_debug.c |
3086 | +++ b/fs/cifs/cifs_debug.c |
3087 | @@ -284,6 +284,9 @@ static ssize_t cifs_stats_proc_write(struct file *file, |
3088 | atomic_set(&totBufAllocCount, 0); |
3089 | atomic_set(&totSmBufAllocCount, 0); |
3090 | #endif /* CONFIG_CIFS_STATS2 */ |
3091 | + atomic_set(&tcpSesReconnectCount, 0); |
3092 | + atomic_set(&tconInfoReconnectCount, 0); |
3093 | + |
3094 | spin_lock(&GlobalMid_Lock); |
3095 | GlobalMaxActiveXid = 0; |
3096 | GlobalCurrentXid = 0; |
3097 | diff --git a/fs/cifs/cifs_spnego.c b/fs/cifs/cifs_spnego.c |
3098 | index b611fc2e8984..7f01c6e60791 100644 |
3099 | --- a/fs/cifs/cifs_spnego.c |
3100 | +++ b/fs/cifs/cifs_spnego.c |
3101 | @@ -147,8 +147,10 @@ cifs_get_spnego_key(struct cifs_ses *sesInfo) |
3102 | sprintf(dp, ";sec=krb5"); |
3103 | else if (server->sec_mskerberos) |
3104 | sprintf(dp, ";sec=mskrb5"); |
3105 | - else |
3106 | - goto out; |
3107 | + else { |
3108 | + cifs_dbg(VFS, "unknown or missing server auth type, use krb5\n"); |
3109 | + sprintf(dp, ";sec=krb5"); |
3110 | + } |
3111 | |
3112 | dp = description + strlen(description); |
3113 | sprintf(dp, ";uid=0x%x", |
3114 | diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c |
3115 | index 77a18fe10805..57c938ffeb6e 100644 |
3116 | --- a/fs/cifs/inode.c |
3117 | +++ b/fs/cifs/inode.c |
3118 | @@ -768,7 +768,15 @@ cifs_get_inode_info(struct inode **inode, const char *full_path, |
3119 | } else if (rc == -EREMOTE) { |
3120 | cifs_create_dfs_fattr(&fattr, sb); |
3121 | rc = 0; |
3122 | - } else if (rc == -EACCES && backup_cred(cifs_sb)) { |
3123 | + } else if ((rc == -EACCES) && backup_cred(cifs_sb) && |
3124 | + (strcmp(server->vals->version_string, SMB1_VERSION_STRING) |
3125 | + == 0)) { |
3126 | + /* |
3127 | + * For SMB2 and later the backup intent flag is already |
3128 | + * sent if needed on open and there is no path based |
3129 | + * FindFirst operation to use to retry with |
3130 | + */ |
3131 | + |
3132 | srchinf = kzalloc(sizeof(struct cifs_search_info), |
3133 | GFP_KERNEL); |
3134 | if (srchinf == NULL) { |
3135 | diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c |
3136 | index 7919967488cb..011c6f53dcda 100644 |
3137 | --- a/fs/cramfs/inode.c |
3138 | +++ b/fs/cramfs/inode.c |
3139 | @@ -186,7 +186,8 @@ static void *cramfs_read(struct super_block *sb, unsigned int offset, unsigned i |
3140 | continue; |
3141 | blk_offset = (blocknr - buffer_blocknr[i]) << PAGE_SHIFT; |
3142 | blk_offset += offset; |
3143 | - if (blk_offset + len > BUFFER_SIZE) |
3144 | + if (blk_offset > BUFFER_SIZE || |
3145 | + blk_offset + len > BUFFER_SIZE) |
3146 | continue; |
3147 | return read_buffers[i] + blk_offset; |
3148 | } |
3149 | diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c |
3150 | index 6779a9f1de3b..d06cfe372609 100644 |
3151 | --- a/fs/ext4/inline.c |
3152 | +++ b/fs/ext4/inline.c |
3153 | @@ -860,7 +860,7 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping, |
3154 | handle_t *handle; |
3155 | struct page *page; |
3156 | struct ext4_iloc iloc; |
3157 | - int retries; |
3158 | + int retries = 0; |
3159 | |
3160 | ret = ext4_get_inode_loc(inode, &iloc); |
3161 | if (ret) |
3162 | diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c |
3163 | index bf5ae8ebbc97..2880e017cd0a 100644 |
3164 | --- a/fs/ext4/ioctl.c |
3165 | +++ b/fs/ext4/ioctl.c |
3166 | @@ -345,7 +345,9 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid) |
3167 | } |
3168 | brelse(iloc.bh); |
3169 | |
3170 | - dquot_initialize(inode); |
3171 | + err = dquot_initialize(inode); |
3172 | + if (err) |
3173 | + return err; |
3174 | |
3175 | handle = ext4_journal_start(inode, EXT4_HT_QUOTA, |
3176 | EXT4_QUOTA_INIT_BLOCKS(sb) + |
3177 | diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c |
3178 | index 578f8c33fb44..c4434bdeeea7 100644 |
3179 | --- a/fs/ext4/move_extent.c |
3180 | +++ b/fs/ext4/move_extent.c |
3181 | @@ -526,9 +526,13 @@ mext_check_arguments(struct inode *orig_inode, |
3182 | orig_inode->i_ino, donor_inode->i_ino); |
3183 | return -EINVAL; |
3184 | } |
3185 | - if (orig_eof < orig_start + *len - 1) |
3186 | + if (orig_eof <= orig_start) |
3187 | + *len = 0; |
3188 | + else if (orig_eof < orig_start + *len - 1) |
3189 | *len = orig_eof - orig_start; |
3190 | - if (donor_eof < donor_start + *len - 1) |
3191 | + if (donor_eof <= donor_start) |
3192 | + *len = 0; |
3193 | + else if (donor_eof < donor_start + *len - 1) |
3194 | *len = donor_eof - donor_start; |
3195 | if (!*len) { |
3196 | ext4_debug("ext4 move extent: len should not be 0 " |
3197 | diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c |
3198 | index ff72ac6439c8..6d7f66816319 100644 |
3199 | --- a/fs/gfs2/ops_fstype.c |
3200 | +++ b/fs/gfs2/ops_fstype.c |
3201 | @@ -1355,6 +1355,9 @@ static struct dentry *gfs2_mount_meta(struct file_system_type *fs_type, |
3202 | struct path path; |
3203 | int error; |
3204 | |
3205 | + if (!dev_name || !*dev_name) |
3206 | + return ERR_PTR(-EINVAL); |
3207 | + |
3208 | error = kern_path(dev_name, LOOKUP_FOLLOW, &path); |
3209 | if (error) { |
3210 | pr_warn("path_lookup on %s returned error %d\n", |
3211 | diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c |
3212 | index 684996c8a3a4..4d5a5a4cc017 100644 |
3213 | --- a/fs/jbd2/checkpoint.c |
3214 | +++ b/fs/jbd2/checkpoint.c |
3215 | @@ -254,8 +254,8 @@ restart: |
3216 | bh = jh2bh(jh); |
3217 | |
3218 | if (buffer_locked(bh)) { |
3219 | - spin_unlock(&journal->j_list_lock); |
3220 | get_bh(bh); |
3221 | + spin_unlock(&journal->j_list_lock); |
3222 | wait_on_buffer(bh); |
3223 | /* the journal_head may have gone by now */ |
3224 | BUFFER_TRACE(bh, "brelse"); |
3225 | @@ -336,8 +336,8 @@ restart2: |
3226 | jh = transaction->t_checkpoint_io_list; |
3227 | bh = jh2bh(jh); |
3228 | if (buffer_locked(bh)) { |
3229 | - spin_unlock(&journal->j_list_lock); |
3230 | get_bh(bh); |
3231 | + spin_unlock(&journal->j_list_lock); |
3232 | wait_on_buffer(bh); |
3233 | /* the journal_head may have gone by now */ |
3234 | BUFFER_TRACE(bh, "brelse"); |
3235 | diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c |
3236 | index 59c019a148f6..79b0de846f21 100644 |
3237 | --- a/fs/jffs2/super.c |
3238 | +++ b/fs/jffs2/super.c |
3239 | @@ -285,10 +285,8 @@ static int jffs2_fill_super(struct super_block *sb, void *data, int silent) |
3240 | sb->s_fs_info = c; |
3241 | |
3242 | ret = jffs2_parse_options(c, data); |
3243 | - if (ret) { |
3244 | - kfree(c); |
3245 | + if (ret) |
3246 | return -EINVAL; |
3247 | - } |
3248 | |
3249 | /* Initialize JFFS2 superblock locks, the further initialization will |
3250 | * be done later */ |
3251 | diff --git a/fs/lockd/host.c b/fs/lockd/host.c |
3252 | index d716c9993a26..c7eb47f2fb6c 100644 |
3253 | --- a/fs/lockd/host.c |
3254 | +++ b/fs/lockd/host.c |
3255 | @@ -340,7 +340,7 @@ struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp, |
3256 | }; |
3257 | struct lockd_net *ln = net_generic(net, lockd_net_id); |
3258 | |
3259 | - dprintk("lockd: %s(host='%*s', vers=%u, proto=%s)\n", __func__, |
3260 | + dprintk("lockd: %s(host='%.*s', vers=%u, proto=%s)\n", __func__, |
3261 | (int)hostname_len, hostname, rqstp->rq_vers, |
3262 | (rqstp->rq_prot == IPPROTO_UDP ? "udp" : "tcp")); |
3263 | |
3264 | diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c |
3265 | index f6b0848cc831..43f42cc30a60 100644 |
3266 | --- a/fs/nfs/nfs4client.c |
3267 | +++ b/fs/nfs/nfs4client.c |
3268 | @@ -988,10 +988,10 @@ EXPORT_SYMBOL_GPL(nfs4_set_ds_client); |
3269 | |
3270 | /* |
3271 | * Session has been established, and the client marked ready. |
3272 | - * Set the mount rsize and wsize with negotiated fore channel |
3273 | - * attributes which will be bound checked in nfs_server_set_fsinfo. |
3274 | + * Limit the mount rsize, wsize and dtsize using negotiated fore |
3275 | + * channel attributes. |
3276 | */ |
3277 | -static void nfs4_session_set_rwsize(struct nfs_server *server) |
3278 | +static void nfs4_session_limit_rwsize(struct nfs_server *server) |
3279 | { |
3280 | #ifdef CONFIG_NFS_V4_1 |
3281 | struct nfs4_session *sess; |
3282 | @@ -1004,9 +1004,11 @@ static void nfs4_session_set_rwsize(struct nfs_server *server) |
3283 | server_resp_sz = sess->fc_attrs.max_resp_sz - nfs41_maxread_overhead; |
3284 | server_rqst_sz = sess->fc_attrs.max_rqst_sz - nfs41_maxwrite_overhead; |
3285 | |
3286 | - if (!server->rsize || server->rsize > server_resp_sz) |
3287 | + if (server->dtsize > server_resp_sz) |
3288 | + server->dtsize = server_resp_sz; |
3289 | + if (server->rsize > server_resp_sz) |
3290 | server->rsize = server_resp_sz; |
3291 | - if (!server->wsize || server->wsize > server_rqst_sz) |
3292 | + if (server->wsize > server_rqst_sz) |
3293 | server->wsize = server_rqst_sz; |
3294 | #endif /* CONFIG_NFS_V4_1 */ |
3295 | } |
3296 | @@ -1053,12 +1055,12 @@ static int nfs4_server_common_setup(struct nfs_server *server, |
3297 | (unsigned long long) server->fsid.minor); |
3298 | nfs_display_fhandle(mntfh, "Pseudo-fs root FH"); |
3299 | |
3300 | - nfs4_session_set_rwsize(server); |
3301 | - |
3302 | error = nfs_probe_fsinfo(server, mntfh, fattr); |
3303 | if (error < 0) |
3304 | goto out; |
3305 | |
3306 | + nfs4_session_limit_rwsize(server); |
3307 | + |
3308 | if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN) |
3309 | server->namelen = NFS4_MAXNAMLEN; |
3310 | |
3311 | diff --git a/include/linux/tc.h b/include/linux/tc.h |
3312 | index f92511e57cdb..a60639f37963 100644 |
3313 | --- a/include/linux/tc.h |
3314 | +++ b/include/linux/tc.h |
3315 | @@ -84,6 +84,7 @@ struct tc_dev { |
3316 | device. */ |
3317 | struct device dev; /* Generic device interface. */ |
3318 | struct resource resource; /* Address space of this device. */ |
3319 | + u64 dma_mask; /* DMA addressable range. */ |
3320 | char vendor[9]; |
3321 | char name[9]; |
3322 | char firmware[9]; |
3323 | diff --git a/kernel/bounds.c b/kernel/bounds.c |
3324 | index e1d1d1952bfa..c37f68d758db 100644 |
3325 | --- a/kernel/bounds.c |
3326 | +++ b/kernel/bounds.c |
3327 | @@ -12,7 +12,7 @@ |
3328 | #include <linux/log2.h> |
3329 | #include <linux/spinlock_types.h> |
3330 | |
3331 | -void foo(void) |
3332 | +int main(void) |
3333 | { |
3334 | /* The enum constants to put into include/generated/bounds.h */ |
3335 | DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS); |
3336 | @@ -22,4 +22,6 @@ void foo(void) |
3337 | #endif |
3338 | DEFINE(SPINLOCK_SIZE, sizeof(spinlock_t)); |
3339 | /* End of constants */ |
3340 | + |
3341 | + return 0; |
3342 | } |
3343 | diff --git a/kernel/cpu.c b/kernel/cpu.c |
3344 | index b5a0165b7300..8d7bace9a7b2 100644 |
3345 | --- a/kernel/cpu.c |
3346 | +++ b/kernel/cpu.c |
3347 | @@ -1970,6 +1970,12 @@ static void cpuhp_online_cpu_device(unsigned int cpu) |
3348 | kobject_uevent(&dev->kobj, KOBJ_ONLINE); |
3349 | } |
3350 | |
3351 | +/* |
3352 | + * Architectures that need SMT-specific errata handling during SMT hotplug |
3353 | + * should override this. |
3354 | + */ |
3355 | +void __weak arch_smt_update(void) { }; |
3356 | + |
3357 | static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) |
3358 | { |
3359 | int cpu, ret = 0; |
3360 | @@ -1996,8 +2002,10 @@ static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) |
3361 | */ |
3362 | cpuhp_offline_cpu_device(cpu); |
3363 | } |
3364 | - if (!ret) |
3365 | + if (!ret) { |
3366 | cpu_smt_control = ctrlval; |
3367 | + arch_smt_update(); |
3368 | + } |
3369 | cpu_maps_update_done(); |
3370 | return ret; |
3371 | } |
3372 | @@ -2008,6 +2016,7 @@ static int cpuhp_smt_enable(void) |
3373 | |
3374 | cpu_maps_update_begin(); |
3375 | cpu_smt_control = CPU_SMT_ENABLED; |
3376 | + arch_smt_update(); |
3377 | for_each_present_cpu(cpu) { |
3378 | /* Skip online CPUs and CPUs on offline nodes */ |
3379 | if (cpu_online(cpu) || !node_online(cpu_to_node(cpu))) |
3380 | diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c |
3381 | index e121645bb8a1..cf94460504bb 100644 |
3382 | --- a/kernel/irq/manage.c |
3383 | +++ b/kernel/irq/manage.c |
3384 | @@ -878,6 +878,9 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action) |
3385 | |
3386 | local_bh_disable(); |
3387 | ret = action->thread_fn(action->irq, action->dev_id); |
3388 | + if (ret == IRQ_HANDLED) |
3389 | + atomic_inc(&desc->threads_handled); |
3390 | + |
3391 | irq_finalize_oneshot(desc, action); |
3392 | local_bh_enable(); |
3393 | return ret; |
3394 | @@ -894,6 +897,9 @@ static irqreturn_t irq_thread_fn(struct irq_desc *desc, |
3395 | irqreturn_t ret; |
3396 | |
3397 | ret = action->thread_fn(action->irq, action->dev_id); |
3398 | + if (ret == IRQ_HANDLED) |
3399 | + atomic_inc(&desc->threads_handled); |
3400 | + |
3401 | irq_finalize_oneshot(desc, action); |
3402 | return ret; |
3403 | } |
3404 | @@ -971,8 +977,6 @@ static int irq_thread(void *data) |
3405 | irq_thread_check_affinity(desc, action); |
3406 | |
3407 | action_ret = handler_fn(desc, action); |
3408 | - if (action_ret == IRQ_HANDLED) |
3409 | - atomic_inc(&desc->threads_handled); |
3410 | if (action_ret == IRQ_WAKE_THREAD) |
3411 | irq_wake_secondary(desc, action); |
3412 | |
3413 | diff --git a/kernel/kprobes.c b/kernel/kprobes.c |
3414 | index b9e966bcdd20..f580352cc6e5 100644 |
3415 | --- a/kernel/kprobes.c |
3416 | +++ b/kernel/kprobes.c |
3417 | @@ -665,9 +665,10 @@ static void unoptimize_kprobe(struct kprobe *p, bool force) |
3418 | } |
3419 | |
3420 | /* Cancel unoptimizing for reusing */ |
3421 | -static void reuse_unused_kprobe(struct kprobe *ap) |
3422 | +static int reuse_unused_kprobe(struct kprobe *ap) |
3423 | { |
3424 | struct optimized_kprobe *op; |
3425 | + int ret; |
3426 | |
3427 | BUG_ON(!kprobe_unused(ap)); |
3428 | /* |
3429 | @@ -681,8 +682,12 @@ static void reuse_unused_kprobe(struct kprobe *ap) |
3430 | /* Enable the probe again */ |
3431 | ap->flags &= ~KPROBE_FLAG_DISABLED; |
3432 | /* Optimize it again (remove from op->list) */ |
3433 | - BUG_ON(!kprobe_optready(ap)); |
3434 | + ret = kprobe_optready(ap); |
3435 | + if (ret) |
3436 | + return ret; |
3437 | + |
3438 | optimize_kprobe(ap); |
3439 | + return 0; |
3440 | } |
3441 | |
3442 | /* Remove optimized instructions */ |
3443 | @@ -894,11 +899,16 @@ static void __disarm_kprobe(struct kprobe *p, bool reopt) |
3444 | #define kprobe_disarmed(p) kprobe_disabled(p) |
3445 | #define wait_for_kprobe_optimizer() do {} while (0) |
3446 | |
3447 | -/* There should be no unused kprobes can be reused without optimization */ |
3448 | -static void reuse_unused_kprobe(struct kprobe *ap) |
3449 | +static int reuse_unused_kprobe(struct kprobe *ap) |
3450 | { |
3451 | + /* |
3452 | + * If the optimized kprobe is NOT supported, the aggr kprobe is |
3453 | + * released at the same time that the last aggregated kprobe is |
3454 | + * unregistered. |
3455 | + * Thus there should be no chance to reuse unused kprobe. |
3456 | + */ |
3457 | printk(KERN_ERR "Error: There should be no unused kprobe here.\n"); |
3458 | - BUG_ON(kprobe_unused(ap)); |
3459 | + return -EINVAL; |
3460 | } |
3461 | |
3462 | static void free_aggr_kprobe(struct kprobe *p) |
3463 | @@ -1276,9 +1286,12 @@ static int register_aggr_kprobe(struct kprobe *orig_p, struct kprobe *p) |
3464 | goto out; |
3465 | } |
3466 | init_aggr_kprobe(ap, orig_p); |
3467 | - } else if (kprobe_unused(ap)) |
3468 | + } else if (kprobe_unused(ap)) { |
3469 | /* This probe is going to die. Rescue it */ |
3470 | - reuse_unused_kprobe(ap); |
3471 | + ret = reuse_unused_kprobe(ap); |
3472 | + if (ret) |
3473 | + goto out; |
3474 | + } |
3475 | |
3476 | if (kprobe_gone(ap)) { |
3477 | /* |
3478 | diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c |
3479 | index 61a15e538435..26fc428476b9 100644 |
3480 | --- a/kernel/locking/lockdep.c |
3481 | +++ b/kernel/locking/lockdep.c |
3482 | @@ -4010,7 +4010,7 @@ void lock_contended(struct lockdep_map *lock, unsigned long ip) |
3483 | { |
3484 | unsigned long flags; |
3485 | |
3486 | - if (unlikely(!lock_stat)) |
3487 | + if (unlikely(!lock_stat || !debug_locks)) |
3488 | return; |
3489 | |
3490 | if (unlikely(current->lockdep_recursion)) |
3491 | @@ -4030,7 +4030,7 @@ void lock_acquired(struct lockdep_map *lock, unsigned long ip) |
3492 | { |
3493 | unsigned long flags; |
3494 | |
3495 | - if (unlikely(!lock_stat)) |
3496 | + if (unlikely(!lock_stat || !debug_locks)) |
3497 | return; |
3498 | |
3499 | if (unlikely(current->lockdep_recursion)) |
3500 | diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c |
3501 | index ab6855a4218b..27adaaab96ba 100644 |
3502 | --- a/kernel/printk/printk.c |
3503 | +++ b/kernel/printk/printk.c |
3504 | @@ -1010,7 +1010,12 @@ static void __init log_buf_len_update(unsigned size) |
3505 | /* save requested log_buf_len since it's too early to process it */ |
3506 | static int __init log_buf_len_setup(char *str) |
3507 | { |
3508 | - unsigned size = memparse(str, &str); |
3509 | + unsigned int size; |
3510 | + |
3511 | + if (!str) |
3512 | + return -EINVAL; |
3513 | + |
3514 | + size = memparse(str, &str); |
3515 | |
3516 | log_buf_len_update(size); |
3517 | |
3518 | diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c |
3519 | index 5ad109ccec35..0c91d72f3e8f 100644 |
3520 | --- a/kernel/sched/fair.c |
3521 | +++ b/kernel/sched/fair.c |
3522 | @@ -3502,7 +3502,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) |
3523 | * put back on, and if we advance min_vruntime, we'll be placed back |
3524 | * further than we started -- ie. we'll be penalized. |
3525 | */ |
3526 | - if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) == DEQUEUE_SAVE) |
3527 | + if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE) |
3528 | update_min_vruntime(cfs_rq); |
3529 | } |
3530 | |
3531 | diff --git a/kernel/signal.c b/kernel/signal.c |
3532 | index 4364e57e6038..424306163edc 100644 |
3533 | --- a/kernel/signal.c |
3534 | +++ b/kernel/signal.c |
3535 | @@ -991,7 +991,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t, |
3536 | |
3537 | result = TRACE_SIGNAL_IGNORED; |
3538 | if (!prepare_signal(sig, t, |
3539 | - from_ancestor_ns || (info == SEND_SIG_FORCED))) |
3540 | + from_ancestor_ns || (info == SEND_SIG_PRIV) || (info == SEND_SIG_FORCED))) |
3541 | goto ret; |
3542 | |
3543 | pending = group ? &t->signal->shared_pending : &t->pending; |
3544 | diff --git a/lib/debug_locks.c b/lib/debug_locks.c |
3545 | index 96c4c633d95e..124fdf238b3d 100644 |
3546 | --- a/lib/debug_locks.c |
3547 | +++ b/lib/debug_locks.c |
3548 | @@ -37,7 +37,7 @@ EXPORT_SYMBOL_GPL(debug_locks_silent); |
3549 | */ |
3550 | int debug_locks_off(void) |
3551 | { |
3552 | - if (__debug_locks_off()) { |
3553 | + if (debug_locks && __debug_locks_off()) { |
3554 | if (!debug_locks_silent) { |
3555 | console_verbose(); |
3556 | return 1; |
3557 | diff --git a/mm/hugetlb.c b/mm/hugetlb.c |
3558 | index f9e735537c37..9c566e4b06ce 100644 |
3559 | --- a/mm/hugetlb.c |
3560 | +++ b/mm/hugetlb.c |
3561 | @@ -3645,6 +3645,12 @@ int huge_add_to_page_cache(struct page *page, struct address_space *mapping, |
3562 | return err; |
3563 | ClearPagePrivate(page); |
3564 | |
3565 | + /* |
3566 | + * set page dirty so that it will not be removed from cache/file |
3567 | + * by non-hugetlbfs specific code paths. |
3568 | + */ |
3569 | + set_page_dirty(page); |
3570 | + |
3571 | spin_lock(&inode->i_lock); |
3572 | inode->i_blocks += blocks_per_huge_page(h); |
3573 | spin_unlock(&inode->i_lock); |
3574 | diff --git a/net/core/netclassid_cgroup.c b/net/core/netclassid_cgroup.c |
3575 | index 46e8830c1979..2e4eef71471d 100644 |
3576 | --- a/net/core/netclassid_cgroup.c |
3577 | +++ b/net/core/netclassid_cgroup.c |
3578 | @@ -104,6 +104,7 @@ static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, |
3579 | iterate_fd(p->files, 0, update_classid_sock, |
3580 | (void *)(unsigned long)cs->classid); |
3581 | task_unlock(p); |
3582 | + cond_resched(); |
3583 | } |
3584 | css_task_iter_end(&it); |
3585 | |
3586 | diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c |
3587 | index 65a15889d432..571d079e262f 100644 |
3588 | --- a/net/ipv4/cipso_ipv4.c |
3589 | +++ b/net/ipv4/cipso_ipv4.c |
3590 | @@ -1512,7 +1512,7 @@ static int cipso_v4_parsetag_loc(const struct cipso_v4_doi *doi_def, |
3591 | * |
3592 | * Description: |
3593 | * Parse the packet's IP header looking for a CIPSO option. Returns a pointer |
3594 | - * to the start of the CIPSO option on success, NULL if one if not found. |
3595 | + * to the start of the CIPSO option on success, NULL if one is not found. |
3596 | * |
3597 | */ |
3598 | unsigned char *cipso_v4_optptr(const struct sk_buff *skb) |
3599 | @@ -1522,10 +1522,8 @@ unsigned char *cipso_v4_optptr(const struct sk_buff *skb) |
3600 | int optlen; |
3601 | int taglen; |
3602 | |
3603 | - for (optlen = iph->ihl*4 - sizeof(struct iphdr); optlen > 0; ) { |
3604 | + for (optlen = iph->ihl*4 - sizeof(struct iphdr); optlen > 1; ) { |
3605 | switch (optptr[0]) { |
3606 | - case IPOPT_CIPSO: |
3607 | - return optptr; |
3608 | case IPOPT_END: |
3609 | return NULL; |
3610 | case IPOPT_NOOP: |
3611 | @@ -1534,6 +1532,11 @@ unsigned char *cipso_v4_optptr(const struct sk_buff *skb) |
3612 | default: |
3613 | taglen = optptr[1]; |
3614 | } |
3615 | + if (!taglen || taglen > optlen) |
3616 | + return NULL; |
3617 | + if (optptr[0] == IPOPT_CIPSO) |
3618 | + return optptr; |
3619 | + |
3620 | optlen -= taglen; |
3621 | optptr += taglen; |
3622 | } |
3623 | diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c |
3624 | index 9c9db55a0c1e..064f20bb845a 100644 |
3625 | --- a/net/sunrpc/svc_xprt.c |
3626 | +++ b/net/sunrpc/svc_xprt.c |
3627 | @@ -1038,7 +1038,7 @@ static void call_xpt_users(struct svc_xprt *xprt) |
3628 | spin_lock(&xprt->xpt_lock); |
3629 | while (!list_empty(&xprt->xpt_users)) { |
3630 | u = list_first_entry(&xprt->xpt_users, struct svc_xpt_user, list); |
3631 | - list_del(&u->list); |
3632 | + list_del_init(&u->list); |
3633 | u->callback(u); |
3634 | } |
3635 | spin_unlock(&xprt->xpt_lock); |
3636 | diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c |
3637 | index d0dcfc68c043..155b1591b17a 100644 |
3638 | --- a/net/xfrm/xfrm_policy.c |
3639 | +++ b/net/xfrm/xfrm_policy.c |
3640 | @@ -659,9 +659,9 @@ static void xfrm_hash_rebuild(struct work_struct *work) |
3641 | break; |
3642 | } |
3643 | if (newpos) |
3644 | - hlist_add_behind(&policy->bydst, newpos); |
3645 | + hlist_add_behind_rcu(&policy->bydst, newpos); |
3646 | else |
3647 | - hlist_add_head(&policy->bydst, chain); |
3648 | + hlist_add_head_rcu(&policy->bydst, chain); |
3649 | } |
3650 | |
3651 | spin_unlock_bh(&net->xfrm.xfrm_policy_lock); |
3652 | @@ -800,9 +800,9 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) |
3653 | break; |
3654 | } |
3655 | if (newpos) |
3656 | - hlist_add_behind(&policy->bydst, newpos); |
3657 | + hlist_add_behind_rcu(&policy->bydst, newpos); |
3658 | else |
3659 | - hlist_add_head(&policy->bydst, chain); |
3660 | + hlist_add_head_rcu(&policy->bydst, chain); |
3661 | __xfrm_policy_link(policy, dir); |
3662 | atomic_inc(&net->xfrm.flow_cache_genid); |
3663 | |
3664 | diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c |
3665 | index 3df46906492d..44b44d7e0dbc 100644 |
3666 | --- a/security/integrity/ima/ima_fs.c |
3667 | +++ b/security/integrity/ima/ima_fs.c |
3668 | @@ -29,14 +29,14 @@ |
3669 | static DEFINE_MUTEX(ima_write_mutex); |
3670 | |
3671 | static int valid_policy = 1; |
3672 | -#define TMPBUFLEN 12 |
3673 | + |
3674 | static ssize_t ima_show_htable_value(char __user *buf, size_t count, |
3675 | loff_t *ppos, atomic_long_t *val) |
3676 | { |
3677 | - char tmpbuf[TMPBUFLEN]; |
3678 | + char tmpbuf[32]; /* greater than largest 'long' string value */ |
3679 | ssize_t len; |
3680 | |
3681 | - len = scnprintf(tmpbuf, TMPBUFLEN, "%li\n", atomic_long_read(val)); |
3682 | + len = scnprintf(tmpbuf, sizeof(tmpbuf), "%li\n", atomic_long_read(val)); |
3683 | return simple_read_from_buffer(buf, count, ppos, tmpbuf, len); |
3684 | } |
3685 | |
3686 | diff --git a/sound/pci/ca0106/ca0106.h b/sound/pci/ca0106/ca0106.h |
3687 | index 04402c14cb23..9847b669cf3c 100644 |
3688 | --- a/sound/pci/ca0106/ca0106.h |
3689 | +++ b/sound/pci/ca0106/ca0106.h |
3690 | @@ -582,7 +582,7 @@ |
3691 | #define SPI_PL_BIT_R_R (2<<7) /* right channel = right */ |
3692 | #define SPI_PL_BIT_R_C (3<<7) /* right channel = (L+R)/2 */ |
3693 | #define SPI_IZD_REG 2 |
3694 | -#define SPI_IZD_BIT (1<<4) /* infinite zero detect */ |
3695 | +#define SPI_IZD_BIT (0<<4) /* infinite zero detect */ |
3696 | |
3697 | #define SPI_FMT_REG 3 |
3698 | #define SPI_FMT_BIT_RJ (0<<0) /* right justified mode */ |
3699 | diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h |
3700 | index a50e0532622a..b83feecf1e40 100644 |
3701 | --- a/sound/pci/hda/hda_controller.h |
3702 | +++ b/sound/pci/hda/hda_controller.h |
3703 | @@ -155,6 +155,7 @@ struct azx { |
3704 | unsigned int msi:1; |
3705 | unsigned int probing:1; /* codec probing phase */ |
3706 | unsigned int snoop:1; |
3707 | + unsigned int uc_buffer:1; /* non-cached pages for stream buffers */ |
3708 | unsigned int align_buffer_size:1; |
3709 | unsigned int region_requested:1; |
3710 | unsigned int disabled:1; /* disabled by vga_switcheroo */ |
3711 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c |
3712 | index f913809a7de3..3557e3943ad5 100644 |
3713 | --- a/sound/pci/hda/hda_intel.c |
3714 | +++ b/sound/pci/hda/hda_intel.c |
3715 | @@ -410,7 +410,7 @@ static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool |
3716 | #ifdef CONFIG_SND_DMA_SGBUF |
3717 | if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) { |
3718 | struct snd_sg_buf *sgbuf = dmab->private_data; |
3719 | - if (chip->driver_type == AZX_DRIVER_CMEDIA) |
3720 | + if (!chip->uc_buffer) |
3721 | return; /* deal with only CORB/RIRB buffers */ |
3722 | if (on) |
3723 | set_pages_array_wc(sgbuf->page_table, sgbuf->pages); |
3724 | @@ -1503,6 +1503,7 @@ static void azx_check_snoop_available(struct azx *chip) |
3725 | dev_info(chip->card->dev, "Force to %s mode by module option\n", |
3726 | snoop ? "snoop" : "non-snoop"); |
3727 | chip->snoop = snoop; |
3728 | + chip->uc_buffer = !snoop; |
3729 | return; |
3730 | } |
3731 | |
3732 | @@ -1523,8 +1524,12 @@ static void azx_check_snoop_available(struct azx *chip) |
3733 | snoop = false; |
3734 | |
3735 | chip->snoop = snoop; |
3736 | - if (!snoop) |
3737 | + if (!snoop) { |
3738 | dev_info(chip->card->dev, "Force to non-snoop mode\n"); |
3739 | + /* C-Media requires non-cached pages only for CORB/RIRB */ |
3740 | + if (chip->driver_type != AZX_DRIVER_CMEDIA) |
3741 | + chip->uc_buffer = true; |
3742 | + } |
3743 | } |
3744 | |
3745 | static void azx_probe_work(struct work_struct *work) |
3746 | @@ -1947,7 +1952,7 @@ static void pcm_mmap_prepare(struct snd_pcm_substream *substream, |
3747 | #ifdef CONFIG_X86 |
3748 | struct azx_pcm *apcm = snd_pcm_substream_chip(substream); |
3749 | struct azx *chip = apcm->chip; |
3750 | - if (!azx_snoop(chip) && chip->driver_type != AZX_DRIVER_CMEDIA) |
3751 | + if (chip->uc_buffer) |
3752 | area->vm_page_prot = pgprot_writecombine(area->vm_page_prot); |
3753 | #endif |
3754 | } |
3755 | diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c |
3756 | index a6e98a4d6834..d392e867e9ab 100644 |
3757 | --- a/sound/pci/hda/patch_conexant.c |
3758 | +++ b/sound/pci/hda/patch_conexant.c |
3759 | @@ -867,6 +867,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = { |
3760 | SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT_PINCFG_LENOVO_TP410), |
3761 | SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT_PINCFG_LENOVO_TP410), |
3762 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD), |
3763 | + SND_PCI_QUIRK(0x17aa, 0x3905, "Lenovo G50-30", CXT_FIXUP_STEREO_DMIC), |
3764 | SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC), |
3765 | SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC), |
3766 | SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC), |
3767 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
3768 | index cc48800f95e0..6c2668b4e3bc 100644 |
3769 | --- a/sound/pci/hda/patch_realtek.c |
3770 | +++ b/sound/pci/hda/patch_realtek.c |
3771 | @@ -6811,6 +6811,8 @@ enum { |
3772 | ALC662_FIXUP_ASUS_Nx50, |
3773 | ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, |
3774 | ALC668_FIXUP_ASUS_Nx51, |
3775 | + ALC668_FIXUP_MIC_COEF, |
3776 | + ALC668_FIXUP_ASUS_G751, |
3777 | ALC891_FIXUP_HEADSET_MODE, |
3778 | ALC891_FIXUP_DELL_MIC_NO_PRESENCE, |
3779 | ALC662_FIXUP_ACER_VERITON, |
3780 | @@ -7077,6 +7079,23 @@ static const struct hda_fixup alc662_fixups[] = { |
3781 | .chained = true, |
3782 | .chain_id = ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, |
3783 | }, |
3784 | + [ALC668_FIXUP_MIC_COEF] = { |
3785 | + .type = HDA_FIXUP_VERBS, |
3786 | + .v.verbs = (const struct hda_verb[]) { |
3787 | + { 0x20, AC_VERB_SET_COEF_INDEX, 0xc3 }, |
3788 | + { 0x20, AC_VERB_SET_PROC_COEF, 0x4000 }, |
3789 | + {} |
3790 | + }, |
3791 | + }, |
3792 | + [ALC668_FIXUP_ASUS_G751] = { |
3793 | + .type = HDA_FIXUP_PINS, |
3794 | + .v.pins = (const struct hda_pintbl[]) { |
3795 | + { 0x16, 0x0421101f }, /* HP */ |
3796 | + {} |
3797 | + }, |
3798 | + .chained = true, |
3799 | + .chain_id = ALC668_FIXUP_MIC_COEF |
3800 | + }, |
3801 | [ALC891_FIXUP_HEADSET_MODE] = { |
3802 | .type = HDA_FIXUP_FUNC, |
3803 | .v.func = alc_fixup_headset_mode, |
3804 | @@ -7132,6 +7151,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { |
3805 | SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50), |
3806 | SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A), |
3807 | SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50), |
3808 | + SND_PCI_QUIRK(0x1043, 0x12ff, "ASUS G751", ALC668_FIXUP_ASUS_G751), |
3809 | SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_MODE4_CHMAP), |
3810 | SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16), |
3811 | SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51), |
3812 | diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c |
3813 | index b0c154d5924b..76e5bb425a56 100644 |
3814 | --- a/sound/soc/intel/skylake/skl-topology.c |
3815 | +++ b/sound/soc/intel/skylake/skl-topology.c |
3816 | @@ -1780,6 +1780,7 @@ static int skl_tplg_get_token(struct device *dev, |
3817 | |
3818 | case SKL_TKN_U8_CORE_ID: |
3819 | mconfig->core_id = tkn_elem->value; |
3820 | + break; |
3821 | |
3822 | case SKL_TKN_U8_MOD_TYPE: |
3823 | mconfig->m_type = tkn_elem->value; |
3824 | diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c |
3825 | index 663192395780..2d5744d986f0 100644 |
3826 | --- a/tools/perf/util/event.c |
3827 | +++ b/tools/perf/util/event.c |
3828 | @@ -839,6 +839,7 @@ void *cpu_map_data__alloc(struct cpu_map *map, size_t *size, u16 *type, int *max |
3829 | } |
3830 | |
3831 | *size += sizeof(struct cpu_map_data); |
3832 | + *size = PERF_ALIGN(*size, sizeof(u64)); |
3833 | return zalloc(*size); |
3834 | } |
3835 | |
3836 | diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c |
3837 | index b1474dcadfa2..0f84371d4d6b 100644 |
3838 | --- a/tools/perf/util/pmu.c |
3839 | +++ b/tools/perf/util/pmu.c |
3840 | @@ -685,13 +685,14 @@ static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, |
3841 | |
3842 | static __u64 pmu_format_max_value(const unsigned long *format) |
3843 | { |
3844 | - __u64 w = 0; |
3845 | - int fbit; |
3846 | - |
3847 | - for_each_set_bit(fbit, format, PERF_PMU_FORMAT_BITS) |
3848 | - w |= (1ULL << fbit); |
3849 | + int w; |
3850 | |
3851 | - return w; |
3852 | + w = bitmap_weight(format, PERF_PMU_FORMAT_BITS); |
3853 | + if (!w) |
3854 | + return 0; |
3855 | + if (w < 64) |
3856 | + return (1ULL << w) - 1; |
3857 | + return -1; |
3858 | } |
3859 | |
3860 | /* |
3861 | diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c |
3862 | index 817593908d47..842cf3fd9235 100644 |
3863 | --- a/tools/perf/util/strbuf.c |
3864 | +++ b/tools/perf/util/strbuf.c |
3865 | @@ -105,19 +105,25 @@ static int strbuf_addv(struct strbuf *sb, const char *fmt, va_list ap) |
3866 | |
3867 | va_copy(ap_saved, ap); |
3868 | len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); |
3869 | - if (len < 0) |
3870 | + if (len < 0) { |
3871 | + va_end(ap_saved); |
3872 | return len; |
3873 | + } |
3874 | if (len > strbuf_avail(sb)) { |
3875 | ret = strbuf_grow(sb, len); |
3876 | - if (ret) |
3877 | + if (ret) { |
3878 | + va_end(ap_saved); |
3879 | return ret; |
3880 | + } |
3881 | len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved); |
3882 | va_end(ap_saved); |
3883 | if (len > strbuf_avail(sb)) { |
3884 | pr_debug("this should not happen, your vsnprintf is broken"); |
3885 | + va_end(ap_saved); |
3886 | return -EINVAL; |
3887 | } |
3888 | } |
3889 | + va_end(ap_saved); |
3890 | return strbuf_setlen(sb, sb->len + len); |
3891 | } |
3892 | |
3893 | diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c |
3894 | index d995743cb673..58ce62088a39 100644 |
3895 | --- a/tools/perf/util/trace-event-info.c |
3896 | +++ b/tools/perf/util/trace-event-info.c |
3897 | @@ -507,12 +507,14 @@ struct tracing_data *tracing_data_get(struct list_head *pattrs, |
3898 | "/tmp/perf-XXXXXX"); |
3899 | if (!mkstemp(tdata->temp_file)) { |
3900 | pr_debug("Can't make temp file"); |
3901 | + free(tdata); |
3902 | return NULL; |
3903 | } |
3904 | |
3905 | temp_fd = open(tdata->temp_file, O_RDWR); |
3906 | if (temp_fd < 0) { |
3907 | pr_debug("Can't read '%s'", tdata->temp_file); |
3908 | + free(tdata); |
3909 | return NULL; |
3910 | } |
3911 | |
3912 | diff --git a/tools/perf/util/trace-event-read.c b/tools/perf/util/trace-event-read.c |
3913 | index b67a0ccf5ab9..23baee7b786a 100644 |
3914 | --- a/tools/perf/util/trace-event-read.c |
3915 | +++ b/tools/perf/util/trace-event-read.c |
3916 | @@ -334,9 +334,12 @@ static int read_event_files(struct pevent *pevent) |
3917 | for (x=0; x < count; x++) { |
3918 | size = read8(pevent); |
3919 | ret = read_event_file(pevent, sys, size); |
3920 | - if (ret) |
3921 | + if (ret) { |
3922 | + free(sys); |
3923 | return ret; |
3924 | + } |
3925 | } |
3926 | + free(sys); |
3927 | } |
3928 | return 0; |
3929 | } |
3930 | diff --git a/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc |
3931 | new file mode 100644 |
3932 | index 000000000000..88e6c3f43006 |
3933 | --- /dev/null |
3934 | +++ b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc |
3935 | @@ -0,0 +1,80 @@ |
3936 | +#!/bin/sh |
3937 | +# SPDX-License-Identifier: GPL-2.0 |
3938 | +# description: event trigger - test synthetic_events syntax parser |
3939 | + |
3940 | +do_reset() { |
3941 | + reset_trigger |
3942 | + echo > set_event |
3943 | + clear_trace |
3944 | +} |
3945 | + |
3946 | +fail() { #msg |
3947 | + do_reset |
3948 | + echo $1 |
3949 | + exit_fail |
3950 | +} |
3951 | + |
3952 | +if [ ! -f set_event ]; then |
3953 | + echo "event tracing is not supported" |
3954 | + exit_unsupported |
3955 | +fi |
3956 | + |
3957 | +if [ ! -f synthetic_events ]; then |
3958 | + echo "synthetic event is not supported" |
3959 | + exit_unsupported |
3960 | +fi |
3961 | + |
3962 | +reset_tracer |
3963 | +do_reset |
3964 | + |
3965 | +echo "Test synthetic_events syntax parser" |
3966 | + |
3967 | +echo > synthetic_events |
3968 | + |
3969 | +# synthetic event must have a field |
3970 | +! echo "myevent" >> synthetic_events |
3971 | +echo "myevent u64 var1" >> synthetic_events |
3972 | + |
3973 | +# synthetic event must be found in synthetic_events |
3974 | +grep "myevent[[:space:]]u64 var1" synthetic_events |
3975 | + |
3976 | +# it is not possible to add same name event |
3977 | +! echo "myevent u64 var2" >> synthetic_events |
3978 | + |
3979 | +# Non-append open will cleanup all events and add new one |
3980 | +echo "myevent u64 var2" > synthetic_events |
3981 | + |
3982 | +# multiple fields with different spaces |
3983 | +echo "myevent u64 var1; u64 var2;" > synthetic_events |
3984 | +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events |
3985 | +echo "myevent u64 var1 ; u64 var2 ;" > synthetic_events |
3986 | +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events |
3987 | +echo "myevent u64 var1 ;u64 var2" > synthetic_events |
3988 | +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events |
3989 | + |
3990 | +# test field types |
3991 | +echo "myevent u32 var" > synthetic_events |
3992 | +echo "myevent u16 var" > synthetic_events |
3993 | +echo "myevent u8 var" > synthetic_events |
3994 | +echo "myevent s64 var" > synthetic_events |
3995 | +echo "myevent s32 var" > synthetic_events |
3996 | +echo "myevent s16 var" > synthetic_events |
3997 | +echo "myevent s8 var" > synthetic_events |
3998 | + |
3999 | +echo "myevent char var" > synthetic_events |
4000 | +echo "myevent int var" > synthetic_events |
4001 | +echo "myevent long var" > synthetic_events |
4002 | +echo "myevent pid_t var" > synthetic_events |
4003 | + |
4004 | +echo "myevent unsigned char var" > synthetic_events |
4005 | +echo "myevent unsigned int var" > synthetic_events |
4006 | +echo "myevent unsigned long var" > synthetic_events |
4007 | +grep "myevent[[:space:]]unsigned long var" synthetic_events |
4008 | + |
4009 | +# test string type |
4010 | +echo "myevent char var[10]" > synthetic_events |
4011 | +grep "myevent[[:space:]]char\[10\] var" synthetic_events |
4012 | + |
4013 | +do_reset |
4014 | + |
4015 | +exit 0 |
4016 | diff --git a/tools/testing/selftests/net/reuseport_bpf.c b/tools/testing/selftests/net/reuseport_bpf.c |
4017 | index cad14cd0ea92..b5277106df1f 100644 |
4018 | --- a/tools/testing/selftests/net/reuseport_bpf.c |
4019 | +++ b/tools/testing/selftests/net/reuseport_bpf.c |
4020 | @@ -437,14 +437,19 @@ void enable_fastopen(void) |
4021 | } |
4022 | } |
4023 | |
4024 | -static struct rlimit rlim_old, rlim_new; |
4025 | +static struct rlimit rlim_old; |
4026 | |
4027 | static __attribute__((constructor)) void main_ctor(void) |
4028 | { |
4029 | getrlimit(RLIMIT_MEMLOCK, &rlim_old); |
4030 | - rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20); |
4031 | - rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20); |
4032 | - setrlimit(RLIMIT_MEMLOCK, &rlim_new); |
4033 | + |
4034 | + if (rlim_old.rlim_cur != RLIM_INFINITY) { |
4035 | + struct rlimit rlim_new; |
4036 | + |
4037 | + rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20); |
4038 | + rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20); |
4039 | + setrlimit(RLIMIT_MEMLOCK, &rlim_new); |
4040 | + } |
4041 | } |
4042 | |
4043 | static __attribute__((destructor)) void main_dtor(void) |