sfc: suppress ENOENT error messages from MC_CMD_MAC_STATS
MC_CMD_MAC_STATS can be called on a function before a vadaptor has been created, as the kernel can call into this through ndo_get_stats/ndo_get_stats64. If MC_CMD_MAC_STATS is called before the DMA queues have been setup, so that a vadaptor has not been created yet, firmware will return ENOENT. This is expected, so suppress the MCDI error message in this case. Signed-off-by: Shradha Shah <sshah@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0fc95fca5a
commit
6dd4859b28
@ -1316,11 +1316,16 @@ static int efx_ef10_try_update_nic_stats_vf(struct efx_nic *efx)
|
|||||||
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, EVB_PORT_ID_ASSIGNED);
|
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, EVB_PORT_ID_ASSIGNED);
|
||||||
|
|
||||||
spin_unlock_bh(&efx->stats_lock);
|
spin_unlock_bh(&efx->stats_lock);
|
||||||
rc = efx_mcdi_rpc(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf), NULL,
|
rc = efx_mcdi_rpc_quiet(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf),
|
||||||
0, NULL);
|
NULL, 0, NULL);
|
||||||
spin_lock_bh(&efx->stats_lock);
|
spin_lock_bh(&efx->stats_lock);
|
||||||
if (rc)
|
if (rc) {
|
||||||
|
/* Expect ENOENT if DMA queues have not been set up */
|
||||||
|
if (rc != -ENOENT || atomic_read(&efx->active_queues))
|
||||||
|
efx_mcdi_display_error(efx, MC_CMD_MAC_STATS,
|
||||||
|
sizeof(inbuf), NULL, 0, rc);
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
generation_end = dma_stats[MC_CMD_MAC_GENERATION_END];
|
generation_end = dma_stats[MC_CMD_MAC_GENERATION_END];
|
||||||
if (generation_end == EFX_MC_STATS_GENERATION_INVALID) {
|
if (generation_end == EFX_MC_STATS_GENERATION_INVALID) {
|
||||||
|
@ -948,8 +948,12 @@ static int efx_mcdi_mac_stats(struct efx_nic *efx,
|
|||||||
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len);
|
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len);
|
||||||
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, nic_data->vport_id);
|
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, nic_data->vport_id);
|
||||||
|
|
||||||
rc = efx_mcdi_rpc(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf),
|
rc = efx_mcdi_rpc_quiet(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf),
|
||||||
NULL, 0, NULL);
|
NULL, 0, NULL);
|
||||||
|
/* Expect ENOENT if DMA queues have not been set up */
|
||||||
|
if (rc && (rc != -ENOENT || atomic_read(&efx->active_queues)))
|
||||||
|
efx_mcdi_display_error(efx, MC_CMD_MAC_STATS, sizeof(inbuf),
|
||||||
|
NULL, 0, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user