From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?iso-8859-1?Q?Monn=E9?= Subject: Re: [PATCH V3 11/29] x86/hvm: Introduce a emulated VTD for HVM Date: Thu, 19 Oct 2017 12:20:35 +0100 Message-ID: <20171019112035.juze2w6zmlswco4d@dhcp-3-128.uk.xensource.com> References: <1506049330-11196-1-git-send-email-tianyu.lan@intel.com> <1506049330-11196-12-git-send-email-tianyu.lan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1506049330-11196-12-git-send-email-tianyu.lan@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Lan Tianyu Cc: tim@xen.org, kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, konrad.wilk@oracle.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, xen-devel@lists.xen.org, jbeulich@suse.com, Chao Gao List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBTZXAgMjEsIDIwMTcgYXQgMTE6MDE6NTJQTSAtMDQwMCwgTGFuIFRpYW55dSB3cm90 ZToKPiBGcm9tOiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgo+IAo+IFRoaXMgcGF0Y2gg YWRkcyBjcmVhdGUvZGVzdHJveSBmdW5jdGlvbiBmb3IgdGhlIGVtdWxhdGVkIFZURAo+IGFuZCBh ZGFwdHMgaXQgdG8gdGhlIGNvbW1vbiBWSU9NTVUgYWJzdHJhY3Rpb24uCj4gCj4gU2lnbmVkLW9m Zi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBMYW4g VGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4KPiAtLS0KPiAgeGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvdnRkL01ha2VmaWxlIHwgICA3ICstCj4gIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pb21tdS5oICB8ICAyMyArKysrKy0KPiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2 dGQuYyAgIHwgMTQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmls ZXMgY2hhbmdlZCwgMTcwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCj4gCj4gZGlmZiAt LWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9NYWtlZmlsZSBiL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3Z0ZC9NYWtlZmlsZQo+IGluZGV4IGYzMDI2NTMuLjE2M2M3ZmUgMTAwNjQ0 Cj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL01ha2VmaWxlCj4gKysrIGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL01ha2VmaWxlCj4gQEAgLTEsOCArMSw5IEBACj4gIHN1 YmRpci0kKENPTkZJR19YODYpICs9IHg4Ngo+ICAKPiAtb2JqLXkgKz0gaW9tbXUubwo+ICBvYmot eSArPSBkbWFyLm8KPiAtb2JqLXkgKz0gdXRpbHMubwo+IC1vYmoteSArPSBxaW52YWwubwo+ICBv YmoteSArPSBpbnRyZW1hcC5vCj4gK29iai15ICs9IGlvbW11Lm8KPiArb2JqLXkgKz0gcWludmFs Lm8KPiAgb2JqLXkgKz0gcXVpcmtzLm8KPiArb2JqLXkgKz0gdXRpbHMubwoKV2h5IGRvIHlvdSBu ZWVkIHRvIHNodWZmbGUgdGhlIGxpc3QgYWJvdmU/CgpBbHNvIEknbSBub3Qgc3VyZSB0aGUgSW50 ZWwgdklPTU1VIGltcGxlbWVudGF0aW9uIHNob3VsZCBsaXZlIGhlcmUuIEFzCnlvdSBjYW4gc2Vl IHRoZSBwYXRoIGlzOgoKeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkLwoKVGhlIHZJT01NVSBp cyBub3QgdGllZCB0byBwYXNzdGhyb3VnaCBhdCBhbGwsIHNvIEkgd291bGQgcmF0aGVyIHBsYWNl Cml0IGluOgoKeGVuL2RyaXZlcnMvdnZ0ZC8KCk9yIG1heWJlIHlvdSBjYW4gY3JlYXRlIHNvbWV0 aGluZyBsaWtlOgoKeGVuL2RyaXZlcnMvdmlvbW11LwoKU28gdGhhdCBhbGwgdklPTU1VIGltcGxl bWVudGF0aW9ucyBjYW4gc2hhcmUgc29tZSBjb2RlLgoKPiArb2JqLSQoQ09ORklHX1ZJT01NVSkg Kz0gdnZ0ZC5vCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21t dS5oIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmgKPiBpbmRleCBkN2U0MzNl Li5lZjAzOGM5IDEwMDY0NAo+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21t dS5oCj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmgKPiBAQCAtNjYs NiArNjYsMTIgQEAKPiAgI2RlZmluZSBWRVJfTUFKT1IodikgICAgICAgICgoKHYpICYgMHhmMCkg Pj4gNCkKPiAgI2RlZmluZSBWRVJfTUlOT1IodikgICAgICAgICgodikgJiAweDBmKQo+ICAKPiAr LyogU3VwcG9ydGVkIEFkanVzdGVkIEd1ZXN0IEFkZHJlc3MgV2lkdGhzICovCj4gKyNkZWZpbmUg RE1BX0NBUF9TQUdBV19TSElGVCAgICAgICAgIDgKPiArIC8qIDM5LWJpdCBBR0FXLCAzLWxldmVs IHBhZ2UtdGFibGUgKi8KPiArI2RlZmluZSBETUFfQ0FQX1NBR0FXXzM5Yml0ICAgICAgICAgKDB4 MlVMTCA8PCBETUFfQ0FQX1NBR0FXX1NISUZUKQo+ICsjZGVmaW5lIERNQV9DQVBfTkRfNjRLICAg ICAgICAgICAgICA2VUxMCj4gKwo+ICAvKgo+ICAgKiBEZWNvZGluZyBDYXBhYmlsaXR5IFJlZ2lz dGVyCj4gICAqLwo+IEBAIC03NCw2ICs4MCw3IEBACj4gICNkZWZpbmUgY2FwX3dyaXRlX2RyYWlu KGMpICAgICAoKChjKSA+PiA1NCkgJiAxKQo+ICAjZGVmaW5lIGNhcF9tYXhfYW1hc2tfdmFsKGMp ICAgKCgoYykgPj4gNDgpICYgMHgzZikKPiAgI2RlZmluZSBjYXBfbnVtX2ZhdWx0X3JlZ3MoYykg ICgoKChjKSA+PiA0MCkgJiAweGZmKSArIDEpCj4gKyNkZWZpbmUgY2FwX3NldF9udW1fZmF1bHRf cmVncyhjKSAgKCgoKGMpIC0gMSkgJiAweGZmKSA8PCA0MCkKPiAgI2RlZmluZSBjYXBfcGdzZWxf aW52KGMpICAgICAgICgoKGMpID4+IDM5KSAmIDEpCj4gIAo+ICAjZGVmaW5lIGNhcF9zdXBlcl9w YWdlX3ZhbChjKSAgKCgoYykgPj4gMzQpICYgMHhmKQo+IEBAIC04NSwxMSArOTIsMTMgQEAKPiAg I2RlZmluZSBjYXBfc3BzXzF0YihjKSAgICAgICAgICgoYyA+PiAzNykgJiAxKQo+ICAKPiAgI2Rl ZmluZSBjYXBfZmF1bHRfcmVnX29mZnNldChjKSAgICAoKCgoYykgPj4gMjQpICYgMHgzZmYpICog MTYpCj4gKyNkZWZpbmUgY2FwX3NldF9mYXVsdF9yZWdfb2Zmc2V0KGMpICgoKChjKSAvIDE2KSAm IDB4M2ZmKSA8PCAyNCApCj4gIAo+ICAjZGVmaW5lIGNhcF9pc29jaChjKSAgICAgICAgKCgoYykg Pj4gMjMpICYgMSkKPiAgI2RlZmluZSBjYXBfcW9zKGMpICAgICAgICAoKChjKSA+PiAyMikgJiAx KQo+ICAjZGVmaW5lIGNhcF9tZ2F3KGMpICAgICAgICAoKCgoYykgPj4gMTYpICYgMHgzZikgKyAx KQo+IC0jZGVmaW5lIGNhcF9zYWdhdyhjKSAgICAgICAgKCgoYykgPj4gOCkgJiAweDFmKQo+ICsj ZGVmaW5lIGNhcF9zZXRfbWdhdyhjKSAgICAgKCgoKGMpIC0gMSkgJiAweDNmKSA8PCAxNikKPiAr I2RlZmluZSBjYXBfc2FnYXcoYykgICAgICAgICgoKGMpID4+IERNQV9DQVBfU0FHQVdfU0hJRlQp ICYgMHgxZikKPiAgI2RlZmluZSBjYXBfY2FjaGluZ19tb2RlKGMpICAgICgoKGMpID4+IDcpICYg MSkKPiAgI2RlZmluZSBjYXBfcGhtcihjKSAgICAgICAgKCgoYykgPj4gNikgJiAxKQo+ICAjZGVm aW5lIGNhcF9wbG1yKGMpICAgICAgICAoKChjKSA+PiA1KSAmIDEpCj4gQEAgLTEwNCwxMCArMTEz LDE2IEBACj4gICNkZWZpbmUgZWNhcF9uaW90bGJfaXVuaXRzKGUpICAgICgoKChlKSA+PiAyNCkg JiAweGZmKSArIDEpCj4gICNkZWZpbmUgZWNhcF9pb3RsYl9vZmZzZXQoZSkgICAgICgoKChlKSA+ PiA4KSAmIDB4M2ZmKSAqIDE2KQo+ICAjZGVmaW5lIGVjYXBfY29oZXJlbnQoZSkgICAgICAgICAo KGUgPj4gMCkgJiAweDEpCj4gLSNkZWZpbmUgZWNhcF9xdWV1ZWRfaW52YWwoZSkgICAgICgoZSA+ PiAxKSAmIDB4MSkKPiArI2RlZmluZSBETUFfRUNBUF9RSV9TSElGVCAgICAgICAgMQo+ICsjZGVm aW5lIERNQV9FQ0FQX1FJICAgICAgICAgICAgICAoMVVMTCA8PCBETUFfRUNBUF9RSV9TSElGVCkK PiArI2RlZmluZSBlY2FwX3F1ZXVlZF9pbnZhbChlKSAgICAgKChlID4+IERNQV9FQ0FQX1FJX1NI SUZUKSAmIDB4MSkKCkxvb2tzIGxpa2UgdGhpcyBjb3VsZCBiZSBiYXNlZCBvbiBNQVNLX0VYVFIg aW5zdGVhZCwgYnV0IHNlZWluZyBob3cKdGhlIGZpbGUgaXMgZnVsbCBvZiBvcGVuLWNvZGVkIG1h c2sgZXh0cmFjdHMgSSdtIG5vdCBzdXJlIGl0J3Mgd29ydGgKaXQgYW55bW9yZS4KCj4gICNkZWZp bmUgZWNhcF9kZXZfaW90bGIoZSkgICAgICAgICgoZSA+PiAyKSAmIDB4MSkKPiAtI2RlZmluZSBl Y2FwX2ludHJfcmVtYXAoZSkgICAgICAgKChlID4+IDMpICYgMHgxKQo+IC0jZGVmaW5lIGVjYXBf ZWltKGUpICAgICAgICAgICAgICAoKGUgPj4gNCkgJiAweDEpCj4gKyNkZWZpbmUgRE1BX0VDQVBf SVJfU0hJRlQgICAgICAgIDMKPiArI2RlZmluZSBETUFfRUNBUF9JUiAgICAgICAgICAgICAgKDFV TEwgPDwgRE1BX0VDQVBfSVJfU0hJRlQpCj4gKyNkZWZpbmUgZWNhcF9pbnRyX3JlbWFwKGUpICAg ICAgICgoZSA+PiBETUFfRUNBUF9JUl9TSElGVCkgJiAweDEpCj4gKyNkZWZpbmUgRE1BX0VDQVBf RUlNX1NISUZUICAgICAgIDQKPiArI2RlZmluZSBETUFfRUNBUF9FSU0gICAgICAgICAgICAgKDFV TEwgPDwgRE1BX0VDQVBfRUlNX1NISUZUKQo+ICsjZGVmaW5lIGVjYXBfZWltKGUpICAgICAgICAg ICAgICAoKGUgPj4gRE1BX0VDQVBfRUlNX1NISUZUKSAmIDB4MSkKCk1heWJlIHdvcnRoIHBsYWNp bmcgYWxsIHRoZSBETUFfRUNBUF8qIGRlZmluZXMgaW4gYSBzZXBhcmF0ZSBzZWN0aW9uPwpTZWVt cyBsaWtlIGhvdyBpdCdzIGRvbmUgZm9yIG90aGVyIGZlYXR1cmVzIGxpa2UgRE1BX0ZTVFMgb3IK RE1BX0NDTUQuCgo+ICAjZGVmaW5lIGVjYXBfY2FjaGVfaGludHMoZSkgICAgICAoKGUgPj4gNSkg JiAweDEpCj4gICNkZWZpbmUgZWNhcF9wYXNzX3RocnUoZSkgICAgICAgICgoZSA+PiA2KSAmIDB4 MSkKPiAgI2RlZmluZSBlY2FwX3NucF9jdGwoZSkgICAgICAgICAgKChlID4+IDcpICYgMHgxKQo+ IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jIGIveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uYzg1MWVjNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC92dGQvdnZ0ZC5jCj4gQEAgLTAsMCArMSwxNDcgQEAKPiArLyoKPiArICogdnZ0 ZC5jCj4gKyAqCj4gKyAqIHZpcnR1YWxpemUgVlREIGZvciBIVk0uCj4gKyAqCj4gKyAqIENvcHly aWdodCAoQykgMjAxNyBDaGFvIEdhbywgSW50ZWwgQ29ycG9yYXRpb24uCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgo+ICsjaW5jbHVkZSA8eGVuL3Nj aGVkLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KPiArI2luY2x1ZGUgPHhlbi92aW9tbXUu aD4KPiArI2luY2x1ZGUgPHhlbi94bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxhc20vY3VycmVudC5o Pgo+ICsjaW5jbHVkZSA8YXNtL2h2bS9kb21haW4uaD4KPiArI2luY2x1ZGUgPGFzbS9wYWdlLmg+ Cj4gKwo+ICsjaW5jbHVkZSAiaW9tbXUuaCIKPiArCj4gKy8qIFN1cHBvcnRlZCBjYXBhYmlsaXRp ZXMgYnkgdnZ0ZCAqLwo+ICt1bnNpZ25lZCBpbnQgdnZ0ZF9jYXBzID0gVklPTU1VX0NBUF9JUlFf UkVNQVBQSU5HOwoKc3RhdGljPwoKT3IgZXZlbiBiZXR0ZXIsIHdoeSBpcyB0aGlzIG5vdCBhIGRl ZmluZSBsaWtlIFZJT01NVV9NQVhfQ0FQUyBvcgpzaW1pbGFyLgoKPiArCj4gK3VuaW9uIGh2bV9o d192dnRkX3JlZ3Mgewo+ICsgICAgdWludDMyX3QgZGF0YTMyWzI1Nl07Cj4gKyAgICB1aW50NjRf dCBkYXRhNjRbMTI4XTsKPiArfTsKCkRvIHlvdSByZWFsbHkgbmVlZCB0byBzdG9yZSBhbGwgdGhl IHJlZ2lzdGVyIHNwYWNlIGluc3RlYWQgb2Ygb25seQpzdG9yaW5nIHNwZWNpZmljIHJlZ2lzdGVy cz8KCj4gKwo+ICtzdHJ1Y3QgdnZ0ZCB7Cj4gKyAgICAvKiBBZGRyZXNzIHJhbmdlIG9mIHJlbWFw cGluZyBoYXJkd2FyZSByZWdpc3Rlci1zZXQgKi8KPiArICAgIHVpbnQ2NF90IGJhc2VfYWRkcjsK PiArICAgIHVpbnQ2NF90IGxlbmd0aDsKClRoZSBsZW5ndGggZmllbGQgZG9lc24ndCBzZWVtIHRv IGJlIHVzZWQgYmVsb3cuCgo+ICsgICAgLyogUG9pbnQgYmFjayB0byB0aGUgb3duZXIgZG9tYWlu ICovCj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkb21haW47Cj4gKyAgICB1bmlvbiBodm1faHdfdnZ0 ZF9yZWdzICpyZWdzOwoKRG9lcyB0aGlzIG5lZWQgdG8gYmUgYSBwb2ludGVyPwoKPiArICAgIHN0 cnVjdCBwYWdlX2luZm8gKnJlZ3NfcGFnZTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCB2dnRkX3NldF9yZWcoc3RydWN0IHZ2dGQgKnZ0ZCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2 YWx1ZSkKPiArewo+ICsgICAgdnRkLT5yZWdzLT5kYXRhMzJbcmVnL3NpemVvZih1aW50MzJfdCld ID0gdmFsdWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgdnZ0ZF9nZXRfcmVn KHN0cnVjdCB2dnRkICp2dGQsIHVpbnQzMl90IHJlZykKPiArewo+ICsgICAgcmV0dXJuIHZ0ZC0+ cmVncy0+ZGF0YTMyW3JlZy9zaXplb2YodWludDMyX3QpXTsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSB2b2lkIHZ2dGRfc2V0X3JlZ19xdWFkKHN0cnVjdCB2dnRkICp2dGQsIHVpbnQzMl90IHJl ZywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVl KQo+ICt7Cj4gKyAgICB2dGQtPnJlZ3MtPmRhdGE2NFtyZWcvc2l6ZW9mKHVpbnQ2NF90KV0gPSB2 YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50NjRfdCB2dnRkX2dldF9yZWdfcXVh ZChzdHJ1Y3QgdnZ0ZCAqdnRkLCB1aW50MzJfdCByZWcpCj4gK3sKPiArICAgIHJldHVybiB2dGQt PnJlZ3MtPmRhdGE2NFtyZWcvc2l6ZW9mKHVpbnQ2NF90KV07Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZ2dGRfcmVzZXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQ2NF90IGNhcGFiaWxpdHkpCj4g K3sKPiArICAgIHVpbnQ2NF90IGNhcCA9IGNhcF9zZXRfbnVtX2ZhdWx0X3JlZ3MoMVVMTCkgfAo+ ICsgICAgICAgICAgICAgICAgICAgY2FwX3NldF9mYXVsdF9yZWdfb2Zmc2V0KDB4MjIwVUxMKSB8 Cj4gKyAgICAgICAgICAgICAgICAgICBjYXBfc2V0X21nYXcoMzlVTEwpIHwgRE1BX0NBUF9TQUdB V18zOWJpdCB8Cj4gKyAgICAgICAgICAgICAgICAgICBETUFfQ0FQX05EXzY0SzsKPiArICAgIHVp bnQ2NF90IGVjYXAgPSBETUFfRUNBUF9JUiB8IERNQV9FQ0FQX0VJTSB8IERNQV9FQ0FQX1FJOwo+ ICsKPiArICAgIHZ2dGRfc2V0X3JlZyh2dnRkLCBETUFSX1ZFUl9SRUcsIDB4MTBVTCk7Cj4gKyAg ICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0NBUF9SRUcsIGNhcCk7Cj4gKyAgICB2dnRk X3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0VDQVBfUkVHLCBlY2FwKTsKPiArICAgIHZ2dGRfc2V0 X3JlZyh2dnRkLCBETUFSX0ZFQ1RMX1JFRywgMHg4MDAwMDAwMFVMKTsKPiArICAgIHZ2dGRfc2V0 X3JlZyh2dnRkLCBETUFSX0lFQ1RMX1JFRywgMHg4MDAwMDAwMFVMKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCB2dnRkX2NyZWF0ZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlvbW11ICp2aW9t bXUpCj4gK3sKPiArICAgIHN0cnVjdCB2dnRkICp2dnRkOwo+ICsgICAgaW50IHJldDsKPiArCj4g KyAgICBpZiAoICFpc19odm1fZG9tYWluKGQpIHx8ICh2aW9tbXUtPmJhc2VfYWRkcmVzcyAmIChQ QUdFX1NJWkUgLSAxKSkgfHwKPiArICAgICAgICAofnZ2dGRfY2FwcyAmIHZpb21tdS0+Y2Fwcykg KQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIHJldCA9IC1FTk9NRU07Cj4g KyAgICB2dnRkID0geHphbGxvY19ieXRlcyhzaXplb2Yoc3RydWN0IHZ2dGQpKTsKPiArICAgIGlm ICggIXZ2dGQgKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgdnZ0ZC0+cmVnc19w YWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIE1FTUZfbm9fb3duZXIpOwo+ICsgICAgaWYgKCAh dnZ0ZC0+cmVnc19wYWdlICkKPiArICAgICAgICBnb3RvIG91dDE7Cj4gKwo+ICsgICAgdnZ0ZC0+ cmVncyA9IF9fbWFwX2RvbWFpbl9wYWdlX2dsb2JhbCh2dnRkLT5yZWdzX3BhZ2UpOwo+ICsgICAg aWYgKCAhdnZ0ZC0+cmVncyApCj4gKyAgICAgICAgZ290byBvdXQyOwo+ICsgICAgY2xlYXJfcGFn ZSh2dnRkLT5yZWdzKTsKCk5vdCBzdXJlIHdoeSB2dnRkLT5yZWdzIG5lZWRzIHRvIGJlIGEgcG9p bnRlciwgYW5kIHdoeSBpdCBuZWVkcyB0byB1c2UKYSBmdWxsIHBhZ2UuIEFGQUlDVCB0aGUgc2l6 ZSBvZiBodm1faHdfdnZ0ZF9yZWdzIGlzIDEwMjRCLCBzbyB5b3UgYXJlCndhc3RpbmcgMy80IG9m IGEgcGFnZS4KCj4gKwo+ICsgICAgdnZ0ZF9yZXNldCh2dnRkLCB2aW9tbXUtPmNhcHMpOwo+ICsg ICAgdnZ0ZC0+YmFzZV9hZGRyID0gdmlvbW11LT5iYXNlX2FkZHJlc3M7Cj4gKyAgICB2dnRkLT5k b21haW4gPSBkOwo+ICsKPiArICAgIHZpb21tdS0+cHJpdiA9IHZ2dGQ7Cj4gKwo+ICsgICAgcmV0 dXJuIDA7Cj4gKwo+ICsgb3V0MjoKPiArICAgIGZyZWVfZG9taGVhcF9wYWdlKHZ2dGQtPnJlZ3Nf cGFnZSk7Cj4gKyBvdXQxOgo+ICsgICAgeGZyZWUodnZ0ZCk7Cj4gKyAgICByZXR1cm4gcmV0OwoK WW91IHNob3VsZCB0cnkgdG8gYXZvaWQgdXNpbmcgbGFiZWxzLiBJIHRoaW5rIHRoaXMgY2FuIGJl IHNvbHZlZCBieQpub3QgYWxsb2NhdGluZyBhIHNlcGFyYXRlIHBhZ2UgZm9yIHJlZ3MuCgo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHZ2dGRfZGVzdHJveShzdHJ1Y3QgdmlvbW11ICp2aW9tbXUpCj4g K3sKPiArICAgIHN0cnVjdCB2dnRkICp2dnRkID0gdmlvbW11LT5wcml2Owo+ICsKPiArICAgIGlm ICggdnZ0ZCApCj4gKyAgICB7Cj4gKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2VfZ2xvYmFsKHZ2 dGQtPnJlZ3MpOwo+ICsgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKHZ2dGQtPnJlZ3NfcGFnZSk7 Cj4gKyAgICAgICAgeGZyZWUodnZ0ZCk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RydWN0IHZpb21tdV9vcHMgdnZ0ZF9odm1fdm14X29wcyA9IHsKPiArICAgIC5jcmVh dGUgPSB2dnRkX2NyZWF0ZSwKPiArICAgIC5kZXN0cm95ID0gdnZ0ZF9kZXN0cm95Cj4gK307Cj4g Kwo+ICtzdGF0aWMgaW50IHZ2dGRfcmVnaXN0ZXIodm9pZCkKPiArewo+ICsgICAgdmlvbW11X3Jl Z2lzdGVyX3R5cGUoVklPTU1VX1RZUEVfSU5URUxfVlRELCAmdnZ0ZF9odm1fdm14X29wcyk7Cj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICtfX2luaXRjYWxsKHZ2dGRfcmVnaXN0ZXIpOwoKQXMgY29t bWVudGVkIGluIGFub3RoZXIgcGF0Y2ggSSB0aGluayB0aGUgdklPTU1VIHR5cGVzIHNob3VsZCBi ZQpyZWdpc3RlcmVkIHVzaW5nIGEgbWV0aG9kIHNpbWlsYXIgdG8gUkVHSVNURVJfU0NIRURVTEVS LgoKVGhhbmtzLCBSb2dlci4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=