From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH v3] vhost: introduce mdev based hardware backend Date: Wed, 30 Oct 2019 09:55:57 +0800 Message-ID: References: <20191029100734.9861-1-tiwei.bie@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191029100734.9861-1-tiwei.bie@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Tiwei Bie , mst@redhat.com, alex.williamson@redhat.com, maxime.coquelin@redhat.com Cc: kvm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, zhihong.wang@intel.com, lingshan.zhu@intel.com List-Id: virtualization@lists.linuxfoundation.org Ck9uIDIwMTkvMTAvMjkg5LiL5Y2INjowNywgVGl3ZWkgQmllIHdyb3RlOgo+IFRoaXMgcGF0Y2gg aW50cm9kdWNlcyBhIG1kZXYgYmFzZWQgaGFyZHdhcmUgdmhvc3QgYmFja2VuZC4KPiBUaGlzIGJh Y2tlbmQgaXMgYnVpbHQgb24gdG9wIG9mIHRoZSBzYW1lIGFic3RyYWN0aW9uIHVzZWQKPiBpbiB2 aXJ0aW8tbWRldiBhbmQgcHJvdmlkZXMgYSBnZW5lcmljIHZob3N0IGludGVyZmFjZSBmb3IKPiB1 c2Vyc3BhY2UgdG8gYWNjZWxlcmF0ZSB0aGUgdmlydGlvIGRldmljZXMgaW4gZ3Vlc3QuCj4KPiBU aGlzIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQgYXMgYSBtZGV2IGRldmljZSBkcml2ZXIgb24gdG9w Cj4gb2YgdGhlIHNhbWUgbWRldiBkZXZpY2Ugb3BzIHVzZWQgaW4gdmlydGlvLW1kZXYgYnV0IHVz aW5nCj4gYSBkaWZmZXJlbnQgbWRldiBjbGFzcyBpZCwgYW5kIGl0IHdpbGwgcmVnaXN0ZXIgdGhl IGRldmljZQo+IGFzIGEgVkZJTyBkZXZpY2UgZm9yIHVzZXJzcGFjZSB0byB1c2UuIFVzZXJzcGFj ZSBjYW4gc2V0dXAKPiB0aGUgSU9NTVUgd2l0aCB0aGUgZXhpc3RpbmcgVkZJTyBjb250YWluZXIv Z3JvdXAgQVBJcyBhbmQKPiB0aGVuIGdldCB0aGUgZGV2aWNlIGZkIHdpdGggdGhlIGRldmljZSBu YW1lLiBBZnRlciBnZXR0aW5nCj4gdGhlIGRldmljZSBmZCBvZiB0aGlzIGRldmljZSwgdXNlcnNw YWNlIGNhbiB1c2Ugdmhvc3QgaW9jdGxzCj4gdG8gc2V0dXAgdGhlIGJhY2tlbmQuCgoKSGkgVGl3 ZWk6CgpUaGUgcGF0Y2ggbG9va3MgZ29vZCBvdmVyYWxsLCBqdXN0IGZldyBjb21tZW50cyAmIG5p dHMuCgoKPgo+IFNpZ25lZC1vZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGludGVsLmNvbT4K PiAtLS0KPiBUaGlzIHBhdGNoIGRlcGVuZHMgb24gYmVsb3cgc2VyaWVzOgo+IGh0dHBzOi8vbGtt bC5vcmcvbGttbC8yMDE5LzEwLzIzLzYxNAo+Cj4gdjIgLT4gdjM6Cj4gLSBGaXggdGhlIHJldHVy biB2YWx1ZSAoSmFzb24pOwo+IC0gRG9uJ3QgY2FjaGUgdW5uZWNlc3NhcnkgaW5mb3JtYXRpb24g aW4gdmhvc3QtbWRldiAoSmFzb24pOwo+IC0gR2V0IHJpZCBvZiB0aGUgbWVtc2V0IGluIG9wZW4g KEphc29uKTsKPiAtIEFkZCBjb21tZW50cyBmb3IgVkhPU1RfU0VUX01FTV9UQUJMRSwgLi4uIChK YXNvbik7Cj4gLSBGaWx0ZXIgb3V0IHVuc3VwcG9ydGVkIGZlYXR1cmVzIGluIHZob3N0LW1kZXYg KEphc29uKTsKPiAtIEFkZCBfR0VUX0RFVklDRV9JRCBpb2N0bCAoSmFzb24pOwo+IC0gQWRkIF9H RVRfQ09ORklHL19TRVRfQ09ORklHIGlvY3RscyAoSmFzb24pOwo+IC0gRHJvcCBfR0VUX1FVRVVF X05VTSBpb2N0bCAoSmFzb24pOwo+IC0gRml4IHRoZSBjb3B5LXBhc3RlIGVycm9ycyBpbiBfSU9X L19JT1IgdXNhZ2U7Cj4gLSBTb21lIG1pbm9yIGZpeGVzIGFuZCBpbXByb3ZlbWVudHM7Cj4KPiB2 MSAtPiB2MjoKPiAtIFJlcGxhY2UgX1NFVF9TVEFURSB3aXRoIF9TRVRfU1RBVFVTIChNU1QpOwo+ IC0gQ2hlY2sgc3RhdHVzIGJpdHMgYXQgZWFjaCBzdGVwIChNU1QpOwo+IC0gUmVwb3J0IHRoZSBt YXggcmluZyBzaXplIGFuZCBtYXggbnVtYmVyIG9mIHF1ZXVlcyAoTVNUKTsKPiAtIEFkZCBtaXNz aW5nIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKEphc29uKTsKPiAtIE9ubHkgc3VwcG9ydCB0aGUgbmV0 d29yayBiYWNrZW5kIHcvbyBtdWx0aXF1ZXVlIGZvciBub3c7Cj4gLSBTb21lIG1pbm9yIGZpeGVz IGFuZCBpbXByb3ZlbWVudHM7Cj4gLSBSZWJhc2Ugb24gdG9wIG9mIHZpcnRpby1tZGV2IHNlcmll cyB2NDsKPgo+IFJGQyB2NCAtPiB2MToKPiAtIEltcGxlbWVudCB2aG9zdC1tZGV2IGFzIGEgbWRl diBkZXZpY2UgZHJpdmVyIGRpcmVjdGx5IGFuZAo+ICAgY29ubmVjdCBpdCB0byBWRklPIGNvbnRh aW5lci9ncm91cC4gKEphc29uKTsKPiAtIFBhc3MgcmluZyBhZGRyZXNzZXMgYXMgR1BBcy9JT1ZB cyBpbiB2aG9zdC1tZGV2IHRvIGF2b2lkCj4gICBtZWFuaW5nbGVzcyBIVkEtPkdQQSB0cmFuc2xh dGlvbnMgKEphc29uKTsKPgo+IFJGQyB2MyAtPiBSRkMgdjQ6Cj4gLSBCdWlsZCB2aG9zdC1tZGV2 IG9uIHRvcCBvZiB0aGUgc2FtZSBhYnN0cmFjdGlvbiB1c2VkIGJ5Cj4gICB2aXJ0aW8tbWRldiAo SmFzb24pOwo+IC0gSW50cm9kdWNlIHZob3N0IGZkIGFuZCBwYXNzIFZGSU8gZmQgdmlhIFNFVF9C QUNLRU5EIGlvY3RsIChNU1QpOwo+Cj4gUkZDIHYyIC0+IFJGQyB2MzoKPiAtIFJldXNlIHZob3N0 J3MgaW9jdGxzIGluc3RlYWQgb2YgaW52ZW50aW5nIGEgVkZJTyByZWdpb25zL2lycXMKPiAgIGJh c2VkIHZob3N0IHByb3RvY29sIG9uIHRvcCBvZiB2ZmlvLW1kZXYgKEphc29uKTsKPgo+IFJGQyB2 MSAtPiBSRkMgdjI6Cj4gLSBJbnRyb2R1Y2UgYSBuZXcgVkZJTyBkZXZpY2UgdHlwZSB0byBidWls ZCBhIHZob3N0IHByb3RvY29sCj4gICBvbiB0b3Agb2YgdmZpby1tZGV2Owo+Cj4gIGRyaXZlcnMv dmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIwICsrCj4gIGRyaXZlcnMvdmZpby9tZGV2L21k ZXZfcHJpdmF0ZS5oIHwgICAxICsKPiAgZHJpdmVycy92aG9zdC9LY29uZmlnICAgICAgICAgICAg fCAgMTIgKwo+ICBkcml2ZXJzL3Zob3N0L01ha2VmaWxlICAgICAgICAgICB8ICAgMyArCj4gIGRy aXZlcnMvdmhvc3QvbWRldi5jICAgICAgICAgICAgIHwgNTU0ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgaW5jbHVkZS9saW51eC9tZGV2LmggICAgICAgICAgICAgfCAgIDUgKwo+ ICBpbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaCAgICAgICB8ICAxOCArCj4gIGluY2x1ZGUvdWFw aS9saW51eC92aG9zdF90eXBlcy5oIHwgICA4ICsKPiAgOCBmaWxlcyBjaGFuZ2VkLCA2MjEgaW5z ZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aG9zdC9tZGV2LmMKPgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYyBiL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfY29yZS5jCj4gaW5kZXggOWIwMGMzNTEzMTIwLi4zY2ZkNzg3ZDYwNWMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKPiArKysgYi9kcml2ZXJz L3ZmaW8vbWRldi9tZGV2X2NvcmUuYwo+IEBAIC05Niw2ICs5NiwyNiBAQCBtZGV2X2dldF92aXJ0 aW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKG1k ZXZfZ2V0X3ZpcnRpb19vcHMpOwo+ICAKPiArLyogU3BlY2lmeSB0aGUgdmhvc3QgZGV2aWNlIG9w cyBmb3IgdGhlIG1kZXYgZGV2aWNlLCB0aGlzCj4gKyAqIG11c3QgYmUgY2FsbGVkIGR1cmluZyBj cmVhdGUoKSBjYWxsYmFjayBmb3Igdmhvc3QgbWRldiBkZXZpY2UuCj4gKyAqLwo+ICt2b2lkIG1k ZXZfc2V0X3Zob3N0X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gKwkJCWNvbnN0IHN0 cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aG9zdF9vcHMpCj4gK3sKPiArCW1kZXZfc2V0 X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkhPU1QpOwo+ICsJbWRldi0+dmhvc3Rfb3BzID0g dmhvc3Rfb3BzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wobWRldl9zZXRfdmhvc3Rfb3BzKTsKPiAr Cj4gKy8qIEdldCB0aGUgdmhvc3QgZGV2aWNlIG9wcyBmb3IgdGhlIG1kZXYgZGV2aWNlLiAqLwo+ ICtjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqCj4gK21kZXZfZ2V0X3Zob3N0 X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCj4gK3sKPiArCVdBUk5fT04obWRldi0+Y2xh c3NfaWQgIT0gTURFVl9DTEFTU19JRF9WSE9TVCk7Cj4gKwlyZXR1cm4gbWRldi0+dmhvc3Rfb3Bz Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wobWRldl9nZXRfdmhvc3Rfb3BzKTsKPiArCj4gIHN0cnVj dCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKPiAgewo+ICAJcmV0 dXJuICZtZGV2LT5kZXY7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJp dmF0ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKPiBpbmRleCA3YjQ3ODkw YzM0ZTcuLjU1OTdjODQ2ZTUyZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2 X3ByaXZhdGUuaAo+ICsrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCj4gQEAg LTQwLDYgKzQwLDcgQEAgc3RydWN0IG1kZXZfZGV2aWNlIHsKPiAgCXVuaW9uIHsKPiAgCQljb25z dCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzOwo+ICAJCWNvbnN0IHN0cnVj dCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwo+ICsJCWNvbnN0IHN0cnVjdCB2 aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aG9zdF9vcHM7Cj4gIAl9Owo+ICB9Owo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy92aG9zdC9LY29uZmlnIGIvZHJpdmVycy92aG9zdC9LY29uZmlnCj4g aW5kZXggM2QwM2NjYmQxYWRjLi4wNjJjYWRhMjhmODkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92 aG9zdC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy92aG9zdC9LY29uZmlnCj4gQEAgLTM0LDYgKzM0 LDE4IEBAIGNvbmZpZyBWSE9TVF9WU09DSwo+ICAJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBh IG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAo+ICAJdmhv c3RfdnNvY2suCj4gIAo+ICtjb25maWcgVkhPU1RfTURFVgo+ICsJdHJpc3RhdGUgIlZob3N0IGRy aXZlciBmb3IgTWVkaWF0ZWQgZGV2aWNlcyIKPiArCWRlcGVuZHMgb24gRVZFTlRGRCAmJiBWRklP ICYmIFZGSU9fTURFVgo+ICsJc2VsZWN0IFZIT1NUCj4gKwlkZWZhdWx0IG4KPiArCS0tLWhlbHAt LS0KPiArCVRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRv IGFjY2VsZXJhdGUKPiArCWd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIG1lZGlhdGVkIGRl dmljZSBiYXNlZCBiYWNrZW5kcy4KPiArCj4gKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEg bW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKPiArCWJlIGNhbGxlZCB2aG9z dF9tZGV2Lgo+ICsKPiAgY29uZmlnIFZIT1NUCj4gIAl0cmlzdGF0ZQo+ICAJLS0taGVscC0tLQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L01ha2VmaWxlIGIvZHJpdmVycy92aG9zdC9NYWtl ZmlsZQo+IGluZGV4IDZjNmRmMjRmNzcwYy4uYWQ5YzBmOGM2ZDhjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvdmhvc3QvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3Zob3N0L01ha2VmaWxlCj4gQEAg LTEwLDQgKzEwLDcgQEAgdmhvc3RfdnNvY2steSA6PSB2c29jay5vCj4gIAo+ICBvYmotJChDT05G SUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm8KPiAgCj4gK29iai0kKENPTkZJR19WSE9TVF9NREVW KSArPSB2aG9zdF9tZGV2Lm8KPiArdmhvc3RfbWRldi15IDo9IG1kZXYubwo+ICsKPiAgb2JqLSQo Q09ORklHX1ZIT1NUKQkrPSB2aG9zdC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbWRl di5jIGIvZHJpdmVycy92aG9zdC9tZGV2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uMzViMmZiMzNlNjg2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvdmhvc3QvbWRldi5jCj4gQEAgLTAsMCArMSw1NTQgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogVmhvc3QgZHJpdmVyIGZvciBtZWRpYXRlZCBk ZXZpY2UgYmFzZWQgYmFja2VuZHMuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5 IEludGVsIENvcnBvcmF0aW9uLgo+ICsgKgo+ICsgKiBBdXRob3I6IFRpd2VpIEJpZSA8dGl3ZWku YmllQGludGVsLmNvbT4KPiArICoKPiArICogVGhhbmtzIHRvIEphc29uIFdhbmcgYW5kIE1pY2hh ZWwgUy4gVHNpcmtpbiBmb3IgdGhlIHZhbHVhYmxlCj4gKyAqIGNvbW1lbnRzIGFuZCBzdWdnZXN0 aW9ucy4gIEFuZCB0aGFua3MgdG8gQ3VubWluZyBMaWFuZyBhbmQKPiArICogWmhpaG9uZyBXYW5n IGZvciBhbGwgdGhlaXIgc3VwcG9ydHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t ZGV2Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92ZmlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92aG9z dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgo+ICsjaW5jbHVkZSA8bGludXgv dmlydGlvX21kZXZfb3BzLmg+Cj4gKwo+ICsjaW5jbHVkZSAidmhvc3QuaCIKPiArCj4gK2VudW0g ewo+ICsJVkhPU1RfTURFVl9GRUFUVVJFUyA9Cj4gKwkJKDFVTEwgPDwgVklSVElPX0ZfTk9USUZZ X09OX0VNUFRZKSB8Cj4gKwkJKDFVTEwgPDwgVklSVElPX0ZfQU5ZX0xBWU9VVCkgfAo+ICsJCSgx VUxMIDw8IFZJUlRJT19GX1ZFUlNJT05fMSkgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19GX0lPTU1V X1BMQVRGT1JNKSB8Cj4gKwkJKDFVTEwgPDwgVklSVElPX0ZfUklOR19QQUNLRUQpIHwKPiArCQko MVVMTCA8PCBWSVJUSU9fRl9PUkRFUl9QTEFURk9STSkgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19S SU5HX0ZfSU5ESVJFQ1RfREVTQykgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19SSU5HX0ZfRVZFTlRf SURYKSwKPiArCj4gKwlWSE9TVF9NREVWX05FVF9GRUFUVVJFUyA9IFZIT1NUX01ERVZfRkVBVFVS RVMgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19ORVRfRl9DU1VNKSB8Cj4gKwkJKDFVTEwgPDwgVklS VElPX05FVF9GX0dVRVNUX0NTVU0pIHwKPiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfTVRVKSB8 Cj4gKwkJKDFVTEwgPDwgVklSVElPX05FVF9GX01BQykgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19O RVRfRl9HVUVTVF9UU080KSB8Cj4gKwkJKDFVTEwgPDwgVklSVElPX05FVF9GX0dVRVNUX1RTTzYp IHwKPiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOKSB8Cj4gKwkJKDFVTEwgPDwg VklSVElPX05FVF9GX0dVRVNUX1VGTykgfAo+ICsJCSgxVUxMIDw8IFZJUlRJT19ORVRfRl9IT1NU X1RTTzQpIHwKPiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082KSB8Cj4gKwkJKDFV TEwgPDwgVklSVElPX05FVF9GX0hPU1RfRUNOKSB8Cj4gKwkJKDFVTEwgPDwgVklSVElPX05FVF9G X0hPU1RfVUZPKSB8Cj4gKwkJKDFVTEwgPDwgVklSVElPX05FVF9GX01SR19SWEJVRikgfAo+ICsJ CSgxVUxMIDw8IFZJUlRJT19ORVRfRl9TVEFUVVMpIHwKPiArCQkoMVVMTCA8PCBWSVJUSU9fTkVU X0ZfU1BFRURfRFVQTEVYKSwKPiArfTsKPiArCj4gKy8qIEN1cnJlbnRseSwgb25seSBuZXR3b3Jr IGJhY2tlbmQgdy9vIG11bHRpcXVldWUgaXMgc3VwcG9ydGVkLiAqLwo+ICsjZGVmaW5lIFZIT1NU X01ERVZfVlFfTUFYCTIKPiArCj4gK3N0cnVjdCB2aG9zdF9tZGV2IHsKPiArCS8qIFRoZSBsb2Nr IGlzIHRvIHByb3RlY3QgdGhpcyBzdHJ1Y3R1cmUuICovCj4gKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7 Cj4gKwlzdHJ1Y3Qgdmhvc3RfZGV2IGRldjsKPiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZx czsKPiArCWludCBudnFzOwo+ICsJaW50IHZpcnRpb19pZDsKPiArCWJvb2wgb3BlbmVkOwo+ICsJ c3RydWN0IG1kZXZfZGV2aWNlICptZGV2Owo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHU2NCB2 aG9zdF9tZGV2X2ZlYXR1cmVzW10gPSB7Cj4gKwlbVklSVElPX0lEX05FVF0gPSBWSE9TVF9NREVW X05FVF9GRUFUVVJFUywKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGhhbmRsZV92cV9raWNrKHN0 cnVjdCB2aG9zdF93b3JrICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2 cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLAo+ICsJCQkJCQkg IHBvbGwud29yayk7Cj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGNvbnRhaW5lcl9vZih2cS0+ ZGV2LCBzdHJ1Y3Qgdmhvc3RfbWRldiwgZGV2KTsKPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRl dl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobS0+bWRldik7Cj4gKwo+ICsJ b3BzLT5raWNrX3ZxKG0tPm1kZXYsIHZxIC0gbS0+dnFzKTsKPiArfQo+ICsKPiArc3RhdGljIGly cXJldHVybl90IHZob3N0X21kZXZfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpCj4gK3sKPiAr CXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTsKPiArCXN0cnVjdCBldmVudGZk X2N0eCAqY2FsbF9jdHggPSB2cS0+Y2FsbF9jdHg7Cj4gKwo+ICsJaWYgKGNhbGxfY3R4KQo+ICsJ CWV2ZW50ZmRfc2lnbmFsKGNhbGxfY3R4LCAxKTsKPiArCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZob3N0X21kZXZfcmVzZXQoc3RydWN0IHZob3N0X21k ZXYgKm0pCj4gK3sKPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gKwlj b25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rf b3BzKG1kZXYpOwo+ICsKPiArCW9wcy0+c2V0X3N0YXR1cyhtZGV2LCAwKTsKPiArfQo+ICsKPiAr c3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRfZGV2aWNlX2lkKHN0cnVjdCB2aG9zdF9tZGV2ICpt LCB1OCBfX3VzZXIgKmFyZ3ApCj4gK3sKPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0t Pm1kZXY7Cj4gKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRl dl9nZXRfdmhvc3Rfb3BzKG1kZXYpOwo+ICsJdTMyIGRldmljZV9pZDsKPiArCj4gKwlkZXZpY2Vf aWQgPSBvcHMtPmdldF9kZXZpY2VfaWQobWRldik7Cj4gKwo+ICsJaWYgKGNvcHlfdG9fdXNlcihh cmdwLCAmZGV2aWNlX2lkLCBzaXplb2YoZGV2aWNlX2lkKSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KCgpJIGJlbGlldmUgd2UgbmVlZCBnZXRfdmVuZG9yX2lk KCkgYXMgd2VsbD8KCgo+ICsKPiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRfc3RhdHVzKHN0 cnVjdCB2aG9zdF9tZGV2ICptLCB1OCBfX3VzZXIgKnN0YXR1c3ApCj4gK3sKPiArCXN0cnVjdCBt ZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZf ZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3BzKG1kZXYpOwo+ICsJdTggc3RhdHVz Owo+ICsKPiArCXN0YXR1cyA9IG9wcy0+Z2V0X3N0YXR1cyhtZGV2KTsKPiArCj4gKwlpZiAoY29w eV90b191c2VyKHN0YXR1c3AsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKSkKPiArCQlyZXR1cm4g LUVGQVVMVDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgdmhvc3Rf bWRldl9zZXRfc3RhdHVzKHN0cnVjdCB2aG9zdF9tZGV2ICptLCB1OCBfX3VzZXIgKnN0YXR1c3Ap Cj4gK3sKPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gKwljb25zdCBz dHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3BzKG1k ZXYpOwo+ICsJdTggc3RhdHVzOwo+ICsKPiArCWlmIChjb3B5X2Zyb21fdXNlcigmc3RhdHVzLCBz dGF0dXNwLCBzaXplb2Yoc3RhdHVzKSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJLyoK PiArCSAqIFVzZXJzcGFjZSBzaG91bGRuJ3QgcmVtb3ZlIHN0YXR1cyBiaXRzIHVubGVzcyByZXNl dCB0aGUKPiArCSAqIHN0YXR1cyB0byAwLgo+ICsJICovCj4gKwlpZiAoc3RhdHVzICE9IDAgJiYg KG9wcy0+Z2V0X3N0YXR1cyhtZGV2KSAmIH5zdGF0dXMpICE9IDApCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJb3BzLT5zZXRfc3RhdHVzKG1kZXYsIHN0YXR1cyk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmhvc3RfbWRldl9jb25maWdfdmFsaWRhdGUoc3Ry dWN0IHZob3N0X21kZXYgKm0sCj4gKwkJCQkgICAgICBzdHJ1Y3Qgdmhvc3RfbWRldl9jb25maWcg KmMpCj4gK3sKPiArCWxvbmcgc2l6ZSA9IDA7Cj4gKwo+ICsJc3dpdGNoIChtLT52aXJ0aW9faWQp IHsKPiArCWNhc2UgVklSVElPX0lEX05FVDoKPiArCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB2aXJ0 aW9fbmV0X2NvbmZpZyk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGMtPmxlbiA9PSAw KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChjLT5vZmYgPj0gc2l6ZSB8fCBjLT5s ZW4gPiBzaXplIHx8IGMtPm9mZiArIGMtPmxlbiA+IHNpemUpCj4gKwkJcmV0dXJuIC1FMkJJRzsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRf Y29uZmlnKHN0cnVjdCB2aG9zdF9tZGV2ICptLAo+ICsJCQkJICBzdHJ1Y3Qgdmhvc3RfbWRldl9j b25maWcgX191c2VyICpjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5t ZGV2Owo+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZf Z2V0X3Zob3N0X29wcyhtZGV2KTsKPiArCXN0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZyBjb25maWc7 Cj4gKwl1bnNpZ25lZCBsb25nIHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWRldl9jb25m aWcsIGJ1Zik7Cj4gKwl1OCAqYnVmOwo+ICsKPiArCWlmIChjb3B5X2Zyb21fdXNlcigmY29uZmln LCBjLCBzaXplKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCWlmICh2aG9zdF9tZGV2X2NvbmZp Z192YWxpZGF0ZShtLCAmY29uZmlnKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKCgpJIHRoaW5rIGl0 J3MgYmV0dGVyIHRvIGxldCB0aGUgcGFyZW50IHRvIGRvIHN1Y2ggdmFsaWRhdGlvbi4gRXNwZWNp YWxseQpjb25zaWRlciB0aGF0IHRoZSBzaXplIG9mIGNvbmZpZyBtYXkgZGVwZW5kIG9uIGZlYXR1 cmUgKGUuZyBNUSkuCgoKPiArCWJ1ZiA9IGt2emFsbG9jKGNvbmZpZy5sZW4sIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFidWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJb3BzLT5nZXRfY29u ZmlnKG1kZXYsIGNvbmZpZy5vZmYsIGJ1ZiwgY29uZmlnLmxlbik7Cj4gKwo+ICsJaWYgKGNvcHlf dG9fdXNlcihjLT5idWYsIGJ1ZiwgY29uZmlnLmxlbikpIHsKPiArCQlrdmZyZWUoYnVmKTsKPiAr CQlyZXR1cm4gLUVGQVVMVDsKPiArCX0KPiArCj4gKwlrdmZyZWUoYnVmKTsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgbG9uZyB2aG9zdF9tZGV2X3NldF9jb25maWcoc3RydWN0IHZo b3N0X21kZXYgKm0sCj4gKwkJCQkgIHN0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZyBfX3VzZXIgKmMp Cj4gK3sKPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gKwljb25zdCBz dHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3BzKG1k ZXYpOwo+ICsJc3RydWN0IHZob3N0X21kZXZfY29uZmlnIGNvbmZpZzsKPiArCXVuc2lnbmVkIGxv bmcgc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZywgYnVmKTsKPiArCXU4 ICpidWY7Cj4gKwo+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIGMsIHNpemUpKQo+ICsJ CXJldHVybiAtRUZBVUxUOwo+ICsJaWYgKHZob3N0X21kZXZfY29uZmlnX3ZhbGlkYXRlKG0sICZj b25maWcpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJYnVmID0ga3Z6YWxsb2MoY29uZmlnLmxl biwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJ1ZikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4g KwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBjLT5idWYsIGNvbmZpZy5sZW4pKSB7Cj4gKwkJa3Zm cmVlKGJ1Zik7Cj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwl9Cj4gKwo+ICsJb3BzLT5zZXRfY29u ZmlnKG1kZXYsIGNvbmZpZy5vZmYsIGJ1ZiwgY29uZmlnLmxlbik7Cj4gKwo+ICsJa3ZmcmVlKGJ1 Zik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRf ZmVhdHVyZXMoc3RydWN0IHZob3N0X21kZXYgKm0sIHU2NCBfX3VzZXIgKmZlYXR1cmVwKQo+ICt7 Cj4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5tZGV2Owo+ICsJY29uc3Qgc3RydWN0 IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X3Zob3N0X29wcyhtZGV2KTsK PiArCXU2NCBmZWF0dXJlczsKPiArCj4gKwlmZWF0dXJlcyA9IG9wcy0+Z2V0X2ZlYXR1cmVzKG1k ZXYpOwo+ICsJZmVhdHVyZXMgJj0gdmhvc3RfbWRldl9mZWF0dXJlc1ttLT52aXJ0aW9faWRdOwo+ ICsKPiArCWlmIChjb3B5X3RvX3VzZXIoZmVhdHVyZXAsICZmZWF0dXJlcywgc2l6ZW9mKGZlYXR1 cmVzKSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBsb25nIHZob3N0X21kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9tZGV2ICpt LCB1NjQgX191c2VyICpmZWF0dXJlcCkKPiArewo+ICsJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2 ID0gbS0+bWRldjsKPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMg PSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4gKwl1NjQgZmVhdHVyZXM7Cj4gKwo+ICsJLyoK PiArCSAqIEl0J3Mgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmZWF0dXJlcyBhZnRlciB0aGV5 IGhhdmUKPiArCSAqIGJlZW4gbmVnb3RpYXRlZC4KPiArCSAqLwo+ICsJaWYgKG9wcy0+Z2V0X3N0 YXR1cyhtZGV2KSAmIFZJUlRJT19DT05GSUdfU19GRUFUVVJFU19PSykKPiArCQlyZXR1cm4gLUVC VVNZOwo+ICsKPiArCWlmIChjb3B5X2Zyb21fdXNlcigmZmVhdHVyZXMsIGZlYXR1cmVwLCBzaXpl b2YoZmVhdHVyZXMpKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoZmVhdHVyZXMg JiB+dmhvc3RfbWRldl9mZWF0dXJlc1ttLT52aXJ0aW9faWRdKQo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsKPiArCWlmIChvcHMtPnNldF9mZWF0dXJlcyhtZGV2LCBmZWF0dXJlcykpCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBsb25nIHZo b3N0X21kZXZfZ2V0X3ZyaW5nX251bShzdHJ1Y3Qgdmhvc3RfbWRldiAqbSwgdTE2IF9fdXNlciAq YXJncCkKPiArewo+ICsJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbS0+bWRldjsKPiArCWNv bnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9v cHMobWRldik7Cj4gKwl1MTYgbnVtOwo+ICsKPiArCW51bSA9IG9wcy0+Z2V0X3ZxX251bV9tYXgo bWRldik7Cj4gKwo+ICsJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbnVtLCBzaXplb2YobnVtKSkp Cj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBsb25nIHZob3N0X21kZXZfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X21kZXYgKm0sIHVuc2ln bmVkIGludCBjbWQsCj4gKwkJCQkgICB2b2lkIF9fdXNlciAqYXJncCkKPiArewo+ICsJc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2ID0gbS0+bWRldjsKPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRl dl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4gKwlzdHJ1Y3Qg dmlydGlvX21kZXZfY2FsbGJhY2sgY2I7Cj4gKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsK PiArCXN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzOwo+ICsJdTggc3RhdHVzOwo+ICsJdTMyIGlk eDsKPiArCWxvbmcgcjsKPiArCj4gKwlyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFy Z3ApOwo+ICsJaWYgKHIgPCAwKQo+ICsJCXJldHVybiByOwo+ICsJaWYgKGlkeCA+PSBtLT5udnFz KQo+ICsJCXJldHVybiAtRU5PQlVGUzsKPiArCj4gKwlzdGF0dXMgPSBvcHMtPmdldF9zdGF0dXMo bWRldik7Cj4gKwo+ICsJLyoKPiArCSAqIEl0J3Mgbm90IGFsbG93ZWQgdG8gZGV0ZWN0IGFuZCBw cm9ncmFtIHZxcyBiZWZvcmUKPiArCSAqIGZlYXR1cmVzIG5lZ290aWF0aW9uIG9yIGFmdGVyIGVu YWJsaW5nIGRyaXZlci4KPiArCSAqLwo+ICsJaWYgKCEoc3RhdHVzICYgVklSVElPX0NPTkZJR19T X0ZFQVRVUkVTX09LKSB8fAo+ICsJICAgIChzdGF0dXMgJiBWSVJUSU9fQ09ORklHX1NfRFJJVkVS X09LKSkKPiArCQlyZXR1cm4gLUVCVVNZOwo+ICsKPiArCXZxID0gJm0tPnZxc1tpZHhdOwo+ICsK PiArCWlmIChjbWQgPT0gVkhPU1RfTURFVl9TRVRfVlJJTkdfRU5BQkxFKSB7Cj4gKwkJaWYgKGNv cHlfZnJvbV91c2VyKCZzLCBhcmdwLCBzaXplb2YocykpKQo+ICsJCQlyZXR1cm4gLUVGQVVMVDsK PiArCQlvcHMtPnNldF92cV9yZWFkeShtZGV2LCBpZHgsIHMubnVtKTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwkvKgo+ICsJICogSXQncyBub3QgYWxsb3dlZCB0byBkZXRlY3QgYW5kIHBy b2dyYW0gdnFzIHdpdGgKPiArCSAqIHZxcyBlbmFibGVkLgo+ICsJICovCj4gKwlpZiAob3BzLT5n ZXRfdnFfcmVhZHkobWRldiwgaWR4KSkKPiArCQlyZXR1cm4gLUVCVVNZOwo+ICsKPiArCWlmIChj bWQgPT0gVkhPU1RfR0VUX1ZSSU5HX0JBU0UpCj4gKwkJdnEtPmxhc3RfYXZhaWxfaWR4ID0gb3Bz LT5nZXRfdnFfc3RhdGUobS0+bWRldiwgaWR4KTsKPiArCj4gKwlyID0gdmhvc3RfdnJpbmdfaW9j dGwoJm0tPmRldiwgY21kLCBhcmdwKTsKPiArCWlmIChyKQo+ICsJCXJldHVybiByOwo+ICsKPiAr CXN3aXRjaCAoY21kKSB7Cj4gKwljYXNlIFZIT1NUX1NFVF9WUklOR19BRERSOgo+ICsJCS8qCj4g KwkJICogSW4gdmhvc3QtbWRldiwgdGhlIHJpbmcgYWRkcmVzc2VzIHNldCBieSB1c2Vyc3BhY2Ug c2hvdWxkCj4gKwkJICogYmUgdGhlIERNQSBhZGRyZXNzZXMgd2l0aGluIHRoZSBWRklPIGNvbnRh aW5lci9ncm91cC4KPiArCQkgKi8KPiArCQlpZiAob3BzLT5zZXRfdnFfYWRkcmVzcyhtZGV2LCBp ZHgsICh1NjQpdnEtPmRlc2MsCj4gKwkJCQkJKHU2NCl2cS0+YXZhaWwsICh1NjQpdnEtPnVzZWQp KQo+ICsJCQlyID0gLUVOT0RFVjsKCgpOaXQ6IEl0IGxvb2tzIHRvIG1lIHRoYXQgd2UgbmVlZCBl eHBvc2UgYWxpZ25tZW50IG9mIHZxIHRvIHVzZXJzcGFjZQooZ2V0X3ZxX2FsaWduKCkpLgoKVGhh bmtzCgoKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFZIT1NUX1NFVF9WUklOR19CQVNFOgo+ICsJ CWlmIChvcHMtPnNldF92cV9zdGF0ZShtZGV2LCBpZHgsIHZxLT5sYXN0X2F2YWlsX2lkeCkpCj4g KwkJCXIgPSAtRU5PREVWOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgVkhPU1RfU0VUX1ZSSU5H X0NBTEw6Cj4gKwkJaWYgKHZxLT5jYWxsX2N0eCkgewo+ICsJCQljYi5jYWxsYmFjayA9IHZob3N0 X21kZXZfdmlydHF1ZXVlX2NiOwo+ICsJCQljYi5wcml2YXRlID0gdnE7Cj4gKwkJfSBlbHNlIHsK PiArCQkJY2IuY2FsbGJhY2sgPSBOVUxMOwo+ICsJCQljYi5wcml2YXRlID0gTlVMTDsKPiArCQl9 Cj4gKwkJb3BzLT5zZXRfdnFfY2IobWRldiwgaWR4LCAmY2IpOwo+ICsJCWJyZWFrOwo+ICsKPiAr CWNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTToKPiArCQlvcHMtPnNldF92cV9udW0obWRldiwgaWR4 LCB2cS0+bnVtKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gcjsKPiArfQo+ICsK PiArc3RhdGljIGludCB2aG9zdF9tZGV2X29wZW4odm9pZCAqZGV2aWNlX2RhdGEpCj4gK3sKPiAr CXN0cnVjdCB2aG9zdF9tZGV2ICptID0gZGV2aWNlX2RhdGE7Cj4gKwlzdHJ1Y3Qgdmhvc3RfZGV2 ICpkZXY7Cj4gKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzOwo+ICsJaW50IG52cXMsIGks IHI7Cj4gKwo+ICsJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCj4gKwkJcmV0dXJu IC1FTk9ERVY7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbS0+bXV0ZXgpOwo+ICsKPiArCWlmIChtLT5v cGVuZWQpIHsKPiArCQlyID0gLUVCVVNZOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCW52 cXMgPSBtLT5udnFzOwo+ICsJdmhvc3RfbWRldl9yZXNldChtKTsKPiArCj4gKwl2cXMgPSBrbWFs bG9jX2FycmF5KG52cXMsIHNpemVvZigqdnFzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZxcykg ewo+ICsJCXIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWRldiA9ICZt LT5kZXY7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnZxczsgaSsrKSB7Cj4gKwkJdnFzW2ldID0gJm0t PnZxc1tpXTsKPiArCQl2cXNbaV0tPmhhbmRsZV9raWNrID0gaGFuZGxlX3ZxX2tpY2s7Cj4gKwl9 Cj4gKwl2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgbnZxcywgMCwgMCwgMCk7Cj4gKwltLT5vcGVu ZWQgPSB0cnVlOwo+ICsJbXV0ZXhfdW5sb2NrKCZtLT5tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtlcnI6Cj4gKwltdXRleF91bmxvY2soJm0tPm11dGV4KTsKPiArCW1vZHVsZV9wdXQo VEhJU19NT0RVTEUpOwo+ICsJcmV0dXJuIHI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZob3N0 X21kZXZfcmVsZWFzZSh2b2lkICpkZXZpY2VfZGF0YSkKPiArewo+ICsJc3RydWN0IHZob3N0X21k ZXYgKm0gPSBkZXZpY2VfZGF0YTsKPiArCj4gKwltdXRleF9sb2NrKCZtLT5tdXRleCk7Cj4gKwl2 aG9zdF9tZGV2X3Jlc2V0KG0pOwo+ICsJdmhvc3RfZGV2X3N0b3AoJm0tPmRldik7Cj4gKwl2aG9z dF9kZXZfY2xlYW51cCgmbS0+ZGV2KTsKPiArCj4gKwlrZnJlZShtLT5kZXYudnFzKTsKPiArCW0t Pm9wZW5lZCA9IGZhbHNlOwo+ICsJbXV0ZXhfdW5sb2NrKCZtLT5tdXRleCk7Cj4gKwltb2R1bGVf cHV0KFRISVNfTU9EVUxFKTsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl91bmxv Y2tlZF9pb2N0bCh2b2lkICpkZXZpY2VfZGF0YSwKPiArCQkJCSAgICAgIHVuc2lnbmVkIGludCBj bWQsIHVuc2lnbmVkIGxvbmcgYXJnKQo+ICt7Cj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGRl dmljZV9kYXRhOwo+ICsJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Cj4g Kwlsb25nIHI7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbS0+bXV0ZXgpOwo+ICsKPiArCXN3aXRjaCAo Y21kKSB7Cj4gKwljYXNlIFZIT1NUX01ERVZfR0VUX0RFVklDRV9JRDoKPiArCQlyID0gdmhvc3Rf bWRldl9nZXRfZGV2aWNlX2lkKG0sIGFyZ3ApOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWSE9TVF9N REVWX0dFVF9TVEFUVVM6Cj4gKwkJciA9IHZob3N0X21kZXZfZ2V0X3N0YXR1cyhtLCBhcmdwKTsK PiArCQlicmVhazsKPiArCWNhc2UgVkhPU1RfTURFVl9TRVRfU1RBVFVTOgo+ICsJCXIgPSB2aG9z dF9tZGV2X3NldF9zdGF0dXMobSwgYXJncCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZIT1NUX01E RVZfR0VUX0NPTkZJRzoKPiArCQlyID0gdmhvc3RfbWRldl9nZXRfY29uZmlnKG0sIGFyZ3ApOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBWSE9TVF9NREVWX1NFVF9DT05GSUc6Cj4gKwkJciA9IHZob3N0 X21kZXZfc2V0X2NvbmZpZyhtLCBhcmdwKTsKPiArCQlicmVhazsKPiArCWNhc2UgVkhPU1RfR0VU X0ZFQVRVUkVTOgo+ICsJCXIgPSB2aG9zdF9tZGV2X2dldF9mZWF0dXJlcyhtLCBhcmdwKTsKPiAr CQlicmVhazsKPiArCWNhc2UgVkhPU1RfU0VUX0ZFQVRVUkVTOgo+ICsJCXIgPSB2aG9zdF9tZGV2 X3NldF9mZWF0dXJlcyhtLCBhcmdwKTsKPiArCQlicmVhazsKPiArCWNhc2UgVkhPU1RfTURFVl9H RVRfVlJJTkdfTlVNOgo+ICsJCXIgPSB2aG9zdF9tZGV2X2dldF92cmluZ19udW0obSwgYXJncCk7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCS8qCj4gKwkJICogVkhPU1RfU0VUX01FTV9U QUJMRSwgVkhPU1RfU0VUX0xPR19CQVNFLCBhbmQKPiArCQkgKiBWSE9TVF9TRVRfTE9HX0ZEIGFy ZSBub3QgdXNlZCB5ZXQuCj4gKwkJICovCj4gKwkJciA9IHZob3N0X2Rldl9pb2N0bCgmbS0+ZGV2 LCBjbWQsIGFyZ3ApOwo+ICsJCWlmIChyID09IC1FTk9JT0NUTENNRCkKPiArCQkJciA9IHZob3N0 X21kZXZfdnJpbmdfaW9jdGwobSwgY21kLCBhcmdwKTsKPiArCX0KPiArCj4gKwltdXRleF91bmxv Y2soJm0tPm11dGV4KTsKPiArCXJldHVybiByOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3Zob3N0X21kZXZfZGV2X29wcyA9IHsKPiArCS5uYW1l CQk9ICJ2ZmlvLXZob3N0LW1kZXYiLAo+ICsJLm9wZW4JCT0gdmhvc3RfbWRldl9vcGVuLAo+ICsJ LnJlbGVhc2UJPSB2aG9zdF9tZGV2X3JlbGVhc2UsCj4gKwkuaW9jdGwJCT0gdmhvc3RfbWRldl91 bmxvY2tlZF9pb2N0bCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdmhvc3RfbWRldl9wcm9iZShz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG1k ZXZfZnJvbV9kZXYoZGV2KTsKPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3Bz ICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAq bTsKPiArCWludCBudnFzLCByOwo+ICsKPiArCS8qIEN1cnJlbnRseSwgd2Ugb25seSBhY2NlcHQg dGhlIG5ldHdvcmsgZGV2aWNlcy4gKi8KPiArCWlmIChvcHMtPmdldF9kZXZpY2VfaWQobWRldikg IT0gVklSVElPX0lEX05FVCkKPiArCQlyZXR1cm4gLUVOT1RTVVBQOwo+ICsKPiArCWlmIChvcHMt PmdldF9tZGV2X2ZlYXR1cmVzKG1kZXYpICE9IFZJUlRJT19NREVWX0ZfVkVSU0lPTl8xKQo+ICsJ CXJldHVybiAtRU5PVFNVUFA7Cj4gKwo+ICsJbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq bSksIEdGUF9LRVJORUwgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKPiArCWlmICghbSkKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwludnFzID0gVkhPU1RfTURFVl9WUV9NQVg7Cj4gKwo+ICsJ bS0+dnFzID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbnZxcywgc2l6ZW9mKHN0cnVjdCB2aG9z dF92aXJ0cXVldWUpLAo+ICsJCQkJICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtLT52cXMpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmbS0+bXV0ZXgpOwo+ICsKPiAr CW0tPm1kZXYgPSBtZGV2Owo+ICsJbS0+bnZxcyA9IG52cXM7Cj4gKwltLT52aXJ0aW9faWQgPSBv cHMtPmdldF9kZXZpY2VfaWQobWRldik7Cj4gKwo+ICsJciA9IHZmaW9fYWRkX2dyb3VwX2Rldihk ZXYsICZ2ZmlvX3Zob3N0X21kZXZfZGV2X29wcywgbSk7Cj4gKwlpZiAocikgewo+ICsJCW11dGV4 X2Rlc3Ryb3koJm0tPm11dGV4KTsKPiArCQlyZXR1cm4gcjsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmhvc3RfbWRldl9yZW1vdmUoc3RydWN0IGRldmlj ZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbTsKPiArCj4gKwltID0gdmZpb19k ZWxfZ3JvdXBfZGV2KGRldik7Cj4gKwltdXRleF9kZXN0cm95KCZtLT5tdXRleCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRldl9jbGFzc19pZCB2aG9zdF9tZGV2X21hdGNoW10g PSB7Cj4gKwl7IE1ERVZfQ0xBU1NfSURfVkhPU1QgfSwKPiArCXsgMCB9LAo+ICt9Owo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKG1kZXYsIHZob3N0X21kZXZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIHN0 cnVjdCBtZGV2X2RyaXZlciB2aG9zdF9tZGV2X2RyaXZlciA9IHsKPiArCS5uYW1lCT0gInZob3N0 X21kZXYiLAo+ICsJLnByb2JlCT0gdmhvc3RfbWRldl9wcm9iZSwKPiArCS5yZW1vdmUJPSB2aG9z dF9tZGV2X3JlbW92ZSwKPiArCS5pZF90YWJsZSA9IHZob3N0X21kZXZfbWF0Y2gsCj4gK307Cj4g Kwo+ICtzdGF0aWMgaW50IF9faW5pdCB2aG9zdF9tZGV2X2luaXQodm9pZCkKPiArewo+ICsJcmV0 dXJuIG1kZXZfcmVnaXN0ZXJfZHJpdmVyKCZ2aG9zdF9tZGV2X2RyaXZlciwgVEhJU19NT0RVTEUp Owo+ICt9Cj4gK21vZHVsZV9pbml0KHZob3N0X21kZXZfaW5pdCk7Cj4gKwo+ICtzdGF0aWMgdm9p ZCBfX2V4aXQgdmhvc3RfbWRldl9leGl0KHZvaWQpCj4gK3sKPiArCW1kZXZfdW5yZWdpc3Rlcl9k cml2ZXIoJnZob3N0X21kZXZfZHJpdmVyKTsKPiArfQo+ICttb2R1bGVfZXhpdCh2aG9zdF9tZGV2 X2V4aXQpOwo+ICsKPiArTU9EVUxFX1ZFUlNJT04oIjAuMC4xIik7Cj4gK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsKPiArTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKPiArTU9E VUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlZCBkZXZpY2UgYmFzZWQgYWNjZWxlcmF0b3IgZm9yIHZp cnRpbyIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGlu dXgvbWRldi5oCj4gaW5kZXggOWI2OWIwYmJlYmZkLi4zZTFlMDM5MjYzNTUgMTAwNjQ0Cj4gLS0t IGEvaW5jbHVkZS9saW51eC9tZGV2LmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L21kZXYuaAo+IEBA IC0xMTcsNiArMTE3LDEwIEBAIHZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXYsCj4gIAkJCSBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAq dmlydGlvX29wcyk7Cj4gIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICoKPiAg bWRldl9nZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ICt2b2lkIG1k ZXZfc2V0X3Zob3N0X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gKwkJCWNvbnN0IHN0 cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aG9zdF9vcHMpOwo+ICtjb25zdCBzdHJ1Y3Qg dmlydGlvX21kZXZfZGV2aWNlX29wcyAqCj4gK21kZXZfZ2V0X3Zob3N0X29wcyhzdHJ1Y3QgbWRl dl9kZXZpY2UgKm1kZXYpOwo+ICAKPiAgZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBtZGV2X2J1c190 eXBlOwo+ICAKPiBAQCAtMTMzLDYgKzEzNyw3IEBAIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9m cm9tX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICBlbnVtIHsKPiAgCU1ERVZfQ0xBU1NfSURf VkZJTyA9IDEsCj4gIAlNREVWX0NMQVNTX0lEX1ZJUlRJTyA9IDIsCj4gKwlNREVWX0NMQVNTX0lE X1ZIT1NUID0gMywKPiAgCS8qIE5ldyBlbnRyaWVzIG11c3QgYmUgYWRkZWQgaGVyZSAqLwo+ICB9 Owo+ICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0LmggYi9pbmNsdWRl L3VhcGkvbGludXgvdmhvc3QuaAo+IGluZGV4IDQwZDAyOGVlZDY0NS4uMDYxYTI4MjRhMWIzIDEw MDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aG9zdC5oCj4gKysrIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3Zob3N0LmgKPiBAQCAtMTE2LDQgKzExNiwyMiBAQAo+ICAjZGVmaW5lIFZIT1NU X1ZTT0NLX1NFVF9HVUVTVF9DSUQJX0lPVyhWSE9TVF9WSVJUSU8sIDB4NjAsIF9fdTY0KQo+ICAj ZGVmaW5lIFZIT1NUX1ZTT0NLX1NFVF9SVU5OSU5HCQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg2MSwg aW50KQo+ICAKPiArLyogVkhPU1RfTURFViBzcGVjaWZpYyBkZWZpbmVzICovCj4gKwo+ICsvKiBH ZXQgdGhlIGRldmljZSBpZC4gVGhlIGRldmljZSBpZHMgZm9sbG93IHRoZSBzYW1lIGRlZmluaXRp b24gb2YKPiArICogdGhlIGRldmljZSBpZCBkZWZpbmVkIGluIHZpcnRpby1zcGVjLiAqLwo+ICsj ZGVmaW5lIFZIT1NUX01ERVZfR0VUX0RFVklDRV9JRAlfSU9SKFZIT1NUX1ZJUlRJTywgMHg3MCwg X191MzIpCj4gKy8qIEdldCBhbmQgc2V0IHRoZSBzdGF0dXMuIFRoZSBzdGF0dXMgYml0cyBmb2xs b3cgdGhlIHNhbWUgZGVmaW5pdGlvbgo+ICsgKiBvZiB0aGUgZGV2aWNlIHN0YXR1cyBkZWZpbmVk IGluIHZpcnRpby1zcGVjLiAqLwo+ICsjZGVmaW5lIFZIT1NUX01ERVZfR0VUX1NUQVRVUwkJX0lP UihWSE9TVF9WSVJUSU8sIDB4NzEsIF9fdTgpCj4gKyNkZWZpbmUgVkhPU1RfTURFVl9TRVRfU1RB VFVTCQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg3MiwgX191OCkKPiArLyogR2V0IGFuZCBzZXQgdGhl IGRldmljZSBjb25maWcuIFRoZSBkZXZpY2UgY29uZmlnIGZvbGxvd3MgdGhlIHNhbWUKPiArICog ZGVmaW5pdGlvbiBvZiB0aGUgZGV2aWNlIGNvbmZpZyBkZWZpbmVkIGluIHZpcnRpby1zcGVjLiAq Lwo+ICsjZGVmaW5lIFZIT1NUX01ERVZfR0VUX0NPTkZJRwkJX0lPUihWSE9TVF9WSVJUSU8sIDB4 NzMsIHN0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZykKPiArI2RlZmluZSBWSE9TVF9NREVWX1NFVF9D T05GSUcJCV9JT1coVkhPU1RfVklSVElPLCAweDc0LCBzdHJ1Y3Qgdmhvc3RfbWRldl9jb25maWcp Cj4gKy8qIEVuYWJsZS9kaXNhYmxlIHRoZSByaW5nLiAqLwo+ICsjZGVmaW5lIFZIT1NUX01ERVZf U0VUX1ZSSU5HX0VOQUJMRQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg3NSwgc3RydWN0IHZob3N0X3Zy aW5nX3N0YXRlKQo+ICsvKiBHZXQgdGhlIG1heCByaW5nIHNpemUuICovCj4gKyNkZWZpbmUgVkhP U1RfTURFVl9HRVRfVlJJTkdfTlVNCV9JT1IoVkhPU1RfVklSVElPLCAweDc2LCBfX3UxNikKPiAr Cj4gICNlbmRpZgo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMu aCBiL2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oCj4gaW5kZXggYzkwNzI5MGZmMDY1 Li43YjEwNWQwYjJmYjkgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5 cGVzLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaAo+IEBAIC0xMTks NiArMTE5LDE0IEBAIHN0cnVjdCB2aG9zdF9zY3NpX3RhcmdldCB7Cj4gIAl1bnNpZ25lZCBzaG9y dCByZXNlcnZlZDsKPiAgfTsKPiAgCj4gKy8qIFZIT1NUX01ERVYgc3BlY2lmaWMgZGVmaW5pdGlv bnMgKi8KPiArCj4gK3N0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZyB7Cj4gKwlfX3UzMiBvZmY7Cj4g KwlfX3UzMiBsZW47Cj4gKwlfX3U4IGJ1ZlswXTsKPiArfTsKPiArCj4gIC8qIEZlYXR1cmUgYml0 cyAqLwo+ICAvKiBMb2cgYWxsIHdyaXRlIGRlc2NyaXB0b3JzLiBDYW4gYmUgY2hhbmdlZCB3aGls ZSBkZXZpY2UgaXMgYWN0aXZlLiAqLwo+ICAjZGVmaW5lIFZIT1NUX0ZfTE9HX0FMTCAyNgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRp b24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3Jn Cmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1 YWxpemF0aW9u