From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [PATCH v5 10/17] rbtree: low level optimizations in __rb_erase_color() Date: Fri, 14 Jul 2017 13:56:29 +0530 Message-ID: <20170714082636.29511-11-kpraveen.lkml@gmail.com> References: <20170714082636.29511-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: <20170714082636.29511-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: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, kpraveen.lkml@gmail.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org RnJvbTogTWljaGVsIExlc3BpbmFzc2UgPHdhbGtlbkBnb29nbGUuY29tPgoKSW4gX19yYl9lcmFz ZV9jb2xvcigpLCB3ZSBvZnRlbiBhbHJlYWR5IGhhdmUgcG9pbnRlcnMgdG8gdGhlIG5vZGVzIGJl aW5nCnJvdGF0ZWQgYW5kL29yIGtub3cgd2hhdCB0aGVpciBjb2xvcnMgbXVzdCBiZSwgc28gd2Ug Y2FuIGdlbmVyYXRlIG1vcmUKZWZmaWNpZW50IGNvZGUgdGhhbiB0aGUgZ2VuZXJpYyBfX3JiX3Jv dGF0ZV9sZWZ0KCkgYW5kIF9fcmJfcm90YXRlX3JpZ2h0KCkKZnVuY3Rpb25zLgoKQWxzbyB3aGVu IHRoZSBjdXJyZW50IG5vZGUgaXMgcmVkIG9yIHdoZW4gZmxpcHBpbmcgdGhlIHNpYmxpbmcncyBj b2xvciwKdGhlIHBhcmVudCBpcyBhbHJlYWR5IGtub3duIHNvIHdlIGNhbiB1c2UgdGhlIG1vcmUg ZWZmaWNpZW50CnJiX3NldF9wYXJlbnRfY29sb3IoKSBmdW5jdGlvbiB0byBzZXQgdGhlIGRlc2ly ZWQgY29sb3IuCgpTaWduZWQtb2ZmLWJ5OiBNaWNoZWwgTGVzcGluYXNzZSA8d2Fsa2VuQGdvb2ds ZS5jb20+CkNjOiBBbmRyZWEgQXJjYW5nZWxpIDxhYXJjYW5nZUByZWRoYXQuY29tPgpBY2tlZC1i eTogRGF2aWQgV29vZGhvdXNlIDxEYXZpZC5Xb29kaG91c2VAaW50ZWwuY29tPgpDYzogUmlrIHZh biBSaWVsIDxyaWVsQHJlZGhhdC5jb20+CkNjOiBQZXRlciBaaWpsc3RyYSA8YS5wLnppamxzdHJh QGNoZWxsby5ubD4KQ2M6IERhbmllbCBTYW50b3MgPGRhbmllbC5zYW50b3NAcG9ib3guY29tPgpD YzogSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgpDYzogIkVyaWMgVy4gQmllZGVybWFuIiA8 ZWJpZWRlcm1AeG1pc3Npb24uY29tPgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgTW9ydG9uIDxha3Bt QGxpbnV4LWZvdW5kYXRpb24ub3JnPgpTaWduZWQtb2ZmLWJ5OiBMaW51cyBUb3J2YWxkcyA8dG9y dmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CltMaW51eCBjb21taXQgNjI4MGQyMzU2ZmQ4YWQw OTM2YTYzYzEwZGMxZTZhY2NmNDhkMGM2MV0KClBvcnRlZCB0byBYZW4uCgpTaWduZWQtb2ZmLWJ5 OiBQcmF2ZWVuIEt1bWFyIDxrcHJhdmVlbi5sa21sQGdtYWlsLmNvbT4KLS0tCiB4ZW4vY29tbW9u L3JidHJlZS5jIHwgMjA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMTUgaW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9yYnRyZWUuYyBiL3hlbi9jb21tb24vcmJ0 cmVlLmMKaW5kZXggYTY0OTFlNTYxMC4uZTU4MzM2YmQyNiAxMDA2NDQKLS0tIGEveGVuL2NvbW1v bi9yYnRyZWUuYworKysgYi94ZW4vY29tbW9uL3JidHJlZS5jCkBAIC0zOSw3ICszOSw4IEBACiAg KiAgNSksIHRoZW4gdGhlIGxvbmdlc3QgcG9zc2libGUgcGF0aCBkdWUgdG8gNCBpcyAyQi4KICAq CiAgKiAgV2Ugc2hhbGwgaW5kaWNhdGUgY29sb3Igd2l0aCBjYXNlLCB3aGVyZSBibGFjayBub2Rl cyBhcmUgdXBwZXJjYXNlIGFuZCByZWQKLSAqICBub2RlcyB3aWxsIGJlIGxvd2VyY2FzZS4KKyAq ICBub2RlcyB3aWxsIGJlIGxvd2VyY2FzZS4gVW5rbm93biBjb2xvciBub2RlcyBzaGFsbCBiZSBk cmF3biBhcyByZWQgd2l0aGluCisgKiAgcGFyZW50aGVzZXMgYW5kIGhhdmUgc29tZSBhY2NvbXBh bnlpbmcgdGV4dCBjb21tZW50LgogICovCiAKICNkZWZpbmUJCVJCX1JFRAkJMApAQCAtNDgsMTcg KzQ5LDExIEBACiAjZGVmaW5lIHJiX2NvbG9yKHIpICAgKChyKS0+X19yYl9wYXJlbnRfY29sb3Ig JiAxKQogI2RlZmluZSByYl9pc19yZWQocikgICAoIXJiX2NvbG9yKHIpKQogI2RlZmluZSByYl9p c19ibGFjayhyKSByYl9jb2xvcihyKQotI2RlZmluZSByYl9zZXRfcmVkKHIpICBkbyB7IChyKS0+ X19yYl9wYXJlbnRfY29sb3IgJj0gfjE7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHJiX3NldF9ibGFj ayhyKSAgZG8geyAociktPl9fcmJfcGFyZW50X2NvbG9yIHw9IDE7IH0gd2hpbGUgKDApCiAKIHN0 YXRpYyBpbmxpbmUgdm9pZCByYl9zZXRfcGFyZW50KHN0cnVjdCByYl9ub2RlICpyYiwgc3RydWN0 IHJiX25vZGUgKnApCiB7CiAJcmItPl9fcmJfcGFyZW50X2NvbG9yID0gcmJfY29sb3IocmIpIHwg KHVuc2lnbmVkIGxvbmcpcDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYl9zZXRfY29sb3Ioc3Ry dWN0IHJiX25vZGUgKnJiLCBpbnQgY29sb3IpCi17Ci0JcmItPl9fcmJfcGFyZW50X2NvbG9yID0g KHJiLT5fX3JiX3BhcmVudF9jb2xvciAmIH4xKSB8IGNvbG9yOwotfQogCiBzdGF0aWMgaW5saW5l IHZvaWQgcmJfc2V0X3BhcmVudF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqcmIsCiAJCQkJICAgICAg c3RydWN0IHJiX25vZGUgKnAsIGludCBjb2xvcikKQEAgLTcxLDUyICs2Niw2IEBAIHN0YXRpYyBp bmxpbmUgc3RydWN0IHJiX25vZGUgKnJiX3JlZF9wYXJlbnQoc3RydWN0IHJiX25vZGUgKnJlZCkK IAlyZXR1cm4gKHN0cnVjdCByYl9ub2RlICopcmVkLT5fX3JiX3BhcmVudF9jb2xvcjsKIH0KIAot c3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0 IHJiX3Jvb3QgKnJvb3QpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmln aHQ7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLQotCWlmICgo bm9kZS0+cmJfcmlnaHQgPSByaWdodC0+cmJfbGVmdCkpCi0JCXJiX3NldF9wYXJlbnQocmlnaHQt PnJiX2xlZnQsIG5vZGUpOwotCXJpZ2h0LT5yYl9sZWZ0ID0gbm9kZTsKLQotCXJiX3NldF9wYXJl bnQocmlnaHQsIHBhcmVudCk7Ci0KLQlpZiAocGFyZW50KQotCXsKLQkJaWYgKG5vZGUgPT0gcGFy ZW50LT5yYl9sZWZ0KQotCQkJcGFyZW50LT5yYl9sZWZ0ID0gcmlnaHQ7Ci0JCWVsc2UKLQkJCXBh cmVudC0+cmJfcmlnaHQgPSByaWdodDsKLQl9Ci0JZWxzZQotCQlyb290LT5yYl9ub2RlID0gcmln aHQ7Ci0JcmJfc2V0X3BhcmVudChub2RlLCByaWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fcmJf cm90YXRlX3JpZ2h0KHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkK LXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbGVmdCA9IG5vZGUtPnJiX2xlZnQ7Ci0Jc3RydWN0IHJiX25v ZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLQotCWlmICgobm9kZS0+cmJfbGVmdCA9IGxl ZnQtPnJiX3JpZ2h0KSkKLQkJcmJfc2V0X3BhcmVudChsZWZ0LT5yYl9yaWdodCwgbm9kZSk7Ci0J bGVmdC0+cmJfcmlnaHQgPSBub2RlOwotCi0JcmJfc2V0X3BhcmVudChsZWZ0LCBwYXJlbnQpOwot Ci0JaWYgKHBhcmVudCkKLQl7Ci0JCWlmIChub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCi0JCQlw YXJlbnQtPnJiX3JpZ2h0ID0gbGVmdDsKLQkJZWxzZQotCQkJcGFyZW50LT5yYl9sZWZ0ID0gbGVm dDsKLQl9Ci0JZWxzZQotCQlyb290LT5yYl9ub2RlID0gbGVmdDsKLQlyYl9zZXRfcGFyZW50KG5v ZGUsIGxlZnQpOwotfQotCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciByb3RhdGlvbnM6CiAg KiAtIG9sZCdzIHBhcmVudCBhbmQgY29sb3IgZ2V0IGFzc2lnbmVkIHRvIG5ldwpAQCAtMjU3LDcg KzIwNiw3IEBAIEVYUE9SVF9TWU1CT0wocmJfaW5zZXJ0X2NvbG9yKTsKIHN0YXRpYyB2b2lkIF9f cmJfZXJhc2VfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9ub2RlICpwYXJl bnQsCiAJCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KQogewotCXN0cnVjdCByYl9ub2RlICpv dGhlcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqc2libGluZywgKnRtcDEsICp0bXAyOwogCiAJd2hpbGUg KHRydWUpIHsKIAkJLyoKQEAgLTI3MCw2MyArMjE5LDEzNiBAQCBzdGF0aWMgdm9pZCBfX3JiX2Vy YXNlX2NvbG9yKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50LAog CQkgKiBhbmQgdHJlZSByb3RhdGlvbnMgYXMgcGVyIG9uZSBvZiB0aGUgNCBjYXNlcyBiZWxvdy4K IAkJICovCiAJCWlmIChub2RlICYmIHJiX2lzX3JlZChub2RlKSkgewotCQkJcmJfc2V0X2JsYWNr KG5vZGUpOworCQkJcmJfc2V0X3BhcmVudF9jb2xvcihub2RlLCBwYXJlbnQsIFJCX0JMQUNLKTsK IAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKCFwYXJlbnQpIHsKIAkJCWJyZWFrOwogCQl9IGVsc2Ug aWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKSB7Ci0JCQlvdGhlciA9IHBhcmVudC0+cmJfcmln aHQ7Ci0JCQlpZiAocmJfaXNfcmVkKG90aGVyKSkKLQkJCXsKLQkJCQlyYl9zZXRfYmxhY2sob3Ro ZXIpOwotCQkJCXJiX3NldF9yZWQocGFyZW50KTsKLQkJCQlfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVu dCwgcm9vdCk7Ci0JCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OworCQkJc2libGluZyA9IHBh cmVudC0+cmJfcmlnaHQ7CisJCQlpZiAocmJfaXNfcmVkKHNpYmxpbmcpKSB7CisJCQkJLyoKKwkJ CQkgKiBDYXNlIDEgLSBsZWZ0IHJvdGF0ZSBhdCBwYXJlbnQKKwkJCQkgKgorCQkJCSAqICAgICBQ ICAgICAgICAgICAgICAgUworCQkJCSAqICAgIC8gXCAgICAgICAgICAgICAvIFwKKwkJCQkgKiAg IE4gICBzICAgIC0tPiAgICBwICAgU3IKKwkJCQkgKiAgICAgIC8gXCAgICAgICAgIC8gXAorCQkJ CSAqICAgICBTbCAgU3IgICAgICBOICAgU2wKKwkJCQkgKi8KKwkJCQlwYXJlbnQtPnJiX3JpZ2h0 ID0gdG1wMSA9IHNpYmxpbmctPnJiX2xlZnQ7CisJCQkJc2libGluZy0+cmJfbGVmdCA9IHBhcmVu dDsKKwkJCQlyYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEsIHBhcmVudCwgUkJfQkxBQ0spOworCQkJ CV9fcmJfcm90YXRlX3NldF9wYXJlbnRzKHBhcmVudCwgc2libGluZywgcm9vdCwKKwkJCQkJCQlS Ql9SRUQpOworCQkJCXNpYmxpbmcgPSB0bXAxOwogCQkJfQotCQkJaWYgKCFvdGhlci0+cmJfcmln aHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkgewotCQkJCWlmICghb3RoZXItPnJi X2xlZnQgfHwKLQkJCQkgICAgcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKSB7Ci0JCQkJCXJi X3NldF9yZWQob3RoZXIpOworCQkJdG1wMSA9IHNpYmxpbmctPnJiX3JpZ2h0OworCQkJaWYgKCF0 bXAxIHx8IHJiX2lzX2JsYWNrKHRtcDEpKSB7CisJCQkJdG1wMiA9IHNpYmxpbmctPnJiX2xlZnQ7 CisJCQkJaWYgKCF0bXAyIHx8IHJiX2lzX2JsYWNrKHRtcDIpKSB7CisJCQkJCS8qCisJCQkJCSog Q2FzZSAyIC0gc2libGluZyBjb2xvciBmbGlwCisJCQkJCSogKHAgY291bGQgYmUgZWl0aGVyIGNv bG9yIGhlcmUpCisJCQkJCSoKKwkJCQkJKiAgICAocCkgICAgICAgICAgIChwKQorCQkJCQkqICAg IC8gXCAgICAgICAgICAgLyBcCisJCQkJCSogICBOICAgUyAgICAtLT4gIE4gICBzCisJCQkJCSog ICAgICAvIFwgICAgICAgICAgIC8gXAorCQkJCQkqICAgICBTbCAgU3IgICAgICAgIFNsICBTcgor CQkJCQkqCisJCQkJCSogVGhpcyBsZWF2ZXMgdXMgdmlvbGF0aW5nIDUpLCBzbworCQkJCQkqIHJl Y3Vyc2UgYXQgcC4gSWYgcCBpcyByZWQsIHRoZQorCQkJCQkqIHJlY3Vyc2lvbiB3aWxsIGp1c3Qg ZmxpcCBpdCB0byBibGFjaworCQkJCQkqIGFuZCBleGl0LiBJZiBjb21pbmcgZnJvbSBDYXNlIDEs CisJCQkJCSogcCBpcyBrbm93biB0byBiZSByZWQuCisJCQkJCSovCisJCQkJCXJiX3NldF9wYXJl bnRfY29sb3Ioc2libGluZywgcGFyZW50LAorCQkJCQkJCSAgICBSQl9SRUQpOwogCQkJCQlub2Rl ID0gcGFyZW50OwogCQkJCQlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CiAJCQkJCWNvbnRpbnVl OwogCQkJCX0KLQkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOwotCQkJCXJiX3NldF9y ZWQob3RoZXIpOwotCQkJCV9fcmJfcm90YXRlX3JpZ2h0KG90aGVyLCByb290KTsKLQkJCQlvdGhl ciA9IHBhcmVudC0+cmJfcmlnaHQ7CisJCQkJLyoKKwkJCQkgKiBDYXNlIDMgLSByaWdodCByb3Rh dGUgYXQgc2libGluZworCQkJCSAqIChwIGNvdWxkIGJlIGVpdGhlciBjb2xvciBoZXJlKQorCQkJ CSAqCisJCQkJICogICAocCkgICAgICAgICAgIChwKQorCQkJCSAqICAgLyBcICAgICAgICAgICAv IFwKKwkJCQkgKiAgTiAgIFMgICAgLS0+ICBOICAgU2wKKwkJCQkgKiAgICAgLyBcICAgICAgICAg ICAgIFwKKwkJCQkgKiAgICBzbCAgU3IgICAgICAgICAgICBzCisJCQkJICogICAgICAgICAgICAg ICAgICAgICAgIFwKKwkJCQkgKiAgICAgICAgICAgICAgICAgICAgICAgIFNyCisJCQkJICovCisJ CQkJc2libGluZy0+cmJfbGVmdCA9IHRtcDEgPSB0bXAyLT5yYl9yaWdodDsKKwkJCQl0bXAyLT5y Yl9yaWdodCA9IHNpYmxpbmc7CisJCQkJcGFyZW50LT5yYl9yaWdodCA9IHRtcDI7CisJCQkJaWYg KHRtcDEpCisJCQkJCXJiX3NldF9wYXJlbnRfY29sb3IodG1wMSwgc2libGluZywKKwkJCQkJCQkg ICAgUkJfQkxBQ0spOworCQkJCXRtcDEgPSBzaWJsaW5nOworCQkJCXNpYmxpbmcgPSB0bXAyOwog CQkJfQotCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKLQkJCXJiX3Nl dF9ibGFjayhwYXJlbnQpOwotCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9yaWdodCk7Ci0JCQlf X3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7CisJCQkvKgorCQkJICogQ2FzZSA0IC0gbGVm dCByb3RhdGUgYXQgcGFyZW50ICsgY29sb3IgZmxpcHMKKwkJCSAqIChwIGFuZCBzbCBjb3VsZCBi ZSBlaXRoZXIgY29sb3IgaGVyZS4KKwkJCSAqICBBZnRlciByb3RhdGlvbiwgcCBiZWNvbWVzIGJs YWNrLCBzIGFjcXVpcmVzCisJCQkgKiAgcCdzIGNvbG9yLCBhbmQgc2wga2VlcHMgaXRzIGNvbG9y KQorCQkJICoKKwkJCSAqICAgICAgKHApICAgICAgICAgICAgIChzKQorCQkJICogICAgICAvIFwg ICAgICAgICAgICAgLyBcCisJCQkgKiAgICAgTiAgIFMgICAgIC0tPiAgIFAgICBTcgorCQkJICog ICAgICAgIC8gXCAgICAgICAgIC8gXAorCQkJICogICAgICAoc2wpIHNyICAgICAgTiAgKHNsKQor CQkJICovCisJCQlwYXJlbnQtPnJiX3JpZ2h0ID0gdG1wMiA9IHNpYmxpbmctPnJiX2xlZnQ7CisJ CQlzaWJsaW5nLT5yYl9sZWZ0ID0gcGFyZW50OworCQkJcmJfc2V0X3BhcmVudF9jb2xvcih0bXAx LCBzaWJsaW5nLCBSQl9CTEFDSyk7CisJCQlpZiAodG1wMikKKwkJCQlyYl9zZXRfcGFyZW50KHRt cDIsIHBhcmVudCk7CisJCQlfX3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhwYXJlbnQsIHNpYmxpbmcs IHJvb3QsCisJCQkJCQlSQl9CTEFDSyk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKLQkJCW90aGVy ID0gcGFyZW50LT5yYl9sZWZ0OwotCQkJaWYgKHJiX2lzX3JlZChvdGhlcikpCi0JCQl7Ci0JCQkJ cmJfc2V0X2JsYWNrKG90aGVyKTsKLQkJCQlyYl9zZXRfcmVkKHBhcmVudCk7Ci0JCQkJX19yYl9y b3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKLQkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsK KwkJCXNpYmxpbmcgPSBwYXJlbnQtPnJiX2xlZnQ7CisJCQlpZiAocmJfaXNfcmVkKHNpYmxpbmcp KSB7CisJCQkJLyogQ2FzZSAxIC0gcmlnaHQgcm90YXRlIGF0IHBhcmVudCAqLworCQkJCXBhcmVu dC0+cmJfbGVmdCA9IHRtcDEgPSBzaWJsaW5nLT5yYl9yaWdodDsKKwkJCQlzaWJsaW5nLT5yYl9y aWdodCA9IHBhcmVudDsKKwkJCQlyYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEsIHBhcmVudCwgUkJf QkxBQ0spOworCQkJCV9fcmJfcm90YXRlX3NldF9wYXJlbnRzKHBhcmVudCwgc2libGluZywgcm9v dCwKKwkJCQkJCQlSQl9SRUQpOworCQkJCXNpYmxpbmcgPSB0bXAxOwogCQkJfQotCQkJaWYgKCFv dGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpIHsKLQkJCQlpZiAo IW90aGVyLT5yYl9yaWdodCB8fAotCQkJCSAgICByYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQp KSB7Ci0JCQkJCXJiX3NldF9yZWQob3RoZXIpOworCQkJdG1wMSA9IHNpYmxpbmctPnJiX2xlZnQ7 CisJCQlpZiAoIXRtcDEgfHwgcmJfaXNfYmxhY2sodG1wMSkpIHsKKwkJCQl0bXAyID0gc2libGlu Zy0+cmJfcmlnaHQ7CisJCQkJaWYgKCF0bXAyIHx8IHJiX2lzX2JsYWNrKHRtcDIpKSB7CisJCQkJ CS8qIENhc2UgMiAtIHNpYmxpbmcgY29sb3IgZmxpcCAqLworCQkJCQlyYl9zZXRfcGFyZW50X2Nv bG9yKHNpYmxpbmcsIHBhcmVudCwKKwkJCQkJCQkgICAgUkJfUkVEKTsKIAkJCQkJbm9kZSA9IHBh cmVudDsKIAkJCQkJcGFyZW50ID0gcmJfcGFyZW50KG5vZGUpOwogCQkJCQljb250aW51ZTsKIAkJ CQl9Ci0JCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9yaWdodCk7Ci0JCQkJcmJfc2V0X3JlZChv dGhlcik7Ci0JCQkJX19yYl9yb3RhdGVfbGVmdChvdGhlciwgcm9vdCk7Ci0JCQkJb3RoZXIgPSBw YXJlbnQtPnJiX2xlZnQ7CisJCQkJLyogQ2FzZSAzIC0gcmlnaHQgcm90YXRlIGF0IHNpYmxpbmcg Ki8KKwkJCQlzaWJsaW5nLT5yYl9yaWdodCA9IHRtcDEgPSB0bXAyLT5yYl9sZWZ0OworCQkJCXRt cDItPnJiX2xlZnQgPSBzaWJsaW5nOworCQkJCXBhcmVudC0+cmJfbGVmdCA9IHRtcDI7CisJCQkJ aWYgKHRtcDEpCisJCQkJCXJiX3NldF9wYXJlbnRfY29sb3IodG1wMSwgc2libGluZywKKwkJCQkJ CQkgICAgUkJfQkxBQ0spOworCQkJCXRtcDEgPSBzaWJsaW5nOworCQkJCXNpYmxpbmcgPSB0bXAy OwogCQkJfQotCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKLQkJCXJi X3NldF9ibGFjayhwYXJlbnQpOwotCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9sZWZ0KTsKLQkJ CV9fcmJfcm90YXRlX3JpZ2h0KHBhcmVudCwgcm9vdCk7CisJCQkvKiBDYXNlIDQgLSBsZWZ0IHJv dGF0ZSBhdCBwYXJlbnQgKyBjb2xvciBmbGlwcyAqLworCQkJcGFyZW50LT5yYl9sZWZ0ID0gdG1w MiA9IHNpYmxpbmctPnJiX3JpZ2h0OworCQkJc2libGluZy0+cmJfcmlnaHQgPSBwYXJlbnQ7CisJ CQlyYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEsIHNpYmxpbmcsIFJCX0JMQUNLKTsKKwkJCWlmICh0 bXAyKQorCQkJCXJiX3NldF9wYXJlbnQodG1wMiwgcGFyZW50KTsKKwkJCV9fcmJfcm90YXRlX3Nl dF9wYXJlbnRzKHBhcmVudCwgc2libGluZywgcm9vdCwKKwkJCQkJCVJCX0JMQUNLKTsKIAkJCWJy ZWFrOwogCQl9CiAJfQotLSAKMi4xMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==