From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tianyu Lan Subject: Re: [PATCH 2/3] HYPERV/IOMMU: Add Hyper-V stub IOMMU driver Date: Sat, 2 Feb 2019 14:02:06 +0800 Message-ID: References: <1548929853-25877-1-git-send-email-Tianyu.Lan@microsoft.com> <1548929853-25877-3-git-send-email-Tianyu.Lan@microsoft.com> <20190201145130.GW3973@sasha-vm> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190201145130.GW3973@sasha-vm> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Sasha Levin Cc: Alex Williamson , Lan Tianyu , Arnd Bergmann , Greg Kroah-Hartman , nicolas.ferre-UWL1GkI3JZL3oGB3hsPCZA@public.gmane.org, "linux-kernel@vger kernel org" , michael.h.kelley-0li6OtcxBFHby3iVrkZq2A@public.gmane.org, Vitaly Kuznetsov , iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, mchehab+samsung-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org, kys-0li6OtcxBFHby3iVrkZq2A@public.gmane.org, davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org List-Id: iommu@lists.linux-foundation.org SGkgU2FzaGE6CiAgICAgICAgICAgICBUaGFua3MgZm9yIHlvdXIgcmV2aWV3LgoKT24gRnJpLCBG ZWIgMSwgMjAxOSBhdCAxMDo1MSBQTSBTYXNoYSBMZXZpbiA8c2FzaGFsQGtlcm5lbC5vcmc+IHdy b3RlOgo+Cj4gSGkgVGlhbnl1LAo+Cj4gRmV3IGNvbW1lbnRzIGJlbG93Lgo+Cj4gT24gVGh1LCBK YW4gMzEsIDIwMTkgYXQgMDY6MTc6MzJQTSArMDgwMCwgbGFudGlhbnl1MTk4NkBnbWFpbC5jb20g d3JvdGU6Cj4gPkZyb206IExhbiBUaWFueXUgPFRpYW55dS5MYW5AbWljcm9zb2Z0LmNvbT4KPiA+ Cj4gPk9uIHRoZSBiYXJlIG1ldGFsLCBlbmFibGluZyBYMkFQSUMgbW9kZSByZXF1aXJlcyBpbnRl cnJ1cHQgcmVtYXBwaW5nCj4gPmZ1bmN0aW9uIHdoaWNoIGhlbHBzIHRvIGRlbGl2ZXIgaXJxIHRv IGNwdSB3aXRoIDMyLWJpdCBBUElDIElELgo+ID5IeXBlci1WIGRvZXNuJ3QgcHJvdmlkZSBpbnRl cnJ1cHQgcmVtYXBwaW5nIGZ1bmN0aW9uIHNvIGZhciBhbmQgSHlwZXItVgo+ID5NU0kgcHJvdG9j b2wgYWxyZWFkeSBzdXBwb3J0cyB0byBkZWxpdmVyIGludGVycnVwdCB0byB0aGUgQ1BVIHdob3Nl Cj4gPnZpcnR1YWwgcHJvY2Vzc29yIGluZGV4IGlzIG1vcmUgdGhhbiAyNTUuIElPLUFQSUMgaW50 ZXJydXB0IHN0aWxsIGhhcwo+ID44LWJpdCBBUElDIElEIGxpbWl0YXRpb24uCj4gPgo+ID5UaGlz IHBhdGNoIGlzIHRvIGFkZCBIeXBlci1WIHN0dWIgSU9NTVUgZHJpdmVyIGluIG9yZGVyIHRvIGVu YWJsZQo+ID5YMkFQSUMgbW9kZSBzdWNjZXNzZnVsbHkgaW4gSHlwZXItViBMaW51eCBndWVzdC4g VGhlIGRyaXZlciByZXR1cm5zIFgyQVBJQwo+ID5pbnRlcnJ1cHQgcmVtYXBwaW5nIGNhcGFiaWxp dHkgd2hlbiBYMkFQSUMgbW9kZSBpcyBhdmFpbGFibGUuIE90aGVyd2lzZSwKPiA+aXQgY3JlYXRl cyBhIEh5cGVyLVYgaXJxIGRvbWFpbiB0byBsaW1pdCBJTy1BUElDIGludGVycnVwdHMnIGFmZmlu aXR5Cj4gPmFuZCBtYWtlIHN1cmUgY3B1cyBhc3NpZ25lZCB3aXRoIElPLUFQSUMgaW50ZXJydXB0 IGhhdmUgOC1iaXQgQVBJQyBJRC4KPiA+Cj4gPlNpZ25lZC1vZmYtYnk6IExhbiBUaWFueXUgPFRp YW55dS5MYW5AbWljcm9zb2Z0LmNvbT4KPiA+LS0tCj4gPiBkcml2ZXJzL2lvbW11L0tjb25maWcg ICAgICAgICB8ICAgNyArKwo+ID4gZHJpdmVycy9pb21tdS9NYWtlZmlsZSAgICAgICAgfCAgIDEg Kwo+ID4gZHJpdmVycy9pb21tdS9oeXBlcnYtaW9tbXUuYyAgfCAxODkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiBkcml2ZXJzL2lvbW11L2lycV9yZW1hcHBp bmcuYyB8ICAgMyArCj4gPiBkcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuaCB8ICAgMSArCj4g PiA1IGZpbGVzIGNoYW5nZWQsIDIwMSBpbnNlcnRpb25zKCspCj4gPiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9pb21tdS9oeXBlcnYtaW9tbXUuYwo+ID4KPiA+ZGlmZiAtLWdpdCBhL2RyaXZl cnMvaW9tbXUvS2NvbmZpZyBiL2RyaXZlcnMvaW9tbXUvS2NvbmZpZwo+ID5pbmRleCA0NWQ3MDIx Li41YzM5N2MwIDEwMDY0NAo+ID4tLS0gYS9kcml2ZXJzL2lvbW11L0tjb25maWcKPiA+KysrIGIv ZHJpdmVycy9pb21tdS9LY29uZmlnCj4gPkBAIC00MzcsNCArNDM3LDExIEBAIGNvbmZpZyBRQ09N X0lPTU1VCj4gPiAgICAgICBoZWxwCj4gPiAgICAgICAgIFN1cHBvcnQgZm9yIElPTU1VIG9uIGNl cnRhaW4gUXVhbGNvbW0gU29Dcy4KPiA+Cj4gPitjb25maWcgSFlQRVJWX0lPTU1VCj4gPisgICAg ICBib29sICJIeXBlci1WIHN0dWIgSU9NTVUgc3VwcG9ydCIKPiA+KyAgICAgIGRlcGVuZHMgb24g SFlQRVJWCj4KPiAgICAgICAgIHNlbGVjdCBJT01NVV9BUEkgPwoKWWVz44CCIHdpbGwgIHVwZGF0 ZS4KCj4KPiA+KyAgICAgIGhlbHAKPiA+KyAgICAgICAgICBIeXBlci1WIHN0dWIgSU9NTVUgZHJp dmVyIHByb3ZpZGVzIGNhcGFiaWxpdHkgdG8gcnVuCj4gPisgICAgICAgICAgTGludXggZ3Vlc3Qg d2l0aCBYMkFQSUMgbW9kZSBlbmFibGVkLgo+ID4rCj4gPiBlbmRpZiAjIElPTU1VX1NVUFBPUlQK PiA+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvTWFrZWZpbGUgYi9kcml2ZXJzL2lvbW11L01h a2VmaWxlCj4gPmluZGV4IGExNThhNjguLjhjNzFhMTUgMTAwNjQ0Cj4gPi0tLSBhL2RyaXZlcnMv aW9tbXUvTWFrZWZpbGUKPiA+KysrIGIvZHJpdmVycy9pb21tdS9NYWtlZmlsZQo+ID5AQCAtMzIs MyArMzIsNCBAQCBvYmotJChDT05GSUdfRVhZTk9TX0lPTU1VKSArPSBleHlub3MtaW9tbXUubwo+ ID4gb2JqLSQoQ09ORklHX0ZTTF9QQU1VKSArPSBmc2xfcGFtdS5vIGZzbF9wYW11X2RvbWFpbi5v Cj4gPiBvYmotJChDT05GSUdfUzM5MF9JT01NVSkgKz0gczM5MC1pb21tdS5vCj4gPiBvYmotJChD T05GSUdfUUNPTV9JT01NVSkgKz0gcWNvbV9pb21tdS5vCj4gPitvYmotJChDT05GSUdfSFlQRVJW X0lPTU1VKSArPSBoeXBlcnYtaW9tbXUubwo+ID5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9o eXBlcnYtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaHlwZXJ2LWlvbW11LmMKPiA+bmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+aW5kZXggMDAwMDAwMC4uYTY0Yjc0Nwo+ID4tLS0gL2Rldi9udWxsCj4g PisrKyBiL2RyaXZlcnMvaW9tbXUvaHlwZXJ2LWlvbW11LmMKPiA+QEAgLTAsMCArMSwxODkgQEAK PiA+Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPisKPiA+KyNkZWZpbmUg cHJfZm10KGZtdCkgICAgICJIWVBFUlYtSVI6ICIgZm10Cj4gPisKPiA+KyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+ID4rI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ID4rI2luY2x1ZGUg PGxpbnV4L2lycS5oPgo+ID4rI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Cj4gPisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4gPisKPiA+KyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+Cj4gPisjaW5j bHVkZSA8YXNtL2lvX2FwaWMuaD4KPiA+KyNpbmNsdWRlIDxhc20vaXJxX3JlbWFwcGluZy5oPgo+ ID4rI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+Cj4gPisKPiA+KyNpbmNsdWRlICJpcnFfcmVt YXBwaW5nLmgiCj4gPisKPiA+Ky8qCj4gPisgKiBBY2NvcmRpbmcgSU8tQVBJQyBzcGVjLCBJTyBB UElDIGhhcyBhIDI0LWVudHJ5IEludGVycnVwdAo+ID4rICogUmVkaXJlY3Rpb24gVGFibGUuCj4K PiBDYW4gdGhlIHNwZWMgYmUgbGlua2VkIHNvbWV3aGVyZT8gSW4gdGhlIGNvbW1pdCBtZXNzYWdl LCBvciBoZXJlPwoKU3VyZS4gV2lsbCB1cGRhdGUuCgo+Cj4gPisgKi8KPiA+KyNkZWZpbmUgSU9B UElDX1JFTUFQUElOR19FTlRSWSAyNAo+ID4rCj4gPitzdGF0aWMgY3B1bWFza190IGlvYXBpY19t YXhfY3B1bWFzayA9IHsgQ1BVX0JJVFNfTk9ORSB9Owo+ID4rc3RydWN0IGlycV9kb21haW4gKmlv YXBpY19pcl9kb21haW47Cj4gPisKPiA+K3N0YXRpYyBpbnQgaHlwZXJ2X2lyX3NldF9hZmZpbml0 eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCj4gPisgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBj cHVtYXNrICptYXNrLCBib29sIGZvcmNlKQo+ID4rewo+ID4rICAgICAgc3RydWN0IGlycV9kYXRh ICpwYXJlbnQgPSBkYXRhLT5wYXJlbnRfZGF0YTsKPiA+KyAgICAgIHN0cnVjdCBpcnFfY2ZnICpj ZmcgPSBpcnFkX2NmZyhkYXRhKTsKPiA+KyAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5 ICplbnRyeTsKPiA+KyAgICAgIGNwdW1hc2tfdCBjcHVtYXNrOwo+ID4rICAgICAgaW50IHJldDsK PiA+Kwo+ID4rICAgICAgY3B1bWFza19hbmRub3QoJmNwdW1hc2ssIG1hc2ssICZpb2FwaWNfbWF4 X2NwdW1hc2spOwo+ID4rCj4gPisgICAgICAvKiBSZXR1cm4gZXJyb3IgSWYgbmV3IGlycSBhZmZp bml0eSBpcyBvdXQgb2YgaW9hcGljX21heF9jcHVtYXNrLiAqLwo+ID4rICAgICAgaWYgKCFjcHVt YXNrX2VtcHR5KCZjcHVtYXNrKSkKPiA+KyAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g PisKPiA+KyAgICAgIHJldCA9IHBhcmVudC0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eShwYXJlbnQs IG1hc2ssIGZvcmNlKTsKPiA+KyAgICAgIGlmIChyZXQgPCAwIHx8IHJldCA9PSBJUlFfU0VUX01B U0tfT0tfRE9ORSkKPiA+KyAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+Kwo+ID4rICAgICAg ZW50cnkgPSBkYXRhLT5jaGlwX2RhdGE7Cj4gPisgICAgICBlbnRyeS0+ZGVzdCA9IGNmZy0+ZGVz dF9hcGljaWQ7Cj4gPisgICAgICBlbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7Cj4gPisgICAg ICBzZW5kX2NsZWFudXBfdmVjdG9yKGNmZyk7Cj4gPisKPiA+KyAgICAgIHJldHVybiAwOwo+ID4r fQo+ID4rCj4gPitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGh5cGVydl9pcl9jaGlwID0gewo+ID4r ICAgICAgLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiSFlQRVJWLUlSIiwKPiA+KyAgICAgIC5p cnFfYWNrICAgICAgICAgICAgICAgID0gYXBpY19hY2tfaXJxLAo+ID4rICAgICAgLmlycV9zZXRf YWZmaW5pdHkgICAgICAgPSBoeXBlcnZfaXJfc2V0X2FmZmluaXR5LAo+ID4rfTsKPiA+Kwo+ID4r c3RhdGljIGludCBoeXBlcnZfaXJxX3JlbWFwcGluZ19hbGxvYyhzdHJ1Y3QgaXJxX2RvbWFpbiAq ZG9tYWluLAo+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCj4gPisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmFyZykKPiA+K3sKPiA+KyAgICAgIHN0cnVjdCBpcnFfYWxsb2Nf aW5mbyAqaW5mbyA9IGFyZzsKPiA+KyAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICpl bnRyeTsKPgo+IFdoYXQncyB0aGUgcm9sZSBvZiB0aGlzIHZhcmlhYmxlPyBXZSBzZXQgaXQsIG9u Y2UsIGxhdGVyIG9uIGluIHRoZQo+IGZ1bmN0aW9uIGJ1dCB0aGF0J3MgYWxsPwo+CgpUaGlzIG9u ZSBzaG91bGQgYmUgcmVtb3ZlZC4KCj4gPisgICAgICBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRh Owo+ID4rICAgICAgc3RydWN0IGlycV9kZXNjICpkZXNjOwo+ID4rICAgICAgc3RydWN0IGlycV9j ZmcgKmNmZzsKPiA+KyAgICAgIGludCByZXQgPSAwOwo+ID4rCj4gPisgICAgICBpZiAoIWluZm8g fHwgaW5mby0+dHlwZSAhPSBYODZfSVJRX0FMTE9DX1RZUEVfSU9BUElDIHx8IG5yX2lycXMgPiAx KQo+ID4rICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+Kwo+ID4rICAgICAgcmV0ID0g aXJxX2RvbWFpbl9hbGxvY19pcnFzX3BhcmVudChkb21haW4sIHZpcnEsIG5yX2lycXMsIGFyZyk7 Cj4gPisgICAgICBpZiAocmV0IDwgMCkKPiA+KyAgICAgICAgICAgICAgZ290byBmYWlsOwo+ID4r Cj4gPisgICAgICBpcnFfZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmly cSk7Cj4gPisgICAgICBjZmcgPSBpcnFkX2NmZyhpcnFfZGF0YSk7Cj4KPiBJcyB0aGlzIGFjdHVh bGx5IGJlaW5nIHVzZWQgYW55d2hlcmUsIG9yIGRvIHdlIG9ubHkgbmVlZCBpdCBmb3IgdGhlCj4g Y2hlY2sgYmVsb3c/IEl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIGNvZGUgd2h5IHdlJ3JlIGNhbGxp bmcgaXJxZF9jZmcoKQo+IGFuZCBpZ25vcmluZyB0aGUgcmVzdWx0LgoKU29ycnkuIGlycWRfY2Zn KCkgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaGVyZS4KCj4KPiA+KyAgICAgIGlmICghaXJxX2RhdGEg fHwgIWNmZykgewo+Cj4gWW91IGp1c3QgZGVyZWZlcmVuY2VkIGlycV9kYXRhIGluIHRoZSBsaW5l IGFib3ZlIHRoaXMgb25lLCBpdCdzIGEgYml0Cj4gbGF0ZSB0byBjaGVjayB0aGF0IGl0J3Mgbm90 IE5VTEwuCj4KCk9LLiBXaWxsIHVwZGF0ZS4KCj4gPisgICAgICAgICAgICAgIHJldCA9IC1FSU5W QUw7Cj4gPisgICAgICAgICAgICAgIGdvdG8gZmFpbDsKPiA+KyAgICAgIH0KPiA+Kwo+ID4rICAg ICAgaXJxX2RhdGEtPmNoaXAgPSAmaHlwZXJ2X2lyX2NoaXA7Cj4gPisKPiA+KyAgICAgIC8qCj4g PisgICAgICAgKiBTYXZlIElPQVBJQyBlbnRyeSBwb2ludGVyIGhlcmUgaW4gb3JkZXIgdG8gc2V0 IHZlY3RvciBhbmQKPiA+KyAgICAgICAqIGFuZCBkZXN0X2FwaWNpZCBpbiB0aGUgaHlwZXJ2X2ly cV9yZW1hcHBuZ19hY3RpdmF0ZSgpCj4gPisgICAgICAgKiBhbmQgaHlwZXJ2X2lyX3NldF9hZmZp bml0eSgpLiBJT0FQSUMgZHJpdmVyIGlnbm9yZXMKPiA+KyAgICAgICAqIGNmZy0+ZGVzdF9hcGlj aWQgYW5kIGNmZy0+dmVjdG9yIHdoZW4gaXJxIHJlbWFwcGluZwo+ID4rICAgICAgICogbW9kZSBp cyBlbmFibGVkLiBEZXRhaWwgc2VlIGlvYXBpY19jb25maWd1cmVfZW50cnkoKS4KPiA+KyAgICAg ICAqLwo+ID4rICAgICAgaXJxX2RhdGEtPmNoaXBfZGF0YSA9IGVudHJ5ID0gaW5mby0+aW9hcGlj X2VudHJ5Owo+ID4rCj4gPisgICAgICAvKgo+ID4rICAgICAgICogSHlwdmVyLVYgSU8gQVBJQyBp cnEgYWZmaW5pdHkgc2hvdWxkIGJlIGluIHRoZSBzY29wZSBvZgo+ID4rICAgICAgICogaW9hcGlj X21heF9jcHVtYXNrIGJlY2F1c2Ugbm8gaXJxIHJlbWFwcGluZyBzdXBwb3J0Lgo+ID4rICAgICAg ICovCj4gPisgICAgICBkZXNjID0gaXJxX2RhdGFfdG9fZGVzYyhpcnFfZGF0YSk7Cj4gPisgICAg ICBjcHVtYXNrX2FuZChkZXNjLT5pcnFfY29tbW9uX2RhdGEuYWZmaW5pdHksCj4gPisgICAgICAg ICAgICAgICAgICAgICAgZGVzYy0+aXJxX2NvbW1vbl9kYXRhLmFmZmluaXR5LAo+ID4rICAgICAg ICAgICAgICAgICAgICAgICZpb2FwaWNfbWF4X2NwdW1hc2spOwo+ID4rCj4gPisgZmFpbDoKPiA+ KyAgICAgIHJldHVybiByZXQ7Cj4KPiBUaGlzIG9uZSBkb2Vzbid0IGFjdHVhbGx5IGZyZWUgYW55 dGhpbmc/CgppcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oKSBzaG91bGQgYmUgY2FsbGVkIGhl cmUuIFRoYW5rcy4KCj4KPiA+K30KPiA+Kwo+ID4rc3RhdGljIHZvaWQgaHlwZXJ2X2lycV9yZW1h cHBpbmdfZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ID4rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykK PiA+K3sKPiA+KyAgICAgIGlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbihkb21haW4sIHZpcnEs IG5yX2lycXMpOwo+ID4rfQo+ID4rCj4gPitzdGF0aWMgaW50IGh5cGVydl9pcnFfcmVtYXBwbmdf YWN0aXZhdGUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKPiA+KyAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEsIGJvb2wgcmVzZXJ2ZSkKPiA+K3sKPiA+ KyAgICAgIHN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFkX2NmZyhpcnFfZGF0YSk7Cj4gPisgICAg ICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnkgPSBpcnFfZGF0YS0+Y2hpcF9kYXRh Owo+ID4rCj4gPisgICAgICBlbnRyeS0+ZGVzdCA9IGNmZy0+ZGVzdF9hcGljaWQ7Cj4gPisgICAg ICBlbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7Cj4gPisKPiA+KyAgICAgIHJldHVybiAwOwo+ ID4rfQo+ID4rCj4gPitzdGF0aWMgc3RydWN0IGlycV9kb21haW5fb3BzIGh5cGVydl9pcl9kb21h aW5fb3BzID0gewo+ID4rICAgICAgLmFsbG9jID0gaHlwZXJ2X2lycV9yZW1hcHBpbmdfYWxsb2Ms Cj4gPisgICAgICAuZnJlZSA9IGh5cGVydl9pcnFfcmVtYXBwaW5nX2ZyZWUsCj4gPisgICAgICAu YWN0aXZhdGUgPSBoeXBlcnZfaXJxX3JlbWFwcG5nX2FjdGl2YXRlLAo+ID4rfTsKPiA+Kwo+ID4r c3RhdGljIGludCBfX2luaXQgaHlwZXJ2X3ByZXBhcmVfaXJxX3JlbWFwcGluZyh2b2lkKQo+ID4r ewo+ID4rICAgICAgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZuOwo+ID4rICAgICAgdTMyIGFwaWNf aWQ7Cj4gPisgICAgICBpbnQgaTsKPiA+Kwo+ID4rICAgICAgaWYgKHg4Nl9oeXBlcl90eXBlICE9 IFg4Nl9IWVBFUl9NU19IWVBFUlYgfHwKPiA+KyAgICAgICAgICAheDJhcGljX3N1cHBvcnRlZCgp KQo+ID4rICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+Kwo+ID4rICAgICAgZm4gPSBp cnFfZG9tYWluX2FsbG9jX25hbWVkX2lkX2Z3bm9kZSgiSFlQRVJWLUlSIiwgMCk7Cj4gPisgICAg ICBpZiAoIWZuKQo+ID4rICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPgo+IFdoeSBFRkFV TFQ/IFRoZSBvbmx5IHJlYXNvbiBpcnFfZG9tYWluX2FsbG9jX25hbWVkX2lkX2Z3bm9kZSgpIG1p Z2h0Cj4gZmFpbCBpcyBydW5uaW5nIG91dCBvZiBtZW1vcnkuCgpFTk9NRU0gc2hvdWxkIGJlIG1v cmUgYWNjdXJhdGUuCgo+Cj4gPisKPiA+KyAgICAgIGlvYXBpY19pcl9kb21haW4gPQo+ID4rICAg ICAgICAgICAgICBpcnFfZG9tYWluX2NyZWF0ZV9oaWVyYXJjaHkoYXJjaF9nZXRfaXJfcGFyZW50 X2RvbWFpbigpLAo+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgSU9BUElDX1JF TUFQUElOR19FTlRSWSwgZm4sCj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHlw ZXJ2X2lyX2RvbWFpbl9vcHMsIE5VTEwpOwo+ID4rCj4gPisgICAgICBpcnFfZG9tYWluX2ZyZWVf Zndub2RlKGZuKTsKPiA+Kwo+ID4rICAgICAgLyoKPiA+KyAgICAgICAqIEh5cGVyLVYgZG9lc24n dCBwcm92aWRlIGlycSByZW1hcHBpbmcgZnVuY3Rpb24gZm9yCj4gPisgICAgICAgKiBJTy1BUElD IGFuZCBzbyBJTy1BUElDIG9ubHkgYWNjZXB0cyA4LWJpdCBBUElDIElELgo+ID4rICAgICAgICog UHJlcGFyZSBtYXggY3B1IGFmZmluaXR5IGZvciBJT0FQSUMgaXJxcy4gU2NhbiBjcHUgMC0yNTUK PiA+KyAgICAgICAqIGFuZCBzZXQgY3B1IGludG8gaW9hcGljX21heF9jcHVtYXNrIGlmIGl0cyBB UElDIElEIGlzIGxlc3MKPiA+KyAgICAgICAqIHRoYW4gMjU1Lgo+Cj4gT2ZmLWJ5LW9uZSBoZXJl OiBpdCdsbCBzZXQgdGhlIENQVSBpbiB0aGUgYWZmaW5pdHkgbWFzayBpZiBpdCdzIGxlc3MKPiB0 aGFuIDI1Niwgbm90IDI1NS4KClllcy4gd2lsbCB1cGRhdGUuCgo+Cj4gPisgICAgICAgKi8KPiA+ KyAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewo+ID4rICAgICAgICAgICAgICBhcGlj X2lkID0gY3B1X3BoeXNpY2FsX2lkKGkpOwo+ID4rICAgICAgICAgICAgICBpZiAoYXBpY19pZCA+ IDI1NSkKPiA+KyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+Kwo+ID4rICAgICAg ICAgICAgICBjcHVtYXNrX3NldF9jcHUoaSwgJmlvYXBpY19tYXhfY3B1bWFzayk7Cj4gPisgICAg ICB9Cj4KPiBJJ20gY3VyaW91cyBoZXJlOiBhc3N1bWluZyB3ZSBoYXZlIGEgbGFyZ2UgYW1vdW50 IG9mIENQVXMsIHdoYXQKPiBndWFyYW50ZWUgZG8gd2UgaGF2ZSB0aGF0IHRoaXMgbWFzayB3aWxs IGhhdmUgYW55dGhpbmcgc2V0PyBXaGF0IGhhcHBlbnMKPiBpZiBpdCByZW1haW5zIGVtcHR5PwoK VGhlIEFQSUMgaWQgb2YgQlNQIGlzIGFsd2F5cyAwLiBUaGUgQ1BVJ3MgQVBJQyBJRCBjb21lcyBm cm9tIEFDUEkgTUFEVCB0YWJsZS4KVGhlIEFQSUMgSUQgaW4gdGhlIEFDUEkgTUFEVCB0YWJsZSB3 aWxsIGJlIG1vbm90b25lIGluY3JlYXNpbmcgZnJvbSBIeXBlci1WCnRlYW0uCgo+Cj4gPisKPiA+ KyAgICAgIHJldHVybiAwOwo+ID4rfQo+ID4rCj4gPitzdGF0aWMgaW50IF9faW5pdCBoeXBlcnZf ZW5hYmxlX2lycV9yZW1hcHBpbmcodm9pZCkKPiA+K3sKPiA+KyAgICAgIHJldHVybiBJUlFfUkVN QVBfWDJBUElDX01PREU7Cj4gPit9Cj4gPisKPiA+K3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAq aHlwZXJ2X2dldF9pcl9pcnFfZG9tYWluKHN0cnVjdCBpcnFfYWxsb2NfaW5mbyAqaW5mbykKPiA+ K3sKPiA+KyAgICAgIGlmIChpbmZvLT50eXBlID09IFg4Nl9JUlFfQUxMT0NfVFlQRV9JT0FQSUMp Cj4gPisgICAgICAgICAgICAgIHJldHVybiBpb2FwaWNfaXJfZG9tYWluOwo+ID4rICAgICAgZWxz ZQo+ID4rICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+K30KPiA+Kwo+ID4rc3RydWN0IGly cV9yZW1hcF9vcHMgaHlwZXJ2X2lycV9yZW1hcF9vcHMgPSB7Cj4gPisgICAgICAucHJlcGFyZSAg ICAgICAgICAgICAgICA9IGh5cGVydl9wcmVwYXJlX2lycV9yZW1hcHBpbmcsCj4gPisgICAgICAu ZW5hYmxlICAgICAgICAgICAgICAgICA9IGh5cGVydl9lbmFibGVfaXJxX3JlbWFwcGluZywKPiA+ KyAgICAgIC5nZXRfaXJfaXJxX2RvbWFpbiAgICAgID0gaHlwZXJ2X2dldF9pcl9pcnFfZG9tYWlu LAo+ID4rfTsKPiA+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jIGIv ZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmMKPiA+aW5kZXggYjk0ZWJkNC4uODFjZjI5MCAx MDA2NDQKPiA+LS0tIGEvZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmMKPiA+KysrIGIvZHJp dmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmMKPiA+QEAgLTEwMyw2ICsxMDMsOSBAQCBpbnQgX19p bml0IGlycV9yZW1hcHBpbmdfcHJlcGFyZSh2b2lkKQo+ID4gICAgICAgZWxzZSBpZiAoSVNfRU5B QkxFRChDT05GSUdfQU1EX0lPTU1VKSAmJgo+ID4gICAgICAgICAgICAgICAgYW1kX2lvbW11X2ly cV9vcHMucHJlcGFyZSgpID09IDApCj4gPiAgICAgICAgICAgICAgIHJlbWFwX29wcyA9ICZhbWRf aW9tbXVfaXJxX29wczsKPiA+KyAgICAgIGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0hZUEVS Vl9JT01NVSkgJiYKPiA+KyAgICAgICAgICAgICAgIGh5cGVydl9pcnFfcmVtYXBfb3BzLnByZXBh cmUoKSA9PSAwKQo+ID4rICAgICAgICAgICAgICByZW1hcF9vcHMgPSAmaHlwZXJ2X2lycV9yZW1h cF9vcHM7Cj4gPiAgICAgICBlbHNlCj4gPiAgICAgICAgICAgICAgIHJldHVybiAtRU5PU1lTOwo+ ID4KPiA+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5oIGIvZHJpdmVy cy9pb21tdS9pcnFfcmVtYXBwaW5nLmgKPiA+aW5kZXggMGFmZWY2ZS4uZjg2MDllOSAxMDA2NDQK PiA+LS0tIGEvZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmgKPiA+KysrIGIvZHJpdmVycy9p b21tdS9pcnFfcmVtYXBwaW5nLmgKPiA+QEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IGlycV9yZW1h cF9vcHMgewo+ID4KPiA+IGV4dGVybiBzdHJ1Y3QgaXJxX3JlbWFwX29wcyBpbnRlbF9pcnFfcmVt YXBfb3BzOwo+ID4gZXh0ZXJuIHN0cnVjdCBpcnFfcmVtYXBfb3BzIGFtZF9pb21tdV9pcnFfb3Bz Owo+ID4rZXh0ZXJuIHN0cnVjdCBpcnFfcmVtYXBfb3BzIGh5cGVydl9pcnFfcmVtYXBfb3BzOwo+ ID4KPiA+ICNlbHNlICAvKiBDT05GSUdfSVJRX1JFTUFQICovCj4gPgo+ID4tLQo+ID4yLjcuNAo+ ID4KCgoKLS0gCkJlc3QgcmVnYXJkcwpUaWFueXUgTGFuCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5s aW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFp bG1hbi9saXN0aW5mby9pb21tdQ==