mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Minimum version of binutils required to compile the kernel is 2.25. This version correctly handles the "lock" prefix, so it is possible to remove the semicolon, which was used to support ancient versions of GNU as. Due to the semicolon, the compiler considers "lock; insn" as two separate instructions. Removing the semicolon makes asm length calculations more accurate, consequently making scheduling and inlining decisions of the compiler more accurate. Removing the semicolon also enables assembler checks involving lock prefix. Trying to assemble e.g. "lock andl %eax, %ebx" results in: Error: expecting lockable instruction after `lock' Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20250228085149.2478245-1-ubizjak@gmail.com
19 lines
473 B
C
19 lines
473 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_EDAC_H
|
|
#define _ASM_X86_EDAC_H
|
|
|
|
/* ECC atomic, DMA, SMP and interrupt safe scrub function */
|
|
|
|
static inline void edac_atomic_scrub(void *va, u32 size)
|
|
{
|
|
u32 i, *virt_addr = va;
|
|
|
|
/*
|
|
* Very carefully read and write to memory atomically so we
|
|
* are interrupt, DMA and SMP safe.
|
|
*/
|
|
for (i = 0; i < size / 4; i++, virt_addr++)
|
|
asm volatile("lock addl $0, %0"::"m" (*virt_addr));
|
|
}
|
|
|
|
#endif /* _ASM_X86_EDAC_H */
|