From mboxrd@z Thu Jan 1 00:00:00 1970 From: anshul makkar Subject: Re: [PATCH 17/24] xen: credit2: soft-affinity awareness in runq_tickle() Date: Thu, 1 Sep 2016 11:52:50 +0100 Message-ID: <57C80882.90102@citrix.com> References: <147145358844.25877.7490417583264534196.stgit@Solace.fritz.box> <147145437291.25877.11396888641547651914.stgit@Solace.fritz.box> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 1bfPcI-0007wP-FS for xen-devel@lists.xenproject.org; Thu, 01 Sep 2016 10:53:06 +0000 In-Reply-To: <147145437291.25877.11396888641547651914.stgit@Solace.fritz.box> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli , xen-devel@lists.xenproject.org Cc: "Justin T. Weaver" , George Dunlap List-Id: xen-devel@lists.xenproject.org T24gMTcvMDgvMTYgMTg6MTksIERhcmlvIEZhZ2dpb2xpIHdyb3RlOgo+IFRoaXMgaXMgZG9uZSBi eSBtZWFucyBvZiB0aGUgInVzdWFsIiB0d28gc3RlcHMgbG9vcDoKPiAgIC0gc29mdCBhZmZpbml0 eSBiYWxhbmNlIHN0ZXA7Cj4gICAtIGhhcmQgYWZmaW5pdHkgYmFsYW5jZSBzdGVwLgo+Cj4gVGhl IGVudGlyZSBsb2dpYyBpbXBsZW1lbnRlZCBpbiBydW5xX3RpY2tsZSgpIGlzCj4gYXBwbGllZCwg ZHVyaW5nIHRoZSBmaXJzdCBzdGVwLCBjb25zaWRlcmluZyBvbmx5IHRoZQo+IENQVXMgaW4gdGhl IHZjcHUncyBzb2Z0IGFmZmluaXR5LiBJbiB0aGUgc2Vjb25kIHN0ZXAsCj4gd2UgZmFsbCBiYWNr IHRvIHVzZSBhbGwgdGhlIENQVXMgZnJvbSBpdHMgaGFyZAo+IGFmZmluaXR5IChhcyBpdCBpcyBk b2luZyBub3csIHdpdGhvdXQgdGhpcyBwYXRjaCkuCj4KPiBTaWduZWQtb2ZmLWJ5OiBEYXJpbyBG YWdnaW9saSA8ZGFyaW8uZmFnZ2lvbGlAY2l0cml4LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBKdXN0 aW4gVC4gV2VhdmVyIDxqdHdlYXZlckBoYXdhaWkuZWR1Pgo+IC0tLQo+IENjOiBHZW9yZ2UgRHVu bGFwIDxnZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+Cj4gQ2M6IEFuc2h1bCBNYWtrYXIgPGFuc2h1 bC5tYWtrYXJAY2l0cml4LmNvbT4KPiAtLS0KPiAgIHhlbi9jb21tb24vc2NoZWRfY3JlZGl0Mi5j IHwgIDI0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ICAg MSBmaWxlIGNoYW5nZWQsIDE1NyBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKPgo+IGRp ZmYgLS1naXQgYS94ZW4vY29tbW9uL3NjaGVkX2NyZWRpdDIuYyBiL3hlbi9jb21tb24vc2NoZWRf Y3JlZGl0Mi5jCj4gaW5kZXggMGQ4M2JkNy4uM2FlZjFiNCAxMDA2NDQKPiAtLS0gYS94ZW4vY29t bW9uL3NjaGVkX2NyZWRpdDIuYwo+ICsrKyBiL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0Mi5jCj4g QEAgLTkwMiw2ICs5MDIsNDIgQEAgX19ydW5xX3JlbW92ZShzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpz dmMpCj4gICAgICAgbGlzdF9kZWxfaW5pdCgmc3ZjLT5ydW5xX2VsZW0pOwo+ICAgfQo+Cj4gKy8q Cj4gKyAqIER1cmluZyB0aGUgc29mdC1hZmZpbml0eSBzdGVwLCBvbmx5IGFjdHVhbGx5IHByZWVt cHQgc29tZW9uZSBpZgo+ICsgKiBoZSBkb2VzIG5vdCBoYXZlIHNvZnQtYWZmaW5pdHkgd2l0aCBj cHUgKHdoaWxlIHdlIGhhdmUpLgo+ICsgKgo+ICsgKiBCRVdBUkUgdGhhdCB0aGlzIHVzZXMgY3B1 bWFza19zY3JhdGNoLCB0cm93aW5nIGF3YXkgd2hhdCdzIGluIHRoZXJlIQpUeXBvOiogQkVXQVJF IHRoYXQgdGhpcyB1c2VzIGNwdW1hc2tfc2NyYXRjaCwgdGhyb3dpbmcgYXdheSB3aGF0J3MgaW4g dGhlcmUhCgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sX3Qgc29mdF9hZmZfY2hlY2tfcHJl ZW1wdCh1bnNpZ25lZCBpbnQgYnMsIHVuc2lnbmVkIGludCBjcHUpCj4gK3sKPiArICAgIHN0cnVj dCBjc2NoZWQyX3ZjcHUgKiBjdXIgPSBDU0NIRUQyX1ZDUFUoY3Vycl9vbl9jcHUoY3B1KSk7Cj4g Kwo+ICsgICAgLyoKPiArICAgICAqIElmIHdlJ3JlIGRvaW5nIGhhcmQtYWZmaW5pdHksIGFsd2F5 cyBjaGVjayB3aGV0aGVyIHRvIHByZWVtcHQgY3VyLgo+ICsgICAgICogSWYgd2UncmUgZG9pbmcg c29mdC1hZmZpbml0eSwgYnV0IGN1ciBkb2Vzbid0IGhhdmUgb25lLCBjaGVjayBhcyB3ZWxsLgo+ ICsgICAgICovCj4gKyAgICBpZiAoIGJzID09IEJBTEFOQ0VfSEFSRF9BRkZJTklUWSB8fAo+ICsg ICAgICAgICAhaGFzX3NvZnRfYWZmaW5pdHkoY3VyLT52Y3B1LCBjdXItPnZjcHUtPmNwdV9oYXJk X2FmZmluaXR5KSApCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgLyoKPiArICAgICAq IFdlJ3JlIGRvaW5nIHNvZnQtYWZmaW5pdHksIGFuZCB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnQg dmNwdSBvbiBjcHUKPiArICAgICAqIGhhcyBhIHNvZnQgYWZmaW5pdHkuIFdlIG5vdyB3YW50IHRv IGtub3cgd2hldGhlciBjcHUgaXRzZWxmIGlzIGluClBsZWFzZSBjYW4geW91IGV4cGxhaW4gdGhl IGFib3ZlIHN0YXRtZW50LiBJZiB0aGUgdmNwdSBoYXMgc29mdCBhZmZpbml0eSAKYW5kIGl0cyBj dXJyZW50bHkgZXhlY3V0aW5nLCBkb2Vzbjt0IGl0IGFsd2F5cyBtZWFucyB0aGF0IGl0cyBydW5u aW5nIG9uIApvbmUgb2YgdGhlIHBjcHUgd2hpY2ggaXMgdGhlcmUgaW4gaXRzIHNvZnQgYWZmaW5p dHkgb3IgaGFyZCBhZmZpbml0eT8KPiArICAgICAqIHN1Y2ggYWZmaW5pdHkuIEluIGZhY3QsIHNp bmNlIHdlIG5vdyB0aGF0IG5ldyAoaW4gcnVucV90aWNrbGUoKSkgaXMKVHlwbzogICAqIHN1Y2gg YWZmaW5pdHkuIEluIGZhY3QsIHNpbmNlIG5vdyB3ZSBrbm93IHRoYXQgbmV3IChpbiAKcnVucV90 aWNrbGUoKSkgaXMKPiArICAgICAqICAtIGlmIGNwdSBpcyBub3QgaW4gY3VyJ3Mgc29mdC1hZmZp bml0eSwgd2Ugc2hvdWxkIGluZGVlZCBjaGVjayB0bwo+ICsgICAgICogICAgc2VlIHdoZXRoZXIg bmV3IHNob3VsZCBwcmVlbXB0IGN1ci4gSWYgdGhhdCB3aWxsIGJlIHRoZSBjYXNlLCB0aGF0Cj4g KyAgICAgKiAgICB3b3VsZCBiZSBhbiBpbXByb3ZlbWVudCB3cnQgcmVzcGVjdGluZyBzb2Z0IGFm ZmluaXR5Owo+ICsgICAgICogIC0gaWYgY3B1IGlzIGluIGN1cidzIHNvZnQtYWZmaW5pdHksIHdl IGxlYXZlIGl0IGFsb25lIGFuZCAoaW4KPiArICAgICAqICAgIHJ1bnFfdGlja2xlKCkpIG1vdmUg b24gdG8gYW5vdGhlciBjcHUuIEluIGZhY3QsIHdlIGRvbid0IHdhbnQgdG8KPiArICAgICAqICAg IGJlIHRvbyBoYXJzaCB3aXRoIHNvbWVvbmUgd2hpY2ggaXMgcnVubmluZyB3aXRoaW4gaXRzIHNv ZnQtYWZmaW5pdHkuCj4gKyAgICAgKiAgICBUaGlzIGlzIHNhZmUgYmVjYXVzZSBsYXRlciwgaWYg d2UgZG9uJ3QgZmluZSBhbnlvbmUgZWxzZSBkdXJpbmcgdGhlCj4gKyAgICAgKiAgICBzb2Z0LWFm ZmluaXR5IHN0ZXAsIHdlIHdpbGwgY2hlY2sgY3B1IGZvciBwcmVlbXB0aW9uIGFueXdheSwgd2hl bgo+ICsgICAgICogICAgZG9pbmcgaGFyZC1hZmZpbml0eS4KPiArICAgICAqLwo+ICsgICAgYWZm aW5pdHlfYmFsYW5jZV9jcHVtYXNrKGN1ci0+dmNwdSwgQkFMQU5DRV9TT0ZUX0FGRklOSVRZLCBj cHVtYXNrX3NjcmF0Y2gpOwo+ICsgICAgcmV0dXJuICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1 bWFza19zY3JhdGNoKTsKPiArfQo+ICsKPiAgIHZvaWQgYnVybl9jcmVkaXRzKHN0cnVjdCBjc2No ZWQyX3J1bnF1ZXVlX2RhdGEgKnJxZCwgc3RydWN0IGNzY2hlZDJfdmNwdSAqLCBzX3RpbWVfdCk7 Cj4KPiAgIC8qCj4gQEAgLTkyNSw3ICs5NjEsNyBAQCBydW5xX3RpY2tsZShjb25zdCBzdHJ1Y3Qg c2NoZWR1bGVyICpvcHMsIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKm5ldywgc190aW1lX3Qgbm93KQo+ ICAgewo+ICAgICAgIGludCBpLCBpcGlkID0gLTE7Cj4gICAgICAgc190aW1lX3QgbG93ZXN0ID0g KDE8PDMwKTsKPiAtICAgIHVuc2lnbmVkIGludCBjcHUgPSBuZXctPnZjcHUtPnByb2Nlc3NvcjsK PiArICAgIHVuc2lnbmVkIGludCBicywgY3B1ID0gbmV3LT52Y3B1LT5wcm9jZXNzb3I7Cj4gICAg ICAgc3RydWN0IGNzY2hlZDJfcnVucXVldWVfZGF0YSAqcnFkID0gUlFEKG9wcywgY3B1KTsKPiAg ICAgICBjcHVtYXNrX3QgbWFzazsKPiAgICAgICBzdHJ1Y3QgY3NjaGVkMl92Y3B1ICogY3VyOwo+ IEBAIC05NDcsMTA5ICs5ODMsMTQ0IEBAIHJ1bnFfdGlja2xlKGNvbnN0IHN0cnVjdCBzY2hlZHVs ZXIgKm9wcywgc3RydWN0IGNzY2hlZDJfdmNwdSAqbmV3LCBzX3RpbWVfdCBub3cpCj4gICAgICAg ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmQpOwo+ICAgICAgIH0KPgo+IC0gICAg LyoKPiAtICAgICAqIEZpcnN0IG9mIGFsbCwgY29uc2lkZXIgaWRsZSBjcHVzLCBjaGVja2luZyBp ZiB3ZSBjYW4ganVzdAo+IC0gICAgICogcmUtdXNlIHRoZSBwY3B1IHdoZXJlIHdlIHdlcmUgcnVu bmluZyBiZWZvcmUuCj4gLSAgICAgKgo+IC0gICAgICogSWYgdGhlcmUgYXJlIGNvcmVzIHdoZXJl IGFsbCB0aGUgc2libGluZ3MgYXJlIGlkbGUsIGNvbnNpZGVyCj4gLSAgICAgKiB0aGVtIGZpcnN0 LCBob25vcmluZyB3aGF0ZXZlciB0aGUgc3ByZWFkaW5nLXZzLWNvbnNvbGlkYXRpb24KPiAtICAg ICAqIFNNVCBwb2xpY3kgd2FudHMgdXMgdG8gZG8uCj4gLSAgICAgKi8KPiAtICAgIGlmICggdW5s aWtlbHkoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpICkKPiAtICAgICAgICBjcHVtYXNrX2FuZG5v dCgmbWFzaywgJnJxZC0+aWRsZSwgJnJxZC0+c210X2lkbGUpOwo+IC0gICAgZWxzZQo+IC0gICAg ICAgIGNwdW1hc2tfY29weSgmbWFzaywgJnJxZC0+c210X2lkbGUpOwo+IC0gICAgY3B1bWFza19h bmQoJm1hc2ssICZtYXNrLCBuZXctPnZjcHUtPmNwdV9oYXJkX2FmZmluaXR5KTsKPiAtICAgIGkg PSBjcHVtYXNrX3Rlc3Rfb3JfY3ljbGUoY3B1LCAmbWFzayk7Cj4gLSAgICBpZiAoIGkgPCBucl9j cHVfaWRzICkKPiArICAgIGZvcl9lYWNoX2FmZmluaXR5X2JhbGFuY2Vfc3RlcCggYnMgKQo+ICAg ICAgIHsKPiAtICAgICAgICBTQ0hFRF9TVEFUX0NSQU5LKHRpY2tsZWRfaWRsZV9jcHUpOwo+IC0g ICAgICAgIGlwaWQgPSBpOwo+IC0gICAgICAgIGdvdG8gdGlja2xlOwo+IC0gICAgfQo+ICsgICAg ICAgIC8qCj4gKyAgICAgICAgICogRmlyc3QgdGhpbmdzIGZpcnN0OiBpZiB3ZSBhcmUgYXQgdGhl IGZpcnN0IChzb2Z0IGFmZmluaXR5KSBzdGVwLAo+ICsgICAgICAgICAqIGJ1dCBuZXcgZG9lc24n dCBoYXZlIGEgc29mdCBhZmZpbml0eSwgc2tpcCB0aGlzIHN0ZXAuCj4gKyAgICAgICAgICovCj4g KyAgICAgICAgaWYgKCBicyA9PSBCQUxBTkNFX1NPRlRfQUZGSU5JVFkgJiYKPiArICAgICAgICAg ICAgICFoYXNfc29mdF9hZmZpbml0eShuZXctPnZjcHUsIG5ldy0+dmNwdS0+Y3B1X2hhcmRfYWZm aW5pdHkpICkKPiArICAgICAgICAgICAgY29udGludWU7Cj4KPiAtICAgIC8qCj4gLSAgICAgKiBJ ZiB0aGVyZSBhcmUgbm8gZnVsbHkgaWRsZSBjb3JlcywgY2hlY2sgYWxsIGlkbGVycywgYWZ0ZXIK PiAtICAgICAqIGhhdmluZyBmaWx0ZXJlZCBvdXQgcGNwdXMgdGhhdCBoYXZlIGJlZW4gdGlja2xl ZCBidXQgaGF2ZW4ndAo+IC0gICAgICogZ29uZSB0aHJvdWdoIHRoZSBzY2hlZHVsZXIgeWV0Lgo+ IC0gICAgICovCj4gLSAgICBjcHVtYXNrX2FuZG5vdCgmbWFzaywgJnJxZC0+aWRsZSwgJnJxZC0+ dGlja2xlZCk7Cj4gLSAgICBjcHVtYXNrX2FuZCgmbWFzaywgJm1hc2ssIG5ldy0+dmNwdS0+Y3B1 X2hhcmRfYWZmaW5pdHkpOwo+IC0gICAgaSA9IGNwdW1hc2tfdGVzdF9vcl9jeWNsZShjcHUsICZt YXNrKTsKPiAtICAgIGlmICggaSA8IG5yX2NwdV9pZHMgKQo+IC0gICAgewo+IC0gICAgICAgIFND SEVEX1NUQVRfQ1JBTksodGlja2xlZF9pZGxlX2NwdSk7Cj4gLSAgICAgICAgaXBpZCA9IGk7Cj4g LSAgICAgICAgZ290byB0aWNrbGU7Cj4gLSAgICB9Cj4gKyAgICAgICAgYWZmaW5pdHlfYmFsYW5j ZV9jcHVtYXNrKG5ldy0+dmNwdSwgYnMsIGNwdW1hc2tfc2NyYXRjaCk7Cj4KPiAtICAgIC8qCj4g LSAgICAgKiBPdGhlcndpc2UsIGxvb2sgZm9yIHRoZSBub24taWRsZSAoYW5kIG5vbi10aWNrbGVk KSBwcm9jZXNzb3JzIHdpdGgKPiAtICAgICAqIHRoZSBsb3dlc3QgY3JlZGl0LCBhbW9uZyB0aGUg b25lcyBuZXcgaXMgYWxsb3dlZCB0byBydW4gb24uIEFnYWluLAo+IC0gICAgICogdGhlIGNwdSB3 ZXJlIGl0IHdhcyBydW5uaW5nIG9uIHdvdWxkIGJlIHRoZSBiZXN0IGNhbmRpZGF0ZS4KPiAtICAg ICAqLwo+IC0gICAgY3B1bWFza19hbmRub3QoJm1hc2ssICZycWQtPmFjdGl2ZSwgJnJxZC0+aWRs ZSk7Cj4gLSAgICBjcHVtYXNrX2FuZG5vdCgmbWFzaywgJm1hc2ssICZycWQtPnRpY2tsZWQpOwo+ IC0gICAgY3B1bWFza19hbmQoJm1hc2ssICZtYXNrLCBuZXctPnZjcHUtPmNwdV9oYXJkX2FmZmlu aXR5KTsKPiAtICAgIGlmICggY3B1bWFza190ZXN0X2NwdShjcHUsICZtYXNrKSApCj4gLSAgICB7 Cj4gLSAgICAgICAgY3VyID0gQ1NDSEVEMl9WQ1BVKGN1cnJfb25fY3B1KGNwdSkpOwo+IC0gICAg ICAgIGJ1cm5fY3JlZGl0cyhycWQsIGN1ciwgbm93KTsKPiArICAgICAgICAvKgo+ICsgICAgICAg ICAqIEZpcnN0IG9mIGFsbCwgY29uc2lkZXIgaWRsZSBjcHVzLCBjaGVja2luZyBpZiB3ZSBjYW4g anVzdAo+ICsgICAgICAgICAqIHJlLXVzZSB0aGUgcGNwdSB3aGVyZSB3ZSB3ZXJlIHJ1bm5pbmcg YmVmb3JlLgo+ICsgICAgICAgICAqCj4gKyAgICAgICAgICogSWYgdGhlcmUgYXJlIGNvcmVzIHdo ZXJlIGFsbCB0aGUgc2libGluZ3MgYXJlIGlkbGUsIGNvbnNpZGVyCj4gKyAgICAgICAgICogdGhl bSBmaXJzdCwgaG9ub3Jpbmcgd2hhdGV2ZXIgdGhlIHNwcmVhZGluZy12cy1jb25zb2xpZGF0aW9u Cj4gKyAgICAgICAgICogU01UIHBvbGljeSB3YW50cyB1cyB0byBkby4KPiArICAgICAgICAgKi8K PiArICAgICAgICBpZiAoIHVubGlrZWx5KHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKSApCj4gKyAg ICAgICAgICAgIGNwdW1hc2tfYW5kbm90KCZtYXNrLCAmcnFkLT5pZGxlLCAmcnFkLT5zbXRfaWRs ZSk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBjcHVtYXNrX2NvcHkoJm1hc2ssICZy cWQtPnNtdF9pZGxlKTsKPiArICAgICAgICBjcHVtYXNrX2FuZCgmbWFzaywgJm1hc2ssIGNwdW1h c2tfc2NyYXRjaCk7Cj4gKyAgICAgICAgaSA9IGNwdW1hc2tfdGVzdF9vcl9jeWNsZShjcHUsICZt YXNrKTsKPiArICAgICAgICBpZiAoIGkgPCBucl9jcHVfaWRzICkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAgIFNDSEVEX1NUQVRfQ1JBTksodGlja2xlZF9pZGxlX2NwdSk7Cj4gKyAgICAgICAg ICAgIGlwaWQgPSBpOwo+ICsgICAgICAgICAgICBnb3RvIHRpY2tsZTsKPiArICAgICAgICB9Cj4K PiAtICAgICAgICBpZiAoIGN1ci0+Y3JlZGl0IDwgbmV3LT5jcmVkaXQgKQo+ICsgICAgICAgIC8q Cj4gKyAgICAgICAgICogSWYgdGhlcmUgYXJlIG5vIGZ1bGx5IGlkbGUgY29yZXMsIGNoZWNrIGFs bCBpZGxlcnMsIGFmdGVyCj4gKyAgICAgICAgICogaGF2aW5nIGZpbHRlcmVkIG91dCBwY3B1cyB0 aGF0IGhhdmUgYmVlbiB0aWNrbGVkIGJ1dCBoYXZlbid0Cj4gKyAgICAgICAgICogZ29uZSB0aHJv dWdoIHRoZSBzY2hlZHVsZXIgeWV0Lgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGNwdW1hc2tf YW5kbm90KCZtYXNrLCAmcnFkLT5pZGxlLCAmcnFkLT50aWNrbGVkKTsKPiArICAgICAgICBjcHVt YXNrX2FuZCgmbWFzaywgJm1hc2ssIGNwdW1hc2tfc2NyYXRjaCk7Cj4gKyAgICAgICAgaSA9IGNw dW1hc2tfdGVzdF9vcl9jeWNsZShjcHUsICZtYXNrKTsKPiArICAgICAgICBpZiAoIGkgPCBucl9j cHVfaWRzICkKPiAgICAgICAgICAgewo+IC0gICAgICAgICAgICBTQ0hFRF9TVEFUX0NSQU5LKHRp Y2tsZWRfYnVzeV9jcHUpOwo+IC0gICAgICAgICAgICBpcGlkID0gY3B1Owo+ICsgICAgICAgICAg ICBTQ0hFRF9TVEFUX0NSQU5LKHRpY2tsZWRfaWRsZV9jcHUpOwo+ICsgICAgICAgICAgICBpcGlk ID0gaTsKPiAgICAgICAgICAgICAgIGdvdG8gdGlja2xlOwo+ICAgICAgICAgICB9Cj4gLSAgICB9 Cj4KPiAtICAgIGZvcl9lYWNoX2NwdShpLCAmbWFzaykKPiAtICAgIHsKPiAtICAgICAgICAvKiBB bHJlYWR5IGxvb2tlZCBhdCB0aGlzIG9uZSBhYm92ZSAqLwo+IC0gICAgICAgIGlmICggaSA9PSBj cHUgKQo+IC0gICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAq IE90aGVyd2lzZSwgbG9vayBmb3IgdGhlIG5vbi1pZGxlIChhbmQgbm9uLXRpY2tsZWQpIHByb2Nl c3NvcnMgd2l0aAo+ICsgICAgICAgICAqIHRoZSBsb3dlc3QgY3JlZGl0LCBhbW9uZyB0aGUgb25l cyBuZXcgaXMgYWxsb3dlZCB0byBydW4gb24uIEFnYWluLAo+ICsgICAgICAgICAqIHRoZSBjcHUg d2VyZSBpdCB3YXMgcnVubmluZyBvbiB3b3VsZCBiZSB0aGUgYmVzdCBjYW5kaWRhdGUuCj4gKyAg ICAgICAgICovCj4gKyAgICAgICAgY3B1bWFza19hbmRub3QoJm1hc2ssICZycWQtPmFjdGl2ZSwg JnJxZC0+aWRsZSk7Cj4gKyAgICAgICAgY3B1bWFza19hbmRub3QoJm1hc2ssICZtYXNrLCAmcnFk LT50aWNrbGVkKTsKPiArICAgICAgICBjcHVtYXNrX2FuZCgmbWFzaywgJm1hc2ssIGNwdW1hc2tf c2NyYXRjaCk7Cj4gKyAgICAgICAgaWYgKCBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJm1hc2spICkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGN1ciA9IENTQ0hFRDJfVkNQVShjdXJyX29uX2Nw dShjcHUpKTsKPgo+IC0gICAgICAgIGN1ciA9IENTQ0hFRDJfVkNQVShjdXJyX29uX2NwdShpKSk7 Cj4gKyAgICAgICAgICAgIGlmICggc29mdF9hZmZfY2hlY2tfcHJlZW1wdChicywgY3B1KSApCj4g KyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIGJ1cm5fY3JlZGl0cyhycWQsIGN1ciwg bm93KTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHRiX2luaXRfZG9uZSkg KQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHZjcHU6MTYsIGRvbToxNjsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY3B1LCBjcmVkaXQ7Cj4gKyAgICAgICAgICAg ICAgICAgICAgfSBkOwo+ICsgICAgICAgICAgICAgICAgICAgIGQuZG9tID0gY3VyLT52Y3B1LT5k b21haW4tPmRvbWFpbl9pZDsKPiArICAgICAgICAgICAgICAgICAgICBkLnZjcHUgPSBjdXItPnZj cHUtPnZjcHVfaWQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgZC5jcmVkaXQgPSBjdXItPmNyZWRp dDsKPiArICAgICAgICAgICAgICAgICAgICBkLmNwdSA9IGNwdTsKPiArICAgICAgICAgICAgICAg ICAgICBfX3RyYWNlX3ZhcihUUkNfQ1NDSEVEMl9USUNLTEVfQ0hFQ0ssIDEsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGQpLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmQpOwo+ICsgICAgICAgICAgICAgICAgfQo+ ICsKPiArICAgICAgICAgICAgICAgIGlmICggY3VyLT5jcmVkaXQgPCBuZXctPmNyZWRpdCApCj4g KyAgICAgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgU0NIRURfU1RBVF9DUkFO Syh0aWNrbGVkX2J1c3lfY3B1KTsKPiArICAgICAgICAgICAgICAgICAgICBpcGlkID0gY3B1Owo+ ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gdGlja2xlOwo+ICsgICAgICAgICAgICAgICAgfQo+ ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+Cj4gLSAgICAgICAgQVNTRVJUKCFpc19pZGxl X3ZjcHUoY3VyLT52Y3B1KSk7Cj4gKyAgICAgICAgZm9yX2VhY2hfY3B1KGksICZtYXNrKQo+ICsg ICAgICAgIHsKPiArICAgICAgICAgICAgLyogQWxyZWFkeSBsb29rZWQgYXQgdGhpcyBvbmUgYWJv dmUgKi8KPiArICAgICAgICAgICAgaWYgKCBpID09IGNwdSApCj4gKyAgICAgICAgICAgICAgICBj b250aW51ZTsKPgo+IC0gICAgICAgIC8qIFVwZGF0ZSBjcmVkaXRzIGZvciBjdXJyZW50IHRvIHNl ZSBpZiB3ZSB3YW50IHRvIHByZWVtcHQuICovCj4gLSAgICAgICAgYnVybl9jcmVkaXRzKHJxZCwg Y3VyLCBub3cpOwo+ICsgICAgICAgICAgICBjdXIgPSBDU0NIRUQyX1ZDUFUoY3Vycl9vbl9jcHUo aSkpOwo+ICsgICAgICAgICAgICBBU1NFUlQoIWlzX2lkbGVfdmNwdShjdXItPnZjcHUpKTsKPgo+ IC0gICAgICAgIGlmICggY3VyLT5jcmVkaXQgPCBsb3dlc3QgKQo+IC0gICAgICAgIHsKPiAtICAg ICAgICAgICAgaXBpZCA9IGk7Cj4gLSAgICAgICAgICAgIGxvd2VzdCA9IGN1ci0+Y3JlZGl0Owo+ ICsgICAgICAgICAgICBpZiAoIHNvZnRfYWZmX2NoZWNrX3ByZWVtcHQoYnMsIGkpICkKPiArICAg ICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgLyogVXBkYXRlIGNyZWRpdHMgZm9yIGN1cnJl bnQgdG8gc2VlIGlmIHdlIHdhbnQgdG8gcHJlZW1wdC4gKi8KPiArICAgICAgICAgICAgICAgIGJ1 cm5fY3JlZGl0cyhycWQsIGN1ciwgbm93KTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoIHVu bGlrZWx5KHRiX2luaXRfZG9uZSkgKQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHZj cHU6MTYsIGRvbToxNjsKPiArICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY3B1LCBj cmVkaXQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgfSBkOwo+ICsgICAgICAgICAgICAgICAgICAg IGQuZG9tID0gY3VyLT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZDsKPiArICAgICAgICAgICAgICAg ICAgICBkLnZjcHUgPSBjdXItPnZjcHUtPnZjcHVfaWQ7Cj4gKyAgICAgICAgICAgICAgICAgICAg ZC5jcmVkaXQgPSBjdXItPmNyZWRpdDsKPiArICAgICAgICAgICAgICAgICAgICBkLmNwdSA9IGk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgX190cmFjZV92YXIoVFJDX0NTQ0hFRDJfVElDS0xFX0NI RUNLLCAxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkKSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKPiAr ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoIGN1ci0+Y3JlZGl0 IDwgbG93ZXN0ICkKPiArICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgICBp cGlkID0gaTsKPiArICAgICAgICAgICAgICAgICAgICBsb3dlc3QgPSBjdXItPmNyZWRpdDsKPiAr ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICAgICAgICAgICB9Cj4KPiAtICAg ICAgICBpZiAoIHVubGlrZWx5KHRiX2luaXRfZG9uZSkgKQo+ICsgICAgICAgIC8qCj4gKyAgICAg ICAgICogT25seSBzd2l0Y2ggdG8gYW5vdGhlciBwcm9jZXNzb3IgaWYgdGhlIGNyZWRpdCBkaWZm ZXJlbmNlIGlzCj4gKyAgICAgICAgICogZ3JlYXRlciB0aGFuIHRoZSBtaWdyYXRlIHJlc2lzdGFu Y2UuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCBpcGlkICE9IC0xICYmIGxvd2VzdCAr IENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgPD0gbmV3LT5jcmVkaXQgKQo+ICAgICAgICAgICB7Cj4g LSAgICAgICAgICAgIHN0cnVjdCB7Cj4gLSAgICAgICAgICAgICAgICB1bnNpZ25lZCB2Y3B1OjE2 LCBkb206MTY7Cj4gLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjcHUsIGNyZWRpdDsKPiAtICAg ICAgICAgICAgfSBkOwo+IC0gICAgICAgICAgICBkLmRvbSA9IGN1ci0+dmNwdS0+ZG9tYWluLT5k b21haW5faWQ7Cj4gLSAgICAgICAgICAgIGQudmNwdSA9IGN1ci0+dmNwdS0+dmNwdV9pZDsKPiAt ICAgICAgICAgICAgZC5jcmVkaXQgPSBjdXItPmNyZWRpdDsKPiAtICAgICAgICAgICAgZC5jcHUg PSBpOwo+IC0gICAgICAgICAgICBfX3RyYWNlX3ZhcihUUkNfQ1NDSEVEMl9USUNLTEVfQ0hFQ0ss IDEsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkKSwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmZCk7Cj4gKyAgICAgICAgICAgIFNDSEVEX1NU QVRfQ1JBTksodGlja2xlZF9idXN5X2NwdSk7Cj4gKyAgICAgICAgICAgIGdvdG8gdGlja2xlOwo+ ICAgICAgICAgICB9Cj4gICAgICAgfQo+Cj4gLSAgICAvKgo+IC0gICAgICogT25seSBzd2l0Y2gg dG8gYW5vdGhlciBwcm9jZXNzb3IgaWYgdGhlIGNyZWRpdCBkaWZmZXJlbmNlIGlzCj4gLSAgICAg KiBncmVhdGVyIHRoYW4gdGhlIG1pZ3JhdGUgcmVzaXN0YW5jZS4KPiAtICAgICAqLwo+IC0gICAg aWYgKCBpcGlkID09IC0xIHx8IGxvd2VzdCArIENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgPiBuZXct PmNyZWRpdCApCj4gLSAgICB7Cj4gLSAgICAgICAgU0NIRURfU1RBVF9DUkFOSyh0aWNrbGVkX25v X2NwdSk7Cj4gLSAgICAgICAgcmV0dXJuOwo+IC0gICAgfQo+IC0KPiAtICAgIFNDSEVEX1NUQVRf Q1JBTksodGlja2xlZF9idXN5X2NwdSk7Cj4gKyAgICBTQ0hFRF9TVEFUX0NSQU5LKHRpY2tsZWRf bm9fY3B1KTsKPiArICAgIHJldHVybjsKPiAgICB0aWNrbGU6Cj4gICAgICAgQlVHX09OKGlwaWQg PT0gLTEpOwo+Cj4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK