• Christian Riesch's avatar
    davinci_emac: Do not free all rx dma descriptors during init · 5d697032
    Christian Riesch authored
    This patch fixes a regression that was introduced by
    
    commit 0a5f3846
    davinci_emac: Add Carrier Link OK check in Davinci RX Handler
    
    Said commit adds a check whether the carrier link is ok. If the link is
    not ok, the skb is freed and no new dma descriptor added to the rx dma
    channel. This causes trouble during initialization when the carrier
    status has not yet been updated. If a lot of packets are received while
    netif_carrier_ok returns false, all dma descriptors are freed and the
    rx dma transfer is stopped.
    
    The bug occurs when the board is connected to a network with lots of
    traffic and the ifconfig down/up is done, e.g., when reconfiguring
    the interface with DHCP.
    
    The bug can be reproduced by flood pinging the davinci board while doing
    ifconfig eth0 down
    ifconfig eth0 up
    on the board.
    
    After that, the rx path stops working and the overrun value reported
    by ifconfig is counting up.
    
    This patch reverts commit 0a5f3846
    and instead issues warnings only if cpdma_chan_submit returns -ENOMEM.
    Signed-off-by: default avatarChristian Riesch <christian.riesch@omicron.at>
    Cc: <stable@vger.kernel.org>
    Cc: Hegde, Vinay <vinay.hegde@ti.com>
    Cc: Cyril Chemparathy <cyril@ti.com>
    Cc: Sascha Hauer <s.hauer@pengutronix.de>
    Tested-by: default avatarRajashekhara, Sudhakar <sudhakar.raj@ti.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5d697032
davinci_emac.c 58.4 KB