Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Aug 2004 22:23:42 +0200
From:      Maxime Henrion <mux@freebsd.org>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: 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
Message-ID:  <20040803202342.GH13608@elvis.mu.org>
In-Reply-To: <20040803191313.GB99599@ns1.xcllnt.net>
References:  <200408031844.i73IiRb4082245@repoman.freebsd.org> <20040803191313.GB99599@ns1.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040803202342.GH13608>