From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v3 2/2] drm/i915: add in-kernel blitter client Date: Tue, 21 May 2019 21:42:35 +0100 Message-ID: <20190521204235.459-2-matthew.auld@intel.com> References: <20190521204235.459-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8122289332 for ; Tue, 21 May 2019 20:42:38 +0000 (UTC) In-Reply-To: <20190521204235.459-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 List-Id: intel-gfx@lists.freedesktop.org VGhlIHBsYW4gaXMgdG8gdXNlIHRoZSBibGl0dGVyIGVuZ2luZSBmb3IgYXN5bmMgb2JqZWN0IGNs ZWFyaW5nIHdoZW4KdXNpbmcgbG9jYWwgbWVtb3J5LCBidXQgYmVmb3JlIHdlIGNhbiBtb3ZlIHRo ZSB3b3JrZXIgdG8gZ2V0X3BhZ2VzKCkgd2UKaGF2ZSB0byBmaXJzdCB0YW1lIHNvbWUgbW9yZSBv ZiBvdXIgc3RydWN0X211dGV4IHVzYWdlLiBXaXRoIHRoaXMgaW4KbWluZCB3ZSBzaG91bGQgYmUg YWJsZSB0byB1cHN0cmVhbSB0aGUgb2JqZWN0IGNsZWFyaW5nIGFzIHNvbWUKc2VsZnRlc3RzLCB3 aGljaCBzaG91bGQgc2VydmUgYXMgYSBndWluZWEgcGlnIGZvciB0aGUgb25nb2luZyBsb2NraW5n CnJld29yayBhbmQgdXBjb21pbmcgYXN5YyBnZXRfcGFnZXMoKSBmcmFtZXdvcmsuCgpTaWduZWQt b2ZmLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21tYW5kcy5oICB8ICAgMSArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmMgICAgfCAzMDAgKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmggICAgfCAgMjEg KysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuYyAgICB8IDEwNCAr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuaCAgICB8ICAy NCArKwogLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMgIHwgMTMy ICsrKysrKysrCiAuLi4vZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYyAg fCAxMTUgKysrKysrKwogLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3Rz LmggIHwgICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgNzAxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGllbnRfYmx0 LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmpl Y3RfYmx0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9vYmplY3RfYmx0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKaW5kZXggNjgxMDZmZTM1YTA0Li5hMTY5MGFhZGUyNzMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCkBAIC05MCw2ICs5MCw3IEBAIGk5MTUteSArPSBcCiAJICBpOTE1X2NtZF9wYXJzZXIu byBcCiAJICBpOTE1X2dlbV9iYXRjaF9wb29sLm8gXAogCSAgaTkxNV9nZW1fY2xmbHVzaC5vIFwK KwkgIGk5MTVfZ2VtX2NsaWVudF9ibHQubyBcCiAJICBpOTE1X2dlbV9jb250ZXh0Lm8gXAogCSAg aTkxNV9nZW1fZG1hYnVmLm8gXAogCSAgaTkxNV9nZW1fZXZpY3QubyBcCkBAIC05OSw2ICsxMDAs NyBAQCBpOTE1LXkgKz0gXAogCSAgaTkxNV9nZW1faW50ZXJuYWwubyBcCiAJICBpOTE1X2dlbS5v IFwKIAkgIGk5MTVfZ2VtX29iamVjdC5vIFwKKwkgIGk5MTVfZ2VtX29iamVjdF9ibHQubyBcCiAJ ICBpOTE1X2dlbV9wbS5vIFwKIAkgIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5vIFwKIAkgIGk5MTVf Z2VtX3Nocmlua2VyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3B1X2NvbW1hbmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29t bWFuZHMuaAppbmRleCBhMzRlY2U1M2E3NzEuLjdlOTU4MjdiMDcyNiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKQEAgLTE4MCw2ICsxODAsNyBAQAog I2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GT19JOTY1ICAoKDB4NzkwMDw8MTYpfDB4MikKIAog I2RlZmluZSBDT0xPUl9CTFRfQ01ECQkJKDI8PDI5IHwgMHg0MDw8MjIgfCAoNS0yKSkKKyNkZWZp bmUgWFlfQ09MT1JfQkxUX0NNRAkJKDI8PDI5IHwgMHg1MDw8MjIpCiAjZGVmaW5lIFNSQ19DT1BZ X0JMVF9DTUQJCSgoMjw8MjkpfCgweDQzPDwyMil8NCkKICNkZWZpbmUgWFlfU1JDX0NPUFlfQkxU X0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQogI2RlZmluZSBYWV9NT05PX1NSQ19DT1BZX0lN TV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIyKXw1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY2xpZW50X2JsdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fY2xpZW50X2JsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MGUwYzJhOWJkOWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY2xpZW50X2JsdC5jCkBAIC0wLDAgKzEsMzAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24K KyAqLworI2luY2x1ZGUgImk5MTVfZ2VtX2NsaWVudF9ibHQuaCIKKworI2luY2x1ZGUgImk5MTVf Z2VtX29iamVjdF9ibHQuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworc3RydWN0IGk5MTVf c2xlZXZlIHsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOworCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7CisJc3RydWN0IGk5MTVfcGFnZV9z aXplcyBwYWdlX3NpemVzOworfTsKKworc3RhdGljIGludCB2bWFfc2V0X3BhZ2VzKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQoreworCXN0cnVjdCBpOTE1X3NsZWV2ZSAqc2xlZXZlID0gdm1hLT5wcml2 YXRlOworCisJdm1hLT5wYWdlcyA9IHNsZWV2ZS0+cGFnZXM7CisJdm1hLT5wYWdlX3NpemVzID0g c2xlZXZlLT5wYWdlX3NpemVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtYV9j bGVhcl9wYWdlcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlHRU1fQlVHX09OKCF2bWEtPnBh Z2VzKTsKKwl2bWEtPnBhZ2VzID0gTlVMTDsKK30KKworc3RhdGljIGludCB2bWFfYmluZChzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwKKwkJICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZl bCwKKwkJICAgIHUzMiBmbGFncykKK3sKKwlyZXR1cm4gdm1hLT52bS0+dm1hX29wcy5iaW5kX3Zt YSh2bWEsIGNhY2hlX2xldmVsLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtYV91bmJpbmQo c3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJdm1hLT52bS0+dm1hX29wcy51bmJpbmRfdm1hKHZt YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV92bWFfb3BzIHByb3h5X3ZtYV9vcHMg PSB7CisJLnNldF9wYWdlcyA9IHZtYV9zZXRfcGFnZXMsCisJLmNsZWFyX3BhZ2VzID0gdm1hX2Ns ZWFyX3BhZ2VzLAorCS5iaW5kX3ZtYSA9IHZtYV9iaW5kLAorCS51bmJpbmRfdm1hID0gdm1hX3Vu YmluZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9zbGVldmUgKmNyZWF0ZV9zbGVldmUoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAorCQkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkJIHN0cnVjdCBp OTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMpCit7CisJc3RydWN0IGk5MTVfc2xlZXZlICpzbGVl dmU7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IGVycjsKKworCXNsZWV2ZSA9IGt6YWxs b2Moc2l6ZW9mKCpzbGVldmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsZWV2ZSkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisKKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZtLCBO VUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJZXJyID0gUFRSX0VSUih2bWEpOworCQlnb3Rv IGVycl9mcmVlOworCX0KKworCXZtYS0+cHJpdmF0ZSA9IHNsZWV2ZTsKKwl2bWEtPm9wcyA9ICZw cm94eV92bWFfb3BzOworCisJc2xlZXZlLT52bWEgPSB2bWE7CisJc2xlZXZlLT5vYmogPSBpOTE1 X2dlbV9vYmplY3RfZ2V0KG9iaik7CisJc2xlZXZlLT5wYWdlcyA9IHBhZ2VzOworCXNsZWV2ZS0+ cGFnZV9zaXplcyA9ICpwYWdlX3NpemVzOworCisJcmV0dXJuIHNsZWV2ZTsKKworZXJyX2ZyZWU6 CisJa2ZyZWUoc2xlZXZlKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgdm9p ZCBkZXN0cm95X3NsZWV2ZShzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSkKK3sKKwlpOTE1X2dl bV9vYmplY3RfcHV0KHNsZWV2ZS0+b2JqKTsKKwlrZnJlZShzbGVldmUpOworfQorCitzdHJ1Y3Qg Y2xlYXJfcGFnZXNfd29yayB7CisJc3RydWN0IGRtYV9mZW5jZSBkbWE7CisJc3RydWN0IGRtYV9m ZW5jZV9jYiBjYjsKKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSB3YWl0OworCXN0cnVjdCB3b3JrX3N0 cnVjdCB3b3JrOworCXN0cnVjdCBpcnFfd29yayBpcnFfd29yazsKKwlzdHJ1Y3QgaTkxNV9zbGVl dmUgKnNsZWV2ZTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7CisJdTMyIHZhbHVlOworfTsK Kworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFyX3BhZ2VzX3dvcmtfZHJpdmVyX25hbWUoc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIERSSVZFUl9OQU1FOworfQorCitzdGF0aWMg Y29uc3QgY2hhciAqY2xlYXJfcGFnZXNfd29ya190aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlKQoreworCXJldHVybiAiY2xlYXIiOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9w YWdlc193b3JrX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGNs ZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2YoZmVuY2UsIHR5cGVvZigqdyksIGRtYSk7 CisKKwlkZXN0cm95X3NsZWV2ZSh3LT5zbGVldmUpOworCisJaTkxNV9zd19mZW5jZV9maW5pKCZ3 LT53YWl0KTsKKworCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKncpLCBkbWEpKTsKKwlk bWFfZmVuY2VfZnJlZSgmdy0+ZG1hKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfZmVu Y2Vfb3BzIGNsZWFyX3BhZ2VzX3dvcmtfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBjbGVh cl9wYWdlc193b3JrX2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IGNsZWFyX3Bh Z2VzX3dvcmtfdGltZWxpbmVfbmFtZSwKKwkucmVsZWFzZSA9IGNsZWFyX3BhZ2VzX3dvcmtfcmVs ZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3NpZ25hbF9pcnFfd29ya2VyKHN0 cnVjdCBpcnFfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNv bnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCBpcnFfd29yayk7CisKKwlkbWFfZmVuY2Vfc2ln bmFsKCZ3LT5kbWEpOworCWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7Cit9CisKK3N0YXRpYyB2b2lk IGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9jYihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJCQkg ICAgIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQoreworCXN0cnVjdCBjbGVhcl9wYWdlc193b3Jr ICp3ID0gY29udGFpbmVyX29mKGNiLCB0eXBlb2YoKncpLCBjYik7CisKKwkvKgorCSAqIFB1c2gg dGhlIHNpZ25hbGxpbmcgb2YgdGhlIGZlbmNlIGludG8geWV0IGFub3RoZXIgd29ya2VyIHRvIGF2 b2lkCisJICogdGhlIG5pZ2h0bWFyZSBsb2NraW5nIGFyb3VuZCB0aGUgZmVuY2Ugc3BpbmxvY2su CisJICovCisJaXJxX3dvcmtfcXVldWUoJnctPmlycV93b3JrKTsKK30KKworc3RhdGljIHZvaWQg Y2xlYXJfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qg Y2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCB3b3Jr KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHctPmNlLT5nZW1fY29udGV4dC0+ aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdy0+c2xlZXZlLT5vYmo7 CisJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB3LT5zbGVldmUtPnZtYTsKKwlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycTsKKwlpbnQgZXJyID0gdy0+ZG1hLmVycm9yOworCisJaWYgKHVubGlrZWx5KGVy cikpCisJCWdvdG8gb3V0X3NpZ25hbDsKKworCWlmIChvYmotPmNhY2hlX2RpcnR5KSB7CisJCW9i ai0+d3JpdGVfZG9tYWluID0gMDsKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3Bh Z2Uob2JqKSkKKwkJCWRybV9jbGZsdXNoX3NnKHctPnNsZWV2ZS0+cGFnZXMpOworCQlvYmotPmNh Y2hlX2RpcnR5ID0gZmFsc2U7CisJfQorCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CisJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOworCWlmICh1 bmxpa2VseShlcnIpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlycSA9IGk5MTVfcmVxdWVzdF9j cmVhdGUody0+Y2UpOworCWlmIChJU19FUlIocnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOwor CQlnb3RvIG91dF91bnBpbjsKKwl9CisKKwkvKiBUaGVyZSdzIG5vIHdheSB0aGUgZmVuY2UgaGFz IHNpZ25hbGxlZCAqLworCWlmIChkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKCZycS0+ZmVuY2UsICZ3 LT5jYiwKKwkJCQkgICBjbGVhcl9wYWdlc19kbWFfZmVuY2VfY2IpKQorCQlHRU1fQlVHX09OKDEp OworCisJaWYgKHctPmNlLT5lbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iKSB7CisJCWVyciA9 IHctPmNlLT5lbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iKHJxKTsKKwkJaWYgKHVubGlrZWx5 KGVycikpCisJCQlnb3RvIG91dF9yZXF1ZXN0OworCX0KKworCWVyciA9IGludGVsX2VtaXRfdm1h X2ZpbGxfYmx0KHJxLCB2bWEsIHctPnZhbHVlKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290 byBvdXRfcmVxdWVzdDsKKworCWVyciA9IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcnEs IEVYRUNfT0JKRUNUX1dSSVRFKTsKK291dF9yZXF1ZXN0OgorCWlmICh1bmxpa2VseShlcnIpKSB7 CisJCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnctPmRtYSwgZXJyKTsKKwkJaTkxNV9yZXF1ZXN0X3Nr aXAocnEsIGVycik7CisJCWVyciA9IDA7CisJfQorCisJaTkxNV9yZXF1ZXN0X2FkZChycSk7Citv dXRfdW5waW46CisJaTkxNV92bWFfdW5waW4odm1hKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKK291dF9zaWduYWw6CisJaWYgKHVubGlrZWx5 KGVycikpIHsKKwkJZG1hX2ZlbmNlX3NldF9lcnJvcigmdy0+ZG1hLCBlcnIpOworCQlkbWFfZmVu Y2Vfc2lnbmFsKCZ3LT5kbWEpOworCQlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOworCX0KK30KKwor c3RhdGljIGludCBfX2k5MTVfc3dfZmVuY2VfY2FsbAorY2xlYXJfcGFnZXNfd29ya19ub3RpZnko c3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLAorCQkJZW51bSBpOTE1X3N3X2ZlbmNlX25vdGlm eSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZihm ZW5jZSwgdHlwZW9mKCp3KSwgd2FpdCk7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBGRU5D RV9DT01QTEVURToKKwkJc2NoZWR1bGVfd29yaygmdy0+d29yayk7CisJCWJyZWFrOworCisJY2Fz ZSBGRU5DRV9GUkVFOgorCQlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOworCQlicmVhazsKKwl9CisK KwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmVuY2Vf bG9jayk7CisKKy8qIFhYWDogYmV0dGVyIG5hbWUgcGxlYXNlICovCitpbnQgaTkxNV9nZW1fc2No ZWR1bGVfZmlsbF9wYWdlc19ibHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJ CQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkgICAgIHN0cnVjdCBzZ190YWJs ZSAqcGFnZXMsCisJCQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3NpemVzICpwYWdlX3NpemVzLAor CQkJCSAgICAgdTMyIHZhbHVlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0g Y2UtPmdlbV9jb250ZXh0OworCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOworCXN0cnVj dCBjbGVhcl9wYWdlc193b3JrICp3b3JrOworCXN0cnVjdCBpOTE1X3NsZWV2ZSAqc2xlZXZlOwor CWludCBlcnI7CisKKwl2bSA9IGN0eC0+cHBndHQgPyAmY3R4LT5wcGd0dC0+dm0gOiAmaTkxNS0+ Z2d0dC52bTsKKworCXNsZWV2ZSA9IGNyZWF0ZV9zbGVldmUodm0sIG9iaiwgcGFnZXMsIHBhZ2Vf c2l6ZXMpOworCWlmIChJU19FUlIoc2xlZXZlKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2xlZXZlKTsK KworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9LRVJORUwpOworCWlmICghd29y aykgeworCQlkZXN0cm95X3NsZWV2ZShzbGVldmUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisK Kwl3b3JrLT52YWx1ZSA9IHZhbHVlOworCXdvcmstPnNsZWV2ZSA9IHNsZWV2ZTsKKwl3b3JrLT5j ZSA9IGNlOworCisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbGVhcl9wYWdlc193b3JrZXIpOwor CisJaW5pdF9pcnFfd29yaygmd29yay0+aXJxX3dvcmssIGNsZWFyX3BhZ2VzX3NpZ25hbF9pcnFf d29ya2VyKTsKKworCWRtYV9mZW5jZV9pbml0KCZ3b3JrLT5kbWEsCisJCSAgICAgICAmY2xlYXJf cGFnZXNfd29ya19vcHMsCisJCSAgICAgICAmZmVuY2VfbG9jaywKKwkJICAgICAgIGk5MTUtPm1t LnVub3JkZXJlZF90aW1lbGluZSwKKwkJICAgICAgIDApOworCWk5MTVfc3dfZmVuY2VfaW5pdCgm d29yay0+d2FpdCwgY2xlYXJfcGFnZXNfd29ya19ub3RpZnkpOworCisJaTkxNV9nZW1fb2JqZWN0 X2xvY2sob2JqKTsKKwllcnIgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3Jlc2VydmF0aW9uKCZ3b3Jr LT53YWl0LAorCQkJCQkgICAgICBvYmotPnJlc3YsIE5VTEwsCisJCQkJCSAgICAgIHRydWUsIEk5 MTVfRkVOQ0VfVElNRU9VVCwKKwkJCQkJICAgICAgSTkxNV9GRU5DRV9HRlApOworCWlmIChlcnIg PCAwKSB7CisJCWRtYV9mZW5jZV9zZXRfZXJyb3IoJndvcmstPmRtYSwgZXJyKTsKKwl9IGVsc2Ug eworCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uob2JqLT5yZXN2LCAmd29yay0+ ZG1hKTsKKwkJZXJyID0gMDsKKwl9CisJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhvYmopOworCisJ ZG1hX2ZlbmNlX2dldCgmd29yay0+ZG1hKTsKKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdCgmd29yay0+ d2FpdCk7CisKKwlyZXR1cm4gZXJyOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5 MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyIK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50 X2JsdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50X2JsdC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2RiZDI4YzIyZmY1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xpZW50X2JsdC5oCkBA IC0wLDAgKzEsMjEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaWZuZGVmIF9fSTkx NV9HRU1fQ0xJRU5UX0JMVF9IX18KKyNkZWZpbmUgX19JOTE1X0dFTV9DTElFTlRfQkxUX0hfXwor CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7 CitzdHJ1Y3QgaTkxNV9wYWdlX3NpemVzOworc3RydWN0IGludGVsX2NvbnRleHQ7CitzdHJ1Y3Qg c2dfdGFibGU7CisKK2ludCBpOTE1X2dlbV9zY2hlZHVsZV9maWxsX3BhZ2VzX2JsdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQg KmNlLAorCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkgICAgIHN0cnVjdCBp OTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMsCisJCQkJICAgICB1MzIgdmFsdWUpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQzMDQ0Y2RjODExMQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuYwpAQCAtMCww ICsxLDEwNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHly aWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImk5MTVfZ2Vt X29iamVjdF9ibHQuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtX2NsZmx1c2guaCIKKyNpbmNsdWRl ICJpbnRlbF9kcnYuaCIKKworaW50IGludGVsX2VtaXRfdm1hX2ZpbGxfYmx0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxLAorCQkJICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAorCQkJICAgIHUzMiB2 YWx1ZSkKK3sKKwl1MzIgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA4KTsKKwlp ZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJaWYgKElOVEVMX0dFTihy cS0+aTkxNSkgPj0gOCkgeworCQkqY3MrKyA9IFhZX0NPTE9SX0JMVF9DTUQgfCBCTFRfV1JJVEVf UkdCQSB8ICg3LTIpOworCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IEJMVF9ST1BfQ09MT1JfQ09Q WSB8IFBBR0VfU0laRTsKKwkJKmNzKysgPSAwOworCQkqY3MrKyA9IHZtYS0+c2l6ZSA+PiBQQUdF X1NISUZUIDw8IDE2IHwgUEFHRV9TSVpFIC8gNDsKKwkJKmNzKysgPSBsb3dlcl8zMl9iaXRzKHZt YS0+bm9kZS5zdGFydCk7CisJCSpjcysrID0gdXBwZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQp OworCQkqY3MrKyA9IHZhbHVlOworCQkqY3MrKyA9IE1JX05PT1A7CisJfSBlbHNlIHsKKwkJKmNz KysgPSBYWV9DT0xPUl9CTFRfQ01EIHwgQkxUX1dSSVRFX1JHQkEgfCAoNi0yKTsKKwkJKmNzKysg PSBCTFRfREVQVEhfMzIgfCBCTFRfUk9QX0NPTE9SX0NPUFkgfCBQQUdFX1NJWkU7CisJCSpjcysr ID0gMDsKKwkJKmNzKysgPSB2bWEtPnNpemUgPj4gUEFHRV9TSElGVCA8PCAxNiB8IFBBR0VfU0la RSAvIDQ7CisJCSpjcysrID0gdm1hLT5ub2RlLnN0YXJ0OworCQkqY3MrKyA9IHZhbHVlOworCQkq Y3MrKyA9IE1JX05PT1A7CisJCSpjcysrID0gTUlfTk9PUDsKKwl9CisKKwlpbnRlbF9yaW5nX2Fk dmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X2Zp bGxfYmx0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKKwkJCSAgICAgdTMyIHZhbHVlKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4ID0gY2UtPmdlbV9jb250ZXh0OworCXN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtOworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOworCWludCBlcnI7CisKKwkvKiBYWFg6IGNlLT52bSBwbGVhc2UgKi8KKwl2bSA9IGN0eC0+ cHBndHQgPyAmY3R4LT5wcGd0dC0+dm0gOiAmaTkxNS0+Z2d0dC52bTsKKworCXZtYSA9IGk5MTVf dm1hX2luc3RhbmNlKG9iaiwgdm0sIE5VTEwpOworCWlmIChJU19FUlIodm1hKSkKKwkJcmV0dXJu IFBUUl9FUlIodm1hKTsKKworCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VS KTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKworCWlmIChvYmotPmNhY2hl X2RpcnR5ICYgfm9iai0+Y2FjaGVfY29oZXJlbnQpCisJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0 KG9iaiwgMCk7CisKKwlycSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoY2UpOworCWlmIChJU19FUlIo cnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOworCQlnb3RvIG91dF91bnBpbjsKKwl9CisKKwll cnIgPSBpOTE1X3JlcXVlc3RfYXdhaXRfb2JqZWN0KHJxLCBvYmosIHRydWUpOworCWlmICh1bmxp a2VseShlcnIpKQorCQlnb3RvIG91dF9yZXF1ZXN0OworCisJaWYgKGNlLT5lbmdpbmUtPmVtaXRf aW5pdF9icmVhZGNydW1iKSB7CisJCWVyciA9IGNlLT5lbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNy dW1iKHJxKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9yZXF1ZXN0OworCX0K KworCWVyciA9IGludGVsX2VtaXRfdm1hX2ZpbGxfYmx0KHJxLCB2bWEsIHZhbHVlKTsKKwlpZiAo dW5saWtlbHkoZXJyKSkKKwkJZ290byBvdXRfcmVxdWVzdDsKKworCWVyciA9IGk5MTVfdm1hX21v dmVfdG9fYWN0aXZlKHZtYSwgcnEsIEVYRUNfT0JKRUNUX1dSSVRFKTsKK291dF9yZXF1ZXN0Ogor CWlmICh1bmxpa2VseShlcnIpKQorCQlpOTE1X3JlcXVlc3Rfc2tpcChycSwgZXJyKTsKKworCWk5 MTVfcmVxdWVzdF9hZGQocnEpOworb3V0X3VucGluOgorCWk5MTVfdm1hX3VucGluKHZtYSk7CisJ cmV0dXJuIGVycjsKK30KKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNU KQorI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMiCisjZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdlYzdkZTZhYzBjMAotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdF9ibHQuaApAQCAtMCwwICsxLDI0 IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9fSTkxNV9HRU1fT0JK RUNUX0JMVF9IX18KKyNkZWZpbmUgX19JOTE1X0dFTV9PQkpFQ1RfQkxUX0hfXworCisjaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7CitzdHJ1Y3Qg aW50ZWxfY29udGV4dDsKK3N0cnVjdCBpOTE1X3JlcXVlc3Q7CitzdHJ1Y3QgaTkxNV92bWE7CisK K2ludCBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJ CSAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJCSAgICB1MzIgdmFsdWUpOworCitpbnQgaTkx NV9nZW1fb2JqZWN0X2ZpbGxfYmx0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCSAgICAgdTMyIHZhbHVlKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9n ZW1fY2xpZW50X2JsdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2Vt X2NsaWVudF9ibHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE1 ZWQ5ZjhkMzIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jw b3JhdGlvbgorICovCisKKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRl ICJpZ3RfZmx1c2hfdGVzdC5oIgorI2luY2x1ZGUgIm1vY2tfZHJtLmgiCisjaW5jbHVkZSAibW9j a19jb250ZXh0LmgiCisKK3N0YXRpYyBpbnQgaWd0X2NsaWVudF9maWxsKHZvaWQgKmFyZykKK3sK KwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSBjZS0+Z2VtX2NvbnRleHQtPmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKKwlzdHJ1Y3Qgcm5kX3N0YXRlIHBybmc7CisJSUdUX1RJTUVPVVQoZW5kKTsK Kwl1MzIgKnZhZGRyOworCWludCBlcnIgPSAwOworCisJcHJhbmRvbV9zZWVkX3N0YXRlKCZwcm5n LCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKKworCWRvIHsKKwkJdTMyIHN6ID0gcHJhbmRv bV91MzJfc3RhdGUoJnBybmcpICUgU1pfMzJNOworCQl1MzIgdmFsID0gcHJhbmRvbV91MzJfc3Rh dGUoJnBybmcpOworCQl1MzIgaTsKKworCQlzeiA9IHJvdW5kX3VwKHN6LCBQQUdFX1NJWkUpOwor CisJCXByX2RlYnVnKCIlcyB3aXRoIHN6PSV4LCB2YWw9JXhcbiIsIF9fZnVuY19fLCBzeiwgdmFs KTsKKworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUsIHN6KTsK KwkJaWYgKElTX0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJfRVJSKG9iaik7CisJCQlnb3RvIGVy cl9mbHVzaDsKKwkJfQorCisJCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAob2JqLCBJ OTE1X01BUF9XQik7CisJCWlmIChJU19FUlIodmFkZHIpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZh ZGRyKTsKKwkJCWdvdG8gZXJyX3B1dDsKKwkJfQorCisJCS8qCisJCSAqIFhYWDogVGhlIGdvYWwg aXMgbW92ZSB0aGlzIHRvIGdldF9wYWdlcywgc28gdHJ5IHRvIGRpcnR5IHRoZQorCQkgKiBDUFUg Y2FjaGUgZmlyc3QgdG8gY2hlY2sgdGhhdCB3ZSBkbyB0aGUgcmVxdWlyZWQgY2xmbHVzaAorCQkg KiBiZWZvcmUgc2NoZWR1bGluZyB0aGUgYmx0IGZvciAhbGxjIHBsYXRmb3Jtcy4gVGhpcyBtYXRj aGVzCisJCSAqIHNvbWUgdmVyc2lvbiBvZiByZWFsaXR5IHdoZXJlIGF0IGdldF9wYWdlcyB0aGUg cGFnZXMKKwkJICogdGhlbXNlbHZlcyBtYXkgbm90IHlldCBiZSBjb2hlcmVudCB3aXRoIHRoZSBH UFUoc3dhcC1pbikuIElmCisJCSAqIHdlIGFyZSBtaXNzaW5nIHRoZSBmbHVzaCB0aGVuIHdlIHNo b3VsZCBzZWUgdGhlIHN0YWxlIGNhY2hlCisJCSAqIHZhbHVlcyBhZnRlciB3ZSBkbyB0aGUgc2V0 X3RvX2NwdV9kb21haW4gYW5kIHBpY2sgaXQgdXAgYXMgYQorCQkgKiB0ZXN0IGZhaWx1cmUuCisJ CSAqLworCQltZW1zZXQzMih2YWRkciwgdmFsIF4gMHhkZWFkYmVhZiwgb2JqLT5iYXNlLnNpemUg LyBzaXplb2YodTMyKSk7CisKKwkJaWYgKCEob2JqLT5jYWNoZV9jb2hlcmVudCAmIEk5MTVfQk9f Q0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKSkKKwkJCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOwor CisJCWVyciA9IGk5MTVfZ2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KG9iaiwgY2UsIG9iai0+ bW0ucGFnZXMsCisJCQkJCQkgICAgICAgJm9iai0+bW0ucGFnZV9zaXplcywKKwkJCQkJCSAgICAg ICB2YWwpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfdW5waW47CisKKwkJLyoKKwkJICogWFhY OiBGb3Igbm93IGRvIHRoZSB3YWl0IHdpdGhvdXQgdGhlIEJLTCB0byBlbnN1cmUgd2UgZG9uJ3QK KwkJICogZGVhZGxvY2suCisJCSAqLworCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmos CisJCQkJCSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwKKwkJCQkJICAgSTkxNV9XQUlUX0FM TCwKKwkJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCQlpZiAoZXJyKQorCQkJZ290byBl cnJfdW5waW47CisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCWVy ciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIGZhbHNlKTsKKwkJbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaWYgKGVycikKKwkJCWdvdG8g ZXJyX3VucGluOworCisJCWZvciAoaSA9IDA7IGkgPCBvYmotPmJhc2Uuc2l6ZSAvIHNpemVvZih1 MzIpOyArK2kpIHsKKwkJCWlmICh2YWRkcltpXSAhPSB2YWwpIHsKKwkJCQlwcl9lcnIoInZhZGRy WyV1XT0leCwgZXhwZWN0ZWQ9JXhcbiIsIGksCisJCQkJICAgICAgIHZhZGRyW2ldLCB2YWwpOwor CQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfdW5waW47CisJCQl9CisJCX0KKworCQlp OTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7CisJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2 ZShvYmopOworCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCX0gd2hp bGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpOworCisJZ290byBlcnJfZmx1c2g7CisKK2Vy cl91bnBpbjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CitlcnJfcHV0OgorCW11 dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCV9faTkxNV9nZW1fb2JqZWN0X3Jl bGVhc2VfdW5sZXNzX2FjdGl2ZShvYmopOworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7CitlcnJfZmx1c2g6CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CisJaWYgKGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQorCQllcnIg PSAtRUlPOworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlpZiAo ZXJyID09IC1FTk9NRU0pCisJCWVyciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaTkx NV9nZW1fY2xpZW50X2JsdF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewor CQlTVUJURVNUKGlndF9jbGllbnRfZmlsbCksCisJfTsKKworCWlmIChpOTE1X3Rlcm1pbmFsbHlf d2VkZ2VkKGk5MTUpKQorCQlyZXR1cm4gMDsKKworCWlmICghSEFTX0VOR0lORShpOTE1LCBCQ1Mw KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNS0+ZW5n aW5lW0JDUzBdLT5rZXJuZWxfY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjY2NzE3YThlYzUyZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMKQEAgLTAs MCArMSwxMTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICIuLi9pOTE1 X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlICJpZ3RfZmx1c2hfdGVzdC5oIgorI2luY2x1ZGUgIm1v Y2tfZHJtLmgiCisjaW5jbHVkZSAibW9ja19jb250ZXh0LmgiCisKK3N0YXRpYyBpbnQgaWd0X2Zp bGxfYmx0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBhcmc7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjZS0+Z2VtX2NvbnRleHQtPmk5MTU7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3Qgcm5kX3N0YXRlIHBybmc7 CisJSUdUX1RJTUVPVVQoZW5kKTsKKwl1MzIgKnZhZGRyOworCWludCBlcnIgPSAwOworCisJcHJh bmRvbV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKKworCWRv IHsKKwkJdTMyIHN6ID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpICUgU1pfMzJNOworCQl1MzIg dmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOworCQl1MzIgaTsKKworCQlzeiA9IHJvdW5k X3VwKHN6LCBQQUdFX1NJWkUpOworCisJCXByX2RlYnVnKCIlcyB3aXRoIHN6PSV4LCB2YWw9JXhc biIsIF9fZnVuY19fLCBzeiwgdmFsKTsKKworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRl X2ludGVybmFsKGk5MTUsIHN6KTsKKwkJaWYgKElTX0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJf RVJSKHZhZGRyKTsKKwkJCWdvdG8gZXJyX2ZsdXNoOworCQl9CisKKwkJdmFkZHIgPSBpOTE1X2dl bV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKKwkJaWYgKElTX0VSUih2YWRkcikp IHsKKwkJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJZ290byBlcnJfcHV0OworCQl9CisKKwkJ LyoKKwkJICogTWFrZSBzdXJlIHRoZSBwb3RlbnRpYWxseSBhc3luYyBjbGZsdXNoIGRvZXMgaXRz IGpvYiwgaWYKKwkJICogcmVxdWlyZWQuCisJCSAqLworCQltZW1zZXQzMih2YWRkciwgdmFsIF4g MHhkZWFkYmVhZiwgb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodTMyKSk7CisKKwkJaWYgKCEob2Jq LT5jYWNoZV9jb2hlcmVudCAmIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKSkKKwkJ CW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOworCisJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfZmlsbF9ibHQob2JqLCBjZSwgdmFs KTsKKwkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaWYgKGVycikK KwkJCWdvdG8gZXJyX3VucGluOworCisJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCBmYWxz ZSk7CisJCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCWlmIChlcnIp CisJCQlnb3RvIGVycl91bnBpbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUg LyBzaXplb2YodTMyKTsgKytpKSB7CisJCQlpZiAodmFkZHJbaV0gIT0gdmFsKSB7CisJCQkJcHJf ZXJyKCJ2YWRkclsldV09JXgsIGV4cGVjdGVkPSV4XG4iLCBpLAorCQkJCSAgICAgICB2YWRkcltp XSwgdmFsKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyX3VucGluOworCQkJfQor CQl9CisKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOworCisJCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQlfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3Vu bGVzc19hY3RpdmUob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBlbmQpKTsKKworCWdvdG8gZXJyX2Zs dXNoOworCitlcnJfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOworZXJy X3B1dDoKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlfX2k5MTVfZ2Vt X29iamVjdF9yZWxlYXNlX3VubGVzc19hY3RpdmUob2JqKTsKKwltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOworZXJyX2ZsdXNoOgorCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOworCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VE KSkKKwkJZXJyID0gLUVJTzsKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp OworCisJaWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAwOworCisJcmV0dXJuIGVycjsKK30K KworaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVz dHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfZmlsbF9ibHQpLAorCX07CisKKwlpZiAoaTkxNV90ZXJt aW5hbGx5X3dlZGdlZChpOTE1KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIUhBU19FTkdJTkUoaTkx NSwgQkNTMCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIGk5 MTUtPmVuZ2luZVtCQ1MwXS0+a2VybmVsX2NvbnRleHQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKaW5kZXggYTU0ZjU5 MDc4OGE0Li5iODQxY2NiZDQ0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaApAQCAtMjQsNiArMjQsOCBAQCBzZWxmdGVz dChnZW0sIGk5MTVfZ2VtX2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoZXZpY3QsIGk5MTVfZ2Vt X2V2aWN0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoaHVnZXBhZ2VzLCBpOTE1X2dlbV9odWdl X3BhZ2VfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChjb250ZXh0cywgaTkxNV9nZW1fY29udGV4 dF9saXZlX3NlbGZ0ZXN0cykKK3NlbGZ0ZXN0KGJsdCwgaTkxNV9nZW1fb2JqZWN0X2JsdF9saXZl X3NlbGZ0ZXN0cykKK3NlbGZ0ZXN0KGNsaWVudCwgaTkxNV9nZW1fY2xpZW50X2JsdF9saXZlX3Nl bGZ0ZXN0cykKIHNlbGZ0ZXN0KGhhbmdjaGVjaywgaW50ZWxfaGFuZ2NoZWNrX2xpdmVfc2VsZnRl c3RzKQogc2VsZnRlc3QoZXhlY2xpc3RzLCBpbnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMp CiBzZWxmdGVzdChndWMsIGludGVsX2d1Y19saXZlX3NlbGZ0ZXN0KQotLSAKMi4yMC4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=