ice: Reliably reset VFs
authorMitch Williams <mitch.a.williams@intel.com>
Tue, 3 Sep 2019 08:31:00 +0000 (01:31 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 5 Sep 2019 15:13:40 +0000 (08:13 -0700)
commit29d42f1f3ae5624b5344aefccb5081eb9c49d44f
tree068fd7264aa9a00a2e2b3d0066751fa17461e0b7
parent9d56b7fd6a1a2293c61749fa3b6b8a133ade9d44
ice: Reliably reset VFs

When a PFR (or bigger reset) occurs, the device clears the VF_MBX_ARQLEN
register for all VFs. But if a VFR is triggered by a VF, the device does
NOT clear this register, and the VF driver will never see the reset.

When this happens, the VF driver will eventually timeout and attempt
recovery, and usually it will be successful. But this makes resets take
a long time and there are occasional failures.

We cannot just blithely clear this register on every reset; this has
been shown to cause synchronization problems when a PFR is triggered
with a large number of VFs.

Fix this by clearing VF_MBX_ARQLEN when the reset source is not PFR.
GlobR will trigger PFR, so this test catches that occurrence as well.

Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c