{
        struct ahash_request *req = ahash_request_cast(async_req);
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
-       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx_dma(req);
        unsigned int digest_size = crypto_ahash_digestsize(tfm);
 
        if (ret)
                              unsigned int final)
 {
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_ahash_ctx(tfm);
-       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(tfm);
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct scatterlist *sg, *cmac_key_sg = NULL;
        unsigned int block_size =
                crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
 
 static int ccp_aes_cmac_init(struct ahash_request *req)
 {
-       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx_dma(req);
 
        memset(rctx, 0, sizeof(*rctx));
 
 
 static int ccp_aes_cmac_export(struct ahash_request *req, void *out)
 {
-       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct ccp_aes_cmac_exp_ctx state;
 
        /* Don't let anything leak to 'out' */
 
 static int ccp_aes_cmac_import(struct ahash_request *req, const void *in)
 {
-       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct ccp_aes_cmac_exp_ctx state;
 
        /* 'in' may not be aligned so memcpy to local variable */
 static int ccp_aes_cmac_setkey(struct crypto_ahash *tfm, const u8 *key,
                               unsigned int key_len)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(crypto_ahash_tfm(tfm));
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(tfm);
        struct ccp_crypto_ahash_alg *alg =
                ccp_crypto_ahash_alg(crypto_ahash_tfm(tfm));
        u64 k0_hi, k0_lo, k1_hi, k1_lo, k2_hi, k2_lo;
 
 static int ccp_aes_cmac_cra_init(struct crypto_tfm *tfm)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_tfm_ctx_dma(tfm);
        struct crypto_ahash *ahash = __crypto_ahash_cast(tfm);
 
        ctx->complete = ccp_aes_cmac_complete;
        ctx->u.aes.key_len = 0;
 
-       crypto_ahash_set_reqsize(ahash, sizeof(struct ccp_aes_cmac_req_ctx));
+       crypto_ahash_set_reqsize_dma(ahash,
+                                    sizeof(struct ccp_aes_cmac_req_ctx));
 
        return 0;
 }
                          CRYPTO_ALG_KERN_DRIVER_ONLY |
                          CRYPTO_ALG_NEED_FALLBACK;
        base->cra_blocksize = AES_BLOCK_SIZE;
-       base->cra_ctxsize = sizeof(struct ccp_ctx);
+       base->cra_ctxsize = sizeof(struct ccp_ctx) + crypto_dma_padding();
        base->cra_priority = CCP_CRA_PRIORITY;
        base->cra_init = ccp_aes_cmac_cra_init;
        base->cra_module = THIS_MODULE;
 
 static int ccp_aes_gcm_setkey(struct crypto_aead *tfm, const u8 *key,
                              unsigned int key_len)
 {
-       struct ccp_ctx *ctx = crypto_aead_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_aead_ctx_dma(tfm);
 
        switch (key_len) {
        case AES_KEYSIZE_128:
 static int ccp_aes_gcm_crypt(struct aead_request *req, bool encrypt)
 {
        struct crypto_aead *tfm = crypto_aead_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_aead_ctx(tfm);
-       struct ccp_aes_req_ctx *rctx = aead_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_aead_ctx_dma(tfm);
+       struct ccp_aes_req_ctx *rctx = aead_request_ctx_dma(req);
        struct scatterlist *iv_sg = NULL;
        unsigned int iv_len = 0;
        int i;
 
 static int ccp_aes_gcm_cra_init(struct crypto_aead *tfm)
 {
-       struct ccp_ctx *ctx = crypto_aead_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_aead_ctx_dma(tfm);
 
        ctx->complete = ccp_aes_gcm_complete;
        ctx->u.aes.key_len = 0;
 
-       crypto_aead_set_reqsize(tfm, sizeof(struct ccp_aes_req_ctx));
+       crypto_aead_set_reqsize_dma(tfm, sizeof(struct ccp_aes_req_ctx));
 
        return 0;
 }
                                  CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_NEED_FALLBACK,
                .cra_blocksize  = AES_BLOCK_SIZE,
-               .cra_ctxsize    = sizeof(struct ccp_ctx),
+               .cra_ctxsize    = sizeof(struct ccp_ctx) + CRYPTO_DMA_PADDING,
                .cra_priority   = CCP_CRA_PRIORITY,
                .cra_exit       = ccp_aes_gcm_cra_exit,
                .cra_module     = THIS_MODULE,
 
 static int ccp_aes_xts_complete(struct crypto_async_request *async_req, int ret)
 {
        struct skcipher_request *req = skcipher_request_cast(async_req);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
 
        if (ret)
                return ret;
 static int ccp_aes_xts_setkey(struct crypto_skcipher *tfm, const u8 *key,
                              unsigned int key_len)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        unsigned int ccpversion = ccp_version();
        int ret;
 
                             unsigned int encrypt)
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
        unsigned int ccpversion = ccp_version();
        unsigned int fallback = 0;
        unsigned int unit;
 
 static int ccp_aes_xts_init_tfm(struct crypto_skcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        struct crypto_skcipher *fallback_tfm;
 
        ctx->complete = ccp_aes_xts_complete;
        }
        ctx->u.aes.tfm_skcipher = fallback_tfm;
 
-       crypto_skcipher_set_reqsize(tfm, sizeof(struct ccp_aes_req_ctx) +
-                                        crypto_skcipher_reqsize(fallback_tfm));
+       crypto_skcipher_set_reqsize_dma(tfm,
+                                       sizeof(struct ccp_aes_req_ctx) +
+                                       crypto_skcipher_reqsize(fallback_tfm));
 
        return 0;
 }
 
 static void ccp_aes_xts_exit_tfm(struct crypto_skcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        crypto_free_skcipher(ctx->u.aes.tfm_skcipher);
 }
                                  CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_NEED_FALLBACK;
        alg->base.cra_blocksize = AES_BLOCK_SIZE;
-       alg->base.cra_ctxsize   = sizeof(struct ccp_ctx);
+       alg->base.cra_ctxsize   = sizeof(struct ccp_ctx) +
+                                 crypto_dma_padding();
        alg->base.cra_priority  = CCP_CRA_PRIORITY;
        alg->base.cra_module    = THIS_MODULE;
 
 
 static int ccp_aes_complete(struct crypto_async_request *async_req, int ret)
 {
        struct skcipher_request *req = skcipher_request_cast(async_req);
-       struct ccp_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(
+               crypto_skcipher_reqtfm(req));
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
 
        if (ret)
                return ret;
                          unsigned int key_len)
 {
        struct ccp_crypto_skcipher_alg *alg = ccp_crypto_skcipher_alg(tfm);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        switch (key_len) {
        case AES_KEYSIZE_128:
 static int ccp_aes_crypt(struct skcipher_request *req, bool encrypt)
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
        struct scatterlist *iv_sg = NULL;
        unsigned int iv_len = 0;
 
 
 static int ccp_aes_init_tfm(struct crypto_skcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        ctx->complete = ccp_aes_complete;
        ctx->u.aes.key_len = 0;
                                    int ret)
 {
        struct skcipher_request *req = skcipher_request_cast(async_req);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
 
        /* Restore the original pointer */
        req->iv = rctx->rfc3686_info;
 static int ccp_aes_rfc3686_setkey(struct crypto_skcipher *tfm, const u8 *key,
                                  unsigned int key_len)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        if (key_len < CTR_RFC3686_NONCE_SIZE)
                return -EINVAL;
 static int ccp_aes_rfc3686_crypt(struct skcipher_request *req, bool encrypt)
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
-       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
+       struct ccp_aes_req_ctx *rctx = skcipher_request_ctx_dma(req);
        u8 *iv;
 
        /* Initialize the CTR block */
 
 static int ccp_aes_rfc3686_init_tfm(struct crypto_skcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        ctx->complete = ccp_aes_rfc3686_complete;
        ctx->u.aes.key_len = 0;
 
-       crypto_skcipher_set_reqsize(tfm, sizeof(struct ccp_aes_req_ctx));
+       crypto_skcipher_set_reqsize_dma(tfm, sizeof(struct ccp_aes_req_ctx));
 
        return 0;
 }
                                  CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_NEED_FALLBACK,
        .base.cra_blocksize     = AES_BLOCK_SIZE,
-       .base.cra_ctxsize       = sizeof(struct ccp_ctx),
+       .base.cra_ctxsize       = sizeof(struct ccp_ctx) + CRYPTO_DMA_PADDING,
        .base.cra_priority      = CCP_CRA_PRIORITY,
        .base.cra_module        = THIS_MODULE,
 };
                                  CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_NEED_FALLBACK,
        .base.cra_blocksize     = CTR_RFC3686_BLOCK_SIZE,
-       .base.cra_ctxsize       = sizeof(struct ccp_ctx),
+       .base.cra_ctxsize       = sizeof(struct ccp_ctx) + CRYPTO_DMA_PADDING,
        .base.cra_priority      = CCP_CRA_PRIORITY,
        .base.cra_module        = THIS_MODULE,
 };
 
 static int ccp_des3_complete(struct crypto_async_request *async_req, int ret)
 {
        struct skcipher_request *req = skcipher_request_cast(async_req);
-       struct ccp_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-       struct ccp_des3_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(
+               crypto_skcipher_reqtfm(req));
+       struct ccp_des3_req_ctx *rctx = skcipher_request_ctx_dma(req);
 
        if (ret)
                return ret;
                unsigned int key_len)
 {
        struct ccp_crypto_skcipher_alg *alg = ccp_crypto_skcipher_alg(tfm);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        int err;
 
        err = verify_skcipher_des3_key(tfm, key);
 static int ccp_des3_crypt(struct skcipher_request *req, bool encrypt)
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
-       struct ccp_des3_req_ctx *rctx = skcipher_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
+       struct ccp_des3_req_ctx *rctx = skcipher_request_ctx_dma(req);
        struct scatterlist *iv_sg = NULL;
        unsigned int iv_len = 0;
 
 
 static int ccp_des3_init_tfm(struct crypto_skcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        ctx->complete = ccp_des3_complete;
        ctx->u.des3.key_len = 0;
 
-       crypto_skcipher_set_reqsize(tfm, sizeof(struct ccp_des3_req_ctx));
+       crypto_skcipher_set_reqsize_dma(tfm, sizeof(struct ccp_des3_req_ctx));
 
        return 0;
 }
                                  CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_NEED_FALLBACK,
        .base.cra_blocksize     = DES3_EDE_BLOCK_SIZE,
-       .base.cra_ctxsize       = sizeof(struct ccp_ctx),
+       .base.cra_ctxsize       = sizeof(struct ccp_ctx) + CRYPTO_DMA_PADDING,
        .base.cra_priority      = CCP_CRA_PRIORITY,
        .base.cra_module        = THIS_MODULE,
 };
 
        struct ccp_crypto_cmd *crypto_cmd = data;
        struct ccp_crypto_cmd *held, *next, *backlog;
        struct crypto_async_request *req = crypto_cmd->req;
-       struct ccp_ctx *ctx = crypto_tfm_ctx(req->tfm);
+       struct ccp_ctx *ctx = crypto_tfm_ctx_dma(req->tfm);
        int ret;
 
        if (err == -EINPROGRESS) {
                        break;
 
                /* Error occurred, report it and get the next entry */
-               ctx = crypto_tfm_ctx(held->req->tfm);
+               ctx = crypto_tfm_ctx_dma(held->req->tfm);
                if (ctx->complete)
                        ret = ctx->complete(held->req, ret);
                held->req->complete(held->req, ret);
 
 static int ccp_rsa_complete(struct crypto_async_request *async_req, int ret)
 {
        struct akcipher_request *req = akcipher_request_cast(async_req);
-       struct ccp_rsa_req_ctx *rctx = akcipher_request_ctx(req);
+       struct ccp_rsa_req_ctx *rctx = akcipher_request_ctx_dma(req);
 
        if (ret)
                return ret;
 
 static unsigned int ccp_rsa_maxsize(struct crypto_akcipher *tfm)
 {
-       struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
 
        return ctx->u.rsa.n_len;
 }
 static int ccp_rsa_crypt(struct akcipher_request *req, bool encrypt)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm);
-       struct ccp_rsa_req_ctx *rctx = akcipher_request_ctx(req);
+       struct ccp_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
+       struct ccp_rsa_req_ctx *rctx = akcipher_request_ctx_dma(req);
        int ret = 0;
 
        memset(&rctx->cmd, 0, sizeof(rctx->cmd));
 static int ccp_rsa_setkey(struct crypto_akcipher *tfm, const void *key,
                          unsigned int keylen, bool private)
 {
-       struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct rsa_key raw_key;
        int ret;
 
 
 static int ccp_rsa_init_tfm(struct crypto_akcipher *tfm)
 {
-       struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
 
-       akcipher_set_reqsize(tfm, sizeof(struct ccp_rsa_req_ctx));
+       akcipher_set_reqsize_dma(tfm, sizeof(struct ccp_rsa_req_ctx));
        ctx->complete = ccp_rsa_complete;
 
        return 0;
 
 static void ccp_rsa_exit_tfm(struct crypto_akcipher *tfm)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(&tfm->base);
+       struct ccp_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
 
        ccp_rsa_free_key_bufs(ctx);
 }
                .cra_driver_name = "rsa-ccp",
                .cra_priority = CCP_CRA_PRIORITY,
                .cra_module = THIS_MODULE,
-               .cra_ctxsize = 2 * sizeof(struct ccp_ctx),
+               .cra_ctxsize = 2 * sizeof(struct ccp_ctx) + CRYPTO_DMA_PADDING,
        },
 };
 
 
 {
        struct ahash_request *req = ahash_request_cast(async_req);
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
-       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx_dma(req);
        unsigned int digest_size = crypto_ahash_digestsize(tfm);
 
        if (ret)
                             unsigned int final)
 {
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_ahash_ctx(tfm);
-       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(tfm);
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct scatterlist *sg;
        unsigned int block_size =
                crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
 static int ccp_sha_init(struct ahash_request *req)
 {
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
-       struct ccp_ctx *ctx = crypto_ahash_ctx(tfm);
-       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(tfm);
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct ccp_crypto_ahash_alg *alg =
                ccp_crypto_ahash_alg(crypto_ahash_tfm(tfm));
        unsigned int block_size =
 
 static int ccp_sha_export(struct ahash_request *req, void *out)
 {
-       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct ccp_sha_exp_ctx state;
 
        /* Don't let anything leak to 'out' */
 
 static int ccp_sha_import(struct ahash_request *req, const void *in)
 {
-       struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
+       struct ccp_sha_req_ctx *rctx = ahash_request_ctx_dma(req);
        struct ccp_sha_exp_ctx state;
 
        /* 'in' may not be aligned so memcpy to local variable */
 static int ccp_sha_setkey(struct crypto_ahash *tfm, const u8 *key,
                          unsigned int key_len)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(crypto_ahash_tfm(tfm));
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(tfm);
        struct crypto_shash *shash = ctx->u.sha.hmac_tfm;
        unsigned int block_size = crypto_shash_blocksize(shash);
        unsigned int digest_size = crypto_shash_digestsize(shash);
 
 static int ccp_sha_cra_init(struct crypto_tfm *tfm)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(tfm);
        struct crypto_ahash *ahash = __crypto_ahash_cast(tfm);
+       struct ccp_ctx *ctx = crypto_ahash_ctx_dma(ahash);
 
        ctx->complete = ccp_sha_complete;
        ctx->u.sha.key_len = 0;
 
-       crypto_ahash_set_reqsize(ahash, sizeof(struct ccp_sha_req_ctx));
+       crypto_ahash_set_reqsize_dma(ahash, sizeof(struct ccp_sha_req_ctx));
 
        return 0;
 }
 
 static int ccp_hmac_sha_cra_init(struct crypto_tfm *tfm)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_tfm_ctx_dma(tfm);
        struct ccp_crypto_ahash_alg *alg = ccp_crypto_ahash_alg(tfm);
        struct crypto_shash *hmac_tfm;
 
 
 static void ccp_hmac_sha_cra_exit(struct crypto_tfm *tfm)
 {
-       struct ccp_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct ccp_ctx *ctx = crypto_tfm_ctx_dma(tfm);
 
        if (ctx->u.sha.hmac_tfm)
                crypto_free_shash(ctx->u.sha.hmac_tfm);
                          CRYPTO_ALG_KERN_DRIVER_ONLY |
                          CRYPTO_ALG_NEED_FALLBACK;
        base->cra_blocksize = def->block_size;
-       base->cra_ctxsize = sizeof(struct ccp_ctx);
+       base->cra_ctxsize = sizeof(struct ccp_ctx) + crypto_dma_padding();
        base->cra_priority = CCP_CRA_PRIORITY;
        base->cra_init = ccp_sha_cra_init;
        base->cra_exit = ccp_sha_cra_exit;