From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 72/92] kvm: introspection: add memory map/unmap support on the guest side Date: Fri, 9 Aug 2019 19:00:27 +0300 Message-ID: <20190809160047.8319-73-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , =?UTF-8?q?Mircea=20C=C3=AErjaliu?= , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogTWlyY2VhIEPDrnJqYWxpdSA8bWNpcmphbGl1QGJpdGRlZmVuZGVyLmNvbT4KCkFuIGlu dHJvc3BlY3Rpb24gdG9vbCBydW5uaW5nIGluIGEgZGVkaWNhdGVkIFZNIGNhbiB1c2UgdGhlIG5l dyBkZXZpY2UKKC9kZXYva3ZtbWVtKSB0byBtYXAgbWVtb3J5IGZyb20gb3RoZXIgaW50cm9zcGVj dGVkIFZNLXMuCgpUd28gaW9jdGwgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkOgogIC0gS1ZNX0hD X01FTV9NQVAvc3RydWN0IGt2bWlfbWVtX21hcAogIC0gS1ZNX0hDX01FTV9VTk1BUC91bnNpZ25l ZCBsb25nCgpJbiBvcmRlciB0byBtYXAgYW4gaW50cm9zcGVjdGVkIGdwYSB0byB0aGUgbG9jYWwg Z3ZhLCB0aGUgcHJvY2VzcyB1c2luZwp0aGlzIGRldmljZSBuZWVkcyB0byBvYnRhaW4gYSB0b2tl biBmcm9tIHRoZSBob3N0IEtWTUkgc3Vic3lzdGVtIChzZWUKRG9jdW1lbnRhdGlvbi92aXJ0dWFs L2t2bS9rdm1pLnJzdCAtIEtWTUlfR0VUX01BUF9UT0tFTikuCgpCb3RoIG9wZXJhdGlvbnMgdXNl IGh5cGVyY2FsbHMgKEtWTV9IQ19NRU1fTUFQLCBLVk1fSENfTUVNX1VOTUFQKQp0byBwYXNzIHRo ZSByZXF1ZXN0cyB0byB0aGUgaG9zdCBrZXJuZWwvS1ZNaSAoc2VlIGh5cGVyY2FsbHMudHh0KS4K ClNpZ25lZC1vZmYtYnk6IE1pcmNlYSBDw65yamFsaXUgPG1jaXJqYWxpdUBiaXRkZWZlbmRlci5j b20+ClNpZ25lZC1vZmYtYnk6IEFkYWxiZXJ0IExhesSDciA8YWxhemFyQGJpdGRlZmVuZGVyLmNv bT4KLS0tCiBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2h5cGVyY2FsbHMudHh0IHwgIDM0ICsr CiBhcmNoL3g4Ni9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKIGFyY2gv eDg2L2luY2x1ZGUvYXNtL2t2bWlfZ3Vlc3QuaCAgICAgICAgfCAgMTAgKwogYXJjaC94ODYva2Vy bmVsL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBhcmNoL3g4Ni9rZXJuZWwva3Zt aV9tZW1fZ3Vlc3QuYyAgICAgICAgIHwgIDI2ICsKIGluY2x1ZGUvdWFwaS9saW51eC9rdm1fcGFy YS5oICAgICAgICAgICAgfCAgIDIgKwogaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaCAgICAgICAg ICAgICAgICB8ICAyMSArCiB2aXJ0L2t2bS9rdm1pX21lbV9ndWVzdC5jICAgICAgICAgICAgICAg IHwgNjUxICsrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDc1NCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtaV9n dWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYva2VybmVsL2t2bWlfbWVtX2d1ZXN0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2aXJ0L2t2bS9rdm1pX21lbV9ndWVzdC5jCgpkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9oeXBlcmNhbGxzLnR4dCBiL0RvY3VtZW50 YXRpb24vdmlydHVhbC9rdm0vaHlwZXJjYWxscy50eHQKaW5kZXggMWFiNTk1MzdiMmZiLi5hNDdm YWU5MjYyMDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vaHlwZXJjYWxs cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9oeXBlcmNhbGxzLnR4dApAQCAt MTczLDMgKzE3MywzNyBAQCBUaGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgY2xvYmJlcmVkOgog SW4gcGFydGljdWxhciwgZm9yIEtWTV9IQ19YRU5fSFZNX09QX0dVRVNUX1JFUVVFU1RfVk1fRVZF TlQsIHRoZSBsYXN0IHR3bwogcmVnaXN0ZXJzIGNhbiBiZSBwb2lzb25lZCBkZWxpYmVyYXRlbHkg YW5kIGNhbm5vdCBiZSB1c2VkIGZvciBwYXNzaW5nCiBpbmZvcm1hdGlvbi4KKworOS4gS1ZNX0hD X01FTV9NQVAKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FyY2hpdGVjdHVyZTogeDg2CitTdGF0dXM6 IGFjdGl2ZQorUHVycG9zZTogTWFwIGEgZ3Vlc3QgcGh5c2ljYWwgcGFnZSB0byBhbm90aGVyIFZN ICh0aGUgaW50cm9zcGVjdG9yKS4KK1VzYWdlOgorCithMDogcG9pbnRlciB0byBhIHRva2VuIG9i dGFpbmVkIHdpdGggYSBLVk1JX0dFVF9NQVBfVE9LRU4gY29tbWFuZCAoc2VlIGt2bWkucnN0KQor CXN0cnVjdCBrdm1pX21hcF9tZW1fdG9rZW4geworCQlfX3U2NCB0b2tlbls0XTsKKwl9OworCith MTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBiZSBtYXBwZWQKKworYTI6IGd1ZXN0IHBoeXNp Y2FsIGFkZHJlc3MgZnJvbSBpbnRyb3NwZWN0b3IgdGhhdCB3aWxsIGJlIHJlcGxhY2VkCisKK0Jv dGggZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIHdpbGwgZW5kIHVwIHBvaXRpbmcgdG8gdGhlIHNh bWUgcGh5c2ljYWwgcGFnZS4KKworUmV0dXJucyBhbnkgZXJyb3IgdGhhdCB0aGUgbWVtb3J5IG1h bmFnZXIgY2FuIHJldHVybi4KKworMTAuIEtWTV9IQ19NRU1fVU5NQVAKKy0tLS0tLS0tLS0tLS0t LS0tLS0KKworQXJjaGl0ZWN0dXJlOiB4ODYKK1N0YXR1czogYWN0aXZlCitQdXJwb3NlOiBVbm1h cCBhIHByZXZpb3VzbHkgbWFwcGVkIHBhZ2UuCitVc2FnZToKKworYTA6IGd1ZXN0IHBoeXNpY2Fs IGFkZHJlc3MgZnJvbSBpbnRyb3NwZWN0b3IKKworVGhlIGFkZHJlc3Mgd2lsbCBzdG9wIHBvaW50 aW5nIHRvIHRoZSBpbnRyb3NwZWN0ZWQgcGFnZSBhbmQgYSBuZXcgcGh5c2ljYWwKK3BhZ2UgaXMg YWxsb2NhdGVkIGZvciB0aGlzIGdwYS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9h cmNoL3g4Ni9LY29uZmlnCmluZGV4IDY4MjYxNDMwZmU2ZS4uYTc1MjdjMWY5MGEwIDEwMDY0NAot LS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTgyMCw2ICs4 MjAsMTUgQEAgY29uZmlnIEtWTV9ERUJVR19GUwogCSAgU3RhdGlzdGljcyBhcmUgZGlzcGxheWVk IGluIGRlYnVnZnMgZmlsZXN5c3RlbS4gRW5hYmxpbmcgdGhpcyBvcHRpb24KIAkgIG1heSBpbmN1 ciBzaWduaWZpY2FudCBvdmVyaGVhZC4KIAorY29uZmlnIEtWTV9JTlRST1NQRUNUSU9OX0dVRVNU CisJYm9vbCAiS1ZNIE1lbW9yeSBJbnRyb3NwZWN0aW9uIHN1cHBvcnQgb24gR3Vlc3QiCisJZGVw ZW5kcyBvbiBLVk1fR1VFU1QKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFi bGVzIGZ1bmN0aW9ucyBhbmQgaHlwZXJjYWxscyBmb3Igc2VjdXJpdHkgYXBwbGljYXRpb25zCisJ ICBydW5uaW5nIGluIGEgc2VwYXJhdGUgVk0gdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIG90 aGVyIFZNLXMsIHF1ZXJ5CisJICB0aGUgc3RhdGUgb2YgdGhlIHZDUFUtcyAoR1BSLXMsIE1TUi1z IGV0Yy4pLgorCiBjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HCiAJYm9vbCAiUGFyYXZp cnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nIgogCWRlcGVuZHMgb24gUEFSQVZJUlQKZGlmZiAt LWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bWlfZ3Vlc3QuaCBiL2FyY2gveDg2L2luY2x1 ZGUvYXNtL2t2bWlfZ3Vlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmM3ZWQ1M2E5MzhlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2t2bWlfZ3Vlc3QuaApAQCAtMCwwICsxLDEwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLworI2lmbmRlZiBfX0tWTUlfR1VFU1RfSF9fCisjZGVmaW5lIF9fS1ZNSV9H VUVTVF9IX18KKworbG9uZyBrdm1pX2FyY2hfbWFwX2hjKHN0cnVjdCBrdm1pX21hcF9tZW1fdG9r ZW4gKnRrbnAsCisJZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgbWFwX2dwYSk7Citsb25nIGt2bWlfYXJj aF91bm1hcF9oYyhncGFfdCBtYXBfZ3BhKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gv eDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCAwMGI3 ZTI3YmMyYjcuLjk5NTY1MmJhNTNiMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2Vm aWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTE2LDYgKzExNiw3IEBAIG9i ai0kKENPTkZJR19QQVJBVklSVCkJCSs9IHBhcmF2aXJ0Lm8gcGFyYXZpcnRfcGF0Y2hfJChCSVRT KS5vCiBvYmotJChDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTKSs9IHBhcmF2aXJ0LXNwaW5sb2Nr cy5vCiBvYmotJChDT05GSUdfUEFSQVZJUlRfQ0xPQ0spCSs9IHB2Y2xvY2subwogb2JqLSQoQ09O RklHX1g4Nl9QTUVNX0xFR0FDWV9ERVZJQ0UpICs9IHBtZW0ubworb2JqLSQoQ09ORklHX0tWTV9J TlRST1NQRUNUSU9OX0dVRVNUKQkrPSBrdm1pX21lbV9ndWVzdC5vIC4uLy4uLy4uL3ZpcnQva3Zt L2t2bWlfbWVtX2d1ZXN0Lm8KIAogb2JqLSQoQ09ORklHX0pBSUxIT1VTRV9HVUVTVCkJKz0gamFp bGhvdXNlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWlfbWVtX2d1ZXN0LmMg Yi9hcmNoL3g4Ni9rZXJuZWwva3ZtaV9tZW1fZ3Vlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmM0ZTI2MTNmOTBmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gv eDg2L2tlcm5lbC9rdm1pX21lbV9ndWVzdC5jCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogS1ZNIGludHJvc3BlY3Rpb24gZ3Vlc3Qg aW1wbGVtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQml0ZGVmZW5kZXIgUy5S LkwuCisgKgorICogQXV0aG9yOgorICogICBNaXJjZWEgQ2lyamFsaXUgPG1jaXJqYWxpdUBiaXRk ZWZlbmRlci5jb20+CisgKi8KKworI2luY2x1ZGUgPHVhcGkvbGludXgva3ZtaS5oPgorI2luY2x1 ZGUgPHVhcGkvbGludXgva3ZtX3BhcmEuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1fdHlwZXMuaD4K KyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KKworbG9uZyBrdm1pX2FyY2hfbWFwX2hjKHN0cnVj dCBrdm1pX21hcF9tZW1fdG9rZW4gKnRrbnAsCisJCSAgICAgICBncGFfdCByZXFfZ3BhLCBncGFf dCBtYXBfZ3BhKQoreworCXJldHVybiBrdm1faHlwZXJjYWxsMyhLVk1fSENfTUVNX01BUCwgKHVu c2lnbmVkIGxvbmcpdGtucCwKKwkJCSAgICAgIHJlcV9ncGEsIG1hcF9ncGEpOworfQorCitsb25n IGt2bWlfYXJjaF91bm1hcF9oYyhncGFfdCBtYXBfZ3BhKQoreworCXJldHVybiBrdm1faHlwZXJj YWxsMShLVk1fSENfTUVNX1VOTUFQLCBtYXBfZ3BhKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9saW51eC9rdm1fcGFyYS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bV9wYXJhLmgKaW5k ZXggNTkyYmRhOTJiNmQ1Li5hMDgzZTNlNjZkZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9s aW51eC9rdm1fcGFyYS5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm1fcGFyYS5oCkBAIC0z Myw2ICszMyw4IEBACiAjZGVmaW5lIEtWTV9IQ19DTE9DS19QQUlSSU5HCQk5CiAjZGVmaW5lIEtW TV9IQ19TRU5EX0lQSQkJMTAKIAorI2RlZmluZSBLVk1fSENfTUVNX01BUAkJCTMyCisjZGVmaW5l IEtWTV9IQ19NRU1fVU5NQVAJCTMzCiAjZGVmaW5lIEtWTV9IQ19YRU5fSFZNX09QCQkzNCAvKiBY ZW4ncyBfX0hZUEVSVklTT1JfaHZtX29wICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Vh cGkvbGludXgva3ZtaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaAppbmRleCBiMDcyZTBh NGYzM2QuLjg1OTFjNzQ4NTI0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWku aAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtaS5oCkBAIC0yNjIsNCArMjYyLDI1IEBAIHN0 cnVjdCBrdm1pX2V2ZW50X2JyZWFrcG9pbnQgewogCV9fdTggcGFkZGluZ1s3XTsKIH07CiAKK3N0 cnVjdCBrdm1pX21hcF9tZW1fdG9rZW4geworCV9fdTY0IHRva2VuWzRdOworfTsKKworc3RydWN0 IGt2bWlfZ2V0X21hcF90b2tlbl9yZXBseSB7CisJc3RydWN0IGt2bWlfbWFwX21lbV90b2tlbiB0 b2tlbjsKK307CisKKy8qIE1hcCBvdGhlciBndWVzdCdzIGdwYSB0byBsb2NhbCBndmEgKi8KK3N0 cnVjdCBrdm1pX21lbV9tYXAgeworCXN0cnVjdCBrdm1pX21hcF9tZW1fdG9rZW4gdG9rZW47CisJ X191NjQgZ3BhOworCV9fdTY0IGd2YTsKK307CisKKy8qCisgKiBpb2N0bHMgZm9yIC9kZXYva3Zt bWVtCisgKi8KKyNkZWZpbmUgS1ZNX0lOVFJPX01FTV9NQVAgICAgICAgX0lPVygnaScsIDB4MDEs IHN0cnVjdCBrdm1pX21lbV9tYXApCisjZGVmaW5lIEtWTV9JTlRST19NRU1fVU5NQVAgICAgIF9J T1coJ2knLCAweDAyLCB1bnNpZ25lZCBsb25nKQorCiAjZW5kaWYgLyogX1VBUElfX0xJTlVYX0tW TUlfSCAqLwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtaV9tZW1fZ3Vlc3QuYyBiL3ZpcnQva3Zt L2t2bWlfbWVtX2d1ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5iZWM0NzNiNDUyODkKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS9rdm1pX21lbV9ndWVz dC5jCkBAIC0wLDAgKzEsNjUxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIEtWTSBpbnRyb3NwZWN0aW9uIGd1ZXN0IGltcGxlbWVudGF0aW9uCisgKgorICog Q29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQml0ZGVmZW5kZXIgUy5SLkwuCisgKgorICogQXV0aG9y OgorICogICBNaXJjZWEgQ2lyamFsaXUgPG1jaXJqYWxpdUBiaXRkZWZlbmRlci5jb20+CisgKi8K KworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxp bnV4L3NjaGVkL21tLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51 eC9rdm1fdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgorI2luY2x1ZGUgPGxp bnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv c2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3Bpbmxv Y2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNodGFi bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWZjb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3Rs Lmg+CisKKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2t2bWkuaD4KKyNpbmNsdWRlIDxhc20va3ZtaV9n dWVzdC5oPgorCisjZGVmaW5lIEFTU0VSVChleHApIEJVR19PTighKGV4cCkpCisjZGVmaW5lIERC X0hBU0hfQklUUyA0CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcHJvY19tYXBfY2FjaGVw Oworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmaWxlX21hcF9jYWNoZXA7CitzdGF0aWMgc3Ry dWN0IGttZW1fY2FjaGUgKnBhZ2VfbWFwX2NhY2hlcDsKKworLyogcHJvY2Vzcy9tbSB0byBwcm9j X21hcCAqLworc3RhdGljIERFRklORV9IQVNIVEFCTEUoZGJfaGFzaCwgREJfSEFTSF9CSVRTKTsK K3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGJfaGFzaF9sb2NrKTsKKworc3RydWN0IHByb2NfbWFw IHsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsJCS8qIGRhdGFiYXNlIGtleSAqLworCXN0cnVjdCBo bGlzdF9ub2RlIGRiX2xpbms7CS8qIGRhdGFiYXNlIGxpbmsgKi8KKwlyZWZjb3VudF90IHJlZmNu dDsKKworCXN0cnVjdCByYl9yb290IGVudHJpZXM7CQkvKiBtYXBwaW5nIGVudHJpZXMgZm9yIHRo aXMgbW0gKi8KKwlyd2xvY2tfdCBlbnRyaWVzX2xvY2s7Cit9OworCitzdHJ1Y3QgZmlsZV9tYXAg eworCXN0cnVjdCBwcm9jX21hcCAqcHJvYzsKKworCXN0cnVjdCBsaXN0X2hlYWQgZW50cmllczsJ LyogbWFwcGluZyBlbnRyaWVzIGZvciB0aGlzIGZpbGUgKi8KKwlzcGlubG9ja190IGVudHJpZXNf bG9jazsKK307CisKK3N0cnVjdCBwYWdlX21hcCB7CisJc3RydWN0IHJiX25vZGUgcHJvY19saW5r OwkvKiBsaW5rIHRvIHN0cnVjdCBwcm9jX21hcCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmlsZV9s aW5rOwkvKiBsaW5rIHRvIHN0cnVjdCBmaWxlX21hcCAqLworCisJZ3BhX3QgZ3BhOwkJCS8qIHRh cmdldCBHUEEgKi8KKwlndmFfdCB2YWRkcjsJCQkvKiBsb2NhbCBHVkEgKi8KK307CisKK3N0YXRp YyB2b2lkIHByb2NfbWFwX2luaXQoc3RydWN0IHByb2NfbWFwICpwbWFwKQoreworCXBtYXAtPm1t ID0gTlVMTDsKKwlJTklUX0hMSVNUX05PREUoJnBtYXAtPmRiX2xpbmspOworCXJlZmNvdW50X3Nl dCgmcG1hcC0+cmVmY250LCAwKTsKKworCXBtYXAtPmVudHJpZXMgPSBSQl9ST09UOworCXJ3bG9j a19pbml0KCZwbWFwLT5lbnRyaWVzX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IHByb2NfbWFw ICpwcm9jX21hcF9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBwcm9jX21hcCAqb2JqOworCisJb2Jq ID0ga21lbV9jYWNoZV9hbGxvYyhwcm9jX21hcF9jYWNoZXAsIEdGUF9LRVJORUwpOworCWlmIChv YmogIT0gTlVMTCkKKwkJcHJvY19tYXBfaW5pdChvYmopOworCisJcmV0dXJuIG9iajsKK30KKwor c3RhdGljIHZvaWQgcHJvY19tYXBfZnJlZShzdHJ1Y3QgcHJvY19tYXAgKnBtYXApCit7CisJQVNT RVJUKGhsaXN0X3VuaGFzaGVkKCZwbWFwLT5kYl9saW5rKSk7CisJQVNTRVJUKHJlZmNvdW50X3Jl YWQoJnBtYXAtPnJlZmNudCkgPT0gMCk7CisJQVNTRVJUKFJCX0VNUFRZX1JPT1QoJnBtYXAtPmVu dHJpZXMpKTsKKworCWttZW1fY2FjaGVfZnJlZShwcm9jX21hcF9jYWNoZXAsIHBtYXApOworfQor CitzdGF0aWMgdm9pZCBmaWxlX21hcF9pbml0KHN0cnVjdCBmaWxlX21hcCAqZm1wKQoreworCUlO SVRfTElTVF9IRUFEKCZmbXAtPmVudHJpZXMpOworCXNwaW5fbG9ja19pbml0KCZmbXAtPmVudHJp ZXNfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9tYXAgKmZpbGVfbWFwX2FsbG9jKHZv aWQpCit7CisJc3RydWN0IGZpbGVfbWFwICpvYmo7CisKKwlvYmogPSBrbWVtX2NhY2hlX2FsbG9j KGZpbGVfbWFwX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKG9iaiAhPSBOVUxMKQorCQlmaWxl X21hcF9pbml0KG9iaik7CisKKwlyZXR1cm4gb2JqOworfQorCitzdGF0aWMgdm9pZCBmaWxlX21h cF9mcmVlKHN0cnVjdCBmaWxlX21hcCAqZm1wKQoreworCUFTU0VSVChsaXN0X2VtcHR5KCZmbXAt PmVudHJpZXMpKTsKKworCWttZW1fY2FjaGVfZnJlZShmaWxlX21hcF9jYWNoZXAsIGZtcCk7Cit9 CisKK3N0YXRpYyB2b2lkIHBhZ2VfbWFwX2luaXQoc3RydWN0IHBhZ2VfbWFwICpwbXApCit7CisJ bWVtc2V0KHBtcCwgMCwgc2l6ZW9mKCpwbXApKTsKKworCVJCX0NMRUFSX05PREUoJnBtcC0+cHJv Y19saW5rKTsKKwlJTklUX0xJU1RfSEVBRCgmcG1wLT5maWxlX2xpbmspOworfQorCitzdGF0aWMg c3RydWN0IHBhZ2VfbWFwICpwYWdlX21hcF9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBwYWdlX21h cCAqb2JqOworCisJb2JqID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX21hcF9jYWNoZXAsIEdGUF9L RVJORUwpOworCWlmIChvYmogIT0gTlVMTCkKKwkJcGFnZV9tYXBfaW5pdChvYmopOworCisJcmV0 dXJuIG9iajsKK30KKworc3RhdGljIHZvaWQgcGFnZV9tYXBfZnJlZShzdHJ1Y3QgcGFnZV9tYXAg KnBtcCkKK3sKKwlBU1NFUlQoUkJfRU1QVFlfTk9ERSgmcG1wLT5wcm9jX2xpbmspKTsKKworCWtt ZW1fY2FjaGVfZnJlZShwYWdlX21hcF9jYWNoZXAsIHBtcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg cHJvY19tYXAgKmdldF9wcm9jX21hcCh2b2lkKQoreworCXN0cnVjdCBwcm9jX21hcCAqcG1hcCwg KmFsbG9jYXRlZDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlib29sIGZvdW5kID0gZmFsc2U7 CisKKwlpZiAoIW1tZ2V0X25vdF96ZXJvKGN1cnJlbnQtPm1tKSkKKwkJcmV0dXJuIE5VTEw7CisJ bW0gPSBjdXJyZW50LT5tbTsKKworCWFsbG9jYXRlZCA9IHByb2NfbWFwX2FsbG9jKCk7CS8qIG1h eSBiZSBOVUxMICovCisKKwlzcGluX2xvY2soJmRiX2hhc2hfbG9jayk7CisKKwloYXNoX2Zvcl9l YWNoX3Bvc3NpYmxlKGRiX2hhc2gsIHBtYXAsIGRiX2xpbmssICh1bnNpZ25lZCBsb25nKW1tKQor CQlpZiAocG1hcC0+bW0gPT0gbW0gJiYgcmVmY291bnRfaW5jX25vdF96ZXJvKCZwbWFwLT5yZWZj bnQpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFmb3VuZCAm JiBhbGxvY2F0ZWQgIT0gTlVMTCkgeworCQlwbWFwID0gYWxsb2NhdGVkOworCQlhbGxvY2F0ZWQg PSBOVUxMOworCisJCXBtYXAtPm1tID0gbW07CisJCWhhc2hfYWRkKGRiX2hhc2gsICZwbWFwLT5k Yl9saW5rLCAodW5zaWduZWQgbG9uZyltbSk7CisJCXJlZmNvdW50X3NldCgmcG1hcC0+cmVmY250 LCAxKTsKKwl9IGVsc2UKKwkJbW1wdXQobW0pOworCisJc3Bpbl91bmxvY2soJmRiX2hhc2hfbG9j ayk7CisKKwlpZiAoYWxsb2NhdGVkICE9IE5VTEwpCisJCXByb2NfbWFwX2ZyZWUoYWxsb2NhdGVk KTsKKworCXJldHVybiBwbWFwOworfQorCitzdGF0aWMgdm9pZCBwdXRfcHJvY19tYXAoc3RydWN0 IHByb2NfbWFwICpwbWFwKQoreworCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJnBtYXAtPnJl ZmNudCkpIHsKKwkJbW1wdXQocG1hcC0+bW0pOworCisJCS8qIHJlbW92ZSBmcm9tIGhhc2ggdGFi bGUgKi8KKwkJc3Bpbl9sb2NrKCZkYl9oYXNoX2xvY2spOworCQloYXNoX2RlbCgmcG1hcC0+ZGJf bGluayk7CisJCXNwaW5fdW5sb2NrKCZkYl9oYXNoX2xvY2spOworCisJCXByb2NfbWFwX2ZyZWUo cG1hcCk7CisJfQorfQorCitzdGF0aWMgYm9vbCBwcm9jX21hcF9pbnNlcnQoc3RydWN0IHByb2Nf bWFwICpwbWFwLCBzdHJ1Y3QgcGFnZV9tYXAgKnBtcCkKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9v dCA9ICZwbWFwLT5lbnRyaWVzOworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJnJvb3QtPnJiX25v ZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHBhZ2VfbWFwICp0 aGlzOworCWJvb2wgaW5zZXJ0ZWQgPSB0cnVlOworCisJd3JpdGVfbG9jaygmcG1hcC0+ZW50cmll c19sb2NrKTsKKworCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdG8gcHV0IG5ldyBub2RlICovCisJd2hp bGUgKCpuZXcpIHsKKwkJdGhpcyA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBwYWdlX21hcCwgcHJv Y19saW5rKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocG1wLT52YWRkciA8IHRoaXMtPnZh ZGRyKQorCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOworCQllbHNlIGlmIChwbXAtPnZhZGRy ID4gdGhpcy0+dmFkZHIpCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOworCQllbHNlIHsK KwkJCS8qIEFscmVhZHkgaGF2ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCWluc2VydGVkID0gZmFsc2U7 CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEFkZCBuZXcgbm9kZSBhbmQgcmViYWxhbmNl IHRyZWUuICovCisJcmJfbGlua19ub2RlKCZwbXAtPnByb2NfbGluaywgcGFyZW50LCBuZXcpOwor CXJiX2luc2VydF9jb2xvcigmcG1wLT5wcm9jX2xpbmssIHJvb3QpOworCitvdXQ6CisJd3JpdGVf dW5sb2NrKCZwbWFwLT5lbnRyaWVzX2xvY2spOworCisJcmV0dXJuIGluc2VydGVkOworfQorCisj aWYgMCAvKiB3aWxsIHVzZSB0aGlzIGxhdGVyICovCitzdGF0aWMgc3RydWN0IHBhZ2VfbWFwICpw cm9jX21hcF9zZWFyY2goc3RydWN0IHByb2NfbWFwICpwbWFwLAorCQkJCQl1bnNpZ25lZCBsb25n IHZhZGRyKQoreworCXN0cnVjdCByYl9yb290ICpyb290ID0gJnBtYXAtPmVudHJpZXM7CisJc3Ry dWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IHBhZ2VfbWFwICpwbXA7CisKKwlyZWFkX2xvY2so JnBtYXAtPmVudHJpZXNfbG9jayk7CisKKwlub2RlID0gcm9vdC0+cmJfbm9kZTsKKworCXdoaWxl IChub2RlKSB7CisJCXBtcCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBwYWdlX21hcCwgcHJvY19s aW5rKTsKKworCQlpZiAodmFkZHIgPCBwbXAtPnZhZGRyKQorCQkJbm9kZSA9IG5vZGUtPnJiX2xl ZnQ7CisJCWVsc2UgaWYgKHZhZGRyID4gcG1wLT52YWRkcikKKwkJCW5vZGUgPSBub2RlLT5yYl9y aWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFub2RlKQorCQlwbXAgPSBOVUxM OworCisJcmVhZF91bmxvY2soJnBtYXAtPmVudHJpZXNfbG9jayk7CisKKwlyZXR1cm4gcG1wOwor fQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGFnZV9tYXAgKnByb2NfbWFwX3NlYXJjaF9leHRy YWN0KHN0cnVjdCBwcm9jX21hcCAqcG1hcCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIpCit7 CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmcG1hcC0+ZW50cmllczsKKwlzdHJ1Y3QgcmJfbm9k ZSAqbm9kZTsKKwlzdHJ1Y3QgcGFnZV9tYXAgKnBtcDsKKworCXdyaXRlX2xvY2soJnBtYXAtPmVu dHJpZXNfbG9jayk7CisKKwlub2RlID0gcm9vdC0+cmJfbm9kZTsKKworCXdoaWxlIChub2RlKSB7 CisJCXBtcCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBwYWdlX21hcCwgcHJvY19saW5rKTsKKwor CQlpZiAodmFkZHIgPCBwbXAtPnZhZGRyKQorCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCWVs c2UgaWYgKHZhZGRyID4gcG1wLT52YWRkcikKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJ ZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5vZGUpIHsKKwkJcmJfZXJhc2UoJnBtcC0+cHJv Y19saW5rLCAmcG1hcC0+ZW50cmllcyk7CisJCVJCX0NMRUFSX05PREUoJnBtcC0+cHJvY19saW5r KTsKKwl9IGVsc2UKKwkJcG1wID0gTlVMTDsKKworCXdyaXRlX3VubG9jaygmcG1hcC0+ZW50cmll c19sb2NrKTsKKworCXJldHVybiBwbXA7Cit9CisKK3N0YXRpYyB2b2lkIHByb2NfbWFwX3JlbW92 ZShzdHJ1Y3QgcHJvY19tYXAgKnBtYXAsIHN0cnVjdCBwYWdlX21hcCAqcG1wKQoreworCXdyaXRl X2xvY2soJnBtYXAtPmVudHJpZXNfbG9jayk7CisJcmJfZXJhc2UoJnBtcC0+cHJvY19saW5rLCAm cG1hcC0+ZW50cmllcyk7CisJUkJfQ0xFQVJfTk9ERSgmcG1wLT5wcm9jX2xpbmspOworCXdyaXRl X3VubG9jaygmcG1hcC0+ZW50cmllc19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9tYXBf aW5zZXJ0KHN0cnVjdCBmaWxlX21hcCAqZm1wLCBzdHJ1Y3QgcGFnZV9tYXAgKnBtcCkKK3sKKwlz cGluX2xvY2soJmZtcC0+ZW50cmllc19sb2NrKTsKKwlsaXN0X2FkZCgmcG1wLT5maWxlX2xpbmss ICZmbXAtPmVudHJpZXMpOworCXNwaW5fdW5sb2NrKCZmbXAtPmVudHJpZXNfbG9jayk7Cit9CisK K3N0YXRpYyB2b2lkIGZpbGVfbWFwX3JlbW92ZShzdHJ1Y3QgZmlsZV9tYXAgKmZtcCwgc3RydWN0 IHBhZ2VfbWFwICpwbXApCit7CisJc3Bpbl9sb2NrKCZmbXAtPmVudHJpZXNfbG9jayk7CisJbGlz dF9kZWwoJnBtcC0+ZmlsZV9saW5rKTsKKwlzcGluX3VubG9jaygmZm1wLT5lbnRyaWVzX2xvY2sp OworfQorCisvKgorICogT3BlbnMgdGhlIGRldmljZSBmb3IgbWFwL3VubWFwIG9wZXJhdGlvbnMu IFRoZSBtbSBvZiB0aGlzIHByb2Nlc3MgaXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmaWxl cyBpbiBhIDE6bWFueSByZWxhdGlvbnNoaXAuCisgKiBPcGVyYXRpb25zIG9uIHRoaXMgZmlsZSBt dXN0IGJlIGRvbmUgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MgdGhhdCBvcGVuZWQgaXQuCisgKi8K K3N0YXRpYyBpbnQga3ZtX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGVwLCBzdHJ1Y3QgZmls ZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcHJvY19tYXAgKnBtYXA7CisJc3RydWN0IGZpbGVfbWFwICpm bXA7CisKKwlwcl9kZWJ1Zygia3ZtaTogZmlsZSAlMDE2bHggb3BlbmVkIGJ5IG1tICUwMTZseFxu IiwKKwkJICh1bnNpZ25lZCBsb25nKSBmaWxwLCAodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbSk7 CisKKwlwbWFwID0gZ2V0X3Byb2NfbWFwKCk7CisJaWYgKHBtYXAgPT0gTlVMTCkKKwkJcmV0dXJu IC1FTk9FTlQ7CisKKwkvKiBsaW5rIHRoZSBmaWxlIDE6MSB3aXRoIHN1Y2ggYSBzdHJ1Y3R1cmUg Ki8KKwlmbXAgPSBmaWxlX21hcF9hbGxvYygpOworCWlmIChmbXAgPT0gTlVMTCkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlmbXAtPnByb2MgPSBwbWFwOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZt cDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBfZG9fbWFwcGluZyhzdHJ1Y3Qga3Zt aV9tZW1fbWFwICptYXBfcmVxLCBzdHJ1Y3QgcGFnZV9tYXAgKnBtcCkKK3sKKwlzdHJ1Y3QgcGFn ZSAqcGFnZTsKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKwlsb25nIG5ycGFnZXM7CisJbG9uZyByZXN1 bHQgPSAwOworCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJLyogcGlu IHRoZSBwYWdlIHRvIGJlIHJlcGxhY2VkIChhbHNvIHN3YXBzIGluIHRoZSBwYWdlKSAqLworCW5y cGFnZXMgPSBnZXRfdXNlcl9wYWdlc19sb2NrZWQobWFwX3JlcS0+Z3ZhLCAxLAorCQkJCQlGT0xM X1NQTElUIHwgRk9MTF9NSUdSQVRJT04sCisJCQkJCSZwYWdlLCBOVUxMKTsKKwlpZiAodW5saWtl bHkobnJwYWdlcyA9PSAwKSkgeworCQlyZXN1bHQgPSAtRU5PRU5UOworCQlwcl9lcnIoImt2bWk6 IGZvdW5kIG5vIHBhZ2UgZm9yICUwMTZsbHhcbiIsIG1hcF9yZXEtPmd2YSk7CisJCWdvdG8gb3V0 OworCX0gZWxzZSBpZiAoSVNfRVJSX1ZBTFVFKG5ycGFnZXMpKSB7CisJCXJlc3VsdCA9IG5ycGFn ZXM7CisJCXByX2Vycigia3ZtaTogZ2V0X3VzZXJfcGFnZXNfbG9ja2VkKCkgZmFpbGVkICglbGQp XG4iLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisKKwlwYWRkciA9IHBhZ2VfdG9fcGh5cyhw YWdlKTsKKwlwcl9kZWJ1ZygiJXM6IHBhZ2UgcGh5cyBhZGRyICUwMTZsbHhcbiIsIF9fZnVuY19f LCBwYWRkcik7CisKKwkvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGhvc3QgbWFwcGluZyAqLworCXJl c3VsdCA9IGt2bWlfYXJjaF9tYXBfaGMoJm1hcF9yZXEtPnRva2VuLCBtYXBfcmVxLT5ncGEsIHBh ZGRyKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKHJlc3VsdCkpIHsKKwkJcHJfZXJyKCJrdm1pOiBtYXBw aW5nIGZhaWxlZCBmb3IgJTAxNmxseCAtPiAlMDE2bHggKCVsZClcbiIsCisJCQlwbXAtPmdwYSwg cG1wLT52YWRkciwgcmVzdWx0KTsKKworCQkvKiBkb24ndCBuZWVkIHRoaXMgcGFnZSBhbnltb3Jl ICovCisJCXB1dF9wYWdlKHBhZ2UpOworCX0KKworb3V0OgorCXVwX3JlYWQoJmN1cnJlbnQtPm1t LT5tbWFwX3NlbSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgbG9uZyBfZG9fdW5t YXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZV9tYXAgKnBtcCkKK3sKKwlz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlwaHlzX2Fk ZHJfdCBwYWRkcjsKKwlsb25nIHJlc3VsdCA9IDA7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3Nl bSk7CisKKwkvKiBmaW5kIHRoZSBWTUEgZm9yIHRoZSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl2bWEg PSBmaW5kX3ZtYShtbSwgcG1wLT52YWRkcik7CisJaWYgKHZtYSA9PSBOVUxMKSB7CisJCXJlc3Vs dCA9IC1FTk9FTlQ7CisJCXByX2Vycigia3ZtaTogZmluZF92bWEoKSBmb3VuZCBubyBWTUFcbiIp OworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGUgcGFnZSBpcyBwaW5uZWQsIHRodXMgZWFzeSB0 byBhY2Nlc3MgKi8KKwlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBwbXAtPnZhZGRyLCAwKTsKKwlp ZiAoSVNfRVJSX1ZBTFVFKHBhZ2UpKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIocGFnZSk7CisJCXBy X2Vycigia3ZtaTogZm9sbG93X3BhZ2UoKSBmYWlsZWQgKCVsZClcbiIsIHJlc3VsdCk7CisJCWdv dG8gb3V0OworCX0gZWxzZSBpZiAocGFnZSA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9FTlQ7 CisJCXByX2Vycigia3ZtaTogZm9sbG93X3BhZ2UoKSBmb3VuZCBubyBwYWdlXG4iKTsKKwkJZ290 byBvdXQ7CisJfQorCisJcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CisJcHJfZGVidWcoIiVz OiBwYWdlIHBoeXMgYWRkciAlMDE2bGx4XG4iLCBfX2Z1bmNfXywgcGFkZHIpOworCisJLyogbGFz dCB0aGluZyB0byBkbyBpcyBob3N0IHVubWFwcGluZyAqLworCXJlc3VsdCA9IGt2bWlfYXJjaF91 bm1hcF9oYyhwYWRkcik7CisJaWYgKElTX0VSUl9WQUxVRShyZXN1bHQpKQorCQlwcl93YXJuKCJr dm1pOiB1bm1hcHBpbmcgZmFpbGVkIGZvciAlMDE2bHggKCVsZClcbiIsCisJCQlwbXAtPnZhZGRy LCByZXN1bHQpOworCisJLyogZmluYWxseSB1bnBpbiB0aGUgcGFnZSAqLworCXB1dF9wYWdlKHBh Z2UpOworCitvdXQ6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKK3N0YXRpYyBub2lubGluZSBsb25nIGt2bV9kZXZfaW9jdGxfbWFwKHN0cnVjdCBmaWxl X21hcCAqZm1wLAorCQkJCSAgICAgICBzdHJ1Y3Qga3ZtaV9tZW1fbWFwICptYXApCit7CisJc3Ry dWN0IHByb2NfbWFwICpwbWFwID0gZm1wLT5wcm9jOworCXN0cnVjdCBwYWdlX21hcCAqcG1wOwor CWJvb2wgYWRkZWQ7CisJbG9uZyByZXN1bHQgPSAwOworCisJcHJfZGVidWcoImt2bWk6IG1tICUw MTZseCBtYXAgcmVxdWVzdCAlMDE2bGx4IC0+ICUwMTZsbHhcbiIsCisJCSh1bnNpZ25lZCBsb25n KWN1cnJlbnQtPm1tLCBtYXAtPmdwYSwgbWFwLT5ndmEpOworCisJaWYgKCFhY2Nlc3Nfb2sobWFw LT5ndmEsIFBBR0VfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcHJlcGFyZSBsaXN0 IGVudHJ5ICovCisJcG1wID0gcGFnZV9tYXBfYWxsb2MoKTsKKwlpZiAocG1wID09IE5VTEwpCisJ CXJldHVybiAtRU5PTUVNOworCisJcG1wLT5ncGEgPSBtYXAtPmdwYTsKKwlwbXAtPnZhZGRyID0g bWFwLT5ndmE7CisKKwlhZGRlZCA9IHByb2NfbWFwX2luc2VydChwbWFwLCBwbXApOworCWlmIChh ZGRlZCA9PSBmYWxzZSkgeworCQlyZXN1bHQgPSAtRUFMUkVBRFk7CisJCXByX2Vycigia3ZtaTog YWRkcmVzcyAlMDE2bGx4IGFscmVhZHkgbWFwcGVkIGludG9cbiIsIG1hcC0+Z3ZhKTsKKwkJZ290 byBvdXRfZnJlZTsKKwl9CisJZmlsZV9tYXBfaW5zZXJ0KGZtcCwgcG1wKTsKKworCS8qIGFjdHVh bCBtYXBwaW5nIGhlcmUgKi8KKwlyZXN1bHQgPSBfZG9fbWFwcGluZyhtYXAsIHBtcCk7CisJaWYg KElTX0VSUl9WQUxVRShyZXN1bHQpKQorCQlnb3RvIG91dF9yZW1vdmU7CisKKwlyZXR1cm4gMDsK Kworb3V0X3JlbW92ZToKKwlwcm9jX21hcF9yZW1vdmUocG1hcCwgcG1wKTsKKwlmaWxlX21hcF9y ZW1vdmUoZm1wLCBwbXApOworCitvdXRfZnJlZToKKwlwYWdlX21hcF9mcmVlKHBtcCk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgbm9pbmxpbmUgbG9uZyBrdm1fZGV2X2lvY3RsX3Vu bWFwKHN0cnVjdCBmaWxlX21hcCAqZm1wLAorCQkJCQkgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sK KwlzdHJ1Y3QgcHJvY19tYXAgKnBtYXAgPSBmbXAtPnByb2M7CisJc3RydWN0IHBhZ2VfbWFwICpw bXA7CisJbG9uZyByZXN1bHQgPSAwOworCisJcHJfZGVidWcoImt2bWk6IG1tICUwMTZseCB1bm1h cCByZXF1ZXN0ICUwMTZseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0sIHZhZGRy KTsKKworCXBtcCA9IHByb2NfbWFwX3NlYXJjaF9leHRyYWN0KHBtYXAsIHZhZGRyKTsKKwlpZiAo cG1wID09IE5VTEwpIHsKKwkJcHJfZXJyKCJrdm1pOiBhZGRyZXNzICUwMTZseCBub3QgbWFwcGVk XG4iLCB2YWRkcik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCS8qIGFjdHVhbCB1bm1hcHBp bmcgaGVyZSAqLworCXJlc3VsdCA9IF9kb191bm1hcHBpbmcoY3VycmVudC0+bW0sIHBtcCk7CisK KwlmaWxlX21hcF9yZW1vdmUoZm1wLCBwbXApOworCXBhZ2VfbWFwX2ZyZWUocG1wKTsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBPcGVyYXRpb25zIG9uIHRoaXMgZmlsZSBtdXN0IGJl IGRvbmUgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MgdGhhdCBvcGVuZWQgaXQuCisgKi8KK3N0YXRp YyBsb25nIGt2bV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgIHVuc2lnbmVkIGlu dCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9p ZCBfX3VzZXIgKikgYXJnOworCXN0cnVjdCBmaWxlX21hcCAqZm1wID0gZmlscC0+cHJpdmF0ZV9k YXRhOworCXN0cnVjdCBwcm9jX21hcCAqcG1hcCA9IGZtcC0+cHJvYzsKKwlsb25nIHJlc3VsdDsK KworCS8qIHRoaXMgaGVscHMga2VlcCBteSBjb2RlIHNpbXBsZXIgKi8KKwlpZiAoY3VycmVudC0+ bW0gIT0gcG1hcC0+bW0pIHsKKwkJcHJfZXJyKCJrdm1pOiBpb2N0bCByZXF1ZXN0IGJ5IGRpZmZl cmVudCBwcm9jZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChpb2N0 bCkgeworCWNhc2UgS1ZNX0lOVFJPX01FTV9NQVA6IHsKKwkJc3RydWN0IGt2bWlfbWVtX21hcCBt YXA7CisKKwkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtYXAsIGFy Z3AsIHNpemVvZihtYXApKSkKKwkJCWJyZWFrOworCisJCXJlc3VsdCA9IGt2bV9kZXZfaW9jdGxf bWFwKGZtcCwgJm1hcCk7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9JTlRST19NRU1fVU5NQVA6 IHsKKwkJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CisKKwkJcmVz dWx0ID0ga3ZtX2Rldl9pb2N0bF91bm1hcChmbXAsIHZhZGRyKTsKKwkJYnJlYWs7CisJfQorCWRl ZmF1bHQ6CisJCXByX2Vycigia3ZtaTogaW9jdGwgJWQgbm90IGltcGxlbWVudGVkXG4iLCBpb2N0 bCk7CisJCXJlc3VsdCA9IC1FTk9UVFk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIE5vIGNvbnN0cmFpbnQgb24gY2xvc2luZyB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50 IGt2bV9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlcCwgc3RydWN0IGZpbGUgKmZpbHAp Cit7CisJc3RydWN0IGZpbGVfbWFwICpmbXAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0 IHByb2NfbWFwICpwbWFwID0gZm1wLT5wcm9jOworCXN0cnVjdCBwYWdlX21hcCAqcG1wLCAqdGVt cDsKKworCXByX2RlYnVnKCJrdm1pOiBmaWxlICUwMTZseCBjbG9zZWQgYnkgbW0gJTAxNmx4XG4i LAorCQkgKHVuc2lnbmVkIGxvbmcpIGZpbHAsICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tKTsK KworCS8qIHRoaXMgZmlsZV9tYXAgaGFzIG5vIG1vcmUgdXNlcnMsIHRodXMgbm8gbW9yZSBjb25j dXJyZW50IGFjY2VzcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwbXAsIHRlbXAsICZm bXAtPmVudHJpZXMsIGZpbGVfbGluaykgeworCQlwcm9jX21hcF9yZW1vdmUocG1hcCwgcG1wKTsK KwkJbGlzdF9kZWwoJnBtcC0+ZmlsZV9saW5rKTsKKworCQlfZG9fdW5tYXBwaW5nKHBtYXAtPm1t LCBwbXApOworCisJCXBhZ2VfbWFwX2ZyZWUocG1wKTsKKwl9CisKKwlmaWxlX21hcF9mcmVlKGZt cCk7CisJcHV0X3Byb2NfbWFwKHBtYXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bW1lbV9vcHMgPSB7CisJLm9wZW4JCT0ga3ZtX2Rl dl9vcGVuLAorCS51bmxvY2tlZF9pb2N0bCA9IGt2bV9kZXZfaW9jdGwsCisJLmNvbXBhdF9pb2N0 bCAgID0ga3ZtX2Rldl9pb2N0bCwKKwkucmVsZWFzZQk9IGt2bV9kZXZfcmVsZWFzZSwKK307CisK K3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBrdm1fbWVtX2RldiA9IHsKKwkubWlub3IJCT0gTUlT Q19EWU5BTUlDX01JTk9SLAorCS5uYW1lCQk9ICJrdm1tZW0iLAorCS5mb3BzCQk9ICZrdm1tZW1f b3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQga3ZtX2ludHJvX2d1ZXN0X2luaXQodm9pZCkK K3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkpIHsKKwkJ cHJfZXJyKCJrdm1pOiBwYXJhdmlydCBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FUEVS TTsKKwl9CisKKwlwcm9jX21hcF9jYWNoZXAgPSBLTUVNX0NBQ0hFKHByb2NfbWFwLCBTTEFCX1BB TklDIHwgU0xBQl9BQ0NPVU5UKTsKKwlpZiAocHJvY19tYXBfY2FjaGVwID09IE5VTEwpIHsKKwkJ cmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWZpbGVfbWFwX2NhY2hl cCA9IEtNRU1fQ0FDSEUoZmlsZV9tYXAsIFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpOworCWlm IChmaWxlX21hcF9jYWNoZXAgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3Rv IG91dF9lcnI7CisJfQorCisJcGFnZV9tYXBfY2FjaGVwID0gS01FTV9DQUNIRShwYWdlX21hcCwg U0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7CisJaWYgKHBhZ2VfbWFwX2NhY2hlcCA9PSBOVUxM KSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXN1bHQg PSBtaXNjX3JlZ2lzdGVyKCZrdm1fbWVtX2Rldik7CisJaWYgKHJlc3VsdCkgeworCQlwcl9lcnIo Imt2bWk6IG1pc2MgZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZCAoJWQpXG4iLCByZXN1bHQpOworCQln b3RvIG91dF9lcnI7CisJfQorCisJcHJfZGVidWcoImt2bWk6IGd1ZXN0IG1lbW9yeSBpbnRyb3Nw ZWN0aW9uIGRldmljZSBjcmVhdGVkXG4iKTsKKworCXJldHVybiAwOworCitvdXRfZXJyOgorCWtt ZW1fY2FjaGVfZGVzdHJveShwYWdlX21hcF9jYWNoZXApOworCWttZW1fY2FjaGVfZGVzdHJveShm aWxlX21hcF9jYWNoZXApOworCWttZW1fY2FjaGVfZGVzdHJveShwcm9jX21hcF9jYWNoZXApOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGt2bV9pbnRyb19ndWVz dF9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZrdm1fbWVtX2Rldik7CisKKwlrbWVt X2NhY2hlX2Rlc3Ryb3kocGFnZV9tYXBfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZmls ZV9tYXBfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocHJvY19tYXBfY2FjaGVwKTsKK30K KworbW9kdWxlX2luaXQoa3ZtX2ludHJvX2d1ZXN0X2luaXQpCittb2R1bGVfZXhpdChrdm1faW50 cm9fZ3Vlc3RfZXhpdCkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxp bnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWls bWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u