[PATCH] arm64: enable EDAC on arm64
Catalin Marinas
catalin.marinas at arm.com
Thu Nov 7 04:47:05 EST 2013
On Wed, Nov 06, 2013 at 06:39:18PM +0000, Rob Herring wrote:
> On Wed, Nov 6, 2013 at 9:26 AM, Catalin Marinas <catalin.marinas at arm.com> wrote:
> > On Wed, Nov 06, 2013 at 01:02:24PM +0000, Rob Herring wrote:
> >> +static inline void atomic_scrub(void *va, u32 size)
> >> +{
> >> + unsigned int *virt_addr = va;
> >> + unsigned int temp, temp2;
> >> + unsigned int i;
> >> +
> >> + for (i = 0; i < size / sizeof(*virt_addr); i++, virt_addr++) {
> >> + /*
> >> + * No need to check for store failure, another write means
> >> + * the scrubbing has effectively already been done for us.
> >> + */
> >> + asm volatile("\n"
> >> + " ldxr %0, %2\n"
> >> + " stxr %w1, %0, %2\n"
> >> + : "=&r" (temp), "=&r" (temp2), "+Q" (virt_addr)
> >> + : : "cc");
> >
> > But failure of stxr does not necessarily mean another write. It can be
> > an interrupt, cache line migration etc. The exclusive monitor can be
> > emulated in many ways.
>
> Right, I was thinking I could simplify things.
>
> In that case, I could implement this with just "atomic64_add(0,
> virt_addr)", but is there any guarantee that atomic64_t has a size of
> 8 bytes and that I can simply increment an atomic64_t ptr?
I would rather add just an asm volatile (as you've done) to avoid the
'add' inside the loop and force casting to atomic64_t.
--
Catalin
More information about the linux-arm-kernel
mailing list