From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH V3] vdpa: introduce virtio pci driver Date: Wed, 10 Jun 2020 03:08:37 -0400 Message-ID: <20200610025705-mutt-send-email-mst@kernel.org> References: <20200610065217.25538-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20200610065217.25538-1-jasowang@redhat.com> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" To: Jason Wang Cc: shahafs@mellanox.com, lulu@redhat.com, saugatm@xilinx.com, mhabets@solarflare.com, vmireyno@marvell.com, linux-kernel@vger.kernel.org, gdawar@xilinx.com, virtualization@lists.linux-foundation.org, eperezma@redhat.com, hanand@xilinx.com, zhangweining@ruijie.com.cn, eli@mellanox.com, lingshan.zhu@intel.com, rob.miller@broadcom.com List-Id: virtualization@lists.linuxfoundation.org T24gV2VkLCBKdW4gMTAsIDIwMjAgYXQgMDI6NTI6MTdQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiBUaGlzIHBhdGNoIGludHJvZHVjZSBhIHZEUEEgZHJpdmVyIGZvciB2aXJ0aW8tcGNpIGRl dmljZS4gSXQgYnJpZGdlcwo+IHRoZSB2aXJ0aW8tcGNpIGNvbnRyb2wgY29tbWFuZCB0byB0aGUg dkRQQSBidXMuIFRoaXMgd2lsbCBiZSB1c2VkIGZvcgo+IGRldmVsb3BpbmcgbmV3IGZlYXR1cmVz IGZvciBib3RoIHNvZnR3YXJlIHZEUEEgZnJhbWV3b3JrIGFuZCBoYXJkd2FyZQo+IHZEUEEgZmVh dHVyZS4KPiAKPiBDb21wYXJlZCB0byB2ZHBhX3NpbSwgaXQgaGFzIHNldmVyYWwgYWR2YW50YWdl czoKPiAKPiAtIGl0J3MgYSByZWFsIGRldmljZSBkcml2ZXIgd2hpY2ggYWxsb3cgdXMgdG8gcGxh eSB3aXRoIHJlYWwgaGFyZHdhcmUKPiAgIGZlYXR1cmVzCj4gLSB0eXBlIGluZGVwZW5kZW50IGlu c3RlYWQgb2YgbmV0d29ya2luZyBzcGVjaWZpYwo+IAo+IE5vdGUgdGhhdCBzaW5jZSB2aXJ0aW8g c3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGdldC9yZXN0b3JlCj4gdmlydHF1ZXVlIHN0 YXRlLiBTbyB3ZSBjYW4gbm90IHVzZSB0aGlzIGRyaXZlciBmb3IgVk0uIFRoaXMgY2FuIGJlCj4g YWRkcmVzc2VkIGJ5IGV4dGVuZGluZyB0aGUgdmlydGlvIHNwZWNpZmljYXRpb24uCj4gCj4gQ29u c2lkZXIgdGhlIGRyaXZlciBpcyBtYWlubHkgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IGZv ciB2RFBBCj4gZmVhdHVyZXMsIGl0IGNhbiBvbmx5IGJlIGJvdW5kIHZpYSBkeW5hbWljIGlkcyB0 byBtYWtlIHN1cmUgaXQncyBub3QKPiBjb25mbGljdCB3aXRoIHRoZSBkcml2ZXJzIGxpa2Ugdmly dGlvLXBjaSBvciBJRkNWRi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2Fu Z0ByZWRoYXQuY29tPgo+IC0tLQo+IENoYW5nZXMgZnJvbSBWMjoKPiAtIHJlYmFzZSBvbiB2aG9z dC5naXQgdmhvc3QgYnJhbmNoCj4gLS0tCj4gIGRyaXZlcnMvdmRwYS9LY29uZmlnICAgICAgICAg ICB8ICAgOCArCj4gIGRyaXZlcnMvdmRwYS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCj4gIGRy aXZlcnMvdmRwYS92cF92ZHBhL01ha2VmaWxlICB8ICAgMiArCj4gIGRyaXZlcnMvdmRwYS92cF92 ZHBhL3ZwX3ZkcGEuYyB8IDYwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg NCBmaWxlcyBjaGFuZ2VkLCA2MTIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy92ZHBhL3ZwX3ZkcGEvTWFrZWZpbGUKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdmRwYS92cF92ZHBhL3ZwX3ZkcGEuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZkcGEv S2NvbmZpZyBiL2RyaXZlcnMvdmRwYS9LY29uZmlnCj4gaW5kZXggM2UxY2ViOGU5ZjJiLi5kZWI4 NWU0M2E0YzIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92ZHBhL0tjb25maWcKPiArKysgYi9kcml2 ZXJzL3ZkcGEvS2NvbmZpZwo+IEBAIC0yOCw0ICsyOCwxMiBAQCBjb25maWcgSUZDVkYKPiAgCSAg VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1v ZHVsZSB3aWxsCj4gIAkgIGJlIGNhbGxlZCBpZmN2Zi4KPiAgCj4gK2NvbmZpZyBWUF9WRFBBCj4g Kwl0cmlzdGF0ZSAiVmlydGlvIFBDSSBicmlkZ2UgdkRQQSBkcml2ZXIiCj4gKwlkZXBlbmRzIG9u IFBDSV9NU0kKPiArCWhlbHAKPiArCSAgVGhpcyBrZXJuZWwgbW9kdWxlIHRoYXQgYnJpZGdlcyB2 aXJ0aW8gUENJIGRldmljZSB0byB2RFBBCj4gKwkgIGJ1cy4gSXQgYWxsb3dzIHVzIHRvIHRlc3Qg YW5kIGRldmVsb3AgdkRQQSBzdWJzeXN0ZW0gaW5zaWRlCj4gKwkgIGFuIFZNIHdpdGggdGhlIGVt dWxhdGVkIHZpcnRpby1wY2kgZGV2aWNlCj4gKwo+ICBlbmRpZiAjIFZEUEEKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy92ZHBhL01ha2VmaWxlIGIvZHJpdmVycy92ZHBhL01ha2VmaWxlCj4gaW5kZXgg OGJiYjY4NmNhN2EyLi4zN2QwMGY0OWIzYmYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92ZHBhL01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy92ZHBhL01ha2VmaWxlCj4gQEAgLTIsMyArMiw0IEBACj4g IG9iai0kKENPTkZJR19WRFBBKSArPSB2ZHBhLm8KPiAgb2JqLSQoQ09ORklHX1ZEUEFfU0lNKSAr PSB2ZHBhX3NpbS8KPiAgb2JqLSQoQ09ORklHX0lGQ1ZGKSAgICArPSBpZmN2Zi8KPiArb2JqLSQo Q09ORklHX1ZQX1ZEUEEpICAgICs9IHZwX3ZkcGEvCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmRw YS92cF92ZHBhL01ha2VmaWxlIGIvZHJpdmVycy92ZHBhL3ZwX3ZkcGEvTWFrZWZpbGUKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjMxMDg4ZDNhZjdkCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdmRwYS92cF92ZHBhL01ha2VmaWxlCj4gQEAgLTAs MCArMSwyIEBACj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArb2JqLSQo Q09ORklHX1ZQX1ZEUEEpICs9IHZwX3ZkcGEubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZkcGEv dnBfdmRwYS92cF92ZHBhLmMgYi9kcml2ZXJzL3ZkcGEvdnBfdmRwYS92cF92ZHBhLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjA3MDI5OGFiOWZjCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdmRwYS92cF92ZHBhL3ZwX3ZkcGEuYwo+IEBAIC0w LDAgKzEsNjAxIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkK PiArLyoKPiArICogdkRQQSBicmlkZ2UgZHJpdmVyIGZvciBtb2Rlcm4gdmlydGlvLXBjaSBkZXZp Y2UKCkFuZCBqdWRnaW5nIGJ5IHRoZSBjb2RlLCB0cmFuc2l0aW9uYWwgdG9vPwpPciBtYXliZSB3 ZSBzaG91bGQgZHJvcCB0cmFuc2l0aW9uYWwgZGV2aWNlIHN1cHBvcnQgaGVyZS4KCj4gKyAqCj4g KyAqIENvcHlyaWdodCAoYykgMjAyMCwgUmVkIEhhdCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4gKyAqIEF1dGhvcjogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KPiArICoKPiAr ICogQmFzZWQgb24gdmlydGlvX3BjaV9tb2Rlcm4uYy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmRwYS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvdmlydGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX3Bj aS5oPgo+ICsKPiArLyogVEJEOiByZWFkIGZyb20gY29uZmlnIHNwYWNlICovCj4gKyNkZWZpbmUg VlBfVkRQQV9NQVhfUVVFVUUgMgoKV2UgbmVlZCB0byBmaXggdGhhdCByaWdodD8gT3RoZXJ3aXNl IGxvdHMgb2YgZGV2aWNlcyBicmVhayAuLi4KCj4gKyNkZWZpbmUgVlBfVkRQQV9EUklWRVJfTkFN RSAidnBfdmRwYSIKCm5vdCBzdXJlIHdoeSB5b3UgbmVlZCB0aGlzIG1hY3JvIC4uLgoKPiArCj4g KyNkZWZpbmUgVlBfVkRQQV9GRUFUVVJFUyBcCj4gKwkoKDFVTEwgPDwgVklSVElPX0ZfQU5ZX0xB WU9VVCkJCQl8IFwKCgpUaGlzIGlzIHByZXN1bWFibHkgZm9yIHRyYW5zaXRpb25hbCBkZXZpY2Vz IG9ubHkuICBJbiBmYWN0IGxvb2tpbmcgYXQKY29kZSBpdCBzZWVtcyB0aGF0IG9ubHkgbmV0IGlu IGxlZ2FjeSBtb2RlIGFjY2VwdHMgVklSVElPX0ZfQU5ZX0xBWU9VVC4KU3BlYyB2aW9sYXRpb24g SSBndWVzcyAuLi4gYnV0IHdoYXQgc2hvdWxkIHdlIGRvPyBSZWxheCB0aGUgc3BlYwpvciBmaXgg ZHJpdmVycz8KCgo+ICsJICgxVUxMIDw8IFZJUlRJT19GX1ZFUlNJT05fMSkJCQl8IFwKPiArCSAo MVVMTCA8PCBWSVJUSU9fRl9PUkRFUl9QTEFURk9STSkJCXwgXAo+ICsJICgxVUxMIDw8IFZJUlRJ T19GX0lPTU1VX1BMQVRGT1JNKSkKPiArCj4gK3N0cnVjdCB2cF92cmluZyB7Cj4gKwl2b2lkIF9f aW9tZW0gKm5vdGlmeTsKPiArCWNoYXIgbXNpeF9uYW1lWzI1Nl07Cj4gKwlyZXNvdXJjZV9zaXpl X3Qgbm90aWZ5X3BhOwo+ICsJc3RydWN0IHZkcGFfY2FsbGJhY2sgY2I7Cj4gKwlpbnQgaXJxOwo+ ICt9Owo+ICsKPiArc3RydWN0IHZwX3ZkcGEgewo+ICsJc3RydWN0IHZkcGFfZGV2aWNlIHZkcGE7 Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPiArCj4gKwlzdHJ1Y3QgdmlydGlvX2RldmljZV9p ZCBpZDsKPiArCj4gKwlzdHJ1Y3QgdnBfdnJpbmcgdnJpbmdbVlBfVkRQQV9NQVhfUVVFVUVdOwo+ ICsKPiArCS8qIFRoZSBJTyBtYXBwaW5nIGZvciB0aGUgUENJIGNvbmZpZyBzcGFjZSAqLwo+ICsJ dm9pZCBfX2lvbWVtICogY29uc3QgKmJhc2U7Cj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25f Y2ZnIF9faW9tZW0gKmNvbW1vbjsKPiArCXZvaWQgX19pb21lbSAqZGV2aWNlOwo+ICsJLyogQmFz ZSBvZiB2cSBub3RpZmljYXRpb25zICovCj4gKwl2b2lkIF9faW9tZW0gKm5vdGlmeTsKPiArCj4g KwkvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwo+ICsJdTMyIG5vdGlmeV9v ZmZfbXVsdGlwbGllcjsKPiArCj4gKwlpbnQgbW9kZXJuX2JhcnM7Cj4gKwlpbnQgdmVjdG9yczsK PiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdnBfdmRwYSAqdmRwYV90b192cChzdHJ1Y3QgdmRw YV9kZXZpY2UgKnZkcGEpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YodmRwYSwgc3RydWN0 IHZwX3ZkcGEsIHZkcGEpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUeXBlLXNhZmUgd3JhcHBlcnMg Zm9yIGlvIGFjY2Vzc2VzLgo+ICsgKiBVc2UgdGhlc2UgdG8gZW5mb3JjZSBhdCBjb21waWxlIHRp bWUgdGhlIGZvbGxvd2luZyBzcGVjIHJlcXVpcmVtZW50Ogo+ICsgKgo+ICsgKiBUaGUgZHJpdmVy IE1VU1QgYWNjZXNzIGVhY2ggZmllbGQgdXNpbmcgdGhlIOKAnG5hdHVyYWzigJ0gYWNjZXNzCj4g KyAqIG1ldGhvZCwgaS5lLiAzMi1iaXQgYWNjZXNzZXMgZm9yIDMyLWJpdCBmaWVsZHMsIDE2LWJp dCBhY2Nlc3Nlcwo+ICsgKiBmb3IgMTYtYml0IGZpZWxkcyBhbmQgOC1iaXQgYWNjZXNzZXMgZm9y IDgtYml0IGZpZWxkcy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdTggdnBfaW9yZWFkOCh1OCBf X2lvbWVtICphZGRyKQo+ICt7Cj4gKwlyZXR1cm4gaW9yZWFkOChhZGRyKTsKPiArfQo+ICtzdGF0 aWMgaW5saW5lIHUxNiB2cF9pb3JlYWQxNihfX2xlMTYgX19pb21lbSAqYWRkcikKPiArewo+ICsJ cmV0dXJuIGlvcmVhZDE2KGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiB2cF9p b3JlYWQzMihfX2xlMzIgX19pb21lbSAqYWRkcikKPiArewo+ICsJcmV0dXJuIGlvcmVhZDMyKGFk ZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdnBfaW93cml0ZTgodTggdmFsdWUs IHU4IF9faW9tZW0gKmFkZHIpCj4gK3sKPiArCWlvd3JpdGU4KHZhbHVlLCBhZGRyKTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHZwX2lvd3JpdGUxNih1MTYgdmFsdWUsIF9fbGUxNiBf X2lvbWVtICphZGRyKQo+ICt7Cj4gKwlpb3dyaXRlMTYodmFsdWUsIGFkZHIpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgdnBfaW93cml0ZTMyKHUzMiB2YWx1ZSwgX19sZTMyIF9faW9t ZW0gKmFkZHIpCj4gK3sKPiArCWlvd3JpdGUzMih2YWx1ZSwgYWRkcik7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZwX2lvd3JpdGU2NF90d29wYXJ0KHU2NCB2YWwsCj4gKwkJCQkgX19sZTMyIF9f aW9tZW0gKmxvLCBfX2xlMzIgX19pb21lbSAqaGkpCj4gK3sKPiArCXZwX2lvd3JpdGUzMigodTMy KXZhbCwgbG8pOwo+ICsJdnBfaW93cml0ZTMyKHZhbCA+PiAzMiwgaGkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBjZmdfdHlw ZSwKPiArCQkJICAgdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKPiArewo+ICsJaW50 IHBvczsKPiArCj4gKwlmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQ X0lEX1ZORFIpOwo+ICsJICAgICBwb3MgPiAwOwo+ICsJICAgICBwb3MgPSBwY2lfZmluZF9uZXh0 X2NhcGFiaWxpdHkoZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHsKPiArCQl1OCB0eXBlLCBi YXI7Cj4gKwo+ICsJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgb2Zmc2V0b2Yoc3Ry dWN0IHZpcnRpb19wY2lfY2FwLAo+ICsJCQkJCQkJIGNmZ190eXBlKSwKPiArCQkJCSAgICAgJnR5 cGUpOwo+ICsJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgb2Zmc2V0b2Yoc3RydWN0 IHZpcnRpb19wY2lfY2FwLAo+ICsJCQkJCQkJIGJhciksCj4gKwkJCQkgICAgICZiYXIpOwo+ICsK PiArCQkvKiBJZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi8KPiAr CQlpZiAoYmFyID4gMHg1KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKHR5cGUgPT0gY2Zn X3R5cGUpIHsKPiArCQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpICYmCj4gKwkJCSAg ICBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpICYgaW9yZXNvdXJjZV90eXBlcykgewo+ICsJ CQkJKmJhcnMgfD0gKDEgPDwgYmFyKTsKPiArCQkJCXJldHVybiBwb3M7Cj4gKwkJCX0KPiArCQl9 Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19pb21lbSAqbWFw X2NhcGFiaWxpdHkoc3RydWN0IHZwX3ZkcGEgKnZwX3ZkcGEsIGludCBvZmYsCj4gKwkJCQkgICAg cmVzb3VyY2Vfc2l6ZV90ICpwYSkKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2cF92 ZHBhLT5wZGV2Owo+ICsJdTMyIG9mZnNldDsKPiArCXU4IGJhcjsKPiArCj4gKwlwY2lfcmVhZF9j b25maWdfYnl0ZShwZGV2LAo+ICsJCQkgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9f cGNpX2NhcCwgYmFyKSwKPiArCQkJICAgICAmYmFyKTsKPiArCXBjaV9yZWFkX2NvbmZpZ19kd29y ZChwZGV2LAo+ICsJCQkgICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAs IG9mZnNldCksCj4gKwkJCSAgICAgICZvZmZzZXQpOwo+ICsKPiArCWlmIChwYSkKPiArCQkqcGEg PSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSArIG9mZnNldDsKPiArCj4gKwlyZXR1cm4g dnBfdmRwYS0+YmFzZVtiYXJdICsgb2Zmc2V0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdTY0IHZwX3Zk cGFfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKPiArewo+ICsJc3RydWN0 IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3RvX3ZwKHZkcGEpOwo+ICsJdTY0IGZlYXR1cmVzOwo+ ICsKPiArCXZwX2lvd3JpdGUzMigwLCAmdnBfdmRwYS0+Y29tbW9uLT5kZXZpY2VfZmVhdHVyZV9z ZWxlY3QpOwo+ICsJZmVhdHVyZXMgPSB2cF9pb3JlYWQzMigmdnBfdmRwYS0+Y29tbW9uLT5kZXZp Y2VfZmVhdHVyZSk7Cj4gKwl2cF9pb3dyaXRlMzIoMSwgJnZwX3ZkcGEtPmNvbW1vbi0+ZGV2aWNl X2ZlYXR1cmVfc2VsZWN0KTsKPiArCWZlYXR1cmVzIHw9ICgodTY0KXZwX2lvcmVhZDMyKCZ2cF92 ZHBhLT5jb21tb24tPmRldmljZV9mZWF0dXJlKSA8PCAzMik7Cj4gKwlmZWF0dXJlcyAmPSBWUF9W RFBBX0ZFQVRVUkVTOwo+ICsKPiArCXJldHVybiBmZWF0dXJlczsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2cF92ZHBhX3NldF9mZWF0dXJlcyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHU2NCBm ZWF0dXJlcykKPiArewo+ICsJc3RydWN0IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3RvX3ZwKHZk cGEpOwo+ICsKPiArCXZwX2lvd3JpdGUzMigwLCAmdnBfdmRwYS0+Y29tbW9uLT5ndWVzdF9mZWF0 dXJlX3NlbGVjdCk7Cj4gKwl2cF9pb3dyaXRlMzIoKHUzMilmZWF0dXJlcywgJnZwX3ZkcGEtPmNv bW1vbi0+Z3Vlc3RfZmVhdHVyZSk7Cj4gKwl2cF9pb3dyaXRlMzIoMSwgJnZwX3ZkcGEtPmNvbW1v bi0+Z3Vlc3RfZmVhdHVyZV9zZWxlY3QpOwo+ICsJdnBfaW93cml0ZTMyKGZlYXR1cmVzID4+IDMy LCAmdnBfdmRwYS0+Y29tbW9uLT5ndWVzdF9mZWF0dXJlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHU4IHZwX3ZkcGFfZ2V0X3N0YXR1cyhzdHJ1Y3QgdmRwYV9kZXZpY2Ug KnZkcGEpCj4gK3sKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBhID0gdmRwYV90b192cCh2ZHBh KTsKPiArCj4gKwlyZXR1cm4gdnBfaW9yZWFkOCgmdnBfdmRwYS0+Y29tbW9uLT5kZXZpY2Vfc3Rh dHVzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnBfdmRwYV9mcmVlX2lycShzdHJ1Y3QgdnBf dmRwYSAqdnBfdmRwYSkKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2cF92ZHBhLT5w ZGV2Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFZQX1ZEUEFfTUFYX1FVRVVF OyBpKyspIHsKPiArCQlpZiAodnBfdmRwYS0+dnJpbmdbaV0uaXJxICE9IC0xKSB7Cj4gKwkJCXZw X2lvd3JpdGUxNihpLCAmdnBfdmRwYS0+Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+ICsJCQl2cF9p b3dyaXRlMTYoVklSVElPX01TSV9OT19WRUNUT1IsCj4gKwkJCQkgICAgICZ2cF92ZHBhLT5jb21t b24tPnF1ZXVlX21zaXhfdmVjdG9yKTsKPiArCQkJZGV2bV9mcmVlX2lycSgmcGRldi0+ZGV2LCB2 cF92ZHBhLT52cmluZ1tpXS5pcnEsCj4gKwkJCQkgICAgICAmdnBfdmRwYS0+dnJpbmdbaV0pOwo+ ICsJCQl2cF92ZHBhLT52cmluZ1tpXS5pcnEgPSAtMTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYg KHZwX3ZkcGEtPnZlY3RvcnMpIHsKPiArCQlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTsKPiAr CQl2cF92ZHBhLT52ZWN0b3JzID0gMDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVy bl90IHZwX3ZkcGFfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiArewo+ICsJc3Ry dWN0IHZwX3ZyaW5nICp2cmluZyA9IGFyZzsKPiArCj4gKwlpZiAodnJpbmctPmNiLmNhbGxiYWNr KQo+ICsJCXJldHVybiB2cmluZy0+Y2IuY2FsbGJhY2sodnJpbmctPmNiLnByaXZhdGUpOwo+ICsK PiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2cF92ZHBhX3Jl cXVlc3RfaXJxKHN0cnVjdCB2cF92ZHBhICp2cF92ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2Rl diAqcGRldiA9IHZwX3ZkcGEtPnBkZXY7Cj4gKwlpbnQgaSwgcmV0LCBpcnE7Cj4gKwo+ICsJcmV0 ID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIFZQX1ZEUEFfTUFYX1FVRVVFLAo+ICsJCQkJ ICAgIFZQX1ZEUEFfTUFYX1FVRVVFLCBQQ0lfSVJRX01TSVgpOwo+ICsJaWYgKHJldCAhPSBWUF9W RFBBX01BWF9RVUVVRSkgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInZwX3ZkcGE6IGZhaWwg dG8gYWxsb2NhdGUgaXJxIHZlY3RvcnNcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJdnBfdmRwYS0+dmVjdG9ycyA9IFZQX1ZEUEFfTUFYX1FVRVVFOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBWUF9WRFBBX01BWF9RVUVVRTsgaSsrKSB7Cj4gKwkJc25wcmludGYodnBfdmRwYS0+ dnJpbmdbaV0ubXNpeF9uYW1lLCAyNTYsCj4gKwkJCSJ2cC12ZHBhWyVzXS0lZFxuIiwgcGNpX25h bWUocGRldiksIGkpOwo+ICsJCWlycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIGkpOwo+ICsJCXJl dCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLAo+ICsJCQkJICAgICAgIHZwX3Zk cGFfaW50cl9oYW5kbGVyLAo+ICsJCQkJICAgICAgIDAsIHZwX3ZkcGEtPnZyaW5nW2ldLm1zaXhf bmFtZSwKPiArCQkJCSAgICAgICAmdnBfdmRwYS0+dnJpbmdbaV0pOwo+ICsJCWlmIChyZXQpIHsK PiArCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidnBfdmRwYTogZmFpbCB0byByZXF1ZXN0IGlycSBm b3IgdnEgJWRcbiIsCj4gKwkJCQlpKTsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsJCXZwX2lv d3JpdGUxNihpLCAmdnBfdmRwYS0+Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+ICsJCXZwX2lvd3Jp dGUxNihpLCAmdnBfdmRwYS0+Y29tbW9uLT5xdWV1ZV9tc2l4X3ZlY3Rvcik7Cj4gKwkJdnBfdmRw YS0+dnJpbmdbaV0uaXJxID0gaXJxOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICtlcnI6Cj4g Kwl2cF92ZHBhX2ZyZWVfaXJxKHZwX3ZkcGEpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdnBfdmRwYV9zZXRfc3RhdHVzKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwg dTggc3RhdHVzKQo+ICt7Cj4gKwlzdHJ1Y3QgdnBfdmRwYSAqdnBfdmRwYSA9IHZkcGFfdG9fdnAo dmRwYSk7Cj4gKwl1OCBzID0gdnBfdmRwYV9nZXRfc3RhdHVzKHZkcGEpOwo+ICsKPiArCWlmIChz dGF0dXMgJiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LICYmCj4gKwkgICAgIShzICYgVklSVElP X0NPTkZJR19TX0RSSVZFUl9PSykpIHsKPiArCQl2cF92ZHBhX3JlcXVlc3RfaXJxKHZwX3ZkcGEp Owo+ICsJfQo+ICsKPiArCXZwX2lvd3JpdGU4KHN0YXR1cywgJnZwX3ZkcGEtPmNvbW1vbi0+ZGV2 aWNlX3N0YXR1cyk7Cj4gKwo+ICsJaWYgKCEoc3RhdHVzICYgVklSVElPX0NPTkZJR19TX0RSSVZF Ul9PSykgJiYKPiArCSAgICAocyAmIFZJUlRJT19DT05GSUdfU19EUklWRVJfT0spKQo+ICsJCXZw X3ZkcGFfZnJlZV9pcnEodnBfdmRwYSk7Cj4gK30KPiArCj4gK3N0YXRpYyB1MTYgdnBfdmRwYV9n ZXRfdnFfbnVtX21heChzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCj4gK3sKPiArCXN0cnVjdCB2 cF92ZHBhICp2cF92ZHBhID0gdmRwYV90b192cCh2ZHBhKTsKPiArCj4gKwlyZXR1cm4gdnBfaW9y ZWFkMTYoJnZwX3ZkcGEtPmNvbW1vbi0+cXVldWVfc2l6ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB1 NjQgdnBfdmRwYV9nZXRfdnFfc3RhdGUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1MTYgcWlk KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCB2ZHBhX25vdGlm aWNhdGlvbl9hcmVhCj4gK3ZwX3ZkcGFfZ2V0X3ZxX25vdGlmaWNhdGlvbihzdHJ1Y3QgdmRwYV9k ZXZpY2UgKnZkcGEsIHUxNiBxaWQpCj4gK3sKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBhID0g dmRwYV90b192cCh2ZHBhKTsKPiArCXN0cnVjdCB2ZHBhX25vdGlmaWNhdGlvbl9hcmVhIG5vdGlm eTsKPiArCj4gKwlub3RpZnkuYWRkciA9IHZwX3ZkcGEtPnZyaW5nW3FpZF0ubm90aWZ5X3BhOwo+ ICsJbm90aWZ5LnNpemUgPSB2cF92ZHBhLT5ub3RpZnlfb2ZmX211bHRpcGxpZXI7Cj4gKwo+ICsJ cmV0dXJuIG5vdGlmeTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2cF92ZHBhX3NldF92cV9zdGF0 ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBxaWQsCj4gKwkJCQl1NjQgbnVtKQo+ICt7 Cj4gKwkvKiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHZpcnRpbyBzcGVjaWZp Y2F0aW9uLCBzbwo+ICsJICogd2UgcmV0dXJuIC1FTk9UU1VQUCBoZXJlLiBUaGlzIG1lYW5zIHdl IGNhbid0IHN1cHBvcnQgbGl2ZQo+ICsJICogbWlncmF0aW9uLCB2aG9zdCBkZXZpY2Ugc3RhcnQv c3RvcC4KPiArCSAqLwo+ICsKPiArCXJldHVybiAtRU5PVFNVUFA7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZwX3ZkcGFfc2V0X3ZxX2NiKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IHFp ZCwKPiArCQkJICAgICAgc3RydWN0IHZkcGFfY2FsbGJhY2sgKmNiKQo+ICt7Cj4gKwlzdHJ1Y3Qg dnBfdmRwYSAqdnBfdmRwYSA9IHZkcGFfdG9fdnAodmRwYSk7Cj4gKwo+ICsJdnBfdmRwYS0+dnJp bmdbcWlkXS5jYiA9ICpjYjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnBfdmRwYV9zZXRfdnFf cmVhZHkoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLAo+ICsJCQkJIHUxNiBxaWQsIGJvb2wgcmVh ZHkpCj4gK3sKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBhID0gdmRwYV90b192cCh2ZHBhKTsK PiArCj4gKwl2cF9pb3dyaXRlMTYocWlkLCAmdnBfdmRwYS0+Y29tbW9uLT5xdWV1ZV9zZWxlY3Qp Owo+ICsJdnBfaW93cml0ZTE2KHJlYWR5LCAmdnBfdmRwYS0+Y29tbW9uLT5xdWV1ZV9lbmFibGUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2cF92ZHBhX2dldF92cV9yZWFkeShzdHJ1Y3QgdmRw YV9kZXZpY2UgKnZkcGEsIHUxNiBxaWQpCj4gK3sKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBh ID0gdmRwYV90b192cCh2ZHBhKTsKPiArCj4gKwl2cF9pb3dyaXRlMTYocWlkLCAmdnBfdmRwYS0+ Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+ICsKPiArCXJldHVybiB2cF9pb3JlYWQxNigmdnBfdmRw YS0+Y29tbW9uLT5xdWV1ZV9lbmFibGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2cF92ZHBh X3NldF92cV9udW0oc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1MTYgcWlkLAo+ICsJCQkgICAg ICAgdTMyIG51bSkKPiArewo+ICsJc3RydWN0IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3RvX3Zw KHZkcGEpOwo+ICsKPiArCXZwX2lvd3JpdGUxNihudW0sICZ2cF92ZHBhLT5jb21tb24tPnF1ZXVl X3NpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZwX3ZkcGFfc2V0X3ZxX2FkZHJlc3Moc3Ry dWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1MTYgcWlkLAo+ICsJCQkJICB1NjQgZGVzY19hcmVhLCB1 NjQgZHJpdmVyX2FyZWEsCj4gKwkJCQkgIHU2NCBkZXZpY2VfYXJlYSkKPiArewo+ICsJc3RydWN0 IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3RvX3ZwKHZkcGEpOwo+ICsJc3RydWN0IHZpcnRpb19w Y2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSB2cF92ZHBhLT5jb21tb247Cj4gKwo+ICsJdnBf aW93cml0ZTE2KHFpZCwgJmNmZy0+cXVldWVfc2VsZWN0KTsKPiArCXZwX2lvd3JpdGU2NF90d29w YXJ0KGRlc2NfYXJlYSwKPiArCQkJICAgICAmY2ZnLT5xdWV1ZV9kZXNjX2xvLCAmY2ZnLT5xdWV1 ZV9kZXNjX2hpKTsKPiArCXZwX2lvd3JpdGU2NF90d29wYXJ0KGRyaXZlcl9hcmVhLAo+ICsJCQkg ICAgICZjZmctPnF1ZXVlX2F2YWlsX2xvLCAmY2ZnLT5xdWV1ZV9hdmFpbF9oaSk7Cj4gKwl2cF9p b3dyaXRlNjRfdHdvcGFydChkZXZpY2VfYXJlYSwKPiArCQkJICAgICAmY2ZnLT5xdWV1ZV91c2Vk X2xvLCAmY2ZnLT5xdWV1ZV91c2VkX2hpKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdnBfdmRwYV9raWNrX3ZxKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2 IHFpZCkKPiArewo+ICsJc3RydWN0IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3RvX3ZwKHZkcGEp Owo+ICsKPiArCXZwX2lvd3JpdGUxNihxaWQsIHZwX3ZkcGEtPnZyaW5nW3FpZF0ubm90aWZ5KTsK PiArfQo+ICsKPiArc3RhdGljIHUzMiB2cF92ZHBhX2dldF9nZW5lcmF0aW9uKHN0cnVjdCB2ZHBh X2RldmljZSAqdmRwYSkKPiArewo+ICsJc3RydWN0IHZwX3ZkcGEgKnZwX3ZkcGEgPSB2ZHBhX3Rv X3ZwKHZkcGEpOwo+ICsKPiArCXJldHVybiB2cF9pb3JlYWQ4KCZ2cF92ZHBhLT5jb21tb24tPmNv bmZpZ19nZW5lcmF0aW9uKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2cF92ZHBhX2dldF9kZXZp Y2VfaWQoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdnBfdmRwYSAq dnBfdmRwYSA9IHZkcGFfdG9fdnAodmRwYSk7Cj4gKwo+ICsJcmV0dXJuIHZwX3ZkcGEtPmlkLmRl dmljZTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2cF92ZHBhX2dldF92ZW5kb3JfaWQoc3RydWN0 IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdnBfdmRwYSAqdnBfdmRwYSA9IHZk cGFfdG9fdnAodmRwYSk7Cj4gKwo+ICsJcmV0dXJuIHZwX3ZkcGEtPmlkLnZlbmRvcjsKPiArfQo+ ICsKPiArc3RhdGljIHUzMiB2cF92ZHBhX2dldF92cV9hbGlnbihzdHJ1Y3QgdmRwYV9kZXZpY2Ug KnZkcGEpCj4gK3sKPiArCXJldHVybiBQQUdFX1NJWkU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZwX3ZkcGFfZ2V0X2NvbmZpZyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsCj4gKwkJCSAgICAg ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICsJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBp bnQgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgdnBfdmRwYSAqdnBfdmRwYSA9IHZkcGFfdG9fdnAodmRw YSk7Cj4gKwl1OCBvbGQsIG5ldzsKPiArCXU4ICpwOwo+ICsJaW50IGk7Cj4gKwo+ICsJZG8gewo+ ICsJCW9sZCA9IHZwX2lvcmVhZDgoJnZwX3ZkcGEtPmNvbW1vbi0+Y29uZmlnX2dlbmVyYXRpb24p Owo+ICsJCXAgPSBidWY7Cj4gKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+ICsJCQkqcCsr ID0gdnBfaW9yZWFkOCh2cF92ZHBhLT5kZXZpY2UgKyBvZmZzZXQgKyBpKTsKPiArCj4gKwkJbmV3 ID0gdnBfaW9yZWFkOCgmdnBfdmRwYS0+Y29tbW9uLT5jb25maWdfZ2VuZXJhdGlvbik7Cj4gKwl9 IHdoaWxlIChvbGQgIT0gbmV3KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnBfdmRwYV9zZXRf Y29uZmlnKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwKPiArCQkJICAgICAgIHVuc2lnbmVkIGlu dCBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZiwKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4p Cj4gK3sKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBhID0gdmRwYV90b192cCh2ZHBhKTsKPiAr CWNvbnN0IHU4ICpwID0gYnVmOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxl bjsgaSsrKQo+ICsJCXZwX2lvd3JpdGU4KCpwKyssIHZwX3ZkcGEtPmRldmljZSArIG9mZnNldCAr IGkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2cF92ZHBhX3NldF9jb25maWdfY2Ioc3RydWN0 IHZkcGFfZGV2aWNlICp2ZHBhLAo+ICsJCQkJICBzdHJ1Y3QgdmRwYV9jYWxsYmFjayAqY2IpCj4g K3sKPiArCS8qIFdlIGRvbid0IHN1cHBvcnQgY29uZmlnIGludGVycnVwdCAqLwoKQnJlYWtzIHRo aW5ncyBsaWtlIGJhbGxvb24gb3IgbWlncmF0aW9uIG5vdGlmaWNhdGlvbnMgd2l0aCB2aXJ0aW8g bmV0LCBkb2Vzbid0IGl0PwoKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2ZHBhX2Nv bmZpZ19vcHMgdnBfdmRwYV9vcHMgPSB7Cj4gKwkuZ2V0X2ZlYXR1cmVzCT0gdnBfdmRwYV9nZXRf ZmVhdHVyZXMsCj4gKwkuc2V0X2ZlYXR1cmVzCT0gdnBfdmRwYV9zZXRfZmVhdHVyZXMsCj4gKwku Z2V0X3N0YXR1cwk9IHZwX3ZkcGFfZ2V0X3N0YXR1cywKPiArCS5zZXRfc3RhdHVzCT0gdnBfdmRw YV9zZXRfc3RhdHVzLAo+ICsJLmdldF92cV9udW1fbWF4CT0gdnBfdmRwYV9nZXRfdnFfbnVtX21h eCwKPiArCS5nZXRfdnFfc3RhdGUJPSB2cF92ZHBhX2dldF92cV9zdGF0ZSwKPiArCS5nZXRfdnFf bm90aWZpY2F0aW9uID0gdnBfdmRwYV9nZXRfdnFfbm90aWZpY2F0aW9uLAo+ICsJLnNldF92cV9z dGF0ZQk9IHZwX3ZkcGFfc2V0X3ZxX3N0YXRlLAo+ICsJLnNldF92cV9jYgk9IHZwX3ZkcGFfc2V0 X3ZxX2NiLAo+ICsJLnNldF92cV9yZWFkeQk9IHZwX3ZkcGFfc2V0X3ZxX3JlYWR5LAo+ICsJLmdl dF92cV9yZWFkeQk9IHZwX3ZkcGFfZ2V0X3ZxX3JlYWR5LAo+ICsJLnNldF92cV9udW0JPSB2cF92 ZHBhX3NldF92cV9udW0sCj4gKwkuc2V0X3ZxX2FkZHJlc3MJPSB2cF92ZHBhX3NldF92cV9hZGRy ZXNzLAo+ICsJLmtpY2tfdnEJPSB2cF92ZHBhX2tpY2tfdnEsCj4gKwkuZ2V0X2dlbmVyYXRpb24J PSB2cF92ZHBhX2dldF9nZW5lcmF0aW9uLAo+ICsJLmdldF9kZXZpY2VfaWQJPSB2cF92ZHBhX2dl dF9kZXZpY2VfaWQsCj4gKwkuZ2V0X3ZlbmRvcl9pZAk9IHZwX3ZkcGFfZ2V0X3ZlbmRvcl9pZCwK PiArCS5nZXRfdnFfYWxpZ24JPSB2cF92ZHBhX2dldF92cV9hbGlnbiwKPiArCS5nZXRfY29uZmln CT0gdnBfdmRwYV9nZXRfY29uZmlnLAo+ICsJLnNldF9jb25maWcJPSB2cF92ZHBhX3NldF9jb25m aWcsCj4gKwkuc2V0X2NvbmZpZ19jYiAgPSB2cF92ZHBhX3NldF9jb25maWdfY2IsCj4gK307Cj4g Kwo+ICtzdGF0aWMgaW50IHZwX3ZkcGFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0 IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiArCXN0cnVjdCB2cF92ZHBhICp2cF92ZHBhOwo+ICsJaW50IGNvbW1vbiwg bm90aWZ5LCBkZXZpY2UsIHJldCwgaTsKPiArCXN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIHZpcnRp b19pZDsKPiArCXJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7Cj4gKwl1MTYgbm90aWZ5X29mZjsK PiArCj4gKwkvKiBXZSBvbmx5IG93biBkZXZpY2VzID49IDB4MTAwMCBhbmQgPD0gMHgxMDdmOiBs ZWF2ZSB0aGUgcmVzdC4gKi8KPiArCWlmIChwZGV2LT5kZXZpY2UgPCAweDEwMDAgfHwgcGRldi0+ ZGV2aWNlID4gMHgxMDdmKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmIChwZGV2LT5k ZXZpY2UgPCAweDEwNDApIHsKPiArCQkvKiBUcmFuc2l0aW9uYWwgZGV2aWNlczogdXNlIHRoZSBQ Q0kgc3Vic3lzdGVtIGRldmljZSBpZCBhcwo+ICsJCSAqIHZpcnRpbyBkZXZpY2UgaWQsIHNhbWUg YXMgbGVnYWN5IGRyaXZlciBhbHdheXMgZGlkLgo+ICsJCSAqLwo+ICsJCXZpcnRpb19pZC5kZXZp Y2UgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBNb2Rlcm4g ZGV2aWNlczogc2ltcGx5IHVzZSBQQ0kgZGV2aWNlIGlkLAo+ICsJCSAqIGJ1dCBzdGFydCBmcm9t IDB4MTA0MC4KPiArCQkgKi8KPiArCQl2aXJ0aW9faWQuZGV2aWNlID0gcGRldi0+ZGV2aWNlIC0g MHgxMDQwOwo+ICsJfQo+ICsJdmlydGlvX2lkLnZlbmRvciA9IHBkZXYtPnN1YnN5c3RlbV92ZW5k b3I7Cj4gKwo+ICsJcmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwo+ICsJaWYgKHJldCkg ewo+ICsJCWRldl9lcnIoZGV2LCAidnBfdmRwYTogRmFpbCB0byBlbmFibGUgUENJIGRldmljZVxu Iik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwl2cF92ZHBhID0gdmRwYV9hbGxvY19k ZXZpY2Uoc3RydWN0IHZwX3ZkcGEsIHZkcGEsCj4gKwkJCQkgICAgZGV2LCAmdnBfdmRwYV9vcHMp Owo+ICsJaWYgKHZwX3ZkcGEgPT0gTlVMTCkgewo+ICsJCWRldl9lcnIoZGV2LCAidnBfdmRwYTog RmFpbGVkIHRvIGFsbG9jYXRlIHZEUEEgc3RydWN0dXJlXG4iKTsKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCX0KPiArCj4gKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKPiArCXBjaV9zZXRfZHJ2ZGF0 YShwZGV2LCB2cF92ZHBhKTsKPiArCj4gKwl2cF92ZHBhLT5wZGV2ID0gcGRldjsKPiArCXZwX3Zk cGEtPnZkcGEuZG1hX2RldiA9ICZwZGV2LT5kZXY7Cj4gKwo+ICsJY29tbW9uID0gZmluZF9jYXBh YmlsaXR5KHBkZXYsIFZJUlRJT19QQ0lfQ0FQX0NPTU1PTl9DRkcsCj4gKwkJCQkgSU9SRVNPVVJD RV9JTyB8IElPUkVTT1VSQ0VfTUVNLAo+ICsJCQkJICZ2cF92ZHBhLT5tb2Rlcm5fYmFycyk7Cj4g KwlpZiAoIWNvbW1vbikgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwKPiArCQkJInZwX3ZkcGE6 IGxlZ2FjeSBkZXZpY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7Cj4gKwkJcmV0ID0gLUVOT0RFVjsK PiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlub3RpZnkgPSBmaW5kX2NhcGFiaWxpdHkocGRl diwgVklSVElPX1BDSV9DQVBfTk9USUZZX0NGRywKPiArCQkJCSBJT1JFU09VUkNFX0lPIHwgSU9S RVNPVVJDRV9NRU0sCj4gKwkJCQkgJnZwX3ZkcGEtPm1vZGVybl9iYXJzKTsKPiArCWlmICghbm90 aWZ5KSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJCQkidnBfdmRwYTogbWlzc2luZyBu b3RpZmljYXRpb24gY2FwYWJpbGl0aWVzXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdv dG8gZXJyOwo+ICsJfQo+ICsKPiArCWRldmljZSA9IGZpbmRfY2FwYWJpbGl0eShwZGV2LCBWSVJU SU9fUENJX0NBUF9ERVZJQ0VfQ0ZHLAo+ICsJCQkJIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNF X01FTSwKPiArCQkJCSAmdnBfdmRwYS0+bW9kZXJuX2JhcnMpOwo+ICsJaWYgKCFkZXZpY2UpIHsK PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsCj4gKwkJCSJ2cF92ZHBhOiBtaXNzaW5nIGRldmljZSBj YXBhYmlsaXRpZXNcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnI7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIHZwX3ZkcGEtPm1vZGVybl9i YXJzLAo+ICsJCQkJIFZQX1ZEUEFfRFJJVkVSX05BTUUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycjsKPiArCj4gKwl2cF92ZHBhLT5iYXNlID0gcGNpbV9pb21hcF90YWJsZShwZGV2KTsKPiAr Cj4gKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRf TUFTSyg2NCkpOwo+ICsJaWYgKHJldCkKPiArCQlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVy ZW50KCZwZGV2LT5kZXYsCj4gKwkJCQkJCURNQV9CSVRfTUFTSygzMikpOwo+ICsJaWYgKHJldCkK PiArCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSA2NC1iaXQgb3IgMzIt Yml0IERNQS4gIFRyeWluZyB0byBjb250aW51ZSwgYnV0IHRoaXMgbWlnaHQgbm90IHdvcmsuXG4i KTsKPiArCj4gKwl2cF92ZHBhLT5kZXZpY2UgPSBtYXBfY2FwYWJpbGl0eSh2cF92ZHBhLCBkZXZp Y2UsIE5VTEwpOwo+ICsJdnBfdmRwYS0+bm90aWZ5ID0gbWFwX2NhcGFiaWxpdHkodnBfdmRwYSwg bm90aWZ5LCAmbm90aWZ5X3BhKTsKPiArCXZwX3ZkcGEtPmNvbW1vbiA9IG1hcF9jYXBhYmlsaXR5 KHZwX3ZkcGEsIGNvbW1vbiwgTlVMTCk7Cj4gKwl2cF92ZHBhLT5pZCA9IHZpcnRpb19pZDsKPiAr Cj4gKwlyZXQgPSB2ZHBhX3JlZ2lzdGVyX2RldmljZSgmdnBfdmRwYS0+dmRwYSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRvIHZk cGEgYnVzXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlwY2lfcmVhZF9jb25maWdf ZHdvcmQocGRldiwgbm90aWZ5ICsgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCksCj4gKwkJ CSAgICAgICZ2cF92ZHBhLT5ub3RpZnlfb2ZmX211bHRpcGxpZXIpOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBWUF9WRFBBX01BWF9RVUVVRTsgaSsrKSB7Cj4gKwkJdnBfaW93cml0ZTE2KGksICZ2 cF92ZHBhLT5jb21tb24tPnF1ZXVlX3NlbGVjdCk7Cj4gKwkJbm90aWZ5X29mZiA9IHZwX2lvcmVh ZDE2KCZ2cF92ZHBhLT5jb21tb24tPnF1ZXVlX25vdGlmeV9vZmYpOwo+ICsJCXZwX3ZkcGEtPnZy aW5nW2ldLmlycSA9IC0xOwo+ICsJCXZwX3ZkcGEtPnZyaW5nW2ldLm5vdGlmeSA9IHZwX3ZkcGEt Pm5vdGlmeSArCj4gKwkJCW5vdGlmeV9vZmYgKiB2cF92ZHBhLT5ub3RpZnlfb2ZmX211bHRpcGxp ZXI7Cj4gKwkJdnBfdmRwYS0+dnJpbmdbaV0ubm90aWZ5X3BhID0gbm90aWZ5X3BhICsKPiArCQkJ bm90aWZ5X29mZiAqIHZwX3ZkcGEtPm5vdGlmeV9vZmZfbXVsdGlwbGllcjsKPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArCj4gK2VycjoKPiArCXB1dF9kZXZpY2UoJnZwX3ZkcGEtPnZkcGEuZGV2 KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZwX3ZkcGFfcmVtb3Zl KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdnBfdmRwYSAqdnBfdmRwYSA9 IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwl2ZHBhX3VucmVnaXN0ZXJfZGV2aWNlKCZ2 cF92ZHBhLT52ZHBhKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZwX3Zk cGFfZHJpdmVyID0gewo+ICsJLm5hbWUJCT0gInZwLXZkcGEiLAo+ICsJLmlkX3RhYmxlCT0gTlVM TCwgLyogb25seSBkeW5hbWljIGlkcyAqLwo+ICsJLnByb2JlCQk9IHZwX3ZkcGFfcHJvYmUsCj4g KwkucmVtb3ZlCQk9IHZwX3ZkcGFfcmVtb3ZlLAo+ICt9Owo+ICsKPiArbW9kdWxlX3BjaV9kcml2 ZXIodnBfdmRwYV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiSmFzb24gV2FuZyA8amFz b3dhbmdAcmVkaGF0LmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJ2cC12ZHBhIik7Cj4g K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArTU9EVUxFX1ZFUlNJT04oIjEiKTsKCgpJc24ndCB0 aGVyZSBzb21ldGhpbmcgd2UgY2FuIGRvIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUKZHVw bGljYXRpb24/IHZpcnRpbywgaWZjdmYgYW5kIG5vdyB0aGlzIHNoYXJlIGEgdG9uIG9mIGNvZGUg Li4uCkxldCdzIG1ha2UgYSBsaWJyYXJ5PwoKPiAtLSAKPiAyLjIwLjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcg bGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xp c3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==