Re: spin_unlock optimization(i386)

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Fri, 26 Nov 1999 11:34:05 +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.

--650352740-673369614-943611922=:1089
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.10.9911261125361.1089@chiara.csoma.elte.hu>

On Thu, 25 Nov 1999, Erich Boleyn wrote:

> > for (;;) { for (;;) {
> > i++; a = i;
> > j++; b = j;
> > } if (a < b)
> > BUG()
> > }
> >
> > if your theory is true, then 'BUG()' should trigger sooner or later,
> > correct?

> No.

(duh! it was late here, so ...)

> To make this work correctly in the face of both Processor Ordering
> and pauses in the process execution, the second loop should actually say:
>
> for (;;) {
> b = j;
> a = i;
> if (a < b)
> BUG();
> }
>
> With Weak Ordering, this could fail, since you may have not gotten
> all the updates to "i" yet.

yes, this was my intention. The attached code fixes this bug and now it
works just fine without any causality violations with 8 threads running on
8 CPUs. (1 'creator' and 7 'observers')

(thanks for the help, this thread was/is very informative.)

-- mingo

--650352740-673369614-943611922=:1089
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="causal.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9911261125220.1089@chiara.csoma.elte.hu>
Content-Description:
Content-Disposition: ATTACHMENT; FILENAME="causal.c"

DQovKg0KICogTGludXggU01QIG1lbW9yeSBtb2RlbCBhbmQgU01QIGNhdXNh
bGl0eSB0ZXN0ZXIsIEluZ28gTW9sbmFyDQogKg0KICogQ29weXJpZ2h0IChD
KSAxOTk5LCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCiAqLw0K
DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp
bmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzaWduYWwuaD4NCiNpbmNs
dWRlIDxzeXMvd2FpdC5oPg0KI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPg0K
DQp2b2xhdGlsZSBzdGF0aWMgaW50IHN0YXJ0ZWQgPSAwOw0Kc3RhdGljIGlu
dCBudW10aHJlYWRzOw0KDQojZGVmaW5lIG1iKCkgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18gKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9y
eSIpDQoNCnZvbGF0aWxlIGludCBkYXRhMSA9IDAsIGZpbGxlcjAzWzhdLCBk
YXRhMiA9IDA7DQoNCnN0YXRpYyBpbnQgdGVzdF9sb2NraW5nKGludCBjcHUp
DQp7DQoJaW50IGEsIGIsIGNvdW50ID0gMDsNCg0KCWlmIChjcHUgPCAxKSB7
DQoJCWZvciAoOzspIHsNCgkJCWRhdGExKys7IA0KCQkJZGF0YTIrKzsNCgkJ
fQ0KCX0gZWxzZSB7DQoJCWZvciAoOzspIHsNCgkJCWNvdW50Kys7DQoJCQli
ID0gZGF0YTI7DQoJCQlhID0gZGF0YTE7DQoJCQlpZiAoYSA8IGIpIHsNCgkJ
CQlwcmludGYoIjwlZD4gJWQgJWRcbiIsIGNvdW50LCBhLCBiKTsNCgkJCQly
ZXR1cm4gMTsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0Kdm9pZCB0ZXN0X2NhdXNh
bGl0eSAoaW50IGNwdSkNCnsNCglhc20gdm9sYXRpbGUgKCJsb2NrOyBpbmNs
ICUwIjoiPW0iKHN0YXJ0ZWQpKTsNCgl3aGlsZSAobnVtdGhyZWFkcyAhPSBz
dGFydGVkKSBtYigpOw0KDQoJdGVzdF9sb2NraW5nKGNwdSk7DQoNCglwcmlu
dGYoIjx0aHJlYWQlZD4gQlJPS0UgY2F1c2FsaXR5ISBXZWFrbHkgb3JkZXJl
ZCBtZW1vcnk/XG4iLCBjcHUpOw0KCWV4aXQoMCk7DQp9DQoNCnN0YXRpYyB2
b2lkIHN0YXJ0X3RocmVhZChpbnQgY3B1KQ0Kew0KCWNoYXIgKm5ld3N0YWNr
ID0gKGNoYXIgKikgbWFsbG9jKDEwMDAwKSArIDUwMDA7DQoNCgkqbmV3c3Rh
Y2sgPSBjcHU7DQoJX19hc21fXyBfX3ZvbGF0aWxlX18oDQoJCSJpbnQgJDB4
ODAJXG5cdCIJLyogTGludXgvaTM4NiBzeXN0ZW0gY2FsbCAqLw0KCQkidGVz
dGwgJTAsJTAJXG5cdCIJLyogY2hlY2sgcmV0dXJuIHZhbHVlICovDQoJCSJq
bmUgMWYJCVxuXHQiCS8qIGp1bXAgaWYgcGFyZW50ICovDQoJCSJjYWxsICol
Mglcblx0IgkvKiBzdGFydCBzdWJ0aHJlYWQgZnVuY3Rpb24gKi8NCgkJIm1v
dmwgJTEsJTAJXG5cdCINCgkJImludCAkMHg4MAlcblx0IgkvKiBleGl0IHN5
c3RlbSBjYWxsOiBleGl0IHN1YnRocmVhZCAqLw0KCQkiMToJCVxuXHQiDQoJ
CTogOiJhIiAoX19OUl9jbG9uZSksImkiIChfX05SX2V4aXQpLCAiciIgKHRl
c3RfY2F1c2FsaXR5KSwNCgkJICAgImIiICgweGFmMDAgfCBTSUdDSExEKSwg
ImMiIChuZXdzdGFjaykpOw0KCXJldHVybjsNCn0NCg0KaW50IG1haW4gKGlu
dCBhcmdjLCBjaGFyICogKiBhcmd2KQ0Kew0KCWludCBpOw0KDQoJaWYgKGFy
Z2MgIT0gMikgew0KCQlwcmludGYoInVzYWdlOiBjYXVzYWwgPGtpZHM+XG4i
KTsNCgkJZXhpdCgwKTsNCgl9DQoJbnVtdGhyZWFkcyA9IGF0b2woYXJndlsx
XSk7DQoNCglmb3IgKGkgPSAwOyBpPG51bXRocmVhZHM7IGkrKykgew0KCQlz
dGFydF90aHJlYWQoaSk7DQoJfQ0KCXJldHVybiAoMCk7DQp9DQoNCg==
--650352740-673369614-943611922=:1089--

-
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/