From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Wajdeczko Subject: [CI v4 2/3] drm/i915/guc: Introduce buffer based cmd transport Date: Fri, 26 May 2017 11:13:25 +0000 Message-ID: <20170526111326.87280-3-michal.wajdeczko@intel.com> References: <20170526111326.87280-1-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id D25DA6ECB0 for ; Fri, 26 May 2017 11:13:34 +0000 (UTC) In-Reply-To: <20170526111326.87280-1-michal.wajdeczko@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QnVmZmVyIGJhc2VkIGNvbW1hbmQgdHJhbnNwb3J0IGNhbiByZXBsYWNlIE1NSU8gYmFzZWQgbWVj aGFuaXNtLgpJdCBtYXkgYmUgdXNlZCB0byBwZXJmb3JtIGhvc3QtMi1ndWMgYW5kIGd1Yy10by1o b3N0IGNvbW11bmljYXRpb24uCgpQb3J0aW9ucyBvZiB0aGlzIHBhdGNoIGFyZSBiYXNlZCBvbiB3 b3JrIGJ5OgogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4KIFJvYmVy dCBCZWNrZXR0IDxyb2JlcnQuYmVja2V0dEBpbnRlbC5jb20+CiBEYW5pZWxlIENlcmFvbG8gU3B1 cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgoKdjI6IHVzZSBnZW1fb2JqZWN0 X3Bpbl9tYXAgKENocmlzKQogICAgZG9uJ3QgdXNlIERFQlVHX1JBVEVMSU1JVEVEIChDaHJpcykK ICAgIGRvbid0IHRyYWNrIGFjdGlvbiBzdGF0cyAoQ2hyaXMpCiAgICBzaW1wbGlmeSBuZXh0IGZl bmNlIChDaHJpcykKICAgIHVzZSBSRUFEX09OQ0UgKENocmlzKQogICAgbW92ZSBibG9iIGFsbG9j YXRpb24gdG8gbmV3IGZ1bmN0aW9uIChDaHJpcykKCnYzOiB1c2Ugc3RhdGljIG93bmVyIGlkIChE YW5pZWxlKQp2NDogYnV0IGtlZXAgY2hhbm5lbCBpbml0aWFsaXphdGlvbiBnZW5lcmljIChEYW5p ZWxlKQogICAgYW5kIGludHJvZHVjZSBvd25lcl9zdWJfaWQgKERhbmllbGUpCgpTaWduZWQtb2Zm LWJ5OiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KQ2M6IERh bmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJpb0BpbnRlbC5jb20+CkNj OiBPc2NhciBNYXRlbyA8b3NjYXIubWF0ZW9AaW50ZWwuY29tPgpDYzogSm9vbmFzIExhaHRpbmVu IDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+ClJldmlld2VkLWJ5OiBEYW5pZWxlIENlcmFvbG8gU3B1cmlv IDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfY3QuYyAg IHwgNDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Y19jdC5oICAgfCAgODYgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX2Z3aWYuaCB8ICA0MyArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF91Yy5jICAgICAgIHwgIDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oICAg ICAgIHwgICAzICstCiA3IGZpbGVzIGNoYW5nZWQsIDYxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1 Y19jdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj X2N0LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDdiMDVmYjguLjE2ZGNjZjUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCkBAIC01OCw2ICs1OCw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIu byBcCiAKICMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0CiBp OTE1LXkgKz0gaW50ZWxfdWMubyBcCisJICBpbnRlbF9ndWNfY3QubyBcCiAJICBpbnRlbF9ndWNf bG9nLm8gXAogCSAgaW50ZWxfZ3VjX2xvYWRlci5vIFwKIAkgIGludGVsX2h1Yy5vIFwKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCmluZGV4IDliYTIyNDIuLmQyYTU3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaApAQCAtNzYwLDYgKzc2MCw3IEBAIHN0cnVjdCBpbnRlbF9jc3IgewogCWZ1bmMoaGFz X2dtYnVzX2lycSk7IFwKIAlmdW5jKGhhc19nbWNoX2Rpc3BsYXkpOyBcCiAJZnVuYyhoYXNfZ3Vj KTsgXAorCWZ1bmMoaGFzX2d1Y19jdCk7IFwKIAlmdW5jKGhhc19ob3RwbHVnKTsgXAogCWZ1bmMo aGFzX2wzX2RwZik7IFwKIAlmdW5jKGhhc19sbGMpOyBcCkBAIC0yOTQ3LDYgKzI5NDgsNyBAQCBp bnRlbF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKICAqIHBy b3BlcnRpZXMsIHNvIHdlIGhhdmUgc2VwYXJhdGUgbWFjcm9zIHRvIHRlc3QgdGhlbS4KICAqLwog I2RlZmluZSBIQVNfR1VDKGRldl9wcml2KQkoKGRldl9wcml2KS0+aW5mby5oYXNfZ3VjKQorI2Rl ZmluZSBIQVNfR1VDX0NUKGRldl9wcml2KQkoKGRldl9wcml2KS0+aW5mby5oYXNfZ3VjX2N0KQog I2RlZmluZSBIQVNfR1VDX1VDT0RFKGRldl9wcml2KQkoSEFTX0dVQyhkZXZfcHJpdikpCiAjZGVm aW5lIEhBU19HVUNfU0NIRUQoZGV2X3ByaXYpCShIQVNfR1VDKGRldl9wcml2KSkKICNkZWZpbmUg SEFTX0hVQ19VQ09ERShkZXZfcHJpdikJKEhBU19HVUMoZGV2X3ByaXYpKQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2N0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndWNfY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNi ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2N0 LmMKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNi0yMDE3IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICovCisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2d1Y19jdC5o IgorCitlbnVtIHsgQ1RCX1NFTkQgPSAwLCBDVEJfUkVDViA9IDEgfTsKKworZW51bSB7IENUQl9P V05FUl9IT1NUID0gMCB9OworCit2b2lkIGludGVsX2d1Y19jdF9pbml0X2Vhcmx5KHN0cnVjdCBp bnRlbF9ndWNfY3QgKmN0KQoreworCS8qIHdlJ3JlIHVzaW5nIHN0YXRpYyBjaGFubmVsIG93bmVy cyAqLworCWN0LT5ob3N0X2NoYW5uZWwub3duZXIgPSBDVEJfT1dORVJfSE9TVDsKK30KKworc3Rh dGljIGlubGluZSBjb25zdCBjaGFyICpndWNfY3RfYnVmZmVyX3R5cGVfdG9fc3RyKHUzMiB0eXBl KQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSU5URUxfR1VDX0NUX0JVRkZFUl9UWVBFX1NF TkQ6CisJCXJldHVybiAiU0VORCI7CisJY2FzZSBJTlRFTF9HVUNfQ1RfQlVGRkVSX1RZUEVfUkVD VjoKKwkJcmV0dXJuICJSRUNWIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIjxpbnZhbGlkPiI7CisJ fQorfQorCitzdGF0aWMgdm9pZCBndWNfY3RfYnVmZmVyX2Rlc2NfaW5pdChzdHJ1Y3QgZ3VjX2N0 X2J1ZmZlcl9kZXNjICpkZXNjLAorCQkJCSAgICB1MzIgY21kc19hZGRyLCB1MzIgc2l6ZSwgdTMy IG93bmVyKQoreworCURSTV9ERUJVR19EUklWRVIoIkNUOiBkZXNjICVwIGluaXQgYWRkcj0lI3gg c2l6ZT0ldSBvd25lcj0ldVxuIiwKKwkJCSBkZXNjLCBjbWRzX2FkZHIsIHNpemUsIG93bmVyKTsK KwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7CisJZGVzYy0+YWRkciA9IGNtZHNfYWRk cjsKKwlkZXNjLT5zaXplID0gc2l6ZTsKKwlkZXNjLT5vd25lciA9IG93bmVyOworfQorCitzdGF0 aWMgdm9pZCBndWNfY3RfYnVmZmVyX2Rlc2NfcmVzZXQoc3RydWN0IGd1Y19jdF9idWZmZXJfZGVz YyAqZGVzYykKK3sKKwlEUk1fREVCVUdfRFJJVkVSKCJDVDogZGVzYyAlcCByZXNldCBoZWFkPSV1 IHRhaWw9JXVcbiIsCisJCQkgZGVzYywgZGVzYy0+aGVhZCwgZGVzYy0+dGFpbCk7CisJZGVzYy0+ aGVhZCA9IDA7CisJZGVzYy0+dGFpbCA9IDA7CisJZGVzYy0+aXNfaW5fZXJyb3IgPSAwOworfQor CitzdGF0aWMgaW50IGd1Y19hY3Rpb25fcmVnaXN0ZXJfY3RfYnVmZmVyKHN0cnVjdCBpbnRlbF9n dWMgKmd1YywKKwkJCQkJIHUzMiBkZXNjX2FkZHIsCisJCQkJCSB1MzIgdHlwZSkKK3sKKwl1MzIg YWN0aW9uW10gPSB7CisJCUlOVEVMX0dVQ19BQ1RJT05fUkVHSVNURVJfQ09NTUFORF9UUkFOU1BP UlRfQlVGRkVSLAorCQlkZXNjX2FkZHIsCisJCXNpemVvZihzdHJ1Y3QgZ3VjX2N0X2J1ZmZlcl9k ZXNjKSwKKwkJdHlwZQorCX07CisJaW50IGVycjsKKworCS8qIENhbid0IHVzZSBnZW5lcmljIHNl bmQoKSwgQ1QgcmVnaXN0cmF0aW9uIG11c3QgZ28gb3ZlciBNTUlPICovCisJZXJyID0gaW50ZWxf Z3VjX3NlbmRfbW1pbyhndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKKwlpZiAoZXJy KQorCQlEUk1fRVJST1IoIkNUOiByZWdpc3RlciAlcyBidWZmZXIgZmFpbGVkOyBlcnI9JWRcbiIs CisJCQkgIGd1Y19jdF9idWZmZXJfdHlwZV90b19zdHIodHlwZSksIGVycik7CisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBndWNfYWN0aW9uX2RlcmVnaXN0ZXJfY3RfYnVmZmVyKHN0cnVj dCBpbnRlbF9ndWMgKmd1YywKKwkJCQkJICAgdTMyIG93bmVyLAorCQkJCQkgICB1MzIgdHlwZSkK K3sKKwl1MzIgYWN0aW9uW10gPSB7CisJCUlOVEVMX0dVQ19BQ1RJT05fREVSRUdJU1RFUl9DT01N QU5EX1RSQU5TUE9SVF9CVUZGRVIsCisJCW93bmVyLAorCQl0eXBlCisJfTsKKwlpbnQgZXJyOwor CisJLyogQ2FuJ3QgdXNlIGdlbmVyaWMgc2VuZCgpLCBDVCBkZXJlZ2lzdHJhdGlvbiBtdXN0IGdv IG92ZXIgTU1JTyAqLworCWVyciA9IGludGVsX2d1Y19zZW5kX21taW8oZ3VjLCBhY3Rpb24sIEFS UkFZX1NJWkUoYWN0aW9uKSk7CisJaWYgKGVycikKKwkJRFJNX0VSUk9SKCJDVDogZGVyZWdpc3Rl ciAlcyBidWZmZXIgZmFpbGVkOyBvd25lcj0lZCBlcnI9JWRcbiIsCisJCQkgIGd1Y19jdF9idWZm ZXJfdHlwZV90b19zdHIodHlwZSksIG93bmVyLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBib29sIGN0Y2hfaXNfb3BlbihzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2NoYW5uZWwgKmN0Y2gp Cit7CisJcmV0dXJuIGN0Y2gtPnZtYSAhPSBOVUxMOworfQorCitzdGF0aWMgaW50IGN0Y2hfaW5p dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCisJCSAgICAgc3RydWN0IGludGVsX2d1Y19jdF9jaGFu bmVsICpjdGNoKQoreworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCXZvaWQgKmJsb2I7CisJaW50 IGVycjsKKwlpbnQgaTsKKworCUdFTV9CVUdfT04oY3RjaC0+dm1hKTsKKworCS8qIFdlIGFsbG9j YXRlIDEgcGFnZSB0byBob2xkIGJvdGggZGVzY3JpcHRvcnMgYW5kIGJvdGggYnVmZmVycy4KKwkg KiAgICAgICBfX19fX19fX19fXy4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCSAqICAgICAgfGRlc2Mg KFNFTkQpfCAgICAgICAgICAgICAgICAgICA6CisJICogICAgICB8X19fX19fX19fX198ICAgICAg ICAgICAgICAgICAgIFBBR0UvNAorCSAqICAgICAgOl9fX19fX19fX19fLi4uLi4uLi4uLi4uLi4u Li4uLi46CisJICogICAgICB8ZGVzYyAoUkVDVil8ICAgICAgICAgICAgICAgICAgIDoKKwkgKiAg ICAgIHxfX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgUEFHRS80CisJICogICAgICA6X19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXzoKKwkgKiAgICAgIHxjbWRzIChTRU5EKSAgICAg ICAgICAgICAgICAgICAgfAorCSAqICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQUdFLzQKKwkgKiAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCSAq ICAgICAgfGNtZHMgKFJFQ1YpICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0UvNAorCSAqICAgICAgfF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX198CisJICoKKwkgKiBFYWNoIG1lc3NhZ2UgY2FuIHVzZSBhIG1heGlt dW0gb2YgMzIgZHdvcmRzIGFuZCB3ZSBkb24ndCBleHBlY3QgdG8KKwkgKiBoYXZlIG1vcmUgdGhh biAxIGluIGZsaWdodCBhdCBhbnkgdGltZSwgc28gd2UgaGF2ZSBlbm91Z2ggc3BhY2UuCisJICog U29tZSBsb2dpYyBmdXJ0aGVyIGFoZWFkIHdpbGwgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJl IGlzIG9ubHkgMQorCSAqIHBhZ2UgYW5kIHRoYXQgaXQgaXMgYWx3YXlzIG1hcHBlZCwgc28gaWYg dGhlIHNpemUgaXMgY2hhbmdlZCB0aGUKKwkgKiBvdGhlciBjb2RlIHdpbGwgbmVlZCB1cGRhdGlu ZyBhcyB3ZWxsLgorCSAqLworCisJLyogYWxsb2NhdGUgdm1hICovCisJdm1hID0gaW50ZWxfZ3Vj X2FsbG9jYXRlX3ZtYShndWMsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUih2bWEpKSB7CisJCWVy ciA9IFBUUl9FUlIodm1hKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwljdGNoLT52bWEgPSB2bWE7 CisKKwkvKiBtYXAgZmlyc3QgcGFnZSAqLworCWJsb2IgPSBpOTE1X2dlbV9vYmplY3RfcGluX21h cCh2bWEtPm9iaiwgSTkxNV9NQVBfV0IpOworCWlmIChJU19FUlIoYmxvYikpIHsKKwkJZXJyID0g UFRSX0VSUihibG9iKTsKKwkJZ290byBlcnJfdm1hOworCX0KKwlEUk1fREVCVUdfRFJJVkVSKCJD VDogdm1hIGJhc2U9JSN4XG4iLCBndWNfZ2d0dF9vZmZzZXQoY3RjaC0+dm1hKSk7CisKKwkvKiBz dG9yZSBwb2ludGVycyB0byBkZXNjIGFuZCBjbWRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY3RjaC0+Y3Ricyk7IGkrKykgeworCQlHRU1fQlVHX09OKChpICE9IENUQl9TRU5EKSAm JiAoaSAhPSBDVEJfUkVDVikpOworCQljdGNoLT5jdGJzW2ldLmRlc2MgPSBibG9iICsgUEFHRV9T SVpFLzQgKiBpOworCQljdGNoLT5jdGJzW2ldLmNtZHMgPSBibG9iICsgUEFHRV9TSVpFLzQgKiBp ICsgUEFHRV9TSVpFLzI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl92bWE6CisJaTkxNV92bWFf dW5waW5fYW5kX3JlbGVhc2UoJmN0Y2gtPnZtYSk7CitlcnJfb3V0OgorCURSTV9ERUJVR19EUklW RVIoIkNUOiBjaGFubmVsICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZDsgZXJyPSVkXG4iLAorCQkJ IGN0Y2gtPm93bmVyLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGN0Y2hf ZmluaShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCisJCSAgICAgIHN0cnVjdCBpbnRlbF9ndWNfY3Rf Y2hhbm5lbCAqY3RjaCkKK3sKKwlHRU1fQlVHX09OKCFjdGNoLT52bWEpOworCisJaTkxNV9nZW1f b2JqZWN0X3VucGluX21hcChjdGNoLT52bWEtPm9iaik7CisJaTkxNV92bWFfdW5waW5fYW5kX3Jl bGVhc2UoJmN0Y2gtPnZtYSk7Cit9CisKK3N0YXRpYyBpbnQgY3RjaF9vcGVuKHN0cnVjdCBpbnRl bF9ndWMgKmd1YywKKwkJICAgICBzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2NoYW5uZWwgKmN0Y2gpCit7 CisJdTMyIGJhc2U7CisJaW50IGVycjsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIkNU OiBjaGFubmVsICVkIHJlb3Blbj0lc1xuIiwKKwkJCSBjdGNoLT5vd25lciwgeWVzbm8oY3RjaF9p c19vcGVuKGN0Y2gpKSk7CisKKwlpZiAoIWN0Y2gtPnZtYSkgeworCQllcnIgPSBjdGNoX2luaXQo Z3VjLCBjdGNoKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIGVycl9vdXQ7CisJfQor CisJLyogdm1hIHNob3VsZCBiZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgbWFwJ2VkICovCisJYmFz ZSA9IGd1Y19nZ3R0X29mZnNldChjdGNoLT52bWEpOworCisJLyogKHJlKWluaXRpYWxpemUgZGVz Y3JpcHRvcnMKKwkgKiBjbWRzIGJ1ZmZlcnMgYXJlIGluIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUg YmxvYiBwYWdlCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RjaC0+Y3Ricyk7 IGkrKykgeworCQlHRU1fQlVHX09OKChpICE9IENUQl9TRU5EKSAmJiAoaSAhPSBDVEJfUkVDVikp OworCQlndWNfY3RfYnVmZmVyX2Rlc2NfaW5pdChjdGNoLT5jdGJzW2ldLmRlc2MsCisJCQkJCWJh c2UgKyBQQUdFX1NJWkUvNCAqIGkgKyBQQUdFX1NJWkUvMiwKKwkJCQkJUEFHRV9TSVpFLzQsCisJ CQkJCWN0Y2gtPm93bmVyKTsKKwl9CisKKwkvKiByZWdpc3RlciBidWZmZXJzLCBzdGFydGluZyB3 aXJoIFJFQ1YgYnVmZmVyCisJICogZGVzY3JpcHRvcnMgYXJlIGluIGZpcnN0IGhhbGYgb2YgdGhl IGJsb2IKKwkgKi8KKwllcnIgPSBndWNfYWN0aW9uX3JlZ2lzdGVyX2N0X2J1ZmZlcihndWMsCisJ CQkJCSAgICBiYXNlICsgUEFHRV9TSVpFLzQgKiBDVEJfUkVDViwKKwkJCQkJICAgIElOVEVMX0dV Q19DVF9CVUZGRVJfVFlQRV9SRUNWKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byBlcnJf ZmluaTsKKworCWVyciA9IGd1Y19hY3Rpb25fcmVnaXN0ZXJfY3RfYnVmZmVyKGd1YywKKwkJCQkJ ICAgIGJhc2UgKyBQQUdFX1NJWkUvNCAqIENUQl9TRU5ELAorCQkJCQkgICAgSU5URUxfR1VDX0NU X0JVRkZFUl9UWVBFX1NFTkQpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGVycl9kZXJl Z2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl9kZXJlZ2lzdGVyOgorCWd1Y19hY3Rpb25fZGVy ZWdpc3Rlcl9jdF9idWZmZXIoZ3VjLAorCQkJCQljdGNoLT5vd25lciwKKwkJCQkJSU5URUxfR1VD X0NUX0JVRkZFUl9UWVBFX1JFQ1YpOworZXJyX2Zpbmk6CisJY3RjaF9maW5pKGd1YywgY3RjaCk7 CitlcnJfb3V0OgorCURSTV9FUlJPUigiQ1Q6IGNhbid0IG9wZW4gY2hhbm5lbCAlZDsgZXJyPSVk XG4iLCBjdGNoLT5vd25lciwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBj dGNoX2Nsb3NlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJICAgICAgIHN0cnVjdCBpbnRlbF9n dWNfY3RfY2hhbm5lbCAqY3RjaCkKK3sKKwlHRU1fQlVHX09OKCFjdGNoX2lzX29wZW4oY3RjaCkp OworCisJZ3VjX2FjdGlvbl9kZXJlZ2lzdGVyX2N0X2J1ZmZlcihndWMsCisJCQkJCWN0Y2gtPm93 bmVyLAorCQkJCQlJTlRFTF9HVUNfQ1RfQlVGRkVSX1RZUEVfU0VORCk7CisJZ3VjX2FjdGlvbl9k ZXJlZ2lzdGVyX2N0X2J1ZmZlcihndWMsCisJCQkJCWN0Y2gtPm93bmVyLAorCQkJCQlJTlRFTF9H VUNfQ1RfQlVGRkVSX1RZUEVfUkVDVik7CisJY3RjaF9maW5pKGd1YywgY3RjaCk7Cit9CisKK3N0 YXRpYyB1MzIgY3RjaF9nZXRfbmV4dF9mZW5jZShzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2NoYW5uZWwg KmN0Y2gpCit7CisJLyogRm9yIG5vdyBpdCdzIHRyaXZpYWwgKi8KKwlyZXR1cm4gKytjdGNoLT5u ZXh0X2ZlbmNlOworfQorCitzdGF0aWMgaW50IGN0Yl93cml0ZShzdHJ1Y3QgaW50ZWxfZ3VjX2N0 X2J1ZmZlciAqY3RiLAorCQkgICAgIGNvbnN0IHUzMiAqYWN0aW9uLAorCQkgICAgIHUzMiBsZW4g LyogaW4gZHdvcmRzICovLAorCQkgICAgIHUzMiBmZW5jZSkKK3sKKwlzdHJ1Y3QgZ3VjX2N0X2J1 ZmZlcl9kZXNjICpkZXNjID0gY3RiLT5kZXNjOworCXUzMiBoZWFkID0gZGVzYy0+aGVhZCAvIDQ7 CS8qIGluIGR3b3JkcyAqLworCXUzMiB0YWlsID0gZGVzYy0+dGFpbCAvIDQ7CS8qIGluIGR3b3Jk cyAqLworCXUzMiBzaXplID0gZGVzYy0+c2l6ZSAvIDQ7CS8qIGluIGR3b3JkcyAqLworCXUzMiB1 c2VkOwkJCS8qIGluIGR3b3JkcyAqLworCXUzMiBoZWFkZXI7CisJdTMyICpjbWRzID0gY3RiLT5j bWRzOworCXVuc2lnbmVkIGludCBpOworCisJR0VNX0JVR19PTihkZXNjLT5zaXplICUgNCk7CisJ R0VNX0JVR19PTihkZXNjLT5oZWFkICUgNCk7CisJR0VNX0JVR19PTihkZXNjLT50YWlsICUgNCk7 CisJR0VNX0JVR19PTih0YWlsID49IHNpemUpOworCisJLyoKKwkgKiB0YWlsID09IGhlYWQgY29u ZGl0aW9uIGluZGljYXRlcyBlbXB0eS4gR3VDIEZXIGRvZXMgbm90IHN1cHBvcnQKKwkgKiB1c2lu ZyB1cCB0aGUgZW50aXJlIGJ1ZmZlciB0byBnZXQgdGFpbCA9PSBoZWFkIG1lYW5pbmcgZnVsbC4K KwkgKi8KKwlpZiAodGFpbCA8IGhlYWQpCisJCXVzZWQgPSAoc2l6ZSAtIGhlYWQpICsgdGFpbDsK KwllbHNlCisJCXVzZWQgPSB0YWlsIC0gaGVhZDsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBh IHNwYWNlIGluY2x1ZGluZyBleHRyYSBkdyBmb3IgdGhlIGZlbmNlICovCisJaWYgKHVubGlrZWx5 KHVzZWQgKyBsZW4gKyAxID49IHNpemUpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCS8qIFdyaXRl IHRoZSBtZXNzYWdlLiBUaGUgZm9ybWF0IGlzIHRoZSBmb2xsb3dpbmc6CisJICogRFcwOiBoZWFk ZXIgKGluY2x1ZGluZyBhY3Rpb24gY29kZSkKKwkgKiBEVzE6IGZlbmNlCisJICogRFcyKzogYWN0 aW9uIGRhdGEKKwkgKi8KKwloZWFkZXIgPSAobGVuIDw8IEdVQ19DVF9NU0dfTEVOX1NISUZUKSB8 CisJCSAoR1VDX0NUX01TR19XUklURV9GRU5DRV9UT19ERVNDKSB8CisJCSAoYWN0aW9uWzBdIDw8 IEdVQ19DVF9NU0dfQUNUSU9OX1NISUZUKTsKKworCWNtZHNbdGFpbF0gPSBoZWFkZXI7CisJdGFp bCA9ICh0YWlsICsgMSkgJSBzaXplOworCisJY21kc1t0YWlsXSA9IGZlbmNlOworCXRhaWwgPSAo dGFpbCArIDEpICUgc2l6ZTsKKworCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgeworCQljbWRz W3RhaWxdID0gYWN0aW9uW2ldOworCQl0YWlsID0gKHRhaWwgKyAxKSAlIHNpemU7CisJfQorCisJ Lyogbm93IHVwZGF0ZSBkZXNjIHRhaWwgKGJhY2sgaW4gYnl0ZXMpICovCisJZGVzYy0+dGFpbCA9 IHRhaWwgKiA0OworCUdFTV9CVUdfT04oZGVzYy0+dGFpbCA+IGRlc2MtPnNpemUpOworCisJcmV0 dXJuIDA7Cit9CisKKy8qIFdhaXQgZm9yIHRoZSByZXNwb25zZSBmcm9tIHRoZSBHdUMuCisgKiBA ZmVuY2U6CXJlc3BvbnNlIGZlbmNlCisgKiBAc3RhdHVzOglwbGFjZWhvbGRlciBmb3Igc3RhdHVz CisgKiByZXR1cm46CTAgcmVzcG9uc2UgcmVjZWl2ZWQgKHN0YXR1cyBpcyB2YWxpZCkKKyAqCQkt RVRJTUVET1VUIG5vIHJlc3BvbnNlIHdpdGhpbiBoYXJkY29kZWQgdGltZW91dAorICoJCS1FUFJP VE8gbm8gcmVzcG9uc2UsIGN0IGJ1ZmZlciB3YXMgaW4gZXJyb3IKKyAqLworc3RhdGljIGludCB3 YWl0X2Zvcl9yZXNwb25zZShzdHJ1Y3QgZ3VjX2N0X2J1ZmZlcl9kZXNjICpkZXNjLAorCQkJICAg ICB1MzIgZmVuY2UsCisJCQkgICAgIHUzMiAqc3RhdHVzKQoreworCWludCBlcnI7CisKKwkvKgor CSAqIEZhc3QgY29tbWFuZHMgc2hvdWxkIGNvbXBsZXRlIGluIGxlc3MgdGhhbiAxMHVzLCBzbyBz YW1wbGUgcXVpY2tseQorCSAqIHVwIHRvIHRoYXQgbGVuZ3RoIG9mIHRpbWUsIHRoZW4gc3dpdGNo IHRvIGEgc2xvd2VyIHNsZWVwLXdhaXQgbG9vcC4KKwkgKiBObyBHdUMgY29tbWFuZCBzaG91bGQg ZXZlciB0YWtlIGxvbmdlciB0aGFuIDEwbXMuCisJICovCisjZGVmaW5lIGRvbmUgKFJFQURfT05D RShkZXNjLT5mZW5jZSkgPT0gZmVuY2UpCisJZXJyID0gd2FpdF9mb3JfdXMoZG9uZSwgMTApOwor CWlmIChlcnIpCisJCWVyciA9IHdhaXRfZm9yKGRvbmUsIDEwKTsKKyN1bmRlZiBkb25lCisKKwlp ZiAodW5saWtlbHkoZXJyKSkgeworCQlEUk1fRVJST1IoIkNUOiBmZW5jZSAldSBmYWlsZWQ7IHJl cG9ydGVkIGZlbmNlPSV1XG4iLAorCQkJICBmZW5jZSwgZGVzYy0+ZmVuY2UpOworCisJCWlmIChX QVJOX09OKGRlc2MtPmlzX2luX2Vycm9yKSkgeworCQkJLyogU29tZXRoaW5nIHdlbnQgd3Jvbmcg d2l0aCB0aGUgbWVzc2FnaW5nLCB0cnkgdG8gcmVzZXQKKwkJCSAqIHRoZSBidWZmZXIgYW5kIGhv cGUgZm9yIHRoZSBiZXN0CisJCQkgKi8KKwkJCWd1Y19jdF9idWZmZXJfZGVzY19yZXNldChkZXNj KTsKKwkJCWVyciA9IC1FUFJPVE87CisJCX0KKwl9CisKKwkqc3RhdHVzID0gZGVzYy0+c3RhdHVz OworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3RjaF9zZW5kKHN0cnVjdCBpbnRlbF9n dWMgKmd1YywKKwkJICAgICBzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2NoYW5uZWwgKmN0Y2gsCisJCSAg ICAgY29uc3QgdTMyICphY3Rpb24sCisJCSAgICAgdTMyIGxlbiwKKwkJICAgICB1MzIgKnN0YXR1 cykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2J1ZmZlciAqY3RiID0gJmN0Y2gtPmN0YnNbQ1RC X1NFTkRdOworCXN0cnVjdCBndWNfY3RfYnVmZmVyX2Rlc2MgKmRlc2MgPSBjdGItPmRlc2M7CisJ dTMyIGZlbmNlOworCWludCBlcnI7CisKKwlHRU1fQlVHX09OKCFjdGNoX2lzX29wZW4oY3RjaCkp OworCUdFTV9CVUdfT04oIWxlbik7CisJR0VNX0JVR19PTihsZW4gJiB+R1VDX0NUX01TR19MRU5f TUFTSyk7CisKKwlmZW5jZSA9IGN0Y2hfZ2V0X25leHRfZmVuY2UoY3RjaCk7CisJZXJyID0gY3Ri X3dyaXRlKGN0YiwgYWN0aW9uLCBsZW4sIGZlbmNlKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJ cmV0dXJuIGVycjsKKworCWludGVsX2d1Y19ub3RpZnkoZ3VjKTsKKworCWVyciA9IHdhaXRfZm9y X3Jlc3BvbnNlKGRlc2MsIGZlbmNlLCBzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnIpKQorCQly ZXR1cm4gZXJyOworCWlmICgqc3RhdHVzICE9IElOVEVMX0dVQ19TVEFUVVNfU1VDQ0VTUykKKwkJ cmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21tYW5kIFRyYW5zcG9ydCAo Q1QpIGJ1ZmZlciBiYXNlZCBHdUMgc2VuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBpbnRl bF9ndWNfc2VuZF9jdChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1 MzIgbGVuKQoreworCXN0cnVjdCBpbnRlbF9ndWNfY3RfY2hhbm5lbCAqY3RjaCA9ICZndWMtPmN0 Lmhvc3RfY2hhbm5lbDsKKwl1MzIgc3RhdHVzID0gfjA7IC8qIHVuZGVmaW5lZCAqLworCWludCBl cnI7CisKKwltdXRleF9sb2NrKCZndWMtPnNlbmRfbXV0ZXgpOworCisJZXJyID0gY3RjaF9zZW5k KGd1YywgY3RjaCwgYWN0aW9uLCBsZW4sICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnIpKSB7 CisJCURSTV9FUlJPUigiQ1Q6IHNlbmQgYWN0aW9uICUjWCBmYWlsZWQ7IGVycj0lZCBzdGF0dXM9 JSNYXG4iLAorCQkJICBhY3Rpb25bMF0sIGVyciwgc3RhdHVzKTsKKwl9CisKKwltdXRleF91bmxv Y2soJmd1Yy0+c2VuZF9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBFbmFibGUg YnVmZmVyIGJhc2VkIGNvbW1hbmQgdHJhbnNwb3J0CisgKiBTaGFsbCBvbmx5IGJlIGNhbGxlZCBm b3IgcGxhdGZvcm1zIHdpdGggSEFTX0dVQ19DVC4KKyAqIEBndWM6CXRoZSBndWMKKyAqIHJldHVy bjoJMCBvbiBzdWNjZXNzCisgKgkJbm9uLXplcm8gb24gZmFpbHVyZQorICovCitpbnQgaW50ZWxf Z3VjX2VuYWJsZV9jdChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwlzdHJ1Y3QgaW50ZWxfZ3Vj X2N0X2NoYW5uZWwgKmN0Y2ggPSAmZ3VjLT5jdC5ob3N0X2NoYW5uZWw7CisJaW50IGVycjsKKwor CUdFTV9CVUdfT04oIUhBU19HVUNfQ1QoZGV2X3ByaXYpKTsKKworCWVyciA9IGN0Y2hfb3Blbihn dWMsIGN0Y2gpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlyZXR1cm4gZXJyOworCisJLyogU3dp dGNoIGludG8gY21kIHRyYW5zcG9ydCBidWZmZXIgYmFzZWQgc2VuZCgpICovCisJZ3VjLT5zZW5k ID0gaW50ZWxfZ3VjX3NlbmRfY3Q7CisJRFJNX0lORk8oIkNUOiAlc1xuIiwgZW5hYmxlZGRpc2Fi bGVkKHRydWUpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBEaXNhYmxlIGJ1ZmZlciBiYXNl ZCBjb21tYW5kIHRyYW5zcG9ydC4KKyAqIFNoYWxsIG9ubHkgYmUgY2FsbGVkIGZvciBwbGF0Zm9y bXMgd2l0aCBIQVNfR1VDX0NULgorICogQGd1YzogdGhlIGd1YworICovCit2b2lkIGludGVsX2d1 Y19kaXNhYmxlX2N0KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXN0cnVjdCBpbnRlbF9ndWNf Y3RfY2hhbm5lbCAqY3RjaCA9ICZndWMtPmN0Lmhvc3RfY2hhbm5lbDsKKworCUdFTV9CVUdfT04o IUhBU19HVUNfQ1QoZGV2X3ByaXYpKTsKKworCWlmICghY3RjaF9pc19vcGVuKGN0Y2gpKQorCQly ZXR1cm47CisKKwljdGNoX2Nsb3NlKGd1YywgY3RjaCk7CisKKwkvKiBEaXNhYmxlIHNlbmQgKi8K KwlndWMtPnNlbmQgPSBpbnRlbF9ndWNfc2VuZF9ub3A7CisJRFJNX0lORk8oIkNUOiAlc1xuIiwg ZW5hYmxlZGRpc2FibGVkKGZhbHNlKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19jdC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTdmMzYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfY3QuaApAQCAtMCwwICsxLDg2 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVm IF9JTlRFTF9HVUNfQ1RfSF8KKyNkZWZpbmUgX0lOVEVMX0dVQ19DVF9IXworCitzdHJ1Y3QgaW50 ZWxfZ3VjOworc3RydWN0IGk5MTVfdm1hOworCisjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3aWYuaCIK KworLyoqCisgKiBET0M6IENvbW1hbmQgVHJhbnNwb3J0IChDVCkuCisgKgorICogQnVmZmVyIGJh c2VkIGNvbW1hbmQgdHJhbnNwb3J0IGlzIGEgcmVwbGFjZW1lbnQgZm9yIE1NSU8gYmFzZWQgbWVj aGFuaXNtLgorICogSXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBib3RoIGhvc3QtMi1ndWMgYW5k IGd1Yy10by1ob3N0IGNvbW11bmljYXRpb24uCisgKi8KKworLyoqIFJlcHJlc2VudHMgc2luZ2xl IGNvbW1hbmQgdHJhbnNwb3J0IGJ1ZmZlci4KKyAqCisgKiBBIHNpbmdsZSBjb21tYW5kIHRyYW5z cG9ydCBidWZmZXIgY29uc2lzdHMgb2YgdHdvIHBhcnRzLCB0aGUgaGVhZGVyCisgKiByZWNvcmQg KGNvbW1hbmQgdHJhbnNwb3J0IGJ1ZmZlciBkZXNjcmlwdG9yKSBhbmQgdGhlIGFjdHVhbCBidWZm ZXIgd2hpY2gKKyAqIGhvbGRzIHRoZSBjb21tYW5kcy4KKyAqCisgKiBAZGVzYzogcG9pbnRlciB0 byB0aGUgYnVmZmVyIGRlc2NyaXB0b3IKKyAqIEBjbWRzOiBwb2ludGVyIHRvIHRoZSBjb21tYW5k cyBidWZmZXIKKyAqLworc3RydWN0IGludGVsX2d1Y19jdF9idWZmZXIgeworCXN0cnVjdCBndWNf Y3RfYnVmZmVyX2Rlc2MgKmRlc2M7CisJdTMyICpjbWRzOworfTsKKworLyoqIFJlcHJlc2VudHMg cGFpciBvZiBjb21tYW5kIHRyYW5zcG9ydCBidWZmZXJzLgorICoKKyAqIEJ1ZmZlcnMgZ28gaW4g cGFpcnMgdG8gYWxsb3cgYmktZGlyZWN0aW9uYWwgY29tbXVuaWNhdGlvbi4KKyAqIFRvIHNpbXBs aWZ5IHRoZSBjb2RlIHdlIHBsYWNlIGJvdGggb2YgdGhlbSBpbiB0aGUgc2FtZSB2bWEuCisgKiBC dWZmZXJzIGZyb20gdGhlIHNhbWUgcGFpciBtdXN0IHNoYXJlIHVuaXF1ZSBvd25lciBpZC4KKyAq CisgKiBAdm1hOiBwb2ludGVyIHRvIHRoZSB2bWEgd2l0aCBwYWlyIG9mIENUIGJ1ZmZlcnMKKyAq IEBjdGJzOiBidWZmZXJzIGZvciBzZW5kaW5nKDApIGFuZCByZWNlaXZpbmcoMSkgY29tbWFuZHMK KyAqIEBvd25lcjogdW5pcXVlIGlkZW50aWZpZXIKKyAqIEBuZXh0X2ZlbmNlOiBmZW5jZSB0byBi ZSB1c2VkIHdpdGggbmV4dCBzZW5kIGNvbW1hbmQKKyAqLworc3RydWN0IGludGVsX2d1Y19jdF9j aGFubmVsIHsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3QgaW50ZWxfZ3VjX2N0X2J1 ZmZlciBjdGJzWzJdOworCXUzMiBvd25lcjsKKwl1MzIgbmV4dF9mZW5jZTsKK307CisKKy8qKiBI b2xkcyBhbGwgY29tbWFuZCB0cmFuc3BvcnQgY2hhbm5lbHMuCisgKgorICogQGhvc3RfY2hhbm5l bDogbWFpbiBjaGFubmVsIHVzZWQgYnkgdGhlIGhvc3QKKyAqLworc3RydWN0IGludGVsX2d1Y19j dCB7CisJc3RydWN0IGludGVsX2d1Y19jdF9jaGFubmVsIGhvc3RfY2hhbm5lbDsKKwkvKiBvdGhl ciBjaGFubmVscyBhcmUgdGJkICovCit9OworCit2b2lkIGludGVsX2d1Y19jdF9pbml0X2Vhcmx5 KHN0cnVjdCBpbnRlbF9ndWNfY3QgKmN0KTsKKworLyogWFhYOiBtb3ZlIHRvIGludGVsX3VjLmgg PyBkb24ndCBmaXQgdGhlcmUgZWl0aGVyICovCitpbnQgaW50ZWxfZ3VjX2VuYWJsZV9jdChzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMpOwordm9pZCBpbnRlbF9ndWNfZGlzYWJsZV9jdChzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpOworCisjZW5kaWYgLyogX0lOVEVMX0dVQ19DVF9IXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Y19md2lmLmgKaW5kZXggNjE1Njg0NS4uNWZhMjg2MCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCkBAIC0zMzEsNiArMzMxLDQ3IEBAIHN0cnVjdCBn dWNfc3RhZ2VfZGVzYyB7CiAJdTY0IGRlc2NfcHJpdmF0ZTsKIH0gX19wYWNrZWQ7CiAKKy8qCisg KiBEZXNjcmliZXMgc2luZ2xlIGNvbW1hbmQgdHJhbnNwb3J0IGJ1ZmZlci4KKyAqIFVzZWQgYnkg Ym90aCBndWMtbWFzdGVyIGFuZCBjbGllbnRzLgorICovCitzdHJ1Y3QgZ3VjX2N0X2J1ZmZlcl9k ZXNjIHsKKwl1MzIgYWRkcjsJCS8qIGdmeCBhZGRyZXNzICovCisJdTY0IGhvc3RfcHJpdmF0ZTsJ LyogaG9zdCBwcml2YXRlIGRhdGEgKi8KKwl1MzIgc2l6ZTsJCS8qIHNpemUgaW4gYnl0ZXMgKi8K Kwl1MzIgaGVhZDsJCS8qIG9mZnNldCB1cGRhdGVkIGJ5IEd1QyovCisJdTMyIHRhaWw7CQkvKiBv ZmZzZXQgdXBkYXRlZCBieSBvd25lciAqLworCXUzMiBpc19pbl9lcnJvcjsJLyogZXJyb3IgaW5k aWNhdG9yICovCisJdTMyIGZlbmNlOwkJLyogZmVuY2UgdXBkYXRlZCBieSBHdUMgKi8KKwl1MzIg c3RhdHVzOwkJLyogc3RhdHVzIHVwZGF0ZWQgYnkgR3VDICovCisJdTMyIG93bmVyOwkJLyogaWQg b2YgdGhlIGNoYW5uZWwgb3duZXIgKi8KKwl1MzIgb3duZXJfc3ViX2lkOwkvKiBvd25lci1kZWZp bmVkIGZpZWxkIGZvciBleHRyYSB0cmFja2luZyAqLworCXUzMiByZXNlcnZlZFs1XTsKK30gX19w YWNrZWQ7CisKKy8qIFR5cGUgb2YgY29tbWFuZCB0cmFuc3BvcnQgYnVmZmVyICovCisjZGVmaW5l IElOVEVMX0dVQ19DVF9CVUZGRVJfVFlQRV9TRU5ECTB4MHUKKyNkZWZpbmUgSU5URUxfR1VDX0NU X0JVRkZFUl9UWVBFX1JFQ1YJMHgxdQorCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgY29tbWFu ZCB0cmFuc3BvcnQgbWVzc2FnZSBoZWFkZXIgKERXMCkKKyAqCisgKiBiaXRbNC4uMF0JbWVzc2Fn ZSBsZW4gKGluIGR3b3JkcykKKyAqIGJpdFs3Li41XQlyZXNlcnZlZAorICogYml0WzhdCXdyaXRl IGZlbmNlIHRvIGRlc2MKKyAqIGJpdFs5XQl3cml0ZSBzdGF0dXMgdG8gSDJHIGJ1ZmYKKyAqIGJp dFsxMF0Jc2VuZCBzdGF0dXMgKHZpYSBHMkgpCisgKiBiaXRbMTUuLjExXQlyZXNlcnZlZAorICog Yml0WzMxLi4xNl0JYWN0aW9uIGNvZGUKKyAqLworI2RlZmluZSBHVUNfQ1RfTVNHX0xFTl9TSElG VAkJCTAKKyNkZWZpbmUgR1VDX0NUX01TR19MRU5fTUFTSwkJCTB4MUYKKyNkZWZpbmUgR1VDX0NU X01TR19XUklURV9GRU5DRV9UT19ERVNDCQkoMSA8PCA4KQorI2RlZmluZSBHVUNfQ1RfTVNHX1dS SVRFX1NUQVRVU19UT19CVUZGCQkoMSA8PCA5KQorI2RlZmluZSBHVUNfQ1RfTVNHX1NFTkRfU1RB VFVTCQkJKDEgPDwgMTApCisjZGVmaW5lIEdVQ19DVF9NU0dfQUNUSU9OX1NISUZUCQkJMTYKKyNk ZWZpbmUgR1VDX0NUX01TR19BQ1RJT05fTUFTSwkJCTB4RkZGRgorCiAjZGVmaW5lIEdVQ19GT1JD RVdBS0VfUkVOREVSCSgxIDw8IDApCiAjZGVmaW5lIEdVQ19GT1JDRVdBS0VfTUVESUEJKDEgPDwg MSkKIApAQCAtNTE1LDYgKzU1Niw4IEBAIGVudW0gaW50ZWxfZ3VjX2FjdGlvbiB7CiAJSU5URUxf R1VDX0FDVElPTl9FWElUX1NfU1RBVEUgPSAweDUwMiwKIAlJTlRFTF9HVUNfQUNUSU9OX1NMUENf UkVRVUVTVCA9IDB4MzAwMywKIAlJTlRFTF9HVUNfQUNUSU9OX0FVVEhFTlRJQ0FURV9IVUMgPSAw eDQwMDAsCisJSU5URUxfR1VDX0FDVElPTl9SRUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZG RVIgPSAweDQ1MDUsCisJSU5URUxfR1VDX0FDVElPTl9ERVJFR0lTVEVSX0NPTU1BTkRfVFJBTlNQ T1JUX0JVRkZFUiA9IDB4NDUwNiwKIAlJTlRFTF9HVUNfQUNUSU9OX1VLX0xPR19FTkFCTEVfTE9H R0lORyA9IDB4MEUwMDAsCiAJSU5URUxfR1VDX0FDVElPTl9MSU1JVAogfTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF91Yy5jCmluZGV4IDMxZGM4YzMuLmQxNzAyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3VjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMu YwpAQCAtMTA1LDYgKzEwNSw4IEBAIHZvaWQgaW50ZWxfdWNfaW5pdF9lYXJseShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRl dl9wcml2LT5ndWM7CiAKKwlpbnRlbF9ndWNfY3RfaW5pdF9lYXJseSgmZ3VjLT5jdCk7CisKIAlt dXRleF9pbml0KCZndWMtPnNlbmRfbXV0ZXgpOwogCWd1Yy0+c2VuZCA9IGludGVsX2d1Y19zZW5k X25vcDsKIAlndWMtPm5vdGlmeSA9IGd1Y193cml0ZV9pcnFfdHJpZ2dlcjsKQEAgLTI4OCwxNCAr MjkwLDI0IEBAIHN0YXRpYyB2b2lkIGd1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMpCiAKIHN0YXRpYyBpbnQgZ3VjX2VuYWJsZV9jb21tdW5pY2F0aW9uKHN0cnVjdCBpbnRl bF9ndWMgKmd1YykKIHsKLQkvKiBYWFg6IHBsYWNlaG9sZGVyIGZvciBhbHRlcm5hdGUgc2V0dXAg Ki8KKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMp OworCiAJZ3VjX2luaXRfc2VuZF9yZWdzKGd1Yyk7CisKKwlpZiAoSEFTX0dVQ19DVChkZXZfcHJp dikpCisJCXJldHVybiBpbnRlbF9ndWNfZW5hYmxlX2N0KGd1Yyk7CisKIAlndWMtPnNlbmQgPSBp bnRlbF9ndWNfc2VuZF9tbWlvOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBndWNfZGlz YWJsZV9jb21tdW5pY2F0aW9uKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKIHsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCisJaWYgKEhBU19H VUNfQ1QoZGV2X3ByaXYpKQorCQlpbnRlbF9ndWNfZGlzYWJsZV9jdChndWMpOworCiAJZ3VjLT5z ZW5kID0gaW50ZWxfZ3VjX3NlbmRfbm9wOwogfQogCkBAIC00NDIsNiArNDU0LDExIEBAIGludCBp bnRlbF9ndWNfc2VuZF9tbWlvKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgY29uc3QgdTMyICphY3Rp b24sIHUzMiBsZW4pCiAJR0VNX0JVR19PTighbGVuKTsKIAlHRU1fQlVHX09OKGxlbiA+IGd1Yy0+ c2VuZF9yZWdzLmNvdW50KTsKIAorCS8qIElmIENUIGlzIGF2YWlsYWJsZSwgd2UgZXhwZWN0IHRv IHVzZSBNTUlPIG9ubHkgZHVyaW5nIGluaXQvZmluaSAqLworCUdFTV9CVUdfT04oSEFTX0dVQ19D VChkZXZfcHJpdikgJiYKKwkJKmFjdGlvbiAhPSBJTlRFTF9HVUNfQUNUSU9OX1JFR0lTVEVSX0NP TU1BTkRfVFJBTlNQT1JUX0JVRkZFUiAmJgorCQkqYWN0aW9uICE9IElOVEVMX0dVQ19BQ1RJT05f REVSRUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZGRVIpOworCiAJbXV0ZXhfbG9jaygmZ3Vj LT5zZW5kX211dGV4KTsKIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgZ3Vj LT5zZW5kX3JlZ3MuZndfZG9tYWlucyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oCmluZGV4IDkz MGYyZTEuLmZiMWQ2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuaApAQCAtMjcsNyArMjcsNyBA QAogI2luY2x1ZGUgImludGVsX2d1Y19md2lmLmgiCiAjaW5jbHVkZSAiaTkxNV9ndWNfcmVnLmgi CiAjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgotCisjaW5jbHVkZSAiaW50ZWxfZ3VjX2N0 LmgiCiAjaW5jbHVkZSAiaTkxNV92bWEuaCIKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 OwpAQCAtMTczLDYgKzE3Myw3IEBAIHN0cnVjdCBpbnRlbF9ndWNfbG9nIHsKIHN0cnVjdCBpbnRl bF9ndWMgewogCXN0cnVjdCBpbnRlbF91Y19mdyBmdzsKIAlzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyBs b2c7CisJc3RydWN0IGludGVsX2d1Y19jdCBjdDsKIAogCS8qIGludGVsX2d1Y19yZWN2IGludGVy cnVwdCByZWxhdGVkIHN0YXRlICovCiAJYm9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7Ci0tIAoyLjcu NAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==