Contents of /trunk/kernel-alx-legacy/patches-4.9/0348-4.9.249-all-fixes.patch
Parent Directory | Revision Log
Revision 3650 -
(show annotations)
(download)
Mon Oct 24 14:07:30 2022 UTC (23 months ago) by niro
File size: 133892 byte(s)
Mon Oct 24 14:07:30 2022 UTC (23 months ago) by niro
File size: 133892 byte(s)
-linux-4.9.249
1 | diff --git a/Makefile b/Makefile |
2 | index f6680569c0008..ef1c9929cdcc7 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 248 |
9 | +SUBLEVEL = 249 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c |
14 | index 165158735aa6b..3ee19b1e79be5 100644 |
15 | --- a/arch/arc/kernel/stacktrace.c |
16 | +++ b/arch/arc/kernel/stacktrace.c |
17 | @@ -39,15 +39,15 @@ |
18 | |
19 | #ifdef CONFIG_ARC_DW2_UNWIND |
20 | |
21 | -static void seed_unwind_frame_info(struct task_struct *tsk, |
22 | - struct pt_regs *regs, |
23 | - struct unwind_frame_info *frame_info) |
24 | +static int |
25 | +seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, |
26 | + struct unwind_frame_info *frame_info) |
27 | { |
28 | /* |
29 | * synchronous unwinding (e.g. dump_stack) |
30 | * - uses current values of SP and friends |
31 | */ |
32 | - if (tsk == NULL && regs == NULL) { |
33 | + if (regs == NULL && (tsk == NULL || tsk == current)) { |
34 | unsigned long fp, sp, blink, ret; |
35 | frame_info->task = current; |
36 | |
37 | @@ -66,11 +66,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk, |
38 | frame_info->call_frame = 0; |
39 | } else if (regs == NULL) { |
40 | /* |
41 | - * Asynchronous unwinding of sleeping task |
42 | - * - Gets SP etc from task's pt_regs (saved bottom of kernel |
43 | - * mode stack of task) |
44 | + * Asynchronous unwinding of a likely sleeping task |
45 | + * - first ensure it is actually sleeping |
46 | + * - if so, it will be in __switch_to, kernel mode SP of task |
47 | + * is safe-kept and BLINK at a well known location in there |
48 | */ |
49 | |
50 | + if (tsk->state == TASK_RUNNING) |
51 | + return -1; |
52 | + |
53 | frame_info->task = tsk; |
54 | |
55 | frame_info->regs.r27 = TSK_K_FP(tsk); |
56 | @@ -104,6 +108,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk, |
57 | frame_info->regs.r63 = regs->ret; |
58 | frame_info->call_frame = 0; |
59 | } |
60 | + |
61 | + return 0; |
62 | } |
63 | |
64 | #endif |
65 | @@ -117,7 +123,8 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs, |
66 | unsigned int address; |
67 | struct unwind_frame_info frame_info; |
68 | |
69 | - seed_unwind_frame_info(tsk, regs, &frame_info); |
70 | + if (seed_unwind_frame_info(tsk, regs, &frame_info)) |
71 | + return 0; |
72 | |
73 | while (1) { |
74 | address = UNW_PC(&frame_info); |
75 | diff --git a/arch/arm/boot/dts/at91-sama5d3_xplained.dts b/arch/arm/boot/dts/at91-sama5d3_xplained.dts |
76 | index 5a53fcf542abb..07133c5ad2944 100644 |
77 | --- a/arch/arm/boot/dts/at91-sama5d3_xplained.dts |
78 | +++ b/arch/arm/boot/dts/at91-sama5d3_xplained.dts |
79 | @@ -231,6 +231,11 @@ |
80 | atmel,pins = |
81 | <AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */ |
82 | }; |
83 | + pinctrl_usb_default: usb_default { |
84 | + atmel,pins = |
85 | + <AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE |
86 | + AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; |
87 | + }; |
88 | }; |
89 | }; |
90 | }; |
91 | @@ -288,6 +293,8 @@ |
92 | &pioE 3 GPIO_ACTIVE_LOW |
93 | &pioE 4 GPIO_ACTIVE_LOW |
94 | >; |
95 | + pinctrl-names = "default"; |
96 | + pinctrl-0 = <&pinctrl_usb_default>; |
97 | status = "okay"; |
98 | }; |
99 | |
100 | diff --git a/arch/arm/boot/dts/at91-sama5d4_xplained.dts b/arch/arm/boot/dts/at91-sama5d4_xplained.dts |
101 | index 44d1171c7fc04..4ce8656293837 100644 |
102 | --- a/arch/arm/boot/dts/at91-sama5d4_xplained.dts |
103 | +++ b/arch/arm/boot/dts/at91-sama5d4_xplained.dts |
104 | @@ -152,6 +152,11 @@ |
105 | atmel,pins = |
106 | <AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; |
107 | }; |
108 | + pinctrl_usb_default: usb_default { |
109 | + atmel,pins = |
110 | + <AT91_PIOE 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE |
111 | + AT91_PIOE 14 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; |
112 | + }; |
113 | pinctrl_key_gpio: key_gpio_0 { |
114 | atmel,pins = |
115 | <AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; |
116 | @@ -177,6 +182,8 @@ |
117 | &pioE 11 GPIO_ACTIVE_HIGH |
118 | &pioE 14 GPIO_ACTIVE_HIGH |
119 | >; |
120 | + pinctrl-names = "default"; |
121 | + pinctrl-0 = <&pinctrl_usb_default>; |
122 | status = "okay"; |
123 | }; |
124 | |
125 | diff --git a/arch/arm/boot/dts/at91sam9rl.dtsi b/arch/arm/boot/dts/at91sam9rl.dtsi |
126 | index 70adf940d98c0..620aa3f555f8a 100644 |
127 | --- a/arch/arm/boot/dts/at91sam9rl.dtsi |
128 | +++ b/arch/arm/boot/dts/at91sam9rl.dtsi |
129 | @@ -266,23 +266,26 @@ |
130 | atmel,adc-use-res = "highres"; |
131 | |
132 | trigger0 { |
133 | - trigger-name = "timer-counter-0"; |
134 | + trigger-name = "external-rising"; |
135 | trigger-value = <0x1>; |
136 | + trigger-external; |
137 | }; |
138 | + |
139 | trigger1 { |
140 | - trigger-name = "timer-counter-1"; |
141 | - trigger-value = <0x3>; |
142 | + trigger-name = "external-falling"; |
143 | + trigger-value = <0x2>; |
144 | + trigger-external; |
145 | }; |
146 | |
147 | trigger2 { |
148 | - trigger-name = "timer-counter-2"; |
149 | - trigger-value = <0x5>; |
150 | + trigger-name = "external-any"; |
151 | + trigger-value = <0x3>; |
152 | + trigger-external; |
153 | }; |
154 | |
155 | trigger3 { |
156 | - trigger-name = "external"; |
157 | - trigger-value = <0x13>; |
158 | - trigger-external; |
159 | + trigger-name = "continuous"; |
160 | + trigger-value = <0x6>; |
161 | }; |
162 | }; |
163 | |
164 | diff --git a/arch/arm/boot/dts/exynos5410-odroidxu.dts b/arch/arm/boot/dts/exynos5410-odroidxu.dts |
165 | index 3c271cb4b2be3..a2f94cb2ded8e 100644 |
166 | --- a/arch/arm/boot/dts/exynos5410-odroidxu.dts |
167 | +++ b/arch/arm/boot/dts/exynos5410-odroidxu.dts |
168 | @@ -271,6 +271,8 @@ |
169 | regulator-name = "vddq_lcd"; |
170 | regulator-min-microvolt = <1800000>; |
171 | regulator-max-microvolt = <1800000>; |
172 | + /* Supplies also GPK and GPJ */ |
173 | + regulator-always-on; |
174 | }; |
175 | |
176 | ldo8_reg: LDO8 { |
177 | @@ -560,11 +562,11 @@ |
178 | }; |
179 | |
180 | &usbdrd_dwc3_0 { |
181 | - dr_mode = "host"; |
182 | + dr_mode = "peripheral"; |
183 | }; |
184 | |
185 | &usbdrd_dwc3_1 { |
186 | - dr_mode = "peripheral"; |
187 | + dr_mode = "host"; |
188 | }; |
189 | |
190 | &usbdrd3_0 { |
191 | diff --git a/arch/arm/boot/dts/exynos5410-pinctrl.dtsi b/arch/arm/boot/dts/exynos5410-pinctrl.dtsi |
192 | index a083d23fdee30..872096edd77fd 100644 |
193 | --- a/arch/arm/boot/dts/exynos5410-pinctrl.dtsi |
194 | +++ b/arch/arm/boot/dts/exynos5410-pinctrl.dtsi |
195 | @@ -563,6 +563,34 @@ |
196 | interrupt-controller; |
197 | #interrupt-cells = <2>; |
198 | }; |
199 | + |
200 | + usb3_1_oc: usb3-1-oc { |
201 | + samsung,pins = "gpk2-4", "gpk2-5"; |
202 | + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; |
203 | + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; |
204 | + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; |
205 | + }; |
206 | + |
207 | + usb3_1_vbusctrl: usb3-1-vbusctrl { |
208 | + samsung,pins = "gpk2-6", "gpk2-7"; |
209 | + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; |
210 | + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; |
211 | + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; |
212 | + }; |
213 | + |
214 | + usb3_0_oc: usb3-0-oc { |
215 | + samsung,pins = "gpk3-0", "gpk3-1"; |
216 | + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; |
217 | + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; |
218 | + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; |
219 | + }; |
220 | + |
221 | + usb3_0_vbusctrl: usb3-0-vbusctrl { |
222 | + samsung,pins = "gpk3-2", "gpk3-3"; |
223 | + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; |
224 | + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; |
225 | + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; |
226 | + }; |
227 | }; |
228 | |
229 | &pinctrl_2 { |
230 | diff --git a/arch/arm/boot/dts/exynos5410.dtsi b/arch/arm/boot/dts/exynos5410.dtsi |
231 | index bb59fee072c0a..132b830524392 100644 |
232 | --- a/arch/arm/boot/dts/exynos5410.dtsi |
233 | +++ b/arch/arm/boot/dts/exynos5410.dtsi |
234 | @@ -314,6 +314,8 @@ |
235 | &usbdrd3_0 { |
236 | clocks = <&clock CLK_USBD300>; |
237 | clock-names = "usbdrd30"; |
238 | + pinctrl-names = "default"; |
239 | + pinctrl-0 = <&usb3_0_oc>, <&usb3_0_vbusctrl>; |
240 | }; |
241 | |
242 | &usbdrd_phy0 { |
243 | @@ -325,6 +327,8 @@ |
244 | &usbdrd3_1 { |
245 | clocks = <&clock CLK_USBD301>; |
246 | clock-names = "usbdrd30"; |
247 | + pinctrl-names = "default"; |
248 | + pinctrl-0 = <&usb3_1_oc>, <&usb3_1_vbusctrl>; |
249 | }; |
250 | |
251 | &usbdrd_dwc3_1 { |
252 | diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S |
253 | index 04286fd9e09ce..2e336acd68b0a 100644 |
254 | --- a/arch/arm/kernel/head.S |
255 | +++ b/arch/arm/kernel/head.S |
256 | @@ -673,12 +673,8 @@ ARM_BE8(rev16 ip, ip) |
257 | ldrcc r7, [r4], #4 @ use branch for delay slot |
258 | bcc 1b |
259 | bx lr |
260 | -#else |
261 | -#ifdef CONFIG_CPU_ENDIAN_BE8 |
262 | - moveq r0, #0x00004000 @ set bit 22, mov to mvn instruction |
263 | #else |
264 | moveq r0, #0x400000 @ set bit 22, mov to mvn instruction |
265 | -#endif |
266 | b 2f |
267 | 1: ldr ip, [r7, r3] |
268 | #ifdef CONFIG_CPU_ENDIAN_BE8 |
269 | @@ -687,7 +683,7 @@ ARM_BE8(rev16 ip, ip) |
270 | tst ip, #0x000f0000 @ check the rotation field |
271 | orrne ip, ip, r6, lsl #24 @ mask in offset bits 31-24 |
272 | biceq ip, ip, #0x00004000 @ clear bit 22 |
273 | - orreq ip, ip, r0 @ mask in offset bits 7-0 |
274 | + orreq ip, ip, r0, ror #8 @ mask in offset bits 7-0 |
275 | #else |
276 | bic ip, ip, #0x000000ff |
277 | tst ip, #0xf00 @ check the rotation field |
278 | diff --git a/arch/arm64/boot/dts/exynos/exynos7.dtsi b/arch/arm64/boot/dts/exynos/exynos7.dtsi |
279 | index 6328a66ed97e4..4c7c40ce50662 100644 |
280 | --- a/arch/arm64/boot/dts/exynos/exynos7.dtsi |
281 | +++ b/arch/arm64/boot/dts/exynos/exynos7.dtsi |
282 | @@ -65,8 +65,10 @@ |
283 | }; |
284 | |
285 | psci { |
286 | - compatible = "arm,psci-0.2"; |
287 | + compatible = "arm,psci"; |
288 | method = "smc"; |
289 | + cpu_off = <0x84000002>; |
290 | + cpu_on = <0xC4000003>; |
291 | }; |
292 | |
293 | soc: soc { |
294 | diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi |
295 | index 7afbfb0f96a3c..dd211dbdaaae0 100644 |
296 | --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi |
297 | +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi |
298 | @@ -65,6 +65,9 @@ |
299 | i2c6 = &i2c6; |
300 | i2c7 = &i2c7; |
301 | i2c8 = &i2c8; |
302 | + mmc0 = &sdio0; |
303 | + mmc1 = &sdmmc; |
304 | + mmc2 = &sdhci; |
305 | serial0 = &uart0; |
306 | serial1 = &uart1; |
307 | serial2 = &uart2; |
308 | diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h |
309 | index 86c0ef23157c2..a152a7bbc85ab 100644 |
310 | --- a/arch/arm64/include/asm/kvm_host.h |
311 | +++ b/arch/arm64/include/asm/kvm_host.h |
312 | @@ -161,6 +161,7 @@ enum vcpu_sysreg { |
313 | #define c2_TTBR1 (TTBR1_EL1 * 2) /* Translation Table Base Register 1 */ |
314 | #define c2_TTBR1_high (c2_TTBR1 + 1) /* TTBR1 top 32 bits */ |
315 | #define c2_TTBCR (TCR_EL1 * 2) /* Translation Table Base Control R. */ |
316 | +#define c2_TTBCR2 (c2_TTBCR + 1) /* Translation Table Base Control R. 2 */ |
317 | #define c3_DACR (DACR32_EL2 * 2)/* Domain Access Control Register */ |
318 | #define c5_DFSR (ESR_EL1 * 2) /* Data Fault Status Register */ |
319 | #define c5_IFSR (IFSR32_EL2 * 2)/* Instruction Fault Status Register */ |
320 | diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c |
321 | index dce732f51e50e..0ad81fa13688f 100644 |
322 | --- a/arch/arm64/kvm/sys_regs.c |
323 | +++ b/arch/arm64/kvm/sys_regs.c |
324 | @@ -1315,6 +1315,7 @@ static const struct sys_reg_desc cp15_regs[] = { |
325 | { Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 }, |
326 | { Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 }, |
327 | { Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, c2_TTBCR }, |
328 | + { Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, c2_TTBCR2 }, |
329 | { Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, c3_DACR }, |
330 | { Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, c5_DFSR }, |
331 | { Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, c5_IFSR }, |
332 | diff --git a/arch/mips/bcm47xx/Kconfig b/arch/mips/bcm47xx/Kconfig |
333 | index e970fd9cf7693..7ca7384fd5c9d 100644 |
334 | --- a/arch/mips/bcm47xx/Kconfig |
335 | +++ b/arch/mips/bcm47xx/Kconfig |
336 | @@ -26,6 +26,7 @@ config BCM47XX_BCMA |
337 | select BCMA |
338 | select BCMA_HOST_SOC |
339 | select BCMA_DRIVER_MIPS |
340 | + select BCMA_DRIVER_PCI if PCI |
341 | select BCMA_DRIVER_PCI_HOSTMODE if PCI |
342 | select BCMA_DRIVER_GPIO |
343 | default y |
344 | diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h |
345 | index cf51aea47510c..090edefe125da 100644 |
346 | --- a/arch/powerpc/include/asm/cputable.h |
347 | +++ b/arch/powerpc/include/asm/cputable.h |
348 | @@ -419,7 +419,6 @@ enum { |
349 | CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
350 | CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_ALTIVEC_COMP | \ |
351 | CPU_FTR_CELL_TB_BUG | CPU_FTR_SMT) |
352 | -#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) |
353 | |
354 | /* 64-bit CPUs */ |
355 | #define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
356 | @@ -510,8 +509,6 @@ enum { |
357 | CPU_FTRS_7447 | CPU_FTRS_7447A | CPU_FTRS_82XX | |
358 | CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 | |
359 | CPU_FTRS_CLASSIC32 | |
360 | -#else |
361 | - CPU_FTRS_GENERIC_32 | |
362 | #endif |
363 | #ifdef CONFIG_8xx |
364 | CPU_FTRS_8XX | |
365 | @@ -562,8 +559,6 @@ enum { |
366 | CPU_FTRS_7447 & CPU_FTRS_7447A & CPU_FTRS_82XX & |
367 | CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 & |
368 | CPU_FTRS_CLASSIC32 & |
369 | -#else |
370 | - CPU_FTRS_GENERIC_32 & |
371 | #endif |
372 | #ifdef CONFIG_8xx |
373 | CPU_FTRS_8XX & |
374 | diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c |
375 | index a10b67df83bae..1f1ac446ace9a 100644 |
376 | --- a/arch/powerpc/perf/core-book3s.c |
377 | +++ b/arch/powerpc/perf/core-book3s.c |
378 | @@ -2022,6 +2022,16 @@ static void record_and_restart(struct perf_event *event, unsigned long val, |
379 | local64_set(&event->hw.period_left, left); |
380 | perf_event_update_userpage(event); |
381 | |
382 | + /* |
383 | + * Due to hardware limitation, sometimes SIAR could sample a kernel |
384 | + * address even when freeze on supervisor state (kernel) is set in |
385 | + * MMCR2. Check attr.exclude_kernel and address to drop the sample in |
386 | + * these cases. |
387 | + */ |
388 | + if (event->attr.exclude_kernel && record) |
389 | + if (is_kernel_addr(mfspr(SPRN_SIAR))) |
390 | + record = 0; |
391 | + |
392 | /* |
393 | * Finally record data if requested. |
394 | */ |
395 | diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c |
396 | index e76aefae2aa2b..0a0e0c8256f67 100644 |
397 | --- a/arch/powerpc/platforms/pseries/suspend.c |
398 | +++ b/arch/powerpc/platforms/pseries/suspend.c |
399 | @@ -224,7 +224,6 @@ static struct bus_type suspend_subsys = { |
400 | |
401 | static const struct platform_suspend_ops pseries_suspend_ops = { |
402 | .valid = suspend_valid_only_mem, |
403 | - .begin = pseries_suspend_begin, |
404 | .prepare_late = pseries_prepare_late, |
405 | .enter = pseries_suspend_enter, |
406 | }; |
407 | diff --git a/arch/powerpc/xmon/nonstdio.c b/arch/powerpc/xmon/nonstdio.c |
408 | index d00123421e007..eefe1b94e0aad 100644 |
409 | --- a/arch/powerpc/xmon/nonstdio.c |
410 | +++ b/arch/powerpc/xmon/nonstdio.c |
411 | @@ -182,7 +182,7 @@ void xmon_printf(const char *format, ...) |
412 | |
413 | if (n && rc == 0) { |
414 | /* No udbg hooks, fallback to printk() - dangerous */ |
415 | - printk("%s", xmon_outbuf); |
416 | + pr_cont("%s", xmon_outbuf); |
417 | } |
418 | } |
419 | |
420 | diff --git a/arch/um/drivers/xterm.c b/arch/um/drivers/xterm.c |
421 | index 20e30be44795b..e3b422ebce09f 100644 |
422 | --- a/arch/um/drivers/xterm.c |
423 | +++ b/arch/um/drivers/xterm.c |
424 | @@ -18,6 +18,7 @@ |
425 | struct xterm_chan { |
426 | int pid; |
427 | int helper_pid; |
428 | + int chan_fd; |
429 | char *title; |
430 | int device; |
431 | int raw; |
432 | @@ -33,6 +34,7 @@ static void *xterm_init(char *str, int device, const struct chan_opts *opts) |
433 | return NULL; |
434 | *data = ((struct xterm_chan) { .pid = -1, |
435 | .helper_pid = -1, |
436 | + .chan_fd = -1, |
437 | .device = device, |
438 | .title = opts->xterm_title, |
439 | .raw = opts->raw } ); |
440 | @@ -149,6 +151,7 @@ static int xterm_open(int input, int output, int primary, void *d, |
441 | goto out_kill; |
442 | } |
443 | |
444 | + data->chan_fd = fd; |
445 | new = xterm_fd(fd, &data->helper_pid); |
446 | if (new < 0) { |
447 | err = new; |
448 | @@ -206,6 +209,8 @@ static void xterm_close(int fd, void *d) |
449 | os_kill_process(data->helper_pid, 0); |
450 | data->helper_pid = -1; |
451 | |
452 | + if (data->chan_fd != -1) |
453 | + os_close_file(data->chan_fd); |
454 | os_close_file(fd); |
455 | } |
456 | |
457 | diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c |
458 | index 86aec286e4f22..3da08881a0104 100644 |
459 | --- a/arch/x86/kernel/kprobes/core.c |
460 | +++ b/arch/x86/kernel/kprobes/core.c |
461 | @@ -1018,6 +1018,11 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr) |
462 | * So clear it by resetting the current kprobe: |
463 | */ |
464 | regs->flags &= ~X86_EFLAGS_TF; |
465 | + /* |
466 | + * Since the single step (trap) has been cancelled, |
467 | + * we need to restore BTF here. |
468 | + */ |
469 | + restore_btf(); |
470 | |
471 | /* |
472 | * If the TF flag was set before the kprobe hit, |
473 | diff --git a/drivers/acpi/acpi_pnp.c b/drivers/acpi/acpi_pnp.c |
474 | index 67d97c0090a27..5d72baf60ac83 100644 |
475 | --- a/drivers/acpi/acpi_pnp.c |
476 | +++ b/drivers/acpi/acpi_pnp.c |
477 | @@ -320,6 +320,9 @@ static bool matching_id(const char *idstr, const char *list_id) |
478 | { |
479 | int i; |
480 | |
481 | + if (strlen(idstr) != strlen(list_id)) |
482 | + return false; |
483 | + |
484 | if (memcmp(idstr, list_id, 3)) |
485 | return false; |
486 | |
487 | diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c |
488 | index 56241eb341f4b..76cc11b3b49fb 100644 |
489 | --- a/drivers/acpi/resource.c |
490 | +++ b/drivers/acpi/resource.c |
491 | @@ -532,7 +532,7 @@ static acpi_status acpi_dev_process_resource(struct acpi_resource *ares, |
492 | ret = c->preproc(ares, c->preproc_data); |
493 | if (ret < 0) { |
494 | c->error = ret; |
495 | - return AE_CTRL_TERMINATE; |
496 | + return AE_ABORT_METHOD; |
497 | } else if (ret > 0) { |
498 | return AE_OK; |
499 | } |
500 | diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c |
501 | index 702ebfc4face5..9a4ac6fd262ac 100644 |
502 | --- a/drivers/block/xen-blkback/xenbus.c |
503 | +++ b/drivers/block/xen-blkback/xenbus.c |
504 | @@ -262,6 +262,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif) |
505 | |
506 | if (ring->xenblkd) { |
507 | kthread_stop(ring->xenblkd); |
508 | + ring->xenblkd = NULL; |
509 | wake_up(&ring->shutdown_wq); |
510 | } |
511 | |
512 | diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c |
513 | index 1b14256376d24..7c1da45be166e 100644 |
514 | --- a/drivers/bus/mips_cdmm.c |
515 | +++ b/drivers/bus/mips_cdmm.c |
516 | @@ -544,10 +544,8 @@ static void mips_cdmm_bus_discover(struct mips_cdmm_bus *bus) |
517 | dev_set_name(&dev->dev, "cdmm%u-%u", cpu, id); |
518 | ++id; |
519 | ret = device_register(&dev->dev); |
520 | - if (ret) { |
521 | + if (ret) |
522 | put_device(&dev->dev); |
523 | - kfree(dev); |
524 | - } |
525 | } |
526 | } |
527 | |
528 | diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c |
529 | index f5d74e8db4327..1803af6230b27 100644 |
530 | --- a/drivers/clk/clk-s2mps11.c |
531 | +++ b/drivers/clk/clk-s2mps11.c |
532 | @@ -211,6 +211,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) |
533 | return ret; |
534 | |
535 | err_reg: |
536 | + of_node_put(s2mps11_clks[0].clk_np); |
537 | while (--i >= 0) |
538 | clkdev_drop(s2mps11_clks[i].lookup); |
539 | |
540 | diff --git a/drivers/clk/mvebu/armada-37xx-xtal.c b/drivers/clk/mvebu/armada-37xx-xtal.c |
541 | index 612d65ede10a0..5370514959e15 100644 |
542 | --- a/drivers/clk/mvebu/armada-37xx-xtal.c |
543 | +++ b/drivers/clk/mvebu/armada-37xx-xtal.c |
544 | @@ -15,8 +15,8 @@ |
545 | #include <linux/platform_device.h> |
546 | #include <linux/regmap.h> |
547 | |
548 | -#define NB_GPIO1_LATCH 0xC |
549 | -#define XTAL_MODE BIT(31) |
550 | +#define NB_GPIO1_LATCH 0x8 |
551 | +#define XTAL_MODE BIT(9) |
552 | |
553 | static int armada_3700_xtal_clock_probe(struct platform_device *pdev) |
554 | { |
555 | diff --git a/drivers/clk/tegra/clk-id.h b/drivers/clk/tegra/clk-id.h |
556 | index 5738635c52741..9f8397c696e6c 100644 |
557 | --- a/drivers/clk/tegra/clk-id.h |
558 | +++ b/drivers/clk/tegra/clk-id.h |
559 | @@ -233,6 +233,7 @@ enum clk_id { |
560 | tegra_clk_sdmmc4_8, |
561 | tegra_clk_sdmmc4_9, |
562 | tegra_clk_se, |
563 | + tegra_clk_se_10, |
564 | tegra_clk_soc_therm, |
565 | tegra_clk_soc_therm_8, |
566 | tegra_clk_sor0, |
567 | diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c |
568 | index d9c1f229c644b..bf88f90e6c438 100644 |
569 | --- a/drivers/clk/tegra/clk-tegra-periph.c |
570 | +++ b/drivers/clk/tegra/clk-tegra-periph.c |
571 | @@ -648,7 +648,7 @@ static struct tegra_periph_init_data periph_clks[] = { |
572 | INT8("host1x", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_HOST1X, 28, 0, tegra_clk_host1x_8), |
573 | INT8("host1x", mux_pllc4_out1_pllc_pllc4_out2_pllp_clkm_plla_pllc4_out0, CLK_SOURCE_HOST1X, 28, 0, tegra_clk_host1x_9), |
574 | INT8("se", mux_pllp_pllc2_c_c3_pllm_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se), |
575 | - INT8("se", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se), |
576 | + INT8("se", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se_10), |
577 | INT8("2d", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_2D, 21, 0, tegra_clk_gr2d_8), |
578 | INT8("3d", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_3D, 24, 0, tegra_clk_gr3d_8), |
579 | INT8("vic03", mux_pllm_pllc_pllp_plla_pllc2_c3_clkm, CLK_SOURCE_VIC03, 178, 0, tegra_clk_vic03), |
580 | diff --git a/drivers/clk/ti/fapll.c b/drivers/clk/ti/fapll.c |
581 | index 66a0d0ed8b550..02ff499e36536 100644 |
582 | --- a/drivers/clk/ti/fapll.c |
583 | +++ b/drivers/clk/ti/fapll.c |
584 | @@ -497,6 +497,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, |
585 | { |
586 | struct clk_init_data *init; |
587 | struct fapll_synth *synth; |
588 | + struct clk *clk = ERR_PTR(-ENOMEM); |
589 | |
590 | init = kzalloc(sizeof(*init), GFP_KERNEL); |
591 | if (!init) |
592 | @@ -519,13 +520,19 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, |
593 | synth->hw.init = init; |
594 | synth->clk_pll = pll_clk; |
595 | |
596 | - return clk_register(NULL, &synth->hw); |
597 | + clk = clk_register(NULL, &synth->hw); |
598 | + if (IS_ERR(clk)) { |
599 | + pr_err("failed to register clock\n"); |
600 | + goto free; |
601 | + } |
602 | + |
603 | + return clk; |
604 | |
605 | free: |
606 | kfree(synth); |
607 | kfree(init); |
608 | |
609 | - return ERR_PTR(-ENOMEM); |
610 | + return clk; |
611 | } |
612 | |
613 | static void __init ti_fapll_setup(struct device_node *node) |
614 | diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c |
615 | index a2503db7e533e..5d7f83d27093f 100644 |
616 | --- a/drivers/clocksource/arm_arch_timer.c |
617 | +++ b/drivers/clocksource/arm_arch_timer.c |
618 | @@ -426,15 +426,24 @@ static void arch_timer_evtstrm_enable(int divider) |
619 | |
620 | static void arch_timer_configure_evtstream(void) |
621 | { |
622 | - int evt_stream_div, pos; |
623 | + int evt_stream_div, lsb; |
624 | + |
625 | + /* |
626 | + * As the event stream can at most be generated at half the frequency |
627 | + * of the counter, use half the frequency when computing the divider. |
628 | + */ |
629 | + evt_stream_div = arch_timer_rate / ARCH_TIMER_EVT_STREAM_FREQ / 2; |
630 | + |
631 | + /* |
632 | + * Find the closest power of two to the divisor. If the adjacent bit |
633 | + * of lsb (last set bit, starts from 0) is set, then we use (lsb + 1). |
634 | + */ |
635 | + lsb = fls(evt_stream_div) - 1; |
636 | + if (lsb > 0 && (evt_stream_div & BIT(lsb - 1))) |
637 | + lsb++; |
638 | |
639 | - /* Find the closest power of two to the divisor */ |
640 | - evt_stream_div = arch_timer_rate / ARCH_TIMER_EVT_STREAM_FREQ; |
641 | - pos = fls(evt_stream_div); |
642 | - if (pos > 1 && !(evt_stream_div & (1 << (pos - 2)))) |
643 | - pos--; |
644 | /* enable event stream */ |
645 | - arch_timer_evtstrm_enable(min(pos, 15)); |
646 | + arch_timer_evtstrm_enable(max(0, min(lsb, 15))); |
647 | } |
648 | |
649 | static void arch_counter_set_user_access(void) |
650 | diff --git a/drivers/clocksource/cadence_ttc_timer.c b/drivers/clocksource/cadence_ttc_timer.c |
651 | index fbfbdec13b081..7cddc54be96cc 100644 |
652 | --- a/drivers/clocksource/cadence_ttc_timer.c |
653 | +++ b/drivers/clocksource/cadence_ttc_timer.c |
654 | @@ -418,10 +418,8 @@ static int __init ttc_setup_clockevent(struct clk *clk, |
655 | ttcce->ttc.clk = clk; |
656 | |
657 | err = clk_prepare_enable(ttcce->ttc.clk); |
658 | - if (err) { |
659 | - kfree(ttcce); |
660 | - return err; |
661 | - } |
662 | + if (err) |
663 | + goto out_kfree; |
664 | |
665 | ttcce->ttc.clk_rate_change_nb.notifier_call = |
666 | ttc_rate_change_clockevent_cb; |
667 | @@ -431,7 +429,7 @@ static int __init ttc_setup_clockevent(struct clk *clk, |
668 | &ttcce->ttc.clk_rate_change_nb); |
669 | if (err) { |
670 | pr_warn("Unable to register clock notifier.\n"); |
671 | - return err; |
672 | + goto out_kfree; |
673 | } |
674 | |
675 | ttcce->ttc.freq = clk_get_rate(ttcce->ttc.clk); |
676 | @@ -460,15 +458,17 @@ static int __init ttc_setup_clockevent(struct clk *clk, |
677 | |
678 | err = request_irq(irq, ttc_clock_event_interrupt, |
679 | IRQF_TIMER, ttcce->ce.name, ttcce); |
680 | - if (err) { |
681 | - kfree(ttcce); |
682 | - return err; |
683 | - } |
684 | + if (err) |
685 | + goto out_kfree; |
686 | |
687 | clockevents_config_and_register(&ttcce->ce, |
688 | ttcce->ttc.freq / PRESCALE, 1, 0xfffe); |
689 | |
690 | return 0; |
691 | + |
692 | +out_kfree: |
693 | + kfree(ttcce); |
694 | + return err; |
695 | } |
696 | |
697 | /** |
698 | diff --git a/drivers/cpufreq/highbank-cpufreq.c b/drivers/cpufreq/highbank-cpufreq.c |
699 | index 1608f7105c9f8..ad743f2f31e78 100644 |
700 | --- a/drivers/cpufreq/highbank-cpufreq.c |
701 | +++ b/drivers/cpufreq/highbank-cpufreq.c |
702 | @@ -104,6 +104,13 @@ out_put_node: |
703 | } |
704 | module_init(hb_cpufreq_driver_init); |
705 | |
706 | +static const struct of_device_id __maybe_unused hb_cpufreq_of_match[] = { |
707 | + { .compatible = "calxeda,highbank" }, |
708 | + { .compatible = "calxeda,ecx-2000" }, |
709 | + { }, |
710 | +}; |
711 | +MODULE_DEVICE_TABLE(of, hb_cpufreq_of_match); |
712 | + |
713 | MODULE_AUTHOR("Mark Langsdorf <mark.langsdorf@calxeda.com>"); |
714 | MODULE_DESCRIPTION("Calxeda Highbank cpufreq driver"); |
715 | MODULE_LICENSE("GPL"); |
716 | diff --git a/drivers/cpufreq/loongson1-cpufreq.c b/drivers/cpufreq/loongson1-cpufreq.c |
717 | index be89416e2358f..9d902f67f8716 100644 |
718 | --- a/drivers/cpufreq/loongson1-cpufreq.c |
719 | +++ b/drivers/cpufreq/loongson1-cpufreq.c |
720 | @@ -217,6 +217,7 @@ static struct platform_driver ls1x_cpufreq_platdrv = { |
721 | |
722 | module_platform_driver(ls1x_cpufreq_platdrv); |
723 | |
724 | +MODULE_ALIAS("platform:ls1x-cpufreq"); |
725 | MODULE_AUTHOR("Kelvin Cheung <keguang.zhang@gmail.com>"); |
726 | MODULE_DESCRIPTION("Loongson1 CPUFreq driver"); |
727 | MODULE_LICENSE("GPL"); |
728 | diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c |
729 | index ea7a4e1b68c26..1a45fbb00d877 100644 |
730 | --- a/drivers/cpufreq/scpi-cpufreq.c |
731 | +++ b/drivers/cpufreq/scpi-cpufreq.c |
732 | @@ -111,6 +111,7 @@ static struct platform_driver scpi_cpufreq_platdrv = { |
733 | }; |
734 | module_platform_driver(scpi_cpufreq_platdrv); |
735 | |
736 | +MODULE_ALIAS("platform:scpi-cpufreq"); |
737 | MODULE_AUTHOR("Sudeep Holla <sudeep.holla@arm.com>"); |
738 | MODULE_DESCRIPTION("ARM SCPI CPUFreq interface driver"); |
739 | MODULE_LICENSE("GPL v2"); |
740 | diff --git a/drivers/cpufreq/sti-cpufreq.c b/drivers/cpufreq/sti-cpufreq.c |
741 | index 2cb3346e82d35..c7f0b2df15cdd 100644 |
742 | --- a/drivers/cpufreq/sti-cpufreq.c |
743 | +++ b/drivers/cpufreq/sti-cpufreq.c |
744 | @@ -294,6 +294,13 @@ register_cpufreq_dt: |
745 | } |
746 | module_init(sti_cpufreq_init); |
747 | |
748 | +static const struct of_device_id __maybe_unused sti_cpufreq_of_match[] = { |
749 | + { .compatible = "st,stih407" }, |
750 | + { .compatible = "st,stih410" }, |
751 | + { }, |
752 | +}; |
753 | +MODULE_DEVICE_TABLE(of, sti_cpufreq_of_match); |
754 | + |
755 | MODULE_DESCRIPTION("STMicroelectronics CPUFreq/OPP driver"); |
756 | MODULE_AUTHOR("Ajitpal Singh <ajitpal.singh@st.com>"); |
757 | MODULE_AUTHOR("Lee Jones <lee.jones@linaro.org>"); |
758 | diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c |
759 | index fe32dd95ae4ff..a2d5ba0a0d5a0 100644 |
760 | --- a/drivers/crypto/omap-aes.c |
761 | +++ b/drivers/crypto/omap-aes.c |
762 | @@ -1172,7 +1172,7 @@ static int omap_aes_probe(struct platform_device *pdev) |
763 | if (err < 0) { |
764 | dev_err(dev, "%s: failed to get_sync(%d)\n", |
765 | __func__, err); |
766 | - goto err_res; |
767 | + goto err_pm_disable; |
768 | } |
769 | |
770 | omap_aes_dma_stop(dd); |
771 | @@ -1257,6 +1257,7 @@ err_engine: |
772 | omap_aes_dma_cleanup(dd); |
773 | err_irq: |
774 | tasklet_kill(&dd->done_task); |
775 | +err_pm_disable: |
776 | pm_runtime_disable(dev); |
777 | err_res: |
778 | dd = NULL; |
779 | diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c |
780 | index 059c2d4ad18fb..f4a6be76468d5 100644 |
781 | --- a/drivers/crypto/talitos.c |
782 | +++ b/drivers/crypto/talitos.c |
783 | @@ -447,7 +447,7 @@ DEF_TALITOS2_DONE(ch1_3, TALITOS2_ISR_CH_1_3_DONE) |
784 | /* |
785 | * locate current (offending) descriptor |
786 | */ |
787 | -static u32 current_desc_hdr(struct device *dev, int ch) |
788 | +static __be32 current_desc_hdr(struct device *dev, int ch) |
789 | { |
790 | struct talitos_private *priv = dev_get_drvdata(dev); |
791 | int tail, iter; |
792 | @@ -478,13 +478,13 @@ static u32 current_desc_hdr(struct device *dev, int ch) |
793 | /* |
794 | * user diagnostics; report root cause of error based on execution unit status |
795 | */ |
796 | -static void report_eu_error(struct device *dev, int ch, u32 desc_hdr) |
797 | +static void report_eu_error(struct device *dev, int ch, __be32 desc_hdr) |
798 | { |
799 | struct talitos_private *priv = dev_get_drvdata(dev); |
800 | int i; |
801 | |
802 | if (!desc_hdr) |
803 | - desc_hdr = in_be32(priv->chan[ch].reg + TALITOS_DESCBUF); |
804 | + desc_hdr = cpu_to_be32(in_be32(priv->chan[ch].reg + TALITOS_DESCBUF)); |
805 | |
806 | switch (desc_hdr & DESC_HDR_SEL0_MASK) { |
807 | case DESC_HDR_SEL0_AFEU: |
808 | diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c |
809 | index 68dbcb814b2ff..4cf72487381e3 100644 |
810 | --- a/drivers/extcon/extcon-max77693.c |
811 | +++ b/drivers/extcon/extcon-max77693.c |
812 | @@ -1272,4 +1272,4 @@ module_platform_driver(max77693_muic_driver); |
813 | MODULE_DESCRIPTION("Maxim MAX77693 Extcon driver"); |
814 | MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>"); |
815 | MODULE_LICENSE("GPL"); |
816 | -MODULE_ALIAS("platform:extcon-max77693"); |
817 | +MODULE_ALIAS("platform:max77693-muic"); |
818 | diff --git a/drivers/gpu/drm/drm_dp_aux_dev.c b/drivers/gpu/drm/drm_dp_aux_dev.c |
819 | index ec1ed94b23902..19c85c50e2d17 100644 |
820 | --- a/drivers/gpu/drm/drm_dp_aux_dev.c |
821 | +++ b/drivers/gpu/drm/drm_dp_aux_dev.c |
822 | @@ -59,7 +59,7 @@ static struct drm_dp_aux_dev *drm_dp_aux_dev_get_by_minor(unsigned index) |
823 | |
824 | mutex_lock(&aux_idr_mutex); |
825 | aux_dev = idr_find(&aux_idr, index); |
826 | - if (!kref_get_unless_zero(&aux_dev->refcount)) |
827 | + if (aux_dev && !kref_get_unless_zero(&aux_dev->refcount)) |
828 | aux_dev = NULL; |
829 | mutex_unlock(&aux_idr_mutex); |
830 | |
831 | diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c |
832 | index 7ec4e3fbafd8c..ec6ea202cf5de 100644 |
833 | --- a/drivers/gpu/drm/gma500/cdv_intel_dp.c |
834 | +++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c |
835 | @@ -2126,7 +2126,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev |
836 | DRM_INFO("failed to retrieve link info, disabling eDP\n"); |
837 | cdv_intel_dp_encoder_destroy(encoder); |
838 | cdv_intel_dp_destroy(connector); |
839 | - goto err_priv; |
840 | + goto err_connector; |
841 | } else { |
842 | DRM_DEBUG_KMS("DPCD: Rev=%x LN_Rate=%x LN_CNT=%x LN_DOWNSP=%x\n", |
843 | intel_dp->dpcd[0], intel_dp->dpcd[1], |
844 | diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c |
845 | index 6a0b25e0823fa..6b64a1e07c017 100644 |
846 | --- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c |
847 | +++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c |
848 | @@ -747,6 +747,7 @@ static int omap_dmm_probe(struct platform_device *dev) |
849 | &omap_dmm->refill_pa, GFP_KERNEL); |
850 | if (!omap_dmm->refill_va) { |
851 | dev_err(&dev->dev, "could not allocate refill memory\n"); |
852 | + ret = -ENOMEM; |
853 | goto fail; |
854 | } |
855 | |
856 | diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c |
857 | index 74d0540b8d4c7..76717d2f51e74 100644 |
858 | --- a/drivers/gpu/drm/tegra/sor.c |
859 | +++ b/drivers/gpu/drm/tegra/sor.c |
860 | @@ -2375,17 +2375,23 @@ static int tegra_sor_init(struct host1x_client *client) |
861 | if (err < 0) { |
862 | dev_err(sor->dev, "failed to deassert SOR reset: %d\n", |
863 | err); |
864 | + clk_disable_unprepare(sor->clk); |
865 | return err; |
866 | } |
867 | } |
868 | |
869 | err = clk_prepare_enable(sor->clk_safe); |
870 | - if (err < 0) |
871 | + if (err < 0) { |
872 | + clk_disable_unprepare(sor->clk); |
873 | return err; |
874 | + } |
875 | |
876 | err = clk_prepare_enable(sor->clk_dp); |
877 | - if (err < 0) |
878 | + if (err < 0) { |
879 | + clk_disable_unprepare(sor->clk_safe); |
880 | + clk_disable_unprepare(sor->clk); |
881 | return err; |
882 | + } |
883 | |
884 | return 0; |
885 | } |
886 | diff --git a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c b/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c |
887 | index f98c1e1b1dbdc..58a753ef27175 100644 |
888 | --- a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c |
889 | +++ b/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c |
890 | @@ -397,6 +397,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = { |
891 | }, |
892 | .driver_data = (void *)&sipodev_desc |
893 | }, |
894 | + { |
895 | + .ident = "Vero K147", |
896 | + .matches = { |
897 | + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VERO"), |
898 | + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "K147"), |
899 | + }, |
900 | + .driver_data = (void *)&sipodev_desc |
901 | + }, |
902 | { } /* Terminate list */ |
903 | }; |
904 | |
905 | diff --git a/drivers/hsi/controllers/omap_ssi_core.c b/drivers/hsi/controllers/omap_ssi_core.c |
906 | index 9a29b34ed2c82..22cd7169011d1 100644 |
907 | --- a/drivers/hsi/controllers/omap_ssi_core.c |
908 | +++ b/drivers/hsi/controllers/omap_ssi_core.c |
909 | @@ -391,7 +391,7 @@ static int ssi_add_controller(struct hsi_controller *ssi, |
910 | |
911 | err = ida_simple_get(&platform_omap_ssi_ida, 0, 0, GFP_KERNEL); |
912 | if (err < 0) |
913 | - goto out_err; |
914 | + return err; |
915 | ssi->id = err; |
916 | |
917 | ssi->owner = THIS_MODULE; |
918 | diff --git a/drivers/iio/adc/rockchip_saradc.c b/drivers/iio/adc/rockchip_saradc.c |
919 | index 85d7012916540..7e72dab459321 100644 |
920 | --- a/drivers/iio/adc/rockchip_saradc.c |
921 | +++ b/drivers/iio/adc/rockchip_saradc.c |
922 | @@ -378,7 +378,7 @@ static int rockchip_saradc_resume(struct device *dev) |
923 | |
924 | ret = clk_prepare_enable(info->clk); |
925 | if (ret) |
926 | - return ret; |
927 | + clk_disable_unprepare(info->pclk); |
928 | |
929 | return ret; |
930 | } |
931 | diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c |
932 | index 2f037cd59d53c..b0fdce0b95633 100644 |
933 | --- a/drivers/iio/industrialio-buffer.c |
934 | +++ b/drivers/iio/industrialio-buffer.c |
935 | @@ -1335,12 +1335,12 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev, |
936 | indio_dev->masklength, |
937 | in_ind + 1); |
938 | while (in_ind != out_ind) { |
939 | - in_ind = find_next_bit(indio_dev->active_scan_mask, |
940 | - indio_dev->masklength, |
941 | - in_ind + 1); |
942 | length = iio_storage_bytes_for_si(indio_dev, in_ind); |
943 | /* Make sure we are aligned */ |
944 | in_loc = roundup(in_loc, length) + length; |
945 | + in_ind = find_next_bit(indio_dev->active_scan_mask, |
946 | + indio_dev->masklength, |
947 | + in_ind + 1); |
948 | } |
949 | length = iio_storage_bytes_for_si(indio_dev, in_ind); |
950 | out_loc = roundup(out_loc, length); |
951 | diff --git a/drivers/iio/pressure/mpl3115.c b/drivers/iio/pressure/mpl3115.c |
952 | index eb87948fc5596..d6c919cfa4166 100644 |
953 | --- a/drivers/iio/pressure/mpl3115.c |
954 | +++ b/drivers/iio/pressure/mpl3115.c |
955 | @@ -139,7 +139,14 @@ static irqreturn_t mpl3115_trigger_handler(int irq, void *p) |
956 | struct iio_poll_func *pf = p; |
957 | struct iio_dev *indio_dev = pf->indio_dev; |
958 | struct mpl3115_data *data = iio_priv(indio_dev); |
959 | - u8 buffer[16]; /* 32-bit channel + 16-bit channel + padding + ts */ |
960 | + /* |
961 | + * 32-bit channel + 16-bit channel + padding + ts |
962 | + * Note that it is possible for only one of the first 2 |
963 | + * channels to be enabled. If that happens, the first element |
964 | + * of the buffer may be either 16 or 32-bits. As such we cannot |
965 | + * use a simple structure definition to express this data layout. |
966 | + */ |
967 | + u8 buffer[16] __aligned(8); |
968 | int ret, pos = 0; |
969 | |
970 | mutex_lock(&data->lock); |
971 | diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c |
972 | index 304429fd04ddb..97168b856606b 100644 |
973 | --- a/drivers/infiniband/core/cm.c |
974 | +++ b/drivers/infiniband/core/cm.c |
975 | @@ -1252,6 +1252,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_id, |
976 | id.local_id); |
977 | if (IS_ERR(cm_id_priv->timewait_info)) { |
978 | ret = PTR_ERR(cm_id_priv->timewait_info); |
979 | + cm_id_priv->timewait_info = NULL; |
980 | goto out; |
981 | } |
982 | |
983 | @@ -1683,6 +1684,7 @@ static int cm_req_handler(struct cm_work *work) |
984 | id.local_id); |
985 | if (IS_ERR(cm_id_priv->timewait_info)) { |
986 | ret = PTR_ERR(cm_id_priv->timewait_info); |
987 | + cm_id_priv->timewait_info = NULL; |
988 | goto destroy; |
989 | } |
990 | cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id; |
991 | diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c |
992 | index a856371bbe58c..7b38b9a280ba4 100644 |
993 | --- a/drivers/infiniband/hw/cxgb4/cq.c |
994 | +++ b/drivers/infiniband/hw/cxgb4/cq.c |
995 | @@ -893,6 +893,9 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, |
996 | |
997 | rhp = to_c4iw_dev(ibdev); |
998 | |
999 | + if (entries < 1 || entries > ibdev->attrs.max_cqe) |
1000 | + return ERR_PTR(-EINVAL); |
1001 | + |
1002 | if (vector >= rhp->rdev.lldi.nciq) |
1003 | return ERR_PTR(-EINVAL); |
1004 | |
1005 | diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c |
1006 | index a5694dec3f2ee..098653b8157ed 100644 |
1007 | --- a/drivers/infiniband/hw/mthca/mthca_cq.c |
1008 | +++ b/drivers/infiniband/hw/mthca/mthca_cq.c |
1009 | @@ -609,7 +609,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev, |
1010 | entry->byte_len = MTHCA_ATOMIC_BYTE_LEN; |
1011 | break; |
1012 | default: |
1013 | - entry->opcode = MTHCA_OPCODE_INVALID; |
1014 | + entry->opcode = 0xFF; |
1015 | break; |
1016 | } |
1017 | } else { |
1018 | diff --git a/drivers/infiniband/hw/mthca/mthca_dev.h b/drivers/infiniband/hw/mthca/mthca_dev.h |
1019 | index 4393a022867ba..e1fc67e73bf87 100644 |
1020 | --- a/drivers/infiniband/hw/mthca/mthca_dev.h |
1021 | +++ b/drivers/infiniband/hw/mthca/mthca_dev.h |
1022 | @@ -105,7 +105,6 @@ enum { |
1023 | MTHCA_OPCODE_ATOMIC_CS = 0x11, |
1024 | MTHCA_OPCODE_ATOMIC_FA = 0x12, |
1025 | MTHCA_OPCODE_BIND_MW = 0x18, |
1026 | - MTHCA_OPCODE_INVALID = 0xff |
1027 | }; |
1028 | |
1029 | enum { |
1030 | diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c |
1031 | index 5a2d7b0050f4c..463c4b3e73661 100644 |
1032 | --- a/drivers/infiniband/sw/rxe/rxe_req.c |
1033 | +++ b/drivers/infiniband/sw/rxe/rxe_req.c |
1034 | @@ -661,7 +661,8 @@ next_wqe: |
1035 | } |
1036 | |
1037 | if (unlikely(qp_type(qp) == IB_QPT_RC && |
1038 | - qp->req.psn > (qp->comp.psn + RXE_MAX_UNACKED_PSNS))) { |
1039 | + psn_compare(qp->req.psn, (qp->comp.psn + |
1040 | + RXE_MAX_UNACKED_PSNS)) > 0)) { |
1041 | qp->req.wait_psn = 1; |
1042 | goto exit; |
1043 | } |
1044 | diff --git a/drivers/input/keyboard/cros_ec_keyb.c b/drivers/input/keyboard/cros_ec_keyb.c |
1045 | index 25943e9bc8bff..328792e26a9f6 100644 |
1046 | --- a/drivers/input/keyboard/cros_ec_keyb.c |
1047 | +++ b/drivers/input/keyboard/cros_ec_keyb.c |
1048 | @@ -140,6 +140,7 @@ static void cros_ec_keyb_process(struct cros_ec_keyb *ckdev, |
1049 | "changed: [r%d c%d]: byte %02x\n", |
1050 | row, col, new_state); |
1051 | |
1052 | + input_event(idev, EV_MSC, MSC_SCAN, pos); |
1053 | input_report_key(idev, keycodes[pos], |
1054 | new_state); |
1055 | } |
1056 | diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c |
1057 | index 23c191a2a0715..cf4d507efaf6d 100644 |
1058 | --- a/drivers/input/misc/cm109.c |
1059 | +++ b/drivers/input/misc/cm109.c |
1060 | @@ -571,12 +571,15 @@ static int cm109_input_open(struct input_dev *idev) |
1061 | dev->ctl_data->byte[HID_OR2] = dev->keybit; |
1062 | dev->ctl_data->byte[HID_OR3] = 0x00; |
1063 | |
1064 | + dev->ctl_urb_pending = 1; |
1065 | error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL); |
1066 | - if (error) |
1067 | + if (error) { |
1068 | + dev->ctl_urb_pending = 0; |
1069 | dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n", |
1070 | __func__, error); |
1071 | - else |
1072 | + } else { |
1073 | dev->open = 1; |
1074 | + } |
1075 | |
1076 | mutex_unlock(&dev->pm_mutex); |
1077 | |
1078 | diff --git a/drivers/input/mouse/cyapa_gen6.c b/drivers/input/mouse/cyapa_gen6.c |
1079 | index 016397850b1b0..9c1f10491ab1a 100644 |
1080 | --- a/drivers/input/mouse/cyapa_gen6.c |
1081 | +++ b/drivers/input/mouse/cyapa_gen6.c |
1082 | @@ -573,7 +573,7 @@ static int cyapa_pip_retrieve_data_structure(struct cyapa *cyapa, |
1083 | |
1084 | memset(&cmd, 0, sizeof(cmd)); |
1085 | put_unaligned_le16(PIP_OUTPUT_REPORT_ADDR, &cmd.head.addr); |
1086 | - put_unaligned_le16(sizeof(cmd), &cmd.head.length - 2); |
1087 | + put_unaligned_le16(sizeof(cmd) - 2, &cmd.head.length); |
1088 | cmd.head.report_id = PIP_APP_CMD_REPORT_ID; |
1089 | cmd.head.cmd_code = PIP_RETRIEVE_DATA_STRUCTURE; |
1090 | put_unaligned_le16(read_offset, &cmd.read_offset); |
1091 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h |
1092 | index 1f45010a5b814..fa07be0b4500e 100644 |
1093 | --- a/drivers/input/serio/i8042-x86ia64io.h |
1094 | +++ b/drivers/input/serio/i8042-x86ia64io.h |
1095 | @@ -687,6 +687,48 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { |
1096 | DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"), |
1097 | }, |
1098 | }, |
1099 | + { |
1100 | + .matches = { |
1101 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1102 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"), |
1103 | + }, |
1104 | + }, |
1105 | + { |
1106 | + .matches = { |
1107 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1108 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"), |
1109 | + }, |
1110 | + }, |
1111 | + { |
1112 | + .matches = { |
1113 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1114 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"), |
1115 | + }, |
1116 | + }, |
1117 | + { |
1118 | + .matches = { |
1119 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1120 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"), |
1121 | + }, |
1122 | + }, |
1123 | + { |
1124 | + .matches = { |
1125 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1126 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"), |
1127 | + }, |
1128 | + }, |
1129 | + { |
1130 | + .matches = { |
1131 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1132 | + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"), |
1133 | + }, |
1134 | + }, |
1135 | + { |
1136 | + .matches = { |
1137 | + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
1138 | + DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"), |
1139 | + }, |
1140 | + }, |
1141 | { |
1142 | /* Advent 4211 */ |
1143 | .matches = { |
1144 | diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c |
1145 | index 1ce3ecbe37f89..b77a2178fdec4 100644 |
1146 | --- a/drivers/input/touchscreen/ads7846.c |
1147 | +++ b/drivers/input/touchscreen/ads7846.c |
1148 | @@ -35,6 +35,7 @@ |
1149 | #include <linux/regulator/consumer.h> |
1150 | #include <linux/module.h> |
1151 | #include <asm/irq.h> |
1152 | +#include <asm/unaligned.h> |
1153 | |
1154 | /* |
1155 | * This code has been heavily tested on a Nokia 770, and lightly |
1156 | @@ -410,7 +411,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command) |
1157 | |
1158 | if (status == 0) { |
1159 | /* BE12 value, then padding */ |
1160 | - status = be16_to_cpu(*((u16 *)&req->sample[1])); |
1161 | + status = get_unaligned_be16(&req->sample[1]); |
1162 | status = status >> 3; |
1163 | status &= 0x0fff; |
1164 | } |
1165 | @@ -785,10 +786,11 @@ static void ads7846_report_state(struct ads7846 *ts) |
1166 | /* compute touch pressure resistance using equation #2 */ |
1167 | Rt = z2; |
1168 | Rt -= z1; |
1169 | - Rt *= x; |
1170 | Rt *= ts->x_plate_ohms; |
1171 | + Rt = DIV_ROUND_CLOSEST(Rt, 16); |
1172 | + Rt *= x; |
1173 | Rt /= z1; |
1174 | - Rt = (Rt + 2047) >> 12; |
1175 | + Rt = DIV_ROUND_CLOSEST(Rt, 256); |
1176 | } else { |
1177 | Rt = 0; |
1178 | } |
1179 | diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c |
1180 | index 6a02e7301297d..ba0ab9963f3cd 100644 |
1181 | --- a/drivers/input/touchscreen/goodix.c |
1182 | +++ b/drivers/input/touchscreen/goodix.c |
1183 | @@ -98,6 +98,18 @@ static const struct dmi_system_id rotated_screen[] = { |
1184 | DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"), |
1185 | }, |
1186 | }, |
1187 | + { |
1188 | + .ident = "Teclast X98 Pro", |
1189 | + .matches = { |
1190 | + /* |
1191 | + * Only match BIOS date, because the manufacturers |
1192 | + * BIOS does not report the board name at all |
1193 | + * (sometimes)... |
1194 | + */ |
1195 | + DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"), |
1196 | + DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"), |
1197 | + }, |
1198 | + }, |
1199 | { |
1200 | .ident = "WinBook TW100", |
1201 | .matches = { |
1202 | diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c |
1203 | index 63d980995d17d..ac431697ebe1c 100644 |
1204 | --- a/drivers/irqchip/irq-alpine-msi.c |
1205 | +++ b/drivers/irqchip/irq-alpine-msi.c |
1206 | @@ -165,8 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain, |
1207 | return 0; |
1208 | |
1209 | err_sgi: |
1210 | - while (--i >= 0) |
1211 | - irq_domain_free_irqs_parent(domain, virq, i); |
1212 | + irq_domain_free_irqs_parent(domain, virq, i - 1); |
1213 | alpine_msix_free_sgi(priv, sgi, nr_irqs); |
1214 | return err; |
1215 | } |
1216 | diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c |
1217 | index 6964b252952a4..836a2808c0c71 100644 |
1218 | --- a/drivers/md/dm-ioctl.c |
1219 | +++ b/drivers/md/dm-ioctl.c |
1220 | @@ -1549,6 +1549,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size) |
1221 | |
1222 | if (!argc) { |
1223 | DMWARN("Empty message received."); |
1224 | + r = -EINVAL; |
1225 | goto out_argv; |
1226 | } |
1227 | |
1228 | diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c |
1229 | index 2d3ff028f50c9..62e3dc19b6099 100644 |
1230 | --- a/drivers/md/dm-table.c |
1231 | +++ b/drivers/md/dm-table.c |
1232 | @@ -1250,12 +1250,6 @@ void dm_table_event_callback(struct dm_table *t, |
1233 | |
1234 | void dm_table_event(struct dm_table *t) |
1235 | { |
1236 | - /* |
1237 | - * You can no longer call dm_table_event() from interrupt |
1238 | - * context, use a bottom half instead. |
1239 | - */ |
1240 | - BUG_ON(in_interrupt()); |
1241 | - |
1242 | mutex_lock(&_event_lock); |
1243 | if (t->event_fn) |
1244 | t->event_fn(t->event_context); |
1245 | diff --git a/drivers/md/md.c b/drivers/md/md.c |
1246 | index 3485d2a796000..0bfb77f8503d2 100644 |
1247 | --- a/drivers/md/md.c |
1248 | +++ b/drivers/md/md.c |
1249 | @@ -6857,8 +6857,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, |
1250 | err = -EBUSY; |
1251 | goto out; |
1252 | } |
1253 | - WARN_ON_ONCE(test_bit(MD_CLOSING, &mddev->flags)); |
1254 | - set_bit(MD_CLOSING, &mddev->flags); |
1255 | + if (test_and_set_bit(MD_CLOSING, &mddev->flags)) { |
1256 | + mutex_unlock(&mddev->open_mutex); |
1257 | + err = -EBUSY; |
1258 | + goto out; |
1259 | + } |
1260 | did_set_md_closing = true; |
1261 | mutex_unlock(&mddev->open_mutex); |
1262 | sync_blockdev(bdev); |
1263 | diff --git a/drivers/media/common/siano/smsdvb-main.c b/drivers/media/common/siano/smsdvb-main.c |
1264 | index 9148e14c9d077..9d5eb8b6aede9 100644 |
1265 | --- a/drivers/media/common/siano/smsdvb-main.c |
1266 | +++ b/drivers/media/common/siano/smsdvb-main.c |
1267 | @@ -1180,12 +1180,15 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev, |
1268 | rc = dvb_create_media_graph(&client->adapter, true); |
1269 | if (rc < 0) { |
1270 | pr_err("dvb_create_media_graph failed %d\n", rc); |
1271 | - goto client_error; |
1272 | + goto media_graph_error; |
1273 | } |
1274 | |
1275 | pr_info("DVB interface registered.\n"); |
1276 | return 0; |
1277 | |
1278 | +media_graph_error: |
1279 | + smsdvb_debugfs_release(client); |
1280 | + |
1281 | client_error: |
1282 | dvb_unregister_frontend(&client->frontend); |
1283 | |
1284 | diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_spi.c b/drivers/media/pci/netup_unidvb/netup_unidvb_spi.c |
1285 | index f33c0de3e8490..019bbc18cede6 100644 |
1286 | --- a/drivers/media/pci/netup_unidvb/netup_unidvb_spi.c |
1287 | +++ b/drivers/media/pci/netup_unidvb/netup_unidvb_spi.c |
1288 | @@ -184,7 +184,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev) |
1289 | struct spi_master *master; |
1290 | struct netup_spi *nspi; |
1291 | |
1292 | - master = spi_alloc_master(&ndev->pci_dev->dev, |
1293 | + master = devm_spi_alloc_master(&ndev->pci_dev->dev, |
1294 | sizeof(struct netup_spi)); |
1295 | if (!master) { |
1296 | dev_err(&ndev->pci_dev->dev, |
1297 | @@ -217,6 +217,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev) |
1298 | ndev->pci_slot, |
1299 | ndev->pci_func); |
1300 | if (!spi_new_device(master, &netup_spi_board)) { |
1301 | + spi_unregister_master(master); |
1302 | ndev->spi = NULL; |
1303 | dev_err(&ndev->pci_dev->dev, |
1304 | "%s(): unable to create SPI device\n", __func__); |
1305 | @@ -235,13 +236,13 @@ void netup_spi_release(struct netup_unidvb_dev *ndev) |
1306 | if (!spi) |
1307 | return; |
1308 | |
1309 | + spi_unregister_master(spi->master); |
1310 | spin_lock_irqsave(&spi->lock, flags); |
1311 | reg = readw(&spi->regs->control_stat); |
1312 | writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat); |
1313 | reg = readw(&spi->regs->control_stat); |
1314 | writew(reg & ~NETUP_SPI_CTRL_IMASK, &spi->regs->control_stat); |
1315 | spin_unlock_irqrestore(&spi->lock, flags); |
1316 | - spi_unregister_master(spi->master); |
1317 | ndev->spi = NULL; |
1318 | } |
1319 | |
1320 | diff --git a/drivers/media/pci/saa7146/mxb.c b/drivers/media/pci/saa7146/mxb.c |
1321 | index 504d788076392..3e8753c9e1e47 100644 |
1322 | --- a/drivers/media/pci/saa7146/mxb.c |
1323 | +++ b/drivers/media/pci/saa7146/mxb.c |
1324 | @@ -652,16 +652,17 @@ static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio * |
1325 | struct mxb *mxb = (struct mxb *)dev->ext_priv; |
1326 | |
1327 | DEB_D("VIDIOC_S_AUDIO %d\n", a->index); |
1328 | - if (mxb_inputs[mxb->cur_input].audioset & (1 << a->index)) { |
1329 | - if (mxb->cur_audinput != a->index) { |
1330 | - mxb->cur_audinput = a->index; |
1331 | - tea6420_route(mxb, a->index); |
1332 | - if (mxb->cur_audinput == 0) |
1333 | - mxb_update_audmode(mxb); |
1334 | - } |
1335 | - return 0; |
1336 | + if (a->index >= 32 || |
1337 | + !(mxb_inputs[mxb->cur_input].audioset & (1 << a->index))) |
1338 | + return -EINVAL; |
1339 | + |
1340 | + if (mxb->cur_audinput != a->index) { |
1341 | + mxb->cur_audinput = a->index; |
1342 | + tea6420_route(mxb, a->index); |
1343 | + if (mxb->cur_audinput == 0) |
1344 | + mxb_update_audmode(mxb); |
1345 | } |
1346 | - return -EINVAL; |
1347 | + return 0; |
1348 | } |
1349 | |
1350 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
1351 | diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c |
1352 | index 6a35107aca255..0fe69e71331db 100644 |
1353 | --- a/drivers/media/pci/solo6x10/solo6x10-g723.c |
1354 | +++ b/drivers/media/pci/solo6x10/solo6x10-g723.c |
1355 | @@ -385,7 +385,7 @@ int solo_g723_init(struct solo_dev *solo_dev) |
1356 | |
1357 | ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev)); |
1358 | if (ret < 0) |
1359 | - return ret; |
1360 | + goto snd_error; |
1361 | |
1362 | ret = solo_snd_pcm_init(solo_dev); |
1363 | if (ret < 0) |
1364 | diff --git a/drivers/media/rc/sunxi-cir.c b/drivers/media/rc/sunxi-cir.c |
1365 | index eaadc081760ae..3256bf46a3766 100644 |
1366 | --- a/drivers/media/rc/sunxi-cir.c |
1367 | +++ b/drivers/media/rc/sunxi-cir.c |
1368 | @@ -132,6 +132,8 @@ static irqreturn_t sunxi_ir_irq(int irqno, void *dev_id) |
1369 | } else if (status & REG_RXINT_RPEI_EN) { |
1370 | ir_raw_event_set_idle(ir->rc, true); |
1371 | ir_raw_event_handle(ir->rc); |
1372 | + } else { |
1373 | + ir_raw_event_handle(ir->rc); |
1374 | } |
1375 | |
1376 | spin_unlock(&ir->ir_lock); |
1377 | diff --git a/drivers/media/usb/gspca/gspca.c b/drivers/media/usb/gspca/gspca.c |
1378 | index 2cba2e1acdc68..d239075a6a65f 100644 |
1379 | --- a/drivers/media/usb/gspca/gspca.c |
1380 | +++ b/drivers/media/usb/gspca/gspca.c |
1381 | @@ -2145,6 +2145,7 @@ out: |
1382 | input_unregister_device(gspca_dev->input_dev); |
1383 | #endif |
1384 | v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler); |
1385 | + v4l2_device_unregister(&gspca_dev->v4l2_dev); |
1386 | kfree(gspca_dev->usb_buf); |
1387 | kfree(gspca_dev); |
1388 | return ret; |
1389 | diff --git a/drivers/media/usb/msi2500/msi2500.c b/drivers/media/usb/msi2500/msi2500.c |
1390 | index bb3d31e2a0b55..12bc8cfd9b0dc 100644 |
1391 | --- a/drivers/media/usb/msi2500/msi2500.c |
1392 | +++ b/drivers/media/usb/msi2500/msi2500.c |
1393 | @@ -1250,7 +1250,7 @@ static int msi2500_probe(struct usb_interface *intf, |
1394 | } |
1395 | |
1396 | dev->master = master; |
1397 | - master->bus_num = 0; |
1398 | + master->bus_num = -1; |
1399 | master->num_chipselect = 1; |
1400 | master->transfer_one_message = msi2500_transfer_one_message; |
1401 | spi_master_set_devdata(master, dev); |
1402 | diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c |
1403 | index 1041eb7a61672..2cae85a7ca6de 100644 |
1404 | --- a/drivers/memstick/core/memstick.c |
1405 | +++ b/drivers/memstick/core/memstick.c |
1406 | @@ -469,7 +469,6 @@ static void memstick_check(struct work_struct *work) |
1407 | host->card = card; |
1408 | if (device_register(&card->dev)) { |
1409 | put_device(&card->dev); |
1410 | - kfree(host->card); |
1411 | host->card = NULL; |
1412 | } |
1413 | } else |
1414 | diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c |
1415 | index d5cfb503b9d69..2539984c1db1c 100644 |
1416 | --- a/drivers/memstick/host/r592.c |
1417 | +++ b/drivers/memstick/host/r592.c |
1418 | @@ -762,8 +762,10 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
1419 | goto error3; |
1420 | |
1421 | dev->mmio = pci_ioremap_bar(pdev, 0); |
1422 | - if (!dev->mmio) |
1423 | + if (!dev->mmio) { |
1424 | + error = -ENOMEM; |
1425 | goto error4; |
1426 | + } |
1427 | |
1428 | dev->irq = pdev->irq; |
1429 | spin_lock_init(&dev->irq_lock); |
1430 | @@ -790,12 +792,14 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
1431 | &dev->dummy_dma_page_physical_address, GFP_KERNEL); |
1432 | r592_stop_dma(dev , 0); |
1433 | |
1434 | - if (request_irq(dev->irq, &r592_irq, IRQF_SHARED, |
1435 | - DRV_NAME, dev)) |
1436 | + error = request_irq(dev->irq, &r592_irq, IRQF_SHARED, |
1437 | + DRV_NAME, dev); |
1438 | + if (error) |
1439 | goto error6; |
1440 | |
1441 | r592_update_card_detect(dev); |
1442 | - if (memstick_add_host(host)) |
1443 | + error = memstick_add_host(host); |
1444 | + if (error) |
1445 | goto error7; |
1446 | |
1447 | message("driver successfully loaded"); |
1448 | diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c |
1449 | index 04fd845de05fb..67b71c476c5b4 100644 |
1450 | --- a/drivers/mtd/cmdlinepart.c |
1451 | +++ b/drivers/mtd/cmdlinepart.c |
1452 | @@ -228,7 +228,7 @@ static int mtdpart_setup_real(char *s) |
1453 | struct cmdline_mtd_partition *this_mtd; |
1454 | struct mtd_partition *parts; |
1455 | int mtd_id_len, num_parts; |
1456 | - char *p, *mtd_id, *semicol; |
1457 | + char *p, *mtd_id, *semicol, *open_parenth; |
1458 | |
1459 | /* |
1460 | * Replace the first ';' by a NULL char so strrchr can work |
1461 | @@ -238,6 +238,14 @@ static int mtdpart_setup_real(char *s) |
1462 | if (semicol) |
1463 | *semicol = '\0'; |
1464 | |
1465 | + /* |
1466 | + * make sure that part-names with ":" will not be handled as |
1467 | + * part of the mtd-id with an ":" |
1468 | + */ |
1469 | + open_parenth = strchr(s, '('); |
1470 | + if (open_parenth) |
1471 | + *open_parenth = '\0'; |
1472 | + |
1473 | mtd_id = s; |
1474 | |
1475 | /* |
1476 | @@ -247,6 +255,10 @@ static int mtdpart_setup_real(char *s) |
1477 | */ |
1478 | p = strrchr(s, ':'); |
1479 | |
1480 | + /* Restore the '(' now. */ |
1481 | + if (open_parenth) |
1482 | + *open_parenth = '('; |
1483 | + |
1484 | /* Restore the ';' now. */ |
1485 | if (semicol) |
1486 | *semicol = ';'; |
1487 | diff --git a/drivers/net/can/softing/softing_main.c b/drivers/net/can/softing/softing_main.c |
1488 | index 7621f91a8a209..fd48770ba7920 100644 |
1489 | --- a/drivers/net/can/softing/softing_main.c |
1490 | +++ b/drivers/net/can/softing/softing_main.c |
1491 | @@ -393,8 +393,13 @@ static int softing_netdev_open(struct net_device *ndev) |
1492 | |
1493 | /* check or determine and set bittime */ |
1494 | ret = open_candev(ndev); |
1495 | - if (!ret) |
1496 | - ret = softing_startstop(ndev, 1); |
1497 | + if (ret) |
1498 | + return ret; |
1499 | + |
1500 | + ret = softing_startstop(ndev, 1); |
1501 | + if (ret < 0) |
1502 | + close_candev(ndev); |
1503 | + |
1504 | return ret; |
1505 | } |
1506 | |
1507 | diff --git a/drivers/net/ethernet/allwinner/sun4i-emac.c b/drivers/net/ethernet/allwinner/sun4i-emac.c |
1508 | index 672a8212c8d96..3dc101f7d6bd8 100644 |
1509 | --- a/drivers/net/ethernet/allwinner/sun4i-emac.c |
1510 | +++ b/drivers/net/ethernet/allwinner/sun4i-emac.c |
1511 | @@ -827,13 +827,13 @@ static int emac_probe(struct platform_device *pdev) |
1512 | db->clk = devm_clk_get(&pdev->dev, NULL); |
1513 | if (IS_ERR(db->clk)) { |
1514 | ret = PTR_ERR(db->clk); |
1515 | - goto out_iounmap; |
1516 | + goto out_dispose_mapping; |
1517 | } |
1518 | |
1519 | ret = clk_prepare_enable(db->clk); |
1520 | if (ret) { |
1521 | dev_err(&pdev->dev, "Error couldn't enable clock (%d)\n", ret); |
1522 | - goto out_iounmap; |
1523 | + goto out_dispose_mapping; |
1524 | } |
1525 | |
1526 | ret = sunxi_sram_claim(&pdev->dev); |
1527 | @@ -890,6 +890,8 @@ out_release_sram: |
1528 | sunxi_sram_release(&pdev->dev); |
1529 | out_clk_disable_unprepare: |
1530 | clk_disable_unprepare(db->clk); |
1531 | +out_dispose_mapping: |
1532 | + irq_dispose_mapping(ndev->irq); |
1533 | out_iounmap: |
1534 | iounmap(db->membase); |
1535 | out: |
1536 | @@ -908,6 +910,7 @@ static int emac_remove(struct platform_device *pdev) |
1537 | unregister_netdev(ndev); |
1538 | sunxi_sram_release(&pdev->dev); |
1539 | clk_disable_unprepare(db->clk); |
1540 | + irq_dispose_mapping(ndev->irq); |
1541 | iounmap(db->membase); |
1542 | free_netdev(ndev); |
1543 | |
1544 | diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
1545 | index 5d4189c94718c..2921ae13db283 100644 |
1546 | --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
1547 | +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
1548 | @@ -3433,8 +3433,10 @@ static int bcmgenet_probe(struct platform_device *pdev) |
1549 | clk_disable_unprepare(priv->clk); |
1550 | |
1551 | err = register_netdev(dev); |
1552 | - if (err) |
1553 | + if (err) { |
1554 | + bcmgenet_mii_exit(dev); |
1555 | goto err; |
1556 | + } |
1557 | |
1558 | return err; |
1559 | |
1560 | diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c |
1561 | index cd8895838a04c..4cf1fc89df3c6 100644 |
1562 | --- a/drivers/net/ethernet/korina.c |
1563 | +++ b/drivers/net/ethernet/korina.c |
1564 | @@ -216,7 +216,7 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev) |
1565 | dev_kfree_skb_any(skb); |
1566 | spin_unlock_irqrestore(&lp->lock, flags); |
1567 | |
1568 | - return NETDEV_TX_BUSY; |
1569 | + return NETDEV_TX_OK; |
1570 | } |
1571 | } |
1572 | |
1573 | diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c |
1574 | index 0160c93de6d3d..1cfa30e86328f 100644 |
1575 | --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c |
1576 | +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c |
1577 | @@ -1311,8 +1311,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev) |
1578 | } |
1579 | |
1580 | priv->port_stats.tx_timeout++; |
1581 | - en_dbg(DRV, priv, "Scheduling watchdog\n"); |
1582 | - queue_work(mdev->workqueue, &priv->watchdog_task); |
1583 | + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state)) { |
1584 | + en_dbg(DRV, priv, "Scheduling port restart\n"); |
1585 | + queue_work(mdev->workqueue, &priv->restart_task); |
1586 | + } |
1587 | } |
1588 | |
1589 | |
1590 | @@ -1746,6 +1748,7 @@ int mlx4_en_start_port(struct net_device *dev) |
1591 | local_bh_enable(); |
1592 | } |
1593 | |
1594 | + clear_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state); |
1595 | netif_tx_start_all_queues(dev); |
1596 | netif_device_attach(dev); |
1597 | |
1598 | @@ -1900,7 +1903,7 @@ void mlx4_en_stop_port(struct net_device *dev, int detach) |
1599 | static void mlx4_en_restart(struct work_struct *work) |
1600 | { |
1601 | struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv, |
1602 | - watchdog_task); |
1603 | + restart_task); |
1604 | struct mlx4_en_dev *mdev = priv->mdev; |
1605 | struct net_device *dev = priv->dev; |
1606 | |
1607 | @@ -2220,7 +2223,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu) |
1608 | if (netif_running(dev)) { |
1609 | mutex_lock(&mdev->state_lock); |
1610 | if (!mdev->device_up) { |
1611 | - /* NIC is probably restarting - let watchdog task reset |
1612 | + /* NIC is probably restarting - let restart task reset |
1613 | * the port */ |
1614 | en_dbg(DRV, priv, "Change MTU called with card down!?\n"); |
1615 | } else { |
1616 | @@ -2229,7 +2232,9 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu) |
1617 | if (err) { |
1618 | en_err(priv, "Failed restarting port:%d\n", |
1619 | priv->port); |
1620 | - queue_work(mdev->workqueue, &priv->watchdog_task); |
1621 | + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, |
1622 | + &priv->state)) |
1623 | + queue_work(mdev->workqueue, &priv->restart_task); |
1624 | } |
1625 | } |
1626 | mutex_unlock(&mdev->state_lock); |
1627 | @@ -2701,7 +2706,8 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog) |
1628 | if (err) { |
1629 | en_err(priv, "Failed starting port %d for XDP change\n", |
1630 | priv->port); |
1631 | - queue_work(mdev->workqueue, &priv->watchdog_task); |
1632 | + if (!test_and_set_bit(MLX4_EN_STATE_FLAG_RESTARTING, &priv->state)) |
1633 | + queue_work(mdev->workqueue, &priv->restart_task); |
1634 | } |
1635 | } |
1636 | |
1637 | @@ -3080,7 +3086,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, |
1638 | priv->counter_index = MLX4_SINK_COUNTER_INDEX(mdev->dev); |
1639 | spin_lock_init(&priv->stats_lock); |
1640 | INIT_WORK(&priv->rx_mode_task, mlx4_en_do_set_rx_mode); |
1641 | - INIT_WORK(&priv->watchdog_task, mlx4_en_restart); |
1642 | + INIT_WORK(&priv->restart_task, mlx4_en_restart); |
1643 | INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate); |
1644 | INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats); |
1645 | INIT_DELAYED_WORK(&priv->service_task, mlx4_en_service_task); |
1646 | diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |
1647 | index 247d340be7436..93780f63192af 100644 |
1648 | --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |
1649 | +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |
1650 | @@ -522,6 +522,10 @@ struct mlx4_en_stats_bitmap { |
1651 | struct mutex mutex; /* for mutual access to stats bitmap */ |
1652 | }; |
1653 | |
1654 | +enum { |
1655 | + MLX4_EN_STATE_FLAG_RESTARTING, |
1656 | +}; |
1657 | + |
1658 | struct mlx4_en_priv { |
1659 | struct mlx4_en_dev *mdev; |
1660 | struct mlx4_en_port_profile *prof; |
1661 | @@ -586,7 +590,7 @@ struct mlx4_en_priv { |
1662 | struct mlx4_en_cq *rx_cq[MAX_RX_RINGS]; |
1663 | struct mlx4_qp drop_qp; |
1664 | struct work_struct rx_mode_task; |
1665 | - struct work_struct watchdog_task; |
1666 | + struct work_struct restart_task; |
1667 | struct work_struct linkstate_task; |
1668 | struct delayed_work stats_task; |
1669 | struct delayed_work service_task; |
1670 | @@ -632,6 +636,7 @@ struct mlx4_en_priv { |
1671 | u32 pflags; |
1672 | u8 rss_key[MLX4_EN_RSS_KEY_SIZE]; |
1673 | u8 rss_hash_fn; |
1674 | + unsigned long state; |
1675 | }; |
1676 | |
1677 | enum mlx4_en_wol { |
1678 | diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |
1679 | index ebf5ead16939a..0928da21efd04 100644 |
1680 | --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |
1681 | +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |
1682 | @@ -2507,6 +2507,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
1683 | qlcnic_sriov_vf_register_map(ahw); |
1684 | break; |
1685 | default: |
1686 | + err = -EINVAL; |
1687 | goto err_out_free_hw_res; |
1688 | } |
1689 | |
1690 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c |
1691 | index 6704d3e0392dc..afc68cbca4e2a 100644 |
1692 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c |
1693 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c |
1694 | @@ -30,7 +30,6 @@ |
1695 | #define PRG_ETH0_RGMII_MODE BIT(0) |
1696 | |
1697 | /* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */ |
1698 | -#define PRG_ETH0_CLK_M250_SEL_SHIFT 4 |
1699 | #define PRG_ETH0_CLK_M250_SEL_MASK GENMASK(4, 4) |
1700 | |
1701 | #define PRG_ETH0_TXDLY_SHIFT 5 |
1702 | @@ -123,8 +122,9 @@ static int meson8b_init_clk(struct meson8b_dwmac *dwmac) |
1703 | init.num_parents = MUX_CLK_NUM_PARENTS; |
1704 | |
1705 | dwmac->m250_mux.reg = dwmac->regs + PRG_ETH0; |
1706 | - dwmac->m250_mux.shift = PRG_ETH0_CLK_M250_SEL_SHIFT; |
1707 | - dwmac->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK; |
1708 | + dwmac->m250_mux.shift = __ffs(PRG_ETH0_CLK_M250_SEL_MASK); |
1709 | + dwmac->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK >> |
1710 | + dwmac->m250_mux.shift; |
1711 | dwmac->m250_mux.flags = 0; |
1712 | dwmac->m250_mux.table = NULL; |
1713 | dwmac->m250_mux.hw.init = &init; |
1714 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |
1715 | index 8c1a5361f661d..dbd56fefa2f3f 100644 |
1716 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |
1717 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |
1718 | @@ -1901,9 +1901,6 @@ static int stmmac_release(struct net_device *dev) |
1719 | { |
1720 | struct stmmac_priv *priv = netdev_priv(dev); |
1721 | |
1722 | - if (priv->eee_enabled) |
1723 | - del_timer_sync(&priv->eee_ctrl_timer); |
1724 | - |
1725 | /* Stop and disconnect the PHY */ |
1726 | if (priv->phydev) { |
1727 | phy_stop(priv->phydev); |
1728 | @@ -1924,6 +1921,11 @@ static int stmmac_release(struct net_device *dev) |
1729 | if (priv->lpi_irq > 0) |
1730 | free_irq(priv->lpi_irq, dev); |
1731 | |
1732 | + if (priv->eee_enabled) { |
1733 | + priv->tx_path_in_lpi_mode = false; |
1734 | + del_timer_sync(&priv->eee_ctrl_timer); |
1735 | + } |
1736 | + |
1737 | /* Stop TX/RX DMA and clear the descriptors */ |
1738 | priv->hw->dma->stop_tx(priv->ioaddr); |
1739 | priv->hw->dma->stop_rx(priv->ioaddr); |
1740 | @@ -3503,6 +3505,11 @@ int stmmac_suspend(struct device *dev) |
1741 | |
1742 | napi_disable(&priv->napi); |
1743 | |
1744 | + if (priv->eee_enabled) { |
1745 | + priv->tx_path_in_lpi_mode = false; |
1746 | + del_timer_sync(&priv->eee_ctrl_timer); |
1747 | + } |
1748 | + |
1749 | /* Stop TX/RX DMA */ |
1750 | priv->hw->dma->stop_tx(priv->ioaddr); |
1751 | priv->hw->dma->stop_rx(priv->ioaddr); |
1752 | diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
1753 | index e7b873018dca6..e1287c3421165 100644 |
1754 | --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
1755 | +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
1756 | @@ -1904,18 +1904,36 @@ static int iwl_trans_pcie_read_mem(struct iwl_trans *trans, u32 addr, |
1757 | void *buf, int dwords) |
1758 | { |
1759 | unsigned long flags; |
1760 | - int offs, ret = 0; |
1761 | + int offs = 0; |
1762 | u32 *vals = buf; |
1763 | |
1764 | - if (iwl_trans_grab_nic_access(trans, &flags)) { |
1765 | - iwl_write32(trans, HBUS_TARG_MEM_RADDR, addr); |
1766 | - for (offs = 0; offs < dwords; offs++) |
1767 | - vals[offs] = iwl_read32(trans, HBUS_TARG_MEM_RDAT); |
1768 | - iwl_trans_release_nic_access(trans, &flags); |
1769 | - } else { |
1770 | - ret = -EBUSY; |
1771 | + while (offs < dwords) { |
1772 | + /* limit the time we spin here under lock to 1/2s */ |
1773 | + ktime_t timeout = ktime_add_us(ktime_get(), 500 * USEC_PER_MSEC); |
1774 | + |
1775 | + if (iwl_trans_grab_nic_access(trans, &flags)) { |
1776 | + iwl_write32(trans, HBUS_TARG_MEM_RADDR, |
1777 | + addr + 4 * offs); |
1778 | + |
1779 | + while (offs < dwords) { |
1780 | + vals[offs] = iwl_read32(trans, |
1781 | + HBUS_TARG_MEM_RDAT); |
1782 | + offs++; |
1783 | + |
1784 | + /* calling ktime_get is expensive so |
1785 | + * do it once in 128 reads |
1786 | + */ |
1787 | + if (offs % 128 == 0 && ktime_after(ktime_get(), |
1788 | + timeout)) |
1789 | + break; |
1790 | + } |
1791 | + iwl_trans_release_nic_access(trans, &flags); |
1792 | + } else { |
1793 | + return -EBUSY; |
1794 | + } |
1795 | } |
1796 | - return ret; |
1797 | + |
1798 | + return 0; |
1799 | } |
1800 | |
1801 | static int iwl_trans_pcie_write_mem(struct iwl_trans *trans, u32 addr, |
1802 | diff --git a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c |
1803 | index 4e91c74fcfad9..de928938c7a1c 100644 |
1804 | --- a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c |
1805 | +++ b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c |
1806 | @@ -1224,13 +1224,6 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev) |
1807 | if (skb->len < ETH_HLEN) |
1808 | goto drop; |
1809 | |
1810 | - ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_TX, 0); |
1811 | - if (!ctx) |
1812 | - goto busy; |
1813 | - |
1814 | - memset(ctx->buf, 0, BULK_BUF_SIZE); |
1815 | - buf = ctx->buf->data; |
1816 | - |
1817 | tx_control = 0; |
1818 | |
1819 | err = orinoco_process_xmit_skb(skb, dev, priv, &tx_control, |
1820 | @@ -1238,6 +1231,13 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev) |
1821 | if (err) |
1822 | goto drop; |
1823 | |
1824 | + ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_TX, 0); |
1825 | + if (!ctx) |
1826 | + goto drop; |
1827 | + |
1828 | + memset(ctx->buf, 0, BULK_BUF_SIZE); |
1829 | + buf = ctx->buf->data; |
1830 | + |
1831 | { |
1832 | __le16 *tx_cntl = (__le16 *)buf; |
1833 | *tx_cntl = cpu_to_le16(tx_control); |
1834 | diff --git a/drivers/net/wireless/st/cw1200/main.c b/drivers/net/wireless/st/cw1200/main.c |
1835 | index 84624c812a15f..f4338bce78f4a 100644 |
1836 | --- a/drivers/net/wireless/st/cw1200/main.c |
1837 | +++ b/drivers/net/wireless/st/cw1200/main.c |
1838 | @@ -385,6 +385,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, |
1839 | CW1200_LINK_ID_MAX, |
1840 | cw1200_skb_dtor, |
1841 | priv)) { |
1842 | + destroy_workqueue(priv->workqueue); |
1843 | ieee80211_free_hw(hw); |
1844 | return NULL; |
1845 | } |
1846 | @@ -396,6 +397,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, |
1847 | for (; i > 0; i--) |
1848 | cw1200_queue_deinit(&priv->tx_queue[i - 1]); |
1849 | cw1200_queue_stats_deinit(&priv->tx_queue_stats); |
1850 | + destroy_workqueue(priv->workqueue); |
1851 | ieee80211_free_hw(hw); |
1852 | return NULL; |
1853 | } |
1854 | diff --git a/drivers/nfc/s3fwrn5/firmware.c b/drivers/nfc/s3fwrn5/firmware.c |
1855 | index 5f97da1947e39..e6ca1f9a7f63e 100644 |
1856 | --- a/drivers/nfc/s3fwrn5/firmware.c |
1857 | +++ b/drivers/nfc/s3fwrn5/firmware.c |
1858 | @@ -304,8 +304,10 @@ static int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info) |
1859 | if (ret < 0) |
1860 | return ret; |
1861 | |
1862 | - if (fw->fw->size < S3FWRN5_FW_IMAGE_HEADER_SIZE) |
1863 | + if (fw->fw->size < S3FWRN5_FW_IMAGE_HEADER_SIZE) { |
1864 | + release_firmware(fw->fw); |
1865 | return -EINVAL; |
1866 | + } |
1867 | |
1868 | memcpy(fw->date, fw->fw->data + 0x00, 12); |
1869 | fw->date[12] = '\0'; |
1870 | diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c |
1871 | index 01a343ad7155c..14d84d5a0f581 100644 |
1872 | --- a/drivers/pci/slot.c |
1873 | +++ b/drivers/pci/slot.c |
1874 | @@ -307,6 +307,9 @@ placeholder: |
1875 | goto err; |
1876 | } |
1877 | |
1878 | + INIT_LIST_HEAD(&slot->list); |
1879 | + list_add(&slot->list, &parent->slots); |
1880 | + |
1881 | err = kobject_init_and_add(&slot->kobj, &pci_slot_ktype, NULL, |
1882 | "%s", slot_name); |
1883 | if (err) { |
1884 | @@ -314,9 +317,6 @@ placeholder: |
1885 | goto err; |
1886 | } |
1887 | |
1888 | - INIT_LIST_HEAD(&slot->list); |
1889 | - list_add(&slot->list, &parent->slots); |
1890 | - |
1891 | down_read(&pci_bus_sem); |
1892 | list_for_each_entry(dev, &parent->devices, bus_list) |
1893 | if (PCI_SLOT(dev->devfn) == slot_nr) |
1894 | diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c |
1895 | index fc51922839f82..73d3c4122eb89 100644 |
1896 | --- a/drivers/pinctrl/intel/pinctrl-baytrail.c |
1897 | +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c |
1898 | @@ -1266,7 +1266,6 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev, |
1899 | break; |
1900 | case PIN_CONFIG_INPUT_DEBOUNCE: |
1901 | debounce = readl(db_reg); |
1902 | - debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1903 | |
1904 | if (arg) |
1905 | conf |= BYT_DEBOUNCE_EN; |
1906 | @@ -1275,24 +1274,31 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev, |
1907 | |
1908 | switch (arg) { |
1909 | case 375: |
1910 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1911 | debounce |= BYT_DEBOUNCE_PULSE_375US; |
1912 | break; |
1913 | case 750: |
1914 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1915 | debounce |= BYT_DEBOUNCE_PULSE_750US; |
1916 | break; |
1917 | case 1500: |
1918 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1919 | debounce |= BYT_DEBOUNCE_PULSE_1500US; |
1920 | break; |
1921 | case 3000: |
1922 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1923 | debounce |= BYT_DEBOUNCE_PULSE_3MS; |
1924 | break; |
1925 | case 6000: |
1926 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1927 | debounce |= BYT_DEBOUNCE_PULSE_6MS; |
1928 | break; |
1929 | case 12000: |
1930 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1931 | debounce |= BYT_DEBOUNCE_PULSE_12MS; |
1932 | break; |
1933 | case 24000: |
1934 | + debounce &= ~BYT_DEBOUNCE_PULSE_MASK; |
1935 | debounce |= BYT_DEBOUNCE_PULSE_24MS; |
1936 | break; |
1937 | default: |
1938 | diff --git a/drivers/pinctrl/intel/pinctrl-merrifield.c b/drivers/pinctrl/intel/pinctrl-merrifield.c |
1939 | index 04d6fd2be08cc..8d0cff3146b87 100644 |
1940 | --- a/drivers/pinctrl/intel/pinctrl-merrifield.c |
1941 | +++ b/drivers/pinctrl/intel/pinctrl-merrifield.c |
1942 | @@ -731,6 +731,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, |
1943 | mask |= BUFCFG_Px_EN_MASK | BUFCFG_PUPD_VAL_MASK; |
1944 | bits |= BUFCFG_PU_EN; |
1945 | |
1946 | + /* Set default strength value in case none is given */ |
1947 | + if (arg == 1) |
1948 | + arg = 20000; |
1949 | + |
1950 | switch (arg) { |
1951 | case 50000: |
1952 | bits |= BUFCFG_PUPD_VAL_50K << BUFCFG_PUPD_VAL_SHIFT; |
1953 | @@ -751,6 +755,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, |
1954 | mask |= BUFCFG_Px_EN_MASK | BUFCFG_PUPD_VAL_MASK; |
1955 | bits |= BUFCFG_PD_EN; |
1956 | |
1957 | + /* Set default strength value in case none is given */ |
1958 | + if (arg == 1) |
1959 | + arg = 20000; |
1960 | + |
1961 | switch (arg) { |
1962 | case 50000: |
1963 | bits |= BUFCFG_PUPD_VAL_50K << BUFCFG_PUPD_VAL_SHIFT; |
1964 | diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c |
1965 | index 82fac6261efa1..1bb2493ad1d03 100644 |
1966 | --- a/drivers/pinctrl/pinctrl-amd.c |
1967 | +++ b/drivers/pinctrl/pinctrl-amd.c |
1968 | @@ -404,7 +404,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) |
1969 | pin_reg &= ~BIT(LEVEL_TRIG_OFF); |
1970 | pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); |
1971 | pin_reg |= ACTIVE_HIGH << ACTIVE_LEVEL_OFF; |
1972 | - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF; |
1973 | irq_set_handler_locked(d, handle_edge_irq); |
1974 | break; |
1975 | |
1976 | @@ -412,7 +411,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) |
1977 | pin_reg &= ~BIT(LEVEL_TRIG_OFF); |
1978 | pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); |
1979 | pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF; |
1980 | - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF; |
1981 | irq_set_handler_locked(d, handle_edge_irq); |
1982 | break; |
1983 | |
1984 | @@ -420,7 +418,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) |
1985 | pin_reg &= ~BIT(LEVEL_TRIG_OFF); |
1986 | pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); |
1987 | pin_reg |= BOTH_EADGE << ACTIVE_LEVEL_OFF; |
1988 | - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF; |
1989 | irq_set_handler_locked(d, handle_edge_irq); |
1990 | break; |
1991 | |
1992 | @@ -428,8 +425,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) |
1993 | pin_reg |= LEVEL_TRIGGER << LEVEL_TRIG_OFF; |
1994 | pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); |
1995 | pin_reg |= ACTIVE_HIGH << ACTIVE_LEVEL_OFF; |
1996 | - pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF); |
1997 | - pin_reg |= DB_TYPE_PRESERVE_LOW_GLITCH << DB_CNTRL_OFF; |
1998 | irq_set_handler_locked(d, handle_level_irq); |
1999 | break; |
2000 | |
2001 | @@ -437,8 +432,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) |
2002 | pin_reg |= LEVEL_TRIGGER << LEVEL_TRIG_OFF; |
2003 | pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); |
2004 | pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF; |
2005 | - pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF); |
2006 | - pin_reg |= DB_TYPE_PRESERVE_HIGH_GLITCH << DB_CNTRL_OFF; |
2007 | irq_set_handler_locked(d, handle_level_irq); |
2008 | break; |
2009 | |
2010 | diff --git a/drivers/pinctrl/pinctrl-falcon.c b/drivers/pinctrl/pinctrl-falcon.c |
2011 | index 0b0fc2eb48e0b..adcdb0585d398 100644 |
2012 | --- a/drivers/pinctrl/pinctrl-falcon.c |
2013 | +++ b/drivers/pinctrl/pinctrl-falcon.c |
2014 | @@ -438,24 +438,28 @@ static int pinctrl_falcon_probe(struct platform_device *pdev) |
2015 | |
2016 | /* load and remap the pad resources of the different banks */ |
2017 | for_each_compatible_node(np, NULL, "lantiq,pad-falcon") { |
2018 | - struct platform_device *ppdev = of_find_device_by_node(np); |
2019 | const __be32 *bank = of_get_property(np, "lantiq,bank", NULL); |
2020 | struct resource res; |
2021 | + struct platform_device *ppdev; |
2022 | u32 avail; |
2023 | int pins; |
2024 | |
2025 | if (!of_device_is_available(np)) |
2026 | continue; |
2027 | |
2028 | - if (!ppdev) { |
2029 | - dev_err(&pdev->dev, "failed to find pad pdev\n"); |
2030 | - continue; |
2031 | - } |
2032 | if (!bank || *bank >= PORTS) |
2033 | continue; |
2034 | if (of_address_to_resource(np, 0, &res)) |
2035 | continue; |
2036 | + |
2037 | + ppdev = of_find_device_by_node(np); |
2038 | + if (!ppdev) { |
2039 | + dev_err(&pdev->dev, "failed to find pad pdev\n"); |
2040 | + continue; |
2041 | + } |
2042 | + |
2043 | falcon_info.clk[*bank] = clk_get(&ppdev->dev, NULL); |
2044 | + put_device(&ppdev->dev); |
2045 | if (IS_ERR(falcon_info.clk[*bank])) { |
2046 | dev_err(&ppdev->dev, "failed to get clock\n"); |
2047 | return PTR_ERR(falcon_info.clk[*bank]); |
2048 | diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c |
2049 | index 1515c9480f89f..90015e2cce9bf 100644 |
2050 | --- a/drivers/platform/x86/acer-wmi.c |
2051 | +++ b/drivers/platform/x86/acer-wmi.c |
2052 | @@ -124,6 +124,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { |
2053 | {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */ |
2054 | {KE_IGNORE, 0x81, {KEY_SLEEP} }, |
2055 | {KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad Toggle */ |
2056 | + {KE_IGNORE, 0x84, {KEY_KBDILLUMTOGGLE} }, /* Automatic Keyboard background light toggle */ |
2057 | {KE_KEY, KEY_TOUCHPAD_ON, {KEY_TOUCHPAD_ON} }, |
2058 | {KE_KEY, KEY_TOUCHPAD_OFF, {KEY_TOUCHPAD_OFF} }, |
2059 | {KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} }, |
2060 | diff --git a/drivers/ps3/ps3stor_lib.c b/drivers/ps3/ps3stor_lib.c |
2061 | index 8c3f5adf1bc65..2d76183756626 100644 |
2062 | --- a/drivers/ps3/ps3stor_lib.c |
2063 | +++ b/drivers/ps3/ps3stor_lib.c |
2064 | @@ -201,7 +201,7 @@ int ps3stor_setup(struct ps3_storage_device *dev, irq_handler_t handler) |
2065 | dev->bounce_lpar = ps3_mm_phys_to_lpar(__pa(dev->bounce_buf)); |
2066 | dev->bounce_dma = dma_map_single(&dev->sbd.core, dev->bounce_buf, |
2067 | dev->bounce_size, DMA_BIDIRECTIONAL); |
2068 | - if (!dev->bounce_dma) { |
2069 | + if (dma_mapping_error(&dev->sbd.core, dev->bounce_dma)) { |
2070 | dev_err(&dev->sbd.core, "%s:%u: map DMA region failed\n", |
2071 | __func__, __LINE__); |
2072 | error = -ENODEV; |
2073 | diff --git a/drivers/s390/block/dasd_alias.c b/drivers/s390/block/dasd_alias.c |
2074 | index f40d606f86c98..0569c15fddfe4 100644 |
2075 | --- a/drivers/s390/block/dasd_alias.c |
2076 | +++ b/drivers/s390/block/dasd_alias.c |
2077 | @@ -255,7 +255,6 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device) |
2078 | return; |
2079 | device->discipline->get_uid(device, &uid); |
2080 | spin_lock_irqsave(&lcu->lock, flags); |
2081 | - list_del_init(&device->alias_list); |
2082 | /* make sure that the workers don't use this device */ |
2083 | if (device == lcu->suc_data.device) { |
2084 | spin_unlock_irqrestore(&lcu->lock, flags); |
2085 | @@ -282,6 +281,7 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device) |
2086 | |
2087 | spin_lock_irqsave(&aliastree.lock, flags); |
2088 | spin_lock(&lcu->lock); |
2089 | + list_del_init(&device->alias_list); |
2090 | if (list_empty(&lcu->grouplist) && |
2091 | list_empty(&lcu->active_devices) && |
2092 | list_empty(&lcu->inactive_devices)) { |
2093 | @@ -502,6 +502,14 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu) |
2094 | return rc; |
2095 | |
2096 | spin_lock_irqsave(&lcu->lock, flags); |
2097 | + /* |
2098 | + * there is another update needed skip the remaining handling |
2099 | + * the data might already be outdated |
2100 | + * but especially do not add the device to an LCU with pending |
2101 | + * update |
2102 | + */ |
2103 | + if (lcu->flags & NEED_UAC_UPDATE) |
2104 | + goto out; |
2105 | lcu->pav = NO_PAV; |
2106 | for (i = 0; i < MAX_DEVICES_PER_LCU; ++i) { |
2107 | switch (lcu->uac->unit[i].ua_type) { |
2108 | @@ -520,6 +528,7 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu) |
2109 | alias_list) { |
2110 | _add_device_to_lcu(lcu, device, refdev); |
2111 | } |
2112 | +out: |
2113 | spin_unlock_irqrestore(&lcu->lock, flags); |
2114 | return 0; |
2115 | } |
2116 | @@ -624,6 +633,7 @@ int dasd_alias_add_device(struct dasd_device *device) |
2117 | } |
2118 | if (lcu->flags & UPDATE_PENDING) { |
2119 | list_move(&device->alias_list, &lcu->active_devices); |
2120 | + private->pavgroup = NULL; |
2121 | _schedule_lcu_update(lcu, device); |
2122 | } |
2123 | spin_unlock_irqrestore(&lcu->lock, flags); |
2124 | diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c |
2125 | index 04788e0b90236..741cc96379cb7 100644 |
2126 | --- a/drivers/scsi/be2iscsi/be_main.c |
2127 | +++ b/drivers/scsi/be2iscsi/be_main.c |
2128 | @@ -3052,7 +3052,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, |
2129 | if (!eq_vaddress) |
2130 | goto create_eq_error; |
2131 | |
2132 | - mem->dma = paddr; |
2133 | mem->va = eq_vaddress; |
2134 | ret = be_fill_queue(eq, phba->params.num_eq_entries, |
2135 | sizeof(struct be_eq_entry), eq_vaddress); |
2136 | @@ -3062,6 +3061,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, |
2137 | goto create_eq_error; |
2138 | } |
2139 | |
2140 | + mem->dma = paddr; |
2141 | ret = beiscsi_cmd_eq_create(&phba->ctrl, eq, |
2142 | phwi_context->cur_eqd); |
2143 | if (ret) { |
2144 | @@ -3116,7 +3116,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba, |
2145 | if (!cq_vaddress) |
2146 | goto create_cq_error; |
2147 | |
2148 | - mem->dma = paddr; |
2149 | ret = be_fill_queue(cq, phba->params.num_cq_entries, |
2150 | sizeof(struct sol_cqe), cq_vaddress); |
2151 | if (ret) { |
2152 | @@ -3126,6 +3125,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba, |
2153 | goto create_cq_error; |
2154 | } |
2155 | |
2156 | + mem->dma = paddr; |
2157 | ret = beiscsi_cmd_cq_create(&phba->ctrl, cq, eq, false, |
2158 | false, 0); |
2159 | if (ret) { |
2160 | diff --git a/drivers/scsi/bnx2i/Kconfig b/drivers/scsi/bnx2i/Kconfig |
2161 | index ba30ff86d5818..b27a3738d940c 100644 |
2162 | --- a/drivers/scsi/bnx2i/Kconfig |
2163 | +++ b/drivers/scsi/bnx2i/Kconfig |
2164 | @@ -3,6 +3,7 @@ config SCSI_BNX2_ISCSI |
2165 | depends on NET |
2166 | depends on PCI |
2167 | depends on (IPV6 || IPV6=n) |
2168 | + depends on MMU |
2169 | select SCSI_ISCSI_ATTRS |
2170 | select NETDEVICES |
2171 | select ETHERNET |
2172 | diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c |
2173 | index 58ce9020d69c5..389c13e1c9788 100644 |
2174 | --- a/drivers/scsi/fnic/fnic_main.c |
2175 | +++ b/drivers/scsi/fnic/fnic_main.c |
2176 | @@ -735,6 +735,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
2177 | for (i = 0; i < FNIC_IO_LOCKS; i++) |
2178 | spin_lock_init(&fnic->io_req_lock[i]); |
2179 | |
2180 | + err = -ENOMEM; |
2181 | fnic->io_req_pool = mempool_create_slab_pool(2, fnic_io_req_cache); |
2182 | if (!fnic->io_req_pool) |
2183 | goto err_out_free_resources; |
2184 | diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c |
2185 | index 601a93953307d..16716b2644020 100644 |
2186 | --- a/drivers/scsi/mpt3sas/mpt3sas_base.c |
2187 | +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c |
2188 | @@ -4477,7 +4477,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc) |
2189 | |
2190 | r = _base_handshake_req_reply_wait(ioc, |
2191 | sizeof(Mpi2IOCInitRequest_t), (u32 *)&mpi_request, |
2192 | - sizeof(Mpi2IOCInitReply_t), (u16 *)&mpi_reply, 10); |
2193 | + sizeof(Mpi2IOCInitReply_t), (u16 *)&mpi_reply, 30); |
2194 | |
2195 | if (r != 0) { |
2196 | pr_err(MPT3SAS_FMT "%s: handshake failed (r=%d)\n", |
2197 | diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c |
2198 | index 9fc675f57e336..f54115d74f519 100644 |
2199 | --- a/drivers/scsi/pm8001/pm8001_init.c |
2200 | +++ b/drivers/scsi/pm8001/pm8001_init.c |
2201 | @@ -1061,7 +1061,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev, |
2202 | |
2203 | pm8001_init_sas_add(pm8001_ha); |
2204 | /* phy setting support for motherboard controller */ |
2205 | - if (pm8001_configure_phy_settings(pm8001_ha)) |
2206 | + rc = pm8001_configure_phy_settings(pm8001_ha); |
2207 | + if (rc) |
2208 | goto err_out_shost; |
2209 | |
2210 | pm8001_post_sas_ha_init(shost, chip); |
2211 | diff --git a/drivers/soc/qcom/smp2p.c b/drivers/soc/qcom/smp2p.c |
2212 | index f51fb2ea72001..4c5767c73b7a8 100644 |
2213 | --- a/drivers/soc/qcom/smp2p.c |
2214 | +++ b/drivers/soc/qcom/smp2p.c |
2215 | @@ -314,15 +314,16 @@ static int qcom_smp2p_inbound_entry(struct qcom_smp2p *smp2p, |
2216 | static int smp2p_update_bits(void *data, u32 mask, u32 value) |
2217 | { |
2218 | struct smp2p_entry *entry = data; |
2219 | + unsigned long flags; |
2220 | u32 orig; |
2221 | u32 val; |
2222 | |
2223 | - spin_lock(&entry->lock); |
2224 | + spin_lock_irqsave(&entry->lock, flags); |
2225 | val = orig = readl(entry->value); |
2226 | val &= ~mask; |
2227 | val |= value; |
2228 | writel(val, entry->value); |
2229 | - spin_unlock(&entry->lock); |
2230 | + spin_unlock_irqrestore(&entry->lock, flags); |
2231 | |
2232 | if (val != orig) |
2233 | qcom_smp2p_kick(entry->smp2p); |
2234 | diff --git a/drivers/soc/tegra/fuse/speedo-tegra210.c b/drivers/soc/tegra/fuse/speedo-tegra210.c |
2235 | index 5373f4c16b54c..4403b89561fd6 100644 |
2236 | --- a/drivers/soc/tegra/fuse/speedo-tegra210.c |
2237 | +++ b/drivers/soc/tegra/fuse/speedo-tegra210.c |
2238 | @@ -105,7 +105,7 @@ static int get_process_id(int value, const u32 *speedos, unsigned int num) |
2239 | unsigned int i; |
2240 | |
2241 | for (i = 0; i < num; i++) |
2242 | - if (value < speedos[num]) |
2243 | + if (value < speedos[i]) |
2244 | return i; |
2245 | |
2246 | return -EINVAL; |
2247 | diff --git a/drivers/soc/ti/knav_dma.c b/drivers/soc/ti/knav_dma.c |
2248 | index 1a7b5caa127b5..b86bea4537325 100644 |
2249 | --- a/drivers/soc/ti/knav_dma.c |
2250 | +++ b/drivers/soc/ti/knav_dma.c |
2251 | @@ -752,8 +752,9 @@ static int knav_dma_probe(struct platform_device *pdev) |
2252 | pm_runtime_enable(kdev->dev); |
2253 | ret = pm_runtime_get_sync(kdev->dev); |
2254 | if (ret < 0) { |
2255 | + pm_runtime_put_noidle(kdev->dev); |
2256 | dev_err(kdev->dev, "unable to enable pktdma, err %d\n", ret); |
2257 | - return ret; |
2258 | + goto err_pm_disable; |
2259 | } |
2260 | |
2261 | /* Initialise all packet dmas */ |
2262 | @@ -767,13 +768,21 @@ static int knav_dma_probe(struct platform_device *pdev) |
2263 | |
2264 | if (list_empty(&kdev->list)) { |
2265 | dev_err(dev, "no valid dma instance\n"); |
2266 | - return -ENODEV; |
2267 | + ret = -ENODEV; |
2268 | + goto err_put_sync; |
2269 | } |
2270 | |
2271 | debugfs_create_file("knav_dma", S_IFREG | S_IRUGO, NULL, NULL, |
2272 | &knav_dma_debug_ops); |
2273 | |
2274 | return ret; |
2275 | + |
2276 | +err_put_sync: |
2277 | + pm_runtime_put_sync(kdev->dev); |
2278 | +err_pm_disable: |
2279 | + pm_runtime_disable(kdev->dev); |
2280 | + |
2281 | + return ret; |
2282 | } |
2283 | |
2284 | static int knav_dma_remove(struct platform_device *pdev) |
2285 | diff --git a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/knav_qmss_queue.c |
2286 | index b73e3534f67b2..5248649b0b41e 100644 |
2287 | --- a/drivers/soc/ti/knav_qmss_queue.c |
2288 | +++ b/drivers/soc/ti/knav_qmss_queue.c |
2289 | @@ -1717,6 +1717,7 @@ static int knav_queue_probe(struct platform_device *pdev) |
2290 | pm_runtime_enable(&pdev->dev); |
2291 | ret = pm_runtime_get_sync(&pdev->dev); |
2292 | if (ret < 0) { |
2293 | + pm_runtime_put_noidle(&pdev->dev); |
2294 | dev_err(dev, "Failed to enable QMSS\n"); |
2295 | return ret; |
2296 | } |
2297 | @@ -1784,9 +1785,10 @@ static int knav_queue_probe(struct platform_device *pdev) |
2298 | if (ret) |
2299 | goto err; |
2300 | |
2301 | - regions = of_get_child_by_name(node, "descriptor-regions"); |
2302 | + regions = of_get_child_by_name(node, "descriptor-regions"); |
2303 | if (!regions) { |
2304 | dev_err(dev, "descriptor-regions not specified\n"); |
2305 | + ret = -ENODEV; |
2306 | goto err; |
2307 | } |
2308 | ret = knav_queue_setup_regions(kdev, regions); |
2309 | diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig |
2310 | index b7995474148c7..e9576658ff3f9 100644 |
2311 | --- a/drivers/spi/Kconfig |
2312 | +++ b/drivers/spi/Kconfig |
2313 | @@ -763,4 +763,7 @@ endif # SPI_MASTER |
2314 | |
2315 | # (slave support would go here) |
2316 | |
2317 | +config SPI_DYNAMIC |
2318 | + def_bool ACPI || OF_DYNAMIC || SPI_SLAVE |
2319 | + |
2320 | endif # SPI |
2321 | diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c |
2322 | index b7f78e6d9bec6..88772efda8304 100644 |
2323 | --- a/drivers/spi/spi-bcm2835aux.c |
2324 | +++ b/drivers/spi/spi-bcm2835aux.c |
2325 | @@ -407,7 +407,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) |
2326 | unsigned long clk_hz; |
2327 | int err; |
2328 | |
2329 | - master = spi_alloc_master(&pdev->dev, sizeof(*bs)); |
2330 | + master = devm_spi_alloc_master(&pdev->dev, sizeof(*bs)); |
2331 | if (!master) { |
2332 | dev_err(&pdev->dev, "spi_alloc_master() failed\n"); |
2333 | return -ENOMEM; |
2334 | @@ -439,30 +439,27 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) |
2335 | /* the main area */ |
2336 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
2337 | bs->regs = devm_ioremap_resource(&pdev->dev, res); |
2338 | - if (IS_ERR(bs->regs)) { |
2339 | - err = PTR_ERR(bs->regs); |
2340 | - goto out_master_put; |
2341 | - } |
2342 | + if (IS_ERR(bs->regs)) |
2343 | + return PTR_ERR(bs->regs); |
2344 | |
2345 | bs->clk = devm_clk_get(&pdev->dev, NULL); |
2346 | if ((!bs->clk) || (IS_ERR(bs->clk))) { |
2347 | err = PTR_ERR(bs->clk); |
2348 | dev_err(&pdev->dev, "could not get clk: %d\n", err); |
2349 | - goto out_master_put; |
2350 | + return err; |
2351 | } |
2352 | |
2353 | bs->irq = platform_get_irq(pdev, 0); |
2354 | if (bs->irq <= 0) { |
2355 | dev_err(&pdev->dev, "could not get IRQ: %d\n", bs->irq); |
2356 | - err = bs->irq ? bs->irq : -ENODEV; |
2357 | - goto out_master_put; |
2358 | + return bs->irq ? bs->irq : -ENODEV; |
2359 | } |
2360 | |
2361 | /* this also enables the HW block */ |
2362 | err = clk_prepare_enable(bs->clk); |
2363 | if (err) { |
2364 | dev_err(&pdev->dev, "could not prepare clock: %d\n", err); |
2365 | - goto out_master_put; |
2366 | + return err; |
2367 | } |
2368 | |
2369 | /* just checking if the clock returns a sane value */ |
2370 | @@ -495,8 +492,6 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) |
2371 | |
2372 | out_clk_disable: |
2373 | clk_disable_unprepare(bs->clk); |
2374 | -out_master_put: |
2375 | - spi_master_put(master); |
2376 | return err; |
2377 | } |
2378 | |
2379 | diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c |
2380 | index 1905d20c229f0..62ff6130727bf 100644 |
2381 | --- a/drivers/spi/spi-davinci.c |
2382 | +++ b/drivers/spi/spi-davinci.c |
2383 | @@ -1099,13 +1099,13 @@ static int davinci_spi_remove(struct platform_device *pdev) |
2384 | spi_bitbang_stop(&dspi->bitbang); |
2385 | |
2386 | clk_disable_unprepare(dspi->clk); |
2387 | - spi_master_put(master); |
2388 | |
2389 | if (dspi->dma_rx) { |
2390 | dma_release_channel(dspi->dma_rx); |
2391 | dma_release_channel(dspi->dma_tx); |
2392 | } |
2393 | |
2394 | + spi_master_put(master); |
2395 | return 0; |
2396 | } |
2397 | |
2398 | diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c |
2399 | index 2e65b70c78792..2a340234c85c1 100644 |
2400 | --- a/drivers/spi/spi-img-spfi.c |
2401 | +++ b/drivers/spi/spi-img-spfi.c |
2402 | @@ -771,8 +771,10 @@ static int img_spfi_resume(struct device *dev) |
2403 | int ret; |
2404 | |
2405 | ret = pm_runtime_get_sync(dev); |
2406 | - if (ret) |
2407 | + if (ret) { |
2408 | + pm_runtime_put_noidle(dev); |
2409 | return ret; |
2410 | + } |
2411 | spfi_reset(spfi); |
2412 | pm_runtime_put(dev); |
2413 | |
2414 | diff --git a/drivers/spi/spi-pic32.c b/drivers/spi/spi-pic32.c |
2415 | index 2f4df804c4d80..9a97ad973c416 100644 |
2416 | --- a/drivers/spi/spi-pic32.c |
2417 | +++ b/drivers/spi/spi-pic32.c |
2418 | @@ -839,6 +839,7 @@ static int pic32_spi_probe(struct platform_device *pdev) |
2419 | return 0; |
2420 | |
2421 | err_bailout: |
2422 | + pic32_spi_dma_unprep(pic32s); |
2423 | clk_disable_unprepare(pic32s->clk); |
2424 | err_master: |
2425 | spi_master_put(master); |
2426 | diff --git a/drivers/spi/spi-rb4xx.c b/drivers/spi/spi-rb4xx.c |
2427 | index 3641d0e20135b..1d7fd6dbaf876 100644 |
2428 | --- a/drivers/spi/spi-rb4xx.c |
2429 | +++ b/drivers/spi/spi-rb4xx.c |
2430 | @@ -148,7 +148,7 @@ static int rb4xx_spi_probe(struct platform_device *pdev) |
2431 | if (IS_ERR(spi_base)) |
2432 | return PTR_ERR(spi_base); |
2433 | |
2434 | - master = spi_alloc_master(&pdev->dev, sizeof(*rbspi)); |
2435 | + master = devm_spi_alloc_master(&pdev->dev, sizeof(*rbspi)); |
2436 | if (!master) |
2437 | return -ENOMEM; |
2438 | |
2439 | diff --git a/drivers/spi/spi-sc18is602.c b/drivers/spi/spi-sc18is602.c |
2440 | index f63714ffb62f4..e4306a0f7f173 100644 |
2441 | --- a/drivers/spi/spi-sc18is602.c |
2442 | +++ b/drivers/spi/spi-sc18is602.c |
2443 | @@ -247,13 +247,12 @@ static int sc18is602_probe(struct i2c_client *client, |
2444 | struct sc18is602_platform_data *pdata = dev_get_platdata(dev); |
2445 | struct sc18is602 *hw; |
2446 | struct spi_master *master; |
2447 | - int error; |
2448 | |
2449 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C | |
2450 | I2C_FUNC_SMBUS_WRITE_BYTE_DATA)) |
2451 | return -EINVAL; |
2452 | |
2453 | - master = spi_alloc_master(dev, sizeof(struct sc18is602)); |
2454 | + master = devm_spi_alloc_master(dev, sizeof(struct sc18is602)); |
2455 | if (!master) |
2456 | return -ENOMEM; |
2457 | |
2458 | @@ -304,15 +303,7 @@ static int sc18is602_probe(struct i2c_client *client, |
2459 | master->min_speed_hz = hw->freq / 128; |
2460 | master->max_speed_hz = hw->freq / 4; |
2461 | |
2462 | - error = devm_spi_register_master(dev, master); |
2463 | - if (error) |
2464 | - goto error_reg; |
2465 | - |
2466 | - return 0; |
2467 | - |
2468 | -error_reg: |
2469 | - spi_master_put(master); |
2470 | - return error; |
2471 | + return devm_spi_register_master(dev, master); |
2472 | } |
2473 | |
2474 | static const struct i2c_device_id sc18is602_id[] = { |
2475 | diff --git a/drivers/spi/spi-sh.c b/drivers/spi/spi-sh.c |
2476 | index 2bf53f0e27d9e..e1fd29068777d 100644 |
2477 | --- a/drivers/spi/spi-sh.c |
2478 | +++ b/drivers/spi/spi-sh.c |
2479 | @@ -450,7 +450,7 @@ static int spi_sh_probe(struct platform_device *pdev) |
2480 | return -ENODEV; |
2481 | } |
2482 | |
2483 | - master = spi_alloc_master(&pdev->dev, sizeof(struct spi_sh_data)); |
2484 | + master = devm_spi_alloc_master(&pdev->dev, sizeof(struct spi_sh_data)); |
2485 | if (master == NULL) { |
2486 | dev_err(&pdev->dev, "spi_alloc_master error.\n"); |
2487 | return -ENOMEM; |
2488 | @@ -468,16 +468,14 @@ static int spi_sh_probe(struct platform_device *pdev) |
2489 | break; |
2490 | default: |
2491 | dev_err(&pdev->dev, "No support width\n"); |
2492 | - ret = -ENODEV; |
2493 | - goto error1; |
2494 | + return -ENODEV; |
2495 | } |
2496 | ss->irq = irq; |
2497 | ss->master = master; |
2498 | ss->addr = devm_ioremap(&pdev->dev, res->start, resource_size(res)); |
2499 | if (ss->addr == NULL) { |
2500 | dev_err(&pdev->dev, "ioremap error.\n"); |
2501 | - ret = -ENOMEM; |
2502 | - goto error1; |
2503 | + return -ENOMEM; |
2504 | } |
2505 | INIT_LIST_HEAD(&ss->queue); |
2506 | spin_lock_init(&ss->lock); |
2507 | @@ -487,7 +485,7 @@ static int spi_sh_probe(struct platform_device *pdev) |
2508 | ret = request_irq(irq, spi_sh_irq, 0, "spi_sh", ss); |
2509 | if (ret < 0) { |
2510 | dev_err(&pdev->dev, "request_irq error\n"); |
2511 | - goto error1; |
2512 | + return ret; |
2513 | } |
2514 | |
2515 | master->num_chipselect = 2; |
2516 | @@ -506,9 +504,6 @@ static int spi_sh_probe(struct platform_device *pdev) |
2517 | |
2518 | error3: |
2519 | free_irq(irq, ss); |
2520 | - error1: |
2521 | - spi_master_put(master); |
2522 | - |
2523 | return ret; |
2524 | } |
2525 | |
2526 | diff --git a/drivers/spi/spi-st-ssc4.c b/drivers/spi/spi-st-ssc4.c |
2527 | index 710adbc2485f5..05f7316d5a522 100644 |
2528 | --- a/drivers/spi/spi-st-ssc4.c |
2529 | +++ b/drivers/spi/spi-st-ssc4.c |
2530 | @@ -379,13 +379,14 @@ static int spi_st_probe(struct platform_device *pdev) |
2531 | ret = devm_spi_register_master(&pdev->dev, master); |
2532 | if (ret) { |
2533 | dev_err(&pdev->dev, "Failed to register master\n"); |
2534 | - goto clk_disable; |
2535 | + goto rpm_disable; |
2536 | } |
2537 | |
2538 | return 0; |
2539 | |
2540 | -clk_disable: |
2541 | +rpm_disable: |
2542 | pm_runtime_disable(&pdev->dev); |
2543 | +clk_disable: |
2544 | clk_disable_unprepare(spi_st->clk); |
2545 | put_master: |
2546 | spi_master_put(master); |
2547 | diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c |
2548 | index e37712bed0b2d..d1ca8f619b828 100644 |
2549 | --- a/drivers/spi/spi-tegra114.c |
2550 | +++ b/drivers/spi/spi-tegra114.c |
2551 | @@ -801,6 +801,7 @@ static int tegra_spi_setup(struct spi_device *spi) |
2552 | |
2553 | ret = pm_runtime_get_sync(tspi->dev); |
2554 | if (ret < 0) { |
2555 | + pm_runtime_put_noidle(tspi->dev); |
2556 | dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret); |
2557 | return ret; |
2558 | } |
2559 | @@ -1214,6 +1215,7 @@ static int tegra_spi_resume(struct device *dev) |
2560 | |
2561 | ret = pm_runtime_get_sync(dev); |
2562 | if (ret < 0) { |
2563 | + pm_runtime_put_noidle(dev); |
2564 | dev_err(dev, "pm runtime failed, e = %d\n", ret); |
2565 | return ret; |
2566 | } |
2567 | diff --git a/drivers/spi/spi-tegra20-sflash.c b/drivers/spi/spi-tegra20-sflash.c |
2568 | index b6558bb6f9dfc..4b9541e1726a5 100644 |
2569 | --- a/drivers/spi/spi-tegra20-sflash.c |
2570 | +++ b/drivers/spi/spi-tegra20-sflash.c |
2571 | @@ -564,6 +564,7 @@ static int tegra_sflash_resume(struct device *dev) |
2572 | |
2573 | ret = pm_runtime_get_sync(dev); |
2574 | if (ret < 0) { |
2575 | + pm_runtime_put_noidle(dev); |
2576 | dev_err(dev, "pm runtime failed, e = %d\n", ret); |
2577 | return ret; |
2578 | } |
2579 | diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c |
2580 | index cf2a329fd8958..9f14560686b68 100644 |
2581 | --- a/drivers/spi/spi-tegra20-slink.c |
2582 | +++ b/drivers/spi/spi-tegra20-slink.c |
2583 | @@ -761,6 +761,7 @@ static int tegra_slink_setup(struct spi_device *spi) |
2584 | |
2585 | ret = pm_runtime_get_sync(tspi->dev); |
2586 | if (ret < 0) { |
2587 | + pm_runtime_put_noidle(tspi->dev); |
2588 | dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret); |
2589 | return ret; |
2590 | } |
2591 | @@ -1197,6 +1198,7 @@ static int tegra_slink_resume(struct device *dev) |
2592 | |
2593 | ret = pm_runtime_get_sync(dev); |
2594 | if (ret < 0) { |
2595 | + pm_runtime_put_noidle(dev); |
2596 | dev_err(dev, "pm runtime failed, e = %d\n", ret); |
2597 | return ret; |
2598 | } |
2599 | diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c |
2600 | index 4cb72a8e46460..b0a5486936c01 100644 |
2601 | --- a/drivers/spi/spi-ti-qspi.c |
2602 | +++ b/drivers/spi/spi-ti-qspi.c |
2603 | @@ -175,6 +175,7 @@ static int ti_qspi_setup(struct spi_device *spi) |
2604 | |
2605 | ret = pm_runtime_get_sync(qspi->dev); |
2606 | if (ret < 0) { |
2607 | + pm_runtime_put_noidle(qspi->dev); |
2608 | dev_err(qspi->dev, "pm_runtime_get_sync() failed\n"); |
2609 | return ret; |
2610 | } |
2611 | diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c |
2612 | index e0632ee1723b0..f0ba5eb26128b 100644 |
2613 | --- a/drivers/spi/spi.c |
2614 | +++ b/drivers/spi/spi.c |
2615 | @@ -422,6 +422,12 @@ static LIST_HEAD(spi_master_list); |
2616 | */ |
2617 | static DEFINE_MUTEX(board_lock); |
2618 | |
2619 | +/* |
2620 | + * Prevents addition of devices with same chip select and |
2621 | + * addition of devices below an unregistering controller. |
2622 | + */ |
2623 | +static DEFINE_MUTEX(spi_add_lock); |
2624 | + |
2625 | /** |
2626 | * spi_alloc_device - Allocate a new SPI device |
2627 | * @master: Controller to which device is connected |
2628 | @@ -500,7 +506,6 @@ static int spi_dev_check(struct device *dev, void *data) |
2629 | */ |
2630 | int spi_add_device(struct spi_device *spi) |
2631 | { |
2632 | - static DEFINE_MUTEX(spi_add_lock); |
2633 | struct spi_master *master = spi->master; |
2634 | struct device *dev = master->dev.parent; |
2635 | int status; |
2636 | @@ -529,6 +534,13 @@ int spi_add_device(struct spi_device *spi) |
2637 | goto done; |
2638 | } |
2639 | |
2640 | + /* Controller may unregister concurrently */ |
2641 | + if (IS_ENABLED(CONFIG_SPI_DYNAMIC) && |
2642 | + !device_is_registered(&master->dev)) { |
2643 | + status = -ENODEV; |
2644 | + goto done; |
2645 | + } |
2646 | + |
2647 | if (master->cs_gpios) |
2648 | spi->cs_gpio = master->cs_gpios[spi->chip_select]; |
2649 | |
2650 | @@ -2070,6 +2082,10 @@ static int __unregister(struct device *dev, void *null) |
2651 | */ |
2652 | void spi_unregister_master(struct spi_master *master) |
2653 | { |
2654 | + /* Prevent addition of new devices, unregister existing ones */ |
2655 | + if (IS_ENABLED(CONFIG_SPI_DYNAMIC)) |
2656 | + mutex_lock(&spi_add_lock); |
2657 | + |
2658 | device_for_each_child(&master->dev, NULL, __unregister); |
2659 | |
2660 | if (master->queued) { |
2661 | @@ -2089,6 +2105,9 @@ void spi_unregister_master(struct spi_master *master) |
2662 | if (!devres_find(master->dev.parent, devm_spi_release_master, |
2663 | devm_spi_match_master, master)) |
2664 | put_device(&master->dev); |
2665 | + |
2666 | + if (IS_ENABLED(CONFIG_SPI_DYNAMIC)) |
2667 | + mutex_unlock(&spi_add_lock); |
2668 | } |
2669 | EXPORT_SYMBOL_GPL(spi_unregister_master); |
2670 | |
2671 | diff --git a/drivers/staging/comedi/drivers/mf6x4.c b/drivers/staging/comedi/drivers/mf6x4.c |
2672 | index fbdf181d8cccc..40aa24a9b2c30 100644 |
2673 | --- a/drivers/staging/comedi/drivers/mf6x4.c |
2674 | +++ b/drivers/staging/comedi/drivers/mf6x4.c |
2675 | @@ -121,8 +121,9 @@ static int mf6x4_ai_eoc(struct comedi_device *dev, |
2676 | struct mf6x4_private *devpriv = dev->private; |
2677 | unsigned int status; |
2678 | |
2679 | + /* EOLC goes low at end of conversion. */ |
2680 | status = ioread32(devpriv->gpioc_reg); |
2681 | - if (status & MF6X4_GPIOC_EOLC) |
2682 | + if ((status & MF6X4_GPIOC_EOLC) == 0) |
2683 | return 0; |
2684 | return -EBUSY; |
2685 | } |
2686 | diff --git a/drivers/staging/greybus/audio_codec.c b/drivers/staging/greybus/audio_codec.c |
2687 | index 8a0744b58a329..4c2d6c2d4fb41 100644 |
2688 | --- a/drivers/staging/greybus/audio_codec.c |
2689 | +++ b/drivers/staging/greybus/audio_codec.c |
2690 | @@ -491,6 +491,7 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream, |
2691 | if (ret) { |
2692 | dev_err_ratelimited(dai->dev, "%d: Error during set_config\n", |
2693 | ret); |
2694 | + gb_pm_runtime_put_noidle(bundle); |
2695 | mutex_unlock(&codec->lock); |
2696 | return ret; |
2697 | } |
2698 | @@ -562,6 +563,7 @@ static int gbcodec_prepare(struct snd_pcm_substream *substream, |
2699 | break; |
2700 | } |
2701 | if (ret) { |
2702 | + gb_pm_runtime_put_noidle(bundle); |
2703 | mutex_unlock(&codec->lock); |
2704 | dev_err_ratelimited(dai->dev, "set_data_size failed:%d\n", |
2705 | ret); |
2706 | diff --git a/drivers/staging/speakup/speakup_dectlk.c b/drivers/staging/speakup/speakup_dectlk.c |
2707 | index 764656759fbf4..1079b11fff4bc 100644 |
2708 | --- a/drivers/staging/speakup/speakup_dectlk.c |
2709 | +++ b/drivers/staging/speakup/speakup_dectlk.c |
2710 | @@ -47,7 +47,7 @@ static unsigned char get_index(void); |
2711 | static int in_escape; |
2712 | static int is_flushing; |
2713 | |
2714 | -static spinlock_t flush_lock; |
2715 | +static DEFINE_SPINLOCK(flush_lock); |
2716 | static DECLARE_WAIT_QUEUE_HEAD(flush); |
2717 | |
2718 | static struct var_t vars[] = { |
2719 | diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c |
2720 | index d41be02abced2..c551407bee07b 100644 |
2721 | --- a/drivers/tty/serial/8250/8250_omap.c |
2722 | +++ b/drivers/tty/serial/8250/8250_omap.c |
2723 | @@ -161,11 +161,6 @@ static void omap_8250_mdr1_errataset(struct uart_8250_port *up, |
2724 | struct omap8250_priv *priv) |
2725 | { |
2726 | u8 timeout = 255; |
2727 | - u8 old_mdr1; |
2728 | - |
2729 | - old_mdr1 = serial_in(up, UART_OMAP_MDR1); |
2730 | - if (old_mdr1 == priv->mdr1) |
2731 | - return; |
2732 | |
2733 | serial_out(up, UART_OMAP_MDR1, priv->mdr1); |
2734 | udelay(2); |
2735 | diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c |
2736 | index 3701b240fcb30..74a1a97a77b28 100644 |
2737 | --- a/drivers/tty/serial/serial_core.c |
2738 | +++ b/drivers/tty/serial/serial_core.c |
2739 | @@ -1415,6 +1415,10 @@ static void uart_set_ldisc(struct tty_struct *tty) |
2740 | { |
2741 | struct uart_state *state = tty->driver_data; |
2742 | struct uart_port *uport; |
2743 | + struct tty_port *port = &state->port; |
2744 | + |
2745 | + if (!tty_port_initialized(port)) |
2746 | + return; |
2747 | |
2748 | mutex_lock(&state->port.mutex); |
2749 | uport = uart_port_check(state); |
2750 | diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c |
2751 | index 099179457f60c..7ea84e6c85bb8 100644 |
2752 | --- a/drivers/usb/chipidea/ci_hdrc_imx.c |
2753 | +++ b/drivers/usb/chipidea/ci_hdrc_imx.c |
2754 | @@ -63,7 +63,8 @@ static const struct ci_hdrc_imx_platform_flag imx6sx_usb_data = { |
2755 | |
2756 | static const struct ci_hdrc_imx_platform_flag imx6ul_usb_data = { |
2757 | .flags = CI_HDRC_SUPPORTS_RUNTIME_PM | |
2758 | - CI_HDRC_TURN_VBUS_EARLY_ON, |
2759 | + CI_HDRC_TURN_VBUS_EARLY_ON | |
2760 | + CI_HDRC_DISABLE_DEVICE_STREAMING, |
2761 | }; |
2762 | |
2763 | static const struct ci_hdrc_imx_platform_flag imx7d_usb_data = { |
2764 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c |
2765 | index 34d8cece6dd3b..5d109717ac4e3 100644 |
2766 | --- a/drivers/usb/core/quirks.c |
2767 | +++ b/drivers/usb/core/quirks.c |
2768 | @@ -189,6 +189,9 @@ static const struct usb_device_id usb_quirk_list[] = { |
2769 | { USB_DEVICE(0x06a3, 0x0006), .driver_info = |
2770 | USB_QUIRK_CONFIG_INTF_STRINGS }, |
2771 | |
2772 | + /* Agfa SNAPSCAN 1212U */ |
2773 | + { USB_DEVICE(0x06bd, 0x0001), .driver_info = USB_QUIRK_RESET_RESUME }, |
2774 | + |
2775 | /* Guillemot Webcam Hercules Dualpix Exchange (2nd ID) */ |
2776 | { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, |
2777 | |
2778 | diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c |
2779 | index 5e3828d9dac7f..7a135a36d1a2f 100644 |
2780 | --- a/drivers/usb/gadget/function/f_acm.c |
2781 | +++ b/drivers/usb/gadget/function/f_acm.c |
2782 | @@ -687,7 +687,7 @@ acm_bind(struct usb_configuration *c, struct usb_function *f) |
2783 | acm_ss_out_desc.bEndpointAddress = acm_fs_out_desc.bEndpointAddress; |
2784 | |
2785 | status = usb_assign_descriptors(f, acm_fs_function, acm_hs_function, |
2786 | - acm_ss_function, NULL); |
2787 | + acm_ss_function, acm_ss_function); |
2788 | if (status) |
2789 | goto fail; |
2790 | |
2791 | diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c |
2792 | index 68489557752da..26fcbb92c4ba7 100644 |
2793 | --- a/drivers/usb/gadget/function/f_fs.c |
2794 | +++ b/drivers/usb/gadget/function/f_fs.c |
2795 | @@ -1228,6 +1228,7 @@ static long ffs_epfile_ioctl(struct file *file, unsigned code, |
2796 | |
2797 | switch (epfile->ffs->gadget->speed) { |
2798 | case USB_SPEED_SUPER: |
2799 | + case USB_SPEED_SUPER_PLUS: |
2800 | desc_idx = 2; |
2801 | break; |
2802 | case USB_SPEED_HIGH: |
2803 | @@ -3067,7 +3068,8 @@ static int _ffs_func_bind(struct usb_configuration *c, |
2804 | } |
2805 | |
2806 | if (likely(super)) { |
2807 | - func->function.ss_descriptors = vla_ptr(vlabuf, d, ss_descs); |
2808 | + func->function.ss_descriptors = func->function.ssp_descriptors = |
2809 | + vla_ptr(vlabuf, d, ss_descs); |
2810 | ss_len = ffs_do_descs(ffs->ss_descs_count, |
2811 | vla_ptr(vlabuf, d, raw_descs) + fs_len + hs_len, |
2812 | d_raw_descs__sz - fs_len - hs_len, |
2813 | @@ -3507,6 +3509,7 @@ static void ffs_func_unbind(struct usb_configuration *c, |
2814 | func->function.fs_descriptors = NULL; |
2815 | func->function.hs_descriptors = NULL; |
2816 | func->function.ss_descriptors = NULL; |
2817 | + func->function.ssp_descriptors = NULL; |
2818 | func->interfaces_nums = NULL; |
2819 | |
2820 | ffs_event_add(ffs, FUNCTIONFS_UNBIND); |
2821 | diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c |
2822 | index cab5fbd5b9557..58e82082d8228 100644 |
2823 | --- a/drivers/usb/gadget/function/f_midi.c |
2824 | +++ b/drivers/usb/gadget/function/f_midi.c |
2825 | @@ -1008,6 +1008,12 @@ static int f_midi_bind(struct usb_configuration *c, struct usb_function *f) |
2826 | f->hs_descriptors = usb_copy_descriptors(midi_function); |
2827 | if (!f->hs_descriptors) |
2828 | goto fail_f_midi; |
2829 | + |
2830 | + if (gadget_is_superspeed_plus(c->cdev->gadget)) { |
2831 | + f->ssp_descriptors = usb_copy_descriptors(midi_function); |
2832 | + if (!f->ssp_descriptors) |
2833 | + goto fail_f_midi; |
2834 | + } |
2835 | } |
2836 | |
2837 | kfree(midi_function); |
2838 | diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c |
2839 | index 865cb070bf8b3..2f310973155a5 100644 |
2840 | --- a/drivers/usb/gadget/function/f_rndis.c |
2841 | +++ b/drivers/usb/gadget/function/f_rndis.c |
2842 | @@ -91,8 +91,10 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f) |
2843 | /* peak (theoretical) bulk transfer rate in bits-per-second */ |
2844 | static unsigned int bitrate(struct usb_gadget *g) |
2845 | { |
2846 | + if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS) |
2847 | + return 4250000000U; |
2848 | if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER) |
2849 | - return 13 * 1024 * 8 * 1000 * 8; |
2850 | + return 3750000000U; |
2851 | else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH) |
2852 | return 13 * 512 * 8 * 1000 * 8; |
2853 | else |
2854 | diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c |
2855 | index 2f7023a289c94..9fdb567a09be6 100644 |
2856 | --- a/drivers/usb/gadget/udc/dummy_hcd.c |
2857 | +++ b/drivers/usb/gadget/udc/dummy_hcd.c |
2858 | @@ -2736,7 +2736,7 @@ static int __init init(void) |
2859 | { |
2860 | int retval = -ENOMEM; |
2861 | int i; |
2862 | - struct dummy *dum[MAX_NUM_UDC]; |
2863 | + struct dummy *dum[MAX_NUM_UDC] = {}; |
2864 | |
2865 | if (usb_disabled()) |
2866 | return -ENODEV; |
2867 | diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c |
2868 | index 94ea9fff13e6d..9227a9ddac609 100644 |
2869 | --- a/drivers/usb/host/ehci-omap.c |
2870 | +++ b/drivers/usb/host/ehci-omap.c |
2871 | @@ -237,6 +237,7 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev) |
2872 | |
2873 | err_pm_runtime: |
2874 | pm_runtime_put_sync(dev); |
2875 | + pm_runtime_disable(dev); |
2876 | |
2877 | err_phy: |
2878 | for (i = 0; i < omap->nports; i++) { |
2879 | diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c |
2880 | index 4e4d601af35c1..2f48da0c0bb39 100644 |
2881 | --- a/drivers/usb/host/oxu210hp-hcd.c |
2882 | +++ b/drivers/usb/host/oxu210hp-hcd.c |
2883 | @@ -3734,8 +3734,10 @@ static struct usb_hcd *oxu_create(struct platform_device *pdev, |
2884 | oxu->is_otg = otg; |
2885 | |
2886 | ret = usb_add_hcd(hcd, irq, IRQF_SHARED); |
2887 | - if (ret < 0) |
2888 | + if (ret < 0) { |
2889 | + usb_put_hcd(hcd); |
2890 | return ERR_PTR(ret); |
2891 | + } |
2892 | |
2893 | device_wakeup_enable(hcd->self.controller); |
2894 | return hcd; |
2895 | diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c |
2896 | index 194ea29d7a57e..4ad71479c4490 100644 |
2897 | --- a/drivers/usb/host/xhci-hub.c |
2898 | +++ b/drivers/usb/host/xhci-hub.c |
2899 | @@ -1424,6 +1424,10 @@ int xhci_bus_suspend(struct usb_hcd *hcd) |
2900 | hcd->state = HC_STATE_SUSPENDED; |
2901 | bus_state->next_statechange = jiffies + msecs_to_jiffies(10); |
2902 | spin_unlock_irqrestore(&xhci->lock, flags); |
2903 | + |
2904 | + if (bus_state->bus_suspended) |
2905 | + usleep_range(5000, 10000); |
2906 | + |
2907 | return 0; |
2908 | } |
2909 | |
2910 | diff --git a/drivers/usb/misc/sisusbvga/Kconfig b/drivers/usb/misc/sisusbvga/Kconfig |
2911 | index 36bc28c884ad7..47dabccafef43 100644 |
2912 | --- a/drivers/usb/misc/sisusbvga/Kconfig |
2913 | +++ b/drivers/usb/misc/sisusbvga/Kconfig |
2914 | @@ -15,7 +15,7 @@ config USB_SISUSBVGA |
2915 | |
2916 | config USB_SISUSBVGA_CON |
2917 | bool "Text console and mode switching support" if USB_SISUSBVGA |
2918 | - depends on VT |
2919 | + depends on VT && BROKEN |
2920 | select FONT_8x16 |
2921 | ---help--- |
2922 | Say Y here if you want a VGA text console via the USB dongle or |
2923 | diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c |
2924 | index d17f7872f95ae..93a31ea8e210c 100644 |
2925 | --- a/drivers/usb/serial/keyspan_pda.c |
2926 | +++ b/drivers/usb/serial/keyspan_pda.c |
2927 | @@ -44,11 +44,12 @@ |
2928 | #define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>" |
2929 | #define DRIVER_DESC "USB Keyspan PDA Converter driver" |
2930 | |
2931 | +#define KEYSPAN_TX_THRESHOLD 16 |
2932 | + |
2933 | struct keyspan_pda_private { |
2934 | int tx_room; |
2935 | int tx_throttled; |
2936 | - struct work_struct wakeup_work; |
2937 | - struct work_struct unthrottle_work; |
2938 | + struct work_struct unthrottle_work; |
2939 | struct usb_serial *serial; |
2940 | struct usb_serial_port *port; |
2941 | }; |
2942 | @@ -101,15 +102,6 @@ static const struct usb_device_id id_table_fake_xircom[] = { |
2943 | }; |
2944 | #endif |
2945 | |
2946 | -static void keyspan_pda_wakeup_write(struct work_struct *work) |
2947 | -{ |
2948 | - struct keyspan_pda_private *priv = |
2949 | - container_of(work, struct keyspan_pda_private, wakeup_work); |
2950 | - struct usb_serial_port *port = priv->port; |
2951 | - |
2952 | - tty_port_tty_wakeup(&port->port); |
2953 | -} |
2954 | - |
2955 | static void keyspan_pda_request_unthrottle(struct work_struct *work) |
2956 | { |
2957 | struct keyspan_pda_private *priv = |
2958 | @@ -124,7 +116,7 @@ static void keyspan_pda_request_unthrottle(struct work_struct *work) |
2959 | 7, /* request_unthrottle */ |
2960 | USB_TYPE_VENDOR | USB_RECIP_INTERFACE |
2961 | | USB_DIR_OUT, |
2962 | - 16, /* value: threshold */ |
2963 | + KEYSPAN_TX_THRESHOLD, |
2964 | 0, /* index */ |
2965 | NULL, |
2966 | 0, |
2967 | @@ -143,6 +135,8 @@ static void keyspan_pda_rx_interrupt(struct urb *urb) |
2968 | int retval; |
2969 | int status = urb->status; |
2970 | struct keyspan_pda_private *priv; |
2971 | + unsigned long flags; |
2972 | + |
2973 | priv = usb_get_serial_port_data(port); |
2974 | |
2975 | switch (status) { |
2976 | @@ -176,18 +170,21 @@ static void keyspan_pda_rx_interrupt(struct urb *urb) |
2977 | break; |
2978 | case 1: |
2979 | /* status interrupt */ |
2980 | - if (len < 3) { |
2981 | + if (len < 2) { |
2982 | dev_warn(&port->dev, "short interrupt message received\n"); |
2983 | break; |
2984 | } |
2985 | - dev_dbg(&port->dev, "rx int, d1=%d, d2=%d\n", data[1], data[2]); |
2986 | + dev_dbg(&port->dev, "rx int, d1=%d\n", data[1]); |
2987 | switch (data[1]) { |
2988 | case 1: /* modemline change */ |
2989 | break; |
2990 | case 2: /* tx unthrottle interrupt */ |
2991 | + spin_lock_irqsave(&port->lock, flags); |
2992 | priv->tx_throttled = 0; |
2993 | + priv->tx_room = max(priv->tx_room, KEYSPAN_TX_THRESHOLD); |
2994 | + spin_unlock_irqrestore(&port->lock, flags); |
2995 | /* queue up a wakeup at scheduler time */ |
2996 | - schedule_work(&priv->wakeup_work); |
2997 | + usb_serial_port_softint(port); |
2998 | break; |
2999 | default: |
3000 | break; |
3001 | @@ -447,6 +444,7 @@ static int keyspan_pda_write(struct tty_struct *tty, |
3002 | int request_unthrottle = 0; |
3003 | int rc = 0; |
3004 | struct keyspan_pda_private *priv; |
3005 | + unsigned long flags; |
3006 | |
3007 | priv = usb_get_serial_port_data(port); |
3008 | /* guess how much room is left in the device's ring buffer, and if we |
3009 | @@ -466,13 +464,13 @@ static int keyspan_pda_write(struct tty_struct *tty, |
3010 | the TX urb is in-flight (wait until it completes) |
3011 | the device is full (wait until it says there is room) |
3012 | */ |
3013 | - spin_lock_bh(&port->lock); |
3014 | + spin_lock_irqsave(&port->lock, flags); |
3015 | if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled) { |
3016 | - spin_unlock_bh(&port->lock); |
3017 | + spin_unlock_irqrestore(&port->lock, flags); |
3018 | return 0; |
3019 | } |
3020 | clear_bit(0, &port->write_urbs_free); |
3021 | - spin_unlock_bh(&port->lock); |
3022 | + spin_unlock_irqrestore(&port->lock, flags); |
3023 | |
3024 | /* At this point the URB is in our control, nobody else can submit it |
3025 | again (the only sudden transition was the one from EINPROGRESS to |
3026 | @@ -518,7 +516,8 @@ static int keyspan_pda_write(struct tty_struct *tty, |
3027 | goto exit; |
3028 | } |
3029 | } |
3030 | - if (count > priv->tx_room) { |
3031 | + |
3032 | + if (count >= priv->tx_room) { |
3033 | /* we're about to completely fill the Tx buffer, so |
3034 | we'll be throttled afterwards. */ |
3035 | count = priv->tx_room; |
3036 | @@ -551,7 +550,7 @@ static int keyspan_pda_write(struct tty_struct *tty, |
3037 | |
3038 | rc = count; |
3039 | exit: |
3040 | - if (rc < 0) |
3041 | + if (rc <= 0) |
3042 | set_bit(0, &port->write_urbs_free); |
3043 | return rc; |
3044 | } |
3045 | @@ -566,21 +565,24 @@ static void keyspan_pda_write_bulk_callback(struct urb *urb) |
3046 | priv = usb_get_serial_port_data(port); |
3047 | |
3048 | /* queue up a wakeup at scheduler time */ |
3049 | - schedule_work(&priv->wakeup_work); |
3050 | + usb_serial_port_softint(port); |
3051 | } |
3052 | |
3053 | |
3054 | static int keyspan_pda_write_room(struct tty_struct *tty) |
3055 | { |
3056 | struct usb_serial_port *port = tty->driver_data; |
3057 | - struct keyspan_pda_private *priv; |
3058 | - priv = usb_get_serial_port_data(port); |
3059 | - /* used by n_tty.c for processing of tabs and such. Giving it our |
3060 | - conservative guess is probably good enough, but needs testing by |
3061 | - running a console through the device. */ |
3062 | - return priv->tx_room; |
3063 | -} |
3064 | + struct keyspan_pda_private *priv = usb_get_serial_port_data(port); |
3065 | + unsigned long flags; |
3066 | + int room = 0; |
3067 | |
3068 | + spin_lock_irqsave(&port->lock, flags); |
3069 | + if (test_bit(0, &port->write_urbs_free) && !priv->tx_throttled) |
3070 | + room = priv->tx_room; |
3071 | + spin_unlock_irqrestore(&port->lock, flags); |
3072 | + |
3073 | + return room; |
3074 | +} |
3075 | |
3076 | static int keyspan_pda_chars_in_buffer(struct tty_struct *tty) |
3077 | { |
3078 | @@ -660,8 +662,12 @@ error: |
3079 | } |
3080 | static void keyspan_pda_close(struct usb_serial_port *port) |
3081 | { |
3082 | + struct keyspan_pda_private *priv = usb_get_serial_port_data(port); |
3083 | + |
3084 | usb_kill_urb(port->write_urb); |
3085 | usb_kill_urb(port->interrupt_in_urb); |
3086 | + |
3087 | + cancel_work_sync(&priv->unthrottle_work); |
3088 | } |
3089 | |
3090 | |
3091 | @@ -732,7 +738,6 @@ static int keyspan_pda_port_probe(struct usb_serial_port *port) |
3092 | if (!priv) |
3093 | return -ENOMEM; |
3094 | |
3095 | - INIT_WORK(&priv->wakeup_work, keyspan_pda_wakeup_write); |
3096 | INIT_WORK(&priv->unthrottle_work, keyspan_pda_request_unthrottle); |
3097 | priv->serial = port->serial; |
3098 | priv->port = port; |
3099 | diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c |
3100 | index 14b45f3e6388a..76c9276b2d75f 100644 |
3101 | --- a/drivers/usb/serial/mos7720.c |
3102 | +++ b/drivers/usb/serial/mos7720.c |
3103 | @@ -640,6 +640,8 @@ static void parport_mos7715_restore_state(struct parport *pp, |
3104 | spin_unlock(&release_lock); |
3105 | return; |
3106 | } |
3107 | + mos_parport->shadowDCR = s->u.pc.ctr; |
3108 | + mos_parport->shadowECR = s->u.pc.ecr; |
3109 | write_parport_reg_nonblock(mos_parport, MOS7720_DCR, |
3110 | mos_parport->shadowDCR); |
3111 | write_parport_reg_nonblock(mos_parport, MOS7720_ECR, |
3112 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
3113 | index e8643612e9a39..6045a8e24068c 100644 |
3114 | --- a/drivers/usb/serial/option.c |
3115 | +++ b/drivers/usb/serial/option.c |
3116 | @@ -563,6 +563,9 @@ static void option_instat_callback(struct urb *urb); |
3117 | |
3118 | /* Device flags */ |
3119 | |
3120 | +/* Highest interface number which can be used with NCTRL() and RSVD() */ |
3121 | +#define FLAG_IFNUM_MAX 7 |
3122 | + |
3123 | /* Interface does not support modem-control requests */ |
3124 | #define NCTRL(ifnum) ((BIT(ifnum) & 0xff) << 8) |
3125 | |
3126 | @@ -2086,6 +2089,14 @@ static struct usb_serial_driver * const serial_drivers[] = { |
3127 | |
3128 | module_usb_serial_driver(serial_drivers, option_ids); |
3129 | |
3130 | +static bool iface_is_reserved(unsigned long device_flags, u8 ifnum) |
3131 | +{ |
3132 | + if (ifnum > FLAG_IFNUM_MAX) |
3133 | + return false; |
3134 | + |
3135 | + return device_flags & RSVD(ifnum); |
3136 | +} |
3137 | + |
3138 | static int option_probe(struct usb_serial *serial, |
3139 | const struct usb_device_id *id) |
3140 | { |
3141 | @@ -2103,7 +2114,7 @@ static int option_probe(struct usb_serial *serial, |
3142 | * the same class/subclass/protocol as the serial interfaces. Look at |
3143 | * the Windows driver .INF files for reserved interface numbers. |
3144 | */ |
3145 | - if (device_flags & RSVD(iface_desc->bInterfaceNumber)) |
3146 | + if (iface_is_reserved(device_flags, iface_desc->bInterfaceNumber)) |
3147 | return -ENODEV; |
3148 | /* |
3149 | * Don't bind network interface on Samsung GT-B3730, it is handled by |
3150 | @@ -2120,6 +2131,14 @@ static int option_probe(struct usb_serial *serial, |
3151 | return 0; |
3152 | } |
3153 | |
3154 | +static bool iface_no_modem_control(unsigned long device_flags, u8 ifnum) |
3155 | +{ |
3156 | + if (ifnum > FLAG_IFNUM_MAX) |
3157 | + return false; |
3158 | + |
3159 | + return device_flags & NCTRL(ifnum); |
3160 | +} |
3161 | + |
3162 | static int option_attach(struct usb_serial *serial) |
3163 | { |
3164 | struct usb_interface_descriptor *iface_desc; |
3165 | @@ -2135,7 +2154,7 @@ static int option_attach(struct usb_serial *serial) |
3166 | |
3167 | iface_desc = &serial->interface->cur_altsetting->desc; |
3168 | |
3169 | - if (!(device_flags & NCTRL(iface_desc->bInterfaceNumber))) |
3170 | + if (!iface_no_modem_control(device_flags, iface_desc->bInterfaceNumber)) |
3171 | data->use_send_setup = 1; |
3172 | |
3173 | if (device_flags & ZLP) |
3174 | diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c |
3175 | index 237d5aceb302d..f9a3da02c631b 100644 |
3176 | --- a/drivers/vfio/pci/vfio_pci.c |
3177 | +++ b/drivers/vfio/pci/vfio_pci.c |
3178 | @@ -1403,8 +1403,8 @@ static int vfio_pci_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) |
3179 | |
3180 | mutex_unlock(&vdev->vma_lock); |
3181 | |
3182 | - if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, |
3183 | - vma->vm_end - vma->vm_start, vma->vm_page_prot)) |
3184 | + if (io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, |
3185 | + vma->vm_end - vma->vm_start, vma->vm_page_prot)) |
3186 | ret = VM_FAULT_SIGBUS; |
3187 | |
3188 | up_out: |
3189 | diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c |
3190 | index 4f47b5e909566..8b88824a88dc2 100644 |
3191 | --- a/drivers/watchdog/qcom-wdt.c |
3192 | +++ b/drivers/watchdog/qcom-wdt.c |
3193 | @@ -121,7 +121,7 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action, |
3194 | */ |
3195 | wmb(); |
3196 | |
3197 | - msleep(150); |
3198 | + mdelay(150); |
3199 | return 0; |
3200 | } |
3201 | |
3202 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
3203 | index 6f8f37e37abb2..4b671e5c33cec 100644 |
3204 | --- a/fs/btrfs/inode.c |
3205 | +++ b/fs/btrfs/inode.c |
3206 | @@ -7000,7 +7000,7 @@ again: |
3207 | found_type == BTRFS_FILE_EXTENT_PREALLOC) { |
3208 | /* Only regular file could have regular/prealloc extent */ |
3209 | if (!S_ISREG(inode->i_mode)) { |
3210 | - ret = -EUCLEAN; |
3211 | + err = -EUCLEAN; |
3212 | btrfs_crit(root->fs_info, |
3213 | "regular/prealloc extent found for non-regular inode %llu", |
3214 | btrfs_ino(inode)); |
3215 | diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c |
3216 | index 154008e245a2f..d6795c6fdd666 100644 |
3217 | --- a/fs/btrfs/qgroup.c |
3218 | +++ b/fs/btrfs/qgroup.c |
3219 | @@ -2340,8 +2340,10 @@ out: |
3220 | } |
3221 | btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem); |
3222 | |
3223 | - if (done && !ret) |
3224 | + if (done && !ret) { |
3225 | ret = 1; |
3226 | + fs_info->qgroup_rescan_progress.objectid = (u64)-1; |
3227 | + } |
3228 | return ret; |
3229 | } |
3230 | |
3231 | diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c |
3232 | index 16c0585cd81c8..9fd7bc699aae8 100644 |
3233 | --- a/fs/btrfs/scrub.c |
3234 | +++ b/fs/btrfs/scrub.c |
3235 | @@ -919,11 +919,6 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) |
3236 | have_csum = sblock_to_check->pagev[0]->have_csum; |
3237 | dev = sblock_to_check->pagev[0]->dev; |
3238 | |
3239 | - if (sctx->is_dev_replace && !is_metadata && !have_csum) { |
3240 | - sblocks_for_recheck = NULL; |
3241 | - goto nodatasum_case; |
3242 | - } |
3243 | - |
3244 | /* |
3245 | * read all mirrors one after the other. This includes to |
3246 | * re-read the extent or metadata block that failed (that was |
3247 | @@ -1036,13 +1031,19 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) |
3248 | goto out; |
3249 | } |
3250 | |
3251 | - if (!is_metadata && !have_csum) { |
3252 | + /* |
3253 | + * NOTE: Even for nodatasum case, it's still possible that it's a |
3254 | + * compressed data extent, thus scrub_fixup_nodatasum(), which write |
3255 | + * inode page cache onto disk, could cause serious data corruption. |
3256 | + * |
3257 | + * So here we could only read from disk, and hope our recovery could |
3258 | + * reach disk before the newer write. |
3259 | + */ |
3260 | + if (0 && !is_metadata && !have_csum) { |
3261 | struct scrub_fixup_nodatasum *fixup_nodatasum; |
3262 | |
3263 | WARN_ON(sctx->is_dev_replace); |
3264 | |
3265 | -nodatasum_case: |
3266 | - |
3267 | /* |
3268 | * !is_metadata and !have_csum, this means that the data |
3269 | * might not be COWed, that it might be modified |
3270 | diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c |
3271 | index 9edc2674b8a70..ace3209f3a392 100644 |
3272 | --- a/fs/btrfs/tests/btrfs-tests.c |
3273 | +++ b/fs/btrfs/tests/btrfs-tests.c |
3274 | @@ -51,7 +51,13 @@ static struct file_system_type test_type = { |
3275 | |
3276 | struct inode *btrfs_new_test_inode(void) |
3277 | { |
3278 | - return new_inode(test_mnt->mnt_sb); |
3279 | + struct inode *inode; |
3280 | + |
3281 | + inode = new_inode(test_mnt->mnt_sb); |
3282 | + if (inode) |
3283 | + inode_init_owner(inode, NULL, S_IFREG); |
3284 | + |
3285 | + return inode; |
3286 | } |
3287 | |
3288 | static int btrfs_init_test_fs(void) |
3289 | diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c |
3290 | index cbd92dd89de16..2a351821d8f32 100644 |
3291 | --- a/fs/ceph/caps.c |
3292 | +++ b/fs/ceph/caps.c |
3293 | @@ -927,12 +927,19 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release) |
3294 | { |
3295 | struct ceph_mds_session *session = cap->session; |
3296 | struct ceph_inode_info *ci = cap->ci; |
3297 | - struct ceph_mds_client *mdsc = |
3298 | - ceph_sb_to_client(ci->vfs_inode.i_sb)->mdsc; |
3299 | + struct ceph_mds_client *mdsc; |
3300 | int removed = 0; |
3301 | |
3302 | + /* 'ci' being NULL means the remove have already occurred */ |
3303 | + if (!ci) { |
3304 | + dout("%s: cap inode is NULL\n", __func__); |
3305 | + return; |
3306 | + } |
3307 | + |
3308 | dout("__ceph_remove_cap %p from %p\n", cap, &ci->vfs_inode); |
3309 | |
3310 | + mdsc = ceph_inode_to_client(&ci->vfs_inode)->mdsc; |
3311 | + |
3312 | /* remove from inode's cap rbtree, and clear auth cap */ |
3313 | rb_erase(&cap->ci_node, &ci->i_caps); |
3314 | if (ci->i_auth_cap == cap) |
3315 | diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c |
3316 | index ac13de1a7e420..1d543f8b3814f 100644 |
3317 | --- a/fs/ext4/mballoc.c |
3318 | +++ b/fs/ext4/mballoc.c |
3319 | @@ -4650,6 +4650,7 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b, |
3320 | ext4_group_first_block_no(sb, group) + |
3321 | EXT4_C2B(sbi, cluster), |
3322 | "Block already on to-be-freed list"); |
3323 | + kmem_cache_free(ext4_free_data_cachep, new_entry); |
3324 | return 0; |
3325 | } |
3326 | } |
3327 | diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c |
3328 | index 2f236cca60951..64a55015d1269 100644 |
3329 | --- a/fs/jffs2/readinode.c |
3330 | +++ b/fs/jffs2/readinode.c |
3331 | @@ -672,6 +672,22 @@ static inline int read_direntry(struct jffs2_sb_info *c, struct jffs2_raw_node_r |
3332 | jffs2_free_full_dirent(fd); |
3333 | return -EIO; |
3334 | } |
3335 | + |
3336 | +#ifdef CONFIG_JFFS2_SUMMARY |
3337 | + /* |
3338 | + * we use CONFIG_JFFS2_SUMMARY because without it, we |
3339 | + * have checked it while mounting |
3340 | + */ |
3341 | + crc = crc32(0, fd->name, rd->nsize); |
3342 | + if (unlikely(crc != je32_to_cpu(rd->name_crc))) { |
3343 | + JFFS2_NOTICE("name CRC failed on dirent node at" |
3344 | + "%#08x: read %#08x,calculated %#08x\n", |
3345 | + ref_offset(ref), je32_to_cpu(rd->node_crc), crc); |
3346 | + jffs2_mark_node_obsolete(c, ref); |
3347 | + jffs2_free_full_dirent(fd); |
3348 | + return 0; |
3349 | + } |
3350 | +#endif |
3351 | } |
3352 | |
3353 | fd->nhash = full_name_hash(NULL, fd->name, rd->nsize); |
3354 | diff --git a/fs/jfs/jfs_dmap.h b/fs/jfs/jfs_dmap.h |
3355 | index 562b9a7e4311f..f502a15c6c987 100644 |
3356 | --- a/fs/jfs/jfs_dmap.h |
3357 | +++ b/fs/jfs/jfs_dmap.h |
3358 | @@ -196,7 +196,7 @@ typedef union dmtree { |
3359 | #define dmt_leafidx t1.leafidx |
3360 | #define dmt_height t1.height |
3361 | #define dmt_budmin t1.budmin |
3362 | -#define dmt_stree t1.stree |
3363 | +#define dmt_stree t2.stree |
3364 | |
3365 | /* |
3366 | * on-disk aggregate disk allocation map descriptor. |
3367 | diff --git a/fs/lockd/host.c b/fs/lockd/host.c |
3368 | index c7eb47f2fb6c3..603fa652b965d 100644 |
3369 | --- a/fs/lockd/host.c |
3370 | +++ b/fs/lockd/host.c |
3371 | @@ -430,12 +430,7 @@ nlm_bind_host(struct nlm_host *host) |
3372 | * RPC rebind is required |
3373 | */ |
3374 | if ((clnt = host->h_rpcclnt) != NULL) { |
3375 | - if (time_after_eq(jiffies, host->h_nextrebind)) { |
3376 | - rpc_force_rebind(clnt); |
3377 | - host->h_nextrebind = jiffies + NLM_HOST_REBIND; |
3378 | - dprintk("lockd: next rebind in %lu jiffies\n", |
3379 | - host->h_nextrebind - jiffies); |
3380 | - } |
3381 | + nlm_rebind_host(host); |
3382 | } else { |
3383 | unsigned long increment = nlmsvc_timeout; |
3384 | struct rpc_timeout timeparms = { |
3385 | @@ -483,13 +478,20 @@ nlm_bind_host(struct nlm_host *host) |
3386 | return clnt; |
3387 | } |
3388 | |
3389 | -/* |
3390 | - * Force a portmap lookup of the remote lockd port |
3391 | +/** |
3392 | + * nlm_rebind_host - If needed, force a portmap lookup of the peer's lockd port |
3393 | + * @host: NLM host handle for peer |
3394 | + * |
3395 | + * This is not needed when using a connection-oriented protocol, such as TCP. |
3396 | + * The existing autobind mechanism is sufficient to force a rebind when |
3397 | + * required, e.g. on connection state transitions. |
3398 | */ |
3399 | void |
3400 | nlm_rebind_host(struct nlm_host *host) |
3401 | { |
3402 | - dprintk("lockd: rebind host %s\n", host->h_name); |
3403 | + if (host->h_proto != IPPROTO_UDP) |
3404 | + return; |
3405 | + |
3406 | if (host->h_rpcclnt && time_after_eq(jiffies, host->h_nextrebind)) { |
3407 | rpc_force_rebind(host->h_rpcclnt); |
3408 | host->h_nextrebind = jiffies + NLM_HOST_REBIND; |
3409 | diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c |
3410 | index 851274b25d394..6c0035761d170 100644 |
3411 | --- a/fs/nfs/inode.c |
3412 | +++ b/fs/nfs/inode.c |
3413 | @@ -1995,7 +1995,7 @@ static int nfsiod_start(void) |
3414 | { |
3415 | struct workqueue_struct *wq; |
3416 | dprintk("RPC: creating workqueue nfsiod\n"); |
3417 | - wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM, 0); |
3418 | + wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM | WQ_UNBOUND, 0); |
3419 | if (wq == NULL) |
3420 | return -ENOMEM; |
3421 | nfsiod_workqueue = wq; |
3422 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c |
3423 | index 4e2f18c26535d..2abdb2070c879 100644 |
3424 | --- a/fs/nfs/nfs4proc.c |
3425 | +++ b/fs/nfs/nfs4proc.c |
3426 | @@ -4334,12 +4334,12 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, |
3427 | u64 cookie, struct page **pages, unsigned int count, int plus) |
3428 | { |
3429 | struct inode *dir = d_inode(dentry); |
3430 | + struct nfs_server *server = NFS_SERVER(dir); |
3431 | struct nfs4_readdir_arg args = { |
3432 | .fh = NFS_FH(dir), |
3433 | .pages = pages, |
3434 | .pgbase = 0, |
3435 | .count = count, |
3436 | - .bitmask = NFS_SERVER(d_inode(dentry))->attr_bitmask, |
3437 | .plus = plus, |
3438 | }; |
3439 | struct nfs4_readdir_res res; |
3440 | @@ -4354,9 +4354,15 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, |
3441 | dprintk("%s: dentry = %pd2, cookie = %Lu\n", __func__, |
3442 | dentry, |
3443 | (unsigned long long)cookie); |
3444 | + if (!(server->caps & NFS_CAP_SECURITY_LABEL)) |
3445 | + args.bitmask = server->attr_bitmask_nl; |
3446 | + else |
3447 | + args.bitmask = server->attr_bitmask; |
3448 | + |
3449 | nfs4_setup_readdir(cookie, NFS_I(dir)->cookieverf, dentry, &args); |
3450 | res.pgbase = args.pgbase; |
3451 | - status = nfs4_call_sync(NFS_SERVER(dir)->client, NFS_SERVER(dir), &msg, &args.seq_args, &res.seq_res, 0); |
3452 | + status = nfs4_call_sync(server->client, server, &msg, &args.seq_args, |
3453 | + &res.seq_res, 0); |
3454 | if (status >= 0) { |
3455 | memcpy(NFS_I(dir)->cookieverf, res.verifier.data, NFS4_VERIFIER_SIZE); |
3456 | status += args.pgbase; |
3457 | diff --git a/fs/nfs_common/grace.c b/fs/nfs_common/grace.c |
3458 | index 77d136ac89099..c21fca0dcba74 100644 |
3459 | --- a/fs/nfs_common/grace.c |
3460 | +++ b/fs/nfs_common/grace.c |
3461 | @@ -75,10 +75,14 @@ __state_in_grace(struct net *net, bool open) |
3462 | if (!open) |
3463 | return !list_empty(grace_list); |
3464 | |
3465 | + spin_lock(&grace_lock); |
3466 | list_for_each_entry(lm, grace_list, list) { |
3467 | - if (lm->block_opens) |
3468 | + if (lm->block_opens) { |
3469 | + spin_unlock(&grace_lock); |
3470 | return true; |
3471 | + } |
3472 | } |
3473 | + spin_unlock(&grace_lock); |
3474 | return false; |
3475 | } |
3476 | |
3477 | diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c |
3478 | index 60291d10f8e4a..6bb3f3a98d7de 100644 |
3479 | --- a/fs/nfsd/nfssvc.c |
3480 | +++ b/fs/nfsd/nfssvc.c |
3481 | @@ -393,8 +393,7 @@ static void nfsd_last_thread(struct svc_serv *serv, struct net *net) |
3482 | return; |
3483 | |
3484 | nfsd_shutdown_net(net); |
3485 | - printk(KERN_WARNING "nfsd: last server has exited, flushing export " |
3486 | - "cache\n"); |
3487 | + pr_info("nfsd: last server has exited, flushing export cache\n"); |
3488 | nfsd_export_flush(net); |
3489 | } |
3490 | |
3491 | diff --git a/include/linux/seq_buf.h b/include/linux/seq_buf.h |
3492 | index fb7eb9ccb1cd4..d4c3c9bab5826 100644 |
3493 | --- a/include/linux/seq_buf.h |
3494 | +++ b/include/linux/seq_buf.h |
3495 | @@ -29,7 +29,7 @@ static inline void seq_buf_clear(struct seq_buf *s) |
3496 | } |
3497 | |
3498 | static inline void |
3499 | -seq_buf_init(struct seq_buf *s, unsigned char *buf, unsigned int size) |
3500 | +seq_buf_init(struct seq_buf *s, char *buf, unsigned int size) |
3501 | { |
3502 | s->buffer = buf; |
3503 | s->size = size; |
3504 | diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h |
3505 | index a5da60b24d83e..15bab51a3aef1 100644 |
3506 | --- a/include/linux/sunrpc/xprt.h |
3507 | +++ b/include/linux/sunrpc/xprt.h |
3508 | @@ -310,6 +310,7 @@ struct xprt_class { |
3509 | struct rpc_xprt * (*setup)(struct xprt_create *); |
3510 | struct module *owner; |
3511 | char name[32]; |
3512 | + const char * netid[]; |
3513 | }; |
3514 | |
3515 | /* |
3516 | diff --git a/include/linux/trace_seq.h b/include/linux/trace_seq.h |
3517 | index cfaf5a1d4bad7..f5be2716b01c6 100644 |
3518 | --- a/include/linux/trace_seq.h |
3519 | +++ b/include/linux/trace_seq.h |
3520 | @@ -11,7 +11,7 @@ |
3521 | */ |
3522 | |
3523 | struct trace_seq { |
3524 | - unsigned char buffer[PAGE_SIZE]; |
3525 | + char buffer[PAGE_SIZE]; |
3526 | struct seq_buf seq; |
3527 | int full; |
3528 | }; |
3529 | @@ -50,7 +50,7 @@ static inline int trace_seq_used(struct trace_seq *s) |
3530 | * that is about to be written to and then return the result |
3531 | * of that write. |
3532 | */ |
3533 | -static inline unsigned char * |
3534 | +static inline char * |
3535 | trace_seq_buffer_ptr(struct trace_seq *s) |
3536 | { |
3537 | return s->buffer + seq_buf_used(&s->seq); |
3538 | diff --git a/kernel/cpu.c b/kernel/cpu.c |
3539 | index a542b5e583503..e005209f279e1 100644 |
3540 | --- a/kernel/cpu.c |
3541 | +++ b/kernel/cpu.c |
3542 | @@ -815,6 +815,10 @@ void __unregister_cpu_notifier(struct notifier_block *nb) |
3543 | EXPORT_SYMBOL(__unregister_cpu_notifier); |
3544 | |
3545 | #ifdef CONFIG_HOTPLUG_CPU |
3546 | +#ifndef arch_clear_mm_cpumask_cpu |
3547 | +#define arch_clear_mm_cpumask_cpu(cpu, mm) cpumask_clear_cpu(cpu, mm_cpumask(mm)) |
3548 | +#endif |
3549 | + |
3550 | /** |
3551 | * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU |
3552 | * @cpu: a CPU id |
3553 | @@ -850,7 +854,7 @@ void clear_tasks_mm_cpumask(int cpu) |
3554 | t = find_lock_task_mm(p); |
3555 | if (!t) |
3556 | continue; |
3557 | - cpumask_clear_cpu(cpu, mm_cpumask(t->mm)); |
3558 | + arch_clear_mm_cpumask_cpu(cpu, t->mm); |
3559 | task_unlock(t); |
3560 | } |
3561 | rcu_read_unlock(); |
3562 | diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c |
3563 | index 1f5c48d1493c9..d01bf6a111cee 100644 |
3564 | --- a/net/bluetooth/hci_event.c |
3565 | +++ b/net/bluetooth/hci_event.c |
3566 | @@ -4350,6 +4350,11 @@ static void hci_phy_link_complete_evt(struct hci_dev *hdev, |
3567 | return; |
3568 | } |
3569 | |
3570 | + if (!hcon->amp_mgr) { |
3571 | + hci_dev_unlock(hdev); |
3572 | + return; |
3573 | + } |
3574 | + |
3575 | if (ev->status) { |
3576 | hci_conn_del(hcon); |
3577 | hci_dev_unlock(hdev); |
3578 | @@ -5141,20 +5146,18 @@ static void hci_le_direct_adv_report_evt(struct hci_dev *hdev, |
3579 | struct sk_buff *skb) |
3580 | { |
3581 | u8 num_reports = skb->data[0]; |
3582 | - void *ptr = &skb->data[1]; |
3583 | + struct hci_ev_le_direct_adv_info *ev = (void *)&skb->data[1]; |
3584 | |
3585 | - hci_dev_lock(hdev); |
3586 | + if (!num_reports || skb->len < num_reports * sizeof(*ev) + 1) |
3587 | + return; |
3588 | |
3589 | - while (num_reports--) { |
3590 | - struct hci_ev_le_direct_adv_info *ev = ptr; |
3591 | + hci_dev_lock(hdev); |
3592 | |
3593 | + for (; num_reports; num_reports--, ev++) |
3594 | process_adv_report(hdev, ev->evt_type, &ev->bdaddr, |
3595 | ev->bdaddr_type, &ev->direct_addr, |
3596 | ev->direct_addr_type, ev->rssi, NULL, 0); |
3597 | |
3598 | - ptr += sizeof(*ev); |
3599 | - } |
3600 | - |
3601 | hci_dev_unlock(hdev); |
3602 | } |
3603 | |
3604 | diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c |
3605 | index 5172caac645c7..6ac7ad4f3547f 100644 |
3606 | --- a/net/bridge/br_vlan.c |
3607 | +++ b/net/bridge/br_vlan.c |
3608 | @@ -238,8 +238,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags) |
3609 | } |
3610 | |
3611 | masterv = br_vlan_get_master(br, v->vid); |
3612 | - if (!masterv) |
3613 | + if (!masterv) { |
3614 | + err = -ENOMEM; |
3615 | goto out_filt; |
3616 | + } |
3617 | v->brvlan = masterv; |
3618 | v->stats = masterv->stats; |
3619 | } |
3620 | diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c |
3621 | index b730b994b1c79..b7909160692e3 100644 |
3622 | --- a/net/ipv4/tcp_output.c |
3623 | +++ b/net/ipv4/tcp_output.c |
3624 | @@ -1532,7 +1532,8 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited) |
3625 | * window, and remember whether we were cwnd-limited then. |
3626 | */ |
3627 | if (!before(tp->snd_una, tp->max_packets_seq) || |
3628 | - tp->packets_out > tp->max_packets_out) { |
3629 | + tp->packets_out > tp->max_packets_out || |
3630 | + is_cwnd_limited) { |
3631 | tp->max_packets_out = tp->packets_out; |
3632 | tp->max_packets_seq = tp->snd_nxt; |
3633 | tp->is_cwnd_limited = is_cwnd_limited; |
3634 | @@ -2259,6 +2260,10 @@ repair: |
3635 | break; |
3636 | } |
3637 | |
3638 | + is_cwnd_limited |= (tcp_packets_in_flight(tp) >= tp->snd_cwnd); |
3639 | + if (likely(sent_pkts || is_cwnd_limited)) |
3640 | + tcp_cwnd_validate(sk, is_cwnd_limited); |
3641 | + |
3642 | if (likely(sent_pkts)) { |
3643 | if (tcp_in_cwnd_reduction(sk)) |
3644 | tp->prr_out += sent_pkts; |
3645 | @@ -2266,8 +2271,6 @@ repair: |
3646 | /* Send one loss probe per tail loss episode. */ |
3647 | if (push_one != 2) |
3648 | tcp_schedule_loss_probe(sk); |
3649 | - is_cwnd_limited |= (tcp_packets_in_flight(tp) >= tp->snd_cwnd); |
3650 | - tcp_cwnd_validate(sk, is_cwnd_limited); |
3651 | return false; |
3652 | } |
3653 | return !tp->packets_out && tcp_send_head(sk); |
3654 | diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c |
3655 | index 7c409ba1ddc74..30a95a2ff196a 100644 |
3656 | --- a/net/mac80211/mesh_pathtbl.c |
3657 | +++ b/net/mac80211/mesh_pathtbl.c |
3658 | @@ -61,6 +61,7 @@ static struct mesh_table *mesh_table_alloc(void) |
3659 | INIT_HLIST_HEAD(&newtbl->known_gates); |
3660 | atomic_set(&newtbl->entries, 0); |
3661 | spin_lock_init(&newtbl->gates_lock); |
3662 | + rhashtable_init(&newtbl->rhead, &mesh_rht_params); |
3663 | |
3664 | return newtbl; |
3665 | } |
3666 | @@ -849,9 +850,6 @@ int mesh_pathtbl_init(struct ieee80211_sub_if_data *sdata) |
3667 | goto free_path; |
3668 | } |
3669 | |
3670 | - rhashtable_init(&tbl_path->rhead, &mesh_rht_params); |
3671 | - rhashtable_init(&tbl_mpp->rhead, &mesh_rht_params); |
3672 | - |
3673 | sdata->u.mesh.mesh_paths = tbl_path; |
3674 | sdata->u.mesh.mpp_paths = tbl_mpp; |
3675 | |
3676 | diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c |
3677 | index 1a8df242d26a1..9491fc81d50ad 100644 |
3678 | --- a/net/sunrpc/xprt.c |
3679 | +++ b/net/sunrpc/xprt.c |
3680 | @@ -143,31 +143,64 @@ out: |
3681 | } |
3682 | EXPORT_SYMBOL_GPL(xprt_unregister_transport); |
3683 | |
3684 | +static void |
3685 | +xprt_class_release(const struct xprt_class *t) |
3686 | +{ |
3687 | + module_put(t->owner); |
3688 | +} |
3689 | + |
3690 | +static const struct xprt_class * |
3691 | +xprt_class_find_by_netid_locked(const char *netid) |
3692 | +{ |
3693 | + const struct xprt_class *t; |
3694 | + unsigned int i; |
3695 | + |
3696 | + list_for_each_entry(t, &xprt_list, list) { |
3697 | + for (i = 0; t->netid[i][0] != '\0'; i++) { |
3698 | + if (strcmp(t->netid[i], netid) != 0) |
3699 | + continue; |
3700 | + if (!try_module_get(t->owner)) |
3701 | + continue; |
3702 | + return t; |
3703 | + } |
3704 | + } |
3705 | + return NULL; |
3706 | +} |
3707 | + |
3708 | +static const struct xprt_class * |
3709 | +xprt_class_find_by_netid(const char *netid) |
3710 | +{ |
3711 | + const struct xprt_class *t; |
3712 | + |
3713 | + spin_lock(&xprt_list_lock); |
3714 | + t = xprt_class_find_by_netid_locked(netid); |
3715 | + if (!t) { |
3716 | + spin_unlock(&xprt_list_lock); |
3717 | + request_module("rpc%s", netid); |
3718 | + spin_lock(&xprt_list_lock); |
3719 | + t = xprt_class_find_by_netid_locked(netid); |
3720 | + } |
3721 | + spin_unlock(&xprt_list_lock); |
3722 | + return t; |
3723 | +} |
3724 | + |
3725 | /** |
3726 | * xprt_load_transport - load a transport implementation |
3727 | - * @transport_name: transport to load |
3728 | + * @netid: transport to load |
3729 | * |
3730 | * Returns: |
3731 | * 0: transport successfully loaded |
3732 | * -ENOENT: transport module not available |
3733 | */ |
3734 | -int xprt_load_transport(const char *transport_name) |
3735 | +int xprt_load_transport(const char *netid) |
3736 | { |
3737 | - struct xprt_class *t; |
3738 | - int result; |
3739 | + const struct xprt_class *t; |
3740 | |
3741 | - result = 0; |
3742 | - spin_lock(&xprt_list_lock); |
3743 | - list_for_each_entry(t, &xprt_list, list) { |
3744 | - if (strcmp(t->name, transport_name) == 0) { |
3745 | - spin_unlock(&xprt_list_lock); |
3746 | - goto out; |
3747 | - } |
3748 | - } |
3749 | - spin_unlock(&xprt_list_lock); |
3750 | - result = request_module("xprt%s", transport_name); |
3751 | -out: |
3752 | - return result; |
3753 | + t = xprt_class_find_by_netid(netid); |
3754 | + if (!t) |
3755 | + return -ENOENT; |
3756 | + xprt_class_release(t); |
3757 | + return 0; |
3758 | } |
3759 | EXPORT_SYMBOL_GPL(xprt_load_transport); |
3760 | |
3761 | diff --git a/net/sunrpc/xprtrdma/module.c b/net/sunrpc/xprtrdma/module.c |
3762 | index 560712bd9fa2c..dd227de31a589 100644 |
3763 | --- a/net/sunrpc/xprtrdma/module.c |
3764 | +++ b/net/sunrpc/xprtrdma/module.c |
3765 | @@ -19,6 +19,7 @@ MODULE_DESCRIPTION("RPC/RDMA Transport"); |
3766 | MODULE_LICENSE("Dual BSD/GPL"); |
3767 | MODULE_ALIAS("svcrdma"); |
3768 | MODULE_ALIAS("xprtrdma"); |
3769 | +MODULE_ALIAS("rpcrdma6"); |
3770 | |
3771 | static void __exit rpc_rdma_cleanup(void) |
3772 | { |
3773 | diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c |
3774 | index fa324fe739466..3ea3bb64b6d5c 100644 |
3775 | --- a/net/sunrpc/xprtrdma/transport.c |
3776 | +++ b/net/sunrpc/xprtrdma/transport.c |
3777 | @@ -777,6 +777,7 @@ static struct xprt_class xprt_rdma = { |
3778 | .owner = THIS_MODULE, |
3779 | .ident = XPRT_TRANSPORT_RDMA, |
3780 | .setup = xprt_setup_rdma, |
3781 | + .netid = { "rdma", "rdma6", "" }, |
3782 | }; |
3783 | |
3784 | void xprt_rdma_cleanup(void) |
3785 | diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c |
3786 | index f3f05148922a1..bf20ea2606389 100644 |
3787 | --- a/net/sunrpc/xprtsock.c |
3788 | +++ b/net/sunrpc/xprtsock.c |
3789 | @@ -3147,6 +3147,7 @@ static struct xprt_class xs_local_transport = { |
3790 | .owner = THIS_MODULE, |
3791 | .ident = XPRT_TRANSPORT_LOCAL, |
3792 | .setup = xs_setup_local, |
3793 | + .netid = { "" }, |
3794 | }; |
3795 | |
3796 | static struct xprt_class xs_udp_transport = { |
3797 | @@ -3155,6 +3156,7 @@ static struct xprt_class xs_udp_transport = { |
3798 | .owner = THIS_MODULE, |
3799 | .ident = XPRT_TRANSPORT_UDP, |
3800 | .setup = xs_setup_udp, |
3801 | + .netid = { "udp", "udp6", "" }, |
3802 | }; |
3803 | |
3804 | static struct xprt_class xs_tcp_transport = { |
3805 | @@ -3163,6 +3165,7 @@ static struct xprt_class xs_tcp_transport = { |
3806 | .owner = THIS_MODULE, |
3807 | .ident = XPRT_TRANSPORT_TCP, |
3808 | .setup = xs_setup_tcp, |
3809 | + .netid = { "tcp", "tcp6", "" }, |
3810 | }; |
3811 | |
3812 | static struct xprt_class xs_bc_tcp_transport = { |
3813 | @@ -3171,6 +3174,7 @@ static struct xprt_class xs_bc_tcp_transport = { |
3814 | .owner = THIS_MODULE, |
3815 | .ident = XPRT_TRANSPORT_BC_TCP, |
3816 | .setup = xs_setup_bc_tcp, |
3817 | + .netid = { "" }, |
3818 | }; |
3819 | |
3820 | /** |
3821 | diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c |
3822 | index 5bd89f536720d..ab8bca39afa3f 100644 |
3823 | --- a/net/wireless/nl80211.c |
3824 | +++ b/net/wireless/nl80211.c |
3825 | @@ -10428,7 +10428,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info) |
3826 | struct net_device *dev = info->user_ptr[1]; |
3827 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
3828 | struct nlattr *tb[NUM_NL80211_REKEY_DATA]; |
3829 | - struct cfg80211_gtk_rekey_data rekey_data; |
3830 | + struct cfg80211_gtk_rekey_data rekey_data = {}; |
3831 | int err; |
3832 | |
3833 | if (!info->attrs[NL80211_ATTR_REKEY_DATA]) |
3834 | diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl |
3835 | index 9432387dc1789..c3b23244e64ff 100755 |
3836 | --- a/scripts/checkpatch.pl |
3837 | +++ b/scripts/checkpatch.pl |
3838 | @@ -3818,7 +3818,7 @@ sub process { |
3839 | $fix) { |
3840 | fix_delete_line($fixlinenr, $rawline); |
3841 | my $fixed_line = $rawline; |
3842 | - $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*){(.*)$/; |
3843 | + $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*)\{(.*)$/; |
3844 | my $line1 = $1; |
3845 | my $line2 = $2; |
3846 | fix_insert_line($fixlinenr, ltrim($line1)); |
3847 | diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c |
3848 | index 824097571467a..c2fb5198d5d56 100644 |
3849 | --- a/sound/core/oss/pcm_oss.c |
3850 | +++ b/sound/core/oss/pcm_oss.c |
3851 | @@ -719,6 +719,8 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream, |
3852 | |
3853 | oss_buffer_size = snd_pcm_plug_client_size(substream, |
3854 | snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, NULL)) * oss_frame_size; |
3855 | + if (!oss_buffer_size) |
3856 | + return -EINVAL; |
3857 | oss_buffer_size = rounddown_pow_of_two(oss_buffer_size); |
3858 | if (atomic_read(&substream->mmap_count)) { |
3859 | if (oss_buffer_size > runtime->oss.mmap_bytes) |
3860 | @@ -754,17 +756,21 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream, |
3861 | |
3862 | min_period_size = snd_pcm_plug_client_size(substream, |
3863 | snd_pcm_hw_param_value_min(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL)); |
3864 | - min_period_size *= oss_frame_size; |
3865 | - min_period_size = roundup_pow_of_two(min_period_size); |
3866 | - if (oss_period_size < min_period_size) |
3867 | - oss_period_size = min_period_size; |
3868 | + if (min_period_size) { |
3869 | + min_period_size *= oss_frame_size; |
3870 | + min_period_size = roundup_pow_of_two(min_period_size); |
3871 | + if (oss_period_size < min_period_size) |
3872 | + oss_period_size = min_period_size; |
3873 | + } |
3874 | |
3875 | max_period_size = snd_pcm_plug_client_size(substream, |
3876 | snd_pcm_hw_param_value_max(slave_params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, NULL)); |
3877 | - max_period_size *= oss_frame_size; |
3878 | - max_period_size = rounddown_pow_of_two(max_period_size); |
3879 | - if (oss_period_size > max_period_size) |
3880 | - oss_period_size = max_period_size; |
3881 | + if (max_period_size) { |
3882 | + max_period_size *= oss_frame_size; |
3883 | + max_period_size = rounddown_pow_of_two(max_period_size); |
3884 | + if (oss_period_size > max_period_size) |
3885 | + oss_period_size = max_period_size; |
3886 | + } |
3887 | |
3888 | oss_periods = oss_buffer_size / oss_period_size; |
3889 | |
3890 | @@ -2001,11 +2007,15 @@ static int snd_pcm_oss_set_subdivide(struct snd_pcm_oss_file *pcm_oss_file, int |
3891 | static int snd_pcm_oss_set_fragment1(struct snd_pcm_substream *substream, unsigned int val) |
3892 | { |
3893 | struct snd_pcm_runtime *runtime; |
3894 | + int fragshift; |
3895 | |
3896 | runtime = substream->runtime; |
3897 | if (runtime->oss.subdivision || runtime->oss.fragshift) |
3898 | return -EINVAL; |
3899 | - runtime->oss.fragshift = val & 0xffff; |
3900 | + fragshift = val & 0xffff; |
3901 | + if (fragshift >= 31) |
3902 | + return -EINVAL; |
3903 | + runtime->oss.fragshift = fragshift; |
3904 | runtime->oss.maxfrags = (val >> 16) & 0xffff; |
3905 | if (runtime->oss.fragshift < 4) /* < 16 */ |
3906 | runtime->oss.fragshift = 4; |
3907 | diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c |
3908 | index 28eb55bc46634..00dd37f10daff 100644 |
3909 | --- a/sound/soc/codecs/wm_adsp.c |
3910 | +++ b/sound/soc/codecs/wm_adsp.c |
3911 | @@ -1156,7 +1156,7 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, |
3912 | ctl_work = kzalloc(sizeof(*ctl_work), GFP_KERNEL); |
3913 | if (!ctl_work) { |
3914 | ret = -ENOMEM; |
3915 | - goto err_ctl_cache; |
3916 | + goto err_list_del; |
3917 | } |
3918 | |
3919 | ctl_work->dsp = dsp; |
3920 | @@ -1166,7 +1166,8 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, |
3921 | |
3922 | return 0; |
3923 | |
3924 | -err_ctl_cache: |
3925 | +err_list_del: |
3926 | + list_del(&ctl->list); |
3927 | kfree(ctl->cache); |
3928 | err_ctl_name: |
3929 | kfree(ctl->name); |
3930 | diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c |
3931 | index 0dc1ab48fcebe..6440729facaf0 100644 |
3932 | --- a/sound/soc/jz4740/jz4740-i2s.c |
3933 | +++ b/sound/soc/jz4740/jz4740-i2s.c |
3934 | @@ -315,10 +315,14 @@ static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, |
3935 | switch (clk_id) { |
3936 | case JZ4740_I2S_CLKSRC_EXT: |
3937 | parent = clk_get(NULL, "ext"); |
3938 | + if (IS_ERR(parent)) |
3939 | + return PTR_ERR(parent); |
3940 | clk_set_parent(i2s->clk_i2s, parent); |
3941 | break; |
3942 | case JZ4740_I2S_CLKSRC_PLL: |
3943 | parent = clk_get(NULL, "pll half"); |
3944 | + if (IS_ERR(parent)) |
3945 | + return PTR_ERR(parent); |
3946 | clk_set_parent(i2s->clk_i2s, parent); |
3947 | ret = clk_set_rate(i2s->clk_i2s, freq); |
3948 | break; |
3949 | diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c |
3950 | index b67d105b76e46..6c31a909845cd 100644 |
3951 | --- a/sound/soc/soc-pcm.c |
3952 | +++ b/sound/soc/soc-pcm.c |
3953 | @@ -2186,6 +2186,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd) |
3954 | case SNDRV_PCM_TRIGGER_START: |
3955 | case SNDRV_PCM_TRIGGER_RESUME: |
3956 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
3957 | + case SNDRV_PCM_TRIGGER_DRAIN: |
3958 | ret = dpcm_dai_trigger_fe_be(substream, cmd, true); |
3959 | break; |
3960 | case SNDRV_PCM_TRIGGER_STOP: |
3961 | @@ -2203,6 +2204,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd) |
3962 | case SNDRV_PCM_TRIGGER_START: |
3963 | case SNDRV_PCM_TRIGGER_RESUME: |
3964 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
3965 | + case SNDRV_PCM_TRIGGER_DRAIN: |
3966 | ret = dpcm_dai_trigger_fe_be(substream, cmd, false); |
3967 | break; |
3968 | case SNDRV_PCM_TRIGGER_STOP: |
3969 | diff --git a/sound/usb/clock.c b/sound/usb/clock.c |
3970 | index eb3396ffba4c4..70e74895b1136 100644 |
3971 | --- a/sound/usb/clock.c |
3972 | +++ b/sound/usb/clock.c |
3973 | @@ -327,6 +327,12 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, |
3974 | } |
3975 | |
3976 | crate = data[0] | (data[1] << 8) | (data[2] << 16); |
3977 | + if (!crate) { |
3978 | + dev_info(&dev->dev, "failed to read current rate; disabling the check\n"); |
3979 | + chip->sample_rate_read_error = 3; /* three strikes, see above */ |
3980 | + return 0; |
3981 | + } |
3982 | + |
3983 | if (crate != rate) { |
3984 | dev_warn(&dev->dev, "current rate %d is different from the runtime rate %d\n", crate, rate); |
3985 | // runtime->rate = crate; |
3986 | diff --git a/sound/usb/format.c b/sound/usb/format.c |
3987 | index eeb56d6fe8aa8..06190e3fd9194 100644 |
3988 | --- a/sound/usb/format.c |
3989 | +++ b/sound/usb/format.c |
3990 | @@ -52,6 +52,8 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip, |
3991 | case UAC_VERSION_1: |
3992 | default: { |
3993 | struct uac_format_type_i_discrete_descriptor *fmt = _fmt; |
3994 | + if (format >= 64) |
3995 | + return 0; /* invalid format */ |
3996 | sample_width = fmt->bBitResolution; |
3997 | sample_bytes = fmt->bSubframeSize; |
3998 | format = 1 << format; |
3999 | diff --git a/sound/usb/stream.c b/sound/usb/stream.c |
4000 | index 499f8def98de8..a50718fca613d 100644 |
4001 | --- a/sound/usb/stream.c |
4002 | +++ b/sound/usb/stream.c |
4003 | @@ -185,16 +185,16 @@ static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol, |
4004 | struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol); |
4005 | struct snd_usb_substream *subs = info->private_data; |
4006 | struct snd_pcm_chmap_elem *chmap = NULL; |
4007 | - int i; |
4008 | + int i = 0; |
4009 | |
4010 | - memset(ucontrol->value.integer.value, 0, |
4011 | - sizeof(ucontrol->value.integer.value)); |
4012 | if (subs->cur_audiofmt) |
4013 | chmap = subs->cur_audiofmt->chmap; |
4014 | if (chmap) { |
4015 | for (i = 0; i < chmap->channels; i++) |
4016 | ucontrol->value.integer.value[i] = chmap->map[i]; |
4017 | } |
4018 | + for (; i < subs->channels_max; i++) |
4019 | + ucontrol->value.integer.value[i] = 0; |
4020 | return 0; |
4021 | } |
4022 | |
4023 | diff --git a/tools/perf/util/parse-regs-options.c b/tools/perf/util/parse-regs-options.c |
4024 | index 646ecf736aadb..be2ab1091c2bb 100644 |
4025 | --- a/tools/perf/util/parse-regs-options.c |
4026 | +++ b/tools/perf/util/parse-regs-options.c |
4027 | @@ -40,7 +40,7 @@ parse_regs(const struct option *opt, const char *str, int unset) |
4028 | } |
4029 | fputc('\n', stderr); |
4030 | /* just printing available regs */ |
4031 | - return -1; |
4032 | + goto error; |
4033 | } |
4034 | for (r = sample_reg_masks; r->name; r++) { |
4035 | if (!strcasecmp(s, r->name)) |