Hi Cheng, Thanks for catching the issue. It was an accident, that I thought I had resolved already :)
This is fixed now. Maxime On 7/12/21 8:53 AM, Jiang, Cheng1 wrote: > Hi Maxime, > > I have noticed you changed the state this patch to Superseded. > So are you going to submit a new version of this patch? > > Thanks, > Cheng > >> -----Original Message----- >> From: Jiang, Cheng1 >> Sent: Wednesday, July 7, 2021 7:11 PM >> To: Maxime Coquelin <maxime.coque...@redhat.com>; dev@dpdk.org; Xia, >> Chenbo <chenbo....@intel.com> >> Cc: sta...@dpdk.org >> Subject: RE: [PATCH v2] vhost: fix assuming packed ring size is a power of 2 >> >> Hi Maxime, >> >> I have also noticed the wrong calculation here, thanks for the timely help. >> >> Thanks, >> Cheng >> >>> -----Original Message----- >>> From: Maxime Coquelin <maxime.coque...@redhat.com> >>> Sent: Wednesday, July 7, 2021 6:30 PM >>> To: dev@dpdk.org; Jiang, Cheng1 <cheng1.ji...@intel.com>; Xia, Chenbo >>> <chenbo....@intel.com> >>> Cc: Maxime Coquelin <maxime.coque...@redhat.com>; sta...@dpdk.org >>> Subject: [PATCH v2] vhost: fix assuming packed ring size is a power of >>> 2 >>> >>> Unlike split ring, packed ring does not mandate the ring size to be a >>> power of 2. So we have to use a modulo operation when wrapping ring >> index. >>> >>> Fixes: 873e8dad6f49 ("vhost: support packed ring in async datapath") >>> Cc: sta...@dpdk.org >>> >>> Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> >>> --- >>> >>> V2: Also fix wrapping in virtio_dev_rx_async_get_info_idx which is >>> used in the packed ring data path. >>> >>> lib/vhost/virtio_net.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c index >>> b93482587c..0de5231db7 100644 >>> --- a/lib/vhost/virtio_net.c >>> +++ b/lib/vhost/virtio_net.c >>> @@ -1470,7 +1470,7 @@ virtio_dev_rx_async_get_info_idx(uint16_t >>> pkts_idx, >>> uint16_t vq_size, uint16_t n_inflight) { >>> return pkts_idx > n_inflight ? (pkts_idx - n_inflight) : >>> - (vq_size - n_inflight + pkts_idx) & (vq_size - 1); >>> + (vq_size - n_inflight + pkts_idx) % vq_size; >>> } >>> >>> static __rte_always_inline void >>> @@ -2131,7 +2131,7 @@ uint16_t rte_vhost_poll_enqueue_completed(int >>> vid, uint16_t queue_id, >>> >>> if (vq_is_packed(dev)) { >>> for (i = 0; i < n_pkts_put; i++) { >>> - from = (start_idx + i) & (vq_size - 1); >>> + from = (start_idx + i) % vq_size; >>> n_buffers += pkts_info[from].nr_buffers; >>> pkts[i] = pkts_info[from].mbuf; >>> } >>> -- >>> 2.31.1 >> >> >> Acked-by: Cheng Jiang <cheng1.ji...@intel.com> >