diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2008-08-18 03:05:42 +0200 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-10-23 07:55:20 +0200 |
commit | bb8985586b7a906e116db835c64773b7a7d51663 (patch) | |
tree | de93ae58e88cc563d95cc124a73f3930594c6100 /arch/x86/include/asm/edac.h | |
parent | x86, um: initial part of asm-um move (diff) | |
download | linux-bb8985586b7a906e116db835c64773b7a7d51663.tar.xz linux-bb8985586b7a906e116db835c64773b7a7d51663.zip |
x86, um: ... and asm-x86 move
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/include/asm/edac.h')
-rw-r--r-- | arch/x86/include/asm/edac.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/x86/include/asm/edac.h b/arch/x86/include/asm/edac.h new file mode 100644 index 000000000000..9493c5b27bbd --- /dev/null +++ b/arch/x86/include/asm/edac.h @@ -0,0 +1,18 @@ +#ifndef ASM_X86__EDAC_H +#define ASM_X86__EDAC_H + +/* ECC atomic, DMA, SMP and interrupt safe scrub function */ + +static inline void 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 */ |