From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [PATCH V3 26/29] x86/vvtd: Handle interrupt translation faults Date: Thu, 21 Sep 2017 23:02:07 -0400 Message-ID: <1506049330-11196-27-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 RnJvbTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KCkludGVycnVwdCB0cmFuc2xhdGlv biBmYXVsdHMgYXJlIG5vbi1yZWNvdmVyYWJsZSBmYXVsdC4gV2hlbiBmYXVsdHMKYXJlIHRyaWdn ZXJlZCwgaXQgbmVlZHMgdG8gcG9wdWxhdGUgZmF1bHQgaW5mbyB0byBGYXVsdCBSZWNvcmRpbmcK UmVnaXN0ZXJzIGFuZCBpbmplY3QgdklPTU1VIG1zaSBpbnRlcnJ1cHQgdG8gbm90aWZ5IGd1ZXN0 IElPTU1VIGRyaXZlcgp0byBkZWFsIHdpdGggZmF1bHRzLgoKVGhpcyBwYXRjaCBlbXVsYXRlcyBo YXJkd2FyZSdzIGhhbmRsaW5nIGludGVycnVwdCB0cmFuc2xhdGlvbgpmYXVsdHMgKG1vcmUgaW5m b3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3MgY2FuIGJlIGZvdW5kIGluIFZULWQgc3BlYywKY2hp cHRlciAiVHJhbnNsYXRpb24gRmF1bHRzIiwgc2VjdGlvbiAiTm9uLVJlY292ZXJhYmxlIEZhdWx0 ClJlcG9ydGluZyIgYW5kIHNlY3Rpb24gIk5vbi1SZWNvdmVyYWJsZSBMb2dnaW5nIikuClNwZWNp ZmljYWxseSwgdmlvbW11X3JlY29yZF9mYXVsdCgpIHJlY29yZHMgdGhlIGZhdWx0IGluZm9ybWF0 aW9uIGFuZAp2aW9tbXVfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVsdCgpIHJlcG9ydHMgZmF1 bHRzIHRvIHNvZnR3YXJlLgpDdXJyZW50bHksIG9ubHkgUHJpbWFyeSBGYXVsdCBMb2dnaW5nIGlz IHN1cHBvcnRlZCBhbmQgdGhlIE51bWJlciBvZgpGYXVsdC1yZWNvcmRpbmcgUmVnaXN0ZXJzIGlz IDEuCgpTaWduZWQtb2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBMYW4gVGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4KLS0tCiB4ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaCB8ICA2MCArKysrKysrLS0KIHhlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC92dnRkLmMgIHwgMjUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAzMDEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmggYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAppbmRleCA3OTAzODRmLi5lMTliMDQ1 IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAorKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaApAQCAtMTk4LDI2ICsxOTgsNjYgQEAK ICNkZWZpbmUgRE1BX0NDTURfQ0FJR19NQVNLKHgpICgoKHU2NCl4KSAmICgodTY0KSAweDMgPDwg NTkpKQogCiAvKiBGRUNUTF9SRUcgKi8KLSNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHU2NCkxKSA8 PCAzMSkKKyNkZWZpbmUgRE1BX0ZFQ1RMX0lNX1NISUZUIDMxCisjZGVmaW5lIERNQV9GRUNUTF9J TSAoMVUgPDwgRE1BX0ZFQ1RMX0lNX1NISUZUKQorI2RlZmluZSBETUFfRkVDVExfSVBfU0hJRlQg MzAKKyNkZWZpbmUgRE1BX0ZFQ1RMX0lQICgxVSA8PCBETUFfRkVDVExfSVBfU0hJRlQpCiAKIC8q IEZTVFNfUkVHICovCi0jZGVmaW5lIERNQV9GU1RTX1BGTyAoKHU2NCkxIDw8IDApCi0jZGVmaW5l IERNQV9GU1RTX1BQRiAoKHU2NCkxIDw8IDEpCi0jZGVmaW5lIERNQV9GU1RTX0FGTyAoKHU2NCkx IDw8IDIpCi0jZGVmaW5lIERNQV9GU1RTX0FQRiAoKHU2NCkxIDw8IDMpCi0jZGVmaW5lIERNQV9G U1RTX0lRRSAoKHU2NCkxIDw8IDQpCi0jZGVmaW5lIERNQV9GU1RTX0lDRSAoKHU2NCkxIDw8IDUp Ci0jZGVmaW5lIERNQV9GU1RTX0lURSAoKHU2NCkxIDw8IDYpCi0jZGVmaW5lIERNQV9GU1RTX0ZB VUxUUyAgICBETUFfRlNUU19QRk8gfCBETUFfRlNUU19QUEYgfCBETUFfRlNUU19BRk8gfCBETUFf RlNUU19BUEYgfCBETUFfRlNUU19JUUUgfCBETUFfRlNUU19JQ0UgfCBETUFfRlNUU19JVEUKKyNk ZWZpbmUgRE1BX0ZTVFNfUEZPX1NISUZUIDAKKyNkZWZpbmUgRE1BX0ZTVFNfUEZPICgxVSA8PCBE TUFfRlNUU19QRk9fU0hJRlQpCisjZGVmaW5lIERNQV9GU1RTX1BQRl9TSElGVCAxCisjZGVmaW5l IERNQV9GU1RTX1BQRiAoMVUgPDwgRE1BX0ZTVFNfUFBGX1NISUZUKQorI2RlZmluZSBETUFfRlNU U19BRk8gKDFVIDw8IDIpCisjZGVmaW5lIERNQV9GU1RTX0FQRiAoMVUgPDwgMykKKyNkZWZpbmUg RE1BX0ZTVFNfSVFFICgxVSA8PCA0KQorI2RlZmluZSBETUFfRlNUU19JQ0UgKDFVIDw8IDUpCisj ZGVmaW5lIERNQV9GU1RTX0lURSAoMVUgPDwgNikKKyNkZWZpbmUgRE1BX0ZTVFNfUFJPX1NISUZU IDcKKyNkZWZpbmUgRE1BX0ZTVFNfUFJPICgxVSA8PCBETUFfRlNUU19QUk9fU0hJRlQpCisjZGVm aW5lIERNQV9GU1RTX0ZBVUxUUyAgICAoRE1BX0ZTVFNfUEZPIHwgRE1BX0ZTVFNfUFBGIHwgRE1B X0ZTVFNfQUZPIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GU1RTX0FQRiB8 IERNQV9GU1RTX0lRRSB8IERNQV9GU1RTX0lDRSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBETUFfRlNUU19JVEUgfCBETUFfRlNUU19QUk8pCisjZGVmaW5lIERNQV9GU1RTX1JXMUNT ICAgICAoRE1BX0ZTVFNfUEZPIHwgRE1BX0ZTVFNfQUZPIHwgRE1BX0ZTVFNfQVBGIHwgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GU1RTX0lRRSB8IERNQV9GU1RTX0lDRSB8IERN QV9GU1RTX0lURSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRlNUU19QUk8p CiAjZGVmaW5lIGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChzKSAoKChzKSA+PiA4KSAmIDB4 ZmYpCiAKIC8qIEZSQ0RfUkVHLCAzMiBiaXRzIGFjY2VzcyAqLwotI2RlZmluZSBETUFfRlJDRF9G ICgoKHU2NCkxKSA8PCAzMSkKKyNkZWZpbmUgRE1BX0ZSQ0RfTEVOICAgICAgICAgICAgMHgxMAor I2RlZmluZSBETUFfRlJDRDJfT0ZGU0VUICAgICAgICAweDgKKyNkZWZpbmUgRE1BX0ZSQ0QzX09G RlNFVCAgICAgICAgMHhjCisjZGVmaW5lIERNQV9GUkNEX0ZfU0hJRlQgICAgICAgIDMxCisjZGVm aW5lIERNQV9GUkNEX0YgKCh1NjQpMSA8PCBETUFfRlJDRF9GX1NISUZUKQogI2RlZmluZSBkbWFf ZnJjZF90eXBlKGQpICgoZCA+PiAzMCkgJiAxKQogI2RlZmluZSBkbWFfZnJjZF9mYXVsdF9yZWFz b24oYykgKGMgJiAweGZmKQogI2RlZmluZSBkbWFfZnJjZF9zb3VyY2VfaWQoYykgKGMgJiAweGZm ZmYpCiAjZGVmaW5lIGRtYV9mcmNkX3BhZ2VfYWRkcihkKSAoZCAmICgoKHU2NCktMSkgPDwgMTIp KSAvKiBsb3cgNjQgYml0ICovCiAKK3N0cnVjdCB2dGRfZmF1bHRfcmVjb3JkX3JlZ2lzdGVyCit7 CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3QgbG87 CisgICAgICAgICAgICB1aW50NjRfdCBoaTsKKyAgICAgICAgfSBiaXRzOworICAgICAgICBzdHJ1 Y3QgeworICAgICAgICAgICAgdWludDY0X3QgcnN2ZDAgICAgICAgICAgOjEyLAorICAgICAgICAg ICAgICAgICAgICAgZmF1bHRfaW5mbyAgICAgOjUyOworICAgICAgICAgICAgdWludDY0X3Qgc291 cmNlX2lkICAgICAgOjE2LAorICAgICAgICAgICAgICAgICAgICAgcnN2ZDEgICAgICAgICAgOjks CisgICAgICAgICAgICAgICAgICAgICBwbXIgICAgICAgICAgICA6MSwgIC8qIFByaXZpbGVnZSBN b2RlIFJlcXVlc3RlZCAqLworICAgICAgICAgICAgICAgICAgICAgZXhlICAgICAgICAgICAgOjEs ICAvKiBFeGVjdXRlIFBlcm1pc3Npb24gUmVxdWVzdGVkICovCisgICAgICAgICAgICAgICAgICAg ICBwYXNpZF9wICAgICAgICA6MSwgIC8qIFBBU0lEIFByZXNlbnQgKi8KKyAgICAgICAgICAgICAg ICAgICAgIGZhdWx0X3JlYXNvbiAgIDo4LCAgLyogRmF1bHQgUmVhc29uICovCisgICAgICAgICAg ICAgICAgICAgICBwYXNpZF92YWwgICAgICA6MjAsIC8qIFBBU0lEIFZhbHVlICovCisgICAgICAg ICAgICAgICAgICAgICBhZGRyX3R5cGUgICAgICA6MiwgIC8qIEFkZHJlc3MgVHlwZSAqLworICAg ICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgOjEsICAvKiBUeXBlLiAoMCkgV3JpdGUg KDEpIFJlYWQvQXRvbWljT3AgKi8KKyAgICAgICAgICAgICAgICAgICAgIGZhdWx0ICAgICAgICAg IDoxOyAgLyogRmF1bHQgKi8KKyAgICAgICAgfSBmaWVsZHM7CisgICAgfTsKK307CisKIGVudW0g VlREX0ZBVUxUX1RZUEUKIHsKICAgICAvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHRyYW5zaXRpb24g ZmF1bHRzICovCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5j IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYwppbmRleCBiZDFjYWRkLi43NDU5 NDFjIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCisrKyBi L3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAq LwogCiAjaW5jbHVkZSA8eGVuL2RvbWFpbl9wYWdlLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgog I2luY2x1ZGUgPHhlbi9zY2hlZC5oPgogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUg PHhlbi92aW9tbXUuaD4KQEAgLTQxLDYgKzQyLDcgQEAgdW5zaWduZWQgaW50IHZ2dGRfY2FwcyA9 IFZJT01NVV9DQVBfSVJRX1JFTUFQUElORzsKIHN0cnVjdCBodm1faHdfdnZ0ZF9zdGF0dXMgewog ICAgIHVpbnQzMl90IGVpbV9lbmFibGVkIDogMSwKICAgICAgICAgICAgICBpbnRyZW1hcF9lbmFi bGVkIDogMTsKKyAgICB1aW50MzJfdCBmYXVsdF9pbmRleDsKICAgICB1aW50MzJfdCBpcnRfbWF4 X2VudHJ5OwogICAgIC8qIEludGVycnVwdCByZW1hcHBpbmcgdGFibGUgYmFzZSBnZm4gKi8KICAg ICB1aW50NjRfdCBpcnQ7CkBAIC04Niw2ICs4OCwyMiBAQCBzdHJ1Y3QgdnZ0ZCAqZG9tYWluX3Z2 dGQoc3RydWN0IGRvbWFpbiAqZCkKICAgICByZXR1cm4gKGQtPnZpb21tdSkgPyBkLT52aW9tbXUt PnByaXYgOiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIGludCB2dnRkX3Rlc3RfYW5kX3NldF9i aXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHJlZywgaW50IG5yKQoreworICAgIHJldHVy biB0ZXN0X2FuZF9zZXRfYml0KG5yLCAmdnZ0ZC0+cmVncy0+ZGF0YTMyW3JlZy9zaXplb2YodWlu dDMyX3QpXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZ2dGRfdGVzdF9hbmRfY2xlYXJfYml0 KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCByZWcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbnIpCit7CisgICAgcmV0dXJuIHRlc3RfYW5kX2NsZWFy X2JpdChuciwgJnZ2dGQtPnJlZ3MtPmRhdGEzMltyZWcvc2l6ZW9mKHVpbnQzMl90KV0pOworfQor CitzdGF0aWMgaW5saW5lIGludCB2dnRkX3Rlc3RfYml0KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50 MzJfdCByZWcsIGludCBucikKK3sKKyAgICByZXR1cm4gdGVzdF9iaXQobnIsICZ2dnRkLT5yZWdz LT5kYXRhMzJbcmVnL3NpemVvZih1aW50MzJfdCldKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lk IHZ2dGRfc2V0X2JpdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgcmVnLCBpbnQgbnIpCiB7 CiAgICAgX19zZXRfYml0KG5yLCAmdnZ0ZC0+cmVncy0+ZGF0YTMyW3JlZy9zaXplb2YodWludDMy X3QpXSk7CkBAIC0yMDYsNiArMjI0LDIzIEBAIHN0YXRpYyBpbnQgdnZ0ZF9kZWxpdmVyeShzdHJ1 Y3QgZG9tYWluICpkLCB1aW50OF90IHZlY3RvciwKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCB2 dnRkX2dlbmVyYXRlX2ludGVycnVwdChjb25zdCBzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3Qg YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSkKK3sKKyAg ICB1aW50OF90IGRlc3QsIGRtLCBkbG0sIHRtLCB2ZWN0b3I7CisKKyAgICB2dnRkX2RlYnVnKCJT ZW5kaW5nIGludGVycnVwdCAleCAleCB0byBkJWQiLAorICAgICAgICAgICAgICAgYWRkciwgZGF0 YSwgdnZ0ZC0+ZG9tYWluLT5kb21haW5faWQpOworCisgICAgZGVzdCA9IE1BU0tfRVhUUihhZGRy LCBNU0lfQUREUl9ERVNUX0lEX01BU0spOworICAgIGRtID0gISEoYWRkciAmIE1TSV9BRERSX0RF U1RNT0RFX01BU0spOworICAgIGRsbSA9IE1BU0tfRVhUUihkYXRhLCBNU0lfREFUQV9ERUxJVkVS WV9NT0RFX01BU0spOworICAgIHRtID0gTUFTS19FWFRSKGRhdGEsIE1TSV9EQVRBX1RSSUdHRVJf TUFTSyk7CisgICAgdmVjdG9yID0gZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLOworCisgICAg dnZ0ZF9kZWxpdmVyeSh2dnRkLT5kb21haW4sIHZlY3RvciwgZGVzdCwgZG0sIGRsbSwgdG0pOwor fQorCiBzdGF0aWMgdWludDMyX3QgaXJxX3JlbWFwcGluZ19yZXF1ZXN0X2luZGV4KAogICAgIGNv bnN0IHN0cnVjdCBhcmNoX2lycV9yZW1hcHBpbmdfcmVxdWVzdCAqaXJxKQogewpAQCAtMjQzLDYg KzI3OCwyMDcgQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCBpcnRlX2Rlc3Qoc3RydWN0IHZ2dGQg KnZ2dGQsIHVpbnQzMl90IGRlc3QpCiAgICAgICAgICAgIE1BU0tfRVhUUihkZXN0LCBJUlRFX3hB UElDX0RFU1RfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVy YWJsZV9mYXVsdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgaW50IHJlYXNvbikKK3sKKyAgICB1aW50MzJf dCBmc3RzOworCisgICAgZnN0cyA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZTVFNfUkVHKTsK KyAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JFRywgcmVhc29uKTsKKworICAgIC8q CisgICAgICogQWNjb3JvZGluZyB0byBWVC1kIHNwZWMgIk5vbi1SZWNvdmVyYWJsZSBGYXVsdCBF dmVudCIgY2hhcHRlciwgaWYKKyAgICAgKiB0aGVyZSBhcmUgYW55IHByZXZpb3VzbHkgcmVwb3J0 ZWQgaW50ZXJydXB0IGNvbmRpdGlvbnMgdGhhdCBhcmUgeWV0IHRvCisgICAgICogYmUgc2V2aWNl cyBieSBzb2Z0d2FyZSwgdGhlIEZhdWx0IEV2ZW50IGludGVycnJ1cHQgaXMgbm90IGdlbmVyYXRl ZC4KKyAgICAgKi8KKyAgICBpZiAoIGZzdHMgJiBETUFfRlNUU19GQVVMVFMgKQorICAgICAgICBy ZXR1cm47CisKKyAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNU TF9JUF9TSElGVCk7CisgICAgaWYgKCAhdnZ0ZF90ZXN0X2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JF RywgRE1BX0ZFQ1RMX0lNX1NISUZUKSApCisgICAgeworICAgICAgICB1aW50MzJfdCBmZV9kYXRh LCBmZV9hZGRyOworICAgICAgICBmZV9kYXRhID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRkVE QVRBX1JFRyk7CisgICAgICAgIGZlX2FkZHIgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GRUFE RFJfUkVHKTsKKyAgICAgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0ZCwgZmVfYWRkciwg ZmVfZGF0YSk7CisgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBE TUFfRkVDVExfSVBfU0hJRlQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdnZ0ZF91cGRhdGVf cHBmKHN0cnVjdCB2dnRkICp2dnRkKQoreworICAgIGludCBpOworICAgIHVpbnQ2NF90IGNhcCA9 IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0NBUF9SRUcpOworICAgIHVuc2lnbmVkIGludCBiYXNl ID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgY2Fw X251bV9mYXVsdF9yZWdzKGNhcCk7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHZ2dGRfdGVz dF9iaXQodnZ0ZCwgYmFzZSArIGkgKiBETUFfRlJDRF9MRU4gKyBETUFfRlJDRDNfT0ZGU0VULAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0ZSQ0RfRl9TSElGVCkgKQorICAgICAgICB7 CisgICAgICAgICAgICB2dnRkX3JlcG9ydF9ub25fcmVjb3ZlcmFibGVfZmF1bHQodnZ0ZCwgRE1B X0ZTVFNfUFBGX1NISUZUKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K KyAgICAvKgorICAgICAqIE5vIFByaW1hcnkgRmF1bHQgaXMgaW4gRmF1bHQgUmVjb3JkIFJlZ2lz dGVycywgdGh1cyBjbGVhciBQUEYgYml0IGluCisgICAgICogRlNUUy4KKyAgICAgKi8KKyAgICB2 dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19QUEZfU0hJRlQpOwor CisgICAgLyogSWYgbm8gZmF1bHQgaXMgaW4gRlNUUywgY2xlYXIgcGVuZGluZyBiaXQgaW4gRkVD VEwuICovCisgICAgaWYgKCAhKHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZTVFNfUkVHKSAmIERN QV9GU1RTX0ZBVUxUUykgKQorICAgICAgICB2dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZFQ1RM X1JFRywgRE1BX0ZFQ1RMX0lQX1NISUZUKTsKK30KKworLyoKKyAqIENvbW1pdCBhIGZhdWx0IHRv IGVtdWxhdGVkIEZhdWx0IFJlY29yZCBSZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHZ2dGRf Y29tbWl0X2ZyY2Qoc3RydWN0IHZ2dGQgKnZ2dGQsIGludCBpZHgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2dGRfZmF1bHRfcmVjb3JkX3JlZ2lzdGVyICpmcmNkKQorewor ICAgIHVpbnQ2NF90IGNhcCA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0NBUF9SRUcpOworICAg IHVuc2lnbmVkIGludCBiYXNlID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKKworICAgIHZ2 dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIGJhc2UgKyBpZHggKiBETUFfRlJDRF9MRU4sIGZyY2QtPmJp dHMubG8pOworICAgIHZ2dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIGJhc2UgKyBpZHggKiBETUFfRlJD RF9MRU4gKyA4LCBmcmNkLT5iaXRzLmhpKTsKKyAgICB2dnRkX3VwZGF0ZV9wcGYodnZ0ZCk7Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhIEZSQ0QgZm9yIHRoZSBjYWxsZXIuIElmIHN1Y2Nlc3MsIHJl dHVybiB0aGUgRlJJLiBPciwgcmV0dXJuIC0xCisgKiB3aGVuIGZhaWx1cmUuCisgKi8KK3N0YXRp YyBpbnQgdnZ0ZF9hbGxvY19mcmNkKHN0cnVjdCB2dnRkICp2dnRkKQoreworICAgIGludCBwcmV2 OworICAgIHVpbnQ2NF90IGNhcCA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0NBUF9SRUcpOwor ICAgIHVuc2lnbmVkIGludCBiYXNlID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKKworICAg IC8qIFNldCB0aGUgRiBiaXQgdG8gaW5kaWNhdGUgdGhlIEZSQ0QgaXMgaW4gdXNlLiAqLworICAg IGlmICggIXZ2dGRfdGVzdF9hbmRfc2V0X2JpdCh2dnRkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiYXNlICsgdnZ0ZC0+c3RhdHVzLmZhdWx0X2luZGV4ICogRE1BX0ZSQ0RfTEVO ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0ZSQ0QzX09GRlNFVCwgRE1B X0ZSQ0RfRl9TSElGVCkgKQorICAgIHsKKyAgICAgICAgcHJldiA9IHZ2dGQtPnN0YXR1cy5mYXVs dF9pbmRleDsKKyAgICAgICAgdnZ0ZC0+c3RhdHVzLmZhdWx0X2luZGV4ID0gKHByZXYgKyAxKSAl IGNhcF9udW1fZmF1bHRfcmVncyhjYXApOworICAgICAgICByZXR1cm4gdnZ0ZC0+c3RhdHVzLmZh dWx0X2luZGV4OworICAgIH0KKyAgICByZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQg dnZ0ZF9mcmVlX2ZyY2Qoc3RydWN0IHZ2dGQgKnZ2dGQsIGludCBpKQoreworICAgIHVpbnQ2NF90 IGNhcCA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0NBUF9SRUcpOworICAgIHVuc2lnbmVkIGlu dCBiYXNlID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKKworICAgIHZ2dGRfY2xlYXJfYml0 KHZ2dGQsIGJhc2UgKyBpICogRE1BX0ZSQ0RfTEVOICsgRE1BX0ZSQ0QzX09GRlNFVCwKKyAgICAg ICAgICAgICAgICAgICBETUFfRlJDRF9GX1NISUZUKTsKK30KKworc3RhdGljIGludCB2dnRkX3Jl Y29yZF9mYXVsdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGFyY2hfaXJxX3JlbWFwcGluZ19yZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcmVhc29uKQoreworICAgIHN0cnVjdCB2dGRfZmF1bHRf cmVjb3JkX3JlZ2lzdGVyIGZyY2Q7CisgICAgaW50IGZhdWx0X2luZGV4OworCisgICAgc3dpdGNo KHJlYXNvbikKKyAgICB7CisgICAgY2FzZSBWVERfRlJfSVJfUkVRX1JTVkQ6CisgICAgY2FzZSBW VERfRlJfSVJfSU5ERVhfT1ZFUjoKKyAgICBjYXNlIFZURF9GUl9JUl9FTlRSWV9QOgorICAgIGNh c2UgVlREX0ZSX0lSX1JPT1RfSU5WQUw6CisgICAgY2FzZSBWVERfRlJfSVJfSVJURV9SU1ZEOgor ICAgIGNhc2UgVlREX0ZSX0lSX1JFUV9DT01QQVQ6CisgICAgY2FzZSBWVERfRlJfSVJfU0lEX0VS UjoKKyAgICAgICAgaWYgKCB2dnRkX3Rlc3RfYml0KHZ2dGQsIERNQVJfRlNUU19SRUcsIERNQV9G U1RTX1BGT19TSElGVCkgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAg ICAgICAvKiBObyBhdmFpbGFibGUgRmF1bHQgUmVjb3JkIG1lYW5zIEZhdWx0IG92ZXJmbG93ZWQg Ki8KKyAgICAgICAgZmF1bHRfaW5kZXggPSB2dnRkX2FsbG9jX2ZyY2QodnZ0ZCk7CisgICAgICAg IGlmICggZmF1bHRfaW5kZXggPT0gLTEgKQorICAgICAgICB7CisgICAgICAgICAgICB2dnRkX3Jl cG9ydF9ub25fcmVjb3ZlcmFibGVfZmF1bHQodnZ0ZCwgRE1BX0ZTVFNfUEZPX1NISUZUKTsKKyAg ICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0 KCZmcmNkLCAwLCBzaXplb2YoZnJjZCkpOworICAgICAgICBmcmNkLmZpZWxkcy5mYXVsdF9yZWFz b24gPSAodWludDhfdClyZWFzb247CisgICAgICAgIGZyY2QuZmllbGRzLmZhdWx0X2luZm8gPSAo KHVpbnQ2NF90KWlycV9yZW1hcHBpbmdfcmVxdWVzdF9pbmRleChyZXF1ZXN0KSkgPDwgMzY7Cisg ICAgICAgIGZyY2QuZmllbGRzLnNvdXJjZV9pZCA9ICh1aW50MTZfdClyZXF1ZXN0LT5zb3VyY2Vf aWQ7CisgICAgICAgIGZyY2QuZmllbGRzLmZhdWx0ID0gMTsKKyAgICAgICAgdnZ0ZF9jb21taXRf ZnJjZCh2dnRkLCBmYXVsdF9pbmRleCwgJmZyY2QpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7CisgICAg ICAgIGJyZWFrOworICAgIH0KKworICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJDYW4ndCBoYW5k bGUgdlZURCBGYXVsdCAocmVhc29uIDB4JXgpLiIsIHJlYXNvbik7CisgICAgZG9tYWluX2NyYXNo KHZ2dGQtPmRvbWFpbik7CisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGlu dCB2dnRkX3dyaXRlX2ZyY2QzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCit7Cisg ICAgLyogV3JpdGluZyBhIDEgbWVhbnMgY2xlYXIgZmF1bHQgKi8KKyAgICBpZiAoIHZhbCAmIERN QV9GUkNEX0YgKQorICAgIHsKKyAgICAgICAgdnZ0ZF9mcmVlX2ZyY2QodnZ0ZCwgMCk7CisgICAg ICAgIHZ2dGRfdXBkYXRlX3BwZih2dnRkKTsKKyAgICB9CisgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKK30KKworc3RhdGljIGludCB2dnRkX3dyaXRlX2ZlY3RsKHN0cnVjdCB2dnRkICp2dnRkLCB1 aW50MzJfdCB2YWwpCit7CisgICAgLyoKKyAgICAgKiBPbmx5IERNQV9GRUNUTF9JTSBiaXQgaXMg d3JpdGFibGUuIEdlbmVyYXRlIHBlbmRpbmcgZXZlbnQgd2hlbiB1bm1hc2suCisgICAgICovCisg ICAgaWYgKCAhKHZhbCAmIERNQV9GRUNUTF9JTSkgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIg SU0gKi8KKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9G RUNUTF9JTV9TSElGVCk7CisgICAgICAgIGlmICggdnZ0ZF90ZXN0X2FuZF9jbGVhcl9iaXQodnZ0 ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9TSElGVCkgKQorICAgICAgICB7CisgICAg ICAgICAgICB1aW50MzJfdCBmZV9kYXRhLCBmZV9hZGRyOworCisgICAgICAgICAgICBmZV9kYXRh ID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRkVEQVRBX1JFRyk7CisgICAgICAgICAgICBmZV9h ZGRyID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRkVBRERSX1JFRyk7CisgICAgICAgICAgICB2 dnRkX2dlbmVyYXRlX2ludGVycnVwdCh2dnRkLCBmZV9hZGRyLCBmZV9kYXRhKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHZ2dGRfc2V0X2JpdCh2dnRkLCBETUFSX0ZFQ1RM X1JFRywgRE1BX0ZFQ1RMX0lNX1NISUZUKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9mc3RzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJf dCB2YWwpCit7CisgICAgaW50IGksIG1heF9mYXVsdF9pbmRleCA9IERNQV9GU1RTX1BST19TSElG VDsKKyAgICB1aW50NjRfdCBiaXRzX3RvX2NsZWFyID0gdmFsICYgRE1BX0ZTVFNfUlcxQ1M7CisK KyAgICBpZiAoIGJpdHNfdG9fY2xlYXIgKQorICAgIHsKKyAgICAgICAgaSA9IGZpbmRfZmlyc3Rf Yml0KCZiaXRzX3RvX2NsZWFyLCBtYXhfZmF1bHRfaW5kZXggLyA4ICsgMSk7CisgICAgICAgIHdo aWxlICggaSA8PSBtYXhfZmF1bHRfaW5kZXggKQorICAgICAgICB7CisgICAgICAgICAgICB2dnRk X2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBpKTsKKyAgICAgICAgICAgIGkgPSBmaW5k X25leHRfYml0KCZiaXRzX3RvX2NsZWFyLCBtYXhfZmF1bHRfaW5kZXggLyA4ICsgMSwgaSArIDEp OworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDbGVhciBJUCBmaWVsZCB3aGVu IGFsbCBzdGF0dXMgZmllbGRzIGluIHRoZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiBi ZWluZyBjbGVhci4KKyAgICAgKi8KKyAgICBpZiAoICEoKHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFS X0ZTVFNfUkVHKSAmIERNQV9GU1RTX0ZBVUxUUykpICkKKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQo dnZ0ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9TSElGVCk7CisKKyAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworfQorCiBzdGF0aWMgdm9pZCB2dnRkX2hhbmRsZV9nY21kX2lyZShzdHJ1 Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQogewogICAgIHZ2dGRfaW5mbygiJXNhYmxlIElu dGVycnVwdCBSZW1hcHBpbmciLApAQCAtMzM2LDcgKzU3Miw5IEBAIHN0YXRpYyBpbnQgdnZ0ZF93 cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgdmFsKQogewogICAgIHN0cnVj dCB2dnRkICp2dnRkID0gZG9tYWluX3Z2dGQodi0+ZG9tYWluKTsKKyAgICB1aW50NjRfdCBjYXAg PSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9DQVBfUkVHKTsKICAgICB1bnNpZ25lZCBpbnQgb2Zm c2V0ID0gYWRkciAtIHZ2dGQtPmJhc2VfYWRkcjsKKyAgICB1bnNpZ25lZCBpbnQgZmF1bHRfb2Zm c2V0ID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKIAogICAgIHZ2dGRfaW5mbygiV3JpdGUg b2Zmc2V0ICV4IGxlbiAlZCB2YWwgJWx4XG4iLCBvZmZzZXQsIGxlbiwgdmFsKTsKIApAQCAtMzUw LDYgKzU4OCwxMiBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2ln bmVkIGxvbmcgYWRkciwKICAgICAgICAgY2FzZSBETUFSX0dDTURfUkVHOgogICAgICAgICAgICAg cmV0dXJuIHZ2dGRfd3JpdGVfZ2NtZCh2dnRkLCB2YWwpOwogCisgICAgICAgIGNhc2UgRE1BUl9G U1RTX1JFRzoKKyAgICAgICAgICAgIHJldHVybiB2dnRkX3dyaXRlX2ZzdHModnZ0ZCwgdmFsKTsK KworICAgICAgICBjYXNlIERNQVJfRkVDVExfUkVHOgorICAgICAgICAgICAgcmV0dXJuIHZ2dGRf d3JpdGVfZmVjdGwodnZ0ZCwgdmFsKTsKKwogICAgICAgICBjYXNlIERNQVJfSUVEQVRBX1JFRzoK ICAgICAgICAgY2FzZSBETUFSX0lFQUREUl9SRUc6CiAgICAgICAgIGNhc2UgRE1BUl9JRVVBRERS X1JFRzoKQEAgLTM2Miw2ICs2MDYsOSBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZj cHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIG9mZnNldCA9PSBmYXVsdF9vZmZzZXQgKyBETUFf RlJDRDNfT0ZGU0VUICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdnZ0ZF93cml0ZV9mcmNkMyh2 dnRkLCB2YWwpOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTM3 NCw2ICs2MjEsOSBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2ln bmVkIGxvbmcgYWRkciwKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICBpZiAoIG9mZnNldCA9PSBmYXVsdF9vZmZzZXQgKyBETUFfRlJDRDJfT0ZGU0VU ICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdnZ0ZF93cml0ZV9mcmNkMyh2dnRkLCB2YWwgPj4g MzIpOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTQwNiw3ICs2 NTYsNyBAQCBzdGF0aWMgdm9pZCB2dnRkX2hhbmRsZV9mYXVsdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwK ICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICBjYXNlIFZURF9GUl9JUl9JTkRFWF9PVkVSOgog ICAgIGNhc2UgVlREX0ZSX0lSX1JPT1RfSU5WQUw6Ci0gICAgICAgIC8qIFRPRE86IGhhbmRsZSBm YXVsdCAoZS5nLiByZWNvcmQgYW5kIHJlcG9ydCB0aGlzIGZhdWx0IHRvIFZNICovCisgICAgICAg IHZ2dGRfcmVjb3JkX2ZhdWx0KHZ2dGQsIGlycSwgZmF1bHQpOwogICAgICAgICBicmVhazsKIAog ICAgIGRlZmF1bHQ6Ci0tIAoxLjguMy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==