On 7/20/2018 7:24 PM, Chandran, Sugesh wrote:
Hi Ian,
Thank you for testing it on VF. Please find my comments below,
Regards
_Sugesh
-----Original Message-----
From: Stokes, Ian
Sent: Friday, July 20, 2018 6:30 PM
To: Chandran, Sugesh <sugesh.chand...@intel.com>; ovs-
d...@openvswitch.org
Subject: Re: [ovs-dev] [PATCH] netdev-dpdk: Fix failure to configure flow
control
at netdev-init.
On 7/13/2018 6:13 PM, Ian Stokes wrote:
On 7/10/2018 2:23 PM, Sugesh Chandran wrote:
Configuring flow control at ixgbe netdev-init is throwing error in
port start.
For eg: without this fix, user cannot configure flow control on ixgbe
dpdk port as below,
"
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk \
options:dpdk-devargs=0000:05:00.1 options:rx-flow-ctrl=true
"
Instead, it must be configured as two different commands,
"
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk \
options:dpdk-devargs=0000:05:00.1
ovs-vsctl set Interface dpdk0 options:rx-flow-ctrl=true "
The DPDK ixgbe driver is now validating all the 'rte_eth_fc_conf'
fields before
trying to configuring the dpdk ethdev. Hence OVS can no longer set
the 'dont care' fields to just '0' as before. This commit make sure
all the 'rte_eth_fc_conf' fields are populated with default values
before the dev init.
Thanks for the patch Sugesh, I've applied to dpdk_merge and it will be
part of this weeks pull request.
I assume it should be backported to OVS 2.9 at least, do you know if
it should go to 2.8/2.7 also?
Hi Sugesh,
during further testing I found this breaks functionality for Virtual functions
with
OVS (specifically tested with igb_vf, i40e_vf and ixgbe_vf).
The port itself will fail to initialize with the following error:
netdev_dpdk|INFO|cannot get flow control parameters on port 2, err=-95
And is not added. as such I think flow control should only be optional as there
is
no guarantee it will be available for a given dpdk device and if unavailable it
should not stop the port from being initialized. > [Sugesh] I am not sure if we
need to add this condition in OVS.
As a virtual switch, OVS should able to use these APIs irrespective of NIC/port
types.
Actually we are masking this error , without the patch. It is possible to hit
this issue,
when we configure the flow control on a VF port.
Ok, but now we have a situation that when adding a VF port, even without
specifying the flow control option, it fails as now flow control
parameters are being passed on init irregardless of whether the user
intends to use it or not.
Now that I think of it I think this would probably break other port
types as well that don't support flow control (such as vdevs).
Adding a condition in OVS to check a VF port for similar parameters doesn’t
looks like
a clean approach? What do you think?
We've already had to do this for a few items (HW CRC enablement, LSC,
MTU support). It's not clean but until DPDK provides a way of checking
capabilities before init it's the best we can do.
This leads to another question , whats the impact of modifying other netdev
parameters
on a VF port. Does it error out/silently fail/work as normal netdev ports?
I think we can't fail completely based on an optional capability. And
this is not just for VF ports, conceivably you can have HW ports that
don't support a particular feature either supported by a netdev.
For the current patch you could warn a user that the feature is not
supported and continue the initialization process (similar to the set
mtu capability).
Ian
I've pulled this patch from the merge request for master, I think the branch
patches will have to be reworked also.
Ian
Ian
Signed-off-by: Sugesh Chandran <sugesh.chand...@intel.com>
---
lib/netdev-dpdk.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index
bb4d60f26..023b80d3e 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -1065,14 +1065,6 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
mbp_priv = rte_mempool_get_priv(dev->dpdk_mp->mp);
dev->buf_size = mbp_priv->mbuf_data_room_size -
RTE_PKTMBUF_HEADROOM;
-
- /* Get the Flow control configuration for DPDK-ETH */
- diag = rte_eth_dev_flow_ctrl_get(dev->port_id, &dev->fc_conf);
- if (diag) {
- VLOG_DBG("cannot get flow control parameters on port
"DPDK_PORT_ID_FMT
- ", err=%d", dev->port_id, diag);
- }
-
return 0;
}
@@ -1773,6 +1765,13 @@ netdev_dpdk_set_config(struct netdev *netdev,
const struct smap *args,
autoneg = smap_get_bool(args, "flow-ctrl-autoneg", false);
fc_mode = fc_mode_set[tx_fc_en][rx_fc_en];
+ /* Get the Flow control configuration for DPDK-ETH */
+ err = rte_eth_dev_flow_ctrl_get(dev->port_id, &dev->fc_conf);
+ if (err) {
+ VLOG_INFO("cannot get flow control parameters on port
"DPDK_PORT_ID_FMT
+ ", err=%d", dev->port_id, err);
+ }
+
if (dev->fc_conf.mode != fc_mode || autoneg !=
dev->fc_conf.autoneg) {
dev->fc_conf.mode = fc_mode;
dev->fc_conf.autoneg = autoneg;
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev