From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 19/29] drm/i915: gvt: vGPU OpRegion emulation Date: Thu, 28 Jan 2016 18:21:41 +0800 Message-ID: <1453976511-27322-20-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 CE18F6E7FC for ; Thu, 28 Jan 2016 02:24:50 -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 VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSB2R1BVIE9wUmVnaW9uIGVtdWxhdGlvbiByb3V0aW5l cyBiYXNlZCBvbiB0aGUKTVBUIHNlcnZpY2VzIGFuZCBHVlQtZyBDRkcvTU1JTyBlbXVsYXRpb24g ZnJhbWV3b3JrIHRvIHN1cHBvcnQgZ3Vlc3QgT3BSZWdpb24KZmFjaWxpdGllcy4KClNpZ25lZC1v ZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvTWFrZWZpbGUgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9jZmdfc3BhY2UuYyB8ICAxMyArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jICAg ICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaCAgICAgICB8ICAxMiAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMgIHwgICA2ICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9vcHJlZ2lvbi5jICB8IDMxNCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L29wcmVnaW9uLmggIHwgIDM0 ICsrKysKIDcgZmlsZXMgY2hhbmdlZCwgMzgzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L29wcmVnaW9uLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvb3ByZWdpb24uaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQppbmRleCBhODIxZDNkLi44ZjU5YmJjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogR1ZUX1NPVVJDRSA6PSBndnQu byBwYXJhbXMubyBhcGVydHVyZV9nbS5vIG1taW8ubyBoYW5kbGVycy5vIGluc3RhbmNlLm8gXAot CQl0cmFjZV9wb2ludHMubyBpbnRlcnJ1cHQubyBndHQubyBjZmdfc3BhY2UubyB1dGlsaXR5Lm8g ZmJfZGVjb2Rlci5vCisJCXRyYWNlX3BvaW50cy5vIGludGVycnVwdC5vIGd0dC5vIGNmZ19zcGFj ZS5vIG9wcmVnaW9uLm8gdXRpbGl0eS5vIGZiX2RlY29kZXIubwogCiBjY2ZsYWdzLXkJCQkrPSAt SSQoc3JjKSAtSSQoc3JjKS8uLiAtV2FsbCAtV2Vycm9yIC1Xbm8tdW51c2VkLWZ1bmN0aW9uCiBp OTE1X2d2dC15CQkJOj0gJChHVlRfU09VUkNFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2NmZ19zcGFjZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2NmZ19zcGFj ZS5jCmluZGV4IGJkYTBlOWQuLmFiMzUxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9jZmdfc3BhY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvY2ZnX3Nw YWNlLmMKQEAgLTEzNSw2ICsxMzUsMTkgQEAgYm9vbCBndnRfZW11bGF0ZV9jZmdfd3JpdGUoc3Ry dWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9mZiwKIAkJCQkJKihjaGFyICopcF9k YXRhLCBieXRlcyk7CiAJCQlicmVhazsKIAorCQljYXNlIEdWVF9SRUdfQ0ZHX1NXU0NJX1RSSUdH RVI6CisJCQluZXcgPSAqKHUzMiAqKXBfZGF0YTsKKwkJCWd2dF9lbXVsYXRlX29wcmVnaW9uX3Jl cXVlc3Qodmd0LCBuZXcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBHVlRfUkVHX0NGR19PUFJFR0lP TjoKKwkJCW5ldyA9ICoodTMyICopcF9kYXRhOworCQkJaWYgKCFndnRfaW5pdF9pbnN0YW5jZV9v cHJlZ2lvbih2Z3QsIG5ldykpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQltZW1jcHkoJnZndC0+ c3RhdGUuY2ZnLnNwYWNlW29mZl0sIHBfZGF0YSwgYnl0ZXMpOworCQkJYnJlYWs7CisKIAkJY2Fz ZSBHVlRfUkVHX0NGR19TUEFDRV9CQVIxKzQ6CiAJCWNhc2UgR1ZUX1JFR19DRkdfU1BBQ0VfQkFS MCs0OgogCQljYXNlIEdWVF9SRUdfQ0ZHX1NQQUNFX0JBUjIrNDoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQu YwppbmRleCAzMjg1M2IyLi42M2ViMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZ3Z0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCkBAIC0yNjMs NiArMjYzLDcgQEAgc3RhdGljIHZvaWQgY2xlYW5fcGd0X2RldmljZShzdHJ1Y3QgcGd0X2Rldmlj ZSAqcGRldikKIAlndnRfY2xlYW5fZ3R0KHBkZXYpOwogCWd2dF9pcnFfZXhpdChwZGV2KTsKIAln dnRfY2xlYW5fbW1pb19lbXVsYXRpb25fc3RhdGUocGRldik7CisJZ3Z0X2NsZWFuX29wcmVnaW9u KHBkZXYpOwogCWNsZWFuX2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKIAlndnRfY2xlYW5fcmVz b3VyY2VfYWxsb2NhdG9yKHBkZXYpOwogfQpAQCAtMjc3LDYgKzI3OCw5IEBAIHN0YXRpYyBib29s IGluaXRfcGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRlCiAJaWYgKCFpbml0X2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KSkKIAkJZ290 byBlcnI7CiAKKwlpZiAoIWd2dF9pbml0X29wcmVnaW9uKHBkZXYpKQorCQlnb3RvIGVycjsKKwog CWd2dF9pbml0X3Jlc291cmNlX2FsbG9jYXRvcihwZGV2KTsKIAogCWlmICghZ3Z0X3NldHVwX21t aW9fZW11bGF0aW9uX3N0YXRlKHBkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2d2dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IDI0NGQ4 NzY0Li5jZjg4YmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCkBAIC0zNyw2ICszNyw3IEBACiAj aW5jbHVkZSAicGVyZi5oIgogI2luY2x1ZGUgImd0dC5oIgogI2luY2x1ZGUgImNmZ19zcGFjZS5o IgorI2luY2x1ZGUgIm9wcmVnaW9uLmgiCiAKICNkZWZpbmUgR1ZUX01BWF9WR1BVIDgKIApAQCAt MTAwLDcgKzEwMSwxMiBAQCBzdHJ1Y3QgZ3Z0X3ZpcnR1YWxfY2ZnX3N0YXRlIHsKIAl1bnNpZ25l ZCBjaGFyIHNwYWNlW0dWVF9DRkdfU1BBQ0VfU1pdOwogCWJvb2wgYmFyX21hcHBlZFtHVlRfQkFS X05VTV07CiAJdTY0IGJhcl9zaXplW0dWVF9CQVJfTlVNXTsKLQl2b2lkICpvcHJlZ2lvbl92YTsK K307CisKK3N0cnVjdCBndnRfdmlydHVhbF9vcHJlZ2lvbl9zdGF0ZSB7CisJdm9pZCAqdmE7CisJ dTY0IGdmbltHVlRfT1BSRUdJT05fUEFHRVNdOworCXN0cnVjdCBwYWdlICpwYWdlc1tHVlRfT1BS RUdJT05fUEFHRVNdOwogfTsKIAogc3RydWN0IGd2dF92aXJ0dWFsX2dtX3N0YXRlIHsKQEAgLTEx OSw2ICsxMjUsNyBAQCBzdHJ1Y3QgZ3Z0X3ZpcnR1YWxfZGV2aWNlX3N0YXRlIHsKIAlzdHJ1Y3Qg Z3Z0X3ZpcnR1YWxfZ21fc3RhdGUgZ207CiAJc3RydWN0IGd2dF92aXJ0dWFsX21taW9fc3RhdGUg bW1pbzsKIAlzdHJ1Y3QgZ3Z0X3ZpcnR1YWxfY2ZnX3N0YXRlIGNmZzsKKwlzdHJ1Y3QgZ3Z0X3Zp cnR1YWxfb3ByZWdpb25fc3RhdGUgb3ByZWdpb247CiB9OwogCiBzdHJ1Y3Qgdmd0X2RldmljZSB7 CkBAIC0xNjEsNiArMTY4LDkgQEAgc3RydWN0IHBndF9kZXZpY2UgewogCXUzMiBtbWlvX3NpemU7 CiAJdTMyIHJlZ19udW07CiAKKwl2b2lkICpvcHJlZ2lvbl92YTsKKwl1MzIgb3ByZWdpb25fcGE7 CisKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzZXJ2aWNlX3RocmVhZF93cTsKIAlzdHJ1Y3QgdGFza19z dHJ1Y3QgKnNlcnZpY2VfdGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgc2VydmljZV9yZXF1ZXN0Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYwppbmRleCAxNTQwNjYxLi45MWY1MmM2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYwpAQCAtMTY1LDYgKzE2NSw3IEBAIHN0YXRpYyB2 b2lkIGRlc3Ryb3lfdmlydHVhbF9kZXZpY2Vfc3RhdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCkK IAlndnRfY2xlYW5fdmd0dCh2Z3QpOwogCWRlc3Ryb3lfdmlydHVhbF9tbWlvX3N0YXRlKHZndCk7 CiAJZGVzdHJveV92aXJ0dWFsX2dtX3N0YXRlKHZndCk7CisJZ3Z0X2NsZWFuX2luc3RhbmNlX29w cmVnaW9uKHZndCk7CiB9CiAKIHN0YXRpYyBib29sIGNyZWF0ZV92aXJ0dWFsX2RldmljZV9zdGF0 ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LApAQCAtMTk5LDYgKzIwMCw3IEBAIHZvaWQgZ3Z0X2Rl c3Ryb3lfaW5zdGFuY2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKIHN0cnVjdCB2Z3RfZGV2aWNl ICpndnRfY3JlYXRlX2luc3RhbmNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAogCQlzdHJ1Y3Qg Z3Z0X2luc3RhbmNlX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGd2dF9ob3N0ICpob3N0ID0gJmd2 dF9ob3N0OwogCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QgPSBOVUxMOwogCWludCBpZDsKIApAQCAt MjMyLDYgKzIzNCwxMCBAQCBzdHJ1Y3Qgdmd0X2RldmljZSAqZ3Z0X2NyZWF0ZV9pbnN0YW5jZShz dHJ1Y3QgcGd0X2RldmljZSAqcGRldiwKIAlpZiAoaHlwZXJ2aXNvcl9odm1faW5pdCh2Z3QpIDwg MCkKIAkJZ290byBlcnI7CiAKKwlpZiAoaG9zdC0+aHlwZXJ2aXNvcl90eXBlID09IEdWVF9IWVBF UlZJU09SX1RZUEVfS1ZNKQorCQlpZiAoIWd2dF9pbml0X2luc3RhbmNlX29wcmVnaW9uKHZndCwg MCkpCisJCQlnb3RvIGVycjsKKwogCWd2dF9zZXRfaW5zdGFuY2Vfb25saW5lKHZndCk7CiAKIAly ZXR1cm4gdmd0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L29wcmVnaW9u LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvb3ByZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4wNjQwOTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L29wcmVnaW9uLmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5 cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisj aW5jbHVkZSA8bGludXgvYWNwaS5oPgorCisjaW5jbHVkZSAiZ3Z0LmgiCisKK3N0YXRpYyBib29s IGluaXRfdmlydHVhbF9vcHJlZ2lvbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgZ3BhKQor eworCXN0cnVjdCBndnRfdmlydHVhbF9vcHJlZ2lvbl9zdGF0ZSAqb3ByZWdpb24gPSAmdmd0LT5z dGF0ZS5vcHJlZ2lvbjsKKwl2b2lkICpob3N0X3ZhID0gdmd0LT5wZGV2LT5vcHJlZ2lvbl92YTsK Kwl1OCAqYnVmOworCWludCBpOworCisJaWYgKG9wcmVnaW9uLT52YSkgeworCQlndnRfZXJyKCJb dmd0ICVkXSBpcyB0cnlpbmcgdG8gaW5pdCBvcHJlZ2lvbiBtdWx0aXBsZSB0aW1lcyIsCisJCQkJ dmd0LT5pZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlvcHJlZ2lvbi0+dmEgPSAodm9pZCAq KV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQyB8CisJCQlHRlBfRE1BMzIgfCBfX0dGUF9aRVJP LAorCQkJR1ZUX09QUkVHSU9OX1BPUkRFUik7CisKKwlpZiAoIW9wcmVnaW9uLT52YSkgeworCQln dnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3ByZWdpb24gcGFnZXMiKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCW1lbWNweV9mcm9taW8ob3ByZWdpb24tPnZhLCBob3N0X3Zh LCBHVlRfT1BSRUdJT05fU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgR1ZUX09QUkVHSU9OX1BB R0VTOyBpKyspCisJCW9wcmVnaW9uLT5nZm5baV0gPSAoZ3BhID4+IFBBR0VfU0hJRlQpICsgaTsK KworCS8qIGZvciB1bmtub3duIHJlYXNvbiwgdGhlIHZhbHVlIGluIExJRCBmaWVsZCBpcyBpbmNv cnJlY3QKKwkgKiB3aGljaCBibG9jayB0aGUgd2luZG93cyBndWVzdCwgc28gd29ya2Fyb3VuZCBp dCBieSBmb3JjZQorCSAqIHNldHRpbmcgaXQgdG8gIk9QRU4iCisJICovCisJYnVmID0gKHU4ICop b3ByZWdpb24tPnZhOworCWJ1ZltHVlRfT1BSRUdJT05fUkVHX0NMSURdID0gMHgzOworCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIG1hcF92aXJ0dWFsX29wcmVnaW9uKHN0cnVjdCB2 Z3RfZGV2aWNlICp2Z3QsIGludCBtYXApCit7CisJc3RydWN0IGd2dF92aXJ0dWFsX29wcmVnaW9u X3N0YXRlICpvcHJlZ2lvbiA9ICZ2Z3QtPnN0YXRlLm9wcmVnaW9uOworCWludCByOworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IEdWVF9PUFJFR0lPTl9QQUdFUzsgaSsrKSB7CisJCXIgPSBo eXBlcnZpc29yX21hcF9tZm5fdG9fZ3Bmbih2Z3QsCisJCQkJb3ByZWdpb24tPmdmbltpXSwKKwkJ CQloeXBlcnZpc29yX3ZpcnRfdG9fbWZuKG9wcmVnaW9uLT52YSArIGkgKiBQQUdFX1NJWkUpLAor CQkJCTEsCisJCQkJbWFwLAorCQkJCUdWVF9NQVBfT1BSRUdJT04pOworCQlpZiAociAhPSAwKSB7 CisJCQlndnRfZXJyKCJoeXBlcnZpc29yX21hcF9tZm5fdG9fZ3BmbiBmYWlsIHdpdGggJWQhXG4i LCByKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9p ZCBndnRfY2xlYW5faW5zdGFuY2Vfb3ByZWdpb24oc3RydWN0IHZndF9kZXZpY2UgKnZndCkKK3sK KwlzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7CisJc3RydWN0IGd2dF92aXJ0dWFs X29wcmVnaW9uX3N0YXRlICpvcHJlZ2lvbiA9ICZ2Z3QtPnN0YXRlLm9wcmVnaW9uOworCWludCBp OworCisJZ3Z0X2RiZ19jb3JlKCJjbGVhbiBpbnN0YW5jZSBvcHJlZ2lvbiwgaWQgJWQiLCB2Z3Qt PmlkKTsKKworCWlmICghb3ByZWdpb24tPnZhKQorCQlyZXR1cm47CisKKwlpZiAoaG9zdC0+aHlw ZXJ2aXNvcl90eXBlID09IEdWVF9IWVBFUlZJU09SX1RZUEVfS1ZNKSB7CisJCXZ1bm1hcChvcHJl Z2lvbi0+dmEpOworCQlmb3IgKGkgPSAwOyBpIDwgR1ZUX09QUkVHSU9OX1BBR0VTOyBpKyspIHsK KwkJCWlmIChvcHJlZ2lvbi0+cGFnZXNbaV0pIHsKKwkJCQlwdXRfcGFnZShvcHJlZ2lvbi0+cGFn ZXNbaV0pOworCQkJCW9wcmVnaW9uLT5wYWdlc1tpXSA9IE5VTEw7CisJCQl9CisJCX0KKwl9IGVs c2UgeworCQltYXBfdmlydHVhbF9vcHJlZ2lvbih2Z3QsIDApOworCQlmcmVlX3BhZ2VzKCh1bnNp Z25lZCBsb25nKW9wcmVnaW9uLT52YSwKKwkJCQlHVlRfT1BSRUdJT05fUE9SREVSKTsKKwl9CisK KwlvcHJlZ2lvbi0+dmEgPSBOVUxMOworfQorCitib29sIGd2dF9pbml0X2luc3RhbmNlX29wcmVn aW9uKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHU2NCBncGEpCit7CisJc3RydWN0IGd2dF9ob3N0 ICpob3N0ID0gJmd2dF9ob3N0OworCisJZ3Z0X2RiZ19jb3JlKCJpbml0IGluc3RhbmNlIG9wcmVn aW9uLCBpZCAlZCIsIHZndC0+aWQpOworCisJaWYgKGhvc3QtPmh5cGVydmlzb3JfdHlwZSA9PSBH VlRfSFlQRVJWSVNPUl9UWVBFX1hFTikgeworCQlndnRfZGJnX2NvcmUoImVtdWxhdGUgb3ByZWdp b24gZnJvbSBrZXJuZWwiKTsKKworCQlpZiAoIWluaXRfdmlydHVhbF9vcHJlZ2lvbih2Z3QsIGdw YSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKCFtYXBfdmlydHVhbF9vcHJlZ2lvbih2Z3Qs IDEpKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCWd2dF9kYmdfY29yZSgiZW11bGF0 ZSBvcHJlZ2lvbiBmcm9tIHVzZXJzcGFjZSIpOworCisJCS8qIElmIG9wcmVnaW9uIHBhZ2VzIGFy ZSBub3QgYWxsb2NhdGVkIGZyb20gaG9zdCBrZW5yZWwsIG1vc3Qgb2YKKwkJICogdGhlIHBhcmFt cyBhcmUgbWVhbmluZ2xlc3MgKi8KKwkJaHlwZXJ2aXNvcl9tYXBfbWZuX3RvX2dwZm4odmd0LAor CQkJCTAsIC8vbm90IHVzZWQKKwkJCQkwLCAvL25vdCB1c2VkCisJCQkJMiwgLy9ub3QgdXNlZAor CQkJCTEsCisJCQkJR1ZUX01BUF9PUFJFR0lPTik7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisK K3ZvaWQgZ3Z0X2NsZWFuX29wcmVnaW9uKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQoreworCWlm IChwZGV2LT5vcHJlZ2lvbl92YSkgeworCQlpb3VubWFwKHBkZXYtPm9wcmVnaW9uX3ZhKTsKKwkJ cGRldi0+b3ByZWdpb25fdmEgPSBOVUxMOworCX0KK30KKworYm9vbCBndnRfaW5pdF9vcHJlZ2lv bihzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKK3sKKwlndnRfZGJnX2NvcmUoImluaXQgaG9zdCBv cHJlZ2lvbiIpOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYtPmRldl9wcml2LT5kZXYt PnBkZXYsIEdWVF9SRUdfQ0ZHX09QUkVHSU9OLAorCQkJJnBkZXYtPm9wcmVnaW9uX3BhKTsKKwor CXBkZXYtPm9wcmVnaW9uX3ZhID0gYWNwaV9vc19pb3JlbWFwKHBkZXYtPm9wcmVnaW9uX3BhLAor CQkJR1ZUX09QUkVHSU9OX1NJWkUpOworCisJaWYgKCFwZGV2LT5vcHJlZ2lvbl92YSkgeworCQln dnRfZXJyKCJmYWlsIHRvIG1hcCBob3N0IG9wcmVnaW9uIik7CisJCXJldHVybiBmYWxzZTsKKwl9 CisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgR1ZUX09QUkVHSU9OX0ZVTkMoc2NpYykJCQkJ CQlcCisJKHsJCQkJCQkJCVwKKwkgdTMyIF9fcmV0OwkJCQkJCVwKKwkgX19yZXQgPSAoc2NpYyAm IF9SRUdCSVRfT1BSRUdJT05fU0NJQ19GVU5DX01BU0spID4+CVwKKwkgX1JFR0JJVF9PUFJFR0lP Tl9TQ0lDX0ZVTkNfU0hJRlQ7CQkJXAorCSBfX3JldDsJCQkJCQkJXAorCSB9KQorCisjZGVmaW5l IEdWVF9PUFJFR0lPTl9TVUJGVU5DKHNjaWMpCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkgdTMyIF9f cmV0OwkJCQkJCVwKKwkgX19yZXQgPSAoc2NpYyAmIF9SRUdCSVRfT1BSRUdJT05fU0NJQ19TVUJG VU5DX01BU0spID4+CVwKKwkgX1JFR0JJVF9PUFJFR0lPTl9TQ0lDX1NVQkZVTkNfU0hJRlQ7CQlc CisJIF9fcmV0OwkJCQkJCQlcCisJIH0pCisKK3N0YXRpYyBjb25zdCBjaGFyICpvcHJlZ2lvbl9m dW5jX25hbWUodTMyIGZ1bmMpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisKKwlzd2l0 Y2ggKGZ1bmMpIHsKKwkJY2FzZSAwIC4uLiAzOgorCQljYXNlIDU6CisJCWNhc2UgNyAuLi4gMTU6 CisJCQluYW1lID0gIlJlc2VydmVkIjsKKwkJCWJyZWFrOworCisJCWNhc2UgNDoKKwkJCW5hbWUg PSAiR2V0IEJJT1MgRGF0YSI7CisJCQlicmVhazsKKworCQljYXNlIDY6CisJCQluYW1lID0gIlN5 c3RlbSBCSU9TIENhbGxiYWNrcyI7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJbmFtZSA9 ICJVbmtub3duIjsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKm9wcmVnaW9uX3N1YmZ1bmNfbmFtZSh1MzIgc3ViZnVuYykKK3sKKwljb25zdCBj aGFyICpuYW1lID0gTlVMTDsKKwlzd2l0Y2ggKHN1YmZ1bmMpIHsKKwkJY2FzZSAwOgorCQkJbmFt ZSA9ICJTdXBwb3J0ZWQgQ2FsbHMiOworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJbmFtZSA9 ICJSZXF1ZXN0ZWQgQ2FsbGJhY2tzIjsKKwkJCWJyZWFrOworCisJCWNhc2UgMiAuLi4gMzoKKwkJ Y2FzZSA4IC4uLiA5OgorCQkJbmFtZSA9ICJSZXNlcnZlZCI7CisJCQlicmVhazsKKworCQljYXNl IDU6CisJCQluYW1lID0gIkJvb3QgRGlzcGxheSI7CisJCQlicmVhazsKKworCQljYXNlIDY6CisJ CQluYW1lID0gIlRWLVN0YW5kYXJkL1ZpZGVvLUNvbm5lY3RvciI7CisJCQlicmVhazsKKworCQlj YXNlIDc6CisJCQluYW1lID0gIkludGVybmFsIEdyYXBoaWNzIjsKKwkJCWJyZWFrOworCisJCWNh c2UgMTA6CisJCQluYW1lID0gIlNwcmVhZCBTcGVjdHJ1bSBDbG9ja3MiOworCQkJYnJlYWs7CisK KwkJY2FzZSAxMToKKwkJCW5hbWUgPSAiR2V0IEFLU1YiOworCQkJYnJlYWs7CisKKwkJZGVmYXVs dDoKKwkJCW5hbWUgPSAiVW5rbm93biI7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIG5hbWU7Cit9 OworCisvKiBPbmx5IGFsbG93aW5nIGNhcGFiaWxpdHkgcXVlcmllcyAqLworc3RhdGljIGJvb2wg b3ByZWdpb25faXNfY2FwYWJpbGl0eV9nZXQodTMyIHNjaWMpCit7CisJdTMyIGZ1bmMsIHN1YmZ1 bmM7CisKKwlmdW5jID0gR1ZUX09QUkVHSU9OX0ZVTkMoc2NpYyk7CisJc3ViZnVuYyA9IEdWVF9P UFJFR0lPTl9TVUJGVU5DKHNjaWMpOworCisJaWYgKChmdW5jID09IEdWVF9PUFJFR0lPTl9TQ0lD X0ZfR0VUQklPU0RBVEEgJiYKKwkJCQlzdWJmdW5jID09IEdWVF9PUFJFR0lPTl9TQ0lDX1NGX1NV UFBSVEVEQ0FMTFMpIHx8CisJCQkoZnVuYyA9PSBHVlRfT1BSRUdJT05fU0NJQ19GX0dFVEJJT1NE QVRBICYmCisJCQkgc3ViZnVuYyA9PSBHVlRfT1BSRUdJT05fU0NJQ19TRl9SRVFFVVNURURDQUxM QkFDS1MpIHx8CisJCQkoZnVuYyA9PSBHVlRfT1BSRUdJT05fU0NJQ19GX0dFVEJJT1NDQUxMQkFD S1MgJiYKKwkJCSBzdWJmdW5jID09IEdWVF9PUFJFR0lPTl9TQ0lDX1NGX1NVUFBSVEVEQ0FMTFMp KSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGVt dWxhdGUgbXVsdGlwbGUgY2FwYWJpbGl0eSBxdWVyeSByZXF1ZXN0cworICovCit2b2lkIGd2dF9l bXVsYXRlX29wcmVnaW9uX3JlcXVlc3Qoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdTMyIHN3c2Np KQoreworCXN0cnVjdCBndnRfdmlydHVhbF9vcHJlZ2lvbl9zdGF0ZSAqb3ByZWdpb24gPSAmdmd0 LT5zdGF0ZS5vcHJlZ2lvbjsKKwl1MzIgKnNjaWMsICpwYXJtOworCXUzMiBmdW5jLCBzdWJmdW5j OworCXNjaWMgPSBvcHJlZ2lvbi0+dmEgKyBHVlRfT1BSRUdJT05fUkVHX1NDSUM7CisJcGFybSA9 IG9wcmVnaW9uLT52YSArIEdWVF9PUFJFR0lPTl9SRUdfUEFSTTsKKworCWlmICghKHN3c2NpICYg X1JFR0JJVF9DRkdfU1dTQ0lfU0NJX1NFTEVDVCkpIHsKKwkJZ3Z0X2VycigiW3ZndCAlZF0gcmVx dWVzdGluZyBTTUkgc2VydmljZVxuIiwgdmd0LT5pZCk7CisJCXJldHVybjsKKwl9CisJLyogaWdu b3JlIG5vbiAwLT4xIHRyYXNpdGlvbnMgKi8KKwlpZiAoKHZndC0+c3RhdGUuY2ZnLnNwYWNlW0dW VF9SRUdfQ0ZHX1NXU0NJX1RSSUdHRVJdICYKKwkJCQlfUkVHQklUX0NGR19TV1NDSV9TQ0lfVFJJ R0dFUikgfHwKKwkJCSEoc3dzY2kgJiBfUkVHQklUX0NGR19TV1NDSV9TQ0lfVFJJR0dFUikpIHsK KwkJcmV0dXJuOworCX0KKworCWZ1bmMgPSBHVlRfT1BSRUdJT05fRlVOQygqc2NpYyk7CisJc3Vi ZnVuYyA9IEdWVF9PUFJFR0lPTl9TVUJGVU5DKCpzY2ljKTsKKwlpZiAoIW9wcmVnaW9uX2lzX2Nh cGFiaWxpdHlfZ2V0KCpzY2ljKSkgeworCQlndnRfZXJyKCJbdmd0ICVkXSByZXF1ZXN0aW5nIHJ1 bnRpbWUgc2VydmljZTogZnVuYyBcIiVzXCIsIHN1YmZ1bmMgXCIlc1wiXG4iLAorCQkJCXZndC0+ aWQsCisJCQkJb3ByZWdpb25fZnVuY19uYW1lKGZ1bmMpLAorCQkJCW9wcmVnaW9uX3N1YmZ1bmNf bmFtZShzdWJmdW5jKSk7CisJCS8qCisJCSAqIGVtdWxhdGUgZXhpdCBzdGF0dXMgb2YgZnVuY3Rp b24gY2FsbCwgJzAnIG1lYW5zCisJCSAqICJmYWlsdXJlLCBnZW5lcmljLCB1bnN1cHBvcnRlZCBv ciB1bmtvd24gY2F1c2UiCisJCSAqLworCQkqc2NpYyAmPSB+X1JFR0JJVF9PUFJFR0lPTl9TQ0lD X0VYSVRfTUFTSzsKKwkJcmV0dXJuOworCX0KKworCSpzY2ljID0gMDsKKwkqcGFybSA9IDA7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvb3ByZWdpb24uaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9vcHJlZ2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjAyZDgwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvb3ByZWdpb24uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIw MTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0dW VF9PUFJFR0lPTl9IX18KKyNkZWZpbmUgX19HVlRfT1BSRUdJT05fSF9fCisKK3ZvaWQgZ3Z0X2Ns ZWFuX2luc3RhbmNlX29wcmVnaW9uKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpOworYm9vbCBndnRf aW5pdF9pbnN0YW5jZV9vcHJlZ2lvbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgZ3BhKTsK K3ZvaWQgZ3Z0X2NsZWFuX29wcmVnaW9uKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KTsKK2Jvb2wg Z3Z0X2luaXRfb3ByZWdpb24oc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpOworCit2b2lkIGd2dF9l bXVsYXRlX29wcmVnaW9uX3JlcXVlc3Qoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdTMyIHN3c2Np KTsKKworI2VuZGlmCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK