From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v14 03/23] x86: refactor psr: remove L3 CAT/CDP codes. Date: Sat, 15 Jul 2017 08:31:36 +0800 Message-ID: <1500078716-5928-4-git-send-email-yi.y.sun@linux.intel.com> References: <1500078716-5928-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dWBDd-000736-1J for xen-devel@lists.xenproject.org; Sat, 15 Jul 2017 00:46:01 +0000 In-Reply-To: <1500078716-5928-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgY2FjaGUgYWxsb2NhdGlvbiBjb2RlcyBpbiBwc3IuYyBkbyBub3QgY29uc2lk ZXIKZnV0dXJlIGZlYXR1cmVzIGFkZGl0aW9uIGFuZCBhcmUgbm90IGZyaWVuZGx5IHRvIGV4dGVu ZC4KClRvIG1ha2UgcHNyLmMgYmUgbW9yZSBmbGV4aWJsZSB0byBhZGQgbmV3IGZlYXR1cmVzIGFu ZCBmdWxmaWxsCnRoZSBwcm9ncmFtIHByaW5jaXBsZSwgb3BlbiBmb3IgZXh0ZW5zaW9uIGJ1dCBj bG9zZWQgZm9yCm1vZGlmaWNhdGlvbiwgd2UgaGF2ZSB0byByZWZhY3RvciB0aGUgcHNyLmM6CjEu IEFuYWx5emUgY2FjaGUgYWxsb2NhdGlvbiBmZWF0dXJlcyBhbmQgYWJzdHJhY3QgZ2VuZXJhbCBk YXRhCiAgIHN0cnVjdHVyZXMuCjIuIEFuYWx5emUgdGhlIGluaXQgYW5kIGFsbCBvdGhlciBmdW5j dGlvbnMgZmxvdywgYWJzdHJhY3QgYWxsCiAgIHN0ZXBzIHRoYXQgZGlmZmVyZW50IGZlYXR1cmVz IG1heSBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgIE1ha2UgdGhlc2Ugc3RlcHMg YmUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZWdpc3RlciBmZWF0dXJlCiAgIHNwZWNpZmljIGZ1 Y3Rpb25zLiBUaGVuLCB0aGUgbWFpbiBwcm9jZXNzZXMgd2lsbCBub3QgYmUgY2hhbmdlZAogICB3 aGVuIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUuCgpCZWNhdXNlIHRoZSBxdWFudGl0eSBvZiBy ZWZhY3RvciBjb2RlcyBpcyBiaWcgYW5kIHRoZSBsb2dpY3MgYXJlCmNoYW5nZWQgYSBsb3QsIGl0 IHdpbGwgY2F1c2UgcmV2aWV3ZXJzIGNvbmZ1c2VkIGlmIGp1c3QgY2hhbmdlCm9sZCBjb2Rlcy4g UmV2aWV3ZXJzIGhhdmUgdG8gdW5kZXJzdGFuZCBib3RoIG9sZCBjb2RlcyBhbmQgbmV3CmltcGxl bWVudGF0aW9ucy4gQWZ0ZXIgcmV2aWV3IGl0ZXJhdGlvbnMgZnJvbSBWMSB0byBWMywgSmFuIGhh cwpwcm9wb3NlZCB0byByZW1vdmUgYWxsIG9sZCBjYWNoZSBhbGxvY2F0aW9uIGNvZGVzIGZpcnN0 bHksIHRoZW4KaW1wbGVtZW50IG5ldyBjb2RlcyBzdGVwIGJ5IHN0ZXAuIFRoaXMgd2lsbCBoZWxw IHRvIG1ha2UgY29kZXMKYmUgbW9yZSBlYXNpbHkgcmV2aWV3YWJsZS4KClRoZXJlIGlzIG5vIGNv bnN0cnVjdGlvbiB3aXRob3V0IGRlc3RydWN0aW9uLiBTbywgdGhpcyBwYXRjaApyZW1vdmVzIGFs bCBjdXJyZW50IEwzIENBVC9DRFAgY29kZXMgaW4gcHNyLmMuIFRoZSBmb2xsb3dpbmcKcGF0Y2hl cyB3aWxsIGludHJvZHVjZSB0aGUgbmV3IG1lY2hhbmlzbS4KClNpZ25lZC1vZmYtYnk6IFlpIFN1 biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgpSZXZpZXdlZC1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQu d2lsa0BvcmFjbGUuY29tPgpSZXZpZXdlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT4KLS0tCnY0OgogICAgLSBjcmVhdGUgdGhpcyBwYXRjaCB0byBtYWtlIGNvZGVzIGVhc2lseSB1 bmRlcnN0YW5kLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQotLS0KIHhlbi9hcmNo L3g4Ni9wc3IuYyB8IDQ3MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9w c3IuYwppbmRleCAzODFmOWEwLi45NmE4NTg5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNy LmMKKysrIGIveGVuL2FyY2gveDg2L3Bzci5jCkBAIC0yMywyNCArMjMsNiBAQAogI2RlZmluZSBQ U1JfQ0FUICAgICAgICAoMTw8MSkKICNkZWZpbmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCiAKLXN0 cnVjdCBwc3JfY2F0X2NibSB7Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBjYm07Ci0g ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50NjRfdCBjb2RlOwotICAgICAgICAgICAg dWludDY0X3QgZGF0YTsKLSAgICAgICAgfTsKLSAgICB9OwotICAgIHVuc2lnbmVkIGludCByZWY7 Ci19OwotCi1zdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyB7Ci0gICAgdW5zaWduZWQgaW50IGNi bV9sZW47Ci0gICAgdW5zaWduZWQgaW50IGNvc19tYXg7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2Jt ICpjb3NfdG9fY2JtOwotICAgIHNwaW5sb2NrX3QgY2JtX2xvY2s7Ci19OwotCiBzdHJ1Y3QgcHNy X2Fzc29jIHsKICAgICB1aW50NjRfdCB2YWw7CiAgICAgdWludDY0X3QgY29zX21hc2s7CkBAIC00 OCwyNiArMzAsMTEgQEAgc3RydWN0IHBzcl9hc3NvYyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3Jl YWRfbW9zdGx5IHBzcl9jbXQ7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5 IGNhdF9zb2NrZXRfZW5hYmxlOwotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpf X3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfaW5mbzsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3Jl YWRfbW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxlOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9wdF9w c3I7CiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owot c3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG9wdF9jb3NfbWF4ID0gMjU1Owogc3Rh dGljIHVpbnQ2NF90IHJtaWRfbWFzazsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNy X2Fzc29jLCBwc3JfYXNzb2MpOwogCi1zdGF0aWMgc3RydWN0IHBzcl9jYXRfY2JtICp0ZW1wX2Nv c190b19jYm07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQg aW50IHNvY2tldCkKLXsKLSAgICBpZiAoIGxpa2VseShzb2NrZXQgPCBucl9zb2NrZXRzKSApCi0g ICAgICAgIHJldHVybiBjcHVtYXNrX2FueShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKTsKLQotICAg IHJldHVybiBucl9jcHVfaWRzOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jv b2woY2hhciAqcywgY2hhciAqdmFsdWUsIGNoYXIgKmZlYXR1cmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2spCiB7CkBAIC0xMDcsOSArNzQsNiBA QCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX3BhcmFtKGNoYXIgKnMpCiAgICAgICAgIGlm ICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJybWlkX21heCIpICkKICAgICAgICAgICAgIG9wdF9y bWlkX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZhbF9zdHIsIE5VTEwsIDApOwogCi0gICAgICAgIGlm ICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJjb3NfbWF4IikgKQotICAgICAgICAgICAgb3B0X2Nv c19tYXggPSBzaW1wbGVfc3RydG91bCh2YWxfc3RyLCBOVUxMLCAwKTsKLQogICAgICAgICBzID0g c3MgKyAxOwogICAgIH0gd2hpbGUgKCBzcyApOwogfQpAQCAtMjEzLDE2ICsxNzcsNyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX2luaXQodm9pZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fz c29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CiAKLSAgICBpZiAoIGNhdF9zb2NrZXRf aW5mbyApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tl dChzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0gICAgICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBj YXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwg PDwgZ2V0X2NvdW50X29yZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRfc29j a2V0X2luZm9bc29ja2V0XS5jb3NfbWF4KSkgLSAxKSA8PCAzMjsKLSAgICB9Ci0KLSAgICBpZiAo IHBzcl9jbXRfZW5hYmxlZCgpIHx8IHBzcmEtPmNvc19tYXNrICkKKyAgICBpZiAoIHBzcl9jbXRf ZW5hYmxlZCgpICkKICAgICAgICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9BU1NPQywgcHNyYS0+dmFs KTsKIH0KIApAQCAtMjMxLDEyICsxODYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29j X3JtaWQodWludDY0X3QgKnJlZywgdW5zaWduZWQgaW50IHJtaWQpCiAgICAgKnJlZyA9ICgqcmVn ICYgfnJtaWRfbWFzaykgfCAocm1pZCAmIHJtaWRfbWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg dm9pZCBwc3JfYXNzb2NfY29zKHVpbnQ2NF90ICpyZWcsIHVuc2lnbmVkIGludCBjb3MsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjb3NfbWFzaykKLXsKLSAgICAq cmVnID0gKCpyZWcgJiB+Y29zX21hc2spIHwgKCgodWludDY0X3QpY29zIDw8IDMyKSAmIGNvc19t YXNrKTsKLX0KLQogdm9pZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKIHsK ICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CkBAIC0y NDUsNDU5ICsxOTQsNTQgQEAgdm9pZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAq ZCkKICAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpICkKICAgICAgICAgcHNyX2Fzc29jX3JtaWQo JnJlZywgZC0+YXJjaC5wc3Jfcm1pZCk7CiAKLSAgICBpZiAoIHBzcmEtPmNvc19tYXNrICkKLSAg ICAgICAgcHNyX2Fzc29jX2NvcygmcmVnLCBkLT5hcmNoLnBzcl9jb3NfaWRzID8KLSAgICAgICAg ICAgICAgICAgICAgICBkLT5hcmNoLnBzcl9jb3NfaWRzW2NwdV90b19zb2NrZXQoc21wX3Byb2Nl c3Nvcl9pZCgpKV0gOgotICAgICAgICAgICAgICAgICAgICAgIDAsIHBzcmEtPmNvc19tYXNrKTsK LQogICAgIGlmICggcmVnICE9IHBzcmEtPnZhbCApCiAgICAgewogICAgICAgICB3cm1zcmwoTVNS X0lBMzJfUFNSX0FTU09DLCByZWcpOwogICAgICAgICBwc3JhLT52YWwgPSByZWc7CiAgICAgfQog fQotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpnZXRfY2F0X3NvY2tldF9pbmZv KHVuc2lnbmVkIGludCBzb2NrZXQpCi17Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAg ICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0KLSAgICBpZiAoIHNvY2tldCA+PSBucl9z b2NrZXRzICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT1RTT0NLKTsKLQotICAgIGlmICgg IXRlc3RfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT0VOVCk7Ci0KLSAgICByZXR1cm4gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0Owot fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2RwX2lzX2VuYWJsZWQodW5zaWduZWQgaW50IHNvY2tl dCkKLXsKLSAgICByZXR1cm4gY2RwX3NvY2tldF9lbmFibGUgJiYgdGVzdF9iaXQoc29ja2V0LCBj ZHBfc29ja2V0X2VuYWJsZSk7Ci19CiAKIGludCBwc3JfZ2V0X2NhdF9sM19pbmZvKHVuc2lnbmVk IGludCBzb2NrZXQsIHVpbnQzMl90ICpjYm1fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgKmNvc19tYXgsIHVpbnQzMl90ICpmbGFncykKIHsKLSAgICBzdHJ1Y3QgcHNyX2Nh dF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsKLQotICAg IGlmICggSVNfRVJSKGluZm8pICkKLSAgICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7Ci0KLSAg ICAqY2JtX2xlbiA9IGluZm8tPmNibV9sZW47Ci0gICAgKmNvc19tYXggPSBpbmZvLT5jb3NfbWF4 OwotCi0gICAgKmZsYWdzID0gMDsKLSAgICBpZiAoIGNkcF9pc19lbmFibGVkKHNvY2tldCkgKQot ICAgICAgICAqZmxhZ3MgfD0gWEVOX1NZU0NUTF9QU1JfQ0FUX0wzX0NEUDsKLQogICAgIHJldHVy biAwOwogfQogCiBpbnQgcHNyX2dldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQg aW50IHNvY2tldCwKICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqY2JtLCBlbnVtIGNibV90 eXBlIHR5cGUpCiB7Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBnZXRf Y2F0X3NvY2tldF9pbmZvKHNvY2tldCk7Ci0gICAgYm9vbCBjZHBfZW5hYmxlZCA9IGNkcF9pc19l bmFibGVkKHNvY2tldCk7Ci0KLSAgICBpZiAoIElTX0VSUihpbmZvKSApCi0gICAgICAgIHJldHVy biBQVFJfRVJSKGluZm8pOwotCi0gICAgc3dpdGNoICggdHlwZSApCi0gICAgewotICAgIGNhc2Ug UFNSX0NCTV9UWVBFX0wzOgotICAgICAgICBpZiAoIGNkcF9lbmFibGVkICkKLSAgICAgICAgICAg IHJldHVybiAtRVhERVY7Ci0gICAgICAgICpjYm0gPSBpbmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gu cHNyX2Nvc19pZHNbc29ja2V0XV0uY2JtOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNS X0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAgIGlmICggIWNkcF9lbmFibGVkICkKLSAgICAgICAg ICAgICpjYm0gPSBpbmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0u Y2JtOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtk LT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNvZGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg Y2FzZSBQU1JfQ0JNX1RZUEVfTDNfREFUQToKLSAgICAgICAgaWYgKCAhY2RwX2VuYWJsZWQgKQot ICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tz b2NrZXRdXS5jYm07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpjYm0gPSBpbmZvLT5jb3Nf dG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uZGF0YTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K LSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBp bnQgY2JtX2xlbiwgdWludDY0X3QgY2JtKQotewotICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQs IHplcm9fYml0OwotCi0gICAgLyogU2V0IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdlIG9m IFswLCBjYm1fbGVuKS4gKi8KLSAgICBpZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVuKSApCi0g ICAgICAgIHJldHVybiAwOwotCi0gICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRvIGJlIHNl dC4gKi8KLSAgICBpZiAoIGNibSA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmaXJz dF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmY2JtLCBjYm1fbGVuKTsKLSAgICB6ZXJvX2JpdCA9IGZp bmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9iaXQpOwotCi0gICAgLyogU2V0 IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9s ZW4gJiYKLSAgICAgICAgIGZpbmRfbmV4dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19iaXQpIDwg Y2JtX2xlbiApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0cnVj dCBjb3NfY2JtX2luZm8KLXsKLSAgICB1bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2wgY2RwOwot ICAgIHVpbnQ2NF90IGNibV9jb2RlOwotICAgIHVpbnQ2NF90IGNibV9kYXRhOwotfTsKLQotc3Rh dGljIHZvaWQgZG9fd3JpdGVfbDNfY2JtKHZvaWQgKmRhdGEpCi17Ci0gICAgc3RydWN0IGNvc19j Ym1faW5mbyAqaW5mbyA9IGRhdGE7Ci0KLSAgICBpZiAoIGluZm8tPmNkcCApCi0gICAgewotICAg ICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0tfQ09ERShpbmZvLT5jb3MpLCBpbmZvLT5j Ym1fY29kZSk7Ci0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTS19EQVRBKGluZm8t PmNvcyksIGluZm8tPmNibV9kYXRhKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICB3cm1zcmwo TVNSX0lBMzJfUFNSX0wzX01BU0soaW5mby0+Y29zKSwgaW5mby0+Y2JtX2NvZGUpOwotfQotCi1z dGF0aWMgaW50IHdyaXRlX2wzX2NibSh1bnNpZ25lZCBpbnQgc29ja2V0LCB1bnNpZ25lZCBpbnQg Y29zLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtX2NvZGUsIHVpbnQ2NF90 IGNibV9kYXRhLCBib29sIGNkcCkKLXsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZvIGluZm8gPQot ICAgIHsKLSAgICAgICAgLmNvcyA9IGNvcywKLSAgICAgICAgLmNibV9jb2RlID0gY2JtX2NvZGUs Ci0gICAgICAgIC5jYm1fZGF0YSA9IGNibV9kYXRhLAotICAgICAgICAuY2RwID0gY2RwLAotICAg IH07Ci0KLSAgICBpZiAoIHNvY2tldCA9PSBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3JfaWQo KSkgKQotICAgICAgICBkb193cml0ZV9sM19jYm0oJmluZm8pOwotICAgIGVsc2UKLSAgICB7Ci0g ICAgICAgIHVuc2lnbmVkIGludCBjcHUgPSBnZXRfc29ja2V0X2NwdShzb2NrZXQpOwotCi0gICAg ICAgIGlmICggY3B1ID49IG5yX2NwdV9pZHMgKQotICAgICAgICAgICAgcmV0dXJuIC1FTk9UU09D SzsKLSAgICAgICAgb25fc2VsZWN0ZWRfY3B1cyhjcHVtYXNrX29mKGNwdSksIGRvX3dyaXRlX2wz X2NibSwgJmluZm8sIDEpOwotICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IGZpbmRfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21heCwK LSAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtX2NvZGUsIHVpbnQ2NF90IGNibV9kYXRh LCBib29sIGNkcF9lbmFibGVkKQotewotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0KLSAgICBmb3Ig KCBjb3MgPSAwOyBjb3MgPD0gY29zX21heDsgY29zKysgKQotICAgIHsKLSAgICAgICAgaWYgKCAo bWFwW2Nvc10ucmVmIHx8IGNvcyA9PSAwKSAmJgotICAgICAgICAgICAgICgoIWNkcF9lbmFibGVk ICYmIG1hcFtjb3NdLmNibSA9PSBjYm1fY29kZSkgfHwKLSAgICAgICAgICAgICAgKGNkcF9lbmFi bGVkICYmIG1hcFtjb3NdLmNvZGUgPT0gY2JtX2NvZGUgJiYKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPT0gY2JtX2RhdGEpKSApCi0gICAgICAgICAgICByZXR1 cm4gY29zOwotICAgIH0KLQotICAgIHJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgaW50IHBp Y2tfYXZhaWxfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21h eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCi17Ci0g ICAgdW5zaWduZWQgaW50IGNvczsKLQotICAgIC8qIElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25s eSBieSB0aGUgZG9tYWluLCB0aGVuIHVzZSBpdC4gKi8KLSAgICBpZiAoIG1hcFtvbGRfY29zXS5y ZWYgPT0gMSAmJiBvbGRfY29zICE9IDAgKQotICAgICAgICByZXR1cm4gb2xkX2NvczsKLQotICAg IC8qIEZpbmQgYW4gdW51c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCi0gICAgZm9yICggY29z ID0gMTsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKLSAgICAgICAgaWYgKCBtYXBbY29zXS5yZWYg PT0gMCApCi0gICAgICAgICAgICByZXR1cm4gY29zOwotCi0gICAgcmV0dXJuIC1FTk9FTlQ7Ci19 Ci0KIGludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29j a2V0LAogICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBl KQogewotICAgIHVuc2lnbmVkIGludCBvbGRfY29zLCBjb3NfbWF4OwotICAgIGludCBjb3MsIHJl dDsKLSAgICB1aW50NjRfdCBjYm1fZGF0YSwgY2JtX2NvZGU7Ci0gICAgYm9vbCBjZHBfZW5hYmxl ZCA9IGNkcF9pc19lbmFibGVkKHNvY2tldCk7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICptYXA7 Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBnZXRfY2F0X3NvY2tldF9p bmZvKHNvY2tldCk7Ci0KLSAgICBpZiAoIElTX0VSUihpbmZvKSApCi0gICAgICAgIHJldHVybiBQ VFJfRVJSKGluZm8pOwotCi0gICAgaWYgKCAhcHNyX2NoZWNrX2NibShpbmZvLT5jYm1fbGVuLCBj Ym0pICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBpZiAoICFjZHBfZW5hYmxlZCAm JiAodHlwZSA9PSBQU1JfQ0JNX1RZUEVfTDNfQ09ERSB8fAotICAgICAgICAgICAgICAgICAgICAg ICAgICB0eXBlID09IFBTUl9DQk1fVFlQRV9MM19EQVRBKSApCi0gICAgICAgIHJldHVybiAtRU5Y SU87Ci0KLSAgICBjb3NfbWF4ID0gaW5mby0+Y29zX21heDsKLSAgICBvbGRfY29zID0gZC0+YXJj aC5wc3JfY29zX2lkc1tzb2NrZXRdOwotICAgIG1hcCA9IGluZm8tPmNvc190b19jYm07Ci0KLSAg ICBzd2l0Y2ggKCB0eXBlICkKLSAgICB7Ci0gICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDM6Ci0gICAg ICAgIGNibV9jb2RlID0gY2JtOwotICAgICAgICBjYm1fZGF0YSA9IGNibTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19DT0RFOgotICAgICAgICBjYm1fY29kZSA9 IGNibTsKLSAgICAgICAgY2JtX2RhdGEgPSBtYXBbb2xkX2Nvc10uZGF0YTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgotICAgICAgICBjYm1fY29kZSA9 IG1hcFtvbGRfY29zXS5jb2RlOwotICAgICAgICBjYm1fZGF0YSA9IGNibTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKLSAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9j ayk7Ci0gICAgY29zID0gZmluZF9jb3MobWFwLCBjb3NfbWF4LCBjYm1fY29kZSwgY2JtX2RhdGEs IGNkcF9lbmFibGVkKTsKLSAgICBpZiAoIGNvcyA+PSAwICkKLSAgICB7Ci0gICAgICAgIGlmICgg Y29zID09IG9sZF9jb3MgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmaW5m by0+Y2JtX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgZWxzZQotICAgIHsKLSAgICAgICAgY29zID0gcGlja19hdmFpbF9jb3MobWFwLCBjb3NfbWF4 LCBvbGRfY29zKTsKLSAgICAgICAgaWYgKCBjb3MgPCAwICkKLSAgICAgICAgewotICAgICAgICAg ICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBjb3M7 Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXZSB0cnkgdG8gYXZvaWQgd3JpdGluZyBNU1IuICov Ci0gICAgICAgIGlmICggKGNkcF9lbmFibGVkICYmCi0gICAgICAgICAgICAgKG1hcFtjb3NdLmNv ZGUgIT0gY2JtX2NvZGUgfHwgbWFwW2Nvc10uZGF0YSAhPSBjYm1fZGF0YSkpIHx8Ci0gICAgICAg ICAgICAgKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gIT0gY2JtX2NvZGUpICkKLSAgICAg ICAgewotICAgICAgICAgICAgcmV0ID0gd3JpdGVfbDNfY2JtKHNvY2tldCwgY29zLCBjYm1fY29k ZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKLSAgICAgICAgICAgIGlmICggcmV0ICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwot ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt YXBbY29zXS5jb2RlID0gY2JtX2NvZGU7Ci0gICAgICAgICAgICBtYXBbY29zXS5kYXRhID0gY2Jt X2RhdGE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtYXBbY29zXS5yZWYrKzsKLSAgICBtYXBb b2xkX2Nvc10ucmVmLS07Ci0gICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKLQotICAg IGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XSA9IGNvczsKLQogICAgIHJldHVybiAwOwogfQog Ci0vKiBDYWxsZWQgd2l0aCBkb21haW4gbG9jayBoZWxkLCBubyBleHRyYSBsb2NrIG5lZWRlZCBm b3IgJ3Bzcl9jb3NfaWRzJyAqLwotc3RhdGljIHZvaWQgcHNyX2ZyZWVfY29zKHN0cnVjdCBkb21h aW4gKmQpCi17Ci0gICAgdW5zaWduZWQgaW50IHNvY2tldDsKLSAgICB1bnNpZ25lZCBpbnQgY29z OwotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvOwotCi0gICAgaWYoICFkLT5h cmNoLnBzcl9jb3NfaWRzICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yX2VhY2hfc2V0X2Jp dChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlLCBucl9zb2NrZXRzKQotICAgIHsKLSAgICAgICAg aWYgKCAoY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdKSA9PSAwICkKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGluZm8gPSBjYXRfc29ja2V0X2luZm8gKyBzb2NrZXQ7 Ci0gICAgICAgIHNwaW5fbG9jaygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICBpbmZvLT5jb3Nf dG9fY2JtW2Nvc10ucmVmLS07Ci0gICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7 Ci0gICAgfQotCi0gICAgeGZyZWUoZC0+YXJjaC5wc3JfY29zX2lkcyk7Ci0gICAgZC0+YXJjaC5w c3JfY29zX2lkcyA9IE5VTEw7Ci19Ci0KIGludCBwc3JfZG9tYWluX2luaXQoc3RydWN0IGRvbWFp biAqZCkKIHsKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgewotICAgICAgICBkLT5h cmNoLnBzcl9jb3NfaWRzID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBpbnQsIG5yX3NvY2tldHMp OwotICAgICAgICBpZiAoICFkLT5hcmNoLnBzcl9jb3NfaWRzICkKLSAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOwotICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCiB2b2lkIHBzcl9kb21haW5f ZnJlZShzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIHBzcl9mcmVlX3JtaWQoZCk7Ci0gICAgcHNy X2ZyZWVfY29zKGQpOwotfQotCi1zdGF0aWMgaW50IGNhdF9jcHVfcHJlcGFyZSh1bnNpZ25lZCBp bnQgY3B1KQotewotICAgIGlmICggIWNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIHJldHVybiAw OwotCi0gICAgaWYgKCB0ZW1wX2Nvc190b19jYm0gPT0gTlVMTCAmJgotICAgICAgICAgKHRlbXBf Y29zX3RvX2NibSA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9jYXRfY2JtLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Nvc19tYXggKyAxVUwpKSA9PSBO VUxMICkKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh dGljIHZvaWQgY2F0X2NwdV9pbml0KHZvaWQpCi17Ci0gICAgdW5zaWduZWQgaW50IGVheCwgZWJ4 LCBlY3gsIGVkeDsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbzsKLSAgICB1 bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29y X2lkKCk7Ci0gICAgdWludDY0X3QgdmFsOwotICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAq YyA9IGNwdV9kYXRhICsgY3B1OwotCi0gICAgaWYgKCAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9Q UUUpIHx8IGMtPmNwdWlkX2xldmVsIDwgUFNSX0NQVUlEX0xFVkVMX0NBVCApCi0gICAgICAgIHJl dHVybjsKLQotICAgIHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1KTsKLSAgICBpZiAoIHRlc3Rf Yml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg Y3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMCwgJmVheCwgJmVieCwgJmVjeCwgJmVk eCk7Ci0gICAgaWYgKCBlYnggJiBQU1JfUkVTT1VSQ0VfVFlQRV9MMyApCi0gICAgewotICAgICAg ICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAxLCAmZWF4LCAmZWJ4LCAmZWN4LCAm ZWR4KTsKLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLSAgICAgICAg aW5mby0+Y2JtX2xlbiA9IChlYXggJiAweDFmKSArIDE7Ci0gICAgICAgIGluZm8tPmNvc19tYXgg PSBtaW4ob3B0X2Nvc19tYXgsIGVkeCAmIDB4ZmZmZik7Ci0KLSAgICAgICAgaW5mby0+Y29zX3Rv X2NibSA9IHRlbXBfY29zX3RvX2NibTsKLSAgICAgICAgdGVtcF9jb3NfdG9fY2JtID0gTlVMTDsK LSAgICAgICAgLyogY29zPTAgaXMgcmVzZXJ2ZWQgYXMgZGVmYXVsdCBjYm0oYWxsIG9uZXMpLiAq LwotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtWzBdLmNibSA9ICgxdWxsIDw8IGluZm8tPmNibV9s ZW4pIC0gMTsKLQotICAgICAgICBzcGluX2xvY2tfaW5pdCgmaW5mby0+Y2JtX2xvY2spOwotCi0g ICAgICAgIHNldF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSk7Ci0KLSAgICAgICAgaWYg KCAoZWN4ICYgUFNSX0NBVF9DRFBfQ0FQQUJJTElUWSkgJiYgKG9wdF9wc3IgJiBQU1JfQ0RQKSAm JgotICAgICAgICAgICAgIGNkcF9zb2NrZXRfZW5hYmxlICYmICF0ZXN0X2JpdChzb2NrZXQsIGNk cF9zb2NrZXRfZW5hYmxlKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm8tPmNvc190b19j Ym1bMF0uY29kZSA9ICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMTsKLSAgICAgICAgICAgIGlu Zm8tPmNvc190b19jYm1bMF0uZGF0YSA9ICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMTsKLQot ICAgICAgICAgICAgLyogV2Ugb25seSB3cml0ZSBtYXNrMSBzaW5jZSBtYXNrMCBpcyBhbHdheXMg YWxsIG9uZXMgYnkgZGVmYXVsdC4gKi8KLSAgICAgICAgICAgIHdybXNybChNU1JfSUEzMl9QU1Jf TDNfTUFTSygxKSwgKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxKTsKLQotICAgICAgICAgICAg cmRtc3JsKE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2YWwpOwotICAgICAgICAgICAgd3Jtc3Js KE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2YWwgfCAoMSA8PCBQU1JfTDNfUU9TX0NEUF9FTkFC TEVfQklUKSk7Ci0KLSAgICAgICAgICAgIC8qIEN1dCBoYWxmIG9mIGNvc19tYXggd2hlbiBDRFAg aXMgZW5hYmxlZC4gKi8KLSAgICAgICAgICAgIGluZm8tPmNvc19tYXggPj49IDE7Ci0KLSAgICAg ICAgICAgIHNldF9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJsZSk7Ci0gICAgICAgIH0KLSAg ICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6IGVuYWJsZWQgb24gc29ja2V0ICV1LCBjb3Nf bWF4OiV1LCBjYm1fbGVuOiV1LCBDRFA6JXNcbiIsCi0gICAgICAgICAgICAgICBzb2NrZXQsIGlu Zm8tPmNvc19tYXgsIGluZm8tPmNibV9sZW4sCi0gICAgICAgICAgICAgICBjZHBfaXNfZW5hYmxl ZChzb2NrZXQpID8gIm9uIiA6ICJvZmYiKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNhdF9j cHVfZmluaSh1bnNpZ25lZCBpbnQgY3B1KQotewotICAgIHVuc2lnbmVkIGludCBzb2NrZXQgPSBj cHVfdG9fc29ja2V0KGNwdSk7Ci0KLSAgICBpZiAoICFzb2NrZXRfY3B1bWFza1tzb2NrZXRdIHx8 IGNwdW1hc2tfZW1wdHkoc29ja2V0X2NwdW1hc2tbc29ja2V0XSkgKQotICAgIHsKLSAgICAgICAg c3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBjYXRfc29ja2V0X2luZm8gKyBzb2Nr ZXQ7Ci0KLSAgICAgICAgaWYgKCBpbmZvLT5jb3NfdG9fY2JtICkKLSAgICAgICAgewotICAgICAg ICAgICAgeGZyZWUoaW5mby0+Y29zX3RvX2NibSk7Ci0gICAgICAgICAgICBpbmZvLT5jb3NfdG9f Y2JtID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggY2RwX2lzX2VuYWJsZWQoc29j a2V0KSApCi0gICAgICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJsZSk7 Ci0KLSAgICAgICAgY2xlYXJfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpOwotICAgIH0K LX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBzcl9jYXRfZnJlZSh2b2lkKQotewotICAgIHhmcmVl KGNhdF9zb2NrZXRfZW5hYmxlKTsKLSAgICBjYXRfc29ja2V0X2VuYWJsZSA9IE5VTEw7Ci0gICAg eGZyZWUoY2F0X3NvY2tldF9pbmZvKTsKLSAgICBjYXRfc29ja2V0X2luZm8gPSBOVUxMOwotfQot Ci1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wc3JfY2F0KHZvaWQpCi17Ci0gICAgaWYgKCBvcHRf Y29zX21heCA8IDEgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6IGRp c2FibGVkLCBjb3NfbWF4IGlzIHRvbyBzbWFsbFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9 Ci0KLSAgICBjYXRfc29ja2V0X2VuYWJsZSA9IHh6YWxsb2NfYXJyYXkodW5zaWduZWQgbG9uZywg QklUU19UT19MT05HUyhucl9zb2NrZXRzKSk7Ci0gICAgY2F0X3NvY2tldF9pbmZvID0geHphbGxv Y19hcnJheShzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbywgbnJfc29ja2V0cyk7Ci0gICAgY2Rw X3NvY2tldF9lbmFibGUgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGxvbmcsIEJJVFNfVE9fTE9O R1MobnJfc29ja2V0cykpOwotCi0gICAgaWYgKCAhY2F0X3NvY2tldF9lbmFibGUgfHwgIWNhdF9z b2NrZXRfaW5mbyApCi0gICAgICAgIHBzcl9jYXRfZnJlZSgpOwogfQogCiBzdGF0aWMgaW50IHBz cl9jcHVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQogewotICAgIHJldHVybiBjYXRfY3B1X3By ZXBhcmUoY3B1KTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcHNyX2NwdV9pbml0 KHZvaWQpCiB7Ci0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQotICAgICAgICBjYXRfY3B1X2lu aXQoKTsKLQogICAgIHBzcl9hc3NvY19pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBzcl9jcHVf ZmluaSh1bnNpZ25lZCBpbnQgY3B1KQogewotICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKLSAg ICAgICAgY2F0X2NwdV9maW5pKGNwdSk7CisgICAgcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGNw dV9jYWxsYmFjaygKQEAgLTczOCwxNCArMjgyLDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IHBzcl9w cmVzbXBfaW5pdCh2b2lkKQogICAgIGlmICggKG9wdF9wc3IgJiBQU1JfQ01UKSAmJiBvcHRfcm1p ZF9tYXggKQogICAgICAgICBpbml0X3Bzcl9jbXQob3B0X3JtaWRfbWF4KTsKIAotICAgIGlmICgg b3B0X3BzciAmIFBTUl9DQVQgKQotICAgICAgICBpbml0X3Bzcl9jYXQoKTsKLQotICAgIGlmICgg cHNyX2NwdV9wcmVwYXJlKDApICkKLSAgICAgICAgcHNyX2NhdF9mcmVlKCk7CisgICAgcHNyX2Nw dV9wcmVwYXJlKDApOwogCiAgICAgcHNyX2NwdV9pbml0KCk7Ci0gICAgaWYgKCBwc3JfY210X2Vu YWJsZWQoKSB8fCBjYXRfc29ja2V0X2luZm8gKQorICAgIGlmICggcHNyX2NtdF9lbmFibGVkKCkg KQogICAgICAgICByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9uZmIpOwogCiAgICAgcmV0dXJu IDA7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=