]> git.baikalelectronics.ru Git - kernel.git/commit
drivers/net/b44: Change to non-atomic bit operations on pwol_mask
authorFenghua Yu <fenghua.yu@intel.com>
Thu, 2 Jan 2020 21:27:06 +0000 (13:27 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 5 Jan 2020 22:21:23 +0000 (14:21 -0800)
commit1f7ba0b5b1f1b84377638bfa8a6f6ef8880b7c8f
treed2f06c690724be44d1d520f7e14ae15f38db436f
parent5c0420a55177dfcbb64629641c3445d5fcdf5af2
drivers/net/b44: Change to non-atomic bit operations on pwol_mask

Atomic operations that span cache lines are super-expensive on x86
(not just to the current processor, but also to other processes as all
memory operations are blocked until the operation completes). Upcoming
x86 processors have a switch to cause such operations to generate a #AC
trap. It is expected that some real time systems will enable this mode
in BIOS.

In preparation for this, it is necessary to fix code that may execute
atomic instructions with operands that cross cachelines because the #AC
trap will crash the kernel.

Since "pwol_mask" is local and never exposed to concurrency, there is
no need to set bits in pwol_mask using atomic operations.

Directly operate on the byte which contains the bit instead of using
__set_bit() to avoid any big endian concern due to type cast to
unsigned long in __set_bit().

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/b44.c