Commit f9b03653 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'ibmvnic-fixes-in-reset-path'

Lijun Pan says:

====================
ibmvnic: fixes in reset path

Patch 1/3 and 2/3 notify peers in failover and migration reset.
Patch 3/3 skips timeout reset if it is already resetting.
====================

Link: https://lore.kernel.org/r/20201120224013.46891-1-ljp@linux.ibm.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 5aac0390 855a631a
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -2074,8 +2074,11 @@ static int do_reset(struct ibmvnic_adapter *adapter,
	for (i = 0; i < adapter->req_rx_queues; i++)
		napi_schedule(&adapter->napi[i]);

	if (adapter->reset_reason != VNIC_RESET_FAILOVER)
	if (adapter->reset_reason == VNIC_RESET_FAILOVER ||
	    adapter->reset_reason == VNIC_RESET_MOBILITY) {
		call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev);
		call_netdevice_notifiers(NETDEV_RESEND_IGMP, netdev);
	}

	rc = 0;

@@ -2145,6 +2148,9 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,
	if (rc)
		return IBMVNIC_OPEN_FAILED;

	call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev);
	call_netdevice_notifiers(NETDEV_RESEND_IGMP, netdev);

	return 0;
}

@@ -2350,6 +2356,12 @@ static void ibmvnic_tx_timeout(struct net_device *dev, unsigned int txqueue)
{
	struct ibmvnic_adapter *adapter = netdev_priv(dev);

	if (test_bit(0, &adapter->resetting)) {
		netdev_err(adapter->netdev,
			   "Adapter is resetting, skip timeout reset\n");
		return;
	}

	ibmvnic_reset(adapter, VNIC_RESET_TIMEOUT);
}