From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from huawei.com (unknown [45.249.212.255]) by dpdk.org (Postfix) with ESMTP id EA78B1BEA2; Tue, 3 Jul 2018 14:29:21 +0200 (CEST) Received: from DGGEMM404-HUB.china.huawei.com (unknown [172.30.72.56]) by Forcepoint Email with ESMTP id C82C180E27691; Tue, 3 Jul 2018 20:29:19 +0800 (CST) Received: from DGGEMM508-MBX.china.huawei.com ([169.254.2.165]) by DGGEMM404-HUB.china.huawei.com ([10.3.20.212]) with mapi id 14.03.0382.000; Tue, 3 Jul 2018 20:29:19 +0800 From: "Zhoujian (jay)" To: Fan Zhang , "dev@dpdk.org" CC: "pablo.de.lara.guarch@intel.com" , "stable@dpdk.org" Thread-Topic: [PATCH v2] crypto/virtio: fix iv physical address Thread-Index: AQHUDPQyRR8Vr8SiHEiKM9oF3+dZyqR9bqzQ Date: Tue, 3 Jul 2018 12:29:18 +0000 Message-ID: References: <20180614110257.10967-1-roy.fan.zhang@intel.com> <20180626021048.79280-1-roy.fan.zhang@intel.com> In-Reply-To: <20180626021048.79280-1-roy.fan.zhang@intel.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.177.19.14] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-CFilter-Loop: Reflected Subject: Re: [dpdk-dev] [PATCH v2] crypto/virtio: fix iv physical address X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2018 12:29:22 -0000 > -----Original Message----- > From: Fan Zhang [mailto:roy.fan.zhang@intel.com] > Sent: Tuesday, June 26, 2018 10:11 AM > To: dev@dpdk.org > Cc: pablo.de.lara.guarch@intel.com; Zhoujian (jay) ; > stable@dpdk.org > Subject: [PATCH v2] crypto/virtio: fix iv physical address >=20 > The physical address of IV required by Virtio was computed using crypto > operations' physical address plus the offset. However not all crypto ops = will > have physical address field initialized and compute it runtimely is costl= y. > This patch fixes this problem by adding iv field in virtio_crypto_op_cook= ie > and does a memcpy of iv instead. >=20 > Fixes: 82adb12a1fce ("crypto/virtio: support burst enqueue/dequeue") > Cc: stable@dpdk.org >=20 > Signed-off-by: Fan Zhang > --- >=20 > v2: > - change max iv size to 16 > - use branch to avoid unnecessary memcpy >=20 > drivers/crypto/virtio/virtio_cryptodev.c | 6 ++++++ > drivers/crypto/virtio/virtio_cryptodev.h | 3 +++ > drivers/crypto/virtio/virtio_rxtx.c | 14 +++++++++++++- > 3 files changed, 22 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/crypto/virtio/virtio_cryptodev.c > b/drivers/crypto/virtio/virtio_cryptodev.c > index df88953f6..6ffa7619c 100644 > --- a/drivers/crypto/virtio/virtio_cryptodev.c > +++ b/drivers/crypto/virtio/virtio_cryptodev.c > @@ -1223,6 +1223,12 @@ virtio_crypto_sym_pad_op_ctrl_req( > /* Get cipher xform from crypto xform chain */ > cipher_xform =3D virtio_crypto_get_cipher_xform(xform); > if (cipher_xform) { > + if (cipher_xform->iv.length > VIRTIO_CRYPTO_MAX_IV_SIZE) { > + VIRTIO_CRYPTO_SESSION_LOG_ERR( > + "cipher IV cannot longer than %u", Hi Fan, As I mentioned in V1, do you agree to use "cipher IV length" or "cipher IV size" instead of "cipher IV" here? Apart from that,=20 Reviewed-by: > + VIRTIO_CRYPTO_MAX_IV_SIZE); > + return -1; > + } > if (is_chainned) > ret =3D virtio_crypto_sym_pad_cipher_param( > &ctrl->u.sym_create_session.u.chain.para > diff --git a/drivers/crypto/virtio/virtio_cryptodev.h > b/drivers/crypto/virtio/virtio_cryptodev.h > index e402c0309..0fd7b722e 100644 > --- a/drivers/crypto/virtio/virtio_cryptodev.h > +++ b/drivers/crypto/virtio/virtio_cryptodev.h > @@ -16,6 +16,8 @@ >=20 > #define NUM_ENTRY_VIRTIO_CRYPTO_OP 7 >=20 > +#define VIRTIO_CRYPTO_MAX_IV_SIZE 16 > + > extern uint8_t cryptodev_virtio_driver_id; >=20 > enum virtio_crypto_cmd_id { > @@ -29,6 +31,7 @@ struct virtio_crypto_op_cookie { > struct virtio_crypto_op_data_req data_req; > struct virtio_crypto_inhdr inhdr; > struct vring_desc desc[NUM_ENTRY_VIRTIO_CRYPTO_OP]; > + uint8_t iv[VIRTIO_CRYPTO_MAX_IV_SIZE]; > }; >=20 > /* > diff --git a/drivers/crypto/virtio/virtio_rxtx.c > b/drivers/crypto/virtio/virtio_rxtx.c > index 450392843..4f695f3e6 100644 > --- a/drivers/crypto/virtio/virtio_rxtx.c > +++ b/drivers/crypto/virtio/virtio_rxtx.c > @@ -203,6 +203,8 @@ virtqueue_crypto_sym_enqueue_xmit( > uint16_t req_data_len =3D sizeof(struct virtio_crypto_op_data_req); > uint32_t indirect_vring_addr_offset =3D req_data_len + > sizeof(struct virtio_crypto_inhdr); > + uint32_t indirect_iv_addr_offset =3D indirect_vring_addr_offset + > + sizeof(struct vring_desc) * NUM_ENTRY_VIRTIO_CRYPTO_OP; > struct rte_crypto_sym_op *sym_op =3D cop->sym; > struct virtio_crypto_session *session =3D > (struct virtio_crypto_session *)get_session_private_data( @@ - > 259,7 +261,17 @@ virtqueue_crypto_sym_enqueue_xmit( >=20 > /* indirect vring: iv of cipher */ > if (session->iv.length) { > - desc[idx].addr =3D cop->phys_addr + session->iv.offset; > + if (cop->phys_addr) > + desc[idx].addr =3D cop->phys_addr + session->iv.offset; > + else { > + rte_memcpy(crypto_op_cookie->iv, > + rte_crypto_op_ctod_offset(cop, > + uint8_t *, session->iv.offset), > + session->iv.length); > + desc[idx].addr =3D indirect_op_data_req_phys_addr + > + indirect_iv_addr_offset; > + } > + > desc[idx].len =3D session->iv.length; > desc[idx++].flags =3D VRING_DESC_F_NEXT; > } > -- > 2.13.6