> -----Original Message----- > From: Ouyang, Changchun > Sent: Wednesday, July 1, 2015 3:49 PM > To: dev at dpdk.org > Cc: Cao, Waterman; Xu, Qian Q; Ouyang, Changchun > Subject: [PATCH] virtio: fix the vq size issue > > This commit breaks virtio basic packets rx functionality: > d78deadae4dca240e85054bf2d604a801676becc > > The QEMU use 256 as default vring size, also use this default value to > calculate the virtio avail ring base address and used ring base address, and > vhost in the backend use the ring base address to do packet IO. > > Virtio spec also says the queue size in PCI configuration is read-only, so > virtio > front end can't change it. just need use the read-only value to allocate space > for vring and calculate the avail and used ring base address. Otherwise, the > avail and used ring base address will be different between host and guest, > accordingly, packet IO can't work normally. > > Signed-off-by: Changchun Ouyang <changchun.ouyang at intel.com> > --- > drivers/net/virtio/virtio_ethdev.c | 14 +++----------- > 1 file changed, 3 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/virtio/virtio_ethdev.c > b/drivers/net/virtio/virtio_ethdev.c > index fe5f9a1..d84de13 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -263,8 +263,6 @@ int virtio_dev_queue_setup(struct rte_eth_dev *dev, > */ > vq_size = VIRTIO_READ_REG_2(hw, VIRTIO_PCI_QUEUE_NUM); > PMD_INIT_LOG(DEBUG, "vq_size: %d nb_desc:%d", vq_size, > nb_desc); > - if (nb_desc == 0) > - nb_desc = vq_size; > if (vq_size == 0) { > PMD_INIT_LOG(ERR, "%s: virtqueue does not exist", > __func__); > return -EINVAL; > @@ -275,15 +273,9 @@ int virtio_dev_queue_setup(struct rte_eth_dev > *dev, > return -EINVAL; > } > > - if (nb_desc < vq_size) { > - if (!rte_is_power_of_2(nb_desc)) { > - PMD_INIT_LOG(ERR, > - "nb_desc(%u) size is not powerof 2", > - nb_desc); > - return -EINVAL; > - } > - vq_size = nb_desc; > - } > + if (nb_desc != vq_size) > + PMD_INIT_LOG(ERR, "Warning: nb_desc(%d) is not equal to > vq size (%d), fall to vq size", > + nb_desc, vq_size); > > if (queue_type == VTNET_RQ) { > snprintf(vq_name, sizeof(vq_name), "port%d_rvq%d", > -- > 1.8.4.2
Any more comments for this patch? Thanks Changchun