From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 2/6] libx86: Split x86_cpuid_policy_fill_native() out of calculate_raw_policy() Date: Mon, 5 Nov 2018 11:21:03 +0000 Message-ID: <1541416867-30253-3-git-send-email-andrew.cooper3@citrix.com> References: <1541416867-30253-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: <1541416867-30253-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 , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhpcyB3aWxsIHNob3J0bHkgYmUgd2FudGVkIGJ5IHRoZSB1c2Vyc3BhY2UgZW11bGF0b3IgaGFy bmVzc2VzIGFzIHdlbGwuCgpDb25zb2xpZGF0ZSB0aGUgY3B1aWR7LF9jb3VudH1fbGVhZigpIGhl bHBlcnMgYmVzaWRlIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwKcmF0aGVyIHRoYW4gaGF2aW5n IHRoZW0gc2NhdHRlcmVkIHRocm91Z2hvdXQgWGVuLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENv b3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJl dWxpY2hAc3VzZS5jb20+CkNDOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHhl bi9hcmNoL3g4Ni9jcHVpZC5jICAgICAgICAgICAgfCAxMDUgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmggfCAgIDYg LS0tCiB4ZW4vaW5jbHVkZS94ZW4vbGliL3g4Ni9jcHVpZC5oIHwgIDE4ICsrKysrKysKIHhlbi9s aWIveDg2L2NwdWlkLmMgICAgICAgICAgICAgfCAxMDggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgMTEw IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9jcHVpZC5jIGIveGVuL2Fy Y2gveDg2L2NwdWlkLmMKaW5kZXggZDIxZTc0NS4uMDU5MWE3ZCAxMDA2NDQKLS0tIGEveGVuL2Fy Y2gveDg2L2NwdWlkLmMKKysrIGIveGVuL2FyY2gveDg2L2NwdWlkLmMKQEAgLTc1LDExICs3NSw2 IEBAIHN0cnVjdCBjcHVpZF9wb2xpY3kgX19yZWFkX21vc3RseSByYXdfY3B1aWRfcG9saWN5LAog ICAgIF9fcmVhZF9tb3N0bHkgcHZfbWF4X2NwdWlkX3BvbGljeSwKICAgICBfX3JlYWRfbW9zdGx5 IGh2bV9tYXhfY3B1aWRfcG9saWN5OwogCi1zdGF0aWMgdm9pZCBjcHVpZF9sZWFmKHVpbnQzMl90 IGxlYWYsIHN0cnVjdCBjcHVpZF9sZWFmICpkYXRhKQotewotICAgIGNwdWlkKGxlYWYsICZkYXRh LT5hLCAmZGF0YS0+YiwgJmRhdGEtPmMsICZkYXRhLT5kKTsKLX0KLQogc3RhdGljIHZvaWQgc2Fu aXRpc2VfZmVhdHVyZXNldCh1aW50MzJfdCAqZnMpCiB7CiAgICAgLyogZm9yX2VhY2hfc2V0X2Jp dCgpIHVzZXMgdW5zaWduZWQgbG9uZ3MuICBFeHRlbmQgd2l0aCB6ZXJvZXMuICovCkBAIC0yNzMs MTA2ICsyNjgsOCBAQCBzdGF0aWMgdm9pZCByZWNhbGN1bGF0ZV9taXNjKHN0cnVjdCBjcHVpZF9w b2xpY3kgKnApCiBzdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX3Jhd19wb2xpY3kodm9pZCkK IHsKICAgICBzdHJ1Y3QgY3B1aWRfcG9saWN5ICpwID0gJnJhd19jcHVpZF9wb2xpY3k7Ci0gICAg dW5zaWduZWQgaW50IGk7Ci0KLSAgICBjcHVpZF9sZWFmKDAsICZwLT5iYXNpYy5yYXdbMF0pOwot ICAgIGZvciAoIGkgPSAxOyBpIDwgbWluKEFSUkFZX1NJWkUocC0+YmFzaWMucmF3KSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBwLT5iYXNpYy5tYXhfbGVhZiArIDF1bCk7ICsraSApCi0gICAg ewotICAgICAgICBzd2l0Y2ggKCBpICkKLSAgICAgICAgewotICAgICAgICBjYXNlIDB4NDogY2Fz ZSAweDc6IGNhc2UgMHhiOiBjYXNlIDB4ZDoKLSAgICAgICAgICAgIC8qIE11bHRpLWludm9jYXRp b24gbGVhdmVzLiAgRGVmZXJyZWQuICovCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg fQotCi0gICAgICAgIGNwdWlkX2xlYWYoaSwgJnAtPmJhc2ljLnJhd1tpXSk7Ci0gICAgfQotCi0g ICAgaWYgKCBwLT5iYXNpYy5tYXhfbGVhZiA+PSA0ICkKLSAgICB7Ci0gICAgICAgIGZvciAoIGkg PSAwOyBpIDwgQVJSQVlfU0laRShwLT5jYWNoZS5yYXcpOyArK2kgKQotICAgICAgICB7Ci0gICAg ICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGNwdWlkX2xlYWYgbDsKLSAg ICAgICAgICAgICAgICBzdHJ1Y3QgY3B1aWRfY2FjaGVfbGVhZiBjOwotICAgICAgICAgICAgfSB1 OwotCi0gICAgICAgICAgICBjcHVpZF9jb3VudF9sZWFmKDQsIGksICZ1LmwpOwotCi0gICAgICAg ICAgICBpZiAoIHUuYy50eXBlID09IDAgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICAgICBwLT5jYWNoZS5zdWJsZWFmW2ldID0gdS5jOwotICAgICAgICB9Ci0KLSAgICAgICAg LyoKLSAgICAgICAgICogVGhlIGNob2ljZSBvZiBDUFVJRF9HVUVTVF9OUl9DQUNIRSBpcyBhcmJp dHJhcnkuICBJdCBpcyBleHBlY3RlZAotICAgICAgICAgKiB0aGF0IGl0IHdpbGwgZXZlbnR1YWxs eSBuZWVkIGluY3JlYXNpbmcgZm9yIGZ1dHVyZSBoYXJkd2FyZS4KLSAgICAgICAgICovCi0gICAg ICAgIGlmICggaSA9PSBBUlJBWV9TSVpFKHAtPmNhY2hlLnJhdykgKQotICAgICAgICAgICAgcHJp bnRrKFhFTkxPR19XQVJOSU5HCi0gICAgICAgICAgICAgICAgICAgIkNQVUlEOiBJbnN1ZmZpY2ll bnQgTGVhZiA0IHNwYWNlIGZvciB0aGlzIGhhcmR3YXJlXG4iKTsKLSAgICB9Ci0KLSAgICBpZiAo IHAtPmJhc2ljLm1heF9sZWFmID49IDcgKQotICAgIHsKLSAgICAgICAgY3B1aWRfY291bnRfbGVh Zig3LCAwLCAmcC0+ZmVhdC5yYXdbMF0pOwotCi0gICAgICAgIGZvciAoIGkgPSAxOyBpIDwgbWlu KEFSUkFZX1NJWkUocC0+ZmVhdC5yYXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw LT5mZWF0Lm1heF9zdWJsZWFmICsgMXVsKTsgKytpICkKLSAgICAgICAgICAgIGNwdWlkX2NvdW50 X2xlYWYoNywgaSwgJnAtPmZlYXQucmF3W2ldKTsKLSAgICB9Ci0KLSAgICBpZiAoIHAtPmJhc2lj Lm1heF9sZWFmID49IDB4YiApCi0gICAgewotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBz dHJ1Y3QgY3B1aWRfbGVhZiBsOwotICAgICAgICAgICAgc3RydWN0IGNwdWlkX3RvcG9fbGVhZiB0 OwotICAgICAgICB9IHU7Ci0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAt PnRvcG8ucmF3KTsgKytpICkKLSAgICAgICAgewotICAgICAgICAgICAgY3B1aWRfY291bnRfbGVh ZigweGIsIGksICZ1LmwpOwotCi0gICAgICAgICAgICBpZiAoIHUudC50eXBlID09IDAgKQotICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBwLT50b3BvLnN1YmxlYWZbaV0gPSB1 LnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgY2hvaWNlIG9mIENQ VUlEX0dVRVNUX05SX1RPUE8gaXMgcGVyIHRoZSBtYW51YWwuICBJdCBtYXkgbmVlZAotICAgICAg ICAgKiB0byBncm93IGZvciBmdXR1cmUgaGFyZHdhcmUuCi0gICAgICAgICAqLwotICAgICAgICBp ZiAoIGkgPT0gQVJSQVlfU0laRShwLT50b3BvLnJhdykgJiYKLSAgICAgICAgICAgICAoY3B1aWRf Y291bnRfbGVhZigweGIsIGksICZ1LmwpLCB1LnQudHlwZSAhPSAwKSApCi0gICAgICAgICAgICBw cmludGsoWEVOTE9HX1dBUk5JTkcKLSAgICAgICAgICAgICAgICAgICAiQ1BVSUQ6IEluc3VmZmlj aWVudCBMZWFmIDB4YiBzcGFjZSBmb3IgdGhpcyBoYXJkd2FyZVxuIik7Ci0gICAgfQotCi0gICAg aWYgKCBwLT5iYXNpYy5tYXhfbGVhZiA+PSBYU1RBVEVfQ1BVSUQgKQotICAgIHsKLSAgICAgICAg dWludDY0X3QgeHN0YXRlczsKLQotICAgICAgICBjcHVpZF9jb3VudF9sZWFmKFhTVEFURV9DUFVJ RCwgMCwgJnAtPnhzdGF0ZS5yYXdbMF0pOwotICAgICAgICBjcHVpZF9jb3VudF9sZWFmKFhTVEFU RV9DUFVJRCwgMSwgJnAtPnhzdGF0ZS5yYXdbMV0pOwotCi0gICAgICAgIHhzdGF0ZXMgPSAoKHVp bnQ2NF90KShwLT54c3RhdGUueGNyMF9oaWdoIHwgcC0+eHN0YXRlLnhzc19oaWdoKSA8PCAzMikg fAotICAgICAgICAgICAgKHAtPnhzdGF0ZS54Y3IwX2xvdyB8IHAtPnhzdGF0ZS54c3NfbG93KTsK LQotICAgICAgICBmb3IgKCBpID0gMjsgaSA8IG1pbig2M3VsLCBBUlJBWV9TSVpFKHAtPnhzdGF0 ZS5yYXcpKTsgKytpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCB4c3RhdGVzICYgKDF1 bCA8PCBpKSApCi0gICAgICAgICAgICAgICAgY3B1aWRfY291bnRfbGVhZihYU1RBVEVfQ1BVSUQs IGksICZwLT54c3RhdGUucmF3W2ldKTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIC8qIEV4dGVu ZGVkIGxlYXZlcy4gKi8KLSAgICBjcHVpZF9sZWFmKDB4ODAwMDAwMDAsICZwLT5leHRkLnJhd1sw XSk7Ci0gICAgZm9yICggaSA9IDE7IGkgPCBtaW4oQVJSQVlfU0laRShwLT5leHRkLnJhdyksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZXh0ZC5tYXhfbGVhZiArIDEgLSAweDgwMDAwMDAw dWwpOyArK2kgKQotICAgICAgICBjcHVpZF9sZWFmKDB4ODAwMDAwMDAgKyBpLCAmcC0+ZXh0ZC5y YXdbaV0pOworICAgIHg4Nl9jcHVpZF9wb2xpY3lfZmlsbF9uYXRpdmUocCk7CiAKICAgICBwLT54 ODZfdmVuZG9yID0gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yOwogfQpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vz c29yLmgKaW5kZXggMDM1NTVlMS4uZGYwMWFlMyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9wcm9jZXNzb3IuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oCkBA IC0yNjMsMTIgKzI2Myw2IEBAIHN0YXRpYyBhbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBjcHVp ZF9jb3VudF9lYngoCiAgICAgcmV0dXJuIGVieDsKIH0KIAotc3RhdGljIGFsd2F5c19pbmxpbmUg dm9pZCBjcHVpZF9jb3VudF9sZWFmKHVpbnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdWlkX2xl YWYgKmRhdGEpCi17Ci0gICAgY3B1aWRfY291bnQobGVhZiwgc3VibGVhZiwgJmRhdGEtPmEsICZk YXRhLT5iLCAmZGF0YS0+YywgJmRhdGEtPmQpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGxvbmcgcmVhZF9jcjAodm9pZCkKIHsKICAgICB1bnNpZ25lZCBsb25nIGNyMDsKZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL3hlbi9saWIveDg2L2NwdWlkLmggYi94ZW4vaW5jbHVkZS94ZW4vbGli L3g4Ni9jcHVpZC5oCmluZGV4IDkzYWRhMjMuLjVlNGVjMDkgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNs dWRlL3hlbi9saWIveDg2L2NwdWlkLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL2xpYi94ODYvY3B1 aWQuaApAQCAtMjAsNiArMjAsMjEgQEAgc3RydWN0IGNwdWlkX2xlYWYKICAgICB1aW50MzJfdCBh LCBiLCBjLCBkOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2xlYWYodWludDMyX3Qg bGVhZiwgc3RydWN0IGNwdWlkX2xlYWYgKmwpCit7CisgICAgYXNtIHZvbGF0aWxlICggImNwdWlk IgorICAgICAgICAgICAgICAgICAgIDogIj1hIiAobC0+YSksICI9YiIgKGwtPmIpLCAiPWMiIChs LT5jKSwgIj1kIiAobC0+ZCkKKyAgICAgICAgICAgICAgICAgICA6ICJhIiAobGVhZikgKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2NvdW50X2xlYWYoCisgICAgdWludDMyX3QgbGVh ZiwgdWludDMyX3Qgc3VibGVhZiwgc3RydWN0IGNwdWlkX2xlYWYgKmwpCit7CisgICAgYXNtIHZv bGF0aWxlICggImNwdWlkIgorICAgICAgICAgICAgICAgICAgIDogIj1hIiAobC0+YSksICI9YiIg KGwtPmIpLCAiPWMiIChsLT5jKSwgIj1kIiAobC0+ZCkKKyAgICAgICAgICAgICAgICAgICA6ICJh IiAobGVhZiksICJjIiAoc3VibGVhZikgKTsKK30KKwogI2RlZmluZSBDUFVJRF9HVUVTVF9OUl9C QVNJQyAgICAgICgweGR1ICsgMSkKICNkZWZpbmUgQ1BVSURfR1VFU1RfTlJfRkVBVCAgICAgICAo MHUgKyAxKQogI2RlZmluZSBDUFVJRF9HVUVTVF9OUl9DQUNIRSAgICAgICg1dSArIDEpCkBAIC0y MjgsNiArMjQzLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGNwdWlkX2ZlYXR1cmVzZXRfdG9fcG9s aWN5KAogICAgIHAtPmZlYXQuXzdkMCAgPSBmc1tGRUFUVVJFU0VUXzdkMF07CiB9CiAKKy8qIEZp bGwgYSBDUFVJRCBwb2xpY3kgdXNpbmcgdGhlIG5hdGl2ZSBDUFVJRCBpbnN0cnVjdGlvbi4gKi8K K3ZvaWQgeDg2X2NwdWlkX3BvbGljeV9maWxsX25hdGl2ZShzdHJ1Y3QgY3B1aWRfcG9saWN5ICpw KTsKKwogY29uc3QgdWludDMyX3QgKng4Nl9jcHVpZF9sb29rdXBfZGVlcF9kZXBzKHVpbnQzMl90 IGZlYXR1cmUpOwogCiAjZW5kaWYgLyogIVhFTl9MSUJfWDg2X0NQVUlEX0ggKi8KZGlmZiAtLWdp dCBhL3hlbi9saWIveDg2L2NwdWlkLmMgYi94ZW4vbGliL3g4Ni9jcHVpZC5jCmluZGV4IGE2M2U0 MmIuLmRkZDM4MjEgMTAwNjQ0Ci0tLSBhL3hlbi9saWIveDg2L2NwdWlkLmMKKysrIGIveGVuL2xp Yi94ODYvY3B1aWQuYwpAQCAtMiw2ICsyLDExNCBAQAogCiAjaW5jbHVkZSA8eGVuL2xpYi94ODYv Y3B1aWQuaD4KIAordm9pZCB4ODZfY3B1aWRfcG9saWN5X2ZpbGxfbmF0aXZlKHN0cnVjdCBjcHVp ZF9wb2xpY3kgKnApCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBjcHVpZF9sZWFmKDAs ICZwLT5iYXNpYy5yYXdbMF0pOworICAgIGZvciAoIGkgPSAxOyBpIDwgbWluKEFSUkFZX1NJWkUo cC0+YmFzaWMucmF3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwLT5iYXNpYy5tYXhfbGVh ZiArIDF1bCk7ICsraSApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBpICkKKyAgICAgICAgewor ICAgICAgICBjYXNlIDB4NDogY2FzZSAweDc6IGNhc2UgMHhiOiBjYXNlIDB4ZDoKKyAgICAgICAg ICAgIC8qIE11bHRpLWludm9jYXRpb24gbGVhdmVzLiAgRGVmZXJyZWQuICovCisgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNwdWlkX2xlYWYoaSwgJnAtPmJhc2lj LnJhd1tpXSk7CisgICAgfQorCisgICAgaWYgKCBwLT5iYXNpYy5tYXhfbGVhZiA+PSA0ICkKKyAg ICB7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwLT5jYWNoZS5yYXcpOyAr K2kgKQorICAgICAgICB7CisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgc3Ry dWN0IGNwdWlkX2xlYWYgbDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1aWRfY2FjaGVfbGVh ZiBjOworICAgICAgICAgICAgfSB1OworCisgICAgICAgICAgICBjcHVpZF9jb3VudF9sZWFmKDQs IGksICZ1LmwpOworCisgICAgICAgICAgICBpZiAoIHUuYy50eXBlID09IDAgKQorICAgICAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBwLT5jYWNoZS5zdWJsZWFmW2ldID0gdS5jOwor ICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIGNob2ljZSBvZiBDUFVJRF9H VUVTVF9OUl9DQUNIRSBpcyBhcmJpdHJhcnkuICBJdCBpcyBleHBlY3RlZAorICAgICAgICAgKiB0 aGF0IGl0IHdpbGwgZXZlbnR1YWxseSBuZWVkIGluY3JlYXNpbmcgZm9yIGZ1dHVyZSBoYXJkd2Fy ZS4KKyAgICAgICAgICovCisjaWZkZWYgX19YRU5fXworICAgICAgICBpZiAoIGkgPT0gQVJSQVlf U0laRShwLT5jYWNoZS5yYXcpICkKKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORwor ICAgICAgICAgICAgICAgICAgICJDUFVJRDogSW5zdWZmaWNpZW50IExlYWYgNCBzcGFjZSBmb3Ig dGhpcyBoYXJkd2FyZVxuIik7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIHAtPmJhc2ljLm1h eF9sZWFmID49IDcgKQorICAgIHsKKyAgICAgICAgY3B1aWRfY291bnRfbGVhZig3LCAwLCAmcC0+ ZmVhdC5yYXdbMF0pOworCisgICAgICAgIGZvciAoIGkgPSAxOyBpIDwgbWluKEFSUkFZX1NJWkUo cC0+ZmVhdC5yYXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mZWF0Lm1heF9z dWJsZWFmICsgMXVsKTsgKytpICkKKyAgICAgICAgICAgIGNwdWlkX2NvdW50X2xlYWYoNywgaSwg JnAtPmZlYXQucmF3W2ldKTsKKyAgICB9CisKKyAgICBpZiAoIHAtPmJhc2ljLm1heF9sZWFmID49 IDB4YiApCisgICAgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBzdHJ1Y3QgY3B1aWRf bGVhZiBsOworICAgICAgICAgICAgc3RydWN0IGNwdWlkX3RvcG9fbGVhZiB0OworICAgICAgICB9 IHU7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAtPnRvcG8ucmF3KTsg KytpICkKKyAgICAgICAgeworICAgICAgICAgICAgY3B1aWRfY291bnRfbGVhZigweGIsIGksICZ1 LmwpOworCisgICAgICAgICAgICBpZiAoIHUudC50eXBlID09IDAgKQorICAgICAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgICBwLT50b3BvLnN1YmxlYWZbaV0gPSB1LnQ7CisgICAgICAg IH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgY2hvaWNlIG9mIENQVUlEX0dVRVNUX05S X1RPUE8gaXMgcGVyIHRoZSBtYW51YWwuICBJdCBtYXkgbmVlZAorICAgICAgICAgKiB0byBncm93 IGZvciBmdXR1cmUgaGFyZHdhcmUuCisgICAgICAgICAqLworI2lmZGVmIF9fWEVOX18KKyAgICAg ICAgaWYgKCBpID09IEFSUkFZX1NJWkUocC0+dG9wby5yYXcpICYmCisgICAgICAgICAgICAgKGNw dWlkX2NvdW50X2xlYWYoMHhiLCBpLCAmdS5sKSwgdS50LnR5cGUgIT0gMCkgKQorICAgICAgICAg ICAgcHJpbnRrKFhFTkxPR19XQVJOSU5HCisgICAgICAgICAgICAgICAgICAgIkNQVUlEOiBJbnN1 ZmZpY2llbnQgTGVhZiAweGIgc3BhY2UgZm9yIHRoaXMgaGFyZHdhcmVcbiIpOworI2VuZGlmCisg ICAgfQorCisgICAgaWYgKCBwLT5iYXNpYy5tYXhfbGVhZiA+PSAweGQgKQorICAgIHsKKyAgICAg ICAgdWludDY0X3QgeHN0YXRlczsKKworICAgICAgICBjcHVpZF9jb3VudF9sZWFmKDB4ZCwgMCwg JnAtPnhzdGF0ZS5yYXdbMF0pOworICAgICAgICBjcHVpZF9jb3VudF9sZWFmKDB4ZCwgMSwgJnAt PnhzdGF0ZS5yYXdbMV0pOworCisgICAgICAgIHhzdGF0ZXMgID0gKCh1aW50NjRfdCkocC0+eHN0 YXRlLnhjcjBfaGlnaCB8IHAtPnhzdGF0ZS54c3NfaGlnaCkgPDwgMzIpOworICAgICAgICB4c3Rh dGVzIHw9ICAgICAgICAgICAgKHAtPnhzdGF0ZS54Y3IwX2xvdyAgfCBwLT54c3RhdGUueHNzX2xv dyk7CisKKyAgICAgICAgZm9yICggaSA9IDI7IGkgPCBtaW4oNjN1bCwgQVJSQVlfU0laRShwLT54 c3RhdGUucmF3KSk7ICsraSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggeHN0YXRlcyAm ICgxdWwgPDwgaSkgKQorICAgICAgICAgICAgICAgIGNwdWlkX2NvdW50X2xlYWYoMHhkLCBpLCAm cC0+eHN0YXRlLnJhd1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBFeHRlbmRlZCBs ZWF2ZXMuICovCisgICAgY3B1aWRfbGVhZigweDgwMDAwMDAwLCAmcC0+ZXh0ZC5yYXdbMF0pOwor ICAgIGZvciAoIGkgPSAxOyBpIDwgbWluKEFSUkFZX1NJWkUocC0+ZXh0ZC5yYXcpLAorICAgICAg ICAgICAgICAgICAgICAgICAgIHAtPmV4dGQubWF4X2xlYWYgKyAxIC0gMHg4MDAwMDAwMHVsKTsg KytpICkKKyAgICAgICAgY3B1aWRfbGVhZigweDgwMDAwMDAwICsgaSwgJnAtPmV4dGQucmF3W2ld KTsKK30KKwogY29uc3QgdWludDMyX3QgKng4Nl9jcHVpZF9sb29rdXBfZGVlcF9kZXBzKHVpbnQz Ml90IGZlYXR1cmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGRlZXBfZmVhdHVyZXNb XSA9IElOSVRfREVFUF9GRUFUVVJFUzsKLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls bWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==