Ping? On Jan 19, 2016 5:16 PM, "Santosh Shukla" <sshukla at mvista.com> wrote:
> - virtio_recv_pkts_vec and other virtio vector friend apis are written for > sse/avx instructions. For arm64 in particular, virtio vector > implementation > does not exist(todo). > > So virtio pmd driver wont build for targets like i686, arm64. By making > RTE_VIRTIO_INC_VECTOR=n, Driver can build for non-sse/avx targets and will > work > in non-vectored virtio mode. > > Disabling RTE_VIRTIO_INC_VECTOR config for : > > - i686 arch as i686 target config says: > config/defconfig_i686-native-linuxapp-gcc says "Vectorized PMD is not > supported on 32-bit". > > - armv7/v8 arch. > > Signed-off-by: Santosh Shukla <sshukla at mvista.com> > --- > v4--> v5: > - squashed v4's RTE_VIRTIO_INC_VECTOR patches into one patch. > - Added ifdefs RTE_xx_xx_INC_VECTOR across _simple_rx_tx flag occurance in > code. > > > config/common_linuxapp | 1 + > config/defconfig_arm-armv7a-linuxapp-gcc | 4 +++- > config/defconfig_arm64-armv8a-linuxapp-gcc | 4 +++- > config/defconfig_i686-native-linuxapp-gcc | 1 + > config/defconfig_i686-native-linuxapp-icc | 1 + > drivers/net/virtio/Makefile | 2 +- > drivers/net/virtio/virtio_rxtx.c | 16 +++++++++++++++- > drivers/net/virtio/virtio_rxtx.h | 2 ++ > 8 files changed, 27 insertions(+), 4 deletions(-) > > diff --git a/config/common_linuxapp b/config/common_linuxapp > index 74bc515..8677697 100644 > --- a/config/common_linuxapp > +++ b/config/common_linuxapp > @@ -274,6 +274,7 @@ CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_RX=n > CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_TX=n > CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DRIVER=n > CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DUMP=n > +CONFIG_RTE_VIRTIO_INC_VECTOR=y > > # > # Compile burst-oriented VMXNET3 PMD driver > diff --git a/config/defconfig_arm-armv7a-linuxapp-gcc > b/config/defconfig_arm-armv7a-linuxapp-gcc > index cbebd64..9f852ce 100644 > --- a/config/defconfig_arm-armv7a-linuxapp-gcc > +++ b/config/defconfig_arm-armv7a-linuxapp-gcc > @@ -43,6 +43,9 @@ CONFIG_RTE_FORCE_INTRINSICS=y > CONFIG_RTE_TOOLCHAIN="gcc" > CONFIG_RTE_TOOLCHAIN_GCC=y > > +# Disable VIRTIO VECTOR support > +CONFIG_RTE_VIRTIO_INC_VECTOR=n > + > # ARM doesn't have support for vmware TSC map > CONFIG_RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT=n > > @@ -70,7 +73,6 @@ CONFIG_RTE_LIBRTE_I40E_PMD=n > CONFIG_RTE_LIBRTE_IXGBE_PMD=n > CONFIG_RTE_LIBRTE_MLX4_PMD=n > CONFIG_RTE_LIBRTE_MPIPE_PMD=n > -CONFIG_RTE_LIBRTE_VIRTIO_PMD=n > CONFIG_RTE_LIBRTE_VMXNET3_PMD=n > CONFIG_RTE_LIBRTE_PMD_XENVIRT=n > CONFIG_RTE_LIBRTE_PMD_BNX2X=n > diff --git a/config/defconfig_arm64-armv8a-linuxapp-gcc > b/config/defconfig_arm64-armv8a-linuxapp-gcc > index 504f3ed..1a638b3 100644 > --- a/config/defconfig_arm64-armv8a-linuxapp-gcc > +++ b/config/defconfig_arm64-armv8a-linuxapp-gcc > @@ -45,8 +45,10 @@ CONFIG_RTE_TOOLCHAIN_GCC=y > > CONFIG_RTE_CACHE_LINE_SIZE=64 > > +# Disable VIRTIO VECTOR support > +CONFIG_RTE_VIRTIO_INC_VECTOR=n > + > CONFIG_RTE_IXGBE_INC_VECTOR=n > -CONFIG_RTE_LIBRTE_VIRTIO_PMD=n > CONFIG_RTE_LIBRTE_IVSHMEM=n > CONFIG_RTE_LIBRTE_FM10K_PMD=n > CONFIG_RTE_LIBRTE_I40E_PMD=n > diff --git a/config/defconfig_i686-native-linuxapp-gcc > b/config/defconfig_i686-native-linuxapp-gcc > index a90de9b..a4b1c49 100644 > --- a/config/defconfig_i686-native-linuxapp-gcc > +++ b/config/defconfig_i686-native-linuxapp-gcc > @@ -49,3 +49,4 @@ CONFIG_RTE_LIBRTE_KNI=n > # Vectorized PMD is not supported on 32-bit > # > CONFIG_RTE_IXGBE_INC_VECTOR=n > +CONFIG_RTE_VIRTIO_INC_VECTOR=n > diff --git a/config/defconfig_i686-native-linuxapp-icc > b/config/defconfig_i686-native-linuxapp-icc > index c021321..f8eb6ad 100644 > --- a/config/defconfig_i686-native-linuxapp-icc > +++ b/config/defconfig_i686-native-linuxapp-icc > @@ -49,3 +49,4 @@ CONFIG_RTE_LIBRTE_KNI=n > # Vectorized PMD is not supported on 32-bit > # > CONFIG_RTE_IXGBE_INC_VECTOR=n > +CONFIG_RTE_VIRTIO_INC_VECTOR=n > diff --git a/drivers/net/virtio/Makefile b/drivers/net/virtio/Makefile > index 43835ba..25a842d 100644 > --- a/drivers/net/virtio/Makefile > +++ b/drivers/net/virtio/Makefile > @@ -50,7 +50,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtqueue.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_pci.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_ethdev.c > -SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_simple.c > +SRCS-$(CONFIG_RTE_VIRTIO_INC_VECTOR) += virtio_rxtx_simple.c > > # this lib depends upon: > DEPDIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += lib/librte_eal lib/librte_ether > diff --git a/drivers/net/virtio/virtio_rxtx.c > b/drivers/net/virtio/virtio_rxtx.c > index 41a1366..d8169d1 100644 > --- a/drivers/net/virtio/virtio_rxtx.c > +++ b/drivers/net/virtio/virtio_rxtx.c > @@ -67,7 +67,9 @@ > #define VIRTIO_SIMPLE_FLAGS ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS | \ > ETH_TXQ_FLAGS_NOOFFLOADS) > > +#ifdef RTE_VIRTIO_INC_VECTOR > static int use_simple_rxtx; > +#endif > > static void > vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx) > @@ -307,12 +309,13 @@ virtio_dev_vring_start(struct virtqueue *vq, int > queue_type) > nbufs = 0; > error = ENOSPC; > > +#ifdef RTE_VIRTIO_INC_VECTOR > if (use_simple_rxtx) > for (i = 0; i < vq->vq_nentries; i++) { > vq->vq_ring.avail->ring[i] = i; > vq->vq_ring.desc[i].flags = > VRING_DESC_F_WRITE; > } > - > +#endif > memset(&vq->fake_mbuf, 0, sizeof(vq->fake_mbuf)); > for (i = 0; i < RTE_PMD_VIRTIO_RX_MAX_BURST; i++) > vq->sw_ring[vq->vq_nentries + i] = &vq->fake_mbuf; > @@ -325,9 +328,11 @@ virtio_dev_vring_start(struct virtqueue *vq, int > queue_type) > /****************************************** > * Enqueue allocated buffers * > *******************************************/ > +#ifdef RTE_VIRTIO_INC_VECTOR > if (use_simple_rxtx) > error = > virtqueue_enqueue_recv_refill_simple(vq, m); > else > +#endif > error = virtqueue_enqueue_recv_refill(vq, > m); > if (error) { > rte_pktmbuf_free(m); > @@ -340,6 +345,7 @@ virtio_dev_vring_start(struct virtqueue *vq, int > queue_type) > > PMD_INIT_LOG(DEBUG, "Allocated %d bufs", nbufs); > } else if (queue_type == VTNET_TQ) { > +#ifdef RTE_VIRTIO_INC_VECTOR > if (use_simple_rxtx) { > int mid_idx = vq->vq_nentries >> 1; > for (i = 0; i < mid_idx; i++) { > @@ -357,6 +363,7 @@ virtio_dev_vring_start(struct virtqueue *vq, int > queue_type) > for (i = mid_idx; i < vq->vq_nentries; i++) > vq->vq_ring.avail->ring[i] = i; > } > +#endif > } > } > > @@ -423,7 +430,9 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, > > dev->data->rx_queues[queue_idx] = vq; > > +#ifdef RTE_VIRTIO_INC_VECTOR > virtio_rxq_vec_setup(vq); > +#endif > > return 0; > } > @@ -449,7 +458,10 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, > const struct rte_eth_txconf *tx_conf) > { > uint8_t vtpci_queue_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX; > + > +#ifdef RTE_VIRTIO_INC_VECTOR > struct virtio_hw *hw = dev->data->dev_private; > +#endif > struct virtqueue *vq; > uint16_t tx_free_thresh; > int ret; > @@ -462,6 +474,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, > return -EINVAL; > } > > +#ifdef RTE_VIRTIO_INC_VECTOR > /* Use simple rx/tx func if single segment and no offloads */ > if ((tx_conf->txq_flags & VIRTIO_SIMPLE_FLAGS) == > VIRTIO_SIMPLE_FLAGS && > !vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { > @@ -470,6 +483,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, > dev->rx_pkt_burst = virtio_recv_pkts_vec; > use_simple_rxtx = 1; > } > +#endif > > ret = virtio_dev_queue_setup(dev, VTNET_TQ, queue_idx, > vtpci_queue_idx, > nb_desc, socket_id, &vq); > diff --git a/drivers/net/virtio/virtio_rxtx.h > b/drivers/net/virtio/virtio_rxtx.h > index 831e492..9be1378 100644 > --- a/drivers/net/virtio/virtio_rxtx.h > +++ b/drivers/net/virtio/virtio_rxtx.h > @@ -33,7 +33,9 @@ > > #define RTE_PMD_VIRTIO_RX_MAX_BURST 64 > > +#ifdef RTE_VIRTIO_INC_VECTOR > int virtio_rxq_vec_setup(struct virtqueue *rxq); > > int virtqueue_enqueue_recv_refill_simple(struct virtqueue *vq, > struct rte_mbuf *m); > +#endif > -- > 1.7.9.5 > >