From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v2 06/10] x86/SVM: Add AVIC vmexit handlers Date: Mon, 2 Jan 2017 17:28:48 +0000 Message-ID: References: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.com> <1483163161-2402-7-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-7-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+IFZNRVhJ VF9ET19OT0FDQ0VMOgo+IFRoaXMgb29jdXJzIHdoZW4gYSBndWVzdCBhY2Nlc3MgdG8gYW4gQVBJ QyByZWdpc3RlciB0aGF0IGNhbm5vdCBiZQoKIm9jY3VycyIKCj4gYWNjZWxlcmF0ZWQgYnkgQVZJ Qy4gSW4gdGhpcyBjYXNlLCBYZW4gdHJpZXMgdG8gZW11bGF0ZSByZWdpc3RlciBhY2Nlc3Nlcy4K Pgo+IFRoaXMgZmF1bHQgaXMgYWxzbyBnZW5lcmF0ZWQgaWYgYW4gRU9JIGlzYXR0ZW1wdGVkIHdo ZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkKCiJpcyBhdHRlbXB0ZWQiCgo+IEBAIC0xMjIsNiArMTI1 LDggQEAgaW50IHN2bV9hdmljX2RvbV9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4gICAgICBjbGVh cl9kb21haW5fcGFnZShfbWZuKG1mbikpOwo+ICAgICAgZC0+YXJjaC5odm1fZG9tYWluLnN2bS5h dmljX3BoeV9hcGljX2lkX3RhYmxlX21mbiA9IG1mbjsKPiAgCj4gKyAgICBzcGluX2xvY2tfaW5p dCgmZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2xkcl9tb2RlX2xvY2spOwo+ICsKCkkgdGhp bmsgdGhpcyBodW5rIGJlbG9uZ3MgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgoKPiAgICAgIHJldHVy biByZXQ7Cj4gICBlcnJfb3V0Ogo+ICAgICAgc3ZtX2F2aWNfZG9tX2Rlc3Ryb3koZCk7Cj4gQEAg LTIyMiw2ICsyMjcsMzM4IEBAIGludCBzdm1fYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHUgKnYp Cj4gIH0KPiAgCj4gIC8qCj4gKyAqIE5vdGU6Cj4gKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0 aGUgQVZJQ19JTkNPTVBfSVBJICN2bWV4aXQgd2hlbiBBVklDIGlzIGVuYWJsZWQuCj4gKyAqIFRo ZSBoYXJkd2FyZSBnZW5lcmF0ZXMgdGhpcyBmYXVsdCB3aGVuIGFuIElQSSBjb3VsZCBub3QgYmUg ZGVsaXZlcmVkCj4gKyAqIHRvIGFsbCB0YXJnZXRlZCBndWVzdCB2aXJ0dWFsIHByb2Nlc3NvcnMg YmVjYXVzZSBhdCBsZWFzdCBvbmUgZ3Vlc3QKPiArICogdmlydHVhbCBwcm9jZXNzb3Igd2FzIG5v dCBhbGxvY2F0ZWQgdG8gYSBwaHlzaWNhbCBjb3JlIGF0IHRoZSB0aW1lLgo+ICsgKi8KPiArdm9p ZCBzdm1fYXZpY192bWV4aXRfZG9faW5jb21wX2lwaShzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKPiArewo+ICsgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owo+ICsgICAgc3RydWN0 IHZtY2Jfc3RydWN0ICp2bWNiID0gY3Vyci0+YXJjaC5odm1fc3ZtLnZtY2I7Cj4gKyAgICB1MzIg aWNyaCA9IHZtY2ItPmV4aXRpbmZvMSA+PiAzMjsKPiArICAgIHUzMiBpY3JsID0gdm1jYi0+ZXhp dGluZm8xOwo+ICsgICAgdTMyIGlkID0gdm1jYi0+ZXhpdGluZm8yID4+IDMyOwo+ICsgICAgdTMy IGluZGV4ID0gdm1jYi0+ZXhpdGluZm8yICYmIDB4RkY7Cj4gKwo+ICsgICAgc3dpdGNoICggaWQg KQo+ICsgICAgewo+ICsgICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfSU5WQUxJRF9JTlRfVFlQ RToKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIEFWSUMgaGFyZHdhcmUgaGFuZGxlcyB0aGUg ZGVsaXZlcnkgb2YKPiArICAgICAgICAgKiBJUElzIHdoZW4gdGhlIHNwZWNpZmllZCBNZXNzYWdl IFR5cGUgaXMgRml4ZWQKPiArICAgICAgICAgKiAoYWxzbyBrbm93biBhcyBmaXhlZCBkZWxpdmVy eSBtb2RlKSBhbmQKPiArICAgICAgICAgKiB0aGUgVHJpZ2dlciBNb2RlIGlzIGVkZ2UtdHJpZ2dl cmVkLiBUaGUgaGFyZHdhcmUKPiArICAgICAgICAgKiBhbHNvIHN1cHBvcnRzIHNlbGYgYW5kIGJy b2FkY2FzdCBkZWxpdmVyeSBtb2Rlcwo+ICsgICAgICAgICAqIHNwZWNpZmllZCB2aWEgdGhlIERl c3RpbmF0aW9uIFNob3J0aGFuZChEU0gpCj4gKyAgICAgICAgICogZmllbGQgb2YgdGhlIElDUkwu IExvZ2ljYWwgYW5kIHBoeXNpY2FsIEFQSUMgSUQKPiArICAgICAgICAgKiBmb3JtYXRzIGFyZSBz dXBwb3J0ZWQuIEFsbCBvdGhlciBJUEkgdHlwZXMgY2F1c2UKPiArICAgICAgICAgKiBhICNWTUVY SVQsIHdoaWNoIG5lZWRzIHRvIGVtdWxhdGVkLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHZs YXBpY19yZWdfd3JpdGUoY3VyciwgQVBJQ19JQ1IyLCBpY3JoKTsKPiArICAgICAgICB2bGFwaWNf cmVnX3dyaXRlKGN1cnIsIEFQSUNfSUNSLCBpY3JsKTsKPiArICAgICAgICBicmVhazsKClBsZWFz ZSBoYXZlIGEgbmV3bGluZSBiZXR3ZWVuIGJyZWFrIGFuZCBjYXNlLgoKPiArICAgIGNhc2UgQVZJ Q19JTkNNUF9JUElfRVJSX1RBUkdFVF9OT1RfUlVOOgo+ICsgICAgewo+ICsgICAgICAgIC8qCj4g KyAgICAgICAgICogQXQgdGhpcyBwb2ludCwgd2UgZXhwZWN0IHRoYXQgdGhlIEFWSUMgSFcgaGFz IGFscmVhZHkKPiArICAgICAgICAgKiBzZXQgdGhlIGFwcHJvcHJpYXRlIElSUiBiaXRzIG9uIHRo ZSB2YWxpZCB0YXJnZXQKPiArICAgICAgICAgKiB2Y3B1cy4gU28sIHdlIGp1c3QgbmVlZCB0byBr aWNrIHRoZSBhcHByb3ByaWF0ZSB2Y3B1Lgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHN0cnVj dCB2Y3B1ICpjdXJjOwo+ICsgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cmQgPSBjdXJyLT5kb21h aW47CgpjdXJyZCBpcyB0aGUgbW9yZSBjb21tb24gbmFtZSBmb3IgdGhpcywgYW5kIEkgd291bGQg dXNlIGEgcGxhaW4gdgppbnN0ZWFkIG9mIGN1cmMgYXMgaXQgaXNuJ3QgY3Vyci4KCj4gKyAgICAg ICAgdWludDMyX3QgZGVzdCA9IEdFVF94QVBJQ19ERVNUX0ZJRUxEKGljcmgpOwo+ICsgICAgICAg IHVpbnQzMl90IHNob3J0X2hhbmQgPSBpY3JsICYgQVBJQ19TSE9SVF9NQVNLOwo+ICsgICAgICAg IGJvb2wgZGVzdF9tb2RlID0gISEoaWNybCAmIEFQSUNfREVTVF9NQVNLKTsKPiArCj4gKyAgICAg ICAgZm9yX2VhY2hfdmNwdSAoIGN1cmQsIGN1cmMgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAg ICAgaWYgKCBjdXJjICE9IGN1cnIgJiYKPiArICAgICAgICAgICAgICAgICB2bGFwaWNfbWF0Y2hf ZGVzdCh2Y3B1X3ZsYXBpYyhjdXJjKSwgdmNwdV92bGFwaWMoY3VyciksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfaGFuZCwgZGVzdCwgZGVzdF9tb2RlKSApCj4g KyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIHZjcHVfa2ljayhjdXJjKTsKPiArICAg ICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgfQo+ICsgICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfSU5WX1RB UkdFVDoKPiArICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAgICAgICAgICAgICAi U1ZNOiAlczogSW52YWxpZCBJUEkgdGFyZ2V0IChpY3I9JSMwOHg6JTA4eCwgaWR4PSV1KVxuIiwK PiArICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpY3JoLCBpY3JsLCBpbmRleCk7Cj4gKyAgICAg ICAgYnJlYWs7CgpTaG91bGRuJ3QgdGhpcyBjYXNlIGJlIGVtdWxhdGVkIHRvIHJhaXNlIGFwcHJv cHJpYXRlIEFQSUMgZXJyb3JzIGluIHRoZQpndWVzdHMgdmlldz8KCj4gKyAgICBjYXNlIEFWSUNf SU5DTVBfSVBJX0VSUl9JTlZfQktfUEFHRToKPiArICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIs Cj4gKyAgICAgICAgICAgICAgICAiU1ZNOiAlczogSW52YWxpZCBiayBwYWdlIChpY3I9JSMwOHg6 JTA4eCwgaWR4PSV1KVxuIiwKPiArICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpY3JoLCBpY3Js LCBpbmRleCk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGRw cmludGsoWEVOTE9HX0VSUiwgIlNWTTogJXM6IFVua25vd24gSVBJIGludGVyY2VwdGlvbiAoJSN4 KVxuIiwKPiArICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpZCk7CgpUaGVzZSB0d28gY2FzZXMg YXJlIGFuIGVycm9yIGluIFhlbidzIHNldHVwLCBvciB0aGUgaGFyZHdhcmUuICBUaGV5CnNob3Vs ZCBiZSBncHJpbnRrKClzIChzbyBhcyBub3QgdG8gZGlzYXBwZWFyIGluIHJlbGVhc2UgYnVpbGRz KSwgYW5kCmNhdXNlIGEgZG9tYWluX2NyYXNoKCkuCgo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IGF2aWNfbG9nX2FwaWNfaWRfZW50ICoKPiArYXZpY19nZXRfbG9naWNhbF9pZF9l bnRyeShjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgdTMyIGxkciwgYm9vbCBmbGF0KQo+ICt7Cj4gKyAg ICB1bnNpZ25lZCBpbnQgaW5kZXg7Cj4gKyAgICBzdHJ1Y3QgYXZpY19sb2dfYXBpY19pZF9lbnQg KmF2aWNfbG9nX2FwaWRfaWRfdGFibGU7Cj4gKyAgICBjb25zdCBzdHJ1Y3Qgc3ZtX2RvbWFpbiAq ZCA9ICZ2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5zdm07Cj4gKyAgICB1bnNpZ25lZCBpbnQg ZGVzdF9pZCA9IEdFVF9BUElDX0xPR0lDQUxfSUQobGRyKTsKPiArCj4gKyAgICBpZiAoICFkZXN0 X2lkICkKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgICBpZiAoIGZsYXQgKQo+ICsg ICAgewo+ICsgICAgICAgIGluZGV4ID0gZmZzKGRlc3RfaWQpIC0gMTsKPiArICAgICAgICBpZiAo IGluZGV4ID4gNyApCj4gKyAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgfQo+ICsgICAg ZWxzZQo+ICsgICAgewo+ICsgICAgICAgIHVuc2lnbmVkIGludCBjbHVzdGVyID0gKGRlc3RfaWQg JiAweGYwKSA+PiA0Owo+ICsgICAgICAgIGludCBhcGljID0gZmZzKGRlc3RfaWQgJiAweDBmKSAt IDE7Cj4gKwo+ICsgICAgICAgIGlmICggKGFwaWMgPCAwKSB8fCAoYXBpYyA+IDcpIHx8IChjbHVz dGVyID49IDB4ZikgKQo+ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgICAgICBpbmRl eCA9IChjbHVzdGVyIDw8IDIpICsgYXBpYzsKPiArICAgIH0KPiArCj4gKyAgICBBU1NFUlQoaW5k ZXggPD0gMjU1KTsKPiArCj4gKyAgICBhdmljX2xvZ19hcGlkX2lkX3RhYmxlID0gbWZuX3RvX3Zp cnQoZC0+YXZpY19sb2dfYXBpY19pZF90YWJsZV9tZm4pOwoKQXMgd2l0aCB0aGUgcGhzeWljYWwg dGFibGUsIHRoaXMgaXMgYnVnZ3kgYWJvdmUgNVRCLCBhbmQgc2hvdWxkIHByb2JhYmx5CmJlIGEg Z2xvYmFsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aC4KCj4gKwo+ICsgICAgcmV0dXJuICZhdmljX2xv Z19hcGlkX2lkX3RhYmxlW2luZGV4XTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhdmljX2xkcl93 cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdTggZ19waHlfaWQsIHUzMiBsZHIsIGJvb2wgdmFsaWQpCj4g K3sKPiArICAgIHN0cnVjdCBhdmljX2xvZ19hcGljX2lkX2VudCAqZW50cnksIG5ld19lbnRyeTsK PiArICAgIHUzMiAqYnAgPSBhdmljX2dldF9ia19wYWdlX2VudHJ5KHYsIEFQSUNfREZSKTsKPiAr Cj4gKyAgICBpZiAoICFicCApCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAg ZW50cnkgPSBhdmljX2dldF9sb2dpY2FsX2lkX2VudHJ5KHYsIGxkciwgKCpicCA9PSBBUElDX0RG Ul9GTEFUKSk7Cj4gKyAgICBpZiAoIWVudHJ5KQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ ICsKPiArICAgIG5ld19lbnRyeSA9ICplbnRyeTsKPiArICAgIHNtcF9ybWIoKTsKPiArICAgIG5l d19lbnRyeS5ndWVzdF9waHlfYXBpY19pZCA9IGdfcGh5X2lkOwo+ICsgICAgbmV3X2VudHJ5LnZh bGlkID0gdmFsaWQ7Cj4gKyAgICAqZW50cnkgPSBuZXdfZW50cnk7Cj4gKyAgICBzbXBfd21iKCk7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXZpY19oYW5kbGVf bGRyX3VwZGF0ZShzdHJ1Y3QgdmNwdSAqdikKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAg ICB1MzIgKmxkciA9IGF2aWNfZ2V0X2JrX3BhZ2VfZW50cnkodiwgQVBJQ19MRFIpOwo+ICsgICAg dTMyICphcGljX2lkX3JlZyA9IGF2aWNfZ2V0X2JrX3BhZ2VfZW50cnkodiwgQVBJQ19JRCk7Cj4g Kwo+ICsgICAgaWYgKCAhbGRyIHx8ICEqbGRyIHx8ICFhcGljX2lkX3JlZyApCj4gKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgcmV0ID0gYXZpY19sZHJfd3JpdGUodiwgR0VUX0FQ SUNfUEhZU0lDQUxfSUQoKmFwaWNfaWRfcmVnKSwgKmxkciwgdHJ1ZSk7Cj4gKyAgICBpZiAoIHJl dCAmJiB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0X2xkciApCj4gKyAgICB7Cj4gKyAgICAgICAg LyoKPiArICAgICAgICAgKiBOb3RlOgo+ICsgICAgICAgICAqIEluIGNhc2Ugb2YgZmFpbHVyZSB0 byB1cGRhdGUgTERSIHJlZ2lzdGVyLAo+ICsgICAgICAgICAqIHdlIHNldCB0aGUgZ3Vlc3QgcGh5 c2ljYWwgQVBJQyBJRCB0byAwLAo+ICsgICAgICAgICAqIGFuZCBzZXQgdGhlIGVudHJ5IGxvZ2lj YWwgQVBJRCBJRCBlbnRyeQo+ICsgICAgICAgICAqIHRvIGludmFsaWQgKGZhbHNlKS4KPiArICAg ICAgICAgKi8KPiArICAgICAgICBhdmljX2xkcl93cml0ZSh2LCAwLCB2LT5hcmNoLmh2bV9zdm0u YXZpY19sYXN0X2xkciwgZmFsc2UpOwo+ICsgICAgICAgIHYtPmFyY2guaHZtX3N2bS5hdmljX2xh c3RfbGRyID0gMDsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgICAvKgo+ ICsgICAgICAgICAqIE5vdGU6Cj4gKyAgICAgICAgICogVGhpcyBzYXZlcyB0aGUgbGFzdCB2YWxp ZCBMRFIgc28gdGhhdCB3ZQo+ICsgICAgICAgICAqIGtub3cgd2hpY2ggZW50cnkgaW4gdGhlIGxv Y2FsIEFQSUMgSUQKPiArICAgICAgICAgKiB0byBjbGVhbiB1cCB3aGVuIHRoZSBMRFIgaXMgdXBk YXRlZC4KPiArICAgICAgICAgKi8KPiArICAgICAgICB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0 X2xkciA9ICpsZHI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBhdmljX2hhbmRsZV9hcGljX2lkX3VwZGF0ZShzdHJ1Y3QgdmNwdSAqdiwgYm9v bCBpbml0KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgYXZpY19waHlfYXBpY19pZF9lbnQgKm9sZCwgKm5l dzsKPiArICAgIHN0cnVjdCBhcmNoX3N2bV9zdHJ1Y3QgKnMgPSAmdi0+YXJjaC5odm1fc3ZtOwo+ ICsgICAgdTMyICphcGljX2lkX3JlZyA9IGF2aWNfZ2V0X2JrX3BhZ2VfZW50cnkodiwgQVBJQ19J RCk7Cj4gKwo+ICsgICAgaWYgKCAhYXBpY19pZF9yZWcgKQo+ICsgICAgICAgIHJldHVybiAtRUlO VkFMOwo+ICsKPiArICAgIG9sZCA9IHMtPmF2aWNfbGFzdF9waHlfaWQ7Cj4gKyAgICBBU1NFUlQo b2xkKTsKPiArCj4gKyAgICBuZXcgPSBhdmljX2dldF9waHlfYXBpY19pZF9lbnQodiwgR0VUX0FQ SUNfUEhZU0lDQUxfSUQoKmFwaWNfaWRfcmVnKSk7Cj4gKyAgICBpZiAoICFuZXcgKQo+ICsgICAg ICAgIHJldHVybiAwOwo+ICsKPiArICAgIC8qIFdlIG5lZWQgdG8gbW92ZSBwaHlzaWNhbF9pZF9l bnRyeSB0byBuZXcgb2Zmc2V0ICovCj4gKyAgICAqbmV3ID0gKm9sZDsKPiArICAgICooKHU2NCAq KW9sZCkgPSAwVUxMOwo+ICsgICAgcy0+YXZpY19sYXN0X3BoeV9pZCA9IG5ldzsKPiArCj4gKyAg ICAvKgo+ICsgICAgICogVXBkYXRlIHRoZSBndWVzdCBwaHlzaWNhbCBBUElDIElEIGluIHRoZSBs b2dpY2FsCj4gKyAgICAgKiBBUElDIElEIHRhYmxlIGVudHJ5IGlmIExEUiBpcyBhbHJlYWR5IHNl dHVwLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHYtPmFyY2guaHZtX3N2bS5hdmljX2xhc3RfbGRy ICkKPiArICAgICAgICBhdmljX2hhbmRsZV9sZHJfdXBkYXRlKHYpOwo+ICsKPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUoc3RydWN0 IHZjcHUgKnYpCj4gK3sKPiArICAgIHUzMiBtb2Q7Cj4gKyAgICBzdHJ1Y3Qgc3ZtX2RvbWFpbiAq ZCA9ICZ2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5zdm07Cj4gKyAgICB1MzIgKmRmciA9IGF2 aWNfZ2V0X2JrX3BhZ2VfZW50cnkodiwgQVBJQ19ERlIpOwo+ICsKPiArICAgIGlmICggIWRmciAp Cj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgbW9kID0gKCpkZnIgPj4gMjgp ICYgMHhGdTsKPiArCj4gKyAgICBzcGluX2xvY2soJmQtPmF2aWNfbGRyX21vZGVfbG9jayk7Cj4g KyAgICBpZiAoIGQtPmF2aWNfbGRyX21vZGUgIT0gbW9kICkKPiArICAgIHsKPiArICAgICAgICAv Kgo+ICsgICAgICAgICAqIFdlIGFzc3VtZSB0aGF0IGFsbCBsb2NhbCBBUElDcyBhcmUgdXNpbmcg dGhlIHNhbWUgdHlwZS4KPiArICAgICAgICAgKiBJZiBMRFIgbW9kZSBjaGFuZ2VzLCB3ZSBuZWVk IHRvIGZsdXNoIHRoZSBkb21haW4gQVZJQyBsb2dpY2FsCj4gKyAgICAgICAgICogQVBJQyBpZCB0 YWJsZS4KPiArICAgICAgICAgKi8KClRoZSBsb2dpY2FsIEFQSUMgSUQgdGFibGUgaXMgcGVyLWRv bWFpbiwgeWV0IExEUiBtb2RlIGlzIHBlci12Y3B1LiAgSG93CmNhbiB0aGVzZSBjb2V4aXN0IGlm IHdlIGZsdXNoIHRoZSB0YWJsZSBsaWtlIHRoaXM/ICBIb3cgd291bGQgYQptdWx0aS12Y3B1IGRv bWFpbiBhY3R1YWxseSBjaGFuZ2UgaXRzIG1vZGUgd2l0aG91dCB0aGlzIGxvZ2ljIGluIFhlbgpj b3JydXB0aW5nIHRoZSB0YWJsZT8KCj4gKyAgICAgICAgY2xlYXJfZG9tYWluX3BhZ2UoX21mbihk LT5hdmljX2xvZ19hcGljX2lkX3RhYmxlX21mbikpOwo+ICsgICAgICAgIHNtcF93bWIoKTsKPiAr ICAgICAgICBkLT5hdmljX2xkcl9tb2RlID0gbW9kOwo+ICsgICAgfQo+ICsgICAgc3Bpbl91bmxv Y2soJmQtPmF2aWNfbGRyX21vZGVfbG9jayk7Cj4gKwo+ICsgICAgaWYgKCB2LT5hcmNoLmh2bV9z dm0uYXZpY19sYXN0X2xkciApCj4gKyAgICAgICAgYXZpY19oYW5kbGVfbGRyX3VwZGF0ZSh2KTsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhdmljX3VuYWNjZWxf dHJhcF93cml0ZShzdHJ1Y3QgdmNwdSAqdikKPiArewo+ICsgICAgc3RydWN0IHZtY2Jfc3RydWN0 ICp2bWNiID0gdi0+YXJjaC5odm1fc3ZtLnZtY2I7Cj4gKyAgICB1MzIgb2Zmc2V0ID0gdm1jYi0+ ZXhpdGluZm8xICYgQVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSzsKPiArICAgIHUzMiAq cmVnID0gYXZpY19nZXRfYmtfcGFnZV9lbnRyeSh2LCBvZmZzZXQpOwo+ICsKPiArICAgIGlmICgg IXJlZyApCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwo+ICsKPiArICAg IHN3aXRjaCAoIG9mZnNldCApCj4gKyAgICB7Cj4gKyAgICBjYXNlIEFQSUNfSUQ6Cj4gKyAgICAg ICAgaWYgKCBhdmljX2hhbmRsZV9hcGljX2lkX3VwZGF0ZSh2LCBmYWxzZSkgKQo+ICsgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAg ICBjYXNlIEFQSUNfTERSOgo+ICsgICAgICAgIGlmICggYXZpY19oYW5kbGVfbGRyX3VwZGF0ZSh2 KSApCj4gKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKPiArICAgICAg ICBicmVhazsKPiArICAgIGNhc2UgQVBJQ19ERlI6Cj4gKyAgICAgICAgaWYgKCBhdmljX2hhbmRs ZV9kZnJfdXBkYXRlKHYpICkKPiArICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBicmVhazsK PiArICAgIH0KPiArCj4gKyAgICB2bGFwaWNfcmVnX3dyaXRlKHYsIG9mZnNldCwgKnJlZyk7Cj4g Kwo+ICsgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKPiArfQo+ICsKPiArLyoKPiArICogTm90ZToK PiArICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBBVklDX05PQUNDRUwgI3ZtZXhpdCB3aGVu IEFWSUMgaXMgZW5hYmxlZC4KPiArICogVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyB0aGlzIGZhdWx0 IHdoZW4gOgo+ICsgKiAtICBBIGd1ZXN0IGFjY2VzcyB0byBhbiBBUElDIHJlZ2lzdGVyIHRoYXQg aXMgbm90IGFjY2VsZXJhdGVkCj4gKyAqICAgIGJ5IEFWSUMgaGFyZHdhcmUuCj4gKyAqIC0gRU9J IGlzIGF0dGVtcHRlZCB3aGVuIHRoZSBoaWdoZXN0IHByaW9yaXR5IGluLXNlcnZpY2UgaW50ZXJy dXB0Cj4gKyAqICAgaXMgbGV2ZWwtdHJpZ2dlcmVkLgo+ICsgKi8KPiArdm9pZCBzdm1fYXZpY192 bWV4aXRfZG9fbm9hY2NlbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiArewo+ICsgICAg c3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owo+ICsgICAgc3RydWN0IHZtY2Jfc3RydWN0ICp2 bWNiID0gY3Vyci0+YXJjaC5odm1fc3ZtLnZtY2I7Cj4gKyAgICB1MzIgb2Zmc2V0ID0gdm1jYi0+ ZXhpdGluZm8xICYgMHhGRjA7Cj4gKyAgICB1MzIgcncgPSAodm1jYi0+ZXhpdGluZm8xID4+IDMy KSAmIDB4MTsKPiArCj4gKyAgICBzd2l0Y2ggKCBvZmZzZXQgKQo+ICsgICAgewo+ICsgICAgY2Fz ZSBBUElDX0lEOgo+ICsgICAgY2FzZSBBUElDX0VPSToKPiArICAgIGNhc2UgQVBJQ19SUlI6Cj4g KyAgICBjYXNlIEFQSUNfTERSOgo+ICsgICAgY2FzZSBBUElDX0RGUjoKPiArICAgIGNhc2UgQVBJ Q19TUElWOgo+ICsgICAgY2FzZSBBUElDX0VTUjoKPiArICAgIGNhc2UgQVBJQ19JQ1I6Cj4gKyAg ICBjYXNlIEFQSUNfTFZUVDoKPiArICAgIGNhc2UgQVBJQ19MVlRUSE1SOgo+ICsgICAgY2FzZSBB UElDX0xWVFBDOgo+ICsgICAgY2FzZSBBUElDX0xWVDA6Cj4gKyAgICBjYXNlIEFQSUNfTFZUMToK PiArICAgIGNhc2UgQVBJQ19MVlRFUlI6Cj4gKyAgICBjYXNlIEFQSUNfVE1JQ1Q6Cj4gKyAgICBj YXNlIEFQSUNfVERDUjoKClBsZWFzZSB1c2UgYSBiaXRtYXAgaW4gYSBzaW1pbGFyIHdheSB0byBo dm1feDJhcGljX21zcl9yZWFkKCkuICBJdApnZW5lcmF0ZXMgZmFyIG1vcmUgZWZmaWNpZW50IGNv ZGUuCgo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogSGFuZGxpbmcgQVZJQyBUcmFwIChpbnRl cmNlcHQgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VzcykuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAg aWYgKCAhcncgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAg ICogSWYgYSByZWFkIHRyYXAgaGFwcGVucywgdGhlIENQVSBtaWNyb2NvZGUgZG9lcyBub3QKPiAr ICAgICAgICAgICAgICogaW1wbGVtZW50IHRoZSBzcGVjLgoKU28gaXQgaXMgYWxsIG1pY3JvY29k ZSB0aGVuIDopCgo+ICsgICAgICAgICAgICAgKi8KPiArICAgICAgICAgICAgQlVHKCk7Cgpkb21h aW5fY3Jhc2goKSBwbGVhc2UsIGFuZCBhIHN1aXRhYmxlIGdwcmludGsoKS4gIFRoZXJlIGlzIG5v IG5lZWQgdG8KdGFrZSBkb3duIHRoZSBlbnRpcmUgc3lzdGVtLCBhcyBub24tYXZpYyBndWVzdHMg c2hvdWxkIGJlIGFibGUgdG8KY29udGludWUgZnVuY3Rpb25pbmcuCgo+ICsgICAgICAgIH0KPiAr ICAgICAgICBpZiAoIGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKGN1cnIpICE9IFg4NkVNVUxfT0tB WSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICIlczog RmFpbGVkIHRvIGhhbmRsZSB0cmFwIHdyaXRlICglI3gpXG4iLAo+ICsgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBvZmZzZXQpOwo+ICsgICAgICAgICAgICByZXR1cm47Cj4gKyAgICAgICAg fQo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICAvKgo+ICsgICAg ICAgICAqIEhhbmRsaW5nIEFWSUMgRmF1bHQgKGludGVyY2VwdCBiZWZvcmUgdGhlIGFjY2Vzcyku Cj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCAhcncgKQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgdTMyICplbnRyeSA9IGF2aWNfZ2V0X2JrX3BhZ2VfZW50cnkoY3Vyciwgb2Zmc2V0 KTsKPiArCj4gKyAgICAgICAgICAgIGlmICggIWVudHJ5ICkKPiArICAgICAgICAgICAgICAgIHJl dHVybjsKPiArCj4gKyAgICAgICAgICAgICplbnRyeSA9IHZsYXBpY19yZWFkX2FsaWduZWQodmNw dV92bGFwaWMoY3VyciksIG9mZnNldCk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGh2bV9lbXVs YXRlX29uZV92bV9ldmVudChFTVVMX0tJTkRfTk9STUFMLCBUUkFQX2ludmFsaWRfb3AsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWTV9ERUxJVkVSX05PX0VSUk9SX0NPREUp OwoKV2hhdCBpcyB0aGlzIGRvaW5nIGhlcmU/ICBJIGRvbid0IHNlZSBhbnkgY29ubmVjdGlvbi4K Cn5BbmRyZXcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=