Commit 9251b64f authored by Huang Ying's avatar Huang Ying Committed by Herbert Xu

crypto: aes-ni - Do not sleep when using the FPU

Because AES-NI instructions will touch XMM state, corresponding code
must be enclosed within kernel_fpu_begin/end, which used
preempt_disable/enable. So sleep should be prevented between
kernel_fpu_begin/end.
Signed-off-by: default avatarHuang Ying <ying.huang@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e6efaa02
...@@ -198,6 +198,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc, ...@@ -198,6 +198,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc,
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk); err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
kernel_fpu_begin(); kernel_fpu_begin();
while ((nbytes = walk.nbytes)) { while ((nbytes = walk.nbytes)) {
...@@ -221,6 +222,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc, ...@@ -221,6 +222,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc,
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk); err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
kernel_fpu_begin(); kernel_fpu_begin();
while ((nbytes = walk.nbytes)) { while ((nbytes = walk.nbytes)) {
...@@ -266,6 +268,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc, ...@@ -266,6 +268,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc,
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk); err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
kernel_fpu_begin(); kernel_fpu_begin();
while ((nbytes = walk.nbytes)) { while ((nbytes = walk.nbytes)) {
...@@ -289,6 +292,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc, ...@@ -289,6 +292,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
blkcipher_walk_init(&walk, dst, src, nbytes); blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk); err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
kernel_fpu_begin(); kernel_fpu_begin();
while ((nbytes = walk.nbytes)) { while ((nbytes = walk.nbytes)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment