Annotation of /trunk/kernel-alx/patches-4.9/0302-4.9.203-all-fixes.patch
Parent Directory | Revision Log
Revision 3577 -
(hide annotations)
(download)
Thu Aug 13 10:21:18 2020 UTC (3 years, 10 months ago) by niro
File size: 220639 byte(s)
Thu Aug 13 10:21:18 2020 UTC (3 years, 10 months ago) by niro
File size: 220639 byte(s)
linux-203
1 | niro | 3577 | diff --git a/Makefile b/Makefile |
2 | index 1e322e669301..174c0e2526ac 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 202 | ||
9 | +SUBLEVEL = 203 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm/boot/compressed/libfdt_env.h b/arch/arm/boot/compressed/libfdt_env.h | ||
14 | index 17ae0f3efac8..005bf4ff1b4c 100644 | ||
15 | --- a/arch/arm/boot/compressed/libfdt_env.h | ||
16 | +++ b/arch/arm/boot/compressed/libfdt_env.h | ||
17 | @@ -5,6 +5,8 @@ | ||
18 | #include <linux/string.h> | ||
19 | #include <asm/byteorder.h> | ||
20 | |||
21 | +#define INT_MAX ((int)(~0U>>1)) | ||
22 | + | ||
23 | typedef __be16 fdt16_t; | ||
24 | typedef __be32 fdt32_t; | ||
25 | typedef __be64 fdt64_t; | ||
26 | diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts | ||
27 | index e82432c79f85..3f3ad09c7cd5 100644 | ||
28 | --- a/arch/arm/boot/dts/am335x-evm.dts | ||
29 | +++ b/arch/arm/boot/dts/am335x-evm.dts | ||
30 | @@ -701,6 +701,7 @@ | ||
31 | pinctrl-0 = <&cpsw_default>; | ||
32 | pinctrl-1 = <&cpsw_sleep>; | ||
33 | status = "okay"; | ||
34 | + slaves = <1>; | ||
35 | }; | ||
36 | |||
37 | &davinci_mdio { | ||
38 | @@ -708,15 +709,14 @@ | ||
39 | pinctrl-0 = <&davinci_mdio_default>; | ||
40 | pinctrl-1 = <&davinci_mdio_sleep>; | ||
41 | status = "okay"; | ||
42 | -}; | ||
43 | |||
44 | -&cpsw_emac0 { | ||
45 | - phy_id = <&davinci_mdio>, <0>; | ||
46 | - phy-mode = "rgmii-txid"; | ||
47 | + ethphy0: ethernet-phy@0 { | ||
48 | + reg = <0>; | ||
49 | + }; | ||
50 | }; | ||
51 | |||
52 | -&cpsw_emac1 { | ||
53 | - phy_id = <&davinci_mdio>, <1>; | ||
54 | +&cpsw_emac0 { | ||
55 | + phy-handle = <ðphy0>; | ||
56 | phy-mode = "rgmii-txid"; | ||
57 | }; | ||
58 | |||
59 | diff --git a/arch/arm/boot/dts/arm-realview-eb.dtsi b/arch/arm/boot/dts/arm-realview-eb.dtsi | ||
60 | index e2e9599596e2..05379b6c1c13 100644 | ||
61 | --- a/arch/arm/boot/dts/arm-realview-eb.dtsi | ||
62 | +++ b/arch/arm/boot/dts/arm-realview-eb.dtsi | ||
63 | @@ -334,7 +334,7 @@ | ||
64 | clock-names = "uartclk", "apb_pclk"; | ||
65 | }; | ||
66 | |||
67 | - ssp: ssp@1000d000 { | ||
68 | + ssp: spi@1000d000 { | ||
69 | compatible = "arm,pl022", "arm,primecell"; | ||
70 | reg = <0x1000d000 0x1000>; | ||
71 | clocks = <&sspclk>, <&pclk>; | ||
72 | diff --git a/arch/arm/boot/dts/arm-realview-pb1176.dts b/arch/arm/boot/dts/arm-realview-pb1176.dts | ||
73 | index c789564f2803..c1fd5615ddfe 100644 | ||
74 | --- a/arch/arm/boot/dts/arm-realview-pb1176.dts | ||
75 | +++ b/arch/arm/boot/dts/arm-realview-pb1176.dts | ||
76 | @@ -343,7 +343,7 @@ | ||
77 | clock-names = "apb_pclk"; | ||
78 | }; | ||
79 | |||
80 | - pb1176_ssp: ssp@1010b000 { | ||
81 | + pb1176_ssp: spi@1010b000 { | ||
82 | compatible = "arm,pl022", "arm,primecell"; | ||
83 | reg = <0x1010b000 0x1000>; | ||
84 | interrupt-parent = <&intc_dc1176>; | ||
85 | diff --git a/arch/arm/boot/dts/arm-realview-pb11mp.dts b/arch/arm/boot/dts/arm-realview-pb11mp.dts | ||
86 | index 3944765ac4b0..e306f1cceb4e 100644 | ||
87 | --- a/arch/arm/boot/dts/arm-realview-pb11mp.dts | ||
88 | +++ b/arch/arm/boot/dts/arm-realview-pb11mp.dts | ||
89 | @@ -480,7 +480,7 @@ | ||
90 | clock-names = "uartclk", "apb_pclk"; | ||
91 | }; | ||
92 | |||
93 | - ssp@1000d000 { | ||
94 | + spi@1000d000 { | ||
95 | compatible = "arm,pl022", "arm,primecell"; | ||
96 | reg = <0x1000d000 0x1000>; | ||
97 | interrupt-parent = <&intc_pb11mp>; | ||
98 | diff --git a/arch/arm/boot/dts/arm-realview-pbx.dtsi b/arch/arm/boot/dts/arm-realview-pbx.dtsi | ||
99 | index aeb49c4bd773..2bf3958b2e6b 100644 | ||
100 | --- a/arch/arm/boot/dts/arm-realview-pbx.dtsi | ||
101 | +++ b/arch/arm/boot/dts/arm-realview-pbx.dtsi | ||
102 | @@ -318,7 +318,7 @@ | ||
103 | clock-names = "uartclk", "apb_pclk"; | ||
104 | }; | ||
105 | |||
106 | - ssp: ssp@1000d000 { | ||
107 | + ssp: spi@1000d000 { | ||
108 | compatible = "arm,pl022", "arm,primecell"; | ||
109 | reg = <0x1000d000 0x1000>; | ||
110 | clocks = <&sspclk>, <&pclk>; | ||
111 | diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi | ||
112 | index b3501ae2a3bd..4fba898b8f4f 100644 | ||
113 | --- a/arch/arm/boot/dts/at91sam9g45.dtsi | ||
114 | +++ b/arch/arm/boot/dts/at91sam9g45.dtsi | ||
115 | @@ -546,7 +546,7 @@ | ||
116 | }; | ||
117 | }; | ||
118 | |||
119 | - uart1 { | ||
120 | + usart1 { | ||
121 | pinctrl_usart1: usart1-0 { | ||
122 | atmel,pins = | ||
123 | <AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_PULL_UP /* PB4 periph A with pullup */ | ||
124 | diff --git a/arch/arm/boot/dts/dove-cubox.dts b/arch/arm/boot/dts/dove-cubox.dts | ||
125 | index af3cb633135f..ee32315e3d3a 100644 | ||
126 | --- a/arch/arm/boot/dts/dove-cubox.dts | ||
127 | +++ b/arch/arm/boot/dts/dove-cubox.dts | ||
128 | @@ -86,7 +86,7 @@ | ||
129 | status = "okay"; | ||
130 | clock-frequency = <100000>; | ||
131 | |||
132 | - si5351: clock-generator { | ||
133 | + si5351: clock-generator@60 { | ||
134 | compatible = "silabs,si5351a-msop"; | ||
135 | reg = <0x60>; | ||
136 | #address-cells = <1>; | ||
137 | diff --git a/arch/arm/boot/dts/dove.dtsi b/arch/arm/boot/dts/dove.dtsi | ||
138 | index 698d58cea20d..11342aeccb73 100644 | ||
139 | --- a/arch/arm/boot/dts/dove.dtsi | ||
140 | +++ b/arch/arm/boot/dts/dove.dtsi | ||
141 | @@ -152,7 +152,7 @@ | ||
142 | 0xffffe000 MBUS_ID(0x03, 0x01) 0 0x0000800 /* CESA SRAM 2k */ | ||
143 | 0xfffff000 MBUS_ID(0x0d, 0x00) 0 0x0000800>; /* PMU SRAM 2k */ | ||
144 | |||
145 | - spi0: spi-ctrl@10600 { | ||
146 | + spi0: spi@10600 { | ||
147 | compatible = "marvell,orion-spi"; | ||
148 | #address-cells = <1>; | ||
149 | #size-cells = <0>; | ||
150 | @@ -165,7 +165,7 @@ | ||
151 | status = "disabled"; | ||
152 | }; | ||
153 | |||
154 | - i2c: i2c-ctrl@11000 { | ||
155 | + i2c: i2c@11000 { | ||
156 | compatible = "marvell,mv64xxx-i2c"; | ||
157 | reg = <0x11000 0x20>; | ||
158 | #address-cells = <1>; | ||
159 | @@ -215,7 +215,7 @@ | ||
160 | status = "disabled"; | ||
161 | }; | ||
162 | |||
163 | - spi1: spi-ctrl@14600 { | ||
164 | + spi1: spi@14600 { | ||
165 | compatible = "marvell,orion-spi"; | ||
166 | #address-cells = <1>; | ||
167 | #size-cells = <0>; | ||
168 | diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts | ||
169 | index 6098dacd09f1..1b2709af2a42 100644 | ||
170 | --- a/arch/arm/boot/dts/exynos5250-arndale.dts | ||
171 | +++ b/arch/arm/boot/dts/exynos5250-arndale.dts | ||
172 | @@ -170,6 +170,8 @@ | ||
173 | reg = <0x66>; | ||
174 | interrupt-parent = <&gpx3>; | ||
175 | interrupts = <2 IRQ_TYPE_LEVEL_LOW>; | ||
176 | + pinctrl-names = "default"; | ||
177 | + pinctrl-0 = <&s5m8767_irq>; | ||
178 | |||
179 | vinb1-supply = <&main_dc_reg>; | ||
180 | vinb2-supply = <&main_dc_reg>; | ||
181 | @@ -547,6 +549,13 @@ | ||
182 | cap-sd-highspeed; | ||
183 | }; | ||
184 | |||
185 | +&pinctrl_0 { | ||
186 | + s5m8767_irq: s5m8767-irq { | ||
187 | + samsung,pins = "gpx3-2"; | ||
188 | + samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>; | ||
189 | + }; | ||
190 | +}; | ||
191 | + | ||
192 | &rtc { | ||
193 | status = "okay"; | ||
194 | }; | ||
195 | diff --git a/arch/arm/boot/dts/exynos5250-snow-rev5.dts b/arch/arm/boot/dts/exynos5250-snow-rev5.dts | ||
196 | index 90560c316f64..cb986175b69b 100644 | ||
197 | --- a/arch/arm/boot/dts/exynos5250-snow-rev5.dts | ||
198 | +++ b/arch/arm/boot/dts/exynos5250-snow-rev5.dts | ||
199 | @@ -23,6 +23,14 @@ | ||
200 | |||
201 | samsung,model = "Snow-I2S-MAX98090"; | ||
202 | samsung,audio-codec = <&max98090>; | ||
203 | + | ||
204 | + cpu { | ||
205 | + sound-dai = <&i2s0 0>; | ||
206 | + }; | ||
207 | + | ||
208 | + codec { | ||
209 | + sound-dai = <&max98090 0>, <&hdmi>; | ||
210 | + }; | ||
211 | }; | ||
212 | }; | ||
213 | |||
214 | @@ -34,6 +42,9 @@ | ||
215 | interrupt-parent = <&gpx0>; | ||
216 | pinctrl-names = "default"; | ||
217 | pinctrl-0 = <&max98090_irq>; | ||
218 | + clocks = <&pmu_system_controller 0>; | ||
219 | + clock-names = "mclk"; | ||
220 | + #sound-dai-cells = <1>; | ||
221 | }; | ||
222 | }; | ||
223 | |||
224 | diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts b/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
225 | index 8b754ae8c8f7..c9d379b1a166 100644 | ||
226 | --- a/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
227 | +++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts | ||
228 | @@ -302,6 +302,7 @@ | ||
229 | regulator-name = "vdd_1v35"; | ||
230 | regulator-min-microvolt = <1350000>; | ||
231 | regulator-max-microvolt = <1350000>; | ||
232 | + regulator-always-on; | ||
233 | regulator-boot-on; | ||
234 | regulator-state-mem { | ||
235 | regulator-on-in-suspend; | ||
236 | @@ -323,6 +324,7 @@ | ||
237 | regulator-name = "vdd_2v"; | ||
238 | regulator-min-microvolt = <2000000>; | ||
239 | regulator-max-microvolt = <2000000>; | ||
240 | + regulator-always-on; | ||
241 | regulator-boot-on; | ||
242 | regulator-state-mem { | ||
243 | regulator-on-in-suspend; | ||
244 | @@ -333,6 +335,7 @@ | ||
245 | regulator-name = "vdd_1v8"; | ||
246 | regulator-min-microvolt = <1800000>; | ||
247 | regulator-max-microvolt = <1800000>; | ||
248 | + regulator-always-on; | ||
249 | regulator-boot-on; | ||
250 | regulator-state-mem { | ||
251 | regulator-on-in-suspend; | ||
252 | diff --git a/arch/arm/boot/dts/exynos5800-peach-pi.dts b/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
253 | index 1f90df2d7ecd..ae58b8d6f614 100644 | ||
254 | --- a/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
255 | +++ b/arch/arm/boot/dts/exynos5800-peach-pi.dts | ||
256 | @@ -302,6 +302,7 @@ | ||
257 | regulator-name = "vdd_1v35"; | ||
258 | regulator-min-microvolt = <1350000>; | ||
259 | regulator-max-microvolt = <1350000>; | ||
260 | + regulator-always-on; | ||
261 | regulator-boot-on; | ||
262 | regulator-state-mem { | ||
263 | regulator-on-in-suspend; | ||
264 | @@ -323,6 +324,7 @@ | ||
265 | regulator-name = "vdd_2v"; | ||
266 | regulator-min-microvolt = <2000000>; | ||
267 | regulator-max-microvolt = <2000000>; | ||
268 | + regulator-always-on; | ||
269 | regulator-boot-on; | ||
270 | regulator-state-mem { | ||
271 | regulator-on-in-suspend; | ||
272 | @@ -333,6 +335,7 @@ | ||
273 | regulator-name = "vdd_1v8"; | ||
274 | regulator-min-microvolt = <1800000>; | ||
275 | regulator-max-microvolt = <1800000>; | ||
276 | + regulator-always-on; | ||
277 | regulator-boot-on; | ||
278 | regulator-state-mem { | ||
279 | regulator-on-in-suspend; | ||
280 | diff --git a/arch/arm/boot/dts/lpc32xx.dtsi b/arch/arm/boot/dts/lpc32xx.dtsi | ||
281 | index 0d20aadc78bb..5fa3111731cb 100644 | ||
282 | --- a/arch/arm/boot/dts/lpc32xx.dtsi | ||
283 | +++ b/arch/arm/boot/dts/lpc32xx.dtsi | ||
284 | @@ -179,7 +179,7 @@ | ||
285 | * ssp0 and spi1 are shared pins; | ||
286 | * enable one in your board dts, as needed. | ||
287 | */ | ||
288 | - ssp0: ssp@20084000 { | ||
289 | + ssp0: spi@20084000 { | ||
290 | compatible = "arm,pl022", "arm,primecell"; | ||
291 | reg = <0x20084000 0x1000>; | ||
292 | interrupts = <20 IRQ_TYPE_LEVEL_HIGH>; | ||
293 | @@ -199,7 +199,7 @@ | ||
294 | * ssp1 and spi2 are shared pins; | ||
295 | * enable one in your board dts, as needed. | ||
296 | */ | ||
297 | - ssp1: ssp@2008c000 { | ||
298 | + ssp1: spi@2008c000 { | ||
299 | compatible = "arm,pl022", "arm,primecell"; | ||
300 | reg = <0x2008c000 0x1000>; | ||
301 | interrupts = <21 IRQ_TYPE_LEVEL_HIGH>; | ||
302 | diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi | ||
303 | index b3a8b1f24499..719150693449 100644 | ||
304 | --- a/arch/arm/boot/dts/omap3-gta04.dtsi | ||
305 | +++ b/arch/arm/boot/dts/omap3-gta04.dtsi | ||
306 | @@ -28,6 +28,7 @@ | ||
307 | |||
308 | aliases { | ||
309 | display0 = &lcd; | ||
310 | + display1 = &tv0; | ||
311 | }; | ||
312 | |||
313 | gpio-keys { | ||
314 | @@ -70,7 +71,7 @@ | ||
315 | #sound-dai-cells = <0>; | ||
316 | }; | ||
317 | |||
318 | - spi_lcd { | ||
319 | + spi_lcd: spi_lcd { | ||
320 | compatible = "spi-gpio"; | ||
321 | #address-cells = <0x1>; | ||
322 | #size-cells = <0x0>; | ||
323 | @@ -122,7 +123,7 @@ | ||
324 | }; | ||
325 | |||
326 | tv0: connector { | ||
327 | - compatible = "svideo-connector"; | ||
328 | + compatible = "composite-video-connector"; | ||
329 | label = "tv"; | ||
330 | |||
331 | port { | ||
332 | @@ -134,7 +135,7 @@ | ||
333 | |||
334 | tv_amp: opa362 { | ||
335 | compatible = "ti,opa362"; | ||
336 | - enable-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>; | ||
337 | + enable-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>; /* GPIO_23 to enable video out amplifier */ | ||
338 | |||
339 | ports { | ||
340 | #address-cells = <1>; | ||
341 | @@ -273,6 +274,13 @@ | ||
342 | OMAP3_CORE1_IOPAD(0x2134, PIN_INPUT_PULLUP | MUX_MODE4) /* gpio112 */ | ||
343 | >; | ||
344 | }; | ||
345 | + | ||
346 | + penirq_pins: pinmux_penirq_pins { | ||
347 | + pinctrl-single,pins = < | ||
348 | + /* here we could enable to wakeup the cpu from suspend by a pen touch */ | ||
349 | + OMAP3_CORE1_IOPAD(0x2194, PIN_INPUT_PULLUP | MUX_MODE4) /* gpio160 */ | ||
350 | + >; | ||
351 | + }; | ||
352 | }; | ||
353 | |||
354 | &omap3_pmx_core2 { | ||
355 | @@ -410,10 +418,19 @@ | ||
356 | tsc2007@48 { | ||
357 | compatible = "ti,tsc2007"; | ||
358 | reg = <0x48>; | ||
359 | + pinctrl-names = "default"; | ||
360 | + pinctrl-0 = <&penirq_pins>; | ||
361 | interrupt-parent = <&gpio6>; | ||
362 | interrupts = <0 IRQ_TYPE_EDGE_FALLING>; /* GPIO_160 */ | ||
363 | - gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; | ||
364 | + gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* GPIO_160 */ | ||
365 | ti,x-plate-ohms = <600>; | ||
366 | + touchscreen-size-x = <480>; | ||
367 | + touchscreen-size-y = <640>; | ||
368 | + touchscreen-max-pressure = <1000>; | ||
369 | + touchscreen-fuzz-x = <3>; | ||
370 | + touchscreen-fuzz-y = <8>; | ||
371 | + touchscreen-fuzz-pressure = <10>; | ||
372 | + touchscreen-inverted-y; | ||
373 | }; | ||
374 | |||
375 | /* RFID EEPROM */ | ||
376 | @@ -519,6 +536,12 @@ | ||
377 | regulator-max-microvolt = <3150000>; | ||
378 | }; | ||
379 | |||
380 | +/* Needed to power the DPI pins */ | ||
381 | + | ||
382 | +&vpll2 { | ||
383 | + regulator-always-on; | ||
384 | +}; | ||
385 | + | ||
386 | &dss { | ||
387 | pinctrl-names = "default"; | ||
388 | pinctrl-0 = < &dss_dpi_pins >; | ||
389 | @@ -539,10 +562,14 @@ | ||
390 | |||
391 | vdda-supply = <&vdac>; | ||
392 | |||
393 | + #address-cells = <1>; | ||
394 | + #size-cells = <0>; | ||
395 | + | ||
396 | port { | ||
397 | + reg = <0>; | ||
398 | venc_out: endpoint { | ||
399 | remote-endpoint = <&opa_in>; | ||
400 | - ti,channels = <2>; | ||
401 | + ti,channels = <1>; | ||
402 | ti,invert-polarity; | ||
403 | }; | ||
404 | }; | ||
405 | @@ -586,22 +613,22 @@ | ||
406 | |||
407 | bootloaders@80000 { | ||
408 | label = "U-Boot"; | ||
409 | - reg = <0x80000 0x1e0000>; | ||
410 | + reg = <0x80000 0x1c0000>; | ||
411 | }; | ||
412 | |||
413 | - bootloaders_env@260000 { | ||
414 | + bootloaders_env@240000 { | ||
415 | label = "U-Boot Env"; | ||
416 | - reg = <0x260000 0x20000>; | ||
417 | + reg = <0x240000 0x40000>; | ||
418 | }; | ||
419 | |||
420 | kernel@280000 { | ||
421 | label = "Kernel"; | ||
422 | - reg = <0x280000 0x400000>; | ||
423 | + reg = <0x280000 0x600000>; | ||
424 | }; | ||
425 | |||
426 | - filesystem@680000 { | ||
427 | + filesystem@880000 { | ||
428 | label = "File System"; | ||
429 | - reg = <0x680000 0xf980000>; | ||
430 | + reg = <0x880000 0>; /* 0 = MTDPART_SIZ_FULL */ | ||
431 | }; | ||
432 | }; | ||
433 | }; | ||
434 | diff --git a/arch/arm/boot/dts/omap5-board-common.dtsi b/arch/arm/boot/dts/omap5-board-common.dtsi | ||
435 | index 4caadb253249..e412373fe7bf 100644 | ||
436 | --- a/arch/arm/boot/dts/omap5-board-common.dtsi | ||
437 | +++ b/arch/arm/boot/dts/omap5-board-common.dtsi | ||
438 | @@ -694,6 +694,11 @@ | ||
439 | vbus-supply = <&smps10_out1_reg>; | ||
440 | }; | ||
441 | |||
442 | +&dwc3 { | ||
443 | + extcon = <&extcon_usb3>; | ||
444 | + dr_mode = "otg"; | ||
445 | +}; | ||
446 | + | ||
447 | &mcspi1 { | ||
448 | |||
449 | }; | ||
450 | diff --git a/arch/arm/boot/dts/orion5x-linkstation.dtsi b/arch/arm/boot/dts/orion5x-linkstation.dtsi | ||
451 | index ed456ab35fd8..c1bc8376d4eb 100644 | ||
452 | --- a/arch/arm/boot/dts/orion5x-linkstation.dtsi | ||
453 | +++ b/arch/arm/boot/dts/orion5x-linkstation.dtsi | ||
454 | @@ -156,7 +156,7 @@ | ||
455 | &i2c { | ||
456 | status = "okay"; | ||
457 | |||
458 | - rtc { | ||
459 | + rtc@32 { | ||
460 | compatible = "ricoh,rs5c372a"; | ||
461 | reg = <0x32>; | ||
462 | }; | ||
463 | diff --git a/arch/arm/boot/dts/pxa27x.dtsi b/arch/arm/boot/dts/pxa27x.dtsi | ||
464 | index 9e73dc6b3ed3..0e1320afa156 100644 | ||
465 | --- a/arch/arm/boot/dts/pxa27x.dtsi | ||
466 | +++ b/arch/arm/boot/dts/pxa27x.dtsi | ||
467 | @@ -70,7 +70,7 @@ | ||
468 | clocks = <&clks CLK_PWM1>; | ||
469 | }; | ||
470 | |||
471 | - pwri2c: i2c@40f000180 { | ||
472 | + pwri2c: i2c@40f00180 { | ||
473 | compatible = "mrvl,pxa-i2c"; | ||
474 | reg = <0x40f00180 0x24>; | ||
475 | interrupts = <6>; | ||
476 | diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
477 | index 4b7d97275c62..5ee84e3cb3e9 100644 | ||
478 | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
479 | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
480 | @@ -211,7 +211,7 @@ | ||
481 | |||
482 | saw0: regulator@b089000 { | ||
483 | compatible = "qcom,saw2"; | ||
484 | - reg = <0x02089000 0x1000>, <0x0b009000 0x1000>; | ||
485 | + reg = <0x0b089000 0x1000>, <0x0b009000 0x1000>; | ||
486 | regulator; | ||
487 | }; | ||
488 | |||
489 | diff --git a/arch/arm/boot/dts/rk3036.dtsi b/arch/arm/boot/dts/rk3036.dtsi | ||
490 | index a935523a1eb8..147c73f68f1d 100644 | ||
491 | --- a/arch/arm/boot/dts/rk3036.dtsi | ||
492 | +++ b/arch/arm/boot/dts/rk3036.dtsi | ||
493 | @@ -744,7 +744,7 @@ | ||
494 | /* no rts / cts for uart2 */ | ||
495 | }; | ||
496 | |||
497 | - spi { | ||
498 | + spi-pins { | ||
499 | spi_txd:spi-txd { | ||
500 | rockchip,pins = <1 29 RK_FUNC_3 &pcfg_pull_default>; | ||
501 | }; | ||
502 | diff --git a/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts b/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts | ||
503 | index afea3645ada4..89d55894d916 100644 | ||
504 | --- a/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts | ||
505 | +++ b/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts | ||
506 | @@ -88,7 +88,7 @@ | ||
507 | status = "okay"; | ||
508 | speed-mode = <0>; | ||
509 | |||
510 | - adxl345: adxl345@0 { | ||
511 | + adxl345: adxl345@53 { | ||
512 | compatible = "adi,adxl345"; | ||
513 | reg = <0x53>; | ||
514 | |||
515 | diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi b/arch/arm/boot/dts/ste-dbx5x0.dtsi | ||
516 | index d309314f3a36..5f1769209526 100644 | ||
517 | --- a/arch/arm/boot/dts/ste-dbx5x0.dtsi | ||
518 | +++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi | ||
519 | @@ -188,7 +188,7 @@ | ||
520 | <0xa0410100 0x100>; | ||
521 | }; | ||
522 | |||
523 | - scu@a04100000 { | ||
524 | + scu@a0410000 { | ||
525 | compatible = "arm,cortex-a9-scu"; | ||
526 | reg = <0xa0410000 0x100>; | ||
527 | }; | ||
528 | @@ -864,7 +864,7 @@ | ||
529 | power-domains = <&pm_domains DOMAIN_VAPE>; | ||
530 | }; | ||
531 | |||
532 | - ssp@80002000 { | ||
533 | + spi@80002000 { | ||
534 | compatible = "arm,pl022", "arm,primecell"; | ||
535 | reg = <0x80002000 0x1000>; | ||
536 | interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>; | ||
537 | @@ -878,7 +878,7 @@ | ||
538 | power-domains = <&pm_domains DOMAIN_VAPE>; | ||
539 | }; | ||
540 | |||
541 | - ssp@80003000 { | ||
542 | + spi@80003000 { | ||
543 | compatible = "arm,pl022", "arm,primecell"; | ||
544 | reg = <0x80003000 0x1000>; | ||
545 | interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; | ||
546 | diff --git a/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi b/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi | ||
547 | index 5c5cea232743..1ec193b0c506 100644 | ||
548 | --- a/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi | ||
549 | +++ b/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi | ||
550 | @@ -607,16 +607,20 @@ | ||
551 | |||
552 | mcde { | ||
553 | lcd_default_mode: lcd_default { | ||
554 | - default_mux { | ||
555 | + default_mux1 { | ||
556 | /* Mux in VSI0 and all the data lines */ | ||
557 | function = "lcd"; | ||
558 | groups = | ||
559 | "lcdvsi0_a_1", /* VSI0 for LCD */ | ||
560 | "lcd_d0_d7_a_1", /* Data lines */ | ||
561 | "lcd_d8_d11_a_1", /* TV-out */ | ||
562 | - "lcdaclk_b_1", /* Clock line for TV-out */ | ||
563 | "lcdvsi1_a_1"; /* VSI1 for HDMI */ | ||
564 | }; | ||
565 | + default_mux2 { | ||
566 | + function = "lcda"; | ||
567 | + groups = | ||
568 | + "lcdaclk_b_1"; /* Clock line for TV-out */ | ||
569 | + }; | ||
570 | default_cfg1 { | ||
571 | pins = | ||
572 | "GPIO68_E1", /* VSI0 */ | ||
573 | diff --git a/arch/arm/boot/dts/ste-hrefprev60.dtsi b/arch/arm/boot/dts/ste-hrefprev60.dtsi | ||
574 | index ece222d51717..cf8d03bc42c1 100644 | ||
575 | --- a/arch/arm/boot/dts/ste-hrefprev60.dtsi | ||
576 | +++ b/arch/arm/boot/dts/ste-hrefprev60.dtsi | ||
577 | @@ -57,7 +57,7 @@ | ||
578 | }; | ||
579 | }; | ||
580 | |||
581 | - ssp@80002000 { | ||
582 | + spi@80002000 { | ||
583 | /* | ||
584 | * On the first generation boards, this SSP/SPI port was connected | ||
585 | * to the AB8500. | ||
586 | diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts | ||
587 | index 386eee6de232..272d36c3d223 100644 | ||
588 | --- a/arch/arm/boot/dts/ste-snowball.dts | ||
589 | +++ b/arch/arm/boot/dts/ste-snowball.dts | ||
590 | @@ -386,7 +386,7 @@ | ||
591 | pinctrl-1 = <&i2c3_sleep_mode>; | ||
592 | }; | ||
593 | |||
594 | - ssp@80002000 { | ||
595 | + spi@80002000 { | ||
596 | pinctrl-names = "default"; | ||
597 | pinctrl-0 = <&ssp0_snowball_mode>; | ||
598 | }; | ||
599 | diff --git a/arch/arm/boot/dts/ste-u300.dts b/arch/arm/boot/dts/ste-u300.dts | ||
600 | index 2f5107ffeef0..ea6768b96a9d 100644 | ||
601 | --- a/arch/arm/boot/dts/ste-u300.dts | ||
602 | +++ b/arch/arm/boot/dts/ste-u300.dts | ||
603 | @@ -441,7 +441,7 @@ | ||
604 | dma-names = "rx"; | ||
605 | }; | ||
606 | |||
607 | - spi: ssp@c0006000 { | ||
608 | + spi: spi@c0006000 { | ||
609 | compatible = "arm,pl022", "arm,primecell"; | ||
610 | reg = <0xc0006000 0x1000>; | ||
611 | interrupt-parent = <&vica>; | ||
612 | diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts | ||
613 | index b4bfa5586c23..23d4c837b87a 100644 | ||
614 | --- a/arch/arm/boot/dts/tegra20-paz00.dts | ||
615 | +++ b/arch/arm/boot/dts/tegra20-paz00.dts | ||
616 | @@ -521,10 +521,10 @@ | ||
617 | gpio-keys { | ||
618 | compatible = "gpio-keys"; | ||
619 | |||
620 | - power { | ||
621 | - label = "Power"; | ||
622 | + wakeup { | ||
623 | + label = "Wakeup"; | ||
624 | gpios = <&gpio TEGRA_GPIO(J, 7) GPIO_ACTIVE_LOW>; | ||
625 | - linux,code = <KEY_POWER>; | ||
626 | + linux,code = <KEY_WAKEUP>; | ||
627 | wakeup-source; | ||
628 | }; | ||
629 | }; | ||
630 | diff --git a/arch/arm/boot/dts/tegra30-apalis.dtsi b/arch/arm/boot/dts/tegra30-apalis.dtsi | ||
631 | index 192b95177aac..826bdd0b8a25 100644 | ||
632 | --- a/arch/arm/boot/dts/tegra30-apalis.dtsi | ||
633 | +++ b/arch/arm/boot/dts/tegra30-apalis.dtsi | ||
634 | @@ -147,14 +147,14 @@ | ||
635 | |||
636 | /* Apalis MMC1 */ | ||
637 | sdmmc3_clk_pa6 { | ||
638 | - nvidia,pins = "sdmmc3_clk_pa6", | ||
639 | - "sdmmc3_cmd_pa7"; | ||
640 | + nvidia,pins = "sdmmc3_clk_pa6"; | ||
641 | nvidia,function = "sdmmc3"; | ||
642 | nvidia,pull = <TEGRA_PIN_PULL_NONE>; | ||
643 | nvidia,tristate = <TEGRA_PIN_DISABLE>; | ||
644 | }; | ||
645 | sdmmc3_dat0_pb7 { | ||
646 | - nvidia,pins = "sdmmc3_dat0_pb7", | ||
647 | + nvidia,pins = "sdmmc3_cmd_pa7", | ||
648 | + "sdmmc3_dat0_pb7", | ||
649 | "sdmmc3_dat1_pb6", | ||
650 | "sdmmc3_dat2_pb5", | ||
651 | "sdmmc3_dat3_pb4", | ||
652 | diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi | ||
653 | index 5030065cbdfe..ad30d2a51af1 100644 | ||
654 | --- a/arch/arm/boot/dts/tegra30.dtsi | ||
655 | +++ b/arch/arm/boot/dts/tegra30.dtsi | ||
656 | @@ -823,7 +823,7 @@ | ||
657 | nvidia,elastic-limit = <16>; | ||
658 | nvidia,term-range-adj = <6>; | ||
659 | nvidia,xcvr-setup = <51>; | ||
660 | - nvidia.xcvr-setup-use-fuses; | ||
661 | + nvidia,xcvr-setup-use-fuses; | ||
662 | nvidia,xcvr-lsfslew = <1>; | ||
663 | nvidia,xcvr-lsrslew = <1>; | ||
664 | nvidia,xcvr-hsslew = <32>; | ||
665 | @@ -860,7 +860,7 @@ | ||
666 | nvidia,elastic-limit = <16>; | ||
667 | nvidia,term-range-adj = <6>; | ||
668 | nvidia,xcvr-setup = <51>; | ||
669 | - nvidia.xcvr-setup-use-fuses; | ||
670 | + nvidia,xcvr-setup-use-fuses; | ||
671 | nvidia,xcvr-lsfslew = <2>; | ||
672 | nvidia,xcvr-lsrslew = <2>; | ||
673 | nvidia,xcvr-hsslew = <32>; | ||
674 | @@ -896,7 +896,7 @@ | ||
675 | nvidia,elastic-limit = <16>; | ||
676 | nvidia,term-range-adj = <6>; | ||
677 | nvidia,xcvr-setup = <51>; | ||
678 | - nvidia.xcvr-setup-use-fuses; | ||
679 | + nvidia,xcvr-setup-use-fuses; | ||
680 | nvidia,xcvr-lsfslew = <2>; | ||
681 | nvidia,xcvr-lsrslew = <2>; | ||
682 | nvidia,xcvr-hsslew = <32>; | ||
683 | diff --git a/arch/arm/boot/dts/versatile-ab.dts b/arch/arm/boot/dts/versatile-ab.dts | ||
684 | index 409e069b3a84..00d7d28e86f0 100644 | ||
685 | --- a/arch/arm/boot/dts/versatile-ab.dts | ||
686 | +++ b/arch/arm/boot/dts/versatile-ab.dts | ||
687 | @@ -303,7 +303,7 @@ | ||
688 | clock-names = "apb_pclk"; | ||
689 | }; | ||
690 | |||
691 | - ssp@101f4000 { | ||
692 | + spi@101f4000 { | ||
693 | compatible = "arm,pl022", "arm,primecell"; | ||
694 | reg = <0x101f4000 0x1000>; | ||
695 | interrupts = <11>; | ||
696 | diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S | ||
697 | index d69adfb3d79e..178a2a960659 100644 | ||
698 | --- a/arch/arm/kernel/entry-common.S | ||
699 | +++ b/arch/arm/kernel/entry-common.S | ||
700 | @@ -263,16 +263,15 @@ __sys_trace: | ||
701 | cmp scno, #-1 @ skip the syscall? | ||
702 | bne 2b | ||
703 | add sp, sp, #S_OFF @ restore stack | ||
704 | - b ret_slow_syscall | ||
705 | |||
706 | -__sys_trace_return: | ||
707 | - str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 | ||
708 | +__sys_trace_return_nosave: | ||
709 | + enable_irq_notrace | ||
710 | mov r0, sp | ||
711 | bl syscall_trace_exit | ||
712 | b ret_slow_syscall | ||
713 | |||
714 | -__sys_trace_return_nosave: | ||
715 | - enable_irq_notrace | ||
716 | +__sys_trace_return: | ||
717 | + str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 | ||
718 | mov r0, sp | ||
719 | bl syscall_trace_exit | ||
720 | b ret_slow_syscall | ||
721 | diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c | ||
722 | index b3d268a79f05..bb0d5e21d60b 100644 | ||
723 | --- a/arch/arm/kvm/mmu.c | ||
724 | +++ b/arch/arm/kvm/mmu.c | ||
725 | @@ -366,7 +366,8 @@ static void stage2_flush_memslot(struct kvm *kvm, | ||
726 | pgd = kvm->arch.pgd + stage2_pgd_index(addr); | ||
727 | do { | ||
728 | next = stage2_pgd_addr_end(addr, end); | ||
729 | - stage2_flush_puds(kvm, pgd, addr, next); | ||
730 | + if (!stage2_pgd_none(*pgd)) | ||
731 | + stage2_flush_puds(kvm, pgd, addr, next); | ||
732 | } while (pgd++, addr = next, addr != end); | ||
733 | } | ||
734 | |||
735 | diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c | ||
736 | index 1515e498d348..dd9eb3f14f45 100644 | ||
737 | --- a/arch/arm/mach-imx/pm-imx6.c | ||
738 | +++ b/arch/arm/mach-imx/pm-imx6.c | ||
739 | @@ -602,6 +602,28 @@ static void __init imx6_pm_common_init(const struct imx6_pm_socdata | ||
740 | IMX6Q_GPR1_GINT); | ||
741 | } | ||
742 | |||
743 | +static void imx6_pm_stby_poweroff(void) | ||
744 | +{ | ||
745 | + imx6_set_lpm(STOP_POWER_OFF); | ||
746 | + imx6q_suspend_finish(0); | ||
747 | + | ||
748 | + mdelay(1000); | ||
749 | + | ||
750 | + pr_emerg("Unable to poweroff system\n"); | ||
751 | +} | ||
752 | + | ||
753 | +static int imx6_pm_stby_poweroff_probe(void) | ||
754 | +{ | ||
755 | + if (pm_power_off) { | ||
756 | + pr_warn("%s: pm_power_off already claimed %p %pf!\n", | ||
757 | + __func__, pm_power_off, pm_power_off); | ||
758 | + return -EBUSY; | ||
759 | + } | ||
760 | + | ||
761 | + pm_power_off = imx6_pm_stby_poweroff; | ||
762 | + return 0; | ||
763 | +} | ||
764 | + | ||
765 | void __init imx6_pm_ccm_init(const char *ccm_compat) | ||
766 | { | ||
767 | struct device_node *np; | ||
768 | @@ -618,6 +640,9 @@ void __init imx6_pm_ccm_init(const char *ccm_compat) | ||
769 | val = readl_relaxed(ccm_base + CLPCR); | ||
770 | val &= ~BM_CLPCR_LPM; | ||
771 | writel_relaxed(val, ccm_base + CLPCR); | ||
772 | + | ||
773 | + if (of_property_read_bool(np, "fsl,pmic-stby-poweroff")) | ||
774 | + imx6_pm_stby_poweroff_probe(); | ||
775 | } | ||
776 | |||
777 | void __init imx6q_pm_init(void) | ||
778 | diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | ||
779 | index bd3adeac374f..2973a14523ea 100644 | ||
780 | --- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | ||
781 | +++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | ||
782 | @@ -106,7 +106,7 @@ | ||
783 | clock-names = "uartclk", "apb_pclk"; | ||
784 | }; | ||
785 | |||
786 | - spi0: ssp@e1020000 { | ||
787 | + spi0: spi@e1020000 { | ||
788 | status = "disabled"; | ||
789 | compatible = "arm,pl022", "arm,primecell"; | ||
790 | reg = <0 0xe1020000 0 0x1000>; | ||
791 | @@ -116,7 +116,7 @@ | ||
792 | clock-names = "apb_pclk"; | ||
793 | }; | ||
794 | |||
795 | - spi1: ssp@e1030000 { | ||
796 | + spi1: spi@e1030000 { | ||
797 | status = "disabled"; | ||
798 | compatible = "arm,pl022", "arm,primecell"; | ||
799 | reg = <0 0xe1030000 0 0x1000>; | ||
800 | diff --git a/arch/arm64/boot/dts/lg/lg1312.dtsi b/arch/arm64/boot/dts/lg/lg1312.dtsi | ||
801 | index fbafa24cd533..5e0c5dc973e3 100644 | ||
802 | --- a/arch/arm64/boot/dts/lg/lg1312.dtsi | ||
803 | +++ b/arch/arm64/boot/dts/lg/lg1312.dtsi | ||
804 | @@ -167,14 +167,14 @@ | ||
805 | clock-names = "apb_pclk"; | ||
806 | status="disabled"; | ||
807 | }; | ||
808 | - spi0: ssp@fe800000 { | ||
809 | + spi0: spi@fe800000 { | ||
810 | compatible = "arm,pl022", "arm,primecell"; | ||
811 | reg = <0x0 0xfe800000 0x1000>; | ||
812 | interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; | ||
813 | clocks = <&clk_bus>; | ||
814 | clock-names = "apb_pclk"; | ||
815 | }; | ||
816 | - spi1: ssp@fe900000 { | ||
817 | + spi1: spi@fe900000 { | ||
818 | compatible = "arm,pl022", "arm,primecell"; | ||
819 | reg = <0x0 0xfe900000 0x1000>; | ||
820 | interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; | ||
821 | diff --git a/arch/arm64/boot/dts/lg/lg1313.dtsi b/arch/arm64/boot/dts/lg/lg1313.dtsi | ||
822 | index e703e1149c75..f3b1ba6f7422 100644 | ||
823 | --- a/arch/arm64/boot/dts/lg/lg1313.dtsi | ||
824 | +++ b/arch/arm64/boot/dts/lg/lg1313.dtsi | ||
825 | @@ -167,14 +167,14 @@ | ||
826 | clock-names = "apb_pclk"; | ||
827 | status="disabled"; | ||
828 | }; | ||
829 | - spi0: ssp@fe800000 { | ||
830 | + spi0: spi@fe800000 { | ||
831 | compatible = "arm,pl022", "arm,primecell"; | ||
832 | reg = <0x0 0xfe800000 0x1000>; | ||
833 | interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; | ||
834 | clocks = <&clk_bus>; | ||
835 | clock-names = "apb_pclk"; | ||
836 | }; | ||
837 | - spi1: ssp@fe900000 { | ||
838 | + spi1: spi@fe900000 { | ||
839 | compatible = "arm,pl022", "arm,primecell"; | ||
840 | reg = <0x0 0xfe900000 0x1000>; | ||
841 | interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; | ||
842 | diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi | ||
843 | index 6a51d282ec63..d1e687b4911f 100644 | ||
844 | --- a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi | ||
845 | +++ b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi | ||
846 | @@ -281,6 +281,7 @@ | ||
847 | status = "okay"; | ||
848 | bus-width = <8>; | ||
849 | non-removable; | ||
850 | + vqmmc-supply = <&vdd_1v8>; | ||
851 | }; | ||
852 | |||
853 | clocks { | ||
854 | diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S | ||
855 | index efbf610eaf4e..a814f32033b0 100644 | ||
856 | --- a/arch/arm64/lib/clear_user.S | ||
857 | +++ b/arch/arm64/lib/clear_user.S | ||
858 | @@ -62,5 +62,7 @@ ENDPROC(__arch_clear_user) | ||
859 | .section .fixup,"ax" | ||
860 | .align 2 | ||
861 | 9: mov x0, x2 // return the original size | ||
862 | +ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(1)), ARM64_ALT_PAN_NOT_UAO, \ | ||
863 | + CONFIG_ARM64_PAN) | ||
864 | ret | ||
865 | .previous | ||
866 | diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S | ||
867 | index 4fd67ea03bb0..580aca96c53c 100644 | ||
868 | --- a/arch/arm64/lib/copy_from_user.S | ||
869 | +++ b/arch/arm64/lib/copy_from_user.S | ||
870 | @@ -80,5 +80,7 @@ ENDPROC(__arch_copy_from_user) | ||
871 | .section .fixup,"ax" | ||
872 | .align 2 | ||
873 | 9998: sub x0, end, dst // bytes not copied | ||
874 | +ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(1)), ARM64_ALT_PAN_NOT_UAO, \ | ||
875 | + CONFIG_ARM64_PAN) | ||
876 | ret | ||
877 | .previous | ||
878 | diff --git a/arch/arm64/lib/copy_in_user.S b/arch/arm64/lib/copy_in_user.S | ||
879 | index 841bf8f7fab7..d9ca6a4f33b3 100644 | ||
880 | --- a/arch/arm64/lib/copy_in_user.S | ||
881 | +++ b/arch/arm64/lib/copy_in_user.S | ||
882 | @@ -81,5 +81,7 @@ ENDPROC(__arch_copy_in_user) | ||
883 | .section .fixup,"ax" | ||
884 | .align 2 | ||
885 | 9998: sub x0, end, dst // bytes not copied | ||
886 | +ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(1)), ARM64_ALT_PAN_NOT_UAO, \ | ||
887 | + CONFIG_ARM64_PAN) | ||
888 | ret | ||
889 | .previous | ||
890 | diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S | ||
891 | index 7a7efe255034..e8bd40dc00cd 100644 | ||
892 | --- a/arch/arm64/lib/copy_to_user.S | ||
893 | +++ b/arch/arm64/lib/copy_to_user.S | ||
894 | @@ -79,5 +79,7 @@ ENDPROC(__arch_copy_to_user) | ||
895 | .section .fixup,"ax" | ||
896 | .align 2 | ||
897 | 9998: sub x0, end, dst // bytes not copied | ||
898 | +ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(1)), ARM64_ALT_PAN_NOT_UAO, \ | ||
899 | + CONFIG_ARM64_PAN) | ||
900 | ret | ||
901 | .previous | ||
902 | diff --git a/arch/arm64/mm/numa.c b/arch/arm64/mm/numa.c | ||
903 | index 4b32168cf91a..b1e42bad69ac 100644 | ||
904 | --- a/arch/arm64/mm/numa.c | ||
905 | +++ b/arch/arm64/mm/numa.c | ||
906 | @@ -424,7 +424,7 @@ static int __init dummy_numa_init(void) | ||
907 | if (numa_off) | ||
908 | pr_info("NUMA disabled\n"); /* Forced off on command line. */ | ||
909 | pr_info("Faking a node at [mem %#018Lx-%#018Lx]\n", | ||
910 | - 0LLU, PFN_PHYS(max_pfn) - 1); | ||
911 | + memblock_start_of_DRAM(), memblock_end_of_DRAM() - 1); | ||
912 | |||
913 | for_each_memblock(memory, mblk) { | ||
914 | ret = numa_add_memblk(0, mblk->base, mblk->base + mblk->size); | ||
915 | diff --git a/arch/mips/bcm47xx/workarounds.c b/arch/mips/bcm47xx/workarounds.c | ||
916 | index e81ce4623070..06fb94370c7c 100644 | ||
917 | --- a/arch/mips/bcm47xx/workarounds.c | ||
918 | +++ b/arch/mips/bcm47xx/workarounds.c | ||
919 | @@ -4,9 +4,8 @@ | ||
920 | #include <bcm47xx_board.h> | ||
921 | #include <bcm47xx.h> | ||
922 | |||
923 | -static void __init bcm47xx_workarounds_netgear_wnr3500l(void) | ||
924 | +static void __init bcm47xx_workarounds_enable_usb_power(int usb_power) | ||
925 | { | ||
926 | - const int usb_power = 12; | ||
927 | int err; | ||
928 | |||
929 | err = gpio_request_one(usb_power, GPIOF_OUT_INIT_HIGH, "usb_power"); | ||
930 | @@ -22,7 +21,10 @@ void __init bcm47xx_workarounds(void) | ||
931 | |||
932 | switch (board) { | ||
933 | case BCM47XX_BOARD_NETGEAR_WNR3500L: | ||
934 | - bcm47xx_workarounds_netgear_wnr3500l(); | ||
935 | + bcm47xx_workarounds_enable_usb_power(12); | ||
936 | + break; | ||
937 | + case BCM47XX_BOARD_NETGEAR_WNDR3400_V3: | ||
938 | + bcm47xx_workarounds_enable_usb_power(21); | ||
939 | break; | ||
940 | default: | ||
941 | /* No workaround(s) needed */ | ||
942 | diff --git a/arch/mips/include/asm/kexec.h b/arch/mips/include/asm/kexec.h | ||
943 | index 493a3cc7c39a..cfdbe66575f4 100644 | ||
944 | --- a/arch/mips/include/asm/kexec.h | ||
945 | +++ b/arch/mips/include/asm/kexec.h | ||
946 | @@ -12,11 +12,11 @@ | ||
947 | #include <asm/stacktrace.h> | ||
948 | |||
949 | /* Maximum physical address we can use pages from */ | ||
950 | -#define KEXEC_SOURCE_MEMORY_LIMIT (0x20000000) | ||
951 | +#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) | ||
952 | /* Maximum address we can reach in physical address mode */ | ||
953 | -#define KEXEC_DESTINATION_MEMORY_LIMIT (0x20000000) | ||
954 | +#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL) | ||
955 | /* Maximum address we can use for the control code buffer */ | ||
956 | -#define KEXEC_CONTROL_MEMORY_LIMIT (0x20000000) | ||
957 | +#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL) | ||
958 | /* Reserve 3*4096 bytes for board-specific info */ | ||
959 | #define KEXEC_CONTROL_PAGE_SIZE (4096 + 3*4096) | ||
960 | |||
961 | diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c | ||
962 | index a1d98b5c8fd6..5c53b8aa43d2 100644 | ||
963 | --- a/arch/mips/txx9/generic/setup.c | ||
964 | +++ b/arch/mips/txx9/generic/setup.c | ||
965 | @@ -959,12 +959,11 @@ void __init txx9_sramc_init(struct resource *r) | ||
966 | goto exit_put; | ||
967 | err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr); | ||
968 | if (err) { | ||
969 | - device_unregister(&dev->dev); | ||
970 | iounmap(dev->base); | ||
971 | - kfree(dev); | ||
972 | + device_unregister(&dev->dev); | ||
973 | } | ||
974 | return; | ||
975 | exit_put: | ||
976 | + iounmap(dev->base); | ||
977 | put_device(&dev->dev); | ||
978 | - return; | ||
979 | } | ||
980 | diff --git a/arch/powerpc/boot/libfdt_env.h b/arch/powerpc/boot/libfdt_env.h | ||
981 | index 7e3789ea396b..0b3db6322c79 100644 | ||
982 | --- a/arch/powerpc/boot/libfdt_env.h | ||
983 | +++ b/arch/powerpc/boot/libfdt_env.h | ||
984 | @@ -4,6 +4,8 @@ | ||
985 | #include <types.h> | ||
986 | #include <string.h> | ||
987 | |||
988 | +#define INT_MAX ((int)(~0U>>1)) | ||
989 | + | ||
990 | #include "of.h" | ||
991 | |||
992 | typedef u32 uint32_t; | ||
993 | diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c | ||
994 | index 5f202a566ec5..9bfdd2510fd5 100644 | ||
995 | --- a/arch/powerpc/kernel/iommu.c | ||
996 | +++ b/arch/powerpc/kernel/iommu.c | ||
997 | @@ -765,9 +765,9 @@ dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl, | ||
998 | |||
999 | vaddr = page_address(page) + offset; | ||
1000 | uaddr = (unsigned long)vaddr; | ||
1001 | - npages = iommu_num_pages(uaddr, size, IOMMU_PAGE_SIZE(tbl)); | ||
1002 | |||
1003 | if (tbl) { | ||
1004 | + npages = iommu_num_pages(uaddr, size, IOMMU_PAGE_SIZE(tbl)); | ||
1005 | align = 0; | ||
1006 | if (tbl->it_page_shift < PAGE_SHIFT && size >= PAGE_SIZE && | ||
1007 | ((unsigned long)vaddr & ~PAGE_MASK) == 0) | ||
1008 | diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c | ||
1009 | index a309a7a29cc6..641f3e4c3380 100644 | ||
1010 | --- a/arch/powerpc/kernel/rtas.c | ||
1011 | +++ b/arch/powerpc/kernel/rtas.c | ||
1012 | @@ -984,6 +984,7 @@ int rtas_ibm_suspend_me(u64 handle) | ||
1013 | goto out; | ||
1014 | } | ||
1015 | |||
1016 | + cpu_hotplug_disable(); | ||
1017 | stop_topology_update(); | ||
1018 | |||
1019 | /* Call function on all CPUs. One of us will make the | ||
1020 | @@ -998,6 +999,7 @@ int rtas_ibm_suspend_me(u64 handle) | ||
1021 | printk(KERN_ERR "Error doing global join\n"); | ||
1022 | |||
1023 | start_topology_update(); | ||
1024 | + cpu_hotplug_enable(); | ||
1025 | |||
1026 | /* Take down CPUs not online prior to suspend */ | ||
1027 | cpuret = rtas_offline_cpus_mask(offline_mask); | ||
1028 | diff --git a/arch/powerpc/kernel/vdso32/datapage.S b/arch/powerpc/kernel/vdso32/datapage.S | ||
1029 | index 3745113fcc65..2a7eb5452aba 100644 | ||
1030 | --- a/arch/powerpc/kernel/vdso32/datapage.S | ||
1031 | +++ b/arch/powerpc/kernel/vdso32/datapage.S | ||
1032 | @@ -37,6 +37,7 @@ data_page_branch: | ||
1033 | mtlr r0 | ||
1034 | addi r3, r3, __kernel_datapage_offset-data_page_branch | ||
1035 | lwz r0,0(r3) | ||
1036 | + .cfi_restore lr | ||
1037 | add r3,r0,r3 | ||
1038 | blr | ||
1039 | .cfi_endproc | ||
1040 | diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S | ||
1041 | index 6b2b69616e77..7b341b86216c 100644 | ||
1042 | --- a/arch/powerpc/kernel/vdso32/gettimeofday.S | ||
1043 | +++ b/arch/powerpc/kernel/vdso32/gettimeofday.S | ||
1044 | @@ -139,6 +139,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | ||
1045 | */ | ||
1046 | 99: | ||
1047 | li r0,__NR_clock_gettime | ||
1048 | + .cfi_restore lr | ||
1049 | sc | ||
1050 | blr | ||
1051 | .cfi_endproc | ||
1052 | diff --git a/arch/powerpc/kernel/vdso64/datapage.S b/arch/powerpc/kernel/vdso64/datapage.S | ||
1053 | index abf17feffe40..bf9668691511 100644 | ||
1054 | --- a/arch/powerpc/kernel/vdso64/datapage.S | ||
1055 | +++ b/arch/powerpc/kernel/vdso64/datapage.S | ||
1056 | @@ -37,6 +37,7 @@ data_page_branch: | ||
1057 | mtlr r0 | ||
1058 | addi r3, r3, __kernel_datapage_offset-data_page_branch | ||
1059 | lwz r0,0(r3) | ||
1060 | + .cfi_restore lr | ||
1061 | add r3,r0,r3 | ||
1062 | blr | ||
1063 | .cfi_endproc | ||
1064 | diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S | ||
1065 | index 382021324883..09b2a49f6dd5 100644 | ||
1066 | --- a/arch/powerpc/kernel/vdso64/gettimeofday.S | ||
1067 | +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | ||
1068 | @@ -124,6 +124,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) | ||
1069 | */ | ||
1070 | 99: | ||
1071 | li r0,__NR_clock_gettime | ||
1072 | + .cfi_restore lr | ||
1073 | sc | ||
1074 | blr | ||
1075 | .cfi_endproc | ||
1076 | diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c | ||
1077 | index 73c3c127d858..209cad89a11a 100644 | ||
1078 | --- a/arch/powerpc/kvm/book3s.c | ||
1079 | +++ b/arch/powerpc/kvm/book3s.c | ||
1080 | @@ -78,8 +78,11 @@ void kvmppc_unfixup_split_real(struct kvm_vcpu *vcpu) | ||
1081 | { | ||
1082 | if (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK) { | ||
1083 | ulong pc = kvmppc_get_pc(vcpu); | ||
1084 | + ulong lr = kvmppc_get_lr(vcpu); | ||
1085 | if ((pc & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) | ||
1086 | kvmppc_set_pc(vcpu, pc & ~SPLIT_HACK_MASK); | ||
1087 | + if ((lr & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) | ||
1088 | + kvmppc_set_lr(vcpu, lr & ~SPLIT_HACK_MASK); | ||
1089 | vcpu->arch.hflags &= ~BOOK3S_HFLAG_SPLIT_HACK; | ||
1090 | } | ||
1091 | } | ||
1092 | diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c | ||
1093 | index 64c9a91773af..96c41b55b106 100644 | ||
1094 | --- a/arch/powerpc/mm/slb.c | ||
1095 | +++ b/arch/powerpc/mm/slb.c | ||
1096 | @@ -321,7 +321,7 @@ void slb_initialize(void) | ||
1097 | #endif | ||
1098 | } | ||
1099 | |||
1100 | - get_paca()->stab_rr = SLB_NUM_BOLTED; | ||
1101 | + get_paca()->stab_rr = SLB_NUM_BOLTED - 1; | ||
1102 | |||
1103 | lflags = SLB_VSID_KERNEL | linear_llp; | ||
1104 | vflags = SLB_VSID_KERNEL | vmalloc_llp; | ||
1105 | diff --git a/arch/powerpc/platforms/pseries/dtl.c b/arch/powerpc/platforms/pseries/dtl.c | ||
1106 | index 39049e4884fb..7a4d172c9376 100644 | ||
1107 | --- a/arch/powerpc/platforms/pseries/dtl.c | ||
1108 | +++ b/arch/powerpc/platforms/pseries/dtl.c | ||
1109 | @@ -150,7 +150,7 @@ static int dtl_start(struct dtl *dtl) | ||
1110 | |||
1111 | /* Register our dtl buffer with the hypervisor. The HV expects the | ||
1112 | * buffer size to be passed in the second word of the buffer */ | ||
1113 | - ((u32 *)dtl->buf)[1] = DISPATCH_LOG_BYTES; | ||
1114 | + ((u32 *)dtl->buf)[1] = cpu_to_be32(DISPATCH_LOG_BYTES); | ||
1115 | |||
1116 | hwcpu = get_hard_smp_processor_id(dtl->cpu); | ||
1117 | addr = __pa(dtl->buf); | ||
1118 | @@ -185,7 +185,7 @@ static void dtl_stop(struct dtl *dtl) | ||
1119 | |||
1120 | static u64 dtl_current_index(struct dtl *dtl) | ||
1121 | { | ||
1122 | - return lppaca_of(dtl->cpu).dtl_idx; | ||
1123 | + return be64_to_cpu(lppaca_of(dtl->cpu).dtl_idx); | ||
1124 | } | ||
1125 | #endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ | ||
1126 | |||
1127 | diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile | ||
1128 | index ca7c3c34f94b..2bb3a255e51a 100644 | ||
1129 | --- a/arch/s390/kernel/vdso32/Makefile | ||
1130 | +++ b/arch/s390/kernel/vdso32/Makefile | ||
1131 | @@ -24,9 +24,10 @@ obj-y += vdso32_wrapper.o | ||
1132 | extra-y += vdso32.lds | ||
1133 | CPPFLAGS_vdso32.lds += -P -C -U$(ARCH) | ||
1134 | |||
1135 | -# Disable gcov profiling and ubsan for VDSO code | ||
1136 | +# Disable gcov profiling, ubsan and kasan for VDSO code | ||
1137 | GCOV_PROFILE := n | ||
1138 | UBSAN_SANITIZE := n | ||
1139 | +KASAN_SANITIZE := n | ||
1140 | |||
1141 | # Force dependency (incbin is bad) | ||
1142 | $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so | ||
1143 | diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile | ||
1144 | index 84af2b6b64c4..76c56b5382be 100644 | ||
1145 | --- a/arch/s390/kernel/vdso64/Makefile | ||
1146 | +++ b/arch/s390/kernel/vdso64/Makefile | ||
1147 | @@ -24,9 +24,10 @@ obj-y += vdso64_wrapper.o | ||
1148 | extra-y += vdso64.lds | ||
1149 | CPPFLAGS_vdso64.lds += -P -C -U$(ARCH) | ||
1150 | |||
1151 | -# Disable gcov profiling and ubsan for VDSO code | ||
1152 | +# Disable gcov profiling, ubsan and kasan for VDSO code | ||
1153 | GCOV_PROFILE := n | ||
1154 | UBSAN_SANITIZE := n | ||
1155 | +KASAN_SANITIZE := n | ||
1156 | |||
1157 | # Force dependency (incbin is bad) | ||
1158 | $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so | ||
1159 | diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig | ||
1160 | index 1067f7668c4e..80636caee07c 100644 | ||
1161 | --- a/arch/x86/Kconfig | ||
1162 | +++ b/arch/x86/Kconfig | ||
1163 | @@ -2614,8 +2614,7 @@ config OLPC | ||
1164 | |||
1165 | config OLPC_XO1_PM | ||
1166 | bool "OLPC XO-1 Power Management" | ||
1167 | - depends on OLPC && MFD_CS5535 && PM_SLEEP | ||
1168 | - select MFD_CORE | ||
1169 | + depends on OLPC && MFD_CS5535=y && PM_SLEEP | ||
1170 | ---help--- | ||
1171 | Add support for poweroff and suspend of the OLPC XO-1 laptop. | ||
1172 | |||
1173 | diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h | ||
1174 | index 14635c5ea025..76a35c1213d2 100644 | ||
1175 | --- a/arch/x86/include/asm/atomic.h | ||
1176 | +++ b/arch/x86/include/asm/atomic.h | ||
1177 | @@ -49,7 +49,7 @@ static __always_inline void atomic_add(int i, atomic_t *v) | ||
1178 | { | ||
1179 | asm volatile(LOCK_PREFIX "addl %1,%0" | ||
1180 | : "+m" (v->counter) | ||
1181 | - : "ir" (i)); | ||
1182 | + : "ir" (i) : "memory"); | ||
1183 | } | ||
1184 | |||
1185 | /** | ||
1186 | @@ -63,7 +63,7 @@ static __always_inline void atomic_sub(int i, atomic_t *v) | ||
1187 | { | ||
1188 | asm volatile(LOCK_PREFIX "subl %1,%0" | ||
1189 | : "+m" (v->counter) | ||
1190 | - : "ir" (i)); | ||
1191 | + : "ir" (i) : "memory"); | ||
1192 | } | ||
1193 | |||
1194 | /** | ||
1195 | @@ -89,7 +89,7 @@ static __always_inline bool atomic_sub_and_test(int i, atomic_t *v) | ||
1196 | static __always_inline void atomic_inc(atomic_t *v) | ||
1197 | { | ||
1198 | asm volatile(LOCK_PREFIX "incl %0" | ||
1199 | - : "+m" (v->counter)); | ||
1200 | + : "+m" (v->counter) :: "memory"); | ||
1201 | } | ||
1202 | |||
1203 | /** | ||
1204 | @@ -101,7 +101,7 @@ static __always_inline void atomic_inc(atomic_t *v) | ||
1205 | static __always_inline void atomic_dec(atomic_t *v) | ||
1206 | { | ||
1207 | asm volatile(LOCK_PREFIX "decl %0" | ||
1208 | - : "+m" (v->counter)); | ||
1209 | + : "+m" (v->counter) :: "memory"); | ||
1210 | } | ||
1211 | |||
1212 | /** | ||
1213 | diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h | ||
1214 | index 89ed2f6ae2f7..a3248402c36b 100644 | ||
1215 | --- a/arch/x86/include/asm/atomic64_64.h | ||
1216 | +++ b/arch/x86/include/asm/atomic64_64.h | ||
1217 | @@ -44,7 +44,7 @@ static __always_inline void atomic64_add(long i, atomic64_t *v) | ||
1218 | { | ||
1219 | asm volatile(LOCK_PREFIX "addq %1,%0" | ||
1220 | : "=m" (v->counter) | ||
1221 | - : "er" (i), "m" (v->counter)); | ||
1222 | + : "er" (i), "m" (v->counter) : "memory"); | ||
1223 | } | ||
1224 | |||
1225 | /** | ||
1226 | @@ -58,7 +58,7 @@ static inline void atomic64_sub(long i, atomic64_t *v) | ||
1227 | { | ||
1228 | asm volatile(LOCK_PREFIX "subq %1,%0" | ||
1229 | : "=m" (v->counter) | ||
1230 | - : "er" (i), "m" (v->counter)); | ||
1231 | + : "er" (i), "m" (v->counter) : "memory"); | ||
1232 | } | ||
1233 | |||
1234 | /** | ||
1235 | @@ -85,7 +85,7 @@ static __always_inline void atomic64_inc(atomic64_t *v) | ||
1236 | { | ||
1237 | asm volatile(LOCK_PREFIX "incq %0" | ||
1238 | : "=m" (v->counter) | ||
1239 | - : "m" (v->counter)); | ||
1240 | + : "m" (v->counter) : "memory"); | ||
1241 | } | ||
1242 | |||
1243 | /** | ||
1244 | @@ -98,7 +98,7 @@ static __always_inline void atomic64_dec(atomic64_t *v) | ||
1245 | { | ||
1246 | asm volatile(LOCK_PREFIX "decq %0" | ||
1247 | : "=m" (v->counter) | ||
1248 | - : "m" (v->counter)); | ||
1249 | + : "m" (v->counter) : "memory"); | ||
1250 | } | ||
1251 | |||
1252 | /** | ||
1253 | diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h | ||
1254 | index eb53c2c78a1f..a0f450b21d67 100644 | ||
1255 | --- a/arch/x86/include/asm/barrier.h | ||
1256 | +++ b/arch/x86/include/asm/barrier.h | ||
1257 | @@ -105,8 +105,8 @@ do { \ | ||
1258 | #endif | ||
1259 | |||
1260 | /* Atomic operations are already serializing on x86 */ | ||
1261 | -#define __smp_mb__before_atomic() barrier() | ||
1262 | -#define __smp_mb__after_atomic() barrier() | ||
1263 | +#define __smp_mb__before_atomic() do { } while (0) | ||
1264 | +#define __smp_mb__after_atomic() do { } while (0) | ||
1265 | |||
1266 | #include <asm-generic/barrier.h> | ||
1267 | |||
1268 | diff --git a/arch/x86/include/asm/insn.h b/arch/x86/include/asm/insn.h | ||
1269 | index b3e32b010ab1..c2c01f84df75 100644 | ||
1270 | --- a/arch/x86/include/asm/insn.h | ||
1271 | +++ b/arch/x86/include/asm/insn.h | ||
1272 | @@ -208,4 +208,22 @@ static inline int insn_offset_immediate(struct insn *insn) | ||
1273 | return insn_offset_displacement(insn) + insn->displacement.nbytes; | ||
1274 | } | ||
1275 | |||
1276 | +#define POP_SS_OPCODE 0x1f | ||
1277 | +#define MOV_SREG_OPCODE 0x8e | ||
1278 | + | ||
1279 | +/* | ||
1280 | + * Intel SDM Vol.3A 6.8.3 states; | ||
1281 | + * "Any single-step trap that would be delivered following the MOV to SS | ||
1282 | + * instruction or POP to SS instruction (because EFLAGS.TF is 1) is | ||
1283 | + * suppressed." | ||
1284 | + * This function returns true if @insn is MOV SS or POP SS. On these | ||
1285 | + * instructions, single stepping is suppressed. | ||
1286 | + */ | ||
1287 | +static inline int insn_masking_exception(struct insn *insn) | ||
1288 | +{ | ||
1289 | + return insn->opcode.bytes[0] == POP_SS_OPCODE || | ||
1290 | + (insn->opcode.bytes[0] == MOV_SREG_OPCODE && | ||
1291 | + X86_MODRM_REG(insn->modrm.bytes[0]) == 2); | ||
1292 | +} | ||
1293 | + | ||
1294 | #endif /* _ASM_X86_INSN_H */ | ||
1295 | diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h | ||
1296 | index 282630e4c6ea..1624a7ffa95d 100644 | ||
1297 | --- a/arch/x86/include/asm/kexec.h | ||
1298 | +++ b/arch/x86/include/asm/kexec.h | ||
1299 | @@ -66,7 +66,7 @@ struct kimage; | ||
1300 | |||
1301 | /* Memory to backup during crash kdump */ | ||
1302 | #define KEXEC_BACKUP_SRC_START (0UL) | ||
1303 | -#define KEXEC_BACKUP_SRC_END (640 * 1024UL) /* 640K */ | ||
1304 | +#define KEXEC_BACKUP_SRC_END (640 * 1024UL - 1) /* 640K */ | ||
1305 | |||
1306 | /* | ||
1307 | * CPU does not save ss and sp on stack if execution is already | ||
1308 | diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c | ||
1309 | index 311d0fad17e6..a4f6e0ec4ba0 100644 | ||
1310 | --- a/arch/x86/kernel/cpu/cyrix.c | ||
1311 | +++ b/arch/x86/kernel/cpu/cyrix.c | ||
1312 | @@ -434,7 +434,7 @@ static void cyrix_identify(struct cpuinfo_x86 *c) | ||
1313 | /* enable MAPEN */ | ||
1314 | setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); | ||
1315 | /* enable cpuid */ | ||
1316 | - setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x80); | ||
1317 | + setCx86(CX86_CCR4, getCx86(CX86_CCR4) | 0x80); | ||
1318 | /* disable MAPEN */ | ||
1319 | setCx86(CX86_CCR3, ccr3); | ||
1320 | local_irq_restore(flags); | ||
1321 | diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c | ||
1322 | index 3f3cfeca1083..dcd6df5943d6 100644 | ||
1323 | --- a/arch/x86/kernel/kprobes/core.c | ||
1324 | +++ b/arch/x86/kernel/kprobes/core.c | ||
1325 | @@ -376,6 +376,10 @@ int __copy_instruction(u8 *dest, u8 *src) | ||
1326 | return 0; | ||
1327 | memcpy(dest, insn.kaddr, length); | ||
1328 | |||
1329 | + /* We should not singlestep on the exception masking instructions */ | ||
1330 | + if (insn_masking_exception(&insn)) | ||
1331 | + return 0; | ||
1332 | + | ||
1333 | #ifdef CONFIG_X86_64 | ||
1334 | if (insn_rip_relative(&insn)) { | ||
1335 | s64 newdisp; | ||
1336 | diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c | ||
1337 | index e35466afe989..73391c1bd2a9 100644 | ||
1338 | --- a/arch/x86/kernel/uprobes.c | ||
1339 | +++ b/arch/x86/kernel/uprobes.c | ||
1340 | @@ -296,6 +296,10 @@ static int uprobe_init_insn(struct arch_uprobe *auprobe, struct insn *insn, bool | ||
1341 | if (is_prefix_bad(insn)) | ||
1342 | return -ENOTSUPP; | ||
1343 | |||
1344 | + /* We should not singlestep on the exception masking instructions */ | ||
1345 | + if (insn_masking_exception(insn)) | ||
1346 | + return -ENOTSUPP; | ||
1347 | + | ||
1348 | if (x86_64) | ||
1349 | good_insns = good_insns_64; | ||
1350 | else | ||
1351 | @@ -983,7 +987,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs | ||
1352 | pr_err("uprobe: return address clobbered: pid=%d, %%sp=%#lx, " | ||
1353 | "%%ip=%#lx\n", current->pid, regs->sp, regs->ip); | ||
1354 | |||
1355 | - force_sig_info(SIGSEGV, SEND_SIG_FORCED, current); | ||
1356 | + force_sig(SIGSEGV, current); | ||
1357 | } | ||
1358 | |||
1359 | return -1; | ||
1360 | diff --git a/crypto/rsa-pkcs1pad.c b/crypto/rsa-pkcs1pad.c | ||
1361 | index 7830d304dff6..d58224d80867 100644 | ||
1362 | --- a/crypto/rsa-pkcs1pad.c | ||
1363 | +++ b/crypto/rsa-pkcs1pad.c | ||
1364 | @@ -267,15 +267,6 @@ static int pkcs1pad_encrypt(struct akcipher_request *req) | ||
1365 | pkcs1pad_sg_set_buf(req_ctx->in_sg, req_ctx->in_buf, | ||
1366 | ctx->key_size - 1 - req->src_len, req->src); | ||
1367 | |||
1368 | - req_ctx->out_buf = kmalloc(ctx->key_size, GFP_KERNEL); | ||
1369 | - if (!req_ctx->out_buf) { | ||
1370 | - kfree(req_ctx->in_buf); | ||
1371 | - return -ENOMEM; | ||
1372 | - } | ||
1373 | - | ||
1374 | - pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf, | ||
1375 | - ctx->key_size, NULL); | ||
1376 | - | ||
1377 | akcipher_request_set_tfm(&req_ctx->child_req, ctx->child); | ||
1378 | akcipher_request_set_callback(&req_ctx->child_req, req->base.flags, | ||
1379 | pkcs1pad_encrypt_sign_complete_cb, req); | ||
1380 | diff --git a/drivers/acpi/acpica/acevents.h b/drivers/acpi/acpica/acevents.h | ||
1381 | index 92fa47c6498c..20fd17aaa918 100644 | ||
1382 | --- a/drivers/acpi/acpica/acevents.h | ||
1383 | +++ b/drivers/acpi/acpica/acevents.h | ||
1384 | @@ -247,6 +247,8 @@ acpi_status | ||
1385 | acpi_ev_initialize_region(union acpi_operand_object *region_obj, | ||
1386 | u8 acpi_ns_locked); | ||
1387 | |||
1388 | +u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); | ||
1389 | + | ||
1390 | /* | ||
1391 | * evsci - SCI (System Control Interrupt) handling/dispatch | ||
1392 | */ | ||
1393 | diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h | ||
1394 | index dff1207a6078..219bc576d127 100644 | ||
1395 | --- a/drivers/acpi/acpica/aclocal.h | ||
1396 | +++ b/drivers/acpi/acpica/aclocal.h | ||
1397 | @@ -428,9 +428,9 @@ struct acpi_simple_repair_info { | ||
1398 | /* Info for running the _REG methods */ | ||
1399 | |||
1400 | struct acpi_reg_walk_info { | ||
1401 | - acpi_adr_space_type space_id; | ||
1402 | u32 function; | ||
1403 | u32 reg_run_count; | ||
1404 | + acpi_adr_space_type space_id; | ||
1405 | }; | ||
1406 | |||
1407 | /***************************************************************************** | ||
1408 | diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c | ||
1409 | index 4c6f79514040..9cb60fdc77e5 100644 | ||
1410 | --- a/drivers/acpi/acpica/evregion.c | ||
1411 | +++ b/drivers/acpi/acpica/evregion.c | ||
1412 | @@ -677,6 +677,19 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, | ||
1413 | |||
1414 | ACPI_FUNCTION_TRACE(ev_execute_reg_methods); | ||
1415 | |||
1416 | + /* | ||
1417 | + * These address spaces do not need a call to _REG, since the ACPI | ||
1418 | + * specification defines them as: "must always be accessible". Since | ||
1419 | + * they never change state (never become unavailable), no need to ever | ||
1420 | + * call _REG on them. Also, a data_table is not a "real" address space, | ||
1421 | + * so do not call _REG. September 2018. | ||
1422 | + */ | ||
1423 | + if ((space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) || | ||
1424 | + (space_id == ACPI_ADR_SPACE_SYSTEM_IO) || | ||
1425 | + (space_id == ACPI_ADR_SPACE_DATA_TABLE)) { | ||
1426 | + return_VOID; | ||
1427 | + } | ||
1428 | + | ||
1429 | info.space_id = space_id; | ||
1430 | info.function = function; | ||
1431 | info.reg_run_count = 0; | ||
1432 | @@ -738,8 +751,8 @@ acpi_ev_reg_run(acpi_handle obj_handle, | ||
1433 | } | ||
1434 | |||
1435 | /* | ||
1436 | - * We only care about regions.and objects that are allowed to have address | ||
1437 | - * space handlers | ||
1438 | + * We only care about regions and objects that are allowed to have | ||
1439 | + * address space handlers | ||
1440 | */ | ||
1441 | if ((node->type != ACPI_TYPE_REGION) && (node != acpi_gbl_root_node)) { | ||
1442 | return (AE_OK); | ||
1443 | diff --git a/drivers/acpi/acpica/evrgnini.c b/drivers/acpi/acpica/evrgnini.c | ||
1444 | index 75ddd160a716..c8646c397786 100644 | ||
1445 | --- a/drivers/acpi/acpica/evrgnini.c | ||
1446 | +++ b/drivers/acpi/acpica/evrgnini.c | ||
1447 | @@ -50,9 +50,6 @@ | ||
1448 | #define _COMPONENT ACPI_EVENTS | ||
1449 | ACPI_MODULE_NAME("evrgnini") | ||
1450 | |||
1451 | -/* Local prototypes */ | ||
1452 | -static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); | ||
1453 | - | ||
1454 | /******************************************************************************* | ||
1455 | * | ||
1456 | * FUNCTION: acpi_ev_system_memory_region_setup | ||
1457 | @@ -67,7 +64,6 @@ static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); | ||
1458 | * DESCRIPTION: Setup a system_memory operation region | ||
1459 | * | ||
1460 | ******************************************************************************/ | ||
1461 | - | ||
1462 | acpi_status | ||
1463 | acpi_ev_system_memory_region_setup(acpi_handle handle, | ||
1464 | u32 function, | ||
1465 | @@ -347,7 +343,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle, | ||
1466 | * | ||
1467 | ******************************************************************************/ | ||
1468 | |||
1469 | -static u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node) | ||
1470 | +u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node) | ||
1471 | { | ||
1472 | acpi_status status; | ||
1473 | struct acpi_pnp_device_id *hid; | ||
1474 | diff --git a/drivers/acpi/acpica/evxfregn.c b/drivers/acpi/acpica/evxfregn.c | ||
1475 | index d2743067126a..f87d59a05c68 100644 | ||
1476 | --- a/drivers/acpi/acpica/evxfregn.c | ||
1477 | +++ b/drivers/acpi/acpica/evxfregn.c | ||
1478 | @@ -227,7 +227,6 @@ acpi_remove_address_space_handler(acpi_handle device, | ||
1479 | */ | ||
1480 | region_obj = | ||
1481 | handler_obj->address_space.region_list; | ||
1482 | - | ||
1483 | } | ||
1484 | |||
1485 | /* Remove this Handler object from the list */ | ||
1486 | diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c | ||
1487 | index 416953a42510..b9fade7a3bcf 100644 | ||
1488 | --- a/drivers/acpi/osl.c | ||
1489 | +++ b/drivers/acpi/osl.c | ||
1490 | @@ -1126,6 +1126,7 @@ void acpi_os_wait_events_complete(void) | ||
1491 | flush_workqueue(kacpid_wq); | ||
1492 | flush_workqueue(kacpi_notify_wq); | ||
1493 | } | ||
1494 | +EXPORT_SYMBOL(acpi_os_wait_events_complete); | ||
1495 | |||
1496 | struct acpi_hp_work { | ||
1497 | struct work_struct work; | ||
1498 | diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c | ||
1499 | index b66815f35be6..317ecc2e5757 100644 | ||
1500 | --- a/drivers/acpi/pci_root.c | ||
1501 | +++ b/drivers/acpi/pci_root.c | ||
1502 | @@ -454,8 +454,9 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm) | ||
1503 | decode_osc_support(root, "OS supports", support); | ||
1504 | status = acpi_pci_osc_support(root, support); | ||
1505 | if (ACPI_FAILURE(status)) { | ||
1506 | - dev_info(&device->dev, "_OSC failed (%s); disabling ASPM\n", | ||
1507 | - acpi_format_exception(status)); | ||
1508 | + dev_info(&device->dev, "_OSC failed (%s)%s\n", | ||
1509 | + acpi_format_exception(status), | ||
1510 | + pcie_aspm_support_enabled() ? "; disabling ASPM" : ""); | ||
1511 | *no_aspm = 1; | ||
1512 | return; | ||
1513 | } | ||
1514 | diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c | ||
1515 | index 7a3431018e0a..5008ead4609a 100644 | ||
1516 | --- a/drivers/acpi/sbshc.c | ||
1517 | +++ b/drivers/acpi/sbshc.c | ||
1518 | @@ -196,6 +196,7 @@ int acpi_smbus_unregister_callback(struct acpi_smb_hc *hc) | ||
1519 | hc->callback = NULL; | ||
1520 | hc->context = NULL; | ||
1521 | mutex_unlock(&hc->lock); | ||
1522 | + acpi_os_wait_events_complete(); | ||
1523 | return 0; | ||
1524 | } | ||
1525 | |||
1526 | @@ -292,6 +293,7 @@ static int acpi_smbus_hc_remove(struct acpi_device *device) | ||
1527 | |||
1528 | hc = acpi_driver_data(device); | ||
1529 | acpi_ec_remove_query_handler(hc->ec, hc->query_bit); | ||
1530 | + acpi_os_wait_events_complete(); | ||
1531 | kfree(hc); | ||
1532 | device->driver_data = NULL; | ||
1533 | return 0; | ||
1534 | diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig | ||
1535 | index 5d16fc4fa46c..a8d4f4b5a77e 100644 | ||
1536 | --- a/drivers/ata/Kconfig | ||
1537 | +++ b/drivers/ata/Kconfig | ||
1538 | @@ -100,7 +100,8 @@ config SATA_AHCI_PLATFORM | ||
1539 | |||
1540 | config AHCI_BRCM | ||
1541 | tristate "Broadcom AHCI SATA support" | ||
1542 | - depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_NSP | ||
1543 | + depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_NSP || \ | ||
1544 | + ARCH_BCM_63XX | ||
1545 | help | ||
1546 | This option enables support for the AHCI SATA3 controller found on | ||
1547 | Broadcom SoC's. | ||
1548 | diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c | ||
1549 | index a3d60ccafd9a..f5eb102a2cf7 100644 | ||
1550 | --- a/drivers/ata/libata-scsi.c | ||
1551 | +++ b/drivers/ata/libata-scsi.c | ||
1552 | @@ -1734,6 +1734,21 @@ nothing_to_do: | ||
1553 | return 1; | ||
1554 | } | ||
1555 | |||
1556 | +static bool ata_check_nblocks(struct scsi_cmnd *scmd, u32 n_blocks) | ||
1557 | +{ | ||
1558 | + struct request *rq = scmd->request; | ||
1559 | + u32 req_blocks; | ||
1560 | + | ||
1561 | + if (!blk_rq_is_passthrough(rq)) | ||
1562 | + return true; | ||
1563 | + | ||
1564 | + req_blocks = blk_rq_bytes(rq) / scmd->device->sector_size; | ||
1565 | + if (n_blocks > req_blocks) | ||
1566 | + return false; | ||
1567 | + | ||
1568 | + return true; | ||
1569 | +} | ||
1570 | + | ||
1571 | /** | ||
1572 | * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one | ||
1573 | * @qc: Storage for translated ATA taskfile | ||
1574 | @@ -1776,6 +1791,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc) | ||
1575 | scsi_10_lba_len(cdb, &block, &n_block); | ||
1576 | if (cdb[1] & (1 << 3)) | ||
1577 | tf_flags |= ATA_TFLAG_FUA; | ||
1578 | + if (!ata_check_nblocks(scmd, n_block)) | ||
1579 | + goto invalid_fld; | ||
1580 | break; | ||
1581 | case READ_6: | ||
1582 | case WRITE_6: | ||
1583 | @@ -1790,6 +1807,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc) | ||
1584 | */ | ||
1585 | if (!n_block) | ||
1586 | n_block = 256; | ||
1587 | + if (!ata_check_nblocks(scmd, n_block)) | ||
1588 | + goto invalid_fld; | ||
1589 | break; | ||
1590 | case READ_16: | ||
1591 | case WRITE_16: | ||
1592 | @@ -1800,6 +1819,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc) | ||
1593 | scsi_16_lba_len(cdb, &block, &n_block); | ||
1594 | if (cdb[1] & (1 << 3)) | ||
1595 | tf_flags |= ATA_TFLAG_FUA; | ||
1596 | + if (!ata_check_nblocks(scmd, n_block)) | ||
1597 | + goto invalid_fld; | ||
1598 | break; | ||
1599 | default: | ||
1600 | DPRINTK("no-byte command\n"); | ||
1601 | diff --git a/drivers/ata/pata_ep93xx.c b/drivers/ata/pata_ep93xx.c | ||
1602 | index bd6b089c67a3..634c814cbeda 100644 | ||
1603 | --- a/drivers/ata/pata_ep93xx.c | ||
1604 | +++ b/drivers/ata/pata_ep93xx.c | ||
1605 | @@ -659,7 +659,7 @@ static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) | ||
1606 | * start of new transfer. | ||
1607 | */ | ||
1608 | drv_data->dma_rx_data.port = EP93XX_DMA_IDE; | ||
1609 | - drv_data->dma_rx_data.direction = DMA_FROM_DEVICE; | ||
1610 | + drv_data->dma_rx_data.direction = DMA_DEV_TO_MEM; | ||
1611 | drv_data->dma_rx_data.name = "ep93xx-pata-rx"; | ||
1612 | drv_data->dma_rx_channel = dma_request_channel(mask, | ||
1613 | ep93xx_pata_dma_filter, &drv_data->dma_rx_data); | ||
1614 | @@ -667,7 +667,7 @@ static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) | ||
1615 | return; | ||
1616 | |||
1617 | drv_data->dma_tx_data.port = EP93XX_DMA_IDE; | ||
1618 | - drv_data->dma_tx_data.direction = DMA_TO_DEVICE; | ||
1619 | + drv_data->dma_tx_data.direction = DMA_MEM_TO_DEV; | ||
1620 | drv_data->dma_tx_data.name = "ep93xx-pata-tx"; | ||
1621 | drv_data->dma_tx_channel = dma_request_channel(mask, | ||
1622 | ep93xx_pata_dma_filter, &drv_data->dma_tx_data); | ||
1623 | @@ -678,7 +678,7 @@ static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) | ||
1624 | |||
1625 | /* Configure receive channel direction and source address */ | ||
1626 | memset(&conf, 0, sizeof(conf)); | ||
1627 | - conf.direction = DMA_FROM_DEVICE; | ||
1628 | + conf.direction = DMA_DEV_TO_MEM; | ||
1629 | conf.src_addr = drv_data->udma_in_phys; | ||
1630 | conf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; | ||
1631 | if (dmaengine_slave_config(drv_data->dma_rx_channel, &conf)) { | ||
1632 | @@ -689,7 +689,7 @@ static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) | ||
1633 | |||
1634 | /* Configure transmit channel direction and destination address */ | ||
1635 | memset(&conf, 0, sizeof(conf)); | ||
1636 | - conf.direction = DMA_TO_DEVICE; | ||
1637 | + conf.direction = DMA_MEM_TO_DEV; | ||
1638 | conf.dst_addr = drv_data->udma_out_phys; | ||
1639 | conf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; | ||
1640 | if (dmaengine_slave_config(drv_data->dma_tx_channel, &conf)) { | ||
1641 | diff --git a/drivers/base/component.c b/drivers/base/component.c | ||
1642 | index 89b032f2ffd2..08da6160e94d 100644 | ||
1643 | --- a/drivers/base/component.c | ||
1644 | +++ b/drivers/base/component.c | ||
1645 | @@ -461,9 +461,9 @@ int component_bind_all(struct device *master_dev, void *data) | ||
1646 | } | ||
1647 | |||
1648 | if (ret != 0) { | ||
1649 | - for (; i--; ) | ||
1650 | - if (!master->match->compare[i].duplicate) { | ||
1651 | - c = master->match->compare[i].component; | ||
1652 | + for (; i > 0; i--) | ||
1653 | + if (!master->match->compare[i - 1].duplicate) { | ||
1654 | + c = master->match->compare[i - 1].component; | ||
1655 | component_unbind(c, master, data); | ||
1656 | } | ||
1657 | } | ||
1658 | diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c | ||
1659 | index 8bf7e805fd34..1271315b0c25 100644 | ||
1660 | --- a/drivers/clk/samsung/clk-cpu.c | ||
1661 | +++ b/drivers/clk/samsung/clk-cpu.c | ||
1662 | @@ -152,7 +152,7 @@ static int exynos_cpuclk_pre_rate_change(struct clk_notifier_data *ndata, | ||
1663 | struct exynos_cpuclk *cpuclk, void __iomem *base) | ||
1664 | { | ||
1665 | const struct exynos_cpuclk_cfg_data *cfg_data = cpuclk->cfg; | ||
1666 | - unsigned long alt_prate = clk_get_rate(cpuclk->alt_parent); | ||
1667 | + unsigned long alt_prate = clk_hw_get_rate(cpuclk->alt_parent); | ||
1668 | unsigned long alt_div = 0, alt_div_mask = DIV_MASK; | ||
1669 | unsigned long div0, div1 = 0, mux_reg; | ||
1670 | unsigned long flags; | ||
1671 | @@ -280,7 +280,7 @@ static int exynos5433_cpuclk_pre_rate_change(struct clk_notifier_data *ndata, | ||
1672 | struct exynos_cpuclk *cpuclk, void __iomem *base) | ||
1673 | { | ||
1674 | const struct exynos_cpuclk_cfg_data *cfg_data = cpuclk->cfg; | ||
1675 | - unsigned long alt_prate = clk_get_rate(cpuclk->alt_parent); | ||
1676 | + unsigned long alt_prate = clk_hw_get_rate(cpuclk->alt_parent); | ||
1677 | unsigned long alt_div = 0, alt_div_mask = DIV_MASK; | ||
1678 | unsigned long div0, div1 = 0, mux_reg; | ||
1679 | unsigned long flags; | ||
1680 | @@ -432,7 +432,7 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx, | ||
1681 | else | ||
1682 | cpuclk->clk_nb.notifier_call = exynos_cpuclk_notifier_cb; | ||
1683 | |||
1684 | - cpuclk->alt_parent = __clk_lookup(alt_parent); | ||
1685 | + cpuclk->alt_parent = __clk_get_hw(__clk_lookup(alt_parent)); | ||
1686 | if (!cpuclk->alt_parent) { | ||
1687 | pr_err("%s: could not lookup alternate parent %s\n", | ||
1688 | __func__, alt_parent); | ||
1689 | diff --git a/drivers/clk/samsung/clk-cpu.h b/drivers/clk/samsung/clk-cpu.h | ||
1690 | index d4b6b517fe1b..bd38c6aa3897 100644 | ||
1691 | --- a/drivers/clk/samsung/clk-cpu.h | ||
1692 | +++ b/drivers/clk/samsung/clk-cpu.h | ||
1693 | @@ -49,7 +49,7 @@ struct exynos_cpuclk_cfg_data { | ||
1694 | */ | ||
1695 | struct exynos_cpuclk { | ||
1696 | struct clk_hw hw; | ||
1697 | - struct clk *alt_parent; | ||
1698 | + struct clk_hw *alt_parent; | ||
1699 | void __iomem *ctrl_base; | ||
1700 | spinlock_t *lock; | ||
1701 | const struct exynos_cpuclk_cfg_data *cfg; | ||
1702 | diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c | ||
1703 | index decaed448ebb..b4bd34429cc1 100644 | ||
1704 | --- a/drivers/crypto/mxs-dcp.c | ||
1705 | +++ b/drivers/crypto/mxs-dcp.c | ||
1706 | @@ -28,9 +28,24 @@ | ||
1707 | |||
1708 | #define DCP_MAX_CHANS 4 | ||
1709 | #define DCP_BUF_SZ PAGE_SIZE | ||
1710 | +#define DCP_SHA_PAY_SZ 64 | ||
1711 | |||
1712 | #define DCP_ALIGNMENT 64 | ||
1713 | |||
1714 | +/* | ||
1715 | + * Null hashes to align with hw behavior on imx6sl and ull | ||
1716 | + * these are flipped for consistency with hw output | ||
1717 | + */ | ||
1718 | +const uint8_t sha1_null_hash[] = | ||
1719 | + "\x09\x07\xd8\xaf\x90\x18\x60\x95\xef\xbf" | ||
1720 | + "\x55\x32\x0d\x4b\x6b\x5e\xee\xa3\x39\xda"; | ||
1721 | + | ||
1722 | +const uint8_t sha256_null_hash[] = | ||
1723 | + "\x55\xb8\x52\x78\x1b\x99\x95\xa4" | ||
1724 | + "\x4c\x93\x9b\x64\xe4\x41\xae\x27" | ||
1725 | + "\x24\xb9\x6f\x99\xc8\xf4\xfb\x9a" | ||
1726 | + "\x14\x1c\xfc\x98\x42\xc4\xb0\xe3"; | ||
1727 | + | ||
1728 | /* DCP DMA descriptor. */ | ||
1729 | struct dcp_dma_desc { | ||
1730 | uint32_t next_cmd_addr; | ||
1731 | @@ -48,6 +63,7 @@ struct dcp_coherent_block { | ||
1732 | uint8_t aes_in_buf[DCP_BUF_SZ]; | ||
1733 | uint8_t aes_out_buf[DCP_BUF_SZ]; | ||
1734 | uint8_t sha_in_buf[DCP_BUF_SZ]; | ||
1735 | + uint8_t sha_out_buf[DCP_SHA_PAY_SZ]; | ||
1736 | |||
1737 | uint8_t aes_key[2 * AES_KEYSIZE_128]; | ||
1738 | |||
1739 | @@ -209,6 +225,12 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, | ||
1740 | dma_addr_t dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, | ||
1741 | DCP_BUF_SZ, DMA_FROM_DEVICE); | ||
1742 | |||
1743 | + if (actx->fill % AES_BLOCK_SIZE) { | ||
1744 | + dev_err(sdcp->dev, "Invalid block size!\n"); | ||
1745 | + ret = -EINVAL; | ||
1746 | + goto aes_done_run; | ||
1747 | + } | ||
1748 | + | ||
1749 | /* Fill in the DMA descriptor. */ | ||
1750 | desc->control0 = MXS_DCP_CONTROL0_DECR_SEMAPHORE | | ||
1751 | MXS_DCP_CONTROL0_INTERRUPT | | ||
1752 | @@ -238,6 +260,7 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, | ||
1753 | |||
1754 | ret = mxs_dcp_start_dma(actx); | ||
1755 | |||
1756 | +aes_done_run: | ||
1757 | dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128, | ||
1758 | DMA_TO_DEVICE); | ||
1759 | dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); | ||
1760 | @@ -264,13 +287,15 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) | ||
1761 | |||
1762 | uint8_t *out_tmp, *src_buf, *dst_buf = NULL; | ||
1763 | uint32_t dst_off = 0; | ||
1764 | + uint32_t last_out_len = 0; | ||
1765 | |||
1766 | uint8_t *key = sdcp->coh->aes_key; | ||
1767 | |||
1768 | int ret = 0; | ||
1769 | int split = 0; | ||
1770 | - unsigned int i, len, clen, rem = 0; | ||
1771 | + unsigned int i, len, clen, rem = 0, tlen = 0; | ||
1772 | int init = 0; | ||
1773 | + bool limit_hit = false; | ||
1774 | |||
1775 | actx->fill = 0; | ||
1776 | |||
1777 | @@ -289,6 +314,11 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) | ||
1778 | for_each_sg(req->src, src, nents, i) { | ||
1779 | src_buf = sg_virt(src); | ||
1780 | len = sg_dma_len(src); | ||
1781 | + tlen += len; | ||
1782 | + limit_hit = tlen > req->nbytes; | ||
1783 | + | ||
1784 | + if (limit_hit) | ||
1785 | + len = req->nbytes - (tlen - len); | ||
1786 | |||
1787 | do { | ||
1788 | if (actx->fill + len > out_off) | ||
1789 | @@ -305,13 +335,15 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) | ||
1790 | * If we filled the buffer or this is the last SG, | ||
1791 | * submit the buffer. | ||
1792 | */ | ||
1793 | - if (actx->fill == out_off || sg_is_last(src)) { | ||
1794 | + if (actx->fill == out_off || sg_is_last(src) || | ||
1795 | + limit_hit) { | ||
1796 | ret = mxs_dcp_run_aes(actx, req, init); | ||
1797 | if (ret) | ||
1798 | return ret; | ||
1799 | init = 0; | ||
1800 | |||
1801 | out_tmp = out_buf; | ||
1802 | + last_out_len = actx->fill; | ||
1803 | while (dst && actx->fill) { | ||
1804 | if (!split) { | ||
1805 | dst_buf = sg_virt(dst); | ||
1806 | @@ -334,6 +366,19 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) | ||
1807 | } | ||
1808 | } | ||
1809 | } while (len); | ||
1810 | + | ||
1811 | + if (limit_hit) | ||
1812 | + break; | ||
1813 | + } | ||
1814 | + | ||
1815 | + /* Copy the IV for CBC for chaining */ | ||
1816 | + if (!rctx->ecb) { | ||
1817 | + if (rctx->enc) | ||
1818 | + memcpy(req->info, out_buf+(last_out_len-AES_BLOCK_SIZE), | ||
1819 | + AES_BLOCK_SIZE); | ||
1820 | + else | ||
1821 | + memcpy(req->info, in_buf+(last_out_len-AES_BLOCK_SIZE), | ||
1822 | + AES_BLOCK_SIZE); | ||
1823 | } | ||
1824 | |||
1825 | return ret; | ||
1826 | @@ -513,8 +558,6 @@ static int mxs_dcp_run_sha(struct ahash_request *req) | ||
1827 | struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); | ||
1828 | struct dcp_async_ctx *actx = crypto_ahash_ctx(tfm); | ||
1829 | struct dcp_sha_req_ctx *rctx = ahash_request_ctx(req); | ||
1830 | - struct hash_alg_common *halg = crypto_hash_alg_common(tfm); | ||
1831 | - | ||
1832 | struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; | ||
1833 | |||
1834 | dma_addr_t digest_phys = 0; | ||
1835 | @@ -536,10 +579,23 @@ static int mxs_dcp_run_sha(struct ahash_request *req) | ||
1836 | desc->payload = 0; | ||
1837 | desc->status = 0; | ||
1838 | |||
1839 | + /* | ||
1840 | + * Align driver with hw behavior when generating null hashes | ||
1841 | + */ | ||
1842 | + if (rctx->init && rctx->fini && desc->size == 0) { | ||
1843 | + struct hash_alg_common *halg = crypto_hash_alg_common(tfm); | ||
1844 | + const uint8_t *sha_buf = | ||
1845 | + (actx->alg == MXS_DCP_CONTROL1_HASH_SELECT_SHA1) ? | ||
1846 | + sha1_null_hash : sha256_null_hash; | ||
1847 | + memcpy(sdcp->coh->sha_out_buf, sha_buf, halg->digestsize); | ||
1848 | + ret = 0; | ||
1849 | + goto done_run; | ||
1850 | + } | ||
1851 | + | ||
1852 | /* Set HASH_TERM bit for last transfer block. */ | ||
1853 | if (rctx->fini) { | ||
1854 | - digest_phys = dma_map_single(sdcp->dev, req->result, | ||
1855 | - halg->digestsize, DMA_FROM_DEVICE); | ||
1856 | + digest_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_out_buf, | ||
1857 | + DCP_SHA_PAY_SZ, DMA_FROM_DEVICE); | ||
1858 | desc->control0 |= MXS_DCP_CONTROL0_HASH_TERM; | ||
1859 | desc->payload = digest_phys; | ||
1860 | } | ||
1861 | @@ -547,9 +603,10 @@ static int mxs_dcp_run_sha(struct ahash_request *req) | ||
1862 | ret = mxs_dcp_start_dma(actx); | ||
1863 | |||
1864 | if (rctx->fini) | ||
1865 | - dma_unmap_single(sdcp->dev, digest_phys, halg->digestsize, | ||
1866 | + dma_unmap_single(sdcp->dev, digest_phys, DCP_SHA_PAY_SZ, | ||
1867 | DMA_FROM_DEVICE); | ||
1868 | |||
1869 | +done_run: | ||
1870 | dma_unmap_single(sdcp->dev, buf_phys, DCP_BUF_SZ, DMA_TO_DEVICE); | ||
1871 | |||
1872 | return ret; | ||
1873 | @@ -567,6 +624,7 @@ static int dcp_sha_req_to_buf(struct crypto_async_request *arq) | ||
1874 | const int nents = sg_nents(req->src); | ||
1875 | |||
1876 | uint8_t *in_buf = sdcp->coh->sha_in_buf; | ||
1877 | + uint8_t *out_buf = sdcp->coh->sha_out_buf; | ||
1878 | |||
1879 | uint8_t *src_buf; | ||
1880 | |||
1881 | @@ -621,11 +679,9 @@ static int dcp_sha_req_to_buf(struct crypto_async_request *arq) | ||
1882 | |||
1883 | actx->fill = 0; | ||
1884 | |||
1885 | - /* For some reason, the result is flipped. */ | ||
1886 | - for (i = 0; i < halg->digestsize / 2; i++) { | ||
1887 | - swap(req->result[i], | ||
1888 | - req->result[halg->digestsize - i - 1]); | ||
1889 | - } | ||
1890 | + /* For some reason the result is flipped */ | ||
1891 | + for (i = 0; i < halg->digestsize; i++) | ||
1892 | + req->result[i] = out_buf[halg->digestsize - i - 1]; | ||
1893 | } | ||
1894 | |||
1895 | return 0; | ||
1896 | diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c | ||
1897 | index 500e4090e2fd..5a37c075ee55 100644 | ||
1898 | --- a/drivers/crypto/s5p-sss.c | ||
1899 | +++ b/drivers/crypto/s5p-sss.c | ||
1900 | @@ -298,7 +298,7 @@ static void s5p_unset_indata(struct s5p_aes_dev *dev) | ||
1901 | } | ||
1902 | |||
1903 | static int s5p_make_sg_cpy(struct s5p_aes_dev *dev, struct scatterlist *src, | ||
1904 | - struct scatterlist **dst) | ||
1905 | + struct scatterlist **dst) | ||
1906 | { | ||
1907 | void *pages; | ||
1908 | int len; | ||
1909 | @@ -510,7 +510,7 @@ static int s5p_set_indata_start(struct s5p_aes_dev *dev, | ||
1910 | } | ||
1911 | |||
1912 | static int s5p_set_outdata_start(struct s5p_aes_dev *dev, | ||
1913 | - struct ablkcipher_request *req) | ||
1914 | + struct ablkcipher_request *req) | ||
1915 | { | ||
1916 | struct scatterlist *sg; | ||
1917 | int err; | ||
1918 | diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig | ||
1919 | index 141aefbe37ec..b0f798244a89 100644 | ||
1920 | --- a/drivers/dma/Kconfig | ||
1921 | +++ b/drivers/dma/Kconfig | ||
1922 | @@ -120,7 +120,7 @@ config DMA_JZ4740 | ||
1923 | |||
1924 | config DMA_JZ4780 | ||
1925 | tristate "JZ4780 DMA support" | ||
1926 | - depends on MACH_JZ4780 || COMPILE_TEST | ||
1927 | + depends on MIPS || COMPILE_TEST | ||
1928 | select DMA_ENGINE | ||
1929 | select DMA_VIRTUAL_CHANNELS | ||
1930 | help | ||
1931 | diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c | ||
1932 | index 803cfb4523b0..aca2d6fd92d5 100644 | ||
1933 | --- a/drivers/dma/dma-jz4780.c | ||
1934 | +++ b/drivers/dma/dma-jz4780.c | ||
1935 | @@ -580,7 +580,7 @@ static enum dma_status jz4780_dma_tx_status(struct dma_chan *chan, | ||
1936 | to_jz4780_dma_desc(vdesc), 0); | ||
1937 | } else if (cookie == jzchan->desc->vdesc.tx.cookie) { | ||
1938 | txstate->residue = jz4780_dma_desc_residue(jzchan, jzchan->desc, | ||
1939 | - (jzchan->curr_hwdesc + 1) % jzchan->desc->count); | ||
1940 | + jzchan->curr_hwdesc + 1); | ||
1941 | } else | ||
1942 | txstate->residue = 0; | ||
1943 | |||
1944 | diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c | ||
1945 | index d139706f01fe..9d936584d331 100644 | ||
1946 | --- a/drivers/dma/ioat/init.c | ||
1947 | +++ b/drivers/dma/ioat/init.c | ||
1948 | @@ -129,7 +129,7 @@ static void | ||
1949 | ioat_init_channel(struct ioatdma_device *ioat_dma, | ||
1950 | struct ioatdma_chan *ioat_chan, int idx); | ||
1951 | static void ioat_intr_quirk(struct ioatdma_device *ioat_dma); | ||
1952 | -static int ioat_enumerate_channels(struct ioatdma_device *ioat_dma); | ||
1953 | +static void ioat_enumerate_channels(struct ioatdma_device *ioat_dma); | ||
1954 | static int ioat3_dma_self_test(struct ioatdma_device *ioat_dma); | ||
1955 | |||
1956 | static int ioat_dca_enabled = 1; | ||
1957 | @@ -573,7 +573,7 @@ static void ioat_dma_remove(struct ioatdma_device *ioat_dma) | ||
1958 | * ioat_enumerate_channels - find and initialize the device's channels | ||
1959 | * @ioat_dma: the ioat dma device to be enumerated | ||
1960 | */ | ||
1961 | -static int ioat_enumerate_channels(struct ioatdma_device *ioat_dma) | ||
1962 | +static void ioat_enumerate_channels(struct ioatdma_device *ioat_dma) | ||
1963 | { | ||
1964 | struct ioatdma_chan *ioat_chan; | ||
1965 | struct device *dev = &ioat_dma->pdev->dev; | ||
1966 | @@ -592,7 +592,7 @@ static int ioat_enumerate_channels(struct ioatdma_device *ioat_dma) | ||
1967 | xfercap_log = readb(ioat_dma->reg_base + IOAT_XFERCAP_OFFSET); | ||
1968 | xfercap_log &= 0x1f; /* bits [4:0] valid */ | ||
1969 | if (xfercap_log == 0) | ||
1970 | - return 0; | ||
1971 | + return; | ||
1972 | dev_dbg(dev, "%s: xfercap = %d\n", __func__, 1 << xfercap_log); | ||
1973 | |||
1974 | for (i = 0; i < dma->chancnt; i++) { | ||
1975 | @@ -609,7 +609,6 @@ static int ioat_enumerate_channels(struct ioatdma_device *ioat_dma) | ||
1976 | } | ||
1977 | } | ||
1978 | dma->chancnt = i; | ||
1979 | - return i; | ||
1980 | } | ||
1981 | |||
1982 | /** | ||
1983 | diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c | ||
1984 | index 896bafb7a532..cf6588cc3efd 100644 | ||
1985 | --- a/drivers/dma/timb_dma.c | ||
1986 | +++ b/drivers/dma/timb_dma.c | ||
1987 | @@ -545,7 +545,7 @@ static struct dma_async_tx_descriptor *td_prep_slave_sg(struct dma_chan *chan, | ||
1988 | } | ||
1989 | |||
1990 | dma_sync_single_for_device(chan2dmadev(chan), td_desc->txd.phys, | ||
1991 | - td_desc->desc_list_len, DMA_MEM_TO_DEV); | ||
1992 | + td_desc->desc_list_len, DMA_TO_DEVICE); | ||
1993 | |||
1994 | return &td_desc->txd; | ||
1995 | } | ||
1996 | diff --git a/drivers/gpio/gpio-syscon.c b/drivers/gpio/gpio-syscon.c | ||
1997 | index 537cec7583fc..cf88a0bfe99e 100644 | ||
1998 | --- a/drivers/gpio/gpio-syscon.c | ||
1999 | +++ b/drivers/gpio/gpio-syscon.c | ||
2000 | @@ -122,7 +122,7 @@ static int syscon_gpio_dir_out(struct gpio_chip *chip, unsigned offset, int val) | ||
2001 | BIT(offs % SYSCON_REG_BITS)); | ||
2002 | } | ||
2003 | |||
2004 | - priv->data->set(chip, offset, val); | ||
2005 | + chip->set(chip, offset, val); | ||
2006 | |||
2007 | return 0; | ||
2008 | } | ||
2009 | diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c | ||
2010 | index e6b49500c52a..8c9555313fc3 100644 | ||
2011 | --- a/drivers/hwmon/ina3221.c | ||
2012 | +++ b/drivers/hwmon/ina3221.c | ||
2013 | @@ -38,9 +38,9 @@ | ||
2014 | #define INA3221_WARN3 0x0c | ||
2015 | #define INA3221_MASK_ENABLE 0x0f | ||
2016 | |||
2017 | -#define INA3221_CONFIG_MODE_SHUNT BIT(1) | ||
2018 | -#define INA3221_CONFIG_MODE_BUS BIT(2) | ||
2019 | -#define INA3221_CONFIG_MODE_CONTINUOUS BIT(3) | ||
2020 | +#define INA3221_CONFIG_MODE_SHUNT BIT(0) | ||
2021 | +#define INA3221_CONFIG_MODE_BUS BIT(1) | ||
2022 | +#define INA3221_CONFIG_MODE_CONTINUOUS BIT(2) | ||
2023 | |||
2024 | #define INA3221_RSHUNT_DEFAULT 10000 | ||
2025 | |||
2026 | diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c | ||
2027 | index fb03449de2e0..aa6333620c37 100644 | ||
2028 | --- a/drivers/hwmon/pwm-fan.c | ||
2029 | +++ b/drivers/hwmon/pwm-fan.c | ||
2030 | @@ -231,8 +231,12 @@ static int pwm_fan_probe(struct platform_device *pdev) | ||
2031 | |||
2032 | ctx->pwm = devm_of_pwm_get(&pdev->dev, pdev->dev.of_node, NULL); | ||
2033 | if (IS_ERR(ctx->pwm)) { | ||
2034 | - dev_err(&pdev->dev, "Could not get PWM\n"); | ||
2035 | - return PTR_ERR(ctx->pwm); | ||
2036 | + ret = PTR_ERR(ctx->pwm); | ||
2037 | + | ||
2038 | + if (ret != -EPROBE_DEFER) | ||
2039 | + dev_err(&pdev->dev, "Could not get PWM: %d\n", ret); | ||
2040 | + | ||
2041 | + return ret; | ||
2042 | } | ||
2043 | |||
2044 | platform_set_drvdata(pdev, ctx); | ||
2045 | diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c | ||
2046 | index 44d6c29e2644..22079f886f45 100644 | ||
2047 | --- a/drivers/hwtracing/coresight/coresight-etm4x.c | ||
2048 | +++ b/drivers/hwtracing/coresight/coresight-etm4x.c | ||
2049 | @@ -35,6 +35,7 @@ | ||
2050 | #include <linux/pm_runtime.h> | ||
2051 | #include <asm/sections.h> | ||
2052 | #include <asm/local.h> | ||
2053 | +#include <asm/virt.h> | ||
2054 | |||
2055 | #include "coresight-etm4x.h" | ||
2056 | #include "coresight-etm-perf.h" | ||
2057 | @@ -615,7 +616,7 @@ static void etm4_set_default_config(struct etmv4_config *config) | ||
2058 | config->vinst_ctrl |= BIT(0); | ||
2059 | } | ||
2060 | |||
2061 | -static u64 etm4_get_access_type(struct etmv4_config *config) | ||
2062 | +static u64 etm4_get_ns_access_type(struct etmv4_config *config) | ||
2063 | { | ||
2064 | u64 access_type = 0; | ||
2065 | |||
2066 | @@ -626,17 +627,26 @@ static u64 etm4_get_access_type(struct etmv4_config *config) | ||
2067 | * Bit[13] Exception level 1 - OS | ||
2068 | * Bit[14] Exception level 2 - Hypervisor | ||
2069 | * Bit[15] Never implemented | ||
2070 | - * | ||
2071 | - * Always stay away from hypervisor mode. | ||
2072 | */ | ||
2073 | - access_type = ETM_EXLEVEL_NS_HYP; | ||
2074 | - | ||
2075 | - if (config->mode & ETM_MODE_EXCL_KERN) | ||
2076 | - access_type |= ETM_EXLEVEL_NS_OS; | ||
2077 | + if (!is_kernel_in_hyp_mode()) { | ||
2078 | + /* Stay away from hypervisor mode for non-VHE */ | ||
2079 | + access_type = ETM_EXLEVEL_NS_HYP; | ||
2080 | + if (config->mode & ETM_MODE_EXCL_KERN) | ||
2081 | + access_type |= ETM_EXLEVEL_NS_OS; | ||
2082 | + } else if (config->mode & ETM_MODE_EXCL_KERN) { | ||
2083 | + access_type = ETM_EXLEVEL_NS_HYP; | ||
2084 | + } | ||
2085 | |||
2086 | if (config->mode & ETM_MODE_EXCL_USER) | ||
2087 | access_type |= ETM_EXLEVEL_NS_APP; | ||
2088 | |||
2089 | + return access_type; | ||
2090 | +} | ||
2091 | + | ||
2092 | +static u64 etm4_get_access_type(struct etmv4_config *config) | ||
2093 | +{ | ||
2094 | + u64 access_type = etm4_get_ns_access_type(config); | ||
2095 | + | ||
2096 | /* | ||
2097 | * EXLEVEL_S, bits[11:8], don't trace anything happening | ||
2098 | * in secure state. | ||
2099 | @@ -890,20 +900,10 @@ void etm4_config_trace_mode(struct etmv4_config *config) | ||
2100 | |||
2101 | addr_acc = config->addr_acc[ETM_DEFAULT_ADDR_COMP]; | ||
2102 | /* clear default config */ | ||
2103 | - addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS); | ||
2104 | + addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS | | ||
2105 | + ETM_EXLEVEL_NS_HYP); | ||
2106 | |||
2107 | - /* | ||
2108 | - * EXLEVEL_NS, bits[15:12] | ||
2109 | - * The Exception levels are: | ||
2110 | - * Bit[12] Exception level 0 - Application | ||
2111 | - * Bit[13] Exception level 1 - OS | ||
2112 | - * Bit[14] Exception level 2 - Hypervisor | ||
2113 | - * Bit[15] Never implemented | ||
2114 | - */ | ||
2115 | - if (mode & ETM_MODE_EXCL_KERN) | ||
2116 | - addr_acc |= ETM_EXLEVEL_NS_OS; | ||
2117 | - else | ||
2118 | - addr_acc |= ETM_EXLEVEL_NS_APP; | ||
2119 | + addr_acc |= etm4_get_ns_access_type(config); | ||
2120 | |||
2121 | config->addr_acc[ETM_DEFAULT_ADDR_COMP] = addr_acc; | ||
2122 | config->addr_acc[ETM_DEFAULT_ADDR_COMP + 1] = addr_acc; | ||
2123 | diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c | ||
2124 | index d6941ea24d8d..14df4e34c21c 100644 | ||
2125 | --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c | ||
2126 | +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c | ||
2127 | @@ -425,10 +425,10 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev, | ||
2128 | case TMC_MEM_INTF_WIDTH_32BITS: | ||
2129 | case TMC_MEM_INTF_WIDTH_64BITS: | ||
2130 | case TMC_MEM_INTF_WIDTH_128BITS: | ||
2131 | - mask = GENMASK(31, 5); | ||
2132 | + mask = GENMASK(31, 4); | ||
2133 | break; | ||
2134 | case TMC_MEM_INTF_WIDTH_256BITS: | ||
2135 | - mask = GENMASK(31, 6); | ||
2136 | + mask = GENMASK(31, 5); | ||
2137 | break; | ||
2138 | } | ||
2139 | |||
2140 | diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c | ||
2141 | index 398e44a9ec45..5ffabc388630 100644 | ||
2142 | --- a/drivers/hwtracing/coresight/coresight.c | ||
2143 | +++ b/drivers/hwtracing/coresight/coresight.c | ||
2144 | @@ -132,12 +132,14 @@ static int coresight_enable_sink(struct coresight_device *csdev, u32 mode) | ||
2145 | { | ||
2146 | int ret; | ||
2147 | |||
2148 | - if (!csdev->enable) { | ||
2149 | - if (sink_ops(csdev)->enable) { | ||
2150 | - ret = sink_ops(csdev)->enable(csdev, mode); | ||
2151 | - if (ret) | ||
2152 | - return ret; | ||
2153 | - } | ||
2154 | + /* | ||
2155 | + * We need to make sure the "new" session is compatible with the | ||
2156 | + * existing "mode" of operation. | ||
2157 | + */ | ||
2158 | + if (sink_ops(csdev)->enable) { | ||
2159 | + ret = sink_ops(csdev)->enable(csdev, mode); | ||
2160 | + if (ret) | ||
2161 | + return ret; | ||
2162 | csdev->enable = true; | ||
2163 | } | ||
2164 | |||
2165 | @@ -331,8 +333,14 @@ int coresight_enable_path(struct list_head *path, u32 mode) | ||
2166 | switch (type) { | ||
2167 | case CORESIGHT_DEV_TYPE_SINK: | ||
2168 | ret = coresight_enable_sink(csdev, mode); | ||
2169 | + /* | ||
2170 | + * Sink is the first component turned on. If we | ||
2171 | + * failed to enable the sink, there are no components | ||
2172 | + * that need disabling. Disabling the path here | ||
2173 | + * would mean we could disrupt an existing session. | ||
2174 | + */ | ||
2175 | if (ret) | ||
2176 | - goto err; | ||
2177 | + goto out; | ||
2178 | break; | ||
2179 | case CORESIGHT_DEV_TYPE_SOURCE: | ||
2180 | /* sources are enabled from either sysFS or Perf */ | ||
2181 | diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig | ||
2182 | index d252276feadf..759c621a860a 100644 | ||
2183 | --- a/drivers/i2c/busses/Kconfig | ||
2184 | +++ b/drivers/i2c/busses/Kconfig | ||
2185 | @@ -397,12 +397,13 @@ config I2C_BCM_KONA | ||
2186 | If you do not need KONA I2C interface, say N. | ||
2187 | |||
2188 | config I2C_BRCMSTB | ||
2189 | - tristate "BRCM Settop I2C controller" | ||
2190 | - depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST | ||
2191 | + tristate "BRCM Settop/DSL I2C controller" | ||
2192 | + depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_63XX || \ | ||
2193 | + COMPILE_TEST | ||
2194 | default y | ||
2195 | help | ||
2196 | If you say yes to this option, support will be included for the | ||
2197 | - I2C interface on the Broadcom Settop SoCs. | ||
2198 | + I2C interface on the Broadcom Settop/DSL SoCs. | ||
2199 | |||
2200 | If you do not need I2C interface, say N. | ||
2201 | |||
2202 | diff --git a/drivers/iio/dac/mcp4922.c b/drivers/iio/dac/mcp4922.c | ||
2203 | index 3854d201a5d6..68dd0be1ac07 100644 | ||
2204 | --- a/drivers/iio/dac/mcp4922.c | ||
2205 | +++ b/drivers/iio/dac/mcp4922.c | ||
2206 | @@ -94,17 +94,22 @@ static int mcp4922_write_raw(struct iio_dev *indio_dev, | ||
2207 | long mask) | ||
2208 | { | ||
2209 | struct mcp4922_state *state = iio_priv(indio_dev); | ||
2210 | + int ret; | ||
2211 | |||
2212 | if (val2 != 0) | ||
2213 | return -EINVAL; | ||
2214 | |||
2215 | switch (mask) { | ||
2216 | case IIO_CHAN_INFO_RAW: | ||
2217 | - if (val > GENMASK(chan->scan_type.realbits-1, 0)) | ||
2218 | + if (val < 0 || val > GENMASK(chan->scan_type.realbits - 1, 0)) | ||
2219 | return -EINVAL; | ||
2220 | val <<= chan->scan_type.shift; | ||
2221 | - state->value[chan->channel] = val; | ||
2222 | - return mcp4922_spi_write(state, chan->channel, val); | ||
2223 | + | ||
2224 | + ret = mcp4922_spi_write(state, chan->channel, val); | ||
2225 | + if (!ret) | ||
2226 | + state->value[chan->channel] = val; | ||
2227 | + return ret; | ||
2228 | + | ||
2229 | default: | ||
2230 | return -EINVAL; | ||
2231 | } | ||
2232 | diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c | ||
2233 | index 717626046ee5..fbe662602f0a 100644 | ||
2234 | --- a/drivers/infiniband/hw/hfi1/pcie.c | ||
2235 | +++ b/drivers/infiniband/hw/hfi1/pcie.c | ||
2236 | @@ -377,7 +377,9 @@ int pcie_speeds(struct hfi1_devdata *dd) | ||
2237 | /* | ||
2238 | * bus->max_bus_speed is set from the bridge's linkcap Max Link Speed | ||
2239 | */ | ||
2240 | - if (parent && dd->pcidev->bus->max_bus_speed != PCIE_SPEED_8_0GT) { | ||
2241 | + if (parent && | ||
2242 | + (dd->pcidev->bus->max_bus_speed == PCIE_SPEED_2_5GT || | ||
2243 | + dd->pcidev->bus->max_bus_speed == PCIE_SPEED_5_0GT)) { | ||
2244 | dd_dev_info(dd, "Parent PCIe bridge does not support Gen3\n"); | ||
2245 | dd->link_gen3_capable = 0; | ||
2246 | } | ||
2247 | diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c | ||
2248 | index 85637696f6e9..282a726351c8 100644 | ||
2249 | --- a/drivers/infiniband/hw/i40iw/i40iw_cm.c | ||
2250 | +++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c | ||
2251 | @@ -1652,7 +1652,7 @@ static enum i40iw_status_code i40iw_add_mqh_6(struct i40iw_device *iwdev, | ||
2252 | unsigned long flags; | ||
2253 | |||
2254 | rtnl_lock(); | ||
2255 | - for_each_netdev_rcu(&init_net, ip_dev) { | ||
2256 | + for_each_netdev(&init_net, ip_dev) { | ||
2257 | if ((((rdma_vlan_dev_vlan_id(ip_dev) < I40IW_NO_VLAN) && | ||
2258 | (rdma_vlan_dev_real_dev(ip_dev) == iwdev->netdev)) || | ||
2259 | (ip_dev == iwdev->netdev)) && (ip_dev->flags & IFF_UP)) { | ||
2260 | diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c | ||
2261 | index ded76c101dde..834b06aacc2b 100644 | ||
2262 | --- a/drivers/infiniband/hw/mthca/mthca_main.c | ||
2263 | +++ b/drivers/infiniband/hw/mthca/mthca_main.c | ||
2264 | @@ -989,7 +989,8 @@ static int __mthca_init_one(struct pci_dev *pdev, int hca_type) | ||
2265 | goto err_free_dev; | ||
2266 | } | ||
2267 | |||
2268 | - if (mthca_cmd_init(mdev)) { | ||
2269 | + err = mthca_cmd_init(mdev); | ||
2270 | + if (err) { | ||
2271 | mthca_err(mdev, "Failed to init command interface, aborting.\n"); | ||
2272 | goto err_free_dev; | ||
2273 | } | ||
2274 | diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c | ||
2275 | index df15b6d7b645..b03a6206d9be 100644 | ||
2276 | --- a/drivers/infiniband/sw/rxe/rxe_comp.c | ||
2277 | +++ b/drivers/infiniband/sw/rxe/rxe_comp.c | ||
2278 | @@ -250,6 +250,17 @@ static inline enum comp_state check_ack(struct rxe_qp *qp, | ||
2279 | case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE: | ||
2280 | if (pkt->opcode != IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE && | ||
2281 | pkt->opcode != IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST) { | ||
2282 | + /* read retries of partial data may restart from | ||
2283 | + * read response first or response only. | ||
2284 | + */ | ||
2285 | + if ((pkt->psn == wqe->first_psn && | ||
2286 | + pkt->opcode == | ||
2287 | + IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST) || | ||
2288 | + (wqe->first_psn == wqe->last_psn && | ||
2289 | + pkt->opcode == | ||
2290 | + IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY)) | ||
2291 | + break; | ||
2292 | + | ||
2293 | return COMPST_ERROR; | ||
2294 | } | ||
2295 | break; | ||
2296 | @@ -486,11 +497,11 @@ static inline enum comp_state complete_wqe(struct rxe_qp *qp, | ||
2297 | struct rxe_pkt_info *pkt, | ||
2298 | struct rxe_send_wqe *wqe) | ||
2299 | { | ||
2300 | - qp->comp.opcode = -1; | ||
2301 | - | ||
2302 | - if (pkt) { | ||
2303 | - if (psn_compare(pkt->psn, qp->comp.psn) >= 0) | ||
2304 | - qp->comp.psn = (pkt->psn + 1) & BTH_PSN_MASK; | ||
2305 | + if (pkt && wqe->state == wqe_state_pending) { | ||
2306 | + if (psn_compare(wqe->last_psn, qp->comp.psn) >= 0) { | ||
2307 | + qp->comp.psn = (wqe->last_psn + 1) & BTH_PSN_MASK; | ||
2308 | + qp->comp.opcode = -1; | ||
2309 | + } | ||
2310 | |||
2311 | if (qp->req.wait_psn) { | ||
2312 | qp->req.wait_psn = 0; | ||
2313 | diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c | ||
2314 | index 0f9fe2ca2a91..6fb771290c56 100644 | ||
2315 | --- a/drivers/infiniband/sw/rxe/rxe_req.c | ||
2316 | +++ b/drivers/infiniband/sw/rxe/rxe_req.c | ||
2317 | @@ -72,9 +72,6 @@ static void req_retry(struct rxe_qp *qp) | ||
2318 | int npsn; | ||
2319 | int first = 1; | ||
2320 | |||
2321 | - wqe = queue_head(qp->sq.queue); | ||
2322 | - npsn = (qp->comp.psn - wqe->first_psn) & BTH_PSN_MASK; | ||
2323 | - | ||
2324 | qp->req.wqe_index = consumer_index(qp->sq.queue); | ||
2325 | qp->req.psn = qp->comp.psn; | ||
2326 | qp->req.opcode = -1; | ||
2327 | @@ -106,11 +103,17 @@ static void req_retry(struct rxe_qp *qp) | ||
2328 | if (first) { | ||
2329 | first = 0; | ||
2330 | |||
2331 | - if (mask & WR_WRITE_OR_SEND_MASK) | ||
2332 | + if (mask & WR_WRITE_OR_SEND_MASK) { | ||
2333 | + npsn = (qp->comp.psn - wqe->first_psn) & | ||
2334 | + BTH_PSN_MASK; | ||
2335 | retry_first_write_send(qp, wqe, mask, npsn); | ||
2336 | + } | ||
2337 | |||
2338 | - if (mask & WR_READ_MASK) | ||
2339 | + if (mask & WR_READ_MASK) { | ||
2340 | + npsn = (wqe->dma.length - wqe->dma.resid) / | ||
2341 | + qp->mtu; | ||
2342 | wqe->iova += npsn * qp->mtu; | ||
2343 | + } | ||
2344 | } | ||
2345 | |||
2346 | wqe->state = wqe_state_posted; | ||
2347 | @@ -439,7 +442,7 @@ static struct sk_buff *init_req_packet(struct rxe_qp *qp, | ||
2348 | if (pkt->mask & RXE_RETH_MASK) { | ||
2349 | reth_set_rkey(pkt, ibwr->wr.rdma.rkey); | ||
2350 | reth_set_va(pkt, wqe->iova); | ||
2351 | - reth_set_len(pkt, wqe->dma.length); | ||
2352 | + reth_set_len(pkt, wqe->dma.resid); | ||
2353 | } | ||
2354 | |||
2355 | if (pkt->mask & RXE_IMMDT_MASK) | ||
2356 | diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c | ||
2357 | index 81ae2e30dd12..27a7e4406f34 100644 | ||
2358 | --- a/drivers/infiniband/ulp/iser/iser_initiator.c | ||
2359 | +++ b/drivers/infiniband/ulp/iser/iser_initiator.c | ||
2360 | @@ -590,13 +590,19 @@ void iser_login_rsp(struct ib_cq *cq, struct ib_wc *wc) | ||
2361 | ib_conn->post_recv_buf_count--; | ||
2362 | } | ||
2363 | |||
2364 | -static inline void | ||
2365 | +static inline int | ||
2366 | iser_inv_desc(struct iser_fr_desc *desc, u32 rkey) | ||
2367 | { | ||
2368 | - if (likely(rkey == desc->rsc.mr->rkey)) | ||
2369 | + if (likely(rkey == desc->rsc.mr->rkey)) { | ||
2370 | desc->rsc.mr_valid = 0; | ||
2371 | - else if (likely(rkey == desc->pi_ctx->sig_mr->rkey)) | ||
2372 | + } else if (likely(desc->pi_ctx && rkey == desc->pi_ctx->sig_mr->rkey)) { | ||
2373 | desc->pi_ctx->sig_mr_valid = 0; | ||
2374 | + } else { | ||
2375 | + iser_err("Bogus remote invalidation for rkey %#x\n", rkey); | ||
2376 | + return -EINVAL; | ||
2377 | + } | ||
2378 | + | ||
2379 | + return 0; | ||
2380 | } | ||
2381 | |||
2382 | static int | ||
2383 | @@ -624,12 +630,14 @@ iser_check_remote_inv(struct iser_conn *iser_conn, | ||
2384 | |||
2385 | if (iser_task->dir[ISER_DIR_IN]) { | ||
2386 | desc = iser_task->rdma_reg[ISER_DIR_IN].mem_h; | ||
2387 | - iser_inv_desc(desc, rkey); | ||
2388 | + if (unlikely(iser_inv_desc(desc, rkey))) | ||
2389 | + return -EINVAL; | ||
2390 | } | ||
2391 | |||
2392 | if (iser_task->dir[ISER_DIR_OUT]) { | ||
2393 | desc = iser_task->rdma_reg[ISER_DIR_OUT].mem_h; | ||
2394 | - iser_inv_desc(desc, rkey); | ||
2395 | + if (unlikely(iser_inv_desc(desc, rkey))) | ||
2396 | + return -EINVAL; | ||
2397 | } | ||
2398 | } else { | ||
2399 | iser_err("failed to get task for itt=%d\n", hdr->itt); | ||
2400 | diff --git a/drivers/input/ff-memless.c b/drivers/input/ff-memless.c | ||
2401 | index fcc6c3368182..ea3f0f5eb534 100644 | ||
2402 | --- a/drivers/input/ff-memless.c | ||
2403 | +++ b/drivers/input/ff-memless.c | ||
2404 | @@ -501,6 +501,15 @@ static void ml_ff_destroy(struct ff_device *ff) | ||
2405 | { | ||
2406 | struct ml_device *ml = ff->private; | ||
2407 | |||
2408 | + /* | ||
2409 | + * Even though we stop all playing effects when tearing down | ||
2410 | + * an input device (via input_device_flush() that calls into | ||
2411 | + * input_ff_flush() that stops and erases all effects), we | ||
2412 | + * do not actually stop the timer, and therefore we should | ||
2413 | + * do it here. | ||
2414 | + */ | ||
2415 | + del_timer_sync(&ml->timer); | ||
2416 | + | ||
2417 | kfree(ml->private); | ||
2418 | } | ||
2419 | |||
2420 | diff --git a/drivers/input/rmi4/rmi_f54.c b/drivers/input/rmi4/rmi_f54.c | ||
2421 | index 2e934aef3d2a..b669cdc8c8c6 100644 | ||
2422 | --- a/drivers/input/rmi4/rmi_f54.c | ||
2423 | +++ b/drivers/input/rmi4/rmi_f54.c | ||
2424 | @@ -364,7 +364,7 @@ static const struct vb2_ops rmi_f54_queue_ops = { | ||
2425 | static const struct vb2_queue rmi_f54_queue = { | ||
2426 | .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, | ||
2427 | .io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ, | ||
2428 | - .buf_struct_size = sizeof(struct vb2_buffer), | ||
2429 | + .buf_struct_size = sizeof(struct vb2_v4l2_buffer), | ||
2430 | .ops = &rmi_f54_queue_ops, | ||
2431 | .mem_ops = &vb2_vmalloc_memops, | ||
2432 | .timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC, | ||
2433 | @@ -617,7 +617,7 @@ static int rmi_f54_config(struct rmi_function *fn) | ||
2434 | { | ||
2435 | struct rmi_driver *drv = fn->rmi_dev->driver; | ||
2436 | |||
2437 | - drv->set_irq_bits(fn->rmi_dev, fn->irq_mask); | ||
2438 | + drv->clear_irq_bits(fn->rmi_dev, fn->irq_mask); | ||
2439 | |||
2440 | return 0; | ||
2441 | } | ||
2442 | @@ -744,6 +744,7 @@ static void rmi_f54_remove(struct rmi_function *fn) | ||
2443 | |||
2444 | video_unregister_device(&f54->vdev); | ||
2445 | v4l2_device_unregister(&f54->v4l2); | ||
2446 | + destroy_workqueue(f54->workqueue); | ||
2447 | } | ||
2448 | |||
2449 | struct rmi_function_handler rmi_f54_handler = { | ||
2450 | diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c | ||
2451 | index f502c8488be8..867772878c0c 100644 | ||
2452 | --- a/drivers/input/touchscreen/silead.c | ||
2453 | +++ b/drivers/input/touchscreen/silead.c | ||
2454 | @@ -504,20 +504,33 @@ static int __maybe_unused silead_ts_suspend(struct device *dev) | ||
2455 | static int __maybe_unused silead_ts_resume(struct device *dev) | ||
2456 | { | ||
2457 | struct i2c_client *client = to_i2c_client(dev); | ||
2458 | + bool second_try = false; | ||
2459 | int error, status; | ||
2460 | |||
2461 | silead_ts_set_power(client, SILEAD_POWER_ON); | ||
2462 | |||
2463 | + retry: | ||
2464 | error = silead_ts_reset(client); | ||
2465 | if (error) | ||
2466 | return error; | ||
2467 | |||
2468 | + if (second_try) { | ||
2469 | + error = silead_ts_load_fw(client); | ||
2470 | + if (error) | ||
2471 | + return error; | ||
2472 | + } | ||
2473 | + | ||
2474 | error = silead_ts_startup(client); | ||
2475 | if (error) | ||
2476 | return error; | ||
2477 | |||
2478 | status = silead_ts_get_status(client); | ||
2479 | if (status != SILEAD_STATUS_OK) { | ||
2480 | + if (!second_try) { | ||
2481 | + second_try = true; | ||
2482 | + dev_dbg(dev, "Reloading firmware after unsuccessful resume\n"); | ||
2483 | + goto retry; | ||
2484 | + } | ||
2485 | dev_err(dev, "Resume error, status: 0x%02x\n", status); | ||
2486 | return -ENODEV; | ||
2487 | } | ||
2488 | diff --git a/drivers/input/touchscreen/st1232.c b/drivers/input/touchscreen/st1232.c | ||
2489 | index e943678ce54c..f1c574d6be17 100644 | ||
2490 | --- a/drivers/input/touchscreen/st1232.c | ||
2491 | +++ b/drivers/input/touchscreen/st1232.c | ||
2492 | @@ -203,6 +203,7 @@ static int st1232_ts_probe(struct i2c_client *client, | ||
2493 | input_dev->id.bustype = BUS_I2C; | ||
2494 | input_dev->dev.parent = &client->dev; | ||
2495 | |||
2496 | + __set_bit(INPUT_PROP_DIRECT, input_dev->propbit); | ||
2497 | __set_bit(EV_SYN, input_dev->evbit); | ||
2498 | __set_bit(EV_KEY, input_dev->evbit); | ||
2499 | __set_bit(EV_ABS, input_dev->evbit); | ||
2500 | diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c | ||
2501 | index c5bc3e5e921e..080f9afcde8d 100644 | ||
2502 | --- a/drivers/md/bcache/super.c | ||
2503 | +++ b/drivers/md/bcache/super.c | ||
2504 | @@ -904,6 +904,7 @@ static void cached_dev_detach_finish(struct work_struct *w) | ||
2505 | bch_write_bdev_super(dc, &cl); | ||
2506 | closure_sync(&cl); | ||
2507 | |||
2508 | + calc_cached_dev_sectors(dc->disk.c); | ||
2509 | bcache_device_detach(&dc->disk); | ||
2510 | list_move(&dc->list, &uncached_devices); | ||
2511 | |||
2512 | diff --git a/drivers/media/pci/ivtv/ivtv-yuv.c b/drivers/media/pci/ivtv/ivtv-yuv.c | ||
2513 | index f7299d3d8244..bcb51e87c72f 100644 | ||
2514 | --- a/drivers/media/pci/ivtv/ivtv-yuv.c | ||
2515 | +++ b/drivers/media/pci/ivtv/ivtv-yuv.c | ||
2516 | @@ -935,7 +935,7 @@ static void ivtv_yuv_init(struct ivtv *itv) | ||
2517 | } | ||
2518 | |||
2519 | /* We need a buffer for blanking when Y plane is offset - non-fatal if we can't get one */ | ||
2520 | - yi->blanking_ptr = kzalloc(720 * 16, GFP_KERNEL|__GFP_NOWARN); | ||
2521 | + yi->blanking_ptr = kzalloc(720 * 16, GFP_ATOMIC|__GFP_NOWARN); | ||
2522 | if (yi->blanking_ptr) { | ||
2523 | yi->blanking_dmaptr = pci_map_single(itv->pdev, yi->blanking_ptr, 720*16, PCI_DMA_TODEVICE); | ||
2524 | } else { | ||
2525 | diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c | ||
2526 | index ba887e8e1b17..a85c5199ccd3 100644 | ||
2527 | --- a/drivers/media/pci/meye/meye.c | ||
2528 | +++ b/drivers/media/pci/meye/meye.c | ||
2529 | @@ -1469,7 +1469,7 @@ static int meye_mmap(struct file *file, struct vm_area_struct *vma) | ||
2530 | unsigned long page, pos; | ||
2531 | |||
2532 | mutex_lock(&meye.lock); | ||
2533 | - if (size > gbuffers * gbufsize) { | ||
2534 | + if (size > gbuffers * gbufsize || offset > gbuffers * gbufsize - size) { | ||
2535 | mutex_unlock(&meye.lock); | ||
2536 | return -EINVAL; | ||
2537 | } | ||
2538 | diff --git a/drivers/media/platform/davinci/isif.c b/drivers/media/platform/davinci/isif.c | ||
2539 | index 99faea2e84c6..78e37cf3470f 100644 | ||
2540 | --- a/drivers/media/platform/davinci/isif.c | ||
2541 | +++ b/drivers/media/platform/davinci/isif.c | ||
2542 | @@ -1106,7 +1106,8 @@ fail_nobase_res: | ||
2543 | |||
2544 | while (i >= 0) { | ||
2545 | res = platform_get_resource(pdev, IORESOURCE_MEM, i); | ||
2546 | - release_mem_region(res->start, resource_size(res)); | ||
2547 | + if (res) | ||
2548 | + release_mem_region(res->start, resource_size(res)); | ||
2549 | i--; | ||
2550 | } | ||
2551 | vpfe_unregister_ccdc_device(&isif_hw_dev); | ||
2552 | diff --git a/drivers/media/platform/davinci/vpbe_display.c b/drivers/media/platform/davinci/vpbe_display.c | ||
2553 | index a9bc0175e4d3..c839003953a7 100644 | ||
2554 | --- a/drivers/media/platform/davinci/vpbe_display.c | ||
2555 | +++ b/drivers/media/platform/davinci/vpbe_display.c | ||
2556 | @@ -518,7 +518,7 @@ vpbe_disp_calculate_scale_factor(struct vpbe_display *disp_dev, | ||
2557 | else if (v_scale == 4) | ||
2558 | layer_info->v_zoom = ZOOM_X4; | ||
2559 | if (v_exp) | ||
2560 | - layer_info->h_exp = V_EXP_6_OVER_5; | ||
2561 | + layer_info->v_exp = V_EXP_6_OVER_5; | ||
2562 | } else { | ||
2563 | /* no scaling, only cropping. Set display area to crop area */ | ||
2564 | cfg->ysize = expected_ysize; | ||
2565 | diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c | ||
2566 | index 390d708c807a..3fab9f776afa 100644 | ||
2567 | --- a/drivers/media/platform/pxa_camera.c | ||
2568 | +++ b/drivers/media/platform/pxa_camera.c | ||
2569 | @@ -2334,7 +2334,7 @@ static int pxa_camera_probe(struct platform_device *pdev) | ||
2570 | pcdev->res = res; | ||
2571 | |||
2572 | pcdev->pdata = pdev->dev.platform_data; | ||
2573 | - if (&pdev->dev.of_node && !pcdev->pdata) { | ||
2574 | + if (pdev->dev.of_node && !pcdev->pdata) { | ||
2575 | err = pxa_camera_pdata_from_dt(&pdev->dev, pcdev, &pcdev->asd); | ||
2576 | } else { | ||
2577 | pcdev->platform_flags = pcdev->pdata->flags; | ||
2578 | diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c | ||
2579 | index 38e73ee5c8fb..78f0bf8ee084 100644 | ||
2580 | --- a/drivers/media/usb/au0828/au0828-core.c | ||
2581 | +++ b/drivers/media/usb/au0828/au0828-core.c | ||
2582 | @@ -639,7 +639,7 @@ static int au0828_usb_probe(struct usb_interface *interface, | ||
2583 | /* Analog TV */ | ||
2584 | retval = au0828_analog_register(dev, interface); | ||
2585 | if (retval) { | ||
2586 | - pr_err("%s() au0282_dev_register failed to register on V4L2\n", | ||
2587 | + pr_err("%s() au0828_analog_register failed to register on V4L2\n", | ||
2588 | __func__); | ||
2589 | goto done; | ||
2590 | } | ||
2591 | @@ -647,7 +647,7 @@ static int au0828_usb_probe(struct usb_interface *interface, | ||
2592 | /* Digital TV */ | ||
2593 | retval = au0828_dvb_register(dev); | ||
2594 | if (retval) | ||
2595 | - pr_err("%s() au0282_dev_register failed\n", | ||
2596 | + pr_err("%s() au0828_dvb_register failed\n", | ||
2597 | __func__); | ||
2598 | |||
2599 | /* Remote controller */ | ||
2600 | diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c | ||
2601 | index 6414188ffdfa..cd973e780da9 100644 | ||
2602 | --- a/drivers/media/usb/cx231xx/cx231xx-video.c | ||
2603 | +++ b/drivers/media/usb/cx231xx/cx231xx-video.c | ||
2604 | @@ -1389,7 +1389,7 @@ int cx231xx_g_register(struct file *file, void *priv, | ||
2605 | ret = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, | ||
2606 | (u16)reg->reg, value, 4); | ||
2607 | reg->val = value[0] | value[1] << 8 | | ||
2608 | - value[2] << 16 | value[3] << 24; | ||
2609 | + value[2] << 16 | (u32)value[3] << 24; | ||
2610 | reg->size = 4; | ||
2611 | break; | ||
2612 | case 1: /* AFE - read byte */ | ||
2613 | diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c | ||
2614 | index 60286adbd6a1..e56f0844b98d 100644 | ||
2615 | --- a/drivers/mfd/ti_am335x_tscadc.c | ||
2616 | +++ b/drivers/mfd/ti_am335x_tscadc.c | ||
2617 | @@ -295,11 +295,24 @@ static int ti_tscadc_remove(struct platform_device *pdev) | ||
2618 | return 0; | ||
2619 | } | ||
2620 | |||
2621 | +static int __maybe_unused ti_tscadc_can_wakeup(struct device *dev, void *data) | ||
2622 | +{ | ||
2623 | + return device_may_wakeup(dev); | ||
2624 | +} | ||
2625 | + | ||
2626 | static int __maybe_unused tscadc_suspend(struct device *dev) | ||
2627 | { | ||
2628 | struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev); | ||
2629 | |||
2630 | regmap_write(tscadc->regmap, REG_SE, 0x00); | ||
2631 | + if (device_for_each_child(dev, NULL, ti_tscadc_can_wakeup)) { | ||
2632 | + u32 ctrl; | ||
2633 | + | ||
2634 | + regmap_read(tscadc->regmap, REG_CTRL, &ctrl); | ||
2635 | + ctrl &= ~(CNTRLREG_POWERDOWN); | ||
2636 | + ctrl |= CNTRLREG_TSCSSENB; | ||
2637 | + regmap_write(tscadc->regmap, REG_CTRL, ctrl); | ||
2638 | + } | ||
2639 | pm_runtime_put_sync(dev); | ||
2640 | |||
2641 | return 0; | ||
2642 | diff --git a/drivers/misc/cxl/guest.c b/drivers/misc/cxl/guest.c | ||
2643 | index 3e102cd6ed91..d08509cd978a 100644 | ||
2644 | --- a/drivers/misc/cxl/guest.c | ||
2645 | +++ b/drivers/misc/cxl/guest.c | ||
2646 | @@ -1026,8 +1026,6 @@ err1: | ||
2647 | |||
2648 | void cxl_guest_remove_afu(struct cxl_afu *afu) | ||
2649 | { | ||
2650 | - pr_devel("in %s - AFU(%d)\n", __func__, afu->slice); | ||
2651 | - | ||
2652 | if (!afu) | ||
2653 | return; | ||
2654 | |||
2655 | diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c | ||
2656 | index b642b4fd731b..95584bffa4ea 100644 | ||
2657 | --- a/drivers/misc/genwqe/card_utils.c | ||
2658 | +++ b/drivers/misc/genwqe/card_utils.c | ||
2659 | @@ -298,7 +298,7 @@ static int genwqe_sgl_size(int num_pages) | ||
2660 | int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2661 | void __user *user_addr, size_t user_size) | ||
2662 | { | ||
2663 | - int rc; | ||
2664 | + int ret = -ENOMEM; | ||
2665 | struct pci_dev *pci_dev = cd->pci_dev; | ||
2666 | |||
2667 | sgl->fpage_offs = offset_in_page((unsigned long)user_addr); | ||
2668 | @@ -317,7 +317,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2669 | if (get_order(sgl->sgl_size) > MAX_ORDER) { | ||
2670 | dev_err(&pci_dev->dev, | ||
2671 | "[%s] err: too much memory requested!\n", __func__); | ||
2672 | - return -ENOMEM; | ||
2673 | + return ret; | ||
2674 | } | ||
2675 | |||
2676 | sgl->sgl = __genwqe_alloc_consistent(cd, sgl->sgl_size, | ||
2677 | @@ -325,7 +325,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2678 | if (sgl->sgl == NULL) { | ||
2679 | dev_err(&pci_dev->dev, | ||
2680 | "[%s] err: no memory available!\n", __func__); | ||
2681 | - return -ENOMEM; | ||
2682 | + return ret; | ||
2683 | } | ||
2684 | |||
2685 | /* Only use buffering on incomplete pages */ | ||
2686 | @@ -338,7 +338,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2687 | /* Sync with user memory */ | ||
2688 | if (copy_from_user(sgl->fpage + sgl->fpage_offs, | ||
2689 | user_addr, sgl->fpage_size)) { | ||
2690 | - rc = -EFAULT; | ||
2691 | + ret = -EFAULT; | ||
2692 | goto err_out; | ||
2693 | } | ||
2694 | } | ||
2695 | @@ -351,7 +351,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2696 | /* Sync with user memory */ | ||
2697 | if (copy_from_user(sgl->lpage, user_addr + user_size - | ||
2698 | sgl->lpage_size, sgl->lpage_size)) { | ||
2699 | - rc = -EFAULT; | ||
2700 | + ret = -EFAULT; | ||
2701 | goto err_out2; | ||
2702 | } | ||
2703 | } | ||
2704 | @@ -373,7 +373,8 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2705 | sgl->sgl = NULL; | ||
2706 | sgl->sgl_dma_addr = 0; | ||
2707 | sgl->sgl_size = 0; | ||
2708 | - return -ENOMEM; | ||
2709 | + | ||
2710 | + return ret; | ||
2711 | } | ||
2712 | |||
2713 | int genwqe_setup_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl, | ||
2714 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
2715 | index bb3a76ad80da..fc8cb855c6e6 100644 | ||
2716 | --- a/drivers/misc/kgdbts.c | ||
2717 | +++ b/drivers/misc/kgdbts.c | ||
2718 | @@ -979,6 +979,12 @@ static void kgdbts_run_tests(void) | ||
2719 | int nmi_sleep = 0; | ||
2720 | int i; | ||
2721 | |||
2722 | + verbose = 0; | ||
2723 | + if (strstr(config, "V1")) | ||
2724 | + verbose = 1; | ||
2725 | + if (strstr(config, "V2")) | ||
2726 | + verbose = 2; | ||
2727 | + | ||
2728 | ptr = strchr(config, 'F'); | ||
2729 | if (ptr) | ||
2730 | fork_test = simple_strtol(ptr + 1, NULL, 10); | ||
2731 | @@ -1062,13 +1068,6 @@ static int kgdbts_option_setup(char *opt) | ||
2732 | return -ENOSPC; | ||
2733 | } | ||
2734 | strcpy(config, opt); | ||
2735 | - | ||
2736 | - verbose = 0; | ||
2737 | - if (strstr(config, "V1")) | ||
2738 | - verbose = 1; | ||
2739 | - if (strstr(config, "V2")) | ||
2740 | - verbose = 2; | ||
2741 | - | ||
2742 | return 0; | ||
2743 | } | ||
2744 | |||
2745 | @@ -1080,9 +1079,6 @@ static int configure_kgdbts(void) | ||
2746 | |||
2747 | if (!strlen(config) || isspace(config[0])) | ||
2748 | goto noconfig; | ||
2749 | - err = kgdbts_option_setup(config); | ||
2750 | - if (err) | ||
2751 | - goto noconfig; | ||
2752 | |||
2753 | final_ack = 0; | ||
2754 | run_plant_and_detach_test(1); | ||
2755 | diff --git a/drivers/mmc/host/sdhci-of-at91.c b/drivers/mmc/host/sdhci-of-at91.c | ||
2756 | index 2ff6140ea0b7..7f7af312e7ad 100644 | ||
2757 | --- a/drivers/mmc/host/sdhci-of-at91.c | ||
2758 | +++ b/drivers/mmc/host/sdhci-of-at91.c | ||
2759 | @@ -318,7 +318,7 @@ static int sdhci_at91_probe(struct platform_device *pdev) | ||
2760 | pm_runtime_use_autosuspend(&pdev->dev); | ||
2761 | |||
2762 | /* HS200 is broken at this moment */ | ||
2763 | - host->quirks2 = SDHCI_QUIRK2_BROKEN_HS200; | ||
2764 | + host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200; | ||
2765 | |||
2766 | ret = sdhci_add_host(host); | ||
2767 | if (ret) | ||
2768 | diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c | ||
2769 | index 3fad35942895..7a716bed1158 100644 | ||
2770 | --- a/drivers/mtd/maps/physmap_of.c | ||
2771 | +++ b/drivers/mtd/maps/physmap_of.c | ||
2772 | @@ -29,7 +29,6 @@ | ||
2773 | struct of_flash_list { | ||
2774 | struct mtd_info *mtd; | ||
2775 | struct map_info map; | ||
2776 | - struct resource *res; | ||
2777 | }; | ||
2778 | |||
2779 | struct of_flash { | ||
2780 | @@ -54,18 +53,10 @@ static int of_flash_remove(struct platform_device *dev) | ||
2781 | mtd_concat_destroy(info->cmtd); | ||
2782 | } | ||
2783 | |||
2784 | - for (i = 0; i < info->list_size; i++) { | ||
2785 | + for (i = 0; i < info->list_size; i++) | ||
2786 | if (info->list[i].mtd) | ||
2787 | map_destroy(info->list[i].mtd); | ||
2788 | |||
2789 | - if (info->list[i].map.virt) | ||
2790 | - iounmap(info->list[i].map.virt); | ||
2791 | - | ||
2792 | - if (info->list[i].res) { | ||
2793 | - release_resource(info->list[i].res); | ||
2794 | - kfree(info->list[i].res); | ||
2795 | - } | ||
2796 | - } | ||
2797 | return 0; | ||
2798 | } | ||
2799 | |||
2800 | @@ -223,10 +214,11 @@ static int of_flash_probe(struct platform_device *dev) | ||
2801 | |||
2802 | err = -EBUSY; | ||
2803 | res_size = resource_size(&res); | ||
2804 | - info->list[i].res = request_mem_region(res.start, res_size, | ||
2805 | - dev_name(&dev->dev)); | ||
2806 | - if (!info->list[i].res) | ||
2807 | + info->list[i].map.virt = devm_ioremap_resource(&dev->dev, &res); | ||
2808 | + if (IS_ERR(info->list[i].map.virt)) { | ||
2809 | + err = PTR_ERR(info->list[i].map.virt); | ||
2810 | goto err_out; | ||
2811 | + } | ||
2812 | |||
2813 | err = -ENXIO; | ||
2814 | width = of_get_property(dp, "bank-width", NULL); | ||
2815 | @@ -247,15 +239,6 @@ static int of_flash_probe(struct platform_device *dev) | ||
2816 | return err; | ||
2817 | } | ||
2818 | |||
2819 | - err = -ENOMEM; | ||
2820 | - info->list[i].map.virt = ioremap(info->list[i].map.phys, | ||
2821 | - info->list[i].map.size); | ||
2822 | - if (!info->list[i].map.virt) { | ||
2823 | - dev_err(&dev->dev, "Failed to ioremap() flash" | ||
2824 | - " region\n"); | ||
2825 | - goto err_out; | ||
2826 | - } | ||
2827 | - | ||
2828 | simple_map_init(&info->list[i].map); | ||
2829 | |||
2830 | /* | ||
2831 | diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c | ||
2832 | index 442ce619b3b6..d6c013f93b8c 100644 | ||
2833 | --- a/drivers/mtd/nand/sh_flctl.c | ||
2834 | +++ b/drivers/mtd/nand/sh_flctl.c | ||
2835 | @@ -480,7 +480,7 @@ static void read_fiforeg(struct sh_flctl *flctl, int rlen, int offset) | ||
2836 | |||
2837 | /* initiate DMA transfer */ | ||
2838 | if (flctl->chan_fifo0_rx && rlen >= 32 && | ||
2839 | - flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_DEV_TO_MEM) > 0) | ||
2840 | + flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_FROM_DEVICE) > 0) | ||
2841 | goto convert; /* DMA success */ | ||
2842 | |||
2843 | /* do polling transfer */ | ||
2844 | @@ -539,7 +539,7 @@ static void write_ec_fiforeg(struct sh_flctl *flctl, int rlen, | ||
2845 | |||
2846 | /* initiate DMA transfer */ | ||
2847 | if (flctl->chan_fifo0_tx && rlen >= 32 && | ||
2848 | - flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_MEM_TO_DEV) > 0) | ||
2849 | + flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_TO_DEVICE) > 0) | ||
2850 | return; /* DMA success */ | ||
2851 | |||
2852 | /* do polling transfer */ | ||
2853 | diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c | ||
2854 | index eb7173713bbc..a2c4048c07be 100644 | ||
2855 | --- a/drivers/net/can/slcan.c | ||
2856 | +++ b/drivers/net/can/slcan.c | ||
2857 | @@ -613,6 +613,7 @@ err_free_chan: | ||
2858 | sl->tty = NULL; | ||
2859 | tty->disc_data = NULL; | ||
2860 | clear_bit(SLF_INUSE, &sl->flags); | ||
2861 | + free_netdev(sl->dev); | ||
2862 | |||
2863 | err_exit: | ||
2864 | rtnl_unlock(); | ||
2865 | diff --git a/drivers/net/ethernet/amd/am79c961a.c b/drivers/net/ethernet/amd/am79c961a.c | ||
2866 | index fcdf5dda448f..77d99c532917 100644 | ||
2867 | --- a/drivers/net/ethernet/amd/am79c961a.c | ||
2868 | +++ b/drivers/net/ethernet/amd/am79c961a.c | ||
2869 | @@ -440,7 +440,7 @@ static void am79c961_timeout(struct net_device *dev) | ||
2870 | /* | ||
2871 | * Transmit a packet | ||
2872 | */ | ||
2873 | -static int | ||
2874 | +static netdev_tx_t | ||
2875 | am79c961_sendpacket(struct sk_buff *skb, struct net_device *dev) | ||
2876 | { | ||
2877 | struct dev_priv *priv = netdev_priv(dev); | ||
2878 | diff --git a/drivers/net/ethernet/amd/atarilance.c b/drivers/net/ethernet/amd/atarilance.c | ||
2879 | index d2bc8e5dcd23..35a9f252ceb6 100644 | ||
2880 | --- a/drivers/net/ethernet/amd/atarilance.c | ||
2881 | +++ b/drivers/net/ethernet/amd/atarilance.c | ||
2882 | @@ -339,7 +339,8 @@ static unsigned long lance_probe1( struct net_device *dev, struct lance_addr | ||
2883 | *init_rec ); | ||
2884 | static int lance_open( struct net_device *dev ); | ||
2885 | static void lance_init_ring( struct net_device *dev ); | ||
2886 | -static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev ); | ||
2887 | +static netdev_tx_t lance_start_xmit(struct sk_buff *skb, | ||
2888 | + struct net_device *dev); | ||
2889 | static irqreturn_t lance_interrupt( int irq, void *dev_id ); | ||
2890 | static int lance_rx( struct net_device *dev ); | ||
2891 | static int lance_close( struct net_device *dev ); | ||
2892 | @@ -770,7 +771,8 @@ static void lance_tx_timeout (struct net_device *dev) | ||
2893 | |||
2894 | /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */ | ||
2895 | |||
2896 | -static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev ) | ||
2897 | +static netdev_tx_t | ||
2898 | +lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2899 | { | ||
2900 | struct lance_private *lp = netdev_priv(dev); | ||
2901 | struct lance_ioreg *IO = lp->iobase; | ||
2902 | diff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c | ||
2903 | index 9e80a76c3dfe..76393ae4cf0a 100644 | ||
2904 | --- a/drivers/net/ethernet/amd/declance.c | ||
2905 | +++ b/drivers/net/ethernet/amd/declance.c | ||
2906 | @@ -893,7 +893,7 @@ static void lance_tx_timeout(struct net_device *dev) | ||
2907 | netif_wake_queue(dev); | ||
2908 | } | ||
2909 | |||
2910 | -static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2911 | +static netdev_tx_t lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2912 | { | ||
2913 | struct lance_private *lp = netdev_priv(dev); | ||
2914 | volatile struct lance_regs *ll = lp->ll; | ||
2915 | diff --git a/drivers/net/ethernet/amd/sun3lance.c b/drivers/net/ethernet/amd/sun3lance.c | ||
2916 | index 3d8c6b2cdea4..09271665712d 100644 | ||
2917 | --- a/drivers/net/ethernet/amd/sun3lance.c | ||
2918 | +++ b/drivers/net/ethernet/amd/sun3lance.c | ||
2919 | @@ -235,7 +235,8 @@ struct lance_private { | ||
2920 | static int lance_probe( struct net_device *dev); | ||
2921 | static int lance_open( struct net_device *dev ); | ||
2922 | static void lance_init_ring( struct net_device *dev ); | ||
2923 | -static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev ); | ||
2924 | +static netdev_tx_t lance_start_xmit(struct sk_buff *skb, | ||
2925 | + struct net_device *dev); | ||
2926 | static irqreturn_t lance_interrupt( int irq, void *dev_id); | ||
2927 | static int lance_rx( struct net_device *dev ); | ||
2928 | static int lance_close( struct net_device *dev ); | ||
2929 | @@ -511,7 +512,8 @@ static void lance_init_ring( struct net_device *dev ) | ||
2930 | } | ||
2931 | |||
2932 | |||
2933 | -static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev ) | ||
2934 | +static netdev_tx_t | ||
2935 | +lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2936 | { | ||
2937 | struct lance_private *lp = netdev_priv(dev); | ||
2938 | int entry, len; | ||
2939 | diff --git a/drivers/net/ethernet/amd/sunlance.c b/drivers/net/ethernet/amd/sunlance.c | ||
2940 | index 3153465d4d02..acbbe4e5a2f8 100644 | ||
2941 | --- a/drivers/net/ethernet/amd/sunlance.c | ||
2942 | +++ b/drivers/net/ethernet/amd/sunlance.c | ||
2943 | @@ -1106,7 +1106,7 @@ static void lance_tx_timeout(struct net_device *dev) | ||
2944 | netif_wake_queue(dev); | ||
2945 | } | ||
2946 | |||
2947 | -static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2948 | +static netdev_tx_t lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2949 | { | ||
2950 | struct lance_private *lp = netdev_priv(dev); | ||
2951 | int entry, skblen, len; | ||
2952 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
2953 | index 1e4e8b245cd5..1df7f5da8411 100644 | ||
2954 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
2955 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
2956 | @@ -1390,7 +1390,7 @@ static int xgbe_close(struct net_device *netdev) | ||
2957 | return 0; | ||
2958 | } | ||
2959 | |||
2960 | -static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
2961 | +static netdev_tx_t xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
2962 | { | ||
2963 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
2964 | struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
2965 | @@ -1399,7 +1399,7 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
2966 | struct xgbe_ring *ring; | ||
2967 | struct xgbe_packet_data *packet; | ||
2968 | struct netdev_queue *txq; | ||
2969 | - int ret; | ||
2970 | + netdev_tx_t ret; | ||
2971 | |||
2972 | DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len); | ||
2973 | |||
2974 | diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
2975 | index c4078401b7de..900f2f706cbc 100644 | ||
2976 | --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
2977 | +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
2978 | @@ -571,12 +571,13 @@ static irqreturn_t bcm_enet_isr_dma(int irq, void *dev_id) | ||
2979 | /* | ||
2980 | * tx request callback | ||
2981 | */ | ||
2982 | -static int bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2983 | +static netdev_tx_t | ||
2984 | +bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2985 | { | ||
2986 | struct bcm_enet_priv *priv; | ||
2987 | struct bcm_enet_desc *desc; | ||
2988 | u32 len_stat; | ||
2989 | - int ret; | ||
2990 | + netdev_tx_t ret; | ||
2991 | |||
2992 | priv = netdev_priv(dev); | ||
2993 | |||
2994 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
2995 | index a9681b191304..ce8a777b1e97 100644 | ||
2996 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
2997 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | ||
2998 | @@ -3540,6 +3540,16 @@ static void bnx2x_drv_info_iscsi_stat(struct bnx2x *bp) | ||
2999 | */ | ||
3000 | static void bnx2x_config_mf_bw(struct bnx2x *bp) | ||
3001 | { | ||
3002 | + /* Workaround for MFW bug. | ||
3003 | + * MFW is not supposed to generate BW attention in | ||
3004 | + * single function mode. | ||
3005 | + */ | ||
3006 | + if (!IS_MF(bp)) { | ||
3007 | + DP(BNX2X_MSG_MCP, | ||
3008 | + "Ignoring MF BW config in single function mode\n"); | ||
3009 | + return; | ||
3010 | + } | ||
3011 | + | ||
3012 | if (bp->link_vars.link_up) { | ||
3013 | bnx2x_cmng_fns_init(bp, true, CMNG_FNS_MINMAX); | ||
3014 | bnx2x_link_sync_notify(bp); | ||
3015 | diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c | ||
3016 | index f1b81187a201..dc7953894c35 100644 | ||
3017 | --- a/drivers/net/ethernet/broadcom/sb1250-mac.c | ||
3018 | +++ b/drivers/net/ethernet/broadcom/sb1250-mac.c | ||
3019 | @@ -299,7 +299,7 @@ static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *, | ||
3020 | static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff); | ||
3021 | static uint64_t sbmac_addr2reg(unsigned char *ptr); | ||
3022 | static irqreturn_t sbmac_intr(int irq, void *dev_instance); | ||
3023 | -static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev); | ||
3024 | +static netdev_tx_t sbmac_start_tx(struct sk_buff *skb, struct net_device *dev); | ||
3025 | static void sbmac_setmulti(struct sbmac_softc *sc); | ||
3026 | static int sbmac_init(struct platform_device *pldev, long long base); | ||
3027 | static int sbmac_set_speed(struct sbmac_softc *s, enum sbmac_speed speed); | ||
3028 | @@ -2032,7 +2032,7 @@ static irqreturn_t sbmac_intr(int irq,void *dev_instance) | ||
3029 | * Return value: | ||
3030 | * nothing | ||
3031 | ********************************************************************* */ | ||
3032 | -static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev) | ||
3033 | +static netdev_tx_t sbmac_start_tx(struct sk_buff *skb, struct net_device *dev) | ||
3034 | { | ||
3035 | struct sbmac_softc *sc = netdev_priv(dev); | ||
3036 | unsigned long flags; | ||
3037 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c | ||
3038 | index 6ee2ed30626b..306b4b320616 100644 | ||
3039 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c | ||
3040 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c | ||
3041 | @@ -266,8 +266,8 @@ void cxgb4_dcb_handle_fw_update(struct adapter *adap, | ||
3042 | enum cxgb4_dcb_state_input input = | ||
3043 | ((pcmd->u.dcb.control.all_syncd_pkd & | ||
3044 | FW_PORT_CMD_ALL_SYNCD_F) | ||
3045 | - ? CXGB4_DCB_STATE_FW_ALLSYNCED | ||
3046 | - : CXGB4_DCB_STATE_FW_INCOMPLETE); | ||
3047 | + ? CXGB4_DCB_INPUT_FW_ALLSYNCED | ||
3048 | + : CXGB4_DCB_INPUT_FW_INCOMPLETE); | ||
3049 | |||
3050 | if (dcb->dcb_version != FW_PORT_DCB_VER_UNKNOWN) { | ||
3051 | dcb_running_version = FW_PORT_CMD_DCB_VERSION_G( | ||
3052 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.h | ||
3053 | index ccf24d3dc982..2c418c405c50 100644 | ||
3054 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.h | ||
3055 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.h | ||
3056 | @@ -67,7 +67,7 @@ | ||
3057 | do { \ | ||
3058 | if ((__dcb)->dcb_version == FW_PORT_DCB_VER_IEEE) \ | ||
3059 | cxgb4_dcb_state_fsm((__dev), \ | ||
3060 | - CXGB4_DCB_STATE_FW_ALLSYNCED); \ | ||
3061 | + CXGB4_DCB_INPUT_FW_ALLSYNCED); \ | ||
3062 | } while (0) | ||
3063 | |||
3064 | /* States we can be in for a port's Data Center Bridging. | ||
3065 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | ||
3066 | index ebeeb3581b9c..b4b435276a18 100644 | ||
3067 | --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | ||
3068 | +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | ||
3069 | @@ -3541,7 +3541,7 @@ int t4_fwcache(struct adapter *adap, enum fw_params_param_dev_fwcache op) | ||
3070 | c.param[0].mnem = | ||
3071 | cpu_to_be32(FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) | | ||
3072 | FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_FWCACHE)); | ||
3073 | - c.param[0].val = (__force __be32)op; | ||
3074 | + c.param[0].val = cpu_to_be32(op); | ||
3075 | |||
3076 | return t4_wr_mbox(adap, adap->mbox, &c, sizeof(c), NULL); | ||
3077 | } | ||
3078 | diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
3079 | index 886378c5334f..043b69b5843b 100644 | ||
3080 | --- a/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
3081 | +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | ||
3082 | @@ -11360,6 +11360,7 @@ static void i40e_remove(struct pci_dev *pdev) | ||
3083 | mutex_destroy(&hw->aq.asq_mutex); | ||
3084 | |||
3085 | /* Clear all dynamic memory lists of rings, q_vectors, and VSIs */ | ||
3086 | + rtnl_lock(); | ||
3087 | i40e_clear_interrupt_scheme(pf); | ||
3088 | for (i = 0; i < pf->num_alloc_vsi; i++) { | ||
3089 | if (pf->vsi[i]) { | ||
3090 | @@ -11368,6 +11369,7 @@ static void i40e_remove(struct pci_dev *pdev) | ||
3091 | pf->vsi[i] = NULL; | ||
3092 | } | ||
3093 | } | ||
3094 | + rtnl_unlock(); | ||
3095 | |||
3096 | for (i = 0; i < I40E_MAX_VEB; i++) { | ||
3097 | kfree(pf->veb[i]); | ||
3098 | @@ -11513,7 +11515,13 @@ static void i40e_shutdown(struct pci_dev *pdev) | ||
3099 | wr32(hw, I40E_PFPM_WUFC, | ||
3100 | (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); | ||
3101 | |||
3102 | + /* Since we're going to destroy queues during the | ||
3103 | + * i40e_clear_interrupt_scheme() we should hold the RTNL lock for this | ||
3104 | + * whole section | ||
3105 | + */ | ||
3106 | + rtnl_lock(); | ||
3107 | i40e_clear_interrupt_scheme(pf); | ||
3108 | + rtnl_unlock(); | ||
3109 | |||
3110 | if (system_state == SYSTEM_POWER_OFF) { | ||
3111 | pci_wake_from_d3(pdev, pf->wol_en); | ||
3112 | diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c | ||
3113 | index f1feceab758a..41cbcb0ac2d9 100644 | ||
3114 | --- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c | ||
3115 | +++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c | ||
3116 | @@ -604,7 +604,8 @@ static long i40e_ptp_create_clock(struct i40e_pf *pf) | ||
3117 | if (!IS_ERR_OR_NULL(pf->ptp_clock)) | ||
3118 | return 0; | ||
3119 | |||
3120 | - strncpy(pf->ptp_caps.name, i40e_driver_name, sizeof(pf->ptp_caps.name)); | ||
3121 | + strncpy(pf->ptp_caps.name, i40e_driver_name, | ||
3122 | + sizeof(pf->ptp_caps.name) - 1); | ||
3123 | pf->ptp_caps.owner = THIS_MODULE; | ||
3124 | pf->ptp_caps.max_adj = 999999999; | ||
3125 | pf->ptp_caps.n_ext_ts = 0; | ||
3126 | diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | ||
3127 | index 54b8ee2583f1..7484ad3c955d 100644 | ||
3128 | --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | ||
3129 | +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | ||
3130 | @@ -2000,6 +2000,16 @@ static int i40e_vc_del_mac_addr_msg(struct i40e_vf *vf, u8 *msg, u16 msglen) | ||
3131 | ret = I40E_ERR_INVALID_MAC_ADDR; | ||
3132 | goto error_param; | ||
3133 | } | ||
3134 | + | ||
3135 | + if (vf->pf_set_mac && | ||
3136 | + ether_addr_equal(al->list[i].addr, | ||
3137 | + vf->default_lan_addr.addr)) { | ||
3138 | + dev_err(&pf->pdev->dev, | ||
3139 | + "MAC addr %pM has been set by PF, cannot delete it for VF %d, reset VF to change MAC addr\n", | ||
3140 | + vf->default_lan_addr.addr, vf->vf_id); | ||
3141 | + ret = I40E_ERR_PARAM; | ||
3142 | + goto error_param; | ||
3143 | + } | ||
3144 | } | ||
3145 | vsi = pf->vsi[vf->lan_vsi_idx]; | ||
3146 | |||
3147 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
3148 | index a5428b6abdac..8ad20b7852ed 100644 | ||
3149 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
3150 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | ||
3151 | @@ -4804,6 +4804,7 @@ static void ixgbe_fdir_filter_restore(struct ixgbe_adapter *adapter) | ||
3152 | struct ixgbe_hw *hw = &adapter->hw; | ||
3153 | struct hlist_node *node2; | ||
3154 | struct ixgbe_fdir_filter *filter; | ||
3155 | + u64 action; | ||
3156 | |||
3157 | spin_lock(&adapter->fdir_perfect_lock); | ||
3158 | |||
3159 | @@ -4812,12 +4813,17 @@ static void ixgbe_fdir_filter_restore(struct ixgbe_adapter *adapter) | ||
3160 | |||
3161 | hlist_for_each_entry_safe(filter, node2, | ||
3162 | &adapter->fdir_filter_list, fdir_node) { | ||
3163 | + action = filter->action; | ||
3164 | + if (action != IXGBE_FDIR_DROP_QUEUE && action != 0) | ||
3165 | + action = | ||
3166 | + (action >> ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF) - 1; | ||
3167 | + | ||
3168 | ixgbe_fdir_write_perfect_filter_82599(hw, | ||
3169 | &filter->filter, | ||
3170 | filter->sw_idx, | ||
3171 | - (filter->action == IXGBE_FDIR_DROP_QUEUE) ? | ||
3172 | + (action == IXGBE_FDIR_DROP_QUEUE) ? | ||
3173 | IXGBE_FDIR_DROP_QUEUE : | ||
3174 | - adapter->rx_ring[filter->action]->reg_idx); | ||
3175 | + adapter->rx_ring[action]->reg_idx); | ||
3176 | } | ||
3177 | |||
3178 | spin_unlock(&adapter->fdir_perfect_lock); | ||
3179 | diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
3180 | index 585a40cc6470..8460c4807567 100644 | ||
3181 | --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
3182 | +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | ||
3183 | @@ -2191,6 +2191,13 @@ static int mlxsw_sp_port_ets_init(struct mlxsw_sp_port *mlxsw_sp_port) | ||
3184 | MLXSW_REG_QEEC_MAS_DIS); | ||
3185 | if (err) | ||
3186 | return err; | ||
3187 | + | ||
3188 | + err = mlxsw_sp_port_ets_maxrate_set(mlxsw_sp_port, | ||
3189 | + MLXSW_REG_QEEC_HIERARCY_TC, | ||
3190 | + i + 8, i, | ||
3191 | + MLXSW_REG_QEEC_MAS_DIS); | ||
3192 | + if (err) | ||
3193 | + return err; | ||
3194 | } | ||
3195 | |||
3196 | /* Map all priorities to traffic class 0. */ | ||
3197 | diff --git a/drivers/net/ethernet/micrel/ks8695net.c b/drivers/net/ethernet/micrel/ks8695net.c | ||
3198 | index 20cb85bc0c5f..6135d90f368f 100644 | ||
3199 | --- a/drivers/net/ethernet/micrel/ks8695net.c | ||
3200 | +++ b/drivers/net/ethernet/micrel/ks8695net.c | ||
3201 | @@ -1156,7 +1156,7 @@ ks8695_timeout(struct net_device *ndev) | ||
3202 | * sk_buff and adds it to the TX ring. It then kicks the TX DMA | ||
3203 | * engine to ensure transmission begins. | ||
3204 | */ | ||
3205 | -static int | ||
3206 | +static netdev_tx_t | ||
3207 | ks8695_start_xmit(struct sk_buff *skb, struct net_device *ndev) | ||
3208 | { | ||
3209 | struct ks8695_priv *ksp = netdev_priv(ndev); | ||
3210 | diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c | ||
3211 | index 2fc5cd56c0a8..8dc1f0277117 100644 | ||
3212 | --- a/drivers/net/ethernet/micrel/ks8851_mll.c | ||
3213 | +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | ||
3214 | @@ -1020,9 +1020,9 @@ static void ks_write_qmu(struct ks_net *ks, u8 *pdata, u16 len) | ||
3215 | * spin_lock_irqsave is required because tx and rx should be mutual exclusive. | ||
3216 | * So while tx is in-progress, prevent IRQ interrupt from happenning. | ||
3217 | */ | ||
3218 | -static int ks_start_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
3219 | +static netdev_tx_t ks_start_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
3220 | { | ||
3221 | - int retv = NETDEV_TX_OK; | ||
3222 | + netdev_tx_t retv = NETDEV_TX_OK; | ||
3223 | struct ks_net *ks = netdev_priv(netdev); | ||
3224 | |||
3225 | disable_irq(netdev->irq); | ||
3226 | diff --git a/drivers/net/ethernet/smsc/smc911x.c b/drivers/net/ethernet/smsc/smc911x.c | ||
3227 | index cb49c9654f0a..323b3ac16bc0 100644 | ||
3228 | --- a/drivers/net/ethernet/smsc/smc911x.c | ||
3229 | +++ b/drivers/net/ethernet/smsc/smc911x.c | ||
3230 | @@ -514,7 +514,8 @@ static void smc911x_hardware_send_pkt(struct net_device *dev) | ||
3231 | * now, or set the card to generates an interrupt when ready | ||
3232 | * for the packet. | ||
3233 | */ | ||
3234 | -static int smc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3235 | +static netdev_tx_t | ||
3236 | +smc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3237 | { | ||
3238 | struct smc911x_local *lp = netdev_priv(dev); | ||
3239 | unsigned int free; | ||
3240 | diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c | ||
3241 | index 73212590d04a..b0c72167bade 100644 | ||
3242 | --- a/drivers/net/ethernet/smsc/smc91x.c | ||
3243 | +++ b/drivers/net/ethernet/smsc/smc91x.c | ||
3244 | @@ -637,7 +637,8 @@ done: if (!THROTTLE_TX_PKTS) | ||
3245 | * now, or set the card to generates an interrupt when ready | ||
3246 | * for the packet. | ||
3247 | */ | ||
3248 | -static int smc_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3249 | +static netdev_tx_t | ||
3250 | +smc_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3251 | { | ||
3252 | struct smc_local *lp = netdev_priv(dev); | ||
3253 | void __iomem *ioaddr = lp->base; | ||
3254 | diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c | ||
3255 | index 734caa7a557b..4143659615e1 100644 | ||
3256 | --- a/drivers/net/ethernet/smsc/smsc911x.c | ||
3257 | +++ b/drivers/net/ethernet/smsc/smsc911x.c | ||
3258 | @@ -1776,7 +1776,8 @@ static int smsc911x_stop(struct net_device *dev) | ||
3259 | } | ||
3260 | |||
3261 | /* Entry point for transmitting a packet */ | ||
3262 | -static int smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3263 | +static netdev_tx_t | ||
3264 | +smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3265 | { | ||
3266 | struct smsc911x_data *pdata = netdev_priv(dev); | ||
3267 | unsigned int freespace; | ||
3268 | diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_net.c b/drivers/net/ethernet/toshiba/ps3_gelic_net.c | ||
3269 | index 272f2b1cb7ad..34f843795531 100644 | ||
3270 | --- a/drivers/net/ethernet/toshiba/ps3_gelic_net.c | ||
3271 | +++ b/drivers/net/ethernet/toshiba/ps3_gelic_net.c | ||
3272 | @@ -845,9 +845,9 @@ static int gelic_card_kick_txdma(struct gelic_card *card, | ||
3273 | * @skb: packet to send out | ||
3274 | * @netdev: interface device structure | ||
3275 | * | ||
3276 | - * returns 0 on success, <0 on failure | ||
3277 | + * returns NETDEV_TX_OK on success, NETDEV_TX_BUSY on failure | ||
3278 | */ | ||
3279 | -int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
3280 | +netdev_tx_t gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
3281 | { | ||
3282 | struct gelic_card *card = netdev_card(netdev); | ||
3283 | struct gelic_descr *descr; | ||
3284 | diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_net.h b/drivers/net/ethernet/toshiba/ps3_gelic_net.h | ||
3285 | index 8505196be9f5..d123644bd720 100644 | ||
3286 | --- a/drivers/net/ethernet/toshiba/ps3_gelic_net.h | ||
3287 | +++ b/drivers/net/ethernet/toshiba/ps3_gelic_net.h | ||
3288 | @@ -370,7 +370,7 @@ void gelic_card_up(struct gelic_card *card); | ||
3289 | void gelic_card_down(struct gelic_card *card); | ||
3290 | int gelic_net_open(struct net_device *netdev); | ||
3291 | int gelic_net_stop(struct net_device *netdev); | ||
3292 | -int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev); | ||
3293 | +netdev_tx_t gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev); | ||
3294 | void gelic_net_set_multi(struct net_device *netdev); | ||
3295 | void gelic_net_tx_timeout(struct net_device *netdev); | ||
3296 | int gelic_net_change_mtu(struct net_device *netdev, int new_mtu); | ||
3297 | diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c | ||
3298 | index 36a6e8b54d94..108598794621 100644 | ||
3299 | --- a/drivers/net/ethernet/toshiba/spider_net.c | ||
3300 | +++ b/drivers/net/ethernet/toshiba/spider_net.c | ||
3301 | @@ -880,9 +880,9 @@ out: | ||
3302 | * @skb: packet to send out | ||
3303 | * @netdev: interface device structure | ||
3304 | * | ||
3305 | - * returns 0 on success, !0 on failure | ||
3306 | + * returns NETDEV_TX_OK on success, NETDEV_TX_BUSY on failure | ||
3307 | */ | ||
3308 | -static int | ||
3309 | +static netdev_tx_t | ||
3310 | spider_net_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
3311 | { | ||
3312 | int cnt; | ||
3313 | diff --git a/drivers/net/ethernet/toshiba/tc35815.c b/drivers/net/ethernet/toshiba/tc35815.c | ||
3314 | index 47ebac456ae5..9b84ee736fdc 100644 | ||
3315 | --- a/drivers/net/ethernet/toshiba/tc35815.c | ||
3316 | +++ b/drivers/net/ethernet/toshiba/tc35815.c | ||
3317 | @@ -474,7 +474,8 @@ static void free_rxbuf_skb(struct pci_dev *hwdev, struct sk_buff *skb, dma_addr_ | ||
3318 | /* Index to functions, as function prototypes. */ | ||
3319 | |||
3320 | static int tc35815_open(struct net_device *dev); | ||
3321 | -static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev); | ||
3322 | +static netdev_tx_t tc35815_send_packet(struct sk_buff *skb, | ||
3323 | + struct net_device *dev); | ||
3324 | static irqreturn_t tc35815_interrupt(int irq, void *dev_id); | ||
3325 | static int tc35815_rx(struct net_device *dev, int limit); | ||
3326 | static int tc35815_poll(struct napi_struct *napi, int budget); | ||
3327 | @@ -1249,7 +1250,8 @@ tc35815_open(struct net_device *dev) | ||
3328 | * invariant will hold if you make sure that the netif_*_queue() | ||
3329 | * calls are done at the proper times. | ||
3330 | */ | ||
3331 | -static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev) | ||
3332 | +static netdev_tx_t | ||
3333 | +tc35815_send_packet(struct sk_buff *skb, struct net_device *dev) | ||
3334 | { | ||
3335 | struct tc35815_local *lp = netdev_priv(dev); | ||
3336 | struct TxFD *txfd; | ||
3337 | diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c b/drivers/net/ethernet/xilinx/ll_temac_main.c | ||
3338 | index a9bd665fd122..545f60877bb7 100644 | ||
3339 | --- a/drivers/net/ethernet/xilinx/ll_temac_main.c | ||
3340 | +++ b/drivers/net/ethernet/xilinx/ll_temac_main.c | ||
3341 | @@ -673,7 +673,8 @@ static inline int temac_check_tx_bd_space(struct temac_local *lp, int num_frag) | ||
3342 | return 0; | ||
3343 | } | ||
3344 | |||
3345 | -static int temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | ||
3346 | +static netdev_tx_t | ||
3347 | +temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) | ||
3348 | { | ||
3349 | struct temac_local *lp = netdev_priv(ndev); | ||
3350 | struct cdmac_bd *cur_p; | ||
3351 | diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c | ||
3352 | index 5f21ddff9e0f..46fcf3ec2caf 100644 | ||
3353 | --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c | ||
3354 | +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c | ||
3355 | @@ -655,7 +655,8 @@ static inline int axienet_check_tx_bd_space(struct axienet_local *lp, | ||
3356 | * start the transmission. Additionally if checksum offloading is supported, | ||
3357 | * it populates AXI Stream Control fields with appropriate values. | ||
3358 | */ | ||
3359 | -static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) | ||
3360 | +static netdev_tx_t | ||
3361 | +axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) | ||
3362 | { | ||
3363 | u32 ii; | ||
3364 | u32 num_frag; | ||
3365 | diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c | ||
3366 | index aa02a03a6d8d..034b36442ee7 100644 | ||
3367 | --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c | ||
3368 | +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c | ||
3369 | @@ -1005,9 +1005,10 @@ static int xemaclite_close(struct net_device *dev) | ||
3370 | * deferred and the Tx queue is stopped so that the deferred socket buffer can | ||
3371 | * be transmitted when the Emaclite device is free to transmit data. | ||
3372 | * | ||
3373 | - * Return: 0, always. | ||
3374 | + * Return: NETDEV_TX_OK, always. | ||
3375 | */ | ||
3376 | -static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev) | ||
3377 | +static netdev_tx_t | ||
3378 | +xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev) | ||
3379 | { | ||
3380 | struct net_local *lp = netdev_priv(dev); | ||
3381 | struct sk_buff *new_skb; | ||
3382 | @@ -1028,7 +1029,7 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev) | ||
3383 | /* Take the time stamp now, since we can't do this in an ISR. */ | ||
3384 | skb_tx_timestamp(new_skb); | ||
3385 | spin_unlock_irqrestore(&lp->reset_lock, flags); | ||
3386 | - return 0; | ||
3387 | + return NETDEV_TX_OK; | ||
3388 | } | ||
3389 | spin_unlock_irqrestore(&lp->reset_lock, flags); | ||
3390 | |||
3391 | @@ -1037,7 +1038,7 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev) | ||
3392 | dev->stats.tx_bytes += len; | ||
3393 | dev_consume_skb_any(new_skb); | ||
3394 | |||
3395 | - return 0; | ||
3396 | + return NETDEV_TX_OK; | ||
3397 | } | ||
3398 | |||
3399 | /** | ||
3400 | diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c | ||
3401 | index 9ed6d1c1ee45..b2317b3a542a 100644 | ||
3402 | --- a/drivers/net/slip/slip.c | ||
3403 | +++ b/drivers/net/slip/slip.c | ||
3404 | @@ -860,6 +860,7 @@ err_free_chan: | ||
3405 | sl->tty = NULL; | ||
3406 | tty->disc_data = NULL; | ||
3407 | clear_bit(SLF_INUSE, &sl->flags); | ||
3408 | + free_netdev(sl->dev); | ||
3409 | |||
3410 | err_exit: | ||
3411 | rtnl_unlock(); | ||
3412 | diff --git a/drivers/net/usb/ax88172a.c b/drivers/net/usb/ax88172a.c | ||
3413 | index 49a3bc107d05..2c50497cc4ed 100644 | ||
3414 | --- a/drivers/net/usb/ax88172a.c | ||
3415 | +++ b/drivers/net/usb/ax88172a.c | ||
3416 | @@ -215,7 +215,7 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf) | ||
3417 | |||
3418 | /* Get the MAC address */ | ||
3419 | ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, buf, 0); | ||
3420 | - if (ret < 0) { | ||
3421 | + if (ret < ETH_ALEN) { | ||
3422 | netdev_err(dev->net, "Failed to read MAC address: %d\n", ret); | ||
3423 | goto free; | ||
3424 | } | ||
3425 | diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c | ||
3426 | index cbb9b4343d1e..be4e56826daf 100644 | ||
3427 | --- a/drivers/net/usb/cdc_ncm.c | ||
3428 | +++ b/drivers/net/usb/cdc_ncm.c | ||
3429 | @@ -577,7 +577,7 @@ static void cdc_ncm_set_dgram_size(struct usbnet *dev, int new_size) | ||
3430 | err = usbnet_read_cmd(dev, USB_CDC_GET_MAX_DATAGRAM_SIZE, | ||
3431 | USB_TYPE_CLASS | USB_DIR_IN | USB_RECIP_INTERFACE, | ||
3432 | 0, iface_no, &max_datagram_size, sizeof(max_datagram_size)); | ||
3433 | - if (err < sizeof(max_datagram_size)) { | ||
3434 | + if (err != sizeof(max_datagram_size)) { | ||
3435 | dev_dbg(&dev->intf->dev, "GET_MAX_DATAGRAM_SIZE failed\n"); | ||
3436 | goto out; | ||
3437 | } | ||
3438 | diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c | ||
3439 | index e143a7fe9320..a3f9d8f05db4 100644 | ||
3440 | --- a/drivers/net/usb/lan78xx.c | ||
3441 | +++ b/drivers/net/usb/lan78xx.c | ||
3442 | @@ -2621,6 +2621,11 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) | ||
3443 | int i; | ||
3444 | |||
3445 | ret = lan78xx_get_endpoints(dev, intf); | ||
3446 | + if (ret) { | ||
3447 | + netdev_warn(dev->net, "lan78xx_get_endpoints failed: %d\n", | ||
3448 | + ret); | ||
3449 | + return ret; | ||
3450 | + } | ||
3451 | |||
3452 | dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); | ||
3453 | |||
3454 | diff --git a/drivers/net/wireless/ath/ath10k/ahb.c b/drivers/net/wireless/ath/ath10k/ahb.c | ||
3455 | index da770af83036..125b5c31b2b0 100644 | ||
3456 | --- a/drivers/net/wireless/ath/ath10k/ahb.c | ||
3457 | +++ b/drivers/net/wireless/ath/ath10k/ahb.c | ||
3458 | @@ -658,10 +658,10 @@ static void ath10k_ahb_hif_stop(struct ath10k *ar) | ||
3459 | ath10k_ahb_irq_disable(ar); | ||
3460 | synchronize_irq(ar_ahb->irq); | ||
3461 | |||
3462 | - ath10k_pci_flush(ar); | ||
3463 | - | ||
3464 | napi_synchronize(&ar->napi); | ||
3465 | napi_disable(&ar->napi); | ||
3466 | + | ||
3467 | + ath10k_pci_flush(ar); | ||
3468 | } | ||
3469 | |||
3470 | static int ath10k_ahb_hif_power_up(struct ath10k *ar) | ||
3471 | diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h | ||
3472 | index 90c0c4a7175d..414153cd5784 100644 | ||
3473 | --- a/drivers/net/wireless/ath/ath10k/core.h | ||
3474 | +++ b/drivers/net/wireless/ath/ath10k/core.h | ||
3475 | @@ -811,6 +811,7 @@ struct ath10k { | ||
3476 | |||
3477 | struct completion install_key_done; | ||
3478 | |||
3479 | + int last_wmi_vdev_start_status; | ||
3480 | struct completion vdev_setup_done; | ||
3481 | |||
3482 | struct workqueue_struct *workqueue; | ||
3483 | diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c | ||
3484 | index 1588fe8110d0..2294ba311c47 100644 | ||
3485 | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||
3486 | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||
3487 | @@ -947,7 +947,7 @@ static inline int ath10k_vdev_setup_sync(struct ath10k *ar) | ||
3488 | if (time_left == 0) | ||
3489 | return -ETIMEDOUT; | ||
3490 | |||
3491 | - return 0; | ||
3492 | + return ar->last_wmi_vdev_start_status; | ||
3493 | } | ||
3494 | |||
3495 | static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) | ||
3496 | diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c | ||
3497 | index 25b8d501d437..b7bac14d1487 100644 | ||
3498 | --- a/drivers/net/wireless/ath/ath10k/pci.c | ||
3499 | +++ b/drivers/net/wireless/ath/ath10k/pci.c | ||
3500 | @@ -1781,9 +1781,9 @@ static void ath10k_pci_hif_stop(struct ath10k *ar) | ||
3501 | |||
3502 | ath10k_pci_irq_disable(ar); | ||
3503 | ath10k_pci_irq_sync(ar); | ||
3504 | - ath10k_pci_flush(ar); | ||
3505 | napi_synchronize(&ar->napi); | ||
3506 | napi_disable(&ar->napi); | ||
3507 | + ath10k_pci_flush(ar); | ||
3508 | |||
3509 | spin_lock_irqsave(&ar_pci->ps_lock, flags); | ||
3510 | WARN_ON(ar_pci->ps_wake_refcount > 0); | ||
3511 | diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c | ||
3512 | index bbfe7be214e1..af3bc06b4aed 100644 | ||
3513 | --- a/drivers/net/wireless/ath/ath10k/wmi.c | ||
3514 | +++ b/drivers/net/wireless/ath/ath10k/wmi.c | ||
3515 | @@ -2384,7 +2384,8 @@ int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb) | ||
3516 | status->freq, status->band, status->signal, | ||
3517 | status->rate_idx); | ||
3518 | |||
3519 | - ieee80211_rx(ar->hw, skb); | ||
3520 | + ieee80211_rx_ni(ar->hw, skb); | ||
3521 | + | ||
3522 | return 0; | ||
3523 | } | ||
3524 | |||
3525 | @@ -3102,18 +3103,31 @@ void ath10k_wmi_event_vdev_start_resp(struct ath10k *ar, struct sk_buff *skb) | ||
3526 | { | ||
3527 | struct wmi_vdev_start_ev_arg arg = {}; | ||
3528 | int ret; | ||
3529 | + u32 status; | ||
3530 | |||
3531 | ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_START_RESP_EVENTID\n"); | ||
3532 | |||
3533 | + ar->last_wmi_vdev_start_status = 0; | ||
3534 | + | ||
3535 | ret = ath10k_wmi_pull_vdev_start(ar, skb, &arg); | ||
3536 | if (ret) { | ||
3537 | ath10k_warn(ar, "failed to parse vdev start event: %d\n", ret); | ||
3538 | - return; | ||
3539 | + ar->last_wmi_vdev_start_status = ret; | ||
3540 | + goto out; | ||
3541 | } | ||
3542 | |||
3543 | - if (WARN_ON(__le32_to_cpu(arg.status))) | ||
3544 | - return; | ||
3545 | + status = __le32_to_cpu(arg.status); | ||
3546 | + if (WARN_ON_ONCE(status)) { | ||
3547 | + ath10k_warn(ar, "vdev-start-response reports status error: %d (%s)\n", | ||
3548 | + status, (status == WMI_VDEV_START_CHAN_INVALID) ? | ||
3549 | + "chan-invalid" : "unknown"); | ||
3550 | + /* Setup is done one way or another though, so we should still | ||
3551 | + * do the completion, so don't return here. | ||
3552 | + */ | ||
3553 | + ar->last_wmi_vdev_start_status = -EINVAL; | ||
3554 | + } | ||
3555 | |||
3556 | +out: | ||
3557 | complete(&ar->vdev_setup_done); | ||
3558 | } | ||
3559 | |||
3560 | diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h | ||
3561 | index 9b8562ff6698..cce028ea9b57 100644 | ||
3562 | --- a/drivers/net/wireless/ath/ath10k/wmi.h | ||
3563 | +++ b/drivers/net/wireless/ath/ath10k/wmi.h | ||
3564 | @@ -6248,11 +6248,17 @@ struct wmi_ch_info_ev_arg { | ||
3565 | __le32 rx_frame_count; | ||
3566 | }; | ||
3567 | |||
3568 | +/* From 10.4 firmware, not sure all have the same values. */ | ||
3569 | +enum wmi_vdev_start_status { | ||
3570 | + WMI_VDEV_START_OK = 0, | ||
3571 | + WMI_VDEV_START_CHAN_INVALID, | ||
3572 | +}; | ||
3573 | + | ||
3574 | struct wmi_vdev_start_ev_arg { | ||
3575 | __le32 vdev_id; | ||
3576 | __le32 req_id; | ||
3577 | __le32 resp_type; /* %WMI_VDEV_RESP_ */ | ||
3578 | - __le32 status; | ||
3579 | + __le32 status; /* See wmi_vdev_start_status enum above */ | ||
3580 | }; | ||
3581 | |||
3582 | struct wmi_peer_kick_ev_arg { | ||
3583 | diff --git a/drivers/net/wireless/ath/ath9k/common-spectral.c b/drivers/net/wireless/ath/ath9k/common-spectral.c | ||
3584 | index eedf86b67cf5..807fbe31e930 100644 | ||
3585 | --- a/drivers/net/wireless/ath/ath9k/common-spectral.c | ||
3586 | +++ b/drivers/net/wireless/ath/ath9k/common-spectral.c | ||
3587 | @@ -411,7 +411,7 @@ ath_cmn_process_ht20_40_fft(struct ath_rx_status *rs, | ||
3588 | |||
3589 | ath_dbg(common, SPECTRAL_SCAN, | ||
3590 | "Calculated new upper max 0x%X at %i\n", | ||
3591 | - tmp_mag, i); | ||
3592 | + tmp_mag, fft_sample_40.upper_max_index); | ||
3593 | } else | ||
3594 | for (i = dc_pos; i < SPECTRAL_HT20_40_NUM_BINS; i++) { | ||
3595 | if (fft_sample_40.data[i] == (upper_mag >> max_exp)) | ||
3596 | diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c | ||
3597 | index b868f02ced89..abc997427bae 100644 | ||
3598 | --- a/drivers/net/wireless/ath/ath9k/main.c | ||
3599 | +++ b/drivers/net/wireless/ath/ath9k/main.c | ||
3600 | @@ -1250,7 +1250,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, | ||
3601 | struct ath_node *an = &avp->mcast_node; | ||
3602 | |||
3603 | mutex_lock(&sc->mutex); | ||
3604 | - | ||
3605 | if (IS_ENABLED(CONFIG_ATH9K_TX99)) { | ||
3606 | if (sc->cur_chan->nvifs >= 1) { | ||
3607 | mutex_unlock(&sc->mutex); | ||
3608 | diff --git a/drivers/net/wireless/ath/ath9k/tx99.c b/drivers/net/wireless/ath/ath9k/tx99.c | ||
3609 | index 8e9480cc33e1..096902e0fdf5 100644 | ||
3610 | --- a/drivers/net/wireless/ath/ath9k/tx99.c | ||
3611 | +++ b/drivers/net/wireless/ath/ath9k/tx99.c | ||
3612 | @@ -56,11 +56,6 @@ static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc) | ||
3613 | struct sk_buff *skb; | ||
3614 | struct ath_vif *avp; | ||
3615 | |||
3616 | - if (!sc->tx99_vif) | ||
3617 | - return NULL; | ||
3618 | - | ||
3619 | - avp = (struct ath_vif *)sc->tx99_vif->drv_priv; | ||
3620 | - | ||
3621 | skb = alloc_skb(len, GFP_KERNEL); | ||
3622 | if (!skb) | ||
3623 | return NULL; | ||
3624 | @@ -77,7 +72,10 @@ static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc) | ||
3625 | memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN); | ||
3626 | memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN); | ||
3627 | |||
3628 | - hdr->seq_ctrl |= cpu_to_le16(avp->seq_no); | ||
3629 | + if (sc->tx99_vif) { | ||
3630 | + avp = (struct ath_vif *) sc->tx99_vif->drv_priv; | ||
3631 | + hdr->seq_ctrl |= cpu_to_le16(avp->seq_no); | ||
3632 | + } | ||
3633 | |||
3634 | tx_info = IEEE80211_SKB_CB(skb); | ||
3635 | memset(tx_info, 0, sizeof(*tx_info)); | ||
3636 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | ||
3637 | index f78d91b69287..aac9c97d2255 100644 | ||
3638 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | ||
3639 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | ||
3640 | @@ -74,7 +74,7 @@ | ||
3641 | #define P2P_AF_MAX_WAIT_TIME msecs_to_jiffies(2000) | ||
3642 | #define P2P_INVALID_CHANNEL -1 | ||
3643 | #define P2P_CHANNEL_SYNC_RETRY 5 | ||
3644 | -#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(1500) | ||
3645 | +#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(450) | ||
3646 | #define P2P_DEFAULT_SLEEP_TIME_VSDB 200 | ||
3647 | |||
3648 | /* WiFi P2P Public Action Frame OUI Subtypes */ | ||
3649 | @@ -1139,7 +1139,6 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) | ||
3650 | { | ||
3651 | struct afx_hdl *afx_hdl = &p2p->afx_hdl; | ||
3652 | struct brcmf_cfg80211_vif *pri_vif; | ||
3653 | - unsigned long duration; | ||
3654 | s32 retry; | ||
3655 | |||
3656 | brcmf_dbg(TRACE, "Enter\n"); | ||
3657 | @@ -1155,7 +1154,6 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) | ||
3658 | * pending action frame tx is cancelled. | ||
3659 | */ | ||
3660 | retry = 0; | ||
3661 | - duration = msecs_to_jiffies(P2P_AF_FRM_SCAN_MAX_WAIT); | ||
3662 | while ((retry < P2P_CHANNEL_SYNC_RETRY) && | ||
3663 | (afx_hdl->peer_chan == P2P_INVALID_CHANNEL)) { | ||
3664 | afx_hdl->is_listen = false; | ||
3665 | @@ -1163,7 +1161,8 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) | ||
3666 | retry); | ||
3667 | /* search peer on peer's listen channel */ | ||
3668 | schedule_work(&afx_hdl->afx_work); | ||
3669 | - wait_for_completion_timeout(&afx_hdl->act_frm_scan, duration); | ||
3670 | + wait_for_completion_timeout(&afx_hdl->act_frm_scan, | ||
3671 | + P2P_AF_FRM_SCAN_MAX_WAIT); | ||
3672 | if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) || | ||
3673 | (!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL, | ||
3674 | &p2p->status))) | ||
3675 | @@ -1176,7 +1175,7 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) | ||
3676 | afx_hdl->is_listen = true; | ||
3677 | schedule_work(&afx_hdl->afx_work); | ||
3678 | wait_for_completion_timeout(&afx_hdl->act_frm_scan, | ||
3679 | - duration); | ||
3680 | + P2P_AF_FRM_SCAN_MAX_WAIT); | ||
3681 | } | ||
3682 | if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) || | ||
3683 | (!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL, | ||
3684 | @@ -1463,10 +1462,12 @@ int brcmf_p2p_notify_action_tx_complete(struct brcmf_if *ifp, | ||
3685 | return 0; | ||
3686 | |||
3687 | if (e->event_code == BRCMF_E_ACTION_FRAME_COMPLETE) { | ||
3688 | - if (e->status == BRCMF_E_STATUS_SUCCESS) | ||
3689 | + if (e->status == BRCMF_E_STATUS_SUCCESS) { | ||
3690 | set_bit(BRCMF_P2P_STATUS_ACTION_TX_COMPLETED, | ||
3691 | &p2p->status); | ||
3692 | - else { | ||
3693 | + if (!p2p->wait_for_offchan_complete) | ||
3694 | + complete(&p2p->send_af_done); | ||
3695 | + } else { | ||
3696 | set_bit(BRCMF_P2P_STATUS_ACTION_TX_NOACK, &p2p->status); | ||
3697 | /* If there is no ack, we don't need to wait for | ||
3698 | * WLC_E_ACTION_FRAME_OFFCHAN_COMPLETE event | ||
3699 | @@ -1517,6 +1518,17 @@ static s32 brcmf_p2p_tx_action_frame(struct brcmf_p2p_info *p2p, | ||
3700 | p2p->af_sent_channel = le32_to_cpu(af_params->channel); | ||
3701 | p2p->af_tx_sent_jiffies = jiffies; | ||
3702 | |||
3703 | + if (test_bit(BRCMF_P2P_STATUS_DISCOVER_LISTEN, &p2p->status) && | ||
3704 | + p2p->af_sent_channel == | ||
3705 | + ieee80211_frequency_to_channel(p2p->remain_on_channel.center_freq)) | ||
3706 | + p2p->wait_for_offchan_complete = false; | ||
3707 | + else | ||
3708 | + p2p->wait_for_offchan_complete = true; | ||
3709 | + | ||
3710 | + brcmf_dbg(TRACE, "Waiting for %s tx completion event\n", | ||
3711 | + (p2p->wait_for_offchan_complete) ? | ||
3712 | + "off-channel" : "on-channel"); | ||
3713 | + | ||
3714 | timeout = wait_for_completion_timeout(&p2p->send_af_done, | ||
3715 | P2P_AF_MAX_WAIT_TIME); | ||
3716 | |||
3717 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | ||
3718 | index 8ce9447533ef..fbee51148904 100644 | ||
3719 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | ||
3720 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | ||
3721 | @@ -124,6 +124,7 @@ struct afx_hdl { | ||
3722 | * @gon_req_action: about to send go negotiation requets frame. | ||
3723 | * @block_gon_req_tx: drop tx go negotiation requets frame. | ||
3724 | * @p2pdev_dynamically: is p2p device if created by module param or supplicant. | ||
3725 | + * @wait_for_offchan_complete: wait for off-channel tx completion event. | ||
3726 | */ | ||
3727 | struct brcmf_p2p_info { | ||
3728 | struct brcmf_cfg80211_info *cfg; | ||
3729 | @@ -144,6 +145,7 @@ struct brcmf_p2p_info { | ||
3730 | bool gon_req_action; | ||
3731 | bool block_gon_req_tx; | ||
3732 | bool p2pdev_dynamically; | ||
3733 | + bool wait_for_offchan_complete; | ||
3734 | }; | ||
3735 | |||
3736 | s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced); | ||
3737 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c | ||
3738 | index 207d8ae1e116..19052efe53f1 100644 | ||
3739 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c | ||
3740 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c | ||
3741 | @@ -935,8 +935,10 @@ int iwl_mvm_wowlan_config_key_params(struct iwl_mvm *mvm, | ||
3742 | { | ||
3743 | struct iwl_wowlan_kek_kck_material_cmd kek_kck_cmd = {}; | ||
3744 | struct iwl_wowlan_tkip_params_cmd tkip_cmd = {}; | ||
3745 | + bool unified = fw_has_capa(&mvm->fw->ucode_capa, | ||
3746 | + IWL_UCODE_TLV_CAPA_CNSLDTD_D3_D0_IMG); | ||
3747 | struct wowlan_key_data key_data = { | ||
3748 | - .configure_keys = !d0i3, | ||
3749 | + .configure_keys = !d0i3 && !unified, | ||
3750 | .use_rsc_tsc = false, | ||
3751 | .tkip = &tkip_cmd, | ||
3752 | .use_tkip = false, | ||
3753 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | ||
3754 | index 1aa74b87599f..63dcea640d07 100644 | ||
3755 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | ||
3756 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | ||
3757 | @@ -1303,6 +1303,14 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm, | ||
3758 | break; | ||
3759 | } | ||
3760 | |||
3761 | + /* | ||
3762 | + * If we are freeing multiple frames, mark all the frames | ||
3763 | + * but the first one as acked, since they were acknowledged | ||
3764 | + * before | ||
3765 | + * */ | ||
3766 | + if (skb_freed > 1) | ||
3767 | + info->flags |= IEEE80211_TX_STAT_ACK; | ||
3768 | + | ||
3769 | iwl_mvm_tx_status_check_trigger(mvm, status); | ||
3770 | |||
3771 | info->status.rates[0].count = tx_resp->failure_frame + 1; | ||
3772 | diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c | ||
3773 | index c2d5b495c179..c089540116fa 100644 | ||
3774 | --- a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c | ||
3775 | +++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c | ||
3776 | @@ -146,7 +146,7 @@ static int rtl8187_register_led(struct ieee80211_hw *dev, | ||
3777 | led->dev = dev; | ||
3778 | led->ledpin = ledpin; | ||
3779 | led->is_radio = is_radio; | ||
3780 | - strncpy(led->name, name, sizeof(led->name)); | ||
3781 | + strlcpy(led->name, name, sizeof(led->name)); | ||
3782 | |||
3783 | led->led_dev.name = led->name; | ||
3784 | led->led_dev.default_trigger = default_trigger; | ||
3785 | diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c | ||
3786 | index e1f47b6ea3b7..46008f284550 100644 | ||
3787 | --- a/drivers/net/xen-netback/interface.c | ||
3788 | +++ b/drivers/net/xen-netback/interface.c | ||
3789 | @@ -171,7 +171,8 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb, | ||
3790 | return vif->hash.mapping[skb_get_hash_raw(skb) % size]; | ||
3791 | } | ||
3792 | |||
3793 | -static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3794 | +static netdev_tx_t | ||
3795 | +xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
3796 | { | ||
3797 | struct xenvif *vif = netdev_priv(dev); | ||
3798 | struct xenvif_queue *queue = NULL; | ||
3799 | diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c | ||
3800 | index 9ca24e4d5d49..2a0c5f3b0e50 100644 | ||
3801 | --- a/drivers/nvmem/core.c | ||
3802 | +++ b/drivers/nvmem/core.c | ||
3803 | @@ -609,7 +609,7 @@ static struct nvmem_device *nvmem_find(const char *name) | ||
3804 | d = bus_find_device(&nvmem_bus_type, NULL, (void *)name, nvmem_match); | ||
3805 | |||
3806 | if (!d) | ||
3807 | - return NULL; | ||
3808 | + return ERR_PTR(-ENOENT); | ||
3809 | |||
3810 | return to_nvmem_device(d); | ||
3811 | } | ||
3812 | diff --git a/drivers/of/base.c b/drivers/of/base.c | ||
3813 | index f366af135d5b..c66cdc4307fd 100644 | ||
3814 | --- a/drivers/of/base.c | ||
3815 | +++ b/drivers/of/base.c | ||
3816 | @@ -2281,7 +2281,7 @@ struct device_node *of_find_next_cache_node(const struct device_node *np) | ||
3817 | /* OF on pmac has nodes instead of properties named "l2-cache" | ||
3818 | * beneath CPU nodes. | ||
3819 | */ | ||
3820 | - if (!strcmp(np->type, "cpu")) | ||
3821 | + if (IS_ENABLED(CONFIG_PPC_PMAC) && !strcmp(np->type, "cpu")) | ||
3822 | for_each_child_of_node(np, child) | ||
3823 | if (!strcmp(child->type, "cache")) | ||
3824 | return child; | ||
3825 | diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c | ||
3826 | index 547ca7b3f098..ddb530ee2255 100644 | ||
3827 | --- a/drivers/phy/phy-twl4030-usb.c | ||
3828 | +++ b/drivers/phy/phy-twl4030-usb.c | ||
3829 | @@ -144,6 +144,7 @@ | ||
3830 | #define PMBR1 0x0D | ||
3831 | #define GPIO_USB_4PIN_ULPI_2430C (3 << 0) | ||
3832 | |||
3833 | +static irqreturn_t twl4030_usb_irq(int irq, void *_twl); | ||
3834 | /* | ||
3835 | * If VBUS is valid or ID is ground, then we know a | ||
3836 | * cable is present and we need to be runtime-enabled | ||
3837 | @@ -392,6 +393,33 @@ static void __twl4030_phy_power(struct twl4030_usb *twl, int on) | ||
3838 | WARN_ON(twl4030_usb_write_verify(twl, PHY_PWR_CTRL, pwr) < 0); | ||
3839 | } | ||
3840 | |||
3841 | +static int __maybe_unused twl4030_usb_suspend(struct device *dev) | ||
3842 | +{ | ||
3843 | + struct twl4030_usb *twl = dev_get_drvdata(dev); | ||
3844 | + | ||
3845 | + /* | ||
3846 | + * we need enabled runtime on resume, | ||
3847 | + * so turn irq off here, so we do not get it early | ||
3848 | + * note: wakeup on usb plug works independently of this | ||
3849 | + */ | ||
3850 | + dev_dbg(twl->dev, "%s\n", __func__); | ||
3851 | + disable_irq(twl->irq); | ||
3852 | + | ||
3853 | + return 0; | ||
3854 | +} | ||
3855 | + | ||
3856 | +static int __maybe_unused twl4030_usb_resume(struct device *dev) | ||
3857 | +{ | ||
3858 | + struct twl4030_usb *twl = dev_get_drvdata(dev); | ||
3859 | + | ||
3860 | + dev_dbg(twl->dev, "%s\n", __func__); | ||
3861 | + enable_irq(twl->irq); | ||
3862 | + /* check whether cable status changed */ | ||
3863 | + twl4030_usb_irq(0, twl); | ||
3864 | + | ||
3865 | + return 0; | ||
3866 | +} | ||
3867 | + | ||
3868 | static int __maybe_unused twl4030_usb_runtime_suspend(struct device *dev) | ||
3869 | { | ||
3870 | struct twl4030_usb *twl = dev_get_drvdata(dev); | ||
3871 | @@ -652,6 +680,7 @@ static const struct phy_ops ops = { | ||
3872 | static const struct dev_pm_ops twl4030_usb_pm_ops = { | ||
3873 | SET_RUNTIME_PM_OPS(twl4030_usb_runtime_suspend, | ||
3874 | twl4030_usb_runtime_resume, NULL) | ||
3875 | + SET_SYSTEM_SLEEP_PM_OPS(twl4030_usb_suspend, twl4030_usb_resume) | ||
3876 | }; | ||
3877 | |||
3878 | static int twl4030_usb_probe(struct platform_device *pdev) | ||
3879 | diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c | ||
3880 | index 88ba9c50cc8e..b596f45426ea 100644 | ||
3881 | --- a/drivers/pinctrl/pinctrl-at91-pio4.c | ||
3882 | +++ b/drivers/pinctrl/pinctrl-at91-pio4.c | ||
3883 | @@ -479,7 +479,6 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev, | ||
3884 | unsigned num_pins, num_configs, reserve; | ||
3885 | unsigned long *configs; | ||
3886 | struct property *pins; | ||
3887 | - bool has_config; | ||
3888 | u32 pinfunc; | ||
3889 | int ret, i; | ||
3890 | |||
3891 | @@ -495,9 +494,6 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev, | ||
3892 | return ret; | ||
3893 | } | ||
3894 | |||
3895 | - if (num_configs) | ||
3896 | - has_config = true; | ||
3897 | - | ||
3898 | num_pins = pins->length / sizeof(u32); | ||
3899 | if (!num_pins) { | ||
3900 | dev_err(pctldev->dev, "no pins found in node %s\n", | ||
3901 | @@ -511,7 +507,7 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev, | ||
3902 | * map for each pin. | ||
3903 | */ | ||
3904 | reserve = 1; | ||
3905 | - if (has_config && num_pins >= 1) | ||
3906 | + if (num_configs) | ||
3907 | reserve++; | ||
3908 | reserve *= num_pins; | ||
3909 | ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, num_maps, | ||
3910 | @@ -534,7 +530,7 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev, | ||
3911 | pinctrl_utils_add_map_mux(pctldev, map, reserved_maps, num_maps, | ||
3912 | group, func); | ||
3913 | |||
3914 | - if (has_config) { | ||
3915 | + if (num_configs) { | ||
3916 | ret = pinctrl_utils_add_map_configs(pctldev, map, | ||
3917 | reserved_maps, num_maps, group, | ||
3918 | configs, num_configs, | ||
3919 | diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c | ||
3920 | index 9f0904185909..9401a0630e80 100644 | ||
3921 | --- a/drivers/pinctrl/pinctrl-at91.c | ||
3922 | +++ b/drivers/pinctrl/pinctrl-at91.c | ||
3923 | @@ -1545,16 +1545,6 @@ void at91_pinctrl_gpio_resume(void) | ||
3924 | #define gpio_irq_set_wake NULL | ||
3925 | #endif /* CONFIG_PM */ | ||
3926 | |||
3927 | -static struct irq_chip gpio_irqchip = { | ||
3928 | - .name = "GPIO", | ||
3929 | - .irq_ack = gpio_irq_ack, | ||
3930 | - .irq_disable = gpio_irq_mask, | ||
3931 | - .irq_mask = gpio_irq_mask, | ||
3932 | - .irq_unmask = gpio_irq_unmask, | ||
3933 | - /* .irq_set_type is set dynamically */ | ||
3934 | - .irq_set_wake = gpio_irq_set_wake, | ||
3935 | -}; | ||
3936 | - | ||
3937 | static void gpio_irq_handler(struct irq_desc *desc) | ||
3938 | { | ||
3939 | struct irq_chip *chip = irq_desc_get_chip(desc); | ||
3940 | @@ -1595,12 +1585,22 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev, | ||
3941 | struct gpio_chip *gpiochip_prev = NULL; | ||
3942 | struct at91_gpio_chip *prev = NULL; | ||
3943 | struct irq_data *d = irq_get_irq_data(at91_gpio->pioc_virq); | ||
3944 | + struct irq_chip *gpio_irqchip; | ||
3945 | int ret, i; | ||
3946 | |||
3947 | + gpio_irqchip = devm_kzalloc(&pdev->dev, sizeof(*gpio_irqchip), GFP_KERNEL); | ||
3948 | + if (!gpio_irqchip) | ||
3949 | + return -ENOMEM; | ||
3950 | + | ||
3951 | at91_gpio->pioc_hwirq = irqd_to_hwirq(d); | ||
3952 | |||
3953 | - /* Setup proper .irq_set_type function */ | ||
3954 | - gpio_irqchip.irq_set_type = at91_gpio->ops->irq_type; | ||
3955 | + gpio_irqchip->name = "GPIO"; | ||
3956 | + gpio_irqchip->irq_ack = gpio_irq_ack; | ||
3957 | + gpio_irqchip->irq_disable = gpio_irq_mask; | ||
3958 | + gpio_irqchip->irq_mask = gpio_irq_mask; | ||
3959 | + gpio_irqchip->irq_unmask = gpio_irq_unmask; | ||
3960 | + gpio_irqchip->irq_set_wake = gpio_irq_set_wake, | ||
3961 | + gpio_irqchip->irq_set_type = at91_gpio->ops->irq_type; | ||
3962 | |||
3963 | /* Disable irqs of this PIO controller */ | ||
3964 | writel_relaxed(~0, at91_gpio->regbase + PIO_IDR); | ||
3965 | @@ -1611,7 +1611,7 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev, | ||
3966 | * interrupt. | ||
3967 | */ | ||
3968 | ret = gpiochip_irqchip_add(&at91_gpio->chip, | ||
3969 | - &gpio_irqchip, | ||
3970 | + gpio_irqchip, | ||
3971 | 0, | ||
3972 | handle_edge_irq, | ||
3973 | IRQ_TYPE_NONE); | ||
3974 | @@ -1629,7 +1629,7 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev, | ||
3975 | if (!gpiochip_prev) { | ||
3976 | /* Then register the chain on the parent IRQ */ | ||
3977 | gpiochip_set_chained_irqchip(&at91_gpio->chip, | ||
3978 | - &gpio_irqchip, | ||
3979 | + gpio_irqchip, | ||
3980 | at91_gpio->pioc_virq, | ||
3981 | gpio_irq_handler); | ||
3982 | return 0; | ||
3983 | diff --git a/drivers/power/reset/at91-sama5d2_shdwc.c b/drivers/power/reset/at91-sama5d2_shdwc.c | ||
3984 | index 90b0b5a70ce5..04ca990e8f6c 100644 | ||
3985 | --- a/drivers/power/reset/at91-sama5d2_shdwc.c | ||
3986 | +++ b/drivers/power/reset/at91-sama5d2_shdwc.c | ||
3987 | @@ -246,6 +246,9 @@ static int __init at91_shdwc_probe(struct platform_device *pdev) | ||
3988 | if (!pdev->dev.of_node) | ||
3989 | return -ENODEV; | ||
3990 | |||
3991 | + if (at91_shdwc) | ||
3992 | + return -EBUSY; | ||
3993 | + | ||
3994 | at91_shdwc = devm_kzalloc(&pdev->dev, sizeof(*at91_shdwc), GFP_KERNEL); | ||
3995 | if (!at91_shdwc) | ||
3996 | return -ENOMEM; | ||
3997 | diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c | ||
3998 | index 2199f673118c..ea8c26a108f0 100644 | ||
3999 | --- a/drivers/power/supply/ab8500_fg.c | ||
4000 | +++ b/drivers/power/supply/ab8500_fg.c | ||
4001 | @@ -2437,17 +2437,14 @@ static ssize_t charge_full_store(struct ab8500_fg *di, const char *buf, | ||
4002 | size_t count) | ||
4003 | { | ||
4004 | unsigned long charge_full; | ||
4005 | - ssize_t ret; | ||
4006 | + int ret; | ||
4007 | |||
4008 | ret = kstrtoul(buf, 10, &charge_full); | ||
4009 | + if (ret) | ||
4010 | + return ret; | ||
4011 | |||
4012 | - dev_dbg(di->dev, "Ret %zd charge_full %lu", ret, charge_full); | ||
4013 | - | ||
4014 | - if (!ret) { | ||
4015 | - di->bat_cap.max_mah = (int) charge_full; | ||
4016 | - ret = count; | ||
4017 | - } | ||
4018 | - return ret; | ||
4019 | + di->bat_cap.max_mah = (int) charge_full; | ||
4020 | + return count; | ||
4021 | } | ||
4022 | |||
4023 | static ssize_t charge_now_show(struct ab8500_fg *di, char *buf) | ||
4024 | @@ -2459,20 +2456,16 @@ static ssize_t charge_now_store(struct ab8500_fg *di, const char *buf, | ||
4025 | size_t count) | ||
4026 | { | ||
4027 | unsigned long charge_now; | ||
4028 | - ssize_t ret; | ||
4029 | + int ret; | ||
4030 | |||
4031 | ret = kstrtoul(buf, 10, &charge_now); | ||
4032 | + if (ret) | ||
4033 | + return ret; | ||
4034 | |||
4035 | - dev_dbg(di->dev, "Ret %zd charge_now %lu was %d", | ||
4036 | - ret, charge_now, di->bat_cap.prev_mah); | ||
4037 | - | ||
4038 | - if (!ret) { | ||
4039 | - di->bat_cap.user_mah = (int) charge_now; | ||
4040 | - di->flags.user_cap = true; | ||
4041 | - ret = count; | ||
4042 | - queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); | ||
4043 | - } | ||
4044 | - return ret; | ||
4045 | + di->bat_cap.user_mah = (int) charge_now; | ||
4046 | + di->flags.user_cap = true; | ||
4047 | + queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); | ||
4048 | + return count; | ||
4049 | } | ||
4050 | |||
4051 | static struct ab8500_fg_sysfs_entry charge_full_attr = | ||
4052 | diff --git a/drivers/power/supply/max8998_charger.c b/drivers/power/supply/max8998_charger.c | ||
4053 | index b64cf0f14142..66438029bdd0 100644 | ||
4054 | --- a/drivers/power/supply/max8998_charger.c | ||
4055 | +++ b/drivers/power/supply/max8998_charger.c | ||
4056 | @@ -85,7 +85,7 @@ static const struct power_supply_desc max8998_battery_desc = { | ||
4057 | static int max8998_battery_probe(struct platform_device *pdev) | ||
4058 | { | ||
4059 | struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent); | ||
4060 | - struct max8998_platform_data *pdata = dev_get_platdata(iodev->dev); | ||
4061 | + struct max8998_platform_data *pdata = iodev->pdata; | ||
4062 | struct power_supply_config psy_cfg = {}; | ||
4063 | struct max8998_battery_data *max8998; | ||
4064 | struct i2c_client *i2c; | ||
4065 | diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c | ||
4066 | index bcd4dc304f27..5b1f147b11cb 100644 | ||
4067 | --- a/drivers/power/supply/twl4030_charger.c | ||
4068 | +++ b/drivers/power/supply/twl4030_charger.c | ||
4069 | @@ -449,7 +449,8 @@ static void twl4030_current_worker(struct work_struct *data) | ||
4070 | |||
4071 | if (v < USB_MIN_VOLT) { | ||
4072 | /* Back up and stop adjusting. */ | ||
4073 | - bci->usb_cur -= USB_CUR_STEP; | ||
4074 | + if (bci->usb_cur >= USB_CUR_STEP) | ||
4075 | + bci->usb_cur -= USB_CUR_STEP; | ||
4076 | bci->usb_cur_target = bci->usb_cur; | ||
4077 | } else if (bci->usb_cur >= bci->usb_cur_target || | ||
4078 | bci->usb_cur + USB_CUR_STEP > USB_MAX_CURRENT) { | ||
4079 | @@ -468,6 +469,7 @@ static void twl4030_current_worker(struct work_struct *data) | ||
4080 | static int twl4030_charger_enable_usb(struct twl4030_bci *bci, bool enable) | ||
4081 | { | ||
4082 | int ret; | ||
4083 | + u32 reg; | ||
4084 | |||
4085 | if (bci->usb_mode == CHARGE_OFF) | ||
4086 | enable = false; | ||
4087 | @@ -481,14 +483,38 @@ static int twl4030_charger_enable_usb(struct twl4030_bci *bci, bool enable) | ||
4088 | bci->usb_enabled = 1; | ||
4089 | } | ||
4090 | |||
4091 | - if (bci->usb_mode == CHARGE_AUTO) | ||
4092 | + if (bci->usb_mode == CHARGE_AUTO) { | ||
4093 | + /* Enable interrupts now. */ | ||
4094 | + reg = ~(u32)(TWL4030_ICHGLOW | TWL4030_ICHGEOC | | ||
4095 | + TWL4030_TBATOR2 | TWL4030_TBATOR1 | | ||
4096 | + TWL4030_BATSTS); | ||
4097 | + ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg, | ||
4098 | + TWL4030_INTERRUPTS_BCIIMR1A); | ||
4099 | + if (ret < 0) { | ||
4100 | + dev_err(bci->dev, | ||
4101 | + "failed to unmask interrupts: %d\n", | ||
4102 | + ret); | ||
4103 | + return ret; | ||
4104 | + } | ||
4105 | /* forcing the field BCIAUTOUSB (BOOT_BCI[1]) to 1 */ | ||
4106 | ret = twl4030_clear_set_boot_bci(0, TWL4030_BCIAUTOUSB); | ||
4107 | + } | ||
4108 | |||
4109 | /* forcing USBFASTMCHG(BCIMFSTS4[2]) to 1 */ | ||
4110 | ret = twl4030_clear_set(TWL_MODULE_MAIN_CHARGE, 0, | ||
4111 | TWL4030_USBFASTMCHG, TWL4030_BCIMFSTS4); | ||
4112 | if (bci->usb_mode == CHARGE_LINEAR) { | ||
4113 | + /* Enable interrupts now. */ | ||
4114 | + reg = ~(u32)(TWL4030_ICHGLOW | TWL4030_TBATOR2 | | ||
4115 | + TWL4030_TBATOR1 | TWL4030_BATSTS); | ||
4116 | + ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg, | ||
4117 | + TWL4030_INTERRUPTS_BCIIMR1A); | ||
4118 | + if (ret < 0) { | ||
4119 | + dev_err(bci->dev, | ||
4120 | + "failed to unmask interrupts: %d\n", | ||
4121 | + ret); | ||
4122 | + return ret; | ||
4123 | + } | ||
4124 | twl4030_clear_set_boot_bci(TWL4030_BCIAUTOAC|TWL4030_CVENAC, 0); | ||
4125 | /* Watch dog key: WOVF acknowledge */ | ||
4126 | ret = twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE, 0x33, | ||
4127 | diff --git a/drivers/reset/core.c b/drivers/reset/core.c | ||
4128 | index 188205a55261..d0ebca301afc 100644 | ||
4129 | --- a/drivers/reset/core.c | ||
4130 | +++ b/drivers/reset/core.c | ||
4131 | @@ -324,28 +324,29 @@ struct reset_control *__of_reset_control_get(struct device_node *node, | ||
4132 | break; | ||
4133 | } | ||
4134 | } | ||
4135 | - of_node_put(args.np); | ||
4136 | |||
4137 | if (!rcdev) { | ||
4138 | - mutex_unlock(&reset_list_mutex); | ||
4139 | - return ERR_PTR(-EPROBE_DEFER); | ||
4140 | + rstc = ERR_PTR(-EPROBE_DEFER); | ||
4141 | + goto out; | ||
4142 | } | ||
4143 | |||
4144 | if (WARN_ON(args.args_count != rcdev->of_reset_n_cells)) { | ||
4145 | - mutex_unlock(&reset_list_mutex); | ||
4146 | - return ERR_PTR(-EINVAL); | ||
4147 | + rstc = ERR_PTR(-EINVAL); | ||
4148 | + goto out; | ||
4149 | } | ||
4150 | |||
4151 | rstc_id = rcdev->of_xlate(rcdev, &args); | ||
4152 | if (rstc_id < 0) { | ||
4153 | - mutex_unlock(&reset_list_mutex); | ||
4154 | - return ERR_PTR(rstc_id); | ||
4155 | + rstc = ERR_PTR(rstc_id); | ||
4156 | + goto out; | ||
4157 | } | ||
4158 | |||
4159 | /* reset_list_mutex also protects the rcdev's reset_control list */ | ||
4160 | rstc = __reset_control_get_internal(rcdev, rstc_id, shared); | ||
4161 | |||
4162 | +out: | ||
4163 | mutex_unlock(&reset_list_mutex); | ||
4164 | + of_node_put(args.np); | ||
4165 | |||
4166 | return rstc; | ||
4167 | } | ||
4168 | diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c | ||
4169 | index 6ba4e921d2fd..51152681aba6 100644 | ||
4170 | --- a/drivers/s390/net/qeth_l2_main.c | ||
4171 | +++ b/drivers/s390/net/qeth_l2_main.c | ||
4172 | @@ -991,7 +991,10 @@ static int __qeth_l2_open(struct net_device *dev) | ||
4173 | |||
4174 | if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) { | ||
4175 | napi_enable(&card->napi); | ||
4176 | + local_bh_disable(); | ||
4177 | napi_schedule(&card->napi); | ||
4178 | + /* kick-start the NAPI softirq: */ | ||
4179 | + local_bh_enable(); | ||
4180 | } else | ||
4181 | rc = -EIO; | ||
4182 | return rc; | ||
4183 | diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c | ||
4184 | index 6e6ba1baf9c4..b40a61d9ad9e 100644 | ||
4185 | --- a/drivers/s390/net/qeth_l3_main.c | ||
4186 | +++ b/drivers/s390/net/qeth_l3_main.c | ||
4187 | @@ -3005,7 +3005,10 @@ static int __qeth_l3_open(struct net_device *dev) | ||
4188 | |||
4189 | if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) { | ||
4190 | napi_enable(&card->napi); | ||
4191 | + local_bh_disable(); | ||
4192 | napi_schedule(&card->napi); | ||
4193 | + /* kick-start the NAPI softirq: */ | ||
4194 | + local_bh_enable(); | ||
4195 | } else | ||
4196 | rc = -EIO; | ||
4197 | return rc; | ||
4198 | diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c | ||
4199 | index 3cfab8868c98..27270631c70c 100644 | ||
4200 | --- a/drivers/scsi/NCR5380.c | ||
4201 | +++ b/drivers/scsi/NCR5380.c | ||
4202 | @@ -617,16 +617,15 @@ static void complete_cmd(struct Scsi_Host *instance, | ||
4203 | |||
4204 | if (hostdata->sensing == cmd) { | ||
4205 | /* Autosense processing ends here */ | ||
4206 | - if ((cmd->result & 0xff) != SAM_STAT_GOOD) { | ||
4207 | + if (status_byte(cmd->result) != GOOD) { | ||
4208 | scsi_eh_restore_cmnd(cmd, &hostdata->ses); | ||
4209 | - set_host_byte(cmd, DID_ERROR); | ||
4210 | - } else | ||
4211 | + } else { | ||
4212 | scsi_eh_restore_cmnd(cmd, &hostdata->ses); | ||
4213 | + set_driver_byte(cmd, DRIVER_SENSE); | ||
4214 | + } | ||
4215 | hostdata->sensing = NULL; | ||
4216 | } | ||
4217 | |||
4218 | - hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); | ||
4219 | - | ||
4220 | cmd->scsi_done(cmd); | ||
4221 | } | ||
4222 | |||
4223 | @@ -1798,6 +1797,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) | ||
4224 | cmd->result = DID_ERROR << 16; | ||
4225 | complete_cmd(instance, cmd); | ||
4226 | hostdata->connected = NULL; | ||
4227 | + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); | ||
4228 | return; | ||
4229 | #endif | ||
4230 | case PHASE_DATAIN: | ||
4231 | @@ -1880,6 +1880,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) | ||
4232 | cmd, scmd_id(cmd), cmd->device->lun); | ||
4233 | |||
4234 | hostdata->connected = NULL; | ||
4235 | + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); | ||
4236 | |||
4237 | cmd->result &= ~0xffff; | ||
4238 | cmd->result |= cmd->SCp.Status; | ||
4239 | @@ -2039,6 +2040,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) | ||
4240 | NCR5380_transfer_pio(instance, &phase, &len, &data); | ||
4241 | if (msgout == ABORT) { | ||
4242 | hostdata->connected = NULL; | ||
4243 | + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); | ||
4244 | cmd->result = DID_ERROR << 16; | ||
4245 | complete_cmd(instance, cmd); | ||
4246 | maybe_release_dma_irq(instance); | ||
4247 | @@ -2101,8 +2103,11 @@ static void NCR5380_reselect(struct Scsi_Host *instance) | ||
4248 | NCR5380_write(MODE_REG, MR_BASE); | ||
4249 | |||
4250 | target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask); | ||
4251 | - | ||
4252 | - dsprintk(NDEBUG_RESELECTION, instance, "reselect\n"); | ||
4253 | + if (!target_mask || target_mask & (target_mask - 1)) { | ||
4254 | + shost_printk(KERN_WARNING, instance, | ||
4255 | + "reselect: bad target_mask 0x%02x\n", target_mask); | ||
4256 | + return; | ||
4257 | + } | ||
4258 | |||
4259 | /* | ||
4260 | * At this point, we have detected that our SCSI ID is on the bus, | ||
4261 | @@ -2116,6 +2121,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) | ||
4262 | NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY); | ||
4263 | if (NCR5380_poll_politely(instance, | ||
4264 | STATUS_REG, SR_SEL, 0, 2 * HZ) < 0) { | ||
4265 | + shost_printk(KERN_ERR, instance, "reselect: !SEL timeout\n"); | ||
4266 | NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); | ||
4267 | return; | ||
4268 | } | ||
4269 | @@ -2127,6 +2133,10 @@ static void NCR5380_reselect(struct Scsi_Host *instance) | ||
4270 | |||
4271 | if (NCR5380_poll_politely(instance, | ||
4272 | STATUS_REG, SR_REQ, SR_REQ, 2 * HZ) < 0) { | ||
4273 | + if ((NCR5380_read(STATUS_REG) & (SR_BSY | SR_SEL)) == 0) | ||
4274 | + /* BUS FREE phase */ | ||
4275 | + return; | ||
4276 | + shost_printk(KERN_ERR, instance, "reselect: REQ timeout\n"); | ||
4277 | do_abort(instance); | ||
4278 | return; | ||
4279 | } | ||
4280 | @@ -2188,13 +2198,16 @@ static void NCR5380_reselect(struct Scsi_Host *instance) | ||
4281 | dsprintk(NDEBUG_RESELECTION | NDEBUG_QUEUES, instance, | ||
4282 | "reselect: removed %p from disconnected queue\n", tmp); | ||
4283 | } else { | ||
4284 | + int target = ffs(target_mask) - 1; | ||
4285 | + | ||
4286 | shost_printk(KERN_ERR, instance, "target bitmask 0x%02x lun %d not in disconnected queue.\n", | ||
4287 | target_mask, lun); | ||
4288 | /* | ||
4289 | * Since we have an established nexus that we can't do anything | ||
4290 | * with, we must abort it. | ||
4291 | */ | ||
4292 | - do_abort(instance); | ||
4293 | + if (do_abort(instance) == 0) | ||
4294 | + hostdata->busy[target] &= ~(1 << lun); | ||
4295 | return; | ||
4296 | } | ||
4297 | |||
4298 | @@ -2356,15 +2369,16 @@ static int NCR5380_abort(struct scsi_cmnd *cmd) | ||
4299 | if (list_del_cmd(&hostdata->autosense, cmd)) { | ||
4300 | dsprintk(NDEBUG_ABORT, instance, | ||
4301 | "abort: removed %p from sense queue\n", cmd); | ||
4302 | - set_host_byte(cmd, DID_ERROR); | ||
4303 | complete_cmd(instance, cmd); | ||
4304 | } | ||
4305 | |||
4306 | out: | ||
4307 | if (result == FAILED) | ||
4308 | dsprintk(NDEBUG_ABORT, instance, "abort: failed to abort %p\n", cmd); | ||
4309 | - else | ||
4310 | + else { | ||
4311 | + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); | ||
4312 | dsprintk(NDEBUG_ABORT, instance, "abort: successfully aborted %p\n", cmd); | ||
4313 | + } | ||
4314 | |||
4315 | queue_work(hostdata->work_q, &hostdata->main_task); | ||
4316 | maybe_release_dma_irq(instance); | ||
4317 | @@ -2392,7 +2406,7 @@ static int NCR5380_bus_reset(struct scsi_cmnd *cmd) | ||
4318 | spin_lock_irqsave(&hostdata->lock, flags); | ||
4319 | |||
4320 | #if (NDEBUG & NDEBUG_ANY) | ||
4321 | - scmd_printk(KERN_INFO, cmd, __func__); | ||
4322 | + shost_printk(KERN_INFO, instance, __func__); | ||
4323 | #endif | ||
4324 | NCR5380_dprint(NDEBUG_ANY, instance); | ||
4325 | NCR5380_dprint_phase(NDEBUG_ANY, instance); | ||
4326 | @@ -2410,10 +2424,13 @@ static int NCR5380_bus_reset(struct scsi_cmnd *cmd) | ||
4327 | * commands! | ||
4328 | */ | ||
4329 | |||
4330 | - if (list_del_cmd(&hostdata->unissued, cmd)) { | ||
4331 | + list_for_each_entry(ncmd, &hostdata->unissued, list) { | ||
4332 | + struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd); | ||
4333 | + | ||
4334 | cmd->result = DID_RESET << 16; | ||
4335 | cmd->scsi_done(cmd); | ||
4336 | } | ||
4337 | + INIT_LIST_HEAD(&hostdata->unissued); | ||
4338 | |||
4339 | if (hostdata->selecting) { | ||
4340 | hostdata->selecting->result = DID_RESET << 16; | ||
4341 | @@ -2432,7 +2449,6 @@ static int NCR5380_bus_reset(struct scsi_cmnd *cmd) | ||
4342 | list_for_each_entry(ncmd, &hostdata->autosense, list) { | ||
4343 | struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd); | ||
4344 | |||
4345 | - set_host_byte(cmd, DID_RESET); | ||
4346 | cmd->scsi_done(cmd); | ||
4347 | } | ||
4348 | INIT_LIST_HEAD(&hostdata->autosense); | ||
4349 | diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c | ||
4350 | index 400eee9d7783..d44f18f773c0 100644 | ||
4351 | --- a/drivers/scsi/libsas/sas_expander.c | ||
4352 | +++ b/drivers/scsi/libsas/sas_expander.c | ||
4353 | @@ -2049,14 +2049,11 @@ static int sas_rediscover_dev(struct domain_device *dev, int phy_id, bool last) | ||
4354 | return res; | ||
4355 | } | ||
4356 | |||
4357 | - /* delete the old link */ | ||
4358 | - if (SAS_ADDR(phy->attached_sas_addr) && | ||
4359 | - SAS_ADDR(sas_addr) != SAS_ADDR(phy->attached_sas_addr)) { | ||
4360 | - SAS_DPRINTK("ex %016llx phy 0x%x replace %016llx\n", | ||
4361 | - SAS_ADDR(dev->sas_addr), phy_id, | ||
4362 | - SAS_ADDR(phy->attached_sas_addr)); | ||
4363 | - sas_unregister_devs_sas_addr(dev, phy_id, last); | ||
4364 | - } | ||
4365 | + /* we always have to delete the old device when we went here */ | ||
4366 | + SAS_DPRINTK("ex %016llx phy 0x%x replace %016llx\n", | ||
4367 | + SAS_ADDR(dev->sas_addr), phy_id, | ||
4368 | + SAS_ADDR(phy->attached_sas_addr)); | ||
4369 | + sas_unregister_devs_sas_addr(dev, phy_id, last); | ||
4370 | |||
4371 | return sas_discover_new(dev, phy_id); | ||
4372 | } | ||
4373 | diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c | ||
4374 | index 10546faac58c..f374abfb7f1f 100644 | ||
4375 | --- a/drivers/scsi/pm8001/pm8001_hwi.c | ||
4376 | +++ b/drivers/scsi/pm8001/pm8001_hwi.c | ||
4377 | @@ -1479,6 +1479,12 @@ u32 pm8001_mpi_msg_consume(struct pm8001_hba_info *pm8001_ha, | ||
4378 | } else { | ||
4379 | u32 producer_index; | ||
4380 | void *pi_virt = circularQ->pi_virt; | ||
4381 | + /* spurious interrupt during setup if | ||
4382 | + * kexec-ing and driver doing a doorbell access | ||
4383 | + * with the pre-kexec oq interrupt setup | ||
4384 | + */ | ||
4385 | + if (!pi_virt) | ||
4386 | + break; | ||
4387 | /* Update the producer index from SPC */ | ||
4388 | producer_index = pm8001_read_32(pi_virt); | ||
4389 | circularQ->producer_index = cpu_to_le32(producer_index); | ||
4390 | diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c | ||
4391 | index ce584c31d36e..e64a13f0bce1 100644 | ||
4392 | --- a/drivers/scsi/pm8001/pm8001_sas.c | ||
4393 | +++ b/drivers/scsi/pm8001/pm8001_sas.c | ||
4394 | @@ -374,6 +374,13 @@ static int pm8001_task_exec(struct sas_task *task, | ||
4395 | return 0; | ||
4396 | } | ||
4397 | pm8001_ha = pm8001_find_ha_by_dev(task->dev); | ||
4398 | + if (pm8001_ha->controller_fatal_error) { | ||
4399 | + struct task_status_struct *ts = &t->task_status; | ||
4400 | + | ||
4401 | + ts->resp = SAS_TASK_UNDELIVERED; | ||
4402 | + t->task_done(t); | ||
4403 | + return 0; | ||
4404 | + } | ||
4405 | PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n ")); | ||
4406 | spin_lock_irqsave(&pm8001_ha->lock, flags); | ||
4407 | do { | ||
4408 | @@ -466,7 +473,7 @@ err_out: | ||
4409 | dev_printk(KERN_ERR, pm8001_ha->dev, "pm8001 exec failed[%d]!\n", rc); | ||
4410 | if (!sas_protocol_ata(t->task_proto)) | ||
4411 | if (n_elem) | ||
4412 | - dma_unmap_sg(pm8001_ha->dev, t->scatter, n_elem, | ||
4413 | + dma_unmap_sg(pm8001_ha->dev, t->scatter, t->num_scatter, | ||
4414 | t->data_dir); | ||
4415 | out_done: | ||
4416 | spin_unlock_irqrestore(&pm8001_ha->lock, flags); | ||
4417 | diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h | ||
4418 | index 6628cc38316c..d8768ac41ebb 100644 | ||
4419 | --- a/drivers/scsi/pm8001/pm8001_sas.h | ||
4420 | +++ b/drivers/scsi/pm8001/pm8001_sas.h | ||
4421 | @@ -531,6 +531,7 @@ struct pm8001_hba_info { | ||
4422 | u32 logging_level; | ||
4423 | u32 fw_status; | ||
4424 | u32 smp_exp_mode; | ||
4425 | + bool controller_fatal_error; | ||
4426 | const struct firmware *fw_image; | ||
4427 | struct isr_param irq_vector[PM8001_MAX_MSIX_VEC]; | ||
4428 | }; | ||
4429 | diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c | ||
4430 | index eb4fee61df72..9edd61c063a1 100644 | ||
4431 | --- a/drivers/scsi/pm8001/pm80xx_hwi.c | ||
4432 | +++ b/drivers/scsi/pm8001/pm80xx_hwi.c | ||
4433 | @@ -572,6 +572,9 @@ static void update_main_config_table(struct pm8001_hba_info *pm8001_ha) | ||
4434 | pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size); | ||
4435 | pm8001_mw32(address, MAIN_PCS_EVENT_LOG_OPTION, | ||
4436 | pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity); | ||
4437 | + /* Update Fatal error interrupt vector */ | ||
4438 | + pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt |= | ||
4439 | + ((pm8001_ha->number_of_intr - 1) << 8); | ||
4440 | pm8001_mw32(address, MAIN_FATAL_ERROR_INTERRUPT, | ||
4441 | pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt); | ||
4442 | pm8001_mw32(address, MAIN_EVENT_CRC_CHECK, | ||
4443 | @@ -1099,6 +1102,9 @@ static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) | ||
4444 | return -EBUSY; | ||
4445 | } | ||
4446 | |||
4447 | + /* Initialize the controller fatal error flag */ | ||
4448 | + pm8001_ha->controller_fatal_error = false; | ||
4449 | + | ||
4450 | /* Initialize pci space address eg: mpi offset */ | ||
4451 | init_pci_device_addresses(pm8001_ha); | ||
4452 | init_default_table_values(pm8001_ha); | ||
4453 | @@ -1207,13 +1213,17 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha) | ||
4454 | u32 bootloader_state; | ||
4455 | u32 ibutton0, ibutton1; | ||
4456 | |||
4457 | - /* Check if MPI is in ready state to reset */ | ||
4458 | - if (mpi_uninit_check(pm8001_ha) != 0) { | ||
4459 | - PM8001_FAIL_DBG(pm8001_ha, | ||
4460 | - pm8001_printk("MPI state is not ready\n")); | ||
4461 | - return -1; | ||
4462 | + /* Process MPI table uninitialization only if FW is ready */ | ||
4463 | + if (!pm8001_ha->controller_fatal_error) { | ||
4464 | + /* Check if MPI is in ready state to reset */ | ||
4465 | + if (mpi_uninit_check(pm8001_ha) != 0) { | ||
4466 | + regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); | ||
4467 | + PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( | ||
4468 | + "MPI state is not ready scratch1 :0x%x\n", | ||
4469 | + regval)); | ||
4470 | + return -1; | ||
4471 | + } | ||
4472 | } | ||
4473 | - | ||
4474 | /* checked for reset register normal state; 0x0 */ | ||
4475 | regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); | ||
4476 | PM8001_INIT_DBG(pm8001_ha, | ||
4477 | @@ -3717,6 +3727,46 @@ static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) | ||
4478 | } | ||
4479 | } | ||
4480 | |||
4481 | +static void print_scratchpad_registers(struct pm8001_hba_info *pm8001_ha) | ||
4482 | +{ | ||
4483 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4484 | + pm8001_printk("MSGU_SCRATCH_PAD_0: 0x%x\n", | ||
4485 | + pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0))); | ||
4486 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4487 | + pm8001_printk("MSGU_SCRATCH_PAD_1:0x%x\n", | ||
4488 | + pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1))); | ||
4489 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4490 | + pm8001_printk("MSGU_SCRATCH_PAD_2: 0x%x\n", | ||
4491 | + pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2))); | ||
4492 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4493 | + pm8001_printk("MSGU_SCRATCH_PAD_3: 0x%x\n", | ||
4494 | + pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3))); | ||
4495 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4496 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_0: 0x%x\n", | ||
4497 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0))); | ||
4498 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4499 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_1: 0x%x\n", | ||
4500 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1))); | ||
4501 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4502 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_2: 0x%x\n", | ||
4503 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2))); | ||
4504 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4505 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_3: 0x%x\n", | ||
4506 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3))); | ||
4507 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4508 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_4: 0x%x\n", | ||
4509 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4))); | ||
4510 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4511 | + pm8001_printk("MSGU_HOST_SCRATCH_PAD_5: 0x%x\n", | ||
4512 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5))); | ||
4513 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4514 | + pm8001_printk("MSGU_RSVD_SCRATCH_PAD_0: 0x%x\n", | ||
4515 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6))); | ||
4516 | + PM8001_FAIL_DBG(pm8001_ha, | ||
4517 | + pm8001_printk("MSGU_RSVD_SCRATCH_PAD_1: 0x%x\n", | ||
4518 | + pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7))); | ||
4519 | +} | ||
4520 | + | ||
4521 | static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) | ||
4522 | { | ||
4523 | struct outbound_queue_table *circularQ; | ||
4524 | @@ -3724,10 +3774,28 @@ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) | ||
4525 | u8 uninitialized_var(bc); | ||
4526 | u32 ret = MPI_IO_STATUS_FAIL; | ||
4527 | unsigned long flags; | ||
4528 | + u32 regval; | ||
4529 | |||
4530 | + if (vec == (pm8001_ha->number_of_intr - 1)) { | ||
4531 | + regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); | ||
4532 | + if ((regval & SCRATCH_PAD_MIPSALL_READY) != | ||
4533 | + SCRATCH_PAD_MIPSALL_READY) { | ||
4534 | + pm8001_ha->controller_fatal_error = true; | ||
4535 | + PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( | ||
4536 | + "Firmware Fatal error! Regval:0x%x\n", regval)); | ||
4537 | + print_scratchpad_registers(pm8001_ha); | ||
4538 | + return ret; | ||
4539 | + } | ||
4540 | + } | ||
4541 | spin_lock_irqsave(&pm8001_ha->lock, flags); | ||
4542 | circularQ = &pm8001_ha->outbnd_q_tbl[vec]; | ||
4543 | do { | ||
4544 | + /* spurious interrupt during setup if kexec-ing and | ||
4545 | + * driver doing a doorbell access w/ the pre-kexec oq | ||
4546 | + * interrupt setup. | ||
4547 | + */ | ||
4548 | + if (!circularQ->pi_virt) | ||
4549 | + break; | ||
4550 | ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc); | ||
4551 | if (MPI_IO_STATUS_SUCCESS == ret) { | ||
4552 | /* process the outbound message */ | ||
4553 | diff --git a/drivers/scsi/pm8001/pm80xx_hwi.h b/drivers/scsi/pm8001/pm80xx_hwi.h | ||
4554 | index 7a443bad6163..411b414a9a0e 100644 | ||
4555 | --- a/drivers/scsi/pm8001/pm80xx_hwi.h | ||
4556 | +++ b/drivers/scsi/pm8001/pm80xx_hwi.h | ||
4557 | @@ -1288,6 +1288,9 @@ typedef struct SASProtocolTimerConfig SASProtocolTimerConfig_t; | ||
4558 | #define SCRATCH_PAD_BOOT_LOAD_SUCCESS 0x0 | ||
4559 | #define SCRATCH_PAD_IOP0_READY 0xC00 | ||
4560 | #define SCRATCH_PAD_IOP1_READY 0x3000 | ||
4561 | +#define SCRATCH_PAD_MIPSALL_READY (SCRATCH_PAD_IOP1_READY | \ | ||
4562 | + SCRATCH_PAD_IOP0_READY | \ | ||
4563 | + SCRATCH_PAD_RAAE_READY) | ||
4564 | |||
4565 | /* boot loader state */ | ||
4566 | #define SCRATCH_PAD1_BOOTSTATE_MASK 0x70 /* Bit 4-6 */ | ||
4567 | diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c | ||
4568 | index c6425e3df5a0..f1c771437752 100644 | ||
4569 | --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c | ||
4570 | +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | ||
4571 | @@ -4371,6 +4371,13 @@ static void sym_nego_rejected(struct sym_hcb *np, struct sym_tcb *tp, struct sym | ||
4572 | OUTB(np, HS_PRT, HS_BUSY); | ||
4573 | } | ||
4574 | |||
4575 | +#define sym_printk(lvl, tp, cp, fmt, v...) do { \ | ||
4576 | + if (cp) \ | ||
4577 | + scmd_printk(lvl, cp->cmd, fmt, ##v); \ | ||
4578 | + else \ | ||
4579 | + starget_printk(lvl, tp->starget, fmt, ##v); \ | ||
4580 | +} while (0) | ||
4581 | + | ||
4582 | /* | ||
4583 | * chip exception handler for programmed interrupts. | ||
4584 | */ | ||
4585 | @@ -4416,7 +4423,7 @@ static void sym_int_sir(struct sym_hcb *np) | ||
4586 | * been selected with ATN. We do not want to handle that. | ||
4587 | */ | ||
4588 | case SIR_SEL_ATN_NO_MSG_OUT: | ||
4589 | - scmd_printk(KERN_WARNING, cp->cmd, | ||
4590 | + sym_printk(KERN_WARNING, tp, cp, | ||
4591 | "No MSG OUT phase after selection with ATN\n"); | ||
4592 | goto out_stuck; | ||
4593 | /* | ||
4594 | @@ -4424,7 +4431,7 @@ static void sym_int_sir(struct sym_hcb *np) | ||
4595 | * having reselected the initiator. | ||
4596 | */ | ||
4597 | case SIR_RESEL_NO_MSG_IN: | ||
4598 | - scmd_printk(KERN_WARNING, cp->cmd, | ||
4599 | + sym_printk(KERN_WARNING, tp, cp, | ||
4600 | "No MSG IN phase after reselection\n"); | ||
4601 | goto out_stuck; | ||
4602 | /* | ||
4603 | @@ -4432,7 +4439,7 @@ static void sym_int_sir(struct sym_hcb *np) | ||
4604 | * an IDENTIFY. | ||
4605 | */ | ||
4606 | case SIR_RESEL_NO_IDENTIFY: | ||
4607 | - scmd_printk(KERN_WARNING, cp->cmd, | ||
4608 | + sym_printk(KERN_WARNING, tp, cp, | ||
4609 | "No IDENTIFY after reselection\n"); | ||
4610 | goto out_stuck; | ||
4611 | /* | ||
4612 | @@ -4461,7 +4468,7 @@ static void sym_int_sir(struct sym_hcb *np) | ||
4613 | case SIR_RESEL_ABORTED: | ||
4614 | np->lastmsg = np->msgout[0]; | ||
4615 | np->msgout[0] = M_NOOP; | ||
4616 | - scmd_printk(KERN_WARNING, cp->cmd, | ||
4617 | + sym_printk(KERN_WARNING, tp, cp, | ||
4618 | "message %x sent on bad reselection\n", np->lastmsg); | ||
4619 | goto out; | ||
4620 | /* | ||
4621 | diff --git a/drivers/spi/spi-pic32.c b/drivers/spi/spi-pic32.c | ||
4622 | index fefb688a3432..2f4df804c4d8 100644 | ||
4623 | --- a/drivers/spi/spi-pic32.c | ||
4624 | +++ b/drivers/spi/spi-pic32.c | ||
4625 | @@ -320,7 +320,7 @@ static int pic32_spi_dma_transfer(struct pic32_spi *pic32s, | ||
4626 | desc_rx = dmaengine_prep_slave_sg(master->dma_rx, | ||
4627 | xfer->rx_sg.sgl, | ||
4628 | xfer->rx_sg.nents, | ||
4629 | - DMA_FROM_DEVICE, | ||
4630 | + DMA_DEV_TO_MEM, | ||
4631 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
4632 | if (!desc_rx) { | ||
4633 | ret = -EINVAL; | ||
4634 | @@ -330,7 +330,7 @@ static int pic32_spi_dma_transfer(struct pic32_spi *pic32s, | ||
4635 | desc_tx = dmaengine_prep_slave_sg(master->dma_tx, | ||
4636 | xfer->tx_sg.sgl, | ||
4637 | xfer->tx_sg.nents, | ||
4638 | - DMA_TO_DEVICE, | ||
4639 | + DMA_MEM_TO_DEV, | ||
4640 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
4641 | if (!desc_tx) { | ||
4642 | ret = -EINVAL; | ||
4643 | diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c | ||
4644 | index 0f89c2169c24..3a94f465e8e0 100644 | ||
4645 | --- a/drivers/spi/spi-rockchip.c | ||
4646 | +++ b/drivers/spi/spi-rockchip.c | ||
4647 | @@ -443,6 +443,9 @@ static int rockchip_spi_prepare_dma(struct rockchip_spi *rs) | ||
4648 | struct dma_slave_config rxconf, txconf; | ||
4649 | struct dma_async_tx_descriptor *rxdesc, *txdesc; | ||
4650 | |||
4651 | + memset(&rxconf, 0, sizeof(rxconf)); | ||
4652 | + memset(&txconf, 0, sizeof(txconf)); | ||
4653 | + | ||
4654 | spin_lock_irqsave(&rs->lock, flags); | ||
4655 | rs->state &= ~RXBUSY; | ||
4656 | rs->state &= ~TXBUSY; | ||
4657 | diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c | ||
4658 | index 2e05046f866b..f4ea286b0121 100644 | ||
4659 | --- a/drivers/spi/spidev.c | ||
4660 | +++ b/drivers/spi/spidev.c | ||
4661 | @@ -751,11 +751,9 @@ static int spidev_probe(struct spi_device *spi) | ||
4662 | * compatible string, it is a Linux implementation thing | ||
4663 | * rather than a description of the hardware. | ||
4664 | */ | ||
4665 | - if (spi->dev.of_node && !of_match_device(spidev_dt_ids, &spi->dev)) { | ||
4666 | - dev_err(&spi->dev, "buggy DT: spidev listed directly in DT\n"); | ||
4667 | - WARN_ON(spi->dev.of_node && | ||
4668 | - !of_match_device(spidev_dt_ids, &spi->dev)); | ||
4669 | - } | ||
4670 | + WARN(spi->dev.of_node && | ||
4671 | + of_device_is_compatible(spi->dev.of_node, "spidev"), | ||
4672 | + "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node); | ||
4673 | |||
4674 | spidev_probe_acpi(spi); | ||
4675 | |||
4676 | diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c | ||
4677 | index 1d9d778828ba..515bf18c8294 100644 | ||
4678 | --- a/drivers/tty/serial/mxs-auart.c | ||
4679 | +++ b/drivers/tty/serial/mxs-auart.c | ||
4680 | @@ -1635,8 +1635,9 @@ static int mxs_auart_request_gpio_irq(struct mxs_auart_port *s) | ||
4681 | |||
4682 | /* | ||
4683 | * If something went wrong, rollback. | ||
4684 | + * Be careful: i may be unsigned. | ||
4685 | */ | ||
4686 | - while (err && (--i >= 0)) | ||
4687 | + while (err && (i-- > 0)) | ||
4688 | if (irq[i] >= 0) | ||
4689 | free_irq(irq[i], s); | ||
4690 | |||
4691 | diff --git a/drivers/usb/chipidea/otg.c b/drivers/usb/chipidea/otg.c | ||
4692 | index f36a1ac3bfbd..b8650210be0f 100644 | ||
4693 | --- a/drivers/usb/chipidea/otg.c | ||
4694 | +++ b/drivers/usb/chipidea/otg.c | ||
4695 | @@ -206,14 +206,17 @@ static void ci_otg_work(struct work_struct *work) | ||
4696 | } | ||
4697 | |||
4698 | pm_runtime_get_sync(ci->dev); | ||
4699 | + | ||
4700 | if (ci->id_event) { | ||
4701 | ci->id_event = false; | ||
4702 | ci_handle_id_switch(ci); | ||
4703 | - } else if (ci->b_sess_valid_event) { | ||
4704 | + } | ||
4705 | + | ||
4706 | + if (ci->b_sess_valid_event) { | ||
4707 | ci->b_sess_valid_event = false; | ||
4708 | ci_handle_vbus_change(ci); | ||
4709 | - } else | ||
4710 | - dev_err(ci->dev, "unexpected event occurs at %s\n", __func__); | ||
4711 | + } | ||
4712 | + | ||
4713 | pm_runtime_put_sync(ci->dev); | ||
4714 | |||
4715 | enable_irq(ci->irq); | ||
4716 | diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c | ||
4717 | index 20d02a5e418d..c6577f489d0f 100644 | ||
4718 | --- a/drivers/usb/chipidea/usbmisc_imx.c | ||
4719 | +++ b/drivers/usb/chipidea/usbmisc_imx.c | ||
4720 | @@ -273,6 +273,8 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data *data) | ||
4721 | } else if (data->oc_polarity == 1) { | ||
4722 | /* High active */ | ||
4723 | reg &= ~(MX6_BM_OVER_CUR_DIS | MX6_BM_OVER_CUR_POLARITY); | ||
4724 | + } else { | ||
4725 | + reg &= ~(MX6_BM_OVER_CUR_DIS); | ||
4726 | } | ||
4727 | writel(reg, usbmisc->base + data->index * 4); | ||
4728 | |||
4729 | diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c | ||
4730 | index d7dcd39fe12c..3d843e14447b 100644 | ||
4731 | --- a/drivers/usb/gadget/function/uvc_configfs.c | ||
4732 | +++ b/drivers/usb/gadget/function/uvc_configfs.c | ||
4733 | @@ -543,6 +543,7 @@ static int uvcg_control_class_allow_link(struct config_item *src, | ||
4734 | unlock: | ||
4735 | mutex_unlock(&opts->lock); | ||
4736 | out: | ||
4737 | + config_item_put(header); | ||
4738 | mutex_unlock(su_mutex); | ||
4739 | return ret; | ||
4740 | } | ||
4741 | @@ -584,6 +585,7 @@ static int uvcg_control_class_drop_link(struct config_item *src, | ||
4742 | unlock: | ||
4743 | mutex_unlock(&opts->lock); | ||
4744 | out: | ||
4745 | + config_item_put(header); | ||
4746 | mutex_unlock(su_mutex); | ||
4747 | return ret; | ||
4748 | } | ||
4749 | @@ -770,6 +772,7 @@ static int uvcg_streaming_header_allow_link(struct config_item *src, | ||
4750 | format_ptr->fmt = target_fmt; | ||
4751 | list_add_tail(&format_ptr->entry, &src_hdr->formats); | ||
4752 | ++src_hdr->num_fmt; | ||
4753 | + ++target_fmt->linked; | ||
4754 | |||
4755 | out: | ||
4756 | mutex_unlock(&opts->lock); | ||
4757 | @@ -808,6 +811,8 @@ static int uvcg_streaming_header_drop_link(struct config_item *src, | ||
4758 | break; | ||
4759 | } | ||
4760 | |||
4761 | + --target_fmt->linked; | ||
4762 | + | ||
4763 | out: | ||
4764 | mutex_unlock(&opts->lock); | ||
4765 | mutex_unlock(su_mutex); | ||
4766 | @@ -2047,6 +2052,7 @@ static int uvcg_streaming_class_allow_link(struct config_item *src, | ||
4767 | unlock: | ||
4768 | mutex_unlock(&opts->lock); | ||
4769 | out: | ||
4770 | + config_item_put(header); | ||
4771 | mutex_unlock(su_mutex); | ||
4772 | return ret; | ||
4773 | } | ||
4774 | @@ -2091,6 +2097,7 @@ static int uvcg_streaming_class_drop_link(struct config_item *src, | ||
4775 | unlock: | ||
4776 | mutex_unlock(&opts->lock); | ||
4777 | out: | ||
4778 | + config_item_put(header); | ||
4779 | mutex_unlock(su_mutex); | ||
4780 | return ret; | ||
4781 | } | ||
4782 | diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c | ||
4783 | index 0f01c04d7cbd..d6bab12b0b47 100644 | ||
4784 | --- a/drivers/usb/gadget/function/uvc_video.c | ||
4785 | +++ b/drivers/usb/gadget/function/uvc_video.c | ||
4786 | @@ -129,6 +129,21 @@ uvc_video_encode_isoc(struct usb_request *req, struct uvc_video *video, | ||
4787 | * Request handling | ||
4788 | */ | ||
4789 | |||
4790 | +static int uvcg_video_ep_queue(struct uvc_video *video, struct usb_request *req) | ||
4791 | +{ | ||
4792 | + int ret; | ||
4793 | + | ||
4794 | + ret = usb_ep_queue(video->ep, req, GFP_ATOMIC); | ||
4795 | + if (ret < 0) { | ||
4796 | + printk(KERN_INFO "Failed to queue request (%d).\n", ret); | ||
4797 | + /* Isochronous endpoints can't be halted. */ | ||
4798 | + if (usb_endpoint_xfer_bulk(video->ep->desc)) | ||
4799 | + usb_ep_set_halt(video->ep); | ||
4800 | + } | ||
4801 | + | ||
4802 | + return ret; | ||
4803 | +} | ||
4804 | + | ||
4805 | /* | ||
4806 | * I somehow feel that synchronisation won't be easy to achieve here. We have | ||
4807 | * three events that control USB requests submission: | ||
4808 | @@ -193,14 +208,13 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req) | ||
4809 | |||
4810 | video->encode(req, video, buf); | ||
4811 | |||
4812 | - if ((ret = usb_ep_queue(ep, req, GFP_ATOMIC)) < 0) { | ||
4813 | - printk(KERN_INFO "Failed to queue request (%d).\n", ret); | ||
4814 | - usb_ep_set_halt(ep); | ||
4815 | - spin_unlock_irqrestore(&video->queue.irqlock, flags); | ||
4816 | + ret = uvcg_video_ep_queue(video, req); | ||
4817 | + spin_unlock_irqrestore(&video->queue.irqlock, flags); | ||
4818 | + | ||
4819 | + if (ret < 0) { | ||
4820 | uvcg_queue_cancel(queue, 0); | ||
4821 | goto requeue; | ||
4822 | } | ||
4823 | - spin_unlock_irqrestore(&video->queue.irqlock, flags); | ||
4824 | |||
4825 | return; | ||
4826 | |||
4827 | @@ -320,15 +334,13 @@ int uvcg_video_pump(struct uvc_video *video) | ||
4828 | video->encode(req, video, buf); | ||
4829 | |||
4830 | /* Queue the USB request */ | ||
4831 | - ret = usb_ep_queue(video->ep, req, GFP_ATOMIC); | ||
4832 | + ret = uvcg_video_ep_queue(video, req); | ||
4833 | + spin_unlock_irqrestore(&queue->irqlock, flags); | ||
4834 | + | ||
4835 | if (ret < 0) { | ||
4836 | - printk(KERN_INFO "Failed to queue request (%d)\n", ret); | ||
4837 | - usb_ep_set_halt(video->ep); | ||
4838 | - spin_unlock_irqrestore(&queue->irqlock, flags); | ||
4839 | uvcg_queue_cancel(queue, 0); | ||
4840 | break; | ||
4841 | } | ||
4842 | - spin_unlock_irqrestore(&queue->irqlock, flags); | ||
4843 | } | ||
4844 | |||
4845 | spin_lock_irqsave(&video->req_lock, flags); | ||
4846 | diff --git a/drivers/usb/gadget/udc/fotg210-udc.c b/drivers/usb/gadget/udc/fotg210-udc.c | ||
4847 | index 95df2b3bb6a1..76e991557116 100644 | ||
4848 | --- a/drivers/usb/gadget/udc/fotg210-udc.c | ||
4849 | +++ b/drivers/usb/gadget/udc/fotg210-udc.c | ||
4850 | @@ -744,7 +744,7 @@ static void fotg210_get_status(struct fotg210_udc *fotg210, | ||
4851 | fotg210->ep0_req->length = 2; | ||
4852 | |||
4853 | spin_unlock(&fotg210->lock); | ||
4854 | - fotg210_ep_queue(fotg210->gadget.ep0, fotg210->ep0_req, GFP_KERNEL); | ||
4855 | + fotg210_ep_queue(fotg210->gadget.ep0, fotg210->ep0_req, GFP_ATOMIC); | ||
4856 | spin_lock(&fotg210->lock); | ||
4857 | } | ||
4858 | |||
4859 | diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c | ||
4860 | index 73f763c4f5f5..144674913c78 100644 | ||
4861 | --- a/drivers/usb/host/xhci-mtk-sch.c | ||
4862 | +++ b/drivers/usb/host/xhci-mtk-sch.c | ||
4863 | @@ -122,7 +122,9 @@ static void setup_sch_info(struct usb_device *udev, | ||
4864 | } | ||
4865 | |||
4866 | if (ep_type == ISOC_IN_EP || ep_type == ISOC_OUT_EP) { | ||
4867 | - if (esit_pkts <= sch_ep->esit) | ||
4868 | + if (sch_ep->esit == 1) | ||
4869 | + sch_ep->pkts = esit_pkts; | ||
4870 | + else if (esit_pkts <= sch_ep->esit) | ||
4871 | sch_ep->pkts = 1; | ||
4872 | else | ||
4873 | sch_ep->pkts = roundup_pow_of_two(esit_pkts) | ||
4874 | diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c | ||
4875 | index bbeeb2bd55a8..2c915be1db4c 100644 | ||
4876 | --- a/drivers/usb/serial/cypress_m8.c | ||
4877 | +++ b/drivers/usb/serial/cypress_m8.c | ||
4878 | @@ -773,7 +773,7 @@ send: | ||
4879 | |||
4880 | usb_fill_int_urb(port->interrupt_out_urb, port->serial->dev, | ||
4881 | usb_sndintpipe(port->serial->dev, port->interrupt_out_endpointAddress), | ||
4882 | - port->interrupt_out_buffer, port->interrupt_out_size, | ||
4883 | + port->interrupt_out_buffer, actual_size, | ||
4884 | cypress_write_int_callback, port, priv->write_urb_interval); | ||
4885 | result = usb_submit_urb(port->interrupt_out_urb, GFP_ATOMIC); | ||
4886 | if (result) { | ||
4887 | diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c | ||
4888 | index a1a712d18e02..da3f0ed18c76 100644 | ||
4889 | --- a/drivers/vfio/pci/vfio_pci.c | ||
4890 | +++ b/drivers/vfio/pci/vfio_pci.c | ||
4891 | @@ -426,10 +426,14 @@ static int vfio_pci_get_irq_count(struct vfio_pci_device *vdev, int irq_type) | ||
4892 | { | ||
4893 | if (irq_type == VFIO_PCI_INTX_IRQ_INDEX) { | ||
4894 | u8 pin; | ||
4895 | + | ||
4896 | + if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) || | ||
4897 | + vdev->nointx || vdev->pdev->is_virtfn) | ||
4898 | + return 0; | ||
4899 | + | ||
4900 | pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin); | ||
4901 | - if (IS_ENABLED(CONFIG_VFIO_PCI_INTX) && !vdev->nointx && pin) | ||
4902 | - return 1; | ||
4903 | |||
4904 | + return pin ? 1 : 0; | ||
4905 | } else if (irq_type == VFIO_PCI_MSI_IRQ_INDEX) { | ||
4906 | u8 pos; | ||
4907 | u16 flags; | ||
4908 | diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c | ||
4909 | index 7b8a957b008d..84905d074c4f 100644 | ||
4910 | --- a/drivers/vfio/pci/vfio_pci_config.c | ||
4911 | +++ b/drivers/vfio/pci/vfio_pci_config.c | ||
4912 | @@ -1182,8 +1182,10 @@ static int vfio_msi_cap_len(struct vfio_pci_device *vdev, u8 pos) | ||
4913 | return -ENOMEM; | ||
4914 | |||
4915 | ret = init_pci_cap_msi_perm(vdev->msi_perm, len, flags); | ||
4916 | - if (ret) | ||
4917 | + if (ret) { | ||
4918 | + kfree(vdev->msi_perm); | ||
4919 | return ret; | ||
4920 | + } | ||
4921 | |||
4922 | return len; | ||
4923 | } | ||
4924 | @@ -1606,6 +1608,15 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev) | ||
4925 | return 0; | ||
4926 | } | ||
4927 | |||
4928 | +/* | ||
4929 | + * Nag about hardware bugs, hopefully to have vendors fix them, but at least | ||
4930 | + * to collect a list of dependencies for the VF INTx pin quirk below. | ||
4931 | + */ | ||
4932 | +static const struct pci_device_id known_bogus_vf_intx_pin[] = { | ||
4933 | + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x270c) }, | ||
4934 | + {} | ||
4935 | +}; | ||
4936 | + | ||
4937 | /* | ||
4938 | * For each device we allocate a pci_config_map that indicates the | ||
4939 | * capability occupying each dword and thus the struct perm_bits we | ||
4940 | @@ -1671,6 +1682,24 @@ int vfio_config_init(struct vfio_pci_device *vdev) | ||
4941 | if (pdev->is_virtfn) { | ||
4942 | *(__le16 *)&vconfig[PCI_VENDOR_ID] = cpu_to_le16(pdev->vendor); | ||
4943 | *(__le16 *)&vconfig[PCI_DEVICE_ID] = cpu_to_le16(pdev->device); | ||
4944 | + | ||
4945 | + /* | ||
4946 | + * Per SR-IOV spec rev 1.1, 3.4.1.18 the interrupt pin register | ||
4947 | + * does not apply to VFs and VFs must implement this register | ||
4948 | + * as read-only with value zero. Userspace is not readily able | ||
4949 | + * to identify whether a device is a VF and thus that the pin | ||
4950 | + * definition on the device is bogus should it violate this | ||
4951 | + * requirement. We already virtualize the pin register for | ||
4952 | + * other purposes, so we simply need to replace the bogus value | ||
4953 | + * and consider VFs when we determine INTx IRQ count. | ||
4954 | + */ | ||
4955 | + if (vconfig[PCI_INTERRUPT_PIN] && | ||
4956 | + !pci_match_id(known_bogus_vf_intx_pin, pdev)) | ||
4957 | + pci_warn(pdev, | ||
4958 | + "Hardware bug: VF reports bogus INTx pin %d\n", | ||
4959 | + vconfig[PCI_INTERRUPT_PIN]); | ||
4960 | + | ||
4961 | + vconfig[PCI_INTERRUPT_PIN] = 0; /* Gratuitous for good VFs */ | ||
4962 | } | ||
4963 | |||
4964 | if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) || vdev->nointx) | ||
4965 | diff --git a/drivers/video/backlight/lm3639_bl.c b/drivers/video/backlight/lm3639_bl.c | ||
4966 | index cd50df5807ea..086611c7bc03 100644 | ||
4967 | --- a/drivers/video/backlight/lm3639_bl.c | ||
4968 | +++ b/drivers/video/backlight/lm3639_bl.c | ||
4969 | @@ -400,10 +400,8 @@ static int lm3639_remove(struct i2c_client *client) | ||
4970 | |||
4971 | regmap_write(pchip->regmap, REG_ENABLE, 0x00); | ||
4972 | |||
4973 | - if (&pchip->cdev_torch) | ||
4974 | - led_classdev_unregister(&pchip->cdev_torch); | ||
4975 | - if (&pchip->cdev_flash) | ||
4976 | - led_classdev_unregister(&pchip->cdev_flash); | ||
4977 | + led_classdev_unregister(&pchip->cdev_torch); | ||
4978 | + led_classdev_unregister(&pchip->cdev_flash); | ||
4979 | if (pchip->bled) | ||
4980 | device_remove_file(&(pchip->bled->dev), &dev_attr_bled_mode); | ||
4981 | return 0; | ||
4982 | diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c | ||
4983 | index 62c0cf79674f..63ec9c71fe84 100644 | ||
4984 | --- a/drivers/video/fbdev/core/fbmon.c | ||
4985 | +++ b/drivers/video/fbdev/core/fbmon.c | ||
4986 | @@ -997,97 +997,6 @@ void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) | ||
4987 | DPRINTK("========================================\n"); | ||
4988 | } | ||
4989 | |||
4990 | -/** | ||
4991 | - * fb_edid_add_monspecs() - add monitor video modes from E-EDID data | ||
4992 | - * @edid: 128 byte array with an E-EDID block | ||
4993 | - * @spacs: monitor specs to be extended | ||
4994 | - */ | ||
4995 | -void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) | ||
4996 | -{ | ||
4997 | - unsigned char *block; | ||
4998 | - struct fb_videomode *m; | ||
4999 | - int num = 0, i; | ||
5000 | - u8 svd[64], edt[(128 - 4) / DETAILED_TIMING_DESCRIPTION_SIZE]; | ||
5001 | - u8 pos = 4, svd_n = 0; | ||
5002 | - | ||
5003 | - if (!edid) | ||
5004 | - return; | ||
5005 | - | ||
5006 | - if (!edid_checksum(edid)) | ||
5007 | - return; | ||
5008 | - | ||
5009 | - if (edid[0] != 0x2 || | ||
5010 | - edid[2] < 4 || edid[2] > 128 - DETAILED_TIMING_DESCRIPTION_SIZE) | ||
5011 | - return; | ||
5012 | - | ||
5013 | - DPRINTK(" Short Video Descriptors\n"); | ||
5014 | - | ||
5015 | - while (pos < edid[2]) { | ||
5016 | - u8 len = edid[pos] & 0x1f, type = (edid[pos] >> 5) & 7; | ||
5017 | - pr_debug("Data block %u of %u bytes\n", type, len); | ||
5018 | - if (type == 2) { | ||
5019 | - for (i = pos; i < pos + len; i++) { | ||
5020 | - u8 idx = edid[pos + i] & 0x7f; | ||
5021 | - svd[svd_n++] = idx; | ||
5022 | - pr_debug("N%sative mode #%d\n", | ||
5023 | - edid[pos + i] & 0x80 ? "" : "on-n", idx); | ||
5024 | - } | ||
5025 | - } else if (type == 3 && len >= 3) { | ||
5026 | - /* Check Vendor Specific Data Block. For HDMI, | ||
5027 | - it is always 00-0C-03 for HDMI Licensing, LLC. */ | ||
5028 | - if (edid[pos + 1] == 3 && edid[pos + 2] == 0xc && | ||
5029 | - edid[pos + 3] == 0) | ||
5030 | - specs->misc |= FB_MISC_HDMI; | ||
5031 | - } | ||
5032 | - pos += len + 1; | ||
5033 | - } | ||
5034 | - | ||
5035 | - block = edid + edid[2]; | ||
5036 | - | ||
5037 | - DPRINTK(" Extended Detailed Timings\n"); | ||
5038 | - | ||
5039 | - for (i = 0; i < (128 - edid[2]) / DETAILED_TIMING_DESCRIPTION_SIZE; | ||
5040 | - i++, block += DETAILED_TIMING_DESCRIPTION_SIZE) | ||
5041 | - if (PIXEL_CLOCK) | ||
5042 | - edt[num++] = block - edid; | ||
5043 | - | ||
5044 | - /* Yikes, EDID data is totally useless */ | ||
5045 | - if (!(num + svd_n)) | ||
5046 | - return; | ||
5047 | - | ||
5048 | - m = kzalloc((specs->modedb_len + num + svd_n) * | ||
5049 | - sizeof(struct fb_videomode), GFP_KERNEL); | ||
5050 | - | ||
5051 | - if (!m) | ||
5052 | - return; | ||
5053 | - | ||
5054 | - memcpy(m, specs->modedb, specs->modedb_len * sizeof(struct fb_videomode)); | ||
5055 | - | ||
5056 | - for (i = specs->modedb_len; i < specs->modedb_len + num; i++) { | ||
5057 | - get_detailed_timing(edid + edt[i - specs->modedb_len], &m[i]); | ||
5058 | - if (i == specs->modedb_len) | ||
5059 | - m[i].flag |= FB_MODE_IS_FIRST; | ||
5060 | - pr_debug("Adding %ux%u@%u\n", m[i].xres, m[i].yres, m[i].refresh); | ||
5061 | - } | ||
5062 | - | ||
5063 | - for (i = specs->modedb_len + num; i < specs->modedb_len + num + svd_n; i++) { | ||
5064 | - int idx = svd[i - specs->modedb_len - num]; | ||
5065 | - if (!idx || idx >= ARRAY_SIZE(cea_modes)) { | ||
5066 | - pr_warning("Reserved SVD code %d\n", idx); | ||
5067 | - } else if (!cea_modes[idx].xres) { | ||
5068 | - pr_warning("Unimplemented SVD code %d\n", idx); | ||
5069 | - } else { | ||
5070 | - memcpy(&m[i], cea_modes + idx, sizeof(m[i])); | ||
5071 | - pr_debug("Adding SVD #%d: %ux%u@%u\n", idx, | ||
5072 | - m[i].xres, m[i].yres, m[i].refresh); | ||
5073 | - } | ||
5074 | - } | ||
5075 | - | ||
5076 | - kfree(specs->modedb); | ||
5077 | - specs->modedb = m; | ||
5078 | - specs->modedb_len = specs->modedb_len + num + svd_n; | ||
5079 | -} | ||
5080 | - | ||
5081 | /* | ||
5082 | * VESA Generalized Timing Formula (GTF) | ||
5083 | */ | ||
5084 | @@ -1497,9 +1406,6 @@ int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var) | ||
5085 | void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) | ||
5086 | { | ||
5087 | } | ||
5088 | -void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) | ||
5089 | -{ | ||
5090 | -} | ||
5091 | void fb_destroy_modedb(struct fb_videomode *modedb) | ||
5092 | { | ||
5093 | } | ||
5094 | @@ -1607,7 +1513,6 @@ EXPORT_SYMBOL(fb_firmware_edid); | ||
5095 | |||
5096 | EXPORT_SYMBOL(fb_parse_edid); | ||
5097 | EXPORT_SYMBOL(fb_edid_to_monspecs); | ||
5098 | -EXPORT_SYMBOL(fb_edid_add_monspecs); | ||
5099 | EXPORT_SYMBOL(fb_get_mode); | ||
5100 | EXPORT_SYMBOL(fb_validate_mode); | ||
5101 | EXPORT_SYMBOL(fb_destroy_modedb); | ||
5102 | diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c | ||
5103 | index 455a15f70172..a9d76e1b4378 100644 | ||
5104 | --- a/drivers/video/fbdev/core/modedb.c | ||
5105 | +++ b/drivers/video/fbdev/core/modedb.c | ||
5106 | @@ -289,63 +289,6 @@ static const struct fb_videomode modedb[] = { | ||
5107 | }; | ||
5108 | |||
5109 | #ifdef CONFIG_FB_MODE_HELPERS | ||
5110 | -const struct fb_videomode cea_modes[65] = { | ||
5111 | - /* #1: 640x480p@59.94/60Hz */ | ||
5112 | - [1] = { | ||
5113 | - NULL, 60, 640, 480, 39722, 48, 16, 33, 10, 96, 2, 0, | ||
5114 | - FB_VMODE_NONINTERLACED, 0, | ||
5115 | - }, | ||
5116 | - /* #3: 720x480p@59.94/60Hz */ | ||
5117 | - [3] = { | ||
5118 | - NULL, 60, 720, 480, 37037, 60, 16, 30, 9, 62, 6, 0, | ||
5119 | - FB_VMODE_NONINTERLACED, 0, | ||
5120 | - }, | ||
5121 | - /* #5: 1920x1080i@59.94/60Hz */ | ||
5122 | - [5] = { | ||
5123 | - NULL, 60, 1920, 1080, 13763, 148, 88, 15, 2, 44, 5, | ||
5124 | - FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
5125 | - FB_VMODE_INTERLACED, 0, | ||
5126 | - }, | ||
5127 | - /* #7: 720(1440)x480iH@59.94/60Hz */ | ||
5128 | - [7] = { | ||
5129 | - NULL, 60, 1440, 480, 18554/*37108*/, 114, 38, 15, 4, 124, 3, 0, | ||
5130 | - FB_VMODE_INTERLACED, 0, | ||
5131 | - }, | ||
5132 | - /* #9: 720(1440)x240pH@59.94/60Hz */ | ||
5133 | - [9] = { | ||
5134 | - NULL, 60, 1440, 240, 18554, 114, 38, 16, 4, 124, 3, 0, | ||
5135 | - FB_VMODE_NONINTERLACED, 0, | ||
5136 | - }, | ||
5137 | - /* #18: 720x576pH@50Hz */ | ||
5138 | - [18] = { | ||
5139 | - NULL, 50, 720, 576, 37037, 68, 12, 39, 5, 64, 5, 0, | ||
5140 | - FB_VMODE_NONINTERLACED, 0, | ||
5141 | - }, | ||
5142 | - /* #19: 1280x720p@50Hz */ | ||
5143 | - [19] = { | ||
5144 | - NULL, 50, 1280, 720, 13468, 220, 440, 20, 5, 40, 5, | ||
5145 | - FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
5146 | - FB_VMODE_NONINTERLACED, 0, | ||
5147 | - }, | ||
5148 | - /* #20: 1920x1080i@50Hz */ | ||
5149 | - [20] = { | ||
5150 | - NULL, 50, 1920, 1080, 13480, 148, 528, 15, 5, 528, 5, | ||
5151 | - FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
5152 | - FB_VMODE_INTERLACED, 0, | ||
5153 | - }, | ||
5154 | - /* #32: 1920x1080p@23.98/24Hz */ | ||
5155 | - [32] = { | ||
5156 | - NULL, 24, 1920, 1080, 13468, 148, 638, 36, 4, 44, 5, | ||
5157 | - FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
5158 | - FB_VMODE_NONINTERLACED, 0, | ||
5159 | - }, | ||
5160 | - /* #35: (2880)x480p4x@59.94/60Hz */ | ||
5161 | - [35] = { | ||
5162 | - NULL, 60, 2880, 480, 9250, 240, 64, 30, 9, 248, 6, 0, | ||
5163 | - FB_VMODE_NONINTERLACED, 0, | ||
5164 | - }, | ||
5165 | -}; | ||
5166 | - | ||
5167 | const struct fb_videomode vesa_modes[] = { | ||
5168 | /* 0 640x350-85 VESA */ | ||
5169 | { NULL, 85, 640, 350, 31746, 96, 32, 60, 32, 64, 3, | ||
5170 | diff --git a/drivers/video/fbdev/sbuslib.c b/drivers/video/fbdev/sbuslib.c | ||
5171 | index 31c301d6be62..52e161dbd204 100644 | ||
5172 | --- a/drivers/video/fbdev/sbuslib.c | ||
5173 | +++ b/drivers/video/fbdev/sbuslib.c | ||
5174 | @@ -105,11 +105,11 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg, | ||
5175 | struct fbtype __user *f = (struct fbtype __user *) arg; | ||
5176 | |||
5177 | if (put_user(type, &f->fb_type) || | ||
5178 | - __put_user(info->var.yres, &f->fb_height) || | ||
5179 | - __put_user(info->var.xres, &f->fb_width) || | ||
5180 | - __put_user(fb_depth, &f->fb_depth) || | ||
5181 | - __put_user(0, &f->fb_cmsize) || | ||
5182 | - __put_user(fb_size, &f->fb_cmsize)) | ||
5183 | + put_user(info->var.yres, &f->fb_height) || | ||
5184 | + put_user(info->var.xres, &f->fb_width) || | ||
5185 | + put_user(fb_depth, &f->fb_depth) || | ||
5186 | + put_user(0, &f->fb_cmsize) || | ||
5187 | + put_user(fb_size, &f->fb_cmsize)) | ||
5188 | return -EFAULT; | ||
5189 | return 0; | ||
5190 | } | ||
5191 | @@ -124,10 +124,10 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg, | ||
5192 | unsigned int index, count, i; | ||
5193 | |||
5194 | if (get_user(index, &c->index) || | ||
5195 | - __get_user(count, &c->count) || | ||
5196 | - __get_user(ured, &c->red) || | ||
5197 | - __get_user(ugreen, &c->green) || | ||
5198 | - __get_user(ublue, &c->blue)) | ||
5199 | + get_user(count, &c->count) || | ||
5200 | + get_user(ured, &c->red) || | ||
5201 | + get_user(ugreen, &c->green) || | ||
5202 | + get_user(ublue, &c->blue)) | ||
5203 | return -EFAULT; | ||
5204 | |||
5205 | cmap.len = 1; | ||
5206 | @@ -164,13 +164,13 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg, | ||
5207 | u8 red, green, blue; | ||
5208 | |||
5209 | if (get_user(index, &c->index) || | ||
5210 | - __get_user(count, &c->count) || | ||
5211 | - __get_user(ured, &c->red) || | ||
5212 | - __get_user(ugreen, &c->green) || | ||
5213 | - __get_user(ublue, &c->blue)) | ||
5214 | + get_user(count, &c->count) || | ||
5215 | + get_user(ured, &c->red) || | ||
5216 | + get_user(ugreen, &c->green) || | ||
5217 | + get_user(ublue, &c->blue)) | ||
5218 | return -EFAULT; | ||
5219 | |||
5220 | - if (index + count > cmap->len) | ||
5221 | + if (index > cmap->len || count > cmap->len - index) | ||
5222 | return -EINVAL; | ||
5223 | |||
5224 | for (i = 0; i < count; i++) { | ||
5225 | diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c | ||
5226 | index 4b7da4409c60..5b832e83772a 100644 | ||
5227 | --- a/fs/compat_ioctl.c | ||
5228 | +++ b/fs/compat_ioctl.c | ||
5229 | @@ -160,6 +160,7 @@ struct compat_video_event { | ||
5230 | unsigned int frame_rate; | ||
5231 | } u; | ||
5232 | }; | ||
5233 | +#define VIDEO_GET_EVENT32 _IOR('o', 28, struct compat_video_event) | ||
5234 | |||
5235 | static int do_video_get_event(struct file *file, | ||
5236 | unsigned int cmd, struct compat_video_event __user *up) | ||
5237 | @@ -171,7 +172,7 @@ static int do_video_get_event(struct file *file, | ||
5238 | if (kevent == NULL) | ||
5239 | return -EFAULT; | ||
5240 | |||
5241 | - err = do_ioctl(file, cmd, (unsigned long)kevent); | ||
5242 | + err = do_ioctl(file, VIDEO_GET_EVENT, (unsigned long)kevent); | ||
5243 | if (!err) { | ||
5244 | err = convert_in_user(&kevent->type, &up->type); | ||
5245 | err |= convert_in_user(&kevent->timestamp, &up->timestamp); | ||
5246 | @@ -190,6 +191,7 @@ struct compat_video_still_picture { | ||
5247 | compat_uptr_t iFrame; | ||
5248 | int32_t size; | ||
5249 | }; | ||
5250 | +#define VIDEO_STILLPICTURE32 _IOW('o', 30, struct compat_video_still_picture) | ||
5251 | |||
5252 | static int do_video_stillpicture(struct file *file, | ||
5253 | unsigned int cmd, struct compat_video_still_picture __user *up) | ||
5254 | @@ -212,7 +214,7 @@ static int do_video_stillpicture(struct file *file, | ||
5255 | if (err) | ||
5256 | return -EFAULT; | ||
5257 | |||
5258 | - err = do_ioctl(file, cmd, (unsigned long) up_native); | ||
5259 | + err = do_ioctl(file, VIDEO_STILLPICTURE, (unsigned long) up_native); | ||
5260 | |||
5261 | return err; | ||
5262 | } | ||
5263 | @@ -1484,9 +1486,9 @@ static long do_ioctl_trans(unsigned int cmd, | ||
5264 | return rtc_ioctl(file, cmd, argp); | ||
5265 | |||
5266 | /* dvb */ | ||
5267 | - case VIDEO_GET_EVENT: | ||
5268 | + case VIDEO_GET_EVENT32: | ||
5269 | return do_video_get_event(file, cmd, argp); | ||
5270 | - case VIDEO_STILLPICTURE: | ||
5271 | + case VIDEO_STILLPICTURE32: | ||
5272 | return do_video_stillpicture(file, cmd, argp); | ||
5273 | case VIDEO_SET_SPU_PALETTE: | ||
5274 | return do_video_set_spu_palette(file, cmd, argp); | ||
5275 | diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c | ||
5276 | index 5c5ff9f6fe07..2a5e436ff8dd 100644 | ||
5277 | --- a/fs/ecryptfs/inode.c | ||
5278 | +++ b/fs/ecryptfs/inode.c | ||
5279 | @@ -326,9 +326,9 @@ static int ecryptfs_i_size_read(struct dentry *dentry, struct inode *inode) | ||
5280 | static struct dentry *ecryptfs_lookup_interpose(struct dentry *dentry, | ||
5281 | struct dentry *lower_dentry) | ||
5282 | { | ||
5283 | - struct inode *inode, *lower_inode = d_inode(lower_dentry); | ||
5284 | + struct path *path = ecryptfs_dentry_to_lower_path(dentry->d_parent); | ||
5285 | + struct inode *inode, *lower_inode; | ||
5286 | struct ecryptfs_dentry_info *dentry_info; | ||
5287 | - struct vfsmount *lower_mnt; | ||
5288 | int rc = 0; | ||
5289 | |||
5290 | dentry_info = kmem_cache_alloc(ecryptfs_dentry_info_cache, GFP_KERNEL); | ||
5291 | @@ -340,16 +340,23 @@ static struct dentry *ecryptfs_lookup_interpose(struct dentry *dentry, | ||
5292 | return ERR_PTR(-ENOMEM); | ||
5293 | } | ||
5294 | |||
5295 | - lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent)); | ||
5296 | fsstack_copy_attr_atime(d_inode(dentry->d_parent), | ||
5297 | - d_inode(lower_dentry->d_parent)); | ||
5298 | + d_inode(path->dentry)); | ||
5299 | BUG_ON(!d_count(lower_dentry)); | ||
5300 | |||
5301 | ecryptfs_set_dentry_private(dentry, dentry_info); | ||
5302 | - dentry_info->lower_path.mnt = lower_mnt; | ||
5303 | + dentry_info->lower_path.mnt = mntget(path->mnt); | ||
5304 | dentry_info->lower_path.dentry = lower_dentry; | ||
5305 | |||
5306 | - if (d_really_is_negative(lower_dentry)) { | ||
5307 | + /* | ||
5308 | + * negative dentry can go positive under us here - its parent is not | ||
5309 | + * locked. That's OK and that could happen just as we return from | ||
5310 | + * ecryptfs_lookup() anyway. Just need to be careful and fetch | ||
5311 | + * ->d_inode only once - it's not stable here. | ||
5312 | + */ | ||
5313 | + lower_inode = READ_ONCE(lower_dentry->d_inode); | ||
5314 | + | ||
5315 | + if (!lower_inode) { | ||
5316 | /* We want to add because we couldn't find in lower */ | ||
5317 | d_add(dentry, NULL); | ||
5318 | return NULL; | ||
5319 | diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c | ||
5320 | index 759056e776e5..b1d62003cda6 100644 | ||
5321 | --- a/fs/f2fs/gc.c | ||
5322 | +++ b/fs/f2fs/gc.c | ||
5323 | @@ -985,7 +985,7 @@ stop: | ||
5324 | |||
5325 | put_gc_inode(&gc_list); | ||
5326 | |||
5327 | - if (sync) | ||
5328 | + if (sync && !ret) | ||
5329 | ret = sec_freed ? 0 : -EAGAIN; | ||
5330 | return ret; | ||
5331 | } | ||
5332 | diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c | ||
5333 | index 9de1480a86bd..e87b7d7e80fc 100644 | ||
5334 | --- a/fs/f2fs/recovery.c | ||
5335 | +++ b/fs/f2fs/recovery.c | ||
5336 | @@ -179,6 +179,8 @@ static void recover_inode(struct inode *inode, struct page *page) | ||
5337 | char *name; | ||
5338 | |||
5339 | inode->i_mode = le16_to_cpu(raw->i_mode); | ||
5340 | + i_uid_write(inode, le32_to_cpu(raw->i_uid)); | ||
5341 | + i_gid_write(inode, le32_to_cpu(raw->i_gid)); | ||
5342 | f2fs_i_size_write(inode, le64_to_cpu(raw->i_size)); | ||
5343 | inode->i_atime.tv_sec = le64_to_cpu(raw->i_mtime); | ||
5344 | inode->i_ctime.tv_sec = le64_to_cpu(raw->i_ctime); | ||
5345 | diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c | ||
5346 | index 9eff18c1f3e4..e0ac676e0a35 100644 | ||
5347 | --- a/fs/f2fs/super.c | ||
5348 | +++ b/fs/f2fs/super.c | ||
5349 | @@ -1650,8 +1650,12 @@ static int init_percpu_info(struct f2fs_sb_info *sbi) | ||
5350 | if (err) | ||
5351 | return err; | ||
5352 | |||
5353 | - return percpu_counter_init(&sbi->total_valid_inode_count, 0, | ||
5354 | + err = percpu_counter_init(&sbi->total_valid_inode_count, 0, | ||
5355 | GFP_KERNEL); | ||
5356 | + if (err) | ||
5357 | + percpu_counter_destroy(&sbi->alloc_valid_block_count); | ||
5358 | + | ||
5359 | + return err; | ||
5360 | } | ||
5361 | |||
5362 | /* | ||
5363 | diff --git a/fs/fuse/control.c b/fs/fuse/control.c | ||
5364 | index e25c40c10f4f..97ac2f5843fc 100644 | ||
5365 | --- a/fs/fuse/control.c | ||
5366 | +++ b/fs/fuse/control.c | ||
5367 | @@ -107,7 +107,7 @@ static ssize_t fuse_conn_max_background_read(struct file *file, | ||
5368 | if (!fc) | ||
5369 | return 0; | ||
5370 | |||
5371 | - val = fc->max_background; | ||
5372 | + val = READ_ONCE(fc->max_background); | ||
5373 | fuse_conn_put(fc); | ||
5374 | |||
5375 | return fuse_conn_limit_read(file, buf, len, ppos, val); | ||
5376 | @@ -144,7 +144,7 @@ static ssize_t fuse_conn_congestion_threshold_read(struct file *file, | ||
5377 | if (!fc) | ||
5378 | return 0; | ||
5379 | |||
5380 | - val = fc->congestion_threshold; | ||
5381 | + val = READ_ONCE(fc->congestion_threshold); | ||
5382 | fuse_conn_put(fc); | ||
5383 | |||
5384 | return fuse_conn_limit_read(file, buf, len, ppos, val); | ||
5385 | diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c | ||
5386 | index 073126707270..f77a38755aea 100644 | ||
5387 | --- a/fs/gfs2/rgrp.c | ||
5388 | +++ b/fs/gfs2/rgrp.c | ||
5389 | @@ -1211,7 +1211,7 @@ static int update_rgrp_lvb(struct gfs2_rgrpd *rgd) | ||
5390 | rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags); | ||
5391 | rl_flags &= ~GFS2_RDF_MASK; | ||
5392 | rgd->rd_flags &= GFS2_RDF_MASK; | ||
5393 | - rgd->rd_flags |= (rl_flags | GFS2_RDF_UPTODATE | GFS2_RDF_CHECK); | ||
5394 | + rgd->rd_flags |= (rl_flags | GFS2_RDF_CHECK); | ||
5395 | if (rgd->rd_rgl->rl_unlinked == 0) | ||
5396 | rgd->rd_flags &= ~GFS2_RDF_CHECK; | ||
5397 | rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free); | ||
5398 | diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c | ||
5399 | index e3ee387a6dfe..37496d83661a 100644 | ||
5400 | --- a/fs/gfs2/super.c | ||
5401 | +++ b/fs/gfs2/super.c | ||
5402 | @@ -844,10 +844,10 @@ static int gfs2_make_fs_ro(struct gfs2_sbd *sdp) | ||
5403 | if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) | ||
5404 | return error; | ||
5405 | |||
5406 | + flush_workqueue(gfs2_delete_workqueue); | ||
5407 | kthread_stop(sdp->sd_quotad_process); | ||
5408 | kthread_stop(sdp->sd_logd_process); | ||
5409 | |||
5410 | - flush_workqueue(gfs2_delete_workqueue); | ||
5411 | gfs2_quota_sync(sdp->sd_vfs, 0); | ||
5412 | gfs2_statfs_sync(sdp->sd_vfs, 0); | ||
5413 | |||
5414 | diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c | ||
5415 | index 80317b04c84a..e431a850f2f2 100644 | ||
5416 | --- a/fs/kernfs/symlink.c | ||
5417 | +++ b/fs/kernfs/symlink.c | ||
5418 | @@ -63,6 +63,9 @@ static int kernfs_get_target_path(struct kernfs_node *parent, | ||
5419 | if (base == kn) | ||
5420 | break; | ||
5421 | |||
5422 | + if ((s - path) + 3 >= PATH_MAX) | ||
5423 | + return -ENAMETOOLONG; | ||
5424 | + | ||
5425 | strcpy(s, "../"); | ||
5426 | s += 3; | ||
5427 | base = base->parent; | ||
5428 | @@ -79,7 +82,7 @@ static int kernfs_get_target_path(struct kernfs_node *parent, | ||
5429 | if (len < 2) | ||
5430 | return -EINVAL; | ||
5431 | len--; | ||
5432 | - if ((s - path) + len > PATH_MAX) | ||
5433 | + if ((s - path) + len >= PATH_MAX) | ||
5434 | return -ENAMETOOLONG; | ||
5435 | |||
5436 | /* reverse fillup of target string from target to base */ | ||
5437 | diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c | ||
5438 | index 46afd7cdcc37..9a8830a0f31f 100644 | ||
5439 | --- a/fs/nfs/delegation.c | ||
5440 | +++ b/fs/nfs/delegation.c | ||
5441 | @@ -101,7 +101,7 @@ int nfs4_check_delegation(struct inode *inode, fmode_t flags) | ||
5442 | return nfs4_do_check_delegation(inode, flags, false); | ||
5443 | } | ||
5444 | |||
5445 | -static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_state *state, const nfs4_stateid *stateid) | ||
5446 | +static int nfs_delegation_claim_locks(struct nfs4_state *state, const nfs4_stateid *stateid) | ||
5447 | { | ||
5448 | struct inode *inode = state->inode; | ||
5449 | struct file_lock *fl; | ||
5450 | @@ -116,7 +116,7 @@ static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_ | ||
5451 | spin_lock(&flctx->flc_lock); | ||
5452 | restart: | ||
5453 | list_for_each_entry(fl, list, fl_list) { | ||
5454 | - if (nfs_file_open_context(fl->fl_file) != ctx) | ||
5455 | + if (nfs_file_open_context(fl->fl_file)->state != state) | ||
5456 | continue; | ||
5457 | spin_unlock(&flctx->flc_lock); | ||
5458 | status = nfs4_lock_delegation_recall(fl, state, stateid); | ||
5459 | @@ -163,7 +163,7 @@ again: | ||
5460 | seq = raw_seqcount_begin(&sp->so_reclaim_seqcount); | ||
5461 | err = nfs4_open_delegation_recall(ctx, state, stateid, type); | ||
5462 | if (!err) | ||
5463 | - err = nfs_delegation_claim_locks(ctx, state, stateid); | ||
5464 | + err = nfs_delegation_claim_locks(state, stateid); | ||
5465 | if (!err && read_seqcount_retry(&sp->so_reclaim_seqcount, seq)) | ||
5466 | err = -EAGAIN; | ||
5467 | mutex_unlock(&sp->so_delegreturn_mutex); | ||
5468 | diff --git a/fs/orangefs/orangefs-sysfs.c b/fs/orangefs/orangefs-sysfs.c | ||
5469 | index a799546a67f7..f6172c3f83ba 100644 | ||
5470 | --- a/fs/orangefs/orangefs-sysfs.c | ||
5471 | +++ b/fs/orangefs/orangefs-sysfs.c | ||
5472 | @@ -315,7 +315,7 @@ static ssize_t sysfs_service_op_show(struct kobject *kobj, | ||
5473 | /* Can't do a service_operation if the client is not running... */ | ||
5474 | rc = is_daemon_in_service(); | ||
5475 | if (rc) { | ||
5476 | - pr_info("%s: Client not running :%d:\n", | ||
5477 | + pr_info_ratelimited("%s: Client not running :%d:\n", | ||
5478 | __func__, | ||
5479 | is_daemon_in_service()); | ||
5480 | goto out; | ||
5481 | diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c | ||
5482 | index 8ab782d8b33d..93d13f4010c1 100644 | ||
5483 | --- a/fs/proc/vmcore.c | ||
5484 | +++ b/fs/proc/vmcore.c | ||
5485 | @@ -164,6 +164,16 @@ int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma, | ||
5486 | return remap_pfn_range(vma, from, pfn, size, prot); | ||
5487 | } | ||
5488 | |||
5489 | +/* | ||
5490 | + * Architectures which support memory encryption override this. | ||
5491 | + */ | ||
5492 | +ssize_t __weak | ||
5493 | +copy_oldmem_page_encrypted(unsigned long pfn, char *buf, size_t csize, | ||
5494 | + unsigned long offset, int userbuf) | ||
5495 | +{ | ||
5496 | + return copy_oldmem_page(pfn, buf, csize, offset, userbuf); | ||
5497 | +} | ||
5498 | + | ||
5499 | /* | ||
5500 | * Copy to either kernel or user space | ||
5501 | */ | ||
5502 | diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h | ||
5503 | index bd738aafd432..7582a5712458 100644 | ||
5504 | --- a/include/linux/blkdev.h | ||
5505 | +++ b/include/linux/blkdev.h | ||
5506 | @@ -212,6 +212,11 @@ struct request { | ||
5507 | (req)->cmd_flags |= flags; \ | ||
5508 | } while (0) | ||
5509 | |||
5510 | +static inline bool blk_rq_is_passthrough(struct request *rq) | ||
5511 | +{ | ||
5512 | + return rq->cmd_type != REQ_TYPE_FS; | ||
5513 | +} | ||
5514 | + | ||
5515 | static inline unsigned short req_get_ioprio(struct request *req) | ||
5516 | { | ||
5517 | return req->ioprio; | ||
5518 | @@ -663,7 +668,7 @@ static inline void blk_clear_rl_full(struct request_list *rl, bool sync) | ||
5519 | |||
5520 | static inline bool rq_mergeable(struct request *rq) | ||
5521 | { | ||
5522 | - if (rq->cmd_type != REQ_TYPE_FS) | ||
5523 | + if (blk_rq_is_passthrough(rq)) | ||
5524 | return false; | ||
5525 | |||
5526 | if (req_op(rq) == REQ_OP_FLUSH) | ||
5527 | @@ -910,7 +915,7 @@ static inline unsigned int blk_rq_get_max_sectors(struct request *rq, | ||
5528 | { | ||
5529 | struct request_queue *q = rq->q; | ||
5530 | |||
5531 | - if (unlikely(rq->cmd_type != REQ_TYPE_FS)) | ||
5532 | + if (blk_rq_is_passthrough(rq)) | ||
5533 | return q->limits.max_hw_sectors; | ||
5534 | |||
5535 | if (!q->limits.chunk_sectors || | ||
5536 | diff --git a/include/linux/cpufeature.h b/include/linux/cpufeature.h | ||
5537 | index 986c06c88d81..84d3c81b5978 100644 | ||
5538 | --- a/include/linux/cpufeature.h | ||
5539 | +++ b/include/linux/cpufeature.h | ||
5540 | @@ -45,7 +45,7 @@ | ||
5541 | * 'asm/cpufeature.h' of your favorite architecture. | ||
5542 | */ | ||
5543 | #define module_cpu_feature_match(x, __initfunc) \ | ||
5544 | -static struct cpu_feature const cpu_feature_match_ ## x[] = \ | ||
5545 | +static struct cpu_feature const __maybe_unused cpu_feature_match_ ## x[] = \ | ||
5546 | { { .feature = cpu_feature(x) }, { } }; \ | ||
5547 | MODULE_DEVICE_TABLE(cpu, cpu_feature_match_ ## x); \ | ||
5548 | \ | ||
5549 | diff --git a/include/linux/edac.h b/include/linux/edac.h | ||
5550 | index 9e0d78966552..c6233227720c 100644 | ||
5551 | --- a/include/linux/edac.h | ||
5552 | +++ b/include/linux/edac.h | ||
5553 | @@ -17,6 +17,7 @@ | ||
5554 | #include <linux/completion.h> | ||
5555 | #include <linux/workqueue.h> | ||
5556 | #include <linux/debugfs.h> | ||
5557 | +#include <linux/numa.h> | ||
5558 | |||
5559 | struct device; | ||
5560 | |||
5561 | @@ -778,6 +779,6 @@ struct mem_ctl_info { | ||
5562 | /* | ||
5563 | * Maximum number of memory controllers in the coherent fabric. | ||
5564 | */ | ||
5565 | -#define EDAC_MAX_MCS 16 | ||
5566 | +#define EDAC_MAX_MCS 2 * MAX_NUMNODES | ||
5567 | |||
5568 | #endif | ||
5569 | diff --git a/include/linux/fb.h b/include/linux/fb.h | ||
5570 | index a964d076b4dc..493d6d7794de 100644 | ||
5571 | --- a/include/linux/fb.h | ||
5572 | +++ b/include/linux/fb.h | ||
5573 | @@ -732,8 +732,6 @@ extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var); | ||
5574 | extern const unsigned char *fb_firmware_edid(struct device *device); | ||
5575 | extern void fb_edid_to_monspecs(unsigned char *edid, | ||
5576 | struct fb_monspecs *specs); | ||
5577 | -extern void fb_edid_add_monspecs(unsigned char *edid, | ||
5578 | - struct fb_monspecs *specs); | ||
5579 | extern void fb_destroy_modedb(struct fb_videomode *modedb); | ||
5580 | extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb); | ||
5581 | extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter); | ||
5582 | @@ -807,7 +805,6 @@ struct dmt_videomode { | ||
5583 | |||
5584 | extern const char *fb_mode_option; | ||
5585 | extern const struct fb_videomode vesa_modes[]; | ||
5586 | -extern const struct fb_videomode cea_modes[65]; | ||
5587 | extern const struct dmt_videomode dmt_modes[]; | ||
5588 | |||
5589 | struct fb_modelist { | ||
5590 | diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h | ||
5591 | index e353f6600b0b..27dbab59f034 100644 | ||
5592 | --- a/include/linux/intel-iommu.h | ||
5593 | +++ b/include/linux/intel-iommu.h | ||
5594 | @@ -295,7 +295,8 @@ enum { | ||
5595 | #define QI_DEV_IOTLB_SID(sid) ((u64)((sid) & 0xffff) << 32) | ||
5596 | #define QI_DEV_IOTLB_QDEP(qdep) (((qdep) & 0x1f) << 16) | ||
5597 | #define QI_DEV_IOTLB_ADDR(addr) ((u64)(addr) & VTD_PAGE_MASK) | ||
5598 | -#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52)) | ||
5599 | +#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \ | ||
5600 | + ((u64)((pfsid >> 4) & 0xfff) << 52)) | ||
5601 | #define QI_DEV_IOTLB_SIZE 1 | ||
5602 | #define QI_DEV_IOTLB_MAX_INVS 32 | ||
5603 | |||
5604 | @@ -320,7 +321,8 @@ enum { | ||
5605 | #define QI_DEV_EIOTLB_PASID(p) (((u64)p) << 32) | ||
5606 | #define QI_DEV_EIOTLB_SID(sid) ((u64)((sid) & 0xffff) << 16) | ||
5607 | #define QI_DEV_EIOTLB_QDEP(qd) ((u64)((qd) & 0x1f) << 4) | ||
5608 | -#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52)) | ||
5609 | +#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \ | ||
5610 | + ((u64)((pfsid >> 4) & 0xfff) << 52)) | ||
5611 | #define QI_DEV_EIOTLB_MAX_INVS 32 | ||
5612 | |||
5613 | #define QI_PGRP_IDX(idx) (((u64)(idx)) << 55) | ||
5614 | diff --git a/include/linux/libfdt_env.h b/include/linux/libfdt_env.h | ||
5615 | index 2a663c6bb428..8850e243c940 100644 | ||
5616 | --- a/include/linux/libfdt_env.h | ||
5617 | +++ b/include/linux/libfdt_env.h | ||
5618 | @@ -1,6 +1,7 @@ | ||
5619 | #ifndef _LIBFDT_ENV_H | ||
5620 | #define _LIBFDT_ENV_H | ||
5621 | |||
5622 | +#include <linux/kernel.h> /* For INT_MAX */ | ||
5623 | #include <linux/string.h> | ||
5624 | |||
5625 | #include <asm/byteorder.h> | ||
5626 | diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h | ||
5627 | index e82c642fa53c..5913be0793a2 100644 | ||
5628 | --- a/include/linux/platform_data/dma-ep93xx.h | ||
5629 | +++ b/include/linux/platform_data/dma-ep93xx.h | ||
5630 | @@ -84,7 +84,7 @@ static inline enum dma_transfer_direction | ||
5631 | ep93xx_dma_chan_direction(struct dma_chan *chan) | ||
5632 | { | ||
5633 | if (!ep93xx_dma_chan_is_m2p(chan)) | ||
5634 | - return DMA_NONE; | ||
5635 | + return DMA_TRANS_NONE; | ||
5636 | |||
5637 | /* even channels are for TX, odd for RX */ | ||
5638 | return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM; | ||
5639 | diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h | ||
5640 | index 7ba040c797ec..da2791b5fe87 100644 | ||
5641 | --- a/include/linux/sunrpc/sched.h | ||
5642 | +++ b/include/linux/sunrpc/sched.h | ||
5643 | @@ -185,7 +185,6 @@ struct rpc_timer { | ||
5644 | struct rpc_wait_queue { | ||
5645 | spinlock_t lock; | ||
5646 | struct list_head tasks[RPC_NR_PRIORITY]; /* task queue for each priority level */ | ||
5647 | - pid_t owner; /* process id of last task serviced */ | ||
5648 | unsigned char maxpriority; /* maximum priority (0 if queue is not a priority queue) */ | ||
5649 | unsigned char priority; /* current priority */ | ||
5650 | unsigned char nr; /* # tasks remaining for cookie */ | ||
5651 | @@ -201,7 +200,6 @@ struct rpc_wait_queue { | ||
5652 | * from a single cookie. The aim is to improve | ||
5653 | * performance of NFS operations such as read/write. | ||
5654 | */ | ||
5655 | -#define RPC_BATCH_COUNT 16 | ||
5656 | #define RPC_IS_PRIORITY(q) ((q)->maxpriority > 0) | ||
5657 | |||
5658 | /* | ||
5659 | diff --git a/include/net/llc.h b/include/net/llc.h | ||
5660 | index 82d989995d18..95e5ced4c133 100644 | ||
5661 | --- a/include/net/llc.h | ||
5662 | +++ b/include/net/llc.h | ||
5663 | @@ -66,6 +66,7 @@ struct llc_sap { | ||
5664 | int sk_count; | ||
5665 | struct hlist_nulls_head sk_laddr_hash[LLC_SK_LADDR_HASH_ENTRIES]; | ||
5666 | struct hlist_head sk_dev_hash[LLC_SK_DEV_HASH_ENTRIES]; | ||
5667 | + struct rcu_head rcu; | ||
5668 | }; | ||
5669 | |||
5670 | static inline | ||
5671 | diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h | ||
5672 | index 0638b8aeba34..1d9c701b1c7b 100644 | ||
5673 | --- a/include/rdma/ib_verbs.h | ||
5674 | +++ b/include/rdma/ib_verbs.h | ||
5675 | @@ -1026,7 +1026,7 @@ struct ib_qp_init_attr { | ||
5676 | struct ib_qp_cap cap; | ||
5677 | enum ib_sig_type sq_sig_type; | ||
5678 | enum ib_qp_type qp_type; | ||
5679 | - enum ib_qp_create_flags create_flags; | ||
5680 | + u32 create_flags; | ||
5681 | |||
5682 | /* | ||
5683 | * Only needed for special QP types, or when using the RW API. | ||
5684 | diff --git a/kernel/cpu.c b/kernel/cpu.c | ||
5685 | index 0ed3e9deda30..c2573e858009 100644 | ||
5686 | --- a/kernel/cpu.c | ||
5687 | +++ b/kernel/cpu.c | ||
5688 | @@ -379,6 +379,7 @@ void __init cpu_smt_disable(bool force) | ||
5689 | pr_info("SMT: Force disabled\n"); | ||
5690 | cpu_smt_control = CPU_SMT_FORCE_DISABLED; | ||
5691 | } else { | ||
5692 | + pr_info("SMT: disabled\n"); | ||
5693 | cpu_smt_control = CPU_SMT_DISABLED; | ||
5694 | } | ||
5695 | } | ||
5696 | diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c | ||
5697 | index fbfab5722254..8ddd29476c0d 100644 | ||
5698 | --- a/kernel/events/uprobes.c | ||
5699 | +++ b/kernel/events/uprobes.c | ||
5700 | @@ -1846,7 +1846,7 @@ static void handle_trampoline(struct pt_regs *regs) | ||
5701 | |||
5702 | sigill: | ||
5703 | uprobe_warn(current, "handle uretprobe, sending SIGILL."); | ||
5704 | - force_sig_info(SIGILL, SEND_SIG_FORCED, current); | ||
5705 | + force_sig(SIGILL, current); | ||
5706 | |||
5707 | } | ||
5708 | |||
5709 | @@ -1962,7 +1962,7 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs) | ||
5710 | |||
5711 | if (unlikely(err)) { | ||
5712 | uprobe_warn(current, "execute the probed insn, sending SIGILL."); | ||
5713 | - force_sig_info(SIGILL, SEND_SIG_FORCED, current); | ||
5714 | + force_sig(SIGILL, current); | ||
5715 | } | ||
5716 | } | ||
5717 | |||
5718 | diff --git a/kernel/kprobes.c b/kernel/kprobes.c | ||
5719 | index 11863e2b01c2..1b75fb8c7735 100644 | ||
5720 | --- a/kernel/kprobes.c | ||
5721 | +++ b/kernel/kprobes.c | ||
5722 | @@ -514,8 +514,14 @@ static void do_free_cleaned_kprobes(void) | ||
5723 | struct optimized_kprobe *op, *tmp; | ||
5724 | |||
5725 | list_for_each_entry_safe(op, tmp, &freeing_list, list) { | ||
5726 | - BUG_ON(!kprobe_unused(&op->kp)); | ||
5727 | list_del_init(&op->list); | ||
5728 | + if (WARN_ON_ONCE(!kprobe_unused(&op->kp))) { | ||
5729 | + /* | ||
5730 | + * This must not happen, but if there is a kprobe | ||
5731 | + * still in use, keep it on kprobes hash list. | ||
5732 | + */ | ||
5733 | + continue; | ||
5734 | + } | ||
5735 | free_aggr_kprobe(&op->kp); | ||
5736 | } | ||
5737 | } | ||
5738 | diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c | ||
5739 | index 6607d77afe55..a0339c458c14 100644 | ||
5740 | --- a/kernel/printk/printk.c | ||
5741 | +++ b/kernel/printk/printk.c | ||
5742 | @@ -383,6 +383,7 @@ static u32 clear_idx; | ||
5743 | /* record buffer */ | ||
5744 | #define LOG_ALIGN __alignof__(struct printk_log) | ||
5745 | #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) | ||
5746 | +#define LOG_BUF_LEN_MAX (u32)(1 << 31) | ||
5747 | static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); | ||
5748 | static char *log_buf = __log_buf; | ||
5749 | static u32 log_buf_len = __LOG_BUF_LEN; | ||
5750 | @@ -983,18 +984,23 @@ void log_buf_kexec_setup(void) | ||
5751 | static unsigned long __initdata new_log_buf_len; | ||
5752 | |||
5753 | /* we practice scaling the ring buffer by powers of 2 */ | ||
5754 | -static void __init log_buf_len_update(unsigned size) | ||
5755 | +static void __init log_buf_len_update(u64 size) | ||
5756 | { | ||
5757 | + if (size > (u64)LOG_BUF_LEN_MAX) { | ||
5758 | + size = (u64)LOG_BUF_LEN_MAX; | ||
5759 | + pr_err("log_buf over 2G is not supported.\n"); | ||
5760 | + } | ||
5761 | + | ||
5762 | if (size) | ||
5763 | size = roundup_pow_of_two(size); | ||
5764 | if (size > log_buf_len) | ||
5765 | - new_log_buf_len = size; | ||
5766 | + new_log_buf_len = (unsigned long)size; | ||
5767 | } | ||
5768 | |||
5769 | /* save requested log_buf_len since it's too early to process it */ | ||
5770 | static int __init log_buf_len_setup(char *str) | ||
5771 | { | ||
5772 | - unsigned int size; | ||
5773 | + u64 size; | ||
5774 | |||
5775 | if (!str) | ||
5776 | return -EINVAL; | ||
5777 | @@ -1064,7 +1070,7 @@ void __init setup_log_buf(int early) | ||
5778 | } | ||
5779 | |||
5780 | if (unlikely(!new_log_buf)) { | ||
5781 | - pr_err("log_buf_len: %ld bytes not available\n", | ||
5782 | + pr_err("log_buf_len: %lu bytes not available\n", | ||
5783 | new_log_buf_len); | ||
5784 | return; | ||
5785 | } | ||
5786 | @@ -1077,8 +1083,8 @@ void __init setup_log_buf(int early) | ||
5787 | memcpy(log_buf, __log_buf, __LOG_BUF_LEN); | ||
5788 | raw_spin_unlock_irqrestore(&logbuf_lock, flags); | ||
5789 | |||
5790 | - pr_info("log_buf_len: %d bytes\n", log_buf_len); | ||
5791 | - pr_info("early log buf free: %d(%d%%)\n", | ||
5792 | + pr_info("log_buf_len: %u bytes\n", log_buf_len); | ||
5793 | + pr_info("early log buf free: %u(%u%%)\n", | ||
5794 | free, (free * 100) / __LOG_BUF_LEN); | ||
5795 | } | ||
5796 | |||
5797 | diff --git a/kernel/signal.c b/kernel/signal.c | ||
5798 | index 2bb1f9dc86c7..30914b3c76b2 100644 | ||
5799 | --- a/kernel/signal.c | ||
5800 | +++ b/kernel/signal.c | ||
5801 | @@ -71,6 +71,10 @@ static int sig_task_ignored(struct task_struct *t, int sig, bool force) | ||
5802 | |||
5803 | handler = sig_handler(t, sig); | ||
5804 | |||
5805 | + /* SIGKILL and SIGSTOP may not be sent to the global init */ | ||
5806 | + if (unlikely(is_global_init(t) && sig_kernel_only(sig))) | ||
5807 | + return true; | ||
5808 | + | ||
5809 | if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) && | ||
5810 | handler == SIG_DFL && !(force && sig_kernel_only(sig))) | ||
5811 | return 1; | ||
5812 | diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c | ||
5813 | index eec1150125b9..e430e04997ee 100644 | ||
5814 | --- a/mm/hugetlb_cgroup.c | ||
5815 | +++ b/mm/hugetlb_cgroup.c | ||
5816 | @@ -196,7 +196,7 @@ int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, | ||
5817 | again: | ||
5818 | rcu_read_lock(); | ||
5819 | h_cg = hugetlb_cgroup_from_task(current); | ||
5820 | - if (!css_tryget_online(&h_cg->css)) { | ||
5821 | + if (!css_tryget(&h_cg->css)) { | ||
5822 | rcu_read_unlock(); | ||
5823 | goto again; | ||
5824 | } | ||
5825 | diff --git a/mm/memcontrol.c b/mm/memcontrol.c | ||
5826 | index 9ca63af4f37a..0f8422239dea 100644 | ||
5827 | --- a/mm/memcontrol.c | ||
5828 | +++ b/mm/memcontrol.c | ||
5829 | @@ -741,7 +741,7 @@ static struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm) | ||
5830 | if (unlikely(!memcg)) | ||
5831 | memcg = root_mem_cgroup; | ||
5832 | } | ||
5833 | - } while (!css_tryget_online(&memcg->css)); | ||
5834 | + } while (!css_tryget(&memcg->css)); | ||
5835 | rcu_read_unlock(); | ||
5836 | return memcg; | ||
5837 | } | ||
5838 | diff --git a/mm/shmem.c b/mm/shmem.c | ||
5839 | index ac8a5fedc245..6266a7d1ba00 100644 | ||
5840 | --- a/mm/shmem.c | ||
5841 | +++ b/mm/shmem.c | ||
5842 | @@ -2464,7 +2464,7 @@ static void shmem_tag_pins(struct address_space *mapping) | ||
5843 | |||
5844 | spin_lock_irq(&mapping->tree_lock); | ||
5845 | radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) { | ||
5846 | - page = radix_tree_deref_slot(slot); | ||
5847 | + page = radix_tree_deref_slot_protected(slot, &mapping->tree_lock); | ||
5848 | if (!page || radix_tree_exception(page)) { | ||
5849 | if (radix_tree_deref_retry(page)) { | ||
5850 | slot = radix_tree_iter_retry(&iter); | ||
5851 | diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c | ||
5852 | index 48d23abfe799..1306962a792a 100644 | ||
5853 | --- a/net/bluetooth/l2cap_core.c | ||
5854 | +++ b/net/bluetooth/l2cap_core.c | ||
5855 | @@ -6811,6 +6811,16 @@ static int l2cap_le_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) | ||
5856 | chan->sdu_len = sdu_len; | ||
5857 | chan->sdu_last_frag = skb; | ||
5858 | |||
5859 | + /* Detect if remote is not able to use the selected MPS */ | ||
5860 | + if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) { | ||
5861 | + u16 mps_len = skb->len + L2CAP_SDULEN_SIZE; | ||
5862 | + | ||
5863 | + /* Adjust the number of credits */ | ||
5864 | + BT_DBG("chan->mps %u -> %u", chan->mps, mps_len); | ||
5865 | + chan->mps = mps_len; | ||
5866 | + l2cap_chan_le_send_credits(chan); | ||
5867 | + } | ||
5868 | + | ||
5869 | return 0; | ||
5870 | } | ||
5871 | |||
5872 | diff --git a/net/ipv4/gre_demux.c b/net/ipv4/gre_demux.c | ||
5873 | index b798862b6be5..7efe740c06eb 100644 | ||
5874 | --- a/net/ipv4/gre_demux.c | ||
5875 | +++ b/net/ipv4/gre_demux.c | ||
5876 | @@ -86,13 +86,14 @@ int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, | ||
5877 | |||
5878 | options = (__be32 *)(greh + 1); | ||
5879 | if (greh->flags & GRE_CSUM) { | ||
5880 | - if (skb_checksum_simple_validate(skb)) { | ||
5881 | + if (!skb_checksum_simple_validate(skb)) { | ||
5882 | + skb_checksum_try_convert(skb, IPPROTO_GRE, 0, | ||
5883 | + null_compute_pseudo); | ||
5884 | + } else if (csum_err) { | ||
5885 | *csum_err = true; | ||
5886 | return -EINVAL; | ||
5887 | } | ||
5888 | |||
5889 | - skb_checksum_try_convert(skb, IPPROTO_GRE, 0, | ||
5890 | - null_compute_pseudo); | ||
5891 | options++; | ||
5892 | } | ||
5893 | |||
5894 | diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c | ||
5895 | index 576f705d8180..9609ad71dd26 100644 | ||
5896 | --- a/net/ipv4/ip_gre.c | ||
5897 | +++ b/net/ipv4/ip_gre.c | ||
5898 | @@ -224,13 +224,10 @@ static void gre_err(struct sk_buff *skb, u32 info) | ||
5899 | const int type = icmp_hdr(skb)->type; | ||
5900 | const int code = icmp_hdr(skb)->code; | ||
5901 | struct tnl_ptk_info tpi; | ||
5902 | - bool csum_err = false; | ||
5903 | |||
5904 | - if (gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP), | ||
5905 | - iph->ihl * 4) < 0) { | ||
5906 | - if (!csum_err) /* ignore csum errors. */ | ||
5907 | - return; | ||
5908 | - } | ||
5909 | + if (gre_parse_header(skb, &tpi, NULL, htons(ETH_P_IP), | ||
5910 | + iph->ihl * 4) < 0) | ||
5911 | + return; | ||
5912 | |||
5913 | if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) { | ||
5914 | ipv4_update_pmtu(skb, dev_net(skb->dev), info, | ||
5915 | diff --git a/net/llc/llc_core.c b/net/llc/llc_core.c | ||
5916 | index e896a2c53b12..f1e442a39db8 100644 | ||
5917 | --- a/net/llc/llc_core.c | ||
5918 | +++ b/net/llc/llc_core.c | ||
5919 | @@ -127,9 +127,7 @@ void llc_sap_close(struct llc_sap *sap) | ||
5920 | list_del_rcu(&sap->node); | ||
5921 | spin_unlock_bh(&llc_sap_list_lock); | ||
5922 | |||
5923 | - synchronize_rcu(); | ||
5924 | - | ||
5925 | - kfree(sap); | ||
5926 | + kfree_rcu(sap, rcu); | ||
5927 | } | ||
5928 | |||
5929 | static struct packet_type llc_packet_type __read_mostly = { | ||
5930 | diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c | ||
5931 | index 30fbabf4bcbc..593184d14b3e 100644 | ||
5932 | --- a/net/mac80211/rc80211_minstrel_ht.c | ||
5933 | +++ b/net/mac80211/rc80211_minstrel_ht.c | ||
5934 | @@ -128,7 +128,7 @@ | ||
5935 | |||
5936 | #define CCK_GROUP \ | ||
5937 | [MINSTREL_CCK_GROUP] = { \ | ||
5938 | - .streams = 0, \ | ||
5939 | + .streams = 1, \ | ||
5940 | .flags = 0, \ | ||
5941 | .duration = { \ | ||
5942 | CCK_DURATION_LIST(false), \ | ||
5943 | diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c | ||
5944 | index e7da29021b38..c23392482580 100644 | ||
5945 | --- a/net/openvswitch/vport-internal_dev.c | ||
5946 | +++ b/net/openvswitch/vport-internal_dev.c | ||
5947 | @@ -44,7 +44,8 @@ static struct internal_dev *internal_dev_priv(struct net_device *netdev) | ||
5948 | } | ||
5949 | |||
5950 | /* Called with rcu_read_lock_bh. */ | ||
5951 | -static int internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
5952 | +static netdev_tx_t | ||
5953 | +internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
5954 | { | ||
5955 | int len, err; | ||
5956 | |||
5957 | @@ -63,7 +64,7 @@ static int internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
5958 | } else { | ||
5959 | netdev->stats.tx_errors++; | ||
5960 | } | ||
5961 | - return 0; | ||
5962 | + return NETDEV_TX_OK; | ||
5963 | } | ||
5964 | |||
5965 | static int internal_dev_open(struct net_device *netdev) | ||
5966 | diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c | ||
5967 | index 600eacce653a..0ef65822fdd3 100644 | ||
5968 | --- a/net/sunrpc/sched.c | ||
5969 | +++ b/net/sunrpc/sched.c | ||
5970 | @@ -99,64 +99,78 @@ __rpc_add_timer(struct rpc_wait_queue *queue, struct rpc_task *task) | ||
5971 | list_add(&task->u.tk_wait.timer_list, &queue->timer_list.list); | ||
5972 | } | ||
5973 | |||
5974 | -static void rpc_rotate_queue_owner(struct rpc_wait_queue *queue) | ||
5975 | -{ | ||
5976 | - struct list_head *q = &queue->tasks[queue->priority]; | ||
5977 | - struct rpc_task *task; | ||
5978 | - | ||
5979 | - if (!list_empty(q)) { | ||
5980 | - task = list_first_entry(q, struct rpc_task, u.tk_wait.list); | ||
5981 | - if (task->tk_owner == queue->owner) | ||
5982 | - list_move_tail(&task->u.tk_wait.list, q); | ||
5983 | - } | ||
5984 | -} | ||
5985 | - | ||
5986 | static void rpc_set_waitqueue_priority(struct rpc_wait_queue *queue, int priority) | ||
5987 | { | ||
5988 | if (queue->priority != priority) { | ||
5989 | - /* Fairness: rotate the list when changing priority */ | ||
5990 | - rpc_rotate_queue_owner(queue); | ||
5991 | queue->priority = priority; | ||
5992 | + queue->nr = 1U << priority; | ||
5993 | } | ||
5994 | } | ||
5995 | |||
5996 | -static void rpc_set_waitqueue_owner(struct rpc_wait_queue *queue, pid_t pid) | ||
5997 | -{ | ||
5998 | - queue->owner = pid; | ||
5999 | - queue->nr = RPC_BATCH_COUNT; | ||
6000 | -} | ||
6001 | - | ||
6002 | static void rpc_reset_waitqueue_priority(struct rpc_wait_queue *queue) | ||
6003 | { | ||
6004 | rpc_set_waitqueue_priority(queue, queue->maxpriority); | ||
6005 | - rpc_set_waitqueue_owner(queue, 0); | ||
6006 | } | ||
6007 | |||
6008 | /* | ||
6009 | - * Add new request to a priority queue. | ||
6010 | + * Add a request to a queue list | ||
6011 | */ | ||
6012 | -static void __rpc_add_wait_queue_priority(struct rpc_wait_queue *queue, | ||
6013 | - struct rpc_task *task, | ||
6014 | - unsigned char queue_priority) | ||
6015 | +static void | ||
6016 | +__rpc_list_enqueue_task(struct list_head *q, struct rpc_task *task) | ||
6017 | { | ||
6018 | - struct list_head *q; | ||
6019 | struct rpc_task *t; | ||
6020 | |||
6021 | - INIT_LIST_HEAD(&task->u.tk_wait.links); | ||
6022 | - if (unlikely(queue_priority > queue->maxpriority)) | ||
6023 | - queue_priority = queue->maxpriority; | ||
6024 | - if (queue_priority > queue->priority) | ||
6025 | - rpc_set_waitqueue_priority(queue, queue_priority); | ||
6026 | - q = &queue->tasks[queue_priority]; | ||
6027 | list_for_each_entry(t, q, u.tk_wait.list) { | ||
6028 | if (t->tk_owner == task->tk_owner) { | ||
6029 | - list_add_tail(&task->u.tk_wait.list, &t->u.tk_wait.links); | ||
6030 | + list_add_tail(&task->u.tk_wait.links, | ||
6031 | + &t->u.tk_wait.links); | ||
6032 | + /* Cache the queue head in task->u.tk_wait.list */ | ||
6033 | + task->u.tk_wait.list.next = q; | ||
6034 | + task->u.tk_wait.list.prev = NULL; | ||
6035 | return; | ||
6036 | } | ||
6037 | } | ||
6038 | + INIT_LIST_HEAD(&task->u.tk_wait.links); | ||
6039 | list_add_tail(&task->u.tk_wait.list, q); | ||
6040 | } | ||
6041 | |||
6042 | +/* | ||
6043 | + * Remove request from a queue list | ||
6044 | + */ | ||
6045 | +static void | ||
6046 | +__rpc_list_dequeue_task(struct rpc_task *task) | ||
6047 | +{ | ||
6048 | + struct list_head *q; | ||
6049 | + struct rpc_task *t; | ||
6050 | + | ||
6051 | + if (task->u.tk_wait.list.prev == NULL) { | ||
6052 | + list_del(&task->u.tk_wait.links); | ||
6053 | + return; | ||
6054 | + } | ||
6055 | + if (!list_empty(&task->u.tk_wait.links)) { | ||
6056 | + t = list_first_entry(&task->u.tk_wait.links, | ||
6057 | + struct rpc_task, | ||
6058 | + u.tk_wait.links); | ||
6059 | + /* Assume __rpc_list_enqueue_task() cached the queue head */ | ||
6060 | + q = t->u.tk_wait.list.next; | ||
6061 | + list_add_tail(&t->u.tk_wait.list, q); | ||
6062 | + list_del(&task->u.tk_wait.links); | ||
6063 | + } | ||
6064 | + list_del(&task->u.tk_wait.list); | ||
6065 | +} | ||
6066 | + | ||
6067 | +/* | ||
6068 | + * Add new request to a priority queue. | ||
6069 | + */ | ||
6070 | +static void __rpc_add_wait_queue_priority(struct rpc_wait_queue *queue, | ||
6071 | + struct rpc_task *task, | ||
6072 | + unsigned char queue_priority) | ||
6073 | +{ | ||
6074 | + if (unlikely(queue_priority > queue->maxpriority)) | ||
6075 | + queue_priority = queue->maxpriority; | ||
6076 | + __rpc_list_enqueue_task(&queue->tasks[queue_priority], task); | ||
6077 | +} | ||
6078 | + | ||
6079 | /* | ||
6080 | * Add new request to wait queue. | ||
6081 | * | ||
6082 | @@ -194,13 +208,7 @@ static void __rpc_add_wait_queue(struct rpc_wait_queue *queue, | ||
6083 | */ | ||
6084 | static void __rpc_remove_wait_queue_priority(struct rpc_task *task) | ||
6085 | { | ||
6086 | - struct rpc_task *t; | ||
6087 | - | ||
6088 | - if (!list_empty(&task->u.tk_wait.links)) { | ||
6089 | - t = list_entry(task->u.tk_wait.links.next, struct rpc_task, u.tk_wait.list); | ||
6090 | - list_move(&t->u.tk_wait.list, &task->u.tk_wait.list); | ||
6091 | - list_splice_init(&task->u.tk_wait.links, &t->u.tk_wait.links); | ||
6092 | - } | ||
6093 | + __rpc_list_dequeue_task(task); | ||
6094 | } | ||
6095 | |||
6096 | /* | ||
6097 | @@ -212,7 +220,8 @@ static void __rpc_remove_wait_queue(struct rpc_wait_queue *queue, struct rpc_tas | ||
6098 | __rpc_disable_timer(queue, task); | ||
6099 | if (RPC_IS_PRIORITY(queue)) | ||
6100 | __rpc_remove_wait_queue_priority(task); | ||
6101 | - list_del(&task->u.tk_wait.list); | ||
6102 | + else | ||
6103 | + list_del(&task->u.tk_wait.list); | ||
6104 | queue->qlen--; | ||
6105 | dprintk("RPC: %5u removed from queue %p \"%s\"\n", | ||
6106 | task->tk_pid, queue, rpc_qname(queue)); | ||
6107 | @@ -481,17 +490,9 @@ static struct rpc_task *__rpc_find_next_queued_priority(struct rpc_wait_queue *q | ||
6108 | * Service a batch of tasks from a single owner. | ||
6109 | */ | ||
6110 | q = &queue->tasks[queue->priority]; | ||
6111 | - if (!list_empty(q)) { | ||
6112 | - task = list_entry(q->next, struct rpc_task, u.tk_wait.list); | ||
6113 | - if (queue->owner == task->tk_owner) { | ||
6114 | - if (--queue->nr) | ||
6115 | - goto out; | ||
6116 | - list_move_tail(&task->u.tk_wait.list, q); | ||
6117 | - } | ||
6118 | - /* | ||
6119 | - * Check if we need to switch queues. | ||
6120 | - */ | ||
6121 | - goto new_owner; | ||
6122 | + if (!list_empty(q) && --queue->nr) { | ||
6123 | + task = list_first_entry(q, struct rpc_task, u.tk_wait.list); | ||
6124 | + goto out; | ||
6125 | } | ||
6126 | |||
6127 | /* | ||
6128 | @@ -503,7 +504,7 @@ static struct rpc_task *__rpc_find_next_queued_priority(struct rpc_wait_queue *q | ||
6129 | else | ||
6130 | q = q - 1; | ||
6131 | if (!list_empty(q)) { | ||
6132 | - task = list_entry(q->next, struct rpc_task, u.tk_wait.list); | ||
6133 | + task = list_first_entry(q, struct rpc_task, u.tk_wait.list); | ||
6134 | goto new_queue; | ||
6135 | } | ||
6136 | } while (q != &queue->tasks[queue->priority]); | ||
6137 | @@ -513,8 +514,6 @@ static struct rpc_task *__rpc_find_next_queued_priority(struct rpc_wait_queue *q | ||
6138 | |||
6139 | new_queue: | ||
6140 | rpc_set_waitqueue_priority(queue, (unsigned int)(q - &queue->tasks[0])); | ||
6141 | -new_owner: | ||
6142 | - rpc_set_waitqueue_owner(queue, task->tk_owner); | ||
6143 | out: | ||
6144 | return task; | ||
6145 | } | ||
6146 | diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c | ||
6147 | index 060bc0cc8252..bb19be78aed7 100644 | ||
6148 | --- a/net/wireless/nl80211.c | ||
6149 | +++ b/net/wireless/nl80211.c | ||
6150 | @@ -3058,7 +3058,7 @@ static void get_key_callback(void *c, struct key_params *params) | ||
6151 | params->cipher))) | ||
6152 | goto nla_put_failure; | ||
6153 | |||
6154 | - if (nla_put_u8(cookie->msg, NL80211_ATTR_KEY_IDX, cookie->idx)) | ||
6155 | + if (nla_put_u8(cookie->msg, NL80211_KEY_IDX, cookie->idx)) | ||
6156 | goto nla_put_failure; | ||
6157 | |||
6158 | nla_nest_end(cookie->msg, key); | ||
6159 | diff --git a/net/wireless/reg.c b/net/wireless/reg.c | ||
6160 | index 44befe9f9ff0..dde741f298de 100644 | ||
6161 | --- a/net/wireless/reg.c | ||
6162 | +++ b/net/wireless/reg.c | ||
6163 | @@ -2616,8 +2616,54 @@ static void restore_regulatory_settings(bool reset_user) | ||
6164 | schedule_work(®_work); | ||
6165 | } | ||
6166 | |||
6167 | +static bool is_wiphy_all_set_reg_flag(enum ieee80211_regulatory_flags flag) | ||
6168 | +{ | ||
6169 | + struct cfg80211_registered_device *rdev; | ||
6170 | + struct wireless_dev *wdev; | ||
6171 | + | ||
6172 | + list_for_each_entry(rdev, &cfg80211_rdev_list, list) { | ||
6173 | + list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { | ||
6174 | + wdev_lock(wdev); | ||
6175 | + if (!(wdev->wiphy->regulatory_flags & flag)) { | ||
6176 | + wdev_unlock(wdev); | ||
6177 | + return false; | ||
6178 | + } | ||
6179 | + wdev_unlock(wdev); | ||
6180 | + } | ||
6181 | + } | ||
6182 | + | ||
6183 | + return true; | ||
6184 | +} | ||
6185 | + | ||
6186 | void regulatory_hint_disconnect(void) | ||
6187 | { | ||
6188 | + /* Restore of regulatory settings is not required when wiphy(s) | ||
6189 | + * ignore IE from connected access point but clearance of beacon hints | ||
6190 | + * is required when wiphy(s) supports beacon hints. | ||
6191 | + */ | ||
6192 | + if (is_wiphy_all_set_reg_flag(REGULATORY_COUNTRY_IE_IGNORE)) { | ||
6193 | + struct reg_beacon *reg_beacon, *btmp; | ||
6194 | + | ||
6195 | + if (is_wiphy_all_set_reg_flag(REGULATORY_DISABLE_BEACON_HINTS)) | ||
6196 | + return; | ||
6197 | + | ||
6198 | + spin_lock_bh(®_pending_beacons_lock); | ||
6199 | + list_for_each_entry_safe(reg_beacon, btmp, | ||
6200 | + ®_pending_beacons, list) { | ||
6201 | + list_del(®_beacon->list); | ||
6202 | + kfree(reg_beacon); | ||
6203 | + } | ||
6204 | + spin_unlock_bh(®_pending_beacons_lock); | ||
6205 | + | ||
6206 | + list_for_each_entry_safe(reg_beacon, btmp, | ||
6207 | + ®_beacon_list, list) { | ||
6208 | + list_del(®_beacon->list); | ||
6209 | + kfree(reg_beacon); | ||
6210 | + } | ||
6211 | + | ||
6212 | + return; | ||
6213 | + } | ||
6214 | + | ||
6215 | pr_debug("All devices are disconnected, going to restore regulatory settings\n"); | ||
6216 | restore_regulatory_settings(false); | ||
6217 | } | ||
6218 | diff --git a/samples/mei/mei-amt-version.c b/samples/mei/mei-amt-version.c | ||
6219 | index bb9988914a56..32234481ad7d 100644 | ||
6220 | --- a/samples/mei/mei-amt-version.c | ||
6221 | +++ b/samples/mei/mei-amt-version.c | ||
6222 | @@ -370,7 +370,7 @@ static uint32_t amt_host_if_call(struct amt_host_if *acmd, | ||
6223 | unsigned int expected_sz) | ||
6224 | { | ||
6225 | uint32_t in_buf_sz; | ||
6226 | - uint32_t out_buf_sz; | ||
6227 | + ssize_t out_buf_sz; | ||
6228 | ssize_t written; | ||
6229 | uint32_t status; | ||
6230 | struct amt_host_if_resp_header *msg_hdr; | ||
6231 | diff --git a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c | ||
6232 | index a84a1d3d23e5..c6888d76ca5e 100644 | ||
6233 | --- a/sound/core/oss/pcm_plugin.c | ||
6234 | +++ b/sound/core/oss/pcm_plugin.c | ||
6235 | @@ -111,7 +111,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) | ||
6236 | while (plugin->next) { | ||
6237 | if (plugin->dst_frames) | ||
6238 | frames = plugin->dst_frames(plugin, frames); | ||
6239 | - if (snd_BUG_ON(frames <= 0)) | ||
6240 | + if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0)) | ||
6241 | return -ENXIO; | ||
6242 | plugin = plugin->next; | ||
6243 | err = snd_pcm_plugin_alloc(plugin, frames); | ||
6244 | @@ -123,7 +123,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) | ||
6245 | while (plugin->prev) { | ||
6246 | if (plugin->src_frames) | ||
6247 | frames = plugin->src_frames(plugin, frames); | ||
6248 | - if (snd_BUG_ON(frames <= 0)) | ||
6249 | + if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0)) | ||
6250 | return -ENXIO; | ||
6251 | plugin = plugin->prev; | ||
6252 | err = snd_pcm_plugin_alloc(plugin, frames); | ||
6253 | diff --git a/sound/core/seq/seq_system.c b/sound/core/seq/seq_system.c | ||
6254 | index 8ce1d0b40dce..ce1f1e4727ab 100644 | ||
6255 | --- a/sound/core/seq/seq_system.c | ||
6256 | +++ b/sound/core/seq/seq_system.c | ||
6257 | @@ -123,6 +123,7 @@ int __init snd_seq_system_client_init(void) | ||
6258 | { | ||
6259 | struct snd_seq_port_callback pcallbacks; | ||
6260 | struct snd_seq_port_info *port; | ||
6261 | + int err; | ||
6262 | |||
6263 | port = kzalloc(sizeof(*port), GFP_KERNEL); | ||
6264 | if (!port) | ||
6265 | @@ -144,7 +145,10 @@ int __init snd_seq_system_client_init(void) | ||
6266 | port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT; | ||
6267 | port->addr.client = sysclient; | ||
6268 | port->addr.port = SNDRV_SEQ_PORT_SYSTEM_TIMER; | ||
6269 | - snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port); | ||
6270 | + err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, | ||
6271 | + port); | ||
6272 | + if (err < 0) | ||
6273 | + goto error_port; | ||
6274 | |||
6275 | /* register announcement port */ | ||
6276 | strcpy(port->name, "Announce"); | ||
6277 | @@ -154,16 +158,24 @@ int __init snd_seq_system_client_init(void) | ||
6278 | port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT; | ||
6279 | port->addr.client = sysclient; | ||
6280 | port->addr.port = SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE; | ||
6281 | - snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port); | ||
6282 | + err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, | ||
6283 | + port); | ||
6284 | + if (err < 0) | ||
6285 | + goto error_port; | ||
6286 | announce_port = port->addr.port; | ||
6287 | |||
6288 | kfree(port); | ||
6289 | return 0; | ||
6290 | + | ||
6291 | + error_port: | ||
6292 | + snd_seq_system_client_done(); | ||
6293 | + kfree(port); | ||
6294 | + return err; | ||
6295 | } | ||
6296 | |||
6297 | |||
6298 | /* unregister our internal client */ | ||
6299 | -void __exit snd_seq_system_client_done(void) | ||
6300 | +void snd_seq_system_client_done(void) | ||
6301 | { | ||
6302 | int oldsysclient = sysclient; | ||
6303 | |||
6304 | diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c | ||
6305 | index 0abab7926dca..d1a6d20ace0d 100644 | ||
6306 | --- a/sound/pci/hda/patch_sigmatel.c | ||
6307 | +++ b/sound/pci/hda/patch_sigmatel.c | ||
6308 | @@ -77,6 +77,7 @@ enum { | ||
6309 | STAC_DELL_M6_BOTH, | ||
6310 | STAC_DELL_EQ, | ||
6311 | STAC_ALIENWARE_M17X, | ||
6312 | + STAC_ELO_VUPOINT_15MX, | ||
6313 | STAC_92HD89XX_HP_FRONT_JACK, | ||
6314 | STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK, | ||
6315 | STAC_92HD73XX_ASUS_MOBO, | ||
6316 | @@ -1875,6 +1876,18 @@ static void stac92hd73xx_fixup_no_jd(struct hda_codec *codec, | ||
6317 | codec->no_jack_detect = 1; | ||
6318 | } | ||
6319 | |||
6320 | + | ||
6321 | +static void stac92hd73xx_disable_automute(struct hda_codec *codec, | ||
6322 | + const struct hda_fixup *fix, int action) | ||
6323 | +{ | ||
6324 | + struct sigmatel_spec *spec = codec->spec; | ||
6325 | + | ||
6326 | + if (action != HDA_FIXUP_ACT_PRE_PROBE) | ||
6327 | + return; | ||
6328 | + | ||
6329 | + spec->gen.suppress_auto_mute = 1; | ||
6330 | +} | ||
6331 | + | ||
6332 | static const struct hda_fixup stac92hd73xx_fixups[] = { | ||
6333 | [STAC_92HD73XX_REF] = { | ||
6334 | .type = HDA_FIXUP_FUNC, | ||
6335 | @@ -1900,6 +1913,10 @@ static const struct hda_fixup stac92hd73xx_fixups[] = { | ||
6336 | .type = HDA_FIXUP_FUNC, | ||
6337 | .v.func = stac92hd73xx_fixup_alienware_m17x, | ||
6338 | }, | ||
6339 | + [STAC_ELO_VUPOINT_15MX] = { | ||
6340 | + .type = HDA_FIXUP_FUNC, | ||
6341 | + .v.func = stac92hd73xx_disable_automute, | ||
6342 | + }, | ||
6343 | [STAC_92HD73XX_INTEL] = { | ||
6344 | .type = HDA_FIXUP_PINS, | ||
6345 | .v.pins = intel_dg45id_pin_configs, | ||
6346 | @@ -1938,6 +1955,7 @@ static const struct hda_model_fixup stac92hd73xx_models[] = { | ||
6347 | { .id = STAC_DELL_M6_BOTH, .name = "dell-m6" }, | ||
6348 | { .id = STAC_DELL_EQ, .name = "dell-eq" }, | ||
6349 | { .id = STAC_ALIENWARE_M17X, .name = "alienware" }, | ||
6350 | + { .id = STAC_ELO_VUPOINT_15MX, .name = "elo-vupoint-15mx" }, | ||
6351 | { .id = STAC_92HD73XX_ASUS_MOBO, .name = "asus-mobo" }, | ||
6352 | {} | ||
6353 | }; | ||
6354 | @@ -1987,6 +2005,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = { | ||
6355 | "Alienware M17x", STAC_ALIENWARE_M17X), | ||
6356 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490, | ||
6357 | "Alienware M17x R3", STAC_DELL_EQ), | ||
6358 | + SND_PCI_QUIRK(0x1059, 0x1011, | ||
6359 | + "ELO VuPoint 15MX", STAC_ELO_VUPOINT_15MX), | ||
6360 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1927, | ||
6361 | "HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK), | ||
6362 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17, | ||
6363 | diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c | ||
6364 | index 1bc98c867133..2286dfd72ff7 100644 | ||
6365 | --- a/sound/pci/intel8x0m.c | ||
6366 | +++ b/sound/pci/intel8x0m.c | ||
6367 | @@ -1171,16 +1171,6 @@ static int snd_intel8x0m_create(struct snd_card *card, | ||
6368 | } | ||
6369 | |||
6370 | port_inited: | ||
6371 | - if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED, | ||
6372 | - KBUILD_MODNAME, chip)) { | ||
6373 | - dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); | ||
6374 | - snd_intel8x0m_free(chip); | ||
6375 | - return -EBUSY; | ||
6376 | - } | ||
6377 | - chip->irq = pci->irq; | ||
6378 | - pci_set_master(pci); | ||
6379 | - synchronize_irq(chip->irq); | ||
6380 | - | ||
6381 | /* initialize offsets */ | ||
6382 | chip->bdbars_count = 2; | ||
6383 | tbl = intel_regs; | ||
6384 | @@ -1224,11 +1214,21 @@ static int snd_intel8x0m_create(struct snd_card *card, | ||
6385 | chip->int_sta_reg = ICH_REG_GLOB_STA; | ||
6386 | chip->int_sta_mask = int_sta_masks; | ||
6387 | |||
6388 | + pci_set_master(pci); | ||
6389 | + | ||
6390 | if ((err = snd_intel8x0m_chip_init(chip, 1)) < 0) { | ||
6391 | snd_intel8x0m_free(chip); | ||
6392 | return err; | ||
6393 | } | ||
6394 | |||
6395 | + if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED, | ||
6396 | + KBUILD_MODNAME, chip)) { | ||
6397 | + dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); | ||
6398 | + snd_intel8x0m_free(chip); | ||
6399 | + return -EBUSY; | ||
6400 | + } | ||
6401 | + chip->irq = pci->irq; | ||
6402 | + | ||
6403 | if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { | ||
6404 | snd_intel8x0m_free(chip); | ||
6405 | return err; | ||
6406 | diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c | ||
6407 | index c602c4960924..88355d1719a3 100644 | ||
6408 | --- a/sound/soc/codecs/hdac_hdmi.c | ||
6409 | +++ b/sound/soc/codecs/hdac_hdmi.c | ||
6410 | @@ -1267,6 +1267,12 @@ static int hdac_hdmi_create_dais(struct hdac_device *hdac, | ||
6411 | if (ret) | ||
6412 | return ret; | ||
6413 | |||
6414 | + /* Filter out 44.1, 88.2 and 176.4Khz */ | ||
6415 | + rates &= ~(SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_88200 | | ||
6416 | + SNDRV_PCM_RATE_176400); | ||
6417 | + if (!rates) | ||
6418 | + return -EINVAL; | ||
6419 | + | ||
6420 | sprintf(dai_name, "intel-hdmi-hifi%d", i+1); | ||
6421 | hdmi_dais[i].name = devm_kstrdup(&hdac->dev, | ||
6422 | dai_name, GFP_KERNEL); | ||
6423 | diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c | ||
6424 | index 7406ea5c9a4f..39810b713d5f 100644 | ||
6425 | --- a/sound/soc/codecs/sgtl5000.c | ||
6426 | +++ b/sound/soc/codecs/sgtl5000.c | ||
6427 | @@ -1217,7 +1217,7 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec) | ||
6428 | * Searching for a suitable index solving this formula: | ||
6429 | * idx = 40 * log10(vag_val / lo_cagcntrl) + 15 | ||
6430 | */ | ||
6431 | - vol_quot = (vag * 100) / lo_vag; | ||
6432 | + vol_quot = lo_vag ? (vag * 100) / lo_vag : 0; | ||
6433 | lo_vol = 0; | ||
6434 | for (i = 0; i < ARRAY_SIZE(vol_quot_table); i++) { | ||
6435 | if (vol_quot >= vol_quot_table[i]) | ||
6436 | diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c | ||
6437 | index 1d00f6e894ef..d69559e45872 100644 | ||
6438 | --- a/sound/soc/soc-pcm.c | ||
6439 | +++ b/sound/soc/soc-pcm.c | ||
6440 | @@ -1592,7 +1592,7 @@ static void dpcm_init_runtime_hw(struct snd_pcm_runtime *runtime, | ||
6441 | u64 formats) | ||
6442 | { | ||
6443 | runtime->hw.rate_min = stream->rate_min; | ||
6444 | - runtime->hw.rate_max = stream->rate_max; | ||
6445 | + runtime->hw.rate_max = min_not_zero(stream->rate_max, UINT_MAX); | ||
6446 | runtime->hw.channels_min = stream->channels_min; | ||
6447 | runtime->hw.channels_max = stream->channels_max; | ||
6448 | if (runtime->hw.formats) | ||
6449 | diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c | ||
6450 | index b8044c6034b3..30aa5f2df6da 100644 | ||
6451 | --- a/sound/usb/endpoint.c | ||
6452 | +++ b/sound/usb/endpoint.c | ||
6453 | @@ -403,6 +403,9 @@ static void snd_complete_urb(struct urb *urb) | ||
6454 | } | ||
6455 | |||
6456 | prepare_outbound_urb(ep, ctx); | ||
6457 | + /* can be stopped during prepare callback */ | ||
6458 | + if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) | ||
6459 | + goto exit_clear; | ||
6460 | } else { | ||
6461 | retire_inbound_urb(ep, ctx); | ||
6462 | /* can be stopped during retire callback */ | ||
6463 | diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c | ||
6464 | index a02443717625..64fa1bbf0acb 100644 | ||
6465 | --- a/sound/usb/mixer.c | ||
6466 | +++ b/sound/usb/mixer.c | ||
6467 | @@ -1046,7 +1046,8 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, | ||
6468 | if (cval->min + cval->res < cval->max) { | ||
6469 | int last_valid_res = cval->res; | ||
6470 | int saved, test, check; | ||
6471 | - get_cur_mix_raw(cval, minchn, &saved); | ||
6472 | + if (get_cur_mix_raw(cval, minchn, &saved) < 0) | ||
6473 | + goto no_res_check; | ||
6474 | for (;;) { | ||
6475 | test = saved; | ||
6476 | if (test < cval->max) | ||
6477 | @@ -1066,6 +1067,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, | ||
6478 | snd_usb_set_cur_mix_value(cval, minchn, 0, saved); | ||
6479 | } | ||
6480 | |||
6481 | +no_res_check: | ||
6482 | cval->initialized = 1; | ||
6483 | } | ||
6484 |