Commit 3132d282 authored by Ben Hutchings's avatar Ben Hutchings

sfc: Fix division by zero when using one RX channel and no SR-IOV

If RSS is disabled on the PF (efx->n_rx_channels == 1) we try to set
up the indirection table so that VFs can use it, setting
efx->rss_spread = efx_vf_size(efx).  But if SR-IOV was disabled at
compile time, this evaluates to 0 and we end up dividing by zero when
initialising the table.

I considered changing the fallback definition of efx_vf_size() to
return 1, but its value is really meaningless if we are not going to
enable VFs.  Therefore add a condition of efx_sriov_wanted(efx) in
efx_probe_interrupts().
Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
parent 1c430a72
...@@ -1349,7 +1349,7 @@ static int efx_probe_interrupts(struct efx_nic *efx) ...@@ -1349,7 +1349,7 @@ static int efx_probe_interrupts(struct efx_nic *efx)
} }
/* RSS might be usable on VFs even if it is disabled on the PF */ /* RSS might be usable on VFs even if it is disabled on the PF */
efx->rss_spread = (efx->n_rx_channels > 1 ? efx->rss_spread = ((efx->n_rx_channels > 1 || !efx_sriov_wanted(efx)) ?
efx->n_rx_channels : efx_vf_size(efx)); efx->n_rx_channels : efx_vf_size(efx));
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment