From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v4 14/26] x86/cpu: Rework AMD masking MSR setup Date: Mon, 28 Mar 2016 14:55:23 -0400 Message-ID: <20160328185523.GM17944@char.us.oracle.com> References: <1458750989-28967-1-git-send-email-andrew.cooper3@citrix.com> <1458750989-28967-15-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1458750989-28967-15-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper Cc: Xen-devel List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBNYXIgMjMsIDIwMTYgYXQgMDQ6MzY6MTdQTSArMDAwMCwgQW5kcmV3IENvb3BlciB3 cm90ZToKPiBUaGlzIHBhdGNoIGlzIGJlc3QgcmV2aWV3ZWQgYXMgaXRzIGVuZCByZXN1bHQgcmF0 aGVyIHRoYW4gYXMgYSBkaWZmLCBhcyBpdAo+IHJld3JpdGVzIGFsbW9zdCBhbGwgb2YgdGhlIHNl dHVwLgo+IAo+IE9uIHRoZSBCU1AsIGNwdWlkIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gZXZhbHVh dGUgdGhlIHBvdGVudGlhbCBhdmFpbGFibGUgc2V0Cj4gb2YgbWFza2luZyBNU1JzLCBhbmQgdGhl eSBhcmUgdW5jb25kaXRpb25hbGx5IHByb2JlZCwgZmlsbGluZyBpbiB0aGUKPiBhdmFpbGFiaWxp dHkgaW5mb3JtYXRpb24gYW5kIGhhcmR3YXJlIGRlZmF1bHRzLgo+IAo+IFRoZSBjb21tYW5kIGxp bmUgcGFyYW1ldGVycyBhcmUgdGhlbiBjb21iaW5lZCB3aXRoIHRoZSBoYXJkd2FyZSBkZWZhdWx0 cyB0bwo+IGZ1cnRoZXIgcmVzdHJpY3QgdGhlIFhlbiBkZWZhdWx0IG1hc2tpbmcgbGV2ZWwuICBF YWNoIGNwdSBpcyB0aGVuIGNvbnRleHQKPiBzd2l0Y2hlZCBpbnRvIHRoZSBkZWZhdWx0IGxldmVs bGluZyBzdGF0ZS4KCkNvbnRleHQgc3dpdGNoZWQ/IFdoeSBub3QganVzdCBzYXk6CgpXaGVuIGJv b3RpbmcgdXAgQ1BVcyB3ZSBzZXQgdGhlIHNhbWUgTVNSIG1hc2sgZm9yIGVhY2ggQ1BVLgoKVGhl IGFtZF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcgY2FuIGJlIGFsc28gdXNlZCAoaW4gcGF0Y2ggWFla KSB0byBzd2FwCmxldmVsbGluZyBwZXIgZ3Vlc3QgZ3JhbnVsYXJpdHkuCgo+IAo+IFNpZ25lZC1v ZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gUmV2aWV3 ZWQtYnk6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNvbT4KPiAtLS0KPiB2MjoKPiAgKiBQ cm92aWRlIGV4dHJhIGluZm9ybWF0aW9uIGlmIG9wdF9jcHVfaW5mbwo+ICAqIEV4dHJhIGNvbW1l bnQgaW5kaWNhdGluZyB0aGUgZXhwZWN0ZWQgdXNlIG9mIGFtZF9jdHh0X3N3aXRjaF9sZXZlbGxp bmcoKQo+IHYzOgo+ICAqIEZpeCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIGZhc3QtZm9yd2FyZCBi aXRzIHdpdGggdGhlIG92ZXJyaWRlIE1TUnMuCj4gICogU3R5bGUgZml4dXBzLgo+IC0tLQo+ICB4 ZW4vYXJjaC94ODYvY3B1L2FtZC5jIHwgMjc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDE3OSBpbnNlcnRpb25zKCsp LCA5NyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2NwdS9hbWQu YyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKPiBpbmRleCA1NTE2Nzc3Li4wZTFjOGI5IDEwMDY0 NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKPiArKysgYi94ZW4vYXJjaC94ODYvY3B1 L2FtZC5jCj4gQEAgLTgwLDYgKzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHdybXNyX2FtZF9z YWZlKHVuc2lnbmVkIGludCBtc3IsIHVuc2lnbmVkIGludCBsbywKPiAgCXJldHVybiBlcnI7Cj4g IH0KPiAgCj4gK3N0YXRpYyB2b2lkIHdybXNyX2FtZCh1bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRf dCB2YWwpCj4gK3sKPiArCWFzbSB2b2xhdGlsZSgid3Jtc3IiIDo6Cj4gKwkJICAgICAiYyIgKG1z ciksICJhIiAoKHVpbnQzMl90KXZhbCksCj4gKwkJICAgICAiZCIgKHZhbCA+PiAzMiksICJEIiAo MHg5YzVhMjAzYSkpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkbWFzayB7 Cj4gIAl1aW50MTZfdCBmYW07Cj4gIAljaGFyIHJldlsyXTsKPiBAQCAtMTI2LDEyNiArMTMzLDE5 OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkbWFzayAqX19pbml0IG5vaW5saW5lIGdldF9j cHVpZG1hc2soY29uc3QgY2hhciAqb3B0KQo+ICB9Cj4gIAo+ICAvKgo+ICsgKiBTZXRzIGNhcHMg aW4gZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgcHJvYmVzIGZvciB0aGUgc3BlY2lmaWVkIG1hc2sg TVNSLCBhbmQKPiArICogc2V0IGNhcHMgaW4gbGV2ZWxsaW5nX2NhcHMgaWYgaXQgaXMgZm91bmQu ICBQcm9jZXNzb3JzIHByaW9yIHRvIEZhbSAxMGgKPiArICogcmVxdWlyZWQgYSAzMi1iaXQgcGFz c3dvcmQgZm9yIG1hc2tpbmcgTVNScy4gIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUuCj4gKyAq Lwo+ICtzdGF0aWMgdWludDY0X3QgX19pbml0IF9wcm9iZV9tYXNrX21zcih1bnNpZ25lZCBpbnQg bXNyLCB1aW50NjRfdCBjYXBzKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaGksIGxvOwo+ICsKPiAr CWV4cGVjdGVkX2xldmVsbGluZ19jYXAgfD0gY2FwczsKPiArCj4gKwlpZiAoKHJkbXNyX2FtZF9z YWZlKG1zciwgJmxvLCAmaGkpID09IDApICYmCj4gKwkgICAgKHdybXNyX2FtZF9zYWZlKG1zciwg bG8sIGhpKSA9PSAwKSkKPiArCQlsZXZlbGxpbmdfY2FwcyB8PSBjYXBzOwo+ICsKPiArCXJldHVy biAoKHVpbnQ2NF90KWhpIDw8IDMyKSB8IGxvOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBQcm9iZSBm b3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZXhwZWN0ZWQgbWFza2luZyBNU1JzLiAgVGhleSBtaWdo dCBlYXNpbHkKPiArICogbm90IGJlIGF2YWlsYWJsZSBpZiBYZW4gaXMgcnVubmluZyB2aXJ0dWFs aXNlZC4KPiArICovCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBub2lubGluZSBwcm9iZV9tYXNraW5n X21zcnModm9pZCkKCldoeSBub25pbmxpbmU/Cgo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgY3B1aW5m b194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKPiArCj4gKwkvKgo+ICsJICogRmlyc3QsIHdvcmsg b3V0IHdoaWNoIG1hc2tpbmcgTVNScyB3ZSBzaG91bGQgaGF2ZSwgYmFzZWQgb24KPiArCSAqIHJl dmlzaW9uIGFuZCBjcHVpZC4KPiArCSAqLwo+ICsKPiArCS8qIEZhbTExIGRvZXNuJ3Qgc3VwcG9y dCBtYXNraW5nIGF0IGFsbC4gKi8KPiArCWlmIChjLT54ODYgPT0gMHgxMSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2QgPQo+ICsJCV9wcm9iZV9tYXNrX21zcihN U1JfSzhfRkVBVFVSRV9NQVNLLCBMQ0FQXzFjZCk7Cj4gKwljcHVpZG1hc2tfZGVmYXVsdHMuZTFj ZCA9Cj4gKwkJX3Byb2JlX21hc2tfbXNyKE1TUl9LOF9FWFRfRkVBVFVSRV9NQVNLLCBMQ0FQX2Ux Y2QpOwo+ICsKPiArCWlmIChjLT5jcHVpZF9sZXZlbCA+PSA3KQo+ICsJCWNwdWlkbWFza19kZWZh dWx0cy5fN2FiMCA9Cj4gKwkJCV9wcm9iZV9tYXNrX21zcihNU1JfQU1EX0w3UzBfRkVBVFVSRV9N QVNLLCBMQ0FQXzdhYjApOwo+ICsKPiArCWlmIChjLT54ODYgPT0gMHgxNSAmJiBjLT5jcHVpZF9s ZXZlbCA+PSA2ICYmIGNwdWlkX2VjeCg2KSkKPiArCQljcHVpZG1hc2tfZGVmYXVsdHMuXzZjID0K PiArCQkJX3Byb2JlX21hc2tfbXNyKE1TUl9BTURfVEhSTV9GRUFUVVJFX01BU0ssIExDQVBfNmMp Owo+ICsKPiArCS8qCj4gKwkgKiBEb24ndCBib3RoZXIgd2FybmluZyBhYm91dCBhIG1pc21hdGNo IGlmIHZpcnR1YWxpc2VkLiAgVGhlc2UgTVNScwo+ICsJICogYXJlIG5vdCBhcmNoaXRlY3R1cmFs IGFuZCBhbG1vc3QgbmV2ZXIgdmlydHVhbGlzZWQuCj4gKwkgKi8KPiArCWlmICgoZXhwZWN0ZWRf bGV2ZWxsaW5nX2NhcCA9PSBsZXZlbGxpbmdfY2FwcykgfHwKPiArCSAgICBjcHVfaGFzX2h5cGVy dmlzb3IpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXByaW50ayhYRU5MT0dfV0FSTklORyAiTWlzbWF0 Y2ggYmV0d2VlbiBleHBlY3RlZCAoJSN4KSAiCj4gKwkgICAgICAgImFuZCByZWFsICglI3gpIGxl dmVsbGluZyBjYXBzOiBtaXNzaW5nICUjeFxuIiwKPiArCSAgICAgICBleHBlY3RlZF9sZXZlbGxp bmdfY2FwLCBsZXZlbGxpbmdfY2FwcywKPiArCSAgICAgICAoZXhwZWN0ZWRfbGV2ZWxsaW5nX2Nh cCBeIGxldmVsbGluZ19jYXBzKSAmIGxldmVsbGluZ19jYXBzKTsKPiArCXByaW50ayhYRU5MT0df V0FSTklORyAiRmFtICUjeCwgbW9kZWwgJSN4IGxldmVsICUjeFxuIiwKPiArCSAgICAgICBjLT54 ODYsIGMtPng4Nl9tb2RlbCwgYy0+Y3B1aWRfbGV2ZWwpOwo+ICsJcHJpbnRrKFhFTkxPR19XQVJO SU5HCj4gKwkgICAgICAgIklmIG5vdCBydW5uaW5nIHZpcnR1YWxpc2VkLCBwbGVhc2UgcmVwb3J0 IGEgYnVnXG4iKTsKCllvdSBhbHJlYWR5IGhhdmUgYW4gY3B1X2hhc19oeXBlcnZpc29yIGNoZWNr IGFib3ZlPyBPciBpcyB0aGF0IGZvcgp0aGUgaHlwZXJ2aXNvciB3aGljaCBkbyBub3Qgc2V0IHRo YXQgYml0PwoKPiArfQo+ICsKPiArLyoKPiArICogQ29udGV4dCBzd2l0Y2ggbGV2ZWxsaW5nIHN0 YXRlIHRvIHRoZSBuZXh0IGRvbWFpbi4gIEEgcGFyYW1ldGVyIG9mIE5VTEwgaXMKPiArICogdXNl ZCB0byBjb250ZXh0IHN3aXRjaCB0byB0aGUgZGVmYXVsdCBob3N0IHN0YXRlLCBhbmQgaXMgdXNl ZCBieSB0aGUgQlNQL0FQCj4gKyAqIHN0YXJ0dXAgY29kZS4KCk9LLCBob3cgYWJvdXQ6Cj4gKyAq Lwo+ICtzdGF0aWMgdm9pZCBhbWRfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKGNvbnN0IHN0cnVjdCBk b21haW4gKm5leHRkKQo+ICt7Cj4gKwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFza3MgPSAm dGhpc19jcHUoY3B1aWRtYXNrcyk7Cj4gKwljb25zdCBzdHJ1Y3QgY3B1aWRtYXNrcyAqbWFza3Mg PSAmY3B1aWRtYXNrX2RlZmF1bHRzOwo+ICsKCglBU1NFUlQoIWQgJiYgc3lzdGVtX3N0YXRlICE9 IFNZU19TVEFURV9hY3RpdmUpOyA/Cgo+ICsjZGVmaW5lIExBWlkoY2FwLCBtc3IsIGZpZWxkKQkJ CQkJCVwKPiArCSh7CQkJCQkJCQlcCj4gKwkJaWYgKHVubGlrZWx5KHRoZXNlX21hc2tzLT5maWVs ZCAhPSBtYXNrcy0+ZmllbGQpICYmCVwKPiArCQkgICAgKChsZXZlbGxpbmdfY2FwcyAmIGNhcCkg PT0gY2FwKSkJCQlcCj4gKwkJewkJCQkJCQlcCj4gKwkJCXdybXNyX2FtZChtc3IsIG1hc2tzLT5m aWVsZCk7CQkJXAo+ICsJCQl0aGVzZV9tYXNrcy0+ZmllbGQgPSBtYXNrcy0+ZmllbGQ7CQlcCj4g KwkJfQkJCQkJCQlcCj4gKwl9KQo+ICsKPiArCUxBWlkoTENBUF8xY2QsICBNU1JfSzhfRkVBVFVS RV9NQVNLLCAgICAgICBfMWNkKTsKPiArCUxBWlkoTENBUF9lMWNkLCBNU1JfSzhfRVhUX0ZFQVRV UkVfTUFTSywgICBlMWNkKTsKPiArCUxBWlkoTENBUF83YWIwLCBNU1JfQU1EX0w3UzBfRkVBVFVS RV9NQVNLLCBfN2FiMCk7Cj4gKwlMQVpZKExDQVBfNmMsICAgTVNSX0FNRF9USFJNX0ZFQVRVUkVf TUFTSywgXzZjKTsKPiArCj4gKyN1bmRlZiBMQVpZCj4gK30KPiArCj4gKy8qCj4gICAqIE1hc2sg dGhlIGZlYXR1cmVzIGFuZCBleHRlbmRlZCBmZWF0dXJlcyByZXR1cm5lZCBieSBDUFVJRC4gIFBh cmFtZXRlcnMgYXJlCj4gICAqIHNldCBmcm9tIHRoZSBib290IGxpbmUgdmlhIHR3byBtZXRob2Rz Ogo+ICAgKgo+ICAgKiAgIDEpIFNwZWNpZmljIHByb2Nlc3NvciByZXZpc2lvbiBzdHJpbmcKPiAg ICogICAyKSBVc2VyLWRlZmluZWQgbWFza3MKPiAgICoKPiAtICogVGhlIHByb2Nlc3NvciByZXZp c2lvbiBzdHJpbmcgcGFyYW1ldGVyIGhhcyBwcmVjZWRlbmUuCj4gKyAqIFRoZSB1c2VyLWRlZmlu ZWQgbWFza3MgdGFrZSBwcmVjZWRlbmNlLgo+ICAgKi8KPiAtc3RhdGljIHZvaWQgc2V0X2NwdWlk bWFzayhjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBu b2lubGluZSBhbWRfaW5pdF9sZXZlbGxpbmcodm9pZCkKPiAgewo+IC0Jc3RhdGljIHVuc2lnbmVk IGludCBmZWF0X2VjeCwgZmVhdF9lZHg7Cj4gLQlzdGF0aWMgdW5zaWduZWQgaW50IGV4dGZlYXRf ZWN4LCBleHRmZWF0X2VkeDsKPiAtCXN0YXRpYyB1bnNpZ25lZCBpbnQgbDdzMF9lYXgsIGw3czBf ZWJ4Owo+IC0Jc3RhdGljIHVuc2lnbmVkIGludCB0aGVybWFsX2VjeDsKPiAtCXN0YXRpYyBib29s X3Qgc2tpcF9mZWF0LCBza2lwX2V4dGZlYXQ7Cj4gLQlzdGF0aWMgYm9vbF90IHNraXBfbDdzMF9l YXhfZWJ4LCBza2lwX3RoZXJtYWxfZWN4Owo+IC0Jc3RhdGljIGVudW0geyBub3RfcGFyc2VkLCBu b19tYXNrLCBzZXRfbWFzayB9IHN0YXR1czsKPiAtCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4 LCBlZHg7Cj4gLQo+IC0JaWYgKHN0YXR1cyA9PSBub19tYXNrKQo+IC0JCXJldHVybjsKPiArCWNv bnN0IHN0cnVjdCBjcHVpZG1hc2sgKm0gPSBOVUxMOwo+ICAKPiAtCWlmIChzdGF0dXMgPT0gc2V0 X21hc2spCj4gLQkJZ290byBzZXRtYXNrOwo+ICsJcHJvYmVfbWFza2luZ19tc3JzKCk7Cj4gIAo+ IC0JQVNTRVJUKChzdGF0dXMgPT0gbm90X3BhcnNlZCkgJiYgKGMgPT0gJmJvb3RfY3B1X2RhdGEp KTsKPiAtCXN0YXR1cyA9IG5vX21hc2s7Cj4gKwlpZiAoKm9wdF9mYW1yZXYgIT0gJ1wwJykgewo+ ICsJCW0gPSBnZXRfY3B1aWRtYXNrKG9wdF9mYW1yZXYpOwo+ICAKPiAtCS8qIEZhbTExIGRvZXNu J3Qgc3VwcG9ydCBtYXNraW5nIGF0IGFsbC4gKi8KPiAtCWlmIChjLT54ODYgPT0gMHgxMSkKPiAt CQlyZXR1cm47Cj4gKwkJaWYgKCFtKQo+ICsJCQlwcmludGsoIkludmFsaWQgcHJvY2Vzc29yIHN0 cmluZzogJXNcbiIsIG9wdF9mYW1yZXYpOwo+ICsJfQo+ICAKPiAtCWlmICh+KG9wdF9jcHVpZF9t YXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCAmCj4gLQkgICAgICBvcHRfY3B1aWRfbWFza19l eHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCAmCj4gLQkgICAgICBvcHRfY3B1aWRfbWFz a19sN3MwX2VheCAmIG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4ICYKPiAtCSAgICAgIG9wdF9jcHVp ZF9tYXNrX3RoZXJtYWxfZWN4KSkgewo+IC0JCWZlYXRfZWN4ID0gb3B0X2NwdWlkX21hc2tfZWN4 Owo+IC0JCWZlYXRfZWR4ID0gb3B0X2NwdWlkX21hc2tfZWR4Owo+IC0JCWV4dGZlYXRfZWN4ID0g b3B0X2NwdWlkX21hc2tfZXh0X2VjeDsKPiAtCQlleHRmZWF0X2VkeCA9IG9wdF9jcHVpZF9tYXNr X2V4dF9lZHg7Cj4gLQkJbDdzMF9lYXggPSBvcHRfY3B1aWRfbWFza19sN3MwX2VheDsKPiAtCQls N3MwX2VieCA9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4Owo+IC0JCXRoZXJtYWxfZWN4ID0gb3B0 X2NwdWlkX21hc2tfdGhlcm1hbF9lY3g7Cj4gLQl9IGVsc2UgaWYgKCpvcHRfZmFtcmV2ID09ICdc MCcpIHsKPiAtCQlyZXR1cm47Cj4gLQl9IGVsc2Ugewo+IC0JCWNvbnN0IHN0cnVjdCBjcHVpZG1h c2sgKm0gPSBnZXRfY3B1aWRtYXNrKG9wdF9mYW1yZXYpOwo+ICsJaWYgKChsZXZlbGxpbmdfY2Fw cyAmIExDQVBfMWNkKSA9PSBMQ0FQXzFjZCkgewo+ICsJCXVpbnQzMl90IGVjeCwgZWR4LCB0bXA7 Cj4gIAo+IC0JCWlmICghbSkgewo+IC0JCQlwcmludGsoIkludmFsaWQgcHJvY2Vzc29yIHN0cmlu ZzogJXNcbiIsIG9wdF9mYW1yZXYpOwo+IC0JCQlwcmludGsoIkNQVUlEIHdpbGwgbm90IGJlIG1h c2tlZFxuIik7Cj4gLQkJCXJldHVybjsKPiArCQljcHVpZCgweDAwMDAwMDAxLCAmdG1wLCAmdG1w LCAmZWN4LCAmZWR4KTsKPiArCj4gKwkJaWYofihvcHRfY3B1aWRfbWFza19lY3ggJiBvcHRfY3B1 aWRfbWFza19lZHgpKSB7CgpXaHkgdGhlIG1pc3Npbmcgc3BhY2U/Cj4gKwkJCWVjeCAmPSBvcHRf Y3B1aWRfbWFza19lY3g7Cj4gKwkJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19lZHg7Cj4gKwkJfSBl bHNlIGlmIChtKSB7Cj4gKwkJCWVjeCAmPSBtLT5lY3g7Cj4gKwkJCWVkeCAmPSBtLT5lZHg7Cj4g IAkJfQo+IC0JCWZlYXRfZWN4ID0gbS0+ZWN4Owo+IC0JCWZlYXRfZWR4ID0gbS0+ZWR4Owo+IC0J CWV4dGZlYXRfZWN4ID0gbS0+ZXh0X2VjeDsKPiAtCQlleHRmZWF0X2VkeCA9IG0tPmV4dF9lZHg7 Cj4gKwo+ICsJCS8qIEZhc3QtZm9yd2FyZCBiaXRzIC0gTXVzdCBiZSBzZXQuICovCj4gKwkJaWYg KGVjeCAmIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9YU0FWRSkpCj4gKwkJCWVjeCB8PSBjcHVm ZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7Cj4gKwkJZWR4IHw9IGNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9BUElDKTsKPiArCj4gKwkJLyogQWxsb3cgdGhlIEhZUEVSVklTT1IgYml0IHRv IGJlIHNldCB2aWEgZ3Vlc3QgcG9saWN5LiAqLwo+ICsJCWVjeCB8PSBjcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfSFlQRVJWSVNPUik7CgpIbW0uIFRoZSBodHRwOi8vc3VwcG9ydC5hbWQuY29tL1Rl Y2hEb2NzLzUyNzQwXzE2aF9Nb2RlbHNfMzBoLTNGaF9CS0RHLnBkZgpwZyA2MjQgbWVudGlvbnMg dGhpcyAoYml0IDYzKSBhcyAnUmVzZXJ2ZWQnLiBTaG91bGQgd2UgcmVhbGx5IHNldCBpdD8KQWgs IGJ1dCB0aGVuIGVhcmxpZXIgKHBnIDUzMCkgaXQgc2F5cyAnUmVzZXJ2ZWQgZm9yIHVzZSBieSBo eXBlcnZpc29yIHRvIGluZGljYXRlCmd1ZXN0IHN0YXR1cy4KCgo+ICsKPiArCQljcHVpZG1hc2tf ZGVmYXVsdHMuXzFjZCA9ICgodWludDY0X3QpZWN4IDw8IDMyKSB8IGVkeDsKCkNvbnNpZGVyaW5n IHRoZSBkb2N1bWVudCBtZW50aW9ucyBSZXNlcnZlZCBzaG91bGQgd2UgcHJlc2VydmUgdGhlIGJp dHMgdGhhdAphcmUgc2V0IGJ5IHRoZSBpbml0aWFsIGNhbGwgdGhhdCBmaWxscyBvdXQgdGhlIGNw dWlkbWFza19kZWZhdWx0PwoKVGhlIG9yaWdpbmFsIGNvZGUgYWxzbyBoYWQ6Cj4gIAl9Cj4gIAo+ IC0gICAgICAgIC8qIFNldHRpbmcgYml0cyBpbiB0aGUgQ1BVSUQgbWFzayBNU1IgdGhhdCBhcmUg bm90IHNldCBpbiB0aGUKPiAtICAgICAgICAgKiB1bm1hc2tlZCBDUFVJRCByZXNwb25zZSBjYW4g Y2F1c2UgdGhvc2UgYml0cyB0byBiZSBzZXQgaW4gdGhlCj4gLSAgICAgICAgICogbWFza2VkIHJl c3BvbnNlLiAgQXZvaWQgdGhhdCBieSBleHBsaWNpdGx5IG1hc2tpbmcgaW4gc29mdHdhcmUuICov CgogdGhhdCBjb21tZW50IGluIGl0LiBXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIGluY2x1ZGUgaXQg KG9yIGEgcmV3b3JrIG9mIGl0IHNpbmNlCkkgd2Fzbid0IGV4YWN0bHkgc3VyZSB3aGF0IGl0IHdh cyBzYXlpbmcpLgoKPiAtICAgICAgICBmZWF0X2VjeCAmPSBjcHVpZF9lY3goMHgwMDAwMDAwMSk7 Cj4gLSAgICAgICAgZmVhdF9lZHggJj0gY3B1aWRfZWR4KDB4MDAwMDAwMDEpOwo+IC0gICAgICAg IGV4dGZlYXRfZWN4ICY9IGNwdWlkX2VjeCgweDgwMDAwMDAxKTsKPiAtICAgICAgICBleHRmZWF0 X2VkeCAmPSBjcHVpZF9lZHgoMHg4MDAwMDAwMSk7Cj4gKwlpZiAoKGxldmVsbGluZ19jYXBzICYg TENBUF9lMWNkKSA9PSBMQ0FQX2UxY2QpIHsKPiArCQl1aW50MzJfdCBlY3gsIGVkeCwgdG1wOwo+ ICAKPiAtCXN0YXR1cyA9IHNldF9tYXNrOwo+IC0JcHJpbnRrKCJXcml0aW5nIENQVUlEIGZlYXR1 cmUgbWFzayBFQ1g6RURYIC0+ICUwOFhoOiUwOFhoXG4iLCAKPiAtCSAgICAgICBmZWF0X2VjeCwg ZmVhdF9lZHgpOwo+IC0JcHJpbnRrKCJXcml0aW5nIENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFz ayBFQ1g6RURYIC0+ICUwOFhoOiUwOFhoXG4iLCAKPiAtCSAgICAgICBleHRmZWF0X2VjeCwgZXh0 ZmVhdF9lZHgpOwo+ICsJCWNwdWlkKDB4ODAwMDAwMDEsICZ0bXAsICZ0bXAsICZlY3gsICZlZHgp Owo+ICAKPiAtCWlmIChjLT5jcHVpZF9sZXZlbCA+PSA3KQo+IC0JCWNwdWlkX2NvdW50KDcsIDAs ICZlYXgsICZlYngsICZlY3gsICZlZHgpOwo+IC0JZWxzZQo+IC0JCWVieCA9IGVheCA9IDA7Cj4g LQlpZiAoKGVheCB8IGVieCkgJiYgfihsN3MwX2VheCAmIGw3czBfZWJ4KSkgewo+IC0JCWlmIChs N3MwX2VheCA+IGVheCkKPiAtCQkJbDdzMF9lYXggPSBlYXg7Cj4gLQkJbDdzMF9lYnggJj0gZWJ4 Owo+IC0JCXByaW50aygiV3JpdGluZyBDUFVJRCBsZWFmIDcgc3VibGVhZiAwIGZlYXR1cmUgbWFz ayBFQVg6RUJYIC0+ICUwOFhoOiUwOFhoXG4iLAo+IC0JCSAgICAgICBsN3MwX2VheCwgbDdzMF9l YngpOwo+IC0JfSBlbHNlCj4gLQkJc2tpcF9sN3MwX2VheF9lYnggPSAxOwo+IC0KPiAtCS8qIE9u bHkgRmFtMTUgaGFzIHRoZSByZXNwZWN0aXZlIE1TUi4gKi8KPiAtCWVjeCA9IGMtPng4NiA9PSAw eDE1ICYmIGMtPmNwdWlkX2xldmVsID49IDYgPyBjcHVpZF9lY3goNikgOiAwOwo+IC0JaWYgKGVj eCAmJiB+dGhlcm1hbF9lY3gpIHsKPiAtCQl0aGVybWFsX2VjeCAmPSBlY3g7Cj4gLQkJcHJpbnRr KCJXcml0aW5nIENQVUlEIHRoZXJtYWwvcG93ZXIgZmVhdHVyZSBtYXNrIEVDWCAtPiAlMDhYaFxu IiwKPiAtCQkgICAgICAgdGhlcm1hbF9lY3gpOwo+IC0JfSBlbHNlCj4gLQkJc2tpcF90aGVybWFs X2VjeCA9IDE7Cj4gLQo+IC0gc2V0bWFzazoKPiAtCS8qIEFNRCBwcm9jZXNzb3JzIHByaW9yIHRv IGZhbWlseSAxMGggcmVxdWlyZWQgYSAzMi1iaXQgcGFzc3dvcmQgKi8KPiAtCWlmICghc2tpcF9m ZWF0ICYmCj4gLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0s4X0ZFQVRVUkVfTUFTSywgZmVhdF9l ZHgsIGZlYXRfZWN4KSkgewo+IC0JCXNraXBfZmVhdCA9IDE7Cj4gLQkJcHJpbnRrKCJGYWlsZWQg dG8gc2V0IENQVUlEIGZlYXR1cmUgbWFza1xuIik7Cj4gKwkJaWYofihvcHRfY3B1aWRfbWFza19l eHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCkpIHsKCkhlcmUgdGhlIHNwYWNlIGxvb2tz IHRvIGJlIG1pc3Npbmc/Cj4gKwkJCWVjeCAmPSBvcHRfY3B1aWRfbWFza19leHRfZWN4Owo+ICsJ CQllZHggJj0gb3B0X2NwdWlkX21hc2tfZXh0X2VkeDsKPiArCQl9IGVsc2UgaWYgKG0pIHsKPiAr CQkJZWN4ICY9IG0tPmV4dF9lY3g7Cj4gKwkJCWVkeCAmPSBtLT5leHRfZWR4Owo+ICsJCX0KPiAr Cj4gKwkJLyogRmFzdC1mb3J3YXJkIGJpdHMgLSBNdXN0IGJlIHNldC4gKi8KPiArCQllZHggfD0g Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0FQSUMpOwo+ICsKPiArCQljcHVpZG1hc2tfZGVmYXVs dHMuZTFjZCA9ICgodWludDY0X3QpZWN4IDw8IDMyKSB8IGVkeDsKClNob3VsZCB0aGlzIGJlICY9 ID8KCj4gIAl9Cj4gIAo+IC0JaWYgKCFza2lwX2V4dGZlYXQgJiYKPiAtCSAgICB3cm1zcl9hbWRf c2FmZShNU1JfSzhfRVhUX0ZFQVRVUkVfTUFTSywgZXh0ZmVhdF9lZHgsIGV4dGZlYXRfZWN4KSkg ewo+IC0JCXNraXBfZXh0ZmVhdCA9IDE7Cj4gLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlE IGV4dGVuZGVkIGZlYXR1cmUgbWFza1xuIik7Cj4gKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENB UF83YWIwKSA9PSBMQ0FQXzdhYjApIHsKPiArCQl1aW50MzJfdCBlYXgsIGVieCwgdG1wOwo+ICsK PiArCQljcHVpZCgweDAwMDAwMDA3LCAmZWF4LCAmZWJ4LCAmdG1wLCAmdG1wKTsKPiArCj4gKwkJ aWYofihvcHRfY3B1aWRfbWFza19sN3MwX2VheCAmIG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4KSkg ewoKRGl0dG8uCj4gKwkJCWVheCAmPSBvcHRfY3B1aWRfbWFza19sN3MwX2VheDsKPiArCQkJZWJ4 ICY9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4Owo+ICsJCX0KPiArCj4gKwkJY3B1aWRtYXNrX2Rl ZmF1bHRzLl83YWIwICY9ICgodWludDY0X3QpZWF4IDw8IDMyKSB8IGVieDsKPiAgCX0KPiAgCj4g LQlpZiAoIXNraXBfbDdzMF9lYXhfZWJ4ICYmCj4gLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0FN RF9MN1MwX0ZFQVRVUkVfTUFTSywgbDdzMF9lYngsIGw3czBfZWF4KSkgewo+IC0JCXNraXBfbDdz MF9lYXhfZWJ4ID0gMTsKPiAtCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgbGVhZiA3IHN1 YmxlYWYgMCBmZWF0dXJlIG1hc2tcbiIpOwo+ICsJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBf NmMpID09IExDQVBfNmMpIHsKPiArCQl1aW50MzJfdCBlY3ggPSBjcHVpZF9lY3goNik7Cj4gKwo+ ICsJCWlmICh+b3B0X2NwdWlkX21hc2tfdGhlcm1hbF9lY3gpCj4gKwkJCWVjeCAmPSBvcHRfY3B1 aWRfbWFza190aGVybWFsX2VjeDsKPiArCj4gKwkJY3B1aWRtYXNrX2RlZmF1bHRzLl82YyAmPSAo fjBVTEwgPDwgMzIpIHwgZWN4OwoKCklzIHRoZXJlIGFueSBkb2N1bWVudGF0aW9uIGFib3V0IHRo aXM/IFRoZSBCS0RHIGZyb20gMDMvMjAxNiBkb2VzIG5vdCBtZW50aW9uCnRoaXMgTVNSIChDMDAx XzEwMDMpLiBBaCBidXQgaXQgaXMgbWVudGlvbmVkIGluIGRvY3MgZm9yIEZhbWlseSAxNXRoLiBI b3cgbmljZS4KCj4gIAl9Lgo+ICAKPiAtCWlmICghc2tpcF90aGVybWFsX2VjeCAmJgo+IC0JICAg IChyZG1zcl9hbWRfc2FmZShNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCAmZWF4LCAmZWR4KSB8 fAo+IC0JICAgICB3cm1zcl9hbWRfc2FmZShNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCB0aGVy bWFsX2VjeCwgZWR4KSkpewo+IC0JCXNraXBfdGhlcm1hbF9lY3ggPSAxOwo+IC0JCXByaW50aygi RmFpbGVkIHRvIHNldCBDUFVJRCB0aGVybWFsL3Bvd2VyIGZlYXR1cmUgbWFza1xuIik7Cj4gKwlp ZiAob3B0X2NwdV9pbmZvKSB7Cj4gKwkJcHJpbnRrKFhFTkxPR19JTkZPICJMZXZlbGxpbmcgY2Fw czogJSN4XG4iLCBsZXZlbGxpbmdfY2Fwcyk7Cj4gKwkJcHJpbnRrKFhFTkxPR19JTkZPCj4gKwkJ ICAgICAgICJNU1IgZGVmYXVsdHM6IDFkIDB4JTA4eCwgMWMgMHglMDh4LCBlMWQgMHglMDh4LCAi Cj4gKwkJICAgICAgICJlMWMgMHglMDh4LCA3YTAgMHglMDh4LCA3YjAgMHglMDh4LCA2YyAweCUw OHhcbiIsCj4gKwkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCwKPiAr CQkgICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCA+PiAzMiksCj4gKwkJ ICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCwKPiArCQkgICAgICAgKHVp bnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCj4gKwkJICAgICAgICh1aW50 MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwID4+IDMyKSwKPiArCQkgICAgICAgKHVpbnQz Ml90KWNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCwKPiArCQkgICAgICAgKHVpbnQzMl90KWNwdWlk bWFza19kZWZhdWx0cy5fNmMpOwoKV2h5IGRvbid0IHlvdSBiaXQgc2hpZnQgY3B1aWRtYXNrX2Rl ZmF1bHRzLl82YyB0b28/Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTQwOSw3ICs0ODgsMTAgQEAgc3Rh dGljIHZvaWQgYW1kX2dldF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCj4gIAo+ICBz dGF0aWMgdm9pZCBlYXJseV9pbml0X2FtZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCj4gIHsKPiAt CXNldF9jcHVpZG1hc2soYyk7Cj4gKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSkKPiArCQlhbWRf aW5pdF9sZXZlbGxpbmcoKTsKPiArCj4gKwlhbWRfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKE5VTEwp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbml0X2FtZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMp Cj4gLS0gCj4gMi4xLjQKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwo+IGh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK