From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v2 19/25] ACPI: Refactor acpi SRAT and SLIT table handling code Date: Tue, 28 Mar 2017 21:23:27 +0530 Message-ID: <1490716413-19796-20-git-send-email-vijay.kilari@gmail.com> References: <1490716413-19796-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1490716413-19796-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBTUkFU IGhhbmRsaW5nIGNvZGUgd2hpY2ggaXMgY29tbW9uIGFjcm9zcwphcmNoaXRlY3R1cmUgaXMgbW92 ZWQgdG8gbmV3IGZpbGUgeGVuL2RyaXZlcnMvYWNwaS9zcmF0LmMKZnJvbSB4ZW4vYXJjaC94ODYv c3JhdC5jIGZpbGUuIE5ldyBoZWFkZXIgZmlsZSBzcmF0LmggaXMKaW50cm9kdWNlZC4KClNpZ25l ZC1vZmYtYnk6IFZpamF5YSBLdW1hciBLIDxWaWpheWEuS3VtYXJAY2F2aXVtLmNvbT4KLS0tCiB4 ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYv bW0uYyAgICAgICAgICAgICAgICAgICB8ICAgMiAtCiB4ZW4vYXJjaC94ODYvcGh5c2Rldi5jICAg ICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvc2V0dXAuYyAgICAgICAgICAgICAgICB8 ICAgMSArCiB4ZW4vYXJjaC94ODYvc21wYm9vdC5jICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4v YXJjaC94ODYvc3JhdC5jICAgICAgICAgICAgICAgICB8IDI1MCArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni94ODZfNjQvbW0uYyAgICAgICAgICAgIHwgICAxICsK IHhlbi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHhlbi9kcml2ZXJz L2FjcGkvc3JhdC5jICAgICAgICAgICAgIHwgMjk5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmMgfCAgIDEgKwog eGVuL2luY2x1ZGUvYWNwaS9zcmF0LmggICAgICAgICAgICAgfCAgMjQgKysrCiB4ZW4vaW5jbHVk ZS9hc20teDg2L21tLmggICAgICAgICAgICB8ICAgMSAtCiB4ZW4vaW5jbHVkZS9hc20teDg2L251 bWEuaCAgICAgICAgICB8ICAgNCAtCiB4ZW4vaW5jbHVkZS94ZW4vbW0uaCAgICAgICAgICAgICAg ICB8ICAgMiArCiB4ZW4vaW5jbHVkZS94ZW4vbnVtYS5oICAgICAgICAgICAgICB8ICAgMSAtCiAx NSBmaWxlcyBjaGFuZ2VkLCAzMzMgaW5zZXJ0aW9ucygrKSwgMjU3IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kb20wX2J1aWxkLmMgYi94ZW4vYXJjaC94ODYvZG9tMF9i dWlsZC5jCmluZGV4IDIwMjIxYjUuLmMxMzFhODEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9k b20wX2J1aWxkLmMKKysrIGIveGVuL2FyY2gveDg2L2RvbTBfYnVpbGQuYwpAQCAtMTEsNiArMTEs NyBAQAogI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgogI2luY2x1ZGUgPHhlbi9zY2hlZC1pZi5oPgog I2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisjaW5jbHVkZSA8YWNwaS9zcmF0Lmg+CiAKICNpbmNs dWRlIDxhc20vZG9tMF9idWlsZC5oPgogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IGE2YjI2NDkuLmVi YWJiMGMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9t bS5jCkBAIC0xMzcsOCArMTM3LDYgQEAgbDFfcGdlbnRyeV90IF9fc2VjdGlvbigiLmJzcy5wYWdl X2FsaWduZWQiKSBfX2FsaWduZWQoUEFHRV9TSVpFKQogI2RlZmluZSBQVEVfVVBEQVRFX1dJVEhf Q01QWENIRwogI2VuZGlmCiAKLXBhZGRyX3QgX19yZWFkX21vc3RseSBtZW1faG90cGx1ZzsKLQog LyogUHJpdmF0ZSBkb21haW4gc3RydWN0cyBmb3IgRE9NSURfWEVOIGFuZCBET01JRF9JTy4gKi8K IHN0cnVjdCBkb21haW4gKmRvbV94ZW4sICpkb21faW8sICpkb21fY293OwogCmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvcGh5c2Rldi5jIGIveGVuL2FyY2gveDg2L3BoeXNkZXYuYwppbmRleCA4 MWNkNmM5Li5lY2MwZGFmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcGh5c2Rldi5jCisrKyBi L3hlbi9hcmNoL3g4Ni9waHlzZGV2LmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8eGVuL2d1 ZXN0X2FjY2Vzcy5oPgogI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgogI2luY2x1ZGUgPHhlbi9zZXJp YWwuaD4KKyNpbmNsdWRlIDxhY3BpL3NyYXQuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgog I2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL21zaS5oPgpkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L3NldHVwLmMgYi94ZW4vYXJjaC94ODYvc2V0dXAuYwppbmRleCA0NDEw ZTUzLi5kMjlmZDFhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvc2V0dXAuYworKysgYi94ZW4v YXJjaC94ODYvc2V0dXAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPHhlbi90bWVtX3hl bi5oPgogI2luY2x1ZGUgPHhlbi92aXJ0dWFsX3JlZ2lvbi5oPgogI2luY2x1ZGUgPHhlbi93YXRj aGRvZy5oPgorI2luY2x1ZGUgPGFjcGkvc3JhdC5oPgogI2luY2x1ZGUgPHB1YmxpYy92ZXJzaW9u Lmg+CiAjaW5jbHVkZSA8Y29tcGF0L3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8Y29tcGF0L3hlbi5o PgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3NtcGJvb3QuYyBiL3hlbi9hcmNoL3g4Ni9zbXBi b290LmMKaW5kZXggMjAzNzMzZS4uN2RjMDZlNCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3Nt cGJvb3QuYworKysgYi94ZW4vYXJjaC94ODYvc21wYm9vdC5jCkBAIC0zMyw2ICszMyw3IEBACiAj aW5jbHVkZSA8eGVuL3NlcmlhbC5oPgogI2luY2x1ZGUgPHhlbi9udW1hLmg+CiAjaW5jbHVkZSA8 eGVuL2NwdS5oPgorI2luY2x1ZGUgPGFjcGkvc3JhdC5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50 Lmg+CiAjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4K ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zcmF0LmMgYi94ZW4vYXJjaC94ODYvc3JhdC5jCmlu ZGV4IDU1OTQ3YmIuLjc2MGRmN2YgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9zcmF0LmMKKysr IGIveGVuL2FyY2gveDg2L3NyYXQuYwpAQCAtMTgsMTQgKzE4LDEyIEBACiAjaW5jbHVkZSA8eGVu L2FjcGkuaD4KICNpbmNsdWRlIDx4ZW4vbnVtYS5oPgogI2luY2x1ZGUgPHhlbi9wZm4uaD4KKyNp bmNsdWRlIDxhY3BpL3NyYXQuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFz bS9wYWdlLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpfX3JlYWRfbW9zdGx5 IGFjcGlfc2xpdDsKLQogZXh0ZXJuIG5vZGVtYXNrX3QgcHJvY2Vzc29yX25vZGVzX3BhcnNlZDsK IGV4dGVybiBub2RlbWFza190IG1lbW9yeV9ub2Rlc19wYXJzZWQ7Ci0KIC8qCiAgKiBLZWVwIEJJ T1MncyBDUFUybm9kZSBpbmZvcm1hdGlvbiwgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBtZW1vcnkg YWxsb2NhaW9uCiAgKi8KQEAgLTMzLDg3ICszMSw2IEBAIG5vZGVpZF90IGFwaWNpZF90b19ub2Rl W01BWF9MT0NBTF9BUElDXSA9IHsKICAgICBbMCAuLi4gTUFYX0xPQ0FMX0FQSUMtMV0gPSBOVU1B X05PX05PREUKIH07CiAKLXN0cnVjdCBweG0ybm9kZSB7Ci0JdW5zaWduZWQgaW50IHB4bTsKLQlu b2RlaWRfdCBub2RlOwotfTsKLXN0YXRpYyBzdHJ1Y3QgcHhtMm5vZGUgX19yZWFkX21vc3RseSBw eG0ybm9kZVtNQVhfTlVNTk9ERVNdID0KLQl7IFswIC4uLiBNQVhfTlVNTk9ERVMgLSAxXSA9IHsu bm9kZSA9IE5VTUFfTk9fTk9ERX0gfTsKLQotc3RhdGljIHVuc2lnbmVkIG5vZGVfdG9fcHhtKG5v ZGVpZF90IG4pOwotCi1zdGF0aWMgX19pbml0ZGF0YSBERUNMQVJFX0JJVE1BUChtZW1ibGtfaG90 cGx1ZywgTlJfTk9ERV9NRU1CTEtTKTsKLQotc3RhdGljIGlubGluZSBib29sIG5vZGVfZm91bmQo dW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50IHB4bSkKLXsKLQlyZXR1cm4gKChweG0ybm9k ZVtpZHhdLnB4bSA9PSBweG0pICYmCi0JCShweG0ybm9kZVtpZHhdLm5vZGUgIT0gTlVNQV9OT19O T0RFKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X3B4bTJub2RlKHZvaWQpCi17Ci0JdW5zaWdu ZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweG0ybm9kZSk7IGkrKykK LQkJcHhtMm5vZGVbaV0ubm9kZSA9IE5VTUFfTk9fTk9ERTsKLX0KLQotbm9kZWlkX3QgcHhtX3Rv X25vZGUodW5zaWduZWQgaW50IHB4bSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICgocHht IDwgQVJSQVlfU0laRShweG0ybm9kZSkpICYmIG5vZGVfZm91bmQocHhtLCBweG0pKQotCQlyZXR1 cm4gcHhtMm5vZGVbcHhtXS5ub2RlOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHht Mm5vZGUpOyBpKyspCi0JCWlmIChub2RlX2ZvdW5kKGksIHB4bSkpCi0JCQlyZXR1cm4gcHhtMm5v ZGVbaV0ubm9kZTsKLQotCXJldHVybiBOVU1BX05PX05PREU7Ci19Ci0KLW5vZGVpZF90IGFjcGlf c2V0dXBfbm9kZSh1bnNpZ25lZCBpbnQgcHhtKQotewotCW5vZGVpZF90IG5vZGU7Ci0JdW5zaWdu ZWQgaW50IGlkeDsKLQlzdGF0aWMgYm9vbCB3YXJuZWQ7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBu b2Rlc19mb3VuZDsKLQotCUJVSUxEX0JVR19PTihNQVhfTlVNTk9ERVMgPj0gTlVNQV9OT19OT0RF KTsKLQotCWlmIChweG0gPCBBUlJBWV9TSVpFKHB4bTJub2RlKSkgewotCQlpZiAobm9kZV9mb3Vu ZChweG0sIHB4bSkpCi0JCQlyZXR1cm4gcHhtMm5vZGVbcHhtXS5ub2RlOwotCi0JCS8qIFRyeSB0 byBtYWludGFpbiBpbmRleGluZyBvZiBweG0ybm9kZSBieSBweG0gKi8KLQkJaWYgKHB4bTJub2Rl W3B4bV0ubm9kZSA9PSBOVU1BX05PX05PREUpIHsKLQkJCWlkeCA9IHB4bTsKLQkJCWdvdG8gZmlu aXNoOwotCQl9Ci0JfQotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHB4bTJub2Rl KTsgaWR4KyspCi0JCWlmIChweG0ybm9kZVtpZHhdLm5vZGUgPT0gTlVNQV9OT19OT0RFKQotCQkJ Z290byBmaW5pc2g7Ci0KLQlpZiAoIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJT UkFUOiBUb28gbWFueSBwcm94aW1pdHkgZG9tYWlucyAoJSN4KVxuIiwKLQkJICAgICAgIHB4bSk7 Ci0JCXdhcm5lZCA9IDE7Ci0JfQotCi0JcmV0dXJuIE5VTUFfTk9fTk9ERTsKLQotIGZpbmlzaDoK LQlub2RlID0gbm9kZXNfZm91bmQrKzsKLQlpZiAobm9kZSA+PSBNQVhfTlVNTk9ERVMpCi0JCXJl dHVybiBOVU1BX05PX05PREU7Ci0JcHhtMm5vZGVbaWR4XS5weG0gPSBweG07Ci0JcHhtMm5vZGVb aWR4XS5ub2RlID0gbm9kZTsKLQotCXJldHVybiBub2RlOwotfQotCiB2b2lkIF9faW5pdCBudW1h X2ZhaWxlZCh2b2lkKQogewogCWludCBpOwpAQCAtMTI1LDQ4ICs0Miw2IEBAIHZvaWQgX19pbml0 IG51bWFfZmFpbGVkKHZvaWQpCiAJbWVtX2hvdHBsdWcgPSAwOwogfQogCi0vKgotICogQSBsb3Qg b2YgQklPUyBmaWxsIGluIDEwICg9IG5vIGRpc3RhbmNlKSBldmVyeXdoZXJlLiBUaGlzIG1lc3Nl cwotICogdXAgdGhlIE5VTUEgaGV1cmlzdGljcyB3aGljaCB3YW50cyB0aGUgbG9jYWwgbm9kZSB0 byBoYXZlIGEgc21hbGxlcgotICogZGlzdGFuY2UgdGhhbiB0aGUgb3RoZXJzLgotICogRG8gc29t ZSBxdWljayBjaGVja3MgaGVyZSBhbmQgb25seSB1c2UgdGhlIFNMSVQgaWYgaXQgcGFzc2VzLgot ICovCi1zdGF0aWMgaW50IF9faW5pdCBzbGl0X3ZhbGlkKHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQg KnNsaXQpCi17Ci0JaW50IGksIGo7Ci0JaW50IGQgPSBzbGl0LT5sb2NhbGl0eV9jb3VudDsKLQlm b3IgKGkgPSAwOyBpIDwgZDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBkOyBqKyspICB7Ci0J CQl1aW50OF90IHZhbCA9IHNsaXQtPmVudHJ5W2QqaSArIGpdOwotCQkJaWYgKGkgPT0gaikgewot CQkJCWlmICh2YWwgIT0gTE9DQUxfRElTVEFOQ0UpCi0JCQkJCXJldHVybiAwOwotCQkJfSBlbHNl IGlmICh2YWwgPD0gTE9DQUxfRElTVEFOQ0UpCi0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0 dXJuIDE7Ci19Ci0KLS8qIENhbGxiYWNrIGZvciBTTElUIHBhcnNpbmcgKi8KLXZvaWQgX19pbml0 IGFjcGlfbnVtYV9zbGl0X2luaXQoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqc2xpdCkKLXsKLQl1 bnNpZ25lZCBsb25nIG1mbjsKLQlpZiAoIXNsaXRfdmFsaWQoc2xpdCkpIHsKLQkJcHJpbnRrKEtF Uk5fSU5GTyAiQUNQSTogU0xJVCB0YWJsZSBsb29rcyBpbnZhbGlkLiAiCi0JCSAgICAgICAiTm90 IHVzZWQuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZm4gPSBhbGxvY19ib290X3BhZ2VzKFBGTl9V UChzbGl0LT5oZWFkZXIubGVuZ3RoKSwgMSk7Ci0JaWYgKCFtZm4pIHsKLQkJcHJpbnRrKEtFUk5f RVJSICJBQ1BJOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCSAgICAgICAic2F2 aW5nIEFDUEkgU0xJVCBudW1hIGluZm9ybWF0aW9uLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0JYWNw aV9zbGl0ID0gbWZuX3RvX3ZpcnQobWZuKTsKLQltZW1jcHkoYWNwaV9zbGl0LCBzbGl0LCBzbGl0 LT5oZWFkZXIubGVuZ3RoKTsKLX0KLQogLyogQ2FsbGJhY2sgZm9yIFByb3hpbWl0eSBEb21haW4g LT4geDJBUElDIG1hcHBpbmcgKi8KIHZvaWQgX19pbml0CiBhY3BpX251bWFfeDJhcGljX2FmZmlu aXR5X2luaXQoY29uc3Qgc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwYSkK QEAgLTIzNCwxMDAgKzEwOSw2IEBAIGFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdChj b25zdCBzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSAqcGEpCiAJICAgICAgIHB4bSwgcGEt PmFwaWNfaWQsIG5vZGUpOwogfQogCi0vKiBDYWxsYmFjayBmb3IgcGFyc2luZyBvZiB0aGUgUHJv eGltaXR5IERvbWFpbiA8LT4gTWVtb3J5IEFyZWEgbWFwcGluZ3MgKi8KLXZvaWQgX19pbml0Ci1h Y3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQoY29uc3Qgc3RydWN0IGFjcGlfc3JhdF9tZW1f YWZmaW5pdHkgKm1hKQotewotCXVpbnQ2NF90IHN0YXJ0LCBlbmQ7Ci0JdW5zaWduZWQgcHhtOwot CW5vZGVpZF90IG5vZGU7Ci0JaW50IGk7Ci0Jc3RydWN0IG5vZGUgKm1lbWJsazsKLQotCWlmIChz cmF0X2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQlpZiAobWEtPmhlYWRlci5sZW5ndGggIT0gc2l6 ZW9mKHN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5KSkgewotCQludW1hX2ZhaWxlZCgpOwot CQlyZXR1cm47Ci0JfQotCWlmICghKG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fRU5BQkxFRCkp Ci0JCXJldHVybjsKLQotCWlmIChnZXRfbnVtX25vZGVfbWVtYmxrcygpID49IE5SX05PREVfTUVN QkxLUykKLQl7Ci0JCWRwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgIlRv byBtYW55IG51bWEgZW50cnksIHRyeSBiaWdnZXIgTlJfTk9ERV9NRU1CTEtTIFxuIik7Ci0JCW51 bWFfZmFpbGVkKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGFydCA9IG1hLT5iYXNlX2FkZHJlc3M7 Ci0JZW5kID0gc3RhcnQgKyBtYS0+bGVuZ3RoOwotCXB4bSA9IG1hLT5wcm94aW1pdHlfZG9tYWlu OwotCWlmIChzcmF0X3JldiA8IDIpCi0JCXB4bSAmPSAweGZmOwotCW5vZGUgPSBhY3BpX3NldHVw X25vZGUocHhtKTsKLQlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpIHsKLQkJbnVtYV9mYWlsZWQo KTsKLQkJcmV0dXJuOwotCX0KLQkvKiBJdCBpcyBmaW5lIHRvIGFkZCB0aGlzIGFyZWEgdG8gdGhl IG5vZGVzIGRhdGEgaXQgd2lsbCBiZSB1c2VkIGxhdGVyKi8KLQlpID0gY29uZmxpY3RpbmdfbWVt YmxrcyhzdGFydCwgZW5kKTsKLQlpZiAoaSA8IDApCi0JCS8qIGV2ZXJ5dGhpbmcgZmluZSAqLzsK LQllbHNlIGlmIChnZXRfbWVtYmxrX25vZGVpZChpKSA9PSBub2RlKSB7Ci0JCWJvb2wgbWlzbWF0 Y2ggPSAhKG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fSE9UX1BMVUdHQUJMRSkgIT0KLQkJICAg ICAgICAgICAgICAgICF0ZXN0X2JpdChpLCBtZW1ibGtfaG90cGx1Zyk7Ci0KLQkJbWVtYmxrID0g Z2V0X25vZGVfbWVtYmxrX3JhbmdlKGkpOwotCi0JCXByaW50aygiJXNTUkFUOiBQWE0gJXUgKCUi UFJJeDY0Ii0lIlBSSXg2NCIpIG92ZXJsYXBzIHdpdGggaXRzZWxmICglIlBSSXg2NCItJSJQUkl4 NjQiKVxuIiwKLQkJICAgICAgIG1pc21hdGNoID8gS0VSTl9FUlIgOiBLRVJOX1dBUk5JTkcsIHB4 bSwgc3RhcnQsIGVuZCwKLQkJICAgICAgIG1lbWJsay0+c3RhcnQsIG1lbWJsay0+ZW5kKTsKLQkJ aWYgKG1pc21hdGNoKSB7Ci0JCQludW1hX2ZhaWxlZCgpOwotCQkJcmV0dXJuOwotCQl9Ci0JfSBl bHNlIHsKLQkJbWVtYmxrID0gZ2V0X25vZGVfbWVtYmxrX3JhbmdlKGkpOwotCi0JCXByaW50ayhL RVJOX0VSUgotCQkgICAgICAgIlNSQVQ6IFBYTSAldSAoJSJQUkl4NjQiLSUiUFJJeDY0Iikgb3Zl cmxhcHMgd2l0aCBQWE0gJXUgKCUiUFJJeDY0Ii0lIlBSSXg2NCIpXG4iLAotCQkgICAgICAgcHht LCBzdGFydCwgZW5kLCBub2RlX3RvX3B4bShnZXRfbWVtYmxrX25vZGVpZChpKSksCi0JCSAgICAg ICBtZW1ibGstPnN0YXJ0LCBtZW1ibGstPmVuZCk7Ci0JCW51bWFfZmFpbGVkKCk7Ci0JCXJldHVy bjsKLQl9Ci0JaWYgKCEobWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFKSkg ewotCQlzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRfbnVtYV9ub2RlKG5vZGUpOwotCi0JCWlmICghbm9k ZV90ZXN0X2FuZF9zZXQobm9kZSwgbWVtb3J5X25vZGVzX3BhcnNlZCkpIHsKLQkJCW5kLT5zdGFy dCA9IHN0YXJ0OwotCQkJbmQtPmVuZCA9IGVuZDsKLQkJfSBlbHNlIHsKLQkJCWlmIChzdGFydCA8 IG5kLT5zdGFydCkKLQkJCQluZC0+c3RhcnQgPSBzdGFydDsKLQkJCWlmIChuZC0+ZW5kIDwgZW5k KQotCQkJCW5kLT5lbmQgPSBlbmQ7Ci0JCX0KLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDog Tm9kZSAldSBQWE0gJXUgJSJQUkl4NjQiLSUiUFJJeDY0IiVzXG4iLAotCSAgICAgICBub2RlLCBw eG0sIHN0YXJ0LCBlbmQsCi0JICAgICAgIG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fSE9UX1BM VUdHQUJMRSA/ICIgKGhvdHBsdWcpIiA6ICIiKTsKLQotCWlmIChudW1hX2FkZF9tZW1ibGsobm9k ZSwgc3RhcnQsIG1hLT5sZW5ndGgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1JBVDogbm9kZS1p ZCAldSBvdXQgb2YgcmFuZ2VcbiIsIG5vZGUpOwotCQludW1hX2ZhaWxlZCgpOwotCQlyZXR1cm47 Ci0JfQotCi0JaWYgKG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fSE9UX1BMVUdHQUJMRSkgewot CQlfX3NldF9iaXQoZ2V0X251bV9ub2RlX21lbWJsa3MoKSwgbWVtYmxrX2hvdHBsdWcpOwotCQlp ZiAoZW5kID4gbWVtX2hvdHBsdWcpCi0JCQltZW1faG90cGx1ZyA9IGVuZDsKLQl9Ci19Ci0KIC8q IFNhbml0eSBjaGVjayB0byBjYXRjaCBtb3JlIGJhZCBTUkFUcyAodGhleSBhcmUgYW1hemluZ2x5 IGNvbW1vbikuCiAgICBNYWtlIHN1cmUgdGhlIFBYTXMgY292ZXIgYWxsIG1lbW9yeS4gKi8KIGlu dCBfX2luaXQgYXJjaF9zYW5pdGl6ZV9ub2Rlc19tZW1vcnkodm9pZCkKQEAgLTQyNywzNSArMjA4 LDYgQEAgdm9pZCBfX2luaXQgc3JhdF9wYXJzZV9yZWdpb25zKHVpbnQ2NF90IGFkZHIpCiAJcGZu X3BkeF9ob2xlX3NldHVwKG1hc2sgPj4gUEFHRV9TSElGVCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25l ZCBub2RlX3RvX3B4bShub2RlaWRfdCBuKQotewotCXVuc2lnbmVkIGk7Ci0KLQlpZiAoKG4gPCBB UlJBWV9TSVpFKHB4bTJub2RlKSkgJiYgKHB4bTJub2RlW25dLm5vZGUgPT0gbikpCi0JCXJldHVy biBweG0ybm9kZVtuXS5weG07Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhtMm5vZGUp OyBpKyspCi0JCWlmIChweG0ybm9kZVtpXS5ub2RlID09IG4pCi0JCQlyZXR1cm4gcHhtMm5vZGVb aV0ucHhtOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdWludDhfdCBhY3BpX25vZGVfZGlzdGFu Y2Uobm9kZWlkX3QgYSwgbm9kZWlkX3QgYikKLXsKLQl1bnNpZ25lZCBpbmRleDsKLQl1aW50OF90 IHNsaXRfdmFsOwotCi0JaWYgKCFhY3BpX3NsaXQpCi0JCXJldHVybiBhID09IGIgPyBMT0NBTF9E SVNUQU5DRSA6IFJFTU9URV9ESVNUQU5DRTsKLQlpbmRleCA9IGFjcGlfc2xpdC0+bG9jYWxpdHlf Y291bnQgKiBub2RlX3RvX3B4bShhKTsKLQlzbGl0X3ZhbCA9IGFjcGlfc2xpdC0+ZW50cnlbaW5k ZXggKyBub2RlX3RvX3B4bShiKV07Ci0KLQkvKiBBQ1BJIGRlZmluZXMgMHhmZiBhcyBhbiB1bnJl YWNoYWJsZSBub2RlIGFuZCAwLTkgYXJlIHVuZGVmaW5lZCAqLwotCWlmICgoc2xpdF92YWwgPT0g MHhmZikgfHwgKHNsaXRfdmFsIDw9IDkpKQotCQlyZXR1cm4gTlVNQV9OT19ESVNUQU5DRTsKLQll bHNlCi0JCXJldHVybiBzbGl0X3ZhbDsKLX0KLQogdWludDhfdCBfX25vZGVfZGlzdGFuY2Uobm9k ZWlkX3QgYSwgbm9kZWlkX3QgYikKIHsKIAlyZXR1cm4gYWNwaV9ub2RlX2Rpc3RhbmNlKGEsIGIp OwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3g4Nl82NC9tbS5jIGIveGVuL2FyY2gveDg2L3g4 Nl82NC9tbS5jCmluZGV4IGYwMDgyZTEuLjhkNWZkNGUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni94ODZfNjQvbW0uYworKysgYi94ZW4vYXJjaC94ODYveDg2XzY0L21tLmMKQEAgLTI3LDYgKzI3 LDcgQEAgYXNtKCIuZmlsZSBcIiIgX19GSUxFX18gIlwiIik7CiAjaW5jbHVkZSA8eGVuL2d1ZXN0 X2FjY2Vzcy5oPgogI2luY2x1ZGUgPHhlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDx4ZW4vbWVt X2FjY2Vzcy5oPgorI2luY2x1ZGUgPGFjcGkvc3JhdC5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50 Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbV9kZWZucy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRp ZmYgLS1naXQgYS94ZW4vZHJpdmVycy9hY3BpL01ha2VmaWxlIGIveGVuL2RyaXZlcnMvYWNwaS9N YWtlZmlsZQppbmRleCA0NDRiMTFkLi42OWVkYzI2IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9h Y3BpL01ha2VmaWxlCisrKyBiL3hlbi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTQsNiArNCw3 IEBAIHN1YmRpci0kKENPTkZJR19YODYpICs9IGFwZWkKIAogb2JqLWJpbi15ICs9IHRhYmxlcy5p bml0Lm8KIG9iai0kKENPTkZJR19OVU1BKSArPSBudW1hLm8KK29iai0kKENPTkZJR19OVU1BKSAr PSBzcmF0Lm8KIG9iai15ICs9IG9zbC5vCiBvYmotJChDT05GSUdfSEFTX0NQVUZSRVEpICs9IHBt c3RhdC5vCiAKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL2FjcGkvc3JhdC5jIGIveGVuL2RyaXZl cnMvYWNwaS9zcmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2OGE0 YgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9kcml2ZXJzL2FjcGkvc3JhdC5jCkBAIC0wLDAgKzEs Mjk5IEBACisvKgorICogQUNQSSAzLjAgYmFzZWQgTlVNQSBzZXR1cAorICogQ29weXJpZ2h0IDIw MDQgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICoKKyAqIFJlYWRzIHRoZSBBQ1BJIFNSQVQgdGFi bGUgdG8gZmlndXJlIG91dCB3aGF0IG1lbW9yeSBiZWxvbmdzIHRvIHdoaWNoIENQVXMuCisgKgor ICogQ2FsbGVkIGZyb20gYWNwaV9udW1hX2luaXQgd2hpbGUgcmVhZGluZyB0aGUgU1JBVCBhbmQg U0xJVCB0YWJsZXMuCisgKiBBc3N1bWVzIGFsbCBtZW1vcnkgcmVnaW9ucyBiZWxvbmdpbmcgdG8g YSBzaW5nbGUgcHJveGltaXR5IGRvbWFpbgorICogYXJlIGluIG9uZSBjaHVuay4gSG9sZXMgYmV0 d2VlbiB0aGVtIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG5vZGUuCisgKgorICogQWRhcHRlZCBm b3IgWGVuOiBSeWFuIEhhcnBlciA8cnlhbmhAdXMuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8 eGVuL2luaXQuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4vaW50dHlwZXMu aD4KKyNpbmNsdWRlIDx4ZW4vbm9kZW1hc2suaD4KKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2lu Y2x1ZGUgPHhlbi9udW1hLmg+CisjaW5jbHVkZSA8eGVuL3Bmbi5oPgorI2luY2x1ZGUgPGFjcGkv c3JhdC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKwor cGFkZHJfdCBfX3JlYWRfbW9zdGx5IG1lbV9ob3RwbHVnOworZXh0ZXJuIG5vZGVtYXNrX3QgbWVt b3J5X25vZGVzX3BhcnNlZDsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0IF9fcmVhZF9t b3N0bHkgKmFjcGlfc2xpdDsKK3N0YXRpYyBzdHJ1Y3QgcHhtMm5vZGUgX19yZWFkX21vc3RseSBw eG0ybm9kZVtNQVhfTlVNTk9ERVNdID0KKyAgICB7IFswIC4uLiBNQVhfTlVNTk9ERVMgLSAxXSA9 IHsubm9kZSA9IE5VTUFfTk9fTk9ERX0gfTsKKworc3RhdGljIF9faW5pdGRhdGEgREVDTEFSRV9C SVRNQVAobWVtYmxrX2hvdHBsdWcsIE5SX05PREVfTUVNQkxLUyk7CisKK3N0YXRpYyBpbmxpbmUg Ym9vbF90IG5vZGVfZm91bmQodW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50IHB4bSkKK3sK KyAgICByZXR1cm4gKCAocHhtMm5vZGVbaWR4XS5weG0gPT0gcHhtKSAmJgorICAgICAgICAocHht Mm5vZGVbaWR4XS5ub2RlICE9IE5VTUFfTk9fTk9ERSkgKTsKK30KKwordm9pZCByZXNldF9weG0y bm9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHB4bTJub2RlKTsgaSsrICkKKyAgICAgICAgcHhtMm5vZGVbaV0ubm9kZSA9 IE5VTUFfTk9fTk9ERTsKK30KKwordW5zaWduZWQgbm9kZV90b19weG0obm9kZWlkX3QgbikKK3sK KyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGlmICggKG4gPCBBUlJBWV9TSVpFKHB4bTJub2Rl KSkgJiYgKHB4bTJub2RlW25dLm5vZGUgPT0gbikgKQorICAgICAgICByZXR1cm4gcHhtMm5vZGVb bl0ucHhtOworCisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4bTJub2RlKTsgaSsr ICkKKyAgICAgICAgaWYgKCBweG0ybm9kZVtpXS5ub2RlID09IG4gKQorICAgICAgICAgICAgcmV0 dXJuIHB4bTJub2RlW2ldLnB4bTsKKworICAgIHJldHVybiAwOworfQorCitub2RlaWRfdCBweG1f dG9fbm9kZSh1bnNpZ25lZCBpbnQgcHhtKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg aWYgKCAocHhtIDwgQVJSQVlfU0laRShweG0ybm9kZSkpICYmIG5vZGVfZm91bmQocHhtLCBweG0p ICkKKyAgICAgICAgcmV0dXJuIHB4bTJub2RlW3B4bV0ubm9kZTsKKworICAgIGZvciAoIGkgPSAw OyBpIDwgQVJSQVlfU0laRShweG0ybm9kZSk7IGkrKyApCisgICAgICAgIGlmICggbm9kZV9mb3Vu ZChpLCBweG0pICkKKyAgICAgICAgICAgIHJldHVybiBweG0ybm9kZVtpXS5ub2RlOworCisgICAg cmV0dXJuIE5VTUFfTk9fTk9ERTsKK30KKworbm9kZWlkX3QgYWNwaV9zZXR1cF9ub2RlKHVuc2ln bmVkIGludCBweG0pCit7CisgICAgbm9kZWlkX3Qgbm9kZTsKKyAgICB1bnNpZ25lZCBpbnQgaWR4 OworICAgIHN0YXRpYyBib29sX3Qgd2FybmVkOworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9k ZXNfZm91bmQ7CisKKyAgICBCVUlMRF9CVUdfT04oTUFYX05VTU5PREVTID49IE5VTUFfTk9fTk9E RSk7CisKKyAgICBpZiAoIHB4bSA8IEFSUkFZX1NJWkUocHhtMm5vZGUpICkKKyAgICB7CisgICAg ICAgIGlmICggbm9kZV9mb3VuZChweG0sIHB4bSkgKQorICAgICAgICAgICAgcmV0dXJuIHB4bTJu b2RlW3B4bV0ubm9kZTsKKworICAgICAgICAvKiBUcnkgdG8gbWFpbnRhaW4gaW5kZXhpbmcgb2Yg cHhtMm5vZGUgYnkgcHhtICovCisgICAgICAgIGlmICggcHhtMm5vZGVbcHhtXS5ub2RlID09IE5V TUFfTk9fTk9ERSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlkeCA9IHB4bTsKKyAgICAgICAg ICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICggaWR4ID0gMDsg aWR4IDwgQVJSQVlfU0laRShweG0ybm9kZSk7IGlkeCsrICkKKyAgICAgICAgaWYgKCBweG0ybm9k ZVtpZHhdLm5vZGUgPT0gTlVNQV9OT19OT0RFICkKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOwor CisgICAgaWYgKCAhd2FybmVkICkKKyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcg IlNSQVQ6IFRvbyBtYW55IHByb3hpbWl0eSBkb21haW5zICglI3gpXG4iLCBweG0pOworICAgICAg ICB3YXJuZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiBOVU1BX05PX05PREU7CisKKyBmaW5p c2g6CisgICAgbm9kZSA9IG5vZGVzX2ZvdW5kKys7CisgICAgaWYgKCBub2RlID49IE1BWF9OVU1O T0RFUyApCisgICAgICAgIHJldHVybiBOVU1BX05PX05PREU7CisgICAgcHhtMm5vZGVbaWR4XS5w eG0gPSBweG07CisgICAgcHhtMm5vZGVbaWR4XS5ub2RlID0gbm9kZTsKKworICAgIHJldHVybiBu b2RlOworfQorCisvKgorICogQSBsb3Qgb2YgQklPUyBmaWxsIGluIDEwICg9IG5vIGRpc3RhbmNl KSBldmVyeXdoZXJlLiBUaGlzIG1lc3NlcworICogdXAgdGhlIE5VTUEgaGV1cmlzdGljcyB3aGlj aCB3YW50cyB0aGUgbG9jYWwgbm9kZSB0byBoYXZlIGEgc21hbGxlcgorICogZGlzdGFuY2UgdGhh biB0aGUgb3RoZXJzLgorICogRG8gc29tZSBxdWljayBjaGVja3MgaGVyZSBhbmQgb25seSB1c2Ug dGhlIFNMSVQgaWYgaXQgcGFzc2VzLgorICovCitzdGF0aWMgX19pbml0IGludCBzbGl0X3ZhbGlk KHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKnNsaXQpCit7CisgICAgaW50IGksIGo7CisgICAgaW50 IGQgPSBzbGl0LT5sb2NhbGl0eV9jb3VudDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgZDsgaSsr ICkKKyAgICB7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZDsgaisrICkKKyAgICAgICAgewor ICAgICAgICAgICAgdWludDhfdCB2YWwgPSBzbGl0LT5lbnRyeVtkICogaSArIGpdOworCisgICAg ICAgICAgICBpZiAoIGkgPT0gaiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg KCB2YWwgIT0gTE9DQUxfRElTVEFOQ0UgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZhbCA8PSBMT0NBTF9ESVNUQU5DRSApCisgICAgICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30K KworLyogQ2FsbGJhY2sgZm9yIFNMSVQgcGFyc2luZyAqLwordm9pZCBfX2luaXQgYWNwaV9udW1h X3NsaXRfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0KQoreworICAgIHVuc2lnbmVk IGxvbmcgbWZuOworCisgICAgaWYgKCAhc2xpdF92YWxpZChzbGl0KSApCisgICAgeworICAgICAg ICBwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBTTElUIHRhYmxlIGxvb2tzIGludmFsaWQuIE5vdCB1 c2VkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtZm4gPSBhbGxvY19ib290 X3BhZ2VzKFBGTl9VUChzbGl0LT5oZWFkZXIubGVuZ3RoKSwgMSk7CisgICAgaWYgKCAhbWZuICkK KyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQUNQSTogVW5hYmxlIHRvIGFsbG9jYXRl IG1lbW9yeSBmb3IgIgorICAgICAgICAgICAgICAgInNhdmluZyBBQ1BJIFNMSVQgbnVtYSBpbmZv cm1hdGlvbi5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFjcGlfc2xpdCA9IG1m bl90b192aXJ0KG1mbik7CisgICAgbWVtY3B5KGFjcGlfc2xpdCwgc2xpdCwgc2xpdC0+aGVhZGVy Lmxlbmd0aCk7Cit9CisKKy8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkg RG9tYWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwordm9pZCBfX2luaXQKK2FjcGlfbnVt YV9tZW1vcnlfYWZmaW5pdHlfaW5pdChjb25zdCBzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0 eSAqbWEpCit7CisgICAgdWludDY0X3Qgc3RhcnQsIGVuZDsKKyAgICB1bnNpZ25lZCBweG07Cisg ICAgbm9kZWlkX3Qgbm9kZTsKKyAgICBpbnQgaTsKKyAgICBzdHJ1Y3Qgbm9kZSAqbWVtYmxrOwor CisgICAgaWYgKCBzcmF0X2Rpc2FibGVkKCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo IG1hLT5oZWFkZXIubGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0 eSkgKQorICAgIHsKKyAgICAgICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIGlmICggIShtYS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfTUVNX0VOQUJMRUQpICkKKyAg ICAgICAgcmV0dXJuOworCisgICAgaWYgKCBnZXRfbnVtX25vZGVfbWVtYmxrcygpID49IE5SX05P REVfTUVNQkxLUyApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAg ICAgICAgICAgICAgICJUb28gbWFueSBudW1hIGVudHJ5LCB0cnkgYmlnZ2VyIE5SX05PREVfTUVN QkxLUyBcbiIpOworICAgICAgICBudW1hX2ZhaWxlZCgpOworICAgICAgICByZXR1cm47CisgICAg fQorCisgICAgc3RhcnQgPSBtYS0+YmFzZV9hZGRyZXNzOworICAgIGVuZCA9IHN0YXJ0ICsgbWEt Pmxlbmd0aDsKKyAgICBweG0gPSBtYS0+cHJveGltaXR5X2RvbWFpbjsKKyAgICBpZiAoIHNyYXRf cmV2IDwgMiApCisgICAgICAgIHB4bSAmPSAweGZmOworICAgIG5vZGUgPSBhY3BpX3NldHVwX25v ZGUocHhtKTsKKyAgICBpZiAoIG5vZGUgPT0gTlVNQV9OT19OT0RFICkKKyAgICB7CisgICAgICAg IG51bWFfZmFpbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBJdCBpcyBm aW5lIHRvIGFkZCB0aGlzIGFyZWEgdG8gdGhlIG5vZGVzIGRhdGEgaXQgd2lsbCBiZSB1c2VkIGxh dGVyKi8KKyAgICBpID0gY29uZmxpY3RpbmdfbWVtYmxrcyhzdGFydCwgZW5kKTsKKyAgICBpZiAo IGkgPCAwICkKKyAgICAgICAgLyogZXZlcnl0aGluZyBmaW5lICovOworICAgIGVsc2UgaWYgKCBn ZXRfbWVtYmxrX25vZGVpZChpKSA9PSBub2RlICkKKyAgICB7CisgICAgICAgIGJvb2xfdCBtaXNt YXRjaCA9ICEobWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFKSAhPQorICAg ICAgICAgICAgICAgICAgICAgICAgICAhdGVzdF9iaXQoaSwgbWVtYmxrX2hvdHBsdWcpOworCisg ICAgICAgIG1lbWJsayA9IGdldF9ub2RlX21lbWJsa19yYW5nZShpKTsKKworICAgICAgICBwcmlu dGsoIiVzU1JBVDogUFhNICV1ICglIlBSSXg2NCItJSJQUkl4NjQiKSBvdmVybGFwcyB3aXRoIGl0 c2VsZiAoJSJQUkl4NjQiLSUiUFJJeDY0IilcbiIsCisgICAgICAgICAgICAgICBtaXNtYXRjaCA/ IEtFUk5fRVJSIDogS0VSTl9XQVJOSU5HLCBweG0sIHN0YXJ0LCBlbmQsCisgICAgICAgICAgICAg ICBtZW1ibGstPnN0YXJ0LCBtZW1ibGstPmVuZCk7CisgICAgICAgIGlmICggbWlzbWF0Y2ggKQor ICAgICAgICB7CisgICAgICAgICAgICBudW1hX2ZhaWxlZCgpOworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWJsayA9IGdl dF9ub2RlX21lbWJsa19yYW5nZShpKTsKKworICAgICAgICBwcmludGsoS0VSTl9FUlIKKyAgICAg ICAgICAgICAgICJTUkFUOiBQWE0gJXUgKCUiUFJJeDY0Ii0lIlBSSXg2NCIpIG92ZXJsYXBzIHdp dGggUFhNICV1ICglIlBSSXg2NCItJSJQUkl4NjQiKVxuIiwKKyAgICAgICAgICAgICAgIHB4bSwg c3RhcnQsIGVuZCwgbm9kZV90b19weG0oZ2V0X21lbWJsa19ub2RlaWQoaSkpLAorICAgICAgICAg ICAgICAgbWVtYmxrLT5zdGFydCwgbWVtYmxrLT5lbmQpOworICAgICAgICBudW1hX2ZhaWxlZCgp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCAhKG1hLT5mbGFncyAmIEFDUElf U1JBVF9NRU1fSE9UX1BMVUdHQUJMRSkgKQorICAgIHsKKyAgICAgICAgc3RydWN0IG5vZGUgKm5k ID0gZ2V0X251bWFfbm9kZShub2RlKTsKKworICAgICAgICBpZiAoICFub2RlX3Rlc3RfYW5kX3Nl dChub2RlLCBtZW1vcnlfbm9kZXNfcGFyc2VkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5k LT5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgbmQtPmVuZCA9IGVuZDsKKyAgICAgICAgfQor ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggc3RhcnQgPCBuZC0+c3Rh cnQgKQorICAgICAgICAgICAgICAgIG5kLT5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgaWYg KCBuZC0+ZW5kIDwgZW5kICkKKyAgICAgICAgICAgICAgICBuZC0+ZW5kID0gZW5kOworICAgICAg ICB9CisgICAgfQorICAgIHByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICUi UFJJeDY0Ii0lIlBSSXg2NCIlc1xuIiwKKyAgICAgICAgICAgbm9kZSwgcHhtLCBzdGFydCwgZW5k LAorICAgICAgICAgICBtYS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfTUVNX0hPVF9QTFVHR0FCTEUgPyAi IChob3RwbHVnKSIgOiAiIik7CisKKyAgICBudW1hX2FkZF9tZW1ibGsobm9kZSwgc3RhcnQsIG1h LT5sZW5ndGgpOworICAgIGlmICggbWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dB QkxFICkKKyAgICB7CisgICAgICAgIF9fc2V0X2JpdChnZXRfbnVtX25vZGVfbWVtYmxrcygpLCBt ZW1ibGtfaG90cGx1Zyk7CisgICAgICAgIGlmICggZW5kID4gbWVtX2hvdHBsdWcgKQorICAgICAg ICAgICAgbWVtX2hvdHBsdWcgPSBlbmQ7CisgICAgfQorfQorCit1aW50OF90IGFjcGlfbm9kZV9k aXN0YW5jZShub2RlaWRfdCBhLCBub2RlaWRfdCBiKQoreworICAgIHVuc2lnbmVkIGluZGV4Owor ICAgIHVpbnQ4X3Qgc2xpdF92YWw7CisKKyAgICBpZiAoICFhY3BpX3NsaXQgKQorICAgICAgICBy ZXR1cm4gYSA9PSBiID8gTE9DQUxfRElTVEFOQ0UgOiBSRU1PVEVfRElTVEFOQ0U7CisKKyAgICBp bmRleCA9IGFjcGlfc2xpdC0+bG9jYWxpdHlfY291bnQgKiBub2RlX3RvX3B4bShhKTsKKyAgICBz bGl0X3ZhbCA9IGFjcGlfc2xpdC0+ZW50cnlbaW5kZXggKyBub2RlX3RvX3B4bShiKV07CisKKyAg ICAvKiBBQ1BJIGRlZmluZXMgMHhmZiBhcyBhbiB1bnJlYWNoYWJsZSBub2RlIGFuZCAwLTkgYXJl IHVuZGVmaW5lZCAqLworICAgIGlmICggKHNsaXRfdmFsID09IDB4ZmYpIHx8IChzbGl0X3ZhbCA8 PSA5KSApCisgICAgICAgIHJldHVybiBOVU1BX05PX0RJU1RBTkNFOworICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuIHNsaXRfdmFsOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9k ZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGlu ZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9p b21tdS5jCmluZGV4IGE1YzYxYzYuLmQ4ODI5NTEgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC9pb21tdS5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9p b21tdS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8eGVuL3BjaS5oPgogI2luY2x1ZGUg PHhlbi9wY2lfcmVncy5oPgogI2luY2x1ZGUgPHhlbi9rZXloYW5kbGVyLmg+CisjaW5jbHVkZSA8 YWNwaS9zcmF0Lmg+CiAjaW5jbHVkZSA8YXNtL21zaS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4K ICNpbmNsdWRlIDxhc20vaHZtL3ZteC92bXguaD4KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2Fj cGkvc3JhdC5oIGIveGVuL2luY2x1ZGUvYWNwaS9zcmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYzYzMGFlOQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL2Fj cGkvc3JhdC5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19YRU5fU1JBVF9IX18KKyNkZWZp bmUgX19YRU5fU1JBVF9IX18KKworZXh0ZXJuIGludCBzcmF0X3JldjsKK3N0cnVjdCBweG0ybm9k ZSB7CisgICAgdW5zaWduZWQgaW50IHB4bTsKKyAgICBub2RlaWRfdCBub2RlOworfTsKKworZXh0 ZXJuIG5vZGVpZF90IHB4bV90b19ub2RlKHVuc2lnbmVkIHB4bSk7CitleHRlcm4gbm9kZWlkX3Qg YWNwaV9zZXR1cF9ub2RlKHVuc2lnbmVkIHB4bSk7CitleHRlcm4gdW5zaWduZWQgaW50IG5vZGVf dG9fcHhtKG5vZGVpZF90IG4pOworZXh0ZXJuIHVpbnQ4X3QgYWNwaV9ub2RlX2Rpc3RhbmNlKG5v ZGVpZF90IGEsIG5vZGVpZF90IGIpOworZXh0ZXJuIHZvaWQgcmVzZXRfcHhtMm5vZGUodm9pZCk7 CisjZW5kaWYgLyogX19YRU5fU1JBVF9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoK KyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9tbS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCmluZGV4IGUy MjYwM2MuLmJlMGUwZDQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbW0uaAorKysg Yi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKQEAgLTQwNSw3ICs0MDUsNiBAQCBzdGF0aWMgaW5s aW5lIGludCBnZXRfcGFnZV9hbmRfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLAogaW50IGNo ZWNrX2Rlc2NyaXB0b3IoY29uc3Qgc3RydWN0IGRvbWFpbiAqLCBzdHJ1Y3QgZGVzY19zdHJ1Y3Qg KmQpOwogCiBleHRlcm4gYm9vbF90IG9wdF9hbGxvd19zdXBlcnBhZ2U7Ci1leHRlcm4gcGFkZHJf dCBtZW1faG90cGx1ZzsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogV2l0aCBzaGFkb3cg cGFnZXRhYmxlcywgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBhZGRyZXNzIHN0YXJ0IApkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L251 bWEuaAppbmRleCA3Y2ZmMjIwLi5kOGZhNjdjIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20t eDg2L251bWEuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaApAQCAtNyw4ICs3LDYg QEAKIAogdHlwZWRlZiB1aW50OF90IG5vZGVpZF90OwogCi1leHRlcm4gaW50IHNyYXRfcmV2Owot CiBleHRlcm4gbm9kZWlkX3QgICAgICBjcHVfdG9fbm9kZVtOUl9DUFVTXTsKIGV4dGVybiBjcHVt YXNrX3QgICAgIG5vZGVfdG9fY3B1bWFza1tdOwogCkBAIC0xNyw4ICsxNSw2IEBAIGV4dGVybiBj cHVtYXNrX3QgICAgIG5vZGVfdG9fY3B1bWFza1tdOwogI2RlZmluZSBub2RlX3RvX2ZpcnN0X2Nw dShub2RlKSAgKF9fZmZzKG5vZGVfdG9fY3B1bWFza1tub2RlXSkpCiAjZGVmaW5lIG5vZGVfdG9f Y3B1bWFzayhub2RlKSAgICAobm9kZV90b19jcHVtYXNrW25vZGVdKQogCi1leHRlcm4gbm9kZWlk X3QgcHhtX3RvX25vZGUodW5zaWduZWQgaW50IHB4bSk7Ci0KICNkZWZpbmUgWk9ORV9BTElHTiAo MVVMIDw8IChNQVhfT1JERVIrUEFHRV9TSElGVCkpCiAKIGV4dGVybiB2b2lkIG51bWFfYWRkX2Nw dShpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9tbS5oIGIveGVuL2luY2x1 ZGUveGVuL21tLmgKaW5kZXggODhkZTNjMS4uNjFkMDU5ZCAxMDA2NDQKLS0tIGEveGVuL2luY2x1 ZGUveGVuL21tLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL21tLmgKQEAgLTYzLDYgKzYzLDggQEAg VFlQRV9TQUZFKHVuc2lnbmVkIGxvbmcsIG1mbik7CiAjdW5kZWYgbWZuX3QKICNlbmRpZgogCitl eHRlcm4gcGFkZHJfdCBtZW1faG90cGx1ZzsKKwogc3RhdGljIGlubGluZSBtZm5fdCBtZm5fYWRk KG1mbl90IG1mbiwgdW5zaWduZWQgbG9uZyBpKQogewogICAgIHJldHVybiBfbWZuKG1mbl94KG1m bikgKyBpKTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9udW1hLmggYi94ZW4vaW5jbHVk ZS94ZW4vbnVtYS5oCmluZGV4IGI0MGE4NDEuLjg1MWY0YTcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNs dWRlL3hlbi9udW1hLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL251bWEuaApAQCAtMjUsNyArMjUs NiBAQCBleHRlcm4gaW50IGNvbXB1dGVfbWVtbm9kZV9zaGlmdChzdHJ1Y3Qgbm9kZSAqbm9kZXMs IGludCBudW1ub2RlcywKIGV4dGVybiB2b2lkIG51bWFfaW5pdF9hcnJheSh2b2lkKTsKIGV4dGVy biBib29sX3Qgc3JhdF9kaXNhYmxlZCh2b2lkKTsKIGV4dGVybiB2b2lkIG51bWFfc2V0X25vZGUo aW50IGNwdSwgbm9kZWlkX3Qgbm9kZSk7Ci1leHRlcm4gbm9kZWlkX3QgYWNwaV9zZXR1cF9ub2Rl KHVuc2lnbmVkIGludCBweG0pOwogZXh0ZXJuIHZvaWQgc3JhdF9kZXRlY3Rfbm9kZShpbnQgY3B1 KTsKIGV4dGVybiB2b2lkIHNldHVwX25vZGVfYm9vdG1lbShub2RlaWRfdCBub2RlaWQsIHBhZGRy X3Qgc3RhcnQsIHBhZGRyX3QgZW5kKTsKIGV4dGVybiB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9p ZCk7Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=