From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/15] drm/i915: Slaughter the thundering i915_wait_request herd Date: Mon, 30 Nov 2015 13:32:16 +0000 Message-ID: <565C4FE0.8000403@linux.intel.com> References: <1448786893-2522-1-git-send-email-chris@chris-wilson.co.uk> <1448786893-2522-9-git-send-email-chris@chris-wilson.co.uk> <565C3B9E.7090508@linux.intel.com> <20151130123029.GA14582@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 48FF46E5A3 for ; Mon, 30 Nov 2015 05:32:53 -0800 (PST) In-Reply-To: <20151130123029.GA14582@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org, "Gong, Zhipeng" , "Rogozhkin, Dmitry V" List-Id: intel-gfx@lists.freedesktop.org Ck9uIDMwLzExLzE1IDEyOjMwLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gT24gTW9uLCBOb3YgMzAs IDIwMTUgYXQgMTI6MDU6NTBQTSArMDAwMCwgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4+PiArCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyB7Cj4+PiArCQlzcGlubG9ja190IGxvY2s7IC8qIHByb3Rl Y3RzIHRoZSBwZXItZW5naW5lIHJlcXVlc3QgbGlzdCAqLwo+Pgo+PiBzL2xpc3QvdHJlZS8KPgo+ IGxpc3QuIFdlIHVzZSB0aGUgdHJlZSBhcyBhIGxpc3QhCgpNYXliZSBidXQgaXQgY29uZnVzZXMg dGhlIHJlYWRlciBhIGJpdCB3aG8gZ29lcyBhbmQgbG9va3MgZm9yIHNvbWUgbGlzdCAKdGhlbi4K ClJlbGF0ZWQsIHdoZW4gSSB3YXMgcGxheWluZyB3aXRoIHRoaXMgSSB3YXMgcGlnZ3kgYmFja2lu ZyBvbiB0aGUgCmV4aXN0aW5nIHBlciBlbmdpbmUgcmVxdWVzdCBsaXN0LgoKSWYgdGhleSBhcmUg c2Vxbm8gb3JkZXJlZCB0aGVyZSwgYW5kIEkgdGhpbmsgdGhleSBhcmUsIHRoZW4gdGhlIHdha2Vy IAp0aHJlYWQganVzdCB0cmF2ZXJzZXMgaXQgaW4gb3JkZXIgdW50aWwgaGl0dGluZyB0aGUgbm90 IGNvbXBsZXRlZCBvbmUsIAp3YWtpbmcgdXAgZXZlcnkgcmVxLT53YWl0X3F1ZXVlIGFzIGl0IGdv ZXMuCgpJbiB0aGlzIGNhc2UgaXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB0aGUgd2FpdGVycyBjb21l IGluIGluIAppbmRldGVybWluaXN0aWMgb3JkZXIgc28gd2UgZG9uJ3QgbmVlZCBhIChuZXcpIHRy ZWUuCgpCdXQgdGhlIGRvd25zaWRlIGlzIHRoZSB0aHJlYWQgbmVlZHMgc3RydWN0IG11dGV4LiBB bmQgdGhhdCB0aGUgCnJldGlyZW1lbnQgZnJvbSB0aGF0IGxpc3QgaXMgc28gbGF6eS4uCgo+Pj4g KwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOyAvKiBiaCBmb3IgYWxsIHVzZXIgaW50ZXJydXB0 cyAqLwo+Pj4gKwkJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzX2VuZ2luZSB7Cj4+PiArCQkJc3Ry dWN0IHJiX3Jvb3QgcmVxdWVzdHM7IC8qIHNvcnRlZCBieSByZXRpcmVtZW50ICovCj4+PiArCQkJ c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpmaXJzdDsKPj4KPj4gLyogRmlyc3QgcmVxdWVz dCBpbiB0aGUgdHJlZSB0byBiZSBjb21wbGV0ZWQgbmV4dCBieSB0aGUgaHcuICovCj4+Cj4+ID8K Pgo+IC8qIGZpcnN0ICovID8KCkZ1bm55PyA6KSBGaXJzdCB3aGF0PyBXaHkgbWFrZSB0aGUgcmVh ZGVyIHJldmVyc2UgZW5naW5lZXIgaXQ/Cgo+Pj4gKwkJfSBlbmdpbmVbSTkxNV9OVU1fUklOR1Nd Owo+Pj4gKwl9IGJyZWFkY3J1bWJzOwo+Pj4gKwo+Pj4gICAJc3RydWN0IGk5MTVfdmlydHVhbF9n cHUgdmdwdTsKPj4+Cj4+PiAgIAlzdHJ1Y3QgaW50ZWxfZ3VjIGd1YzsKPj4+IEBAIC0yMjI4LDYg KzIyNTAsMTEgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKPj4+ICAgCS8qKiBnbG9i YWwgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCj4+PiAgIAlzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7Cj4+Pgo+Pj4gKwkvKiogTGlzdCBvZiBjbGllbnRzIHdhaXRpbmcgZm9yIGNvbXBsZXRp b24gb2YgdGhpcyByZXF1ZXN0ICovCj4+PiArCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cj4+PiAr CXN0cnVjdCByYl9ub2RlIGlycV9ub2RlOwo+Pj4gKwl1bnNpZ25lZCBpcnFfY291bnQ7Cj4+Cj4+ IFRvIG1lIGlycSBwcmVmaXggZG9lcyBub3QgZml0IGhlcmUgdGhhdCB3ZWxsLgo+Pgo+PiByZXFf dHJlZV9ub2RlPwo+Pgo+PiB3YWl0ZXJfY291bnQsIHdhaXRlcnM/Cj4KPiB3YWl0ZXJzLCBicmVh ZGNydW1iX25vZGUsIHdhaXRlcnNfY291bnQgPwoKRGVhbC4KCj4+PiAgIAlmb3IgKDs7KSB7Cj4+ PiAtCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKPj4+IC0KPj4+IC0JCXByZXBhcmVfdG9fd2Fp dCgmcmluZy0+aXJxX3F1ZXVlLCAmd2FpdCwgc3RhdGUpOwo+Pj4gKwkJcHJlcGFyZV90b193YWl0 KCZyZXEtPndhaXQsICZ3YWl0LCBzdGF0ZSk7Cj4+Pgo+Pj4gLQkJLyogV2UgbmVlZCB0byBjaGVj ayB3aGV0aGVyIGFueSBncHUgcmVzZXQgaGFwcGVuZWQgaW4gYmV0d2Vlbgo+Pj4gLQkJICogdGhl IGNhbGxlciBncmFiYmluZyB0aGUgc2Vxbm8gYW5kIG5vdyAuLi4gKi8KPj4+IC0JCWlmIChyZXEt PnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9y KSkgewo+Pj4gLQkJCS8qIEFzIHdlIGRvIG5vdCByZXF1ZXVlIHRoZSByZXF1ZXN0IG92ZXIgYSBH UFUgcmVzZXQsCj4+PiAtCQkJICogaWYgb25lIGRvZXMgb2NjdXIgd2Uga25vdyB0aGF0IHRoZSBy ZXF1ZXN0IGlzCj4+PiAtCQkJICogZWZmZWN0aXZlbHkgY29tcGxldGUuCj4+PiAtCQkJICovCj4+ PiAtCQkJcmV0ID0gMDsKPj4+IC0JCQlicmVhazsKPj4+IC0JCX0KPj4+IC0KPj4+IC0JCWlmIChp OTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkgewo+Pj4gKwkJaWYgKGk5MTVf Z2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkgfHwKPj4KPj4gV2h5IGl0IGlzIE9LIHRv IGNoYW5nZSB0aGUgbGF6eSBjb2hlcmVuY3kgbW9kZSBoZXJlPwo+Cj4gV2UgYmFuZyBvbiB0aGUg Y29oZXJlbmN5IGFmdGVyIHRoZSBJUlEuIEhlcmUsIHdlIGFyZSB3b2tlbiBieSB0aGUgSVJRCj4g d2FpdGVyIHNvIHdlIGtub3cgdGhhdCB0aGUgSVJRL3NlcW5vIGNvaGVyZW5jeSBpcyBmaW5lIGFu ZCB3ZSBjYW4ganVzdAo+IGNoZWNrIHRoZSBDUFUgY2FjaGUuCgpNYWtlcyBzZW5zZSwgcHV0IGlu dG8gY29tbWVudD8gVGhlcmUgaXMgc3BhY2Ugbm93IHNpbmNlIGZ1bmN0aW9uIGlzIG11Y2ggCnNo b3J0ZXIuIDopCgo+Pj4gKwkJICAgIHJlcS0+cmVzZXRfY291bnRlciAhPSBpOTE1X3Jlc2V0X2Nv dW50ZXIoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yKSkgewo+Pgo+PiBJdCBsb29rcyBsaWtlIGl0IHdv dWxkIGJlIHZhbHVhYmxlIHRvIHByZXNlcnZlIHRoZSBjb21tZW50IGFib3V0IG5vCj4+IHJlLXF1 ZXVpbmcgZXRjIG9uIEdQVSByZXNldC4KPgo+IEkgY2FuIGRyb3AgaXQgZnJvbSB0aGUgcHJldmlv dXMgcGF0Y2ggOikKCk5vIGl0IGlzIHVzZWZ1bCEKCj4+PiArCQlpZiAodGltZW91dCkgewo+Pj4g KwkJCXRpbWVvdXRfcmVtYWluID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0X3JlbWFpbik7 Cj4+PiArCQkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKPj4+ICsJCQkJcmV0ID0gLUVUSU1F Owo+Pj4gKwkJCQlicmVhazsKPj4+ICsJCQl9Cj4+PiArCQl9IGVsc2UKPj4+ICsJCQlpb19zY2hl ZHVsZSgpOwo+Pgo+PiBDb3VsZCBzZXQgdGltZW91dF9yZW1haW4gdG8gdGhhdCBNQVggdmFsdWUg d2hlbiB0aW1lb3V0ID09IE5VTEwgYW5kCj4+IGhhdmUgYSBzaW5nbGUgY2FsbCBzaXRlIHRvIGlv X3NjaGVkdWxlX3RpbWVvdXQgYW5kIGxlc3MgaW5kZW50YXRpb24uCj4+IEl0IGRvZXNuJ3QgbWF0 dGVyIGh1Z2VseSwgbWF5YmUgaXQgd291bGQgYmUgYSBiaXQgZWFzaWVyIHRvIHJlYWQuCj4KPiBE b25lLiBpb19zY2hlZHVsZSgpIGNhbGxzIGlvX3NjaGVkdWxlX3RpbWVvdXQoKSwgd2hlcmVhcwo+ IHNjaGVkdWxlX3RpbWVvdXQoKSBjYWxscyBzY2hlZHVsZSgpIQoKV2hvIGRpc2FncmVlZCB3aXRo IHRoYXQ/IDopIE9rIQoKPj4+IEBAIC05MDAsNyArOTAxLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9y ZWNvcmRfcmluZ19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4gICAJCWVyaW5nLT5p bnN0ZG9uZSA9IEk5MTVfUkVBRChHRU4yX0lOU1RET05FKTsKPj4+ICAgCX0KPj4+Cj4+PiAtCWVy aW5nLT53YWl0aW5nID0gd2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJxX3F1ZXVlKTsKPj4+ICsJ ZXJpbmctPndhaXRpbmcgPSBSRUFEX09OQ0UoZGV2X3ByaXYtPmJyZWFkY3J1bWJzLmVuZ2luZVty aW5nLT5pZF0uZmlyc3QpOwo+Pgo+PiBXaGF0IGRvZXMgdGhlIFJFQURfT05DRSBkbyBoZXJlPwo+ Cj4gVGhpcyBlbGVtZW50IGlzIHByb3RlY3RlZCBieSB0aGUgYnJlYWRjcnVtYnMgc3BpbmxvY2ss IHRoZSBSRUFEX09OQ0UgaXMKPiBkb2N1bWVudGF0aW9uIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91 dCB0aGUgbG9jayBoZXJlLgoKSG0gSSBmaW5kIGl0IGNvbmZ1c2luZyBidXQgT0suCgo+Pj4gICBz dGF0aWMgdm9pZCBub3RpZnlfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+Pj4g ICB7Cj4+PiAtCWlmICghaW50ZWxfcmluZ19pbml0aWFsaXplZChyaW5nKSkKPj4+ICsJaWYgKHJp bmctPmk5MTUgPT0gTlVMTCkKPj4+ICAgCQlyZXR1cm47Cj4+Pgo+Pj4gICAJdHJhY2VfaTkxNV9n ZW1fcmVxdWVzdF9ub3RpZnkocmluZyk7Cj4+PiAtCj4+PiAtCXdha2VfdXBfYWxsKCZyaW5nLT5p cnFfcXVldWUpOwo+Pj4gKwl3YWtlX3VwX3Byb2Nlc3MocmluZy0+aTkxNS0+YnJlYWRjcnVtYnMu dGFzayk7Cj4+Cj4+IEZvciBhIGxhdGVyIGV4dGVuc2lvbjoKPj4KPj4gSG93IHdvdWxkIHlvdSB2 aWV3LCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZSwgYWRkaW5nIGEgYm9vbCByZXR1cm4gdG8KPj4g cmluZy0+cHV0X2lycSgpIHdoaWNoIHdvdWxkIHNheSB0byB0aGUgdGhyZWFkIHRoYXQgaXQgZmFp bGVkIHRvCj4+IGRpc2FibGUgaW50ZXJydXB0cz8KPj4KPj4gSW4gdGhpcyBjYXNlIHRocmVhZCB3 b3VsZCBleGl0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIHJlc3RhcnRlZCB3aGVuCj4+IHRoZSBuZXh0 IHdhaXRlciBxdWV1ZXMgdXAuIFBvc3NpYmx5IGV4dGVuZGluZyB0aGUKPj4gaWRsZS0+cHV0X2ly cS0+ZXhpdCBkdXJhdGlvbnMgYXMgd2VsbCB0aGVuLgo+Cj4gSG9uZXN0bHksIG5vdCBrZWVuIG9u IHRoZSBpZGVhIHRoYXQgdGhlIGxvd2xldmVsIHB1dF9pcnEgY2FuIGZhaWwgKG1ha2VzCj4gY2xl YW51cCBtdWNoIG1vcmUgZnJhdWdodCkuIEkgZG9uJ3Qgc2VlIHdoYXQgaW1wcm92ZW1lbnQgeW91 IGludGVuZAo+IGhlcmUsIG1heWJlIGNsYXJpZnlpbmcgdGhhdCB3b3VsZCBoZWxwIGV4cGxhaW4g d2hhdCB5b3UgbWVhbi4KCkRvbid0IGtub3csIG1heWJlIHJlZmxlY3RpbmcgdGhlIGZhY3QgaXQg d2Fzbid0IHRoZSBsYXN0IHB1dF9pcnEgY2FsbCBzbyAKbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0 IGlmIHRoZXkgd2FudC4gV2UgY2FuIGxlYXZlIHRoaXMgZGlzY3Vzc2lvbiBmb3IgCnRoZSBmdXR1 cmUuCgo+Pj4gQEAgLTI5ODYsMTYgKzI5ODEsMTYgQEAgc3RhdGljIHZvaWQgaTkxNV9oYW5nY2hl Y2tfZWxhcHNlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+PiAgIAkJCWlmIChyaW5nX2lk bGUocmluZywgc2Vxbm8pKSB7Cj4+PiAgIAkJCQlyaW5nLT5oYW5nY2hlY2suYWN0aW9uID0gSEFO R0NIRUNLX0lETEU7Cj4+Pgo+Pj4gLQkJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJx X3F1ZXVlKSkgewo+Pj4gKwkJCQlpZiAoUkVBRF9PTkNFKGRldl9wcml2LT5icmVhZGNydW1icy5l bmdpbmVbcmluZy0+aWRdLmZpcnN0KSkgewo+Pgo+PiBSRUFEX09OQ0UgaXMgYWdhaW4gc3RyYW5n ZSwgYnV0IG90aGVyIHRoYW4gdGhhdCBJIGRvbid0IGtub3cgdGhlCj4+IGhhbmdjaGVjayBjb2Rl IHRvIHJlYWxseSBldmF1bGF0ZSBpdC4KPj4KPj4gUGVyaGFwcyB0aGlzIGFsc28gbWVhbnMgdGhp cyBsaW5lIG5lZWRzIGEgY29tbWVudCBkZXNjcmliaW5nIHdoYXQKPj4gY29uZGl0aW9uL3N0YXRl IGlzIGFjdHVhbGx5IGFwcHJveGltYXRpbmcgd2l0aCB0aGUgY2hlY2suCj4KPiBBbGwgd2UgYXJl IGRvaW5nIGlzIGFza2luZyBpZiBhbnlvbmUgaXMgd2FpdGluZyBvbiB0aGUgR1BVLCBiZWNhdXNl IHRoZQo+IEdQVSBoYXMgZmluaXNoZWQgYWxsIG9mIGl0cyB3b3JrLiBJZiBzbywgdGhlIElSUSBo YW5kbGluZyBpcyBzdXNwZWN0Cj4gKG1vZHVsbyB0aGUgcHJlLWV4aXN0aW5nIHJhY2UgY29uZGl0 aW9uIGNsZWFybHkgZWFybWFya2VkIGJ5IFJFQURfT05DRSkuCgpDb29sLCAvKiBDaGVjayBpZiBz b21lb25lIGlzIHdhaXRpbmcgb24gdGhlIEdQVSAqLyB0aGVuIHdvdWxkIG1ha2UgbWUgaGFwcHku Cgo+Pj4gKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+Pj4gKwkJdW5zaWduZWQg cmVzZXRfY291bnRlciA9IGk5MTVfcmVzZXRfY291bnRlcigmaTkxNS0+Z3B1X2Vycm9yKTsKPj4+ ICsJCXVuc2lnbmVkIGxvbmcgdGltZW91dF9qaWZmaWVzOwo+Pj4gKwkJYm9vbCBpZGxpbmcgPSBm YWxzZTsKPj4+ICsKPj4+ICsJCS8qIE9uIGV2ZXJ5IHRpY2ssIHdhbGsgdGhlIHNlcW5vLW9yZGVy ZWQgbGlzdCBvZiByZXF1ZXN0cwo+Pj4gKwkJICogYW5kIGZvciBlYWNoIHJldGlyZWQgcmVxdWVz dCB3YWtldXAgaXRzIGNsaWVudHMuIElmIHdlCj4+PiArCQkgKiBmaW5kIGFuIHVuZmluaXNoZWQg cmVxdWVzdCwgZ28gYmFjayB0byBzbGVlcC4KPj4+ICsJCSAqLwo+Pgo+PiBzL3RpY2svbG9vcC8g Pwo+IHMvdGljay9pdGVyYXRpb24vIEknbSBzdGlja2luZyB3aXRoIHRpY2sKClRpY2sgbWFrZXMg bWUgdGljayBvZiBhIHNjaGVkdWxlciB0aWNrIHNvIHRvIG1lIGl0IGlzIHRoZSB3b3JzdCBvZiB0 aGUgCnRocmVlLiBJdGVyYXRpb24gc291bmRzIHJlYWxseSBnb29kLiBXaGV0aGVyIHRoYXQgd2ls bCBiZSBhIAp0aWNrL2ppZmZpZS9vcnNvbWV0aGluZyBpcyBkZWZpbml0ZSBhIGJpdCBsb3dlciBp biB0aGUgY29kZS4KCj4+IEFuZCBpZiB3ZSBkb24ndCBmaW5kIGFuZCB1bmZpbmlzaGVkIHJlcXVl c3Qgc3RpbGwgZ28gYmFjayB0byBzbGVlcC4gOikKPgo+IE9rLgo+Cj4+PiArCQlzZXRfY3VycmVu dF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwo+Pj4gKwo+Pj4gKwkJLyogTm90ZSBjYXJlZnVs bHkgdGhhdCB3ZSBkbyBub3QgaG9sZCBhIHJlZmVyZW5jZSBmb3IgdGhlCj4+PiArCQkgKiByZXF1 ZXN0cyBvbiB0aGlzIGxpc3QuIFRoZXJlZm9yZSB3ZSBvbmx5IGluc3BlY3QgdGhlbQo+Pj4gKwkJ ICogd2hpbHN0IGhvbGRpbmcgdGhlIHNwaW5sb2NrIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIG5v dAo+Pj4gKwkJICogZnJlZWQgaW4gdGhlIG1lYW50aW1lLCBhbmQgdGhlIGNsaWVudCBtdXN0IHJl bW92ZSB0aGUKPj4+ICsJCSAqIHJlcXVlc3QgZnJvbSB0aGUgbGlzdCBpZiBpdCBpcyBpbnRlcnJ1 cHRlZCAoYmVmb3JlIGl0Cj4+PiArCQkgKiBpdHNlbGYgcmVsZWFzZXMgaXRzIHJlZmVyZW5jZSku Cj4+PiArCQkgKi8KPj4+ICsJCXNwaW5fbG9jaygmYi0+bG9jayk7Cj4+Cj4+IFRoaXMgbG9jayBp cyBtb3JlIHBlciBlbmdpbmUgdGhhdCBnbG9iYWwgaW4gaXRzIG5hdHVyZSB1bmxlc3MgeW91Cj4+ IHRoaW5rIGl0IHdhcyBtb3JlIGVmZmljaWVudCB0byBkbyBmZXdlciBsb2NrIGF0b21pY3MgdnMg cG90ZW50aWFsCj4+IG92ZXJsYXAgb2Ygd2FpdGVyIGFjdGl2aXR5IHBlciBlbmdpbmVzPwo+Cj4g SW5kZWVkLiBJIGRlY2lkZWQgbm90IHRvIGNhcmUgYWJvdXQgbWFraW5nIGl0IHBlci1lbmdpbmUu Cj4KPj4gV291bGQgbmVlZCBhIG5ldyBsb2NrIGZvciByZXEtPmlycV9jb3VudCwgcGVyIHJlcXVl c3QuIFNvCj4+IHJlcS0+bG9jay9yZXEtPmlycV9jb3VudCBhbmQgYmUtPmxvY2sgZm9yIHRoZSB0 cmVlIG9wZXJhdGlvbnMuCj4KPiBXaHk/IEEgcmVxdWVzdCBpcyB0aWVkIHRvIGFuIGluZGl2aWR1 YWwgZW5naW5lLCB0aGVyZWZvcmUgd2UgY2FuIHVzZQo+IHRoYXQgYnJlYWRjcnVtYl9lbmdpbmUu bG9jayBmb3IgdGhlIHJlcXVlc3QuCgpKdXN0IHNvIDJuZCsgd2FpdGVycyB3b3VsZCBub3QgdG91 Y2ggdGhlIHBlciBlbmdpbmUgbG9jay4KCj4+IFRocmVhZCB3b3VsZCBvbmx5IG5lZWQgdG8gZGVh bCB3aXRoIHRoZSBsYXRlci4gRmVlbHMgbGlrZSBpdCB3b3VsZAo+PiB3b3JrLCBqdXN0IG5vdCBz dXJlIGlmIGl0IGlzIHdvcnRoIGl0Lgo+Cj4gVGhhdCB3YXMgbXkgZmVlbGluZyBhcyB3ZWxsLiBO b3Qgc3VyZSBpZiB3ZSB3aWxsIGhhdmUgaHVnZSBjb250ZW50aW9uCj4gdGhhdCB3b3VsZCBiZSBz b2x2ZWQgd2l0aCBwZXItZW5naW5lIHNwaW5sb2Nrcywgd2hpbHN0IHdlIHN0aWxsIGhhdmUKPiBz dHJ1Y3RfbXV0ZXguCj4KPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsr KSB7Cj4+PiArCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gJmk5MTUtPnJpbmdb aV07Cj4+PiArCQkJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzX2VuZ2luZSAqYmUgPSAmYi0+ZW5n aW5lW2ldOwo+Pj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCA9IGJl LT5maXJzdDsKPj4+ICsKPj4+ICsJCQlpZiAocmVxdWVzdCA9PSBOVUxMKSB7Cj4+PiArCQkJCWlm ICgoaXJxX2dldCAmICgxIDw8IGkpKSkgewo+Pj4gKwkJCQkJaWYgKGlycV9lbmFibGVkICYgKDEg PDwgaSkpIHsKPj4+ICsJCQkJCQllbmdpbmUtPmlycV9wdXQoZW5naW5lKTsKPj4+ICsJCQkJCQlp cnFfZW5hYmxlZCAmPSB+ICgxIDw8IGkpOwo+Pj4gKwkJCQkJfQo+Pj4gKwkJCQkJaW50ZWxfcnVu dGltZV9wbV9wdXQoaTkxNSk7Cj4+PiArCQkJCQlpcnFfZ2V0ICY9IH4oMSA8PCBpKTsKPj4+ICsJ CQkJfQo+Pj4gKwkJCQljb250aW51ZTsKPj4+ICsJCQl9Cj4+PiArCj4+PiArCQkJaWYgKChpcnFf Z2V0ICYgKDEgPDwgaSkpID09IDApIHsKPj4+ICsJCQkJaW50ZWxfcnVudGltZV9wbV9nZXQoaTkx NSk7Cj4+PiArCQkJCWlycV9lbmFibGVkIHw9IF9faXJxX2VuYWJsZShlbmdpbmUpIDw8IGk7Cj4+ PiArCQkJCWlycV9nZXQgfD0gMSA8PCBpOwo+Pj4gKwkJCX0KPj4KPj4gaXJxX2dldCBhbmQgaXJx X2VuYWJsZWQgYXJlIGNyZWF0aW5nIGEgbGl0dGxlIGJpdCBvZiBhIGhlYWRhY2hlIGZvcgo+PiBt ZS4gQW5kIHRoYXQgd291bGQgcHJvYmFibHkgbWVhbiBhIGNvbW1lbnQgaXMgYmUgaW4gb3JkZXIg dG8gZXhwbGFpbgo+PiB3aGF0IHRoZXkgYXJlIGZvciBhbmQgaG93IHRoZXkgd29yay4KPj4KPj4g TGlrZSB0aGlzIEkgZG9uJ3Qgc2VlIHRoZSBuZWVkIGZvciBpcnFfZ2V0IHRvIHBlcnNpc3QgYWNy b3NzIGxvb3BzPwo+Cj4gQmVjYXVzZSBnZXR0aW5nIHRoZSBpcnEgaXMgcXVpdGUgc2xvdywgd2Ug YWRkIGEgamlmZmllIHNoYWRvdy4KCkJ1dCBpdCBpcyBub3QgYSBzaGFkb3cgaW4gdGhlIHNlbnNl IG9mIHRoZSBzYW1lIGJpdG1hc2sgZnJvbSB0aGUgCnByZXZpb3VzIGl0ZXJhdGlvbi4gVGhlIGJp dHMgYXJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gc3BlY2lhbCBjYXNlcyBpbiAKX19pcnFfZW5h YmxlLgoKU28gaXQgbmVlZHMgc29tZSBjb21tZW50cyBJIHRoaW5rLgoKPj4gaXJxX2dldCBsb29r cyBsaWtlICJ0cnkgdG8gZ2V0IHRoZXNlIiwgaXJxX2VuYWJsZWQgaXMgInRoZXNlIG9uZXMgSQo+ PiBnb3QiLiBBcGFydCBmb3IgdGhlIHdlaXJkIHVzYWdlIG9mIGl0IHRvIGJhbGFuY2UgdGhlIHJ1 bnRpbWUgcG0gZ2V0cwo+PiBhbmQgcHV0cy4KPj4KPj4gQSBiaXQgY29uZnVzaW5nIGFzIEkgc2Fp ZC4KPgo+IEkgZG9uJ3QgbGlrZSB0aGUgbmFtZXMsIGJ1dCBoYXZlbid0IHRob3VnaHQgb2YgYW55 dGhpbmcgYmV0dGVyLgo+Cj4+PiArYm9vbCBpbnRlbF9icmVhZGNydW1ic19hZGRfd2FpdGVyKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBp bnRlbF9icmVhZGNydW1icyAqYiA9ICZyZXF1ZXN0LT5pOTE1LT5icmVhZGNydW1iczsKPj4+ICsJ Ym9vbCBmaXJzdCA9IGZhbHNlOwo+Pj4gKwo+Pj4gKwlzcGluX2xvY2soJmItPmxvY2spOwo+Pj4g KwlpZiAocmVxdWVzdC0+aXJxX2NvdW50KysgPT0gMCkgewo+Pj4gKwkJc3RydWN0IGludGVsX2Jy ZWFkY3J1bWJzX2VuZ2luZSAqYmUgPQo+Pj4gKwkJCSZiLT5lbmdpbmVbcmVxdWVzdC0+cmluZy0+ aWRdOwo+Pj4gKwkJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50Owo+Pj4gKwo+Pj4gKwkJaWYg KGJlLT5maXJzdCA9PSBOVUxMKQo+Pj4gKwkJCXdha2VfdXBfcHJvY2VzcyhiLT50YXNrKTsKPj4K Pj4gV2l0aCBhIGdsb2JhbCBiLT5sb2NrCj4KPiBvciBldmVuIHBlciBlbmdpbmUKPgo+PiBpdCBt YWtlcyBubyBkaWZmZXJlbmNlIGJ1dCBpbiB0aGUgbG9naWNhbAo+PiBzZW5zZSB0aGlzIHdvdWxk IHVzdWFsbHkgZ28gbGFzdCwgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4KPj4gaW5zZXJ0ZWQg aW50byB0aGUgdHJlZSBhbmQgd2FpdGVyIGluaXRpYWxpemVkLgo+Cj4gRXhjZXB0IHRoYXQgdGhl IGNvZGUgaXMgc2ltcGxlciB3aXRoIGtpY2tpbmcgdGhlIHRhc2sgZmlyc3QuCj4KPiBTaW5jZSB3 ZSBib3RoIHRob3VnaHQgaXQgbWlnaHQgbWFrZSBzZW5zZSB3aXRoIGEgcGVyLWVuZ2luZSBsb2Nr LCBsZXQncwo+IGdvIHdpdGggaXQuIE1heWJlIG9uZSBkYXkgaXQgd2lsbCBwYXkgb2ZmLgoKT2su CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==