vhost: fix async completion of multi-seg packets
authorPatrick Fu <patrick.fu@intel.com>
Tue, 21 Jul 2020 05:47:20 +0000 (13:47 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 21 Jul 2020 14:54:58 +0000 (16:54 +0200)
commit47958f7cbf74dc59a22a7aec2b65cd721679ca52
tree6a0930790f2b49bff02911c29d38abb6c6898834
parent5c7ddd6b14eddeb540cc28d0fc8b5d411f9d7661
vhost: fix async completion of multi-seg packets

In async enqueue copy, a packet could be split into multiple copy
segments. When polling the copy completion status, current async data
path assumes the async device callbacks are aware of the packet
boundary and return completed segments only if all segments belonging
to the same packet are done. Such assumption are not generic to common
async devices and may degrade the copy performance if async callbacks
have to implement it in software manner.

This patch adds tracking of the completed copy segments at vhost side.
If async copy device reports partial completion of a packets, only
vhost internal record is updated and vring status keeps unchanged
until remaining segments of the packet are also finished. The async
copy device is no longer necessary to care about the packet boundary.

Fixes: cd6760da1076 ("vhost: introduce async enqueue for split ring")

Signed-off-by: Patrick Fu <patrick.fu@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
lib/librte_vhost/vhost.h
lib/librte_vhost/virtio_net.c