From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: [PATCH v2 01/10] x86/HVM: Introduce struct hvm_pi_ops Date: Fri, 30 Dec 2016 23:45:52 -0600 Message-ID: <1483163161-2402-2-git-send-email-suravee.suthikulpanit@amd.com> References: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.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: Kevin Tian , jbeulich@suse.com, Jun Nakajima , andrew.cooper3@citrix.com, Suravee Suthikulpanit , sherry.hurwitz@amd.com, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIG1hbmFnaW5nIGh2bSBwb3N0ZWQgaW50 ZXJydXB0CmNhbiBiZSB1c2VkIGFsc28gYnkgU1ZNIEFWSUMuIFRoZXJlZm9yZSwgdGhpcyBwYXRj aCBpbnRyb2R1Y2VzIHRoZQpzdHJ1Y3QgaHZtX3BpX29wcyBpbiB0aGUgc3RydWN0IGh2bV9kb21h aW4gdG8gaG9sZCB0aGVtLgoKU2lnbmVkLW9mZi1ieTogU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxz dXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEtvbnJhZCBSemVzenV0 ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KQ2M6IEJvcmlzIE9zdHJvdnNreSA8Ym9y aXMub3N0cm92c2t5QG9yYWNsZS5jb20+CkNjOiBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBp bnRlbC5jb20+CkNjOiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KLS0tCiB4ZW4v YXJjaC94ODYvaHZtL3ZteC92bXguYyAgICAgICAgIHwgMzIgKysrKysrKysrLS0tLS0tLS0tLQog eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmggICB8IDYzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9odm0uaCAgICAg IHwgIDQgKy0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oIHwgNTkgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgODEgaW5zZXJ0 aW9ucygrKSwgNzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS92 bXgvdm14LmMgYi94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYwppbmRleCA3YjJjNTBjLi4zZjZk ODg4IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYworKysgYi94ZW4vYXJj aC94ODYvaHZtL3ZteC92bXguYwpAQCAtMjA0LDEyICsyMDQsMTIgQEAgdm9pZCB2bXhfcGlfaG9v a3NfYXNzaWduKHN0cnVjdCBkb21haW4gKmQpCiAgICAgaWYgKCAhaW9tbXVfaW50cG9zdCB8fCAh aGFzX2h2bV9jb250YWluZXJfZG9tYWluKGQpICkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT RVJUKCFkLT5hcmNoLmh2bV9kb21haW4udm14LnZjcHVfYmxvY2spOworICAgIEFTU0VSVCghZC0+ YXJjaC5odm1fZG9tYWluLnBpX29wcy52Y3B1X2Jsb2NrKTsKIAotICAgIGQtPmFyY2guaHZtX2Rv bWFpbi52bXgudmNwdV9ibG9jayA9IHZteF92Y3B1X2Jsb2NrOwotICAgIGQtPmFyY2guaHZtX2Rv bWFpbi52bXgucGlfc3dpdGNoX2Zyb20gPSB2bXhfcGlfc3dpdGNoX2Zyb207Ci0gICAgZC0+YXJj aC5odm1fZG9tYWluLnZteC5waV9zd2l0Y2hfdG8gPSB2bXhfcGlfc3dpdGNoX3RvOwotICAgIGQt PmFyY2guaHZtX2RvbWFpbi52bXgucGlfZG9fcmVzdW1lID0gdm14X3BpX2RvX3Jlc3VtZTsKKyAg ICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnZjcHVfYmxvY2sgPSB2bXhfdmNwdV9ibG9jazsK KyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnBpX3N3aXRjaF9mcm9tID0gdm14X3BpX3N3 aXRjaF9mcm9tOworICAgIGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMucGlfc3dpdGNoX3RvID0g dm14X3BpX3N3aXRjaF90bzsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnBpX2RvX3Jl c3VtZSA9IHZteF9waV9kb19yZXN1bWU7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gcGNpZGV2c19sb2NrIGlzIGhlbGQgKi8KQEAgLTIxOCwxMiArMjE4LDEyIEBAIHZvaWQg dm14X3BpX2hvb2tzX2RlYXNzaWduKHN0cnVjdCBkb21haW4gKmQpCiAgICAgaWYgKCAhaW9tbXVf aW50cG9zdCB8fCAhaGFzX2h2bV9jb250YWluZXJfZG9tYWluKGQpICkKICAgICAgICAgcmV0dXJu OwogCi0gICAgQVNTRVJUKGQtPmFyY2guaHZtX2RvbWFpbi52bXgudmNwdV9ibG9jayk7CisgICAg QVNTRVJUKGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMudmNwdV9ibG9jayk7CiAKLSAgICBkLT5h cmNoLmh2bV9kb21haW4udm14LnZjcHVfYmxvY2sgPSBOVUxMOwotICAgIGQtPmFyY2guaHZtX2Rv bWFpbi52bXgucGlfc3dpdGNoX2Zyb20gPSBOVUxMOwotICAgIGQtPmFyY2guaHZtX2RvbWFpbi52 bXgucGlfc3dpdGNoX3RvID0gTlVMTDsKLSAgICBkLT5hcmNoLmh2bV9kb21haW4udm14LnBpX2Rv X3Jlc3VtZSA9IE5VTEw7CisgICAgZC0+YXJjaC5odm1fZG9tYWluLnBpX29wcy52Y3B1X2Jsb2Nr ID0gTlVMTDsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnBpX3N3aXRjaF9mcm9tID0g TlVMTDsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnBpX3N3aXRjaF90byA9IE5VTEw7 CisgICAgZC0+YXJjaC5odm1fZG9tYWluLnBpX29wcy5waV9kb19yZXN1bWUgPSBOVUxMOwogfQog CiBzdGF0aWMgaW50IHZteF9kb21haW5faW5pdGlhbGlzZShzdHJ1Y3QgZG9tYWluICpkKQpAQCAt OTAxLDggKzkwMSw4IEBAIHN0YXRpYyB2b2lkIHZteF9jdHh0X3N3aXRjaF9mcm9tKHN0cnVjdCB2 Y3B1ICp2KQogICAgIHZteF9yZXN0b3JlX2hvc3RfbXNycygpOwogICAgIHZteF9zYXZlX2RyKHYp OwogCi0gICAgaWYgKCB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi52bXgucGlfc3dpdGNoX2Zy b20gKQotICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi52bXgucGlfc3dpdGNoX2Zy b20odik7CisgICAgaWYgKCB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5waV9vcHMucGlfc3dp dGNoX2Zyb20gKQorICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5waV9vcHMucGlf c3dpdGNoX2Zyb20odik7CiB9CiAKIHN0YXRpYyB2b2lkIHZteF9jdHh0X3N3aXRjaF90byhzdHJ1 Y3QgdmNwdSAqdikKQEAgLTkxNiw4ICs5MTYsOCBAQCBzdGF0aWMgdm9pZCB2bXhfY3R4dF9zd2l0 Y2hfdG8oc3RydWN0IHZjcHUgKnYpCiAgICAgdm14X3Jlc3RvcmVfZ3Vlc3RfbXNycyh2KTsKICAg ICB2bXhfcmVzdG9yZV9kcih2KTsKIAotICAgIGlmICggdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21h aW4udm14LnBpX3N3aXRjaF90byApCi0gICAgICAgIHYtPmRvbWFpbi0+YXJjaC5odm1fZG9tYWlu LnZteC5waV9zd2l0Y2hfdG8odik7CisgICAgaWYgKCB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFp bi5waV9vcHMucGlfc3dpdGNoX3RvICkKKyAgICAgICAgdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21h aW4ucGlfb3BzLnBpX3N3aXRjaF90byh2KTsKIH0KIAogCkBAIC0zOTYzLDggKzM5NjMsOCBAQCB2 b2lkIHZteF92bWVudGVyX2hlbHBlcihjb25zdCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK ICAgICBzdHJ1Y3QgaHZtX3ZjcHVfYXNpZCAqcF9hc2lkOwogICAgIGJvb2xfdCBuZWVkX2ZsdXNo OwogCi0gICAgaWYgKCBjdXJyLT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi52bXgucGlfZG9fcmVz dW1lICkKLSAgICAgICAgY3Vyci0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4udm14LnBpX2RvX3Jl c3VtZShjdXJyKTsKKyAgICBpZiAoIGN1cnItPmRvbWFpbi0+YXJjaC5odm1fZG9tYWluLnBpX29w cy5waV9kb19yZXN1bWUgKQorICAgICAgICBjdXJyLT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5w aV9vcHMucGlfZG9fcmVzdW1lKGN1cnIpOwogCiAgICAgaWYgKCAhY3B1X2hhc192bXhfdnBpZCAp CiAgICAgICAgIGdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0v ZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaAppbmRleCBmMzRkNzg0 Li43Nzk5MjdiIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaAor KysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaApAQCAtNzIsNiArNzIsNjcgQEAg c3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgewogICAgIGJvb2xfdCAgICAgICAgICAgICAgICAgYnVm aW9yZXFfYXRvbWljOwogfTsKIAorc3RydWN0IGh2bV9waV9vcHMgeworICAgIC8qCisgICAgICog VG8gaGFuZGxlIHBvc3RlZCBpbnRlcnJ1cHRzIGNvcnJlY3RseSwgd2UgbmVlZCB0byBzZXQgdGhl IGZvbGxvd2luZworICAgICAqIHN0YXRlOgorICAgICAqCisgICAgICogKiBUaGUgUEkgbm90aWZp Y2F0aW9uIHZlY3RvciAoTlYpCisgICAgICogKiBUaGUgUEkgbm90aWZpY2F0aW9uIGRlc3RpbmF0 aW9uIHByb2Nlc3NvciAoTkRTVCkKKyAgICAgKiAqIFRoZSBQSSAic3VwcHJlc3Mgbm90aWZpY2F0 aW9uIiBiaXQgKFNOKQorICAgICAqICogVGhlIHZjcHUgcGkgImJsb2NrZWQiIGxpc3QKKyAgICAg KgorICAgICAqIElmIGEgVk0gaXMgY3VycmVudGx5IHJ1bm5pbmcsIHdlIHdhbnQgdGhlIFBJIGRl bGl2ZXJlZCB0byB0aGUgZ3Vlc3QgdmNwdQorICAgICAqIG9uIHRoZSBwcm9wZXIgcGNwdSAoTkRT VCA9IHYtPnByb2Nlc3NvciwgU04gY2xlYXIpLgorICAgICAqCisgICAgICogSWYgdGhlIHZtIGlz IGJsb2NrZWQsIHdlIHdhbnQgdGhlIFBJIGRlbGl2ZXJlZCB0byBYZW4gc28gdGhhdCBpdCBjYW4K KyAgICAgKiB3YWtlIGl0IHVwICAoU04gY2xlYXIsIE5WID0gcGlfd2FrZXVwX3ZlY3RvciwgdmNw dSBvbiBibG9jayBsaXN0KS4KKyAgICAgKgorICAgICAqIElmIHRoZSBWTSBpcyBjdXJyZW50bHkg ZWl0aGVyIHByZWVtcHRlZCBvciBvZmZsaW5lIChpLmUuLCBub3QgcnVubmluZworICAgICAqIGJl Y2F1c2Ugb2Ygc29tZSByZWFzb24gb3RoZXIgdGhhbiBibG9ja2luZyB3YWl0aW5nIGZvciBhbiBp bnRlcnJ1cHQpLAorICAgICAqIHRoZXJlJ3Mgbm90aGluZyBYZW4gY2FuIGRvIC0tIHdlIHdhbnQg dGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCBzZXQgaW4KKyAgICAgKiB0aGUgZ3Vlc3QsIGJ1dCB3 ZSBkb24ndCB3YW50IHRvIGJvdGhlciBYZW4gd2l0aCBhbiBpbnRlcnJ1cHQgKFNOIGNsZWFyKS4K KyAgICAgKgorICAgICAqIFRoZXJlJ3MgYSBicmllZiB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuIHZt eF9pbnRyX2Fzc2lzdCgpIGFuZCBjaGVja2luZworICAgICAqIHNvZnRpcnFzIHdoZXJlIGlmIGFu IGludGVycnVwdCBjb21lcyBpbiBpdCBtYXkgYmUgbG9zdDsgc28gd2UgbmVlZCBYZW4KKyAgICAg KiB0byBnZXQgYW4gaW50ZXJydXB0IGFuZCByYWlzZSBhIHNvZnRpcnEgc28gdGhhdCBpdCB3aWxs IGdvIHRocm91Z2ggdGhlCisgICAgICogdm14X2ludHJfYXNzaXN0KCkgcGF0aCBhZ2FpbiAoU04g Y2xlYXIsIE5WID0gcG9zdGVkX2ludGVycnVwdCkuCisgICAgICoKKyAgICAgKiBUaGUgd2F5IHdl IGltcGxlbWVudCB0aGlzIG5vdyBpcyBieSBsb29raW5nIGF0IHdoYXQgbmVlZHMgdG8gaGFwcGVu IG9uCisgICAgICogdGhlIGZvbGxvd2luZyBydW5zdGF0ZSB0cmFuc2l0aW9uczoKKyAgICAgKgor ICAgICAqIEE6IHJ1bm5hYmxlIC0+IHJ1bm5pbmcKKyAgICAgKiAgLSBTTiA9IDAKKyAgICAgKiAg LSBORFNUID0gdi0+cHJvY2Vzc29yCisgICAgICogQjogcnVubmluZyAtPiBydW5uYWJsZQorICAg ICAqICAtIFNOID0gMQorICAgICAqIEM6IHJ1bm5pbmcgLT4gYmxvY2tlZAorICAgICAqICAtIE5W ID0gcGlfd2FrZXVwX3ZlY3RvcgorICAgICAqICAtIEFkZCB2Y3B1IHRvIGJsb2NrZWQgbGlzdAor ICAgICAqIEQ6IGJsb2NrZWQgLT4gcnVubmFibGUKKyAgICAgKiAgLSBOViA9IHBvc3RlZF9pbnRy X3ZlY3RvcgorICAgICAqICAtIFRha2UgdmNwdSBvZmYgYmxvY2tlZCBsaXN0CisgICAgICoKKyAg ICAgKiBGb3IgdHJhbnNpdGlvbnMgQSBhbmQgQiwgd2UgYWRkIGhvb2tzIGludG8gdm14X2N0eHRf c3dpdGNoX3tmcm9tLHRvfQorICAgICAqIHBhdGhzLgorICAgICAqCisgICAgICogRm9yIHRyYW5z aXRpb24gQywgd2UgYWRkIGEgbmV3IGFyY2ggaG9vaywgYXJjaF92Y3B1X2Jsb2NrKCksIHdoaWNo IGlzCisgICAgICogY2FsbGVkIGZyb20gdmNwdV9ibG9jaygpIGFuZCB2Y3B1X2RvX3BvbGwoKS4K KyAgICAgKgorICAgICAqIEZvciB0cmFuc2l0aW9uIEQsIHJhdGhlciB0aGFuIGFkZCBhbiBleHRy YSBhcmNoIGhvb2sgb24gdmNwdV93YWtlLCB3ZQorICAgICAqIGFkZCBhIGhvb2sgb24gdGhlIHZt ZW50cnkgcGF0aCB3aGljaCBjaGVja3MgdG8gc2VlIGlmIGVpdGhlciBvZiB0aGUgdHdvCisgICAg ICogYWN0aW9ucyBuZWVkIHRvIGJlIHRha2VuLgorICAgICAqCisgICAgICogVGhlc2UgaG9va3Mg b25seSBuZWVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBkb21haW4gaW4gcXVlc3Rpb24gYWN0dWFs bHkKKyAgICAgKiBoYXMgYSBwaHlzaWNhbCBkZXZpY2UgYXNzaWduZWQgdG8gaXQsIHNvIHdlIHNl dCBhbmQgY2xlYXIgdGhlIGNhbGxiYWNrcworICAgICAqIGFzIGFwcHJvcHJpYXRlIHdoZW4gZGV2 aWNlIGFzc2lnbm1lbnQgY2hhbmdlcy4KKyAgICAgKi8KKyAgICB2b2lkICgqdmNwdV9ibG9jaykg KHN0cnVjdCB2Y3B1ICopOworICAgIHZvaWQgKCpwaV9zd2l0Y2hfZnJvbSkgKHN0cnVjdCB2Y3B1 ICp2KTsKKyAgICB2b2lkICgqcGlfc3dpdGNoX3RvKSAoc3RydWN0IHZjcHUgKnYpOworICAgIHZv aWQgKCpwaV9kb19yZXN1bWUpIChzdHJ1Y3QgdmNwdSAqdik7Cit9OworCiBzdHJ1Y3QgaHZtX2Rv bWFpbiB7CiAgICAgLyogR3Vlc3QgcGFnZSByYW5nZSB1c2VkIGZvciBub24tZGVmYXVsdCBpb3Jl cSBzZXJ2ZXJzICovCiAgICAgc3RydWN0IHsKQEAgLTE0OCw2ICsyMDksOCBAQCBzdHJ1Y3QgaHZt X2RvbWFpbiB7CiAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICB9IHdyaXRlX21h cDsKIAorICAgIHN0cnVjdCBodm1fcGlfb3BzIHBpX29wczsKKwogICAgIHVuaW9uIHsKICAgICAg ICAgc3RydWN0IHZteF9kb21haW4gdm14OwogICAgICAgICBzdHJ1Y3Qgc3ZtX2RvbWFpbiBzdm07 CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9odm0uaCBiL3hlbi9pbmNsdWRl L2FzbS14ODYvaHZtL2h2bS5oCmluZGV4IDdlNzQ2MmUuLmIxZTRjNzUgMTAwNjQ0Ci0tLSBhL3hl bi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZt L2h2bS5oCkBAIC02MzgsOCArNjM4LDggQEAgdW5zaWduZWQgbG9uZyBodm1fY3I0X2d1ZXN0X3Jl c2VydmVkX2JpdHMoY29uc3Qgc3RydWN0IHZjcHUgKnYsIGJvb2xfdCByZXN0b3JlKTsKICAgICBz dHJ1Y3QgdmNwdSAqdl8gPSAodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgc3RydWN0IGRvbWFpbiAqZF8gPSB2Xy0+ZG9tYWluOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogICAgIGlmICggaGFzX2h2bV9jb250YWluZXJfZG9tYWluKGRfKSAmJiAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIChjcHVfaGFzX3ZteCAmJiBkXy0+YXJj aC5odm1fZG9tYWluLnZteC52Y3B1X2Jsb2NrKSApICBcCi0gICAgICAgIGRfLT5hcmNoLmh2bV9k b21haW4udm14LnZjcHVfYmxvY2sodl8pOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgKGRf LT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnZjcHVfYmxvY2spICkgICAgICAgICAgXAorICAgICAg ICBkXy0+YXJjaC5odm1fZG9tYWluLnBpX29wcy52Y3B1X2Jsb2NrKHZfKTsgICAgICAgICAgXAog fSkKIAogI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1fSFZNX0hfXyAqLwpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZt L3ZteC92bWNzLmgKaW5kZXggOTk3ZjRmNS4uNGVjOGIwOCAxMDA2NDQKLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92 bXgvdm1jcy5oCkBAIC03Nyw2NSArNzcsNiBAQCBzdHJ1Y3Qgdm14X2RvbWFpbiB7CiAgICAgdW5z aWduZWQgbG9uZyBhcGljX2FjY2Vzc19tZm47CiAgICAgLyogVk1YX0RPTUFJTl8qICovCiAgICAg dW5zaWduZWQgaW50IHN0YXR1czsKLQotICAgIC8qCi0gICAgICogVG8gaGFuZGxlIHBvc3RlZCBp bnRlcnJ1cHRzIGNvcnJlY3RseSwgd2UgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZwotICAgICAq IHN0YXRlOgotICAgICAqCi0gICAgICogKiBUaGUgUEkgbm90aWZpY2F0aW9uIHZlY3RvciAoTlYp Ci0gICAgICogKiBUaGUgUEkgbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9uIHByb2Nlc3NvciAoTkRT VCkKLSAgICAgKiAqIFRoZSBQSSAic3VwcHJlc3Mgbm90aWZpY2F0aW9uIiBiaXQgKFNOKQotICAg ICAqICogVGhlIHZjcHUgcGkgImJsb2NrZWQiIGxpc3QKLSAgICAgKgotICAgICAqIElmIGEgVk0g aXMgY3VycmVudGx5IHJ1bm5pbmcsIHdlIHdhbnQgdGhlIFBJIGRlbGl2ZXJlZCB0byB0aGUgZ3Vl c3QgdmNwdQotICAgICAqIG9uIHRoZSBwcm9wZXIgcGNwdSAoTkRTVCA9IHYtPnByb2Nlc3Nvciwg U04gY2xlYXIpLgotICAgICAqCi0gICAgICogSWYgdGhlIHZtIGlzIGJsb2NrZWQsIHdlIHdhbnQg dGhlIFBJIGRlbGl2ZXJlZCB0byBYZW4gc28gdGhhdCBpdCBjYW4KLSAgICAgKiB3YWtlIGl0IHVw ICAoU04gY2xlYXIsIE5WID0gcGlfd2FrZXVwX3ZlY3RvciwgdmNwdSBvbiBibG9jayBsaXN0KS4K LSAgICAgKgotICAgICAqIElmIHRoZSBWTSBpcyBjdXJyZW50bHkgZWl0aGVyIHByZWVtcHRlZCBv ciBvZmZsaW5lIChpLmUuLCBub3QgcnVubmluZwotICAgICAqIGJlY2F1c2Ugb2Ygc29tZSByZWFz b24gb3RoZXIgdGhhbiBibG9ja2luZyB3YWl0aW5nIGZvciBhbiBpbnRlcnJ1cHQpLAotICAgICAq IHRoZXJlJ3Mgbm90aGluZyBYZW4gY2FuIGRvIC0tIHdlIHdhbnQgdGhlIGludGVycnVwdCBwZW5k aW5nIGJpdCBzZXQgaW4KLSAgICAgKiB0aGUgZ3Vlc3QsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJv dGhlciBYZW4gd2l0aCBhbiBpbnRlcnJ1cHQgKFNOIGNsZWFyKS4KLSAgICAgKgotICAgICAqIFRo ZXJlJ3MgYSBicmllZiB3aW5kb3cgb2YgdGltZSBiZXR3ZWVuIHZteF9pbnRyX2Fzc2lzdCgpIGFu ZCBjaGVja2luZwotICAgICAqIHNvZnRpcnFzIHdoZXJlIGlmIGFuIGludGVycnVwdCBjb21lcyBp biBpdCBtYXkgYmUgbG9zdDsgc28gd2UgbmVlZCBYZW4KLSAgICAgKiB0byBnZXQgYW4gaW50ZXJy dXB0IGFuZCByYWlzZSBhIHNvZnRpcnEgc28gdGhhdCBpdCB3aWxsIGdvIHRocm91Z2ggdGhlCi0g ICAgICogdm14X2ludHJfYXNzaXN0KCkgcGF0aCBhZ2FpbiAoU04gY2xlYXIsIE5WID0gcG9zdGVk X2ludGVycnVwdCkuCi0gICAgICoKLSAgICAgKiBUaGUgd2F5IHdlIGltcGxlbWVudCB0aGlzIG5v dyBpcyBieSBsb29raW5nIGF0IHdoYXQgbmVlZHMgdG8gaGFwcGVuIG9uCi0gICAgICogdGhlIGZv bGxvd2luZyBydW5zdGF0ZSB0cmFuc2l0aW9uczoKLSAgICAgKgotICAgICAqIEE6IHJ1bm5hYmxl IC0+IHJ1bm5pbmcKLSAgICAgKiAgLSBTTiA9IDAKLSAgICAgKiAgLSBORFNUID0gdi0+cHJvY2Vz c29yCi0gICAgICogQjogcnVubmluZyAtPiBydW5uYWJsZQotICAgICAqICAtIFNOID0gMQotICAg ICAqIEM6IHJ1bm5pbmcgLT4gYmxvY2tlZAotICAgICAqICAtIE5WID0gcGlfd2FrZXVwX3ZlY3Rv cgotICAgICAqICAtIEFkZCB2Y3B1IHRvIGJsb2NrZWQgbGlzdAotICAgICAqIEQ6IGJsb2NrZWQg LT4gcnVubmFibGUKLSAgICAgKiAgLSBOViA9IHBvc3RlZF9pbnRyX3ZlY3RvcgotICAgICAqICAt IFRha2UgdmNwdSBvZmYgYmxvY2tlZCBsaXN0Ci0gICAgICoKLSAgICAgKiBGb3IgdHJhbnNpdGlv bnMgQSBhbmQgQiwgd2UgYWRkIGhvb2tzIGludG8gdm14X2N0eHRfc3dpdGNoX3tmcm9tLHRvfQot ICAgICAqIHBhdGhzLgotICAgICAqCi0gICAgICogRm9yIHRyYW5zaXRpb24gQywgd2UgYWRkIGEg bmV3IGFyY2ggaG9vaywgYXJjaF92Y3B1X2Jsb2NrKCksIHdoaWNoIGlzCi0gICAgICogY2FsbGVk IGZyb20gdmNwdV9ibG9jaygpIGFuZCB2Y3B1X2RvX3BvbGwoKS4KLSAgICAgKgotICAgICAqIEZv ciB0cmFuc2l0aW9uIEQsIHJhdGhlciB0aGFuIGFkZCBhbiBleHRyYSBhcmNoIGhvb2sgb24gdmNw dV93YWtlLCB3ZQotICAgICAqIGFkZCBhIGhvb2sgb24gdGhlIHZtZW50cnkgcGF0aCB3aGljaCBj aGVja3MgdG8gc2VlIGlmIGVpdGhlciBvZiB0aGUgdHdvCi0gICAgICogYWN0aW9ucyBuZWVkIHRv IGJlIHRha2VuLgotICAgICAqCi0gICAgICogVGhlc2UgaG9va3Mgb25seSBuZWVkIHRvIGJlIGNh bGxlZCB3aGVuIHRoZSBkb21haW4gaW4gcXVlc3Rpb24gYWN0dWFsbHkKLSAgICAgKiBoYXMgYSBw aHlzaWNhbCBkZXZpY2UgYXNzaWduZWQgdG8gaXQsIHNvIHdlIHNldCBhbmQgY2xlYXIgdGhlIGNh bGxiYWNrcwotICAgICAqIGFzIGFwcHJvcHJpYXRlIHdoZW4gZGV2aWNlIGFzc2lnbm1lbnQgY2hh bmdlcy4KLSAgICAgKi8KLSAgICB2b2lkICgqdmNwdV9ibG9jaykgKHN0cnVjdCB2Y3B1ICopOwot ICAgIHZvaWQgKCpwaV9zd2l0Y2hfZnJvbSkgKHN0cnVjdCB2Y3B1ICp2KTsKLSAgICB2b2lkICgq cGlfc3dpdGNoX3RvKSAoc3RydWN0IHZjcHUgKnYpOwotICAgIHZvaWQgKCpwaV9kb19yZXN1bWUp IChzdHJ1Y3QgdmNwdSAqdik7CiB9OwogCiBzdHJ1Y3QgcGlfZGVzYyB7Ci0tIAoxLjkuMQoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=