Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0141-4.4.42-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2877 - (show annotations) (download)
Mon Mar 27 13:49:18 2017 UTC (7 years, 1 month ago) by niro
File size: 116129 byte(s)
linux-4.4.42
1 diff --git a/Makefile b/Makefile
2 index 855e71066174..b8a90f9a463d 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 4
8 -SUBLEVEL = 41
9 +SUBLEVEL = 42
10 EXTRAVERSION =
11 NAME = Blurry Fish Butt
12
13 diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
14 index a9977d6ee81a..169653586a9f 100644
15 --- a/arch/arm/boot/dts/r8a7794.dtsi
16 +++ b/arch/arm/boot/dts/r8a7794.dtsi
17 @@ -1023,7 +1023,7 @@
18 mstp7_clks: mstp7_clks@e615014c {
19 compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks";
20 reg = <0 0xe615014c 0 4>, <0 0xe61501c4 0 4>;
21 - clocks = <&mp_clk>, <&mp_clk>,
22 + clocks = <&mp_clk>, <&hp_clk>,
23 <&zs_clk>, <&p_clk>, <&p_clk>, <&zs_clk>,
24 <&zs_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>;
25 #clock-cells = <1>;
26 diff --git a/arch/arm/crypto/aes-ce-glue.c b/arch/arm/crypto/aes-ce-glue.c
27 index 593da7ffb449..679c589c4828 100644
28 --- a/arch/arm/crypto/aes-ce-glue.c
29 +++ b/arch/arm/crypto/aes-ce-glue.c
30 @@ -87,8 +87,13 @@ static int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
31 u32 *rki = ctx->key_enc + (i * kwords);
32 u32 *rko = rki + kwords;
33
34 +#ifndef CONFIG_CPU_BIG_ENDIAN
35 rko[0] = ror32(ce_aes_sub(rki[kwords - 1]), 8);
36 rko[0] = rko[0] ^ rki[0] ^ rcon[i];
37 +#else
38 + rko[0] = rol32(ce_aes_sub(rki[kwords - 1]), 8);
39 + rko[0] = rko[0] ^ rki[0] ^ (rcon[i] << 24);
40 +#endif
41 rko[1] = rko[0] ^ rki[1];
42 rko[2] = rko[1] ^ rki[2];
43 rko[3] = rko[2] ^ rki[3];
44 diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
45 index 676997895e13..f5f81a107309 100644
46 --- a/arch/arm/mach-davinci/da850.c
47 +++ b/arch/arm/mach-davinci/da850.c
48 @@ -298,6 +298,16 @@ static struct clk emac_clk = {
49 .gpsc = 1,
50 };
51
52 +/*
53 + * In order to avoid adding the emac_clk to the clock lookup table twice (and
54 + * screwing up the linked list in the process) create a separate clock for
55 + * mdio inheriting the rate from emac_clk.
56 + */
57 +static struct clk mdio_clk = {
58 + .name = "mdio",
59 + .parent = &emac_clk,
60 +};
61 +
62 static struct clk mcasp_clk = {
63 .name = "mcasp",
64 .parent = &pll0_sysclk2,
65 @@ -462,7 +472,7 @@ static struct clk_lookup da850_clks[] = {
66 CLK(NULL, "arm", &arm_clk),
67 CLK(NULL, "rmii", &rmii_clk),
68 CLK("davinci_emac.1", NULL, &emac_clk),
69 - CLK("davinci_mdio.0", "fck", &emac_clk),
70 + CLK("davinci_mdio.0", "fck", &mdio_clk),
71 CLK("davinci-mcasp.0", NULL, &mcasp_clk),
72 CLK("da8xx_lcdc.0", "fck", &lcdc_clk),
73 CLK("da830-mmc.0", NULL, &mmcsd0_clk),
74 diff --git a/arch/arm64/crypto/aes-ce-ccm-core.S b/arch/arm64/crypto/aes-ce-ccm-core.S
75 index a2a7fbcacc14..3363560c79b7 100644
76 --- a/arch/arm64/crypto/aes-ce-ccm-core.S
77 +++ b/arch/arm64/crypto/aes-ce-ccm-core.S
78 @@ -9,6 +9,7 @@
79 */
80
81 #include <linux/linkage.h>
82 +#include <asm/assembler.h>
83
84 .text
85 .arch armv8-a+crypto
86 @@ -19,7 +20,7 @@
87 */
88 ENTRY(ce_aes_ccm_auth_data)
89 ldr w8, [x3] /* leftover from prev round? */
90 - ld1 {v0.2d}, [x0] /* load mac */
91 + ld1 {v0.16b}, [x0] /* load mac */
92 cbz w8, 1f
93 sub w8, w8, #16
94 eor v1.16b, v1.16b, v1.16b
95 @@ -31,7 +32,7 @@ ENTRY(ce_aes_ccm_auth_data)
96 beq 8f /* out of input? */
97 cbnz w8, 0b
98 eor v0.16b, v0.16b, v1.16b
99 -1: ld1 {v3.2d}, [x4] /* load first round key */
100 +1: ld1 {v3.16b}, [x4] /* load first round key */
101 prfm pldl1strm, [x1]
102 cmp w5, #12 /* which key size? */
103 add x6, x4, #16
104 @@ -41,17 +42,17 @@ ENTRY(ce_aes_ccm_auth_data)
105 mov v5.16b, v3.16b
106 b 4f
107 2: mov v4.16b, v3.16b
108 - ld1 {v5.2d}, [x6], #16 /* load 2nd round key */
109 + ld1 {v5.16b}, [x6], #16 /* load 2nd round key */
110 3: aese v0.16b, v4.16b
111 aesmc v0.16b, v0.16b
112 -4: ld1 {v3.2d}, [x6], #16 /* load next round key */
113 +4: ld1 {v3.16b}, [x6], #16 /* load next round key */
114 aese v0.16b, v5.16b
115 aesmc v0.16b, v0.16b
116 -5: ld1 {v4.2d}, [x6], #16 /* load next round key */
117 +5: ld1 {v4.16b}, [x6], #16 /* load next round key */
118 subs w7, w7, #3
119 aese v0.16b, v3.16b
120 aesmc v0.16b, v0.16b
121 - ld1 {v5.2d}, [x6], #16 /* load next round key */
122 + ld1 {v5.16b}, [x6], #16 /* load next round key */
123 bpl 3b
124 aese v0.16b, v4.16b
125 subs w2, w2, #16 /* last data? */
126 @@ -60,7 +61,7 @@ ENTRY(ce_aes_ccm_auth_data)
127 ld1 {v1.16b}, [x1], #16 /* load next input block */
128 eor v0.16b, v0.16b, v1.16b /* xor with mac */
129 bne 1b
130 -6: st1 {v0.2d}, [x0] /* store mac */
131 +6: st1 {v0.16b}, [x0] /* store mac */
132 beq 10f
133 adds w2, w2, #16
134 beq 10f
135 @@ -79,7 +80,7 @@ ENTRY(ce_aes_ccm_auth_data)
136 adds w7, w7, #1
137 bne 9b
138 eor v0.16b, v0.16b, v1.16b
139 - st1 {v0.2d}, [x0]
140 + st1 {v0.16b}, [x0]
141 10: str w8, [x3]
142 ret
143 ENDPROC(ce_aes_ccm_auth_data)
144 @@ -89,27 +90,27 @@ ENDPROC(ce_aes_ccm_auth_data)
145 * u32 rounds);
146 */
147 ENTRY(ce_aes_ccm_final)
148 - ld1 {v3.2d}, [x2], #16 /* load first round key */
149 - ld1 {v0.2d}, [x0] /* load mac */
150 + ld1 {v3.16b}, [x2], #16 /* load first round key */
151 + ld1 {v0.16b}, [x0] /* load mac */
152 cmp w3, #12 /* which key size? */
153 sub w3, w3, #2 /* modified # of rounds */
154 - ld1 {v1.2d}, [x1] /* load 1st ctriv */
155 + ld1 {v1.16b}, [x1] /* load 1st ctriv */
156 bmi 0f
157 bne 3f
158 mov v5.16b, v3.16b
159 b 2f
160 0: mov v4.16b, v3.16b
161 -1: ld1 {v5.2d}, [x2], #16 /* load next round key */
162 +1: ld1 {v5.16b}, [x2], #16 /* load next round key */
163 aese v0.16b, v4.16b
164 aesmc v0.16b, v0.16b
165 aese v1.16b, v4.16b
166 aesmc v1.16b, v1.16b
167 -2: ld1 {v3.2d}, [x2], #16 /* load next round key */
168 +2: ld1 {v3.16b}, [x2], #16 /* load next round key */
169 aese v0.16b, v5.16b
170 aesmc v0.16b, v0.16b
171 aese v1.16b, v5.16b
172 aesmc v1.16b, v1.16b
173 -3: ld1 {v4.2d}, [x2], #16 /* load next round key */
174 +3: ld1 {v4.16b}, [x2], #16 /* load next round key */
175 subs w3, w3, #3
176 aese v0.16b, v3.16b
177 aesmc v0.16b, v0.16b
178 @@ -120,47 +121,47 @@ ENTRY(ce_aes_ccm_final)
179 aese v1.16b, v4.16b
180 /* final round key cancels out */
181 eor v0.16b, v0.16b, v1.16b /* en-/decrypt the mac */
182 - st1 {v0.2d}, [x0] /* store result */
183 + st1 {v0.16b}, [x0] /* store result */
184 ret
185 ENDPROC(ce_aes_ccm_final)
186
187 .macro aes_ccm_do_crypt,enc
188 ldr x8, [x6, #8] /* load lower ctr */
189 - ld1 {v0.2d}, [x5] /* load mac */
190 - rev x8, x8 /* keep swabbed ctr in reg */
191 + ld1 {v0.16b}, [x5] /* load mac */
192 +CPU_LE( rev x8, x8 ) /* keep swabbed ctr in reg */
193 0: /* outer loop */
194 - ld1 {v1.1d}, [x6] /* load upper ctr */
195 + ld1 {v1.8b}, [x6] /* load upper ctr */
196 prfm pldl1strm, [x1]
197 add x8, x8, #1
198 rev x9, x8
199 cmp w4, #12 /* which key size? */
200 sub w7, w4, #2 /* get modified # of rounds */
201 ins v1.d[1], x9 /* no carry in lower ctr */
202 - ld1 {v3.2d}, [x3] /* load first round key */
203 + ld1 {v3.16b}, [x3] /* load first round key */
204 add x10, x3, #16
205 bmi 1f
206 bne 4f
207 mov v5.16b, v3.16b
208 b 3f
209 1: mov v4.16b, v3.16b
210 - ld1 {v5.2d}, [x10], #16 /* load 2nd round key */
211 + ld1 {v5.16b}, [x10], #16 /* load 2nd round key */
212 2: /* inner loop: 3 rounds, 2x interleaved */
213 aese v0.16b, v4.16b
214 aesmc v0.16b, v0.16b
215 aese v1.16b, v4.16b
216 aesmc v1.16b, v1.16b
217 -3: ld1 {v3.2d}, [x10], #16 /* load next round key */
218 +3: ld1 {v3.16b}, [x10], #16 /* load next round key */
219 aese v0.16b, v5.16b
220 aesmc v0.16b, v0.16b
221 aese v1.16b, v5.16b
222 aesmc v1.16b, v1.16b
223 -4: ld1 {v4.2d}, [x10], #16 /* load next round key */
224 +4: ld1 {v4.16b}, [x10], #16 /* load next round key */
225 subs w7, w7, #3
226 aese v0.16b, v3.16b
227 aesmc v0.16b, v0.16b
228 aese v1.16b, v3.16b
229 aesmc v1.16b, v1.16b
230 - ld1 {v5.2d}, [x10], #16 /* load next round key */
231 + ld1 {v5.16b}, [x10], #16 /* load next round key */
232 bpl 2b
233 aese v0.16b, v4.16b
234 aese v1.16b, v4.16b
235 @@ -177,14 +178,14 @@ ENDPROC(ce_aes_ccm_final)
236 eor v0.16b, v0.16b, v2.16b /* xor mac with pt ^ rk[last] */
237 st1 {v1.16b}, [x0], #16 /* write output block */
238 bne 0b
239 - rev x8, x8
240 - st1 {v0.2d}, [x5] /* store mac */
241 +CPU_LE( rev x8, x8 )
242 + st1 {v0.16b}, [x5] /* store mac */
243 str x8, [x6, #8] /* store lsb end of ctr (BE) */
244 5: ret
245
246 6: eor v0.16b, v0.16b, v5.16b /* final round mac */
247 eor v1.16b, v1.16b, v5.16b /* final round enc */
248 - st1 {v0.2d}, [x5] /* store mac */
249 + st1 {v0.16b}, [x5] /* store mac */
250 add w2, w2, #16 /* process partial tail block */
251 7: ldrb w9, [x1], #1 /* get 1 byte of input */
252 umov w6, v1.b[0] /* get top crypted ctr byte */
253 diff --git a/arch/arm64/crypto/aes-ce-cipher.c b/arch/arm64/crypto/aes-ce-cipher.c
254 index f7bd9bf0bbb3..50d9fe11d0c8 100644
255 --- a/arch/arm64/crypto/aes-ce-cipher.c
256 +++ b/arch/arm64/crypto/aes-ce-cipher.c
257 @@ -47,24 +47,24 @@ static void aes_cipher_encrypt(struct crypto_tfm *tfm, u8 dst[], u8 const src[])
258 kernel_neon_begin_partial(4);
259
260 __asm__(" ld1 {v0.16b}, %[in] ;"
261 - " ld1 {v1.2d}, [%[key]], #16 ;"
262 + " ld1 {v1.16b}, [%[key]], #16 ;"
263 " cmp %w[rounds], #10 ;"
264 " bmi 0f ;"
265 " bne 3f ;"
266 " mov v3.16b, v1.16b ;"
267 " b 2f ;"
268 "0: mov v2.16b, v1.16b ;"
269 - " ld1 {v3.2d}, [%[key]], #16 ;"
270 + " ld1 {v3.16b}, [%[key]], #16 ;"
271 "1: aese v0.16b, v2.16b ;"
272 " aesmc v0.16b, v0.16b ;"
273 - "2: ld1 {v1.2d}, [%[key]], #16 ;"
274 + "2: ld1 {v1.16b}, [%[key]], #16 ;"
275 " aese v0.16b, v3.16b ;"
276 " aesmc v0.16b, v0.16b ;"
277 - "3: ld1 {v2.2d}, [%[key]], #16 ;"
278 + "3: ld1 {v2.16b}, [%[key]], #16 ;"
279 " subs %w[rounds], %w[rounds], #3 ;"
280 " aese v0.16b, v1.16b ;"
281 " aesmc v0.16b, v0.16b ;"
282 - " ld1 {v3.2d}, [%[key]], #16 ;"
283 + " ld1 {v3.16b}, [%[key]], #16 ;"
284 " bpl 1b ;"
285 " aese v0.16b, v2.16b ;"
286 " eor v0.16b, v0.16b, v3.16b ;"
287 @@ -92,24 +92,24 @@ static void aes_cipher_decrypt(struct crypto_tfm *tfm, u8 dst[], u8 const src[])
288 kernel_neon_begin_partial(4);
289
290 __asm__(" ld1 {v0.16b}, %[in] ;"
291 - " ld1 {v1.2d}, [%[key]], #16 ;"
292 + " ld1 {v1.16b}, [%[key]], #16 ;"
293 " cmp %w[rounds], #10 ;"
294 " bmi 0f ;"
295 " bne 3f ;"
296 " mov v3.16b, v1.16b ;"
297 " b 2f ;"
298 "0: mov v2.16b, v1.16b ;"
299 - " ld1 {v3.2d}, [%[key]], #16 ;"
300 + " ld1 {v3.16b}, [%[key]], #16 ;"
301 "1: aesd v0.16b, v2.16b ;"
302 " aesimc v0.16b, v0.16b ;"
303 - "2: ld1 {v1.2d}, [%[key]], #16 ;"
304 + "2: ld1 {v1.16b}, [%[key]], #16 ;"
305 " aesd v0.16b, v3.16b ;"
306 " aesimc v0.16b, v0.16b ;"
307 - "3: ld1 {v2.2d}, [%[key]], #16 ;"
308 + "3: ld1 {v2.16b}, [%[key]], #16 ;"
309 " subs %w[rounds], %w[rounds], #3 ;"
310 " aesd v0.16b, v1.16b ;"
311 " aesimc v0.16b, v0.16b ;"
312 - " ld1 {v3.2d}, [%[key]], #16 ;"
313 + " ld1 {v3.16b}, [%[key]], #16 ;"
314 " bpl 1b ;"
315 " aesd v0.16b, v2.16b ;"
316 " eor v0.16b, v0.16b, v3.16b ;"
317 @@ -173,7 +173,12 @@ int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
318 u32 *rki = ctx->key_enc + (i * kwords);
319 u32 *rko = rki + kwords;
320
321 +#ifndef CONFIG_CPU_BIG_ENDIAN
322 rko[0] = ror32(aes_sub(rki[kwords - 1]), 8) ^ rcon[i] ^ rki[0];
323 +#else
324 + rko[0] = rol32(aes_sub(rki[kwords - 1]), 8) ^ (rcon[i] << 24) ^
325 + rki[0];
326 +#endif
327 rko[1] = rko[0] ^ rki[1];
328 rko[2] = rko[1] ^ rki[2];
329 rko[3] = rko[2] ^ rki[3];
330 diff --git a/arch/arm64/crypto/aes-ce.S b/arch/arm64/crypto/aes-ce.S
331 index 78f3cfe92c08..b46093d567e5 100644
332 --- a/arch/arm64/crypto/aes-ce.S
333 +++ b/arch/arm64/crypto/aes-ce.S
334 @@ -10,6 +10,7 @@
335 */
336
337 #include <linux/linkage.h>
338 +#include <asm/assembler.h>
339
340 #define AES_ENTRY(func) ENTRY(ce_ ## func)
341 #define AES_ENDPROC(func) ENDPROC(ce_ ## func)
342 diff --git a/arch/arm64/crypto/aes-modes.S b/arch/arm64/crypto/aes-modes.S
343 index f6e372c528eb..c53dbeae79f2 100644
344 --- a/arch/arm64/crypto/aes-modes.S
345 +++ b/arch/arm64/crypto/aes-modes.S
346 @@ -386,7 +386,8 @@ AES_ENDPROC(aes_ctr_encrypt)
347 .endm
348
349 .Lxts_mul_x:
350 - .word 1, 0, 0x87, 0
351 +CPU_LE( .quad 1, 0x87 )
352 +CPU_BE( .quad 0x87, 1 )
353
354 AES_ENTRY(aes_xts_encrypt)
355 FRAME_PUSH
356 diff --git a/arch/arm64/crypto/aes-neon.S b/arch/arm64/crypto/aes-neon.S
357 index b93170e1cc93..85f07ead7c5c 100644
358 --- a/arch/arm64/crypto/aes-neon.S
359 +++ b/arch/arm64/crypto/aes-neon.S
360 @@ -9,6 +9,7 @@
361 */
362
363 #include <linux/linkage.h>
364 +#include <asm/assembler.h>
365
366 #define AES_ENTRY(func) ENTRY(neon_ ## func)
367 #define AES_ENDPROC(func) ENDPROC(neon_ ## func)
368 @@ -83,13 +84,13 @@
369 .endm
370
371 .macro do_block, enc, in, rounds, rk, rkp, i
372 - ld1 {v15.16b}, [\rk]
373 + ld1 {v15.4s}, [\rk]
374 add \rkp, \rk, #16
375 mov \i, \rounds
376 1111: eor \in\().16b, \in\().16b, v15.16b /* ^round key */
377 tbl \in\().16b, {\in\().16b}, v13.16b /* ShiftRows */
378 sub_bytes \in
379 - ld1 {v15.16b}, [\rkp], #16
380 + ld1 {v15.4s}, [\rkp], #16
381 subs \i, \i, #1
382 beq 2222f
383 .if \enc == 1
384 @@ -229,7 +230,7 @@
385 .endm
386
387 .macro do_block_2x, enc, in0, in1 rounds, rk, rkp, i
388 - ld1 {v15.16b}, [\rk]
389 + ld1 {v15.4s}, [\rk]
390 add \rkp, \rk, #16
391 mov \i, \rounds
392 1111: eor \in0\().16b, \in0\().16b, v15.16b /* ^round key */
393 @@ -237,7 +238,7 @@
394 sub_bytes_2x \in0, \in1
395 tbl \in0\().16b, {\in0\().16b}, v13.16b /* ShiftRows */
396 tbl \in1\().16b, {\in1\().16b}, v13.16b /* ShiftRows */
397 - ld1 {v15.16b}, [\rkp], #16
398 + ld1 {v15.4s}, [\rkp], #16
399 subs \i, \i, #1
400 beq 2222f
401 .if \enc == 1
402 @@ -254,7 +255,7 @@
403 .endm
404
405 .macro do_block_4x, enc, in0, in1, in2, in3, rounds, rk, rkp, i
406 - ld1 {v15.16b}, [\rk]
407 + ld1 {v15.4s}, [\rk]
408 add \rkp, \rk, #16
409 mov \i, \rounds
410 1111: eor \in0\().16b, \in0\().16b, v15.16b /* ^round key */
411 @@ -266,7 +267,7 @@
412 tbl \in1\().16b, {\in1\().16b}, v13.16b /* ShiftRows */
413 tbl \in2\().16b, {\in2\().16b}, v13.16b /* ShiftRows */
414 tbl \in3\().16b, {\in3\().16b}, v13.16b /* ShiftRows */
415 - ld1 {v15.16b}, [\rkp], #16
416 + ld1 {v15.4s}, [\rkp], #16
417 subs \i, \i, #1
418 beq 2222f
419 .if \enc == 1
420 @@ -306,12 +307,16 @@
421 .text
422 .align 4
423 .LForward_ShiftRows:
424 - .byte 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3
425 - .byte 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb
426 +CPU_LE( .byte 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3 )
427 +CPU_LE( .byte 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb )
428 +CPU_BE( .byte 0xb, 0x6, 0x1, 0xc, 0x7, 0x2, 0xd, 0x8 )
429 +CPU_BE( .byte 0x3, 0xe, 0x9, 0x4, 0xf, 0xa, 0x5, 0x0 )
430
431 .LReverse_ShiftRows:
432 - .byte 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb
433 - .byte 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3
434 +CPU_LE( .byte 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb )
435 +CPU_LE( .byte 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3 )
436 +CPU_BE( .byte 0x3, 0x6, 0x9, 0xc, 0xf, 0x2, 0x5, 0x8 )
437 +CPU_BE( .byte 0xb, 0xe, 0x1, 0x4, 0x7, 0xa, 0xd, 0x0 )
438
439 .LForward_Sbox:
440 .byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
441 diff --git a/arch/arm64/crypto/ghash-ce-core.S b/arch/arm64/crypto/ghash-ce-core.S
442 index dc457015884e..f0bb9f0b524f 100644
443 --- a/arch/arm64/crypto/ghash-ce-core.S
444 +++ b/arch/arm64/crypto/ghash-ce-core.S
445 @@ -29,8 +29,8 @@
446 * struct ghash_key const *k, const char *head)
447 */
448 ENTRY(pmull_ghash_update)
449 - ld1 {SHASH.16b}, [x3]
450 - ld1 {XL.16b}, [x1]
451 + ld1 {SHASH.2d}, [x3]
452 + ld1 {XL.2d}, [x1]
453 movi MASK.16b, #0xe1
454 ext SHASH2.16b, SHASH.16b, SHASH.16b, #8
455 shl MASK.2d, MASK.2d, #57
456 @@ -74,6 +74,6 @@ CPU_LE( rev64 T1.16b, T1.16b )
457
458 cbnz w0, 0b
459
460 - st1 {XL.16b}, [x1]
461 + st1 {XL.2d}, [x1]
462 ret
463 ENDPROC(pmull_ghash_update)
464 diff --git a/arch/arm64/crypto/sha1-ce-core.S b/arch/arm64/crypto/sha1-ce-core.S
465 index 033aae6d732a..c98e7e849f06 100644
466 --- a/arch/arm64/crypto/sha1-ce-core.S
467 +++ b/arch/arm64/crypto/sha1-ce-core.S
468 @@ -78,7 +78,7 @@ ENTRY(sha1_ce_transform)
469 ld1r {k3.4s}, [x6]
470
471 /* load state */
472 - ldr dga, [x0]
473 + ld1 {dgav.4s}, [x0]
474 ldr dgb, [x0, #16]
475
476 /* load sha1_ce_state::finalize */
477 @@ -144,7 +144,7 @@ CPU_LE( rev32 v11.16b, v11.16b )
478 b 1b
479
480 /* store new state */
481 -3: str dga, [x0]
482 +3: st1 {dgav.4s}, [x0]
483 str dgb, [x0, #16]
484 ret
485 ENDPROC(sha1_ce_transform)
486 diff --git a/arch/arm64/crypto/sha2-ce-core.S b/arch/arm64/crypto/sha2-ce-core.S
487 index 5df9d9d470ad..01cfee066837 100644
488 --- a/arch/arm64/crypto/sha2-ce-core.S
489 +++ b/arch/arm64/crypto/sha2-ce-core.S
490 @@ -85,7 +85,7 @@ ENTRY(sha2_ce_transform)
491 ld1 {v12.4s-v15.4s}, [x8]
492
493 /* load state */
494 - ldp dga, dgb, [x0]
495 + ld1 {dgav.4s, dgbv.4s}, [x0]
496
497 /* load sha256_ce_state::finalize */
498 ldr w4, [x0, #:lo12:sha256_ce_offsetof_finalize]
499 @@ -148,6 +148,6 @@ CPU_LE( rev32 v19.16b, v19.16b )
500 b 1b
501
502 /* store new state */
503 -3: stp dga, dgb, [x0]
504 +3: st1 {dgav.4s, dgbv.4s}, [x0]
505 ret
506 ENDPROC(sha2_ce_transform)
507 diff --git a/arch/cris/boot/rescue/Makefile b/arch/cris/boot/rescue/Makefile
508 index 52bd0bd1dd22..d98edbb30a18 100644
509 --- a/arch/cris/boot/rescue/Makefile
510 +++ b/arch/cris/boot/rescue/Makefile
511 @@ -10,6 +10,9 @@
512
513 asflags-y += $(LINUXINCLUDE)
514 ccflags-y += -O2 $(LINUXINCLUDE)
515 +
516 +ifdef CONFIG_ETRAX_AXISFLASHMAP
517 +
518 arch-$(CONFIG_ETRAX_ARCH_V10) = v10
519 arch-$(CONFIG_ETRAX_ARCH_V32) = v32
520
521 @@ -28,6 +31,11 @@ $(obj)/rescue.bin: $(obj)/rescue.o FORCE
522 $(call if_changed,objcopy)
523 cp -p $(obj)/rescue.bin $(objtree)
524
525 +else
526 +$(obj)/rescue.bin:
527 +
528 +endif
529 +
530 $(obj)/testrescue.bin: $(obj)/testrescue.o
531 $(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/testrescue.o tr.bin
532 # Pad it to 784 bytes
533 diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
534 index e86b7499921a..a017b23ee4aa 100644
535 --- a/arch/mips/kvm/mips.c
536 +++ b/arch/mips/kvm/mips.c
537 @@ -324,8 +324,8 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
538 #endif
539
540 /* Invalidate the icache for these ranges */
541 - local_flush_icache_range((unsigned long)gebase,
542 - (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
543 + flush_icache_range((unsigned long)gebase,
544 + (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
545
546 /*
547 * Allocate comm page for guest kernel, a TLB will be reserved for
548 diff --git a/arch/s390/crypto/prng.c b/arch/s390/crypto/prng.c
549 index d750cc0dfe30..683a966b5b16 100644
550 --- a/arch/s390/crypto/prng.c
551 +++ b/arch/s390/crypto/prng.c
552 @@ -565,8 +565,10 @@ static ssize_t prng_tdes_read(struct file *file, char __user *ubuf,
553 prng_data->prngws.byte_counter += n;
554 prng_data->prngws.reseed_counter += n;
555
556 - if (copy_to_user(ubuf, prng_data->buf, chunk))
557 - return -EFAULT;
558 + if (copy_to_user(ubuf, prng_data->buf, chunk)) {
559 + ret = -EFAULT;
560 + break;
561 + }
562
563 nbytes -= chunk;
564 ret += chunk;
565 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
566 index 7429d481a311..b3c2ae7aa213 100644
567 --- a/arch/x86/kvm/x86.c
568 +++ b/arch/x86/kvm/x86.c
569 @@ -2949,6 +2949,8 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu,
570 memset(&events->reserved, 0, sizeof(events->reserved));
571 }
572
573 +static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags);
574 +
575 static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
576 struct kvm_vcpu_events *events)
577 {
578 @@ -2981,10 +2983,13 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
579 vcpu->arch.apic->sipi_vector = events->sipi_vector;
580
581 if (events->flags & KVM_VCPUEVENT_VALID_SMM) {
582 + u32 hflags = vcpu->arch.hflags;
583 if (events->smi.smm)
584 - vcpu->arch.hflags |= HF_SMM_MASK;
585 + hflags |= HF_SMM_MASK;
586 else
587 - vcpu->arch.hflags &= ~HF_SMM_MASK;
588 + hflags &= ~HF_SMM_MASK;
589 + kvm_set_hflags(vcpu, hflags);
590 +
591 vcpu->arch.smi_pending = events->smi.pending;
592 if (events->smi.smm_inside_nmi)
593 vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
594 diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h
595 index 998fa6b23084..01ac5b1aeaeb 100644
596 --- a/drivers/base/power/power.h
597 +++ b/drivers/base/power/power.h
598 @@ -20,14 +20,22 @@ static inline void pm_runtime_early_init(struct device *dev)
599 extern void pm_runtime_init(struct device *dev);
600 extern void pm_runtime_remove(struct device *dev);
601
602 +#define WAKE_IRQ_DEDICATED_ALLOCATED BIT(0)
603 +#define WAKE_IRQ_DEDICATED_MANAGED BIT(1)
604 +#define WAKE_IRQ_DEDICATED_MASK (WAKE_IRQ_DEDICATED_ALLOCATED | \
605 + WAKE_IRQ_DEDICATED_MANAGED)
606 +
607 struct wake_irq {
608 struct device *dev;
609 + unsigned int status;
610 int irq;
611 - bool dedicated_irq:1;
612 };
613
614 extern void dev_pm_arm_wake_irq(struct wake_irq *wirq);
615 extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq);
616 +extern void dev_pm_enable_wake_irq_check(struct device *dev,
617 + bool can_change_status);
618 +extern void dev_pm_disable_wake_irq_check(struct device *dev);
619
620 #ifdef CONFIG_PM_SLEEP
621
622 @@ -102,6 +110,15 @@ static inline void dev_pm_disarm_wake_irq(struct wake_irq *wirq)
623 {
624 }
625
626 +static inline void dev_pm_enable_wake_irq_check(struct device *dev,
627 + bool can_change_status)
628 +{
629 +}
630 +
631 +static inline void dev_pm_disable_wake_irq_check(struct device *dev)
632 +{
633 +}
634 +
635 #endif
636
637 #ifdef CONFIG_PM_SLEEP
638 diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
639 index 9796a1a15ef6..3252429f96af 100644
640 --- a/drivers/base/power/runtime.c
641 +++ b/drivers/base/power/runtime.c
642 @@ -515,7 +515,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)
643
644 callback = RPM_GET_CALLBACK(dev, runtime_suspend);
645
646 - dev_pm_enable_wake_irq(dev);
647 + dev_pm_enable_wake_irq_check(dev, true);
648 retval = rpm_callback(callback, dev);
649 if (retval)
650 goto fail;
651 @@ -554,7 +554,7 @@ static int rpm_suspend(struct device *dev, int rpmflags)
652 return retval;
653
654 fail:
655 - dev_pm_disable_wake_irq(dev);
656 + dev_pm_disable_wake_irq_check(dev);
657 __update_runtime_status(dev, RPM_ACTIVE);
658 dev->power.deferred_resume = false;
659 wake_up_all(&dev->power.wait_queue);
660 @@ -737,12 +737,12 @@ static int rpm_resume(struct device *dev, int rpmflags)
661
662 callback = RPM_GET_CALLBACK(dev, runtime_resume);
663
664 - dev_pm_disable_wake_irq(dev);
665 + dev_pm_disable_wake_irq_check(dev);
666 retval = rpm_callback(callback, dev);
667 if (retval) {
668 __update_runtime_status(dev, RPM_SUSPENDED);
669 pm_runtime_cancel_pending(dev);
670 - dev_pm_enable_wake_irq(dev);
671 + dev_pm_enable_wake_irq_check(dev, false);
672 } else {
673 no_callback:
674 __update_runtime_status(dev, RPM_ACTIVE);
675 diff --git a/drivers/base/power/wakeirq.c b/drivers/base/power/wakeirq.c
676 index 0d77cd6fd8d1..404d94c6c8bc 100644
677 --- a/drivers/base/power/wakeirq.c
678 +++ b/drivers/base/power/wakeirq.c
679 @@ -110,8 +110,10 @@ void dev_pm_clear_wake_irq(struct device *dev)
680 dev->power.wakeirq = NULL;
681 spin_unlock_irqrestore(&dev->power.lock, flags);
682
683 - if (wirq->dedicated_irq)
684 + if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED) {
685 free_irq(wirq->irq, wirq);
686 + wirq->status &= ~WAKE_IRQ_DEDICATED_MASK;
687 + }
688 kfree(wirq);
689 }
690 EXPORT_SYMBOL_GPL(dev_pm_clear_wake_irq);
691 @@ -179,7 +181,6 @@ int dev_pm_set_dedicated_wake_irq(struct device *dev, int irq)
692
693 wirq->dev = dev;
694 wirq->irq = irq;
695 - wirq->dedicated_irq = true;
696 irq_set_status_flags(irq, IRQ_NOAUTOEN);
697
698 /*
699 @@ -195,6 +196,8 @@ int dev_pm_set_dedicated_wake_irq(struct device *dev, int irq)
700 if (err)
701 goto err_free_irq;
702
703 + wirq->status = WAKE_IRQ_DEDICATED_ALLOCATED;
704 +
705 return err;
706
707 err_free_irq:
708 @@ -210,9 +213,9 @@ EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq);
709 * dev_pm_enable_wake_irq - Enable device wake-up interrupt
710 * @dev: Device
711 *
712 - * Called from the bus code or the device driver for
713 - * runtime_suspend() to enable the wake-up interrupt while
714 - * the device is running.
715 + * Optionally called from the bus code or the device driver for
716 + * runtime_resume() to override the PM runtime core managed wake-up
717 + * interrupt handling to enable the wake-up interrupt.
718 *
719 * Note that for runtime_suspend()) the wake-up interrupts
720 * should be unconditionally enabled unlike for suspend()
721 @@ -222,7 +225,7 @@ void dev_pm_enable_wake_irq(struct device *dev)
722 {
723 struct wake_irq *wirq = dev->power.wakeirq;
724
725 - if (wirq && wirq->dedicated_irq)
726 + if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED))
727 enable_irq(wirq->irq);
728 }
729 EXPORT_SYMBOL_GPL(dev_pm_enable_wake_irq);
730 @@ -231,20 +234,73 @@ EXPORT_SYMBOL_GPL(dev_pm_enable_wake_irq);
731 * dev_pm_disable_wake_irq - Disable device wake-up interrupt
732 * @dev: Device
733 *
734 - * Called from the bus code or the device driver for
735 - * runtime_resume() to disable the wake-up interrupt while
736 - * the device is running.
737 + * Optionally called from the bus code or the device driver for
738 + * runtime_suspend() to override the PM runtime core managed wake-up
739 + * interrupt handling to disable the wake-up interrupt.
740 */
741 void dev_pm_disable_wake_irq(struct device *dev)
742 {
743 struct wake_irq *wirq = dev->power.wakeirq;
744
745 - if (wirq && wirq->dedicated_irq)
746 + if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED))
747 disable_irq_nosync(wirq->irq);
748 }
749 EXPORT_SYMBOL_GPL(dev_pm_disable_wake_irq);
750
751 /**
752 + * dev_pm_enable_wake_irq_check - Checks and enables wake-up interrupt
753 + * @dev: Device
754 + * @can_change_status: Can change wake-up interrupt status
755 + *
756 + * Enables wakeirq conditionally. We need to enable wake-up interrupt
757 + * lazily on the first rpm_suspend(). This is needed as the consumer device
758 + * starts in RPM_SUSPENDED state, and the the first pm_runtime_get() would
759 + * otherwise try to disable already disabled wakeirq. The wake-up interrupt
760 + * starts disabled with IRQ_NOAUTOEN set.
761 + *
762 + * Should be only called from rpm_suspend() and rpm_resume() path.
763 + * Caller must hold &dev->power.lock to change wirq->status
764 + */
765 +void dev_pm_enable_wake_irq_check(struct device *dev,
766 + bool can_change_status)
767 +{
768 + struct wake_irq *wirq = dev->power.wakeirq;
769 +
770 + if (!wirq || !((wirq->status & WAKE_IRQ_DEDICATED_MASK)))
771 + return;
772 +
773 + if (likely(wirq->status & WAKE_IRQ_DEDICATED_MANAGED)) {
774 + goto enable;
775 + } else if (can_change_status) {
776 + wirq->status |= WAKE_IRQ_DEDICATED_MANAGED;
777 + goto enable;
778 + }
779 +
780 + return;
781 +
782 +enable:
783 + enable_irq(wirq->irq);
784 +}
785 +
786 +/**
787 + * dev_pm_disable_wake_irq_check - Checks and disables wake-up interrupt
788 + * @dev: Device
789 + *
790 + * Disables wake-up interrupt conditionally based on status.
791 + * Should be only called from rpm_suspend() and rpm_resume() path.
792 + */
793 +void dev_pm_disable_wake_irq_check(struct device *dev)
794 +{
795 + struct wake_irq *wirq = dev->power.wakeirq;
796 +
797 + if (!wirq || !((wirq->status & WAKE_IRQ_DEDICATED_MASK)))
798 + return;
799 +
800 + if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED)
801 + disable_irq_nosync(wirq->irq);
802 +}
803 +
804 +/**
805 * dev_pm_arm_wake_irq - Arm device wake-up
806 * @wirq: Device wake-up interrupt
807 *
808 diff --git a/drivers/clk/clk-wm831x.c b/drivers/clk/clk-wm831x.c
809 index 43f9d15255f4..763aed2de893 100644
810 --- a/drivers/clk/clk-wm831x.c
811 +++ b/drivers/clk/clk-wm831x.c
812 @@ -247,7 +247,7 @@ static int wm831x_clkout_is_prepared(struct clk_hw *hw)
813 if (ret < 0) {
814 dev_err(wm831x->dev, "Unable to read CLOCK_CONTROL_1: %d\n",
815 ret);
816 - return true;
817 + return false;
818 }
819
820 return (ret & WM831X_CLKOUT_ENA) != 0;
821 diff --git a/drivers/clk/imx/clk-imx31.c b/drivers/clk/imx/clk-imx31.c
822 index 6a964144a5b5..6a49ba2b9671 100644
823 --- a/drivers/clk/imx/clk-imx31.c
824 +++ b/drivers/clk/imx/clk-imx31.c
825 @@ -157,10 +157,8 @@ static void __init _mx31_clocks_init(unsigned long fref)
826 }
827 }
828
829 -int __init mx31_clocks_init(void)
830 +int __init mx31_clocks_init(unsigned long fref)
831 {
832 - u32 fref = 26000000; /* default */
833 -
834 _mx31_clocks_init(fref);
835
836 clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");
837 diff --git a/drivers/gpu/drm/radeon/radeon_cursor.c b/drivers/gpu/drm/radeon/radeon_cursor.c
838 index b5b9cb911111..04cec0da5d1e 100644
839 --- a/drivers/gpu/drm/radeon/radeon_cursor.c
840 +++ b/drivers/gpu/drm/radeon/radeon_cursor.c
841 @@ -146,6 +146,9 @@ static int radeon_cursor_move_locked(struct drm_crtc *crtc, int x, int y)
842 int xorigin = 0, yorigin = 0;
843 int w = radeon_crtc->cursor_width;
844
845 + radeon_crtc->cursor_x = x;
846 + radeon_crtc->cursor_y = y;
847 +
848 if (ASIC_IS_AVIVO(rdev)) {
849 /* avivo cursor are offset into the total surface */
850 x += crtc->x;
851 @@ -240,9 +243,6 @@ static int radeon_cursor_move_locked(struct drm_crtc *crtc, int x, int y)
852 yorigin * 256);
853 }
854
855 - radeon_crtc->cursor_x = x;
856 - radeon_crtc->cursor_y = y;
857 -
858 if (radeon_crtc->cursor_out_of_bounds) {
859 radeon_crtc->cursor_out_of_bounds = false;
860 if (radeon_crtc->cursor_bo)
861 diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
862 index 12e851a5af48..46b4e35fd555 100644
863 --- a/drivers/hwmon/amc6821.c
864 +++ b/drivers/hwmon/amc6821.c
865 @@ -188,8 +188,8 @@ static struct amc6821_data *amc6821_update_device(struct device *dev)
866 !data->valid) {
867
868 for (i = 0; i < TEMP_IDX_LEN; i++)
869 - data->temp[i] = i2c_smbus_read_byte_data(client,
870 - temp_reg[i]);
871 + data->temp[i] = (int8_t)i2c_smbus_read_byte_data(
872 + client, temp_reg[i]);
873
874 data->stat1 = i2c_smbus_read_byte_data(client,
875 AMC6821_REG_STAT1);
876 diff --git a/drivers/hwmon/ds620.c b/drivers/hwmon/ds620.c
877 index edf550fc4eef..0043a4c02b85 100644
878 --- a/drivers/hwmon/ds620.c
879 +++ b/drivers/hwmon/ds620.c
880 @@ -166,7 +166,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da,
881 if (res)
882 return res;
883
884 - val = (val * 10 / 625) * 8;
885 + val = (clamp_val(val, -128000, 128000) * 10 / 625) * 8;
886
887 mutex_lock(&data->update_lock);
888 data->temp[attr->index] = val;
889 diff --git a/drivers/hwmon/g762.c b/drivers/hwmon/g762.c
890 index b96a2a9e4df7..628be9c95ff9 100644
891 --- a/drivers/hwmon/g762.c
892 +++ b/drivers/hwmon/g762.c
893 @@ -193,14 +193,17 @@ static inline unsigned int rpm_from_cnt(u8 cnt, u32 clk_freq, u16 p,
894 * Convert fan RPM value from sysfs into count value for fan controller
895 * register (FAN_SET_CNT).
896 */
897 -static inline unsigned char cnt_from_rpm(u32 rpm, u32 clk_freq, u16 p,
898 +static inline unsigned char cnt_from_rpm(unsigned long rpm, u32 clk_freq, u16 p,
899 u8 clk_div, u8 gear_mult)
900 {
901 - if (!rpm) /* to stop the fan, set cnt to 255 */
902 + unsigned long f1 = clk_freq * 30 * gear_mult;
903 + unsigned long f2 = p * clk_div;
904 +
905 + if (!rpm) /* to stop the fan, set cnt to 255 */
906 return 0xff;
907
908 - return clamp_val(((clk_freq * 30 * gear_mult) / (rpm * p * clk_div)),
909 - 0, 255);
910 + rpm = clamp_val(rpm, f1 / (255 * f2), ULONG_MAX / f2);
911 + return DIV_ROUND_CLOSEST(f1, rpm * f2);
912 }
913
914 /* helper to grab and cache data, at most one time per second */
915 diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c
916 index 3ce33d244cc0..12b94b094c0d 100644
917 --- a/drivers/hwmon/nct7802.c
918 +++ b/drivers/hwmon/nct7802.c
919 @@ -259,13 +259,15 @@ static int nct7802_read_fan_min(struct nct7802_data *data, u8 reg_fan_low,
920 ret = 0;
921 else if (ret)
922 ret = DIV_ROUND_CLOSEST(1350000U, ret);
923 + else
924 + ret = 1350000U;
925 abort:
926 mutex_unlock(&data->access_lock);
927 return ret;
928 }
929
930 static int nct7802_write_fan_min(struct nct7802_data *data, u8 reg_fan_low,
931 - u8 reg_fan_high, unsigned int limit)
932 + u8 reg_fan_high, unsigned long limit)
933 {
934 int err;
935
936 @@ -326,8 +328,8 @@ static int nct7802_write_voltage(struct nct7802_data *data, int nr, int index,
937 int shift = 8 - REG_VOLTAGE_LIMIT_MSB_SHIFT[index - 1][nr];
938 int err;
939
940 + voltage = clamp_val(voltage, 0, 0x3ff * nct7802_vmul[nr]);
941 voltage = DIV_ROUND_CLOSEST(voltage, nct7802_vmul[nr]);
942 - voltage = clamp_val(voltage, 0, 0x3ff);
943
944 mutex_lock(&data->access_lock);
945 err = regmap_write(data->regmap,
946 @@ -402,7 +404,7 @@ static ssize_t store_temp(struct device *dev, struct device_attribute *attr,
947 if (err < 0)
948 return err;
949
950 - val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
951 + val = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000);
952
953 err = regmap_write(data->regmap, nr, val & 0xff);
954 return err ? : count;
955 diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
956 index 7e20567bc369..6827169c82d4 100644
957 --- a/drivers/hwmon/scpi-hwmon.c
958 +++ b/drivers/hwmon/scpi-hwmon.c
959 @@ -272,6 +272,7 @@ static const struct of_device_id scpi_of_match[] = {
960 {.compatible = "arm,scpi-sensors"},
961 {},
962 };
963 +MODULE_DEVICE_TABLE(of, scpi_of_match);
964
965 static struct platform_driver scpi_hwmon_platdrv = {
966 .driver = {
967 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
968 index 5975d76ce755..a0ef57483ebb 100644
969 --- a/drivers/iommu/amd_iommu.c
970 +++ b/drivers/iommu/amd_iommu.c
971 @@ -926,7 +926,7 @@ again:
972 next_tail = (tail + sizeof(*cmd)) % CMD_BUFFER_SIZE;
973 left = (head - next_tail) % CMD_BUFFER_SIZE;
974
975 - if (left <= 2) {
976 + if (left <= 0x20) {
977 struct iommu_cmd sync_cmd;
978 volatile u64 sem = 0;
979 int ret;
980 diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
981 index 7caf2fa237f2..4831eb910fc7 100644
982 --- a/drivers/iommu/amd_iommu_v2.c
983 +++ b/drivers/iommu/amd_iommu_v2.c
984 @@ -809,8 +809,10 @@ int amd_iommu_init_device(struct pci_dev *pdev, int pasids)
985 goto out_free_domain;
986
987 group = iommu_group_get(&pdev->dev);
988 - if (!group)
989 + if (!group) {
990 + ret = -EINVAL;
991 goto out_free_domain;
992 + }
993
994 ret = iommu_attach_group(dev_state->domain, group);
995 if (ret != 0)
996 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
997 index 59e9abd3345e..9413b0726237 100644
998 --- a/drivers/iommu/intel-iommu.c
999 +++ b/drivers/iommu/intel-iommu.c
1000 @@ -1993,6 +1993,25 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1001 if (context_present(context))
1002 goto out_unlock;
1003
1004 + /*
1005 + * For kdump cases, old valid entries may be cached due to the
1006 + * in-flight DMA and copied pgtable, but there is no unmapping
1007 + * behaviour for them, thus we need an explicit cache flush for
1008 + * the newly-mapped device. For kdump, at this point, the device
1009 + * is supposed to finish reset at its driver probe stage, so no
1010 + * in-flight DMA will exist, and we don't need to worry anymore
1011 + * hereafter.
1012 + */
1013 + if (context_copied(context)) {
1014 + u16 did_old = context_domain_id(context);
1015 +
1016 + if (did_old >= 0 && did_old < cap_ndoms(iommu->cap))
1017 + iommu->flush.flush_context(iommu, did_old,
1018 + (((u16)bus) << 8) | devfn,
1019 + DMA_CCMD_MASK_NOBIT,
1020 + DMA_CCMD_DEVICE_INVL);
1021 + }
1022 +
1023 pgd = domain->pgd;
1024
1025 context_clear_entry(context);
1026 @@ -5020,6 +5039,25 @@ static void intel_iommu_remove_device(struct device *dev)
1027 }
1028
1029 #ifdef CONFIG_INTEL_IOMMU_SVM
1030 +#define MAX_NR_PASID_BITS (20)
1031 +static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu)
1032 +{
1033 + /*
1034 + * Convert ecap_pss to extend context entry pts encoding, also
1035 + * respect the soft pasid_max value set by the iommu.
1036 + * - number of PASID bits = ecap_pss + 1
1037 + * - number of PASID table entries = 2^(pts + 5)
1038 + * Therefore, pts = ecap_pss - 4
1039 + * e.g. KBL ecap_pss = 0x13, PASID has 20 bits, pts = 15
1040 + */
1041 + if (ecap_pss(iommu->ecap) < 5)
1042 + return 0;
1043 +
1044 + /* pasid_max is encoded as actual number of entries not the bits */
1045 + return find_first_bit((unsigned long *)&iommu->pasid_max,
1046 + MAX_NR_PASID_BITS) - 5;
1047 +}
1048 +
1049 int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct intel_svm_dev *sdev)
1050 {
1051 struct device_domain_info *info;
1052 @@ -5052,7 +5090,9 @@ int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct intel_svm_dev *sd
1053
1054 if (!(ctx_lo & CONTEXT_PASIDE)) {
1055 context[1].hi = (u64)virt_to_phys(iommu->pasid_state_table);
1056 - context[1].lo = (u64)virt_to_phys(iommu->pasid_table) | ecap_pss(iommu->ecap);
1057 + context[1].lo = (u64)virt_to_phys(iommu->pasid_table) |
1058 + intel_iommu_get_pts(iommu);
1059 +
1060 wmb();
1061 /* CONTEXT_TT_MULTI_LEVEL and CONTEXT_TT_DEV_IOTLB are both
1062 * extended to permit requests-with-PASID if the PASIDE bit
1063 diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038-l1.c
1064 index 0fea985ef1dc..d7af88534971 100644
1065 --- a/drivers/irqchip/irq-bcm7038-l1.c
1066 +++ b/drivers/irqchip/irq-bcm7038-l1.c
1067 @@ -216,6 +216,31 @@ static int bcm7038_l1_set_affinity(struct irq_data *d,
1068 return 0;
1069 }
1070
1071 +static void bcm7038_l1_cpu_offline(struct irq_data *d)
1072 +{
1073 + struct cpumask *mask = irq_data_get_affinity_mask(d);
1074 + int cpu = smp_processor_id();
1075 + cpumask_t new_affinity;
1076 +
1077 + /* This CPU was not on the affinity mask */
1078 + if (!cpumask_test_cpu(cpu, mask))
1079 + return;
1080 +
1081 + if (cpumask_weight(mask) > 1) {
1082 + /*
1083 + * Multiple CPU affinity, remove this CPU from the affinity
1084 + * mask
1085 + */
1086 + cpumask_copy(&new_affinity, mask);
1087 + cpumask_clear_cpu(cpu, &new_affinity);
1088 + } else {
1089 + /* Only CPU, put on the lowest online CPU */
1090 + cpumask_clear(&new_affinity);
1091 + cpumask_set_cpu(cpumask_first(cpu_online_mask), &new_affinity);
1092 + }
1093 + irq_set_affinity_locked(d, &new_affinity, false);
1094 +}
1095 +
1096 static int __init bcm7038_l1_init_one(struct device_node *dn,
1097 unsigned int idx,
1098 struct bcm7038_l1_chip *intc)
1099 @@ -267,6 +292,7 @@ static struct irq_chip bcm7038_l1_irq_chip = {
1100 .irq_mask = bcm7038_l1_mask,
1101 .irq_unmask = bcm7038_l1_unmask,
1102 .irq_set_affinity = bcm7038_l1_set_affinity,
1103 + .irq_cpu_offline = bcm7038_l1_cpu_offline,
1104 };
1105
1106 static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
1107 diff --git a/drivers/md/md.c b/drivers/md/md.c
1108 index c1c7d4fb4b77..eff554a12fb4 100644
1109 --- a/drivers/md/md.c
1110 +++ b/drivers/md/md.c
1111 @@ -6771,7 +6771,7 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
1112 /* need to ensure recovery thread has run */
1113 wait_event_interruptible_timeout(mddev->sb_wait,
1114 !test_bit(MD_RECOVERY_NEEDED,
1115 - &mddev->flags),
1116 + &mddev->recovery),
1117 msecs_to_jiffies(5000));
1118 if (cmd == STOP_ARRAY || cmd == STOP_ARRAY_RO) {
1119 /* Need to flush page cache, and ensure no-one else opens
1120 diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
1121 index c4307ad8594c..e543cbbf2ec4 100644
1122 --- a/drivers/media/pci/cx23885/cx23885-dvb.c
1123 +++ b/drivers/media/pci/cx23885/cx23885-dvb.c
1124 @@ -2168,11 +2168,12 @@ static int dvb_register(struct cx23885_tsport *port)
1125 }
1126 port->i2c_client_tuner = client_tuner;
1127 break;
1128 - case CX23885_BOARD_HAUPPAUGE_HVR5525:
1129 - switch (port->nr) {
1130 + case CX23885_BOARD_HAUPPAUGE_HVR5525: {
1131 struct m88rs6000t_config m88rs6000t_config;
1132 struct a8293_platform_data a8293_pdata = {};
1133
1134 + switch (port->nr) {
1135 +
1136 /* port b - satellite */
1137 case 1:
1138 /* attach frontend */
1139 @@ -2267,6 +2268,7 @@ static int dvb_register(struct cx23885_tsport *port)
1140 break;
1141 }
1142 break;
1143 + }
1144 default:
1145 printk(KERN_INFO "%s: The frontend of your DVB/ATSC card "
1146 " isn't supported yet\n",
1147 diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
1148 index e59838231703..be74a25708b2 100644
1149 --- a/drivers/misc/mei/bus.c
1150 +++ b/drivers/misc/mei/bus.c
1151 @@ -399,7 +399,7 @@ bool mei_cldev_enabled(struct mei_cl_device *cldev)
1152 EXPORT_SYMBOL_GPL(mei_cldev_enabled);
1153
1154 /**
1155 - * mei_cldev_enable_device - enable me client device
1156 + * mei_cldev_enable - enable me client device
1157 * create connection with me client
1158 *
1159 * @cldev: me client device
1160 diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c
1161 index 7fc9174d4619..9a11aaa6e985 100644
1162 --- a/drivers/mmc/card/mmc_test.c
1163 +++ b/drivers/mmc/card/mmc_test.c
1164 @@ -791,7 +791,7 @@ static int mmc_test_nonblock_transfer(struct mmc_test_card *test,
1165 struct mmc_async_req *cur_areq = &test_areq[0].areq;
1166 struct mmc_async_req *other_areq = &test_areq[1].areq;
1167 int i;
1168 - int ret;
1169 + int ret = RESULT_OK;
1170
1171 test_areq[0].test = test;
1172 test_areq[1].test = test;
1173 diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
1174 index 50d5604833ed..e0993eba5df3 100644
1175 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
1176 +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
1177 @@ -2223,8 +2223,6 @@ static irqreturn_t vxge_isr_napi(int irq, void *dev_id)
1178 return IRQ_NONE;
1179 }
1180
1181 -#ifdef CONFIG_PCI_MSI
1182 -
1183 static irqreturn_t vxge_tx_msix_handle(int irq, void *dev_id)
1184 {
1185 struct vxge_fifo *fifo = (struct vxge_fifo *)dev_id;
1186 @@ -2442,16 +2440,13 @@ static void vxge_rem_msix_isr(struct vxgedev *vdev)
1187 if (vdev->config.intr_type == MSI_X)
1188 pci_disable_msix(vdev->pdev);
1189 }
1190 -#endif
1191
1192 static void vxge_rem_isr(struct vxgedev *vdev)
1193 {
1194 -#ifdef CONFIG_PCI_MSI
1195 - if (vdev->config.intr_type == MSI_X) {
1196 + if (IS_ENABLED(CONFIG_PCI_MSI) &&
1197 + vdev->config.intr_type == MSI_X) {
1198 vxge_rem_msix_isr(vdev);
1199 - } else
1200 -#endif
1201 - if (vdev->config.intr_type == INTA) {
1202 + } else if (vdev->config.intr_type == INTA) {
1203 synchronize_irq(vdev->pdev->irq);
1204 free_irq(vdev->pdev->irq, vdev);
1205 }
1206 @@ -2460,11 +2455,10 @@ static void vxge_rem_isr(struct vxgedev *vdev)
1207 static int vxge_add_isr(struct vxgedev *vdev)
1208 {
1209 int ret = 0;
1210 -#ifdef CONFIG_PCI_MSI
1211 int vp_idx = 0, intr_idx = 0, intr_cnt = 0, msix_idx = 0, irq_req = 0;
1212 int pci_fun = PCI_FUNC(vdev->pdev->devfn);
1213
1214 - if (vdev->config.intr_type == MSI_X)
1215 + if (IS_ENABLED(CONFIG_PCI_MSI) && vdev->config.intr_type == MSI_X)
1216 ret = vxge_enable_msix(vdev);
1217
1218 if (ret) {
1219 @@ -2475,7 +2469,7 @@ static int vxge_add_isr(struct vxgedev *vdev)
1220 vdev->config.intr_type = INTA;
1221 }
1222
1223 - if (vdev->config.intr_type == MSI_X) {
1224 + if (IS_ENABLED(CONFIG_PCI_MSI) && vdev->config.intr_type == MSI_X) {
1225 for (intr_idx = 0;
1226 intr_idx < (vdev->no_of_vpath *
1227 VXGE_HW_VPATH_MSIX_ACTIVE); intr_idx++) {
1228 @@ -2576,9 +2570,8 @@ static int vxge_add_isr(struct vxgedev *vdev)
1229 vdev->vxge_entries[intr_cnt].in_use = 1;
1230 vdev->vxge_entries[intr_cnt].arg = &vdev->vpaths[0];
1231 }
1232 -INTA_MODE:
1233 -#endif
1234
1235 +INTA_MODE:
1236 if (vdev->config.intr_type == INTA) {
1237 snprintf(vdev->desc[0], VXGE_INTR_STRLEN,
1238 "%s:vxge:INTA", vdev->ndev->name);
1239 @@ -3889,12 +3882,12 @@ static void vxge_device_config_init(struct vxge_hw_device_config *device_config,
1240 if (max_mac_vpath > VXGE_MAX_MAC_ADDR_COUNT)
1241 max_mac_vpath = VXGE_MAX_MAC_ADDR_COUNT;
1242
1243 -#ifndef CONFIG_PCI_MSI
1244 - vxge_debug_init(VXGE_ERR,
1245 - "%s: This Kernel does not support "
1246 - "MSI-X. Defaulting to INTA", VXGE_DRIVER_NAME);
1247 - *intr_type = INTA;
1248 -#endif
1249 + if (!IS_ENABLED(CONFIG_PCI_MSI)) {
1250 + vxge_debug_init(VXGE_ERR,
1251 + "%s: This Kernel does not support "
1252 + "MSI-X. Defaulting to INTA", VXGE_DRIVER_NAME);
1253 + *intr_type = INTA;
1254 + }
1255
1256 /* Configure whether MSI-X or IRQL. */
1257 switch (*intr_type) {
1258 diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c
1259 index 77d26fe286c0..d52ea3008946 100644
1260 --- a/drivers/net/ethernet/ti/cpmac.c
1261 +++ b/drivers/net/ethernet/ti/cpmac.c
1262 @@ -549,7 +549,8 @@ fatal_error:
1263
1264 static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
1265 {
1266 - int queue, len;
1267 + int queue;
1268 + unsigned int len;
1269 struct cpmac_desc *desc;
1270 struct cpmac_priv *priv = netdev_priv(dev);
1271
1272 @@ -559,7 +560,7 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
1273 if (unlikely(skb_padto(skb, ETH_ZLEN)))
1274 return NETDEV_TX_OK;
1275
1276 - len = max(skb->len, ETH_ZLEN);
1277 + len = max_t(unsigned int, skb->len, ETH_ZLEN);
1278 queue = skb_get_queue_mapping(skb);
1279 netif_stop_subqueue(dev, queue);
1280
1281 diff --git a/drivers/net/wireless/ath/ath10k/spectral.c b/drivers/net/wireless/ath/ath10k/spectral.c
1282 index 4671cfbcd8f7..a0e7eebc206a 100644
1283 --- a/drivers/net/wireless/ath/ath10k/spectral.c
1284 +++ b/drivers/net/wireless/ath/ath10k/spectral.c
1285 @@ -338,7 +338,7 @@ static ssize_t write_file_spec_scan_ctl(struct file *file,
1286 } else {
1287 res = -EINVAL;
1288 }
1289 - } else if (strncmp("background", buf, 9) == 0) {
1290 + } else if (strncmp("background", buf, 10) == 0) {
1291 res = ath10k_spectral_scan_config(ar, SPECTRAL_BACKGROUND);
1292 } else if (strncmp("manual", buf, 6) == 0) {
1293 res = ath10k_spectral_scan_config(ar, SPECTRAL_MANUAL);
1294 diff --git a/drivers/pci/hotplug/rpadlpar_core.c b/drivers/pci/hotplug/rpadlpar_core.c
1295 index e12bafdc42e0..f2fcbe944d94 100644
1296 --- a/drivers/pci/hotplug/rpadlpar_core.c
1297 +++ b/drivers/pci/hotplug/rpadlpar_core.c
1298 @@ -258,8 +258,13 @@ static int dlpar_add_phb(char *drc_name, struct device_node *dn)
1299
1300 static int dlpar_add_vio_slot(char *drc_name, struct device_node *dn)
1301 {
1302 - if (vio_find_node(dn))
1303 + struct vio_dev *vio_dev;
1304 +
1305 + vio_dev = vio_find_node(dn);
1306 + if (vio_dev) {
1307 + put_device(&vio_dev->dev);
1308 return -EINVAL;
1309 + }
1310
1311 if (!vio_register_device_node(dn)) {
1312 printk(KERN_ERR
1313 @@ -335,6 +340,9 @@ static int dlpar_remove_vio_slot(char *drc_name, struct device_node *dn)
1314 return -EINVAL;
1315
1316 vio_unregister_device(vio_dev);
1317 +
1318 + put_device(&vio_dev->dev);
1319 +
1320 return 0;
1321 }
1322
1323 diff --git a/drivers/scsi/mvsas/mv_94xx.c b/drivers/scsi/mvsas/mv_94xx.c
1324 index 9270d15ff1a4..7353ac8d0d39 100644
1325 --- a/drivers/scsi/mvsas/mv_94xx.c
1326 +++ b/drivers/scsi/mvsas/mv_94xx.c
1327 @@ -621,7 +621,7 @@ static void mvs_94xx_command_active(struct mvs_info *mvi, u32 slot_idx)
1328 {
1329 u32 tmp;
1330 tmp = mvs_cr32(mvi, MVS_COMMAND_ACTIVE+(slot_idx >> 3));
1331 - if (tmp && 1 << (slot_idx % 32)) {
1332 + if (tmp & 1 << (slot_idx % 32)) {
1333 mv_printk("command active %08X, slot [%x].\n", tmp, slot_idx);
1334 mvs_cw32(mvi, MVS_COMMAND_ACTIVE + (slot_idx >> 3),
1335 1 << (slot_idx % 32));
1336 diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c
1337 index 5a536a00066f..b63472de761a 100644
1338 --- a/drivers/staging/comedi/drivers/dt282x.c
1339 +++ b/drivers/staging/comedi/drivers/dt282x.c
1340 @@ -69,48 +69,49 @@
1341 * Register map
1342 */
1343 #define DT2821_ADCSR_REG 0x00
1344 -#define DT2821_ADCSR_ADERR (1 << 15)
1345 -#define DT2821_ADCSR_ADCLK (1 << 9)
1346 -#define DT2821_ADCSR_MUXBUSY (1 << 8)
1347 -#define DT2821_ADCSR_ADDONE (1 << 7)
1348 -#define DT2821_ADCSR_IADDONE (1 << 6)
1349 +#define DT2821_ADCSR_ADERR BIT(15)
1350 +#define DT2821_ADCSR_ADCLK BIT(9)
1351 +#define DT2821_ADCSR_MUXBUSY BIT(8)
1352 +#define DT2821_ADCSR_ADDONE BIT(7)
1353 +#define DT2821_ADCSR_IADDONE BIT(6)
1354 #define DT2821_ADCSR_GS(x) (((x) & 0x3) << 4)
1355 #define DT2821_ADCSR_CHAN(x) (((x) & 0xf) << 0)
1356 #define DT2821_CHANCSR_REG 0x02
1357 -#define DT2821_CHANCSR_LLE (1 << 15)
1358 -#define DT2821_CHANCSR_PRESLA(x) (((x) & 0xf) >> 8)
1359 +#define DT2821_CHANCSR_LLE BIT(15)
1360 +#define DT2821_CHANCSR_TO_PRESLA(x) (((x) >> 8) & 0xf)
1361 #define DT2821_CHANCSR_NUMB(x) ((((x) - 1) & 0xf) << 0)
1362 #define DT2821_ADDAT_REG 0x04
1363 #define DT2821_DACSR_REG 0x06
1364 -#define DT2821_DACSR_DAERR (1 << 15)
1365 +#define DT2821_DACSR_DAERR BIT(15)
1366 #define DT2821_DACSR_YSEL(x) ((x) << 9)
1367 -#define DT2821_DACSR_SSEL (1 << 8)
1368 -#define DT2821_DACSR_DACRDY (1 << 7)
1369 -#define DT2821_DACSR_IDARDY (1 << 6)
1370 -#define DT2821_DACSR_DACLK (1 << 5)
1371 -#define DT2821_DACSR_HBOE (1 << 1)
1372 -#define DT2821_DACSR_LBOE (1 << 0)
1373 +#define DT2821_DACSR_SSEL BIT(8)
1374 +#define DT2821_DACSR_DACRDY BIT(7)
1375 +#define DT2821_DACSR_IDARDY BIT(6)
1376 +#define DT2821_DACSR_DACLK BIT(5)
1377 +#define DT2821_DACSR_HBOE BIT(1)
1378 +#define DT2821_DACSR_LBOE BIT(0)
1379 #define DT2821_DADAT_REG 0x08
1380 #define DT2821_DIODAT_REG 0x0a
1381 #define DT2821_SUPCSR_REG 0x0c
1382 -#define DT2821_SUPCSR_DMAD (1 << 15)
1383 -#define DT2821_SUPCSR_ERRINTEN (1 << 14)
1384 -#define DT2821_SUPCSR_CLRDMADNE (1 << 13)
1385 -#define DT2821_SUPCSR_DDMA (1 << 12)
1386 -#define DT2821_SUPCSR_DS_PIO (0 << 10)
1387 -#define DT2821_SUPCSR_DS_AD_CLK (1 << 10)
1388 -#define DT2821_SUPCSR_DS_DA_CLK (2 << 10)
1389 -#define DT2821_SUPCSR_DS_AD_TRIG (3 << 10)
1390 -#define DT2821_SUPCSR_BUFFB (1 << 9)
1391 -#define DT2821_SUPCSR_SCDN (1 << 8)
1392 -#define DT2821_SUPCSR_DACON (1 << 7)
1393 -#define DT2821_SUPCSR_ADCINIT (1 << 6)
1394 -#define DT2821_SUPCSR_DACINIT (1 << 5)
1395 -#define DT2821_SUPCSR_PRLD (1 << 4)
1396 -#define DT2821_SUPCSR_STRIG (1 << 3)
1397 -#define DT2821_SUPCSR_XTRIG (1 << 2)
1398 -#define DT2821_SUPCSR_XCLK (1 << 1)
1399 -#define DT2821_SUPCSR_BDINIT (1 << 0)
1400 +#define DT2821_SUPCSR_DMAD BIT(15)
1401 +#define DT2821_SUPCSR_ERRINTEN BIT(14)
1402 +#define DT2821_SUPCSR_CLRDMADNE BIT(13)
1403 +#define DT2821_SUPCSR_DDMA BIT(12)
1404 +#define DT2821_SUPCSR_DS(x) (((x) & 0x3) << 10)
1405 +#define DT2821_SUPCSR_DS_PIO DT2821_SUPCSR_DS(0)
1406 +#define DT2821_SUPCSR_DS_AD_CLK DT2821_SUPCSR_DS(1)
1407 +#define DT2821_SUPCSR_DS_DA_CLK DT2821_SUPCSR_DS(2)
1408 +#define DT2821_SUPCSR_DS_AD_TRIG DT2821_SUPCSR_DS(3)
1409 +#define DT2821_SUPCSR_BUFFB BIT(9)
1410 +#define DT2821_SUPCSR_SCDN BIT(8)
1411 +#define DT2821_SUPCSR_DACON BIT(7)
1412 +#define DT2821_SUPCSR_ADCINIT BIT(6)
1413 +#define DT2821_SUPCSR_DACINIT BIT(5)
1414 +#define DT2821_SUPCSR_PRLD BIT(4)
1415 +#define DT2821_SUPCSR_STRIG BIT(3)
1416 +#define DT2821_SUPCSR_XTRIG BIT(2)
1417 +#define DT2821_SUPCSR_XCLK BIT(1)
1418 +#define DT2821_SUPCSR_BDINIT BIT(0)
1419 #define DT2821_TMRCTR_REG 0x0e
1420
1421 static const struct comedi_lrange range_dt282x_ai_lo_bipolar = {
1422 diff --git a/drivers/staging/iio/adc/ad7606_core.c b/drivers/staging/iio/adc/ad7606_core.c
1423 index 5796ed2409d0..39bbbaaff07c 100644
1424 --- a/drivers/staging/iio/adc/ad7606_core.c
1425 +++ b/drivers/staging/iio/adc/ad7606_core.c
1426 @@ -189,7 +189,7 @@ static ssize_t ad7606_store_oversampling_ratio(struct device *dev,
1427 mutex_lock(&indio_dev->mlock);
1428 gpio_set_value(st->pdata->gpio_os0, (ret >> 0) & 1);
1429 gpio_set_value(st->pdata->gpio_os1, (ret >> 1) & 1);
1430 - gpio_set_value(st->pdata->gpio_os1, (ret >> 2) & 1);
1431 + gpio_set_value(st->pdata->gpio_os2, (ret >> 2) & 1);
1432 st->oversampling = lval;
1433 mutex_unlock(&indio_dev->mlock);
1434
1435 diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
1436 index 23c95cd14167..68261b7dcefe 100644
1437 --- a/drivers/target/iscsi/iscsi_target_tpg.c
1438 +++ b/drivers/target/iscsi/iscsi_target_tpg.c
1439 @@ -260,7 +260,6 @@ err_out:
1440 iscsi_release_param_list(tpg->param_list);
1441 tpg->param_list = NULL;
1442 }
1443 - kfree(tpg);
1444 return -ENOMEM;
1445 }
1446
1447 diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
1448 index ff44cfa26af8..ac30a051ad71 100644
1449 --- a/drivers/usb/core/config.c
1450 +++ b/drivers/usb/core/config.c
1451 @@ -205,6 +205,16 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
1452 if (ifp->desc.bNumEndpoints >= num_ep)
1453 goto skip_to_next_endpoint_or_interface_descriptor;
1454
1455 + /* Check for duplicate endpoint addresses */
1456 + for (i = 0; i < ifp->desc.bNumEndpoints; ++i) {
1457 + if (ifp->endpoint[i].desc.bEndpointAddress ==
1458 + d->bEndpointAddress) {
1459 + dev_warn(ddev, "config %d interface %d altsetting %d has a duplicate endpoint with address 0x%X, skipping\n",
1460 + cfgno, inum, asnum, d->bEndpointAddress);
1461 + goto skip_to_next_endpoint_or_interface_descriptor;
1462 + }
1463 + }
1464 +
1465 endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints];
1466 ++ifp->desc.bNumEndpoints;
1467
1468 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1469 index 496d6a558793..780db8bb2262 100644
1470 --- a/drivers/usb/core/hub.c
1471 +++ b/drivers/usb/core/hub.c
1472 @@ -101,8 +101,7 @@ EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
1473
1474 static void hub_release(struct kref *kref);
1475 static int usb_reset_and_verify_device(struct usb_device *udev);
1476 -static void hub_usb3_port_prepare_disable(struct usb_hub *hub,
1477 - struct usb_port *port_dev);
1478 +static int hub_port_disable(struct usb_hub *hub, int port1, int set_state);
1479
1480 static inline char *portspeed(struct usb_hub *hub, int portstatus)
1481 {
1482 @@ -885,34 +884,6 @@ static int hub_set_port_link_state(struct usb_hub *hub, int port1,
1483 }
1484
1485 /*
1486 - * USB-3 does not have a similar link state as USB-2 that will avoid negotiating
1487 - * a connection with a plugged-in cable but will signal the host when the cable
1488 - * is unplugged. Disable remote wake and set link state to U3 for USB-3 devices
1489 - */
1490 -static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
1491 -{
1492 - struct usb_port *port_dev = hub->ports[port1 - 1];
1493 - struct usb_device *hdev = hub->hdev;
1494 - int ret = 0;
1495 -
1496 - if (!hub->error) {
1497 - if (hub_is_superspeed(hub->hdev)) {
1498 - hub_usb3_port_prepare_disable(hub, port_dev);
1499 - ret = hub_set_port_link_state(hub, port_dev->portnum,
1500 - USB_SS_PORT_LS_U3);
1501 - } else {
1502 - ret = usb_clear_port_feature(hdev, port1,
1503 - USB_PORT_FEAT_ENABLE);
1504 - }
1505 - }
1506 - if (port_dev->child && set_state)
1507 - usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
1508 - if (ret && ret != -ENODEV)
1509 - dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
1510 - return ret;
1511 -}
1512 -
1513 -/*
1514 * Disable a port and mark a logical connect-change event, so that some
1515 * time later hub_wq will disconnect() any existing usb_device on the port
1516 * and will re-enumerate if there actually is a device attached.
1517 @@ -4086,6 +4057,34 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
1518
1519 #endif /* CONFIG_PM */
1520
1521 +/*
1522 + * USB-3 does not have a similar link state as USB-2 that will avoid negotiating
1523 + * a connection with a plugged-in cable but will signal the host when the cable
1524 + * is unplugged. Disable remote wake and set link state to U3 for USB-3 devices
1525 + */
1526 +static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
1527 +{
1528 + struct usb_port *port_dev = hub->ports[port1 - 1];
1529 + struct usb_device *hdev = hub->hdev;
1530 + int ret = 0;
1531 +
1532 + if (!hub->error) {
1533 + if (hub_is_superspeed(hub->hdev)) {
1534 + hub_usb3_port_prepare_disable(hub, port_dev);
1535 + ret = hub_set_port_link_state(hub, port_dev->portnum,
1536 + USB_SS_PORT_LS_U3);
1537 + } else {
1538 + ret = usb_clear_port_feature(hdev, port1,
1539 + USB_PORT_FEAT_ENABLE);
1540 + }
1541 + }
1542 + if (port_dev->child && set_state)
1543 + usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
1544 + if (ret && ret != -ENODEV)
1545 + dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
1546 + return ret;
1547 +}
1548 +
1549
1550 /* USB 2.0 spec, 7.1.7.3 / fig 7-29:
1551 *
1552 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
1553 index 78be201d81f4..68d11d7d4028 100644
1554 --- a/drivers/usb/dwc3/core.h
1555 +++ b/drivers/usb/dwc3/core.h
1556 @@ -42,9 +42,7 @@
1557 #define DWC3_XHCI_RESOURCES_NUM 2
1558
1559 #define DWC3_SCRATCHBUF_SIZE 4096 /* each buffer is assumed to be 4KiB */
1560 -#define DWC3_EVENT_SIZE 4 /* bytes */
1561 -#define DWC3_EVENT_MAX_NUM 64 /* 2 events/endpoint */
1562 -#define DWC3_EVENT_BUFFERS_SIZE (DWC3_EVENT_SIZE * DWC3_EVENT_MAX_NUM)
1563 +#define DWC3_EVENT_BUFFERS_SIZE 4096
1564 #define DWC3_EVENT_TYPE_MASK 0xfe
1565
1566 #define DWC3_EVENT_TYPE_DEV 0
1567 diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
1568 index 3d731d1b5c60..d2c0c1a8d979 100644
1569 --- a/drivers/usb/dwc3/dwc3-pci.c
1570 +++ b/drivers/usb/dwc3/dwc3-pci.c
1571 @@ -37,6 +37,7 @@
1572 #define PCI_DEVICE_ID_INTEL_BXT 0x0aaa
1573 #define PCI_DEVICE_ID_INTEL_APL 0x5aaa
1574 #define PCI_DEVICE_ID_INTEL_KBP 0xa2b0
1575 +#define PCI_DEVICE_ID_INTEL_GLK 0x31aa
1576
1577 static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
1578 static const struct acpi_gpio_params cs_gpios = { 1, 0, false };
1579 @@ -216,6 +217,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
1580 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BXT), },
1581 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_APL), },
1582 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBP), },
1583 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GLK), },
1584 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },
1585 { } /* Terminating Entry */
1586 };
1587 diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
1588 index b13912d5fa99..f13e9e9fb834 100644
1589 --- a/drivers/usb/dwc3/ep0.c
1590 +++ b/drivers/usb/dwc3/ep0.c
1591 @@ -55,20 +55,13 @@ static const char *dwc3_ep0_state_string(enum dwc3_ep0_state state)
1592 }
1593 }
1594
1595 -static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
1596 - u32 len, u32 type, bool chain)
1597 +static void dwc3_ep0_prepare_one_trb(struct dwc3 *dwc, u8 epnum,
1598 + dma_addr_t buf_dma, u32 len, u32 type, bool chain)
1599 {
1600 - struct dwc3_gadget_ep_cmd_params params;
1601 struct dwc3_trb *trb;
1602 struct dwc3_ep *dep;
1603
1604 - int ret;
1605 -
1606 dep = dwc->eps[epnum];
1607 - if (dep->flags & DWC3_EP_BUSY) {
1608 - dwc3_trace(trace_dwc3_ep0, "%s still busy", dep->name);
1609 - return 0;
1610 - }
1611
1612 trb = &dwc->ep0_trb[dep->free_slot];
1613
1614 @@ -89,15 +82,25 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
1615 trb->ctrl |= (DWC3_TRB_CTRL_IOC
1616 | DWC3_TRB_CTRL_LST);
1617
1618 - if (chain)
1619 + trace_dwc3_prepare_trb(dep, trb);
1620 +}
1621 +
1622 +static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum)
1623 +{
1624 + struct dwc3_gadget_ep_cmd_params params;
1625 + struct dwc3_ep *dep;
1626 + int ret;
1627 +
1628 + dep = dwc->eps[epnum];
1629 + if (dep->flags & DWC3_EP_BUSY) {
1630 + dwc3_trace(trace_dwc3_ep0, "%s still busy", dep->name);
1631 return 0;
1632 + }
1633
1634 memset(&params, 0, sizeof(params));
1635 params.param0 = upper_32_bits(dwc->ep0_trb_addr);
1636 params.param1 = lower_32_bits(dwc->ep0_trb_addr);
1637
1638 - trace_dwc3_prepare_trb(dep, trb);
1639 -
1640 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1641 DWC3_DEPCMD_STARTTRANSFER, &params);
1642 if (ret < 0) {
1643 @@ -311,8 +314,9 @@ void dwc3_ep0_out_start(struct dwc3 *dwc)
1644 {
1645 int ret;
1646
1647 - ret = dwc3_ep0_start_trans(dwc, 0, dwc->ctrl_req_addr, 8,
1648 + dwc3_ep0_prepare_one_trb(dwc, 0, dwc->ctrl_req_addr, 8,
1649 DWC3_TRBCTL_CONTROL_SETUP, false);
1650 + ret = dwc3_ep0_start_trans(dwc, 0);
1651 WARN_ON(ret < 0);
1652 }
1653
1654 @@ -871,9 +875,9 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
1655
1656 dwc->ep0_next_event = DWC3_EP0_COMPLETE;
1657
1658 - ret = dwc3_ep0_start_trans(dwc, epnum,
1659 - dwc->ctrl_req_addr, 0,
1660 - DWC3_TRBCTL_CONTROL_DATA, false);
1661 + dwc3_ep0_prepare_one_trb(dwc, epnum, dwc->ctrl_req_addr,
1662 + 0, DWC3_TRBCTL_CONTROL_DATA, false);
1663 + ret = dwc3_ep0_start_trans(dwc, epnum);
1664 WARN_ON(ret < 0);
1665 }
1666 }
1667 @@ -955,9 +959,10 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
1668 req->direction = !!dep->number;
1669
1670 if (req->request.length == 0) {
1671 - ret = dwc3_ep0_start_trans(dwc, dep->number,
1672 + dwc3_ep0_prepare_one_trb(dwc, dep->number,
1673 dwc->ctrl_req_addr, 0,
1674 DWC3_TRBCTL_CONTROL_DATA, false);
1675 + ret = dwc3_ep0_start_trans(dwc, dep->number);
1676 } else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket)
1677 && (dep->number == 0)) {
1678 u32 transfer_size = 0;
1679 @@ -975,7 +980,7 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
1680 if (req->request.length > DWC3_EP0_BOUNCE_SIZE) {
1681 transfer_size = ALIGN(req->request.length - maxpacket,
1682 maxpacket);
1683 - ret = dwc3_ep0_start_trans(dwc, dep->number,
1684 + dwc3_ep0_prepare_one_trb(dwc, dep->number,
1685 req->request.dma,
1686 transfer_size,
1687 DWC3_TRBCTL_CONTROL_DATA,
1688 @@ -987,9 +992,10 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
1689
1690 dwc->ep0_bounced = true;
1691
1692 - ret = dwc3_ep0_start_trans(dwc, dep->number,
1693 + dwc3_ep0_prepare_one_trb(dwc, dep->number,
1694 dwc->ep0_bounce_addr, transfer_size,
1695 DWC3_TRBCTL_CONTROL_DATA, false);
1696 + ret = dwc3_ep0_start_trans(dwc, dep->number);
1697 } else {
1698 ret = usb_gadget_map_request(&dwc->gadget, &req->request,
1699 dep->number);
1700 @@ -998,9 +1004,10 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
1701 return;
1702 }
1703
1704 - ret = dwc3_ep0_start_trans(dwc, dep->number, req->request.dma,
1705 + dwc3_ep0_prepare_one_trb(dwc, dep->number, req->request.dma,
1706 req->request.length, DWC3_TRBCTL_CONTROL_DATA,
1707 false);
1708 + ret = dwc3_ep0_start_trans(dwc, dep->number);
1709 }
1710
1711 WARN_ON(ret < 0);
1712 @@ -1014,8 +1021,9 @@ static int dwc3_ep0_start_control_status(struct dwc3_ep *dep)
1713 type = dwc->three_stage_setup ? DWC3_TRBCTL_CONTROL_STATUS3
1714 : DWC3_TRBCTL_CONTROL_STATUS2;
1715
1716 - return dwc3_ep0_start_trans(dwc, dep->number,
1717 + dwc3_ep0_prepare_one_trb(dwc, dep->number,
1718 dwc->ctrl_req_addr, 0, type, false);
1719 + return dwc3_ep0_start_trans(dwc, dep->number);
1720 }
1721
1722 static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
1723 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
1724 index 5ae2b7d3a74a..210ff64857e1 100644
1725 --- a/drivers/usb/dwc3/gadget.c
1726 +++ b/drivers/usb/dwc3/gadget.c
1727 @@ -259,11 +259,11 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
1728 if (req->request.status == -EINPROGRESS)
1729 req->request.status = status;
1730
1731 - if (dwc->ep0_bounced && dep->number == 0)
1732 + if (dwc->ep0_bounced && dep->number <= 1)
1733 dwc->ep0_bounced = false;
1734 - else
1735 - usb_gadget_unmap_request(&dwc->gadget, &req->request,
1736 - req->direction);
1737 +
1738 + usb_gadget_unmap_request(&dwc->gadget, &req->request,
1739 + req->direction);
1740
1741 dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n",
1742 req, dep->name, req->request.actual,
1743 diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
1744 index 739b5e2d8adb..e2641d4dfdd6 100644
1745 --- a/drivers/usb/gadget/composite.c
1746 +++ b/drivers/usb/gadget/composite.c
1747 @@ -152,7 +152,7 @@ ep_found:
1748
1749 if (g->speed == USB_SPEED_HIGH && (usb_endpoint_xfer_isoc(_ep->desc) ||
1750 usb_endpoint_xfer_int(_ep->desc)))
1751 - _ep->mult = usb_endpoint_maxp(_ep->desc) & 0x7ff;
1752 + _ep->mult = ((usb_endpoint_maxp(_ep->desc) & 0x1800) >> 11) + 1;
1753
1754 if (!want_comp_desc)
1755 return 0;
1756 @@ -1601,9 +1601,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1757 value = min(w_length, (u16) 1);
1758 break;
1759
1760 - /* function drivers must handle get/set altsetting; if there's
1761 - * no get() method, we know only altsetting zero works.
1762 - */
1763 + /* function drivers must handle get/set altsetting */
1764 case USB_REQ_SET_INTERFACE:
1765 if (ctrl->bRequestType != USB_RECIP_INTERFACE)
1766 goto unknown;
1767 @@ -1612,7 +1610,13 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1768 f = cdev->config->interface[intf];
1769 if (!f)
1770 break;
1771 - if (w_value && !f->set_alt)
1772 +
1773 + /*
1774 + * If there's no get_alt() method, we know only altsetting zero
1775 + * works. There is no need to check if set_alt() is not NULL
1776 + * as we check this in usb_add_function().
1777 + */
1778 + if (w_value && !f->get_alt)
1779 break;
1780 value = f->set_alt(f, w_index, w_value);
1781 if (value == USB_GADGET_DELAYED_STATUS) {
1782 diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
1783 index e57f48f9528f..de014436fb22 100644
1784 --- a/drivers/usb/gadget/legacy/inode.c
1785 +++ b/drivers/usb/gadget/legacy/inode.c
1786 @@ -1125,7 +1125,7 @@ ep0_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
1787 /* data and/or status stage for control request */
1788 } else if (dev->state == STATE_DEV_SETUP) {
1789
1790 - /* IN DATA+STATUS caller makes len <= wLength */
1791 + len = min_t(size_t, len, dev->setup_wLength);
1792 if (dev->setup_in) {
1793 retval = setup_req (dev->gadget->ep0, dev->req, len);
1794 if (retval == 0) {
1795 @@ -1755,10 +1755,12 @@ static struct usb_gadget_driver probe_driver = {
1796 * such as configuration notifications.
1797 */
1798
1799 -static int is_valid_config (struct usb_config_descriptor *config)
1800 +static int is_valid_config(struct usb_config_descriptor *config,
1801 + unsigned int total)
1802 {
1803 return config->bDescriptorType == USB_DT_CONFIG
1804 && config->bLength == USB_DT_CONFIG_SIZE
1805 + && total >= USB_DT_CONFIG_SIZE
1806 && config->bConfigurationValue != 0
1807 && (config->bmAttributes & USB_CONFIG_ATT_ONE) != 0
1808 && (config->bmAttributes & USB_CONFIG_ATT_WAKEUP) == 0;
1809 @@ -1783,7 +1785,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
1810 }
1811 spin_unlock_irq(&dev->lock);
1812
1813 - if (len < (USB_DT_CONFIG_SIZE + USB_DT_DEVICE_SIZE + 4))
1814 + if ((len < (USB_DT_CONFIG_SIZE + USB_DT_DEVICE_SIZE + 4)) ||
1815 + (len > PAGE_SIZE * 4))
1816 return -EINVAL;
1817
1818 /* we might need to change message format someday */
1819 @@ -1807,7 +1810,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
1820 /* full or low speed config */
1821 dev->config = (void *) kbuf;
1822 total = le16_to_cpu(dev->config->wTotalLength);
1823 - if (!is_valid_config (dev->config) || total >= length)
1824 + if (!is_valid_config(dev->config, total) ||
1825 + total > length - USB_DT_DEVICE_SIZE)
1826 goto fail;
1827 kbuf += total;
1828 length -= total;
1829 @@ -1816,10 +1820,13 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
1830 if (kbuf [1] == USB_DT_CONFIG) {
1831 dev->hs_config = (void *) kbuf;
1832 total = le16_to_cpu(dev->hs_config->wTotalLength);
1833 - if (!is_valid_config (dev->hs_config) || total >= length)
1834 + if (!is_valid_config(dev->hs_config, total) ||
1835 + total > length - USB_DT_DEVICE_SIZE)
1836 goto fail;
1837 kbuf += total;
1838 length -= total;
1839 + } else {
1840 + dev->hs_config = NULL;
1841 }
1842
1843 /* could support multiple configs, using another encoding! */
1844 diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
1845 index dde44450dfa9..22d067cd5aa3 100644
1846 --- a/drivers/usb/gadget/udc/dummy_hcd.c
1847 +++ b/drivers/usb/gadget/udc/dummy_hcd.c
1848 @@ -330,7 +330,7 @@ static void nuke(struct dummy *dum, struct dummy_ep *ep)
1849 /* caller must hold lock */
1850 static void stop_activity(struct dummy *dum)
1851 {
1852 - struct dummy_ep *ep;
1853 + int i;
1854
1855 /* prevent any more requests */
1856 dum->address = 0;
1857 @@ -338,8 +338,8 @@ static void stop_activity(struct dummy *dum)
1858 /* The timer is left running so that outstanding URBs can fail */
1859
1860 /* nuke any pending requests first, so driver i/o is quiesced */
1861 - list_for_each_entry(ep, &dum->gadget.ep_list, ep.ep_list)
1862 - nuke(dum, ep);
1863 + for (i = 0; i < DUMMY_ENDPOINTS; ++i)
1864 + nuke(dum, &dum->ep[i]);
1865
1866 /* driver now does any non-usb quiescing necessary */
1867 }
1868 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
1869 index b9d6940479da..e9675e8f0e54 100644
1870 --- a/drivers/usb/host/xhci-hub.c
1871 +++ b/drivers/usb/host/xhci-hub.c
1872 @@ -1346,6 +1346,35 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
1873 return 0;
1874 }
1875
1876 +/*
1877 + * Workaround for missing Cold Attach Status (CAS) if device re-plugged in S3.
1878 + * warm reset a USB3 device stuck in polling or compliance mode after resume.
1879 + * See Intel 100/c230 series PCH specification update Doc #332692-006 Errata #8
1880 + */
1881 +static bool xhci_port_missing_cas_quirk(int port_index,
1882 + __le32 __iomem **port_array)
1883 +{
1884 + u32 portsc;
1885 +
1886 + portsc = readl(port_array[port_index]);
1887 +
1888 + /* if any of these are set we are not stuck */
1889 + if (portsc & (PORT_CONNECT | PORT_CAS))
1890 + return false;
1891 +
1892 + if (((portsc & PORT_PLS_MASK) != XDEV_POLLING) &&
1893 + ((portsc & PORT_PLS_MASK) != XDEV_COMP_MODE))
1894 + return false;
1895 +
1896 + /* clear wakeup/change bits, and do a warm port reset */
1897 + portsc &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS);
1898 + portsc |= PORT_WR;
1899 + writel(portsc, port_array[port_index]);
1900 + /* flush write */
1901 + readl(port_array[port_index]);
1902 + return true;
1903 +}
1904 +
1905 int xhci_bus_resume(struct usb_hcd *hcd)
1906 {
1907 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
1908 @@ -1383,6 +1412,14 @@ int xhci_bus_resume(struct usb_hcd *hcd)
1909 u32 temp;
1910
1911 temp = readl(port_array[port_index]);
1912 +
1913 + /* warm reset CAS limited ports stuck in polling/compliance */
1914 + if ((xhci->quirks & XHCI_MISSING_CAS) &&
1915 + (hcd->speed >= HCD_USB3) &&
1916 + xhci_port_missing_cas_quirk(port_index, port_array)) {
1917 + xhci_dbg(xhci, "reset stuck port %d\n", port_index);
1918 + continue;
1919 + }
1920 if (DEV_SUPERSPEED_ANY(temp))
1921 temp &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS);
1922 else
1923 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1924 index 8ea2c05beca2..998a738e6359 100644
1925 --- a/drivers/usb/host/xhci-mem.c
1926 +++ b/drivers/usb/host/xhci-mem.c
1927 @@ -964,6 +964,40 @@ void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id)
1928 xhci->devs[slot_id] = NULL;
1929 }
1930
1931 +/*
1932 + * Free a virt_device structure.
1933 + * If the virt_device added a tt_info (a hub) and has children pointing to
1934 + * that tt_info, then free the child first. Recursive.
1935 + * We can't rely on udev at this point to find child-parent relationships.
1936 + */
1937 +void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
1938 +{
1939 + struct xhci_virt_device *vdev;
1940 + struct list_head *tt_list_head;
1941 + struct xhci_tt_bw_info *tt_info, *next;
1942 + int i;
1943 +
1944 + vdev = xhci->devs[slot_id];
1945 + if (!vdev)
1946 + return;
1947 +
1948 + tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts);
1949 + list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) {
1950 + /* is this a hub device that added a tt_info to the tts list */
1951 + if (tt_info->slot_id == slot_id) {
1952 + /* are any devices using this tt_info? */
1953 + for (i = 1; i < HCS_MAX_SLOTS(xhci->hcs_params1); i++) {
1954 + vdev = xhci->devs[i];
1955 + if (vdev && (vdev->tt_info == tt_info))
1956 + xhci_free_virt_devices_depth_first(
1957 + xhci, i);
1958 + }
1959 + }
1960 + }
1961 + /* we are now at a leaf device */
1962 + xhci_free_virt_device(xhci, slot_id);
1963 +}
1964 +
1965 int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
1966 struct usb_device *udev, gfp_t flags)
1967 {
1968 @@ -1795,7 +1829,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1969 int size;
1970 int i, j, num_ports;
1971
1972 - del_timer_sync(&xhci->cmd_timer);
1973 + cancel_delayed_work_sync(&xhci->cmd_timer);
1974
1975 /* Free the Event Ring Segment Table and the actual Event Ring */
1976 size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
1977 @@ -1828,8 +1862,8 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1978 }
1979 }
1980
1981 - for (i = 1; i < MAX_HC_SLOTS; ++i)
1982 - xhci_free_virt_device(xhci, i);
1983 + for (i = HCS_MAX_SLOTS(xhci->hcs_params1); i > 0; i--)
1984 + xhci_free_virt_devices_depth_first(xhci, i);
1985
1986 dma_pool_destroy(xhci->segment_pool);
1987 xhci->segment_pool = NULL;
1988 @@ -2361,9 +2395,9 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1989
1990 INIT_LIST_HEAD(&xhci->cmd_list);
1991
1992 - /* init command timeout timer */
1993 - setup_timer(&xhci->cmd_timer, xhci_handle_command_timeout,
1994 - (unsigned long)xhci);
1995 + /* init command timeout work */
1996 + INIT_DELAYED_WORK(&xhci->cmd_timer, xhci_handle_command_timeout);
1997 + init_completion(&xhci->cmd_ring_stop_completion);
1998
1999 page_size = readl(&xhci->op_regs->page_size);
2000 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
2001 @@ -2402,7 +2436,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2002 * "physically contiguous and 64-byte (cache line) aligned".
2003 */
2004 xhci->dcbaa = dma_alloc_coherent(dev, sizeof(*xhci->dcbaa), &dma,
2005 - GFP_KERNEL);
2006 + flags);
2007 if (!xhci->dcbaa)
2008 goto fail;
2009 memset(xhci->dcbaa, 0, sizeof *(xhci->dcbaa));
2010 @@ -2498,7 +2532,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2011
2012 xhci->erst.entries = dma_alloc_coherent(dev,
2013 sizeof(struct xhci_erst_entry) * ERST_NUM_SEGS, &dma,
2014 - GFP_KERNEL);
2015 + flags);
2016 if (!xhci->erst.entries)
2017 goto fail;
2018 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
2019 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
2020 index cf147ccac7d3..dd262f418140 100644
2021 --- a/drivers/usb/host/xhci-pci.c
2022 +++ b/drivers/usb/host/xhci-pci.c
2023 @@ -51,6 +51,7 @@
2024 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI 0x9d2f
2025 #define PCI_DEVICE_ID_INTEL_BROXTON_M_XHCI 0x0aa8
2026 #define PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI 0x1aa8
2027 +#define PCI_DEVICE_ID_INTEL_APL_XHCI 0x5aa8
2028
2029 static const char hcd_name[] = "xhci_hcd";
2030
2031 @@ -165,9 +166,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
2032 pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI ||
2033 pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI ||
2034 pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_M_XHCI ||
2035 - pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI)) {
2036 + pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI ||
2037 + pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI)) {
2038 xhci->quirks |= XHCI_PME_STUCK_QUIRK;
2039 }
2040 + if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
2041 + (pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI ||
2042 + pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI))
2043 + xhci->quirks |= XHCI_MISSING_CAS;
2044 +
2045 if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
2046 pdev->device == PCI_DEVICE_ID_EJ168) {
2047 xhci->quirks |= XHCI_RESET_ON_RESUME;
2048 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
2049 index 62a5c8d5e028..fa5d8c2f6982 100644
2050 --- a/drivers/usb/host/xhci-ring.c
2051 +++ b/drivers/usb/host/xhci-ring.c
2052 @@ -280,23 +280,76 @@ void xhci_ring_cmd_db(struct xhci_hcd *xhci)
2053 readl(&xhci->dba->doorbell[0]);
2054 }
2055
2056 -static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
2057 +static bool xhci_mod_cmd_timer(struct xhci_hcd *xhci, unsigned long delay)
2058 +{
2059 + return mod_delayed_work(system_wq, &xhci->cmd_timer, delay);
2060 +}
2061 +
2062 +static struct xhci_command *xhci_next_queued_cmd(struct xhci_hcd *xhci)
2063 +{
2064 + return list_first_entry_or_null(&xhci->cmd_list, struct xhci_command,
2065 + cmd_list);
2066 +}
2067 +
2068 +/*
2069 + * Turn all commands on command ring with status set to "aborted" to no-op trbs.
2070 + * If there are other commands waiting then restart the ring and kick the timer.
2071 + * This must be called with command ring stopped and xhci->lock held.
2072 + */
2073 +static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
2074 + struct xhci_command *cur_cmd)
2075 +{
2076 + struct xhci_command *i_cmd;
2077 + u32 cycle_state;
2078 +
2079 + /* Turn all aborted commands in list to no-ops, then restart */
2080 + list_for_each_entry(i_cmd, &xhci->cmd_list, cmd_list) {
2081 +
2082 + if (i_cmd->status != COMP_CMD_ABORT)
2083 + continue;
2084 +
2085 + i_cmd->status = COMP_CMD_STOP;
2086 +
2087 + xhci_dbg(xhci, "Turn aborted command %p to no-op\n",
2088 + i_cmd->command_trb);
2089 + /* get cycle state from the original cmd trb */
2090 + cycle_state = le32_to_cpu(
2091 + i_cmd->command_trb->generic.field[3]) & TRB_CYCLE;
2092 + /* modify the command trb to no-op command */
2093 + i_cmd->command_trb->generic.field[0] = 0;
2094 + i_cmd->command_trb->generic.field[1] = 0;
2095 + i_cmd->command_trb->generic.field[2] = 0;
2096 + i_cmd->command_trb->generic.field[3] = cpu_to_le32(
2097 + TRB_TYPE(TRB_CMD_NOOP) | cycle_state);
2098 +
2099 + /*
2100 + * caller waiting for completion is called when command
2101 + * completion event is received for these no-op commands
2102 + */
2103 + }
2104 +
2105 + xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
2106 +
2107 + /* ring command ring doorbell to restart the command ring */
2108 + if ((xhci->cmd_ring->dequeue != xhci->cmd_ring->enqueue) &&
2109 + !(xhci->xhc_state & XHCI_STATE_DYING)) {
2110 + xhci->current_cmd = cur_cmd;
2111 + xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
2112 + xhci_ring_cmd_db(xhci);
2113 + }
2114 +}
2115 +
2116 +/* Must be called with xhci->lock held, releases and aquires lock back */
2117 +static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, unsigned long flags)
2118 {
2119 u64 temp_64;
2120 int ret;
2121
2122 xhci_dbg(xhci, "Abort command ring\n");
2123
2124 - temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
2125 - xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
2126 + reinit_completion(&xhci->cmd_ring_stop_completion);
2127
2128 - /*
2129 - * Writing the CMD_RING_ABORT bit should cause a cmd completion event,
2130 - * however on some host hw the CMD_RING_RUNNING bit is correctly cleared
2131 - * but the completion event in never sent. Use the cmd timeout timer to
2132 - * handle those cases. Use twice the time to cover the bit polling retry
2133 - */
2134 - mod_timer(&xhci->cmd_timer, jiffies + (2 * XHCI_CMD_DEFAULT_TIMEOUT));
2135 + temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
2136 xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
2137 &xhci->op_regs->cmd_ring);
2138
2139 @@ -316,16 +369,30 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
2140 udelay(1000);
2141 ret = xhci_handshake(&xhci->op_regs->cmd_ring,
2142 CMD_RING_RUNNING, 0, 3 * 1000 * 1000);
2143 - if (ret == 0)
2144 - return 0;
2145 -
2146 - xhci_err(xhci, "Stopped the command ring failed, "
2147 - "maybe the host is dead\n");
2148 - del_timer(&xhci->cmd_timer);
2149 - xhci->xhc_state |= XHCI_STATE_DYING;
2150 - xhci_quiesce(xhci);
2151 - xhci_halt(xhci);
2152 - return -ESHUTDOWN;
2153 + if (ret < 0) {
2154 + xhci_err(xhci, "Stopped the command ring failed, "
2155 + "maybe the host is dead\n");
2156 + xhci->xhc_state |= XHCI_STATE_DYING;
2157 + xhci_quiesce(xhci);
2158 + xhci_halt(xhci);
2159 + return -ESHUTDOWN;
2160 + }
2161 + }
2162 + /*
2163 + * Writing the CMD_RING_ABORT bit should cause a cmd completion event,
2164 + * however on some host hw the CMD_RING_RUNNING bit is correctly cleared
2165 + * but the completion event in never sent. Wait 2 secs (arbitrary
2166 + * number) to handle those cases after negation of CMD_RING_RUNNING.
2167 + */
2168 + spin_unlock_irqrestore(&xhci->lock, flags);
2169 + ret = wait_for_completion_timeout(&xhci->cmd_ring_stop_completion,
2170 + msecs_to_jiffies(2000));
2171 + spin_lock_irqsave(&xhci->lock, flags);
2172 + if (!ret) {
2173 + xhci_dbg(xhci, "No stop event for abort, ring start fail?\n");
2174 + xhci_cleanup_command_queue(xhci);
2175 + } else {
2176 + xhci_handle_stopped_cmd_ring(xhci, xhci_next_queued_cmd(xhci));
2177 }
2178
2179 return 0;
2180 @@ -1208,101 +1275,62 @@ void xhci_cleanup_command_queue(struct xhci_hcd *xhci)
2181 xhci_complete_del_and_free_cmd(cur_cmd, COMP_CMD_ABORT);
2182 }
2183
2184 -/*
2185 - * Turn all commands on command ring with status set to "aborted" to no-op trbs.
2186 - * If there are other commands waiting then restart the ring and kick the timer.
2187 - * This must be called with command ring stopped and xhci->lock held.
2188 - */
2189 -static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
2190 - struct xhci_command *cur_cmd)
2191 -{
2192 - struct xhci_command *i_cmd, *tmp_cmd;
2193 - u32 cycle_state;
2194 -
2195 - /* Turn all aborted commands in list to no-ops, then restart */
2196 - list_for_each_entry_safe(i_cmd, tmp_cmd, &xhci->cmd_list,
2197 - cmd_list) {
2198 -
2199 - if (i_cmd->status != COMP_CMD_ABORT)
2200 - continue;
2201 -
2202 - i_cmd->status = COMP_CMD_STOP;
2203 -
2204 - xhci_dbg(xhci, "Turn aborted command %p to no-op\n",
2205 - i_cmd->command_trb);
2206 - /* get cycle state from the original cmd trb */
2207 - cycle_state = le32_to_cpu(
2208 - i_cmd->command_trb->generic.field[3]) & TRB_CYCLE;
2209 - /* modify the command trb to no-op command */
2210 - i_cmd->command_trb->generic.field[0] = 0;
2211 - i_cmd->command_trb->generic.field[1] = 0;
2212 - i_cmd->command_trb->generic.field[2] = 0;
2213 - i_cmd->command_trb->generic.field[3] = cpu_to_le32(
2214 - TRB_TYPE(TRB_CMD_NOOP) | cycle_state);
2215 -
2216 - /*
2217 - * caller waiting for completion is called when command
2218 - * completion event is received for these no-op commands
2219 - */
2220 - }
2221 -
2222 - xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
2223 -
2224 - /* ring command ring doorbell to restart the command ring */
2225 - if ((xhci->cmd_ring->dequeue != xhci->cmd_ring->enqueue) &&
2226 - !(xhci->xhc_state & XHCI_STATE_DYING)) {
2227 - xhci->current_cmd = cur_cmd;
2228 - mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
2229 - xhci_ring_cmd_db(xhci);
2230 - }
2231 - return;
2232 -}
2233 -
2234 -
2235 -void xhci_handle_command_timeout(unsigned long data)
2236 +void xhci_handle_command_timeout(struct work_struct *work)
2237 {
2238 struct xhci_hcd *xhci;
2239 int ret;
2240 unsigned long flags;
2241 u64 hw_ring_state;
2242 - bool second_timeout = false;
2243 - xhci = (struct xhci_hcd *) data;
2244
2245 - /* mark this command to be cancelled */
2246 + xhci = container_of(to_delayed_work(work), struct xhci_hcd, cmd_timer);
2247 +
2248 spin_lock_irqsave(&xhci->lock, flags);
2249 - if (xhci->current_cmd) {
2250 - if (xhci->current_cmd->status == COMP_CMD_ABORT)
2251 - second_timeout = true;
2252 - xhci->current_cmd->status = COMP_CMD_ABORT;
2253 +
2254 + /*
2255 + * If timeout work is pending, or current_cmd is NULL, it means we
2256 + * raced with command completion. Command is handled so just return.
2257 + */
2258 + if (!xhci->current_cmd || delayed_work_pending(&xhci->cmd_timer)) {
2259 + spin_unlock_irqrestore(&xhci->lock, flags);
2260 + return;
2261 }
2262 + /* mark this command to be cancelled */
2263 + xhci->current_cmd->status = COMP_CMD_ABORT;
2264
2265 /* Make sure command ring is running before aborting it */
2266 hw_ring_state = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
2267 if ((xhci->cmd_ring_state & CMD_RING_STATE_RUNNING) &&
2268 (hw_ring_state & CMD_RING_RUNNING)) {
2269 - spin_unlock_irqrestore(&xhci->lock, flags);
2270 + /* Prevent new doorbell, and start command abort */
2271 + xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
2272 xhci_dbg(xhci, "Command timeout\n");
2273 - ret = xhci_abort_cmd_ring(xhci);
2274 + ret = xhci_abort_cmd_ring(xhci, flags);
2275 if (unlikely(ret == -ESHUTDOWN)) {
2276 xhci_err(xhci, "Abort command ring failed\n");
2277 xhci_cleanup_command_queue(xhci);
2278 + spin_unlock_irqrestore(&xhci->lock, flags);
2279 usb_hc_died(xhci_to_hcd(xhci)->primary_hcd);
2280 xhci_dbg(xhci, "xHCI host controller is dead.\n");
2281 +
2282 + return;
2283 }
2284 - return;
2285 +
2286 + goto time_out_completed;
2287 }
2288
2289 - /* command ring failed to restart, or host removed. Bail out */
2290 - if (second_timeout || xhci->xhc_state & XHCI_STATE_REMOVING) {
2291 - spin_unlock_irqrestore(&xhci->lock, flags);
2292 - xhci_dbg(xhci, "command timed out twice, ring start fail?\n");
2293 + /* host removed. Bail out */
2294 + if (xhci->xhc_state & XHCI_STATE_REMOVING) {
2295 + xhci_dbg(xhci, "host removed, ring start fail?\n");
2296 xhci_cleanup_command_queue(xhci);
2297 - return;
2298 +
2299 + goto time_out_completed;
2300 }
2301
2302 /* command timeout on stopped ring, ring can't be aborted */
2303 xhci_dbg(xhci, "Command timeout on stopped ring\n");
2304 xhci_handle_stopped_cmd_ring(xhci, xhci->current_cmd);
2305 +
2306 +time_out_completed:
2307 spin_unlock_irqrestore(&xhci->lock, flags);
2308 return;
2309 }
2310 @@ -1335,7 +1363,7 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
2311
2312 cmd = list_entry(xhci->cmd_list.next, struct xhci_command, cmd_list);
2313
2314 - del_timer(&xhci->cmd_timer);
2315 + cancel_delayed_work(&xhci->cmd_timer);
2316
2317 trace_xhci_cmd_completion(cmd_trb, (struct xhci_generic_trb *) event);
2318
2319 @@ -1343,7 +1371,7 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
2320
2321 /* If CMD ring stopped we own the trbs between enqueue and dequeue */
2322 if (cmd_comp_code == COMP_CMD_STOP) {
2323 - xhci_handle_stopped_cmd_ring(xhci, cmd);
2324 + complete_all(&xhci->cmd_ring_stop_completion);
2325 return;
2326 }
2327
2328 @@ -1361,8 +1389,11 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
2329 */
2330 if (cmd_comp_code == COMP_CMD_ABORT) {
2331 xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
2332 - if (cmd->status == COMP_CMD_ABORT)
2333 + if (cmd->status == COMP_CMD_ABORT) {
2334 + if (xhci->current_cmd == cmd)
2335 + xhci->current_cmd = NULL;
2336 goto event_handled;
2337 + }
2338 }
2339
2340 cmd_type = TRB_FIELD_TO_TYPE(le32_to_cpu(cmd_trb->generic.field[3]));
2341 @@ -1423,7 +1454,9 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
2342 if (cmd->cmd_list.next != &xhci->cmd_list) {
2343 xhci->current_cmd = list_entry(cmd->cmd_list.next,
2344 struct xhci_command, cmd_list);
2345 - mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
2346 + xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
2347 + } else if (xhci->current_cmd == cmd) {
2348 + xhci->current_cmd = NULL;
2349 }
2350
2351 event_handled:
2352 @@ -4056,9 +4089,9 @@ static int queue_command(struct xhci_hcd *xhci, struct xhci_command *cmd,
2353
2354 /* if there are no other commands queued we start the timeout timer */
2355 if (xhci->cmd_list.next == &cmd->cmd_list &&
2356 - !timer_pending(&xhci->cmd_timer)) {
2357 + !delayed_work_pending(&xhci->cmd_timer)) {
2358 xhci->current_cmd = cmd;
2359 - mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
2360 + xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
2361 }
2362
2363 queue_trb(xhci, xhci->cmd_ring, false, field1, field2, field3,
2364 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
2365 index adc169d2fd76..a8b3c0fc11fb 100644
2366 --- a/drivers/usb/host/xhci.c
2367 +++ b/drivers/usb/host/xhci.c
2368 @@ -3808,8 +3808,10 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev,
2369
2370 mutex_lock(&xhci->mutex);
2371
2372 - if (xhci->xhc_state) /* dying, removing or halted */
2373 + if (xhci->xhc_state) { /* dying, removing or halted */
2374 + ret = -ESHUTDOWN;
2375 goto out;
2376 + }
2377
2378 if (!udev->slot_id) {
2379 xhci_dbg_trace(xhci, trace_xhci_dbg_address,
2380 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
2381 index 99ac2289dbf3..fc2ee6c272c4 100644
2382 --- a/drivers/usb/host/xhci.h
2383 +++ b/drivers/usb/host/xhci.h
2384 @@ -312,6 +312,8 @@ struct xhci_op_regs {
2385 #define XDEV_U2 (0x2 << 5)
2386 #define XDEV_U3 (0x3 << 5)
2387 #define XDEV_INACTIVE (0x6 << 5)
2388 +#define XDEV_POLLING (0x7 << 5)
2389 +#define XDEV_COMP_MODE (0xa << 5)
2390 #define XDEV_RESUME (0xf << 5)
2391 /* true: port has power (see HCC_PPC) */
2392 #define PORT_POWER (1 << 9)
2393 @@ -1550,7 +1552,8 @@ struct xhci_hcd {
2394 #define CMD_RING_STATE_STOPPED (1 << 2)
2395 struct list_head cmd_list;
2396 unsigned int cmd_ring_reserved_trbs;
2397 - struct timer_list cmd_timer;
2398 + struct delayed_work cmd_timer;
2399 + struct completion cmd_ring_stop_completion;
2400 struct xhci_command *current_cmd;
2401 struct xhci_ring *event_ring;
2402 struct xhci_erst erst;
2403 @@ -1631,6 +1634,7 @@ struct xhci_hcd {
2404 /* For controllers with a broken beyond repair streams implementation */
2405 #define XHCI_BROKEN_STREAMS (1 << 19)
2406 #define XHCI_PME_STUCK_QUIRK (1 << 20)
2407 +#define XHCI_MISSING_CAS (1 << 24)
2408 unsigned int num_active_eps;
2409 unsigned int limit_active_eps;
2410 /* There are two roothubs to keep track of bus suspend info for */
2411 @@ -1912,7 +1916,7 @@ void xhci_queue_config_ep_quirk(struct xhci_hcd *xhci,
2412 unsigned int slot_id, unsigned int ep_index,
2413 struct xhci_dequeue_state *deq_state);
2414 void xhci_stop_endpoint_command_watchdog(unsigned long arg);
2415 -void xhci_handle_command_timeout(unsigned long data);
2416 +void xhci_handle_command_timeout(struct work_struct *work);
2417
2418 void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
2419 unsigned int ep_index, unsigned int stream_id);
2420 diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
2421 index 310238c6b5cd..896798071817 100644
2422 --- a/drivers/usb/musb/blackfin.c
2423 +++ b/drivers/usb/musb/blackfin.c
2424 @@ -469,6 +469,7 @@ static const struct musb_platform_ops bfin_ops = {
2425 .init = bfin_musb_init,
2426 .exit = bfin_musb_exit,
2427
2428 + .fifo_offset = bfin_fifo_offset,
2429 .readb = bfin_readb,
2430 .writeb = bfin_writeb,
2431 .readw = bfin_readw,
2432 diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
2433 index 2337d7a7d62d..90de7900e4b8 100644
2434 --- a/drivers/usb/musb/musb_core.h
2435 +++ b/drivers/usb/musb/musb_core.h
2436 @@ -214,6 +214,7 @@ struct musb_platform_ops {
2437 dma_addr_t *dma_addr, u32 *len);
2438 void (*pre_root_reset_end)(struct musb *musb);
2439 void (*post_root_reset_end)(struct musb *musb);
2440 + void (*clear_ep_rxintr)(struct musb *musb, int epnum);
2441 };
2442
2443 /*
2444 @@ -612,4 +613,10 @@ static inline void musb_platform_post_root_reset_end(struct musb *musb)
2445 musb->ops->post_root_reset_end(musb);
2446 }
2447
2448 +static inline void musb_platform_clear_ep_rxintr(struct musb *musb, int epnum)
2449 +{
2450 + if (musb->ops->clear_ep_rxintr)
2451 + musb->ops->clear_ep_rxintr(musb, epnum);
2452 +}
2453 +
2454 #endif /* __MUSB_CORE_H__ */
2455 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
2456 index eeb7d9ecf7df..5a021b26d7d2 100644
2457 --- a/drivers/usb/musb/musb_dsps.c
2458 +++ b/drivers/usb/musb/musb_dsps.c
2459 @@ -301,6 +301,17 @@ static void otg_timer(unsigned long _musb)
2460 spin_unlock_irqrestore(&musb->lock, flags);
2461 }
2462
2463 +void dsps_musb_clear_ep_rxintr(struct musb *musb, int epnum)
2464 +{
2465 + u32 epintr;
2466 + struct dsps_glue *glue = dev_get_drvdata(musb->controller->parent);
2467 + const struct dsps_musb_wrapper *wrp = glue->wrp;
2468 +
2469 + /* musb->lock might already been held */
2470 + epintr = (1 << epnum) << wrp->rxep_shift;
2471 + musb_writel(musb->ctrl_base, wrp->epintr_status, epintr);
2472 +}
2473 +
2474 static irqreturn_t dsps_interrupt(int irq, void *hci)
2475 {
2476 struct musb *musb = hci;
2477 @@ -647,6 +658,7 @@ static struct musb_platform_ops dsps_ops = {
2478 .try_idle = dsps_musb_try_idle,
2479 .set_mode = dsps_musb_set_mode,
2480 .recover = dsps_musb_recover,
2481 + .clear_ep_rxintr = dsps_musb_clear_ep_rxintr,
2482 };
2483
2484 static u64 musb_dmamask = DMA_BIT_MASK(32);
2485 diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
2486 index e0a083f6ab68..13d5614f37f1 100644
2487 --- a/drivers/usb/musb/musb_host.c
2488 +++ b/drivers/usb/musb/musb_host.c
2489 @@ -2390,12 +2390,11 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
2490 int is_in = usb_pipein(urb->pipe);
2491 int status = 0;
2492 u16 csr;
2493 + struct dma_channel *dma = NULL;
2494
2495 musb_ep_select(regs, hw_end);
2496
2497 if (is_dma_capable()) {
2498 - struct dma_channel *dma;
2499 -
2500 dma = is_in ? ep->rx_channel : ep->tx_channel;
2501 if (dma) {
2502 status = ep->musb->dma_controller->channel_abort(dma);
2503 @@ -2412,10 +2411,9 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
2504 /* giveback saves bulk toggle */
2505 csr = musb_h_flush_rxfifo(ep, 0);
2506
2507 - /* REVISIT we still get an irq; should likely clear the
2508 - * endpoint's irq status here to avoid bogus irqs.
2509 - * clearing that status is platform-specific...
2510 - */
2511 + /* clear the endpoint's irq status here to avoid bogus irqs */
2512 + if (is_dma_capable() && dma)
2513 + musb_platform_clear_ep_rxintr(musb, ep->epnum);
2514 } else if (ep->epnum) {
2515 musb_h_tx_flush_fifo(ep);
2516 csr = musb_readw(epio, MUSB_TXCSR);
2517 diff --git a/drivers/usb/musb/musbhsdma.h b/drivers/usb/musb/musbhsdma.h
2518 index f7b13fd25257..a3dcbd55e436 100644
2519 --- a/drivers/usb/musb/musbhsdma.h
2520 +++ b/drivers/usb/musb/musbhsdma.h
2521 @@ -157,5 +157,5 @@ struct musb_dma_controller {
2522 void __iomem *base;
2523 u8 channel_count;
2524 u8 used_channels;
2525 - u8 irq;
2526 + int irq;
2527 };
2528 diff --git a/drivers/usb/phy/phy-am335x-control.c b/drivers/usb/phy/phy-am335x-control.c
2529 index 7b3035ff9434..1b4d742a2397 100644
2530 --- a/drivers/usb/phy/phy-am335x-control.c
2531 +++ b/drivers/usb/phy/phy-am335x-control.c
2532 @@ -126,10 +126,12 @@ struct phy_control *am335x_get_phy_control(struct device *dev)
2533 return NULL;
2534
2535 dev = bus_find_device(&platform_bus_type, NULL, node, match);
2536 + of_node_put(node);
2537 if (!dev)
2538 return NULL;
2539
2540 ctrl_usb = dev_get_drvdata(dev);
2541 + put_device(dev);
2542 if (!ctrl_usb)
2543 return NULL;
2544 return &ctrl_usb->phy_ctrl;
2545 diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
2546 index 2916dea3ede8..8948f375e75d 100644
2547 --- a/drivers/usb/serial/cyberjack.c
2548 +++ b/drivers/usb/serial/cyberjack.c
2549 @@ -50,6 +50,7 @@
2550 #define CYBERJACK_PRODUCT_ID 0x0100
2551
2552 /* Function prototypes */
2553 +static int cyberjack_attach(struct usb_serial *serial);
2554 static int cyberjack_port_probe(struct usb_serial_port *port);
2555 static int cyberjack_port_remove(struct usb_serial_port *port);
2556 static int cyberjack_open(struct tty_struct *tty,
2557 @@ -77,6 +78,7 @@ static struct usb_serial_driver cyberjack_device = {
2558 .description = "Reiner SCT Cyberjack USB card reader",
2559 .id_table = id_table,
2560 .num_ports = 1,
2561 + .attach = cyberjack_attach,
2562 .port_probe = cyberjack_port_probe,
2563 .port_remove = cyberjack_port_remove,
2564 .open = cyberjack_open,
2565 @@ -100,6 +102,14 @@ struct cyberjack_private {
2566 short wrsent; /* Data already sent */
2567 };
2568
2569 +static int cyberjack_attach(struct usb_serial *serial)
2570 +{
2571 + if (serial->num_bulk_out < serial->num_ports)
2572 + return -ENODEV;
2573 +
2574 + return 0;
2575 +}
2576 +
2577 static int cyberjack_port_probe(struct usb_serial_port *port)
2578 {
2579 struct cyberjack_private *priv;
2580 diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
2581 index db591d19d416..37d0e8cc7af6 100644
2582 --- a/drivers/usb/serial/garmin_gps.c
2583 +++ b/drivers/usb/serial/garmin_gps.c
2584 @@ -1044,6 +1044,7 @@ static int garmin_write_bulk(struct usb_serial_port *port,
2585 "%s - usb_submit_urb(write bulk) failed with status = %d\n",
2586 __func__, status);
2587 count = status;
2588 + kfree(buffer);
2589 }
2590
2591 /* we are done with this urb, so let the host driver
2592 diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
2593 index 1947ea0e0988..b63a6c3899c5 100644
2594 --- a/drivers/usb/serial/io_edgeport.c
2595 +++ b/drivers/usb/serial/io_edgeport.c
2596 @@ -2761,6 +2761,11 @@ static int edge_startup(struct usb_serial *serial)
2597 EDGE_COMPATIBILITY_MASK1,
2598 EDGE_COMPATIBILITY_MASK2 };
2599
2600 + if (serial->num_bulk_in < 1 || serial->num_interrupt_in < 1) {
2601 + dev_err(&serial->interface->dev, "missing endpoints\n");
2602 + return -ENODEV;
2603 + }
2604 +
2605 dev = serial->dev;
2606
2607 /* create our private serial structure */
2608 diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
2609 index fce82fd79f77..c02808a30436 100644
2610 --- a/drivers/usb/serial/io_ti.c
2611 +++ b/drivers/usb/serial/io_ti.c
2612 @@ -1499,8 +1499,7 @@ static int do_boot_mode(struct edgeport_serial *serial,
2613
2614 dev_dbg(dev, "%s - Download successful -- Device rebooting...\n", __func__);
2615
2616 - /* return an error on purpose */
2617 - return -ENODEV;
2618 + return 1;
2619 }
2620
2621 stayinbootmode:
2622 @@ -1508,7 +1507,7 @@ stayinbootmode:
2623 dev_dbg(dev, "%s - STAYING IN BOOT MODE\n", __func__);
2624 serial->product_info.TiMode = TI_MODE_BOOT;
2625
2626 - return 0;
2627 + return 1;
2628 }
2629
2630 static int ti_do_config(struct edgeport_port *port, int feature, int on)
2631 @@ -2549,6 +2548,13 @@ static int edge_startup(struct usb_serial *serial)
2632 int status;
2633 u16 product_id;
2634
2635 + /* Make sure we have the required endpoints when in download mode. */
2636 + if (serial->interface->cur_altsetting->desc.bNumEndpoints > 1) {
2637 + if (serial->num_bulk_in < serial->num_ports ||
2638 + serial->num_bulk_out < serial->num_ports)
2639 + return -ENODEV;
2640 + }
2641 +
2642 /* create our private serial structure */
2643 edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL);
2644 if (!edge_serial)
2645 @@ -2556,14 +2562,18 @@ static int edge_startup(struct usb_serial *serial)
2646
2647 mutex_init(&edge_serial->es_lock);
2648 edge_serial->serial = serial;
2649 + INIT_DELAYED_WORK(&edge_serial->heartbeat_work, edge_heartbeat_work);
2650 usb_set_serial_data(serial, edge_serial);
2651
2652 status = download_fw(edge_serial);
2653 - if (status) {
2654 + if (status < 0) {
2655 kfree(edge_serial);
2656 return status;
2657 }
2658
2659 + if (status > 0)
2660 + return 1; /* bind but do not register any ports */
2661 +
2662 product_id = le16_to_cpu(
2663 edge_serial->serial->dev->descriptor.idProduct);
2664
2665 @@ -2575,7 +2585,6 @@ static int edge_startup(struct usb_serial *serial)
2666 }
2667 }
2668
2669 - INIT_DELAYED_WORK(&edge_serial->heartbeat_work, edge_heartbeat_work);
2670 edge_heartbeat_schedule(edge_serial);
2671
2672 return 0;
2673 @@ -2583,6 +2592,9 @@ static int edge_startup(struct usb_serial *serial)
2674
2675 static void edge_disconnect(struct usb_serial *serial)
2676 {
2677 + struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
2678 +
2679 + cancel_delayed_work_sync(&edge_serial->heartbeat_work);
2680 }
2681
2682 static void edge_release(struct usb_serial *serial)
2683 diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
2684 index 5ad4a0fb4b26..7ed7d33d6c10 100644
2685 --- a/drivers/usb/serial/iuu_phoenix.c
2686 +++ b/drivers/usb/serial/iuu_phoenix.c
2687 @@ -68,6 +68,16 @@ struct iuu_private {
2688 u32 clk;
2689 };
2690
2691 +static int iuu_attach(struct usb_serial *serial)
2692 +{
2693 + unsigned char num_ports = serial->num_ports;
2694 +
2695 + if (serial->num_bulk_in < num_ports || serial->num_bulk_out < num_ports)
2696 + return -ENODEV;
2697 +
2698 + return 0;
2699 +}
2700 +
2701 static int iuu_port_probe(struct usb_serial_port *port)
2702 {
2703 struct iuu_private *priv;
2704 @@ -1196,6 +1206,7 @@ static struct usb_serial_driver iuu_device = {
2705 .tiocmset = iuu_tiocmset,
2706 .set_termios = iuu_set_termios,
2707 .init_termios = iuu_init_termios,
2708 + .attach = iuu_attach,
2709 .port_probe = iuu_port_probe,
2710 .port_remove = iuu_port_remove,
2711 };
2712 diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
2713 index 4f7e072e4e00..930be98d59b3 100644
2714 --- a/drivers/usb/serial/keyspan_pda.c
2715 +++ b/drivers/usb/serial/keyspan_pda.c
2716 @@ -699,6 +699,19 @@ MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
2717 MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
2718 #endif
2719
2720 +static int keyspan_pda_attach(struct usb_serial *serial)
2721 +{
2722 + unsigned char num_ports = serial->num_ports;
2723 +
2724 + if (serial->num_bulk_out < num_ports ||
2725 + serial->num_interrupt_in < num_ports) {
2726 + dev_err(&serial->interface->dev, "missing endpoints\n");
2727 + return -ENODEV;
2728 + }
2729 +
2730 + return 0;
2731 +}
2732 +
2733 static int keyspan_pda_port_probe(struct usb_serial_port *port)
2734 {
2735
2736 @@ -776,6 +789,7 @@ static struct usb_serial_driver keyspan_pda_device = {
2737 .break_ctl = keyspan_pda_break_ctl,
2738 .tiocmget = keyspan_pda_tiocmget,
2739 .tiocmset = keyspan_pda_tiocmset,
2740 + .attach = keyspan_pda_attach,
2741 .port_probe = keyspan_pda_port_probe,
2742 .port_remove = keyspan_pda_port_remove,
2743 };
2744 diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
2745 index 53c90131764d..cd0322502ab1 100644
2746 --- a/drivers/usb/serial/kl5kusb105.c
2747 +++ b/drivers/usb/serial/kl5kusb105.c
2748 @@ -311,6 +311,7 @@ static int klsi_105_open(struct tty_struct *tty, struct usb_serial_port *port)
2749 if (rc < 0) {
2750 dev_err(&port->dev, "Enabling read failed (error = %d)\n", rc);
2751 retval = rc;
2752 + goto err_generic_close;
2753 } else
2754 dev_dbg(&port->dev, "%s - enabled reading\n", __func__);
2755
2756 @@ -337,6 +338,7 @@ err_disable_read:
2757 0, /* index */
2758 NULL, 0,
2759 KLSI_TIMEOUT);
2760 +err_generic_close:
2761 usb_serial_generic_close(port);
2762 err_free_cfg:
2763 kfree(cfg);
2764 diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
2765 index 2363654cafc9..813035f51fe7 100644
2766 --- a/drivers/usb/serial/kobil_sct.c
2767 +++ b/drivers/usb/serial/kobil_sct.c
2768 @@ -51,6 +51,7 @@
2769
2770
2771 /* Function prototypes */
2772 +static int kobil_attach(struct usb_serial *serial);
2773 static int kobil_port_probe(struct usb_serial_port *probe);
2774 static int kobil_port_remove(struct usb_serial_port *probe);
2775 static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port);
2776 @@ -86,6 +87,7 @@ static struct usb_serial_driver kobil_device = {
2777 .description = "KOBIL USB smart card terminal",
2778 .id_table = id_table,
2779 .num_ports = 1,
2780 + .attach = kobil_attach,
2781 .port_probe = kobil_port_probe,
2782 .port_remove = kobil_port_remove,
2783 .ioctl = kobil_ioctl,
2784 @@ -113,6 +115,16 @@ struct kobil_private {
2785 };
2786
2787
2788 +static int kobil_attach(struct usb_serial *serial)
2789 +{
2790 + if (serial->num_interrupt_out < serial->num_ports) {
2791 + dev_err(&serial->interface->dev, "missing interrupt-out endpoint\n");
2792 + return -ENODEV;
2793 + }
2794 +
2795 + return 0;
2796 +}
2797 +
2798 static int kobil_port_probe(struct usb_serial_port *port)
2799 {
2800 struct usb_serial *serial = port->serial;
2801 diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
2802 index 63db004af21f..e56cdb436de3 100644
2803 --- a/drivers/usb/serial/mos7720.c
2804 +++ b/drivers/usb/serial/mos7720.c
2805 @@ -65,8 +65,6 @@ struct moschip_port {
2806 struct urb *write_urb_pool[NUM_URBS];
2807 };
2808
2809 -static struct usb_serial_driver moschip7720_2port_driver;
2810 -
2811 #define USB_VENDOR_ID_MOSCHIP 0x9710
2812 #define MOSCHIP_DEVICE_ID_7720 0x7720
2813 #define MOSCHIP_DEVICE_ID_7715 0x7715
2814 @@ -970,25 +968,6 @@ static void mos7720_bulk_out_data_callback(struct urb *urb)
2815 tty_port_tty_wakeup(&mos7720_port->port->port);
2816 }
2817
2818 -/*
2819 - * mos77xx_probe
2820 - * this function installs the appropriate read interrupt endpoint callback
2821 - * depending on whether the device is a 7720 or 7715, thus avoiding costly
2822 - * run-time checks in the high-frequency callback routine itself.
2823 - */
2824 -static int mos77xx_probe(struct usb_serial *serial,
2825 - const struct usb_device_id *id)
2826 -{
2827 - if (id->idProduct == MOSCHIP_DEVICE_ID_7715)
2828 - moschip7720_2port_driver.read_int_callback =
2829 - mos7715_interrupt_callback;
2830 - else
2831 - moschip7720_2port_driver.read_int_callback =
2832 - mos7720_interrupt_callback;
2833 -
2834 - return 0;
2835 -}
2836 -
2837 static int mos77xx_calc_num_ports(struct usb_serial *serial)
2838 {
2839 u16 product = le16_to_cpu(serial->dev->descriptor.idProduct);
2840 @@ -1920,6 +1899,11 @@ static int mos7720_startup(struct usb_serial *serial)
2841 u16 product;
2842 int ret_val;
2843
2844 + if (serial->num_bulk_in < 2 || serial->num_bulk_out < 2) {
2845 + dev_err(&serial->interface->dev, "missing bulk endpoints\n");
2846 + return -ENODEV;
2847 + }
2848 +
2849 product = le16_to_cpu(serial->dev->descriptor.idProduct);
2850 dev = serial->dev;
2851
2852 @@ -1944,19 +1928,18 @@ static int mos7720_startup(struct usb_serial *serial)
2853 tmp->interrupt_in_endpointAddress;
2854 serial->port[1]->interrupt_in_urb = NULL;
2855 serial->port[1]->interrupt_in_buffer = NULL;
2856 +
2857 + if (serial->port[0]->interrupt_in_urb) {
2858 + struct urb *urb = serial->port[0]->interrupt_in_urb;
2859 +
2860 + urb->complete = mos7715_interrupt_callback;
2861 + }
2862 }
2863
2864 /* setting configuration feature to one */
2865 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2866 (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000);
2867
2868 - /* start the interrupt urb */
2869 - ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
2870 - if (ret_val)
2871 - dev_err(&dev->dev,
2872 - "%s - Error %d submitting control urb\n",
2873 - __func__, ret_val);
2874 -
2875 #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT
2876 if (product == MOSCHIP_DEVICE_ID_7715) {
2877 ret_val = mos7715_parport_init(serial);
2878 @@ -1964,6 +1947,13 @@ static int mos7720_startup(struct usb_serial *serial)
2879 return ret_val;
2880 }
2881 #endif
2882 + /* start the interrupt urb */
2883 + ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
2884 + if (ret_val) {
2885 + dev_err(&dev->dev, "failed to submit interrupt urb: %d\n",
2886 + ret_val);
2887 + }
2888 +
2889 /* LSR For Port 1 */
2890 read_mos_reg(serial, 0, MOS7720_LSR, &data);
2891 dev_dbg(&dev->dev, "LSR:%x\n", data);
2892 @@ -1973,6 +1963,8 @@ static int mos7720_startup(struct usb_serial *serial)
2893
2894 static void mos7720_release(struct usb_serial *serial)
2895 {
2896 + usb_kill_urb(serial->port[0]->interrupt_in_urb);
2897 +
2898 #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT
2899 /* close the parallel port */
2900
2901 @@ -2056,7 +2048,6 @@ static struct usb_serial_driver moschip7720_2port_driver = {
2902 .close = mos7720_close,
2903 .throttle = mos7720_throttle,
2904 .unthrottle = mos7720_unthrottle,
2905 - .probe = mos77xx_probe,
2906 .attach = mos7720_startup,
2907 .release = mos7720_release,
2908 .port_probe = mos7720_port_probe,
2909 @@ -2070,7 +2061,7 @@ static struct usb_serial_driver moschip7720_2port_driver = {
2910 .chars_in_buffer = mos7720_chars_in_buffer,
2911 .break_ctl = mos7720_break,
2912 .read_bulk_callback = mos7720_bulk_in_callback,
2913 - .read_int_callback = NULL /* dynamically assigned in probe() */
2914 + .read_int_callback = mos7720_interrupt_callback,
2915 };
2916
2917 static struct usb_serial_driver * const serial_drivers[] = {
2918 diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
2919 index 7f3ddd7ba2ce..97ea52b5cfd4 100644
2920 --- a/drivers/usb/serial/mos7840.c
2921 +++ b/drivers/usb/serial/mos7840.c
2922 @@ -2116,6 +2116,17 @@ static int mos7840_calc_num_ports(struct usb_serial *serial)
2923 return mos7840_num_ports;
2924 }
2925
2926 +static int mos7840_attach(struct usb_serial *serial)
2927 +{
2928 + if (serial->num_bulk_in < serial->num_ports ||
2929 + serial->num_bulk_out < serial->num_ports) {
2930 + dev_err(&serial->interface->dev, "missing endpoints\n");
2931 + return -ENODEV;
2932 + }
2933 +
2934 + return 0;
2935 +}
2936 +
2937 static int mos7840_port_probe(struct usb_serial_port *port)
2938 {
2939 struct usb_serial *serial = port->serial;
2940 @@ -2391,6 +2402,7 @@ static struct usb_serial_driver moschip7840_4port_device = {
2941 .tiocmset = mos7840_tiocmset,
2942 .tiocmiwait = usb_serial_generic_tiocmiwait,
2943 .get_icount = usb_serial_generic_get_icount,
2944 + .attach = mos7840_attach,
2945 .port_probe = mos7840_port_probe,
2946 .port_remove = mos7840_port_remove,
2947 .read_bulk_callback = mos7840_bulk_in_callback,
2948 diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
2949 index f6c6900bccf0..a180b17d2432 100644
2950 --- a/drivers/usb/serial/omninet.c
2951 +++ b/drivers/usb/serial/omninet.c
2952 @@ -38,6 +38,7 @@ static int omninet_write(struct tty_struct *tty, struct usb_serial_port *port,
2953 const unsigned char *buf, int count);
2954 static int omninet_write_room(struct tty_struct *tty);
2955 static void omninet_disconnect(struct usb_serial *serial);
2956 +static int omninet_attach(struct usb_serial *serial);
2957 static int omninet_port_probe(struct usb_serial_port *port);
2958 static int omninet_port_remove(struct usb_serial_port *port);
2959
2960 @@ -56,6 +57,7 @@ static struct usb_serial_driver zyxel_omninet_device = {
2961 .description = "ZyXEL - omni.net lcd plus usb",
2962 .id_table = id_table,
2963 .num_ports = 1,
2964 + .attach = omninet_attach,
2965 .port_probe = omninet_port_probe,
2966 .port_remove = omninet_port_remove,
2967 .open = omninet_open,
2968 @@ -104,6 +106,17 @@ struct omninet_data {
2969 __u8 od_outseq; /* Sequence number for bulk_out URBs */
2970 };
2971
2972 +static int omninet_attach(struct usb_serial *serial)
2973 +{
2974 + /* The second bulk-out endpoint is used for writing. */
2975 + if (serial->num_bulk_out < 2) {
2976 + dev_err(&serial->interface->dev, "missing endpoints\n");
2977 + return -ENODEV;
2978 + }
2979 +
2980 + return 0;
2981 +}
2982 +
2983 static int omninet_port_probe(struct usb_serial_port *port)
2984 {
2985 struct omninet_data *od;
2986 diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
2987 index a4b88bc038b6..b8bf52bf7a94 100644
2988 --- a/drivers/usb/serial/oti6858.c
2989 +++ b/drivers/usb/serial/oti6858.c
2990 @@ -134,6 +134,7 @@ static int oti6858_chars_in_buffer(struct tty_struct *tty);
2991 static int oti6858_tiocmget(struct tty_struct *tty);
2992 static int oti6858_tiocmset(struct tty_struct *tty,
2993 unsigned int set, unsigned int clear);
2994 +static int oti6858_attach(struct usb_serial *serial);
2995 static int oti6858_port_probe(struct usb_serial_port *port);
2996 static int oti6858_port_remove(struct usb_serial_port *port);
2997
2998 @@ -158,6 +159,7 @@ static struct usb_serial_driver oti6858_device = {
2999 .write_bulk_callback = oti6858_write_bulk_callback,
3000 .write_room = oti6858_write_room,
3001 .chars_in_buffer = oti6858_chars_in_buffer,
3002 + .attach = oti6858_attach,
3003 .port_probe = oti6858_port_probe,
3004 .port_remove = oti6858_port_remove,
3005 };
3006 @@ -324,6 +326,20 @@ static void send_data(struct work_struct *work)
3007 usb_serial_port_softint(port);
3008 }
3009
3010 +static int oti6858_attach(struct usb_serial *serial)
3011 +{
3012 + unsigned char num_ports = serial->num_ports;
3013 +
3014 + if (serial->num_bulk_in < num_ports ||
3015 + serial->num_bulk_out < num_ports ||
3016 + serial->num_interrupt_in < num_ports) {
3017 + dev_err(&serial->interface->dev, "missing endpoints\n");
3018 + return -ENODEV;
3019 + }
3020 +
3021 + return 0;
3022 +}
3023 +
3024 static int oti6858_port_probe(struct usb_serial_port *port)
3025 {
3026 struct oti6858_private *priv;
3027 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
3028 index ae682e4eeaef..46fca6b75846 100644
3029 --- a/drivers/usb/serial/pl2303.c
3030 +++ b/drivers/usb/serial/pl2303.c
3031 @@ -220,9 +220,17 @@ static int pl2303_probe(struct usb_serial *serial,
3032 static int pl2303_startup(struct usb_serial *serial)
3033 {
3034 struct pl2303_serial_private *spriv;
3035 + unsigned char num_ports = serial->num_ports;
3036 enum pl2303_type type = TYPE_01;
3037 unsigned char *buf;
3038
3039 + if (serial->num_bulk_in < num_ports ||
3040 + serial->num_bulk_out < num_ports ||
3041 + serial->num_interrupt_in < num_ports) {
3042 + dev_err(&serial->interface->dev, "missing endpoints\n");
3043 + return -ENODEV;
3044 + }
3045 +
3046 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
3047 if (!spriv)
3048 return -ENOMEM;
3049 diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
3050 index b18974cbd995..a3ed07c58754 100644
3051 --- a/drivers/usb/serial/quatech2.c
3052 +++ b/drivers/usb/serial/quatech2.c
3053 @@ -408,16 +408,12 @@ static void qt2_close(struct usb_serial_port *port)
3054 {
3055 struct usb_serial *serial;
3056 struct qt2_port_private *port_priv;
3057 - unsigned long flags;
3058 int i;
3059
3060 serial = port->serial;
3061 port_priv = usb_get_serial_port_data(port);
3062
3063 - spin_lock_irqsave(&port_priv->urb_lock, flags);
3064 usb_kill_urb(port_priv->write_urb);
3065 - port_priv->urb_in_use = false;
3066 - spin_unlock_irqrestore(&port_priv->urb_lock, flags);
3067
3068 /* flush the port transmit buffer */
3069 i = usb_control_msg(serial->dev,
3070 diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
3071 index ef0dbf0703c5..475e6c31b266 100644
3072 --- a/drivers/usb/serial/spcp8x5.c
3073 +++ b/drivers/usb/serial/spcp8x5.c
3074 @@ -154,6 +154,19 @@ static int spcp8x5_probe(struct usb_serial *serial,
3075 return 0;
3076 }
3077
3078 +static int spcp8x5_attach(struct usb_serial *serial)
3079 +{
3080 + unsigned char num_ports = serial->num_ports;
3081 +
3082 + if (serial->num_bulk_in < num_ports ||
3083 + serial->num_bulk_out < num_ports) {
3084 + dev_err(&serial->interface->dev, "missing endpoints\n");
3085 + return -ENODEV;
3086 + }
3087 +
3088 + return 0;
3089 +}
3090 +
3091 static int spcp8x5_port_probe(struct usb_serial_port *port)
3092 {
3093 const struct usb_device_id *id = usb_get_serial_data(port->serial);
3094 @@ -477,6 +490,7 @@ static struct usb_serial_driver spcp8x5_device = {
3095 .tiocmget = spcp8x5_tiocmget,
3096 .tiocmset = spcp8x5_tiocmset,
3097 .probe = spcp8x5_probe,
3098 + .attach = spcp8x5_attach,
3099 .port_probe = spcp8x5_port_probe,
3100 .port_remove = spcp8x5_port_remove,
3101 };
3102 diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
3103 index 2694df2f4559..535fcfafc097 100644
3104 --- a/drivers/usb/serial/ti_usb_3410_5052.c
3105 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
3106 @@ -339,6 +339,13 @@ static int ti_startup(struct usb_serial *serial)
3107 goto free_tdev;
3108 }
3109
3110 + if (serial->num_bulk_in < serial->num_ports ||
3111 + serial->num_bulk_out < serial->num_ports) {
3112 + dev_err(&serial->interface->dev, "missing endpoints\n");
3113 + status = -ENODEV;
3114 + goto free_tdev;
3115 + }
3116 +
3117 return 0;
3118
3119 free_tdev:
3120 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
3121 index 7ffe4209067b..640a2e2ec04d 100644
3122 --- a/drivers/usb/storage/unusual_devs.h
3123 +++ b/drivers/usb/storage/unusual_devs.h
3124 @@ -2135,6 +2135,13 @@ UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001,
3125 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3126 US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ),
3127
3128 +/* Reported-by George Cherian <george.cherian@cavium.com> */
3129 +UNUSUAL_DEV(0x152d, 0x9561, 0x0000, 0x9999,
3130 + "JMicron",
3131 + "JMS56x",
3132 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3133 + US_FL_NO_REPORT_OPCODES),
3134 +
3135 /*
3136 * Patch by Constantin Baranov <const@tltsu.ru>
3137 * Report by Andreas Koenecke.
3138 diff --git a/include/linux/capability.h b/include/linux/capability.h
3139 index 2654f75a4c46..b20ffe23a09b 100644
3140 --- a/include/linux/capability.h
3141 +++ b/include/linux/capability.h
3142 @@ -40,8 +40,6 @@ struct inode;
3143 struct dentry;
3144 struct user_namespace;
3145
3146 -struct user_namespace *current_user_ns(void);
3147 -
3148 extern const kernel_cap_t __cap_empty_set;
3149 extern const kernel_cap_t __cap_init_eff_set;
3150
3151 diff --git a/include/linux/cred.h b/include/linux/cred.h
3152 index 8d70e1361ecd..257db64562e5 100644
3153 --- a/include/linux/cred.h
3154 +++ b/include/linux/cred.h
3155 @@ -377,7 +377,10 @@ extern struct user_namespace init_user_ns;
3156 #ifdef CONFIG_USER_NS
3157 #define current_user_ns() (current_cred_xxx(user_ns))
3158 #else
3159 -#define current_user_ns() (&init_user_ns)
3160 +static inline struct user_namespace *current_user_ns(void)
3161 +{
3162 + return &init_user_ns;
3163 +}
3164 #endif
3165
3166
3167 diff --git a/kernel/cpu.c b/kernel/cpu.c
3168 index cd6d1258554e..40d20bf5de28 100644
3169 --- a/kernel/cpu.c
3170 +++ b/kernel/cpu.c
3171 @@ -223,10 +223,6 @@ static int cpu_notify(unsigned long val, void *v)
3172 return __cpu_notify(val, v, -1, NULL);
3173 }
3174
3175 -static void cpu_notify_nofail(unsigned long val, void *v)
3176 -{
3177 - BUG_ON(cpu_notify(val, v));
3178 -}
3179 EXPORT_SYMBOL(register_cpu_notifier);
3180 EXPORT_SYMBOL(__register_cpu_notifier);
3181
3182 @@ -245,6 +241,11 @@ void __unregister_cpu_notifier(struct notifier_block *nb)
3183 EXPORT_SYMBOL(__unregister_cpu_notifier);
3184
3185 #ifdef CONFIG_HOTPLUG_CPU
3186 +static void cpu_notify_nofail(unsigned long val, void *v)
3187 +{
3188 + BUG_ON(cpu_notify(val, v));
3189 +}
3190 +
3191 /**
3192 * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU
3193 * @cpu: a CPU id
3194 diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
3195 index f6aae7977824..d2a20e83ebae 100644
3196 --- a/kernel/time/tick-broadcast.c
3197 +++ b/kernel/time/tick-broadcast.c
3198 @@ -871,6 +871,9 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
3199 {
3200 int cpu = smp_processor_id();
3201
3202 + if (!bc)
3203 + return;
3204 +
3205 /* Set it up only once ! */
3206 if (bc->event_handler != tick_handle_oneshot_broadcast) {
3207 int was_periodic = clockevent_state_periodic(bc);
3208 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
3209 index e1225b395415..ea5dfefd765a 100644
3210 --- a/net/mac80211/tx.c
3211 +++ b/net/mac80211/tx.c
3212 @@ -2699,7 +2699,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
3213 int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
3214 int hw_headroom = sdata->local->hw.extra_tx_headroom;
3215 struct ethhdr eth;
3216 - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3217 + struct ieee80211_tx_info *info;
3218 struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
3219 struct ieee80211_tx_data tx;
3220 ieee80211_tx_result r;
3221 @@ -2761,6 +2761,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
3222 memcpy(skb->data + fast_tx->da_offs, eth.h_dest, ETH_ALEN);
3223 memcpy(skb->data + fast_tx->sa_offs, eth.h_source, ETH_ALEN);
3224
3225 + info = IEEE80211_SKB_CB(skb);
3226 memset(info, 0, sizeof(*info));
3227 info->band = fast_tx->band;
3228 info->control.vif = &sdata->vif;
3229 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3230 index 3b2687889cd5..00c50d58f108 100644
3231 --- a/sound/pci/hda/patch_realtek.c
3232 +++ b/sound/pci/hda/patch_realtek.c
3233 @@ -2230,6 +2230,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
3234 SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC),
3235 SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601),
3236 SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS),
3237 + SND_PCI_QUIRK(0x1043, 0x8691, "ASUS ROG Ranger VIII", ALC882_FIXUP_GPIO3),
3238 SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
3239 SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
3240 SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
3241 @@ -6892,6 +6893,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
3242 SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
3243 SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
3244 SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51),
3245 + SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8),
3246 SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
3247 SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
3248 SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
3249 diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
3250 index e163b0148c4b..fd6e247d9fd8 100644
3251 --- a/sound/soc/samsung/i2s.c
3252 +++ b/sound/soc/samsung/i2s.c
3253 @@ -1027,12 +1027,13 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)
3254 static int samsung_i2s_dai_remove(struct snd_soc_dai *dai)
3255 {
3256 struct i2s_dai *i2s = snd_soc_dai_get_drvdata(dai);
3257 + unsigned long flags;
3258
3259 if (!is_secondary(i2s)) {
3260 if (i2s->quirks & QUIRK_NEED_RSTCLR) {
3261 - spin_lock(i2s->lock);
3262 + spin_lock_irqsave(i2s->lock, flags);
3263 writel(0, i2s->addr + I2SCON);
3264 - spin_unlock(i2s->lock);
3265 + spin_unlock_irqrestore(i2s->lock, flags);
3266 }
3267 }
3268
3269 diff --git a/sound/usb/card.c b/sound/usb/card.c
3270 index 1f09d9591276..a1cbaa5f7fc9 100644
3271 --- a/sound/usb/card.c
3272 +++ b/sound/usb/card.c
3273 @@ -202,7 +202,6 @@ static int snd_usb_create_stream(struct snd_usb_audio *chip, int ctrlif, int int
3274 if (! snd_usb_parse_audio_interface(chip, interface)) {
3275 usb_set_interface(dev, interface, 0); /* reset the current interface */
3276 usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
3277 - return -EINVAL;
3278 }
3279
3280 return 0;
3281 diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
3282 index c07a7eda42a2..be1f511e4f54 100644
3283 --- a/sound/usb/endpoint.c
3284 +++ b/sound/usb/endpoint.c
3285 @@ -538,6 +538,11 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep)
3286 alive, ep->ep_num);
3287 clear_bit(EP_FLAG_STOPPING, &ep->flags);
3288
3289 + ep->data_subs = NULL;
3290 + ep->sync_slave = NULL;
3291 + ep->retire_data_urb = NULL;
3292 + ep->prepare_data_urb = NULL;
3293 +
3294 return 0;
3295 }
3296
3297 @@ -902,9 +907,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
3298 /**
3299 * snd_usb_endpoint_start: start an snd_usb_endpoint
3300 *
3301 - * @ep: the endpoint to start
3302 - * @can_sleep: flag indicating whether the operation is executed in
3303 - * non-atomic context
3304 + * @ep: the endpoint to start
3305 *
3306 * A call to this function will increment the use count of the endpoint.
3307 * In case it is not already running, the URBs for this endpoint will be
3308 @@ -914,7 +917,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
3309 *
3310 * Returns an error if the URB submission failed, 0 in all other cases.
3311 */
3312 -int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep)
3313 +int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
3314 {
3315 int err;
3316 unsigned int i;
3317 @@ -928,8 +931,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep)
3318
3319 /* just to be sure */
3320 deactivate_urbs(ep, false);
3321 - if (can_sleep)
3322 - wait_clear_urbs(ep);
3323
3324 ep->active_mask = 0;
3325 ep->unlink_mask = 0;
3326 @@ -1010,10 +1011,6 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep)
3327
3328 if (--ep->use_count == 0) {
3329 deactivate_urbs(ep, false);
3330 - ep->data_subs = NULL;
3331 - ep->sync_slave = NULL;
3332 - ep->retire_data_urb = NULL;
3333 - ep->prepare_data_urb = NULL;
3334 set_bit(EP_FLAG_STOPPING, &ep->flags);
3335 }
3336 }
3337 diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h
3338 index 6428392d8f62..584f295d7c77 100644
3339 --- a/sound/usb/endpoint.h
3340 +++ b/sound/usb/endpoint.h
3341 @@ -18,7 +18,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
3342 struct audioformat *fmt,
3343 struct snd_usb_endpoint *sync_ep);
3344
3345 -int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep);
3346 +int snd_usb_endpoint_start(struct snd_usb_endpoint *ep);
3347 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep);
3348 void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep);
3349 int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
3350 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
3351 index 44d178ee9177..48afae053c56 100644
3352 --- a/sound/usb/pcm.c
3353 +++ b/sound/usb/pcm.c
3354 @@ -218,7 +218,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface,
3355 }
3356 }
3357
3358 -static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
3359 +static int start_endpoints(struct snd_usb_substream *subs)
3360 {
3361 int err;
3362
3363 @@ -231,7 +231,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
3364 dev_dbg(&subs->dev->dev, "Starting data EP @%p\n", ep);
3365
3366 ep->data_subs = subs;
3367 - err = snd_usb_endpoint_start(ep, can_sleep);
3368 + err = snd_usb_endpoint_start(ep);
3369 if (err < 0) {
3370 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);
3371 return err;
3372 @@ -260,7 +260,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
3373 dev_dbg(&subs->dev->dev, "Starting sync EP @%p\n", ep);
3374
3375 ep->sync_slave = subs->data_endpoint;
3376 - err = snd_usb_endpoint_start(ep, can_sleep);
3377 + err = snd_usb_endpoint_start(ep);
3378 if (err < 0) {
3379 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);
3380 return err;
3381 @@ -839,7 +839,7 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
3382 /* for playback, submit the URBs now; otherwise, the first hwptr_done
3383 * updates for all URBs would happen at the same time when starting */
3384 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
3385 - ret = start_endpoints(subs, true);
3386 + ret = start_endpoints(subs);
3387
3388 unlock:
3389 snd_usb_unlock_shutdown(subs->stream->chip);
3390 @@ -1655,7 +1655,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream
3391
3392 switch (cmd) {
3393 case SNDRV_PCM_TRIGGER_START:
3394 - err = start_endpoints(subs, false);
3395 + err = start_endpoints(subs);
3396 if (err < 0)
3397 return err;
3398