From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5904 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: Re: Multi-threaded performance progress Date: Tue, 26 Aug 2014 18:35:19 +0200 Message-ID: <1409070919.8054.47.camel@eris.loria.fr> References: <20140826034321.GA13999@brightrain.aerifal.cx> <1409036654.4835.14.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-1cX362q/VkPzcvqHnJDn" X-Trace: ger.gmane.org 1409070929 16713 80.91.229.3 (26 Aug 2014 16:35:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 26 Aug 2014 16:35:29 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5910-gllmg-musl=m.gmane.org@lists.openwall.com Tue Aug 26 18:35:24 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XMJiN-0006jI-2R for gllmg-musl@plane.gmane.org; Tue, 26 Aug 2014 18:35:23 +0200 Original-Received: (qmail 22057 invoked by uid 550); 26 Aug 2014 16:35:22 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 22047 invoked from network); 26 Aug 2014 16:35:22 -0000 X-IronPort-AV: E=Sophos;i="5.04,405,1406584800"; d="scan'";a="91553246" In-Reply-To: <1409036654.4835.14.camel@eris.loria.fr> Face: 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 X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:5904 Archived-At: --=-1cX362q/VkPzcvqHnJDn Content-Type: multipart/mixed; boundary="=-6tXQFdg6hBOhcVJ+3USe" --=-6tXQFdg6hBOhcVJ+3USe Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Am Dienstag, den 26.08.2014, 09:04 +0200 schrieb Jens Gustedt: > Am Montag, den 25.08.2014, 23:43 -0400 schrieb Rich Felker: > > This release cycle looks like it's going to be huge for multi-threaded > > performance issues. So far the cumulative improvement on my main > > development system, as measured by the cond_bench.c by Timo Ter=E4s, is > > from ~250k signals in 2 seconds up to ~3.7M signals in 2 seconds. > > That's comparable to what glibc gets on similar hardware with a cond > > var implementation that's much less correct. The improvements are a > > result of adding private futex support, redesigning the cond var > > implementation, and improvements to the spin-before-futex-wait > > behavior. >=20 > Very impressive! I reviewed the new pthread_cond code closely and found it to be really rock solid. I have some minor things, that might still improve things (or not). They make the code a bit longer, but they attempt to gain things here and there: - Tighten the lock on _c_lock such that the critical section contains the least necessary. - Have all the update of the list of waiters done by the signaling or broadcasting thread. This work is serialized by the lock on the cv, anyhow, so let the main work be done by a thread that already holds the lock and is scheduled. - In case of broadcast, work on head and tail of the list first. These are the only ones that would change the _c_head and _c_tail entries of the cv. - Try to reduce the number of futex calls. Threads that are leaving don't have to regain the lock when there is known contention with a signaler, now that the signaler is doing the main work in that case. Also only wake up the signaling thread at the end when he is known to be inside a futex call. There are perhaps other possibilities, like doing some spinning in "lock" before going into __wait. Jens --=20 :: INRIA Nancy Grand Est ::: AlGorille ::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-6tXQFdg6hBOhcVJ+3USe Content-Disposition: attachment; filename="pthread_cond_timedwait.patch" Content-Type: text/x-patch; name="pthread_cond_timedwait.patch"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVhZF9jb25kX3RpbWVkd2FpdC5jIGIvc3JjL3Ro cmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCmluZGV4IDJkMTkyYjAuLjEzNmZhNmEgMTAw NjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF90aW1lZHdhaXQuYw0KKysrIGIvc3Jj L3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCkBAIC00MiwxMiArNDIsMzIgQEAgc3Rh dGljIGlubGluZSB2b2lkIGxvY2sodm9sYXRpbGUgaW50ICpsKQ0KIAl9DQogfQ0KIA0KKy8qIEF2 b2lkIHRha2luZyB0aGUgbG9jayBpZiB3ZSBrbm93IGl0IGlzbid0IG5lY2Vzc2FyeS4gKi8NCitz dGF0aWMgaW5saW5lIGludCBsb2NrUmFjZSh2b2xhdGlsZSBpbnQgKmwsIGludCp2b2xhdGlsZSog bm90aWZpZXIpDQorew0KKwlpbnQgcmV0ID0gMTsNCisJaWYgKCEqbm90aWZpZXIgJiYgKHJldCA9 IGFfY2FzKGwsIDAsIDEpKSkgew0KKwkJYV9jYXMobCwgMSwgMik7DQorCQlkbyBfX3dhaXQobCwg MCwgMiwgMSk7DQorCQl3aGlsZSAoISpub3RpZmllciAmJiAocmV0ID0gYV9jYXMobCwgMCwgMikp KTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2Nr KHZvbGF0aWxlIGludCAqbCkNCiB7DQogCWlmIChhX3N3YXAobCwgMCk9PTIpDQogCQlfX3dha2Uo bCwgMSwgMSk7DQogfQ0KIA0KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tSYWNlKHZvbGF0aWxl IGludCAqbCwgaW50IGtub3duKQ0KK3sNCisJaW50IGZvdW5kID0gYV9zd2FwKGwsIDApOw0KKwlr bm93biArPSAoZm91bmQgPT0gMik7DQorCWlmIChrbm93biA+IDApDQorCQlfX3dha2UobCwga25v d24sIDEpOw0KK30NCisNCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3JlcXVldWUodm9sYXRp bGUgaW50ICpsLCB2b2xhdGlsZSBpbnQgKnIsIGludCB3KQ0KIHsNCiAJYV9zdG9yZShsLCAwKTsN CkBAIC01Niw2ICs3Niw1MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3JlcXVldWUodm9s YXRpbGUgaW50ICpsLCB2b2xhdGlsZSBpbnQgKnIsIGludCB3KQ0KIAkJfHwgX19zeXNjYWxsKFNZ U19mdXRleCwgbCwgRlVURVhfUkVRVUVVRSwgMCwgMSwgcik7DQogfQ0KIA0KKy8qIFNwbGljZSB0 aGUgbm9kZSBvdXQgb2YgdGhlIGN1cnJlbnQgbGlzdCBvZiBjIGFuZCBub3RpZnkgYSBzaWduYWxp bmcNCisgICB0aHJlYWQgd2l0aCB3aG9tIHRoZXJlIHdhcyBjb250ZW50aW9uLiAqLw0KK3N0YXRp YyBpbmxpbmUgdm9pZCBsZWF2ZShzdHJ1Y3Qgd2FpdGVyKiBub2RlKSB7DQorCS8qIEFjY2VzcyB0 byBjdiBvYmplY3QgaXMgdmFsaWQgYmVjYXVzZSB0aGlzIHdhaXRlciB3YXMgbm90DQorCSAqIHll dCBzaWduYWxlZCBhbmQgYSBuZXcgc2lnbmFsL2Jyb2FkY2FzdCBjYW5ub3QgcmV0dXJuDQorCSAq IGFmdGVyIHNlZWluZyBhIExFQVZJTkcgd2FpdGVyIHdpdGhvdXQgZ2V0dGluZyBub3RpZmllZA0K KwkgKiB2aWEgdGhlIGZ1dGV4IG5vdGlmeSBiZWxvdy4gKi8NCisJcHRocmVhZF9jb25kX3QgKmMg PSBub2RlLT5jb25kOw0KKwlpbnQgbG9ja2VkID0gbG9ja1JhY2UoJmMtPl9jX2xvY2ssICZub2Rl LT5ub3RpZnkpOw0KKwkvKiBub2RlLT5ub3RpZnkgd2lsbCBvbmx5IGJlIGNoYW5nZWQgd2hpbGUg bm9kZSBpcw0KKwkgKiBzdGlsbCBpbiB0aGUgbGlzdC4qLw0KKwlpbnQgKiByZWYgPSBub2RlLT5u b3RpZnk7DQorDQorCWlmICghcmVmKSB7DQorCQlpZiAobm9kZS0+cHJldikgbm9kZS0+cHJldi0+ bmV4dCA9IG5vZGUtPm5leHQ7DQorCQllbHNlIGlmIChjLT5fY19oZWFkID09IG5vZGUpIGMtPl9j X2hlYWQgPSBub2RlLT5uZXh0Ow0KKwkJaWYgKG5vZGUtPm5leHQpIG5vZGUtPm5leHQtPnByZXYg PSBub2RlLT5wcmV2Ow0KKwkJZWxzZSBpZiAoYy0+X2NfdGFpbCA9PSBub2RlKSBjLT5fY190YWls ID0gbm9kZS0+cHJldjsNCisNCisJCXVubG9jaygmYy0+X2NfbG9jayk7DQorCX0gZWxzZSB7DQor CQkvKiBBIHJhY2Ugb2NjdXJyZWQgd2l0aCBhIHNpZ25hbGluZyBvciBicm9hZGNhc3RpbmcgdGhy ZWFkLiBUaGUgY2FsbA0KKwkJICogdG8gdW5sb2NrUmFjZSwgdGhlcmUsIGVuc3VyZXMgdGhhdCBz dWZmaWNpZW50bHkgbWFueSB3YWl0ZXJzIG9uIF9jX2xvY2sNCisJCSAqIGFyZSB3b2tlbiB1cC4g Ki8NCisJCWlmICghbG9ja2VkKSB1bmxvY2soJmMtPl9jX2xvY2spOw0KKw0KKwkJLyogVGhlcmUg d2lsbCBiZSBhdCBtb3N0IG9uZSBzaWduYWxpbmcgb3IgYnJvYWRjYXN0aW5nIHRocmVhZCB3YWl0 aW5nIG9uIHJlZlswXS4NCisJCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHdhc3RlIGEgZnV0 ZXggd2FrZSwgaWYgdGhhdCB0aHJlYWQgaXNuJ3QgeWV0IGluIGZ1dGV4IHdhaXQuICovDQorCQlp ZiAoYV9mZXRjaF9hZGQoJnJlZlswXSwgLTEpPT0xICYmIHJlZlsxXSkNCisJCQlfX3dha2UoJnJl ZlswXSwgMSwgMSk7DQorCX0NCisNCisJbm9kZS0+bXV0ZXhfcmV0ID0gcHRocmVhZF9tdXRleF9s b2NrKG5vZGUtPm11dGV4KTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGVucXVldWUocHRo cmVhZF9jb25kX3QgKiBjLCBzdHJ1Y3Qgd2FpdGVyKiBub2RlKSB7DQorCWxvY2soJmMtPl9jX2xv Y2spOw0KKw0KKwlzdHJ1Y3Qgd2FpdGVyKiBvaGVhZCA9IGMtPl9jX2hlYWQ7DQorCW5vZGUtPm5l eHQgPSBvaGVhZDsNCisJaWYgKG9oZWFkKSBvaGVhZC0+cHJldiA9IG5vZGU7DQorCWVsc2UgYy0+ X2NfdGFpbCA9IG5vZGU7DQorCWMtPl9jX2hlYWQgPSBub2RlOw0KKw0KKwl1bmxvY2soJmMtPl9j X2xvY2spOw0KK30NCisNCiBlbnVtIHsNCiAJV0FJVElORywNCiAJU0lHTkFMRUQsDQpAQCAtNzgs MzMgKzE0NSwxNCBAQCBzdGF0aWMgdm9pZCB1bndhaXQodm9pZCAqYXJnKQ0KIAlpbnQgb2xkc3Rh dGUgPSBhX2Nhcygmbm9kZS0+c3RhdGUsIFdBSVRJTkcsIExFQVZJTkcpOw0KIA0KIAlpZiAob2xk c3RhdGUgPT0gV0FJVElORykgew0KLQkJLyogQWNjZXNzIHRvIGN2IG9iamVjdCBpcyB2YWxpZCBi ZWNhdXNlIHRoaXMgd2FpdGVyIHdhcyBub3QNCi0JCSAqIHlldCBzaWduYWxlZCBhbmQgYSBuZXcg c2lnbmFsL2Jyb2FkY2FzdCBjYW5ub3QgcmV0dXJuDQotCQkgKiBhZnRlciBzZWVpbmcgYSBMRUFW SU5HIHdhaXRlciB3aXRob3V0IGdldHRpbmcgbm90aWZpZWQNCi0JCSAqIHZpYSB0aGUgZnV0ZXgg bm90aWZ5IGJlbG93LiAqLw0KLQ0KLQkJcHRocmVhZF9jb25kX3QgKmMgPSBub2RlLT5jb25kOw0K LQkJbG9jaygmYy0+X2NfbG9jayk7DQotCQkNCi0JCWlmIChjLT5fY19oZWFkID09IG5vZGUpIGMt Pl9jX2hlYWQgPSBub2RlLT5uZXh0Ow0KLQkJZWxzZSBpZiAobm9kZS0+cHJldikgbm9kZS0+cHJl di0+bmV4dCA9IG5vZGUtPm5leHQ7DQotCQlpZiAoYy0+X2NfdGFpbCA9PSBub2RlKSBjLT5fY190 YWlsID0gbm9kZS0+cHJldjsNCi0JCWVsc2UgaWYgKG5vZGUtPm5leHQpIG5vZGUtPm5leHQtPnBy ZXYgPSBub2RlLT5wcmV2Ow0KLQkJDQotCQl1bmxvY2soJmMtPl9jX2xvY2spOw0KLQ0KLQkJaWYg KG5vZGUtPm5vdGlmeSkgew0KLQkJCWlmIChhX2ZldGNoX2FkZChub2RlLT5ub3RpZnksIC0xKT09 MSkNCi0JCQkJX193YWtlKG5vZGUtPm5vdGlmeSwgMSwgMSk7DQotCQl9DQotCX0gZWxzZSB7DQot CQkvKiBMb2NrIGJhcnJpZXIgZmlyc3QgdG8gY29udHJvbCB3YWtlIG9yZGVyLiAqLw0KLQkJbG9j aygmbm9kZS0+YmFycmllcik7DQorCQlsZWF2ZShub2RlKTsNCisJCXJldHVybjsNCiAJfQ0KIA0K LQlub2RlLT5tdXRleF9yZXQgPSBwdGhyZWFkX211dGV4X2xvY2sobm9kZS0+bXV0ZXgpOw0KKwkv KiBMb2NrIGJhcnJpZXIgZmlyc3QgdG8gY29udHJvbCB3YWtlIG9yZGVyLiAqLw0KKwlsb2NrKCZu b2RlLT5iYXJyaWVyKTsNCiANCi0JaWYgKG9sZHN0YXRlID09IFdBSVRJTkcpIHJldHVybjsNCisJ bm9kZS0+bXV0ZXhfcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKG5vZGUtPm11dGV4KTsNCiANCiAJ aWYgKCFub2RlLT5uZXh0KSBhX2luYygmbm9kZS0+bXV0ZXgtPl9tX3dhaXRlcnMpOw0KIA0KQEAg LTEyMSw3ICsxNjksNyBAQCBzdGF0aWMgdm9pZCB1bndhaXQodm9pZCAqYXJnKQ0KIA0KIGludCBw dGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICpyZXN0cmljdCBjLCBwdGhyZWFk X211dGV4X3QgKnJlc3RyaWN0IG0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QgdHMp DQogew0KLQlzdHJ1Y3Qgd2FpdGVyIG5vZGUgPSB7IC5jb25kID0gYywgLm11dGV4ID0gbSB9Ow0K KwlzdHJ1Y3Qgd2FpdGVyIG5vZGUgPSB7IC5jb25kID0gYywgLm11dGV4ID0gbSwgLnN0YXRlID0g V0FJVElORywgLmJhcnJpZXIgPSAyIH07DQogCWludCBlLCBzZXEsICpmdXQsIGNsb2NrID0gYy0+ X2NfY2xvY2s7DQogDQogCWlmICgobS0+X21fdHlwZSYxNSkgJiYgKG0tPl9tX2xvY2smSU5UX01B WCkgIT0gX19wdGhyZWFkX3NlbGYoKS0+dGlkKQ0KQEAgLTEzOCwxNyArMTg2LDEwIEBAIGludCBw dGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICpyZXN0cmljdCBjLCBwdGhyZWFk X211dGV4X3QgKnJlc3RyaWN0DQogCQlzZXEgPSBjLT5fY19zZXE7DQogCQlhX2luYygmYy0+X2Nf d2FpdGVycyk7DQogCX0gZWxzZSB7DQotCQlsb2NrKCZjLT5fY19sb2NrKTsNCi0NCi0JCXNlcSA9 IG5vZGUuYmFycmllciA9IDI7DQorCQlzZXEgPSBub2RlLmJhcnJpZXI7DQogCQlmdXQgPSAmbm9k ZS5iYXJyaWVyOw0KLQkJbm9kZS5zdGF0ZSA9IFdBSVRJTkc7DQotCQlub2RlLm5leHQgPSBjLT5f Y19oZWFkOw0KLQkJYy0+X2NfaGVhZCA9ICZub2RlOw0KLQkJaWYgKCFjLT5fY190YWlsKSBjLT5f Y190YWlsID0gJm5vZGU7DQotCQllbHNlIG5vZGUubmV4dC0+cHJldiA9ICZub2RlOw0KIA0KLQkJ dW5sb2NrKCZjLT5fY19sb2NrKTsNCisJCWVucXVldWUoYywgJm5vZGUpOw0KIAl9DQogDQogCXB0 aHJlYWRfbXV0ZXhfdW5sb2NrKG0pOw0KQEAgLTE2MiwzNSArMjAzLDg1IEBAIGludCBwdGhyZWFk X2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICpyZXN0cmljdCBjLCBwdGhyZWFkX211dGV4 X3QgKnJlc3RyaWN0DQogCXJldHVybiBub2RlLm11dGV4X3JldCA/IG5vZGUubXV0ZXhfcmV0IDog ZTsNCiB9DQogDQorc3RhdGljIGlubGluZSBpbnQgY29uZF9zaWduYWwgKHN0cnVjdCB3YWl0ZXIg KiBwLCBpbnQqIHJlZikNCit7DQorCWludCByZXQgPSBhX2NhcygmcC0+c3RhdGUsIFdBSVRJTkcs IFNJR05BTEVEKTsNCisJaWYgKHJldCAhPSBXQUlUSU5HKSB7DQorCQlyZWZbMF0rKzsNCisJCXAt Pm5vdGlmeSA9IHJlZjsNCisJCWlmIChwLT5wcmV2KSBwLT5wcmV2LT5uZXh0ID0gcC0+bmV4dDsN CisJCWlmIChwLT5uZXh0KSBwLT5uZXh0LT5wcmV2ID0gcC0+cHJldjsNCisJCXAtPm5leHQgPSAw Ow0KKwkJcC0+cHJldiA9IDA7DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQogaW50IF9fcHJp dmF0ZV9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqYywgaW50IG4pDQogew0KLQlzdHJ1Y3Qg d2FpdGVyICpwLCAqZmlyc3Q9MDsNCi0JaW50IHJlZiA9IDAsIGN1cjsNCisJc3RydWN0IHdhaXRl ciAqcCwgKnByZXYsICpmaXJzdD0wOw0KKwlpbnQgcmVmWzJdID0geyAwIH0sIGN1cjsNCiANCi0J bG9jaygmYy0+X2NfbG9jayk7DQotCWZvciAocD1jLT5fY190YWlsOyBuICYmIHA7IHA9cC0+cHJl dikgew0KLQkJaWYgKGFfY2FzKCZwLT5zdGF0ZSwgV0FJVElORywgU0lHTkFMRUQpICE9IFdBSVRJ TkcpIHsNCi0JCQlyZWYrKzsNCi0JCQlwLT5ub3RpZnkgPSAmcmVmOw0KKwlpZiAobiA9PSAxKSB7 DQorCQlsb2NrKCZjLT5fY19sb2NrKTsNCisJCWZvciAocD1jLT5fY190YWlsOyBwOyBwPXByZXYp IHsNCisJCQlwcmV2ID0gcC0+cHJldjsNCisJCQlpZiAoIWNvbmRfc2lnbmFsKHAsIHJlZikpIHsN CisJCQkJZmlyc3Q9cDsNCisJCQkJcD1wcmV2Ow0KKwkJCQlmaXJzdC0+cHJldiA9IDA7DQorCQkJ CWJyZWFrOw0KKwkJCX0NCisJCX0NCisJCS8qIFNwbGl0IHRoZSBsaXN0LCBsZWF2aW5nIGFueSBy ZW1haW5kZXIgb24gdGhlIGN2LiAqLw0KKwkJaWYgKHApIHsNCisJCQlwLT5uZXh0ID0gMDsNCiAJ CX0gZWxzZSB7DQotCQkJbi0tOw0KLQkJCWlmICghZmlyc3QpIGZpcnN0PXA7DQorCQkJYy0+X2Nf aGVhZCA9IDA7DQogCQl9DQotCX0NCi0JLyogU3BsaXQgdGhlIGxpc3QsIGxlYXZpbmcgYW55IHJl bWFpbmRlciBvbiB0aGUgY3YuICovDQotCWlmIChwKSB7DQotCQlpZiAocC0+bmV4dCkgcC0+bmV4 dC0+cHJldiA9IDA7DQotCQlwLT5uZXh0ID0gMDsNCisJCWMtPl9jX3RhaWwgPSBwOw0KKwkJdW5s b2NrUmFjZSgmYy0+X2NfbG9jaywgcmVmWzBdKTsNCiAJfSBlbHNlIHsNCi0JCWMtPl9jX2hlYWQg PSAwOw0KKwkJbG9jaygmYy0+X2NfbG9jayk7DQorICAgICAgICAgICAgICAgIHN0cnVjdCB3YWl0 ZXIgKiBoZWFkID0gYy0+X2NfaGVhZDsNCisJCWlmIChoZWFkKSB7DQorCQkJLyogU2lnbmFsIGhl YWQgYW5kIHRhaWwgZmlyc3QgdG8gcmVkdWNlIHBvc3NpYmxlDQorCQkJICogcmFjZXMgZm9yIHRo ZSBjdiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KKwkJCSAqIHByb2Nlc3NpbmcuICovDQorCQkJ aW50IGhlYWRyYWNlID0gY29uZF9zaWduYWwoaGVhZCwgcmVmKTsNCisJCQlzdHJ1Y3Qgd2FpdGVy ICogdGFpbCA9IGMtPl9jX3RhaWw7DQorCQkJcD10YWlsLT5wcmV2Ow0KKwkJCWlmICh0YWlsICE9 IGhlYWQpIHsNCisJCQkJaWYgKCFjb25kX3NpZ25hbCh0YWlsLCByZWYpKSBmaXJzdD10YWlsOw0K KwkJCQllbHNlIHdoaWxlIChwICE9IGhlYWQpIHsNCisJCQkJCXByZXYgPSBwLT5wcmV2Ow0KKwkJ CQkJaWYgKCFjb25kX3NpZ25hbChwLCByZWYpKSB7DQorCQkJCQkJZmlyc3Q9cDsNCisJCQkJCQlw PXByZXY7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQlwPXByZXY7DQorCQkJCX0NCisJ CQl9DQorCQkJaWYgKCFmaXJzdCAmJiAhaGVhZHJhY2UpIGZpcnN0ID0gaGVhZDsNCisJCQljLT5f Y19oZWFkID0gMDsNCisJCQljLT5fY190YWlsID0gMDsNCisJCQkvKiBOb3cgcHJvY2VzcyB0aGUg aW5uZXIgcGFydCBvZiB0aGUgbGlzdC4gKi8NCisJCQlpZiAocCkgew0KKwkJCQl3aGlsZSAocCAh PSBoZWFkKSB7DQorCQkJCQlwcmV2ID0gcC0+cHJldjsNCisJCQkJCWNvbmRfc2lnbmFsKHAsIHJl Zik7DQorCQkJCQlwPXByZXY7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQl1bmxvY2tSYWNlKCZj LT5fY19sb2NrLCByZWZbMF0pOw0KIAl9DQotCWMtPl9jX3RhaWwgPSBwOw0KLQl1bmxvY2soJmMt Pl9jX2xvY2spOw0KIA0KIAkvKiBXYWl0IGZvciBhbnkgd2FpdGVycyBpbiB0aGUgTEVBVklORyBz dGF0ZSB0byByZW1vdmUNCiAJICogdGhlbXNlbHZlcyBmcm9tIHRoZSBsaXN0IGJlZm9yZSByZXR1 cm5pbmcgb3IgYWxsb3dpbmcNCiAJICogc2lnbmFsZWQgdGhyZWFkcyB0byBwcm9jZWVkLiAqLw0K LQl3aGlsZSAoKGN1ciA9IHJlZikpIF9fd2FpdCgmcmVmLCAwLCBjdXIsIDEpOw0KKwl3aGlsZSAo KGN1ciA9IHJlZlswXSkpIF9fd2FpdCgmcmVmWzBdLCAmcmVmWzFdLCBjdXIsIDEpOw0KIA0KIAkv KiBBbGxvdyBmaXJzdCBzaWduYWxlZCB3YWl0ZXIsIGlmIGFueSwgdG8gcHJvY2VlZC4gKi8NCiAJ aWYgKGZpcnN0KSB1bmxvY2soJmZpcnN0LT5iYXJyaWVyKTsNCg== --=-6tXQFdg6hBOhcVJ+3USe-- --=-1cX362q/VkPzcvqHnJDn Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEABECAAYFAlP8t0cACgkQD9PoadrVN+Ly7wCeO1aVOCUOI3E4VCppN6830z/k uoAAn05/EtZhXFSPR3JnU8qGfGx8JM3s =Nijt -----END PGP SIGNATURE----- --=-1cX362q/VkPzcvqHnJDn--