From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [PATCH V3 28/29] x86/vvtd: Add queued invalidation (QI) support Date: Thu, 21 Sep 2017 23:02:09 -0400 Message-ID: <1506049330-11196-29-git-send-email-tianyu.lan@intel.com> References: <1506049330-11196-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: <1506049330-11196-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, andrew.cooper3@citrix.com, jbeulich@suse.com, Chao Gao , roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org RnJvbTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KClF1ZXVlZCBJbnZhbGlkYXRpb24g SW50ZXJmYWNlIGlzIGFuIGV4cGFuZGVkIGludmFsaWRhdGlvbiBpbnRlcmZhY2Ugd2l0aApleHRl bmRlZCBjYXBhYmlsaXRpZXMuIEhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyByZXBvcnQgc3VwcG9y dCBmb3IgcXVldWVkCmludmFsaWRhdGlvbiBpbnRlcmZhY2UgdGhyb3VnaCB0aGUgRXh0ZW5kZWQg Q2FwYWJpbGl0eSBSZWdpc3Rlci4gVGhlIHF1ZXVlZAppbnZhbGlkYXRpb24gaW50ZXJmYWNlIHVz ZXMgYW4gSW52YWxpZGF0aW9uIFF1ZXVlIChJUSksIHdoaWNoIGlzIGEgY2lyY3VsYXIKYnVmZmVy IGluIHN5c3RlbSBtZW1vcnkuIFNvZnR3YXJlIHN1Ym1pdHMgY29tbWFuZHMgYnkgd3JpdGluZyBJ bnZhbGlkYXRpb24KRGVzY3JpcHRvcnMgdG8gdGhlIElRLgoKSW4gdGhpcyBwYXRjaCwgYSBuZXcg ZnVuY3Rpb24gdmlvbW11X3Byb2Nlc3NfaXEoKSBpcyB1c2VkIGZvciBlbXVsYXRpbmcgaG93Cmhh cmR3YXJlIGhhbmRsZXMgaW52YWxpZGF0aW9uIHJlcXVlc3RzIHRocm91Z2ggUUkuCgpTaWduZWQt b2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBMYW4g VGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4KLS0tCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvaW9tbXUuaCB8ICAxOSArKy0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRk LmMgIHwgMjMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyNTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvdnRkL2lvbW11LmgKaW5kZXggYzY5Y2QyMS4uYzJiODNmMSAxMDA2NDQKLS0tIGEveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmgKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvdnRkL2lvbW11LmgKQEAgLTE3Nyw2ICsxNzcsMjEgQEAKICNkZWZpbmUgRE1BX0lSVEFfUyh2 YWwpICAgICAgICAgKHZhbCAmIDB4ZikKICNkZWZpbmUgRE1BX0lSVEFfU0laRSh2YWwpICAgICAg KDFVTCA8PCAoRE1BX0lSVEFfUyh2YWwpICsgMSkpCiAKKy8qIElRQV9SRUcgKi8KKyNkZWZpbmUg RE1BX0lRQV9BRERSKHZhbCkgICAgICAgKHZhbCAmIH4weGZmZlVMTCkKKyNkZWZpbmUgRE1BX0lR QV9RUyh2YWwpICAgICAgICAgKHZhbCAmIDB4NykKKyNkZWZpbmUgRE1BX0lRQV9SU1ZEICAgICAg ICAgICAgMHhmZjhVTEwKKworLyogSUVDVExfUkVHICovCisjZGVmaW5lIERNQV9JRUNUTF9JTV9T SElGVCAzMQorI2RlZmluZSBETUFfSUVDVExfSU0gICAgICAgICAgICAoMSA8PCBETUFfSUVDVExf SU1fU0hJRlQpCisjZGVmaW5lIERNQV9JRUNUTF9JUF9TSElGVCAzMAorI2RlZmluZSBETUFfSUVD VExfSVAgICAgICAgICAgICAoMSA8PCBETUFfSUVDVExfSVBfU0hJRlQpCisKKy8qIElDU19SRUcg Ki8KKyNkZWZpbmUgRE1BX0lDU19JV0NfU0hJRlQgICAgICAgMAorI2RlZmluZSBETUFfSUNTX0lX QyAgICAgICAgICAgICAoMSA8PCBETUFfSUNTX0lXQ19TSElGVCkKKwogLyogUE1FTl9SRUcgKi8K ICNkZWZpbmUgRE1BX1BNRU5fRVBNICAgICgoKHUzMikxKSA8PCAzMSkKICNkZWZpbmUgRE1BX1BN RU5fUFJTICAgICgoKHUzMikxKSA8PCAwKQpAQCAtMjExLDcgKzIyNiw4IEBACiAjZGVmaW5lIERN QV9GU1RTX1BQRiAoMVUgPDwgRE1BX0ZTVFNfUFBGX1NISUZUKQogI2RlZmluZSBETUFfRlNUU19B Rk8gKDFVIDw8IDIpCiAjZGVmaW5lIERNQV9GU1RTX0FQRiAoMVUgPDwgMykKLSNkZWZpbmUgRE1B X0ZTVFNfSVFFICgxVSA8PCA0KQorI2RlZmluZSBETUFfRlNUU19JUUVfU0hJRlQgNAorI2RlZmlu ZSBETUFfRlNUU19JUUUgKDFVIDw8IERNQV9GU1RTX0lRRV9TSElGVCkKICNkZWZpbmUgRE1BX0ZT VFNfSUNFICgxVSA8PCA1KQogI2RlZmluZSBETUFfRlNUU19JVEUgKDFVIDw8IDYpCiAjZGVmaW5l IERNQV9GU1RTX1BST19TSElGVCA3CkBAIC01NjIsNiArNTc4LDcgQEAgc3RydWN0IHFpbnZhbF9l bnRyeSB7CiAKIC8qIFF1ZXVlIGludmFsaWRhdGlvbiBoZWFkL3RhaWwgc2hpZnQgKi8KICNkZWZp bmUgUUlOVkFMX0lOREVYX1NISUZUIDQKKyNkZWZpbmUgUUlOVkFMX0lOREVYX01BU0sgIDB4N2Zm ZjBVTEwKIAogI2RlZmluZSBxaW52YWxfcHJlc2VudCh2KSAoKHYpLmxvICYgMSkKICNkZWZpbmUg cWludmFsX2ZhdWx0X2Rpc2FibGUodikgKCgodikubG8gPj4gMSkgJiAxKQpkaWZmIC0tZ2l0IGEv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3Z0ZC92dnRkLmMKaW5kZXggNTVmN2E0Ni4uNjY4ZDBjOSAxMDA2NDQKLS0tIGEveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYworKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvdnZ0ZC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4K ICNpbmNsdWRlIDxhc20vZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaHZtL2RvbWFpbi5oPgorI2lu Y2x1ZGUgPGFzbS9odm0vc3VwcG9ydC5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5j bHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcDJtLmg+CkBAIC00MTksNiArNDIwLDE3 NyBAQCBzdGF0aWMgaW50IHZ2dGRfcmVjb3JkX2ZhdWx0KHN0cnVjdCB2dnRkICp2dnRkLAogICAg IHJldHVybiBYODZFTVVMX09LQVk7CiB9CiAKKy8qCisgKiBQcm9jZXNzIGEgaW52YWxpZGF0aW9u IGRlc2NyaXB0b3IuIEN1cnJlbnRseSwgb25seSB0d28gdHlwZXMgZGVzY3JpcHRvcnMsCisgKiBJ bnRlcnJ1cHQgRW50cnkgQ2FjaGUgSW52YWxpZGF0aW9uIERlc2NyaXRvciBhbmQgSW52YWxpZGF0 aW9uIFdhaXQKKyAqIERlc2NyaXB0b3IgYXJlIGhhbmRsZWQuCisgKiBAdnZ0ZDogdGhlIHZpcnR1 YWwgdnRkIGluc3RhbmNlCisgKiBAaTogdGhlIGluZGV4IG9mIHRoZSBpbnZhbGlkYXRpb24gZGVz Y3JpcHRvciB0byBiZSBwcm9jZXNzZWQKKyAqCisgKiBJZiBzdWNjZXNzIHJldHVybiAwLCBvciBy ZXR1cm4gbm9uLXplcm8gd2hlbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfaXFl KHN0cnVjdCB2dnRkICp2dnRkLCBpbnQgaSkKK3sKKyAgICB1aW50NjRfdCBpcWE7CisgICAgc3Ry dWN0IHFpbnZhbF9lbnRyeSAqcWludmFsX3BhZ2U7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBp cWEgPSB2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRQV9SRUcpOworICAgIHFpbnZhbF9w YWdlID0gbWFwX2d1ZXN0X3BhZ2UodnZ0ZC0+ZG9tYWluLCBETUFfSVFBX0FERFIoaXFhKT4+UEFH RV9TSElGVCk7CisgICAgaWYgKCBJU19FUlIocWludmFsX3BhZ2UpICkKKyAgICB7CisgICAgICAg IGdkcHJpbnRrKFhFTkxPR19FUlIsICJDYW4ndCBtYXAgZ3Vlc3QgSVJUIChyYyAlbGQpIiwKKyAg ICAgICAgICAgICAgICAgUFRSX0VSUihxaW52YWxfcGFnZSkpOworICAgICAgICByZXR1cm4gUFRS X0VSUihxaW52YWxfcGFnZSk7CisgICAgfQorCisgICAgc3dpdGNoICggcWludmFsX3BhZ2VbaV0u cS5pbnZfd2FpdF9kc2MubG8udHlwZSApCisgICAgeworICAgIGNhc2UgVFlQRV9JTlZBTF9XQUlU OgorICAgICAgICBpZiAoIHFpbnZhbF9wYWdlW2ldLnEuaW52X3dhaXRfZHNjLmxvLnN3ICkKKyAg ICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgZGF0YSA9IHFpbnZhbF9wYWdlW2ldLnEuaW52 X3dhaXRfZHNjLmxvLnNkYXRhOworICAgICAgICAgICAgdWludDY0X3QgYWRkciA9IChxaW52YWxf cGFnZVtpXS5xLmludl93YWl0X2RzYy5oaS5zYWRkciA8PCAyKTsKKworICAgICAgICAgICAgcmV0 ID0gaHZtX2NvcHlfdG9fZ3Vlc3RfcGh5cyhhZGRyLCAmZGF0YSwgc2l6ZW9mKGRhdGEpLCBjdXJy ZW50KTsKKyAgICAgICAgICAgIGlmICggcmV0ICkKKyAgICAgICAgICAgICAgICB2dnRkX2luZm8o IkZhaWxlZCB0byB3cml0ZSBzdGF0dXMgYWRkcmVzcyIpOworICAgICAgICB9CisKKyAgICAgICAg LyoKKyAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkYXRp b24gY29tcGxldGlvbiBldmVudAorICAgICAgICAgKiBpbmRpY2F0aW5nIHRoZSBpbnZhbGlkYXRp b24gd2FpdCBkZXNjcmlwdG9yIGNvbXBsZXRpb24uIE5vdGUgdGhhdAorICAgICAgICAgKiB0aGUg Zm9sbG93aW5nIGNvZGUgZnJhZ21lbnQgaXMgbm90IHRlc3RlZCBwcm9wZXJseS4KKyAgICAgICAg ICovCisgICAgICAgIGlmICggcWludmFsX3BhZ2VbaV0ucS5pbnZfd2FpdF9kc2MubG8uaWZsYWcg KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBpZV9kYXRhLCBpZV9hZGRyOworICAg ICAgICAgICAgaWYgKCAhdnZ0ZF90ZXN0X2FuZF9zZXRfYml0KHZ2dGQsIERNQVJfSUNTX1JFRywg RE1BX0lDU19JV0NfU0hJRlQpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2dnRk X3NldF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JUF9TSElGVCk7CisgICAg ICAgICAgICAgICAgaWYgKCAhdnZ0ZF90ZXN0X2JpdCh2dnRkLCBETUFSX0lFQ1RMX1JFRywgRE1B X0lFQ1RMX0lNX1NISUZUKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICBpZV9kYXRhID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfSUVEQVRBX1JFRyk7CisgICAgICAg ICAgICAgICAgICAgIGllX2FkZHIgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9JRUFERFJfUkVH KTsKKyAgICAgICAgICAgICAgICAgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0ZCwgaWVf YWRkciwgaWVfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQs IERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgVFlQ RV9JTlZBTF9JRUM6CisgICAgICAgIC8qCisgICAgICAgICAqIEN1cnJlbnRseSwgbm8gY2FjaGUg aXMgcHJlc2VydmVkIGluIGh5cGVydmlzb3IuIE9ubHkgbmVlZCB0byB1cGRhdGUKKyAgICAgICAg ICogcElSVEVzIHdoaWNoIGFyZSBtb2RpZmllZCBpbiBiaW5kaW5nIHByb2Nlc3MuCisgICAgICAg ICAqLworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gZXJyb3I7 CisgICAgfQorCisgICAgdW5tYXBfZ3Vlc3RfcGFnZSgodm9pZCopcWludmFsX3BhZ2UpOworICAg IHJldHVybiByZXQ7CisKKyBlcnJvcjoKKyAgICB1bm1hcF9ndWVzdF9wYWdlKCh2b2lkKilxaW52 YWxfcGFnZSk7CisgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgIkludGVybmFsIGVycm9yIGluIFF1 ZXVlIEludmFsaWRhdGlvbi5cbiIpOworICAgIGRvbWFpbl9jcmFzaCh2dnRkLT5kb21haW4pOwor ICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbnZhbGlkYXRlIGFsbCB0aGUgZGVzY3JpcHRv cnMgaW4gSW52YWxpZGF0aW9uIFF1ZXVlLgorICovCitzdGF0aWMgdm9pZCB2dnRkX3Byb2Nlc3Nf aXEoc3RydWN0IHZ2dGQgKnZ2dGQpCit7CisgICAgdWludDY0X3QgaXFoLCBpcXQsIGlxYSwgbWF4 X2VudHJ5LCBpOworICAgIGludCBlcnIgPSAwOworCisgICAgLyoKKyAgICAgKiBObyBuZXcgZGVz Y3JpcHRvciBpcyBmZXRjaGVkIGZyb20gdGhlIEludmFsaWRhdGlvbiBRdWV1ZSB1bnRpbAorICAg ICAqIHNvZnR3YXJlIGNsZWFycyB0aGUgSVFFIGZpZWxkIGluIHRoZSBGYXVsdCBTdGF0dXMgUmVn aXN0ZXIKKyAgICAgKi8KKyAgICBpZiAoIHZ2dGRfdGVzdF9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JF RywgRE1BX0ZTVFNfSVFFX1NISUZUKSApCisgICAgICAgIHJldHVybjsKKworICAgIGlxaCA9IHZ2 dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFIX1JFRyk7CisgICAgaXF0ID0gdnZ0ZF9nZXRf cmVnX3F1YWQodnZ0ZCwgRE1BUl9JUVRfUkVHKTsKKyAgICBpcWEgPSB2dnRkX2dldF9yZWdfcXVh ZCh2dnRkLCBETUFSX0lRQV9SRUcpOworCisgICAgbWF4X2VudHJ5ID0gMSA8PCAoUUlOVkFMX0VO VFJZX09SREVSICsgRE1BX0lRQV9RUyhpcWEpKTsKKyAgICBpcWggPSBNQVNLX0VYVFIoaXFoLCBR SU5WQUxfSU5ERVhfTUFTSyk7CisgICAgaXF0ID0gTUFTS19FWFRSKGlxdCwgUUlOVkFMX0lOREVY X01BU0spOworCisgICAgQVNTRVJUKGlxdCA8IG1heF9lbnRyeSk7CisgICAgaWYgKCBpcWggPT0g aXF0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICggaSA9IGlxaDsgaSAhPSBpcXQ7IGkg PSAoaSArIDEpICUgbWF4X2VudHJ5ICkKKyAgICB7CisgICAgICAgIGVyciA9IHByb2Nlc3NfaXFl KHZ2dGQsIGkpOworICAgICAgICBpZiAoIGVyciApCisgICAgICAgICAgICBicmVhazsKKyAgICB9 CisgICAgdnZ0ZF9zZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUhfUkVHLCBpIDw8IFFJTlZBTF9J TkRFWF9TSElGVCk7CisKKyAgICAvKgorICAgICAqIFdoZW4gSVFFIHNldCwgSVFIIHJlZmVyZW5j ZXMgdGhlIGRlc3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgorICAgICAqLworICAg IGlmICggZXJyICkKKyAgICAgICAgdnZ0ZF9yZXBvcnRfbm9uX3JlY292ZXJhYmxlX2ZhdWx0KHZ2 dGQsIERNQV9GU1RTX0lRRV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9pcXQo c3RydWN0IHZ2dGQgKnZ2dGQsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworICAgIHVpbnQ2NF90IG1h eF9lbnRyeSwgaXFhID0gdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUFfUkVHKTsKKwor ICAgIGlmICggdmFsICYgflFJTlZBTF9JTkRFWF9NQVNLICkKKyAgICB7CisgICAgICAgIHZ2dGRf aW5mbygiQXR0ZW1wdCB0byBzZXQgcmVzZXJ2ZWQgYml0cyBpbiBJbnZhbGlkYXRpb24gUXVldWUg VGFpbCIpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0KKworICAgIG1heF9l bnRyeSA9IDEgPDwgKFFJTlZBTF9FTlRSWV9PUkRFUiArIERNQV9JUUFfUVMoaXFhKSk7CisgICAg aWYgKCBNQVNLX0VYVFIodmFsLCBRSU5WQUxfSU5ERVhfTUFTSykgPj0gbWF4X2VudHJ5ICkKKyAg ICB7CisgICAgICAgIHZ2dGRfaW5mbygiSVFUOiBWYWx1ZSAlbHggZXhjZWVkZWQgc3VwcG9ydGVk IG1heCBpbmRleC4iLCB2YWwpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0K KworICAgIHZ2dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFUX1JFRywgdmFsKTsKKyAgICB2 dnRkX3Byb2Nlc3NfaXEodnZ0ZCk7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitz dGF0aWMgaW50IHZ2dGRfd3JpdGVfaXFhKHN0cnVjdCB2dnRkICp2dnRkLCB1bnNpZ25lZCBsb25n IHZhbCkKK3sKKyAgICB1aW50MzJfdCBjYXAgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9DQVBf UkVHKTsKKyAgICB1bnNpZ25lZCBpbnQgZ3Vlc3RfbWF4X2FkZHJfd2lkdGggPSBjYXBfbWdhdyhj YXApOworCisgICAgaWYgKCB2YWwgJiAofigoMVVMTCA8PCBndWVzdF9tYXhfYWRkcl93aWR0aCkg LSAxKSB8IERNQV9JUUFfUlNWRCkgKQorICAgIHsKKyAgICAgICAgdnZ0ZF9pbmZvKCJBdHRlbXB0 IHRvIHNldCByZXNlcnZlZCBiaXRzIGluIEludmFsaWRhdGlvbiBRdWV1ZSBBZGRyZXNzIik7Cisg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgfQorCisgICAgdnZ0ZF9zZXRfcmVnX3F1 YWQodnZ0ZCwgRE1BUl9JUUFfUkVHLCB2YWwpOworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9pY3Moc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90 IHZhbCkKK3sKKyAgICBpZiAoIHZhbCAmIERNQV9JQ1NfSVdDICkKKyAgICB7CisgICAgICAgIHZ2 dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfSUNTX1JFRywgRE1BX0lDU19JV0NfU0hJRlQpOworICAg ICAgICAvKldoZW4gSVdDIGZpZWxkIGlzIGNsZWFyZWQsIHRoZSBJUCBmaWVsZCBuZWVkcyB0byBi ZSBjbGVhcmVkICovCisgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVH LCBETUFfSUVDVExfSVBfU0hJRlQpOworICAgIH0KKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor fQorCiBzdGF0aWMgaW50IHZ2dGRfd3JpdGVfZnJjZDMoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQz Ml90IHZhbCkKIHsKICAgICAvKiBXcml0aW5nIGEgMSBtZWFucyBjbGVhciBmYXVsdCAqLwpAQCAt NDMwLDYgKzYwMiwzMCBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGVfZnJjZDMoc3RydWN0IHZ2dGQg KnZ2dGQsIHVpbnQzMl90IHZhbCkKICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwogfQogCitzdGF0 aWMgaW50IHZ2dGRfd3JpdGVfaWVjdGwoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkK K3sKKyAgICAvKgorICAgICAqIE9ubHkgRE1BX0lFQ1RMX0lNIGJpdCBpcyB3cml0YWJsZS4gR2Vu ZXJhdGUgcGVuZGluZyBldmVudCB3aGVuIHVubWFzay4KKyAgICAgKi8KKyAgICBpZiAoICEodmFs ICYgRE1BX0lFQ1RMX0lNKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBJTSBhbmQgY2xlYXIg SVAgKi8KKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9J RUNUTF9JTV9TSElGVCk7CisgICAgICAgIGlmICggdnZ0ZF90ZXN0X2FuZF9jbGVhcl9iaXQodnZ0 ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JUF9TSElGVCkgKQorICAgICAgICB7CisgICAg ICAgICAgICB1aW50MzJfdCBpZV9kYXRhLCBpZV9hZGRyOworCisgICAgICAgICAgICBpZV9kYXRh ID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfSUVEQVRBX1JFRyk7CisgICAgICAgICAgICBpZV9h ZGRyID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfSUVBRERSX1JFRyk7CisgICAgICAgICAgICB2 dnRkX2dlbmVyYXRlX2ludGVycnVwdCh2dnRkLCBpZV9hZGRyLCBpZV9kYXRhKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHZ2dGRfc2V0X2JpdCh2dnRkLCBETUFSX0lFQ1RM X1JFRywgRE1BX0lFQ1RMX0lNX1NISUZUKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKIHN0YXRpYyBpbnQgdnZ0ZF93cml0ZV9mZWN0bChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMy X3QgdmFsKQogewogICAgIC8qCkBAIC00NzYsNiArNjcyLDEwIEBAIHN0YXRpYyBpbnQgdnZ0ZF93 cml0ZV9mc3RzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCiAgICAgaWYgKCAhKCh2 dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GU1RTX1JFRykgJiBETUFfRlNUU19GQVVMVFMpKSApCiAg ICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBETUFfRkVDVExfSVBf U0hJRlQpOwogCisgICAgLyogQ29udGludWUgdG8gZGVhbCBpbnZhbGlkYXRpb24gd2hlbiBJUUUg aXMgY2xlYXIgKi8KKyAgICBpZiAoICF2dnRkX3Rlc3RfYml0KHZ2dGQsIERNQVJfRlNUU19SRUcs IERNQV9GU1RTX0lRRV9TSElGVCkgKQorICAgICAgICB2dnRkX3Byb2Nlc3NfaXEodnZ0ZCk7CisK ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwogfQogCkBAIC02MTEsNiArODExLDMyIEBAIHN0YXRp YyBpbnQgdnZ0ZF93cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAg ICAgICBjYXNlIERNQVJfRkVDVExfUkVHOgogICAgICAgICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVf ZmVjdGwodnZ0ZCwgdmFsKTsKIAorICAgICAgICBjYXNlIERNQVJfSUVDVExfUkVHOgorICAgICAg ICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVfaWVjdGwodnZ0ZCwgdmFsKTsKKworICAgICAgICBjYXNl IERNQVJfSUNTX1JFRzoKKyAgICAgICAgICAgIHJldHVybiB2dnRkX3dyaXRlX2ljcyh2dnRkLCB2 YWwpOworCisgICAgICAgIGNhc2UgRE1BUl9JUVRfUkVHOgorICAgICAgICAgICAgcmV0dXJuIHZ2 dGRfd3JpdGVfaXF0KHZ2dGQsICh1aW50MzJfdCl2YWwpOworCisgICAgICAgIGNhc2UgRE1BUl9J UUFfUkVHOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBpcWFfaGk7CisKKyAgICAg ICAgICAgIGlxYV9oaSA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0lRQV9SRUdfSEkpOworICAg ICAgICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodWludDMyX3QpdmFsIHwgKCh1aW50NjRfdClpcWFfaGkgPDwgMzIpKTsK KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRE1BUl9JUUFfUkVHX0hJOgorICAgICAgICB7Cisg ICAgICAgICAgICB1aW50MzJfdCBpcWFfbG87CisKKyAgICAgICAgICAgIGlxYV9sbyA9IHZ2dGRf Z2V0X3JlZyh2dnRkLCBETUFSX0lRQV9SRUcpOworICAgICAgICAgICAgcmV0dXJuIHZ2dGRfd3Jp dGVfaXFhKHZ2dGQsICh2YWwgPDwgMzIpIHwgaXFhX2xvKTsKKyAgICAgICAgfQorCiAgICAgICAg IGNhc2UgRE1BUl9JRURBVEFfUkVHOgogICAgICAgICBjYXNlIERNQVJfSUVBRERSX1JFRzoKICAg ICAgICAgY2FzZSBETUFSX0lFVUFERFJfUkVHOgpAQCAtNjM3LDYgKzg2MywxMiBAQCBzdGF0aWMg aW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAg ICAgICAgIHZ2dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVJUQV9SRUcsIHZhbCk7CiAgICAg ICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIERNQVJfSVFUX1JFRzoKKyAgICAgICAgICAg IHJldHVybiB2dnRkX3dyaXRlX2lxdCh2dnRkLCB2YWwpOworCisgICAgICAgIGNhc2UgRE1BUl9J UUFfUkVHOgorICAgICAgICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsIHZhbCk7CisK ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICggb2Zmc2V0ID09IGZhdWx0X29mZnNl dCArIERNQV9GUkNEMl9PRkZTRVQgKQogICAgICAgICAgICAgICAgIHJldHVybiB2dnRkX3dyaXRl X2ZyY2QzKHZ2dGQsIHZhbCA+PiAzMik7Ci0tIAoxLjguMy4xCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==