From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ankur Arora Subject: [RFC PATCH 04/16] x86/xen: hypercall support for xenhost_t Date: Thu, 9 May 2019 10:25:28 -0700 Message-ID: <20190509172540.12398-5-ankur.a.arora__33590.5071626016$1557422806$gmane$org@oracle.com> References: <20190509172540.12398-1-ankur.a.arora@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hOmnk-0000ed-A3 for xen-devel@lists.xenproject.org; Thu, 09 May 2019 17:25:48 +0000 In-Reply-To: <20190509172540.12398-1-ankur.a.arora@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org Cc: jgross@suse.com, sstabellini@kernel.org, konrad.wilk@oracle.com, ankur.a.arora@oracle.com, pbonzini@redhat.com, boris.ostrovsky@oracle.com, joao.m.martins@oracle.com List-Id: xen-devel@lists.xenproject.org QWxsb3cgZm9yIGRpZmZlcmVudCBoeXBlcmNhbGwgaW1wbGVtZW50YXRpb25zIGZvciBkaWZmZXJl bnQgeGVuaG9zdCB0eXBlcy4KTmVzdGVkIHhlbmhvc3QsIHdoaWNoIGhhcyB0d28gdW5kZXJseWlu ZyB4ZW5ob3N0cywgY2FuIHVzZSBib3RoCnNpbXVsdGFuZW91c2x5LgoKVGhlIGh5cGVyY2FsbCBt YWNyb3MgKEhZUEVSVklTT1JfKikgaW1wbGljaXRseSB1c2UgdGhlIGRlZmF1bHQgeGVuaG9zdC54 CkEgbmV3IG1hY3JvIChoeXBlcnZpc29yXyopIHRha2VzIHhlbmhvc3RfdCAqIGFzIGEgcGFyYW1l dGVyIGFuZCBkb2VzIHRoZQpyaWdodCB0aGluZy4KClRPRE86CiAgLSBNdWx0aWNhbGxzIGZvciBu b3cgYXNzdW1lIHRoZSBkZWZhdWx0IHhlbmhvc3QKICAtIHhlbl9oeXBlcmNhbGxfKiBzeW1ib2xz IGFyZSBvbmx5IGdlbmVyYXRlZCBmb3IgdGhlIGRlZmF1bHQgeGVuaG9zdC4KClNpZ25lZC1vZmYt Ynk6IEFua3VyIEFyb3JhIDxhbmt1ci5hLmFyb3JhQG9yYWNsZS5jb20+Ci0tLQogYXJjaC94ODYv aW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oIHwgMjMzICsrKysrKysrKysrKysrKysrKy0tLS0t LS0tLQogYXJjaC94ODYveGVuL2VubGlnaHRlbi5jICAgICAgICAgICAgIHwgICAzIC0KIGFyY2gv eDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmMgICAgICAgICB8ICAyMyArKy0KIGFyY2gveDg2L3hlbi9l bmxpZ2h0ZW5fcHYuYyAgICAgICAgICB8ICAxMyArLQogYXJjaC94ODYveGVuL2VubGlnaHRlbl9w dmguYyAgICAgICAgIHwgICA5ICstCiBhcmNoL3g4Ni94ZW4veGVuLWhlYWQuUyAgICAgICAgICAg ICAgfCAgIDMgKwogZHJpdmVycy94ZW4vZmFsbGJhY2suYyAgICAgICAgICAgICAgIHwgICA4ICst CiBpbmNsdWRlL3hlbi94ZW5ob3N0LmggICAgICAgICAgICAgICAgfCAgMjMgKysrCiA4IGZpbGVz IGNoYW5nZWQsIDIxOCBpbnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRl L2FzbS94ZW4vaHlwZXJjYWxsLmgKaW5kZXggMWEzY2Q2NjgwZTZmLi5lMTM4ZjljMzZhNWEgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAorKysgYi9hcmNo L3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNs dWRlIDx4ZW4vaW50ZXJmYWNlL3BoeXNkZXYuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3Bs YXRmb3JtLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4tbWNhLmg+CisjaW5jbHVkZSA8 eGVuL3hlbmhvc3QuaD4KIAogc3RydWN0IHhlbl9kbV9vcF9idWY7CiAKQEAgLTg4LDExICs4OSwx MSBAQCBzdHJ1Y3QgeGVuX2RtX29wX2J1ZjsKIAogc3RydWN0IGh5cGVyY2FsbF9lbnRyeSB7IGNo YXIgX2VudHJ5WzMyXTsgfTsKIGV4dGVybiBzdHJ1Y3QgaHlwZXJjYWxsX2VudHJ5IHhlbl9oeXBl cmNhbGxfcGFnZVsxMjhdOwotZXh0ZXJuIHN0cnVjdCBoeXBlcmNhbGxfZW50cnkgKmh5cGVyY2Fs bF9wYWdlOworZXh0ZXJuIHN0cnVjdCBoeXBlcmNhbGxfZW50cnkgeGVuX2h5cGVyY2FsbF9wYWdl MlsxMjhdOwogCiAjZGVmaW5lIF9fSFlQRVJDQUxMCUNBTExfTk9TUEVDCi0jZGVmaW5lIF9fSFlQ RVJDQUxMX0VOVFJZKHgpCQkJCQkJXAotCVt0aHVua190YXJnZXRdICIwIiAoaHlwZXJjYWxsX3Bh Z2UgKyBfX0hZUEVSVklTT1JfIyN4KQorI2RlZmluZSBfX0hZUEVSQ0FMTF9FTlRSWSh4aCwgeCkJ CQkJCQlcCisJW3RodW5rX3RhcmdldF0gIjAiICh4aC0+aHlwZXJjYWxsX3BhZ2UgKyBfX0hZUEVS VklTT1JfIyN4KQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBfX0hZUEVSQ0FMTF9S RVRSRUcJImVheCIKQEAgLTE0NCw1NyArMTQ1LDU3IEBAIGV4dGVybiBzdHJ1Y3QgaHlwZXJjYWxs X2VudHJ5ICpoeXBlcmNhbGxfcGFnZTsKICNkZWZpbmUgX19IWVBFUkNBTExfQ0xPQkJFUjEJX19I WVBFUkNBTExfQ0xPQkJFUjIsIF9fSFlQRVJDQUxMX0FSRzJSRUcKICNkZWZpbmUgX19IWVBFUkNB TExfQ0xPQkJFUjAJX19IWVBFUkNBTExfQ0xPQkJFUjEsIF9fSFlQRVJDQUxMX0FSRzFSRUcKIAot I2RlZmluZSBfaHlwZXJjYWxsMCh0eXBlLCBuYW1lKQkJCQkJCVwKKyNkZWZpbmUgX2h5cGVyY2Fs bDAoeGgsIHR5cGUsIG5hbWUpCQkJCQlcCiAoewkJCQkJCQkJCVwKIAlfX0hZUEVSQ0FMTF9ERUNM UzsJCQkJCQlcCiAJX19IWVBFUkNBTExfMEFSRygpOwkJCQkJCVwKIAlhc20gdm9sYXRpbGUgKF9f SFlQRVJDQUxMCQkJCQlcCiAJCSAgICAgIDogX19IWVBFUkNBTExfMFBBUkFNCQkJCVwKLQkJICAg ICAgOiBfX0hZUEVSQ0FMTF9FTlRSWShuYW1lKQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExf RU5UUlkoeGgsIG5hbWUpCQkJXAogCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIwKTsJCQkJ XAogCSh0eXBlKV9fcmVzOwkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIF9oeXBlcmNhbGwxKHR5cGUs IG5hbWUsIGExKQkJCQkJXAorI2RlZmluZSBfaHlwZXJjYWxsMSh4aCwgdHlwZSwgbmFtZSwgYTEp CQkJCQlcCiAoewkJCQkJCQkJCVwKIAlfX0hZUEVSQ0FMTF9ERUNMUzsJCQkJCQlcCiAJX19IWVBF UkNBTExfMUFSRyhhMSk7CQkJCQkJXAogCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwK IAkJICAgICAgOiBfX0hZUEVSQ0FMTF8xUEFSQU0JCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxM X0VOVFJZKG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9FTlRSWSh4aCwgbmFtZSkJ CQlcCiAJCSAgICAgIDogX19IWVBFUkNBTExfQ0xPQkJFUjEpOwkJCQlcCiAJKHR5cGUpX19yZXM7 CQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgX2h5cGVyY2FsbDIodHlwZSwgbmFtZSwgYTEsIGEyKQkJ CQkJXAorI2RlZmluZSBfaHlwZXJjYWxsMih4aCwgdHlwZSwgbmFtZSwgYTEsIGEyKQkJCQlcCiAo ewkJCQkJCQkJCVwKIAlfX0hZUEVSQ0FMTF9ERUNMUzsJCQkJCQlcCiAJX19IWVBFUkNBTExfMkFS RyhhMSwgYTIpOwkJCQkJXAogCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKIAkJICAg ICAgOiBfX0hZUEVSQ0FMTF8yUEFSQU0JCQkJXAotCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZ KG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9FTlRSWSh4aCwgbmFtZSkJCQlcCiAJ CSAgICAgIDogX19IWVBFUkNBTExfQ0xPQkJFUjIpOwkJCQlcCiAJKHR5cGUpX19yZXM7CQkJCQkJ CVwKIH0pCiAKLSNkZWZpbmUgX2h5cGVyY2FsbDModHlwZSwgbmFtZSwgYTEsIGEyLCBhMykJCQkJ XAorI2RlZmluZSBfaHlwZXJjYWxsMyh4aCwgdHlwZSwgbmFtZSwgYTEsIGEyLCBhMykJCQkJXAog KHsJCQkJCQkJCQlcCiAJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAogCV9fSFlQRVJDQUxMXzNB UkcoYTEsIGEyLCBhMyk7CQkJCQlcCiAJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAog CQkgICAgICA6IF9fSFlQRVJDQUxMXzNQQVJBTQkJCQlcCi0JCSAgICAgIDogX19IWVBFUkNBTExf RU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKHhoLCBuYW1lKQkJ CVwKIAkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSMyk7CQkJCVwKIAkodHlwZSlfX3JlczsJ CQkJCQkJXAogfSkKIAotI2RlZmluZSBfaHlwZXJjYWxsNCh0eXBlLCBuYW1lLCBhMSwgYTIsIGEz LCBhNCkJCQkJXAorI2RlZmluZSBfaHlwZXJjYWxsNCh4aCwgdHlwZSwgbmFtZSwgYTEsIGEyLCBh MywgYTQpCQkJXAogKHsJCQkJCQkJCQlcCiAJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAogCV9f SFlQRVJDQUxMXzRBUkcoYTEsIGEyLCBhMywgYTQpOwkJCQlcCiAJYXNtIHZvbGF0aWxlIChfX0hZ UEVSQ0FMTAkJCQkJXAogCQkgICAgICA6IF9fSFlQRVJDQUxMXzRQQVJBTQkJCQlcCi0JCSAgICAg IDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VO VFJZKHhoLCBuYW1lKQkJCVwKIAkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSNCk7CQkJCVwK IAkodHlwZSlfX3JlczsJCQkJCQkJXAogfSkKQEAgLTIxMCw3ICsyMTEsNyBAQCB4ZW5fc2luZ2xl X2NhbGwodW5zaWduZWQgaW50IGNhbGwsCiAKIAlhc20gdm9sYXRpbGUoQ0FMTF9OT1NQRUMKIAkJ ICAgICA6IF9fSFlQRVJDQUxMXzVQQVJBTQotCQkgICAgIDogW3RodW5rX3RhcmdldF0gIjAiICho eXBlcmNhbGxfcGFnZSArIGNhbGwpCisJCSAgICAgOiBbdGh1bmtfdGFyZ2V0XSAiMCIgKHhoX2Rl ZmF1bHQtPmh5cGVyY2FsbF9wYWdlICsgY2FsbCkKIAkJICAgICA6IF9fSFlQRVJDQUxMX0NMT0JC RVI1KTsKIAogCXJldHVybiAobG9uZylfX3JlczsKQEAgLTIzMiwxNzAgKzIzMywyMzUgQEAgcHJp dmNtZF9jYWxsKHVuc2lnbmVkIGludCBjYWxsLAogfQogCiBzdGF0aWMgaW5saW5lIGludAotSFlQ RVJWSVNPUl9zZXRfdHJhcF90YWJsZShzdHJ1Y3QgdHJhcF9pbmZvICp0YWJsZSkKK2h5cGVydmlz b3Jfc2V0X3RyYXBfdGFibGUoeGVuaG9zdF90ICp4aCwgc3RydWN0IHRyYXBfaW5mbyAqdGFibGUp CiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwxKGludCwgc2V0X3RyYXBfdGFibGUsIHRhYmxlKTsKKwly ZXR1cm4gX2h5cGVyY2FsbDEoeGgsIGludCwgc2V0X3RyYXBfdGFibGUsIHRhYmxlKTsKIH0KIAor I2RlZmluZSBIWVBFUlZJU09SX3NldF90cmFwX3RhYmxlKHRhYmxlKSBcCisJaHlwZXJ2aXNvcl9z ZXRfdHJhcF90YWJsZSh4aF9kZWZhdWx0LCB0YWJsZSkKKwogc3RhdGljIGlubGluZSBpbnQKLUhZ UEVSVklTT1JfbW11X3VwZGF0ZShzdHJ1Y3QgbW11X3VwZGF0ZSAqcmVxLCBpbnQgY291bnQsCito eXBlcnZpc29yX21tdV91cGRhdGUoeGVuaG9zdF90ICp4aCwgc3RydWN0IG1tdV91cGRhdGUgKnJl cSwgaW50IGNvdW50LAogCQkgICAgICBpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9taWQp CiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgbW11X3VwZGF0ZSwgcmVxLCBjb3VudCwgc3Vj Y2Vzc19jb3VudCwgZG9taWQpOworCXJldHVybiBfaHlwZXJjYWxsNCh4aCwgaW50LCBtbXVfdXBk YXRlLCByZXEsIGNvdW50LCBzdWNjZXNzX2NvdW50LCBkb21pZCk7CiB9CisjZGVmaW5lIEhZUEVS VklTT1JfbW11X3VwZGF0ZShyZXEsIGNvdW50LCBzdWNjZXNzX2NvdW50LCBkb21pZCkJXAorCWh5 cGVydmlzb3JfbW11X3VwZGF0ZSh4aF9kZWZhdWx0LCByZXEsIGNvdW50LCBzdWNjZXNzX2NvdW50 LCBkb21pZCkKIAogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfbW11ZXh0X29wKHN0cnVj dCBtbXVleHRfb3AgKm9wLCBpbnQgY291bnQsCitoeXBlcnZpc29yX21tdWV4dF9vcCh4ZW5ob3N0 X3QgKnhoLCBzdHJ1Y3QgbW11ZXh0X29wICpvcCwgaW50IGNvdW50LAogCQkgICAgIGludCAqc3Vj Y2Vzc19jb3VudCwgZG9taWRfdCBkb21pZCkKIHsKLQlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCBt bXVleHRfb3AsIG9wLCBjb3VudCwgc3VjY2Vzc19jb3VudCwgZG9taWQpOworCXJldHVybiBfaHlw ZXJjYWxsNCh4aCwgaW50LCBtbXVleHRfb3AsIG9wLCBjb3VudCwgc3VjY2Vzc19jb3VudCwgZG9t aWQpOwogfQogCisjZGVmaW5lIEhZUEVSVklTT1JfbW11ZXh0X29wKG9wLCBjb3VudCwgc3VjY2Vz c19jb3VudCwgZG9taWQpCVwKKwloeXBlcnZpc29yX21tdWV4dF9vcCh4aF9kZWZhdWx0LCBvcCwg Y291bnQsIHN1Y2Nlc3NfY291bnQsIGRvbWlkKQorCiBzdGF0aWMgaW5saW5lIGludAotSFlQRVJW SVNPUl9zZXRfZ2R0KHVuc2lnbmVkIGxvbmcgKmZyYW1lX2xpc3QsIGludCBlbnRyaWVzKQoraHlw ZXJ2aXNvcl9zZXRfZ2R0KHhlbmhvc3RfdCAqeGgsIHVuc2lnbmVkIGxvbmcgKmZyYW1lX2xpc3Qs IGludCBlbnRyaWVzKQogewotCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNldF9nZHQsIGZyYW1l X2xpc3QsIGVudHJpZXMpOworCXJldHVybiBfaHlwZXJjYWxsMih4aCwgaW50LCBzZXRfZ2R0LCBm cmFtZV9saXN0LCBlbnRyaWVzKTsKIH0KIAorI2RlZmluZSBIWVBFUlZJU09SX3NldF9nZHQoZnJh bWVfbGlzdCwgZW50cmllcykJCVwKKwloeXBlcnZpc29yX3NldF9nZHQoeGhfZGVmYXVsdCwgZnJh bWVfbGlzdCwgZW50cmllcykKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfY2FsbGJh Y2tfb3AoaW50IGNtZCwgdm9pZCAqYXJnKQoraHlwZXJ2aXNvcl9jYWxsYmFja19vcCh4ZW5ob3N0 X3QgKnhoLCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwg Y2FsbGJhY2tfb3AsIGNtZCwgYXJnKTsKKwlyZXR1cm4gX2h5cGVyY2FsbDIoeGgsIGludCwgY2Fs bGJhY2tfb3AsIGNtZCwgYXJnKTsKIH0KIAorI2RlZmluZSBIWVBFUlZJU09SX2NhbGxiYWNrX29w KGNtZCwgYXJnKQlcCisJaHlwZXJ2aXNvcl9jYWxsYmFja19vcCh4aF9kZWZhdWx0LCBjbWQsIGFy ZykKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2NoZWRfb3AoaW50IGNtZCwgdm9p ZCAqYXJnKQoraHlwZXJ2aXNvcl9zY2hlZF9vcCh4ZW5ob3N0X3QgKnhoLCBpbnQgY21kLCB2b2lk ICphcmcpCiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2NoZWRfb3AsIGNtZCwgYXJnKTsK KwlyZXR1cm4gX2h5cGVyY2FsbDIoeGgsIGludCwgc2NoZWRfb3AsIGNtZCwgYXJnKTsKIH0KIAor I2RlZmluZSBIWVBFUlZJU09SX3NjaGVkX29wKGNtZCwgYXJnKQkJXAorCSBoeXBlcnZpc29yX3Nj aGVkX29wKHhoX2RlZmF1bHQsIGNtZCwgYXJnKQorCiBzdGF0aWMgaW5saW5lIGxvbmcKLUhZUEVS VklTT1Jfc2V0X3RpbWVyX29wKHU2NCB0aW1lb3V0KQoraHlwZXJ2aXNvcl9zZXRfdGltZXJfb3Ao eGVuaG9zdF90ICp4aCwgdTY0IHRpbWVvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2hp ID0gKHVuc2lnbmVkIGxvbmcpKHRpbWVvdXQ+PjMyKTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXRf bG8gPSAodW5zaWduZWQgbG9uZyl0aW1lb3V0OwotCXJldHVybiBfaHlwZXJjYWxsMihsb25nLCBz ZXRfdGltZXJfb3AsIHRpbWVvdXRfbG8sIHRpbWVvdXRfaGkpOworCXJldHVybiBfaHlwZXJjYWxs Mih4aCwgbG9uZywgc2V0X3RpbWVyX29wLCB0aW1lb3V0X2xvLCB0aW1lb3V0X2hpKTsKIH0KIAor I2RlZmluZSBIWVBFUlZJU09SX3NldF90aW1lcl9vcCh0aW1lb3V0KQlcCisJaHlwZXJ2aXNvcl9z ZXRfdGltZXJfb3AoeGhfZGVmYXVsdCwgdGltZW91dCkKKwogc3RhdGljIGlubGluZSBpbnQKLUhZ UEVSVklTT1JfbWNhKHN0cnVjdCB4ZW5fbWMgKm1jX29wKQoraHlwZXJ2aXNvcl9tY2EoeGVuaG9z dF90ICp4aCwgc3RydWN0IHhlbl9tYyAqbWNfb3ApCiB7CiAJbWNfb3AtPmludGVyZmFjZV92ZXJz aW9uID0gWEVOX01DQV9JTlRFUkZBQ0VfVkVSU0lPTjsKLQlyZXR1cm4gX2h5cGVyY2FsbDEoaW50 LCBtY2EsIG1jX29wKTsKKwlyZXR1cm4gX2h5cGVyY2FsbDEoeGgsIGludCwgbWNhLCBtY19vcCk7 CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl9tY2EobWNfb3ApCVwKKwloeXBlcnZpc29yX21jYSh4 aF9kZWZhdWx0LCBtY19vcCkKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfcGxhdGZv cm1fb3Aoc3RydWN0IHhlbl9wbGF0Zm9ybV9vcCAqb3ApCitoeXBlcnZpc29yX3BsYXRmb3JtX29w KHhlbmhvc3RfdCAqeGgsIHN0cnVjdCB4ZW5fcGxhdGZvcm1fb3AgKm9wKQogewogCW9wLT5pbnRl cmZhY2VfdmVyc2lvbiA9IFhFTlBGX0lOVEVSRkFDRV9WRVJTSU9OOwotCXJldHVybiBfaHlwZXJj YWxsMShpbnQsIHBsYXRmb3JtX29wLCBvcCk7CisJcmV0dXJuIF9oeXBlcmNhbGwxKHhoLCBpbnQs IHBsYXRmb3JtX29wLCBvcCk7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl9wbGF0Zm9ybV9vcChv cCkJXAorCWh5cGVydmlzb3JfcGxhdGZvcm1fb3AoeGhfZGVmYXVsdCwgb3ApCisKIHN0YXRpYyBp bmxpbmUgaW50Ci1IWVBFUlZJU09SX3NldF9kZWJ1Z3JlZyhpbnQgcmVnLCB1bnNpZ25lZCBsb25n IHZhbHVlKQoraHlwZXJ2aXNvcl9zZXRfZGVidWdyZWcoeGVuaG9zdF90ICp4aCwgaW50IHJlZywg dW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzZXRfZGVi dWdyZWcsIHJlZywgdmFsdWUpOworCXJldHVybiBfaHlwZXJjYWxsMih4aCwgaW50LCBzZXRfZGVi dWdyZWcsIHJlZywgdmFsdWUpOwogfQogCisjZGVmaW5lIEhZUEVSVklTT1Jfc2V0X2RlYnVncmVn KHJlZywgdmFsdWUpCVwKKwloeXBlcnZpc29yX3NldF9kZWJ1Z3JlZyh4aF9kZWZhdWx0LCByZWcs IHZhbHVlKQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLUhZUEVSVklTT1JfZ2V0X2Rl YnVncmVnKGludCByZWcpCitoeXBlcnZpc29yX2dldF9kZWJ1Z3JlZyh4ZW5ob3N0X3QgKnhoLCBp bnQgcmVnKQogewotCXJldHVybiBfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nLCBnZXRfZGVidWdy ZWcsIHJlZyk7CisJcmV0dXJuIF9oeXBlcmNhbGwxKHhoLCB1bnNpZ25lZCBsb25nLCBnZXRfZGVi dWdyZWcsIHJlZyk7CiB9CisjZGVmaW5lIEhZUEVSVklTT1JfZ2V0X2RlYnVncmVnKHJlZykJXAor CWh5cGVydmlzb3JfZ2V0X2RlYnVncmVnKHhoX2RlZmF1bHQsIHJlZykKIAogc3RhdGljIGlubGlu ZSBpbnQKLUhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IodTY0IG1hLCB1NjQgZGVzYykKK2h5 cGVydmlzb3JfdXBkYXRlX2Rlc2NyaXB0b3IoeGVuaG9zdF90ICp4aCwgdTY0IG1hLCB1NjQgZGVz YykKIHsKIAlpZiAoc2l6ZW9mKHU2NCkgPT0gc2l6ZW9mKGxvbmcpKQotCQlyZXR1cm4gX2h5cGVy Y2FsbDIoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIGRlc2MpOwotCXJldHVybiBfaHlwZXJj YWxsNChpbnQsIHVwZGF0ZV9kZXNjcmlwdG9yLCBtYSwgbWE+PjMyLCBkZXNjLCBkZXNjPj4zMik7 CisJCXJldHVybiBfaHlwZXJjYWxsMih4aCwgaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIGRl c2MpOworCXJldHVybiBfaHlwZXJjYWxsNCh4aCwgaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEs IG1hPj4zMiwgZGVzYywgZGVzYz4+MzIpOwogfQogCisjZGVmaW5lIEhZUEVSVklTT1JfdXBkYXRl X2Rlc2NyaXB0b3IobWEsIGRlc2MpCVwKKwloeXBlcnZpc29yX3VwZGF0ZV9kZXNjcmlwdG9yKHho X2RlZmF1bHQsIG1hLCBkZXNjKQorCiBzdGF0aWMgaW5saW5lIGxvbmcKLUhZUEVSVklTT1JfbWVt b3J5X29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2h5cGVydmlzb3JfbWVtb3J5X29w KHhlbmhvc3RfdCAqeGgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlyZXR1cm4g X2h5cGVyY2FsbDIobG9uZywgbWVtb3J5X29wLCBjbWQsIGFyZyk7CisJcmV0dXJuIF9oeXBlcmNh bGwyKHhoLCBsb25nLCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKIH0KIAorI2RlZmluZSBIWVBFUlZJ U09SX21lbW9yeV9vcChjbWQsIGFyZykJXAorCWh5cGVydmlzb3JfbWVtb3J5X29wKHhoX2RlZmF1 bHQsIGNtZCwgYXJnKQlcCisKIHN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX211bHRpY2Fs bCh2b2lkICpjYWxsX2xpc3QsIHVpbnQzMl90IG5yX2NhbGxzKQoraHlwZXJ2aXNvcl9tdWx0aWNh bGwoeGVuaG9zdF90ICp4aCwgdm9pZCAqY2FsbF9saXN0LCB1aW50MzJfdCBucl9jYWxscykKIHsK LQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBtdWx0aWNhbGwsIGNhbGxfbGlzdCwgbnJfY2FsbHMp OworCXJldHVybiBfaHlwZXJjYWxsMih4aCwgaW50LCBtdWx0aWNhbGwsIGNhbGxfbGlzdCwgbnJf Y2FsbHMpOwogfQogCisjZGVmaW5lIEhZUEVSVklTT1JfbXVsdGljYWxsKGNhbGxfbGlzdCwgbnJf Y2FsbHMpCVwKKwloeXBlcnZpc29yX211bHRpY2FsbCh4aF9kZWZhdWx0LCBjYWxsX2xpc3QsIG5y X2NhbGxzKQorCiBzdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGlu Zyh1bnNpZ25lZCBsb25nIHZhLCBwdGVfdCBuZXdfdmFsLAoraHlwZXJ2aXNvcl91cGRhdGVfdmFf bWFwcGluZyh4ZW5ob3N0X3QgKnhoLCB1bnNpZ25lZCBsb25nIHZhLCBwdGVfdCBuZXdfdmFsLAog CQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWlmIChzaXplb2YobmV3X3ZhbCkgPT0g c2l6ZW9mKGxvbmcpKQotCQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB1cGRhdGVfdmFfbWFwcGlu ZywgdmEsCisJCXJldHVybiBfaHlwZXJjYWxsMyh4aCwgaW50LCB1cGRhdGVfdmFfbWFwcGluZywg dmEsCiAJCQkJICAgbmV3X3ZhbC5wdGUsIGZsYWdzKTsKIAllbHNlCi0JCXJldHVybiBfaHlwZXJj YWxsNChpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKKwkJcmV0dXJuIF9oeXBlcmNhbGw0KHho LCBpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKIAkJCQkgICBuZXdfdmFsLnB0ZSwgbmV3X3Zh bC5wdGUgPj4gMzIsIGZsYWdzKTsKIH0KLWV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHhlbl9ldmVu dF9jaGFubmVsX29wX2NvbXBhdChpbnQsIHZvaWQgKik7CisKKyNkZWZpbmUgSFlQRVJWSVNPUl91 cGRhdGVfdmFfbWFwcGluZyh2YSwgbmV3X3ZhbCwgZmxhZ3MpCVwKKwloeXBlcnZpc29yX3VwZGF0 ZV92YV9tYXBwaW5nKHhoX2RlZmF1bHQsIHZhLCBuZXdfdmFsLCBmbGFncykKKworZXh0ZXJuIGlu dCBfX211c3RfY2hlY2sgeGVuX2V2ZW50X2NoYW5uZWxfb3BfY29tcGF0KHhlbmhvc3RfdCAqeGgs IGludCwgdm9pZCAqKTsKIAogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfZXZlbnRfY2hh bm5lbF9vcChpbnQgY21kLCB2b2lkICphcmcpCitoeXBlcnZpc29yX2V2ZW50X2NoYW5uZWxfb3Ao eGVuaG9zdF90ICp4aCwgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCWludCByYyA9IF9oeXBlcmNh bGwyKGludCwgZXZlbnRfY2hhbm5lbF9vcCwgY21kLCBhcmcpOworCWludCByYyA9IF9oeXBlcmNh bGwyKHhoLCBpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKIAlpZiAodW5saWtlbHko cmMgPT0gLUVOT1NZUykpCi0JCXJjID0geGVuX2V2ZW50X2NoYW5uZWxfb3BfY29tcGF0KGNtZCwg YXJnKTsKKwkJcmMgPSB4ZW5fZXZlbnRfY2hhbm5lbF9vcF9jb21wYXQoeGgsIGNtZCwgYXJnKTsK IAlyZXR1cm4gcmM7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKGNt ZCwgYXJnKQkJXAorCWh5cGVydmlzb3JfZXZlbnRfY2hhbm5lbF9vcCh4aF9kZWZhdWx0LCBjbWQs IGFyZykKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfeGVuX3ZlcnNpb24oaW50IGNt ZCwgdm9pZCAqYXJnKQoraHlwZXJ2aXNvcl94ZW5fdmVyc2lvbih4ZW5ob3N0X3QgKnhoLCBpbnQg Y21kLCB2b2lkICphcmcpCiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgeGVuX3ZlcnNpb24s IGNtZCwgYXJnKTsKKwlyZXR1cm4gX2h5cGVyY2FsbDIoeGgsIGludCwgeGVuX3ZlcnNpb24sIGNt ZCwgYXJnKTsKIH0KIAorI2RlZmluZSBIWVBFUlZJU09SX3hlbl92ZXJzaW9uKGNtZCwgYXJnKQlc CisJaHlwZXJ2aXNvcl94ZW5fdmVyc2lvbih4aF9kZWZhdWx0LCBjbWQsIGFyZykKKwogc3RhdGlj IGlubGluZSBpbnQKLUhZUEVSVklTT1JfY29uc29sZV9pbyhpbnQgY21kLCBpbnQgY291bnQsIGNo YXIgKnN0cikKK2h5cGVydmlzb3JfY29uc29sZV9pbyh4ZW5ob3N0X3QgKnhoLCBpbnQgY21kLCBp bnQgY291bnQsIGNoYXIgKnN0cikKIHsKLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBjb25zb2xl X2lvLCBjbWQsIGNvdW50LCBzdHIpOworCXJldHVybiBfaHlwZXJjYWxsMyh4aCwgaW50LCBjb25z b2xlX2lvLCBjbWQsIGNvdW50LCBzdHIpOwogfQorI2RlZmluZSBIWVBFUlZJU09SX2NvbnNvbGVf aW8oY21kLCBjb3VudCwgc3RyKSBcCisJaHlwZXJ2aXNvcl9jb25zb2xlX2lvKHhoX2RlZmF1bHQs IGNtZCwgY291bnQsIHN0cikKIAotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgeGVuX3BoeXNkZXZf b3BfY29tcGF0KGludCwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIHhlbl9waHlz ZGV2X29wX2NvbXBhdCh4ZW5ob3N0X3QgKnhoLCBpbnQsIHZvaWQgKik7CiAKIHN0YXRpYyBpbmxp bmUgaW50Ci1IWVBFUlZJU09SX3BoeXNkZXZfb3AoaW50IGNtZCwgdm9pZCAqYXJnKQoraHlwZXJ2 aXNvcl9waHlzZGV2X29wKHhlbmhvc3RfdCAqeGgsIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlp bnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBoeXNkZXZfb3AsIGNtZCwgYXJnKTsKKwlpbnQgcmMg PSBfaHlwZXJjYWxsMih4aCwgaW50LCBwaHlzZGV2X29wLCBjbWQsIGFyZyk7CiAJaWYgKHVubGlr ZWx5KHJjID09IC1FTk9TWVMpKQotCQlyYyA9IHhlbl9waHlzZGV2X29wX2NvbXBhdChjbWQsIGFy Zyk7CisJCXJjID0geGVuX3BoeXNkZXZfb3BfY29tcGF0KHhoLCBjbWQsIGFyZyk7CiAJcmV0dXJu IHJjOwogfQorI2RlZmluZSBIWVBFUlZJU09SX3BoeXNkZXZfb3AoY21kLCBhcmcpCVwKKwloeXBl cnZpc29yX3BoeXNkZXZfb3AoeGhfZGVmYXVsdCwgY21kLCBhcmcpCiAKIHN0YXRpYyBpbmxpbmUg aW50Ci1IWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVv cCwgdW5zaWduZWQgaW50IGNvdW50KQoraHlwZXJ2aXNvcl9ncmFudF90YWJsZV9vcCh4ZW5ob3N0 X3QgKnhoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICp1b3AsIHVuc2lnbmVkIGludCBjb3VudCkK IHsKLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBncmFudF90YWJsZV9vcCwgY21kLCB1b3AsIGNv dW50KTsKKwlyZXR1cm4gX2h5cGVyY2FsbDMoeGgsIGludCwgZ3JhbnRfdGFibGVfb3AsIGNtZCwg dW9wLCBjb3VudCk7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChjbWQs IHVvcCwgY291bnQpCVwKKwloeXBlcnZpc29yX2dyYW50X3RhYmxlX29wKHhoX2RlZmF1bHQsIGNt ZCwgdW9wLCBjb3VudCkKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfdm1fYXNzaXN0 KHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGludCB0eXBlKQoraHlwZXJ2aXNvcl92bV9hc3Np c3QoeGVuaG9zdF90ICp4aCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7 Ci0JcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgdm1fYXNzaXN0LCBjbWQsIHR5cGUpOworCXJldHVy biBfaHlwZXJjYWxsMih4aCwgaW50LCB2bV9hc3Npc3QsIGNtZCwgdHlwZSk7CiB9CiAKKyNkZWZp bmUgSFlQRVJWSVNPUl92bV9hc3Npc3QoY21kLCB0eXBlKQkJXAorCWh5cGVydmlzb3Jfdm1fYXNz aXN0KHhoX2RlZmF1bHQsIGNtZCwgdHlwZSkKKwogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklT T1JfdmNwdV9vcChpbnQgY21kLCBpbnQgdmNwdWlkLCB2b2lkICpleHRyYV9hcmdzKQoraHlwZXJ2 aXNvcl92Y3B1X29wKHhlbmhvc3RfdCAqeGgsIGludCBjbWQsIGludCB2Y3B1aWQsIHZvaWQgKmV4 dHJhX2FyZ3MpCiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgdmNwdV9vcCwgY21kLCB2Y3B1 aWQsIGV4dHJhX2FyZ3MpOworCXJldHVybiBfaHlwZXJjYWxsMyh4aCwgaW50LCB2Y3B1X29wLCBj bWQsIHZjcHVpZCwgZXh0cmFfYXJncyk7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl92Y3B1X29w KGNtZCwgdmNwdWlkLCBleHRyYV9hcmdzKQlcCisJaHlwZXJ2aXNvcl92Y3B1X29wKHhoX2RlZmF1 bHQsIGNtZCwgdmNwdWlkLCBleHRyYV9hcmdzKQorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogc3Rh dGljIGlubGluZSBpbnQKLUhZUEVSVklTT1Jfc2V0X3NlZ21lbnRfYmFzZShpbnQgcmVnLCB1bnNp Z25lZCBsb25nIHZhbHVlKQoraHlwZXJ2aXNvcl9zZXRfc2VnbWVudF9iYXNlKHhlbmhvc3RfdCAq eGgsIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0JcmV0dXJuIF9oeXBlcmNhbGwy KGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2YWx1ZSk7CisJcmV0dXJuIF9oeXBlcmNhbGwy KHhoLCBpbnQsIHNldF9zZWdtZW50X2Jhc2UsIHJlZywgdmFsdWUpOwogfQorI2RlZmluZSBIWVBF UlZJU09SX3NldF9zZWdtZW50X2Jhc2UocmVnLCB2YWx1ZSkJCVwKKwloeXBlcnZpc29yX3NldF9z ZWdtZW50X2Jhc2UoeGhfZGVmYXVsdCwgcmVnLCB2YWx1ZSkKICNlbmRpZgogCiBzdGF0aWMgaW5s aW5lIGludAotSFlQRVJWSVNPUl9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgc3RhcnRfaW5mb19tZm4p CitoeXBlcnZpc29yX3N1c3BlbmQoeGVuaG9zdF90ICp4aCwgdW5zaWduZWQgbG9uZyBzdGFydF9p bmZvX21mbikKIHsKIAlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IFNIVVRE T1dOX3N1c3BlbmQgfTsKIApAQCAtNDA1LDM4ICs0NzEsNTMgQEAgSFlQRVJWSVNPUl9zdXNwZW5k KHVuc2lnbmVkIGxvbmcgc3RhcnRfaW5mb19tZm4pCiAJICogaHlwZXJjYWxsIGNhbGxpbmcgY29u dmVudGlvbiB0aGlzIGlzIHRoZSB0aGlyZCBoeXBlcmNhbGwKIAkgKiBhcmd1bWVudCwgd2hpY2gg aXMgc3RhcnRfaW5mb19tZm4gaGVyZS4KIAkgKi8KLQlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCBz Y2hlZF9vcCwgU0NIRURPUF9zaHV0ZG93biwgJnIsIHN0YXJ0X2luZm9fbWZuKTsKKwlyZXR1cm4g X2h5cGVyY2FsbDMoeGgsIGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sICZyLCBzdGFy dF9pbmZvX21mbik7CiB9CisjZGVmaW5lIEhZUEVSVklTT1Jfc3VzcGVuZChzdGFydF9pbmZvX21m bikJXAorCWh5cGVydmlzb3Jfc3VzcGVuZCh4aF9kZWZhdWx0LCBzdGFydF9pbmZvX21mbikKIAog c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawotSFlQRVJWSVNPUl9odm1f b3AoaW50IG9wLCB2b2lkICphcmcpCitoeXBlcnZpc29yX2h2bV9vcCh4ZW5ob3N0X3QgKnhoLCBp bnQgb3AsIHZvaWQgKmFyZykKIHsKLSAgICAgICByZXR1cm4gX2h5cGVyY2FsbDIodW5zaWduZWQg bG9uZywgaHZtX29wLCBvcCwgYXJnKTsKKyAgICAgICByZXR1cm4gX2h5cGVyY2FsbDIoeGgsIHVu c2lnbmVkIGxvbmcsIGh2bV9vcCwgb3AsIGFyZyk7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl9o dm1fb3Aob3AsIGFyZykJXAorCWh5cGVydmlzb3JfaHZtX29wKHhoX2RlZmF1bHQsIG9wLCBhcmcp CisKIHN0YXRpYyBpbmxpbmUgaW50Ci1IWVBFUlZJU09SX3RtZW1fb3AoCitoeXBlcnZpc29yX3Rt ZW1fb3AoCisJeGVuaG9zdF90ICp4aCwKIAlzdHJ1Y3QgdG1lbV9vcCAqb3ApCiB7Ci0JcmV0dXJu IF9oeXBlcmNhbGwxKGludCwgdG1lbV9vcCwgb3ApOworCXJldHVybiBfaHlwZXJjYWxsMSh4aCwg aW50LCB0bWVtX29wLCBvcCk7CiB9CiAKKyNkZWZpbmUgSFlQRVJWSVNPUl90bWVtX29wKG9wKQlc CisJaHlwZXJ2aXNvcl90bWVtX29wKHhoX2RlZmF1bHQsIG9wKQorCiBzdGF0aWMgaW5saW5lIGlu dAotSFlQRVJWSVNPUl94ZW5wbXVfb3AodW5zaWduZWQgaW50IG9wLCB2b2lkICphcmcpCitoeXBl cnZpc29yX3hlbnBtdV9vcCh4ZW5ob3N0X3QgKnhoLCB1bnNpZ25lZCBpbnQgb3AsIHZvaWQgKmFy ZykKIHsKLQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB4ZW5wbXVfb3AsIG9wLCBhcmcpOworCXJl dHVybiBfaHlwZXJjYWxsMih4aCwgaW50LCB4ZW5wbXVfb3AsIG9wLCBhcmcpOwogfQogCisjZGVm aW5lIEhZUEVSVklTT1JfeGVucG11X29wKG9wLCBhcmcpIFwKKwloeXBlcnZpc29yX3hlbnBtdV9v cCh4aF9kZWZhdWx0LCBvcCwgYXJnKQorCiBzdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9k bV9vcCgKK2h5cGVydmlzb3JfZG1fb3AoCisJeGVuaG9zdF90ICp4aCwKIAlkb21pZF90IGRvbSwg dW5zaWduZWQgaW50IG5yX2J1ZnMsIHN0cnVjdCB4ZW5fZG1fb3BfYnVmICpidWZzKQogewogCWlu dCByZXQ7CiAJc3RhYygpOwotCXJldCA9IF9oeXBlcmNhbGwzKGludCwgZG1fb3AsIGRvbSwgbnJf YnVmcywgYnVmcyk7CisJcmV0ID0gX2h5cGVyY2FsbDMoeGgsIGludCwgZG1fb3AsIGRvbSwgbnJf YnVmcywgYnVmcyk7CiAJY2xhYygpOwogCXJldHVybiByZXQ7CiB9CisjZGVmaW5lIEhZUEVSVklT T1JfZG1fb3AoZG9tLCBucl9idWZzLCBidWZzKQlcCisJaHlwZXJ2aXNvcl9kbV9vcCh4aF9kZWZh dWx0LCBkb20sIG5yX2J1ZnMsIGJ1ZnMpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogTVVMVElfZnB1 X3Rhc2tzd2l0Y2goc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCBpbnQgc2V0KQpkaWZmIC0t Z2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5j CmluZGV4IGU5ZGM5MmU3OWFmYS4uZjg4YmIxNGRhM2YyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94 ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0yMCw5ICsy MCw2IEBACiAjaW5jbHVkZSAic21wLmgiCiAjaW5jbHVkZSAicG11LmgiCiAKLXN0cnVjdCBoeXBl cmNhbGxfZW50cnkgKmh5cGVyY2FsbF9wYWdlOwotRVhQT1JUX1NZTUJPTF9HUEwoaHlwZXJjYWxs X3BhZ2UpOwotCiAvKgogICogUG9pbnRlciB0byB0aGUgeGVuX3ZjcHVfaW5mbyBzdHJ1Y3R1cmUg b3IKICAqICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2luZm9bY3B1XS4gU2VlIHhlbl9o dm1faW5pdF9zaGFyZWRfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbl9o dm0uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmMKaW5kZXggNGQ4NWNkMmZmMjYxLi5m ODQ5NDFkNjk0NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZtLmMKKysr IGIvYXJjaC94ODYveGVuL2VubGlnaHRlbl9odm0uYwpAQCAtODUsOCArODUsMjAgQEAgc3RhdGlj IHZvaWQgX19pbml0IHhlbl9odm1faW5pdF9tZW1fbWFwcGluZyh2b2lkKQogCiBleHRlcm4gdWlu dDMyX3QgeGVuX3B2X2NwdWlkX2Jhc2UoeGVuaG9zdF90ICp4aCk7CiAKK3ZvaWQgeGVuX2h2bV9z ZXR1cF9oeXBlcmNhbGxfcGFnZSh4ZW5ob3N0X3QgKnhoKQoreworCXUzMiBtc3I7CisJdTY0IHBm bjsKKworCW1zciA9IGNwdWlkX2VieCh4ZW5ob3N0X2NwdWlkX2Jhc2UoeGgpICsgMik7CisJcGZu ID0gX19wYSh4ZW5faHlwZXJjYWxsX3BhZ2UpOworCXdybXNyX3NhZmUobXNyLCAodTMyKXBmbiwg KHUzMikocGZuID4+IDMyKSk7CisJeGgtPmh5cGVyY2FsbF9wYWdlID0geGVuX2h5cGVyY2FsbF9w YWdlOworfQorCiB4ZW5ob3N0X29wc190IHhoX2h2bV9vcHMgPSB7CiAJLmNwdWlkX2Jhc2UgPSB4 ZW5fcHZfY3B1aWRfYmFzZSwKKwkuc2V0dXBfaHlwZXJjYWxsX3BhZ2UgPSB4ZW5faHZtX3NldHVw X2h5cGVyY2FsbF9wYWdlLAogfTsKIAogeGVuaG9zdF9vcHNfdCB4aF9odm1fbmVzdGVkX29wcyA9 IHsKQEAgLTk2LDYgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X2h2bV9wdl9pbmZv KHZvaWQpCiB7CiAJaW50IG1ham9yLCBtaW5vcjsKIAl1aW50MzJfdCBlYXgsIGVieCwgZWN4LCBl ZHgsIGJhc2U7CisJeGVuaG9zdF90ICoqeGg7CiAKIAliYXNlID0geGVuaG9zdF9jcHVpZF9iYXNl KHhoX2RlZmF1bHQpOwogCWVheCA9IGNwdWlkX2VheChiYXNlICsgMSk7CkBAIC0xMTAsMTQgKzEy MywxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9odm1fcHZfaW5mbyh2b2lkKQogCWlmICh4 ZW5fcHZoX2RvbWFpbigpKQogCQlwdl9pbmZvLm5hbWUgPSAiWGVuIFBWSCI7CiAJZWxzZSB7Ci0J CXU2NCBwZm47Ci0JCXVpbnQzMl90IG1zcjsKLQogCQlwdl9pbmZvLm5hbWUgPSAiWGVuIEhWTSI7 Ci0JCW1zciA9IGNwdWlkX2VieChiYXNlICsgMik7Ci0JCXBmbiA9IF9fcGEoeGVuX2h5cGVyY2Fs bF9wYWdlKTsKLQkJd3Jtc3Jfc2FmZShtc3IsICh1MzIpcGZuLCAodTMyKShwZm4gPj4gMzIpKTsK LQkJaHlwZXJjYWxsX3BhZ2UgPSB4ZW5faHlwZXJjYWxsX3BhZ2U7CisKKwkJZm9yX2VhY2hfeGVu aG9zdCh4aCkKKwkJCXhlbmhvc3Rfc2V0dXBfaHlwZXJjYWxsX3BhZ2UoKnhoKTsKIAl9CiAKIAl4 ZW5fc2V0dXBfZmVhdHVyZXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5f cHYuYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fcHYuYwppbmRleCAzMjM5ZTg0NTJlZGUuLmEy YzA3Y2M3MTQ5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbl9wdi5jCisrKyBi L2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fcHYuYwpAQCAtMTIwMCwxMiArMTIwMCwyMCBAQCB1aW50 MzJfdCB4ZW5fcHZfbmVzdGVkX2NwdWlkX2Jhc2UoeGVuaG9zdF90ICp4aCkKIAkJCQkyIC8qIG5l c3RlZCBzcGVjaWZpYyBsZWFmPyAqLyk7CiB9CiAKK3N0YXRpYyB2b2lkIHhlbl9wdl9zZXR1cF9o eXBlcmNhbGxfcGFnZSh4ZW5ob3N0X3QgKnhoKQoreworCXhoLT5oeXBlcmNhbGxfcGFnZSA9IHhl bl9oeXBlcmNhbGxfcGFnZTsKK30KKwogeGVuaG9zdF9vcHNfdCB4aF9wdl9vcHMgPSB7CiAJLmNw dWlkX2Jhc2UgPSB4ZW5fcHZfY3B1aWRfYmFzZSwKKworCS5zZXR1cF9oeXBlcmNhbGxfcGFnZSA9 IHhlbl9wdl9zZXR1cF9oeXBlcmNhbGxfcGFnZSwKIH07CiAKIHhlbmhvc3Rfb3BzX3QgeGhfcHZf bmVzdGVkX29wcyA9IHsKIAkuY3B1aWRfYmFzZSA9IHhlbl9wdl9uZXN0ZWRfY3B1aWRfYmFzZSwK Kwkuc2V0dXBfaHlwZXJjYWxsX3BhZ2UgPSBOVUxMLAogfTsKIAogLyogRmlyc3QgQyBmdW5jdGlv biB0byBiZSBjYWxsZWQgb24gWGVuIGJvb3QgKi8KQEAgLTEyMTMsMTEgKzEyMjEsMTEgQEAgYXNt bGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgeGVuX3N0YXJ0X2tlcm5lbCh2b2lkKQogewog CXN0cnVjdCBwaHlzZGV2X3NldF9pb3BsIHNldF9pb3BsOwogCXVuc2lnbmVkIGxvbmcgaW5pdHJk X3N0YXJ0ID0gMDsKKwl4ZW5ob3N0X3QgKip4aDsKIAlpbnQgcmM7CiAKIAlpZiAoIXhlbl9zdGFy dF9pbmZvKQogCQlyZXR1cm47Ci0JaHlwZXJjYWxsX3BhZ2UgPSB4ZW5faHlwZXJjYWxsX3BhZ2U7 CiAKIAl4ZW5ob3N0X3JlZ2lzdGVyKHhlbmhvc3RfcjEsICZ4aF9wdl9vcHMpOwogCkBAIC0xMjI4 LDYgKzEyMzYsOSBAQCBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIF9faW5pdCB4ZW5fc3RhcnRf a2VybmVsKHZvaWQpCiAJaWYgKHhlbl9kcml2ZXJfZG9tYWluKCkgJiYgeGVuX25lc3RlZCgpKQog CQl4ZW5ob3N0X3JlZ2lzdGVyKHhlbmhvc3RfcjIsICZ4aF9wdl9uZXN0ZWRfb3BzKTsKIAorCWZv cl9lYWNoX3hlbmhvc3QoeGgpCisJCXhlbmhvc3Rfc2V0dXBfaHlwZXJjYWxsX3BhZ2UoKnhoKTsK KwogCXhlbl9kb21haW5fdHlwZSA9IFhFTl9QVl9ET01BSU47CiAJeGVuX3N0YXJ0X2ZsYWdzID0g eGVuX3N0YXJ0X2luZm8tPmZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdo dGVuX3B2aC5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbl9wdmguYwppbmRleCBlNDc4NjZmY2I3 ZWEuLjUwMjc3ZGZiZGYzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbl9wdmgu YworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX3B2aC5jCkBAIC0yNiw4ICsyNiw3IEBAIGV4 dGVybiB4ZW5ob3N0X29wc190IHhoX2h2bV9vcHMsIHhoX2h2bV9uZXN0ZWRfb3BzOwogCiB2b2lk IF9faW5pdCB4ZW5fcHZoX2luaXQodm9pZCkKIHsKLQl1MzIgbXNyOwotCXU2NCBwZm47CisJeGVu aG9zdF90ICoqeGg7CiAKIAkvKgogCSAqIE5vdGU6IHdlIGhhdmUgYWxyZWFkeSBjYWxsZWQgeGVu X2NwdWlkX2Jhc2UoKSBpbgpAQCAtNDUsMTAgKzQ0LDggQEAgdm9pZCBfX2luaXQgeGVuX3B2aF9p bml0KHZvaWQpCiAJeGVuX3B2aCA9IDE7CiAJeGVuX3N0YXJ0X2ZsYWdzID0gcHZoX3N0YXJ0X2lu Zm8uZmxhZ3M7CiAKLQltc3IgPSBjcHVpZF9lYngoeGVuX2NwdWlkX2Jhc2UoKSArIDIpOwotCXBm biA9IF9fcGEoeGVuX2h5cGVyY2FsbF9wYWdlKTsKLQl3cm1zcl9zYWZlKG1zciwgKHUzMilwZm4s ICh1MzIpKHBmbiA+PiAzMikpOwotCWh5cGVyY2FsbF9wYWdlID0geGVuX2h5cGVyY2FsbF9wYWdl OworCWZvcl9lYWNoX3hlbmhvc3QoeGgpCisJCXhlbmhvc3Rfc2V0dXBfaHlwZXJjYWxsX3BhZ2Uo KnhoKTsKIH0KIAogdm9pZCBfX2luaXQgbWVtX21hcF92aWFfaGNhbGwoc3RydWN0IGJvb3RfcGFy YW1zICpib290X3BhcmFtc19wKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3hlbi1oZWFkLlMg Yi9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUwppbmRleCA3ZmY1NDM3YmQ4M2YuLjZiYmY0ZmY3MDBk NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3hlbi1oZWFkLlMKKysrIGIvYXJjaC94ODYveGVu L3hlbi1oZWFkLlMKQEAgLTcwLDYgKzcwLDkgQEAgRU5UUlkoeGVuX2h5cGVyY2FsbF9wYWdlKQog I2luY2x1ZGUgPGFzbS94ZW4taHlwZXJjYWxscy5oPgogI3VuZGVmIEhZUEVSQ0FMTAogRU5EKHhl bl9oeXBlcmNhbGxfcGFnZSkKKy8qCisgKiBBZGQgeGVuX2h5cGVyY2FsbF9wYWdlMiBmb3IgcmVt b3RlIHhlbmhvc3Q/CisgKi8KIC5wb3BzZWN0aW9uCiAKIAlFTEZOT1RFKFhlbiwgWEVOX0VMRk5P VEVfR1VFU1RfT1MsICAgICAgIC5hc2NpeiAibGludXgiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94 ZW4vZmFsbGJhY2suYyBiL2RyaXZlcnMveGVuL2ZhbGxiYWNrLmMKaW5kZXggYjA0ZmI2NGM1YTkx Li5hZTgxY2Y3NWFlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2ZhbGxiYWNrLmMKKysrIGIv ZHJpdmVycy94ZW4vZmFsbGJhY2suYwpAQCAtNSwxNCArNSwxNCBAQAogI2luY2x1ZGUgPGFzbS9o eXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KIAotaW50IHhlbl9l dmVudF9jaGFubmVsX29wX2NvbXBhdChpbnQgY21kLCB2b2lkICphcmcpCitpbnQgeGVuX2V2ZW50 X2NoYW5uZWxfb3BfY29tcGF0KHhlbmhvc3RfdCAqeGgsIGludCBjbWQsIHZvaWQgKmFyZykKIHsK IAlzdHJ1Y3QgZXZ0Y2huX29wIG9wOwogCWludCByYzsKIAogCW9wLmNtZCA9IGNtZDsKIAltZW1j cHkoJm9wLnUsIGFyZywgc2l6ZW9mKG9wLnUpKTsKLQlyYyA9IF9oeXBlcmNhbGwxKGludCwgZXZl bnRfY2hhbm5lbF9vcF9jb21wYXQsICZvcCk7CisJcmMgPSBfaHlwZXJjYWxsMSh4aCwgaW50LCBl dmVudF9jaGFubmVsX29wX2NvbXBhdCwgJm9wKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBF VlRDSE5PUF9jbG9zZToKQEAgLTQ0LDE0ICs0NCwxNCBAQCBpbnQgeGVuX2V2ZW50X2NoYW5uZWxf b3BfY29tcGF0KGludCBjbWQsIHZvaWQgKmFyZykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhlbl9l dmVudF9jaGFubmVsX29wX2NvbXBhdCk7CiAKLWludCB4ZW5fcGh5c2Rldl9vcF9jb21wYXQoaW50 IGNtZCwgdm9pZCAqYXJnKQoraW50IHhlbl9waHlzZGV2X29wX2NvbXBhdCh4ZW5ob3N0X3QgKnho LCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHBoeXNkZXZfb3Agb3A7CiAJaW50IHJj OwogCiAJb3AuY21kID0gY21kOwogCW1lbWNweSgmb3AudSwgYXJnLCBzaXplb2Yob3AudSkpOwot CXJjID0gX2h5cGVyY2FsbDEoaW50LCBwaHlzZGV2X29wX2NvbXBhdCwgJm9wKTsKKwlyYyA9IF9o eXBlcmNhbGwxKHhoLCBpbnQsIHBoeXNkZXZfb3BfY29tcGF0LCAmb3ApOwogCiAJc3dpdGNoIChj bWQpIHsKIAljYXNlIFBIWVNERVZPUF9JUlFfVU5NQVNLX05PVElGWToKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUveGVuL3hlbmhvc3QuaCBiL2luY2x1ZGUveGVuL3hlbmhvc3QuaAppbmRleCAxM2E3MGJk YWRmZDIuLmQ5YmMxZmI2Y2NlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4veGVuaG9zdC5oCisr KyBiL2luY2x1ZGUveGVuL3hlbmhvc3QuaApAQCAtNzAsNiArNzAsOCBAQCB0eXBlZGVmIHN0cnVj dCB7CiAJZW51bSB4ZW5ob3N0X3R5cGUgdHlwZTsKIAogCXN0cnVjdCB4ZW5ob3N0X29wcyAqb3Bz OworCisJc3RydWN0IGh5cGVyY2FsbF9lbnRyeSAqaHlwZXJjYWxsX3BhZ2U7CiB9IHhlbmhvc3Rf dDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGVuaG9zdF9vcHMgewpAQCAtODMsNiArODUsMjIgQEAgdHlw ZWRlZiBzdHJ1Y3QgeGVuaG9zdF9vcHMgewogCSAqICAgU2VwYXJhdGUgY3B1aWQtbGVhZnM/CiAJ ICovCiAJdWludDMyX3QgKCpjcHVpZF9iYXNlKSh4ZW5ob3N0X3QgKnhlbmhvc3QpOworCisJLyoK KwkgKiBIeXBlcmNhbGwgcGFnZSBpcyBzZXR1cCBhcyB0aGUgZmlyc3QgdGhpbmcgb25jZSB0aGUg UFYvUFZIL1BWSFZNCisJICogY29kZSBkZXRlY3RzIHRoYXQgaXQgaXMgc2VsZWN0ZWQuIFRoZSBm aXJzdCB1c2UgaXMgaW4KKwkgKiB4ZW5fc2V0dXBfZmVhdHVyZXMoKS4KKwkgKgorCSAqIFBWL1BW SC9QVkhWTSBzZXQgdGhpcyB1cCBpbiBkaWZmZXJlbnQgd2F5czogaHlwZXJ2aXNvciB0YWtlcwor CSAqIGNhcmUgb2YgdGhpcyBmb3IgUFYsIFBWSCBhbmQgUFZIVk0gdXNlIHhlbl9jcHVpZC4KKwkg KgorCSAqICB4ZW5ob3N0X3IwOiBwb2ludCBoeXBlcmNhbGxfcGFnZSB0byBleHRlcm5hbCBoeXBl cmNhbGxfcGFnZS4KKwkgKiAgeGVuaG9zdF9yMTogd2hhdCB3ZSBkbyBub3cuCisJICogIHhlbmhv c3RfcjI6IGh5cGVyY2FsbCBpbnRlcmZhY2UgdGhhdCBieXBhc3NlcyBMMS1YZW4gdG8gZ28gZnJv bQorCSAqICAgIEwxLWd1ZXN0IHRvIEwwLVhlbi4gVGhlIGludGVyZmFjZSB3b3VsZCBhbGxvdyBM MC1YZW4gdG8gYmUgYWJsZQorCSAqICAgIHRvIGRlY2lkZSB3aGljaCBwYXJ0aWN1bGFyIEwxLWd1 ZXN0IHdhcyB0aGUgY2FsbGVyLgorCSAqLworCXZvaWQgKCpzZXR1cF9oeXBlcmNhbGxfcGFnZSko eGVuaG9zdF90ICp4ZW5ob3N0KTsKIH0geGVuaG9zdF9vcHNfdDsKIAogZXh0ZXJuIHhlbmhvc3Rf dCAqeGhfZGVmYXVsdCwgKnhoX3JlbW90ZTsKQEAgLTExMyw0ICsxMzEsOSBAQCBzdGF0aWMgaW5s aW5lIHVpbnQzMl90IHhlbmhvc3RfY3B1aWRfYmFzZSh4ZW5ob3N0X3QgKnhoKQogCQlyZXR1cm4g eGVuX2NwdWlkX2Jhc2UoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHhlbmhvc3Rfc2V0dXBf aHlwZXJjYWxsX3BhZ2UoeGVuaG9zdF90ICp4aCkKK3sKKwkoeGgtPm9wcy0+c2V0dXBfaHlwZXJj YWxsX3BhZ2UpKHhoKTsKK30KKwogI2VuZGlmIC8qIF9fWEVOSE9TVF9IICovCi0tIAoyLjIwLjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs