diff options
author | Suresh Siddha <suresh.b.siddha@intel.com> | 2012-09-17 13:37:26 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-09-27 01:32:15 -0400 |
commit | b6f3fefe1fa1e8ea8f6b654e7d552253373cd1c0 (patch) | |
tree | 756ea912317e9a04fe5a5b4dfeb996e2511f10e9 /crypto | |
parent | 35c41db8f9ca76d7ca3cdc9003ac5a53292026be (diff) |
crypto, tcrypt: remove local_bh_disable/enable() around local_irq_disable/enable()
Ran into this while looking at some new crypto code using FPU
hitting a WARN_ON_ONCE(!irq_fpu_usable()) in the kernel_fpu_begin()
on a x86 kernel that uses the new eagerfpu model. In short, current eagerfpu
changes return 0 for interrupted_kernel_fpu_idle() and the in_interrupt()
thinks it is in the interrupt context because of the local_bh_disable().
Thus resulting in the WARN_ON().
Remove the local_bh_disable/enable() calls around the existing
local_irq_disable/enable() calls. local_irq_disable/enable() already
disables the BH.
[ If there are any other legitimate users calling kernel_fpu_begin() from
the process context but with BH disabled, then we can look into fixing the
irq_fpu_usable() in future. ]
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/tcrypt.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index 871076b1e0ab..1ac77b720b2d 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c | |||
@@ -97,7 +97,6 @@ static int test_cipher_cycles(struct blkcipher_desc *desc, int enc, | |||
97 | int ret = 0; | 97 | int ret = 0; |
98 | int i; | 98 | int i; |
99 | 99 | ||
100 | local_bh_disable(); | ||
101 | local_irq_disable(); | 100 | local_irq_disable(); |
102 | 101 | ||
103 | /* Warm-up run. */ | 102 | /* Warm-up run. */ |
@@ -130,7 +129,6 @@ static int test_cipher_cycles(struct blkcipher_desc *desc, int enc, | |||
130 | 129 | ||
131 | out: | 130 | out: |
132 | local_irq_enable(); | 131 | local_irq_enable(); |
133 | local_bh_enable(); | ||
134 | 132 | ||
135 | if (ret == 0) | 133 | if (ret == 0) |
136 | printk("1 operation in %lu cycles (%d bytes)\n", | 134 | printk("1 operation in %lu cycles (%d bytes)\n", |
@@ -300,7 +298,6 @@ static int test_hash_cycles_digest(struct hash_desc *desc, | |||
300 | int i; | 298 | int i; |
301 | int ret; | 299 | int ret; |
302 | 300 | ||
303 | local_bh_disable(); | ||
304 | local_irq_disable(); | 301 | local_irq_disable(); |
305 | 302 | ||
306 | /* Warm-up run. */ | 303 | /* Warm-up run. */ |
@@ -327,7 +324,6 @@ static int test_hash_cycles_digest(struct hash_desc *desc, | |||
327 | 324 | ||
328 | out: | 325 | out: |
329 | local_irq_enable(); | 326 | local_irq_enable(); |
330 | local_bh_enable(); | ||
331 | 327 | ||
332 | if (ret) | 328 | if (ret) |
333 | return ret; | 329 | return ret; |
@@ -348,7 +344,6 @@ static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg, | |||
348 | if (plen == blen) | 344 | if (plen == blen) |
349 | return test_hash_cycles_digest(desc, sg, blen, out); | 345 | return test_hash_cycles_digest(desc, sg, blen, out); |
350 | 346 | ||
351 | local_bh_disable(); | ||
352 | local_irq_disable(); | 347 | local_irq_disable(); |
353 | 348 | ||
354 | /* Warm-up run. */ | 349 | /* Warm-up run. */ |
@@ -391,7 +386,6 @@ static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg, | |||
391 | 386 | ||
392 | out: | 387 | out: |
393 | local_irq_enable(); | 388 | local_irq_enable(); |
394 | local_bh_enable(); | ||
395 | 389 | ||
396 | if (ret) | 390 | if (ret) |
397 | return ret; | 391 | return ret; |