From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 16/31] x86/mm: split out descriptor table code Date: Thu, 17 Aug 2017 15:44:41 +0100 Message-ID: <20170817144456.18989-17-wei.liu2@citrix.com> References: <20170817144456.18989-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 1diM42-0001eD-4S for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:46:26 +0000 In-Reply-To: <20170817144456.18989-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 TW92ZSB0aGUgY29kZSB0byBwdi9kZXNjcmlwdG9yLXRhYmxlcy5jLiBBZGQgInB2XyIgcHJlZml4 IHRvCntzZXQsZGVzdHJveX1fZ2R0LiBGaXggdXAgY2FsbCBzaXRlcy4gTW92ZSB0aGUgZGVjbGFy YXRpb25zIHRvIG5ldwpoZWFkZXIgZmlsZS4gRml4IGNvZGluZyBzdHlsZSBpc3N1ZXMgd2hpbGUg bW92aW5nIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29t PgotLS0KIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAgICAgICAgICAgIHwgIDExICsrLQogeGVu L2FyY2gveDg2L21tLmMgICAgICAgICAgICAgICAgICAgfCAxNTYgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSAr CiB4ZW4vYXJjaC94ODYvcHYvZGVzY3JpcHRvci10YWJsZXMuYyB8IDE4OCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL3g4Ni94ODZfNjQvY29tcGF0L21tLmMg ICAgIHwgICA2ICstCiB4ZW4vaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oICAgICB8ICAgNSAt CiB4ZW4vaW5jbHVkZS9hc20teDg2L3B2L3Byb2Nlc3Nvci5oICB8ICA0MCArKysrKysrKwogNyBm aWxlcyBjaGFuZ2VkLCAyMzkgaW5zZXJ0aW9ucygrKSwgMTY4IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9wdi9kZXNjcmlwdG9yLXRhYmxlcy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9wcm9jZXNzb3IuaAoKZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9kb21haW4uYyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYwppbmRleCBi YWFmODE1MWQyLi45YTI1YzA0ZjZjIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMK KysrIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSA8 Y29tcGF0L3ZjcHUuaD4KICNpbmNsdWRlIDxhc20vcHNyLmg+CiAjaW5jbHVkZSA8YXNtL3B2L2Rv bWFpbi5oPgorI2luY2x1ZGUgPGFzbS9wdi9wcm9jZXNzb3IuaD4KIAogREVGSU5FX1BFUl9DUFUo c3RydWN0IHZjcHUgKiwgY3Vycl92Y3B1KTsKIApAQCAtOTg2LDcgKzk4Nyw3IEBAIGludCBhcmNo X3NldF9pbmZvX2d1ZXN0KAogICAgICAgICByZXR1cm4gcmM7CiAKICAgICBpZiAoICFjb21wYXQg KQotICAgICAgICByYyA9IChpbnQpc2V0X2dkdCh2LCBjLm5hdC0+Z2R0X2ZyYW1lcywgYy5uYXQt PmdkdF9lbnRzKTsKKyAgICAgICAgcmMgPSAoaW50KXB2X3NldF9nZHQodiwgYy5uYXQtPmdkdF9m cmFtZXMsIGMubmF0LT5nZHRfZW50cyk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgdW5zaWdu ZWQgbG9uZyBnZHRfZnJhbWVzW0FSUkFZX1NJWkUodi0+YXJjaC5wdl92Y3B1LmdkdF9mcmFtZXMp XTsKQEAgLTk5Niw3ICs5OTcsNyBAQCBpbnQgYXJjaF9zZXRfaW5mb19ndWVzdCgKICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCiAg ICAgICAgICAgICBnZHRfZnJhbWVzW2ldID0gYy5jbXAtPmdkdF9mcmFtZXNbaV07Ci0gICAgICAg IHJjID0gKGludClzZXRfZ2R0KHYsIGdkdF9mcmFtZXMsIGMuY21wLT5nZHRfZW50cyk7CisgICAg ICAgIHJjID0gKGludClwdl9zZXRfZ2R0KHYsIGdkdF9mcmFtZXMsIGMuY21wLT5nZHRfZW50cyk7 CiAgICAgfQogICAgIGlmICggcmMgIT0gMCApCiAgICAgICAgIHJldHVybiByYzsKQEAgLTEwOTUs NyArMTA5Niw3IEBAIGludCBhcmNoX3NldF9pbmZvX2d1ZXN0KAogICAgIHsKICAgICAgICAgaWYg KCBjcjNfcGFnZSApCiAgICAgICAgICAgICBwdXRfcGFnZShjcjNfcGFnZSk7Ci0gICAgICAgIGRl c3Ryb3lfZ2R0KHYpOworICAgICAgICBwdl9kZXN0cm95X2dkdCh2KTsKICAgICAgICAgcmV0dXJu IHJjOwogICAgIH0KIApAQCAtMTE0Nyw3ICsxMTQ4LDcgQEAgaW50IGFyY2hfdmNwdV9yZXNldChz dHJ1Y3QgdmNwdSAqdikKIHsKICAgICBpZiAoIGlzX3B2X3ZjcHUodikgKQogICAgIHsKLSAgICAg ICAgZGVzdHJveV9nZHQodik7CisgICAgICAgIHB2X2Rlc3Ryb3lfZ2R0KHYpOwogICAgICAgICBy ZXR1cm4gdmNwdV9kZXN0cm95X3BhZ2V0YWJsZXModik7CiAgICAgfQogCkBAIC0xODkwLDcgKzE4 OTEsNyBAQCBpbnQgZG9tYWluX3JlbGlucXVpc2hfcmVzb3VyY2VzKHN0cnVjdCBkb21haW4gKmQp CiAgICAgICAgICAgICAgICAgICogdGhlIExEVCBhcyBpdCBhdXRvbWF0aWNhbGx5IGdldHMgc3F1 YXNoZWQgd2l0aCB0aGUgZ3Vlc3QKICAgICAgICAgICAgICAgICAgKiBtYXBwaW5ncy4KICAgICAg ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBkZXN0cm95X2dkdCh2KTsKKyAgICAgICAg ICAgICAgICBwdl9kZXN0cm95X2dkdCh2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IDYz NTQ5Yjk4N2MuLjZjYmNkYWJjZDIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBi L3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC0zODI0LDE2MiArMzgyNCw2IEBAIGxvbmcgZG9fdXBkYXRl X3ZhX21hcHBpbmdfb3RoZXJkb21haW4odW5zaWduZWQgbG9uZyB2YSwgdTY0IHZhbDY0LAogfQog CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERlc2NyaXB0b3IgVGFibGVzCi0g Ki8KLQotdm9pZCBkZXN0cm95X2dkdChzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBsMV9wZ2VudHJ5 X3QgKnBsMWU7Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4sIHpl cm9fcGZuID0gUEZOX0RPV04oX19wYSh6ZXJvX3BhZ2UpKTsKLQotICAgIHYtPmFyY2gucHZfdmNw dS5nZHRfZW50cyA9IDA7Ci0gICAgcGwxZSA9IGdkdF9sZHRfcHRlcyh2LT5kb21haW4sIHYpOwot ICAgIGZvciAoIGkgPSAwOyBpIDwgRklSU1RfUkVTRVJWRURfR0RUX1BBR0U7IGkrKyApCi0gICAg ewotICAgICAgICBwZm4gPSBsMWVfZ2V0X3BmbihwbDFlW2ldKTsKLSAgICAgICAgaWYgKCAobDFl X2dldF9mbGFncyhwbDFlW2ldKSAmIF9QQUdFX1BSRVNFTlQpICYmIHBmbiAhPSB6ZXJvX3BmbiAp Ci0gICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShwZm4pKTsKLSAgICAg ICAgbDFlX3dyaXRlKCZwbDFlW2ldLCBsMWVfZnJvbV9wZm4oemVyb19wZm4sIF9fUEFHRV9IWVBF UlZJU09SX1JPKSk7Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5nZHRfZnJhbWVzW2ldID0gMDsK LSAgICB9Ci19Ci0KLQotbG9uZyBzZXRfZ2R0KHN0cnVjdCB2Y3B1ICp2LAotICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgKmZyYW1lcywKLSAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cmll cykKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwotICAgIGwxX3BnZW50cnlf dCAqcGwxZTsKLSAgICAvKiBOQi4gVGhlcmUgYXJlIDUxMiA4LWJ5dGUgZW50cmllcyBwZXIgR0RU IHBhZ2UuICovCi0gICAgdW5zaWduZWQgaW50IGksIG5yX3BhZ2VzID0gKGVudHJpZXMgKyA1MTEp IC8gNTEyOwotCi0gICAgaWYgKCBlbnRyaWVzID4gRklSU1RfUkVTRVJWRURfR0RUX0VOVFJZICkK LSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICAvKiBDaGVjayB0aGUgcGFnZXMgaW4gdGhl IG5ldyBHRFQuICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrICkKLSAgICB7 Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0KLSAgICAgICAgcGFnZSA9IGdldF9w YWdlX2Zyb21fZ2ZuKGQsIGZyYW1lc1tpXSwgTlVMTCwgUDJNX0FMTE9DKTsKLSAgICAgICAgaWYg KCAhcGFnZSApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIGlmICggIWdldF9wYWdl X3R5cGUocGFnZSwgUEdUX3NlZ19kZXNjX3BhZ2UpICkKLSAgICAgICAgewotICAgICAgICAgICAg cHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAg ICAgZnJhbWVzW2ldID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgfQotCi0gICAgLyogVGVhciBk b3duIHRoZSBvbGQgR0RULiAqLwotICAgIGRlc3Ryb3lfZ2R0KHYpOwotCi0gICAgLyogSW5zdGFs bCB0aGUgbmV3IEdEVC4gKi8KLSAgICB2LT5hcmNoLnB2X3ZjcHUuZ2R0X2VudHMgPSBlbnRyaWVz OwotICAgIHBsMWUgPSBnZHRfbGR0X3B0ZXMoZCwgdik7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBu cl9wYWdlczsgaSsrICkKLSAgICB7Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5nZHRfZnJhbWVz W2ldID0gZnJhbWVzW2ldOwotICAgICAgICBsMWVfd3JpdGUoJnBsMWVbaV0sIGwxZV9mcm9tX3Bm bihmcmFtZXNbaV0sIF9fUEFHRV9IWVBFUlZJU09SX1JXKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci0KLSBmYWlsOgotICAgIHdoaWxlICggaS0tID4gMCApCi0gICAgewotICAgICAgICBwdXRf cGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShmcmFtZXNbaV0pKTsKLSAgICB9Ci0gICAgcmV0dXJu IC1FSU5WQUw7Ci19Ci0KLQotbG9uZyBkb19zZXRfZ2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0o eGVuX3Vsb25nX3QpIGZyYW1lX2xpc3QsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVu dHJpZXMpCi17Ci0gICAgaW50IG5yX3BhZ2VzID0gKGVudHJpZXMgKyA1MTEpIC8gNTEyOwotICAg IHVuc2lnbmVkIGxvbmcgZnJhbWVzWzE2XTsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJl bnQ7Ci0gICAgbG9uZyByZXQ7Ci0KLSAgICAvKiBSZWNoZWNrZWQgaW4gc2V0X2dkdCwgYnV0IGVu c3VyZXMgYSBzYW5lIGxpbWl0IGZvciBjb3B5X2Zyb21fdXNlcigpLiAqLwotICAgIGlmICggZW50 cmllcyA+IEZJUlNUX1JFU0VSVkVEX0dEVF9FTlRSWSApCi0gICAgICAgIHJldHVybiAtRUlOVkFM OwotCi0gICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoZnJhbWVzLCBmcmFtZV9saXN0LCBucl9wYWdl cykgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGRvbWFpbl9sb2NrKGN1cnItPmRv bWFpbik7Ci0KLSAgICBpZiAoIChyZXQgPSBzZXRfZ2R0KGN1cnIsIGZyYW1lcywgZW50cmllcykp ID09IDAgKQotICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKLQotICAgIGRvbWFpbl91bmxvY2so Y3Vyci0+ZG9tYWluKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLQotbG9uZyBkb191cGRhdGVf ZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZXNjKQotewotICAgIHN0cnVjdCBkb21haW4gKmRvbSA9 IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNpZ25lZCBsb25nIGdtZm4gPSBwYSA+PiBQQUdFX1NI SUZUOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIHVuc2lnbmVkIGludCAgb2Zmc2V0Owot ICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0X3BlbnQsIGQ7Ci0gICAgc3RydWN0IHBhZ2VfaW5m byAqcGFnZTsKLSAgICBsb25nIHJldCA9IC1FSU5WQUw7Ci0KLSAgICBvZmZzZXQgPSAoKHVuc2ln bmVkIGludClwYSAmIH5QQUdFX01BU0spIC8gc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCk7Ci0K LSAgICAqKHU2NCAqKSZkID0gZGVzYzsKLQotICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihk b20sIGdtZm4sIE5VTEwsIFAyTV9BTExPQyk7Ci0gICAgaWYgKCAoKCh1bnNpZ25lZCBpbnQpcGEg JSBzaXplb2Yoc3RydWN0IGRlc2Nfc3RydWN0KSkgIT0gMCkgfHwKLSAgICAgICAgICFwYWdlIHx8 Ci0gICAgICAgICAhY2hlY2tfZGVzY3JpcHRvcihkb20sICZkKSApCi0gICAgewotICAgICAgICBp ZiAoIHBhZ2UgKQotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIHJldHVybiAt RUlOVkFMOwotICAgIH0KLSAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLQotICAgIC8qIENo ZWNrIGlmIHRoZSBnaXZlbiBmcmFtZSBpcyBpbiB1c2UgaW4gYW4gdW5zYWZlIGNvbnRleHQuICov Ci0gICAgc3dpdGNoICggcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkK LSAgICB7Ci0gICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAgICAgaWYgKCB1bmxpa2Vs eSghZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFnZSkpICkKLSAgICAgICAgICAg IGdvdG8gb3V0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIHVu bGlrZWx5KCFnZXRfcGFnZV90eXBlKHBhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgKQotICAgICAg ICAgICAgZ290byBvdXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBhZ2luZ19tYXJr X2RpcnR5KGRvbSwgX21mbihtZm4pKTsKLQotICAgIC8qIEFsbCBpcyBnb29kIHNvIG1ha2UgdGhl IHVwZGF0ZS4gKi8KLSAgICBnZHRfcGVudCA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOwot ICAgIHdyaXRlX2F0b21pYygodWludDY0X3QgKikmZ2R0X3BlbnRbb2Zmc2V0XSwgKih1aW50NjRf dCAqKSZkKTsKLSAgICB1bm1hcF9kb21haW5fcGFnZShnZHRfcGVudCk7Ci0KLSAgICBwdXRfcGFn ZV90eXBlKHBhZ2UpOwotCi0gICAgcmV0ID0gMDsgLyogc3VjY2VzcyAqLwotCi0gb3V0OgotICAg IHB1dF9wYWdlKHBhZ2UpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQogdHlwZWRlZiBzdHJ1Y3Qg ZTgyMGVudHJ5IGU4MjBlbnRyeV90OwogREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoZTgyMGVudHJ5 X3QpOwogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgYi94ZW4vYXJjaC94 ODYvcHYvTWFrZWZpbGUKaW5kZXggNTAxYzc2NmNjMi4uNDJlOWQzNzIzYiAxMDA2NDQKLS0tIGEv eGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQpA QCAtMSw0ICsxLDUgQEAKIG9iai15ICs9IGNhbGxiYWNrLm8KK29iai15ICs9IGRlc2NyaXB0b3It dGFibGVzLm8KIG9iai15ICs9IGRvbWFpbi5vCiBvYmoteSArPSBlbXVsYXRlLm8KIG9iai15ICs9 IGVtdWwtZ2F0ZS1vcC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZGVzY3JpcHRvci10 YWJsZXMuYyBiL3hlbi9hcmNoL3g4Ni9wdi9kZXNjcmlwdG9yLXRhYmxlcy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEyZGM0NWI2NzEKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vYXJjaC94ODYvcHYvZGVzY3JpcHRvci10YWJsZXMuYwpAQCAtMCwwICsxLDE4OCBAQAor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC94ODYvcHYvZGVzY3JpcHRvci10YWJsZXMu YworICoKKyAqIERlc2NyaXB0b3IgdGFibGUgcmVsYXRlZCBjb2RlCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDAyLTIwMDUgSyBBIEZyYXNlcgorICogQ29weXJpZ2h0IChjKSAyMDA0IENocmlzdGlh biBMaW1wYWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNs dWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5oPgorCisj aW5jbHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi9wcm9jZXNzb3IuaD4KKworLyoq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0b3IgVGFibGVzCisgKi8KKwordm9p ZCBwdl9kZXN0cm95X2dkdChzdHJ1Y3QgdmNwdSAqdikKK3sKKyAgICBsMV9wZ2VudHJ5X3QgKnBs MWU7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIHplcm9fcGZu ID0gUEZOX0RPV04oX19wYSh6ZXJvX3BhZ2UpKTsKKworICAgIHYtPmFyY2gucHZfdmNwdS5nZHRf ZW50cyA9IDA7CisgICAgcGwxZSA9IGdkdF9sZHRfcHRlcyh2LT5kb21haW4sIHYpOworICAgIGZv ciAoIGkgPSAwOyBpIDwgRklSU1RfUkVTRVJWRURfR0RUX1BBR0U7IGkrKyApCisgICAgeworICAg ICAgICBwZm4gPSBsMWVfZ2V0X3BmbihwbDFlW2ldKTsKKyAgICAgICAgaWYgKCAobDFlX2dldF9m bGFncyhwbDFlW2ldKSAmIF9QQUdFX1BSRVNFTlQpICYmIHBmbiAhPSB6ZXJvX3BmbiApCisgICAg ICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShwZm4pKTsKKyAgICAgICAgbDFl X3dyaXRlKCZwbDFlW2ldLCBsMWVfZnJvbV9wZm4oemVyb19wZm4sIF9fUEFHRV9IWVBFUlZJU09S X1JPKSk7CisgICAgICAgIHYtPmFyY2gucHZfdmNwdS5nZHRfZnJhbWVzW2ldID0gMDsKKyAgICB9 Cit9CisKK2xvbmcgcHZfc2V0X2dkdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyAqZnJh bWVzLCB1bnNpZ25lZCBpbnQgZW50cmllcykKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ ZG9tYWluOworICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKKyAgICAvKiBOQi4gVGhlcmUgYXJlIDUx MiA4LWJ5dGUgZW50cmllcyBwZXIgR0RUIHBhZ2UuICovCisgICAgdW5zaWduZWQgaW50IGksIG5y X3BhZ2VzID0gKGVudHJpZXMgKyA1MTEpIC8gNTEyOworCisgICAgaWYgKCBlbnRyaWVzID4gRklS U1RfUkVTRVJWRURfR0RUX0VOVFJZICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAv KiBDaGVjayB0aGUgcGFnZXMgaW4gdGhlIG5ldyBHRFQuICovCisgICAgZm9yICggaSA9IDA7IGkg PCBucl9wYWdlczsgaSsrICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7 CisKKyAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGZyYW1lc1tpXSwgTlVMTCwg UDJNX0FMTE9DKTsKKyAgICAgICAgaWYgKCAhcGFnZSApCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIGlmICggIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3NlZ19kZXNjX3BhZ2UpICkK KyAgICAgICAgeworICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZnJhbWVzW2ldID0gcGFnZV90b19tZm4ocGFnZSk7 CisgICAgfQorCisgICAgLyogVGVhciBkb3duIHRoZSBvbGQgR0RULiAqLworICAgIHB2X2Rlc3Ry b3lfZ2R0KHYpOworCisgICAgLyogSW5zdGFsbCB0aGUgbmV3IEdEVC4gKi8KKyAgICB2LT5hcmNo LnB2X3ZjcHUuZ2R0X2VudHMgPSBlbnRyaWVzOworICAgIHBsMWUgPSBnZHRfbGR0X3B0ZXMoZCwg dik7CisgICAgZm9yICggaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrICkKKyAgICB7CisgICAgICAg IHYtPmFyY2gucHZfdmNwdS5nZHRfZnJhbWVzW2ldID0gZnJhbWVzW2ldOworICAgICAgICBsMWVf d3JpdGUoJnBsMWVbaV0sIGwxZV9mcm9tX3BmbihmcmFtZXNbaV0sIF9fUEFHRV9IWVBFUlZJU09S X1JXKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisKKyBmYWlsOgorICAgIHdoaWxlICggaS0t ID4gMCApCisgICAgeworICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShmcmFt ZXNbaV0pKTsKKyAgICB9CisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKKworbG9uZyBkb19zZXRf Z2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3Vsb25nX3QpIGZyYW1lX2xpc3QsCisgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisgICAgaW50IG5yX3BhZ2VzID0g KGVudHJpZXMgKyA1MTEpIC8gNTEyOworICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVzWzE2XTsKKyAg ICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgbG9uZyByZXQ7CisKKyAgICAvKiBS ZWNoZWNrZWQgaW4gcHZfc2V0X2dkdCwgYnV0IGVuc3VyZXMgYSBzYW5lIGxpbWl0IGZvciBjb3B5 X2Zyb21fdXNlcigpLiAqLworICAgIGlmICggZW50cmllcyA+IEZJUlNUX1JFU0VSVkVEX0dEVF9F TlRSWSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKCBjb3B5X2Zyb21fZ3Vl c3QoZnJhbWVzLCBmcmFtZV9saXN0LCBucl9wYWdlcykgKQorICAgICAgICByZXR1cm4gLUVGQVVM VDsKKworICAgIGRvbWFpbl9sb2NrKGN1cnItPmRvbWFpbik7CisKKyAgICBpZiAoIChyZXQgPSBw dl9zZXRfZ2R0KGN1cnIsIGZyYW1lcywgZW50cmllcykpID09IDAgKQorICAgICAgICBmbHVzaF90 bGJfbG9jYWwoKTsKKworICAgIGRvbWFpbl91bmxvY2soY3Vyci0+ZG9tYWluKTsKKworICAgIHJl dHVybiByZXQ7Cit9CisKK2xvbmcgZG9fdXBkYXRlX2Rlc2NyaXB0b3IodTY0IHBhLCB1NjQgZGVz YykKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkb20gPSBjdXJyZW50LT5kb21haW47CisgICAgdW5z aWduZWQgbG9uZyBnbWZuID0gcGEgPj4gUEFHRV9TSElGVDsKKyAgICB1bnNpZ25lZCBsb25nIG1m bjsKKyAgICB1bnNpZ25lZCBpbnQgIG9mZnNldDsKKyAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdk dF9wZW50LCBkOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgbG9uZyByZXQgPSAt RUlOVkFMOworCisgICAgb2Zmc2V0ID0gKCh1bnNpZ25lZCBpbnQpcGEgJiB+UEFHRV9NQVNLKSAv IHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpOworCisgICAgKih1NjQgKikmZCA9IGRlc2M7CisK KyAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZG9tLCBnbWZuLCBOVUxMLCBQMk1fQUxMT0Mp OworICAgIGlmICggKCgodW5zaWduZWQgaW50KXBhICUgc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVj dCkpICE9IDApIHx8CisgICAgICAgICAhcGFnZSB8fAorICAgICAgICAgIWNoZWNrX2Rlc2NyaXB0 b3IoZG9tLCAmZCkgKQorICAgIHsKKyAgICAgICAgaWYgKCBwYWdlICkKKyAgICAgICAgICAgIHB1 dF9wYWdlKHBhZ2UpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgbWZuID0g cGFnZV90b19tZm4ocGFnZSk7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZnJhbWUgaXMg aW4gdXNlIGluIGFuIHVuc2FmZSBjb250ZXh0LiAqLworICAgIHN3aXRjaCAoIHBhZ2UtPnUuaW51 c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzayApCisgICAgeworICAgIGNhc2UgUEdUX3NlZ19k ZXNjX3BhZ2U6CisgICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX3R5cGUocGFnZSwgUEdU X3NlZ19kZXNjX3BhZ2UpKSApCisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3BhZ2VfdHlwZShwYWdl LCBQR1Rfd3JpdGFibGVfcGFnZSkpICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBwYWdpbmdfbWFya19kaXJ0eShkb20sIF9tZm4obWZuKSk7CisK KyAgICAvKiBBbGwgaXMgZ29vZCBzbyBtYWtlIHRoZSB1cGRhdGUuICovCisgICAgZ2R0X3BlbnQg PSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICB3cml0ZV9hdG9taWMoKHVpbnQ2NF90 ICopJmdkdF9wZW50W29mZnNldF0sICoodWludDY0X3QgKikmZCk7CisgICAgdW5tYXBfZG9tYWlu X3BhZ2UoZ2R0X3BlbnQpOworCisgICAgcHV0X3BhZ2VfdHlwZShwYWdlKTsKKworICAgIHJldCA9 IDA7IC8qIHN1Y2Nlc3MgKi8KKworIG91dDoKKyAgICBwdXRfcGFnZShwYWdlKTsKKworICAgIHJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBj LWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L3g4Nl82NC9jb21wYXQvbW0uYyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQvY29tcGF0 L21tLmMKaW5kZXggZWYwZmY4NjUxOS4uZDYxZmI4OWMyNyAxMDA2NDQKLS0tIGEveGVuL2FyY2gv eDg2L3g4Nl82NC9jb21wYXQvbW0uYworKysgYi94ZW4vYXJjaC94ODYveDg2XzY0L2NvbXBhdC9t bS5jCkBAIC02LDEzICs2LDE1IEBACiAjaW5jbHVkZSA8YXNtL21lbV9wYWdpbmcuaD4KICNpbmNs dWRlIDxhc20vbWVtX3NoYXJpbmcuaD4KIAorI2luY2x1ZGUgPGFzbS9wdi9wcm9jZXNzb3IuaD4K KwogaW50IGNvbXBhdF9zZXRfZ2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odWludCkgZnJhbWVf bGlzdCwgdW5zaWduZWQgaW50IGVudHJpZXMpCiB7CiAgICAgdW5zaWduZWQgaW50IGksIG5yX3Bh Z2VzID0gKGVudHJpZXMgKyA1MTEpIC8gNTEyOwogICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVzWzE2 XTsKICAgICBsb25nIHJldDsKIAotICAgIC8qIFJlY2hlY2tlZCBpbiBzZXRfZ2R0LCBidXQgZW5z dXJlcyBhIHNhbmUgbGltaXQgZm9yIGNvcHlfZnJvbV91c2VyKCkuICovCisgICAgLyogUmVjaGVj a2VkIGluIHB2X3NldF9nZHQsIGJ1dCBlbnN1cmVzIGEgc2FuZSBsaW1pdCBmb3IgY29weV9mcm9t X3VzZXIoKS4gKi8KICAgICBpZiAoIGVudHJpZXMgPiBGSVJTVF9SRVNFUlZFRF9HRFRfRU5UUlkg KQogICAgICAgICByZXR1cm4gLUVJTlZBTDsKIApAQCAtMzEsNyArMzMsNyBAQCBpbnQgY29tcGF0 X3NldF9nZHQoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh1aW50KSBmcmFtZV9saXN0LCB1bnNpZ25l ZCBpbnQgZW50cmllcwogCiAgICAgZG9tYWluX2xvY2soY3VycmVudC0+ZG9tYWluKTsKIAotICAg IGlmICggKHJldCA9IHNldF9nZHQoY3VycmVudCwgZnJhbWVzLCBlbnRyaWVzKSkgPT0gMCApCisg ICAgaWYgKCAocmV0ID0gcHZfc2V0X2dkdChjdXJyZW50LCBmcmFtZXMsIGVudHJpZXMpKSA9PSAw ICkKICAgICAgICAgZmx1c2hfdGxiX2xvY2FsKCk7CiAKICAgICBkb21haW5fdW5sb2NrKGN1cnJl bnQtPmRvbWFpbik7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5o IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaAppbmRleCA0YmVmNjk4NjMzLi43NDdm Y2JkYzc1IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oCisrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKQEAgLTQ2NiwxMSArNDY2LDYgQEAgZXh0 ZXJuIHZvaWQgaW5pdF9pbnQ4MF9kaXJlY3RfdHJhcChzdHJ1Y3QgdmNwdSAqdik7CiAKIGV4dGVy biB2b2lkIHdyaXRlX3B0YmFzZShzdHJ1Y3QgdmNwdSAqdik7CiAKLXZvaWQgZGVzdHJveV9nZHQo c3RydWN0IHZjcHUgKmQpOwotbG9uZyBzZXRfZ2R0KHN0cnVjdCB2Y3B1ICpkLCAKLSAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nICpmcmFtZXMsIAotICAgICAgICAgICAgIHVuc2lnbmVkIGludCBl bnRyaWVzKTsKLQogLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQg aW50byBidXN5LXdhaXQgbG9vcHMuICovCiBzdGF0aWMgYWx3YXlzX2lubGluZSB2b2lkIHJlcF9u b3Aodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvcHJvY2Vzc29y LmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjhhYjU3NzM4NzEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L3B2L3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBh c20teDg2L3B2L3Byb2Nlc3Nvci5oCisgKgorICogVmNwdSBpbnRlcmZhY2VzIGZvciBQViBndWVz dHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIF9fWDg2X1BWX1BST0NFU1NPUl9IX18KKyNkZWZpbmUgX19YODZfUFZfUFJPQ0VTU09SX0hf XworCisjaWZkZWYgQ09ORklHX1BWCisKK3ZvaWQgcHZfZGVzdHJveV9nZHQoc3RydWN0IHZjcHUg KmQpOworbG9uZyBwdl9zZXRfZ2R0KHN0cnVjdCB2Y3B1ICpkLCB1bnNpZ25lZCBsb25nICpmcmFt ZXMsIHVuc2lnbmVkIGludCBlbnRyaWVzKTsKKworI2Vsc2UKKworI2luY2x1ZGUgPHhlbi9lcnJu by5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcHZfZGVzdHJveV9nZHQoc3RydWN0IHZjcHUgKmQp IHt9CitzdGF0aWMgaW5saW5lIGxvbmcgcHZfc2V0X2dkdChzdHJ1Y3QgdmNwdSAqZCwgdW5zaWdu ZWQgbG9uZyAqZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGVudHJpZXMpCit7IHJldHVybiAtRUlOVkFMOyB9CisKKyNlbmRpZgorCisjZW5kaWYgLyog X19YODZfUFZfUFJPQ0VTU09SX0hfXyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==