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-all mailing list