From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH 8/8] i915: add DP 1.2 MST support (v0.1) Date: Fri, 2 May 2014 14:39:45 +1000 Message-ID: <1399005585-2396-9-git-send-email-airlied@gmail.com> References: <1399005585-2396-1-git-send-email-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTP id DEA2E6E47D for ; Thu, 1 May 2014 21:39:59 -0700 (PDT) Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s424dwqW024701 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 2 May 2014 00:39:59 -0400 Received: from dhcp-40-87.bne.redhat.com (dhcp-40-87.bne.redhat.com [10.64.40.87]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s424dm95002495 for ; Fri, 2 May 2014 00:39:58 -0400 In-Reply-To: <1399005585-2396-1-git-send-email-airlied@gmail.com> 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 List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgYWRkcyBEUCAxLjIg TVNUIHN1cHBvcnQgb24gSGFzd2VsbCBzeXN0ZW1zLgoKTm90ZXM6CmEpIHRoaXMgcmV3b3JrcyBp cnEgaGFuZGxpbmcgZm9yIERQIE1TVCBwb3J0cywgc28gdGhhdCB3ZSBjYW4KYXZvaWQgdGhlIG1v ZGUgY29uZmlnIGxvY2tpbmcgaW4gdGhlIGN1cnJlbnQgaHBkIGhhbmRsZXJzLCBhcwp3ZSBuZWVk IHRvIHByb2Nlc3MgdXAvZG93biBtc2dzIGF0IGEgYmV0dGVyIHRpbWUuCgpiKSBpdCBpbnRyb2R1 Y2VzIGEgbmV3IE1TVCBvdXRwdXQgdHlwZS4KCmMpIGl0IHJlYWxseSBhbm5veXMgdGhlIHN0YXRl IGNoZWNrZXIsIGFzIHRoZSBjb25uZWN0b3IgdGhhdCBpcwpjb25uZWN0ZWQgYXQgdGhlIHN0YXJ0 LCBnb2VzIGludG8gZGlzY29ubmVjdGVkLCBhbmQgaXRzIGVuY29kZXIKaXQgYWN0aXZlLCBhbmQg dGhpbmdzIGJsb3cgdXAsIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0byBzb2x2ZSB0aGF0LgoKZCkg dGhlIGludGVsIHVzZXJzcGFjZSBkcml2ZXIgbmVlZHMgY2hhbmdlcyB0byB1c2UgdGhpcywgLW1v ZGVzZXR0aW5nCnNob3VsZCB3b3JrIG9rYXkuCgplKSBpdCBtaWdodCBjb250YWluIGEgcmFjZSBj b25kaXRpb24gYmlnIGVub3VnaCB0byBlYXQgeW91LgoKZikgaXRzIGhhcmRjb2RlZCB0byA0IGxh bmVzIDUuNEdoei4gLSBUT0RPLgoKVE9ETzoKIHdyaXRlIFRPRE9zLgoKU2lnbmVkLW9mZi1ieTog RGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCAgICAgIHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICB8IDEw NSArKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgICAgIHwgMTA2ICsr KysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgNTYgKystLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgICAgIHwgMTc0ICsrKysrKysrKysrLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgIHwgNTAyICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAg ICAgfCAgMzkgKystCiA4IGZpbGVzIGNoYW5nZWQsIDk0MiBpbnNlcnRpb25zKCspLCA0NiBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cF9tc3QuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggYjE0NDViNy4uNmNmMmI5NSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKQEAgLTUyLDYgKzUyLDcgQEAgaTkxNS15ICs9IGR2b19jaDcwMTcubyBc CiAJICBpbnRlbF9jcnQubyBcCiAJICBpbnRlbF9kZGkubyBcCiAJICBpbnRlbF9kcC5vIFwKKwkg IGludGVsX2RwX21zdC5vIFwKIAkgIGludGVsX2RzaV9jbWQubyBcCiAJICBpbnRlbF9kc2kubyBc CiAJICBpbnRlbF9kc2lfcGxsLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggN2Q2YWNi NC4uMzZhNWM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNDY4LDYgKzE0NjgsOSBA QCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAKIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBt OwogCisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaHBkX2lycV9wb3J0W0k5MTVfTUFYX1BP UlRTXTsKKwl1MzIgaHBkX3BvcnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IGRpZ19wb3J0X3dvcms7 CiAJLyogT2xkIGRyaTEgc3VwcG9ydCBpbmZyYXN0cnVjdHVyZSwgYmV3YXJlIHRoZSBkcmFnb25z IHlhIGZvb2xzIGVudGVyaW5nCiAJICogaGVyZSEgKi8KIAlzdHJ1Y3QgaTkxNV9kcmkxX3N0YXRl IGRyaTE7CkBAIC0xOTk5LDYgKzIwMDIsOCBAQCBpOTE1X2Rpc2FibGVfcGlwZXN0YXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSwKIAogdm9pZCB2YWxs ZXl2aWV3X2VuYWJsZV9kaXNwbGF5X2lycXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKIHZvaWQgdmFsbGV5dmlld19kaXNhYmxlX2Rpc3BsYXlfaXJxcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworYm9vbCBpbnRlbF9ocGRfaXJxX2V2ZW50KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAK IC8qIGk5MTVfZ2VtLmMgKi8KIGludCBpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA1ODUyZGVl Li5kZGQ0ZDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTk2Myw4ICs5NjMsOCBAQCBz dGF0aWMgaW50IGk5MTVfZ2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgaW50IHBpcGUsCiAJCQkJCQkgICAgICZ0b19pbnRlbF9jcnRjKGNydGMpLT5jb25maWcuYWRq dXN0ZWRfbW9kZSk7CiB9CiAKLXN0YXRpYyBib29sIGludGVsX2hwZF9pcnFfZXZlbnQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor Ym9vbCBpbnRlbF9ocGRfaXJxX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzIG9sZF9zdGF0dXM7CiAKQEAgLTk4NCw2ICs5ODQsNzAgQEAgc3RhdGljIGJvb2wgaW50ZWxf aHBkX2lycV9ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldHVybiB0cnVlOwogfQog CitzdGF0aWMgaW50IHBvcnRfdG9faG90cGx1Z19zaGlmdChlbnVtIHBvcnQgcG9ydCkKK3sKKwlz d2l0Y2ggKHBvcnQpIHsKKwljYXNlIFBPUlRfQToKKwljYXNlIFBPUlRfRToKKwlkZWZhdWx0Ogor CQlyZXR1cm4gLTE7CisJY2FzZSBQT1JUX0I6CisJCXJldHVybiAwOworCWNhc2UgUE9SVF9DOgor CQlyZXR1cm4gODsKKwljYXNlIFBPUlRfRDoKKwkJcmV0dXJuIDE2OworCX0KK30KK3N0YXRpYyB2 b2lkIGk5MTVfZGlncG9ydF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgZGlnX3BvcnRfd29yayk7CisJdW5zaWduZWQgbG9u ZyBpcnFmbGFnczsKKwl1MzIgcG9ydF9iaXRzOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ3BvcnQ7CisJaW50IGksIHJldDsKKwl1MzIgb2xkX2JpdHMgPSAwOworCXUzMiBob3RwbHVn X3JlZywgaHBzaGlmdDsKKwlib29sIGxvbmdfaHBkID0gZmFsc2U7CisJc3Bpbl9sb2NrX2lycXNh dmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCXBvcnRfYml0cyA9IGRldl9wcml2 LT5ocGRfcG9ydDsKKwlkZXZfcHJpdi0+aHBkX3BvcnQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJaG90cGx1Z19yZWcgPSBJ OTE1X1JFQUQoUENIX1BPUlRfSE9UUExVRyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhf UE9SVFM7IGkrKykgeworCQlpZiAocG9ydF9iaXRzICYgKDEgPDwgaSkpIHsKKworCQkJaHBzaGlm dCA9IHBvcnRfdG9faG90cGx1Z19zaGlmdChpKTsKKworCQkJLyogaWYgd2UgaGF2ZSBubyBIUEQg Yml0cyBmb3IgdGhpcyAqLworCQkJaWYgKCEoKGhvdHBsdWdfcmVnID4+IGhwc2hpZnQpICYgUE9S VEJfSE9UUExVR19TVEFUVVNfTUFTSykpIHsKKwkJCQlyZXQgPSAxOworCQkJCWNvbnRpbnVlOwor CQkJfQorCisJCQlsb25nX2hwZCA9IChob3RwbHVnX3JlZyA+PiBocHNoaWZ0KSAmIFBPUlRCX0hP VFBMVUdfTE9OR19ERVRFQ1Q7CisJCQlkaWdwb3J0ID0gZGV2X3ByaXYtPmhwZF9pcnFfcG9ydFtp XTsKKworCQkJcmV0ID0gaW50ZWxfZHBfaGFuZGxlX2hwZF9pcnEoZGlncG9ydCwgbG9uZ19ocGQp OworCQkJaWYgKHJldCA9PSAxKSB7CisJCQkJLyogaWYgd2UgZ2V0IDEgZmFsbGJhY2sgdG8gb2xk IHNjaG9vbCBocGQgKi8KKwkJCQlvbGRfYml0cyB8PSAoMSA8PCBkaWdwb3J0LT5iYXNlLmhwZF9w aW4pOworCQkJfQorCQl9CisJfQorCUk5MTVfV1JJVEUoUENIX1BPUlRfSE9UUExVRywgaG90cGx1 Z19yZWcpOworCisJaWYgKG9sZF9iaXRzKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJp di0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwkJZGV2X3ByaXYtPmhwZF9ldmVudF9iaXRzID0gb2xk X2JpdHM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJx ZmxhZ3MpOworCQlzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+aG90cGx1Z193b3JrKTsKKwl9Cit9 CisKIC8qCiAgKiBIYW5kbGUgaG90cGx1ZyBldmVudHMgb3V0c2lkZSB0aGUgaW50ZXJydXB0IGhh bmRsZXIgcHJvcGVyLgogICovCkBAIC0xMzgxLDE0ICsxNDQ1LDI5IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBnZW44X2d0X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAjZGVmaW5l IEhQRF9TVE9STV9ERVRFQ1RfUEVSSU9EIDEwMDAKICNkZWZpbmUgSFBEX1NUT1JNX1RIUkVTSE9M RCA1CiAKK3N0YXRpYyBpbmxpbmUgZW51bSBwb3J0IGdldF9wb3J0X2Zyb21fcGluKGVudW0gaHBk X3BpbiBwaW4pCit7CisJc3dpdGNoIChwaW4pIHsKKwljYXNlIEhQRF9QT1JUX0I6CisJCXJldHVy biBQT1JUX0I7CisJY2FzZSBIUERfUE9SVF9DOgorCQlyZXR1cm4gUE9SVF9DOworCWNhc2UgSFBE X1BPUlRfRDoKKwkJcmV0dXJuIFBPUlRfRDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gUE9SVF9BOyAv KiBubyBocGQgKi8KKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9ocGRfaXJxX2hh bmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJIHUzMiBob3RwbHVnX3RyaWdnZXIs CiAJCQkJCSBjb25zdCB1MzIgKmhwZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpOworCWVudW0gcG9ydCBwb3J0OwogCWJv b2wgc3Rvcm1fZGV0ZWN0ZWQgPSBmYWxzZTsKLQorCWJvb2wgcXVldWVfZGlnID0gZmFsc2UsIHF1 ZXVlX2hwID0gZmFsc2U7CiAJaWYgKCFob3RwbHVnX3RyaWdnZXIpCiAJCXJldHVybjsKIApAQCAt MTM5Nyw2ICsxNDc2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9ocGRfaXJxX2hhbmRs ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogCXNwaW5fbG9jaygmZGV2X3ByaXYtPmlycV9s b2NrKTsKIAlmb3IgKGkgPSAxOyBpIDwgSFBEX05VTV9QSU5TOyBpKyspIHsKKwkJaWYgKCEoaHBk W2ldICYgaG90cGx1Z190cmlnZ2VyKSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQgPSBnZXRfcG9y dF9mcm9tX3BpbihpKTsKKwkJaWYgKHBvcnQgJiYgZGV2X3ByaXYtPmhwZF9pcnFfcG9ydFtwb3J0 XSkgeworCQkJRFJNX0RFQlVHX0RSSVZFUigiZGlnaXRhbCBocGQgcG9ydCAlZFxuIiwgcG9ydCk7 CisJCQlkZXZfcHJpdi0+aHBkX3BvcnQgfD0gKDEgPDwgcG9ydCk7CisJCQlob3RwbHVnX3RyaWdn ZXIgJj0gfmhwZFtpXTsKKwkJCXF1ZXVlX2RpZyA9IHRydWU7CisJCX0KKwl9CisKKwlmb3IgKGkg PSAxOyBpIDwgSFBEX05VTV9QSU5TOyBpKyspIHsKIAogCQlpZiAoaHBkW2ldICYgaG90cGx1Z190 cmlnZ2VyICYmCiAJCSAgICBkZXZfcHJpdi0+aHBkX3N0YXRzW2ldLmhwZF9tYXJrID09IEhQRF9E SVNBQkxFRCkgewpAQCAtMTQxOCw2ICsxNTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVs X2hwZF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJY29udGludWU7CiAK IAkJZGV2X3ByaXYtPmhwZF9ldmVudF9iaXRzIHw9ICgxIDw8IGkpOworCQlxdWV1ZV9ocCA9IHRy dWU7CiAJCWlmICghdGltZV9pbl9yYW5nZShqaWZmaWVzLCBkZXZfcHJpdi0+aHBkX3N0YXRzW2ld LmhwZF9sYXN0X2ppZmZpZXMsCiAJCQkJICAgZGV2X3ByaXYtPmhwZF9zdGF0c1tpXS5ocGRfbGFz dF9qaWZmaWVzCiAJCQkJICAgKyBtc2Vjc190b19qaWZmaWVzKEhQRF9TVE9STV9ERVRFQ1RfUEVS SU9EKSkpIHsKQEAgLTE0NDYsNyArMTUzOSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxf aHBkX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJICogcXVldWUgZm9yIG90 aGVyd2lzZSB0aGUgZmx1c2hfd29yayBpbiB0aGUgcGFnZWZsaXAgY29kZSB3aWxsCiAJICogZGVh ZGxvY2suCiAJICovCi0Jc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29yayk7CisJ aWYgKHF1ZXVlX2RpZykKKwkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmRpZ19wb3J0X3dvcmsp OworCWlmIChxdWV1ZV9ocCkKKwkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29y ayk7CiB9CiAKIHN0YXRpYyB2b2lkIGdtYnVzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCkBAIC00MDE0LDYgKzQxMTAsNyBAQCB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKIAorCUlOSVRfV09SSygmZGV2X3ByaXYtPmRpZ19wb3J0X3dvcmss IGk5MTVfZGlncG9ydF93b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmZGV2X3ByaXYtPmhvdHBsdWdf d29yaywgaTkxNV9ob3RwbHVnX3dvcmtfZnVuYyk7CiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+Z3B1 X2Vycm9yLndvcmssIGk5MTVfZXJyb3Jfd29ya19mdW5jKTsKIAlJTklUX1dPUksoJmRldl9wcml2 LT5ycHMud29yaywgZ2VuNl9wbV9ycHNfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCmlu ZGV4IGE1YjhiNzYuLjYxZDU5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RkaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCkBAIC0xMTYs NyArMTE2LDEwIEBAIGVudW0gcG9ydCBpbnRlbF9kZGlfZ2V0X2VuY29kZXJfcG9ydChzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIgPSAmaW50ZWxfZW5jb2Rlci0+YmFzZTsKIAlpbnQgdHlwZSA9IGludGVsX2VuY29kZXItPnR5 cGU7CiAKLQlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQgfHwgdHlwZSA9PSBJ TlRFTF9PVVRQVVRfRURQIHx8CisJaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkgewor CQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGVuY190b19tc3Qo ZW5jb2RlciktPnByaW1hcnk7CisJCXJldHVybiBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKKwl9IGVs c2UgaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUIHx8IHR5cGUgPT0gSU5URUxf T1VUUFVUX0VEUCB8fAogCSAgICB0eXBlID09IElOVEVMX09VVFBVVF9IRE1JIHx8IHR5cGUgPT0g SU5URUxfT1VUUFVUX1VOS05PV04pIHsKIAkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50 ZWxfZGlnX3BvcnQgPQogCQkJZW5jX3RvX2RpZ19wb3J0KGVuY29kZXIpOwpAQCAtMjExLDYgKzIx NCwxOSBAQCB2b2lkIGludGVsX3ByZXBhcmVfZGRpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJ CWludGVsX3ByZXBhcmVfZGRpX2J1ZmZlcnMoZGV2LCBwb3J0KTsKIH0KIAordm9pZCBpbnRlbF9k ZGlfZm9yY2VfYWN0KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLCBib29sIHN0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuY29kZXItPmJhc2UuZGV2 LT5kZXZfcHJpdmF0ZTsKKwllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RkaV9nZXRfZW5jb2Rlcl9w b3J0KGVuY29kZXIpOworCXUzMiB2YWw7CisJdmFsID0gSTkxNV9SRUFEKERQX1RQX0NUTChwb3J0 KSk7CisJaWYgKHN0YXRlID09IHRydWUpCisJCXZhbCB8PSBEUF9UUF9DVExfRk9SQ0VfQUNUOwor CWVsc2UKKwkJdmFsICY9IH5EUF9UUF9DVExfRk9SQ0VfQUNUOworCUk5MTVfV1JJVEUoRFBfVFBf Q1RMKHBvcnQpLCB2YWwpOworfQorCiBzdGF0aWMgY29uc3QgbG9uZyBoc3dfZGRpX2J1Zl9jdGxf dmFsdWVzW10gPSB7CiAJRERJX0JVRl9FTVBfNDAwTVZfMERCX0hTVywKIAlERElfQlVGX0VNUF80 MDBNVl8zXzVEQl9IU1csCkBAIC02NzMsOCArNjg5LDggQEAgc3RhdGljIGludCBpbnRlbF9kZGlf Y2FsY193cnBsbF9saW5rKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1 cm4gKHJlZmNsayAqIG4gKiAxMDApIC8gKHAgKiByKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxf ZGRpX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKLQkJCQlzdHJ1Y3Qg aW50ZWxfY3J0Y19jb25maWcgKnBpcGVfY29uZmlnKQordm9pZCBpbnRlbF9kZGlfY2xvY2tfZ2V0 KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJIHN0cnVjdCBpbnRlbF9jcnRjX2Nv bmZpZyAqcGlwZV9jb25maWcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZW5jb2Rlci0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwogCWVudW0gcG9ydCBwb3J0ID0gaW50 ZWxfZGRpX2dldF9lbmNvZGVyX3BvcnQoZW5jb2Rlcik7CkBAIC03OTUsNiArODExLDIwIEBAIGlu dGVsX2RkaV9jYWxjdWxhdGVfd3JwbGwoaW50IGNsb2NrIC8qIGluIEh6ICovLAogCSpyMl9vdXQg PSBiZXN0LnIyOwogfQogCitzdGF0aWMgaW50IGxpbmtfYndfdG9fcGxsX3NlbChpbnQgbGlua19i dykKK3sKKwlzd2l0Y2ggKGxpbmtfYncpIHsKKwljYXNlIERQX0xJTktfQldfMV82MjoKKwkJcmV0 dXJuIFBPUlRfQ0xLX1NFTF9MQ1BMTF84MTA7CisJY2FzZSBEUF9MSU5LX0JXXzJfNzoKKwkJcmV0 dXJuIFBPUlRfQ0xLX1NFTF9MQ1BMTF8xMzUwOworCWNhc2UgRFBfTElOS19CV181XzQ6CisJCXJl dHVybiBQT1JUX0NMS19TRUxfTENQTExfMjcwMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJ fQorfQorCiAvKgogICogVHJpZXMgdG8gZmluZCBhIFBMTCBmb3IgdGhlIENSVEMuIElmIGl0IGZp bmRzLCBpdCBpbmNyZWFzZXMgdGhlIHJlZmNvdW50IGFuZAogICogc3RvcmVzIGl0IGluIGludGVs X2NydGMtPmRkaV9wbGxfc2VsLCBzbyBvdGhlciBtb2RlIHNldHMgd29uJ3QgYmUgYWJsZSB0bwpA QCAtODE0LDIwICs4NDQsMTkgQEAgYm9vbCBpbnRlbF9kZGlfcGxsX3NlbGVjdChzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YykKIAogCWludGVsX2RkaV9wdXRfY3J0Y19wbGwoY3J0Yyk7CiAK LQlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQgfHwgdHlwZSA9PSBJTlRFTF9P VVRQVVRfRURQKSB7CisJaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkgeworCQlzdHJ1 Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9IGVuY190b19tc3QoZW5jb2Rlcik7 CisJCWludGVsX2NydGMtPmRkaV9wbGxfc2VsID0gbGlua19id190b19wbGxfc2VsKGludGVsX21z dC0+cHJpbWFyeS0+ZHAubGlua19idyk7CisJCWlmIChpbnRlbF9jcnRjLT5kZGlfcGxsX3NlbCA9 PSAtMSkgeworCQkJRFJNX0VSUk9SKCJMaW5rIGJhbmR3aWR0aCAlZCB1bnN1cHBvcnRlZFxuIiwK KwkJCQkgIGludGVsX21zdC0+cHJpbWFyeS0+ZHAubGlua19idyk7CisJCQlyZXR1cm4gZmFsc2U7 CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUIHx8IHR5 cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewogCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwogCi0JCXN3aXRjaCAoaW50ZWxfZHAtPmxpbmtfYncp IHsKLQkJY2FzZSBEUF9MSU5LX0JXXzFfNjI6Ci0JCQlpbnRlbF9jcnRjLT5kZGlfcGxsX3NlbCA9 IFBPUlRfQ0xLX1NFTF9MQ1BMTF84MTA7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9MSU5LX0JXXzJf NzoKLQkJCWludGVsX2NydGMtPmRkaV9wbGxfc2VsID0gUE9SVF9DTEtfU0VMX0xDUExMXzEzNTA7 Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9MSU5LX0JXXzVfNDoKLQkJCWludGVsX2NydGMtPmRkaV9w bGxfc2VsID0gUE9SVF9DTEtfU0VMX0xDUExMXzI3MDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoK KwkJaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwgPSBsaW5rX2J3X3RvX3BsbF9zZWwoaW50ZWxfZHAt PmxpbmtfYncpOworCQlpZiAoaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwgPT0gLTEpIHsKIAkJCURS TV9FUlJPUigiTGluayBiYW5kd2lkdGggJWQgdW5zdXBwb3J0ZWRcbiIsCiAJCQkJICBpbnRlbF9k cC0+bGlua19idyk7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC05ODEsOCArMTAxMCw3IEBAIHZvaWQg aW50ZWxfZGRpX3NldF9waXBlX3NldHRpbmdzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlpbnQg dHlwZSA9IGludGVsX2VuY29kZXItPnR5cGU7CiAJdWludDMyX3QgdGVtcDsKIAotCWlmICh0eXBl ID09IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCB8fCB0eXBlID09IElOVEVMX09VVFBVVF9FRFAp IHsKLQorCWlmICh0eXBlID09IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCB8fCB0eXBlID09IElO VEVMX09VVFBVVF9FRFAgfHwgdHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKSB7CiAJCXRlbXAg PSBUUkFOU19NU0FfU1lOQ19DTEs7CiAJCXN3aXRjaCAoaW50ZWxfY3J0Yy0+Y29uZmlnLnBpcGVf YnBwKSB7CiAJCWNhc2UgMTg6CkBAIC0xMDA0LDYgKzEwMzIsMjEgQEAgdm9pZCBpbnRlbF9kZGlf c2V0X3BpcGVfc2V0dGluZ3Moc3RydWN0IGRybV9jcnRjICpjcnRjKQogCX0KIH0KIAordm9pZCBp bnRlbF9kZGlfc2V0X3ZjX3BheWxvYWRfYWxsb2Moc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29s IHN0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSB0cmFu c2NvZGVyIGNwdV90cmFuc2NvZGVyID0gaW50ZWxfY3J0Yy0+Y29uZmlnLmNwdV90cmFuc2NvZGVy OworCXVpbnQzMl90IHRlbXA7CisJdGVtcCA9IEk5MTVfUkVBRChUUkFOU19ERElfRlVOQ19DVEwo Y3B1X3RyYW5zY29kZXIpKTsKKwlpZiAoc3RhdGUgPT0gdHJ1ZSkKKwkJdGVtcCB8PSBUUkFOU19E RElfRFBfVkNfUEFZTE9BRF9BTExPQzsKKwllbHNlCisJCXRlbXAgJj0gflRSQU5TX0RESV9EUF9W Q19QQVlMT0FEX0FMTE9DOworCUk5MTVfV1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFu c2NvZGVyKSwgdGVtcCk7Cit9CisKIHZvaWQgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVyX2Z1 bmMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTEwODMsNyArMTEyNiwxOSBAQCB2b2lkIGlu dGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJ ICAgdHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7CiAJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CiAKLQkJdGVtcCB8PSBUUkFOU19ERElfTU9E RV9TRUxFQ1RfRFBfU1NUOworCQlpZiAoaW50ZWxfZHAtPmlzX21zdCkgeworCQkJdGVtcCB8PSBU UkFOU19ERElfTU9ERV9TRUxFQ1RfRFBfTVNUOworCQl9IGVsc2UKKwkJCXRlbXAgfD0gVFJBTlNf RERJX01PREVfU0VMRUNUX0RQX1NTVDsKKworCQl0ZW1wIHw9IERESV9QT1JUX1dJRFRIKGludGVs X2RwLT5sYW5lX2NvdW50KTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01T VCkgeworCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gJmVuY190b19tc3QoZW5jb2Rlcikt PnByaW1hcnktPmRwOworCisJCWlmIChpbnRlbF9kcC0+aXNfbXN0KSB7CisJCQl0ZW1wIHw9IFRS QU5TX0RESV9NT0RFX1NFTEVDVF9EUF9NU1Q7CisJCX0gZWxzZQorCQkJdGVtcCB8PSBUUkFOU19E RElfTU9ERV9TRUxFQ1RfRFBfU1NUOwogCiAJCXRlbXAgfD0gRERJX1BPUlRfV0lEVEgoaW50ZWxf ZHAtPmxhbmVfY291bnQpOwogCX0gZWxzZSB7CkBAIC0xMTAwLDcgKzExNTUsNyBAQCB2b2lkIGlu dGVsX2RkaV9kaXNhYmxlX3RyYW5zY29kZXJfZnVuYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJdWludDMyX3QgcmVnID0gVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFuc2Nv ZGVyKTsKIAl1aW50MzJfdCB2YWwgPSBJOTE1X1JFQUQocmVnKTsKIAotCXZhbCAmPSB+KFRSQU5T X0RESV9GVU5DX0VOQUJMRSB8IFRSQU5TX0RESV9QT1JUX01BU0spOworCXZhbCAmPSB+KFRSQU5T X0RESV9GVU5DX0VOQUJMRSB8IFRSQU5TX0RESV9QT1JUX01BU0sgfCBUUkFOU19ERElfRFBfVkNf UEFZTE9BRF9BTExPQyk7CiAJdmFsIHw9IFRSQU5TX0RESV9QT1JUX05PTkU7CiAJSTkxNV9XUklU RShyZWcsIHZhbCk7CiB9CkBAIC0xNDk4LDEwICsxNTUzLDE1IEBAIHZvaWQgaW50ZWxfZGRpX3By ZXBhcmVfbGlua19yZXRyYWluKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAkJCWludGVs X3dhaXRfZGRpX2J1Zl9pZGxlKGRldl9wcml2LCBwb3J0KTsKIAl9CiAKLQl2YWwgPSBEUF9UUF9D VExfRU5BQkxFIHwgRFBfVFBfQ1RMX01PREVfU1NUIHwKKwl2YWwgPSBEUF9UUF9DVExfRU5BQkxF IHwKIAkgICAgICBEUF9UUF9DVExfTElOS19UUkFJTl9QQVQxIHwgRFBfVFBfQ1RMX1NDUkFNQkxF X0RJU0FCTEU7Ci0JaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2Qp KQotCQl2YWwgfD0gRFBfVFBfQ1RMX0VOSEFOQ0VEX0ZSQU1FX0VOQUJMRTsKKwlpZiAoaW50ZWxf ZHAtPmlzX21zdCkKKwkJdmFsIHw9IERQX1RQX0NUTF9NT0RFX01TVDsKKwllbHNlIHsKKwkJdmFs IHw9IERQX1RQX0NUTF9NT0RFX1NTVDsKKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAo aW50ZWxfZHAtPmRwY2QpKQorCQkJdmFsIHw9IERQX1RQX0NUTF9FTkhBTkNFRF9GUkFNRV9FTkFC TEU7CisJfQogCUk5MTVfV1JJVEUoRFBfVFBfQ1RMKHBvcnQpLCB2YWwpOwogCVBPU1RJTkdfUkVB RChEUF9UUF9DVEwocG9ydCkpOwogCkBAIC0xNzMyLDYgKzE3OTIsOCBAQCB2b2lkIGludGVsX2Rk aV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0KQogCWludGVsX2Vu Y29kZXItPmNsb25lYWJsZSA9IDA7CiAJaW50ZWxfZW5jb2Rlci0+aG90X3BsdWcgPSBpbnRlbF9k ZGlfaG90X3BsdWc7CiAKKwlkZXZfcHJpdi0+aHBkX2lycV9wb3J0W3BvcnRdID0gaW50ZWxfZGln X3BvcnQ7CisKIAlpZiAoaW5pdF9kcCkKIAkJZHBfY29ubmVjdG9yID0gaW50ZWxfZGRpX2luaXRf ZHBfY29ubmVjdG9yKGludGVsX2RpZ19wb3J0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCmluZGV4IDc1YjJhYWYuLjY0OGQ1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKQEAgLTU2LDYgKzU2LDE0IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2Nt ZDIgKm1vZGVfY21kLAogCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAK K3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZmluZF9lbmNvZGVyKHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHBpcGUpCit7CisJaWYgKCFjb25uZWN0b3It Pm1zdF9wb3J0KQorCQlyZXR1cm4gY29ubmVjdG9yLT5lbmNvZGVyOworCWVsc2UKKwkJcmV0dXJu ICZjb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfZW5jb2RlcnNbcGlwZV0tPmJhc2U7Cit9CisKIHR5 cGVkZWYgc3RydWN0IHsKIAlpbnQJbWluLCBtYXg7CiB9IGludGVsX3JhbmdlX3Q7CkBAIC0zODIx LDYgKzM4MjksOSBAQCBzdGF0aWMgdm9pZCBoYXN3ZWxsX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIAlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLmhhc19wY2hfZW5jb2RlcikKIAkJ bHB0X3BjaF9lbmFibGUoY3J0Yyk7CiAKKwlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLmRwX2VuY29k ZXJfaXNfbXN0KQorCQlpbnRlbF9kZGlfc2V0X3ZjX3BheWxvYWRfYWxsb2MoY3J0YywgdHJ1ZSk7 CisKIAlmb3JfZWFjaF9lbmNvZGVyX29uX2NydGMoZGV2LCBjcnRjLCBlbmNvZGVyKSB7CiAJCWVu Y29kZXItPmVuYWJsZShlbmNvZGVyKTsKIAkJaW50ZWxfb3ByZWdpb25fbm90aWZ5X2VuY29kZXIo ZW5jb2RlciwgdHJ1ZSk7CkBAIC00MDM4LDYgKzQwNDksMjMgQEAgc3RhdGljIHZvaWQgaTl4eF9w Zml0X2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlmb3IgKChkb21haW4pID0gMDsg KGRvbWFpbikgPCBQT1dFUl9ET01BSU5fTlVNOyAoZG9tYWluKSsrKQlcCiAJCWlmICgoMSA8PCAo ZG9tYWluKSkgJiAobWFzaykpCiAKK2VudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG9y dF90b19wb3dlcl9kb21haW4oZW51bSBwb3J0IHBvcnQpCit7CisJc3dpdGNoIChwb3J0KSB7CisJ Y2FzZSBQT1JUX0E6CisJCXJldHVybiBQT1dFUl9ET01BSU5fUE9SVF9ERElfQV80X0xBTkVTOwor CWNhc2UgUE9SVF9COgorCQlyZXR1cm4gUE9XRVJfRE9NQUlOX1BPUlRfRERJX0JfNF9MQU5FUzsK KwljYXNlIFBPUlRfQzoKKwkJcmV0dXJuIFBPV0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFORVM7 CisJY2FzZSBQT1JUX0Q6CisJCXJldHVybiBQT1dFUl9ET01BSU5fUE9SVF9ERElfRF80X0xBTkVT OworCWRlZmF1bHQ6CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIFBPV0VSX0RPTUFJTl9Q T1JUX09USEVSOworCX0KK30KKwogZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbgogaW50 ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxf ZW5jb2RlcikKIHsKQEAgLTQwNTIsMTkgKzQwODAsMTAgQEAgaW50ZWxfZGlzcGxheV9wb3J0X3Bv d2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKIAljYXNlIElO VEVMX09VVFBVVF9IRE1JOgogCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKIAkJaW50ZWxfZGlnX3Bv cnQgPSBlbmNfdG9fZGlnX3BvcnQoJmludGVsX2VuY29kZXItPmJhc2UpOwotCQlzd2l0Y2ggKGlu dGVsX2RpZ19wb3J0LT5wb3J0KSB7Ci0JCWNhc2UgUE9SVF9BOgotCQkJcmV0dXJuIFBPV0VSX0RP TUFJTl9QT1JUX0RESV9BXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9COgotCQkJcmV0dXJuIFBPV0VS X0RPTUFJTl9QT1JUX0RESV9CXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9DOgotCQkJcmV0dXJuIFBP V0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9EOgotCQkJcmV0dXJu IFBPV0VSX0RPTUFJTl9QT1JUX0RESV9EXzRfTEFORVM7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09O X09OQ0UoMSk7Ci0JCQlyZXR1cm4gUE9XRVJfRE9NQUlOX1BPUlRfT1RIRVI7Ci0JCX0KKwkJcmV0 dXJuIHBvcnRfdG9fcG93ZXJfZG9tYWluKGludGVsX2RpZ19wb3J0LT5wb3J0KTsKKwljYXNlIElO VEVMX09VVFBVVF9EUF9NU1Q6CisJCWludGVsX2RpZ19wb3J0ID0gZW5jX3RvX21zdCgmaW50ZWxf ZW5jb2Rlci0+YmFzZSktPnByaW1hcnk7CisJCXJldHVybiBwb3J0X3RvX3Bvd2VyX2RvbWFpbihp bnRlbF9kaWdfcG9ydC0+cG9ydCk7CiAJY2FzZSBJTlRFTF9PVVRQVVRfQU5BTE9HOgogCQlyZXR1 cm4gUE9XRVJfRE9NQUlOX1BPUlRfQ1JUOwogCWNhc2UgSU5URUxfT1VUUFVUX0RTSToKQEAgLTEw MjAzLDcgKzEwMjIyLDcgQEAgaW50ZWxfbW9kZXNldF9zdGFnZV9vdXRwdXRfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAkJICogZm9yIHRoZW0uICovCiAJCWZvciAocm8gPSAwOyBybyA8 IHNldC0+bnVtX2Nvbm5lY3RvcnM7IHJvKyspIHsKIAkJCWlmIChzZXQtPmNvbm5lY3RvcnNbcm9d ID09ICZjb25uZWN0b3ItPmJhc2UpIHsKLQkJCQljb25uZWN0b3ItPm5ld19lbmNvZGVyID0gY29u bmVjdG9yLT5lbmNvZGVyOworCQkJCWNvbm5lY3Rvci0+bmV3X2VuY29kZXIgPSBpbnRlbF9maW5k X2VuY29kZXIoY29ubmVjdG9yLCB0b19pbnRlbF9jcnRjKHNldC0+Y3J0YyktPnBpcGUpOwogCQkJ CWJyZWFrOwogCQkJfQogCQl9CkBAIC0xMDI0OSw3ICsxMDI2OCw3IEBAIGludGVsX21vZGVzZXRf c3RhZ2Vfb3V0cHV0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSBuZXdfY3J0 YykpIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWNvbm5lY3Rvci0+ZW5jb2Rlci0+bmV3 X2NydGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjKTsKKwkJY29ubmVjdG9yLT5uZXdfZW5jb2Rl ci0+bmV3X2NydGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjKTsKIAogCQlEUk1fREVCVUdfS01T KCJbQ09OTkVDVE9SOiVkOiVzXSB0byBbQ1JUQzolZF1cbiIsCiAJCQljb25uZWN0b3ItPmJhc2Uu YmFzZS5pZCwKQEAgLTEwMjgzLDcgKzEwMzAyLDEyIEBAIGludGVsX21vZGVzZXRfc3RhZ2Vfb3V0 cHV0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCX0KIAl9CiAJLyogTm93IHdlJ3Zl IGFsc28gdXBkYXRlZCBlbmNvZGVyLT5uZXdfY3J0YyBmb3IgYWxsIGVuY29kZXJzLiAqLwotCisJ bGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rv cl9saXN0LAorCQkJICAgIGJhc2UuaGVhZCkgeworCQlpZiAoY29ubmVjdG9yLT5uZXdfZW5jb2Rl cikKKwkJCWlmIChjb25uZWN0b3ItPm5ld19lbmNvZGVyICE9IGNvbm5lY3Rvci0+ZW5jb2RlcikK KwkJCQljb25uZWN0b3ItPmVuY29kZXIgPSBjb25uZWN0b3ItPm5ld19lbmNvZGVyOworCX0KIAls aXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwKIAkJ CSAgICBiYXNlLmhlYWQpIHsKIAkJY3J0Yy0+bmV3X2VuYWJsZWQgPSBmYWxzZTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5jCmluZGV4IDQ0ZGY0OTMuLjZhYWFkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwpAQCAtNzAxLDggKzcwMSw5IEBAIGludGVsX2RwX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKHN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoJmludGVsX2Nvbm5lY3Rvci0+YmFzZSk7 CiAKLQlzeXNmc19yZW1vdmVfbGluaygmaW50ZWxfY29ubmVjdG9yLT5iYXNlLmtkZXYtPmtvYmos Ci0JCQkgIGludGVsX2RwLT5hdXguZGRjLmRldi5rb2JqLm5hbWUpOworCWlmICghaW50ZWxfY29u bmVjdG9yLT5tc3RfcG9ydCkKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmludGVsX2Nvbm5lY3Rvci0+ YmFzZS5rZGV2LT5rb2JqLAorCQkJCSAgaW50ZWxfZHAtPmF1eC5kZGMuZGV2LmtvYmoubmFtZSk7 CiAJaW50ZWxfY29ubmVjdG9yX3VucmVnaXN0ZXIoaW50ZWxfY29ubmVjdG9yKTsKIH0KIApAQCAt Mjg5Miw2ICsyODkzLDMzIEBAIGludGVsX2RwX3Byb2JlX291aShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQogCWVkcF9wYW5lbF92ZGRfb2ZmKGludGVsX2RwLCBmYWxzZSk7CiB9CiAKK3N0YXRp YyBib29sCitpbnRlbF9kcF9wcm9iZV9tc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sK Kwl1OCBidWZbMV07CisKKwlpZiAoIWludGVsX2RwLT5jYW5fbXN0KQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAoaW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdIDwgMHgxMikKKwkJcmV0dXJuIGZh bHNlOworCisJX2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOworCWlmIChpbnRlbF9kcF9kcGNk X3JlYWRfd2FrZSgmaW50ZWxfZHAtPmF1eCwgRFBfTVNUTV9DQVAsIGJ1ZiwgMSkpIHsKKwkJaWYg KGJ1ZlswXSAmIERQX01TVF9DQVApIHsKKwkJCURSTV9ERUJVR19LTVMoIlNpbmsgaXMgTVNUIGNh cGFibGVcbiIpOworCQkJaW50ZWxfZHAtPmlzX21zdCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlE Uk1fREVCVUdfS01TKCJTaW5rIGlzIG5vdCBNU1QgY2FwYWJsZVxuIik7CisJCQlpbnRlbF9kcC0+ aXNfbXN0ID0gZmFsc2U7CisJCX0KKwl9CisJZWRwX3BhbmVsX3ZkZF9vZmYoaW50ZWxfZHAsIGZh bHNlKTsKKworCWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoJmludGVsX2RwLT5tc3Rf bWdyLCBpbnRlbF9kcC0+aXNfbXN0KTsKKwlyZXR1cm4gaW50ZWxfZHAtPmlzX21zdDsKK30KKwog aW50IGludGVsX2RwX3NpbmtfY3JjKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU4ICpjcmMp CiB7CiAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19k aWdfcG9ydChpbnRlbF9kcCk7CkBAIC0yOTI5LDYgKzI5NTcsMjAgQEAgaW50ZWxfZHBfZ2V0X3Np bmtfaXJxKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU4ICpzaW5rX2lycV92ZWN0b3IpCiAJ CQkJICAgICAgIHNpbmtfaXJxX3ZlY3RvciwgMSkgPT0gMTsKIH0KIAorc3RhdGljIGJvb2wKK2lu dGVsX2RwX2dldF9zaW5rX2lycV9lc2koc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTggKnNp bmtfaXJxX3ZlY3RvcikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfZHBfZHBjZF9yZWFk X3dha2UoJmludGVsX2RwLT5hdXgsCisJCQkJCSAgICAgRFBfU0lOS19DT1VOVF9FU0ksCisJCQkJ CSAgICAgc2lua19pcnFfdmVjdG9yLCA0KTsKKwlpZiAocmV0ICE9IDQpCisJCXJldHVybiBmYWxz ZTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZAogaW50ZWxfZHBfaGFuZGxlX3Rl c3RfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewpAQCAtMjk0NCw2ICsyOTg2 LDI4IEBAIGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKICAqICAzLiBVc2UgTGluayBUcmFpbmluZyBmcm9tIDIuNS4zLjMgYW5kIDMuNS4xLjMK ICAqICA0LiBDaGVjayBsaW5rIHN0YXR1cyBvbiByZWNlaXB0IG9mIGhvdC1wbHVnIGludGVycnVw dAogICovCitzdGF0aWMgaW50CitpbnRlbF9kcF9jaGVja19tc3Rfc3RhdHVzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCit7CisJaWYgKGludGVsX2RwLT5pc19tc3QpIHsKKwkJdTggZXNpWzRd ID0geyAwIH07CisJCWludCByZXQ7CisJCXJldCA9IGludGVsX2RwX2dldF9zaW5rX2lycV9lc2ko aW50ZWxfZHAsIGVzaSk7CisJCWlmIChyZXQgPT0gdHJ1ZSkgeworCQkJRFJNX0RFQlVHX0tNUygi Z290IGVzaSAlMDJ4XG4iLCBlc2lbMV0pOworCQkJaWYgKGVzaVsxXSAmIChEUF9VUF9SRVFfTVNH X1JEWSB8IERQX0RPV05fUkVQX01TR19SRFkpKSAgeworCQkJCXJldCA9IGRybV9kcF9tc3RfaHBk X2lycSgmaW50ZWxfZHAtPm1zdF9tZ3IsIGVzaVsxXSk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0K KwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGdl dCBFU0kgLSBkZXZpY2UgbWF5IGhhdmUgZmFpbGVkXG4iKTsKKwkJCWludGVsX2RwLT5pc19tc3Qg PSBmYWxzZTsKKwkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoJmludGVsX2RwLT5t c3RfbWdyLCBpbnRlbF9kcC0+aXNfbXN0KTsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30K IAogdm9pZAogaW50ZWxfZHBfY2hlY2tfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKQEAgLTMxNjMsNiArMzIyNyw3IEBAIGludGVsX2RwX2RldGVjdChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0 dXMgc3RhdHVzOwogCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWlu OwogCXN0cnVjdCBlZGlkICplZGlkID0gTlVMTDsKKwlib29sIHJldDsKIAogCWludGVsX3J1bnRp bWVfcG1fZ2V0KGRldl9wcml2KTsKIApAQCAtMzE3Miw2ICszMjM3LDEyIEBAIGludGVsX2RwX2Rl dGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQogCURSTV9E RUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAogCQkgICAgICBjb25uZWN0b3ItPmJhc2Uu aWQsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAKKwlpZiAoaW50ZWxfZHAt PmlzX21zdCkgeworCQkvKiBNU1QgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkIGZyb20gYSBtb25p dG9yIFBPViAqLworCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJ Z290byBvdXQ7CisJfQorCiAJaW50ZWxfZHAtPmhhc19hdWRpbyA9IGZhbHNlOwogCiAJaWYgKEhB U19QQ0hfU1BMSVQoZGV2KSkKQEAgLTMxODQsNiArMzI1NSwxNiBAQCBpbnRlbF9kcF9kZXRlY3Qo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKIAogCWludGVsX2Rw X3Byb2JlX291aShpbnRlbF9kcCk7CiAKKwlyZXQgPSBpbnRlbF9kcF9wcm9iZV9tc3QoaW50ZWxf ZHApOworCWlmIChyZXQpIHsKKwkJLyogaWYgd2UgYXJlIGluIE1TVCBtb2RlIHRoZW4gdGhpcyBj b25uZWN0b3IKKwkJICAgd29uJ3QgYXBwZWFyIGNvbm5lY3RlZCBvciBoYXZlIGFueXRoaW5nIHdp dGggRURJRCBvbiBpdCAqLworCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQ VVRfRURQKQorCQkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9S VDsKKwkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCWdvdG8gb3V0 OworCX0KKwogCWlmIChpbnRlbF9kcC0+Zm9yY2VfYXVkaW8gIT0gSERNSV9BVURJT19BVVRPKSB7 CiAJCWludGVsX2RwLT5oYXNfYXVkaW8gPSAoaW50ZWxfZHAtPmZvcmNlX2F1ZGlvID09IEhETUlf QVVESU9fT04pOwogCX0gZWxzZSB7CkBAIC0zNDYzLDcgKzM1NDQsNyBAQCBib29sIGludGVsX2Rw X2lzX2VkcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBvcnQgcG9ydCkKIAlyZXR1cm4g ZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQogewogCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVs X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwpAQCAtMzk1OSw2ICs0MDQwLDEzIEBAIGludGVsX2RwX2lu aXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAog CiAJaW50ZWxfZHAtPnBzcl9zZXR1cF9kb25lID0gZmFsc2U7CiAKKwkvKiBpbml0IE1TVCBvbiBw b3J0cyB0aGF0IGNhbiBzdXBwb3J0IGl0ICovCisJaWYgKElTX0hBU1dFTEwoZGV2KSB8fCBJU19C Uk9BRFdFTEwoZGV2KSkgeworCQlpZiAocG9ydCA9PSBQT1JUX0IgfHwgcG9ydCA9PSBQT1JUX0Mg fHwgcG9ydCA9PSBQT1JUX0QpIHsKKwkJCWludGVsX2RwX21zdF9pbml0X2VuY29kZXIoaW50ZWxf ZGlnX3BvcnQpOworCQl9CisJfQorCiAJaWYgKCFpbnRlbF9lZHBfaW5pdF9jb25uZWN0b3IoaW50 ZWxfZHAsIGludGVsX2Nvbm5lY3RvciwgJnBvd2VyX3NlcSkpIHsKIAkJZHJtX2RwX2F1eF91bnJl Z2lzdGVyX2kyY19idXMoJmludGVsX2RwLT5hdXgpOwogCQlpZiAoaXNfZWRwKGludGVsX2RwKSkg ewpAQCAtMzk4OSw2ICs0MDc3LDcgQEAgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiB2b2lkCiBpbnRlbF9kcF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfcmVnLCBlbnVtIHBvcnQgcG9ydCkKIHsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwog CXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0OwogCXN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9lbmNvZGVyOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsK QEAgLTQwMjksNiArNDExOCwxMCBAQCBpbnRlbF9kcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGludCBvdXRwdXRfcmVnLCBlbnVtIHBvcnQgcG9ydCkKIAlpbnRlbF9kaWdfcG9ydC0+cG9y dCA9IHBvcnQ7CiAJaW50ZWxfZGlnX3BvcnQtPmRwLm91dHB1dF9yZWcgPSBvdXRwdXRfcmVnOwog CisJLyogZm9yIG5vdyBvbmx5IHVzZSBuZXcgSVJRIGhhbmRsaW5nIGZvciBNU1QgY2FwYWJsZSBw b3J0cyAqLworCWlmIChpbnRlbF9kaWdfcG9ydC0+ZHAuY2FuX21zdCkKKwkJZGV2X3ByaXYtPmhw ZF9pcnFfcG9ydFtwb3J0XSA9IGludGVsX2RpZ19wb3J0OworCiAJaW50ZWxfZW5jb2Rlci0+dHlw ZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDsKIAlpbnRlbF9lbmNvZGVyLT5jcnRjX21hc2sg PSAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMik7CiAJaW50ZWxfZW5jb2Rlci0+Y2xvbmVh YmxlID0gMDsKQEAgLTQwNDAsMyArNDEzMyw3OCBAQCBpbnRlbF9kcF9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGludCBvdXRwdXRfcmVnLCBlbnVtIHBvcnQgcG9ydCkKIAkJa2ZyZWUoaW50 ZWxfY29ubmVjdG9yKTsKIAl9CiB9CisKKy8qCisgKiBIYW5kbGUgRFAgSVJRIGNsb3NlIHRvIHNw ZWMgcmVjb21tZW5kYXRpb25zCisgKiBVc2UgaHcgdG8gZGV0ZWN0IGxvbmcgdnMgc2hvcnQgcHVs c2VzCisgKgorICogSWYgd2UgZ2V0IGEgbG9uZyBwdWxzZSAtIHdlIG5lZWQgdG8gcmVhZCBEUENE IGZpcnN0CisgKiBJZiB3ZSBnZXQgYSBzaG9ydCBwdWxzZSAtIHdlIG5lZWQgdG8gY2hlY2sgbGlu ayBpcnEvc3RhdHVzCisgKiByZXR1cm5pbmcgMSBjYXVzZXMgdGhlIG9sZCBkZXRlY3QgdG8gaGFw cGVuIGZvciBIRE1JCisgKi8KK2ludCBpbnRlbF9kcF9oYW5kbGVfaHBkX2lycShzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICBib29sIGhwZF9sb25nKQor eworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfZGlnX3BvcnQtPmRwOworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKKwlz dHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqaW50ZWxfY29ubmVjdG9yOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCWludCByZXQ7CisK KwlpZiAoIWludGVsX2RwLT5vdXRwdXRfcmVnKQorCQlyZXR1cm4gMTsKKworCURSTV9ERUJVR19L TVMoImdvdCBocGQgaXJxIG9uIHBvcnQgJWQgLSAlc1xuIiwgaW50ZWxfZGlnX3BvcnQtPnBvcnQs CisJCSAgICAgIGhwZF9sb25nID8gImxvbmciIDogInNob3J0Iik7CisJLyogd2UgaGF2ZSB0byBy ZS1yZWFkIERQQ0Qgb25seSBvbiBhIGxvbmcgaXJxICovCisJaWYgKGhwZF9sb25nKSB7CisJCWlm ICghaW50ZWxfZHBfZ2V0X2RwY2QoaW50ZWxfZHApKQorCQkJZ290byBtc3RfZmFpbDsKKworCQlp bnRlbF9kcF9wcm9iZV9vdWkoaW50ZWxfZHApOworCisJCWlmICghaW50ZWxfZHBfcHJvYmVfbXN0 KGludGVsX2RwKSkKKwkJCWdvdG8gbXN0X2ZhaWw7CisJfQorCisJaWYgKGludGVsX2RwLT5pc19t c3QpIHsKKwkJcmV0ID0gaW50ZWxfZHBfY2hlY2tfbXN0X3N0YXR1cyhpbnRlbF9kcCk7CisJCWlm IChyZXQgPT0gLUVJTlZBTCkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWludGVsX2RwX2No ZWNrX2xpbmtfc3RhdHVzKGludGVsX2RwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJldCA9 PSAxKSB7CisJCW11dGV4X2xvY2soJm1vZGVfY29uZmlnLT5tdXRleCk7CisKKwkJLyogc2VuZCB0 aGUgc29tZXRoaW5nIGNoYW5nZWQgZXZlbnQgZm9yIHRoZSBjb3JyZWN0IHBvcnQgKi8KKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZtb2RlX2NvbmZpZy0+Y29ubmVjdG9yX2xpc3Qs IGhlYWQpIHsKKwkJCWludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0 b3IpOworCQkJaWYgKCFpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0KQorCQkJCWNvbnRpbnVlOwor CisJCQlpZiAoaW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydCAhPSBpbnRlbF9kcCkKKwkJCQljb250 aW51ZTsKKworCQkJaWYgKGludGVsX2hwZF9pcnFfZXZlbnQoZGV2LCBjb25uZWN0b3IpKQorCQkJ CWNoYW5nZWQgPSB0cnVlOworCQl9CisJCW11dGV4X3VubG9jaygmbW9kZV9jb25maWctPm11dGV4 KTsKKwkJaWYgKGNoYW5nZWQpCisJCQlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGRldik7 CisJfQorCXJldHVybiAwOworCittc3RfZmFpbDoKKwkvKiBpZiB3ZSB3ZXJlIGluIE1TVCBtb2Rl LCBhbmQgZGV2aWNlIGlzIG5vdCB0aGVyZSBnZXQgb3V0IG9mIE1TVCBtb2RlICovCisJaWYgKGlu dGVsX2RwLT5pc19tc3QpIHsKKwkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGdldCBFU0kgLSBk ZXZpY2UgbWF5IGhhdmUgZmFpbGVkXG4iKTsKKwkJaW50ZWxfZHAtPmlzX21zdCA9IGZhbHNlOwor CQlkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zZXRfbXN0KCZpbnRlbF9kcC0+bXN0X21nciwgaW50 ZWxfZHAtPmlzX21zdCk7CisJfQorCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cF9tc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU3NjE1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKQEAgLTAs MCArMSw1MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgor ICogICAgICAgICAgICAgMjAxNCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorCitib29s CitpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCisJCQkgICAgc3RydWN0IGludGVsX2NydGNfY29uZmlnICpwaXBlX2NvbmZpZykKK3sKKwlz dHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9IGVuY190b19tc3QoJmVuY29k ZXItPmJhc2UpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0g aW50ZWxfbXN0LT5wcmltYXJ5OworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxf ZGlnX3BvcnQtPmRwOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRl djsKKwlpbnQgYnBwOworCWludCBsYW5lX2NvdW50LCBzbG90czsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0+YWRqdXN0ZWRfbW9kZTsKKwlz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpmb3VuZCA9IE5VTEwsICppbnRlbF9jb25uZWN0b3I7CisJ aW50IHJldDsKKwlpbnQgbXN0X3BibjsKKworCXBpcGVfY29uZmlnLT5kcF9lbmNvZGVyX2lzX21z dCA9IHRydWU7CisJcGlwZV9jb25maWctPmhhc19wY2hfZW5jb2RlciA9IGZhbHNlOworCXBpcGVf Y29uZmlnLT5oYXNfZHBfZW5jb2RlciA9IHRydWU7CisJYnBwID0gMjQ7CisJbGFuZV9jb3VudCA9 IDQ7CisJaW50ZWxfZHAtPmxpbmtfYncgPSBEUF9MSU5LX0JXXzVfNDsKKwlpbnRlbF9kcC0+bGFu ZV9jb3VudCA9IGxhbmVfY291bnQ7CisKKwlwaXBlX2NvbmZpZy0+cGlwZV9icHAgPSAyNDsKKwlw aXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShpbnRl bF9kcC0+bGlua19idyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGVsX2Nvbm5lY3Rvciwg JmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGJhc2UuaGVhZCkgeworCQlpZiAoaW50 ZWxfY29ubmVjdG9yLT5uZXdfZW5jb2RlciA9PSBlbmNvZGVyKSB7CisJCQlmb3VuZCA9IGludGVs X2Nvbm5lY3RvcjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlEUk1f RVJST1IoImNhbid0IGZpbmQgY29ubmVjdG9yXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CW1zdF9wYm4gPSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jbG9jaywgYnBw KTsKKworCS8qIGNyZWF0ZSBhIFZDUEkgZm9yIHRoaXMgKi8KKwlyZXQgPSBkcm1fZHBfbXN0X2Fs bG9jYXRlX3ZjcGkoJmludGVsX2RwLT5tc3RfbWdyLAorCQkJCSAgICAgICBmb3VuZC0+cG9ydCwg bXN0X3BibiwgJnNsb3RzLCAtMSk7CisJaWYgKHJldCA9PSBmYWxzZSkgeworCQlEUk1fRVJST1Io ImZhaWxlZCB0byBhbGxvY2F0ZSB2Y3BpXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlu dGVsX2xpbmtfY29tcHV0ZV9tX24oYnBwLCBsYW5lX2NvdW50LAorCQkJICAgICAgIGFkanVzdGVk X21vZGUtPmNydGNfY2xvY2ssCisJCQkgICAgICAgcGlwZV9jb25maWctPnBvcnRfY2xvY2ssCisJ CQkgICAgICAgJnBpcGVfY29uZmlnLT5kcF9tX24pOworCisJcGlwZV9jb25maWctPmRwX21fbi50 dSA9IHNsb3RzOworCXJldHVybiB0cnVlOworCit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RwX21z dF9tb2RlX3NldChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgaW50 ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9IGVuY190b19tc3QoJmVuY29kZXItPmJhc2Up OworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gaW50ZWxfbXN0 LT5wcmltYXJ5OworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfZGlnX3BvcnQt PmRwOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCURSTV9E RUJVR19LTVMoIlxuIik7CisJaWYgKGludGVsX2RwLT5hY3RpdmVfbXN0X2xpbmtzID09IDApIHsK KwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZW5jb2Rlci0+YmFzZS5jcnRjOworCQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJCWVudW0gcG9y dCBwb3J0ID0gaW50ZWxfZGRpX2dldF9lbmNvZGVyX3BvcnQoZW5jb2Rlcik7CisKKwkJaW50ZWxf ZHBfc2lua19kcG1zKGludGVsX2RwLCBEUk1fTU9ERV9EUE1TX09OKTsKKworCQlJOTE1X1dSSVRF KFBPUlRfQ0xLX1NFTChwb3J0KSwgaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwpOworCisJCWludGVs X2RwX3N0YXJ0X2xpbmtfdHJhaW4oaW50ZWxfZHApOworCQlpbnRlbF9kZGlfbW9kZV9zZXRfZHAo JmludGVsX2RpZ19wb3J0LT5iYXNlKTsKKwkJaW50ZWxfZHBfY29tcGxldGVfbGlua190cmFpbihp bnRlbF9kcCk7CisJCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCk7CisJfQorCWlu dGVsX2RwLT5hY3RpdmVfbXN0X2xpbmtzKys7CisKK30KKworc3RhdGljIHZvaWQgaW50ZWxfbXN0 X2Rpc2FibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGlu dGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KCZlbmNvZGVyLT5iYXNl KTsKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpmb3VuZCA9IE5VTEwsICppbnRlbF9jb25uZWN0 b3IKKzsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9t c3QtPnByaW1hcnk7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9y dC0+ZHA7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCWlu dCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGVsX2Nvbm5lY3RvciwgJmRldi0+bW9k ZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGJhc2UuaGVhZCkgeworCQlpZiAoaW50ZWxfY29ubmVj dG9yLT5lbmNvZGVyID09IGVuY29kZXIpIHsKKwkJCWZvdW5kID0gaW50ZWxfY29ubmVjdG9yOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm47CisKKwlmb3VuZC0+ cG9ydC0+dmNwaS5udW1fc2xvdHMgPSAwOworCXJldCA9IGRybV9kcF91cGRhdGVfcGF5bG9hZF9w YXJ0MSgmaW50ZWxfZHAtPm1zdF9tZ3IpOworCisJZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGko JmludGVsX2RwLT5tc3RfbWdyLCBmb3VuZC0+cG9ydCk7CisKKwlEUk1fREVCVUdfS01TKCJcbiIp OworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9tc3RfcG9zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqaW50 ZWxfbXN0ID0gZW5jX3RvX21zdCgmZW5jb2Rlci0+YmFzZSk7CisJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9ydC0+ZHA7CisKKwlpbnRlbF9kcC0+YWN0 aXZlX21zdF9saW5rcy0tOworCWlmIChpbnRlbF9kcC0+YWN0aXZlX21zdF9saW5rcyA9PSAwKSB7 CisJCWludGVsX2RpZ19wb3J0LT5iYXNlLnBvc3RfZGlzYWJsZSgmaW50ZWxfZGlnX3BvcnQtPmJh c2UpOworCQlpbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfZHAsIERSTV9NT0RFX0RQTVNfT0ZGKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX21zdF9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqaW50 ZWxfbXN0ID0gZW5jX3RvX21zdCgmZW5jb2Rlci0+YmFzZSk7CisJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9ydC0+ZHA7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdf cG9ydC0+cG9ydDsKKwlpbnQgcmV0OworCXVpbnQzMl90IHRlbXA7CisJRFJNX0RFQlVHX0tNUygi JWRcbiIsIGludGVsX2RwLT5hY3RpdmVfbXN0X2xpbmtzKTsKKyNpZiAwCisJaWYgKGludGVsX2Rw LT5hY3RpdmVfbXN0X2xpbmtzID09IDApIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZW5j b2Rlci0+YmFzZS5jcnRjOworCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7CisJCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGRpX2dldF9lbmNvZGVy X3BvcnQoZW5jb2Rlcik7CisKKwkJSTkxNV9XUklURShQT1JUX0NMS19TRUwocG9ydCksIGludGVs X2NydGMtPmRkaV9wbGxfc2VsKTsKKworCQlpbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfZHAsIERS TV9NT0RFX0RQTVNfT04pOworCQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsK KwkJaW50ZWxfZHBfY29tcGxldGVfbGlua190cmFpbihpbnRlbF9kcCk7CisJCWludGVsX2RwX3N0 b3BfbGlua190cmFpbihpbnRlbF9kcCk7CisJfQorCisJaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlu a3MrKzsKKyNlbmRpZgorCXRlbXAgPSBJOTE1X1JFQUQoRFBfVFBfU1RBVFVTKHBvcnQpKTsKKwlJ OTE1X1dSSVRFKERQX1RQX1NUQVRVUyhwb3J0KSwgdGVtcCk7CisKKwlyZXQgPSBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDEoJmludGVsX2RwLT5tc3RfbWdyKTsKK30KKworc3RhdGljIHZvaWQg aW50ZWxfbXN0X2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKK3sKKwlz dHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9IGVuY190b19tc3QoJmVuY29k ZXItPmJhc2UpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0g aW50ZWxfbXN0LT5wcmltYXJ5OworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxf ZGlnX3BvcnQtPmRwOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+ YmFzZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOworCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPnBvcnQ7CisJ aW50IHJldDsKKworCURSTV9ERUJVR19LTVMoIiVkXG4iLCBpbnRlbF9kcC0+YWN0aXZlX21zdF9s aW5rcyk7CisKKwlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChEUF9UUF9TVEFUVVMocG9ydCkpICYg RFBfVFBfU1RBVFVTX0FDVF9TRU5UKSwKKwkJICAgICAxKSkKKwkJRFJNX0VSUk9SKCJUaW1lZCBv dXQgd2FpdGluZyBmb3IgQUNUIHNlbnRcbiIpOworCisJcmV0ID0gZHJtX2RwX2NoZWNrX2FjdF9z dGF0dXMoJmludGVsX2RwLT5tc3RfbWdyKTsKKworCXJldCA9IGRybV9kcF91cGRhdGVfcGF5bG9h ZF9wYXJ0MigmaW50ZWxfZHAtPm1zdF9tZ3IpOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9kcF9t c3RfZW5jX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJCQkg ICAgICBlbnVtIHBpcGUgKnBpcGUpCit7CisJcmV0dXJuIGVuY29kZXItPmNvbm5lY3RvcnNfYWN0 aXZlOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kcF9tc3RfZW5jX2dldF9jb25maWcoc3RydWN0 IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCXN0cnVjdCBpbnRlbF9jcnRjX2NvbmZpZyAq cGlwZV9jb25maWcpCit7CisJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3Qg PSBlbmNfdG9fbXN0KCZlbmNvZGVyLT5iYXNlKTsKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICppbnRlbF9kaWdfcG9ydCA9IGludGVsX21zdC0+cHJpbWFyeTsKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoZW5jb2Rlci0+YmFzZS5jcnRjKTsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwllbnVtIHRyYW5zY29kZXIgY3B1X3Ry YW5zY29kZXIgPSBjcnRjLT5jb25maWcuY3B1X3RyYW5zY29kZXI7CisJdTMyIHRlbXAsIGZsYWdz ID0gMDsKKworCXBpcGVfY29uZmlnLT5oYXNfZHBfZW5jb2RlciA9IHRydWU7CisKKwl0ZW1wID0g STkxNV9SRUFEKFRSQU5TX0RESV9GVU5DX0NUTChjcHVfdHJhbnNjb2RlcikpOworCWlmICh0ZW1w ICYgVFJBTlNfRERJX1BIU1lOQykKKwkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CisJ ZWxzZQorCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKKwlpZiAodGVtcCAmIFRSQU5T X0RESV9QVlNZTkMpCisJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOworCWVsc2UKKwkJ ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7CisKKwlzd2l0Y2ggKHRlbXAgJiBUUkFOU19E RElfQlBDX01BU0spIHsKKwljYXNlIFRSQU5TX0RESV9CUENfNjoKKwkJcGlwZV9jb25maWctPnBp cGVfYnBwID0gMTg7CisJCWJyZWFrOworCWNhc2UgVFJBTlNfRERJX0JQQ184OgorCQlwaXBlX2Nv bmZpZy0+cGlwZV9icHAgPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU19ERElfQlBDXzEwOgor CQlwaXBlX2NvbmZpZy0+cGlwZV9icHAgPSAzMDsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU19ERElf QlBDXzEyOgorCQlwaXBlX2NvbmZpZy0+cGlwZV9icHAgPSAzNjsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJYnJlYWs7CisJfQorCXBpcGVfY29uZmlnLT5hZGp1c3RlZF9tb2RlLmZsYWdzIHw9IGZs YWdzOworCWludGVsX2RwX2dldF9tX24oY3J0YywgcGlwZV9jb25maWcpOworCisJaW50ZWxfZGRp X2Nsb2NrX2dldCgmaW50ZWxfZGlnX3BvcnQtPmJhc2UsIHBpcGVfY29uZmlnKTsKK30KKworc3Rh dGljIGludCBpbnRlbF9kcF9tc3RfZ2V0X2RkY19tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0OworCXN0cnVjdCBlZGlkICplZGlkOworCWlu dCByZXQ7CisKKwllZGlkID0gZHJtX2RwX21zdF9nZXRfZWRpZChjb25uZWN0b3IsICZpbnRlbF9k cC0+bXN0X21nciwgaW50ZWxfY29ubmVjdG9yLT5wb3J0KTsKKwlpZiAoIWVkaWQpCisJCXJldHVy biAwOworCisJcmV0ID0gaW50ZWxfY29ubmVjdG9yX3VwZGF0ZV9tb2Rlcyhjb25uZWN0b3IsIGVk aWQpOworCWtmcmVlKGVkaWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMKK2ludGVsX21zdF9wb3J0X2RwX2RldGVjdChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nv bm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0OworCisJcmV0dXJuIGRybV9k cF9tc3RfZGV0ZWN0X3BvcnQoJmludGVsX2RwLT5tc3RfbWdyLCBpbnRlbF9jb25uZWN0b3ItPnBv cnQpOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworaW50ZWxfZHBfbXN0 X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQorewor CWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOworCXN0YXR1cyA9IGludGVsX21zdF9w b3J0X2RwX2RldGVjdChjb25uZWN0b3IpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBp bnQKK2ludGVsX2RwX21zdF9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKKwkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkgIHVpbnQ2NF90 IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ludGVsX2RwX21zdF9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVj dCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihj b25uZWN0b3IpOworCisJaWYgKCFJU19FUlJfT1JfTlVMTChpbnRlbF9jb25uZWN0b3ItPmVkaWQp KQorCQlrZnJlZShpbnRlbF9jb25uZWN0b3ItPmVkaWQpOworCisJZHJtX2Nvbm5lY3Rvcl9jbGVh bnVwKGNvbm5lY3Rvcik7CisJa2ZyZWUoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX2RwX21zdF9jb25uZWN0b3JfZnVuY3MgPSB7 CisJLmRwbXMgPSBpbnRlbF9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gaW50ZWxfZHBfbXN0 X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywKKwkuc2V0X3Byb3BlcnR5ID0gaW50ZWxfZHBfbXN0X3NldF9wcm9wZXJ0eSwKKwku ZGVzdHJveSA9IGludGVsX2RwX21zdF9jb25uZWN0b3JfZGVzdHJveSwKK307CisKK3N0YXRpYyBp bnQgaW50ZWxfZHBfbXN0X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCXJldHVybiBpbnRlbF9kcF9tc3RfZ2V0X2RkY19tb2Rlcyhjb25uZWN0b3IpOworfQor CitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK2ludGVsX2RwX21zdF9tb2RlX3ZhbGlkKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwkvKiBUT0RPIC0gdmFsaWRhdGUgbW9kZSBhZ2FpbnN0IGF2YWlsYWJsZSBQ Qk4gZm9yIGxpbmsgKi8KKwlpZiAobW9kZS0+Y2xvY2sgPCAxMDAwMCkKKwkJcmV0dXJuIE1PREVf Q0xPQ0tfTE9XOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxDTEspCisJ CXJldHVybiBNT0RFX0hfSUxMRUdBTDsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmludGVsX21zdF9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGludGVsX2RwX21zdF9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBpbnRlbF9kcF9tc3RfZ2V0X21v ZGVzLAorCS5tb2RlX3ZhbGlkID0gaW50ZWxfZHBfbXN0X21vZGVfdmFsaWQsCisJLmJlc3RfZW5j b2RlciA9IGludGVsX21zdF9iZXN0X2VuY29kZXIsCit9OworCit2b2lkIGludGVsX2RwX21zdF9l bmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBp bnRlbF9kcF9tc3RfZW5jb2RlciAqaW50ZWxfbXN0ID0gZW5jX3RvX21zdChlbmNvZGVyKTsKKwor CWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJa2ZyZWUoaW50ZWxfbXN0KTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBpbnRlbF9kcF9tc3RfZW5jX2Z1 bmNzID0geworCS5kZXN0cm95ID0gaW50ZWxfZHBfbXN0X2VuY29kZXJfZGVzdHJveSwKK307CisK K3N0YXRpYyBib29sIGludGVsX2RwX21zdF9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQoreworCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCisJCXJldHVybiB0 cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICpp bnRlbF9kcF9hZGRfbXN0X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwID0gY29udGFpbmVyX29mKG1nciwgc3RydWN0IGludGVsX2RwLCBtc3RfbWdyKTsK KwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19w b3J0KGludGVsX2RwKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQt PmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9y OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGk7CisKKwlpbnRlbF9j b25uZWN0b3IgPSBremFsbG9jKHNpemVvZigqaW50ZWxfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFpbnRlbF9jb25uZWN0b3IpCisJCXJldHVybiBOVUxMOworCisJY29ubmVjdG9yID0g JmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKKwlEUk1fREVCVUdfS01TKCJBZGRpbmcgRFAgY29ubmVj dG9yIG9uIE1TVFxuIik7CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmaW50 ZWxfZHBfbXN0X2Nvbm5lY3Rvcl9mdW5jcywgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0 KTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmaW50ZWxfZHBfbXN0X2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJaW50ZWxfY29ubmVjdG9yLT51bnJlZ2lzdGVyID0g aW50ZWxfY29ubmVjdG9yX3VucmVnaXN0ZXI7CisJaW50ZWxfY29ubmVjdG9yLT5nZXRfaHdfc3Rh dGUgPSBpbnRlbF9kcF9tc3RfZ2V0X2h3X3N0YXRlOworCWludGVsX2Nvbm5lY3Rvci0+bXN0X3Bv cnQgPSBpbnRlbF9kcDsKKwlpbnRlbF9jb25uZWN0b3ItPnBvcnQgPSBwb3J0OworCisJZm9yIChp ID0gUElQRV9BOyBpIDw9IFBJUEVfQzsgaSsrKSB7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRh Y2hfZW5jb2RlcigmaW50ZWxfY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAmaW50ZWxfZHAtPm1z dF9lbmNvZGVyc1tpXS0+YmFzZS5iYXNlKTsKKwl9CisJaW50ZWxfZHBfYWRkX3Byb3BlcnRpZXMo aW50ZWxfZHAsIGNvbm5lY3Rvcik7CisJZHJtX3JlaW5pdF9wcmltYXJ5X21vZGVfZ3JvdXAoZGV2 KTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZCgmaW50ZWxfY29ubmVjdG9yLT5iYXNlKTsKKwly ZXR1cm4gY29ubmVjdG9yOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kcF9kZXN0cm95X21zdF9j b25uZWN0b3Ioc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCisJCQkJCSAgIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCS8qIG5lZWQgdG8gbnVrZSB0 aGUgY29ubmVjdG9yICovCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJ aW50ZWxfY29ubmVjdG9yLT51bnJlZ2lzdGVyKGludGVsX2Nvbm5lY3Rvcik7CisJZHJtX2Nvbm5l Y3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmln Lm11dGV4KTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9k cF9tc3RfZ2VuZXJhdGVfYWN0X2V2ZW50KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyKQoreworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBjb250YWluZXJfb2YobWdyLCBz dHJ1Y3QgaW50ZWxfZHAsIG1zdF9tZ3IpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmlu dGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWVudW0gcG9ydCBwb3J0 ID0gaW50ZWxfZGlnX3BvcnQtPnBvcnQ7CisKKwlpbnRlbF9kZGlfZm9yY2VfYWN0KCZpbnRlbF9k aWdfcG9ydC0+YmFzZSwgdHJ1ZSk7CisKKwlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChEUF9UUF9T VEFUVVMocG9ydCkpICYgRFBfVFBfU1RBVFVTX0FDVF9TRU5UKSwKKwkJICAgICAxKSkKKwkJRFJN X0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQUNUIHNlbnRcbiIpOworCisJaW50ZWxfZGRp X2ZvcmNlX2FjdCgmaW50ZWxfZGlnX3BvcnQtPmJhc2UsIGZhbHNlKTsKK30KKworc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfY2JzIG1zdF9jYnMgPSB7CisJLmFkZF9jb25uZWN0b3IgPSBpbnRl bF9kcF9hZGRfbXN0X2Nvbm5lY3RvciwKKwkuZGVzdHJveV9jb25uZWN0b3IgPSBpbnRlbF9kcF9k ZXN0cm95X21zdF9jb25uZWN0b3IsCisJLmdlbmVyYXRlX2FjdF9ldmVudCA9IGludGVsX2RwX21z dF9nZW5lcmF0ZV9hY3RfZXZlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGludGVsX2RwX21zdF9l bmNvZGVyICoKK2ludGVsX2RwX2NyZWF0ZV9mYWtlX21zdF9lbmNvZGVyKHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3Qg aW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdDsKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq aW50ZWxfZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQt PmJhc2UuYmFzZS5kZXY7CisKKwlpbnRlbF9tc3QgPSBremFsbG9jKHNpemVvZigqaW50ZWxfbXN0 KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWludGVsX21zdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlp bnRlbF9tc3QtPnBpcGUgPSBwaXBlOworCWludGVsX2VuY29kZXIgPSAmaW50ZWxfbXN0LT5iYXNl OworCWludGVsX21zdC0+cHJpbWFyeSA9IGludGVsX2RpZ19wb3J0OworCisJZHJtX2VuY29kZXJf aW5pdChkZXYsICZpbnRlbF9lbmNvZGVyLT5iYXNlLCAmaW50ZWxfZHBfbXN0X2VuY19mdW5jcywK KwkJCSBEUk1fTU9ERV9FTkNPREVSX0RQTVNUKTsKKworCWludGVsX2VuY29kZXItPnR5cGUgPSBJ TlRFTF9PVVRQVVRfRFBfTVNUOworCWludGVsX2VuY29kZXItPmNydGNfbWFzayA9IDB4NzsKKwlp bnRlbF9lbmNvZGVyLT5jbG9uZWFibGUgPSAwOworCisJaW50ZWxfZW5jb2Rlci0+Y29tcHV0ZV9j b25maWcgPSBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWc7CisJaW50ZWxfZW5jb2Rlci0+bW9k ZV9zZXQgPSBpbnRlbF9kcF9tc3RfbW9kZV9zZXQ7CisJaW50ZWxfZW5jb2Rlci0+ZGlzYWJsZSA9 IGludGVsX21zdF9kaXNhYmxlX2RwOworCWludGVsX2VuY29kZXItPnBvc3RfZGlzYWJsZSA9IGlu dGVsX21zdF9wb3N0X2Rpc2FibGVfZHA7CisJaW50ZWxfZW5jb2Rlci0+cHJlX2VuYWJsZSA9IGlu dGVsX21zdF9wcmVfZW5hYmxlX2RwOworCWludGVsX2VuY29kZXItPmVuYWJsZSA9IGludGVsX21z dF9lbmFibGVfZHA7CisJaW50ZWxfZW5jb2Rlci0+Z2V0X2h3X3N0YXRlID0gaW50ZWxfZHBfbXN0 X2VuY19nZXRfaHdfc3RhdGU7CisJaW50ZWxfZW5jb2Rlci0+Z2V0X2NvbmZpZyA9IGludGVsX2Rw X21zdF9lbmNfZ2V0X2NvbmZpZzsKKworCXJldHVybiBpbnRlbF9tc3Q7CisKK30KKworc3RhdGlj IGJvb2wKK2ludGVsX2RwX2NyZWF0ZV9mYWtlX21zdF9lbmNvZGVycyhzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwID0gJmludGVsX2RpZ19wb3J0LT5kcDsKKworCWZvciAoaSA9IFBJUEVfQTsgaSA8 PSBQSVBFX0M7IGkrKykKKwkJaW50ZWxfZHAtPm1zdF9lbmNvZGVyc1tpXSA9IGludGVsX2RwX2Ny ZWF0ZV9mYWtlX21zdF9lbmNvZGVyKGludGVsX2RpZ19wb3J0LCBpKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworYm9vbAoraW50ZWxfZHBfbXN0X2luaXRfZW5jb2RlcihzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICppbnRlbF9kaWdfcG9ydCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g JmludGVsX2RpZ19wb3J0LT5kcDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGln X3BvcnQtPmJhc2UuYmFzZS5kZXY7CisKKwlpbnRlbF9kcC0+Y2FuX21zdCA9IHRydWU7CisJaW50 ZWxfZHAtPm1zdF9tZ3IuY2JzID0gJm1zdF9jYnM7CisKKwkvKiBjcmVhdGUgZW5jb2RlcnMgKi8K KwlpbnRlbF9kcF9jcmVhdGVfZmFrZV9tc3RfZW5jb2RlcnMoaW50ZWxfZGlnX3BvcnQpOworCWRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQoJmludGVsX2RwLT5tc3RfbWdyLCBkZXYtPmRldiwg JmludGVsX2RwLT5hdXgsIDE2LCAzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmgKaW5kZXggOGU0MWNkYy4uOThiYjEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KICNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4K LSNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfbXN0 X2hlbHBlci5oPgogCiAvKioKICAqIF93YWl0X2ZvciAtIG1hZ2ljIChyZWdpc3Rlcikgd2FpdCBt YWNybwpAQCAtMTAwLDYgKzEwMCw3IEBACiAjZGVmaW5lIElOVEVMX09VVFBVVF9FRFAgOAogI2Rl ZmluZSBJTlRFTF9PVVRQVVRfRFNJIDkKICNkZWZpbmUgSU5URUxfT1VUUFVUX1VOS05PV04gMTAK KyNkZWZpbmUgSU5URUxfT1VUUFVUX0RQX01TVCAxMQogCiAjZGVmaW5lIElOVEVMX0RWT19DSElQ X05PTkUgMAogI2RlZmluZSBJTlRFTF9EVk9fQ0hJUF9MVkRTIDEKQEAgLTIwNyw2ICsyMDgsOSBA QCBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yIHsKIAkvKiBzaW5jZSBQT0xMIGFuZCBIUEQgY29ubmVj dG9ycyBtYXkgdXNlIHRoZSBzYW1lIEhQRCBsaW5lIGtlZXAgdGhlIG5hdGl2ZQogCSAgIHN0YXRl IG9mIGNvbm5lY3Rvci0+cG9sbGVkIGluIGNhc2UgaG90cGx1ZyBzdG9ybSBkZXRlY3Rpb24gY2hh bmdlcyBpdCAqLwogCXU4IHBvbGxlZDsKKworCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7 CisJc3RydWN0IGludGVsX2RwICptc3RfcG9ydDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IGRwbGwg ewpAQCAtMzQwLDYgKzM0NCw4IEBAIHN0cnVjdCBpbnRlbF9jcnRjX2NvbmZpZyB7CiAJYm9vbCBp cHNfZW5hYmxlZDsKIAogCWJvb2wgZG91YmxlX3dpZGU7CisKKwlib29sIGRwX2VuY29kZXJfaXNf bXN0OwogfTsKIAogc3RydWN0IGludGVsX3BpcGVfd20gewpAQCAtNDg3LDYgKzQ5Myw3IEBAIHN0 cnVjdCBpbnRlbF9oZG1pIHsKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq dXN0ZWRfbW9kZSk7CiB9OwogCitzdHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXI7CiAjZGVmaW5l IERQX01BWF9ET1dOU1RSRUFNX1BPUlRTCQkweDEwCiAKIC8qKgpAQCAtNTI3LDggKzUzNCwxNyBA QCBzdHJ1Y3QgaW50ZWxfZHAgewogCXVuc2lnbmVkIGxvbmcgbGFzdF9iYWNrbGlnaHRfb2ZmOwog CWJvb2wgcHNyX3NldHVwX2RvbmU7CiAJYm9vbCB1c2VfdHBzMzsKKwlib29sIGNhbl9tc3Q7IC8q IHRoaXMgcG9ydCBzdXBwb3J0cyBtc3QgKi8KKwlib29sIGlzX21zdDsKKwlpbnQgYWN0aXZlX21z dF9saW5rczsKKwkvKiBjb25uZWN0b3IgZGlyZWN0bHkgYXR0YWNoZWQgLSB3b24ndCBiZSB1c2Ug Zm9yIG1vZGVzZXQgaW4gbXN0IHdvcmxkICovCiAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqYXR0 YWNoZWRfY29ubmVjdG9yOwogCisJLyogbXN0IGNvbm5lY3RvciBsaXN0ICovCisJc3RydWN0IGlu dGVsX2Nvbm5lY3RvciAqbXN0X2Nvbm5lY3RvcnM7CisJc3RydWN0IGludGVsX2RwX21zdF9lbmNv ZGVyICptc3RfZW5jb2RlcnNbSTkxNV9NQVhfUElQRVNdOworCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciBtc3RfbWdyOworCiAJdWludDMyX3QgKCpnZXRfYXV4X2Nsb2NrX2RpdmlkZXIp KHN0cnVjdCBpbnRlbF9kcCAqZHAsIGludCBpbmRleCk7CiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIHZhbHVlIHdlIGhhdmUgdG8gcHJvZ3JhbSB0aGUgQVVYX0NUTApAQCAtNTU0 LDYgKzU3MCwxMiBAQCBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0IHsKIAlzdHJ1Y3QgaW50ZWxf aGRtaSBoZG1pOwogfTsKIAorc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyIHsKKwlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciBiYXNlOworCWVudW0gcGlwZSBwaXBlOworCXN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKnByaW1hcnk7Cit9OworCiBzdGF0aWMgaW5saW5lIGludAogdmx2X2Rwb3J0X3Rv X2NoYW5uZWwoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZHBvcnQpCiB7CkBAIC02MjEsNiAr NjQzLDEyIEBAIGVuY190b19kaWdfcG9ydChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAJ cmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0LCBi YXNlLmJhc2UpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2Rl ciAqCitlbmNfdG9fbXN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4g Y29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciwgYmFzZS5i YXNlKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZHAgKmVuY190b19pbnRlbF9k cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJcmV0dXJuICZlbmNfdG9fZGlnX3Bv cnQoZW5jb2RlciktPmRwOwpAQCAtNjg0LDYgKzcxMiwxMCBAQCB2b2lkIGludGVsX2RkaV9nZXRf Y29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19jb25maWcgKnBpcGVfY29uZmlnKTsKIAogdm9pZCBpbnRlbF9kZGlfbW9kZV9zZXRfZHAo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwordm9pZCBpbnRlbF9kZGlfY2xvY2tfZ2V0 KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJIHN0cnVjdCBpbnRlbF9jcnRjX2Nv bmZpZyAqcGlwZV9jb25maWcpOwordm9pZCBpbnRlbF9kZGlfZm9yY2VfYWN0KHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLCBib29sIHN0YXRlKTsKK3ZvaWQgaW50ZWxfZGRpX3NldF92Y19w YXlsb2FkX2FsbG9jKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBzdGF0ZSk7CiAKIC8qIGlu dGVsX2Rpc3BsYXkuYyAqLwogY29uc3QgY2hhciAqaW50ZWxfb3V0cHV0X25hbWUoaW50IG91dHB1 dCk7CkBAIC04MDAsNiArODMyLDExIEBAIHZvaWQgaW50ZWxfZWRwX3Bzcl9kaXNhYmxlKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOwogdm9pZCBpbnRlbF9lZHBfcHNyX3VwZGF0ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaW50ZWxfZHBfc2V0X2RycnNfc3RhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IHJlZnJlc2hfcmF0ZSk7CiAKK2ludCBpbnRlbF9kcF9oYW5kbGVf aHBkX2lycShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdwb3J0LCBib29sIGxvbmdfaHBk KTsKK3ZvaWQgaW50ZWxfZHBfYWRkX3Byb3BlcnRpZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisKKy8qIGludGVsX2RwX21zdC5j ICovCitib29sIGludGVsX2RwX21zdF9pbml0X2VuY29kZXIoc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqaW50ZWxfZGlnX3BvcnQpOwogLyogaW50ZWxfZHNpLmMgKi8KIGJvb2wgaW50ZWxfZHNp X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLS0gCjEuOS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=