From 23dd72192cf7fe680f6fa3d1b6c06a3d9512a170 Mon Sep 17 00:00:00 2001 From: Jussi Kivilinna Date: Tue, 20 Dec 2011 12:20:21 +0200 Subject: [PATCH] --- yaml --- r: 292240 b: refs/heads/master c: 4c58464b8034cef4317593bf4ccbfc19d5bb3a77 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/x86/crypto/blowfish_glue.c | 30 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 85396e8d5654..d7d907a44b1d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a522ee85ba979e7897a75b1c97db1b0304b68b5c +refs/heads/master: 4c58464b8034cef4317593bf4ccbfc19d5bb3a77 diff --git a/trunk/arch/x86/crypto/blowfish_glue.c b/trunk/arch/x86/crypto/blowfish_glue.c index b05aa163d55a..2970110d2cea 100644 --- a/trunk/arch/x86/crypto/blowfish_glue.c +++ b/trunk/arch/x86/crypto/blowfish_glue.c @@ -25,6 +25,7 @@ * */ +#include #include #include #include @@ -446,10 +447,39 @@ static struct crypto_alg blk_ctr_alg = { }, }; +static bool is_blacklisted_cpu(void) +{ + if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) + return false; + + if (boot_cpu_data.x86 == 0x0f) { + /* + * On Pentium 4, blowfish-x86_64 is slower than generic C + * implementation because use of 64bit rotates (which are really + * slow on P4). Therefore blacklist P4s. + */ + return true; + } + + return false; +} + +static int force; +module_param(force, int, 0); +MODULE_PARM_DESC(force, "Force module load, ignore CPU blacklist"); + static int __init init(void) { int err; + if (!force && is_blacklisted_cpu()) { + printk(KERN_INFO + "blowfish-x86_64: performance on this CPU " + "would be suboptimal: disabling " + "blowfish-x86_64.\n"); + return -ENODEV; + } + err = crypto_register_alg(&bf_alg); if (err) goto bf_err;