From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [RFC 3/9] drm/i915: Convert requests to use struct fence Date: Mon, 03 Aug 2015 10:18:51 +0100 Message-ID: <55BF31FB.8080806@linux.intel.com> References: <1437143483-6234-1-git-send-email-John.C.Harrison@Intel.com> <1437143483-6234-4-git-send-email-John.C.Harrison@Intel.com> <55AFAC87.8090602@linux.intel.com> <55B756E6.9000404@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 1BFF76E4AF for ; Mon, 3 Aug 2015 02:18:52 -0700 (PDT) In-Reply-To: <55B756E6.9000404@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA3LzI4LzIwMTUgMTE6MTggQU0sIEpvaG4gSGFycmlzb24gd3JvdGU6Cj4gT24gMjIvMDcv MjAxNSAxNTo0NSwgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4+Cj4+IE9uIDA3LzE3LzIwMTUgMDM6 MzEgUE0sIEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20gd3JvdGU6Cj4+PiBGcm9tOiBKb2huIEhh cnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+Pj4KPj4+IFRoZXJlIGlzIGEgY29u c3RydWN0IGluIHRoZSBsaW51eCBrZXJuZWwgY2FsbGVkICdzdHJ1Y3QgZmVuY2UnIHRoYXQKPj4+ IGlzIGludGVuZGVkCj4+PiB0byBrZWVwIHRyYWNrIG9mIHdvcmsgdGhhdCBpcyBleGVjdXRlZCBv biBoYXJkd2FyZS4gSS5lLiBpdCBzb2x2ZXMKPj4+IHRoZSBiYXNpYwo+Pj4gcHJvYmxlbSB0aGF0 IHRoZSBkcml2ZXJzICdzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QnIGlzIHRyeWluZyB0bwo+ Pj4gYWRkcmVzcy4gVGhlCj4+PiByZXF1ZXN0IHN0cnVjdHVyZSBkb2VzIHF1aXRlIGEgbG90IG1v cmUgdGhhbiBzaW1wbHkgdHJhY2sgdGhlCj4+PiBleGVjdXRpb24gcHJvZ3Jlc3MKPj4+IHNvIGlz IHZlcnkgZGVmaW5pdGVseSBzdGlsbCByZXF1aXJlZC4gSG93ZXZlciwgdGhlIGJhc2ljIGNvbXBs ZXRpb24KPj4+IHN0YXR1cyBzaWRlCj4+PiBjb3VsZCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgcmVh ZHkgbWFkZSBmZW5jZSBpbXBsZW1lbnRhdGlvbiBhbmQgZ2Fpbgo+Pj4gYWxsIHRoZQo+Pj4gYWR2 YW50YWdlcyB0aGF0IHByb3ZpZGVzLgo+Pj4KPj4+IFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGZpcnN0 IHN0ZXAgb2YgaW50ZWdyYXRpbmcgYSBzdHJ1Y3QgZmVuY2UgaW50bwo+Pj4gdGhlIHJlcXVlc3Qu Cj4+PiBJdCByZXBsYWNlcyB0aGUgZXhwbGljaXQgcmVmZXJlbmNlIGNvdW50IHdpdGggdGhhdCBv ZiB0aGUgZmVuY2UuIEl0IGFsc28KPj4+IHJlcGxhY2VzIHRoZSAnaXMgY29tcGxldGVkJyB0ZXN0 IHdpdGggdGhlIGZlbmNlJ3MgZXF1aXZhbGVudC4KPj4+IEN1cnJlbnRseSwgdGhhdAo+Pj4gc2lt cGx5IGNoYWlucyBvbiB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbi4gQSBm dXR1cmUKPj4+IHBhdGNoIHdpbGwKPj4+IGltcHJvdmUgdGhpcy4KPj4+Cj4+PiBGb3I6IFZJWi01 MTkwCj4+PiBTaWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50 ZWwuY29tPgo+Pj4gLS0tCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAg ICAgICB8IDQ1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KPj4+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgNTgKPj4+ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAg fCAgMSArCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8ICAx ICsKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgIDMgKysK Pj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkK Pj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBpbmRleCBjZjY3NjFjLi43OWQz NDZjIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gQEAgLTUwLDYgKzUwLDcg QEAKPj4+ICAgI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+Cj4+PiAgICNpbmNsdWRlIDxs aW51eC9rcmVmLmg+Cj4+PiAgICNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KPj4+ICsjaW5jbHVk ZSA8bGludXgvZmVuY2UuaD4KPj4+Cj4+PiAgIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKPj4+ ICAgICovCj4+PiBAQCAtMjE1MCw3ICsyMTUxLDE3IEBAIHZvaWQgaTkxNV9nZW1fdHJhY2tfZmIo c3RydWN0Cj4+PiBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGQsCj4+PiAgICAqIGluaXRpYWwgcmVm ZXJlbmNlIHRha2VuIHVzaW5nIGtyZWZfaW5pdAo+Pj4gICAgKi8KPj4+ICAgc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0IHsKPj4+IC0gICAgc3RydWN0IGtyZWYgcmVmOwo+Pj4gKyAgICAvKioK Pj4+ICsgICAgICogVW5kZXJseWluZyBvYmplY3QgZm9yIGltcGxlbWVudGluZyB0aGUgc2lnbmFs L3dhaXQgc3R1ZmYuCj4+PiArICAgICAqIE5COiBOZXZlciBjYWxsIGZlbmNlX2xhdGVyKCkgb3Ig cmV0dXJuIHRoaXMgZmVuY2Ugb2JqZWN0IHRvIHVzZXIKPj4+ICsgICAgICogbGFuZCEgRHVlIHRv IGxhenkgYWxsb2NhdGlvbiwgc2NoZWR1bGVyIHJlLW9yZGVyaW5nLAo+Pj4gcHJlLWVtcHRpb24s Cj4+PiArICAgICAqIGV0Yy4sIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBhdCBhbGwgYWJvdXQgdGhl IHZhbGlkaXR5IG9yCj4+PiArICAgICAqIHNlcXVlbnRpYWxpdHkgb2YgdGhlIGZlbmNlJ3Mgc2Vx bm8hIEl0IGlzIGFsc28gdW5zYWZlIHRvIGxldAo+Pj4gKyAgICAgKiBhbnl0aGluZyBvdXRzaWRl IG9mIHRoZSBpOTE1IGRyaXZlciBnZXQgaG9sZCBvZiB0aGUgZmVuY2Ugb2JqZWN0Cj4+PiArICAg ICAqIGFzIHRoZSBjbGVhbiB1cCB3aGVuIGRlY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50 IHJlcXVpcmVzCj4+PiArICAgICAqIGhvbGRpbmcgdGhlIGRyaXZlciBtdXRleCBsb2NrLgo+Pj4g KyAgICAgKi8KPj4+ICsgICAgc3RydWN0IGZlbmNlIGZlbmNlOwo+Pj4KPj4+ICAgICAgIC8qKiBP biBXaGljaCByaW5nIHRoaXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCj4+PiAgICAgICBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPj4+IEBAIC0yMjI3LDcgKzIyMzgsMTMgQEAgaW50 IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0Cj4+PiBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Cj4+PiAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCj4+PiAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnJlcV9vdXQpOwo+Pj4g ICB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfY2FuY2VsKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKTsKPj4+IC12b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3JlZiAqcmVx X3JlZik7Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX3JlcXVlc3RfY29t cGxldGVkKHN0cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgbGF6eV9jb2hlcmVuY3kpCj4+PiArewo+Pj4gKyAgICBy ZXR1cm4gZmVuY2VfaXNfc2lnbmFsZWQoJnJlcS0+ZmVuY2UpOwo+Pj4gK30KPj4+ICsKPj4+ICAg aW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSwKPj4+ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSk7Cj4+Pgo+Pj4gQEAgLTIyNDcsNyArMjI2NCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICoKPj4+ICAgaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4+PiAgIHsKPj4+ICAgICAgIGlmIChyZXEp Cj4+PiAtICAgICAgICBrcmVmX2dldCgmcmVxLT5yZWYpOwo+Pj4gKyAgICAgICAgZmVuY2VfZ2V0 KCZyZXEtPmZlbmNlKTsKPj4+ICAgICAgIHJldHVybiByZXE7Cj4+PiAgIH0KPj4+Cj4+PiBAQCAt MjI1NSw3ICsyMjcyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkCj4+PiAgIGk5MTVfZ2VtX3JlcXVl c3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4+PiAgIHsK Pj4+IFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcmVxLT5yaW5nLT5kZXYtPnN0cnVjdF9tdXRl eCkpOwo+Pj4gLSAgICBrcmVmX3B1dCgmcmVxLT5yZWYsIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSk7 Cj4+PiArICAgIGZlbmNlX3B1dCgmcmVxLT5mZW5jZSk7Cj4+PiAgIH0KPj4+Cj4+PiAgIHN0YXRp YyBpbmxpbmUgdm9pZAo+Pj4gQEAgLTIyNjcsNyArMjI4NCw3IEBAIGk5MTVfZ2VtX3JlcXVlc3Rf dW5yZWZlcmVuY2VfX3VubG9ja2VkKHN0cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSkKPj4+ICAgICAgICAgICByZXR1cm47Cj4+Pgo+Pj4gICAgICAgZGV2ID0gcmVxLT5yaW5nLT5k ZXY7Cj4+PiAtICAgIGlmIChrcmVmX3B1dF9tdXRleCgmcmVxLT5yZWYsIGk5MTVfZ2VtX3JlcXVl c3RfZnJlZSwKPj4+ICZkZXYtPnN0cnVjdF9tdXRleCkpCj4+PiArICAgIGlmIChrcmVmX3B1dF9t dXRleCgmcmVxLT5mZW5jZS5yZWZjb3VudCwgZmVuY2VfcmVsZWFzZSwKPj4+ICZkZXYtPnN0cnVj dF9tdXRleCkpCj4+PiAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4+PiAgIH0KPj4+Cj4+PiBAQCAtMjI4NCwxMiArMjMwMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZAo+Pj4gaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICoqcGRzdCwKPj4+ICAgfQo+Pj4KPj4+ICAgLyoKPj4+IC0gKiBYWFg6IGk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkIHNob3VsZCBiZSBoZXJlIGJ1dCBjdXJyZW50bHkKPj4+IG5lZWRzIHRoZQo+ Pj4gLSAqIGRlZmluaXRpb24gb2YgaTkxNV9zZXFub19wYXNzZWQoKSB3aGljaCBpcyBiZWxvdy4g SXQgd2lsbCBiZQo+Pj4gbW92ZWQgaW4KPj4+IC0gKiBhIGxhdGVyIHBhdGNoIHdoZW4gdGhlIGNh bGwgdG8gaTkxNV9zZXFub19wYXNzZWQoKSBpcyBvYnNvbGV0ZWQuLi4KPj4+IC0gKi8KPj4+IC0K Pj4+IC0vKgo+Pj4gICAgKiBBIGNvbW1hbmQgdGhhdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5n IGJ5IHRoZSBjb21tYW5kIHBhcnNlci4KPj4+ICAgICovCj4+PiAgIHN0cnVjdCBkcm1faTkxNV9j bWRfZGVzY3JpcHRvciB7Cj4+PiBAQCAtMjg1MSwxOCArMjg2Miw2IEBAIGk5MTVfc2Vxbm9fcGFz c2VkKHVpbnQzMl90IHNlcTEsIHVpbnQzMl90IHNlcTIpCj4+PiAgICAgICByZXR1cm4gKGludDMy X3QpKHNlcTEgLSBzZXEyKSA+PSAwOwo+Pj4gICB9Cj4+Pgo+Pj4gLXN0YXRpYyBpbmxpbmUgYm9v bCBpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChzdHJ1Y3QKPj4+IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxhenlfY29oZXJl bmN5KQo+Pj4gLXsKPj4+IC0gICAgdTMyIHNlcW5vOwo+Pj4gLQo+Pj4gLSAgICBCVUdfT04ocmVx ID09IE5VTEwpOwo+Pj4gLQo+Pj4gLSAgICBzZXFubyA9IHJlcS0+cmluZy0+Z2V0X3NlcW5vKHJl cS0+cmluZywgbGF6eV9jb2hlcmVuY3kpOwo+Pj4gLQo+Pj4gLSAgICByZXR1cm4gaTkxNV9zZXFu b19wYXNzZWQoc2Vxbm8sIHJlcS0+c2Vxbm8pOwo+Pj4gLX0KPj4+IC0KPj4+ICAgaW50IF9fbXVz dF9jaGVjayBpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyCj4+ PiAqc2Vxbm8pOwo+Pj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX3NldF9zZXFubyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIKPj4+IHNlcW5vKTsKPj4+ICAgaW50IF9fbXVzdF9jaGVj ayBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlKHN0cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKTsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j Cj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IGluZGV4IGQ5ZjI3MDEu Ljg4OGJiNzIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j Cj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+PiBAQCAtMjYxNiwx MiArMjYxNiwxNCBAQCBzdGF0aWMgdm9pZCBpOTE1X3NldF9yZXNldF9zdGF0dXMoc3RydWN0Cj4+ PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICAgICAgIH0KPj4+ICAgfQo+Pj4KPj4+ IC12b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3JlZiAqcmVxX3JlZikKPj4+ICtz dGF0aWMgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGZlbmNlICpyZXFfZmVuY2Up Cj4+PiAgIHsKPj4+IC0gICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEgPSBjb250 YWluZXJfb2YocmVxX3JlZiwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mKCpy ZXEpLCByZWYpOwo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGNv bnRhaW5lcl9vZihyZXFfZmVuY2UsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVv ZigqcmVxKSwgZmVuY2UpOwo+Pj4gICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJl cS0+Y3R4Owo+Pj4KPj4+ICsgQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJnJlcS0+cmluZy0+ZGV2 LT5zdHJ1Y3RfbXV0ZXgpKTsKPj4+ICsKPj4+ICAgICAgIGlmIChyZXEtPmZpbGVfcHJpdikKPj4+ ICAgICAgICAgICBpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXEpOwo+Pj4K Pj4+IEBAIC0yNjM3LDYgKzI2MzksNDcgQEAgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3Ry dWN0IGtyZWYgKnJlcV9yZWYpCj4+PiAgICAgICBrbWVtX2NhY2hlX2ZyZWUocmVxLT5pOTE1LT5y ZXF1ZXN0cywgcmVxKTsKPj4+ICAgfQo+Pj4KPj4+ICtzdGF0aWMgY29uc3QgY2hhciAqaTkxNV9n ZW1fcmVxdWVzdF9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGZlbmNlCj4+PiAqcmVxX2ZlbmNlKQo+ Pj4gK3sKPj4+ICsgICAgcmV0dXJuICJpOTE1X3JlcXVlc3QiOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgY29uc3QgY2hhciAqaTkxNV9nZW1fcmVxdWVzdF9nZXRfdGltZWxpbmVfbmFtZShzdHJ1 Y3QgZmVuY2UKPj4+ICpyZXFfZmVuY2UpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSA9IGNvbnRhaW5lcl9vZihyZXFfZmVuY2UsCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVvZigqcmVxKSwgZmVuY2UpOwo+Pj4gKyAgICByZXR1cm4gcmVx LT5yaW5nLT5uYW1lOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBpOTE1X2dlbV9yZXF1 ZXN0X2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpyZXFfZmVuY2UpCj4+PiArewo+Pj4g KyAgICAvKiBJbnRlcnJ1cHQgZHJpdmVuIGZlbmNlcyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4q Lwo+Pj4gKyAgICBXQVJOKHRydWUsICJUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkISIpOwo+Pj4g KyAgICByZXR1cm4gdHJ1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgaTkxNV9nZW1f cmVxdWVzdF9pc19jb21wbGV0ZWQoc3RydWN0IGZlbmNlICpyZXFfZmVuY2UpCj4+PiArewo+Pj4g KyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGNvbnRhaW5lcl9vZihyZXFf ZmVuY2UsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZigqcmVxKSwgZmVuY2Up Owo+Pj4gKyAgICB1MzIgc2Vxbm87Cj4+PiArCj4+PiArICAgIEJVR19PTihyZXEgPT0gTlVMTCk7 Cj4+PiArCj4+PiArICAgIHNlcW5vID0gcmVxLT5yaW5nLT5nZXRfc2Vxbm8ocmVxLT5yaW5nLCBm YWxzZS8qbGF6eV9jb2hlcmVuY3kqLyk7Cj4+PiArCj4+PiArICAgIHJldHVybiBpOTE1X3NlcW5v X3Bhc3NlZChzZXFubywgcmVxLT5zZXFubyk7Cj4+PiArfQo+Pgo+PiBIb3cgZG9lcyB0aGlzIHJl YWxseSB3b3JrPyBJIGRvbid0IHNlZSBhbnkgZmVuY2UgY29kZSBjYWxsaW5nIHRoaXMsCj4+IHBs dXMsIHRoaXMgcGF0Y2ggaXMgbm90IGRvaW5nIGZlbmNlX3NpZ25hbCBhbnl3aGVyZS4gU28gaXMg dGhlIHdob2xlCj4+IHRoaW5nIGZ1bmN0aW9uYWwgYXQgdGhpcyBwb2ludD8KPgo+IERvIHlvdSBt ZWFuIGZlbmNlIGNvZGUgY2FsbGluZyBpOTE1X2dlbV9yZXF1ZXN0X2lzX2NvbXBsZXRlZD8gSXQg aXMgYQo+IGNhbGxiYWNrIGluIHRoZSBmZW5jZSBvcHMgc3RydWN0dXJlIGFzc2lnbmVkIGEgZmV3 IGxpbmVzIGxvd2VyIGluIHRoZQo+IHBhdGNoOgo+ICA+ICsgLnNpZ25hbGVkID0gaTkxNV9nZW1f cmVxdWVzdF9pc19jb21wbGV0ZWQsCj4KPiBXaGVuZXZlciAnZmVuY2VfaXNfc2lnbmFsZWQoJmZl bmNlKScgaXMgY2FsbGVkIGl0IGJhc2ljYWxseSBjaGFpbnMgb24gdG8KPiB0aGUgLnNpZ25hbGxl ZCBjYWxsYmFjayBpbnNpZGUgdGhlIGZlbmNlIGltcGxlbWVudGF0aW9uLiBXaGVuIHRoZQo+IGlu dGVycnVwdCB2ZXJzaW9uIGNvbWVzIGluIHdpdGggdGhlIGxhdGVyIHBhdGNoLCB0aGlzIGlzIHJl bW92ZWQgYXMgdGhlCj4gZmVuY2UgaXMgdGhlbiB0cmFja2luZyBpdHMgY29tcGxldGlvbiBzdGF0 ZSBhbmQgZG9lcyBub3QgbmVlZCB0byBkbyB0aGUKPiBoYXJkd2FyZSBxdWVyeSBldmVyeSB0aW1l LiBIb3dldmVyLCBhdCB0aGlzIHBvaW50IGl0IHN0aWxsIGRvZXMgbmVlZCB0bwo+IGNoYWluIG9u IHRvIHJlYWRpbmcgdGhlIEhXUy4gQW5kIHllcywgaXQgaXMgY2VydGFpbmx5IHN1cHBvc2VkIHRv IGJlCj4gZnVsbHkgZnVuY3Rpb25hbCBhdCB0aGlzIHBvaW50ISBJdCBjZXJ0YWlubHkgd2FzIHdo ZW4gSSB3YXMgdGVzdGluZyBpdC4KClllYWggbG9vayBPSy4gSSBwcm9iYWJseSBtaXNzZWQgc29t ZXRoaW5nIHdoZW4gaW5pdGlhbHkgcmVhZGluZyB0aGlzLCBvciAKY29uZnVzZWQgdGhlIHR3byB2 YXJpYW50cyBvZiAiaXMgY29tcGxldGUiIC8gImNvbXBsZXRlZCIuCgpUdnJ0a28KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==