diff options
author | Andrew Rybchenko <Andrew.Rybchenko@oktetlabs.ru> | 2017-02-13 14:59:04 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-14 12:43:18 -0500 |
commit | 62980cb6dd2fd2dca34060c4fd77ebafa878272a (patch) | |
tree | 7061bce444da70291fe0c140518ae9c733a180c5 | |
parent | 6f9f6ec2e0acea398caf83bf750439c69068de43 (diff) | |
download | linux-62980cb6dd2fd2dca34060c4fd77ebafa878272a.tar.bz2 |
sfc: only fall back to a lower interrupt mode if it is supported
If we fail to probe interrupts with our minimum mode, return that error.
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/sfc/efx.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index 88a9f97c0c4f..8c4c273643dc 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c @@ -1420,9 +1420,12 @@ static int efx_probe_interrupts(struct efx_nic *efx) xentries, 1, n_channels); if (rc < 0) { /* Fall back to single channel MSI */ - efx->interrupt_mode = EFX_INT_MODE_MSI; netif_err(efx, drv, efx->net_dev, "could not enable MSI-X\n"); + if (efx->type->min_interrupt_mode >= EFX_INT_MODE_MSI) + efx->interrupt_mode = EFX_INT_MODE_MSI; + else + return rc; } else if (rc < n_channels) { netif_err(efx, drv, efx->net_dev, "WARNING: Insufficient MSI-X vectors" @@ -1465,7 +1468,10 @@ static int efx_probe_interrupts(struct efx_nic *efx) } else { netif_err(efx, drv, efx->net_dev, "could not enable MSI\n"); - efx->interrupt_mode = EFX_INT_MODE_LEGACY; + if (efx->type->min_interrupt_mode >= EFX_INT_MODE_LEGACY) + efx->interrupt_mode = EFX_INT_MODE_LEGACY; + else + return rc; } } |