From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v2 05/10] x86/HVM/SVM: Add AVIC initialization code Date: Mon, 2 Jan 2017 16:37:35 +0000 Message-ID: References: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.com> <1483163161-2402-6-git-send-email-suravee.suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1483163161-2402-6-git-send-email-suravee.suthikulpanit@amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Suravee Suthikulpanit , xen-devel@lists.xen.org Cc: boris.ostrovsky@oracle.com, sherry.hurwitz@amd.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org T24gMzEvMTIvMjAxNiAwNTo0NSwgU3VyYXZlZSBTdXRoaWt1bHBhbml0IHdyb3RlOgo+IGRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3N2bS9hdmljLmMgYi94ZW4vYXJjaC94ODYvaHZtL3N2 bS9hdmljLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmI2MmY5ODIK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdm0vYXZpYy5jCj4gQEAg LTAsMCArMSwyMzIgQEAKPiArLyoKPiArICogYXZpYy5jOiBpbXBsZW1lbnRzIEFNRCBBZHZhbmNl IFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFWSUMpIHN1cHBvcnQKPiArICogQ29weXJp Z2h0IChjKSAyMDE2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4gKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP VVQKPiArICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKPiArICogbW9yZSBk ZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCj4gKyAqIHRoaXMgcHJvZ3Jh bTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KPiArI2luY2x1ZGUgPHhlbi9zY2hlZC5o Pgo+ICsjaW5jbHVkZSA8eGVuL3N0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPGFzbS9hY3BpLmg+Cj4g KyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgo+ICsjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+Cj4gKyNp bmNsdWRlIDxhc20vaHZtL2VtdWxhdGUuaD4KPiArI2luY2x1ZGUgPGFzbS9odm0vbmVzdGVkaHZt Lmg+Cj4gKyNpbmNsdWRlIDxhc20vaHZtL3N1cHBvcnQuaD4KPiArI2luY2x1ZGUgPGFzbS9odm0v c3ZtL2F2aWMuaD4KPiArI2luY2x1ZGUgPGFzbS9odm0vdmxhcGljLmg+Cj4gKyNpbmNsdWRlIDxh c20vcDJtLmg+Cj4gKyNpbmNsdWRlIDxhc20vcGFnZS5oPgo+ICsKPiArLyoKPiArICogTm90ZTog Q3VycmVudCBtYXggaW5kZXggYWxsb3dlZCBmb3IgcGh5c2ljYWwgQVBJQyBJRCB0YWJsZSBpcyAy NTUuCj4gKyAqLwo+ICsjZGVmaW5lIEFWSUNfUEhZX0FQSUNfSURfTUFYICAgIDB4RkYKPiArCj4g KyNkZWZpbmUgQVZJQ19ET09SQkVMTCAgICAgICAgICAgMHhjMDAxMDExYgo+ICsKPiArI2RlZmlu ZSBBVklDX0hQQV9TSElGVCAgMTIKPiArI2RlZmluZSBBVklDX0hQQV9NQVNLICAgICAgICAgICAo KCgxVUxMIDw8IDQwKSAtIDEpIDw8IEFWSUNfSFBBX1NISUZUKQoKV2hhdCBkb2VzIHRoaXMgbWFz ayByZXByZXNlbnQ/ICBJIGhhdmUgc3BvdHRlZCBhIHRydW5jYXRpb24gYnVnIGJlbG93LApidXQg aG93IHRvIGZpeCB0aGUgaXNzdWUgZGVwZW5kcyBvbiB0aGUgbWVhbmluZyBvZiB0aGUgbWFzay4K ClRoZSBvbmx5IGxpbWl0cyBJIGNhbiBzZWUgaW4gdGhlIHNwZWMgaXMgdGhhdCB0aGUgaG9zdCBw aHlzaWNhbAphZGRyZXNzZXMgbXVzdCBiZSBwcmVzZW50IGluIHN5c3RlbSBSQU0sIHdoaWNoIHBy ZXN1bWFibHkgbWVhbnMgdGhleQpzaG91bGQgZm9sbG93IG1heHBoeXNhZGRyIGxpa2UgZXZlcnl0 aGluZyBlbHNlPwoKPiArI2RlZmluZSBBVklDX1ZBUElDX0JBUl9NQVNLICAgICBBVklDX0hQQV9N QVNLCj4gKwo+ICsvKgo+ICsgKiBOb3RlOgo+ICsgKiBDdXJyZW50bHksIHN2bS1hdmljIG1vZGUg aXMgbm90IHN1cHBvcnRlZCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4KPiArICogVGhlcmVm b3JlLCBpdCBpcyBub3QgeWV0IGN1cnJlbnRseSBlbmFibGVkIGJ5IGRlZmF1bHQuIE9uY2UgdGhl IHN1cHBvcnQKPiArICogaXMgaW4tcGxhY2UsIHRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVm YXVsdC4KPiArICovCj4gK2Jvb2wgc3ZtX2F2aWMgPSAwOwo+ICtib29sZWFuX3BhcmFtKCJzdm0t YXZpYyIsIHN2bV9hdmljKTsKCldlIGFyZSB0cnlpbmcgdG8gYXZvaWQgdGhlIHByb2xpZmVyYXRp b24gb2YgdG9wLWxldmVsIG9wdGlvbnMuICBQbGVhc2UKY291bGQgeW91IGludHJvZHVjZSBhICJz dm09IiBvcHRpb24gd2hpY2ggdGFrZXMgYXZpYyBhcyBhIHN1Yi1ib29sZWFuLApzaW1pbGFyIHRv IGhvdyBpb21tdT0gY3VycmVudGx5IHdvcmtzPwoKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXZpY19w aHlfYXBpY19pZF9lbnQgKgo+ICthdmljX2dldF9waHlfYXBpY19pZF9lbnQoY29uc3Qgc3RydWN0 IHZjcHUgKnYsIHVuc2lnbmVkIGludCBpbmRleCkKClRoZSBQaHlzaWNhbCBBUElDIHRhYmxlIGlz IHBlci1kb21haW4sIG5vdCBwZXItY3B1IGFjY29yZGluZyB0byB0aGUKc3BlYy4gIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIHRha2UgYSBzdHJ1Y3QgZG9tYWluLCBhbHRob3VnaCBJIGRvbid0IHRoaW5r CnlvdSBuZWVkIGl0IGF0IGFsbCAoc2VlIGJlbG93KS4KCj4gK3sKPiArICAgIHN0cnVjdCBhdmlj X3BoeV9hcGljX2lkX2VudCAqYXZpY19waHlfYXBpY19pZF90YWJsZTsKPiArICAgIHN0cnVjdCBz dm1fZG9tYWluICpkID0gJnYtPmRvbWFpbi0+YXJjaC5odm1fZG9tYWluLnN2bTsKPiArCj4gKyAg ICBpZiAoICFkLT5hdmljX3BoeV9hcGljX2lkX3RhYmxlX21mbiApCj4gKyAgICAgICAgcmV0dXJu IE5VTEw7Cj4gKwo+ICsgICAgLyoKPiArICAgICogTm90ZTogQVBJQyBJRCA9IDB4ZmYgaXMgdXNl ZCBmb3IgYnJvYWRjYXN0Lgo+ICsgICAgKiAgICAgICBBUElDIElEID4gMHhmZiBpcyByZXNlcnZl ZC4KPiArICAgICovCj4gKyAgICBpZiAoIGluZGV4ID49IDB4ZmYgKQo+ICsgICAgICAgIHJldHVy biBOVUxMOwo+ICsKPiArICAgIGF2aWNfcGh5X2FwaWNfaWRfdGFibGUgPSBtZm5fdG9fdmlydChk LT5hdmljX3BoeV9hcGljX2lkX3RhYmxlX21mbik7CgpUaGlzIGlzIHVuc2FmZSBhbmQgd2lsbCBi cmVhayBvbiBob3N0cyB3aXRoIG1vcmUgdGhhbiA1VEIgb2YgUkFNLgoKQXMgeW91IGFsbG9jYXRl IGF2aWNfcGh5X2FwaWNfaWRfdGFibGVfbWZuIHdpdGggYWxsb2NfZG9taGVhcF9wYWdlKCksCnlv dSBtdXN0IHVzZSB7bWFwLHVubWFwfV9kb21haW5fcGFnZSgpIHRvIGdldCB0ZW1wb3JhcnkgbWFw cGluZ3MgKHdoaWNoCndpbGwgdXNlIG1mbl90b192aXJ0KCkgaW4gdGhlIGNvbW1vbiBjYXNlKSwg b3IgdXNlCnttYXAsdW5tYXB9X2RvbWFpbl9wYWdlX2dsb2JhbCgpIHRvIGdldCBwZXJtYW5lbnQg bWFwcGluZ3MuCgpBcyB0aGUgdmFsdWVzIGluIGhlcmUgbmVlZCBtb2RpZnlpbmcgYWNyb3NzIGEg c2NoZWR1bGUsIEkgd291bGQgc3VnZ2VzdAptYWtpbmcgYSBnbG9iYWwgbWFwcGluZyBhdCBjcmVh dGUgdGltZSwgYW5kIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBhCnByb3Blcmx5LXR5cGVkIHBvaW50 ZXIuCgo+ICsKPiArICAgIHJldHVybiAmYXZpY19waHlfYXBpY19pZF90YWJsZVtpbmRleF07Cj4g K30KPiArCj4gK2ludCBzdm1fYXZpY19kb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4g KyAgICBpbnQgcmV0ID0gMDsKPiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnOwo+ICsgICAgdW5z aWduZWQgbG9uZyBtZm47CgptZm5fdCBwbGVhc2UsIHdoaWNoIHdvdWxkIGFsc28gaGlnaGxpZ2h0 IHRoZSB0eXBlIGVycm9yIGluIHN2bV9kb21haW4uCgo+ICsKPiArICAgIGlmICggIXN2bV9hdmlj ICkKPiArICAgICAgICByZXR1cm4gMDsKCnx8ICFoYXNfdmxhcGljKGQpCgpIVk1MaXRlIGRvbWFp bnMgbWF5IGxlZ2l0aW1hdGVseSBiZSBjb25maWd1cmVkIHdpdGhvdXQgYW4gTEFQSUMgYXQgYWxs LgoKPiArCj4gKyAgICAvKgo+ICsgICAgICogTm90ZToKPiArICAgICAqIEFWSUMgaGFyZHdhcmUg d2Fsa3MgdGhlIG5lc3RlZCBwYWdlIHRhYmxlIHRvIGNoZWNrIHBlcm1pc3Npb25zLAo+ICsgICAg ICogYnV0IGRvZXMgbm90IHVzZSB0aGUgU1BBIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBsZWFm IHBhZ2UKPiArICAgICAqIHRhYmxlIGVudHJ5IHNpbmNlIGl0IHVzZXMgIGFkZHJlc3MgaW4gdGhl IEFWSUNfQkFDS0lOR19QQUdFIHBvaW50ZXIKPiArICAgICAqIGZpZWxkIG9mIHRoZSBWTUNCLiBU aGVyZWZvcmUsIHdlIHNldCB1cCBhIGR1bW15IHBhZ2UgZm9yIEFQSUMgX21mbigwKS4KPiArICAg ICAqLwo+ICsgICAgaWYgKCAhZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2FjY2Vzc19wYWdl X2RvbmUgKQo+ICsgICAgewo+ICsgICAgICAgIHNldF9tbWlvX3AybV9lbnRyeShkLCBwYWRkcl90 b19wZm4oQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9tZm4oMCksIFBBR0VfT1JERVJfNEssCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHAybV9nZXRfaG9zdHAybShkKS0+ZGVmYXVsdF9hY2Nlc3MpOwo+ICsgICAgICAgIGQtPmFyY2gu aHZtX2RvbWFpbi5zdm0uYXZpY19hY2Nlc3NfcGFnZV9kb25lID0gdHJ1ZTsKCkkgZG9uJ3Qgc2Vl IHRoZSBwdXJwb3NlIG9mIHRoaXMgYXZpY19hY2Nlc3NfcGFnZV9kb25lIGJvb2xlYW4sIGV2ZW4g aW4KbGF0ZXIgcGF0Y2hlcy4KCj4gKyAgICB9Cj4gKwo+ICsgICAgLyogSW5pdCBBVklDIGxvZ2lj YWwgQVBJQyBJRCB0YWJsZSAqLwo+ICsgICAgcGcgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgTUVN Rl9ub19vd25lcik7Cj4gKyAgICBpZiAoICFwZyApCj4gKyAgICB7Cj4gKyAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICIlZDogQVZJQyBsb2dpY2FsIEFQSUMg SUQgdGFibGUgY291bGQgbm90IGJlIGFsbG9jYXRlZC5cbiIsCj4gKyAgICAgICAgICAgICAgICBk LT5kb21haW5faWQpOwoKRG8gd2UgcmVhbGx5IG5lZWQgdG8gaGF2ZSBhIHByaW50aygpIGluIHRo ZSAtRU5PTUVNIGNhc2U/ICBJJ2QKcGVyc29uYWxseSBub3QgYm90aGVyLgoKPiArICAgICAgICBy ZXQgPSAtRU5PTUVNOwo+ICsgICAgICAgIGdvdG8gZXJyX291dDsKPiArICAgIH0KPiArICAgIG1m biA9IHBhZ2VfdG9fbWZuKHBnKTsKPiArICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7 Cj4gKyAgICBkLT5hcmNoLmh2bV9kb21haW4uc3ZtLmF2aWNfbG9nX2FwaWNfaWRfdGFibGVfbWZu ID0gbWZuOwo+ICsKPiArICAgIC8qIEluaXQgQVZJQyBwaHlzaWNhbCBBUElDIElEIHRhYmxlICov Cj4gKyAgICBwZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCBNRU1GX25vX293bmVyKTsKPiArICAg IGlmICggIXBnICkKPiArICAgIHsKPiArICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJSLAo+ICsg ICAgICAgICAgICAgICAgIiVkOiBBVklDIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgY291bGQgbm90 IGJlIGFsbG9jYXRlZC5cbiIsCj4gKyAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOwo+ICsg ICAgICAgIHJldCA9IC1FTk9NRU07Cj4gKyAgICAgICAgZ290byBlcnJfb3V0Owo+ICsgICAgfQo+ ICsgICAgbWZuID0gcGFnZV90b19tZm4ocGcpOwo+ICsgICAgY2xlYXJfZG9tYWluX3BhZ2UoX21m bihtZm4pKTsKPiArICAgIGQtPmFyY2guaHZtX2RvbWFpbi5zdm0uYXZpY19waHlfYXBpY19pZF90 YWJsZV9tZm4gPSBtZm47Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArIGVycl9vdXQ6Cj4gKyAg ICBzdm1fYXZpY19kb21fZGVzdHJveShkKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g K3ZvaWQgc3ZtX2F2aWNfZG9tX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsgICAg aWYgKCAhc3ZtX2F2aWMgKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBpZiAoIGQtPmFy Y2guaHZtX2RvbWFpbi5zdm0uYXZpY19waHlfYXBpY19pZF90YWJsZV9tZm4gKQo+ICsgICAgewo+ ICsgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKG1mbl90b19wYWdlKGQtPmFyY2guaHZtX2RvbWFp bi5zdm0uYXZpY19waHlfYXBpY19pZF90YWJsZV9tZm4pKTsKPiArICAgICAgICBkLT5hcmNoLmh2 bV9kb21haW4uc3ZtLmF2aWNfcGh5X2FwaWNfaWRfdGFibGVfbWZuID0gMDsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIGQtPmFyY2guaHZtX2RvbWFpbi5zdm0uYXZpY19sb2dfYXBpY19pZF90YWJs ZV9tZm4gKQo+ICsgICAgewo+ICsgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKG1mbl90b19wYWdl KGQtPmFyY2guaHZtX2RvbWFpbi5zdm0uYXZpY19sb2dfYXBpY19pZF90YWJsZV9tZm4pKTsKPiAr ICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4uc3ZtLmF2aWNfbG9nX2FwaWNfaWRfdGFibGVfbWZu ID0gMDsKPiArICAgIH0KPiArfQo+ICsKPiArYm9vbCBzdm1fYXZpY192Y3B1X2VuYWJsZWQoY29u c3Qgc3RydWN0IHZjcHUgKnYpCj4gK3sKPiArICAgIGNvbnN0IHN0cnVjdCBhcmNoX3N2bV9zdHJ1 Y3QgKnMgPSAmdi0+YXJjaC5odm1fc3ZtOwo+ICsgICAgY29uc3Qgc3RydWN0IHZtY2Jfc3RydWN0 ICp2bWNiID0gcy0+dm1jYjsKPiArCj4gKyAgICByZXR1cm4gc3ZtX2F2aWMgJiYgdm1jYi0+X3Zp bnRyLmZpZWxkcy5hdmljX2VuYWJsZTsKClRoaXMgcHJlZGljYXRlIHNob3VsZCBqdXN0IGJlIG9u IGF2aWNfZW5hYmxlLiAgVGhlIHN2bV9hdmljIGNhc2Ugc2hvdWxkCnByZXZlbnQgdGhlIGF2aWNf ZW5hYmxlIGZyb20gYmVpbmcgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS4KCj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdTMyICoKPiArYXZpY19nZXRfYmtfcGFnZV9lbnRyeShjb25zdCBzdHJ1Y3Qg dmNwdSAqdiwgdTMyIG9mZnNldCkKPiArewo+ICsgICAgY29uc3Qgc3RydWN0IHZsYXBpYyAqdmxh cGljID0gdmNwdV92bGFwaWModik7Cj4gKyAgICBjaGFyICp0bXA7Cj4gKwo+ICsgICAgaWYgKCAh dmxhcGljIHx8ICF2bGFwaWMtPnJlZ3NfcGFnZSApCj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4g Kwo+ICsgICAgdG1wID0gKGNoYXIgKilwYWdlX3RvX3ZpcnQodmxhcGljLT5yZWdzX3BhZ2UpOwo+ ICsgICAgcmV0dXJuICh1MzIgKikodG1wICsgb2Zmc2V0KTsKClRoaXMgaXMgYWxzbyB1bnNhZmUg b3ZlciA1VEIuICB2bGFwaWMtPnJlZ3MgaXMgYWxyZWFkeSBhIGdsb2JhbCBtYXBwaW5nCndoaWNo IHlvdSBzaG91bGQgdXNlLgoKQWxzbywgeW91IHNob3VsZCBsZWF2ZSBhIGNvbW1lbnQgYnkgdGhl IGFsbG9jYXRpb24gb2YgcmVnc19wYWdlIHRoYXQKQVZJQyBkZXBlbmRzIG9uIGl0IGJlaW5nIGEg ZnVsbCBwYWdlIGFsbG9jYXRpb24uCgo+ICt9Cj4gKwo+ICt2b2lkIHN2bV9hdmljX3VwZGF0ZV92 YXBpY19iYXIoY29uc3Qgc3RydWN0IHZjcHUgKnYsIHVpbnQ2NF90IGRhdGEpCj4gK3sKPiArICAg IGNvbnN0IHN0cnVjdCBhcmNoX3N2bV9zdHJ1Y3QgKnMgPSAmdi0+YXJjaC5odm1fc3ZtOwo+ICsK PiArICAgIHMtPnZtY2ItPmF2aWNfdmFwaWNfYmFyID0gZGF0YSAmIEFWSUNfVkFQSUNfQkFSX01B U0s7Cj4gKyAgICBzLT52bWNiLT5jbGVhbmJpdHMuZmllbGRzLmF2aWMgPSAwOwoKV2hpbGUgSSBj YW4gYXBwcmVjaWF0ZSB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvIGhlcmUsIGFsdGVyaW5nIHRo ZQpwaHlzaWNhbCBhZGRyZXNzIGluIElBMzJfQVBJQ0JBU0UgaGFzIG5ldmVyIGZ1bmN0aW9uZWQg cHJvcGVybHkgdW5kZXIKWGVuLCBhcyBub3RoaW5nIHVwZGF0ZXMgdGhlIFAyTS4gIFdvcnNlLCB3 aXRoIG11bHRpLXZjcHUgZ3Vlc3RzLCB0aGUgdXNlCm9mIGEgc2luZ2xlIHNoYXJlZCBwMm0gbWFr ZXMgdGhpcyBpbXBvc3NpYmxlIHRvIGRvIHByb3Blcmx5LgoKSSBrbm93IGl0IGlzIG5vbi1hcmNo aXRlY3R1cmFsIGJlaGF2aW91ciwgYnV0IElNTyB2bGFwaWNfbXNyX3NldCgpCnNob3VsZCBiZSB1 cGRhdGVkIHRvIHJhaXNlICNHUFswXSB3aGVuIGF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBmcmFt ZSwKdG8gbWFrZSBpdCBmYWlsIG9idmlvdXNseSByYXRoZXIgdGhhbiBoYXZpbmcgaW50ZXJydXB0 cyBnbyBtaXNzaW5nLgoKQWxzbyBJIHNlZSB0aGF0IHRoZSBJbnRlbCBzaWRlICh2aWEgdm14X3Zs YXBpY19tc3JfY2hhbmdlZCgpKSBtYWtlcyB0aGUKc2FtZSBtaXN0YWtlLgoKPiArfQo+ICsKPiAr aW50IHN2bV9hdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdSAqdikKPiArewo+ICsgICAgcGFkZHJf dCBtYTsKPiArICAgIHUzMiAqYXBpY19pZF9yZWc7Cj4gKyAgICBzdHJ1Y3QgYXJjaF9zdm1fc3Ry dWN0ICpzID0gJnYtPmFyY2guaHZtX3N2bTsKPiArICAgIHN0cnVjdCB2bWNiX3N0cnVjdCAqdm1j YiA9IHMtPnZtY2I7Cj4gKyAgICBzdHJ1Y3Qgc3ZtX2RvbWFpbiAqZCA9ICZ2LT5kb21haW4tPmFy Y2guaHZtX2RvbWFpbi5zdm07Cj4gKyAgICBjb25zdCBzdHJ1Y3QgdmxhcGljICp2bGFwaWMgPSB2 Y3B1X3ZsYXBpYyh2KTsKPiArICAgIHN0cnVjdCBhdmljX3BoeV9hcGljX2lkX2VudCBlbnRyeTsK PiArCj4gKyAgICBpZiAoICFzdm1fYXZpYyApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsg ICAgaWYgKCAhdmxhcGljIHx8ICF2bGFwaWMtPnJlZ3NfcGFnZSApCj4gKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CgpTb21ld2hlcmUgeW91IG5lZWQgYSBib3VuZHMgY2hlY2sgYWdhaW5zdCB0aGUg QVBJQyBJRCBiZWluZyB3aXRoaW4gQVZJQwpsaW1pdHMuCgo+ICsKPiArICAgIGFwaWNfaWRfcmVn ID0gYXZpY19nZXRfYmtfcGFnZV9lbnRyeSh2LCBBUElDX0lEKTsKPiArICAgIGlmICggIWFwaWNf aWRfcmVnICkKPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKClRoaXMgc2hvdWxkIGJlIHZsYXBp Y19yZWFkKCkuLi4KCj4gKwo+ICsgICAgcy0+YXZpY19sYXN0X3BoeV9pZCA9IGF2aWNfZ2V0X3Bo eV9hcGljX2lkX2VudCh2LCAqYXBpY19pZF9yZWcgPj4gMjQpOwoKQW5kIHRoaXMsIEdFVF94QVBJ Q19JRCgpLAoKPiArICAgIGlmICggIXMtPmF2aWNfbGFzdF9waHlfaWQgKQo+ICsgICAgICAgIHJl dHVybiAtRUlOVkFMOwoKV2h5IGRvZXMgYSBwb2ludGVyIGludG8gdGhlIHBoeXNpY2FsIElEIHBh Z2UgbmVlZCBzdG9yaW5nIGluCmFyY2hfc3ZtX3N0cnVjdD8KCj4gKwo+ICsgICAgdm1jYi0+YXZp Y19ia19wZ19wYSA9IHBhZ2VfdG9fbWFkZHIodmxhcGljLT5yZWdzX3BhZ2UpICYgQVZJQ19IUEFf TUFTSzsKClRoaXMgdXNlIG9mIEFWSUNfSFBBX01BU0sgbWF5IHRydW5jYXRlIHRoZSB0aGUgYWRk cmVzcywgd2hpY2ggaXMKZGVmaW5pdGVseSBhIHByb2JsZW0uCgpJZiBBVklDX0hQQV9NQVNLIGlz bid0IGp1c3QgcmVsYXRlZCB0byBtYXhwaHlzYWRkciwgdGhlbiB5b3UgbmVlZCB0bwpwYXNzIGFw cHJvcHJpYXRlIG1lbWZsYWdzIGludG8gdGhlIGFsbG9jX2RvbWhlYXBfcGFnZSgpIGNhbGxzIHRv IGdldCBhCnN1aXRhYmxlIHBhZ2UuCgo+ICsgICAgbWEgPSBkLT5hdmljX2xvZ19hcGljX2lkX3Rh YmxlX21mbjsKPiArICAgIHZtY2ItPmF2aWNfbG9nX2FwaWNfaWQgPSAobWEgPDwgUEFHRV9TSElG VCkgJiBBVklDX0hQQV9NQVNLOwoKVGhpcyBtYSA8PCBQQUdFX1NISUZUIGFsc28gaGlnaGxpZ2h0 cyB0aGUgdHlwZSBlcnJvci4gIG1hICE9IG1mbi4KCj4gKyAgICBtYSA9IGQtPmF2aWNfcGh5X2Fw aWNfaWRfdGFibGVfbWZuOwo+ICsgICAgdm1jYi0+YXZpY19waHlfYXBpY19pZCA9IChtYSA8PCBQ QUdFX1NISUZUKSAmIEFWSUNfSFBBX01BU0s7Cj4gKyAgICB2bWNiLT5hdmljX3BoeV9hcGljX2lk IHw9IEFWSUNfUEhZX0FQSUNfSURfTUFYOwoKU3VyZWx5IHRoaXMgc2hvdWxkIGJlIHNvbWUgY2Fs Y3VsYXRpb24gZGVyaXZlZCBmcm9tIGQtPm1heF92Y3B1cz8KCj4gKwo+ICsgICAgZW50cnkgPSAq KHMtPmF2aWNfbGFzdF9waHlfaWQpOwo+ICsgICAgc21wX3JtYigpOwo+ICsgICAgZW50cnkuYmtf cGdfcHRyID0gKHZtY2ItPmF2aWNfYmtfcGdfcGEgJiBBVklDX0hQQV9NQVNLKSA+PiBBVklDX0hQ QV9TSElGVDsKPiArICAgIGVudHJ5LmlzX3J1bm5pbmcgPSAwOwo+ICsgICAgZW50cnkudmFsaWQg PSAxOwo+ICsgICAgKihzLT5hdmljX2xhc3RfcGh5X2lkKSA9IGVudHJ5Owo+ICsgICAgc21wX3dt YigpOwoKRHVyaW5nIGRvbWFpbiBjcmVhdGlvbiwgbm8gZ3Vlc3RzIGFyZSBydW5uaW5nLCBzbyB5 b3UgY2FuIGVkaXQgdGhpcyBjbGVhbmx5LgoKV2hhdCB2YWx1ZXMgYXJlIGFjdHVhbGx5IGJlaW5n IGV4Y2x1ZGVkIGhlcmU/ICBUaGlzLCBhbmQgb3RoZXIgcGF0Y2hlcywKbG9vayBsaWtlIHlvdSBh cmUgYWN0dWFsbHkganVzdCB0cnlpbmcgdG8gZG8gYSByZWFkX2F0b21pYygpLCBtb2RpZnksCndy aXRlX2F0b21pYygpIHVwZGF0ZSwgcmF0aGVyIHRoYW4gYWN0dWFsbHkgcmVxdWlyaW5nIG9yZGVy aW5nLgoKPiArCj4gKyAgICBzdm1fYXZpY191cGRhdGVfdmFwaWNfYmFyKHYsIEFQSUNfREVGQVVM VF9QSFlTX0JBU0UpOwo+ICsKPiArICAgIHZtY2ItPl92aW50ci5maWVsZHMuYXZpY19lbmFibGUg PSAxOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJp YWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBjLWJh c2ljLW9mZnNldDogNAo+ICsgKiB0YWItd2lkdGg6IDQKPiArICogaW5kZW50LXRhYnMtbW9kZTog bmlsCj4gKyAqIEVuZDoKPiArICovCj4gQEAgLTE3OTksNiArMTgwMiwxMCBAQCBzdGF0aWMgaW50 IHN2bV9tc3Jfd3JpdGVfaW50ZXJjZXB0KHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2NF90IG1zcl9j b250ZW50KQo+ICAKPiAgICAgIHN3aXRjaCAoIG1zciApCj4gICAgICB7Cj4gKyAgICBjYXNlIE1T Ul9JQTMyX0FQSUNCQVNFOgo+ICsgICAgICAgIGlmICggc3ZtX2F2aWNfdmNwdV9lbmFibGVkKHYp ICkKPiArICAgICAgICAgICAgc3ZtX2F2aWNfdXBkYXRlX3ZhcGljX2Jhcih2LCBtc3JfY29udGVu dCk7Cj4gKyAgICAgICAgYnJlYWs7CgpJIHRoaW5rIHRoaXMgaXMgZGVhZCBjb2RlLiAgTVNSX0lB MzJfQVBJQ0JBU0UgaXMgaGFuZGxlZCBpbgpodm1fbXNyX3dyaXRlX2ludGVyY2VwdCgpLCBhbmQg d29uJ3QgZmFsbCBpbnRvIHRoZSB2ZW5kb3IgaG9vay4gIElmIHlvdQp3ZXJlIHRvIGNvbnRpbnVl IGRvd24gdGhpcyByb3V0ZSwgSSB3b3VsZCBhZGQgYW5vdGhlciBwaV9vcHMgaG9vaywgYW5kCnJl cGxhY2UgdGhlIFZNWCBsYXllcmluZyB2aW9sYXRpb24gaW4gdmxhcGljX21zcl9zZXQoKS4KCj4g ICAgICBjYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0NTOgo+ICAgICAgY2FzZSBNU1JfSUEzMl9TWVNF TlRFUl9FU1A6Cj4gICAgICBjYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VJUDoKPiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2F2aWMuaCBiL3hlbi9pbmNsdWRlL2FzbS14 ODYvaHZtL3N2bS9hdmljLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LjE2YjQzM2MKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0v c3ZtL2F2aWMuaAo+IEBAIC0wLDAgKzEsNDAgQEAKPiArI2lmbmRlZiBfU1ZNX0FWSUNfSF8KPiAr I2RlZmluZSBfU1ZNX0FWSUNfSF8KPiArCj4gK2VudW0gYXZpY19pbmNtcF9pcGlfZXJyX2NvZGUg ewo+ICsgICAgQVZJQ19JTkNNUF9JUElfRVJSX0lOVkFMSURfSU5UX1RZUEUsCj4gKyAgICBBVklD X0lOQ01QX0lQSV9FUlJfVEFSR0VUX05PVF9SVU4sCj4gKyAgICBBVklDX0lOQ01QX0lQSV9FUlJf SU5WX1RBUkdFVCwKPiArICAgIEFWSUNfSU5DTVBfSVBJX0VSUl9JTlZfQktfUEFHRSwKPiArfTsK PiArCj4gK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCgpQbGVhc2UgaW5jbHVk ZSB4ZW4vY29tcGlsZXIuaCBhbmQgdXNlIF9fcGFja2VkCgo+ICthdmljX2xvZ19hcGljX2lkX2Vu dCB7Cj4gKyAgICB1MzIgZ3Vlc3RfcGh5X2FwaWNfaWQgOiA4Owo+ICsgICAgdTMyIHJlcyAgICAg ICAgICAgICAgIDogMjM7Cj4gKyAgICB1MzIgdmFsaWQgICAgICAgICAgICAgOiAxOwo+ICt9Owo+ ICsKPiArc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKPiArYXZpY19waHlfYXBp Y19pZF9lbnQgewo+ICsgICAgdTY0IGhvc3RfcGh5X2FwaWNfaWQgIDogODsKPiArICAgIHU2NCBy ZXMxICAgICAgICAgICAgICA6IDQ7Cj4gKyAgICB1NjQgYmtfcGdfcHRyICAgICAgICAgOiA0MDsK ClRoaXMgZmllbGQgc2hvdWxkIGhhdmUgbWZuIGluIGl0cyBuYW1lLCBhcyBpdCBoYXMgYW4gaW1w bGljaXQgc2hpZnQgaW4KaXRzIGRlZmluaXRpb24uCgo+ICsgICAgdTY0IHJlczIgICAgICAgICAg ICAgIDogMTA7Cj4gKyAgICB1NjQgaXNfcnVubmluZyAgICAgICAgOiAxOwo+ICsgICAgdTY0IHZh bGlkICAgICAgICAgICAgIDogMTsKPiArfTsKPiA8c25pcD4KPiBkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL3ZtY2IuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3N2 bS92bWNiLmgKPiBpbmRleCA0M2NiOThlLi5kM2QwNDVmIDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3N2bS92bWNiLmgKPiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2 bS9zdm0vdm1jYi5oCj4gQEAgLTQ5Niw2ICs0OTYsMjQgQEAgc3RydWN0IF9fcGFja2VkIHZtY2Jf c3RydWN0IHsKPiAgfTsKPiAgCj4gIHN0cnVjdCBzdm1fZG9tYWluIHsKPiArICAgIC8qCj4gKyAg ICAgKiBUaGlzIHBlci1kb21haW4gdGFibGUgaXMgdXNlZCBieSB0aGUgaGFyZHdhcmUgdG8gbG9j YXRlCj4gKyAgICAgKiB0aGUgdkFQSUMgYmFja2luZyBwYWdlIHRvIGJlIHVzZWQgdG8gZGVsaXZl ciBpbnRlcnJ1cHRzCj4gKyAgICAgKiBiYXNlZCBvbiB0aGUgZ3Vlc3QgcGh5c2ljYWwgQVBJQyBJ RC4KPiArICAgICAqLwo+ICsgICAgcGFkZHJfdCBhdmljX3BoeV9hcGljX2lkX3RhYmxlX21mbjsK CnBhZGRycyBhbmQgbWZucyBkaWZmZXIgYnkgUEFHRV9TSElGVC4gIFBsZWFzZSB1c2UgbWZuX3Qg aGVyZS4KCj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRoaXMgcGVyLWRvbWFpbiB0YWJsZSBpcyB1 c2VkIGJ5IHRoZSBoYXJkd2FyZSB0byBtYXAKPiArICAgICAqIGxvZ2ljYWxseSBhZGRyZXNzZWQg aW50ZXJydXB0IHJlcXVlc3RzICh3LyBndWVzdCBsb2dpY2FsIEFQSUMgaWQpCj4gKyAgICAgKiB0 byB0aGUgZ3Vlc3QgcGh5c2ljYWwgQVBJQyBJRC4KPiArICAgICAqLwo+ICsgICAgcGFkZHJfdCBh dmljX2xvZ19hcGljX2lkX3RhYmxlX21mbjsKPiArCj4gKyAgICB1MzIgYXZpY19tYXhfdmNwdV9p ZDsKPiArICAgIGJvb2wgYXZpY19hY2Nlc3NfcGFnZV9kb25lOwo+ICsgICAgc3BpbmxvY2tfdCBh dmljX2xkcl9tb2RlX2xvY2s7CgpZb3UgaW50cm9kdWNlIHRoZSBzcGlubG9jayBoZXJlLCBidXQg aW5pdGlhbGlzZSBpdCBpbiB0aGUgc3Vic2VxdWVudApwYXRjaC4gIEkgc3VzcGVjdCB0aGF0IGh1 bmsgd2FudHMgbW92aW5nIGludG8gdGhpcyBwYXRjaD8KCn5BbmRyZXcKCj4gKyAgICB1MzIgYXZp Y19sZHJfbW9kZTsKPiAgfTsKPiAgCj4gIHN0cnVjdCBhcmNoX3N2bV9zdHJ1Y3QgewoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=