sfc: Allocate each channel separately, along with its RX and TX queues
This will allow for reallocation of channel structures and rings. Change module parameter separate_tx_channels to be read-only, since we now require its value to be constant. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f7d12cdcbb
commit
8313aca38b
3 changed files with 61 additions and 76 deletions
|
@ -159,7 +159,6 @@ irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id)
|
|||
{
|
||||
struct efx_nic *efx = dev_id;
|
||||
efx_oword_t *int_ker = efx->irq_status.addr;
|
||||
struct efx_channel *channel;
|
||||
int syserr;
|
||||
int queues;
|
||||
|
||||
|
@ -194,15 +193,10 @@ irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id)
|
|||
wmb(); /* Ensure the vector is cleared before interrupt ack */
|
||||
falcon_irq_ack_a1(efx);
|
||||
|
||||
/* Schedule processing of any interrupting queues */
|
||||
channel = &efx->channel[0];
|
||||
while (queues) {
|
||||
if (queues & 0x01)
|
||||
efx_schedule_channel(channel);
|
||||
channel++;
|
||||
queues >>= 1;
|
||||
}
|
||||
|
||||
if (queues & 1)
|
||||
efx_schedule_channel(efx_get_channel(efx, 0));
|
||||
if (queues & 2)
|
||||
efx_schedule_channel(efx_get_channel(efx, 1));
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
/**************************************************************************
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue