crypto: qat - change bufferlist logic interface
authorGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Mon, 28 Nov 2022 12:21:14 +0000 (12:21 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 9 Dec 2022 10:44:59 +0000 (18:44 +0800)
The functions qat_alg_sgl_to_bufl() and qat_alg_free_bufl() take as
argument a qat_crypto_instance and a qat_crypto_request structure.
These two structures are used only to get a reference to the
adf_accel_dev and qat_crypto_request_buffs.

In order to reuse these functions for the compression service, change
the signature so that they take adf_accel_dev and
qat_crypto_request_buffs.

Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
Reviewed-by: Adam Guerin <adam.guerin@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/qat/qat_common/qat_algs.c
drivers/crypto/qat/qat_common/qat_bl.c
drivers/crypto/qat/qat_common/qat_bl.h

index 3e7e9fffe28b32519caab98c4dda036ad44daff6..dfa65e42db7814101efcfc4b110ebae91871f05d 100644 (file)
@@ -673,7 +673,7 @@ static void qat_aead_alg_callback(struct icp_qat_fw_la_resp *qat_resp,
        u8 stat_filed = qat_resp->comn_resp.comn_status;
        int res = 0, qat_res = ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(stat_filed);
 
-       qat_bl_free_bufl(inst, qat_req);
+       qat_bl_free_bufl(inst->accel_dev, &qat_req->buf);
        if (unlikely(qat_res != ICP_QAT_FW_COMN_STATUS_FLAG_OK))
                res = -EBADMSG;
        areq->base.complete(&areq->base, res);
@@ -743,7 +743,7 @@ static void qat_skcipher_alg_callback(struct icp_qat_fw_la_resp *qat_resp,
        u8 stat_filed = qat_resp->comn_resp.comn_status;
        int res = 0, qat_res = ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(stat_filed);
 
-       qat_bl_free_bufl(inst, qat_req);
+       qat_bl_free_bufl(inst->accel_dev, &qat_req->buf);
        if (unlikely(qat_res != ICP_QAT_FW_COMN_STATUS_FLAG_OK))
                res = -EINVAL;
 
@@ -799,7 +799,8 @@ static int qat_alg_aead_dec(struct aead_request *areq)
        if (cipher_len % AES_BLOCK_SIZE != 0)
                return -EINVAL;
 
-       ret = qat_bl_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req, f);
+       ret = qat_bl_sgl_to_bufl(ctx->inst->accel_dev, areq->src, areq->dst,
+                                &qat_req->buf, f);
        if (unlikely(ret))
                return ret;
 
@@ -821,7 +822,7 @@ static int qat_alg_aead_dec(struct aead_request *areq)
 
        ret = qat_alg_send_sym_message(qat_req, ctx->inst, &areq->base);
        if (ret == -ENOSPC)
-               qat_bl_free_bufl(ctx->inst, qat_req);
+               qat_bl_free_bufl(ctx->inst->accel_dev, &qat_req->buf);
 
        return ret;
 }
@@ -842,7 +843,8 @@ static int qat_alg_aead_enc(struct aead_request *areq)
        if (areq->cryptlen % AES_BLOCK_SIZE != 0)
                return -EINVAL;
 
-       ret = qat_bl_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req, f);
+       ret = qat_bl_sgl_to_bufl(ctx->inst->accel_dev, areq->src, areq->dst,
+                                &qat_req->buf, f);
        if (unlikely(ret))
                return ret;
 
@@ -866,7 +868,7 @@ static int qat_alg_aead_enc(struct aead_request *areq)
 
        ret = qat_alg_send_sym_message(qat_req, ctx->inst, &areq->base);
        if (ret == -ENOSPC)
-               qat_bl_free_bufl(ctx->inst, qat_req);
+               qat_bl_free_bufl(ctx->inst->accel_dev, &qat_req->buf);
 
        return ret;
 }
@@ -1027,7 +1029,8 @@ static int qat_alg_skcipher_encrypt(struct skcipher_request *req)
        if (req->cryptlen == 0)
                return 0;
 
-       ret = qat_bl_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req, f);
+       ret = qat_bl_sgl_to_bufl(ctx->inst->accel_dev, req->src, req->dst,
+                                &qat_req->buf, f);
        if (unlikely(ret))
                return ret;
 
