Re: spin_unlock optimization(i386)

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sat, 27 Nov 1999 00:57:48 +0100 (CET)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--79888902-909357089-943660668=:10812
Content-Type: TEXT/PLAIN; charset=US-ASCII

in fact it's the overflow situation that triggers a causality violation
even on dual boxes. Code attached, it produces:

hell:~> ./causal 0 2
<78266> data3:0 < data4:100001
<thread1> BROKE causality! Weakly ordered memory?

but data4 is always kept smaller than data3! both data4 and data3 are only
ever modified by one of the CPUs, and this is observed on another CPU. The
above shows exactly the case we were worried about:

}
if (i > OVERFLOW) {
data4 = 0;
data3 = 0;

but the second store showed up on the other CPU before the first store.

[if 'causal 1 2' is used (which variant uses the LOCK prefix) then the
assert doesnt seem to trigger.]

i think part of the picture is that the above 'overflow branch' surely is
incorrectly predicted when it triggers. This might open up the window.

{ unless my code is buggy ;) }

Ingo

--79888902-909357089-943660668=:10812
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="causal.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9911270057480.10812@chiara.csoma.elte.hu>
Content-Description:
Content-Disposition: attachment; filename="causal.c"

DQovKg0KICogTGludXggU01QIG1lbW9yeSBtb2RlbCBhbmQgU01QIGNhdXNh
bGl0eSB0ZXN0ZXIsIEluZ28gTW9sbmFyDQogKg0KICogQ29weXJpZ2h0IChD
KSAxOTk5LCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCiAqLw0K
DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp
bmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzaWduYWwuaD4NCiNpbmNs
dWRlIDxzeXMvd2FpdC5oPg0KI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPg0K
DQp2b2xhdGlsZSBzdGF0aWMgaW50IHN0YXJ0ZWQgPSAwOw0Kc3RhdGljIGlu
dCBudW10aHJlYWRzOw0KaW50IGxvY2sgPSAwOw0KDQojZGVmaW5lIG1iKCkg
IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAkMCwwKCUlZXNw
KSI6IDogOiJtZW1vcnkiKQ0KI2RlZmluZSBpbmMoeCkgIF9fYXNtX18gX192
b2xhdGlsZV9fICgiaW5jbCAlMCI6ICI9bSIoeCk6IDoibWVtb3J5IikNCiNk
ZWZpbmUgbG9ja19pbmMoeCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9j
azsgaW5jbCAlMCI6ICI9bSIoeCk6IDoibWVtb3J5IikNCg0Kdm9sYXRpbGUg
aW50IGRhdGExID0gMCwgZGF0YTIgPSAwOw0Kdm9sYXRpbGUgaW50IGRhdGEz
ID0gMCwgZGF0YTQgPSAwOw0KDQojZGVmaW5lIE9WRVJGTE9XIDEwMDAwDQoN
CnN0YXRpYyBpbnQgdGVzdF9sb2NraW5nKGludCBjcHUpDQp7DQoJaW50IGEs
IGIsIGkgPSAwOw0KDQoJc3dpdGNoIChjcHUpIHsNCgljYXNlIDA6DQoJCWZv
ciAoOzspIHsNCgkJCWkrKzsNCgkJCWlmIChsb2NrKSB7DQoJCQkJbG9ja19p
bmMoZGF0YTMpOyANCgkJCQlsb2NrX2luYyhkYXRhNCk7DQoJCQl9IGVsc2Ug
ew0KCQkJCWluYyhkYXRhMyk7IA0KCQkJCWluYyhkYXRhNCk7DQoJCQl9DQoJ
CQlpZiAoaSA+IE9WRVJGTE9XKSB7DQoJCQkJZGF0YTQgPSAwOw0KCQkJCWRh
dGEzID0gMDsNCgkJCQlpID0gMDsNCgkJCX0NCgkJCWIgPSBkYXRhMjsNCgkJ
CWEgPSBkYXRhMTsNCgkJCWlmIChhIDwgYikgew0KCQkJCXByaW50ZigiPCVk
PiBkYXRhMTolZCA8IGRhdGEyOiVkXG4iLCBpLCBhLCBiKTsNCgkJCQlyZXR1
cm4gMTsNCgkJCX0NCgkJfQ0KCWNhc2UgMToNCgkJZm9yICg7Oykgew0KCQkJ
aSsrOw0KCQkJaWYgKGxvY2spIHsNCgkJCQlsb2NrX2luYyhkYXRhMSk7IA0K
CQkJCWxvY2tfaW5jKGRhdGEyKTsNCgkJCX0gZWxzZSB7DQoJCQkJaW5jKGRh
dGExKTsgDQoJCQkJaW5jKGRhdGEyKTsNCgkJCX0NCgkJCWlmIChpID4gT1ZF
UkZMT1cpIHsNCgkJCQlkYXRhMiA9IDA7DQoJCQkJZGF0YTEgPSAwOw0KCQkJ
CWkgPSAwOw0KCQkJfQ0KCQkJYiA9IGRhdGE0Ow0KCQkJYSA9IGRhdGEzOw0K
CQkJaWYgKGEgPCBiKSB7DQoJCQkJcHJpbnRmKCI8JWQ+IGRhdGEzOiVkIDwg
ZGF0YTQ6JWRcbiIsIGksIGEsIGIpOw0KCQkJCXJldHVybiAxOw0KCQkJfQ0K
CQl9DQoJZGVmYXVsdDoNCgkJcmV0dXJuIDE7DQoJfQ0KfQ0KDQp2b2lkIHRl
c3RfY2F1c2FsaXR5IChpbnQgY3B1KQ0Kew0KCWFzbSB2b2xhdGlsZSAoImxv
Y2s7IGluY2wgJTAiOiI9bSIoc3RhcnRlZCkpOw0KCXdoaWxlIChudW10aHJl
YWRzICE9IHN0YXJ0ZWQpIG1iKCk7DQoNCgl0ZXN0X2xvY2tpbmcoY3B1KTsN
Cg0KCXByaW50ZigiPHRocmVhZCVkPiBCUk9LRSBjYXVzYWxpdHkhIFdlYWts
eSBvcmRlcmVkIG1lbW9yeT9cbiIsIGNwdSk7DQoJZXhpdCgwKTsNCn0NCg0K
c3RhdGljIHZvaWQgc3RhcnRfdGhyZWFkKGludCBjcHUpDQp7DQoJY2hhciAq
bmV3c3RhY2sgPSAoY2hhciAqKSBtYWxsb2MoMTAwMDAwKSArIDUwMDAwOw0K
DQoJKm5ld3N0YWNrID0gY3B1Ow0KCV9fYXNtX18gX192b2xhdGlsZV9fKA0K
CQkiaW50ICQweDgwCVxuXHQiCS8qIExpbnV4L2kzODYgc3lzdGVtIGNhbGwg
Ki8NCgkJInRlc3RsICUwLCUwCVxuXHQiCS8qIGNoZWNrIHJldHVybiB2YWx1
ZSAqLw0KCQkiam5lIDFmCQlcblx0IgkvKiBqdW1wIGlmIHBhcmVudCAqLw0K
CQkiY2FsbCAqJTIJXG5cdCIJLyogc3RhcnQgc3VidGhyZWFkIGZ1bmN0aW9u
ICovDQoJCSJtb3ZsICUxLCUwCVxuXHQiDQoJCSJpbnQgJDB4ODAJXG5cdCIJ
LyogZXhpdCBzeXN0ZW0gY2FsbDogZXhpdCBzdWJ0aHJlYWQgKi8NCgkJIjE6
CQlcblx0Ig0KCQk6IDoiYSIgKF9fTlJfY2xvbmUpLCJpIiAoX19OUl9leGl0
KSwgInIiICh0ZXN0X2NhdXNhbGl0eSksDQoJCSAgICJiIiAoMHhhZjAwIHwg
U0lHQ0hMRCksICJjIiAobmV3c3RhY2spKTsNCglyZXR1cm47DQp9DQoNCmlu
dCBtYWluIChpbnQgYXJnYywgY2hhciAqICogYXJndikNCnsNCglpbnQgaTsN
Cg0KCWlmIChhcmdjICE9IDMpIHsNCgkJcHJpbnRmKCJ1c2FnZTogY2F1c2Fs
IDxMT0NLOjAvMT4gPGtpZHM6My04PlxuIik7DQoJCWV4aXQoMCk7DQoJfQ0K
CWxvY2sgPSBhdG9sKGFyZ3ZbMV0pOw0KCW51bXRocmVhZHMgPSBhdG9sKGFy
Z3ZbMl0pOw0KDQoJZm9yIChpID0gMDsgaSA8IG51bXRocmVhZHM7IGkrKykg
ew0KCQlzdGFydF90aHJlYWQoaSk7DQoJfQ0KCXJldHVybiAoMCk7DQp9DQoN
Cg==
--79888902-909357089-943660668=:10812--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/