• David S. Miller's avatar
    pkt_sched: Prevent livelock in TX queue running. · 195648bb
    David S. Miller authored
    If dev_deactivate() is trying to quiesce the queue, it
    is theoretically possible for another cpu to livelock
    trying to process that queue.  This happens because
    dev_deactivate() grabs the queue spinlock as it checks
    the queue state, whereas net_tx_action() does a trylock
    and reschedules the qdisc if it hits the lock.
    
    This breaks the livelock by adding a check on
    __QDISC_STATE_DEACTIVATED to net_tx_action() when
    the trylock fails.
    
    Based upon feedback from Herbert Xu and Jarek Poplawski.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    195648bb
dev.c 118 KB