9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] _xinc vs ainc
@ 2011-05-07 13:05 erik quanstrom
  2011-05-07 19:33 ` Bakul Shah
  2011-05-08  6:00 ` ron minnich
  0 siblings, 2 replies; 9+ messages in thread
From: erik quanstrom @ 2011-05-07 13:05 UTC (permalink / raw)
  To: 9fans

i'm confused by the recent change to the thread library.
the old code was simply to do a locked incl.  the new code
does a locked exchange /within a loop/ until it's seen that
nobody else has updated the value at the same time, thus
insuring that the value has indeed been updated.

since the expensive operation is the MESI(F) negotiation
behind the scenes to get exclusive access to the cacheline,
i don't understand the motiviation is for replacing _xinc
with ainc.  since ainc can loop on an expensive lock instruction.

that is, i think the old version was wait free, and the new version
is not.

can someone explain what i'm missing here?

thanks!

- erik

----

TEXT	_xinc(SB),$0	/* void _xinc(long *); */

	MOVL	l+0(FP),AX
	LOCK
	INCL	0(AX)
	RET

----

TEXT ainc(SB), $0	/* long ainc(long *); */
	MOVL	addr+0(FP), BX
ainclp:
	MOVL	(BX), AX
	MOVL	AX, CX
	INCL	CX
	LOCK
	BYTE	$0x0F; BYTE $0xB1; BYTE $0x0B	/* CMPXCHGL CX, (BX) */
	JNZ	ainclp
	MOVL	CX, AX
	RET



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-05-08 13:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-07 13:05 [9fans] _xinc vs ainc erik quanstrom
2011-05-07 19:33 ` Bakul Shah
2011-05-07 22:47   ` erik quanstrom
2011-05-07 23:10     ` Bakul Shah
2011-05-08  0:25       ` erik quanstrom
2011-05-08  1:24         ` Bakul Shah
2011-05-08  2:44           ` Venkatesh Srinivas
2011-05-08  6:00 ` ron minnich
2011-05-08 13:14   ` erik quanstrom

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).