From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v5 10/23] x86/mm: split out descriptor table manipulation code Date: Thu, 14 Sep 2017 13:58:39 +0100 Message-ID: <20170914125852.22129-11-wei.liu2@citrix.com> References: <20170914125852.22129-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dsUCX-0008FI-Lu for xen-devel@lists.xenproject.org; Thu, 14 Sep 2017 13:29:05 +0000 In-Reply-To: <20170914125852.22129-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 TW92ZSB0aGUgY29kZSB0byBwdi9kZXNjcmlwdG9yLXRhYmxlcy5jLiBDaGFuZ2UgdTY0IHRvIHVp bnQ2NF90IHdoaWxlCm1vdmluZy4gVXNlIGN1cnJkIGluIGRvX3VwZGF0ZV9kZXNjcmlwdG9yLgoK U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJj aC94ODYvbW0uYyAgICAgICAgICAgICAgICAgICB8IDE1NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogeGVu L2FyY2gveDg2L3B2L2Rlc2NyaXB0b3ItdGFibGVzLmMgfCAxOTIgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE5MyBpbnNlcnRpb25zKCspLCAx NTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2Rlc2Ny aXB0b3ItdGFibGVzLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNo L3g4Ni9tbS5jCmluZGV4IGU1MDViZTdjZjUuLmJmZGJhMzQ0NjggMTAwNjQ0Ci0tLSBhL3hlbi9h cmNoL3g4Ni9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC0zODUyLDE2MSArMzg1Miw2 IEBAIGxvbmcgZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4odW5zaWduZWQgbG9uZyB2 YSwgdTY0IHZhbDY0LAogICAgIHJldHVybiByYzsKIH0KIAotCi0KLS8qKioqKioqKioqKioqKioq KioqKioqKioqCi0gKiBEZXNjcmlwdG9yIFRhYmxlcwotICovCi0KLXZvaWQgcHZfZGVzdHJveV9n ZHQoc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgbDFfcGdlbnRyeV90ICpwbDFlOwotICAgIHVuc2ln bmVkIGludCBpOwotICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB6ZXJvX3BmbiA9IFBGTl9ET1dOKF9f cGEoemVyb19wYWdlKSk7Ci0KLSAgICB2LT5hcmNoLnB2X3ZjcHUuZ2R0X2VudHMgPSAwOwotICAg IHBsMWUgPSBwdl9nZHRfcHRlcyh2KTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IEZJUlNUX1JFU0VS VkVEX0dEVF9QQUdFOyBpKysgKQotICAgIHsKLSAgICAgICAgcGZuID0gbDFlX2dldF9wZm4ocGwx ZVtpXSk7Ci0gICAgICAgIGlmICggKGwxZV9nZXRfZmxhZ3MocGwxZVtpXSkgJiBfUEFHRV9QUkVT RU5UKSAmJiBwZm4gIT0gemVyb19wZm4gKQotICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUo bWZuX3RvX3BhZ2UoX21mbihwZm4pKSk7Ci0gICAgICAgIGwxZV93cml0ZSgmcGwxZVtpXSwgbDFl X2Zyb21fcGZuKHplcm9fcGZuLCBfX1BBR0VfSFlQRVJWSVNPUl9STykpOwotICAgICAgICB2LT5h cmNoLnB2X3ZjcHUuZ2R0X2ZyYW1lc1tpXSA9IDA7Ci0gICAgfQotfQotCi0KLWxvbmcgcHZfc2V0 X2dkdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyAqZnJhbWVzLCB1bnNpZ25lZCBpbnQg ZW50cmllcykKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwotICAgIGwxX3Bn ZW50cnlfdCAqcGwxZTsKLSAgICAvKiBOQi4gVGhlcmUgYXJlIDUxMiA4LWJ5dGUgZW50cmllcyBw ZXIgR0RUIHBhZ2UuICovCi0gICAgdW5zaWduZWQgaW50IGksIG5yX3BhZ2VzID0gKGVudHJpZXMg KyA1MTEpIC8gNTEyOwotCi0gICAgaWYgKCBlbnRyaWVzID4gRklSU1RfUkVTRVJWRURfR0RUX0VO VFJZICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICAvKiBDaGVjayB0aGUgcGFnZXMg aW4gdGhlIG5ldyBHRFQuICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrICkK LSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0KLSAgICAgICAgcGFnZSA9 IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGZyYW1lc1tpXSwgTlVMTCwgUDJNX0FMTE9DKTsKLSAgICAg ICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIGlmICggIWdl dF9wYWdlX3R5cGUocGFnZSwgUEdUX3NlZ19kZXNjX3BhZ2UpICkKLSAgICAgICAgewotICAgICAg ICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0K LSAgICAgICAgZnJhbWVzW2ldID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOwotICAgIH0KLQot ICAgIC8qIFRlYXIgZG93biB0aGUgb2xkIEdEVC4gKi8KLSAgICBwdl9kZXN0cm95X2dkdCh2KTsK LQotICAgIC8qIEluc3RhbGwgdGhlIG5ldyBHRFQuICovCi0gICAgdi0+YXJjaC5wdl92Y3B1Lmdk dF9lbnRzID0gZW50cmllczsKLSAgICBwbDFlID0gcHZfZ2R0X3B0ZXModik7Ci0gICAgZm9yICgg aSA9IDA7IGkgPCBucl9wYWdlczsgaSsrICkKLSAgICB7Ci0gICAgICAgIHYtPmFyY2gucHZfdmNw dS5nZHRfZnJhbWVzW2ldID0gZnJhbWVzW2ldOwotICAgICAgICBsMWVfd3JpdGUoJnBsMWVbaV0s IGwxZV9mcm9tX3BmbihmcmFtZXNbaV0sIF9fUEFHRV9IWVBFUlZJU09SX1JXKSk7Ci0gICAgfQot Ci0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIHdoaWxlICggaS0tID4gMCApCi0gICAgewot ICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShfbWZuKGZyYW1lc1tpXSkpKTsK LSAgICB9Ci0gICAgcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLQotbG9uZyBkb19zZXRfZ2R0KFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0oeGVuX3Vsb25nX3QpIGZyYW1lX2xpc3QsCi0gICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGVudHJpZXMpCi17Ci0gICAgaW50IG5yX3BhZ2VzID0gKGVudHJpZXMg KyA1MTEpIC8gNTEyOwotICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVzWzE2XTsKLSAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgbG9uZyByZXQ7Ci0KLSAgICAvKiBSZWNoZWNrZWQg aW4gc2V0X2dkdCwgYnV0IGVuc3VyZXMgYSBzYW5lIGxpbWl0IGZvciBjb3B5X2Zyb21fdXNlcigp LiAqLwotICAgIGlmICggZW50cmllcyA+IEZJUlNUX1JFU0VSVkVEX0dEVF9FTlRSWSApCi0gICAg ICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoZnJhbWVzLCBm cmFtZV9saXN0LCBucl9wYWdlcykgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGRv bWFpbl9sb2NrKGN1cnItPmRvbWFpbik7Ci0KLSAgICBpZiAoIChyZXQgPSBwdl9zZXRfZ2R0KGN1 cnIsIGZyYW1lcywgZW50cmllcykpID09IDAgKQotICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsK LQotICAgIGRvbWFpbl91bmxvY2soY3Vyci0+ZG9tYWluKTsKLQotICAgIHJldHVybiByZXQ7Ci19 Ci0KLQotbG9uZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZXNjKQotewotICAg IHN0cnVjdCBkb21haW4gKmRvbSA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNpZ25lZCBsb25n IGdtZm4gPSBwYSA+PiBQQUdFX1NISUZUOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIHVu c2lnbmVkIGludCAgb2Zmc2V0OwotICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0X3BlbnQsIGQ7 Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICBsb25nIHJldCA9IC1FSU5WQUw7Ci0K LSAgICBvZmZzZXQgPSAoKHVuc2lnbmVkIGludClwYSAmIH5QQUdFX01BU0spIC8gc2l6ZW9mKHN0 cnVjdCBkZXNjX3N0cnVjdCk7Ci0KLSAgICAqKHU2NCAqKSZkID0gZGVzYzsKLQotICAgIHBhZ2Ug PSBnZXRfcGFnZV9mcm9tX2dmbihkb20sIGdtZm4sIE5VTEwsIFAyTV9BTExPQyk7Ci0gICAgaWYg KCAoKCh1bnNpZ25lZCBpbnQpcGEgJSBzaXplb2Yoc3RydWN0IGRlc2Nfc3RydWN0KSkgIT0gMCkg fHwKLSAgICAgICAgICFwYWdlIHx8Ci0gICAgICAgICAhY2hlY2tfZGVzY3JpcHRvcihkb20sICZk KSApCi0gICAgewotICAgICAgICBpZiAoIHBhZ2UgKQotICAgICAgICAgICAgcHV0X3BhZ2UocGFn ZSk7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICBtZm4gPSBtZm5feChwYWdl X3RvX21mbihwYWdlKSk7Ci0KLSAgICAvKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZnJhbWUgaXMgaW4g dXNlIGluIGFuIHVuc2FmZSBjb250ZXh0LiAqLwotICAgIHN3aXRjaCAoIHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzayApCi0gICAgewotICAgIGNhc2UgUEdUX3NlZ19kZXNj X3BhZ2U6Ci0gICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3Nl Z19kZXNjX3BhZ2UpKSApCi0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgYnJlYWs7Ci0g ICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3BhZ2VfdHlwZShwYWdlLCBQ R1Rfd3JpdGFibGVfcGFnZSkpICkKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICBicmVh azsKLSAgICB9Ci0KLSAgICBwYWdpbmdfbWFya19kaXJ0eShkb20sIF9tZm4obWZuKSk7Ci0KLSAg ICAvKiBBbGwgaXMgZ29vZCBzbyBtYWtlIHRoZSB1cGRhdGUuICovCi0gICAgZ2R0X3BlbnQgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKLSAgICB3cml0ZV9hdG9taWMoKHVpbnQ2NF90ICop JmdkdF9wZW50W29mZnNldF0sICoodWludDY0X3QgKikmZCk7Ci0gICAgdW5tYXBfZG9tYWluX3Bh Z2UoZ2R0X3BlbnQpOwotCi0gICAgcHV0X3BhZ2VfdHlwZShwYWdlKTsKLQotICAgIHJldCA9IDA7 IC8qIHN1Y2Nlc3MgKi8KLQotIG91dDoKLSAgICBwdXRfcGFnZShwYWdlKTsKLQotICAgIHJldHVy biByZXQ7Ci19Ci0KIHR5cGVkZWYgc3RydWN0IGU4MjBlbnRyeSBlODIwZW50cnlfdDsKIERFRklO RV9YRU5fR1VFU1RfSEFORExFKGU4MjBlbnRyeV90KTsKIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCmluZGV4IGE2OTJlZTY0 MzIuLmJhYzI3OTJhYTIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQorKysg Yi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmoteSArPSBjYWxs YmFjay5vCitvYmoteSArPSBkZXNjcmlwdG9yLXRhYmxlcy5vCiBvYmoteSArPSBkb21haW4ubwog b2JqLXkgKz0gZW11bGF0ZS5vCiBvYmoteSArPSBlbXVsLWdhdGUtb3AubwpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L3B2L2Rlc2NyaXB0b3ItdGFibGVzLmMgYi94ZW4vYXJjaC94ODYvcHYvZGVz Y3JpcHRvci10YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4w NGZiMzdmMmNlCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gveDg2L3B2L2Rlc2NyaXB0b3It dGFibGVzLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBhcmNoL3g4Ni9wdi9kZXNjcmlwdG9y LXRhYmxlcy5jCisgKgorICogRGVzY3JpcHRvciB0YWJsZSBtYW5pcHVsYXRpb24gY29kZSBmb3Ig UFYgZ3Vlc3RzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSyBBIEZyYXNlcgorICog Q29weXJpZ2h0IChjKSAyMDA0IENocmlzdGlhbiBMaW1wYWNoCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3Mu aD4KKyNpbmNsdWRlIDx4ZW4vaHlwZXJjYWxsLmg+CisKKyNpbmNsdWRlIDxhc20vcDJtLmg+Cisj aW5jbHVkZSA8YXNtL3B2L21tLmg+CisKKy8qIE92ZXJyaWRlIG1hY3JvcyBmcm9tIGFzbS9wYWdl LmggdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBtZm5fdCAqLworI3VuZGVmIG1mbl90b19wYWdlCisj ZGVmaW5lIG1mbl90b19wYWdlKG1mbikgX19tZm5fdG9fcGFnZShtZm5feChtZm4pKQorI3VuZGVm IHBhZ2VfdG9fbWZuCisjZGVmaW5lIHBhZ2VfdG9fbWZuKHBnKSBfbWZuKF9fcGFnZV90b19tZm4o cGcpKQorCisvKioqKioqKioqKioqKioqKioqKgorICogRGVzY3JpcHRvciBUYWJsZXMKKyAqLwor Cit2b2lkIHB2X2Rlc3Ryb3lfZ2R0KHN0cnVjdCB2Y3B1ICp2KQoreworICAgIGwxX3BnZW50cnlf dCAqcGwxZTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiwgemVy b19wZm4gPSBQRk5fRE9XTihfX3BhKHplcm9fcGFnZSkpOworCisgICAgdi0+YXJjaC5wdl92Y3B1 LmdkdF9lbnRzID0gMDsKKyAgICBwbDFlID0gcHZfZ2R0X3B0ZXModik7CisgICAgZm9yICggaSA9 IDA7IGkgPCBGSVJTVF9SRVNFUlZFRF9HRFRfUEFHRTsgaSsrICkKKyAgICB7CisgICAgICAgIHBm biA9IGwxZV9nZXRfcGZuKHBsMWVbaV0pOworICAgICAgICBpZiAoIChsMWVfZ2V0X2ZsYWdzKHBs MWVbaV0pICYgX1BBR0VfUFJFU0VOVCkgJiYgcGZuICE9IHplcm9fcGZuICkKKyAgICAgICAgICAg IHB1dF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdlKF9tZm4ocGZuKSkpOworICAgICAgICBsMWVf d3JpdGUoJnBsMWVbaV0sIGwxZV9mcm9tX3Bmbih6ZXJvX3BmbiwgX19QQUdFX0hZUEVSVklTT1Jf Uk8pKTsKKyAgICAgICAgdi0+YXJjaC5wdl92Y3B1LmdkdF9mcmFtZXNbaV0gPSAwOworICAgIH0K K30KKworbG9uZyBwdl9zZXRfZ2R0KHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nICpmcmFt ZXMsIHVuc2lnbmVkIGludCBlbnRyaWVzKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5k b21haW47CisgICAgbDFfcGdlbnRyeV90ICpwbDFlOworICAgIC8qIE5CLiBUaGVyZSBhcmUgNTEy IDgtYnl0ZSBlbnRyaWVzIHBlciBHRFQgcGFnZS4gKi8KKyAgICB1bnNpZ25lZCBpbnQgaSwgbnJf cGFnZXMgPSAoZW50cmllcyArIDUxMSkgLyA1MTI7CisKKyAgICBpZiAoIGVudHJpZXMgPiBGSVJT VF9SRVNFUlZFRF9HRFRfRU5UUlkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIC8q IENoZWNrIHRoZSBwYWdlcyBpbiB0aGUgbmV3IEdEVC4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8 IG5yX3BhZ2VzOyBpKysgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsK KworICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgZnJhbWVzW2ldLCBOVUxMLCBQ Mk1fQUxMT0MpOworICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KyAgICAgICAgaWYgKCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFnZSkgKQor ICAgICAgICB7CisgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKyAgICAgICAgfQorICAgICAgICBmcmFtZXNbaV0gPSBtZm5feChwYWdlX3RvX21mbihw YWdlKSk7CisgICAgfQorCisgICAgLyogVGVhciBkb3duIHRoZSBvbGQgR0RULiAqLworICAgIHB2 X2Rlc3Ryb3lfZ2R0KHYpOworCisgICAgLyogSW5zdGFsbCB0aGUgbmV3IEdEVC4gKi8KKyAgICB2 LT5hcmNoLnB2X3ZjcHUuZ2R0X2VudHMgPSBlbnRyaWVzOworICAgIHBsMWUgPSBwdl9nZHRfcHRl cyh2KTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKysgKQorICAgIHsKKyAgICAg ICAgdi0+YXJjaC5wdl92Y3B1LmdkdF9mcmFtZXNbaV0gPSBmcmFtZXNbaV07CisgICAgICAgIGwx ZV93cml0ZSgmcGwxZVtpXSwgbDFlX2Zyb21fcGZuKGZyYW1lc1tpXSwgX19QQUdFX0hZUEVSVklT T1JfUlcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGZhaWw6CisgICAgd2hpbGUgKCBp LS0gPiAwICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdlKF9t Zm4oZnJhbWVzW2ldKSkpOworICAgIH0KKyAgICByZXR1cm4gLUVJTlZBTDsKK30KKworbG9uZyBk b19zZXRfZ2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3Vsb25nX3QpIGZyYW1lX2xpc3Qs CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisgICAgaW50IG5yX3Bh Z2VzID0gKGVudHJpZXMgKyA1MTEpIC8gNTEyOworICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVzWzE2 XTsKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgbG9uZyByZXQ7CisKKyAg ICAvKiBSZWNoZWNrZWQgaW4gc2V0X2dkdCwgYnV0IGVuc3VyZXMgYSBzYW5lIGxpbWl0IGZvciBj b3B5X2Zyb21fdXNlcigpLiAqLworICAgIGlmICggZW50cmllcyA+IEZJUlNUX1JFU0VSVkVEX0dE VF9FTlRSWSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKCBjb3B5X2Zyb21f Z3Vlc3QoZnJhbWVzLCBmcmFtZV9saXN0LCBucl9wYWdlcykgKQorICAgICAgICByZXR1cm4gLUVG QVVMVDsKKworICAgIGRvbWFpbl9sb2NrKGN1cnItPmRvbWFpbik7CisKKyAgICBpZiAoIChyZXQg PSBwdl9zZXRfZ2R0KGN1cnIsIGZyYW1lcywgZW50cmllcykpID09IDAgKQorICAgICAgICBmbHVz aF90bGJfbG9jYWwoKTsKKworICAgIGRvbWFpbl91bmxvY2soY3Vyci0+ZG9tYWluKTsKKworICAg IHJldHVybiByZXQ7Cit9CisKK2xvbmcgZG9fdXBkYXRlX2Rlc2NyaXB0b3IodWludDY0X3QgcGEs IHVpbnQ2NF90IGRlc2MpCit7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5k b21haW47CisgICAgdW5zaWduZWQgbG9uZyBnbWZuID0gcGEgPj4gUEFHRV9TSElGVDsKKyAgICB1 bnNpZ25lZCBsb25nIG1mbjsKKyAgICB1bnNpZ25lZCBpbnQgIG9mZnNldDsKKyAgICBzdHJ1Y3Qg ZGVzY19zdHJ1Y3QgKmdkdF9wZW50LCBkOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Cisg ICAgbG9uZyByZXQgPSAtRUlOVkFMOworCisgICAgb2Zmc2V0ID0gKCh1bnNpZ25lZCBpbnQpcGEg JiB+UEFHRV9NQVNLKSAvIHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpOworCisgICAgKih1aW50 NjRfdCAqKSZkID0gZGVzYzsKKworICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihjdXJyZCwg Z21mbiwgTlVMTCwgUDJNX0FMTE9DKTsKKyAgICBpZiAoICgoKHVuc2lnbmVkIGludClwYSAlIHNp emVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKSAhPSAwKSB8fAorICAgICAgICAgIXBhZ2UgfHwKKyAg ICAgICAgICFjaGVja19kZXNjcmlwdG9yKGN1cnJkLCAmZCkgKQorICAgIHsKKyAgICAgICAgaWYg KCBwYWdlICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKyAgICB9CisgICAgbWZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOworCisgICAg LyogQ2hlY2sgaWYgdGhlIGdpdmVuIGZyYW1lIGlzIGluIHVzZSBpbiBhbiB1bnNhZmUgY29udGV4 dC4gKi8KKyAgICBzd2l0Y2ggKCBwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21h c2sgKQorICAgIHsKKyAgICBjYXNlIFBHVF9zZWdfZGVzY19wYWdlOgorICAgICAgICBpZiAoIHVu bGlrZWx5KCFnZXRfcGFnZV90eXBlKHBhZ2UsIFBHVF9zZWdfZGVzY19wYWdlKSkgKQorICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlm ICggdW5saWtlbHkoIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dyaXRhYmxlX3BhZ2UpKSApCisg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcGFnaW5n X21hcmtfZGlydHkoY3VycmQsIF9tZm4obWZuKSk7CisKKyAgICAvKiBBbGwgaXMgZ29vZCBzbyBt YWtlIHRoZSB1cGRhdGUuICovCisgICAgZ2R0X3BlbnQgPSBtYXBfZG9tYWluX3BhZ2UoX21mbiht Zm4pKTsKKyAgICB3cml0ZV9hdG9taWMoKHVpbnQ2NF90ICopJmdkdF9wZW50W29mZnNldF0sICoo dWludDY0X3QgKikmZCk7CisgICAgdW5tYXBfZG9tYWluX3BhZ2UoZ2R0X3BlbnQpOworCisgICAg cHV0X3BhZ2VfdHlwZShwYWdlKTsKKworICAgIHJldCA9IDA7IC8qIHN1Y2Nlc3MgKi8KKworIG91 dDoKKyAgICBwdXRfcGFnZShwYWdlKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==