Thomas Bogendoerfer 50ba5d
From: Akihiko Odaki <akihiko.odaki@daynix.com>
Thomas Bogendoerfer 50ba5d
Date: Thu, 1 Dec 2022 19:20:03 +0900
Thomas Bogendoerfer 50ba5d
Subject: igbvf: Regard vf reset nack as success
Thomas Bogendoerfer 50ba5d
Patch-mainline: v6.3-rc4
Thomas Bogendoerfer 50ba5d
Git-commit: 02c83791ef969c6a8a150b4927193d0d0e50fb23
Thomas Bogendoerfer 50ba5d
References: jsc#SLE-18379
Thomas Bogendoerfer 50ba5d
Thomas Bogendoerfer 50ba5d
vf reset nack actually represents the reset operation itself is
Thomas Bogendoerfer 50ba5d
performed but no address is assigned. Therefore, e1000_reset_hw_vf
Thomas Bogendoerfer 50ba5d
should fill the "perm_addr" with the zero address and return success on
Thomas Bogendoerfer 50ba5d
such an occasion. This prevents its callers in netdev.c from saying PF
Thomas Bogendoerfer 50ba5d
still resetting, and instead allows them to correctly report that no
Thomas Bogendoerfer 50ba5d
address is assigned.
Thomas Bogendoerfer 50ba5d
Thomas Bogendoerfer 50ba5d
Fixes: 6ddbc4cf1f4d ("igb: Indicate failure on vf reset for empty mac address")
Thomas Bogendoerfer 50ba5d
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Thomas Bogendoerfer 50ba5d
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Thomas Bogendoerfer 50ba5d
Tested-by: Marek Szlosek <marek.szlosek@intel.com>
Thomas Bogendoerfer 50ba5d
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Thomas Bogendoerfer 50ba5d
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 50ba5d
---
Thomas Bogendoerfer 50ba5d
 drivers/net/ethernet/intel/igbvf/vf.c |   13 ++++++++++---
Thomas Bogendoerfer 50ba5d
 1 file changed, 10 insertions(+), 3 deletions(-)
Thomas Bogendoerfer 50ba5d
Thomas Bogendoerfer 50ba5d
--- a/drivers/net/ethernet/intel/igbvf/vf.c
Thomas Bogendoerfer 50ba5d
+++ b/drivers/net/ethernet/intel/igbvf/vf.c
Thomas Bogendoerfer 50ba5d
@@ -1,6 +1,8 @@
Thomas Bogendoerfer 50ba5d
 // SPDX-License-Identifier: GPL-2.0
Thomas Bogendoerfer 50ba5d
 /* Copyright(c) 2009 - 2018 Intel Corporation. */
Thomas Bogendoerfer 50ba5d
 
Thomas Bogendoerfer 50ba5d
+#include <linux/etherdevice.h>
Thomas Bogendoerfer 50ba5d
+
Thomas Bogendoerfer 50ba5d
 #include "vf.h"
Thomas Bogendoerfer 50ba5d
 
Thomas Bogendoerfer 50ba5d
 static s32 e1000_check_for_link_vf(struct e1000_hw *hw);
Thomas Bogendoerfer 50ba5d
@@ -131,11 +133,16 @@ static s32 e1000_reset_hw_vf(struct e100
Thomas Bogendoerfer 50ba5d
 		/* set our "perm_addr" based on info provided by PF */
Thomas Bogendoerfer 50ba5d
 		ret_val = mbx->ops.read_posted(hw, msgbuf, 3);
Thomas Bogendoerfer 50ba5d
 		if (!ret_val) {
Thomas Bogendoerfer 50ba5d
-			if (msgbuf[0] == (E1000_VF_RESET |
Thomas Bogendoerfer 50ba5d
-					  E1000_VT_MSGTYPE_ACK))
Thomas Bogendoerfer 50ba5d
+			switch (msgbuf[0]) {
Thomas Bogendoerfer 50ba5d
+			case E1000_VF_RESET | E1000_VT_MSGTYPE_ACK:
Thomas Bogendoerfer 50ba5d
 				memcpy(hw->mac.perm_addr, addr, ETH_ALEN);
Thomas Bogendoerfer 50ba5d
-			else
Thomas Bogendoerfer 50ba5d
+				break;
Thomas Bogendoerfer 50ba5d
+			case E1000_VF_RESET | E1000_VT_MSGTYPE_NACK:
Thomas Bogendoerfer 50ba5d
+				eth_zero_addr(hw->mac.perm_addr);
Thomas Bogendoerfer 50ba5d
+				break;
Thomas Bogendoerfer 50ba5d
+			default:
Thomas Bogendoerfer 50ba5d
 				ret_val = -E1000_ERR_MAC_INIT;
Thomas Bogendoerfer 50ba5d
+			}
Thomas Bogendoerfer 50ba5d
 		}
Thomas Bogendoerfer 50ba5d
 	}
Thomas Bogendoerfer 50ba5d