From: Noam Camus <no...@ezchip.com>

TX handler is minimalistic and there is no need to schedule
a NAPI job.
Tx done will be processed during hardware interrupt context.

Signed-off-by: Noam Camus <no...@ezchip.com>
---
 drivers/net/ethernet/ezchip/nps_enet.c |   17 ++++++++++-------
 1 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/ezchip/nps_enet.c 
b/drivers/net/ethernet/ezchip/nps_enet.c
index 0e652b4..af72181 100644
--- a/drivers/net/ethernet/ezchip/nps_enet.c
+++ b/drivers/net/ethernet/ezchip/nps_enet.c
@@ -159,7 +159,7 @@ static void nps_enet_tx_handler(struct net_device *ndev)
        }
 
        if (priv->tx_skb) {
-               dev_kfree_skb(priv->tx_skb);
+               dev_kfree_skb_irq(priv->tx_skb);
                priv->tx_skb = NULL;
        }
 
@@ -185,7 +185,6 @@ static int nps_enet_poll(struct napi_struct *napi, int 
budget)
 
        buf_int_enable.rx_rdy = NPS_ENET_ENABLE;
        buf_int_enable.tx_done = NPS_ENET_ENABLE;
-       nps_enet_tx_handler(ndev);
        work_done = nps_enet_rx_handler(ndev);
        if (work_done < budget) {
                napi_complete(napi);
@@ -212,14 +211,18 @@ static irqreturn_t nps_enet_irq_handler(s32 irq, void 
*dev_instance)
        struct net_device *ndev = dev_instance;
        struct nps_enet_priv *priv = netdev_priv(ndev);
        struct nps_enet_rx_ctl rx_ctrl;
-       struct nps_enet_tx_ctl tx_ctrl;
 
-       rx_ctrl.value = nps_enet_reg_get(priv, NPS_ENET_REG_RX_CTL);
-       tx_ctrl.value = nps_enet_reg_get(priv, NPS_ENET_REG_TX_CTL);
+       nps_enet_tx_handler(ndev);
 
-       if ((!tx_ctrl.ct && priv->tx_packet_sent) || rx_ctrl.cr)
+       rx_ctrl.value = nps_enet_reg_get(priv, NPS_ENET_REG_RX_CTL);
+       if (rx_ctrl.cr)
                if (likely(napi_schedule_prep(&priv->napi))) {
-                       nps_enet_reg_set(priv, NPS_ENET_REG_BUF_INT_ENABLE, 0);
+                       struct nps_enet_buf_int_enable buf_int_enable;
+
+                       buf_int_enable.rx_rdy = NPS_ENET_DISABLE;
+                       buf_int_enable.tx_done = NPS_ENET_ENABLE;
+                       nps_enet_reg_set(priv, NPS_ENET_REG_BUF_INT_ENABLE,
+                                        buf_int_enable.value);
                        __napi_schedule(&priv->napi);
                }
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to