@@ -1048,7 +1051,7 @@ static int qat_alg_skcipher_encrypt(struct skcipher_request *req)
 
        ret = qat_alg_send_sym_message(qat_req, ctx->inst, &req->base);
        if (ret == -ENOSPC)
-               qat_bl_free_bufl(ctx->inst, qat_req);
+               qat_bl_free_bufl(ctx->inst->accel_dev, &qat_req->buf);
 
        return ret;
 }
@@ -1093,7 +1096,8 @@ static int qat_alg_skcipher_decrypt(struct skcipher_request *req)
        if (req->cryptlen == 0)
                return 0;
 
-       ret = qat_bl_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req, f);
+       ret = qat_bl_sgl_to_bufl(ctx->inst->accel_dev, req->src, req->dst,
+                                &qat_req->buf, f);
        if (unlikely(ret))
                return ret;
 
@@ -1115,7 +1119,7 @@ static int qat_alg_skcipher_decrypt(struct skcipher_request *req)
 
        ret = qat_alg_send_sym_message(qat_req, ctx->inst, &req->base);
        if (ret == -ENOSPC)
-               qat_bl_free_bufl(ctx->inst, qat_req);
+               qat_bl_free_bufl(ctx->inst->accel_dev, &qat_req->buf);
 
        return ret;
 }
index 8f7743f3c89b9ace030dab6fa3bab8a624c28618..5e319887f8d699ca096705096f682d5fef75bfc0 100644 (file)
 #include "qat_bl.h"
 #include "qat_crypto.h"
 
