summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorFranck LENORMAND <franck.lenormand@nxp.com>2018-09-14 10:59:52 +0200
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:34:15 +0800
commit7d165ab807527ed37230e2fc481c7d40ded83197 (patch)
tree92478a953a603fd2fa8de2f9a236ae37c38e86ff /crypto
parentdc0d0dc42d1b90e7f5af420b74cdf330bebf11b4 (diff)
MLK-19365: crypto: ccm: Cache aligned auth_data
Generic GCM is likely to end up using a hardware accelerator to do part of the job. Allocating hash, iv and result in a contiguous memory area increases the risk of dma mapping multiple ranges on the same cacheline. Also having dma and cpu written data on the same cacheline will cause coherence issues. Signed-off-by: Franck LENORMAND <franck.lenormand@nxp.com>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/ccm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/crypto/ccm.c b/crypto/ccm.c
index 0a083342ec8c..aca949559be8 100644
--- a/crypto/ccm.c
+++ b/crypto/ccm.c
@@ -46,7 +46,18 @@ struct crypto_rfc4309_req_ctx {
struct crypto_ccm_req_priv_ctx {
u8 odata[16];
u8 idata[16];
- u8 auth_tag[16];
+
+ /*
+ * We need to force auth_tag to be on its own cacheline.
+ *
+ * We put it on its cacheline with the macro ____cacheline_aligned.
+ * The next fields must be on another cacheline so we add a dummy field
+ * which is located on another cacheline to enforce that.
+ */
+ u8 auth_tag[16] ____cacheline_aligned;
+
+ u8 dummy_align_auth_tag ____cacheline_aligned;
+
u32 flags;
struct scatterlist src[3];
struct scatterlist dst[3];