From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v3 09/24] NUMA: x86: Move common code from srat.c Date: Tue, 18 Jul 2017 17:11:31 +0530 Message-ID: <1500378106-2620-10-git-send-email-vijay.kilari@gmail.com> References: <1500378106-2620-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: <1500378106-2620-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: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@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 RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBjb2Rl IGZyb20geGVuL2FyY2gveDg2L3NyYXQuYyB0byB4ZW4vY29tbW9uL251bWEuYwpzbyB0aGF0IGl0 IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFyY2hzLgoKQXBhcnQgZnJvbSBtb3ZpbmcgdGhlIGNvZGUg dGhlIGZvbGxvd2luZyBjaGFuZ2VzIGFyZSBkb25lCiAtIENvZGluZyBzdHlsZSBvZiBjb2RlIG1v dmVkIHRvIG51bWEuYyBpcyBjaGFuZ2VkIHRvIHhlbiBzdHlsZQogLSB7bWVtb3J5LHByb2Nlc3Nv cn1fbm9kZXNfcGFyc2VkIGFyZSBtYWRlIGdsb2JhbCBhbmQgbW92ZWQKICAgdG8geGVuL25vZGVt YXNrLmgKIC0gRmV3IGdlbmVyaWMgc3RhdGljIGZ1bmN0aW9ucyBpbiB4ODYvc3JhdC5jIGFyZSBt YWRlCiAgIG5vbi1zdGF0aWMKIC0gRnVuY3Rpb25zIG1vdmVkIGZyb20geDg1L3NyYXQuYyB0byBj b21tb24vbnVtYS5jIGFyZSBtYWRlCiAgIG5vbi1zdGF0aWMKIC0gbnVtYV9zY2FuX25vZGVzKCkg aXMgbWFkZSBhcyBzdGF0aWMgZnVuY3Rpb24KIC0gY29tcHV0ZV9tZW1ub2RlX3NoaWZ0KCkgYW5k IHNldHVwX25vZGVfYm9vdG1lbSgpIGFyZSBtYWRlCiAgIHN0YXRpYy4KCkFsc28ge21lbW9yeSxw cm9jZXNzb3J9X25vZGVzX3BhcnNlZCBhcmUgbWFkZSBhcyBnbG9iYWwuClRoZXNlIGFyZSB1c2Vk IGFjcm9zcyBtdWx0aXBsZSBjb2RlIGZpbGVzLiBBZGRpbmcgaGVscGVycwp0byBhY2Nlc3MgdGhl c2Ugbm9kZW1hc2tfdCBpcyBjb21wbGV4LgoKU2lnbmVkLW9mZi1ieTogVmlqYXlhIEt1bWFyIEsg PFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgotLS0KdjM6IC0gTW92ZSBkZWNsYXJhdGlvbiBvZiB7 bWVtb3J5LHByb2Nlc3Nvcn1fbm9kZXNfcGFyc2VkIHRvIGhlYWRlcgogICAgICBmaWxlCiAgICAt IERyb3AgcmVkdW5kYW50IGdldF9tZW1ibGsoKSBkZWNsYXJhdGlvbgogICAgLSBudW1hX3NjYW5f bm9kZXMoKSwgc2V0dXBfbm9kZV9ib290bWVtKCksIGNvbXB1dGVfbWVtbm9kZV9zaGlmdCgpCiAg ICAgIGFyZSBtYWRlIGFzIHN0YXRpYyBmdW5jdGlvbgotLS0KIHhlbi9hcmNoL3g4Ni9zcmF0LmMg ICAgICAgIHwgMTUxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4 ZW4vY29tbW9uL251bWEuYyAgICAgICAgICB8IDE2NSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oIHwgICAyIC0K IHhlbi9pbmNsdWRlL2FzbS14ODYvbnVtYS5oIHwgICAyIC0KIHhlbi9pbmNsdWRlL3hlbi9ub2Rl bWFzay5oIHwgICAyICsKIHhlbi9pbmNsdWRlL3hlbi9udW1hLmggICAgIHwgIDEzICsrLS0KIDYg ZmlsZXMgY2hhbmdlZCwgMTc0IGluc2VydGlvbnMoKyksIDE2MSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvc3JhdC5jIGIveGVuL2FyY2gveDg2L3NyYXQuYwppbmRleCAw M2JjMzdkLi5iZTI2MzRhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvc3JhdC5jCisrKyBiL3hl bi9hcmNoL3g4Ni9zcmF0LmMKQEAgLTIzLDEwICsyMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWNw aV90YWJsZV9zbGl0ICpfX3JlYWRfbW9zdGx5IGFjcGlfc2xpdDsKIAotc3RhdGljIG5vZGVtYXNr X3QgX19pbml0ZGF0YSBtZW1vcnlfbm9kZXNfcGFyc2VkOwotc3RhdGljIG5vZGVtYXNrX3QgX19p bml0ZGF0YSBwcm9jZXNzb3Jfbm9kZXNfcGFyc2VkOwotc3RhdGljIHN0cnVjdCBub2RlIF9faW5p dGRhdGEgbm9kZXNbTUFYX05VTU5PREVTXTsKLQogc3RydWN0IHB4bTJub2RlIHsKIAl1bnNpZ25l ZCBpbnQgcHhtOwogCW5vZGVpZF90IG5vZGU7CkBAIC0zNiw0OSArMzIsOCBAQCBzdGF0aWMgc3Ry dWN0IHB4bTJub2RlIF9fcmVhZF9tb3N0bHkgcHhtMm5vZGVbTUFYX05VTU5PREVTXSA9CiAKIHN0 YXRpYyB1bnNpZ25lZCBpbnQgbm9kZV90b19weG0obm9kZWlkX3Qgbik7CiAKLXN0YXRpYyBpbnQg bnVtX25vZGVfbWVtYmxrczsKLXN0YXRpYyBzdHJ1Y3Qgbm9kZSBub2RlX21lbWJsa19yYW5nZVtO Ul9OT0RFX01FTUJMS1NdOwotc3RhdGljIG5vZGVpZF90IG1lbWJsa19ub2RlaWRbTlJfTk9ERV9N RU1CTEtTXTsKIHN0YXRpYyBfX2luaXRkYXRhIERFQ0xBUkVfQklUTUFQKG1lbWJsa19ob3RwbHVn LCBOUl9OT0RFX01FTUJMS1MpOwogCi1zdGF0aWMgc3RydWN0IG5vZGUgKmdldF9udW1hX25vZGUo dW5zaWduZWQgaW50IGlkKQotewotCXJldHVybiAmbm9kZXNbaWRdOwotfQotCi1zdGF0aWMgbm9k ZWlkX3QgZ2V0X21lbWJsa19ub2RlaWQodW5zaWduZWQgaW50IGlkKQotewotCXJldHVybiBtZW1i bGtfbm9kZWlkW2lkXTsKLX0KLQotc3RhdGljIG5vZGVpZF90ICpnZXRfbWVtYmxrX25vZGVpZF9t YXAodm9pZCkKLXsKLQlyZXR1cm4gJm1lbWJsa19ub2RlaWRbMF07Ci19Ci0KLXN0YXRpYyBzdHJ1 Y3Qgbm9kZSAqZ2V0X25vZGVfbWVtYmxrX3JhbmdlKHVuc2lnbmVkIGludCBtZW1ibGspCi17Ci0J cmV0dXJuICZub2RlX21lbWJsa19yYW5nZVttZW1ibGtdOwotfQotCi1zdGF0aWMgaW50IGdldF9u dW1fbm9kZV9tZW1ibGtzKHZvaWQpCi17Ci0JcmV0dXJuIG51bV9ub2RlX21lbWJsa3M7Ci19Ci0K LXN0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsayhub2RlaWRfdCBub2RlaWQsIHBhZGRy X3Qgc3RhcnQsIHVpbnQ2NF90IHNpemUpCi17Ci0JaWYgKG5vZGVpZCA+PSBOUl9OT0RFX01FTUJM S1MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm9kZV9tZW1ibGtfcmFuZ2VbbnVtX25vZGVfbWVt Ymxrc10uc3RhcnQgPSBzdGFydDsKLQlub2RlX21lbWJsa19yYW5nZVtudW1fbm9kZV9tZW1ibGtz XS5lbmQgPSBzdGFydCArIHNpemU7Ci0JbWVtYmxrX25vZGVpZFtudW1fbm9kZV9tZW1ibGtzXSA9 IG5vZGVpZDsKLQludW1fbm9kZV9tZW1ibGtzKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGlj IGlubGluZSBib29sIG5vZGVfZm91bmQodW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50IHB4 bSkKIHsKIAlyZXR1cm4gKChweG0ybm9kZVtpZHhdLnB4bSA9PSBweG0pICYmCkBAIC0xNDksNTQg KzEwNCw3IEBAIG5vZGVpZF90IGFjcGlfc2V0dXBfbm9kZSh1bnNpZ25lZCBpbnQgcHhtKQogCXJl dHVybiBub2RlOwogfQogCi1pbnQgdmFsaWRfbnVtYV9yYW5nZShwYWRkcl90IHN0YXJ0LCBwYWRk cl90IGVuZCwgbm9kZWlkX3Qgbm9kZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBn ZXRfbnVtX25vZGVfbWVtYmxrcygpOyBpKyspIHsKLQkJc3RydWN0IG5vZGUgKm5kID0gZ2V0X25v ZGVfbWVtYmxrX3JhbmdlKGkpOwotCi0JCWlmIChuZC0+c3RhcnQgPD0gc3RhcnQgJiYgbmQtPmVu ZCA+IGVuZCAmJgotCQkJZ2V0X21lbWJsa19ub2RlaWQoaSkgPT0gbm9kZSkKLQkJCXJldHVybiAx OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjb25mbGljdGluZ19t ZW1ibGtzKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKQotewotCWludCBpOwotCi0JZm9yIChp ID0gMDsgaSA8IGdldF9udW1fbm9kZV9tZW1ibGtzKCk7IGkrKykgewotCQlzdHJ1Y3Qgbm9kZSAq bmQgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoaSk7Ci0JCWlmIChuZC0+c3RhcnQgPT0gbmQtPmVu ZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobmQtPmVuZCA+IHN0YXJ0ICYmIG5kLT5zdGFydCA8IGVu ZCkKLQkJCXJldHVybiBpOwotCQlpZiAobmQtPmVuZCA9PSBlbmQgJiYgbmQtPnN0YXJ0ID09IHN0 YXJ0KQotCQkJcmV0dXJuIGk7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgX19p bml0IGN1dG9mZl9ub2RlKG5vZGVpZF90IGksIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKQot ewotCXN0cnVjdCBub2RlICpuZCA9IGdldF9udW1hX25vZGUoaSk7Ci0KLQlpZiAobmQtPnN0YXJ0 IDwgc3RhcnQpIHsKLQkJbmQtPnN0YXJ0ID0gc3RhcnQ7Ci0JCWlmIChuZC0+ZW5kIDwgbmQtPnN0 YXJ0KQotCQkJbmQtPnN0YXJ0ID0gbmQtPmVuZDsKLQl9Ci0JaWYgKG5kLT5lbmQgPiBlbmQpIHsK LQkJbmQtPmVuZCA9IGVuZDsKLQkJaWYgKG5kLT5zdGFydCA+IG5kLT5lbmQpCi0JCQluZC0+c3Rh cnQgPSBuZC0+ZW5kOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG51bWFfZmFpbGVkKHZv aWQpCit2b2lkIF9faW5pdCBudW1hX2ZhaWxlZCh2b2lkKQogewogCWludCBpOwogCXByaW50ayhL RVJOX0VSUiAiU1JBVDogU1JBVCBub3QgdXNlZC5cbiIpOwpAQCAtNDEyLDcgKzMyMCw3IEBAIGFj cGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdChjb25zdCBzdHJ1Y3QgYWNwaV9zcmF0X21lbV9h ZmZpbml0eSAqbWEpCiAKIC8qIFNhbml0eSBjaGVjayB0byBjYXRjaCBtb3JlIGJhZCBTUkFUcyAo dGhleSBhcmUgYW1hemluZ2x5IGNvbW1vbikuCiAgICBNYWtlIHN1cmUgdGhlIFBYTXMgY292ZXIg YWxsIG1lbW9yeS4gKi8KLXN0YXRpYyBib29sIF9faW5pdCBhcmNoX3Nhbml0aXplX25vZGVzX21l bW9yeSh2b2lkKQorYm9vbCBfX2luaXQgYXJjaF9zYW5pdGl6ZV9ub2Rlc19tZW1vcnkodm9pZCkK IHsKIAlpbnQgaTsKIApAQCAtNTA5LDYxICs0MTcsNiBAQCB2b2lkIF9faW5pdCBzcmF0X3BhcnNl X3JlZ2lvbnMocGFkZHJfdCBhZGRyKQogCXBmbl9wZHhfaG9sZV9zZXR1cChtYXNrID4+IFBBR0Vf U0hJRlQpOwogfQogCi0vKiBVc2UgdGhlIGluZm9ybWF0aW9uIGRpc2NvdmVyZWQgYWJvdmUgdG8g YWN0dWFsbHkgc2V0IHVwIHRoZSBub2Rlcy4gKi8KLWludCBfX2luaXQgbnVtYV9zY2FuX25vZGVz KHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKQotewotCXVuc2lnbmVkIGludCBpOwotCW5vZGVt YXNrX3QgYWxsX25vZGVzX3BhcnNlZDsKLQlzdHJ1Y3Qgbm9kZSAqbWVtYmxrczsKLQlub2RlaWRf dCAqbm9kZWlkczsKLQotCS8qIEZpcnN0IGNsZWFuIHVwIHRoZSBub2RlIGxpc3QgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCi0JCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBl bmQpOwotCi0JaWYgKGFjcGlfbnVtYSA8PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoIWFyY2hf c2FuaXRpemVfbm9kZXNfbWVtb3J5KCkpIHsKLQkJbnVtYV9mYWlsZWQoKTsKLQkJcmV0dXJuIC0x OwotCX0KLQotCW1lbWJsa3MgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoMCk7Ci0Jbm9kZWlkcyA9 IGdldF9tZW1ibGtfbm9kZWlkX21hcCgpOwotCWlmIChjb21wdXRlX21lbW5vZGVfc2hpZnQobm9k ZV9tZW1ibGtfcmFuZ2UsIG51bV9ub2RlX21lbWJsa3MsCi0JCQkJICBtZW1ibGtfbm9kZWlkKSkg ewotCQltZW1ub2RlX3NoaWZ0ID0gMDsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgIlNSQVQ6 IE5vIE5VTUEgbm9kZSBoYXNoIGZ1bmN0aW9uIGZvdW5kLiBDb250YWN0IG1haW50YWluZXJcbiIp OwotCQludW1hX2ZhaWxlZCgpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jbm9kZXNfb3IoYWxsX25v ZGVzX3BhcnNlZCwgbWVtb3J5X25vZGVzX3BhcnNlZCwgcHJvY2Vzc29yX25vZGVzX3BhcnNlZCk7 Ci0KLQkvKiBGaW5hbGx5IHJlZ2lzdGVyIG5vZGVzICovCi0JZm9yX2VhY2hfbm9kZV9tYXNrKGks IGFsbF9ub2Rlc19wYXJzZWQpCi0JewotCQlzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRfbnVtYV9ub2Rl KGkpOwotCQl1aW50NjRfdCBzaXplID0gbmQtPmVuZCAtIG5kLT5zdGFydDsKLQotCQlpZiAoIHNp emUgPT0gMCApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJTUkFUOiBOb2RlICV1IGhhcyBubyBt ZW1vcnkuICIKLQkJCSAgICAgICAiQklPUyBCdWcgb3IgbWlzLWNvbmZpZ3VyZWQgaGFyZHdhcmU/ XG4iLCBpKTsKLQotCQlzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsK LQl9Ci0JZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykgewotCQlpZiAoY3B1X3RvX25v ZGVbaV0gPT0gTlVNQV9OT19OT0RFKQotCQkJY29udGludWU7Ci0JCWlmICghbm9kZV9pc3NldChj cHVfdG9fbm9kZVtpXSwgcHJvY2Vzc29yX25vZGVzX3BhcnNlZCkpCi0JCQludW1hX3NldF9ub2Rl KGksIE5VTUFfTk9fTk9ERSk7Ci0JfQotCW51bWFfaW5pdF9hcnJheSgpOwotCXJldHVybiAwOwot fQotCiBzdGF0aWMgdW5zaWduZWQgaW50IG5vZGVfdG9fcHhtKG5vZGVpZF90IG4pCiB7CiAJdW5z aWduZWQgaW50IGk7CmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL251bWEuYyBiL3hlbi9jb21tb24v bnVtYS5jCmluZGV4IDAzODFmMWIuLjc0YzQ2OTcgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vbnVt YS5jCisrKyBiL3hlbi9jb21tb24vbnVtYS5jCkBAIC01NCwxMiArNTQsMTA5IEBAIGNwdW1hc2tf dCBfX3JlYWRfbW9zdGx5IG5vZGVfdG9fY3B1bWFza1tNQVhfTlVNTk9ERVNdOwogCiBib29sIG51 bWFfb2ZmOwogczggYWNwaV9udW1hID0gMDsKK25vZGVtYXNrX3QgX19pbml0ZGF0YSBtZW1vcnlf bm9kZXNfcGFyc2VkOworbm9kZW1hc2tfdCBfX2luaXRkYXRhIHByb2Nlc3Nvcl9ub2Rlc19wYXJz ZWQ7CitzdGF0aWMgc3RydWN0IG5vZGUgX19pbml0ZGF0YSBub2Rlc1tNQVhfTlVNTk9ERVNdOwor c3RhdGljIGludCBudW1fbm9kZV9tZW1ibGtzOworc3RhdGljIHN0cnVjdCBub2RlIG5vZGVfbWVt YmxrX3JhbmdlW05SX05PREVfTUVNQkxLU107CitzdGF0aWMgbm9kZWlkX3QgbWVtYmxrX25vZGVp ZFtOUl9OT0RFX01FTUJMS1NdOwogCiBpbnQgc3JhdF9kaXNhYmxlZCh2b2lkKQogewogICAgIHJl dHVybiBudW1hX29mZiB8fCBhY3BpX251bWEgPCAwOwogfQogCitzdHJ1Y3Qgbm9kZSAqZ2V0X251 bWFfbm9kZSh1bnNpZ25lZCBpbnQgaWQpCit7CisgICAgcmV0dXJuICZub2Rlc1tpZF07Cit9CisK K25vZGVpZF90IGdldF9tZW1ibGtfbm9kZWlkKHVuc2lnbmVkIGludCBpZCkKK3sKKyAgICByZXR1 cm4gbWVtYmxrX25vZGVpZFtpZF07Cit9CisKK3N0YXRpYyBub2RlaWRfdCAqZ2V0X21lbWJsa19u b2RlaWRfbWFwKHZvaWQpCit7CisgICAgcmV0dXJuICZtZW1ibGtfbm9kZWlkWzBdOworfQorCitz dHJ1Y3Qgbm9kZSAqZ2V0X25vZGVfbWVtYmxrX3JhbmdlKHVuc2lnbmVkIGludCBtZW1ibGspCit7 CisgICAgcmV0dXJuICZub2RlX21lbWJsa19yYW5nZVttZW1ibGtdOworfQorCitpbnQgZ2V0X251 bV9ub2RlX21lbWJsa3Modm9pZCkKK3sKKyAgICByZXR1cm4gbnVtX25vZGVfbWVtYmxrczsKK30K KworaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsobm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0 YXJ0LCB1aW50NjRfdCBzaXplKQoreworICAgIGlmICggbm9kZWlkID49IE5SX05PREVfTUVNQkxL UyApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgbm9kZV9tZW1ibGtfcmFuZ2VbbnVt X25vZGVfbWVtYmxrc10uc3RhcnQgPSBzdGFydDsKKyAgICBub2RlX21lbWJsa19yYW5nZVtudW1f bm9kZV9tZW1ibGtzXS5lbmQgPSBzdGFydCArIHNpemU7CisgICAgbWVtYmxrX25vZGVpZFtudW1f bm9kZV9tZW1ibGtzXSA9IG5vZGVpZDsKKyAgICBudW1fbm9kZV9tZW1ibGtzKys7CisKKyAgICBy ZXR1cm4gMDsKK30KKworaW50IHZhbGlkX251bWFfcmFuZ2UocGFkZHJfdCBzdGFydCwgcGFkZHJf dCBlbmQsIG5vZGVpZF90IG5vZGUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKCBpID0gMDsg aSA8IGdldF9udW1fbm9kZV9tZW1ibGtzKCk7IGkrKyApCisgICAgeworICAgICAgICBzdHJ1Y3Qg bm9kZSAqbmQgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoaSk7CisKKyAgICAgICAgaWYgKCBuZC0+ c3RhcnQgPD0gc3RhcnQgJiYgbmQtPmVuZCA+IGVuZCAmJgorICAgICAgICAgICAgIGdldF9tZW1i bGtfbm9kZWlkKGkpID09IG5vZGUgKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgY29uZmxpY3RpbmdfbWVtYmxrcyhwYWRkcl90 IHN0YXJ0LCBwYWRkcl90IGVuZCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoIGkgPSAwOyBp IDwgZ2V0X251bV9ub2RlX21lbWJsa3MoKTsgaSsrICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBu b2RlICpuZCA9IGdldF9ub2RlX21lbWJsa19yYW5nZShpKTsKKworICAgICAgICBpZiAoIG5kLT5z dGFydCA9PSBuZC0+ZW5kICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIG5k LT5lbmQgPiBzdGFydCAmJiBuZC0+c3RhcnQgPCBlbmQgKQorICAgICAgICAgICAgcmV0dXJuIGk7 CisgICAgICAgIGlmICggbmQtPmVuZCA9PSBlbmQgJiYgbmQtPnN0YXJ0ID09IHN0YXJ0ICkKKyAg ICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGlj IHZvaWQgX19pbml0IGN1dG9mZl9ub2RlKG5vZGVpZF90IGksIHBhZGRyX3Qgc3RhcnQsIHBhZGRy X3QgZW5kKQoreworICAgIHN0cnVjdCBub2RlICpuZCA9IGdldF9udW1hX25vZGUoaSk7CisKKyAg ICBpZiAoIG5kLT5zdGFydCA8IHN0YXJ0ICkKKyAgICB7CisgICAgICAgIG5kLT5zdGFydCA9IHN0 YXJ0OworICAgICAgICBpZiAoIG5kLT5lbmQgPCBuZC0+c3RhcnQgKQorICAgICAgICAgICAgbmQt PnN0YXJ0ID0gbmQtPmVuZDsKKyAgICB9CisgICAgaWYgKCBuZC0+ZW5kID4gZW5kICkKKyAgICB7 CisgICAgICAgIG5kLT5lbmQgPSBlbmQ7CisgICAgICAgIGlmICggbmQtPnN0YXJ0ID4gbmQtPmVu ZCApCisgICAgICAgICAgICBuZC0+c3RhcnQgPSBuZC0+ZW5kOworICAgIH0KK30KKwogLyoKICAq IEdpdmVuIGEgc2hpZnQgdmFsdWUsIHRyeSB0byBwb3B1bGF0ZSBtZW1ub2RlbWFwW10KICAqIFJl dHVybnMgOgpAQCAtMTU0LDggKzI1MSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGV4 dHJhY3RfbHNiX2Zyb21fbm9kZXMoY29uc3Qgc3RydWN0IG5vZGUgKm5vZGVzLAogICAgIHJldHVy biBpOwogfQogCi1pbnQgX19pbml0IGNvbXB1dGVfbWVtbm9kZV9zaGlmdChzdHJ1Y3Qgbm9kZSAq bm9kZXMsIHVuc2lnbmVkIGludCBudW1ub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5vZGVpZF90ICpub2RlaWRzKQorc3RhdGljIGludCBfX2luaXQgY29tcHV0ZV9tZW1u b2RlX3NoaWZ0KHN0cnVjdCBub2RlICpub2RlcywgdW5zaWduZWQgaW50IG51bW5vZGVzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVpZF90ICpub2RlaWRzKQog ewogICAgIGludCByZXQ7CiAKQEAgLTE4MCw3ICsyNzcsOCBAQCBpbnQgX19pbml0IGNvbXB1dGVf bWVtbm9kZV9zaGlmdChzdHJ1Y3Qgbm9kZSAqbm9kZXMsIHVuc2lnbmVkIGludCBudW1ub2RlcywK ICAgICByZXR1cm4gMDsKIH0KIC8qIGluaXRpYWxpemUgTk9ERV9EQVRBIGdpdmVuIG5vZGVpZCBh bmQgc3RhcnQvZW5kICovCi12b2lkIF9faW5pdCBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qg bm9kZWlkLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBz ZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0YXJ0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkcl90IGVuZCkKIHsKICAgICB1bnNp Z25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIApAQCAtMTkzLDcgKzI5MSw3IEBAIHZvaWQg X19pbml0IHNldHVwX25vZGVfYm9vdG1lbShub2RlaWRfdCBub2RlaWQsIHBhZGRyX3Qgc3RhcnQs IHBhZGRyX3QgZW5kKQogICAgIG5vZGVfc2V0X29ubGluZShub2RlaWQpOwogfQogCi12b2lkIF9f aW5pdCBudW1hX2luaXRfYXJyYXkodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBudW1hX2luaXRf YXJyYXkodm9pZCkKIHsKICAgICBpbnQgcnIsIGk7CiAKQEAgLTIxNCw2ICszMTIsNjUgQEAgdm9p ZCBfX2luaXQgbnVtYV9pbml0X2FycmF5KHZvaWQpCiAgICAgfQogfQogCisvKiBVc2UgdGhlIGlu Zm9ybWF0aW9uIGRpc2NvdmVyZWQgYWJvdmUgdG8gYWN0dWFsbHkgc2V0IHVwIHRoZSBub2Rlcy4g Ki8KK3N0YXRpYyBpbnQgX19pbml0IG51bWFfc2Nhbl9ub2RlcyhwYWRkcl90IHN0YXJ0LCBwYWRk cl90IGVuZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBub2RlbWFza190IGFsbF9ub2Rl c19wYXJzZWQ7CisgICAgc3RydWN0IG5vZGUgKm1lbWJsa3M7CisgICAgbm9kZWlkX3QgKm5vZGVp ZHM7CisKKyAgICAvKiBGaXJzdCBjbGVhbiB1cCB0aGUgbm9kZSBsaXN0ICovCisgICAgZm9yICgg aSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKyApCisgICAgICAgIGN1dG9mZl9ub2RlKGksIHN0 YXJ0LCBlbmQpOworCisgICAgaWYgKCBhY3BpX251bWEgPD0gMCApCisgICAgICAgIHJldHVybiAt MTsKKworICAgIGlmICggIWFyY2hfc2FuaXRpemVfbm9kZXNfbWVtb3J5KCkgKQorICAgIHsKKyAg ICAgICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1l bWJsa3MgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoMCk7CisgICAgbm9kZWlkcyA9IGdldF9tZW1i bGtfbm9kZWlkX21hcCgpOworICAgIGlmICggY29tcHV0ZV9tZW1ub2RlX3NoaWZ0KG5vZGVfbWVt YmxrX3JhbmdlLCBudW1fbm9kZV9tZW1ibGtzLAorICAgICAgICAgICAgICAgICAgbWVtYmxrX25v ZGVpZCkgKQorICAgIHsKKyAgICAgICAgbWVtbm9kZV9zaGlmdCA9IDA7CisgICAgICAgIHByaW50 ayhLRVJOX0VSUgorICAgICAgICAgICAgICAgIlNSQVQ6IE5vIE5VTUEgbm9kZSBoYXNoIGZ1bmN0 aW9uIGZvdW5kLiBDb250YWN0IG1haW50YWluZXJcbiIpOworICAgICAgICBudW1hX2ZhaWxlZCgp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbm9kZXNfb3IoYWxsX25vZGVzX3Bh cnNlZCwgbWVtb3J5X25vZGVzX3BhcnNlZCwgcHJvY2Vzc29yX25vZGVzX3BhcnNlZCk7CisKKyAg ICAvKiBGaW5hbGx5IHJlZ2lzdGVyIG5vZGVzICovCisgICAgZm9yX2VhY2hfbm9kZV9tYXNrKGks IGFsbF9ub2Rlc19wYXJzZWQpCisgICAgeworICAgICAgICBzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRf bnVtYV9ub2RlKGkpOworICAgICAgICB1aW50NjRfdCBzaXplID0gbmQtPmVuZCAtIG5kLT5zdGFy dDsKKworICAgICAgICBpZiAoIHNpemUgPT0gMCApCisgICAgICAgICAgICBwcmludGsoS0VSTl9X QVJOSU5HICJTUkFUOiBOb2RlICV1IGhhcyBubyBtZW1vcnkuICIKKyAgICAgICAgICAgICAgICAg ICAiQklPUyBCdWcgb3IgbWlzLWNvbmZpZ3VyZWQgaGFyZHdhcmU/XG4iLCBpKTsKKworICAgICAg ICBzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKyAgICB9CisKKyAg ICBmb3IgKCBpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKyApCisgICAgeworICAgICAgICBpZiAo Y3B1X3RvX25vZGVbaV0gPT0gTlVNQV9OT19OT0RFKQorICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIGlmICghbm9kZV9pc3NldChjcHVfdG9fbm9kZVtpXSwgcHJvY2Vzc29yX25vZGVzX3Bh cnNlZCkpCisgICAgICAgICAgICBudW1hX3NldF9ub2RlKGksIE5VTUFfTk9fTk9ERSk7CisgICAg fQorICAgIG51bWFfaW5pdF9hcnJheSgpOworICAgIHJldHVybiAwOworfQorCiAjaWZkZWYgQ09O RklHX05VTUFfRU1VCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbnVtYV9mYWtlOwog CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2FjcGkuaCBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvYWNwaS5oCmluZGV4IGE2NWM4NWYuLjU5YzM0ZTcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNs dWRlL2FzbS14ODYvYWNwaS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCkBAIC0x MDMsOCArMTAzLDYgQEAgZXh0ZXJuIHZvaWQgYWNwaV9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CiAK ICNkZWZpbmUgQVJDSF9IQVNfUE9XRVJfSU5JVAkxCiAKLWV4dGVybiBpbnQgbnVtYV9zY2FuX25v ZGVzKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKTsKLQogI2lmZGVmIENPTkZJR19BQ1BJX1NM RUVQCiAKIGV4dGVybiBzdHJ1Y3QgYWNwaV9zbGVlcF9pbmZvIGFjcGlfc2luZm87CmRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbnVt YS5oCmluZGV4IDQxYmIzZWYuLmQ4YTBhNDQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14 ODYvbnVtYS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbnVtYS5oCkBAIC0xNyw4ICsxNyw2 IEBAIGV4dGVybiB2b2lkIHNyYXRfZGV0ZWN0X25vZGUoaW50IGNwdSk7CiBleHRlcm4gbm9kZWlk X3QgYXBpY2lkX3RvX25vZGVbXTsKIGV4dGVybiB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9pZCk7 CiAKLWV4dGVybiBpbnQgdmFsaWRfbnVtYV9yYW5nZShwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVu ZCwgbm9kZWlkX3Qgbm9kZSk7Ci0KIHZvaWQgc3JhdF9wYXJzZV9yZWdpb25zKHBhZGRyX3QgYWRk cik7CiBleHRlcm4gdWludDhfdCBfX25vZGVfZGlzdGFuY2Uobm9kZWlkX3QgYSwgbm9kZWlkX3Qg Yik7CiB1bnNpZ25lZCBpbnQgYXJjaF9nZXRfZG1hX2JpdHNpemUodm9pZCk7CmRpZmYgLS1naXQg YS94ZW4vaW5jbHVkZS94ZW4vbm9kZW1hc2suaCBiL3hlbi9pbmNsdWRlL3hlbi9ub2RlbWFzay5o CmluZGV4IDJhOTBkYzEuLmM1MmMxMTAgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9ub2Rl bWFzay5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9ub2RlbWFzay5oCkBAIC04MCw2ICs4MCw4IEBA CiAKIHR5cGVkZWYgc3RydWN0IHsgREVDTEFSRV9CSVRNQVAoYml0cywgTUFYX05VTU5PREVTKTsg fSBub2RlbWFza190OwogZXh0ZXJuIG5vZGVtYXNrX3QgX3VudXNlZF9ub2RlbWFza19hcmdfOwor ZXh0ZXJuIG5vZGVtYXNrX3QgcHJvY2Vzc29yX25vZGVzX3BhcnNlZDsKK2V4dGVybiBub2RlbWFz a190IG1lbW9yeV9ub2Rlc19wYXJzZWQ7CiAKICNkZWZpbmUgbm9kZV9zZXQobm9kZSwgZHN0KSBf X25vZGVfc2V0KChub2RlKSwgJihkc3QpKQogc3RhdGljIGlubGluZSB2b2lkIF9fbm9kZV9zZXQo aW50IG5vZGUsIHZvbGF0aWxlIG5vZGVtYXNrX3QgKmRzdHApCmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS94ZW4vbnVtYS5oIGIveGVuL2luY2x1ZGUveGVuL251bWEuaAppbmRleCBjNmJiYmRmLi4x MTBkNWRjIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vbnVtYS5oCisrKyBiL3hlbi9pbmNs dWRlL3hlbi9udW1hLmgKQEAgLTI2LDExICsyNiw4IEBAIGV4dGVybiBib29sIG51bWFfb2ZmOwog ZXh0ZXJuIHM4IGFjcGlfbnVtYTsKIAogdm9pZCBudW1hX2luaXRtZW1faW5pdCh1bnNpZ25lZCBs b25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKLWludCBjb21wdXRlX21lbW5v ZGVfc2hpZnQoc3RydWN0IG5vZGUgKm5vZGVzLCB1bnNpZ25lZCBpbnQgbnVtbm9kZXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIG5vZGVpZF90ICpub2RlaWRzKTsKIGludCBzcmF0X2Rpc2Fi bGVkKHZvaWQpOwotdm9pZCBudW1hX2luaXRfYXJyYXkodm9pZCk7Ci12b2lkIHNldHVwX25vZGVf Ym9vdG1lbShub2RlaWRfdCBub2RlaWQsIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKTsKK2lu dCB2YWxpZF9udW1hX3JhbmdlKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kLCBub2RlaWRfdCBu b2RlKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAjZGVmaW5lIGNwdV90b19ub2RlKGNwdSkgICAg ICAgICAoY3B1X3RvX25vZGVbY3B1XSkKQEAgLTY1LDYgKzYyLDE0IEBAIHN0YXRpYyBpbmxpbmUg X19hdHRyaWJ1dGVfcHVyZV9fIG5vZGVpZF90IHBoeXNfdG9fbmlkKHBhZGRyX3QgYWRkcikKIAog dm9pZCBudW1hX2FkZF9jcHUoaW50IGNwdSk7CiB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwg bm9kZWlkX3Qgbm9kZSk7CitpbnQgY29uZmxpY3RpbmdfbWVtYmxrcyhwYWRkcl90IHN0YXJ0LCBw YWRkcl90IGVuZCk7CitzdHJ1Y3Qgbm9kZSAqZ2V0X251bWFfbm9kZSh1bnNpZ25lZCBpbnQgaWQp Oworbm9kZWlkX3QgZ2V0X21lbWJsa19ub2RlaWQodW5zaWduZWQgaW50IG1lbWJsayk7CitzdHJ1 Y3Qgbm9kZSAqZ2V0X25vZGVfbWVtYmxrX3JhbmdlKHVuc2lnbmVkIGludCBtZW1ibGspOworaW50 IG51bWFfYWRkX21lbWJsayhub2RlaWRfdCBub2RlaWQsIHBhZGRyX3Qgc3RhcnQsIHVpbnQ2NF90 IHNpemUpOworaW50IGdldF9udW1fbm9kZV9tZW1ibGtzKHZvaWQpOworYm9vbCBhcmNoX3Nhbml0 aXplX25vZGVzX21lbW9yeSh2b2lkKTsKK3ZvaWQgbnVtYV9mYWlsZWQodm9pZCk7CiAjZWxzZQog c3RhdGljIGlubGluZSB2b2lkIG51bWFfYWRkX2NwdShpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxp bmUgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIG5vZGVpZF90IG5vZGUpIHsgfQotLSAKMi43 LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK