summaryrefslogtreecommitdiffstats
path: root/target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch')
-rw-r--r--target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch109
1 files changed, 0 insertions, 109 deletions
diff --git a/target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch b/target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch
deleted file mode 100644
index 77cbc67ebc..0000000000
--- a/target/linux/mpc85xx/patches-3.10/200-fix_gianfar_napi_poll.patch
+++ /dev/null
@@ -1,109 +0,0 @@
---- a/drivers/net/ethernet/freescale/gianfar.c
-+++ b/drivers/net/ethernet/freescale/gianfar.c
-@@ -2835,7 +2835,7 @@ static int gfar_poll(struct napi_struct
- struct gfar_priv_rx_q *rx_queue = NULL;
- int work_done = 0, work_done_per_q = 0;
- int i, budget_per_q = 0;
-- int has_tx_work;
-+ int has_tx_work = 0;
- unsigned long rstat_rxf;
- int num_act_queues;
-
-@@ -2850,62 +2850,48 @@ static int gfar_poll(struct napi_struct
- if (num_act_queues)
- budget_per_q = budget/num_act_queues;
-
-- while (1) {
-- has_tx_work = 0;
-- for_each_set_bit(i, &gfargrp->tx_bit_map, priv->num_tx_queues) {
-- tx_queue = priv->tx_queue[i];
-- /* run Tx cleanup to completion */
-- if (tx_queue->tx_skbuff[tx_queue->skb_dirtytx]) {
-- gfar_clean_tx_ring(tx_queue);
-- has_tx_work = 1;
-- }
-- }
--
-- for_each_set_bit(i, &gfargrp->rx_bit_map, priv->num_rx_queues) {
-- /* skip queue if not active */
-- if (!(rstat_rxf & (RSTAT_CLEAR_RXF0 >> i)))
-- continue;
--
-- rx_queue = priv->rx_queue[i];
-- work_done_per_q =
-- gfar_clean_rx_ring(rx_queue, budget_per_q);
-- work_done += work_done_per_q;
--
-- /* finished processing this queue */
-- if (work_done_per_q < budget_per_q) {
-- /* clear active queue hw indication */
-- gfar_write(&regs->rstat,
-- RSTAT_CLEAR_RXF0 >> i);
-- rstat_rxf &= ~(RSTAT_CLEAR_RXF0 >> i);
-- num_act_queues--;
--
-- if (!num_act_queues)
-- break;
-- /* recompute budget per Rx queue */
-- budget_per_q =
-- (budget - work_done) / num_act_queues;
-- }
-+ for_each_set_bit(i, &gfargrp->tx_bit_map, priv->num_tx_queues) {
-+ tx_queue = priv->tx_queue[i];
-+ /* run Tx cleanup to completion */
-+ if (tx_queue->tx_skbuff[tx_queue->skb_dirtytx]) {
-+ gfar_clean_tx_ring(tx_queue);
-+ has_tx_work = 1;
- }
-+ }
-
-- if (work_done >= budget)
-- break;
-+ for_each_set_bit(i, &gfargrp->rx_bit_map, priv->num_rx_queues) {
-+ /* skip queue if not active */
-+ if (!(rstat_rxf & (RSTAT_CLEAR_RXF0 >> i)))
-+ continue;
-+
-+ rx_queue = priv->rx_queue[i];
-+ work_done_per_q = gfar_clean_rx_ring(rx_queue, budget_per_q);
-+ work_done += work_done_per_q;
-+
-+ /* finished processing this queue */
-+ if (work_done_per_q < budget_per_q) {
-+ /* clear active queue hw indication */
-+ gfar_write(&regs->rstat, RSTAT_CLEAR_RXF0 >> i);
-+ num_act_queues--;
-
-- if (!num_act_queues && !has_tx_work) {
-+ if (!num_act_queues)
-+ break;
-+ }
-+ }
-
-- napi_complete(napi);
-+ if (!num_act_queues && !has_tx_work) {
-+ napi_complete(napi);
-
-- /* Clear the halt bit in RSTAT */
-- gfar_write(&regs->rstat, gfargrp->rstat);
-+ /* Clear the halt bit in RSTAT */
-+ gfar_write(&regs->rstat, gfargrp->rstat);
-
-- gfar_write(&regs->imask, IMASK_DEFAULT);
-+ gfar_write(&regs->imask, IMASK_DEFAULT);
-
-- /* If we are coalescing interrupts, update the timer
-- * Otherwise, clear it
-- */
-- gfar_configure_coalescing(priv, gfargrp->rx_bit_map,
-- gfargrp->tx_bit_map);
-- break;
-- }
-+ /* If we are coalescing interrupts, update the timer
-+ * Otherwise, clear it
-+ */
-+ gfar_configure_coalescing(priv, gfargrp->rx_bit_map,
-+ gfargrp->tx_bit_map);
- }
-
- return work_done;