]> git.baikalelectronics.ru Git - kernel.git/commit
ixgbe: Refactor busy poll socket code to address multiple issues
authorAlexander Duyck <alexander.h.duyck@intel.com>
Sat, 26 Jul 2014 02:42:44 +0000 (02:42 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 12 Sep 2014 07:40:10 +0000 (00:40 -0700)
commit6588dd75341f7de76c532202c226f32f6d16f5c4
tree630c23311b79427ddc0f57d1755df43b6412ddc5
parentc08a793befe30c058200da181e23d32b735ca435
ixgbe: Refactor busy poll socket code to address multiple issues

This change addresses several issues in the current ixgbe implementation of
busy poll sockets.

First was the fact that it was possible for frames to be delivered out of
order if they were held in GRO.  This is addressed by flushing the GRO buffers
before releasing the q_vector back to the idle state.

The other issue was the fact that we were having to take a spinlock on
changing the state to and from idle.  To resolve this I have replaced the
state value with an atomic and use atomic_cmpxchg to change the value from
idle, and a simple atomic set to restore it back to idle after we have
acquired it.  This allows us to only use a locked operation on acquiring the
vector without a need for a locked operation to release it.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c