sfc: Allocate each channel separately, along with its RX and TX queues
[pandora-kernel.git] / drivers / net / sfc / falcon.c
index 4f9d33f..b4d8efe 100644 (file)
@@ -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;
 }
 /**************************************************************************