From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiwei Bie Subject: Re: [PATCH v2] vhost: introduce mdev based hardware backend Date: Wed, 23 Oct 2019 11:02:53 +0800 Message-ID: <20191023030253.GA15401@___> References: <20191022095230.2514-1-tiwei.bie@intel.com> <47a572fd-5597-1972-e177-8ee25ca51247@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <47a572fd-5597-1972-e177-8ee25ca51247@redhat.com> 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: Jason Wang Cc: kvm@vger.kernel.org, mst@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, zhihong.wang@intel.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: virtualization@lists.linuxfoundation.org T24gVHVlLCBPY3QgMjIsIDIwMTkgYXQgMDk6MzA6MTZQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiBPbiAyMDE5LzEwLzIyIOS4i+WNiDU6NTIsIFRpd2VpIEJpZSB3cm90ZToKPiA+IFRoaXMg cGF0Y2ggaW50cm9kdWNlcyBhIG1kZXYgYmFzZWQgaGFyZHdhcmUgdmhvc3QgYmFja2VuZC4KPiA+ IFRoaXMgYmFja2VuZCBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHNhbWUgYWJzdHJhY3Rpb24gdXNl ZAo+ID4gaW4gdmlydGlvLW1kZXYgYW5kIHByb3ZpZGVzIGEgZ2VuZXJpYyB2aG9zdCBpbnRlcmZh Y2UgZm9yCj4gPiB1c2Vyc3BhY2UgdG8gYWNjZWxlcmF0ZSB0aGUgdmlydGlvIGRldmljZXMgaW4g Z3Vlc3QuCj4gPiAKPiA+IFRoaXMgYmFja2VuZCBpcyBpbXBsZW1lbnRlZCBhcyBhIG1kZXYgZGV2 aWNlIGRyaXZlciBvbiB0b3AKPiA+IG9mIHRoZSBzYW1lIG1kZXYgZGV2aWNlIG9wcyB1c2VkIGlu IHZpcnRpby1tZGV2IGJ1dCB1c2luZwo+ID4gYSBkaWZmZXJlbnQgbWRldiBjbGFzcyBpZCwgYW5k IGl0IHdpbGwgcmVnaXN0ZXIgdGhlIGRldmljZQo+ID4gYXMgYSBWRklPIGRldmljZSBmb3IgdXNl cnNwYWNlIHRvIHVzZS4gVXNlcnNwYWNlIGNhbiBzZXR1cAo+ID4gdGhlIElPTU1VIHdpdGggdGhl IGV4aXN0aW5nIFZGSU8gY29udGFpbmVyL2dyb3VwIEFQSXMgYW5kCj4gPiB0aGVuIGdldCB0aGUg ZGV2aWNlIGZkIHdpdGggdGhlIGRldmljZSBuYW1lLiBBZnRlciBnZXR0aW5nCj4gPiB0aGUgZGV2 aWNlIGZkIG9mIHRoaXMgZGV2aWNlLCB1c2Vyc3BhY2UgY2FuIHVzZSB2aG9zdCBpb2N0bHMKPiA+ IHRvIHNldHVwIHRoZSBiYWNrZW5kLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBUaXdlaSBCaWUg PHRpd2VpLmJpZUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+IFRoaXMgcGF0Y2ggZGVwZW5kcyBvbiBi ZWxvdyBzZXJpZXM6Cj4gPiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxOS8xMC8xNy8yODYKPiA+ IAo+ID4gdjEgLT4gdjI6Cj4gPiAtIFJlcGxhY2UgX1NFVF9TVEFURSB3aXRoIF9TRVRfU1RBVFVT IChNU1QpOwo+ID4gLSBDaGVjayBzdGF0dXMgYml0cyBhdCBlYWNoIHN0ZXAgKE1TVCk7Cj4gPiAt IFJlcG9ydCB0aGUgbWF4IHJpbmcgc2l6ZSBhbmQgbWF4IG51bWJlciBvZiBxdWV1ZXMgKE1TVCk7 Cj4gPiAtIEFkZCBtaXNzaW5nIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKEphc29uKTsKPiA+IC0gT25s eSBzdXBwb3J0IHRoZSBuZXR3b3JrIGJhY2tlbmQgdy9vIG11bHRpcXVldWUgZm9yIG5vdzsKPiAK PiAKPiBBbnkgaWRlYSBvbiBob3cgdG8gZXh0ZW5kIGl0IHRvIHN1cHBvcnQgZGV2aWNlcyBvdGhl ciB0aGFuIG5ldD8gSSB0aGluayB3ZQo+IHdhbnQgYSBnZW5lcmljIEFQSSBvciBhbiBBUEkgdGhh dCBjb3VsZCBiZSBtYWRlIGdlbmVyaWMgaW4gdGhlIGZ1dHVyZS4KPiAKPiBEbyB3ZSB3YW50IHRv IGUuZyBoYXZpbmcgYSBnZW5lcmljIHZob3N0IG1kZXYgZm9yIGFsbCBraW5kcyBvZiBkZXZpY2Vz IG9yCj4gaW50cm9kdWNpbmcgZS5nIHZob3N0LW5ldC1tZGV2IGFuZCB2aG9zdC1zY3NpLW1kZXY/ CgpPbmUgcG9zc2libGUgd2F5IGlzIHRvIGRvIHdoYXQgdmhvc3QtdXNlciBkb2VzLiBJLmUuIEFw YXJ0IGZyb20KdGhlIGdlbmVyaWMgcmluZywgZmVhdHVyZXMsIC4uLiByZWxhdGVkIGlvY3Rscywg d2UgYWxzbyBpbnRyb2R1Y2UKZGV2aWNlIHNwZWNpZmljIGlvY3RscyB3aGVuIHdlIG5lZWQgdGhl bS4gQXMgdmhvc3QtbWRldiBqdXN0IG5lZWRzCnRvIGZvcndhcmQgY29uZmlncyBiZXR3ZWVuIHBh cmVudCBhbmQgdXNlcnNwYWNlIGFuZCBldmVuIHdvbid0CmNhY2hlIGFueSBpbmZvIHdoZW4gcG9z c2libGUsIEkgdGhpbmsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGRvCnRoaXMgaW4gb25lIGdlbmVy aWMgdmhvc3QtbWRldiBtb2R1bGUuCgo+IAo+IAo+ID4gLSBTb21lIG1pbm9yIGZpeGVzIGFuZCBp bXByb3ZlbWVudHM7Cj4gPiAtIFJlYmFzZSBvbiB0b3Agb2YgdmlydGlvLW1kZXYgc2VyaWVzIHY0 Owo+ID4gCj4gPiBSRkMgdjQgLT4gdjE6Cj4gPiAtIEltcGxlbWVudCB2aG9zdC1tZGV2IGFzIGEg bWRldiBkZXZpY2UgZHJpdmVyIGRpcmVjdGx5IGFuZAo+ID4gICAgY29ubmVjdCBpdCB0byBWRklP IGNvbnRhaW5lci9ncm91cC4gKEphc29uKTsKPiA+IC0gUGFzcyByaW5nIGFkZHJlc3NlcyBhcyBH UEFzL0lPVkFzIGluIHZob3N0LW1kZXYgdG8gYXZvaWQKPiA+ICAgIG1lYW5pbmdsZXNzIEhWQS0+ R1BBIHRyYW5zbGF0aW9ucyAoSmFzb24pOwo+ID4gCj4gPiBSRkMgdjMgLT4gUkZDIHY0Ogo+ID4g LSBCdWlsZCB2aG9zdC1tZGV2IG9uIHRvcCBvZiB0aGUgc2FtZSBhYnN0cmFjdGlvbiB1c2VkIGJ5 Cj4gPiAgICB2aXJ0aW8tbWRldiAoSmFzb24pOwo+ID4gLSBJbnRyb2R1Y2Ugdmhvc3QgZmQgYW5k IHBhc3MgVkZJTyBmZCB2aWEgU0VUX0JBQ0tFTkQgaW9jdGwgKE1TVCk7Cj4gPiAKPiA+IFJGQyB2 MiAtPiBSRkMgdjM6Cj4gPiAtIFJldXNlIHZob3N0J3MgaW9jdGxzIGluc3RlYWQgb2YgaW52ZW50 aW5nIGEgVkZJTyByZWdpb25zL2lycXMKPiA+ICAgIGJhc2VkIHZob3N0IHByb3RvY29sIG9uIHRv cCBvZiB2ZmlvLW1kZXYgKEphc29uKTsKPiA+IAo+ID4gUkZDIHYxIC0+IFJGQyB2MjoKPiA+IC0g SW50cm9kdWNlIGEgbmV3IFZGSU8gZGV2aWNlIHR5cGUgdG8gYnVpbGQgYSB2aG9zdCBwcm90b2Nv bAo+ID4gICAgb24gdG9wIG9mIHZmaW8tbWRldjsKPiA+IAo+ID4gICBkcml2ZXJzL3ZmaW8vbWRl di9tZGV2X2NvcmUuYyB8ICAxMiArCj4gPiAgIGRyaXZlcnMvdmhvc3QvS2NvbmZpZyAgICAgICAg IHwgICA5ICsKPiA+ICAgZHJpdmVycy92aG9zdC9NYWtlZmlsZSAgICAgICAgfCAgIDMgKwo+ID4g ICBkcml2ZXJzL3Zob3N0L21kZXYuYyAgICAgICAgICB8IDQxNSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiAgIGluY2x1ZGUvbGludXgvbWRldi5oICAgICAgICAgIHwgICAz ICsKPiA+ICAgaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0LmggICAgfCAgMTMgKysKPiA+ICAgNiBm aWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy92aG9zdC9tZGV2LmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9t ZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKPiA+IGluZGV4 IDU4MzRmNmI3YzdhNS4uMjk2M2Y2NWU2NjQ4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy92Zmlv L21kZXYvbWRldl9jb3JlLmMKPiA+ICsrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5j Cj4gPiBAQCAtNjksNiArNjksMTggQEAgdm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0cnVjdCBt ZGV2X2RldmljZSAqbWRldiwKPiA+ICAgfQo+ID4gICBFWFBPUlRfU1lNQk9MKG1kZXZfc2V0X3Zp cnRpb19vcHMpOwo+ID4gKy8qIFNwZWNpZnkgdGhlIHZob3N0IGRldmljZSBvcHMgZm9yIHRoZSBt ZGV2IGRldmljZSwgdGhpcwo+ID4gKyAqIG11c3QgYmUgY2FsbGVkIGR1cmluZyBjcmVhdGUoKSBj YWxsYmFjayBmb3Igdmhvc3QgbWRldiBkZXZpY2UuCj4gPiArICovCj4gPiArdm9pZCBtZGV2X3Nl dF92aG9zdF9vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAo+ID4gKwkJCWNvbnN0IHN0cnVj dCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aG9zdF9vcHMpCj4gPiArewo+ID4gKwlXQVJOX09O KG1kZXYtPmNsYXNzX2lkKTsKPiA+ICsJbWRldi0+Y2xhc3NfaWQgPSBNREVWX0NMQVNTX0lEX1ZI T1NUOwo+ID4gKwltZGV2LT5kZXZpY2Vfb3BzID0gdmhvc3Rfb3BzOwo+ID4gK30KPiA+ICtFWFBP UlRfU1lNQk9MKG1kZXZfc2V0X3Zob3N0X29wcyk7Cj4gPiArCj4gPiAgIGNvbnN0IHZvaWQgKm1k ZXZfZ2V0X2Rldl9vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQo+ID4gICB7Cj4gPiAgIAly ZXR1cm4gbWRldi0+ZGV2aWNlX29wczsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L0tj b25maWcgYi9kcml2ZXJzL3Zob3N0L0tjb25maWcKPiA+IGluZGV4IDNkMDNjY2JkMWFkYy4uN2I1 YzJmNjU1YWY3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy92aG9zdC9LY29uZmlnCj4gPiArKysg Yi9kcml2ZXJzL3Zob3N0L0tjb25maWcKPiA+IEBAIC0zNCw2ICszNCwxNSBAQCBjb25maWcgVkhP U1RfVlNPQ0sKPiA+ICAgCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKPiA+ICAgCXZob3N0X3Zzb2NrLgo+ ID4gK2NvbmZpZyBWSE9TVF9NREVWCj4gPiArCXRyaXN0YXRlICJWaG9zdCBkcml2ZXIgZm9yIE1l ZGlhdGVkIGRldmljZXMiCj4gPiArCWRlcGVuZHMgb24gRVZFTlRGRCAmJiBWRklPICYmIFZGSU9f TURFVgo+ID4gKwlzZWxlY3QgVkhPU1QKPiA+ICsJZGVmYXVsdCBuCj4gPiArCS0tLWhlbHAtLS0K PiA+ICsJU2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X21kZXYgbW9kdWxlIGZvciB1c2Ug d2l0aAo+ID4gKwl0aGUgbWVkaWF0ZWQgZGV2aWNlIGJhc2VkIGhhcmR3YXJlIHZob3N0IGFjY2Vs ZXJhdG9ycy4KPiA+ICsKPiA+ICAgY29uZmlnIFZIT1NUCj4gPiAgIAl0cmlzdGF0ZQo+ID4gICAJ LS0taGVscC0tLQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUgYi9kcml2 ZXJzL3Zob3N0L01ha2VmaWxlCj4gPiBpbmRleCA2YzZkZjI0Zjc3MGMuLmFkOWMwZjhjNmQ4YyAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMv dmhvc3QvTWFrZWZpbGUKPiA+IEBAIC0xMCw0ICsxMCw3IEBAIHZob3N0X3Zzb2NrLXkgOj0gdnNv Y2subwo+ID4gICBvYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm8KPiA+ICtvYmot JChDT05GSUdfVkhPU1RfTURFVikgKz0gdmhvc3RfbWRldi5vCj4gPiArdmhvc3RfbWRldi15IDo9 IG1kZXYubwo+ID4gKwo+ID4gICBvYmotJChDT05GSUdfVkhPU1QpCSs9IHZob3N0Lm8KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L21kZXYuYyBiL2RyaXZlcnMvdmhvc3QvbWRldi5jCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi41ZjljYWU2MTAx OGMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvdmhvc3QvbWRldi5jCj4gPiBA QCAtMCwwICsxLDQxNSBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBJbnRlbCBDb3Jwb3JhdGlv bi4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21kZXYuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvdmhv c3QuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX21kZXYuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvdmlydGlvX2lkcy5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJ2aG9zdC5oIgo+ID4gKwo+ ID4gKy8qIEN1cnJlbnRseSwgb25seSBuZXR3b3JrIGJhY2tlbmQgdy9vIG11bHRpcXVldWUgaXMg c3VwcG9ydGVkLiAqLwo+ID4gKyNkZWZpbmUgVkhPU1RfTURFVl9WUV9NQVgJMgo+ID4gKwo+ID4g K3N0cnVjdCB2aG9zdF9tZGV2IHsKPiA+ICsJLyogVGhlIGxvY2sgaXMgdG8gcHJvdGVjdCB0aGlz IHN0cnVjdHVyZS4gKi8KPiA+ICsJc3RydWN0IG11dGV4IG11dGV4Owo+ID4gKwlzdHJ1Y3Qgdmhv c3RfZGV2IGRldjsKPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzOwo+ID4gKwlpbnQg bnZxczsKPiA+ICsJdTY0IHN0YXR1czsKPiA+ICsJdTY0IGZlYXR1cmVzOwo+ID4gKwl1NjQgYWNr ZWRfZmVhdHVyZXM7Cj4gPiArCWJvb2wgb3BlbmVkOwo+ID4gKwlzdHJ1Y3QgbWRldl9kZXZpY2Ug Km1kZXY7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoYW5kbGVfdnFfa2ljayhzdHJ1 Y3Qgdmhvc3Rfd29yayAqd29yaykKPiA+ICt7Cj4gPiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUg KnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsCj4gPiArCQkJ CQkJICBwb2xsLndvcmspOwo+ID4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGNvbnRhaW5lcl9v Zih2cS0+ZGV2LCBzdHJ1Y3Qgdmhvc3RfbWRldiwgZGV2KTsKPiA+ICsJY29uc3Qgc3RydWN0IHZp cnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X2Rldl9vcHMobS0+bWRldik7Cj4g PiArCj4gPiArCW9wcy0+a2lja192cShtLT5tZGV2LCB2cSAtIG0tPnZxcyk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF9tZGV2X3ZpcnRxdWV1ZV9jYih2b2lkICpw cml2YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBwcml2YXRl Owo+ID4gKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmNhbGxfY3R4ID0gdnEtPmNhbGxfY3R4Owo+ID4g Kwo+ID4gKwlpZiAoY2FsbF9jdHgpCj4gPiArCQlldmVudGZkX3NpZ25hbChjYWxsX2N0eCwgMSk7 Cj4gPiArCXJldHVybiBJUlFfSEFORExFRDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg dmhvc3RfbWRldl9yZXNldChzdHJ1Y3Qgdmhvc3RfbWRldiAqbSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9f bWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOwo+ID4gKwo+ID4g KwltLT5zdGF0dXMgPSAwOwo+ID4gKwlyZXR1cm4gb3BzLT5zZXRfc3RhdHVzKG1kZXYsIG0tPnN0 YXR1cyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfZ2V0X3N0YXR1 cyhzdHJ1Y3Qgdmhvc3RfbWRldiAqbSwgdTggX191c2VyICpzdGF0dXNwKQo+ID4gK3sKPiA+ICsJ Y29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X2Rldl9v cHMobS0+bWRldik7Cj4gPiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4g PiArCXU4IHN0YXR1czsKPiA+ICsKPiA+ICsJc3RhdHVzID0gb3BzLT5nZXRfc3RhdHVzKG1kZXYp Owo+ID4gKwltLT5zdGF0dXMgPSBzdGF0dXM7Cj4gPiArCj4gPiArCWlmIChjb3B5X3RvX3VzZXIo c3RhdHVzcCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpKQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7 Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgbG9uZyB2aG9z dF9tZGV2X3NldF9zdGF0dXMoc3RydWN0IHZob3N0X21kZXYgKm0sIHU4IF9fdXNlciAqc3RhdHVz cCkKPiA+ICt7Cj4gPiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMg PSBtZGV2X2dldF9kZXZfb3BzKG0tPm1kZXYpOwo+ID4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1k ZXYgPSBtLT5tZGV2Owo+ID4gKwl1OCBzdGF0dXM7Cj4gPiArCj4gPiArCWlmIChjb3B5X2Zyb21f dXNlcigmc3RhdHVzLCBzdGF0dXNwLCBzaXplb2Yoc3RhdHVzKSkpCj4gPiArCQlyZXR1cm4gLUVG QVVMVDsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVXNlcnNwYWNlIHNob3VsZG4ndCByZW1vdmUg c3RhdHVzIGJpdHMgdW5sZXNzIHJlc2V0IHRoZQo+ID4gKwkgKiBzdGF0dXMgdG8gMC4KPiA+ICsJ ICovCj4gPiArCWlmIChzdGF0dXMgIT0gMCAmJiAobS0+c3RhdHVzICYgfnN0YXR1cykgIT0gMCkK PiA+ICsJCXJldHVybiAtRUlOVkFMOwo+IAo+IAo+IFdlIGRvbid0IGNhY2hlIHZxIHJlYWR5IGlu Zm9ybWF0aW9uIGJ1dCB3ZSBjYWNoZSBzdGF0dXMgYW5kIGZlYXR1cmVzIGhlcmUsCj4gYW55IHJl YXNvbiBmb3IgdGhpcz8KCisxLCBJIHRoaW5rIGl0J3MgYmV0dGVyIHRvIG5vdCBjYWNoZSBhbnkg dW5uZWNlc3NhcnkKaW5mb3JtYXRpb24gaW4gdmhvc3QtbWRldi4KCj4gCj4gCj4gPiArCj4gPiAr CW9wcy0+c2V0X3N0YXR1cyhtZGV2LCBzdGF0dXMpOwo+ID4gKwltLT5zdGF0dXMgPSBvcHMtPmdl dF9zdGF0dXMobWRldik7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgbG9uZyB2aG9zdF9tZGV2X2dldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfbWRldiAqbSwg dTY0IF9fdXNlciAqZmVhdHVyZXApCj4gPiArewo+ID4gKwlpZiAoY29weV90b191c2VyKGZlYXR1 cmVwLCAmbS0+ZmVhdHVyZXMsIHNpemVvZihtLT5mZWF0dXJlcykpKQo+ID4gKwkJcmV0dXJuIC1F RkFVTFQ7Cj4gCj4gCj4gQXMgZGlzY3Vzc2VkIGluIHByZXZpb3VzIHZlcnNpb24gZG8gd2UgbmVl ZCB0byBmaWx0ZXIgb3V0IE1RIGZlYXR1cmUgaGVyZT8KCkkgdGhpbmsgaXQncyBtb3JlIHN0cmFp Z2h0Zm9yd2FyZCB0byBsZXQgdGhlIHBhcmVudCBkcml2ZXJzIHRvCmZpbHRlciBvdXQgdGhlIHVu c3VwcG9ydGVkIGZlYXR1cmVzLiBPdGhlcndpc2UgaXQgd291bGQgYmUgdHJpY2t5CndoZW4gd2Ug d2FudCB0byBhZGQgbW9yZSBmZWF0dXJlcyBpbiB2aG9zdC1tZGV2IG1vZHVsZSwgaS5lLiBpZgp0 aGUgcGFyZW50IGRyaXZlcnMgbWF5IGV4cG9zZSB1bnN1cHBvcnRlZCBmZWF0dXJlcyBhbmQgcmVs YXkgb24Kdmhvc3QtbWRldiB0byBmaWx0ZXIgdGhlbSBvdXQsIHRoZXNlIGZlYXR1cmVzIHdpbGwg YmUgZXhwb3NlZAp0byB1c2Vyc3BhY2UgYXV0b21hdGljYWxseSB3aGVuIHRoZXkgYXJlIGVuYWJs ZWQgaW4gdmhvc3QtbWRldgppbiB0aGUgZnV0dXJlLgoKPiAKPiAKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfc2V0X2ZlYXR1cmVzKHN0cnVj dCB2aG9zdF9tZGV2ICptLCB1NjQgX191c2VyICpmZWF0dXJlcCkKPiA+ICt7Cj4gPiArCWNvbnN0 IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG0t Pm1kZXYpOwo+ID4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5tZGV2Owo+ID4gKwl1 NjQgZmVhdHVyZXM7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEl0J3Mgbm90IGFsbG93ZWQgdG8g Y2hhbmdlIHRoZSBmZWF0dXJlcyBhZnRlciB0aGV5IGhhdmUKPiA+ICsJICogYmVlbiBuZWdvdGlh dGVkLgo+ID4gKwkgKi8KPiA+ICsJaWYgKG0tPnN0YXR1cyAmIFZJUlRJT19DT05GSUdfU19GRUFU VVJFU19PSykKPiA+ICsJCXJldHVybiAtRVBFUk07Cj4gCj4gCj4gLUVCVVNZPwoKWWVhaCwgZGVm aW5pdGVseS4KCj4gCj4gCj4gPiArCj4gPiArCWlmIChjb3B5X2Zyb21fdXNlcigmZmVhdHVyZXMs IGZlYXR1cmVwLCBzaXplb2YoZmVhdHVyZXMpKSkKPiA+ICsJCXJldHVybiAtRUZBVUxUOwo+ID4g Kwo+ID4gKwlpZiAoZmVhdHVyZXMgJiB+bS0+ZmVhdHVyZXMpCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsKPiA+ICsKPiA+ICsJbS0+YWNrZWRfZmVhdHVyZXMgPSBmZWF0dXJlczsKPiA+ICsJaWYgKG9w cy0+c2V0X2ZlYXR1cmVzKG1kZXYsIG0tPmFja2VkX2ZlYXR1cmVzKSkKPiA+ICsJCXJldHVybiAt RU5PREVWOwo+IAo+IAo+IC1FSU5WQUwgc2hvdWxkIGJlIGJldHRlciwgdGhpcyB3b3VsZCBiZSBt b3JlIG9idmlvdXMgZm9yIHBhcmVudCB0aGF0IHdhbnRzCj4gdG8gZm9yY2UgYW55IGZlYXR1cmUu CgorMS4gQWdyZWUuCgo+IAo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF9tZGV2 ICptLCB1MTYgX191c2VyICphcmdwKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19t ZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X2Rldl9vcHMobS0+bWRldik7Cj4gPiArCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gPiArCXUxNiBudW07Cj4gPiArCj4g PiArCW51bSA9IG9wcy0+Z2V0X3ZxX251bV9tYXgobWRldik7Cj4gPiArCj4gPiArCWlmIChjb3B5 X3RvX3VzZXIoYXJncCwgJm51bSwgc2l6ZW9mKG51bSkpKQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7 Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgbG9uZyB2aG9zdF9tZGV2 X2dldF9xdWV1ZV9udW0oc3RydWN0IHZob3N0X21kZXYgKm0sIHUzMiBfX3VzZXIgKmFyZ3ApCj4g PiArewo+ID4gKwl1MzIgbnZxcyA9IG0tPm52cXM7Cj4gPiArCj4gPiArCWlmIChjb3B5X3RvX3Vz ZXIoYXJncCwgJm52cXMsIHNpemVvZihudnFzKSkpCj4gPiArCQlyZXR1cm4gLUVGQVVMVDsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfdnJp bmdfaW9jdGwoc3RydWN0IHZob3N0X21kZXYgKm0sIHVuc2lnbmVkIGludCBjbWQsCj4gPiArCQkJ CSAgIHZvaWQgX191c2VyICphcmdwKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19t ZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X2Rldl9vcHMobS0+bWRldik7Cj4gPiArCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4gPiArCXN0cnVjdCB2aXJ0aW9fbWRl dl9jYWxsYmFjayBjYjsKPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7Cj4gPiArCXN0 cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzOwo+ID4gKwl1MzIgaWR4Owo+ID4gKwlsb25nIHI7Cj4g PiArCj4gPiArCXIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7Cj4gPiArCWlm IChyIDwgMCkKPiA+ICsJCXJldHVybiByOwo+ID4gKwlpZiAoaWR4ID49IG0tPm52cXMpCj4gPiAr CQlyZXR1cm4gLUVOT0JVRlM7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEl0J3Mgbm90IGFsbG93 ZWQgdG8gZGV0ZWN0IGFuZCBwcm9ncmFtIHZxcyBiZWZvcmUKPiA+ICsJICogZmVhdHVyZXMgbmVn b3RpYXRpb24gb3IgYWZ0ZXIgZW5hYmxpbmcgZHJpdmVyLgo+ID4gKwkgKi8KPiA+ICsJaWYgKCEo bS0+c3RhdHVzICYgVklSVElPX0NPTkZJR19TX0ZFQVRVUkVTX09LKSB8fAo+ID4gKwkgICAgKG0t PnN0YXR1cyAmIFZJUlRJT19DT05GSUdfU19EUklWRVJfT0spKQo+ID4gKwkJcmV0dXJuIC1FUEVS TTsKPiAKPiAKPiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIGl0IGJldHRlciB0byBkbyB0aGlzIGlu IHBhcmVudCBvciBub3Q/CgpJIHRoaW5rIGl0IHdpbGwgZHVwbGljYXRlIHRoZSBnZW5lcmljIGNv ZGUgaW4gZWFjaCBwYXJlbnQuCgo+IAo+IAo+ID4gKwo+ID4gKwl2cSA9ICZtLT52cXNbaWR4XTsK PiA+ICsKPiA+ICsJaWYgKGNtZCA9PSBWSE9TVF9NREVWX1NFVF9WUklOR19FTkFCTEUpIHsKPiA+ ICsJCWlmIChjb3B5X2Zyb21fdXNlcigmcywgYXJncCwgc2l6ZW9mKHMpKSkKPiA+ICsJCQlyZXR1 cm4gLUVGQVVMVDsKPiA+ICsJCW9wcy0+c2V0X3ZxX3JlYWR5KG1kZXYsIGlkeCwgcy5udW0pOwo+ ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogSXQncyBub3Qg YWxsb3dlZCB0byBkZXRlY3QgYW5kIHByb2dyYW0gdnFzIHdpdGgKPiA+ICsJICogdnFzIGVuYWJs ZWQuCj4gPiArCSAqLwo+ID4gKwlpZiAob3BzLT5nZXRfdnFfcmVhZHkobWRldiwgaWR4KSkKPiA+ ICsJCXJldHVybiAtRVBFUk07Cj4gPiArCj4gPiArCWlmIChjbWQgPT0gVkhPU1RfR0VUX1ZSSU5H X0JBU0UpCj4gPiArCQl2cS0+bGFzdF9hdmFpbF9pZHggPSBvcHMtPmdldF92cV9zdGF0ZShtLT5t ZGV2LCBpZHgpOwo+ID4gKwo+ID4gKwlyID0gdmhvc3RfdnJpbmdfaW9jdGwoJm0tPmRldiwgY21k LCBhcmdwKTsKPiA+ICsJaWYgKHIpCj4gPiArCQlyZXR1cm4gcjsKPiA+ICsKPiA+ICsJc3dpdGNo IChjbWQpIHsKPiA+ICsJY2FzZSBWSE9TVF9TRVRfVlJJTkdfQUREUjoKPiA+ICsJCS8qCj4gPiAr CQkgKiBJbiB2aG9zdC1tZGV2LCB0aGUgcmluZyBhZGRyZXNzZXMgc2V0IGJ5IHVzZXJzcGFjZSBz aG91bGQKPiA+ICsJCSAqIGJlIHRoZSBETUEgYWRkcmVzc2VzIHdpdGhpbiB0aGUgVkZJTyBjb250 YWluZXIvZ3JvdXAuCj4gPiArCQkgKi8KPiA+ICsJCWlmIChvcHMtPnNldF92cV9hZGRyZXNzKG1k ZXYsIGlkeCwgKHU2NCl2cS0+ZGVzYywKPiA+ICsJCQkJCSh1NjQpdnEtPmF2YWlsLCAodTY0KXZx LT51c2VkKSkKPiA+ICsJCQlyID0gLUVOT0RFVjsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwlj YXNlIFZIT1NUX1NFVF9WUklOR19CQVNFOgo+ID4gKwkJaWYgKG9wcy0+c2V0X3ZxX3N0YXRlKG1k ZXYsIGlkeCwgdnEtPmxhc3RfYXZhaWxfaWR4KSkKPiA+ICsJCQlyID0gLUVOT0RFVjsKPiA+ICsJ CWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIFZIT1NUX1NFVF9WUklOR19DQUxMOgo+ID4gKwkJaWYg KHZxLT5jYWxsX2N0eCkgewo+ID4gKwkJCWNiLmNhbGxiYWNrID0gdmhvc3RfbWRldl92aXJ0cXVl dWVfY2I7Cj4gPiArCQkJY2IucHJpdmF0ZSA9IHZxOwo+ID4gKwkJfSBlbHNlIHsKPiA+ICsJCQlj Yi5jYWxsYmFjayA9IE5VTEw7Cj4gPiArCQkJY2IucHJpdmF0ZSA9IE5VTEw7Cj4gPiArCQl9Cj4g PiArCQlvcHMtPnNldF92cV9jYihtZGV2LCBpZHgsICZjYik7Cj4gPiArCQlicmVhazsKPiA+ICsK PiA+ICsJY2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOgo+ID4gKwkJb3BzLT5zZXRfdnFfbnVtKG1k ZXYsIGlkeCwgdnEtPm51bSk7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gcjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB2aG9zdF9tZGV2X29wZW4odm9pZCAq ZGV2aWNlX2RhdGEpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGRldmljZV9k YXRhOwo+ID4gKwlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7Cj4gPiArCXN0cnVjdCB2aG9zdF92aXJ0 cXVldWUgKip2cXM7Cj4gPiArCWludCBudnFzLCBpLCByOwo+ID4gKwo+ID4gKwlpZiAoIXRyeV9t b2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gKwo+ID4g KwltdXRleF9sb2NrKCZtLT5tdXRleCk7Cj4gPiArCj4gPiArCWlmIChtLT5vcGVuZWQpIHsKPiA+ ICsJCXIgPSAtRUJVU1k7Cj4gPiArCQlnb3RvIGVycjsKPiA+ICsJfQo+ID4gKwo+ID4gKwludnFz ID0gbS0+bnZxczsKPiA+ICsJdmhvc3RfbWRldl9yZXNldChtKTsKPiA+ICsKPiA+ICsJbWVtc2V0 KCZtLT5kZXYsIDAsIHNpemVvZihtLT5kZXYpKTsKPiA+ICsJbWVtc2V0KG0tPnZxcywgMCwgbnZx cyAqIHNpemVvZihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlKSk7Cj4gPiArCj4gPiArCXZxcyA9IGtt YWxsb2NfYXJyYXkobnZxcywgc2l6ZW9mKCp2cXMpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCF2 cXMpIHsKPiA+ICsJCXIgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBlcnI7Cj4gPiArCX0KPiA+ICsK PiA+ICsJZGV2ID0gJm0tPmRldjsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG52cXM7IGkrKykgewo+ ID4gKwkJdnFzW2ldID0gJm0tPnZxc1tpXTsKPiA+ICsJCXZxc1tpXS0+aGFuZGxlX2tpY2sgPSBo YW5kbGVfdnFfa2ljazsKPiA+ICsJfQo+ID4gKwl2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgbnZx cywgMCwgMCwgMCk7Cj4gPiArCW0tPm9wZW5lZCA9IHRydWU7Cj4gPiArCW11dGV4X3VubG9jaygm bS0+bXV0ZXgpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnI6Cj4gPiArCW11 dGV4X3VubG9jaygmbS0+bXV0ZXgpOwo+ID4gKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKPiA+ ICsJcmV0dXJuIHI7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZob3N0X21kZXZfcmVs ZWFzZSh2b2lkICpkZXZpY2VfZGF0YSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB2aG9zdF9tZGV2ICpt ID0gZGV2aWNlX2RhdGE7Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJm0tPm11dGV4KTsKPiA+ICsJ dmhvc3RfbWRldl9yZXNldChtKTsKPiA+ICsJdmhvc3RfZGV2X3N0b3AoJm0tPmRldik7Cj4gPiAr CXZob3N0X2Rldl9jbGVhbnVwKCZtLT5kZXYpOwo+ID4gKwo+ID4gKwlrZnJlZShtLT5kZXYudnFz KTsKPiA+ICsJbS0+b3BlbmVkID0gZmFsc2U7Cj4gPiArCW11dGV4X3VubG9jaygmbS0+bXV0ZXgp Owo+ID4gKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGxvbmcgdmhvc3RfbWRldl91bmxvY2tlZF9pb2N0bCh2b2lkICpkZXZpY2VfZGF0YSwKPiA+ICsJ CQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCj4gPiArewo+ID4g KwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGRldmljZV9kYXRhOwo+ID4gKwl2b2lkIF9fdXNlciAq YXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKPiA+ICsJbG9uZyByOwo+ID4gKwo+ID4gKwltdXRl eF9sb2NrKCZtLT5tdXRleCk7Cj4gPiArCj4gPiArCXN3aXRjaCAoY21kKSB7Cj4gPiArCWNhc2Ug VkhPU1RfTURFVl9HRVRfU1RBVFVTOgo+ID4gKwkJciA9IHZob3N0X21kZXZfZ2V0X3N0YXR1cyht LCBhcmdwKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIFZIT1NUX01ERVZfU0VUX1NUQVRVUzoK PiA+ICsJCXIgPSB2aG9zdF9tZGV2X3NldF9zdGF0dXMobSwgYXJncCk7Cj4gPiArCQlicmVhazsK PiA+ICsJY2FzZSBWSE9TVF9HRVRfRkVBVFVSRVM6Cj4gPiArCQlyID0gdmhvc3RfbWRldl9nZXRf ZmVhdHVyZXMobSwgYXJncCk7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBWSE9TVF9TRVRfRkVB VFVSRVM6Cj4gPiArCQlyID0gdmhvc3RfbWRldl9zZXRfZmVhdHVyZXMobSwgYXJncCk7Cj4gPiAr CQlicmVhazsKPiA+ICsJY2FzZSBWSE9TVF9NREVWX0dFVF9WUklOR19OVU06Cj4gPiArCQlyID0g dmhvc3RfbWRldl9nZXRfdnJpbmdfbnVtKG0sIGFyZ3ApOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNh c2UgVkhPU1RfTURFVl9HRVRfUVVFVUVfTlVNOgo+ID4gKwkJciA9IHZob3N0X21kZXZfZ2V0X3F1 ZXVlX251bShtLCBhcmdwKTsKPiA+ICsJCWJyZWFrOwo+IAo+IAo+IEl0J3Mgbm90IGNsZWFyIHRv IG1lIHRoYXQgaG93IHRoaXMgQVBJIHdpbGwgYmUgdXNlZCBieSB1c2Vyc3BhY2U/IEkgdGhpbmsK PiBlLmcgZmVhdHVyZXMgd2l0aG91dCBNUSBpbXBsaWVzIHRoZSBxdWV1ZSBudW0gaGVyZS4KCkkg d2FzIHRoaW5raW5nIGFib3V0IGFsd2F5cyBsZXR0aW5nIF9HRVRfUVVFVUVfTlVNIHJldHVybgp0 aGUgc3VwcG9ydGVkIG51bWJlciBvZiBxdWV1ZXMuIEZvciB2aXJ0aW8gZGV2aWNlcyBvdGhlcgp0 aGFuIHZpcnRpby1uZXQsIGNhbiB3ZSBhbHdheXMgZXhwZWN0IHRvIGhhdmUgYSBmaXhlZApkZWZh dWx0IG51bWJlciBvZiBxdWV1ZXMgd2hlbiB0aGVyZSBpcyBubyBNUSBmZWF0dXJlPwoKPiAKPiAK PiA+ICsJZGVmYXVsdDoKPiA+ICsJCXIgPSB2aG9zdF9kZXZfaW9jdGwoJm0tPmRldiwgY21kLCBh cmdwKTsKPiAKPiAKPiBJIGJlbGlldmUgaGF2aW5nIFNFVF9NRU1fVEFCTEUvU0VUX0xPR19CQVNF L1NFVF9MT0dfRkTCoCBpcyBmb3IgZnV0dXJlCj4gc3VwcG9ydCBvZiB0aG9zZSBmZWF0dXJlcy4g SWYgaXQncyB0cnVlIG5lZWQgYWRkIHNvbWUgY29tbWVudHMgb24gdGhpcy4KCk9LLgoKPiAKPiAK PiA+ICsJCWlmIChyID09IC1FTk9JT0NUTENNRCkKPiA+ICsJCQlyID0gdmhvc3RfbWRldl92cmlu Z19pb2N0bChtLCBjbWQsIGFyZ3ApOwo+ID4gKwl9Cj4gPiArCj4gPiArCW11dGV4X3VubG9jaygm bS0+bXV0ZXgpOwo+ID4gKwlyZXR1cm4gcjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb192aG9zdF9tZGV2X2Rldl9vcHMgPSB7Cj4gPiAr CS5uYW1lCQk9ICJ2ZmlvLXZob3N0LW1kZXYiLAo+ID4gKwkub3BlbgkJPSB2aG9zdF9tZGV2X29w ZW4sCj4gPiArCS5yZWxlYXNlCT0gdmhvc3RfbWRldl9yZWxlYXNlLAo+ID4gKwkuaW9jdGwJCT0g dmhvc3RfbWRldl91bmxvY2tlZF9pb2N0bCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg dmhvc3RfbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21fZGV2KGRldik7Cj4gPiArCWNvbnN0IHN0cnVj dCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOwo+ ID4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbTsKPiA+ICsJaW50IG52cXMsIHI7Cj4gPiArCj4gPiAr CS8qIEN1cnJlbnRseSwgb25seSBuZXR3b3JrIGJhY2tlbmQgaXMgc3VwcG9ydGVkLiAqLwo+ID4g KwlpZiAob3BzLT5nZXRfZGV2aWNlX2lkKG1kZXYpICE9IFZJUlRJT19JRF9ORVQpCj4gPiArCQly ZXR1cm4gLUVOT1RTVVBQOwo+IAo+IAo+IElmIHdlIGRlY2lkZSB0byBnbyB3aXRoIHRoZSB3YXkg b2Ygdmhvc3QtbmV0LW1kZXYsIHByb2JhYmx5IG5lZWQgc29tZXRoaW5nCj4gc21hcnRlci4gRS5n IGEgdmhvc3QgYnVzIGV0Yy4KPiAKPiAKPiA+ICsKPiA+ICsJaWYgKG9wcy0+Z2V0X21kZXZfZmVh dHVyZXMobWRldikgIT0gVklSVElPX01ERVZfRl9WRVJTSU9OXzEpCj4gPiArCQlyZXR1cm4gLUVO T1RTVVBQOwo+ID4gKwo+ID4gKwltID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptKSwgR0ZQ X0tFUk5FTCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpOwo+ID4gKwlpZiAoIW0pCj4gPiArCQlyZXR1 cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJbnZxcyA9IFZIT1NUX01ERVZfVlFfTUFYOwo+ID4gKwlt LT5udnFzID0gbnZxczsKPiA+ICsKPiA+ICsJbS0+dnFzID0gZGV2bV9rbWFsbG9jX2FycmF5KGRl diwgbnZxcywgc2l6ZW9mKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUpLAo+ID4gKwkJCQkgICAgR0ZQ X0tFUk5FTCk7Cj4gPiArCWlmICghbS0+dnFzKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gCj4g Cj4gSXMgaXQgYmV0dGVyIHRvIG1vdmUgdGhvc2UgYWxsb2NhdGlvbiB0byBvcGVuPyBPdGhlcndp c2UgdGhlIG1lbXNldCB0aGVyZQo+IHNlZW1zIHN0cmFuZ2UuCgpPSy4KCj4gCj4gCj4gPiArCj4g PiArCXIgPSB2ZmlvX2FkZF9ncm91cF9kZXYoZGV2LCAmdmZpb192aG9zdF9tZGV2X2Rldl9vcHMs IG0pOwo+ID4gKwlpZiAocikKPiA+ICsJCXJldHVybiByOwo+ID4gKwo+ID4gKwltdXRleF9pbml0 KCZtLT5tdXRleCk7Cj4gPiArCW0tPmZlYXR1cmVzID0gb3BzLT5nZXRfZmVhdHVyZXMobWRldik7 Cj4gPiArCW0tPm1kZXYgPSBtZGV2Owo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgdmhvc3RfbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sK PiA+ICsJc3RydWN0IHZob3N0X21kZXYgKm07Cj4gPiArCj4gPiArCW0gPSB2ZmlvX2RlbF9ncm91 cF9kZXYoZGV2KTsKPiA+ICsJbXV0ZXhfZGVzdHJveSgmbS0+bXV0ZXgpOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfY2xhc3NfaWQgdmhvc3RfbWRldl9tYXRjaFtd ID0gewo+ID4gKwl7IE1ERVZfQ0xBU1NfSURfVkhPU1QgfSwKPiA+ICsJeyAwIH0sCj4gPiArfTsK PiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG1kZXYsIHZob3N0X21kZXZfbWF0Y2gpOwo+ID4gKwo+ ID4gK3N0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmhvc3RfbWRldl9kcml2ZXIgPSB7Cj4gPiAr CS5uYW1lCT0gInZob3N0X21kZXYiLAo+ID4gKwkucHJvYmUJPSB2aG9zdF9tZGV2X3Byb2JlLAo+ ID4gKwkucmVtb3ZlCT0gdmhvc3RfbWRldl9yZW1vdmUsCj4gPiArCS5pZF90YWJsZSA9IHZob3N0 X21kZXZfbWF0Y2gsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9faW5pdCB2aG9zdF9t ZGV2X2luaXQodm9pZCkKPiA+ICt7Cj4gPiArCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RyaXZlcigm dmhvc3RfbWRldl9kcml2ZXIsIFRISVNfTU9EVUxFKTsKPiA+ICt9Cj4gPiArbW9kdWxlX2luaXQo dmhvc3RfbWRldl9pbml0KTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfbWRl dl9leGl0KHZvaWQpCj4gPiArewo+ID4gKwltZGV2X3VucmVnaXN0ZXJfZHJpdmVyKCZ2aG9zdF9t ZGV2X2RyaXZlcik7Cj4gPiArfQo+ID4gK21vZHVsZV9leGl0KHZob3N0X21kZXZfZXhpdCk7Cj4g PiArCj4gPiArTU9EVUxFX1ZFUlNJT04oIjAuMC4xIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWQgZGV2aWNlIGJhc2VkIGFj Y2VsZXJhdG9yIGZvciB2aXJ0aW8iKTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21k ZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCj4gPiBpbmRleCAxM2UwNDVlMDlkM2IuLjYwNjBj ZGJlNmQzZSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvbWRldi5oCj4gPiArKysgYi9p bmNsdWRlL2xpbnV4L21kZXYuaAo+ID4gQEAgLTExNCw2ICsxMTQsOCBAQCB2b2lkIG1kZXZfc2V0 X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+ICAgCQkgICAgICAgY29uc3Qg c3RydWN0IHZmaW9fbWRldl9kZXZpY2Vfb3BzICp2ZmlvX29wcyk7Cj4gPiAgIHZvaWQgbWRldl9z ZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlv X29wcyk7Cj4gPiArdm9pZCBtZGV2X3NldF92aG9zdF9vcHMoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2LAo+ID4gKwkJCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aG9zdF9v cHMpOwo+ID4gICBjb25zdCB2b2lkICptZGV2X2dldF9kZXZfb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldik7Cj4gPiAgIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTsKPiA+ IEBAIC0xMzEsNiArMTMzLDcgQEAgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2X2Zyb21fZGV2KHN0 cnVjdCBkZXZpY2UgKmRldik7Cj4gPiAgIGVudW0gewo+ID4gICAJTURFVl9DTEFTU19JRF9WRklP ID0gMSwKPiA+ICAgCU1ERVZfQ0xBU1NfSURfVklSVElPID0gMiwKPiA+ICsJTURFVl9DTEFTU19J RF9WSE9TVCA9IDMsCj4gPiAgIAkvKiBOZXcgZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8K PiA+ICAgfTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaCBiL2lu Y2x1ZGUvdWFwaS9saW51eC92aG9zdC5oCj4gPiBpbmRleCA0MGQwMjhlZWQ2NDUuLmRhZDNjNjJi ZDkxYiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aG9zdC5oCj4gPiArKysg Yi9pbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaAo+ID4gQEAgLTExNiw0ICsxMTYsMTcgQEAKPiA+ ICAgI2RlZmluZSBWSE9TVF9WU09DS19TRVRfR1VFU1RfQ0lECV9JT1coVkhPU1RfVklSVElPLCAw eDYwLCBfX3U2NCkKPiA+ICAgI2RlZmluZSBWSE9TVF9WU09DS19TRVRfUlVOTklORwkJX0lPVyhW SE9TVF9WSVJUSU8sIDB4NjEsIGludCkKPiA+ICsvKiBWSE9TVF9NREVWIHNwZWNpZmljIGRlZmlu ZXMgKi8KPiA+ICsKPiA+ICsvKiBHZXQgYW5kIHNldCB0aGUgc3RhdHVzIG9mIHRoZSBiYWNrZW5k LiBUaGUgc3RhdHVzIGJpdHMgZm9sbG93IHRoZQo+ID4gKyAqIHNhbWUgZGVmaW5pdGlvbiBvZiB0 aGUgZGV2aWNlIHN0YXR1cyBkZWZpbmVkIGluIHZpcnRpby1zcGVjLiAqLwo+ID4gKyNkZWZpbmUg VkhPU1RfTURFVl9HRVRfU1RBVFVTCQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg3MCwgX191OCkKPiA+ ICsjZGVmaW5lIFZIT1NUX01ERVZfU0VUX1NUQVRVUwkJX0lPVyhWSE9TVF9WSVJUSU8sIDB4NzEs IF9fdTgpCj4gPiArLyogRW5hYmxlL2Rpc2FibGUgdGhlIHJpbmcuICovCj4gPiArI2RlZmluZSBW SE9TVF9NREVWX1NFVF9WUklOR19FTkFCTEUJX0lPVyhWSE9TVF9WSVJUSU8sIDB4NzIsIHN0cnVj dCB2aG9zdF92cmluZ19zdGF0ZSkKPiA+ICsvKiBHZXQgdGhlIG1heCByaW5nIHNpemUuICovCj4g PiArI2RlZmluZSBWSE9TVF9NREVWX0dFVF9WUklOR19OVU0JX0lPVyhWSE9TVF9WSVJUSU8sIDB4 NzMsIF9fdTE2KQo+ID4gKy8qIEdldCB0aGUgbWF4IG51bWJlciBvZiBxdWV1ZXMuICovCj4gPiAr I2RlZmluZSBWSE9TVF9NREVWX0dFVF9RVUVVRV9OVU0JX0lPVyhWSE9TVF9WSVJUSU8sIDB4NzQs IF9fdTMyKQo+IAo+IAo+IERvIHdlIG5lZWQgQVBJIGZvciB1c2Vyc3BhY2UgdG8gZ2V0IGJhY2tl bmQgY2FwYWJpbGl0eT8gKHRoYXQgY2FsbHMKPiBnZXRfbWRldl9kZXZpY2VfZmVhdHVyZXMoKSkK ClZob3N0IGFscmVhZHkgaGFzIHRoZSBmZWF0dXJlcyBhbmQgYmFja2VuZCBmZWF0dXJlcyBpb2N0 bHMuCkluIHZob3N0LW1kZXYsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBzdGlsbCBqdXN0IHVzZSB0 aGVtIHRvCmV4cG9zZSB0aGUgYmFja2VuZCBjYXBhYmlsaXR5IHRvIHVzZXJzcGFjZS4KClRoYW5r cyBmb3IgdGhlIHJldmlldyEKVGl3ZWkKCj4gCj4gVGhhbmtzCj4gCj4gCj4gPiArCj4gPiAgICNl bmRpZgo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpW aXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlz dGluZm8vdmlydHVhbGl6YXRpb24=