Commit 320684cd authored by Mitch Williams's avatar Mitch Williams Committed by Jeff Kirsher

i40e: fix link checking logic

If the interface is closed, but VFs exist, current code will spam all
the VFs with link messages every second. This is because the link event
code was looking at netif_carrier_ok() without checking to see if the
interface was actually open.

Refactor the logic to only check the carrier state if the interface is
actually open. This allows link changes to be reported correctly without
spamming the VFs.

Change-ID: If136e79bb3820d21ea4e39e332e8a9604efc2b2a
Signed-off-by: default avatarMitch Williams <mitch.a.williams@intel.com>
Signed-off-by: default avatarPatrick Lu <patrick.lu@intel.com>
Tested-by: default avatarJim Young <jamesx.m.young@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 7bdd6f74
...@@ -5358,6 +5358,7 @@ static void i40e_veb_link_event(struct i40e_veb *veb, bool link_up) ...@@ -5358,6 +5358,7 @@ static void i40e_veb_link_event(struct i40e_veb *veb, bool link_up)
static void i40e_link_event(struct i40e_pf *pf) static void i40e_link_event(struct i40e_pf *pf)
{ {
bool new_link, old_link; bool new_link, old_link;
struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
/* set this to force the get_link_status call to refresh state */ /* set this to force the get_link_status call to refresh state */
pf->hw.phy.get_link_info = true; pf->hw.phy.get_link_info = true;
...@@ -5366,10 +5367,12 @@ static void i40e_link_event(struct i40e_pf *pf) ...@@ -5366,10 +5367,12 @@ static void i40e_link_event(struct i40e_pf *pf)
new_link = i40e_get_link_status(&pf->hw); new_link = i40e_get_link_status(&pf->hw);
if (new_link == old_link && if (new_link == old_link &&
new_link == netif_carrier_ok(pf->vsi[pf->lan_vsi]->netdev)) (test_bit(__I40E_DOWN, &vsi->state) ||
new_link == netif_carrier_ok(vsi->netdev)))
return; return;
if (!test_bit(__I40E_DOWN, &pf->vsi[pf->lan_vsi]->state))
i40e_print_link_message(pf->vsi[pf->lan_vsi], new_link); if (!test_bit(__I40E_DOWN, &vsi->state))
i40e_print_link_message(vsi, new_link);
/* Notify the base of the switch tree connected to /* Notify the base of the switch tree connected to
* the link. Floating VEBs are not notified. * the link. Floating VEBs are not notified.
...@@ -5377,7 +5380,7 @@ static void i40e_link_event(struct i40e_pf *pf) ...@@ -5377,7 +5380,7 @@ static void i40e_link_event(struct i40e_pf *pf)
if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb]) if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb])
i40e_veb_link_event(pf->veb[pf->lan_veb], new_link); i40e_veb_link_event(pf->veb[pf->lan_veb], new_link);
else else
i40e_vsi_link_event(pf->vsi[pf->lan_vsi], new_link); i40e_vsi_link_event(vsi, new_link);
if (pf->vf) if (pf->vf)
i40e_vc_notify_link_state(pf); i40e_vc_notify_link_state(pf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment