From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: [PATCH v4 16/28] x86/vvtd: Add queued invalidation (QI) support Date: Fri, 17 Nov 2017 14:22:23 +0800 Message-ID: <1510899755-40237-17-git-send-email-chao.gao@intel.com> References: <1510899755-40237-1-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1510899755-40237-1-git-send-email-chao.gao@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 , Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Ian Jackson , Tim Deegan , Jan Beulich , Andrew Cooper , Chao Gao , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org UXVldWVkIEludmFsaWRhdGlvbiBJbnRlcmZhY2UgaXMgYW4gZXhwYW5kZWQgaW52YWxpZGF0aW9u IGludGVyZmFjZSB3aXRoCmV4dGVuZGVkIGNhcGFiaWxpdGllcy4gSGFyZHdhcmUgaW1wbGVtZW50 YXRpb25zIHJlcG9ydCBzdXBwb3J0IGZvciBxdWV1ZWQKaW52YWxpZGF0aW9uIGludGVyZmFjZSB0 aHJvdWdoIHRoZSBFeHRlbmRlZCBDYXBhYmlsaXR5IFJlZ2lzdGVyLiBUaGUgcXVldWVkCmludmFs aWRhdGlvbiBpbnRlcmZhY2UgdXNlcyBhbiBJbnZhbGlkYXRpb24gUXVldWUgKElRKSwgd2hpY2gg aXMgYSBjaXJjdWxhcgpidWZmZXIgaW4gc3lzdGVtIG1lbW9yeS4gU29mdHdhcmUgc3VibWl0cyBj b21tYW5kcyBieSB3cml0aW5nIEludmFsaWRhdGlvbgpEZXNjcmlwdG9ycyB0byB0aGUgSVEuCgpJ biB0aGlzIHBhdGNoLCBhIG5ldyBmdW5jdGlvbiB2aW9tbXVfcHJvY2Vzc19pcSgpIGlzIHVzZWQg Zm9yIGVtdWxhdGluZyBob3cKaGFyZHdhcmUgaGFuZGxlcyBpbnZhbGlkYXRpb24gcmVxdWVzdHMg dGhyb3VnaCBRSS4KClNpZ25lZC1vZmYtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5jb20+ ClNpZ25lZC1vZmYtYnk6IExhbiBUaWFueXUgPHRpYW55dS5sYW5AaW50ZWwuY29tPgoKLS0tCnY0 OgogLSBJbnRyb2R1Y2UgYSBsb2NrIHRvIHByb3RlY3QgaW52YWxpZGF0aW9uIHJlbGF0ZWQgcmVn aXN0ZXJzLgotLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oIHwgIDI0ICsr Ky0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMgIHwgMjcxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAyOTMgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvaW9tbXUuaCBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oCmluZGV4 IGI3MWRhYjguLmRlOTE4OGIgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pb21tdS5oCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oCkBAIC00 Nyw3ICs0NywxMiBAQAogI2RlZmluZSBETUFSX0lRSF9SRUcgICAgICAgICAgICAweDgwIC8qIGlu dmFsaWRhdGlvbiBxdWV1ZSBoZWFkICovCiAjZGVmaW5lIERNQVJfSVFUX1JFRyAgICAgICAgICAg IDB4ODggLyogaW52YWxpZGF0aW9uIHF1ZXVlIHRhaWwgKi8KICNkZWZpbmUgRE1BUl9JUUFfUkVH ICAgICAgICAgICAgMHg5MCAvKiBpbnZhbGlkYXRpb24gcXVldWUgYWRkciAqLworI2RlZmluZSBE TUFSX0lRVUFfUkVHICAgICAgICAgICAweDk0IC8qIGludmFsaWRhdGlvbiBxdWV1ZSB1cHBlciBh ZGRyICovCisjZGVmaW5lIERNQVJfSUNTX1JFRyAgICAgICAgICAgIDB4OWMgLyogaW52YWxpZGF0 aW9uIGNvbXBsZXRpb24gc3RhdHVzICovCiAjZGVmaW5lIERNQVJfSUVDVExfUkVHICAgICAgICAg IDB4YTAgLyogaW52YWxpZGF0aW9uIGV2ZW50IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUg RE1BUl9JRURBVEFfUkVHICAgICAgICAgMHhhNCAvKiBpbnZhbGlkYXRpb24gZXZlbnQgZGF0YSBy ZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lFQUREUl9SRUcgICAgICAgICAweGE4IC8qIGludmFs aWRhdGlvbiBldmVudCBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIERNQVJfSUVVQUREUl9S RUcgICAgICAgIDB4YWMgLyogdXBwZXIgYWRkcmVzcyByZWdpc3RlciAqLwogI2RlZmluZSBETUFS X0lSVEFfUkVHICAgICAgICAgICAweGI4IC8qIGJhc2UgYWRkcmVzcyBvZiBpbnRyIHJlbWFwIHRh YmxlICovCiAjZGVmaW5lIERNQVJfSVJUVUFfUkVHICAgICAgICAgIDB4YmMgLyogdXBwZXIgYWRk cmVzcyBvZiBpbnRyIHJlbWFwIHRhYmxlICovCiAKQEAgLTE3NSw2ICsxODAsMjEgQEAKICNkZWZp bmUgRE1BX0lSVEFfUyh2YWwpICAgICAgICAgKHZhbCAmIDB4ZikKICNkZWZpbmUgRE1BX0lSVEFf U0laRSh2YWwpICAgICAgKDFVTCA8PCAoRE1BX0lSVEFfUyh2YWwpICsgMSkpCiAKKy8qIElRQV9S RUcgKi8KKyNkZWZpbmUgRE1BX0lRQV9BRERSKHZhbCkgICAgICAgKHZhbCAmIH4weGZmZlVMTCkK KyNkZWZpbmUgRE1BX0lRQV9RUyh2YWwpICAgICAgICAgKHZhbCAmIDB4NykKKyNkZWZpbmUgRE1B X0lRQV9SU1ZEICAgICAgICAgICAgMHhmZjhVTEwKKworLyogSUVDVExfUkVHICovCisjZGVmaW5l IERNQV9JRUNUTF9JTV9TSElGVCAzMQorI2RlZmluZSBETUFfSUVDVExfSU0gICAgICAgICAgICAo MVUgPDwgRE1BX0lFQ1RMX0lNX1NISUZUKQorI2RlZmluZSBETUFfSUVDVExfSVBfU0hJRlQgMzAK KyNkZWZpbmUgRE1BX0lFQ1RMX0lQICAgICAgICAgICAgKDFVIDw8IERNQV9JRUNUTF9JUF9TSElG VCkKKworLyogSUNTX1JFRyAqLworI2RlZmluZSBETUFfSUNTX0lXQ19TSElGVCAgICAgICAwCisj ZGVmaW5lIERNQV9JQ1NfSVdDICAgICAgICAgICAgICgxVSA8PCBETUFfSUNTX0lXQ19TSElGVCkK KwogLyogUE1FTl9SRUcgKi8KICNkZWZpbmUgRE1BX1BNRU5fRVBNICAgICgoKHUzMikxKSA8PCAz MSkKICNkZWZpbmUgRE1BX1BNRU5fUFJTICAgICgoKHUzMikxKSA8PCAwKQpAQCAtMjA1LDEzICsy MjUsMTQgQEAKIC8qIEZTVFNfUkVHICovCiAjZGVmaW5lIERNQV9GU1RTX1BGT19TSElGVCAgMAog I2RlZmluZSBETUFfRlNUU19QUEZfU0hJRlQgIDEKKyNkZWZpbmUgRE1BX0ZTVFNfSVFFX1NISUZU ICA0CiAjZGVmaW5lIERNQV9GU1RTX1BST19TSElGVCAgNwogCiAjZGVmaW5lIERNQV9GU1RTX1BG TyAgICAgICAgKCh1aW50MzJfdCkxIDw8IERNQV9GU1RTX1BGT19TSElGVCkKICNkZWZpbmUgRE1B X0ZTVFNfUFBGICAgICAgICAoKHVpbnQzMl90KTEgPDwgRE1BX0ZTVFNfUFBGX1NISUZUKQogI2Rl ZmluZSBETUFfRlNUU19BRk8gICAgICAgICgodWludDMyX3QpMSA8PCAyKQogI2RlZmluZSBETUFf RlNUU19BUEYgICAgICAgICgodWludDMyX3QpMSA8PCAzKQotI2RlZmluZSBETUFfRlNUU19JUUUg ICAgICAgICgodWludDMyX3QpMSA8PCA0KQorI2RlZmluZSBETUFfRlNUU19JUUUgICAgICAgICgo dWludDMyX3QpMSA8PCBETUFfRlNUU19JUUVfU0hJRlQpCiAjZGVmaW5lIERNQV9GU1RTX0lDRSAg ICAgICAgKCh1aW50MzJfdCkxIDw8IDUpCiAjZGVmaW5lIERNQV9GU1RTX0lURSAgICAgICAgKCh1 aW50MzJfdCkxIDw8IDYpCiAjZGVmaW5lIERNQV9GU1RTX1BSTyAgICAgICAgKCh1aW50MzJfdCkx IDw8IERNQV9GU1RTX1BST19TSElGVCkKQEAgLTU1NSw2ICs1NzYsNyBAQCBzdHJ1Y3QgcWludmFs X2VudHJ5IHsKIAogLyogUXVldWUgaW52YWxpZGF0aW9uIGhlYWQvdGFpbCBzaGlmdCAqLwogI2Rl ZmluZSBRSU5WQUxfSU5ERVhfU0hJRlQgNAorI2RlZmluZSBRSU5WQUxfSU5ERVhfTUFTSyAgMHg3 ZmZmMFVMTAogCiAjZGVmaW5lIHFpbnZhbF9wcmVzZW50KHYpICgodikubG8gJiAxKQogI2RlZmlu ZSBxaW52YWxfZmF1bHRfZGlzYWJsZSh2KSAoKCh2KS5sbyA+PiAxKSAmIDEpCmRpZmYgLS1naXQg YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvdnRkL3Z2dGQuYwppbmRleCBhMmZhNjRhLi44MTE3MGVjIDEwMDY0NAotLS0gYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3Z0ZC92dnRkLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vZXZlbnQuaD4K ICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9odm0vZG9tYWluLmg+Cisj aW5jbHVkZSA8YXNtL2h2bS9zdXBwb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL3AybS5oPgogCiAjaW5j bHVkZSAiaW9tbXUuaCIKQEAgLTY4LDYgKzY5LDkgQEAgc3RydWN0IHZ2dGQgewogCiAgICAgc3Ry dWN0IGh2bV9od192dnRkIGh3OwogICAgIHZvaWQgKmlydF9iYXNlOworICAgIHZvaWQgKmludl9x dWV1ZV9iYXNlOworICAgIC8qIFRoaXMgbG9jayBwcm90ZWN0cyBpbnZhbGlkYXRpb24gcmVsYXRl ZCByZWdpc3RlcnMgKi8KKyAgICBzcGlubG9ja190IGllX2xvY2s7CiB9OwogCiAvKiBTZXR0aW5n IHZpb21tdV92ZXJib3NlIGVuYWJsZXMgZGVidWdnaW5nIG1lc3NhZ2VzIG9mIHZJT01NVSAqLwpA QCAtMjg0LDYgKzI4OCwxMiBAQCBzdGF0aWMgdm9pZCB2dnRkX25vdGlmeV9mYXVsdChjb25zdCBz dHJ1Y3QgdnZ0ZCAqdnZ0ZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dnRkX2dldF9y ZWcodnZ0ZCwgRE1BUl9GRURBVEFfUkVHKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZ2dGRfbm90aWZ5 X2ludl9jb21wbGV0aW9uKGNvbnN0IHN0cnVjdCB2dnRkICp2dnRkKQoreworICAgIHZ2dGRfZ2Vu ZXJhdGVfaW50ZXJydXB0KHZ2dGQsIHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSUVBRERS X1JFRyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZ0ZF9nZXRfcmVnKHZ2dGQsIERN QVJfSUVEQVRBX1JFRykpOworfQorCiAvKiBDb21wdXRpbmcgdGhlIElSVEUgaW5kZXggZm9yIGEg Z2l2ZW4gaW50ZXJydXB0IHJlcXVlc3QuIFdoZW4gc3VjY2VzcywgcmV0dXJuCiAgKiAwIGFuZCBz ZXQgaW5kZXggdG8gcmVmZXJlbmNlIHRoZSBjb3JyZXNwb25kaW5nIElSVEUuIE90aGVyd2lzZSwg cmV0dXJuIDwgMCwKICAqIGkuZS4gLTEgd2hlbiB0aGUgaXJxIHJlcXVlc3QgaXNuJ3QgYW4gcmVt YXBwaW5nIGZvcm1hdC4KQEAgLTQ3OCw2ICs0ODgsMTg5IEBAIHN0YXRpYyBpbnQgdnZ0ZF9yZWNv cmRfZmF1bHQoc3RydWN0IHZ2dGQgKnZ2dGQsCiAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIH0K IAorLyoKKyAqIFByb2Nlc3MgYW4gaW52YWxpZGF0aW9uIGRlc2NyaXB0b3IuIEN1cnJlbnRseSwg b25seSB0d28gdHlwZXMgZGVzY3JpcHRvcnMsCisgKiBJbnRlcnJ1cHQgRW50cnkgQ2FjaGUgSW52 YWxpZGF0aW9uIERlc2NyaXRvciBhbmQgSW52YWxpZGF0aW9uIFdhaXQKKyAqIERlc2NyaXB0b3Ig YXJlIGhhbmRsZWQuCisgKiBAdnZ0ZDogdGhlIHZpcnR1YWwgdnRkIGluc3RhbmNlCisgKiBAaTog dGhlIGluZGV4IG9mIHRoZSBpbnZhbGlkYXRpb24gZGVzY3JpcHRvciB0byBiZSBwcm9jZXNzZWQK KyAqCisgKiBJZiBzdWNjZXNzIHJldHVybiAwLCBvciByZXR1cm4gbm9uLXplcm8gd2hlbiBmYWls dXJlLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfaXFlKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50 MzJfdCBpKQoreworICAgIHN0cnVjdCBxaW52YWxfZW50cnkgcWludmFsOworICAgIGludCByZXQg PSAwOworCisgICAgaWYgKCAhdnZ0ZC0+aW52X3F1ZXVlX2Jhc2UgKQorICAgIHsKKyAgICAgICAg Z2RwcmludGsoWEVOTE9HX0VSUiwgIkludmFsaWRhdGlvbiBxdWV1ZSBiYXNlIGlzbid0IHNldFxu Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcWludmFsID0gKChzdHJ1Y3QgcWlu dmFsX2VudHJ5ICopdnZ0ZC0+aW52X3F1ZXVlX2Jhc2UpW2ldOworCisgICAgc3dpdGNoICggcWlu dmFsLnEuaW52X3dhaXRfZHNjLmxvLnR5cGUgKQorICAgIHsKKyAgICBjYXNlIFRZUEVfSU5WQUxf V0FJVDoKKyAgICAgICAgaWYgKCBxaW52YWwucS5pbnZfd2FpdF9kc2MubG8uc3cgKQorICAgICAg ICB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gcWludmFsLnEuaW52X3dhaXRfZHNjLmxv LnNkYXRhOworICAgICAgICAgICAgdWludDY0X3QgYWRkciA9IHFpbnZhbC5xLmludl93YWl0X2Rz Yy5oaS5zYWRkciA8PCAyOworCisgICAgICAgICAgICByZXQgPSBodm1fY29weV90b19ndWVzdF9w aHlzKGFkZHIsICZkYXRhLCBzaXplb2YoZGF0YSksIGN1cnJlbnQpOworICAgICAgICAgICAgaWYg KCByZXQgKQorICAgICAgICAgICAgICAgIHZ2dGRfaW5mbygiRmFpbGVkIHRvIHdyaXRlIHN0YXR1 cyBhZGRyZXNzXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBm b2xsb3dpbmcgY29kZSBnZW5lcmF0ZXMgYW4gaW52YWxpZGF0aW9uIGNvbXBsZXRpb24gZXZlbnQK KyAgICAgICAgICogaW5kaWNhdGluZyB0aGUgaW52YWxpZGF0aW9uIHdhaXQgZGVzY3JpcHRvciBj b21wbGV0aW9uLiBOb3RlIHRoYXQKKyAgICAgICAgICogdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdt ZW50IGlzIG5vdCB0ZXN0ZWQgcHJvcGVybHkuCisgICAgICAgICAqLworICAgICAgICBpZiAoIHFp bnZhbC5xLmludl93YWl0X2RzYy5sby5pZmxhZyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm ICggIXZ2dGRfdGVzdF9hbmRfc2V0X2JpdCh2dnRkLCBETUFSX0lDU19SRUcsIERNQV9JQ1NfSVdD X1NISUZUKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdnZ0ZF9zZXRfYml0KHZ2 dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOworICAgICAgICAgICAgICAg IGlmICggIXZ2dGRfdGVzdF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JTV9T SElGVCkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdnZ0ZF9ub3Rp ZnlfaW52X2NvbXBsZXRpb24odnZ0ZCk7CisgICAgICAgICAgICAgICAgICAgIHZ2dGRfY2xlYXJf Yml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg IGNhc2UgVFlQRV9JTlZBTF9JRUM6CisgICAgICAgIC8qIE5vIGNhY2hlIGlzIHByZXNlcnZlZCBp biB2dnRkLCBub3RoaW5nIGlzIG5lZWRlZCB0byBiZSBmbHVzaGVkICovCisgICAgICAgIGJyZWFr OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgdnZ0ZF9kZWJ1ZygiZCVkOiBJbnZhbGlkYXRpb24g dHlwZSAoJXgpIGlzbid0IHN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICB2dnRkLT5k b21haW4tPmRvbWFpbl9pZCwgcWludmFsLnEuaW52X3dhaXRfZHNjLmxvLnR5cGUpOworICAgICAg ICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEludmFs aWRhdGUgYWxsIHRoZSBkZXNjcmlwdG9ycyBpbiBJbnZhbGlkYXRpb24gUXVldWUuCisgKi8KK3N0 YXRpYyB2b2lkIHZ2dGRfcHJvY2Vzc19pcShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCkKK3sKKyAgICB1aW50 MzJfdCBtYXhfZW50cnksIGksIGlxaCwgaXF0OworICAgIGludCBlcnIgPSAwOworCisgICAgLyog VHJ5bG9jayBhdm9pZHMgbW9yZSB0aGFuIDEgY2FsbGVyIGRlYWxpbmcgd2l0aCBpbnZhbGlkYXRp b24gcmVxdWVzdHMgKi8KKyAgICBpZiAoICFzcGluX3RyeWxvY2soJnZ2dGQtPmllX2xvY2spICkK KyAgICAgICAgcmV0dXJuOworCisgICAgaXFoID0gTUFTS19FWFRSKHZ2dGRfZ2V0X3JlZ19xdWFk KHZ2dGQsIERNQVJfSVFIX1JFRyksIFFJTlZBTF9JTkRFWF9NQVNLKTsKKyAgICBpcXQgPSBNQVNL X0VYVFIodnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUVRfUkVHKSwgUUlOVkFMX0lOREVY X01BU0spOworICAgIC8qCisgICAgICogTm8gbmV3IGRlc2NyaXB0b3IgaXMgZmV0Y2hlZCBmcm9t IHRoZSBJbnZhbGlkYXRpb24gUXVldWUgdW50aWwKKyAgICAgKiBzb2Z0d2FyZSBjbGVhcnMgdGhl IElRRSBmaWVsZCBpbiB0aGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICovCisgICAgaWYg KCB2dnRkX3Rlc3RfYml0KHZ2dGQsIERNQVJfRlNUU19SRUcsIERNQV9GU1RTX0lRRV9TSElGVCkg KQorICAgIHsKKyAgICAgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmllX2xvY2spOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgbWF4X2VudHJ5ID0gMSA8PCAoUUlOVkFMX0VOVFJZX09SREVS ICsKKyAgICAgICAgICAgICAgICAgICAgICBETUFfSVFBX1FTKHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2 dGQsIERNQVJfSVFBX1JFRykpKTsKKworICAgIEFTU0VSVChpcXQgPCBtYXhfZW50cnkpOworICAg IGlmICggaXFoID09IGlxdCApCisgICAgeworICAgICAgICBzcGluX3VubG9jaygmdnZ0ZC0+aWVf bG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gaXFoOyBpICE9 IGlxdDsgaSA9IChpICsgMSkgJSBtYXhfZW50cnkgKQorICAgIHsKKyAgICAgICAgZXJyID0gcHJv Y2Vzc19pcWUodnZ0ZCwgaSk7CisgICAgICAgIGlmICggZXJyICkKKyAgICAgICAgICAgIGJyZWFr OworICAgIH0KKworICAgIC8qCisgICAgICogc2V0IElRSCBiZWZvcmUgY2hlY2tpbmcgZXJyb3Is IGJlY2F1c2UgSVFIIHNob3VsZCByZWZlcmVuY2UKKyAgICAgKiB0aGUgZGVzcmlwdG9yIGFzc29j aWF0ZWQgd2l0aCB0aGUgZXJyb3Igd2hlbiBhbiBlcnJvciBpcyBzZWVuCisgICAgICogYnkgZ3Vl c3QKKyAgICAgKi8KKyAgICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRSF9SRUcsIGkg PDwgUUlOVkFMX0lOREVYX1NISUZUKTsKKworICAgIHNwaW5fdW5sb2NrKCZ2dnRkLT5pZV9sb2Nr KTsKKyAgICBpZiAoIGVyciApCisgICAgeworICAgICAgICBzcGluX2xvY2soJnZ2dGQtPmZlX2xv Y2spOworICAgICAgICB2dnRkX3JlcG9ydF9ub25fcmVjb3ZlcmFibGVfZmF1bHQodnZ0ZCwgRE1B X0ZTVFNfSVFFX1NISUZUKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmZlX2xvY2spOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgdnZ0ZF93cml0ZV9pcXQoc3RydWN0IHZ2dGQgKnZ2dGQs IHVpbnQzMl90IHZhbCkKK3sKKyAgICB1aW50MzJfdCBtYXhfZW50cnk7CisKKyAgICBpZiAoIHZh bCAmIH5RSU5WQUxfSU5ERVhfTUFTSyApCisgICAgeworICAgICAgICB2dnRkX2luZm8oImF0dGVt cHRzIHRvIHNldCByZXNlcnZlZCBiaXRzIGluIElRVFxuIik7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICBtYXhfZW50cnkgPSAxVSA8PCAoUUlOVkFMX0VOVFJZX09SREVSICsKKyAgICAg ICAgICAgICAgICAgICAgICAgRE1BX0lRQV9RUyh2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFS X0lRQV9SRUcpKSk7CisgICAgaWYgKCBNQVNLX0VYVFIodmFsLCBRSU5WQUxfSU5ERVhfTUFTSykg Pj0gbWF4X2VudHJ5ICkKKyAgICB7CisgICAgICAgIHZ2dGRfaW5mbygiSVFUOiBWYWx1ZSAleCBl eGNlZWRlZCBzdXBwb3J0ZWQgbWF4IGluZGV4LiIsIHZhbCk7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICB2dnRkX3NldF9yZWcodnZ0ZCwgRE1BUl9JUVRfUkVHLCB2YWwpOworfQorCitz dGF0aWMgdm9pZCB2dnRkX3dyaXRlX2lxYShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFs LCBib29sIGhpZ2gpCit7CisgICAgdWludDY0X3QgY2FwID0gdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0 ZCwgRE1BUl9DQVBfUkVHKTsKKyAgICB1aW50NjRfdCBvbGQgPSB2dnRkX2dldF9yZWdfcXVhZCh2 dnRkLCBETUFSX0lRQV9SRUcpOworICAgIHVpbnQ2NF90IG5ldzsKKworICAgIGlmICggaGlnaCAp CisgICAgICAgIG5ldyA9ICgodWludDY0X3QpdmFsIDw8IDMyKSB8IChvbGQgJiAweGZmZmZmZmZm KTsKKyAgICBlbHNlCisgICAgICAgIG5ldyA9ICgob2xkID4+IDMyKSA8PCAzMikgfCB2YWw7CisK KyAgICBpZiAoIG5ldyAmICh+KCgxVUxMIDw8IGNhcF9tZ2F3KGNhcCkpIC0gMSkgfCBETUFfSVFB X1JTVkQpICkKKyAgICB7CisgICAgICAgIHZ2dGRfaW5mbygiQXR0ZW1wdCB0byBzZXQgcmVzZXJ2 ZWQgYml0cyBpbiBJUUFcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdnZ0ZF9z ZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUFfUkVHLCBuZXcpOworICAgIGlmICggaGlnaCAmJiAh dnZ0ZC0+aW52X3F1ZXVlX2Jhc2UgKQorICAgICAgICB2dnRkLT5pbnZfcXVldWVfYmFzZSA9IG1h cF9ndWVzdF9wYWdlcyh2dnRkLT5kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBGTl9ET1dOKERNQV9JUUFfQUREUihuZXcpKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCBETUFfSVFBX1FTKG5l dykpOworICAgIGVsc2UgaWYgKCAhaGlnaCAmJiB2dnRkLT5pbnZfcXVldWVfYmFzZSApCisgICAg eworICAgICAgICB1bm1hcF9ndWVzdF9wYWdlcyh2dnRkLT5pbnZfcXVldWVfYmFzZSwgMSA8PCBE TUFfSVFBX1FTKG9sZCkpOworICAgICAgICB2dnRkLT5pbnZfcXVldWVfYmFzZSA9IE5VTEw7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2ljcyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwg dWludDMyX3QgdmFsKQoreworICAgIGlmICggdmFsICYgRE1BX0lDU19JV0MgKQorICAgIHsKKyAg ICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9JQ1NfUkVHLCBETUFfSUNTX0lXQ19TSElG VCk7CisgICAgICAgIC8qIFdoZW4gSVdDIGZpZWxkIGlzIGNsZWFyZWQsIHRoZSBJUCBmaWVsZCBu ZWVkcyB0byBiZSBjbGVhcmVkICovCisgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJf SUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOworICAgIH0KK30KKwogc3RhdGljIGludCB2 dnRkX3dyaXRlX2ZyY2QzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCiB7CiAgICAg LyogV3JpdGluZyBhIDEgbWVhbnMgY2xlYXIgZmF1bHQgKi8KQEAgLTQ4OSw2ICs2ODIsMjAgQEAg c3RhdGljIGludCB2dnRkX3dyaXRlX2ZyY2QzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2 YWwpCiAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIH0KIAorc3RhdGljIHZvaWQgdnZ0ZF93cml0 ZV9pZWN0bChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQoreworICAgIC8qIE9ubHkg RE1BX0lFQ1RMX0lNIGJpdCBpcyB3cml0YWJsZS4gR2VuZXJhdGUgcGVuZGluZyBldmVudCB3aGVu IHVubWFzayAqLworICAgIGlmICggISh2YWwgJiBETUFfSUVDVExfSU0pICkKKyAgICB7CisgICAg ICAgIC8qIENsZWFyIElNIGFuZCBjbGVhciBJUCAqLworICAgICAgICB2dnRkX2NsZWFyX2JpdCh2 dnRkLCBETUFSX0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lNX1NISUZUKTsKKyAgICAgICAgaWYgKCB2 dnRkX3Rlc3RfYW5kX2NsZWFyX2JpdCh2dnRkLCBETUFSX0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lQ X1NISUZUKSApCisgICAgICAgICAgICB2dnRkX25vdGlmeV9pbnZfY29tcGxldGlvbih2dnRkKTsK KyAgICB9CisgICAgZWxzZQorICAgICAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9S RUcsIERNQV9JRUNUTF9JTV9TSElGVCk7Cit9CisKIHN0YXRpYyB2b2lkIHZ2dGRfd3JpdGVfZmVj dGwoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKIHsKICAgICAvKgpAQCAtNjgxLDYg Kzg4OCw0OCBAQCBzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2ZhdWx0X3JlZ3Moc3RydWN0IHZ2dGQg KnZ2dGQsIHVuc2lnbmVkIGxvbmcgdmFsLAogICAgIHNwaW5fdW5sb2NrKCZ2dnRkLT5mZV9sb2Nr KTsKIH0KIAorc3RhdGljIHZvaWQgdnZ0ZF93cml0ZV9pbnZhbGlkYXRpb25fcmVncyhzdHJ1Y3Qg dnZ0ZCAqdnZ0ZCwgdW5zaWduZWQgbG9uZyB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pCit7 CisgICAgc3Bpbl9sb2NrKCZ2dnRkLT5pZV9sb2NrKTsKKyAgICBmb3IgKCA7IGxlbiA7IGxlbiAt PSA0LCBvZmZzZXQgKz0gNCwgdmFsID0gdmFsID4+IDMyKQorICAgIHsKKyAgICAgICAgc3dpdGNo ICggb2Zmc2V0ICkKKyAgICAgICAgeworICAgICAgICBjYXNlIERNQVJfSUVDVExfUkVHOgorICAg ICAgICAgICAgdnZ0ZF93cml0ZV9pZWN0bCh2dnRkLCB2YWwpOworICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgY2FzZSBETUFSX0lDU19SRUc6CisgICAgICAgICAgICB2dnRkX3dyaXRlX2lj cyh2dnRkLCB2YWwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBETUFSX0lR VF9SRUc6CisgICAgICAgICAgICB2dnRkX3dyaXRlX2lxdCh2dnRkLCB2YWwpOworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBETUFSX0lRQV9SRUc6CisgICAgICAgICAgICB2dnRk X3dyaXRlX2lxYSh2dnRkLCB2YWwsIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg Y2FzZSBETUFSX0lRVUFfUkVHOgorICAgICAgICAgICAgdnZ0ZF93cml0ZV9pcWEodnZ0ZCwgdmFs LCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRE1BUl9JRURBVEFfUkVH OgorICAgICAgICBjYXNlIERNQVJfSUVBRERSX1JFRzoKKyAgICAgICAgY2FzZSBETUFSX0lFVUFE RFJfUkVHOgorICAgICAgICAgICAgdnZ0ZF9zZXRfcmVnKHZ2dGQsIG9mZnNldCwgdmFsKTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgIH0KKyAgICBzcGluX3VubG9jaygmdnZ0ZC0+aWVfbG9jayk7CisKK30K Kwogc3RhdGljIGludCB2dnRkX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFk ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgbG9u ZyB2YWwpCiB7CkBAIC03MTksNiArOTY4LDE3IEBAIHN0YXRpYyBpbnQgdnZ0ZF93cml0ZShzdHJ1 Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICB2dnRkX3dyaXRlX2ZhdWx0 X3JlZ3ModnZ0ZCwgdmFsLCBvZmZzZXQsIGxlbik7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2Fz ZSBETUFSX0lFQ1RMX1JFRzoKKyAgICBjYXNlIERNQVJfSUNTX1JFRzoKKyAgICBjYXNlIERNQVJf SVFUX1JFRzoKKyAgICBjYXNlIERNQVJfSVFBX1JFRzoKKyAgICBjYXNlIERNQVJfSVFVQV9SRUc6 CisgICAgY2FzZSBETUFSX0lFREFUQV9SRUc6CisgICAgY2FzZSBETUFSX0lFQUREUl9SRUc6Cisg ICAgY2FzZSBETUFSX0lFVUFERFJfUkVHOgorICAgICAgICB2dnRkX3dyaXRlX2ludmFsaWRhdGlv bl9yZWdzKHZ2dGQsIHZhbCwgb2Zmc2V0LCBsZW4pOworICAgICAgICBicmVhazsKKwogICAgIGRl ZmF1bHQ6CiAgICAgICAgIGlmICggKG9mZnNldCA9PSAoZmF1bHRfb2Zmc2V0ICsgRE1BX0ZSQ0Qy X09GRlNFVCkpIHx8CiAgICAgICAgICAgICAgKG9mZnNldCA9PSAoZmF1bHRfb2Zmc2V0ICsgRE1B X0ZSQ0QzX09GRlNFVCkpICkKQEAgLTg0MCw3ICsxMTAwLDggQEAgc3RhdGljIGludCB2dnRkX2hh bmRsZV9pcnFfcmVxdWVzdChjb25zdCBzdHJ1Y3QgZG9tYWluICpkLAogICAgICAgICAgICAgICAg ICAgICAgICAgaXJ0ZS5yZW1hcC50bSk7CiAKICBvdXQ6Ci0gICAgYXRvbWljX2RlYygmdnZ0ZC0+ aW5mbGlnaHRfaW50cik7CisgICAgaWYgKCAhYXRvbWljX2RlY19hbmRfdGVzdCgmdnZ0ZC0+aW5m bGlnaHRfaW50cikgKQorICAgICAgICB2dnRkX3Byb2Nlc3NfaXEodnZ0ZCk7CiAgICAgcmV0dXJu IHJldDsKIH0KIApAQCAtOTExLDYgKzExNzIsNyBAQCBzdGF0aWMgaW50IHZ2dGRfY3JlYXRlKHN0 cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2aW9tbXUgKnZpb21tdSkKICAgICB2dnRkLT5kb21haW4g PSBkOwogICAgIHJlZ2lzdGVyX21taW9faGFuZGxlcihkLCAmdnZ0ZF9tbWlvX29wcyk7CiAgICAg c3Bpbl9sb2NrX2luaXQoJnZ2dGQtPmZlX2xvY2spOworICAgIHNwaW5fbG9ja19pbml0KCZ2dnRk LT5pZV9sb2NrKTsKIAogICAgIHZpb21tdS0+cHJpdiA9IHZ2dGQ7CiAKQEAgLTkzMCw2ICsxMTky LDEzIEBAIHN0YXRpYyBpbnQgdnZ0ZF9kZXN0cm95KHN0cnVjdCB2aW9tbXUgKnZpb21tdSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlyZW1hcF9l bnRyeSkpKTsKICAgICAgICAgICAgIHZ2dGQtPmlydF9iYXNlID0gTlVMTDsKICAgICAgICAgfQor ICAgICAgICBpZiAoIHZ2dGQtPmludl9xdWV1ZV9iYXNlICkKKyAgICAgICAgeworICAgICAgICAg ICAgdWludDY0X3Qgb2xkID0gdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUFfUkVHKTsK KworICAgICAgICAgICAgdW5tYXBfZ3Vlc3RfcGFnZXModnZ0ZC0+aW52X3F1ZXVlX2Jhc2UsIDEg PDwgRE1BX0lRQV9RUyhvbGQpKTsKKyAgICAgICAgICAgIHZ2dGQtPmludl9xdWV1ZV9iYXNlID0g TlVMTDsKKyAgICAgICAgfQogICAgICAgICB4ZnJlZSh2dnRkKTsKICAgICB9CiAKLS0gCjEuOC4z LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK