Skip to content

Commit 8fb203c

Browse files
gcabidduherbertx
authored andcommitted
crypto: qat - honor CRYPTO_TFM_REQ_MAY_SLEEP flag
If a request has the flag CRYPTO_TFM_REQ_MAY_SLEEP set, allocate memory using the flag GFP_KERNEL otherwise use GFP_ATOMIC. Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Adam Guerin <adam.guerin@intel.com> Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 2acbb87 commit 8fb203c

3 files changed

Lines changed: 27 additions & 14 deletions

File tree

drivers/crypto/qat/qat_common/qat_algs.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,8 @@ static void qat_alg_free_bufl(struct qat_crypto_instance *inst,
703703
static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
704704
struct scatterlist *sgl,
705705
struct scatterlist *sglout,
706-
struct qat_crypto_request *qat_req)
706+
struct qat_crypto_request *qat_req,
707+
gfp_t flags)
707708
{
708709
struct device *dev = &GET_DEV(inst->accel_dev);
709710
int i, sg_nctr = 0;
@@ -723,7 +724,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
723724
qat_req->buf.sgl_dst_valid = false;
724725

725726
if (n > QAT_MAX_BUFF_DESC) {
726-
bufl = kzalloc_node(sz, GFP_ATOMIC, node);
727+
bufl = kzalloc_node(sz, flags, node);
727728
if (unlikely(!bufl))
728729
return -ENOMEM;
729730
} else {
@@ -765,7 +766,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst,
765766
sg_nctr = 0;
766767

767768
if (n > QAT_MAX_BUFF_DESC) {
768-
buflout = kzalloc_node(sz_out, GFP_ATOMIC, node);
769+
buflout = kzalloc_node(sz_out, flags, node);
769770
if (unlikely(!buflout))
770771
goto err_in;
771772
} else {
@@ -966,14 +967,15 @@ static int qat_alg_aead_dec(struct aead_request *areq)
966967
struct icp_qat_fw_la_auth_req_params *auth_param;
967968
struct icp_qat_fw_la_bulk_req *msg;
968969
int digst_size = crypto_aead_authsize(aead_tfm);
970+
gfp_t f = qat_algs_alloc_flags(&areq->base);
969971
int ret;
970972
u32 cipher_len;
971973

972974
cipher_len = areq->cryptlen - digst_size;
973975
if (cipher_len % AES_BLOCK_SIZE != 0)
974976
return -EINVAL;
975977

976-
ret = qat_alg_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req);
978+
ret = qat_alg_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req, f);
977979
if (unlikely(ret))
978980
return ret;
979981

@@ -1008,14 +1010,15 @@ static int qat_alg_aead_enc(struct aead_request *areq)
10081010
struct qat_crypto_request *qat_req = aead_request_ctx(areq);
10091011
struct icp_qat_fw_la_cipher_req_params *cipher_param;
10101012
struct icp_qat_fw_la_auth_req_params *auth_param;
1013+
gfp_t f = qat_algs_alloc_flags(&areq->base);
10111014
struct icp_qat_fw_la_bulk_req *msg;
10121015
u8 *iv = areq->iv;
10131016
int ret;
10141017

10151018
if (areq->cryptlen % AES_BLOCK_SIZE != 0)
10161019
return -EINVAL;
10171020

1018-
ret = qat_alg_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req);
1021+
ret = qat_alg_sgl_to_bufl(ctx->inst, areq->src, areq->dst, qat_req, f);
10191022
if (unlikely(ret))
10201023
return ret;
10211024

@@ -1193,13 +1196,14 @@ static int qat_alg_skcipher_encrypt(struct skcipher_request *req)
11931196
struct qat_alg_skcipher_ctx *ctx = crypto_tfm_ctx(tfm);
11941197
struct qat_crypto_request *qat_req = skcipher_request_ctx(req);
11951198
struct icp_qat_fw_la_cipher_req_params *cipher_param;
1199+
gfp_t f = qat_algs_alloc_flags(&req->base);
11961200
struct icp_qat_fw_la_bulk_req *msg;
11971201
int ret;
11981202

11991203
if (req->cryptlen == 0)
12001204
return 0;
12011205

1202-
ret = qat_alg_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req);
1206+
ret = qat_alg_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req, f);
12031207
if (unlikely(ret))
12041208
return ret;
12051209

@@ -1258,13 +1262,14 @@ static int qat_alg_skcipher_decrypt(struct skcipher_request *req)
12581262
struct qat_alg_skcipher_ctx *ctx = crypto_tfm_ctx(tfm);
12591263
struct qat_crypto_request *qat_req = skcipher_request_ctx(req);
12601264
struct icp_qat_fw_la_cipher_req_params *cipher_param;
1265+
gfp_t f = qat_algs_alloc_flags(&req->base);
12611266
struct icp_qat_fw_la_bulk_req *msg;
12621267
int ret;
12631268

12641269
if (req->cryptlen == 0)
12651270
return 0;
12661271

1267-
ret = qat_alg_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req);
1272+
ret = qat_alg_sgl_to_bufl(ctx->inst, req->src, req->dst, qat_req, f);
12681273
if (unlikely(ret))
12691274
return ret;
12701275

drivers/crypto/qat/qat_common/qat_asym_algs.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,10 @@ static int qat_dh_compute_value(struct kpp_request *req)
224224
struct qat_asym_request *qat_req =
225225
PTR_ALIGN(kpp_request_ctx(req), 64);
226226
struct icp_qat_fw_pke_request *msg = &qat_req->req;
227-
int ret;
227+
gfp_t flags = qat_algs_alloc_flags(&req->base);
228228
int n_input_params = 0;
229229
u8 *vaddr;
230+
int ret;
230231

231232
if (unlikely(!ctx->xa))
232233
return -EINVAL;
@@ -291,7 +292,7 @@ static int qat_dh_compute_value(struct kpp_request *req)
291292
} else {
292293
int shift = ctx->p_size - req->src_len;
293294

294-
qat_req->src_align = kzalloc(ctx->p_size, GFP_KERNEL);
295+
qat_req->src_align = kzalloc(ctx->p_size, flags);
295296
if (unlikely(!qat_req->src_align))
296297
return ret;
297298

@@ -317,7 +318,7 @@ static int qat_dh_compute_value(struct kpp_request *req)
317318
qat_req->dst_align = NULL;
318319
vaddr = sg_virt(req->dst);
319320
} else {
320-
qat_req->dst_align = kzalloc(ctx->p_size, GFP_KERNEL);
321+
qat_req->dst_align = kzalloc(ctx->p_size, flags);
321322
if (unlikely(!qat_req->dst_align))
322323
goto unmap_src;
323324

@@ -650,6 +651,7 @@ static int qat_rsa_enc(struct akcipher_request *req)
650651
struct qat_asym_request *qat_req =
651652
PTR_ALIGN(akcipher_request_ctx(req), 64);
652653
struct icp_qat_fw_pke_request *msg = &qat_req->req;
654+
gfp_t flags = qat_algs_alloc_flags(&req->base);
653655
u8 *vaddr;
654656
int ret;
655657

@@ -696,7 +698,7 @@ static int qat_rsa_enc(struct akcipher_request *req)
696698
} else {
697699
int shift = ctx->key_sz - req->src_len;
698700

699-
qat_req->src_align = kzalloc(ctx->key_sz, GFP_KERNEL);
701+
qat_req->src_align = kzalloc(ctx->key_sz, flags);
700702
if (unlikely(!qat_req->src_align))
701703
return ret;
702704

@@ -714,7 +716,7 @@ static int qat_rsa_enc(struct akcipher_request *req)
714716
qat_req->dst_align = NULL;
715717
vaddr = sg_virt(req->dst);
716718
} else {
717-
qat_req->dst_align = kzalloc(ctx->key_sz, GFP_KERNEL);
719+
qat_req->dst_align = kzalloc(ctx->key_sz, flags);
718720
if (unlikely(!qat_req->dst_align))
719721
goto unmap_src;
720722
vaddr = qat_req->dst_align;
@@ -783,6 +785,7 @@ static int qat_rsa_dec(struct akcipher_request *req)
783785
struct qat_asym_request *qat_req =
784786
PTR_ALIGN(akcipher_request_ctx(req), 64);
785787
struct icp_qat_fw_pke_request *msg = &qat_req->req;
788+
gfp_t flags = qat_algs_alloc_flags(&req->base);
786789
u8 *vaddr;
787790
int ret;
788791

@@ -839,7 +842,7 @@ static int qat_rsa_dec(struct akcipher_request *req)
839842
} else {
840843
int shift = ctx->key_sz - req->src_len;
841844

842-
qat_req->src_align = kzalloc(ctx->key_sz, GFP_KERNEL);
845+
qat_req->src_align = kzalloc(ctx->key_sz, flags);
843846
if (unlikely(!qat_req->src_align))
844847
return ret;
845848

@@ -857,7 +860,7 @@ static int qat_rsa_dec(struct akcipher_request *req)
857860
qat_req->dst_align = NULL;
858861
vaddr = sg_virt(req->dst);
859862
} else {
860-
qat_req->dst_align = kzalloc(ctx->key_sz, GFP_KERNEL);
863+
qat_req->dst_align = kzalloc(ctx->key_sz, flags);
861864
if (unlikely(!qat_req->dst_align))
862865
goto unmap_src;
863866
vaddr = qat_req->dst_align;

drivers/crypto/qat/qat_common/qat_crypto.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,9 @@ static inline bool adf_hw_dev_has_crypto(struct adf_accel_dev *accel_dev)
109109
return true;
110110
}
111111

112+
static inline gfp_t qat_algs_alloc_flags(struct crypto_async_request *req)
113+
{
114+
return req->flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC;
115+
}
116+
112117
#endif

0 commit comments

Comments
 (0)