Annotation of /trunk/kernel-alx/patches-4.9/0236-4.9.137-all-fixes.patch
Parent Directory | Revision Log
Revision 3315 -
(hide annotations)
(download)
Tue Mar 12 10:44:32 2019 UTC (5 years, 6 months ago) by niro
File size: 131762 byte(s)
Tue Mar 12 10:44:32 2019 UTC (5 years, 6 months ago) by niro
File size: 131762 byte(s)
-linux-4.9.137
1 | niro | 3315 | 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) |