From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 11/15] drm/i915: Implementation of GuC client Date: Mon, 15 Jun 2015 19:36:29 +0100 Message-ID: <1434393394-21002-12-git-send-email-david.s.gordon@intel.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 4C65C6E89A for ; Mon, 15 Jun 2015 11:38:39 -0700 (PDT) In-Reply-To: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+CgpBIEd1QyBjbGllbnQgaGFzIGl0cyBv d24gZG9vcmJlbGwgYW5kIHdvcmtxdWV1ZS4gSXQgbWFpbnRhaW5zIHRoZQpkb29yYmVsbCBjYWNo ZSBsaW5lLCBwcm9jZXNzIGRlc2NyaXB0aW9uIG9iamVjdCBhbmQgd29yayBxdWV1ZSBpdGVtLgoK QSBkZWZhdWx0IGd1Y19jbGllbnQgaXMgY3JlYXRlZCBmb3IgdGhlIGk5MTUgZHJpdmVyIHRvIHVz ZSBmb3IKbm9ybWFsLXByaW9yaXR5IGluLW9yZGVyIHN1Ym1pc3Npb24uCgpJc3N1ZTogVklaLTQ4 ODQKU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+ClNpZ25lZC1vZmYt Ynk6IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIHwgIDY2OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAgICAgICAgICAg fCAgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYyAgICB8ICAg MTAgKwogMyBmaWxlcyBjaGFuZ2VkLCA2ODMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCA0ZWZiNzNhLi40ODdmMjk1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCkBAIC0yNyw2ICsyNyw1 MzYgQEAKICNpbmNsdWRlICJpbnRlbF9ndWMuaCIKIAogLyoqCisgKiBET0M6IEd1QyBDbGllbnQK KyAqCisgKiBpOTE1X2d1Y19jbGllbnQ6CisgKiBXZSB1c2UgdGhlIHRlcm0gY2xpZW50IHRvIGF2 b2lkIGNvbmZ1c2lvbiB3aXRoIGNvbnRleHRzLiBBIGk5MTVfZ3VjX2NsaWVudCBpcworICogZXF1 aXZhbGVudCB0byBHdUMgb2JqZWN0IGd1Y19jb250ZXh0X2Rlc2MuIFRoaXMgY29udGV4dCBkZXNj cmlwdG9yIGlzCisgKiBhbGxvY2F0ZWQgZnJvbSBhIHBvb2wgb2YgMTAyNCBlbnRyaWVzLiBLZXJu ZWwgZHJpdmVyIHdpbGwgYWxsb2NhdGUgZG9vcmJlbGwKKyAqIGFuZCB3b3JrcXVldWUgZm9yIGl0 LiBBbHNvIHRoZSBwcm9jZXNzIGRlc2NyaXB0b3IgKGd1Y19wcm9jZXNzX2Rlc2MpLCB3aGljaAor ICogaXMgbWFwcGVkIHRvIGNsaWVudCBzcGFjZS4gU28gdGhlIGNsaWVudCBjYW4gd3JpdGUgV29y ayBJdGVtIHRoZW4gcmluZyB0aGUKKyAqIGRvb3JiZWxsLgorICoKKyAqIFRvIHNpbXBsaWZ5IHRo ZSBpbXBsZW1lbnRhdGlvbiwgd2UgYWxsb2NhdGUgb25lIGdlbSBvYmplY3QgdGhhdCBjb250YWlu cyBhbGwKKyAqIHBhZ2VzIGZvciBkb29yYmVsbCwgcHJvY2VzcyBkZXNjcmlwdG9yIGFuZCB3b3Jr cXVldWUuCisgKgorICogVGhlIFNjcmF0Y2ggcmVnaXN0ZXJzOgorICogVGhlcmUgYXJlIDE2IE1N SU8tYmFzZWQgcmVnaXN0ZXJzIHN0YXJ0IGZyb20gMHhDMTgwLiBUaGUga2VybmVsIGRyaXZlciB3 cml0ZXMKKyAqIGEgdmFsdWUgdG8gdGhlIGFjdGlvbiByZWdpc3RlciAoU09GVF9TQ1JBVENIXzAp IGFsb25nIHdpdGggYW55IGRhdGEuIEl0IHRoZW4KKyAqIHRyaWdnZXJzIGFuIGludGVycnVwdCBv biB0aGUgR3VDIHZpYSBhbm90aGVyIHJlZ2lzdGVyIHdyaXRlICgweEM0QzgpLgorICogRmlybXdh cmUgd3JpdGVzIGEgc3VjY2Vzcy9mYWlsIGNvZGUgYmFjayB0byB0aGUgYWN0aW9uIHJlZ2lzdGVy IGFmdGVyCisgKiBwcm9jZXNzZXMgdGhlIHJlcXVlc3QuIFRoZSBrZXJuZWwgZHJpdmVyIHBvbGxz IHdhaXRpbmcgZm9yIHRoaXMgdXBkYXRlIGFuZAorICogdGhlbiBwcm9jZWVkcy4KKyAqIFNlZSBo b3N0Mmd1Y19hY3Rpb24oKQorICoKKyAqIERvb3JiZWxsczoKKyAqIERvb3JiZWxscyBhcmUgaW50 ZXJydXB0cyB0byB1S2VybmVsLiBBIGRvb3JiZWxsIGlzIGEgc2luZ2xlIGNhY2hlIGxpbmUgKFFX KQorICogbWFwcGVkIGludG8gcHJvY2VzcyBzcGFjZS4KKyAqCisgKiBXb3JrIEl0ZW1zOgorICog VGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2Ygd29yayBpdGVtcyB0aGF0IHRoZSBob3N0IG1heSBw bGFjZSBpbnRvIGEKKyAqIHdvcmtxdWV1ZSwgZWFjaCB3aXRoIGl0cyBvd24gcmVxdWlyZW1lbnRz IGFuZCBsaW1pdGF0aW9ucy4gQ3VycmVudGx5IG9ubHkKKyAqIFdRX1RZUEVfSU5PUkRFUiBpcyBu ZWVkZWQgdG8gc3VwcG9ydCBsZWdhY3kgc3VibWlzc2lvbiB2aWEgR3VDLCB3aGljaAorICogcmVw cmVzZW50cyBpbi1vcmRlciBxdWV1ZS4gVGhlIGtlcm5lbCBkcml2ZXIgcGFja3MgcmluZyB0YWls IHBvaW50ZXIgYW5kIGFuCisgKiBFTFNQIGNvbnRleHQgZGVzY3JpcHRvciBkd29yZCBpbnRvIFdv cmsgSXRlbS4KKyAqIFNlZSBndWNfYWRkX3dvcmtxdWV1ZV9pdGVtKCkKKyAqCisgKi8KKworLyoK KyAqIFJlYWQgR3VDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyIChTT0ZUX1NDUkFUQ0hfMCkKKyAq IFJldHVybiB0cnVlIGlmIGl0IGNvbnRhaW5zIGEgcmVzcG9uc2UgcmF0aGVyIHRoYW4gYSBjb21t YW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBob3N0Mmd1Y19nZXRfcmVzcG9uc2Uoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgdTMyICpzdGF0dXMpCit7CisJdTMy IHZhbCA9IEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMCkpOworCSpzdGF0dXMgPSB2YWw7CisJcmV0 dXJuIEdVQzJIT1NUX0lTX1JFU1BPTlNFKHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgaG9zdDJndWNf YWN0aW9uKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyICpkYXRhLCB1MzIgbGVuKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7CisJdTMy IHN0YXR1czsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04obGVuIDwgMSB8fCBs ZW4gPiAxNSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Z3Vj Lmhvc3QyZ3VjX2xvY2spOworCisJZGV2X3ByaXYtPmd1Yy5hY3Rpb25fY291bnQgKz0gMTsKKwlk ZXZfcHJpdi0+Z3VjLmFjdGlvbl9jbWQgPSBkYXRhWzBdOworCisJZm9yIChpID0gMDsgaSA8IGxl bjsgaSsrKQorCQlJOTE1X1dSSVRFKFNPRlRfU0NSQVRDSChpKSwgZGF0YVtpXSk7CisKKwlQT1NU SU5HX1JFQUQoU09GVF9TQ1JBVENIKGkgLSAxKSk7CisKKwlJOTE1X1dSSVRFKEhPU1QyR1VDX0lO VEVSUlVQVCwgSE9TVDJHVUNfVFJJR0dFUik7CisKKwlyZXQgPSB3YWl0X2Zvcl9hdG9taWMoaG9z dDJndWNfZ2V0X3Jlc3BvbnNlKGRldl9wcml2LCAmc3RhdHVzKSwgMTApOworCWlmIChzdGF0dXMg IT0gR1VDMkhPU1RfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJLyogZWl0aGVyIEd1QyBkb2Vzbid0IHJl c3BvbnNlLCB3aGljaCBpcyBhIFRJTUVPVVQsCisJCSAqIG9yIGEgZmFpbHVyZSBjb2RlIGlzIHJl dHVybmVkLiAqLworCQlpZiAocmV0ICE9IC1FVElNRURPVVQpCisJCQlyZXQgPSAtRUlPOworCisJ CURSTV9FUlJPUigiR1VDOiBob3N0Mmd1YyBhY3Rpb24gMHglWCBmYWlsZWQuIHJldD0lZCAiCisJ CQkJInN0YXR1cz0weCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAorCQkJCWRhdGFbMF0sIHJldCwg c3RhdHVzLAorCQkJCUk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7CisKKwkJZGV2X3ByaXYt Pmd1Yy5hY3Rpb25fZmFpbCArPSAxOworCQlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9lcnIgPSByZXQ7 CisJfQorCWRldl9wcml2LT5ndWMuYWN0aW9uX3N0YXR1cyA9IHN0YXR1czsKKworCXNwaW5fdW5s b2NrKCZkZXZfcHJpdi0+Z3VjLmhvc3QyZ3VjX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIFRlbGwgdGhlIEd1QyB0byBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGEgc3BlY2lmaWMg ZG9vcmJlbGwKKyAqLworCitzdGF0aWMgaW50IGhvc3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCQkgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpj bGllbnQpCit7CisJdTMyIGRhdGFbMl07CisKKwlkYXRhWzBdID0gSE9TVDJHVUNfQUNUSU9OX0FM TE9DQVRFX0RPT1JCRUxMOworCWRhdGFbMV0gPSBjbGllbnQtPmN0eF9pbmRleDsKKworCXJldHVy biBob3N0Mmd1Y19hY3Rpb24oZ3VjLCBkYXRhLCAyKTsKK30KKworc3RhdGljIGludCBob3N0Mmd1 Y19yZWxlYXNlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCQkgICAgIHN0cnVj dCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKK3sKKwl1MzIgZGF0YVsyXTsKKworCWRhdGFbMF0g PSBIT1NUMkdVQ19BQ1RJT05fREVBTExPQ0FURV9ET09SQkVMTDsKKwlkYXRhWzFdID0gY2xpZW50 LT5jdHhfaW5kZXg7CisKKwlyZXR1cm4gaG9zdDJndWNfYWN0aW9uKGd1YywgZGF0YSwgMik7Cit9 CisKKy8qCisgKiBJbml0aWFsaXNlLCB1cGRhdGUsIG9yIGNsZWFyIGRvb3JiZWxsIGRhdGEgc2hh cmVkIHdpdGggdGhlIEd1QworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtb2RpZnkgc2hhcmVkIGRh dGEgYW5kIHNvIG5lZWQgYWNjZXNzIHRvIHRoZSBtYXBwZWQKKyAqIGNsaWVudCBvYmplY3Qgd2hp Y2ggY29udGFpbnMgdGhlIHBhZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIGRvb3JiZWxsCisgKi8KKwor c3RhdGljIHZvaWQgZ3VjX2luaXRfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAorCQkJ ICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBndWNfZG9v cmJlbGxfaW5mbyAqZG9vcmJlbGw7CisJdm9pZCAqYmFzZTsKKworCWJhc2UgPSBrbWFwX2F0b21p YyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY2xpZW50LT5jbGllbnRfb2JqLCAwKSk7CisJZG9v cmJlbGwgPSBiYXNlICsgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7CisKKwlkb29yYmVsbC0+ZGJf c3RhdHVzID0gMTsKKwlkb29yYmVsbC0+Y29va2llID0gMDsKKworCWt1bm1hcF9hdG9taWMoYmFz ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ3VjX3JpbmdfZG9vcmJlbGwoc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqZ2MpCit7CisJc3RydWN0IGd1Y19wcm9jZXNzX2Rlc2MgKmRlc2M7CisJdW5pb24gZ3Vj X2Rvb3JiZWxsX3F3IGRiX2NtcCwgZGJfZXhjLCBkYl9yZXQ7CisJdW5pb24gZ3VjX2Rvb3JiZWxs X3F3ICpkYjsKKwl2b2lkICpiYXNlOworCWludCBhdHRlbXB0ID0gMiwgcmV0ID0gLUVBR0FJTjsK KworCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoZ2MtPmNsaWVu dF9vYmosIDApKTsKKwlkZXNjID0gYmFzZSArIGdjLT5wcm9jX2Rlc2Nfb2Zmc2V0OworCisJLyog VXBkYXRlIHRoZSB0YWlsIHNvIGl0IGlzIHZpc2libGUgdG8gR3VDICovCisJZGVzYy0+dGFpbCA9 IGdjLT53cV90YWlsOworCisJLyogY3VycmVudCBjb29raWUgKi8KKwlkYl9jbXAuZGJfc3RhdHVz ID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7CisJZGJfY21wLmNvb2tpZSA9IGdjLT5jb29raWU7CisK KwkvKiBjb29raWUgdG8gYmUgdXBkYXRlZCAqLworCWRiX2V4Yy5kYl9zdGF0dXMgPSBHVUNfRE9P UkJFTExfRU5BQkxFRDsKKwlkYl9leGMuY29va2llID0gZ2MtPmNvb2tpZSArIDE7CisJaWYgKGRi X2V4Yy5jb29raWUgPT0gMCkKKwkJZGJfZXhjLmNvb2tpZSA9IDE7CisKKwkvKiBwb2ludGVyIG9m IGN1cnJlbnQgZG9vcmJlbGwgY2FjaGVsaW5lICovCisJZGIgPSBiYXNlICsgZ2MtPmRvb3JiZWxs X29mZnNldDsKKworCXdoaWxlIChhdHRlbXB0LS0pIHsKKwkJLyogbGV0cyByaW5nIHRoZSBkb29y YmVsbCAqLworCQlkYl9yZXQudmFsdWVfcXcgPSBhdG9taWM2NF9jbXB4Y2hnKChhdG9taWM2NF90 ICopZGIsCisJCQlkYl9jbXAudmFsdWVfcXcsIGRiX2V4Yy52YWx1ZV9xdyk7CisKKwkJLyogaWYg dGhlIGV4Y2hhbmdlIHdhcyBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQgKi8KKwkJaWYgKGRiX3JldC52 YWx1ZV9xdyA9PSBkYl9jbXAudmFsdWVfcXcpIHsKKwkJCS8qIGRiIHdhcyBzdWNjZXNzZnVsbHkg cnVuZyAqLworCQkJZ2MtPmNvb2tpZSA9IGRiX2V4Yy5jb29raWU7CisJCQlyZXQgPSAwOworCQkJ YnJlYWs7CisJCX0KKworCQkvKiBYWFg6IGRvb3JiZWxsIHdhcyBsb3N0IGFuZCBuZWVkIHRvIGFj cXVpcmUgaXQgYWdhaW4gKi8KKwkJaWYgKGRiX3JldC5kYl9zdGF0dXMgPT0gR1VDX0RPT1JCRUxM X0RJU0FCTEVEKQorCQkJYnJlYWs7CisKKwkJRFJNX0VSUk9SKCJDb29raWUgbWlzbWF0Y2guIEV4 cGVjdGVkICVkLCByZXR1cm5lZCAlZFxuIiwKKwkJCSAgZGJfY21wLmNvb2tpZSwgZGJfcmV0LmNv b2tpZSk7CisKKwkJLyogdXBkYXRlIHRoZSBjb29raWUgdG8gbmV3bHkgcmVhZCBjb29raWUgZnJv bSBHdUMgKi8KKwkJZGJfY21wLmNvb2tpZSA9IGRiX3JldC5jb29raWU7CisJCWRiX2V4Yy5jb29r aWUgPSBkYl9yZXQuY29va2llICsgMTsKKwkJaWYgKGRiX2V4Yy5jb29raWUgPT0gMCkKKwkJCWRi X2V4Yy5jb29raWUgPSAxOworCX0KKworCWt1bm1hcF9hdG9taWMoYmFzZSk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgZ3VjX2Rpc2FibGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1 YyAqZ3VjLAorCQkJCSBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwlzdHJ1Y3Qg Z3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxsOworCXZvaWQgKmJhc2U7CisJaW50IGRyYnJlZyA9 IEdFTjhfRFJCUkVHTChjbGllbnQtPmRvb3JiZWxsX2lkKTsKKwlpbnQgdmFsdWU7CisKKwliYXNl ID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGNsaWVudC0+Y2xpZW50X29i aiwgMCkpOworCWRvb3JiZWxsID0gYmFzZSArIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0OworCisJ ZG9vcmJlbGwtPmRiX3N0YXR1cyA9IDA7CisKKwlrdW5tYXBfYXRvbWljKGJhc2UpOworCisJSTkx NV9XUklURShkcmJyZWcsIEk5MTVfUkVBRChkcmJyZWcpICYgfkdFTjhfRFJCX1ZBTElEKTsKKwor CXZhbHVlID0gSTkxNV9SRUFEKGRyYnJlZyk7CisJV0FSTl9PTigodmFsdWUgJiBHRU44X0RSQl9W QUxJRCkgIT0gMCk7CisKKwlJOTE1X1dSSVRFKEdFTjhfRFJCUkVHVShjbGllbnQtPmRvb3JiZWxs X2lkKSwgMCk7CisJSTkxNV9XUklURShkcmJyZWcsIDApOworCisJLyogWFhYOiB3YWl0IGZvciBh bnkgaW50ZXJydXB0cyAqLworCS8qIFhYWDogd2FpdCBmb3Igd29ya3F1ZXVlIHRvIGRyYWluICov Cit9CisKKy8qCisgKiBTZWxlY3QsIGFzc2lnbiBhbmQgcmVsYXNlIGRvb3JiZWxsIGNhY2hlbGlu ZXMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgdHJhY2sgd2hpY2ggZG9vcmJlbGwgY2FjaGVsaW5l cyBhcmUgaW4gdXNlLgorICogVGhlIGRhdGEgdGhleSBtYW5pcHVsYXRlIGlzIHByb3RlY3RlZCBi eSB0aGUgaG9zdDJndWMgbG9jay4KKyAqLworCitzdGF0aWMgb2ZmX3Qgc2VsZWN0X2Rvb3JiZWxs X2NhY2hlbGluZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJY29uc3QgaW50IGNhY2hlbGlu ZV9zaXplID0gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplOworCWNvbnN0IGludCBjYWNo ZWxpbmVfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBjYWNoZWxpbmVfc2l6ZTsKKwlvZmZfdCBvZmZz ZXQ7CisKKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwkvKiBEb29yYmVsbCB1 c2VzIHNpbmdsZSBjYWNoZSBsaW5lICovCisJb2Zmc2V0ID0gY2FjaGVsaW5lX3NpemUgKiBndWMt PmRiX2NhY2hlbGluZTsKKworCS8qIE1vdmluZyB0byBuZXh0IGNhY2hlIGxpbmUgdG8gcmVkdWNl IGNvbnRlbnRpb24gKi8KKwlndWMtPmRiX2NhY2hlbGluZSA9IChndWMtPmRiX2NhY2hlbGluZSAr IDEpICUgY2FjaGVsaW5lX3Blcl9wYWdlOworCisJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNf bG9jayk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgdWludDE2X3QgYXNzaWduX2Rv b3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHByaW9yaXR5KQoreworCWNvbnN0IHVp bnQxNl90IHNpemUgPSBJOTE1X01BWF9ET09SQkVMTFM7CisJdWludDE2X3QgaWQ7CisKKwlzcGlu X2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwkvKiBUaGUgYml0bWFwIGlzIHNwbGl0IGlu dG8gdHdvIGhhbHZlcyAtIGhpZ2ggYW5kIG5vcm1hbCBwcmlvcml0eS4gKi8KKwlpZiAocHJpb3Jp dHkgPD0gR1VDX0NUWF9QUklPUklUWV9ISUdIKSB7CisJCWlkID0gZmluZF9uZXh0X3plcm9fYml0 KGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBzaXplLCBzaXplIC8gMik7CisJCWlmIChpZCA9PSBzaXpl KQorCQkJaWQgPSBJTlZBTElEX0RPT1JCRUxMX0lEOworCX0gZWxzZSB7CisJCWlkID0gZmluZF9u ZXh0X3plcm9fYml0KGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBzaXplIC8gMiwgMCk7CisJCWlmIChp ZCA9PSBzaXplIC8gMikKKwkJCWlkID0gSU5WQUxJRF9ET09SQkVMTF9JRDsKKwl9CisKKwlpZiAo aWQgIT0gSU5WQUxJRF9ET09SQkVMTF9JRCkKKwkJYml0bWFwX3NldChndWMtPmRvb3JiZWxsX2Jp dG1hcCwgaWQsIDEpOworCisJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwly ZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfZG9vcmJlbGwoc3RydWN0IGludGVs X2d1YyAqZ3VjLCB1aW50MTZfdCBpZCkKK3sKKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9j ayk7CisJYml0bWFwX2NsZWFyKGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBpZCwgMSk7CisJc3Bpbl91 bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBw cm9jZXNzIGRlc2NyaXB0b3Igc2hhcmVkIHdpdGggdGhlIEd1QyBmaXJtd2FyZS4KKyAqLworc3Rh dGljIHZvaWQgZ3VjX2luaXRfcHJvY19kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCSAg ICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGd1Y19wcm9j ZXNzX2Rlc2MgKmRlc2M7CisJdm9pZCAqYmFzZTsKKworCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY2xpZW50LT5jbGllbnRfb2JqLCAwKSk7CisJZGVzYyA9IGJh c2UgKyBjbGllbnQtPnByb2NfZGVzY19vZmZzZXQ7CisKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9m KCpkZXNjKSk7CisKKwkvKgorCSAqIFhYWDogcERvb3JiZWxsIGFuZCBXUVZCYXNlQWRkcmVzcyBh cmUgcG9pbnRlcnMgaW4gcHJvY2VzcyBhZGRyZXNzCisJICogc3BhY2UgZm9yIHJpbmczIGNsaWVu dHMgKHNldCB0aGVtIGFzIGluIG1tYXBfaW9jdGwpIG9yIGtlcm5lbAorCSAqIHNwYWNlIGZvciBr ZXJuZWwgY2xpZW50cyAobWFwIG9uIGRlbWFuZCBpbnN0ZWFkPyBNYXkgbWFrZSBkZWJ1ZworCSAq IGVhc2llciB0byBoYXZlIGl0IG1hcHBlZCkuCisJICovCisJZGVzYy0+d3FfYmFzZV9hZGRyID0g MDsKKwlkZXNjLT5kYl9iYXNlX2FkZHIgPSAwOworCisJZGVzYy0+Y29udGV4dF9pZCA9IGNsaWVu dC0+Y3R4X2luZGV4OworCWRlc2MtPndxX3NpemVfYnl0ZXMgPSBjbGllbnQtPndxX3NpemU7CisJ ZGVzYy0+d3Ffc3RhdHVzID0gV1FfU1RBVFVTX0FDVElWRTsKKwlkZXNjLT5wcmlvcml0eSA9IGNs aWVudC0+cHJpb3JpdHk7CisKKwlrdW5tYXBfYXRvbWljKGJhc2UpOworfQorCisvKgorICogSW5p dGlhbGlzZS9jbGVhciB0aGUgY29udGV4dCBkZXNjcmlwdG9yIHNoYXJlZCB3aXRoIHRoZSBHdUMg ZmlybXdhcmUuCisgKgorICogVGhpcyBkZXNjcmlwdG9yIHRlbGxzIHRoZSBHdUMgd2hlcmUgKGlu IEdHVFQgc3BhY2UpIHRvIGZpbmQgdGhlIGltcG9ydGFudAorICogZGF0YSBzdHJ1Y3R1cmVzIHJl bGF0aW5nIHRvIHRoaXMgY2xpZW50IChkb29yYmVsbCwgcHJvY2VzcyBkZXNjcmlwdG9yLAorICog d3JpdGUgcXVldWUsIGV0YykuCisgKi8KKworc3RhdGljIHZvaWQgZ3VjX2luaXRfY3R4X2Rlc2Mo c3RydWN0IGludGVsX2d1YyAqZ3VjLAorCQkJICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAq Y2xpZW50KQoreworCXN0cnVjdCBndWNfY29udGV4dF9kZXNjIGRlc2M7CisJc3RydWN0IHNnX3Rh YmxlICpzZzsKKworCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCWRlc2MuYXR0 cmlidXRlID0gR1VDX0NUWF9ERVNDX0FUVFJfQUNUSVZFIHwgR1VDX0NUWF9ERVNDX0FUVFJfS0VS TkVMOworCWRlc2MuY29udGV4dF9pZCA9IGNsaWVudC0+Y3R4X2luZGV4OworCWRlc2MucHJpb3Jp dHkgPSBjbGllbnQtPnByaW9yaXR5OworCWRlc2MuZW5naW5lc191c2VkID0gKDEgPDwgUkNTKSB8 ICgxIDw8IFZDUykgfCAoMSA8PCBCQ1MpIHwKKwkJCSAgICAoMSA8PCBWRUNTKSB8ICgxIDw8IFZD UzIpOyAvKiBhbGwgZW5naW5lcyAqLworCWRlc2MuZGJfaWQgPSBjbGllbnQtPmRvb3JiZWxsX2lk OworCisJLyoKKwkgKiBUaGUgQ1BVIGFkZHJlc3MgaXMgb25seSBuZWVkZWQgYXQgY2VydGFpbiBw b2ludHMsIHNvIGttYXBfYXRvbWljIG9uCisJICogZGVtYW5kIGluc3RlYWQgb2Ygc3RvcmluZyBp dCBpbiB0aGUgY3R4IGRlc2NyaXB0b3IuCisJICogWFhYOiBNYXkgbWFrZSBkZWJ1ZyBlYXNpZXIg dG8gaGF2ZSBpdCBtYXBwZWQKKwkgKi8KKwlkZXNjLmRiX3RyaWdnZXJfY3B1ID0gMDsKKwlkZXNj LmRiX3RyaWdnZXJfdWsgPSBjbGllbnQtPmRvb3JiZWxsX29mZnNldCArCisJCWk5MTVfZ2VtX29i al9nZ3R0X29mZnNldChjbGllbnQtPmNsaWVudF9vYmopOworCWRlc2MuZGJfdHJpZ2dlcl9waHkg PSBjbGllbnQtPmRvb3JiZWxsX29mZnNldCArCisJCXNnX2RtYV9hZGRyZXNzKGNsaWVudC0+Y2xp ZW50X29iai0+cGFnZXMtPnNnbCk7CisKKwlkZXNjLnByb2Nlc3NfZGVzYyA9IGNsaWVudC0+cHJv Y19kZXNjX29mZnNldCArCisJCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjbGllbnQtPmNsaWVu dF9vYmopOworCisJZGVzYy53cV9hZGRyID0gY2xpZW50LT53cV9vZmZzZXQgKworCQlpOTE1X2dl bV9vYmpfZ2d0dF9vZmZzZXQoY2xpZW50LT5jbGllbnRfb2JqKTsKKworCWRlc2Mud3Ffc2l6ZSA9 IGNsaWVudC0+d3Ffc2l6ZTsKKworCS8qCisJICogWFhYOiBUYWtlIExSQ3MgZnJvbSBhbiBleGlz dGluZyBpbnRlbF9jb250ZXh0IGlmIHRoaXMgaXMgbm90IGFuCisJICogSXNLTURDcmVhdGVkQ29u dGV4dCBjbGllbnQKKwkgKi8KKwlkZXNjLmRlc2NfcHJpdmF0ZSA9ICh1aW50cHRyX3QpY2xpZW50 OworCisJLyogUG9vbCBjb250ZXh0IGlzIHBpbm5lZCBhbHJlYWR5ICovCisJc2cgPSBndWMtPmN0 eF9wb29sX29iai0+cGFnZXM7CisJc2dfcGNvcHlfZnJvbV9idWZmZXIoc2ctPnNnbCwgc2ctPm5l bnRzLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJICAgICBzaXplb2YoZGVzYykgKiBjbGllbnQt PmN0eF9pbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGd1Y19maW5pX2N0eF9kZXNjKHN0cnVjdCBp bnRlbF9ndWMgKmd1YywKKwkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkK K3sKKwlzdHJ1Y3QgZ3VjX2NvbnRleHRfZGVzYyBkZXNjOworCXN0cnVjdCBzZ190YWJsZSAqc2c7 CisKKwltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7CisKKwlzZyA9IGd1Yy0+Y3R4X3Bv b2xfb2JqLT5wYWdlczsKKwlzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMs ICZkZXNjLCBzaXplb2YoZGVzYyksCisJCQkgICAgIHNpemVvZihkZXNjKSAqIGNsaWVudC0+Y3R4 X2luZGV4KTsKK30KKworLyogR2V0IHZhbGlkIHdvcmtxdWV1ZSBpdGVtIGFuZCByZXR1cm4gaXQg YmFjayB0byBvZmZzZXQgKi8KK3N0YXRpYyBpbnQgZ3VjX2dldF93b3JrcXVldWVfc3BhY2Uoc3Ry dWN0IGk5MTVfZ3VjX2NsaWVudCAqZ2MsIHUzMiAqb2Zmc2V0KQoreworCXN0cnVjdCBndWNfcHJv Y2Vzc19kZXNjICpkZXNjOworCXZvaWQgKmJhc2U7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0 IGd1Y193cV9pdGVtKTsKKwlpbnQgcmV0ID0gMCwgdGltZW91dF9jb3VudGVyID0gMjAwOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0 X2dldF9wYWdlKGdjLT5jbGllbnRfb2JqLCAwKSk7CisJZGVzYyA9IGJhc2UgKyBnYy0+cHJvY19k ZXNjX29mZnNldDsKKworCXdoaWxlICh0aW1lb3V0X2NvdW50ZXItLSA+IDApIHsKKwkJc3Bpbl9s b2NrX2lycXNhdmUoJmdjLT53cV9sb2NrLCBmbGFncyk7CisKKwkJcmV0ID0gd2FpdF9mb3JfYXRv bWljKENJUkNfU1BBQ0UoZ2MtPndxX3RhaWwsIGRlc2MtPmhlYWQsCisJCQkJZ2MtPndxX3NpemUp ID49IHNpemUsIDEpOworCisJCWlmICghcmV0KSB7CisJCQkqb2Zmc2V0ID0gZ2MtPndxX3RhaWw7 CisKKwkJCS8qIGFkdmFuY2UgdGhlIHRhaWwgZm9yIG5leHQgd29ya3F1ZXVlIGl0ZW0gKi8KKwkJ CWdjLT53cV90YWlsICs9IHNpemU7CisJCQlnYy0+d3FfdGFpbCAmPSBnYy0+d3Ffc2l6ZSAtIDE7 CisKKwkJCS8qIHRoaXMgd2lsbCBicmVhayB0aGUgbG9vcCAqLworCQkJdGltZW91dF9jb3VudGVy ID0gMDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdjLT53cV9sb2NrLCBmbGFn cyk7CisJfTsKKworCWt1bm1hcF9hdG9taWMoYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAq Z2MsCisJCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAorCQkJCSAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29i aiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZl ciAqcmluZ2J1ZiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmOworCXN0cnVjdCBndWNf d3FfaXRlbSAqd3FpOworCXZvaWQgKmJhc2U7CisJdTMyIHRhaWwsIHdxX2xlbiwgd3Ffb2ZmID0g MDsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3VjX2dldF93b3JrcXVldWVfc3BhY2UoZ2MsICZ3cV9v ZmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBGb3Igbm93IHdvcmtxdWV1ZSBp dGVtIGlzIDQgRFdzOyB3b3JrcXVldWUgYnVmZmVyIGlzIDIgcGFnZXMuIFNvIHdlCisJICogc2hv dWxkIG5vdCBoYXZlIHRoZSBjYXNlIHdoZXJlIHN0cnVjdHVyZSB3cWkgaXMgYWNyb3NzIHBhZ2Us IG5laXRoZXIKKwkgKiB3cmFwcGVkIHRvIHRoZSBiZWdpbm5pbmcuIFRoaXMgc2ltcGxpZmllcyB0 aGUgaW1wbGVtZW50YXRpb24gYmVsb3cuCisJICoKKwkgKiBYWFg6IGlmIG5vdCB0aGUgY2FzZSwg d2UgbmVlZCBzYXZlIGRhdGEgdG8gYSB0ZW1wIHdxaSBhbmQgY29weSBpdCB0bworCSAqIHdvcmtx dWV1ZSBidWZmZXIgZHcgYnkgZHcuCisJICovCisJV0FSTl9PTihzaXplb2Yoc3RydWN0IGd1Y193 cV9pdGVtKSAhPSAxNik7CisJV0FSTl9PTih3cV9vZmYgJiAzKTsKKworCS8qIHdxIHN0YXJ0cyBm cm9tIHRoZSBwYWdlIGFmdGVyIGRvb3JiZWxsIC8gcHJvY2Vzc19kZXNjICovCisJYmFzZSA9IGtt YXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShnYy0+Y2xpZW50X29iaiwKKwkJCSh3 cV9vZmYgKyBHVUNfREJfU0laRSkgPj4gUEFHRV9TSElGVCkpOworCXdxX29mZiAmPSBQQUdFX1NJ WkUgLSAxOworCXdxaSA9IChzdHJ1Y3QgZ3VjX3dxX2l0ZW0gKikoKGNoYXIgKiliYXNlICsgd3Ff b2ZmKTsKKworCS8qIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBoZWFkZXIgKi8KKwl3cV9sZW4g PSBzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKSAvIHNpemVvZih1MzIpIC0gMTsKKwl3cWktPmhl YWRlciA9IFdRX1RZUEVfSU5PUkRFUiB8CisJCQkod3FfbGVuIDw8IFdRX0xFTl9TSElGVCkgfAor CQkJKHJpbmctPmlkIDw8IFdRX1RBUkdFVF9TSElGVCkgfAorCQkJV1FfTk9fV0NGTFVTSF9XQUlU OworCisJd3FpLT5jb250ZXh0X2Rlc2MgPSAodTMyKWV4ZWNsaXN0c19jdHhfZGVzY3JpcHRvcihy aW5nLCBjdHhfb2JqKTsKKworCS8qIFRoZSBHdUMgZmlybXdhcmUgd2FudHMgdGhlIHRhaWwgaW5k ZXggaW4gcXcgKi8KKwl0YWlsID0gcmluZ2J1Zi0+dGFpbCA+PiAzOworCXdxaS0+cmluZ190YWls ID0gdGFpbCA8PCBXUV9SSU5HX1RBSUxfU0hJRlQ7CisJd3FpLT5mZW5jZV9pZCA9IDA7IC8qWFhY OiB3aGF0IGZlbmNlIHRvIGJlIGhlcmUgKi8KKworCWt1bm1hcF9hdG9taWMoYmFzZSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2NvbnRleHRfaW1hZ2Uoc3RydWN0IGlu dGVsX2NvbnRleHQgKmN0eCwKKwkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKK3sK KwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IGN0eC0+ZW5naW5lW3JpbmctPmlk XS5yaW5nYnVmOworCXVuc2lnbmVkIGxvbmcgcmluZ2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQocmluZ2J1Zi0+b2JqKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29i aiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjdHhfb2JqLCBMUkNfU1RBVEVfUE4pOworCXVpbnQzMl90 ICpyZWdfc3RhdGU7CisKKwlyZWdfc3RhdGUgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwlyZWdfc3Rh dGVbQ1RYX1JJTkdfQlVGRkVSX1NUQVJUKzFdID0gcmluZ2FkZHI7CisJa3VubWFwX2F0b21pYyhy ZWdfc3RhdGUpOworfQorCisvKioKKyAqIGk5MTVfZ3VjX3N1Ym1pdCgpIC0gU3VibWl0IGNvbW1h bmRzIHRocm91Z2ggR3VDCisgKiBAY2xpZW50Ogl0aGUgZ3VjIGNsaWVudCB3aGVyZSBjb21tYW5k cyB3aWxsIGdvIHRocm91Z2gKKyAqIEBjdHg6CUxSQyB3aGVyZSBjb21tYW5kcyBjb21lIGZyb20K KyAqIEByaW5nOglIVyBlbmdpbmUgdGhhdCB3aWxsIGV4Y3V0ZSB0aGUgY29tbWFuZHMKKyAqCisg KiBSZXR1cm46CTAgaWYgc3VjY2VlZAorICovCitpbnQgaTkxNV9ndWNfc3VibWl0KHN0cnVjdCBp OTE1X2d1Y19jbGllbnQgKmNsaWVudCwKKwkJICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgs CisJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQoreworCWludCBxX3JldCwgYl9y ZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5lZWQgdGhpcyBiZWNhdXNlIG9mIHRo ZSBkZWZlcnJlZCBwaW4gY3R4IGFuZCByaW5nICovCisJLyogU2hhbGwgd2UgbW92ZSB0aGlzIHJp Z2h0IGFmdGVyIHJpbmcgaXMgcGlubmVkPyAqLworCXVwZGF0ZV9jb250ZXh0X2ltYWdlKGN0eCwg cmluZyk7CisKKwlxX3JldCA9IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oY2xpZW50LCBjdHgsIHJp bmcpOworCWlmIChxX3JldCA9PSAwKQorCQliX3JldCA9IGd1Y19yaW5nX2Rvb3JiZWxsKGNsaWVu dCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT53cV9sb2NrLCBmbGFncyk7CisJY2xp ZW50LT5zdWJtaXNzaW9ucyArPSAxOworCWlmIChxX3JldCkgeworCQljbGllbnQtPnFfZmFpbCAr PSAxOworCQljbGllbnQtPnJldGNvZGUgPSBxX3JldDsKKwl9IGVsc2UgaWYgKGJfcmV0KSB7CisJ CWNsaWVudC0+Yl9mYWlsICs9IDE7CisJCWNsaWVudC0+cmV0Y29kZSA9IHFfcmV0ID0gYl9yZXQ7 CisJfSBlbHNlIHsKKwkJY2xpZW50LT5yZXRjb2RlID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmY2xpZW50LT53cV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcV9yZXQ7Cit9CisK Ky8qCisgKiBFdmVyeXRoaW5nIGJlbG93IGhlcmUgaXMgY29uY2VybmVkIHdpdGggc2V0dXAgJiB0 ZWFyZG93biwgYW5kIGlzCisgKiB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlIHNvbWV3aGF0IHRp bWUtY3JpdGljYWwgYmF0Y2gtc3VibWlzc2lvbgorICogcGF0aCBvZiBpOTE1X2d1Y19zdWJtaXQo KSBhYm92ZS4KKyAqLworCisvKioKICAqIGdlbV9hbGxvY2F0ZV9ndWNfb2JqKCkgLSBBbGxvY2F0 ZSBnZW0gb2JqZWN0IGZvciBHdUMgdXNhZ2UKICAqIEBkZXY6CWRybSBkZXZpY2UKICAqIEBzaXpl OglzaXplIG9mIG9iamVjdApAQCAtNzUsNiArNjA1LDExOCBAQCBzdGF0aWMgdm9pZCBnZW1fcmVs ZWFzZV9ndWNfb2JqKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGd1Y19jbGll bnRfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpOTE1X2d1Y19j bGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3Vj OworCisJaWYgKCFjbGllbnQpCisJCXJldHVybjsKKworCWlmIChjbGllbnQtPmRvb3JiZWxsX2lk ICE9IElOVkFMSURfRE9PUkJFTExfSUQpIHsKKwkJLyoKKwkJICogRmlyc3QgZGlzYWJsZSB0aGUg ZG9vcmJlbGwsIHRoZW4gdGVsbCB0aGUgR3VDIHdlJ3ZlCisJCSAqIGZpbmlzaGVkIHdpdGggaXQs IGZpbmFsbHkgZGVhbGxvY2F0ZSBpdCBpbiBvdXIgYml0bWFwCisJCSAqLworCQlndWNfZGlzYWJs ZV9kb29yYmVsbChndWMsIGNsaWVudCk7CisJCWhvc3QyZ3VjX3JlbGVhc2VfZG9vcmJlbGwoZ3Vj LCBjbGllbnQpOworCQlyZWxlYXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5kb29yYmVsbF9pZCk7 CisJfQorCisJLyoKKwkgKiBYWFg6IHdhaXQgZm9yIGFueSBvdXRzdGFuZGluZyBzdWJtaXNzaW9u cyBiZWZvcmUgZnJlZWluZyBtZW1vcnkuCisJICogQmUgc3VyZSB0byBkcm9wIGFueSBsb2Nrcwor CSAqLworCisJZ2VtX3JlbGVhc2VfZ3VjX29iaihjbGllbnQtPmNsaWVudF9vYmopOworCisJaWYg KGNsaWVudC0+Y3R4X2luZGV4ICE9IElOVkFMSURfQ1RYX0lEKSB7CisJCWd1Y19maW5pX2N0eF9k ZXNjKGd1YywgY2xpZW50KTsKKwkJaWRhX3NpbXBsZV9yZW1vdmUoJmd1Yy0+Y3R4X2lkcywgY2xp ZW50LT5jdHhfaW5kZXgpOworCX0KKworCWtmcmVlKGNsaWVudCk7Cit9CisKKy8qKgorICogZ3Vj X2NsaWVudF9hbGxvYygpIC0gQWxsb2NhdGUgYW4gaTkxNV9ndWNfY2xpZW50CisgKiBAZGV2Oglk cm0gZGV2aWNlCisgKiBAcHJpb3JpdHk6CWZvdXIgbGV2ZWxzIHByaW9yaXR5IF9DUklUSUNBTCwg X0hJR0gsIF9OT1JNQUwgYW5kIF9MT1cKKyAqIAkJVGhlIGtlcm5lbCBjbGllbnQgdG8gcmVwbGFj ZSBFeGVjTGlzdCBzdWJtaXNzaW9uIGlzIGNyZWF0ZWQgd2l0aAorICogCQlOT1JNQUwgcHJpb3Jp dHkuIFByaW9yaXR5IG9mIGEgY2xpZW50IGZvciBzY2hlZHVsZXIgY2FuIGJlIEhJR0gsCisgKiAJ CXdoaWxlIGEgcHJlZW1wdGlvbiBjb250ZXh0IGNhbiB1c2UgQ1JJVElDQUwuCisgKgorICogUmV0 dXJuOglBbiBpOTE1X2d1Y19jbGllbnQgb2JqZWN0IGlmIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBz dHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpndWNfY2xpZW50X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJCQl1MzIgcHJpb3JpdHkpCit7CisJc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAq Y2xpZW50OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpj bGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlj bGllbnQtPmRvb3JiZWxsX2lkID0gSU5WQUxJRF9ET09SQkVMTF9JRDsKKwljbGllbnQtPnByaW9y aXR5ID0gcHJpb3JpdHk7CisKKwljbGllbnQtPmN0eF9pbmRleCA9ICh1aW50MzJfdClpZGFfc2lt cGxlX2dldCgmZ3VjLT5jdHhfaWRzLCAwLAorCQkJTUFYX0dVQ19HUFVfQ09OVEVYVFMsIEdGUF9L RVJORUwpOworCWlmIChjbGllbnQtPmN0eF9pbmRleCA+PSBNQVhfR1VDX0dQVV9DT05URVhUUykg eworCQljbGllbnQtPmN0eF9pbmRleCA9IElOVkFMSURfQ1RYX0lEOworCQlnb3RvIGVycjsKKwl9 CisKKwkvKiBUaGUgZmlyc3QgcGFnZSBpcyBkb29yYmVsbC9wcm9jX2Rlc2MuIFR3byBmb2xsb3dl ZCBwYWdlcyBhcmUgd3EuICovCisJb2JqID0gZ2VtX2FsbG9jYXRlX2d1Y19vYmooZGV2LCBHVUNf REJfU0laRSArIEdVQ19XUV9TSVpFKTsKKwlpZiAoIW9iaikKKwkJZ290byBlcnI7CisKKwljbGll bnQtPmNsaWVudF9vYmogPSBvYmo7CisJY2xpZW50LT53cV9vZmZzZXQgPSBHVUNfREJfU0laRTsK KwljbGllbnQtPndxX3NpemUgPSBHVUNfV1FfU0laRTsKKwlzcGluX2xvY2tfaW5pdCgmY2xpZW50 LT53cV9sb2NrKTsKKworCWNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0ID0gc2VsZWN0X2Rvb3JiZWxs X2NhY2hlbGluZShndWMpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgZG9vcmJlbGwgb25seSByZXF1 aXJlcyBhIHNpbmdsZSBjYWNoZWxpbmUsIHdlIGNhbiBzYXZlCisJICogc3BhY2UgYnkgcHV0dGlu ZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBkZXNjcmlwdG9yIGluIHRoZSBzYW1lCisJICogcGFn ZS4gVXNlIHRoZSBoYWxmIG9mIHRoZSBwYWdlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHRoZSBkb29y YmVsbC4KKwkgKi8KKwlpZiAoY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPj0gKEdVQ19EQl9TSVpF IC8gMikpCisJCWNsaWVudC0+cHJvY19kZXNjX29mZnNldCA9IDA7CisJZWxzZQorCQljbGllbnQt PnByb2NfZGVzY19vZmZzZXQgPSAoR1VDX0RCX1NJWkUgLyAyKTsKKworCWNsaWVudC0+ZG9vcmJl bGxfaWQgPSBhc3NpZ25fZG9vcmJlbGwoZ3VjLCBjbGllbnQtPnByaW9yaXR5KTsKKwlpZiAoY2xp ZW50LT5kb29yYmVsbF9pZCA9PSBJTlZBTElEX0RPT1JCRUxMX0lEKQorCQkvKiBYWFg6IGV2aWN0 IGEgZG9vcmJlbGwgaW5zdGVhZCAqLworCQlnb3RvIGVycjsKKworCWd1Y19pbml0X3Byb2NfZGVz YyhndWMsIGNsaWVudCk7CisJZ3VjX2luaXRfY3R4X2Rlc2MoZ3VjLCBjbGllbnQpOworCWd1Y19p bml0X2Rvb3JiZWxsKGd1YywgY2xpZW50KTsKKworCS8qIEludmFsaWRhdGUgR3VDIFRMQiB0byBs ZXQgR3VDIHRha2UgdGhlIGxhdGVzdCB1cGRhdGVzIHRvIEdUVC4gKi8KKwlJOTE1X1dSSVRFKEdF TjhfR1RDUiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOworCisJLyogWFhYOiBBbnkgY2FjaGUgZmx1 c2hlcyBuZWVkZWQ/IEdlbmVyYWwgZG9tYWluIG1nbXQgY2FsbHM/ICovCisKKwlpZiAoaG9zdDJn dWNfYWxsb2NhdGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpKQorCQlnb3RvIGVycjsKKworCXJldHVy biBjbGllbnQ7CisKK2VycjoKKwlndWNfY2xpZW50X2ZyZWUoZGV2LCBjbGllbnQpOworCXJldHVy biBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBndWNfY3JlYXRlX2xvZyhzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5 MTUoZ3VjKTsKQEAgLTE1MCw2ICs3OTIsMzIgQEAgaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJldHVybiAwOwogfQogCitpbnQgaTkxNV9ndWNf c3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRl bF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNs aWVudDsKKworCS8qIGNsaWVudCBmb3IgZXhlY2J1ZiBzdWJtaXNzaW9uICovCisJY2xpZW50ID0g Z3VjX2NsaWVudF9hbGxvYyhkZXYsIEdVQ19DVFhfUFJJT1JJVFlfTk9STUFMKTsKKwlpZiAoIWNs aWVudCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZXhlY2J1ZiBndWNfY2xpZW50 XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZ3VjLT5leGVjYnVmX2NsaWVudCA9IGNs aWVudDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Rpc2FibGUo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZf cHJpdi0+Z3VjOworCisJZ3VjX2NsaWVudF9mcmVlKGRldiwgZ3VjLT5leGVjYnVmX2NsaWVudCk7 CisJZ3VjLT5leGVjYnVmX2NsaWVudCA9IE5VTEw7Cit9CisKIHZvaWQgaTkxNV9ndWNfc3VibWlz c2lvbl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmgKaW5kZXggMDZiNjhjMi4uMTQ3ZDI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKQEAg LTE3Myw2ICsxNzMsMTEgQEAgZXh0ZXJuIHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2Zpbmkoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7CiAKIC8qIGk5MTVfZ3VjX3N1Ym1pc3Npb24uYyAqLwogaW50IGk5 MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpOTE1 X2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpOTE1 X2d1Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAorCQkgICAgc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eCwKKwkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Owordm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CiB2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf bG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKaW5kZXgg MGY3NDg3Ni4uNmU0NjY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Z3VjX2xvYWRlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIu YwpAQCAtMzkwLDYgKzM5MCw4IEBAIGludCBpbnRlbF9ndWNfdWNvZGVfbG9hZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBib29sIHdhaXQpCiAJaWYgKGd1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVz ID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcgJiYgIXdhaXQpCiAJCXJldHVybiAtRUFHQUlO OwogCisJaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKGRldik7CisKIAlpZiAoZ3VjX2Z3LT51 Y19md19mZXRjaF9zdGF0dXMgPT0gSU5URUxfVUNfRklSTVdBUkVfTk9ORSkKIAkJcmV0dXJuIDA7 CiAKQEAgLTQxMiwxMiArNDE0LDIwIEBAIGludCBpbnRlbF9ndWNfdWNvZGVfbG9hZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBib29sIHdhaXQpCiAKIAlndWNfZnctPnVjX2Z3X2xvYWRfc3RhdHVz ID0gSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzsKIAorCWlmIChpOTE1LmVuYWJsZV9ndWNfc3Vi bWlzc2lvbikgeworCQllcnIgPSBpOTE1X2d1Y19zdWJtaXNzaW9uX2VuYWJsZShkZXYpOworCQlp ZiAoZXJyKQorCQkJZ290byBmYWlsOworCX0KKwogCXJldHVybiAwOwogCiBmYWlsOgogCWlmIChn dWNfZnctPnVjX2Z3X2xvYWRfc3RhdHVzID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpCiAJ CWd1Y19mdy0+dWNfZndfbG9hZF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOwogCisJ aTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKGRldik7CisKIAlEUk1fRVJST1IoIkZhaWxlZCB0 byBpbml0aWFsaXplIEd1QywgZXJyb3IgJWRcbiIsIGVycik7CiAKIAlyZXR1cm4gZXJyOwotLSAK MS43LjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK