[ovs-dev] [PATCH v1] netdev-dpdk: Enable HW_CRC_STRIP for virtual functions.
Ian Stokes
ian.stokes at intel.com
Thu May 3 13:25:24 UTC 2018
From: Michal Weglicki <michalx.weglicki at 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.weglicki at 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
More information about the dev
mailing list