aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/falcon.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2010-09-10 02:41:57 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-10 15:27:33 -0400
commit8313aca38b3937947fffebca6e34bac8e24300c8 (patch)
tree725830070d3509459e90b106b668047c25ed880a /drivers/net/sfc/falcon.c
parentf7d12cdcbb28207b3bdcf4affbf3935e4c015d03 (diff)
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>
Diffstat (limited to 'drivers/net/sfc/falcon.c')
-rw-r--r--drivers/net/sfc/falcon.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c
index 4f9d33f3cca1..b4d8efe67772 100644
--- a/drivers/net/sfc/falcon.c
+++ b/drivers/net/sfc/falcon.c
@@ -159,7 +159,6 @@ irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id)
159{ 159{
160 struct efx_nic *efx = dev_id; 160 struct efx_nic *efx = dev_id;
161 efx_oword_t *int_ker = efx->irq_status.addr; 161 efx_oword_t *int_ker = efx->irq_status.addr;
162 struct efx_channel *channel;
163 int syserr; 162 int syserr;
164 int queues; 163 int queues;
165 164
@@ -194,15 +193,10 @@ irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id)
194 wmb(); /* Ensure the vector is cleared before interrupt ack */ 193 wmb(); /* Ensure the vector is cleared before interrupt ack */
195 falcon_irq_ack_a1(efx); 194 falcon_irq_ack_a1(efx);
196 195
197 /* Schedule processing of any interrupting queues */ 196 if (queues & 1)
198 channel = &efx->channel[0]; 197 efx_schedule_channel(efx_get_channel(efx, 0));
199 while (queues) { 198 if (queues & 2)
200 if (queues & 0x01) 199 efx_schedule_channel(efx_get_channel(efx, 1));
201 efx_schedule_channel(channel);
202 channel++;
203 queues >>= 1;
204 }
205
206 return IRQ_HANDLED; 200 return IRQ_HANDLED;
207} 201}
208/************************************************************************** 202/**************************************************************************