From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH v3 15/22] drm/i915: Read hw state into an atomic state struct Date: Thu, 28 May 2015 17:55:56 -0700 Message-ID: <20150529005556.GC15716@intel.com> References: <1432129094-11765-1-git-send-email-maarten.lankhorst@linux.intel.com> <1432137874-20543-1-git-send-email-maarten.lankhorst@linux.intel.com> <1432137874-20543-6-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id C6F2C6EC9B for ; Thu, 28 May 2015 17:55:56 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1432137874-20543-6-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: maarten.lankhorst@linux.intel.com Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXkgMjAsIDIwMTUgYXQgMDY6MDQ6MjdQTSArMDIwMCwgbWFhcnRlbi5sYW5raG9y c3RAbGludXguaW50ZWwuY29tIHdyb3RlOgo+IEZyb206IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2 ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZlaXJhQGludGVsLmNvbT4KPiAKPiBUbyBtYWtl IHRoaXMgd29yayB3ZSBsb2FkIHRoZSBuZXcgaGFyZHdhcmUgc3RhdGUgaW50byB0aGUKPiBhdG9t aWNfc3RhdGUsIHRoZW4gc3dhcCBpdCB3aXRoIHRoZSBzdyBzdGF0ZS4KPiAKPiBUaGlzIGxldHMg dXMgY2hhbmdlIHRoZSBmb3JjZSByZXN0b3JlIHBhdGggaW4gc2V0dXBfaHdfc3RhdGUoKQo+IHRv IHVzZSBhIHNpbmdsZSBjYWxsIHRvIGludGVsX21vZGVfc2V0KCkgdG8gcmVzdG9yZSBhbGwgdGhl Cj4gcHJldmlvdXMgc3RhdGUuCj4gCj4gQXMgYSBuaWNlIGJvbnVzIHRoaXMga2lsbHMgb2ZmIGVu Y29kZXItPm5ld19lbmNvZGVyLAo+IGNvbm5lY3Rvci0+bmV3X2VuYWJsZWQgYW5kIGNydGMtPm5l d19lbmFibGVkLiBUaGV5IHdlcmUgdXNlZCBvbmx5Cj4gdG8gcmVzdG9yZSB0aGUgc3RhdGUgYWZ0 ZXIgYSBtb2Rlc2V0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2 ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZlaXJhQGludGVsLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYyAgfCAgIDIgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMzc3ICsrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oICAgICB8ICAxNCArLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDI0MSBpbnNlcnRpb25zKCspLCAx NTIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiBpbmRl eCA4MzA3ODc2M2JhMTQuLjE3YmY5ZTgwYzU1NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F0b21pYy5jCj4gQEAgLTM5NSw3ICszOTUsNyBAQCBpbnQgaW50ZWxfYXRvbWljX3NldHVwX3Nj YWxlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1z dGF0aWMgdm9pZAo+ICt2b2lkCj4gIGludGVsX2F0b21pY19kdXBsaWNhdGVfZHBsbF9zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCQkgIHN0cnVjdCBpbnRlbF9z aGFyZWRfZHBsbF9jb25maWcgKnNoYXJlZF9kcGxsKQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+IGluZGV4IGU3YWE4NjEwY2JkYy4uYTQyZTdkN2JmODZiIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC05NjM5LDcgKzk2MzksNyBAQCBi b29sIGludGVsX2dldF9sb2FkX2RldGVjdF9waXBlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gIHJldHJ5Ogo+ICAJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmlnLT5jb25u ZWN0aW9uX211dGV4LCBjdHgpOwo+ICAJaWYgKHJldCkKPiAtCQlnb3RvIGZhaWxfdW5sb2NrOwo+ ICsJCWdvdG8gZmFpbDsKPiAgCj4gIAkvKgo+ICAJICogQWxnb3JpdGhtIGdldHMgYSBsaXR0bGUg bWVzc3k6Cj4gQEAgLTk2NTcsMTAgKzk2NTcsMTAgQEAgcmV0cnk6Cj4gIAo+ICAJCXJldCA9IGRy bV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCBjdHgpOwo+ICAJCWlmIChyZXQpCj4gLQkJCWdv dG8gZmFpbF91bmxvY2s7Cj4gKwkJCWdvdG8gZmFpbDsKPiAgCQlyZXQgPSBkcm1fbW9kZXNldF9s b2NrKCZjcnRjLT5wcmltYXJ5LT5tdXRleCwgY3R4KTsKPiAgCQlpZiAocmV0KQo+IC0JCQlnb3Rv IGZhaWxfdW5sb2NrOwo+ICsJCQlnb3RvIGZhaWw7Cj4gIAo+ICAJCW9sZC0+ZHBtc19tb2RlID0g Y29ubmVjdG9yLT5kcG1zOwo+ICAJCW9sZC0+bG9hZF9kZXRlY3RfdGVtcCA9IGZhbHNlOwo+IEBA IC05Njc5LDkgKzk2NzksNiBAQCByZXRyeToKPiAgCQkJY29udGludWU7Cj4gIAkJaWYgKHBvc3Np YmxlX2NydGMtPnN0YXRlLT5lbmFibGUpCj4gIAkJCWNvbnRpbnVlOwo+IC0JCS8qIFRoaXMgY2Fu IG9jY3VyIHdoZW4gYXBwbHlpbmcgdGhlIHBpcGUgQSBxdWlyayBvbiByZXN1bWUuICovCj4gLQkJ aWYgKHRvX2ludGVsX2NydGMocG9zc2libGVfY3J0YyktPm5ld19lbmFibGVkKQo+IC0JCQljb250 aW51ZTsKPiAgCj4gIAkJY3J0YyA9IHBvc3NpYmxlX2NydGM7Cj4gIAkJYnJlYWs7Cj4gQEAgLTk2 OTIsMjAgKzk2ODksMTcgQEAgcmV0cnk6Cj4gIAkgKi8KPiAgCWlmICghY3J0Yykgewo+ICAJCURS TV9ERUJVR19LTVMoIm5vIHBpcGUgYXZhaWxhYmxlIGZvciBsb2FkLWRldGVjdFxuIik7Cj4gLQkJ Z290byBmYWlsX3VubG9jazsKPiArCQlnb3RvIGZhaWw7Cj4gIAl9Cj4gIAo+ICAJcmV0ID0gZHJt X21vZGVzZXRfbG9jaygmY3J0Yy0+bXV0ZXgsIGN0eCk7Cj4gIAlpZiAocmV0KQo+IC0JCWdvdG8g ZmFpbF91bmxvY2s7Cj4gKwkJZ290byBmYWlsOwo+ICAJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygm Y3J0Yy0+cHJpbWFyeS0+bXV0ZXgsIGN0eCk7Cj4gIAlpZiAocmV0KQo+IC0JCWdvdG8gZmFpbF91 bmxvY2s7Cj4gLQlpbnRlbF9lbmNvZGVyLT5uZXdfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 Cj4gLQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKS0+bmV3X2VuY29kZXIgPSBpbnRlbF9l bmNvZGVyOwo+ICsJCWdvdG8gZmFpbDsKPiAgCj4gIAlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiAtCWludGVsX2NydGMtPm5ld19lbmFibGVkID0gdHJ1ZTsKPiAgCW9sZC0+ZHBt c19tb2RlID0gY29ubmVjdG9yLT5kcG1zOwo+ICAJb2xkLT5sb2FkX2RldGVjdF90ZW1wID0gdHJ1 ZTsKPiAgCW9sZC0+cmVsZWFzZV9mYiA9IE5VTEw7Cj4gQEAgLTk3NzMsOSArOTc2Nyw3IEBAIHJl dHJ5Ogo+ICAJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4g IAlyZXR1cm4gdHJ1ZTsKPiAgCj4gLSBmYWlsOgo+IC0JaW50ZWxfY3J0Yy0+bmV3X2VuYWJsZWQg PSBjcnRjLT5zdGF0ZS0+ZW5hYmxlOwo+IC1mYWlsX3VubG9jazoKPiArZmFpbDoKPiAgCWRybV9h dG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gIAlzdGF0ZSA9IE5VTEw7Cj4gIAo+IEBAIC05ODIx LDEwICs5ODEzLDYgQEAgdm9pZCBpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+ ICAJCQlnb3RvIGZhaWw7Cj4gIAo+IC0JCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpLT5u ZXdfZW5jb2RlciA9IE5VTEw7Cj4gLQkJaW50ZWxfZW5jb2Rlci0+bmV3X2NydGMgPSBOVUxMOwo+ IC0JCWludGVsX2NydGMtPm5ld19lbmFibGVkID0gZmFsc2U7Cj4gLQo+ICAJCWNvbm5lY3Rvcl9z dGF0ZS0+YmVzdF9lbmNvZGVyID0gTlVMTDsKPiAgCQljb25uZWN0b3Jfc3RhdGUtPmNydGMgPSBO VUxMOwo+ICAKPiBAQCAtMTA5NjksMzMgKzEwOTU3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewo+ICAJLmF0b21pY19m bHVzaCA9IGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdCwKPiAgfTsKPiAgCj4gLS8qKgo+IC0gKiBp bnRlbF9tb2Rlc2V0X3VwZGF0ZV9zdGFnZWRfb3V0cHV0X3N0YXRlCj4gLSAqCj4gLSAqIFVwZGF0 ZXMgdGhlIHN0YWdlZCBvdXRwdXQgY29uZmlndXJhdGlvbiBzdGF0ZSwgZS5nLiBhZnRlciB3ZSd2 ZSByZWFkIG91dCB0aGUKPiAtICogY3VycmVudCBodyBzdGF0ZS4KPiAtICovCj4gLXN0YXRpYyB2 b2lkIGludGVsX21vZGVzZXRfdXBkYXRlX3N0YWdlZF9vdXRwdXRfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gLQlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAtCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiAtCj4gLQlmb3JfZWFjaF9pbnRlbF9jb25uZWN0b3IoZGV2LCBjb25uZWN0b3IpIHsK PiAtCQljb25uZWN0b3ItPm5ld19lbmNvZGVyID0KPiAtCQkJdG9faW50ZWxfZW5jb2Rlcihjb25u ZWN0b3ItPmJhc2UuZW5jb2Rlcik7Cj4gLQl9Cj4gLQo+IC0JZm9yX2VhY2hfaW50ZWxfZW5jb2Rl cihkZXYsIGVuY29kZXIpIHsKPiAtCQllbmNvZGVyLT5uZXdfY3J0YyA9Cj4gLQkJCXRvX2ludGVs X2NydGMoZW5jb2Rlci0+YmFzZS5jcnRjKTsKPiAtCX0KPiAtCj4gLQlmb3JfZWFjaF9pbnRlbF9j cnRjKGRldiwgY3J0Yykgewo+IC0JCWNydGMtPm5ld19lbmFibGVkID0gY3J0Yy0+YmFzZS5zdGF0 ZS0+ZW5hYmxlOwo+IC0JfQo+IC19Cj4gLQo+ICAvKiBUcmFuc2l0aW9uYWwgaGVscGVyIHRvIGNv cHkgY3VycmVudCBjb25uZWN0b3IvZW5jb2RlciBzdGF0ZSB0bwo+ICAgKiBjb25uZWN0b3ItPnN0 YXRlLiBUaGlzIGlzIG5lZWRlZCBzbyB0aGF0IGNvZGUgdGhhdCBpcyBwYXJ0aWFsbHkKPiAgICog Y29udmVydGVkIHRvIGF0b21pYyBkb2VzIHRoZSByaWdodCB0aGluZy4KPiBAQCAtMTE1MjYsNyAr MTE0ODcsNiBAQCBpbnRlbF9tb2Rlc2V0X3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCj4gIAl9Cj4gIAo+ICAJZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX2xlZ2Fj eV9tb2Rlc2V0X3N0YXRlKHN0YXRlLT5kZXYsIHN0YXRlKTsKPiAtCWludGVsX21vZGVzZXRfdXBk YXRlX3N0YWdlZF9vdXRwdXRfc3RhdGUoc3RhdGUtPmRldik7Cj4gIAo+ICAJLyogRG91YmxlIGNo ZWNrIHN0YXRlLiAqLwo+ICAJZm9yX2VhY2hfY3J0YyhkZXYsIGNydGMpIHsKPiBAQCAtMTE4MzIs MTEgKzExNzkyLDE0IEBAIGNoZWNrX2Nvbm5lY3Rvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICAKPiAgCWZvcl9l YWNoX2ludGVsX2Nvbm5lY3RvcihkZXYsIGNvbm5lY3Rvcikgewo+ICsJCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciA9IGNvbm5lY3Rvci0+YmFzZS5lbmNvZGVyOwo+ICsJCXN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpzdGF0ZSA9IGNvbm5lY3Rvci0+YmFzZS5zdGF0ZTsKPiArCj4gIAkJ LyogVGhpcyBhbHNvIGNoZWNrcyB0aGUgZW5jb2Rlci9jb25uZWN0b3IgaHcgc3RhdGUgd2l0aCB0 aGUKPiAgCQkgKiAtPmdldF9od19zdGF0ZSBjYWxsYmFja3MuICovCj4gIAkJaW50ZWxfY29ubmVj dG9yX2NoZWNrX3N0YXRlKGNvbm5lY3Rvcik7Cj4gIAo+IC0JCUk5MTVfU1RBVEVfV0FSTigmY29u bmVjdG9yLT5uZXdfZW5jb2Rlci0+YmFzZSAhPSBjb25uZWN0b3ItPmJhc2UuZW5jb2RlciwKPiAr CQlJOTE1X1NUQVRFX1dBUk4oc3RhdGUtPmJlc3RfZW5jb2RlciAhPSBlbmNvZGVyLAo+ICAJCSAg ICAgImNvbm5lY3RvcidzIHN0YWdlZCBlbmNvZGVyIGRvZXNuJ3QgbWF0Y2ggY3VycmVudCBlbmNv ZGVyXG4iKTsKPiAgCX0KPiAgfQo+IEBAIC0xMTg1Niw4ICsxMTgxOSw2IEBAIGNoZWNrX2VuY29k ZXJfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQkJICAgICAgZW5jb2Rlci0+YmFz ZS5iYXNlLmlkLAo+ICAJCQkgICAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwo+ICAKPiAtCQlJOTE1 X1NUQVRFX1dBUk4oJmVuY29kZXItPm5ld19jcnRjLT5iYXNlICE9IGVuY29kZXItPmJhc2UuY3J0 YywKPiAtCQkgICAgICJlbmNvZGVyJ3Mgc3RhZ2UgY3J0YyBkb2Vzbid0IG1hdGNoIGN1cnJlbnQg Y3J0Y1xuIik7Cj4gIAkJSTkxNV9TVEFURV9XQVJOKGVuY29kZXItPmNvbm5lY3RvcnNfYWN0aXZl ICYmICFlbmNvZGVyLT5iYXNlLmNydGMsCj4gIAkJICAgICAiZW5jb2RlcidzIGFjdGl2ZV9jb25u ZWN0b3JzIHNldCwgYnV0IG5vIGNydGNcbiIpOwo+ICAKPiBAQCAtMTE4NjcsNiArMTE4MjgsOSBA QCBjaGVja19lbmNvZGVyX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJCWVuYWJs ZWQgPSB0cnVlOwo+ICAJCQlpZiAoY29ubmVjdG9yLT5iYXNlLmRwbXMgIT0gRFJNX01PREVfRFBN U19PRkYpCj4gIAkJCQlhY3RpdmUgPSB0cnVlOwo+ICsKPiArCQkJSTkxNV9TVEFURV9XQVJOKGNv bm5lY3Rvci0+YmFzZS5zdGF0ZS0+Y3J0YyAhPSBlbmNvZGVyLT5iYXNlLmNydGMsCj4gKwkJCSAg ICAgImVuY29kZXIncyBzdGFnZSBjcnRjIGRvZXNuJ3QgbWF0Y2ggY3VycmVudCBjcnRjXG4iKTsK PiAgCQl9Cj4gIAkJLyoKPiAgCQkgKiBmb3IgTVNUIGNvbm5lY3RvcnMgaWYgd2UgdW5wbHVnIHRo ZSBjb25uZWN0b3IgaXMgZ29uZQo+IEBAIC0xMjI5NiwxMSArMTIyNjAsMTEgQEAgdm9pZCBpbnRl bF9jcnRjX3Jlc3RvcmVfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAkgKiBuZWVkIHRv IGNvcHkgdGhlIHN0YWdlZCBjb25maWcgdG8gdGhlIGF0b21pYyBzdGF0ZSwgb3RoZXJ3aXNlIHRo ZQo+ICAJICogbW9kZSBzZXQgd2lsbCBqdXN0IHJlYXBwbHkgdGhlIHN0YXRlIHRoZSBIVyBpcyBh bHJlYWR5IGluLiAqLwo+ICAJZm9yX2VhY2hfaW50ZWxfZW5jb2RlcihkZXYsIGVuY29kZXIpIHsK PiAtCQlpZiAoJmVuY29kZXItPm5ld19jcnRjLT5iYXNlICE9IGNydGMpCj4gKwkJaWYgKGVuY29k ZXItPmJhc2UuY3J0YyAhPSBjcnRjKQo+ICAJCQljb250aW51ZTsKPiAgCj4gIAkJZm9yX2VhY2hf aW50ZWxfY29ubmVjdG9yKGRldiwgY29ubmVjdG9yKSB7Cj4gLQkJCWlmIChjb25uZWN0b3ItPm5l d19lbmNvZGVyICE9IGVuY29kZXIpCj4gKwkJCWlmIChjb25uZWN0b3ItPmJhc2Uuc3RhdGUtPmJl c3RfZW5jb2RlciAhPSAmZW5jb2Rlci0+YmFzZSkKPiAgCQkJCWNvbnRpbnVlOwo+ICAKPiAgCQkJ Y29ubmVjdG9yX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCAm Y29ubmVjdG9yLT5iYXNlKTsKPiBAQCAtMTIzMTMsMTQgKzEyMjc3LDEwIEBAIHZvaWQgaW50ZWxf Y3J0Y19yZXN0b3JlX21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJCQl9Cj4gIAo+ICAJ CQljb25uZWN0b3Jfc3RhdGUtPmNydGMgPSBjcnRjOwo+IC0JCQljb25uZWN0b3Jfc3RhdGUtPmJl c3RfZW5jb2RlciA9ICZlbmNvZGVyLT5iYXNlOwo+ICAJCX0KPiAgCX0KPiAgCj4gIAlmb3JfZWFj aF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0Yykgewo+IC0JCWlmIChpbnRlbF9jcnRjLT5uZXdf ZW5hYmxlZCA9PSBpbnRlbF9jcnRjLT5iYXNlLmVuYWJsZWQpCj4gLQkJCWNvbnRpbnVlOwo+IC0K PiAgCQljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBpbnRl bF9jcnRjKTsKPiAgCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4gIAkJCURSTV9ERUJVR19L TVMoIkZhaWxlZCB0byBhZGQgW0NSVEM6JWRdIHRvIHN0YXRlOiAlbGRcbiIsCj4gQEAgLTEyMzI5 LDkgKzEyMjg5LDYgQEAgdm9pZCBpbnRlbF9jcnRjX3Jlc3RvcmVfbW9kZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gIAkJCWNvbnRpbnVlOwo+ICAJCX0KPiAgCj4gLQkJY3J0Y19zdGF0ZS0+YmFz ZS5hY3RpdmUgPSBjcnRjX3N0YXRlLT5iYXNlLmVuYWJsZSA9Cj4gLQkJCWludGVsX2NydGMtPm5l d19lbmFibGVkOwo+IC0KPiAgCQlpZiAoJmludGVsX2NydGMtPmJhc2UgPT0gY3J0YykKPiAgCQkJ ZHJtX21vZGVfY29weSgmY3J0Y19zdGF0ZS0+YmFzZS5tb2RlLCAmY3J0Yy0+bW9kZSk7Cj4gIAl9 Cj4gQEAgLTE0NTUyLDk5ICsxNDUwOSwyMjQgQEAgc3RhdGljIGJvb2wgcHJpbWFyeV9nZXRfaHdf c3RhdGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGNydGMtPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCj4gLQlp ZiAoIWNydGMtPmFjdGl2ZSkKPiArCWlmICghY3J0Yy0+YmFzZS5lbmFibGVkKQo+ICAJCXJldHVy biBmYWxzZTsKPiAgCj4gIAlyZXR1cm4gSTkxNV9SRUFEKERTUENOVFIoY3J0Yy0+cGxhbmUpKSAm IERJU1BMQVlfUExBTkVfRU5BQkxFOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9tb2Rl c2V0X3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArc3RhdGljIGlu dCByZWFkb3V0X2h3X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ ICsJCQkJIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JZW51bSBwaXBlIHBpcGU7 Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiAtCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyOwo+IC0Jc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+IC0JaW50IGk7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5k ZXYpOwo+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwcmltYXJ5ID0gY3J0Yy0+YmFzZS5wcmltYXJ5Owo+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqZHJtX3BsYW5lX3N0YXRlOwo+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZTsKPiArCWludCByZXQ7Cj4gIAo+IC0JZm9yX2VhY2hfaW50ZWxfY3J0Yyhk ZXYsIGNydGMpIHsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gY3J0Yy0+YmFzZS5w cmltYXJ5Owo+IC0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gKwlj cnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiAr CWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7 Cj4gIAo+IC0JCW1lbXNldChjcnRjLT5jb25maWcsIDAsIHNpemVvZigqY3J0Yy0+Y29uZmlnKSk7 Cj4gLQkJY3J0Yy0+Y29uZmlnLT5iYXNlLmNydGMgPSAmY3J0Yy0+YmFzZTsKPiArCXJldCA9IGRy bV9hdG9taWNfYWRkX2FmZmVjdGVkX3BsYW5lcyhzdGF0ZSwgJmNydGMtPmJhc2UpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0OwoKRG8gd2UgYWN0dWFsbHkgdHJ5IHRvIGhhbmRsZSBub24t cHJpbWFyeSBwbGFuZXMgaW4gdGhpcyBmdW5jdGlvbj8gIElmCkknbSBmb2xsb3dpbmcgdGhpcyBw cm9wZXJseSwgYXQgYm9vdHVwIHdlIHdvbid0IGFkZCBhbnkgc3ByaXRlIG9yIGN1cnNvcgpwbGFu ZXMgaGVyZSwgZXZlbiB0aG91Z2ggaXQncyBwb3NzaWJsZSB0aGF0IGEgZ3JhcGhpY3MgZmlybXdh cmUgaGFzCnR1cm5lZCBzb21lIG9mIHRoZW0gb24uICBJdCBzZWVtcyBsaWtlIG91ciBzdyBhbmQg aHcgc3RhdGVzIHdpbGwgc3RpbGwKYmUgYSBiaXQgaW5jb25zaXN0ZW50IGluIHRoYXQgY2FzZS4K CgpNYXR0Cgo+ICAKPiAtCQljcnRjLT5jb25maWctPnF1aXJrcyB8PSBQSVBFX0NPTkZJR19RVUlS S19JTkhFUklURURfTU9ERTsKPiArCW1lbXNldChjcnRjX3N0YXRlLCAwLCBzaXplb2YoKmNydGNf c3RhdGUpKTsKPiArCWNydGNfc3RhdGUtPmJhc2UuY3J0YyA9ICZjcnRjLT5iYXNlOwo+ICsJY3J0 Y19zdGF0ZS0+YmFzZS5zdGF0ZSA9IHN0YXRlOwo+ICAKPiAtCQljcnRjLT5hY3RpdmUgPSBkZXZf cHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcoY3J0YywKPiAtCQkJCQkJCQkgY3J0Yy0+Y29u ZmlnKTsKPiArCWNydGNfc3RhdGUtPnF1aXJrcyB8PSBQSVBFX0NPTkZJR19RVUlSS19JTkhFUklU RURfTU9ERTsKPiAgCj4gLQkJY3J0Yy0+YmFzZS5zdGF0ZS0+ZW5hYmxlID0gY3J0Yy0+YWN0aXZl Owo+IC0JCWNydGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSA9IGNydGMtPmFjdGl2ZTsKPiAtCQljcnRj LT5iYXNlLmVuYWJsZWQgPSBjcnRjLT5hY3RpdmU7Cj4gKwljcnRjX3N0YXRlLT5iYXNlLmVuYWJs ZSA9IGNydGNfc3RhdGUtPmJhc2UuYWN0aXZlID0KPiArCWNydGMtPmJhc2UuZW5hYmxlZCA9IGRl dl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyhjcnRjLCBjcnRjX3N0YXRlKTsKPiAgCj4g LQkJcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwcmltYXJ5LT5zdGF0ZSk7Cj4g LQkJcGxhbmVfc3RhdGUtPnZpc2libGUgPSBwcmltYXJ5X2dldF9od19zdGF0ZShjcnRjKTsKPiAr CS8qIHVwZGF0ZSB0cmFuc2l0aW9uYWwgc3RhdGUgKi8KPiArCWNydGMtPmFjdGl2ZSA9IGNydGNf c3RhdGUtPmJhc2UuYWN0aXZlOwo+ICsJY3J0Yy0+Y29uZmlnID0gY3J0Y19zdGF0ZTsKPiAgCj4g LQkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIGh3IHN0YXRlIHJlYWRvdXQ6ICVzXG4iLAo+IC0J CQkgICAgICBjcnRjLT5iYXNlLmJhc2UuaWQsCj4gLQkJCSAgICAgIGNydGMtPmFjdGl2ZSA/ICJl bmFibGVkIiA6ICJkaXNhYmxlZCIpOwo+IC0JfQo+ICsJZHJtX3BsYW5lX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHByaW1hcnkpOwo+ICsJaWYgKElTX0VSUihkcm1f cGxhbmVfc3RhdGUpKQo+ICsJCXJldHVybiBQVFJfRVJSKGRybV9wbGFuZV9zdGF0ZSk7Cj4gKwo+ ICsJcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpOwo+ ICsJcGxhbmVfc3RhdGUtPnZpc2libGUgPSBwcmltYXJ5X2dldF9od19zdGF0ZShjcnRjKTsKPiAr Cj4gKwlpZiAocGxhbmVfc3RhdGUtPnZpc2libGUpCj4gKwkJY3J0Y19zdGF0ZS0+YmFzZS5wbGFu ZV9tYXNrIHw9IDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpOwo+ICsJZWxzZQo+ICsJCWNy dGNfc3RhdGUtPmJhc2UucGxhbmVfbWFzayAmPSB+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1h cnkpKTsKPiArCj4gKwlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF0gaHcgc3RhdGUgcmVhZG91dDog JXNcbiIsCj4gKwkJICAgICAgY3J0Yy0+YmFzZS5iYXNlLmlkLAo+ICsJCSAgICAgIGNydGNfc3Rh dGUtPmJhc2UuYWN0aXZlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmVhZG91dF9od19wbGxfc3RhdGUoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+ICsJc3RydWN0IGludGVsX3NoYXJlZF9k cGxsX2NvbmZpZyAqc2hhcmVkX2RwbGw7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiAr CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJaW50IGk7Cj4gIAo+ICsJ c2hhcmVkX2RwbGwgPSBpbnRlbF9hdG9taWNfZ2V0X3NoYXJlZF9kcGxsX3N0YXRlKHN0YXRlKTsK PiAgCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX3NoYXJlZF9kcGxsOyBpKyspIHsKPiAg CQlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCA9ICZkZXZfcHJpdi0+c2hhcmVkX2RwbGxz W2ldOwo+ICAKPiAgCQlwbGwtPm9uID0gcGxsLT5nZXRfaHdfc3RhdGUoZGV2X3ByaXYsIHBsbCwK PiAtCQkJCQkgICAgJnBsbC0+Y29uZmlnLmh3X3N0YXRlKTsKPiArCQkJCQkgICAgJnNoYXJlZF9k cGxsW2ldLmh3X3N0YXRlKTsKPiArCj4gIAkJcGxsLT5hY3RpdmUgPSAwOwo+IC0JCXBsbC0+Y29u ZmlnLmNydGNfbWFzayA9IDA7Cj4gLQkJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsK PiAtCQkJaWYgKGNydGMtPmFjdGl2ZSAmJiBpbnRlbF9jcnRjX3RvX3NoYXJlZF9kcGxsKGNydGMp ID09IHBsbCkgewo+ICsJCXNoYXJlZF9kcGxsW2ldLmNydGNfbWFzayA9IDA7Cj4gKwo+ICsJCWZv cl9lYWNoX2ludGVsX2NydGMoc3RhdGUtPmRldiwgY3J0Yykgewo+ICsJCQljcnRjX3N0YXRlID0g aW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiArCQkJaWYgKElTX0VS UihjcnRjX3N0YXRlKSkKPiArCQkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsKPiAr CQkJaWYgKGNydGNfc3RhdGUtPmJhc2UuYWN0aXZlICYmCj4gKwkJCSAgICBjcnRjX3N0YXRlLT5z aGFyZWRfZHBsbCA9PSBpKSB7Cj4gIAkJCQlwbGwtPmFjdGl2ZSsrOwo+IC0JCQkJcGxsLT5jb25m aWcuY3J0Y19tYXNrIHw9IDEgPDwgY3J0Yy0+cGlwZTsKPiArCQkJCXNoYXJlZF9kcGxsW2ldLmNy dGNfbWFzayB8PQo+ICsJCQkJCTEgPDwgY3J0Yy0+cGlwZTsKPiAgCQkJfQo+ICAJCX0KPiAgCj4g IAkJRFJNX0RFQlVHX0tNUygiJXMgaHcgc3RhdGUgcmVhZG91dDogY3J0Y19tYXNrIDB4JTA4eCwg b24gJWlcbiIsCj4gLQkJCSAgICAgIHBsbC0+bmFtZSwgcGxsLT5jb25maWcuY3J0Y19tYXNrLCBw bGwtPm9uKTsKPiArCQkJICAgICAgcGxsLT5uYW1lLCBzaGFyZWRfZHBsbFtpXS5jcnRjX21hc2ss Cj4gKwkJCSAgICAgIHBsbC0+b24pOwo+ICAKPiAtCQlpZiAocGxsLT5jb25maWcuY3J0Y19tYXNr KQo+ICsJCWlmIChzaGFyZWRfZHBsbFtpXS5jcnRjX21hc2spCj4gIAkJCWludGVsX2Rpc3BsYXlf cG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExMUyk7Cj4gIAl9Cj4gIAo+IC0JZm9y X2VhY2hfaW50ZWxfZW5jb2RlcihkZXYsIGVuY29kZXIpIHsKPiAtCQlwaXBlID0gMDsKPiArCXJl dHVybiAwOwo+ICt9Cj4gIAo+IC0JCWlmIChlbmNvZGVyLT5nZXRfaHdfc3RhdGUoZW5jb2Rlciwg JnBpcGUpKSB7Cj4gLQkJCWNydGMgPSB0b19pbnRlbF9jcnRjKGRldl9wcml2LT5waXBlX3RvX2Ny dGNfbWFwcGluZ1twaXBlXSk7Cj4gLQkJCWVuY29kZXItPmJhc2UuY3J0YyA9ICZjcnRjLT5iYXNl Owo+IC0JCQllbmNvZGVyLT5nZXRfY29uZmlnKGVuY29kZXIsIGNydGMtPmNvbmZpZyk7Cj4gLQkJ fSBlbHNlIHsKPiAtCQkJZW5jb2Rlci0+YmFzZS5jcnRjID0gTlVMTDsKPiAtCQl9Cj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCj4gK2dldF9jb25uZWN0b3Jfc3RhdGVfZm9y X2VuY29kZXIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkJc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIpCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlOwo+ ICsJaW50IGk7Cj4gIAo+IC0JCWVuY29kZXItPmNvbm5lY3RvcnNfYWN0aXZlID0gZmFsc2U7Cj4g LQkJRFJNX0RFQlVHX0tNUygiW0VOQ09ERVI6JWQ6JXNdIGh3IHN0YXRlIHJlYWRvdXQ6ICVzLCBw aXBlICVjXG4iLAo+IC0JCQkgICAgICBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCj4gLQkJCSAgICAg IGVuY29kZXItPmJhc2UubmFtZSwKPiAtCQkJICAgICAgZW5jb2Rlci0+YmFzZS5jcnRjID8gImVu YWJsZWQiIDogImRpc2FibGVkIiwKPiAtCQkJICAgICAgcGlwZV9uYW1lKHBpcGUpKTsKPiAtCX0K PiArCWZvcl9lYWNoX2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBjb25uZWN0 b3Jfc3RhdGUsIGkpCj4gKwkJaWYgKGNvbm5lY3Rvcl9zdGF0ZS0+YmVzdF9lbmNvZGVyID09ICZl bmNvZGVyLT5iYXNlKQo+ICsJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXRlOwo+ICsKPiArCXJldHVy biBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJlYWRvdXRfaHdfY29ubmVjdG9yX2VuY29k ZXJfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqZHJtX2NydGNfc3RhdGU7Cj4gKwlzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyOwo+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKPiArCWVudW0gcGlwZSBw aXBlOwo+ICAKPiAgCWZvcl9lYWNoX2ludGVsX2Nvbm5lY3RvcihkZXYsIGNvbm5lY3Rvcikgewo+ ICsJCWNvbm5lY3Rvcl9zdGF0ZSA9Cj4gKwkJCWRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0 ZShzdGF0ZSwgJmNvbm5lY3Rvci0+YmFzZSk7Cj4gKwkJaWYgKElTX0VSUihjb25uZWN0b3Jfc3Rh dGUpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihjb25uZWN0b3Jfc3RhdGUpOwo+ICsKPiAgCQlpZiAo Y29ubmVjdG9yLT5nZXRfaHdfc3RhdGUoY29ubmVjdG9yKSkgewo+ICAJCQljb25uZWN0b3ItPmJh c2UuZHBtcyA9IERSTV9NT0RFX0RQTVNfT047Cj4gLQkJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y29u bmVjdG9yc19hY3RpdmUgPSB0cnVlOwo+ICAJCQljb25uZWN0b3ItPmJhc2UuZW5jb2RlciA9ICZj b25uZWN0b3ItPmVuY29kZXItPmJhc2U7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJY29ubmVjdG9yLT5i YXNlLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKPiAgCQkJY29ubmVjdG9yLT5iYXNlLmVuY29k ZXIgPSBOVUxMOwo+ICAJCX0KPiArCj4gKwkJLyogV2UnbGwgdXBkYXRlIHRoZSBjcnRjIGZpZWxk IHdoZW4gcmVhZGluZyBlbmNvZGVyIHN0YXRlICovCj4gKwkJY29ubmVjdG9yX3N0YXRlLT5jcnRj ID0gTlVMTDsKPiArCj4gKwkJY29ubmVjdG9yX3N0YXRlLT5iZXN0X2VuY29kZXIgPSBjb25uZWN0 b3ItPmJhc2UuZW5jb2RlcjsKPiArCj4gIAkJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDol c10gaHcgc3RhdGUgcmVhZG91dDogJXNcbiIsCj4gIAkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5i YXNlLmlkLAo+ICAJCQkgICAgICBjb25uZWN0b3ItPmJhc2UubmFtZSwKPiAgCQkJICAgICAgY29u bmVjdG9yLT5iYXNlLmVuY29kZXIgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKPiAgCX0KPiAr Cj4gKwlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKGRldiwgZW5jb2Rlcikgewo+ICsJCXBpcGUgPSAw Owo+ICsKPiArCQljb25uZWN0b3Jfc3RhdGUgPQo+ICsJCQlnZXRfY29ubmVjdG9yX3N0YXRlX2Zv cl9lbmNvZGVyKHN0YXRlLCBlbmNvZGVyKTsKPiArCj4gKwkJZW5jb2Rlci0+Y29ubmVjdG9yc19h Y3RpdmUgPSAhIWNvbm5lY3Rvcl9zdGF0ZTsKPiArCj4gKwkJaWYgKGVuY29kZXItPmdldF9od19z dGF0ZShlbmNvZGVyLCAmcGlwZSkpIHsKPiArCQkJZW5jb2Rlci0+YmFzZS5jcnRjID0KPiArCQkJ CWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXTsKPiArCQkJY3J0YyA9IHRvX2lu dGVsX2NydGMoZW5jb2Rlci0+YmFzZS5jcnRjKTsKPiArCj4gKwkJCWRybV9jcnRjX3N0YXRlID0K PiArCQkJCXN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleCgmY3J0Yy0+YmFzZSldOwo+ ICsJCQljcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShkcm1fY3J0Y19zdGF0ZSk7Cj4g Kwo+ICsJCQllbmNvZGVyLT5nZXRfY29uZmlnKGVuY29kZXIsIGNydGNfc3RhdGUpOwo+ICsKPiAr CQkJaWYgKGNvbm5lY3Rvcl9zdGF0ZSkKPiArCQkJCWNvbm5lY3Rvcl9zdGF0ZS0+Y3J0YyA9ICZj cnRjLT5iYXNlOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWVuY29kZXItPmJhc2UuY3J0YyA9IE5VTEw7 Cj4gKwkJfQo+ICsKPiArCQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc10gaHcgc3RhdGUg cmVhZG91dDogJXMsIHBpcGUgJWNcbiIsCj4gKwkJCSAgICAgIGVuY29kZXItPmJhc2UuYmFzZS5p ZCwKPiArCQkJICAgICAgZW5jb2Rlci0+YmFzZS5uYW1lLAo+ICsJCQkgICAgICBlbmNvZGVyLT5i YXNlLmNydGMgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAo+ICsJCQkgICAgICBwaXBlX25hbWUo cGlwZSkpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKgo+ICtpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3RhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4g KwlpbnQgcmV0ID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4g Kwo+ICsJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Cj4gKwlpZiAoIXN0YXRl KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXN0YXRlLT5hY3F1aXJlX2N0 eCA9IGRldi0+bW9kZV9jb25maWcuYWNxdWlyZV9jdHg7Cj4gKwo+ICsJZm9yX2VhY2hfaW50ZWxf Y3J0YyhkZXYsIGNydGMpIHsKPiArCQlyZXQgPSByZWFkb3V0X2h3X2NydGNfc3RhdGUoc3RhdGUs IGNydGMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gcmVhZG91dF9od19wbGxfc3RhdGUoc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycl9mcmVlOwo+ICsKPiArCXJldCA9IHJlYWRvdXRfaHdfY29ubmVjdG9yX2VuY29kZXJfc3Rh dGUoc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsKPiArCXJldHVy biBzdGF0ZTsKPiArCj4gK2Vycl9mcmVlOgo+ICsJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRl KTsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gIH0KPiAgCj4gIC8qIFNjYW4gb3V0IHRoZSBj dXJyZW50IGh3IG1vZGVzZXQgc3RhdGUsIHNhbml0aXplcyBpdCBhbmQgbWFwcyBpdCBpbnRvIHRo ZSBkcm0KPiBAQCAtMTQ2NTMsMzcgKzE0NzM1LDU3IEBAIHZvaWQgaW50ZWxfbW9kZXNldF9zZXR1 cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJICBib29sIGZvcmNlX3Jl c3RvcmUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gLQllbnVtIHBpcGUgcGlwZTsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOwo+ICAJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gKwlzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxf Y29uZmlnIHNoYXJlZF9kcGxsc1tJOTE1X05VTV9QTExTXTsKPiAgCWludCBpOwo+ICAKPiAtCWlu dGVsX21vZGVzZXRfcmVhZG91dF9od19zdGF0ZShkZXYpOwo+IC0KPiAtCS8qCj4gLQkgKiBOb3cg dGhhdCB3ZSBoYXZlIHRoZSBjb25maWcsIGNvcHkgaXQgdG8gZWFjaCBDUlRDIHN0cnVjdAo+IC0J ICogTm90ZSB0aGF0IHRoaXMgY291bGQgZ28gYXdheSBpZiB3ZSBtb3ZlIHRvIHVzaW5nIGNydGNf Y29uZmlnCj4gLQkgKiBjaGVja2luZyBldmVyeXdoZXJlLgo+IC0JICovCj4gLQlmb3JfZWFjaF9p bnRlbF9jcnRjKGRldiwgY3J0Yykgewo+IC0JCWlmIChjcnRjLT5hY3RpdmUgJiYgaTkxNS5mYXN0 Ym9vdCkgewo+IC0JCQlpbnRlbF9tb2RlX2Zyb21fcGlwZV9jb25maWcoJmNydGMtPmJhc2UubW9k ZSwKPiAtCQkJCQkJICAgIGNydGMtPmNvbmZpZyk7Cj4gLQkJCURSTV9ERUJVR19LTVMoIltDUlRD OiVkXSBmb3VuZCBhY3RpdmUgbW9kZTogIiwKPiAtCQkJCSAgICAgIGNydGMtPmJhc2UuYmFzZS5p ZCk7Cj4gLQkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJmNydGMtPmJhc2UubW9kZSk7 Cj4gLQkJfQo+ICsJc3RhdGUgPSBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3RhdGUoZGV2KTsK PiArCWlmIChJU19FUlIoc3RhdGUpKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBv dXQgaHcgc3RhdGVcbiIpOwo+ICsJCXJldHVybjsKPiAgCX0KPiAgCj4gKwlkcm1fYXRvbWljX2hl bHBlcl9zd2FwX3N0YXRlKGRldiwgc3RhdGUpOwo+ICsKPiArCS8qIHN3YXAgc3cvaHcgZHBsbCBz dGF0ZSAqLwo+ICsJaW50ZWxfYXRvbWljX2R1cGxpY2F0ZV9kcGxsX3N0YXRlKGRldl9wcml2LCBz aGFyZWRfZHBsbHMpOwo+ICsJaW50ZWxfc2hhcmVkX2RwbGxfY29tbWl0KHN0YXRlKTsKPiArCW1l bWNweSh0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpLT5zaGFyZWRfZHBsbCwKPiArCSAgICAg ICBzaGFyZWRfZHBsbHMsIHNpemVvZigqc2hhcmVkX2RwbGxzKSAqIGRldl9wcml2LT5udW1fc2hh cmVkX2RwbGwpOwo+ICsKPiAgCS8qIEhXIHN0YXRlIGlzIHJlYWQgb3V0LCBub3cgd2UgbmVlZCB0 byBzYW5pdGl6ZSB0aGlzIG1lc3MuICovCj4gIAlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKGRldiwg ZW5jb2Rlcikgewo+ICAJCWludGVsX3Nhbml0aXplX2VuY29kZXIoZW5jb2Rlcik7Cj4gIAl9Cj4g IAo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+IC0JCWNydGMgPSB0b19pbnRl bF9jcnRjKGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSk7Cj4gLQkJaW50ZWxf c2FuaXRpemVfY3J0YyhjcnRjKTsKPiAtCQlpbnRlbF9kdW1wX3BpcGVfY29uZmlnKGNydGMsIGNy dGMtPmNvbmZpZywKPiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNf c3RhdGUsIGkpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Yyk7Cj4gKwo+ICsJCS8qIHByZXZlbnQgdW5ubmVlZGVkIHJlc3RvcmVzIHdpdGgg Zm9yY2VfcmVzdG9yZSAqLwo+ICsJCWNydGNfc3RhdGUtPmFjdGl2ZV9jaGFuZ2VkID0KPiArCQlj cnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgPQo+ICsJCWNydGNfc3RhdGUtPnBsYW5lc19jaGFuZ2Vk ID0gZmFsc2U7Cj4gKwo+ICsJCWlmIChjcnRjLT5lbmFibGVkKSB7Cj4gKwkJCWludGVsX21vZGVf ZnJvbV9waXBlX2NvbmZpZygmY3J0Yy0+c3RhdGUtPm1vZGUsCj4gKwkJCQl0b19pbnRlbF9jcnRj X3N0YXRlKGNydGMtPnN0YXRlKSk7Cj4gKwo+ICsJCQlkcm1fbW9kZV9jb3B5KCZjcnRjLT5tb2Rl LCAmY3J0Yy0+c3RhdGUtPm1vZGUpOwo+ICsJCQlkcm1fbW9kZV9jb3B5KCZjcnRjLT5od21vZGUs Cj4gKwkJCQkgICAgICAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUpOwo+ICsJCX0KPiArCj4g KwkJaW50ZWxfc2FuaXRpemVfY3J0YyhpbnRlbF9jcnRjKTsKPiArCj4gKwkJLyoKPiArCQkgKiBz YW5pdGl6ZV9jcnRjIG1heSBoYXZlIGZvcmNlZCBhbiB1cGRhdGUgb2YgY3J0Yy0+c3RhdGUsCj4g KwkJICogc28gcmVsb2FkIGluIGludGVsX2R1bXBfcGlwZV9jb25maWcKPiArCQkgKi8KPiArCQlp bnRlbF9kdW1wX3BpcGVfY29uZmlnKGludGVsX2NydGMsCj4gKwkJCQkgICAgICAgdG9faW50ZWxf Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSksCj4gIAkJCQkgICAgICAgIltzZXR1cF9od19zdGF0ZV0i KTsKPiAgCX0KPiAgCj4gQEAgLTE0NzA3LDIwICsxNDgwOSwxNyBAQCB2b2lkIGludGVsX21vZGVz ZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlpbGtfd21fZ2V0 X2h3X3N0YXRlKGRldik7Cj4gIAo+ICAJaWYgKGZvcmNlX3Jlc3RvcmUpIHsKPiAtCQlpOTE1X3Jl ZGlzYWJsZV92Z2EoZGV2KTsKPiArCQlpbnQgcmV0Owo+ICAKPiAtCQkvKgo+IC0JCSAqIFdlIG5l ZWQgdG8gdXNlIHJhdyBpbnRlcmZhY2VzIGZvciByZXN0b3Jpbmcgc3RhdGUgdG8gYXZvaWQKPiAt CQkgKiBjaGVja2luZyAoYm9ndXMpIGludGVybWVkaWF0ZSBzdGF0ZXMuCj4gLQkJICovCj4gLQkJ Zm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+IC0JCQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGMgPQo+IC0JCQkJZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3BpcGVdOwo+ICsJCWk5 MTVfcmVkaXNhYmxlX3ZnYShkZXYpOwo+ICAKPiAtCQkJaW50ZWxfY3J0Y19yZXN0b3JlX21vZGUo Y3J0Yyk7Cj4gKwkJcmV0ID0gaW50ZWxfc2V0X21vZGUoc3RhdGUpOwo+ICsJCWlmIChyZXQpIHsK PiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzdG9yZSBwcmV2aW91cyBtb2RlXG4iKTsKPiAr CQkJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKPiAgCQl9Cj4gIAl9IGVsc2Ugewo+IC0J CWludGVsX21vZGVzZXRfdXBkYXRlX3N0YWdlZF9vdXRwdXRfc3RhdGUoZGV2KTsKPiArCQlkcm1f YXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwo+ICAJfQo+ICAKPiAgCWludGVsX21vZGVzZXRfY2hl Y2tfc3RhdGUoZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDcwMTJjNjdk ZThkNS4uNjVmNWYzZDQxYjVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAt MTMwLDExICsxMzAsNiBAQCBzdHJ1Y3QgaW50ZWxfZmJkZXYgewo+ICAKPiAgc3RydWN0IGludGVs X2VuY29kZXIgewo+ICAJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7Cj4gLQkvKgo+IC0JICogVGhl IG5ldyBjcnRjIHRoaXMgZW5jb2RlciB3aWxsIGJlIGRyaXZlbiBmcm9tLiBPbmx5IGRpZmZlcnMg ZnJvbQo+IC0JICogYmFzZS0+Y3J0YyB3aGlsZSBhIG1vZGVzZXQgaXMgaW4gcHJvZ3Jlc3MuCj4g LQkgKi8KPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpuZXdfY3J0YzsKPiAgCj4gIAllbnVtIGludGVs X291dHB1dF90eXBlIHR5cGU7Cj4gIAl1bnNpZ25lZCBpbnQgY2xvbmVhYmxlOwo+IEBAIC0xOTUs MTIgKzE5MCw2IEBAIHN0cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ICAJICovCj4gIAlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAgCj4gLQkvKgo+IC0JICogVGhlIG5ldyBlbmNvZGVy IHRoaXMgY29ubmVjdG9yIHdpbGwgYmUgZHJpdmVuLiBPbmx5IGRpZmZlcnMgZnJvbQo+IC0JICog ZW5jb2RlciB3aGlsZSBhIG1vZGVzZXQgaXMgaW4gcHJvZ3Jlc3MuCj4gLQkgKi8KPiAtCXN0cnVj dCBpbnRlbF9lbmNvZGVyICpuZXdfZW5jb2RlcjsKPiAtCj4gIAkvKiBSZWFkcyBvdXQgdGhlIGN1 cnJlbnQgaHcsIHJldHVybmluZyB0cnVlIGlmIHRoZSBjb25uZWN0b3IgaXMgZW5hYmxlZAo+ICAJ ICogYW5kIGFjdGl2ZSAoaS5lLiBkcG1zIE9OIHN0YXRlKS4gKi8KPiAgCWJvb2wgKCpnZXRfaHdf c3RhdGUpKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKik7Cj4gQEAgLTUzNCw3ICs1MjMsNiBAQCBz dHJ1Y3QgaW50ZWxfY3J0YyB7Cj4gIAo+ICAJc3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29u ZmlnIHBsYW5lX2NvbmZpZzsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjb25maWc7Cj4g LQlib29sIG5ld19lbmFibGVkOwo+ICAKPiAgCS8qIHJlc2V0IGNvdW50ZXIgdmFsdWUgd2hlbiB0 aGUgbGFzdCBmbGlwIHdhcyBzdWJtaXR0ZWQgKi8KPiAgCXVuc2lnbmVkIGludCByZXNldF9jb3Vu dGVyOwo+IEBAIC0xNDE0LDYgKzE0MDIsOCBAQCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqaW50 ZWxfYXRvbWljX3N0YXRlX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICB2b2lkIGlu dGVsX2F0b21pY19zdGF0ZV9jbGVhcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqKTsKPiAgc3Ry dWN0IGludGVsX3NoYXJlZF9kcGxsX2NvbmZpZyAqCj4gIGludGVsX2F0b21pY19nZXRfc2hhcmVk X2RwbGxfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMpOwo+ICt2b2lkIGludGVsX2F0 b21pY19kdXBsaWNhdGVfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqLAo+ICsJ CQkJICAgICAgIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgKik7Cj4gIAo+ICBzdGF0 aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICoKPiAgaW50ZWxfYXRvbWljX2dldF9j cnRjX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAtLSAKPiAyLjEuMAo+ IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cgot LSAKTWF0dCBSb3BlcgpHcmFwaGljcyBTb2Z0d2FyZSBFbmdpbmVlcgpJb1RHIFBsYXRmb3JtIEVu YWJsaW5nICYgRGV2ZWxvcG1lbnQKSW50ZWwgQ29ycG9yYXRpb24KKDkxNikgMzU2LTI3OTUKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK