sfc: reduce severity of PIO buffer alloc failures
authorTomáš Pilař <tpilar@solarflare.com>
Wed, 25 Jan 2017 13:48:17 +0000 (13:48 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Jan 2017 19:44:00 +0000 (14:44 -0500)
PIO buffer allocation can fail for two valid reasons:
 - we've run out of them (results in -ENOSPC)
 - the NIC configuration doesn't support them (results in -EPERM)
Since both these failures are expected netif_err is excessive.

Signed-off-by: Bert Kenward <bkenward@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ef10.c

index dccbbd323616571c170740158f4095be973a0f68..7c53da28ad64ba4105f23b79de0ad3af733f6edc 100644 (file)
@@ -1170,7 +1170,13 @@ static int efx_ef10_dimension_resources(struct efx_nic *efx)
                                     nic_data->piobuf_size / efx_piobuf_size);
 
                rc = efx_ef10_alloc_piobufs(efx, n_piobufs);
-               if (rc)
+               if (rc == -ENOSPC)
+                       netif_dbg(efx, probe, efx->net_dev,
+                                 "out of PIO buffers; cannot allocate more\n");
+               else if (rc == -EPERM)
+                       netif_dbg(efx, probe, efx->net_dev,
+                                 "not permitted to allocate PIO buffers\n");
+               else if (rc)
                        netif_err(efx, probe, efx->net_dev,
                                  "failed to allocate PIO buffers (%d)\n", rc);
                else
@@ -1317,8 +1323,14 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
                                efx_ef10_free_piobufs(efx);
                }
 
-               /* Log an error on failure, but this is non-fatal */
-               if (rc)
+               /* Log an error on failure, but this is non-fatal.
+                * Permission errors are less important - we've presumably
+                * had the PIO buffer licence removed.
+                */
+               if (rc == -EPERM)
+                       netif_dbg(efx, drv, efx->net_dev,
+                                 "not permitted to restore PIO buffers\n");
+               else if (rc)
                        netif_err(efx, drv, efx->net_dev,
                                  "failed to restore PIO buffers (%d)\n", rc);
                nic_data->must_restore_piobufs = false;