• Daniel Drake's avatar
    libertas: remove tx_timeout handler · 7e4b4eec
    Daniel Drake authored
    As described at http://marc.info/?l=linux-netdev&m=130428493104730&w=2
    libertas frequently generates spurious tx timeouts, because the tx
    queue is brought down for extended periods during scanning. The net
    layer takes a look and incorrectly assumes the queue has been down for
    several seconds, and generates a tx_timeout.
    
    One way to fix this is to bump the trans_start counter while scanning
    so that the network layer knows that the device is still alive, but
    I think the tx_timeout handler is implemented wrongly here and not of
    any real use, so I vote to remove it.
    
    As explained at http://marc.info/?l=linux-wireless&m=130430311115755&w=2
    the watchdog is primarily meant to deal with lockup on the hardware TX
    path (detected by the tx queue being stopped for an extended period of
    time), but this is unlikely to happen with libertas. In this case, the tx
    queue is stopped only while waiting for lbs_thread to send the queued frame
    to the driver, and lbs_thread wakes up the queue immediately after, even
    if the frame could not be sent correctly.
    
    So, the only hardware-related possibility that this catches is if
    hw_host_to_card hangs - this is something I have never seen. And if it
    were to happen, nothing done by lbs_tx_timeout would actually wake up
    lbs_thread any quicker than otherwise.
    
    Removing this oddly-behaving spuriously-firing tx_timeout handler should
    fix an occasional kernel crash during resume
    (http://dev.laptop.org/ticket/10748)
    Signed-off-by: default avatarDaniel Drake <dsd@laptop.org>
    Acked-by: default avatarDan Williams <dcbw@redhat.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    7e4b4eec
main.c 28.1 KB