From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH 8/9] drm/amdkfd: Change MQD manager to be H/W specific Date: Thu, 8 Jan 2015 18:15:35 +0200 Message-ID: <1420733736-13938-9-git-send-email-oded.gabbay@amd.com> References: <1420733736-13938-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0132.outbound.protection.outlook.com [65.55.169.132]) by gabe.freedesktop.org (Postfix) with ESMTP id A090E6E79A for ; Thu, 8 Jan 2015 08:16:22 -0800 (PST) In-Reply-To: <1420733736-13938-1-git-send-email-oded.gabbay@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, alexdeucher@gmail.com List-Id: dri-devel@lists.freedesktop.org RnJvbTogQmVuIEdveiA8YmVuLmdvekBhbWQuY29tPgoKVGhlIE1RRHMgZm9yIENJIGFuZCBWSSBh cmUgZGlmZmVyZW50LiBUaGVyZWZvcmUsIHRoZSBNUUQgbWFuYWdlciBtb2R1bGUgbmVlZCB0bwpi ZSBIL1cgc3BlY2lmaWMuCgpUaGlzIHBhdGNoIHNwbGl0cyB0aGUgY3VycmVudCBNUUQgbWFuYWdl ciBpbnRvIHRocmVlIGZpbGVzOgoKLSBrZmRfbXFkX21hbmFnZXIuYywgd2hpY2ggY29udGFpbnMg Y29tbW9uIGZ1bmN0aW9ucyBhbmQgaW5pdGlhbGl6ZXMgdGhlCiAgc3BlY2lmaWMgbXFkIG1hbmFn ZXIgbW9kdWxlIGFjY29yZGluZyB0byB0aGUgSC9XCgotIGtmZF9tcWRfbWFuYWdlcl9jaWsuYywg d2hpY2ggY29udGFpbnMgS2F2ZXJpIHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhpcyBpcwogIGJhc2lj YWxseSB0aGUgb2xkIGtmZF9tcWRfbWFuYWdlci5jCgotIGtmZF9tcWRfbWFuYWdlcl92aS5jLCB3 aGljaCB3aWxsIGNvbnRhaW4gVkkgc3BlY2lmaWMgZnVuY3Rpb25zLiBDdXJyZW50bHkgaXQKICBp cyBub3QgaW1wbGVtZW50ZWQgZXhjZXB0IGZvciByZXR1cm5pbmcgTlVMTCBvbiBpbml0aWFsaXph dGlvbi4KClNpZ25lZC1vZmYtYnk6IEJlbiBHb3ogPGJlbi5nb3pAYW1kLmNvbT4KU2lnbmVkLW9m Zi1ieTogT2RlZCBHYWJiYXkgPG9kZWQuZ2FiYmF5QGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jICAgICB8IDQzNCArLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJfY2lr LmMgfCA0NTQgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k a2ZkL2tmZF9tcWRfbWFuYWdlcl92aS5jICB8ICAzMyArKwogZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRrZmQva2ZkX3ByaXYuaCAgICAgICAgICAgIHwgICA0ICsKIDUgZmlsZXMgY2hhbmdlZCwgNDk4 IGluc2VydGlvbnMoKyksIDQyOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJfY2lrLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJfdmkuYwoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKaW5kZXggYmU2MjQ2ZC4uYmM2MDUzZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBAIGNjZmxhZ3MteSA6 PSAtSWluY2x1ZGUvZHJtIC1JZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlLwogYW1ka2ZkLXkJ Oj0ga2ZkX21vZHVsZS5vIGtmZF9kZXZpY2UubyBrZmRfY2hhcmRldi5vIGtmZF90b3BvbG9neS5v IFwKIAkJa2ZkX3Bhc2lkLm8ga2ZkX2Rvb3JiZWxsLm8ga2ZkX2ZsYXRfbWVtb3J5Lm8gXAogCQlr ZmRfcHJvY2Vzcy5vIGtmZF9xdWV1ZS5vIGtmZF9tcWRfbWFuYWdlci5vIFwKKwkJa2ZkX21xZF9t YW5hZ2VyX2Npay5vIGtmZF9tcWRfbWFuYWdlcl92aS5vIFwKIAkJa2ZkX2tlcm5lbF9xdWV1ZS5v IGtmZF9wYWNrZXRfbWFuYWdlci5vIFwKIAkJa2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5vIGtm ZF9kZXZpY2VfcXVldWVfbWFuYWdlci5vIFwKIAkJa2ZkX2ludGVycnVwdC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jCmluZGV4IGJlOTg5ZmIuLmIxZWYx MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdl ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jCkBA IC0yMSw0MzkgKzIxLDE3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4K LSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAia2ZkX3ByaXYuaCIKLSNpbmNsdWRl ICJrZmRfbXFkX21hbmFnZXIuaCIKLSNpbmNsdWRlICJjaWtfcmVncy5oIgotI2luY2x1ZGUgImNp a19zdHJ1Y3RzLmgiCi0KLWlubGluZSB2b2lkIGJ1c3lfd2FpdCh1bnNpZ25lZCBsb25nIG1zKQot ewotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBtcykpCi0JCWNwdV9yZWxheCgpOwotfQot Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBjaWtfbXFkICpnZXRfbXFkKHZvaWQgKm1xZCkKLXsKLQly ZXR1cm4gKHN0cnVjdCBjaWtfbXFkICopbXFkOwotfQotCi1zdGF0aWMgaW50IGluaXRfbXFkKHN0 cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsCi0JCXN0cnVjdCBrZmRfbWVtX29iaiAq Km1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLAotCQlzdHJ1Y3QgcXVldWVfcHJvcGVy dGllcyAqcSkKLXsKLQl1aW50NjRfdCBhZGRyOwotCXN0cnVjdCBjaWtfbXFkICptOwotCWludCBy ZXR2YWw7Ci0KLQlCVUdfT04oIW1tIHx8ICFxIHx8ICFtcWQpOwotCi0JcHJfZGVidWcoImtmZDog SW4gZnVuYyAlc1xuIiwgX19mdW5jX18pOwotCi0JcmV0dmFsID0ga2ZkX2d0dF9zYV9hbGxvY2F0 ZShtbS0+ZGV2LCBzaXplb2Yoc3RydWN0IGNpa19tcWQpLAotCQkJCQltcWRfbWVtX29iaik7Ci0K LQlpZiAocmV0dmFsICE9IDApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbSA9IChzdHJ1Y3QgY2lr X21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsKLQlhZGRyID0gKCptcWRfbWVtX29iaikt PmdwdV9hZGRyOwotCi0JbWVtc2V0KG0sIDAsIEFMSUdOKHNpemVvZihzdHJ1Y3QgY2lrX21xZCks IDI1NikpOwotCi0JbS0+aGVhZGVyID0gMHhDMDMxMDgwMDsKLQltLT5jb21wdXRlX3BpcGVsaW5l c3RhdF9lbmFibGUgPSAxOwotCW0tPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMCA9IDB4 RkZGRkZGRkY7Ci0JbS0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UxID0gMHhGRkZGRkZG RjsKLQltLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTIgPSAweEZGRkZGRkZGOwotCW0t PmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMyA9IDB4RkZGRkZGRkY7Ci0KLQkvKgotCSAq IE1ha2Ugc3VyZSB0byB1c2UgdGhlIGxhc3QgcXVldWUgc3RhdGUgc2F2ZWQgb24gbXFkIHdoZW4g dGhlIGNwCi0JICogcmVhc3NpZ25zIHRoZSBxdWV1ZSwgc28gd2hlbiBxdWV1ZSBpcyBzd2l0Y2hl ZCBvbi9vZmYgKGUuZyBvdmVyCi0JICogc3Vic2NyaXB0aW9uIG9yIHF1YW50dW0gdGltZW91dCkg dGhlIGNvbnRleHQgd2lsbCBiZSBjb25zaXN0ZW50Ci0JICovCi0JbS0+Y3BfaHFkX3BlcnNpc3Rl bnRfc3RhdGUgPQotCQkJCURFRkFVTFRfQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUgfCBQUkVMT0FE X1JFUTsKLQotCW0tPmNwX21xZF9jb250cm9sICAgICAgICAgICAgID0gTVFEX0NPTlRST0xfUFJJ Vl9TVEFURV9FTjsKLQltLT5jcF9tcWRfYmFzZV9hZGRyX2xvICAgICAgICA9IGxvd2VyXzMyX2Jp dHMoYWRkcik7Ci0JbS0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSAgICAgICAgPSB1cHBlcl8zMl9iaXRz KGFkZHIpOwotCi0JbS0+Y3BfaHFkX2liX2NvbnRyb2wgPSBERUZBVUxUX01JTl9JQl9BVkFJTF9T SVpFIHwgSUJfQVRDX0VOOwotCS8qIEFsdGhvdWdoIFdpbktGRCB3cml0ZXMgdGhpcywgSSBzdXNw ZWN0IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5ICovCi0JbS0+Y3BfaHFkX2liX2NvbnRyb2wg PSBJQl9BVENfRU4gfCBERUZBVUxUX01JTl9JQl9BVkFJTF9TSVpFOwotCi0JbS0+Y3BfaHFkX3F1 YW50dW0gPSBRVUFOVFVNX0VOIHwgUVVBTlRVTV9TQ0FMRV8xTVMgfAotCQkJCVFVQU5UVU1fRFVS QVRJT04oMTApOwotCi0JLyoKLQkgKiBQaXBlIFByaW9yaXR5Ci0JICogSWRlbnRpZmllcyB0aGUg cGlwZSByZWxhdGl2ZSBwcmlvcml0eSB3aGVuIHRoaXMgcXVldWUgaXMgY29ubmVjdGVkCi0JICog dG8gdGhlIHBpcGVsaW5lLiBUaGUgcGlwZSBwcmlvcml0eSBpcyBhZ2FpbnN0IHRoZSBHRlggcGlw ZSBhbmQgSFAzRC4KLQkgKiBJbiBLRkQgd2UgYXJlIHVzaW5nIGEgZml4ZWQgcGlwZSBwcmlvcml0 eSBzZXQgdG8gQ1NfTUVESVVNLgotCSAqIDAgPSBDU19MT1cgKHR5cGljYWxseSBiZWxvdyBHRlgp Ci0JICogMSA9IENTX01FRElVTSAodHlwaWNhbGx5IGJldHdlZW4gSFAzRCBhbmQgR0ZYCi0JICog MiA9IENTX0hJR0ggKHR5cGljYWxseSBhYm92ZSBIUDNEKQotCSAqLwotCW0tPmNwX2hxZF9waXBl X3ByaW9yaXR5ID0gMTsKLQltLT5jcF9ocWRfcXVldWVfcHJpb3JpdHkgPSAxNTsKLQotCSptcWQg PSBtOwotCWlmIChnYXJ0X2FkZHIgIT0gTlVMTCkKLQkJKmdhcnRfYWRkciA9IGFkZHI7Ci0JcmV0 dmFsID0gbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQot c3RhdGljIGludCBpbml0X21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKipt cWQsCi0JCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKiptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRf YWRkciwKLQkJCXN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQotewotCWludCByZXR2YWw7Ci0J c3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKm07Ci0KLQlCVUdfT04oIW1tIHx8ICFtcWQg fHwgIW1xZF9tZW1fb2JqKTsKLQotCXJldHZhbCA9IGtmZF9ndHRfc2FfYWxsb2NhdGUobW0tPmRl diwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzKSwKLQkJCQkJbXFk X21lbV9vYmopOwotCi0JaWYgKHJldHZhbCAhPSAwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW0g PSAoc3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKikgKCptcWRfbWVtX29iaiktPmNwdV9w dHI7Ci0KLQltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJz KSk7Ci0KLQkqbXFkID0gbTsKLQlpZiAoZ2FydF9hZGRyICE9IE5VTEwpCi0JCSpnYXJ0X2FkZHIg PSAoKm1xZF9tZW1fb2JqKS0+Z3B1X2FkZHI7Ci0KLQlyZXR2YWwgPSBtbS0+dXBkYXRlX21xZCht bSwgbSwgcSk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCB1bmluaXRfbXFk KHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwKLQkJCXN0cnVjdCBrZmRfbWVtX29i aiAqbXFkX21lbV9vYmopCi17Ci0JQlVHX09OKCFtbSB8fCAhbXFkKTsKLQlrZmRfZ3R0X3NhX2Zy ZWUobW0tPmRldiwgbXFkX21lbV9vYmopOwotfQotCi1zdGF0aWMgdm9pZCB1bmluaXRfbXFkX3Nk bWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLAotCQkJCXN0cnVjdCBrZmRfbWVt X29iaiAqbXFkX21lbV9vYmopCi17Ci0JQlVHX09OKCFtbSB8fCAhbXFkKTsKLQlrZmRfZ3R0X3Nh X2ZyZWUobW0tPmRldiwgbXFkX21lbV9vYmopOwotfQotCi1zdGF0aWMgaW50IGxvYWRfbXFkKHN0 cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwgdWludDMyX3QgcGlwZV9pZCwKLQkJCXVp bnQzMl90IHF1ZXVlX2lkLCB1aW50MzJfdCBfX3VzZXIgKndwdHIpCi17Ci0JcmV0dXJuIGtmZDJr Z2QtPmhxZF9sb2FkKG1tLT5kZXYtPmtnZCwgbXFkLCBwaXBlX2lkLCBxdWV1ZV9pZCwgd3B0cik7 Ci19Ci0KLXN0YXRpYyBpbnQgbG9hZF9tcWRfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2 b2lkICptcWQsCi0JCQl1aW50MzJfdCBwaXBlX2lkLCB1aW50MzJfdCBxdWV1ZV9pZCwKLQkJCXVp bnQzMl90IF9fdXNlciAqd3B0cikKLXsKLQlyZXR1cm4ga2ZkMmtnZC0+aHFkX3NkbWFfbG9hZCht bS0+ZGV2LT5rZ2QsIG1xZCk7Ci19Ci0KLXN0YXRpYyBpbnQgdXBkYXRlX21xZChzdHJ1Y3QgbXFk X21hbmFnZXIgKm1tLCB2b2lkICptcWQsCi0JCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkK LXsKLQlzdHJ1Y3QgY2lrX21xZCAqbTsKLQotCUJVR19PTighbW0gfHwgIXEgfHwgIW1xZCk7Ci0K LQlwcl9kZWJ1Zygia2ZkOiBJbiBmdW5jICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQltID0gZ2V0X21x ZChtcWQpOwotCW0tPmNwX2hxZF9wcV9jb250cm9sID0gREVGQVVMVF9SUFRSX0JMT0NLX1NJWkUg fAotCQkJCURFRkFVTFRfTUlOX0FWQUlMX1NJWkUgfCBQUV9BVENfRU47Ci0KLQkvKgotCSAqIENh bGN1bGF0aW5nIHF1ZXVlIHNpemUgd2hpY2ggaXMgbG9nIGJhc2UgMiBvZiBhY3R1YWwgcXVldWUg c2l6ZSAtMQotCSAqIGR3b3JkcyBhbmQgYW5vdGhlciAtMSBmb3IgZmZzCi0JICovCi0JbS0+Y3Bf aHFkX3BxX2NvbnRyb2wgfD0gZmZzKHEtPnF1ZXVlX3NpemUgLyBzaXplb2YodW5zaWduZWQgaW50 KSkKLQkJCQkJCQkJLSAxIC0gMTsKLQltLT5jcF9ocWRfcHFfYmFzZV9sbyA9IGxvd2VyXzMyX2Jp dHMoKHVpbnQ2NF90KXEtPnF1ZXVlX2FkZHJlc3MgPj4gOCk7Ci0JbS0+Y3BfaHFkX3BxX2Jhc2Vf aGkgPSB1cHBlcl8zMl9iaXRzKCh1aW50NjRfdClxLT5xdWV1ZV9hZGRyZXNzID4+IDgpOwotCW0t PmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvID0gbG93ZXJfMzJfYml0cygodWludDY0X3Qp cS0+cmVhZF9wdHIpOwotCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpID0gdXBwZXJf MzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOwotCW0tPmNwX2hxZF9wcV9kb29yYmVsbF9j b250cm9sID0gRE9PUkJFTExfRU4gfAotCQkJCQlET09SQkVMTF9PRkZTRVQocS0+ZG9vcmJlbGxf b2ZmKTsKLQotCW0tPmNwX2hxZF92bWlkID0gcS0+dm1pZDsKLQotCWlmIChxLT5mb3JtYXQgPT0g S0ZEX1FVRVVFX0ZPUk1BVF9BUUwpIHsKLQkJbS0+Y3BfaHFkX2lxX3JwdHIgPSBBUUxfRU5BQkxF OwotCQltLT5jcF9ocWRfcHFfY29udHJvbCB8PSBOT19VUERBVEVfUlBUUjsKLQl9Ci0KLQltLT5j cF9ocWRfYWN0aXZlID0gMDsKLQlxLT5pc19hY3RpdmUgPSBmYWxzZTsKLQlpZiAocS0+cXVldWVf c2l6ZSA+IDAgJiYKLQkJCXEtPnF1ZXVlX2FkZHJlc3MgIT0gMCAmJgotCQkJcS0+cXVldWVfcGVy Y2VudCA+IDApIHsKLQkJbS0+Y3BfaHFkX2FjdGl2ZSA9IDE7Ci0JCXEtPmlzX2FjdGl2ZSA9IHRy dWU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXBkYXRlX21xZF9zZG1hKHN0 cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwKLQkJCQlzdHJ1Y3QgcXVldWVfcHJvcGVy dGllcyAqcSkKLXsKLQlzdHJ1Y3QgY2lrX3NkbWFfcmxjX3JlZ2lzdGVycyAqbTsKLQotCUJVR19P TighbW0gfHwgIW1xZCB8fCAhcSk7Ci0KLQltID0gZ2V0X3NkbWFfbXFkKG1xZCk7Ci0JbS0+c2Rt YV9ybGNfcmJfY250bCA9Ci0JCVNETUFfUkJfU0laRSgoZmZzKHEtPnF1ZXVlX3NpemUgLyBzaXpl b2YodW5zaWduZWQgaW50KSkpKSB8Ci0JCVNETUFfUkJfVk1JRChxLT52bWlkKSB8Ci0JCVNETUFf UlBUUl9XUklURUJBQ0tfRU5BQkxFIHwKLQkJU0RNQV9SUFRSX1dSSVRFQkFDS19USU1FUig2KTsK LQotCW0tPnNkbWFfcmxjX3JiX2Jhc2UgPSBsb3dlcl8zMl9iaXRzKHEtPnF1ZXVlX2FkZHJlc3Mg Pj4gOCk7Ci0JbS0+c2RtYV9ybGNfcmJfYmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMocS0+cXVldWVf YWRkcmVzcyA+PiA4KTsKLQltLT5zZG1hX3JsY19yYl9ycHRyX2FkZHJfbG8gPSBsb3dlcl8zMl9i aXRzKCh1aW50NjRfdClxLT5yZWFkX3B0cik7Ci0JbS0+c2RtYV9ybGNfcmJfcnB0cl9hZGRyX2hp ID0gdXBwZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOwotCW0tPnNkbWFfcmxjX2Rv b3JiZWxsID0gU0RNQV9PRkZTRVQocS0+ZG9vcmJlbGxfb2ZmKSB8IFNETUFfREJfRU5BQkxFOwot CW0tPnNkbWFfcmxjX3ZpcnR1YWxfYWRkciA9IHEtPnNkbWFfdm1fYWRkcjsKLQotCW0tPnNkbWFf ZW5naW5lX2lkID0gcS0+c2RtYV9lbmdpbmVfaWQ7Ci0JbS0+c2RtYV9xdWV1ZV9pZCA9IHEtPnNk bWFfcXVldWVfaWQ7Ci0KLQlxLT5pc19hY3RpdmUgPSBmYWxzZTsKLQlpZiAocS0+cXVldWVfc2l6 ZSA+IDAgJiYKLQkJCXEtPnF1ZXVlX2FkZHJlc3MgIT0gMCAmJgotCQkJcS0+cXVldWVfcGVyY2Vu dCA+IDApIHsKLQkJbS0+c2RtYV9ybGNfcmJfY250bCB8PSBTRE1BX1JCX0VOQUJMRTsKLQkJcS0+ aXNfYWN0aXZlID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZXN0 cm95X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsCi0JCQllbnVtIGtmZF9w cmVlbXB0X3R5cGUgdHlwZSwKLQkJCXVuc2lnbmVkIGludCB0aW1lb3V0LCB1aW50MzJfdCBwaXBl X2lkLAotCQkJdWludDMyX3QgcXVldWVfaWQpCi17Ci0JcmV0dXJuIGtmZDJrZ2QtPmhxZF9kZXN0 cm95KG1tLT5kZXYtPmtnZCwgdHlwZSwgdGltZW91dCwKLQkJCQkJcGlwZV9pZCwgcXVldWVfaWQp OwotfQotCi0vKgotICogcHJlZW1wdCB0eXBlIGhlcmUgaXMgaWdub3JlZCBiZWNhdXNlIHRoZXJl IGlzIG9ubHkgb25lIHdheQotICogdG8gcHJlZW1wdCBzZG1hIHF1ZXVlCi0gKi8KLXN0YXRpYyBp bnQgZGVzdHJveV9tcWRfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsCi0J CQkJZW51bSBrZmRfcHJlZW1wdF90eXBlIHR5cGUsCi0JCQkJdW5zaWduZWQgaW50IHRpbWVvdXQs IHVpbnQzMl90IHBpcGVfaWQsCi0JCQkJdWludDMyX3QgcXVldWVfaWQpCi17Ci0JcmV0dXJuIGtm ZDJrZ2QtPmhxZF9zZG1hX2Rlc3Ryb3kobW0tPmRldi0+a2dkLCBtcWQsIHRpbWVvdXQpOwotfQot Ci1zdGF0aWMgYm9vbCBpc19vY2N1cGllZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICpt cWQsCi0JCQl1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAl1aW50MzJfdCBwaXBlX2lkLAotCQkJdWlu dDMyX3QgcXVldWVfaWQpCi17Ci0KLQlyZXR1cm4ga2ZkMmtnZC0+aHFkX2lzX29jY3VwaWVzKG1t LT5kZXYtPmtnZCwgcXVldWVfYWRkcmVzcywKLQkJCQkJcGlwZV9pZCwgcXVldWVfaWQpOwotCi19 Ci0KLXN0YXRpYyBib29sIGlzX29jY3VwaWVkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwg dm9pZCAqbXFkLAotCQkJdWludDY0X3QgcXVldWVfYWRkcmVzcywJdWludDMyX3QgcGlwZV9pZCwK LQkJCXVpbnQzMl90IHF1ZXVlX2lkKQotewotCXJldHVybiBrZmQya2dkLT5ocWRfc2RtYV9pc19v Y2N1cGllZChtbS0+ZGV2LT5rZ2QsIG1xZCk7Ci19Ci0KLS8qCi0gKiBISVEgTVFEIEltcGxlbWVu dGF0aW9uLCBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgSElRIE1RRCBpbXBsZW1lbnRhdGlv bi4KLSAqIFRoZSBISVEgcXVldWUgaW4gS2F2ZXJpIGlzIHVzaW5nIHRoZSBzYW1lIE1RRCBzdHJ1 Y3R1cmUgYXMgYWxsIHRoZSB1c2VyIG1vZGUKLSAqIHF1ZXVlcyBidXQgd2l0aCBkaWZmZXJlbnQg aW5pdGlhbCB2YWx1ZXMuCi0gKi8KLQotc3RhdGljIGludCBpbml0X21xZF9oaXEoc3RydWN0IG1x ZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwKLQkJc3RydWN0IGtmZF9tZW1fb2JqICoqbXFkX21l bV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsCi0JCXN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpx KQotewotCXVpbnQ2NF90IGFkZHI7Ci0Jc3RydWN0IGNpa19tcWQgKm07Ci0JaW50IHJldHZhbDsK LQotCUJVR19PTighbW0gfHwgIXEgfHwgIW1xZCB8fCAhbXFkX21lbV9vYmopOwotCi0JcHJfZGVi dWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5jX18pOwotCi0JcmV0dmFsID0ga2ZkX2d0dF9z YV9hbGxvY2F0ZShtbS0+ZGV2LCBzaXplb2Yoc3RydWN0IGNpa19tcWQpLAotCQkJCQltcWRfbWVt X29iaik7Ci0KLQlpZiAocmV0dmFsICE9IDApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbSA9IChz dHJ1Y3QgY2lrX21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsKLQlhZGRyID0gKCptcWRf bWVtX29iaiktPmdwdV9hZGRyOwotCi0JbWVtc2V0KG0sIDAsIEFMSUdOKHNpemVvZihzdHJ1Y3Qg Y2lrX21xZCksIDI1NikpOwotCi0JbS0+aGVhZGVyID0gMHhDMDMxMDgwMDsKLQltLT5jb21wdXRl X3BpcGVsaW5lc3RhdF9lbmFibGUgPSAxOwotCW0tPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210 X3NlMCA9IDB4RkZGRkZGRkY7Ci0JbS0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UxID0g MHhGRkZGRkZGRjsKLQltLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTIgPSAweEZGRkZG RkZGOwotCW0tPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMyA9IDB4RkZGRkZGRkY7Ci0K LQltLT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSA9IERFRkFVTFRfQ1BfSFFEX1BFUlNJU1RFTlRf U1RBVEUgfAotCQkJCQlQUkVMT0FEX1JFUTsKLQltLT5jcF9ocWRfcXVhbnR1bSA9IFFVQU5UVU1f RU4gfCBRVUFOVFVNX1NDQUxFXzFNUyB8Ci0JCQkJUVVBTlRVTV9EVVJBVElPTigxMCk7Ci0KLQlt LT5jcF9tcWRfY29udHJvbCAgICAgICAgICAgICA9IE1RRF9DT05UUk9MX1BSSVZfU1RBVEVfRU47 Ci0JbS0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyAgICAgICAgPSBsb3dlcl8zMl9iaXRzKGFkZHIpOwot CW0tPmNwX21xZF9iYXNlX2FkZHJfaGkgICAgICAgID0gdXBwZXJfMzJfYml0cyhhZGRyKTsKLQot CW0tPmNwX2hxZF9pYl9jb250cm9sID0gREVGQVVMVF9NSU5fSUJfQVZBSUxfU0laRTsKLQotCS8q Ci0JICogUGlwZSBQcmlvcml0eQotCSAqIElkZW50aWZpZXMgdGhlIHBpcGUgcmVsYXRpdmUgcHJp b3JpdHkgd2hlbiB0aGlzIHF1ZXVlIGlzIGNvbm5lY3RlZAotCSAqIHRvIHRoZSBwaXBlbGluZS4g VGhlIHBpcGUgcHJpb3JpdHkgaXMgYWdhaW5zdCB0aGUgR0ZYIHBpcGUgYW5kIEhQM0QuCi0JICog SW4gS0ZEIHdlIGFyZSB1c2luZyBhIGZpeGVkIHBpcGUgcHJpb3JpdHkgc2V0IHRvIENTX01FRElV TS4KLQkgKiAwID0gQ1NfTE9XICh0eXBpY2FsbHkgYmVsb3cgR0ZYKQotCSAqIDEgPSBDU19NRURJ VU0gKHR5cGljYWxseSBiZXR3ZWVuIEhQM0QgYW5kIEdGWAotCSAqIDIgPSBDU19ISUdIICh0eXBp Y2FsbHkgYWJvdmUgSFAzRCkKLQkgKi8KLQltLT5jcF9ocWRfcGlwZV9wcmlvcml0eSA9IDE7Ci0J bS0+Y3BfaHFkX3F1ZXVlX3ByaW9yaXR5ID0gMTU7Ci0KLQkqbXFkID0gbTsKLQlpZiAoZ2FydF9h ZGRyKQotCQkqZ2FydF9hZGRyID0gYWRkcjsKLQlyZXR2YWwgPSBtbS0+dXBkYXRlX21xZChtbSwg bSwgcSk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHVwZGF0ZV9tcWRfaGlx KHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwKLQkJCQlzdHJ1Y3QgcXVldWVfcHJv cGVydGllcyAqcSkKLXsKLQlzdHJ1Y3QgY2lrX21xZCAqbTsKLQotCUJVR19PTighbW0gfHwgIXEg fHwgIW1xZCk7Ci0KLQlwcl9kZWJ1Zygia2ZkOiBJbiBmdW5jICVzXG4iLCBfX2Z1bmNfXyk7Ci0K LQltID0gZ2V0X21xZChtcWQpOwotCW0tPmNwX2hxZF9wcV9jb250cm9sID0gREVGQVVMVF9SUFRS X0JMT0NLX1NJWkUgfAotCQkJCURFRkFVTFRfTUlOX0FWQUlMX1NJWkUgfAotCQkJCVBSSVZfU1RB VEUgfAotCQkJCUtNRF9RVUVVRTsKLQotCS8qCi0JICogQ2FsY3VsYXRpbmcgcXVldWUgc2l6ZSB3 aGljaCBpcyBsb2cgYmFzZSAyIG9mIGFjdHVhbCBxdWV1ZQotCSAqIHNpemUgLTEgZHdvcmRzCi0J ICovCi0JbS0+Y3BfaHFkX3BxX2NvbnRyb2wgfD0gZmZzKHEtPnF1ZXVlX3NpemUgLyBzaXplb2Yo dW5zaWduZWQgaW50KSkKLQkJCQkJCQkJLSAxIC0gMTsKLQltLT5jcF9ocWRfcHFfYmFzZV9sbyA9 IGxvd2VyXzMyX2JpdHMoKHVpbnQ2NF90KXEtPnF1ZXVlX2FkZHJlc3MgPj4gOCk7Ci0JbS0+Y3Bf aHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKCh1aW50NjRfdClxLT5xdWV1ZV9hZGRyZXNz ID4+IDgpOwotCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvID0gbG93ZXJfMzJfYml0 cygodWludDY0X3QpcS0+cmVhZF9wdHIpOwotCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRy X2hpID0gdXBwZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOwotCW0tPmNwX2hxZF9w cV9kb29yYmVsbF9jb250cm9sID0gRE9PUkJFTExfRU4gfAotCQkJCQlET09SQkVMTF9PRkZTRVQo cS0+ZG9vcmJlbGxfb2ZmKTsKLQotCW0tPmNwX2hxZF92bWlkID0gcS0+dm1pZDsKLQotCW0tPmNw X2hxZF9hY3RpdmUgPSAwOwotCXEtPmlzX2FjdGl2ZSA9IGZhbHNlOwotCWlmIChxLT5xdWV1ZV9z aXplID4gMCAmJgotCQkJcS0+cXVldWVfYWRkcmVzcyAhPSAwICYmCi0JCQlxLT5xdWV1ZV9wZXJj ZW50ID4gMCkgewotCQltLT5jcF9ocWRfYWN0aXZlID0gMTsKLQkJcS0+aXNfYWN0aXZlID0gdHJ1 ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNETUEgTVFEIEltcGxlbWVudGF0aW9u Ci0gKi8KLQotc3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKmdldF9zZG1hX21xZCh2b2lk ICptcWQpCi17Ci0Jc3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKm07Ci0KLQlCVUdfT04o IW1xZCk7Ci0KLQltID0gKHN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzICopbXFkOwotCi0J cmV0dXJuIG07Ci19CiAKIHN0cnVjdCBtcWRfbWFuYWdlciAqbXFkX21hbmFnZXJfaW5pdChlbnVt IEtGRF9NUURfVFlQRSB0eXBlLAogCQkJCQlzdHJ1Y3Qga2ZkX2RldiAqZGV2KQogewotCXN0cnVj dCBtcWRfbWFuYWdlciAqbXFkOwotCi0JQlVHX09OKCFkZXYpOwotCUJVR19PTih0eXBlID49IEtG RF9NUURfVFlQRV9NQVgpOwotCi0JcHJfZGVidWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5j X18pOwotCi0JbXFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1xZF9tYW5hZ2VyKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFtcWQpCi0JCXJldHVybiBOVUxMOwotCi0JbXFkLT5kZXYgPSBkZXY7Ci0K LQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEtGRF9NUURfVFlQRV9DUDoKLQljYXNlIEtGRF9NUURf VFlQRV9DT01QVVRFOgotCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWQ7Ci0JCW1xZC0+dW5pbml0 X21xZCA9IHVuaW5pdF9tcWQ7Ci0JCW1xZC0+bG9hZF9tcWQgPSBsb2FkX21xZDsKLQkJbXFkLT51 cGRhdGVfbXFkID0gdXBkYXRlX21xZDsKLQkJbXFkLT5kZXN0cm95X21xZCA9IGRlc3Ryb3lfbXFk OwotCQltcWQtPmlzX29jY3VwaWVkID0gaXNfb2NjdXBpZWQ7Ci0JCWJyZWFrOwotCWNhc2UgS0ZE X01RRF9UWVBFX0hJUToKLQkJbXFkLT5pbml0X21xZCA9IGluaXRfbXFkX2hpcTsKLQkJbXFkLT51 bmluaXRfbXFkID0gdW5pbml0X21xZDsKLQkJbXFkLT5sb2FkX21xZCA9IGxvYWRfbXFkOwotCQlt cWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX2hpcTsKLQkJbXFkLT5kZXN0cm95X21xZCA9IGRl c3Ryb3lfbXFkOwotCQltcWQtPmlzX29jY3VwaWVkID0gaXNfb2NjdXBpZWQ7Ci0JCWJyZWFrOwot CWNhc2UgS0ZEX01RRF9UWVBFX1NETUE6Ci0JCW1xZC0+aW5pdF9tcWQgPSBpbml0X21xZF9zZG1h OwotCQltcWQtPnVuaW5pdF9tcWQgPSB1bmluaXRfbXFkX3NkbWE7Ci0JCW1xZC0+bG9hZF9tcWQg PSBsb2FkX21xZF9zZG1hOwotCQltcWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX3NkbWE7Ci0J CW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZF9zZG1hOwotCQltcWQtPmlzX29jY3VwaWVk ID0gaXNfb2NjdXBpZWRfc2RtYTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJa2ZyZWUobXFkKTsK LQkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChkZXYtPmRldmljZV9pbmZvLT5hc2ljX2ZhbWlseSkg eworCWNhc2UgQ0hJUF9LQVZFUkk6CisJCXJldHVybiBtcWRfbWFuYWdlcl9pbml0X2Npayh0eXBl LCBkZXYpOworCWNhc2UgQ0hJUF9DQVJSSVpPOgorCQlyZXR1cm4gbXFkX21hbmFnZXJfaW5pdF92 aSh0eXBlLCBkZXYpOwogCX0KIAotCXJldHVybiBtcWQ7CisJcmV0dXJuIE5VTEw7CiB9Ci0KLS8q IFNETUEgcXVldWVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBoZXJlIHdoZW4gdGhlIGNwIHdpbGwg c3VwcG9ydHMgdGhlbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX21xZF9tYW5hZ2VyX2Npay5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21x ZF9tYW5hZ2VyX2Npay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMjhm NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFk X21hbmFnZXJfY2lrLmMKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBB ZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNp bmNsdWRlIDxsaW51eC9wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVk ZSAia2ZkX3ByaXYuaCIKKyNpbmNsdWRlICJrZmRfbXFkX21hbmFnZXIuaCIKKyNpbmNsdWRlICJj aWtfcmVncy5oIgorI2luY2x1ZGUgImNpa19zdHJ1Y3RzLmgiCisKK2lubGluZSB2b2lkIGJ1c3lf d2FpdCh1bnNpZ25lZCBsb25nIG1zKQoreworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBt cykpCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjaWtfbXFkICpn ZXRfbXFkKHZvaWQgKm1xZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjaWtfbXFkICopbXFkOworfQor CitzdGF0aWMgaW50IGluaXRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQs CisJCXN0cnVjdCBrZmRfbWVtX29iaiAqKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRy LAorCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkKK3sKKwl1aW50NjRfdCBhZGRyOworCXN0 cnVjdCBjaWtfbXFkICptOworCWludCByZXR2YWw7CisKKwlCVUdfT04oIW1tIHx8ICFxIHx8ICFt cWQpOworCisJcHJfZGVidWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5jX18pOworCisJcmV0 dmFsID0ga2ZkX2d0dF9zYV9hbGxvY2F0ZShtbS0+ZGV2LCBzaXplb2Yoc3RydWN0IGNpa19tcWQp LAorCQkJCQltcWRfbWVtX29iaik7CisKKwlpZiAocmV0dmFsICE9IDApCisJCXJldHVybiAtRU5P TUVNOworCisJbSA9IChzdHJ1Y3QgY2lrX21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsK KwlhZGRyID0gKCptcWRfbWVtX29iaiktPmdwdV9hZGRyOworCisJbWVtc2V0KG0sIDAsIEFMSUdO KHNpemVvZihzdHJ1Y3QgY2lrX21xZCksIDI1NikpOworCisJbS0+aGVhZGVyID0gMHhDMDMxMDgw MDsKKwltLT5jb21wdXRlX3BpcGVsaW5lc3RhdF9lbmFibGUgPSAxOworCW0tPmNvbXB1dGVfc3Rh dGljX3RocmVhZF9tZ210X3NlMCA9IDB4RkZGRkZGRkY7CisJbS0+Y29tcHV0ZV9zdGF0aWNfdGhy ZWFkX21nbXRfc2UxID0gMHhGRkZGRkZGRjsKKwltLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdt dF9zZTIgPSAweEZGRkZGRkZGOworCW0tPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMyA9 IDB4RkZGRkZGRkY7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0byB1c2UgdGhlIGxhc3QgcXVldWUg c3RhdGUgc2F2ZWQgb24gbXFkIHdoZW4gdGhlIGNwCisJICogcmVhc3NpZ25zIHRoZSBxdWV1ZSwg c28gd2hlbiBxdWV1ZSBpcyBzd2l0Y2hlZCBvbi9vZmYgKGUuZyBvdmVyCisJICogc3Vic2NyaXB0 aW9uIG9yIHF1YW50dW0gdGltZW91dCkgdGhlIGNvbnRleHQgd2lsbCBiZSBjb25zaXN0ZW50CisJ ICovCisJbS0+Y3BfaHFkX3BlcnNpc3RlbnRfc3RhdGUgPQorCQkJCURFRkFVTFRfQ1BfSFFEX1BF UlNJU1RFTlRfU1RBVEUgfCBQUkVMT0FEX1JFUTsKKworCW0tPmNwX21xZF9jb250cm9sICAgICAg ICAgICAgID0gTVFEX0NPTlRST0xfUFJJVl9TVEFURV9FTjsKKwltLT5jcF9tcWRfYmFzZV9hZGRy X2xvICAgICAgICA9IGxvd2VyXzMyX2JpdHMoYWRkcik7CisJbS0+Y3BfbXFkX2Jhc2VfYWRkcl9o aSAgICAgICAgPSB1cHBlcl8zMl9iaXRzKGFkZHIpOworCisJbS0+Y3BfaHFkX2liX2NvbnRyb2wg PSBERUZBVUxUX01JTl9JQl9BVkFJTF9TSVpFIHwgSUJfQVRDX0VOOworCS8qIEFsdGhvdWdoIFdp bktGRCB3cml0ZXMgdGhpcywgSSBzdXNwZWN0IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5ICov CisJbS0+Y3BfaHFkX2liX2NvbnRyb2wgPSBJQl9BVENfRU4gfCBERUZBVUxUX01JTl9JQl9BVkFJ TF9TSVpFOworCisJbS0+Y3BfaHFkX3F1YW50dW0gPSBRVUFOVFVNX0VOIHwgUVVBTlRVTV9TQ0FM RV8xTVMgfAorCQkJCVFVQU5UVU1fRFVSQVRJT04oMTApOworCisJLyoKKwkgKiBQaXBlIFByaW9y aXR5CisJICogSWRlbnRpZmllcyB0aGUgcGlwZSByZWxhdGl2ZSBwcmlvcml0eSB3aGVuIHRoaXMg cXVldWUgaXMgY29ubmVjdGVkCisJICogdG8gdGhlIHBpcGVsaW5lLiBUaGUgcGlwZSBwcmlvcml0 eSBpcyBhZ2FpbnN0IHRoZSBHRlggcGlwZSBhbmQgSFAzRC4KKwkgKiBJbiBLRkQgd2UgYXJlIHVz aW5nIGEgZml4ZWQgcGlwZSBwcmlvcml0eSBzZXQgdG8gQ1NfTUVESVVNLgorCSAqIDAgPSBDU19M T1cgKHR5cGljYWxseSBiZWxvdyBHRlgpCisJICogMSA9IENTX01FRElVTSAodHlwaWNhbGx5IGJl dHdlZW4gSFAzRCBhbmQgR0ZYCisJICogMiA9IENTX0hJR0ggKHR5cGljYWxseSBhYm92ZSBIUDNE KQorCSAqLworCW0tPmNwX2hxZF9waXBlX3ByaW9yaXR5ID0gMTsKKwltLT5jcF9ocWRfcXVldWVf cHJpb3JpdHkgPSAxNTsKKworCSptcWQgPSBtOworCWlmIChnYXJ0X2FkZHIgIT0gTlVMTCkKKwkJ KmdhcnRfYWRkciA9IGFkZHI7CisJcmV0dmFsID0gbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOwor CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpbml0X21xZF9zZG1hKHN0cnVjdCBt cWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsCisJCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKiptcWRf bWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwKKwkJCXN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVz ICpxKQoreworCWludCByZXR2YWw7CisJc3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKm07 CisKKwlCVUdfT04oIW1tIHx8ICFtcWQgfHwgIW1xZF9tZW1fb2JqKTsKKworCXJldHZhbCA9IGtm ZF9ndHRfc2FfYWxsb2NhdGUobW0tPmRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBjaWtfc2RtYV9y bGNfcmVnaXN0ZXJzKSwKKwkJCQkJbXFkX21lbV9vYmopOworCisJaWYgKHJldHZhbCAhPSAwKQor CQlyZXR1cm4gLUVOT01FTTsKKworCW0gPSAoc3RydWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMg KikgKCptcWRfbWVtX29iaiktPmNwdV9wdHI7CisKKwltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVj dCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzKSk7CisKKwkqbXFkID0gbTsKKwlpZiAoZ2FydF9hZGRy ICE9IE5VTEwpCisJCSpnYXJ0X2FkZHIgPSAoKm1xZF9tZW1fb2JqKS0+Z3B1X2FkZHI7CisKKwly ZXR2YWwgPSBtbS0+dXBkYXRlX21xZChtbSwgbSwgcSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQor CitzdGF0aWMgdm9pZCB1bmluaXRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1x ZCwKKwkJCXN0cnVjdCBrZmRfbWVtX29iaiAqbXFkX21lbV9vYmopCit7CisJQlVHX09OKCFtbSB8 fCAhbXFkKTsKKwlrZmRfZ3R0X3NhX2ZyZWUobW0tPmRldiwgbXFkX21lbV9vYmopOworfQorCitz dGF0aWMgdm9pZCB1bmluaXRfbXFkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAq bXFkLAorCQkJCXN0cnVjdCBrZmRfbWVtX29iaiAqbXFkX21lbV9vYmopCit7CisJQlVHX09OKCFt bSB8fCAhbXFkKTsKKwlrZmRfZ3R0X3NhX2ZyZWUobW0tPmRldiwgbXFkX21lbV9vYmopOworfQor CitzdGF0aWMgaW50IGxvYWRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwg dWludDMyX3QgcGlwZV9pZCwKKwkJCXVpbnQzMl90IHF1ZXVlX2lkLCB1aW50MzJfdCBfX3VzZXIg KndwdHIpCit7CisJcmV0dXJuIGtmZDJrZ2QtPmhxZF9sb2FkKG1tLT5kZXYtPmtnZCwgbXFkLCBw aXBlX2lkLCBxdWV1ZV9pZCwgd3B0cik7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9tcWRfc2RtYShz dHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsCisJCQl1aW50MzJfdCBwaXBlX2lkLCB1 aW50MzJfdCBxdWV1ZV9pZCwKKwkJCXVpbnQzMl90IF9fdXNlciAqd3B0cikKK3sKKwlyZXR1cm4g a2ZkMmtnZC0+aHFkX3NkbWFfbG9hZChtbS0+ZGV2LT5rZ2QsIG1xZCk7Cit9CisKK3N0YXRpYyBp bnQgdXBkYXRlX21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsCisJCQlzdHJ1 Y3QgcXVldWVfcHJvcGVydGllcyAqcSkKK3sKKwlzdHJ1Y3QgY2lrX21xZCAqbTsKKworCUJVR19P TighbW0gfHwgIXEgfHwgIW1xZCk7CisKKwlwcl9kZWJ1Zygia2ZkOiBJbiBmdW5jICVzXG4iLCBf X2Z1bmNfXyk7CisKKwltID0gZ2V0X21xZChtcWQpOworCW0tPmNwX2hxZF9wcV9jb250cm9sID0g REVGQVVMVF9SUFRSX0JMT0NLX1NJWkUgfAorCQkJCURFRkFVTFRfTUlOX0FWQUlMX1NJWkUgfCBQ UV9BVENfRU47CisKKwkvKgorCSAqIENhbGN1bGF0aW5nIHF1ZXVlIHNpemUgd2hpY2ggaXMgbG9n IGJhc2UgMiBvZiBhY3R1YWwgcXVldWUgc2l6ZSAtMQorCSAqIGR3b3JkcyBhbmQgYW5vdGhlciAt MSBmb3IgZmZzCisJICovCisJbS0+Y3BfaHFkX3BxX2NvbnRyb2wgfD0gZmZzKHEtPnF1ZXVlX3Np emUgLyBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJCQkJCQkJLSAxIC0gMTsKKwltLT5jcF9ocWRf cHFfYmFzZV9sbyA9IGxvd2VyXzMyX2JpdHMoKHVpbnQ2NF90KXEtPnF1ZXVlX2FkZHJlc3MgPj4g OCk7CisJbS0+Y3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKCh1aW50NjRfdClxLT5x dWV1ZV9hZGRyZXNzID4+IDgpOworCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvID0g bG93ZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOworCW0tPmNwX2hxZF9wcV9ycHRy X3JlcG9ydF9hZGRyX2hpID0gdXBwZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOwor CW0tPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gRE9PUkJFTExfRU4gfAorCQkJCQlET09S QkVMTF9PRkZTRVQocS0+ZG9vcmJlbGxfb2ZmKTsKKworCW0tPmNwX2hxZF92bWlkID0gcS0+dm1p ZDsKKworCWlmIChxLT5mb3JtYXQgPT0gS0ZEX1FVRVVFX0ZPUk1BVF9BUUwpIHsKKwkJbS0+Y3Bf aHFkX2lxX3JwdHIgPSBBUUxfRU5BQkxFOworCQltLT5jcF9ocWRfcHFfY29udHJvbCB8PSBOT19V UERBVEVfUlBUUjsKKwl9CisKKwltLT5jcF9ocWRfYWN0aXZlID0gMDsKKwlxLT5pc19hY3RpdmUg PSBmYWxzZTsKKwlpZiAocS0+cXVldWVfc2l6ZSA+IDAgJiYKKwkJCXEtPnF1ZXVlX2FkZHJlc3Mg IT0gMCAmJgorCQkJcS0+cXVldWVfcGVyY2VudCA+IDApIHsKKwkJbS0+Y3BfaHFkX2FjdGl2ZSA9 IDE7CisJCXEtPmlzX2FjdGl2ZSA9IHRydWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgdXBkYXRlX21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwK KwkJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkKK3sKKwlzdHJ1Y3QgY2lrX3NkbWFfcmxj X3JlZ2lzdGVycyAqbTsKKworCUJVR19PTighbW0gfHwgIW1xZCB8fCAhcSk7CisKKwltID0gZ2V0 X3NkbWFfbXFkKG1xZCk7CisJbS0+c2RtYV9ybGNfcmJfY250bCA9CisJCVNETUFfUkJfU0laRSgo ZmZzKHEtPnF1ZXVlX3NpemUgLyBzaXplb2YodW5zaWduZWQgaW50KSkpKSB8CisJCVNETUFfUkJf Vk1JRChxLT52bWlkKSB8CisJCVNETUFfUlBUUl9XUklURUJBQ0tfRU5BQkxFIHwKKwkJU0RNQV9S UFRSX1dSSVRFQkFDS19USU1FUig2KTsKKworCW0tPnNkbWFfcmxjX3JiX2Jhc2UgPSBsb3dlcl8z Ml9iaXRzKHEtPnF1ZXVlX2FkZHJlc3MgPj4gOCk7CisJbS0+c2RtYV9ybGNfcmJfYmFzZV9oaSA9 IHVwcGVyXzMyX2JpdHMocS0+cXVldWVfYWRkcmVzcyA+PiA4KTsKKwltLT5zZG1hX3JsY19yYl9y cHRyX2FkZHJfbG8gPSBsb3dlcl8zMl9iaXRzKCh1aW50NjRfdClxLT5yZWFkX3B0cik7CisJbS0+ c2RtYV9ybGNfcmJfcnB0cl9hZGRyX2hpID0gdXBwZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVh ZF9wdHIpOworCW0tPnNkbWFfcmxjX2Rvb3JiZWxsID0gU0RNQV9PRkZTRVQocS0+ZG9vcmJlbGxf b2ZmKSB8IFNETUFfREJfRU5BQkxFOworCW0tPnNkbWFfcmxjX3ZpcnR1YWxfYWRkciA9IHEtPnNk bWFfdm1fYWRkcjsKKworCW0tPnNkbWFfZW5naW5lX2lkID0gcS0+c2RtYV9lbmdpbmVfaWQ7CisJ bS0+c2RtYV9xdWV1ZV9pZCA9IHEtPnNkbWFfcXVldWVfaWQ7CisKKwlxLT5pc19hY3RpdmUgPSBm YWxzZTsKKwlpZiAocS0+cXVldWVfc2l6ZSA+IDAgJiYKKwkJCXEtPnF1ZXVlX2FkZHJlc3MgIT0g MCAmJgorCQkJcS0+cXVldWVfcGVyY2VudCA+IDApIHsKKwkJbS0+c2RtYV9ybGNfcmJfY250bCB8 PSBTRE1BX1JCX0VOQUJMRTsKKwkJcS0+aXNfYWN0aXZlID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBkZXN0cm95X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2 b2lkICptcWQsCisJCQllbnVtIGtmZF9wcmVlbXB0X3R5cGUgdHlwZSwKKwkJCXVuc2lnbmVkIGlu dCB0aW1lb3V0LCB1aW50MzJfdCBwaXBlX2lkLAorCQkJdWludDMyX3QgcXVldWVfaWQpCit7CisJ cmV0dXJuIGtmZDJrZ2QtPmhxZF9kZXN0cm95KG1tLT5kZXYtPmtnZCwgdHlwZSwgdGltZW91dCwK KwkJCQkJcGlwZV9pZCwgcXVldWVfaWQpOworfQorCisvKgorICogcHJlZW1wdCB0eXBlIGhlcmUg aXMgaWdub3JlZCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIHdheQorICogdG8gcHJlZW1wdCBz ZG1hIHF1ZXVlCisgKi8KK3N0YXRpYyBpbnQgZGVzdHJveV9tcWRfc2RtYShzdHJ1Y3QgbXFkX21h bmFnZXIgKm1tLCB2b2lkICptcWQsCisJCQkJZW51bSBrZmRfcHJlZW1wdF90eXBlIHR5cGUsCisJ CQkJdW5zaWduZWQgaW50IHRpbWVvdXQsIHVpbnQzMl90IHBpcGVfaWQsCisJCQkJdWludDMyX3Qg cXVldWVfaWQpCit7CisJcmV0dXJuIGtmZDJrZ2QtPmhxZF9zZG1hX2Rlc3Ryb3kobW0tPmRldi0+ a2dkLCBtcWQsIHRpbWVvdXQpOworfQorCitzdGF0aWMgYm9vbCBpc19vY2N1cGllZChzdHJ1Y3Qg bXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsCisJCQl1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAl1 aW50MzJfdCBwaXBlX2lkLAorCQkJdWludDMyX3QgcXVldWVfaWQpCit7CisKKwlyZXR1cm4ga2Zk MmtnZC0+aHFkX2lzX29jY3VwaWVzKG1tLT5kZXYtPmtnZCwgcXVldWVfYWRkcmVzcywKKwkJCQkJ cGlwZV9pZCwgcXVldWVfaWQpOworCit9CisKK3N0YXRpYyBib29sIGlzX29jY3VwaWVkX3NkbWEo c3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLAorCQkJdWludDY0X3QgcXVldWVfYWRk cmVzcywJdWludDMyX3QgcGlwZV9pZCwKKwkJCXVpbnQzMl90IHF1ZXVlX2lkKQoreworCXJldHVy biBrZmQya2dkLT5ocWRfc2RtYV9pc19vY2N1cGllZChtbS0+ZGV2LT5rZ2QsIG1xZCk7Cit9CisK Ky8qCisgKiBISVEgTVFEIEltcGxlbWVudGF0aW9uLCBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBm b3IgSElRIE1RRCBpbXBsZW1lbnRhdGlvbi4KKyAqIFRoZSBISVEgcXVldWUgaW4gS2F2ZXJpIGlz IHVzaW5nIHRoZSBzYW1lIE1RRCBzdHJ1Y3R1cmUgYXMgYWxsIHRoZSB1c2VyIG1vZGUKKyAqIHF1 ZXVlcyBidXQgd2l0aCBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZXMuCisgKi8KKworc3RhdGljIGlu dCBpbml0X21xZF9oaXEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwKKwkJc3Ry dWN0IGtmZF9tZW1fb2JqICoqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsCisJCXN0 cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQoreworCXVpbnQ2NF90IGFkZHI7CisJc3RydWN0IGNp a19tcWQgKm07CisJaW50IHJldHZhbDsKKworCUJVR19PTighbW0gfHwgIXEgfHwgIW1xZCB8fCAh bXFkX21lbV9vYmopOworCisJcHJfZGVidWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5jX18p OworCisJcmV0dmFsID0ga2ZkX2d0dF9zYV9hbGxvY2F0ZShtbS0+ZGV2LCBzaXplb2Yoc3RydWN0 IGNpa19tcWQpLAorCQkJCQltcWRfbWVtX29iaik7CisKKwlpZiAocmV0dmFsICE9IDApCisJCXJl dHVybiAtRU5PTUVNOworCisJbSA9IChzdHJ1Y3QgY2lrX21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+ Y3B1X3B0cjsKKwlhZGRyID0gKCptcWRfbWVtX29iaiktPmdwdV9hZGRyOworCisJbWVtc2V0KG0s IDAsIEFMSUdOKHNpemVvZihzdHJ1Y3QgY2lrX21xZCksIDI1NikpOworCisJbS0+aGVhZGVyID0g MHhDMDMxMDgwMDsKKwltLT5jb21wdXRlX3BpcGVsaW5lc3RhdF9lbmFibGUgPSAxOworCW0tPmNv bXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMCA9IDB4RkZGRkZGRkY7CisJbS0+Y29tcHV0ZV9z dGF0aWNfdGhyZWFkX21nbXRfc2UxID0gMHhGRkZGRkZGRjsKKwltLT5jb21wdXRlX3N0YXRpY190 aHJlYWRfbWdtdF9zZTIgPSAweEZGRkZGRkZGOworCW0tPmNvbXB1dGVfc3RhdGljX3RocmVhZF9t Z210X3NlMyA9IDB4RkZGRkZGRkY7CisKKwltLT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSA9IERF RkFVTFRfQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUgfAorCQkJCQlQUkVMT0FEX1JFUTsKKwltLT5j cF9ocWRfcXVhbnR1bSA9IFFVQU5UVU1fRU4gfCBRVUFOVFVNX1NDQUxFXzFNUyB8CisJCQkJUVVB TlRVTV9EVVJBVElPTigxMCk7CisKKwltLT5jcF9tcWRfY29udHJvbCAgICAgICAgICAgICA9IE1R RF9DT05UUk9MX1BSSVZfU1RBVEVfRU47CisJbS0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyAgICAgICAg PSBsb3dlcl8zMl9iaXRzKGFkZHIpOworCW0tPmNwX21xZF9iYXNlX2FkZHJfaGkgICAgICAgID0g dXBwZXJfMzJfYml0cyhhZGRyKTsKKworCW0tPmNwX2hxZF9pYl9jb250cm9sID0gREVGQVVMVF9N SU5fSUJfQVZBSUxfU0laRTsKKworCS8qCisJICogUGlwZSBQcmlvcml0eQorCSAqIElkZW50aWZp ZXMgdGhlIHBpcGUgcmVsYXRpdmUgcHJpb3JpdHkgd2hlbiB0aGlzIHF1ZXVlIGlzIGNvbm5lY3Rl ZAorCSAqIHRvIHRoZSBwaXBlbGluZS4gVGhlIHBpcGUgcHJpb3JpdHkgaXMgYWdhaW5zdCB0aGUg R0ZYIHBpcGUgYW5kIEhQM0QuCisJICogSW4gS0ZEIHdlIGFyZSB1c2luZyBhIGZpeGVkIHBpcGUg cHJpb3JpdHkgc2V0IHRvIENTX01FRElVTS4KKwkgKiAwID0gQ1NfTE9XICh0eXBpY2FsbHkgYmVs b3cgR0ZYKQorCSAqIDEgPSBDU19NRURJVU0gKHR5cGljYWxseSBiZXR3ZWVuIEhQM0QgYW5kIEdG WAorCSAqIDIgPSBDU19ISUdIICh0eXBpY2FsbHkgYWJvdmUgSFAzRCkKKwkgKi8KKwltLT5jcF9o cWRfcGlwZV9wcmlvcml0eSA9IDE7CisJbS0+Y3BfaHFkX3F1ZXVlX3ByaW9yaXR5ID0gMTU7CisK KwkqbXFkID0gbTsKKwlpZiAoZ2FydF9hZGRyKQorCQkqZ2FydF9hZGRyID0gYWRkcjsKKwlyZXR2 YWwgPSBtbS0+dXBkYXRlX21xZChtbSwgbSwgcSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitz dGF0aWMgaW50IHVwZGF0ZV9tcWRfaGlxKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1x ZCwKKwkJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkKK3sKKwlzdHJ1Y3QgY2lrX21xZCAq bTsKKworCUJVR19PTighbW0gfHwgIXEgfHwgIW1xZCk7CisKKwlwcl9kZWJ1Zygia2ZkOiBJbiBm dW5jICVzXG4iLCBfX2Z1bmNfXyk7CisKKwltID0gZ2V0X21xZChtcWQpOworCW0tPmNwX2hxZF9w cV9jb250cm9sID0gREVGQVVMVF9SUFRSX0JMT0NLX1NJWkUgfAorCQkJCURFRkFVTFRfTUlOX0FW QUlMX1NJWkUgfAorCQkJCVBSSVZfU1RBVEUgfAorCQkJCUtNRF9RVUVVRTsKKworCS8qCisJICog Q2FsY3VsYXRpbmcgcXVldWUgc2l6ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIGFjdHVhbCBxdWV1 ZQorCSAqIHNpemUgLTEgZHdvcmRzCisJICovCisJbS0+Y3BfaHFkX3BxX2NvbnRyb2wgfD0gZmZz KHEtPnF1ZXVlX3NpemUgLyBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJCQkJCQkJLSAxIC0gMTsK KwltLT5jcF9ocWRfcHFfYmFzZV9sbyA9IGxvd2VyXzMyX2JpdHMoKHVpbnQ2NF90KXEtPnF1ZXVl X2FkZHJlc3MgPj4gOCk7CisJbS0+Y3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKCh1 aW50NjRfdClxLT5xdWV1ZV9hZGRyZXNzID4+IDgpOworCW0tPmNwX2hxZF9wcV9ycHRyX3JlcG9y dF9hZGRyX2xvID0gbG93ZXJfMzJfYml0cygodWludDY0X3QpcS0+cmVhZF9wdHIpOworCW0tPmNw X2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpID0gdXBwZXJfMzJfYml0cygodWludDY0X3QpcS0+ cmVhZF9wdHIpOworCW0tPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gRE9PUkJFTExfRU4g fAorCQkJCQlET09SQkVMTF9PRkZTRVQocS0+ZG9vcmJlbGxfb2ZmKTsKKworCW0tPmNwX2hxZF92 bWlkID0gcS0+dm1pZDsKKworCW0tPmNwX2hxZF9hY3RpdmUgPSAwOworCXEtPmlzX2FjdGl2ZSA9 IGZhbHNlOworCWlmIChxLT5xdWV1ZV9zaXplID4gMCAmJgorCQkJcS0+cXVldWVfYWRkcmVzcyAh PSAwICYmCisJCQlxLT5xdWV1ZV9wZXJjZW50ID4gMCkgeworCQltLT5jcF9ocWRfYWN0aXZlID0g MTsKKwkJcS0+aXNfYWN0aXZlID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0 IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKmdldF9zZG1hX21xZCh2b2lkICptcWQpCit7CisJc3Ry dWN0IGNpa19zZG1hX3JsY19yZWdpc3RlcnMgKm07CisKKwlCVUdfT04oIW1xZCk7CisKKwltID0g KHN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzICopbXFkOworCisJcmV0dXJuIG07Cit9CisK K3N0cnVjdCBtcWRfbWFuYWdlciAqbXFkX21hbmFnZXJfaW5pdF9jaWsoZW51bSBLRkRfTVFEX1RZ UEUgdHlwZSwKKwkJc3RydWN0IGtmZF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbXFkX21hbmFnZXIg Km1xZDsKKworCUJVR19PTighZGV2KTsKKwlCVUdfT04odHlwZSA+PSBLRkRfTVFEX1RZUEVfTUFY KTsKKworCXByX2RlYnVnKCJrZmQ6IEluIGZ1bmMgJXNcbiIsIF9fZnVuY19fKTsKKworCW1xZCA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcWRfbWFuYWdlciksIEdGUF9LRVJORUwpOworCWlmICgh bXFkKQorCQlyZXR1cm4gTlVMTDsKKworCW1xZC0+ZGV2ID0gZGV2OworCisJc3dpdGNoICh0eXBl KSB7CisJY2FzZSBLRkRfTVFEX1RZUEVfQ1A6CisJY2FzZSBLRkRfTVFEX1RZUEVfQ09NUFVURToK KwkJbXFkLT5pbml0X21xZCA9IGluaXRfbXFkOworCQltcWQtPnVuaW5pdF9tcWQgPSB1bmluaXRf bXFkOworCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWQ7CisJCW1xZC0+dXBkYXRlX21xZCA9IHVw ZGF0ZV9tcWQ7CisJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsKKwkJbXFkLT5pc19v Y2N1cGllZCA9IGlzX29jY3VwaWVkOworCQlicmVhazsKKwljYXNlIEtGRF9NUURfVFlQRV9ISVE6 CisJCW1xZC0+aW5pdF9tcWQgPSBpbml0X21xZF9oaXE7CisJCW1xZC0+dW5pbml0X21xZCA9IHVu aW5pdF9tcWQ7CisJCW1xZC0+bG9hZF9tcWQgPSBsb2FkX21xZDsKKwkJbXFkLT51cGRhdGVfbXFk ID0gdXBkYXRlX21xZF9oaXE7CisJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsKKwkJ bXFkLT5pc19vY2N1cGllZCA9IGlzX29jY3VwaWVkOworCQlicmVhazsKKwljYXNlIEtGRF9NUURf VFlQRV9TRE1BOgorCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWRfc2RtYTsKKwkJbXFkLT51bmlu aXRfbXFkID0gdW5pbml0X21xZF9zZG1hOworCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWRfc2Rt YTsKKwkJbXFkLT51cGRhdGVfbXFkID0gdXBkYXRlX21xZF9zZG1hOworCQltcWQtPmRlc3Ryb3lf bXFkID0gZGVzdHJveV9tcWRfc2RtYTsKKwkJbXFkLT5pc19vY2N1cGllZCA9IGlzX29jY3VwaWVk X3NkbWE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKG1xZCk7CisJCXJldHVybiBOVUxM OworCX0KKworCXJldHVybiBtcWQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl92aS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRr ZmQva2ZkX21xZF9tYW5hZ2VyX3ZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYjNhN2UzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2Zk L2tmZF9tcWRfbWFuYWdlcl92aS5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KKyNpbmNsdWRlICJrZmRfcHJpdi5oIgorI2lu Y2x1ZGUgImtmZF9tcWRfbWFuYWdlci5oIgorCitzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZF9tYW5h Z2VyX2luaXRfdmkoZW51bSBLRkRfTVFEX1RZUEUgdHlwZSwKKwkJCQkJc3RydWN0IGtmZF9kZXYg KmRldikKK3sKKwlwcl93YXJuKCJhbWRrZmQ6IFZJIE1RRCBpcyBub3QgY3VycmVudGx5IHN1cHBv cnRlZFxuIik7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9rZmRfcHJpdi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3By aXYuaAppbmRleCA4NzJhMWRhLi5iZmNmNDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9rZmRfcHJpdi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tm ZF9wcml2LmgKQEAgLTU3Myw2ICs1NzMsMTAgQEAgdm9pZCBwcmludF9xdWV1ZShzdHJ1Y3QgcXVl dWUgKnEpOwogCiBzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZF9tYW5hZ2VyX2luaXQoZW51bSBLRkRf TVFEX1RZUEUgdHlwZSwKIAkJCQkJc3RydWN0IGtmZF9kZXYgKmRldik7CitzdHJ1Y3QgbXFkX21h bmFnZXIgKm1xZF9tYW5hZ2VyX2luaXRfY2lrKGVudW0gS0ZEX01RRF9UWVBFIHR5cGUsCisJCXN0 cnVjdCBrZmRfZGV2ICpkZXYpOworc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9pbml0 X3ZpKGVudW0gS0ZEX01RRF9UWVBFIHR5cGUsCisJCXN0cnVjdCBrZmRfZGV2ICpkZXYpOwogc3Ry dWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkZXZpY2VfcXVldWVfbWFuYWdlcl9pbml0KHN0cnVj dCBrZmRfZGV2ICpkZXYpOwogdm9pZCBkZXZpY2VfcXVldWVfbWFuYWdlcl91bmluaXQoc3RydWN0 IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0pOwogc3RydWN0IGtlcm5lbF9xdWV1ZSAqa2VybmVs X3F1ZXVlX2luaXQoc3RydWN0IGtmZF9kZXYgKmRldiwKLS0gCjEuOS4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=