From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [CI 5/6] drm/i915: Perform object clflushing asynchronously Date: Wed, 22 Feb 2017 11:40:48 +0000 Message-ID: <20170222114049.28456-5-chris@chris-wilson.co.uk> References: <20170222114049.28456-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x242.google.com (mail-wr0-x242.google.com [IPv6:2a00:1450:400c:c0c::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 62D5B6E7BF for ; Wed, 22 Feb 2017 11:40:57 +0000 (UTC) Received: by mail-wr0-x242.google.com with SMTP id q39so1146550wrb.2 for ; Wed, 22 Feb 2017 03:40:57 -0800 (PST) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id m188sm2189363wma.27.2017.02.22.03.40.54 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Feb 2017 03:40:54 -0800 (PST) In-Reply-To: <20170222114049.28456-1-chris@chris-wilson.co.uk> 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 Rmx1c2hpbmcgdGhlIGNhY2hlbGluZXMgZm9yIGFuIG9iamVjdCBpcyBzbG93LCBjYW4gYmUgYXMg bXVjaCBhcyAxMDBtcwpmb3IgYSBsYXJnZSBmcmFtZWJ1ZmZlci4gV2UgY3VycmVudGx5IGRvIHRo aXMgdW5kZXIgdGhlIHN0cnVjdF9tdXRleCBCS0wKb24gZXhlY3V0aW9uIG9yIG9uIHBhZ2VmbGlw LiBCdXQgbm93IHdpdGggdGhlIGFiaWxpdHkgdG8gYWRkIGZlbmNlcyB0bwpvYmotPnJlc3YgZm9y IGJvdGggZmxpcHMgYW5kIGV4ZWNidWYgKGFuZCB3ZSBuYXR1cmFsbHkgd2FpdCBvbiB0aGUgZmVu Y2UKYmVmb3JlIENQVSBhY2Nlc3MpLCB3ZSBjYW4gbW92ZSB0aGUgY2xmbHVzaCBvcGVyYXRpb24g dG8gYSB3b3JrcXVldWUgYW5kCnNpZ25hbCBhIGZlbmNlIGZvciBjb21wbGV0aW9uLCB0aGVyZWJ5 IGRvaW5nIHRoZSB3b3JrIGFzeW5jaHJvbm91c2x5IGFuZApub3QgYmxvY2tpbmcgdGhlIGRyaXZl ciBvciBpdHMgY2xpZW50cy4KCnYyOiBJbnRyb2R1Y2UgaTkxNV9nZW1fY2xmbHVzaC5oIGFuZCB1 c2UgYSBuZXcgbmFtZSwgc3BsaXQgb3V0IHNvbWUKZXh0cmFzIGludG8gc2VwYXJhdGUgcGF0Y2hl cy4KClN1Z2dlc3RlZC1ieTogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogSm9v bmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogTWF0dGhl dyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRp bmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICAgICB8ICA1NCArLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2NsZmx1c2guYyAgICB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5oICAgIHwgIDM3ICsrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHwgICA5ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgICAgfCAgNDQgKysrKy0tLQog NyBmaWxlcyBjaGFuZ2VkLCAyNjQgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAxNDkwZDg2MjIyMzQuLmIxYjU4MDMzN2M3YSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAgaTkxNS0kKENPTkZJR19ERUJVR19G UykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9jcmMubwogIyBHRU0gY29kZQogaTkxNS15 ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVfZ2VtX2JhdGNoX3Bvb2wubyBcCisJICBp OTE1X2dlbV9jbGZsdXNoLm8gXAogCSAgaTkxNV9nZW1fY29udGV4dC5vIFwKIAkgIGk5MTVfZ2Vt X2RtYWJ1Zi5vIFwKIAkgIGk5MTVfZ2VtX2V2aWN0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK aW5kZXggYjBlNDUxZWZiNTE5Li5lZmRmMTYxNDNjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aApAQCAtMzM4OSw3ICszMzg5LDcgQEAgaW50IGk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fcmVzZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fcmVzZXRfZmluaXNo KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5MTVfZ2VtX3NldF93 ZWRnZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaTkxNV9nZW1f Y2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCBmb3Jj ZSk7CisKIHZvaWQgaTkxNV9nZW1faW5pdF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0X2h3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRl eCAwMDIxM2MyODI3OTYuLmZhZDBmNWFkYjk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBA IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgogI2luY2x1 ZGUgPGRybS9pOTE1X2RybS5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkx NV9nZW1fY2xmbHVzaC5oIgogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImk5MTVf dHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKQEAgLTMxMzMsNDYgKzMxMzQsNiBAQCBp bnQgaTkxNV9nZW1fd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg dW5zaWduZWQgaW50IGZsYWdzKQogCXJldHVybiAwOwogfQogCi12b2lkIGk5MTVfZ2VtX2NsZmx1 c2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgIGJvb2wg Zm9yY2UpCi17Ci0JLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhZ2UgbGlzdCBzZXQgdXAsIHRoZW4g d2UncmUgbm90IHBpbm5lZAotCSAqIHRvIEdQVSwgYW5kIHdlIGNhbiBpZ25vcmUgdGhlIGNhY2hl IGZsdXNoIGJlY2F1c2UgaXQnbGwgaGFwcGVuCi0JICogYWdhaW4gYXQgYmluZCB0aW1lLgotCSAq LwotCWlmICghb2JqLT5tbS5wYWdlcykgewotCQlHRU1fQlVHX09OKG9iai0+YmFzZS53cml0ZV9k b21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAq IFN0b2xlbiBtZW1vcnkgaXMgYWx3YXlzIGNvaGVyZW50IHdpdGggdGhlIEdQVSBhcyBpdCBpcyBl eHBsaWNpdGx5Ci0JICogbWFya2VkIGFzIHdjIGJ5IHRoZSBzeXN0ZW0sIG9yIHRoZSBzeXN0ZW0g aXMgY2FjaGUtY29oZXJlbnQuCi0JICogU2ltaWxhcmx5LCB3ZSBvbmx5IGFjY2VzcyBzdHJ1Y3Qg cGFnZXMgdGhyb3VnaCB0aGUgQ1BVIGNhY2hlLCBzbwotCSAqIGFueXRoaW5nIG5vdCBiYWNrZWQg YnkgcGh5c2ljYWwgbWVtb3J5IHdlIGNvbnNpZGVyIHRvIGJlIGFsd2F5cwotCSAqIGNvaGVyZW50 IGFuZCBub3QgbmVlZCBjbGZsdXNoaW5nLgotCSAqLwotCWlmICghaTkxNV9nZW1fb2JqZWN0X2hh c19zdHJ1Y3RfcGFnZShvYmopKQotCQlyZXR1cm47Ci0KLQkvKiBJZiB0aGUgR1BVIGlzIHNub29w aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgQ1BVIGNhY2hlLAotCSAqIHdlIGRvIG5vdCBuZWVkIHRv IG1hbnVhbGx5IGNsZWFyIHRoZSBDUFUgY2FjaGUgbGluZXMuICBIb3dldmVyLAotCSAqIHRoZSBj YWNoZXMgYXJlIG9ubHkgc25vb3BlZCB3aGVuIHRoZSByZW5kZXIgY2FjaGUgaXMKLQkgKiBmbHVz aGVkL2ludmFsaWRhdGVkLiAgQXMgd2UgYWx3YXlzIGhhdmUgdG8gZW1pdCBpbnZhbGlkYXRpb25z Ci0JICogYW5kIGZsdXNoZXMgd2hlbiBtb3ZpbmcgaW50byBhbmQgb3V0IG9mIHRoZSBSRU5ERVIg ZG9tYWluLCBjb3JyZWN0Ci0JICogc25vb3BpbmcgYmVoYXZpb3VyIG9jY3VycyBuYXR1cmFsbHkg YXMgdGhlIHJlc3VsdCBvZiBvdXIgZG9tYWluCi0JICogdHJhY2tpbmcuCi0JICovCi0JaWYgKCFm b3JjZSAmJiBpOTE1X2dlbV9vYmplY3RfaXNfY29oZXJlbnQob2JqKSkgewotCQlvYmotPmNhY2hl X2RpcnR5ID0gdHJ1ZTsKLQkJcmV0dXJuOwotCX0KLQotCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9j bGZsdXNoKG9iaik7Ci0JZHJtX2NsZmx1c2hfc2cob2JqLT5tbS5wYWdlcyk7Ci0Jb2JqLT5jYWNo ZV9kaXJ0eSA9IGZhbHNlOwotfQotCiAvKiogRmx1c2hlcyB0aGUgR1RUIHdyaXRlIGRvbWFpbiBm b3IgdGhlIG9iamVjdCBpZiBpdCdzIGRpcnR5LiAqLwogc3RhdGljIHZvaWQKIGk5MTVfZ2VtX29i amVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCkBAIC0zMjEzLDkgKzMxNzQsNyBAQCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRl X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCWlmIChvYmotPmJhc2Uu d3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUpCiAJCXJldHVybjsKIAotCWk5MTVf Z2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgb2JqLT5waW5fZGlzcGxheSk7Ci0JaW50ZWxfZmJfb2Jq X2ZsdXNoKG9iaiwgZmFsc2UsIE9SSUdJTl9DUFUpOwotCisJaTkxNV9nZW1fY2xmbHVzaF9vYmpl Y3Qob2JqLCBJOTE1X0NMRkxVU0hfU1lOQyk7CiAJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7 CiB9CiAKQEAgLTMyMjQsOSArMzE4Myw3IEBAIHN0YXRpYyB2b2lkIF9faTkxNV9nZW1fb2JqZWN0 X2ZsdXNoX2Zvcl9kaXNwbGF5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJaWYg KG9iai0+YmFzZS53cml0ZV9kb21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSAmJiAhb2JqLT5j YWNoZV9kaXJ0eSkKIAkJcmV0dXJuOwogCi0JaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqLCB0 cnVlKTsKLQlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBmYWxzZSwgT1JJR0lOX0NQVSk7Ci0KKwlp OTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIEk5MTVfQ0xGTFVTSF9GT1JDRSk7CiAJb2JqLT5i YXNlLndyaXRlX2RvbWFpbiA9IDA7CiB9CiAKQEAgLTM2NTcsOCArMzYxNCw3IEBAIGk5MTVfZ2Vt X29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCBib29sIHdyaXRlKQogCiAJLyogRmx1c2ggdGhlIENQVSBjYWNoZSBpZiBpdCdzIHN0aWxsIGlu dmFsaWQuICovCiAJaWYgKChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlO X0NQVSkgPT0gMCkgewotCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKLQor CQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIEk5MTVfQ0xGTFVTSF9TWU5DKTsKIAkJb2Jq LT5iYXNlLnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ1BVOwogCX0KIApAQCAtNDUy Niw2ICs0NDgyLDggQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwog CisJaTkxNV9nZW1fY2xmbHVzaF9pbml0KGRldl9wcml2KTsKKwogCWlmICghaTkxNS5lbmFibGVf ZXhlY2xpc3RzKSB7CiAJCWRldl9wcml2LT5ndC5yZXN1bWUgPSBpbnRlbF9sZWdhY3lfc3VibWlz c2lvbl9yZXN1bWU7CiAJCWRldl9wcml2LT5ndC5jbGVhbnVwX2VuZ2luZSA9IGludGVsX2VuZ2lu ZV9jbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xm bHVzaC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzVmZWUwMmYzMTczCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5jCkBAIC0wLDAg KzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNp bmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2Zyb250YnVmZmVyLmgiCisjaW5j bHVkZSAiaTkxNV9nZW1fY2xmbHVzaC5oIgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsZmx1 c2hfbG9jayk7CitzdGF0aWMgdTY0IGNsZmx1c2hfY29udGV4dDsKKworc3RydWN0IGNsZmx1c2gg eworCXN0cnVjdCBkbWFfZmVuY2UgZG1hOyAvKiBNdXN0IGJlIGZpcnN0IGZvciBkbWFfZmVuY2Vf ZnJlZSgpICovCisJc3RydWN0IGk5MTVfc3dfZmVuY2Ugd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworfTsKKworc3RhdGlj IGNvbnN0IGNoYXIgKmk5MTVfY2xmbHVzaF9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2UpCit7CisJcmV0dXJuIERSSVZFUl9OQU1FOworfQorCitzdGF0aWMgY29uc3QgY2hh ciAqaTkxNV9jbGZsdXNoX2dldF90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl KQoreworCXJldHVybiAiY2xmbHVzaCI7Cit9CisKK3N0YXRpYyBib29sIGk5MTVfY2xmbHVzaF9l bmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgdm9pZCBpOTE1X2NsZmx1c2hfcmVsZWFzZShzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSkKK3sKKwlzdHJ1Y3QgY2xmbHVzaCAqY2xmbHVzaCA9IGNvbnRhaW5lcl9vZihmZW5j ZSwgdHlwZW9mKCpjbGZsdXNoKSwgZG1hKTsKKworCWk5MTVfc3dfZmVuY2VfZmluaSgmY2xmbHVz aC0+d2FpdCk7CisKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCpjbGZsdXNoKSwgZG1h KSk7CisJZG1hX2ZlbmNlX2ZyZWUoJmNsZmx1c2gtPmRtYSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZG1hX2ZlbmNlX29wcyBpOTE1X2NsZmx1c2hfb3BzID0geworCS5nZXRfZHJpdmVyX25h bWUgPSBpOTE1X2NsZmx1c2hfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9 IGk5MTVfY2xmbHVzaF9nZXRfdGltZWxpbmVfbmFtZSwKKwkuZW5hYmxlX3NpZ25hbGluZyA9IGk5 MTVfY2xmbHVzaF9lbmFibGVfc2lnbmFsaW5nLAorCS53YWl0ID0gZG1hX2ZlbmNlX2RlZmF1bHRf d2FpdCwKKwkucmVsZWFzZSA9IGk5MTVfY2xmbHVzaF9yZWxlYXNlLAorfTsKKworc3RhdGljIHZv aWQgX19pOTE1X2RvX2NsZmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sK Kwlkcm1fY2xmbHVzaF9zZyhvYmotPm1tLnBhZ2VzKTsKKwlvYmotPmNhY2hlX2RpcnR5ID0gZmFs c2U7CisKKwlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBmYWxzZSwgT1JJR0lOX0NQVSk7Cit9CisK K3N0YXRpYyB2b2lkIGk5MTVfY2xmbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK K3sKKwlzdHJ1Y3QgY2xmbHVzaCAqY2xmbHVzaCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2Yo KmNsZmx1c2gpLCB3b3JrKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gY2xm bHVzaC0+b2JqOworCisJaWYgKCFvYmotPmNhY2hlX2RpcnR5KQorCQlnb3RvIG91dDsKKworCWlm IChpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYWNxdWlyZSBvYmotPnBhZ2VzIGZvciBjbGZsdXNoaW5nXG4iKTsKKwkJZ290byBvdXQ7CisJ fQorCisJX19pOTE1X2RvX2NsZmx1c2gob2JqKTsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9w YWdlcyhvYmopOworCitvdXQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCisJZG1hX2Zl bmNlX3NpZ25hbCgmY2xmbHVzaC0+ZG1hKTsKKwlkbWFfZmVuY2VfcHV0KCZjbGZsdXNoLT5kbWEp OworfQorCitzdGF0aWMgaW50IF9faTkxNV9zd19mZW5jZV9jYWxsCitpOTE1X2NsZmx1c2hfbm90 aWZ5KHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSwKKwkJICAgIGVudW0gaTkxNV9zd19mZW5j ZV9ub3RpZnkgc3RhdGUpCit7CisJc3RydWN0IGNsZmx1c2ggKmNsZmx1c2ggPSBjb250YWluZXJf b2YoZmVuY2UsIHR5cGVvZigqY2xmbHVzaCksIHdhaXQpOworCisJc3dpdGNoIChzdGF0ZSkgewor CWNhc2UgRkVOQ0VfQ09NUExFVEU6CisJCXNjaGVkdWxlX3dvcmsoJmNsZmx1c2gtPndvcmspOwor CQlicmVhazsKKworCWNhc2UgRkVOQ0VfRlJFRToKKwkJZG1hX2ZlbmNlX3B1dCgmY2xmbHVzaC0+ ZG1hKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCit2b2lkIGk5 MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2xmbHVzaCAqY2xmbHVzaDsK KworCS8qCisJICogU3RvbGVuIG1lbW9yeSBpcyBhbHdheXMgY29oZXJlbnQgd2l0aCB0aGUgR1BV IGFzIGl0IGlzIGV4cGxpY2l0bHkKKwkgKiBtYXJrZWQgYXMgd2MgYnkgdGhlIHN5c3RlbSwgb3Ig dGhlIHN5c3RlbSBpcyBjYWNoZS1jb2hlcmVudC4KKwkgKiBTaW1pbGFybHksIHdlIG9ubHkgYWNj ZXNzIHN0cnVjdCBwYWdlcyB0aHJvdWdoIHRoZSBDUFUgY2FjaGUsIHNvCisJICogYW55dGhpbmcg bm90IGJhY2tlZCBieSBwaHlzaWNhbCBtZW1vcnkgd2UgY29uc2lkZXIgdG8gYmUgYWx3YXlzCisJ ICogY29oZXJlbnQgYW5kIG5vdCBuZWVkIGNsZmx1c2hpbmcuCisJICovCisJaWYgKCFpOTE1X2dl bV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpCisJCXJldHVybjsKKworCW9iai0+Y2FjaGVf ZGlydHkgPSB0cnVlOworCisJLyogSWYgdGhlIEdQVSBpcyBzbm9vcGluZyB0aGUgY29udGVudHMg b2YgdGhlIENQVSBjYWNoZSwKKwkgKiB3ZSBkbyBub3QgbmVlZCB0byBtYW51YWxseSBjbGVhciB0 aGUgQ1BVIGNhY2hlIGxpbmVzLiAgSG93ZXZlciwKKwkgKiB0aGUgY2FjaGVzIGFyZSBvbmx5IHNu b29wZWQgd2hlbiB0aGUgcmVuZGVyIGNhY2hlIGlzCisJICogZmx1c2hlZC9pbnZhbGlkYXRlZC4g IEFzIHdlIGFsd2F5cyBoYXZlIHRvIGVtaXQgaW52YWxpZGF0aW9ucworCSAqIGFuZCBmbHVzaGVz IHdoZW4gbW92aW5nIGludG8gYW5kIG91dCBvZiB0aGUgUkVOREVSIGRvbWFpbiwgY29ycmVjdAor CSAqIHNub29waW5nIGJlaGF2aW91ciBvY2N1cnMgbmF0dXJhbGx5IGFzIHRoZSByZXN1bHQgb2Yg b3VyIGRvbWFpbgorCSAqIHRyYWNraW5nLgorCSAqLworCWlmICghKGZsYWdzICYgSTkxNV9DTEZM VVNIX0ZPUkNFKSAmJiBpOTE1X2dlbV9vYmplY3RfaXNfY29oZXJlbnQob2JqKSkKKwkJcmV0dXJu OworCisJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NsZmx1c2gob2JqKTsKKworCWNsZmx1c2ggPSBO VUxMOworCWlmICghKGZsYWdzICYgSTkxNV9DTEZMVVNIX1NZTkMpKQorCQljbGZsdXNoID0ga21h bGxvYyhzaXplb2YoKmNsZmx1c2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xmbHVzaCkgeworCQlk bWFfZmVuY2VfaW5pdCgmY2xmbHVzaC0+ZG1hLAorCQkJICAgICAgICZpOTE1X2NsZmx1c2hfb3Bz LAorCQkJICAgICAgICZjbGZsdXNoX2xvY2ssCisJCQkgICAgICAgY2xmbHVzaF9jb250ZXh0LAor CQkJICAgICAgIDApOworCQlpOTE1X3N3X2ZlbmNlX2luaXQoJmNsZmx1c2gtPndhaXQsIGk5MTVf Y2xmbHVzaF9ub3RpZnkpOworCisJCWNsZmx1c2gtPm9iaiA9IGk5MTVfZ2VtX29iamVjdF9nZXQo b2JqKTsKKwkJSU5JVF9XT1JLKCZjbGZsdXNoLT53b3JrLCBpOTE1X2NsZmx1c2hfd29yayk7CisK KwkJZG1hX2ZlbmNlX2dldCgmY2xmbHVzaC0+ZG1hKTsKKworCQlpOTE1X3N3X2ZlbmNlX2F3YWl0 X3Jlc2VydmF0aW9uKCZjbGZsdXNoLT53YWl0LAorCQkJCQkJb2JqLT5yZXN2LCBOVUxMLAorCQkJ CQkJZmFsc2UsIEk5MTVfRkVOQ0VfVElNRU9VVCwKKwkJCQkJCUdGUF9LRVJORUwpOworCisJCXJl c2VydmF0aW9uX29iamVjdF9sb2NrKG9iai0+cmVzdiwgTlVMTCk7CisJCXJlc2VydmF0aW9uX29i amVjdF9hZGRfZXhjbF9mZW5jZShvYmotPnJlc3YsICZjbGZsdXNoLT5kbWEpOworCQlyZXNlcnZh dGlvbl9vYmplY3RfdW5sb2NrKG9iai0+cmVzdik7CisKKwkJaTkxNV9zd19mZW5jZV9jb21taXQo JmNsZmx1c2gtPndhaXQpOworCX0gZWxzZSBpZiAob2JqLT5tbS5wYWdlcykgeworCQlfX2k5MTVf ZG9fY2xmbHVzaChvYmopOworCX0gZWxzZSB7CisJCUdFTV9CVUdfT04ob2JqLT5iYXNlLndyaXRl X2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwl9Cit9CisKK3ZvaWQgaTkxNV9nZW1f Y2xmbHVzaF9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWNsZmx1c2hf Y29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY2xmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uYjYyZDYxYTJkMTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY2xmbHVzaC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0k5MTVfR0VNX0NMRkxVU0hfSF9f CisjZGVmaW5lIF9fSTkxNV9HRU1fQ0xGTFVTSF9IX18KKworc3RydWN0IGRybV9pOTE1X3ByaXZh dGU7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKKwordm9pZCBpOTE1X2dlbV9jbGZsdXNo X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwordm9pZCBpOTE1X2dlbV9jbGZs dXNoX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgICB1bnNp Z25lZCBpbnQgZmxhZ3MpOworI2RlZmluZSBJOTE1X0NMRkxVU0hfRk9SQ0UgQklUKDApCisjZGVm aW5lIEk5MTVfQ0xGTFVTSF9TWU5DIEJJVCgxKQorCisjZW5kaWYgLyogX19JOTE1X0dFTV9DTEZM VVNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhl Y2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmlu ZGV4IDZmYjI5ODMyYmM2My4uMzVkMmNiOTc5NDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8ZHJtL2k5 MTVfZHJtLmg+CiAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfZ2VtX2Ns Zmx1c2guaCIKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2Lmgi CiAjaW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKQEAgLTExMTQsMTMgKzExMTUsMTUgQEAg aTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2dwdShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKIAkJaWYgKHZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9BU1lO QykKIAkJCWNvbnRpbnVlOwogCisJCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9H RU1fRE9NQUlOX0NQVSkgeworCQkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqLCAwKTsKKwkJ CW9iai0+YmFzZS53cml0ZV9kb21haW4gPSAwOworCQl9CisKIAkJcmV0ID0gaTkxNV9nZW1fcmVx dWVzdF9hd2FpdF9vYmplY3QKIAkJCShyZXEsIG9iaiwgb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVf ZG9tYWluKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0KLQkJaWYgKG9iai0+YmFzZS53 cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQotCQkJaTkxNV9nZW1fY2xmbHVzaF9v YmplY3Qob2JqLCBmYWxzZSk7CiAJfQogCiAJLyogVW5jb25kaXRpb25hbGx5IGZsdXNoIGFueSBj aGlwc2V0IGNhY2hlcyAoZm9yIHN0cmVhbWluZyB3cml0ZXMpLiAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCmluZGV4IDk4ZTBmMGE5NTM1My4uYmI1NzEzOTg1ZTU0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAi aW50ZWxfZnJvbnRidWZmZXIuaCIKICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRl ICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfZ2VtX2NsZmx1c2guaCIKICNpbmNsdWRlICJp bnRlbF9kc2kuaCIKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KQEAgLTEzMTg5LDYgKzEzMTkwLDI5IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9s ZF9vYmogPSBpbnRlbF9mYl9vYmoocGxhbmUtPnN0YXRlLT5mYik7CiAJaW50IHJldDsKIAorCWlm IChvYmopIHsKKwkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUiAmJgor CQkgICAgSU5URUxfSU5GTyhkZXZfcHJpdiktPmN1cnNvcl9uZWVkc19waHlzaWNhbCkgeworCQkJ Y29uc3QgaW50IGFsaWduID0gSVNfSTgzMChkZXZfcHJpdikgPyAxNiAqIDEwMjQgOiAyNTY7CisK KwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhvYmosIGFsaWduKTsKKwkJCWlm IChyZXQpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gYXR0YWNoIHBoeXMgb2JqZWN0 XG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IGk5MTVf dm1hICp2bWE7CisKKwkJCXZtYSA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLCBuZXdf c3RhdGUtPnJvdGF0aW9uKTsKKwkJCWlmIChJU19FUlIodm1hKSkgeworCQkJCURSTV9ERUJVR19L TVMoImZhaWxlZCB0byBwaW4gb2JqZWN0XG4iKTsKKwkJCQlyZXR1cm4gUFRSX0VSUih2bWEpOwor CQkJfQorCisJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpLT52bWEgPSB2bWE7CisJ CX0KKwl9CisKIAlpZiAoIW9iaiAmJiAhb2xkX29iaikKIAkJcmV0dXJuIDA7CiAKQEAgLTEzMjQx LDI2ICsxMzI2NSw2IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJCWk5MTVfZ2VtX29iamVjdF93YWl0X3ByaW9yaXR5KG9iaiwgMCwgSTkxNV9QUklP UklUWV9ESVNQTEFZKTsKIAl9CiAKLQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf Q1VSU09SICYmCi0JICAgIElOVEVMX0lORk8oZGV2X3ByaXYpLT5jdXJzb3JfbmVlZHNfcGh5c2lj YWwpIHsKLQkJaW50IGFsaWduID0gSVNfSTgzMChkZXZfcHJpdikgPyAxNiAqIDEwMjQgOiAyNTY7 Ci0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhvYmosIGFsaWduKTsKLQkJaWYg KHJldCkgewotCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGF0dGFjaCBwaHlzIG9iamVjdFxu Iik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGk5MTVfdm1hICp2 bWE7Ci0KLQkJdm1hID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZmIsIG5ld19zdGF0ZS0+ cm90YXRpb24pOwotCQlpZiAoSVNfRVJSKHZtYSkpIHsKLQkJCURSTV9ERUJVR19LTVMoImZhaWxl ZCB0byBwaW4gb2JqZWN0XG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHZtYSk7Ci0JCX0KLQotCQl0 b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpLT52bWEgPSB2bWE7Ci0JfQotCiAJcmV0dXJu IDA7CiB9CiAKLS0gCjIuMTEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==