diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2010-09-10 02:41:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-10 15:27:33 -0400 |
commit | 8313aca38b3937947fffebca6e34bac8e24300c8 (patch) | |
tree | 725830070d3509459e90b106b668047c25ed880a /drivers/net/sfc/falcon.c | |
parent | f7d12cdcbb28207b3bdcf4affbf3935e4c015d03 (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.c | 14 |
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 | /************************************************************************** |