Contents of /trunk/kernel-alx/patches-3.18/0104-3.18.5-all-fixes.patch
Parent Directory | Revision Log
Revision 2553 -
(show annotations)
(download)
Wed Mar 18 09:24:38 2015 UTC (9 years, 6 months ago) by niro
File size: 132162 byte(s)
Wed Mar 18 09:24:38 2015 UTC (9 years, 6 months ago) by niro
File size: 132162 byte(s)
-import from kernel-magellan
1 | diff --git a/Makefile b/Makefile |
2 | index 4e9328491c1e..6276fcaabf21 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 3 |
7 | PATCHLEVEL = 18 |
8 | -SUBLEVEL = 4 |
9 | +SUBLEVEL = 5 |
10 | EXTRAVERSION = |
11 | NAME = Diseased Newt |
12 | |
13 | diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi |
14 | index d238676a9107..e4d3aecc4ed2 100644 |
15 | --- a/arch/arm/boot/dts/imx25.dtsi |
16 | +++ b/arch/arm/boot/dts/imx25.dtsi |
17 | @@ -369,7 +369,7 @@ |
18 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; |
19 | #pwm-cells = <2>; |
20 | reg = <0x53fa0000 0x4000>; |
21 | - clocks = <&clks 106>, <&clks 36>; |
22 | + clocks = <&clks 106>, <&clks 52>; |
23 | clock-names = "ipg", "per"; |
24 | interrupts = <36>; |
25 | }; |
26 | @@ -388,7 +388,7 @@ |
27 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; |
28 | #pwm-cells = <2>; |
29 | reg = <0x53fa8000 0x4000>; |
30 | - clocks = <&clks 107>, <&clks 36>; |
31 | + clocks = <&clks 107>, <&clks 52>; |
32 | clock-names = "ipg", "per"; |
33 | interrupts = <41>; |
34 | }; |
35 | @@ -429,7 +429,7 @@ |
36 | pwm4: pwm@53fc8000 { |
37 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; |
38 | reg = <0x53fc8000 0x4000>; |
39 | - clocks = <&clks 108>, <&clks 36>; |
40 | + clocks = <&clks 108>, <&clks 52>; |
41 | clock-names = "ipg", "per"; |
42 | interrupts = <42>; |
43 | }; |
44 | @@ -476,7 +476,7 @@ |
45 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; |
46 | #pwm-cells = <2>; |
47 | reg = <0x53fe0000 0x4000>; |
48 | - clocks = <&clks 105>, <&clks 36>; |
49 | + clocks = <&clks 105>, <&clks 52>; |
50 | clock-names = "ipg", "per"; |
51 | interrupts = <26>; |
52 | }; |
53 | diff --git a/arch/arm/crypto/aes_glue.c b/arch/arm/crypto/aes_glue.c |
54 | index 3003fa1f6fb4..0409b8f89782 100644 |
55 | --- a/arch/arm/crypto/aes_glue.c |
56 | +++ b/arch/arm/crypto/aes_glue.c |
57 | @@ -93,6 +93,6 @@ module_exit(aes_fini); |
58 | |
59 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm (ASM)"); |
60 | MODULE_LICENSE("GPL"); |
61 | -MODULE_ALIAS("aes"); |
62 | -MODULE_ALIAS("aes-asm"); |
63 | +MODULE_ALIAS_CRYPTO("aes"); |
64 | +MODULE_ALIAS_CRYPTO("aes-asm"); |
65 | MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>"); |
66 | diff --git a/arch/arm/crypto/sha1_glue.c b/arch/arm/crypto/sha1_glue.c |
67 | index 84f2a756588b..e31b0440c613 100644 |
68 | --- a/arch/arm/crypto/sha1_glue.c |
69 | +++ b/arch/arm/crypto/sha1_glue.c |
70 | @@ -171,5 +171,5 @@ module_exit(sha1_mod_fini); |
71 | |
72 | MODULE_LICENSE("GPL"); |
73 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm (ARM)"); |
74 | -MODULE_ALIAS("sha1"); |
75 | +MODULE_ALIAS_CRYPTO("sha1"); |
76 | MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>"); |
77 | diff --git a/arch/arm/crypto/sha1_neon_glue.c b/arch/arm/crypto/sha1_neon_glue.c |
78 | index 6f1b411b1d55..0b0083757d47 100644 |
79 | --- a/arch/arm/crypto/sha1_neon_glue.c |
80 | +++ b/arch/arm/crypto/sha1_neon_glue.c |
81 | @@ -194,4 +194,4 @@ module_exit(sha1_neon_mod_fini); |
82 | |
83 | MODULE_LICENSE("GPL"); |
84 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, NEON accelerated"); |
85 | -MODULE_ALIAS("sha1"); |
86 | +MODULE_ALIAS_CRYPTO("sha1"); |
87 | diff --git a/arch/arm/crypto/sha512_neon_glue.c b/arch/arm/crypto/sha512_neon_glue.c |
88 | index 0d2758ff5e12..f3452c66059d 100644 |
89 | --- a/arch/arm/crypto/sha512_neon_glue.c |
90 | +++ b/arch/arm/crypto/sha512_neon_glue.c |
91 | @@ -301,5 +301,5 @@ module_exit(sha512_neon_mod_fini); |
92 | MODULE_LICENSE("GPL"); |
93 | MODULE_DESCRIPTION("SHA512 Secure Hash Algorithm, NEON accelerated"); |
94 | |
95 | -MODULE_ALIAS("sha512"); |
96 | -MODULE_ALIAS("sha384"); |
97 | +MODULE_ALIAS_CRYPTO("sha512"); |
98 | +MODULE_ALIAS_CRYPTO("sha384"); |
99 | diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c |
100 | index c31f4c00b1fc..1163a3e9accd 100644 |
101 | --- a/arch/arm/mach-mvebu/coherency.c |
102 | +++ b/arch/arm/mach-mvebu/coherency.c |
103 | @@ -398,9 +398,14 @@ static int coherency_type(void) |
104 | return type; |
105 | } |
106 | |
107 | +/* |
108 | + * As a precaution, we currently completely disable hardware I/O |
109 | + * coherency, until enough testing is done with automatic I/O |
110 | + * synchronization barriers to validate that it is a proper solution. |
111 | + */ |
112 | int coherency_available(void) |
113 | { |
114 | - return coherency_type() != COHERENCY_FABRIC_TYPE_NONE; |
115 | + return false; |
116 | } |
117 | |
118 | int __init coherency_init(void) |
119 | diff --git a/arch/arm64/crypto/aes-ce-ccm-glue.c b/arch/arm64/crypto/aes-ce-ccm-glue.c |
120 | index 9e6cdde9b43d..0156a268e163 100644 |
121 | --- a/arch/arm64/crypto/aes-ce-ccm-glue.c |
122 | +++ b/arch/arm64/crypto/aes-ce-ccm-glue.c |
123 | @@ -294,4 +294,4 @@ module_exit(aes_mod_exit); |
124 | MODULE_DESCRIPTION("Synchronous AES in CCM mode using ARMv8 Crypto Extensions"); |
125 | MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>"); |
126 | MODULE_LICENSE("GPL v2"); |
127 | -MODULE_ALIAS("ccm(aes)"); |
128 | +MODULE_ALIAS_CRYPTO("ccm(aes)"); |
129 | diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c |
130 | index 79cd911ef88c..5f63a791b2fb 100644 |
131 | --- a/arch/arm64/crypto/aes-glue.c |
132 | +++ b/arch/arm64/crypto/aes-glue.c |
133 | @@ -38,10 +38,10 @@ MODULE_DESCRIPTION("AES-ECB/CBC/CTR/XTS using ARMv8 Crypto Extensions"); |
134 | #define aes_xts_encrypt neon_aes_xts_encrypt |
135 | #define aes_xts_decrypt neon_aes_xts_decrypt |
136 | MODULE_DESCRIPTION("AES-ECB/CBC/CTR/XTS using ARMv8 NEON"); |
137 | -MODULE_ALIAS("ecb(aes)"); |
138 | -MODULE_ALIAS("cbc(aes)"); |
139 | -MODULE_ALIAS("ctr(aes)"); |
140 | -MODULE_ALIAS("xts(aes)"); |
141 | +MODULE_ALIAS_CRYPTO("ecb(aes)"); |
142 | +MODULE_ALIAS_CRYPTO("cbc(aes)"); |
143 | +MODULE_ALIAS_CRYPTO("ctr(aes)"); |
144 | +MODULE_ALIAS_CRYPTO("xts(aes)"); |
145 | #endif |
146 | |
147 | MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>"); |
148 | diff --git a/arch/powerpc/crypto/sha1.c b/arch/powerpc/crypto/sha1.c |
149 | index f9e8b9491efc..b51da9132744 100644 |
150 | --- a/arch/powerpc/crypto/sha1.c |
151 | +++ b/arch/powerpc/crypto/sha1.c |
152 | @@ -154,4 +154,5 @@ module_exit(sha1_powerpc_mod_fini); |
153 | MODULE_LICENSE("GPL"); |
154 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm"); |
155 | |
156 | -MODULE_ALIAS("sha1-powerpc"); |
157 | +MODULE_ALIAS_CRYPTO("sha1"); |
158 | +MODULE_ALIAS_CRYPTO("sha1-powerpc"); |
159 | diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c |
160 | index 23223cd63e54..1f272b24fc0b 100644 |
161 | --- a/arch/s390/crypto/aes_s390.c |
162 | +++ b/arch/s390/crypto/aes_s390.c |
163 | @@ -979,7 +979,7 @@ static void __exit aes_s390_fini(void) |
164 | module_init(aes_s390_init); |
165 | module_exit(aes_s390_fini); |
166 | |
167 | -MODULE_ALIAS("aes-all"); |
168 | +MODULE_ALIAS_CRYPTO("aes-all"); |
169 | |
170 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); |
171 | MODULE_LICENSE("GPL"); |
172 | diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c |
173 | index 7acb77f7ef1a..9e05cc453a40 100644 |
174 | --- a/arch/s390/crypto/des_s390.c |
175 | +++ b/arch/s390/crypto/des_s390.c |
176 | @@ -619,8 +619,8 @@ static void __exit des_s390_exit(void) |
177 | module_init(des_s390_init); |
178 | module_exit(des_s390_exit); |
179 | |
180 | -MODULE_ALIAS("des"); |
181 | -MODULE_ALIAS("des3_ede"); |
182 | +MODULE_ALIAS_CRYPTO("des"); |
183 | +MODULE_ALIAS_CRYPTO("des3_ede"); |
184 | |
185 | MODULE_LICENSE("GPL"); |
186 | MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms"); |
187 | diff --git a/arch/s390/crypto/ghash_s390.c b/arch/s390/crypto/ghash_s390.c |
188 | index d43485d142e9..7940dc90e80b 100644 |
189 | --- a/arch/s390/crypto/ghash_s390.c |
190 | +++ b/arch/s390/crypto/ghash_s390.c |
191 | @@ -160,7 +160,7 @@ static void __exit ghash_mod_exit(void) |
192 | module_init(ghash_mod_init); |
193 | module_exit(ghash_mod_exit); |
194 | |
195 | -MODULE_ALIAS("ghash"); |
196 | +MODULE_ALIAS_CRYPTO("ghash"); |
197 | |
198 | MODULE_LICENSE("GPL"); |
199 | MODULE_DESCRIPTION("GHASH Message Digest Algorithm, s390 implementation"); |
200 | diff --git a/arch/s390/crypto/sha1_s390.c b/arch/s390/crypto/sha1_s390.c |
201 | index a1b3a9dc9d8a..5b2bee323694 100644 |
202 | --- a/arch/s390/crypto/sha1_s390.c |
203 | +++ b/arch/s390/crypto/sha1_s390.c |
204 | @@ -103,6 +103,6 @@ static void __exit sha1_s390_fini(void) |
205 | module_init(sha1_s390_init); |
206 | module_exit(sha1_s390_fini); |
207 | |
208 | -MODULE_ALIAS("sha1"); |
209 | +MODULE_ALIAS_CRYPTO("sha1"); |
210 | MODULE_LICENSE("GPL"); |
211 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm"); |
212 | diff --git a/arch/s390/crypto/sha256_s390.c b/arch/s390/crypto/sha256_s390.c |
213 | index 9b853809a492..b74ff158108c 100644 |
214 | --- a/arch/s390/crypto/sha256_s390.c |
215 | +++ b/arch/s390/crypto/sha256_s390.c |
216 | @@ -143,7 +143,7 @@ static void __exit sha256_s390_fini(void) |
217 | module_init(sha256_s390_init); |
218 | module_exit(sha256_s390_fini); |
219 | |
220 | -MODULE_ALIAS("sha256"); |
221 | -MODULE_ALIAS("sha224"); |
222 | +MODULE_ALIAS_CRYPTO("sha256"); |
223 | +MODULE_ALIAS_CRYPTO("sha224"); |
224 | MODULE_LICENSE("GPL"); |
225 | MODULE_DESCRIPTION("SHA256 and SHA224 Secure Hash Algorithm"); |
226 | diff --git a/arch/s390/crypto/sha512_s390.c b/arch/s390/crypto/sha512_s390.c |
227 | index 32a81383b69c..0c36989ba182 100644 |
228 | --- a/arch/s390/crypto/sha512_s390.c |
229 | +++ b/arch/s390/crypto/sha512_s390.c |
230 | @@ -86,7 +86,7 @@ static struct shash_alg sha512_alg = { |
231 | } |
232 | }; |
233 | |
234 | -MODULE_ALIAS("sha512"); |
235 | +MODULE_ALIAS_CRYPTO("sha512"); |
236 | |
237 | static int sha384_init(struct shash_desc *desc) |
238 | { |
239 | @@ -126,7 +126,7 @@ static struct shash_alg sha384_alg = { |
240 | } |
241 | }; |
242 | |
243 | -MODULE_ALIAS("sha384"); |
244 | +MODULE_ALIAS_CRYPTO("sha384"); |
245 | |
246 | static int __init init(void) |
247 | { |
248 | diff --git a/arch/sparc/crypto/aes_glue.c b/arch/sparc/crypto/aes_glue.c |
249 | index df922f52d76d..705408766ab0 100644 |
250 | --- a/arch/sparc/crypto/aes_glue.c |
251 | +++ b/arch/sparc/crypto/aes_glue.c |
252 | @@ -499,6 +499,6 @@ module_exit(aes_sparc64_mod_fini); |
253 | MODULE_LICENSE("GPL"); |
254 | MODULE_DESCRIPTION("AES Secure Hash Algorithm, sparc64 aes opcode accelerated"); |
255 | |
256 | -MODULE_ALIAS("aes"); |
257 | +MODULE_ALIAS_CRYPTO("aes"); |
258 | |
259 | #include "crop_devid.c" |
260 | diff --git a/arch/sparc/crypto/camellia_glue.c b/arch/sparc/crypto/camellia_glue.c |
261 | index 888f6260b4ec..641f55cb61c3 100644 |
262 | --- a/arch/sparc/crypto/camellia_glue.c |
263 | +++ b/arch/sparc/crypto/camellia_glue.c |
264 | @@ -322,6 +322,6 @@ module_exit(camellia_sparc64_mod_fini); |
265 | MODULE_LICENSE("GPL"); |
266 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, sparc64 camellia opcode accelerated"); |
267 | |
268 | -MODULE_ALIAS("aes"); |
269 | +MODULE_ALIAS_CRYPTO("aes"); |
270 | |
271 | #include "crop_devid.c" |
272 | diff --git a/arch/sparc/crypto/crc32c_glue.c b/arch/sparc/crypto/crc32c_glue.c |
273 | index 5162fad912ce..d1064e46efe8 100644 |
274 | --- a/arch/sparc/crypto/crc32c_glue.c |
275 | +++ b/arch/sparc/crypto/crc32c_glue.c |
276 | @@ -176,6 +176,6 @@ module_exit(crc32c_sparc64_mod_fini); |
277 | MODULE_LICENSE("GPL"); |
278 | MODULE_DESCRIPTION("CRC32c (Castagnoli), sparc64 crc32c opcode accelerated"); |
279 | |
280 | -MODULE_ALIAS("crc32c"); |
281 | +MODULE_ALIAS_CRYPTO("crc32c"); |
282 | |
283 | #include "crop_devid.c" |
284 | diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c |
285 | index 3065bc61f9d3..d11500972994 100644 |
286 | --- a/arch/sparc/crypto/des_glue.c |
287 | +++ b/arch/sparc/crypto/des_glue.c |
288 | @@ -532,6 +532,6 @@ module_exit(des_sparc64_mod_fini); |
289 | MODULE_LICENSE("GPL"); |
290 | MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms, sparc64 des opcode accelerated"); |
291 | |
292 | -MODULE_ALIAS("des"); |
293 | +MODULE_ALIAS_CRYPTO("des"); |
294 | |
295 | #include "crop_devid.c" |
296 | diff --git a/arch/sparc/crypto/md5_glue.c b/arch/sparc/crypto/md5_glue.c |
297 | index 09a9ea1dfb69..64c7ff5f72a9 100644 |
298 | --- a/arch/sparc/crypto/md5_glue.c |
299 | +++ b/arch/sparc/crypto/md5_glue.c |
300 | @@ -185,6 +185,6 @@ module_exit(md5_sparc64_mod_fini); |
301 | MODULE_LICENSE("GPL"); |
302 | MODULE_DESCRIPTION("MD5 Secure Hash Algorithm, sparc64 md5 opcode accelerated"); |
303 | |
304 | -MODULE_ALIAS("md5"); |
305 | +MODULE_ALIAS_CRYPTO("md5"); |
306 | |
307 | #include "crop_devid.c" |
308 | diff --git a/arch/sparc/crypto/sha1_glue.c b/arch/sparc/crypto/sha1_glue.c |
309 | index 6cd5f29e1e0d..1b3e47accc74 100644 |
310 | --- a/arch/sparc/crypto/sha1_glue.c |
311 | +++ b/arch/sparc/crypto/sha1_glue.c |
312 | @@ -180,6 +180,6 @@ module_exit(sha1_sparc64_mod_fini); |
313 | MODULE_LICENSE("GPL"); |
314 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, sparc64 sha1 opcode accelerated"); |
315 | |
316 | -MODULE_ALIAS("sha1"); |
317 | +MODULE_ALIAS_CRYPTO("sha1"); |
318 | |
319 | #include "crop_devid.c" |
320 | diff --git a/arch/sparc/crypto/sha256_glue.c b/arch/sparc/crypto/sha256_glue.c |
321 | index 04f555ab2680..41f27cca2a22 100644 |
322 | --- a/arch/sparc/crypto/sha256_glue.c |
323 | +++ b/arch/sparc/crypto/sha256_glue.c |
324 | @@ -237,7 +237,7 @@ module_exit(sha256_sparc64_mod_fini); |
325 | MODULE_LICENSE("GPL"); |
326 | MODULE_DESCRIPTION("SHA-224 and SHA-256 Secure Hash Algorithm, sparc64 sha256 opcode accelerated"); |
327 | |
328 | -MODULE_ALIAS("sha224"); |
329 | -MODULE_ALIAS("sha256"); |
330 | +MODULE_ALIAS_CRYPTO("sha224"); |
331 | +MODULE_ALIAS_CRYPTO("sha256"); |
332 | |
333 | #include "crop_devid.c" |
334 | diff --git a/arch/sparc/crypto/sha512_glue.c b/arch/sparc/crypto/sha512_glue.c |
335 | index f04d1994d19a..9fff88541b8c 100644 |
336 | --- a/arch/sparc/crypto/sha512_glue.c |
337 | +++ b/arch/sparc/crypto/sha512_glue.c |
338 | @@ -222,7 +222,7 @@ module_exit(sha512_sparc64_mod_fini); |
339 | MODULE_LICENSE("GPL"); |
340 | MODULE_DESCRIPTION("SHA-384 and SHA-512 Secure Hash Algorithm, sparc64 sha512 opcode accelerated"); |
341 | |
342 | -MODULE_ALIAS("sha384"); |
343 | -MODULE_ALIAS("sha512"); |
344 | +MODULE_ALIAS_CRYPTO("sha384"); |
345 | +MODULE_ALIAS_CRYPTO("sha512"); |
346 | |
347 | #include "crop_devid.c" |
348 | diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig |
349 | index 41a503c15862..3635fff7b32d 100644 |
350 | --- a/arch/x86/Kconfig |
351 | +++ b/arch/x86/Kconfig |
352 | @@ -856,7 +856,7 @@ source "kernel/Kconfig.preempt" |
353 | |
354 | config X86_UP_APIC |
355 | bool "Local APIC support on uniprocessors" |
356 | - depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI |
357 | + depends on X86_32 && !SMP && !X86_32_NON_STANDARD |
358 | ---help--- |
359 | A local APIC (Advanced Programmable Interrupt Controller) is an |
360 | integrated interrupt controller in the CPU. If you have a single-CPU |
361 | @@ -867,6 +867,10 @@ config X86_UP_APIC |
362 | performance counters), and the NMI watchdog which detects hard |
363 | lockups. |
364 | |
365 | +config X86_UP_APIC_MSI |
366 | + def_bool y |
367 | + select X86_UP_APIC if X86_32 && !SMP && !X86_32_NON_STANDARD && PCI_MSI |
368 | + |
369 | config X86_UP_IOAPIC |
370 | bool "IO-APIC support on uniprocessors" |
371 | depends on X86_UP_APIC |
372 | diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c |
373 | index 30dd59a9f0b4..0c33a7c67ea5 100644 |
374 | --- a/arch/x86/boot/compressed/misc.c |
375 | +++ b/arch/x86/boot/compressed/misc.c |
376 | @@ -361,6 +361,8 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap, |
377 | unsigned long output_len, |
378 | unsigned long run_size) |
379 | { |
380 | + unsigned char *output_orig = output; |
381 | + |
382 | real_mode = rmode; |
383 | |
384 | sanitize_boot_params(real_mode); |
385 | @@ -409,7 +411,12 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap, |
386 | debug_putstr("\nDecompressing Linux... "); |
387 | decompress(input_data, input_len, NULL, NULL, output, NULL, error); |
388 | parse_elf(output); |
389 | - handle_relocations(output, output_len); |
390 | + /* |
391 | + * 32-bit always performs relocations. 64-bit relocations are only |
392 | + * needed if kASLR has chosen a different load address. |
393 | + */ |
394 | + if (!IS_ENABLED(CONFIG_X86_64) || output != output_orig) |
395 | + handle_relocations(output, output_len); |
396 | debug_putstr("done.\nBooting the kernel.\n"); |
397 | return output; |
398 | } |
399 | diff --git a/arch/x86/crypto/aes_glue.c b/arch/x86/crypto/aes_glue.c |
400 | index aafe8ce0d65d..e26984f7ab8d 100644 |
401 | --- a/arch/x86/crypto/aes_glue.c |
402 | +++ b/arch/x86/crypto/aes_glue.c |
403 | @@ -66,5 +66,5 @@ module_exit(aes_fini); |
404 | |
405 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized"); |
406 | MODULE_LICENSE("GPL"); |
407 | -MODULE_ALIAS("aes"); |
408 | -MODULE_ALIAS("aes-asm"); |
409 | +MODULE_ALIAS_CRYPTO("aes"); |
410 | +MODULE_ALIAS_CRYPTO("aes-asm"); |
411 | diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c |
412 | index 888950f29fd9..70fece226d17 100644 |
413 | --- a/arch/x86/crypto/aesni-intel_glue.c |
414 | +++ b/arch/x86/crypto/aesni-intel_glue.c |
415 | @@ -1550,4 +1550,4 @@ module_exit(aesni_exit); |
416 | |
417 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized"); |
418 | MODULE_LICENSE("GPL"); |
419 | -MODULE_ALIAS("aes"); |
420 | +MODULE_ALIAS_CRYPTO("aes"); |
421 | diff --git a/arch/x86/crypto/blowfish_glue.c b/arch/x86/crypto/blowfish_glue.c |
422 | index 8af519ed73d1..17c05531dfd1 100644 |
423 | --- a/arch/x86/crypto/blowfish_glue.c |
424 | +++ b/arch/x86/crypto/blowfish_glue.c |
425 | @@ -478,5 +478,5 @@ module_exit(fini); |
426 | |
427 | MODULE_LICENSE("GPL"); |
428 | MODULE_DESCRIPTION("Blowfish Cipher Algorithm, asm optimized"); |
429 | -MODULE_ALIAS("blowfish"); |
430 | -MODULE_ALIAS("blowfish-asm"); |
431 | +MODULE_ALIAS_CRYPTO("blowfish"); |
432 | +MODULE_ALIAS_CRYPTO("blowfish-asm"); |
433 | diff --git a/arch/x86/crypto/camellia_aesni_avx2_glue.c b/arch/x86/crypto/camellia_aesni_avx2_glue.c |
434 | index 4209a76fcdaa..9a07fafe3831 100644 |
435 | --- a/arch/x86/crypto/camellia_aesni_avx2_glue.c |
436 | +++ b/arch/x86/crypto/camellia_aesni_avx2_glue.c |
437 | @@ -582,5 +582,5 @@ module_exit(camellia_aesni_fini); |
438 | |
439 | MODULE_LICENSE("GPL"); |
440 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, AES-NI/AVX2 optimized"); |
441 | -MODULE_ALIAS("camellia"); |
442 | -MODULE_ALIAS("camellia-asm"); |
443 | +MODULE_ALIAS_CRYPTO("camellia"); |
444 | +MODULE_ALIAS_CRYPTO("camellia-asm"); |
445 | diff --git a/arch/x86/crypto/camellia_aesni_avx_glue.c b/arch/x86/crypto/camellia_aesni_avx_glue.c |
446 | index 87a041a10f4a..ed38d959add6 100644 |
447 | --- a/arch/x86/crypto/camellia_aesni_avx_glue.c |
448 | +++ b/arch/x86/crypto/camellia_aesni_avx_glue.c |
449 | @@ -574,5 +574,5 @@ module_exit(camellia_aesni_fini); |
450 | |
451 | MODULE_LICENSE("GPL"); |
452 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, AES-NI/AVX optimized"); |
453 | -MODULE_ALIAS("camellia"); |
454 | -MODULE_ALIAS("camellia-asm"); |
455 | +MODULE_ALIAS_CRYPTO("camellia"); |
456 | +MODULE_ALIAS_CRYPTO("camellia-asm"); |
457 | diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c |
458 | index c171dcbf192d..5c8b6266a394 100644 |
459 | --- a/arch/x86/crypto/camellia_glue.c |
460 | +++ b/arch/x86/crypto/camellia_glue.c |
461 | @@ -1725,5 +1725,5 @@ module_exit(fini); |
462 | |
463 | MODULE_LICENSE("GPL"); |
464 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, asm optimized"); |
465 | -MODULE_ALIAS("camellia"); |
466 | -MODULE_ALIAS("camellia-asm"); |
467 | +MODULE_ALIAS_CRYPTO("camellia"); |
468 | +MODULE_ALIAS_CRYPTO("camellia-asm"); |
469 | diff --git a/arch/x86/crypto/cast5_avx_glue.c b/arch/x86/crypto/cast5_avx_glue.c |
470 | index e57e20ab5e0b..60ada677a928 100644 |
471 | --- a/arch/x86/crypto/cast5_avx_glue.c |
472 | +++ b/arch/x86/crypto/cast5_avx_glue.c |
473 | @@ -491,4 +491,4 @@ module_exit(cast5_exit); |
474 | |
475 | MODULE_DESCRIPTION("Cast5 Cipher Algorithm, AVX optimized"); |
476 | MODULE_LICENSE("GPL"); |
477 | -MODULE_ALIAS("cast5"); |
478 | +MODULE_ALIAS_CRYPTO("cast5"); |
479 | diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c |
480 | index 09f3677393e4..0160f68a57ff 100644 |
481 | --- a/arch/x86/crypto/cast6_avx_glue.c |
482 | +++ b/arch/x86/crypto/cast6_avx_glue.c |
483 | @@ -611,4 +611,4 @@ module_exit(cast6_exit); |
484 | |
485 | MODULE_DESCRIPTION("Cast6 Cipher Algorithm, AVX optimized"); |
486 | MODULE_LICENSE("GPL"); |
487 | -MODULE_ALIAS("cast6"); |
488 | +MODULE_ALIAS_CRYPTO("cast6"); |
489 | diff --git a/arch/x86/crypto/crc32-pclmul_glue.c b/arch/x86/crypto/crc32-pclmul_glue.c |
490 | index 9d014a74ef96..1937fc1d8763 100644 |
491 | --- a/arch/x86/crypto/crc32-pclmul_glue.c |
492 | +++ b/arch/x86/crypto/crc32-pclmul_glue.c |
493 | @@ -197,5 +197,5 @@ module_exit(crc32_pclmul_mod_fini); |
494 | MODULE_AUTHOR("Alexander Boyko <alexander_boyko@xyratex.com>"); |
495 | MODULE_LICENSE("GPL"); |
496 | |
497 | -MODULE_ALIAS("crc32"); |
498 | -MODULE_ALIAS("crc32-pclmul"); |
499 | +MODULE_ALIAS_CRYPTO("crc32"); |
500 | +MODULE_ALIAS_CRYPTO("crc32-pclmul"); |
501 | diff --git a/arch/x86/crypto/crc32c-intel_glue.c b/arch/x86/crypto/crc32c-intel_glue.c |
502 | index 6812ad98355c..28640c3d6af7 100644 |
503 | --- a/arch/x86/crypto/crc32c-intel_glue.c |
504 | +++ b/arch/x86/crypto/crc32c-intel_glue.c |
505 | @@ -280,5 +280,5 @@ MODULE_AUTHOR("Austin Zhang <austin.zhang@intel.com>, Kent Liu <kent.liu@intel.c |
506 | MODULE_DESCRIPTION("CRC32c (Castagnoli) optimization using Intel Hardware."); |
507 | MODULE_LICENSE("GPL"); |
508 | |
509 | -MODULE_ALIAS("crc32c"); |
510 | -MODULE_ALIAS("crc32c-intel"); |
511 | +MODULE_ALIAS_CRYPTO("crc32c"); |
512 | +MODULE_ALIAS_CRYPTO("crc32c-intel"); |
513 | diff --git a/arch/x86/crypto/crct10dif-pclmul_glue.c b/arch/x86/crypto/crct10dif-pclmul_glue.c |
514 | index 7845d7fd54c0..b6c67bf30fdf 100644 |
515 | --- a/arch/x86/crypto/crct10dif-pclmul_glue.c |
516 | +++ b/arch/x86/crypto/crct10dif-pclmul_glue.c |
517 | @@ -147,5 +147,5 @@ MODULE_AUTHOR("Tim Chen <tim.c.chen@linux.intel.com>"); |
518 | MODULE_DESCRIPTION("T10 DIF CRC calculation accelerated with PCLMULQDQ."); |
519 | MODULE_LICENSE("GPL"); |
520 | |
521 | -MODULE_ALIAS("crct10dif"); |
522 | -MODULE_ALIAS("crct10dif-pclmul"); |
523 | +MODULE_ALIAS_CRYPTO("crct10dif"); |
524 | +MODULE_ALIAS_CRYPTO("crct10dif-pclmul"); |
525 | diff --git a/arch/x86/crypto/des3_ede_glue.c b/arch/x86/crypto/des3_ede_glue.c |
526 | index 0e9c0668fe4e..38a14f818ef1 100644 |
527 | --- a/arch/x86/crypto/des3_ede_glue.c |
528 | +++ b/arch/x86/crypto/des3_ede_glue.c |
529 | @@ -502,8 +502,8 @@ module_exit(des3_ede_x86_fini); |
530 | |
531 | MODULE_LICENSE("GPL"); |
532 | MODULE_DESCRIPTION("Triple DES EDE Cipher Algorithm, asm optimized"); |
533 | -MODULE_ALIAS("des3_ede"); |
534 | -MODULE_ALIAS("des3_ede-asm"); |
535 | -MODULE_ALIAS("des"); |
536 | -MODULE_ALIAS("des-asm"); |
537 | +MODULE_ALIAS_CRYPTO("des3_ede"); |
538 | +MODULE_ALIAS_CRYPTO("des3_ede-asm"); |
539 | +MODULE_ALIAS_CRYPTO("des"); |
540 | +MODULE_ALIAS_CRYPTO("des-asm"); |
541 | MODULE_AUTHOR("Jussi Kivilinna <jussi.kivilinna@iki.fi>"); |
542 | diff --git a/arch/x86/crypto/fpu.c b/arch/x86/crypto/fpu.c |
543 | index 98d7a188f46b..f368ba261739 100644 |
544 | --- a/arch/x86/crypto/fpu.c |
545 | +++ b/arch/x86/crypto/fpu.c |
546 | @@ -17,6 +17,7 @@ |
547 | #include <linux/kernel.h> |
548 | #include <linux/module.h> |
549 | #include <linux/slab.h> |
550 | +#include <linux/crypto.h> |
551 | #include <asm/i387.h> |
552 | |
553 | struct crypto_fpu_ctx { |
554 | @@ -159,3 +160,5 @@ void __exit crypto_fpu_exit(void) |
555 | { |
556 | crypto_unregister_template(&crypto_fpu_tmpl); |
557 | } |
558 | + |
559 | +MODULE_ALIAS_CRYPTO("fpu"); |
560 | diff --git a/arch/x86/crypto/ghash-clmulni-intel_glue.c b/arch/x86/crypto/ghash-clmulni-intel_glue.c |
561 | index 88bb7ba8b175..8253d85aa165 100644 |
562 | --- a/arch/x86/crypto/ghash-clmulni-intel_glue.c |
563 | +++ b/arch/x86/crypto/ghash-clmulni-intel_glue.c |
564 | @@ -341,4 +341,4 @@ module_exit(ghash_pclmulqdqni_mod_exit); |
565 | MODULE_LICENSE("GPL"); |
566 | MODULE_DESCRIPTION("GHASH Message Digest Algorithm, " |
567 | "acclerated by PCLMULQDQ-NI"); |
568 | -MODULE_ALIAS("ghash"); |
569 | +MODULE_ALIAS_CRYPTO("ghash"); |
570 | diff --git a/arch/x86/crypto/salsa20_glue.c b/arch/x86/crypto/salsa20_glue.c |
571 | index 5e8e67739bb5..399a29d067d6 100644 |
572 | --- a/arch/x86/crypto/salsa20_glue.c |
573 | +++ b/arch/x86/crypto/salsa20_glue.c |
574 | @@ -119,5 +119,5 @@ module_exit(fini); |
575 | |
576 | MODULE_LICENSE("GPL"); |
577 | MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm (optimized assembly version)"); |
578 | -MODULE_ALIAS("salsa20"); |
579 | -MODULE_ALIAS("salsa20-asm"); |
580 | +MODULE_ALIAS_CRYPTO("salsa20"); |
581 | +MODULE_ALIAS_CRYPTO("salsa20-asm"); |
582 | diff --git a/arch/x86/crypto/serpent_avx2_glue.c b/arch/x86/crypto/serpent_avx2_glue.c |
583 | index 2fae489b1524..437e47a4d302 100644 |
584 | --- a/arch/x86/crypto/serpent_avx2_glue.c |
585 | +++ b/arch/x86/crypto/serpent_avx2_glue.c |
586 | @@ -558,5 +558,5 @@ module_exit(fini); |
587 | |
588 | MODULE_LICENSE("GPL"); |
589 | MODULE_DESCRIPTION("Serpent Cipher Algorithm, AVX2 optimized"); |
590 | -MODULE_ALIAS("serpent"); |
591 | -MODULE_ALIAS("serpent-asm"); |
592 | +MODULE_ALIAS_CRYPTO("serpent"); |
593 | +MODULE_ALIAS_CRYPTO("serpent-asm"); |
594 | diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c |
595 | index ff4870870972..7e217398b4eb 100644 |
596 | --- a/arch/x86/crypto/serpent_avx_glue.c |
597 | +++ b/arch/x86/crypto/serpent_avx_glue.c |
598 | @@ -617,4 +617,4 @@ module_exit(serpent_exit); |
599 | |
600 | MODULE_DESCRIPTION("Serpent Cipher Algorithm, AVX optimized"); |
601 | MODULE_LICENSE("GPL"); |
602 | -MODULE_ALIAS("serpent"); |
603 | +MODULE_ALIAS_CRYPTO("serpent"); |
604 | diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c |
605 | index 8c95f8637306..bf025adaea01 100644 |
606 | --- a/arch/x86/crypto/serpent_sse2_glue.c |
607 | +++ b/arch/x86/crypto/serpent_sse2_glue.c |
608 | @@ -618,4 +618,4 @@ module_exit(serpent_sse2_exit); |
609 | |
610 | MODULE_DESCRIPTION("Serpent Cipher Algorithm, SSE2 optimized"); |
611 | MODULE_LICENSE("GPL"); |
612 | -MODULE_ALIAS("serpent"); |
613 | +MODULE_ALIAS_CRYPTO("serpent"); |
614 | diff --git a/arch/x86/crypto/sha-mb/sha1_mb.c b/arch/x86/crypto/sha-mb/sha1_mb.c |
615 | index 99eefd812958..d42c9b7fadcf 100644 |
616 | --- a/arch/x86/crypto/sha-mb/sha1_mb.c |
617 | +++ b/arch/x86/crypto/sha-mb/sha1_mb.c |
618 | @@ -932,4 +932,4 @@ module_exit(sha1_mb_mod_fini); |
619 | MODULE_LICENSE("GPL"); |
620 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, multi buffer accelerated"); |
621 | |
622 | -MODULE_ALIAS("sha1"); |
623 | +MODULE_ALIAS_CRYPTO("sha1"); |
624 | diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c |
625 | index 74d16ef707c7..6c20fe04a738 100644 |
626 | --- a/arch/x86/crypto/sha1_ssse3_glue.c |
627 | +++ b/arch/x86/crypto/sha1_ssse3_glue.c |
628 | @@ -278,4 +278,4 @@ module_exit(sha1_ssse3_mod_fini); |
629 | MODULE_LICENSE("GPL"); |
630 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, Supplemental SSE3 accelerated"); |
631 | |
632 | -MODULE_ALIAS("sha1"); |
633 | +MODULE_ALIAS_CRYPTO("sha1"); |
634 | diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c |
635 | index f248546da1ca..4dc100d82902 100644 |
636 | --- a/arch/x86/crypto/sha256_ssse3_glue.c |
637 | +++ b/arch/x86/crypto/sha256_ssse3_glue.c |
638 | @@ -318,5 +318,5 @@ module_exit(sha256_ssse3_mod_fini); |
639 | MODULE_LICENSE("GPL"); |
640 | MODULE_DESCRIPTION("SHA256 Secure Hash Algorithm, Supplemental SSE3 accelerated"); |
641 | |
642 | -MODULE_ALIAS("sha256"); |
643 | -MODULE_ALIAS("sha224"); |
644 | +MODULE_ALIAS_CRYPTO("sha256"); |
645 | +MODULE_ALIAS_CRYPTO("sha224"); |
646 | diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c |
647 | index 8626b03e83b7..26a5898a6f26 100644 |
648 | --- a/arch/x86/crypto/sha512_ssse3_glue.c |
649 | +++ b/arch/x86/crypto/sha512_ssse3_glue.c |
650 | @@ -326,5 +326,5 @@ module_exit(sha512_ssse3_mod_fini); |
651 | MODULE_LICENSE("GPL"); |
652 | MODULE_DESCRIPTION("SHA512 Secure Hash Algorithm, Supplemental SSE3 accelerated"); |
653 | |
654 | -MODULE_ALIAS("sha512"); |
655 | -MODULE_ALIAS("sha384"); |
656 | +MODULE_ALIAS_CRYPTO("sha512"); |
657 | +MODULE_ALIAS_CRYPTO("sha384"); |
658 | diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c |
659 | index 4e3c665be129..1ac531ea9bcc 100644 |
660 | --- a/arch/x86/crypto/twofish_avx_glue.c |
661 | +++ b/arch/x86/crypto/twofish_avx_glue.c |
662 | @@ -579,4 +579,4 @@ module_exit(twofish_exit); |
663 | |
664 | MODULE_DESCRIPTION("Twofish Cipher Algorithm, AVX optimized"); |
665 | MODULE_LICENSE("GPL"); |
666 | -MODULE_ALIAS("twofish"); |
667 | +MODULE_ALIAS_CRYPTO("twofish"); |
668 | diff --git a/arch/x86/crypto/twofish_glue.c b/arch/x86/crypto/twofish_glue.c |
669 | index 0a5202303501..77e06c2da83d 100644 |
670 | --- a/arch/x86/crypto/twofish_glue.c |
671 | +++ b/arch/x86/crypto/twofish_glue.c |
672 | @@ -96,5 +96,5 @@ module_exit(fini); |
673 | |
674 | MODULE_LICENSE("GPL"); |
675 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm, asm optimized"); |
676 | -MODULE_ALIAS("twofish"); |
677 | -MODULE_ALIAS("twofish-asm"); |
678 | +MODULE_ALIAS_CRYPTO("twofish"); |
679 | +MODULE_ALIAS_CRYPTO("twofish-asm"); |
680 | diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c |
681 | index 13e63b3e1dfb..56d8a08ee479 100644 |
682 | --- a/arch/x86/crypto/twofish_glue_3way.c |
683 | +++ b/arch/x86/crypto/twofish_glue_3way.c |
684 | @@ -495,5 +495,5 @@ module_exit(fini); |
685 | |
686 | MODULE_LICENSE("GPL"); |
687 | MODULE_DESCRIPTION("Twofish Cipher Algorithm, 3-way parallel asm optimized"); |
688 | -MODULE_ALIAS("twofish"); |
689 | -MODULE_ALIAS("twofish-asm"); |
690 | +MODULE_ALIAS_CRYPTO("twofish"); |
691 | +MODULE_ALIAS_CRYPTO("twofish-asm"); |
692 | diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h |
693 | index 50d033a8947d..a94b82e8f156 100644 |
694 | --- a/arch/x86/include/asm/desc.h |
695 | +++ b/arch/x86/include/asm/desc.h |
696 | @@ -251,7 +251,8 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu) |
697 | gdt[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i]; |
698 | } |
699 | |
700 | -#define _LDT_empty(info) \ |
701 | +/* This intentionally ignores lm, since 32-bit apps don't have that field. */ |
702 | +#define LDT_empty(info) \ |
703 | ((info)->base_addr == 0 && \ |
704 | (info)->limit == 0 && \ |
705 | (info)->contents == 0 && \ |
706 | @@ -261,11 +262,18 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu) |
707 | (info)->seg_not_present == 1 && \ |
708 | (info)->useable == 0) |
709 | |
710 | -#ifdef CONFIG_X86_64 |
711 | -#define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0)) |
712 | -#else |
713 | -#define LDT_empty(info) (_LDT_empty(info)) |
714 | -#endif |
715 | +/* Lots of programs expect an all-zero user_desc to mean "no segment at all". */ |
716 | +static inline bool LDT_zero(const struct user_desc *info) |
717 | +{ |
718 | + return (info->base_addr == 0 && |
719 | + info->limit == 0 && |
720 | + info->contents == 0 && |
721 | + info->read_exec_only == 0 && |
722 | + info->seg_32bit == 0 && |
723 | + info->limit_in_pages == 0 && |
724 | + info->seg_not_present == 0 && |
725 | + info->useable == 0); |
726 | +} |
727 | |
728 | static inline void clear_LDT(void) |
729 | { |
730 | diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c |
731 | index a450373e8e91..939155ffdece 100644 |
732 | --- a/arch/x86/kernel/cpu/mshyperv.c |
733 | +++ b/arch/x86/kernel/cpu/mshyperv.c |
734 | @@ -107,6 +107,7 @@ static struct clocksource hyperv_cs = { |
735 | .rating = 400, /* use this when running on Hyperv*/ |
736 | .read = read_hv_clock, |
737 | .mask = CLOCKSOURCE_MASK(64), |
738 | + .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
739 | }; |
740 | |
741 | static void __init ms_hyperv_init_platform(void) |
742 | diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c |
743 | index 922d28581024..37907756fc41 100644 |
744 | --- a/arch/x86/kernel/irq.c |
745 | +++ b/arch/x86/kernel/irq.c |
746 | @@ -127,7 +127,7 @@ int arch_show_interrupts(struct seq_file *p, int prec) |
747 | seq_printf(p, " Machine check polls\n"); |
748 | #endif |
749 | #if IS_ENABLED(CONFIG_HYPERV) || defined(CONFIG_XEN) |
750 | - seq_printf(p, "%*s: ", prec, "THR"); |
751 | + seq_printf(p, "%*s: ", prec, "HYP"); |
752 | for_each_online_cpu(j) |
753 | seq_printf(p, "%10u ", irq_stats(j)->irq_hv_callback_count); |
754 | seq_printf(p, " Hypervisor callback interrupts\n"); |
755 | diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c |
756 | index 4e942f31b1a7..7fc5e843f247 100644 |
757 | --- a/arch/x86/kernel/tls.c |
758 | +++ b/arch/x86/kernel/tls.c |
759 | @@ -29,7 +29,28 @@ static int get_free_idx(void) |
760 | |
761 | static bool tls_desc_okay(const struct user_desc *info) |
762 | { |
763 | - if (LDT_empty(info)) |
764 | + /* |
765 | + * For historical reasons (i.e. no one ever documented how any |
766 | + * of the segmentation APIs work), user programs can and do |
767 | + * assume that a struct user_desc that's all zeros except for |
768 | + * entry_number means "no segment at all". This never actually |
769 | + * worked. In fact, up to Linux 3.19, a struct user_desc like |
770 | + * this would create a 16-bit read-write segment with base and |
771 | + * limit both equal to zero. |
772 | + * |
773 | + * That was close enough to "no segment at all" until we |
774 | + * hardened this function to disallow 16-bit TLS segments. Fix |
775 | + * it up by interpreting these zeroed segments the way that they |
776 | + * were almost certainly intended to be interpreted. |
777 | + * |
778 | + * The correct way to ask for "no segment at all" is to specify |
779 | + * a user_desc that satisfies LDT_empty. To keep everything |
780 | + * working, we accept both. |
781 | + * |
782 | + * Note that there's a similar kludge in modify_ldt -- look at |
783 | + * the distinction between modes 1 and 0x11. |
784 | + */ |
785 | + if (LDT_empty(info) || LDT_zero(info)) |
786 | return true; |
787 | |
788 | /* |
789 | @@ -71,7 +92,7 @@ static void set_tls_desc(struct task_struct *p, int idx, |
790 | cpu = get_cpu(); |
791 | |
792 | while (n-- > 0) { |
793 | - if (LDT_empty(info)) |
794 | + if (LDT_empty(info) || LDT_zero(info)) |
795 | desc->a = desc->b = 0; |
796 | else |
797 | fill_ldt(desc, info); |
798 | diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c |
799 | index b7e50bba3bbb..505449700e0c 100644 |
800 | --- a/arch/x86/kernel/tsc.c |
801 | +++ b/arch/x86/kernel/tsc.c |
802 | @@ -617,7 +617,7 @@ static unsigned long quick_pit_calibrate(void) |
803 | goto success; |
804 | } |
805 | } |
806 | - pr_err("Fast TSC calibration failed\n"); |
807 | + pr_info("Fast TSC calibration failed\n"); |
808 | return 0; |
809 | |
810 | success: |
811 | diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c |
812 | index 22e7ed9e6d8e..c7327a7761ca 100644 |
813 | --- a/arch/x86/kvm/emulate.c |
814 | +++ b/arch/x86/kvm/emulate.c |
815 | @@ -2345,7 +2345,7 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) |
816 | * Not recognized on AMD in compat mode (but is recognized in legacy |
817 | * mode). |
818 | */ |
819 | - if ((ctxt->mode == X86EMUL_MODE_PROT32) && (efer & EFER_LMA) |
820 | + if ((ctxt->mode != X86EMUL_MODE_PROT64) && (efer & EFER_LMA) |
821 | && !vendor_intel(ctxt)) |
822 | return emulate_ud(ctxt); |
823 | |
824 | @@ -2358,25 +2358,13 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) |
825 | setup_syscalls_segments(ctxt, &cs, &ss); |
826 | |
827 | ops->get_msr(ctxt, MSR_IA32_SYSENTER_CS, &msr_data); |
828 | - switch (ctxt->mode) { |
829 | - case X86EMUL_MODE_PROT32: |
830 | - if ((msr_data & 0xfffc) == 0x0) |
831 | - return emulate_gp(ctxt, 0); |
832 | - break; |
833 | - case X86EMUL_MODE_PROT64: |
834 | - if (msr_data == 0x0) |
835 | - return emulate_gp(ctxt, 0); |
836 | - break; |
837 | - default: |
838 | - break; |
839 | - } |
840 | + if ((msr_data & 0xfffc) == 0x0) |
841 | + return emulate_gp(ctxt, 0); |
842 | |
843 | ctxt->eflags &= ~(EFLG_VM | EFLG_IF); |
844 | - cs_sel = (u16)msr_data; |
845 | - cs_sel &= ~SELECTOR_RPL_MASK; |
846 | + cs_sel = (u16)msr_data & ~SELECTOR_RPL_MASK; |
847 | ss_sel = cs_sel + 8; |
848 | - ss_sel &= ~SELECTOR_RPL_MASK; |
849 | - if (ctxt->mode == X86EMUL_MODE_PROT64 || (efer & EFER_LMA)) { |
850 | + if (efer & EFER_LMA) { |
851 | cs.d = 0; |
852 | cs.l = 1; |
853 | } |
854 | @@ -2385,10 +2373,11 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) |
855 | ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS); |
856 | |
857 | ops->get_msr(ctxt, MSR_IA32_SYSENTER_EIP, &msr_data); |
858 | - ctxt->_eip = msr_data; |
859 | + ctxt->_eip = (efer & EFER_LMA) ? msr_data : (u32)msr_data; |
860 | |
861 | ops->get_msr(ctxt, MSR_IA32_SYSENTER_ESP, &msr_data); |
862 | - *reg_write(ctxt, VCPU_REGS_RSP) = msr_data; |
863 | + *reg_write(ctxt, VCPU_REGS_RSP) = (efer & EFER_LMA) ? msr_data : |
864 | + (u32)msr_data; |
865 | |
866 | return X86EMUL_CONTINUE; |
867 | } |
868 | @@ -3788,8 +3777,8 @@ static const struct opcode group5[] = { |
869 | }; |
870 | |
871 | static const struct opcode group6[] = { |
872 | - DI(Prot, sldt), |
873 | - DI(Prot, str), |
874 | + DI(Prot | DstMem, sldt), |
875 | + DI(Prot | DstMem, str), |
876 | II(Prot | Priv | SrcMem16, em_lldt, lldt), |
877 | II(Prot | Priv | SrcMem16, em_ltr, ltr), |
878 | N, N, N, N, |
879 | diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c |
880 | index 37c1435889ce..d0583eb61a5d 100644 |
881 | --- a/arch/x86/pci/i386.c |
882 | +++ b/arch/x86/pci/i386.c |
883 | @@ -216,7 +216,7 @@ static void pcibios_allocate_bridge_resources(struct pci_dev *dev) |
884 | continue; |
885 | if (r->parent) /* Already allocated */ |
886 | continue; |
887 | - if (!r->start || pci_claim_resource(dev, idx) < 0) { |
888 | + if (!r->start || pci_claim_bridge_resource(dev, idx) < 0) { |
889 | /* |
890 | * Something is wrong with the region. |
891 | * Invalidate the resource to prevent |
892 | diff --git a/crypto/842.c b/crypto/842.c |
893 | index 65c7a89cfa09..b48f4f108c47 100644 |
894 | --- a/crypto/842.c |
895 | +++ b/crypto/842.c |
896 | @@ -180,3 +180,4 @@ module_exit(nx842_mod_exit); |
897 | |
898 | MODULE_LICENSE("GPL"); |
899 | MODULE_DESCRIPTION("842 Compression Algorithm"); |
900 | +MODULE_ALIAS_CRYPTO("842"); |
901 | diff --git a/crypto/aes_generic.c b/crypto/aes_generic.c |
902 | index fd0d6b454975..3dd101144a58 100644 |
903 | --- a/crypto/aes_generic.c |
904 | +++ b/crypto/aes_generic.c |
905 | @@ -1474,4 +1474,5 @@ module_exit(aes_fini); |
906 | |
907 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); |
908 | MODULE_LICENSE("Dual BSD/GPL"); |
909 | -MODULE_ALIAS("aes"); |
910 | +MODULE_ALIAS_CRYPTO("aes"); |
911 | +MODULE_ALIAS_CRYPTO("aes-generic"); |
912 | diff --git a/crypto/algapi.c b/crypto/algapi.c |
913 | index e8d3a7dca8c4..71a8143e23b1 100644 |
914 | --- a/crypto/algapi.c |
915 | +++ b/crypto/algapi.c |
916 | @@ -509,8 +509,8 @@ static struct crypto_template *__crypto_lookup_template(const char *name) |
917 | |
918 | struct crypto_template *crypto_lookup_template(const char *name) |
919 | { |
920 | - return try_then_request_module(__crypto_lookup_template(name), "%s", |
921 | - name); |
922 | + return try_then_request_module(__crypto_lookup_template(name), |
923 | + "crypto-%s", name); |
924 | } |
925 | EXPORT_SYMBOL_GPL(crypto_lookup_template); |
926 | |
927 | diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c |
928 | index 666f1962a160..6f5bebc9bf01 100644 |
929 | --- a/crypto/ansi_cprng.c |
930 | +++ b/crypto/ansi_cprng.c |
931 | @@ -476,4 +476,5 @@ module_param(dbg, int, 0); |
932 | MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)"); |
933 | module_init(prng_mod_init); |
934 | module_exit(prng_mod_fini); |
935 | -MODULE_ALIAS("stdrng"); |
936 | +MODULE_ALIAS_CRYPTO("stdrng"); |
937 | +MODULE_ALIAS_CRYPTO("ansi_cprng"); |
938 | diff --git a/crypto/anubis.c b/crypto/anubis.c |
939 | index 008c8a4fb67c..4bb187c2a902 100644 |
940 | --- a/crypto/anubis.c |
941 | +++ b/crypto/anubis.c |
942 | @@ -704,3 +704,4 @@ module_exit(anubis_mod_fini); |
943 | |
944 | MODULE_LICENSE("GPL"); |
945 | MODULE_DESCRIPTION("Anubis Cryptographic Algorithm"); |
946 | +MODULE_ALIAS_CRYPTO("anubis"); |
947 | diff --git a/crypto/api.c b/crypto/api.c |
948 | index a2b39c5f3649..2a81e98a0021 100644 |
949 | --- a/crypto/api.c |
950 | +++ b/crypto/api.c |
951 | @@ -216,11 +216,11 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask) |
952 | |
953 | alg = crypto_alg_lookup(name, type, mask); |
954 | if (!alg) { |
955 | - request_module("%s", name); |
956 | + request_module("crypto-%s", name); |
957 | |
958 | if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask & |
959 | CRYPTO_ALG_NEED_FALLBACK)) |
960 | - request_module("%s-all", name); |
961 | + request_module("crypto-%s-all", name); |
962 | |
963 | alg = crypto_alg_lookup(name, type, mask); |
964 | } |
965 | diff --git a/crypto/arc4.c b/crypto/arc4.c |
966 | index 5a772c3657d5..f1a81925558f 100644 |
967 | --- a/crypto/arc4.c |
968 | +++ b/crypto/arc4.c |
969 | @@ -166,3 +166,4 @@ module_exit(arc4_exit); |
970 | MODULE_LICENSE("GPL"); |
971 | MODULE_DESCRIPTION("ARC4 Cipher Algorithm"); |
972 | MODULE_AUTHOR("Jon Oberheide <jon@oberheide.org>"); |
973 | +MODULE_ALIAS_CRYPTO("arc4"); |
974 | diff --git a/crypto/authenc.c b/crypto/authenc.c |
975 | index e1223559d5df..78fb16cab13f 100644 |
976 | --- a/crypto/authenc.c |
977 | +++ b/crypto/authenc.c |
978 | @@ -721,3 +721,4 @@ module_exit(crypto_authenc_module_exit); |
979 | |
980 | MODULE_LICENSE("GPL"); |
981 | MODULE_DESCRIPTION("Simple AEAD wrapper for IPsec"); |
982 | +MODULE_ALIAS_CRYPTO("authenc"); |
983 | diff --git a/crypto/authencesn.c b/crypto/authencesn.c |
984 | index 4be0dd4373a9..024bff2344fc 100644 |
985 | --- a/crypto/authencesn.c |
986 | +++ b/crypto/authencesn.c |
987 | @@ -814,3 +814,4 @@ module_exit(crypto_authenc_esn_module_exit); |
988 | MODULE_LICENSE("GPL"); |
989 | MODULE_AUTHOR("Steffen Klassert <steffen.klassert@secunet.com>"); |
990 | MODULE_DESCRIPTION("AEAD wrapper for IPsec with extended sequence numbers"); |
991 | +MODULE_ALIAS_CRYPTO("authencesn"); |
992 | diff --git a/crypto/blowfish_generic.c b/crypto/blowfish_generic.c |
993 | index 8baf5447d35b..87b392a77a93 100644 |
994 | --- a/crypto/blowfish_generic.c |
995 | +++ b/crypto/blowfish_generic.c |
996 | @@ -138,4 +138,5 @@ module_exit(blowfish_mod_fini); |
997 | |
998 | MODULE_LICENSE("GPL"); |
999 | MODULE_DESCRIPTION("Blowfish Cipher Algorithm"); |
1000 | -MODULE_ALIAS("blowfish"); |
1001 | +MODULE_ALIAS_CRYPTO("blowfish"); |
1002 | +MODULE_ALIAS_CRYPTO("blowfish-generic"); |
1003 | diff --git a/crypto/camellia_generic.c b/crypto/camellia_generic.c |
1004 | index 26bcd7a2d6b4..a02286bf319e 100644 |
1005 | --- a/crypto/camellia_generic.c |
1006 | +++ b/crypto/camellia_generic.c |
1007 | @@ -1098,4 +1098,5 @@ module_exit(camellia_fini); |
1008 | |
1009 | MODULE_DESCRIPTION("Camellia Cipher Algorithm"); |
1010 | MODULE_LICENSE("GPL"); |
1011 | -MODULE_ALIAS("camellia"); |
1012 | +MODULE_ALIAS_CRYPTO("camellia"); |
1013 | +MODULE_ALIAS_CRYPTO("camellia-generic"); |
1014 | diff --git a/crypto/cast5_generic.c b/crypto/cast5_generic.c |
1015 | index 5558f630a0eb..df5c72629383 100644 |
1016 | --- a/crypto/cast5_generic.c |
1017 | +++ b/crypto/cast5_generic.c |
1018 | @@ -549,4 +549,5 @@ module_exit(cast5_mod_fini); |
1019 | |
1020 | MODULE_LICENSE("GPL"); |
1021 | MODULE_DESCRIPTION("Cast5 Cipher Algorithm"); |
1022 | -MODULE_ALIAS("cast5"); |
1023 | +MODULE_ALIAS_CRYPTO("cast5"); |
1024 | +MODULE_ALIAS_CRYPTO("cast5-generic"); |
1025 | diff --git a/crypto/cast6_generic.c b/crypto/cast6_generic.c |
1026 | index de732528a430..058c8d755d03 100644 |
1027 | --- a/crypto/cast6_generic.c |
1028 | +++ b/crypto/cast6_generic.c |
1029 | @@ -291,4 +291,5 @@ module_exit(cast6_mod_fini); |
1030 | |
1031 | MODULE_LICENSE("GPL"); |
1032 | MODULE_DESCRIPTION("Cast6 Cipher Algorithm"); |
1033 | -MODULE_ALIAS("cast6"); |
1034 | +MODULE_ALIAS_CRYPTO("cast6"); |
1035 | +MODULE_ALIAS_CRYPTO("cast6-generic"); |
1036 | diff --git a/crypto/cbc.c b/crypto/cbc.c |
1037 | index 61ac42e1e32b..780ee27b2d43 100644 |
1038 | --- a/crypto/cbc.c |
1039 | +++ b/crypto/cbc.c |
1040 | @@ -289,3 +289,4 @@ module_exit(crypto_cbc_module_exit); |
1041 | |
1042 | MODULE_LICENSE("GPL"); |
1043 | MODULE_DESCRIPTION("CBC block cipher algorithm"); |
1044 | +MODULE_ALIAS_CRYPTO("cbc"); |
1045 | diff --git a/crypto/ccm.c b/crypto/ccm.c |
1046 | index 1df84217f7c9..003bbbd21a2b 100644 |
1047 | --- a/crypto/ccm.c |
1048 | +++ b/crypto/ccm.c |
1049 | @@ -879,5 +879,6 @@ module_exit(crypto_ccm_module_exit); |
1050 | |
1051 | MODULE_LICENSE("GPL"); |
1052 | MODULE_DESCRIPTION("Counter with CBC MAC"); |
1053 | -MODULE_ALIAS("ccm_base"); |
1054 | -MODULE_ALIAS("rfc4309"); |
1055 | +MODULE_ALIAS_CRYPTO("ccm_base"); |
1056 | +MODULE_ALIAS_CRYPTO("rfc4309"); |
1057 | +MODULE_ALIAS_CRYPTO("ccm"); |
1058 | diff --git a/crypto/chainiv.c b/crypto/chainiv.c |
1059 | index 9c294c8f9a07..63c17d5992f7 100644 |
1060 | --- a/crypto/chainiv.c |
1061 | +++ b/crypto/chainiv.c |
1062 | @@ -359,3 +359,4 @@ module_exit(chainiv_module_exit); |
1063 | |
1064 | MODULE_LICENSE("GPL"); |
1065 | MODULE_DESCRIPTION("Chain IV Generator"); |
1066 | +MODULE_ALIAS_CRYPTO("chainiv"); |
1067 | diff --git a/crypto/cmac.c b/crypto/cmac.c |
1068 | index 50880cf17fad..7a8bfbd548f6 100644 |
1069 | --- a/crypto/cmac.c |
1070 | +++ b/crypto/cmac.c |
1071 | @@ -313,3 +313,4 @@ module_exit(crypto_cmac_module_exit); |
1072 | |
1073 | MODULE_LICENSE("GPL"); |
1074 | MODULE_DESCRIPTION("CMAC keyed hash algorithm"); |
1075 | +MODULE_ALIAS_CRYPTO("cmac"); |
1076 | diff --git a/crypto/crc32.c b/crypto/crc32.c |
1077 | index 9d1c41569898..187ded28cb0b 100644 |
1078 | --- a/crypto/crc32.c |
1079 | +++ b/crypto/crc32.c |
1080 | @@ -156,3 +156,4 @@ module_exit(crc32_mod_fini); |
1081 | MODULE_AUTHOR("Alexander Boyko <alexander_boyko@xyratex.com>"); |
1082 | MODULE_DESCRIPTION("CRC32 calculations wrapper for lib/crc32"); |
1083 | MODULE_LICENSE("GPL"); |
1084 | +MODULE_ALIAS_CRYPTO("crc32"); |
1085 | diff --git a/crypto/crc32c_generic.c b/crypto/crc32c_generic.c |
1086 | index d9c7beba8e50..06f1b60f02b2 100644 |
1087 | --- a/crypto/crc32c_generic.c |
1088 | +++ b/crypto/crc32c_generic.c |
1089 | @@ -170,5 +170,6 @@ module_exit(crc32c_mod_fini); |
1090 | MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>"); |
1091 | MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations wrapper for lib/crc32c"); |
1092 | MODULE_LICENSE("GPL"); |
1093 | -MODULE_ALIAS("crc32c"); |
1094 | +MODULE_ALIAS_CRYPTO("crc32c"); |
1095 | +MODULE_ALIAS_CRYPTO("crc32c-generic"); |
1096 | MODULE_SOFTDEP("pre: crc32c"); |
1097 | diff --git a/crypto/crct10dif_generic.c b/crypto/crct10dif_generic.c |
1098 | index 877e7114ec5c..c1229614c7e3 100644 |
1099 | --- a/crypto/crct10dif_generic.c |
1100 | +++ b/crypto/crct10dif_generic.c |
1101 | @@ -124,4 +124,5 @@ module_exit(crct10dif_mod_fini); |
1102 | MODULE_AUTHOR("Tim Chen <tim.c.chen@linux.intel.com>"); |
1103 | MODULE_DESCRIPTION("T10 DIF CRC calculation."); |
1104 | MODULE_LICENSE("GPL"); |
1105 | -MODULE_ALIAS("crct10dif"); |
1106 | +MODULE_ALIAS_CRYPTO("crct10dif"); |
1107 | +MODULE_ALIAS_CRYPTO("crct10dif-generic"); |
1108 | diff --git a/crypto/cryptd.c b/crypto/cryptd.c |
1109 | index e592c90abebb..650afac10fd7 100644 |
1110 | --- a/crypto/cryptd.c |
1111 | +++ b/crypto/cryptd.c |
1112 | @@ -955,3 +955,4 @@ module_exit(cryptd_exit); |
1113 | |
1114 | MODULE_LICENSE("GPL"); |
1115 | MODULE_DESCRIPTION("Software async crypto daemon"); |
1116 | +MODULE_ALIAS_CRYPTO("cryptd"); |
1117 | diff --git a/crypto/crypto_null.c b/crypto/crypto_null.c |
1118 | index 1dc54bb95a87..a20319132e33 100644 |
1119 | --- a/crypto/crypto_null.c |
1120 | +++ b/crypto/crypto_null.c |
1121 | @@ -145,9 +145,9 @@ static struct crypto_alg null_algs[3] = { { |
1122 | .coa_decompress = null_compress } } |
1123 | } }; |
1124 | |
1125 | -MODULE_ALIAS("compress_null"); |
1126 | -MODULE_ALIAS("digest_null"); |
1127 | -MODULE_ALIAS("cipher_null"); |
1128 | +MODULE_ALIAS_CRYPTO("compress_null"); |
1129 | +MODULE_ALIAS_CRYPTO("digest_null"); |
1130 | +MODULE_ALIAS_CRYPTO("cipher_null"); |
1131 | |
1132 | static int __init crypto_null_mod_init(void) |
1133 | { |
1134 | diff --git a/crypto/ctr.c b/crypto/ctr.c |
1135 | index f2b94f27bb2c..2386f7313952 100644 |
1136 | --- a/crypto/ctr.c |
1137 | +++ b/crypto/ctr.c |
1138 | @@ -466,4 +466,5 @@ module_exit(crypto_ctr_module_exit); |
1139 | |
1140 | MODULE_LICENSE("GPL"); |
1141 | MODULE_DESCRIPTION("CTR Counter block mode"); |
1142 | -MODULE_ALIAS("rfc3686"); |
1143 | +MODULE_ALIAS_CRYPTO("rfc3686"); |
1144 | +MODULE_ALIAS_CRYPTO("ctr"); |
1145 | diff --git a/crypto/cts.c b/crypto/cts.c |
1146 | index 133f0874c95e..bd9405820e8a 100644 |
1147 | --- a/crypto/cts.c |
1148 | +++ b/crypto/cts.c |
1149 | @@ -351,3 +351,4 @@ module_exit(crypto_cts_module_exit); |
1150 | |
1151 | MODULE_LICENSE("Dual BSD/GPL"); |
1152 | MODULE_DESCRIPTION("CTS-CBC CipherText Stealing for CBC"); |
1153 | +MODULE_ALIAS_CRYPTO("cts"); |
1154 | diff --git a/crypto/deflate.c b/crypto/deflate.c |
1155 | index b57d70eb156b..95d8d37c5021 100644 |
1156 | --- a/crypto/deflate.c |
1157 | +++ b/crypto/deflate.c |
1158 | @@ -222,4 +222,4 @@ module_exit(deflate_mod_fini); |
1159 | MODULE_LICENSE("GPL"); |
1160 | MODULE_DESCRIPTION("Deflate Compression Algorithm for IPCOMP"); |
1161 | MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>"); |
1162 | - |
1163 | +MODULE_ALIAS_CRYPTO("deflate"); |
1164 | diff --git a/crypto/des_generic.c b/crypto/des_generic.c |
1165 | index 298d464ab7d2..a71720544d11 100644 |
1166 | --- a/crypto/des_generic.c |
1167 | +++ b/crypto/des_generic.c |
1168 | @@ -983,8 +983,6 @@ static struct crypto_alg des_algs[2] = { { |
1169 | .cia_decrypt = des3_ede_decrypt } } |
1170 | } }; |
1171 | |
1172 | -MODULE_ALIAS("des3_ede"); |
1173 | - |
1174 | static int __init des_generic_mod_init(void) |
1175 | { |
1176 | return crypto_register_algs(des_algs, ARRAY_SIZE(des_algs)); |
1177 | @@ -1001,4 +999,7 @@ module_exit(des_generic_mod_fini); |
1178 | MODULE_LICENSE("GPL"); |
1179 | MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms"); |
1180 | MODULE_AUTHOR("Dag Arne Osvik <da@osvik.no>"); |
1181 | -MODULE_ALIAS("des"); |
1182 | +MODULE_ALIAS_CRYPTO("des"); |
1183 | +MODULE_ALIAS_CRYPTO("des-generic"); |
1184 | +MODULE_ALIAS_CRYPTO("des3_ede"); |
1185 | +MODULE_ALIAS_CRYPTO("des3_ede-generic"); |
1186 | diff --git a/crypto/ecb.c b/crypto/ecb.c |
1187 | index 935cfef4aa84..12011aff0971 100644 |
1188 | --- a/crypto/ecb.c |
1189 | +++ b/crypto/ecb.c |
1190 | @@ -185,3 +185,4 @@ module_exit(crypto_ecb_module_exit); |
1191 | |
1192 | MODULE_LICENSE("GPL"); |
1193 | MODULE_DESCRIPTION("ECB block cipher algorithm"); |
1194 | +MODULE_ALIAS_CRYPTO("ecb"); |
1195 | diff --git a/crypto/eseqiv.c b/crypto/eseqiv.c |
1196 | index bf7ab4a89493..f116fae766f8 100644 |
1197 | --- a/crypto/eseqiv.c |
1198 | +++ b/crypto/eseqiv.c |
1199 | @@ -267,3 +267,4 @@ module_exit(eseqiv_module_exit); |
1200 | |
1201 | MODULE_LICENSE("GPL"); |
1202 | MODULE_DESCRIPTION("Encrypted Sequence Number IV Generator"); |
1203 | +MODULE_ALIAS_CRYPTO("eseqiv"); |
1204 | diff --git a/crypto/fcrypt.c b/crypto/fcrypt.c |
1205 | index 021d7fec6bc8..77286ea28865 100644 |
1206 | --- a/crypto/fcrypt.c |
1207 | +++ b/crypto/fcrypt.c |
1208 | @@ -420,3 +420,4 @@ module_exit(fcrypt_mod_fini); |
1209 | MODULE_LICENSE("Dual BSD/GPL"); |
1210 | MODULE_DESCRIPTION("FCrypt Cipher Algorithm"); |
1211 | MODULE_AUTHOR("David Howells <dhowells@redhat.com>"); |
1212 | +MODULE_ALIAS_CRYPTO("fcrypt"); |
1213 | diff --git a/crypto/gcm.c b/crypto/gcm.c |
1214 | index 276cdac567b6..2e403f6138c1 100644 |
1215 | --- a/crypto/gcm.c |
1216 | +++ b/crypto/gcm.c |
1217 | @@ -1441,6 +1441,7 @@ module_exit(crypto_gcm_module_exit); |
1218 | MODULE_LICENSE("GPL"); |
1219 | MODULE_DESCRIPTION("Galois/Counter Mode"); |
1220 | MODULE_AUTHOR("Mikko Herranen <mh1@iki.fi>"); |
1221 | -MODULE_ALIAS("gcm_base"); |
1222 | -MODULE_ALIAS("rfc4106"); |
1223 | -MODULE_ALIAS("rfc4543"); |
1224 | +MODULE_ALIAS_CRYPTO("gcm_base"); |
1225 | +MODULE_ALIAS_CRYPTO("rfc4106"); |
1226 | +MODULE_ALIAS_CRYPTO("rfc4543"); |
1227 | +MODULE_ALIAS_CRYPTO("gcm"); |
1228 | diff --git a/crypto/ghash-generic.c b/crypto/ghash-generic.c |
1229 | index 9d3f0c69a86f..bac70995e064 100644 |
1230 | --- a/crypto/ghash-generic.c |
1231 | +++ b/crypto/ghash-generic.c |
1232 | @@ -172,4 +172,5 @@ module_exit(ghash_mod_exit); |
1233 | |
1234 | MODULE_LICENSE("GPL"); |
1235 | MODULE_DESCRIPTION("GHASH Message Digest Algorithm"); |
1236 | -MODULE_ALIAS("ghash"); |
1237 | +MODULE_ALIAS_CRYPTO("ghash"); |
1238 | +MODULE_ALIAS_CRYPTO("ghash-generic"); |
1239 | diff --git a/crypto/hmac.c b/crypto/hmac.c |
1240 | index e392219ddc61..72e38c098bb3 100644 |
1241 | --- a/crypto/hmac.c |
1242 | +++ b/crypto/hmac.c |
1243 | @@ -268,3 +268,4 @@ module_exit(hmac_module_exit); |
1244 | |
1245 | MODULE_LICENSE("GPL"); |
1246 | MODULE_DESCRIPTION("HMAC hash algorithm"); |
1247 | +MODULE_ALIAS_CRYPTO("hmac"); |
1248 | diff --git a/crypto/khazad.c b/crypto/khazad.c |
1249 | index 60e7cd66facc..873eb5ded6d7 100644 |
1250 | --- a/crypto/khazad.c |
1251 | +++ b/crypto/khazad.c |
1252 | @@ -880,3 +880,4 @@ module_exit(khazad_mod_fini); |
1253 | |
1254 | MODULE_LICENSE("GPL"); |
1255 | MODULE_DESCRIPTION("Khazad Cryptographic Algorithm"); |
1256 | +MODULE_ALIAS_CRYPTO("khazad"); |
1257 | diff --git a/crypto/krng.c b/crypto/krng.c |
1258 | index a2d2b72fc135..0224841b6579 100644 |
1259 | --- a/crypto/krng.c |
1260 | +++ b/crypto/krng.c |
1261 | @@ -62,4 +62,5 @@ module_exit(krng_mod_fini); |
1262 | |
1263 | MODULE_LICENSE("GPL"); |
1264 | MODULE_DESCRIPTION("Kernel Random Number Generator"); |
1265 | -MODULE_ALIAS("stdrng"); |
1266 | +MODULE_ALIAS_CRYPTO("stdrng"); |
1267 | +MODULE_ALIAS_CRYPTO("krng"); |
1268 | diff --git a/crypto/lrw.c b/crypto/lrw.c |
1269 | index ba42acc4deba..6f9908a7ebcb 100644 |
1270 | --- a/crypto/lrw.c |
1271 | +++ b/crypto/lrw.c |
1272 | @@ -400,3 +400,4 @@ module_exit(crypto_module_exit); |
1273 | |
1274 | MODULE_LICENSE("GPL"); |
1275 | MODULE_DESCRIPTION("LRW block cipher mode"); |
1276 | +MODULE_ALIAS_CRYPTO("lrw"); |
1277 | diff --git a/crypto/lz4.c b/crypto/lz4.c |
1278 | index 34d072b72a73..aefbceaf3104 100644 |
1279 | --- a/crypto/lz4.c |
1280 | +++ b/crypto/lz4.c |
1281 | @@ -104,3 +104,4 @@ module_exit(lz4_mod_fini); |
1282 | |
1283 | MODULE_LICENSE("GPL"); |
1284 | MODULE_DESCRIPTION("LZ4 Compression Algorithm"); |
1285 | +MODULE_ALIAS_CRYPTO("lz4"); |
1286 | diff --git a/crypto/lz4hc.c b/crypto/lz4hc.c |
1287 | index 9218b3fed5e3..a1d3b5bd3d85 100644 |
1288 | --- a/crypto/lz4hc.c |
1289 | +++ b/crypto/lz4hc.c |
1290 | @@ -104,3 +104,4 @@ module_exit(lz4hc_mod_fini); |
1291 | |
1292 | MODULE_LICENSE("GPL"); |
1293 | MODULE_DESCRIPTION("LZ4HC Compression Algorithm"); |
1294 | +MODULE_ALIAS_CRYPTO("lz4hc"); |
1295 | diff --git a/crypto/lzo.c b/crypto/lzo.c |
1296 | index a8ff2f778dc4..4b3e92525dac 100644 |
1297 | --- a/crypto/lzo.c |
1298 | +++ b/crypto/lzo.c |
1299 | @@ -107,3 +107,4 @@ module_exit(lzo_mod_fini); |
1300 | |
1301 | MODULE_LICENSE("GPL"); |
1302 | MODULE_DESCRIPTION("LZO Compression Algorithm"); |
1303 | +MODULE_ALIAS_CRYPTO("lzo"); |
1304 | diff --git a/crypto/mcryptd.c b/crypto/mcryptd.c |
1305 | index b39fbd530102..a8e870444ea9 100644 |
1306 | --- a/crypto/mcryptd.c |
1307 | +++ b/crypto/mcryptd.c |
1308 | @@ -703,3 +703,4 @@ module_exit(mcryptd_exit); |
1309 | |
1310 | MODULE_LICENSE("GPL"); |
1311 | MODULE_DESCRIPTION("Software async multibuffer crypto daemon"); |
1312 | +MODULE_ALIAS_CRYPTO("mcryptd"); |
1313 | diff --git a/crypto/md4.c b/crypto/md4.c |
1314 | index 0477a6a01d58..3515af425cc9 100644 |
1315 | --- a/crypto/md4.c |
1316 | +++ b/crypto/md4.c |
1317 | @@ -255,4 +255,4 @@ module_exit(md4_mod_fini); |
1318 | |
1319 | MODULE_LICENSE("GPL"); |
1320 | MODULE_DESCRIPTION("MD4 Message Digest Algorithm"); |
1321 | - |
1322 | +MODULE_ALIAS_CRYPTO("md4"); |
1323 | diff --git a/crypto/md5.c b/crypto/md5.c |
1324 | index 7febeaab923b..36f5e5b103f3 100644 |
1325 | --- a/crypto/md5.c |
1326 | +++ b/crypto/md5.c |
1327 | @@ -168,3 +168,4 @@ module_exit(md5_mod_fini); |
1328 | |
1329 | MODULE_LICENSE("GPL"); |
1330 | MODULE_DESCRIPTION("MD5 Message Digest Algorithm"); |
1331 | +MODULE_ALIAS_CRYPTO("md5"); |
1332 | diff --git a/crypto/michael_mic.c b/crypto/michael_mic.c |
1333 | index 079b761bc70d..46195e0d0f4d 100644 |
1334 | --- a/crypto/michael_mic.c |
1335 | +++ b/crypto/michael_mic.c |
1336 | @@ -184,3 +184,4 @@ module_exit(michael_mic_exit); |
1337 | MODULE_LICENSE("GPL v2"); |
1338 | MODULE_DESCRIPTION("Michael MIC"); |
1339 | MODULE_AUTHOR("Jouni Malinen <j@w1.fi>"); |
1340 | +MODULE_ALIAS_CRYPTO("michael_mic"); |
1341 | diff --git a/crypto/pcbc.c b/crypto/pcbc.c |
1342 | index d1b8bdfb5855..f654965f0933 100644 |
1343 | --- a/crypto/pcbc.c |
1344 | +++ b/crypto/pcbc.c |
1345 | @@ -295,3 +295,4 @@ module_exit(crypto_pcbc_module_exit); |
1346 | |
1347 | MODULE_LICENSE("GPL"); |
1348 | MODULE_DESCRIPTION("PCBC block cipher algorithm"); |
1349 | +MODULE_ALIAS_CRYPTO("pcbc"); |
1350 | diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c |
1351 | index 309d345ead95..c305d4112735 100644 |
1352 | --- a/crypto/pcrypt.c |
1353 | +++ b/crypto/pcrypt.c |
1354 | @@ -565,3 +565,4 @@ module_exit(pcrypt_exit); |
1355 | MODULE_LICENSE("GPL"); |
1356 | MODULE_AUTHOR("Steffen Klassert <steffen.klassert@secunet.com>"); |
1357 | MODULE_DESCRIPTION("Parallel crypto wrapper"); |
1358 | +MODULE_ALIAS_CRYPTO("pcrypt"); |
1359 | diff --git a/crypto/rmd128.c b/crypto/rmd128.c |
1360 | index 8a0f68b7f257..049486ede938 100644 |
1361 | --- a/crypto/rmd128.c |
1362 | +++ b/crypto/rmd128.c |
1363 | @@ -327,3 +327,4 @@ module_exit(rmd128_mod_fini); |
1364 | MODULE_LICENSE("GPL"); |
1365 | MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>"); |
1366 | MODULE_DESCRIPTION("RIPEMD-128 Message Digest"); |
1367 | +MODULE_ALIAS_CRYPTO("rmd128"); |
1368 | diff --git a/crypto/rmd160.c b/crypto/rmd160.c |
1369 | index 525d7bb752cf..de585e51d455 100644 |
1370 | --- a/crypto/rmd160.c |
1371 | +++ b/crypto/rmd160.c |
1372 | @@ -371,3 +371,4 @@ module_exit(rmd160_mod_fini); |
1373 | MODULE_LICENSE("GPL"); |
1374 | MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>"); |
1375 | MODULE_DESCRIPTION("RIPEMD-160 Message Digest"); |
1376 | +MODULE_ALIAS_CRYPTO("rmd160"); |
1377 | diff --git a/crypto/rmd256.c b/crypto/rmd256.c |
1378 | index 69293d9b56e0..4ec02a754e09 100644 |
1379 | --- a/crypto/rmd256.c |
1380 | +++ b/crypto/rmd256.c |
1381 | @@ -346,3 +346,4 @@ module_exit(rmd256_mod_fini); |
1382 | MODULE_LICENSE("GPL"); |
1383 | MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>"); |
1384 | MODULE_DESCRIPTION("RIPEMD-256 Message Digest"); |
1385 | +MODULE_ALIAS_CRYPTO("rmd256"); |
1386 | diff --git a/crypto/rmd320.c b/crypto/rmd320.c |
1387 | index 09f97dfdfbba..770f2cb369f8 100644 |
1388 | --- a/crypto/rmd320.c |
1389 | +++ b/crypto/rmd320.c |
1390 | @@ -395,3 +395,4 @@ module_exit(rmd320_mod_fini); |
1391 | MODULE_LICENSE("GPL"); |
1392 | MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>"); |
1393 | MODULE_DESCRIPTION("RIPEMD-320 Message Digest"); |
1394 | +MODULE_ALIAS_CRYPTO("rmd320"); |
1395 | diff --git a/crypto/salsa20_generic.c b/crypto/salsa20_generic.c |
1396 | index 9a4770c02284..f550b5d94630 100644 |
1397 | --- a/crypto/salsa20_generic.c |
1398 | +++ b/crypto/salsa20_generic.c |
1399 | @@ -248,4 +248,5 @@ module_exit(salsa20_generic_mod_fini); |
1400 | |
1401 | MODULE_LICENSE("GPL"); |
1402 | MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm"); |
1403 | -MODULE_ALIAS("salsa20"); |
1404 | +MODULE_ALIAS_CRYPTO("salsa20"); |
1405 | +MODULE_ALIAS_CRYPTO("salsa20-generic"); |
1406 | diff --git a/crypto/seed.c b/crypto/seed.c |
1407 | index 9c904d6d2151..c6ba8438be43 100644 |
1408 | --- a/crypto/seed.c |
1409 | +++ b/crypto/seed.c |
1410 | @@ -476,3 +476,4 @@ module_exit(seed_fini); |
1411 | MODULE_DESCRIPTION("SEED Cipher Algorithm"); |
1412 | MODULE_LICENSE("GPL"); |
1413 | MODULE_AUTHOR("Hye-Shik Chang <perky@FreeBSD.org>, Kim Hyun <hkim@kisa.or.kr>"); |
1414 | +MODULE_ALIAS_CRYPTO("seed"); |
1415 | diff --git a/crypto/seqiv.c b/crypto/seqiv.c |
1416 | index ee190fcedcd2..9daa854cc485 100644 |
1417 | --- a/crypto/seqiv.c |
1418 | +++ b/crypto/seqiv.c |
1419 | @@ -362,3 +362,4 @@ module_exit(seqiv_module_exit); |
1420 | |
1421 | MODULE_LICENSE("GPL"); |
1422 | MODULE_DESCRIPTION("Sequence Number IV Generator"); |
1423 | +MODULE_ALIAS_CRYPTO("seqiv"); |
1424 | diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c |
1425 | index 7ddbd7e88859..94970a794975 100644 |
1426 | --- a/crypto/serpent_generic.c |
1427 | +++ b/crypto/serpent_generic.c |
1428 | @@ -665,5 +665,6 @@ module_exit(serpent_mod_fini); |
1429 | MODULE_LICENSE("GPL"); |
1430 | MODULE_DESCRIPTION("Serpent and tnepres (kerneli compatible serpent reversed) Cipher Algorithm"); |
1431 | MODULE_AUTHOR("Dag Arne Osvik <osvik@ii.uib.no>"); |
1432 | -MODULE_ALIAS("tnepres"); |
1433 | -MODULE_ALIAS("serpent"); |
1434 | +MODULE_ALIAS_CRYPTO("tnepres"); |
1435 | +MODULE_ALIAS_CRYPTO("serpent"); |
1436 | +MODULE_ALIAS_CRYPTO("serpent-generic"); |
1437 | diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c |
1438 | index 7bb047432782..a3e50c37eb6f 100644 |
1439 | --- a/crypto/sha1_generic.c |
1440 | +++ b/crypto/sha1_generic.c |
1441 | @@ -153,4 +153,5 @@ module_exit(sha1_generic_mod_fini); |
1442 | MODULE_LICENSE("GPL"); |
1443 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm"); |
1444 | |
1445 | -MODULE_ALIAS("sha1"); |
1446 | +MODULE_ALIAS_CRYPTO("sha1"); |
1447 | +MODULE_ALIAS_CRYPTO("sha1-generic"); |
1448 | diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c |
1449 | index 65e7b76b057f..b001ff5c2efc 100644 |
1450 | --- a/crypto/sha256_generic.c |
1451 | +++ b/crypto/sha256_generic.c |
1452 | @@ -384,5 +384,7 @@ module_exit(sha256_generic_mod_fini); |
1453 | MODULE_LICENSE("GPL"); |
1454 | MODULE_DESCRIPTION("SHA-224 and SHA-256 Secure Hash Algorithm"); |
1455 | |
1456 | -MODULE_ALIAS("sha224"); |
1457 | -MODULE_ALIAS("sha256"); |
1458 | +MODULE_ALIAS_CRYPTO("sha224"); |
1459 | +MODULE_ALIAS_CRYPTO("sha224-generic"); |
1460 | +MODULE_ALIAS_CRYPTO("sha256"); |
1461 | +MODULE_ALIAS_CRYPTO("sha256-generic"); |
1462 | diff --git a/crypto/sha512_generic.c b/crypto/sha512_generic.c |
1463 | index 95db67197cd9..1c3c3767e079 100644 |
1464 | --- a/crypto/sha512_generic.c |
1465 | +++ b/crypto/sha512_generic.c |
1466 | @@ -288,5 +288,7 @@ module_exit(sha512_generic_mod_fini); |
1467 | MODULE_LICENSE("GPL"); |
1468 | MODULE_DESCRIPTION("SHA-512 and SHA-384 Secure Hash Algorithms"); |
1469 | |
1470 | -MODULE_ALIAS("sha384"); |
1471 | -MODULE_ALIAS("sha512"); |
1472 | +MODULE_ALIAS_CRYPTO("sha384"); |
1473 | +MODULE_ALIAS_CRYPTO("sha384-generic"); |
1474 | +MODULE_ALIAS_CRYPTO("sha512"); |
1475 | +MODULE_ALIAS_CRYPTO("sha512-generic"); |
1476 | diff --git a/crypto/tea.c b/crypto/tea.c |
1477 | index 0a572323ee4a..b70b441c7d1e 100644 |
1478 | --- a/crypto/tea.c |
1479 | +++ b/crypto/tea.c |
1480 | @@ -270,8 +270,9 @@ static void __exit tea_mod_fini(void) |
1481 | crypto_unregister_algs(tea_algs, ARRAY_SIZE(tea_algs)); |
1482 | } |
1483 | |
1484 | -MODULE_ALIAS("xtea"); |
1485 | -MODULE_ALIAS("xeta"); |
1486 | +MODULE_ALIAS_CRYPTO("tea"); |
1487 | +MODULE_ALIAS_CRYPTO("xtea"); |
1488 | +MODULE_ALIAS_CRYPTO("xeta"); |
1489 | |
1490 | module_init(tea_mod_init); |
1491 | module_exit(tea_mod_fini); |
1492 | diff --git a/crypto/tgr192.c b/crypto/tgr192.c |
1493 | index 3c7af0d1ff7a..321bc6ff2a9d 100644 |
1494 | --- a/crypto/tgr192.c |
1495 | +++ b/crypto/tgr192.c |
1496 | @@ -676,8 +676,9 @@ static void __exit tgr192_mod_fini(void) |
1497 | crypto_unregister_shashes(tgr_algs, ARRAY_SIZE(tgr_algs)); |
1498 | } |
1499 | |
1500 | -MODULE_ALIAS("tgr160"); |
1501 | -MODULE_ALIAS("tgr128"); |
1502 | +MODULE_ALIAS_CRYPTO("tgr192"); |
1503 | +MODULE_ALIAS_CRYPTO("tgr160"); |
1504 | +MODULE_ALIAS_CRYPTO("tgr128"); |
1505 | |
1506 | module_init(tgr192_mod_init); |
1507 | module_exit(tgr192_mod_fini); |
1508 | diff --git a/crypto/twofish_generic.c b/crypto/twofish_generic.c |
1509 | index 2d5000552d0f..ebf7a3efb572 100644 |
1510 | --- a/crypto/twofish_generic.c |
1511 | +++ b/crypto/twofish_generic.c |
1512 | @@ -211,4 +211,5 @@ module_exit(twofish_mod_fini); |
1513 | |
1514 | MODULE_LICENSE("GPL"); |
1515 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm"); |
1516 | -MODULE_ALIAS("twofish"); |
1517 | +MODULE_ALIAS_CRYPTO("twofish"); |
1518 | +MODULE_ALIAS_CRYPTO("twofish-generic"); |
1519 | diff --git a/crypto/vmac.c b/crypto/vmac.c |
1520 | index d84c24bd7ff7..df76a816cfb2 100644 |
1521 | --- a/crypto/vmac.c |
1522 | +++ b/crypto/vmac.c |
1523 | @@ -713,3 +713,4 @@ module_exit(vmac_module_exit); |
1524 | |
1525 | MODULE_LICENSE("GPL"); |
1526 | MODULE_DESCRIPTION("VMAC hash algorithm"); |
1527 | +MODULE_ALIAS_CRYPTO("vmac"); |
1528 | diff --git a/crypto/wp512.c b/crypto/wp512.c |
1529 | index ec64e7762fbb..7ee5a043a988 100644 |
1530 | --- a/crypto/wp512.c |
1531 | +++ b/crypto/wp512.c |
1532 | @@ -1167,8 +1167,9 @@ static void __exit wp512_mod_fini(void) |
1533 | crypto_unregister_shashes(wp_algs, ARRAY_SIZE(wp_algs)); |
1534 | } |
1535 | |
1536 | -MODULE_ALIAS("wp384"); |
1537 | -MODULE_ALIAS("wp256"); |
1538 | +MODULE_ALIAS_CRYPTO("wp512"); |
1539 | +MODULE_ALIAS_CRYPTO("wp384"); |
1540 | +MODULE_ALIAS_CRYPTO("wp256"); |
1541 | |
1542 | module_init(wp512_mod_init); |
1543 | module_exit(wp512_mod_fini); |
1544 | diff --git a/crypto/xcbc.c b/crypto/xcbc.c |
1545 | index a5fbdf3738cf..df90b332554c 100644 |
1546 | --- a/crypto/xcbc.c |
1547 | +++ b/crypto/xcbc.c |
1548 | @@ -286,3 +286,4 @@ module_exit(crypto_xcbc_module_exit); |
1549 | |
1550 | MODULE_LICENSE("GPL"); |
1551 | MODULE_DESCRIPTION("XCBC keyed hash algorithm"); |
1552 | +MODULE_ALIAS_CRYPTO("xcbc"); |
1553 | diff --git a/crypto/xts.c b/crypto/xts.c |
1554 | index ca1608f44cb5..f6fd43f100c8 100644 |
1555 | --- a/crypto/xts.c |
1556 | +++ b/crypto/xts.c |
1557 | @@ -362,3 +362,4 @@ module_exit(crypto_module_exit); |
1558 | |
1559 | MODULE_LICENSE("GPL"); |
1560 | MODULE_DESCRIPTION("XTS block cipher mode"); |
1561 | +MODULE_ALIAS_CRYPTO("xts"); |
1562 | diff --git a/crypto/zlib.c b/crypto/zlib.c |
1563 | index c9ee681d57fd..0eefa9d237ac 100644 |
1564 | --- a/crypto/zlib.c |
1565 | +++ b/crypto/zlib.c |
1566 | @@ -378,3 +378,4 @@ module_exit(zlib_mod_fini); |
1567 | MODULE_LICENSE("GPL"); |
1568 | MODULE_DESCRIPTION("Zlib Compression Algorithm"); |
1569 | MODULE_AUTHOR("Sony Corporation"); |
1570 | +MODULE_ALIAS_CRYPTO("zlib"); |
1571 | diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c |
1572 | index 93b71420a046..6341e668f362 100644 |
1573 | --- a/drivers/acpi/device_pm.c |
1574 | +++ b/drivers/acpi/device_pm.c |
1575 | @@ -680,13 +680,21 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state, |
1576 | if (error) |
1577 | return error; |
1578 | |
1579 | + if (adev->wakeup.flags.enabled) |
1580 | + return 0; |
1581 | + |
1582 | res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number); |
1583 | - if (ACPI_FAILURE(res)) { |
1584 | + if (ACPI_SUCCESS(res)) { |
1585 | + adev->wakeup.flags.enabled = 1; |
1586 | + } else { |
1587 | acpi_disable_wakeup_device_power(adev); |
1588 | return -EIO; |
1589 | } |
1590 | } else { |
1591 | - acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); |
1592 | + if (adev->wakeup.flags.enabled) { |
1593 | + acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); |
1594 | + adev->wakeup.flags.enabled = 0; |
1595 | + } |
1596 | acpi_disable_wakeup_device_power(adev); |
1597 | } |
1598 | return 0; |
1599 | diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c |
1600 | index 0f8538f238b6..0ffd3c930bed 100644 |
1601 | --- a/drivers/ata/ahci_xgene.c |
1602 | +++ b/drivers/ata/ahci_xgene.c |
1603 | @@ -188,7 +188,7 @@ static unsigned int xgene_ahci_read_id(struct ata_device *dev, |
1604 | * |
1605 | * Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP |
1606 | */ |
1607 | - id[ATA_ID_FEATURE_SUPP] &= ~(1 << 8); |
1608 | + id[ATA_ID_FEATURE_SUPP] &= cpu_to_le16(~(1 << 8)); |
1609 | |
1610 | return 0; |
1611 | } |
1612 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c |
1613 | index c5ba15af87d3..485f7eab0d4b 100644 |
1614 | --- a/drivers/ata/libata-core.c |
1615 | +++ b/drivers/ata/libata-core.c |
1616 | @@ -4740,7 +4740,10 @@ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap) |
1617 | return NULL; |
1618 | |
1619 | for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) { |
1620 | - tag = tag < max_queue ? tag : 0; |
1621 | + if (ap->flags & ATA_FLAG_LOWTAG) |
1622 | + tag = i; |
1623 | + else |
1624 | + tag = tag < max_queue ? tag : 0; |
1625 | |
1626 | /* the last tag is reserved for internal command. */ |
1627 | if (tag == ATA_TAG_INTERNAL) |
1628 | diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c |
1629 | index db90aa35cb71..2e86e3b85266 100644 |
1630 | --- a/drivers/ata/libata-sff.c |
1631 | +++ b/drivers/ata/libata-sff.c |
1632 | @@ -1333,7 +1333,19 @@ void ata_sff_flush_pio_task(struct ata_port *ap) |
1633 | DPRINTK("ENTER\n"); |
1634 | |
1635 | cancel_delayed_work_sync(&ap->sff_pio_task); |
1636 | + |
1637 | + /* |
1638 | + * We wanna reset the HSM state to IDLE. If we do so without |
1639 | + * grabbing the port lock, critical sections protected by it which |
1640 | + * expect the HSM state to stay stable may get surprised. For |
1641 | + * example, we may set IDLE in between the time |
1642 | + * __ata_sff_port_intr() checks for HSM_ST_IDLE and before it calls |
1643 | + * ata_sff_hsm_move() causing ata_sff_hsm_move() to BUG(). |
1644 | + */ |
1645 | + spin_lock_irq(ap->lock); |
1646 | ap->hsm_task_state = HSM_ST_IDLE; |
1647 | + spin_unlock_irq(ap->lock); |
1648 | + |
1649 | ap->sff_pio_task_link = NULL; |
1650 | |
1651 | if (ata_msg_ctl(ap)) |
1652 | diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c |
1653 | index 0bb2cabd2197..4ebaa1e7b2d3 100644 |
1654 | --- a/drivers/ata/sata_dwc_460ex.c |
1655 | +++ b/drivers/ata/sata_dwc_460ex.c |
1656 | @@ -797,7 +797,7 @@ static int dma_dwc_init(struct sata_dwc_device *hsdev, int irq) |
1657 | if (err) { |
1658 | dev_err(host_pvt.dwc_dev, "%s: dma_request_interrupts returns" |
1659 | " %d\n", __func__, err); |
1660 | - goto error_out; |
1661 | + return err; |
1662 | } |
1663 | |
1664 | /* Enabe DMA */ |
1665 | @@ -808,11 +808,6 @@ static int dma_dwc_init(struct sata_dwc_device *hsdev, int irq) |
1666 | sata_dma_regs); |
1667 | |
1668 | return 0; |
1669 | - |
1670 | -error_out: |
1671 | - dma_dwc_exit(hsdev); |
1672 | - |
1673 | - return err; |
1674 | } |
1675 | |
1676 | static int sata_dwc_scr_read(struct ata_link *link, unsigned int scr, u32 *val) |
1677 | @@ -1662,7 +1657,7 @@ static int sata_dwc_probe(struct platform_device *ofdev) |
1678 | char *ver = (char *)&versionr; |
1679 | u8 *base = NULL; |
1680 | int err = 0; |
1681 | - int irq, rc; |
1682 | + int irq; |
1683 | struct ata_host *host; |
1684 | struct ata_port_info pi = sata_dwc_port_info[0]; |
1685 | const struct ata_port_info *ppi[] = { &pi, NULL }; |
1686 | @@ -1725,7 +1720,7 @@ static int sata_dwc_probe(struct platform_device *ofdev) |
1687 | if (irq == NO_IRQ) { |
1688 | dev_err(&ofdev->dev, "no SATA DMA irq\n"); |
1689 | err = -ENODEV; |
1690 | - goto error_out; |
1691 | + goto error_iomap; |
1692 | } |
1693 | |
1694 | /* Get physical SATA DMA register base address */ |
1695 | @@ -1734,14 +1729,16 @@ static int sata_dwc_probe(struct platform_device *ofdev) |
1696 | dev_err(&ofdev->dev, "ioremap failed for AHBDMA register" |
1697 | " address\n"); |
1698 | err = -ENODEV; |
1699 | - goto error_out; |
1700 | + goto error_iomap; |
1701 | } |
1702 | |
1703 | /* Save dev for later use in dev_xxx() routines */ |
1704 | host_pvt.dwc_dev = &ofdev->dev; |
1705 | |
1706 | /* Initialize AHB DMAC */ |
1707 | - dma_dwc_init(hsdev, irq); |
1708 | + err = dma_dwc_init(hsdev, irq); |
1709 | + if (err) |
1710 | + goto error_dma_iomap; |
1711 | |
1712 | /* Enable SATA Interrupts */ |
1713 | sata_dwc_enable_interrupts(hsdev); |
1714 | @@ -1759,9 +1756,8 @@ static int sata_dwc_probe(struct platform_device *ofdev) |
1715 | * device discovery process, invoking our port_start() handler & |
1716 | * error_handler() to execute a dummy Softreset EH session |
1717 | */ |
1718 | - rc = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht); |
1719 | - |
1720 | - if (rc != 0) |
1721 | + err = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht); |
1722 | + if (err) |
1723 | dev_err(&ofdev->dev, "failed to activate host"); |
1724 | |
1725 | dev_set_drvdata(&ofdev->dev, host); |
1726 | @@ -1770,7 +1766,8 @@ static int sata_dwc_probe(struct platform_device *ofdev) |
1727 | error_out: |
1728 | /* Free SATA DMA resources */ |
1729 | dma_dwc_exit(hsdev); |
1730 | - |
1731 | +error_dma_iomap: |
1732 | + iounmap((void __iomem *)host_pvt.sata_dma_regs); |
1733 | error_iomap: |
1734 | iounmap(base); |
1735 | error_kmalloc: |
1736 | @@ -1791,6 +1788,7 @@ static int sata_dwc_remove(struct platform_device *ofdev) |
1737 | /* Free SATA DMA resources */ |
1738 | dma_dwc_exit(hsdev); |
1739 | |
1740 | + iounmap((void __iomem *)host_pvt.sata_dma_regs); |
1741 | iounmap(hsdev->reg_base); |
1742 | kfree(hsdev); |
1743 | kfree(host); |
1744 | diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c |
1745 | index d81b20ddb527..ea655949023f 100644 |
1746 | --- a/drivers/ata/sata_sil24.c |
1747 | +++ b/drivers/ata/sata_sil24.c |
1748 | @@ -246,7 +246,7 @@ enum { |
1749 | /* host flags */ |
1750 | SIL24_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA | |
1751 | ATA_FLAG_NCQ | ATA_FLAG_ACPI_SATA | |
1752 | - ATA_FLAG_AN | ATA_FLAG_PMP, |
1753 | + ATA_FLAG_AN | ATA_FLAG_PMP | ATA_FLAG_LOWTAG, |
1754 | SIL24_FLAG_PCIX_IRQ_WOC = (1 << 24), /* IRQ loss errata on PCI-X */ |
1755 | |
1756 | IRQ_STAT_4PORTS = 0xf, |
1757 | diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c |
1758 | index 26c3779d871d..d29f5ffdb0f4 100644 |
1759 | --- a/drivers/bus/mvebu-mbus.c |
1760 | +++ b/drivers/bus/mvebu-mbus.c |
1761 | @@ -182,12 +182,25 @@ static void mvebu_mbus_disable_window(struct mvebu_mbus_state *mbus, |
1762 | } |
1763 | |
1764 | /* Checks whether the given window number is available */ |
1765 | + |
1766 | +/* On Armada XP, 375 and 38x the MBus window 13 has the remap |
1767 | + * capability, like windows 0 to 7. However, the mvebu-mbus driver |
1768 | + * isn't currently taking into account this special case, which means |
1769 | + * that when window 13 is actually used, the remap registers are left |
1770 | + * to 0, making the device using this MBus window unavailable. The |
1771 | + * quick fix for stable is to not use window 13. A follow up patch |
1772 | + * will correctly handle this window. |
1773 | +*/ |
1774 | static int mvebu_mbus_window_is_free(struct mvebu_mbus_state *mbus, |
1775 | const int win) |
1776 | { |
1777 | void __iomem *addr = mbus->mbuswins_base + |
1778 | mbus->soc->win_cfg_offset(win); |
1779 | u32 ctrl = readl(addr + WIN_CTRL_OFF); |
1780 | + |
1781 | + if (win == 13) |
1782 | + return false; |
1783 | + |
1784 | return !(ctrl & WIN_CTRL_ENABLE); |
1785 | } |
1786 | |
1787 | diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c |
1788 | index 9403061a2acc..83564c9cfdbe 100644 |
1789 | --- a/drivers/clocksource/exynos_mct.c |
1790 | +++ b/drivers/clocksource/exynos_mct.c |
1791 | @@ -97,8 +97,8 @@ static void exynos4_mct_write(unsigned int value, unsigned long offset) |
1792 | writel_relaxed(value, reg_base + offset); |
1793 | |
1794 | if (likely(offset >= EXYNOS4_MCT_L_BASE(0))) { |
1795 | - stat_addr = (offset & ~EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET; |
1796 | - switch (offset & EXYNOS4_MCT_L_MASK) { |
1797 | + stat_addr = (offset & EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET; |
1798 | + switch (offset & ~EXYNOS4_MCT_L_MASK) { |
1799 | case MCT_L_TCON_OFFSET: |
1800 | mask = 1 << 3; /* L_TCON write status */ |
1801 | break; |
1802 | diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c |
1803 | index 633ba945e153..c178ed8c3908 100644 |
1804 | --- a/drivers/crypto/padlock-aes.c |
1805 | +++ b/drivers/crypto/padlock-aes.c |
1806 | @@ -563,4 +563,4 @@ MODULE_DESCRIPTION("VIA PadLock AES algorithm support"); |
1807 | MODULE_LICENSE("GPL"); |
1808 | MODULE_AUTHOR("Michal Ludvig"); |
1809 | |
1810 | -MODULE_ALIAS("aes"); |
1811 | +MODULE_ALIAS_CRYPTO("aes"); |
1812 | diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c |
1813 | index bace885634f2..95f7d27ce491 100644 |
1814 | --- a/drivers/crypto/padlock-sha.c |
1815 | +++ b/drivers/crypto/padlock-sha.c |
1816 | @@ -593,7 +593,7 @@ MODULE_DESCRIPTION("VIA PadLock SHA1/SHA256 algorithms support."); |
1817 | MODULE_LICENSE("GPL"); |
1818 | MODULE_AUTHOR("Michal Ludvig"); |
1819 | |
1820 | -MODULE_ALIAS("sha1-all"); |
1821 | -MODULE_ALIAS("sha256-all"); |
1822 | -MODULE_ALIAS("sha1-padlock"); |
1823 | -MODULE_ALIAS("sha256-padlock"); |
1824 | +MODULE_ALIAS_CRYPTO("sha1-all"); |
1825 | +MODULE_ALIAS_CRYPTO("sha256-all"); |
1826 | +MODULE_ALIAS_CRYPTO("sha1-padlock"); |
1827 | +MODULE_ALIAS_CRYPTO("sha256-padlock"); |
1828 | diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c |
1829 | index 244d73378f0e..7ee93f881db6 100644 |
1830 | --- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c |
1831 | +++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c |
1832 | @@ -52,6 +52,7 @@ |
1833 | #include <linux/pci.h> |
1834 | #include <linux/cdev.h> |
1835 | #include <linux/uaccess.h> |
1836 | +#include <linux/crypto.h> |
1837 | |
1838 | #include "adf_accel_devices.h" |
1839 | #include "adf_common_drv.h" |
1840 | @@ -487,4 +488,4 @@ module_exit(adf_unregister_ctl_device_driver); |
1841 | MODULE_LICENSE("Dual BSD/GPL"); |
1842 | MODULE_AUTHOR("Intel"); |
1843 | MODULE_DESCRIPTION("Intel(R) QuickAssist Technology"); |
1844 | -MODULE_ALIAS("intel_qat"); |
1845 | +MODULE_ALIAS_CRYPTO("intel_qat"); |
1846 | diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c |
1847 | index 92105f3dc8e0..e4cea7c45142 100644 |
1848 | --- a/drivers/crypto/ux500/cryp/cryp_core.c |
1849 | +++ b/drivers/crypto/ux500/cryp/cryp_core.c |
1850 | @@ -1810,7 +1810,7 @@ module_exit(ux500_cryp_mod_fini); |
1851 | module_param(cryp_mode, int, 0); |
1852 | |
1853 | MODULE_DESCRIPTION("Driver for ST-Ericsson UX500 CRYP crypto engine."); |
1854 | -MODULE_ALIAS("aes-all"); |
1855 | -MODULE_ALIAS("des-all"); |
1856 | +MODULE_ALIAS_CRYPTO("aes-all"); |
1857 | +MODULE_ALIAS_CRYPTO("des-all"); |
1858 | |
1859 | MODULE_LICENSE("GPL"); |
1860 | diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c |
1861 | index 1c73f4fbc252..8e5e0187506f 100644 |
1862 | --- a/drivers/crypto/ux500/hash/hash_core.c |
1863 | +++ b/drivers/crypto/ux500/hash/hash_core.c |
1864 | @@ -1995,7 +1995,7 @@ module_exit(ux500_hash_mod_fini); |
1865 | MODULE_DESCRIPTION("Driver for ST-Ericsson UX500 HASH engine."); |
1866 | MODULE_LICENSE("GPL"); |
1867 | |
1868 | -MODULE_ALIAS("sha1-all"); |
1869 | -MODULE_ALIAS("sha256-all"); |
1870 | -MODULE_ALIAS("hmac-sha1-all"); |
1871 | -MODULE_ALIAS("hmac-sha256-all"); |
1872 | +MODULE_ALIAS_CRYPTO("sha1-all"); |
1873 | +MODULE_ALIAS_CRYPTO("sha256-all"); |
1874 | +MODULE_ALIAS_CRYPTO("hmac-sha1-all"); |
1875 | +MODULE_ALIAS_CRYPTO("hmac-sha256-all"); |
1876 | diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c |
1877 | index 2de5f5f4ba45..fd76933eed04 100644 |
1878 | --- a/drivers/gpu/drm/i915/i915_gem.c |
1879 | +++ b/drivers/gpu/drm/i915/i915_gem.c |
1880 | @@ -5144,7 +5144,7 @@ static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task) |
1881 | if (!mutex_is_locked(mutex)) |
1882 | return false; |
1883 | |
1884 | -#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES) |
1885 | +#if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) |
1886 | return mutex->owner == task; |
1887 | #else |
1888 | /* Since UP may be pre-empted, we cannot assume that we own the lock */ |
1889 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
1890 | index cadc3bcf1de2..31b96643b59c 100644 |
1891 | --- a/drivers/gpu/drm/i915/intel_display.c |
1892 | +++ b/drivers/gpu/drm/i915/intel_display.c |
1893 | @@ -10019,7 +10019,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, |
1894 | if (obj->tiling_mode != work->old_fb_obj->tiling_mode) |
1895 | /* vlv: DISPLAY_FLIP fails to change tiling */ |
1896 | ring = NULL; |
1897 | - } else if (IS_IVYBRIDGE(dev)) { |
1898 | + } else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) { |
1899 | ring = &dev_priv->ring[BCS]; |
1900 | } else if (INTEL_INFO(dev)->gen >= 7) { |
1901 | ring = obj->ring; |
1902 | diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c |
1903 | index 850de57069be..121aff6a3b41 100644 |
1904 | --- a/drivers/gpu/drm/radeon/radeon_asic.c |
1905 | +++ b/drivers/gpu/drm/radeon/radeon_asic.c |
1906 | @@ -333,6 +333,20 @@ static struct radeon_asic_ring r300_gfx_ring = { |
1907 | .set_wptr = &r100_gfx_set_wptr, |
1908 | }; |
1909 | |
1910 | +static struct radeon_asic_ring rv515_gfx_ring = { |
1911 | + .ib_execute = &r100_ring_ib_execute, |
1912 | + .emit_fence = &r300_fence_ring_emit, |
1913 | + .emit_semaphore = &r100_semaphore_ring_emit, |
1914 | + .cs_parse = &r300_cs_parse, |
1915 | + .ring_start = &rv515_ring_start, |
1916 | + .ring_test = &r100_ring_test, |
1917 | + .ib_test = &r100_ib_test, |
1918 | + .is_lockup = &r100_gpu_is_lockup, |
1919 | + .get_rptr = &r100_gfx_get_rptr, |
1920 | + .get_wptr = &r100_gfx_get_wptr, |
1921 | + .set_wptr = &r100_gfx_set_wptr, |
1922 | +}; |
1923 | + |
1924 | static struct radeon_asic r300_asic = { |
1925 | .init = &r300_init, |
1926 | .fini = &r300_fini, |
1927 | @@ -748,7 +762,7 @@ static struct radeon_asic rv515_asic = { |
1928 | .set_page = &rv370_pcie_gart_set_page, |
1929 | }, |
1930 | .ring = { |
1931 | - [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring |
1932 | + [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring |
1933 | }, |
1934 | .irq = { |
1935 | .set = &rs600_irq_set, |
1936 | @@ -814,7 +828,7 @@ static struct radeon_asic r520_asic = { |
1937 | .set_page = &rv370_pcie_gart_set_page, |
1938 | }, |
1939 | .ring = { |
1940 | - [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring |
1941 | + [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring |
1942 | }, |
1943 | .irq = { |
1944 | .set = &rs600_irq_set, |
1945 | diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c |
1946 | index 32522cc940a1..f7da8fe96a66 100644 |
1947 | --- a/drivers/gpu/drm/radeon/radeon_pm.c |
1948 | +++ b/drivers/gpu/drm/radeon/radeon_pm.c |
1949 | @@ -1287,8 +1287,39 @@ dpm_failed: |
1950 | return ret; |
1951 | } |
1952 | |
1953 | +struct radeon_dpm_quirk { |
1954 | + u32 chip_vendor; |
1955 | + u32 chip_device; |
1956 | + u32 subsys_vendor; |
1957 | + u32 subsys_device; |
1958 | +}; |
1959 | + |
1960 | +/* cards with dpm stability problems */ |
1961 | +static struct radeon_dpm_quirk radeon_dpm_quirk_list[] = { |
1962 | + /* TURKS - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1386534 */ |
1963 | + { PCI_VENDOR_ID_ATI, 0x6759, 0x1682, 0x3195 }, |
1964 | + /* TURKS - https://bugzilla.kernel.org/show_bug.cgi?id=83731 */ |
1965 | + { PCI_VENDOR_ID_ATI, 0x6840, 0x1179, 0xfb81 }, |
1966 | + { 0, 0, 0, 0 }, |
1967 | +}; |
1968 | + |
1969 | int radeon_pm_init(struct radeon_device *rdev) |
1970 | { |
1971 | + struct radeon_dpm_quirk *p = radeon_dpm_quirk_list; |
1972 | + bool disable_dpm = false; |
1973 | + |
1974 | + /* Apply dpm quirks */ |
1975 | + while (p && p->chip_device != 0) { |
1976 | + if (rdev->pdev->vendor == p->chip_vendor && |
1977 | + rdev->pdev->device == p->chip_device && |
1978 | + rdev->pdev->subsystem_vendor == p->subsys_vendor && |
1979 | + rdev->pdev->subsystem_device == p->subsys_device) { |
1980 | + disable_dpm = true; |
1981 | + break; |
1982 | + } |
1983 | + ++p; |
1984 | + } |
1985 | + |
1986 | /* enable dpm on rv6xx+ */ |
1987 | switch (rdev->family) { |
1988 | case CHIP_RV610: |
1989 | @@ -1344,6 +1375,8 @@ int radeon_pm_init(struct radeon_device *rdev) |
1990 | (!(rdev->flags & RADEON_IS_IGP)) && |
1991 | (!rdev->smc_fw)) |
1992 | rdev->pm.pm_method = PM_METHOD_PROFILE; |
1993 | + else if (disable_dpm && (radeon_dpm == -1)) |
1994 | + rdev->pm.pm_method = PM_METHOD_PROFILE; |
1995 | else if (radeon_dpm == 0) |
1996 | rdev->pm.pm_method = PM_METHOD_PROFILE; |
1997 | else |
1998 | diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c |
1999 | index 676e6c2ba90a..2b70d3eca8fd 100644 |
2000 | --- a/drivers/gpu/drm/radeon/si_dpm.c |
2001 | +++ b/drivers/gpu/drm/radeon/si_dpm.c |
2002 | @@ -2908,6 +2908,22 @@ static int si_init_smc_spll_table(struct radeon_device *rdev) |
2003 | return ret; |
2004 | } |
2005 | |
2006 | +struct si_dpm_quirk { |
2007 | + u32 chip_vendor; |
2008 | + u32 chip_device; |
2009 | + u32 subsys_vendor; |
2010 | + u32 subsys_device; |
2011 | + u32 max_sclk; |
2012 | + u32 max_mclk; |
2013 | +}; |
2014 | + |
2015 | +/* cards with dpm stability problems */ |
2016 | +static struct si_dpm_quirk si_dpm_quirk_list[] = { |
2017 | + /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */ |
2018 | + { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 }, |
2019 | + { 0, 0, 0, 0 }, |
2020 | +}; |
2021 | + |
2022 | static void si_apply_state_adjust_rules(struct radeon_device *rdev, |
2023 | struct radeon_ps *rps) |
2024 | { |
2025 | @@ -2918,7 +2934,22 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, |
2026 | u32 mclk, sclk; |
2027 | u16 vddc, vddci; |
2028 | u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc; |
2029 | + u32 max_sclk = 0, max_mclk = 0; |
2030 | int i; |
2031 | + struct si_dpm_quirk *p = si_dpm_quirk_list; |
2032 | + |
2033 | + /* Apply dpm quirks */ |
2034 | + while (p && p->chip_device != 0) { |
2035 | + if (rdev->pdev->vendor == p->chip_vendor && |
2036 | + rdev->pdev->device == p->chip_device && |
2037 | + rdev->pdev->subsystem_vendor == p->subsys_vendor && |
2038 | + rdev->pdev->subsystem_device == p->subsys_device) { |
2039 | + max_sclk = p->max_sclk; |
2040 | + max_mclk = p->max_mclk; |
2041 | + break; |
2042 | + } |
2043 | + ++p; |
2044 | + } |
2045 | |
2046 | if ((rdev->pm.dpm.new_active_crtc_count > 1) || |
2047 | ni_dpm_vblank_too_short(rdev)) |
2048 | @@ -2972,6 +3003,14 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, |
2049 | if (ps->performance_levels[i].mclk > max_mclk_vddc) |
2050 | ps->performance_levels[i].mclk = max_mclk_vddc; |
2051 | } |
2052 | + if (max_mclk) { |
2053 | + if (ps->performance_levels[i].mclk > max_mclk) |
2054 | + ps->performance_levels[i].mclk = max_mclk; |
2055 | + } |
2056 | + if (max_sclk) { |
2057 | + if (ps->performance_levels[i].sclk > max_sclk) |
2058 | + ps->performance_levels[i].sclk = max_sclk; |
2059 | + } |
2060 | } |
2061 | |
2062 | /* XXX validate the min clocks required for display */ |
2063 | diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c |
2064 | index cc4f9d80122e..fa22e5ba3d33 100644 |
2065 | --- a/drivers/irqchip/irq-atmel-aic-common.c |
2066 | +++ b/drivers/irqchip/irq-atmel-aic-common.c |
2067 | @@ -28,7 +28,7 @@ |
2068 | #define AT91_AIC_IRQ_MIN_PRIORITY 0 |
2069 | #define AT91_AIC_IRQ_MAX_PRIORITY 7 |
2070 | |
2071 | -#define AT91_AIC_SRCTYPE GENMASK(7, 6) |
2072 | +#define AT91_AIC_SRCTYPE GENMASK(6, 5) |
2073 | #define AT91_AIC_SRCTYPE_LOW (0 << 5) |
2074 | #define AT91_AIC_SRCTYPE_FALLING (1 << 5) |
2075 | #define AT91_AIC_SRCTYPE_HIGH (2 << 5) |
2076 | @@ -74,7 +74,7 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val) |
2077 | return -EINVAL; |
2078 | } |
2079 | |
2080 | - *val &= AT91_AIC_SRCTYPE; |
2081 | + *val &= ~AT91_AIC_SRCTYPE; |
2082 | *val |= aic_type; |
2083 | |
2084 | return 0; |
2085 | diff --git a/drivers/irqchip/irq-omap-intc.c b/drivers/irqchip/irq-omap-intc.c |
2086 | index 28718d3e8281..c03f140acbae 100644 |
2087 | --- a/drivers/irqchip/irq-omap-intc.c |
2088 | +++ b/drivers/irqchip/irq-omap-intc.c |
2089 | @@ -263,7 +263,7 @@ static int __init omap_init_irq_of(struct device_node *node) |
2090 | return ret; |
2091 | } |
2092 | |
2093 | -static int __init omap_init_irq_legacy(u32 base) |
2094 | +static int __init omap_init_irq_legacy(u32 base, struct device_node *node) |
2095 | { |
2096 | int j, irq_base; |
2097 | |
2098 | @@ -277,7 +277,7 @@ static int __init omap_init_irq_legacy(u32 base) |
2099 | irq_base = 0; |
2100 | } |
2101 | |
2102 | - domain = irq_domain_add_legacy(NULL, omap_nr_irqs, irq_base, 0, |
2103 | + domain = irq_domain_add_legacy(node, omap_nr_irqs, irq_base, 0, |
2104 | &irq_domain_simple_ops, NULL); |
2105 | |
2106 | omap_irq_soft_reset(); |
2107 | @@ -301,10 +301,26 @@ static int __init omap_init_irq(u32 base, struct device_node *node) |
2108 | { |
2109 | int ret; |
2110 | |
2111 | - if (node) |
2112 | + /* |
2113 | + * FIXME legacy OMAP DMA driver sitting under arch/arm/plat-omap/dma.c |
2114 | + * depends is still not ready for linear IRQ domains; because of that |
2115 | + * we need to temporarily "blacklist" OMAP2 and OMAP3 devices from using |
2116 | + * linear IRQ Domain until that driver is finally fixed. |
2117 | + */ |
2118 | + if (of_device_is_compatible(node, "ti,omap2-intc") || |
2119 | + of_device_is_compatible(node, "ti,omap3-intc")) { |
2120 | + struct resource res; |
2121 | + |
2122 | + if (of_address_to_resource(node, 0, &res)) |
2123 | + return -ENOMEM; |
2124 | + |
2125 | + base = res.start; |
2126 | + ret = omap_init_irq_legacy(base, node); |
2127 | + } else if (node) { |
2128 | ret = omap_init_irq_of(node); |
2129 | - else |
2130 | - ret = omap_init_irq_legacy(base); |
2131 | + } else { |
2132 | + ret = omap_init_irq_legacy(base, NULL); |
2133 | + } |
2134 | |
2135 | if (ret == 0) |
2136 | omap_irq_enable_protection(); |
2137 | diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c |
2138 | index 06709257adde..97e3a6c07e31 100644 |
2139 | --- a/drivers/md/dm-cache-metadata.c |
2140 | +++ b/drivers/md/dm-cache-metadata.c |
2141 | @@ -94,6 +94,9 @@ struct cache_disk_superblock { |
2142 | } __packed; |
2143 | |
2144 | struct dm_cache_metadata { |
2145 | + atomic_t ref_count; |
2146 | + struct list_head list; |
2147 | + |
2148 | struct block_device *bdev; |
2149 | struct dm_block_manager *bm; |
2150 | struct dm_space_map *metadata_sm; |
2151 | @@ -669,10 +672,10 @@ static void unpack_value(__le64 value_le, dm_oblock_t *block, unsigned *flags) |
2152 | |
2153 | /*----------------------------------------------------------------*/ |
2154 | |
2155 | -struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev, |
2156 | - sector_t data_block_size, |
2157 | - bool may_format_device, |
2158 | - size_t policy_hint_size) |
2159 | +static struct dm_cache_metadata *metadata_open(struct block_device *bdev, |
2160 | + sector_t data_block_size, |
2161 | + bool may_format_device, |
2162 | + size_t policy_hint_size) |
2163 | { |
2164 | int r; |
2165 | struct dm_cache_metadata *cmd; |
2166 | @@ -683,6 +686,7 @@ struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev, |
2167 | return NULL; |
2168 | } |
2169 | |
2170 | + atomic_set(&cmd->ref_count, 1); |
2171 | init_rwsem(&cmd->root_lock); |
2172 | cmd->bdev = bdev; |
2173 | cmd->data_block_size = data_block_size; |
2174 | @@ -705,10 +709,95 @@ struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev, |
2175 | return cmd; |
2176 | } |
2177 | |
2178 | +/* |
2179 | + * We keep a little list of ref counted metadata objects to prevent two |
2180 | + * different target instances creating separate bufio instances. This is |
2181 | + * an issue if a table is reloaded before the suspend. |
2182 | + */ |
2183 | +static DEFINE_MUTEX(table_lock); |
2184 | +static LIST_HEAD(table); |
2185 | + |
2186 | +static struct dm_cache_metadata *lookup(struct block_device *bdev) |
2187 | +{ |
2188 | + struct dm_cache_metadata *cmd; |
2189 | + |
2190 | + list_for_each_entry(cmd, &table, list) |
2191 | + if (cmd->bdev == bdev) { |
2192 | + atomic_inc(&cmd->ref_count); |
2193 | + return cmd; |
2194 | + } |
2195 | + |
2196 | + return NULL; |
2197 | +} |
2198 | + |
2199 | +static struct dm_cache_metadata *lookup_or_open(struct block_device *bdev, |
2200 | + sector_t data_block_size, |
2201 | + bool may_format_device, |
2202 | + size_t policy_hint_size) |
2203 | +{ |
2204 | + struct dm_cache_metadata *cmd, *cmd2; |
2205 | + |
2206 | + mutex_lock(&table_lock); |
2207 | + cmd = lookup(bdev); |
2208 | + mutex_unlock(&table_lock); |
2209 | + |
2210 | + if (cmd) |
2211 | + return cmd; |
2212 | + |
2213 | + cmd = metadata_open(bdev, data_block_size, may_format_device, policy_hint_size); |
2214 | + if (cmd) { |
2215 | + mutex_lock(&table_lock); |
2216 | + cmd2 = lookup(bdev); |
2217 | + if (cmd2) { |
2218 | + mutex_unlock(&table_lock); |
2219 | + __destroy_persistent_data_objects(cmd); |
2220 | + kfree(cmd); |
2221 | + return cmd2; |
2222 | + } |
2223 | + list_add(&cmd->list, &table); |
2224 | + mutex_unlock(&table_lock); |
2225 | + } |
2226 | + |
2227 | + return cmd; |
2228 | +} |
2229 | + |
2230 | +static bool same_params(struct dm_cache_metadata *cmd, sector_t data_block_size) |
2231 | +{ |
2232 | + if (cmd->data_block_size != data_block_size) { |
2233 | + DMERR("data_block_size (%llu) different from that in metadata (%llu)\n", |
2234 | + (unsigned long long) data_block_size, |
2235 | + (unsigned long long) cmd->data_block_size); |
2236 | + return false; |
2237 | + } |
2238 | + |
2239 | + return true; |
2240 | +} |
2241 | + |
2242 | +struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev, |
2243 | + sector_t data_block_size, |
2244 | + bool may_format_device, |
2245 | + size_t policy_hint_size) |
2246 | +{ |
2247 | + struct dm_cache_metadata *cmd = lookup_or_open(bdev, data_block_size, |
2248 | + may_format_device, policy_hint_size); |
2249 | + if (cmd && !same_params(cmd, data_block_size)) { |
2250 | + dm_cache_metadata_close(cmd); |
2251 | + return NULL; |
2252 | + } |
2253 | + |
2254 | + return cmd; |
2255 | +} |
2256 | + |
2257 | void dm_cache_metadata_close(struct dm_cache_metadata *cmd) |
2258 | { |
2259 | - __destroy_persistent_data_objects(cmd); |
2260 | - kfree(cmd); |
2261 | + if (atomic_dec_and_test(&cmd->ref_count)) { |
2262 | + mutex_lock(&table_lock); |
2263 | + list_del(&cmd->list); |
2264 | + mutex_unlock(&table_lock); |
2265 | + |
2266 | + __destroy_persistent_data_objects(cmd); |
2267 | + kfree(cmd); |
2268 | + } |
2269 | } |
2270 | |
2271 | /* |
2272 | diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c |
2273 | index da496cfb458d..3baed67cf26f 100644 |
2274 | --- a/drivers/md/dm-cache-target.c |
2275 | +++ b/drivers/md/dm-cache-target.c |
2276 | @@ -222,7 +222,13 @@ struct cache { |
2277 | struct list_head need_commit_migrations; |
2278 | sector_t migration_threshold; |
2279 | wait_queue_head_t migration_wait; |
2280 | - atomic_t nr_migrations; |
2281 | + atomic_t nr_allocated_migrations; |
2282 | + |
2283 | + /* |
2284 | + * The number of in flight migrations that are performing |
2285 | + * background io. eg, promotion, writeback. |
2286 | + */ |
2287 | + atomic_t nr_io_migrations; |
2288 | |
2289 | wait_queue_head_t quiescing_wait; |
2290 | atomic_t quiescing; |
2291 | @@ -258,7 +264,6 @@ struct cache { |
2292 | struct dm_deferred_set *all_io_ds; |
2293 | |
2294 | mempool_t *migration_pool; |
2295 | - struct dm_cache_migration *next_migration; |
2296 | |
2297 | struct dm_cache_policy *policy; |
2298 | unsigned policy_nr_args; |
2299 | @@ -349,10 +354,31 @@ static void free_prison_cell(struct cache *cache, struct dm_bio_prison_cell *cel |
2300 | dm_bio_prison_free_cell(cache->prison, cell); |
2301 | } |
2302 | |
2303 | +static struct dm_cache_migration *alloc_migration(struct cache *cache) |
2304 | +{ |
2305 | + struct dm_cache_migration *mg; |
2306 | + |
2307 | + mg = mempool_alloc(cache->migration_pool, GFP_NOWAIT); |
2308 | + if (mg) { |
2309 | + mg->cache = cache; |
2310 | + atomic_inc(&mg->cache->nr_allocated_migrations); |
2311 | + } |
2312 | + |
2313 | + return mg; |
2314 | +} |
2315 | + |
2316 | +static void free_migration(struct dm_cache_migration *mg) |
2317 | +{ |
2318 | + if (atomic_dec_and_test(&mg->cache->nr_allocated_migrations)) |
2319 | + wake_up(&mg->cache->migration_wait); |
2320 | + |
2321 | + mempool_free(mg, mg->cache->migration_pool); |
2322 | +} |
2323 | + |
2324 | static int prealloc_data_structs(struct cache *cache, struct prealloc *p) |
2325 | { |
2326 | if (!p->mg) { |
2327 | - p->mg = mempool_alloc(cache->migration_pool, GFP_NOWAIT); |
2328 | + p->mg = alloc_migration(cache); |
2329 | if (!p->mg) |
2330 | return -ENOMEM; |
2331 | } |
2332 | @@ -381,7 +407,7 @@ static void prealloc_free_structs(struct cache *cache, struct prealloc *p) |
2333 | free_prison_cell(cache, p->cell1); |
2334 | |
2335 | if (p->mg) |
2336 | - mempool_free(p->mg, cache->migration_pool); |
2337 | + free_migration(p->mg); |
2338 | } |
2339 | |
2340 | static struct dm_cache_migration *prealloc_get_migration(struct prealloc *p) |
2341 | @@ -817,24 +843,14 @@ static void remap_to_origin_then_cache(struct cache *cache, struct bio *bio, |
2342 | * Migration covers moving data from the origin device to the cache, or |
2343 | * vice versa. |
2344 | *--------------------------------------------------------------*/ |
2345 | -static void free_migration(struct dm_cache_migration *mg) |
2346 | -{ |
2347 | - mempool_free(mg, mg->cache->migration_pool); |
2348 | -} |
2349 | - |
2350 | -static void inc_nr_migrations(struct cache *cache) |
2351 | +static void inc_io_migrations(struct cache *cache) |
2352 | { |
2353 | - atomic_inc(&cache->nr_migrations); |
2354 | + atomic_inc(&cache->nr_io_migrations); |
2355 | } |
2356 | |
2357 | -static void dec_nr_migrations(struct cache *cache) |
2358 | +static void dec_io_migrations(struct cache *cache) |
2359 | { |
2360 | - atomic_dec(&cache->nr_migrations); |
2361 | - |
2362 | - /* |
2363 | - * Wake the worker in case we're suspending the target. |
2364 | - */ |
2365 | - wake_up(&cache->migration_wait); |
2366 | + atomic_dec(&cache->nr_io_migrations); |
2367 | } |
2368 | |
2369 | static void __cell_defer(struct cache *cache, struct dm_bio_prison_cell *cell, |
2370 | @@ -857,11 +873,10 @@ static void cell_defer(struct cache *cache, struct dm_bio_prison_cell *cell, |
2371 | wake_worker(cache); |
2372 | } |
2373 | |
2374 | -static void cleanup_migration(struct dm_cache_migration *mg) |
2375 | +static void free_io_migration(struct dm_cache_migration *mg) |
2376 | { |
2377 | - struct cache *cache = mg->cache; |
2378 | + dec_io_migrations(mg->cache); |
2379 | free_migration(mg); |
2380 | - dec_nr_migrations(cache); |
2381 | } |
2382 | |
2383 | static void migration_failure(struct dm_cache_migration *mg) |
2384 | @@ -886,7 +901,7 @@ static void migration_failure(struct dm_cache_migration *mg) |
2385 | cell_defer(cache, mg->new_ocell, true); |
2386 | } |
2387 | |
2388 | - cleanup_migration(mg); |
2389 | + free_io_migration(mg); |
2390 | } |
2391 | |
2392 | static void migration_success_pre_commit(struct dm_cache_migration *mg) |
2393 | @@ -897,7 +912,7 @@ static void migration_success_pre_commit(struct dm_cache_migration *mg) |
2394 | if (mg->writeback) { |
2395 | clear_dirty(cache, mg->old_oblock, mg->cblock); |
2396 | cell_defer(cache, mg->old_ocell, false); |
2397 | - cleanup_migration(mg); |
2398 | + free_io_migration(mg); |
2399 | return; |
2400 | |
2401 | } else if (mg->demote) { |
2402 | @@ -907,14 +922,14 @@ static void migration_success_pre_commit(struct dm_cache_migration *mg) |
2403 | mg->old_oblock); |
2404 | if (mg->promote) |
2405 | cell_defer(cache, mg->new_ocell, true); |
2406 | - cleanup_migration(mg); |
2407 | + free_io_migration(mg); |
2408 | return; |
2409 | } |
2410 | } else { |
2411 | if (dm_cache_insert_mapping(cache->cmd, mg->cblock, mg->new_oblock)) { |
2412 | DMWARN_LIMIT("promotion failed; couldn't update on disk metadata"); |
2413 | policy_remove_mapping(cache->policy, mg->new_oblock); |
2414 | - cleanup_migration(mg); |
2415 | + free_io_migration(mg); |
2416 | return; |
2417 | } |
2418 | } |
2419 | @@ -947,7 +962,7 @@ static void migration_success_post_commit(struct dm_cache_migration *mg) |
2420 | } else { |
2421 | if (mg->invalidate) |
2422 | policy_remove_mapping(cache->policy, mg->old_oblock); |
2423 | - cleanup_migration(mg); |
2424 | + free_io_migration(mg); |
2425 | } |
2426 | |
2427 | } else { |
2428 | @@ -962,7 +977,7 @@ static void migration_success_post_commit(struct dm_cache_migration *mg) |
2429 | bio_endio(mg->new_ocell->holder, 0); |
2430 | cell_defer(cache, mg->new_ocell, false); |
2431 | } |
2432 | - cleanup_migration(mg); |
2433 | + free_io_migration(mg); |
2434 | } |
2435 | } |
2436 | |
2437 | @@ -1178,7 +1193,7 @@ static void promote(struct cache *cache, struct prealloc *structs, |
2438 | mg->new_ocell = cell; |
2439 | mg->start_jiffies = jiffies; |
2440 | |
2441 | - inc_nr_migrations(cache); |
2442 | + inc_io_migrations(cache); |
2443 | quiesce_migration(mg); |
2444 | } |
2445 | |
2446 | @@ -1201,7 +1216,7 @@ static void writeback(struct cache *cache, struct prealloc *structs, |
2447 | mg->new_ocell = NULL; |
2448 | mg->start_jiffies = jiffies; |
2449 | |
2450 | - inc_nr_migrations(cache); |
2451 | + inc_io_migrations(cache); |
2452 | quiesce_migration(mg); |
2453 | } |
2454 | |
2455 | @@ -1227,7 +1242,7 @@ static void demote_then_promote(struct cache *cache, struct prealloc *structs, |
2456 | mg->new_ocell = new_ocell; |
2457 | mg->start_jiffies = jiffies; |
2458 | |
2459 | - inc_nr_migrations(cache); |
2460 | + inc_io_migrations(cache); |
2461 | quiesce_migration(mg); |
2462 | } |
2463 | |
2464 | @@ -1254,7 +1269,7 @@ static void invalidate(struct cache *cache, struct prealloc *structs, |
2465 | mg->new_ocell = NULL; |
2466 | mg->start_jiffies = jiffies; |
2467 | |
2468 | - inc_nr_migrations(cache); |
2469 | + inc_io_migrations(cache); |
2470 | quiesce_migration(mg); |
2471 | } |
2472 | |
2473 | @@ -1320,7 +1335,7 @@ static void process_discard_bio(struct cache *cache, struct bio *bio) |
2474 | |
2475 | static bool spare_migration_bandwidth(struct cache *cache) |
2476 | { |
2477 | - sector_t current_volume = (atomic_read(&cache->nr_migrations) + 1) * |
2478 | + sector_t current_volume = (atomic_read(&cache->nr_io_migrations) + 1) * |
2479 | cache->sectors_per_block; |
2480 | return current_volume < cache->migration_threshold; |
2481 | } |
2482 | @@ -1670,7 +1685,7 @@ static void stop_quiescing(struct cache *cache) |
2483 | |
2484 | static void wait_for_migrations(struct cache *cache) |
2485 | { |
2486 | - wait_event(cache->migration_wait, !atomic_read(&cache->nr_migrations)); |
2487 | + wait_event(cache->migration_wait, !atomic_read(&cache->nr_allocated_migrations)); |
2488 | } |
2489 | |
2490 | static void stop_worker(struct cache *cache) |
2491 | @@ -1782,9 +1797,6 @@ static void destroy(struct cache *cache) |
2492 | { |
2493 | unsigned i; |
2494 | |
2495 | - if (cache->next_migration) |
2496 | - mempool_free(cache->next_migration, cache->migration_pool); |
2497 | - |
2498 | if (cache->migration_pool) |
2499 | mempool_destroy(cache->migration_pool); |
2500 | |
2501 | @@ -2292,7 +2304,8 @@ static int cache_create(struct cache_args *ca, struct cache **result) |
2502 | INIT_LIST_HEAD(&cache->quiesced_migrations); |
2503 | INIT_LIST_HEAD(&cache->completed_migrations); |
2504 | INIT_LIST_HEAD(&cache->need_commit_migrations); |
2505 | - atomic_set(&cache->nr_migrations, 0); |
2506 | + atomic_set(&cache->nr_allocated_migrations, 0); |
2507 | + atomic_set(&cache->nr_io_migrations, 0); |
2508 | init_waitqueue_head(&cache->migration_wait); |
2509 | |
2510 | init_waitqueue_head(&cache->quiescing_wait); |
2511 | @@ -2351,8 +2364,6 @@ static int cache_create(struct cache_args *ca, struct cache **result) |
2512 | goto bad; |
2513 | } |
2514 | |
2515 | - cache->next_migration = NULL; |
2516 | - |
2517 | cache->need_tick_bio = true; |
2518 | cache->sized = false; |
2519 | cache->invalidate = false; |
2520 | diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c |
2521 | index 88c257d1161b..377818887ed2 100644 |
2522 | --- a/drivers/media/pci/cx23885/cx23885-cards.c |
2523 | +++ b/drivers/media/pci/cx23885/cx23885-cards.c |
2524 | @@ -614,7 +614,7 @@ struct cx23885_board cx23885_boards[] = { |
2525 | .portb = CX23885_MPEG_DVB, |
2526 | }, |
2527 | [CX23885_BOARD_HAUPPAUGE_HVR4400] = { |
2528 | - .name = "Hauppauge WinTV-HVR4400", |
2529 | + .name = "Hauppauge WinTV-HVR4400/HVR5500", |
2530 | .porta = CX23885_ANALOG_VIDEO, |
2531 | .portb = CX23885_MPEG_DVB, |
2532 | .portc = CX23885_MPEG_DVB, |
2533 | @@ -622,6 +622,10 @@ struct cx23885_board cx23885_boards[] = { |
2534 | .tuner_addr = 0x60, /* 0xc0 >> 1 */ |
2535 | .tuner_bus = 1, |
2536 | }, |
2537 | + [CX23885_BOARD_HAUPPAUGE_STARBURST] = { |
2538 | + .name = "Hauppauge WinTV Starburst", |
2539 | + .portb = CX23885_MPEG_DVB, |
2540 | + }, |
2541 | [CX23885_BOARD_AVERMEDIA_HC81R] = { |
2542 | .name = "AVerTV Hybrid Express Slim HC81R", |
2543 | .tuner_type = TUNER_XC2028, |
2544 | @@ -910,19 +914,19 @@ struct cx23885_subid cx23885_subids[] = { |
2545 | }, { |
2546 | .subvendor = 0x0070, |
2547 | .subdevice = 0xc108, |
2548 | - .card = CX23885_BOARD_HAUPPAUGE_HVR4400, |
2549 | + .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-4400 (Model 121xxx, Hybrid DVB-T/S2, IR) */ |
2550 | }, { |
2551 | .subvendor = 0x0070, |
2552 | .subdevice = 0xc138, |
2553 | - .card = CX23885_BOARD_HAUPPAUGE_HVR4400, |
2554 | + .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ |
2555 | }, { |
2556 | .subvendor = 0x0070, |
2557 | .subdevice = 0xc12a, |
2558 | - .card = CX23885_BOARD_HAUPPAUGE_HVR4400, |
2559 | + .card = CX23885_BOARD_HAUPPAUGE_STARBURST, /* Hauppauge WinTV Starburst (Model 121x00, DVB-S2, IR) */ |
2560 | }, { |
2561 | .subvendor = 0x0070, |
2562 | .subdevice = 0xc1f8, |
2563 | - .card = CX23885_BOARD_HAUPPAUGE_HVR4400, |
2564 | + .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ |
2565 | }, { |
2566 | .subvendor = 0x1461, |
2567 | .subdevice = 0xd939, |
2568 | @@ -1495,8 +1499,9 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) |
2569 | cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ |
2570 | break; |
2571 | case CX23885_BOARD_HAUPPAUGE_HVR4400: |
2572 | + case CX23885_BOARD_HAUPPAUGE_STARBURST: |
2573 | /* GPIO-8 tda10071 demod reset */ |
2574 | - /* GPIO-9 si2165 demod reset */ |
2575 | + /* GPIO-9 si2165 demod reset (only HVR4400/HVR5500)*/ |
2576 | |
2577 | /* Put the parts into reset and back */ |
2578 | cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); |
2579 | @@ -1760,6 +1765,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) |
2580 | case CX23885_BOARD_HAUPPAUGE_HVR1850: |
2581 | case CX23885_BOARD_HAUPPAUGE_HVR1290: |
2582 | case CX23885_BOARD_HAUPPAUGE_HVR4400: |
2583 | + case CX23885_BOARD_HAUPPAUGE_STARBURST: |
2584 | case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: |
2585 | if (dev->i2c_bus[0].i2c_rc == 0) |
2586 | hauppauge_eeprom(dev, eeprom+0xc0); |
2587 | @@ -1864,6 +1870,11 @@ void cx23885_card_setup(struct cx23885_dev *dev) |
2588 | ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
2589 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
2590 | break; |
2591 | + case CX23885_BOARD_HAUPPAUGE_STARBURST: |
2592 | + ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ |
2593 | + ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
2594 | + ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
2595 | + break; |
2596 | case CX23885_BOARD_DVBSKY_T9580: |
2597 | ts1->gen_ctrl_val = 0x5; /* Parallel */ |
2598 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
2599 | diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c |
2600 | index 4cb90317ff45..a8d207929295 100644 |
2601 | --- a/drivers/media/pci/cx23885/cx23885-dvb.c |
2602 | +++ b/drivers/media/pci/cx23885/cx23885-dvb.c |
2603 | @@ -1586,6 +1586,17 @@ static int dvb_register(struct cx23885_tsport *port) |
2604 | break; |
2605 | } |
2606 | break; |
2607 | + case CX23885_BOARD_HAUPPAUGE_STARBURST: |
2608 | + i2c_bus = &dev->i2c_bus[0]; |
2609 | + fe0->dvb.frontend = dvb_attach(tda10071_attach, |
2610 | + &hauppauge_tda10071_config, |
2611 | + &i2c_bus->i2c_adap); |
2612 | + if (fe0->dvb.frontend != NULL) { |
2613 | + dvb_attach(a8293_attach, fe0->dvb.frontend, |
2614 | + &i2c_bus->i2c_adap, |
2615 | + &hauppauge_a8293_config); |
2616 | + } |
2617 | + break; |
2618 | case CX23885_BOARD_DVBSKY_T9580: |
2619 | i2c_bus = &dev->i2c_bus[0]; |
2620 | i2c_bus2 = &dev->i2c_bus[1]; |
2621 | diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h |
2622 | index 6c35e6115969..a33bead82ecc 100644 |
2623 | --- a/drivers/media/pci/cx23885/cx23885.h |
2624 | +++ b/drivers/media/pci/cx23885/cx23885.h |
2625 | @@ -93,6 +93,7 @@ |
2626 | #define CX23885_BOARD_HAUPPAUGE_IMPACTVCBE 43 |
2627 | #define CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2 44 |
2628 | #define CX23885_BOARD_DVBSKY_T9580 45 |
2629 | +#define CX23885_BOARD_HAUPPAUGE_STARBURST 52 |
2630 | |
2631 | #define GPIO_0 0x00000001 |
2632 | #define GPIO_1 0x00000002 |
2633 | diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c |
2634 | index f2e43de3dd87..ea36447c74f9 100644 |
2635 | --- a/drivers/media/v4l2-core/videobuf2-core.c |
2636 | +++ b/drivers/media/v4l2-core/videobuf2-core.c |
2637 | @@ -3142,27 +3142,26 @@ static int vb2_thread(void *data) |
2638 | prequeue--; |
2639 | } else { |
2640 | call_void_qop(q, wait_finish, q); |
2641 | - ret = vb2_internal_dqbuf(q, &fileio->b, 0); |
2642 | + if (!threadio->stop) |
2643 | + ret = vb2_internal_dqbuf(q, &fileio->b, 0); |
2644 | call_void_qop(q, wait_prepare, q); |
2645 | dprintk(5, "file io: vb2_dqbuf result: %d\n", ret); |
2646 | } |
2647 | - if (threadio->stop) |
2648 | - break; |
2649 | - if (ret) |
2650 | + if (ret || threadio->stop) |
2651 | break; |
2652 | try_to_freeze(); |
2653 | |
2654 | vb = q->bufs[fileio->b.index]; |
2655 | if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR)) |
2656 | - ret = threadio->fnc(vb, threadio->priv); |
2657 | - if (ret) |
2658 | - break; |
2659 | + if (threadio->fnc(vb, threadio->priv)) |
2660 | + break; |
2661 | call_void_qop(q, wait_finish, q); |
2662 | if (set_timestamp) |
2663 | v4l2_get_timestamp(&fileio->b.timestamp); |
2664 | - ret = vb2_internal_qbuf(q, &fileio->b); |
2665 | + if (!threadio->stop) |
2666 | + ret = vb2_internal_qbuf(q, &fileio->b); |
2667 | call_void_qop(q, wait_prepare, q); |
2668 | - if (ret) |
2669 | + if (ret || threadio->stop) |
2670 | break; |
2671 | } |
2672 | |
2673 | @@ -3231,11 +3230,11 @@ int vb2_thread_stop(struct vb2_queue *q) |
2674 | threadio->stop = true; |
2675 | vb2_internal_streamoff(q, q->type); |
2676 | call_void_qop(q, wait_prepare, q); |
2677 | + err = kthread_stop(threadio->thread); |
2678 | q->fileio = NULL; |
2679 | fileio->req.count = 0; |
2680 | vb2_reqbufs(q, &fileio->req); |
2681 | kfree(fileio); |
2682 | - err = kthread_stop(threadio->thread); |
2683 | threadio->thread = NULL; |
2684 | kfree(threadio); |
2685 | q->fileio = NULL; |
2686 | diff --git a/drivers/mfd/rtsx_usb.c b/drivers/mfd/rtsx_usb.c |
2687 | index 9cf98d142d9a..c2474cf6bfef 100644 |
2688 | --- a/drivers/mfd/rtsx_usb.c |
2689 | +++ b/drivers/mfd/rtsx_usb.c |
2690 | @@ -681,21 +681,9 @@ static void rtsx_usb_disconnect(struct usb_interface *intf) |
2691 | #ifdef CONFIG_PM |
2692 | static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t message) |
2693 | { |
2694 | - struct rtsx_ucr *ucr = |
2695 | - (struct rtsx_ucr *)usb_get_intfdata(intf); |
2696 | - |
2697 | dev_dbg(&intf->dev, "%s called with pm message 0x%04x\n", |
2698 | __func__, message.event); |
2699 | |
2700 | - /* |
2701 | - * Call to make sure LED is off during suspend to save more power. |
2702 | - * It is NOT a permanent state and could be turned on anytime later. |
2703 | - * Thus no need to call turn_on when resunming. |
2704 | - */ |
2705 | - mutex_lock(&ucr->dev_mutex); |
2706 | - rtsx_usb_turn_off_led(ucr); |
2707 | - mutex_unlock(&ucr->dev_mutex); |
2708 | - |
2709 | return 0; |
2710 | } |
2711 | |
2712 | diff --git a/drivers/mfd/tps65218.c b/drivers/mfd/tps65218.c |
2713 | index 0d256cb002eb..d6b764349f9d 100644 |
2714 | --- a/drivers/mfd/tps65218.c |
2715 | +++ b/drivers/mfd/tps65218.c |
2716 | @@ -125,10 +125,21 @@ int tps65218_clear_bits(struct tps65218 *tps, unsigned int reg, |
2717 | } |
2718 | EXPORT_SYMBOL_GPL(tps65218_clear_bits); |
2719 | |
2720 | +static const struct regmap_range tps65218_yes_ranges[] = { |
2721 | + regmap_reg_range(TPS65218_REG_INT1, TPS65218_REG_INT2), |
2722 | + regmap_reg_range(TPS65218_REG_STATUS, TPS65218_REG_STATUS), |
2723 | +}; |
2724 | + |
2725 | +static const struct regmap_access_table tps65218_volatile_table = { |
2726 | + .yes_ranges = tps65218_yes_ranges, |
2727 | + .n_yes_ranges = ARRAY_SIZE(tps65218_yes_ranges), |
2728 | +}; |
2729 | + |
2730 | static struct regmap_config tps65218_regmap_config = { |
2731 | .reg_bits = 8, |
2732 | .val_bits = 8, |
2733 | .cache_type = REGCACHE_RBTREE, |
2734 | + .volatile_table = &tps65218_volatile_table, |
2735 | }; |
2736 | |
2737 | static const struct regmap_irq tps65218_irqs[] = { |
2738 | @@ -193,6 +204,7 @@ static struct regmap_irq_chip tps65218_irq_chip = { |
2739 | |
2740 | .num_regs = 2, |
2741 | .mask_base = TPS65218_REG_INT_MASK1, |
2742 | + .status_base = TPS65218_REG_INT1, |
2743 | }; |
2744 | |
2745 | static const struct of_device_id of_tps65218_match_table[] = { |
2746 | diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c |
2747 | index 2cfe5012e4e5..4b008c9c738d 100644 |
2748 | --- a/drivers/net/can/dev.c |
2749 | +++ b/drivers/net/can/dev.c |
2750 | @@ -729,10 +729,14 @@ static int can_changelink(struct net_device *dev, |
2751 | if (dev->flags & IFF_UP) |
2752 | return -EBUSY; |
2753 | cm = nla_data(data[IFLA_CAN_CTRLMODE]); |
2754 | - if (cm->flags & ~priv->ctrlmode_supported) |
2755 | + |
2756 | + /* check whether changed bits are allowed to be modified */ |
2757 | + if (cm->mask & ~priv->ctrlmode_supported) |
2758 | return -EOPNOTSUPP; |
2759 | + |
2760 | + /* clear bits to be modified and copy the flag values */ |
2761 | priv->ctrlmode &= ~cm->mask; |
2762 | - priv->ctrlmode |= cm->flags; |
2763 | + priv->ctrlmode |= (cm->flags & cm->mask); |
2764 | |
2765 | /* CAN_CTRLMODE_FD can only be set when driver supports FD */ |
2766 | if (priv->ctrlmode & CAN_CTRLMODE_FD) |
2767 | diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c |
2768 | index d7bc462aafdc..244529881be9 100644 |
2769 | --- a/drivers/net/can/m_can/m_can.c |
2770 | +++ b/drivers/net/can/m_can/m_can.c |
2771 | @@ -955,6 +955,11 @@ static struct net_device *alloc_m_can_dev(void) |
2772 | priv->can.data_bittiming_const = &m_can_data_bittiming_const; |
2773 | priv->can.do_set_mode = m_can_set_mode; |
2774 | priv->can.do_get_berr_counter = m_can_get_berr_counter; |
2775 | + |
2776 | + /* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.0.1 */ |
2777 | + priv->can.ctrlmode = CAN_CTRLMODE_FD_NON_ISO; |
2778 | + |
2779 | + /* CAN_CTRLMODE_FD_NON_ISO can not be changed with M_CAN IP v3.0.1 */ |
2780 | priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK | |
2781 | CAN_CTRLMODE_LISTENONLY | |
2782 | CAN_CTRLMODE_BERR_REPORTING | |
2783 | diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h |
2784 | index 1354c68f6468..be0527734170 100644 |
2785 | --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h |
2786 | +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h |
2787 | @@ -672,6 +672,7 @@ struct iwl_scan_channel_opt { |
2788 | * @IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED: all passive scans will be fragmented |
2789 | * @IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED: insert WFA vendor-specific TPC report |
2790 | * and DS parameter set IEs into probe requests. |
2791 | + * @IWL_MVM_LMAC_SCAN_FLAG_MATCH: Send match found notification on matches |
2792 | */ |
2793 | enum iwl_mvm_lmac_scan_flags { |
2794 | IWL_MVM_LMAC_SCAN_FLAG_PASS_ALL = BIT(0), |
2795 | @@ -681,6 +682,7 @@ enum iwl_mvm_lmac_scan_flags { |
2796 | IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS = BIT(4), |
2797 | IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED = BIT(5), |
2798 | IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED = BIT(6), |
2799 | + IWL_MVM_LMAC_SCAN_FLAG_MATCH = BIT(9), |
2800 | }; |
2801 | |
2802 | enum iwl_scan_priority { |
2803 | diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c |
2804 | index 7554f7053830..886b64710443 100644 |
2805 | --- a/drivers/net/wireless/iwlwifi/mvm/scan.c |
2806 | +++ b/drivers/net/wireless/iwlwifi/mvm/scan.c |
2807 | @@ -1334,6 +1334,7 @@ int iwl_mvm_unified_sched_scan_lmac(struct iwl_mvm *mvm, |
2808 | IWL_DEBUG_SCAN(mvm, |
2809 | "Sending scheduled scan with filtering, n_match_sets %d\n", |
2810 | req->n_match_sets); |
2811 | + flags |= IWL_MVM_LMAC_SCAN_FLAG_MATCH; |
2812 | } else { |
2813 | IWL_DEBUG_SCAN(mvm, |
2814 | "Sending Scheduled scan without filtering\n"); |
2815 | diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c |
2816 | index 73aef51a28f0..8fb16188cd82 100644 |
2817 | --- a/drivers/pci/bus.c |
2818 | +++ b/drivers/pci/bus.c |
2819 | @@ -228,6 +228,49 @@ int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, |
2820 | } |
2821 | EXPORT_SYMBOL(pci_bus_alloc_resource); |
2822 | |
2823 | +/* |
2824 | + * The @idx resource of @dev should be a PCI-PCI bridge window. If this |
2825 | + * resource fits inside a window of an upstream bridge, do nothing. If it |
2826 | + * overlaps an upstream window but extends outside it, clip the resource so |
2827 | + * it fits completely inside. |
2828 | + */ |
2829 | +bool pci_bus_clip_resource(struct pci_dev *dev, int idx) |
2830 | +{ |
2831 | + struct pci_bus *bus = dev->bus; |
2832 | + struct resource *res = &dev->resource[idx]; |
2833 | + struct resource orig_res = *res; |
2834 | + struct resource *r; |
2835 | + int i; |
2836 | + |
2837 | + pci_bus_for_each_resource(bus, r, i) { |
2838 | + resource_size_t start, end; |
2839 | + |
2840 | + if (!r) |
2841 | + continue; |
2842 | + |
2843 | + if (resource_type(res) != resource_type(r)) |
2844 | + continue; |
2845 | + |
2846 | + start = max(r->start, res->start); |
2847 | + end = min(r->end, res->end); |
2848 | + |
2849 | + if (start > end) |
2850 | + continue; /* no overlap */ |
2851 | + |
2852 | + if (res->start == start && res->end == end) |
2853 | + return false; /* no change */ |
2854 | + |
2855 | + res->start = start; |
2856 | + res->end = end; |
2857 | + dev_printk(KERN_DEBUG, &dev->dev, "%pR clipped to %pR\n", |
2858 | + &orig_res, res); |
2859 | + |
2860 | + return true; |
2861 | + } |
2862 | + |
2863 | + return false; |
2864 | +} |
2865 | + |
2866 | void __weak pcibios_resource_survey_bus(struct pci_bus *bus) { } |
2867 | |
2868 | /** |
2869 | diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c |
2870 | index 625a4ace10b4..0190d1ee36b7 100644 |
2871 | --- a/drivers/pci/pci.c |
2872 | +++ b/drivers/pci/pci.c |
2873 | @@ -3280,7 +3280,8 @@ static int pci_parent_bus_reset(struct pci_dev *dev, int probe) |
2874 | { |
2875 | struct pci_dev *pdev; |
2876 | |
2877 | - if (pci_is_root_bus(dev->bus) || dev->subordinate || !dev->bus->self) |
2878 | + if (pci_is_root_bus(dev->bus) || dev->subordinate || |
2879 | + !dev->bus->self || dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET) |
2880 | return -ENOTTY; |
2881 | |
2882 | list_for_each_entry(pdev, &dev->bus->devices, bus_list) |
2883 | @@ -3314,7 +3315,8 @@ static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe) |
2884 | { |
2885 | struct pci_dev *pdev; |
2886 | |
2887 | - if (dev->subordinate || !dev->slot) |
2888 | + if (dev->subordinate || !dev->slot || |
2889 | + dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET) |
2890 | return -ENOTTY; |
2891 | |
2892 | list_for_each_entry(pdev, &dev->bus->devices, bus_list) |
2893 | @@ -3566,6 +3568,20 @@ int pci_try_reset_function(struct pci_dev *dev) |
2894 | } |
2895 | EXPORT_SYMBOL_GPL(pci_try_reset_function); |
2896 | |
2897 | +/* Do any devices on or below this bus prevent a bus reset? */ |
2898 | +static bool pci_bus_resetable(struct pci_bus *bus) |
2899 | +{ |
2900 | + struct pci_dev *dev; |
2901 | + |
2902 | + list_for_each_entry(dev, &bus->devices, bus_list) { |
2903 | + if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || |
2904 | + (dev->subordinate && !pci_bus_resetable(dev->subordinate))) |
2905 | + return false; |
2906 | + } |
2907 | + |
2908 | + return true; |
2909 | +} |
2910 | + |
2911 | /* Lock devices from the top of the tree down */ |
2912 | static void pci_bus_lock(struct pci_bus *bus) |
2913 | { |
2914 | @@ -3616,6 +3632,22 @@ unlock: |
2915 | return 0; |
2916 | } |
2917 | |
2918 | +/* Do any devices on or below this slot prevent a bus reset? */ |
2919 | +static bool pci_slot_resetable(struct pci_slot *slot) |
2920 | +{ |
2921 | + struct pci_dev *dev; |
2922 | + |
2923 | + list_for_each_entry(dev, &slot->bus->devices, bus_list) { |
2924 | + if (!dev->slot || dev->slot != slot) |
2925 | + continue; |
2926 | + if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || |
2927 | + (dev->subordinate && !pci_bus_resetable(dev->subordinate))) |
2928 | + return false; |
2929 | + } |
2930 | + |
2931 | + return true; |
2932 | +} |
2933 | + |
2934 | /* Lock devices from the top of the tree down */ |
2935 | static void pci_slot_lock(struct pci_slot *slot) |
2936 | { |
2937 | @@ -3737,7 +3769,7 @@ static int pci_slot_reset(struct pci_slot *slot, int probe) |
2938 | { |
2939 | int rc; |
2940 | |
2941 | - if (!slot) |
2942 | + if (!slot || !pci_slot_resetable(slot)) |
2943 | return -ENOTTY; |
2944 | |
2945 | if (!probe) |
2946 | @@ -3829,7 +3861,7 @@ EXPORT_SYMBOL_GPL(pci_try_reset_slot); |
2947 | |
2948 | static int pci_bus_reset(struct pci_bus *bus, int probe) |
2949 | { |
2950 | - if (!bus->self) |
2951 | + if (!bus->self || !pci_bus_resetable(bus)) |
2952 | return -ENOTTY; |
2953 | |
2954 | if (probe) |
2955 | diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h |
2956 | index 4a3902d8e6fe..b5defca86795 100644 |
2957 | --- a/drivers/pci/pci.h |
2958 | +++ b/drivers/pci/pci.h |
2959 | @@ -208,6 +208,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, |
2960 | void __pci_bus_assign_resources(const struct pci_bus *bus, |
2961 | struct list_head *realloc_head, |
2962 | struct list_head *fail_head); |
2963 | +bool pci_bus_clip_resource(struct pci_dev *dev, int idx); |
2964 | |
2965 | /** |
2966 | * pci_ari_enabled - query ARI forwarding status |
2967 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
2968 | index 90acb32c85b1..b72e2cdfd59a 100644 |
2969 | --- a/drivers/pci/quirks.c |
2970 | +++ b/drivers/pci/quirks.c |
2971 | @@ -3008,6 +3008,20 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_REALTEK, 0x8169, |
2972 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, PCI_ANY_ID, |
2973 | quirk_broken_intx_masking); |
2974 | |
2975 | +static void quirk_no_bus_reset(struct pci_dev *dev) |
2976 | +{ |
2977 | + dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET; |
2978 | +} |
2979 | + |
2980 | +/* |
2981 | + * Atheros AR93xx chips do not behave after a bus reset. The device will |
2982 | + * throw a Link Down error on AER-capable systems and regardless of AER, |
2983 | + * config space of the device is never accessible again and typically |
2984 | + * causes the system to hang or reset when access is attempted. |
2985 | + * http://www.spinics.net/lists/linux-pci/msg34797.html |
2986 | + */ |
2987 | +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, quirk_no_bus_reset); |
2988 | + |
2989 | #ifdef CONFIG_ACPI |
2990 | /* |
2991 | * Apple: Shutdown Cactus Ridge Thunderbolt controller. |
2992 | diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c |
2993 | index 0482235eee92..e3e17f3c0f0f 100644 |
2994 | --- a/drivers/pci/setup-bus.c |
2995 | +++ b/drivers/pci/setup-bus.c |
2996 | @@ -530,9 +530,8 @@ EXPORT_SYMBOL(pci_setup_cardbus); |
2997 | config space writes, so it's quite possible that an I/O window of |
2998 | the bridge will have some undesirable address (e.g. 0) after the |
2999 | first write. Ditto 64-bit prefetchable MMIO. */ |
3000 | -static void pci_setup_bridge_io(struct pci_bus *bus) |
3001 | +static void pci_setup_bridge_io(struct pci_dev *bridge) |
3002 | { |
3003 | - struct pci_dev *bridge = bus->self; |
3004 | struct resource *res; |
3005 | struct pci_bus_region region; |
3006 | unsigned long io_mask; |
3007 | @@ -545,7 +544,7 @@ static void pci_setup_bridge_io(struct pci_bus *bus) |
3008 | io_mask = PCI_IO_1K_RANGE_MASK; |
3009 | |
3010 | /* Set up the top and bottom of the PCI I/O segment for this bus. */ |
3011 | - res = bus->resource[0]; |
3012 | + res = &bridge->resource[PCI_BRIDGE_RESOURCES + 0]; |
3013 | pcibios_resource_to_bus(bridge->bus, ®ion, res); |
3014 | if (res->flags & IORESOURCE_IO) { |
3015 | pci_read_config_word(bridge, PCI_IO_BASE, &l); |
3016 | @@ -568,15 +567,14 @@ static void pci_setup_bridge_io(struct pci_bus *bus) |
3017 | pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, io_upper16); |
3018 | } |
3019 | |
3020 | -static void pci_setup_bridge_mmio(struct pci_bus *bus) |
3021 | +static void pci_setup_bridge_mmio(struct pci_dev *bridge) |
3022 | { |
3023 | - struct pci_dev *bridge = bus->self; |
3024 | struct resource *res; |
3025 | struct pci_bus_region region; |
3026 | u32 l; |
3027 | |
3028 | /* Set up the top and bottom of the PCI Memory segment for this bus. */ |
3029 | - res = bus->resource[1]; |
3030 | + res = &bridge->resource[PCI_BRIDGE_RESOURCES + 1]; |
3031 | pcibios_resource_to_bus(bridge->bus, ®ion, res); |
3032 | if (res->flags & IORESOURCE_MEM) { |
3033 | l = (region.start >> 16) & 0xfff0; |
3034 | @@ -588,9 +586,8 @@ static void pci_setup_bridge_mmio(struct pci_bus *bus) |
3035 | pci_write_config_dword(bridge, PCI_MEMORY_BASE, l); |
3036 | } |
3037 | |
3038 | -static void pci_setup_bridge_mmio_pref(struct pci_bus *bus) |
3039 | +static void pci_setup_bridge_mmio_pref(struct pci_dev *bridge) |
3040 | { |
3041 | - struct pci_dev *bridge = bus->self; |
3042 | struct resource *res; |
3043 | struct pci_bus_region region; |
3044 | u32 l, bu, lu; |
3045 | @@ -602,7 +599,7 @@ static void pci_setup_bridge_mmio_pref(struct pci_bus *bus) |
3046 | |
3047 | /* Set up PREF base/limit. */ |
3048 | bu = lu = 0; |
3049 | - res = bus->resource[2]; |
3050 | + res = &bridge->resource[PCI_BRIDGE_RESOURCES + 2]; |
3051 | pcibios_resource_to_bus(bridge->bus, ®ion, res); |
3052 | if (res->flags & IORESOURCE_PREFETCH) { |
3053 | l = (region.start >> 16) & 0xfff0; |
3054 | @@ -630,13 +627,13 @@ static void __pci_setup_bridge(struct pci_bus *bus, unsigned long type) |
3055 | &bus->busn_res); |
3056 | |
3057 | if (type & IORESOURCE_IO) |
3058 | - pci_setup_bridge_io(bus); |
3059 | + pci_setup_bridge_io(bridge); |
3060 | |
3061 | if (type & IORESOURCE_MEM) |
3062 | - pci_setup_bridge_mmio(bus); |
3063 | + pci_setup_bridge_mmio(bridge); |
3064 | |
3065 | if (type & IORESOURCE_PREFETCH) |
3066 | - pci_setup_bridge_mmio_pref(bus); |
3067 | + pci_setup_bridge_mmio_pref(bridge); |
3068 | |
3069 | pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); |
3070 | } |
3071 | @@ -649,6 +646,41 @@ void pci_setup_bridge(struct pci_bus *bus) |
3072 | __pci_setup_bridge(bus, type); |
3073 | } |
3074 | |
3075 | + |
3076 | +int pci_claim_bridge_resource(struct pci_dev *bridge, int i) |
3077 | +{ |
3078 | + if (i < PCI_BRIDGE_RESOURCES || i > PCI_BRIDGE_RESOURCE_END) |
3079 | + return 0; |
3080 | + |
3081 | + if (pci_claim_resource(bridge, i) == 0) |
3082 | + return 0; /* claimed the window */ |
3083 | + |
3084 | + if ((bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI) |
3085 | + return 0; |
3086 | + |
3087 | + if (!pci_bus_clip_resource(bridge, i)) |
3088 | + return -EINVAL; /* clipping didn't change anything */ |
3089 | + |
3090 | + switch (i - PCI_BRIDGE_RESOURCES) { |
3091 | + case 0: |
3092 | + pci_setup_bridge_io(bridge); |
3093 | + break; |
3094 | + case 1: |
3095 | + pci_setup_bridge_mmio(bridge); |
3096 | + break; |
3097 | + case 2: |
3098 | + pci_setup_bridge_mmio_pref(bridge); |
3099 | + break; |
3100 | + default: |
3101 | + return -EINVAL; |
3102 | + } |
3103 | + |
3104 | + if (pci_claim_resource(bridge, i) == 0) |
3105 | + return 0; /* claimed a smaller window */ |
3106 | + |
3107 | + return -EINVAL; |
3108 | +} |
3109 | + |
3110 | /* Check whether the bridge supports optional I/O and |
3111 | prefetchable memory ranges. If not, the respective |
3112 | base/limit registers must be read-only and read as 0. */ |
3113 | diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c |
3114 | index e4f65510c87e..89dca77ca038 100644 |
3115 | --- a/drivers/pinctrl/core.c |
3116 | +++ b/drivers/pinctrl/core.c |
3117 | @@ -1801,14 +1801,15 @@ void pinctrl_unregister(struct pinctrl_dev *pctldev) |
3118 | if (pctldev == NULL) |
3119 | return; |
3120 | |
3121 | - mutex_lock(&pinctrldev_list_mutex); |
3122 | mutex_lock(&pctldev->mutex); |
3123 | - |
3124 | pinctrl_remove_device_debugfs(pctldev); |
3125 | + mutex_unlock(&pctldev->mutex); |
3126 | |
3127 | if (!IS_ERR(pctldev->p)) |
3128 | pinctrl_put(pctldev->p); |
3129 | |
3130 | + mutex_lock(&pinctrldev_list_mutex); |
3131 | + mutex_lock(&pctldev->mutex); |
3132 | /* TODO: check that no pinmuxes are still active? */ |
3133 | list_del(&pctldev->node); |
3134 | /* Destroy descriptor tree */ |
3135 | diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c |
3136 | index e730935fa457..ed7017df065d 100644 |
3137 | --- a/drivers/pinctrl/qcom/pinctrl-msm.c |
3138 | +++ b/drivers/pinctrl/qcom/pinctrl-msm.c |
3139 | @@ -865,10 +865,10 @@ static int msm_ps_hold_restart(struct notifier_block *nb, unsigned long action, |
3140 | |
3141 | static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl) |
3142 | { |
3143 | - int i = 0; |
3144 | + int i; |
3145 | const struct msm_function *func = pctrl->soc->functions; |
3146 | |
3147 | - for (; i <= pctrl->soc->nfunctions; i++) |
3148 | + for (i = 0; i < pctrl->soc->nfunctions; i++) |
3149 | if (!strcmp(func[i].name, "ps_hold")) { |
3150 | pctrl->restart_nb.notifier_call = msm_ps_hold_restart; |
3151 | pctrl->restart_nb.priority = 128; |
3152 | diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c |
3153 | index 99485415dcc2..91e97ec01418 100644 |
3154 | --- a/drivers/s390/crypto/ap_bus.c |
3155 | +++ b/drivers/s390/crypto/ap_bus.c |
3156 | @@ -44,6 +44,7 @@ |
3157 | #include <linux/hrtimer.h> |
3158 | #include <linux/ktime.h> |
3159 | #include <asm/facility.h> |
3160 | +#include <linux/crypto.h> |
3161 | |
3162 | #include "ap_bus.h" |
3163 | |
3164 | @@ -71,7 +72,7 @@ MODULE_AUTHOR("IBM Corporation"); |
3165 | MODULE_DESCRIPTION("Adjunct Processor Bus driver, " \ |
3166 | "Copyright IBM Corp. 2006, 2012"); |
3167 | MODULE_LICENSE("GPL"); |
3168 | -MODULE_ALIAS("z90crypt"); |
3169 | +MODULE_ALIAS_CRYPTO("z90crypt"); |
3170 | |
3171 | /* |
3172 | * Module parameter |
3173 | diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c |
3174 | index 2a9578c116b7..c3bdca7bf1e9 100644 |
3175 | --- a/drivers/scsi/ipr.c |
3176 | +++ b/drivers/scsi/ipr.c |
3177 | @@ -683,6 +683,7 @@ static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd, |
3178 | ipr_reinit_ipr_cmnd(ipr_cmd); |
3179 | ipr_cmd->u.scratch = 0; |
3180 | ipr_cmd->sibling = NULL; |
3181 | + ipr_cmd->eh_comp = NULL; |
3182 | ipr_cmd->fast_done = fast_done; |
3183 | init_timer(&ipr_cmd->timer); |
3184 | } |
3185 | @@ -848,6 +849,8 @@ static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) |
3186 | |
3187 | scsi_dma_unmap(ipr_cmd->scsi_cmd); |
3188 | scsi_cmd->scsi_done(scsi_cmd); |
3189 | + if (ipr_cmd->eh_comp) |
3190 | + complete(ipr_cmd->eh_comp); |
3191 | list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); |
3192 | } |
3193 | |
3194 | @@ -4853,6 +4856,84 @@ static int ipr_slave_alloc(struct scsi_device *sdev) |
3195 | return rc; |
3196 | } |
3197 | |
3198 | +/** |
3199 | + * ipr_match_lun - Match function for specified LUN |
3200 | + * @ipr_cmd: ipr command struct |
3201 | + * @device: device to match (sdev) |
3202 | + * |
3203 | + * Returns: |
3204 | + * 1 if command matches sdev / 0 if command does not match sdev |
3205 | + **/ |
3206 | +static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) |
3207 | +{ |
3208 | + if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) |
3209 | + return 1; |
3210 | + return 0; |
3211 | +} |
3212 | + |
3213 | +/** |
3214 | + * ipr_wait_for_ops - Wait for matching commands to complete |
3215 | + * @ipr_cmd: ipr command struct |
3216 | + * @device: device to match (sdev) |
3217 | + * @match: match function to use |
3218 | + * |
3219 | + * Returns: |
3220 | + * SUCCESS / FAILED |
3221 | + **/ |
3222 | +static int ipr_wait_for_ops(struct ipr_ioa_cfg *ioa_cfg, void *device, |
3223 | + int (*match)(struct ipr_cmnd *, void *)) |
3224 | +{ |
3225 | + struct ipr_cmnd *ipr_cmd; |
3226 | + int wait; |
3227 | + unsigned long flags; |
3228 | + struct ipr_hrr_queue *hrrq; |
3229 | + signed long timeout = IPR_ABORT_TASK_TIMEOUT; |
3230 | + DECLARE_COMPLETION_ONSTACK(comp); |
3231 | + |
3232 | + ENTER; |
3233 | + do { |
3234 | + wait = 0; |
3235 | + |
3236 | + for_each_hrrq(hrrq, ioa_cfg) { |
3237 | + spin_lock_irqsave(hrrq->lock, flags); |
3238 | + list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { |
3239 | + if (match(ipr_cmd, device)) { |
3240 | + ipr_cmd->eh_comp = ∁ |
3241 | + wait++; |
3242 | + } |
3243 | + } |
3244 | + spin_unlock_irqrestore(hrrq->lock, flags); |
3245 | + } |
3246 | + |
3247 | + if (wait) { |
3248 | + timeout = wait_for_completion_timeout(&comp, timeout); |
3249 | + |
3250 | + if (!timeout) { |
3251 | + wait = 0; |
3252 | + |
3253 | + for_each_hrrq(hrrq, ioa_cfg) { |
3254 | + spin_lock_irqsave(hrrq->lock, flags); |
3255 | + list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { |
3256 | + if (match(ipr_cmd, device)) { |
3257 | + ipr_cmd->eh_comp = NULL; |
3258 | + wait++; |
3259 | + } |
3260 | + } |
3261 | + spin_unlock_irqrestore(hrrq->lock, flags); |
3262 | + } |
3263 | + |
3264 | + if (wait) |
3265 | + dev_err(&ioa_cfg->pdev->dev, "Timed out waiting for aborted commands\n"); |
3266 | + LEAVE; |
3267 | + return wait ? FAILED : SUCCESS; |
3268 | + } |
3269 | + } |
3270 | + } while (wait); |
3271 | + |
3272 | + LEAVE; |
3273 | + return SUCCESS; |
3274 | +} |
3275 | + |
3276 | static int ipr_eh_host_reset(struct scsi_cmnd *cmd) |
3277 | { |
3278 | struct ipr_ioa_cfg *ioa_cfg; |
3279 | @@ -5072,11 +5153,17 @@ static int __ipr_eh_dev_reset(struct scsi_cmnd *scsi_cmd) |
3280 | static int ipr_eh_dev_reset(struct scsi_cmnd *cmd) |
3281 | { |
3282 | int rc; |
3283 | + struct ipr_ioa_cfg *ioa_cfg; |
3284 | + |
3285 | + ioa_cfg = (struct ipr_ioa_cfg *) cmd->device->host->hostdata; |
3286 | |
3287 | spin_lock_irq(cmd->device->host->host_lock); |
3288 | rc = __ipr_eh_dev_reset(cmd); |
3289 | spin_unlock_irq(cmd->device->host->host_lock); |
3290 | |
3291 | + if (rc == SUCCESS) |
3292 | + rc = ipr_wait_for_ops(ioa_cfg, cmd->device, ipr_match_lun); |
3293 | + |
3294 | return rc; |
3295 | } |
3296 | |
3297 | @@ -5254,13 +5341,18 @@ static int ipr_eh_abort(struct scsi_cmnd *scsi_cmd) |
3298 | { |
3299 | unsigned long flags; |
3300 | int rc; |
3301 | + struct ipr_ioa_cfg *ioa_cfg; |
3302 | |
3303 | ENTER; |
3304 | |
3305 | + ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata; |
3306 | + |
3307 | spin_lock_irqsave(scsi_cmd->device->host->host_lock, flags); |
3308 | rc = ipr_cancel_op(scsi_cmd); |
3309 | spin_unlock_irqrestore(scsi_cmd->device->host->host_lock, flags); |
3310 | |
3311 | + if (rc == SUCCESS) |
3312 | + rc = ipr_wait_for_ops(ioa_cfg, scsi_cmd->device, ipr_match_lun); |
3313 | LEAVE; |
3314 | return rc; |
3315 | } |
3316 | diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h |
3317 | index d0201ceb4aac..fa82c003bc32 100644 |
3318 | --- a/drivers/scsi/ipr.h |
3319 | +++ b/drivers/scsi/ipr.h |
3320 | @@ -1608,6 +1608,7 @@ struct ipr_cmnd { |
3321 | struct scsi_device *sdev; |
3322 | } u; |
3323 | |
3324 | + struct completion *eh_comp; |
3325 | struct ipr_hrr_queue *hrrq; |
3326 | struct ipr_ioa_cfg *ioa_cfg; |
3327 | }; |
3328 | diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c |
3329 | index 9df5d6ec7eec..f3a9d831d0f9 100644 |
3330 | --- a/drivers/xen/swiotlb-xen.c |
3331 | +++ b/drivers/xen/swiotlb-xen.c |
3332 | @@ -449,7 +449,7 @@ static void xen_unmap_single(struct device *hwdev, dma_addr_t dev_addr, |
3333 | |
3334 | /* NOTE: We use dev_addr here, not paddr! */ |
3335 | if (is_xen_swiotlb_buffer(dev_addr)) { |
3336 | - swiotlb_tbl_unmap_single(hwdev, dev_addr, size, dir); |
3337 | + swiotlb_tbl_unmap_single(hwdev, paddr, size, dir); |
3338 | return; |
3339 | } |
3340 | |
3341 | diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c |
3342 | index 45cb59bcc791..8b7898b7670f 100644 |
3343 | --- a/fs/cifs/ioctl.c |
3344 | +++ b/fs/cifs/ioctl.c |
3345 | @@ -86,21 +86,16 @@ static long cifs_ioctl_clone(unsigned int xid, struct file *dst_file, |
3346 | } |
3347 | |
3348 | src_inode = file_inode(src_file.file); |
3349 | + rc = -EINVAL; |
3350 | + if (S_ISDIR(src_inode->i_mode)) |
3351 | + goto out_fput; |
3352 | |
3353 | /* |
3354 | * Note: cifs case is easier than btrfs since server responsible for |
3355 | * checks for proper open modes and file type and if it wants |
3356 | * server could even support copy of range where source = target |
3357 | */ |
3358 | - |
3359 | - /* so we do not deadlock racing two ioctls on same files */ |
3360 | - if (target_inode < src_inode) { |
3361 | - mutex_lock_nested(&target_inode->i_mutex, I_MUTEX_PARENT); |
3362 | - mutex_lock_nested(&src_inode->i_mutex, I_MUTEX_CHILD); |
3363 | - } else { |
3364 | - mutex_lock_nested(&src_inode->i_mutex, I_MUTEX_PARENT); |
3365 | - mutex_lock_nested(&target_inode->i_mutex, I_MUTEX_CHILD); |
3366 | - } |
3367 | + lock_two_nondirectories(target_inode, src_inode); |
3368 | |
3369 | /* determine range to clone */ |
3370 | rc = -EINVAL; |
3371 | @@ -124,13 +119,7 @@ static long cifs_ioctl_clone(unsigned int xid, struct file *dst_file, |
3372 | out_unlock: |
3373 | /* although unlocking in the reverse order from locking is not |
3374 | strictly necessary here it is a little cleaner to be consistent */ |
3375 | - if (target_inode < src_inode) { |
3376 | - mutex_unlock(&src_inode->i_mutex); |
3377 | - mutex_unlock(&target_inode->i_mutex); |
3378 | - } else { |
3379 | - mutex_unlock(&target_inode->i_mutex); |
3380 | - mutex_unlock(&src_inode->i_mutex); |
3381 | - } |
3382 | + unlock_two_nondirectories(src_inode, target_inode); |
3383 | out_fput: |
3384 | fdput(src_file); |
3385 | out_drop_write: |
3386 | diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h |
3387 | index f34a0835aa4f..8de31d472fad 100644 |
3388 | --- a/include/acpi/acpi_bus.h |
3389 | +++ b/include/acpi/acpi_bus.h |
3390 | @@ -312,6 +312,7 @@ struct acpi_device_wakeup_flags { |
3391 | u8 valid:1; /* Can successfully enable wakeup? */ |
3392 | u8 run_wake:1; /* Run-Wake GPE devices */ |
3393 | u8 notifier_present:1; /* Wake-up notify handler has been installed */ |
3394 | + u8 enabled:1; /* Enabled for wakeup */ |
3395 | }; |
3396 | |
3397 | struct acpi_device_wakeup_context { |
3398 | diff --git a/include/linux/crypto.h b/include/linux/crypto.h |
3399 | index d45e949699ea..dc34dfc766b5 100644 |
3400 | --- a/include/linux/crypto.h |
3401 | +++ b/include/linux/crypto.h |
3402 | @@ -26,6 +26,19 @@ |
3403 | #include <linux/uaccess.h> |
3404 | |
3405 | /* |
3406 | + * Autoloaded crypto modules should only use a prefixed name to avoid allowing |
3407 | + * arbitrary modules to be loaded. Loading from userspace may still need the |
3408 | + * unprefixed names, so retains those aliases as well. |
3409 | + * This uses __MODULE_INFO directly instead of MODULE_ALIAS because pre-4.3 |
3410 | + * gcc (e.g. avr32 toolchain) uses __LINE__ for uniqueness, and this macro |
3411 | + * expands twice on the same line. Instead, use a separate base name for the |
3412 | + * alias. |
3413 | + */ |
3414 | +#define MODULE_ALIAS_CRYPTO(name) \ |
3415 | + __MODULE_INFO(alias, alias_userspace, name); \ |
3416 | + __MODULE_INFO(alias, alias_crypto, "crypto-" name) |
3417 | + |
3418 | +/* |
3419 | * Algorithm masks and types. |
3420 | */ |
3421 | #define CRYPTO_ALG_TYPE_MASK 0x0000000f |
3422 | diff --git a/include/linux/libata.h b/include/linux/libata.h |
3423 | index bd5fefeaf548..fe0bf8dc83bb 100644 |
3424 | --- a/include/linux/libata.h |
3425 | +++ b/include/linux/libata.h |
3426 | @@ -230,6 +230,7 @@ enum { |
3427 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity |
3428 | * led */ |
3429 | ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */ |
3430 | + ATA_FLAG_LOWTAG = (1 << 24), /* host wants lowest available tag */ |
3431 | |
3432 | /* bits 24:31 of ap->flags are reserved for LLD specific flags */ |
3433 | |
3434 | diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h |
3435 | index 7ea069cd3257..4b3736f7065c 100644 |
3436 | --- a/include/linux/pagemap.h |
3437 | +++ b/include/linux/pagemap.h |
3438 | @@ -251,7 +251,7 @@ pgoff_t page_cache_prev_hole(struct address_space *mapping, |
3439 | #define FGP_NOWAIT 0x00000020 |
3440 | |
3441 | struct page *pagecache_get_page(struct address_space *mapping, pgoff_t offset, |
3442 | - int fgp_flags, gfp_t cache_gfp_mask, gfp_t radix_gfp_mask); |
3443 | + int fgp_flags, gfp_t cache_gfp_mask); |
3444 | |
3445 | /** |
3446 | * find_get_page - find and get a page reference |
3447 | @@ -266,13 +266,13 @@ struct page *pagecache_get_page(struct address_space *mapping, pgoff_t offset, |
3448 | static inline struct page *find_get_page(struct address_space *mapping, |
3449 | pgoff_t offset) |
3450 | { |
3451 | - return pagecache_get_page(mapping, offset, 0, 0, 0); |
3452 | + return pagecache_get_page(mapping, offset, 0, 0); |
3453 | } |
3454 | |
3455 | static inline struct page *find_get_page_flags(struct address_space *mapping, |
3456 | pgoff_t offset, int fgp_flags) |
3457 | { |
3458 | - return pagecache_get_page(mapping, offset, fgp_flags, 0, 0); |
3459 | + return pagecache_get_page(mapping, offset, fgp_flags, 0); |
3460 | } |
3461 | |
3462 | /** |
3463 | @@ -292,7 +292,7 @@ static inline struct page *find_get_page_flags(struct address_space *mapping, |
3464 | static inline struct page *find_lock_page(struct address_space *mapping, |
3465 | pgoff_t offset) |
3466 | { |
3467 | - return pagecache_get_page(mapping, offset, FGP_LOCK, 0, 0); |
3468 | + return pagecache_get_page(mapping, offset, FGP_LOCK, 0); |
3469 | } |
3470 | |
3471 | /** |
3472 | @@ -319,7 +319,7 @@ static inline struct page *find_or_create_page(struct address_space *mapping, |
3473 | { |
3474 | return pagecache_get_page(mapping, offset, |
3475 | FGP_LOCK|FGP_ACCESSED|FGP_CREAT, |
3476 | - gfp_mask, gfp_mask & GFP_RECLAIM_MASK); |
3477 | + gfp_mask); |
3478 | } |
3479 | |
3480 | /** |
3481 | @@ -340,8 +340,7 @@ static inline struct page *grab_cache_page_nowait(struct address_space *mapping, |
3482 | { |
3483 | return pagecache_get_page(mapping, index, |
3484 | FGP_LOCK|FGP_CREAT|FGP_NOFS|FGP_NOWAIT, |
3485 | - mapping_gfp_mask(mapping), |
3486 | - GFP_NOFS); |
3487 | + mapping_gfp_mask(mapping)); |
3488 | } |
3489 | |
3490 | struct page *find_get_entry(struct address_space *mapping, pgoff_t offset); |
3491 | diff --git a/include/linux/pci.h b/include/linux/pci.h |
3492 | index 4c8ac5fcc224..2882c13c6391 100644 |
3493 | --- a/include/linux/pci.h |
3494 | +++ b/include/linux/pci.h |
3495 | @@ -175,6 +175,8 @@ enum pci_dev_flags { |
3496 | PCI_DEV_FLAGS_DMA_ALIAS_DEVFN = (__force pci_dev_flags_t) (1 << 4), |
3497 | /* Use a PCIe-to-PCI bridge alias even if !pci_is_pcie */ |
3498 | PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5), |
3499 | + /* Do not use bus resets for device */ |
3500 | + PCI_DEV_FLAGS_NO_BUS_RESET = (__force pci_dev_flags_t) (1 << 6), |
3501 | }; |
3502 | |
3503 | enum pci_irq_reroute_variant { |
3504 | @@ -1062,6 +1064,7 @@ resource_size_t pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx); |
3505 | void pci_bus_assign_resources(const struct pci_bus *bus); |
3506 | void pci_bus_size_bridges(struct pci_bus *bus); |
3507 | int pci_claim_resource(struct pci_dev *, int); |
3508 | +int pci_claim_bridge_resource(struct pci_dev *bridge, int i); |
3509 | void pci_assign_unassigned_resources(void); |
3510 | void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge); |
3511 | void pci_assign_unassigned_bus_resources(struct pci_bus *bus); |
3512 | diff --git a/include/linux/time.h b/include/linux/time.h |
3513 | index 8c42cf8d2444..5989b0ead1ec 100644 |
3514 | --- a/include/linux/time.h |
3515 | +++ b/include/linux/time.h |
3516 | @@ -99,6 +99,19 @@ static inline bool timespec_valid_strict(const struct timespec *ts) |
3517 | return true; |
3518 | } |
3519 | |
3520 | +static inline bool timeval_valid(const struct timeval *tv) |
3521 | +{ |
3522 | + /* Dates before 1970 are bogus */ |
3523 | + if (tv->tv_sec < 0) |
3524 | + return false; |
3525 | + |
3526 | + /* Can't have more microseconds then a second */ |
3527 | + if (tv->tv_usec < 0 || tv->tv_usec >= USEC_PER_SEC) |
3528 | + return false; |
3529 | + |
3530 | + return true; |
3531 | +} |
3532 | + |
3533 | extern struct timespec timespec_trunc(struct timespec t, unsigned gran); |
3534 | |
3535 | #define CURRENT_TIME (current_kernel_time()) |
3536 | diff --git a/include/uapi/linux/can/netlink.h b/include/uapi/linux/can/netlink.h |
3537 | index 3e4323a3918d..94ffe0c83ce7 100644 |
3538 | --- a/include/uapi/linux/can/netlink.h |
3539 | +++ b/include/uapi/linux/can/netlink.h |
3540 | @@ -98,6 +98,7 @@ struct can_ctrlmode { |
3541 | #define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */ |
3542 | #define CAN_CTRLMODE_FD 0x20 /* CAN FD mode */ |
3543 | #define CAN_CTRLMODE_PRESUME_ACK 0x40 /* Ignore missing CAN ACKs */ |
3544 | +#define CAN_CTRLMODE_FD_NON_ISO 0x80 /* CAN FD in non-ISO mode */ |
3545 | |
3546 | /* |
3547 | * CAN device statistics |
3548 | diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c |
3549 | index 87a346fd6d61..28bf91c60a0b 100644 |
3550 | --- a/kernel/time/ntp.c |
3551 | +++ b/kernel/time/ntp.c |
3552 | @@ -633,6 +633,13 @@ int ntp_validate_timex(struct timex *txc) |
3553 | if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME))) |
3554 | return -EPERM; |
3555 | |
3556 | + if (txc->modes & ADJ_FREQUENCY) { |
3557 | + if (LONG_MIN / PPM_SCALE > txc->freq) |
3558 | + return -EINVAL; |
3559 | + if (LONG_MAX / PPM_SCALE < txc->freq) |
3560 | + return -EINVAL; |
3561 | + } |
3562 | + |
3563 | return 0; |
3564 | } |
3565 | |
3566 | diff --git a/kernel/time/time.c b/kernel/time/time.c |
3567 | index a9ae20fb0b11..22d5d3b73970 100644 |
3568 | --- a/kernel/time/time.c |
3569 | +++ b/kernel/time/time.c |
3570 | @@ -196,6 +196,10 @@ SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv, |
3571 | if (tv) { |
3572 | if (copy_from_user(&user_tv, tv, sizeof(*tv))) |
3573 | return -EFAULT; |
3574 | + |
3575 | + if (!timeval_valid(&user_tv)) |
3576 | + return -EINVAL; |
3577 | + |
3578 | new_ts.tv_sec = user_tv.tv_sec; |
3579 | new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC; |
3580 | } |
3581 | diff --git a/kernel/workqueue.c b/kernel/workqueue.c |
3582 | index 09b685daee3d..66940a53d128 100644 |
3583 | --- a/kernel/workqueue.c |
3584 | +++ b/kernel/workqueue.c |
3585 | @@ -1841,17 +1841,11 @@ static void pool_mayday_timeout(unsigned long __pool) |
3586 | * spin_lock_irq(pool->lock) which may be released and regrabbed |
3587 | * multiple times. Does GFP_KERNEL allocations. Called only from |
3588 | * manager. |
3589 | - * |
3590 | - * Return: |
3591 | - * %false if no action was taken and pool->lock stayed locked, %true |
3592 | - * otherwise. |
3593 | */ |
3594 | -static bool maybe_create_worker(struct worker_pool *pool) |
3595 | +static void maybe_create_worker(struct worker_pool *pool) |
3596 | __releases(&pool->lock) |
3597 | __acquires(&pool->lock) |
3598 | { |
3599 | - if (!need_to_create_worker(pool)) |
3600 | - return false; |
3601 | restart: |
3602 | spin_unlock_irq(&pool->lock); |
3603 | |
3604 | @@ -1877,7 +1871,6 @@ restart: |
3605 | */ |
3606 | if (need_to_create_worker(pool)) |
3607 | goto restart; |
3608 | - return true; |
3609 | } |
3610 | |
3611 | /** |
3612 | @@ -1897,16 +1890,14 @@ restart: |
3613 | * multiple times. Does GFP_KERNEL allocations. |
3614 | * |
3615 | * Return: |
3616 | - * %false if the pool don't need management and the caller can safely start |
3617 | - * processing works, %true indicates that the function released pool->lock |
3618 | - * and reacquired it to perform some management function and that the |
3619 | - * conditions that the caller verified while holding the lock before |
3620 | - * calling the function might no longer be true. |
3621 | + * %false if the pool doesn't need management and the caller can safely |
3622 | + * start processing works, %true if management function was performed and |
3623 | + * the conditions that the caller verified before calling the function may |
3624 | + * no longer be true. |
3625 | */ |
3626 | static bool manage_workers(struct worker *worker) |
3627 | { |
3628 | struct worker_pool *pool = worker->pool; |
3629 | - bool ret = false; |
3630 | |
3631 | /* |
3632 | * Anyone who successfully grabs manager_arb wins the arbitration |
3633 | @@ -1919,12 +1910,12 @@ static bool manage_workers(struct worker *worker) |
3634 | * actual management, the pool may stall indefinitely. |
3635 | */ |
3636 | if (!mutex_trylock(&pool->manager_arb)) |
3637 | - return ret; |
3638 | + return false; |
3639 | |
3640 | - ret |= maybe_create_worker(pool); |
3641 | + maybe_create_worker(pool); |
3642 | |
3643 | mutex_unlock(&pool->manager_arb); |
3644 | - return ret; |
3645 | + return true; |
3646 | } |
3647 | |
3648 | /** |
3649 | diff --git a/mm/filemap.c b/mm/filemap.c |
3650 | index 14b4642279f1..37beab98b416 100644 |
3651 | --- a/mm/filemap.c |
3652 | +++ b/mm/filemap.c |
3653 | @@ -1046,8 +1046,7 @@ EXPORT_SYMBOL(find_lock_entry); |
3654 | * @mapping: the address_space to search |
3655 | * @offset: the page index |
3656 | * @fgp_flags: PCG flags |
3657 | - * @cache_gfp_mask: gfp mask to use for the page cache data page allocation |
3658 | - * @radix_gfp_mask: gfp mask to use for radix tree node allocation |
3659 | + * @gfp_mask: gfp mask to use for the page cache data page allocation |
3660 | * |
3661 | * Looks up the page cache slot at @mapping & @offset. |
3662 | * |
3663 | @@ -1056,11 +1055,9 @@ EXPORT_SYMBOL(find_lock_entry); |
3664 | * FGP_ACCESSED: the page will be marked accessed |
3665 | * FGP_LOCK: Page is return locked |
3666 | * FGP_CREAT: If page is not present then a new page is allocated using |
3667 | - * @cache_gfp_mask and added to the page cache and the VM's LRU |
3668 | - * list. If radix tree nodes are allocated during page cache |
3669 | - * insertion then @radix_gfp_mask is used. The page is returned |
3670 | - * locked and with an increased refcount. Otherwise, %NULL is |
3671 | - * returned. |
3672 | + * @gfp_mask and added to the page cache and the VM's LRU |
3673 | + * list. The page is returned locked and with an increased |
3674 | + * refcount. Otherwise, %NULL is returned. |
3675 | * |
3676 | * If FGP_LOCK or FGP_CREAT are specified then the function may sleep even |
3677 | * if the GFP flags specified for FGP_CREAT are atomic. |
3678 | @@ -1068,7 +1065,7 @@ EXPORT_SYMBOL(find_lock_entry); |
3679 | * If there is a page cache page, it is returned with an increased refcount. |
3680 | */ |
3681 | struct page *pagecache_get_page(struct address_space *mapping, pgoff_t offset, |
3682 | - int fgp_flags, gfp_t cache_gfp_mask, gfp_t radix_gfp_mask) |
3683 | + int fgp_flags, gfp_t gfp_mask) |
3684 | { |
3685 | struct page *page; |
3686 | |
3687 | @@ -1105,13 +1102,11 @@ no_page: |
3688 | if (!page && (fgp_flags & FGP_CREAT)) { |
3689 | int err; |
3690 | if ((fgp_flags & FGP_WRITE) && mapping_cap_account_dirty(mapping)) |
3691 | - cache_gfp_mask |= __GFP_WRITE; |
3692 | - if (fgp_flags & FGP_NOFS) { |
3693 | - cache_gfp_mask &= ~__GFP_FS; |
3694 | - radix_gfp_mask &= ~__GFP_FS; |
3695 | - } |
3696 | + gfp_mask |= __GFP_WRITE; |
3697 | + if (fgp_flags & FGP_NOFS) |
3698 | + gfp_mask &= ~__GFP_FS; |
3699 | |
3700 | - page = __page_cache_alloc(cache_gfp_mask); |
3701 | + page = __page_cache_alloc(gfp_mask); |
3702 | if (!page) |
3703 | return NULL; |
3704 | |
3705 | @@ -1122,7 +1117,8 @@ no_page: |
3706 | if (fgp_flags & FGP_ACCESSED) |
3707 | __SetPageReferenced(page); |
3708 | |
3709 | - err = add_to_page_cache_lru(page, mapping, offset, radix_gfp_mask); |
3710 | + err = add_to_page_cache_lru(page, mapping, offset, |
3711 | + gfp_mask & GFP_RECLAIM_MASK); |
3712 | if (unlikely(err)) { |
3713 | page_cache_release(page); |
3714 | page = NULL; |
3715 | @@ -2443,8 +2439,7 @@ struct page *grab_cache_page_write_begin(struct address_space *mapping, |
3716 | fgp_flags |= FGP_NOFS; |
3717 | |
3718 | page = pagecache_get_page(mapping, index, fgp_flags, |
3719 | - mapping_gfp_mask(mapping), |
3720 | - GFP_KERNEL); |
3721 | + mapping_gfp_mask(mapping)); |
3722 | if (page) |
3723 | wait_for_stable_page(page); |
3724 | |
3725 | diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c |
3726 | index 1d5341f3761d..5d3daae98bf0 100644 |
3727 | --- a/net/netfilter/ipvs/ip_vs_ftp.c |
3728 | +++ b/net/netfilter/ipvs/ip_vs_ftp.c |
3729 | @@ -183,6 +183,8 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, |
3730 | struct nf_conn *ct; |
3731 | struct net *net; |
3732 | |
3733 | + *diff = 0; |
3734 | + |
3735 | #ifdef CONFIG_IP_VS_IPV6 |
3736 | /* This application helper doesn't work with IPv6 yet, |
3737 | * so turn this into a no-op for IPv6 packets |
3738 | @@ -191,8 +193,6 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, |
3739 | return 1; |
3740 | #endif |
3741 | |
3742 | - *diff = 0; |
3743 | - |
3744 | /* Only useful for established sessions */ |
3745 | if (cp->state != IP_VS_TCP_S_ESTABLISHED) |
3746 | return 1; |
3747 | @@ -322,6 +322,9 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, |
3748 | struct ip_vs_conn *n_cp; |
3749 | struct net *net; |
3750 | |
3751 | + /* no diff required for incoming packets */ |
3752 | + *diff = 0; |
3753 | + |
3754 | #ifdef CONFIG_IP_VS_IPV6 |
3755 | /* This application helper doesn't work with IPv6 yet, |
3756 | * so turn this into a no-op for IPv6 packets |
3757 | @@ -330,9 +333,6 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, |
3758 | return 1; |
3759 | #endif |
3760 | |
3761 | - /* no diff required for incoming packets */ |
3762 | - *diff = 0; |
3763 | - |
3764 | /* Only useful for established sessions */ |
3765 | if (cp->state != IP_VS_TCP_S_ESTABLISHED) |
3766 | return 1; |
3767 | diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c |
3768 | index 5016a6929085..c5880124ec0d 100644 |
3769 | --- a/net/netfilter/nf_conntrack_core.c |
3770 | +++ b/net/netfilter/nf_conntrack_core.c |
3771 | @@ -611,16 +611,15 @@ __nf_conntrack_confirm(struct sk_buff *skb) |
3772 | */ |
3773 | NF_CT_ASSERT(!nf_ct_is_confirmed(ct)); |
3774 | pr_debug("Confirming conntrack %p\n", ct); |
3775 | - /* We have to check the DYING flag inside the lock to prevent |
3776 | - a race against nf_ct_get_next_corpse() possibly called from |
3777 | - user context, else we insert an already 'dead' hash, blocking |
3778 | - further use of that particular connection -JM */ |
3779 | + /* We have to check the DYING flag after unlink to prevent |
3780 | + * a race against nf_ct_get_next_corpse() possibly called from |
3781 | + * user context, else we insert an already 'dead' hash, blocking |
3782 | + * further use of that particular connection -JM. |
3783 | + */ |
3784 | + nf_ct_del_from_dying_or_unconfirmed_list(ct); |
3785 | |
3786 | - if (unlikely(nf_ct_is_dying(ct))) { |
3787 | - nf_conntrack_double_unlock(hash, reply_hash); |
3788 | - local_bh_enable(); |
3789 | - return NF_ACCEPT; |
3790 | - } |
3791 | + if (unlikely(nf_ct_is_dying(ct))) |
3792 | + goto out; |
3793 | |
3794 | /* See if there's one in the list already, including reverse: |
3795 | NAT could have grabbed it without realizing, since we're |
3796 | @@ -636,8 +635,6 @@ __nf_conntrack_confirm(struct sk_buff *skb) |
3797 | zone == nf_ct_zone(nf_ct_tuplehash_to_ctrack(h))) |
3798 | goto out; |
3799 | |
3800 | - nf_ct_del_from_dying_or_unconfirmed_list(ct); |
3801 | - |
3802 | /* Timer relative to confirmation time, not original |
3803 | setting time, otherwise we'd get timer wrap in |
3804 | weird delay cases. */ |
3805 | @@ -673,6 +670,7 @@ __nf_conntrack_confirm(struct sk_buff *skb) |
3806 | return NF_ACCEPT; |
3807 | |
3808 | out: |
3809 | + nf_ct_add_to_dying_list(ct); |
3810 | nf_conntrack_double_unlock(hash, reply_hash); |
3811 | NF_CT_STAT_INC(net, insert_failed); |
3812 | local_bh_enable(); |
3813 | diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c |
3814 | index 66e8425dbfe7..71b574c7bde9 100644 |
3815 | --- a/net/netfilter/nf_tables_api.c |
3816 | +++ b/net/netfilter/nf_tables_api.c |
3817 | @@ -713,16 +713,12 @@ static int nft_flush_table(struct nft_ctx *ctx) |
3818 | struct nft_chain *chain, *nc; |
3819 | struct nft_set *set, *ns; |
3820 | |
3821 | - list_for_each_entry_safe(chain, nc, &ctx->table->chains, list) { |
3822 | + list_for_each_entry(chain, &ctx->table->chains, list) { |
3823 | ctx->chain = chain; |
3824 | |
3825 | err = nft_delrule_by_chain(ctx); |
3826 | if (err < 0) |
3827 | goto out; |
3828 | - |
3829 | - err = nft_delchain(ctx); |
3830 | - if (err < 0) |
3831 | - goto out; |
3832 | } |
3833 | |
3834 | list_for_each_entry_safe(set, ns, &ctx->table->sets, list) { |
3835 | @@ -735,6 +731,14 @@ static int nft_flush_table(struct nft_ctx *ctx) |
3836 | goto out; |
3837 | } |
3838 | |
3839 | + list_for_each_entry_safe(chain, nc, &ctx->table->chains, list) { |
3840 | + ctx->chain = chain; |
3841 | + |
3842 | + err = nft_delchain(ctx); |
3843 | + if (err < 0) |
3844 | + goto out; |
3845 | + } |
3846 | + |
3847 | err = nft_deltable(ctx); |
3848 | out: |
3849 | return err; |
3850 | diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c |
3851 | index 13c2e17bbe27..1aa7049c93f5 100644 |
3852 | --- a/net/netfilter/nfnetlink.c |
3853 | +++ b/net/netfilter/nfnetlink.c |
3854 | @@ -321,7 +321,8 @@ replay: |
3855 | nlh = nlmsg_hdr(skb); |
3856 | err = 0; |
3857 | |
3858 | - if (nlh->nlmsg_len < NLMSG_HDRLEN) { |
3859 | + if (nlmsg_len(nlh) < sizeof(struct nfgenmsg) || |
3860 | + skb->len < nlh->nlmsg_len) { |
3861 | err = -EINVAL; |
3862 | goto ack; |
3863 | } |
3864 | @@ -469,7 +470,7 @@ static int nfnetlink_bind(int group) |
3865 | int type; |
3866 | |
3867 | if (group <= NFNLGRP_NONE || group > NFNLGRP_MAX) |
3868 | - return -EINVAL; |
3869 | + return 0; |
3870 | |
3871 | type = nfnl_group2type[group]; |
3872 | |
3873 | diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl |
3874 | index d4b665610d67..1f9f08ae60c1 100755 |
3875 | --- a/scripts/recordmcount.pl |
3876 | +++ b/scripts/recordmcount.pl |
3877 | @@ -255,7 +255,6 @@ if ($arch eq "x86_64") { |
3878 | # force flags for this arch |
3879 | $ld .= " -m shlelf_linux"; |
3880 | $objcopy .= " -O elf32-sh-linux"; |
3881 | - $cc .= " -m32"; |
3882 | |
3883 | } elsif ($arch eq "powerpc") { |
3884 | $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; |
3885 | diff --git a/security/keys/gc.c b/security/keys/gc.c |
3886 | index 9609a7f0faea..c7952375ac53 100644 |
3887 | --- a/security/keys/gc.c |
3888 | +++ b/security/keys/gc.c |
3889 | @@ -148,12 +148,12 @@ static noinline void key_gc_unused_keys(struct list_head *keys) |
3890 | if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags)) |
3891 | atomic_dec(&key->user->nikeys); |
3892 | |
3893 | - key_user_put(key->user); |
3894 | - |
3895 | /* now throw away the key memory */ |
3896 | if (key->type->destroy) |
3897 | key->type->destroy(key); |
3898 | |
3899 | + key_user_put(key->user); |
3900 | + |
3901 | kfree(key->description); |
3902 | |
3903 | #ifdef KEY_DEBUGGING |
3904 | diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c |
3905 | index 6e354d326858..a712d754431c 100644 |
3906 | --- a/sound/usb/mixer.c |
3907 | +++ b/sound/usb/mixer.c |
3908 | @@ -909,6 +909,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval, |
3909 | case USB_ID(0x046d, 0x0807): /* Logitech Webcam C500 */ |
3910 | case USB_ID(0x046d, 0x0808): |
3911 | case USB_ID(0x046d, 0x0809): |
3912 | + case USB_ID(0x046d, 0x0819): /* Logitech Webcam C210 */ |
3913 | case USB_ID(0x046d, 0x081b): /* HD Webcam c310 */ |
3914 | case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */ |
3915 | case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */ |