From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [RFC PATCH V2 1/26] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities Date: Thu, 18 May 2017 01:34:31 -0400 Message-ID: <1495085696-10819-2-git-send-email-tianyu.lan@intel.com> References: <1495085696-10819-1-git-send-email-tianyu.lan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1495085696-10819-1-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: 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, jbeulich@suse.com, chao.gao@intel.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpcyB0byBpbnRyb2R1Y3QgYW4gYWJzdHJhY3QgbGF5ZXIgZm9yIGFyY2ggdklP TU1VIGltcGxlbWVudGF0aW9uCnRvIGRlYWwgd2l0aCByZXF1ZXN0cyBmcm9tIGRvbTAuIEFyY2gg dklPTU1VIGNvZGUgbmVlZHMgdG8gcHJvdmlkZSBjYWxsYmFjawp0byBwZXJmb3JtIGNyZWF0ZSwg ZGVzdHJveSBhbmQgcXVlcnkgY2FwYWJpbGl0aWVzIG9wZXJhdGlvbi4KClNpZ25lZC1vZmYtYnk6 IExhbiBUaWFueXUgPHRpYW55dS5sYW5AaW50ZWwuY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9zZXR1 cC5jICAgICAgICB8ICAgMSArCiB4ZW4vY29tbW9uL0tjb25maWcgICAgICAgICAgfCAgMTEgKysr CiB4ZW4vY29tbW9uL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogeGVuL2NvbW1vbi9kb21haW4u YyAgICAgICAgIHwgICAzICsKIHhlbi9jb21tb24vdmlvbW11LmMgICAgICAgICB8IDE2OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUvcHVi bGljL3Zpb21tdS5oIHwgIDQ5ICsrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL3hlbi9zY2hlZC5o ICAgICB8ICAgMiArCiB4ZW4vaW5jbHVkZS94ZW4vdmlvbW11LmggICAgfCAgNzkgKysrKysrKysr KysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDMxNSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2NvbW1vbi92aW9tbXUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9p bmNsdWRlL3B1YmxpYy92aW9tbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hl bi92aW9tbXUuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jIGIveGVuL2FyY2gv eDg2L3NldHVwLmMKaW5kZXggZjdiOTI3OC4uZjIwNGQ3MSAxMDA2NDQKLS0tIGEveGVuL2FyY2gv eDg2L3NldHVwLmMKKysrIGIveGVuL2FyY2gveDg2L3NldHVwLmMKQEAgLTE1MTMsNiArMTUxMyw3 IEBAIHZvaWQgX19pbml0IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgbWJpX3Ap CiAgICAgZWFybHlfbXNpX2luaXQoKTsKIAogICAgIGlvbW11X3NldHVwKCk7ICAgIC8qIHNldHVw IGlvbW11IGlmIGF2YWlsYWJsZSAqLworICAgIHZpb21tdV9zZXR1cCgpOwogCiAgICAgc21wX3By ZXBhcmVfY3B1cyhtYXhfY3B1cyk7CiAKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vS2NvbmZpZyBi L3hlbi9jb21tb24vS2NvbmZpZwppbmRleCBkYzhlODc2Li45MGUzNzQxIDEwMDY0NAotLS0gYS94 ZW4vY29tbW9uL0tjb25maWcKKysrIGIveGVuL2NvbW1vbi9LY29uZmlnCkBAIC03Myw2ICs3Mywx NyBAQCBjb25maWcgVE1FTQogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgVklPTU1V CisJZGVmX2Jvb2wgeQorCXByb21wdCAiWGVuIHZJT01NVSBTdXBwb3J0IiBpZiBFWFBFUlQgPSAi eSIKKwlkZXBlbmRzIG9uIFg4NgorCS0tLWhlbHAtLS0KKwkgVmlydHVhbCBJT01NVSBwcm92aWRl cyBpbnRlcnJ1cHQgcmVtYXBwaW5nIGZ1bmN0aW9uIGZvciBndWVzdCBhbmQKKwkgaXQgYWxsb3dz IGd1ZXN0IHRvIGJvb3QgdXAgbW9yZSB0aGFuIDI1NSB2Y3B1cyB3aGljaCByZXF1aXJlcyBpbnRl cnJ1cHQKKwkgcmVtYXBwaW5nIGZ1bmN0aW9uLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBj b25maWcgWEVOT1BST0YKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJYZW4gT3Byb2ZpbGUgU3VwcG9y dCIgaWYgRVhQRVJUID0gInkiCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL01ha2VmaWxlIGIveGVu L2NvbW1vbi9NYWtlZmlsZQppbmRleCAyNmM1YTY0Li5mNjFlNTc5IDEwMDY0NAotLS0gYS94ZW4v Y29tbW9uL01ha2VmaWxlCisrKyBiL3hlbi9jb21tb24vTWFrZWZpbGUKQEAgLTYxLDYgKzYxLDcg QEAgb2JqLXkgKz0gdm1fZXZlbnQubwogb2JqLXkgKz0gdm1hcC5vCiBvYmoteSArPSB2c3ByaW50 Zi5vCiBvYmoteSArPSB3YWl0Lm8KK29iai0kKENPTkZJR19WSU9NTVUpICs9IHZpb21tdS5vCiBv YmotYmluLXkgKz0gd2FybmluZy5pbml0Lm8KIG9iai0kKENPTkZJR19YRU5PUFJPRikgKz0geGVu b3Byb2Yubwogb2JqLXkgKz0geG1hbGxvY190bHNmLm8KZGlmZiAtLWdpdCBhL3hlbi9jb21tb24v ZG9tYWluLmMgYi94ZW4vY29tbW9uL2RvbWFpbi5jCmluZGV4IGIyMmFhY2MuLmQxZjliMTAgMTAw NjQ0Ci0tLSBhL3hlbi9jb21tb24vZG9tYWluLmMKKysrIGIveGVuL2NvbW1vbi9kb21haW4uYwpA QCAtMzk2LDYgKzM5Niw5IEBAIHN0cnVjdCBkb21haW4gKmRvbWFpbl9jcmVhdGUoZG9taWRfdCBk b21pZCwgdW5zaWduZWQgaW50IGRvbWNyX2ZsYWdzLAogICAgICAgICBzcGluX3VubG9jaygmZG9t bGlzdF91cGRhdGVfbG9jayk7CiAgICAgfQogCisgICAgaWYgKCAoZXJyID0gdmlvbW11X2luaXRf ZG9tYWluKGQpKSAhPSAwICkKKyAgICAgICAgZ290byBmYWlsOworCiAgICAgcmV0dXJuIGQ7CiAK ICBmYWlsOgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi92aW9tbXUuYyBiL3hlbi9jb21tb24vdmlv bW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkY2VjYgotLS0gL2Rl di9udWxsCisrKyBiL3hlbi9jb21tb24vdmlvbW11LmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg KiBjb21tb24vdmlvbW11LmMKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDE3IEludGVsIENvcnBv cmF0aW9uCisgKiBBdXRob3I6IExhbiBUaWFueXUgPHRpYW55dS5sYW5AaW50ZWwuY29tPiAKKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi90 eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi9zcGlubG9jay5o PgorCitzcGlubG9ja190IHR5cGVfbGlzdF9sb2NrOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQg dHlwZV9saXN0OworCitzdHJ1Y3QgdmlvbW11X3R5cGUgeworICAgIHU2NCB0eXBlOworICAgIHN0 cnVjdCB2aW9tbXVfb3BzICpvcHM7CisgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKwor aW50IHZpb21tdV9pbml0X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIGQtPnZpb21t dS5ucl92aW9tbXUgPSAwOworICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgdmlvbW11X3R5cGUg KnZpb21tdV9nZXRfdHlwZSh1NjQgdHlwZSkKK3sKKyAgICBzdHJ1Y3QgdmlvbW11X3R5cGUgKnZp b21tdV90eXBlID0gTlVMTDsKKworICAgIHNwaW5fbG9jaygmdHlwZV9saXN0X2xvY2spOworICAg IGxpc3RfZm9yX2VhY2hfZW50cnkoIHZpb21tdV90eXBlLCAmdHlwZV9saXN0LCBub2RlICkKKyAg ICB7CisgICAgICAgIGlmICggdmlvbW11X3R5cGUtPnR5cGUgPT0gdHlwZSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZ0eXBlX2xpc3RfbG9jayk7CisgICAgICAgICAgICBy ZXR1cm4gdmlvbW11X3R5cGU7CisgICAgICAgIH0KKyAgICB9CisgICAgc3Bpbl91bmxvY2soJnR5 cGVfbGlzdF9sb2NrKTsKKworICAgIHJldHVybiBOVUxMOworfQorCitpbnQgdmlvbW11X3JlZ2lz dGVyX3R5cGUodTY0IHR5cGUsIHN0cnVjdCB2aW9tbXVfb3BzICogb3BzKQoreworICAgIHN0cnVj dCB2aW9tbXVfdHlwZSAqdmlvbW11X3R5cGUgPSBOVUxMOworCisgICAgaWYgKCB2aW9tbXVfZ2V0 X3R5cGUodHlwZSkgKQorICAgICAgICByZXR1cm4gLUVFWElTVDsKKworICAgIHZpb21tdV90eXBl ID0geHphbGxvYyhzdHJ1Y3QgdmlvbW11X3R5cGUpOworICAgIGlmICggIXZpb21tdV90eXBlICkK KyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICB2aW9tbXVfdHlwZS0+dHlwZSA9IHR5cGU7 CisgICAgdmlvbW11X3R5cGUtPm9wcyA9IG9wczsKKworICAgIHNwaW5fbG9jaygmdHlwZV9saXN0 X2xvY2spOworICAgIGxpc3RfYWRkX3RhaWwoJnZpb21tdV90eXBlLT5ub2RlLCAmdHlwZV9saXN0 KTsKKyAgICBzcGluX3VubG9jaygmdHlwZV9saXN0X2xvY2spOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3ZvaWQgdmlvbW11X3VucmVnaXN0ZXJfdHlwZSh1NjQgdHlwZSkKK3sKKyAgICBzdHJ1Y3Qg dmlvbW11X3R5cGUgKnZpb21tdV90eXBlID0gdmlvbW11X2dldF90eXBlKHR5cGUpOworCisgICAg aWYgKCB2aW9tbXVfdHlwZSApCisgICAgeworICAgICAgICBzcGluX2xvY2soJnR5cGVfbGlzdF9s b2NrKTsKKyAgICAgICAgbGlzdF9kZWwoJnZpb21tdV90eXBlLT5ub2RlKTsKKyAgICAgICAgc3Bp bl91bmxvY2soJnR5cGVfbGlzdF9sb2NrKTsKKworICAgICAgICB4ZnJlZSh2aW9tbXVfdHlwZSk7 CisgICAgfQorfQorCitpbnQgdmlvbW11X2NyZWF0ZShzdHJ1Y3QgZG9tYWluICpkLCB1NjQgdHlw ZSwgdTY0IGJhc2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgIHU2NCBsZW5ndGgsIHU2NCBj YXBzKQoreworICAgIHN0cnVjdCB2aW9tbXVfaW5mbyAqaW5mbyA9ICZkLT52aW9tbXU7CisgICAg c3RydWN0IHZpb21tdSAqdmlvbW11OworICAgIHN0cnVjdCB2aW9tbXVfdHlwZSAqdmlvbW11X3R5 cGUgPSBOVUxMOworICAgIGludCByYzsKKworICAgIHZpb21tdV90eXBlID0gdmlvbW11X2dldF90 eXBlKHR5cGUpOworICAgIGlmICggIXZpb21tdV90eXBlICkKKyAgICAgICAgcmV0dXJuIC1FRkFV TFQ7CisKKyAgICBpZiAoICFpbmZvIHx8IGluZm8tPm5yX3Zpb21tdSA+PSBOUl9WSU9NTVVfUEVS X0RPTUFJTgorICAgICAgICB8fCAhdmlvbW11X3R5cGUtPm9wcyB8fCAhdmlvbW11X3R5cGUtPm9w cy0+Y3JlYXRlICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICB2aW9tbXUgPSB4emFs bG9jKHN0cnVjdCB2aW9tbXUpOworICAgIGlmICggIXZpb21tdSApCisgICAgICAgIHJldHVybiAt RU5PTUVNOworCisgICAgdmlvbW11LT5iYXNlX2FkZHJlc3MgPSBiYXNlX2FkZHJlc3M7CisgICAg dmlvbW11LT5sZW5ndGggPSBsZW5ndGg7CisgICAgdmlvbW11LT5jYXBzID0gY2FwczsKKyAgICB2 aW9tbXUtPm9wcyA9IHZpb21tdV90eXBlLT5vcHM7CisgICAgdmlvbW11LT52aW9tbXVfaWQgPSBp bmZvLT5ucl92aW9tbXU7CisKKyAgICBpbmZvLT52aW9tbXVbaW5mby0+bnJfdmlvbW11XSA9IHZp b21tdTsKKyAgICBpbmZvLT5ucl92aW9tbXUrKzsKKworICAgIHJjID0gdmlvbW11LT5vcHMtPmNy ZWF0ZShkLCB2aW9tbXUpOworICAgIGlmICggcmMgPCAwICkKKyAgICB7CisgICAgICAgIHhmcmVl KHZpb21tdSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4gdmlvbW11 LT52aW9tbXVfaWQ7Cit9CisKK2ludCB2aW9tbXVfZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkLCB1 MzIgdmlvbW11X2lkKQoreworICAgIHN0cnVjdCB2aW9tbXVfaW5mbyAqaW5mbyA9ICZkLT52aW9t bXU7CisKKyAgICBpZiAoICFpbmZvIHx8IHZpb21tdV9pZCA+IGluZm8tPm5yX3Zpb21tdSB8fCAh aW5mby0+dmlvbW11W3Zpb21tdV9pZF0gKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg IGlmICggaW5mby0+dmlvbW11W3Zpb21tdV9pZF0tPm9wcy0+ZGVzdHJveShpbmZvLT52aW9tbXVb dmlvbW11X2lkXSkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIGluZm8tPnZpb21t dVt2aW9tbXVfaWRdID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKwordTY0IHZpb21tdV9xdWVy eV9jYXBzKHN0cnVjdCBkb21haW4gKmQsIHU2NCB0eXBlKQoreworICAgIHN0cnVjdCB2aW9tbXVf dHlwZSAqdmlvbW11X3R5cGUgPSB2aW9tbXVfZ2V0X3R5cGUodHlwZSk7CisKKyAgICBpZiAoICF2 aW9tbXVfdHlwZSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgcmV0dXJuIHZpb21t dV90eXBlLT5vcHMtPnF1ZXJ5X2NhcHMoZCk7Cit9CisKK2ludCBfX2luaXQgdmlvbW11X3NldHVw KHZvaWQpCit7CisgICAgSU5JVF9MSVNUX0hFQUQoJnR5cGVfbGlzdCk7CisgICAgc3Bpbl9sb2Nr X2luaXQoJnR5cGVfbGlzdF9sb2NrKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEv eGVuL2luY2x1ZGUvcHVibGljL3Zpb21tdS5oIGIveGVuL2luY2x1ZGUvcHVibGljL3Zpb21tdS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjdjNDcKLS0tIC9kZXYvbnVs bAorKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvdmlvbW11LmgKQEAgLTAsMCArMSw0OSBAQAorLyoK KyAqIHZpb21tdS5oCisgKgorICogVmlydHVhbCBJT01NVSBpbmZvcm1hdGlvbgorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiBvYnRhaW5p bmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgor ICogZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwKKyAqIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCisgKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywKKyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl CisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklM SVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpZm5kZWYgX19YRU5fUFVCTElDX1ZJT01NVV9IX18KKyNkZWZpbmUgX19YRU5fUFVCTElD X1ZJT01NVV9IX18KKworLyogVklPTU1VIHR5cGUgKi8KKyNkZWZpbmUgVklPTU1VX1RZUEVfSU5U RUxfVlREICAgICAoMSA8PCAwKQorCisvKiBWSU9NTVUgY2FwYWJpbGl0aWVzKi8KKyNkZWZpbmUg VklPTU1VX0NBUF9JUlFfUkVNQVBQSU5HICAoMSA8PCAwKQorCisjZW5kaWYgLyogX19YRU5fUFVC TElDX1ZJT01NVV9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMK KyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lk dGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCisKZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL3hlbi9zY2hlZC5oIGIveGVuL2luY2x1ZGUveGVuL3NjaGVkLmgKaW5k ZXggMTEyN2NhOS4uYWY1MmFlOCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL3NjaGVkLmgK KysrIGIveGVuL2luY2x1ZGUveGVuL3NjaGVkLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRl IDx4ZW4vcGVyZmMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8eGVuL3dh aXQuaD4KKyNpbmNsdWRlIDx4ZW4vdmlvbW11Lmg+CiAjaW5jbHVkZSA8cHVibGljL3hlbi5oPgog I2luY2x1ZGUgPHB1YmxpYy9kb21jdGwuaD4KICNpbmNsdWRlIDxwdWJsaWMvc3lzY3RsLmg+CkBA IC00NzcsNiArNDc4LDcgQEAgc3RydWN0IGRvbWFpbgogICAgIC8qIHZOVU1BIHRvcG9sb2d5IGFj Y2Vzc2VzIGFyZSBwcm90ZWN0ZWQgYnkgcndsb2NrLiAqLwogICAgIHJ3bG9ja190IHZudW1hX3J3 bG9jazsKICAgICBzdHJ1Y3Qgdm51bWFfaW5mbyAqdm51bWE7CisgICAgc3RydWN0IHZpb21tdV9p bmZvIHZpb21tdTsKIAogICAgIC8qIENvbW1vbiBtb25pdG9yIG9wdGlvbnMgKi8KICAgICBzdHJ1 Y3QgewpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3Zpb21tdS5oIGIveGVuL2luY2x1ZGUv eGVuL3Zpb21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNWY2YWYK LS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS94ZW4vdmlvbW11LmgKQEAgLTAsMCArMSw3 OSBAQAorLyoKKyAqIGluY2x1ZGUveGVuL3Zpb21tdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE3LCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBMYW4gVGlhbnl1IDx0aWFueXUubGFu QGludGVsLmNvbT4gCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJv Z3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAq LworI2lmbmRlZiBfX1hFTl9WSU9NTVVfSF9fCisjZGVmaW5lIF9fWEVOX1ZJT01NVV9IX18KKwor I2RlZmluZSBOUl9WSU9NTVVfUEVSX0RPTUFJTiAxCisKK3N0cnVjdCB2aW9tbXU7CisKK3N0cnVj dCB2aW9tbXVfb3BzIHsKKyAgICB1NjQgKCpxdWVyeV9jYXBzKShzdHJ1Y3QgZG9tYWluICpkKTsK KyAgICBpbnQgKCpjcmVhdGUpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2aW9tbXUgKnZpb21t dSk7CisgICAgaW50ICgqZGVzdHJveSkoc3RydWN0IHZpb21tdSAqdmlvbW11KTsKK307CisKK3N0 cnVjdCB2aW9tbXUgeworICAgIHU2NCBiYXNlX2FkZHJlc3M7CisgICAgdTY0IGxlbmd0aDsKKyAg ICB1NjQgY2FwczsKKyAgICB1MzIgdmlvbW11X2lkOworICAgIGNvbnN0IHN0cnVjdCB2aW9tbXVf b3BzICpvcHM7CisgICAgdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCB2aW9tbXVfaW5mbyB7Cisg ICAgdTMyIG5yX3Zpb21tdTsKKyAgICBzdHJ1Y3QgdmlvbW11ICp2aW9tbXVbTlJfVklPTU1VX1BF Ul9ET01BSU5dOyAvKiB2aW9tbXUgYXJyYXkqLworfTsKKworI2lmZGVmIENPTkZJR19WSU9NTVUK K2ludCB2aW9tbXVfaW5pdF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCk7CitpbnQgdmlvbW11X2Ny ZWF0ZShzdHJ1Y3QgZG9tYWluICpkLCB1NjQgdHlwZSwgdTY0IGJhc2VfYWRkcmVzcywKKyAgICAg ICAgICAgICAgICAgIHU2NCBsZW5ndGgsIHU2NCBjYXBzKTsKK2ludCB2aW9tbXVfZGVzdHJveShz dHJ1Y3QgZG9tYWluICpkLCB1MzIgdmlvbW11X2lkKTsKK2ludCB2aW9tbXVfcmVnaXN0ZXJfdHlw ZSh1NjQgdHlwZSwgc3RydWN0IHZpb21tdV9vcHMgKiBvcHMpOwordm9pZCB2aW9tbXVfdW5yZWdp c3Rlcl90eXBlKHU2NCB0eXBlKTsKK3U2NCB2aW9tbXVfcXVlcnlfY2FwcyhzdHJ1Y3QgZG9tYWlu ICpkLCB1NjQgdmlvbW11X3R5cGUpOworaW50IHZpb21tdV9zZXR1cCh2b2lkKTsKKyNlbHNlCitz dGF0aWMgaW5saW5lIGludCB2aW9tbXVfaW5pdF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkgeyBy ZXR1cm4gMCB9Oworc3RhdGljIGlubGluZSBpbnQgdmlvbW11X2NyZWF0ZShzdHJ1Y3QgZG9tYWlu ICpkLCB1NjQgdHlwZSwgdTY0IGJhc2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdTY0IGxlbmd0aCwgdTY0IGNhcHMpIHsgcmV0dXJuIC1FTk9ERVYgfTsKK3N0YXRp YyBpbmxpbmUgaW50IHZpb21tdV9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQsIHUzMiB2aW9tbXVf aWQpIHsgcmV0dXJuIDAgfTsKK3N0YXRpYyBpbmxpbmUgaW50IHZpb21tdV9yZWdpc3Rlcl90eXBl KHU2NCB0eXBlLCBzdHJ1Y3QgdmlvbW11X29wcyAqIG9wcykKK3sgcmV0dXJuIDA7IH07CitzdGF0 aWMgaW5saW5lIHZvaWQgdmlvbW11X3VucmVnaXN0ZXJfdHlwZSh1NjQgdHlwZSkgeyB9Oworc3Rh dGljIGlubGluZSB1NjQgdmlvbW11X3F1ZXJ5X2NhcHMoc3RydWN0IGRvbWFpbiAqZCwgdTY0IHZp b21tdV90eXBlKQorICAgICAgICAgICAgICAgIHsgcmV0dXJuIC1FTk9ERVYgfTsKK3N0YXRpYyBp bmxpbmUgaW50IF9faW5pdCB2aW9tbXVfc2V0dXAodm9pZCkgeyByZXR1cm4gMCB9OworI2VuZGlm CisKKyNlbmRpZiAvKiBfX1hFTl9WSU9NTVVfSF9fICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNl dDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoK KyAqLwotLSAKMS44LjMuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=