Commit e606ee20 authored by Aaro Koskinen's avatar Aaro Koskinen Committed by Ralf Baechle

CRYPTO: Octeon: always disable preemption when using crypto engine

Always disable preemption on behalf of the drivers when crypto engine
is taken into use. This will simplify the usage.
Signed-off-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David S. Miller <davem@davemloft.net>
Cc: linux-crypto@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9494/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent f7715e72
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* crypto operations in calls to octeon_crypto_enable/disable in order to make * crypto operations in calls to octeon_crypto_enable/disable in order to make
* sure the state of COP2 isn't corrupted if userspace is also performing * sure the state of COP2 isn't corrupted if userspace is also performing
* hardware crypto operations. Allocate the state parameter on the stack. * hardware crypto operations. Allocate the state parameter on the stack.
* Preemption must be disabled to prevent context switches. * Returns with preemption disabled.
* *
* @state: Pointer to state structure to store current COP2 state in. * @state: Pointer to state structure to store current COP2 state in.
* *
...@@ -28,6 +28,7 @@ unsigned long octeon_crypto_enable(struct octeon_cop2_state *state) ...@@ -28,6 +28,7 @@ unsigned long octeon_crypto_enable(struct octeon_cop2_state *state)
int status; int status;
unsigned long flags; unsigned long flags;
preempt_disable();
local_irq_save(flags); local_irq_save(flags);
status = read_c0_status(); status = read_c0_status();
write_c0_status(status | ST0_CU2); write_c0_status(status | ST0_CU2);
...@@ -62,5 +63,6 @@ void octeon_crypto_disable(struct octeon_cop2_state *state, ...@@ -62,5 +63,6 @@ void octeon_crypto_disable(struct octeon_cop2_state *state,
else else
write_c0_status(read_c0_status() & ~ST0_CU2); write_c0_status(read_c0_status() & ~ST0_CU2);
local_irq_restore(flags); local_irq_restore(flags);
preempt_enable();
} }
EXPORT_SYMBOL_GPL(octeon_crypto_disable); EXPORT_SYMBOL_GPL(octeon_crypto_disable);
...@@ -97,7 +97,6 @@ static int octeon_md5_update(struct shash_desc *desc, const u8 *data, ...@@ -97,7 +97,6 @@ static int octeon_md5_update(struct shash_desc *desc, const u8 *data,
memcpy((char *)mctx->block + (sizeof(mctx->block) - avail), data, memcpy((char *)mctx->block + (sizeof(mctx->block) - avail), data,
avail); avail);
preempt_disable();
flags = octeon_crypto_enable(&state); flags = octeon_crypto_enable(&state);
octeon_md5_store_hash(mctx); octeon_md5_store_hash(mctx);
...@@ -113,7 +112,6 @@ static int octeon_md5_update(struct shash_desc *desc, const u8 *data, ...@@ -113,7 +112,6 @@ static int octeon_md5_update(struct shash_desc *desc, const u8 *data,
octeon_md5_read_hash(mctx); octeon_md5_read_hash(mctx);
octeon_crypto_disable(&state, flags); octeon_crypto_disable(&state, flags);
preempt_enable();
memcpy(mctx->block, data, len); memcpy(mctx->block, data, len);
...@@ -131,7 +129,6 @@ static int octeon_md5_final(struct shash_desc *desc, u8 *out) ...@@ -131,7 +129,6 @@ static int octeon_md5_final(struct shash_desc *desc, u8 *out)
*p++ = 0x80; *p++ = 0x80;
preempt_disable();
flags = octeon_crypto_enable(&state); flags = octeon_crypto_enable(&state);
octeon_md5_store_hash(mctx); octeon_md5_store_hash(mctx);
...@@ -149,7 +146,6 @@ static int octeon_md5_final(struct shash_desc *desc, u8 *out) ...@@ -149,7 +146,6 @@ static int octeon_md5_final(struct shash_desc *desc, u8 *out)
octeon_md5_read_hash(mctx); octeon_md5_read_hash(mctx);
octeon_crypto_disable(&state, flags); octeon_crypto_disable(&state, flags);
preempt_enable();
memcpy(out, mctx->hash, sizeof(mctx->hash)); memcpy(out, mctx->hash, sizeof(mctx->hash));
memset(mctx, 0, sizeof(*mctx)); memset(mctx, 0, sizeof(*mctx));
......
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