From mboxrd@z Thu Jan 1 00:00:00 1970 From: Meng Xu Subject: Re: [PATCH v7]xen: sched: convert RTDS from time to event driven model Date: Wed, 9 Mar 2016 23:00:35 -0500 Message-ID: References: <1457141967-3340-1-git-send-email-tiche@seas.upenn.edu> <1457538364.3102.418.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1adrmB-0003dR-7x for xen-devel@lists.xenproject.org; Thu, 10 Mar 2016 04:00:39 +0000 Received: by mail-vk0-f41.google.com with SMTP id k1so81512556vkb.0 for ; Wed, 09 Mar 2016 20:00:37 -0800 (PST) In-Reply-To: <1457538364.3102.418.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli Cc: "xen-devel@lists.xenproject.org" , Tianyang Chen , George Dunlap , Dagaen Golomb , Meng Xu List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBNYXIgOSwgMjAxNiBhdCAxMDo0NiBBTSwgRGFyaW8gRmFnZ2lvbGkKPGRhcmlvLmZh Z2dpb2xpQGNpdHJpeC5jb20+IHdyb3RlOgo+IE9uIFR1ZSwgMjAxNi0wMy0wOCBhdCAyMzozMyAt MDUwMCwgTWVuZyBYdSB3cm90ZToKPj4gSSBkaWRuJ3QgbWFyayBvdXQgYWxsIHJlcGVhdGVkIHN0 eWxlIGlzc3Vlcy4gSSB0aGluayB5b3UgY2FuIGNvcnJlY3QKPj4gYWxsIG9mIHRoZSBzdHlsZSBp c3N1ZXMsIHN1Y2ggYXMgdGhlIHNwYWNlcyBpbiB0aGUgY29kZSwgaW4gdGhlIG5leHQKPj4gdmVy c2lvbi4KPj4KPiBZZXMsIHBsZWFzZS4gQXQgdjcsIHN0eWxlIGlzc3VlcyBzaG91bGRuJ3QgZGVm aW5pdGVseSBiZSB0aGVyZSBhbnkKPiBsb25nZXIuCj4KPiBIYXZlIGFub3RoZXIgbG9vayBhdCBD T0RJTkdfU1RZTEUsIHBlcmhhcHMsIGVzcGVjaWFsbHkgZm9jdXNpbmcgb24KPiBzcGFjZXMgaW4g Y29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgYW5kIGxpbmUgbGVuZ3RoLgoKVGlhbnlhbmcsIHBsZWFz ZSBjb3JyZWN0IHRob3NlIGNvZGluZyBzdHlsZXMgaW4gbmV4dCB2ZXJzaW9uLiBOb3cgaXQncwp0 aW1lIHRvIHBheSBtb3JlIGF0dGVudGlvbiB0byBjb2Rpbmcgc3R5bGUuLi4KCj4KPj4gSGkgRGFy aW8sCj4+IENvdWxkIHlvdSBoZWxwIGNoZWNrIGlmIG15IHR3byBjb25jZXJucyBpbiB0aGUgY29t bWVudHMgYmVsb3cgbWFrZQo+PiBzZW5zZT8KPj4gT25lIGlzIHNtYWxsLCBhYm91dCBpZiB3ZSBz aG91bGQgdXNlICgpIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlci4KPj4gVGhlIG90aGVyIGlzIGFi b3V0IHRoZSBsb2dpYyBpbiB0aGUgcmVwbGVuaXNobWVudCBoYW5kbGVyLgo+Pgo+IEkgdGhpbmsg dGlja2xpbmcgZHVyaW5nIHJlcGxlbmlzaG1lbnQgZG9lcyBoYXZlIGlzc3VlcywgeWVzLiBTZWUg YmVsb3cuCj4KPiBBbnl3YXksIE1lbmcsIGNhbiB5b3UgdHJpbSB5b3VyIHF1b3RlcyB3aGVuIHJl cGx5aW5nPyBCeSB0aGlzLCBJIG1lYW4KPiBjdXQgdGhlIHBhcnQgb2YgY29udmVyc2F0aW9uL3Bh dGNoZXMgdGhhdCBhcmUgbm90IHJlbGV2YW50IGZvciB3aGF0IHlvdQo+IGFyZSBzYXlpbmcgaW4g dGhpcyB2ZXJ5IGVtYWlsIChidXQgbGVhdmUgZW5vdWdoIGNvbnRleHQgaW4gcGxhY2UgZm9yCj4g bWFraW5nIHdoYXQgeW91IHdhbnQgdG8gcG9pbnQgb3V0IHVuZGVyc3RhbmRhYmxlKS4KClN1cmUu LiBHb3QgaXQuCgo+PiA+IEBAIC0xMTUwLDYgKzEyNzYsNzEgQEAgcnRfZG9tX2NudGwoCj4+ID4g ICAgICByZXR1cm4gcmM7Cj4+ID4gIH0KPj4gPgo+PiA+ICsvKgo+PiA+ICsgKiBUaGUgcmVwbGVu aXNobWVudCB0aW1lciBoYW5kbGVyIHBpY2tzIHZjcHVzCj4+ID4gKyAqIGZyb20gdGhlIHJlcGxx IGFuZCBkb2VzIHRoZSBhY3R1YWwgcmVwbGVuaXNobWVudC4KPj4gPiArICovCj4+ID4gK3N0YXRp YyB2b2lkIHJlcGxfaGFuZGxlcih2b2lkICpkYXRhKXsKPj4gPiArICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4+ID4gKyAgICBzX3RpbWVfdCBub3cgPSBOT1coKTsKPj4gPiArICAgIHN0cnVjdCBz Y2hlZHVsZXIgKm9wcyA9IGRhdGE7Cj4+ID4gKyAgICBzdHJ1Y3QgcnRfcHJpdmF0ZSAqcHJ2ID0g cnRfcHJpdihvcHMpOwo+PiA+ICsgICAgc3RydWN0IGxpc3RfaGVhZCAqcmVwbHEgPSBydF9yZXBs cShvcHMpOwo+PiA+ICsgICAgc3RydWN0IHRpbWVyICpyZXBsX3RpbWVyID0gcHJ2LT5yZXBsX3Rp bWVyOwo+PiA+ICsgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKnRtcDsKPj4gPiArICAgIHN0 cnVjdCBydF92Y3B1ICpzdmMgPSBOVUxMOwo+PiA+ICsKPj4gPiArICAgIHNwaW5fbG9ja19pcnFz YXZlKCZwcnYtPmxvY2ssIGZsYWdzKTsKPj4gPiArCj4+ID4gKyAgICBzdG9wX3RpbWVyKHJlcGxf dGltZXIpOwo+PiA+ICsKPj4gPiArICAgIGxpc3RfZm9yX2VhY2hfc2FmZShpdGVyLCB0bXAsIHJl cGxxKQo+PiA+ICsgICAgewo+PiA+ICsgICAgICAgIHN2YyA9IHJlcGxxX2VsZW0oaXRlcik7Cj4+ ID4gKwo+PiA+ICsgICAgICAgIGlmICggbm93IDwgc3ZjLT5jdXJfZGVhZGxpbmUgKQo+PiA+ICsg ICAgICAgICAgICBicmVhazsKPj4gPiArCj4+ID4gKyAgICAgICAgcnRfdXBkYXRlX2RlYWRsaW5l KG5vdywgc3ZjKTsKPj4gPiArCj4+ID4gKyAgICAgICAgLyoKPj4gPiArICAgICAgICAgKiB3aGVu IHRoZSByZXBsZW5pc2htZW50IGhhcHBlbnMKPj4gPiArICAgICAgICAgKiBzdmMgaXMgZWl0aGVy IG9uIGEgcGNwdSBvciBvbgo+PiA+ICsgICAgICAgICAqIHJ1bnEvZGVwbGV0ZWRxCj4+ID4gKyAg ICAgICAgICovCj4+ID4gKyAgICAgICAgaWYoIF9fdmNwdV9vbl9xKHN2YykgKQo+PiA+ICsgICAg ICAgIHsKPj4gPiArICAgICAgICAgICAgLyogcHV0IGJhY2sgdG8gcnVucSAqLwo+PiA+ICsgICAg ICAgICAgICBfX3FfcmVtb3ZlKHN2Yyk7Cj4+ID4gKyAgICAgICAgICAgIF9fcnVucV9pbnNlcnQo b3BzLCBzdmMpOwo+PiA+ICsgICAgICAgIH0KPj4gPiArCj4+ID4gKyAgICAgICAgLyoKPj4gPiAr ICAgICAgICAgKiB0aWNrbGUgcmVnYXJkbGVzcyB3aGVyZSBpdCdzIGF0Cj4+ID4gKyAgICAgICAg ICogYmVjYXVzZSBhIHJ1bm5pbmcgdmNwdSBjb3VsZCBoYXZlCj4+ID4gKyAgICAgICAgICogYSBs YXRlciBkZWFkbGluZSB0aGFuIG90aGVycyBhZnRlcgo+PiA+ICsgICAgICAgICAqIHJlcGxlbmlz aG1lbnQKPj4gPiArICAgICAgICAgKi8KPj4gPiArICAgICAgICBydW5xX3RpY2tsZShvcHMsIHN2 Yyk7Cj4+IFdlbGwsIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29ycmVjdG5lc3Mgb2YgdGlja2xl IGhlcmUuCj4+IFRoZSBzdmMgaXMgcnVubmluZyBvbiBhIGNvcmUsIHNheSBQX2ksIHJpZ2h0IG5v dy4gQWZ0ZXIgcmVwbGVuaXNoaW5nCj4+IHRoZSBidWRnZXQgZm9yIHN2Yywgc3ZjJ3MgZGVhZGxp bmUgYWxzbyBjaGFuZ2VzLiBTbyBzdmMgIHNob3VsZAo+PiBwcm9iYWJseSBiZSBwcmVlbXB0ZWQg YnkgdGhlIGhlYWQgdmNwdSBpbiB0aGUgcnVucS4gSWYgdGhhdCdzIHRoZQo+PiBjYXNlLCB3ZSBz aG91bGQgdXNlIHRoZSBoZWFkIG9mIHJ1bnEgdG8gdGlja2xlLCBpbnN0ZWFkIG9mIHVzaW5nIHN2 Yy4KPj4gUmlnaHQ/Cj4+Cj4gSSBhZ3JlZSB0aGF0LCBpbiBjYXNlIG9mIHJlcGxlbmlzaG1lbnQg b2YgYSBydW5uaW5nIHZjcHUsIGNhbGxpbmcKPiBydW5xX3RpY2tsZSgpIGxpa2UgdGhpcyBpcyBu b3QgY29ycmVjdC4gSW4gZmFjdCwgdGhlIHdob2xlIGlkZWEgb2YKPiB0aWNrbGluZyBpbiBDcmVk aXQxIGFuZCAyLCBmcm9tIHdoaWNoIGl0IGhhcyBiZWVuIGJvcnJvd2VkIHRvIGhlcmUsIHdhcwo+ IG1lYW50IGF0IChwb3RlbnRpYWxseSkgcHV0dGluZyBhIHZjcHUgaW4gZXhlY3V0aW9uLCBub3Qg dmljZSB2ZXJzYS4gOi0vCj4KPiBJIHRoZXJlZm9yZSBhZ3JlZSB0aGF0LCBpZiBzdmMgZW5kcyB1 cCB3aXRoIGEgbGF0ZXIgZGVhZGxpbmUgdGhhbiB0aGUKPiBmaXJzdCB2Y3B1IGluIHRoZSBydW5x dWUsIHdlIHNob3VsZCBhY3R1YWxseSBjYWxsIHJ1bl90aWNrbGUoKSBvbiB0aGUKPiBsYXR0ZXIh Cj4KPj4gQWN0dWFsbHksIGlzIHRoZSBydW5xX3RpY2tsZSBuZWNlc3NhcnkgaGVyZT8gQ2FuIHdl IGp1c3QgY2hlY2sgaWYgdGhlCj4+IHVwZGF0ZWQgc3ZjIGhhcyBoaWdoZXIgcHJpb3JpdHkgKHNt YWxsZXIgZGVhZGxpbmUpIHRoYW4gdGhlIGhlYWQgdmNwdQo+PiBpbiB0aGUgcnVucT8gSWYgc28s IHdlIGp1c3QgdGlja2xlIHRoZSBjcHUgUF9pLCB3aGVyZSBzdmMgaXMKPj4gY3VycmVudGx5Cj4+ IHJ1bm5pbmcgb24uCj4+Cj4gV2VsbCwgaWYgd2UgYXJlIHJlcGxlbmlzaGluZyBhIHZjcHUgdGhh dCBpcyBkZXBsZXRlZCwgd2hvc2UgbmV3Cj4gZGVhZGxpbmUgY2FuIGJlIGVhcmxpZXIgdGhhbiBh bnkgb2YgdGhlIG9uZXMgb2YgdGhlIHZjcHVzIHRoYXQgYXJlCj4gcnVubmluZyAoY2FuJ3QgaXQ/ KSBhbmQvb3IgdGhlcmUgY2FuIGJlIGlkbGUgdmNwdXMgb24gd2hpY2ggeW91IGNhbiBydW4KPiBp dCwgbm93IHRoYXQgaXQgaGFzIGJ1ZGdldC4gU28sIGluIHRoaXMgY2FzZSwgSSB0aGluayB3ZSBu ZWVkIHdoYXQncwo+IGRvbmUgaW4gcnVucV90aWNrbGUoKS4uLgo+Cj4gVGhlIHRoaXJkIGNhc2Ug aXMgdGhhdCB3ZSByZXBsZW5pc2ggYSB2Y3B1IHRoYXQgaXMgaW4gdGhlIHJ1bnF1ZXVlLCBzbwo+ IGl0IGhhZCBidWRnZXQsIGJ1dCB3YXMgbm90IHJ1bm5pbmcuIEluIHRoYXQgY2FzZSwgdGhlcmUg c2hvdWxkIGJlIG5vCj4gY2hhbmNlIHRoYXQgaXQgc2hvdWxkIHByZWVtcHQgYSBydW5uaW5nIHZj cHUsIGFzIGl0IHdhcyB3YWl0aW5nIGluIHRoZQo+IHJ1bnF1ZXVlLCB3aGljaCBtZWFucyAtLWlm IHdlIGhhdmUgTSBwY3B1cy0tIGl0IHdhcyBub3QgYW1vbmcgdGhlIE0KPiBlYXJsaWVzdCBkZWFk bGluZSB2Y3B1cywgYW5kIHdlIGp1c3QgcHVzaGVkIGl0cyBkZWFkbGluZSBhd2F5IQo+IEl0IHNo b3VsZCBhbHNvIG5vdCBiZSBuZWNlc3NhcnkgdG8gZG8gYW55IGRlYWRsaW5lIGNvbXBhcmlzb24g d2l0aAo+IG90aGVyIHZjcHVzIGluIHRoZSBydW5xdWV1ZS4gSW4gZmFjdCwgc3RpbGwgY29uc2lk ZXJpbmcgdGhhdCB3ZSBhcmUKPiBtb3ZpbmcgdGhlIGRlYWRsaW5lIGFoZWFkLCBpdCdzIGdvaW5n IHRvIGVpdGhlciBiZSBpbiB0aGUgc2FtZSBvcgo+ICJ3b3JzdCIgcG9zaXRpb24gaW4gdGhlIHJ1 bnF1ZXVlLgo+Cj4+IEJ1dCBlaXRoZXIgd2F5LCBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljIGhlcmUg aXMgaW5jb3JyZWN0LiBJZiB0aGUKPj4gdXBkYXRlZCBzdmMgaGFzIGEgbG93ZXIgcHJpb3JpdHks IHlvdSB3aWxsIGVuZCB1cCB0aWNrbGUgbm8gY29yZQo+PiBhbHRob3VnaCB0aGUgc3ZjIHNob3Vs ZCBiZSBwcmVlbXB0ZWQuCj4+Cj4gSXQgc2VlbXMgdG8gbWUgdGhhdCB0aGUgbG9naWMgaGVyZSBj b3VsZCBiZSAoc29ydC1vZik6Cj4KPiAgIGZvcl9lYWNoX3RvX2JlX3JlcGxlbmlzaGVkX3ZjcHUo dikKPiAgIHsKPiAgICAgZGVhZGxpbmVfcXVldWVfcmVtb3ZlKHJlcGxxLCB2KTsKPiAgICAgcnRf dXBkYXRlX2RlYWRsaW5lKHYpOwo+Cj4gICAgIGlmICggY3Vycl9vbl9jcHUodi0+cHJvY2Vzc29y KSA9PSB2KSkgLy9ydW5uaW5nCj4gICAgIHsKPiAgICAgICAgIGlmICggdi0+Y3VyX2RlYWRsaW5l ID49IHJ1bnFbMF0tPmN1cl9kZWFkbGluZSApCj4gICAgICAgICAgIHRpY2tsZShydW5xWzBdKTsg LyogcnVucVswXSA9PiBmaXJzdCB2Y3B1IGluIHRoZSBydW5xICovCj4gICAgIH0KPiAgICAgZWxz ZSBpZiAoIF9fdmNwdV9vbl9xKHYpICkKPiAgICAgewo+ICAgICAgICAgaWYgKCB2LT5jdXJfYnVk Z2V0ID09IDAgKSAgICAgICAgIC8vZGVwbGV0ZWQKPiAgICAgICAgICAgdGlja2xlKHYpOwo+ICAg ICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcnVubmFibGUKPiAgICAg ICAgICAgLyogZG8gbm90aGluZyAqLwo+ICAgICB9Cj4gICAgIGRlYWRsaW5lX3F1ZXVlX2luc2Vy dCh2LCByZXBscSk7Cj4gICB9Cj4KPiBUaG91Z2h0cz8KCkkgbGlrZSB0aGUgbG9naWMgaGVyZS4g QnV0IHRoZXJlIGlzIG9uZSB0aGluZyB0byBub3RlL2NoYW5nZS4KCkFmdGVyIHdlIHJ1biBydF91 cGRhdGVfZGVhZGxpbmUodiksIHRoZSB2LT5jdXJfZGVhZGxpbmUgd2lsbCBiZSBzZXQgdG8Kdi0+ YnVkZ2V0LCB3aGljaCBtZWFucyB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIHYtPmN1cl9kZWFkbGlu ZSB0bwpkZXRlcm1pbmUgaWYgaXQgaXMgaW4gcnVucSBvciBkZXBsZXRlZHEuCgpJIHN1Z2dlc3Qg dG8gaGF2ZSBhIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2IGlzIGluIGRlcGxldGVkcSBieQp2 LT5jdXJfYnVkZ2V0ID09IDAgZmlyc3QgYmVmb3JlIHdlIHJ1biBydF91cGRhdGVfZGVhZGxpbmUo dik7IGFuZCB1c2UKdGhlIGZsYWcgbGF0ZXIuCgo+Cj4gSSBhY3R1YWxseSB0aGluayB0aGVyZSBt YXkgYmUgcm9vbSBmb3IgYSBuYXN0eSByYWNlLCBpbiBjYXNlIHdlIGRvIG1vcmUKPiB0aGFuIG9u ZSByZXBsZW5pc2htZW50cy4KPgo+IEluIGZhY3QsIGFzc3VtZSB0aGF0LCBhdCB0aW1lIHQ6Cj4g IC0gd2UgZG8gdGhlIHJlcGxlbmlzaG1lbnQgb2YgdjEsIHdoaWNoIGlzIHJ1bm5pbmcgYW5kIHYy LCB3aGljaCBpcwo+ICAgIHJ1bm5hYmxlLAo+ICAtIHdlIGhhdmUgMSBjcHUsCj4gIC0gdjEgYW5k IHYyIGhhdmUsIGN1cnJlbnRseSwgdGhlIHNhbWUgZGVhZGxpbmUgPT0gdCwKPiAgLSB2MSdzIG5l dyBkZWFkbGluZSBpcyBnb2luZyB0byBiZSB0KzEwMCwgYW5kIHYyJ3MgbmV3IGRlYWRsaW5lIGlz Cj4gICAgZ29pbmcgdG8gYmUgdCsxNTAsCj4gIC0gdjIgaXMgdGhlIG9ubHkgKGkuZS4sIGFsc28g dGhlIGZpcnN0KSBydW5uYWJsZSB2Y3B1LAo+ICAtIHYxJ3MgcmVwbGVuaXNobWVudCBldmVudCBj b21lcyBmaXJzdCBpbiB0aGUgcmVwbGVuaXNobWVudCBxdWV1ZS4KPgo+IFdpdGggdGhlIGNvZGUg YWJvdmUsIHdlIHVwZGF0ZSB2MSdzIGRlYWRsaW5lICh0byB0KzEwMCksIGdvIGNoZWNrIGl0Cj4g YWdhaW5zdCB2MidzIF9ub3RfdXBkYXRlZF8gZGVhZGxpbmUgKHQpIGFuZCAoc2luY2UgdCsxMDAg PiB0KSBmaW5kIHRoYXQKPiBhIHByZWVtcHRpb24gaXMgbmVjZXNzYXJ5LCBzbyB3ZSBjYWxsIHRp Y2tsZSh2MikuIFRoYXQgd2lsbCByYWlzZQo+IFNDSEVEVUxFX1NPRlRJUlEgZm9yIHRoZSBjcHUs IGJlY2F1c2UgdjIgc2hvdWxkIC0tYXMgZmFyIGFzIHNpdHVhdGlvbgo+IGlzIHJpZ2h0IG5vdy0t IHByZWVtcHQgdjEuCj4KPiBIb3dldmVyLCByaWdodCBhZnRlciB0aGF0LCB3ZSB1cGRhdGUgdjIn cyBkZWFkbGluZSB0byB0KzE1MCwgYW5kIHdlIGRvCj4gbm90aGluZy4gU28sIGV2ZW4gaWYgdGhl IHZjcHUgd2l0aCB0aGUgZWFybGllc3QgZGVhZGxpbmUgKHYxKSBpcwo+IHJ1bm5pbmcsIHdlIHJl c2NoZWR1bGUuCgpIbW0sIEkga2luZCBvZiBnZXQgd2hhdCB5b3Ugd2FudCB0byBkZWxpdmVyIHdp dGggdGhlIGV4YW1wbGUgaGVyZS4gSSBhZ3JlZS4KSSB3aWxsIGp1c3Qgc3VtbWFyaXplIHdoYXQg SSB1bmRlcnN0YW5kIGhlcmU6CldoZW4gd2UgcmVwbGVuaXNoIFZDUFUgb25lIGJ5IG9uZSBhbmQg dGlja2xlIHRoZW0gb25lIGJ5IG9uZSwgd2UgbWF5CmVuZCB1cCB1c2UgYSB0by1iZS11cGRhdGVk IHZjcHUgdG8gdGlja2xlLCB3aGljaCB3aWxsIHByb2JhYmx5IGJlCiJraWNrZWQgb3V0IiBieSB0 aGUgbmV4dCB0by1iZS11cGRhdGVkIHZjcHUuCgpUaGUgcnRfc2NoZWR1bGUgd2lsbCBwcm9iYWJs eSBkbyBhIG5vb3AgZm9yIHRoZSB0by1iZS11cGRhdGVkIHZjcHUKc2luY2UgaXQgY2FuIHRlbGwg dGhpcyB2Y3B1IGFjdHVhbGx5IG1pc3NlcyBkZWFkbGluZSAoYmVjYXVzZSB0aGlzCnZjcHUgaXMg YWJvdXQgdG8gdXBkYXRlIHRoZSBkZWFkbGluZSwgaXQgbWVhbnMgdGhpcyB2Y3B1IGp1c3QKcmVh Y2hlcy9wYXNzZWQgdGhlIGN1cnJlbnQgZGVhZGxpbmUuKQoKPgo+IFRoaXMgc2hvdWxkIGJlIGhh cm1sZXNzLCBhcyB3ZSBkbyBmaWd1cmUgb3V0IGR1cmluZyBydF9zY2hlZHVsZSgpIHRoYXQKPiBu byByZWFsIGNvbnRleHQgc3dpdGNoIGlzIG5lY2Vzc2FyeSwgYnV0IEkgdGhpbmsgaXQgd291bGQg YmV0dGVyIGJlCj4gYXZvaWRlZCwgaWYgcG9zc2libGUuClJpZ2h0Ci4KCj4KPiBJdCBsb29rcyB0 byBtZSB0aGF0IHdlIGNhbiByZS1hcnJhbmdlIHRoZSBjb2RlIGFib3ZlIGFzIGZvbGxvd3M6Cj4K PiAgIGZvcl9lYWNoX3RvX2JlX3JlcGxlbmlzaGVkX3ZjcHUodikKPiAgIHsKPiAgICAgcnRfdXBk YXRlX2RlYWRsaW5lKHYpOwo+ICAgfQoKd2UgaGF2ZSB0byByZWNvcmQgdGhlIG51bWJlciBvZiBW Q1BVcyB0aGF0IGhhcyB1cGRhdGVkIHRoZWlyIGRlYWRsaW5lLApzbyB0aGF0IHdlIGtub3cgd2hl biB0byBzdG9wIGZvciB0aGUgbmV4dCBsb29wLi4KPgo+ICAgZm9yX2VhY2hfdG9fYmVfcmVwbGVu aXNoZWRfdmNwdSh2KQo+ICAgewo+ICAgICBkZWFkbGluZV9xdWV1ZV9yZW1vdmUocmVwbHEsIHYp Owo+Cj4gICAgIGlmICggY3Vycl9vbl9jcHUodi0+cHJvY2Vzc29yKSA9PSB2KSkgLy9ydW5uaW5n Cj4gICAgIHsKPiAgICAgICAgIGlmICggdi0+Y3VyX2RlYWRsaW5lID49IHJ1bnFbMF0tPmN1cl9k ZWFkbGluZSApCj4gICAgICAgICAgIHRpY2tsZShydW5xWzBdKTsgLyogcnVucVswXSA9PiBmaXJz dCB2Y3B1IGluIHRoZSBydW5xICovCj4gICAgIH0KPiAgICAgZWxzZSBpZiAoIF9fdmNwdV9vbl9x KHYpICkKPiAgICAgewo+ICAgICAgICAgaWYgKCB2LT5jdXJfYnVkZ2V0ID09IDAgKSAgICAgICAg IC8vZGVwbGV0ZWQKPiAgICAgICAgICAgdGlja2xlKHYpOwo+ICAgICAgICAgZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vcnVubmFibGUKPiAgICAgICAgICAgLyogZG8gbm90aGlu ZyAqLwo+ICAgICB9Cj4gICAgIGRlYWRsaW5lX3F1ZXVlX2luc2VydCh2LCByZXBscSk7Cj4gICB9 Cj4KPiBCYXNpY2FsbHksIGJ5IGRvaW5nIGFsbCB0aGUgcmVwbGVuaXNobWVudHMgKHdoaWNoIGlu Y2x1ZGVzIHVwZGF0aW5nIGFsbAo+IHRoZSBkZWFkbGluZXMpIHVwZnJvbnQsIHdlIHNob3VsZCBi ZSBhYmxlIHRvIHByZXZlbnQgdGhlIGFib3ZlCj4gc2l0dWF0aW9uLgo+Cj4gU28sIGFnYWluLCB0 aG91Z2h0cz8KCkkgdGhpbmsgd2UgbmVlZCB0byBkZWNpZGUgd2hpY2ggdmNwdSBpcyBvbiBkZXBs ZXRlZCBxIGJlZm9yZSB1cGRhdGUKZGVhZGxpbmUgYW5kIHdlIGFsc28gbmVlZCB0byByZWNvcmQg d2hpY2ggdmNwdXMgc2hvdWxkIGJlIHVwZGF0ZWQuIFNvCkkgYWRkZWQgc29tZSBjb2RlIGludG8g eW91ciBjb2RlOgoKI2RlZmluZSBfX1JURFNfaXNfZGVwbGV0ZWQgICAgIDMKI2RlZmluZSBSVERT X2lzX2RlcGxldGVkICAoMTw8X19SVERTX2lzX2RlcGxldGVkKQoKCmludCBudW1fcmVwbF92Y3B1 cyA9IDA7CiBmb3JfZWFjaF90b19iZV9yZXBsZW5pc2hlZF92Y3B1KHYpCiB7CiAgIGlmICh2LT5j dXJfYnVkZ2V0IDw9IDApCiAgICAgICBzZXRfYml0KF9fUlREU19pc19kZXBsZXRlZCwgJnYtPmZs YWdzKTsKCiAgICBydF91cGRhdGVfZGVhZGxpbmUodik7CiAgICBudW1fcmVwbF92Y3B1cysrOwog fQoKICBmb3JfZWFjaF90b19iZV9yZXBsZW5pc2hlZF92Y3B1KHYpCiAgewogICAgZGVhZGxpbmVf cXVldWVfcmVtb3ZlKHJlcGxxLCB2KTsKCiAgICBpZiAoIGN1cnJfb25fY3B1KHYtPnByb2Nlc3Nv cikgPT0gdikpIC8vcnVubmluZwogICAgewogICAgICAgIGlmICggdi0+Y3VyX2RlYWRsaW5lID49 IHJ1bnFbMF0tPmN1cl9kZWFkbGluZSApCiAgICAgICAgICB0aWNrbGUocnVucVswXSk7IC8qIHJ1 bnFbMF0gPT4gZmlyc3QgdmNwdSBpbiB0aGUgcnVucSAqLwogICAgfQogICAgZWxzZSBpZiAoIF9f dmNwdV9vbl9xKHYpICkKICAgIHsKICAgICAgICBpZiAoIHYtPmZsYWdzICYgUlREU19pc19kZXBs ZXRlZCApICAgICAgICAgLy9kZXBsZXRlZAogICAgICAgIHsKICAgICAgICAgIGNsZWFyX2JpdChf X1JURFNfaXNfZGVwbGV0ZWQsICZ2LT5mbGFncyk7CiAgICAgICAgICB0aWNrbGUodik7CiAgICAg ICAgfQogICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3J1bm5hYmxl CiAgICAgICAgICAvKiBkbyBub3RoaW5nICovCiAgICB9CiAgICBkZWFkbGluZV9xdWV1ZV9pbnNl cnQodiwgcmVwbHEpOwoKICAgIC8qIHN0b3AgYXQgdGhlIHZjcHUgdGhhdCBkb2VzIG5vdCBuZWVk IHJlcGxlbmlzaG1lbnQgKi8KICAgIG51bV9yZXBsX3ZjcHVzLS07CiAgICBpZiAoIW51bV9yZXBs X3ZjcHVzKQogICAgICAgIGJyZWFrOwogfQoKV2hhdCBkbyB5b3UgdGhpbmsgdGhpcyB2ZXJzaW9u PwoKVGhhbmtzIGFuZCBCZXN0IFJlZ2FyZHMsCgpNZW5nCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=