From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [PATCH V2 1/25] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities Date: Thu, 17 Aug 2017 20:22:16 -0400 Message-ID: <1503015736-22315-1-git-send-email-tianyu.lan@intel.com> References: <20170817111841.izmp6cxiuuzj6fns@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170817111841.izmp6cxiuuzj6fns@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Lan Tianyu , kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, julien.grall@arm.com, jbeulich@suse.com, chao.gao@intel.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpcyB0byBpbnRyb2R1Y3QgYW4gYWJzdHJhY3QgbGF5ZXIgZm9yIGFyY2ggdklP TU1VIGltcGxlbWVudGF0aW9uCnRvIGRlYWwgd2l0aCByZXF1ZXN0cyBmcm9tIGRvbTAuIEFyY2gg dklPTU1VIGNvZGUgbmVlZHMgdG8gcHJvdmlkZSBjYWxsYmFjawp0byBwZXJmb3JtIGNyZWF0ZSwg ZGVzdHJveSBhbmQgcXVlcnkgY2FwYWJpbGl0aWVzIG9wZXJhdGlvbi4KClNpZ25lZC1vZmYtYnk6 IExhbiBUaWFueXUgPHRpYW55dS5sYW5AaW50ZWwuY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9LY29u ZmlnICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvc2V0dXAuYyAgICAgfCAgIDEgKwogeGVuL2Nv bW1vbi9LY29uZmlnICAgICAgIHwgICAzICsKIHhlbi9jb21tb24vTWFrZWZpbGUgICAgICB8ICAg MSArCiB4ZW4vY29tbW9uL2RvbWFpbi5jICAgICAgfCAgIDMgKwogeGVuL2NvbW1vbi92aW9tbXUu YyAgICAgIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB4ZW4vaW5jbHVkZS94ZW4vc2NoZWQuaCAgfCAgIDIgKwogeGVuL2luY2x1ZGUveGVuL3Zp b21tdS5oIHwgIDcxICsrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDI0NyBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2NvbW1vbi92aW9tbXUuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi92aW9tbXUuaAoKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9LY29uZmlnIGIveGVuL2FyY2gveDg2L0tjb25maWcKaW5kZXggMzBjMjc2OS4u MWYxZGU5NiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L0tjb25maWcKKysrIGIveGVuL2FyY2gv eDg2L0tjb25maWcKQEAgLTIzLDYgKzIzLDcgQEAgY29uZmlnIFg4NgogCXNlbGVjdCBIQVNfUERY CiAJc2VsZWN0IE5VTUEKIAlzZWxlY3QgVkdBCisJc2VsZWN0IFZJT01NVQogCiBjb25maWcgQVJD SF9ERUZDT05GSUcKIAlzdHJpbmcKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jIGIv eGVuL2FyY2gveDg2L3NldHVwLmMKaW5kZXggZGI1ZGY2OS4uNjhmMTYzMSAxMDA2NDQKLS0tIGEv eGVuL2FyY2gveDg2L3NldHVwLmMKKysrIGIveGVuL2FyY2gveDg2L3NldHVwLmMKQEAgLTE1MTMs NiArMTUxMyw3IEBAIHZvaWQgX19pbml0IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxv bmcgbWJpX3ApCiAgICAgZWFybHlfbXNpX2luaXQoKTsKIAogICAgIGlvbW11X3NldHVwKCk7ICAg IC8qIHNldHVwIGlvbW11IGlmIGF2YWlsYWJsZSAqLworICAgIHZpb21tdV9zZXR1cCgpOwogCiAg ICAgc21wX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CiAKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24v S2NvbmZpZyBiL3hlbi9jb21tb24vS2NvbmZpZwppbmRleCBkYzhlODc2Li4yYWQyYzhkIDEwMDY0 NAotLS0gYS94ZW4vY29tbW9uL0tjb25maWcKKysrIGIveGVuL2NvbW1vbi9LY29uZmlnCkBAIC00 OSw2ICs0OSw5IEBAIGNvbmZpZyBIQVNfQ0hFQ0tQT0xJQ1kKIAlzdHJpbmcKIAlvcHRpb24gZW52 PSJYRU5fSEFTX0NIRUNLUE9MSUNZIgogCitjb25maWcgVklPTU1VCisJYm9vbAorCiBjb25maWcg S0VYRUMKIAlib29sICJrZXhlYyBzdXBwb3J0IgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEveGVu L2NvbW1vbi9NYWtlZmlsZSBiL3hlbi9jb21tb24vTWFrZWZpbGUKaW5kZXggMjZjNWE2NC4uODUy NTUzZCAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9NYWtlZmlsZQorKysgYi94ZW4vY29tbW9uL01h a2VmaWxlCkBAIC01Niw2ICs1Niw3IEBAIG9iai15ICs9IHRpbWUubwogb2JqLXkgKz0gdGltZXIu bwogb2JqLXkgKz0gdHJhY2Uubwogb2JqLXkgKz0gdmVyc2lvbi5vCitvYmotJChDT05GSUdfVklP TU1VKSArPSB2aW9tbXUubwogb2JqLXkgKz0gdmlydHVhbF9yZWdpb24ubwogb2JqLXkgKz0gdm1f ZXZlbnQubwogb2JqLXkgKz0gdm1hcC5vCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2RvbWFpbi5j IGIveGVuL2NvbW1vbi9kb21haW4uYwppbmRleCBiMjJhYWNjLi5kMWY5YjEwIDEwMDY0NAotLS0g YS94ZW4vY29tbW9uL2RvbWFpbi5jCisrKyBiL3hlbi9jb21tb24vZG9tYWluLmMKQEAgLTM5Niw2 ICszOTYsOSBAQCBzdHJ1Y3QgZG9tYWluICpkb21haW5fY3JlYXRlKGRvbWlkX3QgZG9taWQsIHVu c2lnbmVkIGludCBkb21jcl9mbGFncywKICAgICAgICAgc3Bpbl91bmxvY2soJmRvbWxpc3RfdXBk YXRlX2xvY2spOwogICAgIH0KIAorICAgIGlmICggKGVyciA9IHZpb21tdV9pbml0X2RvbWFpbihk KSkgIT0gMCApCisgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIHJldHVybiBkOwogCiAgZmFpbDoK ZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vdmlvbW11LmMgYi94ZW4vY29tbW9uL3Zpb21tdS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzRkOWYKLS0tIC9kZXYvbnVsbAor KysgYi94ZW4vY29tbW9uL3Zpb21tdS5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogY29tbW9u L3Zpb21tdS5jCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgor ICogQXV0aG9yOiBMYW4gVGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4gCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4K KyNpbmNsdWRlIDx4ZW4vc3BpbmxvY2suaD4KKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNs dWRlIDx4ZW4vdmlvbW11Lmg+CisKK2Jvb2wgX19yZWFkX21vc3RseSBvcHRfdmlvbW11OworYm9v bGVhbl9wYXJhbSgidmlvbW11Iiwgb3B0X3Zpb21tdSk7CisKK3N0YXRpYyBzcGlubG9ja190IHR5 cGVfbGlzdF9sb2NrOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdHlwZV9saXN0OworCitzdHJ1 Y3QgdmlvbW11X3R5cGUgeworICAgIHU2NCB0eXBlOworICAgIHN0cnVjdCB2aW9tbXVfb3BzICpv cHM7CisgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworaW50IHZpb21tdV9pbml0X2Rv bWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIGQtPnZpb21tdS5ucl92aW9tbXUgPSAwOwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZpb21tdV90eXBlICp2aW9tbXVfZ2V0 X3R5cGUodTY0IHR5cGUpCit7CisgICAgc3RydWN0IHZpb21tdV90eXBlICp2aW9tbXVfdHlwZSA9 IE5VTEw7CisKKyAgICBzcGluX2xvY2soJnR5cGVfbGlzdF9sb2NrKTsKKyAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5KCB2aW9tbXVfdHlwZSwgJnR5cGVfbGlzdCwgbm9kZSApCisgICAgeworICAgICAg ICBpZiAoIHZpb21tdV90eXBlLT50eXBlID09IHR5cGUgKQorICAgICAgICB7CisgICAgICAgICAg ICBzcGluX3VubG9jaygmdHlwZV9saXN0X2xvY2spOworICAgICAgICAgICAgcmV0dXJuIHZpb21t dV90eXBlOworICAgICAgICB9CisgICAgfQorICAgIHNwaW5fdW5sb2NrKCZ0eXBlX2xpc3RfbG9j ayk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IHZpb21tdV9yZWdpc3Rlcl90eXBlKHU2 NCB0eXBlLCBzdHJ1Y3QgdmlvbW11X29wcyAqIG9wcykKK3sKKyAgICBzdHJ1Y3QgdmlvbW11X3R5 cGUgKnZpb21tdV90eXBlID0gTlVMTDsKKworICAgIGlmICggIXZpb21tdV9lbmFibGVkKCkgKQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICggdmlvbW11X2dldF90eXBlKHR5cGUp ICkKKyAgICAgICAgcmV0dXJuIC1FRVhJU1Q7CisKKyAgICB2aW9tbXVfdHlwZSA9IHh6YWxsb2Mo c3RydWN0IHZpb21tdV90eXBlKTsKKyAgICBpZiAoICF2aW9tbXVfdHlwZSApCisgICAgICAgIHJl dHVybiAtRU5PTUVNOworCisgICAgdmlvbW11X3R5cGUtPnR5cGUgPSB0eXBlOworICAgIHZpb21t dV90eXBlLT5vcHMgPSBvcHM7CisKKyAgICBzcGluX2xvY2soJnR5cGVfbGlzdF9sb2NrKTsKKyAg ICBsaXN0X2FkZF90YWlsKCZ2aW9tbXVfdHlwZS0+bm9kZSwgJnR5cGVfbGlzdCk7CisgICAgc3Bp bl91bmxvY2soJnR5cGVfbGlzdF9sb2NrKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IHZpb21tdV9jcmVhdGUoc3RydWN0IGRvbWFpbiAqZCwgdTY0IHR5cGUsIHU2NCBiYXNlX2Fk ZHJlc3MsCisgICAgdTY0IGxlbmd0aCwgdTY0IGNhcHMpCit7CisgICAgc3RydWN0IHZpb21tdV9p bmZvICppbmZvID0gJmQtPnZpb21tdTsKKyAgICBzdHJ1Y3QgdmlvbW11ICp2aW9tbXU7CisgICAg c3RydWN0IHZpb21tdV90eXBlICp2aW9tbXVfdHlwZSA9IE5VTEw7CisgICAgaW50IHJjOworCisg ICAgdmlvbW11X3R5cGUgPSB2aW9tbXVfZ2V0X3R5cGUodHlwZSk7CisgICAgaWYgKCAhdmlvbW11 X3R5cGUgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICggaW5mby0+bnJfdmlv bW11ID49IE5SX1ZJT01NVV9QRVJfRE9NQUlOCisgICAgICAgIHx8ICF2aW9tbXVfdHlwZS0+b3Bz IHx8ICF2aW9tbXVfdHlwZS0+b3BzLT5jcmVhdGUgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsK KworICAgIHZpb21tdSA9IHh6YWxsb2Moc3RydWN0IHZpb21tdSk7CisgICAgaWYgKCAhdmlvbW11 ICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICB2aW9tbXUtPmJhc2VfYWRkcmVzcyA9 IGJhc2VfYWRkcmVzczsKKyAgICB2aW9tbXUtPmxlbmd0aCA9IGxlbmd0aDsKKyAgICB2aW9tbXUt PmNhcHMgPSBjYXBzOworICAgIHZpb21tdS0+b3BzID0gdmlvbW11X3R5cGUtPm9wczsKKyAgICB2 aW9tbXUtPnZpb21tdV9pZCA9IGluZm8tPm5yX3Zpb21tdTsKKworICAgIGluZm8tPnZpb21tdVtp bmZvLT5ucl92aW9tbXVdID0gdmlvbW11OworICAgIGluZm8tPm5yX3Zpb21tdSsrOworCisgICAg cmMgPSB2aW9tbXUtPm9wcy0+Y3JlYXRlKGQsIHZpb21tdSk7CisgICAgaWYgKCByYyA8IDAgKQor ICAgIHsKKyAgICAgICAgeGZyZWUodmlvbW11KTsKKyAgICAgICAgaW5mby0+bnJfdmlvbW11LS07 CisgICAgICAgIGluZm8tPnZpb21tdVtpbmZvLT5ucl92aW9tbXVdID0gTlVMTDsKKyAgICAgICAg cmV0dXJuIHJjOworICAgIH0KKworICAgIHJldHVybiB2aW9tbXUtPnZpb21tdV9pZDsKK30KKwor c3RhdGljIGludCB2aW9tbXVfZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkLCB1MzIgdmlvbW11X2lk KQoreworICAgIHN0cnVjdCB2aW9tbXVfaW5mbyAqaW5mbyA9ICZkLT52aW9tbXU7CisKKyAgICBp ZiAoIHZpb21tdV9pZCA+PSBpbmZvLT5ucl92aW9tbXUgfHwgIWluZm8tPnZpb21tdVt2aW9tbXVf aWRdICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoIGluZm8tPnZpb21tdVt2 aW9tbXVfaWRdLT5vcHMtPmRlc3Ryb3koaW5mby0+dmlvbW11W3Zpb21tdV9pZF0pICkKKyAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICB4ZnJlZShpbmZvLT52aW9tbXVbdmlvbW11X2lkXSk7 CisgICAgaW5mby0+dmlvbW11W3Zpb21tdV9pZF0gPSBOVUxMOworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgdTY0IHZpb21tdV9xdWVyeV9jYXBzKHN0cnVjdCBkb21haW4gKmQsIHU2NCB0eXBl KQoreworICAgIHN0cnVjdCB2aW9tbXVfdHlwZSAqdmlvbW11X3R5cGUgPSB2aW9tbXVfZ2V0X3R5 cGUodHlwZSk7CisKKyAgICBpZiAoICF2aW9tbXVfdHlwZSApCisgICAgICAgIHJldHVybiAtRUlO VkFMOworCisgICAgcmV0dXJuIHZpb21tdV90eXBlLT5vcHMtPnF1ZXJ5X2NhcHMoZCk7Cit9CisK K2ludCBfX2luaXQgdmlvbW11X3NldHVwKHZvaWQpCit7CisgICAgSU5JVF9MSVNUX0hFQUQoJnR5 cGVfbGlzdCk7CisgICAgc3Bpbl9sb2NrX2luaXQoJnR5cGVfbGlzdF9sb2NrKTsKKyAgICByZXR1 cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmls ZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3NjaGVkLmggYi94ZW4vaW5j bHVkZS94ZW4vc2NoZWQuaAppbmRleCA2NjczYjI3Li45OGE5NjVhIDEwMDY0NAotLS0gYS94ZW4v aW5jbHVkZS94ZW4vc2NoZWQuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4vc2NoZWQuaApAQCAtMjEs NiArMjEsNyBAQAogI2luY2x1ZGUgPHhlbi9wZXJmYy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMu aD4KICNpbmNsdWRlIDx4ZW4vd2FpdC5oPgorI2luY2x1ZGUgPHhlbi92aW9tbXUuaD4KICNpbmNs dWRlIDxwdWJsaWMveGVuLmg+CiAjaW5jbHVkZSA8cHVibGljL2RvbWN0bC5oPgogI2luY2x1ZGUg PHB1YmxpYy9zeXNjdGwuaD4KQEAgLTQ3Nyw2ICs0NzgsNyBAQCBzdHJ1Y3QgZG9tYWluCiAgICAg Lyogdk5VTUEgdG9wb2xvZ3kgYWNjZXNzZXMgYXJlIHByb3RlY3RlZCBieSByd2xvY2suICovCiAg ICAgcndsb2NrX3Qgdm51bWFfcndsb2NrOwogICAgIHN0cnVjdCB2bnVtYV9pbmZvICp2bnVtYTsK KyAgICBzdHJ1Y3QgdmlvbW11X2luZm8gdmlvbW11OwogCiAgICAgLyogQ29tbW9uIG1vbml0b3Ig b3B0aW9ucyAqLwogICAgIHN0cnVjdCB7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdmlv bW11LmggYi94ZW4vaW5jbHVkZS94ZW4vdmlvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNTA2ZWE1NAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL3hlbi92 aW9tbXUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogaW5jbHVkZS94ZW4vdmlvbW11LmgKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IExh biBUaWFueXUgPHRpYW55dS5sYW5AaW50ZWwuY29tPiAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9fWEVOX1ZJT01NVV9IX18KKyNkZWZpbmUg X19YRU5fVklPTU1VX0hfXworCisjZGVmaW5lIE5SX1ZJT01NVV9QRVJfRE9NQUlOIDEKKworc3Ry dWN0IHZpb21tdTsKKworc3RydWN0IHZpb21tdV9vcHMgeworICAgIHU2NCAoKnF1ZXJ5X2NhcHMp KHN0cnVjdCBkb21haW4gKmQpOworICAgIGludCAoKmNyZWF0ZSkoc3RydWN0IGRvbWFpbiAqZCwg c3RydWN0IHZpb21tdSAqdmlvbW11KTsKKyAgICBpbnQgKCpkZXN0cm95KShzdHJ1Y3QgdmlvbW11 ICp2aW9tbXUpOworfTsKKworc3RydWN0IHZpb21tdSB7CisgICAgdTY0IGJhc2VfYWRkcmVzczsK KyAgICB1NjQgbGVuZ3RoOworICAgIHU2NCBjYXBzOworICAgIHUzMiB2aW9tbXVfaWQ7CisgICAg Y29uc3Qgc3RydWN0IHZpb21tdV9vcHMgKm9wczsKKyAgICB2b2lkICpwcml2OworfTsKKworc3Ry dWN0IHZpb21tdV9pbmZvIHsKKyAgICB1MzIgbnJfdmlvbW11OworICAgIHN0cnVjdCB2aW9tbXUg KnZpb21tdVtOUl9WSU9NTVVfUEVSX0RPTUFJTl07IC8qIHZpb21tdSBhcnJheSovCit9OworCisj aWZkZWYgQ09ORklHX1ZJT01NVQorZXh0ZXJuIGJvb2xfdCBvcHRfdmlvbW11Oworc3RhdGljIGlu bGluZSBib29sIHZpb21tdV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIG9wdF92aW9tbXU7IH0KK2lu dCB2aW9tbXVfaW5pdF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCk7CitpbnQgdmlvbW11X3JlZ2lz dGVyX3R5cGUodTY0IHR5cGUsIHN0cnVjdCB2aW9tbXVfb3BzICogb3BzKTsKK2ludCB2aW9tbXVf c2V0dXAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdmlvbW11X2luaXRfZG9tYWlu KHN0cnVjdCBkb21haW4gKmQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHZpb21t dV9yZWdpc3Rlcl90eXBlKHU2NCB0eXBlLCBzdHJ1Y3QgdmlvbW11X29wcyAqIG9wcykKK3sgcmV0 dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB2aW9tbXVfc2V0dXAodm9pZCkgeyBy ZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBib29sIHZpb21tdV9lbmFibGVkKHZvaWQpIHsgcmV0 dXJuIGZhbHNlOyB9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fWEVOX1ZJT01NVV9IX18gKi8KKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoxLjguMy4xCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==