Thomas Bogendoerfer a805d8
From: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Thomas Bogendoerfer a805d8
Date: Sat, 23 Jan 2021 00:22:23 +0000
Thomas Bogendoerfer a805d8
Subject: i40e: Revert "i40e: don't report link up for a VF who hasn't enabled
Thomas Bogendoerfer a805d8
 queues"
Thomas Bogendoerfer a805d8
Git-commit: f559a356043a55bab25a4c00505ea65c50a956fb
Thomas Bogendoerfer a805d8
Patch-mainline: v5.11-rc7
Thomas Bogendoerfer a805d8
References: jsc#SLE-8025
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
This reverts commit 2ad1274fa35ace5c6360762ba48d33b63da2396c
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
VF queues were not brought up when PF was brought up after being
Thomas Bogendoerfer a805d8
downed if the VF driver disabled VFs queues during PF down.
Thomas Bogendoerfer a805d8
This could happen in some older or external VF driver implementations.
Thomas Bogendoerfer a805d8
The problem was that PF driver used vf->queues_enabled as a condition
Thomas Bogendoerfer a805d8
to decide what link-state it would send out which caused the issue.
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
Remove the check for vf->queues_enabled in the VF link notify.
Thomas Bogendoerfer a805d8
Now VF will always be notified of the current link status.
Thomas Bogendoerfer a805d8
Also remove the queues_enabled member from i40e_vf structure as it is
Thomas Bogendoerfer a805d8
not used anymore. Otherwise VNF implementation was broken and caused
Thomas Bogendoerfer a805d8
a link flap.
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
The original commit was a workaround to avoid breaking existing VFs though
Thomas Bogendoerfer a805d8
it's really a fault of the VF code not the PF. The commit should be safe to
Thomas Bogendoerfer a805d8
revert as all of the VFs we know of have been fixed. Also, since we now
Thomas Bogendoerfer a805d8
know there is a related bug in the workaround, removing it is preferred.
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
Fixes: 2ad1274fa35a ("i40e: don't report link up for a VF who hasn't enabled")
Thomas Bogendoerfer a805d8
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Thomas Bogendoerfer a805d8
Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Thomas Bogendoerfer a805d8
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Thomas Bogendoerfer a805d8
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Thomas Bogendoerfer a805d8
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer a805d8
---
Thomas Bogendoerfer a805d8
 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c |   13 +------------
Thomas Bogendoerfer a805d8
 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h |    1 -
Thomas Bogendoerfer a805d8
 2 files changed, 1 insertion(+), 13 deletions(-)
Thomas Bogendoerfer a805d8
Thomas Bogendoerfer a805d8
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
Thomas Bogendoerfer a805d8
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
Thomas Bogendoerfer a805d8
@@ -55,12 +55,7 @@ static void i40e_vc_notify_vf_link_state
Thomas Bogendoerfer a805d8
 
Thomas Bogendoerfer a805d8
 	pfe.event = VIRTCHNL_EVENT_LINK_CHANGE;
Thomas Bogendoerfer a805d8
 	pfe.severity = PF_EVENT_SEVERITY_INFO;
Thomas Bogendoerfer a805d8
-
Thomas Bogendoerfer a805d8
-	/* Always report link is down if the VF queues aren't enabled */
Thomas Bogendoerfer a805d8
-	if (!vf->queues_enabled) {
Thomas Bogendoerfer a805d8
-		pfe.event_data.link_event.link_status = false;
Thomas Bogendoerfer a805d8
-		pfe.event_data.link_event.link_speed = 0;
Thomas Bogendoerfer a805d8
-	} else if (vf->link_forced) {
Thomas Bogendoerfer a805d8
+	if (vf->link_forced) {
Thomas Bogendoerfer a805d8
 		pfe.event_data.link_event.link_status = vf->link_up;
Thomas Bogendoerfer a805d8
 		pfe.event_data.link_event.link_speed =
Thomas Bogendoerfer a805d8
 			(vf->link_up ? VIRTCHNL_LINK_SPEED_40GB : 0);
Thomas Bogendoerfer a805d8
@@ -70,7 +65,6 @@ static void i40e_vc_notify_vf_link_state
Thomas Bogendoerfer a805d8
 		pfe.event_data.link_event.link_speed =
Thomas Bogendoerfer a805d8
 			i40e_virtchnl_link_speed(ls->link_speed);
Thomas Bogendoerfer a805d8
 	}
Thomas Bogendoerfer a805d8
-
Thomas Bogendoerfer a805d8
 	i40e_aq_send_msg_to_vf(hw, abs_vf_id, VIRTCHNL_OP_EVENT,
Thomas Bogendoerfer a805d8
 			       0, (u8 *)&pfe, sizeof(pfe), NULL);
Thomas Bogendoerfer a805d8
 }
Thomas Bogendoerfer a805d8
@@ -2388,8 +2382,6 @@ static int i40e_vc_enable_queues_msg(str
Thomas Bogendoerfer a805d8
 		}
Thomas Bogendoerfer a805d8
 	}
Thomas Bogendoerfer a805d8
 
Thomas Bogendoerfer a805d8
-	vf->queues_enabled = true;
Thomas Bogendoerfer a805d8
-
Thomas Bogendoerfer a805d8
 error_param:
Thomas Bogendoerfer a805d8
 	/* send the response to the VF */
Thomas Bogendoerfer a805d8
 	return i40e_vc_send_resp_to_vf(vf, VIRTCHNL_OP_ENABLE_QUEUES,
Thomas Bogendoerfer a805d8
@@ -2411,9 +2403,6 @@ static int i40e_vc_disable_queues_msg(st
Thomas Bogendoerfer a805d8
 	struct i40e_pf *pf = vf->pf;
Thomas Bogendoerfer a805d8
 	i40e_status aq_ret = 0;
Thomas Bogendoerfer a805d8
 
Thomas Bogendoerfer a805d8
-	/* Immediately mark queues as disabled */
Thomas Bogendoerfer a805d8
-	vf->queues_enabled = false;
Thomas Bogendoerfer a805d8
-
Thomas Bogendoerfer a805d8
 	if (!test_bit(I40E_VF_STATE_ACTIVE, &vf->vf_states)) {
Thomas Bogendoerfer a805d8
 		aq_ret = I40E_ERR_PARAM;
Thomas Bogendoerfer a805d8
 		goto error_param;
Thomas Bogendoerfer a805d8
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h
Thomas Bogendoerfer a805d8
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h
Thomas Bogendoerfer a805d8
@@ -99,7 +99,6 @@ struct i40e_vf {
Thomas Bogendoerfer a805d8
 	unsigned int tx_rate;	/* Tx bandwidth limit in Mbps */
Thomas Bogendoerfer a805d8
 	bool link_forced;
Thomas Bogendoerfer a805d8
 	bool link_up;		/* only valid if VF link is forced */
Thomas Bogendoerfer a805d8
-	bool queues_enabled;	/* true if the VF queues are enabled */
Thomas Bogendoerfer a805d8
 	bool spoofchk;
Thomas Bogendoerfer a805d8
 	u16 num_vlan;
Thomas Bogendoerfer a805d8