From: Michal Weglicki <michalx.wegli...@intel.com> Virtual functions such as igb_vf and i40e_vf require HW_CRC_STRIP to be explicitly enabled before configuration, otherwise device configuration will fail.
This commit achieves this by adding NETDEV_RX_HW_CRC_STRIP to dpdk_hw_ol_features. When a dpdk device is added, the driver for the device is examined, if the device is a virtual function enable HW_CRC_STRIP. Signed-off-by: Michal Weglicki <michalx.wegli...@intel.com> --- lib/netdev-dpdk.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 3306b19..50c7619 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -341,6 +341,7 @@ struct ingress_policer { enum dpdk_hw_ol_features { NETDEV_RX_CHECKSUM_OFFLOAD = 1 << 0, + NETDEV_RX_HW_CRC_STRIP = 1 << 1, }; /* @@ -779,6 +780,11 @@ 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; + + if ((dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP)) { + conf.rxmode.hw_strip_crc = 1; + } + /* 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 @@ -868,6 +874,13 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) rte_eth_dev_info_get(dev->port_id, &info); + if (strstr(info.driver_name, "vf") != NULL) { + VLOG_INFO("Virtual function detected, HW_CRC_STRIP will be enabled"); + dev->hw_ol_features |= NETDEV_RX_HW_CRC_STRIP; + } else { + dev->hw_ol_features &= ~NETDEV_RX_HW_CRC_STRIP; + } + if ((info.rx_offload_capa & rx_chksm_offload_capa) != rx_chksm_offload_capa) { VLOG_WARN("Rx checksum offload is not supported on port " -- 2.7.5 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev