From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [PATCH V2 14/25] x86/vvtd: Process interrupt remapping request Date: Wed, 9 Aug 2017 16:34:15 -0400 Message-ID: <1502310866-10450-15-git-send-email-tianyu.lan@intel.com> References: <1502310866-10450-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: <1502310866-10450-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, julien.grall@arm.com, jbeulich@suse.com, Chao Gao List-Id: xen-devel@lists.xenproject.org RnJvbTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KCldoZW4gYSByZW1hcHBpbmcgaW50 ZXJydXB0IHJlcXVlc3QgYXJyaXZlcywgcmVtYXBwaW5nIGhhcmR3YXJlIGNvbXB1dGVzIHRoZQpp bnRlcnJ1cHRfaW5kZXggcGVyIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIFZURCBzcGVjCiJJ bnRlcnJ1cHQgUmVtYXBwaW5nIFRhYmxlIiwgaW50ZXJwcmV0cyB0aGUgSVJURSBhbmQgZ2VuZXJh dGVzIGEgcmVtYXBwZWQKaW50ZXJydXB0IHJlcXVlc3QuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMg dmlvbW11X2hhbmRsZV9pcnFfcmVxdWVzdCgpIHRvIGVtdWxhdGUgdGhlIHByb2Nlc3MgaG93CnJl bWFwcGluZyBoYXJkd2FyZSBoYW5kbGVzIGEgcmVtYXBwaW5nIGludGVycnVwdCByZXF1ZXN0LgoK U2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KU2lnbmVkLW9mZi1i eTogTGFuIFRpYW55dSA8dGlhbnl1LmxhbkBpbnRlbC5jb20+Ci0tLQogeGVuL2RyaXZlcnMvcGFz c3Rocm91Z2gvdnRkL2lvbW11LmggfCAgMjEgKysrCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92 dGQvdnRkLmggICB8ICAgNiArCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jICB8 IDI3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdl ZCwgMzAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaCBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pb21tdS5oCmluZGV4IDEwMmI0ZjMuLjcwZTY0Y2YgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pb21tdS5oCkBAIC0yNDQsNiArMjQ0LDIxIEBACiAjZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9p ZChjKSAoYyAmIDB4ZmZmZikKICNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgo dTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KIAorZW51bSBWVERfRkFVTFRfVFlQRQor eworICAgIC8qIEludGVycnVwdCByZW1hcHBpbmcgdHJhbnNpdGlvbiBmYXVsdHMgKi8KKyAgICBW VERfRlJfSVJfUkVRX1JTVkQgPSAweDIwLCAgIC8qIE9uZSBvciBtb3JlIElSIHJlcXVlc3QgcmVz ZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpZWxkcyBzZXQgKi8K KyAgICBWVERfRlJfSVJfSU5ERVhfT1ZFUiA9IDB4MjEsIC8qIEluZGV4IHZhbHVlIGdyZWF0ZXIg dGhhbiBtYXggKi8KKyAgICBWVERfRlJfSVJfRU5UUllfUCA9IDB4MjIsICAgIC8qIFByZXNlbnQg KFApIG5vdCBzZXQgaW4gSVJURSAqLworICAgIFZURF9GUl9JUl9ST09UX0lOVkFMID0gMHgyMywg LyogSVIgUm9vdCB0YWJsZSBpbnZhbGlkICovCisgICAgVlREX0ZSX0lSX0lSVEVfUlNWRCA9IDB4 MjQsICAvKiBJUlRFIFJzdmQgZmllbGQgbm9uLXplcm8gd2l0aAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogUHJlc2VudCBmbGFnIHNldCAqLworICAgIFZURF9GUl9JUl9SRVFf Q09NUEFUID0gMHgyNSwgLyogRW5jb3VudGVyZWQgY29tcGF0aWJsZSBJUgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogcmVxdWVzdCB3aGlsZSBkaXNhYmxlZCAqLworICAgIFZU RF9GUl9JUl9TSURfRVJSID0gMHgyNiwgICAgLyogSW52YWxpZCBTb3VyY2UtSUQgKi8KK307CisK IC8qCiAgKiAwOiBQcmVzZW50CiAgKiAxLTExOiBSZXNlcnZlZApAQCAtMzg0LDYgKzM5OSwxMiBA QCBzdHJ1Y3QgaXJlbWFwX2VudHJ5IHsKIH07CiAKIC8qCisgKiBXaGVuIFZULWQgZG9lc24ndCBl bmFibGUgRXh0ZW5kZWQgSW50ZXJydXB0IE1vZGUuIEhhcmR3YXJlIG9ubHkgaW50ZXJwcmV0cwor ICogb25seSA4LWJpdHMgKFsxNTo4XSkgb2YgRGVzdGluYXRpb24tSUQgZmllbGQgaW4gdGhlIElS VEVzLgorICovCisjZGVmaW5lIElSVEVfeEFQSUNfREVTVF9NQVNLIDB4ZmYwMAorCisvKgogICog UG9zdGVkLWludGVycnVwdCBkZXNjcmlwdG9yIGFkZHJlc3MgaXMgNjQgYml0cyB3aXRoIDY0LWJ5 dGUgYWxpZ25lZCwgb25seQogICogdGhlIHVwcGVyIDI2IGJpdHMgb2YgbGVzdCBzaWduaWZpY2lh bnQgMzIgYml0cyBpcyBhdmFpbGFibGUuCiAgKi8KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC92dGQuaCBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dGQuaApp bmRleCBiYjg4ODlmLi4xMDMyYjQ2IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvdnRkLmgKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z0ZC5oCkBAIC00 Nyw2ICs0Nyw4IEBAIHN0cnVjdCBJT19BUElDX3JvdXRlX3JlbWFwX2VudHJ5IHsKICAgICB9Owog fTsKIAorI2RlZmluZSBJT0FQSUNfUkVNQVBfRU5UUllfSU5ERVgoeCkgKCh4LmluZGV4XzE1IDw8 IDE1KSArIHguaW5kZXhfMF8xNCkKKwogc3RydWN0IG1zaV9tc2dfcmVtYXBfZW50cnkgewogICAg IHVuaW9uIHsKICAgICAgICAgdTMyIHZhbDsKQEAgLTY1LDQgKzY3LDggQEAgc3RydWN0IG1zaV9t c2dfcmVtYXBfZW50cnkgewogICAgIHUzMglkYXRhOwkJLyogbXNpIG1lc3NhZ2UgZGF0YSAqLwog fTsKIAorI2RlZmluZSBNU0lfUkVNQVBfRU5UUllfSU5ERVgoeCkgKCh4LmFkZHJlc3NfbG8uaW5k ZXhfMTUgPDwgMTUpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguYWRk cmVzc19sby5pbmRleF8wXzE0ICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh4LmFkZHJlc3NfbG8uU0hWID8gKHVpbnQxNl90KXguZGF0YSA6IDApKQorCiAjZW5kaWYgLy8g X1ZURF9IXwpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYyBi L3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKaW5kZXggOGU4ZGJlNi4uMmJlZTM1 MiAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYworKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCkBAIC0yMywxMSArMjMsMTYgQEAKICNp bmNsdWRlIDx4ZW4vdHlwZXMuaD4KICNpbmNsdWRlIDx4ZW4vdmlvbW11Lmg+CiAjaW5jbHVkZSA8 eGVuL3htYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9jdXJy ZW50Lmg+CisjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2h2bS9kb21haW4u aD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5j bHVkZSA8YXNtL3AybS5oPgogCiAjaW5jbHVkZSAiaW9tbXUuaCIKKyNpbmNsdWRlICJ2dGQuaCIK IAogc3RydWN0IGh2bV9od192dnRkX3JlZ3MgewogICAgIHVpbnQ4X3QgZGF0YVsxMDI0XTsKQEAg LTM4LDYgKzQzLDkgQEAgc3RydWN0IGh2bV9od192dnRkX3JlZ3MgewogI2RlZmluZSBWSU9NTVVf U1RBVFVTX0lSUV9SRU1BUFBJTkdfRU5BQkxFRCAgICAgKDEgPDwgMCkKICNkZWZpbmUgVklPTU1V X1NUQVRVU19ETUFfUkVNQVBQSU5HX0VOQUJMRUQgICAgICgxIDw8IDEpCiAKKyNkZWZpbmUgdnZ0 ZF9pcnFfcmVtYXBwaW5nX2VuYWJsZWQodnZ0ZCkgXAorICAgICh2dnRkLT5zdGF0dXMgJiBWSU9N TVVfU1RBVFVTX0lSUV9SRU1BUFBJTkdfRU5BQkxFRCkKKwogc3RydWN0IHZ2dGQgewogICAgIC8q IFZJT01NVV9TVEFUVVNfWFhYICovCiAgICAgaW50IHN0YXR1czsKQEAgLTEyMCw2ICsxMjgsMTQw IEBAIHN0YXRpYyBpbmxpbmUgdWludDhfdCB2dnRkX2dldF9yZWdfYnl0ZShzdHJ1Y3QgdnZ0ZCAq dnRkLCB1aW50MzJfdCByZWcpCiAgICAgdnZ0ZF9zZXRfcmVnKHZ2dGQsIChyZWcpICsgNCwgKHZh bCkgPj4gMzIpOyBcCiB9IHdoaWxlKDApCiAKK3N0YXRpYyBpbnQgbWFwX2d1ZXN0X3BhZ2Uoc3Ry dWN0IGRvbWFpbiAqZCwgdWludDY0X3QgZ2ZuLCB2b2lkICoqdmlydCkKK3sKKyAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpwOworCisgICAgcCA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdmbiwgTlVMTCwg UDJNX0FMTE9DKTsKKyAgICBpZiAoICFwICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAg ICBpZiAoICFnZXRfcGFnZV90eXBlKHAsIFBHVF93cml0YWJsZV9wYWdlKSApCisgICAgeworICAg ICAgICBwdXRfcGFnZShwKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAg KnZpcnQgPSBfX21hcF9kb21haW5fcGFnZV9nbG9iYWwocCk7CisgICAgaWYgKCAhKnZpcnQgKQor ICAgIHsKKyAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocCk7CisgICAgICAgIHJldHVybiAtRU5P TUVNOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdW5tYXBfZ3Vlc3Rf cGFnZSh2b2lkICp2aXJ0KQoreworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisKKyAgICBp ZiAoICF2aXJ0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlydCA9ICh2b2lkICopKCh1bnNp Z25lZCBsb25nKXZpcnQgJiBQQUdFX01BU0spOworICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShkb21h aW5fcGFnZV9tYXBfdG9fbWZuKHZpcnQpKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlX2dsb2Jh bCh2aXJ0KTsKKyAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQg dnZ0ZF9pbmpfaXJxKAorICAgIHN0cnVjdCB2bGFwaWMgKnRhcmdldCwKKyAgICB1aW50OF90IHZl Y3RvciwKKyAgICB1aW50OF90IHRyaWdfbW9kZSwKKyAgICB1aW50OF90IGRlbGl2ZXJ5X21vZGUp Cit7CisgICAgVlZURF9ERUJVRyhWVlREX0RCR19JTkZPLCAiZGVzdD12JWQsIGRlbGl2ZXJ5X21v ZGU9JXggdmVjdG9yPSVkICIKKyAgICAgICAgICAgICAgICJ0cmlnX21vZGU9JWQuIiwKKyAgICAg ICAgICAgICAgIHZsYXBpY192Y3B1KHRhcmdldCktPnZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsCisg ICAgICAgICAgICAgICB2ZWN0b3IsIHRyaWdfbW9kZSk7CisKKyAgICBBU1NFUlQoKGRlbGl2ZXJ5 X21vZGUgPT0gZGVzdF9GaXhlZCkgfHwKKyAgICAgICAgICAgKGRlbGl2ZXJ5X21vZGUgPT0gZGVz dF9Mb3dlc3RQcmlvKSk7CisKKyAgICB2bGFwaWNfc2V0X2lycSh0YXJnZXQsIHZlY3RvciwgdHJp Z19tb2RlKTsKK30KKworc3RhdGljIGludCB2dnRkX2RlbGl2ZXJ5KAorICAgIHN0cnVjdCBkb21h aW4gKmQsIGludCB2ZWN0b3IsCisgICAgdWludDMyX3QgZGVzdCwgdWludDhfdCBkZXN0X21vZGUs CisgICAgdWludDhfdCBkZWxpdmVyeV9tb2RlLCB1aW50OF90IHRyaWdfbW9kZSkKK3sKKyAgICBz dHJ1Y3QgdmxhcGljICp0YXJnZXQ7CisgICAgc3RydWN0IHZjcHUgKnY7CisKKyAgICBzd2l0Y2gg KCBkZWxpdmVyeV9tb2RlICkKKyAgICB7CisgICAgY2FzZSBkZXN0X0xvd2VzdFByaW86CisgICAg ICAgIHRhcmdldCA9IHZsYXBpY19sb3dlc3RfcHJpbyhkLCBOVUxMLCAwLCBkZXN0LCBkZXN0X21v ZGUpOworICAgICAgICBpZiAoIHRhcmdldCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAg ICAgdnZ0ZF9pbmpfaXJxKHRhcmdldCwgdmVjdG9yLCB0cmlnX21vZGUsIGRlbGl2ZXJ5X21vZGUp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVlZURF9ERUJVRyhWVlRE X0RCR19JTkZPLCAibnVsbCByb3VuZCByb2JpbjogdmVjdG9yPSUwMnhcbiIsIHZlY3Rvcik7Cisg ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBkZXN0X0ZpeGVkOgorICAgICAgICBmb3JfZWFjaF92 Y3B1ICggZCwgdiApCisgICAgICAgICAgICBpZiAoIHZsYXBpY19tYXRjaF9kZXN0KHZjcHVfdmxh cGljKHYpLCBOVUxMLCAwLCBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXN0X21vZGUpICkKKyAgICAgICAgICAgICAgICB2dnRkX2lual9pcnEodmNwdV92bGFwaWMo diksIHZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ19tb2RlLCBkZWxp dmVyeV9tb2RlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRlc3RfTk1JOgorICAgICAg ICBmb3JfZWFjaF92Y3B1ICggZCwgdiApCisgICAgICAgICAgICBpZiAoIHZsYXBpY19tYXRjaF9k ZXN0KHZjcHVfdmxhcGljKHYpLCBOVUxMLCAwLCBkZXN0LCBkZXN0X21vZGUpCisgICAgICAgICAg ICAgICAgICYmICF0ZXN0X2FuZF9zZXRfYm9vbCh2LT5ubWlfcGVuZGluZykgKQorICAgICAgICAg ICAgICAgIHZjcHVfa2ljayh2KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg ICAgICBwcmludGsoWEVOTE9HX0dfV0FSTklORworICAgICAgICAgICAgICAgIiVwdjogVW5zdXBw b3J0ZWQgVlREIGRlbGl2ZXJ5IG1vZGUgJWQgZm9yIERvbSVkXG4iLAorICAgICAgICAgICAgICAg Y3VycmVudCwgZGVsaXZlcnlfbW9kZSwgZC0+ZG9tYWluX2lkKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpcnFf cmVtYXBwaW5nX3JlcXVlc3RfaW5kZXgoc3RydWN0IGlycV9yZW1hcHBpbmdfcmVxdWVzdCAqaXJx KQoreworICAgIGlmICggaXJxLT50eXBlID09IFZJT01NVV9SRVFVRVNUX0lSUV9NU0kgKQorICAg IHsKKyAgICAgICAgc3RydWN0IG1zaV9tc2dfcmVtYXBfZW50cnkgbXNpX21zZyA9IHsgeyBpcnEt Pm1zZy5tc2kuYWRkciB9LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpcnEtPm1zZy5tc2kuZGF0YSB9OworCisgICAgICAgIHJldHVybiBNU0lfUkVN QVBfRU5UUllfSU5ERVgobXNpX21zZyk7CisgICAgfQorICAgIGVsc2UgaWYgKCBpcnEtPnR5cGUg PT0gVklPTU1VX1JFUVVFU1RfSVJRX0FQSUMgKQorICAgIHsKKyAgICAgICAgc3RydWN0IElPX0FQ SUNfcm91dGVfcmVtYXBfZW50cnkgcmVtYXBfcnRlID0geyB7IGlycS0+bXNnLnJ0ZSB9IH07CisK KyAgICAgICAgcmV0dXJuIElPQVBJQ19SRU1BUF9FTlRSWV9JTkRFWChyZW1hcF9ydGUpOworICAg IH0KKyAgICBCVUcoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJf dCBpcnRlX2Rlc3Qoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IGRlc3QpCit7CisgICAgdWlu dDY0X3QgaXJ0YTsKKworICAgIHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVJUQV9SRUcs IGlydGEpOworICAgIC8qIEluIHhBUElDIG1vZGUsIG9ubHkgOC1iaXRzKFsxNTo4XSkgYXJlIHZh bGlkICovCisgICAgcmV0dXJuIERNQV9JUlRBX0VJTUUoaXJ0YSkgPyBkZXN0IDogTUFTS19FWFRS KGRlc3QsIElSVEVfeEFQSUNfREVTVF9NQVNLKTsKK30KKworc3RhdGljIGludCB2dnRkX3JlY29y ZF9mYXVsdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGlycV9yZW1hcHBpbmdfcmVxdWVzdCAqaXJxLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcmVhc29uKQoreworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZ2 dGRfaGFuZGxlX2djbWRfc2lydHAoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKIHsK ICAgICB1aW50NjRfdCBpcnRhOwpAQCAtMjU5LDYgKzQwMSwxMzcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBodm1fbW1pb19vcHMgdnZ0ZF9tbWlvX29wcyA9IHsKICAgICAud3JpdGUgPSB2dnRkX3dy aXRlCiB9OwogCitzdGF0aWMgYm9vbCBpcl9zaWRfdmFsaWQoc3RydWN0IGlyZW1hcF9lbnRyeSAq aXJ0ZSwgdWludDMyX3Qgc291cmNlX2lkKQoreworICAgIHJldHVybiB0cnVlOworfQorCisvKgor ICogJ3JlY29yZF9mYXVsdCcgaXMgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgd2UgbmVlZCBy ZWNvcmRpbmcgYSBmYXVsdAorICogYW5kIG5vdGlmeWluZyBndWVzdCB3aGVuIGEgZmF1bHQgaGFw cGVucyBkdXJpbmcgZmV0Y2hpbmcgdklSVEUuCisgKi8KK3N0YXRpYyBpbnQgdnZ0ZF9nZXRfZW50 cnkoc3RydWN0IHZ2dGQgKnZ2dGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBp cnFfcmVtYXBwaW5nX3JlcXVlc3QgKmlycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGlyZW1hcF9lbnRyeSAqZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBy ZWNvcmRfZmF1bHQpCit7CisgICAgaW50IHJldDsKKyAgICB1aW50MzJfdCBlbnRyeSA9IGlycV9y ZW1hcHBpbmdfcmVxdWVzdF9pbmRleChpcnEpOworICAgIHN0cnVjdCBpcmVtYXBfZW50cnkgICpp cnRlLCAqaXJ0X3BhZ2U7CisKKyAgICBWVlREX0RFQlVHKFZWVERfREJHX1RSQU5TLCAiaW50ZXJw cmV0IGEgcmVxdWVzdCB3aXRoIGluZGV4ICV4IiwgZW50cnkpOworCisgICAgaWYgKCBlbnRyeSA+ IHZ2dGQtPmlydF9tYXhfZW50cnkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gVlREX0ZSX0lSX0lO REVYX09WRVI7CisgICAgICAgIGdvdG8gaGFuZGxlX2ZhdWx0OworICAgIH0KKworICAgIHJldCA9 IG1hcF9ndWVzdF9wYWdlKHZ2dGQtPmRvbWFpbiwgdnZ0ZC0+aXJ0ICsgKGVudHJ5ID4+IElSRU1B UF9FTlRSWV9PUkRFUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKikmaXJ0X3Bh Z2UpOworICAgIGlmICggcmV0ICkKKyAgICB7CisgICAgICAgIHJldCA9IFZURF9GUl9JUl9ST09U X0lOVkFMOworICAgICAgICBnb3RvIGhhbmRsZV9mYXVsdDsKKyAgICB9CisKKyAgICBpcnRlID0g aXJ0X3BhZ2UgKyAoZW50cnkgJSAoMSA8PCBJUkVNQVBfRU5UUllfT1JERVIpKTsKKyAgICBkZXN0 LT52YWwgPSBpcnRlLT52YWw7CisgICAgaWYgKCAhcWludmFsX3ByZXNlbnQoKmlydGUpICkKKyAg ICB7CisgICAgICAgIHJldCA9IFZURF9GUl9JUl9FTlRSWV9QOworICAgICAgICBnb3RvIHVubWFw X2hhbmRsZV9mYXVsdDsKKyAgICB9CisKKyAgICAvKiBDaGVjayByZXNlcnZlZCBiaXRzICovCisg ICAgaWYgKCAoaXJ0ZS0+cmVtYXAucmVzXzEgfHwgaXJ0ZS0+cmVtYXAucmVzXzIgfHwgaXJ0ZS0+ cmVtYXAucmVzXzMgfHwKKyAgICAgICAgICBpcnRlLT5yZW1hcC5yZXNfNCkgKQorICAgIHsKKyAg ICAgICAgcmV0ID0gVlREX0ZSX0lSX0lSVEVfUlNWRDsKKyAgICAgICAgZ290byB1bm1hcF9oYW5k bGVfZmF1bHQ7CisgICAgfQorCisgICAgaWYgKCFpcl9zaWRfdmFsaWQoaXJ0ZSwgaXJxLT5zb3Vy Y2VfaWQpKQorICAgIHsKKyAgICAgICAgcmV0ID0gVlREX0ZSX0lSX1NJRF9FUlI7CisgICAgICAg IGdvdG8gdW5tYXBfaGFuZGxlX2ZhdWx0OworICAgIH0KKyAgICB1bm1hcF9ndWVzdF9wYWdlKGly dF9wYWdlKTsKKyAgICByZXR1cm4gMDsKKworIHVubWFwX2hhbmRsZV9mYXVsdDoKKyAgICB1bm1h cF9ndWVzdF9wYWdlKGlydF9wYWdlKTsKKyBoYW5kbGVfZmF1bHQ6CisgICAgaWYgKCAhcmVjb3Jk X2ZhdWx0ICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHN3aXRjaCAoIHJldCApCisgICAg eworICAgIGNhc2UgVlREX0ZSX0lSX1NJRF9FUlI6CisgICAgY2FzZSBWVERfRlJfSVJfSVJURV9S U1ZEOgorICAgIGNhc2UgVlREX0ZSX0lSX0VOVFJZX1A6CisgICAgICAgIGlmICggcWludmFsX2Zh dWx0X2Rpc2FibGUoKmlydGUpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIC8qIGZhbGwgdGhy b3VnaCAqLworICAgIGNhc2UgVlREX0ZSX0lSX0lOREVYX09WRVI6CisgICAgY2FzZSBWVERfRlJf SVJfUk9PVF9JTlZBTDoKKyAgICAgICAgdnZ0ZF9yZWNvcmRfZmF1bHQodnZ0ZCwgaXJxLCByZXQp OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRrKFhFTkxP R19HX0lORk8sICJDYW4ndCBoYW5kbGUgVlQtZCBmYXVsdCAleFxuIiwgcmV0KTsKKyAgICB9Cisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2dnRkX2lycV9yZXF1ZXN0X3Nhbml0eV9j aGVjayhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGlycV9yZW1hcHBpbmdfcmVxdWVzdCAqaXJxKQoreworICAgIGlmICgg aXJxLT50eXBlID09IFZJT01NVV9SRVFVRVNUX0lSUV9BUElDICkKKyAgICB7CisgICAgICAgIHN0 cnVjdCBJT19BUElDX3JvdXRlX3JlbWFwX2VudHJ5IHJ0ZSA9IHsgeyBpcnEtPm1zZy5ydGUgfSB9 OworCisgICAgICAgIEFTU0VSVChydGUuZm9ybWF0KTsKKyAgICAgICAgcmV0dXJuICghcnRlLnJl c2VydmVkKSA/IDAgOiBWVERfRlJfSVJfUkVRX1JTVkQ7CisgICAgfQorICAgIGVsc2UgaWYgKCBp cnEtPnR5cGUgPT0gVklPTU1VX1JFUVVFU1RfSVJRX01TSSApCisgICAgeworICAgICAgICBzdHJ1 Y3QgbXNpX21zZ19yZW1hcF9lbnRyeSBtc2lfbXNnID0geyB7IGlycS0+bXNnLm1zaS5hZGRyIH0g fTsKKworICAgICAgICBBU1NFUlQobXNpX21zZy5hZGRyZXNzX2xvLmZvcm1hdCk7CisgICAgICAg IHJldHVybiAwOworICAgIH0KKyAgICBCVUcoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB2dnRkX2hhbmRsZV9pcnFfcmVxdWVzdChzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXJxX3JlbWFwcGluZ19yZXF1ZXN0ICpp cnEpCit7CisgICAgc3RydWN0IGlyZW1hcF9lbnRyeSBpcnRlOworICAgIGludCByZXQ7CisgICAg c3RydWN0IHZ2dGQgKnZ2dGQgPSBkb21haW5fdnZ0ZChkKTsKKworICAgIGlmICggIXZ2dGQgfHwg IXZ2dGRfaXJxX3JlbWFwcGluZ19lbmFibGVkKHZ2dGQpICkKKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisKKyAgICByZXQgPSB2dnRkX2lycV9yZXF1ZXN0X3Nhbml0eV9jaGVjayh2dnRkLCBpcnEp OworICAgIGlmICggcmV0ICkKKyAgICB7CisgICAgICAgIHZ2dGRfcmVjb3JkX2ZhdWx0KHZ2dGQs IGlycSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAoICF2dnRk X2dldF9lbnRyeSh2dnRkLCBpcnEsICZpcnRlLCB0cnVlKSApCisgICAgeworICAgICAgICB2dnRk X2RlbGl2ZXJ5KHZ2dGQtPmRvbWFpbiwgaXJ0ZS5yZW1hcC52ZWN0b3IsCisgICAgICAgICAgICAg ICAgICAgICAgaXJ0ZV9kZXN0KHZ2dGQsIGlydGUucmVtYXAuZHN0KSwgaXJ0ZS5yZW1hcC5kbSwK KyAgICAgICAgICAgICAgICAgICAgICBpcnRlLnJlbWFwLmRsbSwgaXJ0ZS5yZW1hcC50bSk7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLUVGQVVMVDsKK30KKwogc3RhdGlj IHZvaWQgdnZ0ZF9yZXNldChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDY0X3QgY2FwYWJpbGl0eSkK IHsKICAgICB1aW50NjRfdCBjYXAgPSBETUFfQ0FQX05GUiB8IERNQV9DQVBfU0xMUFMgfCBETUFf Q0FQX0ZSTyB8CkBAIC0zMzQsNyArNjA3LDggQEAgc3RhdGljIGludCB2dnRkX2Rlc3Ryb3koc3Ry dWN0IHZpb21tdSAqdmlvbW11KQogc3RydWN0IHZpb21tdV9vcHMgdnZ0ZF9odm1fdm14X29wcyA9 IHsKICAgICAucXVlcnlfY2FwcyA9IHZ2dGRfcXVlcnlfY2FwcywKICAgICAuY3JlYXRlID0gdnZ0 ZF9jcmVhdGUsCi0gICAgLmRlc3Ryb3kgPSB2dnRkX2Rlc3Ryb3kKKyAgICAuZGVzdHJveSA9IHZ2 dGRfZGVzdHJveSwKKyAgICAuaGFuZGxlX2lycV9yZXF1ZXN0ID0gdnZ0ZF9oYW5kbGVfaXJxX3Jl cXVlc3QKIH07CiAKIHN0YXRpYyBpbnQgdnZ0ZF9yZWdpc3Rlcih2b2lkKQotLSAKMS44LjMuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=