From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH] drm: Add Grain Media GM12U320 kms driver Date: Wed, 8 Jul 2015 14:14:17 +0200 Message-ID: <1436357657-5366-2-git-send-email-hdegoede@redhat.com> References: <1436357657-5366-1-git-send-email-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 270396E326 for ; Wed, 8 Jul 2015 05:14:22 -0700 (PDT) In-Reply-To: <1436357657-5366-1-git-send-email-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dave Airlie Cc: Hans de Goede , Antonio Ospite , Ben Skeggs , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org R3JhaW4tbWVkaWEgR00xMlUzMjAgYmFzZWQgZGV2aWNlcyBhcmUgbWluaSB2aWRlbyBwcm9qZWN0 b3JzIHVzaW5nIFVTQiBmb3IKYm90aCBwb3dlciBhbmQgdmlkZW8gZGF0YSB0cmFuc3BvcnQuCgpU aGlzIGNvbW1pdCBhZGRzIGEga21zIGRyaXZlciBmb3IgdGhlc2UgZGV2aWNlcywgaW5jbHVkaW5n IHByaW1lIHN1cHBvcnQuCgpUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgdWRs IGttcyBkcml2ZXIsIGFuZCB0aGUgZ20xMnUzMjAKZmIgZHJpdmVyIGJ5IFZpYWNoZXNsYXYgTnVy bWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4uCgpTaWduZWQtb2ZmLWJ5OiBIYW5zIGRlIEdv ZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmln ICAgICAgICAgICAgICB8ICAxNiArCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvTWFrZWZpbGUg ICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nv bm5lY3Rvci5jIHwgMTUxICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUz MjBfZG1hYnVmLmMgICAgfCAyODMgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20x MnUzMjAvZ20xMnUzMjBfZHJ2LmMgICAgICAgfCAxNjAgKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2LmggICAgICAgfCAxMzEgKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2VuY29kZXIuYyAgIHwgIDgzICsrKysrCiBkcml2ZXJz L2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZmIuYyAgICAgICAgfCA0MjAgKysrKysrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2dlbS5jICAgICAg IHwgMjQxICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9t YWluLmMgICAgICB8IDQ5OSArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX21vZGVzZXQuYyAgIHwgMTUyICsrKysrKysrCiAxNCBmaWxl cyBjaGFuZ2VkLCAyMTUyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vZ20xMnUzMjAvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9nbTEydTMyMC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9nbTEydTMyMC9nbTEydTMyMF9jb25uZWN0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kbWFidWYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9lbmNvZGVyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZmIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9nZW0uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWlu LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBf bW9kZXNldC5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4 MTMzY2VmLi40Y2FhYjBjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVS UwpAQCAtMzU0Myw2ICszNTQzLDEyIEBAIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2Ry bS9pbXgvCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZHJtL2lteC8KIAor RFJNIERSSVZFUlMgRk9SIEdSQUlOLU1FRElBIEdNMTJVMzIwCitNOglIYW5zIGRlIEdvZWRlIDxo ZGVnb2VkZUByZWRoYXQuY29tPgorTDoJZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwor UzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvCisKIERSTSBEUklWRVJT IEZPUiBOVklESUEgVEVHUkEKIE06CVRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BnbWFp bC5jb20+CiBNOglUZXJqZSBCZXJnc3Ryw7ZtIDx0YmVyZ3N0cm9tQG52aWRpYS5jb20+CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln CmluZGV4IGM0NmNhMzEuLjFkYTc3ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNDAsMyArMjQwLDUgQEAgc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vc3RpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2lteC9LY29u ZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmlnIgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CmluZGV4IDU3MTNkMDUuLjQ0OTkzOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTY3LDYgKzY3LDcgQEAgb2Jq LSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRl Z3JhLwogb2JqLSQoQ09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1Y KSArPSBpbXgvCitvYmotJChDT05GSUdfRFJNX0dNMTJVMzIwKSArPSBnbTEydTMyMC8KIG9iai15 CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v Z20xMnUzMjAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmVj YWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcK QEAgLTAsMCArMSwxNiBAQAorY29uZmlnIERSTV9HTTEyVTMyMAorCXRyaXN0YXRlICJHcmFpbiBN ZWRpYSBHTTEyVTMyMCBiYXNlZCBtaW5pIHByb2plY3RvcnMiCisJZGVwZW5kcyBvbiBEUk0KKwlk ZXBlbmRzIG9uIFVTQl9TVVBQT1JUCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJc2Vs ZWN0IFVTQgorCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVB CisJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKwlzZWxlY3QgRkJfREVGRVJSRURfSU8KKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKyAgICAgICAgc2VsZWN0IERSTV9LTVNfRkJfSEVMUEVSCisJaGVs cAorCSAgVGhpcyBpcyBhIEtNUyBkcml2ZXIgZm9yIEdyYWluIE1lZGlhIEdNMTJVMzIwIGJhc2Vk IHVzYiBtaW5pIHZpZGVvCisJICBwcm9qZWN0b3JzLCBzdWNoIGFzIHRoZSBBY2VyIEMxMjAuCisJ ICBTYXkgTS9ZIHRvIGFkZCBzdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIHZpYSBkcm0va21zIGlu dGVyZmFjZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNjIzNDQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9nbTEydTMyMC9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK2NjZmxhZ3MteSA6PSAtSWluY2x1 ZGUvZHJtCisKK2dtMTJ1MzIwLXkgOj0JZ20xMnUzMjBfZHJ2Lm8gZ20xMnUzMjBfbW9kZXNldC5v IGdtMTJ1MzIwX2Nvbm5lY3Rvci5vIFwKKwkJZ20xMnUzMjBfZW5jb2Rlci5vIGdtMTJ1MzIwX21h aW4ubyBnbTEydTMyMF9mYi5vIFwKKwkJZ20xMnUzMjBfZ2VtLm8gZ20xMnUzMjBfZG1hYnVmLm8K Kworb2JqLSQoQ09ORklHX0RSTV9HTTEyVTMyMCkgKz0gZ20xMnUzMjAubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9n cHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nvbm5lY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjk2ODgwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vZ20xMnUzMjAvZ20xMnUzMjBfY29ubmVjdG9yLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisg KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBSZWQgSGF0IEluYy4KKyAqCisgKiBCYXNlZCBpbiBw YXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2VkIGluIHBhcnRzIG9uIHRoZSBnbTEydTMyMCBmYiBk cml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVmlhY2hlc2xhdiBOdXJtZWtoYW1pdG92IDxz bGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMg PHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5 YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9t cHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0 byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9m IHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Vk aWQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSAiZ20xMnUz MjBfZHJ2LmgiCisKKy8qCisgKiBOb3RlIHRoaXMgYXNzdW1lcyB0aGlzIGRyaXZlciBpcyBvbmx5 IGV2ZXIgdXNlZCB3aXRoIHRoZSBBY2VyIEMxMjAsIGlmIHdlCisgKiBhZGQgc3VwcG9ydCBmb3Ig b3RoZXIgZGV2aWNlcyB0aGUgdmVuZG9yIGFuZCBtb2RlbCBzaG91bGQgYmUgcGFyYW1ldHJpemVk LgorICovCitzdGF0aWMgc3RydWN0IGVkaWQgZ20xMnUzMjBfZWRpZCA9IHsKKwkuaGVhZGVyCQk9 IHsgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCB9LAorCS5t ZmdfaWQJCT0geyAweDA0LCAweDcyIH0sCS8qICJBQ1IiICovCisJLnByb2RfY29kZQk9IHsgMHgy MCwgMHhjMSB9LAkvKiBDMTIwaCAqLworCS5tZmdfd2Vlawk9IDEsCisJLm1mZ195ZWFyCT0gMSwK KwkudmVyc2lvbgk9IDEsCQkJLyogRURJRCAxLjMgKi8KKwkucmV2aXNpb24JPSAzLAkJCS8qIEVE SUQgMS4zICovCisJLmlucHV0CQk9IDB4ODAsCQkJLyogRGlnaXRhbCBpbnB1dCAqLworCS5mZWF0 dXJlcwk9IDB4MDIsCQkJLyogUHJlZiB0aW1pbmcgaW4gRFREIDEgKi8KKwkuc3RhbmRhcmRfdGlt aW5ncyA9IHsgeyAxLCAxIH0sIHsgMSwgMSB9LCB7IDEsIDEgfSwgeyAxLCAxIH0sCisJCQkgICAg ICB7IDEsIDEgfSwgeyAxLCAxIH0sIHsgMSwgMSB9LCB7IDEsIDEgfSB9LAorCS5kZXRhaWxlZF90 aW1pbmdzID0geyB7CisJCS5waXhlbF9jbG9jayA9IDMzODMsCisJCS8qIGhhY3RpdmUgPSA4NTIs IGhibGFuayA9IDI1NiAqLworCQkuZGF0YS5waXhlbF9kYXRhLmhhY3RpdmVfbG8gPSAweDU0LAor CQkuZGF0YS5waXhlbF9kYXRhLmhibGFua19sbyA9IDB4MDAsCisJCS5kYXRhLnBpeGVsX2RhdGEu aGFjdGl2ZV9oYmxhbmtfaGkgPSAweDMxLAorCQkvKiB2YWN0aXZlID0gNDgwLCB2YmxhbmsgPSAy OCAqLworCQkuZGF0YS5waXhlbF9kYXRhLnZhY3RpdmVfbG8gPSAweGUwLAorCQkuZGF0YS5waXhl bF9kYXRhLnZibGFua19sbyA9IDB4MWMsCisJCS5kYXRhLnBpeGVsX2RhdGEudmFjdGl2ZV92Ymxh bmtfaGkgPSAweDEwLAorCQkvKiBoc3luYyBvZmZzZXQgNDAgcHcgMTI4LCB2c3luYyBvZmZzZXQg MSBwdyA0ICovCisJCS5kYXRhLnBpeGVsX2RhdGEuaHN5bmNfb2Zmc2V0X2xvID0gMHgyOCwKKwkJ LmRhdGEucGl4ZWxfZGF0YS5oc3luY19wdWxzZV93aWR0aF9sbyA9IDB4ODAsCisJCS5kYXRhLnBp eGVsX2RhdGEudnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2xvID0gMHgxNCwKKwkJLmRhdGEucGl4 ZWxfZGF0YS5oc3luY192c3luY19vZmZzZXRfcHVsc2Vfd2lkdGhfaGkgPSAweDAwLAorCQkvKiBE aWdpdGFsIHNlcGFyYXRlIHN5bmNzLCBoc3luYyssIHZzeW5jKyAqLworCQkuZGF0YS5waXhlbF9k YXRhLm1pc2MgPSAweDFlLAorCX0sIHsKKwkJLnBpeGVsX2Nsb2NrID0gMCwKKwkJLmRhdGEub3Ro ZXJfZGF0YS50eXBlID0gMHhmZCwgLyogTW9uaXRvciByYW5nZXMgKi8KKwkJLmRhdGEub3RoZXJf ZGF0YS5kYXRhLnJhbmdlLm1pbl92ZnJlcSA9IDU5LAorCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEu cmFuZ2UubWF4X3ZmcmVxID0gNjEsCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5taW5f aGZyZXFfa2h6ID0gMjksCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfaGZyZXFf a2h6ID0gMzIsCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5waXhlbF9jbG9ja19taHog PSA0LCAvKiA0MCBNSHogKi8KKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLmZsYWdzID0g MCwKKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLmZvcm11bGEuY3Z0ID0geworCQkJMHhh MCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCB9LAorCX0sIHsKKwkJLnBpeGVs X2Nsb2NrID0gMCwKKwkJLmRhdGEub3RoZXJfZGF0YS50eXBlID0gMHhmYywgLyogTW9kZWwgc3Ry aW5nICovCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5zdHIuc3RyID0geworCQkJJ0MnLCAnMScs ICcyJywgJzAnLCAnUCcsICdyJywgJ28nLCAnaicsICdlJywgJ2MnLAorCQkJJ3QnLCAnbycsICdy JyB9LAorCX0sIHsKKwkJLnBpeGVsX2Nsb2NrID0gMCwKKwkJLmRhdGEub3RoZXJfZGF0YS50eXBl ID0gMHhmZSwgLyogVW5zcGVjaWZpZWQgdGV4dCAvIHBhZGRpbmcgKi8KKwkJLmRhdGEub3RoZXJf ZGF0YS5kYXRhLnN0ci5zdHIgPSB7CisJCQknXG4nLCAnICcsICcgJywgJyAnLCAnICcsICcgJywg JyAnLCAnICcsICcgJywgJyAnLAorCQkJJyAnLCAnICcsICAnICcgfSwKKwl9IH0sCisJLmNoZWNr c3VtID0gMHg0MCwKK307CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9l ZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgJmdtMTJ1MzIwX2VkaWQpOworCXJldHVybiBkcm1fYWRk X2VkaWRfbW9kZXMoY29ubmVjdG9yLCAmZ20xMnUzMjBfZWRpZCk7Cit9CisKK3N0YXRpYyBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzCitnbTEydTMyMF9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlpZiAoZHJtX2RldmljZV9pc191bnBsdWdn ZWQoY29ubmVjdG9yLT5kZXYpKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7CisKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2VuY29kZXIqCitnbTEydTMyMF9iZXN0X3NpbmdsZV9lbmNvZGVyKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IGVuY19pZCA9IGNvbm5lY3Rvci0+ZW5j b2Rlcl9pZHNbMF07CisKKwlyZXR1cm4gZHJtX2VuY29kZXJfZmluZChjb25uZWN0b3ItPmRldiwg ZW5jX2lkKTsKK30KKworc3RhdGljIGludCBnbTEydTMyMF9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgc3RydWN0IGRybV9w cm9wZXJ0eSAqcHJvcGVydHksCisJCQkJICAgICAgdWludDY0X3QgdmFsKQoreworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25u ZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGNvbm5l Y3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZ20x MnUzMjBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gZ20xMnUzMjBf Z2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBnbTEydTMyMF9iZXN0X3NpbmdsZV9lbmNvZGVy LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGdtMTJ1MzIwX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRl dGVjdCA9IGdtMTJ1MzIwX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVf c2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGdtMTJ1MzIwX2Nvbm5lY3Rvcl9k ZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBnbTEydTMyMF9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5 LAorfTsKKworaW50IGdtMTJ1MzIwX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7CisKKwljb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOworCWlmICghY29ubmVjdG9yKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmdtMTJ1 MzIwX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKTsK Kwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmZ20xMnUzMjBfY29ubmVjdG9y X2hlbHBlcl9mdW5jcyk7CisKKwlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7CisJ ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisK Kwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLAorCQkJCSAgIGRl di0+bW9kZV9jb25maWcuZGlydHlfaW5mb19wcm9wZXJ0eSwgMSk7CisKKwlyZXR1cm4gMDsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kbWFidWYuYyBi L2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kbWFidWYuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhZDRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2RtYWJ1Zi5jCkBAIC0wLDAgKzEsMjgzIEBACisv KgorICogQmFzZWQgb24gdGhlIHVkbCBkbWFidWYgY29kZToKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTQgVGhlIENocm9taXVtIE9TIEF1dGhvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAq IHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJnbTEy dTMyMF9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYS1idWYuaD4KKworc3RydWN0IGdtMTJ1MzIwX2RybV9kbWFidWZfYXR0YWNobWVudCB7CisJ c3RydWN0IHNnX3RhYmxlIHNndDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CisJYm9v bCBpc19tYXBwZWQ7Cit9OworCitzdGF0aWMgaW50IGdtMTJ1MzIwX2F0dGFjaF9kbWFfYnVmKHN0 cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAg IHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBf ZHJtX2RtYWJ1Zl9hdHRhY2htZW50ICpnbTEydTMyMF9hdHRhY2g7CisKKwlEUk1fREVCVUdfUFJJ TUUoIltERVY6JXNdIHNpemU6JXpkXG4iLCBkZXZfbmFtZShhdHRhY2gtPmRldiksCisJCQlhdHRh Y2gtPmRtYWJ1Zi0+c2l6ZSk7CisKKwlnbTEydTMyMF9hdHRhY2ggPSBremFsbG9jKHNpemVvZigq Z20xMnUzMjBfYXR0YWNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbTEydTMyMF9hdHRhY2gpCisJ CXJldHVybiAtRU5PTUVNOworCisJZ20xMnUzMjBfYXR0YWNoLT5kaXIgPSBETUFfTk9ORTsKKwlh dHRhY2gtPnByaXYgPSBnbTEydTMyMF9hdHRhY2g7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZ20xMnUzMjBfZGV0YWNoX2RtYV9idWYoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJ CQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBnbTEy dTMyMF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKmdtMTJ1MzIwX2F0dGFjaCA9IGF0dGFjaC0+cHJp djsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKworCWlmICghZ20xMnUzMjBfYXR0YWNoKQorCQly ZXR1cm47CisKKwlEUk1fREVCVUdfUFJJTUUoIltERVY6JXNdIHNpemU6JXpkXG4iLCBkZXZfbmFt ZShhdHRhY2gtPmRldiksCisJCQlhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7CisKKwlzZ3QgPSAmZ20x MnUzMjBfYXR0YWNoLT5zZ3Q7CisKKwlpZiAoZ20xMnUzMjBfYXR0YWNoLT5kaXIgIT0gRE1BX05P TkUpCisJCWRtYV91bm1hcF9zZyhhdHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsCisJ CQkJZ20xMnUzMjBfYXR0YWNoLT5kaXIpOworCisJc2dfZnJlZV90YWJsZShzZ3QpOworCWtmcmVl KGdtMTJ1MzIwX2F0dGFjaCk7CisJYXR0YWNoLT5wcml2ID0gTlVMTDsKK30KKworc3RhdGljIHN0 cnVjdCBzZ190YWJsZSAqZ20xMnUzMjBfbWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoLAorCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sK KwlzdHJ1Y3QgZ20xMnUzMjBfZHJtX2RtYWJ1Zl9hdHRhY2htZW50ICpnbTEydTMyMF9hdHRhY2gg PSBhdHRhY2gtPnByaXY7CisJc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaiA9IHRvX2dt MTJ1MzIwX2JvKGF0dGFjaC0+ZG1hYnVmLT5wcml2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gb2JqLT5iYXNlLmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnJkLCAqd3I7CisJc3RydWN0 IHNnX3RhYmxlICpzZ3QgPSBOVUxMOworCXVuc2lnbmVkIGludCBpOworCWludCBwYWdlX2NvdW50 OworCWludCBuZW50cywgcmV0OworCisJRFJNX0RFQlVHX1BSSU1FKCJbREVWOiVzXSBzaXplOiV6 ZCBkaXI9JWRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5z aXplLCBkaXIpOworCisJLyoganVzdCByZXR1cm4gY3VycmVudCBzZ3QgaWYgYWxyZWFkeSByZXF1 ZXN0ZWQuICovCisJaWYgKGdtMTJ1MzIwX2F0dGFjaC0+ZGlyID09IGRpciAmJiBnbTEydTMyMF9h dHRhY2gtPmlzX21hcHBlZCkKKwkJcmV0dXJuICZnbTEydTMyMF9hdHRhY2gtPnNndDsKKworCWlm ICghb2JqLT5wYWdlcykgeworCQlyZXQgPSBnbTEydTMyMF9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJ CWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBwYWdlcy5cbiIpOworCQkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfQorCX0KKworCXBhZ2VfY291bnQgPSBvYmotPmJhc2Uu c2l6ZSAvIFBBR0VfU0laRTsKKwlvYmotPnNnID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKG9iai0+ cGFnZXMsIHBhZ2VfY291bnQpOworCWlmIChJU19FUlIob2JqLT5zZykpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gYWxsb2NhdGUgc2d0LlxuIik7CisJCXJldHVybiBFUlJfQ0FTVChvYmotPnNn KTsKKwl9CisKKwlzZ3QgPSAmZ20xMnUzMjBfYXR0YWNoLT5zZ3Q7CisKKwlyZXQgPSBzZ19hbGxv Y190YWJsZShzZ3QsIG9iai0+c2ctPm9yaWdfbmVudHMsIEdGUF9LRVJORUwpOworCWlmIChyZXQp IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Mgc2d0LlxuIik7CisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwor CXJkID0gb2JqLT5zZy0+c2dsOworCXdyID0gc2d0LT5zZ2w7CisJZm9yIChpID0gMDsgaSA8IHNn dC0+b3JpZ19uZW50czsgKytpKSB7CisJCXNnX3NldF9wYWdlKHdyLCBzZ19wYWdlKHJkKSwgcmQt Pmxlbmd0aCwgcmQtPm9mZnNldCk7CisJCXJkID0gc2dfbmV4dChyZCk7CisJCXdyID0gc2dfbmV4 dCh3cik7CisJfQorCisJaWYgKGRpciAhPSBETUFfTk9ORSkgeworCQluZW50cyA9IGRtYV9tYXBf c2coYXR0YWNoLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm9yaWdfbmVudHMsIGRpcik7CisJCWlmICgh bmVudHMpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBzZ2wgd2l0aCBpb21tdS5cbiIp OworCQkJc2dfZnJlZV90YWJsZShzZ3QpOworCQkJc2d0ID0gRVJSX1BUUigtRUlPKTsKKwkJCWdv dG8gZXJyX3VubG9jazsKKwkJfQorCX0KKworCWdtMTJ1MzIwX2F0dGFjaC0+aXNfbWFwcGVkID0g dHJ1ZTsKKwlnbTEydTMyMF9hdHRhY2gtPmRpciA9IGRpcjsKKwlhdHRhY2gtPnByaXYgPSBnbTEy dTMyMF9hdHRhY2g7CisKK2Vycl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7CisJcmV0dXJuIHNndDsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfdW5tYXBfZG1h X2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJCQkJICAgc3RydWN0IHNn X3RhYmxlICpzZ3QsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8q IE5vdGhpbmcgdG8gZG8uICovCisJRFJNX0RFQlVHX1BSSU1FKCJbREVWOiVzXSBzaXplOiV6ZCBk aXI6JWRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5zaXpl LCBkaXIpOworfQorCitzdGF0aWMgdm9pZCAqZ20xMnUzMjBfZG1hYnVmX2ttYXAoc3RydWN0IGRt YV9idWYgKmRtYV9idWYsCisJCQkJICB1bnNpZ25lZCBsb25nIHBhZ2VfbnVtKQoreworCS8qIFRP RE8gKi8KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZ20xMnUzMjBfZG1hYnVm X2ttYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAorCQkJCQkgdW5zaWduZWQgbG9u ZyBwYWdlX251bSkKK3sKKwkvKiBUT0RPICovCisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGlj IHZvaWQgZ20xMnUzMjBfZG1hYnVmX2t1bm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJ CQkgICB1bnNpZ25lZCBsb25nIHBhZ2VfbnVtLCB2b2lkICphZGRyKQoreworCS8qIFRPRE8gKi8K K30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfZG1hYnVmX2t1bm1hcF9hdG9taWMoc3RydWN0IGRt YV9idWYgKmRtYV9idWYsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwYWdlX251bSwKKwkJCQkJICB2 b2lkICphZGRyKQoreworCS8qIFRPRE8gKi8KK30KKworc3RhdGljIGludCBnbTEydTMyMF9kbWFi dWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKK3sKKwkvKiBUT0RPICovCisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGlj IHN0cnVjdCBkbWFfYnVmX29wcyBnbTEydTMyMF9kbWFidWZfb3BzID0geworCS5hdHRhY2gJCQk9 IGdtMTJ1MzIwX2F0dGFjaF9kbWFfYnVmLAorCS5kZXRhY2gJCQk9IGdtMTJ1MzIwX2RldGFjaF9k bWFfYnVmLAorCS5tYXBfZG1hX2J1ZgkJPSBnbTEydTMyMF9tYXBfZG1hX2J1ZiwKKwkudW5tYXBf ZG1hX2J1ZgkJPSBnbTEydTMyMF91bm1hcF9kbWFfYnVmLAorCS5rbWFwCQkJPSBnbTEydTMyMF9k bWFidWZfa21hcCwKKwkua21hcF9hdG9taWMJCT0gZ20xMnUzMjBfZG1hYnVmX2ttYXBfYXRvbWlj LAorCS5rdW5tYXAJCQk9IGdtMTJ1MzIwX2RtYWJ1Zl9rdW5tYXAsCisJLmt1bm1hcF9hdG9taWMJ CT0gZ20xMnUzMjBfZG1hYnVmX2t1bm1hcF9hdG9taWMsCisJLm1tYXAJCQk9IGdtMTJ1MzIwX2Rt YWJ1Zl9tbWFwLAorCS5yZWxlYXNlCQk9IGRybV9nZW1fZG1hYnVmX3JlbGVhc2UsCit9OworCitz dHJ1Y3QgZG1hX2J1ZiAqZ20xMnUzMjBfZ2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBmbGFncykK K3sKKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7CisKKwlleHBfaW5mby5v cHMgPSAmZ20xMnUzMjBfZG1hYnVmX29wczsKKwlleHBfaW5mby5zaXplID0gb2JqLT5zaXplOwor CWV4cF9pbmZvLmZsYWdzID0gZmxhZ3M7CisJZXhwX2luZm8ucHJpdiA9IG9iajsKKworCXJldHVy biBkbWFfYnVmX2V4cG9ydCgmZXhwX2luZm8pOworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX3By aW1lX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSBzaXplX3Qgc2l6ZSwgc3Ry dWN0IHNnX3RhYmxlICpzZywKKwkJCQkgc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKipvYmpf cCkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworCWludCBucGFnZXM7CisK KwlucGFnZXMgPSBzaXplIC8gUEFHRV9TSVpFOworCisJKm9ial9wID0gTlVMTDsKKwlvYmogPSBn bTEydTMyMF9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgbnBhZ2VzICogUEFHRV9TSVpFKTsKKwlpZiAo IW9iaikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvYmotPnNnID0gc2c7CisJb2JqLT5wYWdlcyA9 IGRybV9tYWxsb2NfYWIobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCWlmIChvYmot PnBhZ2VzID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJvYmogcGFnZXMgaXMgTlVMTCAlZFxuIiwg bnBhZ2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHJtX3ByaW1lX3NnX3RvX3BhZ2Vf YWRkcl9hcnJheXMoc2csIG9iai0+cGFnZXMsIE5VTEwsIG5wYWdlcyk7CisKKwkqb2JqX3AgPSBv Ymo7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ20xMnUzMjBfZ2Vt X3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkbWFf YnVmICpkbWFfYnVmKQoreworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKKwlz dHJ1Y3Qgc2dfdGFibGUgKnNnOworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICp1b2JqOwor CWludCByZXQ7CisKKwkvKiBuZWVkIHRvIGF0dGFjaCAqLworCWdldF9kZXZpY2UoZGV2LT5kZXYp OworCWF0dGFjaCA9IGRtYV9idWZfYXR0YWNoKGRtYV9idWYsIGRldi0+ZGV2KTsKKwlpZiAoSVNf RVJSKGF0dGFjaCkpIHsKKwkJcHV0X2RldmljZShkZXYtPmRldik7CisJCXJldHVybiBFUlJfQ0FT VChhdHRhY2gpOworCX0KKworCWdldF9kbWFfYnVmKGRtYV9idWYpOworCisJc2cgPSBkbWFfYnVm X21hcF9hdHRhY2htZW50KGF0dGFjaCwgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChJU19FUlIo c2cpKSB7CisJCXJldCA9IFBUUl9FUlIoc2cpOworCQlnb3RvIGZhaWxfZGV0YWNoOworCX0KKwor CXJldCA9IGdtMTJ1MzIwX3ByaW1lX2NyZWF0ZShkZXYsIGRtYV9idWYtPnNpemUsIHNnLCAmdW9i aik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX3VubWFwOworCisJdW9iai0+YmFzZS5pbXBvcnRf YXR0YWNoID0gYXR0YWNoOworCXVvYmotPmZsYWdzID0gR00xMlUzMjBfQk9fV0M7CisKKwlyZXR1 cm4gJnVvYmotPmJhc2U7CisKK2ZhaWxfdW5tYXA6CisJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50 KGF0dGFjaCwgc2csIERNQV9CSURJUkVDVElPTkFMKTsKK2ZhaWxfZGV0YWNoOgorCWRtYV9idWZf ZGV0YWNoKGRtYV9idWYsIGF0dGFjaCk7CisJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CisJcHV0X2Rl dmljZShkZXYtPmRldik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9n bTEydTMyMC9nbTEydTMyMF9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4wMzllNzkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dt MTJ1MzIwX2Rydi5jCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy LTIwMTUgUmVkIEhhdCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug djIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFy Y2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorCitzdGF0aWMgaW50IGdtMTJ1MzIwX2Ry aXZlcl9zZXRfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKmQsIHN0cnVjdCBkcm1fbWFzdGVyICpt KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNf c3RydWN0IGdtMTJ1MzIwX2dlbV92bV9vcHMgPSB7CisJLmZhdWx0ID0gZ20xMnUzMjBfZ2VtX2Zh dWx0LAorCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xv c2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnbTEydTMyMF9k cml2ZXJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVu LAorCS5tbWFwID0gZ20xMnUzMjBfZHJtX2dlbV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJ LnJlYWQgPSBkcm1fcmVhZCwKKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGwsCisJLnJlbGVh c2UgPSBkcm1fcmVsZWFzZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9 IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9Owor CitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMg PSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUsCisJLmxvYWQgPSBn bTEydTMyMF9kcml2ZXJfbG9hZCwKKwkudW5sb2FkID0gZ20xMnUzMjBfZHJpdmVyX3VubG9hZCwK Kwkuc2V0X2J1c2lkID0gZ20xMnUzMjBfZHJpdmVyX3NldF9idXNpZCwKKworCS8qIGdlbSBob29r cyAqLworCS5nZW1fZnJlZV9vYmplY3QgPSBnbTEydTMyMF9nZW1fZnJlZV9vYmplY3QsCisJLmdl bV92bV9vcHMgPSAmZ20xMnUzMjBfZ2VtX3ZtX29wcywKKworCS5kdW1iX2NyZWF0ZSA9IGdtMTJ1 MzIwX2R1bWJfY3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBnbTEydTMyMF9nZW1fbW1hcCwK KwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisJLmZvcHMgPSAmZ20xMnUz MjBfZHJpdmVyX2ZvcHMsCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9o YW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9f aGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZ20xMnUzMjBfZ2VtX3ByaW1lX2V4cG9ydCwK KwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGdtMTJ1MzIwX2dlbV9wcmltZV9pbXBvcnQsCisKKwkubmFt ZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJf REFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAor CS5wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUwsCit9OworCitzdGF0aWMgaW50IGdtMTJ1 MzIwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJIGNvbnN0 IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9 IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 OworCWludCByOworCisJLyoKKwkgKiBUaGUgZ20xMnUzMjAgcHJlc2VudHMgaXRzZWxmIHRvIHRo ZSBzeXN0ZW0gYXMgMiB1c2IgbWFzcy1zdG9yYWdlCisJICogaW50ZXJmYWNlcywgZm9yIHRoZSBz ZWNvbmQgb25lIHdlIHByb2NlZWQgc3VjY2Vzc3VsbHkgd2l0aCBiaW5kaW5nLAorCSAqIGJ1dCBv dGhlcndpc2UgaWdub3JlIGl0LgorCSAqLworCWlmIChpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5n LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkZXYgPSBkcm1f ZGV2X2FsbG9jKCZkcml2ZXIsICZpbnRlcmZhY2UtPmRldik7CisJaWYgKCFkZXYpCisJCXJldHVy biAtRU5PTUVNOworCisJciA9IGRybV9kZXZfcmVnaXN0ZXIoZGV2LCAodW5zaWduZWQgbG9uZyl1 ZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnJfZnJlZTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50 ZXJmYWNlLCBkZXYpOworCURSTV9JTkZPKCJJbml0aWFsaXplZCBnbTEydTMyMCBvbiBtaW5vciAl ZFxuIiwgZGV2LT5wcmltYXJ5LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJ ZHJtX2Rldl91bnJlZihkZXYpOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMy MF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlp ZiAoIWRldikKKwkJcmV0dXJuOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRldik7 CisJZHJtX2Nvbm5lY3Rvcl91bnBsdWdfYWxsKGRldik7CisJZ20xMnUzMjBfZmJkZXZfdW5wbHVn KGRldik7CisJZ20xMnUzMjBfc3RvcF9mYl91cGRhdGUoZGV2KTsKKwlkcm1fdW5wbHVnX2Rldihk ZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK2ludCBnbTEydTMyMF9zdXNwZW5kKHN0cnVj dCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlp ZiAoIWRldikKKwkJcmV0dXJuIDA7CisKKwlnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShkZXYpOwor CXJldHVybiAwOworfQorCitpbnQgZ20xMnUzMjBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNl ICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRh dGEoaW50ZXJmYWNlKTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWdtMTJ1MzIwX3Nl dF9lY29tb2RlKGRldik7CisJZ20xMnUzMjBfc3RhcnRfZmJfdXBkYXRlKGRldik7CisJcmV0dXJu IDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10g PSB7CisJeyBVU0JfREVWSUNFKDB4MWRlMSwgMHhjMTAyKSB9LAorCXt9LAorfTsKK01PRFVMRV9E RVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBn bTEydTMyMF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZ20xMnUzMjAiLAorCS5wcm9iZSA9IGdtMTJ1 MzIwX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdtMTJ1MzIwX3VzYl9kaXNjb25uZWN0LAor CS5pZF90YWJsZSA9IGlkX3RhYmxlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ20x MnUzMjBfc3VzcGVuZCwKKwkucmVzdW1lID0gZ20xMnUzMjBfcmVzdW1lLAorCS5yZXNldF9yZXN1 bWUgPSBnbTEydTMyMF9yZXN1bWUsCisjZW5kaWYKK307CisKK21vZHVsZV91c2JfZHJpdmVyKGdt MTJ1MzIwX2RyaXZlcik7CitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUBy ZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1 MzIwL2dtMTJ1MzIwX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3 OTJlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUz MjBfZHJ2LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx NSBSZWQgSGF0IEluYy4KKyAqCisgKiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJh c2VkIGluIHBhcnRzIG9uIHRoZSBnbTEydTMyMCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMp IDIwMTMgVmlhY2hlc2xhdiBOdXJtZWtoYW1pdG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29w eXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBD b3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgor ICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNv bT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxl IENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1v cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIEdNMTJVMzIwX0RSVl9ICisjZGVmaW5lIEdNMTJV MzIwX0RSVl9ICisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJ CSJnbTEydTMyMCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJHcmFpbiBNZWRpYSBHTTEyVTMyMCBV U0IgcHJvamVjdG9yIGRpc3BsYXkiCisjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAxNTAxMDciCisK KyNkZWZpbmUgRFJJVkVSX01BSk9SCQkwCisjZGVmaW5lIERSSVZFUl9NSU5PUgkJMAorI2RlZmlu ZSBEUklWRVJfUEFUQ0hMRVZFTAkxCisKKyNkZWZpbmUgR00xMlUzMjBfQk9fQ0FDSEVBQkxFCSgx IDw8IDApCisjZGVmaW5lIEdNMTJVMzIwX0JPX1dDCQkoMSA8PCAxKQorCisvKgorICogVGhlIERM UCBoYXMgYW4gYWN0dWFsIHdpZHRoIG9mIDg1NCBwaXhlbHMsIGJ1dCB0aGF0IGlzIG5vdCBhIG11 bHRpcGxlCisgKiBvZiA0LCBicmVha2luZyB0aGluZ3MgbGVmdCBhbmQgcmlnaHQsIHNvIHdlIGV4 cG9ydCBhIHdpZHRoIG9mIDg1Mi4KKyAqLworI2RlZmluZSBHTTEyVTMyMF9VU0VSX1dJRFRICTg1 MgorI2RlZmluZSBHTTEyVTMyMF9SRUFMX1dJRFRICTg1NAorI2RlZmluZSBHTTEyVTMyMF9IRUlH SFQJCTQ4MAorCisjZGVmaW5lIEdNMTJVMzIwX0JMT0NLX0NPVU5UCTIwCisKK3N0cnVjdCBnbTEy dTMyMF9kZXZpY2U7CisKK3N0cnVjdCBnbTEydTMyMF9mYmRldjsKKworc3RydWN0IGdtMTJ1MzIw X2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2 OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJk ZXY7CisJdW5zaWduZWQgY2hhciAqY21kX2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhX2J1ZltH TTEyVTMyMF9CTE9DS19DT1VOVF07CisJc3RydWN0IHsKKwkJYm9vbCBydW47CisJCXN0cnVjdCB3 b3JrcXVldWVfc3RydWN0ICp3b3JrcTsKKwkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJCXdh aXRfcXVldWVfaGVhZF90IHdhaXRxOworCQlzcGlubG9ja190IGxvY2s7CisJCXN0cnVjdCBnbTEy dTMyMF9mcmFtZWJ1ZmZlciAqZmI7CisJCWludCB4MTsKKwkJaW50IHgyOworCQlpbnQgeTE7CisJ CWludCB5MjsKKwl9IGZiX3VwZGF0ZTsKK307CisKK3N0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0 IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwor CXZvaWQgKnZtYXBwaW5nOworCXN0cnVjdCBzZ190YWJsZSAqc2c7CisJdW5zaWduZWQgaW50IGZs YWdzOworfTsKKworI2RlZmluZSB0b19nbTEydTMyMF9ibyh4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QsIGJhc2UpCisKK3N0cnVjdCBnbTEydTMyMF9mcmFtZWJ1 ZmZlciB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOworCXN0cnVjdCBnbTEydTMyMF9n ZW1fb2JqZWN0ICpvYmo7Cit9OworCisjZGVmaW5lIHRvX2dtMTJ1MzIwX2ZiKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIsIGJhc2UpCisKKy8qIG1vZGVzZXQg Ki8KK2ludCBnbTEydTMyMF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2 b2lkIGdtMTJ1MzIwX21vZGVzZXRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2lu dCBnbTEydTMyMF9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAg IHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKK3N0cnVjdCBkcm1fZW5jb2RlciAqZ20x MnUzMjBfZW5jb2Rlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQgZ20xMnUz MjBfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFn cyk7CitpbnQgZ20xMnUzMjBfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK KworaW50IGdtMTJ1MzIwX2ZiZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lk IGdtMTJ1MzIwX2ZiZGV2X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGdt MTJ1MzIwX2ZiZGV2X3VucGx1ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3N0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKgorZ20xMnUzMjBfZmJfdXNlcl9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkgICAgICBzdHJ1Y3Qg ZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpOworCitpbnQgZ20xMnUzMjBfZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKK2ludCBnbTEydTMy MF9nZW1fbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldCk7CisKK3ZvaWQgZ20x MnUzMjBfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Citz dHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqZ20xMnUzMjBfZ2VtX2FsbG9jX29iamVjdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc2l6ZV90IHNpemUpOworc3RydWN0IGRtYV9i dWYgKmdtMTJ1MzIwX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpOworc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnbTEydTMyMF9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOworCitpbnQgZ20xMnUzMjBfZ2Vt X2dldF9wYWdlcyhzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgZ20xMnUz MjBfZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKTsKK2ludCBn bTEydTMyMF9nZW1fdm1hcChzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQg Z20xMnUzMjBfZ2VtX3Z1bm1hcChzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKTsKK2lu dCBnbTEydTMyMF9kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKTsKK2ludCBnbTEydTMyMF9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKKwordm9pZCBnbTEydTMyMF9mYl9tYXJr X2RpcnR5KHN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgaW50IHgxLCBp bnQgeDIsIGludCB5MSwgaW50IHkyKTsKK3ZvaWQgZ20xMnUzMjBfc3RhcnRfZmJfdXBkYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBnbTEydTMyMF9zZXRfZWNvbW9kZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20x MnUzMjAvZ20xMnUzMjBfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1 MzIwX2VuY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjFmOGVh Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Vu Y29kZXIuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUg UmVkIEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhlIHVkbCBjb2RlLiBCYXNl ZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICogQ29weXJpZ2h0IChDKSAy MDEzIFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4KKyAqIENvcHly aWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29w eXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAq IENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+ CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBD T1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3Jl IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgImdt MTJ1MzIwX2Rydi5oIgorCisvKiBkdW1teSBlbmNvZGVyICovCitzdGF0aWMgdm9pZCBnbTEydTMy MF9lbmNfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29k ZXJfY2xlYW51cChlbmNvZGVyKTsKKwlrZnJlZShlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQg Z20xMnUzMjBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK K30KKworc3RhdGljIGJvb2wgZ20xMnUzMjBfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCisJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJ CSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0 cnVlOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9lbmNvZGVyX3ByZXBhcmUoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9lbmNvZGVy X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lk IGdtMTJ1MzIwX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAor CQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7Cit9CisKK3N0YXRpYyB2b2lkCitnbTEydTMyMF9l bmNvZGVyX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKK3sKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgZ20xMnUzMjBf aGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gZ20xMnUzMjBfZW5jb2Rlcl9kcG1zLAorCS5tb2Rl X2ZpeHVwID0gZ20xMnUzMjBfbW9kZV9maXh1cCwKKwkucHJlcGFyZSA9IGdtMTJ1MzIwX2VuY29k ZXJfcHJlcGFyZSwKKwkubW9kZV9zZXQgPSBnbTEydTMyMF9lbmNvZGVyX21vZGVfc2V0LAorCS5j b21taXQgPSBnbTEydTMyMF9lbmNvZGVyX2NvbW1pdCwKKwkuZGlzYWJsZSA9IGdtMTJ1MzIwX2Vu Y29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVu Y3MgZ20xMnUzMjBfZW5jX2Z1bmNzID0geworCS5kZXN0cm95ID0gZ20xMnUzMjBfZW5jX2Rlc3Ry b3ksCit9OworCitzdHJ1Y3QgZHJtX2VuY29kZXIgKmdtMTJ1MzIwX2VuY29kZXJfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwor CWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2VuY29kZXIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWVuY29kZXIpCisJCXJldHVybiBOVUxMOworCisJZHJtX2VuY29kZXJfaW5pdChk ZXYsIGVuY29kZXIsICZnbTEydTMyMF9lbmNfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9U TURTKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZnbTEydTMyMF9oZWxwZXJf ZnVuY3MpOworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMTsKKwlyZXR1cm4gZW5jb2RlcjsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9mYi5jIGIv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNjMxODIyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9nbTEydTMyMC9nbTEydTMyMF9mYi5jCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDEyLTIwMTUgUmVkIEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMg b24gdGhlIHVkbCBjb2RlLiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVy OgorICogQ29weXJpZ2h0IChDKSAyMDEzIFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJu QHlhbmRleC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2Jl cnRvQHVuYml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1h ci5sa21sQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24g PGJlcm5pZUBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlz IGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorCisj aW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKworc3RydWN0IGdtMTJ1MzIwX2ZiZGV2IHsK KwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBoZWxwZXI7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVm ZmVyIGZiOworCXN0cnVjdCBsaXN0X2hlYWQgZmJkZXZfbGlzdDsKK307CisKK3ZvaWQgZ20xMnUz MjBfZmJfbWFya19kaXJ0eShzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiLAorCQkJICAg IGludCB4MSwgaW50IHgyLCBpbnQgeTEsIGludCB5MikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gZmItPmJhc2UuZGV2OworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKm9sZF9mYiA9 IE5VTEw7CisJYm9vbCB3YWtldXAgPSBmYWxzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jaywgZmxhZ3MpOworCisJ aWYgKGdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgIT0gZmIpIHsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0 ZS54MSA9IHgxOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLngyID0geDI7CisJCWdtMTJ1MzIwLT5m Yl91cGRhdGUueTEgPSB5MTsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS55MiA9IHkyOworCQlvbGRf ZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLmZiID0g ZmI7CisJCWRybV9mcmFtZWJ1ZmZlcl9yZWZlcmVuY2UoJmdtMTJ1MzIwLT5mYl91cGRhdGUuZmIt PmJhc2UpOworCQl3YWtldXAgPSB0cnVlOworCX0gZWxzZSB7CisJCWdtMTJ1MzIwLT5mYl91cGRh dGUueDEgPSBtaW4oZ20xMnUzMjAtPmZiX3VwZGF0ZS54MSwgeDEpOworCQlnbTEydTMyMC0+ZmJf dXBkYXRlLngyID0gbWF4KGdtMTJ1MzIwLT5mYl91cGRhdGUueDIsIHgyKTsKKwkJZ20xMnUzMjAt PmZiX3VwZGF0ZS55MSA9IG1pbihnbTEydTMyMC0+ZmJfdXBkYXRlLnkxLCB5MSk7CisJCWdtMTJ1 MzIwLT5mYl91cGRhdGUueTIgPSBtYXgoZ20xMnUzMjAtPmZiX3VwZGF0ZS55MiwgeTIpOworCX0K KworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jaywgZmxh Z3MpOworCisJaWYgKHdha2V1cCkKKwkJd2FrZV91cCgmZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0 cSk7CisKKwlpZiAob2xkX2ZiKQorCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UoJm9sZF9m Yi0+YmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2ZiX2ZpbGxyZWN0KHN0cnVjdCBm Yl9pbmZvICppbmZvLAorCWNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1 Y3QgZ20xMnUzMjBfZmJkZXYgKmZiZGV2ID0gaW5mby0+cGFyOworCisJc3lzX2ZpbGxyZWN0KGlu Zm8sIHJlY3QpOworCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoJmZiZGV2LT5mYiwgcmVjdC0+ZHgs IHJlY3QtPmR4ICsgcmVjdC0+d2lkdGgsCisJCQkgICAgICAgcmVjdC0+ZHksIHJlY3QtPmR5ICsg cmVjdC0+aGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfZmJfY29weWFyZWEoc3Ry dWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWN0KQorewor CXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXYgPSBpbmZvLT5wYXI7CisKKwlzeXNfY29weWFy ZWEoaW5mbywgcmVjdCk7CisJZ20xMnUzMjBfZmJfbWFya19kaXJ0eSgmZmJkZXYtPmZiLCByZWN0 LT5keCwgcmVjdC0+ZHggKyByZWN0LT53aWR0aCwKKwkJCSAgICAgICByZWN0LT5keSwgcmVjdC0+ ZHkgKyByZWN0LT5oZWlnaHQpOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9mYl9pbWFnZWJs aXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2ltYWdlICpyZWN0KQor eworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXYgPSBpbmZvLT5wYXI7CisKKwlzeXNfaW1h Z2VibGl0KGluZm8sIHJlY3QpOworCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoJmZiZGV2LT5mYiwg cmVjdC0+ZHgsIHJlY3QtPmR4ICsgcmVjdC0+d2lkdGgsCisJCQkgICAgICAgcmVjdC0+ZHksIHJl Y3QtPmR5ICsgcmVjdC0+aGVpZ2h0KTsKK30KKworc3RhdGljIGludCBnbTEydTMyMF9mYl9vcGVu KHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZmJk ZXYgKmZiZGV2ID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZmJkZXYt PmZiLmJhc2UuZGV2OworCisJLyogSWYgdGhlIFVTQiBkZXZpY2UgaXMgZ29uZSwgd2UgZG9uJ3Qg YWNjZXB0IG5ldyBvcGVucyAqLworCWlmIChkcm1fZGV2aWNlX2lzX3VucGx1Z2dlZChkZGV2KSkK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9v cHMgZ20xMnUzMjBfZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVj a192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9o ZWxwZXJfc2V0X3BhciwKKwkuZmJfZmlsbHJlY3QgPSBnbTEydTMyMF9mYl9maWxscmVjdCwKKwku ZmJfY29weWFyZWEgPSBnbTEydTMyMF9mYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gZ20x MnUzMjBfZmJfaW1hZ2VibGl0LAorCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFu X2Rpc3BsYXksCisJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21h cCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKKwkuZmJfZGVidWdfZW50ZXIgPSBkcm1fZmJfaGVs cGVyX2RlYnVnX2VudGVyLAorCS5mYl9kZWJ1Z19sZWF2ZSA9IGRybV9mYl9oZWxwZXJfZGVidWdf bGVhdmUsCisJLmZiX29wZW4gPSBnbTEydTMyMF9mYl9vcGVuLAorfTsKKworc3RhdGljIHZvaWQg Z20xMnUzMjBfZmJfZGVmaW9fY2Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBsaXN0X2hl YWQgKnBsKQoreworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXYgPSBpbmZvLT5wYXI7CisJ dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBtaW4sIG1heDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsK KwlpbnQgeTEsIHkyOworCisJbWluID0gVUxPTkdfTUFYOworCW1heCA9IDA7CisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShwYWdlLCBwbCwgbHJ1KSB7CisJCXN0YXJ0ID0gcGFnZS0+aW5kZXggPDwgUEFH RV9TSElGVDsKKwkJZW5kID0gc3RhcnQgKyBQQUdFX1NJWkUgLSAxOworCQltaW4gPSBtaW4obWlu LCBzdGFydCk7CisJCW1heCA9IG1heChtYXgsIGVuZCk7CisJfQorCisJaWYgKG1pbiA+IG1heCkK KwkJcmV0dXJuOworCisJeTEgPSBtaW4gLyBpbmZvLT5maXgubGluZV9sZW5ndGg7CisJeTIgPSAo bWF4IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArIDE7CisJZ20xMnUzMjBfZmJfbWFya19kaXJ0 eSgmZmJkZXYtPmZiLCAwLCBHTTEyVTMyMF9VU0VSX1dJRFRILCB5MSwgeTIpOworfQorCitzdGF0 aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIGdtMTJ1MzIwX2ZiX2RlZmlvID0geworCS5kZWxheSA9 IEhaIC8gNTAsCisJLmRlZmVycmVkX2lvID0gZ20xMnUzMjBfZmJfZGVmaW9fY2IsCit9OworCitz dGF0aWMgaW50IGdtMTJ1MzIwX3VzZXJfZnJhbWVidWZmZXJfZGlydHkoc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZHJtX2ZiLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkg ICAgICB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCisJCQkJICAgICAgc3RydWN0IGRy bV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCSAgICAgIHVuc2lnbmVkIG51bV9jbGlwcykKK3sKKwlz dHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiID0gdG9fZ20xMnUzMjBfZmIoZHJtX2ZiKTsK KwlpbnQgeDEsIHgyLCB5MSwgeTI7CisKKwlpZiAobnVtX2NsaXBzID09IDApCisJCXJldHVybiAw OworCisJeDEgPSBjbGlwcy0+eDE7CisJeDIgPSBjbGlwcy0+eDI7CisJeTEgPSBjbGlwcy0+eTE7 CisJeTIgPSBjbGlwcy0+eTI7CisKKwl3aGlsZSAoLS1udW1fY2xpcHMpIHsKKwkJY2xpcHMrKzsK KwkJeDEgPSBtaW5fdChpbnQsIHgxLCAoaW50KWNsaXBzLT54MSk7CisJCXgyID0gbWF4X3QoaW50 LCB4MiwgKGludCljbGlwcy0+eDIpOworCQl5MSA9IG1pbl90KGludCwgeTEsIChpbnQpY2xpcHMt PnkxKTsKKwkJeTIgPSBtYXhfdChpbnQsIHkyLCAoaW50KWNsaXBzLT55Mik7CisJfQorCisJZ20x MnUzMjBfZmJfbWFya19kaXJ0eShmYiwgeDEsIHgyLCB5MSwgeTIpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpkcm1fZmIpCit7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVy ICpmYiA9IHRvX2dtMTJ1MzIwX2ZiKGRybV9mYik7CisKKwlpZiAoZmItPm9iaikKKwkJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmZiLT5vYmotPmJhc2UpOworCisJZHJtX2Zy YW1lYnVmZmVyX2NsZWFudXAoZHJtX2ZiKTsKKwlrZnJlZShmYik7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGdtMTJ1MzIwZmJfZnVuY3MgPSB7CisJLmRl c3Ryb3kgPSBnbTEydTMyMF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3ksCisJLmRpcnR5ID0gZ20x MnUzMjBfdXNlcl9mcmFtZWJ1ZmZlcl9kaXJ0eSwKK307CisKK3N0YXRpYyBpbnQKK2dtMTJ1MzIw X2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3Qg Z20xMnUzMjBfZnJhbWVidWZmZXIgKmZiLAorCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICptb2RlX2NtZCwKKwkJICAgICBzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKQorewor CWludCByZXQ7CisKKwlmYi0+b2JqID0gb2JqOworCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0 cnVjdCgmZmItPmJhc2UsIG1vZGVfY21kKTsKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChk ZXYsICZmYi0+YmFzZSwgJmdtMTJ1MzIwZmJfZnVuY3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgZ20xMnUzMjBmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwK KwkJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCit7CisJc3RydWN0 IGdtMTJ1MzIwX2ZiZGV2ICpmYmRldiA9CisJCWNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVjdCBn bTEydTMyMF9mYmRldiwgaGVscGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJkZXYt PmhlbHBlci5kZXY7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGRldmljZSAqZGV2 aWNlID0gZGV2LT5kZXY7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2ZiOworCXN0cnVj dCBkcm1fbW9kZV9mYl9jbWQyIG1vZGVfY21kOworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0 ICpvYmo7CisJdWludDMyX3Qgc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzaXplcy0+c3Vy ZmFjZV9icHAgPT0gMjQpCisJCXNpemVzLT5zdXJmYWNlX2JwcCA9IDMyOworCisJbW9kZV9jbWQu d2lkdGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKKwltb2RlX2NtZC5oZWlnaHQgPSBzaXplcy0+ c3VyZmFjZV9oZWlnaHQ7CisJbW9kZV9jbWQucGl0Y2hlc1swXSA9IG1vZGVfY21kLndpZHRoICog KChzaXplcy0+c3VyZmFjZV9icHAgKyA3KSAvIDgpOworCisJbW9kZV9jbWQucGl4ZWxfZm9ybWF0 ID0gZHJtX21vZGVfbGVnYWN5X2ZiX2Zvcm1hdChzaXplcy0+c3VyZmFjZV9icHAsCisJCQkJCQkJ ICBzaXplcy0+c3VyZmFjZV9kZXB0aCk7CisKKwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAq IG1vZGVfY21kLmhlaWdodDsKKwlzaXplID0gQUxJR04oc2l6ZSwgUEFHRV9TSVpFKTsKKworCW9i aiA9IGdtMTJ1MzIwX2dlbV9hbGxvY19vYmplY3QoZGV2LCBzaXplKTsKKwlpZiAoIW9iaikKKwkJ Z290byBvdXQ7CisKKwlyZXQgPSBnbTEydTMyMF9nZW1fdm1hcChvYmopOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxuIik7CisJCWdvdG8gb3V0X2dmcmVlOwor CX0KKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCBkZXZpY2UpOworCWlmICghaW5mbykg eworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9nZnJlZTsKKwl9CisJaW5mby0+cGFyID0g ZmJkZXY7CisKKwlyZXQgPSBnbTEydTMyMF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmZiZGV2LT5m YiwgJm1vZGVfY21kLCBvYmopOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2dmcmVlOworCisJZHJt X2ZiID0gJmZiZGV2LT5mYi5iYXNlOworCisJZmJkZXYtPmhlbHBlci5mYiA9IGRybV9mYjsKKwlm YmRldi0+aGVscGVyLmZiZGV2ID0gaW5mbzsKKworCXN0cmNweShpbmZvLT5maXguaWQsICJnbTEy dTMyMGRybWZiIik7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGZiZGV2LT5mYi5vYmotPnZtYXBw aW5nOworCWluZm8tPmZpeC5zbWVtX2xlbiA9IHNpemU7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQg PSAodW5zaWduZWQgbG9uZylmYmRldi0+ZmIub2JqLT52bWFwcGluZzsKKworCWluZm8tPmZsYWdz ID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVDsKKwlpbmZvLT5mYm9w cyA9ICZnbTEydTMyMF9mYl9vcHM7CisJaW5mby0+ZmJkZWZpbyA9ICZnbTEydTMyMF9mYl9kZWZp bzsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGRybV9mYi0+cGl0Y2hlc1swXSwgZHJt X2ZiLT5kZXB0aCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCAmZmJkZXYtPmhlbHBl ciwKKwkJCSAgICAgICBzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOworCWZiX2Rl ZmVycmVkX2lvX2luaXQoaW5mbyk7CisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFw LCAyNTYsIDApOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZ2Zy ZWU7CisJfQorCisJRFJNX0RFQlVHX0tNUygiYWxsb2NhdGVkICVkeCVkIHZtYWwgJXBcbiIsCisJ CSAgICAgIGRybV9mYi0+d2lkdGgsIGRybV9mYi0+aGVpZ2h0LAorCQkgICAgICBmYmRldi0+ZmIu b2JqLT52bWFwcGluZyk7CisKKwlyZXR1cm4gcmV0Oworb3V0X2dmcmVlOgorCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlKCZmYmRldi0+ZmIub2JqLT5iYXNlKTsKK291dDoKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgZ20xMnUzMjBf ZmJfaGVscGVyX2Z1bmNzID0geworCS5mYl9wcm9iZSA9IGdtMTJ1MzIwZmJfY3JlYXRlLAorfTsK Kworc3RhdGljIHZvaWQgZ20xMnUzMjBfZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJICAgICAgc3RydWN0IGdtMTJ1MzIwX2ZiZGV2ICpmYmRldikKK3sKKwlzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbzsKKworCWlmIChmYmRldi0+aGVscGVyLmZiZGV2KSB7CisJCWluZm8gPSBm YmRldi0+aGVscGVyLmZiZGV2OworCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOworCQl1 bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCQlpZiAoaW5mby0+Y21hcC5sZW4pCisJCQlm Yl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8p OworCX0KKwlkcm1fZmJfaGVscGVyX2ZpbmkoJmZiZGV2LT5oZWxwZXIpOworCWRybV9mcmFtZWJ1 ZmZlcl91bnJlZ2lzdGVyX3ByaXZhdGUoJmZiZGV2LT5mYi5iYXNlKTsKKwlkcm1fZnJhbWVidWZm ZXJfY2xlYW51cCgmZmJkZXYtPmZiLmJhc2UpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl X3VubG9ja2VkKCZmYmRldi0+ZmIub2JqLT5iYXNlKTsKK30KKworaW50IGdtMTJ1MzIwX2ZiZGV2 X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNl ICpnbTEydTMyMCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGdtMTJ1MzIwX2ZiZGV2ICpm YmRldjsKKwlpbnQgcmV0OworCisJZmJkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ20xMnUz MjBfZmJkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZiZGV2KQorCQlyZXR1cm4gLUVOT01FTTsK KworCWdtMTJ1MzIwLT5mYmRldiA9IGZiZGV2OworCisJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRl diwgJmZiZGV2LT5oZWxwZXIsICZnbTEydTMyMF9mYl9oZWxwZXJfZnVuY3MpOworCisJcmV0ID0g ZHJtX2ZiX2hlbHBlcl9pbml0KGRldiwgJmZiZGV2LT5oZWxwZXIsIDEsIDEpOworCWlmIChyZXQp CisJCWdvdG8gZnJlZTsKKworCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29u bmVjdG9ycygmZmJkZXYtPmhlbHBlcik7CisJaWYgKHJldCkKKwkJZ290byBmaW5pOworCisJLyog ZGlzYWJsZSBhbGwgdGhlIHBvc3NpYmxlIG91dHB1dHMvY3J0Y3MgYmVmb3JlIGVudGVyaW5nIEtN UyBtb2RlICovCisJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZGV2KTsKKwor CXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoJmZiZGV2LT5oZWxwZXIsIDMyKTsK KwlpZiAocmV0KQorCQlnb3RvIGZpbmk7CisKKwlyZXR1cm4gMDsKKworZmluaToKKwlkcm1fZmJf aGVscGVyX2ZpbmkoJmZiZGV2LT5oZWxwZXIpOworZnJlZToKKwlrZnJlZShmYmRldik7CisJcmV0 dXJuIHJldDsKK30KKwordm9pZCBnbTEydTMyMF9mYmRldl9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRl dl9wcml2YXRlOworCisJaWYgKCFnbTEydTMyMC0+ZmJkZXYpCisJCXJldHVybjsKKworCWdtMTJ1 MzIwX2ZiZGV2X2Rlc3Ryb3koZGV2LCBnbTEydTMyMC0+ZmJkZXYpOworCWtmcmVlKGdtMTJ1MzIw LT5mYmRldik7CisJZ20xMnUzMjAtPmZiZGV2ID0gTlVMTDsKK30KKwordm9pZCBnbTEydTMyMF9m YmRldl91bnBsdWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBf ZGV2aWNlICpnbTEydTMyMCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGdtMTJ1MzIwX2Zi ZGV2ICpmYmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKworCWlmICghZ20xMnUzMjAtPmZi ZGV2KQorCQlyZXR1cm47CisKKwlmYmRldiA9IGdtMTJ1MzIwLT5mYmRldjsKKwlpZiAoZmJkZXYt PmhlbHBlci5mYmRldikgeworCQlpbmZvID0gZmJkZXYtPmhlbHBlci5mYmRldjsKKwkJdW5saW5r X2ZyYW1lYnVmZmVyKGluZm8pOworCX0KK30KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCitn bTEydTMyMF9mYl91c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCSAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2Rl X2NtZCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZ20xMnUzMjBf ZnJhbWVidWZmZXIgKmZiOworCWludCByZXQ7CisJdWludDMyX3Qgc2l6ZTsKKworCW9iaiA9IGRy bV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIG1vZGVfY21kLT5oYW5kbGVzWzBdKTsKKwlp ZiAob2JqID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJc2l6ZSA9IG1v ZGVfY21kLT5waXRjaGVzWzBdICogbW9kZV9jbWQtPmhlaWdodDsKKwlzaXplID0gQUxJR04oc2l6 ZSwgUEFHRV9TSVpFKTsKKworCWlmIChzaXplID4gb2JqLT5zaXplKSB7CisJCURSTV9FUlJPUigi b2JqZWN0IHNpemUgbm90IHN1ZmZpY2llbnQgZm9yIGZiICVkICV6dSAlZCAlZFxuIiwKKwkJCSAg c2l6ZSwgb2JqLT5zaXplLCBtb2RlX2NtZC0+cGl0Y2hlc1swXSwKKwkJCSAgbW9kZV9jbWQtPmhl aWdodCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWZiID0ga3phbGxvYyhz aXplb2YoKmZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZiID09IE5VTEwpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJcmV0ID0gZ20xMnUzMjBfZnJhbWVidWZmZXJfaW5pdChkZXYsIGZi LCBtb2RlX2NtZCwgdG9fZ20xMnUzMjBfYm8ob2JqKSk7CisJaWYgKHJldCkgeworCQlrZnJlZShm Yik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwlyZXR1cm4gJmZiLT5iYXNlOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2dlbS5jIGIv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjAxYjExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZ2VtLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBD b3B5cmlnaHQgKEMpIDIwMTItMjAxNSBSZWQgSGF0IEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMg c3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGly ZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJnbTEydTMyMF9kcnYuaCIKKyNpbmNsdWRlIDxs aW51eC9zaG1lbV9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKworc3RydWN0IGdt MTJ1MzIwX2dlbV9vYmplY3QgKmdtMTJ1MzIwX2dlbV9hbGxvY19vYmplY3Qoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBnbTEydTMyMF9n ZW1fb2JqZWN0ICpvYmo7CisKKwlvYmogPSBremFsbG9jKHNpemVvZigqb2JqKSwgR0ZQX0tFUk5F TCk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChkcm1fZ2VtX29i amVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwgc2l6ZSkgIT0gMCkgeworCQlrZnJlZShvYmopOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvYmotPmZsYWdzID0gR00xMlUzMjBfQk9fQ0FDSEVBQkxF OworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBpbnQKK2dtMTJ1MzIwX2dlbV9jcmVhdGUoc3Ry dWN0IGRybV9maWxlICpmaWxlLAorCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCSAg ICAgICB1aW50NjRfdCBzaXplLAorCSAgICAgICB1aW50MzJfdCAqaGFuZGxlX3ApCit7CisJc3Ry dWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCXUzMiBoYW5kbGU7CisK KwlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOworCisJb2JqID0gZ20xMnUzMjBfZ2Vt X2FsbG9jX29iamVjdChkZXYsIHNpemUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJm9iai0+YmFzZSwg JmhhbmRsZSk7CisJaWYgKHJldCkgeworCQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZvYmotPmJh c2UpOworCQlrZnJlZShvYmopOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCSpoYW5kbGVfcCA9IGhhbmRsZTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3ZtX2NhY2hlX2F0dHIoc3RydWN0IGdtMTJ1MzIw X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJ RFJNX0RFQlVHX0tNUygiZmxhZ3MgPSAweCV4XG4iLCBvYmotPmZsYWdzKTsKKworCS8qIG5vbi1j YWNoZWFibGUgYXMgZGVmYXVsdC4gKi8KKwlpZiAob2JqLT5mbGFncyAmIEdNMTJVMzIwX0JPX0NB Q0hFQUJMRSkgeworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52 bV9mbGFncyk7CisJfSBlbHNlIGlmIChvYmotPmZsYWdzICYgR00xMlUzMjBfQk9fV0MpIHsKKwkJ dm1hLT52bV9wYWdlX3Byb3QgPQorCQkJcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9w cm90KHZtYS0+dm1fZmxhZ3MpKTsKKwl9IGVsc2UgeworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9CisJ CQlwZ3Byb3Rfbm9uY2FjaGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOworCX0K K30KKworaW50IGdtMTJ1MzIwX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJ ICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRl X2R1bWIgKmFyZ3MpCit7CisJYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqIERJVl9ST1VORF9V UChhcmdzLT5icHAsIDgpOworCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdo dDsKKwlyZXR1cm4gZ20xMnUzMjBfZ2VtX2NyZWF0ZShmaWxlLCBkZXYsCisJCQkgICAgICBhcmdz LT5zaXplLCAmYXJncy0+aGFuZGxlKTsKK30KKworaW50IGdtMTJ1MzIwX2RybV9nZW1fbW1hcChz dHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJl dDsKKworCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9mbGFncyB8 PSBWTV9NSVhFRE1BUDsKKworCXVwZGF0ZV92bV9jYWNoZV9hdHRyKHRvX2dtMTJ1MzIwX2JvKHZt YS0+dm1fcHJpdmF0ZV9kYXRhKSwgdm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBnbTEy dTMyMF9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVs dCAqdm1mKQoreworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmogPSB0b19nbTEydTMy MF9ibyh2bWEtPnZtX3ByaXZhdGVfZGF0YSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWdu ZWQgaW50IHBhZ2Vfb2Zmc2V0OworCWludCByZXQgPSAwOworCisJcGFnZV9vZmZzZXQgPSAoKHVu c2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PgorCQlQ QUdFX1NISUZUOworCisJaWYgKCFvYmotPnBhZ2VzKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVT OworCisJcGFnZSA9IG9iai0+cGFnZXNbcGFnZV9vZmZzZXRdOworCXJldCA9IHZtX2luc2VydF9w YWdlKHZtYSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsIHBhZ2UpOworCXN3 aXRjaCAocmV0KSB7CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgMDoKKwljYXNlIC1FUkVTVEFSVFNZ UzoKKwkJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKKwljYXNlIC1FTk9NRU06CisJCXJldHVybiBW TV9GQVVMVF9PT007CisJZGVmYXVsdDoKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwl9Cit9 CisKK2ludCBnbTEydTMyMF9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKworCWlmIChvYmotPnBhZ2VzKQorCQly ZXR1cm4gMDsKKworCXBhZ2VzID0gZHJtX2dlbV9nZXRfcGFnZXMoJm9iai0+YmFzZSk7CisJaWYg KElTX0VSUihwYWdlcykpCisJCXJldHVybiBQVFJfRVJSKHBhZ2VzKTsKKworCW9iai0+cGFnZXMg PSBwYWdlczsKKworCXJldHVybiAwOworfQorCit2b2lkIGdtMTJ1MzIwX2dlbV9wdXRfcGFnZXMo c3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqLT5iYXNlLmltcG9y dF9hdHRhY2gpIHsKKwkJZHJtX2ZyZWVfbGFyZ2Uob2JqLT5wYWdlcyk7CisJCW9iai0+cGFnZXMg PSBOVUxMOworCQlyZXR1cm47CisJfQorCisJZHJtX2dlbV9wdXRfcGFnZXMoJm9iai0+YmFzZSwg b2JqLT5wYWdlcywgZmFsc2UsIGZhbHNlKTsKKwlvYmotPnBhZ2VzID0gTlVMTDsKK30KKworaW50 IGdtMTJ1MzIwX2dlbV92bWFwKHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmopCit7CisJ aW50IHBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgcmV0Owor CisJaWYgKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKSB7CisJCW9iai0+dm1hcHBpbmcgPSBkbWFf YnVmX3ZtYXAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gtPmRtYWJ1Zik7CisJCWlmICghb2JqLT52 bWFwcGluZykKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBn bTEydTMyMF9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CW9iai0+dm1hcHBpbmcgPSB2bWFwKG9iai0+cGFnZXMsIHBhZ2VfY291bnQsIDAsIFBBR0VfS0VS TkVMKTsKKwlpZiAoIW9iai0+dm1hcHBpbmcpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAw OworfQorCit2b2lkIGdtMTJ1MzIwX2dlbV92dW5tYXAoc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlpZiAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpIHsKKwkJZG1hX2J1Zl92 dW5tYXAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gtPmRtYWJ1Ziwgb2JqLT52bWFwcGluZyk7CisJ CXJldHVybjsKKwl9CisKKwl2dW5tYXAob2JqLT52bWFwcGluZyk7CisKKwlnbTEydTMyMF9nZW1f cHV0X3BhZ2VzKG9iaik7Cit9CisKK3ZvaWQgZ20xMnUzMjBfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVj dCAqb2JqID0gdG9fZ20xMnUzMjBfYm8oZ2VtX29iaik7CisKKwlpZiAob2JqLT52bWFwcGluZykK KwkJZ20xMnUzMjBfZ2VtX3Z1bm1hcChvYmopOworCisJaWYgKGdlbV9vYmotPmltcG9ydF9hdHRh Y2gpIHsKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KGdlbV9vYmosIG9iai0+c2cpOworCQlwdXRf ZGV2aWNlKGdlbV9vYmotPmRldi0+ZGV2KTsKKwl9CisKKwlpZiAob2JqLT5wYWdlcykKKwkJZ20x MnUzMjBfZ2VtX3B1dF9wYWdlcyhvYmopOworCisJZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KGdl bV9vYmopOworfQorCisvKiB0aGUgZHVtYiBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIHdpdGggdGhl IEdFTSBzdHJhaWdodCBNTUFQCisgICBpbnRlcmZhY2UsIGl0IGV4cGVjdHMgdG8gZG8gTU1BUCBv biB0aGUgZHJtIGZkLCBsaWtlIG5vcm1hbCAqLworaW50IGdtMTJ1MzIwX2dlbV9tbWFwKHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJIHVpbnQzMl90IGhh bmRsZSwgdWludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAq Z29iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0ID0gMDsKKworCW11 dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29r dXAoZGV2LCBmaWxlLCBoYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlyZXQgPSAtRU5P RU5UOworCQlnb3RvIHVubG9jazsKKwl9CisJZ29iaiA9IHRvX2dtMTJ1MzIwX2JvKG9iaik7CisK KwlyZXQgPSBnbTEydTMyMF9nZW1fZ2V0X3BhZ2VzKGdvYmopOworCWlmIChyZXQpCisJCWdvdG8g b3V0OworCXJldCA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CisJaWYgKHJldCkK KwkJZ290byBvdXQ7CisKKwkqb2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnb2Jq LT5iYXNlLnZtYV9ub2RlKTsKKworb3V0OgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZn b2JqLT5iYXNlKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsK KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dt MTJ1MzIwX21haW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4ZmQ5MAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMKQEAgLTAsMCAr MSw0OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBSZWQgSGF0IEluYy4KKyAq CisgKiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2VkIGluIHBhcnRzIG9uIHRo ZSBnbTEydTMyMCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVmlhY2hlc2xhdiBO dXJtZWtoYW1pdG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJv YmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg SmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAy MDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZp bGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1h aW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1 ZGUgImdtMTJ1MzIwX2Rydi5oIgorCitzdGF0aWMgYm9vbCBlY29fbW9kZTsKK21vZHVsZV9wYXJh bShlY29fbW9kZSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVjb19tb2RlLCAiVHVy biBvbiBFY28gbW9kZSAobGVzcyBicmlnaHQsIG1vcmUgc2lsZW50KSIpOworCisjZGVmaW5lIE1J U0NfUkNWX0VQVAkJCTEKKyNkZWZpbmUgREFUQV9SQ1ZfRVBUCQkJMgorI2RlZmluZSBEQVRBX1NO RF9FUFQJCQkzCisjZGVmaW5lIE1JU0NfU05EX0VQVAkJCTQKKworI2RlZmluZSBEQVRBX0JMT0NL X0hFQURFUl9TSVpFCQk4NAorI2RlZmluZSBEQVRBX0JMT0NLX0NPTlRFTlRfU0laRQkJNjQ1MTIK KyNkZWZpbmUgREFUQV9CTE9DS19GT09URVJfU0laRQkJMjAKKyNkZWZpbmUgREFUQV9CTE9DS19T SVpFCQkJKERBVEFfQkxPQ0tfSEVBREVSX1NJWkUgKyBcCisJCQkJCSBEQVRBX0JMT0NLX0NPTlRF TlRfU0laRSArIFwKKwkJCQkJIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUpCisjZGVmaW5lIERBVEFf TEFTVF9CTE9DS19DT05URU5UX1NJWkUJNDAzMgorI2RlZmluZSBEQVRBX0xBU1RfQkxPQ0tfU0la RQkJKERBVEFfQkxPQ0tfSEVBREVSX1NJWkUgKyBcCisJCQkJCSBEQVRBX0xBU1RfQkxPQ0tfQ09O VEVOVF9TSVpFICsgXAorCQkJCQkgREFUQV9CTE9DS19GT09URVJfU0laRSkKKworI2RlZmluZSBD TURfU0laRQkJCTMxCisjZGVmaW5lIFJFQURfU1RBVFVTX1NJWkUJCTEzCisjZGVmaW5lIE1JU0Nf VkFMVUVfU0laRQkJCTQKKworI2RlZmluZSBDTURfVElNRU9VVAkJCW1zZWNzX3RvX2ppZmZpZXMo MjAwKQorI2RlZmluZSBEQVRBX1RJTUVPVVQJCQltc2Vjc190b19qaWZmaWVzKDEwMDApCisjZGVm aW5lIElETEVfVElNRU9VVAkJCW1zZWNzX3RvX2ppZmZpZXMoMjAwMCkKKyNkZWZpbmUgRklSU1Rf RlJBTUVfVElNRU9VVAkJbXNlY3NfdG9famlmZmllcygyMDAwKQorCisjZGVmaW5lIE1JU0NfUkVR X0dFVF9TRVRfRUNPX0EJCTB4ZmYKKyNkZWZpbmUgTUlTQ19SRVFfR0VUX1NFVF9FQ09fQgkJMHgz NQorLyogV2luZG93cyBkcml2ZXIgZG9lcyBvbmNlIGV2ZXJ0IHNlY29uZCwgd2l0aCB3aXRoIGFy ZyBkID0gMSwgb3RoZXJzIDAgKi8KKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjFfQQkJMHhmZgor I2RlZmluZSBNSVNDX1JFUV9VTktOT1dOMV9CCQkweDM4CisvKiBXaW5kb3dzIGRyaXZlciBkb2Vz IHRoaXMgb24gaW5pdCwgd2l0aCBhcmcgYSwgYiA9IDAsIGMgPSAweGEwLCBkID0gNCAqLworI2Rl ZmluZSBNSVNDX1JFUV9VTktOT1dOMl9BCQkweGE1CisjZGVmaW5lIE1JU0NfUkVRX1VOS05PV04y X0IJCTB4MDAKKworc3RhdGljIGNvbnN0IGNoYXIgY21kX2RhdGFbQ01EX1NJWkVdID0geworCTB4 NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHhm YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhmZiwKKwkweDAwLCAweDAwLCAweDAw LCAweDAwLCAweGZjLCAweDAwLCAweDgwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9kcmF3W0NNRF9T SVpFXSA9IHsKKwkweDU1LCAweDUzLCAweDQyLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ZmUsCisJMHgw MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhkMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDAwLCAweDAx LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgY2hhciBj bWRfbWlzY1tDTURfU0laRV0gPSB7CisJMHg1NSwgMHg1MywgMHg0MiwgMHg0MywgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDEw LCAweGZkLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGlj IGNvbnN0IGNoYXIgZGF0YV9ibG9ja19oZWFkZXJbREFUQV9CTE9DS19IRUFERVJfU0laRV0gPSB7 CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAorCTB4ZmIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgw MCwgMHgwNCwgMHgxNSwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAw LCAweDAwLCAweGRiCit9OworCitzdGF0aWMgY29uc3QgY2hhciBkYXRhX2xhc3RfYmxvY2tfaGVh ZGVyW0RBVEFfQkxPQ0tfSEVBREVSX1NJWkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGZiLCAweDE0LCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YzAs IDB4MGYsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhkNworfTsKKworc3RhdGlj IGNvbnN0IGNoYXIgZGF0YV9ibG9ja19mb290ZXJbREFUQV9CTE9DS19GT09URVJfU0laRV0gPSB7 CisJMHhmYiwgMHgxNCwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAs IDB4MDAsIDB4NGYKK307CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX2FsbG9jKHN0cnVjdCBn bTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQoreworCWludCBpLCBibG9ja19zaXplOworCWNvbnN0 IGNoYXIgKmhkcjsKKworCWdtMTJ1MzIwLT5jbWRfYnVmID0ga21hbGxvYyhDTURfU0laRSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFnbTEydTMyMC0+Y21kX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlmb3IgKGkgPSAwOyBpIDwgR00xMlUzMjBfQkxPQ0tfQ09VTlQ7IGkrKykgeworCQlpZiAoaSA9 PSBHTTEyVTMyMF9CTE9DS19DT1VOVCAtIDEpIHsKKwkJCWJsb2NrX3NpemUgPSBEQVRBX0xBU1Rf QkxPQ0tfU0laRTsKKwkJCWhkciA9IGRhdGFfbGFzdF9ibG9ja19oZWFkZXI7CisJCX0gZWxzZSB7 CisJCQlibG9ja19zaXplID0gREFUQV9CTE9DS19TSVpFOworCQkJaGRyID0gZGF0YV9ibG9ja19o ZWFkZXI7CisJCX0KKworCQlnbTEydTMyMC0+ZGF0YV9idWZbaV0gPSBremFsbG9jKGJsb2NrX3Np emUsIEdGUF9LRVJORUwpOworCQlpZiAoIWdtMTJ1MzIwLT5kYXRhX2J1ZltpXSkKKwkJCXJldHVy biAtRU5PTUVNOworCisJCW1lbWNweShnbTEydTMyMC0+ZGF0YV9idWZbaV0sIGhkciwgREFUQV9C TE9DS19IRUFERVJfU0laRSk7CisJCW1lbWNweShnbTEydTMyMC0+ZGF0YV9idWZbaV0gKworCQkJ CShibG9ja19zaXplIC0gREFUQV9CTE9DS19GT09URVJfU0laRSksCisJCSAgICAgICBkYXRhX2Js b2NrX2Zvb3RlciwgREFUQV9CTE9DS19GT09URVJfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX3VzYl9mcmVlKHN0cnVjdCBnbTEydTMyMF9kZXZpY2Ug KmdtMTJ1MzIwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdNMTJVMzIwX0JMT0NL X0NPVU5UOyBpKyspCisJCWtmcmVlKGdtMTJ1MzIwLT5kYXRhX2J1ZltpXSk7CisKKwlrZnJlZShn bTEydTMyMC0+Y21kX2J1Zik7Cit9CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfbWlzY19yZXF1ZXN0 KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwLAorCQkJCSB1OCByZXFfYSwgdTggcmVx X2IsCisJCQkJIHU4IGFyZ19hLCB1OCBhcmdfYiwgdTggYXJnX2MsIHU4IGFyZ19kKQoreworCWlu dCByZXQsIGxlbjsKKwl1OCAqYnVmLCB2YWw7CisKKwlidWYgPSBrbWFsbG9jKENNRF9TSVpFLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoYnVm LCAmY21kX21pc2MsIENNRF9TSVpFKTsKKwlidWZbMjBdID0gcmVxX2E7CisJYnVmWzIxXSA9IHJl cV9iOworCWJ1ZlsyMl0gPSBhcmdfYTsKKwlidWZbMjNdID0gYXJnX2I7CisJYnVmWzI0XSA9IGFy Z19jOworCWJ1ZlsyNV0gPSBhcmdfZDsKKworCS8qIFNlbmQgcmVxdWVzdCAqLworCXJldCA9IHVz Yl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShnbTEydTMy MC0+dWRldiwgTUlTQ19TTkRfRVBUKSwKKwkJCSAgIGJ1ZiwgQ01EX1NJWkUsICZsZW4sIENNRF9U SU1FT1VUKTsKKwlpZiAocmV0IHx8IGxlbiAhPSBDTURfU0laRSkgeworCQlkZXZfZXJyKCZnbTEy dTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4gcmVxLiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0ID0g LUVJTzsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBSZWFkIHZhbHVlICovCisJcmV0ID0gdXNi X2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIw LT51ZGV2LCBNSVNDX1JDVl9FUFQpLAorCQkJICAgYnVmLCBNSVNDX1ZBTFVFX1NJWkUsICZsZW4s IERBVEFfVElNRU9VVCk7CisJaWYgKHJldCB8fCBsZW4gIT0gTUlTQ19WQUxVRV9TSVpFKSB7CisJ CWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYsICJNaXNjLiB2YWx1ZSBlcnJvciAlZFxuIiwg cmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBsZWF2ZTsKKwl9CisJdmFsID0gYnVmWzBdOwor CisJLyogUmVhZCBzdGF0dXMgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYs CisJCQkgICB1c2JfcmN2YnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIE1JU0NfUkNWX0VQVCksCisJ CQkgICBidWYsIFJFQURfU1RBVFVTX1NJWkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwlpZiAocmV0 IHx8IGxlbiAhPSBSRUFEX1NUQVRVU19TSVpFKSB7CisJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2 LT5kZXYsICJNaXNjLiBzdGF0dXMgZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldCA9IC1FSU87CisJ CWdvdG8gbGVhdmU7CisJfQorCisJcmV0ID0gdmFsOworbGVhdmU6CisJa2ZyZWUoYnVmKTsKKwly ZXR1cm4gcmV0OworfQorCit2b2lkIGdtMTJ1MzIwXzMyYnBwX3RvXzI0YnBwX3BhY2tlZCh1OCAq ZHN0LCB1OCAqc3JjLCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQkqZHN0KysgPSAq c3JjKys7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gKnNyYysrOworCQlzcmMrKzsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBn bTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgICAgIGludCB4MSwgaW50IHgyLCBpbnQg eTEsIGludCB5MikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmItPmJhc2UuZGV2Owor CXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlp bnQgYmxvY2ssIGRzdF9vZmZzZXQsIGxlbiwgcmVtYWluLCByZXQ7CisJdTggKnNyYzsKKworCWlm IChmYi0+b2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpIHsKKwkJcmV0ID0gZG1hX2J1Zl9iZWdpbl9j cHVfYWNjZXNzKAorCQkJZmItPm9iai0+YmFzZS5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIDAsCisJ CQlmYi0+b2JqLT5iYXNlLnNpemUsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChyZXQpIHsKKwkJ CURSTV9FUlJPUigiZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzIGVycjogJWRcbiIsIHJldCk7CisJ CQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoIWZiLT5vYmotPnZtYXBwaW5nKSB7CisJCXJldCA9 IGdtMTJ1MzIwX2dlbV92bWFwKGZiLT5vYmopOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1Io ImZhaWxlZCB0byB2bWFwIGZiOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZW5kX2NwdV9hY2Nlc3M7 CisJCX0KKwl9CisKKwlzcmMgPSBmYi0+b2JqLT52bWFwcGluZyArIHkxICogZmItPmJhc2UucGl0 Y2hlc1swXSArIHgxICogNDsKKworCXgxICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0gR00xMlUz MjBfVVNFUl9XSURUSCkgLyAyOworCXgyICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0gR00xMlUz MjBfVVNFUl9XSURUSCkgLyAyOworCisJZm9yICg7IHkxIDwgeTI7IHkxKyspIHsKKwkJcmVtYWlu ID0gMDsKKwkJbGVuID0gKHgyIC0geDEpICogMzsKKwkJZHN0X29mZnNldCA9ICh5MSAqIEdNMTJV MzIwX1JFQUxfV0lEVEggKyB4MSkgKiAzOworCQlibG9jayA9IGRzdF9vZmZzZXQgLyBEQVRBX0JM T0NLX0NPTlRFTlRfU0laRTsKKwkJZHN0X29mZnNldCAlPSBEQVRBX0JMT0NLX0NPTlRFTlRfU0la RTsKKworCQlpZiAoKGRzdF9vZmZzZXQgKyBsZW4pID4gREFUQV9CTE9DS19DT05URU5UX1NJWkUp IHsKKwkJCXJlbWFpbiA9IGRzdF9vZmZzZXQgKyBsZW4gLSBEQVRBX0JMT0NLX0NPTlRFTlRfU0la RTsKKwkJCWxlbiA9IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFIC0gZHN0X29mZnNldDsKKwkJfQor CisJCWRzdF9vZmZzZXQgKz0gREFUQV9CTE9DS19IRUFERVJfU0laRTsKKwkJbGVuIC89IDM7CisK KwkJZ20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2VkKAorCQkJZ20xMnUzMjAtPmRhdGFfYnVm W2Jsb2NrXSArIGRzdF9vZmZzZXQsCisJCQlzcmMsIGxlbik7CisKKwkJaWYgKHJlbWFpbikgewor CQkJYmxvY2srKzsKKwkJCWRzdF9vZmZzZXQgPSBEQVRBX0JMT0NLX0hFQURFUl9TSVpFOworCQkJ Z20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2VkKAorCQkJCWdtMTJ1MzIwLT5kYXRhX2J1Zlti bG9ja10gKyBkc3Rfb2Zmc2V0LAorCQkJCXNyYyArIGxlbiAqIDQsIHJlbWFpbiAvIDMpOworCQl9 CisJCXNyYyArPSBmYi0+YmFzZS5waXRjaGVzWzBdOworCX0KKworZW5kX2NwdV9hY2Nlc3M6CisJ aWYgKGZiLT5vYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkKKwkJZG1hX2J1Zl9lbmRfY3B1X2FjY2Vz cyhmYi0+b2JqLT5iYXNlLmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgMCwKKwkJCQkgICAgICAgZmIt Pm9iai0+YmFzZS5zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworfQorCitzdGF0aWMgaW50IGdtMTJ1 MzIwX2ZiX3VwZGF0ZV9yZWFkeShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKK3sK KwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCXJl dCA9ICFnbTEydTMyMC0+ZmJfdXBkYXRlLnJ1biB8fCBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiICE9 IE5VTEw7CisJc3Bpbl91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9mYl91cGRhdGVfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAg PQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdtMTJ1MzIwX2RldmljZSwgZmJfdXBkYXRl LndvcmspOworCWludCBkcmF3X3N0YXR1c190aW1lb3V0ID0gRklSU1RfRlJBTUVfVElNRU9VVDsK KwlpbnQgYmxvY2ssIGJsb2NrX3NpemUsIGxlbiwgeDEsIHgyLCB5MSwgeTI7CisJc3RydWN0IGdt MTJ1MzIwX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgZnJhbWUgPSAwOworCWludCByZXQgPSAwOwor CisJd2hpbGUgKGdtMTJ1MzIwLT5mYl91cGRhdGUucnVuKSB7CisJCXNwaW5fbG9jaygmZ20xMnUz MjAtPmZiX3VwZGF0ZS5sb2NrKTsKKwkJZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCQl4 MSA9IGdtMTJ1MzIwLT5mYl91cGRhdGUueDE7CisJCXgyID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS54 MjsKKwkJeTEgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnkxOworCQl5MiA9IGdtMTJ1MzIwLT5mYl91 cGRhdGUueTI7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgPSBOVUxMOworCQlzcGluX3VubG9j aygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKworCQlpZiAoZmIpIHsKKwkJCWdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKGZiLCB4MSwgeDIsIHkxLCB5Mik7CisJCQlkcm1fZnJhbWVidWZm ZXJfdW5yZWZlcmVuY2UoJmZiLT5iYXNlKTsKKwkJfQorCisJCWZvciAoYmxvY2sgPSAwOyBibG9j ayA8IEdNMTJVMzIwX0JMT0NLX0NPVU5UOyBibG9jaysrKSB7CisJCQlpZiAoYmxvY2sgPT0gR00x MlUzMjBfQkxPQ0tfQ09VTlQgLSAxKQorCQkJCWJsb2NrX3NpemUgPSBEQVRBX0xBU1RfQkxPQ0tf U0laRTsKKwkJCWVsc2UKKwkJCQlibG9ja19zaXplID0gREFUQV9CTE9DS19TSVpFOworCisJCQkv KiBTZW5kIGRhdGEgY29tbWFuZCB0byBkZXZpY2UgKi8KKwkJCW1lbWNweShnbTEydTMyMC0+Y21k X2J1ZiwgY21kX2RhdGEsIENNRF9TSVpFKTsKKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzhdID0gYmxv Y2tfc2l6ZSAmIDB4ZmY7CisJCQlnbTEydTMyMC0+Y21kX2J1Zls5XSA9IGJsb2NrX3NpemUgPj4g ODsKKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzIwXSA9IDB4ZmMgLSBibG9jayAqIDQ7CisJCQlnbTEy dTMyMC0+Y21kX2J1ZlsyMV0gPSBibG9jayB8IChmcmFtZSA8PCA3KTsKKworCQkJcmV0ID0gdXNi X2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+ dWRldiwgREFUQV9TTkRfRVBUKSwKKwkJCQlnbTEydTMyMC0+Y21kX2J1ZiwgQ01EX1NJWkUsICZs ZW4sCisJCQkJQ01EX1RJTUVPVVQpOworCQkJaWYgKHJldCB8fCBsZW4gIT0gQ01EX1NJWkUpCisJ CQkJZ290byBlcnI7CisKKwkJCS8qIFNlbmQgZGF0YSBibG9jayB0byBkZXZpY2UgKi8KKwkJCXJl dCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUoZ20x MnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCksCisJCQkJZ20xMnUzMjAtPmRhdGFfYnVmW2Jsb2Nr XSwgYmxvY2tfc2l6ZSwKKwkJCQkmbGVuLCBEQVRBX1RJTUVPVVQpOworCQkJaWYgKHJldCB8fCBs ZW4gIT0gYmxvY2tfc2l6ZSkKKwkJCQlnb3RvIGVycjsKKworCQkJLyogUmVhZCBzdGF0dXMgKi8K KwkJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2JfcmN2YnVsa3Bp cGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfUkNWX0VQVCksCisJCQkJZ20xMnUzMjAtPmNtZF9idWYs IFJFQURfU1RBVFVTX1NJWkUsICZsZW4sCisJCQkJQ01EX1RJTUVPVVQpOworCQkJaWYgKHJldCB8 fCBsZW4gIT0gUkVBRF9TVEFUVVNfU0laRSkKKwkJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIFNl bmQgZHJhdyBjb21tYW5kIHRvIGRldmljZSAqLworCQltZW1jcHkoZ20xMnUzMjAtPmNtZF9idWYs IGNtZF9kcmF3LCBDTURfU0laRSk7CisJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRl diwKKwkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9TTkRfRVBUKSwKKwkJ CWdtMTJ1MzIwLT5jbWRfYnVmLCBDTURfU0laRSwgJmxlbiwgQ01EX1RJTUVPVVQpOworCQlpZiAo cmV0IHx8IGxlbiAhPSBDTURfU0laRSkKKwkJCWdvdG8gZXJyOworCisJCS8qIFJlYWQgc3RhdHVz ICovCisJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCXVzYl9yY3ZidWxr cGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9SQ1ZfRVBUKSwKKwkJCWdtMTJ1MzIwLT5jbWRfYnVm LCBSRUFEX1NUQVRVU19TSVpFLCAmbGVuLAorCQkJZHJhd19zdGF0dXNfdGltZW91dCk7CisJCWlm IChyZXQgfHwgbGVuICE9IFJFQURfU1RBVFVTX1NJWkUpCisJCQlnb3RvIGVycjsKKworCQlkcmF3 X3N0YXR1c190aW1lb3V0ID0gQ01EX1RJTUVPVVQ7CisJCWZyYW1lID0gIWZyYW1lOworCisJCS8q CisJCSAqIFdlIG11c3QgZHJhdyBhIGZyYW1lIGV2ZXJ5IDJzIG90aGVyd2lzZSB0aGUgcHJvamVj dG9yCisJCSAqIHN3aXRjaGVzIGJhY2sgdG8gc2hvd2luZyBpdHMgbG9nby4KKwkJICovCisJCXdh aXRfZXZlbnRfdGltZW91dChnbTEydTMyMC0+ZmJfdXBkYXRlLndhaXRxLAorCQkJCSAgIGdtMTJ1 MzIwX2ZiX3VwZGF0ZV9yZWFkeShnbTEydTMyMCksCisJCQkJICAgSURMRV9USU1FT1VUKTsKKwl9 CisJcmV0dXJuOworZXJyOgorCS8qIERvIG5vdCBsb2cgZXJyb3JzIGNhdXNlZCBieSBtb2R1bGUg dW5sb2FkIG9yIGRldmljZSB1bnBsdWcgKi8KKwlpZiAocmV0ICE9IC1FQ09OTlJFU0VUICYmIHJl dCAhPSAtRVNIVVRET1dOKQorCQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiRnJhbWUg dXBkYXRlIGVycm9yOiAlZFxuIiwgcmV0KTsKK30KKwordm9pZCBnbTEydTMyMF9zdGFydF9mYl91 cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNl ICpnbTEydTMyMCA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmdtMTJ1MzIwLT5m Yl91cGRhdGUubG9jayk7CisJZ20xMnUzMjAtPmZiX3VwZGF0ZS5ydW4gPSB0cnVlOworCXNwaW5f dW5sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCisJcXVldWVfd29yayhnbTEydTMy MC0+ZmJfdXBkYXRlLndvcmtxLCAmZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrKTsKK30KKwordm9p ZCBnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0 cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNw aW5fbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKwlnbTEydTMyMC0+ZmJfdXBkYXRl LnJ1biA9IGZhbHNlOworCXNwaW5fdW5sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOwor CisJd2FrZV91cCgmZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSk7CisJY2FuY2VsX3dvcmtfc3lu YygmZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrKTsKKworCXNwaW5fbG9jaygmZ20xMnUzMjAtPmZi X3VwZGF0ZS5sb2NrKTsKKwlpZiAoZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYikgeworCQlkcm1fZnJh bWVidWZmZXJfdW5yZWZlcmVuY2UoJmdtMTJ1MzIwLT5mYl91cGRhdGUuZmItPmJhc2UpOworCQln bTEydTMyMC0+ZmJfdXBkYXRlLmZiID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJmdtMTJ1MzIw LT5mYl91cGRhdGUubG9jayk7Cit9CisKK2ludCBnbTEydTMyMF9kcml2ZXJfbG9hZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB1c2JfZGV2 aWNlICp1ZGV2ID0gKHZvaWQgKilmbGFnczsKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEy dTMyMDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlnbTEydTMy MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWdtMTJ1MzIwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdtMTJ1MzIwLT51ZGV2ID0g dWRldjsKKwlnbTEydTMyMC0+ZGRldiA9IGRldjsKKwlkZXYtPmRldl9wcml2YXRlID0gZ20xMnUz MjA7CisKKwlJTklUX1dPUksoJmdtMTJ1MzIwLT5mYl91cGRhdGUud29yaywgZ20xMnUzMjBfZmJf dXBkYXRlX3dvcmspOworCXNwaW5fbG9ja19pbml0KCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2sp OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdtMTJ1MzIwLT5mYl91cGRhdGUud2FpdHEpOworCisJ cmV0ID0gZ20xMnUzMjBfc2V0X2Vjb21vZGUoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsK KworCWdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtx dWV1ZShEUklWRVJfTkFNRSk7CisJaWYgKCFnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmtxKSB7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGdtMTJ1MzIwX3VzYl9h bGxvYyhnbTEydTMyMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlEUk1fREVCVUcoIlxu Iik7CisJcmV0ID0gZ20xMnUzMjBfbW9kZXNldF9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290 byBlcnI7CisKKwlyZXQgPSBnbTEydTMyMF9mYmRldl9pbml0KGRldik7CisJaWYgKHJldCkKKwkJ Z290byBlcnI7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9mYjsKKworCWdtMTJ1MzIwX3N0YXJ0X2ZiX3VwZGF0ZShkZXYpOworCisJcmV0 dXJuIDA7CitlcnJfZmI6CisJZ20xMnUzMjBfZmJkZXZfY2xlYW51cChkZXYpOworZXJyOgorCWdt MTJ1MzIwX3VzYl9mcmVlKGdtMTJ1MzIwKTsKKwlrZnJlZShnbTEydTMyMCk7CisJRFJNX0VSUk9S KCIlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ20xMnUzMjBfZHJpdmVyX3Vu bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2Ug KmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWRybV92YmxhbmtfY2xlYW51cChkZXYp OworCWdtMTJ1MzIwX2ZiZGV2X2NsZWFudXAoZGV2KTsKKwlnbTEydTMyMF9tb2Rlc2V0X2NsZWFu dXAoZGV2KTsKKwlnbTEydTMyMF91c2JfZnJlZShnbTEydTMyMCk7CisJZGVzdHJveV93b3JrcXVl dWUoZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrcSk7CisJa2ZyZWUoZ20xMnUzMjApOworCXJldHVy biAwOworfQorCitpbnQgZ20xMnUzMjBfc2V0X2Vjb21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9IGRldi0+ZGV2X3ByaXZh dGU7CisKKwlyZXR1cm4gZ20xMnUzMjBfbWlzY19yZXF1ZXN0KGdtMTJ1MzIwLCBNSVNDX1JFUV9H RVRfU0VUX0VDT19BLAorCQkJCSAgICAgTUlTQ19SRVFfR0VUX1NFVF9FQ09fQiwgMHgwMSAvKiBz ZXQgKi8sCisJCQkJICAgICBlY29fbW9kZSA/IDB4MDEgOiAweDAwLCAweDAwLCAweDAxKTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tb2Rlc2V0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfbW9kZXNldC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjBiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfbW9kZXNldC5jCkBAIC0wLDAgKzEsMTUyIEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgUmVkIEhhdCBJbmMuCisgKgorICogQmFz ZWQgaW4gcGFydHMgb24gdGhlIHVkbCBjb2RlLiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUz MjAgZmIgZHJpdmVyOgorICogQ29weXJpZ2h0IChDKSAyMDEzIFZpYWNoZXNsYXYgTnVybWVraGFt aXRvdiA8c2xhdnJuQHlhbmRleC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERl IElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3Vt YXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJu aWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1 YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVj dG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cisj aW5jbHVkZSAiZ20xMnUzMjBfZHJ2LmgiCisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NydGNfZHBt cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKQoreworfQorCitzdGF0aWMgYm9vbCBn bTEydTMyMF9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlu dCBnbTEydTMyMF9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKKwkJCSAgICAgICBpbnQgeCwgaW50IHksCisJCQkg ICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQorCit7CisJc3RydWN0IGdtMTJ1 MzIwX2ZyYW1lYnVmZmVyICpmYiA9IHRvX2dtMTJ1MzIwX2ZiKGNydGMtPnByaW1hcnktPmZiKTsK KworCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoZmIsIDAsIEdNMTJVMzIwX1VTRVJfV0lEVEgsIDAs IEdNMTJVMzIwX0hFSUdIVCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZ20xMnUz MjBfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKK30KKworc3RhdGljIHZv aWQgZ20xMnUzMjBfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlkcm1f Y3J0Y19jbGVhbnVwKGNydGMpOworCWtmcmVlKGNydGMpOworfQorCitzdGF0aWMgaW50IGdtMTJ1 MzIwX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICAgIHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmRybV9mYiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192 YmxhbmtfZXZlbnQgKmV2ZW50LAorCQkJICAgICAgdWludDMyX3QgcGFnZV9mbGlwX2ZsYWdzKQor eworCXN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIgPSB0b19nbTEydTMyMF9mYihkcm1f ZmIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoZmIsIDAsIEdNMTJVMzIwX1VTRVJf V0lEVEgsIDAsIEdNMTJVMzIwX0hFSUdIVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5l dmVudF9sb2NrLCBmbGFncyk7CisJaWYgKGV2ZW50KQorCQlkcm1fc2VuZF92YmxhbmtfZXZlbnQo ZGV2LCAwLCBldmVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2Nr LCBmbGFncyk7CisKKwljcnRjLT5wcmltYXJ5LT5mYiA9IGRybV9mYjsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9jcnRjX3ByZXBhcmUoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJZ20xMnUzMjBfY3J0Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNf T04pOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBnbTEydTMyMF9o ZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBnbTEydTMyMF9jcnRjX2RwbXMsCisJLm1vZGVfZml4 dXAgPSBnbTEydTMyMF9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gZ20xMnUzMjBfY3J0 Y19tb2RlX3NldCwKKwkucHJlcGFyZSA9IGdtMTJ1MzIwX2NydGNfcHJlcGFyZSwKKwkuY29tbWl0 ID0gZ20xMnUzMjBfY3J0Y19jb21taXQsCisJLmRpc2FibGUgPSBnbTEydTMyMF9jcnRjX2Rpc2Fi bGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGdtMTJ1MzIwX2Ny dGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZywK KwkuZGVzdHJveSA9IGdtMTJ1MzIwX2NydGNfZGVzdHJveSwKKwkucGFnZV9mbGlwID0gZ20xMnUz MjBfY3J0Y19wYWdlX2ZsaXAsCit9OworCitzdGF0aWMgaW50IGdtMTJ1MzIwX2NydGNfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWNy dGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2NydGMpICsKKwkJICAgICAgIHNpemVvZihz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNydGMgPT0gTlVMTCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fY3J0Y19pbml0KGRldiwgY3J0YywgJmdtMTJ1MzIw X2NydGNfZnVuY3MpOworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJmdtMTJ1MzIwX2hlbHBl cl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9jb25maWdfZnVuY3MgZ20xMnUzMjBfbW9kZV9mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gZ20x MnUzMjBfZmJfdXNlcl9mYl9jcmVhdGUsCisJLm91dHB1dF9wb2xsX2NoYW5nZWQgPSBOVUxMLAor fTsKKworaW50IGdtMTJ1MzIwX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCWRybV9tb2RlX2NvbmZpZ19pbml0 KGRldik7CisKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IEdNMTJVMzIwX1VTRVJfV0lE VEg7CisJZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gR00xMlUzMjBfSEVJR0hUOworCisJ ZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAyMDQ4OworCWRldi0+bW9kZV9jb25maWcubWF4 X2hlaWdodCA9IDIwNDg7CisKKwlkZXYtPm1vZGVfY29uZmlnLnByZWZlcl9zaGFkb3cgPSAwOwor CWRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMjQ7CisKKwlkZXYtPm1vZGVfY29u ZmlnLmZ1bmNzID0gJmdtMTJ1MzIwX21vZGVfZnVuY3M7CisKKwlkcm1fbW9kZV9jcmVhdGVfZGly dHlfaW5mb19wcm9wZXJ0eShkZXYpOworCisJZ20xMnUzMjBfY3J0Y19pbml0KGRldik7CisKKwll bmNvZGVyID0gZ20xMnUzMjBfZW5jb2Rlcl9pbml0KGRldik7CisKKwlnbTEydTMyMF9jb25uZWN0 b3JfaW5pdChkZXYsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ20xMnUzMjBf bW9kZXNldF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX21vZGVfY29u ZmlnX2NsZWFudXAoZGV2KTsKK30KLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=