• Jacob Keller's avatar
    ixgbe: fix qv_lock_napi call in ixgbe_napi_disable_all · 27d9ce4f
    Jacob Keller authored
    ixgbe_napi_disable_all calls napi_disable on each queue, however the busy
    polling code introduced a local_bh_disable()d context around the napi_disable.
    The original author did not realize that napi_disable might sleep, which would
    cause a sleep while atomic BUG. In addition, on a single processor system, the
    ixgbe_qv_lock_napi loop shouldn't have to mdelay. This patch adds an
    ixgbe_qv_disable along with a new IXGBE_QV_STATE_DISABLED bit, which it uses to
    indicate to the poll and napi routines that the q_vector has been disabled. Now
    the ixgbe_napi_disable_all function will wait until all pending work has been
    finished and prevent any future work from being started.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Cc: Eliezer Tamir <eliezer.tamir@linux.intel.com>
    Cc: Alexander Duyck <alexander.duyck@intel.com>
    Cc: Hyong-Youb Kim <hykim@myri.com>
    Cc: Amir Vadai <amirv@mellanox.com>
    Cc: Dmitry Kravkov <dmitry@broadcom.com>
    Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    27d9ce4f
ixgbe_main.c 224 KB