From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v3 08/12] x86/hvm/ioreq: maintain an array of ioreq servers rather than a list Date: Tue, 5 Sep 2017 09:06:11 +0000 Message-ID: References: <20170831093605.2757-1-paul.durrant@citrix.com> <20170831093605.2757-9-paul.durrant@citrix.com> <20170904134047.4eychido47muojyy@MacBook-Pro-de-Roger.local> 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 1dp9oE-0002qf-5x for xen-devel@lists.xenproject.org; Tue, 05 Sep 2017 09:06:14 +0000 In-Reply-To: <20170904134047.4eychido47muojyy@MacBook-Pro-de-Roger.local> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Roger Pau Monne Cc: "xen-devel@lists.xenproject.org" , Jan Beulich , Andrew Cooper List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IFJvZ2VyIFBhdSBNb25uZQo+IFNl bnQ6IDA0IFNlcHRlbWJlciAyMDE3IDE0OjQxCj4gVG86IFBhdWwgRHVycmFudCA8UGF1bC5EdXJy YW50QGNpdHJpeC5jb20+Cj4gQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgQW5k cmV3IENvb3Blcgo+IDxBbmRyZXcuQ29vcGVyM0BjaXRyaXguY29tPjsgSmFuIEJldWxpY2ggPGpi ZXVsaWNoQHN1c2UuY29tPgo+IFN1YmplY3Q6IFJlOiBbWGVuLWRldmVsXSBbUEFUQ0ggdjMgMDgv MTJdIHg4Ni9odm0vaW9yZXE6IG1haW50YWluIGFuIGFycmF5Cj4gb2YgaW9yZXEgc2VydmVycyBy YXRoZXIgdGhhbiBhIGxpc3QKPiAKPiBPbiBUaHUsIEF1ZyAzMSwgMjAxNyBhdCAxMDozNjowMUFN ICswMTAwLCBQYXVsIER1cnJhbnQgd3JvdGU6Cj4gPiBBIHN1YnNlcXVlbnQgcGF0Y2ggd2lsbCBy ZW1vdmUgdGhlIGN1cnJlbnQgaW1wbGljaXQgbGltaXRhdGlvbiBvbiBjcmVhdGlvbgo+ID4gb2Yg aW9yZXEgc2VydmVycyB3aGljaCBpcyBkdWUgdG8gdGhlIGFsbG9jYXRpb24gb2YgZ2ZucyBmb3Ig dGhlIGlvcmVxCj4gPiBzdHJ1Y3R1cmVzIGFuZCBidWZmZXJlZCBpb3JlcSByaW5nLgo+ID4KPiA+ IEl0IHdpbGwgdGhlcmVmb3JlIGJlIG5lY2Vzc2FyeSB0byBpbnRyb2R1Y2UgYW4gZXhwbGljaXQg bGltaXQgYW5kLCBzaW5jZQo+ID4gdGhpcyBsaW1pdCBzaG91bGQgYmUgc21hbGwsIGl0IHNpbXBs aWZpZXMgdGhlIGNvZGUgdG8gbWFpbnRhaW4gYW4gYXJyYXkgb2YKPiA+IHRoYXQgc2l6ZSByYXRo ZXIgdGhhbiB1c2luZyBhIGxpc3QuCj4gPgo+ID4gQWxzbywgYnkgcmVzZXJ2aW5nIGFuIGFycmF5 IHNsb3QgZm9yIHRoZSBkZWZhdWx0IHNlcnZlciBhbmQgcG9wdWxhdGluZwo+ID4gYXJyYXkgc2xv dHMgZWFybHkgaW4gY3JlYXRlLCB0aGUgbmVlZCB0byBwYXNzIGFuICdpc19kZWZhdWx0JyBib29s ZWFuCj4gPiB0byBzdWItZnVuY3Rpb25zIGNhbiBiZSBhdm9pZGVkLgo+ID4KPiA+IFNpZ25lZC1v ZmYtYnk6IFBhdWwgRHVycmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+Cj4gPiAtLS0KPiA+ IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+Cj4gPiBDYzogQW5kcmV3IENvb3Bl ciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KPiA+Cj4gPiB2MzoKPiA+ICAtIE5ldyBwYXRj aCAocmVwbGFjaW5nICJtb3ZlIGlzX2RlZmF1bHQgaW50byBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZl ciIpIGluCj4gPiAgICByZXNwb25zZSB0byByZXZpZXcgY29tbWVudHMuCj4gPiAtLS0KPiA+ICB4 ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMgICAgICAgICB8IDUwNyArKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLQo+IC0tLS0KPiA+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21h aW4uaCB8ICAxMSArLQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjQ3IGluc2VydGlvbnMoKyksIDI3 MSBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9pb3Jl cS5jIGIveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jCj4gPiBpbmRleCA1ZTAxZTFhNmQyLi4wZTky NzYzMzg0IDEwMDY0NAo+ID4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jCj4gPiArKysg Yi94ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMKPiA+IEBAIC00NiwxNCArNDYsMTggQEAgc3RhdGlj IGlvcmVxX3QgKmdldF9pb3JlcShzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlcgo+ICpzLCBzdHJ1Y3Qg dmNwdSAqdikKPiA+ICBib29sIGh2bV9pb19wZW5kaW5nKHN0cnVjdCB2Y3B1ICp2KQo+ID4gIHsK PiA+ICAgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKPiA+IC0gICAgc3RydWN0IGh2 bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4gPiArICAgIHVuc2lnbmVkIGludCBpZDsKPiA+Cj4gPiAtICAg IGxpc3RfZm9yX2VhY2hfZW50cnkgKCBzLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg JmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgIGxpc3RfZW50cnkgKQo+ID4gKyAgICBmb3IgKCBpZCA9IDA7IGlkIDwgTUFY X05SX0lPUkVRX1NFUlZFUlM7IGlkKysgKQo+ID4gICAgICB7Cj4gPiArICAgICAgICBzdHJ1Y3Qg aHZtX2lvcmVxX3NlcnZlciAqczsKPiA+ICAgICAgICAgIHN0cnVjdCBodm1faW9yZXFfdmNwdSAq c3Y7Cj4gPgo+ID4gKyAgICAgICAgcyA9IGQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIu c2VydmVyW2lkXTsKPiA+ICsKPiAKPiBObyBuZWVkIGZvciB0aGUgZXh0cmEgbmV3bGluZSBJTUhP IChoZXJlIGFuZCBiZWxvdykuIFlvdSBjb3VsZCBhbHNvCj4gZG8gdGhlIGluaXRpYWxpemF0aW9u IHRvZ2V0aGVyIHdpdGggdGhlIGRlZmluaXRpb24sIGJ1dCBJIGd1ZXNzIHRoYXQncwo+IGdvaW5n IHRvIGV4Y2VlZCB0aGUgbGluZSBjaGFyIGxpbWl0Pwo+IAo+IE9yIGV2ZW4geW91IGNvdWxkIGRv IHNvbWV0aGluZyBsaWtlIHRoaXMgQUZBSUNUOgo+IAo+IGZvciAoIGlkID0gMCwgcyA9IGQtPmFy Y2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIuc2VydmVyWzBdOwo+ICAgICAgIGlkIDwgTUFYX05S X0lPUkVRX1NFUlZFUlM7Cj4gICAgICAgaWQrKywgcyA9IGQtPmFyY2guaHZtX2RvbWFpbi5pb3Jl cV9zZXJ2ZXIuc2VydmVyW2lkXSApCj4gewo+ICAgICAgLi4uLgo+IAo+IEkgd291bGQgbWFrZSB0 aGlzIGEgbWFjcm8gKEZPUkVBQ0hfSU9SRVFfU0VSVkVSIG9yIHNpbWlsYXIpLCBzaW5jZSB0aGUK PiBwYXR0ZXJuIHNlZW1zIHRvIGJlIHJlcGVhdGVkIGluIHF1aXRlIGEgbG90IG9mIHBsYWNlcy4K ClllcywgdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFuLiBJJ2xsIGxvb2sgYXQgZG9pbmcgdGhh dC4KCj4gCj4gPiArI2RlZmluZSBJU19ERUZBVUxUKHMpIFwKPiA+ICsgICAgKHMgPT0gcy0+ZG9t YWluLQo+ID5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLnNlcnZlcltERUZBVUxUX0lPU0VS VklEXSkKPiAKPiBQYXJlbnRoZXNlcyBhcm91bmQgdGhlIGluc3RhbmNlcyBvZiBzIHBsZWFzZS4K CkluZGVlZC4gTWlzc2VkIHRoYXQuCgo+IAo+ID4gIHN0YXRpYyBpbnQgaHZtX2lvcmVxX3NlcnZl cl9hbGxvY19yYW5nZXNldHMoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnMsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2RlZmF1bHQpCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90 IGlkKQo+IAo+IFlvdSBjb3VsZCBnZXQgdGhlIGlkIGJ5IGRvaW5nIHNvbWUgYXJpdGhtZXRpYyB3 aXRoIHRoZSBhcnJheSBhbmQgcywKPiBidXQgSSBkb24ndCB0aGluayB0aGF0J3Mgd29ydGggaXQu Cj4gCgpObywgSSBjYW4ndCBhbnl3YXkgYmVjYXVzZSB0aGUgYXJyYXkgY29udGFpbnMgcG9pbnRl cnMgbm90IHRoZSBzdHJ1Y3RzIHRoZW1zZWx2ZXMuCgo+ID4gIGludCBodm1fY3JlYXRlX2lvcmVx X3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBkb21pZF90IGRvbWlkLAo+ID4gQEAgLTY4NSw1MiAr NjY3LDY2IEBAIGludCBodm1fY3JlYXRlX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+ IGRvbWlkX3QgZG9taWQsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2Vydmlk X3QgKmlkKQo+ID4gIHsKPiA+ICAgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4gPiAr ICAgIHVuc2lnbmVkIGludCBpOwo+ID4gICAgICBpbnQgcmM7Cj4gPgo+ID4gICAgICBpZiAoIGJ1 ZmlvcmVxX2hhbmRsaW5nID4gSFZNX0lPUkVRU1JWX0JVRklPUkVRX0FUT01JQyApCj4gPiAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiA+Cj4gPiAtICAgIHJjID0gLUVOT01FTTsKPiA+ICAgICAg cyA9IHh6YWxsb2Moc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIpOwo+ID4gICAgICBpZiAoICFzICkK PiA+IC0gICAgICAgIGdvdG8gZmFpbDE7Cj4gPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ Cj4gPiAgICAgIGRvbWFpbl9wYXVzZShkKTsKPiA+ICAgICAgc3Bpbl9sb2NrX3JlY3Vyc2l2ZSgm ZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5sb2NrKTsKPiA+Cj4gPiAtICAgIHJjID0g LUVFWElTVDsKPiA+IC0gICAgaWYgKCBpc19kZWZhdWx0ICYmIGQtPmFyY2guaHZtX2RvbWFpbi5k ZWZhdWx0X2lvcmVxX3NlcnZlciAhPSBOVUxMICkKPiA+IC0gICAgICAgIGdvdG8gZmFpbDI7Cj4g PiAtCj4gPiAtICAgIHJjID0gaHZtX2lvcmVxX3NlcnZlcl9pbml0KHMsIGQsIGRvbWlkLCBpc19k ZWZhdWx0LCBidWZpb3JlcV9oYW5kbGluZywKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmV4dF9pb3NlcnZpZChkKSk7Cj4gPiAtICAgIGlmICggcmMgKQo+ID4gLSAgICAgICAg Z290byBmYWlsMzsKPiA+IC0KPiA+IC0gICAgbGlzdF9hZGQoJnMtPmxpc3RfZW50cnksCj4gPiAt ICAgICAgICAgICAgICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QpOwo+ID4g LQo+ID4gICAgICBpZiAoIGlzX2RlZmF1bHQgKQo+ID4gICAgICB7Cj4gPiAtICAgICAgICBkLT5h cmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgPSBzOwo+ID4gLSAgICAgICAgaHZt X2lvcmVxX3NlcnZlcl9lbmFibGUocywgdHJ1ZSk7Cj4gPiArICAgICAgICBpID0gREVGQVVMVF9J T1NFUlZJRDsKPiA+ICsKPiA+ICsgICAgICAgIHJjID0gLUVFWElTVDsKPiA+ICsgICAgICAgIGlm ICggZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5zZXJ2ZXJbaV0gKQo+ID4gKyAgICAg ICAgICAgIGdvdG8gZmFpbDsKPiA+ICsgICAgfQo+ID4gKyAgICBlbHNlCj4gPiArICAgIHsKPiA+ ICsgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX05SX0lPUkVRX1NFUlZFUlM7IGkrKyApCj4g PiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgaWYgKCBpICE9IERFRkFVTFRfSU9TRVJWSUQg JiYKPiA+ICsgICAgICAgICAgICAgICAgICFkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVy LnNlcnZlcltpXSApCj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICAgcmMgPSAtRU5PU1BDOwo+ID4gKyAgICAgICAgaWYgKCBpID49IE1B WF9OUl9JT1JFUV9TRVJWRVJTICkKPiA+ICsgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gPiAgICAg IH0KPiA+Cj4gPiArICAgIGQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIuc2VydmVyW2ld ID0gczsKPiA+ICsKPiA+ICsgICAgcmMgPSBodm1faW9yZXFfc2VydmVyX2luaXQocywgZCwgZG9t aWQsIGJ1ZmlvcmVxX2hhbmRsaW5nLCBpKTsKPiA+ICsgICAgaWYgKCByYyApCj4gPiArICAgICAg ICBnb3RvIGZhaWw7Cj4gPiArCj4gPiArICAgIGlmICggSVNfREVGQVVMVChzKSApCj4gPiArICAg ICAgICBodm1faW9yZXFfc2VydmVyX2VuYWJsZShzKTsKPiA+ICsKPiA+ICAgICAgaWYgKCBpZCAp Cj4gPiAtICAgICAgICAqaWQgPSBzLT5pZDsKPiA+ICsgICAgICAgICppZCA9IGk7Cj4gPiArCj4g PiArICAgIGQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIuY291bnQrKzsKPiA+Cj4gPiAg ICAgIHNwaW5fdW5sb2NrX3JlY3Vyc2l2ZSgmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZl ci5sb2NrKTsKPiA+ICAgICAgZG9tYWluX3VucGF1c2UoZCk7Cj4gPgo+ID4gICAgICByZXR1cm4g MDsKPiA+Cj4gPiAtIGZhaWwzOgo+ID4gLSBmYWlsMjoKPiA+ICsgZmFpbDoKPiA+ICAgICAgc3Bp bl91bmxvY2tfcmVjdXJzaXZlKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxvY2sp Owo+ID4gICAgICBkb21haW5fdW5wYXVzZShkKTsKPiA+Cj4gPiArICAgIGQtPmFyY2guaHZtX2Rv bWFpbi5pb3JlcV9zZXJ2ZXIuc2VydmVyW2ldID0gTlVMTDsKPiAKPiBTaG91bGRuJ3QgdGhpcyBi ZSBkb25lIHdoaWxlIGhvbGRpbmcgdGhlIGlvcmVxX3NlcnZlciBsb2NrPwo+IAoKWWVzLCBpdCBz aG91bGQuCgo+ID4gICAgICB4ZnJlZShzKTsKPiA+IC0gZmFpbDE6Cj4gPiAgICAgIHJldHVybiBy YzsKPiA+ICB9Cj4gPgo+ID4gQEAgLTc0MSwzNSArNzM3LDMwIEBAIGludCBodm1fZGVzdHJveV9p b3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwKPiBpb3NlcnZpZF90IGlkKQo+ID4KPiA+ICAg ICAgc3Bpbl9sb2NrX3JlY3Vyc2l2ZSgmZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5s b2NrKTsKPiA+Cj4gPiAtICAgIHJjID0gLUVOT0VOVDsKPiA+IC0gICAgbGlzdF9mb3JfZWFjaF9l bnRyeSAoIHMsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+YXJjaC5odm1fZG9t YWluLmlvcmVxX3NlcnZlci5saXN0LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz dF9lbnRyeSApCj4gPiAtICAgIHsKPiA+IC0gICAgICAgIGlmICggcyA9PSBkLT5hcmNoLmh2bV9k b21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIgKQo+ID4gLSAgICAgICAgICAgIGNvbnRpbnVlOwo+ ID4gKyAgICBzID0gZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5zZXJ2ZXJbaWRdOwo+ ID4KPiA+IC0gICAgICAgIGlmICggcy0+aWQgIT0gaWQgKQo+ID4gLSAgICAgICAgICAgIGNvbnRp bnVlOwo+ID4gLQo+ID4gLSAgICAgICAgZG9tYWluX3BhdXNlKGQpOwo+ID4gKyAgICByYyA9IC1F Tk9FTlQ7Cj4gPiArICAgIGlmICggaWQgPj0gTUFYX05SX0lPUkVRX1NFUlZFUlMgfHwgIXMgfHwg SVNfREVGQVVMVChzKSApCj4gCj4gVGhlIGlkID49IE1BWF9OUl9JT1JFUV9TRVJWRVJTIHNob3Vs ZCBiZSBkb25lIGJlZm9yZSBnZXR0aW5nIHRoZQo+IGVsZW1lbnQgSU1ITywgZXZlbiBiZWZvcmUg Z2V0dGluZyB0aGUgbG9jay4KCk9rLCBpZiB5b3UgcHJlZmVyLgoKPiAKPiBBbHNvLCBJIGRvbid0 IGxpa2UgdGhlOgo+IAo+IHJjID0gLi4uCj4gaWYgKCAuLi4gKQo+ICAgICBnb3RvIGVycm9yCj4g Cj4gY29uc3RydWN0LCBJIHRoaW5rIGl0J3MgZWFzeSB0byBtYWtlIGEgbWlzdGFrZSBhbmQgZW5k IHVwIHJldHVybmluZyBhbgo+IGVycm9yIGNvZGUgaW4gdGhlIHN1Y2Nlc3NmdWwgcGF0aCAob3Ig Zm9yZ2V0dGluZyB0byBzZXQgYW4gZXJyb3Igd2hlbgo+IG5lZWRlZCkuIFRoaXMgaXMgaG93ZXZl ciB3aWRlbHkgdXNlZCBpbiBYZW4sIHNvIEknbSBub3QgZ29pbmcgdG8KPiBjb21wbGFpbiBhbnkg bW9yZS4KCkl0J3MgYSBjb25zdHJ1Y3QgSSB0ZW5kIHRvIHVzZSBhcywgaW4gbXkgZXhwZXJpZW5j ZSAoYWx0aG91Z2ggSSBoYXZlIG5vdCBjaGVja2VkIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIGdj YykgaXQgbGVhZHMgdG8gc21hbGxlciBjb2RlLiBJZiB5b3UgdXNlOgoKSWYgKHRoZXJlcy1hbi1l cnJvcikKewogIHJjID0gLWVycm5vOwogIGdvdG8gZXJyb3I7Cn0KCnRoZW4gdGhpcyB3aWxsIHBy b2JhYmx5IGdlbmVyYXRlIChpbiBwc2V1ZG8tYXNzZW1ibHkpOgoKdGVzdCB0aGVyZXMtYW4tZXJy b3IKanVtcC1pZiBmYWxzZSAxZgptb3ZlIC1lcnJubywgcmMKanVtcCBlcnJvcgoxOiAuLi4KCndo ZXJlYXMgdXNpbmc6CgpyYyA9IC1lcnJubzsKaWYgKHRoZXJlcy1hbi1lcnJvcikKICBnb3RvIGVy cm9yOwoKd2lsbCBwcm9iYWJseSBnZW5lcmF0ZSBzb21ldGhpbmcgbGlrZToKCm1vdmUgLWVycm5v LCByYwp0ZXN0IHRoZXJlcy1hbi1lcnJvcgpqdW1wLWlmIHRydWUgZXJyb3IKCndoaWNoIElNTyBp cyBtb3JlIGVmZmljaWVudCBhbmQgZWFzaWVyIHRvIHJlYWQuCgo+IAo+ID4gIHZvaWQgaHZtX2Rl c3Ryb3lfYWxsX2lvcmVxX3NlcnZlcnMoc3RydWN0IGRvbWFpbiAqZCkKPiA+ICB7Cj4gPiAtICAg IHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzLCAqbmV4dDsKPiA+ICsgICAgdW5zaWduZWQgaW50 IGlkOwo+ID4KPiA+ICAgICAgc3Bpbl9sb2NrX3JlY3Vyc2l2ZSgmZC0+YXJjaC5odm1fZG9tYWlu LmlvcmVxX3NlcnZlci5sb2NrKTsKPiA+Cj4gPiAgICAgIC8qIE5vIG5lZWQgdG8gZG9tYWluX3Bh dXNlKCkgYXMgdGhlIGRvbWFpbiBpcyBiZWluZyB0b3JuIGRvd24gKi8KPiA+Cj4gPiAtICAgIGxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZSAoIHMsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5leHQsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5hcmNo Lmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmxpc3QsCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpc3RfZW50cnkgKQo+ID4gKyAgICBmb3IgKCBpZCA9IDA7IGlkIDwgTUFYX05S X0lPUkVRX1NFUlZFUlM7IGlkKysgKQo+ID4gICAgICB7Cj4gPiAtICAgICAgICBib29sIGlzX2Rl ZmF1bHQgPSAocyA9PSBkLT5hcmNoLmh2bV9kb21haW4uZGVmYXVsdF9pb3JlcV9zZXJ2ZXIpOwo+ ID4gKyAgICAgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4gPgo+ID4gLSAgICAgICAg aHZtX2lvcmVxX3NlcnZlcl9kaXNhYmxlKHMsIGlzX2RlZmF1bHQpOwo+ID4gKyAgICAgICAgcyA9 IGQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIuc2VydmVyW2lkXTsKPiA+Cj4gPiAtICAg ICAgICBpZiAoIGlzX2RlZmF1bHQgKQo+ID4gLSAgICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFp bi5kZWZhdWx0X2lvcmVxX3NlcnZlciA9IE5VTEw7Cj4gPiArICAgICAgICBpZiAoICFzICkKPiA+ ICsgICAgICAgICAgICBjb250aW51ZTsKPiA+Cj4gPiAtICAgICAgICBsaXN0X2RlbCgmcy0+bGlz dF9lbnRyeSk7Cj4gPiArICAgICAgICBodm1faW9yZXFfc2VydmVyX2Rpc2FibGUocyk7Cj4gPiAr ICAgICAgICBodm1faW9yZXFfc2VydmVyX2RlaW5pdChzKTsKPiA+Cj4gPiAtICAgICAgICBodm1f aW9yZXFfc2VydmVyX2RlaW5pdChzLCBpc19kZWZhdWx0KTsKPiA+ICsgICAgICAgIEFTU0VSVChk LT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVyLmNvdW50KTsKPiA+ICsgICAgICAgIC0tZC0+ YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5jb3VudDsKPiAKPiBJdCBzZWVtcyBtb3JlIGNv bW1vbiB0byB1c2UgZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5jb3VudC0tLAo+IHVu bGVzcyB0aGVyZScgYSByZWFzb24gZm9yIHByZWZpeGluZyB0aGUgZGVjcmVtZW50LgoKVGhhdCdz IGhhYml0IGZyb20gdGhlIGRheXMgb2YgdGhlIDY4MDAwIHdoaWNoIGhhZCBhIHByZWRlY3JlbWVu dC1hbmQtaW5kaXJlY3QgYWRkcmVzc2luZyBtb2RlIHNvIHVzaW5nIHByZWRlY3JlbWVudCBnZW5l cmFsbHkgeWllbGRlZCBzbWFsbGVyIGNvZGUgOi0pIEkgc3RpbGwgcHJlZmVyIGl0LiBQb3N0ZGVj cmVtZW50IGp1c3QgbG9va3Mgb2RkIHRvIG1lLgoKPiA+ICsjZGVmaW5lIE1BWF9OUl9JT1JFUV9T RVJWRVJTIDgKPiA+ICsjZGVmaW5lIERFRkFVTFRfSU9TRVJWSUQgMAo+IAo+IEkgd291bGQgcmF0 aGVyIHdyaXRlIGl0IGFzIERFRkFVTFRfSU9SRVFfSUQgb3IgREVGQVVMVF9JT1NFUlZFUl9JRCBJ Cj4gZG9uJ3QgdGhpbmsgdGhlcmUncyBhbnkgbmVlZCB0byBzaG9ydGVuIFNFUlZFUiBoZXJlIChz cGVjaWFsbHkgd2hlbgo+IGl0J3Mgbm90IHNob3J0ZWQgaW4gTUFYX05SX0lPUkVRX1NFUlZFUlMu Cj4gCgpJIG5hbWVkIGl0IGFmdGVyIHRoZSBpb3NlcnZpZF90IHR5cGUuIEknZCBwcmVmZXIgdG8g a2VlcCBpdCB0aGF0IHdheS4KCkNoZWVycywKCiAgUGF1bAoKPiBUaGFua3MsIFJvZ2VyLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg==