Message ID | 56615367.30002@solarflare.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Bert Kenward <bkenward@solarflare.com> Date: Fri, 4 Dec 2015 08:48:39 +0000 > From: Daniel Pieczko <dpieczko@solarflare.com> > > A change in MCFW behaviour means that the net driver must update its record > of the warm_boot_count by reading it from the ER_DZ_BIU_MC_SFT_STATUS > register. > > On v4.6.x MCFW the global boot count was incremented when some functions > needed to be reset to enable multicast chaining, so all functions saw the > same value. In that case, the driver needed to increment its > warm_boot_count when other functions were reset, to avoid noticing it later > and then trying to reset itself to recover unnecessarily. > > With v4.7+ MCFW, the boot count in firmware doesn't change as that is > unnecessary since the PFs that have been reset will each receive an MC > reboot notification. In that case, the driver re-reads the unchanged > value. > > Signed-off-by: Bert Kenward <bkenward@solarflare.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c index 425df3d..c4a0e8a 100644 --- a/drivers/net/ethernet/sfc/ef10.c +++ b/drivers/net/ethernet/sfc/ef10.c @@ -2374,8 +2374,19 @@ static int efx_ef10_ev_init(struct efx_channel *channel) 1 << MC_CMD_WORKAROUND_EXT_OUT_FLR_DONE_LBN) { netif_info(efx, drv, efx->net_dev, "other functions on NIC have been reset\n"); - /* MC's boot count has incremented */ - ++nic_data->warm_boot_count; + + /* With MCFW v4.6.x and earlier, the + * boot count will have incremented, + * so re-read the warm_boot_count + * value now to ensure this function + * doesn't think it has changed next + * time it checks. + */ + rc = efx_ef10_get_warm_boot_count(efx); + if (rc >= 0) { + nic_data->warm_boot_count = rc; + rc = 0; + } } nic_data->workaround_26807 = true; } else if (rc == -EPERM) {