From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v6 2/2] drm/i915: add in-kernel blitter client Date: Wed, 29 May 2019 13:31:08 +0100 Message-ID: <20190529123108.24422-2-matthew.auld@intel.com> References: <20190529123108.24422-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6DB996E30F for ; Wed, 29 May 2019 12:31:11 +0000 (UTC) In-Reply-To: <20190529123108.24422-1-matthew.auld@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 Cc: CQ Tang List-Id: intel-gfx@lists.freedesktop.org VGhlIHBsYW4gaXMgdG8gdXNlIHRoZSBibGl0dGVyIGVuZ2luZSBmb3IgYXN5bmMgb2JqZWN0IGNs ZWFyaW5nIHdoZW4KdXNpbmcgbG9jYWwgbWVtb3J5LCBidXQgYmVmb3JlIHdlIGNhbiBtb3ZlIHRo ZSB3b3JrZXIgdG8gZ2V0X3BhZ2VzKCkgd2UKaGF2ZSB0byBmaXJzdCB0YW1lIHNvbWUgbW9yZSBv ZiBvdXIgc3RydWN0X211dGV4IHVzYWdlLiBXaXRoIHRoaXMgaW4KbWluZCB3ZSBzaG91bGQgYmUg YWJsZSB0byB1cHN0cmVhbSB0aGUgb2JqZWN0IGNsZWFyaW5nIGFzIHNvbWUKc2VsZnRlc3RzLCB3 aGljaCBzaG91bGQgc2VydmUgYXMgYSBndWluZWEgcGlnIGZvciB0aGUgb25nb2luZyBsb2NraW5n CnJld29yayBhbmQgdXBjb21pbmcgYXN5bmMgZ2V0X3BhZ2VzKCkgZnJhbWV3b3JrLgoKU2lnbmVk LW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpDYzogQ1EgVGFu ZyA8Y3EudGFuZ0BpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgfCAgIDIgKwogLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50 X2JsdC5jICAgIHwgMzA2ICsrKysrKysrKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fY2xpZW50X2JsdC5oICAgIHwgIDIxICsrCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3RfYmx0LmMgICAgfCAxMDkgKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5oICAgIHwgIDI0ICsrCiAuLi4vaTkxNS9nZW0vc2VsZnRl c3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyAgfCAxMjcgKysrKysrKysKIC4uLi9pOTE1L2dlbS9z ZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jICB8IDExMCArKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaCAgfCAgIDEgKwogLi4uL2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggIHwgICAyICsKIDkgZmlsZXMgY2hhbmdl ZCwgNzAyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2Js dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0 cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKaW5kZXggODM1ODhlOTg0MGY4Li5hNzg1MGJiZmZiZTAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCkBAIC05MCw2ICs5MCw3IEBAIG9iai15ICs9IGdlbS8KIGdlbS15ICs9IFwKIAlnZW0vaTkx NV9nZW1fYnVzeS5vIFwKIAlnZW0vaTkxNV9nZW1fY2xmbHVzaC5vIFwKKwlnZW0vaTkxNV9nZW1f Y2xpZW50X2JsdC5vIFwKIAlnZW0vaTkxNV9nZW1fY29udGV4dC5vIFwKIAlnZW0vaTkxNV9nZW1f ZG1hYnVmLm8gXAogCWdlbS9pOTE1X2dlbV9kb21haW4ubyBcCkBAIC05Nyw2ICs5OCw3IEBAIGdl bS15ICs9IFwKIAlnZW0vaTkxNV9nZW1fZmVuY2UubyBcCiAJZ2VtL2k5MTVfZ2VtX2ludGVybmFs Lm8gXAogCWdlbS9pOTE1X2dlbV9vYmplY3QubyBcCisJZ2VtL2k5MTVfZ2VtX29iamVjdF9ibHQu byBcCiAJZ2VtL2k5MTVfZ2VtX21tYW4ubyBcCiAJZ2VtL2k5MTVfZ2VtX3BhZ2VzLm8gXAogCWdl bS9pOTE1X2dlbV9waHlzLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX2NsaWVudF9ibHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9jbGllbnRfYmx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40 ODk5Y2ExZGQ3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fY2xpZW50X2JsdC5jCkBAIC0wLDAgKzEsMzA2IEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRp b24KKyAqLworI2luY2x1ZGUgImk5MTVfZ2VtX2NsaWVudF9ibHQuaCIKKworI2luY2x1ZGUgImk5 MTVfZ2VtX29iamVjdF9ibHQuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworc3RydWN0IGk5 MTVfc2xlZXZlIHsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOworCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7CisJc3RydWN0IGk5MTVfcGFn ZV9zaXplcyBwYWdlX3NpemVzOworfTsKKworc3RhdGljIGludCB2bWFfc2V0X3BhZ2VzKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQoreworCXN0cnVjdCBpOTE1X3NsZWV2ZSAqc2xlZXZlID0gdm1hLT5w cml2YXRlOworCisJdm1hLT5wYWdlcyA9IHNsZWV2ZS0+cGFnZXM7CisJdm1hLT5wYWdlX3NpemVz ID0gc2xlZXZlLT5wYWdlX3NpemVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZt YV9jbGVhcl9wYWdlcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlHRU1fQlVHX09OKCF2bWEt PnBhZ2VzKTsKKwl2bWEtPnBhZ2VzID0gTlVMTDsKK30KKworc3RhdGljIGludCB2bWFfYmluZChz dHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9s ZXZlbCwKKwkJICAgIHUzMiBmbGFncykKK3sKKwlyZXR1cm4gdm1hLT52bS0+dm1hX29wcy5iaW5k X3ZtYSh2bWEsIGNhY2hlX2xldmVsLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtYV91bmJp bmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJdm1hLT52bS0+dm1hX29wcy51bmJpbmRfdm1h KHZtYSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV92bWFfb3BzIHByb3h5X3ZtYV9v cHMgPSB7CisJLnNldF9wYWdlcyA9IHZtYV9zZXRfcGFnZXMsCisJLmNsZWFyX3BhZ2VzID0gdm1h X2NsZWFyX3BhZ2VzLAorCS5iaW5kX3ZtYSA9IHZtYV9iaW5kLAorCS51bmJpbmRfdm1hID0gdm1h X3VuYmluZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9zbGVldmUgKmNyZWF0ZV9zbGVldmUo c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkJIHN0cnVj dCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMpCit7CisJc3RydWN0IGk5MTVfc2xlZXZlICpz bGVldmU7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IGVycjsKKworCXNsZWV2ZSA9IGt6 YWxsb2Moc2l6ZW9mKCpzbGVldmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsZWV2ZSkKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZt LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJZXJyID0gUFRSX0VSUih2bWEpOworCQln b3RvIGVycl9mcmVlOworCX0KKworCXZtYS0+cHJpdmF0ZSA9IHNsZWV2ZTsKKwl2bWEtPm9wcyA9 ICZwcm94eV92bWFfb3BzOworCisJc2xlZXZlLT52bWEgPSB2bWE7CisJc2xlZXZlLT5vYmogPSBp OTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7CisJc2xlZXZlLT5wYWdlcyA9IHBhZ2VzOworCXNsZWV2 ZS0+cGFnZV9zaXplcyA9ICpwYWdlX3NpemVzOworCisJcmV0dXJuIHNsZWV2ZTsKKworZXJyX2Zy ZWU6CisJa2ZyZWUoc2xlZXZlKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMg dm9pZCBkZXN0cm95X3NsZWV2ZShzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSkKK3sKKwlpOTE1 X2dlbV9vYmplY3RfcHV0KHNsZWV2ZS0+b2JqKTsKKwlrZnJlZShzbGVldmUpOworfQorCitzdHJ1 Y3QgY2xlYXJfcGFnZXNfd29yayB7CisJc3RydWN0IGRtYV9mZW5jZSBkbWE7CisJc3RydWN0IGRt YV9mZW5jZV9jYiBjYjsKKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSB3YWl0OworCXN0cnVjdCB3b3Jr X3N0cnVjdCB3b3JrOworCXN0cnVjdCBpcnFfd29yayBpcnFfd29yazsKKwlzdHJ1Y3QgaTkxNV9z bGVldmUgKnNsZWV2ZTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7CisJdTMyIHZhbHVlOwor fTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFyX3BhZ2VzX3dvcmtfZHJpdmVyX25hbWUoc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIERSSVZFUl9OQU1FOworfQorCitzdGF0 aWMgY29uc3QgY2hhciAqY2xlYXJfcGFnZXNfd29ya190aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlKQoreworCXJldHVybiAiY2xlYXIiOworfQorCitzdGF0aWMgdm9pZCBjbGVh cl9wYWdlc193b3JrX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJc3RydWN0 IGNsZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2YoZmVuY2UsIHR5cGVvZigqdyksIGRt YSk7CisKKwlkZXN0cm95X3NsZWV2ZSh3LT5zbGVldmUpOworCisJaTkxNV9zd19mZW5jZV9maW5p KCZ3LT53YWl0KTsKKworCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKncpLCBkbWEpKTsK KwlkbWFfZmVuY2VfZnJlZSgmdy0+ZG1hKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFf ZmVuY2Vfb3BzIGNsZWFyX3BhZ2VzX3dvcmtfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBj bGVhcl9wYWdlc193b3JrX2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IGNsZWFy X3BhZ2VzX3dvcmtfdGltZWxpbmVfbmFtZSwKKwkucmVsZWFzZSA9IGNsZWFyX3BhZ2VzX3dvcmtf cmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3NpZ25hbF9pcnFfd29ya2Vy KHN0cnVjdCBpcnFfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9 IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCBpcnFfd29yayk7CisKKwlkbWFfZmVuY2Vf c2lnbmFsKCZ3LT5kbWEpOworCWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7Cit9CisKK3N0YXRpYyB2 b2lkIGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9jYihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJ CQkgICAgIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQoreworCXN0cnVjdCBjbGVhcl9wYWdlc193 b3JrICp3ID0gY29udGFpbmVyX29mKGNiLCB0eXBlb2YoKncpLCBjYik7CisKKwlpZiAoZmVuY2Ut PmVycm9yKQorCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZ3LT5kbWEsIGZlbmNlLT5lcnJvcik7CisK KwkvKgorCSAqIFB1c2ggdGhlIHNpZ25hbGxpbmcgb2YgdGhlIGZlbmNlIGludG8geWV0IGFub3Ro ZXIgd29ya2VyIHRvIGF2b2lkCisJICogdGhlIG5pZ2h0bWFyZSBsb2NraW5nIGFyb3VuZCB0aGUg ZmVuY2Ugc3BpbmxvY2suCisJICovCisJaXJxX3dvcmtfcXVldWUoJnctPmlycV93b3JrKTsKK30K Kworc3RhdGljIHZvaWQgY2xlYXJfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0 eXBlb2YoKncpLCB3b3JrKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHctPmNl LT5nZW1fY29udGV4dC0+aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g dy0+c2xlZXZlLT5vYmo7CisJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB3LT5zbGVldmUtPnZtYTsK KwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlpbnQgZXJyID0gdy0+ZG1hLmVycm9yOworCisJ aWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0X3NpZ25hbDsKKworCWlmIChvYmotPmNhY2hl X2RpcnR5KSB7CisJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJaWYgKGk5MTVfZ2VtX29iamVj dF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkKKwkJCWRybV9jbGZsdXNoX3NnKHctPnNsZWV2ZS0+cGFn ZXMpOworCQlvYmotPmNhY2hlX2RpcnR5ID0gZmFsc2U7CisJfQorCisJLyogWFhYOiB3ZSBuZWVk IHRvIGtpbGwgdGhpcyAqLworCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwor CWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwlpZiAodW5saWtlbHko ZXJyKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRlKHct PmNlKTsKKwlpZiAoSVNfRVJSKHJxKSkgeworCQllcnIgPSBQVFJfRVJSKHJxKTsKKwkJZ290byBv dXRfdW5waW47CisJfQorCisJLyogVGhlcmUncyBubyB3YXkgdGhlIGZlbmNlIGhhcyBzaWduYWxs ZWQgKi8KKwlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjaygmcnEtPmZlbmNlLCAmdy0+Y2IsCisJ CQkJICAgY2xlYXJfcGFnZXNfZG1hX2ZlbmNlX2NiKSkKKwkJR0VNX0JVR19PTigxKTsKKworCWlm ICh3LT5jZS0+ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYikgeworCQllcnIgPSB3LT5jZS0+ ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYihycSk7CisJCWlmICh1bmxpa2VseShlcnIpKQor CQkJZ290byBvdXRfcmVxdWVzdDsKKwl9CisKKwkvKiBYWFg6IG1vcmUgZmV2ZXJpc2ggbmlnaHRt YXJlcyBhd2FpdCAqLworCWk5MTVfdm1hX2xvY2sodm1hKTsKKwllcnIgPSBpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklURSk7CisJaTkxNV92bWFfdW5sb2Nr KHZtYSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfcmVxdWVzdDsKKworCWVyciA9IGludGVsX2Vt aXRfdm1hX2ZpbGxfYmx0KHJxLCB2bWEsIHctPnZhbHVlKTsKK291dF9yZXF1ZXN0OgorCWlmICh1 bmxpa2VseShlcnIpKSB7CisJCWk5MTVfcmVxdWVzdF9za2lwKHJxLCBlcnIpOworCQllcnIgPSAw OworCX0KKworCWk5MTVfcmVxdWVzdF9hZGQocnEpOworb3V0X3VucGluOgorCWk5MTVfdm1hX3Vu cGluKHZtYSk7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CitvdXRfc2lnbmFsOgorCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWRtYV9mZW5jZV9z ZXRfZXJyb3IoJnctPmRtYSwgZXJyKTsKKwkJZG1hX2ZlbmNlX3NpZ25hbCgmdy0+ZG1hKTsKKwkJ ZG1hX2ZlbmNlX3B1dCgmdy0+ZG1hKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pOTE1X3N3X2Zl bmNlX2NhbGwKK2NsZWFyX3BhZ2VzX3dvcmtfbm90aWZ5KHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpm ZW5jZSwKKwkJCWVudW0gaTkxNV9zd19mZW5jZV9ub3RpZnkgc3RhdGUpCit7CisJc3RydWN0IGNs ZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2YoZmVuY2UsIHR5cGVvZigqdyksIHdhaXQp OworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRkVOQ0VfQ09NUExFVEU6CisJCXNjaGVkdWxl X3dvcmsoJnctPndvcmspOworCQlicmVhazsKKworCWNhc2UgRkVOQ0VfRlJFRToKKwkJZG1hX2Zl bmNlX3B1dCgmdy0+ZG1hKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOwor fQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZlbmNlX2xvY2spOworCisvKiBYWFg6IGJldHRl ciBuYW1lIHBsZWFzZSAqLworaW50IGk5MTVfZ2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UsCisJCQkJICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAorCQkJCSAgICAgc3Ry dWN0IGk5MTVfcGFnZV9zaXplcyAqcGFnZV9zaXplcywKKwkJCQkgICAgIHUzMiB2YWx1ZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7 CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGNlLT5nZW1fY29udGV4dDsKKwlzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqd29y azsKKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZTsKKwlpbnQgZXJyOworCisJdm0gPSBjdHgt PnBwZ3R0ID8gJmN0eC0+cHBndHQtPnZtIDogJmk5MTUtPmdndHQudm07CisKKwlzbGVldmUgPSBj cmVhdGVfc2xlZXZlKHZtLCBvYmosIHBhZ2VzLCBwYWdlX3NpemVzKTsKKwlpZiAoSVNfRVJSKHNs ZWV2ZSkpCisJCXJldHVybiBQVFJfRVJSKHNsZWV2ZSk7CisKKwl3b3JrID0ga21hbGxvYyhzaXpl b2YoKndvcmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdvcmspIHsKKwkJZGVzdHJveV9zbGVldmUo c2xlZXZlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd29yay0+dmFsdWUgPSB2YWx1ZTsK Kwl3b3JrLT5zbGVldmUgPSBzbGVldmU7CisJd29yay0+Y2UgPSBjZTsKKworCUlOSVRfV09SSygm d29yay0+d29yaywgY2xlYXJfcGFnZXNfd29ya2VyKTsKKworCWluaXRfaXJxX3dvcmsoJndvcmst PmlycV93b3JrLCBjbGVhcl9wYWdlc19zaWduYWxfaXJxX3dvcmtlcik7CisKKwlkbWFfZmVuY2Vf aW5pdCgmd29yay0+ZG1hLAorCQkgICAgICAgJmNsZWFyX3BhZ2VzX3dvcmtfb3BzLAorCQkgICAg ICAgJmZlbmNlX2xvY2ssCisJCSAgICAgICBpOTE1LT5tbS51bm9yZGVyZWRfdGltZWxpbmUsCisJ CSAgICAgICAwKTsKKwlpOTE1X3N3X2ZlbmNlX2luaXQoJndvcmstPndhaXQsIGNsZWFyX3BhZ2Vz X3dvcmtfbm90aWZ5KTsKKworCWk5MTVfZ2VtX29iamVjdF9sb2NrKG9iaik7CisJZXJyID0gaTkx NV9zd19mZW5jZV9hd2FpdF9yZXNlcnZhdGlvbigmd29yay0+d2FpdCwKKwkJCQkJICAgICAgb2Jq LT5yZXN2LCBOVUxMLAorCQkJCQkgICAgICB0cnVlLCBJOTE1X0ZFTkNFX1RJTUVPVVQsCisJCQkJ CSAgICAgIEk5MTVfRkVOQ0VfR0ZQKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkbWFfZmVuY2Vfc2V0 X2Vycm9yKCZ3b3JrLT5kbWEsIGVycik7CisJfSBlbHNlIHsKKwkJcmVzZXJ2YXRpb25fb2JqZWN0 X2FkZF9leGNsX2ZlbmNlKG9iai0+cmVzdiwgJndvcmstPmRtYSk7CisJCWVyciA9IDA7CisJfQor CWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKKworCWRtYV9mZW5jZV9nZXQoJndvcmstPmRt YSk7CisJaTkxNV9zd19mZW5jZV9jb21taXQoJndvcmstPndhaXQpOworCisJcmV0dXJuIGVycjsK K30KKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQorI2luY2x1ZGUg InNlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uM2RiZDI4YzIyZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaApAQCAtMCwwICsxLDIx IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2lmbmRlZiBfX0k5MTVfR0VNX0NMSUVO VF9CTFRfSF9fCisjZGVmaW5lIF9fSTkxNV9HRU1fQ0xJRU5UX0JMVF9IX18KKworI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Oworc3RydWN0IGk5 MTVfcGFnZV9zaXplczsKK3N0cnVjdCBpbnRlbF9jb250ZXh0Oworc3RydWN0IHNnX3RhYmxlOwor CitpbnQgaTkxNV9nZW1fc2NoZWR1bGVfZmlsbF9wYWdlc19ibHQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkg ICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCisJCQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3Np emVzICpwYWdlX3NpemVzLAorCQkJCSAgICAgdTMyIHZhbHVlKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF9ibHQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYxZWQwOTJlMWRmNQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmMKQEAgLTAs MCArMSwxMDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJpOTE1X2dl bV9vYmplY3RfYmx0LmgiCisKKyNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgiCisjaW5jbHVk ZSAiaW50ZWxfZHJ2LmgiCisKK2ludCBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKKwkJCSAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJCSAgICB1MzIg dmFsdWUpCit7CisJdTMyICpjczsKKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgOCk7CisJ aWYgKElTX0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCWlmIChJTlRFTF9HRU4o cnEtPmk5MTUpID49IDgpIHsKKwkJKmNzKysgPSBYWV9DT0xPUl9CTFRfQ01EIHwgQkxUX1dSSVRF X1JHQkEgfCAoNy0yKTsKKwkJKmNzKysgPSBCTFRfREVQVEhfMzIgfCBCTFRfUk9QX0NPTE9SX0NP UFkgfCBQQUdFX1NJWkU7CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSB2bWEtPnNpemUgPj4gUEFH RV9TSElGVCA8PCAxNiB8IFBBR0VfU0laRSAvIDQ7CisJCSpjcysrID0gbG93ZXJfMzJfYml0cyh2 bWEtPm5vZGUuc3RhcnQpOworCQkqY3MrKyA9IHVwcGVyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0 KTsKKwkJKmNzKysgPSB2YWx1ZTsKKwkJKmNzKysgPSBNSV9OT09QOworCX0gZWxzZSB7CisJCSpj cysrID0gWFlfQ09MT1JfQkxUX0NNRCB8IEJMVF9XUklURV9SR0JBIHwgKDYtMik7CisJCSpjcysr ID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9DT0xPUl9DT1BZIHwgUEFHRV9TSVpFOworCQkqY3Mr KyA9IDA7CisJCSpjcysrID0gdm1hLT5zaXplID4+IFBBR0VfU0hJRlQgPDwgMTYgfCBQQUdFX1NJ WkUgLyA0OworCQkqY3MrKyA9IHZtYS0+bm9kZS5zdGFydDsKKwkJKmNzKysgPSB2YWx1ZTsKKwkJ KmNzKysgPSBNSV9OT09QOworCQkqY3MrKyA9IE1JX05PT1A7CisJfQorCisJaW50ZWxfcmluZ19h ZHZhbmNlKHJxLCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGk5MTVfZ2VtX29iamVjdF9m aWxsX2JsdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgICBzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY2UsCisJCQkgICAgIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCA9IGNlLT5nZW1fY29udGV4dDsKKwlzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bTsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKKwlpbnQgZXJyOworCisJLyogWFhYOiBjZS0+dm0gcGxlYXNlICovCisJdm0gPSBjdHgt PnBwZ3R0ID8gJmN0eC0+cHBndHQtPnZtIDogJmk5MTUtPmdndHQudm07CisKKwl2bWEgPSBpOTE1 X3ZtYV9pbnN0YW5jZShvYmosIHZtLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkpCisJCXJldHVy biBQVFJfRVJSKHZtYSk7CisKKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNF Uik7CisJaWYgKHVubGlrZWx5KGVycikpCisJCXJldHVybiBlcnI7CisKKwlpZiAob2JqLT5jYWNo ZV9kaXJ0eSAmIH5vYmotPmNhY2hlX2NvaGVyZW50KSB7CisJCWk5MTVfZ2VtX29iamVjdF9sb2Nr KG9iaik7CisJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgMCk7CisJCWk5MTVfZ2VtX29i amVjdF91bmxvY2sob2JqKTsKKwl9CisKKwlycSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoY2UpOwor CWlmIChJU19FUlIocnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOworCQlnb3RvIG91dF91bnBp bjsKKwl9CisKKwllcnIgPSBpOTE1X3JlcXVlc3RfYXdhaXRfb2JqZWN0KHJxLCBvYmosIHRydWUp OworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIG91dF9yZXF1ZXN0OworCisJaWYgKGNlLT5l bmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iKSB7CisJCWVyciA9IGNlLT5lbmdpbmUtPmVtaXRf aW5pdF9icmVhZGNydW1iKHJxKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9y ZXF1ZXN0OworCX0KKworCWk5MTVfdm1hX2xvY2sodm1hKTsKKwllcnIgPSBpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklURSk7CisJaTkxNV92bWFfdW5sb2Nr KHZtYSk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0X3JlcXVlc3Q7CisKKwllcnIg PSBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChycSwgdm1hLCB2YWx1ZSk7CitvdXRfcmVxdWVzdDoK KwlpZiAodW5saWtlbHkoZXJyKSkKKwkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIGVycik7CisKKwlp OTE1X3JlcXVlc3RfYWRkKHJxKTsKK291dF91bnBpbjoKKwlpOTE1X3ZtYV91bnBpbih2bWEpOwor CXJldHVybiBlcnI7Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVT VCkKKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jIgorI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF9ibHQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdlYzdkZTZhYzBjMAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmgK QEAgLTAsMCArMSwyNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoK KyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBf X0k5MTVfR0VNX09CSkVDVF9CTFRfSF9fCisjZGVmaW5lIF9fSTkxNV9HRU1fT0JKRUNUX0JMVF9I X18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0Oworc3RydWN0IGludGVsX2NvbnRleHQ7CitzdHJ1Y3QgaTkxNV9yZXF1ZXN0Oworc3RydWN0 IGk5MTVfdm1hOworCitpbnQgaW50ZWxfZW1pdF92bWFfZmlsbF9ibHQoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCisJCQkgICAgc3RydWN0IGk5MTVfdm1hICp2bWEsCisJCQkgICAgdTMyIHZhbHVl KTsKKworaW50IGk5MTVfZ2VtX29iamVjdF9maWxsX2JsdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkgICAgIHUz MiB2YWx1ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmYzYTVlYjgwN2MxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCkBAIC0w LDAgKzEsMTI3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9z ZWxmdGVzdC5oIgorCisjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9mbHVzaF90ZXN0LmgiCisjaW5j bHVkZSAic2VsZnRlc3RzL21vY2tfZHJtLmgiCisjaW5jbHVkZSAibW9ja19jb250ZXh0LmgiCisK K3N0YXRpYyBpbnQgaWd0X2NsaWVudF9maWxsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjZS0+ Z2VtX2NvbnRleHQtPmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlz dHJ1Y3Qgcm5kX3N0YXRlIHBybmc7CisJSUdUX1RJTUVPVVQoZW5kKTsKKwl1MzIgKnZhZGRyOwor CWludCBlcnIgPSAwOworCisJcHJhbmRvbV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0 LnJhbmRvbV9zZWVkKTsKKworCWRvIHsKKwkJdTMyIHN6ID0gcHJhbmRvbV91MzJfc3RhdGUoJnBy bmcpICUgU1pfMzJNOworCQl1MzIgdmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOworCQl1 MzIgaTsKKworCQlzeiA9IHJvdW5kX3VwKHN6LCBQQUdFX1NJWkUpOworCisJCXByX2RlYnVnKCIl cyB3aXRoIHN6PSV4LCB2YWw9JXhcbiIsIF9fZnVuY19fLCBzeiwgdmFsKTsKKworCQlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUsIHN6KTsKKwkJaWYgKElTX0VSUihv YmopKSB7CisJCQllcnIgPSBQVFJfRVJSKG9iaik7CisJCQlnb3RvIGVycl9mbHVzaDsKKwkJfQor CisJCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAob2JqLCBJOTE1X01BUF9XQik7CisJ CWlmIChJU19FUlIodmFkZHIpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsKKwkJCWdvdG8g ZXJyX3B1dDsKKwkJfQorCisJCS8qCisJCSAqIFhYWDogVGhlIGdvYWwgaXMgbW92ZSB0aGlzIHRv IGdldF9wYWdlcywgc28gdHJ5IHRvIGRpcnR5IHRoZQorCQkgKiBDUFUgY2FjaGUgZmlyc3QgdG8g Y2hlY2sgdGhhdCB3ZSBkbyB0aGUgcmVxdWlyZWQgY2xmbHVzaAorCQkgKiBiZWZvcmUgc2NoZWR1 bGluZyB0aGUgYmx0IGZvciAhbGxjIHBsYXRmb3Jtcy4gVGhpcyBtYXRjaGVzCisJCSAqIHNvbWUg dmVyc2lvbiBvZiByZWFsaXR5IHdoZXJlIGF0IGdldF9wYWdlcyB0aGUgcGFnZXMKKwkJICogdGhl bXNlbHZlcyBtYXkgbm90IHlldCBiZSBjb2hlcmVudCB3aXRoIHRoZSBHUFUoc3dhcC1pbikuIElm CisJCSAqIHdlIGFyZSBtaXNzaW5nIHRoZSBmbHVzaCB0aGVuIHdlIHNob3VsZCBzZWUgdGhlIHN0 YWxlIGNhY2hlCisJCSAqIHZhbHVlcyBhZnRlciB3ZSBkbyB0aGUgc2V0X3RvX2NwdV9kb21haW4g YW5kIHBpY2sgaXQgdXAgYXMgYQorCQkgKiB0ZXN0IGZhaWx1cmUuCisJCSAqLworCQltZW1zZXQz Mih2YWRkciwgdmFsIF4gMHhkZWFkYmVhZiwgb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodTMyKSk7 CisKKwkJaWYgKCEob2JqLT5jYWNoZV9jb2hlcmVudCAmIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRf Rk9SX1dSSVRFKSkKKwkJCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOworCisJCWVyciA9IGk5MTVf Z2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KG9iaiwgY2UsIG9iai0+bW0ucGFnZXMsCisJCQkJ CQkgICAgICAgJm9iai0+bW0ucGFnZV9zaXplcywKKwkJCQkJCSAgICAgICB2YWwpOworCQlpZiAo ZXJyKQorCQkJZ290byBlcnJfdW5waW47CisKKwkJLyoKKwkJICogWFhYOiBGb3Igbm93IGRvIHRo ZSB3YWl0IHdpdGhvdXQgdGhlIG9iamVjdCByZXN2IGxvY2sgdG8KKwkJICogZW5zdXJlIHdlIGRv bid0IGRlYWRsb2NrLgorCQkgKi8KKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAor CQkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJCSAgIEk5MTVfV0FJVF9BTEws CisJCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJy X3VucGluOworCisJCWk5MTVfZ2VtX29iamVjdF9sb2NrKG9iaik7CisJCWVyciA9IGk5MTVfZ2Vt X29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIGZhbHNlKTsKKwkJaTkxNV9nZW1fb2JqZWN0 X3VubG9jayhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfdW5waW47CisKKwkJZm9yIChp ID0gMDsgaSA8IG9iai0+YmFzZS5zaXplIC8gc2l6ZW9mKHUzMik7ICsraSkgeworCQkJaWYgKHZh ZGRyW2ldICE9IHZhbCkgeworCQkJCXByX2VycigidmFkZHJbJXVdPSV4LCBleHBlY3RlZD0leFxu IiwgaSwKKwkJCQkgICAgICAgdmFkZHJbaV0sIHZhbCk7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJ CQlnb3RvIGVycl91bnBpbjsKKwkJCX0KKwkJfQorCisJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9t YXAob2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCX0gd2hpbGUgKCF0aW1lX2Fm dGVyKGppZmZpZXMsIGVuZCkpOworCisJZ290byBlcnJfZmx1c2g7CisKK2Vycl91bnBpbjoKKwlp OTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CitlcnJfcHV0OgorCWk5MTVfZ2VtX29iamVj dF9wdXQob2JqKTsKK2Vycl9mbHVzaDoKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211 dGV4KTsKKwlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCkpCisJCWVy ciA9IC1FSU87CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCWlm IChlcnIgPT0gLUVOT01FTSkKKwkJZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBp OTE1X2dlbV9jbGllbnRfYmx0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7 CisJCVNVQlRFU1QoaWd0X2NsaWVudF9maWxsKSwKKwl9OworCisJaWYgKGk5MTVfdGVybWluYWxs eV93ZWRnZWQoaTkxNSkpCisJCXJldHVybiAwOworCisJaWYgKCFIQVNfRU5HSU5FKGk5MTUsIEJD UzApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1LT5l bmdpbmVbQkNTMF0tPmtlcm5lbF9jb250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZGU1NjhkMmM3OTIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVj dF9ibHQuYwpAQCAtMCwwICsxLDExMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImk5MTVfc2VsZnRlc3QuaCIKKworI2luY2x1ZGUgInNlbGZ0ZXN0cy9pZ3RfZmx1c2hf dGVzdC5oIgorI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2RybS5oIgorI2luY2x1ZGUgIm1vY2tf Y29udGV4dC5oIgorCitzdGF0aWMgaW50IGlndF9maWxsX2JsdCh2b2lkICphcmcpCit7CisJc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gY2UtPmdlbV9jb250ZXh0LT5pOTE1OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7CisJc3RydWN0IHJuZF9zdGF0ZSBwcm5nOworCUlHVF9USU1FT1VUKGVuZCk7CisJdTMy ICp2YWRkcjsKKwlpbnQgZXJyID0gMDsKKworCXByYW5kb21fc2VlZF9zdGF0ZSgmcHJuZywgaTkx NV9zZWxmdGVzdC5yYW5kb21fc2VlZCk7CisKKwlkbyB7CisJCXUzMiBzeiA9IHByYW5kb21fdTMy X3N0YXRlKCZwcm5nKSAlIFNaXzMyTTsKKwkJdTMyIHZhbCA9IHByYW5kb21fdTMyX3N0YXRlKCZw cm5nKTsKKwkJdTMyIGk7CisKKwkJc3ogPSByb3VuZF91cChzeiwgUEFHRV9TSVpFKTsKKworCQlw cl9kZWJ1ZygiJXMgd2l0aCBzej0leCwgdmFsPSV4XG4iLCBfX2Z1bmNfXywgc3osIHZhbCk7CisK KwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1LCBzeik7CisJCWlm IChJU19FUlIob2JqKSkgeworCQkJZXJyID0gUFRSX0VSUih2YWRkcik7CisJCQlnb3RvIGVycl9m bHVzaDsKKwkJfQorCisJCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAob2JqLCBJOTE1 X01BUF9XQik7CisJCWlmIChJU19FUlIodmFkZHIpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZhZGRy KTsKKwkJCWdvdG8gZXJyX3B1dDsKKwkJfQorCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgcG90 ZW50aWFsbHkgYXN5bmMgY2xmbHVzaCBkb2VzIGl0cyBqb2IsIGlmCisJCSAqIHJlcXVpcmVkLgor CQkgKi8KKwkJbWVtc2V0MzIodmFkZHIsIHZhbCBeIDB4ZGVhZGJlYWYsIG9iai0+YmFzZS5zaXpl IC8gc2l6ZW9mKHUzMikpOworCisJCWlmICghKG9iai0+Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JP X0NBQ0hFX0NPSEVSRU5UX0ZPUl9XUklURSkpCisJCQlvYmotPmNhY2hlX2RpcnR5ID0gdHJ1ZTsK KworCQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJZXJyID0gaTkxNV9n ZW1fb2JqZWN0X2ZpbGxfYmx0KG9iaiwgY2UsIHZhbCk7CisJCW11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bnBpbjsKKworCQlp OTE1X2dlbV9vYmplY3RfbG9jayhvYmopOworCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3Rv X2NwdV9kb21haW4ob2JqLCBmYWxzZSk7CisJCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsK KwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3VucGluOworCisJCWZvciAoaSA9IDA7IGkgPCBvYmot PmJhc2Uuc2l6ZSAvIHNpemVvZih1MzIpOyArK2kpIHsKKwkJCWlmICh2YWRkcltpXSAhPSB2YWwp IHsKKwkJCQlwcl9lcnIoInZhZGRyWyV1XT0leCwgZXhwZWN0ZWQ9JXhcbiIsIGksCisJCQkJICAg ICAgIHZhZGRyW2ldLCB2YWwpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfdW5w aW47CisJCQl9CisJCX0KKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CisJCWk5 MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBl bmQpKTsKKworCWdvdG8gZXJyX2ZsdXNoOworCitlcnJfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChvYmopOworZXJyX3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Citl cnJfZmx1c2g6CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJaWYgKGln dF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQorCQllcnIgPSAtRUlPOworCW11 dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZXJyID09IC1FTk9N RU0pCisJCWVyciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0 X2JsdF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlz dGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0geworCQlTVUJURVNUKGln dF9maWxsX2JsdCksCisJfTsKKworCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKGk5MTUpKQor CQlyZXR1cm4gMDsKKworCWlmICghSEFTX0VOR0lORShpOTE1LCBCQ1MwKSkKKwkJcmV0dXJuIDA7 CisKKwlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNS0+ZW5naW5lW0JDUzBdLT5rZXJu ZWxfY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ncHVfY29tbWFuZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21t YW5kcy5oCmluZGV4IGEzNGVjZTUzYTc3MS4uN2U5NTgyN2IwNzI2IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaApAQCAtMTgwLDYgKzE4MCw3IEBACiAj ZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgICgoMHg3OTAwPDwxNil8MHgyKQogCiAj ZGVmaW5lIENPTE9SX0JMVF9DTUQJCQkoMjw8MjkgfCAweDQwPDwyMiB8ICg1LTIpKQorI2RlZmlu ZSBYWV9DT0xPUl9CTFRfQ01ECQkoMjw8MjkgfCAweDUwPDwyMikKICNkZWZpbmUgU1JDX0NPUFlf QkxUX0NNRAkJKCgyPDwyOSl8KDB4NDM8PDIyKXw0KQogI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRf Q01ECQkoKDI8PDI5KXwoMHg1Mzw8MjIpfDYpCiAjZGVmaW5lIFhZX01PTk9fU1JDX0NPUFlfSU1N X0JMVAkoKDI8PDI5KXwoMHg3MTw8MjIpfDUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAppbmRleCA5YmRhMzZhNTk4YjMuLmQ1 ZGM0NDI3ZDY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfbGl2ZV9zZWxmdGVzdHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9saXZlX3NlbGZ0ZXN0cy5oCkBAIC0yNSw2ICsyNSw4IEBAIHNlbGZ0ZXN0KGdlbSwgaTkx NV9nZW1fbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChldmljdCwgaTkxNV9nZW1fZXZpY3RfbGl2 ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVfZ2VtX2h1Z2VfcGFnZV9saXZl X3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvbnRleHRzLCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2Vs ZnRlc3RzKQorc2VsZnRlc3QoYmx0LCBpOTE1X2dlbV9vYmplY3RfYmx0X2xpdmVfc2VsZnRlc3Rz KQorc2VsZnRlc3QoY2xpZW50LCBpOTE1X2dlbV9jbGllbnRfYmx0X2xpdmVfc2VsZnRlc3RzKQog c2VsZnRlc3QocmVzZXQsIGludGVsX3Jlc2V0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoaGFu Z2NoZWNrLCBpbnRlbF9oYW5nY2hlY2tfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChleGVjbGlz dHMsIGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cykKLS0gCjIuMjAuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4