From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v2 11/25] x86: NUMA: Move common code from srat.c Date: Tue, 28 Mar 2017 21:23:19 +0530 Message-ID: <1490716413-19796-12-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 RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBjb2Rl IGZyb20geGVuL2FyY2gveDg2L3NyYXQuYyB0byB4ZW4vY29tbW9uL251bWEuYwpzbyB0aGF0IGl0 IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFyY2hzLgpGZXcgZ2VuZXJpYyBzdGF0aWMgZnVuY3Rpb25z IGluIHg4Ni9zcmF0LmMgYXJlIG1hZGUKbm9uLXN0YXRpYyBjb21tb24vbnVtYS5jCgpTaWduZWQt b2ZmLWJ5OiBWaWpheWEgS3VtYXIgSyA8VmlqYXlhLkt1bWFyQGNhdml1bS5jb20+Ci0tLQogeGVu L2FyY2gveDg2L3NyYXQuYyAgICAgICAgfCAxNTIgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vY29tbW9uL251bWEuYyAgICAgICAgICB8IDE0NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20t eDg2L2FjcGkuaCB8ICAgMyAtCiB4ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaCB8ICAgMiAtCiB4 ZW4vaW5jbHVkZS94ZW4vbnVtYS5oICAgICB8ICAxNCArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAx NjQgaW5zZXJ0aW9ucygrKSwgMTUzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9zcmF0LmMgYi94ZW4vYXJjaC94ODYvc3JhdC5jCmluZGV4IDJjYzg3YTMuLjU1OTQ3YmIg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9zcmF0LmMKKysrIGIveGVuL2FyY2gveDg2L3NyYXQu YwpAQCAtMjMsOSArMjMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqX19y ZWFkX21vc3RseSBhY3BpX3NsaXQ7CiAKLXN0YXRpYyBub2RlbWFza190IF9faW5pdGRhdGEgbWVt b3J5X25vZGVzX3BhcnNlZDsKLXN0YXRpYyBub2RlbWFza190IF9faW5pdGRhdGEgcHJvY2Vzc29y X25vZGVzX3BhcnNlZDsKLXN0YXRpYyBzdHJ1Y3Qgbm9kZSBfX2luaXRkYXRhIG5vZGVzW01BWF9O VU1OT0RFU107CitleHRlcm4gbm9kZW1hc2tfdCBwcm9jZXNzb3Jfbm9kZXNfcGFyc2VkOworZXh0 ZXJuIG5vZGVtYXNrX3QgbWVtb3J5X25vZGVzX3BhcnNlZDsKIAogLyoKICAqIEtlZXAgQklPUydz IENQVTJub2RlIGluZm9ybWF0aW9uLCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG1lbW9yeSBhbGxv Y2Fpb24KQEAgLTQzLDQ5ICs0Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcHhtMm5vZGUgX19yZWFkX21v c3RseSBweG0ybm9kZVtNQVhfTlVNTk9ERVNdID0KIAogc3RhdGljIHVuc2lnbmVkIG5vZGVfdG9f cHhtKG5vZGVpZF90IG4pOwogCi1zdGF0aWMgaW50IG51bV9ub2RlX21lbWJsa3M7Ci1zdGF0aWMg c3RydWN0IG5vZGUgbm9kZV9tZW1ibGtfcmFuZ2VbTlJfTk9ERV9NRU1CTEtTXTsKLXN0YXRpYyBu b2RlaWRfdCBtZW1ibGtfbm9kZWlkW05SX05PREVfTUVNQkxLU107CiBzdGF0aWMgX19pbml0ZGF0 YSBERUNMQVJFX0JJVE1BUChtZW1ibGtfaG90cGx1ZywgTlJfTk9ERV9NRU1CTEtTKTsKIAotc3Rh dGljIHN0cnVjdCBub2RlICpnZXRfbnVtYV9ub2RlKGludCBpZCkKLXsKLQlyZXR1cm4gJm5vZGVz W2lkXTsKLX0KLQotc3RhdGljIG5vZGVpZF90IGdldF9tZW1ibGtfbm9kZWlkKGludCBpZCkKLXsK LQlyZXR1cm4gbWVtYmxrX25vZGVpZFtpZF07Ci19Ci0KLXN0YXRpYyBub2RlaWRfdCAqZ2V0X21l bWJsa19ub2RlaWRfbWFwKHZvaWQpCi17Ci0JcmV0dXJuICZtZW1ibGtfbm9kZWlkWzBdOwotfQot Ci1zdGF0aWMgc3RydWN0IG5vZGUgKmdldF9ub2RlX21lbWJsa19yYW5nZShpbnQgbWVtYmxrKQot ewotCXJldHVybiAmbm9kZV9tZW1ibGtfcmFuZ2VbbWVtYmxrXTsKLX0KLQotc3RhdGljIGludCBn ZXRfbnVtX25vZGVfbWVtYmxrcyh2b2lkKQotewotCXJldHVybiBudW1fbm9kZV9tZW1ibGtzOwot fQotCi1zdGF0aWMgaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsobm9kZWlkX3Qgbm9kZWlkLCBw YWRkcl90IHN0YXJ0LCB1aW50NjRfdCBzaXplKQotewotCWlmIChub2RlaWQgPj0gTlJfTk9ERV9N RU1CTEtTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW5vZGVfbWVtYmxrX3JhbmdlW251bV9ub2Rl X21lbWJsa3NdLnN0YXJ0ID0gc3RhcnQ7Ci0Jbm9kZV9tZW1ibGtfcmFuZ2VbbnVtX25vZGVfbWVt Ymxrc10uZW5kID0gc3RhcnQgKyBzaXplOwotCW1lbWJsa19ub2RlaWRbbnVtX25vZGVfbWVtYmxr c10gPSBub2RlaWQ7Ci0JbnVtX25vZGVfbWVtYmxrcysrOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0 YXRpYyBpbmxpbmUgYm9vbCBub2RlX2ZvdW5kKHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGlu dCBweG0pCiB7CiAJcmV0dXJuICgocHhtMm5vZGVbaWR4XS5weG0gPT0gcHhtKSAmJgpAQCAtMTU2 LDU0ICsxMTQsNyBAQCBub2RlaWRfdCBhY3BpX3NldHVwX25vZGUodW5zaWduZWQgaW50IHB4bSkK IAlyZXR1cm4gbm9kZTsKIH0KIAotaW50IHZhbGlkX251bWFfcmFuZ2UocGFkZHJfdCBzdGFydCwg cGFkZHJfdCBlbmQsIG5vZGVpZF90IG5vZGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgZ2V0X251bV9ub2RlX21lbWJsa3MoKTsgaSsrKSB7Ci0JCXN0cnVjdCBub2RlICpuZCA9IGdl dF9ub2RlX21lbWJsa19yYW5nZShpKTsKLQotCQlpZiAobmQtPnN0YXJ0IDw9IHN0YXJ0ICYmIG5k LT5lbmQgPiBlbmQgJiYKLQkJICAgIGdldF9tZW1ibGtfbm9kZWlkKGkpID09IG5vZGUpCi0JCQly ZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgY29uZmxp Y3RpbmdfbWVtYmxrcyhwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkKLXsKLQlpbnQgaTsKLQot CWZvciAoaSA9IDA7IGkgPCBnZXRfbnVtX25vZGVfbWVtYmxrcygpOyBpKyspIHsKLQkJc3RydWN0 IG5vZGUgKm5kID0gZ2V0X25vZGVfbWVtYmxrX3JhbmdlKGkpOwotCQlpZiAobmQtPnN0YXJ0ID09 IG5kLT5lbmQpCi0JCQljb250aW51ZTsKLQkJaWYgKG5kLT5lbmQgPiBzdGFydCAmJiBuZC0+c3Rh cnQgPCBlbmQpCi0JCQlyZXR1cm4gaTsKLQkJaWYgKG5kLT5lbmQgPT0gZW5kICYmIG5kLT5zdGFy dCA9PSBzdGFydCkKLQkJCXJldHVybiBpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2 b2lkIF9faW5pdCBjdXRvZmZfbm9kZShpbnQgaSwgcGFkZHJfdCBzdGFydCwgcGFkZHJfdCBlbmQp Ci17Ci0Jc3RydWN0IG5vZGUgKm5kID0gZ2V0X251bWFfbm9kZShpKTsKLQotCWlmIChuZC0+c3Rh cnQgPCBzdGFydCkgewotCQluZC0+c3RhcnQgPSBzdGFydDsKLQkJaWYgKG5kLT5lbmQgPCBuZC0+ c3RhcnQpCi0JCQluZC0+c3RhcnQgPSBuZC0+ZW5kOwotCX0KLQlpZiAobmQtPmVuZCA+IGVuZCkg ewotCQluZC0+ZW5kID0gZW5kOwotCQlpZiAobmQtPnN0YXJ0ID4gbmQtPmVuZCkKLQkJCW5kLT5z dGFydCA9IG5kLT5lbmQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9mYWlsZWQo dm9pZCkKK3ZvaWQgX19pbml0IG51bWFfZmFpbGVkKHZvaWQpCiB7CiAJaW50IGk7CiAJcHJpbnRr KEtFUk5fRVJSICJTUkFUOiBTUkFUIG5vdCB1c2VkLlxuIik7CkBAIC00MTksNyArMzMwLDcgQEAg YWNwaV9udW1hX21lbW9yeV9hZmZpbml0eV9pbml0KGNvbnN0IHN0cnVjdCBhY3BpX3NyYXRfbWVt X2FmZmluaXR5ICptYSkKIAogLyogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRz ICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9uKS4KICAgIE1ha2Ugc3VyZSB0aGUgUFhNcyBjb3Zl ciBhbGwgbWVtb3J5LiAqLwotc3RhdGljIGludCBfX2luaXQgYXJjaF9zYW5pdGl6ZV9ub2Rlc19t ZW1vcnkodm9pZCkKK2ludCBfX2luaXQgYXJjaF9zYW5pdGl6ZV9ub2Rlc19tZW1vcnkodm9pZCkK IHsKIAlpbnQgaTsKIApAQCAtNTE2LDYxICs0MjcsNiBAQCB2b2lkIF9faW5pdCBzcmF0X3BhcnNl X3JlZ2lvbnModWludDY0X3QgYWRkcikKIAlwZm5fcGR4X2hvbGVfc2V0dXAobWFzayA+PiBQQUdF X1NISUZUKTsKIH0KIAotLyogVXNlIHRoZSBpbmZvcm1hdGlvbiBkaXNjb3ZlcmVkIGFib3ZlIHRv IGFjdHVhbGx5IHNldCB1cCB0aGUgbm9kZXMuICovCi1pbnQgX19pbml0IG51bWFfc2Nhbl9ub2Rl cyh1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQotewotCWludCBpOwotCW5vZGVtYXNrX3Qg YWxsX25vZGVzX3BhcnNlZDsKLQlzdHJ1Y3Qgbm9kZSAqbWVtYmxrczsKLQlub2RlaWRfdCAqbm9k ZWlkczsKLQotCS8qIEZpcnN0IGNsZWFuIHVwIHRoZSBub2RlIGxpc3QgKi8KLQlmb3IgKGkgPSAw OyBpIDwgTUFYX05VTU5PREVTOyBpKyspCi0JCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBlbmQpOwot Ci0JaWYgKGdldF9hY3BpX251bWEoKSA9PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoIWFyY2hf c2FuaXRpemVfbm9kZXNfbWVtb3J5KCkpIHsKLQkJbnVtYV9mYWlsZWQoKTsKLQkJcmV0dXJuIC0x OwotCX0KLQotCW1lbWJsa3MgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoMCk7Ci0Jbm9kZWlkcyA9 IGdldF9tZW1ibGtfbm9kZWlkX21hcCgpOwotCWlmIChjb21wdXRlX21lbW5vZGVfc2hpZnQobm9k ZV9tZW1ibGtfcmFuZ2UsIG51bV9ub2RlX21lbWJsa3MsCi0JCQkJICBtZW1ibGtfbm9kZWlkLCAm bWVtbm9kZV9zaGlmdCkpIHsKLQkJbWVtbm9kZV9zaGlmdCA9IDA7Ci0JCXByaW50ayhLRVJOX0VS UgotCQkgICAgICJTUkFUOiBObyBOVU1BIG5vZGUgaGFzaCBmdW5jdGlvbiBmb3VuZC4gQ29udGFj dCBtYWludGFpbmVyXG4iKTsKLQkJbnVtYV9mYWlsZWQoKTsKLQkJcmV0dXJuIC0xOwotCX0KLQot CW5vZGVzX29yKGFsbF9ub2Rlc19wYXJzZWQsIG1lbW9yeV9ub2Rlc19wYXJzZWQsIHByb2Nlc3Nv cl9ub2Rlc19wYXJzZWQpOwotCi0JLyogRmluYWxseSByZWdpc3RlciBub2RlcyAqLwotCWZvcl9l YWNoX25vZGVfbWFzayhpLCBhbGxfbm9kZXNfcGFyc2VkKQotCXsKLQkJc3RydWN0IG5vZGUgKm5k ID0gZ2V0X251bWFfbm9kZShpKTsKLQkJdWludDY0X3Qgc2l6ZSA9IG5kLT5lbmQgLSBuZC0+c3Rh cnQ7Ci0KLQkJaWYgKCBzaXplID09IDAgKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1JBVDog Tm9kZSAldSBoYXMgbm8gbWVtb3J5LiAiCi0JCQkgICAgICAgIkJJT1MgQnVnIG9yIG1pcy1jb25m aWd1cmVkIGhhcmR3YXJlP1xuIiwgaSk7Ci0KLQkJc2V0dXBfbm9kZV9ib290bWVtKGksIG5kLT5z dGFydCwgbmQtPmVuZCk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspIHsK LQkJaWYgKGNwdV90b19ub2RlW2ldID09IE5VTUFfTk9fTk9ERSkKLQkJCWNvbnRpbnVlOwotCQlp ZiAoIW5vZGVfaXNzZXQoY3B1X3RvX25vZGVbaV0sIHByb2Nlc3Nvcl9ub2Rlc19wYXJzZWQpKQot CQkJbnVtYV9zZXRfbm9kZShpLCBOVU1BX05PX05PREUpOwotCX0KLQludW1hX2luaXRfYXJyYXko KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIG5vZGVfdG9fcHhtKG5vZGVpZF90 IG4pCiB7CiAJdW5zaWduZWQgaTsKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vbnVtYS5jIGIveGVu L2NvbW1vbi9udW1hLmMKaW5kZXggMjA3ZWJkOC4uMTc4OWJiYSAxMDA2NDQKLS0tIGEveGVuL2Nv bW1vbi9udW1hLmMKKysrIGIveGVuL2NvbW1vbi9udW1hLmMKQEAgLTMyLDYgKzMyLDggQEAKIHN0 YXRpYyBpbnQgbnVtYV9zZXR1cChjaGFyICpzKTsKIGN1c3RvbV9wYXJhbSgibnVtYSIsIG51bWFf c2V0dXApOwogCitub2RlbWFza190IF9faW5pdGRhdGEgbWVtb3J5X25vZGVzX3BhcnNlZDsKK25v ZGVtYXNrX3QgX19pbml0ZGF0YSBwcm9jZXNzb3Jfbm9kZXNfcGFyc2VkOwogc3RydWN0IG5vZGVf ZGF0YSBub2RlX2RhdGFbTUFYX05VTU5PREVTXTsKIAogLyogTWFwcGluZyBmcm9tIHBkeCB0byBu b2RlIGlkICovCkBAIC00Nyw2ICs0OSwxMCBAQCBjcHVtYXNrX3QgX19yZWFkX21vc3RseSBub2Rl X3RvX2NwdW1hc2tbTUFYX05VTU5PREVTXTsKIAogc3RhdGljIGJvb2wgbnVtYV9vZmYgPSAwOwog c3RhdGljIGJvb2wgYWNwaV9udW1hID0gMTsKK3N0YXRpYyBpbnQgbnVtX25vZGVfbWVtYmxrczsK K3N0YXRpYyBzdHJ1Y3Qgbm9kZSBub2RlX21lbWJsa19yYW5nZVtOUl9OT0RFX01FTUJMS1NdOwor c3RhdGljIG5vZGVpZF90IG1lbWJsa19ub2RlaWRbTlJfTk9ERV9NRU1CTEtTXTsKK3N0YXRpYyBz dHJ1Y3Qgbm9kZSBfX2luaXRkYXRhIG5vZGVzW01BWF9OVU1OT0RFU107CiAKIGJvb2wgaXNfbnVt YV9vZmYodm9pZCkKIHsKQEAgLTY4LDYgKzc0LDkxIEBAIGJvb2wgc3JhdF9kaXNhYmxlZCh2b2lk KQogICAgIHJldHVybiBudW1hX29mZiB8fCBhY3BpX251bWEgPT0gMDsKIH0KIAorc3RydWN0IG5v ZGUgKmdldF9udW1hX25vZGUoaW50IGlkKQoreworICAgIHJldHVybiAmbm9kZXNbaWRdOworfQor Citub2RlaWRfdCBnZXRfbWVtYmxrX25vZGVpZChpbnQgaWQpCit7CisgICAgcmV0dXJuIG1lbWJs a19ub2RlaWRbaWRdOworfQorCitub2RlaWRfdCAqZ2V0X21lbWJsa19ub2RlaWRfbWFwKHZvaWQp Cit7CisgICAgcmV0dXJuICZtZW1ibGtfbm9kZWlkWzBdOworfQorCitzdHJ1Y3Qgbm9kZSAqZ2V0 X25vZGVfbWVtYmxrX3JhbmdlKGludCBtZW1ibGspCit7CisgICAgcmV0dXJuICZub2RlX21lbWJs a19yYW5nZVttZW1ibGtdOworfQorCitpbnQgZ2V0X251bV9ub2RlX21lbWJsa3Modm9pZCkKK3sK KyAgICByZXR1cm4gbnVtX25vZGVfbWVtYmxrczsKK30KKworaW50IF9faW5pdCBudW1hX2FkZF9t ZW1ibGsobm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0YXJ0LCB1aW50NjRfdCBzaXplKQorewor ICAgIGlmIChub2RlaWQgPj0gTlJfTk9ERV9NRU1CTEtTKQorICAgICAgICByZXR1cm4gLUVJTlZB TDsKKworICAgIG5vZGVfbWVtYmxrX3JhbmdlW251bV9ub2RlX21lbWJsa3NdLnN0YXJ0ID0gc3Rh cnQ7CisgICAgbm9kZV9tZW1ibGtfcmFuZ2VbbnVtX25vZGVfbWVtYmxrc10uZW5kID0gc3RhcnQg KyBzaXplOworICAgIG1lbWJsa19ub2RlaWRbbnVtX25vZGVfbWVtYmxrc10gPSBub2RlaWQ7Cisg ICAgbnVtX25vZGVfbWVtYmxrcysrOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB2YWxpZF9u dW1hX3JhbmdlKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kLCBub2RlaWRfdCBub2RlKQorewor ICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGdldF9udW1fbm9kZV9tZW1ibGtzKCk7 IGkrKykgeworICAgICAgICBzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2Uo aSk7CisKKyAgICAgICAgaWYgKG5kLT5zdGFydCA8PSBzdGFydCAmJiBuZC0+ZW5kID4gZW5kICYm CisgICAgICAgICAgICBnZXRfbWVtYmxrX25vZGVpZChpKSA9PSBub2RlKQorICAgICAgICAgICAg cmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgY29uZmxp Y3RpbmdfbWVtYmxrcyhwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkKK3sKKyAgICBpbnQgaTsK KworICAgIGZvciAoaSA9IDA7IGkgPCBnZXRfbnVtX25vZGVfbWVtYmxrcygpOyBpKyspIHsKKyAg ICAgICAgc3RydWN0IG5vZGUgKm5kID0gZ2V0X25vZGVfbWVtYmxrX3JhbmdlKGkpOworICAgICAg ICBpZiAobmQtPnN0YXJ0ID09IG5kLT5lbmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgaWYgKG5kLT5lbmQgPiBzdGFydCAmJiBuZC0+c3RhcnQgPCBlbmQpCisgICAgICAgICAgICBy ZXR1cm4gaTsKKyAgICAgICAgaWYgKG5kLT5lbmQgPT0gZW5kICYmIG5kLT5zdGFydCA9PSBzdGFy dCkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3Zv aWQgX19pbml0IGN1dG9mZl9ub2RlKGludCBpLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkK K3sKKyAgICBzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRfbnVtYV9ub2RlKGkpOworCisgICAgaWYgKG5k LT5zdGFydCA8IHN0YXJ0KSB7CisgICAgICAgIG5kLT5zdGFydCA9IHN0YXJ0OworICAgICAgICBp ZiAobmQtPmVuZCA8IG5kLT5zdGFydCkKKyAgICAgICAgICAgIG5kLT5zdGFydCA9IG5kLT5lbmQ7 CisgICAgfQorICAgIGlmIChuZC0+ZW5kID4gZW5kKSB7CisgICAgICAgIG5kLT5lbmQgPSBlbmQ7 CisgICAgICAgIGlmIChuZC0+c3RhcnQgPiBuZC0+ZW5kKQorICAgICAgICAgICAgbmQtPnN0YXJ0 ID0gbmQtPmVuZDsKKyAgICB9Cit9CisKIC8qCiAgKiBHaXZlbiBhIHNoaWZ0IHZhbHVlLCB0cnkg dG8gcG9wdWxhdGUgbWVtbm9kZW1hcFtdCiAgKiBSZXR1cm5zIDoKQEAgLTMwNiw2ICszOTcsNjEg QEAgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIG5vZGVpZF90IG5vZGUpCiAgICAgY3B1X3Rv X25vZGVbY3B1XSA9IG5vZGU7CiB9CiAKKy8qIFVzZSB0aGUgaW5mb3JtYXRpb24gZGlzY292ZXJl ZCBhYm92ZSB0byBhY3R1YWxseSBzZXQgdXAgdGhlIG5vZGVzLiAqLworaW50IF9faW5pdCBudW1h X3NjYW5fbm9kZXModWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKyAgICBpbnQgaTsK KyAgICBub2RlbWFza190IGFsbF9ub2Rlc19wYXJzZWQ7CisgICAgc3RydWN0IG5vZGUgKm1lbWJs a3M7CisgICAgbm9kZWlkX3QgKm5vZGVpZHM7CisKKyAgICAvKiBGaXJzdCBjbGVhbiB1cCB0aGUg bm9kZSBsaXN0ICovCisgICAgZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKQorICAg ICAgICBjdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKKworICAgIGlmIChnZXRfYWNwaV9udW1h KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFhcmNoX3Nhbml0aXplX25v ZGVzX21lbW9yeSgpKSB7CisgICAgICAgIG51bWFfZmFpbGVkKCk7CisgICAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgICBtZW1ibGtzID0gZ2V0X25vZGVfbWVtYmxrX3JhbmdlKDApOworICAg IG5vZGVpZHMgPSBnZXRfbWVtYmxrX25vZGVpZF9tYXAoKTsKKyAgICBpZiAoY29tcHV0ZV9tZW1u b2RlX3NoaWZ0KG5vZGVfbWVtYmxrX3JhbmdlLCBudW1fbm9kZV9tZW1ibGtzLAorICAgICAgICAg ICAgICAgICAgbWVtYmxrX25vZGVpZCwgJm1lbW5vZGVfc2hpZnQpKSB7CisgICAgICAgIG1lbW5v ZGVfc2hpZnQgPSAwOworICAgICAgICBwcmludGsoS0VSTl9FUlIKKyAgICAgICAgICAgICAiU1JB VDogTm8gTlVNQSBub2RlIGhhc2ggZnVuY3Rpb24gZm91bmQuIENvbnRhY3QgbWFpbnRhaW5lclxu Iik7CisgICAgICAgIG51bWFfZmFpbGVkKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK KyAgICBub2Rlc19vcihhbGxfbm9kZXNfcGFyc2VkLCBtZW1vcnlfbm9kZXNfcGFyc2VkLCBwcm9j ZXNzb3Jfbm9kZXNfcGFyc2VkKTsKKworICAgIC8qIEZpbmFsbHkgcmVnaXN0ZXIgbm9kZXMgKi8K KyAgICBmb3JfZWFjaF9ub2RlX21hc2soaSwgYWxsX25vZGVzX3BhcnNlZCkKKyAgICB7CisgICAg ICAgIHN0cnVjdCBub2RlICpuZCA9IGdldF9udW1hX25vZGUoaSk7CisgICAgICAgIHVpbnQ2NF90 IHNpemUgPSBuZC0+ZW5kIC0gbmQtPnN0YXJ0OworCisgICAgICAgIGlmICggc2l6ZSA9PSAwICkK KyAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIlNSQVQ6IE5vZGUgJXUgaGFzIG5vIG1l bW9yeS4gIgorICAgICAgICAgICAgICAgICAgICJCSU9TIEJ1ZyBvciBtaXMtY29uZmlndXJlZCBo YXJkd2FyZT9cbiIsIGkpOworCisgICAgICAgIHNldHVwX25vZGVfYm9vdG1lbShpLCBuZC0+c3Rh cnQsIG5kLT5lbmQpOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsr KSB7CisgICAgICAgIGlmIChjcHVfdG9fbm9kZVtpXSA9PSBOVU1BX05PX05PREUpCisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFub2RlX2lzc2V0KGNwdV90b19ub2RlW2ldLCBw cm9jZXNzb3Jfbm9kZXNfcGFyc2VkKSkKKyAgICAgICAgICAgIG51bWFfc2V0X25vZGUoaSwgTlVN QV9OT19OT0RFKTsKKyAgICB9CisgICAgbnVtYV9pbml0X2FycmF5KCk7CisgICAgcmV0dXJuIDA7 Cit9CisKIC8qIFtudW1hPW9mZl0gKi8KIHN0YXRpYyBpbnQgX19pbml0IG51bWFfc2V0dXAoY2hh ciAqb3B0KQogewpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9hY3BpLmggYi94ZW4v aW5jbHVkZS9hc20teDg2L2FjcGkuaAppbmRleCA0NDViOGU1Li5lNGYzZjlhIDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS9hc20teDg2L2FjcGkuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2Fj cGkuaApAQCAtMTAzLDkgKzEwMyw2IEBAIGV4dGVybiB2b2lkIGFjcGlfcmVzZXJ2ZV9ib290bWVt KHZvaWQpOwogCiAjZGVmaW5lIEFSQ0hfSEFTX1BPV0VSX0lOSVQJMQogCi1leHRlcm4gaW50IG51 bWFfc2Nhbl9ub2Rlcyh1NjQgc3RhcnQsIHU2NCBlbmQpOwotI2RlZmluZSBOUl9OT0RFX01FTUJM S1MgKE1BWF9OVU1OT0RFUyoyKQotCiAjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKIAogZXh0ZXJu IHN0cnVjdCBhY3BpX3NsZWVwX2luZm8gYWNwaV9zaW5mbzsKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvbnVtYS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmgKaW5kZXggNDIx ZThiNy4uN2NmZjIyMCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmgKKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmgKQEAgLTQ3LDggKzQ3LDYgQEAgc3RhdGljIGlu bGluZSBfX2F0dHJpYnV0ZV9fKChwdXJlKSkgbm9kZWlkX3QgcGh5c190b19uaWQocGFkZHJfdCBh ZGRyKQogI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5v ZGVfc3RhcnRfcGZuICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9ERV9E QVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKIAotZXh0ZXJuIGludCB2YWxpZF9udW1hX3Jh bmdlKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kLCBub2RlaWRfdCBub2RlKTsKLQogdm9pZCBz cmF0X3BhcnNlX3JlZ2lvbnModWludDY0X3QgYWRkcik7CiBleHRlcm4gdWludDhfdCBfX25vZGVf ZGlzdGFuY2Uobm9kZWlkX3QgYSwgbm9kZWlkX3QgYik7CiB1bnNpZ25lZCBpbnQgYXJjaF9nZXRf ZG1hX2JpdHNpemUodm9pZCk7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vbnVtYS5oIGIv eGVuL2luY2x1ZGUveGVuL251bWEuaAppbmRleCBlZWQ0MGFmLi5lZTUzNTI2IDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS94ZW4vbnVtYS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9udW1hLmgKQEAg LTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTlVNQV9OT19ESVNUQU5DRSAweEZGCiAKICNkZWZpbmUg TUFYX05VTU5PREVTICAgICgxIDw8IE5PREVTX1NISUZUKQorI2RlZmluZSBOUl9OT0RFX01FTUJM S1MgKE1BWF9OVU1OT0RFUyAqIDIpCiAKIHN0cnVjdCBub2RlIHsKICAgICBwYWRkcl90IHN0YXJ0 OwpAQCAtMjgsNiArMjksMTkgQEAgZXh0ZXJuIG5vZGVpZF90IGFjcGlfc2V0dXBfbm9kZSh1bnNp Z25lZCBpbnQgcHhtKTsKIGV4dGVybiB2b2lkIHNyYXRfZGV0ZWN0X25vZGUoaW50IGNwdSk7CiBl eHRlcm4gdm9pZCBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0 YXJ0LCBwYWRkcl90IGVuZCk7CiBleHRlcm4gdm9pZCBpbml0X2NwdV90b19ub2RlKHZvaWQpOwor ZXh0ZXJuIGludCB2YWxpZF9udW1hX3JhbmdlKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kLCBu b2RlaWRfdCBub2RlKTsKK2V4dGVybiBpbnQgY29uZmxpY3RpbmdfbWVtYmxrcyhwYWRkcl90IHN0 YXJ0LCBwYWRkcl90IGVuZCk7CitleHRlcm4gdm9pZCBjdXRvZmZfbm9kZShpbnQgaSwgcGFkZHJf dCBzdGFydCwgcGFkZHJfdCBlbmQpOworZXh0ZXJuIHN0cnVjdCBub2RlICpnZXRfbnVtYV9ub2Rl KGludCBpZCk7CitleHRlcm4gbm9kZWlkX3QgZ2V0X21lbWJsa19ub2RlaWQoaW50IG1lbWJsayk7 CitleHRlcm4gbm9kZWlkX3QgKmdldF9tZW1ibGtfbm9kZWlkX21hcCh2b2lkKTsKK2V4dGVybiBz dHJ1Y3Qgbm9kZSAqZ2V0X25vZGVfbWVtYmxrX3JhbmdlKGludCBtZW1ibGspOworZXh0ZXJuIHN0 cnVjdCBub2RlICpnZXRfbWVtYmxrKGludCBtZW1ibGspOworZXh0ZXJuIGludCBudW1hX2FkZF9t ZW1ibGsobm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0YXJ0LCB1aW50NjRfdCBzaXplKTsKK2V4 dGVybiBpbnQgZ2V0X251bV9ub2RlX21lbWJsa3Modm9pZCk7CitleHRlcm4gaW50IGFyY2hfc2Fu aXRpemVfbm9kZXNfbWVtb3J5KHZvaWQpOworZXh0ZXJuIHZvaWQgbnVtYV9mYWlsZWQodm9pZCk7 CitleHRlcm4gaW50IG51bWFfc2Nhbl9ub2Rlcyh1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5k KTsKIAogI2RlZmluZSB2Y3B1X3RvX25vZGUodikgKGNwdV90b19ub2RlKCh2KS0+cHJvY2Vzc29y KSkKIAotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK