From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 09/32] drm/i915: Pull the GEM powermangement coupling into its own file Date: Wed, 17 Apr 2019 08:56:34 +0100 Message-ID: <20190417075657.19456-9-chris@chris-wilson.co.uk> References: <20190417075657.19456-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id A688E6E026 for ; Wed, 17 Apr 2019 07:57:19 +0000 (UTC) In-Reply-To: <20190417075657.19456-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U3BsaXQgb3V0IHRoZSBwb3dlcm1hbmFnZW1lbnQgcG9ydGlvbiAoR1Qgd2FrZXJlZiwgc3VzcGVu ZC9yZXN1bWUpIG9mCkdFTSBmcm9tIGk5MTVfZ2VtLmMgaW50byBpdHMgb3duIGZpbGUuCgpTaWdu ZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KUmV2aWV3 ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0ICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAxMiArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgMzYzICstLS0tLS0tLS0tLS0t LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wbS5jICAgICAgICAgICAgfCAzNjUg KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wbS5oICAg ICAgICAgICAgfCAgMjggKysKIC4uLi9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2Nv bnRleHQuYyB8ICAgMiArLQogLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fb2Jq ZWN0LmMgIHwgICA4ICstCiAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZp Y2UuYyAgfCAgMTAgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDQxOCBpbnNlcnRpb25zKCspLCAzNzYg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3BtLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDIzM2JhZDVlMzYxZi4uODU4NjQyYzdi YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtOTcsNiArOTcsNyBAQCBpOTE1LXkgKz0gXAog CSAgaTkxNV9nZW1faW50ZXJuYWwubyBcCiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX29i amVjdC5vIFwKKwkgIGk5MTVfZ2VtX3BtLm8gXAogCSAgaTkxNV9nZW1fcmVuZGVyX3N0YXRlLm8g XAogCSAgaTkxNV9nZW1fc2hyaW5rZXIubyBcCiAJICBpOTE1X2dlbV9zdG9sZW4ubyBcCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0CmluZGV4IGU2YjNlNzU4ODg2MC4u NzAyZTNhN2FkZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5o ZWFkZXItdGVzdAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVz dApAQCAtNSw2ICs1LDcgQEAKIGhlYWRlcl90ZXN0IDo9IFwKIAlpOTE1X2FjdGl2ZV90eXBlcy5o IFwKIAlpOTE1X2dlbV9jb250ZXh0X3R5cGVzLmggXAorCWk5MTVfZ2VtX3BtLmggXAogCWk5MTVf cHJpb2xpc3RfdHlwZXMuaCBcCiAJaTkxNV9zY2hlZHVsZXJfdHlwZXMuaCBcCiAJaTkxNV90aW1l bGluZV90eXBlcy5oIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggM2YwMzk3 NThiMTUyLi44ZGNiYTc4ZmI0M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBA IC0zOTQxLDggKzM5NDEsOCBAQCBpOTE1X2Ryb3BfY2FjaGVzX3NldCh2b2lkICpkYXRhLCB1NjQg dmFsKQogCWlmICh2YWwgJiBEUk9QX0lETEUpIHsKIAkJZG8gewogCQkJaWYgKFJFQURfT05DRShp OTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpKQotCQkJCWZsdXNoX2RlbGF5ZWRfd29yaygmaTkxNS0+ Z3QucmV0aXJlX3dvcmspOwotCQkJZHJhaW5fZGVsYXllZF93b3JrKCZpOTE1LT5ndC5pZGxlX3dv cmspOworCQkJCWZsdXNoX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLnJldGlyZV93b3JrKTsKKwkJ CWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLmlkbGVfd29yayk7CiAJCX0gd2hpbGUgKFJF QURfT05DRShpOTE1LT5ndC5hd2FrZSkpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5k ZXggNjJhN2U5MWFjZDdmLi5jYmFlOWJlMDUyZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApA QCAtMjAyMCw2ICsyMDIwLDEyIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJICovCiAJ CWludGVsX3dha2VyZWZfdCBhd2FrZTsKIAorCQlrdGltZV90IGxhc3RfaW5pdF90aW1lOworCisJ CXN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaDsKKwl9IGd0OworCisJc3RydWN0IHsKIAkJLyoqCiAJ CSAqIFdlIGxlYXZlIHRoZSB1c2VyIElSUSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZSwKIAkJICog YnV0IHRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0cyB3aWxsIGZpbmlzaCBhbmQgbmV2ZXIKQEAgLTIw MzcsMTEgKzIwNDMsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCSAqIG9mZiB0aGUg aWRsZV93b3JrLgogCQkgKi8KIAkJc3RydWN0IGRlbGF5ZWRfd29yayBpZGxlX3dvcms7Ci0KLQkJ a3RpbWVfdCBsYXN0X2luaXRfdGltZTsKLQotCQlzdHJ1Y3QgaTkxNV92bWEgKnNjcmF0Y2g7Ci0J fSBndDsKKwl9IGdlbTsKIAogCS8qIEZvciBpOTQ1Z20gdmJsYW5rIGlycSB2cy4gQzMgd29ya2Fy b3VuZCAqLwogCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA5NTU0OTYwOTc3 YTMuLjc0Yjk5MTI2ODMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00Niw3ICs0Niw3 IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgi CiAjaW5jbHVkZSAiaTkxNV9nZW1mcy5oIgotI2luY2x1ZGUgImk5MTVfZ2xvYmFscy5oIgorI2lu Y2x1ZGUgImk5MTVfZ2VtX3BtLmgiCiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1ZGUg Imk5MTVfdmdwdS5oIgogCkBAIC0xMDMsMTA1ICsxMDMsNiBAQCBzdGF0aWMgdm9pZCBpOTE1X2dl bV9pbmZvX3JlbW92ZV9vYmooc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXNw aW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0ub2JqZWN0X3N0YXRfbG9jayk7CiB9CiAKLXN0YXRpYyB2 b2lkIF9faTkxNV9nZW1fcGFyayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQlp bnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCUdFTV9UUkFDRSgiXG4iKTsKLQotCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCUdFTV9CVUdfT04oaTkxNS0+ Z3QuYWN0aXZlX3JlcXVlc3RzKTsKLQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZpOTE1LT5ndC5h Y3RpdmVfcmluZ3MpKTsKLQotCWlmICghaTkxNS0+Z3QuYXdha2UpCi0JCXJldHVybjsKLQotCS8q Ci0JICogQmUgcGFyYW5vaWQgYW5kIGZsdXNoIGEgY29uY3VycmVudCBpbnRlcnJ1cHQgdG8gbWFr ZSBzdXJlCi0JICogd2UgZG9uJ3QgcmVhY3RpdmF0ZSBhbnkgaXJxIHRhc2tsZXRzIGFmdGVyIHBh cmtpbmcuCi0JICoKLQkgKiBGSVhNRTogTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHdlIGhhdmUgd2Fp dGVkIGZvciBleGVjbGlzdHMgdG8gYmUgaWRsZSwKLQkgKiB0aGVyZSBtYXkgc3RpbGwgYmUgYW4g aW4tZmxpZ2h0IGludGVycnVwdCBldmVuIHRob3VnaCB0aGUgQ1NCCi0JICogaXMgbm93IGVtcHR5 LiBzeW5jaHJvbml6ZV9pcnEoKSBtYWtlcyBzdXJlIHRoYXQgYSByZXNpZHVhbCBpbnRlcnJ1cHQK LQkgKiBpcyBjb21wbGV0ZWQgYmVmb3JlIHdlIGNvbnRpbnVlLCBidXQgaXQgZG9lc24ndCBwcmV2 ZW50IHRoZSBIVyBmcm9tCi0JICogcmFpc2luZyBhIHNwdXJpb3VzIGludGVycnVwdCBsYXRlci4g VG8gY29tcGxldGUgdGhlIHNoaWVsZCB3ZSBzaG91bGQKLQkgKiBjb29yZGluYXRlIGRpc2FibGlu ZyB0aGUgQ1MgaXJxIHdpdGggZmx1c2hpbmcgdGhlIGludGVycnVwdHMuCi0JICovCi0Jc3luY2hy b25pemVfaXJxKGk5MTUtPmRybS5pcnEpOwotCi0JaW50ZWxfZW5naW5lc19wYXJrKGk5MTUpOwot CWk5MTVfdGltZWxpbmVzX3BhcmsoaTkxNSk7Ci0KLQlpOTE1X3BtdV9ndF9wYXJrZWQoaTkxNSk7 Ci0JaTkxNV92bWFfcGFya2VkKGk5MTUpOwotCi0Jd2FrZXJlZiA9IGZldGNoX2FuZF96ZXJvKCZp OTE1LT5ndC5hd2FrZSk7Ci0JR0VNX0JVR19PTighd2FrZXJlZik7Ci0KLQlpZiAoSU5URUxfR0VO KGk5MTUpID49IDYpCi0JCWdlbjZfcnBzX2lkbGUoaTkxNSk7Ci0KLQlpbnRlbF9kaXNwbGF5X3Bv d2VyX3B1dChpOTE1LCBQT1dFUl9ET01BSU5fR1RfSVJRLCB3YWtlcmVmKTsKLQotCWk5MTVfZ2xv YmFsc19wYXJrKCk7Ci19Ci0KLXZvaWQgaTkxNV9nZW1fcGFyayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKLXsKLQlHRU1fVFJBQ0UoIlxuIik7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlHRU1fQlVHX09OKGk5MTUtPmd0LmFjdGl2ZV9y ZXF1ZXN0cyk7Ci0KLQlpZiAoIWk5MTUtPmd0LmF3YWtlKQotCQlyZXR1cm47Ci0KLQkvKiBEZWZl ciB0aGUgYWN0dWFsIGNhbGwgdG8gX19pOTE1X2dlbV9wYXJrKCkgdG8gcHJldmVudCBwaW5nLXBv bmdzICovCi0JbW9kX2RlbGF5ZWRfd29yayhpOTE1LT53cSwgJmk5MTUtPmd0LmlkbGVfd29yaywg bXNlY3NfdG9famlmZmllcygxMDApKTsKLX0KLQotdm9pZCBpOTE1X2dlbV91bnBhcmsoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JR0VNX1RSQUNFKCJcbiIpOwotCi0JbG9ja2Rl cF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JR0VNX0JVR19PTighaTkx NS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKLQlhc3NlcnRfcnBtX3dha2Vsb2NrX2hlbGQoaTkxNSk7 Ci0KLQlpZiAoaTkxNS0+Z3QuYXdha2UpCi0JCXJldHVybjsKLQotCS8qCi0JICogSXQgc2VlbXMg dGhhdCB0aGUgRE1DIGxpa2VzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiB0aGUgREMgc3RhdGVzIGEg bG90Ci0JICogd2hlbiB0aGVyZSBhcmUgbm8gY29ubmVjdGVkIGRpc3BsYXlzIChubyBhY3RpdmUg cG93ZXIgZG9tYWlucykgZHVyaW5nCi0JICogY29tbWFuZCBzdWJtaXNzaW9uLgotCSAqCi0JICog VGhpcyBhY3Rpdml0eSBoYXMgbmVnYXRpdmUgaW1wYWN0IG9uIHRoZSBwZXJmb3JtYW5jZSBvZiB0 aGUgY2hpcCB3aXRoCi0JICogaHVnZSBsYXRlbmNpZXMgb2JzZXJ2ZWQgaW4gdGhlIGludGVycnVw dCBoYW5kbGVyIGFuZCBlbHNld2hlcmUuCi0JICoKLQkgKiBXb3JrIGFyb3VuZCBpdCBieSBncmFi YmluZyBhIEdUIElSUSBwb3dlciBkb21haW4gd2hpbHN0IHRoZXJlIGlzIGFueQotCSAqIEdUIGFj dGl2aXR5LCBwcmV2ZW50aW5nIGFueSBEQyBzdGF0ZSB0cmFuc2l0aW9ucy4KLQkgKi8KLQlpOTE1 LT5ndC5hd2FrZSA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBPV0VSX0RPTUFJTl9H VF9JUlEpOwotCUdFTV9CVUdfT04oIWk5MTUtPmd0LmF3YWtlKTsKLQotCWk5MTVfZ2xvYmFsc191 bnBhcmsoKTsKLQotCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoaTkxNSk7Ci0JaTkxNV91cGRh dGVfZ2Z4X3ZhbChpOTE1KTsKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCi0JCWdlbjZfcnBz X2J1c3koaTkxNSk7Ci0JaTkxNV9wbXVfZ3RfdW5wYXJrZWQoaTkxNSk7Ci0KLQlpbnRlbF9lbmdp bmVzX3VucGFyayhpOTE1KTsKLQotCWk5MTVfcXVldWVfaGFuZ2NoZWNrKGk5MTUpOwotCi0JcXVl dWVfZGVsYXllZF93b3JrKGk5MTUtPndxLAotCQkJICAgJmk5MTUtPmd0LnJldGlyZV93b3JrLAot CQkJICAgcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWikpOwotfQotCiBpbnQKIGk5MTVfZ2Vt X2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAog CQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKQEAgLTIwODgsNyArMTk4OSw3IEBAIHN0YXRp YyBpbnQgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogCQlpZiAoIWVycikKIAkJCWJyZWFrOwogCi0JfSB3aGlsZSAoZmx1 c2hfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+Z3QucmV0aXJlX3dvcmspKTsKKwl9IHdoaWxlIChm bHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5nZW0ucmV0aXJlX3dvcmspKTsKIAogCXJldHVy biBlcnI7CiB9CkBAIC0yODcxLDEzMiArMjc3Miw2IEBAIGk5MTVfZ2VtX29iamVjdF9wd3JpdGVf Z3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyB2b2lkCi1pOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQljb250 YWluZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJpdiksIGd0LnJldGlyZV93b3JrLndvcmspOwot CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKLQotCS8qIENvbWUgYmFj ayBsYXRlciBpZiB0aGUgZGV2aWNlIGlzIGJ1c3kuLi4gKi8KLQlpZiAobXV0ZXhfdHJ5bG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpKSB7Ci0JCWk5MTVfcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsK LQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JfQotCi0JLyoKLQkgKiBLZWVw IHRoZSByZXRpcmUgaGFuZGxlciBydW5uaW5nIHVudGlsIHdlIGFyZSBmaW5hbGx5IGlkbGUuCi0J ICogV2UgZG8gbm90IG5lZWQgdG8gZG8gdGhpcyB0ZXN0IHVuZGVyIGxvY2tpbmcgYXMgaW4gdGhl IHdvcnN0LWNhc2UKLQkgKiB3ZSBxdWV1ZSB0aGUgcmV0aXJlIHdvcmtlciBvbmNlIHRvbyBvZnRl bi4KLQkgKi8KLQlpZiAoUkVBRF9PTkNFKGRldl9wcml2LT5ndC5hd2FrZSkpCi0JCXF1ZXVlX2Rl bGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCi0JCQkJICAgJmRldl9wcml2LT5ndC5yZXRpcmVfd29y aywKLQkJCQkgICByb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKEhaKSk7Ci19Ci0KLXN0YXRpYyBi b29sIHN3aXRjaF90b19rZXJuZWxfY29udGV4dF9zeW5jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQlib29sIHJlc3VsdCA9IHRy dWU7Ci0KLQkvKgotCSAqIEV2ZW4gaWYgd2UgZmFpbCB0byBzd2l0Y2gsIGdpdmUgd2hhdGV2ZXIg aXMgcnVubmluZyBhIHNtYWxsIGNoYW5jZQotCSAqIHRvIHNhdmUgaXRzZWxmIGJlZm9yZSB3ZSBy ZXBvcnQgdGhlIGZhaWx1cmUuIFllcywgdGhpcyBtYXkgYmUgYQotCSAqIGZhbHNlIHBvc2l0aXZl IGR1ZSB0byBlLmcuIEVOT01FTSwgY2F2ZWF0IGVtcHRvciEKLQkgKi8KLQlpZiAoaTkxNV9nZW1f c3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KGk5MTUsIG1hc2spKQotCQlyZXN1bHQgPSBmYWxzZTsK LQotCWlmIChpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKGk5MTUsCi0JCQkJICAgSTkxNV9XQUlUX0xP Q0tFRCB8Ci0JCQkJICAgSTkxNV9XQUlUX0ZPUl9JRExFX0JPT1NULAotCQkJCSAgIEk5MTVfR0VN X0lETEVfVElNRU9VVCkpCi0JCXJlc3VsdCA9IGZhbHNlOwotCi0JaWYgKCFyZXN1bHQpIHsKLQkJ aWYgKGk5MTVfbW9kcGFyYW1zLnJlc2V0KSB7IC8qIFhYWCBoaWRlIHdhcm5pbmcgZnJvbSBnZW1f ZWlvICovCi0JCQlkZXZfZXJyKGk5MTUtPmRybS5kZXYsCi0JCQkJIkZhaWxlZCB0byBpZGxlIGVu Z2luZXMsIGRlY2xhcmluZyB3ZWRnZWQhXG4iKTsKLQkJCUdFTV9UUkFDRV9EVU1QKCk7Ci0JCX0K LQotCQkvKiBGb3JjaWJseSBjYW5jZWwgb3V0c3RhbmRpbmcgd29yayBhbmQgbGVhdmUgdGhlIGdw dSBxdWlldC4gKi8KLQkJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKLQl9Ci0KLQlpOTE1X3Jl dGlyZV9yZXF1ZXN0cyhpOTE1KTsgLyogZW5zdXJlIHdlIGZsdXNoIGFmdGVyIHdlZGdpbmcgKi8K LQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBsb2FkX3Bvd2VyX2NvbnRleHQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JLyogRm9yY2UgbG9hZGluZyB0aGUga2Vy bmVsIGNvbnRleHQgb24gYWxsIGVuZ2luZXMgKi8KLQlpZiAoIXN3aXRjaF90b19rZXJuZWxfY29u dGV4dF9zeW5jKGk5MTUsIEFMTF9FTkdJTkVTKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyoKLQkg KiBJbW1lZGlhdGVseSBwYXJrIHRoZSBHUFUgc28gdGhhdCB3ZSBlbmFibGUgcG93ZXJzYXZpbmcg YW5kCi0JICogdHJlYXQgaXQgYXMgaWRsZS4gVGhlIG5leHQgdGltZSB3ZSBpc3N1ZSBhIHJlcXVl c3QsIHdlIHdpbGwKLQkgKiB1bnBhcmsgYW5kIHN0YXJ0IHVzaW5nIHRoZSBlbmdpbmUtPnBpbm5l ZF9kZWZhdWx0X3N0YXRlLCBvdGhlcndpc2UKLQkgKiBpdCBpcyBpbiBsaW1ibyBhbmQgYW4gZWFy bHkgcmVzZXQgbWF5IGZhaWwuCi0JICovCi0JX19pOTE1X2dlbV9wYXJrKGk5MTUpOwotCi0JcmV0 dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV9pZGxlX3dvcmtfaGFuZGxlcihz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPQotCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCppOTE1KSwgZ3QuaWRsZV93b3JrLndv cmspOwotCWJvb2wgcmVhcm1faGFuZ2NoZWNrOwotCi0JaWYgKCFSRUFEX09OQ0UoaTkxNS0+Z3Qu YXdha2UpKQotCQlyZXR1cm47Ci0KLQlpZiAoUkVBRF9PTkNFKGk5MTUtPmd0LmFjdGl2ZV9yZXF1 ZXN0cykpCi0JCXJldHVybjsKLQotCXJlYXJtX2hhbmdjaGVjayA9Ci0JCWNhbmNlbF9kZWxheWVk X3dvcmtfc3luYygmaTkxNS0+Z3B1X2Vycm9yLmhhbmdjaGVja193b3JrKTsKLQotCWlmICghbXV0 ZXhfdHJ5bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkpIHsKLQkJLyogQ3VycmVudGx5IGJ1 c3ksIGNvbWUgYmFjayBsYXRlciAqLwotCQltb2RfZGVsYXllZF93b3JrKGk5MTUtPndxLAotCQkJ CSAmaTkxNS0+Z3QuaWRsZV93b3JrLAotCQkJCSBtc2Vjc190b19qaWZmaWVzKDUwKSk7Ci0JCWdv dG8gb3V0X3JlYXJtOwotCX0KLQotCS8qCi0JICogRmx1c2ggb3V0IHRoZSBsYXN0IHVzZXIgY29u dGV4dCwgbGVhdmluZyBvbmx5IHRoZSBwaW5uZWQKLQkgKiBrZXJuZWwgY29udGV4dCByZXNpZGVu dC4gU2hvdWxkIGFueXRoaW5nIHVuZm9ydHVuYXRlIGhhcHBlbgotCSAqIHdoaWxlIHdlIGFyZSBp ZGxlIChzdWNoIGFzIHRoZSBHUFUgYmVpbmcgcG93ZXIgY3ljbGVkKSwgbm8gdXNlcnMKLQkgKiB3 aWxsIGJlIGhhcm1lZC4KLQkgKi8KLQlpZiAoIXdvcmtfcGVuZGluZygmaTkxNS0+Z3QuaWRsZV93 b3JrLndvcmspICYmCi0JICAgICFpOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpIHsKLQkJKytpOTE1 LT5ndC5hY3RpdmVfcmVxdWVzdHM7IC8qIGRvbid0IHJlcXVldWUgaWRsZSAqLwotCi0JCXN3aXRj aF90b19rZXJuZWxfY29udGV4dF9zeW5jKGk5MTUsIGk5MTUtPmd0LmFjdGl2ZV9lbmdpbmVzKTsK LQotCQlpZiAoIS0taTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKSB7Ci0JCQlfX2k5MTVfZ2VtX3Bh cmsoaTkxNSk7Ci0JCQlyZWFybV9oYW5nY2hlY2sgPSBmYWxzZTsKLQkJfQotCX0KLQotCW11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0KLW91dF9yZWFybToKLQlpZiAocmVh cm1faGFuZ2NoZWNrKSB7Ci0JCUdFTV9CVUdfT04oIWk5MTUtPmd0LmF3YWtlKTsKLQkJaTkxNV9x dWV1ZV9oYW5nY2hlY2soaTkxNSk7Ci0JfQotfQotCiB2b2lkIGk5MTVfZ2VtX2Nsb3NlX29iamVj dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRybV9maWxlICpmaWxlKQogewog CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShnZW0tPmRldik7CkBAIC00 NDEyLDEzMyArNDE4Nyw2IEBAIHZvaWQgaTkxNV9nZW1fc2FuaXRpemUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCiAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK IH0KIAotdm9pZCBpOTE1X2dlbV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQotewotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCi0JR0VNX1RSQUNFKCJcbiIpOwotCi0J d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwotCi0JZmx1c2hfd29ya3F1ZXVl KGk5MTUtPndxKTsKLQotCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCi0J LyoKLQkgKiBXZSBoYXZlIHRvIGZsdXNoIGFsbCB0aGUgZXhlY3V0aW5nIGNvbnRleHRzIHRvIG1h aW4gbWVtb3J5IHNvCi0JICogdGhhdCB0aGV5IGNhbiBzYXZlZCBpbiB0aGUgaGliZXJuYXRpb24g aW1hZ2UuIFRvIGVuc3VyZSB0aGUgbGFzdAotCSAqIGNvbnRleHQgaW1hZ2UgaXMgY29oZXJlbnQs IHdlIGhhdmUgdG8gc3dpdGNoIGF3YXkgZnJvbSBpdC4gVGhhdAotCSAqIGxlYXZlcyB0aGUgaTkx NS0+a2VybmVsX2NvbnRleHQgc3RpbGwgYWN0aXZlIHdoZW4KLQkgKiB3ZSBhY3R1YWxseSBzdXNw ZW5kLCBhbmQgaXRzIGltYWdlIGluIG1lbW9yeSBtYXkgbm90IG1hdGNoIHRoZSBHUFUKLQkgKiBz dGF0ZS4gRm9ydHVuYXRlbHksIHRoZSBrZXJuZWxfY29udGV4dCBpcyBkaXNwb3NhYmxlIGFuZCB3 ZSBkbwotCSAqIG5vdCByZWx5IG9uIGl0cyBzdGF0ZS4KLQkgKi8KLQlzd2l0Y2hfdG9fa2VybmVs X2NvbnRleHRfc3luYyhpOTE1LCBpOTE1LT5ndC5hY3RpdmVfZW5naW5lcyk7Ci0KLQltdXRleF91 bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCWk5MTVfcmVzZXRfZmx1c2goaTkxNSk7 Ci0KLQlkcmFpbl9kZWxheWVkX3dvcmsoJmk5MTUtPmd0LnJldGlyZV93b3JrKTsKLQotCS8qCi0J ICogQXMgdGhlIGlkbGVfd29yayBpcyByZWFybWluZyBpZiBpdCBkZXRlY3RzIGEgcmFjZSwgcGxh eSBzYWZlIGFuZAotCSAqIHJlcGVhdCB0aGUgZmx1c2ggdW50aWwgaXQgaXMgZGVmaW5pdGVseSBp ZGxlLgotCSAqLwotCWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z3QuaWRsZV93b3JrKTsKLQot CS8qCi0JICogQXNzZXJ0IHRoYXQgd2Ugc3VjY2Vzc2Z1bGx5IGZsdXNoZWQgYWxsIHRoZSB3b3Jr IGFuZAotCSAqIHJlc2V0IHRoZSBHUFUgYmFjayB0byBpdHMgaWRsZSwgbG93IHBvd2VyIHN0YXRl LgotCSAqLwotCUdFTV9CVUdfT04oaTkxNS0+Z3QuYXdha2UpOwotCi0JaW50ZWxfdWNfc3VzcGVu ZChpOTE1KTsKLQotCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwotfQotCi12 b2lkIGk5MTVfZ2VtX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQg KnBoYXNlc1tdID0gewotCQkmaTkxNS0+bW0udW5ib3VuZF9saXN0LAotCQkmaTkxNS0+bW0uYm91 bmRfbGlzdCwKLQkJTlVMTAotCX0sICoqcGhhc2U7Ci0KLQkvKgotCSAqIE5laXRoZXIgdGhlIEJJ T1MsIG91cnNlbHZlcyBvciBhbnkgb3RoZXIga2VybmVsCi0JICogZXhwZWN0cyB0aGUgc3lzdGVt IHRvIGJlIGluIGV4ZWNsaXN0cyBtb2RlIG9uIHN0YXJ0dXAsCi0JICogc28gd2UgbmVlZCB0byBy ZXNldCB0aGUgR1BVIGJhY2sgdG8gbGVnYWN5IG1vZGUuIEFuZCB0aGUgb25seQotCSAqIGtub3du IHdheSB0byBkaXNhYmxlIGxvZ2ljYWwgY29udGV4dHMgaXMgdGhyb3VnaCBhIEdQVSByZXNldC4K LQkgKgotCSAqIFNvIGluIG9yZGVyIHRvIGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBrbm93biBkZWZh dWx0IGNvbmZpZ3VyYXRpb24sCi0JICogYWx3YXlzIHJlc2V0IHRoZSBHUFUgdXBvbiB1bmxvYWQg YW5kIHN1c3BlbmQuIEFmdGVyd2FyZHMgd2UgdGhlbgotCSAqIGNsZWFuIHVwIHRoZSBHRU0gc3Rh dGUgdHJhY2tpbmcsIGZsdXNoaW5nIG9mZiB0aGUgcmVxdWVzdHMgYW5kCi0JICogbGVhdmluZyB0 aGUgc3lzdGVtIGluIGEga25vd24gaWRsZSBzdGF0ZS4KLQkgKgotCSAqIE5vdGUgdGhhdCBpcyBv ZiB0aGUgdXBtb3N0IGltcG9ydGFuY2UgdGhhdCB0aGUgR1BVIGlzIGlkbGUgYW5kCi0JICogYWxs IHN0cmF5IHdyaXRlcyBhcmUgZmx1c2hlZCAqYmVmb3JlKiB3ZSBkaXNtYW50bGUgdGhlIGJhY2tp bmcKLQkgKiBzdG9yYWdlIGZvciB0aGUgcGlubmVkIG9iamVjdHMuCi0JICoKLQkgKiBIb3dldmVy LCBzaW5jZSB3ZSBhcmUgdW5jZXJ0YWluIHRoYXQgcmVzZXR0aW5nIHRoZSBHUFUgb24gb2xkZXIK LQkgKiBtYWNoaW5lcyBpcyBhIGdvb2QgaWRlYSwgd2UgZG9uJ3QgLSBqdXN0IGluIGNhc2UgaXQg bGVhdmVzIHRoZQotCSAqIG1hY2hpbmUgaW4gYW4gdW51c2FibGUgY29uZGl0aW9uLgotCSAqLwot Ci0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JZm9yIChwaGFzZSA9IHBo YXNlczsgKnBoYXNlOyBwaGFzZSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAqcGhh c2UsIG1tLmxpbmspCi0JCQlXQVJOX09OKGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFp bihvYmosIGZhbHNlKSk7Ci0JfQotCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Ci0KLQlpbnRlbF91Y19zYW5pdGl6ZShpOTE1KTsKLQlpOTE1X2dlbV9zYW5pdGl6ZShpOTE1 KTsKLX0KLQotdm9pZCBpOTE1X2dlbV9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCi17Ci0JR0VNX1RSQUNFKCJcbiIpOwotCi0JV0FSTl9PTihpOTE1LT5ndC5hd2FrZSk7Ci0K LQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmaTkxNS0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCWk5MTVfZ2VtX3Jl c3RvcmVfZ3R0X21hcHBpbmdzKGk5MTUpOwotCWk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKGk5MTUp OwotCi0JLyoKLQkgKiBBcyB3ZSBkaWRuJ3QgZmx1c2ggdGhlIGtlcm5lbCBjb250ZXh0IGJlZm9y ZSBzdXNwZW5kLCB3ZSBjYW5ub3QKLQkgKiBndWFyYW50ZWUgdGhhdCB0aGUgY29udGV4dCBpbWFn ZSBpcyBjb21wbGV0ZS4gU28gbGV0J3MganVzdCByZXNldAotCSAqIGl0IGFuZCBzdGFydCBhZ2Fp bi4KLQkgKi8KLQlpbnRlbF9ndF9yZXN1bWUoaTkxNSk7Ci0KLQlpZiAoaTkxNV9nZW1faW5pdF9o dyhpOTE1KSkKLQkJZ290byBlcnJfd2VkZ2VkOwotCi0JaW50ZWxfdWNfcmVzdW1lKGk5MTUpOwot Ci0JLyogQWx3YXlzIHJlbG9hZCBhIGNvbnRleHQgZm9yIHBvd2Vyc2F2aW5nLiAqLwotCWlmICgh bG9hZF9wb3dlcl9jb250ZXh0KGk5MTUpKQotCQlnb3RvIGVycl93ZWRnZWQ7Ci0KLW91dF91bmxv Y2s6Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmk5MTUtPnVuY29yZSwgRk9SQ0VXQUtF X0FMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlyZXR1cm47 Ci0KLWVycl93ZWRnZWQ6Ci0JaWYgKCFpOTE1X3Jlc2V0X2ZhaWxlZChpOTE1KSkgewotCQlkZXZf ZXJyKGk5MTUtPmRybS5kZXYsCi0JCQkiRmFpbGVkIHRvIHJlLWluaXRpYWxpemUgR1BVLCBkZWNs YXJpbmcgaXQgd2VkZ2VkIVxuIik7Ci0JCWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7Ci0JfQot CWdvdG8gb3V0X3VubG9jazsKLX0KLQogdm9pZCBpOTE1X2dlbV9pbml0X3N3aXp6bGluZyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPCA1IHx8CkBAIC00NzIxLDcgKzQzNjksNyBAQCBzdGF0aWMgaW50IF9faW50ZWxfZW5naW5l c19yZWNvcmRfZGVmYXVsdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJfQogCiAJ LyogRmx1c2ggdGhlIGRlZmF1bHQgY29udGV4dCBpbWFnZSB0byBtZW1vcnksIGFuZCBlbmFibGUg cG93ZXJzYXZpbmcuICovCi0JaWYgKCFsb2FkX3Bvd2VyX2NvbnRleHQoaTkxNSkpIHsKKwlpZiAo IWk5MTVfZ2VtX2xvYWRfcG93ZXJfY29udGV4dChpOTE1KSkgewogCQllcnIgPSAtRUlPOwogCQln b3RvIGVycl9hY3RpdmU7CiAJfQpAQCAtNTEzNiwxMSArNDc4NCw4IEBAIGludCBpOTE1X2dlbV9p bml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlJTklUX0xJU1Rf SEVBRCgmZGV2X3ByaXYtPmd0LmNsb3NlZF92bWEpOwogCiAJaTkxNV9nZW1faW5pdF9fbW0oZGV2 X3ByaXYpOworCWk5MTVfZ2VtX2luaXRfX3BtKGRldl9wcml2KTsKIAotCUlOSVRfREVMQVlFRF9X T1JLKCZkZXZfcHJpdi0+Z3QucmV0aXJlX3dvcmssCi0JCQkgIGk5MTVfZ2VtX3JldGlyZV93b3Jr X2hhbmRsZXIpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+Z3QuaWRsZV93b3JrLAot CQkJICBpOTE1X2dlbV9pZGxlX3dvcmtfaGFuZGxlcik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgm ZGV2X3ByaXYtPmdwdV9lcnJvci53YWl0X3F1ZXVlKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZk ZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X3F1ZXVlKTsKIAltdXRleF9pbml0KCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLndlZGdlX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWZiMGU4ZDU2N2EyCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcG0uYwpAQCAtMCwwICsx LDM2NSBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAqCisgKiBDb3B5 cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJpOTE1X2Ry di5oIgorI2luY2x1ZGUgImk5MTVfZ2VtX3BtLmgiCisjaW5jbHVkZSAiaTkxNV9nbG9iYWxzLmgi CisjaW5jbHVkZSAiaW50ZWxfcG0uaCIKKworc3RhdGljIHZvaWQgX19pOTE1X2dlbV9wYXJrKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWludGVsX3dha2VyZWZfdCB3YWtlcmVm OworCisJR0VNX1RSQUNFKCJcbiIpOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7CisJR0VNX0JVR19PTihpOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpOwor CUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJmk5MTUtPmd0LmFjdGl2ZV9yaW5ncykpOworCisJaWYg KCFpOTE1LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBCZSBwYXJhbm9pZCBhbmQg Zmx1c2ggYSBjb25jdXJyZW50IGludGVycnVwdCB0byBtYWtlIHN1cmUKKwkgKiB3ZSBkb24ndCBy ZWFjdGl2YXRlIGFueSBpcnEgdGFza2xldHMgYWZ0ZXIgcGFya2luZy4KKwkgKgorCSAqIEZJWE1F OiBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggd2UgaGF2ZSB3YWl0ZWQgZm9yIGV4ZWNsaXN0cyB0byBi ZSBpZGxlLAorCSAqIHRoZXJlIG1heSBzdGlsbCBiZSBhbiBpbi1mbGlnaHQgaW50ZXJydXB0IGV2 ZW4gdGhvdWdoIHRoZSBDU0IKKwkgKiBpcyBub3cgZW1wdHkuIHN5bmNocm9uaXplX2lycSgpIG1h a2VzIHN1cmUgdGhhdCBhIHJlc2lkdWFsIGludGVycnVwdAorCSAqIGlzIGNvbXBsZXRlZCBiZWZv cmUgd2UgY29udGludWUsIGJ1dCBpdCBkb2Vzbid0IHByZXZlbnQgdGhlIEhXIGZyb20KKwkgKiBy YWlzaW5nIGEgc3B1cmlvdXMgaW50ZXJydXB0IGxhdGVyLiBUbyBjb21wbGV0ZSB0aGUgc2hpZWxk IHdlIHNob3VsZAorCSAqIGNvb3JkaW5hdGUgZGlzYWJsaW5nIHRoZSBDUyBpcnEgd2l0aCBmbHVz aGluZyB0aGUgaW50ZXJydXB0cy4KKwkgKi8KKwlzeW5jaHJvbml6ZV9pcnEoaTkxNS0+ZHJtLmly cSk7CisKKwlpbnRlbF9lbmdpbmVzX3BhcmsoaTkxNSk7CisJaTkxNV90aW1lbGluZXNfcGFyayhp OTE1KTsKKworCWk5MTVfcG11X2d0X3BhcmtlZChpOTE1KTsKKwlpOTE1X3ZtYV9wYXJrZWQoaTkx NSk7CisKKwl3YWtlcmVmID0gZmV0Y2hfYW5kX3plcm8oJmk5MTUtPmd0LmF3YWtlKTsKKwlHRU1f QlVHX09OKCF3YWtlcmVmKTsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJZ2VuNl9y cHNfaWRsZShpOTE1KTsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGk5MTUsIFBPV0VSX0RP TUFJTl9HVF9JUlEsIHdha2VyZWYpOworCisJaTkxNV9nbG9iYWxzX3BhcmsoKTsKK30KKworc3Rh dGljIGJvb2wgc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0X3N5bmMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCWJvb2wgcmVzdWx0 ID0gdHJ1ZTsKKworCS8qCisJICogRXZlbiBpZiB3ZSBmYWlsIHRvIHN3aXRjaCwgZ2l2ZSB3aGF0 ZXZlciBpcyBydW5uaW5nIGEgc21hbGwgY2hhbmNlCisJICogdG8gc2F2ZSBpdHNlbGYgYmVmb3Jl IHdlIHJlcG9ydCB0aGUgZmFpbHVyZS4gWWVzLCB0aGlzIG1heSBiZSBhCisJICogZmFsc2UgcG9z aXRpdmUgZHVlIHRvIGUuZy4gRU5PTUVNLCBjYXZlYXQgZW1wdG9yIQorCSAqLworCWlmIChpOTE1 X2dlbV9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoaTkxNSwgbWFzaykpCisJCXJlc3VsdCA9IGZh bHNlOworCisJaWYgKGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoaTkxNSwKKwkJCQkgICBJOTE1X1dB SVRfTE9DS0VEIHwKKwkJCQkgICBJOTE1X1dBSVRfRk9SX0lETEVfQk9PU1QsCisJCQkJICAgSTkx NV9HRU1fSURMRV9USU1FT1VUKSkKKwkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAoIXJlc3VsdCkg eworCQlpZiAoaTkxNV9tb2RwYXJhbXMucmVzZXQpIHsgLyogWFhYIGhpZGUgd2FybmluZyBmcm9t IGdlbV9laW8gKi8KKwkJCWRldl9lcnIoaTkxNS0+ZHJtLmRldiwKKwkJCQkiRmFpbGVkIHRvIGlk bGUgZW5naW5lcywgZGVjbGFyaW5nIHdlZGdlZCFcbiIpOworCQkJR0VNX1RSQUNFX0RVTVAoKTsK KwkJfQorCisJCS8qIEZvcmNpYmx5IGNhbmNlbCBvdXRzdGFuZGluZyB3b3JrIGFuZCBsZWF2ZSB0 aGUgZ3B1IHF1aWV0LiAqLworCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOworCX0KKworCWk5 MTVfcmV0aXJlX3JlcXVlc3RzKGk5MTUpOyAvKiBlbnN1cmUgd2UgZmx1c2ggYWZ0ZXIgd2VkZ2lu ZyAqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfd29ya19oYW5kbGVy KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmk5MTUpLCBnZW0uaWRsZV93b3Jr LndvcmspOworCWJvb2wgcmVhcm1faGFuZ2NoZWNrOworCisJaWYgKCFSRUFEX09OQ0UoaTkxNS0+ Z3QuYXdha2UpKQorCQlyZXR1cm47CisKKwlpZiAoUkVBRF9PTkNFKGk5MTUtPmd0LmFjdGl2ZV9y ZXF1ZXN0cykpCisJCXJldHVybjsKKworCXJlYXJtX2hhbmdjaGVjayA9CisJCWNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmaTkxNS0+Z3B1X2Vycm9yLmhhbmdjaGVja193b3JrKTsKKworCWlmICgh bXV0ZXhfdHJ5bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkpIHsKKwkJLyogQ3VycmVudGx5 IGJ1c3ksIGNvbWUgYmFjayBsYXRlciAqLworCQltb2RfZGVsYXllZF93b3JrKGk5MTUtPndxLAor CQkJCSAmaTkxNS0+Z2VtLmlkbGVfd29yaywKKwkJCQkgbXNlY3NfdG9famlmZmllcyg1MCkpOwor CQlnb3RvIG91dF9yZWFybTsKKwl9CisKKwkvKgorCSAqIEZsdXNoIG91dCB0aGUgbGFzdCB1c2Vy IGNvbnRleHQsIGxlYXZpbmcgb25seSB0aGUgcGlubmVkCisJICoga2VybmVsIGNvbnRleHQgcmVz aWRlbnQuIFNob3VsZCBhbnl0aGluZyB1bmZvcnR1bmF0ZSBoYXBwZW4KKwkgKiB3aGlsZSB3ZSBh cmUgaWRsZSAoc3VjaCBhcyB0aGUgR1BVIGJlaW5nIHBvd2VyIGN5Y2xlZCksIG5vIHVzZXJzCisJ ICogd2lsbCBiZSBoYXJtZWQuCisJICovCisJaWYgKCF3b3JrX3BlbmRpbmcoJmk5MTUtPmdlbS5p ZGxlX3dvcmsud29yaykgJiYKKwkgICAgIWk5MTUtPmd0LmFjdGl2ZV9yZXF1ZXN0cykgeworCQkr K2k5MTUtPmd0LmFjdGl2ZV9yZXF1ZXN0czsgLyogZG9uJ3QgcmVxdWV1ZSBpZGxlICovCisKKwkJ c3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0X3N5bmMoaTkxNSwgaTkxNS0+Z3QuYWN0aXZlX2VuZ2lu ZXMpOworCisJCWlmICghLS1pOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpIHsKKwkJCV9faTkxNV9n ZW1fcGFyayhpOTE1KTsKKwkJCXJlYXJtX2hhbmdjaGVjayA9IGZhbHNlOworCQl9CisJfQorCisJ bXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworb3V0X3JlYXJtOgorCWlm IChyZWFybV9oYW5nY2hlY2spIHsKKwkJR0VNX0JVR19PTighaTkxNS0+Z3QuYXdha2UpOworCQlp OTE1X3F1ZXVlX2hhbmdjaGVjayhpOTE1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJldGlyZV93 b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaTkxNSksIGdl bS5yZXRpcmVfd29yay53b3JrKTsKKworCS8qIENvbWUgYmFjayBsYXRlciBpZiB0aGUgZGV2aWNl IGlzIGJ1c3kuLi4gKi8KKwlpZiAobXV0ZXhfdHJ5bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCkpIHsKKwkJaTkxNV9yZXRpcmVfcmVxdWVzdHMoaTkxNSk7CisJCW11dGV4X3VubG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJfQorCisJLyoKKwkgKiBLZWVwIHRoZSByZXRpcmUgaGFu ZGxlciBydW5uaW5nIHVudGlsIHdlIGFyZSBmaW5hbGx5IGlkbGUuCisJICogV2UgZG8gbm90IG5l ZWQgdG8gZG8gdGhpcyB0ZXN0IHVuZGVyIGxvY2tpbmcgYXMgaW4gdGhlIHdvcnN0LWNhc2UKKwkg KiB3ZSBxdWV1ZSB0aGUgcmV0aXJlIHdvcmtlciBvbmNlIHRvbyBvZnRlbi4KKwkgKi8KKwlpZiAo UkVBRF9PTkNFKGk5MTUtPmd0LmF3YWtlKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGk5MTUtPndx LAorCQkJCSAgICZpOTE1LT5nZW0ucmV0aXJlX3dvcmssCisJCQkJICAgcm91bmRfamlmZmllc191 cF9yZWxhdGl2ZShIWikpOworfQorCit2b2lkIGk5MTVfZ2VtX3Bhcmsoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCit7CisJR0VNX1RSQUNFKCJcbiIpOworCisJbG9ja2RlcF9hc3NlcnRf aGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJR0VNX0JVR19PTihpOTE1LT5ndC5hY3Rp dmVfcmVxdWVzdHMpOworCisJaWYgKCFpOTE1LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJLyog RGVmZXIgdGhlIGFjdHVhbCBjYWxsIHRvIF9faTkxNV9nZW1fcGFyaygpIHRvIHByZXZlbnQgcGlu Zy1wb25ncyAqLworCW1vZF9kZWxheWVkX3dvcmsoaTkxNS0+d3EsICZpOTE1LT5nZW0uaWRsZV93 b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworfQorCit2b2lkIGk5MTVfZ2VtX3VucGFyayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlHRU1fVFJBQ0UoIlxuIik7CisKKwls b2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlHRU1fQlVHX09O KCFpOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpOworCWFzc2VydF9ycG1fd2FrZWxvY2tfaGVsZChp OTE1KTsKKworCWlmIChpOTE1LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBz ZWVtcyB0aGF0IHRoZSBETUMgbGlrZXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZSBEQyBzdGF0 ZXMgYSBsb3QKKwkgKiB3aGVuIHRoZXJlIGFyZSBubyBjb25uZWN0ZWQgZGlzcGxheXMgKG5vIGFj dGl2ZSBwb3dlciBkb21haW5zKSBkdXJpbmcKKwkgKiBjb21tYW5kIHN1Ym1pc3Npb24uCisJICoK KwkgKiBUaGlzIGFjdGl2aXR5IGhhcyBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIHBlcmZvcm1hbmNl IG9mIHRoZSBjaGlwIHdpdGgKKwkgKiBodWdlIGxhdGVuY2llcyBvYnNlcnZlZCBpbiB0aGUgaW50 ZXJydXB0IGhhbmRsZXIgYW5kIGVsc2V3aGVyZS4KKwkgKgorCSAqIFdvcmsgYXJvdW5kIGl0IGJ5 IGdyYWJiaW5nIGEgR1QgSVJRIHBvd2VyIGRvbWFpbiB3aGlsc3QgdGhlcmUgaXMgYW55CisJICog R1QgYWN0aXZpdHksIHByZXZlbnRpbmcgYW55IERDIHN0YXRlIHRyYW5zaXRpb25zLgorCSAqLwor CWk5MTUtPmd0LmF3YWtlID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoaTkxNSwgUE9XRVJfRE9N QUlOX0dUX0lSUSk7CisJR0VNX0JVR19PTighaTkxNS0+Z3QuYXdha2UpOworCisJaTkxNV9nbG9i YWxzX3VucGFyaygpOworCisJaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShpOTE1KTsKKwlpOTE1 X3VwZGF0ZV9nZnhfdmFsKGk5MTUpOworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJZ2Vu Nl9ycHNfYnVzeShpOTE1KTsKKwlpOTE1X3BtdV9ndF91bnBhcmtlZChpOTE1KTsKKworCWludGVs X2VuZ2luZXNfdW5wYXJrKGk5MTUpOworCisJaTkxNV9xdWV1ZV9oYW5nY2hlY2soaTkxNSk7CisK KwlxdWV1ZV9kZWxheWVkX3dvcmsoaTkxNS0+d3EsCisJCQkgICAmaTkxNS0+Z2VtLnJldGlyZV93 b3JrLAorCQkJICAgcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWikpOworfQorCitib29sIGk5 MTVfZ2VtX2xvYWRfcG93ZXJfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwkvKiBGb3JjZSBsb2FkaW5nIHRoZSBrZXJuZWwgY29udGV4dCBvbiBhbGwgZW5naW5lcyAq LworCWlmICghc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0X3N5bmMoaTkxNSwgQUxMX0VOR0lORVMp KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEltbWVkaWF0ZWx5IHBhcmsgdGhlIEdQVSBz byB0aGF0IHdlIGVuYWJsZSBwb3dlcnNhdmluZyBhbmQKKwkgKiB0cmVhdCBpdCBhcyBpZGxlLiBU aGUgbmV4dCB0aW1lIHdlIGlzc3VlIGEgcmVxdWVzdCwgd2Ugd2lsbAorCSAqIHVucGFyayBhbmQg c3RhcnQgdXNpbmcgdGhlIGVuZ2luZS0+cGlubmVkX2RlZmF1bHRfc3RhdGUsIG90aGVyd2lzZQor CSAqIGl0IGlzIGluIGxpbWJvIGFuZCBhbiBlYXJseSByZXNldCBtYXkgZmFpbC4KKwkgKi8KKwlf X2k5MTVfZ2VtX3BhcmsoaTkxNSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBpOTE1X2dl bV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOworCisJR0VNX1RSQUNFKCJcbiIpOworCisJd2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KGk5MTUpOworCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gZmx1c2ggYWxsIHRoZSBleGVjdXRpbmcgY29udGV4 dHMgdG8gbWFpbiBtZW1vcnkgc28KKwkgKiB0aGF0IHRoZXkgY2FuIHNhdmVkIGluIHRoZSBoaWJl cm5hdGlvbiBpbWFnZS4gVG8gZW5zdXJlIHRoZSBsYXN0CisJICogY29udGV4dCBpbWFnZSBpcyBj b2hlcmVudCwgd2UgaGF2ZSB0byBzd2l0Y2ggYXdheSBmcm9tIGl0LiBUaGF0CisJICogbGVhdmVz IHRoZSBpOTE1LT5rZXJuZWxfY29udGV4dCBzdGlsbCBhY3RpdmUgd2hlbgorCSAqIHdlIGFjdHVh bGx5IHN1c3BlbmQsIGFuZCBpdHMgaW1hZ2UgaW4gbWVtb3J5IG1heSBub3QgbWF0Y2ggdGhlIEdQ VQorCSAqIHN0YXRlLiBGb3J0dW5hdGVseSwgdGhlIGtlcm5lbF9jb250ZXh0IGlzIGRpc3Bvc2Fi bGUgYW5kIHdlIGRvCisJICogbm90IHJlbHkgb24gaXRzIHN0YXRlLgorCSAqLworCXN3aXRjaF90 b19rZXJuZWxfY29udGV4dF9zeW5jKGk5MTUsIGk5MTUtPmd0LmFjdGl2ZV9lbmdpbmVzKTsKKwor CW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJaTkxNV9yZXNldF9mbHVz aChpOTE1KTsKKworCWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLnJldGlyZV93b3JrKTsK KworCS8qCisJICogQXMgdGhlIGlkbGVfd29yayBpcyByZWFybWluZyBpZiBpdCBkZXRlY3RzIGEg cmFjZSwgcGxheSBzYWZlIGFuZAorCSAqIHJlcGVhdCB0aGUgZmx1c2ggdW50aWwgaXQgaXMgZGVm aW5pdGVseSBpZGxlLgorCSAqLworCWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLmlkbGVf d29yayk7CisKKwlmbHVzaF93b3JrcXVldWUoaTkxNS0+d3EpOworCisJLyoKKwkgKiBBc3NlcnQg dGhhdCB3ZSBzdWNjZXNzZnVsbHkgZmx1c2hlZCBhbGwgdGhlIHdvcmsgYW5kCisJICogcmVzZXQg dGhlIEdQVSBiYWNrIHRvIGl0cyBpZGxlLCBsb3cgcG93ZXIgc3RhdGUuCisJICovCisJR0VNX0JV R19PTihpOTE1LT5ndC5hd2FrZSk7CisKKwlpbnRlbF91Y19zdXNwZW5kKGk5MTUpOworCisJaW50 ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cit9CisKK3ZvaWQgaTkxNV9nZW1fc3Vz cGVuZF9sYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGxpc3RfaGVhZCAqcGhhc2VzW10gPSB7CisJ CSZpOTE1LT5tbS51bmJvdW5kX2xpc3QsCisJCSZpOTE1LT5tbS5ib3VuZF9saXN0LAorCQlOVUxM CisJfSwgKipwaGFzZTsKKworCS8qCisJICogTmVpdGhlciB0aGUgQklPUywgb3Vyc2VsdmVzIG9y IGFueSBvdGhlciBrZXJuZWwKKwkgKiBleHBlY3RzIHRoZSBzeXN0ZW0gdG8gYmUgaW4gZXhlY2xp c3RzIG1vZGUgb24gc3RhcnR1cCwKKwkgKiBzbyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBHUFUgYmFj ayB0byBsZWdhY3kgbW9kZS4gQW5kIHRoZSBvbmx5CisJICoga25vd24gd2F5IHRvIGRpc2FibGUg bG9naWNhbCBjb250ZXh0cyBpcyB0aHJvdWdoIGEgR1BVIHJlc2V0LgorCSAqCisJICogU28gaW4g b3JkZXIgdG8gbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGtub3duIGRlZmF1bHQgY29uZmlndXJhdGlv biwKKwkgKiBhbHdheXMgcmVzZXQgdGhlIEdQVSB1cG9uIHVubG9hZCBhbmQgc3VzcGVuZC4gQWZ0 ZXJ3YXJkcyB3ZSB0aGVuCisJICogY2xlYW4gdXAgdGhlIEdFTSBzdGF0ZSB0cmFja2luZywgZmx1 c2hpbmcgb2ZmIHRoZSByZXF1ZXN0cyBhbmQKKwkgKiBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYSBr bm93biBpZGxlIHN0YXRlLgorCSAqCisJICogTm90ZSB0aGF0IGlzIG9mIHRoZSB1cG1vc3QgaW1w b3J0YW5jZSB0aGF0IHRoZSBHUFUgaXMgaWRsZSBhbmQKKwkgKiBhbGwgc3RyYXkgd3JpdGVzIGFy ZSBmbHVzaGVkICpiZWZvcmUqIHdlIGRpc21hbnRsZSB0aGUgYmFja2luZworCSAqIHN0b3JhZ2Ug Zm9yIHRoZSBwaW5uZWQgb2JqZWN0cy4KKwkgKgorCSAqIEhvd2V2ZXIsIHNpbmNlIHdlIGFyZSB1 bmNlcnRhaW4gdGhhdCByZXNldHRpbmcgdGhlIEdQVSBvbiBvbGRlcgorCSAqIG1hY2hpbmVzIGlz IGEgZ29vZCBpZGVhLCB3ZSBkb24ndCAtIGp1c3QgaW4gY2FzZSBpdCBsZWF2ZXMgdGhlCisJICog bWFjaGluZSBpbiBhbiB1bnVzYWJsZSBjb25kaXRpb24uCisJICovCisKKwltdXRleF9sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlmb3IgKHBoYXNlID0gcGhhc2VzOyAqcGhhc2U7IHBo YXNlKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICpwaGFzZSwgbW0ubGluaykKKwkJ CVdBUk5fT04oaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgZmFsc2UpKTsK Kwl9CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCWludGVsX3Vj X3Nhbml0aXplKGk5MTUpOworCWk5MTVfZ2VtX3Nhbml0aXplKGk5MTUpOworfQorCit2b2lkIGk5 MTVfZ2VtX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlHRU1fVFJB Q0UoIlxuIik7CisKKwlXQVJOX09OKGk5MTUtPmd0LmF3YWtlKTsKKworCW11dGV4X2xvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZpOTE1 LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCisJaTkxNV9nZW1fcmVzdG9yZV9ndHRfbWFwcGlu Z3MoaTkxNSk7CisJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoaTkxNSk7CisKKwkvKgorCSAqIEFz IHdlIGRpZG4ndCBmbHVzaCB0aGUga2VybmVsIGNvbnRleHQgYmVmb3JlIHN1c3BlbmQsIHdlIGNh bm5vdAorCSAqIGd1YXJhbnRlZSB0aGF0IHRoZSBjb250ZXh0IGltYWdlIGlzIGNvbXBsZXRlLiBT byBsZXQncyBqdXN0IHJlc2V0CisJICogaXQgYW5kIHN0YXJ0IGFnYWluLgorCSAqLworCWludGVs X2d0X3Jlc3VtZShpOTE1KTsKKworCWlmIChpOTE1X2dlbV9pbml0X2h3KGk5MTUpKQorCQlnb3Rv IGVycl93ZWRnZWQ7CisKKwlpbnRlbF91Y19yZXN1bWUoaTkxNSk7CisKKwkvKiBBbHdheXMgcmVs b2FkIGEgY29udGV4dCBmb3IgcG93ZXJzYXZpbmcuICovCisJaWYgKCFpOTE1X2dlbV9sb2FkX3Bv d2VyX2NvbnRleHQoaTkxNSkpCisJCWdvdG8gZXJyX3dlZGdlZDsKKworb3V0X3VubG9jazoKKwlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmaTkxNS0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsK KwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybjsKKworZXJy X3dlZGdlZDoKKwlpZiAoIWk5MTVfcmVzZXRfZmFpbGVkKGk5MTUpKSB7CisJCWRldl9lcnIoaTkx NS0+ZHJtLmRldiwKKwkJCSJGYWlsZWQgdG8gcmUtaW5pdGlhbGl6ZSBHUFUsIGRlY2xhcmluZyBp dCB3ZWRnZWQhXG4iKTsKKwkJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKKwl9CisJZ290byBv dXRfdW5sb2NrOworfQorCit2b2lkIGk5MTVfZ2VtX2luaXRfX3BtKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZpOTE1LT5nZW0uaWRsZV93b3Jr LCBpZGxlX3dvcmtfaGFuZGxlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmk5MTUtPmdlbS5yZXRp cmVfd29yaywgcmV0aXJlX3dvcmtfaGFuZGxlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9wbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f cG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUyZjY1ZTNmMDZi NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3BtLmgK QEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAq CisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYg X19JOTE1X0dFTV9QTV9IX18KKyNkZWZpbmUgX19JOTE1X0dFTV9QTV9IX18KKworI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IHdvcmtf c3RydWN0OworCit2b2lkIGk5MTVfZ2VtX2luaXRfX3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KTsKKworYm9vbCBpOTE1X2dlbV9sb2FkX3Bvd2VyX2NvbnRleHQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpOwordm9pZCBpOTE1X2dlbV9yZXN1bWUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOworCit2b2lkIGk5MTVfZ2VtX3VucGFyayhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7Cit2b2lkIGk5MTVfZ2VtX3Bhcmsoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpOworCit2b2lkIGk5MTVfZ2VtX2lkbGVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yayk7CisKK3ZvaWQgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7Cit2b2lkIGk5MTVfZ2VtX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSk7CisKKyNlbmRpZiAvKiBfX0k5MTVfR0VNX1BNX0hfXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKaW5k ZXggNmY1MmNhODgxMTczLi45ZDY0NmZhMWI3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAg c3RhdGljIGludCBfX2lndF9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCiAJCS8qIFhYWCBCb251cyBwb2ludHMgZm9yIHByb3Zpbmcgd2UgYXJl IHRoZSBrZXJuZWwgY29udGV4dCEgKi8KIAogCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwotCQlkcmFpbl9kZWxheWVkX3dvcmsoJmk5MTUtPmd0LmlkbGVfd29yayk7CisJ CWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLmlkbGVfd29yayk7CiAJCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jCmluZGV4IDk3MTE0OGZiZTZmNS4uMTJmYzUz YzY5NGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9n ZW1fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2Vt X29iamVjdC5jCkBAIC01MTQsOCArNTE0LDggQEAgc3RhdGljIHZvaWQgZGlzYWJsZV9yZXRpcmVf d29ya2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCX0KIAltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZp OTE1LT5ndC5yZXRpcmVfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpOTE1LT5n dC5pZGxlX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaTkxNS0+Z2VtLnJldGly ZV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmk5MTUtPmdlbS5pZGxlX3dvcmsp OwogfQogCiBzdGF0aWMgaW50IGlndF9tbWFwX29mZnNldF9leGhhdXN0aW9uKHZvaWQgKmFyZykK QEAgLTYxNyw5ICs2MTcsOSBAQCBzdGF0aWMgaW50IGlndF9tbWFwX29mZnNldF9leGhhdXN0aW9u KHZvaWQgKmFyZykKIG91dF9wYXJrOgogCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwogCWlmICgtLWk5MTUtPmd0LmFjdGl2ZV9yZXF1ZXN0cykKLQkJcXVldWVfZGVsYXllZF93 b3JrKGk5MTUtPndxLCAmaTkxNS0+Z3QucmV0aXJlX3dvcmssIDApOworCQlxdWV1ZV9kZWxheWVk X3dvcmsoaTkxNS0+d3EsICZpOTE1LT5nZW0ucmV0aXJlX3dvcmssIDApOwogCWVsc2UKLQkJcXVl dWVfZGVsYXllZF93b3JrKGk5MTUtPndxLCAmaTkxNS0+Z3QuaWRsZV93b3JrLCAwKTsKKwkJcXVl dWVfZGVsYXllZF93b3JrKGk5MTUtPndxLCAmaTkxNS0+Z2VtLmlkbGVfd29yaywgMCk7CiAJbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKIAlpOTE1X2dlbV9zaHJpbmtlcl9y ZWdpc3RlcihpOTE1KTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCmluZGV4IGY0NDRlZTVhZGQyNy4uZmI2NzdiNDAx OWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1f ZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2Rl dmljZS5jCkBAIC01OSw4ICs1OSw4IEBAIHN0YXRpYyB2b2lkIG1vY2tfZGV2aWNlX3JlbGVhc2Uo c3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlpOTE1X2dlbV9jb250ZXh0c19sb3N0KGk5MTUpOwog CW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CiAKLQlkcmFpbl9kZWxheWVk X3dvcmsoJmk5MTUtPmd0LnJldGlyZV93b3JrKTsKLQlkcmFpbl9kZWxheWVkX3dvcmsoJmk5MTUt Pmd0LmlkbGVfd29yayk7CisJZHJhaW5fZGVsYXllZF93b3JrKCZpOTE1LT5nZW0ucmV0aXJlX3dv cmspOworCWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z2VtLmlkbGVfd29yayk7CiAJaTkxNV9n ZW1fZHJhaW5fd29ya3F1ZXVlKGk5MTUpOwogCiAJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7CkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgbW9ja19yZXRpcmVfd29y a19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHN0YXRpYyB2b2lkIG1vY2tfaWRs ZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaTkxNSks IGd0LmlkbGVfd29yay53b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaTkxNSks IGdlbS5pZGxlX3dvcmsud29yayk7CiAKIAlpOTE1LT5ndC5hY3RpdmVfZW5naW5lcyA9IDA7CiB9 CkBAIC0xOTcsOCArMTk3LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKm1vY2tfZ2VtX2Rl dmljZSh2b2lkKQogCiAJbW9ja19pbml0X2NvbnRleHRzKGk5MTUpOwogCi0JSU5JVF9ERUxBWUVE X1dPUksoJmk5MTUtPmd0LnJldGlyZV93b3JrLCBtb2NrX3JldGlyZV93b3JrX2hhbmRsZXIpOwot CUlOSVRfREVMQVlFRF9XT1JLKCZpOTE1LT5ndC5pZGxlX3dvcmssIG1vY2tfaWRsZV93b3JrX2hh bmRsZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZpOTE1LT5nZW0ucmV0aXJlX3dvcmssIG1vY2tf cmV0aXJlX3dvcmtfaGFuZGxlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmk5MTUtPmdlbS5pZGxl X3dvcmssIG1vY2tfaWRsZV93b3JrX2hhbmRsZXIpOwogCiAJaTkxNS0+Z3QuYXdha2UgPSB0cnVl OwogCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeA==