From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH -next 7/9] drm/vmwgfx: Add new ioctl for GB surface create and reference Date: Wed, 4 Jul 2018 17:57:48 +0200 Message-ID: <20180704155750.2749-8-thellstrom@vmware.com> References: <20180704155750.2749-1-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0086.outbound.protection.outlook.com [104.47.34.86]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8884F6EC2B for ; Wed, 4 Jul 2018 15:58:45 +0000 (UTC) In-Reply-To: <20180704155750.2749-1-thellstrom@vmware.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 Cc: Thomas Hellstrom , Deepak Rawat , linux-graphics-maintainer@vmware.com List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGVlcGFrIFJhd2F0IDxkcmF3YXRAdm13YXJlLmNvbT4KCk5ldyBpb2N0bHMgRFJNX1ZN V19HQl9TVVJGQUNFX0NSRUFURV9FWFQgYW5kIERSTV9WTVdfR0JfU1VSRkFDRV9SRUZfRVhUCmFy ZSBhZGRlZCB3aGljaCBzdXBwb3J0IDY0LWJpdCB3aWRlIHN2Z2EgZGV2aWNlIHN1cmZhY2UgZmxh Z3MsIHF1YWxpdHkKbGV2ZWwgYW5kIG11bHRpc2FtcGxlIHBhdHRlcm4uCgpTaWduZWQtb2ZmLWJ5 OiBEZWVwYWsgUmF3YXQgPGRyYXdhdEB2bXdhcmUuY29tPgpSZXZpZXdlZC1ieTogU2luY2xhaXIg WWVoIDxzeWVoQHZtd2FyZS5jb20+ClJldmlld2VkLWJ5OiBCcmlhbiBQYXVsIDxicmlhbnBAdm13 YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJl LmNvbT4KUmV2aWV3ZWQtYnk6IENoYXJtYWluZSBMZWUgPGNoYXJtYWluZWxAdm13YXJlLmNvbT4K U2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jICAgICB8ICAxMiArCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAgICAgfCAgIDggKwogZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgICAgIHwgIDIwICstCiBkcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9zdGR1LmMgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfc3VyZmFjZS5jIHwgNDY4ICsrKysrKysrKysrKysrKy0tLS0tLS0tLQogaW5jbHVkZS91YXBp L2RybS92bXdnZnhfZHJtLmggICAgICAgICAgIHwgMTAyICsrKysrKwogNiBmaWxlcyBjaGFuZ2Vk LCA0MzcgaW5zZXJ0aW9ucygrKSwgMTc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfZHJ2LmMKaW5kZXggNmNmODFlMTkxODJmLi41OTIyOTExMWYzMDMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC0xMzcsNiArMTM3LDEyIEBACiAjZGVmaW5lIERSTV9J T0NUTF9WTVdfQ1JFQVRFX0VYVEVOREVEX0NPTlRFWFQJCQlcCiAJRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9WTVdfQ1JFQVRFX0VYVEVOREVEX0NPTlRFWFQsCVwKIAkJc3RydWN0IGRy bV92bXdfY29udGV4dF9hcmcpCisjZGVmaW5lIERSTV9JT0NUTF9WTVdfR0JfU1VSRkFDRV9DUkVB VEVfRVhUCQkJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZNV19HQl9TVVJG QUNFX0NSRUFURV9FWFQsCVwKKwkJdW5pb24gZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRf YXJnKQorI2RlZmluZSBEUk1fSU9DVExfVk1XX0dCX1NVUkZBQ0VfUkVGX0VYVAkJCQlcCisJRFJN X0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfR0JfU1VSRkFDRV9SRUZfRVhULAkJXAor CQl1bmlvbiBkcm1fdm13X2diX3N1cmZhY2VfcmVmZXJlbmNlX2V4dF9hcmcpCiAKIC8qKgogICog VGhlIGNvcmUgRFJNIHZlcnNpb24gb2YgdGhpcyBtYWNybyBkb2Vzbid0IGFjY291bnQgZm9yCkBA IC0yMjQsNiArMjMwLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mgdm13 X2lvY3Rsc1tdID0gewogCVZNV19JT0NUTF9ERUYoVk1XX0NSRUFURV9FWFRFTkRFRF9DT05URVhU LAogCQkgICAgICB2bXdfZXh0ZW5kZWRfY29udGV4dF9kZWZpbmVfaW9jdGwsCiAJCSAgICAgIERS TV9BVVRIIHwgRFJNX1JFTkRFUl9BTExPVyksCisJVk1XX0lPQ1RMX0RFRihWTVdfR0JfU1VSRkFD RV9DUkVBVEVfRVhULAorCQkgICAgICB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfZXh0X2lvY3RsLAor CQkgICAgICBEUk1fQVVUSCB8IERSTV9SRU5ERVJfQUxMT1cpLAorCVZNV19JT0NUTF9ERUYoVk1X X0dCX1NVUkZBQ0VfUkVGX0VYVCwKKwkJICAgICAgdm13X2diX3N1cmZhY2VfcmVmZXJlbmNlX2V4 dF9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fUkVOREVSX0FMTE9XKSwKIH07CiAKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bXdfcGNpX2lkX2xpc3RbXSA9IHsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggN2U1YzkzMDgzMDM2Li41OWFmMTQ3MTQ3 OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0xMDg3LDcgKzEwODcsMTUg QEAgaW50IHZtd19zdXJmYWNlX2diX3ByaXZfZGVmaW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQkgICAgICAgdWludDMyX3QgbXVsdGlzYW1wbGVfY291bnQsCiAJCQkgICAgICAgdWludDMy X3QgYXJyYXlfc2l6ZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX3Ztd19zaXplIHNpemUsCisJCQkg ICAgICAgU1ZHQTNkTVNQYXR0ZXJuIG11bHRpc2FtcGxlX3BhdHRlcm4sCisJCQkgICAgICAgU1ZH QTNkTVNRdWFsaXR5TGV2ZWwgcXVhbGl0eV9sZXZlbCwKIAkJCSAgICAgICBzdHJ1Y3Qgdm13X3N1 cmZhY2UgKipzcmZfb3V0KTsKK2V4dGVybiBpbnQgdm13X2diX3N1cmZhY2VfZGVmaW5lX2V4dF9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICB2b2lkICpkYXRhLAorCQkJCQkg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19nYl9zdXJmYWNl X3JlZmVyZW5jZV9leHRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAg dm9pZCAqZGF0YSwKKwkJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiAv KgogICogU2hhZGVyIG1hbmFnZW1lbnQgLSB2bXdnZnhfc2hhZGVyLmMKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfa21zLmMKaW5kZXggMGZiMzYzNDU4YWI1Li4zMjAxYjBhNTFkMTAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCkBAIC0xMjM4LDE1ICsxMjM4LDE3IEBAIHN0YXRpYyBp bnQgdm13X2NyZWF0ZV9ib19wcm94eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWNvbnRlbnRf YmFzZV9zaXplLmRlcHRoICA9IDE7CiAKIAlyZXQgPSB2bXdfc3VyZmFjZV9nYl9wcml2X2RlZmlu ZShkZXYsCi0JCQkwLCAvKiBrZXJuZWwgdmlzaWJsZSBvbmx5ICovCi0JCQkwLCAvKiBmbGFncyAq LwotCQkJZm9ybWF0LAotCQkJdHJ1ZSwgLyogY2FuIGJlIGEgc2Nhbm91dCBidWZmZXIgKi8KLQkJ CTEsIC8qIG51bSBvZiBtaXAgbGV2ZWxzICovCi0JCQkwLAotCQkJMCwKLQkJCWNvbnRlbnRfYmFz ZV9zaXplLAotCQkJc3JmX291dCk7CisJCQkJCSAwLCAvKiBrZXJuZWwgdmlzaWJsZSBvbmx5ICov CisJCQkJCSAwLCAvKiBmbGFncyAqLworCQkJCQkgZm9ybWF0LAorCQkJCQkgdHJ1ZSwgLyogY2Fu IGJlIGEgc2Nhbm91dCBidWZmZXIgKi8KKwkJCQkJIDEsIC8qIG51bSBvZiBtaXAgbGV2ZWxzICov CisJCQkJCSAwLAorCQkJCQkgMCwKKwkJCQkJIGNvbnRlbnRfYmFzZV9zaXplLAorCQkJCQkgU1ZH QTNEX01TX1BBVFRFUk5fTk9ORSwKKwkJCQkJIFNWR0EzRF9NU19RVUFMSVRZX05PTkUsCisJCQkJ CSBzcmZfb3V0KTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IHByb3h5IGNvbnRlbnQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X3N0ZHUuYwppbmRleCA2NjMwYWJmM2E5NWMuLmY5ODcyYzllNjBjNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwpAQCAtMTE4OCw2ICsxMTg4LDggQEAgdm13X3N0 ZHVfcHJpbWFyeV9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJ CSBjb250ZW50X3NyZi5tdWx0aXNhbXBsZV9jb3VudCwKIAkJCQkgMCwKIAkJCQkgZGlzcGxheV9i YXNlX3NpemUsCisJCQkJIGNvbnRlbnRfc3JmLm11bHRpc2FtcGxlX3BhdHRlcm4sCisJCQkJIGNv bnRlbnRfc3JmLnF1YWxpdHlfbGV2ZWwsCiAJCQkJICZ2cHMtPnN1cmYpOwogCQkJaWYgKHJldCAh PSAwKSB7CiAJCQkJRFJNX0VSUk9SKCJDb3VsZG4ndCBhbGxvY2F0ZSBTVERVIHN1cmZhY2UuXG4i KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYyBi L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYwppbmRleCBhNWY5M2Y2MmM3 ZmEuLjFkNGMwMTBhMGU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfc3VyZmFjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2Uu YwpAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJ2bXdnZnhfYmluZGluZy5oIgogI2luY2x1 ZGUgImRldmljZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVmcy5oIgogCisjZGVmaW5lIFNWR0Ez RF9GTEFHU182NCh1cHBlcjMyLCBsb3dlcjMyKSAoKCh1aW50NjRfdCl1cHBlcjMyIDw8IDMyKSB8 IGxvd2VyMzIpCisjZGVmaW5lIFNWR0EzRF9GTEFHU19VUFBFUl8zMihzdmdhM2RfZmxhZ3MpIChz dmdhM2RfZmxhZ3MgPj4gMzIpCisjZGVmaW5lIFNWR0EzRF9GTEFHU19MT1dFUl8zMihzdmdhM2Rf ZmxhZ3MpIFwKKwkoc3ZnYTNkX2ZsYWdzICYgKCh1aW50NjRfdClVMzJfTUFYKSkKIAogLyoqCiAg KiBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAtIFVzZXItc3BhY2UgdmlzaWJsZSBzdXJmYWNlIHJl c291cmNlCkBAIC04MSw3ICs4NSwxNiBAQCBzdGF0aWMgaW50IHZtd19nYl9zdXJmYWNlX3VuYmlu ZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJCQkJIGJvb2wgcmVhZGJhY2ssCiAJCQkJIHN0 cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmKTsKIHN0YXRpYyBpbnQgdm13X2diX3N1 cmZhY2VfZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOwotCitzdGF0aWMgaW50Cit2 bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW50ZXJuYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CSAgICAgICBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxICpyZXEsCisJ CQkgICAgICAgc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwICpyZXAsCisJCQkg ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworc3RhdGljIGludAordm13X2diX3N1 cmZhY2VfcmVmZXJlbmNlX2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBz dHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyAqcmVxLAorCQkJCSAgc3RydWN0IGRybV92bXdfZ2Jf c3VyZmFjZV9yZWZfZXh0X3JlcCAqcmVwLAorCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtd191c2VyX3Jlc291cmNlX2NvbnYgdXNlcl9z dXJmYWNlX2NvbnYgPSB7CiAJLm9iamVjdF90eXBlID0gVk1XX1JFU19TVVJGQUNFLApAQCAtMTI4 OSwxOTMgKzEzMDIsNTUgQEAgc3RhdGljIGludCB2bXdfZ2Jfc3VyZmFjZV9kZXN0cm95KHN0cnVj dCB2bXdfcmVzb3VyY2UgKnJlcykKIAogLyoqCiAgKiB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW9j dGwgLSBJb2N0bCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcKLSAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSB1c2VyIHN1cmZhY2UgZGVmaW5lIGZ1bmN0aW9uYWxpdHkuCisgKiB0aGUg dXNlciBzdXJmYWNlIGRlZmluZSBmdW5jdGlvbmFsaXR5LgogICoKLSAqIEBkZXY6ICAgICAgICAg ICAgUG9pbnRlciB0byBhIHN0cnVjdCBkcm1fZGV2aWNlLgotICogQGRhdGE6ICAgICAgICAgICBQ b2ludGVyIHRvIGRhdGEgY29waWVkIGZyb20gLyB0byB1c2VyLXNwYWNlLgotICogQGZpbGVfcHJp djogICAgICBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKiBAZGV2 OiBQb2ludGVyIHRvIGEgc3RydWN0IGRybV9kZXZpY2UuCisgKiBAZGF0YTogUG9pbnRlciB0byBk YXRhIGNvcGllZCBmcm9tIC8gdG8gdXNlci1zcGFjZS4KKyAqIEBmaWxlX3ByaXY6IFBvaW50ZXIg dG8gYSBkcm0gZmlsZSBwcml2YXRlIHN0cnVjdHVyZS4KICAqLwogaW50IHZtd19nYl9zdXJmYWNl X2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSB2bXdfcHJpdihkZXYpOwotCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZjsK LQlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKLQlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7Ci0J c3RydWN0IHZtd19yZXNvdXJjZSAqdG1wOwogCXVuaW9uIGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVh dGVfYXJnICphcmcgPQogCSAgICAodW5pb24gZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9hcmcg KilkYXRhOwotCXN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3JlcSAqcmVxID0gJmFy Zy0+cmVxOwogCXN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3JlcCAqcmVwID0gJmFy Zy0+cmVwOwotCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVf cHJpdiktPnRmaWxlOwotCWludCByZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKLQl1aW50MzJfdCBiYWNr dXBfaGFuZGxlID0gMDsKLQotCWlmIChyZXEtPm11bHRpc2FtcGxlX2NvdW50ICE9IDApCi0JCXJl dHVybiAtRUlOVkFMOwotCi0JaWYgKHJlcS0+bWlwX2xldmVscyA+IERSTV9WTVdfTUFYX01JUF9M RVZFTFMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KHZtd191c2VyX3N1cmZh Y2Vfc2l6ZSA9PSAwKSkKLQkJdm13X3VzZXJfc3VyZmFjZV9zaXplID0gdHRtX3JvdW5kX3BvdChz aXplb2YoKnVzZXJfc3JmKSkgKwotCQkJMTI4OwotCi0Jc2l6ZSA9IHZtd191c2VyX3N1cmZhY2Vf c2l6ZSArIDEyODsKLQotCS8qIERlZmluZSBhIHN1cmZhY2UgYmFzZWQgb24gdGhlIHBhcmFtZXRl cnMuICovCi0JcmV0ID0gdm13X3N1cmZhY2VfZ2JfcHJpdl9kZWZpbmUoZGV2LAotCQkJc2l6ZSwK LQkJCShTVkdBM2RTdXJmYWNlQWxsRmxhZ3MpcmVxLT5zdmdhM2RfZmxhZ3MsCi0JCQlyZXEtPmZv cm1hdCwKLQkJCXJlcS0+ZHJtX3N1cmZhY2VfZmxhZ3MgJiBkcm1fdm13X3N1cmZhY2VfZmxhZ19z Y2Fub3V0LAotCQkJcmVxLT5taXBfbGV2ZWxzLAotCQkJcmVxLT5tdWx0aXNhbXBsZV9jb3VudCwK LQkJCXJlcS0+YXJyYXlfc2l6ZSwKLQkJCXJlcS0+YmFzZV9zaXplLAotCQkJJnNyZik7Ci0JaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKLQkJcmV0dXJuIHJldDsKLQotCXVzZXJfc3JmID0gY29udGFp bmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7Ci0JaWYgKGRybV9pc19w cmltYXJ5X2NsaWVudChmaWxlX3ByaXYpKQotCQl1c2VyX3NyZi0+bWFzdGVyID0gZHJtX21hc3Rl cl9nZXQoZmlsZV9wcml2LT5tYXN0ZXIpOwotCi0JcmV0ID0gdHRtX3JlYWRfbG9jaygmZGV2X3By aXYtPnJlc2VydmF0aW9uX3NlbSwgdHJ1ZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJ cmV0dXJuIHJldDsKLQotCXJlcyA9ICZ1c2VyX3NyZi0+c3JmLnJlczsKLQotCi0JaWYgKHJlcS0+ YnVmZmVyX2hhbmRsZSAhPSBTVkdBM0RfSU5WQUxJRF9JRCkgewotCQlyZXQgPSB2bXdfdXNlcl9i b19sb29rdXAodGZpbGUsIHJlcS0+YnVmZmVyX2hhbmRsZSwKLQkJCQkJICZyZXMtPmJhY2t1cCwK LQkJCQkJICZ1c2VyX3NyZi0+YmFja3VwX2Jhc2UpOwotCQlpZiAocmV0ID09IDApIHsKLQkJCWlm IChyZXMtPmJhY2t1cC0+YmFzZS5udW1fcGFnZXMgKiBQQUdFX1NJWkUgPAotCQkJICAgIHJlcy0+ YmFja3VwX3NpemUpIHsKLQkJCQlEUk1fRVJST1IoIlN1cmZhY2UgYmFja3VwIGJ1ZmZlciBpcyB0 b28gc21hbGwuXG4iKTsKLQkJCQl2bXdfYm9fdW5yZWZlcmVuY2UoJnJlcy0+YmFja3VwKTsKLQkJ CQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCX0gZWxzZSB7Ci0JCQkJ YmFja3VwX2hhbmRsZSA9IHJlcS0+YnVmZmVyX2hhbmRsZTsKLQkJCX0KLQkJfQotCX0gZWxzZSBp ZiAocmVxLT5kcm1fc3VyZmFjZV9mbGFncyAmIGRybV92bXdfc3VyZmFjZV9mbGFnX2NyZWF0ZV9i dWZmZXIpCi0JCXJldCA9IHZtd191c2VyX2JvX2FsbG9jKGRldl9wcml2LCB0ZmlsZSwKLQkJCQkJ cmVzLT5iYWNrdXBfc2l6ZSwKLQkJCQkJcmVxLT5kcm1fc3VyZmFjZV9mbGFncyAmCi0JCQkJCWRy bV92bXdfc3VyZmFjZV9mbGFnX3NoYXJlYWJsZSwKLQkJCQkJJmJhY2t1cF9oYW5kbGUsCi0JCQkJ CSZyZXMtPmJhY2t1cCwKLQkJCQkJJnVzZXJfc3JmLT5iYWNrdXBfYmFzZSk7Ci0KLQlpZiAodW5s aWtlbHkocmV0ICE9IDApKSB7Ci0JCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKLQkJ Z290byBvdXRfdW5sb2NrOwotCX0KLQotCXRtcCA9IHZtd19yZXNvdXJjZV9yZWZlcmVuY2UocmVz KTsKLQlyZXQgPSB0dG1fcHJpbWVfb2JqZWN0X2luaXQodGZpbGUsIHJlcy0+YmFja3VwX3NpemUs ICZ1c2VyX3NyZi0+cHJpbWUsCi0JCQkJICAgIHJlcS0+ZHJtX3N1cmZhY2VfZmxhZ3MgJgotCQkJ CSAgICBkcm1fdm13X3N1cmZhY2VfZmxhZ19zaGFyZWFibGUsCi0JCQkJICAgIFZNV19SRVNfU1VS RkFDRSwKLQkJCQkgICAgJnZtd191c2VyX3N1cmZhY2VfYmFzZV9yZWxlYXNlLCBOVUxMKTsKLQot CWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZ0 bXApOwotCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7Ci0JCWdvdG8gb3V0X3VubG9j azsKLQl9Ci0KLQlyZXAtPmhhbmRsZSAgICAgID0gdXNlcl9zcmYtPnByaW1lLmJhc2UuaGFzaC5r ZXk7Ci0JcmVwLT5iYWNrdXBfc2l6ZSA9IHJlcy0+YmFja3VwX3NpemU7Ci0JaWYgKHJlcy0+YmFj a3VwKSB7Ci0JCXJlcC0+YnVmZmVyX21hcF9oYW5kbGUgPQotCQkJZHJtX3ZtYV9ub2RlX29mZnNl dF9hZGRyKCZyZXMtPmJhY2t1cC0+YmFzZS52bWFfbm9kZSk7Ci0JCXJlcC0+YnVmZmVyX3NpemUg PSByZXMtPmJhY2t1cC0+YmFzZS5udW1fcGFnZXMgKiBQQUdFX1NJWkU7Ci0JCXJlcC0+YnVmZmVy X2hhbmRsZSA9IGJhY2t1cF9oYW5kbGU7Ci0JfSBlbHNlIHsKLQkJcmVwLT5idWZmZXJfbWFwX2hh bmRsZSA9IDA7Ci0JCXJlcC0+YnVmZmVyX3NpemUgPSAwOwotCQlyZXAtPmJ1ZmZlcl9oYW5kbGUg PSBTVkdBM0RfSU5WQUxJRF9JRDsKLQl9CisJc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVh dGVfZXh0X3JlcSByZXFfZXh0OwogCi0Jdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOwor CXJlcV9leHQuYmFzZSA9IGFyZy0+cmVxOworCXJlcV9leHQudmVyc2lvbiA9IGRybV92bXdfZ2Jf c3VyZmFjZV92MTsKKwlyZXFfZXh0LnN2Z2EzZF9mbGFnc191cHBlcl8zMl9iaXRzID0gMDsKKwly ZXFfZXh0Lm11bHRpc2FtcGxlX3BhdHRlcm4gPSBTVkdBM0RfTVNfUEFUVEVSTl9OT05FOworCXJl cV9leHQucXVhbGl0eV9sZXZlbCA9IFNWR0EzRF9NU19RVUFMSVRZX05PTkU7CisJcmVxX2V4dC5t dXN0X2JlX3plcm8gPSAwOwogCi1vdXRfdW5sb2NrOgotCXR0bV9yZWFkX3VubG9jaygmZGV2X3By aXYtPnJlc2VydmF0aW9uX3NlbSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdm13X2diX3N1cmZh Y2VfZGVmaW5lX2ludGVybmFsKGRldiwgJnJlcV9leHQsIHJlcCwgZmlsZV9wcml2KTsKIH0KIAog LyoqCiAgKiB2bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfaW9jdGwgLSBJb2N0bCBmdW5jdGlvbiBp bXBsZW1lbnRpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2Vy IHN1cmZhY2UgcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkuCisgKiB0aGUgdXNlciBzdXJmYWNlIHJl ZmVyZW5jZSBmdW5jdGlvbmFsaXR5LgogICoKLSAqIEBkZXY6ICAgICAgICAgICAgUG9pbnRlciB0 byBhIHN0cnVjdCBkcm1fZGV2aWNlLgotICogQGRhdGE6ICAgICAgICAgICBQb2ludGVyIHRvIGRh dGEgY29waWVkIGZyb20gLyB0byB1c2VyLXNwYWNlLgotICogQGZpbGVfcHJpdjogICAgICBQb2lu dGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKiBAZGV2OiBQb2ludGVyIHRv IGEgc3RydWN0IGRybV9kZXZpY2UuCisgKiBAZGF0YTogUG9pbnRlciB0byBkYXRhIGNvcGllZCBm cm9tIC8gdG8gdXNlci1zcGFjZS4KKyAqIEBmaWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBkcm0gZmls ZSBwcml2YXRlIHN0cnVjdHVyZS4KICAqLwogaW50IHZtd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCSAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2KQogewotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2 bXdfcHJpdihkZXYpOwogCXVuaW9uIGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfYXJnICph cmcgPQogCSAgICAodW5pb24gZHJtX3Ztd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9hcmcgKilkYXRh OwogCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICpyZXEgPSAmYXJnLT5yZXE7CiAJc3RydWN0 IGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZfcmVwICpyZXAgPSAmYXJnLT5yZXA7Ci0Jc3RydWN0IHR0 bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7Ci0Jc3Ry dWN0IHZtd19zdXJmYWNlICpzcmY7Ci0Jc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3Jm OwotCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7Ci0JdWludDMyX3QgYmFja3VwX2hhbmRs ZTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX3JlZl9l eHRfcmVwIHJlcF9leHQ7CisJaW50IHJldDsKKworCXJldCA9IHZtd19nYl9zdXJmYWNlX3JlZmVy ZW5jZV9pbnRlcm5hbChkZXYsIHJlcSwgJnJlcF9leHQsIGZpbGVfcHJpdik7CiAKLQlyZXQgPSB2 bXdfc3VyZmFjZV9oYW5kbGVfcmVmZXJlbmNlKGRldl9wcml2LCBmaWxlX3ByaXYsIHJlcS0+c2lk LAotCQkJCQkgICByZXEtPmhhbmRsZV90eXBlLCAmYmFzZSk7CiAJaWYgKHVubGlrZWx5KHJldCAh PSAwKSkKIAkJcmV0dXJuIHJldDsKIAotCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0 cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBwcmltZS5iYXNlKTsKLQlzcmYgPSAmdXNlcl9zcmYtPnNy ZjsKLQlpZiAoIXNyZi0+cmVzLmJhY2t1cCkgewotCQlEUk1fRVJST1IoIlNoYXJlZCBHQiBzdXJm YWNlIGlzIG1pc3NpbmcgYSBiYWNrdXAgYnVmZmVyLlxuIik7Ci0JCWdvdG8gb3V0X2JhZF9yZXNv dXJjZTsKLQl9Ci0KLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsgLyogUHJv dGVjdCByZXMtPmJhY2t1cCAqLwotCXJldCA9IHZtd191c2VyX2JvX3JlZmVyZW5jZSh0ZmlsZSwg c3JmLT5yZXMuYmFja3VwLCAmYmFja3VwX2hhbmRsZSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+Y21kYnVmX211dGV4KTsKLQotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJRFJNX0VS Uk9SKCJDb3VsZCBub3QgYWRkIGEgcmVmZXJlbmNlIHRvIGEgR0Igc3VyZmFjZSAiCi0JCQkgICJi YWNrdXAgYnVmZmVyLlxuIik7Ci0JCSh2b2lkKSB0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHRm aWxlLCBiYXNlLT5oYXNoLmtleSwKLQkJCQkJCSBUVE1fUkVGX1VTQUdFKTsKLQkJZ290byBvdXRf YmFkX3Jlc291cmNlOwotCX0KLQotCXJlcC0+Y3JlcS5zdmdhM2RfZmxhZ3MgPSAodWludDMyX3Qp c3JmLT5mbGFnczsKLQlyZXAtPmNyZXEuZm9ybWF0ID0gc3JmLT5mb3JtYXQ7Ci0JcmVwLT5jcmVx Lm1pcF9sZXZlbHMgPSBzcmYtPm1pcF9sZXZlbHNbMF07Ci0JcmVwLT5jcmVxLmRybV9zdXJmYWNl X2ZsYWdzID0gMDsKLQlyZXAtPmNyZXEubXVsdGlzYW1wbGVfY291bnQgPSBzcmYtPm11bHRpc2Ft cGxlX2NvdW50OwotCXJlcC0+Y3JlcS5hdXRvZ2VuX2ZpbHRlciA9IHNyZi0+YXV0b2dlbl9maWx0 ZXI7Ci0JcmVwLT5jcmVxLmFycmF5X3NpemUgPSBzcmYtPmFycmF5X3NpemU7Ci0JcmVwLT5jcmVx LmJ1ZmZlcl9oYW5kbGUgPSBiYWNrdXBfaGFuZGxlOwotCXJlcC0+Y3JlcS5iYXNlX3NpemUgPSBz cmYtPmJhc2Vfc2l6ZTsKLQlyZXAtPmNyZXAuaGFuZGxlID0gdXNlcl9zcmYtPnByaW1lLmJhc2Uu aGFzaC5rZXk7Ci0JcmVwLT5jcmVwLmJhY2t1cF9zaXplID0gc3JmLT5yZXMuYmFja3VwX3NpemU7 Ci0JcmVwLT5jcmVwLmJ1ZmZlcl9oYW5kbGUgPSBiYWNrdXBfaGFuZGxlOwotCXJlcC0+Y3JlcC5i dWZmZXJfbWFwX2hhbmRsZSA9Ci0JCWRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmc3JmLT5yZXMu YmFja3VwLT5iYXNlLnZtYV9ub2RlKTsKLQlyZXAtPmNyZXAuYnVmZmVyX3NpemUgPSBzcmYtPnJl cy5iYWNrdXAtPmJhc2UubnVtX3BhZ2VzICogUEFHRV9TSVpFOwotCi1vdXRfYmFkX3Jlc291cmNl OgotCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7CisJcmVwLT5jcmVxID0gcmVwX2V4dC5j cmVxLmJhc2U7CisJcmVwLT5jcmVwID0gcmVwX2V4dC5jcmVwOwogCiAJcmV0dXJuIHJldDsKIH0K QEAgLTE0OTMsNiArMTM2OCw4IEBAIGludCB2bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKICAqIEBtdWx0aXNhbXBsZV9jb3Vu dDoKICAqIEBhcnJheV9zaXplOiBTdXJmYWNlIGFycmF5IHNpemUuCiAgKiBAc2l6ZTogd2lkdGgs IGhlaWdoLCBkZXB0aCBvZiB0aGUgc3VyZmFjZSByZXF1ZXN0ZWQKKyAqIEBtdWx0aXNhbXBsZV9w YXR0ZXJuOiBNdWx0aXNhbXBsaW5nIHBhdHRlcm4gd2hlbiBtc2FhIGlzIHN1cHBvcnRlZAorICog QHF1YWxpdHlfbGV2ZWw6IFByZWNpc2lvbiBzZXR0aW5ncwogICogQHVzZXJfc3JmX291dDogYWxs b2NhdGVkIHVzZXJfc3JmLiAgU2V0IHRvIE5VTEwgb24gZmFpbHVyZS4KICAqCiAgKiBHQiBzdXJm YWNlcyBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBoYXZlIGEgdXNlciBtb2Rl IGhhbmRsZSwgYW5kCkBAIC0xNTA5LDYgKzEzODYsOCBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJp dl9kZWZpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICB1aW50MzJfdCBtdWx0 aXNhbXBsZV9jb3VudCwKIAkJCSAgICAgICB1aW50MzJfdCBhcnJheV9zaXplLAogCQkJICAgICAg IHN0cnVjdCBkcm1fdm13X3NpemUgc2l6ZSwKKwkJCSAgICAgICBTVkdBM2RNU1BhdHRlcm4gbXVs dGlzYW1wbGVfcGF0dGVybiwKKwkJCSAgICAgICBTVkdBM2RNU1F1YWxpdHlMZXZlbCBxdWFsaXR5 X2xldmVsLAogCQkJICAgICAgIHN0cnVjdCB2bXdfc3VyZmFjZSAqKnNyZl9vdXQpCiB7CiAJc3Ry dWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CkBAIC0xNTE5LDcgKzEz OTgsNyBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJpdl9kZWZpbmUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAl9OwogCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmOwogCWludCByZXQ7Ci0JdTMyIG51 bV9sYXllcnM7CisJdTMyIG51bV9sYXllcnMgPSAxOwogCiAJKnNyZl9vdXQgPSBOVUxMOwogCkBA IC0xNTk0LDE1ICsxNDczLDEzIEBAIGludCB2bXdfc3VyZmFjZV9nYl9wcml2X2RlZmluZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCXNyZi0+YXV0b2dlbl9maWx0ZXIgICAgPSBTVkdBM0RfVEVY X0ZJTFRFUl9OT05FOwogCXNyZi0+YXJyYXlfc2l6ZSAgICAgICAgPSBhcnJheV9zaXplOwogCXNy Zi0+bXVsdGlzYW1wbGVfY291bnQgPSBtdWx0aXNhbXBsZV9jb3VudDsKLQlzcmYtPm11bHRpc2Ft cGxlX3BhdHRlcm4gPSBTVkdBM0RfTVNfUEFUVEVSTl9OT05FOwotCXNyZi0+cXVhbGl0eV9sZXZl bCA9IFNWR0EzRF9NU19RVUFMSVRZX05PTkU7CisJc3JmLT5tdWx0aXNhbXBsZV9wYXR0ZXJuID0g bXVsdGlzYW1wbGVfcGF0dGVybjsKKwlzcmYtPnF1YWxpdHlfbGV2ZWwgPSBxdWFsaXR5X2xldmVs OwogCiAJaWYgKGFycmF5X3NpemUpCiAJCW51bV9sYXllcnMgPSBhcnJheV9zaXplOwogCWVsc2Ug aWYgKHN2Z2EzZF9mbGFncyAmIFNWR0EzRF9TVVJGQUNFX0NVQkVNQVApCiAJCW51bV9sYXllcnMg PSBTVkdBM0RfTUFYX1NVUkZBQ0VfRkFDRVM7Ci0JZWxzZQotCQludW1fbGF5ZXJzID0gMTsKIAog CXNyZi0+cmVzLmJhY2t1cF9zaXplICAgPQogCQlzdmdhM2RzdXJmYWNlX2dldF9zZXJpYWxpemVk X3NpemUoc3JmLT5mb3JtYXQsCkBAIC0xNjMzLDMgKzE1MTAsMjYyIEBAIGludCB2bXdfc3VyZmFj ZV9nYl9wcml2X2RlZmluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXR0bV9yZWFkX3VubG9j aygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisg KiB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfZXh0X2lvY3RsIC0gSW9jdGwgZnVuY3Rpb24gaW1wbGVt ZW50aW5nCisgKiB0aGUgdXNlciBzdXJmYWNlIGRlZmluZSBmdW5jdGlvbmFsaXR5LgorICoKKyAq IEBkZXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX2RldmljZS4KKyAqIEBkYXRhOiBQb2ludGVy IHRvIGRhdGEgY29waWVkIGZyb20gLyB0byB1c2VyLXNwYWNlLgorICogQGZpbGVfcHJpdjogUG9p bnRlciB0byBhIGRybSBmaWxlIHByaXZhdGUgc3RydWN0dXJlLgorICovCitpbnQgdm13X2diX3N1 cmZhY2VfZGVmaW5lX2V4dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXVuaW9uIGRybV92bXdfZ2Jf c3VyZmFjZV9jcmVhdGVfZXh0X2FyZyAqYXJnID0KKwkgICAgKHVuaW9uIGRybV92bXdfZ2Jfc3Vy ZmFjZV9jcmVhdGVfZXh0X2FyZyAqKWRhdGE7CisJc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9j cmVhdGVfZXh0X3JlcSAqcmVxID0gJmFyZy0+cmVxOworCXN0cnVjdCBkcm1fdm13X2diX3N1cmZh Y2VfY3JlYXRlX3JlcCAqcmVwID0gJmFyZy0+cmVwOworCisJcmV0dXJuIHZtd19nYl9zdXJmYWNl X2RlZmluZV9pbnRlcm5hbChkZXYsIHJlcSwgcmVwLCBmaWxlX3ByaXYpOworfQorCisvKioKKyAq IHZtd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9leHRfaW9jdGwgLSBJb2N0bCBmdW5jdGlvbiBpbXBs ZW1lbnRpbmcKKyAqIHRoZSB1c2VyIHN1cmZhY2UgcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkuCisg KgorICogQGRldjogUG9pbnRlciB0byBhIHN0cnVjdCBkcm1fZGV2aWNlLgorICogQGRhdGE6IFBv aW50ZXIgdG8gZGF0YSBjb3BpZWQgZnJvbSAvIHRvIHVzZXItc3BhY2UuCisgKiBAZmlsZV9wcml2 OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KK2ludCB2bXdf Z2Jfc3VyZmFjZV9yZWZlcmVuY2VfZXh0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCisJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJdW5pb24g ZHJtX3Ztd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9leHRfYXJnICphcmcgPQorCSAgICAodW5pb24g ZHJtX3Ztd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9leHRfYXJnICopZGF0YTsKKwlzdHJ1Y3QgZHJt X3Ztd19zdXJmYWNlX2FyZyAqcmVxID0gJmFyZy0+cmVxOworCXN0cnVjdCBkcm1fdm13X2diX3N1 cmZhY2VfcmVmX2V4dF9yZXAgKnJlcCA9ICZhcmctPnJlcDsKKworCXJldHVybiB2bXdfZ2Jfc3Vy ZmFjZV9yZWZlcmVuY2VfaW50ZXJuYWwoZGV2LCByZXEsIHJlcCwgZmlsZV9wcml2KTsKK30KKwor LyoqCisgKiB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW50ZXJuYWwgLSBJb2N0bCBmdW5jdGlvbiBp bXBsZW1lbnRpbmcKKyAqIHRoZSB1c2VyIHN1cmZhY2UgZGVmaW5lIGZ1bmN0aW9uYWxpdHkuCisg KgorICogQGRldjogUG9pbnRlciB0byBhIHN0cnVjdCBkcm1fZGV2aWNlLgorICogQHJlcTogUmVx dWVzdCBhcmd1bWVudCBmcm9tIHVzZXItc3BhY2UuCisgKiBAcmVwOiBSZXNwb25zZSBhcmd1bWVu dCB0byB1c2VyLXNwYWNlLgorICogQGZpbGVfcHJpdjogUG9pbnRlciB0byBhIGRybSBmaWxlIHBy aXZhdGUgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW50Cit2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVf aW50ZXJuYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Zt d19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxICpyZXEsCisJCQkgICAgICAgc3RydWN0IGRybV92 bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwICpyZXAsCisJCQkgICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2 KGRldik7CisJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOworCXN0cnVjdCB2bXdf c3VyZmFjZSAqc3JmOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgdm13X3Jl c291cmNlICp0bXA7CisJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYo ZmlsZV9wcml2KS0+dGZpbGU7CisJaW50IHJldDsKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90 IGJhY2t1cF9oYW5kbGUgPSAwOworCVNWR0EzZFN1cmZhY2VBbGxGbGFncyBzdmdhM2RfZmxhZ3Nf NjQgPQorCQlTVkdBM0RfRkxBR1NfNjQocmVxLT5zdmdhM2RfZmxhZ3NfdXBwZXJfMzJfYml0cywK KwkJCQlyZXEtPmJhc2Uuc3ZnYTNkX2ZsYWdzKTsKKworCWlmICghZGV2X3ByaXYtPmhhc19zbTRf MSkgeworCQkvKgorCQkgKiBJZiBTTTRfMSBpcyBub3Qgc3VwcG9ydCB0aGVuIGNhbm5vdCBzZW5k IDY0LWJpdCBmbGFnIHRvCisJCSAqIGRldmljZS4KKwkJICovCisJCWlmIChyZXEtPnN2Z2EzZF9m bGFnc191cHBlcl8zMl9iaXRzICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAocmVx LT5iYXNlLm11bHRpc2FtcGxlX2NvdW50ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlp ZiAocmVxLT5tdWx0aXNhbXBsZV9wYXR0ZXJuICE9IFNWR0EzRF9NU19QQVRURVJOX05PTkUpCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAocmVxLT5xdWFsaXR5X2xldmVsICE9IFNWR0EzRF9N U19RVUFMSVRZX05PTkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmVxLT5iYXNl Lm1pcF9sZXZlbHMgPiBEUk1fVk1XX01BWF9NSVBfTEVWRUxTKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmICh1bmxpa2VseSh2bXdfdXNlcl9zdXJmYWNlX3NpemUgPT0gMCkpCisJCXZtd191c2Vy X3N1cmZhY2Vfc2l6ZSA9IHR0bV9yb3VuZF9wb3Qoc2l6ZW9mKCp1c2VyX3NyZikpICsKKwkJCTEy ODsKKworCXNpemUgPSB2bXdfdXNlcl9zdXJmYWNlX3NpemUgKyAxMjg7CisKKwkvKiBEZWZpbmUg YSBzdXJmYWNlIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLiAqLworCXJldCA9IHZtd19zdXJmYWNl X2diX3ByaXZfZGVmaW5lKGRldiwKKwkJCQkJIHNpemUsCisJCQkJCSBzdmdhM2RfZmxhZ3NfNjQs CisJCQkJCSByZXEtPmJhc2UuZm9ybWF0LAorCQkJCQkgcmVxLT5iYXNlLmRybV9zdXJmYWNlX2Zs YWdzICYKKwkJCQkJIGRybV92bXdfc3VyZmFjZV9mbGFnX3NjYW5vdXQsCisJCQkJCSByZXEtPmJh c2UubWlwX2xldmVscywKKwkJCQkJIHJlcS0+YmFzZS5tdWx0aXNhbXBsZV9jb3VudCwKKwkJCQkJ IHJlcS0+YmFzZS5hcnJheV9zaXplLAorCQkJCQkgcmVxLT5iYXNlLmJhc2Vfc2l6ZSwKKwkJCQkJ IHJlcS0+bXVsdGlzYW1wbGVfcGF0dGVybiwKKwkJCQkJIHJlcS0+cXVhbGl0eV9sZXZlbCwKKwkJ CQkJICZzcmYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwl1 c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihzcmYsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBzcmYp OworCWlmIChkcm1faXNfcHJpbWFyeV9jbGllbnQoZmlsZV9wcml2KSkKKwkJdXNlcl9zcmYtPm1h c3RlciA9IGRybV9tYXN0ZXJfZ2V0KGZpbGVfcHJpdi0+bWFzdGVyKTsKKworCXJldCA9IHR0bV9y ZWFkX2xvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0sIHRydWUpOworCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSAmdXNlcl9zcmYtPnNyZi5yZXM7 CisKKwlpZiAocmVxLT5iYXNlLmJ1ZmZlcl9oYW5kbGUgIT0gU1ZHQTNEX0lOVkFMSURfSUQpIHsK KwkJcmV0ID0gdm13X3VzZXJfYm9fbG9va3VwKHRmaWxlLCByZXEtPmJhc2UuYnVmZmVyX2hhbmRs ZSwKKwkJCQkJICZyZXMtPmJhY2t1cCwKKwkJCQkJICZ1c2VyX3NyZi0+YmFja3VwX2Jhc2UpOwor CQlpZiAocmV0ID09IDApIHsKKwkJCWlmIChyZXMtPmJhY2t1cC0+YmFzZS5udW1fcGFnZXMgKiBQ QUdFX1NJWkUgPAorCQkJICAgIHJlcy0+YmFja3VwX3NpemUpIHsKKwkJCQlEUk1fRVJST1IoIlN1 cmZhY2UgYmFja3VwIGJ1ZmZlciB0b28gc21hbGwuXG4iKTsKKwkJCQl2bXdfYm9fdW5yZWZlcmVu Y2UoJnJlcy0+YmFja3VwKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X3VubG9j azsKKwkJCX0gZWxzZSB7CisJCQkJYmFja3VwX2hhbmRsZSA9IHJlcS0+YmFzZS5idWZmZXJfaGFu ZGxlOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChyZXEtPmJhc2UuZHJtX3N1cmZhY2VfZmxhZ3Mg JgorCQkgICBkcm1fdm13X3N1cmZhY2VfZmxhZ19jcmVhdGVfYnVmZmVyKQorCQlyZXQgPSB2bXdf dXNlcl9ib19hbGxvYyhkZXZfcHJpdiwgdGZpbGUsCisJCQkJCXJlcy0+YmFja3VwX3NpemUsCisJ CQkJCXJlcS0+YmFzZS5kcm1fc3VyZmFjZV9mbGFncyAmCisJCQkJCWRybV92bXdfc3VyZmFjZV9m bGFnX3NoYXJlYWJsZSwKKwkJCQkJJmJhY2t1cF9oYW5kbGUsCisJCQkJCSZyZXMtPmJhY2t1cCwK KwkJCQkJJnVzZXJfc3JmLT5iYWNrdXBfYmFzZSk7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDAp KSB7CisJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKwkJZ290byBvdXRfdW5sb2Nr OworCX0KKworCXRtcCA9IHZtd19yZXNvdXJjZV9yZWZlcmVuY2UocmVzKTsKKwlyZXQgPSB0dG1f cHJpbWVfb2JqZWN0X2luaXQodGZpbGUsIHJlcy0+YmFja3VwX3NpemUsICZ1c2VyX3NyZi0+cHJp bWUsCisJCQkJICAgIHJlcS0+YmFzZS5kcm1fc3VyZmFjZV9mbGFncyAmCisJCQkJICAgIGRybV92 bXdfc3VyZmFjZV9mbGFnX3NoYXJlYWJsZSwKKwkJCQkgICAgVk1XX1JFU19TVVJGQUNFLAorCQkJ CSAgICAmdm13X3VzZXJfc3VyZmFjZV9iYXNlX3JlbGVhc2UsIE5VTEwpOworCisJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkgeworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnRtcCk7CisJCXZt d19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwor CXJlcC0+aGFuZGxlICAgICAgPSB1c2VyX3NyZi0+cHJpbWUuYmFzZS5oYXNoLmtleTsKKwlyZXAt PmJhY2t1cF9zaXplID0gcmVzLT5iYWNrdXBfc2l6ZTsKKwlpZiAocmVzLT5iYWNrdXApIHsKKwkJ cmVwLT5idWZmZXJfbWFwX2hhbmRsZSA9CisJCQlkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJnJl cy0+YmFja3VwLT5iYXNlLnZtYV9ub2RlKTsKKwkJcmVwLT5idWZmZXJfc2l6ZSA9IHJlcy0+YmFj a3VwLT5iYXNlLm51bV9wYWdlcyAqIFBBR0VfU0laRTsKKwkJcmVwLT5idWZmZXJfaGFuZGxlID0g YmFja3VwX2hhbmRsZTsKKwl9IGVsc2UgeworCQlyZXAtPmJ1ZmZlcl9tYXBfaGFuZGxlID0gMDsK KwkJcmVwLT5idWZmZXJfc2l6ZSA9IDA7CisJCXJlcC0+YnVmZmVyX2hhbmRsZSA9IFNWR0EzRF9J TlZBTElEX0lEOworCX0KKworCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKworb3V0 X3VubG9jazoKKwl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0pOwor CXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdm13X2diX3N1cmZhY2VfcmVmZXJlbmNlX2ludGVy bmFsIC0gSW9jdGwgZnVuY3Rpb24gaW1wbGVtZW50aW5nCisgKiB0aGUgdXNlciBzdXJmYWNlIHJl ZmVyZW5jZSBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEBkZXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qg ZHJtX2RldmljZS4KKyAqIEByZXE6IFBvaW50ZXIgdG8gdXNlci1zcGFjZSByZXF1ZXN0IHN1cmZh Y2UgYXJnLgorICogQHJlcDogUG9pbnRlciB0byByZXNwb25zZSB0byB1c2VyLXNwYWNlLgorICog QGZpbGVfcHJpdjogUG9pbnRlciB0byBhIGRybSBmaWxlIHByaXZhdGUgc3RydWN0dXJlLgorICov CitzdGF0aWMgaW50Cit2bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfaW50ZXJuYWwoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICpyZXEsCisJ CQkJICBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX3JlZl9leHRfcmVwICpyZXAsCisJCQkJICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZt d19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKKwlz dHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CisJc3RydWN0IHR0bV9iYXNlX29iamVj dCAqYmFzZTsKKwl1aW50MzJfdCBiYWNrdXBfaGFuZGxlOworCWludCByZXQgPSAtRUlOVkFMOwor CisJcmV0ID0gdm13X3N1cmZhY2VfaGFuZGxlX3JlZmVyZW5jZShkZXZfcHJpdiwgZmlsZV9wcml2 LCByZXEtPnNpZCwKKwkJCQkJICAgcmVxLT5oYW5kbGVfdHlwZSwgJmJhc2UpOworCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwl1c2VyX3NyZiA9IGNvbnRhaW5lcl9v ZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgcHJpbWUuYmFzZSk7CisJc3JmID0gJnVz ZXJfc3JmLT5zcmY7CisJaWYgKCFzcmYtPnJlcy5iYWNrdXApIHsKKwkJRFJNX0VSUk9SKCJTaGFy ZWQgR0Igc3VyZmFjZSBpcyBtaXNzaW5nIGEgYmFja3VwIGJ1ZmZlci5cbiIpOworCQlnb3RvIG91 dF9iYWRfcmVzb3VyY2U7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRl eCk7IC8qIFByb3RlY3QgcmVzLT5iYWNrdXAgKi8KKwlyZXQgPSB2bXdfdXNlcl9ib19yZWZlcmVu Y2UodGZpbGUsIHNyZi0+cmVzLmJhY2t1cCwgJmJhY2t1cF9oYW5kbGUpOworCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7 CisJCURSTV9FUlJPUigiQ291bGQgbm90IGFkZCBhIHJlZmVyZW5jZSB0byBhIEdCIHN1cmZhY2Ug IgorCQkJICAiYmFja3VwIGJ1ZmZlci5cbiIpOworCQkodm9pZCkgdHRtX3JlZl9vYmplY3RfYmFz ZV91bnJlZih0ZmlsZSwgYmFzZS0+aGFzaC5rZXksCisJCQkJCQkgVFRNX1JFRl9VU0FHRSk7CisJ CWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKKwl9CisKKwlyZXAtPmNyZXEuYmFzZS5zdmdhM2RfZmxh Z3MgPSBTVkdBM0RfRkxBR1NfTE9XRVJfMzIoc3JmLT5mbGFncyk7CisJcmVwLT5jcmVxLmJhc2Uu Zm9ybWF0ID0gc3JmLT5mb3JtYXQ7CisJcmVwLT5jcmVxLmJhc2UubWlwX2xldmVscyA9IHNyZi0+ bWlwX2xldmVsc1swXTsKKwlyZXAtPmNyZXEuYmFzZS5kcm1fc3VyZmFjZV9mbGFncyA9IDA7CisJ cmVwLT5jcmVxLmJhc2UubXVsdGlzYW1wbGVfY291bnQgPSBzcmYtPm11bHRpc2FtcGxlX2NvdW50 OworCXJlcC0+Y3JlcS5iYXNlLmF1dG9nZW5fZmlsdGVyID0gc3JmLT5hdXRvZ2VuX2ZpbHRlcjsK KwlyZXAtPmNyZXEuYmFzZS5hcnJheV9zaXplID0gc3JmLT5hcnJheV9zaXplOworCXJlcC0+Y3Jl cS5iYXNlLmJ1ZmZlcl9oYW5kbGUgPSBiYWNrdXBfaGFuZGxlOworCXJlcC0+Y3JlcS5iYXNlLmJh c2Vfc2l6ZSA9IHNyZi0+YmFzZV9zaXplOworCXJlcC0+Y3JlcC5oYW5kbGUgPSB1c2VyX3NyZi0+ cHJpbWUuYmFzZS5oYXNoLmtleTsKKwlyZXAtPmNyZXAuYmFja3VwX3NpemUgPSBzcmYtPnJlcy5i YWNrdXBfc2l6ZTsKKwlyZXAtPmNyZXAuYnVmZmVyX2hhbmRsZSA9IGJhY2t1cF9oYW5kbGU7CisJ cmVwLT5jcmVwLmJ1ZmZlcl9tYXBfaGFuZGxlID0KKwkJZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRy KCZzcmYtPnJlcy5iYWNrdXAtPmJhc2Uudm1hX25vZGUpOworCXJlcC0+Y3JlcC5idWZmZXJfc2l6 ZSA9IHNyZi0+cmVzLmJhY2t1cC0+YmFzZS5udW1fcGFnZXMgKiBQQUdFX1NJWkU7CisKKwlyZXAt PmNyZXEudmVyc2lvbiA9IGRybV92bXdfZ2Jfc3VyZmFjZV92MTsKKwlyZXAtPmNyZXEuc3ZnYTNk X2ZsYWdzX3VwcGVyXzMyX2JpdHMgPQorCQlTVkdBM0RfRkxBR1NfVVBQRVJfMzIoc3JmLT5mbGFn cyk7CisJcmVwLT5jcmVxLm11bHRpc2FtcGxlX3BhdHRlcm4gPSBzcmYtPm11bHRpc2FtcGxlX3Bh dHRlcm47CisJcmVwLT5jcmVxLnF1YWxpdHlfbGV2ZWwgPSBzcmYtPnF1YWxpdHlfbGV2ZWw7CisJ cmVwLT5jcmVxLm11c3RfYmVfemVybyA9IDA7CisKK291dF9iYWRfcmVzb3VyY2U6CisJdHRtX2Jh c2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9p bmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2Ry bS5oCmluZGV4IDg0ZTgxYjM4Y2ExOC4uNjhmZjM3ZDRjMDM1IDEwMDY0NAotLS0gYS9pbmNsdWRl L3VhcGkvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0u aApAQCAtNjksNiArNjksOCBAQCBleHRlcm4gIkMiIHsKICNkZWZpbmUgRFJNX1ZNV19HQl9TVVJG QUNFX1JFRiAgICAgICAyNAogI2RlZmluZSBEUk1fVk1XX1NZTkNDUFUgICAgICAgICAgICAgIDI1 CiAjZGVmaW5lIERSTV9WTVdfQ1JFQVRFX0VYVEVOREVEX0NPTlRFWFQgMjYKKyNkZWZpbmUgRFJN X1ZNV19HQl9TVVJGQUNFX0NSRUFURV9FWFQgICAyNworI2RlZmluZSBEUk1fVk1XX0dCX1NVUkZB Q0VfUkVGX0VYVCAgICAgIDI4CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqCkBAIC0xMTA1LDYg KzExMDcsMTA2IEBAIHN0cnVjdCBkcm1fdm13X2hhbmRsZV9jbG9zZV9hcmcgewogfTsKICNkZWZp bmUgZHJtX3Ztd191bnJlZl9kbWFidWZfYXJnIGRybV92bXdfaGFuZGxlX2Nsb3NlX2FyZwogCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19HQl9TVVJGQUNFX0NSRUFURV9FWFQg LSBDcmVhdGUgYSBob3N0IGd1ZXN0LWJhY2tlZCBzdXJmYWNlLgorICoKKyAqIEFsbG9jYXRlcyBh IHN1cmZhY2UgaGFuZGxlIGFuZCBxdWV1ZXMgYSBjcmVhdGUgc3VyZmFjZSBjb21tYW5kCisgKiBm b3IgdGhlIGhvc3Qgb24gdGhlIGZpcnN0IHVzZSBvZiB0aGUgc3VyZmFjZS4gVGhlIHN1cmZhY2Ug SUQgY2FuCisgKiBiZSB1c2VkIGFzIHRoZSBzdXJmYWNlIElEIGluIGNvbW1hbmRzIHJlZmVyZW5j aW5nIHRoZSBzdXJmYWNlLgorICoKKyAqIFRoaXMgbmV3IGNvbW1hbmQgZXh0ZW5kcyBEUk1fVk1X X0dCX1NVUkZBQ0VfQ1JFQVRFIGJ5IGFkZGluZyB2ZXJzaW9uCisgKiBwYXJhbWV0ZXIgYW5kIDY0 IGJpdCBzdmdhIGZsYWcuCisgKi8KKworLyoqCisgKiBlbnVtIGRybV92bXdfc3VyZmFjZV92ZXJz aW9uCisgKgorICogQGRybV92bXdfc3VyZmFjZV9nYl92MTogQ29ycmVzcG9uZHMgdG8gY3VycmVu dCBnYiBzdXJmYWNlIGZvcm1hdCB3aXRoCisgKiBzdmdhM2Qgc3VyZmFjZSBmbGFncyBzcGxpdCBp bnRvIDIsIHVwcGVyIGhhbGYgYW5kIGxvd2VyIGhhbGYuCisgKi8KK2VudW0gZHJtX3Ztd19zdXJm YWNlX3ZlcnNpb24geworCWRybV92bXdfZ2Jfc3VyZmFjZV92MQorfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxCisgKgorICogQGJhc2U6IFN1cmZh Y2UgY3JlYXRlIHBhcmFtZXRlcnMuCisgKiBAdmVyc2lvbjogVmVyc2lvbiBvZiBzdXJmYWNlIGNy ZWF0ZSBpb2N0bC4KKyAqIEBzdmdhM2RfZmxhZ3NfdXBwZXJfMzJfYml0czogVXBwZXIgMzIgYml0 cyBvZiBzdmdhM2QgZmxhZ3MuCisgKiBAbXVsdGlzYW1wbGVfcGF0dGVybjogTXVsdGlzYW1wbGlu ZyBwYXR0ZXJuIHdoZW4gbXNhYSBpcyBzdXBwb3J0ZWQuCisgKiBAcXVhbGl0eV9sZXZlbDogUHJl Y2lzaW9uIHNldHRpbmdzIGZvciBlYWNoIHNhbXBsZS4KKyAqIEBtdXN0X2JlX3plcm86IFJlc2Vy dmVkIGZvciBmdXR1cmUgdXNhZ2UuCisgKgorICogSW5wdXQgYXJndW1lbnQgdG8gdGhlICBEUk1f Vk1XX0dCX1NVUkZBQ0VfQ1JFQVRFX0VYVCBJb2N0bC4KKyAqIFBhcnQgb2Ygb3V0cHV0IGFyZ3Vt ZW50IGZvciB0aGUgRFJNX1ZNV19HQl9TVVJGQUNFX1JFRl9FWFQgSW9jdGwuCisgKi8KK3N0cnVj dCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX2V4dF9yZXEgeworCXN0cnVjdCBkcm1fdm13X2di X3N1cmZhY2VfY3JlYXRlX3JlcSBiYXNlOworCWVudW0gZHJtX3Ztd19zdXJmYWNlX3ZlcnNpb24g dmVyc2lvbjsKKwl1aW50MzJfdCBzdmdhM2RfZmxhZ3NfdXBwZXJfMzJfYml0czsKKwlTVkdBM2RN U1BhdHRlcm4gbXVsdGlzYW1wbGVfcGF0dGVybjsKKwlTVkdBM2RNU1F1YWxpdHlMZXZlbCBxdWFs aXR5X2xldmVsOworCXVpbnQ2NF90IG11c3RfYmVfemVybzsKK307CisKKy8qKgorICogdW5pb24g ZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfYXJnCisgKgorICogQHJlcTogSW5wdXQgYXJn dW1lbnQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICogQHJlcDogT3V0cHV0IGFyZ3VtZW50IGFzIGRl c2NyaWJlZCBhYm92ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19HQl9TVVJGQUNF X0NSRUFURV9FWFQgaW9jdGwuCisgKi8KK3VuaW9uIGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVf ZXh0X2FyZyB7CisJc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwIHJlcDsKKwlz dHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxIHJlcTsKK307CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0dCX1NVUkZBQ0VfUkVGX0VYVCAtIFJlZmVy ZW5jZSBhIGhvc3Qgc3VyZmFjZS4KKyAqCisgKiBQdXRzIGEgcmVmZXJlbmNlIG9uIGEgaG9zdCBz dXJmYWNlIHdpdGggYSBnaXZlbiBoYW5kbGUsIGFzIHByZXZpb3VzbHkKKyAqIHJldHVybmVkIGJ5 IHRoZSBEUk1fVk1XX0dCX1NVUkZBQ0VfQ1JFQVRFX0VYVCBpb2N0bC4KKyAqIEEgcmVmZXJlbmNl IHdpbGwgbWFrZSBzdXJlIHRoZSBzdXJmYWNlIGlzbid0IGRlc3Ryb3llZCB3aGlsZSB3ZSBob2xk CisgKiBpdCBhbmQgd2lsbCBhbGxvdyB0aGUgY2FsbGluZyBjbGllbnQgdG8gdXNlIHRoZSBzdXJm YWNlIGhhbmRsZSBpbgorICogdGhlIGNvbW1hbmQgc3RyZWFtLgorICoKKyAqIE9uIHN1Y2Nlc3Nm dWwgcmV0dXJuLCB0aGUgSW9jdGwgcmV0dXJucyB0aGUgc3VyZmFjZSBpbmZvcm1hdGlvbiBnaXZl bgorICogdG8gYW5kIHJldHVybmVkIGZyb20gdGhlIERSTV9WTVdfR0JfU1VSRkFDRV9DUkVBVEVf RVhUIGlvY3RsLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZf ZXh0X3JlcAorICoKKyAqIEBjcmVxOiBUaGUgZGF0YSB1c2VkIGFzIGlucHV0IHdoZW4gdGhlIHN1 cmZhY2Ugd2FzIGNyZWF0ZWQsIGFzIGRlc2NyaWJlZAorICogICAgICAgIGFib3ZlIGF0ICJzdHJ1 Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxIgorICogQGNyZXA6IEFkZGl0aW9u YWwgZGF0YSBvdXRwdXQgd2hlbiB0aGUgc3VyZmFjZSB3YXMgY3JlYXRlZCwgYXMgZGVzY3JpYmVk CisgKiAgICAgICAgYWJvdmUgYXQgInN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3Jl cCIKKyAqCisgKiBPdXRwdXQgQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfR0JfU1VSRkFDRV9SRUZf RVhUIGlvY3RsLgorICovCitzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX3JlZl9leHRfcmVwIHsK KwlzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9leHRfcmVxIGNyZXE7CisJc3RydWN0 IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwIGNyZXA7Cit9OworCisvKioKKyAqIHVuaW9u IGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfZXh0X2FyZworICoKKyAqIEByZXE6IElucHV0 IGRhdGEgYXMgZGVzY3JpYmVkIGFib3ZlIGF0ICJzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyIK KyAqIEByZXA6IE91dHB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZSBhdAorICogICAgICAgInN0 cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfcmVmX2V4dF9yZXAiCisgKgorICogQXJndW1lbnQgdG8g dGhlIERSTV9WTVdfR0JfU1VSRkFDRV9SRUYgSW9jdGwuCisgKi8KK3VuaW9uIGRybV92bXdfZ2Jf c3VyZmFjZV9yZWZlcmVuY2VfZXh0X2FyZyB7CisJc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9y ZWZfZXh0X3JlcCByZXA7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgcmVxOworfTsKKwog I2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCiB9CiAjZW5kaWYKLS0gCjIuMTguMC5yYzEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=