Re: memory barrier ...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



on 11/12/02 7:03 AM,     Jan Hudec at bulb@ucw.cz wrote:

> 
> There are two things to the barrier. One is to make sure CPU does not
> prefetch the old value and another is to make sure, that compiler does
> not reorder the statements!
> 
The first one is a hardware memory barrier:
#define mb()    __asm__ __volatile__ ("lock; addl $0,0(%esp)": : :"memory")

The second one a software memory barrier:
#define barrier() __asm__ __volatile__ ("": : :"memory")

Hardware memory barrier force strict CPU ordering and is required when
you're talking to devices. See:
- http://www.xml.com/ldd/chapter/book/ch08.html
- Include/asm-i386/system.h

> It has the first string empty, so it expands to no code at all.
> But because of the memory clobber flag, gcc is forbiden to optimize
> across this point. Otherwise gcc could for example conclude that "I have
> A in register, I am not short of registers and I will need it few
> statements later. There is no need to store it in memory." ... and
> actually not store it.
> 
> The mb() thing adds a "barrier" instruction to actualy stop CPU prefetch
> across the point. No such instruction is needed on IA32, but it's needed
> on some other arch with agressive prefetch (eg. sparc IIRC).
> 
> (I am not absolutely sure, look it up in the code).
> 
The hardware memory barrier is needed on IA32 only to prevent reads to pass
buffered writes. So the hardware memory barrier use a locking instruction
such as the LOCK prefix to insure that all buffered writes are drain to
memory before the reads are done. See:
- Intel Architecture Software Developer¹s Manual Volume 3: System
Programming
- Include/asm-i386/system.h

--
David Dufresne, Sys. admin. <dufresne@mediafusion.com>
Médiafusion Inc. <http://www.mediafusion.com>
700, rue Wellington Bureau 1200
Montreal (Quebec) H3C 1T4
Tel.(514) 599-5721 Fax.(514) 599-5724


--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux