From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 6/7] x86/mm: Combine {destroy, replace}_grant_{pte, va}_mapping() Date: Tue, 12 Sep 2017 13:14:45 +0100 Message-ID: <1505218486-4416-7-git-send-email-andrew.cooper3@citrix.com> References: <1505218486-4416-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1505218486-4416-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org QXMgd2l0aCB0aGUgY3JlYXRlIHNpZGUgb2YgdGhpbmdzLCB0aGVzZSBhcmUgbGFyZ2VseSBpZGVu dGljYWwuICBNb3N0IGNhc2VzCmFyZSBhY3R1YWxseSBkZXN0cm95aW5nIHRoZSBtYXBwaW5nIHJh dGhlciB0aGFuIHJlcGxhY2luZyBpdCB3aXRoIGEgc3RvbGVuCmVudHJ5LgoKUmVpbXBsZW1lbnQg dGhlaXIgbG9naWMgaW4gcmVwbGFjZV9ncmFudF9wdl9tYXBwaW5nKCkgaW4gYSBtb3N0bHkgY29t bW9uCndheS4KCk5vIChpbnRlbmRlZCkgY2hhbmdlIGluIGJlaGF2aW91ciBmcm9tIGEgZ3Vlc3Rz IHBvaW50IG9mIHZpZXcuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29v cGVyM0BjaXRyaXguY29tPgotLS0KQ0M6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNvbT4K Q0M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L21tLmMg fCAyNzcgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgODcgaW5zZXJ0aW9ucygrKSwgMTkwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS5jIGIveGVuL2FyY2gveDg2L21tLmMKaW5kZXgg YWZkOThkOS4uMWE4YWQ0MiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21tLmMKKysrIGIveGVu L2FyY2gveDg2L21tLmMKQEAgLTM4MzEsMTgzICszODMxLDYgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBncmFudF90b19wdGVfZmxhZ3ModW5zaWduZWQgaW50IGdyYW50X2ZsYWdzLAogICAgIHJldHVy biBwdGVfZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbnQgZGVzdHJveV9ncmFudF9wdGVfbWFwcGluZygK LSAgICB1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCB1bnNpZ25lZCBpbnQgZ3Jh bnRfcHRlX2ZsYWdzLAotICAgIHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgaW50IHJjID0gR05U U1Rfb2theTsKLSAgICB2b2lkICp2YTsKLSAgICB1bnNpZ25lZCBsb25nIGdtZm4sIG1mbjsKLSAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIGwxX3BnZW50cnlfdCBvbDFlOwotCi0gICAg LyoKLSAgICAgKiBhZGRyIGNvbWVzIGZyb20gWGVuJ3MgYWN0aXZlX2VudHJ5IHRyYWNraW5nIHNv IGlzbid0IGd1ZXN0IGNvbnRyb2xsZWQsCi0gICAgICogYnV0IGl0IGhhZCBzdGlsbCBiZXR0ZXIg YmUgUFRFLWFsaWduZWQuCi0gICAgICovCi0gICAgaWYgKCAhSVNfQUxJR05FRChhZGRyLCBzaXpl b2Yob2wxZSkpICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwotICAgICAg ICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAgICBnbWZuID0gYWRkciA+ PiBQQUdFX1NISUZUOwotICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBnbWZuLCBOVUxM LCBQMk1fQUxMT0MpOwotCi0gICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1h bCB1cGRhdGVcbiIpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9 Ci0KLSAgICBtZm4gPSBtZm5feChwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgdmEgPSBtYXBfZG9t YWluX3BhZ2UoX21mbihtZm4pKTsKLSAgICB2YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZh ICsgKCh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLKSk7Ci0KLSAgICBpZiAoICFwYWdl X2xvY2socGFnZSkgKQotICAgIHsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwot ICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0KLSAgICBpZiAoIChwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKLSAgICB7Ci0g ICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJy b3I7Ci0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIH0KLQotICAgIG9sMWUgPSAqKGwxX3BnZW50 cnlfdCAqKXZhOwotCi0gICAgLyoKLSAgICAgKiBDaGVjayB0aGF0IHRoZSBQVEUgc3VwcGxpZWQg YWN0dWFsbHkgbWFwcyBmcmFtZSAod2l0aCBhcHByb3ByaWF0ZQotICAgICAqIHBlcm1pc3Npb25z KS4KLSAgICAgKi8KLSAgICBpZiAoIHVubGlrZWx5KGwxZV9nZXRfcGZuKG9sMWUpICE9IGZyYW1l KSB8fAotICAgICAgICAgdW5saWtlbHkoKGwxZV9nZXRfZmxhZ3Mob2wxZSkgXiBncmFudF9wdGVf ZmxhZ3MpICYKLSAgICAgICAgICAgICAgICAgIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcpKSAp Ci0gICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgZ2RwcmludGsoWEVO TE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgIlBURSAlIlBSSXB0ZSIgYXQgJSJQUkl4NjQiIGRv ZXNuJ3QgbWF0Y2ggZ3JhbnQgKCUiUFJJcHRlIilcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9n ZXRfaW50cHRlKG9sMWUpLCBhZGRyLAotICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShs MWVfZnJvbV9wZm4oZnJhbWUsIGdyYW50X3B0ZV9mbGFncykpKTsKLSAgICAgICAgcmMgPSBHTlRT VF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0KLSAgICBpZiAo IHVubGlrZWx5KChsMWVfZ2V0X2ZsYWdzKG9sMWUpIF4gZ3JhbnRfcHRlX2ZsYWdzKSAmCi0gICAg ICAgICAgICAgICAgICB+KF9QQUdFX0FWQUlMIHwgUEFHRV9DQUNIRV9BVFRSUykpICkKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJQVEUgZmxhZ3Mg JXggYXQgJSJQUkl4NjQiIGRvbid0IG1hdGNoIGdyYW50ICgleClcbiIsCi0gICAgICAgICAgICAg ICAgIGwxZV9nZXRfZmxhZ3Mob2wxZSksIGFkZHIsIGdyYW50X3B0ZV9mbGFncyk7Ci0KLSAgICAv KiBEZWxldGUgcGFnZXRhYmxlIGVudHJ5LiAqLwotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9F TlRSWShsMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxX3BnZW50cnlfdCAq KXZhLCBvbDFlLCBsMWVfZW1wdHkoKSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkLT52Y3B1WzBdIC8qIENoYW5nZSBpZiB3ZSBnbyB0byBwZXItdmNwdSBzaGFkb3dzLiAq LywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpICkKLSAgICB7Ci0gICAgICAg IHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNh bm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICUiUFJJeDY0IlxuIiwKLSAgICAgICAgICAgICAgICAg YWRkcik7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAgZ290byBm YWlsZWQ7Ci0gICAgfQotCi0gICAgcGFnZV91bmxvY2socGFnZSk7Ci0KLSBmYWlsZWQ6Ci0gICAg dW5tYXBfZG9tYWluX3BhZ2UodmEpOwotICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgIHJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoCi0gICAgdW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCB1bnNpZ25lZCBpbnQgZ3JhbnRfcHRl X2ZsYWdzLAotICAgIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBs MV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7Ci0gICAgbWZuX3QgZ2wxbWZuOwotICAgIHN0cnVjdCBw YWdlX2luZm8gKmwxcGc7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHBsMWUgPSBtYXBfZ3Vlc3Rf bDFlKGFkZHIsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsKLSAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9yIGFkZHJlc3Mg JWx4XG4iLCBhZGRyKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAg fQotCi0gICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4oZ2wxbWZuLCBjdXJyZW50LT5kb21haW4p ICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAgZ290 byBvdXQ7Ci0gICAgfQotCi0gICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7Ci0gICAgaWYg KCAhcGFnZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9l cnJvcjsKLSAgICAgICAgcHV0X3BhZ2UobDFwZyk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0K LQotICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0g UEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OwotICAgIH0KLQotICAgIG9sMWUgPSAq cGwxZTsKLQotICAgIC8qCi0gICAgICogQ2hlY2sgdGhhdCB0aGUgdmlydHVhbCBhZGRyZXNzIHN1 cHBsaWVkIGlzIGFjdHVhbGx5IG1hcHBlZCB0byBmcmFtZQotICAgICAqICh3aXRoIGFwcHJvcHJp YXRlIHBlcm1pc3Npb25zKS4KLSAgICAgKi8KLSAgICBpZiAoIHVubGlrZWx5KGwxZV9nZXRfcGZu KG9sMWUpICE9IGZyYW1lKSB8fAotICAgICAgICAgdW5saWtlbHkoKGwxZV9nZXRfZmxhZ3Mob2wx ZSkgXiBncmFudF9wdGVfZmxhZ3MpICYKLSAgICAgICAgICAgICAgICAgIChfUEFHRV9QUkVTRU5U IHwgX1BBR0VfUlcpKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJSLAotICAg ICAgICAgICAgICAgICAiUFRFICUiUFJJcHRlIiBmb3IgJWx4IGRvZXNuJ3QgbWF0Y2ggZ3JhbnQg KCUiUFJJcHRlIilcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50cHRlKG9sMWUpLCBh ZGRyLAotICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShsMWVfZnJvbV9wZm4oZnJhbWUs IGdyYW50X3B0ZV9mbGFncykpKTsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwot ICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHko KGwxZV9nZXRfZmxhZ3Mob2wxZSkgXiBncmFudF9wdGVfZmxhZ3MpICYKLSAgICAgICAgICAgICAg ICAgIH4oX1BBR0VfQVZBSUwgfCBQQUdFX0NBQ0hFX0FUVFJTKSkgKQotICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgIlBURSBmbGFncyAleCBmb3IgJSJQ Ukl4NjQiIGRvbid0IG1hdGNoIGdyYW50ICgleClcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9n ZXRfZmxhZ3Mob2wxZSksIGFkZHIsIGdyYW50X3B0ZV9mbGFncyk7Ci0KLSAgICAvKiBEZWxldGUg cGFnZXRhYmxlIGVudHJ5LiAqLwotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwg cGwxZSwgb2wxZSwgbmwxZSwgbWZuX3goZ2wxbWZuKSwgdiwgMCkpICkKLSAgICB7Ci0gICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IGRlbGV0ZSBQVEUgZW50cnkgZm9yICUi UFJJeDY0IlxuIiwKLSAgICAgICAgICAgICAgICAgYWRkcik7Ci0gICAgICAgIHJjID0gR05UU1Rf Z2VuZXJhbF9lcnJvcjsKLSAgICAgICAgZ290byB1bmxvY2tfYW5kX291dDsKLSAgICB9Ci0KLSB1 bmxvY2tfYW5kX291dDoKLSAgICBwYWdlX3VubG9jayhsMXBnKTsKLSAgICBwdXRfcGFnZShsMXBn KTsKLSBvdXQ6Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7Ci0gICAgcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IGRlc3Ryb3lfZ3JhbnRfdmFfbWFwcGluZygKLSAgICB1bnNpZ25lZCBs b25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsIHVuc2lnbmVkIGludCBncmFudF9wdGVfZmxh Z3MsCi0gICAgc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgcmV0dXJuIHJlcGxhY2VfZ3JhbnRfdmFf bWFwcGluZyhhZGRyLCBmcmFtZSwgZ3JhbnRfcHRlX2ZsYWdzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbDFlX2VtcHR5KCksIHYpOwotfQotCiBpbnQgY3JlYXRlX2dyYW50 X3B2X21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjYWNo ZV9mbGFncykKIHsKQEAgLTQxMzYsMTIgKzM5NTksMTQgQEAgaW50IHJlcGxhY2VfZ3JhbnRfcHZf bWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAogewogICAgIHN0cnVj dCB2Y3B1ICpjdXJyID0gY3VycmVudDsKICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnIt PmRvbWFpbjsKLSAgICBsMV9wZ2VudHJ5X3Qgb2wxZTsKLSAgICBpbnQgcmM7CisgICAgbDFfcGdl bnRyeV90IG5sMWUgPSBsMWVfZW1wdHkoKSwgb2wxZSwgKnBsMWU7CisgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZTsKKyAgICBtZm5fdCBnbDFtZm47CisgICAgaW50IHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKICAgICB1bnNpZ25lZCBpbnQgZ3JhbnRfcHRlX2ZsYWdzID0gZ3JhbnRfdG9fcHRl X2ZsYWdzKGZsYWdzLCAwKTsKIAogICAgIC8qCi0gICAgICogT24gdG9wIG9mIHRoZSBleHBsaWNp dCBzZXR0aW5ncyBkb25lIGJ5IGNyZWF0ZV9ncmFudF9ob3N0X21hcHBpbmcoKQorICAgICAqIE9u IHRvcCBvZiB0aGUgZXhwbGljaXQgc2V0dGluZ3MgZG9uZSBieSBjcmVhdGVfcHZfaG9zdF9tYXBw aW5nKCkKICAgICAgKiBhbHNvIG9wZW4tY29kZSByZWxldmFudCBwYXJ0cyBvZiBhZGp1c3RfZ3Vl c3RfbDFlKCkuIERvbid0IG1pcnJvcgogICAgICAqIGF2YWlsYWJsZSBhbmQgY2FjaGFiaWxpdHkg ZmxhZ3MsIHRob3VnaC4KICAgICAgKi8KQEAgLTQxNTAsMjQgKzM5NzUsOTYgQEAgaW50IHJlcGxh Y2VfZ3JhbnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfUEFHRV9HTE9CQUwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogX1BBR0VfR1VFU1RfS0VSTkVMIHwgX1BBR0VfVVNFUjsKIAorICAgIC8q CisgICAgICogYWRkciBjb21lcyBmcm9tIFhlbidzIGFjdGl2ZV9lbnRyeSB0cmFja2luZywgYW5k IHdhcyB1c2VkIHN1Y2Nlc3NmdWxseQorICAgICAqIHRvIGNyZWF0ZSBhIGdyYW50LgorICAgICAq CisgICAgICogVGhlIG1lYW5pbmcgb2YgYWRkciBkZXBlbmRzIG9uIEdOVE1BUF9jb250YWluc19w dGUuICBJdCBpcyBlaXRoZXIgYQorICAgICAqIG1hY2hpbmUgYWRkcmVzcyBvZiBhbiBMMWUgdGhl IGd1ZXN0IGhhcyBub21pbmF0ZWQgdG8gYmUgYWx0ZXJlZCwgb3IgYQorICAgICAqIGxpbmVhciBh ZGRyZXNzIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgYXBwcm9wcmlhdGUgTDFlIGZvci4KKyAgICAg KgorICAgICAqIFBhc3NpbmcgYSBuZXdfYWRkciBvZiB6ZXJvIGlzIHRha2VuIHRvIG1lYW4gZGVz dHJveS4gIFBhc3NpbmcgYQorICAgICAqIG5vbi16ZXJvIG5ld19hZGRyIGhhcyBvbmx5IGV2ZXIg YmVlbiBhdmFpbGFibGUgdmlhCisgICAgICogR05UQUJPUF91bm1hcF9hbmRfcmVwbGFjZSBhbmQg b25seSB3aGVuIHVzaW5nIGxpbmVhciBhZGRyZXNzZXMuCisgICAgICovCiAgICAgaWYgKCBmbGFn cyAmIEdOVE1BUF9jb250YWluc19wdGUgKQogICAgIHsKLSAgICAgICAgaWYgKCAhbmV3X2FkZHIg KQotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3lfZ3JhbnRfcHRlX21hcHBpbmcoYWRkciwgZnJh bWUsIGdyYW50X3B0ZV9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN1cnJkKTsKKyAgICAgICAgLyogUmVwbGFjZSBub3QgYXZhaWxhYmxlIGluIHRo aXMgYWRkcmVzc2luZyBtb2RlLiAqLworICAgICAgICBpZiAoIG5ld19hZGRyICkKKyAgICAgICAg ICAgIGdvdG8gb3V0OworCisgICAgICAgIGlmICggIUlTX0FMSUdORUQoYWRkciwgc2l6ZW9mKG5s MWUpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBnbDFtZm4gPSBfbWZuKGFk ZHIgPj4gUEFHRV9TSElGVCk7CisKKyAgICAgICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4oZ2wx bWZuLCBjdXJyZCkgKQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgcGwxZSA9IG1h cF9kb21haW5fcGFnZShnbDFtZm4pICsgKGFkZHIgJiB+UEFHRV9NQVNLKTsKKyAgICB9CisgICAg ZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCBuZXdfYWRkciAmJiAhc3RlYWxfbGluZWFyX2FkZHJl c3MobmV3X2FkZHIsICZubDFlKSApCisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBw bDFlID0gbWFwX2d1ZXN0X2wxZShhZGRyLCAmZ2wxbWZuKTsKIAotICAgICAgICByZXR1cm4gR05U U1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgaWYgKCAhcGwxZSApCisgICAgICAgICAgICBnb3Rv IG91dDsKKworICAgICAgICBpZiAoICFnZXRfcGFnZV9mcm9tX21mbihnbDFtZm4sIGN1cnJkKSAp CisgICAgICAgICAgICBnb3RvIG91dF91bm1hcDsKKyAgICB9CisKKyAgICBwYWdlID0gbWZuX3Rv X3BhZ2UoZ2wxbWZuKTsKKworICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSApCisgICAgICAgIGdv dG8gb3V0X3B1dDsKKworICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5 cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgICAgICBnb3RvIG91dF91bmxvY2s7 CisKKyAgICBvbDFlID0gKnBsMWU7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgdGhlIHZp cnR1YWwgYWRkcmVzcyBzdXBwbGllZCBpcyBhY3R1YWxseSBtYXBwZWQgdG8gZnJhbWUKKyAgICAg KiAod2l0aCBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucykuCisgICAgICovCisgICAgaWYgKCB1bmxp a2VseShsMWVfZ2V0X3BmbihvbDFlKSAhPSBmcmFtZSkgfHwKKyAgICAgICAgIHVubGlrZWx5KChs MWVfZ2V0X2ZsYWdzKG9sMWUpIF4gZ3JhbnRfcHRlX2ZsYWdzKSAmCisgICAgICAgICAgICAgICAg ICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGso WEVOTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgIlBURSAlIlBSSXB0ZSIgZm9yICVseCBkb2Vz bid0IG1hdGNoIGdyYW50ICglIlBSSXB0ZSIpXG4iLAorICAgICAgICAgICAgICAgICBsMWVfZ2V0 X2ludHB0ZShvbDFlKSwgYWRkciwKKyAgICAgICAgICAgICAgICAgbDFlX2dldF9pbnRwdGUobDFl X2Zyb21fcGZuKGZyYW1lLCBncmFudF9wdGVfZmxhZ3MpKSk7CisgICAgICAgIGdvdG8gb3V0X3Vu bG9jazsKICAgICB9CiAKLSAgICBpZiAoICFuZXdfYWRkciApCi0gICAgICAgIHJldHVybiBkZXN0 cm95X2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIGdyYW50X3B0ZV9mbGFncywgY3Vycik7 CisgICAgaWYgKCB1bmxpa2VseSgobDFlX2dldF9mbGFncyhvbDFlKSBeIGdyYW50X3B0ZV9mbGFn cykgJgorICAgICAgICAgICAgICAgICAgfihfUEFHRV9BVkFJTCB8IFBBR0VfQ0FDSEVfQVRUUlMp KSApCisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAi UFRFIGZsYWdzICV4IGZvciAlIlBSSXg2NCIgZG9uJ3QgbWF0Y2ggZ3JhbnQgKCV4KVxuIiwKKyAg ICAgICAgICAgICAgICAgbDFlX2dldF9mbGFncyhvbDFlKSwgYWRkciwgZ3JhbnRfcHRlX2ZsYWdz KTsKIAotICAgIGlmICggIXN0ZWFsX2xpbmVhcl9hZGRyZXNzKG5ld19hZGRyLCAmb2wxZSkgKQot ICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICBpZiAoIFVQREFURV9FTlRS WShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgbWZuX3goZ2wxbWZuKSwgY3VyciwgMCkgKQorICAgICAg ICByYyA9IEdOVFNUX29rYXk7CiAKLSAgICByYyA9IHJlcGxhY2VfZ3JhbnRfdmFfbWFwcGluZyhh ZGRyLCBmcmFtZSwgZ3JhbnRfcHRlX2ZsYWdzLCBvbDFlLCBjdXJyKTsKKyBvdXRfdW5sb2NrOgor ICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOworIG91dF9wdXQ6CisgICAgcHV0X3BhZ2UocGFnZSk7Cisg b3V0X3VubWFwOgorICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworCisgb3V0OgorICAgIC8q IElmIHRoZXJlIHdhcyBhbiBlcnJvciwgd2UgYXJlIHN0aWxsIHJlc3BvbnNpYmxlIGZvciB0aGUg c3RvbGVuIHB0ZS4gKi8KICAgICBpZiAoIHJjICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUo b2wxZSwgY3VycmQpOworICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShubDFlLCBjdXJyZCk7CiAK ICAgICByZXR1cm4gcmM7CiB9Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=