Annotation of /trunk/kernel-alx/patches-4.1/0112-4.1.13-all-fixes.patch
Parent Directory | Revision Log
Revision 2748 -
(hide annotations)
(download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 4 months ago) by niro
File size: 110369 byte(s)
Mon Jan 11 12:00:45 2016 UTC (8 years, 4 months ago) by niro
File size: 110369 byte(s)
-linux-4.1 patches up to 4.1.15
1 | niro | 2748 | diff --git a/Documentation/devicetree/bindings/mfd/mfd.txt b/Documentation/devicetree/bindings/mfd/mfd.txt |
2 | new file mode 100644 | ||
3 | index 000000000000..af9d6931a1a2 | ||
4 | --- /dev/null | ||
5 | +++ b/Documentation/devicetree/bindings/mfd/mfd.txt | ||
6 | @@ -0,0 +1,41 @@ | ||
7 | +Multi-Function Devices (MFD) | ||
8 | + | ||
9 | +These devices comprise a nexus for heterogeneous hardware blocks containing | ||
10 | +more than one non-unique yet varying hardware functionality. | ||
11 | + | ||
12 | +A typical MFD can be: | ||
13 | + | ||
14 | +- A mixed signal ASIC on an external bus, sometimes a PMIC (Power Management | ||
15 | + Integrated Circuit) that is manufactured in a lower technology node (rough | ||
16 | + silicon) that handles analog drivers for things like audio amplifiers, LED | ||
17 | + drivers, level shifters, PHY (physical interfaces to things like USB or | ||
18 | + ethernet), regulators etc. | ||
19 | + | ||
20 | +- A range of memory registers containing "miscellaneous system registers" also | ||
21 | + known as a system controller "syscon" or any other memory range containing a | ||
22 | + mix of unrelated hardware devices. | ||
23 | + | ||
24 | +Optional properties: | ||
25 | + | ||
26 | +- compatible : "simple-mfd" - this signifies that the operating system should | ||
27 | + consider all subnodes of the MFD device as separate devices akin to how | ||
28 | + "simple-bus" inidicates when to see subnodes as children for a simple | ||
29 | + memory-mapped bus. For more complex devices, when the nexus driver has to | ||
30 | + probe registers to figure out what child devices exist etc, this should not | ||
31 | + be used. In the latter case the child devices will be determined by the | ||
32 | + operating system. | ||
33 | + | ||
34 | +Example: | ||
35 | + | ||
36 | +foo@1000 { | ||
37 | + compatible = "syscon", "simple-mfd"; | ||
38 | + reg = <0x01000 0x1000>; | ||
39 | + | ||
40 | + led@08.0 { | ||
41 | + compatible = "register-bit-led"; | ||
42 | + offset = <0x08>; | ||
43 | + mask = <0x01>; | ||
44 | + label = "myled"; | ||
45 | + default-state = "on"; | ||
46 | + }; | ||
47 | +}; | ||
48 | diff --git a/Makefile b/Makefile | ||
49 | index 2320f1911404..d5d229db61d5 100644 | ||
50 | --- a/Makefile | ||
51 | +++ b/Makefile | ||
52 | @@ -1,6 +1,6 @@ | ||
53 | VERSION = 4 | ||
54 | PATCHLEVEL = 1 | ||
55 | -SUBLEVEL = 12 | ||
56 | +SUBLEVEL = 13 | ||
57 | EXTRAVERSION = | ||
58 | NAME = Series 4800 | ||
59 | |||
60 | diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts | ||
61 | index c9df40e5cd3b..e8397879d0a7 100644 | ||
62 | --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts | ||
63 | +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts | ||
64 | @@ -354,11 +354,12 @@ | ||
65 | /* SMPS9 unused */ | ||
66 | |||
67 | ldo1_reg: ldo1 { | ||
68 | - /* VDD_SD */ | ||
69 | + /* VDD_SD / VDDSHV8 */ | ||
70 | regulator-name = "ldo1"; | ||
71 | regulator-min-microvolt = <1800000>; | ||
72 | regulator-max-microvolt = <3300000>; | ||
73 | regulator-boot-on; | ||
74 | + regulator-always-on; | ||
75 | }; | ||
76 | |||
77 | ldo2_reg: ldo2 { | ||
78 | diff --git a/arch/arm/boot/dts/armada-385-db-ap.dts b/arch/arm/boot/dts/armada-385-db-ap.dts | ||
79 | index 7219ac3a3d90..9f730e8e9f87 100644 | ||
80 | --- a/arch/arm/boot/dts/armada-385-db-ap.dts | ||
81 | +++ b/arch/arm/boot/dts/armada-385-db-ap.dts | ||
82 | @@ -46,7 +46,7 @@ | ||
83 | |||
84 | / { | ||
85 | model = "Marvell Armada 385 Access Point Development Board"; | ||
86 | - compatible = "marvell,a385-db-ap", "marvell,armada385", "marvell,armada38x"; | ||
87 | + compatible = "marvell,a385-db-ap", "marvell,armada385", "marvell,armada380"; | ||
88 | |||
89 | chosen { | ||
90 | stdout-path = "serial1:115200n8"; | ||
91 | diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts b/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
92 | index 146e71118a72..a0ec8bff83dd 100644 | ||
93 | --- a/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
94 | +++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
95 | @@ -915,6 +915,11 @@ | ||
96 | }; | ||
97 | }; | ||
98 | |||
99 | +&pmu_system_controller { | ||
100 | + assigned-clocks = <&pmu_system_controller 0>; | ||
101 | + assigned-clock-parents = <&clock CLK_FIN_PLL>; | ||
102 | +}; | ||
103 | + | ||
104 | &rtc { | ||
105 | status = "okay"; | ||
106 | clocks = <&clock CLK_RTC>, <&max77802 MAX77802_CLK_32K_AP>; | ||
107 | diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
108 | index 02eb8b15374f..1171f347878a 100644 | ||
109 | --- a/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
110 | +++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
111 | @@ -878,6 +878,11 @@ | ||
112 | }; | ||
113 | }; | ||
114 | |||
115 | +&pmu_system_controller { | ||
116 | + assigned-clocks = <&pmu_system_controller 0>; | ||
117 | + assigned-clock-parents = <&clock CLK_FIN_PLL>; | ||
118 | +}; | ||
119 | + | ||
120 | &rtc { | ||
121 | status = "okay"; | ||
122 | clocks = <&clock CLK_RTC>, <&max77802 MAX77802_CLK_32K_AP>; | ||
123 | diff --git a/arch/arm/boot/dts/imx6dl-riotboard.dts b/arch/arm/boot/dts/imx6dl-riotboard.dts | ||
124 | index 43cb3fd76be7..5111f5170d53 100644 | ||
125 | --- a/arch/arm/boot/dts/imx6dl-riotboard.dts | ||
126 | +++ b/arch/arm/boot/dts/imx6dl-riotboard.dts | ||
127 | @@ -305,8 +305,8 @@ | ||
128 | &usdhc2 { | ||
129 | pinctrl-names = "default"; | ||
130 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
131 | - cd-gpios = <&gpio1 4 0>; | ||
132 | - wp-gpios = <&gpio1 2 0>; | ||
133 | + cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||
134 | + wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; | ||
135 | vmmc-supply = <®_3p3v>; | ||
136 | status = "okay"; | ||
137 | }; | ||
138 | @@ -314,8 +314,8 @@ | ||
139 | &usdhc3 { | ||
140 | pinctrl-names = "default"; | ||
141 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
142 | - cd-gpios = <&gpio7 0 0>; | ||
143 | - wp-gpios = <&gpio7 1 0>; | ||
144 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
145 | + wp-gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>; | ||
146 | vmmc-supply = <®_3p3v>; | ||
147 | status = "okay"; | ||
148 | }; | ||
149 | diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts | ||
150 | index 78df05e9d1ce..d6515f7a56c4 100644 | ||
151 | --- a/arch/arm/boot/dts/imx6q-arm2.dts | ||
152 | +++ b/arch/arm/boot/dts/imx6q-arm2.dts | ||
153 | @@ -11,6 +11,7 @@ | ||
154 | */ | ||
155 | |||
156 | /dts-v1/; | ||
157 | +#include <dt-bindings/gpio/gpio.h> | ||
158 | #include "imx6q.dtsi" | ||
159 | |||
160 | / { | ||
161 | @@ -196,8 +197,8 @@ | ||
162 | }; | ||
163 | |||
164 | &usdhc3 { | ||
165 | - cd-gpios = <&gpio6 11 0>; | ||
166 | - wp-gpios = <&gpio6 14 0>; | ||
167 | + cd-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>; | ||
168 | + wp-gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>; | ||
169 | vmmc-supply = <®_3p3v>; | ||
170 | pinctrl-names = "default"; | ||
171 | pinctrl-0 = <&pinctrl_usdhc3 | ||
172 | diff --git a/arch/arm/boot/dts/imx6q-gk802.dts b/arch/arm/boot/dts/imx6q-gk802.dts | ||
173 | index 703539cf36d3..00bd63e63d0c 100644 | ||
174 | --- a/arch/arm/boot/dts/imx6q-gk802.dts | ||
175 | +++ b/arch/arm/boot/dts/imx6q-gk802.dts | ||
176 | @@ -7,6 +7,7 @@ | ||
177 | */ | ||
178 | |||
179 | /dts-v1/; | ||
180 | +#include <dt-bindings/gpio/gpio.h> | ||
181 | #include "imx6q.dtsi" | ||
182 | |||
183 | / { | ||
184 | @@ -161,7 +162,7 @@ | ||
185 | pinctrl-names = "default"; | ||
186 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
187 | bus-width = <4>; | ||
188 | - cd-gpios = <&gpio6 11 0>; | ||
189 | + cd-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>; | ||
190 | vmmc-supply = <®_3p3v>; | ||
191 | status = "okay"; | ||
192 | }; | ||
193 | diff --git a/arch/arm/boot/dts/imx6q-tbs2910.dts b/arch/arm/boot/dts/imx6q-tbs2910.dts | ||
194 | index a43abfa21e33..5645d52850a7 100644 | ||
195 | --- a/arch/arm/boot/dts/imx6q-tbs2910.dts | ||
196 | +++ b/arch/arm/boot/dts/imx6q-tbs2910.dts | ||
197 | @@ -251,7 +251,7 @@ | ||
198 | pinctrl-names = "default"; | ||
199 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
200 | bus-width = <4>; | ||
201 | - cd-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; | ||
202 | + cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||
203 | vmmc-supply = <®_3p3v>; | ||
204 | status = "okay"; | ||
205 | }; | ||
206 | @@ -260,7 +260,7 @@ | ||
207 | pinctrl-names = "default"; | ||
208 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
209 | bus-width = <4>; | ||
210 | - cd-gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; | ||
211 | + cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||
212 | wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||
213 | vmmc-supply = <®_3p3v>; | ||
214 | status = "okay"; | ||
215 | diff --git a/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi b/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi | ||
216 | index e6d9195a1da7..f4d6ae564ead 100644 | ||
217 | --- a/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi | ||
218 | +++ b/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi | ||
219 | @@ -173,7 +173,7 @@ | ||
220 | pinctrl-names = "default"; | ||
221 | pinctrl-0 = <&pinctrl_usdhc1>; | ||
222 | vmmc-supply = <®_3p3v>; | ||
223 | - cd-gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; | ||
224 | + cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; | ||
225 | status = "okay"; | ||
226 | }; | ||
227 | |||
228 | @@ -181,7 +181,7 @@ | ||
229 | pinctrl-names = "default"; | ||
230 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
231 | vmmc-supply = <®_3p3v>; | ||
232 | - cd-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; | ||
233 | + cd-gpios = <&gpio4 8 GPIO_ACTIVE_LOW>; | ||
234 | status = "okay"; | ||
235 | }; | ||
236 | |||
237 | diff --git a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi | ||
238 | index d033bb182060..6a846e0ef505 100644 | ||
239 | --- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi | ||
240 | +++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi | ||
241 | @@ -259,6 +259,6 @@ | ||
242 | pinctrl-names = "default"; | ||
243 | pinctrl-0 = <&pinctrl_cubox_i_usdhc2_aux &pinctrl_cubox_i_usdhc2>; | ||
244 | vmmc-supply = <®_3p3v>; | ||
245 | - cd-gpios = <&gpio1 4 0>; | ||
246 | + cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||
247 | status = "okay"; | ||
248 | }; | ||
249 | diff --git a/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi | ||
250 | index 2c253d6d20bd..45e7c39e80d5 100644 | ||
251 | --- a/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi | ||
252 | +++ b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi | ||
253 | @@ -1,3 +1,5 @@ | ||
254 | +#include <dt-bindings/gpio/gpio.h> | ||
255 | + | ||
256 | / { | ||
257 | regulators { | ||
258 | compatible = "simple-bus"; | ||
259 | @@ -181,7 +183,7 @@ | ||
260 | &usdhc2 { /* module slot */ | ||
261 | pinctrl-names = "default"; | ||
262 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
263 | - cd-gpios = <&gpio2 2 0>; | ||
264 | + cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||
265 | status = "okay"; | ||
266 | }; | ||
267 | |||
268 | diff --git a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi | ||
269 | index b5756c21ea1d..4493f6e99330 100644 | ||
270 | --- a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi | ||
271 | +++ b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi | ||
272 | @@ -318,7 +318,7 @@ | ||
273 | &usdhc3 { | ||
274 | pinctrl-names = "default"; | ||
275 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
276 | - cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||
277 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
278 | vmmc-supply = <®_3p3v>; | ||
279 | status = "okay"; | ||
280 | }; | ||
281 | diff --git a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi | ||
282 | index 86f03c1b147c..a857d1294609 100644 | ||
283 | --- a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi | ||
284 | +++ b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi | ||
285 | @@ -324,7 +324,7 @@ | ||
286 | &usdhc3 { | ||
287 | pinctrl-names = "default"; | ||
288 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
289 | - cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||
290 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
291 | vmmc-supply = <®_3p3v>; | ||
292 | status = "okay"; | ||
293 | }; | ||
294 | diff --git a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi | ||
295 | index 4a8d97f47759..1afe3385e2d2 100644 | ||
296 | --- a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi | ||
297 | +++ b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi | ||
298 | @@ -417,7 +417,7 @@ | ||
299 | &usdhc3 { | ||
300 | pinctrl-names = "default"; | ||
301 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
302 | - cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||
303 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
304 | vmmc-supply = <®_3p3v>; | ||
305 | status = "okay"; | ||
306 | }; | ||
307 | diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi | ||
308 | index 151a3db2aea9..c6833d2b4ff5 100644 | ||
309 | --- a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi | ||
310 | +++ b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi | ||
311 | @@ -41,6 +41,7 @@ | ||
312 | */ | ||
313 | #include "imx6qdl-microsom.dtsi" | ||
314 | #include "imx6qdl-microsom-ar8035.dtsi" | ||
315 | +#include <dt-bindings/gpio/gpio.h> | ||
316 | |||
317 | / { | ||
318 | chosen { | ||
319 | @@ -288,6 +289,6 @@ | ||
320 | &pinctrl_hummingboard_usdhc2 | ||
321 | >; | ||
322 | vmmc-supply = <®_3p3v>; | ||
323 | - cd-gpios = <&gpio1 4 0>; | ||
324 | + cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||
325 | status = "okay"; | ||
326 | }; | ||
327 | diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi | ||
328 | index 08218120e770..64e0b6178bf4 100644 | ||
329 | --- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi | ||
330 | +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi | ||
331 | @@ -449,7 +449,7 @@ | ||
332 | &usdhc3 { | ||
333 | pinctrl-names = "default"; | ||
334 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
335 | - cd-gpios = <&gpio7 0 0>; | ||
336 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
337 | vmmc-supply = <®_3p3v>; | ||
338 | status = "okay"; | ||
339 | }; | ||
340 | @@ -457,7 +457,7 @@ | ||
341 | &usdhc4 { | ||
342 | pinctrl-names = "default"; | ||
343 | pinctrl-0 = <&pinctrl_usdhc4>; | ||
344 | - cd-gpios = <&gpio2 6 0>; | ||
345 | + cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; | ||
346 | vmmc-supply = <®_3p3v>; | ||
347 | status = "okay"; | ||
348 | }; | ||
349 | diff --git a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | ||
350 | index 1ce6133b67f5..9e6ecd99b472 100644 | ||
351 | --- a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | ||
352 | +++ b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | ||
353 | @@ -409,8 +409,8 @@ | ||
354 | &usdhc2 { | ||
355 | pinctrl-names = "default"; | ||
356 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
357 | - cd-gpios = <&gpio1 4 0>; | ||
358 | - wp-gpios = <&gpio1 2 0>; | ||
359 | + cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||
360 | + wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; | ||
361 | status = "disabled"; | ||
362 | }; | ||
363 | |||
364 | @@ -418,7 +418,7 @@ | ||
365 | pinctrl-names = "default"; | ||
366 | pinctrl-0 = <&pinctrl_usdhc3 | ||
367 | &pinctrl_usdhc3_cdwp>; | ||
368 | - cd-gpios = <&gpio1 27 0>; | ||
369 | - wp-gpios = <&gpio1 29 0>; | ||
370 | + cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; | ||
371 | + wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; | ||
372 | status = "disabled"; | ||
373 | }; | ||
374 | diff --git a/arch/arm/boot/dts/imx6qdl-rex.dtsi b/arch/arm/boot/dts/imx6qdl-rex.dtsi | ||
375 | index 394a4ace351a..a50356243888 100644 | ||
376 | --- a/arch/arm/boot/dts/imx6qdl-rex.dtsi | ||
377 | +++ b/arch/arm/boot/dts/imx6qdl-rex.dtsi | ||
378 | @@ -340,7 +340,7 @@ | ||
379 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
380 | bus-width = <4>; | ||
381 | cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||
382 | - wp-gpios = <&gpio2 3 GPIO_ACTIVE_LOW>; | ||
383 | + wp-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; | ||
384 | status = "okay"; | ||
385 | }; | ||
386 | |||
387 | @@ -349,6 +349,6 @@ | ||
388 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
389 | bus-width = <4>; | ||
390 | cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||
391 | - wp-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>; | ||
392 | + wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||
393 | status = "okay"; | ||
394 | }; | ||
395 | diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | ||
396 | index 3b24b12651b2..e329ca5c3322 100644 | ||
397 | --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | ||
398 | +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | ||
399 | @@ -467,8 +467,8 @@ | ||
400 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
401 | pinctrl-1 = <&pinctrl_usdhc3_100mhz>; | ||
402 | pinctrl-2 = <&pinctrl_usdhc3_200mhz>; | ||
403 | - cd-gpios = <&gpio6 15 0>; | ||
404 | - wp-gpios = <&gpio1 13 0>; | ||
405 | + cd-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; | ||
406 | + wp-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; | ||
407 | status = "okay"; | ||
408 | }; | ||
409 | |||
410 | diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi | ||
411 | index 0b28a9d5241e..1e27485e4293 100644 | ||
412 | --- a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi | ||
413 | +++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi | ||
414 | @@ -444,8 +444,8 @@ | ||
415 | &usdhc3 { | ||
416 | pinctrl-names = "default"; | ||
417 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
418 | - cd-gpios = <&gpio7 0 0>; | ||
419 | - wp-gpios = <&gpio7 1 0>; | ||
420 | + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||
421 | + wp-gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>; | ||
422 | vmmc-supply = <®_3p3v>; | ||
423 | status = "okay"; | ||
424 | }; | ||
425 | @@ -453,7 +453,7 @@ | ||
426 | &usdhc4 { | ||
427 | pinctrl-names = "default"; | ||
428 | pinctrl-0 = <&pinctrl_usdhc4>; | ||
429 | - cd-gpios = <&gpio2 6 0>; | ||
430 | + cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; | ||
431 | vmmc-supply = <®_3p3v>; | ||
432 | status = "okay"; | ||
433 | }; | ||
434 | diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi | ||
435 | index a626e6dd8022..944eb81cb2b8 100644 | ||
436 | --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi | ||
437 | +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi | ||
438 | @@ -562,8 +562,8 @@ | ||
439 | pinctrl-names = "default"; | ||
440 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
441 | bus-width = <8>; | ||
442 | - cd-gpios = <&gpio2 2 0>; | ||
443 | - wp-gpios = <&gpio2 3 0>; | ||
444 | + cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||
445 | + wp-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; | ||
446 | status = "okay"; | ||
447 | }; | ||
448 | |||
449 | @@ -571,8 +571,8 @@ | ||
450 | pinctrl-names = "default"; | ||
451 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
452 | bus-width = <8>; | ||
453 | - cd-gpios = <&gpio2 0 0>; | ||
454 | - wp-gpios = <&gpio2 1 0>; | ||
455 | + cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||
456 | + wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||
457 | status = "okay"; | ||
458 | }; | ||
459 | |||
460 | diff --git a/arch/arm/boot/dts/imx6qdl-tx6.dtsi b/arch/arm/boot/dts/imx6qdl-tx6.dtsi | ||
461 | index f02b80b41d4f..da08de324e9e 100644 | ||
462 | --- a/arch/arm/boot/dts/imx6qdl-tx6.dtsi | ||
463 | +++ b/arch/arm/boot/dts/imx6qdl-tx6.dtsi | ||
464 | @@ -680,7 +680,7 @@ | ||
465 | pinctrl-0 = <&pinctrl_usdhc1>; | ||
466 | bus-width = <4>; | ||
467 | no-1-8-v; | ||
468 | - cd-gpios = <&gpio7 2 0>; | ||
469 | + cd-gpios = <&gpio7 2 GPIO_ACTIVE_LOW>; | ||
470 | fsl,wp-controller; | ||
471 | status = "okay"; | ||
472 | }; | ||
473 | @@ -690,7 +690,7 @@ | ||
474 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
475 | bus-width = <4>; | ||
476 | no-1-8-v; | ||
477 | - cd-gpios = <&gpio7 3 0>; | ||
478 | + cd-gpios = <&gpio7 3 GPIO_ACTIVE_LOW>; | ||
479 | fsl,wp-controller; | ||
480 | status = "okay"; | ||
481 | }; | ||
482 | diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi | ||
483 | index 5fb091675582..9e096d811bed 100644 | ||
484 | --- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi | ||
485 | +++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi | ||
486 | @@ -9,6 +9,8 @@ | ||
487 | * | ||
488 | */ | ||
489 | |||
490 | +#include <dt-bindings/gpio/gpio.h> | ||
491 | + | ||
492 | / { | ||
493 | regulators { | ||
494 | compatible = "simple-bus"; | ||
495 | @@ -250,13 +252,13 @@ | ||
496 | &usdhc1 { | ||
497 | pinctrl-names = "default"; | ||
498 | pinctrl-0 = <&pinctrl_usdhc1>; | ||
499 | - cd-gpios = <&gpio1 2 0>; | ||
500 | + cd-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>; | ||
501 | status = "okay"; | ||
502 | }; | ||
503 | |||
504 | &usdhc3 { | ||
505 | pinctrl-names = "default"; | ||
506 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
507 | - cd-gpios = <&gpio3 9 0>; | ||
508 | + cd-gpios = <&gpio3 9 GPIO_ACTIVE_LOW>; | ||
509 | status = "okay"; | ||
510 | }; | ||
511 | diff --git a/arch/arm/boot/dts/imx6sl-evk.dts b/arch/arm/boot/dts/imx6sl-evk.dts | ||
512 | index 945887d3fdb3..b84dff2e94ea 100644 | ||
513 | --- a/arch/arm/boot/dts/imx6sl-evk.dts | ||
514 | +++ b/arch/arm/boot/dts/imx6sl-evk.dts | ||
515 | @@ -617,8 +617,8 @@ | ||
516 | pinctrl-1 = <&pinctrl_usdhc1_100mhz>; | ||
517 | pinctrl-2 = <&pinctrl_usdhc1_200mhz>; | ||
518 | bus-width = <8>; | ||
519 | - cd-gpios = <&gpio4 7 0>; | ||
520 | - wp-gpios = <&gpio4 6 0>; | ||
521 | + cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; | ||
522 | + wp-gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; | ||
523 | status = "okay"; | ||
524 | }; | ||
525 | |||
526 | @@ -627,8 +627,8 @@ | ||
527 | pinctrl-0 = <&pinctrl_usdhc2>; | ||
528 | pinctrl-1 = <&pinctrl_usdhc2_100mhz>; | ||
529 | pinctrl-2 = <&pinctrl_usdhc2_200mhz>; | ||
530 | - cd-gpios = <&gpio5 0 0>; | ||
531 | - wp-gpios = <&gpio4 29 0>; | ||
532 | + cd-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; | ||
533 | + wp-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>; | ||
534 | status = "okay"; | ||
535 | }; | ||
536 | |||
537 | @@ -637,6 +637,6 @@ | ||
538 | pinctrl-0 = <&pinctrl_usdhc3>; | ||
539 | pinctrl-1 = <&pinctrl_usdhc3_100mhz>; | ||
540 | pinctrl-2 = <&pinctrl_usdhc3_200mhz>; | ||
541 | - cd-gpios = <&gpio3 22 0>; | ||
542 | + cd-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>; | ||
543 | status = "okay"; | ||
544 | }; | ||
545 | diff --git a/arch/arm/boot/dts/imx6sx-sabreauto.dts b/arch/arm/boot/dts/imx6sx-sabreauto.dts | ||
546 | index e3c0b63c2205..115f3fd78971 100644 | ||
547 | --- a/arch/arm/boot/dts/imx6sx-sabreauto.dts | ||
548 | +++ b/arch/arm/boot/dts/imx6sx-sabreauto.dts | ||
549 | @@ -49,7 +49,7 @@ | ||
550 | pinctrl-1 = <&pinctrl_usdhc3_100mhz>; | ||
551 | pinctrl-2 = <&pinctrl_usdhc3_200mhz>; | ||
552 | bus-width = <8>; | ||
553 | - cd-gpios = <&gpio7 10 GPIO_ACTIVE_HIGH>; | ||
554 | + cd-gpios = <&gpio7 10 GPIO_ACTIVE_LOW>; | ||
555 | wp-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>; | ||
556 | keep-power-in-suspend; | ||
557 | enable-sdio-wakeup; | ||
558 | @@ -61,7 +61,7 @@ | ||
559 | pinctrl-names = "default"; | ||
560 | pinctrl-0 = <&pinctrl_usdhc4>; | ||
561 | bus-width = <8>; | ||
562 | - cd-gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>; | ||
563 | + cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>; | ||
564 | no-1-8-v; | ||
565 | keep-power-in-suspend; | ||
566 | enable-sdio-wakup; | ||
567 | diff --git a/arch/arm/boot/dts/imx6sx-sdb.dtsi b/arch/arm/boot/dts/imx6sx-sdb.dtsi | ||
568 | index cef04cef3a80..ac88c3467078 100644 | ||
569 | --- a/arch/arm/boot/dts/imx6sx-sdb.dtsi | ||
570 | +++ b/arch/arm/boot/dts/imx6sx-sdb.dtsi | ||
571 | @@ -293,7 +293,7 @@ | ||
572 | pinctrl-1 = <&pinctrl_usdhc3_100mhz>; | ||
573 | pinctrl-2 = <&pinctrl_usdhc3_200mhz>; | ||
574 | bus-width = <8>; | ||
575 | - cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; | ||
576 | + cd-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>; | ||
577 | wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>; | ||
578 | keep-power-in-suspend; | ||
579 | enable-sdio-wakeup; | ||
580 | @@ -304,7 +304,7 @@ | ||
581 | &usdhc4 { | ||
582 | pinctrl-names = "default"; | ||
583 | pinctrl-0 = <&pinctrl_usdhc4>; | ||
584 | - cd-gpios = <&gpio6 21 GPIO_ACTIVE_HIGH>; | ||
585 | + cd-gpios = <&gpio6 21 GPIO_ACTIVE_LOW>; | ||
586 | wp-gpios = <&gpio6 20 GPIO_ACTIVE_HIGH>; | ||
587 | status = "okay"; | ||
588 | }; | ||
589 | diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi | ||
590 | index 2b4847c7cbd4..fa36571b755a 100644 | ||
591 | --- a/arch/arm/boot/dts/sun7i-a20.dtsi | ||
592 | +++ b/arch/arm/boot/dts/sun7i-a20.dtsi | ||
593 | @@ -111,7 +111,7 @@ | ||
594 | 720000 1200000 | ||
595 | 528000 1100000 | ||
596 | 312000 1000000 | ||
597 | - 144000 900000 | ||
598 | + 144000 1000000 | ||
599 | >; | ||
600 | #cooling-cells = <2>; | ||
601 | cooling-min-level = <0>; | ||
602 | diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig | ||
603 | index f1f79d104309..60c1a0f4d67a 100644 | ||
604 | --- a/arch/arm/kvm/Kconfig | ||
605 | +++ b/arch/arm/kvm/Kconfig | ||
606 | @@ -21,6 +21,7 @@ config KVM | ||
607 | depends on MMU && OF | ||
608 | select PREEMPT_NOTIFIERS | ||
609 | select ANON_INODES | ||
610 | + select ARM_GIC | ||
611 | select HAVE_KVM_CPU_RELAX_INTERCEPT | ||
612 | select HAVE_KVM_ARCH_TLB_FLUSH_ALL | ||
613 | select KVM_MMIO | ||
614 | diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c | ||
615 | index f5b00f41c4f6..b8b6e22f9987 100644 | ||
616 | --- a/arch/arm/plat-orion/common.c | ||
617 | +++ b/arch/arm/plat-orion/common.c | ||
618 | @@ -499,7 +499,7 @@ void __init orion_ge00_switch_init(struct dsa_platform_data *d, int irq) | ||
619 | |||
620 | d->netdev = &orion_ge00.dev; | ||
621 | for (i = 0; i < d->nr_chips; i++) | ||
622 | - d->chip[i].host_dev = &orion_ge00_shared.dev; | ||
623 | + d->chip[i].host_dev = &orion_ge_mvmdio.dev; | ||
624 | orion_switch_device.dev.platform_data = d; | ||
625 | |||
626 | platform_device_register(&orion_switch_device); | ||
627 | diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c | ||
628 | index aedec81d1198..f6455273b2f8 100644 | ||
629 | --- a/arch/arm/vdso/vdsomunge.c | ||
630 | +++ b/arch/arm/vdso/vdsomunge.c | ||
631 | @@ -45,7 +45,6 @@ | ||
632 | * it does. | ||
633 | */ | ||
634 | |||
635 | -#include <byteswap.h> | ||
636 | #include <elf.h> | ||
637 | #include <errno.h> | ||
638 | #include <fcntl.h> | ||
639 | @@ -59,6 +58,16 @@ | ||
640 | #include <sys/types.h> | ||
641 | #include <unistd.h> | ||
642 | |||
643 | +#define swab16(x) \ | ||
644 | + ((((x) & 0x00ff) << 8) | \ | ||
645 | + (((x) & 0xff00) >> 8)) | ||
646 | + | ||
647 | +#define swab32(x) \ | ||
648 | + ((((x) & 0x000000ff) << 24) | \ | ||
649 | + (((x) & 0x0000ff00) << 8) | \ | ||
650 | + (((x) & 0x00ff0000) >> 8) | \ | ||
651 | + (((x) & 0xff000000) >> 24)) | ||
652 | + | ||
653 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ | ||
654 | #define HOST_ORDER ELFDATA2LSB | ||
655 | #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | ||
656 | @@ -104,17 +113,17 @@ static void cleanup(void) | ||
657 | |||
658 | static Elf32_Word read_elf_word(Elf32_Word word, bool swap) | ||
659 | { | ||
660 | - return swap ? bswap_32(word) : word; | ||
661 | + return swap ? swab32(word) : word; | ||
662 | } | ||
663 | |||
664 | static Elf32_Half read_elf_half(Elf32_Half half, bool swap) | ||
665 | { | ||
666 | - return swap ? bswap_16(half) : half; | ||
667 | + return swap ? swab16(half) : half; | ||
668 | } | ||
669 | |||
670 | static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap) | ||
671 | { | ||
672 | - *dst = swap ? bswap_32(val) : val; | ||
673 | + *dst = swap ? swab32(val) : val; | ||
674 | } | ||
675 | |||
676 | int main(int argc, char **argv) | ||
677 | diff --git a/arch/arm64/include/asm/cpuidle.h b/arch/arm64/include/asm/cpuidle.h | ||
678 | index 141b2fcabaa6..0f74f05d662a 100644 | ||
679 | --- a/arch/arm64/include/asm/cpuidle.h | ||
680 | +++ b/arch/arm64/include/asm/cpuidle.h | ||
681 | @@ -5,20 +5,16 @@ | ||
682 | |||
683 | #ifdef CONFIG_CPU_IDLE | ||
684 | extern int arm_cpuidle_init(unsigned int cpu); | ||
685 | -extern int cpu_suspend(unsigned long arg); | ||
686 | +extern int arm_cpuidle_suspend(int index); | ||
687 | #else | ||
688 | static inline int arm_cpuidle_init(unsigned int cpu) | ||
689 | { | ||
690 | return -EOPNOTSUPP; | ||
691 | } | ||
692 | |||
693 | -static inline int cpu_suspend(unsigned long arg) | ||
694 | +static inline int arm_cpuidle_suspend(int index) | ||
695 | { | ||
696 | return -EOPNOTSUPP; | ||
697 | } | ||
698 | #endif | ||
699 | -static inline int arm_cpuidle_suspend(int index) | ||
700 | -{ | ||
701 | - return cpu_suspend(index); | ||
702 | -} | ||
703 | #endif | ||
704 | diff --git a/arch/arm64/include/asm/suspend.h b/arch/arm64/include/asm/suspend.h | ||
705 | index 003802f58963..59a5b0f1e81c 100644 | ||
706 | --- a/arch/arm64/include/asm/suspend.h | ||
707 | +++ b/arch/arm64/include/asm/suspend.h | ||
708 | @@ -21,6 +21,6 @@ struct sleep_save_sp { | ||
709 | phys_addr_t save_ptr_stash_phys; | ||
710 | }; | ||
711 | |||
712 | -extern int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long)); | ||
713 | +extern int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)); | ||
714 | extern void cpu_resume(void); | ||
715 | #endif | ||
716 | diff --git a/arch/arm64/kernel/armv8_deprecated.c b/arch/arm64/kernel/armv8_deprecated.c | ||
717 | index 7922c2e710ca..7ac3920b1356 100644 | ||
718 | --- a/arch/arm64/kernel/armv8_deprecated.c | ||
719 | +++ b/arch/arm64/kernel/armv8_deprecated.c | ||
720 | @@ -279,22 +279,24 @@ static void register_insn_emulation_sysctl(struct ctl_table *table) | ||
721 | */ | ||
722 | #define __user_swpX_asm(data, addr, res, temp, B) \ | ||
723 | __asm__ __volatile__( \ | ||
724 | - " mov %w2, %w1\n" \ | ||
725 | - "0: ldxr"B" %w1, [%3]\n" \ | ||
726 | - "1: stxr"B" %w0, %w2, [%3]\n" \ | ||
727 | + "0: ldxr"B" %w2, [%3]\n" \ | ||
728 | + "1: stxr"B" %w0, %w1, [%3]\n" \ | ||
729 | " cbz %w0, 2f\n" \ | ||
730 | " mov %w0, %w4\n" \ | ||
731 | + " b 3f\n" \ | ||
732 | "2:\n" \ | ||
733 | + " mov %w1, %w2\n" \ | ||
734 | + "3:\n" \ | ||
735 | " .pushsection .fixup,\"ax\"\n" \ | ||
736 | " .align 2\n" \ | ||
737 | - "3: mov %w0, %w5\n" \ | ||
738 | - " b 2b\n" \ | ||
739 | + "4: mov %w0, %w5\n" \ | ||
740 | + " b 3b\n" \ | ||
741 | " .popsection" \ | ||
742 | " .pushsection __ex_table,\"a\"\n" \ | ||
743 | " .align 3\n" \ | ||
744 | - " .quad 0b, 3b\n" \ | ||
745 | - " .quad 1b, 3b\n" \ | ||
746 | - " .popsection" \ | ||
747 | + " .quad 0b, 4b\n" \ | ||
748 | + " .quad 1b, 4b\n" \ | ||
749 | + " .popsection\n" \ | ||
750 | : "=&r" (res), "+r" (data), "=&r" (temp) \ | ||
751 | : "r" (addr), "i" (-EAGAIN), "i" (-EFAULT) \ | ||
752 | : "memory") | ||
753 | diff --git a/arch/arm64/kernel/cpuidle.c b/arch/arm64/kernel/cpuidle.c | ||
754 | index a78143a5c99f..2bbd0fee084f 100644 | ||
755 | --- a/arch/arm64/kernel/cpuidle.c | ||
756 | +++ b/arch/arm64/kernel/cpuidle.c | ||
757 | @@ -37,7 +37,7 @@ int arm_cpuidle_init(unsigned int cpu) | ||
758 | * Return: 0 on success, -EOPNOTSUPP if CPU suspend hook not initialized, CPU | ||
759 | * operations back-end error code otherwise. | ||
760 | */ | ||
761 | -int cpu_suspend(unsigned long arg) | ||
762 | +int arm_cpuidle_suspend(int index) | ||
763 | { | ||
764 | int cpu = smp_processor_id(); | ||
765 | |||
766 | @@ -47,5 +47,5 @@ int cpu_suspend(unsigned long arg) | ||
767 | */ | ||
768 | if (!cpu_ops[cpu] || !cpu_ops[cpu]->cpu_suspend) | ||
769 | return -EOPNOTSUPP; | ||
770 | - return cpu_ops[cpu]->cpu_suspend(arg); | ||
771 | + return cpu_ops[cpu]->cpu_suspend(index); | ||
772 | } | ||
773 | diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c | ||
774 | index ea18cb53921e..24d4733b7e3c 100644 | ||
775 | --- a/arch/arm64/kernel/psci.c | ||
776 | +++ b/arch/arm64/kernel/psci.c | ||
777 | @@ -546,7 +546,7 @@ static int __maybe_unused cpu_psci_cpu_suspend(unsigned long index) | ||
778 | if (state[index - 1].type == PSCI_POWER_STATE_TYPE_STANDBY) | ||
779 | ret = psci_ops.cpu_suspend(state[index - 1], 0); | ||
780 | else | ||
781 | - ret = __cpu_suspend(index, psci_suspend_finisher); | ||
782 | + ret = cpu_suspend(index, psci_suspend_finisher); | ||
783 | |||
784 | return ret; | ||
785 | } | ||
786 | diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c | ||
787 | index 407991bf79f5..ccb6078ed9f2 100644 | ||
788 | --- a/arch/arm64/kernel/stacktrace.c | ||
789 | +++ b/arch/arm64/kernel/stacktrace.c | ||
790 | @@ -48,11 +48,7 @@ int notrace unwind_frame(struct stackframe *frame) | ||
791 | |||
792 | frame->sp = fp + 0x10; | ||
793 | frame->fp = *(unsigned long *)(fp); | ||
794 | - /* | ||
795 | - * -4 here because we care about the PC at time of bl, | ||
796 | - * not where the return will go. | ||
797 | - */ | ||
798 | - frame->pc = *(unsigned long *)(fp + 8) - 4; | ||
799 | + frame->pc = *(unsigned long *)(fp + 8); | ||
800 | |||
801 | return 0; | ||
802 | } | ||
803 | diff --git a/arch/arm64/kernel/suspend.c b/arch/arm64/kernel/suspend.c | ||
804 | index d7daf45ae7a2..53f1f8dccf6c 100644 | ||
805 | --- a/arch/arm64/kernel/suspend.c | ||
806 | +++ b/arch/arm64/kernel/suspend.c | ||
807 | @@ -51,13 +51,13 @@ void __init cpu_suspend_set_dbg_restorer(void (*hw_bp_restore)(void *)) | ||
808 | } | ||
809 | |||
810 | /* | ||
811 | - * __cpu_suspend | ||
812 | + * cpu_suspend | ||
813 | * | ||
814 | * arg: argument to pass to the finisher function | ||
815 | * fn: finisher function pointer | ||
816 | * | ||
817 | */ | ||
818 | -int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
819 | +int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
820 | { | ||
821 | struct mm_struct *mm = current->active_mm; | ||
822 | int ret; | ||
823 | @@ -80,17 +80,21 @@ int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
824 | if (ret == 0) { | ||
825 | /* | ||
826 | * We are resuming from reset with TTBR0_EL1 set to the | ||
827 | - * idmap to enable the MMU; restore the active_mm mappings in | ||
828 | - * TTBR0_EL1 unless the active_mm == &init_mm, in which case | ||
829 | - * the thread entered __cpu_suspend with TTBR0_EL1 set to | ||
830 | - * reserved TTBR0 page tables and should be restored as such. | ||
831 | + * idmap to enable the MMU; set the TTBR0 to the reserved | ||
832 | + * page tables to prevent speculative TLB allocations, flush | ||
833 | + * the local tlb and set the default tcr_el1.t0sz so that | ||
834 | + * the TTBR0 address space set-up is properly restored. | ||
835 | + * If the current active_mm != &init_mm we entered cpu_suspend | ||
836 | + * with mappings in TTBR0 that must be restored, so we switch | ||
837 | + * them back to complete the address space configuration | ||
838 | + * restoration before returning. | ||
839 | */ | ||
840 | - if (mm == &init_mm) | ||
841 | - cpu_set_reserved_ttbr0(); | ||
842 | - else | ||
843 | - cpu_switch_mm(mm->pgd, mm); | ||
844 | - | ||
845 | + cpu_set_reserved_ttbr0(); | ||
846 | flush_tlb_all(); | ||
847 | + cpu_set_default_tcr_t0sz(); | ||
848 | + | ||
849 | + if (mm != &init_mm) | ||
850 | + cpu_switch_mm(mm->pgd, mm); | ||
851 | |||
852 | /* | ||
853 | * Restore per-cpu offset before any kernel | ||
854 | diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c | ||
855 | index caffb10e7aa3..5607693f35cf 100644 | ||
856 | --- a/arch/powerpc/kernel/rtas.c | ||
857 | +++ b/arch/powerpc/kernel/rtas.c | ||
858 | @@ -1041,6 +1041,9 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | ||
859 | if (!capable(CAP_SYS_ADMIN)) | ||
860 | return -EPERM; | ||
861 | |||
862 | + if (!rtas.entry) | ||
863 | + return -EINVAL; | ||
864 | + | ||
865 | if (copy_from_user(&args, uargs, 3 * sizeof(u32)) != 0) | ||
866 | return -EFAULT; | ||
867 | |||
868 | diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c | ||
869 | index 0cdc154a22b5..4c3f76b425c1 100644 | ||
870 | --- a/arch/x86/boot/compressed/eboot.c | ||
871 | +++ b/arch/x86/boot/compressed/eboot.c | ||
872 | @@ -667,6 +667,7 @@ setup_gop32(struct screen_info *si, efi_guid_t *proto, | ||
873 | bool conout_found = false; | ||
874 | void *dummy = NULL; | ||
875 | u32 h = handles[i]; | ||
876 | + u32 current_fb_base; | ||
877 | |||
878 | status = efi_call_early(handle_protocol, h, | ||
879 | proto, (void **)&gop32); | ||
880 | @@ -678,7 +679,7 @@ setup_gop32(struct screen_info *si, efi_guid_t *proto, | ||
881 | if (status == EFI_SUCCESS) | ||
882 | conout_found = true; | ||
883 | |||
884 | - status = __gop_query32(gop32, &info, &size, &fb_base); | ||
885 | + status = __gop_query32(gop32, &info, &size, ¤t_fb_base); | ||
886 | if (status == EFI_SUCCESS && (!first_gop || conout_found)) { | ||
887 | /* | ||
888 | * Systems that use the UEFI Console Splitter may | ||
889 | @@ -692,6 +693,7 @@ setup_gop32(struct screen_info *si, efi_guid_t *proto, | ||
890 | pixel_format = info->pixel_format; | ||
891 | pixel_info = info->pixel_information; | ||
892 | pixels_per_scan_line = info->pixels_per_scan_line; | ||
893 | + fb_base = current_fb_base; | ||
894 | |||
895 | /* | ||
896 | * Once we've found a GOP supporting ConOut, | ||
897 | @@ -770,6 +772,7 @@ setup_gop64(struct screen_info *si, efi_guid_t *proto, | ||
898 | bool conout_found = false; | ||
899 | void *dummy = NULL; | ||
900 | u64 h = handles[i]; | ||
901 | + u32 current_fb_base; | ||
902 | |||
903 | status = efi_call_early(handle_protocol, h, | ||
904 | proto, (void **)&gop64); | ||
905 | @@ -781,7 +784,7 @@ setup_gop64(struct screen_info *si, efi_guid_t *proto, | ||
906 | if (status == EFI_SUCCESS) | ||
907 | conout_found = true; | ||
908 | |||
909 | - status = __gop_query64(gop64, &info, &size, &fb_base); | ||
910 | + status = __gop_query64(gop64, &info, &size, ¤t_fb_base); | ||
911 | if (status == EFI_SUCCESS && (!first_gop || conout_found)) { | ||
912 | /* | ||
913 | * Systems that use the UEFI Console Splitter may | ||
914 | @@ -795,6 +798,7 @@ setup_gop64(struct screen_info *si, efi_guid_t *proto, | ||
915 | pixel_format = info->pixel_format; | ||
916 | pixel_info = info->pixel_information; | ||
917 | pixels_per_scan_line = info->pixels_per_scan_line; | ||
918 | + fb_base = current_fb_base; | ||
919 | |||
920 | /* | ||
921 | * Once we've found a GOP supporting ConOut, | ||
922 | diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c | ||
923 | index 0cc657160cb6..a10ed8915bf4 100644 | ||
924 | --- a/arch/x86/xen/enlighten.c | ||
925 | +++ b/arch/x86/xen/enlighten.c | ||
926 | @@ -33,7 +33,7 @@ | ||
927 | #include <linux/memblock.h> | ||
928 | #include <linux/edd.h> | ||
929 | |||
930 | -#ifdef CONFIG_KEXEC_CORE | ||
931 | +#ifdef CONFIG_KEXEC | ||
932 | #include <linux/kexec.h> | ||
933 | #endif | ||
934 | |||
935 | @@ -1802,7 +1802,7 @@ static struct notifier_block xen_hvm_cpu_notifier = { | ||
936 | .notifier_call = xen_hvm_cpu_notify, | ||
937 | }; | ||
938 | |||
939 | -#ifdef CONFIG_KEXEC_CORE | ||
940 | +#ifdef CONFIG_KEXEC | ||
941 | static void xen_hvm_shutdown(void) | ||
942 | { | ||
943 | native_machine_shutdown(); | ||
944 | @@ -1836,7 +1836,7 @@ static void __init xen_hvm_guest_init(void) | ||
945 | x86_init.irqs.intr_init = xen_init_IRQ; | ||
946 | xen_hvm_init_time_ops(); | ||
947 | xen_hvm_init_mmu_ops(); | ||
948 | -#ifdef CONFIG_KEXEC_CORE | ||
949 | +#ifdef CONFIG_KEXEC | ||
950 | machine_ops.shutdown = xen_hvm_shutdown; | ||
951 | machine_ops.crash_shutdown = xen_hvm_crash_shutdown; | ||
952 | #endif | ||
953 | diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c | ||
954 | index db201bca1581..523dd10e1751 100644 | ||
955 | --- a/crypto/ablkcipher.c | ||
956 | +++ b/crypto/ablkcipher.c | ||
957 | @@ -698,7 +698,7 @@ struct crypto_ablkcipher *crypto_alloc_ablkcipher(const char *alg_name, | ||
958 | err: | ||
959 | if (err != -EAGAIN) | ||
960 | break; | ||
961 | - if (signal_pending(current)) { | ||
962 | + if (fatal_signal_pending(current)) { | ||
963 | err = -EINTR; | ||
964 | break; | ||
965 | } | ||
966 | diff --git a/crypto/algapi.c b/crypto/algapi.c | ||
967 | index d2627a3d4ed8..dda720c6ab08 100644 | ||
968 | --- a/crypto/algapi.c | ||
969 | +++ b/crypto/algapi.c | ||
970 | @@ -337,7 +337,7 @@ static void crypto_wait_for_test(struct crypto_larval *larval) | ||
971 | crypto_alg_tested(larval->alg.cra_driver_name, 0); | ||
972 | } | ||
973 | |||
974 | - err = wait_for_completion_interruptible(&larval->completion); | ||
975 | + err = wait_for_completion_killable(&larval->completion); | ||
976 | WARN_ON(err); | ||
977 | |||
978 | out: | ||
979 | diff --git a/crypto/api.c b/crypto/api.c | ||
980 | index afe4610afc4b..bbc147cb5dec 100644 | ||
981 | --- a/crypto/api.c | ||
982 | +++ b/crypto/api.c | ||
983 | @@ -172,7 +172,7 @@ static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg) | ||
984 | struct crypto_larval *larval = (void *)alg; | ||
985 | long timeout; | ||
986 | |||
987 | - timeout = wait_for_completion_interruptible_timeout( | ||
988 | + timeout = wait_for_completion_killable_timeout( | ||
989 | &larval->completion, 60 * HZ); | ||
990 | |||
991 | alg = larval->adult; | ||
992 | @@ -445,7 +445,7 @@ struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask) | ||
993 | err: | ||
994 | if (err != -EAGAIN) | ||
995 | break; | ||
996 | - if (signal_pending(current)) { | ||
997 | + if (fatal_signal_pending(current)) { | ||
998 | err = -EINTR; | ||
999 | break; | ||
1000 | } | ||
1001 | @@ -562,7 +562,7 @@ void *crypto_alloc_tfm(const char *alg_name, | ||
1002 | err: | ||
1003 | if (err != -EAGAIN) | ||
1004 | break; | ||
1005 | - if (signal_pending(current)) { | ||
1006 | + if (fatal_signal_pending(current)) { | ||
1007 | err = -EINTR; | ||
1008 | break; | ||
1009 | } | ||
1010 | diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c | ||
1011 | index 41dfe762b7fb..edf2e3ea1740 100644 | ||
1012 | --- a/crypto/crypto_user.c | ||
1013 | +++ b/crypto/crypto_user.c | ||
1014 | @@ -381,7 +381,7 @@ static struct crypto_alg *crypto_user_aead_alg(const char *name, u32 type, | ||
1015 | err = PTR_ERR(alg); | ||
1016 | if (err != -EAGAIN) | ||
1017 | break; | ||
1018 | - if (signal_pending(current)) { | ||
1019 | + if (fatal_signal_pending(current)) { | ||
1020 | err = -EINTR; | ||
1021 | break; | ||
1022 | } | ||
1023 | diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c | ||
1024 | index 683dff272562..04c0e8f3183c 100644 | ||
1025 | --- a/drivers/block/nvme-core.c | ||
1026 | +++ b/drivers/block/nvme-core.c | ||
1027 | @@ -590,6 +590,7 @@ static void req_completion(struct nvme_queue *nvmeq, void *ctx, | ||
1028 | struct nvme_iod *iod = ctx; | ||
1029 | struct request *req = iod_get_private(iod); | ||
1030 | struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req); | ||
1031 | + bool requeue = false; | ||
1032 | |||
1033 | u16 status = le16_to_cpup(&cqe->status) >> 1; | ||
1034 | |||
1035 | @@ -598,12 +599,13 @@ static void req_completion(struct nvme_queue *nvmeq, void *ctx, | ||
1036 | && (jiffies - req->start_time) < req->timeout) { | ||
1037 | unsigned long flags; | ||
1038 | |||
1039 | + requeue = true; | ||
1040 | blk_mq_requeue_request(req); | ||
1041 | spin_lock_irqsave(req->q->queue_lock, flags); | ||
1042 | if (!blk_queue_stopped(req->q)) | ||
1043 | blk_mq_kick_requeue_list(req->q); | ||
1044 | spin_unlock_irqrestore(req->q->queue_lock, flags); | ||
1045 | - return; | ||
1046 | + goto release_iod; | ||
1047 | } | ||
1048 | req->errors = nvme_error_status(status); | ||
1049 | } else | ||
1050 | @@ -613,7 +615,7 @@ static void req_completion(struct nvme_queue *nvmeq, void *ctx, | ||
1051 | dev_warn(&nvmeq->dev->pci_dev->dev, | ||
1052 | "completing aborted command with status:%04x\n", | ||
1053 | status); | ||
1054 | - | ||
1055 | + release_iod: | ||
1056 | if (iod->nents) { | ||
1057 | dma_unmap_sg(&nvmeq->dev->pci_dev->dev, iod->sg, iod->nents, | ||
1058 | rq_data_dir(req) ? DMA_TO_DEVICE : DMA_FROM_DEVICE); | ||
1059 | @@ -626,7 +628,8 @@ static void req_completion(struct nvme_queue *nvmeq, void *ctx, | ||
1060 | } | ||
1061 | nvme_free_iod(nvmeq->dev, iod); | ||
1062 | |||
1063 | - blk_mq_complete_request(req); | ||
1064 | + if (likely(!requeue)) | ||
1065 | + blk_mq_complete_request(req); | ||
1066 | } | ||
1067 | |||
1068 | /* length is in bytes. gfp flags indicates whether we may sleep. */ | ||
1069 | diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c | ||
1070 | index fe8f1e4b4c7c..1ec6441fe2a5 100644 | ||
1071 | --- a/drivers/block/rbd.c | ||
1072 | +++ b/drivers/block/rbd.c | ||
1073 | @@ -96,6 +96,8 @@ static int atomic_dec_return_safe(atomic_t *v) | ||
1074 | #define RBD_MINORS_PER_MAJOR 256 | ||
1075 | #define RBD_SINGLE_MAJOR_PART_SHIFT 4 | ||
1076 | |||
1077 | +#define RBD_MAX_PARENT_CHAIN_LEN 16 | ||
1078 | + | ||
1079 | #define RBD_SNAP_DEV_NAME_PREFIX "snap_" | ||
1080 | #define RBD_MAX_SNAP_NAME_LEN \ | ||
1081 | (NAME_MAX - (sizeof (RBD_SNAP_DEV_NAME_PREFIX) - 1)) | ||
1082 | @@ -425,7 +427,7 @@ static ssize_t rbd_add_single_major(struct bus_type *bus, const char *buf, | ||
1083 | size_t count); | ||
1084 | static ssize_t rbd_remove_single_major(struct bus_type *bus, const char *buf, | ||
1085 | size_t count); | ||
1086 | -static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping); | ||
1087 | +static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth); | ||
1088 | static void rbd_spec_put(struct rbd_spec *spec); | ||
1089 | |||
1090 | static int rbd_dev_id_to_minor(int dev_id) | ||
1091 | @@ -3797,6 +3799,9 @@ static int rbd_init_disk(struct rbd_device *rbd_dev) | ||
1092 | q->limits.discard_zeroes_data = 1; | ||
1093 | |||
1094 | blk_queue_merge_bvec(q, rbd_merge_bvec); | ||
1095 | + if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) | ||
1096 | + q->backing_dev_info.capabilities |= BDI_CAP_STABLE_WRITES; | ||
1097 | + | ||
1098 | disk->queue = q; | ||
1099 | |||
1100 | q->queuedata = rbd_dev; | ||
1101 | @@ -5142,44 +5147,50 @@ out_err: | ||
1102 | return ret; | ||
1103 | } | ||
1104 | |||
1105 | -static int rbd_dev_probe_parent(struct rbd_device *rbd_dev) | ||
1106 | +/* | ||
1107 | + * @depth is rbd_dev_image_probe() -> rbd_dev_probe_parent() -> | ||
1108 | + * rbd_dev_image_probe() recursion depth, which means it's also the | ||
1109 | + * length of the already discovered part of the parent chain. | ||
1110 | + */ | ||
1111 | +static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth) | ||
1112 | { | ||
1113 | struct rbd_device *parent = NULL; | ||
1114 | - struct rbd_spec *parent_spec; | ||
1115 | - struct rbd_client *rbdc; | ||
1116 | int ret; | ||
1117 | |||
1118 | if (!rbd_dev->parent_spec) | ||
1119 | return 0; | ||
1120 | - /* | ||
1121 | - * We need to pass a reference to the client and the parent | ||
1122 | - * spec when creating the parent rbd_dev. Images related by | ||
1123 | - * parent/child relationships always share both. | ||
1124 | - */ | ||
1125 | - parent_spec = rbd_spec_get(rbd_dev->parent_spec); | ||
1126 | - rbdc = __rbd_get_client(rbd_dev->rbd_client); | ||
1127 | |||
1128 | - ret = -ENOMEM; | ||
1129 | - parent = rbd_dev_create(rbdc, parent_spec); | ||
1130 | - if (!parent) | ||
1131 | + if (++depth > RBD_MAX_PARENT_CHAIN_LEN) { | ||
1132 | + pr_info("parent chain is too long (%d)\n", depth); | ||
1133 | + ret = -EINVAL; | ||
1134 | goto out_err; | ||
1135 | + } | ||
1136 | |||
1137 | - ret = rbd_dev_image_probe(parent, false); | ||
1138 | + parent = rbd_dev_create(rbd_dev->rbd_client, rbd_dev->parent_spec); | ||
1139 | + if (!parent) { | ||
1140 | + ret = -ENOMEM; | ||
1141 | + goto out_err; | ||
1142 | + } | ||
1143 | + | ||
1144 | + /* | ||
1145 | + * Images related by parent/child relationships always share | ||
1146 | + * rbd_client and spec/parent_spec, so bump their refcounts. | ||
1147 | + */ | ||
1148 | + __rbd_get_client(rbd_dev->rbd_client); | ||
1149 | + rbd_spec_get(rbd_dev->parent_spec); | ||
1150 | + | ||
1151 | + ret = rbd_dev_image_probe(parent, depth); | ||
1152 | if (ret < 0) | ||
1153 | goto out_err; | ||
1154 | + | ||
1155 | rbd_dev->parent = parent; | ||
1156 | atomic_set(&rbd_dev->parent_ref, 1); | ||
1157 | - | ||
1158 | return 0; | ||
1159 | + | ||
1160 | out_err: | ||
1161 | - if (parent) { | ||
1162 | - rbd_dev_unparent(rbd_dev); | ||
1163 | + rbd_dev_unparent(rbd_dev); | ||
1164 | + if (parent) | ||
1165 | rbd_dev_destroy(parent); | ||
1166 | - } else { | ||
1167 | - rbd_put_client(rbdc); | ||
1168 | - rbd_spec_put(parent_spec); | ||
1169 | - } | ||
1170 | - | ||
1171 | return ret; | ||
1172 | } | ||
1173 | |||
1174 | @@ -5297,7 +5308,7 @@ static void rbd_dev_image_release(struct rbd_device *rbd_dev) | ||
1175 | * parent), initiate a watch on its header object before using that | ||
1176 | * object to get detailed information about the rbd image. | ||
1177 | */ | ||
1178 | -static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | ||
1179 | +static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) | ||
1180 | { | ||
1181 | int ret; | ||
1182 | |||
1183 | @@ -5315,7 +5326,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | ||
1184 | if (ret) | ||
1185 | goto err_out_format; | ||
1186 | |||
1187 | - if (mapping) { | ||
1188 | + if (!depth) { | ||
1189 | ret = rbd_dev_header_watch_sync(rbd_dev); | ||
1190 | if (ret) { | ||
1191 | if (ret == -ENOENT) | ||
1192 | @@ -5336,7 +5347,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | ||
1193 | * Otherwise this is a parent image, identified by pool, image | ||
1194 | * and snap ids - need to fill in names for those ids. | ||
1195 | */ | ||
1196 | - if (mapping) | ||
1197 | + if (!depth) | ||
1198 | ret = rbd_spec_fill_snap_id(rbd_dev); | ||
1199 | else | ||
1200 | ret = rbd_spec_fill_names(rbd_dev); | ||
1201 | @@ -5358,12 +5369,12 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | ||
1202 | * Need to warn users if this image is the one being | ||
1203 | * mapped and has a parent. | ||
1204 | */ | ||
1205 | - if (mapping && rbd_dev->parent_spec) | ||
1206 | + if (!depth && rbd_dev->parent_spec) | ||
1207 | rbd_warn(rbd_dev, | ||
1208 | "WARNING: kernel layering is EXPERIMENTAL!"); | ||
1209 | } | ||
1210 | |||
1211 | - ret = rbd_dev_probe_parent(rbd_dev); | ||
1212 | + ret = rbd_dev_probe_parent(rbd_dev, depth); | ||
1213 | if (ret) | ||
1214 | goto err_out_probe; | ||
1215 | |||
1216 | @@ -5374,7 +5385,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | ||
1217 | err_out_probe: | ||
1218 | rbd_dev_unprobe(rbd_dev); | ||
1219 | err_out_watch: | ||
1220 | - if (mapping) | ||
1221 | + if (!depth) | ||
1222 | rbd_dev_header_unwatch_sync(rbd_dev); | ||
1223 | out_header_name: | ||
1224 | kfree(rbd_dev->header_name); | ||
1225 | @@ -5439,7 +5450,7 @@ static ssize_t do_rbd_add(struct bus_type *bus, | ||
1226 | rbdc = NULL; /* rbd_dev now owns this */ | ||
1227 | spec = NULL; /* rbd_dev now owns this */ | ||
1228 | |||
1229 | - rc = rbd_dev_image_probe(rbd_dev, true); | ||
1230 | + rc = rbd_dev_image_probe(rbd_dev, 0); | ||
1231 | if (rc < 0) | ||
1232 | goto err_out_rbd_dev; | ||
1233 | |||
1234 | diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c | ||
1235 | index 89c7371ab2dc..42ef86c409b6 100644 | ||
1236 | --- a/drivers/block/xen-blkfront.c | ||
1237 | +++ b/drivers/block/xen-blkfront.c | ||
1238 | @@ -1925,7 +1925,8 @@ static void blkback_changed(struct xenbus_device *dev, | ||
1239 | break; | ||
1240 | /* Missed the backend's Closing state -- fallthrough */ | ||
1241 | case XenbusStateClosing: | ||
1242 | - blkfront_closing(info); | ||
1243 | + if (info) | ||
1244 | + blkfront_closing(info); | ||
1245 | break; | ||
1246 | } | ||
1247 | } | ||
1248 | diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c | ||
1249 | index e8d16997c5cb..1ee2ab58e37d 100644 | ||
1250 | --- a/drivers/cpufreq/intel_pstate.c | ||
1251 | +++ b/drivers/cpufreq/intel_pstate.c | ||
1252 | @@ -761,6 +761,11 @@ static inline void intel_pstate_sample(struct cpudata *cpu) | ||
1253 | local_irq_save(flags); | ||
1254 | rdmsrl(MSR_IA32_APERF, aperf); | ||
1255 | rdmsrl(MSR_IA32_MPERF, mperf); | ||
1256 | + if (cpu->prev_mperf == mperf) { | ||
1257 | + local_irq_restore(flags); | ||
1258 | + return; | ||
1259 | + } | ||
1260 | + | ||
1261 | local_irq_restore(flags); | ||
1262 | |||
1263 | cpu->last_sample_time = cpu->sample.time; | ||
1264 | diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c | ||
1265 | index 1acf57ba4c86..cd6b9c72c8ac 100644 | ||
1266 | --- a/drivers/edac/sb_edac.c | ||
1267 | +++ b/drivers/edac/sb_edac.c | ||
1268 | @@ -1608,6 +1608,7 @@ static int sbridge_mci_bind_devs(struct mem_ctl_info *mci, | ||
1269 | { | ||
1270 | struct sbridge_pvt *pvt = mci->pvt_info; | ||
1271 | struct pci_dev *pdev; | ||
1272 | + u8 saw_chan_mask = 0; | ||
1273 | int i; | ||
1274 | |||
1275 | for (i = 0; i < sbridge_dev->n_devs; i++) { | ||
1276 | @@ -1641,6 +1642,7 @@ static int sbridge_mci_bind_devs(struct mem_ctl_info *mci, | ||
1277 | { | ||
1278 | int id = pdev->device - PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD0; | ||
1279 | pvt->pci_tad[id] = pdev; | ||
1280 | + saw_chan_mask |= 1 << id; | ||
1281 | } | ||
1282 | break; | ||
1283 | case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_DDRIO: | ||
1284 | @@ -1661,10 +1663,8 @@ static int sbridge_mci_bind_devs(struct mem_ctl_info *mci, | ||
1285 | !pvt-> pci_tad || !pvt->pci_ras || !pvt->pci_ta) | ||
1286 | goto enodev; | ||
1287 | |||
1288 | - for (i = 0; i < NUM_CHANNELS; i++) { | ||
1289 | - if (!pvt->pci_tad[i]) | ||
1290 | - goto enodev; | ||
1291 | - } | ||
1292 | + if (saw_chan_mask != 0x0f) | ||
1293 | + goto enodev; | ||
1294 | return 0; | ||
1295 | |||
1296 | enodev: | ||
1297 | diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
1298 | index 2a2eb96caeda..109e776345d3 100644 | ||
1299 | --- a/drivers/gpu/drm/drm_dp_mst_topology.c | ||
1300 | +++ b/drivers/gpu/drm/drm_dp_mst_topology.c | ||
1301 | @@ -1179,17 +1179,18 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ | ||
1302 | |||
1303 | list_for_each_entry(port, &mstb->ports, next) { | ||
1304 | if (port->port_num == port_num) { | ||
1305 | - if (!port->mstb) { | ||
1306 | + mstb = port->mstb; | ||
1307 | + if (!mstb) { | ||
1308 | DRM_ERROR("failed to lookup MSTB with lct %d, rad %02x\n", lct, rad[0]); | ||
1309 | - return NULL; | ||
1310 | + goto out; | ||
1311 | } | ||
1312 | |||
1313 | - mstb = port->mstb; | ||
1314 | break; | ||
1315 | } | ||
1316 | } | ||
1317 | } | ||
1318 | kref_get(&mstb->kref); | ||
1319 | +out: | ||
1320 | mutex_unlock(&mgr->lock); | ||
1321 | return mstb; | ||
1322 | } | ||
1323 | diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c | ||
1324 | index 1719078c763a..ce175d05260b 100644 | ||
1325 | --- a/drivers/gpu/drm/i915/i915_gem_userptr.c | ||
1326 | +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c | ||
1327 | @@ -776,7 +776,10 @@ static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = { | ||
1328 | * Also note, that the object created here is not currently a "first class" | ||
1329 | * object, in that several ioctls are banned. These are the CPU access | ||
1330 | * ioctls: mmap(), pwrite and pread. In practice, you are expected to use | ||
1331 | - * direct access via your pointer rather than use those ioctls. | ||
1332 | + * direct access via your pointer rather than use those ioctls. Another | ||
1333 | + * restriction is that we do not allow userptr surfaces to be pinned to the | ||
1334 | + * hardware and so we reject any attempt to create a framebuffer out of a | ||
1335 | + * userptr. | ||
1336 | * | ||
1337 | * If you think this is a good interface to use to pass GPU memory between | ||
1338 | * drivers, please use dma-buf instead. In fact, wherever possible use | ||
1339 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
1340 | index f208bbc6d58e..7b27a114b030 100644 | ||
1341 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
1342 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
1343 | @@ -1699,6 +1699,8 @@ static void i9xx_enable_pll(struct intel_crtc *crtc) | ||
1344 | I915_READ(DPLL(!crtc->pipe)) | DPLL_DVO_2X_MODE); | ||
1345 | } | ||
1346 | |||
1347 | + I915_WRITE(reg, dpll); | ||
1348 | + | ||
1349 | /* Wait for the clocks to stabilize. */ | ||
1350 | POSTING_READ(reg); | ||
1351 | udelay(150); | ||
1352 | @@ -13212,6 +13214,11 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb, | ||
1353 | struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); | ||
1354 | struct drm_i915_gem_object *obj = intel_fb->obj; | ||
1355 | |||
1356 | + if (obj->userptr.mm) { | ||
1357 | + DRM_DEBUG("attempting to use a userptr for a framebuffer, denied\n"); | ||
1358 | + return -EINVAL; | ||
1359 | + } | ||
1360 | + | ||
1361 | return drm_gem_handle_create(file, &obj->base, handle); | ||
1362 | } | ||
1363 | |||
1364 | diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c | ||
1365 | index 9ab7c1c758ae..72f1bb8b0499 100644 | ||
1366 | --- a/drivers/gpu/drm/i915/intel_lrc.c | ||
1367 | +++ b/drivers/gpu/drm/i915/intel_lrc.c | ||
1368 | @@ -1298,6 +1298,7 @@ static int gen8_emit_flush_render(struct intel_ringbuffer *ringbuf, | ||
1369 | if (flush_domains) { | ||
1370 | flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; | ||
1371 | flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; | ||
1372 | + flags |= PIPE_CONTROL_FLUSH_ENABLE; | ||
1373 | } | ||
1374 | |||
1375 | if (invalidate_domains) { | ||
1376 | diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
1377 | index 005b5e04de4d..b7e20dee64c4 100644 | ||
1378 | --- a/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
1379 | +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
1380 | @@ -342,6 +342,7 @@ gen7_render_ring_flush(struct intel_engine_cs *ring, | ||
1381 | if (flush_domains) { | ||
1382 | flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; | ||
1383 | flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; | ||
1384 | + flags |= PIPE_CONTROL_FLUSH_ENABLE; | ||
1385 | } | ||
1386 | if (invalidate_domains) { | ||
1387 | flags |= PIPE_CONTROL_TLB_INVALIDATE; | ||
1388 | @@ -412,6 +413,7 @@ gen8_render_ring_flush(struct intel_engine_cs *ring, | ||
1389 | if (flush_domains) { | ||
1390 | flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; | ||
1391 | flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; | ||
1392 | + flags |= PIPE_CONTROL_FLUSH_ENABLE; | ||
1393 | } | ||
1394 | if (invalidate_domains) { | ||
1395 | flags |= PIPE_CONTROL_TLB_INVALIDATE; | ||
1396 | diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
1397 | index 0e690bf19fc9..58c959265b1a 100644 | ||
1398 | --- a/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
1399 | +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
1400 | @@ -227,11 +227,12 @@ nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem, | ||
1401 | struct nouveau_bo *nvbo = nouveau_gem_object(gem); | ||
1402 | struct nvkm_vma *vma; | ||
1403 | |||
1404 | - if (nvbo->bo.mem.mem_type == TTM_PL_TT) | ||
1405 | + if (is_power_of_2(nvbo->valid_domains)) | ||
1406 | + rep->domain = nvbo->valid_domains; | ||
1407 | + else if (nvbo->bo.mem.mem_type == TTM_PL_TT) | ||
1408 | rep->domain = NOUVEAU_GEM_DOMAIN_GART; | ||
1409 | else | ||
1410 | rep->domain = NOUVEAU_GEM_DOMAIN_VRAM; | ||
1411 | - | ||
1412 | rep->offset = nvbo->bo.offset; | ||
1413 | if (cli->vm) { | ||
1414 | vma = nouveau_bo_vma_find(nvbo, cli->vm); | ||
1415 | diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
1416 | index b4ff4c134fbb..5be50ef2b30e 100644 | ||
1417 | --- a/drivers/gpu/drm/radeon/atombios_encoders.c | ||
1418 | +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
1419 | @@ -237,6 +237,7 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder, | ||
1420 | backlight_update_status(bd); | ||
1421 | |||
1422 | DRM_INFO("radeon atom DIG backlight initialized\n"); | ||
1423 | + rdev->mode_info.bl_encoder = radeon_encoder; | ||
1424 | |||
1425 | return; | ||
1426 | |||
1427 | @@ -1624,9 +1625,14 @@ radeon_atom_encoder_dpms_avivo(struct drm_encoder *encoder, int mode) | ||
1428 | } else | ||
1429 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | ||
1430 | if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { | ||
1431 | - struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | ||
1432 | + if (rdev->mode_info.bl_encoder) { | ||
1433 | + struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | ||
1434 | |||
1435 | - atombios_set_backlight_level(radeon_encoder, dig->backlight_level); | ||
1436 | + atombios_set_backlight_level(radeon_encoder, dig->backlight_level); | ||
1437 | + } else { | ||
1438 | + args.ucAction = ATOM_LCD_BLON; | ||
1439 | + atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | ||
1440 | + } | ||
1441 | } | ||
1442 | break; | ||
1443 | case DRM_MODE_DPMS_STANDBY: | ||
1444 | @@ -1706,8 +1712,13 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | ||
1445 | if (ASIC_IS_DCE4(rdev)) | ||
1446 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0); | ||
1447 | } | ||
1448 | - if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) | ||
1449 | - atombios_set_backlight_level(radeon_encoder, dig->backlight_level); | ||
1450 | + if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { | ||
1451 | + if (rdev->mode_info.bl_encoder) | ||
1452 | + atombios_set_backlight_level(radeon_encoder, dig->backlight_level); | ||
1453 | + else | ||
1454 | + atombios_dig_transmitter_setup(encoder, | ||
1455 | + ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0); | ||
1456 | + } | ||
1457 | if (ext_encoder) | ||
1458 | atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE); | ||
1459 | break; | ||
1460 | diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h | ||
1461 | index 46eb0fa75a61..91c3f60f8bac 100644 | ||
1462 | --- a/drivers/gpu/drm/radeon/radeon.h | ||
1463 | +++ b/drivers/gpu/drm/radeon/radeon.h | ||
1464 | @@ -1656,6 +1656,7 @@ struct radeon_pm { | ||
1465 | u8 fan_max_rpm; | ||
1466 | /* dpm */ | ||
1467 | bool dpm_enabled; | ||
1468 | + bool sysfs_initialized; | ||
1469 | struct radeon_dpm dpm; | ||
1470 | }; | ||
1471 | |||
1472 | diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c | ||
1473 | index ef99917f000d..c6ee80216cf4 100644 | ||
1474 | --- a/drivers/gpu/drm/radeon/radeon_encoders.c | ||
1475 | +++ b/drivers/gpu/drm/radeon/radeon_encoders.c | ||
1476 | @@ -194,7 +194,6 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder, | ||
1477 | radeon_atom_backlight_init(radeon_encoder, connector); | ||
1478 | else | ||
1479 | radeon_legacy_backlight_init(radeon_encoder, connector); | ||
1480 | - rdev->mode_info.bl_encoder = radeon_encoder; | ||
1481 | } | ||
1482 | } | ||
1483 | |||
1484 | diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | ||
1485 | index 45715307db71..30de43366eae 100644 | ||
1486 | --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | ||
1487 | +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | ||
1488 | @@ -441,6 +441,7 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, | ||
1489 | backlight_update_status(bd); | ||
1490 | |||
1491 | DRM_INFO("radeon legacy LVDS backlight initialized\n"); | ||
1492 | + rdev->mode_info.bl_encoder = radeon_encoder; | ||
1493 | |||
1494 | return; | ||
1495 | |||
1496 | diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c | ||
1497 | index 948c33105801..91764320c56f 100644 | ||
1498 | --- a/drivers/gpu/drm/radeon/radeon_pm.c | ||
1499 | +++ b/drivers/gpu/drm/radeon/radeon_pm.c | ||
1500 | @@ -720,10 +720,14 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj, | ||
1501 | struct radeon_device *rdev = dev_get_drvdata(dev); | ||
1502 | umode_t effective_mode = attr->mode; | ||
1503 | |||
1504 | - /* Skip limit attributes if DPM is not enabled */ | ||
1505 | + /* Skip attributes if DPM is not enabled */ | ||
1506 | if (rdev->pm.pm_method != PM_METHOD_DPM && | ||
1507 | (attr == &sensor_dev_attr_temp1_crit.dev_attr.attr || | ||
1508 | - attr == &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr)) | ||
1509 | + attr == &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr || | ||
1510 | + attr == &sensor_dev_attr_pwm1.dev_attr.attr || | ||
1511 | + attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr || | ||
1512 | + attr == &sensor_dev_attr_pwm1_max.dev_attr.attr || | ||
1513 | + attr == &sensor_dev_attr_pwm1_min.dev_attr.attr)) | ||
1514 | return 0; | ||
1515 | |||
1516 | /* Skip fan attributes if fan is not present */ | ||
1517 | @@ -1529,19 +1533,23 @@ int radeon_pm_late_init(struct radeon_device *rdev) | ||
1518 | |||
1519 | if (rdev->pm.pm_method == PM_METHOD_DPM) { | ||
1520 | if (rdev->pm.dpm_enabled) { | ||
1521 | - ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); | ||
1522 | - if (ret) | ||
1523 | - DRM_ERROR("failed to create device file for dpm state\n"); | ||
1524 | - ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); | ||
1525 | - if (ret) | ||
1526 | - DRM_ERROR("failed to create device file for dpm state\n"); | ||
1527 | - /* XXX: these are noops for dpm but are here for backwards compat */ | ||
1528 | - ret = device_create_file(rdev->dev, &dev_attr_power_profile); | ||
1529 | - if (ret) | ||
1530 | - DRM_ERROR("failed to create device file for power profile\n"); | ||
1531 | - ret = device_create_file(rdev->dev, &dev_attr_power_method); | ||
1532 | - if (ret) | ||
1533 | - DRM_ERROR("failed to create device file for power method\n"); | ||
1534 | + if (!rdev->pm.sysfs_initialized) { | ||
1535 | + ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); | ||
1536 | + if (ret) | ||
1537 | + DRM_ERROR("failed to create device file for dpm state\n"); | ||
1538 | + ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); | ||
1539 | + if (ret) | ||
1540 | + DRM_ERROR("failed to create device file for dpm state\n"); | ||
1541 | + /* XXX: these are noops for dpm but are here for backwards compat */ | ||
1542 | + ret = device_create_file(rdev->dev, &dev_attr_power_profile); | ||
1543 | + if (ret) | ||
1544 | + DRM_ERROR("failed to create device file for power profile\n"); | ||
1545 | + ret = device_create_file(rdev->dev, &dev_attr_power_method); | ||
1546 | + if (ret) | ||
1547 | + DRM_ERROR("failed to create device file for power method\n"); | ||
1548 | + if (!ret) | ||
1549 | + rdev->pm.sysfs_initialized = true; | ||
1550 | + } | ||
1551 | |||
1552 | mutex_lock(&rdev->pm.mutex); | ||
1553 | ret = radeon_dpm_late_enable(rdev); | ||
1554 | @@ -1557,7 +1565,8 @@ int radeon_pm_late_init(struct radeon_device *rdev) | ||
1555 | } | ||
1556 | } | ||
1557 | } else { | ||
1558 | - if (rdev->pm.num_power_states > 1) { | ||
1559 | + if ((rdev->pm.num_power_states > 1) && | ||
1560 | + (!rdev->pm.sysfs_initialized)) { | ||
1561 | /* where's the best place to put these? */ | ||
1562 | ret = device_create_file(rdev->dev, &dev_attr_power_profile); | ||
1563 | if (ret) | ||
1564 | @@ -1565,6 +1574,8 @@ int radeon_pm_late_init(struct radeon_device *rdev) | ||
1565 | ret = device_create_file(rdev->dev, &dev_attr_power_method); | ||
1566 | if (ret) | ||
1567 | DRM_ERROR("failed to create device file for power method\n"); | ||
1568 | + if (!ret) | ||
1569 | + rdev->pm.sysfs_initialized = true; | ||
1570 | } | ||
1571 | } | ||
1572 | return ret; | ||
1573 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | ||
1574 | index 620bb5cf617c..15a8d7746fd2 100644 | ||
1575 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | ||
1576 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | ||
1577 | @@ -1458,6 +1458,9 @@ static void __exit vmwgfx_exit(void) | ||
1578 | drm_pci_exit(&driver, &vmw_pci_driver); | ||
1579 | } | ||
1580 | |||
1581 | +MODULE_INFO(vmw_patch, "ed7d78b2"); | ||
1582 | +MODULE_INFO(vmw_patch, "54c12bc3"); | ||
1583 | + | ||
1584 | module_init(vmwgfx_init); | ||
1585 | module_exit(vmwgfx_exit); | ||
1586 | |||
1587 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | ||
1588 | index d26a6daa9719..d8896ed41b9e 100644 | ||
1589 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | ||
1590 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | ||
1591 | @@ -636,7 +636,8 @@ extern int vmw_user_dmabuf_alloc(struct vmw_private *dev_priv, | ||
1592 | uint32_t size, | ||
1593 | bool shareable, | ||
1594 | uint32_t *handle, | ||
1595 | - struct vmw_dma_buffer **p_dma_buf); | ||
1596 | + struct vmw_dma_buffer **p_dma_buf, | ||
1597 | + struct ttm_base_object **p_base); | ||
1598 | extern int vmw_user_dmabuf_reference(struct ttm_object_file *tfile, | ||
1599 | struct vmw_dma_buffer *dma_buf, | ||
1600 | uint32_t *handle); | ||
1601 | @@ -650,7 +651,8 @@ extern uint32_t vmw_dmabuf_validate_node(struct ttm_buffer_object *bo, | ||
1602 | uint32_t cur_validate_node); | ||
1603 | extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo); | ||
1604 | extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, | ||
1605 | - uint32_t id, struct vmw_dma_buffer **out); | ||
1606 | + uint32_t id, struct vmw_dma_buffer **out, | ||
1607 | + struct ttm_base_object **base); | ||
1608 | extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, | ||
1609 | struct drm_file *file_priv); | ||
1610 | extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, | ||
1611 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | ||
1612 | index 97ad3bcb99a7..aee1c6ccc52d 100644 | ||
1613 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | ||
1614 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | ||
1615 | @@ -887,7 +887,8 @@ static int vmw_translate_mob_ptr(struct vmw_private *dev_priv, | ||
1616 | struct vmw_relocation *reloc; | ||
1617 | int ret; | ||
1618 | |||
1619 | - ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo); | ||
1620 | + ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo, | ||
1621 | + NULL); | ||
1622 | if (unlikely(ret != 0)) { | ||
1623 | DRM_ERROR("Could not find or use MOB buffer.\n"); | ||
1624 | ret = -EINVAL; | ||
1625 | @@ -949,7 +950,8 @@ static int vmw_translate_guest_ptr(struct vmw_private *dev_priv, | ||
1626 | struct vmw_relocation *reloc; | ||
1627 | int ret; | ||
1628 | |||
1629 | - ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo); | ||
1630 | + ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo, | ||
1631 | + NULL); | ||
1632 | if (unlikely(ret != 0)) { | ||
1633 | DRM_ERROR("Could not find or use GMR region.\n"); | ||
1634 | ret = -EINVAL; | ||
1635 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | ||
1636 | index 87e39f68e9d0..e1898982b44a 100644 | ||
1637 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | ||
1638 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | ||
1639 | @@ -484,7 +484,7 @@ int vmw_overlay_ioctl(struct drm_device *dev, void *data, | ||
1640 | goto out_unlock; | ||
1641 | } | ||
1642 | |||
1643 | - ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &buf); | ||
1644 | + ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &buf, NULL); | ||
1645 | if (ret) | ||
1646 | goto out_unlock; | ||
1647 | |||
1648 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | ||
1649 | index 210ef15b1d09..c5b4c47e86d6 100644 | ||
1650 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | ||
1651 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | ||
1652 | @@ -356,7 +356,7 @@ int vmw_user_lookup_handle(struct vmw_private *dev_priv, | ||
1653 | } | ||
1654 | |||
1655 | *out_surf = NULL; | ||
1656 | - ret = vmw_user_dmabuf_lookup(tfile, handle, out_buf); | ||
1657 | + ret = vmw_user_dmabuf_lookup(tfile, handle, out_buf, NULL); | ||
1658 | return ret; | ||
1659 | } | ||
1660 | |||
1661 | @@ -483,7 +483,8 @@ int vmw_user_dmabuf_alloc(struct vmw_private *dev_priv, | ||
1662 | uint32_t size, | ||
1663 | bool shareable, | ||
1664 | uint32_t *handle, | ||
1665 | - struct vmw_dma_buffer **p_dma_buf) | ||
1666 | + struct vmw_dma_buffer **p_dma_buf, | ||
1667 | + struct ttm_base_object **p_base) | ||
1668 | { | ||
1669 | struct vmw_user_dma_buffer *user_bo; | ||
1670 | struct ttm_buffer_object *tmp; | ||
1671 | @@ -517,6 +518,10 @@ int vmw_user_dmabuf_alloc(struct vmw_private *dev_priv, | ||
1672 | } | ||
1673 | |||
1674 | *p_dma_buf = &user_bo->dma; | ||
1675 | + if (p_base) { | ||
1676 | + *p_base = &user_bo->prime.base; | ||
1677 | + kref_get(&(*p_base)->refcount); | ||
1678 | + } | ||
1679 | *handle = user_bo->prime.base.hash.key; | ||
1680 | |||
1681 | out_no_base_object: | ||
1682 | @@ -633,6 +638,7 @@ int vmw_user_dmabuf_synccpu_ioctl(struct drm_device *dev, void *data, | ||
1683 | struct vmw_dma_buffer *dma_buf; | ||
1684 | struct vmw_user_dma_buffer *user_bo; | ||
1685 | struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; | ||
1686 | + struct ttm_base_object *buffer_base; | ||
1687 | int ret; | ||
1688 | |||
1689 | if ((arg->flags & (drm_vmw_synccpu_read | drm_vmw_synccpu_write)) == 0 | ||
1690 | @@ -645,7 +651,8 @@ int vmw_user_dmabuf_synccpu_ioctl(struct drm_device *dev, void *data, | ||
1691 | |||
1692 | switch (arg->op) { | ||
1693 | case drm_vmw_synccpu_grab: | ||
1694 | - ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &dma_buf); | ||
1695 | + ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &dma_buf, | ||
1696 | + &buffer_base); | ||
1697 | if (unlikely(ret != 0)) | ||
1698 | return ret; | ||
1699 | |||
1700 | @@ -653,6 +660,7 @@ int vmw_user_dmabuf_synccpu_ioctl(struct drm_device *dev, void *data, | ||
1701 | dma); | ||
1702 | ret = vmw_user_dmabuf_synccpu_grab(user_bo, tfile, arg->flags); | ||
1703 | vmw_dmabuf_unreference(&dma_buf); | ||
1704 | + ttm_base_object_unref(&buffer_base); | ||
1705 | if (unlikely(ret != 0 && ret != -ERESTARTSYS && | ||
1706 | ret != -EBUSY)) { | ||
1707 | DRM_ERROR("Failed synccpu grab on handle 0x%08x.\n", | ||
1708 | @@ -694,7 +702,8 @@ int vmw_dmabuf_alloc_ioctl(struct drm_device *dev, void *data, | ||
1709 | return ret; | ||
1710 | |||
1711 | ret = vmw_user_dmabuf_alloc(dev_priv, vmw_fpriv(file_priv)->tfile, | ||
1712 | - req->size, false, &handle, &dma_buf); | ||
1713 | + req->size, false, &handle, &dma_buf, | ||
1714 | + NULL); | ||
1715 | if (unlikely(ret != 0)) | ||
1716 | goto out_no_dmabuf; | ||
1717 | |||
1718 | @@ -723,7 +732,8 @@ int vmw_dmabuf_unref_ioctl(struct drm_device *dev, void *data, | ||
1719 | } | ||
1720 | |||
1721 | int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, | ||
1722 | - uint32_t handle, struct vmw_dma_buffer **out) | ||
1723 | + uint32_t handle, struct vmw_dma_buffer **out, | ||
1724 | + struct ttm_base_object **p_base) | ||
1725 | { | ||
1726 | struct vmw_user_dma_buffer *vmw_user_bo; | ||
1727 | struct ttm_base_object *base; | ||
1728 | @@ -745,7 +755,10 @@ int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, | ||
1729 | vmw_user_bo = container_of(base, struct vmw_user_dma_buffer, | ||
1730 | prime.base); | ||
1731 | (void)ttm_bo_reference(&vmw_user_bo->dma.base); | ||
1732 | - ttm_base_object_unref(&base); | ||
1733 | + if (p_base) | ||
1734 | + *p_base = base; | ||
1735 | + else | ||
1736 | + ttm_base_object_unref(&base); | ||
1737 | *out = &vmw_user_bo->dma; | ||
1738 | |||
1739 | return 0; | ||
1740 | @@ -1006,7 +1019,7 @@ int vmw_dumb_create(struct drm_file *file_priv, | ||
1741 | |||
1742 | ret = vmw_user_dmabuf_alloc(dev_priv, vmw_fpriv(file_priv)->tfile, | ||
1743 | args->size, false, &args->handle, | ||
1744 | - &dma_buf); | ||
1745 | + &dma_buf, NULL); | ||
1746 | if (unlikely(ret != 0)) | ||
1747 | goto out_no_dmabuf; | ||
1748 | |||
1749 | @@ -1034,7 +1047,7 @@ int vmw_dumb_map_offset(struct drm_file *file_priv, | ||
1750 | struct vmw_dma_buffer *out_buf; | ||
1751 | int ret; | ||
1752 | |||
1753 | - ret = vmw_user_dmabuf_lookup(tfile, handle, &out_buf); | ||
1754 | + ret = vmw_user_dmabuf_lookup(tfile, handle, &out_buf, NULL); | ||
1755 | if (ret != 0) | ||
1756 | return -EINVAL; | ||
1757 | |||
1758 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | ||
1759 | index 6a4584a43aa6..d2751ada19b1 100644 | ||
1760 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | ||
1761 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | ||
1762 | @@ -470,7 +470,7 @@ int vmw_shader_define_ioctl(struct drm_device *dev, void *data, | ||
1763 | |||
1764 | if (arg->buffer_handle != SVGA3D_INVALID_ID) { | ||
1765 | ret = vmw_user_dmabuf_lookup(tfile, arg->buffer_handle, | ||
1766 | - &buffer); | ||
1767 | + &buffer, NULL); | ||
1768 | if (unlikely(ret != 0)) { | ||
1769 | DRM_ERROR("Could not find buffer for shader " | ||
1770 | "creation.\n"); | ||
1771 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | ||
1772 | index 4ecdbf3e59da..17a4107639b2 100644 | ||
1773 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | ||
1774 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | ||
1775 | @@ -43,6 +43,7 @@ struct vmw_user_surface { | ||
1776 | struct vmw_surface srf; | ||
1777 | uint32_t size; | ||
1778 | struct drm_master *master; | ||
1779 | + struct ttm_base_object *backup_base; | ||
1780 | }; | ||
1781 | |||
1782 | /** | ||
1783 | @@ -652,6 +653,8 @@ static void vmw_user_surface_base_release(struct ttm_base_object **p_base) | ||
1784 | struct vmw_resource *res = &user_srf->srf.res; | ||
1785 | |||
1786 | *p_base = NULL; | ||
1787 | + if (user_srf->backup_base) | ||
1788 | + ttm_base_object_unref(&user_srf->backup_base); | ||
1789 | vmw_resource_unreference(&res); | ||
1790 | } | ||
1791 | |||
1792 | @@ -846,7 +849,8 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data, | ||
1793 | res->backup_size, | ||
1794 | true, | ||
1795 | &backup_handle, | ||
1796 | - &res->backup); | ||
1797 | + &res->backup, | ||
1798 | + &user_srf->backup_base); | ||
1799 | if (unlikely(ret != 0)) { | ||
1800 | vmw_resource_unreference(&res); | ||
1801 | goto out_unlock; | ||
1802 | @@ -1309,7 +1313,8 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data, | ||
1803 | |||
1804 | if (req->buffer_handle != SVGA3D_INVALID_ID) { | ||
1805 | ret = vmw_user_dmabuf_lookup(tfile, req->buffer_handle, | ||
1806 | - &res->backup); | ||
1807 | + &res->backup, | ||
1808 | + &user_srf->backup_base); | ||
1809 | } else if (req->drm_surface_flags & | ||
1810 | drm_vmw_surface_flag_create_buffer) | ||
1811 | ret = vmw_user_dmabuf_alloc(dev_priv, tfile, | ||
1812 | @@ -1317,7 +1322,8 @@ int vmw_gb_surface_define_ioctl(struct drm_device *dev, void *data, | ||
1813 | req->drm_surface_flags & | ||
1814 | drm_vmw_surface_flag_shareable, | ||
1815 | &backup_handle, | ||
1816 | - &res->backup); | ||
1817 | + &res->backup, | ||
1818 | + &user_srf->backup_base); | ||
1819 | |||
1820 | if (unlikely(ret != 0)) { | ||
1821 | vmw_resource_unreference(&res); | ||
1822 | diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c | ||
1823 | index 30059c1df2a3..5801227b97ab 100644 | ||
1824 | --- a/drivers/i2c/busses/i2c-mv64xxx.c | ||
1825 | +++ b/drivers/i2c/busses/i2c-mv64xxx.c | ||
1826 | @@ -669,8 +669,6 @@ mv64xxx_i2c_can_offload(struct mv64xxx_i2c_data *drv_data) | ||
1827 | struct i2c_msg *msgs = drv_data->msgs; | ||
1828 | int num = drv_data->num_msgs; | ||
1829 | |||
1830 | - return false; | ||
1831 | - | ||
1832 | if (!drv_data->offload_enabled) | ||
1833 | return false; | ||
1834 | |||
1835 | diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c | ||
1836 | index 211b13271c61..2ae7150442fc 100644 | ||
1837 | --- a/drivers/iio/accel/st_accel_core.c | ||
1838 | +++ b/drivers/iio/accel/st_accel_core.c | ||
1839 | @@ -149,8 +149,6 @@ | ||
1840 | #define ST_ACCEL_4_BDU_MASK 0x40 | ||
1841 | #define ST_ACCEL_4_DRDY_IRQ_ADDR 0x21 | ||
1842 | #define ST_ACCEL_4_DRDY_IRQ_INT1_MASK 0x04 | ||
1843 | -#define ST_ACCEL_4_IG1_EN_ADDR 0x21 | ||
1844 | -#define ST_ACCEL_4_IG1_EN_MASK 0x08 | ||
1845 | #define ST_ACCEL_4_MULTIREAD_BIT true | ||
1846 | |||
1847 | static const struct iio_chan_spec st_accel_12bit_channels[] = { | ||
1848 | @@ -446,10 +444,6 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = { | ||
1849 | .drdy_irq = { | ||
1850 | .addr = ST_ACCEL_4_DRDY_IRQ_ADDR, | ||
1851 | .mask_int1 = ST_ACCEL_4_DRDY_IRQ_INT1_MASK, | ||
1852 | - .ig1 = { | ||
1853 | - .en_addr = ST_ACCEL_4_IG1_EN_ADDR, | ||
1854 | - .en_mask = ST_ACCEL_4_IG1_EN_MASK, | ||
1855 | - }, | ||
1856 | }, | ||
1857 | .multi_read_bit = ST_ACCEL_4_MULTIREAD_BIT, | ||
1858 | .bootime = 2, /* guess */ | ||
1859 | diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c | ||
1860 | index 0271608a51c4..0962b6821ce1 100644 | ||
1861 | --- a/drivers/infiniband/core/cm.c | ||
1862 | +++ b/drivers/infiniband/core/cm.c | ||
1863 | @@ -859,6 +859,11 @@ retest: | ||
1864 | case IB_CM_SIDR_REQ_RCVD: | ||
1865 | spin_unlock_irq(&cm_id_priv->lock); | ||
1866 | cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT); | ||
1867 | + spin_lock_irq(&cm.lock); | ||
1868 | + if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) | ||
1869 | + rb_erase(&cm_id_priv->sidr_id_node, | ||
1870 | + &cm.remote_sidr_table); | ||
1871 | + spin_unlock_irq(&cm.lock); | ||
1872 | break; | ||
1873 | case IB_CM_REQ_SENT: | ||
1874 | case IB_CM_MRA_REQ_RCVD: | ||
1875 | @@ -3098,7 +3103,10 @@ int ib_send_cm_sidr_rep(struct ib_cm_id *cm_id, | ||
1876 | spin_unlock_irqrestore(&cm_id_priv->lock, flags); | ||
1877 | |||
1878 | spin_lock_irqsave(&cm.lock, flags); | ||
1879 | - rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table); | ||
1880 | + if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) { | ||
1881 | + rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table); | ||
1882 | + RB_CLEAR_NODE(&cm_id_priv->sidr_id_node); | ||
1883 | + } | ||
1884 | spin_unlock_irqrestore(&cm.lock, flags); | ||
1885 | return 0; | ||
1886 | |||
1887 | diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c | ||
1888 | index bc7eed67998a..4b9e31a5b3f8 100644 | ||
1889 | --- a/drivers/input/mouse/alps.c | ||
1890 | +++ b/drivers/input/mouse/alps.c | ||
1891 | @@ -100,7 +100,7 @@ static const struct alps_nibble_commands alps_v6_nibble_commands[] = { | ||
1892 | #define ALPS_FOUR_BUTTONS 0x40 /* 4 direction button present */ | ||
1893 | #define ALPS_PS2_INTERLEAVED 0x80 /* 3-byte PS/2 packet interleaved with | ||
1894 | 6-byte ALPS packet */ | ||
1895 | -#define ALPS_DELL 0x100 /* device is a Dell laptop */ | ||
1896 | +#define ALPS_STICK_BITS 0x100 /* separate stick button bits */ | ||
1897 | #define ALPS_BUTTONPAD 0x200 /* device is a clickpad */ | ||
1898 | |||
1899 | static const struct alps_model_info alps_model_data[] = { | ||
1900 | @@ -159,6 +159,43 @@ static const struct alps_protocol_info alps_v8_protocol_data = { | ||
1901 | ALPS_PROTO_V8, 0x18, 0x18, 0 | ||
1902 | }; | ||
1903 | |||
1904 | +/* | ||
1905 | + * Some v2 models report the stick buttons in separate bits | ||
1906 | + */ | ||
1907 | +static const struct dmi_system_id alps_dmi_has_separate_stick_buttons[] = { | ||
1908 | +#if defined(CONFIG_DMI) && defined(CONFIG_X86) | ||
1909 | + { | ||
1910 | + /* Extrapolated from other entries */ | ||
1911 | + .matches = { | ||
1912 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
1913 | + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D420"), | ||
1914 | + }, | ||
1915 | + }, | ||
1916 | + { | ||
1917 | + /* Reported-by: Hans de Bruin <jmdebruin@xmsnet.nl> */ | ||
1918 | + .matches = { | ||
1919 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
1920 | + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D430"), | ||
1921 | + }, | ||
1922 | + }, | ||
1923 | + { | ||
1924 | + /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | ||
1925 | + .matches = { | ||
1926 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
1927 | + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D620"), | ||
1928 | + }, | ||
1929 | + }, | ||
1930 | + { | ||
1931 | + /* Extrapolated from other entries */ | ||
1932 | + .matches = { | ||
1933 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
1934 | + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D630"), | ||
1935 | + }, | ||
1936 | + }, | ||
1937 | +#endif | ||
1938 | + { } | ||
1939 | +}; | ||
1940 | + | ||
1941 | static void alps_set_abs_params_st(struct alps_data *priv, | ||
1942 | struct input_dev *dev1); | ||
1943 | static void alps_set_abs_params_mt(struct alps_data *priv, | ||
1944 | @@ -253,9 +290,8 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse) | ||
1945 | return; | ||
1946 | } | ||
1947 | |||
1948 | - /* Dell non interleaved V2 dualpoint has separate stick button bits */ | ||
1949 | - if (priv->proto_version == ALPS_PROTO_V2 && | ||
1950 | - priv->flags == (ALPS_DELL | ALPS_PASS | ALPS_DUALPOINT)) { | ||
1951 | + /* Some models have separate stick button bits */ | ||
1952 | + if (priv->flags & ALPS_STICK_BITS) { | ||
1953 | left |= packet[0] & 1; | ||
1954 | right |= packet[0] & 2; | ||
1955 | middle |= packet[0] & 4; | ||
1956 | @@ -2544,8 +2580,6 @@ static int alps_set_protocol(struct psmouse *psmouse, | ||
1957 | priv->byte0 = protocol->byte0; | ||
1958 | priv->mask0 = protocol->mask0; | ||
1959 | priv->flags = protocol->flags; | ||
1960 | - if (dmi_name_in_vendors("Dell")) | ||
1961 | - priv->flags |= ALPS_DELL; | ||
1962 | |||
1963 | priv->x_max = 2000; | ||
1964 | priv->y_max = 1400; | ||
1965 | @@ -2560,6 +2594,8 @@ static int alps_set_protocol(struct psmouse *psmouse, | ||
1966 | priv->set_abs_params = alps_set_abs_params_st; | ||
1967 | priv->x_max = 1023; | ||
1968 | priv->y_max = 767; | ||
1969 | + if (dmi_check_system(alps_dmi_has_separate_stick_buttons)) | ||
1970 | + priv->flags |= ALPS_STICK_BITS; | ||
1971 | break; | ||
1972 | |||
1973 | case ALPS_PROTO_V3: | ||
1974 | diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c | ||
1975 | index ca9f4edbb940..f0fd5352f8ef 100644 | ||
1976 | --- a/drivers/iommu/amd_iommu.c | ||
1977 | +++ b/drivers/iommu/amd_iommu.c | ||
1978 | @@ -2099,8 +2099,8 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats) | ||
1979 | static void clear_dte_entry(u16 devid) | ||
1980 | { | ||
1981 | /* remove entry from the device table seen by the hardware */ | ||
1982 | - amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV; | ||
1983 | - amd_iommu_dev_table[devid].data[1] = 0; | ||
1984 | + amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV; | ||
1985 | + amd_iommu_dev_table[devid].data[1] &= DTE_FLAG_MASK; | ||
1986 | |||
1987 | amd_iommu_apply_erratum_63(devid); | ||
1988 | } | ||
1989 | diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h | ||
1990 | index 05030e523771..cbfd0f4c4608 100644 | ||
1991 | --- a/drivers/iommu/amd_iommu_types.h | ||
1992 | +++ b/drivers/iommu/amd_iommu_types.h | ||
1993 | @@ -295,6 +295,7 @@ | ||
1994 | #define IOMMU_PTE_IR (1ULL << 61) | ||
1995 | #define IOMMU_PTE_IW (1ULL << 62) | ||
1996 | |||
1997 | +#define DTE_FLAG_MASK (0x3ffULL << 32) | ||
1998 | #define DTE_FLAG_IOTLB (0x01UL << 32) | ||
1999 | #define DTE_FLAG_GV (0x01ULL << 55) | ||
2000 | #define DTE_GLX_SHIFT (56) | ||
2001 | diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c | ||
2002 | index 3465faf1809e..45087c3e5c57 100644 | ||
2003 | --- a/drivers/iommu/amd_iommu_v2.c | ||
2004 | +++ b/drivers/iommu/amd_iommu_v2.c | ||
2005 | @@ -508,6 +508,13 @@ static void do_fault(struct work_struct *work) | ||
2006 | goto out; | ||
2007 | } | ||
2008 | |||
2009 | + if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) { | ||
2010 | + /* handle_mm_fault would BUG_ON() */ | ||
2011 | + up_read(&mm->mmap_sem); | ||
2012 | + handle_fault_error(fault); | ||
2013 | + goto out; | ||
2014 | + } | ||
2015 | + | ||
2016 | ret = handle_mm_fault(mm, vma, address, write); | ||
2017 | if (ret & VM_FAULT_ERROR) { | ||
2018 | /* failed to service fault */ | ||
2019 | diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c | ||
2020 | index c23427951ec1..8b0178db6a04 100644 | ||
2021 | --- a/drivers/iommu/intel-iommu.c | ||
2022 | +++ b/drivers/iommu/intel-iommu.c | ||
2023 | @@ -2033,15 +2033,19 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, | ||
2024 | return -ENOMEM; | ||
2025 | /* It is large page*/ | ||
2026 | if (largepage_lvl > 1) { | ||
2027 | + unsigned long nr_superpages, end_pfn; | ||
2028 | + | ||
2029 | pteval |= DMA_PTE_LARGE_PAGE; | ||
2030 | lvl_pages = lvl_to_nr_pages(largepage_lvl); | ||
2031 | + | ||
2032 | + nr_superpages = sg_res / lvl_pages; | ||
2033 | + end_pfn = iov_pfn + nr_superpages * lvl_pages - 1; | ||
2034 | + | ||
2035 | /* | ||
2036 | * Ensure that old small page tables are | ||
2037 | - * removed to make room for superpage, | ||
2038 | - * if they exist. | ||
2039 | + * removed to make room for superpage(s). | ||
2040 | */ | ||
2041 | - dma_pte_free_pagetable(domain, iov_pfn, | ||
2042 | - iov_pfn + lvl_pages - 1); | ||
2043 | + dma_pte_free_pagetable(domain, iov_pfn, end_pfn); | ||
2044 | } else { | ||
2045 | pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE; | ||
2046 | } | ||
2047 | diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c | ||
2048 | index f67bbd80433e..ab5353a96a82 100644 | ||
2049 | --- a/drivers/irqchip/irq-tegra.c | ||
2050 | +++ b/drivers/irqchip/irq-tegra.c | ||
2051 | @@ -215,6 +215,7 @@ static struct irq_chip tegra_ictlr_chip = { | ||
2052 | .irq_unmask = tegra_unmask, | ||
2053 | .irq_retrigger = tegra_retrigger, | ||
2054 | .irq_set_wake = tegra_set_wake, | ||
2055 | + .irq_set_type = irq_chip_set_type_parent, | ||
2056 | .flags = IRQCHIP_MASK_ON_SUSPEND, | ||
2057 | #ifdef CONFIG_SMP | ||
2058 | .irq_set_affinity = irq_chip_set_affinity_parent, | ||
2059 | diff --git a/drivers/md/md.c b/drivers/md/md.c | ||
2060 | index e8c44fcb1ad1..78c1f77e7903 100644 | ||
2061 | --- a/drivers/md/md.c | ||
2062 | +++ b/drivers/md/md.c | ||
2063 | @@ -8013,8 +8013,7 @@ static int remove_and_add_spares(struct mddev *mddev, | ||
2064 | !test_bit(Bitmap_sync, &rdev->flags))) | ||
2065 | continue; | ||
2066 | |||
2067 | - if (rdev->saved_raid_disk < 0) | ||
2068 | - rdev->recovery_offset = 0; | ||
2069 | + rdev->recovery_offset = 0; | ||
2070 | if (mddev->pers-> | ||
2071 | hot_add_disk(mddev, rdev) == 0) { | ||
2072 | if (sysfs_link_rdev(mddev, rdev)) | ||
2073 | diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c | ||
2074 | index 7c0d75547ccf..92cd09f3c69b 100644 | ||
2075 | --- a/drivers/md/persistent-data/dm-btree-remove.c | ||
2076 | +++ b/drivers/md/persistent-data/dm-btree-remove.c | ||
2077 | @@ -301,11 +301,16 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent, | ||
2078 | { | ||
2079 | int s; | ||
2080 | uint32_t max_entries = le32_to_cpu(left->header.max_entries); | ||
2081 | - unsigned target = (nr_left + nr_center + nr_right) / 3; | ||
2082 | - BUG_ON(target > max_entries); | ||
2083 | + unsigned total = nr_left + nr_center + nr_right; | ||
2084 | + unsigned target_right = total / 3; | ||
2085 | + unsigned remainder = (target_right * 3) != total; | ||
2086 | + unsigned target_left = target_right + remainder; | ||
2087 | + | ||
2088 | + BUG_ON(target_left > max_entries); | ||
2089 | + BUG_ON(target_right > max_entries); | ||
2090 | |||
2091 | if (nr_left < nr_right) { | ||
2092 | - s = nr_left - target; | ||
2093 | + s = nr_left - target_left; | ||
2094 | |||
2095 | if (s < 0 && nr_center < -s) { | ||
2096 | /* not enough in central node */ | ||
2097 | @@ -316,10 +321,10 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent, | ||
2098 | } else | ||
2099 | shift(left, center, s); | ||
2100 | |||
2101 | - shift(center, right, target - nr_right); | ||
2102 | + shift(center, right, target_right - nr_right); | ||
2103 | |||
2104 | } else { | ||
2105 | - s = target - nr_right; | ||
2106 | + s = target_right - nr_right; | ||
2107 | if (s > 0 && nr_center < s) { | ||
2108 | /* not enough in central node */ | ||
2109 | shift(center, right, nr_center); | ||
2110 | @@ -329,7 +334,7 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent, | ||
2111 | } else | ||
2112 | shift(center, right, s); | ||
2113 | |||
2114 | - shift(left, center, nr_left - target); | ||
2115 | + shift(left, center, nr_left - target_left); | ||
2116 | } | ||
2117 | |||
2118 | *key_ptr(parent, c->index) = center->keys[0]; | ||
2119 | diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c | ||
2120 | index c7726cebc495..d6e47033b5e0 100644 | ||
2121 | --- a/drivers/md/persistent-data/dm-btree.c | ||
2122 | +++ b/drivers/md/persistent-data/dm-btree.c | ||
2123 | @@ -523,7 +523,7 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key) | ||
2124 | |||
2125 | r = new_block(s->info, &right); | ||
2126 | if (r < 0) { | ||
2127 | - /* FIXME: put left */ | ||
2128 | + unlock_block(s->info, left); | ||
2129 | return r; | ||
2130 | } | ||
2131 | |||
2132 | diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c | ||
2133 | index 5ce3cd5c4e1d..bff6c1c7fecb 100644 | ||
2134 | --- a/drivers/md/raid1.c | ||
2135 | +++ b/drivers/md/raid1.c | ||
2136 | @@ -2248,7 +2248,7 @@ static int narrow_write_error(struct r1bio *r1_bio, int i) | ||
2137 | bio_trim(wbio, sector - r1_bio->sector, sectors); | ||
2138 | wbio->bi_iter.bi_sector += rdev->data_offset; | ||
2139 | wbio->bi_bdev = rdev->bdev; | ||
2140 | - if (submit_bio_wait(WRITE, wbio) == 0) | ||
2141 | + if (submit_bio_wait(WRITE, wbio) < 0) | ||
2142 | /* failure! */ | ||
2143 | ok = rdev_set_badblocks(rdev, sector, | ||
2144 | sectors, 0) | ||
2145 | diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c | ||
2146 | index fe0122771642..adfc83a0f023 100644 | ||
2147 | --- a/drivers/md/raid10.c | ||
2148 | +++ b/drivers/md/raid10.c | ||
2149 | @@ -2590,7 +2590,7 @@ static int narrow_write_error(struct r10bio *r10_bio, int i) | ||
2150 | choose_data_offset(r10_bio, rdev) + | ||
2151 | (sector - r10_bio->sector)); | ||
2152 | wbio->bi_bdev = rdev->bdev; | ||
2153 | - if (submit_bio_wait(WRITE, wbio) == 0) | ||
2154 | + if (submit_bio_wait(WRITE, wbio) < 0) | ||
2155 | /* Failure! */ | ||
2156 | ok = rdev_set_badblocks(rdev, sector, | ||
2157 | sectors, 0) | ||
2158 | diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c | ||
2159 | index 23af6772f146..0d767e31f455 100644 | ||
2160 | --- a/drivers/md/raid5.c | ||
2161 | +++ b/drivers/md/raid5.c | ||
2162 | @@ -3494,6 +3494,7 @@ returnbi: | ||
2163 | } | ||
2164 | if (!discard_pending && | ||
2165 | test_bit(R5_Discard, &sh->dev[sh->pd_idx].flags)) { | ||
2166 | + int hash; | ||
2167 | clear_bit(R5_Discard, &sh->dev[sh->pd_idx].flags); | ||
2168 | clear_bit(R5_UPTODATE, &sh->dev[sh->pd_idx].flags); | ||
2169 | if (sh->qd_idx >= 0) { | ||
2170 | @@ -3507,16 +3508,17 @@ returnbi: | ||
2171 | * no updated data, so remove it from hash list and the stripe | ||
2172 | * will be reinitialized | ||
2173 | */ | ||
2174 | - spin_lock_irq(&conf->device_lock); | ||
2175 | unhash: | ||
2176 | + hash = sh->hash_lock_index; | ||
2177 | + spin_lock_irq(conf->hash_locks + hash); | ||
2178 | remove_hash(sh); | ||
2179 | + spin_unlock_irq(conf->hash_locks + hash); | ||
2180 | if (head_sh->batch_head) { | ||
2181 | sh = list_first_entry(&sh->batch_list, | ||
2182 | struct stripe_head, batch_list); | ||
2183 | if (sh != head_sh) | ||
2184 | goto unhash; | ||
2185 | } | ||
2186 | - spin_unlock_irq(&conf->device_lock); | ||
2187 | sh = head_sh; | ||
2188 | |||
2189 | if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) | ||
2190 | diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c | ||
2191 | index 5db588ebfc24..391e98395b41 100644 | ||
2192 | --- a/drivers/media/dvb-frontends/si2168.c | ||
2193 | +++ b/drivers/media/dvb-frontends/si2168.c | ||
2194 | @@ -457,6 +457,10 @@ static int si2168_init(struct dvb_frontend *fe) | ||
2195 | /* firmware is in the new format */ | ||
2196 | for (remaining = fw->size; remaining > 0; remaining -= 17) { | ||
2197 | len = fw->data[fw->size - remaining]; | ||
2198 | + if (len > SI2168_ARGLEN) { | ||
2199 | + ret = -EINVAL; | ||
2200 | + break; | ||
2201 | + } | ||
2202 | memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len); | ||
2203 | cmd.wlen = len; | ||
2204 | cmd.rlen = 1; | ||
2205 | diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c | ||
2206 | index d74ae26621ca..c5dbba5b5bc9 100644 | ||
2207 | --- a/drivers/media/tuners/si2157.c | ||
2208 | +++ b/drivers/media/tuners/si2157.c | ||
2209 | @@ -165,6 +165,10 @@ static int si2157_init(struct dvb_frontend *fe) | ||
2210 | |||
2211 | for (remaining = fw->size; remaining > 0; remaining -= 17) { | ||
2212 | len = fw->data[fw->size - remaining]; | ||
2213 | + if (len > SI2157_ARGLEN) { | ||
2214 | + dev_err(&client->dev, "Bad firmware length\n"); | ||
2215 | + goto err_release_firmware; | ||
2216 | + } | ||
2217 | memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len); | ||
2218 | cmd.wlen = len; | ||
2219 | cmd.rlen = 1; | ||
2220 | diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c | ||
2221 | index 895441fe90f7..e862554952c1 100644 | ||
2222 | --- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c | ||
2223 | +++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c | ||
2224 | @@ -34,6 +34,14 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req) | ||
2225 | unsigned int pipe; | ||
2226 | u8 requesttype; | ||
2227 | |||
2228 | + mutex_lock(&d->usb_mutex); | ||
2229 | + | ||
2230 | + if (req->size > sizeof(dev->buf)) { | ||
2231 | + dev_err(&d->intf->dev, "too large message %u\n", req->size); | ||
2232 | + ret = -EINVAL; | ||
2233 | + goto err_mutex_unlock; | ||
2234 | + } | ||
2235 | + | ||
2236 | if (req->index & CMD_WR_FLAG) { | ||
2237 | /* write */ | ||
2238 | memcpy(dev->buf, req->data, req->size); | ||
2239 | @@ -50,14 +58,17 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req) | ||
2240 | dvb_usb_dbg_usb_control_msg(d->udev, 0, requesttype, req->value, | ||
2241 | req->index, dev->buf, req->size); | ||
2242 | if (ret < 0) | ||
2243 | - goto err; | ||
2244 | + goto err_mutex_unlock; | ||
2245 | |||
2246 | /* read request, copy returned data to return buf */ | ||
2247 | if (requesttype == (USB_TYPE_VENDOR | USB_DIR_IN)) | ||
2248 | memcpy(req->data, dev->buf, req->size); | ||
2249 | |||
2250 | + mutex_unlock(&d->usb_mutex); | ||
2251 | + | ||
2252 | return 0; | ||
2253 | -err: | ||
2254 | +err_mutex_unlock: | ||
2255 | + mutex_unlock(&d->usb_mutex); | ||
2256 | dev_dbg(&d->intf->dev, "failed=%d\n", ret); | ||
2257 | return ret; | ||
2258 | } | ||
2259 | diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.h b/drivers/media/usb/dvb-usb-v2/rtl28xxu.h | ||
2260 | index 1b5d7ffb685e..1bdeda05d332 100644 | ||
2261 | --- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.h | ||
2262 | +++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.h | ||
2263 | @@ -69,7 +69,7 @@ | ||
2264 | |||
2265 | |||
2266 | struct rtl28xxu_dev { | ||
2267 | - u8 buf[28]; | ||
2268 | + u8 buf[128]; | ||
2269 | u8 chip_id; | ||
2270 | u8 tuner; | ||
2271 | char *tuner_name; | ||
2272 | diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c | ||
2273 | index f8d11efa7b0f..46a389c20bfc 100644 | ||
2274 | --- a/drivers/net/wireless/ath/ath9k/init.c | ||
2275 | +++ b/drivers/net/wireless/ath/ath9k/init.c | ||
2276 | @@ -874,6 +874,7 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) | ||
2277 | hw->max_rate_tries = 10; | ||
2278 | hw->sta_data_size = sizeof(struct ath_node); | ||
2279 | hw->vif_data_size = sizeof(struct ath_vif); | ||
2280 | + hw->extra_tx_headroom = 4; | ||
2281 | |||
2282 | hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1; | ||
2283 | hw->wiphy->available_antennas_tx = BIT(ah->caps.max_txchains) - 1; | ||
2284 | diff --git a/drivers/net/wireless/iwlwifi/dvm/lib.c b/drivers/net/wireless/iwlwifi/dvm/lib.c | ||
2285 | index 1d2223df5cb0..e7d3566c714b 100644 | ||
2286 | --- a/drivers/net/wireless/iwlwifi/dvm/lib.c | ||
2287 | +++ b/drivers/net/wireless/iwlwifi/dvm/lib.c | ||
2288 | @@ -1022,7 +1022,7 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw, | ||
2289 | u8 *pn = seq.ccmp.pn; | ||
2290 | |||
2291 | ieee80211_get_key_rx_seq(key, i, &seq); | ||
2292 | - aes_sc->pn = cpu_to_le64( | ||
2293 | + aes_sc[i].pn = cpu_to_le64( | ||
2294 | (u64)pn[5] | | ||
2295 | ((u64)pn[4] << 8) | | ||
2296 | ((u64)pn[3] << 16) | | ||
2297 | diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c | ||
2298 | index 74ad278116be..fd83e30eaf00 100644 | ||
2299 | --- a/drivers/net/wireless/iwlwifi/iwl-7000.c | ||
2300 | +++ b/drivers/net/wireless/iwlwifi/iwl-7000.c | ||
2301 | @@ -325,6 +325,6 @@ const struct iwl_cfg iwl7265d_n_cfg = { | ||
2302 | }; | ||
2303 | |||
2304 | MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | ||
2305 | -MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); | ||
2306 | +MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | ||
2307 | MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | ||
2308 | MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | ||
2309 | diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c | ||
2310 | index 4310cf102d78..89d6a6100c88 100644 | ||
2311 | --- a/drivers/net/wireless/iwlwifi/mvm/d3.c | ||
2312 | +++ b/drivers/net/wireless/iwlwifi/mvm/d3.c | ||
2313 | @@ -298,12 +298,12 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, | ||
2314 | u8 *pn = seq.ccmp.pn; | ||
2315 | |||
2316 | ieee80211_get_key_rx_seq(key, i, &seq); | ||
2317 | - aes_sc->pn = cpu_to_le64((u64)pn[5] | | ||
2318 | - ((u64)pn[4] << 8) | | ||
2319 | - ((u64)pn[3] << 16) | | ||
2320 | - ((u64)pn[2] << 24) | | ||
2321 | - ((u64)pn[1] << 32) | | ||
2322 | - ((u64)pn[0] << 40)); | ||
2323 | + aes_sc[i].pn = cpu_to_le64((u64)pn[5] | | ||
2324 | + ((u64)pn[4] << 8) | | ||
2325 | + ((u64)pn[3] << 16) | | ||
2326 | + ((u64)pn[2] << 24) | | ||
2327 | + ((u64)pn[1] << 32) | | ||
2328 | + ((u64)pn[0] << 40)); | ||
2329 | } | ||
2330 | data->use_rsc_tsc = true; | ||
2331 | break; | ||
2332 | diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c | ||
2333 | index df869633f4dd..1e1c77a59760 100644 | ||
2334 | --- a/drivers/net/wireless/iwlwifi/mvm/fw.c | ||
2335 | +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c | ||
2336 | @@ -364,7 +364,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | ||
2337 | * abort after reading the nvm in case RF Kill is on, we will complete | ||
2338 | * the init seq later when RF kill will switch to off | ||
2339 | */ | ||
2340 | - if (iwl_mvm_is_radio_killed(mvm)) { | ||
2341 | + if (iwl_mvm_is_radio_hw_killed(mvm)) { | ||
2342 | IWL_DEBUG_RF_KILL(mvm, | ||
2343 | "jump over all phy activities due to RF kill\n"); | ||
2344 | iwl_remove_notification(&mvm->notif_wait, &calib_wait); | ||
2345 | @@ -397,7 +397,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | ||
2346 | ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait, | ||
2347 | MVM_UCODE_CALIB_TIMEOUT); | ||
2348 | |||
2349 | - if (ret && iwl_mvm_is_radio_killed(mvm)) { | ||
2350 | + if (ret && iwl_mvm_is_radio_hw_killed(mvm)) { | ||
2351 | IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n"); | ||
2352 | ret = 1; | ||
2353 | } | ||
2354 | diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
2355 | index 60c138a9bf4f..9779c1e5688c 100644 | ||
2356 | --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
2357 | +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
2358 | @@ -2277,6 +2277,7 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw, | ||
2359 | iwl_mvm_remove_time_event(mvm, mvmvif, | ||
2360 | &mvmvif->time_event_data); | ||
2361 | RCU_INIT_POINTER(mvm->csa_vif, NULL); | ||
2362 | + mvmvif->csa_countdown = false; | ||
2363 | } | ||
2364 | |||
2365 | if (rcu_access_pointer(mvm->csa_tx_blocked_vif) == vif) { | ||
2366 | diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h | ||
2367 | index 6af21daaaaef..83273adfabdd 100644 | ||
2368 | --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h | ||
2369 | +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | ||
2370 | @@ -870,6 +870,11 @@ static inline bool iwl_mvm_is_radio_killed(struct iwl_mvm *mvm) | ||
2371 | test_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); | ||
2372 | } | ||
2373 | |||
2374 | +static inline bool iwl_mvm_is_radio_hw_killed(struct iwl_mvm *mvm) | ||
2375 | +{ | ||
2376 | + return test_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); | ||
2377 | +} | ||
2378 | + | ||
2379 | /* Must be called with rcu_read_lock() held and it can only be | ||
2380 | * released when mvmsta is not needed anymore. | ||
2381 | */ | ||
2382 | diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c | ||
2383 | index 2ea01238754e..8d4f287dca3b 100644 | ||
2384 | --- a/drivers/net/wireless/iwlwifi/mvm/ops.c | ||
2385 | +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c | ||
2386 | @@ -589,6 +589,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | ||
2387 | ieee80211_unregister_hw(mvm->hw); | ||
2388 | iwl_mvm_leds_exit(mvm); | ||
2389 | out_free: | ||
2390 | + flush_delayed_work(&mvm->fw_dump_wk); | ||
2391 | iwl_phy_db_free(mvm->phy_db); | ||
2392 | kfree(mvm->scan_cmd); | ||
2393 | if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name) | ||
2394 | diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c | ||
2395 | index b18569734922..8b16949a9cb9 100644 | ||
2396 | --- a/drivers/net/wireless/iwlwifi/pcie/drv.c | ||
2397 | +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c | ||
2398 | @@ -412,6 +412,11 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | ||
2399 | {IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)}, | ||
2400 | {IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)}, | ||
2401 | {IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)}, | ||
2402 | + {IWL_PCI_DEVICE(0x095A, 0x5F10, iwl7265_2ac_cfg)}, | ||
2403 | + {IWL_PCI_DEVICE(0x095B, 0x5212, iwl7265_2ac_cfg)}, | ||
2404 | + {IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)}, | ||
2405 | + {IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)}, | ||
2406 | + {IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)}, | ||
2407 | |||
2408 | /* 8000 Series */ | ||
2409 | {IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)}, | ||
2410 | diff --git a/drivers/net/wireless/rtlwifi/pci.h b/drivers/net/wireless/rtlwifi/pci.h | ||
2411 | index d4567d12e07e..5da6703942d9 100644 | ||
2412 | --- a/drivers/net/wireless/rtlwifi/pci.h | ||
2413 | +++ b/drivers/net/wireless/rtlwifi/pci.h | ||
2414 | @@ -247,6 +247,8 @@ struct rtl_pci { | ||
2415 | /* MSI support */ | ||
2416 | bool msi_support; | ||
2417 | bool using_msi; | ||
2418 | + /* interrupt clear before set */ | ||
2419 | + bool int_clear; | ||
2420 | }; | ||
2421 | |||
2422 | struct mp_adapter { | ||
2423 | diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c | ||
2424 | index 3fa2fb7c8e4e..76e52dfb2be5 100644 | ||
2425 | --- a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c | ||
2426 | +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c | ||
2427 | @@ -2253,11 +2253,28 @@ void rtl8821ae_set_qos(struct ieee80211_hw *hw, int aci) | ||
2428 | } | ||
2429 | } | ||
2430 | |||
2431 | +static void rtl8821ae_clear_interrupt(struct ieee80211_hw *hw) | ||
2432 | +{ | ||
2433 | + struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
2434 | + u32 tmp = rtl_read_dword(rtlpriv, REG_HISR); | ||
2435 | + | ||
2436 | + rtl_write_dword(rtlpriv, REG_HISR, tmp); | ||
2437 | + | ||
2438 | + tmp = rtl_read_dword(rtlpriv, REG_HISRE); | ||
2439 | + rtl_write_dword(rtlpriv, REG_HISRE, tmp); | ||
2440 | + | ||
2441 | + tmp = rtl_read_dword(rtlpriv, REG_HSISR); | ||
2442 | + rtl_write_dword(rtlpriv, REG_HSISR, tmp); | ||
2443 | +} | ||
2444 | + | ||
2445 | void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw) | ||
2446 | { | ||
2447 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
2448 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | ||
2449 | |||
2450 | + if (!rtlpci->int_clear) | ||
2451 | + rtl8821ae_clear_interrupt(hw);/*clear it here first*/ | ||
2452 | + | ||
2453 | rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF); | ||
2454 | rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF); | ||
2455 | rtlpci->irq_enabled = true; | ||
2456 | diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c | ||
2457 | index a4988121e1ab..8ee141a55bc5 100644 | ||
2458 | --- a/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c | ||
2459 | +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c | ||
2460 | @@ -96,6 +96,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) | ||
2461 | |||
2462 | rtl8821ae_bt_reg_init(hw); | ||
2463 | rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; | ||
2464 | + rtlpci->int_clear = rtlpriv->cfg->mod_params->int_clear; | ||
2465 | rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer(); | ||
2466 | |||
2467 | rtlpriv->dm.dm_initialgain_enable = 1; | ||
2468 | @@ -167,6 +168,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) | ||
2469 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; | ||
2470 | rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; | ||
2471 | rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; | ||
2472 | + rtlpci->msi_support = rtlpriv->cfg->mod_params->int_clear; | ||
2473 | if (rtlpriv->cfg->mod_params->disable_watchdog) | ||
2474 | pr_info("watchdog disabled\n"); | ||
2475 | rtlpriv->psc.reg_fwctrl_lps = 3; | ||
2476 | @@ -308,6 +310,7 @@ static struct rtl_mod_params rtl8821ae_mod_params = { | ||
2477 | .swctrl_lps = false, | ||
2478 | .fwctrl_lps = true, | ||
2479 | .msi_support = true, | ||
2480 | + .int_clear = true, | ||
2481 | .debug = DBG_EMERG, | ||
2482 | .disable_watchdog = 0, | ||
2483 | }; | ||
2484 | @@ -437,6 +440,7 @@ module_param_named(fwlps, rtl8821ae_mod_params.fwctrl_lps, bool, 0444); | ||
2485 | module_param_named(msi, rtl8821ae_mod_params.msi_support, bool, 0444); | ||
2486 | module_param_named(disable_watchdog, rtl8821ae_mod_params.disable_watchdog, | ||
2487 | bool, 0444); | ||
2488 | +module_param_named(int_clear, rtl8821ae_mod_params.int_clear, bool, 0444); | ||
2489 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | ||
2490 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); | ||
2491 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); | ||
2492 | @@ -444,6 +448,7 @@ MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); | ||
2493 | MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n"); | ||
2494 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
2495 | MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n"); | ||
2496 | +MODULE_PARM_DESC(int_clear, "Set to 1 to disable interrupt clear before set (default 0)\n"); | ||
2497 | |||
2498 | static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume); | ||
2499 | |||
2500 | diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h | ||
2501 | index 51572912c53d..f1fa8100f288 100644 | ||
2502 | --- a/drivers/net/wireless/rtlwifi/wifi.h | ||
2503 | +++ b/drivers/net/wireless/rtlwifi/wifi.h | ||
2504 | @@ -2233,6 +2233,9 @@ struct rtl_mod_params { | ||
2505 | |||
2506 | /* default 0: 1 means disable */ | ||
2507 | bool disable_watchdog; | ||
2508 | + | ||
2509 | + /* default 0: 1 means do not disable interrupts */ | ||
2510 | + bool int_clear; | ||
2511 | }; | ||
2512 | |||
2513 | struct rtl_hal_usbint_cfg { | ||
2514 | diff --git a/drivers/of/platform.c b/drivers/of/platform.c | ||
2515 | index a01f57c9e34e..ddf8e42c9367 100644 | ||
2516 | --- a/drivers/of/platform.c | ||
2517 | +++ b/drivers/of/platform.c | ||
2518 | @@ -25,6 +25,7 @@ | ||
2519 | |||
2520 | const struct of_device_id of_default_bus_match_table[] = { | ||
2521 | { .compatible = "simple-bus", }, | ||
2522 | + { .compatible = "simple-mfd", }, | ||
2523 | #ifdef CONFIG_ARM_AMBA | ||
2524 | { .compatible = "arm,amba-bus", }, | ||
2525 | #endif /* CONFIG_ARM_AMBA */ | ||
2526 | diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c | ||
2527 | index 312f23a8429c..92618686604c 100644 | ||
2528 | --- a/drivers/pci/pci-sysfs.c | ||
2529 | +++ b/drivers/pci/pci-sysfs.c | ||
2530 | @@ -216,7 +216,7 @@ static ssize_t numa_node_store(struct device *dev, | ||
2531 | if (ret) | ||
2532 | return ret; | ||
2533 | |||
2534 | - if (!node_online(node)) | ||
2535 | + if (node >= MAX_NUMNODES || !node_online(node)) | ||
2536 | return -EINVAL; | ||
2537 | |||
2538 | add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK); | ||
2539 | diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c | ||
2540 | index 2062c224e32f..b2602210784d 100644 | ||
2541 | --- a/drivers/pinctrl/intel/pinctrl-baytrail.c | ||
2542 | +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c | ||
2543 | @@ -146,7 +146,7 @@ struct byt_gpio_pin_context { | ||
2544 | struct byt_gpio { | ||
2545 | struct gpio_chip chip; | ||
2546 | struct platform_device *pdev; | ||
2547 | - spinlock_t lock; | ||
2548 | + raw_spinlock_t lock; | ||
2549 | void __iomem *reg_base; | ||
2550 | struct pinctrl_gpio_range *range; | ||
2551 | struct byt_gpio_pin_context *saved_context; | ||
2552 | @@ -174,11 +174,11 @@ static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned offset) | ||
2553 | unsigned long flags; | ||
2554 | u32 value; | ||
2555 | |||
2556 | - spin_lock_irqsave(&vg->lock, flags); | ||
2557 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2558 | value = readl(reg); | ||
2559 | value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL); | ||
2560 | writel(value, reg); | ||
2561 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2562 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2563 | } | ||
2564 | |||
2565 | static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned offset) | ||
2566 | @@ -201,6 +201,9 @@ static int byt_gpio_request(struct gpio_chip *chip, unsigned offset) | ||
2567 | struct byt_gpio *vg = to_byt_gpio(chip); | ||
2568 | void __iomem *reg = byt_gpio_reg(chip, offset, BYT_CONF0_REG); | ||
2569 | u32 value, gpio_mux; | ||
2570 | + unsigned long flags; | ||
2571 | + | ||
2572 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2573 | |||
2574 | /* | ||
2575 | * In most cases, func pin mux 000 means GPIO function. | ||
2576 | @@ -214,18 +217,16 @@ static int byt_gpio_request(struct gpio_chip *chip, unsigned offset) | ||
2577 | value = readl(reg) & BYT_PIN_MUX; | ||
2578 | gpio_mux = byt_get_gpio_mux(vg, offset); | ||
2579 | if (WARN_ON(gpio_mux != value)) { | ||
2580 | - unsigned long flags; | ||
2581 | - | ||
2582 | - spin_lock_irqsave(&vg->lock, flags); | ||
2583 | value = readl(reg) & ~BYT_PIN_MUX; | ||
2584 | value |= gpio_mux; | ||
2585 | writel(value, reg); | ||
2586 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2587 | |||
2588 | dev_warn(&vg->pdev->dev, | ||
2589 | "pin %u forcibly re-configured as GPIO\n", offset); | ||
2590 | } | ||
2591 | |||
2592 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2593 | + | ||
2594 | pm_runtime_get(&vg->pdev->dev); | ||
2595 | |||
2596 | return 0; | ||
2597 | @@ -250,7 +251,7 @@ static int byt_irq_type(struct irq_data *d, unsigned type) | ||
2598 | if (offset >= vg->chip.ngpio) | ||
2599 | return -EINVAL; | ||
2600 | |||
2601 | - spin_lock_irqsave(&vg->lock, flags); | ||
2602 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2603 | value = readl(reg); | ||
2604 | |||
2605 | WARN(value & BYT_DIRECT_IRQ_EN, | ||
2606 | @@ -269,7 +270,7 @@ static int byt_irq_type(struct irq_data *d, unsigned type) | ||
2607 | else if (type & IRQ_TYPE_LEVEL_MASK) | ||
2608 | __irq_set_handler_locked(d->irq, handle_level_irq); | ||
2609 | |||
2610 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2611 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2612 | |||
2613 | return 0; | ||
2614 | } | ||
2615 | @@ -277,7 +278,15 @@ static int byt_irq_type(struct irq_data *d, unsigned type) | ||
2616 | static int byt_gpio_get(struct gpio_chip *chip, unsigned offset) | ||
2617 | { | ||
2618 | void __iomem *reg = byt_gpio_reg(chip, offset, BYT_VAL_REG); | ||
2619 | - return readl(reg) & BYT_LEVEL; | ||
2620 | + struct byt_gpio *vg = to_byt_gpio(chip); | ||
2621 | + unsigned long flags; | ||
2622 | + u32 val; | ||
2623 | + | ||
2624 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2625 | + val = readl(reg); | ||
2626 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2627 | + | ||
2628 | + return val & BYT_LEVEL; | ||
2629 | } | ||
2630 | |||
2631 | static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | ||
2632 | @@ -287,7 +296,7 @@ static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | ||
2633 | unsigned long flags; | ||
2634 | u32 old_val; | ||
2635 | |||
2636 | - spin_lock_irqsave(&vg->lock, flags); | ||
2637 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2638 | |||
2639 | old_val = readl(reg); | ||
2640 | |||
2641 | @@ -296,7 +305,7 @@ static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | ||
2642 | else | ||
2643 | writel(old_val & ~BYT_LEVEL, reg); | ||
2644 | |||
2645 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2646 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2647 | } | ||
2648 | |||
2649 | static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | ||
2650 | @@ -306,13 +315,13 @@ static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | ||
2651 | unsigned long flags; | ||
2652 | u32 value; | ||
2653 | |||
2654 | - spin_lock_irqsave(&vg->lock, flags); | ||
2655 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2656 | |||
2657 | value = readl(reg) | BYT_DIR_MASK; | ||
2658 | value &= ~BYT_INPUT_EN; /* active low */ | ||
2659 | writel(value, reg); | ||
2660 | |||
2661 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2662 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2663 | |||
2664 | return 0; | ||
2665 | } | ||
2666 | @@ -326,7 +335,7 @@ static int byt_gpio_direction_output(struct gpio_chip *chip, | ||
2667 | unsigned long flags; | ||
2668 | u32 reg_val; | ||
2669 | |||
2670 | - spin_lock_irqsave(&vg->lock, flags); | ||
2671 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2672 | |||
2673 | /* | ||
2674 | * Before making any direction modifications, do a check if gpio | ||
2675 | @@ -345,7 +354,7 @@ static int byt_gpio_direction_output(struct gpio_chip *chip, | ||
2676 | else | ||
2677 | writel(reg_val & ~BYT_LEVEL, reg); | ||
2678 | |||
2679 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2680 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2681 | |||
2682 | return 0; | ||
2683 | } | ||
2684 | @@ -354,18 +363,19 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) | ||
2685 | { | ||
2686 | struct byt_gpio *vg = to_byt_gpio(chip); | ||
2687 | int i; | ||
2688 | - unsigned long flags; | ||
2689 | u32 conf0, val, offs; | ||
2690 | |||
2691 | - spin_lock_irqsave(&vg->lock, flags); | ||
2692 | - | ||
2693 | for (i = 0; i < vg->chip.ngpio; i++) { | ||
2694 | const char *pull_str = NULL; | ||
2695 | const char *pull = NULL; | ||
2696 | + unsigned long flags; | ||
2697 | const char *label; | ||
2698 | offs = vg->range->pins[i] * 16; | ||
2699 | + | ||
2700 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2701 | conf0 = readl(vg->reg_base + offs + BYT_CONF0_REG); | ||
2702 | val = readl(vg->reg_base + offs + BYT_VAL_REG); | ||
2703 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2704 | |||
2705 | label = gpiochip_is_requested(chip, i); | ||
2706 | if (!label) | ||
2707 | @@ -418,7 +428,6 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) | ||
2708 | |||
2709 | seq_puts(s, "\n"); | ||
2710 | } | ||
2711 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2712 | } | ||
2713 | |||
2714 | static void byt_gpio_irq_handler(unsigned irq, struct irq_desc *desc) | ||
2715 | @@ -450,8 +459,10 @@ static void byt_irq_ack(struct irq_data *d) | ||
2716 | unsigned offset = irqd_to_hwirq(d); | ||
2717 | void __iomem *reg; | ||
2718 | |||
2719 | + raw_spin_lock(&vg->lock); | ||
2720 | reg = byt_gpio_reg(&vg->chip, offset, BYT_INT_STAT_REG); | ||
2721 | writel(BIT(offset % 32), reg); | ||
2722 | + raw_spin_unlock(&vg->lock); | ||
2723 | } | ||
2724 | |||
2725 | static void byt_irq_unmask(struct irq_data *d) | ||
2726 | @@ -463,9 +474,9 @@ static void byt_irq_unmask(struct irq_data *d) | ||
2727 | void __iomem *reg; | ||
2728 | u32 value; | ||
2729 | |||
2730 | - spin_lock_irqsave(&vg->lock, flags); | ||
2731 | - | ||
2732 | reg = byt_gpio_reg(&vg->chip, offset, BYT_CONF0_REG); | ||
2733 | + | ||
2734 | + raw_spin_lock_irqsave(&vg->lock, flags); | ||
2735 | value = readl(reg); | ||
2736 | |||
2737 | switch (irqd_get_trigger_type(d)) { | ||
2738 | @@ -486,7 +497,7 @@ static void byt_irq_unmask(struct irq_data *d) | ||
2739 | |||
2740 | writel(value, reg); | ||
2741 | |||
2742 | - spin_unlock_irqrestore(&vg->lock, flags); | ||
2743 | + raw_spin_unlock_irqrestore(&vg->lock, flags); | ||
2744 | } | ||
2745 | |||
2746 | static void byt_irq_mask(struct irq_data *d) | ||
2747 | @@ -578,7 +589,7 @@ static int byt_gpio_probe(struct platform_device *pdev) | ||
2748 | if (IS_ERR(vg->reg_base)) | ||
2749 | return PTR_ERR(vg->reg_base); | ||
2750 | |||
2751 | - spin_lock_init(&vg->lock); | ||
2752 | + raw_spin_lock_init(&vg->lock); | ||
2753 | |||
2754 | gc = &vg->chip; | ||
2755 | gc->label = dev_name(&pdev->dev); | ||
2756 | diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c | ||
2757 | index 454536c49315..9c780740fb82 100644 | ||
2758 | --- a/drivers/scsi/mvsas/mv_sas.c | ||
2759 | +++ b/drivers/scsi/mvsas/mv_sas.c | ||
2760 | @@ -887,6 +887,8 @@ static void mvs_slot_free(struct mvs_info *mvi, u32 rx_desc) | ||
2761 | static void mvs_slot_task_free(struct mvs_info *mvi, struct sas_task *task, | ||
2762 | struct mvs_slot_info *slot, u32 slot_idx) | ||
2763 | { | ||
2764 | + if (!slot) | ||
2765 | + return; | ||
2766 | if (!slot->task) | ||
2767 | return; | ||
2768 | if (!sas_protocol_ata(task->task_proto)) | ||
2769 | diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c | ||
2770 | index 8589eade1057..de65a8730d88 100644 | ||
2771 | --- a/drivers/staging/iio/accel/sca3000_ring.c | ||
2772 | +++ b/drivers/staging/iio/accel/sca3000_ring.c | ||
2773 | @@ -116,7 +116,7 @@ static int sca3000_read_first_n_hw_rb(struct iio_buffer *r, | ||
2774 | if (ret) | ||
2775 | goto error_ret; | ||
2776 | |||
2777 | - for (i = 0; i < num_read; i++) | ||
2778 | + for (i = 0; i < num_read / sizeof(u16); i++) | ||
2779 | *(((u16 *)rx) + i) = be16_to_cpup((__be16 *)rx + i); | ||
2780 | |||
2781 | if (copy_to_user(buf, rx, num_read)) | ||
2782 | diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c | ||
2783 | index d7c5223f1c3e..2931ea9b75d1 100644 | ||
2784 | --- a/drivers/staging/iio/adc/mxs-lradc.c | ||
2785 | +++ b/drivers/staging/iio/adc/mxs-lradc.c | ||
2786 | @@ -919,11 +919,12 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev, | ||
2787 | case IIO_CHAN_INFO_OFFSET: | ||
2788 | if (chan->type == IIO_TEMP) { | ||
2789 | /* The calculated value from the ADC is in Kelvin, we | ||
2790 | - * want Celsius for hwmon so the offset is | ||
2791 | - * -272.15 * scale | ||
2792 | + * want Celsius for hwmon so the offset is -273.15 | ||
2793 | + * The offset is applied before scaling so it is | ||
2794 | + * actually -213.15 * 4 / 1.012 = -1079.644268 | ||
2795 | */ | ||
2796 | - *val = -1075; | ||
2797 | - *val2 = 691699; | ||
2798 | + *val = -1079; | ||
2799 | + *val2 = 644268; | ||
2800 | |||
2801 | return IIO_VAL_INT_PLUS_MICRO; | ||
2802 | } | ||
2803 | diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c | ||
2804 | index 21d01a491405..e508939daea3 100644 | ||
2805 | --- a/drivers/tty/serial/8250/8250_dma.c | ||
2806 | +++ b/drivers/tty/serial/8250/8250_dma.c | ||
2807 | @@ -80,10 +80,6 @@ int serial8250_tx_dma(struct uart_8250_port *p) | ||
2808 | return 0; | ||
2809 | |||
2810 | dma->tx_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE); | ||
2811 | - if (dma->tx_size < p->port.fifosize) { | ||
2812 | - ret = -EINVAL; | ||
2813 | - goto err; | ||
2814 | - } | ||
2815 | |||
2816 | desc = dmaengine_prep_slave_single(dma->txchan, | ||
2817 | dma->tx_addr + xmit->tail, | ||
2818 | diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c | ||
2819 | index 9373cca121d3..eb8adc2e68c1 100644 | ||
2820 | --- a/drivers/tty/serial/8250/8250_pci.c | ||
2821 | +++ b/drivers/tty/serial/8250/8250_pci.c | ||
2822 | @@ -1998,6 +1998,7 @@ pci_wch_ch38x_setup(struct serial_private *priv, | ||
2823 | #define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250 | ||
2824 | #define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470 | ||
2825 | |||
2826 | +#define PCI_DEVICE_ID_EXAR_XR17V4358 0x4358 | ||
2827 | #define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358 | ||
2828 | |||
2829 | #define PCI_VENDOR_ID_PERICOM 0x12D8 | ||
2830 | @@ -2515,6 +2516,13 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | ||
2831 | }, | ||
2832 | { | ||
2833 | .vendor = PCI_VENDOR_ID_EXAR, | ||
2834 | + .device = PCI_DEVICE_ID_EXAR_XR17V4358, | ||
2835 | + .subvendor = PCI_ANY_ID, | ||
2836 | + .subdevice = PCI_ANY_ID, | ||
2837 | + .setup = pci_xr17v35x_setup, | ||
2838 | + }, | ||
2839 | + { | ||
2840 | + .vendor = PCI_VENDOR_ID_EXAR, | ||
2841 | .device = PCI_DEVICE_ID_EXAR_XR17V8358, | ||
2842 | .subvendor = PCI_ANY_ID, | ||
2843 | .subdevice = PCI_ANY_ID, | ||
2844 | @@ -2999,6 +3007,7 @@ enum pci_board_num_t { | ||
2845 | pbn_exar_XR17V352, | ||
2846 | pbn_exar_XR17V354, | ||
2847 | pbn_exar_XR17V358, | ||
2848 | + pbn_exar_XR17V4358, | ||
2849 | pbn_exar_XR17V8358, | ||
2850 | pbn_exar_ibm_saturn, | ||
2851 | pbn_pasemi_1682M, | ||
2852 | @@ -3690,6 +3699,14 @@ static struct pciserial_board pci_boards[] = { | ||
2853 | .reg_shift = 0, | ||
2854 | .first_offset = 0, | ||
2855 | }, | ||
2856 | + [pbn_exar_XR17V4358] = { | ||
2857 | + .flags = FL_BASE0, | ||
2858 | + .num_ports = 12, | ||
2859 | + .base_baud = 7812500, | ||
2860 | + .uart_offset = 0x400, | ||
2861 | + .reg_shift = 0, | ||
2862 | + .first_offset = 0, | ||
2863 | + }, | ||
2864 | [pbn_exar_XR17V8358] = { | ||
2865 | .flags = FL_BASE0, | ||
2866 | .num_ports = 16, | ||
2867 | @@ -5133,6 +5150,10 @@ static struct pci_device_id serial_pci_tbl[] = { | ||
2868 | PCI_ANY_ID, PCI_ANY_ID, | ||
2869 | 0, | ||
2870 | 0, pbn_exar_XR17V358 }, | ||
2871 | + { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17V4358, | ||
2872 | + PCI_ANY_ID, PCI_ANY_ID, | ||
2873 | + 0, | ||
2874 | + 0, pbn_exar_XR17V4358 }, | ||
2875 | { PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17V8358, | ||
2876 | PCI_ANY_ID, PCI_ANY_ID, | ||
2877 | 0, | ||
2878 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
2879 | index 2af32e26fafc..7e5c90eebb9c 100644 | ||
2880 | --- a/drivers/usb/host/xhci-pci.c | ||
2881 | +++ b/drivers/usb/host/xhci-pci.c | ||
2882 | @@ -135,6 +135,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
2883 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | ||
2884 | pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { | ||
2885 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; | ||
2886 | + xhci->quirks |= XHCI_SPURIOUS_WAKEUP; | ||
2887 | } | ||
2888 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | ||
2889 | (pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI || | ||
2890 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
2891 | index ad975a2975ca..41d7a05f8af4 100644 | ||
2892 | --- a/drivers/usb/host/xhci-ring.c | ||
2893 | +++ b/drivers/usb/host/xhci-ring.c | ||
2894 | @@ -2239,6 +2239,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, | ||
2895 | u32 trb_comp_code; | ||
2896 | int ret = 0; | ||
2897 | int td_num = 0; | ||
2898 | + bool handling_skipped_tds = false; | ||
2899 | |||
2900 | slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags)); | ||
2901 | xdev = xhci->devs[slot_id]; | ||
2902 | @@ -2372,6 +2373,10 @@ static int handle_tx_event(struct xhci_hcd *xhci, | ||
2903 | ep->skip = true; | ||
2904 | xhci_dbg(xhci, "Miss service interval error, set skip flag\n"); | ||
2905 | goto cleanup; | ||
2906 | + case COMP_PING_ERR: | ||
2907 | + ep->skip = true; | ||
2908 | + xhci_dbg(xhci, "No Ping response error, Skip one Isoc TD\n"); | ||
2909 | + goto cleanup; | ||
2910 | default: | ||
2911 | if (xhci_is_vendor_info_code(xhci, trb_comp_code)) { | ||
2912 | status = 0; | ||
2913 | @@ -2508,13 +2513,18 @@ static int handle_tx_event(struct xhci_hcd *xhci, | ||
2914 | ep, &status); | ||
2915 | |||
2916 | cleanup: | ||
2917 | + | ||
2918 | + | ||
2919 | + handling_skipped_tds = ep->skip && | ||
2920 | + trb_comp_code != COMP_MISSED_INT && | ||
2921 | + trb_comp_code != COMP_PING_ERR; | ||
2922 | + | ||
2923 | /* | ||
2924 | - * Do not update event ring dequeue pointer if ep->skip is set. | ||
2925 | - * Will roll back to continue process missed tds. | ||
2926 | + * Do not update event ring dequeue pointer if we're in a loop | ||
2927 | + * processing missed tds. | ||
2928 | */ | ||
2929 | - if (trb_comp_code == COMP_MISSED_INT || !ep->skip) { | ||
2930 | + if (!handling_skipped_tds) | ||
2931 | inc_deq(xhci, xhci->event_ring); | ||
2932 | - } | ||
2933 | |||
2934 | if (ret) { | ||
2935 | urb = td->urb; | ||
2936 | @@ -2549,7 +2559,7 @@ cleanup: | ||
2937 | * Process them as short transfer until reach the td pointed by | ||
2938 | * the event. | ||
2939 | */ | ||
2940 | - } while (ep->skip && trb_comp_code != COMP_MISSED_INT); | ||
2941 | + } while (handling_skipped_tds); | ||
2942 | |||
2943 | return 0; | ||
2944 | } | ||
2945 | diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c | ||
2946 | index ebcec8cda858..f49d262e926b 100644 | ||
2947 | --- a/drivers/usb/serial/qcserial.c | ||
2948 | +++ b/drivers/usb/serial/qcserial.c | ||
2949 | @@ -153,6 +153,8 @@ static const struct usb_device_id id_table[] = { | ||
2950 | {DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */ | ||
2951 | {DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */ | ||
2952 | {DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */ | ||
2953 | + {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx/EM74xx */ | ||
2954 | + {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx/EM74xx */ | ||
2955 | {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ | ||
2956 | {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ | ||
2957 | {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ | ||
2958 | diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c | ||
2959 | index af3dd3c55ef1..8b2c82ce36b3 100644 | ||
2960 | --- a/fs/btrfs/ioctl.c | ||
2961 | +++ b/fs/btrfs/ioctl.c | ||
2962 | @@ -4494,7 +4494,7 @@ locked: | ||
2963 | |||
2964 | if (bctl->flags & ~(BTRFS_BALANCE_ARGS_MASK | BTRFS_BALANCE_TYPE_MASK)) { | ||
2965 | ret = -EINVAL; | ||
2966 | - goto out_bargs; | ||
2967 | + goto out_bctl; | ||
2968 | } | ||
2969 | |||
2970 | do_balance: | ||
2971 | @@ -4508,12 +4508,15 @@ do_balance: | ||
2972 | need_unlock = false; | ||
2973 | |||
2974 | ret = btrfs_balance(bctl, bargs); | ||
2975 | + bctl = NULL; | ||
2976 | |||
2977 | if (arg) { | ||
2978 | if (copy_to_user(arg, bargs, sizeof(*bargs))) | ||
2979 | ret = -EFAULT; | ||
2980 | } | ||
2981 | |||
2982 | +out_bctl: | ||
2983 | + kfree(bctl); | ||
2984 | out_bargs: | ||
2985 | kfree(bargs); | ||
2986 | out_unlock: | ||
2987 | diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c | ||
2988 | index 84d693d37428..871fcb67be97 100644 | ||
2989 | --- a/fs/overlayfs/copy_up.c | ||
2990 | +++ b/fs/overlayfs/copy_up.c | ||
2991 | @@ -81,11 +81,11 @@ static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) | ||
2992 | if (len == 0) | ||
2993 | return 0; | ||
2994 | |||
2995 | - old_file = ovl_path_open(old, O_RDONLY); | ||
2996 | + old_file = ovl_path_open(old, O_LARGEFILE | O_RDONLY); | ||
2997 | if (IS_ERR(old_file)) | ||
2998 | return PTR_ERR(old_file); | ||
2999 | |||
3000 | - new_file = ovl_path_open(new, O_WRONLY); | ||
3001 | + new_file = ovl_path_open(new, O_LARGEFILE | O_WRONLY); | ||
3002 | if (IS_ERR(new_file)) { | ||
3003 | error = PTR_ERR(new_file); | ||
3004 | goto out_fput; | ||
3005 | @@ -267,7 +267,7 @@ out: | ||
3006 | |||
3007 | out_cleanup: | ||
3008 | ovl_cleanup(wdir, newdentry); | ||
3009 | - goto out; | ||
3010 | + goto out2; | ||
3011 | } | ||
3012 | |||
3013 | /* | ||
3014 | diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c | ||
3015 | index 33f2d27a6792..d74af7f78fec 100644 | ||
3016 | --- a/fs/overlayfs/super.c | ||
3017 | +++ b/fs/overlayfs/super.c | ||
3018 | @@ -474,6 +474,7 @@ static void ovl_put_super(struct super_block *sb) | ||
3019 | mntput(ufs->upper_mnt); | ||
3020 | for (i = 0; i < ufs->numlower; i++) | ||
3021 | mntput(ufs->lower_mnt[i]); | ||
3022 | + kfree(ufs->lower_mnt); | ||
3023 | |||
3024 | kfree(ufs->config.lowerdir); | ||
3025 | kfree(ufs->config.upperdir); | ||
3026 | @@ -981,6 +982,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) | ||
3027 | oe->lowerstack[i].dentry = stack[i].dentry; | ||
3028 | oe->lowerstack[i].mnt = ufs->lower_mnt[i]; | ||
3029 | } | ||
3030 | + kfree(stack); | ||
3031 | |||
3032 | root_dentry->d_fsdata = oe; | ||
3033 | |||
3034 | diff --git a/include/sound/soc.h b/include/sound/soc.h | ||
3035 | index f6226914acfe..8d948aa9c5c9 100644 | ||
3036 | --- a/include/sound/soc.h | ||
3037 | +++ b/include/sound/soc.h | ||
3038 | @@ -85,7 +85,7 @@ | ||
3039 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ | ||
3040 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | ||
3041 | .tlv.p = (tlv_array),\ | ||
3042 | - .info = snd_soc_info_volsw, \ | ||
3043 | + .info = snd_soc_info_volsw_sx, \ | ||
3044 | .get = snd_soc_get_volsw_sx,\ | ||
3045 | .put = snd_soc_put_volsw_sx, \ | ||
3046 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
3047 | @@ -155,7 +155,7 @@ | ||
3048 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ | ||
3049 | SNDRV_CTL_ELEM_ACCESS_READWRITE, \ | ||
3050 | .tlv.p = (tlv_array), \ | ||
3051 | - .info = snd_soc_info_volsw, \ | ||
3052 | + .info = snd_soc_info_volsw_sx, \ | ||
3053 | .get = snd_soc_get_volsw_sx, \ | ||
3054 | .put = snd_soc_put_volsw_sx, \ | ||
3055 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
3056 | @@ -563,6 +563,8 @@ int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, | ||
3057 | struct snd_ctl_elem_value *ucontrol); | ||
3058 | int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, | ||
3059 | struct snd_ctl_elem_info *uinfo); | ||
3060 | +int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol, | ||
3061 | + struct snd_ctl_elem_info *uinfo); | ||
3062 | #define snd_soc_info_bool_ext snd_ctl_boolean_mono_info | ||
3063 | int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, | ||
3064 | struct snd_ctl_elem_value *ucontrol); | ||
3065 | diff --git a/include/sound/wm8904.h b/include/sound/wm8904.h | ||
3066 | index 898be3a8db9a..6d8f8fba3341 100644 | ||
3067 | --- a/include/sound/wm8904.h | ||
3068 | +++ b/include/sound/wm8904.h | ||
3069 | @@ -119,7 +119,7 @@ | ||
3070 | #define WM8904_MIC_REGS 2 | ||
3071 | #define WM8904_GPIO_REGS 4 | ||
3072 | #define WM8904_DRC_REGS 4 | ||
3073 | -#define WM8904_EQ_REGS 25 | ||
3074 | +#define WM8904_EQ_REGS 24 | ||
3075 | |||
3076 | /** | ||
3077 | * DRC configurations are specified with a label and a set of register | ||
3078 | diff --git a/kernel/module.c b/kernel/module.c | ||
3079 | index cfc9e843a924..3b9ff966edb9 100644 | ||
3080 | --- a/kernel/module.c | ||
3081 | +++ b/kernel/module.c | ||
3082 | @@ -906,11 +906,15 @@ void symbol_put_addr(void *addr) | ||
3083 | if (core_kernel_text(a)) | ||
3084 | return; | ||
3085 | |||
3086 | - /* module_text_address is safe here: we're supposed to have reference | ||
3087 | - * to module from symbol_get, so it can't go away. */ | ||
3088 | + /* | ||
3089 | + * Even though we hold a reference on the module; we still need to | ||
3090 | + * disable preemption in order to safely traverse the data structure. | ||
3091 | + */ | ||
3092 | + preempt_disable(); | ||
3093 | modaddr = __module_text_address(a); | ||
3094 | BUG_ON(!modaddr); | ||
3095 | module_put(modaddr); | ||
3096 | + preempt_enable(); | ||
3097 | } | ||
3098 | EXPORT_SYMBOL_GPL(symbol_put_addr); | ||
3099 | |||
3100 | diff --git a/lib/fault-inject.c b/lib/fault-inject.c | ||
3101 | index f1cdeb024d17..6a823a53e357 100644 | ||
3102 | --- a/lib/fault-inject.c | ||
3103 | +++ b/lib/fault-inject.c | ||
3104 | @@ -44,7 +44,7 @@ static void fail_dump(struct fault_attr *attr) | ||
3105 | printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure.\n" | ||
3106 | "name %pd, interval %lu, probability %lu, " | ||
3107 | "space %d, times %d\n", attr->dname, | ||
3108 | - attr->probability, attr->interval, | ||
3109 | + attr->interval, attr->probability, | ||
3110 | atomic_read(&attr->space), | ||
3111 | atomic_read(&attr->times)); | ||
3112 | if (attr->verbose > 1) | ||
3113 | diff --git a/mm/filemap.c b/mm/filemap.c | ||
3114 | index 6bf5e42d560a..1ffef05f1c1f 100644 | ||
3115 | --- a/mm/filemap.c | ||
3116 | +++ b/mm/filemap.c | ||
3117 | @@ -2461,6 +2461,11 @@ again: | ||
3118 | break; | ||
3119 | } | ||
3120 | |||
3121 | + if (fatal_signal_pending(current)) { | ||
3122 | + status = -EINTR; | ||
3123 | + break; | ||
3124 | + } | ||
3125 | + | ||
3126 | status = a_ops->write_begin(file, mapping, pos, bytes, flags, | ||
3127 | &page, &fsdata); | ||
3128 | if (unlikely(status < 0)) | ||
3129 | @@ -2498,10 +2503,6 @@ again: | ||
3130 | written += copied; | ||
3131 | |||
3132 | balance_dirty_pages_ratelimited(mapping); | ||
3133 | - if (fatal_signal_pending(current)) { | ||
3134 | - status = -EINTR; | ||
3135 | - break; | ||
3136 | - } | ||
3137 | } while (iov_iter_count(i)); | ||
3138 | |||
3139 | return written ? written : status; | ||
3140 | diff --git a/mm/huge_memory.c b/mm/huge_memory.c | ||
3141 | index 078832cf3636..8e792ec5e84c 100644 | ||
3142 | --- a/mm/huge_memory.c | ||
3143 | +++ b/mm/huge_memory.c | ||
3144 | @@ -2137,7 +2137,8 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, | ||
3145 | for (_pte = pte; _pte < pte+HPAGE_PMD_NR; | ||
3146 | _pte++, address += PAGE_SIZE) { | ||
3147 | pte_t pteval = *_pte; | ||
3148 | - if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) { | ||
3149 | + if (pte_none(pteval) || (pte_present(pteval) && | ||
3150 | + is_zero_pfn(pte_pfn(pteval)))) { | ||
3151 | if (++none_or_zero <= khugepaged_max_ptes_none) | ||
3152 | continue; | ||
3153 | else | ||
3154 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c | ||
3155 | index 36e8f1236637..57197bef5f5b 100644 | ||
3156 | --- a/sound/pci/hda/hda_codec.c | ||
3157 | +++ b/sound/pci/hda/hda_codec.c | ||
3158 | @@ -3833,10 +3833,8 @@ int snd_hda_codec_build_pcms(struct hda_codec *codec) | ||
3159 | return -EINVAL; | ||
3160 | |||
3161 | err = snd_hda_codec_parse_pcms(codec); | ||
3162 | - if (err < 0) { | ||
3163 | - snd_hda_codec_reset(codec); | ||
3164 | + if (err < 0) | ||
3165 | return err; | ||
3166 | - } | ||
3167 | |||
3168 | /* attach a new PCM streams */ | ||
3169 | list_for_each_entry(cpcm, &codec->pcm_list_head, list) { | ||
3170 | diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c | ||
3171 | index 06cc9d57ba3d..488f4c7be33e 100644 | ||
3172 | --- a/sound/pci/hda/patch_conexant.c | ||
3173 | +++ b/sound/pci/hda/patch_conexant.c | ||
3174 | @@ -819,6 +819,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = { | ||
3175 | SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT_PINCFG_LENOVO_TP410), | ||
3176 | SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT_PINCFG_LENOVO_TP410), | ||
3177 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD), | ||
3178 | + SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC), | ||
3179 | SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC), | ||
3180 | SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC), | ||
3181 | SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", CXT_FIXUP_STEREO_DMIC), | ||
3182 | diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c | ||
3183 | index 100d92b5b77e..05977ae1ff2a 100644 | ||
3184 | --- a/sound/soc/soc-ops.c | ||
3185 | +++ b/sound/soc/soc-ops.c | ||
3186 | @@ -207,6 +207,34 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, | ||
3187 | EXPORT_SYMBOL_GPL(snd_soc_info_volsw); | ||
3188 | |||
3189 | /** | ||
3190 | + * snd_soc_info_volsw_sx - Mixer info callback for SX TLV controls | ||
3191 | + * @kcontrol: mixer control | ||
3192 | + * @uinfo: control element information | ||
3193 | + * | ||
3194 | + * Callback to provide information about a single mixer control, or a double | ||
3195 | + * mixer control that spans 2 registers of the SX TLV type. SX TLV controls | ||
3196 | + * have a range that represents both positive and negative values either side | ||
3197 | + * of zero but without a sign bit. | ||
3198 | + * | ||
3199 | + * Returns 0 for success. | ||
3200 | + */ | ||
3201 | +int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol, | ||
3202 | + struct snd_ctl_elem_info *uinfo) | ||
3203 | +{ | ||
3204 | + struct soc_mixer_control *mc = | ||
3205 | + (struct soc_mixer_control *)kcontrol->private_value; | ||
3206 | + | ||
3207 | + snd_soc_info_volsw(kcontrol, uinfo); | ||
3208 | + /* Max represents the number of levels in an SX control not the | ||
3209 | + * maximum value, so add the minimum value back on | ||
3210 | + */ | ||
3211 | + uinfo->value.integer.max += mc->min; | ||
3212 | + | ||
3213 | + return 0; | ||
3214 | +} | ||
3215 | +EXPORT_SYMBOL_GPL(snd_soc_info_volsw_sx); | ||
3216 | + | ||
3217 | +/** | ||
3218 | * snd_soc_get_volsw - single mixer get callback | ||
3219 | * @kcontrol: mixer control | ||
3220 | * @ucontrol: control element information |