Message ID | 20200909082212.67583-1-sassmann@kpanic.de |
---|---|
State | New |
Headers | show |
Series | i40e: report correct VF link speed when link state is set to enable | expand |
> From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> On > Behalf Of Stefan Assmann > Sent: Wednesday, September 9, 2020 1:22 AM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; davem@davemloft.net; Kirsher, Jeffrey T > <jeffrey.t.kirsher@intel.com>; Yang, Lihong <lihong.yang@intel.com>; > sassmann@kpanic.de > Subject: [PATCH] i40e: report correct VF link speed when link state is set to > enable > > When the virtual link state was set to "enable" ethtool would report > link speed as 40000Mb/s regardless of the underlying device. > Report the correct link speed. > > Example from a XXV710 NIC. > Before: > $ ip link set ens3f0 vf 0 state auto > $ ethtool enp8s2 | grep Speed > Speed: 25000Mb/s > $ ip link set ens3f0 vf 0 state enable > $ ethtool enp8s2 | grep Speed > Speed: 40000Mb/s > After: > $ ip link set ens3f0 vf 0 state auto > $ ethtool enp8s2 | grep Speed > Speed: 25000Mb/s > $ ip link set ens3f0 vf 0 state enable > $ ethtool enp8s2 | grep Speed > Speed: 25000Mb/s > > Signed-off-by: Stefan Assmann <sassmann@kpanic.de> > --- > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) Tested-by: Aaron Brown <aaron.f.brown@intel.com>
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index 8e133d6545bd..9c4b166f3346 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -63,7 +63,7 @@ static void i40e_vc_notify_vf_link_state(struct i40e_vf *vf) } else if (vf->link_forced) { pfe.event_data.link_event.link_status = vf->link_up; pfe.event_data.link_event.link_speed = - (vf->link_up ? VIRTCHNL_LINK_SPEED_40GB : 0); + (vf->link_up ? i40e_virtchnl_link_speed(ls->link_speed) : 0); } else { pfe.event_data.link_event.link_status = ls->link_info & I40E_AQ_LINK_UP; @@ -4404,6 +4404,7 @@ int i40e_ndo_set_vf_link_state(struct net_device *netdev, int vf_id, int link) { struct i40e_netdev_priv *np = netdev_priv(netdev); struct i40e_pf *pf = np->vsi->back; + struct i40e_link_status *ls = &pf->hw.phy.link_info; struct virtchnl_pf_event pfe; struct i40e_hw *hw = &pf->hw; struct i40e_vf *vf; @@ -4441,7 +4442,7 @@ int i40e_ndo_set_vf_link_state(struct net_device *netdev, int vf_id, int link) vf->link_forced = true; vf->link_up = true; pfe.event_data.link_event.link_status = true; - pfe.event_data.link_event.link_speed = VIRTCHNL_LINK_SPEED_40GB; + pfe.event_data.link_event.link_speed = i40e_virtchnl_link_speed(ls->link_speed); break; case IFLA_VF_LINK_STATE_DISABLE: vf->link_forced = true;
When the virtual link state was set to "enable" ethtool would report link speed as 40000Mb/s regardless of the underlying device. Report the correct link speed. Example from a XXV710 NIC. Before: $ ip link set ens3f0 vf 0 state auto $ ethtool enp8s2 | grep Speed Speed: 25000Mb/s $ ip link set ens3f0 vf 0 state enable $ ethtool enp8s2 | grep Speed Speed: 40000Mb/s After: $ ip link set ens3f0 vf 0 state auto $ ethtool enp8s2 | grep Speed Speed: 25000Mb/s $ ip link set ens3f0 vf 0 state enable $ ethtool enp8s2 | grep Speed Speed: 25000Mb/s Signed-off-by: Stefan Assmann <sassmann@kpanic.de> --- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)