From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [RFC PATCH V2 1/26] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities Date: Tue, 30 May 2017 16:36:05 +0100 Message-ID: <20170530153605.j7qxss2ppvosz2ua@citrix.com> References: <1495085696-10819-1-git-send-email-tianyu.lan@intel.com> <1495085696-10819-2-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: <1495085696-10819-2-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: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, xen-devel@lists.xen.org, jbeulich@suse.com, chao.gao@intel.com List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBNYXkgMTgsIDIwMTcgYXQgMDE6MzQ6MzFBTSAtMDQwMCwgTGFuIFRpYW55dSB3cm90 ZToKPiBUaGlzIHBhdGNoIGlzIHRvIGludHJvZHVjdCBhbiBhYnN0cmFjdCBsYXllciBmb3IgYXJj aCB2SU9NTVUgaW1wbGVtZW50YXRpb24KPiB0byBkZWFsIHdpdGggcmVxdWVzdHMgZnJvbSBkb20w LiBBcmNoIHZJT01NVSBjb2RlIG5lZWRzIHRvIHByb3ZpZGUgY2FsbGJhY2sKPiB0byBwZXJmb3Jt IGNyZWF0ZSwgZGVzdHJveSBhbmQgcXVlcnkgY2FwYWJpbGl0aWVzIG9wZXJhdGlvbi4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBMYW4gVGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4KPiAtLS0KPiAg eGVuL2FyY2gveDg2L3NldHVwLmMgICAgICAgIHwgICAxICsKPiAgeGVuL2NvbW1vbi9LY29uZmln ICAgICAgICAgIHwgIDExICsrKwo+ICB4ZW4vY29tbW9uL01ha2VmaWxlICAgICAgICAgfCAgIDEg Kwo+ICB4ZW4vY29tbW9uL2RvbWFpbi5jICAgICAgICAgfCAgIDMgKwo+ICB4ZW4vY29tbW9uL3Zp b21tdS5jICAgICAgICAgfCAxNjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiAgeGVuL2luY2x1ZGUvcHVibGljL3Zpb21tdS5oIHwgIDQ5ICsrKysrKysrKysr KysKPiAgeGVuL2luY2x1ZGUveGVuL3NjaGVkLmggICAgIHwgICAyICsKPiAgeGVuL2luY2x1ZGUv eGVuL3Zpb21tdS5oICAgIHwgIDc5ICsrKysrKysrKysrKysrKysrKysrKwo+ICA4IGZpbGVzIGNo YW5nZWQsIDMxNSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9u L3Zpb21tdS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9wdWJsaWMvdmlvbW11 LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi92aW9tbXUuaAo+IAo+IGRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc2V0dXAuYyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCj4g aW5kZXggZjdiOTI3OC4uZjIwNGQ3MSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvc2V0dXAu Ywo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCj4gQEAgLTE1MTMsNiArMTUxMyw3IEBAIHZv aWQgX19pbml0IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgbWJpX3ApCj4gICAg ICBlYXJseV9tc2lfaW5pdCgpOwo+ICAKPiAgICAgIGlvbW11X3NldHVwKCk7ICAgIC8qIHNldHVw IGlvbW11IGlmIGF2YWlsYWJsZSAqLwo+ICsgICAgdmlvbW11X3NldHVwKCk7Cj4gIAo+ICAgICAg c21wX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7Cj4gIAo+IGRpZmYgLS1naXQgYS94ZW4vY29tbW9u L0tjb25maWcgYi94ZW4vY29tbW9uL0tjb25maWcKPiBpbmRleCBkYzhlODc2Li45MGUzNzQxIDEw MDY0NAo+IC0tLSBhL3hlbi9jb21tb24vS2NvbmZpZwo+ICsrKyBiL3hlbi9jb21tb24vS2NvbmZp Zwo+IEBAIC03Myw2ICs3MywxNyBAQCBjb25maWcgVE1FTQo+ICAKPiAgCSAgSWYgdW5zdXJlLCBz YXkgWS4KPiAgCj4gK2NvbmZpZyBWSU9NTVUKPiArCWRlZl9ib29sIHkKPiArCXByb21wdCAiWGVu IHZJT01NVSBTdXBwb3J0IiBpZiBFWFBFUlQgPSAieSIKPiArCWRlcGVuZHMgb24gWDg2Cj4gKwkt LS1oZWxwLS0tCj4gKwkgVmlydHVhbCBJT01NVSBwcm92aWRlcyBpbnRlcnJ1cHQgcmVtYXBwaW5n IGZ1bmN0aW9uIGZvciBndWVzdCBhbmQKPiArCSBpdCBhbGxvd3MgZ3Vlc3QgdG8gYm9vdCB1cCBt b3JlIHRoYW4gMjU1IHZjcHVzIHdoaWNoIHJlcXVpcmVzIGludGVycnVwdAo+ICsJIHJlbWFwcGlu ZyBmdW5jdGlvbi4KPiArCj4gKwkgIElmIHVuc3VyZSwgc2F5IFkuCgpJbmRlbnRhdGlvbi4gQW5k IHRoaXMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCgo+ICsKPiAgY29uZmlnIFhFTk9Q Uk9GCj4gIAlkZWZfYm9vbCB5Cj4gIAlwcm9tcHQgIlhlbiBPcHJvZmlsZSBTdXBwb3J0IiBpZiBF WFBFUlQgPSAieSIKPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9NYWtlZmlsZSBiL3hlbi9jb21t b24vTWFrZWZpbGUKPiBpbmRleCAyNmM1YTY0Li5mNjFlNTc5IDEwMDY0NAo+IC0tLSBhL3hlbi9j b21tb24vTWFrZWZpbGUKPiArKysgYi94ZW4vY29tbW9uL01ha2VmaWxlCj4gQEAgLTYxLDYgKzYx LDcgQEAgb2JqLXkgKz0gdm1fZXZlbnQubwo+ICBvYmoteSArPSB2bWFwLm8KPiAgb2JqLXkgKz0g dnNwcmludGYubwo+ICBvYmoteSArPSB3YWl0Lm8KPiArb2JqLSQoQ09ORklHX1ZJT01NVSkgKz0g dmlvbW11Lm8KClBsZWFzZSBzb3J0IHRoaXMgbGlzdCBhbHBoYWJldGljYWxseS4KCj4gIG9iai1i aW4teSArPSB3YXJuaW5nLmluaXQubwo+ICBvYmotJChDT05GSUdfWEVOT1BST0YpICs9IHhlbm9w cm9mLm8KPiAgb2JqLXkgKz0geG1hbGxvY190bHNmLm8KPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1v bi9kb21haW4uYyBiL3hlbi9jb21tb24vZG9tYWluLmMKPiBpbmRleCBiMjJhYWNjLi5kMWY5YjEw IDEwMDY0NAo+IC0tLSBhL3hlbi9jb21tb24vZG9tYWluLmMKPiArKysgYi94ZW4vY29tbW9uL2Rv bWFpbi5jCj4gQEAgLTM5Niw2ICszOTYsOSBAQCBzdHJ1Y3QgZG9tYWluICpkb21haW5fY3JlYXRl KGRvbWlkX3QgZG9taWQsIHVuc2lnbmVkIGludCBkb21jcl9mbGFncywKPiAgICAgICAgICBzcGlu X3VubG9jaygmZG9tbGlzdF91cGRhdGVfbG9jayk7Cj4gICAgICB9Cj4gIAo+ICsgICAgaWYgKCAo ZXJyID0gdmlvbW11X2luaXRfZG9tYWluKGQpKSAhPSAwICkKPiArICAgICAgICBnb3RvIGZhaWw7 Cj4gKwo+ICAgICAgcmV0dXJuIGQ7Cj4gIAo+ICAgZmFpbDoKPiBkaWZmIC0tZ2l0IGEveGVuL2Nv bW1vbi92aW9tbXUuYyBiL3hlbi9jb21tb24vdmlvbW11LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLmVhZGNlY2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2Nv bW1vbi92aW9tbXUuYwo+IEBAIC0wLDAgKzEsMTY5IEBACj4gKy8qCj4gKyAqIGNvbW1vbi92aW9t bXUuYwo+ICsgKiAKPiArICogQ29weXJpZ2h0IChjKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCj4g KyAqIEF1dGhvcjogTGFuIFRpYW55dSA8dGlhbnl1LmxhbkBpbnRlbC5jb20+IAo+ICsgKgo+ICsg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAo+ICsgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAo+ICsgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCj4gKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCj4gKyAqIG1v cmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAo+ICsgKiB0aGlzIHBy b2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8eGVuL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4K PiArI2luY2x1ZGUgPHhlbi9zcGlubG9jay5oPgpbLi4uXQo+ICsKPiArdm9pZCB2aW9tbXVfdW5y ZWdpc3Rlcl90eXBlKHU2NCB0eXBlKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdmlvbW11X3R5cGUgKnZp b21tdV90eXBlID0gdmlvbW11X2dldF90eXBlKHR5cGUpOwo+ICsKPiArICAgIGlmICggdmlvbW11 X3R5cGUgKQo+ICsgICAgewo+ICsgICAgICAgIHNwaW5fbG9jaygmdHlwZV9saXN0X2xvY2spOwo+ ICsgICAgICAgIGxpc3RfZGVsKCZ2aW9tbXVfdHlwZS0+bm9kZSk7Cj4gKyAgICAgICAgc3Bpbl91 bmxvY2soJnR5cGVfbGlzdF9sb2NrKTsKPiArCj4gKyAgICAgICAgeGZyZWUodmlvbW11X3R5cGUp Owo+ICsgICAgfQo+ICt9Cj4gKwoKSXMgdGhlIHVucmVnaXN0ZXIgZnVuY3Rpb25zIHJlYWxseSB1 c2VmdWw/CgpYZW4gZG9lc24ndCBzdXBwb3J0IG1vZHVsZS4gQW5kIEkgZG9uJ3Qgc2VlIHRoZSB1 bnJlZ2lzdGVyIGZ1bmN0aW9uIHVzZWQKaW4geW91ciBzZXJpZXMuCgpJZiB5b3UgZG9uJ3QgYWN0 dWFsbHkgY2FyZSBhYm91dCBkeW5hbWljYWxseSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgb3BzLApJ IHRoaW5rIHRoZSBjb2RlIGNhbiBiZSBzaW1wbGlmaWVkLgoKPiAraW50IHZpb21tdV9jcmVhdGUo c3RydWN0IGRvbWFpbiAqZCwgdTY0IHR5cGUsIHU2NCBiYXNlX2FkZHJlc3MsCj4gKyAgICAgICAg ICAgICAgICAgIHU2NCBsZW5ndGgsIHU2NCBjYXBzKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdmlvbW11 X2luZm8gKmluZm8gPSAmZC0+dmlvbW11Owo+ICsgICAgc3RydWN0IHZpb21tdSAqdmlvbW11Owo+ ICsgICAgc3RydWN0IHZpb21tdV90eXBlICp2aW9tbXVfdHlwZSA9IE5VTEw7Cj4gKyAgICBpbnQg cmM7Cj4gKwo+ICsgICAgdmlvbW11X3R5cGUgPSB2aW9tbXVfZ2V0X3R5cGUodHlwZSk7Cj4gKyAg ICBpZiAoICF2aW9tbXVfdHlwZSApCj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CgpFSU5WQUwK Cj4gKwo+ICsgICAgaWYgKCAhaW5mbyB8fCBpbmZvLT5ucl92aW9tbXUgPj0gTlJfVklPTU1VX1BF Ul9ET01BSU4KPiArICAgICAgICB8fCAhdmlvbW11X3R5cGUtPm9wcyB8fCAhdmlvbW11X3R5cGUt Pm9wcy0+Y3JlYXRlICkKPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICB2aW9t bXUgPSB4emFsbG9jKHN0cnVjdCB2aW9tbXUpOwo+ICsgICAgaWYgKCAhdmlvbW11ICkKPiArICAg ICAgICByZXR1cm4gLUVOT01FTTsKPiArCj4gKyAgICB2aW9tbXUtPmJhc2VfYWRkcmVzcyA9IGJh c2VfYWRkcmVzczsKPiArICAgIHZpb21tdS0+bGVuZ3RoID0gbGVuZ3RoOwo+ICsgICAgdmlvbW11 LT5jYXBzID0gY2FwczsKPiArICAgIHZpb21tdS0+b3BzID0gdmlvbW11X3R5cGUtPm9wczsKPiAr ICAgIHZpb21tdS0+dmlvbW11X2lkID0gaW5mby0+bnJfdmlvbW11Owo+ICsKPiArICAgIGluZm8t PnZpb21tdVtpbmZvLT5ucl92aW9tbXVdID0gdmlvbW11Owo+ICsgICAgaW5mby0+bnJfdmlvbW11 Kys7Cj4gKwo+ICsgICAgcmMgPSB2aW9tbXUtPm9wcy0+Y3JlYXRlKGQsIHZpb21tdSk7Cj4gKyAg ICBpZiAoIHJjIDwgMCApCj4gKyAgICB7CgpQcmVzdW1hYmx5IHlvdSBhbHNvIG5lZWQgdG8gcmVz ZXQgaW5mby0+dmlvbW11IGluIHRoZSBlcnJvciBwYXRoLgoKT3IgZXZlbiBiZXR0ZXIsIHVzZSB2 aW9tbXVfZGVzdHJveSB0byBoYW5kbGUgdGhlIGVycm9yIHBhdGguCgo+ICsgICAgICAgIHhmcmVl KHZpb21tdSk7Cj4gKyAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVy biB2aW9tbXUtPnZpb21tdV9pZDsKPiArfQo+ICsKPiAraW50IHZpb21tdV9kZXN0cm95KHN0cnVj dCBkb21haW4gKmQsIHUzMiB2aW9tbXVfaWQpCj4gK3sKPiArICAgIHN0cnVjdCB2aW9tbXVfaW5m byAqaW5mbyA9ICZkLT52aW9tbXU7Cj4gKwo+ICsgICAgaWYgKCAhaW5mbyB8fCB2aW9tbXVfaWQg PiBpbmZvLT5ucl92aW9tbXUgfHwgIWluZm8tPnZpb21tdVt2aW9tbXVfaWRdICkKPiArICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICBpZiAoIGluZm8tPnZpb21tdVt2aW9tbXVfaWRd LT5vcHMtPmRlc3Ryb3koaW5mby0+dmlvbW11W3Zpb21tdV9pZF0pICkKPiArICAgICAgICByZXR1 cm4gLUVGQVVMVDsKPiArCj4gKyAgICBpbmZvLT52aW9tbXVbdmlvbW11X2lkXSA9IE5VTEw7Cj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArdTY0IHZpb21tdV9xdWVyeV9jYXBzKHN0cnVjdCBk b21haW4gKmQsIHU2NCB0eXBlKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdmlvbW11X3R5cGUgKnZpb21t dV90eXBlID0gdmlvbW11X2dldF90eXBlKHR5cGUpOwo+ICsKPiArICAgIGlmICggIXZpb21tdV90 eXBlICkKPiArICAgICAgICByZXR1cm4gLUVGQVVMVDsKCkVJTlZBTAoKPiArCj4gKyAgICByZXR1 cm4gdmlvbW11X3R5cGUtPm9wcy0+cXVlcnlfY2FwcyhkKTsKPiArfQo+ICsKPiAraW50IF9faW5p dCB2aW9tbXVfc2V0dXAodm9pZCkKPiArewo+ICsgICAgSU5JVF9MSVNUX0hFQUQoJnR5cGVfbGlz dCk7Cj4gKyAgICBzcGluX2xvY2tfaW5pdCgmdHlwZV9saXN0X2xvY2spOwo+ICsgICAgcmV0dXJu IDA7Cj4gK30KPiArCj4gKy8qCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIHRh Yi13aWR0aDogNAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9w dWJsaWMvdmlvbW11LmggYi94ZW4vaW5jbHVkZS9wdWJsaWMvdmlvbW11LmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmE0ZjdjNDcKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIveGVuL2luY2x1ZGUvcHVibGljL3Zpb21tdS5oCj4gQEAgLTAsMCArMSw0OSBAQAo+ICsvKgo+ ICsgKiB2aW9tbXUuaAo+ICsgKgo+ICsgKiBWaXJ0dWFsIElPTU1VIGluZm9ybWF0aW9uCj4gKyAq Cj4gKyAqIENvcHlyaWdodCAoYykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv bgo+ICsgKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbgo+ICsgKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAo+ICsgKiBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAo+ICsgKiBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLAo+ICsgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAo+ICsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKPiArICogaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELAo+ICsgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YKPiArICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgo+ICsgKiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WQo+ICsgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULAo+ICsgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQo+ICsgKiBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ ICsjaWZuZGVmIF9fWEVOX1BVQkxJQ19WSU9NTVVfSF9fCj4gKyNkZWZpbmUgX19YRU5fUFVCTElD X1ZJT01NVV9IX18KPiArCj4gKy8qIFZJT01NVSB0eXBlICovCj4gKyNkZWZpbmUgVklPTU1VX1RZ UEVfSU5URUxfVlREICAgICAoMSA8PCAwKQo+ICsKPiArLyogVklPTU1VIGNhcGFiaWxpdGllcyov Cj4gKyNkZWZpbmUgVklPTU1VX0NBUF9JUlFfUkVNQVBQSU5HICAoMSA8PCAwKQo+ICsKCjFVIGlu IGJvdGggY2FzZXMuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK