From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Gaignard Subject: [RFC v3 3/3] drm: allow to use mmuless SoC Date: Wed, 30 Nov 2016 20:34:19 +0100 Message-ID: <1480534459-7239-4-git-send-email-benjamin.gaignard@linaro.org> References: <1480534459-7239-1-git-send-email-benjamin.gaignard@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22b.google.com (mail-wm0-x22b.google.com [IPv6:2a00:1450:400c:c09::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7E7A6E42A for ; Wed, 30 Nov 2016 19:34:38 +0000 (UTC) Received: by mail-wm0-x22b.google.com with SMTP id c184so55613147wmd.0 for ; Wed, 30 Nov 2016 11:34:38 -0800 (PST) In-Reply-To: <1480534459-7239-1-git-send-email-benjamin.gaignard@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, airlied@redhat.com, daniel@ffwll.ch, robdclark@gmail.com, laurent.pinchart@ideasonboard.com Cc: yannick.fertre@st.com, linaro-kernel@lists.linaro.org, philippe.cornu@st.com List-Id: dri-devel@lists.freedesktop.org U29tZSBwbGF0Zm9ybXMgd2l0aG91dCBNTVUgaGF2ZSBkaXNwbGF5IGRyaXZlciB3aGVyZSBhIGRy bS9rbXMKZHJpdmVyIGNvdWxkIGJlIGltcGxlbWVudGVkLgoKVG8gZG9pbmcgdGhhdCB0aGlzIHBh dGNoIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvZiBEUk0gb24gTU1VCmNvbmZpZ3VyYXRpb24gZmxh Zy4KCk1NVSBjb25maWd1cmF0aW9uIGZsYWcgbWlncmF0ZSB0byBEUk1fVFRNLCBEUk1fR0VNX0NN QV9IRUxQRVIgYW5kCkRSTV9LTVNfQ01BX0hFTFBFUi4KClNpbmNlIE1NVWxlc3MgcGxhdGZvcm0g d2lsbCBuZWVkIGNvbnRpZ3VvdXMgbWVtb3J5IGl0IGR1cGxpY2F0ZQpjbWEgaGVscGVycyBmaWxl cyB3aXRoICJfbm9tbXUiIHN1ZmZpeC4KTWFpbiBjaGFuZ2VzIGFyZSB0aGUgdXNhZ2Ugb2Ygdm1f aW9tYXBfbWVtb3J5IGluc3RlYWQgb2YgZG1hX21tYXBfd2MuCgpEUk1fR0VNX0NNQV9IRUxQRVIg YW5kIERSTV9LTVNfQ01BX0hFTFBFUiBhcmUgZHVwbGljYXRlZCBpbnRvCkRSTV9HRU1fQ01BX0hF TFBFUl9OT01NVSBhbmQgRFJNX0tNU19DTUFfSEVMUEVSX05PTU1VIHRvIHNlbGVjdAp0aGUgY29y cmVjdCBmaWxlcyB0byBjb21waWxlLgoKU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gR2FpZ25hcmQg PGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mYl9jbWFfaGVs cGVyX25vbW11LmMgIHwgNjQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyX25vbW11LmMgfCA1NzQgKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmggICAgICAgICAgIHwg ICA4ICsKIDUgZmlsZXMgY2hhbmdlZCwgMTI1NSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlcl9u b21tdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hl bHBlcl9ub21tdS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCAzODM5ODljLi44MWM3ZTYwIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAt Niw3ICs2LDcgQEAKICMKIG1lbnVjb25maWcgRFJNCiAJdHJpc3RhdGUgIkRpcmVjdCBSZW5kZXJp bmcgTWFuYWdlciAoWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyIERSSSBzdXBwb3J0KSIKLQlkZXBl bmRzIG9uIChBR1AgfHwgQUdQPW4pICYmICFFTVVMQVRFRF9DTVBYQ0hHICYmIE1NVSAmJiBIQVNf RE1BCisJZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiAhRU1VTEFURURfQ01QWENIRyAmJiBI QVNfRE1BCiAJc2VsZWN0IEhETUkKIAlzZWxlY3QgRkJfQ01ETElORQogCXNlbGVjdCBJMkMKQEAg LTk4LDcgKzk4LDcgQEAgY29uZmlnIERSTV9MT0FEX0VESURfRklSTVdBUkUKIAogY29uZmlnIERS TV9UVE0KIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBEUk0gJiYgTU1V CiAJaGVscAogCSAgR1BVIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBmb3IgZGV2aWNlcyB3 aXRoIG11bHRpcGxlCiAJICBHUFUgbWVtb3J5IHR5cGVzLiBXaWxsIGJlIGVuYWJsZWQgYXV0b21h dGljYWxseSBpZiBhIGRldmljZSBkcml2ZXIKQEAgLTEwNiwxMyArMTA2LDEzIEBAIGNvbmZpZyBE Uk1fVFRNCiAKIGNvbmZpZyBEUk1fR0VNX0NNQV9IRUxQRVIKIAlib29sCi0JZGVwZW5kcyBvbiBE Uk0KKwlkZXBlbmRzIG9uIERSTSAmJiBNTVUKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBpZiB5b3Ug bmVlZCB0aGUgR0VNIENNQSBoZWxwZXIgZnVuY3Rpb25zCiAKIGNvbmZpZyBEUk1fS01TX0NNQV9I RUxQRVIKIAlib29sCi0JZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIERSTSAmJiBNTVUKIAlz ZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCiAJc2VsZWN0IERSTV9LTVNfRkJfSEVMUEVSCiAJc2Vs ZWN0IEZCX1NZU19GSUxMUkVDVApAQCAtMTIxLDYgKzEyMSwyNSBAQCBjb25maWcgRFJNX0tNU19D TUFfSEVMUEVSCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhlIEtNUyBDTUEg aGVscGVyIGZ1bmN0aW9ucwogCitjb25maWcgRFJNX0dFTV9DTUFfSEVMUEVSX05PTU1VCisJYm9v bAorCWRlcGVuZHMgb24gRFJNICYmICFNTVUKKwloZWxwCisJICBDaG9vc2UgdGhpcyBpZiB5b3Ug bmVlZCB0aGUgR0VNIENNQSBoZWxwZXIgZnVuY3Rpb25zCisJICBmb3IgcGxhdGZvcm1zIHdpdGhv dXQgTU1VCisKK2NvbmZpZyBEUk1fS01TX0NNQV9IRUxQRVJfTk9NTVUKKwlib29sCisJZGVwZW5k cyBvbiBEUk0gJiYgIU1NVQorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVJfTk9NTVUKKwlzZWxl Y3QgRFJNX0tNU19GQl9IRUxQRVIKKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNUCisJc2VsZWN0IEZC X1NZU19DT1BZQVJFQQorCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJaGVscAorCSAgQ2hvb3Nl IHRoaXMgaWYgeW91IG5lZWQgdGhlIEtNUyBDTUEgaGVscGVyIGZ1bmN0aW9ucworCSAgZm9yIHBs YXRmb3JtcyB3aXRob3V0IE1NVQorCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZp ZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWciCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXgg NWI3M2IxNi4uYTI5NjIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQCBkcm0teSAgICAg ICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAogZHJtLSQoQ09ORklHX0RS TV9WTSkgKz0gZHJtX3ZtLm8KIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCiBk cm0tJChDT05GSUdfRFJNX0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubwor ZHJtLSQoQ09ORklHX0RSTV9HRU1fQ01BX0hFTFBFUl9OT01NVSkgKz0gZHJtX2dlbV9jbWFfaGVs cGVyX25vbW11Lm8KIGRybS0kKENPTkZJR19QQ0kpICs9IGF0aV9wY2lnYXJ0Lm8KIGRybS0kKENP TkZJR19EUk1fUEFORUwpICs9IGRybV9wYW5lbC5vCiBkcm0tJChDT05GSUdfT0YpICs9IGRybV9v Zi5vCkBAIC0zNSw2ICszNiw3IEBAIGRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVy Lm8gZHJtX2RwX2hlbHBlci5vIGRybV9wcm9iZV9oZWxwZXIubyBcCiBkcm1fa21zX2hlbHBlci0k KENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFKSArPSBkcm1fZWRpZF9sb2FkLm8KIGRybV9r bXNfaGVscGVyLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IGRybV9mYl9oZWxwZXIu bwogZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBkcm1fZmJf Y21hX2hlbHBlci5vCitkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fS01TX0NNQV9IRUxQRVJf Tk9NTVUpICs9IGRybV9mYl9jbWFfaGVscGVyX25vbW11Lm8KIGRybV9rbXNfaGVscGVyLSQoQ09O RklHX0RSTV9EUF9BVVhfQ0hBUkRFVikgKz0gZHJtX2RwX2F1eF9kZXYubwogCiBvYmotJChDT05G SUdfRFJNX0tNU19IRUxQRVIpICs9IGRybV9rbXNfaGVscGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlcl9ub21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYl9jbWFfaGVscGVyX25vbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYjU2ODc0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21h X2hlbHBlcl9ub21tdS5jCkBAIC0wLDAgKzEsNjQ4IEBACisvKgorICogZHJtIGttcy9mYiBjbWEg KGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRvcikgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENv cHlyaWdodCAoQykgMjAxMiBBbmFsb2cgRGV2aWNlIEluYy4KKyAqICAgQXV0aG9yOiBMYXJzLVBl dGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCisgKiBCYXNlZCBvbiB1ZGxfZmJkZXYu YworICogIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0CisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0 Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgor I2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KKworI2RlZmluZSBERUZBVUxUX0ZCREVG SU9fREVMQVlfTVMgNTAKKworc3RydWN0IGRybV9mYl9jbWEgeworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIJCWZiOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QJKm9ials0XTsKK307CisKK3N0 cnVjdCBkcm1fZmJkZXZfY21hIHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcglmYl9oZWxwZXI7CisJ c3RydWN0IGRybV9mYl9jbWEJKmZiOworfTsKKworLyoqCisgKiBET0M6IGZyYW1lYnVmZmVyIGNt YSBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogUHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig Y3JlYXRpbmcgYSBjbWEgKGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRvcikKKyAqIGJhY2tlZCBm cmFtZWJ1ZmZlci4KKyAqCisgKiBkcm1fZmJfY21hX2NyZWF0ZSgpIGlzIHVzZWQgaW4gdGhlICZk cm1fbW9kZV9jb25maWdfZnVuY3MgLT5mYl9jcmVhdGUKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRv IGNyZWF0ZSBhIGNtYSBiYWNrZWQgZnJhbWVidWZmZXIuCisgKgorICogQW4gZmJkZXYgZnJhbWVi dWZmZXIgYmFja2VkIGJ5IGNtYSBpcyBhbHNvIGF2YWlsYWJsZSBieSBjYWxsaW5nCisgKiBkcm1f ZmJkZXZfY21hX2luaXQoKS4gZHJtX2ZiZGV2X2NtYV9maW5pKCkgdGVhcnMgaXQgZG93bi4KKyAq IElmIHRoZSAmZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIC0+ZGlydHkgY2FsbGJhY2sgaXMgc2V0LCBm Yl9kZWZlcnJlZF9pbworICogd2lsbCBiZSBzZXQgdXAgYXV0b21hdGljYWxseS4gZGlydHkoKSBp cyBjYWxsZWQgYnkKKyAqIGRybV9mYl9oZWxwZXJfZGVmZXJyZWRfaW8oKSBpbiBwcm9jZXNzIGNv bnRleHQgKHN0cnVjdCBkZWxheWVkX3dvcmspLgorICoKKyAqIEV4YW1wbGUgZmJkZXYgZGVmZXJy ZWQgaW8gY29kZTo6CisgKgorICogICAgIHN0YXRpYyBpbnQgZHJpdmVyX2ZiZGV2X2ZiX2RpcnR5 KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcHMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbnVtX2NsaXBzKQorICogICAgIHsKKyAqICAgICAgICAgc3RydWN0IGRybV9nZW1fY21h X29iamVjdCAqY21hID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisgKiAgICAgICAg IC4uLiBwdXNoIGNoYW5nZXMgLi4uCisgKiAgICAgICAgIHJldHVybiAwOworICogICAgIH0KKyAq CisgKiAgICAgc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgZHJpdmVyX2ZiZGV2 X2ZiX2Z1bmNzID0geworICogICAgICAgICAuZGVzdHJveSAgICAgICA9IGRybV9mYl9jbWFfZGVz dHJveSwKKyAqICAgICAgICAgLmNyZWF0ZV9oYW5kbGUgPSBkcm1fZmJfY21hX2NyZWF0ZV9oYW5k bGUsCisgKiAgICAgICAgIC5kaXJ0eSAgICAgICAgID0gZHJpdmVyX2ZiZGV2X2ZiX2RpcnR5LAor ICogICAgIH07CisgKgorICogICAgIHN0YXRpYyBpbnQgZHJpdmVyX2ZiZGV2X2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAorICogICAgICAgICAgICAgc3RydWN0IGRybV9mYl9o ZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcykKKyAqICAgICB7CisgKiAgICAgICAgIHJldHVybiBk cm1fZmJkZXZfY21hX2NyZWF0ZV93aXRoX2Z1bmNzKGhlbHBlciwgc2l6ZXMsCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcml2ZXJfZmJkZXZfZmJf ZnVuY3MpOworICogICAgIH0KKyAqCisgKiAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZmJf aGVscGVyX2Z1bmNzIGRyaXZlcl9mYl9oZWxwZXJfZnVuY3MgPSB7CisgKiAgICAgICAgIC5mYl9w cm9iZSA9IGRyaXZlcl9mYmRldl9jcmVhdGUsCisgKiAgICAgfTsKKyAqCisgKiAgICAgSW5pdGlh bGl6ZToKKyAqICAgICBmYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNzKGRldiwg MTYsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm1v ZGVfY29uZmlnLm51bV9jcnRjLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRyaXZlcl9mYl9oZWxwZXJfZnVuY3MpOwor ICoKKyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZmJkZXZfY21hICp0b19mYmRldl9j bWEoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KGhlbHBlciwgc3RydWN0IGRybV9mYmRldl9jbWEsIGZiX2hlbHBlcik7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9mYl9jbWEgKnRvX2ZiX2NtYShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZiLCBzdHJ1Y3QgZHJtX2ZiX2NtYSwgZmIp OworfQorCit2b2lkIGRybV9mYl9jbWFfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2NtYSAqZmJfY21hID0gdG9fZmJfY21hKGZiKTsKKwlpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGZiX2NtYS0+b2JqW2ldKQor CQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmZiX2NtYS0+b2JqW2ldLT5i YXNlKTsKKwl9CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7CisJa2ZyZWUoZmJfY21h KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2NtYV9kZXN0cm95KTsKKworaW50IGRybV9mYl9j bWFfY3JlYXRlX2hhbmRsZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwgdW5zaWduZWQgaW50ICpoYW5kbGUpCit7CisJc3RydWN0IGRybV9m Yl9jbWEgKmZiX2NtYSA9IHRvX2ZiX2NtYShmYik7CisKKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVf Y3JlYXRlKGZpbGVfcHJpdiwKKwkJCSZmYl9jbWEtPm9ialswXS0+YmFzZSwgaGFuZGxlKTsKK30K K0VYUE9SVF9TWU1CT0woZHJtX2ZiX2NtYV9jcmVhdGVfaGFuZGxlKTsKKworc3RhdGljIHN0cnVj dCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgZHJtX2ZiX2NtYV9mdW5jcyA9IHsKKwkuZGVzdHJveQk9 IGRybV9mYl9jbWFfZGVzdHJveSwKKwkuY3JlYXRlX2hhbmRsZQk9IGRybV9mYl9jbWFfY3JlYXRl X2hhbmRsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2NtYSAqZHJtX2ZiX2NtYV9hbGxv YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICptb2RlX2NtZCwKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICoqb2JqLAorCXVuc2lnbmVk IGludCBudW1fcGxhbmVzLCBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmdW5j cykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2NtYSAqZmJfY21hOworCWludCByZXQ7CisJaW50IGk7CisK KwlmYl9jbWEgPSBremFsbG9jKHNpemVvZigqZmJfY21hKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFm Yl9jbWEpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZHJtX2hlbHBlcl9tb2RlX2Zp bGxfZmJfc3RydWN0KCZmYl9jbWEtPmZiLCBtb2RlX2NtZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg bnVtX3BsYW5lczsgaSsrKQorCQlmYl9jbWEtPm9ialtpXSA9IG9ialtpXTsKKworCXJldCA9IGRy bV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmZiX2NtYS0+ZmIsIGZ1bmNzKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlcjog JWRcbiIsIHJldCk7CisJCWtmcmVlKGZiX2NtYSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJ fQorCisJcmV0dXJuIGZiX2NtYTsKK30KKworLyoqCisgKiBkcm1fZmJfY21hX2NyZWF0ZV93aXRo X2Z1bmNzKCkgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmRybV9tb2RlX2NvbmZpZ19mdW5jcyAtPmZiX2NyZWF0ZQorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIEBkZXY6 IERSTSBkZXZpY2UKKyAqIEBmaWxlX3ByaXY6IGRybSBmaWxlIGZvciB0aGUgaW9jdGwgY2FsbAor ICogQG1vZGVfY21kOiBtZXRhZGF0YSBmcm9tIHRoZSB1c2Vyc3BhY2UgZmIgY3JlYXRpb24gcmVx dWVzdAorICogQGZ1bmNzOiB2dGFibGUgdG8gYmUgdXNlZCBmb3IgdGhlIG5ldyBmcmFtZWJ1ZmZl ciBvYmplY3QKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCAmZHJtX2ZyYW1lYnVmZmVy X2Z1bmNzIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0aGUKKyAqIGRpcnR5KCkgY2FsbGJhY2suIFVz ZSBkcm1fZmJfY21hX2NyZWF0ZSgpIGlmIHlvdSBkb24ndCBuZWVkIHRvIGNoYW5nZQorICogJmRy bV9mcmFtZWJ1ZmZlcl9mdW5jcy4KKyAqLworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2Zi X2NtYV9jcmVhdGVfd2l0aF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCXN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LCBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9j bWQsCisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAqZnVuY3MpCit7CisJY29u c3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZHJtX2ZiX2NtYSAqZmJf Y21hOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9ianNbNF07CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWluZm8gPSBkcm1fZm9ybWF0 X2luZm8obW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcGxhbmVzOyBpKysp IHsKKwkJdW5zaWduZWQgaW50IHdpZHRoID0gbW9kZV9jbWQtPndpZHRoIC8gKGkgPyBpbmZvLT5o c3ViIDogMSk7CisJCXVuc2lnbmVkIGludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0IC8gKGkg PyBpbmZvLT52c3ViIDogMSk7CisJCXVuc2lnbmVkIGludCBtaW5fc2l6ZTsKKworCQlvYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZV9wcml2LCBtb2RlX2NtZC0+aGFuZGxlc1tpXSk7CisJ CWlmICghb2JqKSB7CisJCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGxvb2t1cCBHRU0g b2JqZWN0XG4iKTsKKwkJCXJldCA9IC1FTlhJTzsKKwkJCWdvdG8gZXJyX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2U7CisJCX0KKworCQltaW5fc2l6ZSA9IChoZWlnaHQgLSAxKSAqIG1vZGVfY21kLT5w aXRjaGVzW2ldCisJCQkgKyB3aWR0aCAqIGluZm8tPmNwcFtpXQorCQkJICsgbW9kZV9jbWQtPm9m ZnNldHNbaV07CisKKwkJaWYgKG9iai0+c2l6ZSA8IG1pbl9zaXplKSB7CisJCQlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdv dG8gZXJyX2dlbV9vYmplY3RfdW5yZWZlcmVuY2U7CisJCX0KKwkJb2Jqc1tpXSA9IHRvX2RybV9n ZW1fY21hX29iaihvYmopOworCX0KKworCWZiX2NtYSA9IGRybV9mYl9jbWFfYWxsb2MoZGV2LCBt b2RlX2NtZCwgb2JqcywgaSwgZnVuY3MpOworCWlmIChJU19FUlIoZmJfY21hKSkgeworCQlyZXQg PSBQVFJfRVJSKGZiX2NtYSk7CisJCWdvdG8gZXJyX2dlbV9vYmplY3RfdW5yZWZlcmVuY2U7CisJ fQorCisJcmV0dXJuICZmYl9jbWEtPmZiOworCitlcnJfZ2VtX29iamVjdF91bnJlZmVyZW5jZToK Kwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu bG9ja2VkKCZvYmpzW2ldLT5iYXNlKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2ZiX2NtYV9jcmVhdGVfd2l0aF9mdW5jcyk7CisKKy8qKgorICogZHJt X2ZiX2NtYV9jcmVhdGUoKSAtICZkcm1fbW9kZV9jb25maWdfZnVuY3MgLT5mYl9jcmVhdGUgY2Fs bGJhY2sgZnVuY3Rpb24KKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBmaWxlX3ByaXY6IGRybSBm aWxlIGZvciB0aGUgaW9jdGwgY2FsbAorICogQG1vZGVfY21kOiBtZXRhZGF0YSBmcm9tIHRoZSB1 c2Vyc3BhY2UgZmIgY3JlYXRpb24gcmVxdWVzdAorICoKKyAqIElmIHlvdXIgaGFyZHdhcmUgaGFz IHNwZWNpYWwgYWxpZ25tZW50IG9yIHBpdGNoIHJlcXVpcmVtZW50cyB0aGVzZSBzaG91bGQgYmUK KyAqIGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVXNlIGRybV9mYl9jbWFf Y3JlYXRlX3dpdGhfZnVuY3MoKSBpZgorICogeW91IG5lZWQgdG8gc2V0ICZkcm1fZnJhbWVidWZm ZXJfZnVuY3MgLT5kaXJ0eS4KKyAqLworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2ZiX2Nt YV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQoreworCXJldHVy biBkcm1fZmJfY21hX2NyZWF0ZV93aXRoX2Z1bmNzKGRldiwgZmlsZV9wcml2LCBtb2RlX2NtZCwK KwkJCQkJICAgICZkcm1fZmJfY21hX2Z1bmNzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9m Yl9jbWFfY3JlYXRlKTsKKworLyoqCisgKiBkcm1fZmJfY21hX2dldF9nZW1fb2JqKCkgLSBHZXQg Q01BIEdFTSBvYmplY3QgZm9yIGZyYW1lYnVmZmVyCisgKiBAZmI6IFRoZSBmcmFtZWJ1ZmZlcgor ICogQHBsYW5lOiBXaGljaCBwbGFuZQorICoKKyAqIFJldHVybiB0aGUgQ01BIEdFTSBvYmplY3Qg Zm9yIGdpdmVuIGZyYW1lYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1c3VhbGx5 IGJlIGNhbGxlZCBmcm9tIHRoZSBDUlRDIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLworc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwKKwkJCQkJCSAgdW5zaWduZWQgaW50IHBsYW5lKQoreworCXN0cnVjdCBk cm1fZmJfY21hICpmYl9jbWEgPSB0b19mYl9jbWEoZmIpOworCisJaWYgKHBsYW5lID49IDQpCisJ CXJldHVybiBOVUxMOworCisJcmV0dXJuIGZiX2NtYS0+b2JqW3BsYW5lXTsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKGRybV9mYl9jbWFfZ2V0X2dlbV9vYmopOworCisvKioKKyAqIGRybV9mYl9jbWFf cHJlcGFyZV9mYigpIC0gUHJlcGFyZSBDTUEgZnJhbWVidWZmZXIKKyAqIEBwbGFuZTogV2hpY2gg cGxhbmUKKyAqIEBzdGF0ZTogUGxhbmUgc3RhdGUgYXR0YWNoIGZlbmNlIHRvCisgKgorICogVGhp cyBzaG91bGQgYmUgcHV0IGludG8gcHJlcGFyZV9mYiBob29rIG9mIHN0cnVjdCAmZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyAuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBsYW5l IEZCIGhhcyBhbiBkbWEtYnVmIGF0dGFjaGVkLCBleHRyYWN0cworICogdGhlIGV4Y2x1c2l2ZSBm ZW5jZSBhbmQgYXR0YWNoZXMgaXQgdG8gcGxhbmUgc3RhdGUgZm9yIHRoZSBhdG9taWMgaGVscGVy CisgKiB0byB3YWl0IG9uLgorICoKKyAqIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGNsZWFudXBfZmIg Zm9yIENNQSBiYXNlZCBmcmFtZWJ1ZmZlciBkcml2ZXJzLgorICovCitpbnQgZHJtX2ZiX2NtYV9w cmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZTsKKworCWlmICgocGxhbmUtPnN0YXRlLT5mYiA9PSBzdGF0ZS0+ZmIpIHx8 ICFzdGF0ZS0+ZmIpCisJCXJldHVybiAwOworCisJZG1hX2J1ZiA9IGRybV9mYl9jbWFfZ2V0X2dl bV9vYmooc3RhdGUtPmZiLCAwKS0+YmFzZS5kbWFfYnVmOworCWlmIChkbWFfYnVmKSB7CisJCWZl bmNlID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsX3JjdShkbWFfYnVmLT5yZXN2KTsKKwkJ ZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0YXRlLCBmZW5jZSk7CisJfQorCisJcmV0 dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZmJfY21hX3ByZXBhcmVfZmIpOworCisj aWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgdm9pZCBkcm1fZmJfY21hX2Rlc2NyaWJlKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0 IGRybV9mYl9jbWEgKmZiX2NtYSA9IHRvX2ZiX2NtYShmYik7CisJY29uc3Qgc3RydWN0IGRybV9m b3JtYXRfaW5mbyAqaW5mbzsKKwlpbnQgaTsKKworCXNlcV9wcmludGYobSwgImZiOiAlZHglZEAl NC40c1xuIiwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAorCQkJKGNoYXIgKikmZmItPnBpeGVsX2Zv cm1hdCk7CisKKwlpbmZvID0gZHJtX2Zvcm1hdF9pbmZvKGZiLT5waXhlbF9mb3JtYXQpOworCisJ Zm9yIChpID0gMDsgaSA8IGluZm8tPm51bV9wbGFuZXM7IGkrKykgeworCQlzZXFfcHJpbnRmKG0s ICIgICAlZDogb2Zmc2V0PSVkIHBpdGNoPSVkLCBvYmo6ICIsCisJCQkJaSwgZmItPm9mZnNldHNb aV0sIGZiLT5waXRjaGVzW2ldKTsKKwkJZHJtX2dlbV9jbWFfZGVzY3JpYmUoZmJfY21hLT5vYmpb aV0sIG0pOworCX0KK30KKworLyoqCisgKiBkcm1fZmJfY21hX2RlYnVnZnNfc2hvdygpIC0gSGVs cGVyIHRvIGxpc3QgQ01BIGZyYW1lYnVmZmVyIG9iamVjdHMKKyAqCQkJICAgICAgIGluIGRlYnVn ZnMuCisgKiBAbTogb3V0cHV0IGZpbGUKKyAqIEBhcmc6IHByaXZhdGUgZGF0YSBmb3IgdGhlIGNh bGxiYWNrCisgKi8KK2ludCBkcm1fZmJfY21hX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3Qg ZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBu b2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCisJbXV0ZXhf bG9jaygmZGV2LT5tb2RlX2NvbmZpZy5mYl9sb2NrKTsKKwlkcm1fZm9yX2VhY2hfZmIoZmIsIGRl dikKKwkJZHJtX2ZiX2NtYV9kZXNjcmliZShmYiwgbSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1v ZGVfY29uZmlnLmZiX2xvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChk cm1fZmJfY21hX2RlYnVnZnNfc2hvdyk7CisjZW5kaWYKKworc3RhdGljIGludCBkcm1fZmJfY21h X21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQor eworCXJldHVybiB2bV9pb21hcF9tZW1vcnkodm1hLCB2bWEtPnZtX3N0YXJ0LCBpbmZvLT5maXgu c21lbV9sZW4pOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBkcm1fZmJkZXZfY21hX29wcyA9 IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJRFJNX0ZCX0hFTFBFUl9ERUZBVUxUX09QUywK KwkuZmJfZmlsbHJlY3QJPSBkcm1fZmJfaGVscGVyX3N5c19maWxscmVjdCwKKwkuZmJfY29weWFy ZWEJPSBkcm1fZmJfaGVscGVyX3N5c19jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gZHJtX2Zi X2hlbHBlcl9zeXNfaW1hZ2VibGl0LAorCS5mYl9tbWFwCT0gZHJtX2ZiX2NtYV9tbWFwLAorfTsK Kworc3RhdGljIGludCBkcm1fZmJkZXZfY21hX2RlZmVycmVkX2lvX21tYXAoc3RydWN0IGZiX2lu Zm8gKmluZm8sCisJCQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJZmJfZGVm ZXJyZWRfaW9fbW1hcChpbmZvLCB2bWEpOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dy aXRlY29tYmluZSh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkcm1fZmJkZXZfY21hX2RlZmlvX2luaXQoc3RydWN0IGZiX2luZm8gKmZiaSwKKwkJCQkg ICAgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iaikKK3sKKwlzdHJ1Y3QgZmJfZGVm ZXJyZWRfaW8gKmZiZGVmaW87CisJc3RydWN0IGZiX29wcyAqZmJvcHM7CisKKwkvKgorCSAqIFBl ciBkZXZpY2Ugc3RydWN0dXJlcyBhcmUgbmVlZGVkIGJlY2F1c2U6CisJICogZmJvcHM6IGZiX2Rl ZmVycmVkX2lvX2NsZWFudXAoKSBjbGVhcnMgZmJvcHMuZmJfbW1hcAorCSAqIGZiZGVmaW86IGlu ZGl2aWR1YWwgZGVsYXlzCisJICovCisJZmJkZWZpbyA9IGt6YWxsb2Moc2l6ZW9mKCpmYmRlZmlv KSwgR0ZQX0tFUk5FTCk7CisJZmJvcHMgPSBremFsbG9jKHNpemVvZigqZmJvcHMpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWZiZGVmaW8gfHwgIWZib3BzKSB7CisJCWtmcmVlKGZiZGVmaW8pOworCQlr ZnJlZShmYm9wcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGNhbid0IGJlIG9mZnNl dCBmcm9tIHZhZGRyIHNpbmNlIGRpcnR5KCkgdXNlcyBjbWFfb2JqICovCisJZmJpLT5zY3JlZW5f YnVmZmVyID0gY21hX29iai0+dmFkZHI7CisJLyogZmJfZGVmZXJyZWRfaW9fZmF1bHQoKSBuZWVk cyBhIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlmYmktPmZpeC5zbWVtX3N0YXJ0ID0gcGFnZV90b19w aHlzKHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9idWZmZXIpKTsKKworCSpmYm9wcyA9ICpmYmkt PmZib3BzOworCWZiaS0+ZmJvcHMgPSBmYm9wczsKKworCWZiZGVmaW8tPmRlbGF5ID0gbXNlY3Nf dG9famlmZmllcyhERUZBVUxUX0ZCREVGSU9fREVMQVlfTVMpOworCWZiZGVmaW8tPmRlZmVycmVk X2lvID0gZHJtX2ZiX2hlbHBlcl9kZWZlcnJlZF9pbzsKKwlmYmktPmZiZGVmaW8gPSBmYmRlZmlv OworCWZiX2RlZmVycmVkX2lvX2luaXQoZmJpKTsKKwlmYmktPmZib3BzLT5mYl9tbWFwID0gZHJt X2ZiZGV2X2NtYV9kZWZlcnJlZF9pb19tbWFwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGRybV9mYmRldl9jbWFfZGVmaW9fZmluaShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQoreworCWlm ICghZmJpLT5mYmRlZmlvKQorCQlyZXR1cm47CisKKwlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGZi aSk7CisJa2ZyZWUoZmJpLT5mYmRlZmlvKTsKKwlrZnJlZShmYmktPmZib3BzKTsKK30KKworLyoK KyAqIEZvciB1c2UgaW4gYSAoc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgKiktPmZiX3Byb2Jl IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQKKyAqIG5lZWRzIGN1c3RvbSBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyX2Z1bmNzLCBsaWtlIGRpcnR5KCkgZm9yIGRlZmVycmVkX2lvIHVzZS4KKyAqLworaW50 IGRybV9mYmRldl9jbWFfY3JlYXRlX3dpdGhfZnVuY3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmhl bHBlciwKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzLAorCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgKmZ1bmNzKQoreworCXN0cnVjdCBkcm1fZmJk ZXZfY21hICpmYmRldl9jbWEgPSB0b19mYmRldl9jbWEoaGVscGVyKTsKKwlzdHJ1Y3QgZHJtX21v ZGVfZmJfY21kMiBtb2RlX2NtZCA9IHsgMCB9OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBo ZWxwZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7CisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmI7CisJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9waXhlbDsKKwl1bnNp Z25lZCBsb25nIG9mZnNldDsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOworCXNpemVfdCBzaXplOwor CWludCByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJzdXJmYWNlIHdpZHRoKCVkKSwgaGVpZ2h0KCVk KSBhbmQgYnBwKCVkKVxuIiwKKwkJCXNpemVzLT5zdXJmYWNlX3dpZHRoLCBzaXplcy0+c3VyZmFj ZV9oZWlnaHQsCisJCQlzaXplcy0+c3VyZmFjZV9icHApOworCisJYnl0ZXNfcGVyX3BpeGVsID0g RElWX1JPVU5EX1VQKHNpemVzLT5zdXJmYWNlX2JwcCwgOCk7CisKKwltb2RlX2NtZC53aWR0aCA9 IHNpemVzLT5zdXJmYWNlX3dpZHRoOworCW1vZGVfY21kLmhlaWdodCA9IHNpemVzLT5zdXJmYWNl X2hlaWdodCAqIDI7CisJbW9kZV9jbWQucGl0Y2hlc1swXSA9IHNpemVzLT5zdXJmYWNlX3dpZHRo ICogYnl0ZXNfcGVyX3BpeGVsOworCW1vZGVfY21kLnBpeGVsX2Zvcm1hdCA9IGRybV9tb2RlX2xl Z2FjeV9mYl9mb3JtYXQoc2l6ZXMtPnN1cmZhY2VfYnBwLAorCQlzaXplcy0+c3VyZmFjZV9kZXB0 aCk7CisKKwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdodDsKKwlv YmogPSBkcm1fZ2VtX2NtYV9jcmVhdGUoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJ CXJldHVybiAtRU5PTUVNOworCisJZmJpID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVscGVy KTsKKwlpZiAoSVNfRVJSKGZiaSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmYmkpOworCQlnb3RvIGVy cl9nZW1fZnJlZV9vYmplY3Q7CisJfQorCisJZmJkZXZfY21hLT5mYiA9IGRybV9mYl9jbWFfYWxs b2MoZGV2LCAmbW9kZV9jbWQsICZvYmosIDEsIGZ1bmNzKTsKKwlpZiAoSVNfRVJSKGZiZGV2X2Nt YS0+ZmIpKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgRFJNIGZy YW1lYnVmZmVyLlxuIik7CisJCXJldCA9IFBUUl9FUlIoZmJkZXZfY21hLT5mYik7CisJCWdvdG8g ZXJyX2ZiX2luZm9fZGVzdHJveTsKKwl9CisKKwlmYiA9ICZmYmRldl9jbWEtPmZiLT5mYjsKKwlo ZWxwZXItPmZiID0gZmI7CisKKwlmYmktPnBhciA9IGhlbHBlcjsKKwlmYmktPmZsYWdzID0gRkJJ TkZPX0ZMQUdfREVGQVVMVDsKKwlmYmktPmZib3BzID0gJmRybV9mYmRldl9jbWFfb3BzOworCisJ ZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRjaGVzWzBdLCBmYi0+ZGVwdGgpOwor CWRybV9mYl9oZWxwZXJfZmlsbF92YXIoZmJpLCBoZWxwZXIsIGZiLT53aWR0aCwgZmItPmhlaWdo dCk7CisJZmJpLT52YXIueXJlcyAvPSAyOworCisJb2Zmc2V0ID0gZmJpLT52YXIueG9mZnNldCAq IGJ5dGVzX3Blcl9waXhlbDsKKwlvZmZzZXQgKz0gZmJpLT52YXIueW9mZnNldCAqIGZiLT5waXRj aGVzWzBdOworCisJZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gKHJlc291cmNlX3NpemVfdClv YmotPnBhZGRyOworCWZiaS0+c2NyZWVuX2Jhc2UgPSBvYmotPnZhZGRyICsgb2Zmc2V0OworCWZi aS0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykob2JqLT5wYWRkciArIG9mZnNldCk7 CisJZmJpLT5zY3JlZW5fc2l6ZSA9IHNpemU7CisJZmJpLT5maXguc21lbV9sZW4gPSBzaXplOwor CisJaWYgKGZ1bmNzLT5kaXJ0eSkgeworCQlyZXQgPSBkcm1fZmJkZXZfY21hX2RlZmlvX2luaXQo ZmJpLCBvYmopOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfY21hX2Rlc3Ryb3k7CisJfQorCisJ cmV0dXJuIDA7CisKK2Vycl9jbWFfZGVzdHJveToKKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rl cl9wcml2YXRlKCZmYmRldl9jbWEtPmZiLT5mYik7CisJZHJtX2ZiX2NtYV9kZXN0cm95KCZmYmRl dl9jbWEtPmZiLT5mYik7CitlcnJfZmJfaW5mb19kZXN0cm95OgorCWRybV9mYl9oZWxwZXJfcmVs ZWFzZV9mYmkoaGVscGVyKTsKK2Vycl9nZW1fZnJlZV9vYmplY3Q6CisJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9S VF9TWU1CT0woZHJtX2ZiZGV2X2NtYV9jcmVhdGVfd2l0aF9mdW5jcyk7CisKK3N0YXRpYyBpbnQg ZHJtX2ZiZGV2X2NtYV9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKKwlzdHJ1 Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzKQoreworCXJldHVybiBkcm1fZmJk ZXZfY21hX2NyZWF0ZV93aXRoX2Z1bmNzKGhlbHBlciwgc2l6ZXMsICZkcm1fZmJfY21hX2Z1bmNz KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIGRybV9mYl9j bWFfaGVscGVyX2Z1bmNzID0geworCS5mYl9wcm9iZSA9IGRybV9mYmRldl9jbWFfY3JlYXRlLAor fTsKKworLyoqCisgKiBkcm1fZmJkZXZfY21hX2luaXRfd2l0aF9mdW5jcygpIC0gQWxsb2NhdGUg YW5kIGluaXRpYWxpemVzIGEgZHJtX2ZiZGV2X2NtYSBzdHJ1Y3QKKyAqIEBkZXY6IERSTSBkZXZp Y2UKKyAqIEBwcmVmZXJyZWRfYnBwOiBQcmVmZXJyZWQgYml0cyBwZXIgcGl4ZWwgZm9yIHRoZSBk ZXZpY2UKKyAqIEBudW1fY3J0YzogTnVtYmVyIG9mIENSVENzCisgKiBAbWF4X2Nvbm5fY291bnQ6 IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3RvcnMKKyAqIEBmdW5jczogZmIgaGVscGVyIGZ1bmN0 aW9ucywgaW4gcGFydGljdWxhciBmYl9wcm9iZSgpCisgKgorICogUmV0dXJucyBhIG5ld2x5IGFs bG9jYXRlZCBkcm1fZmJkZXZfY21hIHN0cnVjdCBvciBhIEVSUl9QVFIuCisgKi8KK3N0cnVjdCBk cm1fZmJkZXZfY21hICpkcm1fZmJkZXZfY21hX2luaXRfd2l0aF9mdW5jcyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCXVuc2lnbmVkIGludCBwcmVmZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbnVt X2NydGMsCisJdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50LCBjb25zdCBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9mdW5jcyAqZnVuY3MpCit7CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2X2Nt YTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyOworCWludCByZXQ7CisKKwlmYmRldl9j bWEgPSBremFsbG9jKHNpemVvZigqZmJkZXZfY21hKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYmRl dl9jbWEpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkcm0gZmJk ZXYuXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJaGVscGVyID0gJmZi ZGV2X2NtYS0+ZmJfaGVscGVyOworCisJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRldiwgaGVscGVy LCBmdW5jcyk7CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZGV2LCBoZWxwZXIsIG51bV9j cnRjLCBtYXhfY29ubl9jb3VudCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYtPmRl diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRybSBmYiBoZWxwZXIuXG4iKTsKKwkJZ290byBlcnJf ZnJlZTsKKwl9CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3Rv cnMoaGVscGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVk IHRvIGFkZCBjb25uZWN0b3JzLlxuIik7CisJCWdvdG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsK KworCX0KKworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoaGVscGVyLCBwcmVm ZXJyZWRfYnBwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVk IHRvIHNldCBpbml0aWFsIGh3IGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJZ290byBlcnJfZHJtX2Zi X2hlbHBlcl9maW5pOworCX0KKworCXJldHVybiBmYmRldl9jbWE7CisKK2Vycl9kcm1fZmJfaGVs cGVyX2Zpbmk6CisJZHJtX2ZiX2hlbHBlcl9maW5pKGhlbHBlcik7CitlcnJfZnJlZToKKwlrZnJl ZShmYmRldl9jbWEpOworCisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNzKTsKKworLyoqCisgKiBkcm1fZmJkZXZf Y21hX2luaXQoKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplcyBhIGRybV9mYmRldl9jbWEgc3Ry dWN0CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcHJlZmVycmVkX2JwcDogUHJlZmVycmVkIGJp dHMgcGVyIHBpeGVsIGZvciB0aGUgZGV2aWNlCisgKiBAbnVtX2NydGM6IE51bWJlciBvZiBDUlRD cworICogQG1heF9jb25uX2NvdW50OiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0b3JzCisgKgor ICogUmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBkcm1fZmJkZXZfY21hIHN0cnVjdCBvciBhIEVS Ul9QVFIuCisgKi8KK3N0cnVjdCBkcm1fZmJkZXZfY21hICpkcm1fZmJkZXZfY21hX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgcHJlZmVycmVkX2JwcCwgdW5zaWdu ZWQgaW50IG51bV9jcnRjLAorCXVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCkKK3sKKwlyZXR1 cm4gZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhfZnVuY3MoZGV2LCBwcmVmZXJyZWRfYnBwLCBudW1f Y3J0YywKKwkJCQltYXhfY29ubl9jb3VudCwgJmRybV9mYl9jbWFfaGVscGVyX2Z1bmNzKTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9mYmRldl9jbWFfaW5pdCk7CisKKy8qKgorICogZHJtX2Zi ZGV2X2NtYV9maW5pKCkgLSBGcmVlIGRybV9mYmRldl9jbWEgc3RydWN0CisgKiBAZmJkZXZfY21h OiBUaGUgZHJtX2ZiZGV2X2NtYSBzdHJ1Y3QKKyAqLwordm9pZCBkcm1fZmJkZXZfY21hX2Zpbmko c3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2X2NtYSkKK3sKKwlkcm1fZmJfaGVscGVyX3VucmVn aXN0ZXJfZmJpKCZmYmRldl9jbWEtPmZiX2hlbHBlcik7CisJaWYgKGZiZGV2X2NtYS0+ZmJfaGVs cGVyLmZiZGV2KQorCQlkcm1fZmJkZXZfY21hX2RlZmlvX2ZpbmkoZmJkZXZfY21hLT5mYl9oZWxw ZXIuZmJkZXYpOworCWRybV9mYl9oZWxwZXJfcmVsZWFzZV9mYmkoJmZiZGV2X2NtYS0+ZmJfaGVs cGVyKTsKKworCWlmIChmYmRldl9jbWEtPmZiKSB7CisJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZ2lz dGVyX3ByaXZhdGUoJmZiZGV2X2NtYS0+ZmItPmZiKTsKKwkJZHJtX2ZiX2NtYV9kZXN0cm95KCZm YmRldl9jbWEtPmZiLT5mYik7CisJfQorCisJZHJtX2ZiX2hlbHBlcl9maW5pKCZmYmRldl9jbWEt PmZiX2hlbHBlcik7CisJa2ZyZWUoZmJkZXZfY21hKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9mYmRldl9jbWFfZmluaSk7CisKKy8qKgorICogZHJtX2ZiZGV2X2NtYV9yZXN0b3JlX21vZGUo KSAtIFJlc3RvcmVzIGluaXRpYWwgZnJhbWVidWZmZXIgbW9kZQorICogQGZiZGV2X2NtYTogVGhl IGRybV9mYmRldl9jbWEgc3RydWN0LCBtYXkgYmUgTlVMTAorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgdXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgRFJNIGRyaXZlcnMgbGFzdGNsb3NlIGNhbGxiYWNr LgorICovCit2b2lkIGRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKHN0cnVjdCBkcm1fZmJkZXZf Y21hICpmYmRldl9jbWEpCit7CisJaWYgKGZiZGV2X2NtYSkKKwkJZHJtX2ZiX2hlbHBlcl9yZXN0 b3JlX2ZiZGV2X21vZGVfdW5sb2NrZWQoJmZiZGV2X2NtYS0+ZmJfaGVscGVyKTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKTsKKworLyoqCisgKiBkcm1f ZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQoKSAtIFBvbGwgZm9yIGhvdHB1bHVnIGV2ZW50cworICog QGZiZGV2X2NtYTogVGhlIGRybV9mYmRldl9jbWEgc3RydWN0LCBtYXkgYmUgTlVMTAorICoKKyAq IFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgRFJNIGRyaXZlcnMgb3V0 cHV0X3BvbGxfY2hhbmdlZAorICogY2FsbGJhY2suCisgKi8KK3ZvaWQgZHJtX2ZiZGV2X2NtYV9o b3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldl9jbWEpCit7CisJaWYgKGZi ZGV2X2NtYSkKKwkJZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCZmYmRldl9jbWEtPmZiX2hl bHBlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQp OworCisvKioKKyAqIGRybV9mYmRldl9jbWFfc2V0X3N1c3BlbmQgLSB3cmFwcGVyIGFyb3VuZCBk cm1fZmJfaGVscGVyX3NldF9zdXNwZW5kCisgKiBAZmJkZXZfY21hOiBUaGUgZHJtX2ZiZGV2X2Nt YSBzdHJ1Y3QsIG1heSBiZSBOVUxMCisgKiBAc3RhdGU6IGRlc2lyZWQgc3RhdGUsIHplcm8gdG8g cmVzdW1lLCBub24temVybyB0byBzdXNwZW5kCisgKgorICogQ2FsbHMgZHJtX2ZiX2hlbHBlcl9z ZXRfc3VzcGVuZCwgd2hpY2ggaXMgYSB3cmFwcGVyIGFyb3VuZAorICogZmJfc2V0X3N1c3BlbmQg aW1wbGVtZW50ZWQgYnkgZmJkZXYgY29yZS4KKyAqLwordm9pZCBkcm1fZmJkZXZfY21hX3NldF9z dXNwZW5kKHN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldl9jbWEsIGludCBzdGF0ZSkKK3sKKwlp ZiAoZmJkZXZfY21hKQorCQlkcm1fZmJfaGVscGVyX3NldF9zdXNwZW5kKCZmYmRldl9jbWEtPmZi X2hlbHBlciwgc3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJkZXZfY21hX3NldF9zdXNw ZW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2NtYV9oZWxwZXJfbm9t bXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2NtYV9oZWxwZXJfbm9tbXUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2I3ZjJiCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlcl9ub21tdS5jCkBAIC0wLDAgKzEsNTc0 IEBACisvKgorICogZHJtIGdlbSBDTUEgKGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRvcikgaGVs cGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYXNjaGEgSGF1ZXIsIFBl bmd1dHJvbml4CisgKgorICogQmFzZWQgb24gU2Ftc3VuZyBFeHlub3MgY29kZQorICoKKyAqIENv cHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51 eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Rt YS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21h X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fdm1hX21hbmFnZXIuaD4KKworLyoqCisgKiBE T0M6IGNtYSBoZWxwZXJzCisgKgorICogVGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciBy ZXNlcnZlcyBhIHBvb2wgb2YgbWVtb3J5IGF0IGVhcmx5IGJvb3QKKyAqIHRoYXQgaXMgdXNlZCB0 byBzZXJ2aWNlIHJlcXVlc3RzIGZvciBsYXJnZSBibG9ja3Mgb2YgY29udGlndW91cyBtZW1vcnku CisgKgorICogVGhlIERSTSBHRU0vQ01BIGhlbHBlcnMgdXNlIHRoaXMgYWxsb2NhdG9yIGFzIGEg bWVhbnMgdG8gcHJvdmlkZSBidWZmZXIKKyAqIG9iamVjdHMgdGhhdCBhcmUgcGh5c2ljYWxseSBj b250aWd1b3VzIGluIG1lbW9yeS4gVGhpcyBpcyB1c2VmdWwgZm9yCisgKiBkaXNwbGF5IGRyaXZl cnMgdGhhdCBhcmUgdW5hYmxlIHRvIG1hcCBzY2F0dGVyZWQgYnVmZmVycyB2aWEgYW4gSU9NTVUu CisgKi8KKworLyoqCisgKiBfX2RybV9nZW1fY21hX2NyZWF0ZSAtIENyZWF0ZSBhIEdFTSBDTUEg b2JqZWN0IHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkKKyAqIEBkcm06IERSTSBkZXZpY2UKKyAq IEBzaXplOiBzaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgR0VNIENNQSBvYmplY3Qgb2YgdGhlIGdpdmVu IHNpemUsCisgKiBidXQgZG9lc24ndCBhbGxvY2F0ZSBhbnkgbWVtb3J5IHRvIGJhY2sgdGhlIG9i amVjdC4KKyAqCisgKiBSZXR1cm5zOgorICogQSBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICog b24gc3VjY2VzcyBvciBhbiBFUlJfUFRSKCktZW5jb2RlZCBuZWdhdGl2ZQorICogZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqCitf X2RybV9nZW1fY21hX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzaXplX3Qgc2l6ZSkK K3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iajsKKwlpbnQgcmV0OworCisJaWYgKGRybS0+ZHJpdmVyLT5nZW1fY3Jl YXRlX29iamVjdCkKKwkJZ2VtX29iaiA9IGRybS0+ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVjdChk cm0sIHNpemUpOworCWVsc2UKKwkJZ2VtX29iaiA9IGt6YWxsb2Moc2l6ZW9mKCpjbWFfb2JqKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFnZW1fb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KwljbWFfb2JqID0gY29udGFpbmVyX29mKGdlbV9vYmosIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QsIGJhc2UpOworCisJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkcm0sIGdlbV9vYmosIHNp emUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9t bWFwX29mZnNldChnZW1fb2JqKTsKKwlpZiAocmV0KSB7CisJCWRybV9nZW1fb2JqZWN0X3JlbGVh c2UoZ2VtX29iaik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIGNtYV9vYmo7CisKK2Vy cm9yOgorCWtmcmVlKGNtYV9vYmopOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qKgor ICogZHJtX2dlbV9jbWFfY3JlYXRlIC0gYWxsb2NhdGUgYW4gb2JqZWN0IHdpdGggdGhlIGdpdmVu IHNpemUKKyAqIEBkcm06IERSTSBkZXZpY2UKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBvYmplY3Qg dG8gYWxsb2NhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBDTUEgR0VNIG9iamVj dCBhbmQgYWxsb2NhdGVzIGEgY29udGlndW91cyBjaHVuayBvZgorICogbWVtb3J5IGFzIGJhY2tp bmcgc3RvcmUuIFRoZSBiYWNraW5nIG1lbW9yeSBoYXMgdGhlIHdyaXRlY29tYmluZSBhdHRyaWJ1 dGUKKyAqIHNldC4KKyAqCisgKiBSZXR1cm5zOgorICogQSBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICogb24gc3VjY2VzcyBvciBhbiBFUlJfUFRSKCktZW5jb2RlZCBuZWdhdGl2ZQorICogZXJy b3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpkcm1f Z2VtX2NtYV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkJICAgICAgc2l6ZV90 IHNpemUpCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKwlpbnQgcmV0 OworCisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwljbWFfb2JqID0gX19k cm1fZ2VtX2NtYV9jcmVhdGUoZHJtLCBzaXplKTsKKwlpZiAoSVNfRVJSKGNtYV9vYmopKQorCQly ZXR1cm4gY21hX29iajsKKworCWNtYV9vYmotPnZhZGRyID0gZG1hX2FsbG9jX3djKGRybS0+ZGV2 LCBzaXplLCAmY21hX29iai0+cGFkZHIsCisJCQkJICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05P V0FSTik7CisJaWYgKCFjbWFfb2JqLT52YWRkcikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFp bGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciB3aXRoIHNpemUgJXp1XG4iLAorCQkJc2l6ZSk7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIGNtYV9vYmo7CisKK2Vy cm9yOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZjbWFfb2JqLT5iYXNl KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9j bWFfY3JlYXRlKTsKKworLyoqCisgKiBkcm1fZ2VtX2NtYV9jcmVhdGVfd2l0aF9oYW5kbGUgLSBh bGxvY2F0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZSBhbmQKKyAqICAgICByZXR1cm4g YSBHRU0gaGFuZGxlIHRvIGl0CisgKiBAZmlsZV9wcml2OiBEUk0gZmlsZS1wcml2YXRlIHN0cnVj dHVyZSB0byByZWdpc3RlciB0aGUgaGFuZGxlIGZvcgorICogQGRybTogRFJNIGRldmljZQorICog QHNpemU6IHNpemUgb2YgdGhlIG9iamVjdCB0byBhbGxvY2F0ZQorICogQGhhbmRsZTogcmV0dXJu IGxvY2F0aW9uIGZvciB0aGUgR0VNIGhhbmRsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBhIENNQSBHRU0gb2JqZWN0LCBhbGxvY2F0aW5nIGEgcGh5c2ljYWxseSBjb250aWd1b3VzCisg KiBjaHVuayBvZiBtZW1vcnkgYXMgYmFja2luZyBzdG9yZS4gVGhlIEdFTSBvYmplY3QgaXMgdGhl biBhZGRlZCB0byB0aGUgbGlzdAorICogb2Ygb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2 ZW4gZmlsZSBhbmQgYSBoYW5kbGUgdG8gaXQgaXMgcmV0dXJuZWQuCisgKgorICogUmV0dXJuczoK KyAqIEEgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqIG9uIHN1Y2Nlc3Mgb3IgYW4gRVJSX1BU UigpLWVuY29kZWQgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3Rh dGljIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKgorZHJtX2dlbV9jbWFfY3JlYXRlX3dpdGhf aGFuZGxlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICAgIHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHNpemVfdCBzaXplLAorCQkJICAgICAgIHVpbnQzMl90ICpoYW5kbGUpCit7 CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbV9vYmo7CisJaW50IHJldDsKKworCWNtYV9vYmogPSBkcm1fZ2VtX2NtYV9jcmVh dGUoZHJtLCBzaXplKTsKKwlpZiAoSVNfRVJSKGNtYV9vYmopKQorCQlyZXR1cm4gY21hX29iajsK KworCWdlbV9vYmogPSAmY21hX29iai0+YmFzZTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBv ZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBo YXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxl X2NyZWF0ZShmaWxlX3ByaXYsIGdlbV9vYmosIGhhbmRsZSk7CisJLyogZHJvcCByZWZlcmVuY2Ug ZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtX29iaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKKworCXJldHVybiBjbWFfb2JqOworfQorCisvKioKKyAqIGRybV9nZW1fY21hX2Zy ZWVfb2JqZWN0IC0gZnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgQ01BIEdFTSBvYmpl Y3QKKyAqIEBnZW1fb2JqOiBHRU0gb2JqZWN0IHRvIGZyZWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGZyZWVzIHRoZSBiYWNraW5nIG1lbW9yeSBvZiB0aGUgQ01BIEdFTSBvYmplY3QsIGNsZWFucyB1 cCB0aGUKKyAqIEdFTSBvYmplY3Qgc3RhdGUgYW5kIGZyZWVzIHRoZSBtZW1vcnkgdXNlZCB0byBz dG9yZSB0aGUgb2JqZWN0IGl0c2VsZi4KKyAqIERyaXZlcnMgdXNpbmcgdGhlIENNQSBoZWxwZXJz IHNob3VsZCBzZXQgdGhpcyBhcyB0aGVpciBEUk0gZHJpdmVyJ3MKKyAqIC0+Z2VtX2ZyZWVfb2Jq ZWN0KCkgY2FsbGJhY2suCisgKi8KK3ZvaWQgZHJtX2dlbV9jbWFfZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQoreworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KmNtYV9vYmo7CisKKwljbWFfb2JqID0gdG9fZHJtX2dlbV9jbWFfb2JqKGdlbV9vYmopOworCisJ aWYgKGNtYV9vYmotPnZhZGRyKSB7CisJCWRtYV9mcmVlX3djKGdlbV9vYmotPmRldi0+ZGV2LCBj bWFfb2JqLT5iYXNlLnNpemUsCisJCQkgICAgY21hX29iai0+dmFkZHIsIGNtYV9vYmotPnBhZGRy KTsKKwl9IGVsc2UgaWYgKGdlbV9vYmotPmltcG9ydF9hdHRhY2gpIHsKKwkJZHJtX3ByaW1lX2dl bV9kZXN0cm95KGdlbV9vYmosIGNtYV9vYmotPnNndCk7CisJfQorCisJZHJtX2dlbV9vYmplY3Rf cmVsZWFzZShnZW1fb2JqKTsKKworCWtmcmVlKGNtYV9vYmopOworfQorRVhQT1JUX1NZTUJPTF9H UEwoZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QpOworCisvKioKKyAqIGRybV9nZW1fY21hX2R1bWJf Y3JlYXRlX2ludGVybmFsIC0gY3JlYXRlIGEgZHVtYiBidWZmZXIgb2JqZWN0CisgKiBAZmlsZV9w cml2OiBEUk0gZmlsZS1wcml2YXRlIHN0cnVjdHVyZSB0byBjcmVhdGUgdGhlIGR1bWIgYnVmZmVy IGZvcgorICogQGRybTogRFJNIGRldmljZQorICogQGFyZ3M6IElPQ1RMIGRhdGEKKyAqCisgKiBU aGlzIGFsaWducyB0aGUgcGl0Y2ggYW5kIHNpemUgYXJndW1lbnRzIHRvIHRoZSBtaW5pbXVtIHJl cXVpcmVkLiBUaGlzIGlzCisgKiBhbiBpbnRlcm5hbCBoZWxwZXIgdGhhdCBjYW4gYmUgd3JhcHBl ZCBieSBhIGRyaXZlciB0byBhY2NvdW50IGZvciBoYXJkd2FyZQorICogd2l0aCBtb3JlIHNwZWNp ZmljIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEl0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3Rs eQorICogYXMgdGhlIC0+ZHVtYl9jcmVhdGUoKSBjYWxsYmFjayBpbiBhIERSTSBkcml2ZXIuCisg KgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KKyAqLworaW50IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlX2ludGVybmFsKHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRy bSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwl1bnNp Z25lZCBpbnQgbWluX3BpdGNoID0gRElWX1JPVU5EX1VQKGFyZ3MtPndpZHRoICogYXJncy0+YnBw LCA4KTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCisJaWYgKGFyZ3Mt PnBpdGNoIDwgbWluX3BpdGNoKQorCQlhcmdzLT5waXRjaCA9IG1pbl9waXRjaDsKKworCWlmIChh cmdzLT5zaXplIDwgYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQpCisJCWFyZ3MtPnNpemUgPSBh cmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKworCWNtYV9vYmogPSBkcm1fZ2VtX2NtYV9jcmVh dGVfd2l0aF9oYW5kbGUoZmlsZV9wcml2LCBkcm0sIGFyZ3MtPnNpemUsCisJCQkJCQkgJmFyZ3Mt PmhhbmRsZSk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhjbWFfb2JqKTsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKGRybV9nZW1fY21hX2R1bWJfY3JlYXRlX2ludGVybmFsKTsKKworLyoqCisgKiBk cm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSAtIGNyZWF0ZSBhIGR1bWIgYnVmZmVyIG9iamVjdAorICog QGZpbGVfcHJpdjogRFJNIGZpbGUtcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gY3JlYXRlIHRoZSBkdW1i IGJ1ZmZlciBmb3IKKyAqIEBkcm06IERSTSBkZXZpY2UKKyAqIEBhcmdzOiBJT0NUTCBkYXRhCisg KgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgcGl0Y2ggb2YgdGhlIGR1bWIgYnVmZmVy IGFuZCByb3VuZHMgaXQgdXAgdG8gYW4KKyAqIGludGVnZXIgbnVtYmVyIG9mIGJ5dGVzIHBlciBw aXhlbC4gRHJpdmVycyBmb3IgaGFyZHdhcmUgdGhhdCBkb2Vzbid0IGhhdmUKKyAqIGFueSBhZGRp dGlvbmFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGl0Y2ggY2FuIGRpcmVjdGx5IHVzZSB0aGlzIGZ1 bmN0aW9uIGFzCisgKiB0aGVpciAtPmR1bWJfY3JlYXRlKCkgY2FsbGJhY2suCisgKgorICogRm9y IGhhcmR3YXJlIHdpdGggYWRkaXRpb25hbCByZXN0cmljdGlvbnMsIGRyaXZlcnMgY2FuIGFkanVz dCB0aGUgZmllbGRzCisgKiBzZXQgdXAgYnkgdXNlcnNwYWNlIGFuZCBwYXNzIHRoZSBJT0NUTCBk YXRhIGFsb25nIHRvIHRoZQorICogZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGVfaW50ZXJuYWwoKSBm dW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRy bSwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKworCWFyZ3MtPnBpdGNoID0gRElWX1JPVU5E X1VQKGFyZ3MtPndpZHRoICogYXJncy0+YnBwLCA4KTsKKwlhcmdzLT5zaXplID0gYXJncy0+cGl0 Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwljbWFfb2JqID0gZHJtX2dlbV9jbWFfY3JlYXRlX3dpdGhf aGFuZGxlKGZpbGVfcHJpdiwgZHJtLCBhcmdzLT5zaXplLAorCQkJCQkJICZhcmdzLT5oYW5kbGUp OworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oY21hX29iaik7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSk7CisKKy8qKgorICogZHJtX2dlbV9jbWFfZHVtYl9t YXBfb2Zmc2V0IC0gcmV0dXJuIHRoZSBmYWtlIG1tYXAgb2Zmc2V0IGZvciBhIENNQSBHRU0KKyAq ICAgICBvYmplY3QKKyAqIEBmaWxlX3ByaXY6IERSTSBmaWxlLXByaXZhdGUgc3RydWN0dXJlIGNv bnRhaW5pbmcgdGhlIEdFTSBvYmplY3QKKyAqIEBkcm06IERSTSBkZXZpY2UKKyAqIEBoYW5kbGU6 IEdFTSBvYmplY3QgaGFuZGxlCisgKiBAb2Zmc2V0OiByZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBm YWtlIG1tYXAgb2Zmc2V0CisgKgorICogVGhpcyBmdW5jdGlvbiBsb29rIHVwIGFuIG9iamVjdCBi eSBpdHMgaGFuZGxlIGFuZCByZXR1cm5zIHRoZSBmYWtlIG1tYXAKKyAqIG9mZnNldCBhc3NvY2lh dGVkIHdpdGggaXQuIERyaXZlcnMgdXNpbmcgdGhlIENNQSBoZWxwZXJzIHNob3VsZCBzZXQgdGhp cworICogYXMgdGhlaXIgRFJNIGRyaXZlcidzIC0+ZHVtYl9tYXBfb2Zmc2V0KCkgY2FsbGJhY2su CisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldChzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1MzIg aGFuZGxlLAorCQkJCXU2NCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt X29iajsKKworCWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZV9wcml2LCBoYW5k bGUpOworCWlmICghZ2VtX29iaikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGxv b2t1cCBHRU0gb2JqZWN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKm9mZnNldCA9 IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmZ2VtX29iai0+dm1hX25vZGUpOworCisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtX29iaik7CisKKwlyZXR1cm4gMDsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCk7CisKK2NvbnN0 IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fZ2VtX2NtYV92bV9vcHMgPSB7CisJLm9w ZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKK307CitF WFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX2NtYV92bV9vcHMpOworCitzdGF0aWMgaW50IGRybV9n ZW1fY21hX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmosCisJCQkJ c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJLyoKKwkgKiBDbGVhciB0aGUgVk1fUEZO TUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcCgpLCBhbmQgc2V0IHRoZQorCSAq IHZtX3Bnb2ZmICh1c2VkIGFzIGEgZmFrZSBidWZmZXIgb2Zmc2V0IGJ5IERSTSkgdG8gMCBhcyB3 ZSB3YW50IHRvIG1hcAorCSAqIHRoZSB3aG9sZSBidWZmZXIuCisJICovCisJdm1hLT52bV9mbGFn cyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYgPSAwOworCisJcmV0dXJuIHZtX2lvbWFw X21lbW9yeSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkgICAgICAgKHZtYS0+dm1fZW5kIC0gdm1h LT52bV9zdGFydCkpOworfQorCisvKioKKyAqIGRybV9nZW1fY21hX21tYXAgLSBtZW1vcnktbWFw IGEgQ01BIEdFTSBvYmplY3QKKyAqIEBmaWxwOiBmaWxlIG9iamVjdAorICogQHZtYTogVk1BIGZv ciB0aGUgYXJlYSB0byBiZSBtYXBwZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMg YW4gYXVnbWVudGVkIHZlcnNpb24gb2YgdGhlIEdFTSBEUk0gZmlsZSBtbWFwCisgKiBvcGVyYXRp b24gZm9yIENNQSBvYmplY3RzOiBJbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgR0VNIFZNQSBzZXR1 cCBpdAorICogaW1tZWRpYXRlbHkgZmF1bHRzIGluIHRoZSBlbnRpcmUgb2JqZWN0IGluc3RlYWQg b2YgdXNpbmcgb24tZGVtYWluZAorICogZmF1bHRpbmcuIERyaXZlcnMgd2hpY2ggZW1wbG95IHRo ZSBDTUEgaGVscGVycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24KKyAqIGFzIHRoZWlyIC0+bW1h cCgpIGhhbmRsZXIgaW4gdGhlIERSTSBkZXZpY2UgZmlsZSdzIGZpbGVfb3BlcmF0aW9ucworICog c3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fZ2VtX2NtYV9tbWFwKHN0cnVj dCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJt X2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i ajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWdlbV9vYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlj bWFfb2JqID0gdG9fZHJtX2dlbV9jbWFfb2JqKGdlbV9vYmopOworCisJcmV0dXJuIGRybV9nZW1f Y21hX21tYXBfb2JqKGNtYV9vYmosIHZtYSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2Vt X2NtYV9tbWFwKTsKKwordW5zaWduZWQgbG9uZyBkcm1fZ2VtX2NtYV9nZXRfdW5tYXBwZWRfYXJl YShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJ ICAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwKKwkJ CQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVj dCAqY21hX29iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7CisJc3RydWN0 IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fdm1hX29mZnNldF9ub2RlICpu b2RlOworCisJaWYgKGRybV9kZXZpY2VfaXNfdW5wbHVnZ2VkKGRldikpCisJCXJldHVybiAtRU5P REVWOworCisJZHJtX3ZtYV9vZmZzZXRfbG9ja19sb29rdXAoZGV2LT52bWFfb2Zmc2V0X21hbmFn ZXIpOworCW5vZGUgPSBkcm1fdm1hX29mZnNldF9leGFjdF9sb29rdXBfbG9ja2VkKGRldi0+dm1h X29mZnNldF9tYW5hZ2VyLAorCQkJCQkJICBwZ29mZiwKKwkJCQkJCSAgbGVuID4+IFBBR0VfU0hJ RlQpOworCWlmIChsaWtlbHkobm9kZSkpIHsKKwkJb2JqID0gY29udGFpbmVyX29mKG5vZGUsIHN0 cnVjdCBkcm1fZ2VtX29iamVjdCwgdm1hX25vZGUpOworCQkvKgorCQkgKiBXaGVuIHRoZSBvYmpl Y3QgaXMgYmVpbmcgZnJlZWQsIGFmdGVyIGl0IGhpdHMgMC1yZWZjbnQgaXQKKwkJICogcHJvY2Vl ZHMgdG8gdGVhciBkb3duIHRoZSBvYmplY3QuIEluIHRoZSBwcm9jZXNzIGl0IHdpbGwKKwkJICog YXR0ZW1wdCB0byByZW1vdmUgdGhlIFZNQSBvZmZzZXQgYW5kIHNvIGFjcXVpcmUgdGhpcworCQkg KiBtZ3ItPnZtX2xvY2suICBUaGVyZWZvcmUgaWYgd2UgZmluZCBhbiBvYmplY3Qgd2l0aCBhIDAt cmVmY250CisJCSAqIHRoYXQgbWF0Y2hlcyBvdXIgcmFuZ2UsIHdlIGtub3cgaXQgaXMgaW4gdGhl IHByb2Nlc3Mgb2YgYmVpbmcKKwkJICogZGVzdHJveWVkIGFuZCB3aWxsIGJlIGZyZWVkIGFzIHNv b24gYXMgd2UgcmVsZWFzZSB0aGUgbG9jayAtCisJCSAqIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9y IHRoZSAwLXJlZmNudGVkIG9iamVjdCBhbmQgdHJlYXQgaXQgYXMKKwkJICogaW52YWxpZC4KKwkJ ICovCisJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+cmVmY291bnQpKQorCQkJb2Jq ID0gTlVMTDsKKwl9CisKKwlkcm1fdm1hX29mZnNldF91bmxvY2tfbG9va3VwKGRldi0+dm1hX29m ZnNldF9tYW5hZ2VyKTsKKworCWlmICghb2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgh ZHJtX3ZtYV9ub2RlX2lzX2FsbG93ZWQobm9kZSwgcHJpdikpIHsKKwkJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJY21h X29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZl cmVuY2VfdW5sb2NrZWQob2JqKTsKKworCXJldHVybiBjbWFfb2JqLT52YWRkciA/ICh1bnNpZ25l ZCBsb25nKWNtYV9vYmotPnZhZGRyIDogLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9nZW1fY21hX2dldF91bm1hcHBlZF9hcmVhKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUwor LyoqCisgKiBkcm1fZ2VtX2NtYV9kZXNjcmliZSAtIGRlc2NyaWJlIGEgQ01BIEdFTSBvYmplY3Qg Zm9yIGRlYnVnZnMKKyAqIEBjbWFfb2JqOiBDTUEgR0VNIG9iamVjdAorICogQG06IGRlYnVnZnMg ZmlsZSBoYW5kbGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBo dW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAqIENNQSBHRU0gb2JqZWN0IGlu dG8gYSBzeW50aGV0aWMgZmlsZS4KKyAqLwordm9pZCBkcm1fZ2VtX2NtYV9kZXNjcmliZShzdHJ1 Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqLAorCQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0p Cit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmY21hX29iai0+YmFzZTsKKwl1aW50 NjRfdCBvZmY7CisKKwlvZmYgPSBkcm1fdm1hX25vZGVfc3RhcnQoJm9iai0+dm1hX25vZGUpOwor CisJc2VxX3ByaW50ZihtLCAiJTJkICglMmQpICUwOGxseCAlcGFkICVwICV6dSIsCisJCQlvYmot Pm5hbWUsIG9iai0+cmVmY291bnQucmVmY291bnQuY291bnRlciwKKwkJCW9mZiwgJmNtYV9vYmot PnBhZGRyLCBjbWFfb2JqLT52YWRkciwgb2JqLT5zaXplKTsKKworCXNlcV9wcmludGYobSwgIlxu Iik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX2NtYV9kZXNjcmliZSk7CisjZW5kaWYK KworLyoqCisgKiBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUgLSBwcm92aWRlIGEgc2Nh dHRlci9nYXRoZXIgdGFibGUgb2YgcGlubmVkCisgKiAgICAgcGFnZXMgZm9yIGEgQ01BIEdFTSBv YmplY3QKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGV4cG9ydHMg YSBzY2F0dGVyL2dhdGhlciB0YWJsZSBzdWl0YWJsZSBmb3IgUFJJTUUgdXNhZ2UgYnkKKyAqIGNh bGxpbmcgdGhlIHN0YW5kYXJkIERNQSBtYXBwaW5nIEFQSS4gRHJpdmVycyB1c2luZyB0aGUgQ01B IGhlbHBlcnMgc2hvdWxkCisgKiBzZXQgdGhpcyBhcyB0aGVpciBEUk0gZHJpdmVyJ3MgLT5nZW1f cHJpbWVfZ2V0X3NnX3RhYmxlKCkgY2FsbGJhY2suCisgKgorICogUmV0dXJuczoKKyAqIEEgcG9p bnRlciB0byB0aGUgc2NhdHRlci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzIG9yIE5VTEwg b24gZmFpbHVyZS4KKyAqLworc3RydWN0IHNnX3RhYmxlICpkcm1fZ2VtX2NtYV9wcmltZV9nZXRf c2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1f Y21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOworCXN0cnVjdCBz Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gZG1hX2dl dF9zZ3RhYmxlKG9iai0+ZGV2LT5kZXYsIHNndCwgY21hX29iai0+dmFkZHIsCisJCQkgICAgICBj bWFfb2JqLT5wYWRkciwgb2JqLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisK KwlyZXR1cm4gc2d0OworCitvdXQ6CisJa2ZyZWUoc2d0KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSk7CisKKy8qKgor ICogZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlIC0gcHJvZHVjZSBhIENNQSBHRU0g b2JqZWN0IGZyb20gYW5vdGhlcgorICogICAgIGRyaXZlcidzIHNjYXR0ZXIvZ2F0aGVyIHRhYmxl IG9mIHBpbm5lZCBwYWdlcworICogQGRldjogZGV2aWNlIHRvIGltcG9ydCBpbnRvCisgKiBAYXR0 YWNoOiBETUEtQlVGIGF0dGFjaG1lbnQKKyAqIEBzZ3Q6IHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9m IHBpbm5lZCBwYWdlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wb3J0cyBhIHNjYXR0ZXIvZ2F0 aGVyIHRhYmxlIGV4cG9ydGVkIHZpYSBETUEtQlVGIGJ5CisgKiBhbm90aGVyIGRyaXZlci4gSW1w b3J0ZWQgYnVmZmVycyBtdXN0IGJlIHBoeXNpY2FsbHkgY29udGlndW91cyBpbiBtZW1vcnkKKyAq IChpLmUuIHRoZSBzY2F0dGVyL2dhdGhlciB0YWJsZSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgZW50 cnkpLiBEcml2ZXJzIHRoYXQKKyAqIHVzZSB0aGUgQ01BIGhlbHBlcnMgc2hvdWxkIHNldCB0aGlz IGFzIHRoZWlyIERSTSBkcml2ZXIncworICogLT5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKCkg Y2FsbGJhY2suCisgKgorICogUmV0dXJuczoKKyAqIEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0 ZWQgR0VNIG9iamVjdCBvciBhbiBFUlJfUFRSLWVuY29kZWQgbmVnYXRpdmUKKyAqIGVycm9yIGNv ZGUgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2RybV9nZW1fY21h X3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCSAgc3RydWN0IHNnX3RhYmxlICpz Z3QpCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKworCWlmIChzZ3Qt Pm5lbnRzICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogQ3JlYXRlIGEg Q01BIEdFTSBidWZmZXIuICovCisJY21hX29iaiA9IF9fZHJtX2dlbV9jbWFfY3JlYXRlKGRldiwg YXR0YWNoLT5kbWFidWYtPnNpemUpOworCWlmIChJU19FUlIoY21hX29iaikpCisJCXJldHVybiBF UlJfQ0FTVChjbWFfb2JqKTsKKworCWNtYV9vYmotPnBhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2d0 LT5zZ2wpOworCWNtYV9vYmotPnNndCA9IHNndDsKKworCURSTV9ERUJVR19QUklNRSgiZG1hX2Fk ZHIgPSAlcGFkLCBzaXplID0gJXp1XG4iLCAmY21hX29iai0+cGFkZHIsIGF0dGFjaC0+ZG1hYnVm LT5zaXplKTsKKworCXJldHVybiAmY21hX29iai0+YmFzZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7CisKKy8qKgorICogZHJtX2dlbV9j bWFfcHJpbWVfbW1hcCAtIG1lbW9yeS1tYXAgYW4gZXhwb3J0ZWQgQ01BIEdFTSBvYmplY3QKKyAq IEBvYmo6IEdFTSBvYmplY3QKKyAqIEB2bWE6IFZNQSBmb3IgdGhlIGFyZWEgdG8gYmUgbWFwcGVk CisgKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgYnVmZmVyIGltcG9ydGVkIHZpYSBEUk0gUFJJ TUUgaW50byBhIHVzZXJzcGFjZQorICogcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuIERyaXZlcnMg dGhhdCB1c2UgdGhlIENNQSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcworICogYXMgdGhlaXIgRFJN IGRyaXZlcidzIC0+Z2VtX3ByaW1lX21tYXAoKSBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOgor ICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICov CitpbnQgZHJtX2dlbV9jbWFfcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwK KwkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmNtYV9vYmo7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoo b2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlj bWFfb2JqID0gdG9fZHJtX2dlbV9jbWFfb2JqKG9iaik7CisJcmV0dXJuIGRybV9nZW1fY21hX21t YXBfb2JqKGNtYV9vYmosIHZtYSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX2NtYV9w cmltZV9tbWFwKTsKKworLyoqCisgKiBkcm1fZ2VtX2NtYV9wcmltZV92bWFwIC0gbWFwIGEgQ01B IEdFTSBvYmplY3QgaW50byB0aGUga2VybmVsJ3MgdmlydHVhbAorICogICAgIGFkZHJlc3Mgc3Bh Y2UKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgYSBidWZm ZXIgZXhwb3J0ZWQgdmlhIERSTSBQUklNRSBpbnRvIHRoZSBrZXJuZWwncworICogdmlydHVhbCBh ZGRyZXNzIHNwYWNlLiBTaW5jZSB0aGUgQ01BIGJ1ZmZlcnMgYXJlIGFscmVhZHkgbWFwcGVkIGlu dG8gdGhlCisgKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRoaXMgc2ltcGx5IHJldHVy bnMgdGhlIGNhY2hlZCB2aXJ0dWFsCisgKiBhZGRyZXNzLiBEcml2ZXJzIHVzaW5nIHRoZSBDTUEg aGVscGVycyBzaG91bGQgc2V0IHRoaXMgYXMgdGhlaXIgRFJNCisgKiBkcml2ZXIncyAtPmdlbV9w cmltZV92bWFwKCkgY2FsbGJhY2suCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBrZXJuZWwgdmly dHVhbCBhZGRyZXNzIG9mIHRoZSBDTUEgR0VNIG9iamVjdCdzIGJhY2tpbmcgc3RvcmUuCisgKi8K K3ZvaWQgKmRybV9nZW1fY21hX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Cit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iaiA9IHRvX2RybV9nZW1fY21h X29iaihvYmopOworCisJcmV0dXJuIGNtYV9vYmotPnZhZGRyOworfQorRVhQT1JUX1NZTUJPTF9H UEwoZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCk7CisKKy8qKgorICogZHJtX2dlbV9jbWFfcHJpbWVf dnVubWFwIC0gdW5tYXAgYSBDTUEgR0VNIG9iamVjdCBmcm9tIHRoZSBrZXJuZWwncyB2aXJ0dWFs CisgKiAgICAgYWRkcmVzcyBzcGFjZQorICogQG9iajogR0VNIG9iamVjdAorICogQHZhZGRyOiBr ZXJuZWwgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZSBDTUEgR0VNIG9iamVjdCB3YXMgbWFwcGVk CisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgYnVmZmVyIGV4cG9ydGVkIHZpYSBEUk0g UFJJTUUgZnJvbSB0aGUga2VybmVsJ3MKKyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBp cyBhIG5vLW9wIGJlY2F1c2UgQ01BIGJ1ZmZlcnMgY2Fubm90IGJlCisgKiB1bm1hcHBlZCBmcm9t IGtlcm5lbCBzcGFjZS4gRHJpdmVycyB1c2luZyB0aGUgQ01BIGhlbHBlcnMgc2hvdWxkIHNldCB0 aGlzCisgKiBhcyB0aGVpciBEUk0gZHJpdmVyJ3MgLT5nZW1fcHJpbWVfdnVubWFwKCkgY2FsbGJh Y2suCisgKi8KK3ZvaWQgZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCB2b2lkICp2YWRkcikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CitFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXApOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaAppbmRleCBhY2Q2YWY4Li5kZGIyMzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9k cm1fZ2VtX2NtYV9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIu aApAQCAtNTMsNiArNTMsMTQgQEAgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqZHJtX2dlbV9j bWFfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qg dm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX2dlbV9jbWFfdm1fb3BzOwogCisjaWZkZWYgRFJNX0dF TV9DTUFfSEVMUEVSX05PTU1VCit1bnNpZ25lZCBsb25nIGRybV9nZW1fY21hX2dldF91bm1hcHBl ZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLAor CQkJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBnb2Zm LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJ R19ERUJVR19GUwogdm9pZCBkcm1fZ2VtX2NtYV9kZXNjcmliZShzdHJ1Y3QgZHJtX2dlbV9jbWFf b2JqZWN0ICpvYmosIHN0cnVjdCBzZXFfZmlsZSAqbSk7CiAjZW5kaWYKLS0gCjEuOS4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK