net/virtio: move to new offloads API
PATCH 1/1 net/virtio: move to new offloads API
Ethdev offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
--- drivers/net/virtio/virtio_ethdev.c | 35 ++++++++++++++++++++--------------- drivers/net/virtio/virtio_ethdev.h | 8 ++++++++ drivers/net/virtio/virtio_rxtx.c | 14 ++++++++------ 3 files changed, 36 insertions(+), 21 deletions(-)
drivers/net/virtio/virtio_ethdev.c +20 -15
@@ -1787,6 +1787,7 @@ virtio_dev_configure(struct rte_eth_dev *dev) {const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;struct virtio_hw *hw = dev->data->dev_private; +uint64_t rx_offloads = rxmode->offloads;uint64_t req_features;int ret;
@@ -1799,14 +1800,11 @@ virtio_dev_configure(struct rte_eth_dev *dev)return ret; } -/* The name hw_ip_checksum is a bit confusing since it can be -* set by the application to request L3 and/or L4 checksums. In -* case of virtio, only L4 checksum is supported. -*/ -if (rxmode->hw_ip_checksum) +if (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | +DEV_RX_OFFLOAD_TCP_CKSUM )) req_features |= (1ULL <<VIRTIO_NET_F_GUEST_CSUM ); -if (rxmode->enable_lro) +if (rx_offloads &DEV_RX_OFFLOAD_TCP_LRO ) req_features |= (1ULL <<VIRTIO_NET_F_GUEST_TSO4 ) | (1ULL <<VIRTIO_NET_F_GUEST_TSO6 );
@@ -1818,14 +1816,15 @@ virtio_dev_configure(struct rte_eth_dev *dev)return ret; } -if (rxmode->hw_ip_checksum && +if ((rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | +DEV_RX_OFFLOAD_TCP_CKSUM )) && !vtpci_with_feature (hw,VIRTIO_NET_F_GUEST_CSUM )) {PMD_DRV_LOG (ERR ,"rx checksum not available on this host" );return -ENOTSUP ; } -if (rxmode->enable_lro && +if ((rx_offloads &DEV_RX_OFFLOAD_TCP_LRO ) && (!vtpci_with_feature (hw,VIRTIO_NET_F_GUEST_TSO4 ) || !vtpci_with_feature (hw,VIRTIO_NET_F_GUEST_TSO6 ))) { PMD_DRV_LOG(ERR,
@@ -1837,9 +1836,10 @@ virtio_dev_configure(struct rte_eth_dev *dev)if (vtpci_with_feature (hw,VIRTIO_NET_F_CTRL_VQ ))virtio_dev_cq_start (dev); - hw->vlan_strip = rxmode->hw_vlan_strip; +if (rx_offloads &DEV_RX_OFFLOAD_VLAN_STRIP ) + hw->vlan_strip =1 ; -if (rxmode->hw_vlan_filter +if ((rx_offloads &DEV_RX_OFFLOAD_VLAN_FILTER ) && !vtpci_with_feature (hw,VIRTIO_NET_F_CTRL_VLAN )) {PMD_DRV_LOG (ERR ,"vlan filtering not available on this host" );
@@ -1870,7 +1870,8 @@ virtio_dev_configure(struct rte_eth_dev *dev) hw->use_simple_tx =0 ; } -if (rxmode->hw_ip_checksum) +if (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | +DEV_RX_OFFLOAD_TCP_CKSUM )) hw->use_simple_rx =0 ;return 0 ;
@@ -2073,9 +2074,10 @@ virtio_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) {const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;struct virtio_hw *hw = dev->data->dev_private; +uint64_t offloads = rxmode->offloads;if (mask Ð_VLAN_FILTER_MASK ) { -if (rxmode->hw_vlan_filter && +if ((offloads &DEV_RX_OFFLOAD_VLAN_FILTER ) && !vtpci_with_feature (hw,VIRTIO_NET_F_CTRL_VLAN )) { PMD_DRV_LOG(NOTICE,
@@ -2086,7 +2088,7 @@ virtio_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) }if (mask Ð_VLAN_STRIP_MASK ) - hw->vlan_strip = rxmode->hw_vlan_strip; + hw->vlan_strip = !!(offloads &DEV_RX_OFFLOAD_VLAN_STRIP );return 0 ; }
@@ -2112,18 +2114,21 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) }; host_features =VTPCI_OPS (hw)->get_features (hw); - dev_info->rx_offload_capa =0 ; + dev_info->rx_offload_capa =DEV_RX_OFFLOAD_VLAN_STRIP ;if (host_features & (1ULL <<VIRTIO_NET_F_GUEST_CSUM )) { dev_info->rx_offload_capa |=DEV_RX_OFFLOAD_TCP_CKSUM |DEV_RX_OFFLOAD_UDP_CKSUM ; } +if (host_features & (1ULL <<VIRTIO_NET_F_CTRL_VLAN )) + dev_info->rx_offload_capa |=DEV_RX_OFFLOAD_VLAN_FILTER ; tso_mask = (1ULL <<VIRTIO_NET_F_GUEST_TSO4 ) | (1ULL <<VIRTIO_NET_F_GUEST_TSO6 );if ((host_features & tso_mask) == tso_mask) dev_info->rx_offload_capa |=DEV_RX_OFFLOAD_TCP_LRO ; - dev_info->tx_offload_capa =0 ; + dev_info->tx_offload_capa =DEV_TX_OFFLOAD_MULTI_SEGS | +DEV_TX_OFFLOAD_VLAN_INSERT ;if (hw->guest_features & (1ULL <<VIRTIO_NET_F_CSUM )) { dev_info->tx_offload_capa |= DEV_TX_OFFLOAD_UDP_CKSUM |
drivers/net/virtio/virtio_ethdev.h +8 -0
@@ -43,6 +43,14 @@ 1u << VIRTIO_NET_F_GUEST_CSUM | \ 1u << VIRTIO_NET_F_GUEST_TSO4 | \ 1u << VIRTIO_NET_F_GUEST_TSO6) + +#define VIRTIO_PMD_PER_DEVICE_RX_OFFLOADS \ + (DEV_RX_OFFLOAD_TCP_CKSUM | \ + DEV_RX_OFFLOAD_UDP_CKSUM | \ + DEV_RX_OFFLOAD_TCP_LRO | \ + DEV_RX_OFFLOAD_VLAN_FILTER | \ + DEV_RX_OFFLOAD_VLAN_STRIP) +/* * CQ function prototype */
drivers/net/virtio/virtio_rxtx.c +8 -6
@@ -38,10 +38,6 @@#define VIRTIO_DUMP_PACKET (m, len) do { } while (0)#endif - -#define VIRTIO_SIMPLE_FLAGS ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS | \ - ETH_TXQ_FLAGS_NOOFFLOADS) -int virtio_dev_rx_queue_done (void *rxq,uint16_t offset) {
@@ -389,9 +385,10 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id __rte_unused, - __rte_unused const struct rte_eth_rxconf *rx_conf, + const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mp) { + const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;uint16_t vtpci_queue_idx =2 * queue_idx +VTNET_SQ_RQ_QUEUE_IDX ;struct virtio_hw *hw = dev->data->dev_private;struct virtqueue *vq = hw->vqs[vtpci_queue_idx];
@@ -410,6 +407,11 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,rte_exit (EXIT_FAILURE ,"Cannot allocate mbufs for rx virtqueue" ); } + +if ((rx_conf->offloads ^ rxmode->offloads) & +VIRTIO_PMD_PER_DEVICE_RX_OFFLOADS ) +return -EINVAL ; + dev->data->rx_queues[queue_idx] = rxvq;return 0 ;
@@ -502,7 +504,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,PMD_INIT_FUNC_TRACE ();/* cannot use simple rxtx funcs with multisegs or offloads */ -if ((tx_conf->txq_flags &VIRTIO_SIMPLE_FLAGS ) !=VIRTIO_SIMPLE_FLAGS ) +if (tx_conf->offloads) hw->use_simple_tx =0 ;if (nb_desc ==0 || nb_desc > vq->vq_nentries)
Signature · 1 line
2.11.0
Hi Tiwei,
Quoted 11 lines · Tiwei Bie
Ethdev offloads API has changed since:
commit
ce17eddefc20("ethdev: introduce Rx queue offloads API") commitcba7f53b717d("ethdev: introduce Tx queue offloads API")Signed-off-by Tiwei Bie <[email protected]>--- drivers/net/virtio/virtio_ethdev.c | 35 ++++++++++++++++++++--------------- drivers/net/virtio/virtio_ethdev.h | 8 ++++++++ drivers/net/virtio/virtio_rxtx.c | 14 ++++++++------ 3 files changed, 36 insertions(+), 21 deletions(-)
That looks all good to me, thanks for having handled the change.
Maxime
Maxime Coquelin
AppliedQuoted 17 lines · Maxime Coquelin
Hi Tiwei,
Quoted 5 lines · Tiwei Bie
Ethdev offloads API has changed since:
commit
ce17eddefc20("ethdev: introduce Rx queue offloads API") commitcba7f53b717d("ethdev: introduce Tx queue offloads API")Quoted 7 lines
Signed-off-by Tiwei Bie <[email protected]>---
drivers/net/virtio/virtio_ethdev.c| 35
++++++++++++++++++++---------------
drivers/net/virtio/virtio_ethdev.h| 8 ++++++++ drivers/net/virtio/virtio_rxtx.c | 14 ++++++++------3 files changed, 36 insertions(+), 21 deletions(-)
Quoted 5 lines
That looks all good to me, thanks for having handled the change.
Reviewed-by Maxime Coquelin <[email protected]>Maxime
Applied to dpdk-next-virtio/master
Thanks,
Maxime