aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorMathias Krause <minipli@googlemail.com>2010-11-28 19:35:39 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2010-11-28 19:35:39 -0500
commit559ad0ff1368baea14dbc3207d55b02bd69bda4b (patch)
treec1f329dd3b3084e0df26cc6436586265f79bf838 /arch/x86
parentc762be637503b833012457087133c1292fd6056d (diff)
crypto: aesni-intel - Fixed build error on x86-32
Exclude AES-GCM code for x86-32 due to heavy usage of 64-bit registers not available on x86-32. While at it, fixed unregister order in aesni_exit(). Signed-off-by: Mathias Krause <minipli@googlemail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/crypto/aesni-intel_asm.S5
-rw-r--r--arch/x86/crypto/aesni-intel_glue.c26
2 files changed, 17 insertions, 14 deletions
diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S
index f592e03dc375..d528fde219d2 100644
--- a/arch/x86/crypto/aesni-intel_asm.S
+++ b/arch/x86/crypto/aesni-intel_asm.S
@@ -32,6 +32,7 @@
32#include <linux/linkage.h> 32#include <linux/linkage.h>
33#include <asm/inst.h> 33#include <asm/inst.h>
34 34
35#ifdef __x86_64__
35.data 36.data
36POLY: .octa 0xC2000000000000000000000000000001 37POLY: .octa 0xC2000000000000000000000000000001
37TWOONE: .octa 0x00000001000000000000000000000001 38TWOONE: .octa 0x00000001000000000000000000000001
@@ -84,6 +85,7 @@ enc: .octa 0x2
84#define arg8 STACK_OFFSET+16(%r14) 85#define arg8 STACK_OFFSET+16(%r14)
85#define arg9 STACK_OFFSET+24(%r14) 86#define arg9 STACK_OFFSET+24(%r14)
86#define arg10 STACK_OFFSET+32(%r14) 87#define arg10 STACK_OFFSET+32(%r14)
88#endif
87 89
88 90
89#define STATE1 %xmm0 91#define STATE1 %xmm0
@@ -130,6 +132,7 @@ enc: .octa 0x2
130#endif 132#endif
131 133
132 134
135#ifdef __x86_64__
133/* GHASH_MUL MACRO to implement: Data*HashKey mod (128,127,126,121,0) 136/* GHASH_MUL MACRO to implement: Data*HashKey mod (128,127,126,121,0)
134* 137*
135* 138*
@@ -1255,7 +1258,7 @@ _return_T_done_encrypt:
1255 pop %r13 1258 pop %r13
1256 pop %r12 1259 pop %r12
1257 ret 1260 ret
1258 1261#endif
1259 1262
1260 1263
1261_key_expansion_128: 1264_key_expansion_128:
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
index 8a3b80075216..e1e60c7d5813 100644
--- a/arch/x86/crypto/aesni-intel_glue.c
+++ b/arch/x86/crypto/aesni-intel_glue.c
@@ -97,7 +97,6 @@ asmlinkage void aesni_cbc_dec(struct crypto_aes_ctx *ctx, u8 *out,
97#ifdef CONFIG_X86_64 97#ifdef CONFIG_X86_64
98asmlinkage void aesni_ctr_enc(struct crypto_aes_ctx *ctx, u8 *out, 98asmlinkage void aesni_ctr_enc(struct crypto_aes_ctx *ctx, u8 *out,
99 const u8 *in, unsigned int len, u8 *iv); 99 const u8 *in, unsigned int len, u8 *iv);
100#endif
101 100
102/* asmlinkage void aesni_gcm_enc() 101/* asmlinkage void aesni_gcm_enc()
103 * void *ctx, AES Key schedule. Starts on a 16 byte boundary. 102 * void *ctx, AES Key schedule. Starts on a 16 byte boundary.
@@ -149,6 +148,7 @@ aesni_rfc4106_gcm_ctx *aesni_rfc4106_gcm_ctx_get(struct crypto_aead *tfm)
149 PTR_ALIGN((u8 *) 148 PTR_ALIGN((u8 *)
150 crypto_tfm_ctx(crypto_aead_tfm(tfm)), AESNI_ALIGN); 149 crypto_tfm_ctx(crypto_aead_tfm(tfm)), AESNI_ALIGN);
151} 150}
151#endif
152 152
153static inline struct crypto_aes_ctx *aes_ctx(void *raw_ctx) 153static inline struct crypto_aes_ctx *aes_ctx(void *raw_ctx)
154{ 154{
@@ -822,6 +822,7 @@ static struct crypto_alg ablk_xts_alg = {
822}; 822};
823#endif 823#endif
824 824
825#ifdef CONFIG_X86_64
825static int rfc4106_init(struct crypto_tfm *tfm) 826static int rfc4106_init(struct crypto_tfm *tfm)
826{ 827{
827 struct cryptd_aead *cryptd_tfm; 828 struct cryptd_aead *cryptd_tfm;
@@ -1237,6 +1238,7 @@ static struct crypto_alg __rfc4106_alg = {
1237 }, 1238 },
1238 }, 1239 },
1239}; 1240};
1241#endif
1240 1242
1241static int __init aesni_init(void) 1243static int __init aesni_init(void)
1242{ 1244{
@@ -1264,6 +1266,10 @@ static int __init aesni_init(void)
1264 goto blk_ctr_err; 1266 goto blk_ctr_err;
1265 if ((err = crypto_register_alg(&ablk_ctr_alg))) 1267 if ((err = crypto_register_alg(&ablk_ctr_alg)))
1266 goto ablk_ctr_err; 1268 goto ablk_ctr_err;
1269 if ((err = crypto_register_alg(&__rfc4106_alg)))
1270 goto __aead_gcm_err;
1271 if ((err = crypto_register_alg(&rfc4106_alg)))
1272 goto aead_gcm_err;
1267#ifdef HAS_CTR 1273#ifdef HAS_CTR
1268 if ((err = crypto_register_alg(&ablk_rfc3686_ctr_alg))) 1274 if ((err = crypto_register_alg(&ablk_rfc3686_ctr_alg)))
1269 goto ablk_rfc3686_ctr_err; 1275 goto ablk_rfc3686_ctr_err;
@@ -1281,19 +1287,9 @@ static int __init aesni_init(void)
1281 if ((err = crypto_register_alg(&ablk_xts_alg))) 1287 if ((err = crypto_register_alg(&ablk_xts_alg)))
1282 goto ablk_xts_err; 1288 goto ablk_xts_err;
1283#endif 1289#endif
1284 err = crypto_register_alg(&__rfc4106_alg);
1285 if (err)
1286 goto __aead_gcm_err;
1287 err = crypto_register_alg(&rfc4106_alg);
1288 if (err)
1289 goto aead_gcm_err;
1290 return err; 1290 return err;
1291 1291
1292aead_gcm_err:
1293 crypto_unregister_alg(&__rfc4106_alg);
1294__aead_gcm_err:
1295#ifdef HAS_XTS 1292#ifdef HAS_XTS
1296 crypto_unregister_alg(&ablk_xts_alg);
1297ablk_xts_err: 1293ablk_xts_err:
1298#endif 1294#endif
1299#ifdef HAS_PCBC 1295#ifdef HAS_PCBC
@@ -1309,6 +1305,10 @@ ablk_lrw_err:
1309 crypto_unregister_alg(&ablk_rfc3686_ctr_alg); 1305 crypto_unregister_alg(&ablk_rfc3686_ctr_alg);
1310ablk_rfc3686_ctr_err: 1306ablk_rfc3686_ctr_err:
1311#endif 1307#endif
1308 crypto_unregister_alg(&rfc4106_alg);
1309aead_gcm_err:
1310 crypto_unregister_alg(&__rfc4106_alg);
1311__aead_gcm_err:
1312 crypto_unregister_alg(&ablk_ctr_alg); 1312 crypto_unregister_alg(&ablk_ctr_alg);
1313ablk_ctr_err: 1313ablk_ctr_err:
1314 crypto_unregister_alg(&blk_ctr_alg); 1314 crypto_unregister_alg(&blk_ctr_alg);
@@ -1331,8 +1331,6 @@ aes_err:
1331 1331
1332static void __exit aesni_exit(void) 1332static void __exit aesni_exit(void)
1333{ 1333{
1334 crypto_unregister_alg(&__rfc4106_alg);
1335 crypto_unregister_alg(&rfc4106_alg);
1336#ifdef HAS_XTS 1334#ifdef HAS_XTS
1337 crypto_unregister_alg(&ablk_xts_alg); 1335 crypto_unregister_alg(&ablk_xts_alg);
1338#endif 1336#endif
@@ -1346,6 +1344,8 @@ static void __exit aesni_exit(void)
1346#ifdef HAS_CTR 1344#ifdef HAS_CTR
1347 crypto_unregister_alg(&ablk_rfc3686_ctr_alg); 1345 crypto_unregister_alg(&ablk_rfc3686_ctr_alg);
1348#endif 1346#endif
1347 crypto_unregister_alg(&rfc4106_alg);
1348 crypto_unregister_alg(&__rfc4106_alg);
1349 crypto_unregister_alg(&ablk_ctr_alg); 1349 crypto_unregister_alg(&ablk_ctr_alg);
1350 crypto_unregister_alg(&blk_ctr_alg); 1350 crypto_unregister_alg(&blk_ctr_alg);
1351#endif 1351#endif