Commit 90343f57 authored by David S. Miller's avatar David S. Miller

Merge branch 'sfc-fixes'

Íñigo Huguet says:

====================
sfc: fix some efx_separate_tx_channels errors

Trying to load sfc driver with modparam efx_separate_tx_channels=1
resulted in errors during initialization and not being able to use the
NIC. This patches fix a few bugs and make it work again.

v2:
* added Martin's patch instead of a previous mine. Mine one solved some
of the initialization errors, but Martin's solves them also in all
possible cases.
* removed whitespaces cleanup, as requested by Jakub
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 18eeb4de c308dfd1
...@@ -298,6 +298,7 @@ int efx_probe_interrupts(struct efx_nic *efx) ...@@ -298,6 +298,7 @@ int efx_probe_interrupts(struct efx_nic *efx)
efx->n_channels = 1; efx->n_channels = 1;
efx->n_rx_channels = 1; efx->n_rx_channels = 1;
efx->n_tx_channels = 1; efx->n_tx_channels = 1;
efx->tx_channel_offset = 0;
efx->n_xdp_channels = 0; efx->n_xdp_channels = 0;
efx->xdp_channel_offset = efx->n_channels; efx->xdp_channel_offset = efx->n_channels;
rc = pci_enable_msi(efx->pci_dev); rc = pci_enable_msi(efx->pci_dev);
...@@ -318,6 +319,7 @@ int efx_probe_interrupts(struct efx_nic *efx) ...@@ -318,6 +319,7 @@ int efx_probe_interrupts(struct efx_nic *efx)
efx->n_channels = 1 + (efx_separate_tx_channels ? 1 : 0); efx->n_channels = 1 + (efx_separate_tx_channels ? 1 : 0);
efx->n_rx_channels = 1; efx->n_rx_channels = 1;
efx->n_tx_channels = 1; efx->n_tx_channels = 1;
efx->tx_channel_offset = 1;
efx->n_xdp_channels = 0; efx->n_xdp_channels = 0;
efx->xdp_channel_offset = efx->n_channels; efx->xdp_channel_offset = efx->n_channels;
efx->legacy_irq = efx->pci_dev->irq; efx->legacy_irq = efx->pci_dev->irq;
...@@ -954,10 +956,6 @@ int efx_set_channels(struct efx_nic *efx) ...@@ -954,10 +956,6 @@ int efx_set_channels(struct efx_nic *efx)
struct efx_channel *channel; struct efx_channel *channel;
int rc; int rc;
efx->tx_channel_offset =
efx_separate_tx_channels ?
efx->n_channels - efx->n_tx_channels : 0;
if (efx->xdp_tx_queue_count) { if (efx->xdp_tx_queue_count) {
EFX_WARN_ON_PARANOID(efx->xdp_tx_queues); EFX_WARN_ON_PARANOID(efx->xdp_tx_queues);
......
...@@ -1530,7 +1530,7 @@ static inline bool efx_channel_is_xdp_tx(struct efx_channel *channel) ...@@ -1530,7 +1530,7 @@ static inline bool efx_channel_is_xdp_tx(struct efx_channel *channel)
static inline bool efx_channel_has_tx_queues(struct efx_channel *channel) static inline bool efx_channel_has_tx_queues(struct efx_channel *channel)
{ {
return true; return channel && channel->channel >= channel->efx->tx_channel_offset;
} }
static inline unsigned int efx_channel_num_tx_queues(struct efx_channel *channel) static inline unsigned int efx_channel_num_tx_queues(struct efx_channel *channel)
......
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