Hi Maxime, > -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Wednesday, October 27, 2021 12:29 AM > To: dev@dpdk.org; Xia, Chenbo <chenbo....@intel.com>; Hu, Jiayu > <jiayu...@intel.com>; Wang, YuanX <yuanx.w...@intel.com>; Ma, WenwuX > <wenwux...@intel.com>; Richardson, Bruce <bruce.richard...@intel.com>; > Mcnamara, John <john.mcnam...@intel.com> > Cc: Maxime Coquelin <maxime.coque...@redhat.com> > Subject: [PATCH v2 01/15] vhost: move async data in a dedicated structure > > This patch moves async-related metadata from vhost_virtqueue > to a dedicated struct. It makes it clear which fields are > async related, and also saves some memory when async feature > is not in use. > > Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> > --- > lib/vhost/vhost.c | 130 +++++++++++++++++------------------------ > lib/vhost/vhost.h | 53 ++++++++--------- > lib/vhost/vhost_user.c | 4 +- > lib/vhost/virtio_net.c | 114 +++++++++++++++++++----------------- > 4 files changed, 142 insertions(+), 159 deletions(-) > > diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c > index 3b674ac320..452583f68d 100644 > --- a/lib/vhost/vhost.c > +++ b/lib/vhost/vhost.c > @@ -340,19 +340,18 @@ cleanup_device(struct virtio_net *dev, int destroy) > static void > vhost_free_async_mem(struct vhost_virtqueue *vq) > { > - rte_free(vq->async_pkts_info); > + if (!vq->async) > + return; > > - rte_free(vq->async_buffers_packed); > - vq->async_buffers_packed = NULL; > - rte_free(vq->async_descs_split); > - vq->async_descs_split = NULL; > + rte_free(vq->async->pkts_info); > > - rte_free(vq->it_pool); > - rte_free(vq->vec_pool); > + rte_free(vq->async->buffers_packed); > + vq->async->buffers_packed = NULL; > + rte_free(vq->async->descs_split); > + vq->async->descs_split = NULL; > > - vq->async_pkts_info = NULL; > - vq->it_pool = NULL; > - vq->vec_pool = NULL; > + rte_free(vq->async); > + vq->async = NULL; > } > > void > @@ -1632,77 +1631,63 @@ async_channel_register(int vid, uint16_t queue_id, > { > struct virtio_net *dev = get_device(vid); > struct vhost_virtqueue *vq = dev->virtqueue[queue_id]; > + struct vhost_async *async; > + int node = vq->numa_node; > > - if (unlikely(vq->async_registered)) { > + if (unlikely(vq->async)) { > VHOST_LOG_CONFIG(ERR, > - "async register failed: channel already registered " > - "(vid %d, qid: %d)\n", vid, queue_id); > + "async register failed: already registered (vid > %d, > qid: %d)\n",
qid: %u. It’s not related to your patch and there're other 'qid: %d'. So we can send another patch to fix all. For this patch: Reviewed-by: Chenbo Xia <chenbo....@intel.com>