• John Fastabend's avatar
    ixgbe: only process one ixgbe_watchdog_task at a time. · 10eec955
    John Fastabend authored
    Processing multiple ixgbe_watchdog_task calls may cause
    the link_up variable and IXGBE_FLAG_NEED_LINK_UPDATE flag
    to be set incorrectly.  In the worse case this is causing
    the netif_carrier_off to be called inappropriately which
    results in an interface that can't be brought up.
    
    Although schedule_work() will only schedule the task if
    it is not already on the work queue the WORK_STRUCT_PENDING
    bits are cleared just before calling the work function.
    This allows WORK_STRUCT_PENDING to be cleared, the work
    function to start and meanwhile schedule another task.
    
    This patch adds a mutex to the watchdog task. This bug is
    actualized by changing DCB settings or doing extended
    cable pull or reset tests.
    Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    10eec955
ixgbe.h 16.4 KB