From: wenxu <[email protected]> Some vf driver like i40evf can't disable the hw_strip_crc, with err 'dpdk|ERR|i40evf_dev_configure(): VF can't disable HW CRC Strip' so hw_strip_crc feature should can be configurable
Signed-off-by: wenxu <[email protected]> --- NEWS | 2 ++ lib/netdev-dpdk.c | 30 ++++++++++++++++++++++++++++++ vswitchd/vswitch.xml | 9 +++++++++ 3 files changed, 41 insertions(+) diff --git a/NEWS b/NEWS index a3c1a02..d913847 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ Post-v2.8.0 chassis "hostname" in addition to a chassis "name". - Linux kernel 4.13 * Add support for compiling OVS with the latest Linux 4.13 kernel + - DPDK: + * New option 'hw_strip_crc' fields for DPDK interfaces v2.8.0 - xx xxx xxxx --------------------- diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index c60f46f..23c2a72 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -402,11 +402,15 @@ struct netdev_dpdk { int requested_n_rxq; int requested_rxq_size; int requested_txq_size; + bool requested_hw_strip_crc; /* Number of rx/tx descriptors for physical devices */ int rxq_size; int txq_size; + /*crc strip feature config*/ + bool hw_strip_crc; + /* Socket ID detected when vHost device is brought up */ int requested_socket_id; @@ -700,6 +704,7 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq) conf.rxmode.hw_ip_checksum = (dev->hw_ol_features & NETDEV_RX_CHECKSUM_OFFLOAD) != 0; + conf.rxmode.hw_strip_crc = dev->hw_strip_crc; /* A device may report more queues than it makes available (this has * been observed for Intel xl710, which reserves some of them for * SRIOV): rte_eth_*_queue_setup will fail if a queue is not @@ -914,6 +919,8 @@ common_construct(struct netdev *netdev, dpdk_port_t port_no, dev->requested_n_txq = NR_QUEUE; dev->requested_rxq_size = NIC_PORT_DEFAULT_RXQ_SIZE; dev->requested_txq_size = NIC_PORT_DEFAULT_TXQ_SIZE; + dev->requested_hw_strip_crc = false; + dev->hw_strip_crc = false; /* Initialize the flow control to NULL */ memset(&dev->fc_conf, 0, sizeof dev->fc_conf); @@ -1192,6 +1199,11 @@ netdev_dpdk_get_config(const struct netdev *netdev, struct smap *args) } else { smap_add(args, "rx_csum_offload", "false"); } + if (dev->hw_strip_crc) { + smap_add(args, "hw_strip_crc", "true"); + } else { + smap_add(args, "hw_strip_crc", "false"); + } } ovs_mutex_unlock(&dev->mutex); @@ -1255,6 +1267,19 @@ dpdk_set_rxq_config(struct netdev_dpdk *dev, const struct smap *args) } static void +dpdk_set_hw_strip_crc_config(struct netdev_dpdk *dev, const struct smap *args) + OVS_REQUIRES(dev->mutex) +{ + int new_hw_strip_crc; + + new_hw_strip_crc = smap_get_bool(args, "hw_strip_crc", false); + if (new_hw_strip_crc != dev->requested_hw_strip_crc) { + dev->requested_hw_strip_crc = new_hw_strip_crc; + netdev_request_reconfigure(&dev->up); + } +} + +static void dpdk_process_queue_size(struct netdev *netdev, const struct smap *args, const char *flag, int default_size, int *new_size) { @@ -1290,6 +1315,8 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args, dpdk_set_rxq_config(dev, args); + dpdk_set_hw_strip_crc_config(dev, args); + dpdk_process_queue_size(netdev, args, "n_rxq_desc", NIC_PORT_DEFAULT_RXQ_SIZE, &dev->requested_rxq_size); @@ -3196,6 +3223,7 @@ netdev_dpdk_reconfigure(struct netdev *netdev) if (netdev->n_txq == dev->requested_n_txq && netdev->n_rxq == dev->requested_n_rxq && dev->mtu == dev->requested_mtu + && dev->hw_strip_crc == dev->requested_hw_strip_crc && dev->rxq_size == dev->requested_rxq_size && dev->txq_size == dev->requested_txq_size && dev->socket_id == dev->requested_socket_id) { @@ -3217,6 +3245,8 @@ netdev_dpdk_reconfigure(struct netdev *netdev) dev->rxq_size = dev->requested_rxq_size; dev->txq_size = dev->requested_txq_size; + dev->hw_strip_crc = dev->requested_hw_strip_crc; + rte_free(dev->tx_q); err = dpdk_eth_dev_init(dev); dev->tx_q = netdev_dpdk_alloc_txq(netdev->n_txq); diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 074535b..d1e7a6b 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -2589,6 +2589,15 @@ </p> </column> + <column name="options" key="hw_strip_crc" + type='{"type": "bool"}'> + <p> + Specifies DPDK interfaces whether enable hw_strip_crc feature or not. + If not specified, the default is false. + Not supported by DPDK vHost interfaces. + </p> + </column> + <column name="other_config" key="pmd-rxq-affinity"> <p>Specifies mapping of RX queues of this interface to CPU cores.</p> <p>Value should be set in the following form:</p> -- 1.8.3.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
