lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 26 Jul 2007 08:19:33 -0700 (PDT)
From:	Doug Thompson <norsk5@...oo.com>
To:	Andrew Morton <akpm@...ux-foundation.org>,
	dougthompson@...ssion.com
Cc:	greg@...ah.com, ralf@...ux-mips.org, egor@...emi.com,
	alan@...rguk.ukuu.org.uk, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/4] include asm-mips add missing edac h file


--- Andrew Morton <akpm@...ux-foundation.org> wrote:

> On Wed, 25 Jul 2007 14:55:01 -0600 dougthompson@...ssion.com wrote:
> 
> > --- /dev/null
> > +++ linux-2.6.23-rc1/include/asm-mips/edac.h
> > @@ -0,0 +1,35 @@
> > +#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)
> 
> Please don't use __inline__ or __inline.  Good old "inline" will do.

ok, thanks.

I have to admit, since I don't know MIPS assembly, the guys at Sicortex.com developed
this function.

> 
> <cc's the checkpatch maintainer>
> 
> <edits the diff>

thanks

> 
> > +{
> > +	unsigned long *virt_addr = va;
> > +	unsigned long temp;
> > +	u32 i;
> > +
> > +	for (i = 0; i < size / sizeof(unsigned long); i++, virt_addr++) {
> > +
> > +		/*
> > +		 * Very carefully read and write to memory atomically
> > +		 * so we are interrupt, DMA and SMP safe.
> > +		 *
> > +		 * Intel: asm("lock; addl $0, %0"::"m"(*virt_addr));
> > +		 */
> > +
> > +		__asm__ __volatile__ (
> > +		"       .set    mips3                                   \n"
> > +		"1:     ll      %0, %1          # atomic_add            \n"
> > +		"       ll      %0, %1          # atomic_add            \n"
> > +		"       addu    %0, $0                                  \n"
> > +		"       sc      %0, %1                                  \n"
> > +		"       beqz    %0, 1b                                  \n"
> > +		"       .set    mips0                                   \n"
> > +		: "=&r" (temp), "=m" (*virt_addr)
> > +		: "m" (*virt_addr));
> > +
> > +	}
> > +}
> 
> hm, I'd have thought that we could us plain old atomic_add() for this.

This code is used as a primitive to perform software memory scrubbing.

We (many people as I remember) had a discussion a couple of years ago on lkml on this, 
so this is where this implementation pattern came from.

It might be that your thought just could be correct now after some more research.

doug t

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