lkml.org 
[lkml]   [2015]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13.y-ckt 022/103] drivers: net: cpsw: enable interrupts after napi enable and clearing previous interrupts
    Date
    3.13.11-ckt16 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Mugunthan V N <mugunthanvnm@ti.com>

    commit f63a975e8f07a75dbf0386402788330d0bebd8d8 upstream.

    When the Ethernet interface is put down and up with heavy Ethernet
    traffic, then there is prossibility of an interrupt waiting in irq
    controller to be processed, so when the interface is brought up again
    just after enable interrupt, it goes to ISR due to the previous
    unhandled interrutp and in ISR napi is not scheduled as the napi
    is not enabled in ndo_open which results in disabled interrupt for
    CPSW and no packets are received in cpsw. So this patch moves enabling
    of interupts after napi_enable and clearing CPDMA interrupts.

    Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/net/ethernet/ti/cpsw.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
    index 5330fd2..a6fb1c1 100644
    --- a/drivers/net/ethernet/ti/cpsw.c
    +++ b/drivers/net/ethernet/ti/cpsw.c
    @@ -1169,6 +1169,12 @@ static int cpsw_ndo_open(struct net_device *ndev)
    cpsw_set_coalesce(ndev, &coal);
    }

    + napi_enable(&priv->napi);
    + cpdma_ctlr_start(priv->dma);
    + cpsw_intr_enable(priv);
    + cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);
    + cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
    +
    prim_cpsw = cpsw_get_slave_priv(priv, 0);
    if (prim_cpsw->irq_enabled == false) {
    if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) {
    @@ -1177,12 +1183,6 @@ static int cpsw_ndo_open(struct net_device *ndev)
    }
    }

    - napi_enable(&priv->napi);
    - cpdma_ctlr_start(priv->dma);
    - cpsw_intr_enable(priv);
    - cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);
    - cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
    -
    if (priv->data.dual_emac)
    priv->slaves[priv->emac_port].open_stat = true;
    return 0;
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-02-19 02:21    [W:4.407 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site