From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: [PATCH 01/22] drm/amdgpu: refactor MQD/HQD initialization Date: Tue, 28 Feb 2017 17:14:28 -0500 Message-ID: <1488320089-22035-2-git-send-email-andresx7@gmail.com> References: <1488320089-22035-1-git-send-email-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488320089-22035-1-git-send-email-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Andres Rodriguez VGhlIE1RRCBwcm9ncmFtbWluZyBzZXF1ZW5jZSBjdXJyZW50bHkgZXhpc3RzIGluIDMgZGlmZmVy ZW50IHBsYWNlcy4KUmVmYWN0b3IgaXQgdG8gYWJzb3JiIGFsbCB0aGUgZHVwbGljYXRlcy4KClRo ZSBzdWNjZXNzIHBhdGggcmVtYWlucyBtb3N0bHkgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgYSBzbGln aHRseQpkaWZmZXJlbnQgb3JkZXIgaW4gdGhlIG5vbi1raXEgY2FzZS4gVGhpcyBzaG91bGRuJ3Qg bWF0dGVyIGlmIHRoZSBIUUQKaXMgZGlzYWJsZWQuCgpUaGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMg aGF2ZSBiZWVuIHVwZGF0ZWQgdG8gZGVhbCB3aXRoIHRoZSBuZXcgY29kZQpzdHJ1Y3R1cmUuCgpT aWduZWQtb2ZmLWJ5OiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4N0BnbWFpbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyB8IDQ0NyArKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhf MC5jIHwgNDE3ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMzg3IGluc2VydGlvbnMoKyksIDQ3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZ2Z4X3Y3XzAuYwppbmRleCAxZjkzNTQ1Li44ZTFlNjAxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2dmeF92N18wLmMKQEAgLTQyLDIwICs0MiwyMiBAQAogI2luY2x1ZGUgImdjYS9n ZnhfN18yX3NoX21hc2suaCIKIAogI2luY2x1ZGUgImdtYy9nbWNfN18wX2QuaCIKICNpbmNsdWRl ICJnbWMvZ21jXzdfMF9zaF9tYXNrLmgiCiAKICNpbmNsdWRlICJvc3Mvb3NzXzJfMF9kLmgiCiAj aW5jbHVkZSAib3NzL29zc18yXzBfc2hfbWFzay5oIgogCiAjZGVmaW5lIEdGWDdfTlVNX0dGWF9S SU5HUyAgICAgMQogI2RlZmluZSBHRlg3X05VTV9DT01QVVRFX1JJTkdTIDgKKyNkZWZpbmUgR0ZY N19NRUNfSFBEX1NJWkUgICAgICAyMDQ4CisKIAogc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfc2V0X3Jp bmdfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogc3RhdGljIHZvaWQgZ2Z4X3Y3 XzBfc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9p ZCBnZnhfdjdfMF9zZXRfZ2RzX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogCiBN T0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX3BmcC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FS RSgicmFkZW9uL2JvbmFpcmVfbWUuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25h aXJlX2NlLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vYm9uYWlyZV9ybGMuYmluIik7 CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX21lYy5iaW4iKTsKQEAgLTI3OTIsNDAg KzI3OTQsMzggQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfbWVjX2Zpbmkoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCiAJCWlmICh1bmxpa2VseShyICE9IDApKQogCQkJZGV2X3dhcm4oYWRldi0+ ZGV2LCAiKCVkKSByZXNlcnZlIEhQRCBFT1AgYm8gZmFpbGVkXG4iLCByKTsKIAkJYW1kZ3B1X2Jv X3VucGluKGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwogCQlhbWRncHVfYm9fdW5yZXNlcnZl KGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwogCiAJCWFtZGdwdV9ib191bnJlZigmYWRldi0+ Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CiAJCWFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmogPSBOVUxM OwogCX0KIH0KIAotI2RlZmluZSBNRUNfSFBEX1NJWkUgMjA0OAotCiBzdGF0aWMgaW50IGdmeF92 N18wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewogCWludCByOwogCXUz MiAqaHBkOwogCiAJLyoKIAkgKiBLVjogICAgMiBNRUMsIDQgUGlwZXMvTUVDLCA4IFF1ZXVlcy9Q aXBlIC0gNjQgUXVldWVzIHRvdGFsCiAJICogQ0kvS0I6IDEgTUVDLCA0IFBpcGVzL01FQywgOCBR dWV1ZXMvUGlwZSAtIDMyIFF1ZXVlcyB0b3RhbAogCSAqIE5vbmV0aGVsZXNzLCB3ZSBhc3NpZ24g b25seSAxIHBpcGUgYmVjYXVzZSBhbGwgb3RoZXIgcGlwZXMgd2lsbAogCSAqIGJlIGhhbmRsZWQg YnkgS0ZECiAJICovCiAJYWRldi0+Z2Z4Lm1lYy5udW1fbWVjID0gMTsKIAlhZGV2LT5nZngubWVj Lm51bV9waXBlID0gMTsKIAlhZGV2LT5nZngubWVjLm51bV9xdWV1ZSA9IGFkZXYtPmdmeC5tZWMu bnVtX21lYyAqIGFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiA4OwogCiAJaWYgKGFkZXYtPmdmeC5t ZWMuaHBkX2VvcF9vYmogPT0gTlVMTCkgewogCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAot CQkJCSAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjICphZGV2LT5nZngubWVjLm51bV9waXBlICog TUVDX0hQRF9TSVpFICogMiwKKwkJCQkgICAgIGFkZXYtPmdmeC5tZWMubnVtX21lYyAqIGFkZXYt PmdmeC5tZWMubnVtX3BpcGUgKiBHRlg3X01FQ19IUERfU0laRSAqIDIsCiAJCQkJICAgICBQQUdF X1NJWkUsIHRydWUsCiAJCQkJICAgICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5V TEwsCiAJCQkJICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CiAJCWlmIChyKSB7CiAJ CQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIGNyZWF0ZSBIRFAgRU9QIGJvIGZhaWxlZFxuIiwg cik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KIAogCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShhZGV2 LT5nZngubWVjLmhwZF9lb3Bfb2JqLCBmYWxzZSk7CkBAIC0yODQxLDIxICsyODQxLDIxIEBAIHN0 YXRpYyBpbnQgZ2Z4X3Y3XzBfbWVjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJ CXJldHVybiByOwogCX0KIAlyID0gYW1kZ3B1X2JvX2ttYXAoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9w X29iaiwgKHZvaWQgKiopJmhwZCk7CiAJaWYgKHIpIHsKIAkJZGV2X3dhcm4oYWRldi0+ZGV2LCAi KCVkKSBtYXAgSERQIEVPUCBibyBmYWlsZWRcbiIsIHIpOwogCQlnZnhfdjdfMF9tZWNfZmluaShh ZGV2KTsKIAkJcmV0dXJuIHI7CiAJfQogCiAJLyogY2xlYXIgbWVtb3J5LiAgTm90IHN1cmUgaWYg dGhpcyBpcyByZXF1aXJlZCBvciBub3QgKi8KLQltZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVj Lm51bV9tZWMgKmFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiBNRUNfSFBEX1NJWkUgKiAyKTsKKwlt ZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVjLm51bV9tZWMgKiBhZGV2LT5nZngubWVjLm51bV9w aXBlICogR0ZYN19NRUNfSFBEX1NJWkUgKiAyKTsKIAogCWFtZGdwdV9ib19rdW5tYXAoYWRldi0+ Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CiAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShhZGV2LT5nZngubWVj LmhwZF9lb3Bfb2JqKTsKIAogCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgaHFkX3JlZ2lzdGVycwog ewogCXUzMiBjcF9tcWRfYmFzZV9hZGRyOwpAQCAtMjkxNiwyNjEgKzI5MTYsMjk2IEBAIHN0cnVj dCBib25haXJlX21xZAogCXUzMiByZXN0YXJ0WzNdOwogCXUzMiB0aHJlYWRfdHJhY2VfZW5hYmxl OwogCXUzMiByZXNlcnZlZDE7CiAJdTMyIHVzZXJfZGF0YVsxNl07CiAJdTMyIHZndGNzX2ludm9r ZV9jb3VudFsyXTsKIAlzdHJ1Y3QgaHFkX3JlZ2lzdGVycyBxdWV1ZV9zdGF0ZTsKIAl1MzIgZGVx dWV1ZV9jbnRyOwogCXUzMiBpbnRlcnJ1cHRfcXVldWVbNjRdOwogfTsKIAotLyoqCi0gKiBnZnhf djdfMF9jcF9jb21wdXRlX3Jlc3VtZSAtIHNldHVwIHRoZSBjb21wdXRlIHF1ZXVlIHJlZ2lzdGVy cwotICoKLSAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKLSAqCi0gKiBQcm9ncmFtIHRo ZSBjb21wdXRlIHF1ZXVlcyBhbmQgdGVzdCB0aGVtIHRvIG1ha2Ugc3VyZSB0aGV5Ci0gKiBhcmUg d29ya2luZy4KLSAqIFJldHVybnMgMCBmb3Igc3VjY2VzcywgZXJyb3IgZm9yIGZhaWx1cmUuCi0g Ki8KLXN0YXRpYyBpbnQgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCitzdGF0aWMgdm9pZCBnZnhfdjdfMF9jb21wdXRlX3BpcGVfaW5pdChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IG1lLCBpbnQgcGlwZSkKIHsKLQlpbnQgciwgaSwg ajsKLQl1MzIgdG1wOwotCWJvb2wgdXNlX2Rvb3JiZWxsID0gdHJ1ZTsKLQl1NjQgaHFkX2dwdV9h ZGRyOwotCXU2NCBtcWRfZ3B1X2FkZHI7CiAJdTY0IGVvcF9ncHVfYWRkcjsKLQl1NjQgd2JfZ3B1 X2FkZHI7Ci0JdTMyICpidWY7Ci0Jc3RydWN0IGJvbmFpcmVfbXFkICptcWQ7Ci0Jc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nOwotCi0JLyogZml4IHVwIGNoaWNrZW4gYml0cyAqLwotCXRtcCA9IFJS RUczMihtbUNQX0NQRl9ERUJVRyk7Ci0JdG1wIHw9ICgxIDw8IDIzKTsKLQlXUkVHMzIobW1DUF9D UEZfREVCVUcsIHRtcCk7CisJdTMyIHRtcDsKKwlzaXplX3QgZW9wX29mZnNldCA9IG1lICogcGlw ZSAqIEdGWDdfTUVDX0hQRF9TSVpFICogMjsKIAotCS8qIGluaXQgdGhlIHBpcGVzICovCiAJbXV0 ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IChhZGV2LT5nZngu bWVjLm51bV9waXBlICogYWRldi0+Z2Z4Lm1lYy5udW1fbWVjKTsgaSsrKSB7Ci0JCWludCBtZSA9 IChpIDwgNCkgPyAxIDogMjsKLQkJaW50IHBpcGUgPSAoaSA8IDQpID8gaSA6IChpIC0gNCk7CisJ ZW9wX2dwdV9hZGRyID0gYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX2dwdV9hZGRyICsgZW9wX29mZnNl dDsKIAotCQllb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAo aSAqIE1FQ19IUERfU0laRSAqIDIpOworCWNpa19zcmJtX3NlbGVjdChhZGV2LCBtZSwgcGlwZSwg MCwgMCk7CiAKLQkJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIG1lLCBwaXBlLCAwLCAwKTsKKwkvKiB3 cml0ZSB0aGUgRU9QIGFkZHIgKi8KKwlXUkVHMzIobW1DUF9IUERfRU9QX0JBU0VfQUREUiwgZW9w X2dwdV9hZGRyID4+IDgpOworCVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSX0hJLCB1cHBl cl8zMl9iaXRzKGVvcF9ncHVfYWRkcikgPj4gOCk7CiAKLQkJLyogd3JpdGUgdGhlIEVPUCBhZGRy ICovCi0JCVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSLCBlb3BfZ3B1X2FkZHIgPj4gOCk7 Ci0JCVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKGVvcF9n cHVfYWRkcikgPj4gOCk7CisJLyogc2V0IHRoZSBWTUlEIGFzc2lnbmVkICovCisJV1JFRzMyKG1t Q1BfSFBEX0VPUF9WTUlELCAwKTsKIAotCQkvKiBzZXQgdGhlIFZNSUQgYXNzaWduZWQgKi8KLQkJ V1JFRzMyKG1tQ1BfSFBEX0VPUF9WTUlELCAwKTsKKwkvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdp c3RlciB2YWx1ZSBpcyAyXihFT1BfU0laRSsxKSBkd29yZHMgKi8KKwl0bXAgPSBSUkVHMzIobW1D UF9IUERfRU9QX0NPTlRST0wpOworCXRtcCAmPSB+Q1BfSFBEX0VPUF9DT05UUk9MX19FT1BfU0la RV9NQVNLOworCXRtcCB8PSBvcmRlcl9iYXNlXzIoR0ZYN19NRUNfSFBEX1NJWkUgLyA4KTsKKwlX UkVHMzIobW1DUF9IUERfRU9QX0NPTlRST0wsIHRtcCk7CiAKLQkJLyogc2V0IHRoZSBFT1Agc2l6 ZSwgcmVnaXN0ZXIgdmFsdWUgaXMgMl4oRU9QX1NJWkUrMSkgZHdvcmRzICovCi0JCXRtcCA9IFJS RUczMihtbUNQX0hQRF9FT1BfQ09OVFJPTCk7Ci0JCXRtcCAmPSB+Q1BfSFBEX0VPUF9DT05UUk9M X19FT1BfU0laRV9NQVNLOwotCQl0bXAgfD0gb3JkZXJfYmFzZV8yKE1FQ19IUERfU0laRSAvIDgp OwotCQlXUkVHMzIobW1DUF9IUERfRU9QX0NPTlRST0wsIHRtcCk7Ci0JfQogCWNpa19zcmJtX3Nl bGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKIAltdXRleF91bmxvY2soJmFkZXYtPnNyYm1fbXV0ZXgp OworfQogCi0JLyogaW5pdCB0aGUgcXVldWVzLiAgSnVzdCB0d28gZm9yIG5vdy4gKi8KLQlmb3Ig KGkgPSAwOyBpIDwgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzOyBpKyspIHsKLQkJcmluZyA9 ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOworc3RhdGljIGludCBnZnhfdjdfMF9tcWRfZGVh Y3RpdmF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpbnQgaTsKIAotCQlpZiAo cmluZy0+bXFkX29iaiA9PSBOVUxMKSB7Ci0JCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAot CQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYm9uYWlyZV9tcWQpLAotCQkJCQkgICAgIFBBR0VfU0la RSwgdHJ1ZSwKLQkJCQkJICAgICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEws Ci0JCQkJCSAgICAgJnJpbmctPm1xZF9vYmopOwotCQkJaWYgKHIpIHsKLQkJCQlkZXZfd2Fybihh ZGV2LT5kZXYsICIoJWQpIGNyZWF0ZSBNUUQgYm8gZmFpbGVkXG4iLCByKTsKLQkJCQlyZXR1cm4g cjsKLQkJCX0KKwkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFjdGl2ZSAqLworCWlmIChS UkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIDEpIHsKKwkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVf UkVRVUVTVCwgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykg eworCQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKKwkJCQlicmVhazsKKwkJ CXVkZWxheSgxKTsKIAkJfQogCi0JCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShyaW5nLT5tcWRfb2Jq LCBmYWxzZSk7Ci0JCWlmICh1bmxpa2VseShyICE9IDApKSB7Ci0JCQlnZnhfdjdfMF9jcF9jb21w dXRlX2ZpbmkoYWRldik7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyID0gYW1kZ3B1X2JvX3Bpbihy aW5nLT5tcWRfb2JqLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQsCi0JCQkJICAmbXFkX2dwdV9hZGRy KTsKLQkJaWYgKHIpIHsKLQkJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgcGluIE1RRCBibyBm YWlsZWRcbiIsIHIpOwotCQkJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9maW5pKGFkZXYpOwotCQkJcmV0 dXJuIHI7Ci0JCX0KLQkJciA9IGFtZGdwdV9ib19rbWFwKHJpbmctPm1xZF9vYmosICh2b2lkICoq KSZidWYpOwotCQlpZiAocikgewotCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAgTVFE IGJvIGZhaWxlZFxuIiwgcik7Ci0JCQlnZnhfdjdfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7Ci0J CQlyZXR1cm4gcjsKLQkJfQorCQlpZiAoaSA9PSBhZGV2LT51c2VjX3RpbWVvdXQpCisJCQlyZXR1 cm4gLUVUSU1FRE9VVDsKIAotCQkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCi0JCW1lbXNldChi dWYsIDAsIHNpemVvZihzdHJ1Y3QgYm9uYWlyZV9tcWQpKTsKKwkJV1JFRzMyKG1tQ1BfSFFEX0RF UVVFVUVfUkVRVUVTVCwgMCk7CisJCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCAwKTsKKwkJV1JF RzMyKG1tQ1BfSFFEX1BRX1dQVFIsIDApOworCX0KIAotCQltcWQgPSAoc3RydWN0IGJvbmFpcmVf bXFkICopYnVmOwotCQltcWQtPmhlYWRlciA9IDB4QzAzMTA4MDA7Ci0JCW1xZC0+c3RhdGljX3Ro cmVhZF9tZ210MDFbMF0gPSAweGZmZmZmZmZmOwotCQltcWQtPnN0YXRpY190aHJlYWRfbWdtdDAx WzFdID0gMHhmZmZmZmZmZjsKLQkJbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQyM1swXSA9IDB4ZmZm ZmZmZmY7Ci0JCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MjNbMV0gPSAweGZmZmZmZmZmOworCXJl dHVybiAwOworfQogCi0JCW11dGV4X2xvY2soJmFkZXYtPnNyYm1fbXV0ZXgpOwotCQljaWtfc3Ji bV9zZWxlY3QoYWRldiwgcmluZy0+bWUsCi0JCQkJcmluZy0+cGlwZSwKLQkJCQlyaW5nLT5xdWV1 ZSwgMCk7CitzdGF0aWMgdm9pZCBnZnhfdjdfMF9tcWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKKwkJCSAgICAgc3RydWN0IGJvbmFpcmVfbXFkICptcWQsCisJCQkgICAgIHVpbnQ2 NF90IG1xZF9ncHVfYWRkciwKKwkJCSAgICAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQorewor CXU2NCBocWRfZ3B1X2FkZHI7CisJdTY0IHdiX2dwdV9hZGRyOwogCi0JCS8qIGRpc2FibGUgd3B0 ciBwb2xsaW5nICovCi0JCXRtcCA9IFJSRUczMihtbUNQX1BRX1dQVFJfUE9MTF9DTlRMKTsKLQkJ dG1wICY9IH5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSzsKLQkJV1JFRzMyKG1tQ1BfUFFf V1BUUl9QT0xMX0NOVEwsIHRtcCk7CisJLyogaW5pdCB0aGUgbXFkIHN0cnVjdCAqLworCW1lbXNl dChtcWQsIDAsIHNpemVvZihzdHJ1Y3QgYm9uYWlyZV9tcWQpKTsKIAotCQkvKiBlbmFibGUgZG9v cmJlbGw/ICovCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wg PQotCQkJUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwotCQlpZiAodXNlX2Rv b3JiZWxsKQotCQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8 PSBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKLQkJZWxzZQot CQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCAmPSB+Q1BfSFFE X1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7Ci0JCVdSRUczMihtbUNQX0hR RF9QUV9ET09SQkVMTF9DT05UUk9MLAotCQkgICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfZG9vcmJlbGxfY29udHJvbCk7Ci0KLQkJLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBh Y3RpdmUgKi8KLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0ID0gMDsK LQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0ciA9IDA7Ci0JCW1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX3dwdHI9IDA7Ci0JCWlmIChSUkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIDEp IHsKLQkJCVdSRUczMihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDEpOwotCQkJZm9yIChqID0g MDsgaiA8IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Ci0JCQkJaWYgKCEoUlJFRzMyKG1tQ1Bf SFFEX0FDVElWRSkgJiAxKSkKLQkJCQkJYnJlYWs7Ci0JCQkJdWRlbGF5KDEpOwotCQkJfQotCQkJ V1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf ZGVxdWV1ZV9yZXF1ZXN0KTsKLQkJCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCBtcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9ycHRyKTsKLQkJCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyKTsKLQkJfQorCW1xZC0+aGVhZGVyID0gMHhDMDMx MDgwMDsKKwltcWQtPnN0YXRpY190aHJlYWRfbWdtdDAxWzBdID0gMHhmZmZmZmZmZjsKKwltcWQt PnN0YXRpY190aHJlYWRfbWdtdDAxWzFdID0gMHhmZmZmZmZmZjsKKwltcWQtPnN0YXRpY190aHJl YWRfbWdtdDIzWzBdID0gMHhmZmZmZmZmZjsKKwltcWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzFd ID0gMHhmZmZmZmZmZjsKIAotCQkvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIE1RRCAqLwotCQlt cWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHIgPSBtcWRfZ3B1X2FkZHIgJiAweGZmZmZm ZmZjOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBlcl8zMl9i aXRzKG1xZF9ncHVfYWRkcik7Ci0JCVdSRUczMihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+cXVl dWVfc3RhdGUuY3BfbXFkX2Jhc2VfYWRkcik7Ci0JCVdSRUczMihtbUNQX01RRF9CQVNFX0FERFJf SEksIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2Jhc2VfYWRkcl9oaSk7Ci0JCS8qIHNldCBNUUQg dm1pZCB0byAwICovCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wgPSBSUkVHMzIo bW1DUF9NUURfQ09OVFJPTCk7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wgJj0g fkNQX01RRF9DT05UUk9MX19WTUlEX01BU0s7Ci0JCVdSRUczMihtbUNQX01RRF9DT05UUk9MLCBt cWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sKTsKLQotCQkvKiBzZXQgdGhlIHBvaW50ZXIg dG8gdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIENQX1JCMF9CQVNFL19ISSAqLwotCQlocWRfZ3B1 X2FkZHIgPSByaW5nLT5ncHVfYWRkciA+PiA4OwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9iYXNlID0gaHFkX2dwdV9hZGRyOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNl X2hpID0gdXBwZXJfMzJfYml0cyhocWRfZ3B1X2FkZHIpOwotCQlXUkVHMzIobW1DUF9IUURfUFFf QkFTRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZSk7Ci0JCVdSRUczMihtbUNQX0hR RF9QUV9CQVNFX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlX2hpKTsKLQotCQkv KiBzZXQgdXAgdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIHRvIENQX1JCMF9DTlRMICovCi0JCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgPSBSUkVHMzIobW1DUF9IUURfUFFfQ09O VFJPTCk7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgJj0KLQkJCX4oQ1Bf SFFEX1BRX0NPTlRST0xfX1FVRVVFX1NJWkVfTUFTSyB8Ci0JCQkJCUNQX0hRRF9QUV9DT05UUk9M X19SUFRSX0JMT0NLX1NJWkVfTUFTSyk7Ci0KLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf Y29udHJvbCB8PQotCQkJb3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSAvIDgpOwotCQltcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9Ci0JCQkob3JkZXJfYmFzZV8yKEFNREdQ VV9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpOworCS8qIGVuYWJsZSBkb29yYmVsbD8gKi8KKwltcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0KKwkJUlJFRzMyKG1tQ1Bf SFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOworCWlmIChyaW5nLT51c2VfZG9vcmJlbGwpCisJCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgfD0gQ1BfSFFEX1BRX0RP T1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7CisJZWxzZQorCQltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9IH5DUF9IUURfUFFfRE9PUkJFTExfQ09O VFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKKworCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFE ICovCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyID0gbXFkX2dwdV9hZGRyICYg MHhmZmZmZmZmYzsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBl cl8zMl9iaXRzKG1xZF9ncHVfYWRkcik7CisKKwkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLworCW1x ZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wgPSBSUkVHMzIobW1DUF9NUURfQ09OVFJPTCk7 CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJvbCAmPSB+Q1BfTVFEX0NPTlRST0xfX1ZN SURfTUFTSzsKKworCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgSFFELCB0aGlzIGlzIHNpbWls YXIgQ1BfUkIwX0JBU0UvX0hJICovCisJaHFkX2dwdV9hZGRyID0gcmluZy0+Z3B1X2FkZHIgPj4g ODsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlID0gaHFkX2dwdV9hZGRyOworCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKGhxZF9ncHVf YWRkcik7CisKKwkvKiBzZXQgdXAgdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIHRvIENQX1JCMF9D TlRMICovCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCA9IFJSRUczMihtbUNQ X0hRRF9QUV9DT05UUk9MKTsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9 CisJCX4oQ1BfSFFEX1BRX0NPTlRST0xfX1FVRVVFX1NJWkVfTUFTSyB8CisJCQkJQ1BfSFFEX1BR X0NPTlRST0xfX1JQVFJfQkxPQ0tfU0laRV9NQVNLKTsKKworCW1xZC0+cXVldWVfc3RhdGUuY3Bf aHFkX3BxX2NvbnRyb2wgfD0KKwkJb3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSAvIDgpOwor CW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KKwkJKG9yZGVyX2Jhc2VfMihB TURHUFVfR1BVX1BBR0VfU0laRS84KSA8PCA4KTsKICNpZmRlZiBfX0JJR19FTkRJQU4KLQkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQotCQkJMiA8PCBDUF9IUURfUFFfQ09O VFJPTF9fRU5ESUFOX1NXQVBfX1NISUZUOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Nv bnRyb2wgfD0KKwkJMiA8PCBDUF9IUURfUFFfQ09OVFJPTF9fRU5ESUFOX1NXQVBfX1NISUZUOwog I2VuZGlmCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgJj0KLQkJCX4oQ1Bf SFFEX1BRX0NPTlRST0xfX1VOT1JEX0RJU1BBVENIX01BU0sgfAorCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2NvbnRyb2wgJj0KKwkJfihDUF9IUURfUFFfQ09OVFJPTF9fVU5PUkRfRElTUEFU Q0hfTUFTSyB8CiAJCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1JPUV9QUV9JQl9GTElQX01BU0sgfAog CQkJCUNQX0hRRF9QUV9DT05UUk9MX19QUV9WT0xBVElMRV9NQVNLKTsKLQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQotCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1BSSVZfU1RB VEVfTUFTSyB8Ci0JCQlDUF9IUURfUFFfQ09OVFJPTF9fS01EX1FVRVVFX01BU0s7IC8qIGFzc3Vt aW5nIGtlcm5lbCBxdWV1ZSBjb250cm9sICovCi0JCVdSRUczMihtbUNQX0hRRF9QUV9DT05UUk9M LCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sKTsKLQotCQkvKiBvbmx5IHVzZWQg aWYgQ1BfUFFfV1BUUl9QT0xMX0NOVEwuQ1BfUFFfV1BUUl9QT0xMX0NOVExfX0VOX01BU0s9MSAq LwotCQl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPndwdHJfb2ZmcyAq IDQpOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkciA9IHdiX2dw dV9hZGRyICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9w b2xsX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAmIDB4ZmZmZjsKLQkJV1JF RzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV93cHRyX3BvbGxfYWRkcik7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQUREUl9I SSwKLQkJICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2hp KTsKLQotCQkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2V0aGVyIGl0J3MgZW5hYmxlZCBvciBub3Qg Ki8KLQkJd2JfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciArIChyaW5nLT5ycHRyX29mZnMg KiA0KTsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkciA9IHdi X2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0 cl9yZXBvcnRfYWRkcl9oaSA9Ci0JCQl1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAmIDB4ZmZm ZjsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIsCi0JCSAgICAgICBtcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyKTsKLQkJV1JFRzMyKG1tQ1Bf SFFEX1BRX1JQVFJfUkVQT1JUX0FERFJfSEksCi0JCSAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKLQotCQkvKiBlbmFibGUgdGhlIGRvb3JiZWxs IGlmIHJlcXVlc3RlZCAqLwotCQlpZiAodXNlX2Rvb3JiZWxsKSB7Ci0JCQltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0KLQkJCQlSUkVHMzIobW1DUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTCk7Ci0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVs bF9jb250cm9sICY9Ci0JCQkJfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9P RkZTRVRfTUFTSzsKLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRy b2wgfD0KLQkJCQkocmluZy0+ZG9vcmJlbGxfaW5kZXggPDwKLQkJCQkgQ1BfSFFEX1BRX0RPT1JC RUxMX0NPTlRST0xfX0RPT1JCRUxMX09GRlNFVF9fU0hJRlQpOwotCQkJbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQotCQkJCUNQX0hRRF9QUV9ET09SQkVMTF9D T05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwotCQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf ZG9vcmJlbGxfY29udHJvbCAmPQotCQkJCX4oQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RP T1JCRUxMX1NPVVJDRV9NQVNLIHwKLQkJCQlDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9P UkJFTExfSElUX01BU0spOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0K KwkJQ1BfSFFEX1BRX0NPTlRST0xfX1BSSVZfU1RBVEVfTUFTSyB8CisJCUNQX0hRRF9QUV9DT05U Uk9MX19LTURfUVVFVUVfTUFTSzsgLyogYXNzdW1pbmcga2VybmVsIHF1ZXVlIGNvbnRyb2wgKi8K IAotCQl9IGVsc2UgewotCQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29u dHJvbCA9IDA7CisJLyogb25seSB1c2VkIGlmIENQX1BRX1dQVFJfUE9MTF9DTlRMLkNQX1BRX1dQ VFJfUE9MTF9DTlRMX19FTl9NQVNLPTEgKi8KKwl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9h ZGRyICsgKHJpbmctPndwdHJfb2ZmcyAqIDQpOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X3dwdHJfcG9sbF9hZGRyID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOworCW1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyh3Yl9ncHVf YWRkcikgJiAweGZmZmY7CisKKwkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2V0aGVyIGl0J3MgZW5h YmxlZCBvciBub3QgKi8KKwl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmct PnJwdHJfb2ZmcyAqIDQpOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0 X2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSA9CisJCXVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIp ICYgMHhmZmZmOworCisJLyogZW5hYmxlIHRoZSBkb29yYmVsbCBpZiByZXF1ZXN0ZWQgKi8KKwlp ZiAocmluZy0+dXNlX2Rvb3JiZWxsKSB7CisJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rv b3JiZWxsX2NvbnRyb2wgPQorCQkJUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wp OworCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9CisJCQl+ Q1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX09GRlNFVF9NQVNLOworCQltcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sIHw9CisJCQkocmluZy0+ZG9v cmJlbGxfaW5kZXggPDwKKwkJCSBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExf T0ZGU0VUX19TSElGVCk7CisJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2Nv bnRyb2wgfD0KKwkJCUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNL OworCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9CisJCQl+ KENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9TT1VSQ0VfTUFTSyB8CisJCQkJ CUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9ISVRfTUFTSyk7CisKKwl9IGVs c2UgeworCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gMDsK Kwl9CisKKwkvKiByZWFkIGFuZCB3cml0ZSBwb2ludGVycywgc2ltaWxhciB0byBDUF9SQjBfV1BU Ui9fUlBUUiAqLworCXJpbmctPndwdHIgPSAwOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X3dwdHIgPSByaW5nLT53cHRyOworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHIgPSBS UkVHMzIobW1DUF9IUURfUFFfUlBUUik7CisKKwkvKiBzZXQgdGhlIHZtaWQgZm9yIHRoZSBxdWV1 ZSAqLworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3ZtaWQgPSAwOworCisJLyogYWN0aXZhdGUg dGhlIHF1ZXVlICovCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlID0gMTsKK30KKwor c3RhdGljIGludCBnZnhfdjdfMF9tcWRfY29tbWl0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAorCQkJICAgICAgIHN0cnVjdCBib25haXJlX21xZCAqbXFkKQoreworCXUzMiB0bXA7CisKKwkv KiBkaXNhYmxlIHdwdHIgcG9sbGluZyAqLworCXRtcCA9IFJSRUczMihtbUNQX1BRX1dQVFJfUE9M TF9DTlRMKTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfUFFfV1BUUl9QT0xMX0NOVEws IEVOLCAwKTsKKwlXUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCwgdG1wKTsKKworCS8qIHBy b2dyYW0gTVFEIGZpZWxkIHRvIEhXICovCisJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUiwgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyKTsKKwlXUkVHMzIobW1DUF9NUURfQkFTRV9B RERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkpOworCVdSRUczMiht bUNQX01RRF9DT05UUk9MLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sKTsKKwlXUkVH MzIobW1DUF9IUURfUFFfQkFTRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZSk7CisJ V1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jh c2VfaGkpOworCVdSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MLCBtcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9jb250cm9sKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFIsIG1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyKTsKKwlXUkVHMzIobW1DUF9I UURfUFFfV1BUUl9QT0xMX0FERFJfSEksIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHJf cG9sbF9hZGRyX2hpKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUiwgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcik7CisJV1JFRzMyKG1tQ1Bf SFFEX1BRX1JQVFJfUkVQT1JUX0FERFJfSEksIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3Jw dHJfcmVwb3J0X2FkZHJfaGkpOworCVdSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9M LCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKKwlXUkVHMzIo bW1DUF9IUURfUFFfV1BUUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cik7CisJV1JF RzMyKG1tQ1BfSFFEX1ZNSUQsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3ZtaWQpOworCisJLyog YWN0aXZhdGUgdGhlIEhRRCAqLworCVdSRUczMihtbUNQX0hRRF9BQ1RJVkUsIG1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX2FjdGl2ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZnhf djdfMF9jb21wdXRlX3F1ZXVlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCBy aW5nX2lkKQoreworCWludCByOworCXU2NCBtcWRfZ3B1X2FkZHI7CisJc3RydWN0IGJvbmFpcmVf bXFkICptcWQ7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRl X3JpbmdbcmluZ19pZF07CisKKwlpZiAocmluZy0+bXFkX29iaiA9PSBOVUxMKSB7CisJCXIgPSBh bWRncHVfYm9fY3JlYXRlKGFkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBib25haXJlX21xZCksCisJ CQkJUEFHRV9TSVpFLCB0cnVlLAorCQkJCUFNREdQVV9HRU1fRE9NQUlOX0dUVCwgMCwgTlVMTCwg TlVMTCwKKwkJCQkmcmluZy0+bXFkX29iaik7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihhZGV2 LT5kZXYsICIoJWQpIGNyZWF0ZSBNUUQgYm8gZmFpbGVkXG4iLCByKTsKKwkJCXJldHVybiByOwog CQl9Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAotCQkgICAgICAgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCk7CisJfQorCisJciA9IGFt ZGdwdV9ib19yZXNlcnZlKHJpbmctPm1xZF9vYmosIGZhbHNlKTsKKwlpZiAodW5saWtlbHkociAh PSAwKSkKKwkJZ290byBvdXQ7CisKKwlyID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5tcWRfb2JqLCBB TURHUFVfR0VNX0RPTUFJTl9HVFQsCisJCQkmbXFkX2dwdV9hZGRyKTsKKwlpZiAocikgeworCQlk ZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIHBpbiBNUUQgYm8gZmFpbGVkXG4iLCByKTsKKwkJZ290 byBvdXRfdW5yZXNlcnZlOworCX0KKwlyID0gYW1kZ3B1X2JvX2ttYXAocmluZy0+bXFkX29iaiwg KHZvaWQgKiopJm1xZCk7CisJaWYgKHIpIHsKKwkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBt YXAgTVFEIGJvIGZhaWxlZFxuIiwgcik7CisJCWdvdG8gb3V0X3VucmVzZXJ2ZTsKKwl9CisKKwlt dXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKKwljaWtfc3JibV9zZWxlY3QoYWRldiwgcmlu Zy0+bWUsIHJpbmctPnBpcGUsIHJpbmctPnF1ZXVlLCAwKTsKIAotCQkvKiByZWFkIGFuZCB3cml0 ZSBwb2ludGVycywgc2ltaWxhciB0byBDUF9SQjBfV1BUUi9fUlBUUiAqLwotCQlyaW5nLT53cHRy ID0gMDsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0ciA9IHJpbmctPndwdHI7Ci0J CVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRy KTsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0ciA9IFJSRUczMihtbUNQX0hRRF9Q UV9SUFRSKTsKKwlnZnhfdjdfMF9tcWRfaW5pdChhZGV2LCBtcWQsIG1xZF9ncHVfYWRkciwgcmlu Zyk7CisJZ2Z4X3Y3XzBfbXFkX2RlYWN0aXZhdGUoYWRldik7CisJZ2Z4X3Y3XzBfbXFkX2NvbW1p dChhZGV2LCBtcWQpOwogCi0JCS8qIHNldCB0aGUgdm1pZCBmb3IgdGhlIHF1ZXVlICovCi0JCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3ZtaWQgPSAwOwotCQlXUkVHMzIobW1DUF9IUURfVk1JRCwg bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfdm1pZCk7CisJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAs IDAsIDAsIDApOworCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7CiAKLQkJLyogYWN0 aXZhdGUgdGhlIHF1ZXVlICovCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX2FjdGl2ZSA9IDE7 Ci0JCVdSRUczMihtbUNQX0hRRF9BQ1RJVkUsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX2FjdGl2 ZSk7CisJYW1kZ3B1X2JvX2t1bm1hcChyaW5nLT5tcWRfb2JqKTsKK291dF91bnJlc2VydmU6CisJ YW1kZ3B1X2JvX3VucmVzZXJ2ZShyaW5nLT5tcWRfb2JqKTsKK291dDoKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBnZnhfdjdfMF9jcF9jb21wdXRlX3Jlc3VtZSAtIHNldHVwIHRoZSBjb21wdXRl IHF1ZXVlIHJlZ2lzdGVycworICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAq CisgKiBQcm9ncmFtIHRoZSBjb21wdXRlIHF1ZXVlcyBhbmQgdGVzdCB0aGVtIHRvIG1ha2Ugc3Vy ZSB0aGV5CisgKiBhcmUgd29ya2luZy4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcywgZXJyb3Ig Zm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IHIsIGksIGo7CisJdTMyIHRtcDsK KwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmc7CiAKLQkJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAs IDAsIDAsIDApOwotCQltdXRleF91bmxvY2soJmFkZXYtPnNyYm1fbXV0ZXgpOworCS8qIGZpeCB1 cCBjaGlja2VuIGJpdHMgKi8KKwl0bXAgPSBSUkVHMzIobW1DUF9DUEZfREVCVUcpOworCXRtcCB8 PSAoMSA8PCAyMyk7CisJV1JFRzMyKG1tQ1BfQ1BGX0RFQlVHLCB0bXApOwogCi0JCWFtZGdwdV9i b19rdW5tYXAocmluZy0+bXFkX29iaik7Ci0JCWFtZGdwdV9ib191bnJlc2VydmUocmluZy0+bXFk X29iaik7CisJLyogaW5pdCB0aGUgcGlwZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4 Lm1lYy5udW1fbWVjOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBhZGV2LT5nZngubWVjLm51bV9w aXBlOyBqKyspCisJCQlnZnhfdjdfMF9jb21wdXRlX3BpcGVfaW5pdChhZGV2LCBpLCBqKTsKIAot CQlyaW5nLT5yZWFkeSA9IHRydWU7CisJLyogaW5pdCB0aGUgcXVldWVzICovCisJZm9yIChpID0g MDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7CisJCXIgPSBnZnhfdjdf MF9jb21wdXRlX3F1ZXVlX2luaXQoYWRldiwgaSk7CisJCWlmIChyKSB7CisJCQlnZnhfdjdfMF9j cF9jb21wdXRlX2ZpbmkoYWRldik7CisJCQlyZXR1cm4gcjsKKwkJfQogCX0KIAogCWdmeF92N18w X2NwX2NvbXB1dGVfZW5hYmxlKGFkZXYsIHRydWUpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkZXYt PmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7CiAJCXJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1 dGVfcmluZ1tpXTsKLQorCQlyaW5nLT5yZWFkeSA9IHRydWU7CiAJCXIgPSBhbWRncHVfcmluZ190 ZXN0X3JpbmcocmluZyk7CiAJCWlmIChyKQogCQkJcmluZy0+cmVhZHkgPSBmYWxzZTsKIAl9CiAK IAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfY3BfZW5hYmxlKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LCBib29sIGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9nZnhfdjhfMC5jCmluZGV4IDY3YWZjOTAuLjFjODU4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZ2Z4X3Y4XzAuYwpAQCAtNDYsMjAgKzQ2LDIyIEBACiAjaW5jbHVkZSAiZ2NhL2dmeF84 XzBfc2hfbWFzay5oIgogI2luY2x1ZGUgImdjYS9nZnhfOF8wX2VudW0uaCIKIAogI2luY2x1ZGUg ImRjZS9kY2VfMTBfMF9kLmgiCiAjaW5jbHVkZSAiZGNlL2RjZV8xMF8wX3NoX21hc2suaCIKIAog I2luY2x1ZGUgInNtdS9zbXVfN18xXzNfZC5oIgogCiAjZGVmaW5lIEdGWDhfTlVNX0dGWF9SSU5H UyAgICAgMQogI2RlZmluZSBHRlg4X05VTV9DT01QVVRFX1JJTkdTIDgKKyNkZWZpbmUgR0ZYOF9N RUNfSFBEX1NJWkUgMjA0OAorCiAKICNkZWZpbmUgVE9QQVpfR0JfQUREUl9DT05GSUdfR09MREVO IDB4MjIwMTAwMDEKICNkZWZpbmUgQ0FSUklaT19HQl9BRERSX0NPTkZJR19HT0xERU4gMHgyMjAx MDAwMQogI2RlZmluZSBQT0xBUklTMTFfR0JfQUREUl9DT05GSUdfR09MREVOIDB4MjIwMTEwMDIK ICNkZWZpbmUgVE9OR0FfR0JfQUREUl9DT05GSUdfR09MREVOIDB4MjIwMTEwMDMKIAogI2RlZmlu ZSBBUlJBWV9NT0RFKHgpCQkJCQkoKHgpIDw8IEdCX1RJTEVfTU9ERTBfX0FSUkFZX01PREVfX1NI SUZUKQogI2RlZmluZSBQSVBFX0NPTkZJRyh4KQkJCQkJKCh4KSA8PCBHQl9USUxFX01PREUwX19Q SVBFX0NPTkZJR19fU0hJRlQpCiAjZGVmaW5lIFRJTEVfU1BMSVQoeCkJCQkJCSgoeCkgPDwgR0Jf VElMRV9NT0RFMF9fVElMRV9TUExJVF9fU0hJRlQpCiAjZGVmaW5lIE1JQ1JPX1RJTEVfTU9ERV9O RVcoeCkJCQkJKCh4KSA8PCBHQl9USUxFX01PREUwX19NSUNST19USUxFX01PREVfTkVXX19TSElG VCkKQEAgLTE0MDksMzggKzE0MTEsMzggQEAgc3RhdGljIGludCBnZnhfdjhfMF9raXFfaW5pdF9y aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfa2lx X2ZyZWVfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCiAJCQkJICAgc3RydWN0IGFtZGdw dV9pcnFfc3JjICppcnEpCiB7CiAJaWYgKGFtZGdwdV9zcmlvdl92ZihyaW5nLT5hZGV2KSkKIAkJ YW1kZ3B1X3diX2ZyZWUocmluZy0+YWRldiwgcmluZy0+YWRldi0+dmlydC5yZWdfdmFsX29mZnMp OwogCiAJYW1kZ3B1X3JpbmdfZmluaShyaW5nKTsKIAlpcnEtPmRhdGEgPSBOVUxMOwogfQogCi0j ZGVmaW5lIE1FQ19IUERfU0laRSAyMDQ4CisjZGVmaW5lIEdGWDhfTUVDX0hQRF9TSVpFIDIwNDgK IAogc3RhdGljIGludCBnZnhfdjhfMF9tZWNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKIHsKIAlpbnQgcjsKIAl1MzIgKmhwZDsKIAogCS8qCiAJICogd2UgYXNzaWduIG9ubHkgMSBw aXBlIGJlY2F1c2UgYWxsIG90aGVyIHBpcGVzIHdpbGwKIAkgKiBiZSBoYW5kbGVkIGJ5IEtGRAog CSAqLwogCWFkZXYtPmdmeC5tZWMubnVtX21lYyA9IDE7CiAJYWRldi0+Z2Z4Lm1lYy5udW1fcGlw ZSA9IDE7CiAJYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWUgPSBhZGV2LT5nZngubWVjLm51bV9tZWMg KiBhZGV2LT5nZngubWVjLm51bV9waXBlICogODsKIAogCWlmIChhZGV2LT5nZngubWVjLmhwZF9l b3Bfb2JqID09IE5VTEwpIHsKIAkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKLQkJCQkgICAg IGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlICogTUVDX0hQRF9TSVpFLAorCQkJCSAgICAgYWRldi0+ Z2Z4Lm1lYy5udW1fcXVldWUgKiBHRlg4X01FQ19IUERfU0laRSwKIAkJCQkgICAgIFBBR0VfU0la RSwgdHJ1ZSwKIAkJCQkgICAgIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwgMCwgTlVMTCwgTlVMTCwK IAkJCQkgICAgICZhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqKTsKIAkJaWYgKHIpIHsKIAkJCWRl dl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRlIEhEUCBFT1AgYm8gZmFpbGVkXG4iLCByKTsK IAkJCXJldHVybiByOwogCQl9CiAJfQogCiAJciA9IGFtZGdwdV9ib19yZXNlcnZlKGFkZXYtPmdm eC5tZWMuaHBkX2VvcF9vYmosIGZhbHNlKTsKQEAgLTE0NTUsMjEgKzE0NTcsMjEgQEAgc3RhdGlj IGludCBnZnhfdjhfMF9tZWNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJZ2Z4 X3Y4XzBfbWVjX2ZpbmkoYWRldik7CiAJCXJldHVybiByOwogCX0KIAlyID0gYW1kZ3B1X2JvX2tt YXAoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaiwgKHZvaWQgKiopJmhwZCk7CiAJaWYgKHIpIHsK IAkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAgSERQIEVPUCBibyBmYWlsZWRcbiIsIHIp OwogCQlnZnhfdjhfMF9tZWNfZmluaShhZGV2KTsKIAkJcmV0dXJuIHI7CiAJfQogCi0JbWVtc2V0 KGhwZCwgMCwgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWUgKiBNRUNfSFBEX1NJWkUpOworCW1lbXNl dChocGQsIDAsIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlICogR0ZYOF9NRUNfSFBEX1NJWkUpOwog CiAJYW1kZ3B1X2JvX2t1bm1hcChhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqKTsKIAlhbWRncHVf Ym9fdW5yZXNlcnZlKGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwogCiAJcmV0dXJuIDA7CiB9 CiAKIHN0YXRpYyB2b2lkIGdmeF92OF8wX2tpcV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQogewogCXN0cnVjdCBhbWRncHVfa2lxICpraXEgPSAmYWRldi0+Z2Z4LmtpcTsKQEAgLTE0 NzcsMjkgKzE0NzksMjkgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfa2lxX2Zpbmkoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCiAJYW1kZ3B1X2JvX2ZyZWVfa2VybmVsKCZraXEtPmVvcF9vYmos ICZraXEtPmVvcF9ncHVfYWRkciwgTlVMTCk7CiAJa2lxLT5lb3Bfb2JqID0gTlVMTDsKIH0KIAog c3RhdGljIGludCBnZnhfdjhfMF9raXFfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK IHsKIAlpbnQgcjsKIAl1MzIgKmhwZDsKIAlzdHJ1Y3QgYW1kZ3B1X2tpcSAqa2lxID0gJmFkZXYt PmdmeC5raXE7CiAKLQlyID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgTUVDX0hQRF9T SVpFLCBQQUdFX1NJWkUsCisJciA9IGFtZGdwdV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIEdGWDhf TUVDX0hQRF9TSVpFLCBQQUdFX1NJWkUsCiAJCQkJICAgIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwg JmtpcS0+ZW9wX29iaiwKIAkJCQkgICAgJmtpcS0+ZW9wX2dwdV9hZGRyLCAodm9pZCAqKikmaHBk KTsKIAlpZiAocikgewogCQlkZXZfd2FybihhZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIEtJ USBibyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAotCW1lbXNldChocGQsIDAsIE1F Q19IUERfU0laRSk7CisJbWVtc2V0KGhwZCwgMCwgR0ZYOF9NRUNfSFBEX1NJWkUpOwogCiAJYW1k Z3B1X2JvX2t1bm1hcChraXEtPmVvcF9vYmopOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBj b25zdCB1MzIgdmdwcl9pbml0X2NvbXB1dGVfc2hhZGVyW10gPQogewogCTB4N2UwMDAyMDksIDB4 N2UwMjAyMDgsCiAJMHg3ZTA0MDIwNywgMHg3ZTA2MDIwNiwKQEAgLTQ2NTgsNTYgKzQ2NjAsNTQg QEAgc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfbWFwX3F1ZXVlX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKmtpcV9yaW5nLAogCiBzdGF0aWMgaW50IGdmeF92OF8wX21xZF9pbml0KHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAogCQkJICAgICBzdHJ1Y3QgdmlfbXFkICptcWQsCiAJCQkgICAgIHVp bnQ2NF90IG1xZF9ncHVfYWRkciwKIAkJCSAgICAgdWludDY0X3QgZW9wX2dwdV9hZGRyLAogCQkJ ICAgICBzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCiB7CiAJdWludDY0X3QgaHFkX2dwdV9hZGRy LCB3Yl9ncHVfYWRkciwgZW9wX2Jhc2VfYWRkcjsKIAl1aW50MzJfdCB0bXA7CiAKKwkvKiBpbml0 IHRoZSBtcWQgc3RydWN0ICovCisJbWVtc2V0KG1xZCwgMCwgc2l6ZW9mKHN0cnVjdCB2aV9tcWQp KTsKKwogCW1xZC0+aGVhZGVyID0gMHhDMDMxMDgwMDsKIAltcWQtPmNvbXB1dGVfcGlwZWxpbmVz dGF0X2VuYWJsZSA9IDB4MDAwMDAwMDE7CiAJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdt dF9zZTAgPSAweGZmZmZmZmZmOwogCW1xZC0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2Ux ID0gMHhmZmZmZmZmZjsKIAltcWQtPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMiA9IDB4 ZmZmZmZmZmY7CiAJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTMgPSAweGZmZmZm ZmZmOwogCW1xZC0+Y29tcHV0ZV9taXNjX3Jlc2VydmVkID0gMHgwMDAwMDAwMzsKIAogCWVvcF9i YXNlX2FkZHIgPSBlb3BfZ3B1X2FkZHIgPj4gODsKIAltcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRy X2xvID0gZW9wX2Jhc2VfYWRkcjsKIAltcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRyX2hpID0gdXBw ZXJfMzJfYml0cyhlb3BfYmFzZV9hZGRyKTsKIAogCS8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lz dGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpFKzEpIGR3b3JkcyAqLwogCXRtcCA9IFJSRUczMihtbUNQ X0hRRF9FT1BfQ09OVFJPTCk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9FT1Bf Q09OVFJPTCwgRU9QX1NJWkUsCi0JCQkob3JkZXJfYmFzZV8yKE1FQ19IUERfU0laRSAvIDQpIC0g MSkpOworCQkJKG9yZGVyX2Jhc2VfMihHRlg4X01FQ19IUERfU0laRSAvIDQpIC0gMSkpOwogCiAJ bXFkLT5jcF9ocWRfZW9wX2NvbnRyb2wgPSB0bXA7CiAKIAkvKiBlbmFibGUgZG9vcmJlbGw/ICov CiAJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwogCiAJaWYgKHJp bmctPnVzZV9kb29yYmVsbCkKIAkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9E T09SQkVMTF9DT05UUk9MLAogCQkJCQkgRE9PUkJFTExfRU4sIDEpOwogCWVsc2UKIAkJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAogCQkJCQkgRE9P UkJFTExfRU4sIDApOwogCiAJbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9IHRtcDsK IAotCS8qIGRpc2FibGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCi0JbXFkLT5jcF9ocWRf ZGVxdWV1ZV9yZXF1ZXN0ID0gMDsKLQltcWQtPmNwX2hxZF9wcV9ycHRyID0gMDsKLQltcWQtPmNw X2hxZF9wcV93cHRyID0gMDsKLQogCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFEICovCiAJ bXFkLT5jcF9tcWRfYmFzZV9hZGRyX2xvID0gbXFkX2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKIAlt cWQtPmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKG1xZF9ncHVfYWRkcik7CiAK IAkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwogCXRtcCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9M KTsKIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfTVFEX0NPTlRST0wsIFZNSUQsIDApOwog CW1xZC0+Y3BfbXFkX2NvbnRyb2wgPSB0bXA7CiAKIAkvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhl IEhRRCwgdGhpcyBpcyBzaW1pbGFyIENQX1JCMF9CQVNFL19ISSAqLwpAQCAtNDc2OSw1MyArNDc2 OSw4NyBAQCBzdGF0aWMgaW50IGdmeF92OF8wX21xZF9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAogCXRtcCA9IFJSRUczMihtbUNQX0hRRF9QRVJTSVNURU5UX1NUQVRFKTsKIAl0bXAg PSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUsIFBSRUxPQURfU0la RSwgMHg1Myk7CiAJbXFkLT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSA9IHRtcDsKIAogCS8qIGFj dGl2YXRlIHRoZSBxdWV1ZSAqLwogCW1xZC0+Y3BfaHFkX2FjdGl2ZSA9IDE7CiAKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCBnZnhfdjhfMF9raXFfaW5pdF9yZWdpc3RlcihzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwKLQkJCQkgICAgICBzdHJ1Y3QgdmlfbXFkICptcWQsCi0JCQkJICAg ICAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQorc3RhdGljIGludCBnZnhfdjhfMF9tcWRfZGVh Y3RpdmF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpbnQgaTsKKworCS8qIGRp c2FibGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCisJaWYgKFJSRUczMihtbUNQX0hRRF9B Q1RJVkUpICYgMSkgeworCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKKwkJ Zm9yIChpID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCQlpZiAoIShSUkVH MzIobW1DUF9IUURfQUNUSVZFKSAmIDEpKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDEpOworCQl9 CisKKwkJaWYgKGkgPT0gYWRldi0+dXNlY190aW1lb3V0KQorCQkJcmV0dXJuIC1FVElNRURPVVQ7 CisKKwkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgMCk7CisJCVdSRUczMihtbUNQ X0hRRF9QUV9SUFRSLCAwKTsKKwkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIDApOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjhfMF9lbmFibGVfZG9vcmJlbGwoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQoreworCXVpbnQzMl90IHRtcDsK KworCWlmICghZW5hYmxlKQorCQlyZXR1cm47CisKKwlpZiAoKGFkZXYtPmFzaWNfdHlwZSA9PSBD SElQX0NBUlJJWk8pIHx8CisJCQkoYWRldi0+YXNpY190eXBlID09IENISVBfRklKSSkgfHwKKwkJ CShhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9TVE9ORVkpIHx8CisJCQkoYWRldi0+YXNpY190eXBl ID09IENISVBfUE9MQVJJUzExKSB8fAorCQkJKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFS SVMxMCkpIHsKKwkJV1JFRzMyKG1tQ1BfTUVDX0RPT1JCRUxMX1JBTkdFX0xPV0VSLCBBTURHUFVf RE9PUkJFTExfS0lRIDw8IDIpOworCQlXUkVHMzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfVVBQ RVIsIEFNREdQVV9ET09SQkVMTF9NRUNfUklORzcgPDwgMik7CisJfQorCisJdG1wID0gUlJFRzMy KG1tQ1BfUFFfU1RBVFVTKTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfUFFfU1RBVFVT LCBET09SQkVMTF9FTkFCTEUsIDEpOworCVdSRUczMihtbUNQX1BRX1NUQVRVUywgdG1wKTsKK30K Kworc3RhdGljIGludCBnZnhfdjhfMF9tcWRfY29tbWl0KHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LCBzdHJ1Y3QgdmlfbXFkICptcWQpCiB7CiAJdWludDMyX3QgdG1wOwotCWludCBqOwogCiAJ LyogZGlzYWJsZSB3cHRyIHBvbGxpbmcgKi8KIAl0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BP TExfQ05UTCk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX1BRX1dQVFJfUE9MTF9DTlRM LCBFTiwgMCk7CiAJV1JFRzMyKG1tQ1BfUFFfV1BUUl9QT0xMX0NOVEwsIHRtcCk7CiAKIAlXUkVH MzIobW1DUF9IUURfRU9QX0JBU0VfQUREUiwgbXFkLT5jcF9ocWRfZW9wX2Jhc2VfYWRkcl9sbyk7 CiAJV1JFRzMyKG1tQ1BfSFFEX0VPUF9CQVNFX0FERFJfSEksIG1xZC0+Y3BfaHFkX2VvcF9iYXNl X2FkZHJfaGkpOwogCiAJLyogc2V0IHRoZSBFT1Agc2l6ZSwgcmVnaXN0ZXIgdmFsdWUgaXMgMl4o RU9QX1NJWkUrMSkgZHdvcmRzICovCiAJV1JFRzMyKG1tQ1BfSFFEX0VPUF9DT05UUk9MLCBtcWQt PmNwX2hxZF9lb3BfY29udHJvbCk7CiAKIAkvKiBlbmFibGUgZG9vcmJlbGw/ICovCiAJV1JFRzMy KG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2Nv bnRyb2wpOwogCi0JLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8KLQlpZiAo UlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSB7Ci0JCVdSRUczMihtbUNQX0hRRF9ERVFVRVVF X1JFUVVFU1QsIDEpOwotCQlmb3IgKGogPSAwOyBqIDwgYWRldi0+dXNlY190aW1lb3V0OyBqKysp IHsKLQkJCWlmICghKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgMSkpCi0JCQkJYnJlYWs7Ci0J CQl1ZGVsYXkoMSk7Ci0JCX0KLQkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgbXFk LT5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0KTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIG1x ZC0+Y3BfaHFkX3BxX3JwdHIpOwotCQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgbXFkLT5jcF9o cWRfcHFfd3B0cik7Ci0JfQorCS8qIHNldCBwcSByZWFkL3dyaXRlIHBvaW50ZXJzICovCisJV1JF RzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgbXFkLT5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0 KTsKKwlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwgbXFkLT5jcF9ocWRfcHFfcnB0cik7CisJV1JF RzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIpOwogCiAJLyogc2V0IHRo ZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KIAlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSLCBtcWQt PmNwX21xZF9iYXNlX2FkZHJfbG8pOwogCVdSRUczMihtbUNQX01RRF9CQVNFX0FERFJfSEksIG1x ZC0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSk7CiAKIAkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwogCVdS RUczMihtbUNQX01RRF9DT05UUk9MLCBtcWQtPmNwX21xZF9jb250cm9sKTsKIAogCS8qIHNldCB0 aGUgcG9pbnRlciB0byB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgQ1BfUkIwX0JBU0UvX0hJICov CiAJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0UsIG1xZC0+Y3BfaHFkX3BxX2Jhc2VfbG8pOwpAQCAt NDgyOCw3OCArNDg2Miw2NSBAQCBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVy KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSX1JF UE9SVF9BRERSLAogCQkJCW1xZC0+Y3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHJfbG8pOwogCVdS RUczMihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSX0hJLAogCQkJCW1xZC0+Y3BfaHFkX3Bx X3JwdHJfcmVwb3J0X2FkZHJfaGkpOwogCiAJLyogb25seSB1c2VkIGlmIENQX1BRX1dQVFJfUE9M TF9DTlRMLkNQX1BRX1dQVFJfUE9MTF9DTlRMX19FTl9NQVNLPTEgKi8KIAlXUkVHMzIobW1DUF9I UURfUFFfV1BUUl9QT0xMX0FERFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2xvKTsK IAlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFJfSEksIG1xZC0+Y3BfaHFkX3BxX3dw dHJfcG9sbF9hZGRyX2hpKTsKIAogCS8qIGVuYWJsZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVk ICovCi0JaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgewotCQlpZiAoKGFkZXYtPmFzaWNfdHlwZSA9 PSBDSElQX0NBUlJJWk8pIHx8Ci0JCQkJKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX0ZJSkkpIHx8 Ci0JCQkJKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1NUT05FWSkpIHsKLQkJCVdSRUczMihtbUNQ X01FQ19ET09SQkVMTF9SQU5HRV9MT1dFUiwKLQkJCQkJCUFNREdQVV9ET09SQkVMTF9LSVEgPDwg Mik7Ci0JCQlXUkVHMzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfVVBQRVIsCi0JCQkJCQlBTURH UFVfRE9PUkJFTExfTUVDX1JJTkc3IDw8IDIpOwotCQl9Ci0JfQogCVdSRUczMihtbUNQX0hRRF9Q UV9ET09SQkVMTF9DT05UUk9MLCBtcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKIAog CS8qIHJlc2V0IHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRS L19SUFRSICovCiAJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIp OwogCiAJLyogc2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KIAlXUkVHMzIobW1DUF9IUURf Vk1JRCwgbXFkLT5jcF9ocWRfdm1pZCk7CiAKIAlXUkVHMzIobW1DUF9IUURfUEVSU0lTVEVOVF9T VEFURSwgbXFkLT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSk7CiAKIAkvKiBhY3RpdmF0ZSB0aGUg cXVldWUgKi8KIAlXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBtcWQtPmNwX2hxZF9hY3RpdmUpOwog Ci0JaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgewotCQl0bXAgPSBSUkVHMzIobW1DUF9QUV9TVEFU VVMpOwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfUFFfU1RBVFVTLCBET09SQkVMTF9F TkFCTEUsIDEpOwotCQlXUkVHMzIobW1DUF9QUV9TVEFUVVMsIHRtcCk7Ci0JfQotCiAJcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2luaXRfcXVldWUoc3RydWN0IGFtZGdw dV9yaW5nICpyaW5nLAorc3RhdGljIGludCBnZnhfdjhfMF9raXFfcXVldWVfaW5pdChzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcsCiAJCQkJICAgc3RydWN0IHZpX21xZCAqbXFkLAogCQkJCSAgIHU2 NCBtcWRfZ3B1X2FkZHIpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5h ZGV2OwogCXN0cnVjdCBhbWRncHVfa2lxICpraXEgPSAmYWRldi0+Z2Z4LmtpcTsKIAl1aW50NjRf dCBlb3BfZ3B1X2FkZHI7CiAJYm9vbCBpc19raXEgPSBmYWxzZTsKIAogCWlmIChyaW5nLT5mdW5j cy0+dHlwZSA9PSBBTURHUFVfUklOR19UWVBFX0tJUSkKIAkJaXNfa2lxID0gdHJ1ZTsKIAogCWlm IChpc19raXEpIHsKIAkJZW9wX2dwdV9hZGRyID0ga2lxLT5lb3BfZ3B1X2FkZHI7CiAJCWdmeF92 OF8wX2tpcV9zZXR0aW5nKCZraXEtPnJpbmcpOwogCX0gZWxzZQogCQllb3BfZ3B1X2FkZHIgPSBh ZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKwotCQkJCQlyaW5nLT5xdWV1ZSAqIE1FQ19I UERfU0laRTsKKwkJCQkJcmluZy0+cXVldWUgKiBHRlg4X01FQ19IUERfU0laRTsKIAogCW11dGV4 X2xvY2soJmFkZXYtPnNyYm1fbXV0ZXgpOwogCXZpX3NyYm1fc2VsZWN0KGFkZXYsIHJpbmctPm1l LCByaW5nLT5waXBlLCByaW5nLT5xdWV1ZSwgMCk7CiAKIAlnZnhfdjhfMF9tcWRfaW5pdChhZGV2 LCBtcWQsIG1xZF9ncHVfYWRkciwgZW9wX2dwdV9hZGRyLCByaW5nKTsKIAotCWlmIChpc19raXEp Ci0JCWdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVyKGFkZXYsIG1xZCwgcmluZyk7CisJaWYgKGlz X2tpcSkgeworCQlnZnhfdjhfMF9tcWRfZGVhY3RpdmF0ZShhZGV2KTsKKwkJZ2Z4X3Y4XzBfZW5h YmxlX2Rvb3JiZWxsKGFkZXYsIHJpbmctPnVzZV9kb29yYmVsbCk7CisJCWdmeF92OF8wX21xZF9j b21taXQoYWRldiwgbXFkKTsKKwl9CiAKIAl2aV9zcmJtX3NlbGVjdChhZGV2LCAwLCAwLCAwLCAw KTsKIAltdXRleF91bmxvY2soJmFkZXYtPnNyYm1fbXV0ZXgpOwogCiAJaWYgKGlzX2tpcSkKIAkJ Z2Z4X3Y4XzBfa2lxX2VuYWJsZShyaW5nKTsKIAllbHNlCiAJCWdmeF92OF8wX21hcF9xdWV1ZV9l bmFibGUoJmtpcS0+cmluZywgcmluZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5MjIsMzMgKzQ5NDMs MzQgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y4XzBfa2lxX2ZyZWVfcXVldWUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX3NldHVwX3F1ZXVlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJCSAgICBzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcpCiB7CiAJc3RydWN0IHZpX21xZCAqbXFkOwogCXU2NCBtcWRfZ3B1X2FkZHI7CiAJdTMyICpi dWY7CiAJaW50IHIgPSAwOwogCi0JciA9IGFtZGdwdV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIHNp emVvZihzdHJ1Y3QgdmlfbXFkKSwgUEFHRV9TSVpFLAotCQkJCSAgICBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQsICZyaW5nLT5tcWRfb2JqLAotCQkJCSAgICAmbXFkX2dwdV9hZGRyLCAodm9pZCAqKikm YnVmKTsKKwlyID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgc2l6ZW9mKHN0cnVjdCB2 aV9tcWQpLAorCQkJUEFHRV9TSVpFLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQsCisJCQkmcmluZy0+ bXFkX29iaiwgJm1xZF9ncHVfYWRkciwKKwkJCSh2b2lkICoqKSZidWYpOwogCWlmIChyKSB7CiAJ CWRldl93YXJuKGFkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcmluZyBtcWQgb2IgKCVkKSIs IHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCiAJbWVt c2V0KGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCB2aV9tcWQpKTsKIAltcWQgPSAoc3RydWN0IHZpX21x ZCAqKWJ1ZjsKIAotCXIgPSBnZnhfdjhfMF9raXFfaW5pdF9xdWV1ZShyaW5nLCBtcWQsIG1xZF9n cHVfYWRkcik7CisJciA9IGdmeF92OF8wX2tpcV9xdWV1ZV9pbml0KHJpbmcsIG1xZCwgbXFkX2dw dV9hZGRyKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlhbWRncHVfYm9fa3VubWFwKHJpbmct Pm1xZF9vYmopOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX3Jl c3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKQEAgLTQ5ODAsMjYwICs1MDAyLDEx MyBAQCBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCiAKIAlyaW5nID0gJmFkZXYtPmdmeC5raXEucmluZzsKIAlyaW5nLT5yZWFkeSA9IHRy dWU7CiAJciA9IGFtZGdwdV9yaW5nX3Rlc3RfcmluZyhyaW5nKTsKIAlpZiAocikKIAkJcmluZy0+ cmVhZHkgPSBmYWxzZTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdmeF92OF8wX2Nw X2NvbXB1dGVfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQorc3RhdGljIGludCBn ZnhfdjhfMF9jb21wdXRlX3F1ZXVlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJ CQkJICAgICAgIGludCByaW5nX2lkKQogewotCWludCByLCBpLCBqOwotCXUzMiB0bXA7Ci0JYm9v bCB1c2VfZG9vcmJlbGwgPSB0cnVlOwotCXU2NCBocWRfZ3B1X2FkZHI7Ci0JdTY0IG1xZF9ncHVf YWRkcjsKKwlpbnQgcjsKIAl1NjQgZW9wX2dwdV9hZGRyOwotCXU2NCB3Yl9ncHVfYWRkcjsKLQl1 MzIgKmJ1ZjsKKwl1NjQgbXFkX2dwdV9hZGRyOwogCXN0cnVjdCB2aV9tcWQgKm1xZDsKKwlzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tyaW5nX2lkXTsK IAotCS8qIGluaXQgdGhlIHF1ZXVlcy4gICovCi0JZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5u dW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7Ci0JCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZh ZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOwotCi0JCWlmIChyaW5nLT5tcWRfb2JqID09IE5VTEwp IHsKLQkJCXIgPSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVj dCB2aV9tcWQpLAotCQkJCQkgICAgIFBBR0VfU0laRSwgdHJ1ZSwKLQkJCQkJICAgICBBTURHUFVf R0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsCi0JCQkJCSAgICAgTlVMTCwgJnJpbmctPm1xZF9vYmop OwotCQkJaWYgKHIpIHsKLQkJCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIGNyZWF0ZSBNUUQg Ym8gZmFpbGVkXG4iLCByKTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfQotCi0JCXIgPSBhbWRn cHVfYm9fcmVzZXJ2ZShyaW5nLT5tcWRfb2JqLCBmYWxzZSk7Ci0JCWlmICh1bmxpa2VseShyICE9 IDApKSB7Ci0JCQlnZnhfdjhfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7Ci0JCQlyZXR1cm4gcjsK LQkJfQotCQlyID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5tcWRfb2JqLCBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQsCi0JCQkJICAmbXFkX2dwdV9hZGRyKTsKLQkJaWYgKHIpIHsKLQkJCWRldl93YXJuKGFk ZXYtPmRldiwgIiglZCkgcGluIE1RRCBibyBmYWlsZWRcbiIsIHIpOwotCQkJZ2Z4X3Y4XzBfY3Bf Y29tcHV0ZV9maW5pKGFkZXYpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IGFtZGdwdV9ib19r bWFwKHJpbmctPm1xZF9vYmosICh2b2lkICoqKSZidWYpOworCWlmIChyaW5nLT5tcWRfb2JqID09 IE5VTEwpIHsKKwkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKKwkJCQlzaXplb2Yoc3RydWN0 IHZpX21xZCksCisJCQkJUEFHRV9TSVpFLCB0cnVlLAorCQkJCUFNREdQVV9HRU1fRE9NQUlOX0dU VCwgMCwgTlVMTCwKKwkJCQlOVUxMLCAmcmluZy0+bXFkX29iaik7CiAJCWlmIChyKSB7Ci0JCQlk ZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBNUUQgYm8gZmFpbGVkXG4iLCByKTsKLQkJCWdm eF92OF8wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKKwkJCWRldl93YXJuKGFkZXYtPmRldiwgIigl ZCkgY3JlYXRlIE1RRCBibyBmYWlsZWRcbiIsIHIpOwogCQkJcmV0dXJuIHI7CiAJCX0KKwl9CiAK LQkJLyogaW5pdCB0aGUgbXFkIHN0cnVjdCAqLwotCQltZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3Ry dWN0IHZpX21xZCkpOwotCi0JCW1xZCA9IChzdHJ1Y3QgdmlfbXFkICopYnVmOwotCQltcWQtPmhl YWRlciA9IDB4QzAzMTA4MDA7Ci0JCW1xZC0+Y29tcHV0ZV9waXBlbGluZXN0YXRfZW5hYmxlID0g MHgwMDAwMDAwMTsKLQkJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTAgPSAweGZm ZmZmZmZmOwotCQltcWQtPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMSA9IDB4ZmZmZmZm ZmY7Ci0JCW1xZC0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UyID0gMHhmZmZmZmZmZjsK LQkJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTMgPSAweGZmZmZmZmZmOwotCQlt cWQtPmNvbXB1dGVfbWlzY19yZXNlcnZlZCA9IDB4MDAwMDAwMDM7Ci0KLQkJbXV0ZXhfbG9jaygm YWRldi0+c3JibV9tdXRleCk7Ci0JCXZpX3NyYm1fc2VsZWN0KGFkZXYsIHJpbmctPm1lLAotCQkJ ICAgICAgIHJpbmctPnBpcGUsCi0JCQkgICAgICAgcmluZy0+cXVldWUsIDApOwotCi0JCWVvcF9n cHVfYWRkciA9IGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIChpICogTUVDX0hQRF9T SVpFKTsKLQkJZW9wX2dwdV9hZGRyID4+PSA4OwotCi0JCS8qIHdyaXRlIHRoZSBFT1AgYWRkciAq LwotCQlXUkVHMzIobW1DUF9IUURfRU9QX0JBU0VfQUREUiwgZW9wX2dwdV9hZGRyKTsKLQkJV1JF RzMyKG1tQ1BfSFFEX0VPUF9CQVNFX0FERFJfSEksIHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRy KSk7Ci0KLQkJLyogc2V0IHRoZSBWTUlEIGFzc2lnbmVkICovCi0JCVdSRUczMihtbUNQX0hRRF9W TUlELCAwKTsKLQotCQkvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdpc3RlciB2YWx1ZSBpcyAyXihF T1BfU0laRSsxKSBkd29yZHMgKi8KLQkJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX0VPUF9DT05UUk9M KTsKLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9FT1BfQ09OVFJPTCwgRU9QX1NJ WkUsCi0JCQkJICAgIChvcmRlcl9iYXNlXzIoTUVDX0hQRF9TSVpFIC8gNCkgLSAxKSk7Ci0JCVdS RUczMihtbUNQX0hRRF9FT1BfQ09OVFJPTCwgdG1wKTsKLQotCQkvKiBkaXNhYmxlIHdwdHIgcG9s bGluZyAqLwotCQl0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCk7Ci0JCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLCBDUF9QUV9XUFRSX1BPTExfQ05UTCwgRU4sIDApOwotCQlXUkVH MzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCwgdG1wKTsKLQotCQltcWQtPmNwX2hxZF9lb3BfYmFz ZV9hZGRyX2xvID0KLQkJCVJSRUczMihtbUNQX0hRRF9FT1BfQkFTRV9BRERSKTsKLQkJbXFkLT5j cF9ocWRfZW9wX2Jhc2VfYWRkcl9oaSA9Ci0JCQlSUkVHMzIobW1DUF9IUURfRU9QX0JBU0VfQURE Ul9ISSk7Ci0KLQkJLyogZW5hYmxlIGRvb3JiZWxsPyAqLwotCQl0bXAgPSBSUkVHMzIobW1DUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTCk7Ci0JCWlmICh1c2VfZG9vcmJlbGwpIHsKLQkJCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwgRE9PUkJFTExf RU4sIDEpOwotCQl9IGVsc2UgewotCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9Q UV9ET09SQkVMTF9DT05UUk9MLCBET09SQkVMTF9FTiwgMCk7Ci0JCX0KLQkJV1JFRzMyKG1tQ1Bf SFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIHRtcCk7Ci0JCW1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wgPSB0bXA7Ci0KLQkJLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUg Ki8KLQkJbXFkLT5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0ID0gMDsKLQkJbXFkLT5jcF9ocWRfcHFf cnB0ciA9IDA7Ci0JCW1xZC0+Y3BfaHFkX3BxX3dwdHI9IDA7Ci0JCWlmIChSUkVHMzIobW1DUF9I UURfQUNUSVZFKSAmIDEpIHsKLQkJCVdSRUczMihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDEp OwotCQkJZm9yIChqID0gMDsgaiA8IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Ci0JCQkJaWYg KCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKLQkJCQkJYnJlYWs7Ci0JCQkJdWRlbGF5 KDEpOwotCQkJfQotCQkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgbXFkLT5jcF9o cWRfZGVxdWV1ZV9yZXF1ZXN0KTsKLQkJCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCBtcWQtPmNw X2hxZF9wcV9ycHRyKTsKLQkJCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPmNwX2hxZF9w cV93cHRyKTsKLQkJfQorCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShyaW5nLT5tcWRfb2JqLCBmYWxz ZSk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJCWdvdG8gb3V0OwogCi0JCS8qIHNldCB0aGUg cG9pbnRlciB0byB0aGUgTVFEICovCi0JCW1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyA9IG1xZF9n cHVfYWRkciAmIDB4ZmZmZmZmZmM7Ci0JCW1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVy XzMyX2JpdHMobXFkX2dwdV9hZGRyKTsKLQkJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUiwgbXFk LT5jcF9tcWRfYmFzZV9hZGRyX2xvKTsKLQkJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwg bXFkLT5jcF9tcWRfYmFzZV9hZGRyX2hpKTsKLQotCQkvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwot CQl0bXAgPSBSUkVHMzIobW1DUF9NUURfQ09OVFJPTCk7Ci0JCXRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBDUF9NUURfQ09OVFJPTCwgVk1JRCwgMCk7Ci0JCVdSRUczMihtbUNQX01RRF9DT05UUk9M LCB0bXApOwotCQltcWQtPmNwX21xZF9jb250cm9sID0gdG1wOwotCi0JCS8qIHNldCB0aGUgcG9p bnRlciB0byB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgQ1BfUkIwX0JBU0UvX0hJICovCi0JCWhx ZF9ncHVfYWRkciA9IHJpbmctPmdwdV9hZGRyID4+IDg7Ci0JCW1xZC0+Y3BfaHFkX3BxX2Jhc2Vf bG8gPSBocWRfZ3B1X2FkZHI7Ci0JCW1xZC0+Y3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9i aXRzKGhxZF9ncHVfYWRkcik7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBtcWQtPmNwX2hx ZF9wcV9iYXNlX2xvKTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG1xZC0+Y3BfaHFk X3BxX2Jhc2VfaGkpOwotCi0JCS8qIHNldCB1cCB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8g Q1BfUkIwX0NOVEwgKi8KLQkJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0NPTlRST0wpOwotCQl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0NPTlRST0wsIFFVRVVFX1NJWkUsCi0J CQkJICAgIChvcmRlcl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gNCkgLSAxKSk7Ci0JCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUlBUUl9CTE9DS19TSVpFLAot CQkJICAgICAgICgob3JkZXJfYmFzZV8yKEFNREdQVV9HUFVfUEFHRV9TSVpFIC8gNCkgLSAxKSA8 PCA4KSk7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBD UF9IUURfUFFfQ09OVFJPTCwgRU5ESUFOX1NXQVAsIDEpOwotI2VuZGlmCi0JCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgVU5PUkRfRElTUEFUQ0gsIDApOwotCQl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0NPTlRST0wsIFJPUV9QUV9JQl9GTElQ LCAwKTsKLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9MLCBQUklW X1NUQVRFLCAxKTsKLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9M LCBLTURfUVVFVUUsIDEpOwotCQlXUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCwgdG1wKTsKLQkJ bXFkLT5jcF9ocWRfcHFfY29udHJvbCA9IHRtcDsKLQotCQkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mg d2V0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KLQkJd2JfZ3B1X2FkZHIgPSBhZGV2LT53Yi5n cHVfYWRkciArIChyaW5nLT5ycHRyX29mZnMgKiA0KTsKLQkJbXFkLT5jcF9ocWRfcHFfcnB0cl9y ZXBvcnRfYWRkcl9sbyA9IHdiX2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5jcF9ocWRf cHFfcnB0cl9yZXBvcnRfYWRkcl9oaSA9Ci0JCQl1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAm IDB4ZmZmZjsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIsCi0JCSAgICAg ICBtcWQtPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvKTsKLQkJV1JFRzMyKG1tQ1BfSFFE X1BRX1JQVFJfUkVQT1JUX0FERFJfSEksCi0JCSAgICAgICBtcWQtPmNwX2hxZF9wcV9ycHRyX3Jl cG9ydF9hZGRyX2hpKTsKLQotCQkvKiBvbmx5IHVzZWQgaWYgQ1BfUFFfV1BUUl9QT0xMX0NOVEwu Q1BfUFFfV1BUUl9QT0xMX0NOVExfX0VOX01BU0s9MSAqLwotCQl3Yl9ncHVfYWRkciA9IGFkZXYt PndiLmdwdV9hZGRyICsgKHJpbmctPndwdHJfb2ZmcyAqIDQpOwotCQltcWQtPmNwX2hxZF9wcV93 cHRyX3BvbGxfYWRkcl9sbyA9IHdiX2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5jcF9o cWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAmIDB4 ZmZmZjsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPmNwX2hxZF9w cV93cHRyX3BvbGxfYWRkcl9sbyk7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQURE Ul9ISSwKLQkJICAgICAgIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyX2hpKTsKLQotCQkv KiBlbmFibGUgdGhlIGRvb3JiZWxsIGlmIHJlcXVlc3RlZCAqLwotCQlpZiAodXNlX2Rvb3JiZWxs KSB7Ci0JCQlpZiAoKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX0NBUlJJWk8pIHx8Ci0JCQkgICAg KGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX0ZJSkkpIHx8Ci0JCQkgICAgKGFkZXYtPmFzaWNfdHlw ZSA9PSBDSElQX1NUT05FWSkgfHwKLQkJCSAgICAoYWRldi0+YXNpY190eXBlID09IENISVBfUE9M QVJJUzExKSB8fAotCQkJICAgIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xBUklTMTApIHx8 Ci0JCQkgICAgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMikpIHsKLQkJCQlXUkVH MzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfTE9XRVIsCi0JCQkJICAgICAgIEFNREdQVV9ET09S QkVMTF9LSVEgPDwgMik7Ci0JCQkJV1JFRzMyKG1tQ1BfTUVDX0RPT1JCRUxMX1JBTkdFX1VQUEVS LAotCQkJCSAgICAgICBBTURHUFVfRE9PUkJFTExfTUVDX1JJTkc3IDw8IDIpOwotCQkJfQotCQkJ dG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwotCQkJdG1wID0gUkVH X1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAotCQkJCQkgICAgRE9P UkJFTExfT0ZGU0VULCByaW5nLT5kb29yYmVsbF9pbmRleCk7Ci0JCQl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIERPT1JCRUxMX0VOLCAxKTsKLQkJ CXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwgRE9P UkJFTExfU09VUkNFLCAwKTsKLQkJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTCwgRE9PUkJFTExfSElULCAwKTsKLQkJCW1xZC0+Y3BfaHFkX3BxX2Rv b3JiZWxsX2NvbnRyb2wgPSB0bXA7CisJciA9IGFtZGdwdV9ib19waW4ocmluZy0+bXFkX29iaiwg QU1ER1BVX0dFTV9ET01BSU5fR1RULAorCQkJJm1xZF9ncHVfYWRkcik7CisJaWYgKHIpIHsKKwkJ ZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBwaW4gTVFEIGJvIGZhaWxlZFxuIiwgcik7CisJCWdv dG8gb3V0X3VucmVzZXJ2ZTsKKwl9CisJciA9IGFtZGdwdV9ib19rbWFwKHJpbmctPm1xZF9vYmos ICh2b2lkICoqKSZtcWQpOworCWlmIChyKSB7CisJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkg bWFwIE1RRCBibyBmYWlsZWRcbiIsIHIpOworCQlnb3RvIG91dF91bnJlc2VydmU7CisJfQogCi0J CX0gZWxzZSB7Ci0JCQltcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gMDsKLQkJfQot CQlXUkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwKLQkJICAgICAgIG1xZC0+Y3Bf aHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wpOwotCi0JCS8qIHJlc2V0IHJlYWQgYW5kIHdyaXRlIHBv aW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRSL19SUFRSICovCi0JCXJpbmctPndwdHIgPSAw OwotCQltcWQtPmNwX2hxZF9wcV93cHRyID0gcmluZy0+d3B0cjsKLQkJV1JFRzMyKG1tQ1BfSFFE X1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIpOwotCQltcWQtPmNwX2hxZF9wcV9ycHRyID0g UlJFRzMyKG1tQ1BfSFFEX1BRX1JQVFIpOwotCi0JCS8qIHNldCB0aGUgdm1pZCBmb3IgdGhlIHF1 ZXVlICovCi0JCW1xZC0+Y3BfaHFkX3ZtaWQgPSAwOwotCQlXUkVHMzIobW1DUF9IUURfVk1JRCwg bXFkLT5jcF9ocWRfdm1pZCk7Ci0KLQkJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BFUlNJU1RFTlRf U1RBVEUpOwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BFUlNJU1RFTlRfU1RB VEUsIFBSRUxPQURfU0laRSwgMHg1Myk7Ci0JCVdSRUczMihtbUNQX0hRRF9QRVJTSVNURU5UX1NU QVRFLCB0bXApOwotCQltcWQtPmNwX2hxZF9wZXJzaXN0ZW50X3N0YXRlID0gdG1wOwotCQlpZiAo YWRldi0+YXNpY190eXBlID09IENISVBfU1RPTkVZIHx8Ci0JCQlhZGV2LT5hc2ljX3R5cGUgPT0g Q0hJUF9QT0xBUklTMTEgfHwKLQkJCWFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMCB8 fAotCQkJYWRldi0+YXNpY190eXBlID09IENISVBfUE9MQVJJUzEyKSB7Ci0JCQl0bXAgPSBSUkVH MzIobW1DUF9NRTFfUElQRTNfSU5UX0NOVEwpOwotCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAs IENQX01FMV9QSVBFM19JTlRfQ05UTCwgR0VORVJJQzJfSU5UX0VOQUJMRSwgMSk7Ci0JCQlXUkVH MzIobW1DUF9NRTFfUElQRTNfSU5UX0NOVEwsIHRtcCk7Ci0JCX0KKwllb3BfZ3B1X2FkZHIgPSBh ZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAocmluZ19pZCAqIEdGWDhfTUVDX0hQRF9T SVpFKTsKKwllb3BfZ3B1X2FkZHIgPj49IDg7CisKKwkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICov CisJbWVtc2V0KG1xZCwgMCwgc2l6ZW9mKHN0cnVjdCB2aV9tcWQpKTsKKworCW11dGV4X2xvY2so JmFkZXYtPnNyYm1fbXV0ZXgpOworCXZpX3NyYm1fc2VsZWN0KGFkZXYsIHJpbmctPm1lLCByaW5n LT5waXBlLCByaW5nLT5xdWV1ZSwgMCk7CisKKwlnZnhfdjhfMF9tcWRfaW5pdChhZGV2LCBtcWQs IG1xZF9ncHVfYWRkciwgZW9wX2dwdV9hZGRyLCByaW5nKTsKIAotCQkvKiBhY3RpdmF0ZSB0aGUg cXVldWUgKi8KLQkJbXFkLT5jcF9ocWRfYWN0aXZlID0gMTsKLQkJV1JFRzMyKG1tQ1BfSFFEX0FD VElWRSwgbXFkLT5jcF9ocWRfYWN0aXZlKTsKKwlnZnhfdjhfMF9tcWRfZGVhY3RpdmF0ZShhZGV2 KTsKKwlnZnhfdjhfMF9lbmFibGVfZG9vcmJlbGwoYWRldiwgcmluZy0+dXNlX2Rvb3JiZWxsKTsK KwlnZnhfdjhfMF9tcWRfY29tbWl0KGFkZXYsIG1xZCk7CiAKLQkJdmlfc3JibV9zZWxlY3QoYWRl diwgMCwgMCwgMCwgMCk7Ci0JCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7CisJdmlf c3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7CisJbXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJt X211dGV4KTsKKworCWFtZGdwdV9ib19rdW5tYXAocmluZy0+bXFkX29iaik7CitvdXRfdW5yZXNl cnZlOgorCWFtZGdwdV9ib191bnJlc2VydmUocmluZy0+bXFkX29iaik7CitvdXQ6CisJcmV0dXJu IHI7Cit9CiAKLQkJYW1kZ3B1X2JvX2t1bm1hcChyaW5nLT5tcWRfb2JqKTsKLQkJYW1kZ3B1X2Jv X3VucmVzZXJ2ZShyaW5nLT5tcWRfb2JqKTsKK3N0YXRpYyBpbnQgZ2Z4X3Y4XzBfY3BfY29tcHV0 ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IHIsIGk7CisJdTMy IHRtcDsKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmc7CisKKwkvKiBTdGF0aW5nIHdpdGggZ2Z4 djgsIGFsbCB0aGUgcGlwZSBzcGVjaWZpYyBzdGF0ZSB3YXMgcmVtb3ZlZAorCSAqIFRoZSBmaWVs ZHMgaGF2ZSBiZWVuIG1vdmVkIHRvIGJlIHBlci1IUUQgbm93LiAqLworCisJLyogaW5pdCB0aGUg cXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsg aSsrKSB7CisJCXIgPSBnZnhfdjhfMF9jb21wdXRlX3F1ZXVlX2luaXQoYWRldiwgaSk7CisJCWlm IChyKSB7CisJCQlnZnhfdjhfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7CisJCQlyZXR1cm4gcjsK KwkJfQogCX0KIAotCWlmICh1c2VfZG9vcmJlbGwpIHsKLQkJdG1wID0gUlJFRzMyKG1tQ1BfUFFf U1RBVFVTKTsKLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX1BRX1NUQVRVUywgRE9PUkJF TExfRU5BQkxFLCAxKTsKLQkJV1JFRzMyKG1tQ1BfUFFfU1RBVFVTLCB0bXApOworCWlmIChhZGV2 LT5hc2ljX3R5cGUgPT0gQ0hJUF9TVE9ORVkgfHwKKwkgICAgYWRldi0+YXNpY190eXBlID09IENI SVBfUE9MQVJJUzExIHx8CisJICAgIGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMCB8 fAorCSAgICBhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xBUklTMTIpIHsKKwkJdG1wID0gUlJF RzMyKG1tQ1BfTUUxX1BJUEUzX0lOVF9DTlRMKTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAs IENQX01FMV9QSVBFM19JTlRfQ05UTCwgR0VORVJJQzJfSU5UX0VOQUJMRSwgMSk7CisJCVdSRUcz MihtbUNQX01FMV9QSVBFM19JTlRfQ05UTCwgdG1wKTsKIAl9CiAKIAlnZnhfdjhfMF9jcF9jb21w dXRlX2VuYWJsZShhZGV2LCB0cnVlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVt X2NvbXB1dGVfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSAmYWRl di0+Z2Z4LmNvbXB1dGVfcmluZ1tpXTsKKwkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5n W2ldOwogCiAJCXJpbmctPnJlYWR5ID0gdHJ1ZTsKIAkJciA9IGFtZGdwdV9yaW5nX3Rlc3Rfcmlu ZyhyaW5nKTsKIAkJaWYgKHIpCiAJCQlyaW5nLT5yZWFkeSA9IGZhbHNlOwogCX0KIAogCXJldHVy biAwOwogfQogCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQt Z2Z4Cg==