git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tcp: add tcp_min_snd_mss sysctl
[pandora-kernel.git]
/
crypto
/
api.c
diff --git
a/crypto/api.c
b/crypto/api.c
index
033a714
..
a5547fb
100644
(file)
--- a/
crypto/api.c
+++ b/
crypto/api.c
@@
-34,6
+34,8
@@
EXPORT_SYMBOL_GPL(crypto_alg_sem);
BLOCKING_NOTIFIER_HEAD(crypto_chain);
EXPORT_SYMBOL_GPL(crypto_chain);
BLOCKING_NOTIFIER_HEAD(crypto_chain);
EXPORT_SYMBOL_GPL(crypto_chain);
+static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg);
+
static inline struct crypto_alg *crypto_alg_get(struct crypto_alg *alg)
{
atomic_inc(&alg->cra_refcnt);
static inline struct crypto_alg *crypto_alg_get(struct crypto_alg *alg)
{
atomic_inc(&alg->cra_refcnt);
@@
-150,8
+152,11
@@
static struct crypto_alg *crypto_larval_add(const char *name, u32 type,
}
up_write(&crypto_alg_sem);
}
up_write(&crypto_alg_sem);
- if (alg != &larval->alg)
+ if (alg != &larval->alg)
{
kfree(larval);
kfree(larval);
+ if (crypto_is_larval(alg))
+ alg = crypto_larval_wait(alg);
+ }
return alg;
}
return alg;
}
@@
-173,7
+178,7
@@
static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg)
struct crypto_larval *larval = (void *)alg;
long timeout;
struct crypto_larval *larval = (void *)alg;
long timeout;
- timeout = wait_for_completion_
interrupti
ble_timeout(
+ timeout = wait_for_completion_
killa
ble_timeout(
&larval->completion, 60 * HZ);
alg = larval->adult;
&larval->completion, 60 * HZ);
alg = larval->adult;
@@
-217,11
+222,11
@@
struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
alg = crypto_alg_lookup(name, type, mask);
if (!alg) {
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))
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);
}
alg = crypto_alg_lookup(name, type, mask);
}
@@
-436,7
+441,7
@@
struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask)
err:
if (err != -EAGAIN)
break;
err:
if (err != -EAGAIN)
break;
- if (signal_pending(current)) {
+ if (
fatal_
signal_pending(current)) {
err = -EINTR;
break;
}
err = -EINTR;
break;
}
@@
-553,7
+558,7
@@
void *crypto_alloc_tfm(const char *alg_name,
err:
if (err != -EAGAIN)
break;
err:
if (err != -EAGAIN)
break;
- if (signal_pending(current)) {
+ if (
fatal_
signal_pending(current)) {
err = -EINTR;
break;
}
err = -EINTR;
break;
}