From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?iso-8859-1?Q?Monn=E9?= Subject: Re: [PATCH V3 28/29] x86/vvtd: Add queued invalidation (QI) support Date: Fri, 20 Oct 2017 12:20:06 +0100 Message-ID: <20171020112006.77dj3vipjql7anpp@dhcp-3-128.uk.xensource.com> References: <1506049330-11196-1-git-send-email-tianyu.lan@intel.com> <1506049330-11196-29-git-send-email-tianyu.lan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1506049330-11196-29-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: Lan Tianyu Cc: andrew.cooper3@citrix.com, kevin.tian@intel.com, Chao Gao , jbeulich@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBTZXAgMjEsIDIwMTcgYXQgMTE6MDI6MDlQTSAtMDQwMCwgTGFuIFRpYW55dSB3cm90 ZToKPiBGcm9tOiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgo+IAo+IFF1ZXVlZCBJbnZh bGlkYXRpb24gSW50ZXJmYWNlIGlzIGFuIGV4cGFuZGVkIGludmFsaWRhdGlvbiBpbnRlcmZhY2Ug d2l0aAo+IGV4dGVuZGVkIGNhcGFiaWxpdGllcy4gSGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIHJl cG9ydCBzdXBwb3J0IGZvciBxdWV1ZWQKPiBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIHRocm91Z2gg dGhlIEV4dGVuZGVkIENhcGFiaWxpdHkgUmVnaXN0ZXIuIFRoZSBxdWV1ZWQKPiBpbnZhbGlkYXRp b24gaW50ZXJmYWNlIHVzZXMgYW4gSW52YWxpZGF0aW9uIFF1ZXVlIChJUSksIHdoaWNoIGlzIGEg Y2lyY3VsYXIKPiBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeS4gU29mdHdhcmUgc3VibWl0cyBjb21t YW5kcyBieSB3cml0aW5nIEludmFsaWRhdGlvbgo+IERlc2NyaXB0b3JzIHRvIHRoZSBJUS4KPiAK PiBJbiB0aGlzIHBhdGNoLCBhIG5ldyBmdW5jdGlvbiB2aW9tbXVfcHJvY2Vzc19pcSgpIGlzIHVz ZWQgZm9yIGVtdWxhdGluZyBob3cKPiBoYXJkd2FyZSBoYW5kbGVzIGludmFsaWRhdGlvbiByZXF1 ZXN0cyB0aHJvdWdoIFFJLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0Bp bnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTGFuIFRpYW55dSA8dGlhbnl1LmxhbkBpbnRlbC5j b20+Cj4gLS0tCj4gIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oIHwgIDE5ICsr LQo+ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jICB8IDIzMiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCAyNTAgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC92dGQvaW9tbXUuaCBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5o Cj4gaW5kZXggYzY5Y2QyMS4uYzJiODNmMSAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC92dGQvaW9tbXUuaAo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9p b21tdS5oCj4gQEAgLTE3Nyw2ICsxNzcsMjEgQEAKPiAgI2RlZmluZSBETUFfSVJUQV9TKHZhbCkg ICAgICAgICAodmFsICYgMHhmKQo+ICAjZGVmaW5lIERNQV9JUlRBX1NJWkUodmFsKSAgICAgICgx VUwgPDwgKERNQV9JUlRBX1ModmFsKSArIDEpKQo+ICAKPiArLyogSVFBX1JFRyAqLwo+ICsjZGVm aW5lIERNQV9JUUFfQUREUih2YWwpICAgICAgICh2YWwgJiB+MHhmZmZVTEwpCj4gKyNkZWZpbmUg RE1BX0lRQV9RUyh2YWwpICAgICAgICAgKHZhbCAmIDB4NykKPiArI2RlZmluZSBETUFfSVFBX1JT VkQgICAgICAgICAgICAweGZmOFVMTAo+ICsKPiArLyogSUVDVExfUkVHICovCj4gKyNkZWZpbmUg RE1BX0lFQ1RMX0lNX1NISUZUIDMxCj4gKyNkZWZpbmUgRE1BX0lFQ1RMX0lNICAgICAgICAgICAg KDEgPDwgRE1BX0lFQ1RMX0lNX1NISUZUKQoKSXNuJ3QgdGhpcyB1bmRlZmluZWQgYmVoYXZpb3I/ IEl0IHNob3VsZCBiZSAxdS4KCllvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdSBmb3IgYWxsIHRo ZSBkZWZpbmVzIGFkZGVkLgoKPiArI2RlZmluZSBETUFfSUVDVExfSVBfU0hJRlQgMzAKPiArI2Rl ZmluZSBETUFfSUVDVExfSVAgICAgICAgICAgICAoMSA8PCBETUFfSUVDVExfSVBfU0hJRlQpCj4g Kwo+ICsvKiBJQ1NfUkVHICovCj4gKyNkZWZpbmUgRE1BX0lDU19JV0NfU0hJRlQgICAgICAgMAo+ ICsjZGVmaW5lIERNQV9JQ1NfSVdDICAgICAgICAgICAgICgxIDw8IERNQV9JQ1NfSVdDX1NISUZU KQo+ICsKPiAgLyogUE1FTl9SRUcgKi8KPiAgI2RlZmluZSBETUFfUE1FTl9FUE0gICAgKCgodTMy KTEpIDw8IDMxKQo+ICAjZGVmaW5lIERNQV9QTUVOX1BSUyAgICAoKCh1MzIpMSkgPDwgMCkKPiBA QCAtMjExLDcgKzIyNiw4IEBACj4gICNkZWZpbmUgRE1BX0ZTVFNfUFBGICgxVSA8PCBETUFfRlNU U19QUEZfU0hJRlQpCj4gICNkZWZpbmUgRE1BX0ZTVFNfQUZPICgxVSA8PCAyKQo+ICAjZGVmaW5l IERNQV9GU1RTX0FQRiAoMVUgPDwgMykKPiAtI2RlZmluZSBETUFfRlNUU19JUUUgKDFVIDw8IDQp Cj4gKyNkZWZpbmUgRE1BX0ZTVFNfSVFFX1NISUZUIDQKPiArI2RlZmluZSBETUFfRlNUU19JUUUg KDFVIDw8IERNQV9GU1RTX0lRRV9TSElGVCkKPiAgI2RlZmluZSBETUFfRlNUU19JQ0UgKDFVIDw8 IDUpCj4gICNkZWZpbmUgRE1BX0ZTVFNfSVRFICgxVSA8PCA2KQo+ICAjZGVmaW5lIERNQV9GU1RT X1BST19TSElGVCA3Cj4gQEAgLTU2Miw2ICs1NzgsNyBAQCBzdHJ1Y3QgcWludmFsX2VudHJ5IHsK PiAgCj4gIC8qIFF1ZXVlIGludmFsaWRhdGlvbiBoZWFkL3RhaWwgc2hpZnQgKi8KPiAgI2RlZmlu ZSBRSU5WQUxfSU5ERVhfU0hJRlQgNAo+ICsjZGVmaW5lIFFJTlZBTF9JTkRFWF9NQVNLICAweDdm ZmYwVUxMCj4gIAo+ICAjZGVmaW5lIHFpbnZhbF9wcmVzZW50KHYpICgodikubG8gJiAxKQo+ICAj ZGVmaW5lIHFpbnZhbF9mYXVsdF9kaXNhYmxlKHYpICgoKHYpLmxvID4+IDEpICYgMSkKPiBkaWZm IC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYyBiL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKPiBpbmRleCA1NWY3YTQ2Li42NjhkMGM5IDEwMDY0NAo+ IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKPiArKysgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCj4gQEAgLTI4LDYgKzI4LDcgQEAKPiAgI2luY2x1 ZGUgPGFzbS9jdXJyZW50Lmg+Cj4gICNpbmNsdWRlIDxhc20vZXZlbnQuaD4KPiAgI2luY2x1ZGUg PGFzbS9odm0vZG9tYWluLmg+Cj4gKyNpbmNsdWRlIDxhc20vaHZtL3N1cHBvcnQuaD4KPiAgI2lu Y2x1ZGUgPGFzbS9pb19hcGljLmg+Cj4gICNpbmNsdWRlIDxhc20vcGFnZS5oPgo+ICAjaW5jbHVk ZSA8YXNtL3AybS5oPgo+IEBAIC00MTksNiArNDIwLDE3NyBAQCBzdGF0aWMgaW50IHZ2dGRfcmVj b3JkX2ZhdWx0KHN0cnVjdCB2dnRkICp2dnRkLAo+ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK PiAgfQo+ICAKPiArLyoKPiArICogUHJvY2VzcyBhIGludmFsaWRhdGlvbiBkZXNjcmlwdG9yLiBD dXJyZW50bHksIG9ubHkgdHdvIHR5cGVzIGRlc2NyaXB0b3JzLAo+ICsgKiBJbnRlcnJ1cHQgRW50 cnkgQ2FjaGUgSW52YWxpZGF0aW9uIERlc2NyaXRvciBhbmQgSW52YWxpZGF0aW9uIFdhaXQKPiAr ICogRGVzY3JpcHRvciBhcmUgaGFuZGxlZC4KPiArICogQHZ2dGQ6IHRoZSB2aXJ0dWFsIHZ0ZCBp bnN0YW5jZQo+ICsgKiBAaTogdGhlIGluZGV4IG9mIHRoZSBpbnZhbGlkYXRpb24gZGVzY3JpcHRv ciB0byBiZSBwcm9jZXNzZWQKPiArICoKPiArICogSWYgc3VjY2VzcyByZXR1cm4gMCwgb3IgcmV0 dXJuIG5vbi16ZXJvIHdoZW4gZmFpbHVyZS4KPiArICovCj4gK3N0YXRpYyBpbnQgcHJvY2Vzc19p cWUoc3RydWN0IHZ2dGQgKnZ2dGQsIGludCBpKQoKdW5zaWduZWQgaW50LgoKPiArewo+ICsgICAg dWludDY0X3QgaXFhOwo+ICsgICAgc3RydWN0IHFpbnZhbF9lbnRyeSAqcWludmFsX3BhZ2U7Cj4g KyAgICBpbnQgcmV0ID0gMDsKPiArCj4gKyAgICBpcWEgPSB2dnRkX2dldF9yZWdfcXVhZCh2dnRk LCBETUFSX0lRQV9SRUcpOwo+ICsgICAgcWludmFsX3BhZ2UgPSBtYXBfZ3Vlc3RfcGFnZSh2dnRk LT5kb21haW4sIERNQV9JUUFfQUREUihpcWEpPj5QQUdFX1NISUZUKTsKClBGTl9ET1dOIGluc3Rl YWQgb2Ygb3BlbiBjb2RpbmcgdGhlIHNoaWZ0LiBCb3RoIGNhbiBiZSBpbml0aWFsaXplZAphdCBk ZWNsYXJhdGlvbi4gQWxzbyBBRkFJQ1QgaXFhIGlzIG9ubHkgdXNlZCBvbmNlLCBzbyB0aGUgbG9j YWwKdmFyaWFibGUgaXMgbm90IG5lZWRlZC4KCj4gKyAgICBpZiAoIElTX0VSUihxaW52YWxfcGFn ZSkgKQo+ICsgICAgewo+ICsgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJDYW4ndCBtYXAg Z3Vlc3QgSVJUIChyYyAlbGQpIiwKPiArICAgICAgICAgICAgICAgICBQVFJfRVJSKHFpbnZhbF9w YWdlKSk7Cj4gKyAgICAgICAgcmV0dXJuIFBUUl9FUlIocWludmFsX3BhZ2UpOwo+ICsgICAgfQo+ ICsKPiArICAgIHN3aXRjaCAoIHFpbnZhbF9wYWdlW2ldLnEuaW52X3dhaXRfZHNjLmxvLnR5cGUg KQo+ICsgICAgewo+ICsgICAgY2FzZSBUWVBFX0lOVkFMX1dBSVQ6Cj4gKyAgICAgICAgaWYgKCBx aW52YWxfcGFnZVtpXS5xLmludl93YWl0X2RzYy5sby5zdyApCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgICB1aW50MzJfdCBkYXRhID0gcWludmFsX3BhZ2VbaV0ucS5pbnZfd2FpdF9kc2MubG8u c2RhdGE7Cj4gKyAgICAgICAgICAgIHVpbnQ2NF90IGFkZHIgPSAocWludmFsX3BhZ2VbaV0ucS5p bnZfd2FpdF9kc2MuaGkuc2FkZHIgPDwgMik7CgpVbm5lZWRlZCBwYXJlbnRoZXNlcy4KCj4gKwo+ ICsgICAgICAgICAgICByZXQgPSBodm1fY29weV90b19ndWVzdF9waHlzKGFkZHIsICZkYXRhLCBz aXplb2YoZGF0YSksIGN1cnJlbnQpOwo+ICsgICAgICAgICAgICBpZiAoIHJldCApCj4gKyAgICAg ICAgICAgICAgICB2dnRkX2luZm8oIkZhaWxlZCB0byB3cml0ZSBzdGF0dXMgYWRkcmVzcyIpOwoK RG9uJ3QgeW91IG5lZWQgdG8gcmV0dXJuIG9yIGRvIHNvbWV0aGluZyBoZXJlPyAobGlrZSByYWlz ZSBzb21lIGtpbmQKb2YgZXJyb3I/KQoKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qCj4g KyAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkYXRpb24g Y29tcGxldGlvbiBldmVudAo+ICsgICAgICAgICAqIGluZGljYXRpbmcgdGhlIGludmFsaWRhdGlv biB3YWl0IGRlc2NyaXB0b3IgY29tcGxldGlvbi4gTm90ZSB0aGF0Cj4gKyAgICAgICAgICogdGhl IGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IGlzIG5vdCB0ZXN0ZWQgcHJvcGVybHkuCj4gKyAgICAg ICAgICovCj4gKyAgICAgICAgaWYgKCBxaW52YWxfcGFnZVtpXS5xLmludl93YWl0X2RzYy5sby5p ZmxhZyApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB1aW50MzJfdCBpZV9kYXRhLCBpZV9h ZGRyOwoKTWlzc2luZyBuZXdsaW5lLCBidXQuLi4KCj4gKyAgICAgICAgICAgIGlmICggIXZ2dGRf dGVzdF9hbmRfc2V0X2JpdCh2dnRkLCBETUFSX0lDU19SRUcsIERNQV9JQ1NfSVdDX1NISUZUKSAp Cj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIHZ2dGRfc2V0X2JpdCh2dnRkLCBE TUFSX0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lQX1NISUZUKTsKPiArICAgICAgICAgICAgICAgIGlm ICggIXZ2dGRfdGVzdF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JTV9TSElG VCkgKQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgICAgIGllX2RhdGEg PSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9JRURBVEFfUkVHKTsKPiArICAgICAgICAgICAgICAg ICAgICBpZV9hZGRyID0gdnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfSUVBRERSX1JFRyk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0ZCwgaWVfYWRkciwg aWVfZGF0YSk7CgouLi55b3UgZG9uJ3Qgc2VlbSB0d28gbmVlZCB0aGUgdHdvIGxvY2FsIHZhcmlh Ymxlcy4gVGhleSBhcmUgdXNlZCBvbmx5Cm9uY2UuCgo+ICsgICAgICAgICAgICAgICAgICAgIHZ2 dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOwo+ ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGJyZWFrOwo+ICsKPiArICAgIGNhc2UgVFlQRV9JTlZBTF9JRUM6Cj4gKyAgICAgICAgLyoK PiArICAgICAgICAgKiBDdXJyZW50bHksIG5vIGNhY2hlIGlzIHByZXNlcnZlZCBpbiBoeXBlcnZp c29yLiBPbmx5IG5lZWQgdG8gdXBkYXRlCj4gKyAgICAgICAgICogcElSVEVzIHdoaWNoIGFyZSBt b2RpZmllZCBpbiBiaW5kaW5nIHByb2Nlc3MuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBnb3RvIGVycm9yOwoKVGhlcmUncyBu byByZWFzb24gdG8gdXNlIGEgbGFiZWwgdGhhdCdzIG9ubHkgdXNlZCBmb3IgdGhlIGRlZmF1bHQK Y2FzZS4gU2ltcGx5IHBsYWNlIHRoZSBjb2RlIGluIHRoZSBlcnJvciBsYWJlbCBoZXJlLgoKPiAr ICAgIH0KPiArCj4gKyAgICB1bm1hcF9ndWVzdF9wYWdlKCh2b2lkKilxaW52YWxfcGFnZSk7Cj4g KyAgICByZXR1cm4gcmV0Owo+ICsKPiArIGVycm9yOgo+ICsgICAgdW5tYXBfZ3Vlc3RfcGFnZSgo dm9pZCopcWludmFsX3BhZ2UpOwo+ICsgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgIkludGVybmFs IGVycm9yIGluIFF1ZXVlIEludmFsaWRhdGlvbi5cbiIpOwo+ICsgICAgZG9tYWluX2NyYXNoKHZ2 dGQtPmRvbWFpbik7CgpEbyB5b3UgcmVhbGx5IG5lZWQgdG8gY3Jhc2ggdGhlIGRvbWFpbiBpbiBz dWNoIGNhc2U/Cgo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogSW52YWxp ZGF0ZSBhbGwgdGhlIGRlc2NyaXB0b3JzIGluIEludmFsaWRhdGlvbiBRdWV1ZS4KPiArICovCj4g K3N0YXRpYyB2b2lkIHZ2dGRfcHJvY2Vzc19pcShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCkKPiArewo+ICsg ICAgdWludDY0X3QgaXFoLCBpcXQsIGlxYSwgbWF4X2VudHJ5LCBpOwo+ICsgICAgaW50IGVyciA9 IDA7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIE5vIG5ldyBkZXNjcmlwdG9yIGlzIGZldGNoZWQg ZnJvbSB0aGUgSW52YWxpZGF0aW9uIFF1ZXVlIHVudGlsCj4gKyAgICAgKiBzb2Z0d2FyZSBjbGVh cnMgdGhlIElRRSBmaWVsZCBpbiB0aGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyCj4gKyAgICAgKi8K PiArICAgIGlmICggdnZ0ZF90ZXN0X2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19J UUVfU0hJRlQpICkKPiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgaXFoID0gdnZ0ZF9nZXRf cmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUhfUkVHKTsKPiArICAgIGlxdCA9IHZ2dGRfZ2V0X3JlZ19x dWFkKHZ2dGQsIERNQVJfSVFUX1JFRyk7Cj4gKyAgICBpcWEgPSB2dnRkX2dldF9yZWdfcXVhZCh2 dnRkLCBETUFSX0lRQV9SRUcpOwo+ICsKPiArICAgIG1heF9lbnRyeSA9IDEgPDwgKFFJTlZBTF9F TlRSWV9PUkRFUiArIERNQV9JUUFfUVMoaXFhKSk7Cj4gKyAgICBpcWggPSBNQVNLX0VYVFIoaXFo LCBRSU5WQUxfSU5ERVhfTUFTSyk7Cj4gKyAgICBpcXQgPSBNQVNLX0VYVFIoaXF0LCBRSU5WQUxf SU5ERVhfTUFTSyk7CgpUaGlzIHNob3VsZCBiZSBkb25lIGFib3ZlLCB3aGVuIHRoZXkgYXJlIGlu aXRpYWxpemVkLgoKPiArCj4gKyAgICBBU1NFUlQoaXF0IDwgbWF4X2VudHJ5KTsKPiArICAgIGlm ICggaXFoID09IGlxdCApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGZvciAoIGkgPSBp cWg7IGkgIT0gaXF0OyBpID0gKGkgKyAxKSAlIG1heF9lbnRyeSApCj4gKyAgICB7Cj4gKyAgICAg ICAgZXJyID0gcHJvY2Vzc19pcWUodnZ0ZCwgaSk7Cgpwcm9jZXNzX2lxZSB0YWtlcyBhbiBpbnQg cGFyYW1ldGVyLCBhbmQgaGVyZSB5b3UgYXJlIGZlZWRpbmcgaXQgYQp1aW50NjRfdC4KCj4gKyAg ICAgICAgaWYgKCBlcnIgKQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArICAgIHZ2 dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFIX1JFRywgaSA8PCBRSU5WQUxfSU5ERVhfU0hJ RlQpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBXaGVuIElRRSBzZXQsIElRSCByZWZlcmVuY2Vz IHRoZSBkZXNyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4KPiArICAgICAqLwo+ICsg ICAgaWYgKCBlcnIgKQo+ICsgICAgICAgIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVs dCh2dnRkLCBETUFfRlNUU19JUUVfU0hJRlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ2dGRf d3JpdGVfaXF0KHN0cnVjdCB2dnRkICp2dnRkLCB1bnNpZ25lZCBsb25nIHZhbCkKCk5vdCBzdXJl IHRoZXJlJ3MgbXVjaCBwb2ludCBpbiBtYWtpbmcgdGhpcyBmdW5jdGlvbiByZXR1cm4gaW50LCB3 aGVuCmFsbCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgWDg2RU1VTF9PS0FZLgoKU2lvbmNlIHZhbCBo ZXJlIGlzIGEgcmVnaXN0ZXIgQUZBSUNULCBJIHdvdWxkIHJhdGhlciBwcmVmZXIgdGhhdCB5b3UK dXNlIGFuIGV4cGxpY2l0IHR5cGUgc2l6ZSAodWludDY0X3Qgb3IgdWludDMyX3QgYXMgZml0cyku Cgo+ICt7Cj4gKyAgICB1aW50NjRfdCBtYXhfZW50cnksIGlxYSA9IHZ2dGRfZ2V0X3JlZ19xdWFk KHZ2dGQsIERNQVJfSVFBX1JFRyk7Cj4gKwo+ICsgICAgaWYgKCB2YWwgJiB+UUlOVkFMX0lOREVY X01BU0sgKQo+ICsgICAgewo+ICsgICAgICAgIHZ2dGRfaW5mbygiQXR0ZW1wdCB0byBzZXQgcmVz ZXJ2ZWQgYml0cyBpbiBJbnZhbGlkYXRpb24gUXVldWUgVGFpbCIpOwo+ICsgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbWF4X2VudHJ5ID0gMSA8PCAoUUlO VkFMX0VOVFJZX09SREVSICsgRE1BX0lRQV9RUyhpcWEpKTsKCjF1bGwgcGxlYXNlLgoKPiArICAg IGlmICggTUFTS19FWFRSKHZhbCwgUUlOVkFMX0lOREVYX01BU0spID49IG1heF9lbnRyeSApCj4g KyAgICB7Cj4gKyAgICAgICAgdnZ0ZF9pbmZvKCJJUVQ6IFZhbHVlICVseCBleGNlZWRlZCBzdXBw b3J0ZWQgbWF4IGluZGV4LiIsIHZhbCk7Cj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK PiArICAgIH0KPiArCj4gKyAgICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRVF9SRUcs IHZhbCk7Cj4gKyAgICB2dnRkX3Byb2Nlc3NfaXEodnZ0ZCk7Cj4gKwo+ICsgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dnRkX3dyaXRlX2lxYShzdHJ1Y3Qg dnZ0ZCAqdnZ0ZCwgdW5zaWduZWQgbG9uZyB2YWwpCgpTYW1lIGhlcmUsIGl0IHNlZW1zIGxpa2Ug dGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHZvaWQsIGJlY2F1c2UgdGhlCmN1cnJlbnQgcmV0 dXJuIHZhbHVlIGlzIG1lYW5pbmdsZXNzLCBhbmQgc2FtZSBjb21tZW50IGFib3V0ICd2YWwnCmJl aW5nIHVpbnRYWF90LgoKPiArewo+ICsgICAgdWludDMyX3QgY2FwID0gdnZ0ZF9nZXRfcmVnKHZ2 dGQsIERNQVJfQ0FQX1JFRyk7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZ3Vlc3RfbWF4X2FkZHJfd2lk dGggPSBjYXBfbWdhdyhjYXApOwo+ICsKPiArICAgIGlmICggdmFsICYgKH4oKDFVTEwgPDwgZ3Vl c3RfbWF4X2FkZHJfd2lkdGgpIC0gMSkgfCBETUFfSVFBX1JTVkQpICkKPiArICAgIHsKPiArICAg ICAgICB2dnRkX2luZm8oIkF0dGVtcHQgdG8gc2V0IHJlc2VydmVkIGJpdHMgaW4gSW52YWxpZGF0 aW9uIFF1ZXVlIEFkZHJlc3MiKTsKPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+ICsg ICAgfQo+ICsKPiArICAgIHZ2dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFBX1JFRywgdmFs KTsKPiArICAgIHJldHVybiBYODZFTVVMX09LQVk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdnZ0 ZF93cml0ZV9pY3Moc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPiArewo+ICsgICAg aWYgKCB2YWwgJiBETUFfSUNTX0lXQyApCj4gKyAgICB7Cj4gKyAgICAgICAgdnZ0ZF9jbGVhcl9i aXQodnZ0ZCwgRE1BUl9JQ1NfUkVHLCBETUFfSUNTX0lXQ19TSElGVCk7Cj4gKyAgICAgICAgLypX aGVuIElXQyBmaWVsZCBpcyBjbGVhcmVkLCB0aGUgSVAgZmllbGQgbmVlZHMgdG8gYmUgY2xlYXJl ZCAqLwogICAgICAgICAgICAgXiBtaXNzaW5nIHNwYWNlLgoKPiArICAgICAgICB2dnRkX2NsZWFy X2JpdCh2dnRkLCBETUFSX0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lQX1NISUZUKTsKPiArICAgIH0K PiArICAgIHJldHVybiBYODZFTVVMX09LQVk7CgpUaGlzIGZ1bmN0aW9uIHdhbnRzIHRvIGJlIHZv aWQuCgo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHZ2dGRfd3JpdGVfZnJjZDMoc3RydWN0IHZ2dGQg KnZ2dGQsIHVpbnQzMl90IHZhbCkKPiAgewo+ICAgICAgLyogV3JpdGluZyBhIDEgbWVhbnMgY2xl YXIgZmF1bHQgKi8KPiBAQCAtNDMwLDYgKzYwMiwzMCBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGVf ZnJjZDMoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPiAgICAgIHJldHVybiBYODZF TVVMX09LQVk7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9pZWN0bChzdHJ1Y3Qg dnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQoKdm9pZCBwbGVhc2UuCgo+ICt7Cj4gKyAgICAvKgo+ ICsgICAgICogT25seSBETUFfSUVDVExfSU0gYml0IGlzIHdyaXRhYmxlLiBHZW5lcmF0ZSBwZW5k aW5nIGV2ZW50IHdoZW4gdW5tYXNrLgo+ICsgICAgICovCgpTaW5nbGUgbGluZSBjb21tZW50cyB1 c2UgLyogLi4uICovCgo+ICsgICAgaWYgKCAhKHZhbCAmIERNQV9JRUNUTF9JTSkgKQo+ICsgICAg ewo+ICsgICAgICAgIC8qIENsZWFyIElNIGFuZCBjbGVhciBJUCAqLwo+ICsgICAgICAgIHZ2dGRf Y2xlYXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSU1fU0hJRlQpOwo+ICsg ICAgICAgIGlmICggdnZ0ZF90ZXN0X2FuZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcs IERNQV9JRUNUTF9JUF9TSElGVCkgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdWludDMy X3QgaWVfZGF0YSwgaWVfYWRkcjsKPiArCj4gKyAgICAgICAgICAgIGllX2RhdGEgPSB2dnRkX2dl dF9yZWcodnZ0ZCwgRE1BUl9JRURBVEFfUkVHKTsKPiArICAgICAgICAgICAgaWVfYWRkciA9IHZ2 dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0lFQUREUl9SRUcpOwo+ICsgICAgICAgICAgICB2dnRkX2dl bmVyYXRlX2ludGVycnVwdCh2dnRkLCBpZV9hZGRyLCBpZV9kYXRhKTsKCk5vIG5lZWQgZm9yIGll X2RhdGEgYW5kIGllX2FkZHIuCgo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIGVsc2UKPiAr ICAgICAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JTV9T SElGVCk7Cj4gKwo+ICsgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKPiArfQo+ICsKPiAgc3RhdGlj IGludCB2dnRkX3dyaXRlX2ZlY3RsKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCj4g IHsKPiAgICAgIC8qCj4gQEAgLTQ3Niw2ICs2NzIsMTAgQEAgc3RhdGljIGludCB2dnRkX3dyaXRl X2ZzdHMoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPiAgICAgIGlmICggISgodnZ0 ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRlNUU19SRUcpICYgRE1BX0ZTVFNfRkFVTFRTKSkgKQo+ICAg ICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBETUFfRkVDVExfSVBf U0hJRlQpOwo+ICAKPiArICAgIC8qIENvbnRpbnVlIHRvIGRlYWwgaW52YWxpZGF0aW9uIHdoZW4g SVFFIGlzIGNsZWFyICovCj4gKyAgICBpZiAoICF2dnRkX3Rlc3RfYml0KHZ2dGQsIERNQVJfRlNU U19SRUcsIERNQV9GU1RTX0lRRV9TSElGVCkgKQo+ICsgICAgICAgIHZ2dGRfcHJvY2Vzc19pcSh2 dnRkKTsKPiArCj4gICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+ICB9Cj4gIAo+IEBAIC02MTEs NiArODExLDMyIEBAIHN0YXRpYyBpbnQgdnZ0ZF93cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWdu ZWQgbG9uZyBhZGRyLAo+ICAgICAgICAgIGNhc2UgRE1BUl9GRUNUTF9SRUc6Cj4gICAgICAgICAg ICAgIHJldHVybiB2dnRkX3dyaXRlX2ZlY3RsKHZ2dGQsIHZhbCk7Cj4gIAo+ICsgICAgICAgIGNh c2UgRE1BUl9JRUNUTF9SRUc6Cj4gKyAgICAgICAgICAgIHJldHVybiB2dnRkX3dyaXRlX2llY3Rs KHZ2dGQsIHZhbCk7Cj4gKwo+ICsgICAgICAgIGNhc2UgRE1BUl9JQ1NfUkVHOgo+ICsgICAgICAg ICAgICByZXR1cm4gdnZ0ZF93cml0ZV9pY3ModnZ0ZCwgdmFsKTsKPiArCj4gKyAgICAgICAgY2Fz ZSBETUFSX0lRVF9SRUc6Cj4gKyAgICAgICAgICAgIHJldHVybiB2dnRkX3dyaXRlX2lxdCh2dnRk LCAodWludDMyX3QpdmFsKTsKPiArCj4gKyAgICAgICAgY2FzZSBETUFSX0lRQV9SRUc6Cj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICB1aW50MzJfdCBpcWFfaGk7Cj4gKwo+ICsgICAgICAgICAg ICBpcWFfaGkgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9JUUFfUkVHX0hJKTsKCkluaXRpYWxp emF0aW9uIGF0IGRlY2xhcmF0aW9uIHRpbWUsIGJ1dCBzaW5jZSBpdCdzIHVzZWQgb25seSBvbmNl LCBJCndvdWxkIHJhdGhlciBwcmVmZXIgdGhhdCB5b3UgZG9uJ3QgdXNlIGEgbG9jYWwgdmFyaWFi bGUgYXQgYWxsLgoKPiArICAgICAgICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl2YWwgfCAoKHVpbnQ2 NF90KWlxYV9oaSA8PCAzMikpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgY2FzZSBETUFS X0lRQV9SRUdfSEk6Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB1aW50MzJfdCBpcWFfbG87 Cj4gKwo+ICsgICAgICAgICAgICBpcWFfbG8gPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9JUUFf UkVHKTsKPiArICAgICAgICAgICAgcmV0dXJuIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsICh2YWwgPDwg MzIpIHwgaXFhX2xvKTsKClNhbWUgY29tbWVudCBhcyBhYm92ZSByZWdhcmRpbmcgaXFhX2xvLgoK VGhhbmtzLCBSb2dlci4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=