From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: Re: [PATCH 1/2] locking: Implement an algorithm choice for Wound-Wait mutexes Date: Wed, 13 Jun 2018 12:40:29 +0200 Message-ID: <69f3dee9-4782-bc90-3ee2-813ac6835c4a@vmware.com> References: <20180613074745.14750-1-thellstrom@vmware.com> <20180613074745.14750-2-thellstrom@vmware.com> <20180613095012.GW12198@hirez.programming.kicks-ass.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0051.outbound.protection.outlook.com [104.47.36.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id E75B56E046 for ; Wed, 13 Jun 2018 10:41:00 +0000 (UTC) In-Reply-To: <20180613095012.GW12198@hirez.programming.kicks-ass.net> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Peter Zijlstra Cc: Kate Stewart , Davidlohr Bueso , Jonathan Corbet , David Airlie , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Josh Triplett , linaro-mm-sig@lists.linaro.org, Greg Kroah-Hartman , Ingo Molnar , Philippe Ombredanne , Thomas Gleixner , "Paul E. McKenney" , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gMDYvMTMvMjAxOCAxMTo1MCBBTSwgUGV0ZXIgWmlqbHN0cmEgd3JvdGU6Cj4KPj4gKwo+PiAr CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2stPndhaXRfbG9jayk7Cj4+ICsKPj4gKwlpZiAob3du ZXIgJiYgaG9sZF9jdHggJiYgX193d19jdHhfc3RhbXBfYWZ0ZXIoaG9sZF9jdHgsIHd3X2N0eCkg JiYKPj4gKwkgICAgd3dfY3R4LT5hY3F1aXJlZCA+IDApIHsKPj4gKwkJV1JJVEVfT05DRShob2xk X2N0eC0+d291bmRlZCwgdHJ1ZSk7Cj4+ICsJCWlmIChvd25lciAhPSBjdXJyZW50KSB7Cj4+ICsJ CQkvKgo+PiArCQkJICogd2FrZV91cF9wcm9jZXNzKCkgaW5zZXJ0cyBhIHdyaXRlIG1lbW9yeSBi YXJyaWVyIHRvCj4gSXQgZG9lcyBubyBzdWNoIHRoaW5nLiBCdXQgeWVzLCBpdCBkb2VzIGVuc3Vy ZSB0aGUgd2FrZWUgc2VlcyBhbGwgcHJpb3IKPiBzdG9yZXMgSUZGIHRoZSB3YWtldXAgaGFwcGVu ZWQuCj4KPj4gKwkJCSAqIG1ha2Ugc3VyZSBvd25lciBzZWVzIGl0IGlzIHdvdW5kZWQgYmVmb3Jl Cj4+ICsJCQkgKiBUQVNLX1JVTk5JTkcgaW4gY2FzZSBpdCdzIHNsZWVwaW5nIG9uIGFub3RoZXIK Pj4gKwkJCSAqIHd3X211dGV4LiBOb3RlIHRoYXQgb3duZXIgcG9pbnRzIHRvIGEgdmFsaWQKPj4g KwkJCSAqIHRhc2tfc3RydWN0IGFzIGxvbmcgYXMgd2UgaG9sZCB0aGUgd2FpdF9sb2NrLgo+PiAr CQkJICovCj4gV2hhdCBleGFjdGx5IGFyZSB5b3UgdHJ5aW5nIHRvIHNheSBoZXJlID8KPgo+IEkn bSB0aGlua2luZyB0aGlzIGlzIHRoZSBwYWlyaW5nIGJhcnJpZXIgdG8gdGhlIHNtcF9tYigpIGJl bG93LCB3aXRoCj4geW91ciBsaXN0X2VtcHR5KCkgdGhpbmc/IE1pZ2h0IG1ha2Ugc2Vuc2UgdG8g d3JpdGUgYSBzaW5nbGUgY29oZXJlbnQKPiBjb21tZW50IGFuZCByZWZlciB0byB0aGUgb3RoZXIg bG9jYXRpb24uCgpTbyB3aGF0IEknbSB0cnlpbmcgdG8gc2F5IGhlcmUgaXMgdGhhdCB3YWtlX3Vw X3Byb2Nlc3MoKSBlbnN1cmVzIHRoYXQgCnRoZSBvd25lciwgaWYgaW4gIVRBU0tfUlVOTklORywg c2VlcyB0aGUgd3JpdGUgdG8gaG9sZF9jdHgtPndvdW5kZWQgCmJlZm9yZSB0aGUgdHJhbnNpdGlv biB0byBUQVNLX1JVTk5JTkcuIFRoaXMgd2FzIGhvdyBJIGludGVycHJldGVkICJ3b2tlbiAKdXAi IGluIHRoZSB3YWtlIHVwIHByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KCj4KPj4gKwkJCXdha2VfdXBf cHJvY2Vzcyhvd25lcik7Cj4+ICsJCX0KPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsJfQo+PiArCj4+ ICsJcmV0dXJuIGZhbHNlOwo+PiArfQo+PiArCj4+ICAgLyoKPj4gICAgKiBXYWtlIHVwIGFueSB3 YWl0ZXJzIHRoYXQgbWF5IGhhdmUgdG8gYmFjayBvZmYgd2hlbiB0aGUgbG9jayBpcyBoZWxkIGJ5 IHRoZQo+PiAgICAqIGdpdmVuIGNvbnRleHQuCj4+ICAgICoKPj4gICAgKiBEdWUgdG8gdGhlIGlu dmFyaWFudHMgb24gdGhlIHdhaXQgbGlzdCwgdGhpcyBjYW4gb25seSBhZmZlY3QgdGhlIGZpcnN0 Cj4+IC0gKiB3YWl0ZXIgd2l0aCBhIGNvbnRleHQuCj4+ICsgKiB3YWl0ZXIgd2l0aCBhIGNvbnRl eHQsIHVubGVzcyB0aGUgV291bmQtV2FpdCBhbGdvcml0aG0gaXMgdXNlZCB3aGVyZQo+PiArICog YWxzbyBzdWJzZXF1ZW50IHdhaXRlcnMgd2l0aCBhIGNvbnRleHQgbWFpbiB3b3VuZCB0aGUgbG9j ayBob2xkZXIuCj4+ICAgICoKPj4gICAgKiBUaGUgY3VycmVudCB0YXNrIG11c3Qgbm90IGJlIG9u IHRoZSB3YWl0IGxpc3QuCj4+ICAgICovCj4+IEBAIC0zMDMsNiArMzM4LDcgQEAgc3RhdGljIHZv aWQgX19zY2hlZAo+PiAgIF9fd3dfbXV0ZXhfd2FrZXVwX2Zvcl9iYWNrb2ZmKHN0cnVjdCBtdXRl eCAqbG9jaywgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICp3d19jdHgpCj4+ICAgewo+PiAgIAlzdHJ1 Y3QgbXV0ZXhfd2FpdGVyICpjdXI7Cj4+ICsJYm9vbCBpc193YWl0X2RpZSA9IHd3X2N0eC0+d3df Y2xhc3MtPmlzX3dhaXRfZGllOwo+PiAgIAo+PiAgIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2Nr LT53YWl0X2xvY2spOwo+PiAgIAo+PiBAQCAtMzEwLDEzICszNDYsMTQgQEAgX193d19tdXRleF93 YWtldXBfZm9yX2JhY2tvZmYoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3Qgd3dfYWNxdWlyZV9j dHggKnd3X2N0eCkKPj4gICAJCWlmICghY3VyLT53d19jdHgpCj4+ICAgCQkJY29udGludWU7Cj4+ ICAgCj4+IC0JCWlmIChjdXItPnd3X2N0eC0+YWNxdWlyZWQgPiAwICYmCj4+ICsJCWlmIChpc193 YWl0X2RpZSAmJiBjdXItPnd3X2N0eC0+YWNxdWlyZWQgPiAwICYmCj4+ICAgCQkgICAgX193d19j dHhfc3RhbXBfYWZ0ZXIoY3VyLT53d19jdHgsIHd3X2N0eCkpIHsKPj4gICAJCQlkZWJ1Z19tdXRl eF93YWtlX3dhaXRlcihsb2NrLCBjdXIpOwo+PiAgIAkJCXdha2VfdXBfcHJvY2VzcyhjdXItPnRh c2spOwo+PiAgIAkJfQo+PiAgIAo+PiAtCQlicmVhazsKPj4gKwkJaWYgKGlzX3dhaXRfZGllIHx8 IF9fd3dfbXV0ZXhfd291bmQobG9jaywgY3VyLT53d19jdHgsIHd3X2N0eCkpCj4+ICsJCQlicmVh azsKPj4gICAJfQo+PiAgIH0KPj4gICAKPj4gQEAgLTMzOCwxMiArMzc1LDE3IEBAIHd3X211dGV4 X3NldF9jb250ZXh0X2Zhc3RwYXRoKHN0cnVjdCB3d19tdXRleCAqbG9jaywgc3RydWN0IHd3X2Fj cXVpcmVfY3R4ICpjdHgpCj4+ICAgCSAqIGFuZCBrZWVwIHNwaW5uaW5nLCBvciBpdCB3aWxsIGFj cXVpcmUgd2FpdF9sb2NrLCBhZGQgaXRzZWxmCj4+ICAgCSAqIHRvIHdhaXRlciBsaXN0IGFuZCBz bGVlcC4KPj4gICAJICovCj4+IC0Jc21wX21iKCk7IC8qIF5eXiAqLwo+PiArCXNtcF9tYigpOyAv KiBTZWUgY29tbWVudHMgYWJvdmUgYW5kIGJlbG93LiAqLwo+PiAgIAo+PiAgIAkvKgo+PiAtCSAq IENoZWNrIGlmIGxvY2sgaXMgY29udGVuZGVkLCBpZiBub3QgdGhlcmUgaXMgbm9ib2R5IHRvIHdh a2UgdXAKPj4gKwkgKiBDaGVjayBpZiBsb2NrIGlzIGNvbnRlbmRlZCwgaWYgbm90IHRoZXJlIGlz IG5vYm9keSB0byB3YWtlIHVwLgo+PiArCSAqIENoZWNraW5nIE1VVEVYX0ZMQUdfV0FJVEVSUyBp cyBub3QgZW5vdWdoIGhlcmUsCj4gVGhhdCBzZWVtcyBsaWtlIGEgc3VwZXJmbHVvdXMgdGhpbmcg dG8gc2F5LiBJdCBtYWtlcyBzZW5zZSBpbiB0aGUKPiBjb250ZXh0IG9mIHRoaXMgcGF0Y2ggYmVj YXVzZSB3ZSBjaGFuZ2UgdGhlIEZMQUcgY2hlY2sgaW50byBhIGxpc3QKPiBjaGVjaywgYnV0IHRo ZSByZXN1bHRpbmcgY29tbWVudC9jb2RlIGxvb2tzIG9kZC4KPgo+PiAJCQkJCQkJICAgc2luY2Ug d2UgbmVlZCB0bwo+PiArCSAqIG9yZGVyIGFnYWluc3QgdGhlIGxvY2stPmN0eCBjaGVjayBpbiBf X3d3X211dGV4X3dvdW5kIGNhbGxlZCBmcm9tCj4+ICsJICogX193d19tdXRleF9hZGRfd2FpdGVy LiBXZSBjYW4gdXNlIGxpc3RfZW1wdHkgd2l0aG91dCB0YWtpbmcgdGhlCj4+ICsJICogd2FpdF9s b2NrLCBnaXZlbiB0aGUgbWVtb3J5IGJhcnJpZXIgYWJvdmUgYW5kIHRoZSBsaXN0X2VtcHR5Cj4+ ICsJICogZG9jdW1lbnRhdGlvbi4KPiBJIGRvbid0IHRydXN0IGRvY3VtZW50YXRpb24uIFBsZWFz ZSByZWFzb24gYWJvdXQgaW1wbGVtZW50YXRpb24uCgpXaWxsIGRvLgoKPj4gICAJICovCj4+IC0J aWYgKGxpa2VseSghKGF0b21pY19sb25nX3JlYWQoJmxvY2stPmJhc2Uub3duZXIpICYgTVVURVhf RkxBR19XQUlURVJTKSkpCj4+ICsJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT5iYXNlLndh aXRfbGlzdCkpKQo+PiAgIAkJcmV0dXJuOwo+PiAgIAo+PiAgIAkvKgo+PiBAQCAtNjUzLDYgKzY5 NSwxNyBAQCBfX3d3X211dGV4X2xvY2tfY2hlY2tfc3RhbXAoc3RydWN0IG11dGV4ICpsb2NrLCBz dHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCj4+ICAgCXN0cnVjdCB3d19hY3F1aXJlX2N0eCAq aG9sZF9jdHggPSBSRUFEX09OQ0Uod3ctPmN0eCk7Cj4+ICAgCXN0cnVjdCBtdXRleF93YWl0ZXIg KmN1cjsKPj4gICAKPj4gKwkvKgo+PiArCSAqIElmIHdlIG1pc3MgYSB3b3VuZGVkID09IHRydWUg aGVyZSwgd2Ugd2lsbCBoYXZlIGEgcGVuZGluZwo+IEV4cGxhaW4gaG93IHdlIGNhbiBtaXNzIHRo YXQuCgpUaGlzIGlzIGFjdHVhbGx5IHRoZSBwYWlyaW5nIGxvY2F0aW9uIG9mIHRoZSB3YWtlX3Vw X3Byb2Nlc3MoKSBjb21tZW50IC8gCmNvZGUgZGlzY3Vzc2VkIGFib3ZlLiBIZXJlIHdlIHNob3Vs ZCBoYXZlICFUQVNLX1JVTk5JTkcsIGFuZCBsZXQncyBzYXkgCmN0eC0+d291bmRlZCBpcyBzZXQg YnkgYW5vdGhlciBwcm9jZXNzIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3ZlIHJlYWQgaXQgCih3ZSAi bWlzcyIgaXQpLiBBdCB0aGF0IHBvaW50IHRoZXJlIG11c3QgYmUgYSBwZW5kaW5nIHdha2UtdXAt cHJvY2VzcygpIApmb3IgdXMgYW5kIHdlJ2xsIHBpY2sgdXAgdGhlIHNldCB2YWx1ZSBvZiB3b3Vu ZGVkIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiAKYWZ0ZXIgcmV0dXJuaW5nIGZyb20gc2NoZWR1bGUo KS4KCj4KPj4gKwkgKiBUQVNLX1JVTk5JTkcgYW5kIHBpY2sgaXQgdXAgb24gdGhlIG5leHQgc2No ZWR1bGUgZmFsbC10aHJvdWdoLgo+PiArCSAqLwo+PiArCWlmICghY3R4LT53d19jbGFzcy0+aXNf d2FpdF9kaWUpIHsKPj4gKwkJaWYgKFJFQURfT05DRShjdHgtPndvdW5kZWQpKQo+PiArCQkJZ290 byBkZWFkbG9jazsKPj4gKwkJZWxzZQo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICAg CWlmIChob2xkX2N0eCAmJiBfX3d3X2N0eF9zdGFtcF9hZnRlcihjdHgsIGhvbGRfY3R4KSkKPj4g ICAJCWdvdG8gZGVhZGxvY2s7Cj4+ICAgCj4+IEBAIC02ODMsMTIgKzczNiwxNSBAQCBfX3d3X211 dGV4X2FkZF93YWl0ZXIoc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyLAo+PiAgIHsKPj4gICAJ c3RydWN0IG11dGV4X3dhaXRlciAqY3VyOwo+PiAgIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Cj4+ ICsJYm9vbCBpc193YWl0X2RpZTsKPj4gICAKPj4gICAJaWYgKCF3d19jdHgpIHsKPj4gICAJCWxp c3RfYWRkX3RhaWwoJndhaXRlci0+bGlzdCwgJmxvY2stPndhaXRfbGlzdCk7Cj4+ICAgCQlyZXR1 cm4gMDsKPj4gICAJfQo+PiAgIAo+PiArCWlzX3dhaXRfZGllID0gd3dfY3R4LT53d19jbGFzcy0+ aXNfd2FpdF9kaWU7Cj4+ICsKPj4gICAJLyoKPj4gICAJICogQWRkIHRoZSB3YWl0ZXIgYmVmb3Jl IHRoZSBmaXJzdCB3YWl0ZXIgd2l0aCBhIGhpZ2hlciBzdGFtcC4KPj4gICAJICogV2FpdGVycyB3 aXRob3V0IGEgY29udGV4dCBhcmUgc2tpcHBlZCB0byBhdm9pZCBzdGFydmluZwo+PiBAQCAtNzAx LDcgKzc1Nyw3IEBAIF9fd3dfbXV0ZXhfYWRkX3dhaXRlcihzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3 YWl0ZXIsCj4+ICAgCj4+ICAgCQlpZiAoX193d19jdHhfc3RhbXBfYWZ0ZXIod3dfY3R4LCBjdXIt Pnd3X2N0eCkpIHsKPj4gICAJCQkvKiBCYWNrIG9mZiBpbW1lZGlhdGVseSBpZiBuZWNlc3Nhcnku ICovCj4+IC0JCQlpZiAod3dfY3R4LT5hY3F1aXJlZCA+IDApIHsKPj4gKwkJCWlmIChpc193YWl0 X2RpZSAmJiB3d19jdHgtPmFjcXVpcmVkID4gMCkgewo+PiAgICNpZmRlZiBDT05GSUdfREVCVUdf TVVURVhFUwo+PiAgIAkJCQlzdHJ1Y3Qgd3dfbXV0ZXggKnd3Owo+PiAgIAo+PiBAQCAtNzIxLDEz ICs3NzcsMjYgQEAgX193d19tdXRleF9hZGRfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndh aXRlciwKPj4gICAJCSAqIFdha2UgdXAgdGhlIHdhaXRlciBzbyB0aGF0IGl0IGdldHMgYSBjaGFu Y2UgdG8gYmFjawo+PiAgIAkJICogb2ZmLgo+PiAgIAkJICovCj4+IC0JCWlmIChjdXItPnd3X2N0 eC0+YWNxdWlyZWQgPiAwKSB7Cj4+ICsJCWlmIChpc193YWl0X2RpZSAmJiBjdXItPnd3X2N0eC0+ YWNxdWlyZWQgPiAwKSB7Cj4+ICAgCQkJZGVidWdfbXV0ZXhfd2FrZV93YWl0ZXIobG9jaywgY3Vy KTsKPj4gICAJCQl3YWtlX3VwX3Byb2Nlc3MoY3VyLT50YXNrKTsKPj4gICAJCX0KPj4gICAJfQo+ PiAgIAo+PiAgIAlsaXN0X2FkZF90YWlsKCZ3YWl0ZXItPmxpc3QsIHBvcyk7Cj4+ICsJaWYgKCFp c193YWl0X2RpZSkgewo+PiArCQlzdHJ1Y3Qgd3dfbXV0ZXggKnd3ID0gY29udGFpbmVyX29mKGxv Y2ssIHN0cnVjdCB3d19tdXRleCwgYmFzZSk7Cj4+ICsKPj4gKwkJLyoKPj4gKwkJICogTWFrZSBz dXJlIGEgcmFjaW5nIGxvY2sgdGFrZXIgc2VlcyBhIG5vbi1lbXB0eSB3YWl0aW5nIGxpc3QKPj4g KwkJICogYmVmb3JlIHdlIHJlYWQgd3ctPmN0eCwgc28gdGhhdCBpZiB3ZSBtaXNzIHd3LT5jdHgs IHRoZQo+PiArCQkgKiByYWNpbmcgbG9jayB0YWtlciB3aWxsIGNhbGwgX193d19tdXRleF93YWtl X3VwX2Zvcl9iYWNrb2ZmKCkKPj4gKwkJICogYW5kIHdvdW5kIGl0c2VsZi4KPj4gKwkJICovCj4+ ICsJCXNtcF9tYigpOwo+PiArCQlfX3d3X211dGV4X3dvdW5kKGxvY2ssIHd3X2N0eCwgd3ctPmN0 eCk7Cj4+ICsJfQo+PiArCj4+ICAgCXJldHVybiAwOwo+PiAgIH0KPj4gICAKPj4gQEAgLTc1MCw2 ICs4MTksMTQgQEAgX19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssIGxvbmcg c3RhdGUsIHVuc2lnbmVkIGludCBzdWJjbGFzcywKPj4gICAJaWYgKHVzZV93d19jdHggJiYgd3df Y3R4KSB7Cj4+ICAgCQlpZiAodW5saWtlbHkod3dfY3R4ID09IFJFQURfT05DRSh3dy0+Y3R4KSkp Cj4+ICAgCQkJcmV0dXJuIC1FQUxSRUFEWTsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiBSZXNldCB0 aGUgd291bmRlZCBmbGFnIGFmdGVyIGEgYmFja29mZi4KPj4gKwkJICogTm8gb3RoZXIgcHJvY2Vz cyBjYW4gcmFjZSBhbmQgd291bmQgdXMgaGVyZSBzaW5jZSB0aGV5Cj4+ICsJCSAqIGNhbid0IGhh dmUgYSB2YWxpZCBvd25lciBwb2ludGVyIGF0IHRoaXMgdGltZQo+PiArCQkgKi8KPj4gKwkJaWYg KHd3X2N0eC0+YWNxdWlyZWQgPT0gMCkKPj4gKwkJCXd3X2N0eC0+d291bmRlZCA9IGZhbHNlOwo+ PiAgIAl9Cj4+ICAgCj4+ICAgCXByZWVtcHRfZGlzYWJsZSgpOwo+PiBAQCAtODU4LDYgKzkzNSwx MSBAQCBfX211dGV4X2xvY2tfY29tbW9uKHN0cnVjdCBtdXRleCAqbG9jaywgbG9uZyBzdGF0ZSwg dW5zaWduZWQgaW50IHN1YmNsYXNzLAo+PiAgIGFjcXVpcmVkOgo+PiAgIAlfX3NldF9jdXJyZW50 X3N0YXRlKFRBU0tfUlVOTklORyk7Cj4+ICAgCj4+ICsJLyogV2Ugc3RvbGUgdGhlIGxvY2suIE5l ZWQgdG8gY2hlY2sgd291bmRlZCBzdGF0dXMuICovCj4+ICsJaWYgKHVzZV93d19jdHggJiYgd3df Y3R4ICYmICF3d19jdHgtPnd3X2NsYXNzLT5pc193YWl0X2RpZSAmJgo+PiArCSAgICAhX19tdXRl eF93YWl0ZXJfaXNfZmlyc3QobG9jaywgJndhaXRlcikpCj4+ICsJCV9fd3dfbXV0ZXhfd2FrZXVw X2Zvcl9iYWNrb2ZmKGxvY2ssIHd3X2N0eCk7Cj4+ICsKPj4gICAJbXV0ZXhfcmVtb3ZlX3dhaXRl cihsb2NrLCAmd2FpdGVyLCBjdXJyZW50KTsKPj4gICAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZs b2NrLT53YWl0X2xpc3QpKSkKPj4gICAJCV9fbXV0ZXhfY2xlYXJfZmxhZyhsb2NrLCBNVVRFWF9G TEFHUyk7Cj4gSSBjYW4ndCBzYXkgSSdtIGEgZmFuLiBJJ20gYWxyZWFkeSBjdXJzaW5nIHRoZSB3 d19tdXRleCBzdHVmZiBldmVyeSB0aW1lCj4gSSBoYXZlIHRvIGxvb2sgYXQgaXQsIGFuZCB5b3Ug anVzdCBtYWRlIGl0IHdvcnNlIHNwYWdldGhpLgo+Cj4KClRoYW5rcyBmb3IgdGhlIHJldmlldy4K CldlbGwsIEkgY2FuJ3Qgc3BlYWsgZm9yIHRoZSBjdXJyZW50IHd3IGltcGxlbWVudGF0aW9uIGV4 Y2VwdCBJIGRpZG4ndCAKdGhpbmsgaXQgd2FzIHRvbyBoYXJkIHRvIHVuZGVyc3RhbmQgZm9yIGEg Zmlyc3QgdGltZSByZWFkZXIuCgpBZG1pdHRlZGx5IHRoZSBXb3VuZC1XYWl0IHBhdGggbWFrZXMg aXQgd29yc2Ugc2luY2UgaXQncyBhIHByZWVtcHRpdmUgCmFsZ29yaXRobSBhbmQgd2UgbmVlZCB0 byB0b3VjaCBvdGhlciBwcm9jZXNzZXMgYSBhY3F1aXJlIGNvbnRleHRzIGFuZCAKd29ycnkgYWJv dXQgb3JkZXJpbmcuCgpTbywgYXNzdW1pbmcgeW91ciByZXZpZXcgY29tbWVudHMgYXJlIGZpeGVk IHVwLCBpcyB0aGF0IGEgc29saWQgTkFLIG9yIApkbyB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbiB0 aGF0IHdvdWxkIG1ha2UgeW91IG1vcmUgY29tZm9ydGFibGUgd2l0aCB0aGUgCmNvZGU/IGxpa2Ug c3BsaXR0aW5nIG91dCB3dy1zdHVmZiB0byBhIHNlcGFyYXRlIGZpbGU/CgovVGhvbWFzCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==