From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH RFC 24/44] x86/mapcache: Reimplement map_domain_page() from scratch Date: Thu, 4 Jan 2018 20:21:49 +0000 Message-ID: <1515097329-31902-25-git-send-email-andrew.cooper3@citrix.com> References: <1515097329-31902-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: <1515097329-31902-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org VGhlcmUgYXJlIHR3byByZWFzb25zOgogMSkgVG8gc3RvcCB1c2luZyB0aGUgcGVyLWRvbWFpbiBy YW5nZSBmb3IgdGhlIG1hcGNhY2hlCiAyKSBUbyBtYWtlIG1hcF9kb21haW5fcGFnZSgpIHNhZmUg dG8gdXNlIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzCgpUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlz IGVudGlyZWx5IHBlcmNwdSBhbmQgcmF0aGVyIG1vcmUgc2ltcGxlLiAgU2VlIHRoZQpjb21tZW50 IGF0IHRoZSB0b3Agb2YgZG9tYWluX3BhZ2UuYyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxn b3JpdGhtLgoKQSBzaWRlIGVmZmVjdCBvZiB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIHRoYXQg d2UgY2FuIGdldCByaWQgb2Ygc3RydWN0Cm1hcGNhY2hlX3t2Y3B1LGRvbWFpbn0gZW50aXJlbHks IGFuZCBtYXBjYWNoZV9vdmVycmlkZV9jdXJyZW50KCkuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcg Q29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgoKVE9ETzogQ29uc2lkZXIgd2hldGhl ciB0byB0cnkgYW5kIGxhemlseSB1bm1hcCwgdXRpbGlzaW5nIG90aGVyIFRMQiBmbHVzaApzY2Vu YXJpb3MgcmF0aGVyIHRoYW4gZm9yY2luZyBhbiBpbnZscGcgb24gZWFjaCB1bm1hcC4KLS0tCiB4 ZW4vYXJjaC94ODYvZG9tYWluLmMgICAgICAgIHwgICA2IC0KIHhlbi9hcmNoL3g4Ni9kb21haW5f cGFnZS5jICAgfCAzNTMgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogeGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYyB8ICAgMyAtCiB4ZW4vaW5jbHVkZS9hc20t eDg2L2NvbmZpZy5oIHwgICA3IC0KIHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmggfCAgNDIg LS0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDMwNSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZG9tYWluLmMgYi94ZW4vYXJjaC94ODYvZG9t YWluLmMKaW5kZXggOTNlODFjMC4uM2Q5ZTdmYiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2Rv bWFpbi5jCisrKyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYwpAQCAtMzI0LDEwICszMjQsNiBAQCBp bnQgdmNwdV9pbml0aWFsaXNlKHN0cnVjdCB2Y3B1ICp2KQogCiAgICAgdi0+YXJjaC5mbGFncyA9 IFRGX2tlcm5lbF9tb2RlOwogCi0gICAgcmMgPSBtYXBjYWNoZV92Y3B1X2luaXQodik7Ci0gICAg aWYgKCByYyApCi0gICAgICAgIHJldHVybiByYzsKLQogICAgIGlmICggIWlzX2lkbGVfZG9tYWlu KGQpICkKICAgICB7CiAgICAgICAgIHBhZ2luZ192Y3B1X2luaXQodik7CkBAIC00NzgsOCArNDc0 LDYgQEAgaW50IGFyY2hfZG9tYWluX2NyZWF0ZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBp bnQgZG9tY3JfZmxhZ3MsCiAgICAgICAgIGQtPmFyY2guZW11bGF0aW9uX2ZsYWdzID0gZW1mbGFn czsKICAgICB9CiAKLSAgICBtYXBjYWNoZV9kb21haW5faW5pdChkKTsKLQogICAgIEhZUEVSVklT T1JfQ09NUEFUX1ZJUlRfU1RBUlQoZCkgPQogICAgICAgICBpc19wdl9kb21haW4oZCkgPyBfX0hZ UEVSVklTT1JfQ09NUEFUX1ZJUlRfU1RBUlQgOiB+MHU7CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9kb21haW5fcGFnZS5jIGIveGVuL2FyY2gveDg2L2RvbWFpbl9wYWdlLmMKaW5kZXggOGYy YmNkNC4uYzE3ZmY2NiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2RvbWFpbl9wYWdlLmMKKysr IGIveGVuL2FyY2gveDg2L2RvbWFpbl9wYWdlLmMKQEAgLTE4LDI5MSArMTgsMTMxIEBACiAjaW5j bHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotc3RhdGljIERF RklORV9QRVJfQ1BVKHN0cnVjdCB2Y3B1ICosIG92ZXJyaWRlKTsKKy8qCisgKiBHbG9iYWwgbWFw Y2FjaGUgZW50cmllcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHZtYXAoKSBpbmZyYXN0cnVj dHVyZS4KKyAqCisgKiBMb2NhbCBtYXBjYWNoZSBlbnRyaWVzIGFyZSBpbXBsZW1lbnRlZCB3aXRo IGEgcGVyY3B1IGxpbmVhciByYW5nZSwgc3RhcnRpbmcKKyAqIGF0IFBFUkNQVV9NQVBDQUNIRV9T VEFSVC4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG1hcHBpbmdzIHdlCisgKiBl eHBlY3QgdG8gdXNlIChOUl9NQVBDQUNIRV9TTE9UUykgaXMgZm9yIGEgbmVzdGVkIHBhZ2V3YWxr LiAgQmVpbmcgYSBzbWFsbAorICogbnVtYmVyLCBhbGxvY2F0aW9ucyBhcmUgdHJhY2tlZCB3aXRo IGEgc2ltcGxlIGJpdG1hcCAoaW51c2UpLgorICoKKyAqIFRoZXJlIGlzIHBsZW50eSBvZiBsaW5l YXIgYWRkcmVzcyBzcGFjZSB0byB1c2UsIHNvIGFkZHJlc3NlcyBhcmUgaGFuZGVkIG91dAorICog YnkgaW5kZXggaW50byB0aGUgaW51c2UgYml0bWFwLCB3aXRoIHVubWFwcGVkIGd1YXJkIHBhZ2Vz IGluYmV0d2VlbiwgdG8KKyAqIGhlbHAgY2F0Y2ggYm91bmRzIGVycm9ycyBpbiB0aGUgY29kZSB1 c2luZyB0aGUgbWFwcGluZ3MuCisgKgorICogSXQgaXMgKm5vdCogc2FmZSB0byBwYXNzIGxvY2Fs IG1hcGNhY2hlIG1hcHBpbmdzIHRvIG90aGVyIENQVXMgdG8gdXNlLgorICovCiAKLXN0YXRpYyBp bmxpbmUgc3RydWN0IHZjcHUgKm1hcGNhY2hlX2N1cnJlbnRfdmNwdSh2b2lkKQotewotICAgIC8q IEluIHRoZSBjb21tb24gY2FzZSB3ZSB1c2UgdGhlIG1hcGNhY2hlIG9mIHRoZSBydW5uaW5nIFZD UFUuICovCi0gICAgc3RydWN0IHZjcHUgKnYgPSB0aGlzX2NwdShvdmVycmlkZSkgPzogY3VycmVu dDsKK3N0cnVjdCBtYXBjYWNoZV9pbmZvIHsKKyNkZWZpbmUgTlJfTUFQQ0FDSEVfU0xPVFMgKENP TkZJR19QQUdJTkdfTEVWRUxTICogQ09ORklHX1BBR0lOR19MRVZFTFMpCisgICAgdW5zaWduZWQg bG9uZyBpbnVzZTsKK307CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1hcGNhY2hlX2lu Zm8sIG1hcGNhY2hlX2luZm8pOwogCi0gICAgLyoKLSAgICAgKiBXaGVuIGN1cnJlbnQgaXNuJ3Qg cHJvcGVybHkgc2V0IHVwIHlldCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAgICogcnVubmlu ZyBpbiBhbiBpZGxlIHZDUFUgKGNhbGxlcnMgbXVzdCBjaGVjayBmb3IgTlVMTCkuCi0gICAgICov Ci0gICAgaWYgKCB2ID09IElOVkFMSURfVkNQVSApCi0gICAgICAgIHJldHVybiBOVUxMOworc3Rh dGljIHVuc2lnbmVkIGxvbmcgbWFwY2FjaGVfaWR4X3RvX2xpbmVhcih1bnNpZ25lZCBpbnQgaWR4 KQoreworICAgIHJldHVybiBQRVJDUFVfTUFQQ0FDSEVfU1RBUlQgKyBwZm5fdG9fcGFkZHIoaWR4 ICogMiArIDEpOworfQogCi0gICAgLyoKLSAgICAgKiBXaGVuIHVzaW5nIGVmaSBydW50aW1lIHBh Z2UgdGFibGVzLCB3ZSBoYXZlIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBpZGxlCi0gICAgICogZG9t YWluJ3MgcGFnZSB0YWJsZXMgYnV0IGN1cnJlbnQgbWF5IHBvaW50IGF0IGFub3RoZXIgZG9tYWlu J3MgVkNQVS4KLSAgICAgKiBSZXR1cm4gTlVMTCBhcyB0aG91Z2ggY3VycmVudCBpcyBub3QgcHJv cGVybHkgc2V0IHVwIHlldC4KLSAgICAgKi8KLSAgICBpZiAoIGVmaV9yc191c2luZ19wZ3RhYmxl cygpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgdW5zaWduZWQgaW50IG1hcGNhY2hl X2xpbmVhcl90b19pZHgodW5zaWduZWQgbG9uZyBsaW5lYXIpCit7CisgICAgcmV0dXJuIHBhZGRy X3RvX3BmbihsaW5lYXIgLSBQRVJDUFVfTUFQQ0FDSEVfU1RBUlQpIC8gMjsKK30KIAotICAgIC8q Ci0gICAgICogSWYgZ3Vlc3RfdGFibGUgaXMgTlVMTCwgYW5kIHdlIGFyZSBydW5uaW5nIGEgcGFy YXZpcnR1YWxpc2VkIGd1ZXN0LAotICAgICAqIHRoZW4gaXQgbWVhbnMgd2UgYXJlIHJ1bm5pbmcg b24gdGhlIGlkbGUgZG9tYWluJ3MgcGFnZSB0YWJsZSBhbmQgbXVzdAotICAgICAqIHRoZXJlZm9y ZSB1c2UgaXRzIG1hcGNhY2hlLgotICAgICAqLwotICAgIGlmICggdW5saWtlbHkocGFnZXRhYmxl X2lzX251bGwodi0+YXJjaC5ndWVzdF90YWJsZSkpICYmIGlzX3B2X3ZjcHUodikgKQotICAgIHsK LSAgICAgICAgLyogSWYgd2UgcmVhbGx5IGFyZSBpZGxpbmcsIHBlcmZvcm0gbGF6eSBjb250ZXh0 IHN3aXRjaCBub3cuICovCi0gICAgICAgIGlmICggKHYgPSBpZGxlX3ZjcHVbc21wX3Byb2Nlc3Nv cl9pZCgpXSkgPT0gY3VycmVudCApCi0gICAgICAgICAgICBzeW5jX2xvY2FsX2V4ZWNzdGF0ZSgp OwotICAgICAgICAvKiBXZSBtdXN0IG5vdyBiZSBydW5uaW5nIG9uIHRoZSBpZGxlIHBhZ2UgdGFi bGUuICovCi0gICAgICAgIEFTU0VSVChyZWFkX2NyMygpID09IHRoaXNfY3B1KHBlcmNwdV9pZGxl X3B0KSk7Ci0gICAgfQorc3RhdGljIGwxX3BnZW50cnlfdCAqbWFwY2FjaGVfbDFlKHVuc2lnbmVk IGxvbmcgbGluZWFyKQoreworICAgIGwxX3BnZW50cnlfdCAqbDF0ID0gKGwxX3BnZW50cnlfdCAq KVBFUkNQVV9NQVBDQUNIRV9MMUVTOwogCi0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuICZsMXRb bDFfdGFibGVfb2Zmc2V0KGxpbmVhcildOwogfQogCi12b2lkIF9faW5pdCBtYXBjYWNoZV9vdmVy cmlkZV9jdXJyZW50KHN0cnVjdCB2Y3B1ICp2KQorLyoKKyAqIExvb2sgdXAgYSBtYXBjYWNoZSBl bnRyeSwgYmFzZWQgb24gYSBsaW5lYXIgYWRkcmVzcywgQVNTRVJUKClpbmcgdGhhdCBpdCBpcwor ICogYm91bmRlZCBzZW5pYmx5IGFuZCBpbiB1c2UuCisgKi8KK3N0YXRpYyBsMV9wZ2VudHJ5X3Qg Kmxvb2t1cF9pbnVzZV9tYXBjYWNoZV9lbnRyeSgKKyAgICB1bnNpZ25lZCBsb25nIGxpbmVhciwg dW5zaWduZWQgaW50ICpwX2lkeCkKIHsKLSAgICB0aGlzX2NwdShvdmVycmlkZSkgPSB2OwotfQor ICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgbDFfcGdlbnRyeV90ICpwbDFlOwogCi0jZGVmaW5l IG1hcGNhY2hlX2wyX2VudHJ5KGUpICgoZSkgPj4gUEFHRVRBQkxFX09SREVSKQotI2RlZmluZSBN QVBDQUNIRV9MMl9FTlRSSUVTIChtYXBjYWNoZV9sMl9lbnRyeShNQVBDQUNIRV9FTlRSSUVTIC0g MSkgKyAxKQotI2RlZmluZSBNQVBDQUNIRV9MMUVOVChpZHgpIFwKLSAgICBfX2xpbmVhcl9sMV90 YWJsZVtsMV9saW5lYXJfb2Zmc2V0KE1BUENBQ0hFX1ZJUlRfU1RBUlQgKyBwZm5fdG9fcGFkZHIo aWR4KSldCisgICAgQVNTRVJUKGxpbmVhciA+PSBQRVJDUFVfTUFQQ0FDSEVfU1RBUlQgJiYgbGlu ZWFyIDwgUEVSQ1BVX01BUENBQ0hFX0VORCk7CisKKyAgICBpZHggPSBtYXBjYWNoZV9saW5lYXJf dG9faWR4KGxpbmVhcik7CisgICAgQVNTRVJUKGlkeCA8IE5SX01BUENBQ0hFX1NMT1RTKTsKKyAg ICBBU1NFUlQodGVzdF9iaXQoaWR4LCAmdGhpc19jcHUobWFwY2FjaGVfaW5mbykuaW51c2UpKTsK KworICAgIGlmICggcF9pZHggKQorICAgICAgICAqcF9pZHggPSBpZHg7CisKKyAgICBwbDFlID0g bWFwY2FjaGVfbDFlKGxpbmVhcik7CisgICAgQVNTRVJUKGwxZV9nZXRfZmxhZ3MoKnBsMWUpICYg X1BBR0VfUFJFU0VOVCk7CisKKyAgICByZXR1cm4gcGwxZTsKK30KIAogdm9pZCAqbWFwX2RvbWFp bl9wYWdlKG1mbl90IG1mbikKIHsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIHVuc2ln bmVkIGludCBpZHgsIGk7Ci0gICAgc3RydWN0IHZjcHUgKnY7Ci0gICAgc3RydWN0IG1hcGNhY2hl X2RvbWFpbiAqZGNhY2hlOwotICAgIHN0cnVjdCBtYXBjYWNoZV92Y3B1ICp2Y2FjaGU7Ci0gICAg c3RydWN0IHZjcHVfbWFwaGFzaF9lbnRyeSAqaGFzaGVudDsKKyAgICB1bnNpZ25lZCBsb25nIGZs YWdzLCBsaW5lYXI7CisgICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICBzdHJ1Y3QgbWFwY2FjaGVf aW5mbyAqbWNpID0gJnRoaXNfY3B1KG1hcGNhY2hlX2luZm8pOworICAgIGwxX3BnZW50cnlfdCAq cGwxZTsKIAogI2lmZGVmIE5ERUJVRwogICAgIGlmICggbWZuX3gobWZuKSA8PSBQRk5fRE9XTihf X3BhKEhZUEVSVklTT1JfVklSVF9FTkQgLSAxKSkgKQogICAgICAgICByZXR1cm4gbWZuX3RvX3Zp cnQobWZuX3gobWZuKSk7CiAjZW5kaWYKIAotICAgIHYgPSBtYXBjYWNoZV9jdXJyZW50X3ZjcHUo KTsKLSAgICBpZiAoICF2IHx8ICFpc19wdl92Y3B1KHYpICkKKyAgICBpZiAoIHRoaXNfY3B1KGN1 cnJfZXh0ZW5kZWRfZGlyZWN0bWFwKSApCiAgICAgICAgIHJldHVybiBtZm5fdG9fdmlydChtZm5f eChtZm4pKTsKIAotICAgIGRjYWNoZSA9ICZ2LT5kb21haW4tPmFyY2gucHZfZG9tYWluLm1hcGNh Y2hlOwotICAgIHZjYWNoZSA9ICZ2LT5hcmNoLnB2X3ZjcHUubWFwY2FjaGU7Ci0gICAgaWYgKCAh ZGNhY2hlLT5pbnVzZSApCi0gICAgICAgIHJldHVybiBtZm5fdG9fdmlydChtZm5feChtZm4pKTsK LQotICAgIHBlcmZjX2luY3IobWFwX2RvbWFpbl9wYWdlX2NvdW50KTsKLQorICAgIC8qCisgICAg ICogbWFwX2RvbWFpbl9wYWdlKCkgaXMgdXNlZCBmcm9tIG1hbnkgY29udGV4dHMsIGluY2x1ZGlu ZyBmYXVsdCBoYW5kbGVycy4KKyAgICAgKiBEaXNhYmxlIGludGVycnVwdHMgdG8ga2VlcCB0aGUg aW51c2UgYml0bWFwIGNvbnNpc3RlbnQgd2l0aCB0aGUgbDF0LgorICAgICAqCisgICAgICogQmUg YXdhcmUhIEFueSAjUEYgaW5zaWRlIHRoaXMgcmVnaW9uIHdpbGwgbW9zdCBsaWtlbHkgcmVjdXJz ZSB3aXRoIHRoZQorICAgICAqIHNwdXJpb3VzIHBhZ2VmYXVsdCBoYW5kbGVyIHVudGlsIHRoZSBC VUdfT04oKSBpcyBoaXQuCisgICAgICovCiAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0g ICAgaGFzaGVudCA9ICZ2Y2FjaGUtPmhhc2hbTUFQSEFTSF9IQVNIRk4obWZuX3gobWZuKSldOwot ICAgIGlmICggaGFzaGVudC0+bWZuID09IG1mbl94KG1mbikgKQotICAgIHsKLSAgICAgICAgaWR4 ID0gaGFzaGVudC0+aWR4OwotICAgICAgICBBU1NFUlQoaWR4IDwgZGNhY2hlLT5lbnRyaWVzKTsK LSAgICAgICAgaGFzaGVudC0+cmVmY250Kys7Ci0gICAgICAgIEFTU0VSVChoYXNoZW50LT5yZWZj bnQpOwotICAgICAgICBBU1NFUlQobDFlX2dldF9wZm4oTUFQQ0FDSEVfTDFFTlQoaWR4KSkgPT0g bWZuX3gobWZuKSk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHNwaW5fbG9jaygm ZGNhY2hlLT5sb2NrKTsKLQotICAgIC8qIEhhcyBzb21lIG90aGVyIENQVSBjYXVzZWQgYSB3cmFw PyBXZSBtdXN0IGZsdXNoIGlmIHNvLiAqLwotICAgIGlmICggdW5saWtlbHkoZGNhY2hlLT5lcG9j aCAhPSB2Y2FjaGUtPnNoYWRvd19lcG9jaCkgKQotICAgIHsKLSAgICAgICAgdmNhY2hlLT5zaGFk b3dfZXBvY2ggPSBkY2FjaGUtPmVwb2NoOwotICAgICAgICBpZiAoIE5FRURfRkxVU0godGhpc19j cHUodGxiZmx1c2hfdGltZSksIGRjYWNoZS0+dGxiZmx1c2hfdGltZXN0YW1wKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIHBlcmZjX2luY3IoZG9tYWluX3BhZ2VfdGxiX2ZsdXNoKTsKLSAgICAg ICAgICAgIGZsdXNoX3RsYl9sb2NhbCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlkeCA9IGZp bmRfZmlyc3RfemVyb19iaXQoJm1jaS0+aW51c2UsIE5SX01BUENBQ0hFX1NMT1RTKTsKKyAgICBC VUdfT04oaWR4ID09IE5SX01BUENBQ0hFX1NMT1RTKTsKIAotICAgIGlkeCA9IGZpbmRfbmV4dF96 ZXJvX2JpdChkY2FjaGUtPmludXNlLCBkY2FjaGUtPmVudHJpZXMsIGRjYWNoZS0+Y3Vyc29yKTsK LSAgICBpZiAoIHVubGlrZWx5KGlkeCA+PSBkY2FjaGUtPmVudHJpZXMpICkKLSAgICB7Ci0gICAg ICAgIHVuc2lnbmVkIGxvbmcgYWNjdW0gPSAwLCBwcmV2ID0gMDsKLQotICAgICAgICAvKiAvRmly c3QvLCBjbGVhbiB0aGUgZ2FyYmFnZSBtYXAgYW5kIHVwZGF0ZSB0aGUgaW51c2UgbGlzdC4gKi8K LSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBCSVRTX1RPX0xPTkdTKGRjYWNoZS0+ZW50cmllcyk7 IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFjY3VtIHw9IHByZXY7Ci0gICAgICAgICAg ICBkY2FjaGUtPmludXNlW2ldICY9IH54Y2hnKCZkY2FjaGUtPmdhcmJhZ2VbaV0sIDApOwotICAg ICAgICAgICAgcHJldiA9IH5kY2FjaGUtPmludXNlW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKCBhY2N1bSB8IChwcmV2ICYgQklUTUFQX0xBU1RfV09SRF9NQVNLKGRjYWNoZS0+ZW50cmll cykpICkKLSAgICAgICAgICAgIGlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoZGNhY2hlLT5pbnVz ZSwgZGNhY2hlLT5lbnRyaWVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg ICAvKiBSZXBsYWNlIGEgaGFzaCBlbnRyeSBpbnN0ZWFkLiAqLwotICAgICAgICAgICAgaSA9IE1B UEhBU0hfSEFTSEZOKG1mbl94KG1mbikpOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg ICAgIGhhc2hlbnQgPSAmdmNhY2hlLT5oYXNoW2ldOwotICAgICAgICAgICAgICAgIGlmICggaGFz aGVudC0+aWR4ICE9IE1BUEhBU0hFTlRfTk9USU5VU0UgJiYgIWhhc2hlbnQtPnJlZmNudCApCi0g ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZHggPSBoYXNoZW50LT5pZHg7 Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsMWVfZ2V0X3BmbihNQVBDQUNIRV9MMUVOVChp ZHgpKSA9PSBoYXNoZW50LT5tZm4pOwotICAgICAgICAgICAgICAgICAgICBsMWVfd3JpdGUoJk1B UENBQ0hFX0wxRU5UKGlkeCksIGwxZV9lbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFz aGVudC0+aWR4ID0gTUFQSEFTSEVOVF9OT1RJTlVTRTsKLSAgICAgICAgICAgICAgICAgICAgaGFz aGVudC0+bWZuID0gfjBVTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggKytpID09IE1BUEhBU0hfRU5UUklFUyApCi0g ICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfSB3aGlsZSAoIGkgIT0gTUFQ SEFTSF9IQVNIRk4obWZuX3gobWZuKSkgKTsKLSAgICAgICAgfQotICAgICAgICBCVUdfT04oaWR4 ID49IGRjYWNoZS0+ZW50cmllcyk7Ci0KLSAgICAgICAgLyogL1NlY29uZC8sIGZsdXNoIFRMQnMu ICovCi0gICAgICAgIHBlcmZjX2luY3IoZG9tYWluX3BhZ2VfdGxiX2ZsdXNoKTsKLSAgICAgICAg Zmx1c2hfdGxiX2xvY2FsKCk7Ci0gICAgICAgIHZjYWNoZS0+c2hhZG93X2Vwb2NoID0gKytkY2Fj aGUtPmVwb2NoOwotICAgICAgICBkY2FjaGUtPnRsYmZsdXNoX3RpbWVzdGFtcCA9IHRsYmZsdXNo X2N1cnJlbnRfdGltZSgpOwotICAgIH0KKyAgICBfX3NldF9iaXQoaWR4LCAmbWNpLT5pbnVzZSk7 CiAKLSAgICBzZXRfYml0KGlkeCwgZGNhY2hlLT5pbnVzZSk7Ci0gICAgZGNhY2hlLT5jdXJzb3Ig PSBpZHggKyAxOworICAgIGxpbmVhciA9IG1hcGNhY2hlX2lkeF90b19saW5lYXIoaWR4KTsKKyAg ICBwbDFlID0gbWFwY2FjaGVfbDFlKGxpbmVhcik7CiAKLSAgICBzcGluX3VubG9jaygmZGNhY2hl LT5sb2NrKTsKKyAgICBBU1NFUlQoIShsMWVfZ2V0X2ZsYWdzKCpwbDFlKSAmIF9QQUdFX1BSRVNF TlQpKTsKKyAgICAqcGwxZSA9IGwxZV9mcm9tX21mbihtZm4sIF9fUEFHRV9IWVBFUlZJU09SX1JX KTsKKyAgICBiYXJyaWVyKCk7IC8qIEVuc3VyZSB0aGUgcGFnZXRhYmxlIGlzIHVwZGF0ZWQgYmVm b3JlIGVuYWJsaW5nIGludGVycnVwdHMuICovCiAKLSAgICBsMWVfd3JpdGUoJk1BUENBQ0hFX0wx RU5UKGlkeCksIGwxZV9mcm9tX21mbihtZm4sIF9fUEFHRV9IWVBFUlZJU09SX1JXKSk7Ci0KLSBv dXQ6CiAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotICAgIHJldHVybiAodm9pZCAqKU1B UENBQ0hFX1ZJUlRfU1RBUlQgKyBwZm5fdG9fcGFkZHIoaWR4KTsKKworICAgIHJldHVybiAodm9p ZCAqKWxpbmVhcjsKIH0KIAogdm9pZCB1bm1hcF9kb21haW5fcGFnZShjb25zdCB2b2lkICpwdHIp CiB7CisgICAgc3RydWN0IG1hcGNhY2hlX2luZm8gKm1jaSA9ICZ0aGlzX2NwdShtYXBjYWNoZV9p bmZvKTsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBsaW5lYXIgPSAodW5zaWduZWQgbG9uZylw dHI7CiAgICAgdW5zaWduZWQgaW50IGlkeDsKLSAgICBzdHJ1Y3QgdmNwdSAqdjsKLSAgICBzdHJ1 Y3QgbWFwY2FjaGVfZG9tYWluICpkY2FjaGU7Ci0gICAgdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNp Z25lZCBsb25nKXB0ciwgbWZuLCBmbGFnczsKLSAgICBzdHJ1Y3QgdmNwdV9tYXBoYXNoX2VudHJ5 ICpoYXNoZW50OworICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKIAotICAgIGlmICggdmEgPj0gRElS RUNUTUFQX1ZJUlRfU1RBUlQgKQorICAgIGlmICggbGluZWFyID49IERJUkVDVE1BUF9WSVJUX1NU QVJUICkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKHZhID49IE1BUENBQ0hFX1ZJUlRf U1RBUlQgJiYgdmEgPCBNQVBDQUNIRV9WSVJUX0VORCk7Ci0KLSAgICB2ID0gbWFwY2FjaGVfY3Vy cmVudF92Y3B1KCk7Ci0gICAgQVNTRVJUKHYgJiYgaXNfcHZfdmNwdSh2KSk7Ci0KLSAgICBkY2Fj aGUgPSAmdi0+ZG9tYWluLT5hcmNoLnB2X2RvbWFpbi5tYXBjYWNoZTsKLSAgICBBU1NFUlQoZGNh Y2hlLT5pbnVzZSk7Ci0KLSAgICBpZHggPSBQRk5fRE9XTih2YSAtIE1BUENBQ0hFX1ZJUlRfU1RB UlQpOwotICAgIG1mbiA9IGwxZV9nZXRfcGZuKE1BUENBQ0hFX0wxRU5UKGlkeCkpOwotICAgIGhh c2hlbnQgPSAmdi0+YXJjaC5wdl92Y3B1Lm1hcGNhY2hlLmhhc2hbTUFQSEFTSF9IQVNIRk4obWZu KV07CisgICAgcGwxZSA9IGxvb2t1cF9pbnVzZV9tYXBjYWNoZV9lbnRyeShsaW5lYXIsICZpZHgp OwogCiAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0gICAgaWYgKCBoYXNoZW50LT5pZHgg PT0gaWR4ICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNoZW50LT5tZm4gPT0gbWZuKTsKLSAg ICAgICAgQVNTRVJUKGhhc2hlbnQtPnJlZmNudCk7Ci0gICAgICAgIGhhc2hlbnQtPnJlZmNudC0t OwotICAgIH0KLSAgICBlbHNlIGlmICggIWhhc2hlbnQtPnJlZmNudCApCi0gICAgewotICAgICAg ICBpZiAoIGhhc2hlbnQtPmlkeCAhPSBNQVBIQVNIRU5UX05PVElOVVNFICkKLSAgICAgICAgewot ICAgICAgICAgICAgLyogL0ZpcnN0LywgemFwIHRoZSBQVEUuICovCi0gICAgICAgICAgICBBU1NF UlQobDFlX2dldF9wZm4oTUFQQ0FDSEVfTDFFTlQoaGFzaGVudC0+aWR4KSkgPT0KLSAgICAgICAg ICAgICAgICAgICBoYXNoZW50LT5tZm4pOwotICAgICAgICAgICAgbDFlX3dyaXRlKCZNQVBDQUNI RV9MMUVOVChoYXNoZW50LT5pZHgpLCBsMWVfZW1wdHkoKSk7Ci0gICAgICAgICAgICAvKiAvU2Vj b25kLywgbWFyayBhcyBnYXJiYWdlLiAqLwotICAgICAgICAgICAgc2V0X2JpdChoYXNoZW50LT5p ZHgsIGRjYWNoZS0+Z2FyYmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBZGQgbmV3bHkt ZnJlZWQgbWFwcGluZyB0byB0aGUgbWFwaGFzaC4gKi8KLSAgICAgICAgaGFzaGVudC0+bWZuID0g bWZuOwotICAgICAgICBoYXNoZW50LT5pZHggPSBpZHg7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7 Ci0gICAgICAgIC8qIC9GaXJzdC8sIHphcCB0aGUgUFRFLiAqLwotICAgICAgICBsMWVfd3JpdGUo Jk1BUENBQ0hFX0wxRU5UKGlkeCksIGwxZV9lbXB0eSgpKTsKLSAgICAgICAgLyogL1NlY29uZC8s IG1hcmsgYXMgZ2FyYmFnZS4gKi8KLSAgICAgICAgc2V0X2JpdChpZHgsIGRjYWNoZS0+Z2FyYmFn ZSk7Ci0gICAgfQorICAgICpwbDFlID0gbDFlX2VtcHR5KCk7CisgICAgYXNtIHZvbGF0aWxlICgg ImludmxwZyAlMCIgOjogIm0iICgqKGNoYXIgKilwdHIpIDogIm1lbW9yeSIgKTsKKyAgICBfX2Ns ZWFyX2JpdChpZHgsICZtY2ktPmludXNlKTsKIAogICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsKIH0KIAotaW50IG1hcGNhY2hlX2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCi17Ci0g ICAgc3RydWN0IG1hcGNhY2hlX2RvbWFpbiAqZGNhY2hlID0gJmQtPmFyY2gucHZfZG9tYWluLm1h cGNhY2hlOwotICAgIHVuc2lnbmVkIGludCBiaXRtYXBfcGFnZXM7Ci0KLSAgICBpZiAoICFpc19w dl9kb21haW4oZCkgfHwgaXNfaWRsZV9kb21haW4oZCkgKQotICAgICAgICByZXR1cm4gMDsKLQot I2lmZGVmIE5ERUJVRwotICAgIGlmICggIW1lbV9ob3RwbHVnICYmIG1heF9wYWdlIDw9IFBGTl9E T1dOKF9fcGEoSFlQRVJWSVNPUl9WSVJUX0VORCAtIDEpKSApCi0gICAgICAgIHJldHVybiAwOwot I2VuZGlmCi0KLSAgICBCVUlMRF9CVUdfT04oTUFQQ0FDSEVfVklSVF9FTkQgKyBQQUdFX1NJWkUg KiAoMyArCi0gICAgICAgICAgICAgICAgIDIgKiBQRk5fVVAoQklUU19UT19MT05HUyhNQVBDQUNI RV9FTlRSSUVTKSAqIHNpemVvZihsb25nKSkpID4KLSAgICAgICAgICAgICAgICAgTUFQQ0FDSEVf VklSVF9TVEFSVCArIChQRVJET01BSU5fU0xPVF9NQllURVMgPDwgMjApKTsKLSAgICBiaXRtYXBf cGFnZXMgPSBQRk5fVVAoQklUU19UT19MT05HUyhNQVBDQUNIRV9FTlRSSUVTKSAqIHNpemVvZihs b25nKSk7Ci0gICAgZGNhY2hlLT5pbnVzZSA9ICh2b2lkICopTUFQQ0FDSEVfVklSVF9FTkQgKyBQ QUdFX1NJWkU7Ci0gICAgZGNhY2hlLT5nYXJiYWdlID0gZGNhY2hlLT5pbnVzZSArCi0gICAgICAg ICAgICAgICAgICAgICAgKGJpdG1hcF9wYWdlcyArIDEpICogUEFHRV9TSVpFIC8gc2l6ZW9mKGxv bmcpOwotCi0gICAgc3Bpbl9sb2NrX2luaXQoJmRjYWNoZS0+bG9jayk7Ci0KLSAgICByZXR1cm4g Y3JlYXRlX3BlcmRvbWFpbl9tYXBwaW5nKGQsICh1bnNpZ25lZCBsb25nKWRjYWNoZS0+aW51c2Us Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogYml0bWFwX3BhZ2VzICsg MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JTChsMV9wZ2VudHJ5X3Qg KiksIE5VTEwpOwotfQotCi1pbnQgbWFwY2FjaGVfdmNwdV9pbml0KHN0cnVjdCB2Y3B1ICp2KQot ewotICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47Ci0gICAgc3RydWN0IG1hcGNhY2hl X2RvbWFpbiAqZGNhY2hlID0gJmQtPmFyY2gucHZfZG9tYWluLm1hcGNhY2hlOwotICAgIHVuc2ln bmVkIGxvbmcgaTsKLSAgICB1bnNpZ25lZCBpbnQgZW50cyA9IGQtPm1heF92Y3B1cyAqIE1BUENB Q0hFX1ZDUFVfRU5UUklFUzsKLSAgICB1bnNpZ25lZCBpbnQgbnIgPSBQRk5fVVAoQklUU19UT19M T05HUyhlbnRzKSAqIHNpemVvZihsb25nKSk7Ci0KLSAgICBpZiAoICFpc19wdl92Y3B1KHYpIHx8 ICFkY2FjaGUtPmludXNlICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIGVudHMgPiBk Y2FjaGUtPmVudHJpZXMgKQotICAgIHsKLSAgICAgICAgLyogUG9wdWxhdGUgcGFnZSB0YWJsZXMu ICovCi0gICAgICAgIGludCByYyA9IGNyZWF0ZV9wZXJkb21haW5fbWFwcGluZyhkLCBNQVBDQUNI RV9WSVJUX1NUQVJULCBlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTklMKGwxX3BnZW50cnlfdCAqKSwgTlVMTCk7Ci0KLSAgICAgICAgLyogUG9wdWxhdGUg Yml0IG1hcHMuICovCi0gICAgICAgIGlmICggIXJjICkKLSAgICAgICAgICAgIHJjID0gY3JlYXRl X3BlcmRvbWFpbl9tYXBwaW5nKGQsICh1bnNpZ25lZCBsb25nKWRjYWNoZS0+aW51c2UsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuciwgTlVMTCwgTklMKHN0cnVj dCBwYWdlX2luZm8gKikpOwotICAgICAgICBpZiAoICFyYyApCi0gICAgICAgICAgICByYyA9IGNy ZWF0ZV9wZXJkb21haW5fbWFwcGluZyhkLCAodW5zaWduZWQgbG9uZylkY2FjaGUtPmdhcmJhZ2Us Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuciwgTlVMTCwgTklM KHN0cnVjdCBwYWdlX2luZm8gKikpOwotCi0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAg cmV0dXJuIHJjOwotCi0gICAgICAgIGRjYWNoZS0+ZW50cmllcyA9IGVudHM7Ci0gICAgfQotCi0g ICAgLyogTWFyayBhbGwgbWFwaGFzaCBlbnRyaWVzIGFzIG5vdCBpbiB1c2UuICovCi0gICAgQlVJ TERfQlVHX09OKE1BUEhBU0hFTlRfTk9USU5VU0UgPCBNQVBDQUNIRV9FTlRSSUVTKTsKLSAgICBm b3IgKCBpID0gMDsgaSA8IE1BUEhBU0hfRU5UUklFUzsgaSsrICkKLSAgICB7Ci0gICAgICAgIHN0 cnVjdCB2Y3B1X21hcGhhc2hfZW50cnkgKmhhc2hlbnQgPSAmdi0+YXJjaC5wdl92Y3B1Lm1hcGNh Y2hlLmhhc2hbaV07Ci0KLSAgICAgICAgaGFzaGVudC0+bWZuID0gfjBVTDsgLyogbmV2ZXIgdmFs aWQgdG8gbWFwICovCi0gICAgICAgIGhhc2hlbnQtPmlkeCA9IE1BUEhBU0hFTlRfTk9USU5VU0U7 Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgKm1hcF9kb21haW5fcGFnZV9nbG9i YWwobWZuX3QgbWZuKQogewogICAgIEFTU0VSVCghaW5faXJxKCkgJiYKQEAgLTM0NSwxMCArMTg1 LDI5IEBAIHVuc2lnbmVkIGxvbmcgZG9tYWluX3BhZ2VfbWFwX3RvX21mbihjb25zdCB2b2lkICpw dHIpCiAgICAgICAgIEJVR19PTighcGwxZSk7CiAgICAgfQogICAgIGVsc2UKLSAgICB7Ci0gICAg ICAgIEFTU0VSVCh2YSA+PSBNQVBDQUNIRV9WSVJUX1NUQVJUICYmIHZhIDwgTUFQQ0FDSEVfVklS VF9FTkQpOwotICAgICAgICBwbDFlID0gJl9fbGluZWFyX2wxX3RhYmxlW2wxX2xpbmVhcl9vZmZz ZXQodmEpXTsKLSAgICB9CisgICAgICAgIHBsMWUgPSBsb29rdXBfaW51c2VfbWFwY2FjaGVfZW50 cnkodmEsIE5VTEwpOwogCiAgICAgcmV0dXJuIGwxZV9nZXRfcGZuKCpwbDFlKTsKIH0KKworc3Rh dGljIF9faW5pdCBfX21heWJlX3VudXNlZCB2b2lkIGJ1aWxkX2Fzc2VydGlvbnModm9pZCkKK3sK KyAgICBzdHJ1Y3QgbWFwY2FjaGVfaW5mbyBpbmZvOworCisgICAgLyogTlJfTUFQQ0FDSEVfU0xP VFMgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGludXNlIGJpdG1hcD8gKi8KKyAgICBCVUlMRF9C VUdfT04oTlJfTUFQQ0FDSEVfU0xPVFMgPiAoc2l6ZW9mKGluZm8uaW51c2UpICogOCkpOworCisg ICAgLyogRW5vdWdoIGxpbmVhciBhZGRyZXNzIHNwYWNlLCBpbmNsdWRpbmcgZ3VhcmQgcGFnZXM/ ICovCisgICAgQlVJTERfQlVHX09OKChOUl9NQVBDQUNIRV9TTE9UUyAqIDIpID4KKyAgICAgICAg ICAgICAgICAgKFBFUkNQVV9NQVBDQUNIRV9FTkQgLSBQRVJDUFVfTUFQQ0FDSEVfU1RBUlQpKTsK K30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHls ZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVu dC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv cHYvZG9tMF9idWlsZC5jIGIveGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYwppbmRleCAwOWM3 NjVhLi4zYmFmMzdiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvZG9tMF9idWlsZC5jCisr KyBiL3hlbi9hcmNoL3g4Ni9wdi9kb20wX2J1aWxkLmMKQEAgLTY5OCw3ICs2OTgsNiBAQCBpbnQg X19pbml0IGRvbTBfY29uc3RydWN0X3B2KHN0cnVjdCBkb21haW4gKmQsCiAKICAgICAvKiBXZSBy dW4gb24gZG9tMCdzIHBhZ2UgdGFibGVzIGZvciB0aGUgZmluYWwgcGFydCBvZiB0aGUgYnVpbGQg cHJvY2Vzcy4gKi8KICAgICB3cml0ZV9wdGJhc2Uodik7Ci0gICAgbWFwY2FjaGVfb3ZlcnJpZGVf Y3VycmVudCh2KTsKIAogICAgIC8qIENvcHkgdGhlIE9TIGltYWdlIGFuZCBmcmVlIHRlbXBvcmFy eSBidWZmZXIuICovCiAgICAgZWxmLmRlc3RfYmFzZSA9ICh2b2lkKil2a2Vybl9zdGFydDsKQEAg LTcxNyw3ICs3MTYsNiBAQCBpbnQgX19pbml0IGRvbTBfY29uc3RydWN0X3B2KHN0cnVjdCBkb21h aW4gKmQsCiAgICAgICAgIGlmICggKHBhcm1zLnZpcnRfaHlwZXJjYWxsIDwgdl9zdGFydCkgfHwK ICAgICAgICAgICAgICAocGFybXMudmlydF9oeXBlcmNhbGwgPj0gdl9lbmQpICkKICAgICAgICAg ewotICAgICAgICAgICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudChOVUxMKTsKICAgICAgICAg ICAgIHdyaXRlX3B0YmFzZShjdXJyZW50KTsKICAgICAgICAgICAgIHByaW50aygiSW52YWxpZCBI WVBFUkNBTExfUEFHRSBmaWVsZCBpbiBFTEYgbm90ZXMuXG4iKTsKICAgICAgICAgICAgIHJjID0g LTE7CkBAIC04MzgsNyArODM2LDYgQEAgaW50IF9faW5pdCBkb20wX2NvbnN0cnVjdF9wdihzdHJ1 Y3QgZG9tYWluICpkLAogICAgICAgICB4bGF0X3N0YXJ0X2luZm8oc2ksIFhMQVRfc3RhcnRfaW5m b19jb25zb2xlX2RvbTApOwogCiAgICAgLyogUmV0dXJuIHRvIGlkbGUgZG9tYWluJ3MgcGFnZSB0 YWJsZXMuICovCi0gICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudChOVUxMKTsKICAgICB3cml0 ZV9wdGJhc2UoY3VycmVudCk7CiAKICAgICB1cGRhdGVfZG9tYWluX3dhbGxjbG9ja190aW1lKGQp OwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jb25maWcuaCBiL3hlbi9pbmNsdWRl L2FzbS14ODYvY29uZmlnLmgKaW5kZXggYTk1ZjhjOC4uZjc4Y2JkZSAxMDA2NDQKLS0tIGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9jb25maWcuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2NvbmZp Zy5oCkBAIC0zMTQsMTMgKzMxNCw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9waHlzX3N0 YXJ0OwogI2RlZmluZSBMRFRfVklSVF9TVEFSVCh2KSAgICBcCiAgICAgKEdEVF9WSVJUX1NUQVJU KHYpICsgKDY0KjEwMjQpKQogCi0vKiBtYXBfZG9tYWluX3BhZ2UoKSBtYXAgY2FjaGUuIFRoZSBz ZWNvbmQgcGVyLWRvbWFpbi1tYXBwaW5nIHN1Yi1hcmVhLiAqLwotI2RlZmluZSBNQVBDQUNIRV9W Q1BVX0VOVFJJRVMgICAgKENPTkZJR19QQUdJTkdfTEVWRUxTICogQ09ORklHX1BBR0lOR19MRVZF TFMpCi0jZGVmaW5lIE1BUENBQ0hFX0VOVFJJRVMgICAgICAgICAoTUFYX1ZJUlRfQ1BVUyAqIE1B UENBQ0hFX1ZDUFVfRU5UUklFUykKLSNkZWZpbmUgTUFQQ0FDSEVfVklSVF9TVEFSVCAgICAgIFBF UkRPTUFJTl9WSVJUX1NMT1QoMSkKLSNkZWZpbmUgTUFQQ0FDSEVfVklSVF9FTkQgICAgICAgIChN QVBDQUNIRV9WSVJUX1NUQVJUICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1BUENBQ0hFX0VOVFJJRVMgKiBQQUdFX1NJWkUpCi0KIC8qIEFyZ3VtZW50IHRyYW5zbGF0aW9u IGFyZWEuIFRoZSB0aGlyZCBwZXItZG9tYWluLW1hcHBpbmcgc3ViLWFyZWEuICovCiAjZGVmaW5l IEFSR19YTEFUX1ZJUlRfU1RBUlQgICAgICBQRVJET01BSU5fVklSVF9TTE9UKDIpCiAvKiBBbGxv dyBmb3IgYXQgbGVhc3Qgb25lIGd1YXJkIHBhZ2UgKENPTVBBVF9BUkdfWExBVF9TSVpFIGJlaW5n IDIgcGFnZXMpOiAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCBi L3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmgKaW5kZXggZjY5OTExOS4uZmE1N2M5MyAxMDA2 NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAorKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L2RvbWFpbi5oCkBAIC0zOCw0MiArMzgsNiBAQCBzdHJ1Y3QgdHJhcF9ib3VuY2Ugewog ICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogfTsKIAotI2RlZmluZSBNQVBIQVNIX0VOVFJJRVMgOAot I2RlZmluZSBNQVBIQVNIX0hBU0hGTihwZm4pICgocGZuKSAmIChNQVBIQVNIX0VOVFJJRVMtMSkp Ci0jZGVmaW5lIE1BUEhBU0hFTlRfTk9USU5VU0UgKCh1MzIpfjBVKQotc3RydWN0IG1hcGNhY2hl X3ZjcHUgewotICAgIC8qIFNoYWRvdyBvZiBtYXBjYWNoZV9kb21haW4uZXBvY2guICovCi0gICAg dW5zaWduZWQgaW50IHNoYWRvd19lcG9jaDsKLQotICAgIC8qIExvY2stZnJlZSBwZXItVkNQVSBo YXNoIG9mIHJlY2VudGx5LXVzZWQgbWFwcGluZ3MuICovCi0gICAgc3RydWN0IHZjcHVfbWFwaGFz aF9lbnRyeSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgICAgICB1aW50MzJfdCAg ICAgIGlkeDsKLSAgICAgICAgdWludDMyX3QgICAgICByZWZjbnQ7Ci0gICAgfSBoYXNoW01BUEhB U0hfRU5UUklFU107Ci19OwotCi1zdHJ1Y3QgbWFwY2FjaGVfZG9tYWluIHsKLSAgICAvKiBUaGUg bnVtYmVyIG9mIGFycmF5IGVudHJpZXMsIGFuZCBhIGN1cnNvciBpbnRvIHRoZSBhcnJheS4gKi8K LSAgICB1bnNpZ25lZCBpbnQgZW50cmllczsKLSAgICB1bnNpZ25lZCBpbnQgY3Vyc29yOwotCi0g ICAgLyogUHJvdGVjdHMgbWFwX2RvbWFpbl9wYWdlKCkuICovCi0gICAgc3BpbmxvY2tfdCBsb2Nr OwotCi0gICAgLyogR2FyYmFnZSBtYXBwaW5ncyBhcmUgZmx1c2hlZCBmcm9tIFRMQnMgaW4gYmF0 Y2hlcyBjYWxsZWQgJ2Vwb2NocycuICovCi0gICAgdW5zaWduZWQgaW50IGVwb2NoOwotICAgIHUz MiB0bGJmbHVzaF90aW1lc3RhbXA7Ci0KLSAgICAvKiBXaGljaCBtYXBwaW5ncyBhcmUgaW4gdXNl LCBhbmQgd2hpY2ggYXJlIGdhcmJhZ2UgdG8gcmVhcCBuZXh0IGVwb2NoPyAqLwotICAgIHVuc2ln bmVkIGxvbmcgKmludXNlOwotICAgIHVuc2lnbmVkIGxvbmcgKmdhcmJhZ2U7Ci19OwotCi1pbnQg bWFwY2FjaGVfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqKTsKLWludCBtYXBjYWNoZV92Y3B1 X2luaXQoc3RydWN0IHZjcHUgKik7Ci12b2lkIG1hcGNhY2hlX292ZXJyaWRlX2N1cnJlbnQoc3Ry dWN0IHZjcHUgKik7Ci0KIC8qIHg4Ni82NDogdG9nZ2xlIGd1ZXN0IGJldHdlZW4ga2VybmVsIGFu ZCB1c2VyIG1vZGVzLiAqLwogdm9pZCB0b2dnbGVfZ3Vlc3RfbW9kZShzdHJ1Y3QgdmNwdSAqKTsK IC8qIHg4Ni82NDogdG9nZ2xlIGd1ZXN0IHBhZ2UgdGFibGVzIGJldHdlZW4ga2VybmVsIGFuZCB1 c2VyIG1vZGVzLiAqLwpAQCAtMjUxLDkgKzIxNSw2IEBAIHN0cnVjdCBwdl9kb21haW4KIAogICAg IGF0b21pY190IG5yX2w0X3BhZ2VzOwogCi0gICAgLyogbWFwX2RvbWFpbl9wYWdlKCkgbWFwcGlu ZyBjYWNoZS4gKi8KLSAgICBzdHJ1Y3QgbWFwY2FjaGVfZG9tYWluIG1hcGNhY2hlOwotCiAgICAg c3RydWN0IGNwdWlkbWFza3MgKmNwdWlkbWFza3M7CiB9OwogCkBAIC00NDQsOSArNDA1LDYgQEAg c3RydWN0IGFyY2hfZG9tYWluCiAKIHN0cnVjdCBwdl92Y3B1CiB7Ci0gICAgLyogbWFwX2RvbWFp bl9wYWdlKCkgbWFwcGluZyBjYWNoZS4gKi8KLSAgICBzdHJ1Y3QgbWFwY2FjaGVfdmNwdSBtYXBj YWNoZTsKLQogICAgIHN0cnVjdCB0cmFwX2luZm8gKnRyYXBfY3R4dDsKIAogICAgIHVuc2lnbmVk IGxvbmcgZ2R0X2ZyYW1lc1tGSVJTVF9SRVNFUlZFRF9HRFRfUEFHRV07Ci0tIAoyLjEuNAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=