From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH 10/11] i915: add DP 1.2 MST support (v0.5) Date: Wed, 21 May 2014 12:55:03 +1000 Message-ID: <1400640904-16847-11-git-send-email-airlied@gmail.com> References: <1400640904-16847-1-git-send-email-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1400640904-16847-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, intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgYWRkcyBEUCAxLjIg TVNUIHN1cHBvcnQgb24gSGFzd2VsbCBzeXN0ZW1zLgoKTm90ZXM6CmEpIHRoaXMgcmV3b3JrcyBp cnEgaGFuZGxpbmcgZm9yIERQIE1TVCBwb3J0cywgc28gdGhhdCB3ZSBjYW4KYXZvaWQgdGhlIG1v ZGUgY29uZmlnIGxvY2tpbmcgaW4gdGhlIGN1cnJlbnQgaHBkIGhhbmRsZXJzLCBhcwp3ZSBuZWVk IHRvIHByb2Nlc3MgdXAvZG93biBtc2dzIGF0IGEgYmV0dGVyIHRpbWUuCgpiKSBpdCBpbnRyb2R1 Y2VzIGEgbmV3IE1TVCBvdXRwdXQgdHlwZS4KCmMpIGl0IHJlYWxseSBhbm5veXMgdGhlIHN0YXRl IGNoZWNrZXIsIGFzIHRoZSBjb25uZWN0b3IgdGhhdCBpcwpjb25uZWN0ZWQgYXQgdGhlIHN0YXJ0 LCBnb2VzIGludG8gZGlzY29ubmVjdGVkLCBhbmQgaXRzIGVuY29kZXIKaXQgYWN0aXZlLCBhbmQg dGhpbmdzIGJsb3cgdXAsIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0byBzb2x2ZSB0aGF0LgoKZCkg dGhlIGludGVsIHVzZXJzcGFjZSBkcml2ZXIgbmVlZHMgY2hhbmdlcyB0byB1c2UgdGhpcywgLW1v ZGVzZXR0aW5nCnNob3VsZCB3b3JrIG9rYXkuCgplKSBpdCBtaWdodCBjb250YWluIGEgcmFjZSBj b25kaXRpb24gYmlnIGVub3VnaCB0byBlYXQgeW91LgoKZikgaXRzIGhhcmRjb2RlZCB0byA0IGxh bmVzIDUuNEdoei4gLSBUT0RPLgoKQ2hhbmdlcyBzaW5jZSB2MC4xOgp1c2UgUE9SVF9QQ0hfSE9U UExVRyB0byBkZXRlY3Qgc2hvcnQgdnMgbG9uZyBwdWxzZXMKYWRkIGEgd29ya3F1ZXVlIHRvIGRl YWwgd2l0aCBkaWdpdGFsIGV2ZW50cyBhcyB0aGV5IGNhbiBnZXQgYmxvY2tlZCBvbiB0aGUKbWFp biB3b3JrcXVldWUgYmV5b25nIG1vZGVfY29uZmlnIG11dGV4CmZpeCBhIGJ1bmNoIG9mIG1vZGVz ZXQgY2hlY2tlciB3YXJuaW5ncwphY2tzIGlycXMgaW4gdGhlIGRyaXZlcgpjbGVhbnVwIHRoZSBN U1QgZW5jb2RlcnMKCkNoYW5nZXMgc2luY2UgdjAuMjoKY2hlY2sgaXJxIHN0YXR1cyBhZ2FpbiBp biB3b3JrIGhhbmRsZXIKbW92ZSBhcm91bmQgYnJpbmcgdXAgYW5kIHRlYXIgZG93biB0byBmaXgg RFBNUyBvbi9vZmYKdXNlIHBhdGggcHJvcGVydGllcy4KCkNoYW5nZXMgc2luY2UgdjAuMzoKdXBk YXRlcyBmb3IgbXN0IGFwaXMKbW9yZSBzdGF0ZSBjaGVja2VyIGZpeGVzCmlycSBoYW5kbGluZyBp bXByb3ZlbWVudHMKZmJjb24gaGFuZGxpbmcgc3VwcG9ydAppbXByb3ZlZCByZWZlcmVuY2UgY291 bnRpbmcgb2YgbGluayAtIGZpeGVzIHJlZG9ja2luZy4KCkNoYW5nZXMgc2luY2UgdjAuNDoKaGFu ZGxlIGdwdSByZXNldCBocGQgcmVpbml0IHdpdGhvdXQgb29wc2luZwpjaGVjayBsaW5rIHN0YXR1 cyBvbiBIUEQgaXJxcwpmaXggc3VzcGVuZC9yZXN1bWUKClRPRE86CnBvc3NpYmx5IGZ1cnRoZXIg c3RhdGUgY2hlY2tlciBmaXhlcwoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRA cmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgICAgICAgfCAgMTAgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICB8ICAxMyArLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jICAgICAgIHwgMTEwICsrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jICAgICAgfCAxMTQgKysrKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jICB8ICA1OSArKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jICAgICAg IHwgMjMwICsrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0 LmMgICB8IDUzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgIHwgIDQ1ICsrLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZmJkZXYuYyAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9v cHJlZ2lvbi5jIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDEwOTEgaW5zZXJ0aW9ucygrKSwg NDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHBfbXN0LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGIxNDQ1YjcuLjZjZjJiOTUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC01Miw2ICs1Miw3IEBAIGk5MTUteSArPSBkdm9fY2g3 MDE3Lm8gXAogCSAgaW50ZWxfY3J0Lm8gXAogCSAgaW50ZWxfZGRpLm8gXAogCSAgaW50ZWxfZHAu byBcCisJICBpbnRlbF9kcF9tc3QubyBcCiAJICBpbnRlbF9kc2lfY21kLm8gXAogCSAgaW50ZWxf ZHNpLm8gXAogCSAgaW50ZWxfZHNpX3BsbC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4 IDU4ZjJjNDYuLjMwNDA4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTY3Nyw2ICsx Njc3LDEzIEBAIGludCBpOTE1X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVu c2lnbmVkIGxvbmcgZmxhZ3MpCiAJCWdvdG8gb3V0X210cnJmcmVlOwogCX0KIAorCWRldl9wcml2 LT5kcF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1LWRwIiwgMCk7CisJaWYgKGRl dl9wcml2LT5kcF93cSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBv dXIgZHAgd29ya3F1ZXVlLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWV3 cTsKKwl9CisKIAlpbnRlbF9pcnFfaW5pdChkZXYpOwogCWludGVsX3VuY29yZV9zYW5pdGl6ZShk ZXYpOwogCkBAIC0xNzUyLDYgKzE3NTksOCBAQCBvdXRfZ2VtX3VubG9hZDoKIAlpbnRlbF90ZWFy ZG93bl9nbWJ1cyhkZXYpOwogCWludGVsX3RlYXJkb3duX21jaGJhcihkZXYpOwogCXBtX3Fvc19y ZW1vdmVfcmVxdWVzdCgmZGV2X3ByaXYtPnBtX3Fvcyk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2 X3ByaXYtPmRwX3dxKTsKK291dF9mcmVld3E6CiAJZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYt PndxKTsKIG91dF9tdHJyZnJlZToKIAlhcmNoX3BoeXNfd2NfZGVsKGRldl9wcml2LT5ndHQubXRy cik7CkBAIC0xODU2LDYgKzE4NjUsNyBAQCBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJaW50ZWxfdGVhcmRvd25fZ21idXMoZGV2KTsKIAlpbnRlbF90ZWFy ZG93bl9tY2hiYXIoZGV2KTsKIAorCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9wcml2LT5kcF93cSk7 CiAJZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYtPndxKTsKIAlwbV9xb3NfcmVtb3ZlX3JlcXVl c3QoJmRldl9wcml2LT5wbV9xb3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyNTRi MzIzLi42YjE4Nzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ0Nyw3ICs0NDcsNiBA QCBzdGF0aWMgaW50IGk5MTVfZHJtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJ CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPnJwcy5kZWxheWVkX3Jlc3VtZV93 b3JrKTsKIAotCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCQlkZXZfcHJpdi0+ZW5hYmxlX2hv dHBsdWdfcHJvY2Vzc2luZyA9IGZhbHNlOwogCQkvKgogCQkgKiBEaXNhYmxlIENSVENzIGRpcmVj dGx5IHNpbmNlIHdlIHdhbnQgdG8gcHJlc2VydmUgc3cgc3RhdGUKQEAgLTQ1OCw2ICs0NTcsOSBA QCBzdGF0aWMgaW50IGk5MTVfZHJtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQkJ ZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlKGNydGMpOwogCQltdXRleF91bmxvY2soJmRl di0+bW9kZV9jb25maWcubXV0ZXgpOwogCisJCWludGVsX2RwX21zdF9zdXNwZW5kKGRldik7CisJ CWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisKIAkJaW50ZWxfbW9kZXNldF9zdXNwZW5kX2h3KGRl dik7CiAJfQogCkBAIC01NzgsNiArNTgwLDE1IEBAIHN0YXRpYyBpbnQgX19pOTE1X2RybV90aGF3 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZV9ndHRfbWFwcGluZ3MpCiAKIAkJ aW50ZWxfbW9kZXNldF9pbml0X2h3KGRldik7CiAKKwkJeworCQkJdW5zaWduZWQgbG9uZyBpcnFm bGFnczsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdz KTsKKwkJCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5ocGRfaXJxX3NldHVwKQorCQkJCWRldl9wcml2 LT5kaXNwbGF5LmhwZF9pcnFfc2V0dXAoZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCQl9CisKKwkJaW50ZWxfZHBfbXN0X3Jl c3VtZShkZXYpOwogCQlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOwogCQlpbnRlbF9tb2Rlc2V0 X3NldHVwX2h3X3N0YXRlKGRldiwgdHJ1ZSk7CiAJCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDdkNmFjYjQuLmIzYjU4NjRjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE0NjgsNiArMTQ2OCwxOCBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7CiAKIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBtOwogCisJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaHBkX2lycV9wb3J0W0k5MTVfTUFYX1BPUlRTXTsKKwl1MzIgaHBkX3Bv cnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IGRpZ19wb3J0X3dvcms7CisJLyoKKwkgKiBpZiB3ZSBn ZXQgYSBIUEQgaXJxIGZyb20gRFAgYW5kIGEgSFBEIGlycSBmcm9tIG5vbi1EUAorCSAqIHRoZSBu b24tRFAgSFBEIGNvdWxkIGJsb2NrIHRoZSB3b3JrcXVldWUgb24gYSBtb2RlIGNvbmZpZworCSAq IG11dGV4IGdldHRpbmcsIHRoYXQgdXNlcnNwYWNlIG1heSBoYXZlIHRha2VuLiBIb3dldmVyCisJ ICogdXNlcnNwYWNlIGlzIHdhaXRpbmcgb24gdGhlIERQIHdvcmtxdWV1ZSB0byBydW4gd2hpY2gg aXMKKwkgKiBibG9ja2VkIGJlaGluZCB0aGUgbm9uLURQIG9uZS4KKwkgKi8KKwlzdHJ1Y3Qgd29y a3F1ZXVlX3N0cnVjdCAqZHBfd3E7CisKIAkvKiBPbGQgZHJpMSBzdXBwb3J0IGluZnJhc3RydWN0 dXJlLCBiZXdhcmUgdGhlIGRyYWdvbnMgeWEgZm9vbHMgZW50ZXJpbmcKIAkgKiBoZXJlISAqLwog CXN0cnVjdCBpOTE1X2RyaTFfc3RhdGUgZHJpMTsKQEAgLTE5OTksNiArMjAxMSw4IEBAIGk5MTVf ZGlzYWJsZV9waXBlc3RhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0g cGlwZSBwaXBlLAogCiB2b2lkIHZhbGxleXZpZXdfZW5hYmxlX2Rpc3BsYXlfaXJxcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCB2YWxsZXl2aWV3X2Rpc2FibGVfZGlz cGxheV9pcnFzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Citib29sIGludGVs X2hwZF9pcnFfZXZlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKTsKIAogLyogaTkxNV9nZW0uYyAqLwogaW50IGk5MTVfZ2VtX2lu aXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jCmluZGV4IDU4NTJkZWUuLmRkMTUxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEu YwpAQCAtOTYzLDggKzk2Myw4IEBAIHN0YXRpYyBpbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFt cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKIAkJCQkJCSAgICAgJnRvX2ludGVs X2NydGMoY3J0YyktPmNvbmZpZy5hZGp1c3RlZF9tb2RlKTsKIH0KIAotc3RhdGljIGJvb2wgaW50 ZWxfaHBkX2lycV9ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCitib29sIGludGVsX2hwZF9pcnFfZXZlbnQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewog CWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgb2xkX3N0YXR1czsKIApAQCAtOTg0LDYgKzk4NCw3 MSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9ocGRfaXJxX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBpbnQgcG9ydF90b19ob3RwbHVnX3NoaWZ0 KGVudW0gcG9ydCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgUE9SVF9BOgorCWNh c2UgUE9SVF9FOgorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwljYXNlIFBPUlRfQjoKKwkJcmV0 dXJuIDA7CisJY2FzZSBQT1JUX0M6CisJCXJldHVybiA4OworCWNhc2UgUE9SVF9EOgorCQlyZXR1 cm4gMTY7CisJfQorfQorc3RhdGljIHZvaWQgaTkxNV9kaWdwb3J0X3dvcmtfZnVuYyhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBkaWdfcG9y dF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXUzMiBwb3J0X2JpdHM7CisJc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlncG9ydDsKKwlpbnQgaSwgcmV0OworCXUzMiBvbGRf Yml0cyA9IDA7CisJdTMyIGhvdHBsdWdfcmVnLCBocHNoaWZ0OworCWJvb2wgbG9uZ19ocGQgPSBm YWxzZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7 CisJcG9ydF9iaXRzID0gZGV2X3ByaXYtPmhwZF9wb3J0OworCWRldl9wcml2LT5ocGRfcG9ydCA9 IDA7CisKKwlob3RwbHVnX3JlZyA9IEk5MTVfUkVBRChQQ0hfUE9SVF9IT1RQTFVHKTsKKwlJOTE1 X1dSSVRFKFBDSF9QT1JUX0hPVFBMVUcsIGhvdHBsdWdfcmVnKTsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJZm9yIChpID0gMDsg aSA8IEk5MTVfTUFYX1BPUlRTOyBpKyspIHsKKwkJaWYgKHBvcnRfYml0cyAmICgxIDw8IGkpKSB7 CisJCQlkaWdwb3J0ID0gZGV2X3ByaXYtPmhwZF9pcnFfcG9ydFtpXTsKKworCQkJaHBzaGlmdCA9 IHBvcnRfdG9faG90cGx1Z19zaGlmdChpKTsKKworCQkJLyogaWYgd2UgaGF2ZSBubyBIUEQgYml0 cyBmb3IgdGhpcyAqLworCQkJaWYgKCEoKGhvdHBsdWdfcmVnID4+IGhwc2hpZnQpICYgUE9SVEJf SE9UUExVR19TVEFUVVNfTUFTSykpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJnb3Qgbm90IHJlZ3Mg Zm9yIHBvcnQgJWQgJTA4eFxuIiwgaSwgaG90cGx1Z19yZWcpOworCQkJCWNvbnRpbnVlOworCQkJ fQorCisJCQlsb25nX2hwZCA9IChob3RwbHVnX3JlZyA+PiBocHNoaWZ0KSAmIFBPUlRCX0hPVFBM VUdfTE9OR19ERVRFQ1Q7CisKKwkJCXJldCA9IGludGVsX2RwX2hhbmRsZV9ocGRfaXJxKGRpZ3Bv cnQsIGxvbmdfaHBkKTsKKwkJCWlmIChyZXQgPT0gMSkgeworCQkJCS8qIGlmIHdlIGdldCAxIGZh bGxiYWNrIHRvIG9sZCBzY2hvb2wgaHBkICovCisJCQkJb2xkX2JpdHMgfD0gKDEgPDwgZGlncG9y dC0+YmFzZS5ocGRfcGluKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChvbGRfYml0cykgeworCQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJCWRldl9w cml2LT5ocGRfZXZlbnRfYml0cyA9IG9sZF9iaXRzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwkJc2NoZWR1bGVfd29yaygmZGV2X3By aXYtPmhvdHBsdWdfd29yayk7CisJfQorfQorCiAvKgogICogSGFuZGxlIGhvdHBsdWcgZXZlbnRz IG91dHNpZGUgdGhlIGludGVycnVwdCBoYW5kbGVyIHByb3Blci4KICAqLwpAQCAtMTM4MSwxNCAr MTQ0NiwyOSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZ2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogI2RlZmluZSBIUERfU1RPUk1fREVURUNUX1BFUklPRCAxMDAwCiAj ZGVmaW5lIEhQRF9TVE9STV9USFJFU0hPTEQgNQogCitzdGF0aWMgaW5saW5lIGVudW0gcG9ydCBn ZXRfcG9ydF9mcm9tX3BpbihlbnVtIGhwZF9waW4gcGluKQoreworCXN3aXRjaCAocGluKSB7CisJ Y2FzZSBIUERfUE9SVF9COgorCQlyZXR1cm4gUE9SVF9COworCWNhc2UgSFBEX1BPUlRfQzoKKwkJ cmV0dXJuIFBPUlRfQzsKKwljYXNlIEhQRF9QT1JUX0Q6CisJCXJldHVybiBQT1JUX0Q7CisJZGVm YXVsdDoKKwkJcmV0dXJuIFBPUlRfQTsgLyogbm8gaHBkICovCisJfQorfQorCiBzdGF0aWMgaW5s aW5lIHZvaWQgaW50ZWxfaHBkX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkJCSB1MzIgaG90cGx1Z190cmlnZ2VyLAogCQkJCQkgY29uc3QgdTMyICpocGQpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQg aTsKKwllbnVtIHBvcnQgcG9ydDsKIAlib29sIHN0b3JtX2RldGVjdGVkID0gZmFsc2U7Ci0KKwli b29sIHF1ZXVlX2RpZyA9IGZhbHNlLCBxdWV1ZV9ocCA9IGZhbHNlOwogCWlmICghaG90cGx1Z190 cmlnZ2VyKQogCQlyZXR1cm47CiAKQEAgLTEzOTcsNiArMTQ3NywxOSBAQCBzdGF0aWMgaW5saW5l IHZvaWQgaW50ZWxfaHBkX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAlz cGluX2xvY2soJmRldl9wcml2LT5pcnFfbG9jayk7CiAJZm9yIChpID0gMTsgaSA8IEhQRF9OVU1f UElOUzsgaSsrKSB7CisJCWlmICghKGhwZFtpXSAmIGhvdHBsdWdfdHJpZ2dlcikpCisJCQljb250 aW51ZTsKKworCQlwb3J0ID0gZ2V0X3BvcnRfZnJvbV9waW4oaSk7CisJCWlmIChwb3J0ICYmIGRl dl9wcml2LT5ocGRfaXJxX3BvcnRbcG9ydF0pIHsKKwkJCURSTV9ERUJVR19EUklWRVIoImRpZ2l0 YWwgaHBkIHBvcnQgJWRcbiIsIHBvcnQpOworCQkJZGV2X3ByaXYtPmhwZF9wb3J0IHw9ICgxIDw8 IHBvcnQpOworCQkJaG90cGx1Z190cmlnZ2VyICY9IH5ocGRbaV07CisJCQlxdWV1ZV9kaWcgPSB0 cnVlOworCQl9CisJfQorCisJZm9yIChpID0gMTsgaSA8IEhQRF9OVU1fUElOUzsgaSsrKSB7CiAK IAkJaWYgKGhwZFtpXSAmIGhvdHBsdWdfdHJpZ2dlciAmJgogCQkgICAgZGV2X3ByaXYtPmhwZF9z dGF0c1tpXS5ocGRfbWFyayA9PSBIUERfRElTQUJMRUQpIHsKQEAgLTE0MTgsNiArMTUxMSw3IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9ocGRfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCWNvbnRpbnVlOwogCiAJCWRldl9wcml2LT5ocGRfZXZlbnRfYml0cyB8PSAo MSA8PCBpKTsKKwkJcXVldWVfaHAgPSB0cnVlOwogCQlpZiAoIXRpbWVfaW5fcmFuZ2UoamlmZmll cywgZGV2X3ByaXYtPmhwZF9zdGF0c1tpXS5ocGRfbGFzdF9qaWZmaWVzLAogCQkJCSAgIGRldl9w cml2LT5ocGRfc3RhdHNbaV0uaHBkX2xhc3RfamlmZmllcwogCQkJCSAgICsgbXNlY3NfdG9famlm ZmllcyhIUERfU1RPUk1fREVURUNUX1BFUklPRCkpKSB7CkBAIC0xNDQ2LDcgKzE1NDAsMTAgQEAg c3RhdGljIGlubGluZSB2b2lkIGludGVsX2hwZF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCSAqIHF1ZXVlIGZvciBvdGhlcndpc2UgdGhlIGZsdXNoX3dvcmsgaW4gdGhlIHBh Z2VmbGlwIGNvZGUgd2lsbAogCSAqIGRlYWRsb2NrLgogCSAqLwotCXNjaGVkdWxlX3dvcmsoJmRl dl9wcml2LT5ob3RwbHVnX3dvcmspOworCWlmIChxdWV1ZV9kaWcpCisJCXF1ZXVlX3dvcmsoZGV2 X3ByaXYtPmRwX3dxLCAmZGV2X3ByaXYtPmRpZ19wb3J0X3dvcmspOworCWlmIChxdWV1ZV9ocCkK KwkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29yayk7CiB9CiAKIHN0YXRpYyB2 b2lkIGdtYnVzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC00MDE0LDYg KzQxMTEsNyBAQCB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK IAorCUlOSVRfV09SSygmZGV2X3ByaXYtPmRpZ19wb3J0X3dvcmssIGk5MTVfZGlncG9ydF93b3Jr X2Z1bmMpOwogCUlOSVRfV09SSygmZGV2X3ByaXYtPmhvdHBsdWdfd29yaywgaTkxNV9ob3RwbHVn X3dvcmtfZnVuYyk7CiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLndvcmssIGk5MTVf ZXJyb3Jfd29ya19mdW5jKTsKIAlJTklUX1dPUksoJmRldl9wcml2LT5ycHMud29yaywgZ2VuNl9w bV9ycHNfd29yayk7CkBAIC00MTA5LDcgKzQyMDcsOSBAQCB2b2lkIGludGVsX2hwZF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZt b2RlX2NvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IGludGVsX2Nvbm5l Y3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJ CWNvbm5lY3Rvci0+cG9sbGVkID0gaW50ZWxfY29ubmVjdG9yLT5wb2xsZWQ7Ci0JCWlmICghY29u bmVjdG9yLT5wb2xsZWQgJiYgSTkxNV9IQVNfSE9UUExVRyhkZXYpICYmIGludGVsX2Nvbm5lY3Rv ci0+ZW5jb2Rlci0+aHBkX3BpbiA+IEhQRF9OT05FKQorCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVy ICYmICFjb25uZWN0b3ItPnBvbGxlZCAmJiBJOTE1X0hBU19IT1RQTFVHKGRldikgJiYgaW50ZWxf Y29ubmVjdG9yLT5lbmNvZGVyLT5ocGRfcGluID4gSFBEX05PTkUpCisJCQljb25uZWN0b3ItPnBv bGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJCWlmIChpbnRlbF9jb25uZWN0b3ItPm1z dF9wb3J0KQogCQkJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwog CX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwppbmRleCBhNWI4Yjc2Li4xY2FjNDYxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kZGkuYwpAQCAtMTE2LDcgKzExNiwxMCBAQCBlbnVtIHBvcnQgaW50 ZWxfZGRpX2dldF9lbmNvZGVyX3BvcnQoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29k ZXIpCiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmludGVsX2VuY29kZXItPmJhc2U7 CiAJaW50IHR5cGUgPSBpbnRlbF9lbmNvZGVyLT50eXBlOwogCi0JaWYgKHR5cGUgPT0gSU5URUxf T1VUUFVUX0RJU1BMQVlQT1JUIHx8IHR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCB8fAorCWlmICh0 eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpIHsKKwkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqaW50ZWxfZGlnX3BvcnQgPSBlbmNfdG9fbXN0KGVuY29kZXIpLT5wcmltYXJ5OworCQlyZXR1 cm4gaW50ZWxfZGlnX3BvcnQtPnBvcnQ7CisJfSBlbHNlIGlmICh0eXBlID09IElOVEVMX09VVFBV VF9ESVNQTEFZUE9SVCB8fCB0eXBlID09IElOVEVMX09VVFBVVF9FRFAgfHwKIAkgICAgdHlwZSA9 PSBJTlRFTF9PVVRQVVRfSERNSSB8fCB0eXBlID09IElOVEVMX09VVFBVVF9VTktOT1dOKSB7CiAJ CXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0KIAkJCWVuY190b19k aWdfcG9ydChlbmNvZGVyKTsKQEAgLTIxMSw2ICsyMTQsMTkgQEAgdm9pZCBpbnRlbF9wcmVwYXJl X2RkaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlpbnRlbF9wcmVwYXJlX2RkaV9idWZmZXJz KGRldiwgcG9ydCk7CiB9CiAKK3ZvaWQgaW50ZWxfZGRpX2ZvcmNlX2FjdChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBlbmNvZGVyLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSBwb3J0 IHBvcnQgPSBpbnRlbF9kZGlfZ2V0X2VuY29kZXJfcG9ydChlbmNvZGVyKTsKKwl1MzIgdmFsOwor CXZhbCA9IEk5MTVfUkVBRChEUF9UUF9DVEwocG9ydCkpOworCWlmIChzdGF0ZSA9PSB0cnVlKQor CQl2YWwgfD0gRFBfVFBfQ1RMX0ZPUkNFX0FDVDsKKwllbHNlCisJCXZhbCAmPSB+RFBfVFBfQ1RM X0ZPUkNFX0FDVDsKKwlJOTE1X1dSSVRFKERQX1RQX0NUTChwb3J0KSwgdmFsKTsKK30KKwogc3Rh dGljIGNvbnN0IGxvbmcgaHN3X2RkaV9idWZfY3RsX3ZhbHVlc1tdID0gewogCURESV9CVUZfRU1Q XzQwME1WXzBEQl9IU1csCiAJRERJX0JVRl9FTVBfNDAwTVZfM181REJfSFNXLApAQCAtNjczLDgg KzY4OSw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfZGRpX2NhbGNfd3JwbGxfbGluayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmV0dXJuIChyZWZjbGsgKiBuICogMTAwKSAvIChw ICogcik7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2RkaV9jbG9ja19nZXQoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCi0JCQkJc3RydWN0IGludGVsX2NydGNfY29uZmlnICpwaXBlX2Nv bmZpZykKK3ZvaWQgaW50ZWxfZGRpX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKKwkJCSBzdHJ1Y3QgaW50ZWxfY3J0Y19jb25maWcgKnBpcGVfY29uZmlnKQogewogCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuY29kZXItPmJhc2UuZGV2LT5kZXZf cHJpdmF0ZTsKIAllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RkaV9nZXRfZW5jb2Rlcl9wb3J0KGVu Y29kZXIpOwpAQCAtNzk1LDYgKzgxMSwyMCBAQCBpbnRlbF9kZGlfY2FsY3VsYXRlX3dycGxsKGlu dCBjbG9jayAvKiBpbiBIeiAqLywKIAkqcjJfb3V0ID0gYmVzdC5yMjsKIH0KIAorc3RhdGljIGlu dCBsaW5rX2J3X3RvX3BsbF9zZWwoaW50IGxpbmtfYncpCit7CisJc3dpdGNoIChsaW5rX2J3KSB7 CisJY2FzZSBEUF9MSU5LX0JXXzFfNjI6CisJCXJldHVybiBQT1JUX0NMS19TRUxfTENQTExfODEw OworCWNhc2UgRFBfTElOS19CV18yXzc6CisJCXJldHVybiBQT1JUX0NMS19TRUxfTENQTExfMTM1 MDsKKwljYXNlIERQX0xJTktfQldfNV80OgorCQlyZXR1cm4gUE9SVF9DTEtfU0VMX0xDUExMXzI3 MDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KK30KKwogLyoKICAqIFRyaWVzIHRvIGZp bmQgYSBQTEwgZm9yIHRoZSBDUlRDLiBJZiBpdCBmaW5kcywgaXQgaW5jcmVhc2VzIHRoZSByZWZj b3VudCBhbmQKICAqIHN0b3JlcyBpdCBpbiBpbnRlbF9jcnRjLT5kZGlfcGxsX3NlbCwgc28gb3Ro ZXIgbW9kZSBzZXRzIHdvbid0IGJlIGFibGUgdG8KQEAgLTgxNCwyMCArODQ0LDE5IEBAIGJvb2wg aW50ZWxfZGRpX3BsbF9zZWxlY3Qoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCiAKIAlp bnRlbF9kZGlfcHV0X2NydGNfcGxsKGNydGMpOwogCi0JaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVU X0RJU1BMQVlQT1JUIHx8IHR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgeworCWlmICh0eXBlID09 IElOVEVMX09VVFBVVF9EUF9NU1QpIHsKKwkJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICpp bnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOworCQlpbnRlbF9jcnRjLT5kZGlfcGxsX3Nl bCA9IGxpbmtfYndfdG9fcGxsX3NlbChpbnRlbF9tc3QtPnByaW1hcnktPmRwLmxpbmtfYncpOwor CQlpZiAoaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwgPT0gLTEpIHsKKwkJCURSTV9FUlJPUigiTGlu ayBiYW5kd2lkdGggJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJICBpbnRlbF9tc3QtPnByaW1hcnkt PmRwLmxpbmtfYncpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfSBlbHNlIGlmICh0eXBlID09 IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCB8fCB0eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsK IAkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsK IAotCQlzd2l0Y2ggKGludGVsX2RwLT5saW5rX2J3KSB7Ci0JCWNhc2UgRFBfTElOS19CV18xXzYy OgotCQkJaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwgPSBQT1JUX0NMS19TRUxfTENQTExfODEwOwot CQkJYnJlYWs7Ci0JCWNhc2UgRFBfTElOS19CV18yXzc6Ci0JCQlpbnRlbF9jcnRjLT5kZGlfcGxs X3NlbCA9IFBPUlRfQ0xLX1NFTF9MQ1BMTF8xMzUwOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfTElO S19CV181XzQ6Ci0JCQlpbnRlbF9jcnRjLT5kZGlfcGxsX3NlbCA9IFBPUlRfQ0xLX1NFTF9MQ1BM TF8yNzAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CisJCWludGVsX2NydGMtPmRkaV9wbGxfc2Vs ID0gbGlua19id190b19wbGxfc2VsKGludGVsX2RwLT5saW5rX2J3KTsKKwkJaWYgKGludGVsX2Ny dGMtPmRkaV9wbGxfc2VsID09IC0xKSB7CiAJCQlEUk1fRVJST1IoIkxpbmsgYmFuZHdpZHRoICVk IHVuc3VwcG9ydGVkXG4iLAogCQkJCSAgaW50ZWxfZHAtPmxpbmtfYncpOwogCQkJcmV0dXJuIGZh bHNlOwpAQCAtOTgxLDggKzEwMTAsNyBAQCB2b2lkIGludGVsX2RkaV9zZXRfcGlwZV9zZXR0aW5n cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaW50IHR5cGUgPSBpbnRlbF9lbmNvZGVyLT50eXBl OwogCXVpbnQzMl90IHRlbXA7CiAKLQlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBP UlQgfHwgdHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7Ci0KKwlpZiAodHlwZSA9PSBJTlRFTF9P VVRQVVRfRElTUExBWVBPUlQgfHwgdHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQIHx8IHR5cGUgPT0g SU5URUxfT1VUUFVUX0RQX01TVCkgewogCQl0ZW1wID0gVFJBTlNfTVNBX1NZTkNfQ0xLOwogCQlz d2l0Y2ggKGludGVsX2NydGMtPmNvbmZpZy5waXBlX2JwcCkgewogCQljYXNlIDE4OgpAQCAtMTAw NCw2ICsxMDMyLDIxIEBAIHZvaWQgaW50ZWxfZGRpX3NldF9waXBlX3NldHRpbmdzKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIAl9CiB9CiAKK3ZvaWQgaW50ZWxfZGRpX3NldF92Y19wYXlsb2FkX2Fs bG9jKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOworCWVudW0gdHJhbnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGlu dGVsX2NydGMtPmNvbmZpZy5jcHVfdHJhbnNjb2RlcjsKKwl1aW50MzJfdCB0ZW1wOworCXRlbXAg PSBJOTE1X1JFQUQoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFuc2NvZGVyKSk7CisJaWYgKHN0 YXRlID09IHRydWUpCisJCXRlbXAgfD0gVFJBTlNfRERJX0RQX1ZDX1BBWUxPQURfQUxMT0M7CisJ ZWxzZQorCQl0ZW1wICY9IH5UUkFOU19ERElfRFBfVkNfUEFZTE9BRF9BTExPQzsKKwlJOTE1X1dS SVRFKFRSQU5TX0RESV9GVU5DX0NUTChjcHVfdHJhbnNjb2RlciksIHRlbXApOworfQorCiB2b2lk IGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK IHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 CkBAIC0xMDgzLDcgKzExMjYsMTkgQEAgdm9pZCBpbnRlbF9kZGlfZW5hYmxlX3RyYW5zY29kZXJf ZnVuYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCSAgIHR5cGUgPT0gSU5URUxfT1VUUFVUX0VE UCkgewogCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29k ZXIpOwogCi0JCXRlbXAgfD0gVFJBTlNfRERJX01PREVfU0VMRUNUX0RQX1NTVDsKKwkJaWYgKGlu dGVsX2RwLT5pc19tc3QpIHsKKwkJCXRlbXAgfD0gVFJBTlNfRERJX01PREVfU0VMRUNUX0RQX01T VDsKKwkJfSBlbHNlCisJCQl0ZW1wIHw9IFRSQU5TX0RESV9NT0RFX1NFTEVDVF9EUF9TU1Q7CisK KwkJdGVtcCB8PSBERElfUE9SVF9XSURUSChpbnRlbF9kcC0+bGFuZV9jb3VudCk7CisJfSBlbHNl IGlmICh0eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpIHsKKwkJc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9ICZlbmNfdG9fbXN0KGVuY29kZXIpLT5wcmltYXJ5LT5kcDsKKworCQlpZiAoaW50 ZWxfZHAtPmlzX21zdCkgeworCQkJdGVtcCB8PSBUUkFOU19ERElfTU9ERV9TRUxFQ1RfRFBfTVNU OworCQl9IGVsc2UKKwkJCXRlbXAgfD0gVFJBTlNfRERJX01PREVfU0VMRUNUX0RQX1NTVDsKIAog CQl0ZW1wIHw9IERESV9QT1JUX1dJRFRIKGludGVsX2RwLT5sYW5lX2NvdW50KTsKIAl9IGVsc2Ug ewpAQCAtMTEwMCw3ICsxMTU1LDcgQEAgdm9pZCBpbnRlbF9kZGlfZGlzYWJsZV90cmFuc2NvZGVy X2Z1bmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXVpbnQzMl90IHJlZyA9 IFRSQU5TX0RESV9GVU5DX0NUTChjcHVfdHJhbnNjb2Rlcik7CiAJdWludDMyX3QgdmFsID0gSTkx NV9SRUFEKHJlZyk7CiAKLQl2YWwgJj0gfihUUkFOU19ERElfRlVOQ19FTkFCTEUgfCBUUkFOU19E RElfUE9SVF9NQVNLKTsKKwl2YWwgJj0gfihUUkFOU19ERElfRlVOQ19FTkFCTEUgfCBUUkFOU19E RElfUE9SVF9NQVNLIHwgVFJBTlNfRERJX0RQX1ZDX1BBWUxPQURfQUxMT0MpOwogCXZhbCB8PSBU UkFOU19ERElfUE9SVF9OT05FOwogCUk5MTVfV1JJVEUocmVnLCB2YWwpOwogfQpAQCAtMTEzOSw4 ICsxMTk0LDExIEBAIGJvb2wgaW50ZWxfZGRpX2Nvbm5lY3Rvcl9nZXRfaHdfc3RhdGUoc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQogCWNhc2UgVFJBTlNfRERJX01PREVf U0VMRUNUX0RQX1NTVDoKIAkJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKIAkJ CXJldHVybiB0cnVlOwotCWNhc2UgVFJBTlNfRERJX01PREVfU0VMRUNUX0RQX01TVDoKIAkJcmV0 dXJuICh0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJY2FzZSBUUkFO U19ERElfTU9ERV9TRUxFQ1RfRFBfTVNUOgorCQkvKiBpZiB0aGUgdHJhbnNjb2RlciBpcyBpbiBN U1Qgc3RhdGUgdGhlbiAKKwkJICogY29ubmVjdG9yIGlzbid0IGNvbm5lY3RlZCAqLworCQlyZXR1 cm4gZmFsc2U7CiAKIAljYXNlIFRSQU5TX0RESV9NT0RFX1NFTEVDVF9GREk6CiAJCXJldHVybiAo dHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBKTsKQEAgLTExOTIsNiArMTI1MCw5IEBAIGJv b2wgaW50ZWxfZGRpX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK IAogCQkJaWYgKCh0bXAgJiBUUkFOU19ERElfUE9SVF9NQVNLKQogCQkJICAgID09IFRSQU5TX0RE SV9TRUxFQ1RfUE9SVChwb3J0KSkgeworCQkJCWlmICgodG1wICYgVFJBTlNfRERJX01PREVfU0VM RUNUX01BU0spID09IFRSQU5TX0RESV9NT0RFX1NFTEVDVF9EUF9NU1QpCisJCQkJCXJldHVybiBm YWxzZTsKKwogCQkJCSpwaXBlID0gaTsKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KQEAgLTE0OTgs MTAgKzE1NTksMTUgQEAgdm9pZCBpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQogCQkJaW50ZWxfd2FpdF9kZGlfYnVmX2lkbGUoZGV2X3By aXYsIHBvcnQpOwogCX0KIAotCXZhbCA9IERQX1RQX0NUTF9FTkFCTEUgfCBEUF9UUF9DVExfTU9E RV9TU1QgfAorCXZhbCA9IERQX1RQX0NUTF9FTkFCTEUgfAogCSAgICAgIERQX1RQX0NUTF9MSU5L X1RSQUlOX1BBVDEgfCBEUF9UUF9DVExfU0NSQU1CTEVfRElTQUJMRTsKLQlpZiAoZHJtX2RwX2Vu aGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCi0JCXZhbCB8PSBEUF9UUF9DVExfRU5I QU5DRURfRlJBTUVfRU5BQkxFOworCWlmIChpbnRlbF9kcC0+aXNfbXN0KQorCQl2YWwgfD0gRFBf VFBfQ1RMX01PREVfTVNUOworCWVsc2UgeworCQl2YWwgfD0gRFBfVFBfQ1RMX01PREVfU1NUOwor CQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCisJCQl2YWwg fD0gRFBfVFBfQ1RMX0VOSEFOQ0VEX0ZSQU1FX0VOQUJMRTsKKwl9CiAJSTkxNV9XUklURShEUF9U UF9DVEwocG9ydCksIHZhbCk7CiAJUE9TVElOR19SRUFEKERQX1RQX0NUTChwb3J0KSk7CiAKQEAg LTE3MzIsNiArMTc5OCw4IEBAIHZvaWQgaW50ZWxfZGRpX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgZW51bSBwb3J0IHBvcnQpCiAJaW50ZWxfZW5jb2Rlci0+Y2xvbmVhYmxlID0gMDsKIAlp bnRlbF9lbmNvZGVyLT5ob3RfcGx1ZyA9IGludGVsX2RkaV9ob3RfcGx1ZzsKIAorCWRldl9wcml2 LT5ocGRfaXJxX3BvcnRbcG9ydF0gPSBpbnRlbF9kaWdfcG9ydDsKKwogCWlmIChpbml0X2RwKQog CQlkcF9jb25uZWN0b3IgPSBpbnRlbF9kZGlfaW5pdF9kcF9jb25uZWN0b3IoaW50ZWxfZGlnX3Bv cnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNzViMmFhZi4uZGZj Yzc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtNTYsNiArNTYsMTQg QEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQsCiAJCQkJICBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAorc3RhdGljIHN0cnVjdCBpbnRlbF9lbmNv ZGVyICppbnRlbF9maW5kX2VuY29kZXIoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9y LCBpbnQgcGlwZSkKK3sKKwlpZiAoIWNvbm5lY3Rvci0+bXN0X3BvcnQpCisJCXJldHVybiBjb25u ZWN0b3ItPmVuY29kZXI7CisJZWxzZQorCQlyZXR1cm4gJmNvbm5lY3Rvci0+bXN0X3BvcnQtPm1z dF9lbmNvZGVyc1twaXBlXS0+YmFzZTsKK30KKwogdHlwZWRlZiBzdHJ1Y3QgewogCWludAltaW4s IG1heDsKIH0gaW50ZWxfcmFuZ2VfdDsKQEAgLTM4MjEsNiArMzgyOSw5IEBAIHN0YXRpYyB2b2lk IGhhc3dlbGxfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCWlmIChpbnRlbF9j cnRjLT5jb25maWcuaGFzX3BjaF9lbmNvZGVyKQogCQlscHRfcGNoX2VuYWJsZShjcnRjKTsKIAor CWlmIChpbnRlbF9jcnRjLT5jb25maWcuZHBfZW5jb2Rlcl9pc19tc3QpCisJCWludGVsX2RkaV9z ZXRfdmNfcGF5bG9hZF9hbGxvYyhjcnRjLCB0cnVlKTsKKwogCWZvcl9lYWNoX2VuY29kZXJfb25f Y3J0YyhkZXYsIGNydGMsIGVuY29kZXIpIHsKIAkJZW5jb2Rlci0+ZW5hYmxlKGVuY29kZXIpOwog CQlpbnRlbF9vcHJlZ2lvbl9ub3RpZnlfZW5jb2RlcihlbmNvZGVyLCB0cnVlKTsKQEAgLTM4Njks NiArMzg4MCw5IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAKIAlpbnRlbF9kaXNhYmxlX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwogCisJ aWYgKGludGVsX2NydGMtPmNvbmZpZy5kcF9lbmNvZGVyX2lzX21zdCkKKwkJaW50ZWxfZGRpX3Nl dF92Y19wYXlsb2FkX2FsbG9jKGNydGMsIGZhbHNlKTsKKwogCWlyb25sYWtlX3BmaXRfZGlzYWJs ZShpbnRlbF9jcnRjKTsKIAogCWZvcl9lYWNoX2VuY29kZXJfb25fY3J0YyhkZXYsIGNydGMsIGVu Y29kZXIpCkBAIC00MDM4LDYgKzQwNTIsMjMgQEAgc3RhdGljIHZvaWQgaTl4eF9wZml0X2VuYWJs ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlmb3IgKChkb21haW4pID0gMDsgKGRvbWFpbikg PCBQT1dFUl9ET01BSU5fTlVNOyAoZG9tYWluKSsrKQlcCiAJCWlmICgoMSA8PCAoZG9tYWluKSkg JiAobWFzaykpCiAKK2VudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG9ydF90b19wb3dl cl9kb21haW4oZW51bSBwb3J0IHBvcnQpCit7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQT1JU X0E6CisJCXJldHVybiBQT1dFUl9ET01BSU5fUE9SVF9ERElfQV80X0xBTkVTOworCWNhc2UgUE9S VF9COgorCQlyZXR1cm4gUE9XRVJfRE9NQUlOX1BPUlRfRERJX0JfNF9MQU5FUzsKKwljYXNlIFBP UlRfQzoKKwkJcmV0dXJuIFBPV0VSX0RPTUFJTl9QT1JUX0RESV9DXzRfTEFORVM7CisJY2FzZSBQ T1JUX0Q6CisJCXJldHVybiBQT1dFUl9ET01BSU5fUE9SVF9ERElfRF80X0xBTkVTOworCWRlZmF1 bHQ6CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIFBPV0VSX0RPTUFJTl9QT1JUX09USEVS OworCX0KK30KKwogZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbgogaW50ZWxfZGlzcGxh eV9wb3J0X3Bvd2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikK IHsKQEAgLTQwNTIsMTkgKzQwODMsMTAgQEAgaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFp bihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKIAljYXNlIElOVEVMX09VVFBV VF9IRE1JOgogCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKIAkJaW50ZWxfZGlnX3BvcnQgPSBlbmNf dG9fZGlnX3BvcnQoJmludGVsX2VuY29kZXItPmJhc2UpOwotCQlzd2l0Y2ggKGludGVsX2RpZ19w b3J0LT5wb3J0KSB7Ci0JCWNhc2UgUE9SVF9BOgotCQkJcmV0dXJuIFBPV0VSX0RPTUFJTl9QT1JU X0RESV9BXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9COgotCQkJcmV0dXJuIFBPV0VSX0RPTUFJTl9Q T1JUX0RESV9CXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9DOgotCQkJcmV0dXJuIFBPV0VSX0RPTUFJ Tl9QT1JUX0RESV9DXzRfTEFORVM7Ci0JCWNhc2UgUE9SVF9EOgotCQkJcmV0dXJuIFBPV0VSX0RP TUFJTl9QT1JUX0RESV9EXzRfTEFORVM7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09OX09OQ0UoMSk7 Ci0JCQlyZXR1cm4gUE9XRVJfRE9NQUlOX1BPUlRfT1RIRVI7Ci0JCX0KKwkJcmV0dXJuIHBvcnRf dG9fcG93ZXJfZG9tYWluKGludGVsX2RpZ19wb3J0LT5wb3J0KTsKKwljYXNlIElOVEVMX09VVFBV VF9EUF9NU1Q6CisJCWludGVsX2RpZ19wb3J0ID0gZW5jX3RvX21zdCgmaW50ZWxfZW5jb2Rlci0+ YmFzZSktPnByaW1hcnk7CisJCXJldHVybiBwb3J0X3RvX3Bvd2VyX2RvbWFpbihpbnRlbF9kaWdf cG9ydC0+cG9ydCk7CiAJY2FzZSBJTlRFTF9PVVRQVVRfQU5BTE9HOgogCQlyZXR1cm4gUE9XRVJf RE9NQUlOX1BPUlRfQ1JUOwogCWNhc2UgSU5URUxfT1VUUFVUX0RTSToKQEAgLTEwMjAzLDcgKzEw MjI1LDcgQEAgaW50ZWxfbW9kZXNldF9zdGFnZV9vdXRwdXRfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJICogZm9yIHRoZW0uICovCiAJCWZvciAocm8gPSAwOyBybyA8IHNldC0+bnVt X2Nvbm5lY3RvcnM7IHJvKyspIHsKIAkJCWlmIChzZXQtPmNvbm5lY3RvcnNbcm9dID09ICZjb25u ZWN0b3ItPmJhc2UpIHsKLQkJCQljb25uZWN0b3ItPm5ld19lbmNvZGVyID0gY29ubmVjdG9yLT5l bmNvZGVyOworCQkJCWNvbm5lY3Rvci0+bmV3X2VuY29kZXIgPSBpbnRlbF9maW5kX2VuY29kZXIo Y29ubmVjdG9yLCB0b19pbnRlbF9jcnRjKHNldC0+Y3J0YyktPnBpcGUpOwogCQkJCWJyZWFrOwog CQkJfQogCQl9CkBAIC0xMDI0OSw3ICsxMDI3MSw3IEBAIGludGVsX21vZGVzZXRfc3RhZ2Vfb3V0 cHV0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSBuZXdfY3J0YykpIHsKIAkJ CXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWNvbm5lY3Rvci0+ZW5jb2Rlci0+bmV3X2NydGMgPSB0 b19pbnRlbF9jcnRjKG5ld19jcnRjKTsKKwkJY29ubmVjdG9yLT5uZXdfZW5jb2Rlci0+bmV3X2Ny dGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjKTsKIAogCQlEUk1fREVCVUdfS01TKCJbQ09OTkVD VE9SOiVkOiVzXSB0byBbQ1JUQzolZF1cbiIsCiAJCQljb25uZWN0b3ItPmJhc2UuYmFzZS5pZCwK QEAgLTEwMjgzLDcgKzEwMzA1LDEyIEBAIGludGVsX21vZGVzZXRfc3RhZ2Vfb3V0cHV0X3N0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCX0KIAl9CiAJLyogTm93IHdlJ3ZlIGFsc28gdXBk YXRlZCBlbmNvZGVyLT5uZXdfY3J0YyBmb3IgYWxsIGVuY29kZXJzLiAqLwotCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAor CQkJICAgIGJhc2UuaGVhZCkgeworCQlpZiAoY29ubmVjdG9yLT5uZXdfZW5jb2RlcikKKwkJCWlm IChjb25uZWN0b3ItPm5ld19lbmNvZGVyICE9IGNvbm5lY3Rvci0+ZW5jb2RlcikKKwkJCQljb25u ZWN0b3ItPmVuY29kZXIgPSBjb25uZWN0b3ItPm5ld19lbmNvZGVyOworCX0KIAlsaXN0X2Zvcl9l YWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwKIAkJCSAgICBiYXNl LmhlYWQpIHsKIAkJY3J0Yy0+bmV3X2VuYWJsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jCmluZGV4IDQ0ZGY0OTMuLmVhODQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAt NzAxLDggKzcwMSw5IEBAIGludGVsX2RwX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKHN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoJmludGVsX2Nvbm5lY3Rvci0+YmFzZSk7CiAKLQlzeXNm c19yZW1vdmVfbGluaygmaW50ZWxfY29ubmVjdG9yLT5iYXNlLmtkZXYtPmtvYmosCi0JCQkgIGlu dGVsX2RwLT5hdXguZGRjLmRldi5rb2JqLm5hbWUpOworCWlmICghaW50ZWxfY29ubmVjdG9yLT5t c3RfcG9ydCkKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmludGVsX2Nvbm5lY3Rvci0+YmFzZS5rZGV2 LT5rb2JqLAorCQkJCSAgaW50ZWxfZHAtPmF1eC5kZGMuZGV2LmtvYmoubmFtZSk7CiAJaW50ZWxf Y29ubmVjdG9yX3VucmVnaXN0ZXIoaW50ZWxfY29ubmVjdG9yKTsKIH0KIApAQCAtMjg5Miw2ICsy ODkzLDMzIEBAIGludGVsX2RwX3Byb2JlX291aShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQog CWVkcF9wYW5lbF92ZGRfb2ZmKGludGVsX2RwLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyBib29sCitp bnRlbF9kcF9wcm9iZV9tc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwl1OCBidWZb MV07CisKKwlpZiAoIWludGVsX2RwLT5jYW5fbXN0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo aW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdIDwgMHgxMikKKwkJcmV0dXJuIGZhbHNlOworCisJ X2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOworCWlmIChpbnRlbF9kcF9kcGNkX3JlYWRfd2Fr ZSgmaW50ZWxfZHAtPmF1eCwgRFBfTVNUTV9DQVAsIGJ1ZiwgMSkpIHsKKwkJaWYgKGJ1ZlswXSAm IERQX01TVF9DQVApIHsKKwkJCURSTV9ERUJVR19LTVMoIlNpbmsgaXMgTVNUIGNhcGFibGVcbiIp OworCQkJaW50ZWxfZHAtPmlzX21zdCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdf S01TKCJTaW5rIGlzIG5vdCBNU1QgY2FwYWJsZVxuIik7CisJCQlpbnRlbF9kcC0+aXNfbXN0ID0g ZmFsc2U7CisJCX0KKwl9CisJZWRwX3BhbmVsX3ZkZF9vZmYoaW50ZWxfZHAsIGZhbHNlKTsKKwor CWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoJmludGVsX2RwLT5tc3RfbWdyLCBpbnRl bF9kcC0+aXNfbXN0KTsKKwlyZXR1cm4gaW50ZWxfZHAtPmlzX21zdDsKK30KKwogaW50IGludGVs X2RwX3NpbmtfY3JjKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU4ICpjcmMpCiB7CiAJc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChp bnRlbF9kcCk7CkBAIC0yOTI5LDYgKzI5NTcsMjAgQEAgaW50ZWxfZHBfZ2V0X3NpbmtfaXJxKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU4ICpzaW5rX2lycV92ZWN0b3IpCiAJCQkJICAgICAg IHNpbmtfaXJxX3ZlY3RvciwgMSkgPT0gMTsKIH0KIAorc3RhdGljIGJvb2wKK2ludGVsX2RwX2dl dF9zaW5rX2lycV9lc2koc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTggKnNpbmtfaXJxX3Zl Y3RvcikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfZHBfZHBjZF9yZWFkX3dha2UoJmlu dGVsX2RwLT5hdXgsCisJCQkJCSAgICAgRFBfU0lOS19DT1VOVF9FU0ksCisJCQkJCSAgICAgc2lu a19pcnFfdmVjdG9yLCAxNCk7CisJaWYgKHJldCAhPSAxNCkKKwkJcmV0dXJuIGZhbHNlOworCisJ cmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2b2lkCiBpbnRlbF9kcF9oYW5kbGVfdGVzdF9yZXF1 ZXN0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CkBAIC0yOTQ0LDYgKzI5ODYsNjggQEAg aW50ZWxfZHBfaGFuZGxlX3Rlc3RfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQog ICogIDMuIFVzZSBMaW5rIFRyYWluaW5nIGZyb20gMi41LjMuMyBhbmQgMy41LjEuMwogICogIDQu IENoZWNrIGxpbmsgc3RhdHVzIG9uIHJlY2VpcHQgb2YgaG90LXBsdWcgaW50ZXJydXB0CiAgKi8K K3N0YXRpYyBpbnQKK2ludGVsX2RwX2NoZWNrX21zdF9zdGF0dXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKK3sKKwlib29sIGJyZXQ7CisKKwlpZiAoaW50ZWxfZHAtPmlzX21zdCkgeworCQl1 OCBlc2lbMTZdID0geyAwIH07CisJCWludCByZXQgPSAwOworCQlpbnQgcmV0cnk7CisJCWJvb2wg aGFuZGxlZDsKKwkJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPm1zdF9tZ3IuYXV4X2xvY2spOworCQli cmV0ID0gaW50ZWxfZHBfZ2V0X3NpbmtfaXJxX2VzaShpbnRlbF9kcCwgZXNpKTsKKwkJbXV0ZXhf dW5sb2NrKCZpbnRlbF9kcC0+bXN0X21nci5hdXhfbG9jayk7CisJZ29fYWdhaW46CisJCWlmIChi cmV0ID09IHRydWUpIHsKKworCQkJLyogY2hlY2sgbGluayBzdGF0dXMgLSBlc2lbMTBdID0gMHgy MDBjICovCisJCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlua3MgJiYgIWRybV9kcF9jaGFu bmVsX2VxX29rKCZlc2lbMTBdLCBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKKwkJCQlEUk1fREVC VUdfS01TKCJjaGFubmVsIEVRIG5vdCBvaywgcmV0cmFpbmluZ1xuIik7CisJCQkJaW50ZWxfZHBf c3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7CisJCQkJaW50ZWxfZHBfY29tcGxldGVfbGlua190 cmFpbihpbnRlbF9kcCk7CisJCQkJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsK KwkJCX0KKworCQkJRFJNX0RFQlVHX0tNUygiZ290IGVzaSAlMDJ4ICUwMnggJTAyeFxuIiwgZXNp WzBdLCBlc2lbMV0sIGVzaVsyXSk7CisJCQlyZXQgPSBkcm1fZHBfbXN0X2hwZF9pcnEoJmludGVs X2RwLT5tc3RfbWdyLCBlc2ksICZoYW5kbGVkKTsKKworCQkJaWYgKGhhbmRsZWQpIHsKKwkJCQlt dXRleF9sb2NrKCZpbnRlbF9kcC0+bXN0X21nci5hdXhfbG9jayk7CisJCQkJZm9yIChyZXRyeSA9 IDA7IHJldHJ5IDwgMzsgcmV0cnkrKykgeworCQkJCQlpbnQgd3JldDsKKwkJCQkJd3JldCA9IGRy bV9kcF9kcGNkX3dyaXRlKCZpbnRlbF9kcC0+YXV4LAorCQkJCQkJCQkgRFBfU0lOS19DT1VOVF9F U0krMSwKKwkJCQkJCQkJICZlc2lbMV0sIDMpOworCQkJCQlpZiAod3JldCA9PSAzKSB7CisJCQkJ CQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQltdXRleF91bmxvY2soJmludGVsX2RwLT5tc3Rf bWdyLmF1eF9sb2NrKTsKKworCQkJCW11dGV4X2xvY2soJmludGVsX2RwLT5tc3RfbWdyLmF1eF9s b2NrKTsKKwkJCQlicmV0ID0gaW50ZWxfZHBfZ2V0X3NpbmtfaXJxX2VzaShpbnRlbF9kcCwgZXNp KTsKKwkJCQltdXRleF91bmxvY2soJmludGVsX2RwLT5tc3RfbWdyLmF1eF9sb2NrKTsKKwkJCQlp ZiAoYnJldCA9PSB0cnVlKSB7CisJCQkJCURSTV9ERUJVR19LTVMoImdvdCBlc2kyICUwMnggJTAy eCAlMDJ4XG4iLCBlc2lbMF0sIGVzaVsxXSwgZXNpWzJdKTsKKwkJCQkJZ290byBnb19hZ2FpbjsK KwkJCQl9CisJCQl9IGVsc2UKKwkJCQlyZXQgPSAwOworCisJCQlyZXR1cm4gcmV0OworCQl9IGVs c2UgeworCQkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90 b19kaWdfcG9ydChpbnRlbF9kcCk7CisJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gZ2V0IEVT SSAtIGRldmljZSBtYXkgaGF2ZSBmYWlsZWRcbiIpOworCQkJaW50ZWxfZHAtPmlzX21zdCA9IGZh bHNlOworCQkJZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdCgmaW50ZWxfZHAtPm1zdF9t Z3IsIGludGVsX2RwLT5pc19tc3QpOworCQkJLyogc2VuZCBhIGhvdHBsdWcgZXZlbnQgKi8KKwkJ CWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5k ZXYpOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQogCiB2b2lkCiBpbnRlbF9kcF9jaGVj a19saW5rX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQpAQCAtMzE2Myw2ICszMjY3 LDcgQEAgaW50ZWxfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJv b2wgZm9yY2UpCiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7CiAJZW51bSBpbnRl bF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CiAJc3RydWN0IGVkaWQgKmVkaWQg PSBOVUxMOworCWJvb2wgcmV0OwogCiAJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwog CkBAIC0zMTcyLDYgKzMyNzcsMTIgQEAgaW50ZWxfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCiAJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjol ZDolc11cbiIsCiAJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgZHJtX2dldF9jb25uZWN0b3Jf bmFtZShjb25uZWN0b3IpKTsKIAorCWlmIChpbnRlbF9kcC0+aXNfbXN0KSB7CisJCS8qIE1TVCBk ZXZpY2VzIGFyZSBkaXNjb25uZWN0ZWQgZnJvbSBhIG1vbml0b3IgUE9WICovCisJCXN0YXR1cyA9 IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlnb3RvIG91dDsKKwl9CisKIAlpbnRl bF9kcC0+aGFzX2F1ZGlvID0gZmFsc2U7CiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQpAQCAt MzE4NCw2ICszMjk1LDE2IEBAIGludGVsX2RwX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBib29sIGZvcmNlKQogCiAJaW50ZWxfZHBfcHJvYmVfb3VpKGludGVsX2RwKTsK IAorCXJldCA9IGludGVsX2RwX3Byb2JlX21zdChpbnRlbF9kcCk7CisJaWYgKHJldCkgeworCQkv KiBpZiB3ZSBhcmUgaW4gTVNUIG1vZGUgdGhlbiB0aGlzIGNvbm5lY3RvcgorCQkgICB3b24ndCBh cHBlYXIgY29ubmVjdGVkIG9yIGhhdmUgYW55dGhpbmcgd2l0aCBFRElEIG9uIGl0ICovCisJCWlm IChpbnRlbF9lbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9FRFApCisJCQlpbnRlbF9lbmNv ZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUOworCQlzdGF0dXMgPSBjb25uZWN0 b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKGludGVsX2Rw LT5mb3JjZV9hdWRpbyAhPSBIRE1JX0FVRElPX0FVVE8pIHsKIAkJaW50ZWxfZHAtPmhhc19hdWRp byA9IChpbnRlbF9kcC0+Zm9yY2VfYXVkaW8gPT0gSERNSV9BVURJT19PTik7CiAJfSBlbHNlIHsK QEAgLTMzNzksNiArMzUwMCw3IEBAIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95KHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxf ZHBfdG9fZGV2KGludGVsX2RwKTsKIAogCWRybV9kcF9hdXhfdW5yZWdpc3Rlcl9pMmNfYnVzKCZp bnRlbF9kcC0+YXV4KTsKKwlpbnRlbF9kcF9tc3RfZW5jb2Rlcl9jbGVhbnVwKGludGVsX2RpZ19w b3J0KTsKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWlmIChpc19lZHAoaW50ZWxf ZHApKSB7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93 b3JrKTsKQEAgLTM0NjMsNyArMzU4NSw3IEBAIGJvb2wgaW50ZWxfZHBfaXNfZWRwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0KQogCXJldHVybiBmYWxzZTsKIH0KIAotc3Rh dGljIHZvaWQKK3ZvaWQKIGludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGlu dGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5l Y3Rvcik7CkBAIC0zOTU5LDYgKzQwODEsMTMgQEAgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiAKIAlpbnRlbF9kcC0+cHNy X3NldHVwX2RvbmUgPSBmYWxzZTsKIAorCS8qIGluaXQgTVNUIG9uIHBvcnRzIHRoYXQgY2FuIHN1 cHBvcnQgaXQgKi8KKwlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7 CisJCWlmIChwb3J0ID09IFBPUlRfQiB8fCBwb3J0ID09IFBPUlRfQyB8fCBwb3J0ID09IFBPUlRf RCkgeworCQkJaW50ZWxfZHBfbXN0X2VuY29kZXJfaW5pdChpbnRlbF9kaWdfcG9ydCwgaW50ZWxf Y29ubmVjdG9yLT5iYXNlLmJhc2UuaWQpOworCQl9CisJfQorCiAJaWYgKCFpbnRlbF9lZHBfaW5p dF9jb25uZWN0b3IoaW50ZWxfZHAsIGludGVsX2Nvbm5lY3RvciwgJnBvd2VyX3NlcSkpIHsKIAkJ ZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2kyY19idXMoJmludGVsX2RwLT5hdXgpOwogCQlpZiAoaXNf ZWRwKGludGVsX2RwKSkgewpAQCAtMzk4OSw2ICs0MTE4LDcgQEAgaW50ZWxfZHBfaW5pdF9jb25u ZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiB2b2lkCiBp bnRlbF9kcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfcmVnLCBlbnVt IHBvcnQgcG9ydCkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0 OwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyOwogCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKQEAgLTQwMjksNiArNDE1OSwxMCBAQCBpbnRlbF9kcF9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfcmVnLCBlbnVtIHBvcnQgcG9ydCkKIAlpbnRl bF9kaWdfcG9ydC0+cG9ydCA9IHBvcnQ7CiAJaW50ZWxfZGlnX3BvcnQtPmRwLm91dHB1dF9yZWcg PSBvdXRwdXRfcmVnOwogCisJLyogZm9yIG5vdyBvbmx5IHVzZSBuZXcgSVJRIGhhbmRsaW5nIGZv ciBNU1QgY2FwYWJsZSBwb3J0cyAqLworCWlmIChpbnRlbF9kaWdfcG9ydC0+ZHAuY2FuX21zdCkK KwkJZGV2X3ByaXYtPmhwZF9pcnFfcG9ydFtwb3J0XSA9IGludGVsX2RpZ19wb3J0OworCiAJaW50 ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDsKIAlpbnRlbF9lbmNv ZGVyLT5jcnRjX21hc2sgPSAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMik7CiAJaW50ZWxf ZW5jb2Rlci0+Y2xvbmVhYmxlID0gMDsKQEAgLTQwNDAsMyArNDE3NCw5MyBAQCBpbnRlbF9kcF9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfcmVnLCBlbnVtIHBvcnQgcG9y dCkKIAkJa2ZyZWUoaW50ZWxfY29ubmVjdG9yKTsKIAl9CiB9CisKKy8qCisgKiBIYW5kbGUgRFAg SVJRIGNsb3NlIHRvIHNwZWMgcmVjb21tZW5kYXRpb25zCisgKiBVc2UgaHcgdG8gZGV0ZWN0IGxv bmcgdnMgc2hvcnQgcHVsc2VzCisgKgorICogSWYgd2UgZ2V0IGEgbG9uZyBwdWxzZSAtIHdlIG5l ZWQgdG8gcmVhZCBEUENEIGZpcnN0CisgKiBJZiB3ZSBnZXQgYSBzaG9ydCBwdWxzZSAtIHdlIG5l ZWQgdG8gY2hlY2sgbGluayBpcnEvc3RhdHVzCisgKiByZXR1cm5pbmcgMSBjYXVzZXMgdGhlIG9s ZCBkZXRlY3QgdG8gaGFwcGVuIGZvciBIRE1JCisgKi8KK2ludCBpbnRlbF9kcF9oYW5kbGVfaHBk X2lycShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICBi b29sIGhwZF9sb25nKQoreworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfZGln X3BvcnQtPmRwOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFz ZS5iYXNlLmRldjsKKwlpbnQgcmV0OworCisJaWYgKCFpbnRlbF9kcC0+b3V0cHV0X3JlZykKKwkJ cmV0dXJuIDE7CisKKwlEUk1fREVCVUdfS01TKCJnb3QgaHBkIGlycSBvbiBwb3J0ICVkIC0gJXNc biIsIGludGVsX2RpZ19wb3J0LT5wb3J0LAorCQkgICAgICBocGRfbG9uZyA/ICJsb25nIiA6ICJz aG9ydCIpOworCS8qIHdlIGhhdmUgdG8gcmUtcmVhZCBEUENEIG9ubHkgb24gYSBsb25nIGlycSAq LworCWlmIChocGRfbG9uZykgeworCQlpZiAoIWludGVsX2RwX2dldF9kcGNkKGludGVsX2RwKSkK KwkJCWdvdG8gbXN0X2ZhaWw7CisKKwkJaW50ZWxfZHBfcHJvYmVfb3VpKGludGVsX2RwKTsKKwor CQlpZiAoIWludGVsX2RwX3Byb2JlX21zdChpbnRlbF9kcCkpCisJCQlnb3RvIG1zdF9mYWlsOwor CX0KKworCWlmIChpbnRlbF9kcC0+aXNfbXN0KSB7CisJCXJldCA9IGludGVsX2RwX2NoZWNrX21z dF9zdGF0dXMoaW50ZWxfZHApOworCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQlyZXR1cm4gMTsK Kwl9IGVsc2UgeworCQlpbnRlbF9kcF9jaGVja19saW5rX3N0YXR1cyhpbnRlbF9kcCk7CisJCXJl dHVybiAxOworCX0KKworCXJldHVybiAwOworCittc3RfZmFpbDoKKwkvKiBpZiB3ZSB3ZXJlIGlu IE1TVCBtb2RlLCBhbmQgZGV2aWNlIGlzIG5vdCB0aGVyZSBnZXQgb3V0IG9mIE1TVCBtb2RlICov CisJaWYgKGludGVsX2RwLT5pc19tc3QpIHsKKwkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGdl dCBFU0kgLSBkZXZpY2UgbWF5IGhhdmUgZmFpbGVkICVkIHZzICVkXG4iLCBpbnRlbF9kcC0+aXNf bXN0LCBpbnRlbF9kcC0+bXN0X21nci5tc3Rfc3RhdGUpOworCQlpbnRlbF9kcC0+aXNfbXN0ID0g ZmFsc2U7CisJCWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoJmludGVsX2RwLT5tc3Rf bWdyLCBpbnRlbF9kcC0+aXNfbXN0KTsKKwkJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChk ZXYpOworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCBpbnRlbF9kcF9tc3Rfc3VzcGVuZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIE1TVCAqLworCWZv ciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZGV2X3ByaXYtPmhwZF9pcnFfcG9ydFtpXTsKKwkJ aWYgKCFpbnRlbF9kaWdfcG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbnRlbF9kaWdfcG9y dC0+YmFzZS50eXBlID09IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCkgeworCQkJaWYgKGludGVs X2RpZ19wb3J0LT5kcC5pc19tc3QpCisJCQkJZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc3VzcGVu ZCgmaW50ZWxfZGlnX3BvcnQtPmRwLm1zdF9tZ3IpOworCQl9CisJfQorfQorCit2b2lkIGludGVs X2RwX21zdF9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJZm9y IChpID0gMDsgaSA8IEk5MTVfTUFYX1BPUlRTOyBpKyspIHsKKwkJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkZXZfcHJpdi0+aHBkX2lycV9wb3J0W2ldOworCQlp ZiAoIWludGVsX2RpZ19wb3J0KQorCQkJY29udGludWU7CisJCWlmIChpbnRlbF9kaWdfcG9ydC0+ YmFzZS50eXBlID09IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCkgeworCQkJaW50IHJldDsKKwkJ CXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jlc3VtZSgmaW50ZWxfZGlnX3BvcnQtPmRw Lm1zdF9tZ3IpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJaW50ZWxfZHBfY2hlY2tfbXN0X3N0 YXR1cygmaW50ZWxfZGlnX3BvcnQtPmRwKTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHBfbXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZj YTVlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21z dC5jCkBAIC0wLDAgKzEsNTM4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29y cG9yYXRpb24KKyAqICAgICAgICAgICAgIDIwMTQgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQu aD4KKworYm9vbAoraW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAorCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX2NvbmZpZyAqcGlwZV9jb25m aWcpCit7CisJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9f bXN0KCZlbmNvZGVyLT5iYXNlKTsKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9k aWdfcG9ydCA9IGludGVsX21zdC0+cHJpbWFyeTsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw ID0gJmludGVsX2RpZ19wb3J0LT5kcDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rl ci0+YmFzZS5kZXY7CisJaW50IGJwcDsKKwlpbnQgbGFuZV9jb3VudCwgc2xvdHM7CisJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmFkanVzdGVk X21vZGU7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqZm91bmQgPSBOVUxMLCAqaW50ZWxfY29u bmVjdG9yOworCWludCBtc3RfcGJuOworCisJcGlwZV9jb25maWctPmRwX2VuY29kZXJfaXNfbXN0 ID0gdHJ1ZTsKKwlwaXBlX2NvbmZpZy0+aGFzX3BjaF9lbmNvZGVyID0gZmFsc2U7CisJcGlwZV9j b25maWctPmhhc19kcF9lbmNvZGVyID0gdHJ1ZTsKKwlicHAgPSAyNDsKKwlsYW5lX2NvdW50ID0g NDsKKwlpbnRlbF9kcC0+bGlua19idyA9IERQX0xJTktfQldfNV80OworCWludGVsX2RwLT5sYW5l X2NvdW50ID0gbGFuZV9jb3VudDsKKworCXBpcGVfY29uZmlnLT5waXBlX2JwcCA9IDI0OworCXBp cGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGludGVs X2RwLT5saW5rX2J3KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZWxfY29ubmVjdG9yLCAm ZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgYmFzZS5oZWFkKSB7CisJCWlmIChpbnRl bF9jb25uZWN0b3ItPm5ld19lbmNvZGVyID09IGVuY29kZXIpIHsKKwkJCWZvdW5kID0gaW50ZWxf Y29ubmVjdG9yOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCURSTV9F UlJPUigiY2FuJ3QgZmluZCBjb25uZWN0b3JcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ bXN0X3BibiA9IGRybV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNsb2NrLCBicHAp OworCisJcGlwZV9jb25maWctPnBibiA9IG1zdF9wYm47CisJc2xvdHMgPSBkcm1fZHBfZmluZF92 Y3BpX3Nsb3RzKCZpbnRlbF9kcC0+bXN0X21nciwgbXN0X3Bibik7CisKKwlpbnRlbF9saW5rX2Nv bXB1dGVfbV9uKGJwcCwgbGFuZV9jb3VudCwKKwkJCSAgICAgICBhZGp1c3RlZF9tb2RlLT5jcnRj X2Nsb2NrLAorCQkJICAgICAgIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAorCQkJICAgICAgICZw aXBlX2NvbmZpZy0+ZHBfbV9uKTsKKworCXBpcGVfY29uZmlnLT5kcF9tX24udHUgPSBzbG90czsK KwlyZXR1cm4gdHJ1ZTsKKworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kcF9tc3RfbW9kZV9zZXQo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGludGVsX2RwX21zdF9l bmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KCZlbmNvZGVyLT5iYXNlKTsKKwlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGludGVsX21zdC0+cHJpbWFyeTsK KworCWludGVsX2RkaV9tb2RlX3NldF9kcCgmaW50ZWxfZGlnX3BvcnQtPmJhc2UpOworfQorCitz dGF0aWMgdm9pZCBpbnRlbF9tc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9IGVuY190 b19tc3QoJmVuY29kZXItPmJhc2UpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVs X2RpZ19wb3J0ID0gaW50ZWxfbXN0LT5wcmltYXJ5OworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSAmaW50ZWxfZGlnX3BvcnQtPmRwOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfS01TKCIl ZFxuIiwgaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlua3MpOworCisJZHJtX2RwX21zdF9yZXNldF92 Y3BpX3Nsb3RzKCZpbnRlbF9kcC0+bXN0X21nciwgaW50ZWxfbXN0LT5wb3J0KTsKKworCXJldCA9 IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgmaW50ZWxfZHAtPm1zdF9tZ3IpOworCWlmIChy ZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIHBheWxvYWQgJWRcbiIsIHJldCk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlbF9tc3RfcG9zdF9kaXNhYmxlX2RwKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAq aW50ZWxfbXN0ID0gZW5jX3RvX21zdCgmZW5jb2Rlci0+YmFzZSk7CisJc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9ydC0+ZHA7CisKKwlEUk1fREVCVUdf S01TKCIlZFxuIiwgaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlua3MpOworCisJLyogdGhpcyBjYW4g ZmFpbCAqLworCWRybV9kcF9jaGVja19hY3Rfc3RhdHVzKCZpbnRlbF9kcC0+bXN0X21ncik7CisJ LyogYW5kIHRoaXMgY2FuIGFsc28gZmFpbCAqLworCWRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0 MigmaW50ZWxfZHAtPm1zdF9tZ3IpOworCisJZHJtX2RwX21zdF9kZWFsbG9jYXRlX3ZjcGkoJmlu dGVsX2RwLT5tc3RfbWdyLCBpbnRlbF9tc3QtPnBvcnQpOworCisJaW50ZWxfZHAtPmFjdGl2ZV9t c3RfbGlua3MtLTsKKwlpbnRlbF9tc3QtPnBvcnQgPSBOVUxMOworCWlmIChpbnRlbF9kcC0+YWN0 aXZlX21zdF9saW5rcyA9PSAwKSB7CisJCWludGVsX2RpZ19wb3J0LT5iYXNlLnBvc3RfZGlzYWJs ZSgmaW50ZWxfZGlnX3BvcnQtPmJhc2UpOworCQlpbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfZHAs IERSTV9NT0RFX0RQTVNfT0ZGKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX21zdF9wcmVf ZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBpbnRl bF9kcF9tc3RfZW5jb2RlciAqaW50ZWxfbXN0ID0gZW5jX3RvX21zdCgmZW5jb2Rlci0+YmFzZSk7 CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9tc3Qt PnByaW1hcnk7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9ydC0+ ZHA7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSBw b3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKKwlpbnQgcmV0OworCXVpbnQzMl90IHRl bXA7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqZm91bmQgPSBOVUxMLCAqaW50ZWxfY29ubmVj dG9yOworCWludCBzbG90czsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5iYXNl LmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlbF9jb25uZWN0b3IsICZkZXYtPm1vZGVf Y29uZmlnLmNvbm5lY3Rvcl9saXN0LCBiYXNlLmhlYWQpIHsKKwkJaWYgKGludGVsX2Nvbm5lY3Rv ci0+bmV3X2VuY29kZXIgPT0gZW5jb2RlcikgeworCQkJZm91bmQgPSBpbnRlbF9jb25uZWN0b3I7 CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJRFJNX0VSUk9SKCJjYW4n dCBmaW5kIGNvbm5lY3RvclxuIik7CisJCXJldHVybjsKKwl9CisKKwlEUk1fREVCVUdfS01TKCIl ZFxuIiwgaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlua3MpOworCWludGVsX21zdC0+cG9ydCA9IGZv dW5kLT5wb3J0OworCisJaWYgKGludGVsX2RwLT5hY3RpdmVfbXN0X2xpbmtzID09IDApIHsKKwkJ ZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kZGlfZ2V0X2VuY29kZXJfcG9ydChlbmNvZGVyKTsKKwor CQlJOTE1X1dSSVRFKFBPUlRfQ0xLX1NFTChwb3J0KSwgaW50ZWxfY3J0Yy0+ZGRpX3BsbF9zZWwp OworCisJCWludGVsX2RwX3NpbmtfZHBtcyhpbnRlbF9kcCwgRFJNX01PREVfRFBNU19PTik7CisK KworCQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKKwkJaW50ZWxfZHBfY29t cGxldGVfbGlua190cmFpbihpbnRlbF9kcCk7CisJCWludGVsX2RwX3N0b3BfbGlua190cmFpbihp bnRlbF9kcCk7CisJfQorCisJcmV0ID0gZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKCZpbnRlbF9k cC0+bXN0X21nciwKKwkJCQkgICAgICAgaW50ZWxfbXN0LT5wb3J0LCBpbnRlbF9jcnRjLT5jb25m aWcucGJuLCAmc2xvdHMpOworCWlmIChyZXQgPT0gZmFsc2UpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gYWxsb2NhdGUgdmNwaVxuIik7CisJCXJldHVybjsKKwl9CisKKworCWludGVsX2RwLT5h Y3RpdmVfbXN0X2xpbmtzKys7CisJdGVtcCA9IEk5MTVfUkVBRChEUF9UUF9TVEFUVVMocG9ydCkp OworCUk5MTVfV1JJVEUoRFBfVFBfU1RBVFVTKHBvcnQpLCB0ZW1wKTsKKworCXJldCA9IGRybV9k cF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgmaW50ZWxfZHAtPm1zdF9tZ3IpOworfQorCitzdGF0aWMg dm9pZCBpbnRlbF9tc3RfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQor eworCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqaW50ZWxfbXN0ID0gZW5jX3RvX21zdCgm ZW5jb2Rlci0+YmFzZSk7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3Bv cnQgPSBpbnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZp bnRlbF9kaWdfcG9ydC0+ZHA7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RpZ19w b3J0LT5iYXNlLmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9y dDsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHX0tNUygiJWRcbiIsIGludGVsX2RwLT5hY3RpdmVf bXN0X2xpbmtzKTsKKworCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKERQX1RQX1NUQVRVUyhwb3J0 KSkgJiBEUF9UUF9TVEFUVVNfQUNUX1NFTlQpLAorCQkgICAgIDEpKQorCQlEUk1fRVJST1IoIlRp bWVkIG91dCB3YWl0aW5nIGZvciBBQ1Qgc2VudFxuIik7CisKKwlyZXQgPSBkcm1fZHBfY2hlY2tf YWN0X3N0YXR1cygmaW50ZWxfZHAtPm1zdF9tZ3IpOworCisJcmV0ID0gZHJtX2RwX3VwZGF0ZV9w YXlsb2FkX3BhcnQyKCZpbnRlbF9kcC0+bXN0X21ncik7Cit9CisKK3N0YXRpYyBib29sIGludGVs X2RwX21zdF9lbmNfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAor CQkJCSAgICAgIGVudW0gcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29k ZXIgKmludGVsX21zdCA9IGVuY190b19tc3QoJmVuY29kZXItPmJhc2UpOworCSpwaXBlID0gaW50 ZWxfbXN0LT5waXBlOworCWlmIChpbnRlbF9tc3QtPnBvcnQpCisJCXJldHVybiB0cnVlOworCXJl dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZHBfbXN0X2VuY19nZXRfY29uZmln KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19j b25maWcgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqaW50 ZWxfbXN0ID0gZW5jX3RvX21zdCgmZW5jb2Rlci0+YmFzZSk7CisJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBpbnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0IGlu dGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGVuY29kZXItPmJhc2UuY3J0Yyk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZW51bSB0cmFuc2NvZGVy IGNwdV90cmFuc2NvZGVyID0gY3J0Yy0+Y29uZmlnLmNwdV90cmFuc2NvZGVyOworCXUzMiB0ZW1w LCBmbGFncyA9IDA7CisKKwlwaXBlX2NvbmZpZy0+aGFzX2RwX2VuY29kZXIgPSB0cnVlOworCisJ dGVtcCA9IEk5MTVfUkVBRChUUkFOU19ERElfRlVOQ19DVEwoY3B1X3RyYW5zY29kZXIpKTsKKwlp ZiAodGVtcCAmIFRSQU5TX0RESV9QSFNZTkMpCisJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUEhT WU5DOworCWVsc2UKKwkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJaWYgKHRlbXAg JiBUUkFOU19ERElfUFZTWU5DKQorCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BWU1lOQzsKKwll bHNlCisJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOworCisJc3dpdGNoICh0ZW1wICYg VFJBTlNfRERJX0JQQ19NQVNLKSB7CisJY2FzZSBUUkFOU19ERElfQlBDXzY6CisJCXBpcGVfY29u ZmlnLT5waXBlX2JwcCA9IDE4OworCQlicmVhazsKKwljYXNlIFRSQU5TX0RESV9CUENfODoKKwkJ cGlwZV9jb25maWctPnBpcGVfYnBwID0gMjQ7CisJCWJyZWFrOworCWNhc2UgVFJBTlNfRERJX0JQ Q18xMDoKKwkJcGlwZV9jb25maWctPnBpcGVfYnBwID0gMzA7CisJCWJyZWFrOworCWNhc2UgVFJB TlNfRERJX0JQQ18xMjoKKwkJcGlwZV9jb25maWctPnBpcGVfYnBwID0gMzY7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlwaXBlX2NvbmZpZy0+YWRqdXN0ZWRfbW9kZS5mbGFn cyB8PSBmbGFnczsKKwlpbnRlbF9kcF9nZXRfbV9uKGNydGMsIHBpcGVfY29uZmlnKTsKKworCWlu dGVsX2RkaV9jbG9ja19nZXQoJmludGVsX2RpZ19wb3J0LT5iYXNlLCBwaXBlX2NvbmZpZyk7Cit9 CisKK3N0YXRpYyBpbnQgaW50ZWxfZHBfbXN0X2dldF9kZGNfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25u ZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwID0gaW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydDsKKwlzdHJ1Y3QgZWRpZCAqZWRp ZDsKKwlpbnQgcmV0OworCisJZWRpZCA9IGRybV9kcF9tc3RfZ2V0X2VkaWQoY29ubmVjdG9yLCAm aW50ZWxfZHAtPm1zdF9tZ3IsIGludGVsX2Nvbm5lY3Rvci0+cG9ydCk7CisJaWYgKCFlZGlkKQor CQlyZXR1cm4gMDsKKworCXJldCA9IGludGVsX2Nvbm5lY3Rvcl91cGRhdGVfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsKKwlrZnJlZShlZGlkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBl bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitpbnRlbF9tc3RfcG9ydF9kcF9kZXRlY3Qoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpp bnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydDsKKworCXJldHVy biBkcm1fZHBfbXN0X2RldGVjdF9wb3J0KCZpbnRlbF9kcC0+bXN0X21nciwgaW50ZWxfY29ubmVj dG9yLT5wb3J0KTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2ludGVs X2RwX21zdF9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3Jj ZSkKK3sKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1czsKKwlzdGF0dXMgPSBpbnRl bF9tc3RfcG9ydF9kcF9kZXRlY3QoY29ubmVjdG9yKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitz dGF0aWMgaW50CitpbnRlbF9kcF9tc3Rfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJICB1 aW50NjRfdCB2YWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlbF9kcF9t c3RfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK KwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25u ZWN0b3IoY29ubmVjdG9yKTsKKworCWlmICghSVNfRVJSX09SX05VTEwoaW50ZWxfY29ubmVjdG9y LT5lZGlkKSkKKwkJa2ZyZWUoaW50ZWxfY29ubmVjdG9yLT5lZGlkKTsKKworCWRybV9jb25uZWN0 b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpbnRlbF9kcF9tc3RfY29ubmVjdG9yX2Z1 bmNzID0geworCS5kcG1zID0gaW50ZWxfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGludGVs X2RwX21zdF9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9j b25uZWN0b3JfbW9kZXMsCisJLnNldF9wcm9wZXJ0eSA9IGludGVsX2RwX21zdF9zZXRfcHJvcGVy dHksCisJLmRlc3Ryb3kgPSBpbnRlbF9kcF9tc3RfY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCitz dGF0aWMgaW50IGludGVsX2RwX21zdF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlyZXR1cm4gaW50ZWxfZHBfbXN0X2dldF9kZGNfbW9kZXMoY29ubmVjdG9y KTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitpbnRlbF9kcF9tc3RfbW9kZV92 YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJLyogVE9ETyAtIHZhbGlkYXRlIG1vZGUgYWdhaW5zdCBhdmFp bGFibGUgUEJOIGZvciBsaW5rICovCisJaWYgKG1vZGUtPmNsb2NrIDwgMTAwMDApCisJCXJldHVy biBNT0RFX0NMT0NLX0xPVzsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJM Q0xLKQorCQlyZXR1cm4gTU9ERV9IX0lMTEVHQUw7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKwor c3RydWN0IGRybV9lbmNvZGVyICppbnRlbF9tc3RfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29u bmVjdG9yID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCA9IGludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQ7CisJcmV0dXJuICZpbnRlbF9k cC0+bXN0X2VuY29kZXJzWzBdLT5iYXNlLmJhc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW50ZWxfZHBfbXN0X2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGludGVsX2RwX21zdF9nZXRfbW9kZXMsCisJLm1vZGVf dmFsaWQgPSBpbnRlbF9kcF9tc3RfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gaW50ZWxf bXN0X2Jlc3RfZW5jb2RlciwKK307CisKK3ZvaWQgaW50ZWxfZHBfbXN0X2VuY29kZXJfZGVzdHJv eShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGludGVsX2RwX21zdF9l bmNvZGVyICppbnRlbF9tc3QgPSBlbmNfdG9fbXN0KGVuY29kZXIpOworCisJZHJtX2VuY29kZXJf Y2xlYW51cChlbmNvZGVyKTsKKwlrZnJlZShpbnRlbF9tc3QpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGludGVsX2RwX21zdF9lbmNfZnVuY3MgPSB7CisJLmRl c3Ryb3kgPSBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGJvb2wg aW50ZWxfZHBfbXN0X2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikgeworCQllbnVtIHBpcGUgcGlwZTsKKwkJ aWYgKCFjb25uZWN0b3ItPmVuY29kZXItPmdldF9od19zdGF0ZShjb25uZWN0b3ItPmVuY29kZXIs ICZwaXBlKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICppbnRlbF9kcF9hZGRfbXN0 X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydCwgY2hhciAqcGF0aHByb3ApCit7CisJc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCA9IGNvbnRhaW5lcl9vZihtZ3IsIHN0cnVjdCBpbnRlbF9kcCwgbXN0X21ncik7 CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RpZ19wb3J0 LT5iYXNlLmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9y OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGk7CisKKwlpbnRlbF9j b25uZWN0b3IgPSBremFsbG9jKHNpemVvZigqaW50ZWxfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFpbnRlbF9jb25uZWN0b3IpCisJCXJldHVybiBOVUxMOworCisJY29ubmVjdG9yID0g JmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0 b3IsICZpbnRlbF9kcF9tc3RfY29ubmVjdG9yX2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfRGlz cGxheVBvcnQpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZpbnRlbF9k cF9tc3RfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlpbnRlbF9jb25uZWN0b3ItPnVucmVn aXN0ZXIgPSBpbnRlbF9jb25uZWN0b3JfdW5yZWdpc3RlcjsKKwlpbnRlbF9jb25uZWN0b3ItPmdl dF9od19zdGF0ZSA9IGludGVsX2RwX21zdF9nZXRfaHdfc3RhdGU7CisJaW50ZWxfY29ubmVjdG9y LT5tc3RfcG9ydCA9IGludGVsX2RwOworCWludGVsX2Nvbm5lY3Rvci0+cG9ydCA9IHBvcnQ7CisK Kwlmb3IgKGkgPSBQSVBFX0E7IGkgPD0gUElQRV9DOyBpKyspIHsKKwkJZHJtX21vZGVfY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKCZpbnRlbF9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkgICZpbnRl bF9kcC0+bXN0X2VuY29kZXJzW2ldLT5iYXNlLmJhc2UpOworCX0KKwlpbnRlbF9kcF9hZGRfcHJv cGVydGllcyhpbnRlbF9kcCwgY29ubmVjdG9yKTsKKworCWRybV9vYmplY3RfYXR0YWNoX3Byb3Bl cnR5KCZjb25uZWN0b3ItPmJhc2UsIGRldi0+bW9kZV9jb25maWcucGF0aF9wcm9wZXJ0eSwgMCk7 CisJZHJtX21vZGVfY29ubmVjdG9yX3NldF9wYXRoX3Byb3BlcnR5KGNvbm5lY3RvciwgcGF0aHBy b3ApOworCWRybV9yZWluaXRfcHJpbWFyeV9tb2RlX2dyb3VwKGRldik7CisJbXV0ZXhfbG9jaygm ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5lY3Rv cigmZGV2X3ByaXYtPmZiZGV2LT5oZWxwZXIsIGNvbm5lY3Rvcik7CisJbXV0ZXhfdW5sb2NrKCZk ZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZCgmaW50ZWxf Y29ubmVjdG9yLT5iYXNlKTsKKwlyZXR1cm4gY29ubmVjdG9yOworfQorCitzdGF0aWMgdm9pZCBp bnRlbF9kcF9kZXN0cm95X21zdF9jb25uZWN0b3Ioc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsCisJCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ c3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxfY29ubmVj dG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2 OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJLyogbmVlZCB0byBudWtlIHRoZSBjb25uZWN0b3IgKi8KKwltdXRleF9sb2NrKCZkZXYtPm1v ZGVfY29uZmlnLm11dGV4KTsKKwlpbnRlbF9jb25uZWN0b3JfZHBtcyhjb25uZWN0b3IsIERSTV9N T0RFX0RQTVNfT0ZGKTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwor CisJaW50ZWxfY29ubmVjdG9yLT51bnJlZ2lzdGVyKGludGVsX2Nvbm5lY3Rvcik7CisKKwltdXRl eF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1fZmJfaGVscGVyX3JlbW92ZV9v bmVfY29ubmVjdG9yKCZkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlciwgY29ubmVjdG9yKTsKKwlkcm1f Y29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9j b25maWcubXV0ZXgpOworCisJZHJtX3JlaW5pdF9wcmltYXJ5X21vZGVfZ3JvdXAoZGV2KTsKKwor CWtmcmVlKGludGVsX2Nvbm5lY3Rvcik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKK30KKworc3Rh dGljIHZvaWQgaW50ZWxfZHBfbXN0X2hvdHBsdWcoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGNvbnRhaW5lcl9vZiht Z3IsIHN0cnVjdCBpbnRlbF9kcCwgbXN0X21ncik7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UuZGV2OworCisJZHJtX2tt c19oZWxwZXJfaG90cGx1Z19ldmVudChkZXYpOworfQorCitzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9jYnMgbXN0X2NicyA9IHsKKwkuYWRkX2Nvbm5lY3RvciA9IGludGVsX2RwX2FkZF9tc3Rf Y29ubmVjdG9yLAorCS5kZXN0cm95X2Nvbm5lY3RvciA9IGludGVsX2RwX2Rlc3Ryb3lfbXN0X2Nv bm5lY3RvciwKKwkuaG90cGx1ZyA9IGludGVsX2RwX21zdF9ob3RwbHVnLAorfTsKKworc3RhdGlj IHN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqCitpbnRlbF9kcF9jcmVhdGVfZmFrZV9tc3Rf ZW5jb2RlcihzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgZW51bSBw aXBlIHBpcGUpCit7CisJc3RydWN0IGludGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3Q7CisJ c3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXI7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UuZGV2OworCisJaW50ZWxfbXN0ID0ga3ph bGxvYyhzaXplb2YoKmludGVsX21zdCksIEdGUF9LRVJORUwpOworCisJaWYgKCFpbnRlbF9tc3Qp CisJCXJldHVybiBOVUxMOworCisJaW50ZWxfbXN0LT5waXBlID0gcGlwZTsKKwlpbnRlbF9lbmNv ZGVyID0gJmludGVsX21zdC0+YmFzZTsKKwlpbnRlbF9tc3QtPnByaW1hcnkgPSBpbnRlbF9kaWdf cG9ydDsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmaW50ZWxfZW5jb2Rlci0+YmFzZSwgJmlu dGVsX2RwX21zdF9lbmNfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9EUE1TVCk7CisKKwlp bnRlbF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RQX01TVDsKKwlpbnRlbF9lbmNvZGVy LT5jcnRjX21hc2sgPSAweDc7CisJaW50ZWxfZW5jb2Rlci0+Y2xvbmVhYmxlID0gMDsKKworCWlu dGVsX2VuY29kZXItPmNvbXB1dGVfY29uZmlnID0gaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmln OworCWludGVsX2VuY29kZXItPm1vZGVfc2V0ID0gaW50ZWxfZHBfbXN0X21vZGVfc2V0OworCWlu dGVsX2VuY29kZXItPmRpc2FibGUgPSBpbnRlbF9tc3RfZGlzYWJsZV9kcDsKKwlpbnRlbF9lbmNv ZGVyLT5wb3N0X2Rpc2FibGUgPSBpbnRlbF9tc3RfcG9zdF9kaXNhYmxlX2RwOworCWludGVsX2Vu Y29kZXItPnByZV9lbmFibGUgPSBpbnRlbF9tc3RfcHJlX2VuYWJsZV9kcDsKKwlpbnRlbF9lbmNv ZGVyLT5lbmFibGUgPSBpbnRlbF9tc3RfZW5hYmxlX2RwOworCWludGVsX2VuY29kZXItPmdldF9o d19zdGF0ZSA9IGludGVsX2RwX21zdF9lbmNfZ2V0X2h3X3N0YXRlOworCWludGVsX2VuY29kZXIt PmdldF9jb25maWcgPSBpbnRlbF9kcF9tc3RfZW5jX2dldF9jb25maWc7CisKKwlyZXR1cm4gaW50 ZWxfbXN0OworCit9CisKK3N0YXRpYyBib29sCitpbnRlbF9kcF9jcmVhdGVfZmFrZV9tc3RfZW5j b2RlcnMoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCit7CisJaW50 IGk7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9kaWdfcG9ydC0+ZHA7CisK Kwlmb3IgKGkgPSBQSVBFX0E7IGkgPD0gUElQRV9DOyBpKyspCisJCWludGVsX2RwLT5tc3RfZW5j b2RlcnNbaV0gPSBpbnRlbF9kcF9jcmVhdGVfZmFrZV9tc3RfZW5jb2RlcihpbnRlbF9kaWdfcG9y dCwgaSk7CisJcmV0dXJuIHRydWU7Cit9CisKK2ludAoraW50ZWxfZHBfbXN0X2VuY29kZXJfaW5p dChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgaW50IGNvbm5fYmFz ZV9pZCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gJmludGVsX2RpZ19wb3J0LT5k cDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5k ZXY7CisJaW50IHJldDsKKworCWludGVsX2RwLT5jYW5fbXN0ID0gdHJ1ZTsKKwlpbnRlbF9kcC0+ bXN0X21nci5jYnMgPSAmbXN0X2NiczsKKworCS8qIGNyZWF0ZSBlbmNvZGVycyAqLworCWludGVs X2RwX2NyZWF0ZV9mYWtlX21zdF9lbmNvZGVycyhpbnRlbF9kaWdfcG9ydCk7CisJcmV0ID0gZHJt X2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdCgmaW50ZWxfZHAtPm1zdF9tZ3IsIGRldi0+ZGV2LCAm aW50ZWxfZHAtPmF1eCwgMTYsIDMsIGNvbm5fYmFzZV9pZCk7CisJaWYgKHJldCkgeworCQlpbnRl bF9kcC0+Y2FuX21zdCA9IGZhbHNlOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30K Kwordm9pZAoraW50ZWxfZHBfbXN0X2VuY29kZXJfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICppbnRlbF9kaWdfcG9ydCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g JmludGVsX2RpZ19wb3J0LT5kcDsKKworCWlmICghaW50ZWxfZHAtPmNhbl9tc3QpCisJCXJldHVy bjsKKworCWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2Rlc3Ryb3koJmludGVsX2RwLT5tc3RfbWdy KTsKKwkvKiBlbmNvZGVycyB3aWxsIGdldCBraWxsZWQgYnkgbm9ybWFsIGNsZWFudXAgKi8KK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggOGU0MWNkYy4uZTdmY2Q2YyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZHBfbXN0X2hlbHBlci5oPgogCiAvKioKICAqIF93YWl0X2ZvciAtIG1hZ2ljIChy ZWdpc3Rlcikgd2FpdCBtYWNybwpAQCAtMTAwLDYgKzEwMCw3IEBACiAjZGVmaW5lIElOVEVMX09V VFBVVF9FRFAgOAogI2RlZmluZSBJTlRFTF9PVVRQVVRfRFNJIDkKICNkZWZpbmUgSU5URUxfT1VU UFVUX1VOS05PV04gMTAKKyNkZWZpbmUgSU5URUxfT1VUUFVUX0RQX01TVCAxMQogCiAjZGVmaW5l IElOVEVMX0RWT19DSElQX05PTkUgMAogI2RlZmluZSBJTlRFTF9EVk9fQ0hJUF9MVkRTIDEKQEAg LTIwNyw2ICsyMDgsMTAgQEAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7CiAJLyogc2luY2UgUE9M TCBhbmQgSFBEIGNvbm5lY3RvcnMgbWF5IHVzZSB0aGUgc2FtZSBIUEQgbGluZSBrZWVwIHRoZSBu YXRpdmUKIAkgICBzdGF0ZSBvZiBjb25uZWN0b3ItPnBvbGxlZCBpbiBjYXNlIGhvdHBsdWcgc3Rv cm0gZGV0ZWN0aW9uIGNoYW5nZXMgaXQgKi8KIAl1OCBwb2xsZWQ7CisKKwl2b2lkICpwb3J0OyAv KiBzdG9yZSB0aGlzIG9wYXF1ZSBhcyBpdHMgaWxsZWdhbCB0byBkZXJlZmVyZW5jZSBpdCAqLwor CisJc3RydWN0IGludGVsX2RwICptc3RfcG9ydDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IGRwbGwg ewpAQCAtMzQwLDYgKzM0NSw5IEBAIHN0cnVjdCBpbnRlbF9jcnRjX2NvbmZpZyB7CiAJYm9vbCBp cHNfZW5hYmxlZDsKIAogCWJvb2wgZG91YmxlX3dpZGU7CisKKwlib29sIGRwX2VuY29kZXJfaXNf bXN0OworCWludCBwYm47CiB9OwogCiBzdHJ1Y3QgaW50ZWxfcGlwZV93bSB7CkBAIC00ODcsNiAr NDk1LDcgQEAgc3RydWN0IGludGVsX2hkbWkgewogCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICphZGp1c3RlZF9tb2RlKTsKIH07CiAKK3N0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2Rl cjsKICNkZWZpbmUgRFBfTUFYX0RPV05TVFJFQU1fUE9SVFMJCTB4MTAKIAogLyoqCkBAIC01Mjcs OCArNTM2LDE3IEBAIHN0cnVjdCBpbnRlbF9kcCB7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2JhY2ts aWdodF9vZmY7CiAJYm9vbCBwc3Jfc2V0dXBfZG9uZTsKIAlib29sIHVzZV90cHMzOworCWJvb2wg Y2FuX21zdDsgLyogdGhpcyBwb3J0IHN1cHBvcnRzIG1zdCAqLworCWJvb2wgaXNfbXN0OworCWlu dCBhY3RpdmVfbXN0X2xpbmtzOworCS8qIGNvbm5lY3RvciBkaXJlY3RseSBhdHRhY2hlZCAtIHdv bid0IGJlIHVzZSBmb3IgbW9kZXNldCBpbiBtc3Qgd29ybGQgKi8KIAlzdHJ1Y3QgaW50ZWxfY29u bmVjdG9yICphdHRhY2hlZF9jb25uZWN0b3I7CiAKKwkvKiBtc3QgY29ubmVjdG9yIGxpc3QgKi8K KwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICptc3RfY29ubmVjdG9yczsKKwlzdHJ1Y3QgaW50ZWxf ZHBfbXN0X2VuY29kZXIgKm1zdF9lbmNvZGVyc1tJOTE1X01BWF9QSVBFU107CisJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyIG1zdF9tZ3I7CisKIAl1aW50MzJfdCAoKmdldF9hdXhfY2xv Y2tfZGl2aWRlcikoc3RydWN0IGludGVsX2RwICpkcCwgaW50IGluZGV4KTsKIAkvKgogCSAqIFRo aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgd2UgaGF2ZSB0byBwcm9ncmFtIHRoZSBBVVhf Q1RMCkBAIC01NTQsNiArNTcyLDEzIEBAIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgewogCXN0 cnVjdCBpbnRlbF9oZG1pIGhkbWk7CiB9OwogCitzdHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIg eworCXN0cnVjdCBpbnRlbF9lbmNvZGVyIGJhc2U7CisJZW51bSBwaXBlIHBpcGU7CisJc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqcHJpbWFyeTsKKwl2b2lkICpwb3J0OyAvKiBzdG9yZSB0aGlz IG9wYXF1ZSBhcyBpdHMgaWxsZWdhbCB0byBkZXJlZmVyZW5jZSBpdCAqLworfTsKKwogc3RhdGlj IGlubGluZSBpbnQKIHZsdl9kcG9ydF90b19jaGFubmVsKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmRwb3J0KQogewpAQCAtNjIxLDYgKzY0NiwxMiBAQCBlbmNfdG9fZGlnX3BvcnQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQogCXJldHVybiBjb250YWluZXJfb2YoZW5jb2Rlciwgc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCwgYmFzZS5iYXNlKTsKIH0KIAorc3RhdGljIGlubGluZSBz dHJ1Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKgorZW5jX3RvX21zdChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3QgaW50 ZWxfZHBfbXN0X2VuY29kZXIsIGJhc2UuYmFzZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0 IGludGVsX2RwICplbmNfdG9faW50ZWxfZHAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQog ewogCXJldHVybiAmZW5jX3RvX2RpZ19wb3J0KGVuY29kZXIpLT5kcDsKQEAgLTY4NCw2ICs3MTUs MTAgQEAgdm9pZCBpbnRlbF9kZGlfZ2V0X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKIAkJCSAgc3RydWN0IGludGVsX2NydGNfY29uZmlnICpwaXBlX2NvbmZpZyk7CiAKIHZv aWQgaW50ZWxfZGRpX21vZGVfc2V0X2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsK K3ZvaWQgaW50ZWxfZGRpX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK KwkJCSBzdHJ1Y3QgaW50ZWxfY3J0Y19jb25maWcgKnBpcGVfY29uZmlnKTsKK3ZvaWQgaW50ZWxf ZGRpX2ZvcmNlX2FjdChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwgYm9vbCBzdGF0ZSk7 Cit2b2lkIGludGVsX2RkaV9zZXRfdmNfcGF5bG9hZF9hbGxvYyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIGJvb2wgc3RhdGUpOwogCiAvKiBpbnRlbF9kaXNwbGF5LmMgKi8KIGNvbnN0IGNoYXIgKmlu dGVsX291dHB1dF9uYW1lKGludCBvdXRwdXQpOwpAQCAtODAwLDYgKzgzNSwxNCBAQCB2b2lkIGlu dGVsX2VkcF9wc3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIHZvaWQgaW50 ZWxfZWRwX3Bzcl91cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGludGVsX2Rw X3NldF9kcnJzX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZWZyZXNoX3JhdGUp OwogCitpbnQgaW50ZWxfZHBfaGFuZGxlX2hwZF9pcnEoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqZGlncG9ydCwgYm9vbCBsb25nX2hwZCk7Cit2b2lkIGludGVsX2RwX2FkZF9wcm9wZXJ0aWVz KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpOwordm9pZCBpbnRlbF9kcF9tc3Rfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK K3ZvaWQgaW50ZWxfZHBfbXN0X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyog aW50ZWxfZHBfbXN0LmMgKi8KK2ludCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBpbnQgY29ubl9pZCk7Cit2b2lkIGlu dGVsX2RwX21zdF9lbmNvZGVyX2NsZWFudXAoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50 ZWxfZGlnX3BvcnQpOwogLyogaW50ZWxfZHNpLmMgKi8KIGJvb2wgaW50ZWxfZHNpX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCmluZGV4 IGZjZTRhMGQuLjc0Y2FlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2ZiZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwpAQCAtMzQ5 LDYgKzM0OSwxMSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9mYl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQl9CiAKIAkJZW5jb2RlciA9IGNvbm5lY3Rvci0+ ZW5jb2RlcjsKKwkJaWYgKCFlbmNvZGVyKSB7CisJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgKmNvbm5lY3Rvcl9mdW5jczsKKwkJCWNvbm5lY3Rvcl9mdW5jcyA9IGNvbm5lY3Rv ci0+aGVscGVyX3ByaXZhdGU7CisJCQllbmNvZGVyID0gY29ubmVjdG9yX2Z1bmNzLT5iZXN0X2Vu Y29kZXIoY29ubmVjdG9yKTsKKwkJfQogCQlpZiAoIWVuY29kZXIgfHwgV0FSTl9PTighZW5jb2Rl ci0+Y3J0YykpIHsKIAkJCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlZCBoYXMgbm8gZW5jb2Rl ciBvciBjcnRjLCBza2lwcGluZ1xuIiwKIAkJCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKaW5kZXggYWNkZTI5NC4uYmNlNjZiMiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCkBAIC0zNTIsNiArMzUyLDcgQEAg aW50IGludGVsX29wcmVnaW9uX25vdGlmeV9lbmNvZGVyKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpp bnRlbF9lbmNvZGVyLAogCWNhc2UgSU5URUxfT1VUUFVUX1VOS05PV046CiAJY2FzZSBJTlRFTF9P VVRQVVRfRElTUExBWVBPUlQ6CiAJY2FzZSBJTlRFTF9PVVRQVVRfSERNSToKKwljYXNlIElOVEVM X09VVFBVVF9EUF9NU1Q6CiAJCXR5cGUgPSBESVNQTEFZX1RZUEVfRVhURVJOQUxfRkxBVF9QQU5F TDsKIAkJYnJlYWs7CiAJY2FzZSBJTlRFTF9PVVRQVVRfRURQOgotLSAKMS45LjAKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==