mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
[PATCH] EDAC: core EDAC support code
This is a subset of the bluesmoke project core code, stripped of the NMI work which isn't ready to merge and some of the "interesting" proc functionality that needs reworking or just has no place in kernel. It requires no core kernel changes except the added scrub functions already posted. The goal is to merge further functionality only after the core code is accepted and proven in the base kernel, and only at the point the upstream extras are really ready to merge. From: doug thompson <norsk5@xmission.com> This converts EDAC to sysfs and is the final chunk neccessary before EDAC has a stable user space API and can be considered for submission into the base kernel. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com> Signed-off-by: doug thompson <norsk5@xmission.com> Signed-off-by: Pavel Machek <pavel@suse.cz> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
2f768af73f
commit
da9bb1d27b
19 changed files with 3515 additions and 40 deletions
|
|
@ -255,17 +255,5 @@ __asm__ __volatile__(LOCK "orl %0,%1" \
|
|||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
|
||||
/* ECC atomic, DMA, SMP and interrupt safe scrub function */
|
||||
|
||||
static __inline__ void atomic_scrub(unsigned long *virt_addr, u32 size)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < size / 4; i++, virt_addr++)
|
||||
/* Very carefully read and write to memory atomically
|
||||
* so we are interrupt, DMA and SMP safe.
|
||||
*/
|
||||
__asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr));
|
||||
}
|
||||
|
||||
#include <asm-generic/atomic.h>
|
||||
#endif
|
||||
|
|
|
|||
18
include/asm-i386/edac.h
Normal file
18
include/asm-i386/edac.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef ASM_EDAC_H
|
||||
#define ASM_EDAC_H
|
||||
|
||||
/* ECC atomic, DMA, SMP and interrupt safe scrub function */
|
||||
|
||||
static __inline__ void atomic_scrub(void *va, u32 size)
|
||||
{
|
||||
unsigned long *virt_addr = va;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < size / 4; i++, virt_addr++)
|
||||
/* Very carefully read and write to memory atomically
|
||||
* so we are interrupt, DMA and SMP safe.
|
||||
*/
|
||||
__asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -426,17 +426,5 @@ __asm__ __volatile__(LOCK "orl %0,%1" \
|
|||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
|
||||
/* ECC atomic, DMA, SMP and interrupt safe scrub function */
|
||||
|
||||
static __inline__ void atomic_scrub(u32 *virt_addr, u32 size)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < size / 4; i++, virt_addr++)
|
||||
/* Very carefully read and write to memory atomically
|
||||
* so we are interrupt, DMA and SMP safe.
|
||||
*/
|
||||
__asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr));
|
||||
}
|
||||
|
||||
#include <asm-generic/atomic.h>
|
||||
#endif
|
||||
|
|
|
|||
18
include/asm-x86_64/edac.h
Normal file
18
include/asm-x86_64/edac.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef ASM_EDAC_H
|
||||
#define ASM_EDAC_H
|
||||
|
||||
/* ECC atomic, DMA, SMP and interrupt safe scrub function */
|
||||
|
||||
static __inline__ void atomic_scrub(void *va, u32 size)
|
||||
{
|
||||
unsigned int *virt_addr = va;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < size / 4; i++, virt_addr++)
|
||||
/* Very carefully read and write to memory atomically
|
||||
* so we are interrupt, DMA and SMP safe.
|
||||
*/
|
||||
__asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr));
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue