From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: =?UTF-8?q?=5BPATCH=2012/26=5D=20vmwgfx=3A=20Add=20screen=20object=20support?= Date: Tue, 4 Oct 2011 20:13:22 +0200 Message-ID: <1317752016-2680-13-git-send-email-thellstrom@vmware.com> References: <1317752016-2680-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp-outbound-2.vmware.com (smtp-outbound-2.vmware.com [65.115.85.73]) by gabe.freedesktop.org (Postfix) with ESMTP id 460A8A0998 for ; Tue, 4 Oct 2011 11:14:14 -0700 (PDT) In-Reply-To: <1317752016-2680-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@gmail.com Cc: Thomas Hellstrom , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogSmFrb2IgQm9ybmVjcmFudHogPGpha29iQHZtd2FyZS5jb20+CgpTaWduZWQtb2ZmLWJ5 OiBKYWtvYiBCb3JuZWNyYW50eiA8amFrb2JAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhv bWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS92bXdnZngvTWFrZWZpbGUgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2Rydi5jICB8ICAgMzQgKystCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuaCAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jICB8ICAx NjUgKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggIHwgICAx MCArCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9sZHUuYyAgfCAgICA1ICstCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMgfCAgNTY2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNzUyIGluc2VydGlvbnMoKyksIDMx IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3Njcm4uYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCmluZGV4IGUxM2ExMTguLjU4Njg2 OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUKKysrIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQpAQCAtNSw2ICs1LDYgQEAgdm13Z2Z4LXkgOj0g dm13Z2Z4X2V4ZWNidWYubyB2bXdnZnhfZ21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBc CiAJICAgIHZtd2dmeF9mYi5vIHZtd2dmeF9pb2N0bC5vIHZtd2dmeF9yZXNvdXJjZS5vIHZtd2dm eF9idWZmZXIubyBcCiAJICAgIHZtd2dmeF9maWZvLm8gdm13Z2Z4X2lycS5vIHZtd2dmeF9sZHUu byB2bXdnZnhfdHRtX2dsdWUubyBcCiAJICAgIHZtd2dmeF9vdmVybGF5Lm8gdm13Z2Z4X21hcmtl ci5vIHZtd2dmeF9nbXJpZF9tYW5hZ2VyLm8gXAotCSAgICB2bXdnZnhfZmVuY2UubyB2bXdnZnhf ZG1hYnVmLm8KKwkgICAgdm13Z2Z4X2ZlbmNlLm8gdm13Z2Z4X2RtYWJ1Zi5vIHZtd2dmeF9zY3Ju Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpIDo9IHZtd2dmeC5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2Rydi5jCmluZGV4IGQ0ODI5Y2IuLmQxZTEzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2Rydi5jCkBAIC00NTEsMjIgKzQ1MSwyOCBAQCBzdGF0aWMgaW50IHZtd19kcml2 ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGNoaXBzZXQpCiAJ ZGV2X3ByaXYtPmZtYW4gPSB2bXdfZmVuY2VfbWFuYWdlcl9pbml0KGRldl9wcml2KTsKIAlpZiAo dW5saWtlbHkoZGV2X3ByaXYtPmZtYW4gPT0gTlVMTCkpCiAJCWdvdG8gb3V0X25vX2ZtYW47CisK KwkvKiBOZWVkIHRvIHN0YXJ0IHRoZSBmaWZvIHRvIGNoZWNrIGlmIHdlIGNhbiBkbyBzY3JlZW4g b2JqZWN0cyAqLworCXJldCA9IHZtd18zZF9yZXNvdXJjZV9pbmMoZGV2X3ByaXYsIHRydWUpOwor CWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX2ZpZm87CisJdm13X2ttc19z YXZlX3ZnYShkZXZfcHJpdik7CisJRFJNX0lORk8oIiVzIiwgdm13X2ZpZm9faGF2ZV8zZChkZXZf cHJpdikgPworCQkgIkRldGVjdGVkIGRldmljZSAzRCBhdmFpbGFiaWxpdHkuXG4iIDoKKwkJICJE ZXRlY3RlZCBubyBkZXZpY2UgM0QgYXZhaWxhYmlsaXR5LlxuIik7CisKKwkvKiBTdGFydCBrbXMg YW5kIG92ZXJsYXkgc3lzdGVtcywgbmVlZHMgZmlmby4gKi8KIAlyZXQgPSB2bXdfa21zX2luaXQo ZGV2X3ByaXYpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X25vX2ttczsK IAl2bXdfb3ZlcmxheV9pbml0KGRldl9wcml2KTsKKworCS8qIFdlIG1pZ2h0IGJlIGRvbmUgd2l0 aCB0aGUgZmlmbyBub3cgKi8KIAlpZiAoZGV2X3ByaXYtPmVuYWJsZV9mYikgewotCQlyZXQgPSB2 bXdfM2RfcmVzb3VyY2VfaW5jKGRldl9wcml2LCBmYWxzZSk7Ci0JCWlmICh1bmxpa2VseShyZXQg IT0gMCkpCi0JCQlnb3RvIG91dF9ub19maWZvOwotCQl2bXdfa21zX3NhdmVfdmdhKGRldl9wcml2 KTsKIAkJdm13X2ZiX2luaXQoZGV2X3ByaXYpOwotCQlEUk1fSU5GTygiJXMiLCB2bXdfZmlmb19o YXZlXzNkKGRldl9wcml2KSA/Ci0JCQkgIkRldGVjdGVkIGRldmljZSAzRCBhdmFpbGFiaWxpdHku XG4iIDoKLQkJCSAiRGV0ZWN0ZWQgbm8gZGV2aWNlIDNEIGF2YWlsYWJpbGl0eS5cbiIpOwogCX0g ZWxzZSB7Ci0JCURSTV9JTkZPKCJEZWxheWVkIDNEIGRldGVjdGlvbiBzaW5jZSB3ZSdyZSBub3Qg IgotCQkJICJydW5uaW5nIHRoZSBkZXZpY2UgaW4gU1ZHQSBtb2RlIHlldC5cbiIpOworCQl2bXdf a21zX3Jlc3RvcmVfdmdhKGRldl9wcml2KTsKKwkJdm13XzNkX3Jlc291cmNlX2RlYyhkZXZfcHJp diwgdHJ1ZSk7CiAJfQogCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9J UlFNQVNLKSB7CkBAIC00ODMsMTUgKzQ4OSwxNyBAQCBzdGF0aWMgaW50IHZtd19kcml2ZXJfbG9h ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGNoaXBzZXQpCiAJcmV0dXJu IDA7CiAKIG91dF9ub19pcnE6Ci0JaWYgKGRldl9wcml2LT5lbmFibGVfZmIpIHsKKwlpZiAoZGV2 X3ByaXYtPmVuYWJsZV9mYikKIAkJdm13X2ZiX2Nsb3NlKGRldl9wcml2KTsKKwl2bXdfb3Zlcmxh eV9jbG9zZShkZXZfcHJpdik7CisJdm13X2ttc19jbG9zZShkZXZfcHJpdik7CitvdXRfbm9fa21z OgorCS8qIFdlIHN0aWxsIGhhdmUgYSAzRCByZXNvdXJjZSByZWZlcmVuY2UgaGVsZCAqLworCWlm IChkZXZfcHJpdi0+ZW5hYmxlX2ZiKSB7CiAJCXZtd19rbXNfcmVzdG9yZV92Z2EoZGV2X3ByaXYp OwogCQl2bXdfM2RfcmVzb3VyY2VfZGVjKGRldl9wcml2LCBmYWxzZSk7CiAJfQogb3V0X25vX2Zp Zm86Ci0Jdm13X292ZXJsYXlfY2xvc2UoZGV2X3ByaXYpOwotCXZtd19rbXNfY2xvc2UoZGV2X3By aXYpOwotb3V0X25vX2ttczoKIAl2bXdfZmVuY2VfbWFuYWdlcl90YWtlZG93bihkZXZfcHJpdi0+ Zm1hbik7CiBvdXRfbm9fZm1hbjoKIAlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDVhY2YxZjIuLjIxMjRmYmMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0yMTcsNiArMjE3LDcgQEAgc3RydWN0IHZtd19wcml2YXRl IHsKIAogCXZvaWQgKmZiX2luZm87CiAJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheSAqbGR1X3By aXY7CisJc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKnNvdV9wcml2OwogCXN0cnVj dCB2bXdfb3ZlcmxheSAqb3ZlcmxheV9wcml2OwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfa21zLmMKaW5kZXggYjNkNTEyMC4uMzQ2ZTIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfa21zLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgInZtd2dmeF9rbXMuaCIKIAor CiAvKiBNaWdodCBuZWVkIGEgaHJ0aW1lciBoZXJlPyAqLwogI2RlZmluZSBWTVdHRlhfUFJFU0VO VF9SQVRFICgoSFogLyA2MCA+IDApID8gSFogLyA2MCA6IDEpCiAKQEAgLTQ3NCw2ICs0NzUsNjIg QEAgc3RhdGljIGludCBkb19zdXJmYWNlX2RpcnR5X2xkdShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAogCiAJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkgKyAobnVt X2NsaXBzIC0gMSkgKgogCQkJc2l6ZW9mKGNtZC0+Y3IpKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGRvX3N1cmZhY2VfZGlydHlfc291KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYsCisJCQkJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJc3RydWN0 IHZtd19zdXJmYWNlICpzdXJmLAorCQkJCXVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwK KwkJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJCQkJdW5zaWduZWQgbnVtX2NsaXBz LCBpbnQgaW5jKQoreworCWludCBsZWZ0ID0gY2xpcHMtPngyLCByaWdodCA9IGNsaXBzLT54MTsK KwlpbnQgdG9wID0gY2xpcHMtPnkyLCBib3R0b20gPSBjbGlwcy0+eTE7CisJc2l6ZV90IGZpZm9f c2l6ZTsKKwlpbnQgaTsKKworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJ CVNWR0EzZENtZEJsaXRTdXJmYWNlVG9TY3JlZW4gYm9keTsKKwl9ICpjbWQ7CisKKworCWZpZm9f c2l6ZSA9IHNpemVvZigqY21kKTsKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBm aWZvX3NpemUpOworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJG aWZvIHJlc2VydmUgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNl dChjbWQsIDAsIGZpZm9fc2l6ZSk7CisKKwljbWQtPmhlYWRlci5pZCA9IGNwdV90b19sZTMyKFNW R0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4pOworCWNtZC0+aGVhZGVyLnNpemUgPSBj cHVfdG9fbGUzMihzaXplb2YoY21kLT5ib2R5KSk7CisKKwljbWQtPmJvZHkuc3JjSW1hZ2Uuc2lk ID0gY3B1X3RvX2xlMzIoc3VyZi0+cmVzLmlkKTsKKwljbWQtPmJvZHkuZGVzdFNjcmVlbklkID0g U1ZHQV9JRF9JTlZBTElEOyAvKiB2aXJ0dWFsIGNvb3JkcyAqLworCisJZm9yIChpID0gMDsgaSA8 IG51bV9jbGlwczsgaSsrLCBjbGlwcyArPSBpbmMpIHsKKwkJbGVmdCA9IG1pbl90KGludCwgbGVm dCwgKGludCljbGlwcy0+eDEpOworCQlyaWdodCA9IG1heF90KGludCwgcmlnaHQsIChpbnQpY2xp cHMtPngyKTsKKwkJdG9wID0gbWluX3QoaW50LCB0b3AsIChpbnQpY2xpcHMtPnkxKTsKKwkJYm90 dG9tID0gbWF4X3QoaW50LCBib3R0b20sIChpbnQpY2xpcHMtPnkyKTsKKwl9CisKKwljbWQtPmJv ZHkuc3JjUmVjdC5sZWZ0ID0gbGVmdDsKKwljbWQtPmJvZHkuc3JjUmVjdC5yaWdodCA9IHJpZ2h0 OworCWNtZC0+Ym9keS5zcmNSZWN0LnRvcCA9IHRvcDsKKwljbWQtPmJvZHkuc3JjUmVjdC5ib3R0 b20gPSBib3R0b207CisKKwljbWQtPmJvZHkuZGVzdFJlY3QubGVmdCA9IGxlZnQ7CisJY21kLT5i b2R5LmRlc3RSZWN0LnJpZ2h0ID0gcmlnaHQ7CisJY21kLT5ib2R5LmRlc3RSZWN0LnRvcCA9IHRv cDsKKwljbWQtPmJvZHkuZGVzdFJlY3QuYm90dG9tID0gYm90dG9tOworCisJdm13X2ZpZm9fY29t bWl0KGRldl9wcml2LCBmaWZvX3NpemUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5OCw5ICs1 NTUsOCBAQCBpbnQgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGlydHkoc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJu IHJldDsKIAotCWlmICghbnVtX2NsaXBzIHx8Ci0JICAgICEoZGV2X3ByaXYtPmZpZm8uY2FwYWJp bGl0aWVzICYKLQkgICAgICBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QpKSB7CisJLyogQXJl IHdlIHVzaW5nIHNjcmVlbiBvYmplY3RzPyAqLworCWlmICghZGV2X3ByaXYtPnNvdV9wcml2KSB7 CiAJCWludCByZXQ7CiAKIAkJbXV0ZXhfbG9jaygmdmZicy0+d29ya19sb2NrKTsKQEAgLTUyOCw5 ICs1ODQsMTQgQEAgaW50IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2RpcnR5KHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQlpbmMgPSAyOyAvKiBza2lwIHNvdXJjZSByZWN0 cyAqLwogCX0KIAotCXJldCA9IGRvX3N1cmZhY2VfZGlydHlfbGR1KGRldl9wcml2LCAmdmZicy0+ YmFzZSwgc3VyZiwKLQkJCQkgICBmbGFncywgY29sb3IsCi0JCQkJICAgY2xpcHMsIG51bV9jbGlw cywgaW5jKTsKKwlpZiAoIWRldl9wcml2LT5zb3VfcHJpdikKKwkJcmV0ID0gZG9fc3VyZmFjZV9k aXJ0eV9sZHUoZGV2X3ByaXYsICZ2ZmJzLT5iYXNlLCBzdXJmLAorCQkJCQkgICBmbGFncywgY29s b3IsCisJCQkJCSAgIGNsaXBzLCBudW1fY2xpcHMsIGluYyk7CisJZWxzZQorCQlyZXQgPSBkb19z dXJmYWNlX2RpcnR5X3NvdShkZXZfcHJpdiwgJnZmYnMtPmJhc2UsIHN1cmYsCisJCQkJCSAgIGZs YWdzLCBjb2xvciwKKwkJCQkJICAgY2xpcHMsIG51bV9jbGlwcywgaW5jKTsKIAogCXR0bV9yZWFk X3VubG9jaygmdm1hc3Rlci0+bG9jayk7CiAJcmV0dXJuIDA7CkBAIC02MTgsOCArNjc5LDEzIEBA IHN0YXRpYyBpbnQgdm13X2ttc19uZXdfZnJhbWVidWZmZXJfc3VyZmFjZShzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2LAogCXZmYnMtPmJhc2UuYmFzZS5kZXB0aCA9IG1vZGVfY21kLT5kZXB0 aDsKIAl2ZmJzLT5iYXNlLmJhc2Uud2lkdGggPSBtb2RlX2NtZC0+d2lkdGg7CiAJdmZicy0+YmFz ZS5iYXNlLmhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQ7Ci0JdmZicy0+YmFzZS5waW4gPSAmdm13 X3N1cmZhY2VfZG1hYnVmX3BpbjsKLQl2ZmJzLT5iYXNlLnVucGluID0gJnZtd19zdXJmYWNlX2Rt YWJ1Zl91bnBpbjsKKwkvKiBEb24ndCBuZWVkIHRvIGZpbGwgc3RhcnQgb2YgdnJhbSB3aXRoIGVt cHR5CisJICogYnVmZmVyIGlmIHdlIGhhdmUgc2NyZWVuIG9iamVjdHMgc3VwcG9ydC4KKwkgKi8K KwlpZiAoIWRldl9wcml2LT5zb3VfcHJpdikgeworCQl2ZmJzLT5iYXNlLnBpbiA9ICZ2bXdfc3Vy ZmFjZV9kbWFidWZfcGluOworCQl2ZmJzLT5iYXNlLnVucGluID0gJnZtd19zdXJmYWNlX2RtYWJ1 Zl91bnBpbjsKKwl9CiAJdmZicy0+c3VyZmFjZSA9IHN1cmZhY2U7CiAJdmZicy0+bWFzdGVyID0g ZHJtX21hc3Rlcl9nZXQoZmlsZV9wcml2LT5tYXN0ZXIpOwogCW11dGV4X2luaXQoJnZmYnMtPndv cmtfbG9jayk7CkBAIC02NTEsNiArNzE3LDcgQEAgb3V0X2VycjE6CiBzdHJ1Y3Qgdm13X2ZyYW1l YnVmZmVyX2RtYWJ1ZiB7CiAJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciBiYXNlOwogCXN0cnVjdCB2 bXdfZG1hX2J1ZmZlciAqYnVmZmVyOworCXVpbnQzMl90IGhhbmRsZTsKIH07CiAKIHZvaWQgdm13 X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1l YnVmZmVyKQpAQCAtNjk5LDYgKzc2Niw2MyBAQCBzdGF0aWMgaW50IGRvX2RtYWJ1Zl9kaXJ0eV9s ZHUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IGludCBkb19kbWFidWZfZGlydHlfc291KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJ ICAgICAgIHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgc3RydWN0IHZt d19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkgICAgICAgc3RydWN0IHZtd19kbWFfYnVm ZmVyICpidWZmZXIsCisJCQkgICAgICAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAor CQkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCSAgICAgICB1bnNpZ25l ZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQpCit7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9k bWFidWYgKnZmYmQgPQorCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZiZCgmZnJhbWVidWZmZXItPmJh c2UpOworCXNpemVfdCBmaWZvX3NpemU7CisJaW50IGksIHJldDsKKworCXN0cnVjdCB7CisJCXVp bnQzMl90IGhlYWRlcjsKKwkJU1ZHQUZpZm9DbWREZWZpbmVHTVJGQiBib2R5OworCX0gKmNtZDsK KwlzdHJ1Y3QgeworCQl1aW50MzJfdCBoZWFkZXI7CisJCVNWR0FGaWZvQ21kQmxpdEdNUkZCVG9T Y3JlZW4gYm9keTsKKwl9ICpibGl0czsKKworCWZpZm9fc2l6ZSA9IHNpemVvZigqY21kKSArIHNp emVvZigqYmxpdHMpICogbnVtX2NsaXBzOworCWNtZCA9IGttYWxsb2MoZmlmb19zaXplLCBHRlBf S0VSTkVMKTsKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBjbWQgYnVmZmVyLlxuIik7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCW1lbXNldChjbWQsIDAsIGZpZm9fc2l6ZSk7CisJY21kLT5oZWFkZXIgPSBT VkdBX0NNRF9ERUZJTkVfR01SRkI7CisJY21kLT5ib2R5LmZvcm1hdC5iaXRzUGVyUGl4ZWwgPSBm cmFtZWJ1ZmZlci0+YmFzZS5iaXRzX3Blcl9waXhlbDsKKwljbWQtPmJvZHkuZm9ybWF0LmNvbG9y RGVwdGggPSBmcmFtZWJ1ZmZlci0+YmFzZS5kZXB0aDsKKwljbWQtPmJvZHkuZm9ybWF0LnJlc2Vy dmVkID0gMDsKKwljbWQtPmJvZHkuYnl0ZXNQZXJMaW5lID0gZnJhbWVidWZmZXItPmJhc2UucGl0 Y2g7CisJY21kLT5ib2R5LnB0ci5nbXJJZCA9IHZmYmQtPmhhbmRsZTsKKwljbWQtPmJvZHkucHRy Lm9mZnNldCA9IDA7CisKKwlibGl0cyA9ICh2b2lkICopJmNtZFsxXTsKKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzICs9IGluY3JlbWVudCkgeworCQlibGl0c1tpXS5oZWFk ZXIgPSBTVkdBX0NNRF9CTElUX0dNUkZCX1RPX1NDUkVFTjsKKwkJYmxpdHNbaV0uYm9keS5zcmNP cmlnaW4ueCA9IGNsaXBzLT54MTsKKwkJYmxpdHNbaV0uYm9keS5zcmNPcmlnaW4ueSA9IGNsaXBz LT55MTsKKwkJYmxpdHNbaV0uYm9keS5kZXN0UmVjdC5sZWZ0ID0gY2xpcHMtPngxOworCQlibGl0 c1tpXS5ib2R5LmRlc3RSZWN0LnRvcCA9IGNsaXBzLT55MTsKKwkJYmxpdHNbaV0uYm9keS5kZXN0 UmVjdC5yaWdodCA9IGNsaXBzLT54MjsKKwkJYmxpdHNbaV0uYm9keS5kZXN0UmVjdC5ib3R0b20g PSBjbGlwcy0+eTI7CisJfQorCisJcmV0ID0gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYs IGRldl9wcml2LCBOVUxMLCBjbWQsCisJCQkJICBmaWZvX3NpemUsIDAsIE5VTEwpOworCisJa2Zy ZWUoY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVm X2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCSBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9y LApAQCAtNzI4LDkgKzg1MiwxNSBAQCBpbnQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kaXJ0eShz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKIAkJaW5jcmVtZW50ID0gMjsKIAl9 CiAKLQlyZXQgPSBkb19kbWFidWZfZGlydHlfbGR1KGRldl9wcml2LCAmdmZiZC0+YmFzZSwgZG1h YnVmLAotCQkJCSAgZmxhZ3MsIGNvbG9yLAotCQkJCSAgY2xpcHMsIG51bV9jbGlwcywgaW5jcmVt ZW50KTsKKwlpZiAoZGV2X3ByaXYtPmxkdV9wcml2KSB7CisJCXJldCA9IGRvX2RtYWJ1Zl9kaXJ0 eV9sZHUoZGV2X3ByaXYsICZ2ZmJkLT5iYXNlLCBkbWFidWYsCisJCQkJCSAgZmxhZ3MsIGNvbG9y LAorCQkJCQkgIGNsaXBzLCBudW1fY2xpcHMsIGluY3JlbWVudCk7CisJfSBlbHNlIHsKKwkJcmV0 ID0gZG9fZG1hYnVmX2RpcnR5X3NvdShmaWxlX3ByaXYsIGRldl9wcml2LCAmdmZiZC0+YmFzZSwK KwkJCQkJICBkbWFidWYsIGZsYWdzLCBjb2xvciwKKwkJCQkJICBjbGlwcywgbnVtX2NsaXBzLCBp bmNyZW1lbnQpOworCX0KIAogCXR0bV9yZWFkX3VubG9jaygmdm1hc3Rlci0+bG9jayk7CiAJcmV0 dXJuIHJldDsKQEAgLTgwMSw2ICs5MzEsOCBAQCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9k bWFidWZfcGluKHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYikKIAkJdm13X2ZyYW1lYnVmZmVy X3RvX3ZmYmQoJnZmYi0+YmFzZSk7CiAJaW50IHJldDsKIAorCS8qIFRoaXMgY29kZSBzaG91bGQg bm90IGJlIHVzZWQgd2l0aCBzY3JlZW4gb2JqZWN0cyAqLworCUJVR19PTihkZXZfcHJpdi0+c291 X3ByaXYpOwogCiAJdm13X292ZXJsYXlfcGF1c2VfYWxsKGRldl9wcml2KTsKIApAQCAtODY3LDkg Kzk5OSwxMiBAQCBzdGF0aWMgaW50IHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVyX2RtYWJ1ZihzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCXZmYmQtPmJhc2UuYmFzZS5kZXB0aCA9IG1vZGVf Y21kLT5kZXB0aDsKIAl2ZmJkLT5iYXNlLmJhc2Uud2lkdGggPSBtb2RlX2NtZC0+d2lkdGg7CiAJ dmZiZC0+YmFzZS5iYXNlLmhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQ7Ci0JdmZiZC0+YmFzZS5w aW4gPSB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX3BpbjsKLQl2ZmJkLT5iYXNlLnVucGluID0gdm13 X2ZyYW1lYnVmZmVyX2RtYWJ1Zl91bnBpbjsKKwlpZiAoIWRldl9wcml2LT5zb3VfcHJpdikgewor CQl2ZmJkLT5iYXNlLnBpbiA9IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfcGluOworCQl2ZmJkLT5i YXNlLnVucGluID0gdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl91bnBpbjsKKwl9CiAJdmZiZC0+YnVm ZmVyID0gZG1hYnVmOworCXZmYmQtPmhhbmRsZSA9IG1vZGVfY21kLT5oYW5kbGU7CiAJKm91dCA9 ICZ2ZmJkLT5iYXNlOwogCiAJcmV0dXJuIDA7CkBAIC05ODEsNyArMTExNiw5IEBAIGludCB2bXdf a21zX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIAlkZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IDgxOTI7CiAJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gODE5MjsK IAotCXJldCA9IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oZGV2X3ByaXYpOwor CXJldCA9IHZtd19rbXNfaW5pdF9zY3JlZW5fb2JqZWN0X2Rpc3BsYXkoZGV2X3ByaXYpOworCWlm IChyZXQpIC8qIEZhbGxiYWNrICovCisJCSh2b2lkKXZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxh eV9zeXN0ZW0oZGV2X3ByaXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2ttcy5oCmluZGV4IDRlNDMxM2YuLmVlMTZhMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2ttcy5oCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUg InZtd2dmeF9kcnYuaCIKIAorI2RlZmluZSBWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFMgOAorCiAK ICNkZWZpbmUgdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYih4KSBcCiAJY29udGFpbmVyX29mKHgsIHN0 cnVjdCB2bXdfZnJhbWVidWZmZXIsIGJhc2UpCkBAIC0xMjgsNCArMTMwLDEyIEBAIGludCB2bXdf ZHVfdXBkYXRlX2xheW91dChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCBu dW0sCiBpbnQgdm13X2ttc19pbml0X2xlZ2FjeV9kaXNwbGF5X3N5c3RlbShzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2KTsKIGludCB2bXdfa21zX2Nsb3NlX2xlZ2FjeV9kaXNwbGF5X3N5c3Rl bShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKIAorLyoKKyAqIFNjcmVlbiBPYmplY3Rz IGRpc3BsYXkgZnVuY3Rpb25zIC0gdm13Z2Z4X3Njcm4uYworICovCitpbnQgdm13X2ttc19pbml0 X3NjcmVlbl9vYmplY3RfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK2lu dCB2bXdfa21zX2Nsb3NlX3NjcmVlbl9vYmplY3RfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2KTsKK2ludCB2bXdfa21zX3NvdV91cGRhdGVfbGF5b3V0KHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYsIHVuc2lnbmVkIG51bSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fdm13X3Jl Y3QgKnJlY3RzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9sZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCmluZGV4 IDRhNGU1Y2MuLjdmYzhlN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2xkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCkBAIC0y Nyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJ2bXdnZnhfa21zLmgiCiAKLSNkZWZpbmUgVk1XR0ZY X0xEVV9OVU1fRFUgOAogCiAjZGVmaW5lIHZtd19jcnRjX3RvX2xkdSh4KSBcCiAJY29udGFpbmVy X29mKHgsIHN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCwgYmFzZS5jcnRjKQpAQCAtMzg0 LDkgKzM4Myw5IEBAIGludCB2bXdfa21zX2luaXRfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJZHJtX21vZGVfY3JlYXRlX2RpcnR5X2luZm9fcHJv cGVydHkoZGV2X3ByaXYtPmRldik7CiAKIAlpZiAoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNW R0FfQ0FQX01VTFRJTU9OKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBWTVdHRlhfTERVX05VTV9EVTsg KytpKQorCQlmb3IgKGkgPSAwOyBpIDwgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTOyArK2kpCiAJ CQl2bXdfbGR1X2luaXQoZGV2X3ByaXYsIGkpOwotCQlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2 LCBWTVdHRlhfTERVX05VTV9EVSk7CisJCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIFZNV0dG WF9OVU1fRElTUExBWV9VTklUUyk7CiAJfSBlbHNlIHsKIAkJLyogZm9yIG9sZCBoYXJkd2FyZSB3 aXRob3V0IG11bHRpbW9uIG9ubHkgZW5hYmxlIG9uZSBkaXNwbGF5ICovCiAJCXZtd19sZHVfaW5p dChkZXZfcHJpdiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9zY3JuLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0YjhlMwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYwpAQCAtMCwwICsxLDU2NiBAQAorLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTEgVk13YXJlLCBJbmMuLCBQ YWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24g dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0 cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNV UFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RI RVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2bXdnZnhfa21zLmgiCisKKwor I2RlZmluZSB2bXdfY3J0Y190b19zb3UoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13 X3NjcmVlbl9vYmplY3RfdW5pdCwgYmFzZS5jcnRjKQorI2RlZmluZSB2bXdfZW5jb2Rlcl90b19z b3UoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5pdCwg YmFzZS5lbmNvZGVyKQorI2RlZmluZSB2bXdfY29ubmVjdG9yX3RvX3NvdSh4KSBcCisJY29udGFp bmVyX29mKHgsIHN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0LCBiYXNlLmNvbm5lY3RvcikK Kworc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgeworCXN0cnVjdCBsaXN0X2hlYWQg YWN0aXZlOworCisJdW5zaWduZWQgbnVtX2FjdGl2ZTsKKwl1bnNpZ25lZCBsYXN0X251bV9hY3Rp dmU7CisKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmYjsKK307CisKKy8qKgorICogRGlzcGxh eSB1bml0IHVzaW5nIHNjcmVlbiBvYmplY3RzLgorICovCitzdHJ1Y3Qgdm13X3NjcmVlbl9vYmpl Y3RfdW5pdCB7CisJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgYmFzZTsKKworCXVuc2lnbmVkIGxv bmcgYnVmZmVyX3NpemU7IC8qKjwgU2l6ZSBvZiBhbGxvY2F0ZWQgYnVmZmVyICovCisJc3RydWN0 IHZtd19kbWFfYnVmZmVyICpidWZmZXI7IC8qKjwgQmFja2luZyBzdG9yZSBidWZmZXIgKi8KKwor CWJvb2wgZGVmaW5lZDsKKworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOworfTsKKworc3RhdGlj IHZvaWQgdm13X3NvdV9kZXN0cm95KHN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpzb3Up Cit7CisJbGlzdF9kZWxfaW5pdCgmc291LT5hY3RpdmUpOworCXZtd19kaXNwbGF5X3VuaXRfY2xl YW51cCgmc291LT5iYXNlKTsKKwlrZnJlZShzb3UpOworfQorCisKKy8qCisgKiBTY3JlZW4gT2Jq ZWN0IERpc3BsYXkgVW5pdCBDUlRDIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHZtd19z b3VfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwl2bXdfc291X2Rlc3Ry b3kodm13X2NydGNfdG9fc291KGNydGMpKTsKK30KKworc3RhdGljIGludCB2bXdfc291X2RlbF9h Y3RpdmUoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2bXdf c2NyZWVuX29iamVjdF91bml0ICpzb3UpCit7CisJc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rp c3BsYXkgKmxkID0gdm13X3ByaXYtPnNvdV9wcml2OworCWlmIChsaXN0X2VtcHR5KCZzb3UtPmFj dGl2ZSkpCisJCXJldHVybiAwOworCisJLyogTXVzdCBpbml0IG90aGVyd2lzZSBsaXN0X2VtcHR5 KCZzb3UtPmFjdGl2ZSkgd2lsbCBub3Qgd29yay4gKi8KKwlsaXN0X2RlbF9pbml0KCZzb3UtPmFj dGl2ZSk7CisJaWYgKC0tKGxkLT5udW1fYWN0aXZlKSA9PSAwKSB7CisJCUJVR19PTighbGQtPmZi KTsKKwkJaWYgKGxkLT5mYi0+dW5waW4pCisJCQlsZC0+ZmItPnVucGluKGxkLT5mYik7CisJCWxk LT5mYiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X3NvdV9h ZGRfYWN0aXZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCisJCQkgICAgICBzdHJ1Y3Qg dm13X3NjcmVlbl9vYmplY3RfdW5pdCAqc291LAorCQkJICAgICAgc3RydWN0IHZtd19mcmFtZWJ1 ZmZlciAqdmZiKQoreworCXN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF9kaXNwbGF5ICpsZCA9IHZt d19wcml2LT5zb3VfcHJpdjsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5pdCAqZW50cnk7 CisJc3RydWN0IGxpc3RfaGVhZCAqYXQ7CisKKwlCVUdfT04oIWxkLT5udW1fYWN0aXZlICYmIGxk LT5mYik7CisJaWYgKHZmYiAhPSBsZC0+ZmIpIHsKKwkJaWYgKGxkLT5mYiAmJiBsZC0+ZmItPnVu cGluKQorCQkJbGQtPmZiLT51bnBpbihsZC0+ZmIpOworCQlpZiAodmZiLT5waW4pCisJCQl2ZmIt PnBpbih2ZmIpOworCQlsZC0+ZmIgPSB2ZmI7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZzb3Ut PmFjdGl2ZSkpCisJCXJldHVybiAwOworCisJYXQgPSAmbGQtPmFjdGl2ZTsKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGVudHJ5LCAmbGQtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCWlmIChlbnRyeS0+YmFz ZS51bml0ID4gc291LT5iYXNlLnVuaXQpCisJCQlicmVhazsKKworCQlhdCA9ICZlbnRyeS0+YWN0 aXZlOworCX0KKworCWxpc3RfYWRkKCZzb3UtPmFjdGl2ZSwgYXQpOworCisJbGQtPm51bV9hY3Rp dmUrKzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFNlbmQgdGhlIGZpZm8gY29tbWFuZCB0 byBjcmVhdGUgYSBzY3JlZW4uCisgKi8KK3N0YXRpYyBpbnQgdm13X3NvdV9maWZvX2NyZWF0ZShz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIHN0cnVjdCB2bXdfc2NyZWVu X29iamVjdF91bml0ICpzb3UsCisJCQkgICAgICAgdWludDMyX3QgeCwgdWludDMyX3QgeSwKKwkJ CSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzaXplX3QgZmlmb19z aXplOworCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNtZFR5cGU7CisJCX0g aGVhZGVyOworCQlTVkdBU2NyZWVuT2JqZWN0IG9iajsKKwl9ICpjbWQ7CisKKwlCVUdfT04oIXNv dS0+YnVmZmVyKTsKKworCWZpZm9fc2l6ZSA9IHNpemVvZigqY21kKTsKKwljbWQgPSB2bXdfZmlm b19yZXNlcnZlKGRldl9wcml2LCBmaWZvX3NpemUpOworCS8qIFRoZSBoYXJkd2FyZSBoYXMgaHVu Zywgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgaGVyZS4gKi8KKwlpZiAodW5saWtlbHkoY21k ID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmlmbyByZXNlcnZlIGZhaWxlZC5cbiIpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY21kLCAwLCBmaWZvX3NpemUpOworCWNtZC0+ aGVhZGVyLmNtZFR5cGUgPSBTVkdBX0NNRF9ERUZJTkVfU0NSRUVOOworCWNtZC0+b2JqLnN0cnVj dFNpemUgPSBzaXplb2YoU1ZHQVNjcmVlbk9iamVjdCk7CisJY21kLT5vYmouaWQgPSBzb3UtPmJh c2UudW5pdDsKKwljbWQtPm9iai5mbGFncyA9IFNWR0FfU0NSRUVOX0hBU19ST09UIHwKKwkJKHNv dS0+YmFzZS51bml0ID09IDAgPyBTVkdBX1NDUkVFTl9JU19QUklNQVJZIDogMCk7CisJY21kLT5v Ymouc2l6ZS53aWR0aCA9IG1vZGUtPmhkaXNwbGF5OworCWNtZC0+b2JqLnNpemUuaGVpZ2h0ID0g bW9kZS0+dmRpc3BsYXk7CisJY21kLT5vYmoucm9vdC54ID0geDsKKwljbWQtPm9iai5yb290Lnkg PSB5OworCisJLyogT2sgdG8gYXNzdW1lIHRoYXQgYnVmZmVyIGlzIHBpbm5lZCBpbiB2cmFtICov CisJdm13X2RtYWJ1Zl9nZXRfZ3Vlc3RfcHRyKHNvdS0+YnVmZmVyLCAmY21kLT5vYmouYmFja2lu Z1N0b3JlLnB0cik7CisJY21kLT5vYmouYmFja2luZ1N0b3JlLnBpdGNoID0gbW9kZS0+aGRpc3Bs YXkgKiA0OworCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBmaWZvX3NpemUpOworCisJc291 LT5kZWZpbmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFNlbmQgdGhlIGZp Zm8gY29tbWFuZCB0byBkZXN0cm95IGEgc2NyZWVuLgorICovCitzdGF0aWMgaW50IHZtd19zb3Vf Zmlmb19kZXN0cm95KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IHZt d19zY3JlZW5fb2JqZWN0X3VuaXQgKnNvdSkKK3sKKwlzaXplX3QgZmlmb19zaXplOworCWludCBy ZXQ7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgY21kVHlwZTsKKwkJfSBo ZWFkZXI7CisJCVNWR0FGaWZvQ21kRGVzdHJveVNjcmVlbiBib2R5OworCX0gKmNtZDsKKworCS8q IG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KKwlpZiAodW5saWtlbHkoIXNvdS0+ZGVmaW5lZCkp CisJCXJldHVybiAwOworCisJZmlmb19zaXplID0gc2l6ZW9mKCpjbWQpOworCWNtZCA9IHZtd19m aWZvX3Jlc2VydmUoZGV2X3ByaXYsIGZpZm9fc2l6ZSk7CisJLyogdGhlIGhhcmR3YXJlIGhhcyBo dW5nLCBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBoZXJlICovCisJaWYgKHVubGlrZWx5KGNt ZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZpZm8gcmVzZXJ2ZSBmYWlsZWQuXG4iKTsKKwkJ cmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNtZCwgMCwgZmlmb19zaXplKTsKKwljbWQt PmhlYWRlci5jbWRUeXBlID0gU1ZHQV9DTURfREVTVFJPWV9TQ1JFRU47CisJY21kLT5ib2R5LnNj cmVlbklkID0gc291LT5iYXNlLnVuaXQ7CisKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIGZp Zm9fc2l6ZSk7CisKKwkvKiBGb3JjZSBzeW5jICovCisJcmV0ID0gdm13X2ZhbGxiYWNrX3dhaXQo ZGV2X3ByaXYsIGZhbHNlLCB0cnVlLCAwLCBmYWxzZSwgMypIWik7CisJaWYgKHVubGlrZWx5KHJl dCAhPSAwKSkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gc3luYyB3aXRoIEhXIik7CisJZWxzZQor CQlzb3UtPmRlZmluZWQgPSBmYWxzZTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogRnJl ZSB0aGUgYmFja2luZyBzdG9yZS4KKyAqLworc3RhdGljIHZvaWQgdm13X3NvdV9iYWNraW5nX2Zy ZWUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgc3RydWN0IHZtd19zY3JlZW5f b2JqZWN0X3VuaXQgKnNvdSkKK3sKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCisJ aWYgKHVubGlrZWx5KHNvdS0+YnVmZmVyID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlibyA9ICZz b3UtPmJ1ZmZlci0+YmFzZTsKKwl0dG1fYm9fdW5yZWYoJmJvKTsKKwlzb3UtPmJ1ZmZlciA9IE5V TEw7CisJc291LT5idWZmZXJfc2l6ZSA9IDA7Cit9CisKKy8qKgorICogQWxsb2NhdGUgdGhlIGJh Y2tpbmcgc3RvcmUgZm9yIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbnQgdm13X3NvdV9iYWNr aW5nX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIHN0cnVjdCB2bXdf c2NyZWVuX29iamVjdF91bml0ICpzb3UsCisJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlp bnQgcmV0OworCisJaWYgKHNvdS0+YnVmZmVyX3NpemUgPT0gc2l6ZSkKKwkJcmV0dXJuIDA7CisK KwlpZiAoc291LT5idWZmZXIpCisJCXZtd19zb3VfYmFja2luZ19mcmVlKGRldl9wcml2LCBzb3Up OworCisJc291LT5idWZmZXIgPSBremFsbG9jKHNpemVvZigqc291LT5idWZmZXIpLCBHRlBfS0VS TkVMKTsKKwlpZiAodW5saWtlbHkoc291LT5idWZmZXIgPT0gTlVMTCkpCisJCXJldHVybiAtRU5P TUVNOworCisJLyogQWZ0ZXIgd2UgaGF2ZSBhbGxvY2VkIHRoZSBiYWNraW5nIHN0b3JlIG1pZ2h0 IG5vdCBiZSBhYmxlIHRvCisJICogcmVzdW1lIHRoZSBvdmVybGF5cywgdGhpcyBpcyBwcmVmZXJy ZWQgdG8gZmFpbGluZyB0byBhbGxvYy4KKwkgKi8KKwl2bXdfb3ZlcmxheV9wYXVzZV9hbGwoZGV2 X3ByaXYpOworCXJldCA9IHZtd19kbWFidWZfaW5pdChkZXZfcHJpdiwgc291LT5idWZmZXIsIHNp emUsCisJCQkgICAgICAmdm13X3ZyYW1fbmVfcGxhY2VtZW50LAorCQkJICAgICAgZmFsc2UsICZ2 bXdfZG1hYnVmX2JvX2ZyZWUpOworCXZtd19vdmVybGF5X3Jlc3VtZV9hbGwoZGV2X3ByaXYpOwor CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJc291LT5idWZmZXIgPSBOVUxMOyAvKiB2bXdf ZG1hYnVmX2luaXQgZnJlZXMgb24gZXJyb3IgKi8KKwllbHNlCisJCXNvdS0+YnVmZmVyX3NpemUg PSBzaXplOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2bXdfc291X2NydGNfc2V0 X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpCit7CisJc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdjsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5pdCAqc291OworCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCB2bXdfZnJhbWVidWZm ZXIgKnZmYjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX2NydGMg KmNydGM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAoIXNldC0+Y3J0YykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIHNvdSAq LworCWNydGMgPSBzZXQtPmNydGM7CisJc291ID0gdm13X2NydGNfdG9fc291KGNydGMpOworCXZm YiA9IHNldC0+ZmIgPyB2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNldC0+ZmIpIDogTlVMTDsKKwlk ZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRldik7CisKKwlpZiAoc2V0LT5udW1fY29ubmVjdG9y cyA+IDEpIHsKKwkJRFJNX0VSUk9SKCJ0byBtYW55IGNvbm5lY3RvcnNcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAxICYmCisJICAgIHNl dC0+Y29ubmVjdG9yc1swXSAhPSAmc291LT5iYXNlLmNvbm5lY3RvcikgeworCQlEUk1fRVJST1Io ImNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAorCQkJc2V0LT5jb25uZWN0b3JzWzBd LCAmc291LT5iYXNlLmNvbm5lY3Rvcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNv dSBvbmx5IHN1cHBvcnRzIG9uZSBmYiBhY3RpdmUgYXQgdGhlIHRpbWUgKi8KKwlpZiAoZGV2X3By aXYtPnNvdV9wcml2LT5mYiAmJiB2ZmIgJiYKKwkgICAgIShkZXZfcHJpdi0+c291X3ByaXYtPm51 bV9hY3RpdmUgPT0gMSAmJgorCSAgICAgICFsaXN0X2VtcHR5KCZzb3UtPmFjdGl2ZSkpICYmCisJ ICAgIGRldl9wcml2LT5zb3VfcHJpdi0+ZmIgIT0gdmZiKSB7CisJCURSTV9FUlJPUigiTXVsdGlw bGUgZnJhbWVidWZmZXJzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwkvKiBzaW5jZSB0aGV5IGFsd2F5cyBtYXAgb25lIHRvIG9uZSB0aGVzZSBhcmUgc2FmZSAq LworCWNvbm5lY3RvciA9ICZzb3UtPmJhc2UuY29ubmVjdG9yOworCWVuY29kZXIgPSAmc291LT5i YXNlLmVuY29kZXI7CisKKwkvKiBzaG91bGQgd2UgdHVybiB0aGUgY3J0YyBvZmYgKi8KKwlpZiAo c2V0LT5udW1fY29ubmVjdG9ycyA9PSAwIHx8ICFzZXQtPm1vZGUgfHwgIXNldC0+ZmIpIHsKKwkJ cmV0ID0gdm13X3NvdV9maWZvX2Rlc3Ryb3koZGV2X3ByaXYsIHNvdSk7CisJCS8qIHRoZSBoYXJk d2FyZSBoYXMgaHVuZyBkb24ndCBkbyBhbnl0aGluZyBtb3JlICovCisJCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCisJCWNvbm5lY3Rvci0+ZW5jb2RlciA9IE5VTEw7 CisJCWVuY29kZXItPmNydGMgPSBOVUxMOworCQljcnRjLT5mYiA9IE5VTEw7CisJCWNydGMtPngg PSAwOworCQljcnRjLT55ID0gMDsKKworCQl2bXdfc291X2RlbF9hY3RpdmUoZGV2X3ByaXYsIHNv dSk7CisKKwkJdm13X3NvdV9iYWNraW5nX2ZyZWUoZGV2X3ByaXYsIHNvdSk7CisKKwkJcmV0dXJu IDA7CisJfQorCisKKwkvKiB3ZSBub3cga25vdyB3ZSB3YW50IHRvIHNldCBhIG1vZGUgKi8KKwlt b2RlID0gc2V0LT5tb2RlOworCWZiID0gc2V0LT5mYjsKKworCWlmIChzZXQtPnggKyBtb2RlLT5o ZGlzcGxheSA+IGZiLT53aWR0aCB8fAorCSAgICBzZXQtPnkgKyBtb2RlLT52ZGlzcGxheSA+IGZi LT5oZWlnaHQpIHsKKwkJRFJNX0VSUk9SKCJzZXQgb3V0c2lkZSBvZiBmcmFtZWJ1ZmZlclxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZtd19mYl9vZmYoZGV2X3ByaXYpOworCisJaWYg KG1vZGUtPmhkaXNwbGF5ICE9IGNydGMtPm1vZGUuaGRpc3BsYXkgfHwKKwkgICAgbW9kZS0+dmRp c3BsYXkgIT0gY3J0Yy0+bW9kZS52ZGlzcGxheSkgeworCQkvKiBubyBuZWVkIHRvIGNoZWNrIGlm IGRlcHRoIGlzIGRpZmZlcmVudCwgYmVjYXVzZSBiYWNraW5nCisJCSAqIHN0b3JlIGRlcHRoIGlz IGZvcmNlZCB0byA0IGJ5IHRoZSBkZXZpY2UuCisJCSAqLworCisJCXJldCA9IHZtd19zb3VfZmlm b19kZXN0cm95KGRldl9wcml2LCBzb3UpOworCQkvKiB0aGUgaGFyZHdhcmUgaGFzIGh1bmcgZG9u J3QgZG8gYW55dGhpbmcgbW9yZSAqLworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0 dXJuIHJldDsKKworCQl2bXdfc291X2JhY2tpbmdfZnJlZShkZXZfcHJpdiwgc291KTsKKwl9CisK KwlpZiAoIXNvdS0+YnVmZmVyKSB7CisJCS8qIGZvcmNlZCB0byBkZXB0aCA0IGJ5IHRoZSBkZXZp Y2UgKi8KKwkJc2l6ZV90IHNpemUgPSBtb2RlLT5oZGlzcGxheSAqIG1vZGUtPnZkaXNwbGF5ICog NDsKKwkJcmV0ID0gdm13X3NvdV9iYWNraW5nX2FsbG9jKGRldl9wcml2LCBzb3UsIHNpemUpOwor CQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB2 bXdfc291X2ZpZm9fY3JlYXRlKGRldl9wcml2LCBzb3UsIHNldC0+eCwgc2V0LT55LCBtb2RlKTsK KwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCS8qCisJCSAqIFdlIGFyZSBpbiBhIGJpdCBv ZiBhIHNpdHVhdGlvbiBoZXJlLCB0aGUgaGFyZHdhcmUgaGFzCisJCSAqIGh1bmcgYW5kIHdlIG1h eSBvciBtYXkgbm90IGhhdmUgYSBidWZmZXIgaGFuZ2luZyBvZgorCQkgKiB0aGUgc2NyZWVuIG9i amVjdCwgYmVzdCB0aGluZyB0byBkbyBpcyBub3QgZG8gYW55dGhpbmcKKwkJICogaWYgd2Ugd2hl cmUgZGVmaW5lZCwgaWYgbm90IGp1c3QgdHVybiB0aGUgY3J0YyBvZi4KKwkJICogTm90IHdoYXQg dXNlcnNwYWNlIHdhbnRzIGJ1dCBpdCBuZWVkcyB0byBodGZ1LgorCQkgKi8KKwkJaWYgKHNvdS0+ ZGVmaW5lZCkKKwkJCXJldHVybiByZXQ7CisKKwkJY29ubmVjdG9yLT5lbmNvZGVyID0gTlVMTDsK KwkJZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJCWNydGMtPmZiID0gTlVMTDsKKwkJY3J0Yy0+eCA9 IDA7CisJCWNydGMtPnkgPSAwOworCisJCXJldHVybiByZXQ7CisJfQorCisJdm13X3NvdV9hZGRf YWN0aXZlKGRldl9wcml2LCBzb3UsIHZmYik7CisKKwljb25uZWN0b3ItPmVuY29kZXIgPSBlbmNv ZGVyOworCWVuY29kZXItPmNydGMgPSBjcnRjOworCWNydGMtPm1vZGUgPSAqbW9kZTsKKwljcnRj LT5mYiA9IGZiOworCWNydGMtPnggPSBzZXQtPng7CisJY3J0Yy0+eSA9IHNldC0+eTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZtd19zY3JlZW5fb2Jq ZWN0X2NydGNfZnVuY3MgPSB7CisJLnNhdmUgPSB2bXdfZHVfY3J0Y19zYXZlLAorCS5yZXN0b3Jl ID0gdm13X2R1X2NydGNfcmVzdG9yZSwKKwkuY3Vyc29yX3NldCA9IHZtd19kdV9jcnRjX2N1cnNv cl9zZXQsCisJLmN1cnNvcl9tb3ZlID0gdm13X2R1X2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1h X3NldCA9IHZtd19kdV9jcnRjX2dhbW1hX3NldCwKKwkuZGVzdHJveSA9IHZtd19zb3VfY3J0Y19k ZXN0cm95LAorCS5zZXRfY29uZmlnID0gdm13X3NvdV9jcnRjX3NldF9jb25maWcsCit9OworCisv KgorICogU2NyZWVuIE9iamVjdCBEaXNwbGF5IFVuaXQgZW5jb2RlciBmdW5jdGlvbnMKKyAqLwor CitzdGF0aWMgdm9pZCB2bXdfc291X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCit7CisJdm13X3NvdV9kZXN0cm95KHZtd19lbmNvZGVyX3RvX3NvdShlbmNvZGVy KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3Mgdm13X3NjcmVlbl9vYmpl Y3RfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IHZtd19zb3VfZW5jb2Rlcl9kZXN0cm95 LAorfTsKKworLyoKKyAqIFNjcmVlbiBPYmplY3QgRGlzcGxheSBVbml0IGNvbm5lY3RvciBmdW5j dGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCB2bXdfc291X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJdm13X3NvdV9kZXN0cm95KHZtd19jb25u ZWN0b3JfdG9fc291KGNvbm5lY3RvcikpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3Mgdm13X2xlZ2FjeV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSB2bXdfZHVf Y29ubmVjdG9yX2RwbXMsCisJLnNhdmUgPSB2bXdfZHVfY29ubmVjdG9yX3NhdmUsCisJLnJlc3Rv cmUgPSB2bXdfZHVfY29ubmVjdG9yX3Jlc3RvcmUsCisJLmRldGVjdCA9IHZtd19kdV9jb25uZWN0 b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0gdm13X2R1X2Nvbm5lY3Rvcl9maWxsX21vZGVzLAor CS5zZXRfcHJvcGVydHkgPSB2bXdfZHVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwKKwkuZGVzdHJv eSA9IHZtd19zb3VfY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IHZtd19zb3Vf aW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCB1bml0KQoreworCXN0 cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpzb3U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCisJ c291ID0ga3phbGxvYyhzaXplb2YoKnNvdSksIEdGUF9LRVJORUwpOworCWlmICghc291KQorCQly ZXR1cm4gLUVOT01FTTsKKworCXNvdS0+YmFzZS51bml0ID0gdW5pdDsKKwljcnRjID0gJnNvdS0+ YmFzZS5jcnRjOworCWVuY29kZXIgPSAmc291LT5iYXNlLmVuY29kZXI7CisJY29ubmVjdG9yID0g JnNvdS0+YmFzZS5jb25uZWN0b3I7CisKKwlJTklUX0xJU1RfSEVBRCgmc291LT5hY3RpdmUpOwor CisJc291LT5iYXNlLnByZWZfYWN0aXZlID0gKHVuaXQgPT0gMCk7CisJc291LT5iYXNlLnByZWZf d2lkdGggPSA4MDA7CisJc291LT5iYXNlLnByZWZfaGVpZ2h0ID0gNjAwOworCXNvdS0+YmFzZS5w cmVmX21vZGUgPSBOVUxMOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAm dm13X2xlZ2FjeV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZE Uyk7CisJY29ubmVjdG9yLT5zdGF0dXMgPSB2bXdfZHVfY29ubmVjdG9yX2RldGVjdChjb25uZWN0 b3IsIHRydWUpOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZ2bXdfc2NyZWVu X29iamVjdF9lbmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09ERVJfTFZEUyk7CisJZHJt X21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisJZW5j b2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8PCB1bml0KTsKKwllbmNvZGVyLT5wb3NzaWJsZV9j bG9uZXMgPSAwOworCisJZHJtX2NydGNfaW5pdChkZXYsIGNydGMsICZ2bXdfc2NyZWVuX29iamVj dF9jcnRjX2Z1bmNzKTsKKworCWRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUoY3J0YywgMjU2 KTsKKworCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQkgICAg ICBkZXYtPm1vZGVfY29uZmlnLmRpcnR5X2luZm9fcHJvcGVydHksCisJCQkJICAgICAgMSk7CisK KwlyZXR1cm4gMDsKK30KKworaW50IHZtd19rbXNfaW5pdF9zY3JlZW5fb2JqZWN0X2Rpc3BsYXko c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZGV2X3ByaXYtPmRldjsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5z b3VfcHJpdikgeworCQlEUk1fSU5GTygic291IHN5c3RlbSBhbHJlYWR5IG9uXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoZGV2X3ByaXYtPmZpZm8uY2FwYWJpbGl0aWVzICYg U1ZHQV9GSUZPX0NBUF9TQ1JFRU5fT0JKRUNUXzIpKSB7CisJCURSTV9JTkZPKCJOb3QgdXNpbmcg c2NyZWVuIG9iamVjdHMsIgorCQkJICIgbWlzc2luZyBjYXAgU0NSRUVOX09CSkVDVF8yXG4iKTsK KwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlkZXZfcHJpdi0+c291 X3ByaXYgPSBrbWFsbG9jKHNpemVvZigqZGV2X3ByaXYtPnNvdV9wcml2KSwgR0ZQX0tFUk5FTCk7 CisJaWYgKHVubGlrZWx5KCFkZXZfcHJpdi0+c291X3ByaXYpKQorCQlnb3RvIGVycl9ub19tZW07 CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnNvdV9wcml2LT5hY3RpdmUpOworCWRldl9w cml2LT5zb3VfcHJpdi0+bnVtX2FjdGl2ZSA9IDA7CisJZGV2X3ByaXYtPnNvdV9wcml2LT5sYXN0 X251bV9hY3RpdmUgPSAwOworCWRldl9wcml2LT5zb3VfcHJpdi0+ZmIgPSBOVUxMOworCisJcmV0 ID0gZHJtX3ZibGFua19pbml0KGRldiwgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTKTsKKwlpZiAo dW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl9mcmVlOworCisJcmV0ID0gZHJtX21vZGVf Y3JlYXRlX2RpcnR5X2luZm9fcHJvcGVydHkoZGV2X3ByaXYtPmRldik7CisJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkKKwkJZ290byBlcnJfdmJsYW5rX2NsZWFudXA7CisKKwlmb3IgKGkgPSAwOyBp IDwgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTOyArK2kpCisJCXZtd19zb3VfaW5pdChkZXZfcHJp diwgaSk7CisKKwlEUk1fSU5GTygiU2NyZWVuIG9iamVjdHMgc3lzdGVtIGluaXRpYWxpemVkXG4i KTsKKworCXJldHVybiAwOworCitlcnJfdmJsYW5rX2NsZWFudXA6CisJZHJtX3ZibGFua19jbGVh bnVwKGRldik7CitlcnJfZnJlZToKKwlrZnJlZShkZXZfcHJpdi0+c291X3ByaXYpOworZXJyX25v X21lbToKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2ttc19jbG9zZV9zY3JlZW5fb2JqZWN0 X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCWRybV92YmxhbmtfY2xlYW51cChkZXYpOwor CWlmICghZGV2X3ByaXYtPnNvdV9wcml2KQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmICghbGlz dF9lbXB0eSgmZGV2X3ByaXYtPnNvdV9wcml2LT5hY3RpdmUpKQorCQlEUk1fRVJST1IoIlN0aWxs IGhhdmUgYWN0aXZlIG91dHB1dHMgd2hlbiB1bmxvYWRpbmcgZHJpdmVyIik7CisKKwlrZnJlZShk ZXZfcHJpdi0+c291X3ByaXYpOworCisJcmV0dXJuIDA7Cit9Ci0tIAoxLjcuNC40CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=