From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/7] prime_mmap: Add new test for calling mmap() on dma-buf fds Date: Thu, 13 Aug 2015 09:04:11 +0200 Message-ID: <20150813070411.GV17734@phenom.ffwll.local> References: <1439422160-20148-1-git-send-email-tiago.vignatti@intel.com> <1439422160-20148-6-git-send-email-tiago.vignatti@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTPS id 14E6F6E33D for ; Thu, 13 Aug 2015 00:04:16 -0700 (PDT) Received: by wicne3 with SMTP id ne3so246621465wic.1 for ; Thu, 13 Aug 2015 00:04:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1439422160-20148-6-git-send-email-tiago.vignatti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tiago Vignatti Cc: daniel.thompson@linaro.org, daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, Rob Bradford , dri-devel@lists.freedesktop.org, sumit.semwal@linaro.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBBdWcgMTIsIDIwMTUgYXQgMDg6Mjk6MTRQTSAtMDMwMCwgVGlhZ28gVmlnbmF0dGkg d3JvdGU6Cj4gRnJvbTogUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgo+IAo+IFRo aXMgdGVzdCBoYXMgdGhlIGZvbGxvd2luZyBzdWJ0ZXN0czoKPiAgLSB0ZXN0X2NvcnJlY3QgZm9y IGNvcnJlY3RuZXNzIG9mIHRoZSBkYXRhCj4gIC0gdGVzdF9tYXBfdW5tYXAgY2hlY2tzIGZvciBt YXBwaW5nIGlkZW1wb3RlbmN5Cj4gIC0gdGVzdF9yZXByaW1lIGNoZWNrcyBmb3IgZG1hLWJ1ZiBj cmVhdGlvbiBpZGVtcG90ZW5jeQo+ICAtIHRlc3RfZm9ya2VkIGNoZWNrcyBmb3IgbXVsdGlwcm9j ZXNzIGFjY2Vzcwo+ICAtIHRlc3RfcmVmY291bnRpbmcgY2hlY2tzIGZvciBidWZmZXIgcmVmZXJl bmNlIGNvdW50aW5nCj4gIC0gdGVzdF9kdXAgY2hhdHMgdGhhdCBkdXAoKWluZyB0aGUgZmQgd29y a3MKPiAgLSB0ZXN0X2Vycm9ycyBjaGVja3MgdGhlIGVycm9yIHJldHVybiB2YWx1ZXMgZm9yIGZh aWx1cmVzCj4gIC0gdGVzdF9hcGVydHVyZV9saW1pdCB0ZXN0cyBtdWx0aXBsZSBidWZmZXIgY3Jl YXRpb24gYXQgdGhlIGd0dCBhcGVydHVyZQo+ICAgIGxpbWl0Cj4gCj4gU2lnbmVkLW9mZi1ieTog Um9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFRpYWdv IFZpZ25hdHRpIDx0aWFnby52aWduYXR0aUBpbnRlbC5jb20+Cj4gLS0tCj4gIHRlc3RzL01ha2Vm aWxlLnNvdXJjZXMgfCAgIDEgKwo+ICB0ZXN0cy9wcmltZV9tbWFwLmMgICAgIHwgMzgzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMiBmaWxlcyBj aGFuZ2VkLCAzODQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcHJp bWVfbW1hcC5jCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0 cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggYzk0NzE0Yi4uNWIyMDcyZSAxMDA2NDQKPiAtLS0g YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IEBAIC05MCw2ICs5MCw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gIAlwbV9ycHMgXAo+ICAJcG1f cmM2X3Jlc2lkZW5jeSBcCj4gIAlwbV9zc2V1IFwKPiArCXByaW1lX21tYXAgXAo+ICAJcHJpbWVf c2VsZl9pbXBvcnQgXAo+ICAJdGVtcGxhdGUgXAo+ICAJJChOVUxMKQo+IGRpZmYgLS1naXQgYS90 ZXN0cy9wcmltZV9tbWFwLmMgYi90ZXN0cy9wcmltZV9tbWFwLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLjRkYzIwNTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVz dHMvcHJpbWVfbW1hcC5jCj4gQEAgLTAsMCArMSwzODMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICoKPiArICogQXV0aG9yczoKPiArICogICAgUm9iIEJyYWRmb3JkIDxyb2IgYXQgbGludXguaW50 ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKy8qCj4gKyAqIFRlc3RjYXNlOiBDaGVjayB3aGV0 aGVyIG1tYXAoKWluZyBkbWEtYnVmIHdvcmtzCj4gKyAqLwo+ICsjZGVmaW5lIF9HTlVfU09VUkNF Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVk ZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4K PiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8cHRo cmVhZC5oPgo+ICsKPiArI2luY2x1ZGUgImRybS5oIgo+ICsjaW5jbHVkZSAiaTkxNV9kcm0uaCIK PiArI2luY2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCj4gKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICsKPiArI2RlZmluZSBCT19TSVpFICgxNioxMDI0 KQo+ICsKPiArc3RhdGljIGludCBmZDsKPiArCj4gK2NoYXIgcGF0dGVybltdID0gezB4ZmYsIDB4 MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweGZmLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgw MCwgMHhmZiwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmZ9Owo+ICsKPiArc3RhdGlj IHZvaWQKPiArZmlsbF9ibyh1aW50MzJfdCBoYW5kbGUsIHNpemVfdCBzaXplKQo+ICt7Cj4gKwlv ZmZfdCBpOwo+ICsJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrPXNpemVvZihwYXR0ZXJuKSkKPiAr CXsKPiArCQlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgaSwgcGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4p KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtwYXR0ZXJuX2NoZWNrKGNoYXIgKnB0 ciwgc2l6ZV90IHNpemUpCj4gK3sKPiArCW9mZl90IGk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6 ZTsgaSs9c2l6ZW9mKHBhdHRlcm4pKQo+ICsJewo+ICsJCWlmIChtZW1jbXAocHRyLCBwYXR0ZXJu LCBzaXplb2YocGF0dGVybikpICE9IDApCj4gKwkJCXJldHVybiAxOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X2NvcnJlY3Qodm9pZCkKPiAr ewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFyICpwdHIxLCAqcHRyMjsKPiArCXVpbnQzMl90 IGhhbmRsZTsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCWZp bGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKPiArCj4gKwlkbWFfYnVmX2ZkID0gcHJpbWVfaGFuZGxl X3RvX2ZkKGZkLCBoYW5kbGUpOwo+ICsJaWd0X2Fzc2VydChlcnJubyA9PSAwKTsKPiArCj4gKwkv KiBDaGVjayBjb3JyZWN0bmVzcyB2cyBHRU1fTU1BUF9HVFQgKi8KPiArCXB0cjEgPSBnZW1fbW1h cChmZCwgaGFuZGxlLCBCT19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCXB0cjIg PSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwg MCk7Cj4gKwlpZ3RfYXNzZXJ0KHB0cjEgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHB0 cjIgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KG1lbWNtcChwdHIxLCBwdHIyLCBCT19T SVpFKSA9PSAwKTsKPiArCj4gKwkvKiBDaGVjayBwYXR0ZXJuIGNvcnJlY3RuZXNzICovCj4gKwlp Z3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyMiwgQk9fU0laRSkgPT0gMCk7Cj4gKwo+ICsJbXVu bWFwKHB0cjEsIEJPX1NJWkUpOwo+ICsJbXVubWFwKHB0cjIsIEJPX1NJWkUpOwo+ICsJY2xvc2Uo ZG1hX2J1Zl9mZCk7Cj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkCj4gK3Rlc3RfbWFwX3VubWFwKHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ ICsJY2hhciAqcHRyOwo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ICsKPiAr CWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNz ZXJ0KGVycm5vID09IDApOwo+ICsKPiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9S RUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCWlndF9hc3NlcnQocHRyICE9IE1B UF9GQUlMRUQpOwo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0g MCk7Cj4gKwo+ICsJLyogVW5tYXAgYW5kIHJlbWFwICovCj4gKwltdW5tYXAocHRyLCBCT19TSVpF KTsKPiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBk bWFfYnVmX2ZkLCAwKTsKPiArCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwo+ICsJaWd0 X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0gMCk7Cj4gKwo+ICsJbXVubWFw KHB0ciwgQk9fU0laRSk7Cj4gKwljbG9zZShkbWFfYnVmX2ZkKTsKPiArCWdlbV9jbG9zZShmZCwg aGFuZGxlKTsKPiArfQo+ICsKPiArLyogcHJpbWUgYW5kIHRoZW4gdW5wcmltZSBhbmQgdGhlbiBw cmltZSBhZ2FpbiB0aGUgc2FtZSBoYW5kbGUgKi8KPiArc3RhdGljIHZvaWQKPiArdGVzdF9yZXBy aW1lKHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ICsJY2hhciAqcHRyOwo+ICsJdWlu dDMyX3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ ICsJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQgPSBwcmltZV9o YW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ICsK PiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFf YnVmX2ZkLCAwKTsKPiArCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwo+ICsJaWd0X2Fz c2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0gMCk7Cj4gKwo+ICsJY2xvc2UgKGRt YV9idWZfZmQpOwo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0g MCk7Cj4gKwltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCj4gKwlkbWFfYnVmX2ZkID0gcHJpbWVf aGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOwo+ICsJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQ Uk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIg IT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpF KSA9PSAwKTsKPiArCj4gKwltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCWNsb3NlKGRtYV9idWZf ZmQpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICsvKiBtYXAgZnJvbSBh bm90aGVyIHByb2Nlc3MgKi8KPiArc3RhdGljIHZvaWQKPiArdGVzdF9mb3JrZWQodm9pZCkKPiAr ewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFyICpwdHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7 Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwlmaWxsX2JvKGhh bmRsZSwgQk9fU0laRSk7Cj4gKwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChm ZCwgaGFuZGxlKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJaWd0X2Zvcmso Y2hpbGRubywgMSkgewo+ICsJCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBN QVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCQlpZ3RfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJ TEVEKTsKPiArCQlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsK PiArCQltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCQljbG9zZShkbWFfYnVmX2ZkKTsKPiArCX0K PiArCWNsb3NlKGRtYV9idWZfZmQpOwo+ICsJaWd0X3dhaXRjaGlsZHJlbigpOwo+ICsJZ2VtX2Ns b3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3JlZmNvdW50 aW5nKHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ICsJY2hhciAqcHRyOwo+ICsJdWlu dDMyX3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ ICsJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQgPSBwcmltZV9o YW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ICsJ LyogQ2xvc2UgZ2VtIG9iamVjdCBiZWZvcmUgbWFwcGluZyAqLwo+ICsJZ2VtX2Nsb3NlKGZkLCBo YW5kbGUpOwo+ICsKPiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBf U0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQp Owo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0gMCk7Cj4gKwlt dW5tYXAocHRyLCBCT19TSVpFKTsKPiArCWNsb3NlIChkbWFfYnVmX2ZkKTsKPiArfQo+ICsKPiAr LyogZHVwIGJlZm9yZSBtbWFwICovCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfZHVwKHZvaWQpCj4g K3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ICsJY2hhciAqcHRyOwo+ICsJdWludDMyX3QgaGFuZGxl Owo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJZmlsbF9ibyho YW5kbGUsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQgPSBkdXAocHJpbWVfaGFuZGxlX3Rv X2ZkKGZkLCBoYW5kbGUpKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJcHRy ID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQs IDApOwo+ICsJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHBh dHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKPiArCW11bm1hcChwdHIsIEJPX1NJWkUp Owo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICsJY2xvc2UgKGRtYV9idWZfZmQpOwo+ICt9 Cj4gKwo+ICsKPiArLyogVXNlZCBmb3IgZXJyb3IgY2FzZSB0ZXN0aW5nIHRvIGF2b2lkIHdyYXBw ZXIgKi8KPiArc3RhdGljIGludCBwcmltZV9oYW5kbGVfdG9fZmRfbm9fYXNzZXJ0KHVpbnQzMl90 IGhhbmRsZSwgaW50ICpmZF9vdXQpCj4gK3sKPiArCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIGFy Z3M7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWFyZ3MuaGFuZGxlID0gaGFuZGxlOwo+ICsJYXJncy5m bGFncyA9IERSTV9DTE9FWEVDOwo+ICsJYXJncy5mZCA9IC0xOwo+ICsKPiArCXJldCA9IGRybUlv Y3RsKGZkLCBEUk1fSU9DVExfUFJJTUVfSEFORExFX1RPX0ZELCAmYXJncyk7Cj4gKwo+ICsJKmZk X291dCA9IGFyZ3MuZmQ7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQKPiArdGVzdF9lcnJvcnModm9pZCkKPiArewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFy ICpwdHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwo+ICsJLyogQ2xvc2UgZ2VtIG9iamVjdCBi ZWZvcmUgcHJpbWluZyAqLwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4g KwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7Cj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cj4g KwlwcmltZV9oYW5kbGVfdG9fZmRfbm9fYXNzZXJ0KGhhbmRsZSwgJmRtYV9idWZfZmQpOwo+ICsJ aWd0X2Fzc2VydChkbWFfYnVmX2ZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cj4gKwllcnJu byA9IDA7Cj4gKwo+ICsJLyogY2xvc2UgZmQgYmVmb3JlIG1hcHBpbmcgKi8KPiArCWhhbmRsZSA9 IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlKTsKPiArCWlndF9h c3NlcnQoZXJybm8gPT0gMCk7Cj4gKwljbG9zZShkbWFfYnVmX2ZkKTsKPiArCXB0ciA9IG1tYXAo TlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiAr CWlndF9hc3NlcnQocHRyID09IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUJBREYpOwo+ICsJZXJy bm8gPSAwOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICsKPiArCS8qIE1hcCB0b28gYmln ICovCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCWZpbGxfYm8oaGFu ZGxlLCBCT19TSVpFKTsKPiArCWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhh bmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ICsJcHRyID0gbW1hcChOVUxMLCBC T19TSVpFICogMiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCWln dF9hc3NlcnQocHRyID09IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUlOVkFMKTsKPiArCWVycm5v ID0gMDsKPiArCWNsb3NlKGRtYV9idWZfZmQpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwoK VGhhdCBvbmx5IGNoZWNrcyBmb3Igb25lIG9mIHRoZSBjb25kaXRpb25zLCB0cnlpbmcgdG8gbWFw IHNvbWV0aGluZwpvZmZzZXQvb3ZlcmxhcHBpbmcgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBidXQg c21hbGwgZW5vdWdoIG5lZWRzIHRvIGJlCnRlc3RlZCBzZXBhcmF0ZWx5LgoKQWxzbyBJIHRoaW5r IGEgdGVzdGNhc2UgZm9yIGludmFsaWQgYnVmZmVyMmZkIGZsYWdzIHdvdWxkIGJlIGdvb2QsIGp1 c3QKZm9yIGNvbXBsZXRlbmVzcyAtIHdlIHNlZW0gdG8gYmUgbWlzc2luZyB0aGF0IG9uZS4KLURh bmllbAoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9hcGVydHVyZV9saW1pdCh2b2lk KQo+ICt7Cj4gKwlpbnQgZG1hX2J1Zl9mZDEsIGRtYV9idWZfZmQyOwo+ICsJY2hhciAqcHRyMSwg KnB0cjI7Cj4gKwl1aW50MzJfdCBoYW5kbGUxLCBoYW5kbGUyOwo+ICsJLyogVHdvIGJ1ZmZlcnMg dGhlIHN1bSBvZiB3aGljaCA+IG1hcHBhYmxlIGFwZXJ0dXJlICovCj4gKwl1aW50NjRfdCBzaXpl MSA9IChnZW1fbWFwcGFibGVfYXBlcnR1cmVfc2l6ZSgpICogNykgLyA4Owo+ICsJdWludDY0X3Qg c2l6ZTIgPSAoZ2VtX21hcHBhYmxlX2FwZXJ0dXJlX3NpemUoKSAqIDMpIC8gODsKPiArCj4gKwlo YW5kbGUxID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZTEpOwo+ICsJZmlsbF9ibyhoYW5kbGUxLCBCT19T SVpFKTsKPiArCj4gKwlkbWFfYnVmX2ZkMSA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxl MSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ICsJcHRyMSA9IG1tYXAoTlVMTCwgc2l6 ZTEsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZDEsIDApOwo+ICsJaWd0X2Fzc2Vy dChwdHIxICE9IE1BUF9GQUlMRUQpOwo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0cjEs IEJPX1NJWkUpID09IDApOwo+ICsKPiArCWhhbmRsZTIgPSBnZW1fY3JlYXRlKGZkLCBzaXplMSk7 Cj4gKwlmaWxsX2JvKGhhbmRsZTIsIEJPX1NJWkUpOwo+ICsJZG1hX2J1Zl9mZDIgPSBwcmltZV9o YW5kbGVfdG9fZmQoZmQsIGhhbmRsZTIpOwo+ICsJaWd0X2Fzc2VydChlcnJubyA9PSAwKTsKPiAr CXB0cjIgPSBtbWFwKE5VTEwsIHNpemUyLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZf ZmQyLCAwKTsKPiArCWlndF9hc3NlcnQocHRyMiAhPSBNQVBfRkFJTEVEKTsKPiArCWlndF9hc3Nl cnQocGF0dGVybl9jaGVjayhwdHIyLCBCT19TSVpFKSA9PSAwKTsKPiArCj4gKwlpZ3RfYXNzZXJ0 KG1lbWNtcChwdHIxLCBwdHIyLCBCT19TSVpFKSA9PSAwKTsKPiArCj4gKwltdW5tYXAocHRyMSwg c2l6ZTEpOwo+ICsJbXVubWFwKHB0cjIsIHNpemUyKTsKPiArCWNsb3NlKGRtYV9idWZfZmQxKTsK PiArCWNsb3NlKGRtYV9idWZfZmQyKTsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlMSk7Cj4gKwln ZW1fY2xvc2UoZmQsIGhhbmRsZTIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2NoZWNrX2Zv cl9kbWFfYnVmX21tYXAodm9pZCkKPiArewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFyICpw dHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwlpbnQgcmV0ID0gMTsKPiArCj4gKwloYW5kbGUg PSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVf dG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVB RCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7Cj4gKwlpZiAocHRyICE9IE1BUF9GQUlMRUQp Cj4gKwkJcmV0ID0gMDsKPiArCW11bm1hcChwdHIsIEJPX1NJWkUpOwo+ICsJZ2VtX2Nsb3NlKGZk LCBoYW5kbGUpOwo+ICsJY2xvc2UgKGRtYV9idWZfZmQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiAraWd0X21haW4KPiArewo+ICsJc3RydWN0IHsKPiArCQljb25zdCBjaGFyICpuYW1lOwo+ ICsJCXZvaWQgKCpmbikodm9pZCk7Cj4gKwl9IHRlc3RzW10gPSB7Cj4gKwkJeyAidGVzdF9jb3Jy ZWN0IiwgdGVzdF9jb3JyZWN0IH0sCj4gKwkJeyAidGVzdF9tYXBfdW5tYXAiLCB0ZXN0X21hcF91 bm1hcCB9LAo+ICsJCXsgInRlc3RfcmVwcmltZSIsIHRlc3RfcmVwcmltZSB9LAo+ICsJCXsgInRl c3RfZm9ya2VkIiwgdGVzdF9mb3JrZWQgfSwKPiArCQl7ICJ0ZXN0X3JlZmNvdW50aW5nIiwgdGVz dF9yZWZjb3VudGluZyB9LAo+ICsJCXsgInRlc3RfZHVwIiwgdGVzdF9kdXAgfSwKPiArCQl7ICJ0 ZXN0X2Vycm9ycyIsIHRlc3RfZXJyb3JzIH0sCj4gKwkJeyAidGVzdF9hcGVydHVyZV9saW1pdCIs IHRlc3RfYXBlcnR1cmVfbGltaXQgfSwKPiArCX07Cj4gKwlpbnQgaTsKPiArCj4gKwlpZ3RfZml4 dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Blbl9hbnkoKTsKPiArCQllcnJubyA9IDA7Cj4gKwl9Cj4g Kwo+ICsJaWd0X3NraXBfb24oKGNoZWNrX2Zvcl9kbWFfYnVmX21tYXAoKSAhPSAwKSk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHsKPiArCQlpZ3Rfc3Vi dGVzdCh0ZXN0c1tpXS5uYW1lKQo+ICsJCQl0ZXN0c1tpXS5mbigpOwo+ICsJfQo+ICsKPiArCWln dF9maXh0dXJlCj4gKwkJY2xvc2UoZmQpOwo+ICt9Cj4gLS0gCj4gMi4xLjAKPiAKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=