From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [Intel-gfx] [PATCH 1/2] drm/i915: Use CPU mapping for userspace dma-buf mmap() Date: Wed, 5 Aug 2015 09:08:10 +0200 Message-ID: <20150805070810.GL24689@phenom.ffwll.local> References: <1438375344-4954-1-git-send-email-tiago.vignatti@intel.com> <1438375344-4954-2-git-send-email-tiago.vignatti@intel.com> <20150731210234.GA16824@nuc-i3427.alporthouse.com> <55C12EF1.7080701@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) by gabe.freedesktop.org (Postfix) with ESMTPS id 17D7A88CFA for ; Wed, 5 Aug 2015 00:08:15 -0700 (PDT) Received: by wibxm9 with SMTP id xm9so195620782wib.0 for ; Wed, 05 Aug 2015 00:08:13 -0700 (PDT) Content-Disposition: inline In-Reply-To: <55C12EF1.7080701@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tiago Vignatti Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, daniel.thompson@linaro.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBBdWcgMDQsIDIwMTUgYXQgMDY6MzA6MjVQTSAtMDMwMCwgVGlhZ28gVmlnbmF0dGkg d3JvdGU6Cj4gT24gMDcvMzEvMjAxNSAwNjowMiBQTSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+ID4K PiA+VGhlIGZpcnN0IHByb2JsZW0gaXMgdGhhdCBsbGMgZG9lcyBub3QgZ3VhcnJhbnRlZSB0aGF0 IHRoZSBidWZmZXIgaXMKPiA+Y2FjaGUgY29oZXJlbnQgd2l0aCBhbGwgYXNwZWN0cyBvZiB0aGUg R1BVLiBGb3Igc2Nhbm91dCBhbmQgc2ltaWxhcgo+ID53cml0ZXMgbmVlZCB0byBiZSBXQy4KPiA+ Cj4gPmlmIChvYmotPmhhc19mcmFtZWJ1ZmZlcl9yZWZlcmVuY2VzKSB3b3VsZCBhdCBsZWFzdCBj YXRjaCB3aGVyZSB0aGUgZmIKPiA+aXMgbWFkZSBiZWZvcmUgdGhlIG1tYXAuCj4gPgo+ID5FcXVh bGx5IHRoaXMgYnVmZmVyIGNvdWxkIHRoZW4gYmUgc2hhcmVkIHdpdGggb3RoZXIgZGV2aWNlcyBh bmQgZXhwb3NpbmcKPiA+YSBDUFUgbW1hcCB0byB1c2Vyc3BhY2UgKGFuZCBubyBmbHVzaC9zZXQt ZG9tYWluIHByb3RvY29sKSB3aWxsIHJlc3VsdCBpbgo+ID5jb3JydXB0aW9uLgo+IAo+IEkndmUg YnVpbHQgYW4gaWd0IHRlc3QgdG8gY2F0Y2ggdGhpcyBjb3JydXB0aW9uIGJ1dCBpdCdzIG5vdCBy ZWFsbHkgZmFsbGluZwo+IHRoZXJlIGluIG15IEl2eUJyaWRnZS4gSWYgd2hhdCB5b3UgZGVzY3Jp YmVkIGlzIHJpZ2h0IChhbmQgc28gd2hhdCBJIGNvZGVkKQo+IHRoZW4gdGhpcyB0ZXN0IHNob3Vs ZCB3cml0ZSBpbiB0aGUgbWFwcGVkIGJ1ZmZlciBidXQgbm90IHVwZGF0ZSB0aGUgc2NyZWVuLgo+ IAo+IEFueSBpZGVhIHdoYXQncyBnb2luZyBvbj8KPiAKPiBodHRwczovL2dpdGh1Yi5jb20vdGlh Z292aWduYXR0aS9pbnRlbC1ncHUtdG9vbHMvY29tbWl0LzNlMTMwYWMyYjI3NGYxYTNmNjg4NTU1 NTljNzhjYjcyZDA2NzNjYTIucGF0Y2gKPiAKPiAKPiBGcm9tIDNlMTMwYWMyYjI3NGYxYTNmNjg4 NTU1NTljNzhjYjcyZDA2NzNjYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCj4gRnJvbTogVGlh Z28gVmlnbmF0dGkgPHRpYWdvLnZpZ25hdHRpQGludGVsLmNvbT4KPiBEYXRlOiBUdWUsIDQgQXVn IDIwMTUgMTM6Mzg6MDkgLTAzMDAKPiBTdWJqZWN0OiBbUEFUQ0hdIHRlc3RzOiBBZGQgcHJpbWVf Y3JjIGZvciBjYWNoZSBjb2hlcmVuY3kKPiAKPiBUaGlzIHByb2dyYW0gY2FuIGJlIHVzZWQgdG8g ZGV0ZWN0IHdoZW4gdGhlIHdyaXRlcyBkb24ndCBsYW5kIGluIHNjYW5vdXQsCj4gZHVlCj4gY2Fj aGUgaW5jb2hlcmVuY3kuCj4gCj4gUnVuIGl0IGxpa2UgLi9wcmltZV9jcmMgLS1pbnRlcmFjdGl2 ZS1kZWJ1Zz1jcmMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBUaWFnbyBWaWduYXR0aSA8dGlhZ28udmln bmF0dGlAaW50ZWwuY29tPgo+IC0tLQo+ICB0ZXN0cy8uZ2l0aWdub3JlICAgICAgIHwgICAxICsK PiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gIHRlc3RzL3ByaW1lX2NyYy5jICAg ICAgfCAyMDEKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjAzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL3ByaW1lX2NyYy5jCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25v cmUgYi90ZXN0cy8uZ2l0aWdub3JlCj4gaW5kZXggNWJjNGE1OC4uOTZkYmY1NyAxMDA2NDQKPiAt LS0gYS90ZXN0cy8uZ2l0aWdub3JlCj4gKysrIGIvdGVzdHMvLmdpdGlnbm9yZQo+IEBAIC0xNjAs NiArMTYwLDcgQEAgcG1fcmM2X3Jlc2lkZW5jeQo+ICBwbV9ycG0KPiAgcG1fcnBzCj4gIHBtX3Nz ZXUKPiArcHJpbWVfY3JjCj4gIHByaW1lX252X2FwaQo+ICBwcmltZV9udl9wY29weQo+ICBwcmlt ZV9udl90ZXN0Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggNWIyMDcyZS4uYzA1YjVhNyAxMDA2NDQKPiAtLS0gYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBA IC05MCw2ICs5MCw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gIAlwbV9ycHMgXAo+ICAJcG1fcmM2 X3Jlc2lkZW5jeSBcCj4gIAlwbV9zc2V1IFwKPiArCXByaW1lX2NyYyBcCj4gIAlwcmltZV9tbWFw IFwKPiAgCXByaW1lX3NlbGZfaW1wb3J0IFwKPiAgCXRlbXBsYXRlIFwKPiBkaWZmIC0tZ2l0IGEv dGVzdHMvcHJpbWVfY3JjLmMgYi90ZXN0cy9wcmltZV9jcmMuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzQ3NGNjOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0 cy9wcmltZV9jcmMuYwo+IEBAIC0wLDAgKzEsMjAxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDC qSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUKPiAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUKPiBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZgo+IHRoZQo+ICsgKiBTb2Z0 d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiBPUgo+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gT1RIRVIKPiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+IERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgVGlhZ28gVmlnbmF0dGkgPHRp YWdvLnZpZ25hdHRpIGF0IGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsvKiBUaGlzIHBy b2dyYW0gY2FuIGRldGVjdCB3aGVuIHRoZSB3cml0ZXMgZG9uJ3QgbGFuZCBpbiBzY2Fub3V0LCBk dWUgY2FjaGUKPiArICogaW5jb2hlcmVuY3kuICovCj4gKwo+ICsjaW5jbHVkZSAiZHJtdGVzdC5o Igo+ICsjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKPiArI2luY2x1ZGUgImlndF9rbXMuaCIKPiAr Cj4gKyNkZWZpbmUgTUFYX0NPTk5FQ1RPUlMgMzIKPiArCj4gK3N0cnVjdCBtb2Rlc2V0X3BhcmFt cyB7Cj4gKwl1aW50MzJfdCBjcnRjX2lkOwo+ICsJdWludDMyX3QgY29ubmVjdG9yX2lkOwo+ICsJ ZHJtTW9kZU1vZGVJbmZvUHRyIG1vZGU7Cj4gK307Cj4gKwo+ICtpbnQgZHJtX2ZkOwo+ICtkcm1N b2RlUmVzUHRyIGRybV9yZXM7Cj4gK2RybU1vZGVDb25uZWN0b3JQdHIgZHJtX2Nvbm5lY3RvcnNb TUFYX0NPTk5FQ1RPUlNdOwo+ICtkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Cj4gK2lndF9waXBl X2NyY190ICpwaXBlX2NyYzsKPiArCj4gK3N0cnVjdCBtb2Rlc2V0X3BhcmFtcyBtczsKPiArCj4g K3N0YXRpYyB2b2lkIGZpbmRfbW9kZXNldF9wYXJhbXModm9pZCkKPiArewo+ICsJaW50IGk7Cj4g Kwl1aW50MzJfdCBjb25uZWN0b3JfaWQgPSAwLCBjcnRjX2lkOwo+ICsJZHJtTW9kZU1vZGVJbmZv UHRyIG1vZGUgPSBOVUxMOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkcm1fcmVzLT5jb3VudF9j b25uZWN0b3JzOyBpKyspIHsKPiArCQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGMgPSBkcm1fY29ubmVj dG9yc1tpXTsKPiArCj4gKwkJaWYgKGMtPmNvdW50X21vZGVzKSB7Cj4gKwkJCWNvbm5lY3Rvcl9p ZCA9IGMtPmNvbm5lY3Rvcl9pZDsKPiArCQkJbW9kZSA9ICZjLT5tb2Rlc1swXTsKPiArCQkJYnJl YWs7Cj4gKwkJfQo+ICsJfQo+ICsJaWd0X3JlcXVpcmUoY29ubmVjdG9yX2lkKTsKPiArCj4gKwlj cnRjX2lkID0gZHJtX3Jlcy0+Y3J0Y3NbMF07Cj4gKwlpZ3RfYXNzZXJ0KGNydGNfaWQpOwo+ICsJ aWd0X2Fzc2VydChtb2RlKTsKPiArCj4gKwltcy5jb25uZWN0b3JfaWQgPSBjb25uZWN0b3JfaWQ7 Cj4gKwltcy5jcnRjX2lkID0gY3J0Y19pZDsKPiArCW1zLm1vZGUgPSBtb2RlOwo+ICsKPiArfQo+ ICsKPiArI2RlZmluZSBCT19TSVpFICgxNioxMDI0KQo+ICsKPiArY2hhciBwYXR0ZXJuW10gPSB7 MHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsCj4gKwkw eDAwLCAweDAwLCAweGZmLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZn07Cj4gKwo+ ICtzdGF0aWMgdm9pZCBtZXNzX3dpdGhfY29oZXJlbmN5KGNoYXIgKnB0cikKPiArewo+ICsJb2Zm X3QgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQk9fU0laRTsgaSs9c2l6ZW9mKHBhdHRlcm4p KSB7Cj4gKwkJbWVtY3B5KHB0ciArIGksIHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSk7Cj4gKwl9 Cj4gKy8vCW11bm1hcChwdHIsIEJPX1NJWkUpOwo+ICsvLwljbG9zZShkbWFfYnVmX2ZkKTsKPiAr fQo+ICsKPiArc3RhdGljIGNoYXIgKmRtYWJ1Zl9tbWFwX2ZyYW1lYnVmZmVyKHN0cnVjdCBpZ3Rf ZmIgKmZiKQo+ICt7Cj4gKwlpbnQgZG1hX2J1Zl9mZDsKPiArCWNoYXIgKnB0ciA9IE5VTEw7Cj4g Kwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChkcm1fZmQsIGZiLT5nZW1faGFu ZGxlKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJcHRyID0gbW1hcChOVUxM LCBCT19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBkbWFfYnVmX2Zk LAo+IDApOwo+ICsJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7Cj4gKwo+ICsJcmV0dXJu IHB0cjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2V0X21ldGhvZF9jcmModWludDY0X3QgdGls aW5nLCBpZ3RfY3JjX3QgKmNyYywgYm9vbCBtZXNzKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZi Owo+ICsJaW50IHJjOwo+ICsJY2hhciAqcHRyOwo+ICsKPiArCWlndF9jcmVhdGVfZmIoZHJtX2Zk LCBtcy5tb2RlLT5oZGlzcGxheSwgbXMubW9kZS0+dmRpc3BsYXksCj4gKwkJICAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwgdGlsaW5nLCAmZmIpOwo+ICsKPiArCWlmIChtZXNzKQo+ICsJCXB0ciA9 IGRtYWJ1Zl9tbWFwX2ZyYW1lYnVmZmVyKCZmYik7Cj4gKwo+ICsJcmMgPSBkcm1Nb2RlU2V0Q3J0 Yyhkcm1fZmQsIG1zLmNydGNfaWQsIGZiLmZiX2lkLCAwLCAwLAo+ICsJCQkgICAgJm1zLmNvbm5l Y3Rvcl9pZCwgMSwgbXMubW9kZSk7Cj4gKwlpZ3RfYXNzZXJ0KHJjID09IDApOwo+ICsKPiArCWlm IChtZXNzKQo+ICsJCW1lc3Nfd2l0aF9jb2hlcmVuY3kocHRyKTsKPiArCj4gKwlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMocGlwZV9jcmMsIGNyYyk7Cj4gKwo+ICsJa21zdGVzdF91bnNldF9hbGxf Y3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsKPiArCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcmF3X21ldGhvZF9zdWJ0ZXN0KHVpbnQ2NF90IHRpbGlu ZykKPiArewo+ICsJaWd0X2NyY190IHJlZmVyZW5jZV9jcmMsIGNyYzsKPiArCj4gKwlrbXN0ZXN0 X3Vuc2V0X2FsbF9jcnRjcyhkcm1fZmQsIGRybV9yZXMpOwo+ICsKPiArCWZpbmRfbW9kZXNldF9w YXJhbXMoKTsKPiArCj4gKwlnZXRfbWV0aG9kX2NyYyh0aWxpbmcsICZyZWZlcmVuY2VfY3JjLCBm YWxzZSk7Cj4gKwlnZXRfbWV0aG9kX2NyYyh0aWxpbmcsICZjcmMsIHRydWUpOwo+ICsKPiArCS8v IFhYWDogSUlVQyBpZiB3ZSBtZXNzIHVwIHdpdGggdGhlIHNjYW5vdXQgZGV2aWNlLCB0aHJvdWdo IGEgZG1hLWJ1Zgo+IG1tYXAnZWQKPiArCS8vIHBvaW50ZXIsIHRoZW4gYm90aCB0aGUgcmVmZXJl bmNlIGNyYyBhbmQgdGhlIG1lc3NlZCB1cCBvbmUgc2hvdWxkIGJlCj4gZXF1YWwKPiArCS8vIGJl Y2F1c2UgdGhlIGxhdHRlciB3YXNuJ3QgZmx1c2hlZC4gVGhhdCdzIHRoZSB0aGVvcnksIGJ1dCBp dCdzIG5vdAo+IHdoYXQncwo+ICsJLy8gaGFwcGVuaW5nIGFuZCB0aGUgZm9sbG93aW5nIGlzIG5v dCBwYXNzaW5nLgoKTmFoIHRoZXkgZG9uJ3QgaGF2ZSB0byBiZSBlcXVhbCBzaW5jZSB0aGUgcHJv YmxlbSBpc24ndCB0aGF0IG5vdGhpbmcgZ29lcwpvdXQgdG8gbWVtb3J5IHdoZXJlIHRoZSBkaXNw bGF5IGNhbiBzZWUgaXQsIGJ1dCB1c3VhbGx5IG9ubHkgcGFydHMgb2YgaXQuCkkuZS4geW91IG5l ZWQgdG8gY2hhbmdlIHlvdXIgdGVzdCB0bwotIGRyYXcgYmxhY2sgc2NyZWVuIChpdCBzdGFydHMg dGhhdCB3YXkgc28gbm90aGluZyB0byBkbyByZWFsbHkpLCBncmFiIGNydGMKLSBkcmF3IHdoaXRl IHNjcmVlbiBhbmQgbWFrZSBzdXJlIHlvdSBmbHVzaCBjb3JyZWN0bHksIGRvbid0IGJvdGhlciB3 aXRoCiAgY3JjICh3ZSBjYW4ndCB0ZXN0IGZvciBpbmVxdWFsaXR5CiAgYmVjYXVzZSBjb2xsaXNp b25zIGFyZSB0b28gZWFzeSkKLSBkcmF3IGJsYWNrIHNjcmVlbiBhZ2FpbiB3aXRob3V0IGZsdXNo aW5nLCBncmFiIGNyYwoKVGhlbiBhc3NlcnQgdGhhdCB5b3VyIHR3byBjcmMgd2lsbCBiZSBpbmVx dWFsICh3aGljaCB0aGV5IHNob3VsZG4ndCBiZQpiZWNhdXNlIHNvbWUgY2FjaGVsaW5lcyB3aWxs IHN0aWxsIGJlIHN0dWNrKS4gTWF5YmUgYWxzbyBhZGQgYSBkZWxheQpzb21ld2hlcmUgc28geW91 IGNhbiBzZWUgdGhlIGNhY2hlbGluZSBkaXJ0IHBhdHRlcm4sIGl0J3MgdmVyeQpjaGFyYWN0ZXJp c3RpYy4KLURhbmllbAoKPiArCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZlcmVuY2VfY3JjLCAm Y3JjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0dXBfZW52aXJvbm1lbnQodm9pZCkKPiAr ewo+ICsJaW50IGk7Cj4gKwo+ICsJZHJtX2ZkID0gZHJtX29wZW5fYW55X21hc3RlcigpOwo+ICsJ aWd0X3JlcXVpcmUoZHJtX2ZkID49IDApOwo+ICsKPiArCWRybV9yZXMgPSBkcm1Nb2RlR2V0UmVz b3VyY2VzKGRybV9mZCk7Cj4gKwlpZ3RfYXNzZXJ0KGRybV9yZXMtPmNvdW50X2Nvbm5lY3RvcnMg PD0gTUFYX0NPTk5FQ1RPUlMpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkcm1fcmVzLT5jb3Vu dF9jb25uZWN0b3JzOyBpKyspCj4gKwkJZHJtX2Nvbm5lY3RvcnNbaV0gPSBkcm1Nb2RlR2V0Q29u bmVjdG9yKGRybV9mZCwKPiArCQkJCQkJCWRybV9yZXMtPmNvbm5lY3RvcnNbaV0pOwo+ICsKPiAr CWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiArCj4gKwlidWZtZ3IgPSBkcm1faW50 ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Cj4gKwlpZ3RfYXNzZXJ0KGJ1Zm1ncik7 Cj4gKwlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKPiArCj4gKwlw aXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoMCwgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZWFyZG93bl9lbnZpcm9ubWVudCh2b2lkKQo+ICt7 Cj4gKwlpbnQgaTsKPiArCj4gKwlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4gKwo+ICsJ ZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IGRybV9yZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykKPiArCQlkcm1Nb2RlRnJlZUNvbm5lY3Rv cihkcm1fY29ubmVjdG9yc1tpXSk7Cj4gKwo+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMoZHJtX3Jl cyk7Cj4gKwljbG9zZShkcm1fZmQpOwo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlpZ3Rf Zml4dHVyZQo+ICsJCXNldHVwX2Vudmlyb25tZW50KCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZigi ZHJhdy1tZXRob2QtdGlsZWQiKQo+ICsJCWRyYXdfbWV0aG9kX3N1YnRlc3QoTE9DQUxfSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQpOwo+ICsKPiArCWlndF9maXh0dXJlCj4gKwkJdGVhcmRvd25fZW52 aXJvbm1lbnQoKTsKPiArfQoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==