pxa168: close race between napi and irq activation
authorLino Sanfilippo <LinoSanfilippo@gmx.de>
Sun, 30 Nov 2014 10:49:36 +0000 (11:49 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 6 Dec 2014 05:33:19 +0000 (21:33 -0800)
In pxa168_eth_open() the irqs are enabled before napi. This opens a tiny time
window in which the irq handler is processed, disables irqs but then is not able
to schedule the not yet activated napi, leaving irqs disabled forever (since
irqs are reenabled in napi poll function).
Fix this race by activating napi before irqs are activated.

Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/pxa168_eth.c

index c3b209cd06609fb85ffe3283d8c31028da8e6a60..a3e394c4781931cf41ddadd990b317daf4f8c954 100644 (file)
@@ -1153,8 +1153,8 @@ static int pxa168_eth_open(struct net_device *dev)
        pep->rx_used_desc_q = 0;
        pep->rx_curr_desc_q = 0;
        netif_carrier_off(dev);
-       eth_port_start(dev);
        napi_enable(&pep->napi);
+       eth_port_start(dev);
        return 0;
 out_free_rx_skb:
        rxq_deinit(dev);