-void qat_bl_free_bufl(struct qat_crypto_instance *inst,
-                     struct qat_crypto_request *qat_req)
+void qat_bl_free_bufl(struct adf_accel_dev *accel_dev,
+                     struct qat_crypto_request_buffs *buf)
 {
-       struct device *dev = &GET_DEV(inst->accel_dev);
-       struct qat_alg_buf_list *bl = qat_req->buf.bl;
-       struct qat_alg_buf_list *blout = qat_req->buf.blout;
-       dma_addr_t blp = qat_req->buf.blp;
-       dma_addr_t blpout = qat_req->buf.bloutp;
-       size_t sz = qat_req->buf.sz;
-       size_t sz_out = qat_req->buf.sz_out;
+       struct device *dev = &GET_DEV(accel_dev);
+       struct qat_alg_buf_list *bl = buf->bl;
+       struct qat_alg_buf_list *blout = buf->blout;
+       dma_addr_t blp = buf->blp;
+       dma_addr_t blpout = buf->bloutp;
+       size_t sz = buf->sz;
+       size_t sz_out = buf->sz_out;
        int bl_dma_dir;
        int i;
 
@@ -31,7 +31,7 @@ void qat_bl_free_bufl(struct qat_crypto_instance *inst,
 
        dma_unmap_single(dev, blp, sz, DMA_TO_DEVICE);
 
-       if (!qat_req->buf.sgl_src_valid)
+       if (!buf->sgl_src_valid)
                kfree(bl);
 
        if (blp != blpout) {
@@ -45,18 +45,18 @@ void qat_bl_free_bufl(struct qat_crypto_instance *inst,
                }
                dma_unmap_single(dev, blpout, sz_out, DMA_TO_DEVICE);
 
-               if (!qat_req->buf.sgl_dst_valid)
+               if (!buf->sgl_dst_valid)
                        kfree(blout);
        }
 }
 
-int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
+int qat_bl_sgl_to_bufl(struct adf_accel_dev *accel_dev,
                       struct scatterlist *sgl,
                       struct scatterlist *sglout,
-                      struct qat_crypto_request *qat_req,
+                      struct qat_crypto_request_buffs *buf,
                       gfp_t flags)
 {
-       struct device *dev = &GET_DEV(inst->accel_dev);
+       struct device *dev = &GET_DEV(accel_dev);
        int i, sg_nctr = 0;
        int n = sg_nents(sgl);
        struct qat_alg_buf_list *bufl;
@@ -65,23 +65,23 @@ int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
        dma_addr_t bloutp = DMA_MAPPING_ERROR;
        struct scatterlist *sg;
        size_t sz_out, sz = struct_size(bufl, bufers, n);
-       int node = dev_to_node(&GET_DEV(inst->accel_dev));
+       int node = dev_to_node(&GET_DEV(accel_dev));
        int bufl_dma_dir;
 
        if (unlikely(!n))
                return -EINVAL;
 
-       qat_req->buf.sgl_src_valid = false;
-       qat_req->buf.sgl_dst_valid = false;
+       buf->sgl_src_valid = false;
+       buf->sgl_dst_valid = false;
 
        if (n > QAT_MAX_BUFF_DESC) {
                bufl = kzalloc_node(sz, flags, node);
                if (unlikely(!bufl))
                        return -ENOMEM;
        } else {
-               bufl = &qat_req->buf.sgl_src.sgl_hdr;
+               bufl = &buf->sgl_src.sgl_hdr;
                memset(bufl, 0, sizeof(struct qat_alg_buf_list));
-               qat_req->buf.sgl_src_valid = true;
+               buf->sgl_src_valid = true;
        }
 
        bufl_dma_dir = sgl != sglout ? DMA_TO_DEVICE : DMA_BIDIRECTIONAL;
@@ -107,9 +107,9 @@ int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
        blp = dma_map_single(dev, bufl, sz, DMA_TO_DEVICE);
        if (unlikely(dma_mapping_error(dev, blp)))
                goto err_in;
-       qat_req->buf.bl = bufl;
-       qat_req->buf.blp = blp;
-       qat_req->buf.sz = sz;
+       buf->bl = bufl;
+       buf->blp = blp;
+       buf->sz = sz;
        /* Handle out of place operation */
        if (sgl != sglout) {
                struct qat_alg_buf *bufers;
@@ -123,9 +123,9 @@ int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
                        if (unlikely(!buflout))
                                goto err_in;
                } else {
-                       buflout = &qat_req->buf.sgl_dst.sgl_hdr;
+                       buflout = &buf->sgl_dst.sgl_hdr;
                        memset(buflout, 0, sizeof(struct qat_alg_buf_list));
-                       qat_req->buf.sgl_dst_valid = true;
+                       buf->sgl_dst_valid = true;
                }
 
                bufers = buflout->bufers;
@@ -151,13 +151,13 @@ int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
                bloutp = dma_map_single(dev, buflout, sz_out, DMA_TO_DEVICE);
                if (unlikely(dma_mapping_error(dev, bloutp)))
                        goto err_out;
-               qat_req->buf.blout = buflout;
-               qat_req->buf.bloutp = bloutp;
-               qat_req->buf.sz_out = sz_out;
+               buf->blout = buflout;
+               buf->bloutp = bloutp;
+               buf->sz_out = sz_out;
        } else {
                /* Otherwise set the src and dst to the same address */
-               qat_req->buf.bloutp = qat_req->buf.blp;
-               qat_req->buf.sz_out = 0;
+               buf->bloutp = buf->blp;
+               buf->sz_out = 0;
        }
        return 0;
 
@@ -172,7 +172,7 @@ err_out:
                                         buflout->bufers[i].len,
                                         DMA_FROM_DEVICE);
 
-       if (!qat_req->buf.sgl_dst_valid)
+       if (!buf->sgl_dst_valid)
                kfree(buflout);
 
 err_in:
@@ -186,7 +186,7 @@ err_in:
                                         bufl->bufers[i].len,
                                         bufl_dma_dir);
 
-       if (!qat_req->buf.sgl_src_valid)
+       if (!buf->sgl_src_valid)
                kfree(bufl);
 
        dev_err(dev, "Failed to map buf for dma\n");
index ed4c200ac619782fdaf8044e0708e5655307b544..241299c219dd55631a5abda886768fd72bc10ff5 100644 (file)
@@ -6,12 +6,12 @@
 #include <linux/types.h>
 #include "qat_crypto.h"
 
-void qat_bl_free_bufl(struct qat_crypto_instance *inst,
-                     struct qat_crypto_request *qat_req);
-int qat_bl_sgl_to_bufl(struct qat_crypto_instance *inst,
+void qat_bl_free_bufl(struct adf_accel_dev *accel_dev,
+                     struct qat_crypto_request_buffs *buf);
+int qat_bl_sgl_to_bufl(struct adf_accel_dev *accel_dev,
                       struct scatterlist *sgl,
                       struct scatterlist *sglout,
-                      struct qat_crypto_request *qat_req,
+                      struct qat_crypto_request_buffs *buf,
                       gfp_t flags);
 
 #endif