From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 1/9] x86/vmx: API improvements for MSR load/save infrastructure Date: Tue, 22 May 2018 12:20:38 +0100 Message-ID: <1526988046-22948-2-git-send-email-andrew.cooper3@citrix.com> References: <1526988046-22948-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1526988046-22948-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Kevin Tian , Wei Liu , Jan Beulich , Andrew Cooper , Jun Nakajima , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org Q29sbGVjdCB0b2dldGhlciByZWxhdGVkIGluZnJhc3RydWN0dXJlIGluIHZtY3MuaCwgcmF0aGVy IHRoYW4gaGF2aW5nIGl0CnNwcmVhZCBvdXQuICBUdXJuIHZteF97cmVhZCx3cml0ZX1fZ3Vlc3Rf bXNyKCkgaW50byBzdGF0aWMgaW5saW5lcywgYXMgdGhleQphcmUgc2ltcGxlIGVub3VnaC4KClJl cGxhY2UgJ2ludCB0eXBlJyB3aXRoICdlbnVtIHZteF9tc3JfbGlzdF90eXBlJywgYW5kIHVzZSBz d2l0Y2ggc3RhdGVtZW50cwppbnRlcm5hbGx5LiAgTGF0ZXIgY2hhbmdlcyBhcmUgZ29pbmcgdG8g aW50cm9kdWNlIGEgbmV3IHR5cGUuCgpSZW5hbWUgdGhlIHR5cGUgaWRlbnRpZmllcnMgZm9yIGNv bnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIFZNWF9NU1JfKgpjb25zdGFudHMuCgpObyBmdW5jdGlv bmFsIGNoYW5nZS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIz QGNpdHJpeC5jb20+Ci0tLQpDQzogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgpDQzog SnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgpDQzogS2V2aW4gVGlhbiA8a2V2 aW4udGlhbkBpbnRlbC5jb20+CkNDOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpDQzog Um9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2 L2h2bS92bXgvdm1jcy5jICAgICAgICB8IDkzICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyAgICAgICAgIHwgIDggKystLQog eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaCB8IDY0ICsrKysrKysrKysrKysrKysr KystLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZtY3MuYyBiL3hlbi9hcmNo L3g4Ni9odm0vdm14L3ZtY3MuYwppbmRleCA3MGMyZmI3Li5hNWRjZjVjIDEwMDY0NAotLS0gYS94 ZW4vYXJjaC94ODYvaHZtL3ZteC92bWNzLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm1j cy5jCkBAIC0xMjg5LDIyICsxMjg5LDI2IEBAIHN0YXRpYyBpbnQgdm14X21zcl9lbnRyeV9rZXlf Y21wKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqZWx0KQogICAgIHJldHVybiAwOwogfQog Ci1zdHJ1Y3Qgdm14X21zcl9lbnRyeSAqdm14X2ZpbmRfbXNyKHUzMiBtc3IsIGludCB0eXBlKQor c3RydWN0IHZteF9tc3JfZW50cnkgKnZteF9maW5kX21zcih1aW50MzJfdCBtc3IsIGVudW0gdm14 X21zcl9saXN0X3R5cGUgdHlwZSkKIHsKICAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7 CiAgICAgdW5zaWduZWQgaW50IG1zcl9jb3VudDsKLSAgICBzdHJ1Y3Qgdm14X21zcl9lbnRyeSAq bXNyX2FyZWE7CisgICAgc3RydWN0IHZteF9tc3JfZW50cnkgKm1zcl9hcmVhID0gTlVMTDsKIAot ICAgIGlmICggdHlwZSA9PSBWTVhfR1VFU1RfTVNSICkKKyAgICBzd2l0Y2ggKCB0eXBlICkKICAg ICB7Ci0gICAgICAgIG1zcl9jb3VudCA9IGN1cnItPmFyY2guaHZtX3ZteC5tc3JfY291bnQ7Ci0g ICAgICAgIG1zcl9hcmVhID0gY3Vyci0+YXJjaC5odm1fdm14Lm1zcl9hcmVhOwotICAgIH0KLSAg ICBlbHNlCi0gICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBWTVhfSE9TVF9NU1IpOworICAg IGNhc2UgVk1YX01TUl9IT1NUOgogICAgICAgICBtc3JfY291bnQgPSBjdXJyLT5hcmNoLmh2bV92 bXguaG9zdF9tc3JfY291bnQ7CiAgICAgICAgIG1zcl9hcmVhID0gY3Vyci0+YXJjaC5odm1fdm14 Lmhvc3RfbXNyX2FyZWE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBWTVhfTVNSX0dVRVNU OgorICAgICAgICBtc3JfY291bnQgPSBjdXJyLT5hcmNoLmh2bV92bXgubXNyX2NvdW50OworICAg ICAgICBtc3JfYXJlYSA9IGN1cnItPmFyY2guaHZtX3ZteC5tc3JfYXJlYTsKKyAgICAgICAgYnJl YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKICAgICB9 CiAKICAgICBpZiAoIG1zcl9hcmVhID09IE5VTEwgKQpAQCAtMTMxNCw0OCArMTMxOCwyNyBAQCBz dHJ1Y3Qgdm14X21zcl9lbnRyeSAqdm14X2ZpbmRfbXNyKHUzMiBtc3IsIGludCB0eXBlKQogICAg ICAgICAgICAgICAgICAgIHZteF9tc3JfZW50cnlfa2V5X2NtcCk7CiB9CiAKLWludCB2bXhfcmVh ZF9ndWVzdF9tc3IodTMyIG1zciwgdTY0ICp2YWwpCi17Ci0gICAgc3RydWN0IHZteF9tc3JfZW50 cnkgKmVudDsKLQotICAgIGlmICggKGVudCA9IHZteF9maW5kX21zcihtc3IsIFZNWF9HVUVTVF9N U1IpKSAhPSBOVUxMICkKLSAgICB7Ci0gICAgICAgICp2YWwgPSBlbnQtPmRhdGE7Ci0gICAgICAg IHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtRVNSQ0g7Ci19Ci0KLWludCB2bXhfd3Jp dGVfZ3Vlc3RfbXNyKHUzMiBtc3IsIHU2NCB2YWwpCi17Ci0gICAgc3RydWN0IHZteF9tc3JfZW50 cnkgKmVudDsKLQotICAgIGlmICggKGVudCA9IHZteF9maW5kX21zcihtc3IsIFZNWF9HVUVTVF9N U1IpKSAhPSBOVUxMICkKLSAgICB7Ci0gICAgICAgIGVudC0+ZGF0YSA9IHZhbDsKLSAgICAgICAg cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIC1FU1JDSDsKLX0KLQotaW50IHZteF9hZGRf bXNyKHUzMiBtc3IsIGludCB0eXBlKQoraW50IHZteF9hZGRfbXNyKHVpbnQzMl90IG1zciwgZW51 bSB2bXhfbXNyX2xpc3RfdHlwZSB0eXBlKQogewogICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3Vy cmVudDsKICAgICB1bnNpZ25lZCBpbnQgaWR4LCAqbXNyX2NvdW50OwogICAgIHN0cnVjdCB2bXhf bXNyX2VudHJ5ICoqbXNyX2FyZWEsICptc3JfYXJlYV9lbGVtOwogCi0gICAgaWYgKCB0eXBlID09 IFZNWF9HVUVTVF9NU1IgKQorICAgIHN3aXRjaCAoIHR5cGUgKQogICAgIHsKLSAgICAgICAgbXNy X2NvdW50ID0gJmN1cnItPmFyY2guaHZtX3ZteC5tc3JfY291bnQ7Ci0gICAgICAgIG1zcl9hcmVh ID0gJmN1cnItPmFyY2guaHZtX3ZteC5tc3JfYXJlYTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK LSAgICAgICAgQVNTRVJUKHR5cGUgPT0gVk1YX0hPU1RfTVNSKTsKKyAgICBjYXNlIFZNWF9NU1Jf SE9TVDoKICAgICAgICAgbXNyX2NvdW50ID0gJmN1cnItPmFyY2guaHZtX3ZteC5ob3N0X21zcl9j b3VudDsKICAgICAgICAgbXNyX2FyZWEgPSAmY3Vyci0+YXJjaC5odm1fdm14Lmhvc3RfbXNyX2Fy ZWE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBWTVhfTVNSX0dVRVNUOgorICAgICAgICBt c3JfY291bnQgPSAmY3Vyci0+YXJjaC5odm1fdm14Lm1zcl9jb3VudDsKKyAgICAgICAgbXNyX2Fy ZWEgPSAmY3Vyci0+YXJjaC5odm1fdm14Lm1zcl9hcmVhOworICAgICAgICBicmVhazsKKworICAg IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g LUVJTlZBTDsKICAgICB9CiAKICAgICBpZiAoICptc3JfYXJlYSA9PSBOVUxMICkKQEAgLTEzNjMs MTMgKzEzNDYsMTcgQEAgaW50IHZteF9hZGRfbXNyKHUzMiBtc3IsIGludCB0eXBlKQogICAgICAg ICBpZiAoICgqbXNyX2FyZWEgPSBhbGxvY194ZW5oZWFwX3BhZ2UoKSkgPT0gTlVMTCApCiAgICAg ICAgICAgICByZXR1cm4gLUVOT01FTTsKIAotICAgICAgICBpZiAoIHR5cGUgPT0gVk1YX0dVRVNU X01TUiApCisgICAgICAgIHN3aXRjaCAoIHR5cGUgKQogICAgICAgICB7CisgICAgICAgIGNhc2Ug Vk1YX01TUl9IT1NUOgorICAgICAgICAgICAgX192bXdyaXRlKFZNX0VYSVRfTVNSX0xPQURfQURE UiwgdmlydF90b19tYWRkcigqbXNyX2FyZWEpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgIGNhc2UgVk1YX01TUl9HVUVTVDoKICAgICAgICAgICAgIF9fdm13cml0ZShWTV9FWElUX01T Ul9TVE9SRV9BRERSLCB2aXJ0X3RvX21hZGRyKCptc3JfYXJlYSkpOwogICAgICAgICAgICAgX192 bXdyaXRlKFZNX0VOVFJZX01TUl9MT0FEX0FERFIsIHZpcnRfdG9fbWFkZHIoKm1zcl9hcmVhKSk7 CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBfX3Ztd3JpdGUoVk1fRVhJVF9NU1JfTE9BRF9BRERSLCB2aXJ0X3RvX21hZGRyKCptc3JfYXJl YSkpOwogICAgIH0KIAogICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8ICptc3JfY291bnQgJiYgKCpt c3JfYXJlYSlbaWR4XS5pbmRleCA8PSBtc3I7IGlkeCsrICkKQEAgLTEzODgsMTYgKzEzNzUsMTgg QEAgaW50IHZteF9hZGRfbXNyKHUzMiBtc3IsIGludCB0eXBlKQogCiAgICAgKysqbXNyX2NvdW50 OwogCi0gICAgaWYgKCB0eXBlID09IFZNWF9HVUVTVF9NU1IgKQorICAgIHN3aXRjaCAoIHR5cGUg KQogICAgIHsKKyAgICBjYXNlIFZNWF9NU1JfSE9TVDoKKyAgICAgICAgcmRtc3JsKG1zciwgbXNy X2FyZWFfZWxlbS0+ZGF0YSk7CisgICAgICAgIF9fdm13cml0ZShWTV9FWElUX01TUl9MT0FEX0NP VU5ULCAqbXNyX2NvdW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZNWF9NU1JfR1VF U1Q6CiAgICAgICAgIG1zcl9hcmVhX2VsZW0tPmRhdGEgPSAwOwogICAgICAgICBfX3Ztd3JpdGUo Vk1fRVhJVF9NU1JfU1RPUkVfQ09VTlQsICptc3JfY291bnQpOwogICAgICAgICBfX3Ztd3JpdGUo Vk1fRU5UUllfTVNSX0xPQURfQ09VTlQsICptc3JfY291bnQpOwotICAgIH0KLSAgICBlbHNlCi0g ICAgewotICAgICAgICByZG1zcmwobXNyLCBtc3JfYXJlYV9lbGVtLT5kYXRhKTsKLSAgICAgICAg X192bXdyaXRlKFZNX0VYSVRfTVNSX0xPQURfQ09VTlQsICptc3JfY291bnQpOworICAgICAgICBi cmVhazsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9o dm0vdm14L3ZteC5jIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKaW5kZXggOTcwNzUxNC4u MTIzZGNjYiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKKysrIGIveGVu L2FyY2gveDg2L2h2bS92bXgvdm14LmMKQEAgLTQxNjUsNyArNDE2NSw3IEBAIHN0YXRpYyB2b2lk IGxicl90c3hfZml4dXAodm9pZCkKICAgICBzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqbXNyX2FyZWEg PSBjdXJyLT5hcmNoLmh2bV92bXgubXNyX2FyZWE7CiAgICAgc3RydWN0IHZteF9tc3JfZW50cnkg Km1zcjsKIAotICAgIGlmICggKG1zciA9IHZteF9maW5kX21zcihsYnJfZnJvbV9zdGFydCwgVk1Y X0dVRVNUX01TUikpICE9IE5VTEwgKQorICAgIGlmICggKG1zciA9IHZteF9maW5kX21zcihsYnJf ZnJvbV9zdGFydCwgVk1YX01TUl9HVUVTVCkpICE9IE5VTEwgKQogICAgIHsKICAgICAgICAgLyoK ICAgICAgICAgICogU2lnbiBleHRlbmQgaW50byBiaXRzIDYxOjYyIHdoaWxlIHByZXNlcnZpbmcg Yml0IDYzCkBAIC00MTc1LDcgKzQxNzUsNyBAQCBzdGF0aWMgdm9pZCBsYnJfdHN4X2ZpeHVwKHZv aWQpCiAgICAgICAgICAgICBtc3ItPmRhdGEgfD0gKChMQlJfRlJPTV9TSUdORVhUXzJNU0IgJiBt c3ItPmRhdGEpIDw8IDIpOwogICAgIH0KIAotICAgIGlmICggKG1zciA9IHZteF9maW5kX21zcihs YnJfbGFzdGludF9mcm9tLCBWTVhfR1VFU1RfTVNSKSkgIT0gTlVMTCApCisgICAgaWYgKCAobXNy ID0gdm14X2ZpbmRfbXNyKGxicl9sYXN0aW50X2Zyb20sIFZNWF9NU1JfR1VFU1QpKSAhPSBOVUxM ICkKICAgICAgICAgbXNyLT5kYXRhIHw9ICgoTEJSX0ZST01fU0lHTkVYVF8yTVNCICYgbXNyLT5k YXRhKSA8PCAyKTsKIH0KIApAQCAtNDIwMyw4ICs0MjAzLDggQEAgc3RhdGljIHZvaWQgYmR3X2Vy cmF0dW1fYmRmMTRfZml4dXAodm9pZCkKICAgICAgKiBlcnJhdHVtIEJERjE0LiBGaXggdXAgTVNS X0lBMzJfTEFTVElOVHtGUk9NLFRPfUlQIGJ5CiAgICAgICogc2lnbi1leHRlbmRpbmcgaW50byBi aXRzIDQ4OjYzLgogICAgICAqLwotICAgIHNpZ25fZXh0ZW5kX21zcihNU1JfSUEzMl9MQVNUSU5U RlJPTUlQLCBWTVhfR1VFU1RfTVNSKTsKLSAgICBzaWduX2V4dGVuZF9tc3IoTVNSX0lBMzJfTEFT VElOVFRPSVAsIFZNWF9HVUVTVF9NU1IpOworICAgIHNpZ25fZXh0ZW5kX21zcihNU1JfSUEzMl9M QVNUSU5URlJPTUlQLCBWTVhfTVNSX0dVRVNUKTsKKyAgICBzaWduX2V4dGVuZF9tc3IoTVNSX0lB MzJfTEFTVElOVFRPSVAsIFZNWF9NU1JfR1VFU1QpOwogfQogCiBzdGF0aWMgdm9pZCBsYnJfZml4 dXAodm9pZCkKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC92bWNzLmgg Yi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oCmluZGV4IDA2YzMxNzkuLmM4YTFm ODkgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC92bWNzLmgKKysrIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaApAQCAtNTE0LDkgKzUxNCw2IEBAIGVu dW0gdm1jc19maWVsZCB7CiAKICNkZWZpbmUgVk1DU19WUElEX1dJRFRIIDE2CiAKLSNkZWZpbmUg Vk1YX0dVRVNUX01TUiAwCi0jZGVmaW5lIFZNWF9IT1NUX01TUiAgMQotCiAvKiBWTSBJbnN0cnVj dGlvbiBlcnJvciBudW1iZXJzICovCiBlbnVtIHZteF9pbnNuX2Vycm5vCiB7CkBAIC01MzQsNiAr NTMxLDU0IEBAIGVudW0gdm14X2luc25fZXJybm8KICAgICBWTVhfSU5TTl9GQUlMX0lOVkFMSUQg ICAgICAgICAgICAgICAgICA9IH4wLAogfTsKIAorLyogTVNSIGxvYWQvc2F2ZSBsaXN0IGluZnJh c3RydWN0dXJlLiAqLworZW51bSB2bXhfbXNyX2xpc3RfdHlwZSB7CisgICAgVk1YX01TUl9IT1NU LAorICAgIFZNWF9NU1JfR1VFU1QsCit9OworCitpbnQgdm14X2FkZF9tc3IodWludDMyX3QgbXNy LCBlbnVtIHZteF9tc3JfbGlzdF90eXBlIHR5cGUpOworCitzdGF0aWMgaW5saW5lIGludCB2bXhf YWRkX2hvc3RfbG9hZF9tc3IodWludDMyX3QgbXNyKQoreworICAgIHJldHVybiB2bXhfYWRkX21z cihtc3IsIFZNWF9NU1JfSE9TVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZteF9hZGRfZ3Vl c3RfbXNyKHVpbnQzMl90IG1zcikKK3sKKyAgICByZXR1cm4gdm14X2FkZF9tc3IobXNyLCBWTVhf TVNSX0dVRVNUKTsKK30KKworc3RydWN0IHZteF9tc3JfZW50cnkgKnZteF9maW5kX21zcih1aW50 MzJfdCBtc3IsIGVudW0gdm14X21zcl9saXN0X3R5cGUgdHlwZSk7CisKK3N0YXRpYyBpbmxpbmUg aW50IHZteF9yZWFkX2d1ZXN0X21zcih1aW50MzJfdCBtc3IsIHVpbnQ2NF90ICp2YWwpCit7Cisg ICAgc3RydWN0IHZteF9tc3JfZW50cnkgKmVudDsKKworICAgIGlmICggKGVudCA9IHZteF9maW5k X21zcihtc3IsIFZNWF9NU1JfR1VFU1QpKSApCisgICAgeworICAgICAgICAqdmFsID0gZW50LT5k YXRhOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gLUVTUkNIOworfQor CitzdGF0aWMgaW5saW5lIGludCB2bXhfd3JpdGVfZ3Vlc3RfbXNyKHVpbnQzMl90IG1zciwgdWlu dDY0X3QgdmFsKQoreworICAgIHN0cnVjdCB2bXhfbXNyX2VudHJ5ICplbnQ7CisKKyAgICBpZiAo IChlbnQgPSB2bXhfZmluZF9tc3IobXNyLCBWTVhfTVNSX0dVRVNUKSkgKQorICAgIHsKKyAgICAg ICAgZW50LT5kYXRhID0gdmFsOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1 cm4gLUVTUkNIOworfQorCisKKy8qIE1TUiBpbnRlcmNlcHQgYml0bWFwIGluZnJhc3RydWN0dXJl LiAqLwogZW51bSB2bXhfbXNyX2ludGVyY2VwdF90eXBlIHsKICAgICBWTVhfTVNSX1IgID0gMSwK ICAgICBWTVhfTVNSX1cgID0gMiwKQEAgLTU0NCwxMCArNTg5LDYgQEAgdm9pZCB2bXhfY2xlYXJf bXNyX2ludGVyY2VwdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgaW50IG1zciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSB2bXhfbXNyX2ludGVyY2VwdF90eXBlIHR5cGUpOwog dm9pZCB2bXhfc2V0X21zcl9pbnRlcmNlcHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBt c3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHZteF9tc3JfaW50ZXJjZXB0X3R5 cGUgdHlwZSk7Ci1pbnQgdm14X3JlYWRfZ3Vlc3RfbXNyKHUzMiBtc3IsIHU2NCAqdmFsKTsKLWlu dCB2bXhfd3JpdGVfZ3Vlc3RfbXNyKHUzMiBtc3IsIHU2NCB2YWwpOwotc3RydWN0IHZteF9tc3Jf ZW50cnkgKnZteF9maW5kX21zcih1MzIgbXNyLCBpbnQgdHlwZSk7Ci1pbnQgdm14X2FkZF9tc3Io dTMyIG1zciwgaW50IHR5cGUpOwogdm9pZCB2bXhfdm1jc19zd2l0Y2gocGFkZHJfdCBmcm9tLCBw YWRkcl90IHRvKTsKIHZvaWQgdm14X3NldF9lb2lfZXhpdF9iaXRtYXAoc3RydWN0IHZjcHUgKnYs IHU4IHZlY3Rvcik7CiB2b2lkIHZteF9jbGVhcl9lb2lfZXhpdF9iaXRtYXAoc3RydWN0IHZjcHUg KnYsIHU4IHZlY3Rvcik7CkBAIC01NjIsMTUgKzYwMyw2IEBAIHZvaWQgdmlydHVhbF92bWNzX3Zt d3JpdGUoY29uc3Qgc3RydWN0IHZjcHUgKiwgdTMyIGVuY29kaW5nLCB1NjQgdmFsKTsKIGVudW0g dm14X2luc25fZXJybm8gdmlydHVhbF92bWNzX3Ztd3JpdGVfc2FmZShjb25zdCBzdHJ1Y3QgdmNw dSAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIg dm1jc19lbmNvZGluZywgdTY0IHZhbCk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZteF9hZGRfZ3Vl c3RfbXNyKHUzMiBtc3IpCi17Ci0gICAgcmV0dXJuIHZteF9hZGRfbXNyKG1zciwgVk1YX0dVRVNU X01TUik7Ci19Ci1zdGF0aWMgaW5saW5lIGludCB2bXhfYWRkX2hvc3RfbG9hZF9tc3IodTMyIG1z cikKLXsKLSAgICByZXR1cm4gdm14X2FkZF9tc3IobXNyLCBWTVhfSE9TVF9NU1IpOwotfQotCiBE RUNMQVJFX1BFUl9DUFUoYm9vbF90LCB2bXhvbik7CiAKIGJvb2xfdCB2bXhfdmNwdV9wbWxfZW5h YmxlZChjb25zdCBzdHJ1Y3QgdmNwdSAqdik7Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=