cvs commit: src/sys/alpha/include cpu.h src/sys/amd64/include
cpu.h src/sys/arm/include cpu.h src/sys/i386/include cpu.h
src/sys/ia64/include cpu.h src/sys/powerpc/include cpu.h
src/sys/sparc64/include cpu.h src/sys/kern kern_mutex.c
Maxime Henrion
mux at freebsd.org
Tue Aug 3 13:23:43 PDT 2004
Marcel Moolenaar wrote:
> On Tue, Aug 03, 2004 at 06:44:27PM +0000, Maxime Henrion wrote:
> > mux 2004-08-03 18:44:27 UTC
> >
> > FreeBSD src repository
> >
> > Modified files:
> > sys/alpha/include cpu.h
> > sys/amd64/include cpu.h
> > sys/arm/include cpu.h
> > sys/i386/include cpu.h
> > sys/ia64/include cpu.h
> > sys/powerpc/include cpu.h
> > sys/sparc64/include cpu.h
> > sys/kern kern_mutex.c
> > Log:
> > Instead of calling ia32_pause() conditionally on __i386__ or __amd64__
> > being defined, define and use a new MD macro, cpu_spinwait(). It only
> > expands to something on i386 and amd64, so the compiled code should be
> > identical.
>
> Cool, but can you explain to me how exactly cpu_spinwait() is to be
> different from cpu_idle() that we cannot use cpu_idle()?
They serve very different purposes. The cpu_spinwait() macro is used
on x86 and amd64 to insert a "pause" instruction before retrying to
obtain a spin mutex. It is supposed to improve performance on P4 and
newer machines. It is empty on other architectures because we don't
have such a thing, or at least it's not implemented.
The cpu_idle() hook is called in the idle process, and on x86 it only
does the "sti; hlt" instructions, so it can't fulfill the role of the
cpu_spinwait() macro.
Cheers,
Maxime
More information about the cvs-src
mailing list