From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergej Proskurin Subject: [PATCH v4 7/9] arm/mem_access: Add long-descriptor based gpt Date: Tue, 20 Jun 2017 22:33:30 +0200 Message-ID: <20170620203332.17833-8-proskurin@sec.in.tum.de> References: <20170620203332.17833-1-proskurin@sec.in.tum.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dNPqp-0007qQ-2B for xen-devel@lists.xenproject.org; Tue, 20 Jun 2017 20:34:15 +0000 In-Reply-To: <20170620203332.17833-1-proskurin@sec.in.tum.de> 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: Sergej Proskurin , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org VGhpcyBjb21taXQgYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHdhbGsgdGhlIGd1ZXN0J3MgcGFnZSB0 YWJsZXMgdXNpbmcgdGhlCmxvbmctZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQg Zm9yIGJvdGggQVJNdjcgYW5kIEFSTXY4LgpTaW1pbGFyIHRvIHRoZSBoYXJkd2FyZSBhcmNoaXRl Y3R1cmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwpkaWZmZXJlbnQgcGFnZSBncmFudWxh cml0aWVzICg0SywgMTZLLCBhbmQgNjRLKS4gVGhlIGltcGxlbWVudGF0aW9uIGlzCmJhc2VkIG9u IEFSTSBEREkgMDQ4N0IuYSBKMS01OTIyLCBKMS01OTk5LCBhbmQgQVJNIERESSAwNDA2Qy5iIEIz LTE1MTAuCgpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbGFja3Mgc3VwcG9y dCBmb3IgTGFyZ2UgVkEvUEEgb24KQVJNdjguMiBhcmNoaXRlY3R1cmVzIChMVkEvTFBBLCA1Mi1i aXQgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcwpzaXplcykuIFRoZSBhc3NvY2lhdGVkIGxv Y2F0aW9uIGluIHRoZSBjb2RlIGlzIG1hcmtlZCBhcHByb3ByaWF0ZWx5LgoKU2lnbmVkLW9mZi1i eTogU2VyZ2VqIFByb3NrdXJpbiA8cHJvc2t1cmluQHNlYy5pbi50dW0uZGU+Ci0tLQpDYzogU3Rl ZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogSnVsaWVuIEdyYWxs IDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KLS0tCnYyOiBVc2UgVENSX1NaX01BU0sgaW5zdGVhZCBv ZiBUVEJDUl9TWl9NQVNLIGZvciBBUk0gMzItYml0IGd1ZXN0cyB1c2luZwogICAgdGhlIGxvbmct ZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQuCgogICAgQ29zbWV0aWMgZml4ZXMu Cgp2MzogTW92ZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gLi94ZW4vYXJjaC9hcm0vZ3Vlc3RfY29w eS5jLgoKICAgIFJlbW92ZSB0aGUgYXJyYXkgc3RyaWRlcyBhbmQgZGVjbGFyZSB0aGUgYXJyYXkg Z3JhaW5zaXplcyBhcyBzdGF0aWMKICAgIGNvbnN0IGluc3RlYWQgb2YganVzdCBjb25zdCB0byBy ZWR1Y2UgdGhlIGZ1bmN0aW9uIHN0YWNrIG92ZXJoZWFkLgoKICAgIE1vdmUgcGFydHMgb2YgdGhl IGZ1bnRpb24gZ3Vlc3Rfd2Fsa19sZCBpbnRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zCiAgICBnZXRf dHRicl9hbmRfZ3Jhbl82NGJpdCBhbmQgZ2V0X3RvcF9iaXQgdG8gcmVkdWNlIGNvbXBsZXhpdHku CgogICAgVXNlIHRoZSBtYWNybyBCSVQoeCkgaW5zdGVhZCBvZiAoMVVMIDw8IHgpLgoKICAgIEFk ZCBtb3JlIGNvbW1lbnRzICYmIENvc21ldGljIGZpeGVzLgoKdjQ6IE1vdmUgZnVuY3Rpb25hbGl0 eSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvbmZpZ3VyZWQgSVBBCiAgICBvdXRw dXQtc2l6ZSBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZ2V0X2lwYV9vdXRwdXRfc2l6ZS4gSW4g dGhpcwogICAgZnVuY3Rpb24sIHdlIHJlbW92ZSB0aGUgcHJldmlvdXNseSB1c2VkIHN3aXRjaCBz dGF0ZW1lbnQsIHdoaWNoIHdhcwogICAgcmVzcG9uc2libGUgZm9yIGRpc3Rpbmd1aXNoaW5nIGJl dHdlZW4gZGlmZmVyZW50IElQQSBvdXRwdXQtc2l6ZXMuCiAgICBJbnN0ZWFkLCB3ZSByZXRyaWV2 ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW50cm9kdWNlZCBpcGFfc2l6ZXMKICAgIGFycmF5 LgoKICAgIFJlbW92ZSB0aGUgZGVmaW5lcyBHUkFOVUxFX1NJWkVfSU5ERVhfKiBhbmQgVFRCUjBf VkFMSUQgZnJvbQogICAgZ3Vlc3Rfd2Fsay5oLiBJbnN0ZWFkLCBpbnRyb2R1Y2UgdGhlIGVudW1z IGdyYW51bGVfc2l6ZV9pbmRleAogICAgYWN0aXZlX3R0YnIgZGlyZWN0bHkgaW5zaWRlIG9mIGd1 ZXN0X3dhbGsuYyBzbyB0aGF0IHRoZSBhc3NvY2lhdGVkCiAgICBmaWVsZHMgZG9uJ3QgZ2V0IGV4 cG9ydGVkLgoKICAgIEFkYXB0IHRoZSBmdW5jdGlvbiB0byB0aGUgbmV3IHBhcmFtZXRlciBvZiB0 eXBlICJzdHJ1Y3QgdmNwdSAqIi4KCiAgICBSZW1vdmUgc3VwcG9ydCBmb3IgNTJiaXQgSVBBIG91 dHB1dC1zaXplcyBlbnRpcmVseSBmcm9tIHRoaXMgY29tbWl0LgoKICAgIFVzZSBscGFlXyogaGVs cGVycyBpbnN0ZWFkIG9mIHAybV8qIGhlbHBlcnMuCgogICAgQ29zbWV0aWMgZml4ZXMgJiBBZGRp dGlvbmFsIGNvbW1lbnRzLgotLS0KIHhlbi9hcmNoL2FybS9ndWVzdF93YWxrLmMgfCAzODUgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5n ZWQsIDM4MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL2FybS9ndWVzdF93YWxrLmMgYi94ZW4vYXJjaC9hcm0vZ3Vlc3Rfd2Fsay5jCmluZGV4IGI4 YmI1NTNhNmUuLmMzN2M1OTUxNTcgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9ndWVzdF93YWxr LmMKKysrIGIveGVuL2FyY2gvYXJtL2d1ZXN0X3dhbGsuYwpAQCAtMTYsNiArMTYsOCBAQAogICov CiAKICNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4K KyNpbmNsdWRlIDxhc20vZ3Vlc3Rfd2Fsay5oPgogCiAvKgogICogVGhlIGZ1bmN0aW9uIGd1ZXN0 X3dhbGtfc2QgdHJhbnNsYXRlcyBhIGdpdmVuIEdWQSBpbnRvIGFuIElQQSB1c2luZyB0aGUKQEAg LTMzLDYgKzM1LDE0MiBAQCBzdGF0aWMgaW50IGd1ZXN0X3dhbGtfc2QoY29uc3Qgc3RydWN0IHZj cHUgKnYsCiB9CiAKIC8qCisgKiBHZXQgdGhlIElQQSBvdXRwdXRfc2l6ZSAoY29uZmlndXJlZCBp biBUQ1JfRUwxKSB0aGF0IHNoYWxsIGJlIHVzZWQgZm9yIHRoZQorICogbG9uZy1kZXNjcmlwdG9y IGJhc2VkIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQg Z2V0X2lwYV9vdXRwdXRfc2l6ZShzdHJ1Y3QgZG9tYWluICpkLCByZWdpc3Rlcl90IHRjcikKK3sK KyAgICB1bnNpZ25lZCBpbnQgb3V0cHV0X3NpemU7CisgICAgdWludDY0X3QgaXBzOworCisgICAg c3RhdGljIGNvbnN0IHVpbnQ2NF90IGlwYV9zaXplc1s3XSA9IHsKKyAgICAgICAgVENSX0VMMV9J UFNfMzJfQklUX1ZBTCwKKyAgICAgICAgVENSX0VMMV9JUFNfMzZfQklUX1ZBTCwKKyAgICAgICAg VENSX0VMMV9JUFNfNDBfQklUX1ZBTCwKKyAgICAgICAgVENSX0VMMV9JUFNfNDJfQklUX1ZBTCwK KyAgICAgICAgVENSX0VMMV9JUFNfNDRfQklUX1ZBTCwKKyAgICAgICAgVENSX0VMMV9JUFNfNDhf QklUX1ZBTCwKKyAgICAgICAgVENSX0VMMV9JUFNfNTJfQklUX1ZBTAorICAgIH07CisKKyAgICBp ZiAoIGlzXzY0Yml0X2RvbWFpbihkKSApCisgICAgeworICAgICAgICAvKiBHZXQgdGhlIGludGVy bWVkaWF0ZSBwaHlzaWNhbCBhZGRyZXNzIHNpemUuICovCisgICAgICAgIGlwcyA9ICh0Y3IgJiBU Q1JfRUwxX0lQU19NQVNLKSA+PiBUQ1JfRUwxX0lQU19TSElGVDsKKworICAgICAgICAvKgorICAg ICAgICAgKiBSZXR1cm4gYW4gZXJyb3Igb24gcmVzZXJ2ZWQgSVBBIG91dHB1dC1zaXplcyBhbmQg aWYgdGhlIElQQQorICAgICAgICAgKiBvdXRwdXQtc2l6ZSBpcyA1MmJpdC4KKyAgICAgICAgICoK KyAgICAgICAgICogWFhYOiA1MiBiaXQgb3V0cHV0X3NpemUgaXMgbm90IHN1cHBvcnRlZCB5ZXQu CisgICAgICAgICAqLworICAgICAgICBpZiAoIGlwcyA+IFRDUl9FTDFfSVBTXzQ4X0JJVCApCisg ICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICBvdXRwdXRfc2l6ZSA9IGlwYV9z aXplc1tpcHNdOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG91dHB1dF9zaXplID0gVENSX0VM MV9JUFNfNDBfQklUX1ZBTDsKKworICAgIHJldHVybiBvdXRwdXRfc2l6ZTsKK30KKworLyogTm9y bWFsaXplZCBwYWdlIGdyYW51bGUgc2l6ZSBpbmRpY2VzLiAqLworZW51bSBncmFudWxlX3NpemVf aW5kZXggeworICAgIEdSQU5VTEVfU0laRV9JTkRFWF80SywKKyAgICBHUkFOVUxFX1NJWkVfSU5E RVhfMTZLLAorICAgIEdSQU5VTEVfU0laRV9JTkRFWF82NEsKK307CisKKy8qIFJlcHJlc2VudCB3 aGV0aGVyIFRUQlIwIG9yIFRUQlIxIGlzIGFjdGl2ZS4gKi8KK2VudW0gYWN0aXZlX3R0YnIgewor ICAgIFRUQlIwX0FDVElWRSwKKyAgICBUVEJSMV9BQ1RJVkUKK307CisKKy8qCisgKiBTZWxlY3Qg dGhlIFRUQlIoMHwxKV9FTDEgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFkZHJlc3MgdHJhbnNsYXRp b24gdXNpbmcgdGhlCisgKiBsb25nLWRlc2NyaXB0b3IgdHJhbnNsYXRpb24gdGFibGUgZm9ybWF0 IGFuZCByZXR1cm4gdGhlIHBhZ2UgZ3JhbnVsYXJpdHkKKyAqIHRoYXQgaXMgdXNlZCBieSB0aGUg c2VsZWN0ZWQgVFRCUi4KKyAqLworc3RhdGljIGJvb2wgZ2V0X3R0YnJfYW5kX2dyYW5fNjRiaXQo dWludDY0X3QgKnR0YnIsIHVuc2lnbmVkIGludCAqZ3JhbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgdGNyLCBlbnVtIGFjdGl2ZV90dGJyIHR0YnJ4KQor eworICAgIGJvb2wgZGlzYWJsZWQ7CisKKyAgICBpZiAoIHR0YnJ4ID09IFRUQlIwX0FDVElWRSAp CisgICAgeworICAgICAgICAvKiBOb3JtYWxpemUgZ3JhbnVsZSBzaXplLiAqLworICAgICAgICBz d2l0Y2ggKCB0Y3IgJiBUQ1JfVEcwX01BU0sgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVENS X1RHMF8xNks6CisgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVfU0laRV9JTkRFWF8xNks7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUQ1JfVEcwXzY0SzoKKyAgICAgICAgICAg ICpncmFuID0gR1JBTlVMRV9TSVpFX0lOREVYXzY0SzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKmdyYW4gPSBHUkFOVUxFX1NJWkVfSU5ERVhfNEs7 CisgICAgICAgIH0KKworICAgICAgICAvKiBVc2UgVFRCUjAgZm9yIEdWQSB0byBJUEEgdHJhbnNs YXRpb24uICovCisgICAgICAgICp0dGJyID0gUkVBRF9TWVNSRUc2NChUVEJSMF9FTDEpOworCisg ICAgICAgIC8qIElmIFRDUi5FUEQwIGlzIHNldCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIwIGFy ZSBkaXNhYmxlZC4gKi8KKyAgICAgICAgZGlzYWJsZWQgPSB0Y3IgJiBUQ1JfRVBEMDsKKyAgICB9 CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTm9ybWFsaXplIGdyYW51bGUgc2l6ZS4gKi8K KyAgICAgICAgc3dpdGNoICggdGNyICYgVENSX0VMMV9URzFfTUFTSyApCisgICAgICAgIHsKKyAg ICAgICAgY2FzZSBUQ1JfRUwxX1RHMV8xNks6CisgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVf U0laRV9JTkRFWF8xNks7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUQ1JfRUwx X1RHMV82NEs6CisgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVfU0laRV9JTkRFWF82NEs7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICpncmFuID0g R1JBTlVMRV9TSVpFX0lOREVYXzRLOworICAgICAgICB9CisKKyAgICAgICAgLyogVXNlIFRUQlIx IGZvciBHVkEgdG8gSVBBIHRyYW5zbGF0aW9uLiAqLworICAgICAgICAqdHRiciA9IFJFQURfU1lT UkVHNjQoVFRCUjFfRUwxKTsKKworICAgICAgICAvKiBJZiBUQ1IuRVBEMSBpcyBzZXQsIHRyYW5z bGF0aW9ucyB1c2luZyBUVEJSMSBhcmUgZGlzYWJsZWQuICovCisgICAgICAgIGRpc2FibGVkID0g dGNyICYgVENSX0VQRDE7CisgICAgfQorCisgICAgcmV0dXJuIGRpc2FibGVkOworfQorCisvKgor ICogR2V0IHRoZSBNU0IgbnVtYmVyIG9mIHRoZSBHVkEsIGFjY29yZGluZyB0byAiQWRkclRvcCIg cHNldWRvY29kZQorICogaW1wbGVtZW50YXRpb24gaW4gQVJNIERESSAwNDg3Qi5hIEoxLTYwNjYu CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3RvcF9iaXQoc3RydWN0IGRvbWFpbiAqZCwg dmFkZHJfdCBndmEsIHJlZ2lzdGVyX3QgdGNyKQoreworICAgIHVuc2lnbmVkIGludCB0b3BiaXQ7 CisKKyAgICAvKgorICAgICAqIElGIEVMMSBpcyB1c2luZyBBQXJjaDY0IHRoZW4gYWRkcmVzc2Vz IGZyb20gRUwwIHVzaW5nIEFBcmNoMzIgYXJlCisgICAgICogemVyby1leHRlbmRlZCB0byA2NCBi aXRzIChBUk0gRERJIDA0ODdCLmEgSjEtNjA2NikuCisgICAgICovCisgICAgaWYgKCBpc18zMmJp dF9kb21haW4oZCkgKQorICAgICAgICB0b3BiaXQgPSAzMTsKKyAgICBlbHNlIGlmICggaXNfNjRi aXRfZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIGlmICggKChndmEgJiBCSVQoNTUpKSAmJiAo dGNyICYgVENSX0VMMV9UQkkxKSkgfHwKKyAgICAgICAgICAgICAoIShndmEgJiBCSVQoNTUpKSAm JiAodGNyICYgVENSX0VMMV9UQkkwKSkgKQorICAgICAgICAgICAgdG9wYml0ID0gNTU7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHRvcGJpdCA9IDYzOworICAgIH0KKworICAgIHJldHVybiB0 b3BiaXQ7Cit9CisKKy8qCiAgKiBUaGUgZnVuY3Rpb24gZ3Vlc3Rfd2Fsa19sZCB0cmFuc2xhdGVz IGEgZ2l2ZW4gR1ZBIGludG8gYW4gSVBBIHVzaW5nIHRoZQogICogbG9uZy1kZXNjcmlwdG9yIHRy YW5zbGF0aW9uIHRhYmxlIGZvcm1hdCBpbiBzb2Z0d2FyZS4gVGhpcyBmdW5jdGlvbiBhc3N1bWVz CiAgKiB0aGF0IHRoZSBkb21haW4gaXMgcnVubmluZyBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSB2 Q1BVLiBUbyB3YWxrIHRoZSBndWVzdCdzCkBAIC00Myw4ICsxODEsMjUxIEBAIHN0YXRpYyBpbnQg Z3Vlc3Rfd2Fsa19sZChjb25zdCBzdHJ1Y3QgdmNwdSAqdiwKICAgICAgICAgICAgICAgICAgICAg ICAgICB2YWRkcl90IGd2YSwgcGFkZHJfdCAqaXBhLAogICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCAqcGVybXMpCiB7Ci0gICAgLyogTm90IGltcGxlbWVudGVkIHlldC4gKi8K LSAgICByZXR1cm4gLUVGQVVMVDsKKyAgICBib29sIGRpc2FibGVkID0gdHJ1ZTsKKyAgICBib29s IHJvX3RhYmxlID0gZmFsc2UsIHhuX3RhYmxlID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IHQw X3N6LCB0MV9zejsKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWwsIGdyYW47CisgICAgdW5zaWduZWQg aW50IHRvcGJpdCA9IDAsIGlucHV0X3NpemUgPSAwLCBvdXRwdXRfc2l6ZTsKKyAgICB1aW50NjRf dCB0dGJyID0gMDsKKyAgICBwYWRkcl90IG1hc2s7CisgICAgbHBhZV90IHB0ZSwgKnRhYmxlOwor ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgcmVnaXN0ZXJfdCB0Y3IgPSBSRUFEX1NZ U1JFRyhUQ1JfRUwxKTsKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworCisgICAg Y29uc3QgdmFkZHJfdCBvZmZzZXRzWzRdWzNdID0geworICAgICAgICB7CisjaWZkZWYgQ09ORklH X0FSTV82NAorICAgICAgICAgICAgemVyb2V0aF9ndWVzdF90YWJsZV9vZmZzZXRfNEsoZ3ZhKSwK KyAgICAgICAgICAgIHplcm9ldGhfZ3Vlc3RfdGFibGVfb2Zmc2V0XzE2SyhndmEpLAorICAgICAg ICAgICAgMCwgLyogVGhlcmUgaXMgbm8gemVyb2V0aCBsb29rdXAgbGV2ZWwgd2l0aCBhIDY0SyBn cmFudWxlIHNpemUuICovCisjZW5kaWYKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg ICAgZmlyc3RfZ3Vlc3RfdGFibGVfb2Zmc2V0XzRLKGd2YSksCisjaWZkZWYgQ09ORklHX0FSTV82 NAorICAgICAgICAgICAgZmlyc3RfZ3Vlc3RfdGFibGVfb2Zmc2V0XzE2SyhndmEpLAorICAgICAg ICAgICAgZmlyc3RfZ3Vlc3RfdGFibGVfb2Zmc2V0XzY0SyhndmEpLAorI2VuZGlmCisgICAgICAg IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlY29uZF9ndWVzdF90YWJsZV9vZmZzZXRfNEso Z3ZhKSwKKyNpZmRlZiBDT05GSUdfQVJNXzY0CisgICAgICAgICAgICBzZWNvbmRfZ3Vlc3RfdGFi bGVfb2Zmc2V0XzE2SyhndmEpLAorICAgICAgICAgICAgc2Vjb25kX2d1ZXN0X3RhYmxlX29mZnNl dF82NEsoZ3ZhKSwKKyNlbmRpZgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0 aGlyZF9ndWVzdF90YWJsZV9vZmZzZXRfNEsoZ3ZhKSwKKyNpZmRlZiBDT05GSUdfQVJNXzY0Cisg ICAgICAgICAgICB0aGlyZF9ndWVzdF90YWJsZV9vZmZzZXRfMTZLKGd2YSksCisgICAgICAgICAg ICB0aGlyZF9ndWVzdF90YWJsZV9vZmZzZXRfNjRLKGd2YSksCisjZW5kaWYKKyAgICAgICAgfQor ICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgcGFkZHJfdCBtYXNrc1s0XVszXSA9IHsKKyAgICAg ICAgeworICAgICAgICAgICAgemVyb2V0aF9zaXplKDRLKSAtIDEsCisgICAgICAgICAgICB6ZXJv ZXRoX3NpemUoMTZLKSAtIDEsCisgICAgICAgICAgICAwIC8qIFRoZXJlIGlzIG5vIHplcm9ldGgg bG9va3VwIGxldmVsIHdpdGggYSA2NEsgZ3JhbnVsZSBzaXplLiAqLworICAgICAgICB9LAorICAg ICAgICB7CisgICAgICAgICAgICBmaXJzdF9zaXplKDRLKSAtIDEsCisgICAgICAgICAgICBmaXJz dF9zaXplKDE2SykgLSAxLAorICAgICAgICAgICAgZmlyc3Rfc2l6ZSg2NEspIC0gMQorICAgICAg ICB9LAorICAgICAgICB7CisgICAgICAgICAgICBzZWNvbmRfc2l6ZSg0SykgLSAxLAorICAgICAg ICAgICAgc2Vjb25kX3NpemUoMTZLKSAtIDEsCisgICAgICAgICAgICBzZWNvbmRfc2l6ZSg2NEsp IC0gMQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0aGlyZF9zaXplKDRLKSAt IDEsCisgICAgICAgICAgICB0aGlyZF9zaXplKDE2SykgLSAxLAorICAgICAgICAgICAgdGhpcmRf c2l6ZSg2NEspIC0gMQorICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBpbnQgZ3JhaW5zaXplc1szXSA9IHsKKyAgICAgICAgUEFHRV9TSElGVF80SywKKyAgICAg ICAgUEFHRV9TSElGVF8xNkssCisgICAgICAgIFBBR0VfU0hJRlRfNjRLCisgICAgfTsKKworICAg IHQwX3N6ID0gKHRjciA+PiBUQ1JfVDBTWl9TSElGVCkgJiBUQ1JfU1pfTUFTSzsKKyAgICB0MV9z eiA9ICh0Y3IgPj4gVENSX1QxU1pfU0hJRlQpICYgVENSX1NaX01BU0s7CisKKyAgICAvKiBHZXQg dGhlIE1TQiBudW1iZXIgb2YgdGhlIEdWQS4gKi8KKyAgICB0b3BiaXQgPSBnZXRfdG9wX2JpdChk LCBndmEsIHRjcik7CisKKyAgICBpZiAoIGlzXzY0Yml0X2RvbWFpbihkKSApCisgICAgeworICAg ICAgICAvKiBTZWxlY3QgdGhlIFRUQlIoMHwxKV9FTDEgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFk ZHJlc3MgdHJhbnNsYXRpb24uICovCisKKyAgICAgICAgaWYgKCAoZ3ZhICYgQklUKHRvcGJpdCkp ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1dF9zaXplID0gQklUU19QRVJfRE9V QkxFX1dPUkQgLSB0MF9zejsKKworICAgICAgICAgICAgLyogR2V0IFRUQlIwIGFuZCBjb25maWd1 cmVkIHBhZ2UgZ3JhbnVsYXJpdHkuICovCisgICAgICAgICAgICBkaXNhYmxlZCA9IGdldF90dGJy X2FuZF9ncmFuXzY0Yml0KCZ0dGJyLCAmZ3JhbiwgdGNyLCBUVEJSMF9BQ1RJVkUpOworICAgICAg ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IEJJ VFNfUEVSX0RPVUJMRV9XT1JEIC0gdDFfc3o7CisKKyAgICAgICAgICAgIC8qIEdldCBUVEJSMSBh bmQgY29uZmlndXJlZCBwYWdlIGdyYW51bGFyaXR5LiAqLworICAgICAgICAgICAgZGlzYWJsZWQg PSBnZXRfdHRicl9hbmRfZ3Jhbl82NGJpdCgmdHRiciwgJmdyYW4sIHRjciwgVFRCUjFfQUNUSVZF KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBjdXJyZW50IGltcGxl bWVudGF0aW9uIHN1cHBvcnRzIGludGVybWVkaWF0ZSBwaHlzaWNhbCBhZGRyZXNzCisgICAgICAg ICAqIHNpemVzIChJUFMpIHVwIHRvIDQ4IGJpdC4KKyAgICAgICAgICoKKyAgICAgICAgICogWFhY OiBEZXRlcm1pbmUgd2hldGhlciB0aGUgSVBTX01BWF9WQUwgaXMgNDggb3IgNTIgaW4gc29mdHdh cmUuCisgICAgICAgICAqLworICAgICAgICBpZiAoIChpbnB1dF9zaXplID4gVENSX0VMMV9JUFNf NDhfQklUX1ZBTCkgfHwKKyAgICAgICAgICAgICAoaW5wdXRfc2l6ZSA8IFRDUl9FTDFfSVBTX01J Tl9WQUwpICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgIH0KKyAgICBlbHNlCisg ICAgeworICAgICAgICAvKiBHcmFudWxlIHNpemUgb2YgQUFyY2gzMiBhcmNoaXRlY3R1cmVzIGlz IGFsd2F5cyA0Sy4gKi8KKyAgICAgICAgZ3JhbiA9IEdSQU5VTEVfU0laRV9JTkRFWF80SzsKKwor ICAgICAgICAvKiBTZWxlY3QgdGhlIFRUQlIoMHwxKV9FTDEgdGhhdCB3aWxsIGJlIHVzZWQgZm9y IGFkZHJlc3MgdHJhbnNsYXRpb24uICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sg aWYgdGhlIGJpdHMgPDMxOjMyLXQwX3N6PiBvZiB0aGUgR1ZBIGFyZSBzZXQgdG8gMCAoRERJIDA0 ODdCLmEKKyAgICAgICAgICogSjEtNTk5OSkuIElmIHNvLCBUVEJSMCBzaGFsbCBiZSB1c2VkIGZv ciBhZGRyZXNzIHRyYW5zbGF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgbWFzayA9ICgoMVVM TCA8PCBCSVRTX1BFUl9XT1JEKSAtIDEpICYKKyAgICAgICAgICAgICAgIH4oKDFVTEwgPDwgKEJJ VFNfUEVSX1dPUkQgLSB0MF9zeikpIC0gMSk7CisKKyAgICAgICAgaWYgKCB0MF9zeiA9PSAwIHx8 ICEoZ3ZhICYgbWFzaykgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1dF9zaXplID0gQklU U19QRVJfV09SRCAtIHQwX3N6OworCisgICAgICAgICAgICAvKiBVc2UgVFRCUjAgZm9yIEdWQSB0 byBJUEEgdHJhbnNsYXRpb24uICovCisgICAgICAgICAgICB0dGJyID0gUkVBRF9TWVNSRUc2NChU VEJSMF9FTDEpOworCisgICAgICAgICAgICAvKiBJZiBUQ1IuRVBEMCBpcyBzZXQsIHRyYW5zbGF0 aW9ucyB1c2luZyBUVEJSMCBhcmUgZGlzYWJsZWQuICovCisgICAgICAgICAgICBkaXNhYmxlZCA9 IHRjciAmIFRDUl9FUEQwOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hl Y2sgaWYgdGhlIGJpdHMgPDMxOjMyLXQxX3N6PiBvZiB0aGUgR1ZBIGFyZSBzZXQgdG8gMSAoRERJ IDA0ODdCLmEKKyAgICAgICAgICogSjEtNjAwMCkuIElmIHNvLCBUVEJSMSBzaGFsbCBiZSB1c2Vk IGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgbWFzayA9ICgo MVVMTCA8PCBCSVRTX1BFUl9XT1JEKSAtIDEpICYKKyAgICAgICAgICAgICAgIH4oKDFVTEwgPDwg KEJJVFNfUEVSX1dPUkQgLSB0MV9zeikpIC0gMSk7CisKKyAgICAgICAgaWYgKCAoKHQxX3N6ID09 IDApICYmICF0dGJyKSB8fCAodDFfc3ogJiYgKGd2YSAmIG1hc2spID09IG1hc2spICkKKyAgICAg ICAgeworICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IEJJVFNfUEVSX1dPUkQgLSB0MV9zejsKKwor ICAgICAgICAgICAgLyogVXNlIFRUQlIxIGZvciBHVkEgdG8gSVBBIHRyYW5zbGF0aW9uLiAqLwor ICAgICAgICAgICAgdHRiciA9IFJFQURfU1lTUkVHNjQoVFRCUjFfRUwxKTsKKworICAgICAgICAg ICAgLyogSWYgVENSLkVQRDEgaXMgc2V0LCB0cmFuc2xhdGlvbnMgdXNpbmcgVFRCUjEgYXJlIGRp c2FibGVkLiAqLworICAgICAgICAgICAgZGlzYWJsZWQgPSB0Y3IgJiBUQ1JfRVBEMTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGlmICggZGlzYWJsZWQgKQorICAgICAgICByZXR1cm4gLUVGQVVM VDsKKworICAgIC8qCisgICAgICogVGhlIHN0YXJ0aW5nIGxldmVsIGlzIHRoZSBudW1iZXIgb2Yg c3RyaWRlcyAoZ3JhaW5zaXplc1tncmFuXSAtIDMpCisgICAgICogbmVlZGVkIHRvIGNvbnN1bWUg dGhlIGlucHV0IGFkZHJlc3MgKERESSAwNDg3Qi5hIEoxLTU5MjQpLgorICAgICAqLworICAgIGxl dmVsID0gNCAtIERJVl9ST1VORF9VUCgoaW5wdXRfc2l6ZSAtIGdyYWluc2l6ZXNbZ3Jhbl0pLCAo Z3JhaW5zaXplc1tncmFuXSAtIDMpKTsKKworICAgIC8qIEdldCB0aGUgSVBBIG91dHB1dF9zaXpl LiAqLworICAgIG91dHB1dF9zaXplID0gZ2V0X2lwYV9vdXRwdXRfc2l6ZShkLCB0Y3IpOworCisg ICAgLyogTWFrZSBzdXJlIHRoZSBiYXNlIGFkZHJlc3MgZG9lcyBub3QgZXhjZWVkIGl0cyBjb25m aWd1cmVkIHNpemUuICovCisgICAgbWFzayA9ICgoMVVMTCA8PCBUQ1JfRUwxX0lQU180OF9CSVRf VkFMKSAtIDEpICYgfigoMVVMTCA8PCBvdXRwdXRfc2l6ZSkgLSAxKTsKKyAgICBpZiAoIG91dHB1 dF9zaXplIDwgVENSX0VMMV9JUFNfNDhfQklUX1ZBTCAmJiAodHRiciAmIG1hc2spICkKKyAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBtYXNrID0gKCgxVUxMIDw8IG91dHB1dF9zaXplKSAt IDEpOworICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBwYWRkcl90b19wZm4odHRiciAm IG1hc2spLCBOVUxMLCBQMk1fQUxMT0MpOworICAgIGlmICggIXBhZ2UgKQorICAgICAgICByZXR1 cm4gLUVGQVVMVDsKKworICAgIHRhYmxlID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7CisKKyAg ICBmb3IgKCA7IDsgbGV2ZWwrKyApCisgICAgeworICAgICAgICBwdGUgPSB0YWJsZVtvZmZzZXRz W2xldmVsXVtncmFuXV07CisKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UodGFibGUpOworICAg ICAgICBwdXRfcGFnZShwYWdlKTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRk cmVzcyBkb2VzIG5vdCBleGNlZWQgaXRzIGNvbmZpZ3VyZWQgc2l6ZS4gKi8KKyAgICAgICAgbWFz ayA9ICgoMVVMTCA8PCBUQ1JfRUwxX0lQU180OF9CSVRfVkFMKSAtIDEpICYKKyAgICAgICAgICAg ICAgIH4oKDFVTEwgPDwgb3V0cHV0X3NpemUpIC0gMSk7CisKKyAgICAgICAgaWYgKCAob3V0cHV0 X3NpemUgPCBUQ1JfRUwxX0lQU180OF9CSVRfVkFMKSAmJgorICAgICAgICAgICAgIChwZm5fdG9f cGFkZHIocHRlLndhbGsuYmFzZSkgJiBtYXNrKSApCisgICAgICAgICAgICByZXR1cm4gLUVGQVVM VDsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiBwYWdlIGdyYW51bGFyaXR5IGlzIDY0Sywg bWFrZSBzdXJlIHRoZSBhZGRyZXNzIGlzIGFsaWduZWQKKyAgICAgICAgICogYXBwcm9wcmlhdGVs eS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggKG91dHB1dF9zaXplIDwgVENSX0VMMV9JUFNf NTJfQklUX1ZBTCkgJiYKKyAgICAgICAgICAgICAoZ3JhbiA9PSBHUkFOVUxFX1NJWkVfSU5ERVhf NjRLKSAmJgorICAgICAgICAgICAgIChwdGUud2Fsay5iYXNlICYgMHhmKSApCisgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICAvKgorICAgICAgICAgKiBCcmVhayBpZiBvbmUg b2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOgorICAgICAgICAgKgorICAgICAg ICAgKiAtIFdlIGhhdmUgZm91bmQgdGhlIFBURSBob2xkaW5nIHRoZSBJUEEgKGxldmVsID09IDMp LgorICAgICAgICAgKiAtIFRoZSBQVEUgaXMgbm90IHZhbGlkLgorICAgICAgICAgKiAtIElmIChs ZXZlbCA8IDMpIGFuZCB0aGUgUFRFIGlzIHZhbGlkLCB3ZSBmb3VuZCBhIGJsb2NrIGRlc2NyaXB0 b3IuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGxldmVsID09IDMgfHwgIWxwYWVfdmFsaWQo cHRlKSB8fCBscGFlX2lzX3N1cGVycGFnZShwdGUsIGxldmVsKSApCisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAvKgorICAgICAgICAgKiBUZW1wb3JhcmlseSBzdG9yZSBwZXJtaXNzaW9u cyBvZiB0aGUgdGFibGUgZGVzY3JpcHRvciBhcyB0aGV5IGFyZQorICAgICAgICAgKiBpbmhlcml0 ZWQgYnkgcGFnZSB0YWJsZSBhdHRyaWJ1dGVzIChBUk0gRERJIDA0ODdCLmEgSjEtNTkyOCkuCisg ICAgICAgICAqLworICAgICAgICB4bl90YWJsZSB8PSBwdGUucHQueG50OyAgICAgICAgICAgICAv KiBFeGVjdXRlLU5ldmVyICovCisgICAgICAgIHJvX3RhYmxlIHw9IHB0ZS5wdC5hcHQgJiBCSVQo MSk7ICAgIC8qIFJlYWQtT25seSAqLworCisgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dm bihkLCBwdGUud2Fsay5iYXNlLCBOVUxMLCBQMk1fQUxMT0MpOworCisgICAgICAgIGlmICggIXBh Z2UgKQorICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgdGFibGUgPSBfX21h cF9kb21haW5fcGFnZShwYWdlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFjY29yZGluZyB0 byB0byBBUk0gRERJIDA0ODdCLmEgSjEtNTkyNywgd2UgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBm b3VuZAorICAgICAqIFBURSBpcyBpbnZhbGlkIG9yIGhvbGRzIGEgcmVzZXJ2ZWQgZW50cnkgKFBU RTwxOjA+ID09IHgwKSkgb3IgaWYgdGhlIFBURQorICAgICAqIG1hcHMgYSBtZW1vcnkgYmxvY2sg YXQgbGV2ZWwgMyAoUFRFPDE6MD4gPT0gMDEpLgorICAgICAqLworICAgIGlmICggIWxwYWVfdmFs aWQocHRlKSB8fCAoKGxldmVsID09IDMpICYmIGxwYWVfbWFwcGluZyhwdGUpKSApCisgICAgICAg IHJldHVybiAtRUZBVUxUOworCisgICAgKmlwYSA9IHBmbl90b19wYWRkcihwdGUud2Fsay5iYXNl KSB8IChndmEgJiBtYXNrc1tsZXZlbF1bZ3Jhbl0pOworCisgICAgLyoKKyAgICAgKiBTZXQgcGVy bWlzc2lvbnMgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBjaGVjayB0aGUgZmxhZ3MgYnkgaGVyc2Vs Zi4gTm90ZQorICAgICAqIHRoYXQgc3RhZ2UgMSB0cmFuc2xhdGlvbnMgYWxzbyBpbmhlcml0IGF0 dHJpYnV0ZXMgZnJvbSB0aGUgdGFibGVzCisgICAgICogKEFSTSBEREkgMDQ4N0IuYSBKMS01OTI4 KS4KKyAgICAgKi8KKyAgICBpZiAoICFwdGUucHQucm8gJiYgIXJvX3RhYmxlICkKKyAgICAgICAg KnBlcm1zID0gR1YyTV9XUklURTsKKyAgICBpZiAoICFwdGUucHQueG4gJiYgIXhuX3RhYmxlICkK KyAgICAgICAgKnBlcm1zIHw9IEdWMk1fRVhFQzsKKworICAgIHJldHVybiAwOwogfQogCiBpbnQg Z3Vlc3Rfd2Fsa190YWJsZXMoY29uc3Qgc3RydWN0IHZjcHUgKnYsIHZhZGRyX3QgZ3ZhLAotLSAK Mi4xMi4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==