Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/net/ethernet/ibm/ibmvnic.c | 7 +++++++
+ drivers/net/ethernet/ibm/ibmvnic.c | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
-index f07468316656..1afb31c9ed7b 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
-@@ -4931,6 +4931,13 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
+@@ -4923,6 +4923,13 @@ static void ibmvnic_handle_crq(union ibm
adapter->fw_done_rc = -EIO;
complete(&adapter->fw_done);
}
if (!completion_done(&adapter->stats_done))
complete(&adapter->stats_done);
if (test_bit(0, &adapter->resetting))
---
-2.34.1
-
+++ /dev/null
-From a4c55cbb79a10a5c450aa507df02a70f1264f554 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 24 Feb 2022 22:23:53 -0800
-Subject: ibmvnic: define flush_reset_queue helper
-
-From: Sukadev Bhattiprolu <sukadev@linux.ibm.com>
-
-[ Upstream commit 83da53f7e4bd86dca4b2edc1e2bb324fb3c033a1 ]
-
-Define and use a helper to flush the reset queue.
-
-Fixes: 2770a7984db5 ("ibmvnic: Introduce hard reset recovery")
-Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.ibm.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/ibm/ibmvnic.c | 24 ++++++++++++++++--------
- 1 file changed, 16 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
-index de58824f4c18..f07468316656 100644
---- a/drivers/net/ethernet/ibm/ibmvnic.c
-+++ b/drivers/net/ethernet/ibm/ibmvnic.c
-@@ -2304,12 +2304,23 @@ static void __ibmvnic_delayed_reset(struct work_struct *work)
- __ibmvnic_reset(&adapter->ibmvnic_reset);
- }
-
-+static void flush_reset_queue(struct ibmvnic_adapter *adapter)
-+{
-+ struct list_head *entry, *tmp_entry;
-+
-+ if (!list_empty(&adapter->rwi_list)) {
-+ list_for_each_safe(entry, tmp_entry, &adapter->rwi_list) {
-+ list_del(entry);
-+ kfree(list_entry(entry, struct ibmvnic_rwi, list));
-+ }
-+ }
-+}
-+
- static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
- enum ibmvnic_reset_reason reason)
- {
-- struct list_head *entry, *tmp_entry;
-- struct ibmvnic_rwi *rwi, *tmp;
- struct net_device *netdev = adapter->netdev;
-+ struct ibmvnic_rwi *rwi, *tmp;
- unsigned long flags;
- int ret;
-
-@@ -2353,12 +2364,9 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
- /* if we just received a transport event,
- * flush reset queue and process this reset
- */
-- if (adapter->force_reset_recovery && !list_empty(&adapter->rwi_list)) {
-- list_for_each_safe(entry, tmp_entry, &adapter->rwi_list) {
-- list_del(entry);
-- kfree(list_entry(entry, struct ibmvnic_rwi, list));
-- }
-- }
-+ if (adapter->force_reset_recovery)
-+ flush_reset_queue(adapter);
-+
- rwi->reset_reason = reason;
- list_add_tail(&rwi->list, &adapter->rwi_list);
- netdev_dbg(adapter->netdev, "Scheduling reset (reason %d)\n", reason);
---
-2.34.1
-