diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/arm/boot/dts/imx25.dtsi linux-libre-3.10.67-gnu/arch/arm/boot/dts/imx25.dtsi
--- linux-libre-3.10.66-gnu/arch/arm/boot/dts/imx25.dtsi	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/arm/boot/dts/imx25.dtsi	2015-01-29 20:42:36.000000000 -0500
@@ -335,7 +335,7 @@
 				compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
 				#pwm-cells = <2>;
 				reg = <0x53fa0000 0x4000>;
-				clocks = <&clks 106>, <&clks 36>;
+				clocks = <&clks 106>, <&clks 52>;
 				clock-names = "ipg", "per";
 				interrupts = <36>;
 			};
@@ -354,7 +354,7 @@
 				compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
 				#pwm-cells = <2>;
 				reg = <0x53fa8000 0x4000>;
-				clocks = <&clks 107>, <&clks 36>;
+				clocks = <&clks 107>, <&clks 52>;
 				clock-names = "ipg", "per";
 				interrupts = <41>;
 			};
@@ -394,7 +394,7 @@
 			pwm4: pwm@53fc8000 {
 				compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
 				reg = <0x53fc8000 0x4000>;
-				clocks = <&clks 108>, <&clks 36>;
+				clocks = <&clks 108>, <&clks 52>;
 				clock-names = "ipg", "per";
 				interrupts = <42>;
 			};
@@ -439,7 +439,7 @@
 				compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
 				#pwm-cells = <2>;
 				reg = <0x53fe0000 0x4000>;
-				clocks = <&clks 105>, <&clks 36>;
+				clocks = <&clks 105>, <&clks 52>;
 				clock-names = "ipg", "per";
 				interrupts = <26>;
 			};
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/arm/crypto/aes_glue.c linux-libre-3.10.67-gnu/arch/arm/crypto/aes_glue.c
--- linux-libre-3.10.66-gnu/arch/arm/crypto/aes_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/arm/crypto/aes_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -103,6 +103,6 @@ module_exit(aes_fini);
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm (ASM)");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("aes");
-MODULE_ALIAS("aes-asm");
+MODULE_ALIAS_CRYPTO("aes");
+MODULE_ALIAS_CRYPTO("aes-asm");
 MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/arm/crypto/sha1_glue.c linux-libre-3.10.67-gnu/arch/arm/crypto/sha1_glue.c
