From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 15/21] x86/mm: split out PV grant table code Date: Thu, 20 Jul 2017 17:04:20 +0100 Message-ID: <20170720160426.2343-16-wei.liu2@citrix.com> References: <20170720160426.2343-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYE7p-0002pU-8x for xen-devel@lists.xenproject.org; Thu, 20 Jul 2017 16:16:29 +0000 In-Reply-To: <20170720160426.2343-1-wei.liu2@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: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJj aC94ODYvbW0uYyAgICAgICAgICAgICB8IDM0OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L01ha2VmaWxlICAgICAgfCAgIDEgKwogeGVuL2Fy Y2gveDg2L3B2L2dyYW50X3RhYmxlLmMgfCAzODYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM4NyBpbnNlcnRpb25zKCspLCAzNDkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2dyYW50X3Rh YmxlLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5j CmluZGV4IDVhOWNjNzE3M2EuLjg5N2RiNGNmYjkgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9t bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC0zODQ0LDM1NSArMzg0NCw2IEBAIGxvbmcg ZG9fbW11X3VwZGF0ZSgKIH0KIAogCi1zdGF0aWMgaW50IGNyZWF0ZV9ncmFudF9wdGVfbWFwcGlu ZygKLSAgICB1aW50NjRfdCBwdGVfYWRkciwgbDFfcGdlbnRyeV90IG5sMWUsIHN0cnVjdCB2Y3B1 ICp2KQotewotICAgIGludCByYyA9IEdOVFNUX29rYXk7Ci0gICAgdm9pZCAqdmE7Ci0gICAgdW5z aWduZWQgbG9uZyBnbWZuLCBtZm47Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICBs MV9wZ2VudHJ5X3Qgb2wxZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwotCi0g ICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKLQotICAgIGdtZm4gPSBwdGVfYWRkciA+PiBQ QUdFX1NISUZUOwotICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBnbWZuLCBOVUxMLCBQ Mk1fQUxMT0MpOwotCi0gICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQotICAgIHsKLSAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1hbCB1 cGRhdGVcbiIpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0K LSAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICB2YSA9IG1hcF9kb21haW5fcGFnZShf bWZuKG1mbikpOwotICAgIHZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdmEgKyAoKHVuc2ln bmVkIGxvbmcpcHRlX2FkZHIgJiB+UEFHRV9NQVNLKSk7Ci0KLSAgICBpZiAoICFwYWdlX2xvY2so cGFnZSkgKQotICAgIHsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAg ICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0KLSAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5m byAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKLSAgICB7Ci0gICAgICAg IHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0g ICAgICAgIGdvdG8gZmFpbGVkOwotICAgIH0KLQotICAgIG9sMWUgPSAqKGwxX3BnZW50cnlfdCAq KXZhOwotICAgIGlmICggIVVQREFURV9FTlRSWShsMSwgKGwxX3BnZW50cnlfdCAqKXZhLCBvbDFl LCBubDFlLCBtZm4sIHYsIDApICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwot ICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdvdG8gZmFpbGVkOwot ICAgIH0KLQotICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotCi0gICAgcHV0X3BhZ2VfZnJvbV9sMWUo b2wxZSwgZCk7Ci0KLSBmYWlsZWQ6Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOwotICAgIHB1 dF9wYWdlKHBhZ2UpOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRlc3Ryb3lf Z3JhbnRfcHRlX21hcHBpbmcoCi0gICAgdWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFt ZSwgc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICBpbnQgcmMgPSBHTlRTVF9va2F5OwotICAgIHZv aWQgKnZhOwotICAgIHVuc2lnbmVkIGxvbmcgZ21mbiwgbWZuOwotICAgIHN0cnVjdCBwYWdlX2lu Zm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IG9sMWU7Ci0KLSAgICBnbWZuID0gYWRkciA+PiBQ QUdFX1NISUZUOwotICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBnbWZuLCBOVUxMLCBQ Mk1fQUxMT0MpOwotCi0gICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQotICAgIHsKLSAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1hbCB1 cGRhdGVcbiIpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0K LSAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICB2YSA9IG1hcF9kb21haW5fcGFnZShf bWZuKG1mbikpOwotICAgIHZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdmEgKyAoKHVuc2ln bmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0spKTsKLQotICAgIGlmICggIXBhZ2VfbG9jayhwYWdl KSApCi0gICAgewotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdv dG8gZmFpbGVkOwotICAgIH0KLQotICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYg UEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcGFn ZV91bmxvY2socGFnZSk7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAg ICAgZ290byBmYWlsZWQ7Ci0gICAgfQotCi0gICAgb2wxZSA9ICoobDFfcGdlbnRyeV90ICopdmE7 Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3VwcGxpZWQgaXMgYWN0 dWFsbHkgbWFwcGVkIHRvIGZyYW1lLiAqLwotICAgIGlmICggdW5saWtlbHkobDFlX2dldF9wZm4o b2wxZSkgIT0gZnJhbWUpICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgIlBURSBlbnRy eSAlIlBSSXB0ZSIgZm9yIGFkZHJlc3MgJSJQUkl4NjQiIGRvZXNuJ3QgbWF0Y2ggZnJhbWUgJWx4 XG4iLAotICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShvbDFlKSwgYWRkciwgZnJhbWUp OwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdvdG8gZmFpbGVk OwotICAgIH0KLQotICAgIC8qIERlbGV0ZSBwYWdldGFibGUgZW50cnkuICovCi0gICAgaWYgKCB1 bmxpa2VseSghVVBEQVRFX0VOVFJZKGwxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobDFfcGdlbnRyeV90ICopdmEsIG9sMWUsIGwxZV9lbXB0eSgpLCBtZm4sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGQtPnZjcHVbMF0gLyogQ2hhbmdlIGlmIHdlIGdvIHRvIHBl ci12Y3B1IHNoYWRvd3MuICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkg KQotICAgIHsKLSAgICAgICAgcGFnZV91bmxvY2socGFnZSk7Ci0gICAgICAgIGdkcHJpbnRrKFhF TkxPR19XQVJOSU5HLCAiQ2Fubm90IGRlbGV0ZSBQVEUgZW50cnkgYXQgJXBcbiIsIHZhKTsKLSAg ICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIGZhaWxlZDsKLSAg ICB9Ci0KLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLQotIGZhaWxlZDoKLSAgICB1bm1hcF9kb21h aW5fcGFnZSh2YSk7Ci0gICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0K LXN0YXRpYyBpbnQgY3JlYXRlX2dyYW50X3ZhX21hcHBpbmcoCi0gICAgdW5zaWduZWQgbG9uZyB2 YSwgbDFfcGdlbnRyeV90IG5sMWUsIHN0cnVjdCB2Y3B1ICp2KQotewotICAgIGwxX3BnZW50cnlf dCAqcGwxZSwgb2wxZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwotICAgIHVu c2lnbmVkIGxvbmcgZ2wxbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKmwxcGc7Ci0gICAgaW50 IG9rYXk7Ci0KLSAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOwotCi0gICAgcGwxZSA9IHB2 X21hcF9ndWVzdF9sMWUodmEsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsKLSAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9y IGFkZHJlc3MgJWx4XG4iLCB2YSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9y OwotICAgIH0KLQotICAgIGlmICggZ2V0X3BhZ2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50 LT5kb21haW4pICkKLSAgICB7Ci0gICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKLSAg ICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgbDFwZyA9IG1m bl90b19wYWdlKGdsMW1mbik7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0g ICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7 Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQotICAgIGlmICgg KGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2Vf dGFibGUgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAgICAgIHB1dF9w YWdlKGwxcGcpOwotICAgICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7Ci0gICAgICAgIHJl dHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQotICAgIG9sMWUgPSAqcGwxZTsKLSAg ICBva2F5ID0gVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHYsIDAp OwotCi0gICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAgcHV0X3BhZ2UobDFwZyk7Ci0gICAgcHZf dW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotCi0gICAgaWYgKCBva2F5ICkKLSAgICAgICAgcHV0X3Bh Z2VfZnJvbV9sMWUob2wxZSwgZCk7Ci0KLSAgICByZXR1cm4gb2theSA/IEdOVFNUX29rYXkgOiBH TlRTVF9nZW5lcmFsX2Vycm9yOwotfQotCi1zdGF0aWMgaW50IHJlcGxhY2VfZ3JhbnRfdmFfbWFw cGluZygKLSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsIGwxX3Bn ZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBsMV9wZ2VudHJ5X3QgKnBsMWUs IG9sMWU7Ci0gICAgdW5zaWduZWQgbG9uZyBnbDFtZm47Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAq bDFwZzsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAgcGwxZSA9IHB2X21hcF9ndWVzdF9sMWUoYWRk ciwgJmdsMW1mbik7Ci0gICAgaWYgKCAhcGwxZSApCi0gICAgewotICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBmaW5kIEwxIFBURSBmb3IgYWRkcmVzcyAlbHhcbiIs IGFkZHIpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAg ICBpZiAoIGdldF9wYWdlX2Zyb21fcGFnZW5yKGdsMW1mbiwgY3VycmVudC0+ZG9tYWluKSApCi0g ICAgewotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdvdG8gb3V0 OwotICAgIH0KLQotICAgIGwxcGcgPSBtZm5fdG9fcGFnZShnbDFtZm4pOwotICAgIGlmICggIXBh Z2VfbG9jayhsMXBnKSApCi0gICAgewotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7 Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAg ICBpZiAoIChsMXBnLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9s MV9wYWdlX3RhYmxlICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsK LSAgICAgICAgZ290byB1bmxvY2tfYW5kX291dDsKLSAgICB9Ci0KLSAgICBvbDFlID0gKnBsMWU7 Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3VwcGxpZWQgaXMgYWN0 dWFsbHkgbWFwcGVkIHRvIGZyYW1lLiAqLwotICAgIGlmICggdW5saWtlbHkobDFlX2dldF9wZm4o b2wxZSkgIT0gZnJhbWUpICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAiUFRFIGVudHJ5ICVseCBmb3IgYWRkcmVzcyAlbHggZG9lc24n dCBtYXRjaCBmcmFtZSAlbHhcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9nZXRfcGZuKG9sMWUp LCBhZGRyLCBmcmFtZSk7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAg ICAgZ290byB1bmxvY2tfYW5kX291dDsKLSAgICB9Ci0KLSAgICAvKiBEZWxldGUgcGFnZXRhYmxl IGVudHJ5LiAqLwotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wx ZSwgbmwxZSwgZ2wxbWZuLCB2LCAwKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwxZSk7Ci0gICAg ICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAgZ290byB1bmxvY2tfYW5kX291 dDsKLSAgICB9Ci0KLSB1bmxvY2tfYW5kX291dDoKLSAgICBwYWdlX3VubG9jayhsMXBnKTsKLSAg ICBwdXRfcGFnZShsMXBnKTsKLSBvdXQ6Ci0gICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwot ICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkZXN0cm95X2dyYW50X3ZhX21hcHBpbmco Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCBzdHJ1Y3QgdmNw dSAqdikKLXsKLSAgICByZXR1cm4gcmVwbGFjZV9ncmFudF92YV9tYXBwaW5nKGFkZHIsIGZyYW1l LCBsMWVfZW1wdHkoKSwgdik7Ci19Ci0KLWludCBjcmVhdGVfZ3JhbnRfcHZfbWFwcGluZyh1aW50 NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGNhY2hlX2ZsYWdzKQotewotICAg IGwxX3BnZW50cnlfdCBwdGU7Ci0gICAgdWludDMyX3QgZ3JhbnRfcHRlX2ZsYWdzOwotCi0gICAg Z3JhbnRfcHRlX2ZsYWdzID0KLSAgICAgICAgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VE IHwgX1BBR0VfRElSVFkgfCBfUEFHRV9HTlRUQUI7Ci0gICAgaWYgKCBjcHVfaGFzX254ICkKLSAg ICAgICAgZ3JhbnRfcHRlX2ZsYWdzIHw9IF9QQUdFX05YX0JJVDsKLQotICAgIHB0ZSA9IGwxZV9m cm9tX3BmbihmcmFtZSwgZ3JhbnRfcHRlX2ZsYWdzKTsKLSAgICBpZiAoIChmbGFncyAmIEdOVE1B UF9hcHBsaWNhdGlvbl9tYXApICkKLSAgICAgICAgbDFlX2FkZF9mbGFncyhwdGUsX1BBR0VfVVNF Uik7Ci0gICAgaWYgKCAhKGZsYWdzICYgR05UTUFQX3JlYWRvbmx5KSApCi0gICAgICAgIGwxZV9h ZGRfZmxhZ3MocHRlLF9QQUdFX1JXKTsKLQotICAgIGwxZV9hZGRfZmxhZ3MocHRlLAotICAgICAg ICAgICAgICAgICAgKChmbGFncyA+PiBfR05UTUFQX2d1ZXN0X2F2YWlsMCkgKiBfUEFHRV9BVkFJ TDApCi0gICAgICAgICAgICAgICAgICAgJiBfUEFHRV9BVkFJTCk7Ci0KLSAgICBsMWVfYWRkX2Zs YWdzKHB0ZSwgY2FjaGVhdHRyX3RvX3B0ZV9mbGFncyhjYWNoZV9mbGFncyA+PiA1KSk7Ci0KLSAg ICBpZiAoIGZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSApCi0gICAgICAgIHJldHVybiBjcmVh dGVfZ3JhbnRfcHRlX21hcHBpbmcoYWRkciwgcHRlLCBjdXJyZW50KTsKLSAgICByZXR1cm4gY3Jl YXRlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgcHRlLCBjdXJyZW50KTsKLX0KLQotaW50IHJlcGxh Y2VfZ3JhbnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBuZXdfYWRkciwgdW5zaWduZWQg aW50IGZsYWdzKQotewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBsMV9w Z2VudHJ5X3QgKnBsMWUsIG9sMWU7Ci0gICAgdW5zaWduZWQgbG9uZyBnbDFtZm47Ci0gICAgc3Ry dWN0IHBhZ2VfaW5mbyAqbDFwZzsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIGZsYWdzICYgR05U TUFQX2NvbnRhaW5zX3B0ZSApCi0gICAgewotICAgICAgICBpZiAoICFuZXdfYWRkciApCi0gICAg ICAgICAgICByZXR1cm4gZGVzdHJveV9ncmFudF9wdGVfbWFwcGluZyhhZGRyLCBmcmFtZSwgY3Vy ci0+ZG9tYWluKTsKLQotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9 Ci0KLSAgICBpZiAoICFuZXdfYWRkciApCi0gICAgICAgIHJldHVybiBkZXN0cm95X2dyYW50X3Zh X21hcHBpbmcoYWRkciwgZnJhbWUsIGN1cnIpOwotCi0gICAgcGwxZSA9IHB2X21hcF9ndWVzdF9s MWUobmV3X2FkZHIsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsKLSAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmlu ZCBMMSBQVEUgZm9yIGFkZHJlc3MgJSJQUkl4NjQiXG4iLCBuZXdfYWRkcik7Ci0gICAgICAgIHJl dHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQotICAgIGlmICggZ2V0X3BhZ2VfZnJv bV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKLSAgICB7Ci0gICAgICAgIHB2X3Vu bWFwX2d1ZXN0X2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7 Ci0gICAgfQotCi0gICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7Ci0gICAgaWYgKCAhcGFn ZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBw dl91bm1hcF9ndWVzdF9sMWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgIH0KLQotICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5 cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxv Y2sobDFwZyk7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBwdl91bm1hcF9ndWVz dF9sMWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0K LQotICAgIG9sMWUgPSAqcGwxZTsKLQotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShs MSwgcGwxZSwgb2wxZSwgbDFlX2VtcHR5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdsMW1mbiwgY3VyciwgMCkpICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKGwxcGcp OwotICAgICAgICBwdXRfcGFnZShsMXBnKTsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwxZSk7Ci0gICAgICAgIHB2 X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJy b3I7Ci0gICAgfQotCi0gICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAgcHV0X3BhZ2UobDFwZyk7 Ci0gICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotCi0gICAgcmMgPSByZXBsYWNlX2dyYW50 X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIG9sMWUsIGN1cnIpOwotICAgIGlmICggcmMgKQotICAg ICAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBjdXJyLT5kb21haW4pOwotCi0gICAgcmV0dXJu IHJjOwotfQotCiBpbnQgZG9uYXRlX3BhZ2UoCiAgICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgaW50IG1lbWZsYWdzKQogewpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCmluZGV4 IDAxNmIxYjZlOGYuLjUwMWM3NjZjYzIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtl ZmlsZQorKysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIG9iai15 ICs9IGVtdWwtaW52LW9wLm8KIG9iai15ICs9IGVtdWwtbW1pby1vcC5vCiBvYmoteSArPSBlbXVs LXByaXYtb3Aubwogb2JqLXkgKz0gZW11bC1wdHdyLW9wLm8KK29iai15ICs9IGdyYW50X3RhYmxl Lm8KIG9iai15ICs9IGh5cGVyY2FsbC5vCiBvYmoteSArPSBpcmV0Lm8KIG9iai15ICs9IG1pc2Mt aHlwZXJjYWxscy5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYyBi L3hlbi9hcmNoL3g4Ni9wdi9ncmFudF90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjZjMjJjZDAxYTcKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC94ODYv cHYvZ3JhbnRfdGFibGUuYwpAQCAtMCwwICsxLDM4NiBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYworICoKKyAqIEdyYW50IHRhYmxlIGludGVy ZmFjZXMgZm9yIFBWIGd1ZXN0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBXZWkgTGl1IDx3 ZWkubGl1MkBjaXRyaXguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAq LworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxwdWJsaWMvZ3JhbnRfdGFi bGUuaD4KKworI2luY2x1ZGUgPGFzbS9wMm0uaD4KKyNpbmNsdWRlIDxhc20vcHYvbW0uaD4KKwor c3RhdGljIGludCBjcmVhdGVfZ3JhbnRfcHRlX21hcHBpbmcodWludDY0X3QgcHRlX2FkZHIsIGwx X3BnZW50cnlfdCBubDFlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHZjcHUgKnYpCit7CisgICAgaW50IHJjID0gR05UU1Rfb2theTsKKyAgICB2b2lkICp2YTsK KyAgICB1bnNpZ25lZCBsb25nIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdl OworICAgIGwxX3BnZW50cnlfdCBvbDFlOworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21h aW47CisKKyAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOworCisgICAgZ21mbiA9IHB0ZV9h ZGRyID4+IFBBR0VfU0hJRlQ7CisgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdtZm4s IE5VTEwsIFAyTV9BTExPQyk7CisKKyAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgewor ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBnZXQgcGFnZSBmb3Ig bm9ybWFsIHVwZGF0ZVxuIik7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwor ICAgIH0KKworICAgIG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIHZhID0gbWFwX2RvbWFp bl9wYWdlKF9tZm4obWZuKSk7CisgICAgdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2YSAr ICgodW5zaWduZWQgbG9uZylwdGVfYWRkciAmIH5QQUdFX01BU0spKTsKKworICAgIGlmICggIXBh Z2VfbG9jayhwYWdlKSApCisgICAgeworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7 CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICAgIGlmICggKHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsK KyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9l cnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgb2wxZSA9ICoobDFfcGdl bnRyeV90ICopdmE7CisgICAgaWYgKCAhVVBEQVRFX0VOVFJZKGwxLCAobDFfcGdlbnRyeV90ICop dmEsIG9sMWUsIG5sMWUsIG1mbiwgdiwgMCkgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2so cGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBm YWlsZWQ7CisgICAgfQorCisgICAgcGFnZV91bmxvY2socGFnZSk7CisKKyAgICBwdXRfcGFnZV9m cm9tX2wxZShvbDFlLCBkKTsKKworIGZhaWxlZDoKKyAgICB1bm1hcF9kb21haW5fcGFnZSh2YSk7 CisgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg ZGVzdHJveV9ncmFudF9wdGVfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZy YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4g KmQpCit7CisgICAgaW50IHJjID0gR05UU1Rfb2theTsKKyAgICB2b2lkICp2YTsKKyAgICB1bnNp Z25lZCBsb25nIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIGwx X3BnZW50cnlfdCBvbDFlOworCisgICAgZ21mbiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKKyAgICBw YWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgZ21mbiwgTlVMTCwgUDJNX0FMTE9DKTsKKworICAg IGlmICggdW5saWtlbHkoIXBhZ2UpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLCAiQ291bGQgbm90IGdldCBwYWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKKyAgICAg ICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgbWZuID0gcGFnZV90 b19tZm4ocGFnZSk7CisgICAgdmEgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICB2 YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXZhICsgKCh1bnNpZ25lZCBsb25nKWFkZHIgJiB+ UEFHRV9NQVNLKSk7CisKKyAgICBpZiAoICFwYWdlX2xvY2socGFnZSkgKQorICAgIHsKKyAgICAg ICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9 CisKKyAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9 IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwor ICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgICAgIGdvdG8gZmFpbGVkOwor ICAgIH0KKworICAgIG9sMWUgPSAqKGwxX3BnZW50cnlfdCAqKXZhOworCisgICAgLyogQ2hlY2sg dGhhdCB0aGUgdmlydHVhbCBhZGRyZXNzIHN1cHBsaWVkIGlzIGFjdHVhbGx5IG1hcHBlZCB0byBm cmFtZS4gKi8KKyAgICBpZiAoIHVubGlrZWx5KGwxZV9nZXRfcGZuKG9sMWUpICE9IGZyYW1lKSAp CisgICAgeworICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKKyAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJQVEUgZW50cnkgJSJQUklwdGUiIGZvciBh ZGRyZXNzICUiUFJJeDY0IiBkb2Vzbid0IG1hdGNoIGZyYW1lICVseFxuIiwKKyAgICAgICAgICAg ICAgICAgbDFlX2dldF9pbnRwdGUob2wxZSksIGFkZHIsIGZyYW1lKTsKKyAgICAgICAgcmMgPSBH TlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisKKyAgICAv KiBEZWxldGUgcGFnZXRhYmxlIGVudHJ5LiAqLworICAgIGlmICggdW5saWtlbHkoIVVQREFURV9F TlRSWShsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxX3BnZW50cnlfdCAq KXZhLCBvbDFlLCBsMWVfZW1wdHkoKSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkLT52Y3B1WzBdIC8qIENoYW5nZSBpZiB3ZSBnbyB0byBwZXItdmNwdSBzaGFkb3dzLiAq LywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpICkKKyAgICB7CisgICAgICAg IHBhZ2VfdW5sb2NrKHBhZ2UpOworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNh bm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICVwXG4iLCB2YSk7CisgICAgICAgIHJjID0gR05UU1Rf Z2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgcGFnZV91 bmxvY2socGFnZSk7CisKKyBmYWlsZWQ6CisgICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOworICAg IHB1dF9wYWdlKHBhZ2UpOworICAgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50IGNyZWF0 ZV9ncmFudF92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIGwxX3BnZW50cnlfdCBubDFlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdikKK3sKKyAg ICBsMV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRv bWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGdsMW1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICps MXBnOworICAgIGludCBva2F5OworCisgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKKwor ICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wxbWZuKTsKKyAgICBpZiAoICFwbDFl ICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGZp bmQgTDEgUFRFIGZvciBhZGRyZXNzICVseFxuIiwgdmEpOworICAgICAgICByZXR1cm4gR05UU1Rf Z2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBpZiAoIGdldF9wYWdlX2Zyb21fcGFnZW5yKGds MW1mbiwgY3VycmVudC0+ZG9tYWluKSApCisgICAgeworICAgICAgICBwdl91bm1hcF9ndWVzdF9s MWUocGwxZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKwor ICAgIGwxcGcgPSBtZm5fdG9fcGFnZShnbDFtZm4pOworICAgIGlmICggIXBhZ2VfbG9jayhsMXBn KSApCisgICAgeworICAgICAgICBwdXRfcGFnZShsMXBnKTsKKyAgICAgICAgcHZfdW5tYXBfZ3Vl c3RfbDFlKHBsMWUpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9 CisKKyAgICBpZiAoIChsMXBnLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9 IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwor ICAgICAgICBwdXRfcGFnZShsMXBnKTsKKyAgICAgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUp OworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBvbDFl ID0gKnBsMWU7CisgICAgb2theSA9IFVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwg Z2wxbWZuLCB2LCAwKTsKKworICAgIHBhZ2VfdW5sb2NrKGwxcGcpOworICAgIHB1dF9wYWdlKGwx cGcpOworICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKworICAgIGlmICggb2theSApCisg ICAgICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGQpOworCisgICAgcmV0dXJuIG9rYXkgPyBH TlRTVF9va2F5IDogR05UU1RfZ2VuZXJhbF9lcnJvcjsKK30KKworc3RhdGljIGludCByZXBsYWNl X2dyYW50X3ZhX21hcHBpbmcodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDFfcGdlbnRyeV90IG5sMWUs IHN0cnVjdCB2Y3B1ICp2KQoreworICAgIGwxX3BnZW50cnlfdCAqcGwxZSwgb2wxZTsKKyAgICB1 bnNpZ25lZCBsb25nIGdsMW1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpsMXBnOworICAgIGlu dCByYyA9IDA7CisKKyAgICBwbDFlID0gcHZfbWFwX2d1ZXN0X2wxZShhZGRyLCAmZ2wxbWZuKTsK KyAgICBpZiAoICFwbDFlICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LCAiQ291bGQgbm90IGZpbmQgTDEgUFRFIGZvciBhZGRyZXNzICVseFxuIiwgYWRkcik7CisgICAg ICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAgIGlmICggZ2V0X3Bh Z2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKKyAgICB7CisgICAgICAg IHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7CisgICAgaWYgKCAhcGFnZV9sb2NrKGwxcGcp ICkKKyAgICB7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgcHV0 X3BhZ2UobDFwZyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICggKGwxcGct PnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUg KQorICAgIHsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3Rv IHVubG9ja19hbmRfb3V0OworICAgIH0KKworICAgIG9sMWUgPSAqcGwxZTsKKworICAgIC8qIENo ZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBzdXBwbGllZCBpcyBhY3R1YWxseSBtYXBwZWQg dG8gZnJhbWUuICovCisgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X3BmbihvbDFlKSAhPSBmcmFt ZSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAg ICAgICAgICJQVEUgZW50cnkgJWx4IGZvciBhZGRyZXNzICVseCBkb2Vzbid0IG1hdGNoIGZyYW1l ICVseFxuIiwKKyAgICAgICAgICAgICAgICAgbDFlX2dldF9wZm4ob2wxZSksIGFkZHIsIGZyYW1l KTsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIHVubG9j a19hbmRfb3V0OworICAgIH0KKworICAgIC8qIERlbGV0ZSBwYWdldGFibGUgZW50cnkuICovCisg ICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFt Zm4sIHYsIDApKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNh bm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICVwXG4iLCBwbDFlKTsKKyAgICAgICAgcmMgPSBHTlRT VF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OworICAgIH0KKwor IHVubG9ja19hbmRfb3V0OgorICAgIHBhZ2VfdW5sb2NrKGwxcGcpOworICAgIHB1dF9wYWdlKGwx cGcpOworIG91dDoKKyAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7CisgICAgcmV0dXJuIHJj OworfQorCitzdGF0aWMgaW50IGRlc3Ryb3lfZ3JhbnRfdmFfbWFwcGluZyh1bnNpZ25lZCBsb25n IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdmNwdSAqdikKK3sKKyAgICByZXR1cm4gcmVwbGFjZV9ncmFudF92YV9t YXBwaW5nKGFkZHIsIGZyYW1lLCBsMWVfZW1wdHkoKSwgdik7Cit9CisKK2ludCBjcmVhdGVfZ3Jh bnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGNh Y2hlX2ZsYWdzKQoreworICAgIGwxX3BnZW50cnlfdCBwdGU7CisgICAgdWludDMyX3QgZ3JhbnRf cHRlX2ZsYWdzOworCisgICAgZ3JhbnRfcHRlX2ZsYWdzID0KKyAgICAgICAgX1BBR0VfUFJFU0VO VCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9HTlRUQUI7CisgICAgaWYg KCBjcHVfaGFzX254ICkKKyAgICAgICAgZ3JhbnRfcHRlX2ZsYWdzIHw9IF9QQUdFX05YX0JJVDsK KworICAgIHB0ZSA9IGwxZV9mcm9tX3BmbihmcmFtZSwgZ3JhbnRfcHRlX2ZsYWdzKTsKKyAgICBp ZiAoIChmbGFncyAmIEdOVE1BUF9hcHBsaWNhdGlvbl9tYXApICkKKyAgICAgICAgbDFlX2FkZF9m bGFncyhwdGUsX1BBR0VfVVNFUik7CisgICAgaWYgKCAhKGZsYWdzICYgR05UTUFQX3JlYWRvbmx5 KSApCisgICAgICAgIGwxZV9hZGRfZmxhZ3MocHRlLF9QQUdFX1JXKTsKKworICAgIGwxZV9hZGRf ZmxhZ3MocHRlLAorICAgICAgICAgICAgICAgICAgKChmbGFncyA+PiBfR05UTUFQX2d1ZXN0X2F2 YWlsMCkgKiBfUEFHRV9BVkFJTDApCisgICAgICAgICAgICAgICAgICAgJiBfUEFHRV9BVkFJTCk7 CisKKyAgICBsMWVfYWRkX2ZsYWdzKHB0ZSwgY2FjaGVhdHRyX3RvX3B0ZV9mbGFncyhjYWNoZV9m bGFncyA+PiA1KSk7CisKKyAgICBpZiAoIGZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSApCisg ICAgICAgIHJldHVybiBjcmVhdGVfZ3JhbnRfcHRlX21hcHBpbmcoYWRkciwgcHRlLCBjdXJyZW50 KTsKKyAgICByZXR1cm4gY3JlYXRlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgcHRlLCBjdXJyZW50 KTsKK30KKworaW50IHJlcGxhY2VfZ3JhbnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNp Z25lZCBsb25nIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBu ZXdfYWRkciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0g Y3VycmVudDsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7CisgICAgdW5zaWduZWQgbG9u ZyBnbDFtZm47CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqbDFwZzsKKyAgICBpbnQgcmM7CisKKyAg ICBpZiAoIGZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSApCisgICAgeworICAgICAgICBpZiAo ICFuZXdfYWRkciApCisgICAgICAgICAgICByZXR1cm4gZGVzdHJveV9ncmFudF9wdGVfbWFwcGlu ZyhhZGRyLCBmcmFtZSwgY3Vyci0+ZG9tYWluKTsKKworICAgICAgICByZXR1cm4gR05UU1RfZ2Vu ZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBpZiAoICFuZXdfYWRkciApCisgICAgICAgIHJldHVy biBkZXN0cm95X2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIGN1cnIpOworCisgICAgcGwx ZSA9IHB2X21hcF9ndWVzdF9sMWUobmV3X2FkZHIsICZnbDFtZm4pOworICAgIGlmICggIXBsMWUg KQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAg ICAgICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9yIGFkZHJlc3MgJSJQUkl4NjQiXG4iLCBuZXdf YWRkcik7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAg IGlmICggZ2V0X3BhZ2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKKyAg ICB7CisgICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdO VFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1m bik7CisgICAgaWYgKCAhcGFnZV9sb2NrKGwxcGcpICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdl KGwxcGcpOworICAgICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7CisgICAgICAgIHJldHVy biBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAgIGlmICggKGwxcGctPnUuaW51c2Uu dHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsK KyAgICAgICAgcGFnZV91bmxvY2sobDFwZyk7CisgICAgICAgIHB1dF9wYWdlKGwxcGcpOworICAg ICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5l cmFsX2Vycm9yOworICAgIH0KKworICAgIG9sMWUgPSAqcGwxZTsKKworICAgIGlmICggdW5saWtl bHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbDFlX2VtcHR5KCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdsMW1mbiwgY3VyciwgMCkpICkKKyAgICB7CisgICAgICAg IHBhZ2VfdW5sb2NrKGwxcGcpOworICAgICAgICBwdXRfcGFnZShsMXBnKTsKKyAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwg cGwxZSk7CisgICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJu IEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgcGFnZV91bmxvY2sobDFwZyk7Cisg ICAgcHV0X3BhZ2UobDFwZyk7CisgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOworCisgICAg cmMgPSByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIG9sMWUsIGN1cnIpOwor ICAgIGlmICggcmMgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBjdXJyLT5kb21h aW4pOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICog bW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAq IHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0g CjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=