X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcrypto%2Fvirtio%2Fvirtio_rxtx.c;h=e32a1ecd6eea2f9e02a9d2a477f59ee346e13e08;hb=86123c2dfb94416b4fb17e07bf31d32172308623;hp=4503928438f9a583797d6e216171afe413f70294;hpb=82adb12a1fce1a8a45da2f8d72a56ba1f640c9d6;p=dpdk.git diff --git a/drivers/crypto/virtio/virtio_rxtx.c b/drivers/crypto/virtio/virtio_rxtx.c index 4503928438..e32a1ecd6e 100644 --- a/drivers/crypto/virtio/virtio_rxtx.c +++ b/drivers/crypto/virtio/virtio_rxtx.c @@ -203,9 +203,11 @@ virtqueue_crypto_sym_enqueue_xmit( uint16_t req_data_len = sizeof(struct virtio_crypto_op_data_req); uint32_t indirect_vring_addr_offset = req_data_len + sizeof(struct virtio_crypto_inhdr); + uint32_t indirect_iv_addr_offset = indirect_vring_addr_offset + + sizeof(struct vring_desc) * NUM_ENTRY_VIRTIO_CRYPTO_OP; struct rte_crypto_sym_op *sym_op = cop->sym; struct virtio_crypto_session *session = - (struct virtio_crypto_session *)get_session_private_data( + (struct virtio_crypto_session *)get_sym_session_private_data( cop->sym->session, cryptodev_virtio_driver_id); struct virtio_crypto_op_data_req *op_data_req; uint32_t hash_result_len = 0; @@ -259,7 +261,17 @@ virtqueue_crypto_sym_enqueue_xmit( /* indirect vring: iv of cipher */ if (session->iv.length) { - desc[idx].addr = cop->phys_addr + session->iv.offset; + if (cop->phys_addr) + desc[idx].addr = 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 = indirect_op_data_req_phys_addr + + indirect_iv_addr_offset; + } + desc[idx].len = session->iv.length; desc[idx++].flags = VRING_DESC_F_NEXT; }