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>