Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Apr 2007 22:47:11 +0800
From:      Daniel Cheng <gmane@sdiz.net>
To:        freebsd-current@freebsd.org
Cc:        freebsd-fs@freebsd.org
Subject:   Re: ZFS committed to the FreeBSD base.
Message-ID:  <evqphg$ar8$1@sea.gmane.org>
In-Reply-To: <20070412160603.GB92079@keira.kiwi-computer.com>
References:  <20070406025700.GB98545@garage.freebsd.pl>	<86k5wo55s0.fsf@dwp.des.no>	<20070407203411.GJ8831@cicely12.cicely.de>	<86wt0n3mxv.fsf@dwp.des.no> <20070411214911.GA38351@VARK.MIT.EDU>	<20070412073605.GB834@turion.vk2pj.dyndns.org>	<86ps6aht1i.fsf@dwp.des.no> <20070412160603.GB92079@keira.kiwi-computer.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Rick C. Petty wrote:
> On Thu, Apr 12, 2007 at 10:54:17AM +0200, Dag-Erling Sm?rgrav wrote:
>> Our native atomic operations are all defined as either macros or
>> static inline functions in machine/atomic.h, so we can easily make
>> this choice at compile time based on a config option.
> 
> Is there any way we could make the choice at boot time, by checking for
> presence of the CX8 feature?  Either as something like:
> 
> extern int feature_cx8;		/* or MIB variable */
> #define CMPXCHG8(a)	(feature_cx8 ? { _asm "..." } : emulate_cmpxch8(a))
> 

In Linux,
Two copies of code are compiled: one with cmpxch8, one without.
They are placed into different sections.

When the computer boot up, it choose the best code,
update the pointers then free the unused codes memory.

> Otherwise something like ZFS which utilizes this feature a lot could
> check the MIB variable and set different fn ptr in its device structure,
> or something along those lines.  Of course, that would require compiling
> the same code twice essentially, but it had the advantage that it would
> work on non-CX8 systems and that it would be fast on systems with CX8.
> 
> -- Rick C. Petty

-- 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?evqphg$ar8$1>