Subject: [patch 2/2] remove similar aes glue code

32 bit and 64 bit glue code is using (now) the same
gleue code. Make it one.

Signed-off-by: Sebastian Siewior <[email protected]>
---
arch/x86/crypto/Makefile | 4 +-
arch/x86/crypto/aes_32.c | 58 ------------------------------
arch/x86/crypto/{aes_64.c => aes_glue.c} | 23 ++++++------
3 files changed, 14 insertions(+), 71 deletions(-)
delete mode 100644 arch/x86/crypto/aes_32.c
rename arch/x86/crypto/{aes_64.c => aes_glue.c} (69%)

diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 46bb609..b8fbb43 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -8,8 +8,8 @@ obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o
obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o
obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o

-aes-i586-y := aes-i586-asm_32.o aes_32.o
+aes-i586-y := aes-i586-asm_32.o aes_glue.o
twofish-i586-y := twofish-i586-asm_32.o twofish_32.o

-aes-x86_64-y := aes-x86_64-asm_64.o aes_64.o
+aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o
twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_64.o
diff --git a/arch/x86/crypto/aes_32.c b/arch/x86/crypto/aes_32.c
deleted file mode 100644
index 8556d95..0000000
--- a/arch/x86/crypto/aes_32.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Glue Code for optimized 586 assembler version of AES
- */
-
-#include <crypto/aes.h>
-#include <linux/module.h>
-#include <linux/crypto.h>
-
-asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
-asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
-
-static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
- aes_enc_blk(tfm, dst, src);
-}
-
-static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
- aes_dec_blk(tfm, dst, src);
-}
-
-static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-i586",
- .cra_priority = 200,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
- .cra_blocksize = AES_BLOCK_SIZE,
- .cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
- .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
- .cra_u = {
- .cipher = {
- .cia_min_keysize = AES_MIN_KEY_SIZE,
- .cia_max_keysize = AES_MAX_KEY_SIZE,
- .cia_setkey = crypto_aes_set_key,
- .cia_encrypt = aes_encrypt,
- .cia_decrypt = aes_decrypt
- }
- }
-};
-
-static int __init aes_init(void)
-{
- return crypto_register_alg(&aes_alg);
-}
-
-static void __exit aes_fini(void)
-{
- crypto_unregister_alg(&aes_alg);
-}
-
-module_init(aes_init);
-module_exit(aes_fini);
-
-MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, i586 asm optimized");
-MODULE_LICENSE("Dual BSD/GPL");
-MODULE_AUTHOR("Fruhwirth Clemens, James Morris, Brian Gladman, Adam Richter");
-MODULE_ALIAS("aes");
diff --git a/arch/x86/crypto/aes_64.c b/arch/x86/crypto/aes_glue.c
similarity index 69%
rename from arch/x86/crypto/aes_64.c
rename to arch/x86/crypto/aes_glue.c
index d7a41a9..5a283a4 100644
--- a/arch/x86/crypto/aes_64.c
+++ b/arch/x86/crypto/aes_glue.c
@@ -4,6 +4,7 @@
*/

#include <crypto/aes.h>
+#include <linux/module.h>

asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);
asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);
@@ -19,21 +20,21 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
}

