From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [PATCH 11/17] rbtree: low level optimizations in __rb_erase_color() Date: Thu, 1 Jun 2017 02:17:02 +0530 Message-ID: <20170531204708.10470-12-kpraveen.lkml@gmail.com> References: <20170531204708.10470-1-kpraveen.lkml@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170531204708.10470-1-kpraveen.lkml@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Andrea Arcangeli , Jens Axboe , Rik van Riel , sstabellini@kernel.org, wei.liu2@citrix.com, Peter Zijlstra , George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, Daniel Santos , Praveen Kumar , "Eric W. Biederman" , jbeulich@suse.com, Andrew Morton , Michel Lespinasse , Linus Torvalds List-Id: xen-devel@lists.xenproject.org SW4gX19yYl9lcmFzZV9jb2xvcigpLCB3ZSBvZnRlbiBhbHJlYWR5IGhhdmUgcG9pbnRlcnMgdG8g dGhlIG5vZGVzIGJlaW5nCnJvdGF0ZWQgYW5kL29yIGtub3cgd2hhdCB0aGVpciBjb2xvcnMgbXVz dCBiZSwgc28gd2UgY2FuIGdlbmVyYXRlIG1vcmUKZWZmaWNpZW50IGNvZGUgdGhhbiB0aGUgZ2Vu ZXJpYyBfX3JiX3JvdGF0ZV9sZWZ0KCkgYW5kIF9fcmJfcm90YXRlX3JpZ2h0KCkKZnVuY3Rpb25z LgoKQWxzbyB3aGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgcmVkIG9yIHdoZW4gZmxpcHBpbmcgdGhl IHNpYmxpbmcncyBjb2xvciwKdGhlIHBhcmVudCBpcyBhbHJlYWR5IGtub3duIHNvIHdlIGNhbiB1 c2UgdGhlIG1vcmUgZWZmaWNpZW50CnJiX3NldF9wYXJlbnRfY29sb3IoKSBmdW5jdGlvbiB0byBz ZXQgdGhlIGRlc2lyZWQgY29sb3IuCgpjb21taXQgNjI4MGQyMzU2ZmQ4YWQwOTM2YTYzYzEwZGMx ZTZhY2NmNDhkMGM2MSBmcm9tIGxpbnV4IHRyZWUKClNpZ25lZC1vZmYtYnk6IE1pY2hlbCBMZXNw aW5hc3NlIDx3YWxrZW5AZ29vZ2xlLmNvbT4KQ2M6IEFuZHJlYSBBcmNhbmdlbGkgPGFhcmNhbmdl QHJlZGhhdC5jb20+CkFja2VkLWJ5OiBEYXZpZCBXb29kaG91c2UgPERhdmlkLldvb2Rob3VzZUBp bnRlbC5jb20+CkNjOiBSaWsgdmFuIFJpZWwgPHJpZWxAcmVkaGF0LmNvbT4KQ2M6IFBldGVyIFpp amxzdHJhIDxhLnAuemlqbHN0cmFAY2hlbGxvLm5sPgpDYzogRGFuaWVsIFNhbnRvcyA8ZGFuaWVs LnNhbnRvc0Bwb2JveC5jb20+CkNjOiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CkNjOiAi RXJpYyBXLiBCaWVkZXJtYW4iIDxlYmllZGVybUB4bWlzc2lvbi5jb20+ClNpZ25lZC1vZmYtYnk6 IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+ClNpZ25lZC1vZmYtYnk6 IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KLS0tCiB4ZW4v Y29tbW9uL3JidHJlZS5jIHwgMTk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKSwgOTAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9yYnRyZWUuYyBiL3hlbi9jb21t b24vcmJ0cmVlLmMKaW5kZXggMWU0Y2IxZWQyYy4uMjUzODYxZDg4OSAxMDA2NDQKLS0tIGEveGVu L2NvbW1vbi9yYnRyZWUuYworKysgYi94ZW4vY29tbW9uL3JidHJlZS5jCkBAIC0zOCw3ICszOCw4 IEBACiAgKiAgNSksIHRoZW4gdGhlIGxvbmdlc3QgcG9zc2libGUgcGF0aCBkdWUgdG8gNCBpcyAy Qi4KICAqCiAgKiAgV2Ugc2hhbGwgaW5kaWNhdGUgY29sb3Igd2l0aCBjYXNlLCB3aGVyZSBibGFj ayBub2RlcyBhcmUgdXBwZXJjYXNlIGFuZCByZWQKLSAqICBub2RlcyB3aWxsIGJlIGxvd2VyY2Fz ZS4KKyAqICBub2RlcyB3aWxsIGJlIGxvd2VyY2FzZS4gVW5rbm93biBjb2xvciBub2RlcyBzaGFs bCBiZSBkcmF3biBhcyByZWQgd2l0aGluCisgKiAgcGFyZW50aGVzZXMgYW5kIGhhdmUgc29tZSBh Y2NvbXBhbnlpbmcgdGV4dCBjb21tZW50LgogICovCiAKICNkZWZpbmUgICAgUkJfUkVEICAgIDAK QEAgLTQ3LDE3ICs0OCwxMSBAQAogI2RlZmluZSByYl9jb2xvcihyKSAgICAgKChyKS0+X19yYl9w YXJlbnRfY29sb3IgJiAxKQogI2RlZmluZSByYl9pc19yZWQocikgICAgKCFyYl9jb2xvcihyKSkK ICNkZWZpbmUgcmJfaXNfYmxhY2socikgIHJiX2NvbG9yKHIpCi0jZGVmaW5lIHJiX3NldF9yZWQo cikgICBkbyB7IChyKS0+X19yYl9wYXJlbnRfY29sb3IgJj0gfjE7IH0gd2hpbGUgKDApCi0jZGVm aW5lIHJiX3NldF9ibGFjayhyKSBkbyB7IChyKS0+X19yYl9wYXJlbnRfY29sb3IgfD0gMTsgfSB3 aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9wYXJlbnQoc3RydWN0IHJiX25v ZGUgKnJiLCBzdHJ1Y3QgcmJfbm9kZSAqcCkKIHsKICAgICByYi0+X19yYl9wYXJlbnRfY29sb3Ig PSByYl9jb2xvcihyYikgfCAodW5zaWduZWQgbG9uZylwOwogfQotc3RhdGljIGlubGluZSB2b2lk IHJiX3NldF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKLXsKLSAgICByYi0+ X19yYl9wYXJlbnRfY29sb3IgPSAocmItPl9fcmJfcGFyZW50X2NvbG9yICYgfjEpIHwgY29sb3I7 Ci19CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYl9zZXRfcGFyZW50X2NvbG9yKHN0cnVjdCByYl9u b2RlICpyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJi X25vZGUgKnAsIGludCBjb2xvcikKQEAgLTcwLDUyICs2NSw2IEBAIHN0YXRpYyBpbmxpbmUgc3Ry dWN0IHJiX25vZGUgKnJiX3JlZF9wYXJlbnQoc3RydWN0IHJiX25vZGUgKnJlZCkKICAgICByZXR1 cm4gKHN0cnVjdCByYl9ub2RlICopcmVkLT5fX3JiX3BhcmVudF9jb2xvcjsKIH0KIAotc3RhdGlj IHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jv b3QgKnJvb3QpCi17Ci0gICAgc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7 Ci0gICAgc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLQotICAgIGlm ICgobm9kZS0+cmJfcmlnaHQgPSByaWdodC0+cmJfbGVmdCkpCi0gICAgICAgIHJiX3NldF9wYXJl bnQocmlnaHQtPnJiX2xlZnQsIG5vZGUpOwotICAgIHJpZ2h0LT5yYl9sZWZ0ID0gbm9kZTsKLQot ICAgIHJiX3NldF9wYXJlbnQocmlnaHQsIHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAg IHsKLSAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0KQotICAgICAgICAgICAgcGFy ZW50LT5yYl9sZWZ0ID0gcmlnaHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmVudC0+ cmJfcmlnaHQgPSByaWdodDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByb290LT5yYl9ub2Rl ID0gcmlnaHQ7Ci0gICAgcmJfc2V0X3BhcmVudChub2RlLCByaWdodCk7Ci19Ci0KLXN0YXRpYyB2 b2lkIF9fcmJfcm90YXRlX3JpZ2h0KHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9v dCAqcm9vdCkKLXsKLSAgICBzdHJ1Y3QgcmJfbm9kZSAqbGVmdCA9IG5vZGUtPnJiX2xlZnQ7Ci0g ICAgc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLQotICAgIGlmICgo bm9kZS0+cmJfbGVmdCA9IGxlZnQtPnJiX3JpZ2h0KSkKLSAgICAgICAgcmJfc2V0X3BhcmVudChs ZWZ0LT5yYl9yaWdodCwgbm9kZSk7Ci0gICAgbGVmdC0+cmJfcmlnaHQgPSBub2RlOwotCi0gICAg cmJfc2V0X3BhcmVudChsZWZ0LCBwYXJlbnQpOwotCi0gICAgaWYgKHBhcmVudCkKLSAgICB7Ci0g ICAgICAgIGlmIChub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCi0gICAgICAgICAgICBwYXJlbnQt PnJiX3JpZ2h0ID0gbGVmdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyZW50LT5yYl9s ZWZ0ID0gbGVmdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByb290LT5yYl9ub2RlID0gbGVm dDsKLSAgICByYl9zZXRfcGFyZW50KG5vZGUsIGxlZnQpOwotfQotCiAvKgogICogSGVscGVyIGZ1 bmN0aW9uIGZvciByb3RhdGlvbnM6CiAgKiAtIG9sZCdzIHBhcmVudCBhbmQgY29sb3IgZ2V0IGFz c2lnbmVkIHRvIG5ldwpAQCAtMjYwLDcgKzIwOSw3IEBAIEVYUE9SVF9TWU1CT0wocmJfaW5zZXJ0 X2NvbG9yKTsKIHN0YXRpYyB2b2lkIF9fcmJfZXJhc2VfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5v ZGUsIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCByYl9yb290ICpyb290KQogewotICAgIHN0cnVjdCByYl9ub2RlICpvdGhlcjsKKyAg ICBzdHJ1Y3QgcmJfbm9kZSAqc2libGluZywgKnRtcDEsICp0bXAyOwogCiAgICAgd2hpbGUgKHRy dWUpCiAgICAgewpAQCAtMjc1LDY4ICsyMjQsMTM2IEBAIHN0YXRpYyB2b2lkIF9fcmJfZXJhc2Vf Y29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsCiAgICAg ICAgICAqLwogICAgICAgICBpZiAobm9kZSAmJiByYl9pc19yZWQobm9kZSkpCiAgICAgICAgIHsK LSAgICAgICAgICAgIHJiX3NldF9ibGFjayhub2RlKTsKKyAgICAgICAgICAgIHJiX3NldF9wYXJl bnRfY29sb3Iobm9kZSwgcGFyZW50LCBSQl9CTEFDSyk7CiAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgfSBlbHNlIGlmICghcGFyZW50KSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg fSBlbHNlIGlmIChwYXJlbnQtPnJiX2xlZnQgPT0gbm9kZSkgewotICAgICAgICAgICAgb3RoZXIg PSBwYXJlbnQtPnJiX3JpZ2h0OwotICAgICAgICAgICAgaWYgKHJiX2lzX3JlZChvdGhlcikpCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmJfc2V0X2JsYWNrKG90aGVyKTsKLSAgICAg ICAgICAgICAgICByYl9zZXRfcmVkKHBhcmVudCk7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3Rh dGVfbGVmdChwYXJlbnQsIHJvb3QpOwotICAgICAgICAgICAgICAgIG90aGVyID0gcGFyZW50LT5y Yl9yaWdodDsKKyAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQtPnJiX3JpZ2h0OworICAgICAg ICAgICAgaWYgKHJiX2lzX3JlZChzaWJsaW5nKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAg ICAgICAgICAgICAgICogQ2FzZSAxIC0gbGVmdCByb3RhdGUgYXQgcGFyZW50CisgICAgICAgICAg ICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiAgICAgUCAgICAgICAgICAgICAgIFMKKyAgICAg ICAgICAgICAgICAgKiAgICAvIFwgICAgICAgICAgICAgLyBcCisgICAgICAgICAgICAgICAgICog ICBOICAgcyAgICAtLT4gICAgcCAgIFNyCisgICAgICAgICAgICAgICAgICogICAgICAvIFwgICAg ICAgICAvIFwKKyAgICAgICAgICAgICAgICAgKiAgICAgU2wgIFNyICAgICAgTiAgIFNsCisgICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcGFyZW50LT5yYl9yaWdodCA9IHRtcDEg PSBzaWJsaW5nLT5yYl9sZWZ0OworICAgICAgICAgICAgICAgIHNpYmxpbmctPnJiX2xlZnQgPSBw YXJlbnQ7CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAxLCBwYXJlbnQs IFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICBfX3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhwYXJl bnQsIHNpYmxpbmcsIHJvb3QsIFJCX1JFRCk7CisgICAgICAgICAgICAgICAgc2libGluZyA9IHRt cDE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW90aGVyLT5yYl9yaWdodCB8fCBy Yl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKQorICAgICAgICAgICAgdG1wMSA9IHNpYmxpbmct PnJiX3JpZ2h0OworICAgICAgICAgICAgaWYgKCF0bXAxIHx8IHJiX2lzX2JsYWNrKHRtcDEpKQog ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghb3RoZXItPnJiX2xlZnQgfHwgcmJf aXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKQorICAgICAgICAgICAgICAgIHRtcDIgPSBzaWJsaW5n LT5yYl9sZWZ0OworICAgICAgICAgICAgICAgIGlmICghdG1wMiB8fCByYl9pc19ibGFjayh0bXAy KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9yZWQob3Ro ZXIpOworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBDYXNl IDIgLSBzaWJsaW5nIGNvbG9yIGZsaXAKKyAgICAgICAgICAgICAgICAgICAgICogKHAgY291bGQg YmUgZWl0aGVyIGNvbG9yIGhlcmUpCisgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgICAgICAgICAqICAgIChwKSAgICAgICAgICAgKHApCisgICAgICAgICAgICAgICAgICAgICAq ICAgIC8gXCAgICAgICAgICAgLyBcCisgICAgICAgICAgICAgICAgICAgICAqICAgTiAgIFMgICAg LS0+ICBOICAgcworICAgICAgICAgICAgICAgICAgICAgKiAgICAgIC8gXCAgICAgICAgICAgLyBc CisgICAgICAgICAgICAgICAgICAgICAqICAgICBTbCAgU3IgICAgICAgIFNsICBTcgorICAgICAg ICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGxlYXZlcyB1cyB2 aW9sYXRpbmcgNSksIHNvCisgICAgICAgICAgICAgICAgICAgICAqIHJlY3Vyc2UgYXQgcC4gSWYg cCBpcyByZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgKiByZWN1cnNpb24gd2lsbCBqdXN0 IGZsaXAgaXQgdG8gYmxhY2sKKyAgICAgICAgICAgICAgICAgICAgICogYW5kIGV4aXQuIElmIGNv bWluZyBmcm9tIENhc2UgMSwKKyAgICAgICAgICAgICAgICAgICAgICogcCBpcyBrbm93biB0byBi ZSByZWQuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICByYl9z ZXRfcGFyZW50X2NvbG9yKHNpYmxpbmcsIHBhcmVudCwgUkJfUkVEKTsKICAgICAgICAgICAgICAg ICAgICAgbm9kZSA9IHBhcmVudDsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcmJfcGFy ZW50KG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICByYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOwotICAg ICAgICAgICAgICAgIHJiX3NldF9yZWQob3RoZXIpOwotICAgICAgICAgICAgICAgIF9fcmJfcm90 YXRlX3JpZ2h0KG90aGVyLCByb290KTsKLSAgICAgICAgICAgICAgICBvdGhlciA9IHBhcmVudC0+ cmJfcmlnaHQ7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDYXNlIDMg LSByaWdodCByb3RhdGUgYXQgc2libGluZworICAgICAgICAgICAgICAgICAqIChwIGNvdWxkIGJl IGVpdGhlciBjb2xvciBoZXJlKQorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAg ICogICAocCkgICAgICAgICAgIChwKQorICAgICAgICAgICAgICAgICAqICAgLyBcICAgICAgICAg ICAvIFwKKyAgICAgICAgICAgICAgICAgKiAgTiAgIFMgICAgLS0+ICBOICAgU2wKKyAgICAgICAg ICAgICAgICAgKiAgICAgLyBcICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKiAgICBz bCAgU3IgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFNyCisgICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc2libGluZy0+cmJfbGVmdCA9IHRtcDEg PSB0bXAyLT5yYl9yaWdodDsKKyAgICAgICAgICAgICAgICB0bXAyLT5yYl9yaWdodCA9IHNpYmxp bmc7CisgICAgICAgICAgICAgICAgcGFyZW50LT5yYl9yaWdodCA9IHRtcDI7CisgICAgICAgICAg ICAgICAgaWYgKHRtcDEpCisgICAgICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3Io dG1wMSwgc2libGluZywgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIHRtcDEgPSBzaWJsaW5n OworICAgICAgICAgICAgICAgIHNpYmxpbmcgPSB0bXAyOwogICAgICAgICAgICAgfQotICAgICAg ICAgICAgcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKLSAgICAgICAgICAg IHJiX3NldF9ibGFjayhwYXJlbnQpOwotICAgICAgICAgICAgcmJfc2V0X2JsYWNrKG90aGVyLT5y Yl9yaWdodCk7Ci0gICAgICAgICAgICBfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7Cisg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2FzZSA0IC0gbGVmdCByb3RhdGUgYXQgcGFy ZW50ICsgY29sb3IgZmxpcHMKKyAgICAgICAgICAgICAqIChwIGFuZCBzbCBjb3VsZCBiZSBlaXRo ZXIgY29sb3IgaGVyZS4KKyAgICAgICAgICAgICAqICBBZnRlciByb3RhdGlvbiwgcCBiZWNvbWVz IGJsYWNrLCBzIGFjcXVpcmVzCisgICAgICAgICAgICAgKiAgcCdzIGNvbG9yLCBhbmQgc2wga2Vl cHMgaXRzIGNvbG9yKQorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICAgICAgKHApICAg ICAgICAgICAgIChzKQorICAgICAgICAgICAgICogICAgICAvIFwgICAgICAgICAgICAgLyBcCisg ICAgICAgICAgICAgKiAgICAgTiAgIFMgICAgIC0tPiAgIFAgICBTcgorICAgICAgICAgICAgICog ICAgICAgIC8gXCAgICAgICAgIC8gXAorICAgICAgICAgICAgICogICAgICAoc2wpIHNyICAgICAg TiAgKHNsKQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0g dG1wMiA9IHNpYmxpbmctPnJiX2xlZnQ7CisgICAgICAgICAgICBzaWJsaW5nLT5yYl9sZWZ0ID0g cGFyZW50OworICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAxLCBzaWJsaW5nLCBS Ql9CTEFDSyk7CisgICAgICAgICAgICBpZiAodG1wMikKKyAgICAgICAgICAgICAgICByYl9zZXRf cGFyZW50KHRtcDIsIHBhcmVudCk7CisgICAgICAgICAgICBfX3JiX3JvdGF0ZV9zZXRfcGFyZW50 cyhwYXJlbnQsIHNpYmxpbmcsIHJvb3QsIFJCX0JMQUNLKTsKICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgb3RoZXIgPSBw YXJlbnQtPnJiX2xlZnQ7Ci0gICAgICAgICAgICBpZiAocmJfaXNfcmVkKG90aGVyKSkKKyAgICAg ICAgICAgIHNpYmxpbmcgPSBwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICBpZiAocmJfaXNf cmVkKHNpYmxpbmcpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJiX3NldF9ibGFj ayhvdGhlcik7Ci0gICAgICAgICAgICAgICAgcmJfc2V0X3JlZChwYXJlbnQpOwotICAgICAgICAg ICAgICAgIF9fcmJfcm90YXRlX3JpZ2h0KHBhcmVudCwgcm9vdCk7Ci0gICAgICAgICAgICAgICAg b3RoZXIgPSBwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICAgICAgLyogQ2FzZSAxIC0gcmln aHQgcm90YXRlIGF0IHBhcmVudCAqLworICAgICAgICAgICAgICAgIHBhcmVudC0+cmJfbGVmdCA9 IHRtcDEgPSBzaWJsaW5nLT5yYl9yaWdodDsKKyAgICAgICAgICAgICAgICBzaWJsaW5nLT5yYl9y aWdodCA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEs IHBhcmVudCwgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIF9fcmJfcm90YXRlX3NldF9wYXJl bnRzKHBhcmVudCwgc2libGluZywgcm9vdCwgUkJfUkVEKTsKKyAgICAgICAgICAgICAgICBzaWJs aW5nID0gdG1wMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghb3RoZXItPnJiX2xl ZnQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKQorICAgICAgICAgICAgdG1wMSA9IHNp YmxpbmctPnJiX2xlZnQ7CisgICAgICAgICAgICBpZiAoIXRtcDEgfHwgcmJfaXNfYmxhY2sodG1w MSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhlci0+cmJfcmlnaHQg fHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkKKyAgICAgICAgICAgICAgICB0bXAyID0g c2libGluZy0+cmJfcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAyIHx8IHJiX2lzX2Js YWNrKHRtcDIpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0 X3JlZChvdGhlcik7CisgICAgICAgICAgICAgICAgICAgIC8qIENhc2UgMiAtIHNpYmxpbmcgY29s b3IgZmxpcCAqLworICAgICAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHNpYmxp bmcsIHBhcmVudCwgUkJfUkVEKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudDsK ICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcmJfcGFyZW50KG5vZGUpOwogICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg cmJfc2V0X2JsYWNrKG90aGVyLT5yYl9yaWdodCk7Ci0gICAgICAgICAgICAgICAgcmJfc2V0X3Jl ZChvdGhlcik7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfbGVmdChvdGhlciwgcm9vdCk7 Ci0gICAgICAgICAgICAgICAgb3RoZXIgPSBwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICAg ICAgLyogQ2FzZSAzIC0gcmlnaHQgcm90YXRlIGF0IHNpYmxpbmcgKi8KKyAgICAgICAgICAgICAg ICBzaWJsaW5nLT5yYl9yaWdodCA9IHRtcDEgPSB0bXAyLT5yYl9sZWZ0OworICAgICAgICAgICAg ICAgIHRtcDItPnJiX2xlZnQgPSBzaWJsaW5nOworICAgICAgICAgICAgICAgIHBhcmVudC0+cmJf bGVmdCA9IHRtcDI7CisgICAgICAgICAgICAgICAgaWYgKHRtcDEpCisgICAgICAgICAgICAgICAg ICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wMSwgc2libGluZywgUkJfQkxBQ0spOworICAgICAg ICAgICAgICAgIHRtcDEgPSBzaWJsaW5nOworICAgICAgICAgICAgICAgIHNpYmxpbmcgPSB0bXAy OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xv cihwYXJlbnQpKTsKLSAgICAgICAgICAgIHJiX3NldF9ibGFjayhwYXJlbnQpOwotICAgICAgICAg ICAgcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9sZWZ0KTsKLSAgICAgICAgICAgIF9fcmJfcm90YXRl X3JpZ2h0KHBhcmVudCwgcm9vdCk7CisgICAgICAgICAgICAvKiBDYXNlIDQgLSBsZWZ0IHJvdGF0 ZSBhdCBwYXJlbnQgKyBjb2xvciBmbGlwcyAqLworICAgICAgICAgICAgcGFyZW50LT5yYl9sZWZ0 ID0gdG1wMiA9IHNpYmxpbmctPnJiX3JpZ2h0OworICAgICAgICAgICAgc2libGluZy0+cmJfcmln aHQgPSBwYXJlbnQ7CisgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEsIHNpYmxp bmcsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgIGlmICh0bXAyKQorICAgICAgICAgICAgICAgIHJi X3NldF9wYXJlbnQodG1wMiwgcGFyZW50KTsKKyAgICAgICAgICAgIF9fcmJfcm90YXRlX3NldF9w YXJlbnRzKHBhcmVudCwgc2libGluZywgcm9vdCwgUkJfQkxBQ0spOwogICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgIH0KICAgICB9Ci0tIAoyLjEyLjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK