From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephane Viau Subject: [PATCH 1/3] drm/msm/mdp5: make SMP module dynamically configurable Date: Tue, 18 Nov 2014 12:49:47 -0500 Message-ID: <1416332989-685-2-git-send-email-sviau@codeaurora.org> References: <1416332989-685-1-git-send-email-sviau@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1416332989-685-1-git-send-email-sviau@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org VGhlIFNoYXJlZCBNZW1vcnkgUG9vbCAoU01QKSBoYXMgaXRzIG93biBsaW1pdGF0aW9uLCBmZWF0 dXJlcyBhbmQKc3RhdGUuIFNvbWUgZXhhbXBsZXMgYXJlOgogLSB0aGUgbnVtYmVyIG9mIE1lbW9y eSBNYWNybyBCbG9jayAoTU1CKSBhbmQgdGhlaXIgc2l6ZQogLSB0aGUgbnVtYmVyIG9mIGxpbmVz IHRoYXQgY2FuIGJlIGZldGNoZWQKIC0gdGhlIHN0YXRlIG9mIE1NQiBjdXJyZW50bHkgYWxsb2Nh dGVkCiAtIHRoZSBjb21wdXRhdGlvbiBvZiBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIHBlciBw bGFuZQogLSBjbGllbnQgSURzIC4uLgoKSW4gb3JkZXIgdG8gYXZvaWQgcHJpdmF0ZSBkYXRhIHRv IGJlIG92ZXJ3cml0dGVuIGJ5IG90aGVyIG1vZHVsZXMsCmxldCdzIG1ha2UgdGhlc2UgcHJpdmF0 ZSB0byB0aGUgU01QIG1vZHVsZS4KClNvbWUgb2YgdGhlc2UgZGVwZW5kIG9uIHRoZSBoYXJkd2Fy ZSBjb25maWd1cmF0aW9uLCBsZXQncyBhZGQgdGhlbQp0byB0aGUgbWRwNV9jb25maWcgc3RydWN0 LgoKSW4gc29tZSBodyBjb25maWd1cmF0aW9ucywgc29tZSBNTUJzIGFyZSBzdGF0aWNhbGx5IHRp ZWQgdG8gUkdCCnBpcGVzIGFuZCBjYW5ub3QgYmUgcmUtYWxsb2NhdGVkIGR5bmFtaWNhbGx5LiBU aGlzIGNoYW5nZQppbnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIE1NQiBzdGF0aWMgdXNhZ2UgYW5k IG1ha2VzIHN1cmUgdGhhdApkeW5hbWljIE1NQiByZXF1ZXN0cyBhcmUgZGltZW5zaW9uZWQgYWNj b3JkaW5nbHkuCgpBIG5vdGUgb24gcGFzc2luZyBhIHBpcGUgcG9pbnRlciwgaW5zdGVhZCBvZiBj bGllbnQgSURzOgpDbGllbnQgSURzIGFyZSBTTVAtcmVsYXRlZCBpbmZvcm1hdGlvbi4gUGFzc2lu ZyBQSVBFIGluZm9ybWF0aW9uCnRvIFNNUCBsZXRzIFNNUCBtb2R1bGUgdG8gZmluZCBvdXQgd2hp Y2ggU01QIGNsaWVudChzKSBhcmUgdXNlZC4KVGhpcyBhbGxvd3MgdGhlIFNNUCBtb2R1bGUgdG8g YWNjZXNzIHRoZSBQSVBFIHBvaW50ZXIsIHdoaWNoIGNhbgpiZSB1c2VkIGZvciBGSUZPIHdhdGVy bWFyayBjb25maWd1cmF0aW9uLgpCeSB0aGUgd2F5LCBldmVuIHRob3VnaCBSRUdfTURQNV9QSVBF X1JFUVBSSU9fRklGT19XTV8qIHJlZ2lzdGVycwphcmUgcGFydCBvZiB0aGUgUElQRSByZWdpc3Rl cnMsIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaXMgdG8gcmVmbGVjdAp0aGUgYmVoYXZpb3Igb2YgdGhl IFNNUCBibG9jay4gVGhlc2UgcmVnaXN0ZXJzIGFjY2VzcyBpcyBub3cKcmVzdHJpY3RlZCB0byB0 aGUgU01QIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IFN0ZXBoYW5lIFZpYXUgPHN2aWF1QGNvZGVh dXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYyAg IHwgIDI4ICsrKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuaCAgIHwg IDM0ICsrLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfcGxhbmUuYyB8ICA5 MiArKy0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9zbXAuYyAg IHwgMjQyICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9tZHAvbWRwNS9tZHA1X3NtcC5oICAgfCAgMjIgKy0tCiA1IGZpbGVzIGNoYW5nZWQsIDI2NSBp bnNlcnRpb25zKCspLCAxNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRw NS9tZHA1X2ttcy5jCmluZGV4IGYyYzE1YmQuLjBkNjMwNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L21kcC9tZHA1L21kcDVfa21zLmMKQEAgLTMwLDYgKzMwLDEwIEBAIGNvbnN0IHN0cnVjdCBtZHA1 X2NvbmZpZyAqbWRwNV9jZmc7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRwNV9jb25maWcgbXNt OHg3NF9jb25maWcgPSB7CiAJLm5hbWUgPSAibXNtOHg3NCIsCisJLnNtcCA9IHsKKwkJLm1tYl9j b3VudCA9IDIyLAorCQkubW1iX3NpemUgPSA0MDk2LAorCX0sCiAJLmN0bCA9IHsKIAkJLmNvdW50 ID0gNSwKIAkJLmJhc2UgPSB7IDB4MDA2MDAsIDB4MDA3MDAsIDB4MDA4MDAsIDB4MDA5MDAsIDB4 MDBhMDAgfSwKQEAgLTY3LDYgKzcxLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRwNV9jb25m aWcgbXNtOHg3NF9jb25maWcgPSB7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRwNV9jb25maWcg YXBxODA4NF9jb25maWcgPSB7CiAJLm5hbWUgPSAiYXBxODA4NCIsCisJLnNtcCA9IHsKKwkJLm1t Yl9jb3VudCA9IDQ0LAorCQkubW1iX3NpemUgPSA4MTkyLAorCQkucmVzZXJ2ZWRfc3RhdGVbMF0g PSBHRU5NQVNLKDcsIDApLAkvKiBmaXJzdCA4IE1NQnMgKi8KKwkJLnJlc2VydmVkW0NJRF9SR0Iw XSA9IDIsCisJCS5yZXNlcnZlZFtDSURfUkdCMV0gPSAyLAorCQkucmVzZXJ2ZWRbQ0lEX1JHQjJd ID0gMiwKKwkJLnJlc2VydmVkW0NJRF9SR0IzXSA9IDIsCisJfSwKIAkuY3RsID0gewogCQkuY291 bnQgPSA1LAogCQkuYmFzZSA9IHsgMHgwMDYwMCwgMHgwMDcwMCwgMHgwMDgwMCwgMHgwMDkwMCwg MHgwMGEwMCB9LApAQCAtMjIyLDExICsyMzUsMTUgQEAgc3RhdGljIHZvaWQgbWRwNV9kZXN0cm95 KHN0cnVjdCBtc21fa21zICprbXMpCiB7CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IHRv X21kcDVfa21zKHRvX21kcF9rbXMoa21zKSk7CiAJc3RydWN0IG1zbV9tbXUgKm1tdSA9IG1kcDVf a21zLT5tbXU7CisJdm9pZCAqc21wID0gbWRwNV9rbXMtPnNtcF9wcml2OwogCiAJaWYgKG1tdSkg ewogCQltbXUtPmZ1bmNzLT5kZXRhY2gobW11LCBpb21tdV9wb3J0cywgQVJSQVlfU0laRShpb21t dV9wb3J0cykpOwogCQltbXUtPmZ1bmNzLT5kZXN0cm95KG1tdSk7CiAJfQorCWlmIChzbXApCisJ CW1kcDVfc21wX2Rlc3Ryb3koc21wKTsKKwogCWtmcmVlKG1kcDVfa21zKTsKIH0KIApAQCAtMzYz LDYgKzM4MCw3IEBAIHN0cnVjdCBtc21fa21zICptZHA1X2ttc19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCiAJc3RydWN0IG1kcDVfa21zICptZHA1X2ttczsKIAlzdHJ1Y3QgbXNtX2ttcyAq a21zID0gTlVMTDsKIAlzdHJ1Y3QgbXNtX21tdSAqbW11OworCXZvaWQgKnByaXY7CiAJaW50IGks IHJldDsKIAogCW1kcDVfa21zID0ga3phbGxvYyhzaXplb2YoKm1kcDVfa21zKSwgR0ZQX0tFUk5F TCk7CkBAIC0zNzcsNyArMzk1LDYgQEAgc3RydWN0IG1zbV9rbXMgKm1kcDVfa21zX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIAlrbXMgPSAmbWRwNV9rbXMtPmJhc2UuYmFzZTsKIAogCW1k cDVfa21zLT5kZXYgPSBkZXY7Ci0JbWRwNV9rbXMtPnNtcF9ibGtfY250ID0gY29uZmlnLT5zbXBf YmxrX2NudDsKIAogCW1kcDVfa21zLT5tbWlvID0gbXNtX2lvcmVtYXAocGRldiwgIm1kcF9waHlz IiwgIk1EUDUiKTsKIAlpZiAoSVNfRVJSKG1kcDVfa21zLT5tbWlvKSkgewpAQCAtNDI5LDYgKzQ0 NiwxMyBAQCBzdHJ1Y3QgbXNtX2ttcyAqbWRwNV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCS8qIFRPRE86IGNvbXB1dGUgY29yZSBjbG9jayByYXRlIGF0IHJ1bnRpbWUgKi8KIAlj bGtfc2V0X3JhdGUobWRwNV9rbXMtPnNyY19jbGssIG1kcDVfa21zLT5od19jZmctPm1heF9jbGsp OwogCisJcHJpdiA9IG1kcDVfc21wX2luaXQobWRwNV9rbXMtPmRldiwgJm1kcDVfa21zLT5od19j ZmctPnNtcCk7CisJaWYgKElTX0VSUihwcml2KSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXYpOwor CQlnb3RvIGZhaWw7CisJfQorCW1kcDVfa21zLT5zbXBfcHJpdiA9IHByaXY7CisKIAkvKiBtYWtl IHN1cmUgdGhpbmdzIGFyZSBvZmYgYmVmb3JlIGF0dGFjaGluZyBpb21tdSAoYm9vdGxvYWRlciBj b3VsZAogCSAqIGhhdmUgbGVmdCB0aGluZ3Mgb24sIGluIHdoaWNoIGNhc2Ugd2UnbGwgc3RhcnQg Z2V0dGluZyBmYXVsdHMgaWYKIAkgKiB3ZSBkb24ndCBkaXNhYmxlKToKQEAgLTQ4OSw4ICs1MTMs NiBAQCBzdGF0aWMgc3RydWN0IG1kcDVfcGxhdGZvcm1fY29uZmlnICptZHA1X2dldF9jb25maWco c3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogCS8qIFRPRE8gKi8KICNlbmRpZgogCWNvbmZp Zy5pb21tdSA9IGlvbW11X2RvbWFpbl9hbGxvYygmcGxhdGZvcm1fYnVzX3R5cGUpOwotCS8qIFRP RE8gZ2V0IGZyb20gRFQ6ICovCi0JY29uZmlnLnNtcF9ibGtfY250ID0gMjI7CiAKIAlyZXR1cm4g JmNvbmZpZzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRw NV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuaAppbmRleCBi ZGJkY2RhLi43NTM2NTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1 L21kcDVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5o CkBAIC0yMywxMiArMjMsMjIgQEAKICNpbmNsdWRlICJtZHAvbWRwX2ttcy5oIgogLyogZHluYW1p YyBvZmZzZXRzIHVzZWQgYnkgbWRwNS54bWwuaCAoaW5pdGlhbGl6ZWQgaW4gbWRwNV9rbXMuYykg Ki8KICNkZWZpbmUgTURQNV9NQVhfQkFTRVMJCTgKKyNkZWZpbmUgTUFYX1NNUF9CTE9DS1MJCTQ0 CisjZGVmaW5lIE1BWF9DTElFTlRTCQkzMgordHlwZWRlZiBERUNMQVJFX0JJVE1BUChtZHA1X3Nt cF9zdGF0ZV90LCBNQVhfU01QX0JMT0NLUyk7CiBzdHJ1Y3QgbWRwNV9zdWJfYmxvY2sgewogCWlu dAljb3VudDsKIAl1aW50MzJfdCBiYXNlW01EUDVfTUFYX0JBU0VTXTsKIH07CitzdHJ1Y3QgbWRw NV9zbXBfYmxvY2sgeworCWludCBtbWJfY291bnQ7CQkJLyogbnVtYmVyIG9mIFNNUCBNTUJzICov CisJaW50IG1tYl9zaXplOwkJCS8qIE1NQjogc2l6ZSBpbiBieXRlcyAqLworCW1kcDVfc21wX3N0 YXRlX3QgcmVzZXJ2ZWRfc3RhdGU7LyogU01QIE1NQnMgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi8K KwlpbnQgcmVzZXJ2ZWRbTUFYX0NMSUVOVFNdOwkvKiAjIG9mIE1NQnMgcmVzZXJ2ZWQgcGVyIGNs aWVudCAqLworfTsKIHN0cnVjdCBtZHA1X2NvbmZpZyB7CiAJY2hhciAgKm5hbWU7CisJc3RydWN0 IG1kcDVfc21wX2Jsb2NrIHNtcDsKIAlzdHJ1Y3QgbWRwNV9zdWJfYmxvY2sgY3RsOwogCXN0cnVj dCBtZHA1X3N1Yl9ibG9jayBwaXBlX3ZpZzsKIAlzdHJ1Y3QgbWRwNV9zdWJfYmxvY2sgcGlwZV9y Z2I7CkBAIC01NiwxMCArNjYsNyBAQCBzdHJ1Y3QgbWRwNV9rbXMgewogCWludCBpZDsKIAlzdHJ1 Y3QgbXNtX21tdSAqbW11OwogCi0JLyogZm9yIHRyYWNraW5nIHNtcCBhbGxvY2F0aW9uIGFtb25n c3QgcGlwZXM6ICovCi0JbWRwNV9zbXBfc3RhdGVfdCBzbXBfc3RhdGU7Ci0Jc3RydWN0IG1kcDVf Y2xpZW50X3NtcF9zdGF0ZSBzbXBfY2xpZW50X3N0YXRlW0NJRF9NQVhdOwotCWludCBzbXBfYmxr X2NudDsKKwl2b2lkICpzbXBfcHJpdjsKIAogCS8qIGlvL3JlZ2lzdGVyIHNwYWNlczogKi8KIAl2 b2lkIF9faW9tZW0gKm1taW8sICp2YmlmOwpAQCAtODAsNyArODcsNiBAQCBzdHJ1Y3QgbWRwNV9r bXMgewogLyogcGxhdGZvcm0gY29uZmlnIGRhdGEgKGllLiBmcm9tIERULCBvciBwZGF0YSkgKi8K IHN0cnVjdCBtZHA1X3BsYXRmb3JtX2NvbmZpZyB7CiAJc3RydWN0IGlvbW11X2RvbWFpbiAqaW9t bXU7Ci0JaW50IHNtcF9ibGtfY250OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1kcDVfd3Jp dGUoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywgdTMyIHJlZywgdTMyIGRhdGEpCkBAIC0xMzYs MjQgKzE0Miw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBpcGUybmNsaWVudHMoZW51bSBtZHA1X3Bp cGUgcGlwZSkKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZW51bSBtZHA1X2NsaWVudF9pZCBwaXBl MmNsaWVudChlbnVtIG1kcDVfcGlwZSBwaXBlLCBpbnQgcGxhbmUpCi17Ci0JV0FSTl9PTihwbGFu ZSA+PSBwaXBlMm5jbGllbnRzKHBpcGUpKTsKLQlzd2l0Y2ggKHBpcGUpIHsKLQljYXNlIFNTUFBf VklHMDogcmV0dXJuIENJRF9WSUcwX1kgKyBwbGFuZTsKLQljYXNlIFNTUFBfVklHMTogcmV0dXJu IENJRF9WSUcxX1kgKyBwbGFuZTsKLQljYXNlIFNTUFBfVklHMjogcmV0dXJuIENJRF9WSUcyX1kg KyBwbGFuZTsKLQljYXNlIFNTUFBfUkdCMDogcmV0dXJuIENJRF9SR0IwOwotCWNhc2UgU1NQUF9S R0IxOiByZXR1cm4gQ0lEX1JHQjE7Ci0JY2FzZSBTU1BQX1JHQjI6IHJldHVybiBDSURfUkdCMjsK LQljYXNlIFNTUFBfRE1BMDogcmV0dXJuIENJRF9ETUEwX1kgKyBwbGFuZTsKLQljYXNlIFNTUFBf RE1BMTogcmV0dXJuIENJRF9ETUExX1kgKyBwbGFuZTsKLQljYXNlIFNTUFBfVklHMzogcmV0dXJu IENJRF9WSUczX1kgKyBwbGFuZTsKLQljYXNlIFNTUFBfUkdCMzogcmV0dXJuIENJRF9SR0IzOwot CWRlZmF1bHQ6ICAgICAgICByZXR1cm4gQ0lEX1VOVVNFRDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxp bmUgdWludDMyX3QgbWl4ZXIyZmx1c2goaW50IGxtKQogewogCXN3aXRjaCAobG0pIHsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9wbGFuZS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMKaW5kZXggZjNkYWVjNC4uNjMzY2Ew OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMKQEAgLTYzLDEz ICs2MywxMyBAQCBzdGF0aWMgaW50IG1kcDVfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSkKIAlzdHJ1Y3QgbWRwNV9wbGFuZSAqbWRwNV9wbGFuZSA9IHRvX21kcDVfcGxhbmUo cGxhbmUpOwogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKHBsYW5lKTsKIAll bnVtIG1kcDVfcGlwZSBwaXBlID0gbWRwNV9wbGFuZS0+cGlwZTsKLQlpbnQgaTsKIAogCURCRygi JXM6IGRpc2FibGUiLCBtZHA1X3BsYW5lLT5uYW1lKTsKIAotCS8qIHVwZGF0ZSBvdXIgU01QIHJl cXVlc3QgdG8gemVybyAocmVsZWFzZSBhbGwgb3VyIGJsa3MpOiAqLwotCWZvciAoaSA9IDA7IGkg PCBwaXBlMm5jbGllbnRzKHBpcGUpOyBpKyspCi0JCW1kcDVfc21wX3JlcXVlc3QobWRwNV9rbXMs IHBpcGUyY2xpZW50KHBpcGUsIGkpLCAwKTsKKwlpZiAobWRwNV9rbXMpIHsKKwkJLyogUmVsZWFz ZSB0aGUgbWVtb3J5IHdlIHJlcXVlc3RlZCBlYXJsaWVyIGZyb20gdGhlIFNNUDogKi8KKwkJbWRw NV9zbXBfcmVsZWFzZShtZHA1X2ttcy0+c21wX3ByaXYsIHBpcGUpOworCX0KIAogCS8qIFRPRE8g ZGV0YWNoaW5nIG5vdyB3aWxsIGNhdXNlIHVzIG5vdCB0byBnZXQgdGhlIGxhc3QKIAkgKiB2Ymxh bmsgYW5kIG1kcDVfc21wX2NvbW1pdCgpLi4gc28gb3RoZXIgcGxhbmVzIHdpbGwKQEAgLTE0OSw2 OCArMTQ5LDYgQEAgdm9pZCBtZHA1X3BsYW5lX3NldF9zY2Fub3V0KHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAogCXBsYW5lLT5mYiA9IGZiOwogfQogCi0vKiBOT1RFOiBsb29rcyBsaWtlIGlmIGhv cml6b250YWwgZGVjaW1hdGlvbiBpcyB1c2VkIChpZiB3ZSBzdXBwb3J0ZWQgdGhhdCkKLSAqIHRo ZW4gdGhlIHdpZHRoIHVzZWQgdG8gY2FsY3VsYXRlIFNNUCBibG9jayByZXF1aXJlbWVudHMgaXMg dGhlIHBvc3QtCi0gKiBkZWNpbWF0ZWQgd2lkdGguICBJZS4gU01QIGJ1ZmZlcmluZyBzaXRzIGRv d25zdHJlYW0gb2YgZGVjaW1hdGlvbiAod2hpY2gKLSAqIHByZXN1bWFibHkgaGFwcGVucyBkdXJp bmcgdGhlIGRtYSBmcm9tIHNjYW5vdXQgYnVmZmVyKS4KLSAqLwotc3RhdGljIGludCByZXF1ZXN0 X3NtcF9ibG9ja3Moc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHVpbnQzMl90IGZvcm1hdCwKLQkJ dWludDMyX3QgbnBsYW5lcywgdWludDMyX3Qgd2lkdGgpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IHBsYW5lLT5kZXY7Ci0Jc3RydWN0IG1kcDVfcGxhbmUgKm1kcDVfcGxhbmUgPSB0b19t ZHA1X3BsYW5lKHBsYW5lKTsKLQlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhw bGFuZSk7Ci0JZW51bSBtZHA1X3BpcGUgcGlwZSA9IG1kcDVfcGxhbmUtPnBpcGU7Ci0JaW50IGks IGhzdWIsIG5saW5lcywgbmJsa3MsIHJldDsKLQotCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hy b21hX3N1YnNhbXBsaW5nKGZvcm1hdCk7Ci0KLQkvKiBkaWZmZXJlbnQgaWYgQldDIChjb21wcmVz c2VkIGZyYW1lYnVmZmVyPykgZW5hYmxlZDogKi8KLQlubGluZXMgPSAyOwotCi0JZm9yIChpID0g MCwgbmJsa3MgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7Ci0JCWludCBuLCBmZXRjaF9zdHJpZGUs IGNwcDsKLQotCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmb3JtYXQsIGkpOwotCQlmZXRj aF9zdHJpZGUgPSB3aWR0aCAqIGNwcCAvIChpID8gaHN1YiA6IDEpOwotCi0JCW4gPSBESVZfUk9V TkRfVVAoZmV0Y2hfc3RyaWRlICogbmxpbmVzLCBTTVBfQkxLX1NJWkUpOwotCi0JCS8qIGZvciBo dyByZXYgdjEuMDAgKi8KLQkJaWYgKG1kcDVfa21zLT5yZXYgPT0gMCkKLQkJCW4gPSByb3VuZHVw X3Bvd19vZl90d28obik7Ci0KLQkJREJHKCIlc1slZF06IHJlcXVlc3QgJWQgU01QIGJsb2NrcyIs IG1kcDVfcGxhbmUtPm5hbWUsIGksIG4pOwotCQlyZXQgPSBtZHA1X3NtcF9yZXF1ZXN0KG1kcDVf a21zLCBwaXBlMmNsaWVudChwaXBlLCBpKSwgbik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIo ZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgJWQgU01QIGJsb2NrczogJWRcbiIsCi0JCQkJ CW4sIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJbmJsa3MgKz0gbjsKLQl9Ci0KLQkv KiBpbiBzdWNjZXNzIGNhc2UsIHJldHVybiB0b3RhbCAjIG9mIGJsb2NrcyBhbGxvY2F0ZWQ6ICov Ci0JcmV0dXJuIG5ibGtzOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZmlmb190aHJlc2hvbGRzKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBpbnQgbmJsa3MpCi17Ci0Jc3RydWN0IG1kcDVfcGxhbmUg Km1kcDVfcGxhbmUgPSB0b19tZHA1X3BsYW5lKHBsYW5lKTsKLQlzdHJ1Y3QgbWRwNV9rbXMgKm1k cDVfa21zID0gZ2V0X2ttcyhwbGFuZSk7Ci0JZW51bSBtZHA1X3BpcGUgcGlwZSA9IG1kcDVfcGxh bmUtPnBpcGU7Ci0JdWludDMyX3QgdmFsOwotCi0JLyogMS80IG9mIFNNUCBwb29sIHRoYXQgaXMg YmVpbmcgZmV0Y2hlZCAqLwotCXZhbCA9IChuYmxrcyAqIFNNUF9FTlRSSUVTX1BFUl9CTEspIC8g NDsKLQotCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfUkVRUFJJT19GSUZPX1dN XzAocGlwZSksIHZhbCAqIDEpOwotCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVf UkVRUFJJT19GSUZPX1dNXzEocGlwZSksIHZhbCAqIDIpOwotCW1kcDVfd3JpdGUobWRwNV9rbXMs IFJFR19NRFA1X1BJUEVfUkVRUFJJT19GSUZPX1dNXzIocGlwZSksIHZhbCAqIDMpOwotCi19Ci0K IGludCBtZHA1X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQlpbnQgY3J0 Y194LCBpbnQgY3J0Y195LApAQCAtMjI1LDcgKzE2Myw3IEBAIGludCBtZHA1X3BsYW5lX21vZGVf c2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXVpbnQzMl90IG5wbGFuZXMsIGNvbmZpZyA9 IDA7CiAJdWludDMyX3QgcGhhc2V4X3N0ZXAgPSAwLCBwaGFzZXlfc3RlcCA9IDA7CiAJdWludDMy X3QgaGRlY20gPSAwLCB2ZGVjbSA9IDA7Ci0JaW50IGksIG5ibGtzOworCWludCByZXQ7CiAKIAlu cGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZiLT5waXhlbF9mb3JtYXQpOwogCkBAIC0y NDMsMTIgKzE4MSwxMSBAQCBpbnQgbWRwNV9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKIAkJCWZiLT5iYXNlLmlkLCBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaCwKIAkJ CWNydGMtPmJhc2UuaWQsIGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNfaCk7CiAKLQkvKgot CSAqIENhbGN1bGF0ZSBhbmQgcmVxdWVzdCByZXF1aXJlZCAjIG9mIHNtcCBibG9ja3M6Ci0JICov Ci0JbmJsa3MgPSByZXF1ZXN0X3NtcF9ibG9ja3MocGxhbmUsIGZiLT5waXhlbF9mb3JtYXQsIG5w bGFuZXMsIHNyY193KTsKLQlpZiAobmJsa3MgPCAwKQotCQlyZXR1cm4gbmJsa3M7CisJLyogUmVx dWVzdCBzb21lIG1lbW9yeSBmcm9tIHRoZSBTTVA6ICovCisJcmV0ID0gbWRwNV9zbXBfcmVxdWVz dChtZHA1X2ttcy0+c21wX3ByaXYsCisJCQltZHA1X3BsYW5lLT5waXBlLCBmYi0+cGl4ZWxfZm9y bWF0LCBzcmNfdyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qCiAJICogQ3VycmVu dGx5IHdlIHVwZGF0ZSB0aGUgaHcgZm9yIGFsbG9jYXRpb25zL3JlcXVlc3RzIGltbWVkaWF0ZWx5 LApAQCAtMjU2LDggKzE5Myw3IEBAIGludCBtZHA1X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAogCSAqIHdvdWxkIG1vdmUgaW50byBhdG9taWMtPmNoZWNrX3BsYW5lX3N0 YXRlKCksIHdoaWxlIHVwZGF0aW5nIHRoZQogCSAqIGh3IHdvdWxkIHJlbWFpbiBoZXJlOgogCSAq LwotCWZvciAoaSA9IDA7IGkgPCBwaXBlMm5jbGllbnRzKHBpcGUpOyBpKyspCi0JCW1kcDVfc21w X2NvbmZpZ3VyZShtZHA1X2ttcywgcGlwZTJjbGllbnQocGlwZSwgaSkpOworCW1kcDVfc21wX2Nv bmZpZ3VyZShtZHA1X2ttcy0+c21wX3ByaXYsIHBpcGUpOwogCiAJaWYgKHNyY193ICE9IGNydGNf dykgewogCQljb25maWcgfD0gTURQNV9QSVBFX1NDQUxFX0NPTkZJR19TQ0FMRVhfRU47CkBAIC0z MzAsOCArMjY2LDYgQEAgaW50IG1kcDVfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJCQlNRFA1X1BJUEVfU0NBTEVfQ09ORklHX1NDQUxFWF9NQVhfRklMVEVSKFNDQUxF X0ZJTFRFUl9ORUFSRVNUKSB8CiAJCQlNRFA1X1BJUEVfU0NBTEVfQ09ORklHX1NDQUxFWV9NQVhf RklMVEVSKFNDQUxFX0ZJTFRFUl9ORUFSRVNUKSk7CiAKLQlzZXRfZmlmb190aHJlc2hvbGRzKHBs YW5lLCBuYmxrcyk7Ci0KIAkvKiBUT0RPIGRldGFjaCBmcm9tIG9sZCBjcnRjIChpZiB3ZSBoYWQg bW9yZSB0aGFuIG9uZSkgKi8KIAltZHA1X2NydGNfYXR0YWNoKGNydGMsIHBsYW5lKTsKIApAQCAt MzQyLDEwICsyNzYsOCBAQCB2b2lkIG1kcDVfcGxhbmVfY29tcGxldGVfZmxpcChzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSkKIHsKIAlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhw bGFuZSk7CiAJZW51bSBtZHA1X3BpcGUgcGlwZSA9IHRvX21kcDVfcGxhbmUocGxhbmUpLT5waXBl OwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHBpcGUybmNsaWVudHMocGlwZSk7IGkrKykK LQkJbWRwNV9zbXBfY29tbWl0KG1kcDVfa21zLCBwaXBlMmNsaWVudChwaXBlLCBpKSk7CisJbWRw NV9zbXBfY29tbWl0KG1kcDVfa21zLT5zbXBfcHJpdiwgcGlwZSk7CiB9CiAKIGVudW0gbWRwNV9w aXBlIG1kcDVfcGxhbmVfcGlwZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9zbXAuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbWRwL21kcDUvbWRwNV9zbXAuYwppbmRleCAyZDAyMzZiLi5lNjFlMWNmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfc21wLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3NtcC5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAogICogQXV0aG9yOiBSb2IgQ2xh cmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CiAgKgpAQCAtMjksOCArMzAsMTEgQEAKICAqIEJhc2Vk IG9uIHRoZSBzaXplIG9mIHRoZSBhdHRhY2hlZCBzY2Fub3V0IGJ1ZmZlciwgYSBjZXJ0YWluICMg b2YKICAqIGJsb2NrcyBtdXN0IGJlIGFsbG9jYXRlZCB0byB0aGF0IGNsaWVudCBvdXQgb2YgdGhl IHNoYXJlZCBwb29sLgogICoKLSAqIEZvciBlYWNoIGJsb2NrLCBpdCBjYW4gYmUgZWl0aGVyIGZy ZWUsIG9yIHBlbmRpbmcvaW4tdXNlIGJ5IGEKLSAqIGNsaWVudC4gIFRoZSB1cGRhdGVzIGhhcHBl biBpbiB0aHJlZSBzdGVwczoKKyAqIEluIHNvbWUgaHcsIHNvbWUgYmxvY2tzIGFyZSBzdGF0aWNh bGx5IGFsbG9jYXRlZCBmb3IgY2VydGFpbiBwaXBlcworICogYW5kIENBTk5PVCBiZSByZS1hbGxv Y2F0ZWQgKGVnOiBNTUIwIGFuZCBNTUIxIGJvdGggdGllZCB0byBSR0IwKS4KKyAqCisgKiBGb3Ig ZWFjaCBibG9jayB0aGF0IGNhbiBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGl0IGNhbiBiZSBl aXRoZXIKKyAqIGZyZWUsIG9yIHBlbmRpbmcvaW4tdXNlIGJ5IGEgY2xpZW50LiBUaGUgdXBkYXRl cyBoYXBwZW4gaW4gdGhyZWUgc3RlcHM6CiAgKgogICogIDEpIG1kcDVfc21wX3JlcXVlc3QoKToK ICAqICAgICBXaGVuIHBsYW5lIHNjYW5vdXQgaXMgc2V0dXAsIGNhbGN1bGF0ZSByZXF1aXJlZCBu dW1iZXIgb2YKQEAgLTYxLDIxICs2NSw2NCBAQAogICogaW51c2UgYW5kIHBlbmRpbmcgc3RhdGUg b2YgYWxsIGNsaWVudHMuLgogICovCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc21wX2xvY2sp Oworc3RydWN0IG1kcDVfc21wIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJaW50IGJs a19jbnQ7CisJaW50IGJsa19zaXplOworCisJc3BpbmxvY2tfdCBzdGF0ZV9sb2NrOworCW1kcDVf c21wX3N0YXRlX3Qgc3RhdGU7IC8qIHRvIHRyYWNrIHNtcCBhbGxvY2F0aW9uIGFtb25nc3QgcGlw ZXM6ICovCisKKwlzdHJ1Y3QgbWRwNV9jbGllbnRfc21wX3N0YXRlIGNsaWVudF9zdGF0ZVtDSURf TUFYXTsKK307CiAKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBtZHA1X2ttcyAqZ2V0X2ttcyhzdHJ1 Y3QgbWRwNV9zbXAgKnNtcCkKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gc21w LT5kZXYtPmRldl9wcml2YXRlOworCisJcmV0dXJuIHRvX21kcDVfa21zKHRvX21kcF9rbXMocHJp di0+a21zKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtZHA1X2NsaWVudF9pZCBwaXBlMmNs aWVudChlbnVtIG1kcDVfcGlwZSBwaXBlLCBpbnQgcGxhbmUpCit7CisJV0FSTl9PTihwbGFuZSA+ PSBwaXBlMm5jbGllbnRzKHBpcGUpKTsKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIFNTUFBfVklH MDogcmV0dXJuIENJRF9WSUcwX1kgKyBwbGFuZTsKKwljYXNlIFNTUFBfVklHMTogcmV0dXJuIENJ RF9WSUcxX1kgKyBwbGFuZTsKKwljYXNlIFNTUFBfVklHMjogcmV0dXJuIENJRF9WSUcyX1kgKyBw bGFuZTsKKwljYXNlIFNTUFBfUkdCMDogcmV0dXJuIENJRF9SR0IwOworCWNhc2UgU1NQUF9SR0Ix OiByZXR1cm4gQ0lEX1JHQjE7CisJY2FzZSBTU1BQX1JHQjI6IHJldHVybiBDSURfUkdCMjsKKwlj YXNlIFNTUFBfRE1BMDogcmV0dXJuIENJRF9ETUEwX1kgKyBwbGFuZTsKKwljYXNlIFNTUFBfRE1B MTogcmV0dXJuIENJRF9ETUExX1kgKyBwbGFuZTsKKwljYXNlIFNTUFBfVklHMzogcmV0dXJuIENJ RF9WSUczX1kgKyBwbGFuZTsKKwljYXNlIFNTUFBfUkdCMzogcmV0dXJuIENJRF9SR0IzOworCWRl ZmF1bHQ6ICAgICAgICByZXR1cm4gQ0lEX1VOVVNFRDsKKwl9Cit9CiAKIC8qIHN0ZXAgIzE6IHVw ZGF0ZSAjIG9mIGJsb2NrcyBwZW5kaW5nIGZvciB0aGUgY2xpZW50OiAqLwotaW50IG1kcDVfc21w X3JlcXVlc3Qoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywKK3N0YXRpYyBpbnQgc21wX3JlcXVl c3RfYmxvY2soc3RydWN0IG1kcDVfc21wICpzbXAsCiAJCWVudW0gbWRwNV9jbGllbnRfaWQgY2lk LCBpbnQgbmJsa3MpCiB7Ci0Jc3RydWN0IG1kcDVfY2xpZW50X3NtcF9zdGF0ZSAqcHMgPSAmbWRw NV9rbXMtPnNtcF9jbGllbnRfc3RhdGVbY2lkXTsKLQlpbnQgaSwgcmV0LCBhdmFpbCwgY3VyX25i bGtzLCBjbnQgPSBtZHA1X2ttcy0+c21wX2Jsa19jbnQ7CisJc3RydWN0IG1kcDVfa21zICptZHA1 X2ttcyA9IGdldF9rbXMoc21wKTsKKwlzdHJ1Y3QgbWRwNV9jbGllbnRfc21wX3N0YXRlICpwcyA9 ICZzbXAtPmNsaWVudF9zdGF0ZVtjaWRdOworCWludCBpLCByZXQsIGF2YWlsLCBjdXJfbmJsa3Ms IGNudCA9IHNtcC0+YmxrX2NudDsKKwlpbnQgcmVzZXJ2ZWQgPSBtZHA1X2ttcy0+aHdfY2ZnLT5z bXAucmVzZXJ2ZWRbY2lkXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnNtcF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtcC0+c3RhdGVf bG9jaywgZmxhZ3MpOworCisJbmJsa3MgLT0gcmVzZXJ2ZWQ7CisJaWYgKHJlc2VydmVkKQorCQlE QkcoIiVkIE1NQnMgYWxsb2NhdGVkICglZCByZXNlcnZlZCkiLCBuYmxrcywgcmVzZXJ2ZWQpOwog Ci0JYXZhaWwgPSBjbnQgLSBiaXRtYXBfd2VpZ2h0KG1kcDVfa21zLT5zbXBfc3RhdGUsIGNudCk7 CisJYXZhaWwgPSBjbnQgLSBiaXRtYXBfd2VpZ2h0KHNtcC0+c3RhdGUsIGNudCk7CiAJaWYgKG5i bGtzID4gYXZhaWwpIHsKKwkJZGV2X2VycihtZHA1X2ttcy0+ZGV2LT5kZXYsICJvdXQgb2YgYmxr cyAocmVxPSVkID4gYXZhaWw9JWQpXG4iLAorCQkJCW5ibGtzLCBhdmFpbCk7CiAJCXJldCA9IC1F Tk9TUEM7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC04NCw5ICsxMzEsOSBAQCBpbnQgbWRwNV9zbXBf cmVxdWVzdChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zLAogCWlmIChuYmxrcyA+IGN1cl9uYmxr cykgewogCQkvKiBncm93IHRoZSBleGlzdGluZyBwZW5kaW5nIHJlc2VydmF0aW9uOiAqLwogCQlm b3IgKGkgPSBjdXJfbmJsa3M7IGkgPCBuYmxrczsgaSsrKSB7Ci0JCQlpbnQgYmxrID0gZmluZF9m aXJzdF96ZXJvX2JpdChtZHA1X2ttcy0+c21wX3N0YXRlLCBjbnQpOworCQkJaW50IGJsayA9IGZp bmRfZmlyc3RfemVyb19iaXQoc21wLT5zdGF0ZSwgY250KTsKIAkJCXNldF9iaXQoYmxrLCBwcy0+ cGVuZGluZyk7Ci0JCQlzZXRfYml0KGJsaywgbWRwNV9rbXMtPnNtcF9zdGF0ZSk7CisJCQlzZXRf Yml0KGJsaywgc21wLT5zdGF0ZSk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBzaHJpbmsgdGhlIGV4 aXN0aW5nIHBlbmRpbmcgcmVzZXJ2YXRpb246ICovCkBAIC05OCwxNSArMTQ1LDg5IEBAIGludCBt ZHA1X3NtcF9yZXF1ZXN0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsCiAJfQogCiBmYWlsOgot CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtcF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmc21wLT5zdGF0ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIHNldF9maWZvX3RocmVzaG9sZHMoc3RydWN0IG1kcDVfc21wICpzbXAsCisJCWVu dW0gbWRwNV9waXBlIHBpcGUsIGludCBuYmxrcykKK3sKKwlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVf a21zID0gZ2V0X2ttcyhzbXApOworCXUzMiBzbXBfZW50cmllc19wZXJfYmxrID0gc21wLT5ibGtf c2l6ZSAvICgxMjggLyBCSVRTX1BFUl9CWVRFKTsKKwl1MzIgdmFsOworCisJLyogMS80IG9mIFNN UCBwb29sIHRoYXQgaXMgYmVpbmcgZmV0Y2hlZCAqLworCXZhbCA9IChuYmxrcyAqIHNtcF9lbnRy aWVzX3Blcl9ibGspIC8gNDsKKworCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVf UkVRUFJJT19GSUZPX1dNXzAocGlwZSksIHZhbCAqIDEpOworCW1kcDVfd3JpdGUobWRwNV9rbXMs IFJFR19NRFA1X1BJUEVfUkVRUFJJT19GSUZPX1dNXzEocGlwZSksIHZhbCAqIDIpOworCW1kcDVf d3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1BJUEVfUkVRUFJJT19GSUZPX1dNXzIocGlwZSksIHZh bCAqIDMpOworfQorCisvKgorICogTk9URTogbG9va3MgbGlrZSBpZiBob3Jpem9udGFsIGRlY2lt YXRpb24gaXMgdXNlZCAoaWYgd2Ugc3VwcG9ydGVkIHRoYXQpCisgKiB0aGVuIHRoZSB3aWR0aCB1 c2VkIHRvIGNhbGN1bGF0ZSBTTVAgYmxvY2sgcmVxdWlyZW1lbnRzIGlzIHRoZSBwb3N0LQorICog ZGVjaW1hdGVkIHdpZHRoLiAgSWUuIFNNUCBidWZmZXJpbmcgc2l0cyBkb3duc3RyZWFtIG9mIGRl Y2ltYXRpb24gKHdoaWNoCisgKiBwcmVzdW1hYmx5IGhhcHBlbnMgZHVyaW5nIHRoZSBkbWEgZnJv bSBzY2Fub3V0IGJ1ZmZlcikuCisgKi8KK2ludCBtZHA1X3NtcF9yZXF1ZXN0KHZvaWQgKmhhbmRs ZXIsIGVudW0gbWRwNV9waXBlIHBpcGUsIHUzMiBmbXQsIHUzMiB3aWR0aCkKK3sKKwlzdHJ1Y3Qg bWRwNV9zbXAgKnNtcCA9IGhhbmRsZXI7CisJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IGdl dF9rbXMoc21wKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWRwNV9rbXMtPmRldjsKKwlp bnQgaSwgaHN1YiwgbnBsYW5lcywgbmxpbmVzLCBuYmxrcywgcmV0OworCisJbnBsYW5lcyA9IGRy bV9mb3JtYXRfbnVtX3BsYW5lcyhmbXQpOworCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21h X3N1YnNhbXBsaW5nKGZtdCk7CisKKwkvKiBkaWZmZXJlbnQgaWYgQldDIChjb21wcmVzc2VkIGZy YW1lYnVmZmVyPykgZW5hYmxlZDogKi8KKwlubGluZXMgPSAyOworCisJZm9yIChpID0gMCwgbmJs a3MgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7CisJCWludCBuLCBmZXRjaF9zdHJpZGUsIGNwcDsK KworCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmbXQsIGkpOworCQlmZXRjaF9zdHJpZGUg PSB3aWR0aCAqIGNwcCAvIChpID8gaHN1YiA6IDEpOworCisJCW4gPSBESVZfUk9VTkRfVVAoZmV0 Y2hfc3RyaWRlICogbmxpbmVzLCBzbXAtPmJsa19zaXplKTsKKworCQkvKiBmb3IgaHcgcmV2IHYx LjAwICovCisJCWlmIChtZHA1X2ttcy0+cmV2ID09IDApCisJCQluID0gcm91bmR1cF9wb3dfb2Zf dHdvKG4pOworCisJCURCRygiJXNbJWRdOiByZXF1ZXN0ICVkIFNNUCBibG9ja3MiLCBwaXBlMm5h bWUocGlwZSksIGksIG4pOworCQlyZXQgPSBzbXBfcmVxdWVzdF9ibG9jayhzbXAsIHBpcGUyY2xp ZW50KHBpcGUsIGkpLCBuKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYtPmRldiwgIkNh bm5vdCBhbGxvY2F0ZSAlZCBTTVAgYmxvY2tzOiAlZFxuIiwKKwkJCQkJbiwgcmV0KTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKworCQluYmxrcyArPSBuOworCX0KKworCXNldF9maWZvX3RocmVzaG9s ZHMoc21wLCBwaXBlLCBuYmxrcyk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXBk YXRlX3NtcF9zdGF0ZShzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zLAorLyogUmVsZWFzZSBTTVAg YmxvY2tzIGZvciBhbGwgY2xpZW50cyBvZiB0aGUgcGlwZSAqLwordm9pZCBtZHA1X3NtcF9yZWxl YXNlKHZvaWQgKmhhbmRsZXIsIGVudW0gbWRwNV9waXBlIHBpcGUpCit7CisJc3RydWN0IG1kcDVf c21wICpzbXAgPSBoYW5kbGVyOworCWludCBpLCBuYmxrczsKKworCWZvciAoaSA9IDAsIG5ibGtz ID0gMDsgaSA8IHBpcGUybmNsaWVudHMocGlwZSk7IGkrKykKKwkJc21wX3JlcXVlc3RfYmxvY2so c21wLCBwaXBlMmNsaWVudChwaXBlLCBpKSwgMCk7CisJc2V0X2ZpZm9fdGhyZXNob2xkcyhzbXAs IHBpcGUsIDApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc21wX3N0YXRlKHN0cnVjdCBtZHA1 X3NtcCAqc21wLAogCQllbnVtIG1kcDVfY2xpZW50X2lkIGNpZCwgbWRwNV9zbXBfc3RhdGVfdCAq YXNzaWduZWQpCiB7Ci0JaW50IGNudCA9IG1kcDVfa21zLT5zbXBfYmxrX2NudDsKLQl1aW50MzJf dCBibGssIHZhbDsKKwlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhzbXApOwor CWludCBjbnQgPSBzbXAtPmJsa19jbnQ7CisJdTMyIGJsaywgdmFsOwogCiAJZm9yX2VhY2hfc2V0 X2JpdChibGssICphc3NpZ25lZCwgY250KSB7CiAJCWludCBpZHggPSBibGsgLyAzOwpAQCAtMTM1 LDM5ICsyNTYsODQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3NtcF9zdGF0ZShzdHJ1Y3QgbWRwNV9r bXMgKm1kcDVfa21zLAogfQogCiAvKiBzdGVwICMyOiBjb25maWd1cmUgaHcgZm9yIHVuaW9uKHBl bmRpbmcsIGludXNlKTogKi8KLXZvaWQgbWRwNV9zbXBfY29uZmlndXJlKHN0cnVjdCBtZHA1X2tt cyAqbWRwNV9rbXMsIGVudW0gbWRwNV9jbGllbnRfaWQgY2lkKQordm9pZCBtZHA1X3NtcF9jb25m aWd1cmUodm9pZCAqaGFuZGxlciwgZW51bSBtZHA1X3BpcGUgcGlwZSkKIHsKLQlzdHJ1Y3QgbWRw NV9jbGllbnRfc21wX3N0YXRlICpwcyA9ICZtZHA1X2ttcy0+c21wX2NsaWVudF9zdGF0ZVtjaWRd OwotCWludCBjbnQgPSBtZHA1X2ttcy0+c21wX2Jsa19jbnQ7CisJc3RydWN0IG1kcDVfc21wICpz bXAgPSBoYW5kbGVyOworCWludCBjbnQgPSBzbXAtPmJsa19jbnQ7CiAJbWRwNV9zbXBfc3RhdGVf dCBhc3NpZ25lZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwaXBlMm5jbGllbnRzKHBp cGUpOyBpKyspIHsKKwkJZW51bSBtZHA1X2NsaWVudF9pZCBjaWQgPSBwaXBlMmNsaWVudChwaXBl LCBpKTsKKwkJc3RydWN0IG1kcDVfY2xpZW50X3NtcF9zdGF0ZSAqcHMgPSAmc21wLT5jbGllbnRf c3RhdGVbY2lkXTsKIAotCWJpdG1hcF9vcihhc3NpZ25lZCwgcHMtPmludXNlLCBwcy0+cGVuZGlu ZywgY250KTsKLQl1cGRhdGVfc21wX3N0YXRlKG1kcDVfa21zLCBjaWQsICZhc3NpZ25lZCk7CisJ CWJpdG1hcF9vcihhc3NpZ25lZCwgcHMtPmludXNlLCBwcy0+cGVuZGluZywgY250KTsKKwkJdXBk YXRlX3NtcF9zdGF0ZShzbXAsIGNpZCwgJmFzc2lnbmVkKTsKKwl9CiB9CiAKIC8qIHN0ZXAgIzM6 IGFmdGVyIHZibGFuaywgY29weSBwZW5kaW5nIC0+IGludXNlOiAqLwotdm9pZCBtZHA1X3NtcF9j b21taXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywgZW51bSBtZHA1X2NsaWVudF9pZCBjaWQp Cit2b2lkIG1kcDVfc21wX2NvbW1pdCh2b2lkICpoYW5kbGVyLCBlbnVtIG1kcDVfcGlwZSBwaXBl KQogewotCXN0cnVjdCBtZHA1X2NsaWVudF9zbXBfc3RhdGUgKnBzID0gJm1kcDVfa21zLT5zbXBf Y2xpZW50X3N0YXRlW2NpZF07Ci0JaW50IGNudCA9IG1kcDVfa21zLT5zbXBfYmxrX2NudDsKKwlz dHJ1Y3QgbWRwNV9zbXAgKnNtcCA9IGhhbmRsZXI7CisJaW50IGNudCA9IHNtcC0+YmxrX2NudDsK IAltZHA1X3NtcF9zdGF0ZV90IHJlbGVhc2VkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IHBpcGUybmNsaWVudHMocGlwZSk7IGkrKykgeworCQllbnVtIG1kcDVfY2xpZW50X2lkIGNpZCA9 IHBpcGUyY2xpZW50KHBpcGUsIGkpOworCQlzdHJ1Y3QgbWRwNV9jbGllbnRfc21wX3N0YXRlICpw cyA9ICZzbXAtPmNsaWVudF9zdGF0ZVtjaWRdOworCisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgaWYg dGhlcmUgYXJlIGFueSBibG9ja3Mgd2Ugd2hlcmUgcHJldmlvdXNseQorCQkgKiB1c2luZywgd2hp Y2ggY2FuIGJlIHJlbGVhc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byBvdGhlcgorCQkgKiBjbGll bnRzOgorCQkgKi8KKwkJaWYgKGJpdG1hcF9hbmRub3QocmVsZWFzZWQsIHBzLT5pbnVzZSwgcHMt PnBlbmRpbmcsIGNudCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCXNwaW5fbG9j a19pcnFzYXZlKCZzbXAtPnN0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCS8qIGNsZWFyIHJlbGVhc2Vk IGJsb2NrczogKi8KKwkJCWJpdG1hcF9hbmRub3Qoc21wLT5zdGF0ZSwgc21wLT5zdGF0ZSwgcmVs ZWFzZWQsIGNudCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXAtPnN0YXRlX2xvY2ss IGZsYWdzKTsKKworCQkJdXBkYXRlX3NtcF9zdGF0ZShzbXAsIENJRF9VTlVTRUQsICZyZWxlYXNl ZCk7CisJCX0KIAotCS8qCi0JICogRmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IGJsb2NrcyB3 ZSB3aGVyZSBwcmV2aW91c2x5Ci0JICogdXNpbmcsIHdoaWNoIGNhbiBiZSByZWxlYXNlZCBhbmQg bWFkZSBhdmFpbGFibGUgdG8gb3RoZXIKLQkgKiBjbGllbnRzOgotCSAqLwotCWlmIChiaXRtYXBf YW5kbm90KHJlbGVhc2VkLCBwcy0+aW51c2UsIHBzLT5wZW5kaW5nLCBjbnQpKSB7Ci0JCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNtcF9sb2NrLCBmbGFncyk7 Ci0JCS8qIGNsZWFyIHJlbGVhc2VkIGJsb2NrczogKi8KLQkJYml0bWFwX2FuZG5vdChtZHA1X2tt cy0+c21wX3N0YXRlLCBtZHA1X2ttcy0+c21wX3N0YXRlLAotCQkJCXJlbGVhc2VkLCBjbnQpOwot CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXBfbG9jaywgZmxhZ3MpOwotCi0JCXVwZGF0ZV9z bXBfc3RhdGUobWRwNV9rbXMsIENJRF9VTlVTRUQsICZyZWxlYXNlZCk7CisJCWJpdG1hcF9jb3B5 KHBzLT5pbnVzZSwgcHMtPnBlbmRpbmcsIGNudCk7CiAJfQorfQorCit2b2lkIG1kcDVfc21wX2Rl c3Ryb3kodm9pZCAqaGFuZGxlcikKK3sKKwlzdHJ1Y3QgbWRwNV9zbXAgKnNtcCA9IGhhbmRsZXI7 CisKKwlrZnJlZShzbXApOworfQorCit2b2lkICptZHA1X3NtcF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBtZHA1X3NtcF9ibG9jayAqY2ZnKQoreworCXN0cnVjdCBt ZHA1X3NtcCAqc21wID0gTlVMTDsKKwlpbnQgcmV0OworCisJc21wID0ga3phbGxvYyhzaXplb2Yo KnNtcCksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghc21wKSkgeworCQlyZXQgPSAtRU5P TUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJc21wLT5kZXYgPSBkZXY7CisJc21wLT5ibGtfY250 ID0gY2ZnLT5tbWJfY291bnQ7CisJc21wLT5ibGtfc2l6ZSA9IGNmZy0+bW1iX3NpemU7CisKKwkv KiBzdGF0aWNhbGx5IHRpZWQgTU1CcyBjYW5ub3QgYmUgcmUtYWxsb2NhdGVkOiAqLworCWJpdG1h cF9jb3B5KHNtcC0+c3RhdGUsIGNmZy0+cmVzZXJ2ZWRfc3RhdGUsIHNtcC0+YmxrX2NudCk7CisJ c3Bpbl9sb2NrX2luaXQoJnNtcC0+c3RhdGVfbG9jayk7CisKKwlyZXR1cm4gc21wOworZmFpbDoK KwlpZiAoc21wKQorCQltZHA1X3NtcF9kZXN0cm95KHNtcCk7CiAKLQliaXRtYXBfY29weShwcy0+ aW51c2UsIHBzLT5wZW5kaW5nLCBjbnQpOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfc21wLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfc21wLmgKaW5kZXggMGFiNzM5ZS4uM2UzYzc1MyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3NtcC5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9zbXAuaApAQCAtMSw0ICsxLDUgQEAK IC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQKICAqIEF1dGhvcjog Um9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgogICoKQEAgLTIwLDEyICsyMSw2IEBACiAK ICNpbmNsdWRlICJtc21fZHJ2LmgiCiAKLSNkZWZpbmUgTUFYX1NNUF9CTE9DS1MgIDIyCi0jZGVm aW5lIFNNUF9CTEtfU0laRSAgICA0MDk2Ci0jZGVmaW5lIFNNUF9FTlRSSUVTX1BFUl9CTEsgKFNN UF9CTEtfU0laRSAvIDE2KQotCi10eXBlZGVmIERFQ0xBUkVfQklUTUFQKG1kcDVfc21wX3N0YXRl X3QsIE1BWF9TTVBfQkxPQ0tTKTsKLQogc3RydWN0IG1kcDVfY2xpZW50X3NtcF9zdGF0ZSB7CiAJ bWRwNV9zbXBfc3RhdGVfdCBpbnVzZTsKIAltZHA1X3NtcF9zdGF0ZV90IHBlbmRpbmc7CkBAIC0z Myw5ICsyOCwxOCBAQCBzdHJ1Y3QgbWRwNV9jbGllbnRfc21wX3N0YXRlIHsKIAogc3RydWN0IG1k cDVfa21zOwogCi1pbnQgbWRwNV9zbXBfcmVxdWVzdChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21z LCBlbnVtIG1kcDVfY2xpZW50X2lkIGNpZCwgaW50IG5ibGtzKTsKLXZvaWQgbWRwNV9zbXBfY29u ZmlndXJlKHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGVudW0gbWRwNV9jbGllbnRfaWQgY2lk KTsKLXZvaWQgbWRwNV9zbXBfY29tbWl0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGVudW0g bWRwNV9jbGllbnRfaWQgY2lkKTsKKy8qCisgKiBTTVAgbW9kdWxlIHByb3RvdHlwZXM6CisgKiBt ZHA1X3NtcF9pbml0KCkgcmV0dXJucyBhIFNNUCBAaGFuZGxlciwKKyAqIHdoaWNoIGlzIHRoZW4g dXNlZCB0byBjYWxsIHRoZSBvdGhlciBtZHA1X3NtcF8qKGhhbmRsZXIsIC4uLikgZnVuY3Rpb25z LgorICovCisKK3ZvaWQgKm1kcDVfc21wX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29u c3Qgc3RydWN0IG1kcDVfc21wX2Jsb2NrICpjZmcpOwordm9pZCAgbWRwNV9zbXBfZGVzdHJveSh2 b2lkICpoYW5kbGVyKTsKIAoraW50ICBtZHA1X3NtcF9yZXF1ZXN0KHZvaWQgKmhhbmRsZXIsIGVu dW0gbWRwNV9waXBlIHBpcGUsIHUzMiBmbXQsIHUzMiB3aWR0aCk7Cit2b2lkIG1kcDVfc21wX2Nv bmZpZ3VyZSh2b2lkICpoYW5kbGVyLCBlbnVtIG1kcDVfcGlwZSBwaXBlKTsKK3ZvaWQgbWRwNV9z bXBfY29tbWl0KHZvaWQgKmhhbmRsZXIsIGVudW0gbWRwNV9waXBlIHBpcGUpOwordm9pZCBtZHA1 X3NtcF9yZWxlYXNlKHZvaWQgKmhhbmRsZXIsIGVudW0gbWRwNV9waXBlIHBpcGUpOwogCiAjZW5k aWYgLyogX19NRFA1X1NNUF9IX18gKi8KLS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuCgpUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2Yg dGhlIENvZGUgQXVyb3JhIEZvcnVtLCBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQ cm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=