From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v4 2/2] drm/i915: add in-kernel blitter client Date: Thu, 23 May 2019 18:22:04 +0100 Message-ID: <20190523172204.25413-2-matthew.auld@intel.com> References: <20190523172204.25413-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 81FC789FDD for ; Thu, 23 May 2019 17:29:11 +0000 (UTC) In-Reply-To: <20190523172204.25413-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+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dw dV9jb21tYW5kcy5oICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGll bnRfYmx0LmMgICAgfCAzMDMgKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jbGllbnRfYmx0LmggICAgfCAgMjEgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX29iamVjdF9ibHQuYyAgICB8IDEwNCArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuaCAgICB8ICAyNCArKwogLi4uL2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMgIHwgMTMyICsrKysrKysrCiAuLi4vZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYyAgfCAxMTUgKysrKysrKwogLi4uL2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggIHwgICAyICsKIDkgZmlsZXMgY2hh bmdlZCwgNzA0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3RfYmx0LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3RfYmx0LmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50 X2JsdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfZ2VtX29iamVjdF9ibHQuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNjgxMDZmZTM1 YTA0Li5hMTY5MGFhZGUyNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC05MCw2ICs5MCw3IEBA IGk5MTUteSArPSBcCiAJICBpOTE1X2NtZF9wYXJzZXIubyBcCiAJICBpOTE1X2dlbV9iYXRjaF9w b29sLm8gXAogCSAgaTkxNV9nZW1fY2xmbHVzaC5vIFwKKwkgIGk5MTVfZ2VtX2NsaWVudF9ibHQu byBcCiAJICBpOTE1X2dlbV9jb250ZXh0Lm8gXAogCSAgaTkxNV9nZW1fZG1hYnVmLm8gXAogCSAg aTkxNV9nZW1fZXZpY3QubyBcCkBAIC05OSw2ICsxMDAsNyBAQCBpOTE1LXkgKz0gXAogCSAgaTkx NV9nZW1faW50ZXJuYWwubyBcCiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX29iamVjdC5v IFwKKwkgIGk5MTVfZ2VtX29iamVjdF9ibHQubyBcCiAJICBpOTE1X2dlbV9wbS5vIFwKIAkgIGk5 MTVfZ2VtX3JlbmRlcl9zdGF0ZS5vIFwKIAkgIGk5MTVfZ2VtX3Nocmlua2VyLm8gXApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaAppbmRleCBhMzRlY2U1M2E3 NzEuLjdlOTU4MjdiMDcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3B1X2NvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1 X2NvbW1hbmRzLmgKQEAgLTE4MCw2ICsxODAsNyBAQAogI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1Rf SU5GT19JOTY1ICAoKDB4NzkwMDw8MTYpfDB4MikKIAogI2RlZmluZSBDT0xPUl9CTFRfQ01ECQkJ KDI8PDI5IHwgMHg0MDw8MjIgfCAoNS0yKSkKKyNkZWZpbmUgWFlfQ09MT1JfQkxUX0NNRAkJKDI8 PDI5IHwgMHg1MDw8MjIpCiAjZGVmaW5lIFNSQ19DT1BZX0JMVF9DTUQJCSgoMjw8MjkpfCgweDQz PDwyMil8NCkKICNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIy KXw2KQogI2RlZmluZSBYWV9NT05PX1NSQ19DT1BZX0lNTV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIy KXw1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50X2Js dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50X2JsdC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjBiZmE1MDM4Mzg1Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50X2JsdC5jCkBAIC0w LDAgKzEsMzAzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUgImk5MTVfZ2Vt X2NsaWVudF9ibHQuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdF9ibHQuaCIKKyNpbmNs dWRlICJpbnRlbF9kcnYuaCIKKworc3RydWN0IGk5MTVfc2xlZXZlIHsKKwlzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBzZ190 YWJsZSAqcGFnZXM7CisJc3RydWN0IGk5MTVfcGFnZV9zaXplcyBwYWdlX3NpemVzOworfTsKKwor c3RhdGljIGludCB2bWFfc2V0X3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQoreworCXN0cnVj dCBpOTE1X3NsZWV2ZSAqc2xlZXZlID0gdm1hLT5wcml2YXRlOworCisJdm1hLT5wYWdlcyA9IHNs ZWV2ZS0+cGFnZXM7CisJdm1hLT5wYWdlX3NpemVzID0gc2xlZXZlLT5wYWdlX3NpemVzOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtYV9jbGVhcl9wYWdlcyhzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKK3sKKwlHRU1fQlVHX09OKCF2bWEtPnBhZ2VzKTsKKwl2bWEtPnBhZ2VzID0gTlVM TDsKK30KKworc3RhdGljIGludCB2bWFfYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJICAg IGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKKwkJICAgIHUzMiBmbGFncykKK3sK KwlyZXR1cm4gdm1hLT52bS0+dm1hX29wcy5iaW5kX3ZtYSh2bWEsIGNhY2hlX2xldmVsLCBmbGFn cyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCit7 CisJdm1hLT52bS0+dm1hX29wcy51bmJpbmRfdm1hKHZtYSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV92bWFfb3BzIHByb3h5X3ZtYV9vcHMgPSB7CisJLnNldF9wYWdlcyA9IHZtYV9z ZXRfcGFnZXMsCisJLmNsZWFyX3BhZ2VzID0gdm1hX2NsZWFyX3BhZ2VzLAorCS5iaW5kX3ZtYSA9 IHZtYV9iaW5kLAorCS51bmJpbmRfdm1hID0gdm1hX3VuYmluZCwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgaTkxNV9zbGVldmUgKmNyZWF0ZV9zbGVldmUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCisJCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkgc3RydWN0 IHNnX3RhYmxlICpwYWdlcywKKwkJCQkJIHN0cnVjdCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6 ZXMpCit7CisJc3RydWN0IGk5MTVfc2xlZXZlICpzbGVldmU7CisJc3RydWN0IGk5MTVfdm1hICp2 bWE7CisJaW50IGVycjsKKworCXNsZWV2ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzbGVldmUpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXNsZWV2ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl2 bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZtLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkp IHsKKwkJZXJyID0gUFRSX0VSUih2bWEpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXZtYS0+ cHJpdmF0ZSA9IHNsZWV2ZTsKKwl2bWEtPm9wcyA9ICZwcm94eV92bWFfb3BzOworCisJc2xlZXZl LT52bWEgPSB2bWE7CisJc2xlZXZlLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7CisJ c2xlZXZlLT5wYWdlcyA9IHBhZ2VzOworCXNsZWV2ZS0+cGFnZV9zaXplcyA9ICpwYWdlX3NpemVz OworCisJcmV0dXJuIHNsZWV2ZTsKKworZXJyX2ZyZWU6CisJa2ZyZWUoc2xlZXZlKTsKKwlyZXR1 cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3NsZWV2ZShzdHJ1Y3Qg aTkxNV9zbGVldmUgKnNsZWV2ZSkKK3sKKwlpOTE1X2dlbV9vYmplY3RfcHV0KHNsZWV2ZS0+b2Jq KTsKKwlrZnJlZShzbGVldmUpOworfQorCitzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayB7CisJc3Ry dWN0IGRtYV9mZW5jZSBkbWE7CisJc3RydWN0IGRtYV9mZW5jZV9jYiBjYjsKKwlzdHJ1Y3QgaTkx NV9zd19mZW5jZSB3YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBpcnFf d29yayBpcnFfd29yazsKKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZTsKKwlzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2U7CisJdTMyIHZhbHVlOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNs ZWFyX3BhZ2VzX3dvcmtfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJ cmV0dXJuIERSSVZFUl9OQU1FOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYXJfcGFnZXNf d29ya190aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiAi Y2xlYXIiOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9wYWdlc193b3JrX3JlbGVhc2Uoc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250 YWluZXJfb2YoZmVuY2UsIHR5cGVvZigqdyksIGRtYSk7CisKKwlkZXN0cm95X3NsZWV2ZSh3LT5z bGVldmUpOworCisJaTkxNV9zd19mZW5jZV9maW5pKCZ3LT53YWl0KTsKKworCUJVSUxEX0JVR19P TihvZmZzZXRvZih0eXBlb2YoKncpLCBkbWEpKTsKKwlkbWFfZmVuY2VfZnJlZSgmdy0+ZG1hKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGNsZWFyX3BhZ2VzX3dvcmtf b3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBjbGVhcl9wYWdlc193b3JrX2RyaXZlcl9uYW1l LAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IGNsZWFyX3BhZ2VzX3dvcmtfdGltZWxpbmVfbmFtZSwK KwkucmVsZWFzZSA9IGNsZWFyX3BhZ2VzX3dvcmtfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lk IGNsZWFyX3BhZ2VzX3NpZ25hbF9pcnFfd29ya2VyKHN0cnVjdCBpcnFfd29yayAqd29yaykKK3sK KwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2Yo KncpLCBpcnFfd29yayk7CisKKwlkbWFfZmVuY2Vfc2lnbmFsKCZ3LT5kbWEpOworCWRtYV9mZW5j ZV9wdXQoJnctPmRtYSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9j YihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJCQkgICAgIHN0cnVjdCBkbWFfZmVuY2VfY2Ig KmNiKQoreworCXN0cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFpbmVyX29mKGNiLCB0 eXBlb2YoKncpLCBjYik7CisKKwlpZiAoZmVuY2UtPmVycm9yKQorCQlkbWFfZmVuY2Vfc2V0X2Vy cm9yKCZ3LT5kbWEsIGZlbmNlLT5lcnJvcik7CisKKwkvKgorCSAqIFB1c2ggdGhlIHNpZ25hbGxp bmcgb2YgdGhlIGZlbmNlIGludG8geWV0IGFub3RoZXIgd29ya2VyIHRvIGF2b2lkCisJICogdGhl IG5pZ2h0bWFyZSBsb2NraW5nIGFyb3VuZCB0aGUgZmVuY2Ugc3BpbmxvY2suCisJICovCisJaXJx X3dvcmtfcXVldWUoJnctPmlycV93b3JrKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcGFnZXNf d29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNf d29yayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCB3b3JrKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHctPmNlLT5nZW1fY29udGV4dC0+aTkxNTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdy0+c2xlZXZlLT5vYmo7CisJc3RydWN0IGk5 MTVfdm1hICp2bWEgPSB3LT5zbGVldmUtPnZtYTsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsK KwlpbnQgZXJyID0gdy0+ZG1hLmVycm9yOworCisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8g b3V0X3NpZ25hbDsKKworCWlmIChvYmotPmNhY2hlX2RpcnR5KSB7CisJCW9iai0+d3JpdGVfZG9t YWluID0gMDsKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkKKwkJ CWRybV9jbGZsdXNoX3NnKHctPnNsZWV2ZS0+cGFnZXMpOworCQlvYmotPmNhY2hlX2RpcnR5ID0g ZmFsc2U7CisJfQorCisJLyogWFhYOiB3ZSBuZWVkIHRvIGtpbGwgdGhpcyAqLworCW11dGV4X2xv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAs IDAsIFBJTl9VU0VSKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byBvdXRfdW5sb2NrOwor CisJcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRlKHctPmNlKTsKKwlpZiAoSVNfRVJSKHJxKSkgewor CQllcnIgPSBQVFJfRVJSKHJxKTsKKwkJZ290byBvdXRfdW5waW47CisJfQorCisJLyogVGhlcmUn cyBubyB3YXkgdGhlIGZlbmNlIGhhcyBzaWduYWxsZWQgKi8KKwlpZiAoZG1hX2ZlbmNlX2FkZF9j YWxsYmFjaygmcnEtPmZlbmNlLCAmdy0+Y2IsCisJCQkJICAgY2xlYXJfcGFnZXNfZG1hX2ZlbmNl X2NiKSkKKwkJR0VNX0JVR19PTigxKTsKKworCWlmICh3LT5jZS0+ZW5naW5lLT5lbWl0X2luaXRf YnJlYWRjcnVtYikgeworCQllcnIgPSB3LT5jZS0+ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVt YihycSk7CisJCWlmICh1bmxpa2VseShlcnIpKQorCQkJZ290byBvdXRfcmVxdWVzdDsKKwl9CisK KwllcnIgPSBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChycSwgdm1hLCB3LT52YWx1ZSk7CisJaWYg KHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0X3JlcXVlc3Q7CisKKwllcnIgPSBpOTE1X3ZtYV9t b3ZlX3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklURSk7CitvdXRfcmVxdWVzdDoK KwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlpOTE1X3JlcXVlc3Rfc2tpcChycSwgZXJyKTsKKwkJ ZXJyID0gMDsKKwl9CisKKwlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKK291dF91bnBpbjoKKwlpOTE1 X3ZtYV91bnBpbih2bWEpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOworb3V0X3NpZ25hbDoKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlkbWFf ZmVuY2Vfc2V0X2Vycm9yKCZ3LT5kbWEsIGVycik7CisJCWRtYV9mZW5jZV9zaWduYWwoJnctPmRt YSk7CisJCWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faTkx NV9zd19mZW5jZV9jYWxsCitjbGVhcl9wYWdlc193b3JrX25vdGlmeShzdHJ1Y3QgaTkxNV9zd19m ZW5jZSAqZmVuY2UsCisJCQllbnVtIGk5MTVfc3dfZmVuY2Vfbm90aWZ5IHN0YXRlKQoreworCXN0 cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFpbmVyX29mKGZlbmNlLCB0eXBlb2YoKncp LCB3YWl0KTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEZFTkNFX0NPTVBMRVRFOgorCQlz Y2hlZHVsZV93b3JrKCZ3LT53b3JrKTsKKwkJYnJlYWs7CisKKwljYXNlIEZFTkNFX0ZSRUU6CisJ CWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllf RE9ORTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhmZW5jZV9sb2NrKTsKKworLyogWFhY OiBiZXR0ZXIgbmFtZSBwbGVhc2UgKi8KK2ludCBpOTE1X2dlbV9zY2hlZHVsZV9maWxsX3BhZ2Vz X2JsdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAorCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkg ICAgIHN0cnVjdCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMsCisJCQkJICAgICB1MzIgdmFs dWUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFz ZS5kZXYpOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBjZS0+Z2VtX2NvbnRleHQ7 CisJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07CisJc3RydWN0IGNsZWFyX3BhZ2VzX3dv cmsgKndvcms7CisJc3RydWN0IGk5MTVfc2xlZXZlICpzbGVldmU7CisJaW50IGVycjsKKworCXZt ID0gY3R4LT5wcGd0dCA/ICZjdHgtPnBwZ3R0LT52bSA6ICZpOTE1LT5nZ3R0LnZtOworCisJc2xl ZXZlID0gY3JlYXRlX3NsZWV2ZSh2bSwgb2JqLCBwYWdlcywgcGFnZV9zaXplcyk7CisJaWYgKElT X0VSUihzbGVldmUpKQorCQlyZXR1cm4gUFRSX0VSUihzbGVldmUpOworCisJd29yayA9IGttYWxs b2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3b3JrKSB7CisJCWRlc3Ryb3lf c2xlZXZlKHNsZWV2ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXdvcmstPnZhbHVlID0g dmFsdWU7CisJd29yay0+c2xlZXZlID0gc2xlZXZlOworCXdvcmstPmNlID0gY2U7CisKKwlJTklU X1dPUksoJndvcmstPndvcmssIGNsZWFyX3BhZ2VzX3dvcmtlcik7CisKKwlpbml0X2lycV93b3Jr KCZ3b3JrLT5pcnFfd29yaywgY2xlYXJfcGFnZXNfc2lnbmFsX2lycV93b3JrZXIpOworCisJZG1h X2ZlbmNlX2luaXQoJndvcmstPmRtYSwKKwkJICAgICAgICZjbGVhcl9wYWdlc193b3JrX29wcywK KwkJICAgICAgICZmZW5jZV9sb2NrLAorCQkgICAgICAgaTkxNS0+bW0udW5vcmRlcmVkX3RpbWVs aW5lLAorCQkgICAgICAgMCk7CisJaTkxNV9zd19mZW5jZV9pbml0KCZ3b3JrLT53YWl0LCBjbGVh cl9wYWdlc193b3JrX25vdGlmeSk7CisKKwlpOTE1X2dlbV9vYmplY3RfbG9jayhvYmopOworCWVy ciA9IGk5MTVfc3dfZmVuY2VfYXdhaXRfcmVzZXJ2YXRpb24oJndvcmstPndhaXQsCisJCQkJCSAg ICAgIG9iai0+cmVzdiwgTlVMTCwKKwkJCQkJICAgICAgdHJ1ZSwgSTkxNV9GRU5DRV9USU1FT1VU LAorCQkJCQkgICAgICBJOTE1X0ZFTkNFX0dGUCk7CisJaWYgKGVyciA8IDApIHsKKwkJZG1hX2Zl bmNlX3NldF9lcnJvcigmd29yay0+ZG1hLCBlcnIpOworCX0gZWxzZSB7CisJCXJlc2VydmF0aW9u X29iamVjdF9hZGRfZXhjbF9mZW5jZShvYmotPnJlc3YsICZ3b3JrLT5kbWEpOworCQllcnIgPSAw OworCX0KKwlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7CisKKwlkbWFfZmVuY2VfZ2V0KCZ3 b3JrLT5kbWEpOworCWk5MTVfc3dfZmVuY2VfY29tbWl0KCZ3b3JrLT53YWl0KTsKKworCXJldHVy biBlcnI7Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNp bmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jIgorI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4zZGJkMjhjMjJmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKQEAgLTAsMCArMSwyMSBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAy MDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpZm5kZWYgX19JOTE1X0dFTV9DTElFTlRfQkxU X0hfXworI2RlZmluZSBfX0k5MTVfR0VNX0NMSUVOVF9CTFRfSF9fCisKKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKK3N0cnVjdCBpOTE1X3Bh Z2Vfc2l6ZXM7CitzdHJ1Y3QgaW50ZWxfY29udGV4dDsKK3N0cnVjdCBzZ190YWJsZTsKKworaW50 IGk5MTVfZ2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkJICAgICBz dHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAorCQkJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9zaXplcyAq cGFnZV9zaXplcywKKwkJCQkgICAgIHUzMiB2YWx1ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZDMwNDRjZGM4MTExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5jCkBAIC0wLDAgKzEsMTA0IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9nZW1fb2JqZWN0X2JsdC5oIgor CisjaW5jbHVkZSAiaTkxNV9nZW1fY2xmbHVzaC5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgor CitpbnQgaW50ZWxfZW1pdF92bWFfZmlsbF9ibHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJ CQkgICAgc3RydWN0IGk5MTVfdm1hICp2bWEsCisJCQkgICAgdTMyIHZhbHVlKQoreworCXUzMiAq Y3M7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDgpOworCWlmIChJU19FUlIoY3MpKQor CQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwlpZiAoSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA4KSB7 CisJCSpjcysrID0gWFlfQ09MT1JfQkxUX0NNRCB8IEJMVF9XUklURV9SR0JBIHwgKDctMik7CisJ CSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9DT0xPUl9DT1BZIHwgUEFHRV9TSVpFOwor CQkqY3MrKyA9IDA7CisJCSpjcysrID0gdm1hLT5zaXplID4+IFBBR0VfU0hJRlQgPDwgMTYgfCBQ QUdFX1NJWkUgLyA0OworCQkqY3MrKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsK KwkJKmNzKysgPSB1cHBlcl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7CisJCSpjcysrID0gdmFs dWU7CisJCSpjcysrID0gTUlfTk9PUDsKKwl9IGVsc2UgeworCQkqY3MrKyA9IFhZX0NPTE9SX0JM VF9DTUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg2LTIpOworCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8 IEJMVF9ST1BfQ09MT1JfQ09QWSB8IFBBR0VfU0laRTsKKwkJKmNzKysgPSAwOworCQkqY3MrKyA9 IHZtYS0+c2l6ZSA+PiBQQUdFX1NISUZUIDw8IDE2IHwgUEFHRV9TSVpFIC8gNDsKKwkJKmNzKysg PSB2bWEtPm5vZGUuc3RhcnQ7CisJCSpjcysrID0gdmFsdWU7CisJCSpjcysrID0gTUlfTk9PUDsK KwkJKmNzKysgPSBNSV9OT09QOworCX0KKworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwor CisJcmV0dXJuIDA7Cit9CisKK2ludCBpOTE1X2dlbV9vYmplY3RfZmlsbF9ibHQoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmNl LAorCQkJICAgICB1MzIgdmFsdWUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgg PSBjZS0+Z2VtX2NvbnRleHQ7CisJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07CisJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnE7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IGVycjsK KworCS8qIFhYWDogY2UtPnZtIHBsZWFzZSAqLworCXZtID0gY3R4LT5wcGd0dCA/ICZjdHgtPnBw Z3R0LT52bSA6ICZpOTE1LT5nZ3R0LnZtOworCisJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2Jq LCB2bSwgTlVMTCk7CisJaWYgKElTX0VSUih2bWEpKQorCQlyZXR1cm4gUFRSX0VSUih2bWEpOwor CisJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOworCWlmICh1bmxpa2Vs eShlcnIpKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG9iai0+Y2FjaGVfZGlydHkgJiB+b2JqLT5j YWNoZV9jb2hlcmVudCkKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqLCAwKTsKKworCXJx ID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7CisJaWYgKElTX0VSUihycSkpIHsKKwkJZXJyID0g UFRSX0VSUihycSk7CisJCWdvdG8gb3V0X3VucGluOworCX0KKworCWVyciA9IGk5MTVfcmVxdWVz dF9hd2FpdF9vYmplY3QocnEsIG9iaiwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdv dG8gb3V0X3JlcXVlc3Q7CisKKwlpZiAoY2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIp IHsKKwkJZXJyID0gY2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIocnEpOworCQlpZiAo dW5saWtlbHkoZXJyKSkKKwkJCWdvdG8gb3V0X3JlcXVlc3Q7CisJfQorCisJZXJyID0gaW50ZWxf ZW1pdF92bWFfZmlsbF9ibHQocnEsIHZtYSwgdmFsdWUpOworCWlmICh1bmxpa2VseShlcnIpKQor CQlnb3RvIG91dF9yZXF1ZXN0OworCisJZXJyID0gaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1h LCBycSwgRVhFQ19PQkpFQ1RfV1JJVEUpOworb3V0X3JlcXVlc3Q6CisJaWYgKHVubGlrZWx5KGVy cikpCisJCWk5MTVfcmVxdWVzdF9za2lwKHJxLCBlcnIpOworCisJaTkxNV9yZXF1ZXN0X2FkZChy cSk7CitvdXRfdW5waW46CisJaTkxNV92bWFfdW5waW4odm1hKTsKKwlyZXR1cm4gZXJyOworfQor CisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2Vs ZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uN2VjN2RlNmFjMGMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fb2JqZWN0X2JsdC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBD b3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JOTE1X0dFTV9PQkpFQ1RfQkxUX0hfXworI2Rl ZmluZSBfX0k5MTVfR0VNX09CSkVDVF9CTFRfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o PgorCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKK3N0cnVjdCBpbnRlbF9jb250ZXh0Owor c3RydWN0IGk5MTVfcmVxdWVzdDsKK3N0cnVjdCBpOTE1X3ZtYTsKKworaW50IGludGVsX2VtaXRf dm1hX2ZpbGxfYmx0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkJICAgIHN0cnVjdCBpOTE1 X3ZtYSAqdm1hLAorCQkJICAgIHUzMiB2YWx1ZSk7CisKK2ludCBpOTE1X2dlbV9vYmplY3RfZmls bF9ibHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAorCQkJICAgICB1MzIgdmFsdWUpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTVlZDlmOGQzMjBhCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2Ns aWVudF9ibHQuYwpAQCAtMCwwICsxLDEzMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKwor I2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKKworI2luY2x1ZGUgImlndF9mbHVzaF90ZXN0 LmgiCisjaW5jbHVkZSAibW9ja19kcm0uaCIKKyNpbmNsdWRlICJtb2NrX2NvbnRleHQuaCIKKwor c3RhdGljIGludCBpZ3RfY2xpZW50X2ZpbGwodm9pZCAqYXJnKQoreworCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGNlLT5n ZW1fY29udGV4dC0+aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0 cnVjdCBybmRfc3RhdGUgcHJuZzsKKwlJR1RfVElNRU9VVChlbmQpOworCXUzMiAqdmFkZHI7CisJ aW50IGVyciA9IDA7CisKKwlwcmFuZG9tX3NlZWRfc3RhdGUoJnBybmcsIGk5MTVfc2VsZnRlc3Qu cmFuZG9tX3NlZWQpOworCisJZG8geworCQl1MzIgc3ogPSBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJu ZykgJSBTWl8zMk07CisJCXUzMiB2YWwgPSBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZyk7CisJCXUz MiBpOworCisJCXN6ID0gcm91bmRfdXAoc3osIFBBR0VfU0laRSk7CisKKwkJcHJfZGVidWcoIiVz IHdpdGggc3o9JXgsIHZhbD0leFxuIiwgX19mdW5jX18sIHN6LCB2YWwpOworCisJCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgc3opOworCQlpZiAoSVNfRVJSKG9i aikpIHsKKwkJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJCWdvdG8gZXJyX2ZsdXNoOworCQl9CisK KwkJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKKwkJ aWYgKElTX0VSUih2YWRkcikpIHsKKwkJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJZ290byBl cnJfcHV0OworCQl9CisKKwkJLyoKKwkJICogWFhYOiBUaGUgZ29hbCBpcyBtb3ZlIHRoaXMgdG8g Z2V0X3BhZ2VzLCBzbyB0cnkgdG8gZGlydHkgdGhlCisJCSAqIENQVSBjYWNoZSBmaXJzdCB0byBj aGVjayB0aGF0IHdlIGRvIHRoZSByZXF1aXJlZCBjbGZsdXNoCisJCSAqIGJlZm9yZSBzY2hlZHVs aW5nIHRoZSBibHQgZm9yICFsbGMgcGxhdGZvcm1zLiBUaGlzIG1hdGNoZXMKKwkJICogc29tZSB2 ZXJzaW9uIG9mIHJlYWxpdHkgd2hlcmUgYXQgZ2V0X3BhZ2VzIHRoZSBwYWdlcworCQkgKiB0aGVt c2VsdmVzIG1heSBub3QgeWV0IGJlIGNvaGVyZW50IHdpdGggdGhlIEdQVShzd2FwLWluKS4gSWYK KwkJICogd2UgYXJlIG1pc3NpbmcgdGhlIGZsdXNoIHRoZW4gd2Ugc2hvdWxkIHNlZSB0aGUgc3Rh bGUgY2FjaGUKKwkJICogdmFsdWVzIGFmdGVyIHdlIGRvIHRoZSBzZXRfdG9fY3B1X2RvbWFpbiBh bmQgcGljayBpdCB1cCBhcyBhCisJCSAqIHRlc3QgZmFpbHVyZS4KKwkJICovCisJCW1lbXNldDMy KHZhZGRyLCB2YWwgXiAweGRlYWRiZWFmLCBvYmotPmJhc2Uuc2l6ZSAvIHNpemVvZih1MzIpKTsK KworCQlpZiAoIShvYmotPmNhY2hlX2NvaGVyZW50ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9G T1JfV1JJVEUpKQorCQkJb2JqLT5jYWNoZV9kaXJ0eSA9IHRydWU7CisKKwkJZXJyID0gaTkxNV9n ZW1fc2NoZWR1bGVfZmlsbF9wYWdlc19ibHQob2JqLCBjZSwgb2JqLT5tbS5wYWdlcywKKwkJCQkJ CSAgICAgICAmb2JqLT5tbS5wYWdlX3NpemVzLAorCQkJCQkJICAgICAgIHZhbCk7CisJCWlmIChl cnIpCisJCQlnb3RvIGVycl91bnBpbjsKKworCQkvKgorCQkgKiBYWFg6IEZvciBub3cgZG8gdGhl IHdhaXQgd2l0aG91dCB0aGUgQktMIHRvIGVuc3VyZSB3ZSBkb24ndAorCQkgKiBkZWFkbG9jay4K KwkJICovCisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkJICAgSTkxNV9X QUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCQkgICBJOTE1X1dBSVRfQUxMLAorCQkJCQkgICBNQVhf U0NIRURVTEVfVElNRU9VVCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bnBpbjsKKworCQlt dXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJZXJyID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOworCQltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfdW5waW47CisKKwkJ Zm9yIChpID0gMDsgaSA8IG9iai0+YmFzZS5zaXplIC8gc2l6ZW9mKHUzMik7ICsraSkgeworCQkJ aWYgKHZhZGRyW2ldICE9IHZhbCkgeworCQkJCXByX2VycigidmFkZHJbJXVdPSV4LCBleHBlY3Rl ZD0leFxuIiwgaSwKKwkJCQkgICAgICAgdmFkZHJbaV0sIHZhbCk7CisJCQkJZXJyID0gLUVJTlZB TDsKKwkJCQlnb3RvIGVycl91bnBpbjsKKwkJCX0KKwkJfQorCisJCWk5MTVfZ2VtX29iamVjdF91 bnBpbl9tYXAob2JqKTsKKworCQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK KwkJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKG9iaik7CisJCW11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIo amlmZmllcywgZW5kKSk7CisKKwlnb3RvIGVycl9mbHVzaDsKKworZXJyX3VucGluOgorCWk5MTVf Z2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKK2Vycl9wdXQ6CisJbXV0ZXhfbG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7CisJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0 aXZlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKK2Vycl9m bHVzaDoKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlpZiAoaWd0X2Zs dXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCkpCisJCWVyciA9IC1FSU87CisJbXV0ZXhf dW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCWlmIChlcnIgPT0gLUVOT01FTSkK KwkJZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBpOTE1X2dlbV9jbGllbnRfYmx0 X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCXN0YXRp YyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QoaWd0X2Ns aWVudF9maWxsKSwKKwl9OworCisJaWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQoaTkxNSkpCisJ CXJldHVybiAwOworCisJaWYgKCFIQVNfRU5HSU5FKGk5MTUsIEJDUzApKQorCQlyZXR1cm4gMDsK KworCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1LT5lbmdpbmVbQkNTMF0tPmtlcm5l bF9jb250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9nZW1fb2JqZWN0X2JsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNjY3MTdhOGVjNTJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwpAQCAtMCwwICsxLDExNSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IElu dGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKKwor I2luY2x1ZGUgImlndF9mbHVzaF90ZXN0LmgiCisjaW5jbHVkZSAibW9ja19kcm0uaCIKKyNpbmNs dWRlICJtb2NrX2NvbnRleHQuaCIKKworc3RhdGljIGludCBpZ3RfZmlsbF9ibHQodm9pZCAqYXJn KQoreworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGNlLT5nZW1fY29udGV4dC0+aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBybmRfc3RhdGUgcHJuZzsKKwlJR1RfVElNRU9VVChl bmQpOworCXUzMiAqdmFkZHI7CisJaW50IGVyciA9IDA7CisKKwlwcmFuZG9tX3NlZWRfc3RhdGUo JnBybmcsIGk5MTVfc2VsZnRlc3QucmFuZG9tX3NlZWQpOworCisJZG8geworCQl1MzIgc3ogPSBw cmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBTWl8zMk07CisJCXUzMiB2YWwgPSBwcmFuZG9tX3Uz Ml9zdGF0ZSgmcHJuZyk7CisJCXUzMiBpOworCisJCXN6ID0gcm91bmRfdXAoc3osIFBBR0VfU0la RSk7CisKKwkJcHJfZGVidWcoIiVzIHdpdGggc3o9JXgsIHZhbD0leFxuIiwgX19mdW5jX18sIHN6 LCB2YWwpOworCisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwg c3opOworCQlpZiAoSVNfRVJSKG9iaikpIHsKKwkJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJ Z290byBlcnJfZmx1c2g7CisJCX0KKworCQl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFw KG9iaiwgSTkxNV9NQVBfV0IpOworCQlpZiAoSVNfRVJSKHZhZGRyKSkgeworCQkJZXJyID0gUFRS X0VSUih2YWRkcik7CisJCQlnb3RvIGVycl9wdXQ7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIHN1 cmUgdGhlIHBvdGVudGlhbGx5IGFzeW5jIGNsZmx1c2ggZG9lcyBpdHMgam9iLCBpZgorCQkgKiBy ZXF1aXJlZC4KKwkJICovCisJCW1lbXNldDMyKHZhZGRyLCB2YWwgXiAweGRlYWRiZWFmLCBvYmot PmJhc2Uuc2l6ZSAvIHNpemVvZih1MzIpKTsKKworCQlpZiAoIShvYmotPmNhY2hlX2NvaGVyZW50 ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUpKQorCQkJb2JqLT5jYWNoZV9kaXJ0 eSA9IHRydWU7CisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCWVy ciA9IGk5MTVfZ2VtX29iamVjdF9maWxsX2JsdChvYmosIGNlLCB2YWwpOworCQltdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfdW5w aW47CisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCWVyciA9IGk5 MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIGZhbHNlKTsKKwkJbXV0ZXhfdW5s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3Vu cGluOworCisJCWZvciAoaSA9IDA7IGkgPCBvYmotPmJhc2Uuc2l6ZSAvIHNpemVvZih1MzIpOyAr K2kpIHsKKwkJCWlmICh2YWRkcltpXSAhPSB2YWwpIHsKKwkJCQlwcl9lcnIoInZhZGRyWyV1XT0l eCwgZXhwZWN0ZWQ9JXhcbiIsIGksCisJCQkJICAgICAgIHZhZGRyW2ldLCB2YWwpOworCQkJCWVy ciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfdW5waW47CisJCQl9CisJCX0KKworCQlpOTE1X2dl bV9vYmplY3RfdW5waW5fbWFwKG9iaik7CisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7CisJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2ZShvYmop OworCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCX0gd2hpbGUgKCF0 aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpOworCisJZ290byBlcnJfZmx1c2g7CisKK2Vycl91bnBp bjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CitlcnJfcHV0OgorCW11dGV4X2xv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vf dW5sZXNzX2FjdGl2ZShvYmopOworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CitlcnJfZmx1c2g6CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJ aWYgKGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQorCQllcnIgPSAtRUlP OworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZXJyID09 IC1FTk9NRU0pCisJCWVyciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaTkxNV9nZW1f b2JqZWN0X2JsdF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0geworCQlTVUJU RVNUKGlndF9maWxsX2JsdCksCisJfTsKKworCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKGk5 MTUpKQorCQlyZXR1cm4gMDsKKworCWlmICghSEFTX0VOR0lORShpOTE1LCBCQ1MwKSkKKwkJcmV0 dXJuIDA7CisKKwlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNS0+ZW5naW5lW0JDUzBd LT5rZXJuZWxfY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAppbmRleCBhNTRmNTkwNzg4YTQuLmI4NDFjY2Jk NDQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2 ZV9zZWxmdGVzdHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9s aXZlX3NlbGZ0ZXN0cy5oCkBAIC0yNCw2ICsyNCw4IEBAIHNlbGZ0ZXN0KGdlbSwgaTkxNV9nZW1f bGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChldmljdCwgaTkxNV9nZW1fZXZpY3RfbGl2ZV9zZWxm dGVzdHMpCiBzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVfZ2VtX2h1Z2VfcGFnZV9saXZlX3NlbGZ0 ZXN0cykKIHNlbGZ0ZXN0KGNvbnRleHRzLCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2VsZnRlc3Rz KQorc2VsZnRlc3QoYmx0LCBpOTE1X2dlbV9vYmplY3RfYmx0X2xpdmVfc2VsZnRlc3RzKQorc2Vs ZnRlc3QoY2xpZW50LCBpOTE1X2dlbV9jbGllbnRfYmx0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRl c3QoaGFuZ2NoZWNrLCBpbnRlbF9oYW5nY2hlY2tfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChl eGVjbGlzdHMsIGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGd1Yywg aW50ZWxfZ3VjX2xpdmVfc2VsZnRlc3QpCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==