gianfar: Fix tx napi polling
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Tue, 19 Mar 2013 07:40:02 +0000 (07:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Mar 2013 17:21:52 +0000 (13:21 -0400)
commitc233cf4074e50933edd5e82c3c5826923f0c1b10
treef7541eb12a7041ebda10230aa4d5a84586833e41
parent3e5289d5e3f98b7b5b8cac32e9e5a7004c067436
gianfar: Fix tx napi polling

There are 2 issues with the current napi poll routine, with regards
to tx ring cleanup:
1) for multi-queue devices (MQ_MG_MODE), should tx_bit_map != rx_bit_map,
which is possible (and supported in h/w) if the DT property "fsl,tx-bit-map"
holds a different value than rx_bit_map, the current polling routine will
service the wrong Tx queues in this case (i.e. the interrupt group will
receive interrupts from tx queues that it will not service)
2) Tx cleanup completion consumes napi budget, whereas the napi budget
should be reserved for Rx work only.

The patch fixes these issues and provides a clean napi polling routine.
Napi poll completion is reached when all the Rx queues have been
serviced and there is no Tx work to do.

Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c