From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: Re: [PATCH v4 08/24] x86: refactor psr: set value: implement framework. Date: Wed, 11 Jan 2017 13:57:00 +0800 Message-ID: <20170111055700.GF7435@yi.y.sun> References: <1481688484-5093-1-git-send-email-yi.y.sun@linux.intel.com> <1481688484-5093-9-git-send-email-yi.y.sun@linux.intel.com> <5874FB12020000780012EBE0@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cRBu1-0005R1-JE for xen-devel@lists.xenproject.org; Wed, 11 Jan 2017 05:56:53 +0000 Content-Disposition: inline In-Reply-To: <5874FB12020000780012EBE0@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: wei.liu2@citrix.com, he.chen@linux.intel.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, mengxu@cis.upenn.edu, xen-devel@lists.xenproject.org, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org T24gMTctMDEtMTAgMDc6MTc6MzgsIEphbiBCZXVsaWNoIHdyb3RlOgo+ID4gVG8gbWFrZSB0aGUg c2V0IHZhbHVlIGZsb3cgYmUgZ2VuZXJhbCBhbmQgY2FuIHN1cHBvcnQgbXVsdGlwbGUgZmVhdHVy ZXMKPiA+IGF0IHNhbWUgdGltZSwgaXQgaW5jbHVkZXMgYmVsb3cgc3RlcHM6Cj4gPiAxLiBHZXQg Q09TIElEIG9mIGN1cnJlbnQgZG9tYWluIHVzaW5nLgo+ID4gMi4gQXNzZW1ibGUgYSB2YWx1ZSBh cnJheSB0byBzdG9yZSBhbGwgZmVhdHVyZXMgY3VycmVudCB2YWx1ZQo+ID4gICAgaW4gaXQgYW5k IHJlcGxhY2UgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZlYXR1cmUgd2hpY2ggaXMKPiA+ICAg IGJlaW5nIHNldCB0byB0aGUgbmV3IGlucHV0IHZhbHVlLgo+ID4gMy4gRmluZCBpZiB0aGVyZSBp cyBhbHJlYWR5IGEgQ09TIElEIG9uIHdoaWNoIGFsbCBmZWF0dXJlcycKPiA+ICAgIHZhbHVlcyBh cmUgc2FtZSBhcyB0aGUgYXJyYXkuIFRoZW4sIHdlIGNhbiByZXVzZSB0aGlzIENPUwo+ID4gICAg SUQuCj4gPiA0LiBJZiBmYWlsIHRvIGZpbmQsIHdlIG5lZWQgYWxsb2NhdGUgYSBuZXcgQ09TIElE LiBPbmx5IENPUyBJRCB3aGljaCByZWYKPiA+ICAgIGlzIDAgb3IgMSBjYW4gYmUgYWxsb2NhdGVk Lgo+IAo+IFVzaW5nICJhbGxvY2F0ZSIgaGVyZSBpbiBjb25qdW5jdGlvbiB3aXRoIHJlZiBjb3Vu dCBiZWluZyAxIGlzIGEgbGl0dGxlCj4gbWlzbGVhZGluZyBoZXJlIC0gYWxsb2NhdGlvbiB3b3Vs ZCBtZWFuIGEgZnJlc2ggSUQsIHdoZXJlYXMgaW4gdGhlCj4gY2FzZSBvZiByZWYgPT0gMSB5b3Ug bWVhbiB0byByZS11c2UgdGhlIGN1cnJlbnQgb25lLgo+IApNYXliZSAncGljayBhbiBhdmFpbGFi bGUgQ09TIElEJyBpcyBtb3JlIGFwcHJvcHJpYXRlLgoKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9w c3IuYwo+ID4gKysrIGIveGVuL2FyY2gveDg2L3Bzci5jCj4gPiBAQCAtNTEzLDE4ICs1MTMsMTk3 IEBAIGludCBwc3JfZ2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0 LAo+ID4gICAgICByZXR1cm4gLUVOT0VOVDsKPiA+ICB9Cj4gPiAgCj4gPiAtaW50IHBzcl9zZXRf bDNfY2JtKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCj4gPiAtICAgICAg ICAgICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQo+ID4gKy8qIFNl dCB2YWx1ZSBmdW5jdGlvbnMgKi8KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb3NfbnVt KGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCj4gPiAgewo+ID4gICAgICByZXR1 cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGludCBnZXRfb2xkX3NldF9uZXcodWludDY0 X3QgKnZhbCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheV9s ZW4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBzcl9zb2Nr ZXRfaW5mbyAqaW5mbywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgb2xkX2NvcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGNibV90eXBl IHR5cGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbSkKPiA+ICt7 Cj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGZpbmRfY29z KGNvbnN0IHVpbnQ2NF90ICp2YWwsIHVpbnQzMl90IGFycmF5X2xlbiwKPiA+ICsgICAgICAgICAg ICAgICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCj4gPiArewo+ID4gKyAgICByZXR1cm4g MDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhbGxvY19uZXdfY29zKGNvbnN0IHN0cnVj dCBwc3Jfc29ja2V0X2luZm8gKmluZm8sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ2NF90ICp2YWwsIHVpbnQzMl90IGFycmF5X2xlbiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSkKPiA+ICt7Cj4gPiArICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHdyaXRlX3Bzcl9tc3IodW5zaWduZWQgaW50IHNvY2tl dCwgdW5zaWduZWQgaW50IGNvcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dWludDY0X3QgKnZhbCkKPiA+ICt7Cj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiAKPiBJIHRo aW5rIGFsbCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gZXJyb3IgYXMg bG9uZyBhcwo+IHRoZXkncmUgc3R1YmJlZCBvdXQsIHlldCBJIGRvbid0IHRoaW5rIDAgbWVhbnMg ZXJyb3IgaW4gYWxsIGNhc2VzIChpbgo+IHBhcnRpY3VsYXIgYSByZXR1cm4gdmFsdWUgb2YgcGxh aW4gaW50IHN1Z2dlc3RzIDAgdG8gbWVhbiBzdWNjZXNzKS4KPiAKVGhhbmtzLCB3aWxsIGNvbnNp ZGVyIHRoZSByZXR1cm4gdmFsdWVzIGNhcmVmdWxseS4KCj4gPiAraW50IHBzcl9zZXRfdmFsKHN0 cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCj4gPiArICAgICAgICAgICAgICAg IHVpbnQ2NF90IHZhbCwgZW51bSBjYm1fdHlwZSB0eXBlKQo+ID4gK3sKPiA+ICsgICAgdW5zaWdu ZWQgaW50IG9sZF9jb3M7Cj4gPiArICAgIGludCBjb3MsIHJldDsKPiA+ICsgICAgdW5zaWduZWQg aW50ICpyZWY7Cj4gPiArICAgIHVpbnQ2NF90ICp2YWxfYXJyYXk7Cj4gPiArICAgIHN0cnVjdCBw c3Jfc29ja2V0X2luZm8gKmluZm8gPSBnZXRfc29ja2V0X2luZm8oc29ja2V0KTsKPiA+ICsgICAg dWludDMyX3QgYXJyYXlfbGVuOwo+ID4gKwo+ID4gKyAgICBpZiAoIElTX0VSUihpbmZvKSApCj4g PiArICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKPiA+ICsKPiA+ICsgICAgLyoKPiA+ICsg ICAgICogU3RlcCAwOgo+ID4gKyAgICAgKiBvbGRfY29zIG1lYW5zIHRoZSBDT1MgSUQgY3VycmVu dCBkb21haW4gaXMgdXNpbmcuIEJ5IGRlZmF1bHQsIGl0IGlzIDAuCj4gPiArICAgICAqCj4gPiAr ICAgICAqIEZvciBldmVyeSBDT1MgSUQsIHRoZXJlIGlzIGEgcmVmZXJlbmNlIGNvdW50IHRvIHJl Y29yZCBob3cgbWFueSBkb21haW5zCj4gPiArICAgICAqIGFyZSB1c2luZyB0aGUgQ09TIHJlZ2lz dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDT1MgSUQuCj4gPiArICAgICAqIC0gSWYgcmVmW29s ZF9jb3NdIGlzIDAsIHRoYXQgbWVhbnMgdGhpcyBDT1MgaXMgbm90IHVzZWQgYnkgYW55IGRvbWFp bi4KPiA+ICsgICAgICogLSBJZiByZWZbb2xkX2Nvc10gaXMgMSwgdGhhdCBtZWFucyB0aGlzIENP UyBpcyBvbmx5IHVzZWQgYnkgY3VycmVudAo+ID4gKyAgICAgKiAgIGRvbWFpbi4KPiA+ICsgICAg ICogLSBJZiByZWZbb2xkX2Nvc10gaXMgbW9yZSB0aGFuIDEsIHRoYXQgbWVhbiBtdWx0aXBsZSBk b21haW5zIGFyZSB1c2luZwo+ID4gKyAgICAgKiAgIHRoaXMgQ09TLgo+ID4gKyAgICAgKi8KPiA+ ICsgICAgb2xkX2NvcyA9IGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XTsKPiA+ICsgICAgaWYg KCBvbGRfY29zID4gTUFYX0NPU19SRUdfQ05UICkKPiA+ICsgICAgICAgIHJldHVybiAtRU9WRVJG TE9XOwo+ID4gKwo+ID4gKyAgICByZWYgPSBpbmZvLT5jb3NfcmVmOwo+ID4gKwo+ID4gKyAgICAv Kgo+ID4gKyAgICAgKiBTdGVwIDE6Cj4gPiArICAgICAqIEFzc2VtbGUgYSB2YWx1ZSBhcnJheSB0 byBzdG9yZSBhbGwgZmVhdHVlcyBjb3NfcmVnX3ZhbFtvbGRfY29zXS4KPiA+ICsgICAgICogQW5k LCBzZXQgdGhlIGlucHV0IHZhbCBpbnRvIGFycmF5IGFjY29yZGluZyB0byB0aGUgZmVhdHVyZSdz Cj4gPiArICAgICAqIHBvc2l0aW9uIGluIGFycmF5Lgo+ID4gKyAgICAgKi8KPiA+ICsgICAgYXJy YXlfbGVuID0gZ2V0X2Nvc19udW0oKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKilpbmZv KTsKPiAKPiBXaGF0IGlzIHRoaXMgY2FzdCBkb2luZyBoZXJlPyAoVGhlcmUgYXJlIG1vcmUgb2Yg dGhpcyBraW5kIGJlbG93LikKPiAKSG1tLCBJIHJlbWVtYmVyIHRoZXJlIG1heSBiZSB3YXJuaW5n IHdpdGhvdXQgY2FzdC4gTGV0IG1lIGNvbmZpcm0gaXQuIElmIG5vCndhcm5pbmcsIHdpbGwgcmVt b3ZlIHRoZW0uCgo+ID4gKyAgICB2YWxfYXJyYXkgPSB4emFsbG9jX2FycmF5KHVpbnQ2NF90LCBh cnJheV9sZW4pOwo+ID4gKyAgICBpZiAoICF2YWxfYXJyYXkgKQo+ID4gKyAgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4gPiArCj4gPiArICAgIGlmICggKHJldCA9IGdldF9vbGRfc2V0X25ldyh2YWxf YXJyYXksIGFycmF5X2xlbiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICopaW5mbywKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9sZF9jb3MsIHR5cGUsIHZhbCkpICE9IDAgKQo+IAo+IEp1c3QgbGlr ZSBmb3IgZWFybGllciB2ZXJzaW9ucyBJIGNvbnRpbnVlIHRvIGJlIHVuY29udmluY2VkIHRoYXQK PiB0aGUgZ2V0LWN1cnJlbnQtc2V0dGluZ3MgYW5kIHRoZSByZXBsYWNlLXRhcmdldC12YWx1ZSBz aG91bGQgYmUKPiBhIHNpbmdsZSBvcGVyYXRpb24uIEluIHBhcnRpY3VsYXIgSSdkIGV4cGVjdCB0 aGUgZnVuY3Rpb24gdG8gYmUgYWJsZQo+IHRvIHN0b3JlIHRoZSB0YXJnZXQgdmFsdWUsIGFzIGxv bmcgYXMgdGhlIGFycmF5IGVudHJpZXMgYXJlCj4gb3JkZXJlZCBpbiBhIHN1aXRhYmxlIHdheS4K PiAKT2ssIHdpbGwgc3BsaXQgdG8gdHdvIGZ1bmN0aW9ucy4gT25lIGZvciBnZXR0aW5nIG9sZCB2 YWx1ZXMgb2YgYWxsIGZlYXR1cmVzLgpUaGUgb3RoZXIgc3RvcmVzIHRoZSB0YXJnZXQgdmFsdWUg aW50byBhcnJheSBhY2NvcmRpbmcgdG8gZmVhdHVyZXMgcG9zaXRpb24KaW4gZmVhdHVyZSBsaXN0 LgoKPiA+ICsgICAgewo+ID4gKyAgICAgICAgeGZyZWUodmFsX2FycmF5KTsKPiA+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyoKPiA+ICsgICAgICogTG9j ayBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgcmVmIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBmaW5kIGFu ZAo+ID4gKyAgICAgKiB3cml0ZSBwcm9jZXNzLgo+ID4gKyAgICAgKi8KPiA+ICsgICAgc3Bpbl9s b2NrKCZpbmZvLT5yZWZfbG9jayk7Cj4gPiArCj4gPiArICAgIC8qCj4gPiArICAgICAqIFN0ZXAg MjoKPiA+ICsgICAgICogVHJ5IHRvIGZpbmQgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIENPUyBJRCBv biB3aGljaCBhbGwgZmVhdHVyZXMnIHZhbHVlcwo+ID4gKyAgICAgKiBhcmUgc2FtZSBhcyB0aGUg YXJyYXkuIFRoZW4sIHdlIGNhbiByZXVzZSB0aGlzIENPUyBJRC4KPiA+ICsgICAgICovCj4gPiAr ICAgIGNvcyA9IGZpbmRfY29zKChjb25zdCB1aW50NjRfdCAqKXZhbF9hcnJheSwgYXJyYXlfbGVu LCB0eXBlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRf aW5mbyAqKWluZm8pOwo+ID4gKyAgICBpZiAoIGNvcyA+PSAwICkKPiA+ICsgICAgewo+ID4gKyAg ICAgICAgaWYgKCBjb3MgPT0gb2xkX2NvcyApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAg ICAgc3Bpbl91bmxvY2soJmluZm8tPnJlZl9sb2NrKTsKPiA+ICsgICAgICAgICAgICB4ZnJlZSh2 YWxfYXJyYXkpOwo+ID4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICAgICAgfQo+ID4g KyAgICB9Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAg ICAgICAqIFN0ZXAgMzoKPiA+ICsgICAgICAgICAqIElmIGZhaWwgdG8gZmluZCwgd2UgbmVlZCBh bGxvY2F0ZSBhIG5ldyBDT1MgSUQuCj4gPiArICAgICAgICAgKiBJZiBtdWx0aXBsZSBkb21haW5z IGFyZSB1c2luZyBzYW1lIENPUyBJRCwgaXRzIHJlZiBpcyBtb3JlCj4gPiArICAgICAgICAgKiB0 aGFuIDEuIFRoYXQgbWVhbnMgd2UgY2Fubm90IGZyZWUgdGhpcyBDT1MgdG8gbWFrZSBjdXJyZW50 IGRvbWFpbgo+ID4gKyAgICAgICAgICogdXNlIGl0LiBCZWNhdXNlIG90aGVyIGRvbWFpbnMgYXJl IHVzaW5nIHRoZSB2YWx1ZSBzYXZlZCBpbiB0aGUgQ09TLgo+ID4gKyAgICAgICAgICogVW5sZXNz IHRoZSByZWYgaXMgY2hhbmdlZCB0byAxIChtZWFuIG9ubHkgY3VycmVudCBkb21haW4gaXMgdXNp bmcKPiA+ICsgICAgICAgICAqIGl0KSwgd2UgY2Fubm90IGFsbG9jYXRlIHRoZSBDT1MgSUQgdG8g Y3VycmVudCBkb21haW4uCj4gPiArICAgICAgICAgKiBTbywgb25seSB0aGUgQ09TIElEIHdoaWNo IHJlZiBpcyAxIG9yIDAgY2FuIGJlIGFsbG9jYXRlZC4KPiA+ICsgICAgICAgICAqLwo+IAo+IEkg c3VwcG9zZSB0aGlzIGNvbW1lbnQgd2lsbCBtYWtlIG1vcmUgc2Vuc2Ugd2hlbiBmdXJ0aGVyIHBh dGNoZXMKPiBnZXQgYXBwbGllZCwgYXMgc28gZmFyIHRoZXJlIHdhcyBubyByZWYgY291bnQgY2hl Y2sgYXQgYWxsIGFueXdoZXJlLgo+IApZZXMsIHRoZSBpbXBsZW1lbnRhaW9uIG9mIGFsbG9jX25l d19jb3MoKSB3aWxsIHNob3cgdGhpcy4gQ29tbWVudHMgaGVyZSBqdXN0CndhbnQgdG8gbWFrZSBy ZWFkZXJzIGJlIGNsZWFyIG9mIHRoZSB3aG9sZSBwcm9jZXNzLgoKPiA+ICsgICAgICAgIGNvcyA9 IGFsbG9jX25ld19jb3MoKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKilpbmZvLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDY0X3QgKil2YWxfYXJyYXks IGFycmF5X2xlbiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2NvcywgdHlw ZSk7Cj4gPiArICAgICAgICBpZiAoIGNvcyA8IDAgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAg ICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5yZWZfbG9jayk7Cj4gPiArICAgICAgICAgICAgeGZy ZWUodmFsX2FycmF5KTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gY29zOwo+ID4gKyAgICAgICAg fQo+ID4gKwo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAqIFN0ZXAgNDoKPiA+ICsgICAg ICAgICAqIFdyaXRlIGFsbCBmZWF0dXJlcyBNU1JzIGFjY29yZGluZyB0byB0aGUgQ09TIElELgo+ ID4gKyAgICAgICAgICovCj4gPiArICAgICAgICByZXQgPSB3cml0ZV9wc3JfbXNyKHNvY2tldCwg Y29zLCAoY29uc3QgdWludDY0X3QgKil2YWxfYXJyYXkpOwo+ID4gKyAgICAgICAgaWYgKCByZXQg KQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5yZWZf bG9jayk7Cj4gPiArICAgICAgICAgICAgeGZyZWUodmFsX2FycmF5KTsKPiA+ICsgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8q Cj4gPiArICAgICAqIFN0ZXAgNToKPiA+ICsgICAgICogVXBkYXRlIHJlZiBhY2NvcmRpbmcgdG8g Q09TIElELgo+ID4gKyAgICAgKi8KPiA+ICsgICAgcmVmW2Nvc10rKzsKPiA+ICsgICAgcmVmW29s ZF9jb3NdLS07Cj4gPiArICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5yZWZfbG9jayk7Cj4gPiArCj4g PiArICAgIC8qCj4gPiArICAgICAqIFN0ZXAgNjoKPiA+ICsgICAgICogU2F2ZSB0aGUgQ09TIElE IGludG8gY3VycmVudCBkb21haW4ncyBwc3JfY29zX2lkc1tdIHNvIHRoYXQgd2UgY2FuIGtub3cK PiA+ICsgICAgICogd2hpY2ggQ09TIHRoZSBkb21haW4gaXMgdXNpbmcgb24gdGhlIHNvY2tldC4g T25lIGRvbWFpbiBjYW4gb25seSB1c2UKPiA+ICsgICAgICogb25lIENPUyBJRCBhdCBzYW1lIHRp bWUuCj4gCj4gVG8gaGVscCByZWFkZXJzLCBwZXJoYXBzIHRoaXMgbGFzdCBzZW50ZW5jZSBzaG91 bGQgYmUgY29tcGxldGVkIHdpdGgKPiAiLi4uIG9uIGVhY2ggc29ja2V0Ij8KPiAKVGhhbmsgeW91 IQoKPiA+ICsgICAgICovCj4gPiArICAgIGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XSA9IGNv czsKPiA+ICsgICAgeGZyZWUodmFsX2FycmF5KTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gIC8qIENhbGxlZCB3aXRoIGRvbWFpbiBsb2NrIGhlbGQsIG5vIGV4dHJh IGxvY2sgbmVlZGVkIGZvciAncHNyX2Nvc19pZHMnICovCj4gPiAgc3RhdGljIHZvaWQgcHNyX2Zy ZWVfY29zKHN0cnVjdCBkb21haW4gKmQpCj4gPiAgewo+ID4gKyAgICB1bnNpZ25lZCBpbnQgc29j a2V0Owo+ID4gKyAgICB1bnNpZ25lZCBpbnQgY29zOwo+IAo+IFRoZXNlIGNvdWxkIChhbmQgaW1v IHNob3VsZCkgYmUgam9pbmVkIHRvZ2V0aGVyLgo+IApPaywgdGhhbmtzIQoKPiA+ICsgICAgc3Ry dWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbzsKPiA+ICsKPiA+ICAgICAgaWYoICFkLT5hcmNoLnBz cl9jb3NfaWRzICkKPiA+ICAgICAgICAgIHJldHVybjsKPiA+ICAKPiA+ICsgICAgLyogRG9tYWlu IGlzIGZyZWUgc28gaXRzIGNvc19yZWYgc2hvdWxkIGJlIGRlY3JlYXNlZC4gKi8KPiA+ICsgICAg Zm9yKCBzb2NrZXQgPSAwOyBzb2NrZXQgPCBucl9zb2NrZXRzOyBzb2NrZXQrKyApCj4gCj4gTWlz c2luZyBibGFuayAoYWxzbyBpbiB0aGUgaWYoKSBhYm92ZSwgbm90IHN1cmUgYnkgd2hpY2ggZWFy bGllciBwYXRjaAo+IHRoYXQgZ290IGludHJvZHVjZWQpLgo+IApPaCwgc29ycnkhCgo+ID4gKyAg ICB7Cj4gPiArICAgICAgICAvKiBjb3MgMCBpcyBkZWZhdWx0IG9uZSB3aGljaCBkb2VzIG5vdCBu ZWVkIGJlIGhhbmRsZWQuICovCj4gPiArICAgICAgICBpZiAoIChjb3MgPSBkLT5hcmNoLnBzcl9j b3NfaWRzW3NvY2tldF0pID09IDAgKQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAqIElmIGRvbWFpbiB1c2VzIG90aGVyIGNvcyBp ZHMsIGFsbCBjb3JyZXNwb25kaW5nIHJlZnMgbXVzdCBoYXZlIGJlZW4KPiA+ICsgICAgICAgICAq IGluY3JlYXNlZCAxIGZvciB0aGlzIGRvbWFpbi4gU28sIHdlIG5lZWQgZGVjcmVhc2UgdGhlbS4K PiA+ICsgICAgICAgICAqLwo+ID4gKyAgICAgICAgaW5mbyA9IHNvY2tldF9pbmZvICsgc29ja2V0 Owo+ID4gKyAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5yZWZfbG9jayk7Cj4gPiArICAgICAgICBp bmZvLT5jb3NfcmVmW2Nvc10tLTsKPiAKPiBXaGlsZSBsaWtlbHkgYWxzbyByZWxldmFudCBpbiBv dGhlciBwbGFjZXMsIHRoaXMgb25lIGluIHBhcnRpY3VsYXIKPiBzdWdnZXN0cyB0aGF0IHlvdSBz aG91bGQgYWRkIEFTU0VSVCgpczogQmVmb3JlIGRlY3JlbWVudHMgYW5kCj4gYWZ0ZXIgaW5jcmVt ZW50cyB0aGUgcmVmIGNvdW50IHNob3VsZCBub3QgYmUgemVyby4KPiAKT2ssIHRoYW5rcywgd2ls bCBjaGVjayBpdC4KCj4gQWxzbyBwbGVhc2UgbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YgYXQgbGVh c3QgImluZm8iIGludG8gdGhlIG1vc3QKPiBuYXJyb3cgc2NvcGUgcG9zc2libGUuCj4gClN1cmUs IHdpbGwgbW92ZSBpdCBkb3duLgoKPiBKYW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=