static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-x86_64",
+ .cra_name = "aes",
+ .cra_driver_name = "aes-asm",
.cra_priority = 200,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
+ .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
.cra_blocksize = AES_BLOCK_SIZE,
.cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
- .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
- .cra_u = {
- .cipher = {
+ .cra_module = THIS_MODULE,
+ .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
+ .cra_u = {
+ .cipher = {
.cia_min_keysize = AES_MIN_KEY_SIZE,
.cia_max_keysize = AES_MAX_KEY_SIZE,
- .cia_setkey = crypto_aes_set_key,
- .cia_encrypt = aes_encrypt,
- .cia_decrypt = aes_decrypt
+ .cia_setkey = crypto_aes_set_key,
+ .cia_encrypt = aes_encrypt,
+ .cia_decrypt = aes_decrypt
}
}
};
@@ -51,6 +52,6 @@ static void __exit aes_fini(void)
module_init(aes_init);
module_exit(aes_fini);

-MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
+MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized");
MODULE_LICENSE("GPL");
MODULE_ALIAS("aes");
--
1.5.3.4


2007-11-10 11:19:57

by Herbert Xu

[permalink] [raw]
Subject: Re: [patch 2/2] remove similar aes glue code

On Sat, Nov 03, 2007 at 11:05:03AM +0100, Sebastian Siewior wrote:
>
> static struct crypto_alg aes_alg = {
> - .cra_name = "aes",
> - .cra_driver_name = "aes-x86_64",
> + .cra_name = "aes",
> + .cra_driver_name = "aes-asm",

This is bad because the algorithm name no longer matches the module
name. I suppose we could rename the modules too, or perhaps just
add an alias?

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Subject: Re: [patch 2/2] remove similar aes glue code

* Herbert Xu | 2007-11-10 19:19:55 [+0800]:

>On Sat, Nov 03, 2007 at 11:05:03AM +0100, Sebastian Siewior wrote:
>>
>> static struct crypto_alg aes_alg = {
>> - .cra_name = "aes",
>> - .cra_driver_name = "aes-x86_64",
>> + .cra_name = "aes",
>> + .cra_driver_name = "aes-asm",
>
>This is bad because the algorithm name no longer matches the module
>name.
This is case for every aes driver after I renamed them. Or am I missing
something? You are not talking about cra_drive_name are you?

>I suppose we could rename the modules too, or perhaps just
>add an alias?

We can't rename the asm optimized module to aes.ko. Well we could but
this might be little ugly since we allready haven an alias for AES
provided by the generic algorithm (on which this algorithm depends on).
If you are talking about adding an alias which one should it be?
We allready have an AES alias in the glue code.

>Cheers,

Sebastian

2007-11-11 01:18:58

by Herbert Xu

[permalink] [raw]
Subject: Re: [patch 2/2] remove similar aes glue code

On Sat, Nov 10, 2007 at 10:20:00PM +0100, Sebastian Siewior wrote:
> * Herbert Xu | 2007-11-10 19:19:55 [+0800]:
>
> >On Sat, Nov 03, 2007 at 11:05:03AM +0100, Sebastian Siewior wrote:
> >>
> >> static struct crypto_alg aes_alg = {
> >> - .cra_name = "aes",
> >> - .cra_driver_name = "aes-x86_64",
> >> + .cra_name = "aes",
> >> + .cra_driver_name = "aes-asm",
> >
> >This is bad because the algorithm name no longer matches the module
> >name.
> This is case for every aes driver after I renamed them. Or am I missing
> something? You are not talking about cra_drive_name are you?

I meant the cra_driver_name. Both names can be used to find
the algorithm.

Thanks,

> >I suppose we could rename the modules too, or perhaps just
> >add an alias?
>
> We can't rename the asm optimized module to aes.ko. Well we could but
> this might be little ugly since we allready haven an alias for AES
> provided by the generic algorithm (on which this algorithm depends on).
> If you are talking about adding an alias which one should it be?
> We allready have an AES alias in the glue code.

You could add an aes-asm alias.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Subject: Re: [patch 2/2] remove similar aes glue code

* Herbert Xu | 2007-11-11 09:18:56 [+0800]:

>On Sat, Nov 10, 2007 at 10:20:00PM +0100, Sebastian Siewior wrote:
>> * Herbert Xu | 2007-11-10 19:19:55 [+0800]:
>>
>> >On Sat, Nov 03, 2007 at 11:05:03AM +0100, Sebastian Siewior wrote:
>> >>
>> >> static struct crypto_alg aes_alg = {
>> >> - .cra_name = "aes",
>> >> - .cra_driver_name = "aes-x86_64",
>> >> + .cra_name = "aes",
>> >> + .cra_driver_name = "aes-asm",
>> >
>> >This is bad because the algorithm name no longer matches the module
>> >name.
>> This is case for every aes driver after I renamed them. Or am I missing
>> something? You are not talking about cra_drive_name are you?
>
>I meant the cra_driver_name. Both names can be used to find
>the algorithm.
I checked it and cra_driver_name is only used for compare. I think you
could use something like "cbc(aes-asm)" but this would only work on x86.
Is there something I am overlooking?
I have no problem with adding another alias but atleast I would like
understand it :)
>
>Thanks,

Sebastian

2007-11-26 10:32:25

by Herbert Xu

[permalink] [raw]
Subject: Re: [patch 2/2] remove similar aes glue code

On Mon, Nov 26, 2007 at 10:35:00AM +0100, Sebastian Siewior wrote:
>
> I checked it and cra_driver_name is only used for compare. I think you
> could use something like "cbc(aes-asm)" but this would only work on x86.
> Is there something I am overlooking?

That's the whole point of cra_driver_name. Consider the case
of someone who has a higher priority version of AES available,
e.g., padlock or an async device. If they want to specify the
assembly version of AES then they would use cbc(aes-asm). Just
as they would use cbc(aes-generic) to select the C version.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Subject: [PATCH] [crypto] remove similar aes glue code

32 bit and 64 bit glue code is using (now) the same
piece code. This patch unifies them.

Signed-off-by: Sebastian Siewior <[email protected]>
---
arch/x86/crypto/Makefile | 4 +-
arch/x86/crypto/aes_32.c | 58 ------------------------------
arch/x86/crypto/{aes_64.c => aes_glue.c} | 35 +++++++++---------
3 files changed, 20 insertions(+), 77 deletions(-)
delete mode 100644 arch/x86/crypto/aes_32.c
rename arch/x86/crypto/{aes_64.c => aes_glue.c} (52%)

diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 46bb609..b8fbb43 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -8,8 +8,8 @@ obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o
obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o
obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o

-aes-i586-y := aes-i586-asm_32.o aes_32.o
+aes-i586-y := aes-i586-asm_32.o aes_glue.o
twofish-i586-y := twofish-i586-asm_32.o twofish_32.o

-aes-x86_64-y := aes-x86_64-asm_64.o aes_64.o
+aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o
twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_64.o
diff --git a/arch/x86/crypto/aes_32.c b/arch/x86/crypto/aes_32.c
deleted file mode 100644
index 8556d95..0000000
--- a/arch/x86/crypto/aes_32.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Glue Code for optimized 586 assembler version of AES
- */
-
-#include <crypto/aes.h>
-#include <linux/module.h>
-#include <linux/crypto.h>
-
-asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
-asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
-
-static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
- aes_enc_blk(tfm, dst, src);
-}
-
-static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
-{
- aes_dec_blk(tfm, dst, src);
-}
-
-static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-i586",
- .cra_priority = 200,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
- .cra_blocksize = AES_BLOCK_SIZE,
- .cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
- .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
- .cra_u = {
- .cipher = {
- .cia_min_keysize = AES_MIN_KEY_SIZE,
- .cia_max_keysize = AES_MAX_KEY_SIZE,
- .cia_setkey = crypto_aes_set_key,
- .cia_encrypt = aes_encrypt,
- .cia_decrypt = aes_decrypt
- }
- }
-};
-
-static int __init aes_init(void)
-{
- return crypto_register_alg(&aes_alg);
-}
-
-static void __exit aes_fini(void)
-{
- crypto_unregister_alg(&aes_alg);
-}
-
-module_init(aes_init);
-module_exit(aes_fini);
-
-MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, i586 asm optimized");
-MODULE_LICENSE("Dual BSD/GPL");
-MODULE_AUTHOR("Fruhwirth Clemens, James Morris, Brian Gladman, Adam Richter");
-MODULE_ALIAS("aes");
diff --git a/arch/x86/crypto/aes_64.c b/arch/x86/crypto/aes_glue.c
similarity index 52%
rename from arch/x86/crypto/aes_64.c
rename to arch/x86/crypto/aes_glue.c
index d7a41a9..71f4578 100644
--- a/arch/x86/crypto/aes_64.c
+++ b/arch/x86/crypto/aes_glue.c
@@ -1,5 +1,5 @@
/*
- * Glue Code for AES Cipher Algorithm
+ * Glue Code for the asm optimized version of the AES Cipher Algorithm
*
*/

@@ -19,21 +19,21 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
}

static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-x86_64",
- .cra_priority = 200,
- .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
- .cra_blocksize = AES_BLOCK_SIZE,
- .cra_ctxsize = sizeof(struct crypto_aes_ctx),
- .cra_module = THIS_MODULE,
- .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
- .cra_u = {
- .cipher = {
- .cia_min_keysize = AES_MIN_KEY_SIZE,
- .cia_max_keysize = AES_MAX_KEY_SIZE,
- .cia_setkey = crypto_aes_set_key,
- .cia_encrypt = aes_encrypt,
- .cia_decrypt = aes_decrypt
+ .cra_name = "aes",
+ .cra_driver_name = "aes-asm",
+ .cra_priority = 200,
+ .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
+ .cra_blocksize = AES_BLOCK_SIZE,
+ .cra_ctxsize = sizeof(struct crypto_aes_ctx),
+ .cra_module = THIS_MODULE,
+ .cra_list = LIST_HEAD_INIT(aes_alg.cra_list),
+ .cra_u = {
+ .cipher = {
+ .cia_min_keysize = AES_MIN_KEY_SIZE,
+ .cia_max_keysize = AES_MAX_KEY_SIZE,
+ .cia_setkey = crypto_aes_set_key,
+ .cia_encrypt = aes_encrypt,
+ .cia_decrypt = aes_decrypt
}
}
};
@@ -51,6 +51,7 @@ static void __exit aes_fini(void)
module_init(aes_init);
module_exit(aes_fini);

-MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
+MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized");
MODULE_LICENSE("GPL");
MODULE_ALIAS("aes");
+MODULE_ALIAS("aes-asm");
--
1.5.2.5

2007-11-29 13:15:35

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] [crypto] remove similar aes glue code

On Tue, Nov 27, 2007 at 08:31:59PM +0100, Sebastian Siewior wrote:
> 32 bit and 64 bit glue code is using (now) the same
> piece code. This patch unifies them.
>
> Signed-off-by: Sebastian Siewior <[email protected]>

Patch applied. Thanks Sebastian!
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt