From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 26/29] drm/i915: gvt: workload scheduler Date: Thu, 28 Jan 2016 18:21:48 +0800 Message-ID: <1453976511-27322-27-git-send-email-zhi.a.wang@intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 18F606E7F8 for ; Thu, 28 Jan 2016 02:25:03 -0800 (PST) In-Reply-To: <1453976511-27322-1-git-send-email-zhi.a.wang@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, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBHVlQgd29ya2xvYWQgc2NoZWR1bGVyIHJvdXRpbmVz LgoKR1ZUIHdvcmtsb2FkIHNjaGVkdWxlciBpcyByZXNwb25zaWJsZSBmb3IgcGlja2luZyBhbmQg ZXhlY3V0aW5nIEdWVCB3b3JrbG9hZApmcm9tIGN1cnJlbnQgc2NoZWR1bGVkIHZHUFUuIEJlZm9y ZSB0aGUgd29ya2xvYWQgaXMgc3VibWl0dGVkIHRvIGhvc3QgaTkxNSwKdGhlIGd1ZXN0IGV4ZWNs aXN0IGNvbnRleHQgd2lsbCBiZSBzaGFkb3dlZCBpbiB0aGUgaG9zdCBHVlQgc2hhZG93IGNvbnRl eHQuCnRoZSBpbnN0cnVjdGlvbnMgaW4gZ3Vlc3QgcmluZyBidWZmZXIgd2lsbCBiZSBjb3BpZWQg aW50byBHVlQgc2hhZG93IHJpbmcKYnVmZmVyLiBUaGVuIEdWVC1nIHdvcmtsb2FkIHNjaGVkdWxl ciB3aWxsIHNjYW4gdGhlIGluc3RydWN0aW9ucyBpbiBndWVzdApyaW5nIGJ1ZmZlciBhbmQgc3Vi bWl0IGl0IHRvIGhvc3QgaTkxNS4KClNpZ25lZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5n QGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUgICAgfCAg IDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5oICAgICB8ICAgNCArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMgICAgICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d2dC5oICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9z Y2hlZHVsZXIuYyB8IDQ4NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5oIHwgIDI2ICstCiA2IGZpbGVzIGNoYW5n ZWQsIDUxOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYwoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9N YWtlZmlsZQppbmRleCBiYjMxNzBiLi40NmY3MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2Vm aWxlCkBAIC0xLDYgKzEsNiBAQAogR1ZUX1NPVVJDRSA6PSBndnQubyBwYXJhbXMubyBhcGVydHVy ZV9nbS5vIG1taW8ubyBoYW5kbGVycy5vIGluc3RhbmNlLm8gXAogCQl0cmFjZV9wb2ludHMubyBp bnRlcnJ1cHQubyBndHQubyBjZmdfc3BhY2UubyBvcHJlZ2lvbi5vIHV0aWxpdHkubyBcCi0JCWZi X2RlY29kZXIubyBkaXNwbGF5Lm8gZWRpZC5vIGNvbnRyb2wubyBleGVjbGlzdC5vCisJCWZiX2Rl Y29kZXIubyBkaXNwbGF5Lm8gZWRpZC5vIGNvbnRyb2wubyBleGVjbGlzdC5vIHNjaGVkdWxlci5v CiAKIGNjZmxhZ3MteQkJCSs9IC1JJChzcmMpIC1JJChzcmMpLy4uIC1XYWxsIC1XZXJyb3IgLVdu by11bnVzZWQtZnVuY3Rpb24KIGk5MTVfZ3Z0LXkJCQk6PSAkKEdWVF9TT1VSQ0UpCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9kZWJ1Zy5oCmluZGV4IDg4YjdkNDguLmM0YzAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9kZWJ1Zy5oCkBAIC03NSw2ICs3NSw3IEBAIGVudW0gewogCUdWVF9EQkdfUkVOREVSID0gKDEg PDwgNCksCiAJR1ZUX0RCR19FRElEID0gKDEgPDwgNSksCiAJR1ZUX0RCR19FTCA9ICgxIDw8IDYp LAorCUdWVF9EQkdfU0NIRUQgPSAoMSA8PCA3KSwKIH07CiAKICNkZWZpbmUgZ3Z0X2RiZ19jb3Jl KGZtdCwgYXJncy4uLikgXApAQCAtODksNCArOTAsNyBAQCBlbnVtIHsKICNkZWZpbmUgZ3Z0X2Ri Z19lbChmbXQsIGFyZ3MuLi4pIFwKIAlndnRfZGJnKEdWVF9EQkdfRUwsIGZtdCwgIyNhcmdzKQog CisjZGVmaW5lIGd2dF9kYmdfc2NoZWQoZm10LCBhcmdzLi4uKSBcCisJZ3Z0X2RiZyhHVlRfREJH X1NDSEVELCBmbXQsICMjYXJncykKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvZ3Z0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKaW5kZXgg NzdmZTVkMzkuLjhiNTZjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9n dnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKQEAgLTI4Myw2ICsyODMs NyBAQCBzdGF0aWMgYm9vbCBpbml0X3NlcnZpY2VfdGhyZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpw ZGV2KQogc3RhdGljIHZvaWQgY2xlYW5fcGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRl dikKIHsKIAljbGVhbl9zZXJ2aWNlX3RocmVhZChwZGV2KTsKKwlndnRfY2xlYW5fd29ya2xvYWRf c2NoZWR1bGVyKHBkZXYpOwogCWd2dF9jbGVhbl9jb250cm9sX2ludGVyZmFjZShwZGV2KTsKIAln dnRfY2xlYW5fZ3R0KHBkZXYpOwogCWd2dF9pcnFfZXhpdChwZGV2KTsKQEAgLTMzMCw2ICszMzEs OSBAQCBlcnI6CiAKIHN0YXRpYyBib29sIHBvc3RfaW5pdF9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3Rf ZGV2aWNlICpwZGV2KQogeworCWlmICghZ3Z0X2luaXRfd29ya2xvYWRfc2NoZWR1bGVyKHBkZXYp KQorCQlyZXR1cm4gZmFsc2U7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5oCmluZGV4IDAyZTVhNmUuLjgzZjEwMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9ndnQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKQEAgLTIy Myw2ICsyMjMsOCBAQCBzdHJ1Y3QgcGd0X2RldmljZSB7CiAKIAlzdHJ1Y3QgZ3Z0X2d0dF9pbmZv IGd0dDsKIAlzdHJ1Y3QgZ3Z0X2RldmljZV9jb250cm9sIGNvbnRyb2w7CisKKwlzdHJ1Y3QgZ3Z0 X3dvcmtsb2FkX3NjaGVkdWxlciB3b3JrbG9hZF9zY2hlZHVsZXI7CiB9OwogCiAvKiByZXF1ZXN0 IHR5cGVzIHRvIHdha2UgdXAgbWFpbiB0aHJlYWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hl ZHVsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGYxNzlmCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jCkBAIC0w LDAgKzEsNDg1IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI RQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImd2dC5oIgorCisjaW5jbHVkZSA8bGlu dXgva3RocmVhZC5oPgorCitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9zaGFkb3dfY29udGV4dChzdHJ1 Y3QgZ3Z0X3dvcmtsb2FkICp3b3JrbG9hZCkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0g d29ya2xvYWQtPnZndDsKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlz dHJ1Y3QgZ3Z0X3dvcmtsb2FkX3NjaGVkdWxlciAqc2NoZWR1bGVyID0gJnBkZXYtPndvcmtsb2Fk X3NjaGVkdWxlcjsKKwlpbnQgcmluZ19pZCA9IHdvcmtsb2FkLT5yaW5nX2lkOworCisJc3RydWN0 IGludGVsX2NvbnRleHQgKnNoYWRvd19jdHggPSBzY2hlZHVsZXItPnNoYWRvd19jdHg7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmogPSBzaGFkb3dfY3R4LT5lbmdpbmVbcmlu Z19pZF0uc3RhdGU7CisKKwlzdHJ1Y3QgZXhlY2xpc3RfcmluZ19jb250ZXh0ICpndWVzdF9yaW5n X2NvbnRleHQsICpzaGFkb3dfcmluZ19jb250ZXh0OworCisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJ dm9pZCAqc3JjLCAqZHN0OworCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfY29udGV4dF9wbiwgY29udGV4 dF9wYWdlX251bTsKKwlpbnQgaTsKKworCWd2dF9kYmdfc2NoZWQoInJpbmcgaWQgJWQgd29ya2xv YWQgbHJjYSAleCIsIHJpbmdfaWQsIHdvcmtsb2FkLT5jdHhfZGVzYy5scmNhKTsKKworCWd1ZXN0 X2NvbnRleHRfcG4gPSB3b3JrbG9hZC0+Y3R4X2Rlc2MubHJjYTsKKworCWNvbnRleHRfcGFnZV9u dW0gPSBpbnRlbF9scl9jb250ZXh0X3NpemUoJnBkZXYtPmRldl9wcml2LT5yaW5nW3JpbmdfaWRd KTsKKwljb250ZXh0X3BhZ2VfbnVtID0gY29udGV4dF9wYWdlX251bSA+PiBQQUdFX1NISUZUOwor CisJaSA9IDI7CisKKwl3aGlsZSAoaSA8IGNvbnRleHRfcGFnZV9udW0pIHsKKwkJc3JjID0gZ3Z0 X2dtYV90b192YSh2Z3QtPmd0dC5nZ3R0X21tLAorCQkJCShndWVzdF9jb250ZXh0X3BuICsgaSkg PDwgR1RUX1BBR0VfU0hJRlQpOworCQlpZiAoIXNyYykgeworCQkJZ3Z0X2VycigiaW52YWxpZCBn dWVzdCBjb250ZXh0IGRlc2NyaXB0b3IiKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXBh Z2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY3R4X29iaiwgTFJDX1BQSFdTUF9QTiArIGkp OworCQlkc3QgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJaHlwZXJ2aXNvcl9yZWFkX3ZhKHZndCwg c3JjLCBkc3QsIEdUVF9QQUdFX1NJWkUsIDEpOworCQlrdW5tYXBfYXRvbWljKGRzdCk7CisJCWkr KzsKKwl9CisKKwlndWVzdF9yaW5nX2NvbnRleHQgPSBndnRfZ21hX3RvX3ZhKHZndC0+Z3R0Lmdn dHRfbW0sCisJCQkoZ3Vlc3RfY29udGV4dF9wbiArIDEpIDw8IEdUVF9QQUdFX1NISUZUKTsKKwlp ZiAoIWd1ZXN0X3JpbmdfY29udGV4dCkgeworCQlndnRfZXJyKCJpbnZhbGlkIGd1ZXN0IGNvbnRl eHQgZGVzY3JpcHRvciIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcGFnZSA9IGk5MTVfZ2Vt X29iamVjdF9nZXRfcGFnZShjdHhfb2JqLCBMUkNfUFBIV1NQX1BOICsgMSk7CisJc2hhZG93X3Jp bmdfY29udGV4dCA9IGttYXBfYXRvbWljKHBhZ2UpOworCisjZGVmaW5lIENPUFlfUkVHKG5hbWUp IFwKKwloeXBlcnZpc29yX3JlYWRfdmEodmd0LCAmZ3Vlc3RfcmluZ19jb250ZXh0LT5uYW1lLnZh bCwgXAorCQkmc2hhZG93X3JpbmdfY29udGV4dC0+bmFtZS52YWwsIDQsIDEpOworCisJQ09QWV9S RUcoY3R4X2N0cmwpOworCUNPUFlfUkVHKGN0eF90aW1lc3RhbXApOworCisJaWYgKHJpbmdfaWQg PT0gUkNTKSB7CisJCUNPUFlfUkVHKGJiX3Blcl9jdHhfcHRyKTsKKwkJQ09QWV9SRUcocmNzX2lu ZGlyZWN0X2N0eCk7CisJCUNPUFlfUkVHKHJjc19pbmRpcmVjdF9jdHhfb2Zmc2V0KTsKKwl9Cisj dW5kZWYgQ09QWV9SRUcKKworCWd2dF9zZXRfY29udGV4dF9wZHBfcm9vdF9wb2ludGVyKHZndCwg c2hhZG93X3JpbmdfY29udGV4dCwKKwkJCXdvcmtsb2FkLT5zaGFkb3dfbW0tPnNoYWRvd19wYWdl X3RhYmxlKTsKKworCWh5cGVydmlzb3JfcmVhZF92YSh2Z3QsCisJCQkodm9pZCAqKWd1ZXN0X3Jp bmdfY29udGV4dCArIHNpemVvZigqZ3Vlc3RfcmluZ19jb250ZXh0KSwKKwkJCSh2b2lkICopc2hh ZG93X3JpbmdfY29udGV4dCArIHNpemVvZigqc2hhZG93X3JpbmdfY29udGV4dCksCisJCQlHVFRf UEFHRV9TSVpFIC0gc2l6ZW9mKCpndWVzdF9yaW5nX2NvbnRleHQpLCAxKTsKKworCWt1bm1hcF9h dG9taWMoc2hhZG93X3JpbmdfY29udGV4dCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2 b2lkIHNoYWRvd19jb250ZXh0X3NjaGVkdWxlX2luKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGd2 dF93b3JrbG9hZCAqd29ya2xvYWQgPSAoc3RydWN0IGd2dF93b3JrbG9hZCAqKWRhdGE7CisKKwlh dG9taWNfc2V0KCZ3b3JrbG9hZC0+c2hhZG93X2N0eF9hY3RpdmUsIDEpOworCXdha2VfdXAoJndv cmtsb2FkLT5zaGFkb3dfY3R4X3N0YXR1c193cSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYWRvd19j b250ZXh0X3NjaGVkdWxlX291dCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBndnRfd29ya2xvYWQg Kndvcmtsb2FkID0gKHN0cnVjdCBndnRfd29ya2xvYWQgKilkYXRhOworCisJYXRvbWljX3NldCgm d29ya2xvYWQtPnNoYWRvd19jdHhfYWN0aXZlLCAwKTsKKwl3YWtlX3VwKCZ3b3JrbG9hZC0+c2hh ZG93X2N0eF9zdGF0dXNfd3EpOworfQorCitzdGF0aWMgYm9vbCBkaXNwYXRjaF93b3JrbG9hZChz dHJ1Y3QgZ3Z0X3dvcmtsb2FkICp3b3JrbG9hZCkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 ID0gd29ya2xvYWQtPnZndDsKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsK KwlzdHJ1Y3QgZ3Z0X3dvcmtsb2FkX3NjaGVkdWxlciAqc2NoZWR1bGVyID0gJnBkZXYtPndvcmts b2FkX3NjaGVkdWxlcjsKKwlpbnQgcmluZ19pZCA9IHdvcmtsb2FkLT5yaW5nX2lkOworCXN0cnVj dCBpbnRlbF9jb250ZXh0ICpzaGFkb3dfY3R4ID0gc2NoZWR1bGVyLT5zaGFkb3dfY3R4OworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHdvcmtsb2FkLT52Z3QtPnBkZXYtPmRl dl9wcml2OworCisJZ3Z0X2RiZ19zY2hlZCgicmluZyBpZCAlZCBwcmVwYXJlIHRvIGRpc3BhdGNo IHdvcmtsb2FkICVwIiwKKwkJcmluZ19pZCwgd29ya2xvYWQpOworCisJd29ya2xvYWQtPnJlcSA9 IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MoJmRldl9wcml2LT5yaW5nW3JpbmdfaWRdLAorCQkJCQkg ICAgICAgc2hhZG93X2N0eCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKHdvcmtsb2FkLT5yZXEpKSB7 CisJCWd2dF9lcnIoImZhaWwgdG8gYWxsb2NhdGUgZ2VtIHJlcXVlc3QiKTsKKwkJd29ya2xvYWQt PnN0YXR1cyA9IFBUUl9FUlIod29ya2xvYWQtPnJlcSk7CisJCXJldHVybiB0cnVlOworCX0KKwor CWd2dF9kYmdfc2NoZWQoInJpbmcgaWQgJWQgZ2V0IGk5MTUgZ2VtIHJlcXVlc3QgJXAiLAorCQkJ cmluZ19pZCwgd29ya2xvYWQtPnJlcSk7CisKKwltdXRleF9sb2NrKCZwZGV2LT5sb2NrKTsKKwor CWlmICghcG9wdWxhdGVfc2hhZG93X2NvbnRleHQod29ya2xvYWQpKSB7CisJCXdvcmtsb2FkLT5z dGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF91bmxvY2soJnBkZXYt PmxvY2spOworCisJZ3Z0X2RiZ19zY2hlZCgicmluZyBpZCAlZCBzdWJtaXQgd29ya2xvYWQgdG8g aTkxNSAlcCIsCisJCQlyaW5nX2lkLCB3b3JrbG9hZC0+cmVxKTsKKworCXNoYWRvd19jdHgtPmd2 dF9jb250ZXh0X3ByaXZhdGVfZGF0YVtyaW5nX2lkXSA9IHdvcmtsb2FkOworCXNoYWRvd19jdHgt Pmd2dF9jb250ZXh0X2FkZHJlc3NpbmdfbW9kZVtyaW5nX2lkXSA9CisJCXdvcmtsb2FkLT5jdHhf ZGVzYy5hZGRyZXNzaW5nX21vZGUgPDwgMzsKKwlzaGFkb3dfY3R4LT5ndnRfY29udGV4dF9zY2hl ZHVsZV9pbiA9IHNoYWRvd19jb250ZXh0X3NjaGVkdWxlX2luOworCXNoYWRvd19jdHgtPmd2dF9j b250ZXh0X3NjaGVkdWxlX291dCA9IHNoYWRvd19jb250ZXh0X3NjaGVkdWxlX291dDsKKworCWk5 MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHdvcmtsb2FkLT5yZXEpOworCWk5MTVfYWRkX3JlcXVl c3Rfbm9fZmx1c2god29ya2xvYWQtPnJlcSk7CisKKwl3b3JrbG9hZC0+ZGlzcGF0Y2hlZCA9IHRy dWU7CisJcmV0dXJuIHRydWU7CitlcnI6CisJaWYgKHdvcmtsb2FkLT5yZXEpIHsKKwkJaTkxNV9n ZW1fcmVxdWVzdF9jYW5jZWwod29ya2xvYWQtPnJlcSk7CisJCXdvcmtsb2FkLT5yZXEgPSBOVUxM OworCX0KKwltdXRleF91bmxvY2soJnBkZXYtPmxvY2spOworCXJldHVybiBmYWxzZTsKK30KKwor c3RhdGljIHN0cnVjdCBndnRfd29ya2xvYWQgKnBpY2tfbmV4dF93b3JrbG9hZCgKKwkJc3RydWN0 IHBndF9kZXZpY2UgKnBkZXYsIGludCByaW5nX2lkKQoreworCXN0cnVjdCBndnRfd29ya2xvYWRf c2NoZWR1bGVyICpzY2hlZHVsZXIgPSAmcGRldi0+d29ya2xvYWRfc2NoZWR1bGVyOworCXN0cnVj dCBndnRfd29ya2xvYWQgKndvcmtsb2FkID0gTlVMTDsKKworCW11dGV4X2xvY2soJnBkZXYtPmxv Y2spOworCisJLyoKKwkgKiBubyBjdXJyZW50IGluc3RhbmNlIC8gd2lsbCBiZSBzY2hlZHVsZWQg b3V0IC8gbm8gd29ya2xvYWQKKwkgKiBiYWlsIG91dAorCSAqLworCWlmICghc2NoZWR1bGVyLT5j dXJyZW50X2luc3RhbmNlKSB7CisJCWd2dF9kYmdfc2NoZWQoInJpbmcgaWQgJWQgc3RvcCAtIG5v IGN1cnJlbnQgaW5zdGFuY2UiLCByaW5nX2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNj aGVkdWxlci0+bmVlZF9yZXNjaGVkdWxlKSB7CisJCWd2dF9kYmdfc2NoZWQoInJpbmcgaWQgJWQg c3RvcCAtIHdpbGwgcmVzY2hlZHVsZSIsIHJpbmdfaWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlp ZiAobGlzdF9lbXB0eSh3b3JrbG9hZF9xX2hlYWQoc2NoZWR1bGVyLT5jdXJyZW50X2luc3RhbmNl LCByaW5nX2lkKSkpIHsKKwkJZ3Z0X2RiZ19zY2hlZCgicmluZyBpZCAlZCBzdG9wIC0gbm8gYXZh aWFibGUgd29ya2xvYWQiLCByaW5nX2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBz dGlsbCBoYXZlIGN1cnJlbnQgd29ya2xvYWQsIG1heWJlIHRoZSB3b3JrbG9hZCBkaXNwdGFjaGVy CisJICogZmFpbCB0byBzdWJtaXQgaXQgZm9yIHNvbWUgcmVhc29uLCByZXN1Ym1pdCBpdC4KKwkg Ki8KKwlpZiAoc2NoZWR1bGVyLT5jdXJyZW50X3dvcmtsb2FkW3JpbmdfaWRdKSB7CisJCXdvcmts b2FkID0gc2NoZWR1bGVyLT5jdXJyZW50X3dvcmtsb2FkW3JpbmdfaWRdOworCQlndnRfZGJnX3Nj aGVkKCJyaW5nIGlkICVkIHN0aWxsIGhhdmUgY3VycmVudCB3b3JrbG9hZCAlcCIsCisJCQkJcmlu Z19pZCwgd29ya2xvYWQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIHBpY2sgYSB3b3Jr bG9hZCBhcyBjdXJyZW50IHdvcmtsb2FkCisJICogb25jZSBjdXJyZW50IHdvcmtsb2FkIGlzIHNl dCwgc2NoZWR1bGUgcG9saWN5IHJvdXRpbmVzCisJICogd2lsbCB3YWl0IHRoZSBjdXJyZW50IHdv cmtsb2FkIHRvIE5VTEwgd2hlbiB0cnlpbmcgdG8KKwkgKiBzY2hlZHVsZSBvdXQgYW4gaW5zdGFu Y2UuCisJICovCisJc2NoZWR1bGVyLT5jdXJyZW50X3dvcmtsb2FkW3JpbmdfaWRdID0gY29udGFp bmVyX29mKAorCQkJd29ya2xvYWRfcV9oZWFkKHNjaGVkdWxlci0+Y3VycmVudF9pbnN0YW5jZSwg cmluZ19pZCktPm5leHQsCisJCQlzdHJ1Y3QgZ3Z0X3dvcmtsb2FkLCBsaXN0KTsKKworCXdvcmts b2FkID0gc2NoZWR1bGVyLT5jdXJyZW50X3dvcmtsb2FkW3JpbmdfaWRdOworCisJZ3Z0X2RiZ19z Y2hlZCgicmluZyBpZCAlZCBwaWNrIG5ldyB3b3JrbG9hZCAlcCIsIHJpbmdfaWQsIHdvcmtsb2Fk KTsKKworCWF0b21pY19pbmMoJndvcmtsb2FkLT52Z3QtPnJ1bm5pbmdfd29ya2xvYWRfbnVtKTsK K291dDoKKwltdXRleF91bmxvY2soJnBkZXYtPmxvY2spOworCisJcmV0dXJuIHdvcmtsb2FkOwor fQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZ3Vlc3RfY29udGV4dChzdHJ1Y3QgZ3Z0X3dvcmtsb2Fk ICp3b3JrbG9hZCkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gd29ya2xvYWQtPnZndDsK KwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgZ3Z0X3dvcmts b2FkX3NjaGVkdWxlciAqc2NoZWR1bGVyID0gJnBkZXYtPndvcmtsb2FkX3NjaGVkdWxlcjsKKwlp bnQgcmluZ19pZCA9IHdvcmtsb2FkLT5yaW5nX2lkOworCisJc3RydWN0IGludGVsX2NvbnRleHQg KnNoYWRvd19jdHggPSBzY2hlZHVsZXItPnNoYWRvd19jdHg7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKmN0eF9vYmogPSBzaGFkb3dfY3R4LT5lbmdpbmVbcmluZ19pZF0uc3RhdGU7CisK KwlzdHJ1Y3QgZXhlY2xpc3RfcmluZ19jb250ZXh0ICpndWVzdF9yaW5nX2NvbnRleHQsICpzaGFk b3dfcmluZ19jb250ZXh0OworCisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqc3JjLCAqZHN0 OworCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfY29udGV4dF9wbiwgY29udGV4dF9wYWdlX251bTsKKwlp bnQgaTsKKworCWd2dF9kYmdfc2NoZWQoInJpbmcgaWQgJWQgd29ya2xvYWQgbHJjYSAleCIsIHJp bmdfaWQsIHdvcmtsb2FkLT5jdHhfZGVzYy5scmNhKTsKKworCWd1ZXN0X2NvbnRleHRfcG4gPSB3 b3JrbG9hZC0+Y3R4X2Rlc2MubHJjYTsKKworCWNvbnRleHRfcGFnZV9udW0gPSBpbnRlbF9scl9j b250ZXh0X3NpemUoJnBkZXYtPmRldl9wcml2LT5yaW5nW3JpbmdfaWRdKTsKKwljb250ZXh0X3Bh Z2VfbnVtID0gY29udGV4dF9wYWdlX251bSA+PiBQQUdFX1NISUZUOworCisJaSA9IDI7CisKKwl3 aGlsZSAoaSA8IGNvbnRleHRfcGFnZV9udW0pIHsKKwkJZHN0ID0gZ3Z0X2dtYV90b192YSh2Z3Qt Pmd0dC5nZ3R0X21tLAorCQkJCShndWVzdF9jb250ZXh0X3BuICsgaSkgPDwgR1RUX1BBR0VfU0hJ RlQpOworCQlpZiAoIWRzdCkgeworCQkJZ3Z0X2VycigiaW52YWxpZCBndWVzdCBjb250ZXh0IGRl c2NyaXB0b3IiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3Rf Z2V0X3BhZ2UoY3R4X29iaiwgTFJDX1BQSFdTUF9QTiArIGkpOworCQlzcmMgPSBrbWFwX2F0b21p YyhwYWdlKTsKKwkJaHlwZXJ2aXNvcl93cml0ZV92YSh2Z3QsIGRzdCwgc3JjLCBHVFRfUEFHRV9T SVpFLCAxKTsKKwkJa3VubWFwX2F0b21pYyhkc3QpOworCQlpKys7CisJfQorCisJZ3Vlc3Rfcmlu Z19jb250ZXh0ID0gZ3Z0X2dtYV90b192YSh2Z3QtPmd0dC5nZ3R0X21tLAorCQkJKGd1ZXN0X2Nv bnRleHRfcG4gKyAxKSA8PCBHVFRfUEFHRV9TSElGVCk7CisJaWYgKCFndWVzdF9yaW5nX2NvbnRl eHQpIHsKKwkJZ3Z0X2VycigiaW52YWxpZCBndWVzdCBjb250ZXh0IGRlc2NyaXB0b3IiKTsKKwkJ cmV0dXJuOworCX0KKworCWh5cGVydmlzb3Jfd3JpdGVfdmEodmd0LCAmZ3Vlc3RfcmluZ19jb250 ZXh0LT5yaW5nX2hlYWRlci52YWwsCisJCSZ3b3JrbG9hZC0+cmJfdGFpbCwgNCwgMSk7CisKKwlw YWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGN0eF9vYmosIExSQ19QUEhXU1BfUE4gKyAx KTsKKwlzaGFkb3dfcmluZ19jb250ZXh0ID0ga21hcF9hdG9taWMocGFnZSk7CisKKyNkZWZpbmUg Q09QWV9SRUcobmFtZSkgXAorCWh5cGVydmlzb3Jfd3JpdGVfdmEodmd0LCAmZ3Vlc3RfcmluZ19j b250ZXh0LT5uYW1lLnZhbCwgXAorCQkmc2hhZG93X3JpbmdfY29udGV4dC0+bmFtZS52YWwsIDQs IDEpOworCisJQ09QWV9SRUcoY3R4X2N0cmwpOworCUNPUFlfUkVHKGN0eF90aW1lc3RhbXApOwor CisjdW5kZWYgQ09QWV9SRUcKKworCWh5cGVydmlzb3Jfd3JpdGVfdmEodmd0LAorCQkJKHZvaWQg KilndWVzdF9yaW5nX2NvbnRleHQgKyBzaXplb2YoKmd1ZXN0X3JpbmdfY29udGV4dCksCisJCQko dm9pZCAqKXNoYWRvd19yaW5nX2NvbnRleHQgKyBzaXplb2YoKnNoYWRvd19yaW5nX2NvbnRleHQp LAorCQkJR1RUX1BBR0VfU0laRSAtIHNpemVvZigqZ3Vlc3RfcmluZ19jb250ZXh0KSwgMSk7CisK KwlrdW5tYXBfYXRvbWljKHNoYWRvd19yaW5nX2NvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBj b21wbGV0ZV9jdXJyZW50X3dvcmtsb2FkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LCBpbnQgcmlu Z19pZCkKK3sKKwlzdHJ1Y3QgZ3Z0X3dvcmtsb2FkX3NjaGVkdWxlciAqc2NoZWR1bGVyID0gJnBk ZXYtPndvcmtsb2FkX3NjaGVkdWxlcjsKKwlzdHJ1Y3QgZ3Z0X3dvcmtsb2FkICp3b3JrbG9hZDsK KworCW11dGV4X2xvY2soJnBkZXYtPmxvY2spOworCisJd29ya2xvYWQgPSBzY2hlZHVsZXItPmN1 cnJlbnRfd29ya2xvYWRbcmluZ19pZF07CisKKwlpZiAoIXdvcmtsb2FkLT5zdGF0dXMpIHsKKwkJ d2FpdF9ldmVudCh3b3JrbG9hZC0+c2hhZG93X2N0eF9zdGF0dXNfd3EsCisJCQkJIWF0b21pY19y ZWFkKCZ3b3JrbG9hZC0+c2hhZG93X2N0eF9hY3RpdmUpKTsKKwkJdXBkYXRlX2d1ZXN0X2NvbnRl eHQod29ya2xvYWQpOworCX0KKworCWlmICh3b3JrbG9hZC0+cmVxKQorCQlpOTE1X2dlbV9yZXF1 ZXN0X3VucmVmZXJlbmNlKHdvcmtsb2FkLT5yZXEpOworCisJZ3Z0X2RiZ19zY2hlZCgicmluZyBp ZCAlZCBjb21wbGV0ZSB3b3JrbG9hZCAlcCBzdGF0dXMgJWQiLAorCQkJcmluZ19pZCwgd29ya2xv YWQsIHdvcmtsb2FkLT5zdGF0dXMpOworCisJc2NoZWR1bGVyLT5jdXJyZW50X3dvcmtsb2FkW3Jp bmdfaWRdID0gTlVMTDsKKworCWF0b21pY19kZWMoJndvcmtsb2FkLT52Z3QtPnJ1bm5pbmdfd29y a2xvYWRfbnVtKTsKKworCWxpc3RfZGVsX2luaXQoJndvcmtsb2FkLT5saXN0KTsKKwl3b3JrbG9h ZC0+Y29tcGxldGUod29ya2xvYWQpOworCisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNjaGVkdWxl ci0+d29ya2xvYWRfY29tcGxldGVfd3EpKQorCQl3YWtlX3VwKCZzY2hlZHVsZXItPndvcmtsb2Fk X2NvbXBsZXRlX3dxKTsKKworCW11dGV4X3VubG9jaygmcGRldi0+bG9jayk7Cit9CisKK3N0cnVj dCB3b3JrbG9hZF90aHJlYWRfcGFyYW0geworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2OworCWlu dCByaW5nX2lkOworfTsKKworc3RhdGljIGludCB3b3JrbG9hZF90aHJlYWQodm9pZCAqcHJpdikK K3sKKwlzdHJ1Y3Qgd29ya2xvYWRfdGhyZWFkX3BhcmFtICpwID0gKHN0cnVjdCB3b3JrbG9hZF90 aHJlYWRfcGFyYW0gKilwcml2OworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gcC0+cGRldjsK KwlpbnQgcmluZ19pZCA9IHAtPnJpbmdfaWQ7CisJc3RydWN0IGd2dF93b3JrbG9hZF9zY2hlZHVs ZXIgKnNjaGVkdWxlciA9ICZwZGV2LT53b3JrbG9hZF9zY2hlZHVsZXI7CisJc3RydWN0IGd2dF93 b3JrbG9hZCAqd29ya2xvYWQgPSBOVUxMOworCWludCByOworCisJa2ZyZWUocCk7CisKKwlndnRf ZGJnX2NvcmUoIndvcmtsb2FkIHRocmVhZCBmb3IgcmluZyAlZCBzdGFydGVkIiwgcmluZ19pZCk7 CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlyID0gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlKHNjaGVkdWxlci0+d2FpdHFbcmluZ19pZF0sCisJCQkJa3RocmVhZF9zaG91 bGRfc3RvcCgpIHx8CisJCQkJKHdvcmtsb2FkID0gcGlja19uZXh0X3dvcmtsb2FkKHBkZXYsIHJp bmdfaWQpKSk7CisKKwkJaWYgKHIpCisJCQlndnRfd2Fybigid29ya2xvYWQgdGhyZWFkIHdha2Vu IHVwIGJ5IHVuZXhwZWN0ZWQgc2lnbmFsISIpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9w KCkpCisJCQlicmVhazsKKworCQlndnRfZGJnX3NjaGVkKCJyaW5nIGlkICVkIG5leHQgd29ya2xv YWQgJXAgdmd0ICVkIiwKKwkJCQl3b3JrbG9hZC0+cmluZ19pZCwgd29ya2xvYWQsIHdvcmtsb2Fk LT52Z3QtPmlkKTsKKworCQkvKgorCQkgKiBBbHdheXMgdGFrZSBpOTE1IGJpZyBsb2NrIGZpcnN0 CisJCSAqLworCQlyID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUocGRldi0+ZGV2X3By aXYtPmRldik7CisJCWlmIChyIDwgMCkgeworCQkJZ3Z0X3dhcm4oImk5MTUgc3VibWlzc2lvbiBj aGFubmVsIGlzIG5vdCBhdmFpbGFibGUsIHJldHJ5Iik7CisJCQlzY2hlZHVsZV90aW1lb3V0KDEp OworCQkJY29udGludWU7CisJCX0KKworCQlndnRfZGJnX3NjaGVkKCJyaW5nIGlkICVkIHdpbGwg ZGlzcGF0Y2ggd29ya2xvYWQgJXAiLAorCQkJCXdvcmtsb2FkLT5yaW5nX2lkLCB3b3JrbG9hZCk7 CisKKwkJaWYgKCFkaXNwYXRjaF93b3JrbG9hZCh3b3JrbG9hZCkpIHsKKwkJCWd2dF93YXJuKCJm YWlsIHRvIGRpc3BhdGNoIHdvcmtsb2FkLCBza2lwIik7CisJCQlnb3RvIGNvbXBsZXRlOworCQl9 CisKKwkJZ3Z0X2RiZ19zY2hlZCgicmluZyBpZCAlZCB3YWl0IHdvcmtsb2FkICVwIiwKKwkJCQl3 b3JrbG9hZC0+cmluZ19pZCwgd29ya2xvYWQpOworCisJCXdvcmtsb2FkLT5zdGF0dXMgPSBpOTE1 X3dhaXRfcmVxdWVzdCh3b3JrbG9hZC0+cmVxKTsKKwkJaWYgKHdvcmtsb2FkLT5zdGF0dXMgIT0g MCkKKwkJCWd2dF93YXJuKCJmYWlsIHRvIHdhaXQgd29ya2xvYWQsIHNraXAiKTsKKworY29tcGxl dGU6CisJCWd2dF9kYmdfc2NoZWQoIndpbGwgY29tcGxldGUgd29ya2xvYWQgJXAsIHN0YXR1czog JWQiLAorCQkJCXdvcmtsb2FkLCB3b3JrbG9hZC0+c3RhdHVzKTsKKworCQljb21wbGV0ZV9jdXJy ZW50X3dvcmtsb2FkKHBkZXYsIHJpbmdfaWQpOworCQltdXRleF91bmxvY2soJnBkZXYtPmRldl9w cml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ3Z0 X3dhaXRfaW5zdGFuY2VfaWRsZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0cnVjdCBw Z3RfZGV2aWNlICpwZGV2ID0gdmd0LT5wZGV2OworCXN0cnVjdCBndnRfd29ya2xvYWRfc2NoZWR1 bGVyICpzY2hlZHVsZXIgPSAmcGRldi0+d29ya2xvYWRfc2NoZWR1bGVyOworCisJaWYgKGF0b21p Y19yZWFkKCZ2Z3QtPnJ1bm5pbmdfd29ya2xvYWRfbnVtKSkgeworCQlndnRfZGJnX3NjaGVkKCJ3 YWl0IGluc3RhbmNlIGlkbGUiKTsKKworCQl3YWl0X2V2ZW50KHNjaGVkdWxlci0+d29ya2xvYWRf Y29tcGxldGVfd3EsCisJCQkJIWF0b21pY19yZWFkKCZ2Z3QtPnJ1bm5pbmdfd29ya2xvYWRfbnVt KSk7CisJfQorfQorCit2b2lkIGd2dF9jbGVhbl93b3JrbG9hZF9zY2hlZHVsZXIoc3RydWN0IHBn dF9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGd2dF93b3JrbG9hZF9zY2hlZHVsZXIgKnNjaGVk dWxlciA9ICZwZGV2LT53b3JrbG9hZF9zY2hlZHVsZXI7CisJaW50IGk7CisKKwlndnRfZGJnX2Nv cmUoImNsZWFuIHdvcmtsb2FkIHNjaGVkdWxlciIpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVf TlVNX1JJTkdTOyBpKyspIHsKKwkJaWYgKHNjaGVkdWxlci0+dGhyZWFkW2ldKSB7CisJCQlrdGhy ZWFkX3N0b3Aoc2NoZWR1bGVyLT50aHJlYWRbaV0pOworCQkJc2NoZWR1bGVyLT50aHJlYWRbaV0g PSBOVUxMOworCQl9CisJfQorCisJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShzY2hlZHVs ZXItPnNoYWRvd19jdHgpOworCXNjaGVkdWxlci0+c2hhZG93X2N0eCA9IE5VTEw7Cit9CisKK2Jv b2wgZ3Z0X2luaXRfd29ya2xvYWRfc2NoZWR1bGVyKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBndnRfd29ya2xvYWRfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSAmcGRldi0+d29y a2xvYWRfc2NoZWR1bGVyOworCXN0cnVjdCB3b3JrbG9hZF90aHJlYWRfcGFyYW0gKnBhcmFtID0g TlVMTDsKKwlpbnQgaTsKKworCWd2dF9kYmdfY29yZSgiaW5pdCB3b3JrbG9hZCBzY2hlZHVsZXIi KTsKKworCW1lbXNldChzY2hlZHVsZXIsIDAsIHNpemVvZigqc2NoZWR1bGVyKSk7CisKKwlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZzY2hlZHVsZXItPndvcmtsb2FkX2NvbXBsZXRlX3dxKTsKKworCXNj aGVkdWxlci0+c2hhZG93X2N0eCA9IGk5MTVfZ2VtX2NyZWF0ZV9ndnRfY29udGV4dChwZGV2LT5k ZXZfcHJpdi0+ZGV2KTsKKwlpZiAoIXNjaGVkdWxlci0+c2hhZG93X2N0eCkgeworCQlndnRfZXJy KCJmYWlsIHRvIGNyZWF0ZSBzaGFkb3cgY29udGV4dCIpOworCQlnb3RvIGVycjsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZzY2hlZHVsZXItPndhaXRxW2ldKTsKKworCQlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpw YXJhbSksIEdGUF9LRVJORUwpOworCQlpZiAoIXBhcmFtKSB7CisJCQlndnRfZXJyKCJmYWlsIHRv IGFsbG9jYXRlIHdvcmtsb2FkIHRocmVhZCBwYXJhbSIpOworCQkJZ290byBlcnI7CisJCX0KKwor CQlwYXJhbS0+cGRldiA9IHBkZXY7CisJCXBhcmFtLT5yaW5nX2lkID0gaTsKKworCQlzY2hlZHVs ZXItPnRocmVhZFtpXSA9IGt0aHJlYWRfcnVuKHdvcmtsb2FkX3RocmVhZCwgcGFyYW0sCisJCQki Z3Z0IHdvcmtsb2FkICVkIiwgaSk7CisJCWlmICghc2NoZWR1bGVyLT50aHJlYWRbaV0pIHsKKwkJ CWd2dF9lcnIoImZhaWwgdG8gY3JlYXRlIHdvcmtsb2FkIHRocmVhZCIpOworCQkJZ290byBlcnI7 CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK2VycjoKKwlpZiAocGFyYW0pIHsKKwkJa2ZyZWUo cGFyYW0pOworCQlwYXJhbSA9IE5VTEw7CisJfQorCWd2dF9jbGVhbl93b3JrbG9hZF9zY2hlZHVs ZXIocGRldik7CisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L3NjaGVkdWxlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxl ci5oCmluZGV4IGRkMjRmZGEuLmM0ZTdmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9zY2hlZHVsZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1 bGVyLmgKQEAgLTI0LDYgKzI0LDE5IEBACiAjaWZuZGVmIF9HVlRfU0NIRURVTEVSX0hfCiAjZGVm aW5lIF9HVlRfU0NIRURVTEVSX0hfCiAKK3N0cnVjdCBndnRfd29ya2xvYWRfc2NoZWR1bGVyIHsK KwlzdHJ1Y3Qgdmd0X2RldmljZSAqY3VycmVudF9pbnN0YW5jZTsKKwlzdHJ1Y3Qgdmd0X2Rldmlj ZSAqbmV4dF9pbnN0YW5jZTsKKwlzdHJ1Y3QgZ3Z0X3dvcmtsb2FkICpjdXJyZW50X3dvcmtsb2Fk W0k5MTVfTlVNX1JJTkdTXTsKKwlib29sIG5lZWRfcmVzY2hlZHVsZTsKKworCXN0cnVjdCBpbnRl bF9jb250ZXh0ICpzaGFkb3dfY3R4OworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd29ya2xvYWRfY29t cGxldGVfd3E7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWRbSTkxNV9OVU1fUklOR1NdOwor CXdhaXRfcXVldWVfaGVhZF90IHdhaXRxW0k5MTVfTlVNX1JJTkdTXTsKK307CisKIHN0cnVjdCBn dnRfd29ya2xvYWQgewogCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Q7CiAJaW50IHJpbmdfaWQ7CkBA IC01Miw4ICs2NSwxNSBAQCBzdHJ1Y3QgZ3Z0X3dvcmtsb2FkIHsKICNkZWZpbmUgd29ya2xvYWRf cV9oZWFkKHZndCwgcmluZ19pZCkgXAogCSgmKHZndC0+dmlydHVhbF9leGVjbGlzdF9pbmZvW3Jp bmdfaWRdLndvcmtsb2FkX3FfaGVhZCkpCiAKLSNkZWZpbmUgcXVldWVfd29ya2xvYWQod29ya2xv YWQpIFwKLQlsaXN0X2FkZF90YWlsKCZ3b3JrbG9hZC0+bGlzdCwgXAotCXdvcmtsb2FkX3FfaGVh ZCh3b3JrbG9hZC0+dmd0LCB3b3JrbG9hZC0+cmluZ19pZCkpCisjZGVmaW5lIHF1ZXVlX3dvcmts b2FkKHdvcmtsb2FkKSBkbyB7IFwKKwlsaXN0X2FkZF90YWlsKCZ3b3JrbG9hZC0+bGlzdCwgd29y a2xvYWRfcV9oZWFkKHdvcmtsb2FkLT52Z3QsIHdvcmtsb2FkLT5yaW5nX2lkKSk7IFwKKwl3YWtl X3VwKCZ3b3JrbG9hZC0+dmd0LT5wZGV2LT53b3JrbG9hZF9zY2hlZHVsZXIud2FpdHFbd29ya2xv YWQtPnJpbmdfaWRdKTsgXAorfXdoaWxlKDApCisKK2Jvb2wgZ3Z0X2luaXRfd29ya2xvYWRfc2No ZWR1bGVyKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KTsKKwordm9pZCBndnRfY2xlYW5fd29ya2xv YWRfc2NoZWR1bGVyKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KTsKKwordm9pZCBndnRfd2FpdF9p bnN0YW5jZV9pZGxlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpOwogCiAjZW5kaWYKLS0gCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=