From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH v2] drm: Add Grain Media GM12U320 kms driver Date: Fri, 3 Jun 2016 15:06:32 +0200 Message-ID: <1464959192-21064-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 2601D6ED9D for ; Fri, 3 Jun 2016 13:06:39 +0000 (UTC) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D5058C04B32D for ; Fri, 3 Jun 2016 13:06:38 +0000 (UTC) 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 , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org R3JhaW4tbWVkaWEgR00xMlUzMjAgYmFzZWQgZGV2aWNlcyBhcmUgbWluaSB2aWRlbyBwcm9qZWN0 b3JzIHVzaW5nIFVTQiBmb3IKYm90aCBwb3dlciBhbmQgdmlkZW8gZGF0YSB0cmFuc3BvcnQuCgpU aGlzIGNvbW1pdCBhZGRzIGEga21zIGRyaXZlciBmb3IgdGhlc2UgZGV2aWNlcywgaW5jbHVkaW5n IHByaW1lIHN1cHBvcnQuCgpUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgdWRs IGttcyBkcml2ZXIsIGFuZCB0aGUgZ20xMnUzMjAKZmIgZHJpdmVyIGJ5IFZpYWNoZXNsYXYgTnVy bWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4uCgpTaWduZWQtb2ZmLWJ5OiBIYW5zIGRlIEdv ZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotLS0KQ2hhbmdlcyBpbiB2MjoKLVJlYmFzZSBvbiA0 LjctcmMxCi1TeW5jIHdpdGggdWRsLCBicmluZyBpbiBhbnkgZml4ZXMgZG9uZSB0byB1ZGwgc2lu Y2UgdjEKLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvS2NvbmZpZyAgICAgICAgICAgICAgfCAgMTYg KwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlICAgICAgICAgICAgIHwgICA3ICsK IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9jb25uZWN0b3IuYyB8IDE1MSArKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2RtYWJ1Zi5jICAgIHwgMjgz ICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2LmMg ICAgICAgfCAxNjAgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9k cnYuaCAgICAgICB8IDEyOSArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUz MjBfZW5jb2Rlci5jICAgfCAgNzUgKysrKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1 MzIwX2ZiLmMgICAgICAgIHwgMzQ1ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2dtMTJ1MzIwL2dtMTJ1MzIwX2dlbS5jICAgICAgIHwgMjM3ICsrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX21haW4uYyAgICAgIHwgNTA3ICsrKysrKysrKysr KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfbW9kZXNl dC5jICAgfCAxNDQgKysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDIwNjMgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmlnCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nvbm5lY3Rv ci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIw X2RtYWJ1Zi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dt MTJ1MzIwX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIw L2dtMTJ1MzIwX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1 MzIwL2dtMTJ1MzIwX2VuY29kZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9nbTEydTMyMC9nbTEydTMyMF9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX21haW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tb2Rlc2V0LmMKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDIxNmQ0NDcuLjVjMDVhZjIgMTAwNjQ0Ci0tLSBh L01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0zOTA0LDYgKzM5MDQsMTIgQEAgUzoJ U3VwcG9ydGVkCiBGOglkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS8KIEY6CWluY2x1ZGUvdWFwaS9k cm0vbm91dmVhdV9kcm0uaAogCitEUk0gRFJJVkVSUyBGT1IgR1JBSU4tTUVESUEgR00xMlUzMjAK K006CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CitMOglkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvZ3B1L2RybS9nbTEy dTMyMC8KKwogRFJNIERSSVZFUlMgRk9SIE5WSURJQSBURUdSQQogTToJVGhpZXJyeSBSZWRpbmcg PHRoaWVycnkucmVkaW5nQGdtYWlsLmNvbT4KIEw6CWRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKaW5kZXggZmMzNTczMS4uMTM4MGU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI5MCwzICsy OTAsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZpZyIKIHNvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9L Y29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCmluZGV4IGJlNDNhZmIuLjJlMDYzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTc1 LDYgKzc1LDcgQEAgb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05G SUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KIG9iai0k KENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLworb2JqLSQoQ09ORklHX0RSTV9HTTEy VTMyMCkgKz0gZ20xMnUzMjAvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFuZWwvCiBv YmoteQkJCSs9IGJyaWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlY2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9nbTEydTMyMC9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBEUk1fR00x MlUzMjAKKwl0cmlzdGF0ZSAiR3JhaW4gTWVkaWEgR00xMlUzMjAgYmFzZWQgbWluaSBwcm9qZWN0 b3JzIgorCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBVU0JfU1VQUE9SVAorCWRlcGVuZHMg b24gVVNCX0FSQ0hfSEFTX0hDRAorCXNlbGVjdCBVU0IKKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNU CisJc2VsZWN0IEZCX1NZU19DT1BZQVJFQQorCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJc2Vs ZWN0IEZCX0RFRkVSUkVEX0lPCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisgICAgICAgIHNlbGVj dCBEUk1fS01TX0ZCX0hFTFBFUgorCWhlbHAKKwkgIFRoaXMgaXMgYSBLTVMgZHJpdmVyIGZvciBH cmFpbiBNZWRpYSBHTTEyVTMyMCBiYXNlZCB1c2IgbWluaSB2aWRlbworCSAgcHJvamVjdG9ycywg c3VjaCBhcyB0aGUgQWNlciBDMTIwLgorCSAgU2F5IE0vWSB0byBhZGQgc3VwcG9ydCBmb3IgdGhl c2UgZGV2aWNlcyB2aWEgZHJtL2ttcyBpbnRlcmZhY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzQ0NzMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvTWFrZWZpbGUKQEAgLTAsMCArMSw3 IEBACitjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCitnbTEydTMyMC15IDo9CWdtMTJ1MzIw X2Rydi5vIGdtMTJ1MzIwX21vZGVzZXQubyBnbTEydTMyMF9jb25uZWN0b3IubyBcCisJCWdtMTJ1 MzIwX2VuY29kZXIubyBnbTEydTMyMF9tYWluLm8gZ20xMnUzMjBfZmIubyBcCisJCWdtMTJ1MzIw X2dlbS5vIGdtMTJ1MzIwX2RtYWJ1Zi5vCisKK29iai0kKENPTkZJR19EUk1fR00xMlUzMjApICs9 IGdtMTJ1MzIwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMy MF9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9jb25uZWN0 b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTMxOTE1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nvbm5lY3Rvci5j CkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgUmVkIEhh dCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhlIHVkbCBjb2RlLiBCYXNlZCBpbiBw YXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICogQ29weXJpZ2h0IChDKSAyMDEzIFZp YWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4KKyAqIENvcHlyaWdodCAo QykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29weXJpZ2h0 IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAqIENvcHly aWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+CisgKgor ICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5H IGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFp bHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hl bHBlci5oPgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorCisvKgorICogTm90ZSB0aGlzIGFz c3VtZXMgdGhpcyBkcml2ZXIgaXMgb25seSBldmVyIHVzZWQgd2l0aCB0aGUgQWNlciBDMTIwLCBp ZiB3ZQorICogYWRkIHN1cHBvcnQgZm9yIG90aGVyIGRldmljZXMgdGhlIHZlbmRvciBhbmQgbW9k ZWwgc2hvdWxkIGJlIHBhcmFtZXRlcml6ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWRpZCBnbTEy dTMyMF9lZGlkID0geworCS5oZWFkZXIJCT0geyAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZm LCAweGZmLCAweGZmLCAweDAwIH0sCisJLm1mZ19pZAkJPSB7IDB4MDQsIDB4NzIgfSwJLyogIkFD UiIgKi8KKwkucHJvZF9jb2RlCT0geyAweDIwLCAweGMxIH0sCS8qIEMxMjBoICovCisJLm1mZ193 ZWVrCT0gMSwKKwkubWZnX3llYXIJPSAxLAorCS52ZXJzaW9uCT0gMSwJCQkvKiBFRElEIDEuMyAq LworCS5yZXZpc2lvbgk9IDMsCQkJLyogRURJRCAxLjMgKi8KKwkuaW5wdXQJCT0gMHg4MCwJCQkv KiBEaWdpdGFsIGlucHV0ICovCisJLmZlYXR1cmVzCT0gMHgwMiwJCQkvKiBQcmVmIHRpbWluZyBp biBEVEQgMSAqLworCS5zdGFuZGFyZF90aW1pbmdzID0geyB7IDEsIDEgfSwgeyAxLCAxIH0sIHsg MSwgMSB9LCB7IDEsIDEgfSwKKwkJCSAgICAgIHsgMSwgMSB9LCB7IDEsIDEgfSwgeyAxLCAxIH0s IHsgMSwgMSB9IH0sCisJLmRldGFpbGVkX3RpbWluZ3MgPSB7IHsKKwkJLnBpeGVsX2Nsb2NrID0g MzM4MywKKwkJLyogaGFjdGl2ZSA9IDg1MiwgaGJsYW5rID0gMjU2ICovCisJCS5kYXRhLnBpeGVs X2RhdGEuaGFjdGl2ZV9sbyA9IDB4NTQsCisJCS5kYXRhLnBpeGVsX2RhdGEuaGJsYW5rX2xvID0g MHgwMCwKKwkJLmRhdGEucGl4ZWxfZGF0YS5oYWN0aXZlX2hibGFua19oaSA9IDB4MzEsCisJCS8q IHZhY3RpdmUgPSA0ODAsIHZibGFuayA9IDI4ICovCisJCS5kYXRhLnBpeGVsX2RhdGEudmFjdGl2 ZV9sbyA9IDB4ZTAsCisJCS5kYXRhLnBpeGVsX2RhdGEudmJsYW5rX2xvID0gMHgxYywKKwkJLmRh dGEucGl4ZWxfZGF0YS52YWN0aXZlX3ZibGFua19oaSA9IDB4MTAsCisJCS8qIGhzeW5jIG9mZnNl dCA0MCBwdyAxMjgsIHZzeW5jIG9mZnNldCAxIHB3IDQgKi8KKwkJLmRhdGEucGl4ZWxfZGF0YS5o c3luY19vZmZzZXRfbG8gPSAweDI4LAorCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3B1bHNlX3dp ZHRoX2xvID0gMHg4MCwKKwkJLmRhdGEucGl4ZWxfZGF0YS52c3luY19vZmZzZXRfcHVsc2Vfd2lk dGhfbG8gPSAweDE0LAorCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3ZzeW5jX29mZnNldF9wdWxz ZV93aWR0aF9oaSA9IDB4MDAsCisJCS8qIERpZ2l0YWwgc2VwYXJhdGUgc3luY3MsIGhzeW5jKywg dnN5bmMrICovCisJCS5kYXRhLnBpeGVsX2RhdGEubWlzYyA9IDB4MWUsCisJfSwgeworCQkucGl4 ZWxfY2xvY2sgPSAwLAorCQkuZGF0YS5vdGhlcl9kYXRhLnR5cGUgPSAweGZkLCAvKiBNb25pdG9y IHJhbmdlcyAqLworCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UubWluX3ZmcmVxID0gNTks CisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfdmZyZXEgPSA2MSwKKwkJLmRhdGEu b3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1pbl9oZnJlcV9raHogPSAyOSwKKwkJLmRhdGEub3RoZXJf ZGF0YS5kYXRhLnJhbmdlLm1heF9oZnJlcV9raHogPSAzMiwKKwkJLmRhdGEub3RoZXJfZGF0YS5k YXRhLnJhbmdlLnBpeGVsX2Nsb2NrX21oeiA9IDQsIC8qIDQwIE1IeiAqLworCQkuZGF0YS5vdGhl cl9kYXRhLmRhdGEucmFuZ2UuZmxhZ3MgPSAwLAorCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFu Z2UuZm9ybXVsYS5jdnQgPSB7CisJCQkweGEwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIw LCAweDIwIH0sCisJfSwgeworCQkucGl4ZWxfY2xvY2sgPSAwLAorCQkuZGF0YS5vdGhlcl9kYXRh LnR5cGUgPSAweGZjLCAvKiBNb2RlbCBzdHJpbmcgKi8KKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRh LnN0ci5zdHIgPSB7CisJCQknQycsICcxJywgJzInLCAnMCcsICdQJywgJ3InLCAnbycsICdqJywg J2UnLCAnYycsCisJCQkndCcsICdvJywgJ3InIH0sCisJfSwgeworCQkucGl4ZWxfY2xvY2sgPSAw LAorCQkuZGF0YS5vdGhlcl9kYXRhLnR5cGUgPSAweGZlLCAvKiBVbnNwZWNpZmllZCB0ZXh0IC8g cGFkZGluZyAqLworCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEuc3RyLnN0ciA9IHsKKwkJCSdcbics ICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCisJCQknICcsICcg JywgICcgJyB9LAorCX0gfSwKKwkuY2hlY2tzdW0gPSAweDQwLAorfTsKKworc3RhdGljIGludCBn bTEydTMyMF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlk cm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCAmZ20xMnUz MjBfZWRpZCk7CisJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsICZnbTEydTMy MF9lZGlkKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2dtMTJ1MzIw X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQorewor CWlmIChkcm1fZGV2aWNlX2lzX3VucGx1Z2dlZChjb25uZWN0b3ItPmRldikpCisJCXJldHVybiBj b25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVz X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlcioKK2dtMTJ1MzIwX2Jl c3Rfc2luZ2xlX2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlp bnQgZW5jX2lkID0gY29ubmVjdG9yLT5lbmNvZGVyX2lkc1swXTsKKworCXJldHVybiBkcm1fZW5j b2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBlbmNfaWQpOworfQorCitzdGF0aWMgaW50IGdtMTJ1 MzIwX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKKwkJCQkJICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJCSAgIHVpbnQ2 NF90IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29u bmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGdtMTJ1MzIwX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0 X21vZGVzID0gZ20xMnUzMjBfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBnbTEydTMyMF9i ZXN0X3NpbmdsZV9lbmNvZGVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVj dG9yX2Z1bmNzIGdtMTJ1MzIwX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9oZWxw ZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGdtMTJ1MzIwX2RldGVjdCwKKwkuZmlsbF9t b2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJv eSA9IGdtMTJ1MzIwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBnbTEydTMy MF9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAorfTsKKworaW50IGdtMTJ1MzIwX2Nvbm5lY3Rvcl9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwljb25uZWN0 b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwor CWlmICghY29ubmVjdG9yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9jb25uZWN0b3JfaW5p dChkZXYsIGNvbm5lY3RvciwgJmdtMTJ1MzIwX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9N T0RFX0NPTk5FQ1RPUl9Vbmtub3duKTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVj dG9yLCAmZ20xMnUzMjBfaGVscGVyX2Z1bmNzKTsKKworCWRybV9jb25uZWN0b3JfcmVnaXN0ZXIo Y29ubmVjdG9yKTsKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9y LCBlbmNvZGVyKTsKKworCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJh c2UsCisJCQkJICAgZGV2LT5tb2RlX2NvbmZpZy5kaXJ0eV9pbmZvX3Byb3BlcnR5LCAxKTsKKwor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1 MzIwX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2RtYWJ1Zi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWFkNGIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZG1hYnVmLmMKQEAgLTAs MCArMSwyODMgQEAKKy8qCisgKiBCYXNlZCBvbiB0aGUgdWRsIGRtYWJ1ZiBjb2RlOgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNCBUaGUgQ2hyb21pdW0gT1MgQXV0aG9ycworICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29y IG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cisj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCitzdHJ1Y3QgZ20xMnUzMjBfZHJtX2RtYWJ1Zl9h dHRhY2htZW50IHsKKwlzdHJ1Y3Qgc2dfdGFibGUgc2d0OworCWVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcjsKKwlib29sIGlzX21hcHBlZDsKK307CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfYXR0 YWNoX2RtYV9idWYoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCQkJICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0 cnVjdCBnbTEydTMyMF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKmdtMTJ1MzIwX2F0dGFjaDsKKwor CURSTV9ERUJVR19QUklNRSgiW0RFVjolc10gc2l6ZTolemRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ ZGV2KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCWdtMTJ1MzIwX2F0dGFjaCA9IGt6 YWxsb2Moc2l6ZW9mKCpnbTEydTMyMF9hdHRhY2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdtMTJ1 MzIwX2F0dGFjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnbTEydTMyMF9hdHRhY2gtPmRpciA9 IERNQV9OT05FOworCWF0dGFjaC0+cHJpdiA9IGdtMTJ1MzIwX2F0dGFjaDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9kZXRhY2hfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLAorCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCit7 CisJc3RydWN0IGdtMTJ1MzIwX2RybV9kbWFidWZfYXR0YWNobWVudCAqZ20xMnUzMjBfYXR0YWNo ID0gYXR0YWNoLT5wcml2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCisJaWYgKCFnbTEydTMy MF9hdHRhY2gpCisJCXJldHVybjsKKworCURSTV9ERUJVR19QUklNRSgiW0RFVjolc10gc2l6ZTol emRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5zaXplKTsK KworCXNndCA9ICZnbTEydTMyMF9hdHRhY2gtPnNndDsKKworCWlmIChnbTEydTMyMF9hdHRhY2gt PmRpciAhPSBETUFfTk9ORSkKKwkJZG1hX3VubWFwX3NnKGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwg c2d0LT5uZW50cywKKwkJCQlnbTEydTMyMF9hdHRhY2gtPmRpcik7CisKKwlzZ19mcmVlX3RhYmxl KHNndCk7CisJa2ZyZWUoZ20xMnUzMjBfYXR0YWNoKTsKKwlhdHRhY2gtPnByaXYgPSBOVUxMOwor fQorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpnbTEydTMyMF9tYXBfZG1hX2J1ZihzdHJ1Y3Qg ZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24gZGlyKQoreworCXN0cnVjdCBnbTEydTMyMF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKmdt MTJ1MzIwX2F0dGFjaCA9IGF0dGFjaC0+cHJpdjsKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVj dCAqb2JqID0gdG9fZ20xMnUzMjBfYm8oYXR0YWNoLT5kbWFidWYtPnByaXYpOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqcmQs ICp3cjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CisJ aW50IHBhZ2VfY291bnQ7CisJaW50IG5lbnRzLCByZXQ7CisKKwlEUk1fREVCVUdfUFJJTUUoIltE RVY6JXNdIHNpemU6JXpkIGRpcj0lZFxuIiwgZGV2X25hbWUoYXR0YWNoLT5kZXYpLAorCQkJYXR0 YWNoLT5kbWFidWYtPnNpemUsIGRpcik7CisKKwkvKiBqdXN0IHJldHVybiBjdXJyZW50IHNndCBp ZiBhbHJlYWR5IHJlcXVlc3RlZC4gKi8KKwlpZiAoZ20xMnUzMjBfYXR0YWNoLT5kaXIgPT0gZGly ICYmIGdtMTJ1MzIwX2F0dGFjaC0+aXNfbWFwcGVkKQorCQlyZXR1cm4gJmdtMTJ1MzIwX2F0dGFj aC0+c2d0OworCisJaWYgKCFvYmotPnBhZ2VzKSB7CisJCXJldCA9IGdtMTJ1MzIwX2dlbV9nZXRf cGFnZXMob2JqKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHBh Z2VzLlxuIik7CisJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CisJfQorCisJcGFnZV9jb3Vu dCA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOworCW9iai0+c2cgPSBkcm1fcHJpbWVfcGFn ZXNfdG9fc2cob2JqLT5wYWdlcywgcGFnZV9jb3VudCk7CisJaWYgKElTX0VSUihvYmotPnNnKSkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QuXG4iKTsKKwkJcmV0dXJuIEVS Ul9DQVNUKG9iai0+c2cpOworCX0KKworCXNndCA9ICZnbTEydTMyMF9hdHRhY2gtPnNndDsKKwor CXJldCA9IHNnX2FsbG9jX3RhYmxlKHNndCwgb2JqLT5zZy0+b3JpZ19uZW50cywgR0ZQX0tFUk5F TCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvYyBzZ3QuXG4iKTsK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOworCisJcmQgPSBvYmotPnNnLT5zZ2w7CisJd3IgPSBzZ3QtPnNnbDsKKwlmb3Ig KGkgPSAwOyBpIDwgc2d0LT5vcmlnX25lbnRzOyArK2kpIHsKKwkJc2dfc2V0X3BhZ2Uod3IsIHNn X3BhZ2UocmQpLCByZC0+bGVuZ3RoLCByZC0+b2Zmc2V0KTsKKwkJcmQgPSBzZ19uZXh0KHJkKTsK KwkJd3IgPSBzZ19uZXh0KHdyKTsKKwl9CisKKwlpZiAoZGlyICE9IERNQV9OT05FKSB7CisJCW5l bnRzID0gZG1hX21hcF9zZyhhdHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+b3JpZ19uZW50cywg ZGlyKTsKKwkJaWYgKCFuZW50cykgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHNnbCB3 aXRoIGlvbW11LlxuIik7CisJCQlzZ19mcmVlX3RhYmxlKHNndCk7CisJCQlzZ3QgPSBFUlJfUFRS KC1FSU8pOworCQkJZ290byBlcnJfdW5sb2NrOworCQl9CisJfQorCisJZ20xMnUzMjBfYXR0YWNo LT5pc19tYXBwZWQgPSB0cnVlOworCWdtMTJ1MzIwX2F0dGFjaC0+ZGlyID0gZGlyOworCWF0dGFj aC0+cHJpdiA9IGdtMTJ1MzIwX2F0dGFjaDsKKworZXJyX3VubG9jazoKKwltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gc2d0OworfQorCitzdGF0aWMgdm9pZCBnbTEy dTMyMF91bm1hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJ CQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlv biBkaXIpCit7CisJLyogTm90aGluZyB0byBkby4gKi8KKwlEUk1fREVCVUdfUFJJTUUoIltERVY6 JXNdIHNpemU6JXpkIGRpcjolZFxuIiwgZGV2X25hbWUoYXR0YWNoLT5kZXYpLAorCQkJYXR0YWNo LT5kbWFidWYtPnNpemUsIGRpcik7Cit9CisKK3N0YXRpYyB2b2lkICpnbTEydTMyMF9kbWFidWZf a21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZV9u dW0pCit7CisJLyogVE9ETyAqLworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpn bTEydTMyMF9kbWFidWZfa21hcF9hdG9taWMoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkJ CSB1bnNpZ25lZCBsb25nIHBhZ2VfbnVtKQoreworCS8qIFRPRE8gKi8KKworCXJldHVybiBOVUxM OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9kbWFidWZfa3VubWFwKHN0cnVjdCBkbWFfYnVm ICpkbWFfYnVmLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0sIHZvaWQgKmFkZHIpCit7 CisJLyogVE9ETyAqLworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9kbWFidWZfa3VubWFwX2F0 b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBhZ2Vf bnVtLAorCQkJCQkgIHZvaWQgKmFkZHIpCit7CisJLyogVE9ETyAqLworfQorCitzdGF0aWMgaW50 IGdtMTJ1MzIwX2RtYWJ1Zl9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAorCQkJCXN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8qIFRPRE8gKi8KKworCXJldHVybiAtRUlOVkFM OworfQorCitzdGF0aWMgc3RydWN0IGRtYV9idWZfb3BzIGdtMTJ1MzIwX2RtYWJ1Zl9vcHMgPSB7 CisJLmF0dGFjaAkJCT0gZ20xMnUzMjBfYXR0YWNoX2RtYV9idWYsCisJLmRldGFjaAkJCT0gZ20x MnUzMjBfZGV0YWNoX2RtYV9idWYsCisJLm1hcF9kbWFfYnVmCQk9IGdtMTJ1MzIwX21hcF9kbWFf YnVmLAorCS51bm1hcF9kbWFfYnVmCQk9IGdtMTJ1MzIwX3VubWFwX2RtYV9idWYsCisJLmttYXAJ CQk9IGdtMTJ1MzIwX2RtYWJ1Zl9rbWFwLAorCS5rbWFwX2F0b21pYwkJPSBnbTEydTMyMF9kbWFi dWZfa21hcF9hdG9taWMsCisJLmt1bm1hcAkJCT0gZ20xMnUzMjBfZG1hYnVmX2t1bm1hcCwKKwku a3VubWFwX2F0b21pYwkJPSBnbTEydTMyMF9kbWFidWZfa3VubWFwX2F0b21pYywKKwkubW1hcAkJ CT0gZ20xMnUzMjBfZG1hYnVmX21tYXAsCisJLnJlbGVhc2UJCT0gZHJtX2dlbV9kbWFidWZfcmVs ZWFzZSwKK307CisKK3N0cnVjdCBkbWFfYnVmICpnbTEydTMyMF9nZW1fcHJpbWVfZXhwb3J0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgaW50IGZsYWdzKQoreworCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZvKTsK KworCWV4cF9pbmZvLm9wcyA9ICZnbTEydTMyMF9kbWFidWZfb3BzOworCWV4cF9pbmZvLnNpemUg PSBvYmotPnNpemU7CisJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKKwlleHBfaW5mby5wcml2ID0g b2JqOworCisJcmV0dXJuIGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7Cit9CisKK3N0YXRpYyBp bnQgZ20xMnUzMjBfcHJpbWVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJIHNp emVfdCBzaXplLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnLAorCQkJCSBzdHJ1Y3QgZ20xMnUzMjBfZ2Vt X29iamVjdCAqKm9ial9wKQoreworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmo7CisJ aW50IG5wYWdlczsKKworCW5wYWdlcyA9IHNpemUgLyBQQUdFX1NJWkU7CisKKwkqb2JqX3AgPSBO VUxMOworCW9iaiA9IGdtMTJ1MzIwX2dlbV9hbGxvY19vYmplY3QoZGV2LCBucGFnZXMgKiBQQUdF X1NJWkUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9iai0+c2cgPSBzZzsK KwlvYmotPnBhZ2VzID0gZHJtX21hbGxvY19hYihucGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAq KSk7CisJaWYgKG9iai0+cGFnZXMgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIm9iaiBwYWdlcyBp cyBOVUxMICVkXG4iLCBucGFnZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkcm1fcHJp bWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhzZywgb2JqLT5wYWdlcywgTlVMTCwgbnBhZ2VzKTsK KworCSpvYmpfcCA9IG9iajsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnbTEydTMyMF9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJ CQkgc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCit7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoOworCXN0cnVjdCBzZ190YWJsZSAqc2c7CisJc3RydWN0IGdtMTJ1MzIwX2dlbV9v YmplY3QgKnVvYmo7CisJaW50IHJldDsKKworCS8qIG5lZWQgdG8gYXR0YWNoICovCisJZ2V0X2Rl dmljZShkZXYtPmRldik7CisJYXR0YWNoID0gZG1hX2J1Zl9hdHRhY2goZG1hX2J1ZiwgZGV2LT5k ZXYpOworCWlmIChJU19FUlIoYXR0YWNoKSkgeworCQlwdXRfZGV2aWNlKGRldi0+ZGV2KTsKKwkJ cmV0dXJuIEVSUl9DQVNUKGF0dGFjaCk7CisJfQorCisJZ2V0X2RtYV9idWYoZG1hX2J1Zik7CisK KwlzZyA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBETUFfQklESVJFQ1RJT05BTCk7 CisJaWYgKElTX0VSUihzZykpIHsKKwkJcmV0ID0gUFRSX0VSUihzZyk7CisJCWdvdG8gZmFpbF9k ZXRhY2g7CisJfQorCisJcmV0ID0gZ20xMnUzMjBfcHJpbWVfY3JlYXRlKGRldiwgZG1hX2J1Zi0+ c2l6ZSwgc2csICZ1b2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfdW5tYXA7CisKKwl1b2Jq LT5iYXNlLmltcG9ydF9hdHRhY2ggPSBhdHRhY2g7CisJdW9iai0+ZmxhZ3MgPSBHTTEyVTMyMF9C T19XQzsKKworCXJldHVybiAmdW9iai0+YmFzZTsKKworZmFpbF91bm1hcDoKKwlkbWFfYnVmX3Vu bWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBzZywgRE1BX0JJRElSRUNUSU9OQUwpOworZmFpbF9kZXRh Y2g6CisJZG1hX2J1Zl9kZXRhY2goZG1hX2J1ZiwgYXR0YWNoKTsKKwlkbWFfYnVmX3B1dChkbWFf YnVmKTsKKwlwdXRfZGV2aWNlKGRldi0+ZGV2KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmVmZjNhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2LmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0IEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSAiZ20xMnUzMjBfZHJ2LmgiCisKK3N0YXRpYyBp bnQgZ20xMnUzMjBfZHJpdmVyX3NldF9idXNpZChzdHJ1Y3QgZHJtX2RldmljZSAqZCwgc3RydWN0 IGRybV9tYXN0ZXIgKm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg dm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ20xMnUzMjBfZ2VtX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSBn bTEydTMyMF9nZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0g ZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGdtMTJ1MzIwX2RyaXZlcl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5v cGVuID0gZHJtX29wZW4sCisJLm1tYXAgPSBnbTEydTMyMF9kcm1fZ2VtX21tYXAsCisJLnBvbGwg PSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorCS51bmxvY2tlZF9pb2N0bAk9IGRybV9p b2N0bCwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwku Y29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5sbHNlZWsgPSBub29w X2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CisJLmRy aXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklN RSwKKwkubG9hZCA9IGdtMTJ1MzIwX2RyaXZlcl9sb2FkLAorCS51bmxvYWQgPSBnbTEydTMyMF9k cml2ZXJfdW5sb2FkLAorCS5zZXRfYnVzaWQgPSBnbTEydTMyMF9kcml2ZXJfc2V0X2J1c2lkLAor CisJLyogZ2VtIGhvb2tzICovCisJLmdlbV9mcmVlX29iamVjdCA9IGdtMTJ1MzIwX2dlbV9mcmVl X29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZnbTEydTMyMF9nZW1fdm1fb3BzLAorCisJLmR1bWJf Y3JlYXRlID0gZ20xMnUzMjBfZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IGdtMTJ1 MzIwX2dlbV9tbWFwLAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKwku Zm9wcyA9ICZnbTEydTMyMF9kcml2ZXJfZm9wcywKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBk cm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dl bV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBnbTEydTMyMF9nZW1f cHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfaW1wb3J0ID0gZ20xMnUzMjBfZ2VtX3ByaW1lX2lt cG9ydCwKKworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwku ZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBE UklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0 YXRpYyBpbnQgZ20xMnUzMjBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2UsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0 IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldjsKKwlpbnQgcjsKKworCS8qCisJICogVGhlIGdtMTJ1MzIwIHBy ZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtIGFzIDIgdXNiIG1hc3Mtc3RvcmFnZQorCSAqIGlu dGVyZmFjZXMsIGZvciB0aGUgc2Vjb25kIG9uZSB3ZSBwcm9jZWVkIHN1Y2Nlc3N1bGx5IHdpdGgg YmluZGluZywKKwkgKiBidXQgb3RoZXJ3aXNlIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoaW50ZXJm YWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCisJCXJldHVy biAwOworCisJZGV2ID0gZHJtX2Rldl9hbGxvYygmZHJpdmVyLCAmaW50ZXJmYWNlLT5kZXYpOwor CWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXIgPSBkcm1fZGV2X3JlZ2lzdGVyKGRl diwgKHVuc2lnbmVkIGxvbmcpdWRldik7CisJaWYgKHIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwl1 c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQg Z20xMnUzMjAgb24gbWlub3IgJWRcbiIsIGRldi0+cHJpbWFyeS0+aW5kZXgpOworCisJcmV0dXJu IDA7CisKK2Vycl9mcmVlOgorCWRybV9kZXZfdW5yZWYoZGV2KTsKKwlyZXR1cm4gcjsKK30KKwor c3RhdGljIHZvaWQgZ20xMnUzMjBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0 YShpbnRlcmZhY2UpOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWRybV9rbXNfaGVscGVy X3BvbGxfZGlzYWJsZShkZXYpOworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9hbGwoZGV2KTsK KwlnbTEydTMyMF9mYmRldl91bnBsdWcoZGV2KTsKKwlnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShk ZXYpOworCWRybV91bnBsdWdfZGV2KGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworaW50 IGdtMTJ1MzIwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgcG1fbWVz c2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50 ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWdtMTJ1MzIw X3N0b3BfZmJfdXBkYXRlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnbTEydTMyMF9yZXN1 bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCFkZXYpCisJCXJl dHVybiAwOworCisJZ20xMnUzMjBfc2V0X2Vjb21vZGUoZGV2KTsKKwlnbTEydTMyMF9zdGFydF9m Yl91cGRhdGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHVz Yl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgxZGUxLCAweGMxMDIp IH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3Rh dGljIHN0cnVjdCB1c2JfZHJpdmVyIGdtMTJ1MzIwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJnbTEy dTMyMCIsCisJLnByb2JlID0gZ20xMnUzMjBfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ20x MnUzMjBfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaWRfdGFibGUsCisjaWZkZWYgQ09O RklHX1BNCisJLnN1c3BlbmQgPSBnbTEydTMyMF9zdXNwZW5kLAorCS5yZXN1bWUgPSBnbTEydTMy MF9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9IGdtMTJ1MzIwX3Jlc3VtZSwKKyNlbmRpZgorfTsK KworbW9kdWxlX3VzYl9kcml2ZXIoZ20xMnUzMjBfZHJpdmVyKTsKK01PRFVMRV9BVVRIT1IoIkhh bnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BM Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAq IENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFJlZCBIYXQgSW5jLgorICoKKyAqIEJhc2VkIGluIHBh cnRzIG9uIHRoZSB1ZGwgY29kZS4gQmFzZWQgaW4gcGFydHMgb24gdGhlIGdtMTJ1MzIwIGZiIGRy aXZlcjoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBWaWFjaGVzbGF2IE51cm1la2hhbWl0b3YgPHNs YXZybkB5YW5kZXgucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUm9iZXJ0byBEZSBJb3JpcyA8 cm9iZXJ0b0B1bmJpdC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYXlhIEt1bWFyIDxqYXlh a3VtYXIubGttbEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQmVybmllIFRob21w c29uIDxiZXJuaWVAcGx1Z2FibGUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRv IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2Yg dGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgR00xMlUz MjBfRFJWX0gKKyNkZWZpbmUgR00xMlUzMjBfRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5o PgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4K KworI2RlZmluZSBEUklWRVJfTkFNRQkJImdtMTJ1MzIwIgorI2RlZmluZSBEUklWRVJfREVTQwkJ IkdyYWluIE1lZGlhIEdNMTJVMzIwIFVTQiBwcm9qZWN0b3IgZGlzcGxheSIKKyNkZWZpbmUgRFJJ VkVSX0RBVEUJCSIyMDE1MDEwNyIKKworI2RlZmluZSBEUklWRVJfTUFKT1IJCTAKKyNkZWZpbmUg RFJJVkVSX01JTk9SCQkwCisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKKworI2RlZmluZSBH TTEyVTMyMF9CT19DQUNIRUFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgR00xMlUzMjBfQk9fV0MJCSgx IDw8IDEpCisKKy8qCisgKiBUaGUgRExQIGhhcyBhbiBhY3R1YWwgd2lkdGggb2YgODU0IHBpeGVs cywgYnV0IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUKKyAqIG9mIDQsIGJyZWFraW5nIHRoaW5ncyBs ZWZ0IGFuZCByaWdodCwgc28gd2UgZXhwb3J0IGEgd2lkdGggb2YgODUyLgorICovCisjZGVmaW5l IEdNMTJVMzIwX1VTRVJfV0lEVEgJODUyCisjZGVmaW5lIEdNMTJVMzIwX1JFQUxfV0lEVEgJODU0 CisjZGVmaW5lIEdNMTJVMzIwX0hFSUdIVAkJNDgwCisKKyNkZWZpbmUgR00xMlUzMjBfQkxPQ0tf Q09VTlQJMjAKKworc3RydWN0IGdtMTJ1MzIwX2RldmljZTsKKworc3RydWN0IGdtMTJ1MzIwX2Zi ZGV2OworCitzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJ c3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CisJc3Ry dWN0IGdtMTJ1MzIwX2ZiZGV2ICpmYmRldjsKKwl1bnNpZ25lZCBjaGFyICpjbWRfYnVmOworCXVu c2lnbmVkIGNoYXIgKmRhdGFfYnVmW0dNMTJVMzIwX0JMT0NLX0NPVU5UXTsKKwlzdHJ1Y3Qgewor CQlib29sIHJ1bjsKKwkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOworCQlzdHJ1Y3Qg d29ya19zdHJ1Y3Qgd29yazsKKwkJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CisJCXN0cnVjdCBt dXRleCBsb2NrOworCQlzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiOworCQlpbnQgeDE7 CisJCWludCB4MjsKKwkJaW50IHkxOworCQlpbnQgeTI7CisJfSBmYl91cGRhdGU7Cit9OworCitz dHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7 CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICp2bWFwcGluZzsKKwlzdHJ1Y3Qgc2dfdGFi bGUgKnNnOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKyNkZWZpbmUgdG9fZ20xMnUzMjBf Ym8oeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0LCBiYXNlKQor CitzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgeworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg YmFzZTsKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworfTsKKworI2RlZmluZSB0 b19nbTEydTMyMF9mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVm ZmVyLCBiYXNlKQorCisvKiBtb2Rlc2V0ICovCitpbnQgZ20xMnUzMjBfbW9kZXNldF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9tb2Rlc2V0X2NsZWFudXAoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgZ20xMnUzMjBfY29ubmVjdG9yX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwor CitzdHJ1Y3QgZHJtX2VuY29kZXIgKmdtMTJ1MzIwX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKKworaW50IGdtMTJ1MzIwX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IGdtMTJ1MzIwX2RyaXZlcl91bmxvYWQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKK2ludCBnbTEydTMyMF9mYmRldl9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9mYmRldl9jbGVhbnVwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9mYmRldl91bnBsdWcoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKK2dtMTJ1MzIwX2ZiX3VzZXJf ZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwK KwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7CisKK2ludCBn bTEydTMyMF9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwor aW50IGdtMTJ1MzIwX2dlbV9tbWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkgICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZz ZXQpOworCitzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqCitnbTEydTMyMF9nZW1fYWxsb2Nf b2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKTsKK3ZvaWQgZ20xMnUz MjBfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7CitzdHJ1 Y3QgZG1hX2J1ZiAqZ20xMnUzMjBfZ2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpOwor c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnbTEydTMyMF9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOworCitpbnQg Z20xMnUzMjBfZ2VtX2dldF9wYWdlcyhzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKTsK K3ZvaWQgZ20xMnUzMjBfZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAq b2JqKTsKK2ludCBnbTEydTMyMF9nZW1fdm1hcChzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAq b2JqKTsKK3ZvaWQgZ20xMnUzMjBfZ2VtX3Z1bm1hcChzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVj dCAqb2JqKTsKK2ludCBnbTEydTMyMF9kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCBnbTEydTMyMF9nZW1fZmF1bHQoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKKwordm9pZCBnbTEy dTMyMF9mYl9tYXJrX2RpcnR5KHN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkg ICAgaW50IHgxLCBpbnQgeDIsIGludCB5MSwgaW50IHkyKTsKK3ZvaWQgZ20xMnUzMjBfc3RhcnRf ZmJfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9zdG9wX2Zi X3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBnbTEydTMyMF9zZXRfZWNvbW9k ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL2dt MTJ1MzIwL2dtMTJ1MzIwX2VuY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4wODVmMDViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIw L2dtMTJ1MzIwX2VuY29kZXIuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChD KSAyMDEyLTIwMTYgUmVkIEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhlIHVk bCBjb2RlLiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICogQ29w eXJpZ2h0IChDKSAyMDEzIFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5y dT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0 Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdt YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBw bHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUg Zm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgor I2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorCisvKiBkdW1teSBlbmNvZGVyICovCitzdGF0aWMg dm9pZCBnbTEydTMyMF9lbmNfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwlrZnJlZShlbmNvZGVyKTsKK30KKwor c3RhdGljIHZvaWQgZ20xMnUzMjBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfZW5jb2Rlcl9wcmVwYXJlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBf ZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0 aWMgdm9pZCBnbTEydTMyMF9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworfQorCitzdGF0aWMgdm9pZAorZ20x MnUzMjBfZW5jb2Rlcl9kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUp Cit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGdt MTJ1MzIwX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGdtMTJ1MzIwX2VuY29kZXJfZHBtcywK KwkucHJlcGFyZSA9IGdtMTJ1MzIwX2VuY29kZXJfcHJlcGFyZSwKKwkubW9kZV9zZXQgPSBnbTEy dTMyMF9lbmNvZGVyX21vZGVfc2V0LAorCS5jb21taXQgPSBnbTEydTMyMF9lbmNvZGVyX2NvbW1p dCwKKwkuZGlzYWJsZSA9IGdtMTJ1MzIwX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgZ20xMnUzMjBfZW5jX2Z1bmNzID0geworCS5k ZXN0cm95ID0gZ20xMnUzMjBfZW5jX2Rlc3Ryb3ksCit9OworCitzdHJ1Y3QgZHJtX2VuY29kZXIg KmdtMTJ1MzIwX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgZHJtX2VuY29kZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVuY29kZXIpCisJCXJldHVybiBO VUxMOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZnbTEydTMyMF9lbmNfZnVu Y3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKKwlkcm1fZW5jb2Rlcl9oZWxw ZXJfYWRkKGVuY29kZXIsICZnbTEydTMyMF9oZWxwZXJfZnVuY3MpOworCWVuY29kZXItPnBvc3Np YmxlX2NydGNzID0gMTsKKwlyZXR1cm4gZW5jb2RlcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIw L2dtMTJ1MzIwX2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyZGU1 YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9m Yi5jCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgUmVk IEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhlIHVkbCBjb2RlLiBCYXNlZCBp biBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICogQ29weXJpZ2h0IChDKSAyMDEz IFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4KKyAqIENvcHlyaWdo dCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29weXJp Z2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAqIENv cHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+Cisg KgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZ SU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5o PgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorCisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxw ZXIuaD4KKworc3RydWN0IGdtMTJ1MzIwX2ZiZGV2IHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBo ZWxwZXI7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyIGZiOworfTsKKwordm9pZCBnbTEy dTMyMF9mYl9tYXJrX2RpcnR5KHN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkg ICAgaW50IHgxLCBpbnQgeDIsIGludCB5MSwgaW50IHkyKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBmYi0+YmFzZS5kZXY7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAg PSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqb2xkX2Zi ID0gTlVMTDsKKwlib29sIHdha2V1cCA9IGZhbHNlOworCisJbXV0ZXhfbG9jaygmZ20xMnUzMjAt PmZiX3VwZGF0ZS5sb2NrKTsKKworCWlmIChnbTEydTMyMC0+ZmJfdXBkYXRlLmZiICE9IGZiKSB7 CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUueDEgPSB4MTsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS54 MiA9IHgyOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLnkxID0geTE7CisJCWdtMTJ1MzIwLT5mYl91 cGRhdGUueTIgPSB5MjsKKwkJb2xkX2ZiID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYjsKKwkJZ20x MnUzMjAtPmZiX3VwZGF0ZS5mYiA9IGZiOworCQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKCZn bTEydTMyMC0+ZmJfdXBkYXRlLmZiLT5iYXNlKTsKKwkJd2FrZXVwID0gdHJ1ZTsKKwl9IGVsc2Ug eworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLngxID0gbWluKGdtMTJ1MzIwLT5mYl91cGRhdGUueDEs IHgxKTsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS54MiA9IG1heChnbTEydTMyMC0+ZmJfdXBkYXRl LngyLCB4Mik7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUueTEgPSBtaW4oZ20xMnUzMjAtPmZiX3Vw ZGF0ZS55MSwgeTEpOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLnkyID0gbWF4KGdtMTJ1MzIwLT5m Yl91cGRhdGUueTIsIHkyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRh dGUubG9jayk7CisKKwlpZiAod2FrZXVwKQorCQl3YWtlX3VwKCZnbTEydTMyMC0+ZmJfdXBkYXRl LndhaXRxKTsKKworCWlmIChvbGRfZmIpCisJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZSgm b2xkX2ZiLT5iYXNlKTsKK30KKworc3RhdGljIGludCBnbTEydTMyMF9mYl9vcGVuKHN0cnVjdCBm Yl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZmJkZXYgKmZiZGV2 ID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZmJkZXYtPmZiLmJhc2Uu ZGV2OworCisJLyogSWYgdGhlIFVTQiBkZXZpY2UgaXMgZ29uZSwgd2UgZG9uJ3QgYWNjZXB0IG5l dyBvcGVucyAqLworCWlmIChkcm1fZGV2aWNlX2lzX3VucGx1Z2dlZChkZGV2KSkKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgZ20xMnUz MjBfZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSBk cm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0 X3BhciwKKwkuZmJfZmlsbHJlY3QgPSBkcm1fZmJfaGVscGVyX3N5c19maWxscmVjdCwKKwkuZmJf Y29weWFyZWEgPSBkcm1fZmJfaGVscGVyX3N5c19jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0g ZHJtX2ZiX2hlbHBlcl9zeXNfaW1hZ2VibGl0LAorCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9o ZWxwZXJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwku ZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKKwkuZmJfZGVidWdfZW50ZXIgPSBk cm1fZmJfaGVscGVyX2RlYnVnX2VudGVyLAorCS5mYl9kZWJ1Z19sZWF2ZSA9IGRybV9mYl9oZWxw ZXJfZGVidWdfbGVhdmUsCisJLmZiX29wZW4gPSBnbTEydTMyMF9mYl9vcGVuLAorfTsKKworc3Rh dGljIHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBnbTEydTMyMF9mYl9kZWZpbyA9IHsKKwkuZGVsYXkg PSBIWiAvIDMwLAorCS5kZWZlcnJlZF9pbyA9IGRybV9mYl9oZWxwZXJfZGVmZXJyZWRfaW8sCit9 OworCitzdGF0aWMgaW50IGdtMTJ1MzIwX3VzZXJfZnJhbWVidWZmZXJfZGlydHkoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZHJtX2ZiLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJ CQkJCSAgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKKwkJCQkJICAgc3RydWN0IGRy bV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCQkgICB1bnNpZ25lZCBudW1fY2xpcHMpCit7CisJc3Ry dWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyICpmYiA9IHRvX2dtMTJ1MzIwX2ZiKGRybV9mYik7CisJ aW50IHgxLCB4MiwgeTEsIHkyOworCisJaWYgKG51bV9jbGlwcyA9PSAwKQorCQlyZXR1cm4gMDsK KworCXgxID0gY2xpcHMtPngxOworCXgyID0gY2xpcHMtPngyOworCXkxID0gY2xpcHMtPnkxOwor CXkyID0gY2xpcHMtPnkyOworCisJd2hpbGUgKC0tbnVtX2NsaXBzKSB7CisJCWNsaXBzKys7CisJ CXgxID0gbWluX3QoaW50LCB4MSwgKGludCljbGlwcy0+eDEpOworCQl4MiA9IG1heF90KGludCwg eDIsIChpbnQpY2xpcHMtPngyKTsKKwkJeTEgPSBtaW5fdChpbnQsIHkxLCAoaW50KWNsaXBzLT55 MSk7CisJCXkyID0gbWF4X3QoaW50LCB5MiwgKGludCljbGlwcy0+eTIpOworCX0KKworCWdtMTJ1 MzIwX2ZiX21hcmtfZGlydHkoZmIsIHgxLCB4MiwgeTEsIHkyKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBnbTEydTMyMF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZHJtX2ZiKQoreworCXN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAq ZmIgPSB0b19nbTEydTMyMF9mYihkcm1fZmIpOworCisJaWYgKGZiLT5vYmopCisJCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZmYi0+b2JqLT5iYXNlKTsKKworCWRybV9mcmFt ZWJ1ZmZlcl9jbGVhbnVwKGRybV9mYik7CisJa2ZyZWUoZmIpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBnbTEydTMyMGZiX2Z1bmNzID0geworCS5kZXN0 cm95ID0gZ20xMnUzMjBfdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95LAorCS5kaXJ0eSA9IGdtMTJ1 MzIwX3VzZXJfZnJhbWVidWZmZXJfZGlydHksCit9OworCitzdGF0aWMgaW50CitnbTEydTMyMF9m cmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBnbTEy dTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICptb2RlX2NtZCwKKwkJCSAgc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaikKK3sKKwlp bnQgcmV0OworCisJZmItPm9iaiA9IG9iajsKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1 Y3QoJmZiLT5iYXNlLCBtb2RlX2NtZCk7CisJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2 LCAmZmItPmJhc2UsICZnbTEydTMyMGZiX2Z1bmNzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IGdtMTJ1MzIwZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCisJ CQkgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCit7CisJc3Ry dWN0IGdtMTJ1MzIwX2ZiZGV2ICpmYmRldiA9CisJCWNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVj dCBnbTEydTMyMF9mYmRldiwgaGVscGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJk ZXYtPmhlbHBlci5kZXY7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZHJtX2ZiOworCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyIG1vZGVfY21kOworCXN0 cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmo7CisJdWludDMyX3Qgc2l6ZTsKKwlpbnQgcmV0 ID0gMDsKKworCWlmIChzaXplcy0+c3VyZmFjZV9icHAgPT0gMjQpCisJCXNpemVzLT5zdXJmYWNl X2JwcCA9IDMyOworCisJbW9kZV9jbWQud2lkdGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKKwlt b2RlX2NtZC5oZWlnaHQgPSBzaXplcy0+c3VyZmFjZV9oZWlnaHQ7CisJbW9kZV9jbWQucGl0Y2hl c1swXSA9IG1vZGVfY21kLndpZHRoICogKChzaXplcy0+c3VyZmFjZV9icHAgKyA3KSAvIDgpOwor CisJbW9kZV9jbWQucGl4ZWxfZm9ybWF0ID0gZHJtX21vZGVfbGVnYWN5X2ZiX2Zvcm1hdChzaXpl cy0+c3VyZmFjZV9icHAsCisJCQkJCQkJICBzaXplcy0+c3VyZmFjZV9kZXB0aCk7CisKKwlzaXpl ID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdodDsKKwlzaXplID0gQUxJR04o c2l6ZSwgUEFHRV9TSVpFKTsKKworCW9iaiA9IGdtMTJ1MzIwX2dlbV9hbGxvY19vYmplY3QoZGV2 LCBzaXplKTsKKwlpZiAoIW9iaikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBnbTEydTMyMF9nZW1f dm1hcChvYmopOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxu Iik7CisJCWdvdG8gb3V0X2dmcmVlOworCX0KKworCWluZm8gPSBkcm1fZmJfaGVscGVyX2FsbG9j X2ZiaShoZWxwZXIpOworCWlmIChJU19FUlIoaW5mbykpIHsKKwkJcmV0ID0gUFRSX0VSUihpbmZv KTsKKwkJZ290byBvdXRfZ2ZyZWU7CisJfQorCWluZm8tPnBhciA9IGZiZGV2OworCisJcmV0ID0g Z20xMnUzMjBfZnJhbWVidWZmZXJfaW5pdChkZXYsICZmYmRldi0+ZmIsICZtb2RlX2NtZCwgb2Jq KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9kZXN0cm95X2ZiaTsKKworCWRybV9mYiA9ICZmYmRl di0+ZmIuYmFzZTsKKworCWZiZGV2LT5oZWxwZXIuZmIgPSBkcm1fZmI7CisKKwlzdHJjcHkoaW5m by0+Zml4LmlkLCAiZ20xMnUzMjBkcm1mYiIpOworCisJaW5mby0+c2NyZWVuX2Jhc2UgPSBmYmRl di0+ZmIub2JqLT52bWFwcGluZzsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOworCWluZm8t PmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmJkZXYtPmZiLm9iai0+dm1hcHBpbmc7 CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0NBTl9GT1JDRV9PVVRQ VVQ7CisJaW5mby0+ZmJvcHMgPSAmZ20xMnUzMjBfZmJfb3BzOworCWluZm8tPmZiZGVmaW8gPSAm Z20xMnUzMjBfZmJfZGVmaW87CisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBkcm1fZmIt PnBpdGNoZXNbMF0sIGRybV9mYi0+ZGVwdGgpOworCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5m bywgJmZiZGV2LT5oZWxwZXIsCisJCQkgICAgICAgc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJf aGVpZ2h0KTsKKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOworCisJRFJNX0RFQlVHX0tNUygi YWxsb2NhdGVkICVkeCVkIHZtYWwgJXBcbiIsCisJCSAgICAgIGRybV9mYi0+d2lkdGgsIGRybV9m Yi0+aGVpZ2h0LAorCQkgICAgICBmYmRldi0+ZmIub2JqLT52bWFwcGluZyk7CisKKwlyZXR1cm4g cmV0OworCitvdXRfZGVzdHJveV9mYmk6CisJZHJtX2ZiX2hlbHBlcl9yZWxlYXNlX2ZiaShoZWxw ZXIpOworb3V0X2dmcmVlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZm YmRldi0+ZmIub2JqLT5iYXNlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgZ20xMnUzMjBfZmJfaGVscGVyX2Z1bmNzID0g eworCS5mYl9wcm9iZSA9IGdtMTJ1MzIwZmJfY3JlYXRlLAorfTsKKworc3RhdGljIHZvaWQgZ20x MnUzMjBfZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVj dCBnbTEydTMyMF9mYmRldiAqZmJkZXYpCit7CisJZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2Zi aSgmZmJkZXYtPmhlbHBlcik7CisJZHJtX2ZiX2hlbHBlcl9yZWxlYXNlX2ZiaSgmZmJkZXYtPmhl bHBlcik7CisJZHJtX2ZiX2hlbHBlcl9maW5pKCZmYmRldi0+aGVscGVyKTsKKwlkcm1fZnJhbWVi dWZmZXJfdW5yZWdpc3Rlcl9wcml2YXRlKCZmYmRldi0+ZmIuYmFzZSk7CisJZHJtX2ZyYW1lYnVm ZmVyX2NsZWFudXAoJmZiZGV2LT5mYi5iYXNlKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j ZV91bmxvY2tlZCgmZmJkZXYtPmZiLm9iai0+YmFzZSk7Cit9CisKK2ludCBnbTEydTMyMF9mYmRl dl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2Rldmlj ZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAq ZmJkZXY7CisJaW50IHJldDsKKworCWZiZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdtMTJ1 MzIwX2ZiZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYmRldikKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlnbTEydTMyMC0+ZmJkZXYgPSBmYmRldjsKKworCWRybV9mYl9oZWxwZXJfcHJlcGFyZShk ZXYsICZmYmRldi0+aGVscGVyLCAmZ20xMnUzMjBfZmJfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9 IGRybV9mYl9oZWxwZXJfaW5pdChkZXYsICZmYmRldi0+aGVscGVyLCAxLCAxKTsKKwlpZiAocmV0 KQorCQlnb3RvIGZyZWU7CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nv bm5lY3RvcnMoJmZiZGV2LT5oZWxwZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmluaTsKKworCS8q IGRpc2FibGUgYWxsIHRoZSBwb3NzaWJsZSBvdXRwdXRzL2NydGNzIGJlZm9yZSBlbnRlcmluZyBL TVMgbW9kZSAqLworCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CisK KwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKCZmYmRldi0+aGVscGVyLCAzMik7 CisJaWYgKHJldCkKKwkJZ290byBmaW5pOworCisJcmV0dXJuIDA7CisKK2Zpbmk6CisJZHJtX2Zi X2hlbHBlcl9maW5pKCZmYmRldi0+aGVscGVyKTsKK2ZyZWU6CisJa2ZyZWUoZmJkZXYpOworCXJl dHVybiByZXQ7Cit9CisKK3ZvaWQgZ20xMnUzMjBfZmJkZXZfY2xlYW51cChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKworCWlmICghZ20xMnUzMjAtPmZiZGV2KQorCQlyZXR1cm47CisKKwlnbTEy dTMyMF9mYmRldl9kZXN0cm95KGRldiwgZ20xMnUzMjAtPmZiZGV2KTsKKwlrZnJlZShnbTEydTMy MC0+ZmJkZXYpOworCWdtMTJ1MzIwLT5mYmRldiA9IE5VTEw7Cit9CisKK3ZvaWQgZ20xMnUzMjBf ZmJkZXZfdW5wbHVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIw X2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFnbTEydTMyMC0+ ZmJkZXYpCisJCXJldHVybjsKKworCWRybV9mYl9oZWxwZXJfdW5saW5rX2ZiaSgmZ20xMnUzMjAt PmZiZGV2LT5oZWxwZXIpOworfQorCitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKK2dtMTJ1MzIw X2ZiX3VzZXJfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9k ZV9jbWQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGdtMTJ1MzIw X2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0OworCXVpbnQzMl90IHNpemU7CisKKwlvYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOworCWlmIChv YmogPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlzaXplID0gbW9kZV9j bWQtPnBpdGNoZXNbMF0gKiBtb2RlX2NtZC0+aGVpZ2h0OworCXNpemUgPSBBTElHTihzaXplLCBQ QUdFX1NJWkUpOworCisJaWYgKHNpemUgPiBvYmotPnNpemUpIHsKKwkJRFJNX0VSUk9SKCJvYmpl Y3Qgc2l6ZSBub3Qgc3VmZmljaWVudCBmb3IgZmIgJWQgJXp1ICVkICVkXG4iLAorCQkJICBzaXpl LCBvYmotPnNpemUsIG1vZGVfY21kLT5waXRjaGVzWzBdLAorCQkJICBtb2RlX2NtZC0+aGVpZ2h0 KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJZmIgPSBremFsbG9jKHNpemVv ZigqZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmIgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisKKwlyZXQgPSBnbTEydTMyMF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgZmIsIG1v ZGVfY21kLCB0b19nbTEydTMyMF9ibyhvYmopKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGZiKTsK KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCXJldHVybiAmZmItPmJhc2U7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZ2VtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDY3ODRiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9nbTEydTMyMC9nbTEydTMyMF9nZW0uYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHly aWdodCAoQykgMjAxMi0yMDE2IFJlZCBIYXQgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rv cnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4 L3NobWVtX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCitzdHJ1Y3QgZ20xMnUz MjBfZ2VtX29iamVjdCAqCitnbTEydTMyMF9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpv Ymo7CisKKwlvYmogPSBremFsbG9jKHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG9i aiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChkcm1fZ2VtX29iamVjdF9pbml0KGRl diwgJm9iai0+YmFzZSwgc2l6ZSkgIT0gMCkgeworCQlrZnJlZShvYmopOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlvYmotPmZsYWdzID0gR00xMlUzMjBfQk9fQ0FDSEVBQkxFOworCXJldHVybiBv Ymo7Cit9CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgdWludDY0X3Qgc2l6ZSwg dWludDMyX3QgKmhhbmRsZV9wKQoreworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmo7 CisJaW50IHJldDsKKwl1MzIgaGFuZGxlOworCisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9T SVpFKTsKKworCW9iaiA9IGdtMTJ1MzIwX2dlbV9hbGxvY19vYmplY3QoZGV2LCBzaXplKTsKKwlp ZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZHJtX2dlbV9oYW5k bGVfY3JlYXRlKGZpbGUsICZvYmotPmJhc2UsICZoYW5kbGUpOworCWlmIChyZXQpIHsKKwkJZHJt X2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5iYXNlKTsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5i YXNlKTsKKwkqaGFuZGxlX3AgPSBoYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHVwZGF0ZV92bV9jYWNoZV9hdHRyKHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmosCisJ CQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCURSTV9ERUJVR19LTVMoImZsYWdz ID0gMHgleFxuIiwgb2JqLT5mbGFncyk7CisKKwkvKiBub24tY2FjaGVhYmxlIGFzIGRlZmF1bHQu ICovCisJaWYgKG9iai0+ZmxhZ3MgJiBHTTEyVTMyMF9CT19DQUNIRUFCTEUpIHsKKwkJdm1hLT52 bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOworCX0gZWxzZSBp ZiAob2JqLT5mbGFncyAmIEdNMTJVMzIwX0JPX1dDKSB7CisJCXZtYS0+dm1fcGFnZV9wcm90ID0K KwkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7 CisJfSBlbHNlIHsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPQorCQkJcGdwcm90X25vbmNhY2hlZCh2 bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpKTsKKwl9Cit9CisKK2ludCBnbTEydTMyMF9k dW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCWFyZ3MtPnBpdGNo ID0gYXJncy0+d2lkdGggKiBESVZfUk9VTkRfVVAoYXJncy0+YnBwLCA4KTsKKwlhcmdzLT5zaXpl ID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisJcmV0dXJuIGdtMTJ1MzIwX2dlbV9jcmVh dGUoZmlsZSwgZGV2LAorCQkJICAgICAgYXJncy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7Cit9CisK K2ludCBnbTEydTMyMF9kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmls cCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdm1hLT52bV9mbGFncyAmPSB+ Vk1fUEZOTUFQOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7CisKKwl1cGRhdGVfdm1f Y2FjaGVfYXR0cih0b19nbTEydTMyMF9ibyh2bWEtPnZtX3ByaXZhdGVfZGF0YSksIHZtYSk7CisK KwlyZXR1cm4gcmV0OworfQorCitpbnQgZ20xMnUzMjBfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBf Z2VtX29iamVjdCAqb2JqID0gdG9fZ20xMnUzMjBfYm8odm1hLT52bV9wcml2YXRlX2RhdGEpOwor CXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGludCBwYWdlX29mZnNldDsKKwlpbnQgcmV0 ID0gMDsKKworCXBhZ2Vfb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRy ZXNzIC0gdm1hLT52bV9zdGFydCkgPj4KKwkJUEFHRV9TSElGVDsKKworCWlmICghb2JqLT5wYWdl cykKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKworCXBhZ2UgPSBvYmotPnBhZ2VzW3BhZ2Vf b2Zmc2V0XTsKKwlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsICh1bnNpZ25lZCBsb25nKXZtZi0+ dmlydHVhbF9hZGRyZXNzLCBwYWdlKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVBR0FJTjoK KwljYXNlIDA6CisJY2FzZSAtRVJFU1RBUlRTWVM6CisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7 CisJY2FzZSAtRU5PTUVNOgorCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCWRlZmF1bHQ6CisJCXJl dHVybiBWTV9GQVVMVF9TSUdCVVM7CisJfQorfQorCitpbnQgZ20xMnUzMjBfZ2VtX2dldF9wYWdl cyhzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBwYWdlICoqcGFn ZXM7CisKKwlpZiAob2JqLT5wYWdlcykKKwkJcmV0dXJuIDA7CisKKwlwYWdlcyA9IGRybV9nZW1f Z2V0X3BhZ2VzKCZvYmotPmJhc2UpOworCWlmIChJU19FUlIocGFnZXMpKQorCQlyZXR1cm4gUFRS X0VSUihwYWdlcyk7CisKKwlvYmotPnBhZ2VzID0gcGFnZXM7CisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCBnbTEydTMyMF9nZW1fcHV0X3BhZ2VzKHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpv YmopCit7CisJaWYgKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKSB7CisJCWRybV9mcmVlX2xhcmdl KG9iai0+cGFnZXMpOworCQlvYmotPnBhZ2VzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWRy bV9nZW1fcHV0X3BhZ2VzKCZvYmotPmJhc2UsIG9iai0+cGFnZXMsIGZhbHNlLCBmYWxzZSk7CisJ b2JqLT5wYWdlcyA9IE5VTEw7Cit9CisKK2ludCBnbTEydTMyMF9nZW1fdm1hcChzdHJ1Y3QgZ20x MnUzMjBfZ2VtX29iamVjdCAqb2JqKQoreworCWludCBwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNp emUgLyBQQUdFX1NJWkU7CisJaW50IHJldDsKKworCWlmIChvYmotPmJhc2UuaW1wb3J0X2F0dGFj aCkgeworCQlvYmotPnZtYXBwaW5nID0gZG1hX2J1Zl92bWFwKG9iai0+YmFzZS5pbXBvcnRfYXR0 YWNoLT5kbWFidWYpOworCQlpZiAoIW9iai0+dm1hcHBpbmcpCisJCQlyZXR1cm4gLUVOT01FTTsK KwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gZ20xMnUzMjBfZ2VtX2dldF9wYWdlcyhvYmopOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlvYmotPnZtYXBwaW5nID0gdm1hcChvYmotPnBh Z2VzLCBwYWdlX2NvdW50LCAwLCBQQUdFX0tFUk5FTCk7CisJaWYgKCFvYmotPnZtYXBwaW5nKQor CQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnbTEydTMyMF9nZW1fdnVu bWFwKHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+YmFzZS5p bXBvcnRfYXR0YWNoKSB7CisJCWRtYV9idWZfdnVubWFwKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNo LT5kbWFidWYsIG9iai0+dm1hcHBpbmcpOworCQlyZXR1cm47CisJfQorCisJdnVubWFwKG9iai0+ dm1hcHBpbmcpOworCisJZ20xMnUzMjBfZ2VtX3B1dF9wYWdlcyhvYmopOworfQorCit2b2lkIGdt MTJ1MzIwX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCit7 CisJc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaiA9IHRvX2dtMTJ1MzIwX2JvKGdlbV9v YmopOworCisJaWYgKG9iai0+dm1hcHBpbmcpCisJCWdtMTJ1MzIwX2dlbV92dW5tYXAob2JqKTsK KworCWlmIChnZW1fb2JqLT5pbXBvcnRfYXR0YWNoKSB7CisJCWRybV9wcmltZV9nZW1fZGVzdHJv eShnZW1fb2JqLCBvYmotPnNnKTsKKwkJcHV0X2RldmljZShnZW1fb2JqLT5kZXYtPmRldik7CisJ fQorCisJaWYgKG9iai0+cGFnZXMpCisJCWdtMTJ1MzIwX2dlbV9wdXRfcGFnZXMob2JqKTsKKwor CWRybV9nZW1fZnJlZV9tbWFwX29mZnNldChnZW1fb2JqKTsKK30KKworLyogdGhlIGR1bWIgaW50 ZXJmYWNlIGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBHRU0gc3RyYWlnaHQgTU1BUAorICAgaW50ZXJm YWNlLCBpdCBleHBlY3RzIHRvIGRvIE1NQVAgb24gdGhlIGRybSBmZCwgbGlrZSBub3JtYWwgKi8K K2ludCBnbTEydTMyMF9nZW1fbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldCkK K3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqZ29iajsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iajsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211 dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFuZGxlKTsKKwlpZiAo b2JqID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCWdv YmogPSB0b19nbTEydTMyMF9ibyhvYmopOworCisJcmV0ID0gZ20xMnUzMjBfZ2VtX2dldF9wYWdl cyhnb2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9t bWFwX29mZnNldChvYmopOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJKm9mZnNldCA9IGRy bV92bWFfbm9kZV9vZmZzZXRfYWRkcigmZ29iai0+YmFzZS52bWFfbm9kZSk7CisKK291dDoKKwlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZ29iai0+YmFzZSk7Cit1bmxvY2s6CisJbXV0ZXhf dW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMgYi9kcml2ZXJzL2dwdS9k cm0vZ20xMnUzMjAvZ20xMnUzMjBfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmMyOGQxMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfbWFpbi5jCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogQ29weXJpZ2h0IChD KSAyMDEyLTIwMTYgUmVkIEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhlIHVk bCBjb2RlLiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICogQ29w eXJpZ2h0IChDKSAyMDEzIFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5y dT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0 Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdt YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBw bHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUg Zm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1 ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlICJnbTEydTMyMF9kcnYuaCIKKworc3RhdGlj IGJvb2wgZWNvX21vZGU7Cittb2R1bGVfcGFyYW0oZWNvX21vZGUsIGJvb2wsIDA2NDQpOworTU9E VUxFX1BBUk1fREVTQyhlY29fbW9kZSwgIlR1cm4gb24gRWNvIG1vZGUgKGxlc3MgYnJpZ2h0LCBt b3JlIHNpbGVudCkiKTsKKworI2RlZmluZSBNSVNDX1JDVl9FUFQJCQkxCisjZGVmaW5lIERBVEFf UkNWX0VQVAkJCTIKKyNkZWZpbmUgREFUQV9TTkRfRVBUCQkJMworI2RlZmluZSBNSVNDX1NORF9F UFQJCQk0CisKKyNkZWZpbmUgREFUQV9CTE9DS19IRUFERVJfU0laRQkJODQKKyNkZWZpbmUgREFU QV9CTE9DS19DT05URU5UX1NJWkUJCTY0NTEyCisjZGVmaW5lIERBVEFfQkxPQ0tfRk9PVEVSX1NJ WkUJCTIwCisjZGVmaW5lIERBVEFfQkxPQ0tfU0laRQkJCShEQVRBX0JMT0NLX0hFQURFUl9TSVpF ICsgXAorCQkJCQkgREFUQV9CTE9DS19DT05URU5UX1NJWkUgKyBcCisJCQkJCSBEQVRBX0JMT0NL X0ZPT1RFUl9TSVpFKQorI2RlZmluZSBEQVRBX0xBU1RfQkxPQ0tfQ09OVEVOVF9TSVpFCTQwMzIK KyNkZWZpbmUgREFUQV9MQVNUX0JMT0NLX1NJWkUJCShEQVRBX0JMT0NLX0hFQURFUl9TSVpFICsg XAorCQkJCQkgREFUQV9MQVNUX0JMT0NLX0NPTlRFTlRfU0laRSArIFwKKwkJCQkJIERBVEFfQkxP Q0tfRk9PVEVSX1NJWkUpCisKKyNkZWZpbmUgQ01EX1NJWkUJCQkzMQorI2RlZmluZSBSRUFEX1NU QVRVU19TSVpFCQkxMworI2RlZmluZSBNSVNDX1ZBTFVFX1NJWkUJCQk0CisKKyNkZWZpbmUgQ01E X1RJTUVPVVQJCQltc2Vjc190b19qaWZmaWVzKDIwMCkKKyNkZWZpbmUgREFUQV9USU1FT1VUCQkJ bXNlY3NfdG9famlmZmllcygxMDAwKQorI2RlZmluZSBJRExFX1RJTUVPVVQJCQltc2Vjc190b19q aWZmaWVzKDIwMDApCisjZGVmaW5lIEZJUlNUX0ZSQU1FX1RJTUVPVVQJCW1zZWNzX3RvX2ppZmZp ZXMoMjAwMCkKKworI2RlZmluZSBNSVNDX1JFUV9HRVRfU0VUX0VDT19BCQkweGZmCisjZGVmaW5l IE1JU0NfUkVRX0dFVF9TRVRfRUNPX0IJCTB4MzUKKy8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgb25j ZSBldmVydCBzZWNvbmQsIHdpdGggd2l0aCBhcmcgZCA9IDEsIG90aGVycyAwICovCisjZGVmaW5l IE1JU0NfUkVRX1VOS05PV04xX0EJCTB4ZmYKKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjFfQgkJ MHgzOAorLyogV2luZG93cyBkcml2ZXIgZG9lcyB0aGlzIG9uIGluaXQsIHdpdGggYXJnIGEsIGIg PSAwLCBjID0gMHhhMCwgZCA9IDQgKi8KKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjJfQQkJMHhh NQorI2RlZmluZSBNSVNDX1JFUV9VTktOT1dOMl9CCQkweDAwCisKK3N0YXRpYyBjb25zdCBjaGFy IGNtZF9kYXRhW0NNRF9TSVpFXSA9IHsKKwkweDU1LCAweDUzLCAweDQyLCAweDQzLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLAorCTB4NjgsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MTAsIDB4ZmYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHg4MCwgMHgw MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0 aWMgY29uc3QgY2hhciBjbWRfZHJhd1tDTURfU0laRV0gPSB7CisJMHg1NSwgMHg1MywgMHg0Miwg MHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDEwLCAweGZlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZDEsIDB4 MDUsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgY21kX21pc2NbQ01EX1NJWkVdID0geworCTB4NTUs IDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwg MHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgxMCwgMHhmZCwKKwkweDAwLCAweDAwLCAweDAwLCAw eGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGRhdGFfYmxvY2tfaGVhZGVy W0RBVEFfQkxPQ0tfSEVBREVSX1NJWkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGZiLCAweDE0LCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDQsIDB4MTUsIDB4MDAsIDB4MDAsIDB4 ZmMsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhkYgorfTsKKworc3RhdGljIGNv bnN0IGNoYXIgZGF0YV9sYXN0X2Jsb2NrX2hlYWRlcltEQVRBX0JMT0NLX0hFQURFUl9TSVpFXSA9 IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsCisJMHhmYiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkw eDJhLCAweDAwLCAweDIwLCAweDAwLCAweGMwLCAweDBmLCAweDAwLCAweDAwLAorCTB4MDEsIDB4 MDAsIDB4MDAsIDB4ZDcKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGRhdGFfYmxvY2tfZm9vdGVy W0RBVEFfQkxPQ0tfRk9PVEVSX1NJWkVdID0geworCTB4ZmIsIDB4MTQsIDB4MDIsIDB4MjAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDAwLCAweDRmCit9OworCitzdGF0aWMgaW50 IGdtMTJ1MzIwX3VzYl9hbGxvYyhzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKK3sK KwlpbnQgaSwgYmxvY2tfc2l6ZTsKKwljb25zdCBjaGFyICpoZHI7CisKKwlnbTEydTMyMC0+Y21k X2J1ZiA9IGttYWxsb2MoQ01EX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZ20xMnUzMjAtPmNt ZF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IEdNMTJVMzIwX0JM T0NLX0NPVU5UOyBpKyspIHsKKwkJaWYgKGkgPT0gR00xMlUzMjBfQkxPQ0tfQ09VTlQgLSAxKSB7 CisJCQlibG9ja19zaXplID0gREFUQV9MQVNUX0JMT0NLX1NJWkU7CisJCQloZHIgPSBkYXRhX2xh c3RfYmxvY2tfaGVhZGVyOworCQl9IGVsc2UgeworCQkJYmxvY2tfc2l6ZSA9IERBVEFfQkxPQ0tf U0laRTsKKwkJCWhkciA9IGRhdGFfYmxvY2tfaGVhZGVyOworCQl9CisKKwkJZ20xMnUzMjAtPmRh dGFfYnVmW2ldID0ga3phbGxvYyhibG9ja19zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFnbTEy dTMyMC0+ZGF0YV9idWZbaV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkoZ20xMnUz MjAtPmRhdGFfYnVmW2ldLCBoZHIsIERBVEFfQkxPQ0tfSEVBREVSX1NJWkUpOworCQltZW1jcHko Z20xMnUzMjAtPmRhdGFfYnVmW2ldICsKKwkJCQkoYmxvY2tfc2l6ZSAtIERBVEFfQkxPQ0tfRk9P VEVSX1NJWkUpLAorCQkgICAgICAgZGF0YV9ibG9ja19mb290ZXIsIERBVEFfQkxPQ0tfRk9PVEVS X1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF91c2Jf ZnJlZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBHTTEyVTMyMF9CTE9DS19DT1VOVDsgaSsrKQorCQlrZnJlZShnbTEydTMy MC0+ZGF0YV9idWZbaV0pOworCisJa2ZyZWUoZ20xMnUzMjAtPmNtZF9idWYpOworfQorCitzdGF0 aWMgaW50IGdtMTJ1MzIwX21pc2NfcmVxdWVzdChzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEy dTMyMCwKKwkJCQkgdTggcmVxX2EsIHU4IHJlcV9iLAorCQkJCSB1OCBhcmdfYSwgdTggYXJnX2Is IHU4IGFyZ19jLCB1OCBhcmdfZCkKK3sKKwlpbnQgcmV0LCBsZW47CisJdTggKmJ1ZiwgdmFsOwor CisJYnVmID0ga21hbGxvYyhDTURfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJl dHVybiAtRU5PTUVNOworCisJbWVtY3B5KGJ1ZiwgJmNtZF9taXNjLCBDTURfU0laRSk7CisJYnVm WzIwXSA9IHJlcV9hOworCWJ1ZlsyMV0gPSByZXFfYjsKKwlidWZbMjJdID0gYXJnX2E7CisJYnVm WzIzXSA9IGFyZ19iOworCWJ1ZlsyNF0gPSBhcmdfYzsKKwlidWZbMjVdID0gYXJnX2Q7CisKKwkv KiBTZW5kIHJlcXVlc3QgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJ CQkgICB1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIE1JU0NfU05EX0VQVCksCisJCQkg ICBidWYsIENNRF9TSVpFLCAmbGVuLCBDTURfVElNRU9VVCk7CisJaWYgKHJldCB8fCBsZW4gIT0g Q01EX1NJWkUpIHsKKwkJZGV2X2VycigmZ20xMnUzMjAtPnVkZXYtPmRldiwgIk1pc2MuIHJlcS4g ZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gbGVhdmU7CisJfQorCisJ LyogUmVhZCB2YWx1ZSAqLworCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJ CSAgIHVzYl9yY3ZidWxrcGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19SQ1ZfRVBUKSwKKwkJCSAg IGJ1ZiwgTUlTQ19WQUxVRV9TSVpFLCAmbGVuLCBEQVRBX1RJTUVPVVQpOworCWlmIChyZXQgfHwg bGVuICE9IE1JU0NfVkFMVUVfU0laRSkgeworCQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2 LCAiTWlzYy4gdmFsdWUgZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8g bGVhdmU7CisJfQorCXZhbCA9IGJ1ZlswXTsKKworCS8qIFJlYWQgc3RhdHVzICovCisJcmV0ID0g dXNiX2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1 MzIwLT51ZGV2LCBNSVNDX1JDVl9FUFQpLAorCQkJICAgYnVmLCBSRUFEX1NUQVRVU19TSVpFLCAm bGVuLCBDTURfVElNRU9VVCk7CisJaWYgKHJldCB8fCBsZW4gIT0gUkVBRF9TVEFUVVNfU0laRSkg eworCQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4gc3RhdHVzIGVycm9yICVk XG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IHZh bDsKK2xlYXZlOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBnbTEydTMy MF8zMmJwcF90b18yNGJwcF9wYWNrZWQodTggKmRzdCwgdTggKnNyYywgaW50IGxlbikKK3sKKwl3 aGlsZSAobGVuLS0pIHsKKwkJKmRzdCsrID0gKnNyYysrOworCQkqZHN0KysgPSAqc3JjKys7CisJ CSpkc3QrKyA9ICpzcmMrKzsKKwkJc3JjKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBnbTEydTMy MF9jb3B5X2ZiX3RvX2Jsb2NrcyhzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiLAorCQkJ CSAgICAgICBpbnQgeDEsIGludCB4MiwgaW50IHkxLCBpbnQgeTIpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGZiLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEy dTMyMCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGJsb2NrLCBkc3Rfb2Zmc2V0LCBsZW4sIHJl bWFpbiwgcmV0OworCXU4ICpzcmM7CisKKwlpZiAoZmItPm9iai0+YmFzZS5pbXBvcnRfYXR0YWNo KSB7CisJCXJldCA9IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcygKKwkJCWZiLT5vYmotPmJhc2Uu aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAocmV0KSB7CisJ CQlEUk1fRVJST1IoImRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyBlcnI6ICVkXG4iLCByZXQpOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKCFmYi0+b2JqLT52bWFwcGluZykgeworCQlyZXQg PSBnbTEydTMyMF9nZW1fdm1hcChmYi0+b2JqKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gdm1hcCBmYjogJWRcbiIsIHJldCk7CisJCQlnb3RvIGVuZF9jcHVfYWNjZXNz OworCQl9CisJfQorCisJc3JjID0gZmItPm9iai0+dm1hcHBpbmcgKyB5MSAqIGZiLT5iYXNlLnBp dGNoZXNbMF0gKyB4MSAqIDQ7CisKKwl4MSArPSAoR00xMlUzMjBfUkVBTF9XSURUSCAtIEdNMTJV MzIwX1VTRVJfV0lEVEgpIC8gMjsKKwl4MiArPSAoR00xMlUzMjBfUkVBTF9XSURUSCAtIEdNMTJV MzIwX1VTRVJfV0lEVEgpIC8gMjsKKworCWZvciAoOyB5MSA8IHkyOyB5MSsrKSB7CisJCXJlbWFp biA9IDA7CisJCWxlbiA9ICh4MiAtIHgxKSAqIDM7CisJCWRzdF9vZmZzZXQgPSAoeTEgKiBHTTEy VTMyMF9SRUFMX1dJRFRIICsgeDEpICogMzsKKwkJYmxvY2sgPSBkc3Rfb2Zmc2V0IC8gREFUQV9C TE9DS19DT05URU5UX1NJWkU7CisJCWRzdF9vZmZzZXQgJT0gREFUQV9CTE9DS19DT05URU5UX1NJ WkU7CisKKwkJaWYgKChkc3Rfb2Zmc2V0ICsgbGVuKSA+IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpF KSB7CisJCQlyZW1haW4gPSBkc3Rfb2Zmc2V0ICsgbGVuIC0gREFUQV9CTE9DS19DT05URU5UX1NJ WkU7CisJCQlsZW4gPSBEQVRBX0JMT0NLX0NPTlRFTlRfU0laRSAtIGRzdF9vZmZzZXQ7CisJCX0K KworCQlkc3Rfb2Zmc2V0ICs9IERBVEFfQkxPQ0tfSEVBREVSX1NJWkU7CisJCWxlbiAvPSAzOwor CisJCWdtMTJ1MzIwXzMyYnBwX3RvXzI0YnBwX3BhY2tlZCgKKwkJCWdtMTJ1MzIwLT5kYXRhX2J1 ZltibG9ja10gKyBkc3Rfb2Zmc2V0LAorCQkJc3JjLCBsZW4pOworCisJCWlmIChyZW1haW4pIHsK KwkJCWJsb2NrKys7CisJCQlkc3Rfb2Zmc2V0ID0gREFUQV9CTE9DS19IRUFERVJfU0laRTsKKwkJ CWdtMTJ1MzIwXzMyYnBwX3RvXzI0YnBwX3BhY2tlZCgKKwkJCQlnbTEydTMyMC0+ZGF0YV9idWZb YmxvY2tdICsgZHN0X29mZnNldCwKKwkJCQlzcmMgKyBsZW4gKiA0LCByZW1haW4gLyAzKTsKKwkJ fQorCQlzcmMgKz0gZmItPmJhc2UucGl0Y2hlc1swXTsKKwl9CisKK2VuZF9jcHVfYWNjZXNzOgor CWlmIChmYi0+b2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpIHsKKwkJcmV0ID0gZG1hX2J1Zl9lbmRf Y3B1X2FjY2VzcygKKwkJCWZiLT5vYmotPmJhc2UuaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCBETUFf RlJPTV9ERVZJQ0UpOworCQlpZiAocmV0KQorCQkJRFJNX0VSUk9SKCJkbWFfYnVmX2VuZF9jcHVf YWNjZXNzIGVycjogJWRcbiIsIHJldCk7CisJfQorfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX2Zi X3VwZGF0ZV9yZWFkeShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKK3sKKwlpbnQg cmV0OworCisJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKwlyZXQgPSAh Z20xMnUzMjAtPmZiX3VwZGF0ZS5ydW4gfHwgZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiAhPSBOVUxM OworCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2ZiX3VwZGF0ZV93b3JrKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9CisJ CWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlLCBmYl91cGRhdGUud29y ayk7CisJaW50IGRyYXdfc3RhdHVzX3RpbWVvdXQgPSBGSVJTVF9GUkFNRV9USU1FT1VUOworCWlu dCBibG9jaywgYmxvY2tfc2l6ZSwgbGVuLCB4MSwgeDIsIHkxLCB5MjsKKwlzdHJ1Y3QgZ20xMnUz MjBfZnJhbWVidWZmZXIgKmZiOworCWludCBmcmFtZSA9IDA7CisJaW50IHJldCA9IDA7CisKKwl3 aGlsZSAoZ20xMnUzMjAtPmZiX3VwZGF0ZS5ydW4pIHsKKwkJbXV0ZXhfbG9jaygmZ20xMnUzMjAt PmZiX3VwZGF0ZS5sb2NrKTsKKwkJZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCQl4MSA9 IGdtMTJ1MzIwLT5mYl91cGRhdGUueDE7CisJCXgyID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS54MjsK KwkJeTEgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnkxOworCQl5MiA9IGdtMTJ1MzIwLT5mYl91cGRh dGUueTI7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgPSBOVUxMOworCQltdXRleF91bmxvY2so JmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwkJaWYgKGZiKSB7CisJCQlnbTEydTMyMF9j b3B5X2ZiX3RvX2Jsb2NrcyhmYiwgeDEsIHgyLCB5MSwgeTIpOworCQkJZHJtX2ZyYW1lYnVmZmVy X3VucmVmZXJlbmNlKCZmYi0+YmFzZSk7CisJCX0KKworCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sg PCBHTTEyVTMyMF9CTE9DS19DT1VOVDsgYmxvY2srKykgeworCQkJaWYgKGJsb2NrID09IEdNMTJV MzIwX0JMT0NLX0NPVU5UIC0gMSkKKwkJCQlibG9ja19zaXplID0gREFUQV9MQVNUX0JMT0NLX1NJ WkU7CisJCQllbHNlCisJCQkJYmxvY2tfc2l6ZSA9IERBVEFfQkxPQ0tfU0laRTsKKworCQkJLyog U2VuZCBkYXRhIGNvbW1hbmQgdG8gZGV2aWNlICovCisJCQltZW1jcHkoZ20xMnUzMjAtPmNtZF9i dWYsIGNtZF9kYXRhLCBDTURfU0laRSk7CisJCQlnbTEydTMyMC0+Y21kX2J1Zls4XSA9IGJsb2Nr X3NpemUgJiAweGZmOworCQkJZ20xMnUzMjAtPmNtZF9idWZbOV0gPSBibG9ja19zaXplID4+IDg7 CisJCQlnbTEydTMyMC0+Y21kX2J1ZlsyMF0gPSAweGZjIC0gYmxvY2sgKiA0OworCQkJZ20xMnUz MjAtPmNtZF9idWZbMjFdID0gYmxvY2sgfCAoZnJhbWUgPDwgNyk7CisKKwkJCXJldCA9IHVzYl9i dWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVk ZXYsIERBVEFfU05EX0VQVCksCisJCQkJZ20xMnUzMjAtPmNtZF9idWYsIENNRF9TSVpFLCAmbGVu LAorCQkJCUNNRF9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwgbGVuICE9IENNRF9TSVpFKQorCQkJ CWdvdG8gZXJyOworCisJCQkvKiBTZW5kIGRhdGEgYmxvY2sgdG8gZGV2aWNlICovCisJCQlyZXQg PSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQkJdXNiX3NuZGJ1bGtwaXBlKGdtMTJ1 MzIwLT51ZGV2LCBEQVRBX1NORF9FUFQpLAorCQkJCWdtMTJ1MzIwLT5kYXRhX2J1ZltibG9ja10s IGJsb2NrX3NpemUsCisJCQkJJmxlbiwgREFUQV9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwgbGVu ICE9IGJsb2NrX3NpemUpCisJCQkJZ290byBlcnI7CisKKwkJCS8qIFJlYWQgc3RhdHVzICovCisJ CQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBl KGdtMTJ1MzIwLT51ZGV2LCBEQVRBX1JDVl9FUFQpLAorCQkJCWdtMTJ1MzIwLT5jbWRfYnVmLCBS RUFEX1NUQVRVU19TSVpFLCAmbGVuLAorCQkJCUNNRF9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwg bGVuICE9IFJFQURfU1RBVFVTX1NJWkUpCisJCQkJZ290byBlcnI7CisJCX0KKworCQkvKiBTZW5k IGRyYXcgY29tbWFuZCB0byBkZXZpY2UgKi8KKwkJbWVtY3B5KGdtMTJ1MzIwLT5jbWRfYnVmLCBj bWRfZHJhdywgQ01EX1NJWkUpOworCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYs CisJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCksCisJCQln bTEydTMyMC0+Y21kX2J1ZiwgQ01EX1NJWkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwkJaWYgKHJl dCB8fCBsZW4gIT0gQ01EX1NJWkUpCisJCQlnb3RvIGVycjsKKworCQkvKiBSZWFkIHN0YXR1cyAq LworCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQl1c2JfcmN2YnVsa3Bp cGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfUkNWX0VQVCksCisJCQlnbTEydTMyMC0+Y21kX2J1Ziwg UkVBRF9TVEFUVVNfU0laRSwgJmxlbiwKKwkJCWRyYXdfc3RhdHVzX3RpbWVvdXQpOworCQlpZiAo cmV0IHx8IGxlbiAhPSBSRUFEX1NUQVRVU19TSVpFKQorCQkJZ290byBlcnI7CisKKwkJZHJhd19z dGF0dXNfdGltZW91dCA9IENNRF9USU1FT1VUOworCQlmcmFtZSA9ICFmcmFtZTsKKworCQkvKgor CQkgKiBXZSBtdXN0IGRyYXcgYSBmcmFtZSBldmVyeSAycyBvdGhlcndpc2UgdGhlIHByb2plY3Rv cgorCQkgKiBzd2l0Y2hlcyBiYWNrIHRvIHNob3dpbmcgaXRzIGxvZ28uCisJCSAqLworCQl3YWl0 X2V2ZW50X3RpbWVvdXQoZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSwKKwkJCQkgICBnbTEydTMy MF9mYl91cGRhdGVfcmVhZHkoZ20xMnUzMjApLAorCQkJCSAgIElETEVfVElNRU9VVCk7CisJfQor CXJldHVybjsKK2VycjoKKwkvKiBEbyBub3QgbG9nIGVycm9ycyBjYXVzZWQgYnkgbW9kdWxlIHVu bG9hZCBvciBkZXZpY2UgdW5wbHVnICovCisJaWYgKHJldCAhPSAtRUNPTk5SRVNFVCAmJiByZXQg IT0gLUVTSFVURE9XTikKKwkJZGV2X2VycigmZ20xMnUzMjAtPnVkZXYtPmRldiwgIkZyYW1lIHVw ZGF0ZSBlcnJvcjogJWRcbiIsIHJldCk7Cit9CisKK3ZvaWQgZ20xMnUzMjBfc3RhcnRfZmJfdXBk YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAq Z20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZi X3VwZGF0ZS5sb2NrKTsKKwlnbTEydTMyMC0+ZmJfdXBkYXRlLnJ1biA9IHRydWU7CisJbXV0ZXhf dW5sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCisJcXVldWVfd29yayhnbTEydTMy MC0+ZmJfdXBkYXRlLndvcmtxLCAmZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrKTsKK30KKwordm9p ZCBnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0 cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCW11 dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisJZ20xMnUzMjAtPmZiX3VwZGF0 ZS5ydW4gPSBmYWxzZTsKKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7 CisKKwl3YWtlX3VwKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndhaXRxKTsKKwljYW5jZWxfd29ya19z eW5jKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOworCisJbXV0ZXhfbG9jaygmZ20xMnUzMjAt PmZiX3VwZGF0ZS5sb2NrKTsKKwlpZiAoZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYikgeworCQlkcm1f ZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UoJmdtMTJ1MzIwLT5mYl91cGRhdGUuZmItPmJhc2UpOwor CQlnbTEydTMyMC0+ZmJfdXBkYXRlLmZiID0gTlVMTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZnbTEy dTMyMC0+ZmJfdXBkYXRlLmxvY2spOworfQorCitpbnQgZ20xMnUzMjBfZHJpdmVyX2xvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgdXNi X2RldmljZSAqdWRldiA9ICh2b2lkICopZmxhZ3M7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAq Z20xMnUzMjA7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlEUk1fREVCVUcoIlxuIik7CisJZ20x MnUzMjAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFnbTEydTMyMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnbTEydTMyMC0+dWRl diA9IHVkZXY7CisJZ20xMnUzMjAtPmRkZXYgPSBkZXY7CisJZGV2LT5kZXZfcHJpdmF0ZSA9IGdt MTJ1MzIwOworCisJSU5JVF9XT1JLKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmssIGdtMTJ1MzIw X2ZiX3VwZGF0ZV93b3JrKTsKKwltdXRleF9pbml0KCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2sp OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdtMTJ1MzIwLT5mYl91cGRhdGUud2FpdHEpOworCisJ cmV0ID0gZ20xMnUzMjBfc2V0X2Vjb21vZGUoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsK KworCWdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtx dWV1ZShEUklWRVJfTkFNRSk7CisJaWYgKCFnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmtxKSB7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGdtMTJ1MzIwX3VzYl9h bGxvYyhnbTEydTMyMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfd3E7CisKKwlEUk1fREVCVUco IlxuIik7CisJcmV0ID0gZ20xMnUzMjBfbW9kZXNldF9pbml0KGRldik7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfdXNiOworCisJcmV0ID0gZ20xMnUzMjBfZmJkZXZfaW5pdChkZXYpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyX21vZGVzZXQ7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAx KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mYjsKKworCWdtMTJ1MzIwX3N0YXJ0X2ZiX3VwZGF0 ZShkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9mYjoKKwlnbTEydTMyMF9mYmRldl9jbGVhbnVw KGRldik7CitlcnJfbW9kZXNldDoKKwlnbTEydTMyMF9tb2Rlc2V0X2NsZWFudXAoZGV2KTsKK2Vy cl91c2I6CisJZ20xMnUzMjBfdXNiX2ZyZWUoZ20xMnUzMjApOworZXJyX3dxOgorCWRlc3Ryb3lf d29ya3F1ZXVlKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EpOworZXJyOgorCWtmcmVlKGdtMTJ1 MzIwKTsKKwlEUk1fRVJST1IoIiVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBn bTEydTMyMF9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOworCisJZHJtX3Zi bGFua19jbGVhbnVwKGRldik7CisJZ20xMnUzMjBfZmJkZXZfY2xlYW51cChkZXYpOworCWdtMTJ1 MzIwX21vZGVzZXRfY2xlYW51cChkZXYpOworCWdtMTJ1MzIwX3VzYl9mcmVlKGdtMTJ1MzIwKTsK KwlkZXN0cm95X3dvcmtxdWV1ZShnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmtxKTsKKwlrZnJlZShn bTEydTMyMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnbTEydTMyMF9zZXRfZWNvbW9kZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIw ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiBnbTEydTMyMF9taXNjX3JlcXVlc3QoZ20x MnUzMjAsIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EsCisJCQkJICAgICBNSVNDX1JFUV9HRVRfU0VU X0VDT19CLCAweDAxIC8qIHNldCAqLywKKwkJCQkgICAgIGVjb19tb2RlID8gMHgwMSA6IDB4MDAs IDB4MDAsIDB4MDEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dt MTJ1MzIwX21vZGVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tb2Rl c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2Yzc2NwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tb2Rlc2V0LmMK QEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0 IEluYy4KKyAqCisgKiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2VkIGluIHBh cnRzIG9uIHRoZSBnbTEydTMyMCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVmlh Y2hlc2xhdiBOdXJtZWtoYW1pdG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJpZ2h0IChD KSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQg KEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJp Z2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisg KiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcg aW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9w bGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlICJnbTEydTMyMF9kcnYuaCIKKworc3RhdGljIHZvaWQg Z20xMnUzMjBfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCit7Cit9 CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAorCQkJCSAgaW50IHgsIGludCB5LAorCQkJ CSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQorCit7CisJc3RydWN0IGdtMTJ1MzIw X2ZyYW1lYnVmZmVyICpmYiA9IHRvX2dtMTJ1MzIwX2ZiKGNydGMtPnByaW1hcnktPmZiKTsKKwor CWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoZmIsIDAsIEdNMTJVMzIwX1VTRVJfV0lEVEgsIDAsIEdN MTJVMzIwX0hFSUdIVCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZ20xMnUzMjBf Y3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKK30KKworc3RhdGljIHZvaWQg Z20xMnUzMjBfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlkcm1fY3J0 Y19jbGVhbnVwKGNydGMpOworCWtmcmVlKGNydGMpOworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIw X2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpkcm1fZmIsCisJCQkJICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19l dmVudCAqZXZlbnQsCisJCQkJICAgdWludDMyX3QgcGFnZV9mbGlwX2ZsYWdzKQoreworCXN0cnVj dCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIgPSB0b19nbTEydTMyMF9mYihkcm1fZmIpOworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkoZmIsIDAsIEdNMTJVMzIwX1VTRVJfV0lEVEgsIDAs IEdNMTJVMzIwX0hFSUdIVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2Nr LCBmbGFncyk7CisJaWYgKGV2ZW50KQorCQlkcm1fc2VuZF92YmxhbmtfZXZlbnQoZGV2LCAwLCBl dmVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 CisKKwljcnRjLT5wcmltYXJ5LT5mYiA9IGRybV9mYjsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBnbTEydTMyMF9jcnRjX3ByZXBhcmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQorewor fQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCit7CisJZ20xMnUzMjBfY3J0Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBnbTEydTMyMF9oZWxw ZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBnbTEydTMyMF9jcnRjX2RwbXMsCisJLm1vZGVfc2V0ID0g Z20xMnUzMjBfY3J0Y19tb2RlX3NldCwKKwkucHJlcGFyZSA9IGdtMTJ1MzIwX2NydGNfcHJlcGFy ZSwKKwkuY29tbWl0ID0gZ20xMnUzMjBfY3J0Y19jb21taXQsCisJLmRpc2FibGUgPSBnbTEydTMy MF9jcnRjX2Rpc2FibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNz IGdtMTJ1MzIwX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBkcm1fY3J0Y19oZWxwZXJf c2V0X2NvbmZpZywKKwkuZGVzdHJveSA9IGdtMTJ1MzIwX2NydGNfZGVzdHJveSwKKwkucGFnZV9m bGlwID0gZ20xMnUzMjBfY3J0Y19wYWdlX2ZsaXAsCit9OworCitzdGF0aWMgaW50IGdtMTJ1MzIw X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKKworCWNydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2NydGMpICsKKwkJICAg ICAgIHNpemVvZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNy dGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fY3J0Y19pbml0KGRldiwgY3J0 YywgJmdtMTJ1MzIwX2NydGNfZnVuY3MpOworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJmdt MTJ1MzIwX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgZ20xMnUzMjBfbW9kZV9mdW5jcyA9IHsKKwkuZmJf Y3JlYXRlID0gZ20xMnUzMjBfZmJfdXNlcl9mYl9jcmVhdGUsCisJLm91dHB1dF9wb2xsX2NoYW5n ZWQgPSBOVUxMLAorfTsKKworaW50IGdtMTJ1MzIwX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCWRybV9tb2Rl X2NvbmZpZ19pbml0KGRldik7CisKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IEdNMTJV MzIwX1VTRVJfV0lEVEg7CisJZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gR00xMlUzMjBf SEVJR0hUOworCisJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAyMDQ4OworCWRldi0+bW9k ZV9jb25maWcubWF4X2hlaWdodCA9IDIwNDg7CisKKwlkZXYtPm1vZGVfY29uZmlnLnByZWZlcl9z aGFkb3cgPSAwOworCWRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMjQ7CisKKwlk ZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJmdtMTJ1MzIwX21vZGVfZnVuY3M7CisKKwlkcm1fbW9k ZV9jcmVhdGVfZGlydHlfaW5mb19wcm9wZXJ0eShkZXYpOworCisJZ20xMnUzMjBfY3J0Y19pbml0 KGRldik7CisKKwllbmNvZGVyID0gZ20xMnUzMjBfZW5jb2Rlcl9pbml0KGRldik7CisKKwlnbTEy dTMyMF9jb25uZWN0b3JfaW5pdChkZXYsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgZ20xMnUzMjBfbW9kZXNldF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ ZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKK30KLS0gCjIuNy40CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK