Date: Tue, 17 Oct 2000 12:21:50 +1100 From: Peter Jeremy <peter.jeremy@alcatel.com.au> To: Terry Lambert <tlambert@primenet.com> Cc: freebsd-arch@freebsd.org Subject: Re: we need atomic_t Message-ID: <00Oct17.122151est.115206@border.alcanet.com.au>
next in thread | raw e-mail | index | archive | help
[Apologies if this is a duplicate, I haven't seen the first copy come back via the mailing list] On Fri, Oct 13, 2000 at 02:19:20AM +0000, Terry Lambert wrote: >[ ... atomic_t ... ] > >> My unspoken minimum precision was going to be 24 bits, for situations >> where that wasn't enough the idea was to provide a atomic64_t, but >> only if the demand was reasonable. > >How would you handle this type on 386, 486, and Pentium machines, >if somone used it in code? The Pentium and later CPUs have a compare-double-and-swap. This could be used inside a loop to produce atomic operations on 64-bit objects (much the same as the Alpha atomic routines). The basic code sequence is: atomic_op64: movl mem,%eax movl mem+4,%edx loop: op_q {%ecx:%ebx} = {%edx:%eax} op {operand} lock cmpxchg8b mem jne loop Sticking the whole thing inside di/ei reduces the load/store window, but may or may not be necessary. Adding a spin count might also be worthwhile. It isn't possible to have atomic 64-bit operations on 386 or 486, but there was a previous agreement that FreeBSD wouldn't support SMP on either of these CPU's either. Since (AFAIK) no bus-master peripherals would need atomic 64-bit operations, protecting it with a disable/enable interrupts block should be adequate. Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00Oct17.122151est.115206>