--- linux-libre-3.10.66-gnu/arch/arm/crypto/sha1_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/arm/crypto/sha1_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -175,5 +175,5 @@ module_exit(sha1_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm (ARM)");
-MODULE_ALIAS("sha1");
+MODULE_ALIAS_CRYPTO("sha1");
 MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/powerpc/crypto/sha1.c linux-libre-3.10.67-gnu/arch/powerpc/crypto/sha1.c
--- linux-libre-3.10.66-gnu/arch/powerpc/crypto/sha1.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/powerpc/crypto/sha1.c	2015-01-29 20:42:36.000000000 -0500
@@ -154,4 +154,5 @@ module_exit(sha1_powerpc_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");
 
-MODULE_ALIAS("sha1-powerpc");
+MODULE_ALIAS_CRYPTO("sha1");
+MODULE_ALIAS_CRYPTO("sha1-powerpc");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/aes_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/aes_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/aes_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/aes_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -970,7 +970,7 @@ static void __exit aes_s390_fini(void)
 module_init(aes_s390_init);
 module_exit(aes_s390_fini);
 
-MODULE_ALIAS("aes-all");
+MODULE_ALIAS_CRYPTO("aes-all");
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
 MODULE_LICENSE("GPL");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/des_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/des_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/des_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/des_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -619,8 +619,8 @@ static void __exit des_s390_exit(void)
 module_init(des_s390_init);
 module_exit(des_s390_exit);
 
-MODULE_ALIAS("des");
-MODULE_ALIAS("des3_ede");
+MODULE_ALIAS_CRYPTO("des");
+MODULE_ALIAS_CRYPTO("des3_ede");
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/ghash_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/ghash_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/ghash_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/ghash_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -160,7 +160,7 @@ static void __exit ghash_mod_exit(void)
 module_init(ghash_mod_init);
 module_exit(ghash_mod_exit);
 
-MODULE_ALIAS("ghash");
+MODULE_ALIAS_CRYPTO("ghash");
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("GHASH Message Digest Algorithm, s390 implementation");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/sha1_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/sha1_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/sha1_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/sha1_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -103,6 +103,6 @@ static void __exit sha1_s390_fini(void)
 module_init(sha1_s390_init);
 module_exit(sha1_s390_fini);
 
-MODULE_ALIAS("sha1");
+MODULE_ALIAS_CRYPTO("sha1");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/sha256_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/sha256_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/sha256_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/sha256_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -143,7 +143,7 @@ static void __exit sha256_s390_fini(void
 module_init(sha256_s390_init);
 module_exit(sha256_s390_fini);
 
-MODULE_ALIAS("sha256");
-MODULE_ALIAS("sha224");
+MODULE_ALIAS_CRYPTO("sha256");
+MODULE_ALIAS_CRYPTO("sha224");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA256 and SHA224 Secure Hash Algorithm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/s390/crypto/sha512_s390.c linux-libre-3.10.67-gnu/arch/s390/crypto/sha512_s390.c
--- linux-libre-3.10.66-gnu/arch/s390/crypto/sha512_s390.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/s390/crypto/sha512_s390.c	2015-01-29 20:42:36.000000000 -0500
@@ -86,7 +86,7 @@ static struct shash_alg sha512_alg = {
 	}
 };
 
-MODULE_ALIAS("sha512");
+MODULE_ALIAS_CRYPTO("sha512");
 
 static int sha384_init(struct shash_desc *desc)
 {
@@ -126,7 +126,7 @@ static struct shash_alg sha384_alg = {
 	}
 };
 
-MODULE_ALIAS("sha384");
+MODULE_ALIAS_CRYPTO("sha384");
 
 static int __init init(void)
 {
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/aes_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/aes_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/aes_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/aes_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -499,6 +499,6 @@ module_exit(aes_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("AES Secure Hash Algorithm, sparc64 aes opcode accelerated");
 
-MODULE_ALIAS("aes");
+MODULE_ALIAS_CRYPTO("aes");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/camellia_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/camellia_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/camellia_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/camellia_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -322,6 +322,6 @@ module_exit(camellia_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Camellia Cipher Algorithm, sparc64 camellia opcode accelerated");
 
-MODULE_ALIAS("aes");
+MODULE_ALIAS_CRYPTO("aes");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/crc32c_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/crc32c_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/crc32c_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/crc32c_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -176,6 +176,6 @@ module_exit(crc32c_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("CRC32c (Castagnoli), sparc64 crc32c opcode accelerated");
 
-MODULE_ALIAS("crc32c");
+MODULE_ALIAS_CRYPTO("crc32c");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/des_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/des_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/des_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/des_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -532,6 +532,6 @@ module_exit(des_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms, sparc64 des opcode accelerated");
 
-MODULE_ALIAS("des");
+MODULE_ALIAS_CRYPTO("des");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/md5_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/md5_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/md5_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/md5_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -185,6 +185,6 @@ module_exit(md5_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("MD5 Secure Hash Algorithm, sparc64 md5 opcode accelerated");
 
-MODULE_ALIAS("md5");
+MODULE_ALIAS_CRYPTO("md5");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/sha1_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/sha1_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/sha1_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/sha1_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -180,6 +180,6 @@ module_exit(sha1_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, sparc64 sha1 opcode accelerated");
 
-MODULE_ALIAS("sha1");
+MODULE_ALIAS_CRYPTO("sha1");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/sha256_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/sha256_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/sha256_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/sha256_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -237,7 +237,7 @@ module_exit(sha256_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA-224 and SHA-256 Secure Hash Algorithm, sparc64 sha256 opcode accelerated");
 
-MODULE_ALIAS("sha224");
-MODULE_ALIAS("sha256");
+MODULE_ALIAS_CRYPTO("sha224");
+MODULE_ALIAS_CRYPTO("sha256");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/sparc/crypto/sha512_glue.c linux-libre-3.10.67-gnu/arch/sparc/crypto/sha512_glue.c
--- linux-libre-3.10.66-gnu/arch/sparc/crypto/sha512_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/sparc/crypto/sha512_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -222,7 +222,7 @@ module_exit(sha512_sparc64_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA-384 and SHA-512 Secure Hash Algorithm, sparc64 sha512 opcode accelerated");
 
-MODULE_ALIAS("sha384");
-MODULE_ALIAS("sha512");
+MODULE_ALIAS_CRYPTO("sha384");
+MODULE_ALIAS_CRYPTO("sha512");
 
 #include "crop_devid.c"
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/aes_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/aes_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/aes_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/aes_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -66,5 +66,5 @@ module_exit(aes_fini);
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("aes");
-MODULE_ALIAS("aes-asm");
+MODULE_ALIAS_CRYPTO("aes");
+MODULE_ALIAS_CRYPTO("aes-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/aesni-intel_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/aesni-intel_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/aesni-intel_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/aesni-intel_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -1373,4 +1373,4 @@ module_exit(aesni_exit);
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("aes");
+MODULE_ALIAS_CRYPTO("aes");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/blowfish_avx2_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/blowfish_avx2_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/blowfish_avx2_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/blowfish_avx2_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -581,5 +581,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Blowfish Cipher Algorithm, AVX2 optimized");
-MODULE_ALIAS("blowfish");
-MODULE_ALIAS("blowfish-asm");
+MODULE_ALIAS_CRYPTO("blowfish");
+MODULE_ALIAS_CRYPTO("blowfish-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/blowfish_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/blowfish_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/blowfish_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/blowfish_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -465,5 +465,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Blowfish Cipher Algorithm, asm optimized");
-MODULE_ALIAS("blowfish");
-MODULE_ALIAS("blowfish-asm");
+MODULE_ALIAS_CRYPTO("blowfish");
+MODULE_ALIAS_CRYPTO("blowfish-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_aesni_avx2_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_aesni_avx2_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_aesni_avx2_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_aesni_avx2_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -582,5 +582,5 @@ module_exit(camellia_aesni_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Camellia Cipher Algorithm, AES-NI/AVX2 optimized");
-MODULE_ALIAS("camellia");
-MODULE_ALIAS("camellia-asm");
+MODULE_ALIAS_CRYPTO("camellia");
+MODULE_ALIAS_CRYPTO("camellia-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_aesni_avx_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_aesni_avx_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_aesni_avx_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_aesni_avx_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -574,5 +574,5 @@ module_exit(camellia_aesni_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Camellia Cipher Algorithm, AES-NI/AVX optimized");
-MODULE_ALIAS("camellia");
-MODULE_ALIAS("camellia-asm");
+MODULE_ALIAS_CRYPTO("camellia");
+MODULE_ALIAS_CRYPTO("camellia-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/camellia_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/camellia_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -1725,5 +1725,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Camellia Cipher Algorithm, asm optimized");
-MODULE_ALIAS("camellia");
-MODULE_ALIAS("camellia-asm");
+MODULE_ALIAS_CRYPTO("camellia");
+MODULE_ALIAS_CRYPTO("camellia-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/cast5_avx_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/cast5_avx_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/cast5_avx_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/cast5_avx_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -494,4 +494,4 @@ module_exit(cast5_exit);
 
 MODULE_DESCRIPTION("Cast5 Cipher Algorithm, AVX optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("cast5");
+MODULE_ALIAS_CRYPTO("cast5");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/cast6_avx_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/cast6_avx_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/cast6_avx_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/cast6_avx_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -611,4 +611,4 @@ module_exit(cast6_exit);
 
 MODULE_DESCRIPTION("Cast6 Cipher Algorithm, AVX optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("cast6");
+MODULE_ALIAS_CRYPTO("cast6");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/crc32c-intel_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/crc32c-intel_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/crc32c-intel_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/crc32c-intel_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -280,5 +280,5 @@ MODULE_AUTHOR("Austin Zhang <austin.zhan
 MODULE_DESCRIPTION("CRC32c (Castagnoli) optimization using Intel Hardware.");
 MODULE_LICENSE("GPL");
 
-MODULE_ALIAS("crc32c");
-MODULE_ALIAS("crc32c-intel");
+MODULE_ALIAS_CRYPTO("crc32c");
+MODULE_ALIAS_CRYPTO("crc32c-intel");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/crc32-pclmul_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/crc32-pclmul_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/crc32-pclmul_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/crc32-pclmul_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -197,5 +197,5 @@ module_exit(crc32_pclmul_mod_fini);
 MODULE_AUTHOR("Alexander Boyko <alexander_boyko@xyratex.com>");
 MODULE_LICENSE("GPL");
 
-MODULE_ALIAS("crc32");
-MODULE_ALIAS("crc32-pclmul");
+MODULE_ALIAS_CRYPTO("crc32");
+MODULE_ALIAS_CRYPTO("crc32-pclmul");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/fpu.c linux-libre-3.10.67-gnu/arch/x86/crypto/fpu.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/fpu.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/fpu.c	2015-01-29 20:42:36.000000000 -0500
@@ -17,6 +17,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <linux/crypto.h>
 #include <asm/i387.h>
 
 struct crypto_fpu_ctx {
@@ -159,3 +160,5 @@ void __exit crypto_fpu_exit(void)
 {
 	crypto_unregister_template(&crypto_fpu_tmpl);
 }
+
+MODULE_ALIAS_CRYPTO("fpu");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/ghash-clmulni-intel_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/ghash-clmulni-intel_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/ghash-clmulni-intel_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/ghash-clmulni-intel_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -341,4 +341,4 @@ module_exit(ghash_pclmulqdqni_mod_exit);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("GHASH Message Digest Algorithm, "
 		   "acclerated by PCLMULQDQ-NI");
-MODULE_ALIAS("ghash");
+MODULE_ALIAS_CRYPTO("ghash");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/salsa20_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/salsa20_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/salsa20_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/salsa20_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -119,5 +119,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm (optimized assembly version)");
-MODULE_ALIAS("salsa20");
-MODULE_ALIAS("salsa20-asm");
+MODULE_ALIAS_CRYPTO("salsa20");
+MODULE_ALIAS_CRYPTO("salsa20-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_avx2_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_avx2_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_avx2_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_avx2_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -558,5 +558,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Serpent Cipher Algorithm, AVX2 optimized");
-MODULE_ALIAS("serpent");
-MODULE_ALIAS("serpent-asm");
+MODULE_ALIAS_CRYPTO("serpent");
+MODULE_ALIAS_CRYPTO("serpent-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_avx_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_avx_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_avx_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_avx_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -617,4 +617,4 @@ module_exit(serpent_exit);
 
 MODULE_DESCRIPTION("Serpent Cipher Algorithm, AVX optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("serpent");
+MODULE_ALIAS_CRYPTO("serpent");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_sse2_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_sse2_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/serpent_sse2_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/serpent_sse2_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -618,4 +618,4 @@ module_exit(serpent_sse2_exit);
 
 MODULE_DESCRIPTION("Serpent Cipher Algorithm, SSE2 optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("serpent");
+MODULE_ALIAS_CRYPTO("serpent");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/sha1_ssse3_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/sha1_ssse3_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/sha1_ssse3_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/sha1_ssse3_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -237,4 +237,4 @@ module_exit(sha1_ssse3_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, Supplemental SSE3 accelerated");
 
-MODULE_ALIAS("sha1");
+MODULE_ALIAS_CRYPTO("sha1");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/sha256_ssse3_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/sha256_ssse3_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/sha256_ssse3_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/sha256_ssse3_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -272,4 +272,4 @@ module_exit(sha256_ssse3_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA256 Secure Hash Algorithm, Supplemental SSE3 accelerated");
 
-MODULE_ALIAS("sha256");
+MODULE_ALIAS_CRYPTO("sha256");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/sha512_ssse3_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/sha512_ssse3_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/sha512_ssse3_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/sha512_ssse3_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -279,4 +279,4 @@ module_exit(sha512_ssse3_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA512 Secure Hash Algorithm, Supplemental SSE3 accelerated");
 
-MODULE_ALIAS("sha512");
+MODULE_ALIAS_CRYPTO("sha512");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_avx2_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_avx2_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_avx2_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_avx2_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -580,5 +580,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Twofish Cipher Algorithm, AVX2 optimized");
-MODULE_ALIAS("twofish");
-MODULE_ALIAS("twofish-asm");
+MODULE_ALIAS_CRYPTO("twofish");
+MODULE_ALIAS_CRYPTO("twofish-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_avx_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_avx_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_avx_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_avx_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -589,4 +589,4 @@ module_exit(twofish_exit);
 
 MODULE_DESCRIPTION("Twofish Cipher Algorithm, AVX optimized");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("twofish");
+MODULE_ALIAS_CRYPTO("twofish");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_glue_3way.c linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_glue_3way.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_glue_3way.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_glue_3way.c	2015-01-29 20:42:36.000000000 -0500
@@ -495,5 +495,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Twofish Cipher Algorithm, 3-way parallel asm optimized");
-MODULE_ALIAS("twofish");
-MODULE_ALIAS("twofish-asm");
+MODULE_ALIAS_CRYPTO("twofish");
+MODULE_ALIAS_CRYPTO("twofish-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_glue.c linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_glue.c
--- linux-libre-3.10.66-gnu/arch/x86/crypto/twofish_glue.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/crypto/twofish_glue.c	2015-01-29 20:42:36.000000000 -0500
@@ -96,5 +96,5 @@ module_exit(fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION ("Twofish Cipher Algorithm, asm optimized");
-MODULE_ALIAS("twofish");
-MODULE_ALIAS("twofish-asm");
+MODULE_ALIAS_CRYPTO("twofish");
+MODULE_ALIAS_CRYPTO("twofish-asm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/include/asm/desc.h linux-libre-3.10.67-gnu/arch/x86/include/asm/desc.h
--- linux-libre-3.10.66-gnu/arch/x86/include/asm/desc.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/include/asm/desc.h	2015-01-29 20:42:36.000000000 -0500
@@ -251,7 +251,8 @@ static inline void native_load_tls(struc
 		gdt[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i];
 }
 
-#define _LDT_empty(info)				\
+/* This intentionally ignores lm, since 32-bit apps don't have that field. */
+#define LDT_empty(info)					\
 	((info)->base_addr		== 0	&&	\
 	 (info)->limit			== 0	&&	\
 	 (info)->contents		== 0	&&	\
@@ -261,11 +262,18 @@ static inline void native_load_tls(struc
 	 (info)->seg_not_present	== 1	&&	\
 	 (info)->useable		== 0)
 
-#ifdef CONFIG_X86_64
-#define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0))
-#else
-#define LDT_empty(info) (_LDT_empty(info))
-#endif
+/* Lots of programs expect an all-zero user_desc to mean "no segment at all". */
+static inline bool LDT_zero(const struct user_desc *info)
+{
+	return (info->base_addr		== 0 &&
+		info->limit		== 0 &&
+		info->contents		== 0 &&
+		info->read_exec_only	== 0 &&
+		info->seg_32bit		== 0 &&
+		info->limit_in_pages	== 0 &&
+		info->seg_not_present	== 0 &&
+		info->useable		== 0);
+}
 
 static inline void clear_LDT(void)
 {
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/kernel/cpu/mshyperv.c linux-libre-3.10.67-gnu/arch/x86/kernel/cpu/mshyperv.c
--- linux-libre-3.10.66-gnu/arch/x86/kernel/cpu/mshyperv.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/kernel/cpu/mshyperv.c	2015-01-29 20:42:36.000000000 -0500
@@ -60,6 +60,7 @@ static struct clocksource hyperv_cs = {
 	.rating		= 400, /* use this when running on Hyperv*/
 	.read		= read_hv_clock,
 	.mask		= CLOCKSOURCE_MASK(64),
+	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
 };
 
 static void __init ms_hyperv_init_platform(void)
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/kernel/tls.c linux-libre-3.10.67-gnu/arch/x86/kernel/tls.c
--- linux-libre-3.10.66-gnu/arch/x86/kernel/tls.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/kernel/tls.c	2015-01-29 20:42:36.000000000 -0500
@@ -29,7 +29,28 @@ static int get_free_idx(void)
 
 static bool tls_desc_okay(const struct user_desc *info)
 {
-	if (LDT_empty(info))
+	/*
+	 * For historical reasons (i.e. no one ever documented how any
+	 * of the segmentation APIs work), user programs can and do
+	 * assume that a struct user_desc that's all zeros except for
+	 * entry_number means "no segment at all".  This never actually
+	 * worked.  In fact, up to Linux 3.19, a struct user_desc like
+	 * this would create a 16-bit read-write segment with base and
+	 * limit both equal to zero.
+	 *
+	 * That was close enough to "no segment at all" until we
+	 * hardened this function to disallow 16-bit TLS segments.  Fix
+	 * it up by interpreting these zeroed segments the way that they
+	 * were almost certainly intended to be interpreted.
+	 *
+	 * The correct way to ask for "no segment at all" is to specify
+	 * a user_desc that satisfies LDT_empty.  To keep everything
+	 * working, we accept both.
+	 *
+	 * Note that there's a similar kludge in modify_ldt -- look at
+	 * the distinction between modes 1 and 0x11.
+	 */
+	if (LDT_empty(info) || LDT_zero(info))
 		return true;
 
 	/*
@@ -71,7 +92,7 @@ static void set_tls_desc(struct task_str
 	cpu = get_cpu();
 
 	while (n-- > 0) {
-		if (LDT_empty(info))
+		if (LDT_empty(info) || LDT_zero(info))
 			desc->a = desc->b = 0;
 		else
 			fill_ldt(desc, info);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/kernel/traps.c linux-libre-3.10.67-gnu/arch/x86/kernel/traps.c
--- linux-libre-3.10.66-gnu/arch/x86/kernel/traps.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/kernel/traps.c	2015-01-29 20:42:36.000000000 -0500
@@ -362,7 +362,7 @@ exit:
  * for scheduling or signal handling. The actual stack switch is done in
  * entry.S
  */
-asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
+asmlinkage notrace __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
 {
 	struct pt_regs *regs = eregs;
 	/* Did already sync */
@@ -387,7 +387,7 @@ struct bad_iret_stack {
 	struct pt_regs regs;
 };
 
-asmlinkage __visible
+asmlinkage __visible notrace __kprobes
 struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
 {
 	/*
diff -druNp --no-dereference linux-libre-3.10.66-gnu/arch/x86/kernel/tsc.c linux-libre-3.10.67-gnu/arch/x86/kernel/tsc.c
--- linux-libre-3.10.66-gnu/arch/x86/kernel/tsc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/arch/x86/kernel/tsc.c	2015-01-29 20:42:36.000000000 -0500
@@ -380,7 +380,7 @@ static unsigned long quick_pit_calibrate
 			goto success;
 		}
 	}
-	pr_err("Fast TSC calibration failed\n");
+	pr_info("Fast TSC calibration failed\n");
 	return 0;
 
 success:
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/842.c linux-libre-3.10.67-gnu/crypto/842.c
--- linux-libre-3.10.66-gnu/crypto/842.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/842.c	2015-01-29 20:42:36.000000000 -0500
@@ -180,3 +180,4 @@ module_exit(nx842_mod_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("842 Compression Algorithm");
+MODULE_ALIAS_CRYPTO("842");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/aes_generic.c linux-libre-3.10.67-gnu/crypto/aes_generic.c
--- linux-libre-3.10.66-gnu/crypto/aes_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/aes_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -1474,4 +1474,5 @@ module_exit(aes_fini);
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
 MODULE_LICENSE("Dual BSD/GPL");
-MODULE_ALIAS("aes");
+MODULE_ALIAS_CRYPTO("aes");
+MODULE_ALIAS_CRYPTO("aes-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/algapi.c linux-libre-3.10.67-gnu/crypto/algapi.c
--- linux-libre-3.10.66-gnu/crypto/algapi.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/algapi.c	2015-01-29 20:42:36.000000000 -0500
@@ -495,8 +495,8 @@ static struct crypto_template *__crypto_
 
 struct crypto_template *crypto_lookup_template(const char *name)
 {
-	return try_then_request_module(__crypto_lookup_template(name), "%s",
-				       name);
+	return try_then_request_module(__crypto_lookup_template(name),
+				       "crypto-%s", name);
 }
 EXPORT_SYMBOL_GPL(crypto_lookup_template);
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/ansi_cprng.c linux-libre-3.10.67-gnu/crypto/ansi_cprng.c
--- linux-libre-3.10.66-gnu/crypto/ansi_cprng.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/ansi_cprng.c	2015-01-29 20:42:36.000000000 -0500
@@ -476,4 +476,5 @@ module_param(dbg, int, 0);
 MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)");
 module_init(prng_mod_init);
 module_exit(prng_mod_fini);
-MODULE_ALIAS("stdrng");
+MODULE_ALIAS_CRYPTO("stdrng");
+MODULE_ALIAS_CRYPTO("ansi_cprng");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/anubis.c linux-libre-3.10.67-gnu/crypto/anubis.c
--- linux-libre-3.10.66-gnu/crypto/anubis.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/anubis.c	2015-01-29 20:42:36.000000000 -0500
@@ -704,3 +704,4 @@ module_exit(anubis_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Anubis Cryptographic Algorithm");
+MODULE_ALIAS_CRYPTO("anubis");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/api.c linux-libre-3.10.67-gnu/crypto/api.c
--- linux-libre-3.10.66-gnu/crypto/api.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/api.c	2015-01-29 20:42:36.000000000 -0500
@@ -216,11 +216,11 @@ struct crypto_alg *crypto_larval_lookup(
 
 	alg = crypto_alg_lookup(name, type, mask);
 	if (!alg) {
-		request_module("%s", name);
+		request_module("crypto-%s", name);
 
 		if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask &
 		      CRYPTO_ALG_NEED_FALLBACK))
-			request_module("%s-all", name);
+			request_module("crypto-%s-all", name);
 
 		alg = crypto_alg_lookup(name, type, mask);
 	}
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/arc4.c linux-libre-3.10.67-gnu/crypto/arc4.c
--- linux-libre-3.10.66-gnu/crypto/arc4.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/arc4.c	2015-01-29 20:42:36.000000000 -0500
@@ -166,3 +166,4 @@ module_exit(arc4_exit);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("ARC4 Cipher Algorithm");
 MODULE_AUTHOR("Jon Oberheide <jon@oberheide.org>");
+MODULE_ALIAS_CRYPTO("arc4");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/authenc.c linux-libre-3.10.67-gnu/crypto/authenc.c
--- linux-libre-3.10.66-gnu/crypto/authenc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/authenc.c	2015-01-29 20:42:36.000000000 -0500
@@ -709,3 +709,4 @@ module_exit(crypto_authenc_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Simple AEAD wrapper for IPsec");
+MODULE_ALIAS_CRYPTO("authenc");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/authencesn.c linux-libre-3.10.67-gnu/crypto/authencesn.c
--- linux-libre-3.10.66-gnu/crypto/authencesn.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/authencesn.c	2015-01-29 20:42:36.000000000 -0500
@@ -832,3 +832,4 @@ module_exit(crypto_authenc_esn_module_ex
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Steffen Klassert <steffen.klassert@secunet.com>");
 MODULE_DESCRIPTION("AEAD wrapper for IPsec with extended sequence numbers");
+MODULE_ALIAS_CRYPTO("authencesn");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/blowfish_generic.c linux-libre-3.10.67-gnu/crypto/blowfish_generic.c
--- linux-libre-3.10.66-gnu/crypto/blowfish_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/blowfish_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -138,4 +138,5 @@ module_exit(blowfish_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Blowfish Cipher Algorithm");
-MODULE_ALIAS("blowfish");
+MODULE_ALIAS_CRYPTO("blowfish");
+MODULE_ALIAS_CRYPTO("blowfish-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/camellia_generic.c linux-libre-3.10.67-gnu/crypto/camellia_generic.c
--- linux-libre-3.10.66-gnu/crypto/camellia_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/camellia_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -1098,4 +1098,5 @@ module_exit(camellia_fini);
 
 MODULE_DESCRIPTION("Camellia Cipher Algorithm");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("camellia");
+MODULE_ALIAS_CRYPTO("camellia");
+MODULE_ALIAS_CRYPTO("camellia-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cast5_generic.c linux-libre-3.10.67-gnu/crypto/cast5_generic.c
--- linux-libre-3.10.66-gnu/crypto/cast5_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cast5_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -549,4 +549,5 @@ module_exit(cast5_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Cast5 Cipher Algorithm");
-MODULE_ALIAS("cast5");
+MODULE_ALIAS_CRYPTO("cast5");
+MODULE_ALIAS_CRYPTO("cast5-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cast6_generic.c linux-libre-3.10.67-gnu/crypto/cast6_generic.c
--- linux-libre-3.10.66-gnu/crypto/cast6_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cast6_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -291,4 +291,5 @@ module_exit(cast6_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Cast6 Cipher Algorithm");
-MODULE_ALIAS("cast6");
+MODULE_ALIAS_CRYPTO("cast6");
+MODULE_ALIAS_CRYPTO("cast6-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cbc.c linux-libre-3.10.67-gnu/crypto/cbc.c
--- linux-libre-3.10.66-gnu/crypto/cbc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cbc.c	2015-01-29 20:42:36.000000000 -0500
@@ -289,3 +289,4 @@ module_exit(crypto_cbc_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("CBC block cipher algorithm");
+MODULE_ALIAS_CRYPTO("cbc");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/ccm.c linux-libre-3.10.67-gnu/crypto/ccm.c
--- linux-libre-3.10.66-gnu/crypto/ccm.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/ccm.c	2015-01-29 20:42:36.000000000 -0500
@@ -879,5 +879,6 @@ module_exit(crypto_ccm_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Counter with CBC MAC");
-MODULE_ALIAS("ccm_base");
-MODULE_ALIAS("rfc4309");
+MODULE_ALIAS_CRYPTO("ccm_base");
+MODULE_ALIAS_CRYPTO("rfc4309");
+MODULE_ALIAS_CRYPTO("ccm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/chainiv.c linux-libre-3.10.67-gnu/crypto/chainiv.c
--- linux-libre-3.10.66-gnu/crypto/chainiv.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/chainiv.c	2015-01-29 20:42:36.000000000 -0500
@@ -359,3 +359,4 @@ module_exit(chainiv_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Chain IV Generator");
+MODULE_ALIAS_CRYPTO("chainiv");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cmac.c linux-libre-3.10.67-gnu/crypto/cmac.c
--- linux-libre-3.10.66-gnu/crypto/cmac.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cmac.c	2015-01-29 20:42:36.000000000 -0500
@@ -313,3 +313,4 @@ module_exit(crypto_cmac_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("CMAC keyed hash algorithm");
+MODULE_ALIAS_CRYPTO("cmac");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/crc32.c linux-libre-3.10.67-gnu/crypto/crc32.c
--- linux-libre-3.10.66-gnu/crypto/crc32.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/crc32.c	2015-01-29 20:42:36.000000000 -0500
@@ -156,3 +156,4 @@ module_exit(crc32_mod_fini);
 MODULE_AUTHOR("Alexander Boyko <alexander_boyko@xyratex.com>");
 MODULE_DESCRIPTION("CRC32 calculations wrapper for lib/crc32");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS_CRYPTO("crc32");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cryptd.c linux-libre-3.10.67-gnu/crypto/cryptd.c
--- linux-libre-3.10.66-gnu/crypto/cryptd.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cryptd.c	2015-01-29 20:42:36.000000000 -0500
@@ -955,3 +955,4 @@ module_exit(cryptd_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Software async crypto daemon");
+MODULE_ALIAS_CRYPTO("cryptd");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/crypto_null.c linux-libre-3.10.67-gnu/crypto/crypto_null.c
--- linux-libre-3.10.66-gnu/crypto/crypto_null.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/crypto_null.c	2015-01-29 20:42:36.000000000 -0500
@@ -149,9 +149,9 @@ static struct crypto_alg null_algs[3] =
 	.coa_decompress		=	null_compress } }
 } };
 
-MODULE_ALIAS("compress_null");
-MODULE_ALIAS("digest_null");
-MODULE_ALIAS("cipher_null");
+MODULE_ALIAS_CRYPTO("compress_null");
+MODULE_ALIAS_CRYPTO("digest_null");
+MODULE_ALIAS_CRYPTO("cipher_null");
 
 static int __init crypto_null_mod_init(void)
 {
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/ctr.c linux-libre-3.10.67-gnu/crypto/ctr.c
--- linux-libre-3.10.66-gnu/crypto/ctr.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/ctr.c	2015-01-29 20:42:36.000000000 -0500
@@ -466,4 +466,5 @@ module_exit(crypto_ctr_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("CTR Counter block mode");
-MODULE_ALIAS("rfc3686");
+MODULE_ALIAS_CRYPTO("rfc3686");
+MODULE_ALIAS_CRYPTO("ctr");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/cts.c linux-libre-3.10.67-gnu/crypto/cts.c
--- linux-libre-3.10.66-gnu/crypto/cts.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/cts.c	2015-01-29 20:42:36.000000000 -0500
@@ -350,3 +350,4 @@ module_exit(crypto_cts_module_exit);
 
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_DESCRIPTION("CTS-CBC CipherText Stealing for CBC");
+MODULE_ALIAS_CRYPTO("cts");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/deflate.c linux-libre-3.10.67-gnu/crypto/deflate.c
--- linux-libre-3.10.66-gnu/crypto/deflate.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/deflate.c	2015-01-29 20:42:36.000000000 -0500
@@ -222,4 +222,4 @@ module_exit(deflate_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Deflate Compression Algorithm for IPCOMP");
 MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");
-
+MODULE_ALIAS_CRYPTO("deflate");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/des_generic.c linux-libre-3.10.67-gnu/crypto/des_generic.c
--- linux-libre-3.10.66-gnu/crypto/des_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/des_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -971,8 +971,6 @@ static struct crypto_alg des_algs[2] = {
 	.cia_decrypt		=	des3_ede_decrypt } }
 } };
 
-MODULE_ALIAS("des3_ede");
-
 static int __init des_generic_mod_init(void)
 {
 	return crypto_register_algs(des_algs, ARRAY_SIZE(des_algs));
@@ -989,4 +987,7 @@ module_exit(des_generic_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms");
 MODULE_AUTHOR("Dag Arne Osvik <da@osvik.no>");
-MODULE_ALIAS("des");
+MODULE_ALIAS_CRYPTO("des");
+MODULE_ALIAS_CRYPTO("des-generic");
+MODULE_ALIAS_CRYPTO("des3_ede");
+MODULE_ALIAS_CRYPTO("des3_ede-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/ecb.c linux-libre-3.10.67-gnu/crypto/ecb.c
--- linux-libre-3.10.66-gnu/crypto/ecb.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/ecb.c	2015-01-29 20:42:36.000000000 -0500
@@ -185,3 +185,4 @@ module_exit(crypto_ecb_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("ECB block cipher algorithm");
+MODULE_ALIAS_CRYPTO("ecb");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/eseqiv.c linux-libre-3.10.67-gnu/crypto/eseqiv.c
--- linux-libre-3.10.66-gnu/crypto/eseqiv.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/eseqiv.c	2015-01-29 20:42:36.000000000 -0500
@@ -267,3 +267,4 @@ module_exit(eseqiv_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Encrypted Sequence Number IV Generator");
+MODULE_ALIAS_CRYPTO("eseqiv");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/fcrypt.c linux-libre-3.10.67-gnu/crypto/fcrypt.c
--- linux-libre-3.10.66-gnu/crypto/fcrypt.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/fcrypt.c	2015-01-29 20:42:36.000000000 -0500
@@ -420,3 +420,4 @@ module_exit(fcrypt_mod_fini);
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_DESCRIPTION("FCrypt Cipher Algorithm");
 MODULE_AUTHOR("David Howells <dhowells@redhat.com>");
+MODULE_ALIAS_CRYPTO("fcrypt");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/gcm.c linux-libre-3.10.67-gnu/crypto/gcm.c
--- linux-libre-3.10.66-gnu/crypto/gcm.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/gcm.c	2015-01-29 20:42:36.000000000 -0500
@@ -1441,6 +1441,7 @@ module_exit(crypto_gcm_module_exit);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Galois/Counter Mode");
 MODULE_AUTHOR("Mikko Herranen <mh1@iki.fi>");
-MODULE_ALIAS("gcm_base");
-MODULE_ALIAS("rfc4106");
-MODULE_ALIAS("rfc4543");
+MODULE_ALIAS_CRYPTO("gcm_base");
+MODULE_ALIAS_CRYPTO("rfc4106");
+MODULE_ALIAS_CRYPTO("rfc4543");
+MODULE_ALIAS_CRYPTO("gcm");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/ghash-generic.c linux-libre-3.10.67-gnu/crypto/ghash-generic.c
--- linux-libre-3.10.66-gnu/crypto/ghash-generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/ghash-generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -172,4 +172,5 @@ module_exit(ghash_mod_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("GHASH Message Digest Algorithm");
-MODULE_ALIAS("ghash");
+MODULE_ALIAS_CRYPTO("ghash");
+MODULE_ALIAS_CRYPTO("ghash-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/hmac.c linux-libre-3.10.67-gnu/crypto/hmac.c
--- linux-libre-3.10.66-gnu/crypto/hmac.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/hmac.c	2015-01-29 20:42:36.000000000 -0500
@@ -271,3 +271,4 @@ module_exit(hmac_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("HMAC hash algorithm");
+MODULE_ALIAS_CRYPTO("hmac");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/khazad.c linux-libre-3.10.67-gnu/crypto/khazad.c
--- linux-libre-3.10.66-gnu/crypto/khazad.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/khazad.c	2015-01-29 20:42:36.000000000 -0500
@@ -880,3 +880,4 @@ module_exit(khazad_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Khazad Cryptographic Algorithm");
+MODULE_ALIAS_CRYPTO("khazad");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/krng.c linux-libre-3.10.67-gnu/crypto/krng.c
--- linux-libre-3.10.66-gnu/crypto/krng.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/krng.c	2015-01-29 20:42:36.000000000 -0500
@@ -62,4 +62,5 @@ module_exit(krng_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Kernel Random Number Generator");
-MODULE_ALIAS("stdrng");
+MODULE_ALIAS_CRYPTO("stdrng");
+MODULE_ALIAS_CRYPTO("krng");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/lrw.c linux-libre-3.10.67-gnu/crypto/lrw.c
--- linux-libre-3.10.66-gnu/crypto/lrw.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/lrw.c	2015-01-29 20:42:36.000000000 -0500
@@ -400,3 +400,4 @@ module_exit(crypto_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("LRW block cipher mode");
+MODULE_ALIAS_CRYPTO("lrw");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/lzo.c linux-libre-3.10.67-gnu/crypto/lzo.c
--- linux-libre-3.10.66-gnu/crypto/lzo.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/lzo.c	2015-01-29 20:42:36.000000000 -0500
@@ -103,3 +103,4 @@ module_exit(lzo_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("LZO Compression Algorithm");
+MODULE_ALIAS_CRYPTO("lzo");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/md4.c linux-libre-3.10.67-gnu/crypto/md4.c
--- linux-libre-3.10.66-gnu/crypto/md4.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/md4.c	2015-01-29 20:42:36.000000000 -0500
@@ -255,4 +255,4 @@ module_exit(md4_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("MD4 Message Digest Algorithm");
-
+MODULE_ALIAS_CRYPTO("md4");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/md5.c linux-libre-3.10.67-gnu/crypto/md5.c
--- linux-libre-3.10.66-gnu/crypto/md5.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/md5.c	2015-01-29 20:42:36.000000000 -0500
@@ -168,3 +168,4 @@ module_exit(md5_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("MD5 Message Digest Algorithm");
+MODULE_ALIAS_CRYPTO("md5");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/michael_mic.c linux-libre-3.10.67-gnu/crypto/michael_mic.c
--- linux-libre-3.10.66-gnu/crypto/michael_mic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/michael_mic.c	2015-01-29 20:42:36.000000000 -0500
@@ -184,3 +184,4 @@ module_exit(michael_mic_exit);
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("Michael MIC");
 MODULE_AUTHOR("Jouni Malinen <j@w1.fi>");
+MODULE_ALIAS_CRYPTO("michael_mic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/pcbc.c linux-libre-3.10.67-gnu/crypto/pcbc.c
--- linux-libre-3.10.66-gnu/crypto/pcbc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/pcbc.c	2015-01-29 20:42:36.000000000 -0500
@@ -295,3 +295,4 @@ module_exit(crypto_pcbc_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("PCBC block cipher algorithm");
+MODULE_ALIAS_CRYPTO("pcbc");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/pcrypt.c linux-libre-3.10.67-gnu/crypto/pcrypt.c
--- linux-libre-3.10.66-gnu/crypto/pcrypt.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/pcrypt.c	2015-01-29 20:42:36.000000000 -0500
@@ -565,3 +565,4 @@ module_exit(pcrypt_exit);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Steffen Klassert <steffen.klassert@secunet.com>");
 MODULE_DESCRIPTION("Parallel crypto wrapper");
+MODULE_ALIAS_CRYPTO("pcrypt");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/rmd128.c linux-libre-3.10.67-gnu/crypto/rmd128.c
--- linux-libre-3.10.66-gnu/crypto/rmd128.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/rmd128.c	2015-01-29 20:42:36.000000000 -0500
@@ -327,3 +327,4 @@ module_exit(rmd128_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>");
 MODULE_DESCRIPTION("RIPEMD-128 Message Digest");
+MODULE_ALIAS_CRYPTO("rmd128");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/rmd160.c linux-libre-3.10.67-gnu/crypto/rmd160.c
--- linux-libre-3.10.66-gnu/crypto/rmd160.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/rmd160.c	2015-01-29 20:42:36.000000000 -0500
@@ -371,3 +371,4 @@ module_exit(rmd160_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>");
 MODULE_DESCRIPTION("RIPEMD-160 Message Digest");
+MODULE_ALIAS_CRYPTO("rmd160");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/rmd256.c linux-libre-3.10.67-gnu/crypto/rmd256.c
--- linux-libre-3.10.66-gnu/crypto/rmd256.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/rmd256.c	2015-01-29 20:42:36.000000000 -0500
@@ -346,3 +346,4 @@ module_exit(rmd256_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>");
 MODULE_DESCRIPTION("RIPEMD-256 Message Digest");
+MODULE_ALIAS_CRYPTO("rmd256");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/rmd320.c linux-libre-3.10.67-gnu/crypto/rmd320.c
--- linux-libre-3.10.66-gnu/crypto/rmd320.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/rmd320.c	2015-01-29 20:42:36.000000000 -0500
@@ -395,3 +395,4 @@ module_exit(rmd320_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Adrian-Ken Rueegsegger <ken@codelabs.ch>");
 MODULE_DESCRIPTION("RIPEMD-320 Message Digest");
+MODULE_ALIAS_CRYPTO("rmd320");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/salsa20_generic.c linux-libre-3.10.67-gnu/crypto/salsa20_generic.c
--- linux-libre-3.10.66-gnu/crypto/salsa20_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/salsa20_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -248,4 +248,5 @@ module_exit(salsa20_generic_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm");
-MODULE_ALIAS("salsa20");
+MODULE_ALIAS_CRYPTO("salsa20");
+MODULE_ALIAS_CRYPTO("salsa20-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/seed.c linux-libre-3.10.67-gnu/crypto/seed.c
--- linux-libre-3.10.66-gnu/crypto/seed.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/seed.c	2015-01-29 20:42:36.000000000 -0500
@@ -476,3 +476,4 @@ module_exit(seed_fini);
 MODULE_DESCRIPTION("SEED Cipher Algorithm");
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Hye-Shik Chang <perky@FreeBSD.org>, Kim Hyun <hkim@kisa.or.kr>");
+MODULE_ALIAS_CRYPTO("seed");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/seqiv.c linux-libre-3.10.67-gnu/crypto/seqiv.c
--- linux-libre-3.10.66-gnu/crypto/seqiv.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/seqiv.c	2015-01-29 20:42:36.000000000 -0500
@@ -362,3 +362,4 @@ module_exit(seqiv_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Sequence Number IV Generator");
+MODULE_ALIAS_CRYPTO("seqiv");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/serpent_generic.c linux-libre-3.10.67-gnu/crypto/serpent_generic.c
--- linux-libre-3.10.66-gnu/crypto/serpent_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/serpent_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -665,5 +665,6 @@ module_exit(serpent_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Serpent and tnepres (kerneli compatible serpent reversed) Cipher Algorithm");
 MODULE_AUTHOR("Dag Arne Osvik <osvik@ii.uib.no>");
-MODULE_ALIAS("tnepres");
-MODULE_ALIAS("serpent");
+MODULE_ALIAS_CRYPTO("tnepres");
+MODULE_ALIAS_CRYPTO("serpent");
+MODULE_ALIAS_CRYPTO("serpent-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/sha1_generic.c linux-libre-3.10.67-gnu/crypto/sha1_generic.c
--- linux-libre-3.10.66-gnu/crypto/sha1_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/sha1_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -153,4 +153,5 @@ module_exit(sha1_generic_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");
 
-MODULE_ALIAS("sha1");
+MODULE_ALIAS_CRYPTO("sha1");
+MODULE_ALIAS_CRYPTO("sha1-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/sha256_generic.c linux-libre-3.10.67-gnu/crypto/sha256_generic.c
--- linux-libre-3.10.66-gnu/crypto/sha256_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/sha256_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -384,5 +384,7 @@ module_exit(sha256_generic_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA-224 and SHA-256 Secure Hash Algorithm");
 
-MODULE_ALIAS("sha224");
-MODULE_ALIAS("sha256");
+MODULE_ALIAS_CRYPTO("sha224");
+MODULE_ALIAS_CRYPTO("sha224-generic");
+MODULE_ALIAS_CRYPTO("sha256");
+MODULE_ALIAS_CRYPTO("sha256-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/sha512_generic.c linux-libre-3.10.67-gnu/crypto/sha512_generic.c
--- linux-libre-3.10.66-gnu/crypto/sha512_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/sha512_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -285,5 +285,7 @@ module_exit(sha512_generic_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SHA-512 and SHA-384 Secure Hash Algorithms");
 
-MODULE_ALIAS("sha384");
-MODULE_ALIAS("sha512");
+MODULE_ALIAS_CRYPTO("sha384");
+MODULE_ALIAS_CRYPTO("sha384-generic");
+MODULE_ALIAS_CRYPTO("sha512");
+MODULE_ALIAS_CRYPTO("sha512-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/tea.c linux-libre-3.10.67-gnu/crypto/tea.c
--- linux-libre-3.10.66-gnu/crypto/tea.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/tea.c	2015-01-29 20:42:36.000000000 -0500
@@ -270,8 +270,9 @@ static void __exit tea_mod_fini(void)
 	crypto_unregister_algs(tea_algs, ARRAY_SIZE(tea_algs));
 }
 
-MODULE_ALIAS("xtea");
-MODULE_ALIAS("xeta");
+MODULE_ALIAS_CRYPTO("tea");
+MODULE_ALIAS_CRYPTO("xtea");
+MODULE_ALIAS_CRYPTO("xeta");
 
 module_init(tea_mod_init);
 module_exit(tea_mod_fini);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/tgr192.c linux-libre-3.10.67-gnu/crypto/tgr192.c
--- linux-libre-3.10.66-gnu/crypto/tgr192.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/tgr192.c	2015-01-29 20:42:36.000000000 -0500
@@ -676,8 +676,9 @@ static void __exit tgr192_mod_fini(void)
 	crypto_unregister_shashes(tgr_algs, ARRAY_SIZE(tgr_algs));
 }
 
-MODULE_ALIAS("tgr160");
-MODULE_ALIAS("tgr128");
+MODULE_ALIAS_CRYPTO("tgr192");
+MODULE_ALIAS_CRYPTO("tgr160");
+MODULE_ALIAS_CRYPTO("tgr128");
 
 module_init(tgr192_mod_init);
 module_exit(tgr192_mod_fini);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/twofish_generic.c linux-libre-3.10.67-gnu/crypto/twofish_generic.c
--- linux-libre-3.10.66-gnu/crypto/twofish_generic.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/twofish_generic.c	2015-01-29 20:42:36.000000000 -0500
@@ -211,4 +211,5 @@ module_exit(twofish_mod_fini);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION ("Twofish Cipher Algorithm");
-MODULE_ALIAS("twofish");
+MODULE_ALIAS_CRYPTO("twofish");
+MODULE_ALIAS_CRYPTO("twofish-generic");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/vmac.c linux-libre-3.10.67-gnu/crypto/vmac.c
--- linux-libre-3.10.66-gnu/crypto/vmac.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/vmac.c	2015-01-29 20:42:36.000000000 -0500
@@ -713,3 +713,4 @@ module_exit(vmac_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("VMAC hash algorithm");
+MODULE_ALIAS_CRYPTO("vmac");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/wp512.c linux-libre-3.10.67-gnu/crypto/wp512.c
--- linux-libre-3.10.66-gnu/crypto/wp512.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/wp512.c	2015-01-29 20:42:36.000000000 -0500
@@ -1167,8 +1167,9 @@ static void __exit wp512_mod_fini(void)
 	crypto_unregister_shashes(wp_algs, ARRAY_SIZE(wp_algs));
 }
 
-MODULE_ALIAS("wp384");
-MODULE_ALIAS("wp256");
+MODULE_ALIAS_CRYPTO("wp512");
+MODULE_ALIAS_CRYPTO("wp384");
+MODULE_ALIAS_CRYPTO("wp256");
 
 module_init(wp512_mod_init);
 module_exit(wp512_mod_fini);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/xcbc.c linux-libre-3.10.67-gnu/crypto/xcbc.c
--- linux-libre-3.10.66-gnu/crypto/xcbc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/xcbc.c	2015-01-29 20:42:36.000000000 -0500
@@ -286,3 +286,4 @@ module_exit(crypto_xcbc_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("XCBC keyed hash algorithm");
+MODULE_ALIAS_CRYPTO("xcbc");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/xts.c linux-libre-3.10.67-gnu/crypto/xts.c
--- linux-libre-3.10.66-gnu/crypto/xts.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/xts.c	2015-01-29 20:42:36.000000000 -0500
@@ -362,3 +362,4 @@ module_exit(crypto_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("XTS block cipher mode");
+MODULE_ALIAS_CRYPTO("xts");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/crypto/zlib.c linux-libre-3.10.67-gnu/crypto/zlib.c
--- linux-libre-3.10.66-gnu/crypto/zlib.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/crypto/zlib.c	2015-01-29 20:42:36.000000000 -0500
@@ -378,3 +378,4 @@ module_exit(zlib_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Zlib Compression Algorithm");
 MODULE_AUTHOR("Sony Corporation");
+MODULE_ALIAS_CRYPTO("zlib");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/ata/libata-sff.c linux-libre-3.10.67-gnu/drivers/ata/libata-sff.c
--- linux-libre-3.10.66-gnu/drivers/ata/libata-sff.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/ata/libata-sff.c	2015-01-29 20:42:36.000000000 -0500
@@ -1333,7 +1333,19 @@ void ata_sff_flush_pio_task(struct ata_p
 	DPRINTK("ENTER\n");
 
 	cancel_delayed_work_sync(&ap->sff_pio_task);
+
+	/*
+	 * We wanna reset the HSM state to IDLE.  If we do so without
+	 * grabbing the port lock, critical sections protected by it which
+	 * expect the HSM state to stay stable may get surprised.  For
+	 * example, we may set IDLE in between the time
+	 * __ata_sff_port_intr() checks for HSM_ST_IDLE and before it calls
+	 * ata_sff_hsm_move() causing ata_sff_hsm_move() to BUG().
+	 */
+	spin_lock_irq(ap->lock);
 	ap->hsm_task_state = HSM_ST_IDLE;
+	spin_unlock_irq(ap->lock);
+
 	ap->sff_pio_task_link = NULL;
 
 	if (ata_msg_ctl(ap))
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/ata/sata_dwc_460ex.c linux-libre-3.10.67-gnu/drivers/ata/sata_dwc_460ex.c
--- linux-libre-3.10.66-gnu/drivers/ata/sata_dwc_460ex.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/ata/sata_dwc_460ex.c	2015-01-29 20:42:36.000000000 -0500
@@ -797,7 +797,7 @@ static int dma_dwc_init(struct sata_dwc_
 	if (err) {
 		dev_err(host_pvt.dwc_dev, "%s: dma_request_interrupts returns"
 			" %d\n", __func__, err);
-		goto error_out;
+		return err;
 	}
 
 	/* Enabe DMA */
@@ -808,11 +808,6 @@ static int dma_dwc_init(struct sata_dwc_
 		sata_dma_regs);
 
 	return 0;
-
-error_out:
-	dma_dwc_exit(hsdev);
-
-	return err;
 }
 
 static int sata_dwc_scr_read(struct ata_link *link, unsigned int scr, u32 *val)
@@ -1662,7 +1657,7 @@ static int sata_dwc_probe(struct platfor
 	char *ver = (char *)&versionr;
 	u8 *base = NULL;
 	int err = 0;
-	int irq, rc;
+	int irq;
 	struct ata_host *host;
 	struct ata_port_info pi = sata_dwc_port_info[0];
 	const struct ata_port_info *ppi[] = { &pi, NULL };
@@ -1725,7 +1720,7 @@ static int sata_dwc_probe(struct platfor
 	if (irq == NO_IRQ) {
 		dev_err(&ofdev->dev, "no SATA DMA irq\n");
 		err = -ENODEV;
-		goto error_out;
+		goto error_iomap;
 	}
 
 	/* Get physical SATA DMA register base address */
@@ -1734,14 +1729,16 @@ static int sata_dwc_probe(struct platfor
 		dev_err(&ofdev->dev, "ioremap failed for AHBDMA register"
 			" address\n");
 		err = -ENODEV;
-		goto error_out;
+		goto error_iomap;
 	}
 
 	/* Save dev for later use in dev_xxx() routines */
 	host_pvt.dwc_dev = &ofdev->dev;
 
 	/* Initialize AHB DMAC */
-	dma_dwc_init(hsdev, irq);
+	err = dma_dwc_init(hsdev, irq);
+	if (err)
+		goto error_dma_iomap;
 
 	/* Enable SATA Interrupts */
 	sata_dwc_enable_interrupts(hsdev);
@@ -1759,9 +1756,8 @@ static int sata_dwc_probe(struct platfor
 	 * device discovery process, invoking our port_start() handler &
 	 * error_handler() to execute a dummy Softreset EH session
 	 */
-	rc = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht);
-
-	if (rc != 0)
+	err = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht);
+	if (err)
 		dev_err(&ofdev->dev, "failed to activate host");
 
 	dev_set_drvdata(&ofdev->dev, host);
@@ -1770,7 +1766,8 @@ static int sata_dwc_probe(struct platfor
 error_out:
 	/* Free SATA DMA resources */
 	dma_dwc_exit(hsdev);
-
+error_dma_iomap:
+	iounmap((void __iomem *)host_pvt.sata_dma_regs);
 error_iomap:
 	iounmap(base);
 error_kmalloc:
@@ -1791,6 +1788,7 @@ static int sata_dwc_remove(struct platfo
 	/* Free SATA DMA resources */
 	dma_dwc_exit(hsdev);
 
+	iounmap((void __iomem *)host_pvt.sata_dma_regs);
 	iounmap(hsdev->reg_base);
 	kfree(hsdev);
 	kfree(host);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/block/drbd/drbd_req.c linux-libre-3.10.67-gnu/drivers/block/drbd/drbd_req.c
--- linux-libre-3.10.66-gnu/drivers/block/drbd/drbd_req.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/block/drbd/drbd_req.c	2015-01-29 20:42:36.000000000 -0500
@@ -1309,6 +1309,7 @@ int drbd_merge_bvec(struct request_queue
 		struct request_queue * const b =
 			mdev->ldev->backing_bdev->bd_disk->queue;
 		if (b->merge_bvec_fn) {
+			bvm->bi_bdev = mdev->ldev->backing_bdev;
 			backing_limit = b->merge_bvec_fn(b, bvm, bvec);
 			limit = min(limit, backing_limit);
 		}
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/bus/mvebu-mbus.c linux-libre-3.10.67-gnu/drivers/bus/mvebu-mbus.c
--- linux-libre-3.10.66-gnu/drivers/bus/mvebu-mbus.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/bus/mvebu-mbus.c	2015-01-29 20:42:36.000000000 -0500
@@ -209,12 +209,25 @@ static void mvebu_mbus_disable_window(st
 }
 
 /* Checks whether the given window number is available */
+
+/* On Armada XP, 375 and 38x the MBus window 13 has the remap
+ * capability, like windows 0 to 7. However, the mvebu-mbus driver
+ * isn't currently taking into account this special case, which means
+ * that when window 13 is actually used, the remap registers are left
+ * to 0, making the device using this MBus window unavailable. The
+ * quick fix for stable is to not use window 13. A follow up patch
+ * will correctly handle this window.
+*/
 static int mvebu_mbus_window_is_free(struct mvebu_mbus_state *mbus,
 				     const int win)
 {
 	void __iomem *addr = mbus->mbuswins_base +
 		mbus->soc->win_cfg_offset(win);
 	u32 ctrl = readl(addr + WIN_CTRL_OFF);
+
+	if (win == 13)
+		return false;
+
 	return !(ctrl & WIN_CTRL_ENABLE);
 }
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/clocksource/exynos_mct.c linux-libre-3.10.67-gnu/drivers/clocksource/exynos_mct.c
--- linux-libre-3.10.66-gnu/drivers/clocksource/exynos_mct.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/clocksource/exynos_mct.c	2015-01-29 20:42:36.000000000 -0500
@@ -94,8 +94,8 @@ static void exynos4_mct_write(unsigned i
 	__raw_writel(value, reg_base + offset);
 
 	if (likely(offset >= EXYNOS4_MCT_L_BASE(0))) {
-		stat_addr = (offset & ~EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET;
-		switch (offset & EXYNOS4_MCT_L_MASK) {
+		stat_addr = (offset & EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET;
+		switch (offset & ~EXYNOS4_MCT_L_MASK) {
 		case MCT_L_TCON_OFFSET:
 			mask = 1 << 3;		/* L_TCON write status */
 			break;
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/crypto/padlock-aes.c linux-libre-3.10.67-gnu/drivers/crypto/padlock-aes.c
--- linux-libre-3.10.66-gnu/drivers/crypto/padlock-aes.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/crypto/padlock-aes.c	2015-01-29 20:42:36.000000000 -0500
@@ -563,4 +563,4 @@ MODULE_DESCRIPTION("VIA PadLock AES algo
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Michal Ludvig");
 
-MODULE_ALIAS("aes");
+MODULE_ALIAS_CRYPTO("aes");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/crypto/padlock-sha.c linux-libre-3.10.67-gnu/drivers/crypto/padlock-sha.c
--- linux-libre-3.10.66-gnu/drivers/crypto/padlock-sha.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/crypto/padlock-sha.c	2015-01-29 20:42:36.000000000 -0500
@@ -593,7 +593,7 @@ MODULE_DESCRIPTION("VIA PadLock SHA1/SHA
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Michal Ludvig");
 
-MODULE_ALIAS("sha1-all");
-MODULE_ALIAS("sha256-all");
-MODULE_ALIAS("sha1-padlock");
-MODULE_ALIAS("sha256-padlock");
+MODULE_ALIAS_CRYPTO("sha1-all");
+MODULE_ALIAS_CRYPTO("sha256-all");
+MODULE_ALIAS_CRYPTO("sha1-padlock");
+MODULE_ALIAS_CRYPTO("sha256-padlock");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/crypto/ux500/cryp/cryp_core.c linux-libre-3.10.67-gnu/drivers/crypto/ux500/cryp/cryp_core.c
--- linux-libre-3.10.66-gnu/drivers/crypto/ux500/cryp/cryp_core.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/crypto/ux500/cryp/cryp_core.c	2015-01-29 20:42:36.000000000 -0500
@@ -1775,7 +1775,7 @@ module_exit(ux500_cryp_mod_fini);
 module_param(cryp_mode, int, 0);
 
 MODULE_DESCRIPTION("Driver for ST-Ericsson UX500 CRYP crypto engine.");
-MODULE_ALIAS("aes-all");
-MODULE_ALIAS("des-all");
+MODULE_ALIAS_CRYPTO("aes-all");
+MODULE_ALIAS_CRYPTO("des-all");
 
 MODULE_LICENSE("GPL");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/crypto/ux500/hash/hash_core.c linux-libre-3.10.67-gnu/drivers/crypto/ux500/hash/hash_core.c
--- linux-libre-3.10.66-gnu/drivers/crypto/ux500/hash/hash_core.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/crypto/ux500/hash/hash_core.c	2015-01-29 20:42:36.000000000 -0500
@@ -1998,7 +1998,7 @@ module_exit(ux500_hash_mod_fini);
 MODULE_DESCRIPTION("Driver for ST-Ericsson UX500 HASH engine.");
 MODULE_LICENSE("GPL");
 
-MODULE_ALIAS("sha1-all");
-MODULE_ALIAS("sha256-all");
-MODULE_ALIAS("hmac-sha1-all");
-MODULE_ALIAS("hmac-sha256-all");
+MODULE_ALIAS_CRYPTO("sha1-all");
+MODULE_ALIAS_CRYPTO("sha256-all");
+MODULE_ALIAS_CRYPTO("hmac-sha1-all");
+MODULE_ALIAS_CRYPTO("hmac-sha256-all");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/gpio/gpiolib.c linux-libre-3.10.67-gnu/drivers/gpio/gpiolib.c
--- linux-libre-3.10.66-gnu/drivers/gpio/gpiolib.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/gpio/gpiolib.c	2015-01-29 20:42:36.000000000 -0500
@@ -362,7 +362,7 @@ static ssize_t gpio_value_store(struct d
 	return status;
 }
 
-static const DEVICE_ATTR(value, 0644,
+static DEVICE_ATTR(value, 0644,
 		gpio_value_show, gpio_value_store);
 
 static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
@@ -580,17 +580,17 @@ static ssize_t gpio_active_low_store(str
 	return status ? : size;
 }
 
-static const DEVICE_ATTR(active_low, 0644,
+static DEVICE_ATTR(active_low, 0644,
 		gpio_active_low_show, gpio_active_low_store);
 
-static const struct attribute *gpio_attrs[] = {
+static struct attribute *gpio_attrs[] = {
 	&dev_attr_value.attr,
 	&dev_attr_active_low.attr,
 	NULL,
 };
 
 static const struct attribute_group gpio_attr_group = {
-	.attrs = (struct attribute **) gpio_attrs,
+	.attrs = gpio_attrs,
 };
 
 /*
@@ -627,7 +627,7 @@ static ssize_t chip_ngpio_show(struct de
 }
 static DEVICE_ATTR(ngpio, 0444, chip_ngpio_show, NULL);
 
-static const struct attribute *gpiochip_attrs[] = {
+static struct attribute *gpiochip_attrs[] = {
 	&dev_attr_base.attr,
 	&dev_attr_label.attr,
 	&dev_attr_ngpio.attr,
@@ -635,7 +635,7 @@ static const struct attribute *gpiochip_
 };
 
 static const struct attribute_group gpiochip_attr_group = {
-	.attrs = (struct attribute **) gpiochip_attrs,
+	.attrs = gpiochip_attrs,
 };
 
 /*
@@ -806,20 +806,24 @@ static int gpiod_export(struct gpio_desc
 	if (direction_may_change) {
 		status = device_create_file(dev, &dev_attr_direction);
 		if (status)
-			goto fail_unregister_device;
+			goto fail_remove_attr_group;
 	}
 
 	if (gpiod_to_irq(desc) >= 0 && (direction_may_change ||
 				       !test_bit(FLAG_IS_OUT, &desc->flags))) {
 		status = device_create_file(dev, &dev_attr_edge);
 		if (status)
-			goto fail_unregister_device;
+			goto fail_remove_attr_direction;
 	}
 
 	set_bit(FLAG_EXPORT, &desc->flags);
 	mutex_unlock(&sysfs_lock);
 	return 0;
 
+fail_remove_attr_direction:
+	device_remove_file(dev, &dev_attr_direction);
+fail_remove_attr_group:
+	sysfs_remove_group(&dev->kobj, &gpio_attr_group);
 fail_unregister_device:
 	device_unregister(dev);
 fail_unlock:
@@ -971,6 +975,9 @@ static void gpiod_unexport(struct gpio_d
 	mutex_unlock(&sysfs_lock);
 
 	if (dev) {
+		device_remove_file(dev, &dev_attr_edge);
+		device_remove_file(dev, &dev_attr_direction);
+		sysfs_remove_group(&dev->kobj, &gpio_attr_group);
 		device_unregister(dev);
 		put_device(dev);
 	}
@@ -1036,6 +1043,7 @@ static void gpiochip_unexport(struct gpi
 	mutex_lock(&sysfs_lock);
 	dev = class_find_device(&gpio_class, NULL, chip, match_export);
 	if (dev) {
+		sysfs_remove_group(&dev->kobj, &gpiochip_attr_group);
 		put_device(dev);
 		device_unregister(dev);
 		chip->exported = 0;
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/gpu/drm/i915/i915_gem.c linux-libre-3.10.67-gnu/drivers/gpu/drm/i915/i915_gem.c
--- linux-libre-3.10.66-gnu/drivers/gpu/drm/i915/i915_gem.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/gpu/drm/i915/i915_gem.c	2015-01-29 20:42:36.000000000 -0500
@@ -4449,7 +4449,7 @@ static bool mutex_is_locked_by(struct mu
 	if (!mutex_is_locked(mutex))
 		return false;
 
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)
+#if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES)
 	return mutex->owner == task;
 #else
 	/* Since UP may be pre-empted, we cannot assume that we own the lock */
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/md/dm-cache-metadata.c linux-libre-3.10.67-gnu/drivers/md/dm-cache-metadata.c
--- linux-libre-3.10.66-gnu/drivers/md/dm-cache-metadata.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/md/dm-cache-metadata.c	2015-01-29 20:42:36.000000000 -0500
@@ -88,6 +88,9 @@ struct cache_disk_superblock {
 } __packed;
 
 struct dm_cache_metadata {
+	atomic_t ref_count;
+	struct list_head list;
+
 	struct block_device *bdev;
 	struct dm_block_manager *bm;
 	struct dm_space_map *metadata_sm;
@@ -634,10 +637,10 @@ static void unpack_value(__le64 value_le
 
 /*----------------------------------------------------------------*/
 
-struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev,
-						 sector_t data_block_size,
-						 bool may_format_device,
-						 size_t policy_hint_size)
+static struct dm_cache_metadata *metadata_open(struct block_device *bdev,
+					       sector_t data_block_size,
+					       bool may_format_device,
+					       size_t policy_hint_size)
 {
 	int r;
 	struct dm_cache_metadata *cmd;
@@ -648,6 +651,7 @@ struct dm_cache_metadata *dm_cache_metad
 		return NULL;
 	}
 
+	atomic_set(&cmd->ref_count, 1);
 	init_rwsem(&cmd->root_lock);
 	cmd->bdev = bdev;
 	cmd->data_block_size = data_block_size;
@@ -670,10 +674,95 @@ struct dm_cache_metadata *dm_cache_metad
 	return cmd;
 }
 
+/*
+ * We keep a little list of ref counted metadata objects to prevent two
+ * different target instances creating separate bufio instances.  This is
+ * an issue if a table is reloaded before the suspend.
+ */
+static DEFINE_MUTEX(table_lock);
+static LIST_HEAD(table);
+
+static struct dm_cache_metadata *lookup(struct block_device *bdev)
+{
+	struct dm_cache_metadata *cmd;
+
+	list_for_each_entry(cmd, &table, list)
+		if (cmd->bdev == bdev) {
+			atomic_inc(&cmd->ref_count);
+			return cmd;
+		}
+
+	return NULL;
+}
+
+static struct dm_cache_metadata *lookup_or_open(struct block_device *bdev,
+						sector_t data_block_size,
+						bool may_format_device,
+						size_t policy_hint_size)
+{
+	struct dm_cache_metadata *cmd, *cmd2;
+
+	mutex_lock(&table_lock);
+	cmd = lookup(bdev);
+	mutex_unlock(&table_lock);
+
+	if (cmd)
+		return cmd;
+
+	cmd = metadata_open(bdev, data_block_size, may_format_device, policy_hint_size);
+	if (cmd) {
+		mutex_lock(&table_lock);
+		cmd2 = lookup(bdev);
+		if (cmd2) {
+			mutex_unlock(&table_lock);
+			__destroy_persistent_data_objects(cmd);
+			kfree(cmd);
+			return cmd2;
+		}
+		list_add(&cmd->list, &table);
+		mutex_unlock(&table_lock);
+	}
+
+	return cmd;
+}
+
+static bool same_params(struct dm_cache_metadata *cmd, sector_t data_block_size)
+{
+	if (cmd->data_block_size != data_block_size) {
+		DMERR("data_block_size (%llu) different from that in metadata (%llu)\n",
+		      (unsigned long long) data_block_size,
+		      (unsigned long long) cmd->data_block_size);
+		return false;
+	}
+
+	return true;
+}
+
+struct dm_cache_metadata *dm_cache_metadata_open(struct block_device *bdev,
+						 sector_t data_block_size,
+						 bool may_format_device,
+						 size_t policy_hint_size)
+{
+	struct dm_cache_metadata *cmd = lookup_or_open(bdev, data_block_size,
+						       may_format_device, policy_hint_size);
+	if (cmd && !same_params(cmd, data_block_size)) {
+		dm_cache_metadata_close(cmd);
+		return NULL;
+	}
+
+	return cmd;
+}
+
 void dm_cache_metadata_close(struct dm_cache_metadata *cmd)
 {
-	__destroy_persistent_data_objects(cmd);
-	kfree(cmd);
+	if (atomic_dec_and_test(&cmd->ref_count)) {
+		mutex_lock(&table_lock);
+		list_del(&cmd->list);
+		mutex_unlock(&table_lock);
+
+		__destroy_persistent_data_objects(cmd);
+		kfree(cmd);
+	}
 }
 
 int dm_cache_resize(struct dm_cache_metadata *cmd, dm_cblock_t new_cache_size)
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/md/raid5.c linux-libre-3.10.67-gnu/drivers/md/raid5.c
--- linux-libre-3.10.66-gnu/drivers/md/raid5.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/md/raid5.c	2015-01-29 20:42:36.000000000 -0500
@@ -2678,7 +2678,8 @@ static int fetch_block(struct stripe_hea
 	     (s->failed >= 2 && fdev[1]->toread) ||
 	     (sh->raid_conf->level <= 5 && s->failed && fdev[0]->towrite &&
 	      !test_bit(R5_OVERWRITE, &fdev[0]->flags)) ||
-	     (sh->raid_conf->level == 6 && s->failed && s->to_write))) {
+	     ((sh->raid_conf->level == 6 || sh->sector >= sh->raid_conf->mddev->recovery_cp)
+	      && s->failed && s->to_write))) {
 		/* we would like to get this block, possibly by computing it,
 		 * otherwise read it if the backing disk is insync
 		 */
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/net/can/dev.c linux-libre-3.10.67-gnu/drivers/net/can/dev.c
--- linux-libre-3.10.66-gnu/drivers/net/can/dev.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/net/can/dev.c	2015-01-29 20:42:36.000000000 -0500
@@ -643,10 +643,14 @@ static int can_changelink(struct net_dev
 		if (dev->flags & IFF_UP)
 			return -EBUSY;
 		cm = nla_data(data[IFLA_CAN_CTRLMODE]);
-		if (cm->flags & ~priv->ctrlmode_supported)
+
+		/* check whether changed bits are allowed to be modified */
+		if (cm->mask & ~priv->ctrlmode_supported)
 			return -EOPNOTSUPP;
+
+		/* clear bits to be modified and copy the flag values */
 		priv->ctrlmode &= ~cm->mask;
-		priv->ctrlmode |= cm->flags;
+		priv->ctrlmode |= (cm->flags & cm->mask);
 	}
 
 	if (data[IFLA_CAN_BITTIMING]) {
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/pinctrl/core.c linux-libre-3.10.67-gnu/drivers/pinctrl/core.c
--- linux-libre-3.10.66-gnu/drivers/pinctrl/core.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/pinctrl/core.c	2015-01-29 20:42:36.000000000 -0500
@@ -1693,14 +1693,15 @@ void pinctrl_unregister(struct pinctrl_d
 	if (pctldev == NULL)
 		return;
 
-	mutex_lock(&pinctrldev_list_mutex);
 	mutex_lock(&pctldev->mutex);
-
 	pinctrl_remove_device_debugfs(pctldev);
+	mutex_unlock(&pctldev->mutex);
 
 	if (!IS_ERR(pctldev->p))
 		pinctrl_put(pctldev->p);
 
+	mutex_lock(&pinctrldev_list_mutex);
+	mutex_lock(&pctldev->mutex);
 	/* TODO: check that no pinmuxes are still active? */
 	list_del(&pctldev->node);
 	/* Destroy descriptor tree */
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/s390/crypto/ap_bus.c linux-libre-3.10.67-gnu/drivers/s390/crypto/ap_bus.c
--- linux-libre-3.10.66-gnu/drivers/s390/crypto/ap_bus.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/s390/crypto/ap_bus.c	2015-01-29 20:42:36.000000000 -0500
@@ -44,6 +44,7 @@
 #include <linux/hrtimer.h>
 #include <linux/ktime.h>
 #include <asm/facility.h>
+#include <linux/crypto.h>
 
 #include "ap_bus.h"
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/scsi/ipr.c linux-libre-3.10.67-gnu/drivers/scsi/ipr.c
--- linux-libre-3.10.66-gnu/drivers/scsi/ipr.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/scsi/ipr.c	2015-01-29 20:42:36.000000000 -0500
@@ -645,6 +645,7 @@ static void ipr_init_ipr_cmnd(struct ipr
 	ipr_reinit_ipr_cmnd(ipr_cmd);
 	ipr_cmd->u.scratch = 0;
 	ipr_cmd->sibling = NULL;
+	ipr_cmd->eh_comp = NULL;
 	ipr_cmd->fast_done = fast_done;
 	init_timer(&ipr_cmd->timer);
 }
@@ -810,6 +811,8 @@ static void ipr_scsi_eh_done(struct ipr_
 
 	scsi_dma_unmap(ipr_cmd->scsi_cmd);
 	scsi_cmd->scsi_done(scsi_cmd);
+	if (ipr_cmd->eh_comp)
+		complete(ipr_cmd->eh_comp);
 	list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
 }
 
@@ -4767,6 +4770,84 @@ static int ipr_slave_alloc(struct scsi_d
 	return rc;
 }
 
+/**
+ * ipr_match_lun - Match function for specified LUN
+ * @ipr_cmd:	ipr command struct
+ * @device:		device to match (sdev)
+ *
+ * Returns:
+ *	1 if command matches sdev / 0 if command does not match sdev
+ **/
+static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device)
+{
+	if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device)
+		return 1;
+	return 0;
+}
+
+/**
+ * ipr_wait_for_ops - Wait for matching commands to complete
+ * @ipr_cmd:	ipr command struct
+ * @device:		device to match (sdev)
+ * @match:		match function to use
+ *
+ * Returns:
+ *	SUCCESS / FAILED
+ **/
+static int ipr_wait_for_ops(struct ipr_ioa_cfg *ioa_cfg, void *device,
+			    int (*match)(struct ipr_cmnd *, void *))
+{
+	struct ipr_cmnd *ipr_cmd;
+	int wait;
+	unsigned long flags;
+	struct ipr_hrr_queue *hrrq;
+	signed long timeout = IPR_ABORT_TASK_TIMEOUT;
+	DECLARE_COMPLETION_ONSTACK(comp);
+
+	ENTER;
+	do {
+		wait = 0;
+
+		for_each_hrrq(hrrq, ioa_cfg) {
+			spin_lock_irqsave(hrrq->lock, flags);
+			list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) {
+				if (match(ipr_cmd, device)) {
+					ipr_cmd->eh_comp = &comp;
+					wait++;
+				}
+			}
+			spin_unlock_irqrestore(hrrq->lock, flags);
+		}
+
+		if (wait) {
+			timeout = wait_for_completion_timeout(&comp, timeout);
+
+			if (!timeout) {
+				wait = 0;
+
+				for_each_hrrq(hrrq, ioa_cfg) {
+					spin_lock_irqsave(hrrq->lock, flags);
+					list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) {
+						if (match(ipr_cmd, device)) {
+							ipr_cmd->eh_comp = NULL;
+							wait++;
+						}
+					}
+					spin_unlock_irqrestore(hrrq->lock, flags);
+				}
+
+				if (wait)
+					dev_err(&ioa_cfg->pdev->dev, "Timed out waiting for aborted commands\n");
+				LEAVE;
+				return wait ? FAILED : SUCCESS;
+			}
+		}
+	} while (wait);
+
+	LEAVE;
+	return SUCCESS;
+}
+
 static int ipr_eh_host_reset(struct scsi_cmnd *cmd)
 {
 	struct ipr_ioa_cfg *ioa_cfg;
@@ -4985,11 +5066,17 @@ static int __ipr_eh_dev_reset(struct scs
 static int ipr_eh_dev_reset(struct scsi_cmnd *cmd)
 {
 	int rc;
+	struct ipr_ioa_cfg *ioa_cfg;
+
+	ioa_cfg = (struct ipr_ioa_cfg *) cmd->device->host->hostdata;
 
 	spin_lock_irq(cmd->device->host->host_lock);
 	rc = __ipr_eh_dev_reset(cmd);
 	spin_unlock_irq(cmd->device->host->host_lock);
 
+	if (rc == SUCCESS)
+		rc = ipr_wait_for_ops(ioa_cfg, cmd->device, ipr_match_lun);
+
 	return rc;
 }
 
@@ -5167,13 +5254,18 @@ static int ipr_eh_abort(struct scsi_cmnd
 {
 	unsigned long flags;
 	int rc;
+	struct ipr_ioa_cfg *ioa_cfg;
 
 	ENTER;
 
+	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
+
 	spin_lock_irqsave(scsi_cmd->device->host->host_lock, flags);
 	rc = ipr_cancel_op(scsi_cmd);
 	spin_unlock_irqrestore(scsi_cmd->device->host->host_lock, flags);
 
+	if (rc == SUCCESS)
+		rc = ipr_wait_for_ops(ioa_cfg, scsi_cmd->device, ipr_match_lun);
 	LEAVE;
 	return rc;
 }
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/scsi/ipr.h linux-libre-3.10.67-gnu/drivers/scsi/ipr.h
--- linux-libre-3.10.66-gnu/drivers/scsi/ipr.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/scsi/ipr.h	2015-01-29 20:42:36.000000000 -0500
@@ -1578,6 +1578,7 @@ struct ipr_cmnd {
 		struct scsi_device *sdev;
 	} u;
 
+	struct completion *eh_comp;
 	struct ipr_hrr_queue *hrrq;
 	struct ipr_ioa_cfg *ioa_cfg;
 };
diff -druNp --no-dereference linux-libre-3.10.66-gnu/drivers/xen/swiotlb-xen.c linux-libre-3.10.67-gnu/drivers/xen/swiotlb-xen.c
--- linux-libre-3.10.66-gnu/drivers/xen/swiotlb-xen.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/drivers/xen/swiotlb-xen.c	2015-01-29 20:42:36.000000000 -0500
@@ -390,7 +390,7 @@ static void xen_unmap_single(struct devi
 
 	/* NOTE: We use dev_addr here, not paddr! */
 	if (is_xen_swiotlb_buffer(dev_addr)) {
-		swiotlb_tbl_unmap_single(hwdev, dev_addr, size, dir);
+		swiotlb_tbl_unmap_single(hwdev, paddr, size, dir);
 		return;
 	}
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/fs/ext4/ext4.h linux-libre-3.10.67-gnu/fs/ext4/ext4.h
--- linux-libre-3.10.66-gnu/fs/ext4/ext4.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/fs/ext4/ext4.h	2015-01-29 20:42:36.000000000 -0500
@@ -589,6 +589,7 @@ enum {
 #define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE	0x0008
 #define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER	0x0010
 #define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER	0x0020
+#define EXT4_FREE_BLOCKS_RESERVE		0x0040
 
 /*
  * Flags used by ext4_discard_partial_page_buffers
diff -druNp --no-dereference linux-libre-3.10.66-gnu/fs/ext4/extents.c linux-libre-3.10.67-gnu/fs/ext4/extents.c
--- linux-libre-3.10.66-gnu/fs/ext4/extents.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/fs/ext4/extents.c	2015-01-29 20:42:36.000000000 -0500
@@ -1722,7 +1722,8 @@ static void ext4_ext_try_to_merge_up(han
 
 	brelse(path[1].p_bh);
 	ext4_free_blocks(handle, inode, NULL, blk, 1,
-			 EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET);
+			 EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET |
+			 EXT4_FREE_BLOCKS_RESERVE);
 }
 
 /*
diff -druNp --no-dereference linux-libre-3.10.66-gnu/fs/ext4/mballoc.c linux-libre-3.10.67-gnu/fs/ext4/mballoc.c
--- linux-libre-3.10.66-gnu/fs/ext4/mballoc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/fs/ext4/mballoc.c	2015-01-29 20:42:36.000000000 -0500
@@ -4610,6 +4610,7 @@ void ext4_free_blocks(handle_t *handle,
 	struct buffer_head *gd_bh;
 	ext4_group_t block_group;
 	struct ext4_sb_info *sbi;
+	struct ext4_inode_info *ei = EXT4_I(inode);
 	struct ext4_buddy e4b;
 	unsigned int count_clusters;
 	int err = 0;
@@ -4808,7 +4809,6 @@ do_more:
 	ext4_block_bitmap_csum_set(sb, block_group, gdp, bitmap_bh);
 	ext4_group_desc_csum_set(sb, block_group, gdp);
 	ext4_unlock_group(sb, block_group);
-	percpu_counter_add(&sbi->s_freeclusters_counter, count_clusters);
 
 	if (sbi->s_log_groups_per_flex) {
 		ext4_group_t flex_group = ext4_flex_group(sbi, block_group);
@@ -4816,10 +4816,23 @@ do_more:
 			     &sbi->s_flex_groups[flex_group].free_clusters);
 	}
 
-	ext4_mb_unload_buddy(&e4b);
-
-	if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
+	if (flags & EXT4_FREE_BLOCKS_RESERVE && ei->i_reserved_data_blocks) {
+		percpu_counter_add(&sbi->s_dirtyclusters_counter,
+				   count_clusters);
+		spin_lock(&ei->i_block_reservation_lock);
+		if (flags & EXT4_FREE_BLOCKS_METADATA)
+			ei->i_reserved_meta_blocks += count_clusters;
+		else
+			ei->i_reserved_data_blocks += count_clusters;
+		spin_unlock(&ei->i_block_reservation_lock);
+		if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
+			dquot_reclaim_block(inode,
+					EXT4_C2B(sbi, count_clusters));
+	} else if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
 		dquot_free_block(inode, EXT4_C2B(sbi, count_clusters));
+	percpu_counter_add(&sbi->s_freeclusters_counter, count_clusters);
+
+	ext4_mb_unload_buddy(&e4b);
 
 	/* We dirtied the bitmap block */
 	BUFFER_TRACE(bitmap_bh, "dirtied bitmap block");
diff -druNp --no-dereference linux-libre-3.10.66-gnu/fs/quota/dquot.c linux-libre-3.10.67-gnu/fs/quota/dquot.c
--- linux-libre-3.10.66-gnu/fs/quota/dquot.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/fs/quota/dquot.c	2015-01-29 20:42:36.000000000 -0500
@@ -1102,6 +1102,14 @@ static void dquot_claim_reserved_space(s
 	dquot->dq_dqb.dqb_rsvspace -= number;
 }
 
+static void dquot_reclaim_reserved_space(struct dquot *dquot, qsize_t number)
+{
+	if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number))
+		number = dquot->dq_dqb.dqb_curspace;
+	dquot->dq_dqb.dqb_rsvspace += number;
+	dquot->dq_dqb.dqb_curspace -= number;
+}
+
 static inline
 void dquot_free_reserved_space(struct dquot *dquot, qsize_t number)
 {
@@ -1536,6 +1544,15 @@ void inode_claim_rsv_space(struct inode
 }
 EXPORT_SYMBOL(inode_claim_rsv_space);
 
+void inode_reclaim_rsv_space(struct inode *inode, qsize_t number)
+{
+	spin_lock(&inode->i_lock);
+	*inode_reserved_space(inode) += number;
+	__inode_sub_bytes(inode, number);
+	spin_unlock(&inode->i_lock);
+}
+EXPORT_SYMBOL(inode_reclaim_rsv_space);
+
 void inode_sub_rsv_space(struct inode *inode, qsize_t number)
 {
 	spin_lock(&inode->i_lock);
@@ -1710,6 +1727,35 @@ int dquot_claim_space_nodirty(struct ino
 EXPORT_SYMBOL(dquot_claim_space_nodirty);
 
 /*
+ * Convert allocated space back to in-memory reserved quotas
+ */
+void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number)
+{
+	int cnt;
+
+	if (!dquot_active(inode)) {
+		inode_reclaim_rsv_space(inode, number);
+		return;
+	}
+
+	down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
+	spin_lock(&dq_data_lock);
+	/* Claim reserved quotas to allocated quotas */
+	for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
+		if (inode->i_dquot[cnt])
+			dquot_reclaim_reserved_space(inode->i_dquot[cnt],
+						     number);
+	}
+	/* Update inode bytes */
+	inode_reclaim_rsv_space(inode, number);
+	spin_unlock(&dq_data_lock);
+	mark_all_dquot_dirty(inode->i_dquot);
+	up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
+	return;
+}
+EXPORT_SYMBOL(dquot_reclaim_space_nodirty);
+
+/*
  * This operation can block, but only after everything is updated
  */
 void __dquot_free_space(struct inode *inode, qsize_t number, int flags)
diff -druNp --no-dereference linux-libre-3.10.66-gnu/fs/stat.c linux-libre-3.10.67-gnu/fs/stat.c
--- linux-libre-3.10.66-gnu/fs/stat.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/fs/stat.c	2015-01-29 20:42:36.000000000 -0500
@@ -447,9 +447,8 @@ void inode_add_bytes(struct inode *inode
 
 EXPORT_SYMBOL(inode_add_bytes);
 
-void inode_sub_bytes(struct inode *inode, loff_t bytes)
+void __inode_sub_bytes(struct inode *inode, loff_t bytes)
 {
-	spin_lock(&inode->i_lock);
 	inode->i_blocks -= bytes >> 9;
 	bytes &= 511;
 	if (inode->i_bytes < bytes) {
@@ -457,6 +456,14 @@ void inode_sub_bytes(struct inode *inode
 		inode->i_bytes += 512;
 	}
 	inode->i_bytes -= bytes;
+}
+
+EXPORT_SYMBOL(__inode_sub_bytes);
+
+void inode_sub_bytes(struct inode *inode, loff_t bytes)
+{
+	spin_lock(&inode->i_lock);
+	__inode_sub_bytes(inode, bytes);
 	spin_unlock(&inode->i_lock);
 }
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/include/linux/crypto.h linux-libre-3.10.67-gnu/include/linux/crypto.h
--- linux-libre-3.10.66-gnu/include/linux/crypto.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/include/linux/crypto.h	2015-01-29 20:42:36.000000000 -0500
@@ -26,6 +26,19 @@
 #include <linux/uaccess.h>
 
 /*
+ * Autoloaded crypto modules should only use a prefixed name to avoid allowing
+ * arbitrary modules to be loaded. Loading from userspace may still need the
+ * unprefixed names, so retains those aliases as well.
+ * This uses __MODULE_INFO directly instead of MODULE_ALIAS because pre-4.3
+ * gcc (e.g. avr32 toolchain) uses __LINE__ for uniqueness, and this macro
+ * expands twice on the same line. Instead, use a separate base name for the
+ * alias.
+ */
+#define MODULE_ALIAS_CRYPTO(name)	\
+		__MODULE_INFO(alias, alias_userspace, name);	\
+		__MODULE_INFO(alias, alias_crypto, "crypto-" name)
+
+/*
  * Algorithm masks and types.
  */
 #define CRYPTO_ALG_TYPE_MASK		0x0000000f
diff -druNp --no-dereference linux-libre-3.10.66-gnu/include/linux/fs.h linux-libre-3.10.67-gnu/include/linux/fs.h
--- linux-libre-3.10.66-gnu/include/linux/fs.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/include/linux/fs.h	2015-01-29 20:42:36.000000000 -0500
@@ -2489,6 +2489,7 @@ extern void generic_fillattr(struct inod
 extern int vfs_getattr(struct path *, struct kstat *);
 void __inode_add_bytes(struct inode *inode, loff_t bytes);
 void inode_add_bytes(struct inode *inode, loff_t bytes);
+void __inode_sub_bytes(struct inode *inode, loff_t bytes);
 void inode_sub_bytes(struct inode *inode, loff_t bytes);
 loff_t inode_get_bytes(struct inode *inode);
 void inode_set_bytes(struct inode *inode, loff_t bytes);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/include/linux/quotaops.h linux-libre-3.10.67-gnu/include/linux/quotaops.h
--- linux-libre-3.10.66-gnu/include/linux/quotaops.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/include/linux/quotaops.h	2015-01-29 20:42:36.000000000 -0500
@@ -41,6 +41,7 @@ void __quota_error(struct super_block *s
 void inode_add_rsv_space(struct inode *inode, qsize_t number);
 void inode_claim_rsv_space(struct inode *inode, qsize_t number);
 void inode_sub_rsv_space(struct inode *inode, qsize_t number);
+void inode_reclaim_rsv_space(struct inode *inode, qsize_t number);
 
 void dquot_initialize(struct inode *inode);
 void dquot_drop(struct inode *inode);
@@ -59,6 +60,7 @@ int dquot_alloc_inode(const struct inode
 
 int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);
 void dquot_free_inode(const struct inode *inode);
+void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number);
 
 int dquot_disable(struct super_block *sb, int type, unsigned int flags);
 /* Suspend quotas on remount RO */
@@ -238,6 +240,13 @@ static inline int dquot_claim_space_nodi
 	return 0;
 }
 
+static inline int dquot_reclaim_space_nodirty(struct inode *inode,
+					      qsize_t number)
+{
+	inode_sub_bytes(inode, number);
+	return 0;
+}
+
 static inline int dquot_disable(struct super_block *sb, int type,
 		unsigned int flags)
 {
@@ -336,6 +345,12 @@ static inline int dquot_claim_block(stru
 	return ret;
 }
 
+static inline void dquot_reclaim_block(struct inode *inode, qsize_t nr)
+{
+	dquot_reclaim_space_nodirty(inode, nr << inode->i_blkbits);
+	mark_inode_dirty_sync(inode);
+}
+
 static inline void dquot_free_space_nodirty(struct inode *inode, qsize_t nr)
 {
 	__dquot_free_space(inode, nr, 0);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/include/linux/time.h linux-libre-3.10.67-gnu/include/linux/time.h
--- linux-libre-3.10.66-gnu/include/linux/time.h	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/include/linux/time.h	2015-01-29 20:42:36.000000000 -0500
@@ -173,6 +173,19 @@ extern void getboottime(struct timespec
 extern void monotonic_to_bootbased(struct timespec *ts);
 extern void get_monotonic_boottime(struct timespec *ts);
 
+static inline bool timeval_valid(const struct timeval *tv)
+{
+	/* Dates before 1970 are bogus */
+	if (tv->tv_sec < 0)
+		return false;
+
+	/* Can't have more microseconds then a second */
+	if (tv->tv_usec < 0 || tv->tv_usec >= USEC_PER_SEC)
+		return false;
+
+	return true;
+}
+
 extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
 extern int timekeeping_valid_for_hres(void);
 extern u64 timekeeping_max_deferment(void);
diff -druNp --no-dereference linux-libre-3.10.66-gnu/kernel/time/ntp.c linux-libre-3.10.67-gnu/kernel/time/ntp.c
--- linux-libre-3.10.66-gnu/kernel/time/ntp.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/kernel/time/ntp.c	2015-01-29 20:42:36.000000000 -0500
@@ -631,6 +631,13 @@ int ntp_validate_timex(struct timex *txc
 	if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME)))
 		return -EPERM;
 
+	if (txc->modes & ADJ_FREQUENCY) {
+		if (LONG_MIN / PPM_SCALE > txc->freq)
+			return -EINVAL;
+		if (LONG_MAX / PPM_SCALE < txc->freq)
+			return -EINVAL;
+	}
+
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/kernel/time.c linux-libre-3.10.67-gnu/kernel/time.c
--- linux-libre-3.10.66-gnu/kernel/time.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/kernel/time.c	2015-01-29 20:42:36.000000000 -0500
@@ -195,6 +195,10 @@ SYSCALL_DEFINE2(settimeofday, struct tim
 	if (tv) {
 		if (copy_from_user(&user_tv, tv, sizeof(*tv)))
 			return -EFAULT;
+
+		if (!timeval_valid(&user_tv))
+			return -EINVAL;
+
 		new_ts.tv_sec = user_tv.tv_sec;
 		new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
 	}
diff -druNp --no-dereference linux-libre-3.10.66-gnu/Makefile linux-libre-3.10.67-gnu/Makefile
--- linux-libre-3.10.66-gnu/Makefile	2015-01-27 16:09:38.000000000 -0500
+++ linux-libre-3.10.67-gnu/Makefile	2015-01-30 02:44:08.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 10
-SUBLEVEL = 66
+SUBLEVEL = 67
 EXTRAVERSION =-gnu
 NAME = TOSSUG Baby Fish
 
diff -druNp --no-dereference linux-libre-3.10.66-gnu/net/netfilter/ipvs/ip_vs_ftp.c linux-libre-3.10.67-gnu/net/netfilter/ipvs/ip_vs_ftp.c
--- linux-libre-3.10.66-gnu/net/netfilter/ipvs/ip_vs_ftp.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/net/netfilter/ipvs/ip_vs_ftp.c	2015-01-29 20:42:36.000000000 -0500
@@ -183,6 +183,8 @@ static int ip_vs_ftp_out(struct ip_vs_ap
 	struct nf_conn *ct;
 	struct net *net;
 
+	*diff = 0;
+
 #ifdef CONFIG_IP_VS_IPV6
 	/* This application helper doesn't work with IPv6 yet,
 	 * so turn this into a no-op for IPv6 packets
@@ -191,8 +193,6 @@ static int ip_vs_ftp_out(struct ip_vs_ap
 		return 1;
 #endif
 
-	*diff = 0;
-
 	/* Only useful for established sessions */
 	if (cp->state != IP_VS_TCP_S_ESTABLISHED)
 		return 1;
@@ -321,6 +321,9 @@ static int ip_vs_ftp_in(struct ip_vs_app
 	struct ip_vs_conn *n_cp;
 	struct net *net;
 
+	/* no diff required for incoming packets */
+	*diff = 0;
+
 #ifdef CONFIG_IP_VS_IPV6
 	/* This application helper doesn't work with IPv6 yet,
 	 * so turn this into a no-op for IPv6 packets
@@ -329,9 +332,6 @@ static int ip_vs_ftp_in(struct ip_vs_app
 		return 1;
 #endif
 
-	/* no diff required for incoming packets */
-	*diff = 0;
-
 	/* Only useful for established sessions */
 	if (cp->state != IP_VS_TCP_S_ESTABLISHED)
 		return 1;
diff -druNp --no-dereference linux-libre-3.10.66-gnu/scripts/recordmcount.pl linux-libre-3.10.67-gnu/scripts/recordmcount.pl
--- linux-libre-3.10.66-gnu/scripts/recordmcount.pl	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/scripts/recordmcount.pl	2015-01-29 20:42:36.000000000 -0500
@@ -262,7 +262,6 @@ if ($arch eq "x86_64") {
     # force flags for this arch
     $ld .= " -m shlelf_linux";
     $objcopy .= " -O elf32-sh-linux";
-    $cc .= " -m32";
 
 } elsif ($arch eq "powerpc") {
     $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)";
diff -druNp --no-dereference linux-libre-3.10.66-gnu/security/keys/gc.c linux-libre-3.10.67-gnu/security/keys/gc.c
--- linux-libre-3.10.66-gnu/security/keys/gc.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/security/keys/gc.c	2015-01-29 20:42:36.000000000 -0500
@@ -201,12 +201,12 @@ static noinline void key_gc_unused_keys(
 		if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags))
 			atomic_dec(&key->user->nikeys);
 
-		key_user_put(key->user);
-
 		/* now throw away the key memory */
 		if (key->type->destroy)
 			key->type->destroy(key);
 
+		key_user_put(key->user);
+
 		kfree(key->description);
 
 #ifdef KEY_DEBUGGING
diff -druNp --no-dereference linux-libre-3.10.66-gnu/sound/usb/mixer.c linux-libre-3.10.67-gnu/sound/usb/mixer.c
--- linux-libre-3.10.66-gnu/sound/usb/mixer.c	2015-01-27 10:52:51.000000000 -0500
+++ linux-libre-3.10.67-gnu/sound/usb/mixer.c	2015-01-29 20:42:36.000000000 -0500
@@ -886,6 +886,7 @@ static void volume_control_quirks(struct
 	case USB_ID(0x046d, 0x0807): /* Logitech Webcam C500 */
 	case USB_ID(0x046d, 0x0808):
 	case USB_ID(0x046d, 0x0809):
+	case USB_ID(0x046d, 0x0819): /* Logitech Webcam C210 */
 	case USB_ID(0x046d, 0x081b): /* HD Webcam c310 */
 	case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */
 	case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */
