From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lan Tianyu Subject: [PATCH V2 23/25] x86/vvtd: Handle interrupt translation faults Date: Wed, 9 Aug 2017 16:34:24 -0400 Message-ID: <1502310866-10450-24-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, julien.grall@arm.com, Chao Gao List-Id: xen-devel@lists.xenproject.org RnJvbTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KCkludGVycnVwdCB0cmFuc2xhdGlv biBmYXVsdHMgYXJlIG5vbi1yZWNvdmVyYWJsZSBmYXVsdC4gV2hlbiBmYXVsdHMKYXJlIHRyaWdn ZXJlZCwgaXQgbmVlZHMgdG8gcG9wdWxhdGUgZmF1bHQgaW5mbyB0byBGYXVsdCBSZWNvcmRpbmcK UmVnaXN0ZXJzIGFuZCBpbmplY3QgdklPTU1VIG1zaSBpbnRlcnJ1cHQgdG8gbm90aWZ5IGd1ZXN0 IElPTU1VIGRyaXZlcgp0byBkZWFsIHdpdGggZmF1bHRzLgoKVGhpcyBwYXRjaCBlbXVsYXRlcyBo YXJkd2FyZSdzIGhhbmRsaW5nIGludGVycnVwdCB0cmFuc2xhdGlvbgpmYXVsdHMgKG1vcmUgaW5m b3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3MgY2FuIGJlIGZvdW5kIGluIFZULWQgc3BlYywKY2hp cHRlciAiVHJhbnNsYXRpb24gRmF1bHRzIiwgc2VjdGlvbiAiTm9uLVJlY292ZXJhYmxlIEZhdWx0 ClJlcG9ydGluZyIgYW5kIHNlY3Rpb24gIk5vbi1SZWNvdmVyYWJsZSBMb2dnaW5nIikuClNwZWNp ZmljYWxseSwgdmlvbW11X3JlY29yZF9mYXVsdCgpIHJlY29yZHMgdGhlIGZhdWx0IGluZm9ybWF0 aW9uIGFuZAp2aW9tbXVfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVsdCgpIHJlcG9ydHMgZmF1 bHRzIHRvIHNvZnR3YXJlLgpDdXJyZW50bHksIG9ubHkgUHJpbWFyeSBGYXVsdCBMb2dnaW5nIGlz IHN1cHBvcnRlZCBhbmQgdGhlIE51bWJlciBvZgpGYXVsdC1yZWNvcmRpbmcgUmVnaXN0ZXJzIGlz IDEuCgpTaWduZWQtb2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBMYW4gVGlhbnl1IDx0aWFueXUubGFuQGludGVsLmNvbT4KLS0tCiB4ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaCB8ICA2MCArKysrKysrLS0KIHhlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC92dnRkLmMgIHwgMjM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAyODYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmggYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAppbmRleCBlMzIzMzUyLi5hOWU5MDVi IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAorKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaApAQCAtMjI2LDI2ICsyMjYsNjYgQEAK ICNkZWZpbmUgRE1BX0NDTURfQ0FJR19NQVNLKHgpICgoKHU2NCl4KSAmICgodTY0KSAweDMgPDwg NTkpKQogCiAvKiBGRUNUTF9SRUcgKi8KLSNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHU2NCkxKSA8 PCAzMSkKKyNkZWZpbmUgRE1BX0ZFQ1RMX0lNX0JJVCAzMQorI2RlZmluZSBETUFfRkVDVExfSU0g KDFVIDw8IERNQV9GRUNUTF9JTV9CSVQpCisjZGVmaW5lIERNQV9GRUNUTF9JUF9CSVQgMzAKKyNk ZWZpbmUgRE1BX0ZFQ1RMX0lQICgxVSA8PCBETUFfRkVDVExfSVBfQklUKQogCiAvKiBGU1RTX1JF RyAqLwotI2RlZmluZSBETUFfRlNUU19QRk8gKCh1NjQpMSA8PCAwKQotI2RlZmluZSBETUFfRlNU U19QUEYgKCh1NjQpMSA8PCAxKQotI2RlZmluZSBETUFfRlNUU19BRk8gKCh1NjQpMSA8PCAyKQot I2RlZmluZSBETUFfRlNUU19BUEYgKCh1NjQpMSA8PCAzKQotI2RlZmluZSBETUFfRlNUU19JUUUg KCh1NjQpMSA8PCA0KQotI2RlZmluZSBETUFfRlNUU19JQ0UgKCh1NjQpMSA8PCA1KQotI2RlZmlu ZSBETUFfRlNUU19JVEUgKCh1NjQpMSA8PCA2KQotI2RlZmluZSBETUFfRlNUU19GQVVMVFMgICAg RE1BX0ZTVFNfUEZPIHwgRE1BX0ZTVFNfUFBGIHwgRE1BX0ZTVFNfQUZPIHwgRE1BX0ZTVFNfQVBG IHwgRE1BX0ZTVFNfSVFFIHwgRE1BX0ZTVFNfSUNFIHwgRE1BX0ZTVFNfSVRFCisjZGVmaW5lIERN QV9GU1RTX1BGT19CSVQgMAorI2RlZmluZSBETUFfRlNUU19QRk8gKDFVIDw8IERNQV9GU1RTX1BG T19CSVQpCisjZGVmaW5lIERNQV9GU1RTX1BQRl9CSVQgMQorI2RlZmluZSBETUFfRlNUU19QUEYg KDFVIDw8IERNQV9GU1RTX1BQRl9CSVQpCisjZGVmaW5lIERNQV9GU1RTX0FGTyAoMVUgPDwgMikK KyNkZWZpbmUgRE1BX0ZTVFNfQVBGICgxVSA8PCAzKQorI2RlZmluZSBETUFfRlNUU19JUUUgKDFV IDw8IDQpCisjZGVmaW5lIERNQV9GU1RTX0lDRSAoMVUgPDwgNSkKKyNkZWZpbmUgRE1BX0ZTVFNf SVRFICgxVSA8PCA2KQorI2RlZmluZSBETUFfRlNUU19QUk9fQklUIDcKKyNkZWZpbmUgRE1BX0ZT VFNfUFJPICgxVSA8PCBETUFfRlNUU19QUk9fQklUKQorI2RlZmluZSBETUFfRlNUU19GQVVMVFMg ICAgKERNQV9GU1RTX1BGTyB8IERNQV9GU1RTX1BQRiB8IERNQV9GU1RTX0FGTyB8IERNQV9GU1RT X0FQRiB8IERNQV9GU1RTX0lRRSB8IERNQV9GU1RTX0lDRSB8IERNQV9GU1RTX0lURSB8IERNQV9G U1RTX1BSTykKKyNkZWZpbmUgRE1BX0ZTVFNfUlcxQ1MgICAgIChETUFfRlNUU19QRk8gfCBETUFf RlNUU19BRk8gfCBETUFfRlNUU19BUEYgfCBETUFfRlNUU19JUUUgfCBETUFfRlNUU19JQ0UgfCBE TUFfRlNUU19JVEUgfCBETUFfRlNUU19QUk8pCiAjZGVmaW5lIGRtYV9mc3RzX2ZhdWx0X3JlY29y ZF9pbmRleChzKSAoKChzKSA+PiA4KSAmIDB4ZmYpCiAKIC8qIEZSQ0RfUkVHLCAzMiBiaXRzIGFj Y2VzcyAqLwotI2RlZmluZSBETUFfRlJDRF9GICgoKHU2NCkxKSA8PCAzMSkKKyNkZWZpbmUgRE1B X0ZSQ0RfTEVOICAgICAgICAgICAgMHgxMAorI2RlZmluZSBETUFfRlJDRDBfT0ZGU0VUICAgICAg ICAweDAKKyNkZWZpbmUgRE1BX0ZSQ0QxX09GRlNFVCAgICAgICAgMHg0CisjZGVmaW5lIERNQV9G UkNEMl9PRkZTRVQgICAgICAgIDB4OAorI2RlZmluZSBETUFfRlJDRDNfT0ZGU0VUICAgICAgICAw eGMKKyNkZWZpbmUgRE1BX0ZSQ0QzX0ZSX01BU0sgICAgICAgMHhmZlVMCisjZGVmaW5lIERNQV9G UkNEX0ZfQklUIDMxCisjZGVmaW5lIERNQV9GUkNEX0YgKCh1NjQpMSA8PCBETUFfRlJDRF9GX0JJ VCkKKyNkZWZpbmUgRE1BX0ZSQ0QoaWR4LCBvZmZzZXQpIChETUFfQ0FQX0ZST19PRkZTRVQgKyBE TUFfRlJDRF9MRU4gKiBpZHggKyBvZmZzZXQpCiAjZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChk ID4+IDMwKSAmIDEpCiAjZGVmaW5lIGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihjKSAoYyAmIDB4ZmYp CiAjZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9pZChjKSAoYyAmIDB4ZmZmZikKICNkZWZpbmUgZG1h X2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQg Ki8KIAorc3RydWN0IHZ0ZF9mYXVsdF9yZWNvcmRfcmVnaXN0ZXIKK3sKKyAgICB1bmlvbiB7Cisg ICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1NjQgbG87CisgICAgICAgICAgICB1NjQgaGk7 CisgICAgICAgIH0gYml0czsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHU2NCByc3Zk MCAgIDoxMiwKKyAgICAgICAgICAgICAgICBGSSAgICAgIDo1MjsgLyogRmF1bHQgSW5mbyAqLwor ICAgICAgICAgICAgdTY0IFNJRCAgICAgOjE2LCAvKiBTb3VyY2UgSWRlbnRpZmllciAqLworICAg ICAgICAgICAgICAgIHJzdmQxICAgOjksCisgICAgICAgICAgICAgICAgUFJJViAgICA6MSwgIC8q IFByaXZpbGVnZSBNb2RlIFJlcXVlc3RlZCAqLworICAgICAgICAgICAgICAgIEVYRSAgICAgOjEs ICAvKiBFeGVjdXRlIFBlcm1pc3Npb24gUmVxdWVzdGVkICovCisgICAgICAgICAgICAgICAgUFAg ICAgICA6MSwgIC8qIFBBU0lEIFByZXNlbnQgKi8KKyAgICAgICAgICAgICAgICBGUiAgICAgIDo4 LCAgLyogRmF1bHQgUmVhc29uICovCisgICAgICAgICAgICAgICAgUFYgICAgICA6MjAsIC8qIFBB U0lEIFZhbHVlICovCisgICAgICAgICAgICAgICAgQVQgICAgICA6MiwgIC8qIEFkZHJlc3MgVHlw ZSAqLworICAgICAgICAgICAgICAgIFQgICAgICAgOjEsICAvKiBUeXBlLiAoMCkgV3JpdGUgKDEp IFJlYWQvQXRvbWljT3AgKi8KKyAgICAgICAgICAgICAgICBGICAgICAgIDoxOyAgLyogRmF1bHQg Ki8KKyAgICAgICAgfSBmaWVsZHM7CisgICAgfTsKK307CisKIGVudW0gVlREX0ZBVUxUX1RZUEUK IHsKICAgICAvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHRyYW5zaXRpb24gZmF1bHRzICovCmRpZmYg LS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jIGIveGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvdnRkL3Z2dGQuYwppbmRleCBlYWU4ZjExLi5mMWU2ZDAxIDEwMDY0NAotLS0g YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCisrKyBiL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC92dnRkLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8 eGVuL2RvbWFpbl9wYWdlLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgogI2luY2x1ZGUgPHhlbi9z Y2hlZC5oPgogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhlbi92aW9tbXUuaD4K QEAgLTMwLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFz bS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4K IAogI2luY2x1ZGUgImlvbW11LmgiCiAjaW5jbHVkZSAidnRkLmgiCkBAIC00OSw2ICs1MSw4IEBA IHN0cnVjdCBodm1faHdfdnZ0ZF9yZWdzIHsKIHN0cnVjdCB2dnRkIHsKICAgICAvKiBWSU9NTVVf U1RBVFVTX1hYWCAqLwogICAgIGludCBzdGF0dXM7CisgICAgLyogRmF1bHQgUmVjb3JkaW5nIGlu ZGV4ICovCisgICAgaW50IGZyY2RfaWR4OwogICAgIC8qIEFkZHJlc3MgcmFuZ2Ugb2YgcmVtYXBw aW5nIGhhcmR3YXJlIHJlZ2lzdGVyLXNldCAqLwogICAgIHVpbnQ2NF90IGJhc2VfYWRkcjsKICAg ICB1aW50NjRfdCBsZW5ndGg7CkBAIC05Nyw2ICsxMDEsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1 Y3QgdnZ0ZCAqdmNwdV92dnRkKHN0cnVjdCB2Y3B1ICp2KQogICAgIHJldHVybiBkb21haW5fdnZ0 ZCh2LT5kb21haW4pOwogfQogCitzdGF0aWMgaW5saW5lIGludCB2dnRkX3Rlc3RfYW5kX3NldF9i aXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHJlZywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbnIpCit7CisgICAgcmV0dXJuIHRlc3RfYW5kX3NldF9i aXQobnIsICh1aW50MzJfdCAqKSZ2dnRkLT5yZWdzLT5kYXRhW3JlZ10pOworfQorCitzdGF0aWMg aW5saW5lIGludCB2dnRkX3Rlc3RfYW5kX2NsZWFyX2JpdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWlu dDMyX3QgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IG5yKQoreworICAgIHJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQobnIsICh1aW50MzJfdCAqKSZ2 dnRkLT5yZWdzLT5kYXRhW3JlZ10pOworfQorCitzdGF0aWMgaW5saW5lIGludCB2dnRkX3Rlc3Rf Yml0KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCByZWcsIGludCBucikKK3sKKyAgICByZXR1 cm4gdGVzdF9iaXQobnIsICh1aW50MzJfdCAqKSZ2dnRkLT5yZWdzLT5kYXRhW3JlZ10pOworfQor CiBzdGF0aWMgaW5saW5lIHZvaWQgX192dnRkX3NldF9iaXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVp bnQzMl90IHJlZywgaW50IG5yKQogewogICAgIHJldHVybiBfX3NldF9iaXQobnIsICh1aW50MzJf dCAqKSZ2dnRkLT5yZWdzLT5kYXRhW3JlZ10pOwpAQCAtMjMyLDYgKzI1MywyNCBAQCBzdGF0aWMg aW50IHZ2dGRfZGVsaXZlcnkoCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgdnZ0ZF9nZW5lcmF0 ZV9pbnRlcnJ1cHQoc3RydWN0IHZ2dGQgKnZ2dGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IGRhdGEpCit7CisgICAgdWludDhfdCBkZXN0LCBkbSwgZGxtLCB0bSwgdmVjdG9yOworCisgICAg VlZURF9ERUJVRyhWVlREX0RCR19GQVVMVCwgIlNlbmRpbmcgaW50ZXJydXB0ICV4ICV4IHRvIGQl ZCIsCisgICAgICAgICAgICAgICBhZGRyLCBkYXRhLCB2dnRkLT5kb21haW4tPmRvbWFpbl9pZCk7 CisKKyAgICBkZXN0ID0gKGFkZHIgJiBNU0lfQUREUl9ERVNUX0lEX01BU0spID4+IE1TSV9BRERS X0RFU1RfSURfU0hJRlQ7CisgICAgZG0gPSAhIShhZGRyICYgTVNJX0FERFJfREVTVE1PREVfTUFT Syk7CisgICAgZGxtID0gKGRhdGEgJiBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX01BU0spID4+IE1T SV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQ7CisgICAgdG0gPSAoZGF0YSAmIE1TSV9EQVRBX1RS SUdHRVJfTUFTSykgPj4gTVNJX0RBVEFfVFJJR0dFUl9TSElGVDsKKyAgICB2ZWN0b3IgPSBkYXRh ICYgTVNJX0RBVEFfVkVDVE9SX01BU0s7CisKKyAgICB2dnRkX2RlbGl2ZXJ5KHZ2dGQtPmRvbWFp biwgdmVjdG9yLCBkZXN0LCBkbSwgZGxtLCB0bSk7Cit9CisKIHN0YXRpYyB1aW50MzJfdCBpcnFf cmVtYXBwaW5nX3JlcXVlc3RfaW5kZXgoc3RydWN0IGlycV9yZW1hcHBpbmdfcmVxdWVzdCAqaXJx KQogewogICAgIGlmICggaXJxLT50eXBlID09IFZJT01NVV9SRVFVRVNUX0lSUV9NU0kgKQpAQCAt MjYwLDExICsyOTksMTg5IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaXJ0ZV9kZXN0KHN0cnVj dCB2dnRkICp2dnRkLCB1aW50MzJfdCBkZXN0KQogICAgIHJldHVybiBETUFfSVJUQV9FSU1FKGly dGEpID8gZGVzdCA6IE1BU0tfRVhUUihkZXN0LCBJUlRFX3hBUElDX0RFU1RfTUFTSyk7CiB9CiAK K3N0YXRpYyB2b2lkIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVsdChzdHJ1Y3QgdnZ0 ZCAqdnZ0ZCwgaW50IHJlYXNvbikKK3sKKyAgICB1aW50MzJfdCBmc3RzOworCisgICAgQVNTRVJU KHJlYXNvbiAmIERNQV9GU1RTX0ZBVUxUUyk7CisgICAgZnN0cyA9IHZ2dGRfZ2V0X3JlZyh2dnRk LCBETUFSX0ZTVFNfUkVHKTsKKyAgICBfX3Z2dGRfc2V0X2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVH LCByZWFzb24pOworCisgICAgLyoKKyAgICAgKiBBY2Nvcm9kaW5nIHRvIFZULWQgc3BlYyAiTm9u LVJlY292ZXJhYmxlIEZhdWx0IEV2ZW50IiBjaGFwdGVyLCBpZgorICAgICAqIHRoZXJlIGFyZSBh bnkgcHJldmlvdXNseSByZXBvcnRlZCBpbnRlcnJ1cHQgY29uZGl0aW9ucyB0aGF0IGFyZSB5ZXQg dG8KKyAgICAgKiBiZSBzZXZpY2VzIGJ5IHNvZnR3YXJlLCB0aGUgRmF1bHQgRXZlbnQgaW50ZXJy cnVwdCBpcyBub3QgZ2VuZXJhdGVkLgorICAgICAqLworICAgIGlmICggZnN0cyAmIERNQV9GU1RT X0ZBVUxUUyApCisgICAgICAgIHJldHVybjsKKworICAgIF9fdnZ0ZF9zZXRfYml0KHZ2dGQsIERN QVJfRkVDVExfUkVHLCBETUFfRkVDVExfSVBfQklUKTsKKyAgICBpZiAoICF2dnRkX3Rlc3RfYml0 KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBETUFfRkVDVExfSU1fQklUKSApCisgICAgeworICAgICAg ICB1aW50MzJfdCBmZV9kYXRhLCBmZV9hZGRyOworICAgICAgICBmZV9kYXRhID0gdnZ0ZF9nZXRf cmVnKHZ2dGQsIERNQVJfRkVEQVRBX1JFRyk7CisgICAgICAgIGZlX2FkZHIgPSB2dnRkX2dldF9y ZWcodnZ0ZCwgRE1BUl9GRUFERFJfUkVHKTsKKyAgICAgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1 cHQodnZ0ZCwgZmVfYWRkciwgZmVfZGF0YSk7CisgICAgICAgIF9fdnZ0ZF9jbGVhcl9iaXQodnZ0 ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9CSVQpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgdnZ0ZF9yZWNvbXB1dGluZ19wcGYoc3RydWN0IHZ2dGQgKnZ2dGQpCit7CisgICAgaW50 IGk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IERNQV9GUkNEX1JFR19OUjsgaSsrICkKKyAgICB7 CisgICAgICAgIGlmICggdnZ0ZF90ZXN0X2JpdCh2dnRkLCBETUFfRlJDRChpLCBETUFfRlJDRDNf T0ZGU0VUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GUkNEX0ZfQklUKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVsdCh2 dnRkLCBETUFfRlNUU19QUEZfQklUKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor ICAgIH0KKyAgICAvKgorICAgICAqIE5vIFByaW1hcnkgRmF1bHQgaXMgaW4gRmF1bHQgUmVjb3Jk IFJlZ2lzdGVycywgdGh1cyBjbGVhciBQUEYgYml0IGluCisgICAgICogRlNUUy4KKyAgICAgKi8K KyAgICBfX3Z2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRlNUU19SRUcsIERNQV9GU1RTX1BQRl9C SVQpOworCisgICAgLyogSWYgbm8gZmF1bHQgaXMgaW4gRlNUUywgY2xlYXIgcGVuZGluZyBiaXQg aW4gRkVDVEwuICovCisgICAgaWYgKCAhKHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZTVFNfUkVH KSAmIERNQV9GU1RTX0ZBVUxUUykgKQorICAgICAgICBfX3Z2dGRfY2xlYXJfYml0KHZ2dGQsIERN QVJfRkVDVExfUkVHLCBETUFfRkVDVExfSVBfQklUKTsKK30KKworLyoKKyAqIENvbW1pdCBhIGZy Y2QgdG8gZW11bGF0ZWQgRmF1bHQgUmVjb3JkIFJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQg dnZ0ZF9jb21taXRfZnJjZChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgaW50IGlkeCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHZ0ZF9mYXVsdF9yZWNvcmRfcmVnaXN0ZXIgKmZyY2Qp Cit7CisgICAgdnZ0ZF9zZXRfcmVnX3F1YWQodnZ0ZCwgRE1BX0ZSQ0QoaWR4LCBETUFfRlJDRDBf T0ZGU0VUKSwgZnJjZC0+Yml0cy5sbyk7CisgICAgdnZ0ZF9zZXRfcmVnX3F1YWQodnZ0ZCwgRE1B X0ZSQ0QoaWR4LCBETUFfRlJDRDJfT0ZGU0VUKSwgZnJjZC0+Yml0cy5oaSk7CisgICAgdnZ0ZF9y ZWNvbXB1dGluZ19wcGYodnZ0ZCk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIEZSQ0QgZm9yIHRo ZSBjYWxsZXIuIElmIHN1Y2Nlc3MsIHJldHVybiB0aGUgRlJJLiBPciwgcmV0dXJuIC0xCisgKiB3 aGVuIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdnZ0ZF9hbGxvY19mcmNkKHN0cnVjdCB2dnRk ICp2dnRkKQoreworICAgIGludCBwcmV2OworCisgICAgLyogU2V0IHRoZSBGIGJpdCB0byBpbmRp Y2F0ZSB0aGUgRlJDRCBpcyBpbiB1c2UuICovCisgICAgaWYgKCB2dnRkX3Rlc3RfYW5kX3NldF9i aXQodnZ0ZCwgRE1BX0ZSQ0QodnZ0ZC0+ZnJjZF9pZHgsIERNQV9GUkNEM19PRkZTRVQpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GUkNEX0ZfQklUKSApCisgICAgeworICAg ICAgICBwcmV2ID0gdnZ0ZC0+ZnJjZF9pZHg7CisgICAgICAgIHZ2dGQtPmZyY2RfaWR4ID0gKHBy ZXYgKyAxKSAlIERNQV9GUkNEX1JFR19OUjsKKyAgICAgICAgcmV0dXJuIHZ2dGQtPmZyY2RfaWR4 OworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHZ2dGRfZnJlZV9mcmNk KHN0cnVjdCB2dnRkICp2dnRkLCBpbnQgaSkKK3sKKyAgICBfX3Z2dGRfY2xlYXJfYml0KHZ2dGQs IERNQV9GUkNEKGksIERNQV9GUkNEM19PRkZTRVQpLCBETUFfRlJDRF9GX0JJVCk7Cit9CisKIHN0 YXRpYyBpbnQgdnZ0ZF9yZWNvcmRfZmF1bHQoc3RydWN0IHZ2dGQgKnZ2dGQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcnFfcmVtYXBwaW5nX3JlcXVlc3QgKmlycSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlycV9yZW1hcHBpbmdfcmVxdWVzdCAq cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlYXNvbikKIHsKLSAg ICByZXR1cm4gMDsKKyAgICBzdHJ1Y3QgdnRkX2ZhdWx0X3JlY29yZF9yZWdpc3RlciBmcmNkOwor ICAgIGludCBmcmNkX2lkeDsKKworICAgIHN3aXRjaChyZWFzb24pCisgICAgeworICAgIGNhc2Ug VlREX0ZSX0lSX1JFUV9SU1ZEOgorICAgIGNhc2UgVlREX0ZSX0lSX0lOREVYX09WRVI6CisgICAg Y2FzZSBWVERfRlJfSVJfRU5UUllfUDoKKyAgICBjYXNlIFZURF9GUl9JUl9ST09UX0lOVkFMOgor ICAgIGNhc2UgVlREX0ZSX0lSX0lSVEVfUlNWRDoKKyAgICBjYXNlIFZURF9GUl9JUl9SRVFfQ09N UEFUOgorICAgIGNhc2UgVlREX0ZSX0lSX1NJRF9FUlI6CisgICAgICAgIGlmICggdnZ0ZF90ZXN0 X2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19QRk9fQklUKSApCisgICAgICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgICAgIC8qIE5vIGF2YWlsYWJsZSBGYXVsdCBS ZWNvcmQgbWVhbnMgRmF1bHQgb3ZlcmZsb3dlZCAqLworICAgICAgICBmcmNkX2lkeCA9IHZ2dGRf YWxsb2NfZnJjZCh2dnRkKTsKKyAgICAgICAgaWYgKCBmcmNkX2lkeCA9PSAtMSApCisgICAgICAg IHsKKyAgICAgICAgICAgIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVsdCh2dnRkLCBE TUFfRlNUU19QRk9fQklUKTsKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAg ICAgIH0KKyAgICAgICAgbWVtc2V0KCZmcmNkLCAwLCBzaXplb2YoZnJjZCkpOworICAgICAgICBm cmNkLmZpZWxkcy5GUiA9ICh1OClyZWFzb247CisgICAgICAgIGZyY2QuZmllbGRzLkZJID0gKCh1 NjQpaXJxX3JlbWFwcGluZ19yZXF1ZXN0X2luZGV4KHJlcXVlc3QpKSA8PCAzNjsKKyAgICAgICAg ZnJjZC5maWVsZHMuU0lEID0gKHUxNilyZXF1ZXN0LT5zb3VyY2VfaWQ7CisgICAgICAgIGZyY2Qu ZmllbGRzLkYgPSAxOworICAgICAgICB2dnRkX2NvbW1pdF9mcmNkKHZ2dGQsIGZyY2RfaWR4LCAm ZnJjZCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBkZWZhdWx0OgorICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBnZHByaW50ayhYRU5MT0dfRVJSLCAiQ2FuJ3QgaGFu ZGxlIHZWVEQgRmF1bHQgKHJlYXNvbiAweCV4KS4iLCByZWFzb24pOworICAgIGRvbWFpbl9jcmFz aCh2dnRkLT5kb21haW4pOworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBp bnQgdnZ0ZF93cml0ZV9mcmNkMyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQorewor ICAgIC8qIFdyaXRpbmcgYSAxIG1lYW5zIGNsZWFyIGZhdWx0ICovCisgICAgaWYgKCB2YWwgJiBE TUFfRlJDRF9GICkKKyAgICB7CisgICAgICAgIHZ2dGRfZnJlZV9mcmNkKHZ2dGQsIDApOworICAg ICAgICB2dnRkX3JlY29tcHV0aW5nX3BwZih2dnRkKTsKKyAgICB9CisgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKK30KKworc3RhdGljIGludCB2dnRkX3dyaXRlX2ZlY3RsKHN0cnVjdCB2dnRkICp2 dnRkLCB1aW50MzJfdCB2YWwpCit7CisgICAgLyoKKyAgICAgKiBPbmx5IERNQV9GRUNUTF9JTSBi aXQgaXMgd3JpdGFibGUuIEdlbmVyYXRlIHBlbmRpbmcgZXZlbnQgd2hlbiB1bm1hc2suCisgICAg ICovCisgICAgaWYgKCAhKHZhbCAmIERNQV9GRUNUTF9JTSkgKQorICAgIHsKKyAgICAgICAgLyog Q2xlYXIgSU0gKi8KKyAgICAgICAgX192dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JF RywgRE1BX0ZFQ1RMX0lNX0JJVCk7CisgICAgICAgIGlmICggdnZ0ZF90ZXN0X2FuZF9jbGVhcl9i aXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9CSVQpICkKKyAgICAgICAgewor ICAgICAgICAgICAgdWludDMyX3QgZmVfZGF0YSwgZmVfYWRkcjsKKyAgICAgICAgICAgIGZlX2Rh dGEgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GRURBVEFfUkVHKTsKKyAgICAgICAgICAgIGZl X2FkZHIgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GRUFERFJfUkVHKTsKKyAgICAgICAgICAg IHZ2dGRfZ2VuZXJhdGVfaW50ZXJydXB0KHZ2dGQsIGZlX2FkZHIsIGZlX2RhdGEpOworICAgICAg ICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgX192dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9G RUNUTF9SRUcsIERNQV9GRUNUTF9JTV9CSVQpOworCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK K30KKworc3RhdGljIGludCB2dnRkX3dyaXRlX2ZzdHMoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQz Ml90IHZhbCkKK3sKKyAgICBpbnQgaSwgbWF4X2ZhdWx0X2luZGV4ID0gRE1BX0ZTVFNfUFJPX0JJ VDsKKyAgICB1aW50NjRfdCBiaXRzX3RvX2NsZWFyID0gdmFsICYgRE1BX0ZTVFNfUlcxQ1M7CisK KyAgICBpID0gZmluZF9maXJzdF9iaXQoJmJpdHNfdG9fY2xlYXIsIG1heF9mYXVsdF9pbmRleCAv IDggKyAxKTsKKyAgICB3aGlsZSAoIGkgPD0gbWF4X2ZhdWx0X2luZGV4ICkKKyAgICB7CisgICAg ICAgIF9fdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JFRywgaSk7CisgICAgICAgIGkg PSBmaW5kX25leHRfYml0KCZiaXRzX3RvX2NsZWFyLCBtYXhfZmF1bHRfaW5kZXggLyA4ICsgMSwg aSArIDEpOworICAgIH0KKworICAgIC8qCisgICAgICogQ2xlYXIgSVAgZmllbGQgd2hlbiBhbGwg c3RhdHVzIGZpZWxkcyBpbiB0aGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogYmVpbmcg Y2xlYXIuCisgICAgICovCisgICAgaWYgKCAhKCh2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GU1RT X1JFRykgJiBETUFfRlNUU19GQVVMVFMpKSApCisgICAgICAgIF9fdnZ0ZF9jbGVhcl9iaXQodnZ0 ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9CSVQpOworCisgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKIH0KIAogc3RhdGljIGludCB2dnRkX2hhbmRsZV9nY21kX3FpZShzdHJ1Y3QgdnZ0 ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQpAQCAtNDEwLDYgKzYyNywxOCBAQCBzdGF0aWMgaW50IHZ2 dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgICAg IHJldCA9IHZ2dGRfd3JpdGVfZ2NtZCh2dnRkLCB2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAK KyAgICAgICAgY2FzZSBETUFSX0ZTVFNfUkVHOgorICAgICAgICAgICAgcmV0ID0gdnZ0ZF93cml0 ZV9mc3RzKHZ2dGQsIHZhbCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERN QVJfRkVDVExfUkVHOgorICAgICAgICAgICAgcmV0ID0gdnZ0ZF93cml0ZV9mZWN0bCh2dnRkLCB2 YWwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBETUFfQ0FQX0ZST19PRkZT RVQgKyBETUFfRlJDRDNfT0ZGU0VUOgorICAgICAgICAgICAgcmV0ID0gdnZ0ZF93cml0ZV9mcmNk Myh2dnRkLCB2YWwpOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBETUFSX0lF REFUQV9SRUc6CiAgICAgICAgIGNhc2UgRE1BUl9JRUFERFJfUkVHOgogICAgICAgICBjYXNlIERN QVJfSUVVQUREUl9SRUc6CkBAIC00MzUsNiArNjY0LDEwIEBAIHN0YXRpYyBpbnQgdnZ0ZF93cml0 ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgcmV0ID0g WDg2RU1VTF9PS0FZOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBETUFfQ0FQ X0ZST19PRkZTRVQgKyBETUFfRlJDRDJfT0ZGU0VUOgorICAgICAgICAgICAgcmV0ID0gdnZ0ZF93 cml0ZV9mcmNkMyh2dnRkLCB2YWwgPj4gMzIpOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAg ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOwogICAg ICAgICAgICAgYnJlYWs7CkBAIC02NDksNiArODgyLDcgQEAgc3RhdGljIGludCB2dnRkX2NyZWF0 ZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlvbW11ICp2aW9tbXUpCiAgICAgdnZ0ZC0+ZWlt ID0gMDsKICAgICB2dnRkLT5pcnQgPSAwOwogICAgIHZ2dGQtPmlydF9tYXhfZW50cnkgPSAwOwor ICAgIHZ2dGQtPmZyY2RfaWR4ID0gMDsKICAgICByZWdpc3Rlcl9tbWlvX2hhbmRsZXIoZCwgJnZ2 dGRfbW1pb19vcHMpOwogICAgIHJldHVybiAwOwogCi0tIAoxLjguMy4xCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==