From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [PATCH] prime_mmap: Add new test for calling mmap() on dma-buf fds Date: Wed, 19 Mar 2014 21:31:35 -0700 Message-ID: <20140320043135.GA1748@bwidawsk.net> References: <1395085415-31292-1-git-send-email-robert.bradford@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bwidawsk.net (bwidawsk.net [166.78.191.112]) by gabe.freedesktop.org (Postfix) with ESMTP id 5628789175 for ; Wed, 19 Mar 2014 21:31:47 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1395085415-31292-1-git-send-email-robert.bradford@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rob Bradford Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXIgMTcsIDIwMTQgYXQgMDc6NDM6MzVQTSArMDAwMCwgUm9iIEJyYWRmb3JkIHdy b3RlOgo+IEZyb206IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KPiAKPiBUaGlz IHRlc3QgaGFzIHRoZSBmb2xsb3dpbmcgc3VidGVzdHM6Cj4gLSB0ZXN0X2NvcnJlY3QgZm9yIGNv cnJlY3RuZXNzIG9mIHRoZSBkYXRhCj4gLSB0ZXN0X21hcF91bm1hcCBjaGVja3MgZm9yIG1hcHBp bmcgaWRlbXBvdGVuY3kKPiAtIHRlc3RfcmVwcmltZSBjaGVja3MgZm9yIGRtYS1idWYgY3JlYXRp b24gaWRlbXBvdGVuY3kKPiAtIHRlc3RfZm9ya2VkIGNoZWNrcyBmb3IgbXVsdGlwcm9jZXNzIGFj Y2Vzcwo+IC0gdGVzdF9yZWZjb3VudGluZyBjaGVja3MgZm9yIGJ1ZmZlciByZWZlcmVuY2UgY291 bnRpbmcKPiAtIHRlc3RfZHVwIGNoYXRzIHRoYXQgZHVwKClpbmcgdGhlIGZkIHdvcmtzCj4gLSB0 ZXN0X2Vycm9ycyBjaGVja3MgdGhlIGVycm9yIHJldHVybiB2YWx1ZXMgZm9yIGZhaWx1cmVzCj4g LSB0ZXN0X2FwZXJ0dXJlX2xpbWl0IHRlc3RzIG11bHRpcGxlIGJ1ZmZlciBjcmVhdGlvbiBhdCB0 aGUgZ3R0IGFwZXJ0dXJlCj4gICBsaW1pdAo+IAo+IFNpZ25lZC1vZmYtYnk6IFJvYiBCcmFkZm9y ZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8 ICAgMSArCj4gIHRlc3RzL3ByaW1lX21tYXAuYyAgICAgfCAzODQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDM4NSBp bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wcmltZV9tbWFwLmMKPiAK PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKPiBpbmRleCA4ODg2NmFjLi5kNjY2MzgxIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY1LDYgKzY1 LDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKPiAgCXBtX2xwc3AgXAo+ICAJcG1fcGM4IFwKPiAgCXBt X3JwcyBcCj4gKwlwcmltZV9tbWFwIFwKPiAgCXByaW1lX3NlbGZfaW1wb3J0IFwKPiAgCXRlbXBs YXRlIFwKPiAgCSQoTlVMTCkKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvcHJpbWVfbW1hcC5jIGIvdGVz dHMvcHJpbWVfbW1hcC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45 NGJhMTkxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL3ByaW1lX21tYXAuYwo+IEBAIC0w LDAgKzEsMzg0IEBACj4gKwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jw b3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ ICsgKiAgICBSb2IgQnJhZGZvcmQgPHJvYkBsaW51eC5pbnRlbC5jb20+Cj4gKyAqCj4gKyAqLwo+ ICsKPiArLyoKPiArICogVGVzdGNhc2U6IENoZWNrIHdoZXRoZXIgbW1hcCgpaW5nIGRtYS1idWYg d29ya3MKPiArICovCj4gKyNkZWZpbmUgX0dOVV9TT1VSQ0UKPiArI2luY2x1ZGUgPHVuaXN0ZC5o Pgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMu aD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5j bHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKwo+ICsjaW5jbHVk ZSAiZHJtLmgiCj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5o Igo+ICsjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJz LmgiCj4gKwo+ICsjZGVmaW5lIEJPX1NJWkUgKDE2KjEwMjQpCj4gKwo+ICtzdGF0aWMgaW50IGZk Owo+ICsKPiArY2hhciBwYXR0ZXJuW10gPSB7MHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCQkg IDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsCj4gKwkJICAweDAwLCAweDAwLCAweGZmLCAweDAwLAo+ ICsJCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZn07Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtmaWxs X2JvKHVpbnQzMl90IGhhbmRsZSwgc2l6ZV90IHNpemUpCj4gK3sKPiArCW9mZl90IGk7Cj4gKwlm b3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSs9c2l6ZW9mKHBhdHRlcm4pKQo+ICsJewo+ICsJCWdlbV93 cml0ZShmZCwgaGFuZGxlLCBpLCBwYXR0ZXJuLCBzaXplb2YocGF0dGVybikpOwo+ICsJfQo+ICt9 CgpJdCdkIHByb2JhYmx5IGJlIG11Y2ggYmV0dGVyIGlkZWEgdG8gbW1hcCB0aGlzLCBlc3BlY2lh bGx5IGlmIHlvdSBldmVyCmludGVuZCB0byB1c2UgYSBsYXJnZXIgYnVmZmVyLgoKPiArCj4gK3N0 YXRpYyBpbnQKPiArcGF0dGVybl9jaGVjayhjaGFyICpwdHIsIHNpemVfdCBzaXplKQo+ICt7Cj4g KwlvZmZfdCBpOwo+ICsJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrPXNpemVvZihwYXR0ZXJuKSkK PiArCXsKPiArCQlpZiAobWVtY21wKHB0ciwgcGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pKSAhPSAw KQo+ICsJCQlyZXR1cm4gMTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQKPiArdGVzdF9jb3JyZWN0KHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ ICsJY2hhciAqcHRyMSwgKnB0cjI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwo+ICsJaGFuZGxl ID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7 Cj4gKwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlKTsKPiAr CWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJLyogQ2hlY2sgY29ycmVjdG5lc3MgdnMg R0VNX01NQVBfR1RUICovCj4gKwlwdHIxID0gZ2VtX21tYXAoZmQsIGhhbmRsZSwgQk9fU0laRSwg UFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gKwlwdHIyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQ Uk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIx ICE9IE1BUF9GQUlMRUQpOwo+ICsJaWd0X2Fzc2VydChwdHIyICE9IE1BUF9GQUlMRUQpOwo+ICsJ aWd0X2Fzc2VydChtZW1jbXAocHRyMSwgcHRyMiwgQk9fU0laRSkgPT0gMCk7Cj4gKwo+ICsJLyog Q2hlY2sgcGF0dGVybiBjb3JyZWN0bmVzcyAqLwo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNr KHB0cjIsIEJPX1NJWkUpID09IDApOwoKVGhpcyBzZWVtcyBleHRyYSBwYXJhbm9pZCwgYnV0IG9r LgoKPiArCj4gKwltdW5tYXAocHRyMSwgQk9fU0laRSk7Cj4gKwltdW5tYXAocHRyMiwgQk9fU0la RSk7Cj4gKwljbG9zZShkbWFfYnVmX2ZkKTsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9tYXBfdW5tYXAodm9pZCkKPiArewo+ICsJaW50 IGRtYV9idWZfZmQ7Cj4gKwljaGFyICpwdHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwo+ICsJ aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwlmaWxsX2JvKGhhbmRsZSwgQk9f U0laRSk7Cj4gKwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxl KTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJcHRyID0gbW1hcChOVUxMLCBC T19TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOwo+ICsJaWd0X2Fz c2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRy LCBCT19TSVpFKSA9PSAwKTsKPiArCj4gKwkvKiBVbm1hcCBhbmQgcmVtYXAgKi8KPiArCW11bm1h cChwdHIsIEJPX1NJWkUpOwo+ICsJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQs IE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZB SUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsK PiArCj4gKwltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCWNsb3NlKGRtYV9idWZfZmQpOwo+ICsJ Z2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICsvKiBwcmltZSBhbmQgdGhlbiB1bnBy aW1lIGFuZCB0aGVuIHByaW1lIGFnYWluIHRoZSBzYW1lIGhhbmRsZSAqLwo+ICtzdGF0aWMgdm9p ZAo+ICt0ZXN0X3JlcHJpbWUodm9pZCkKPiArewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFy ICpwdHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgQk9fU0laRSk7Cj4gKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7Cj4gKwo+ICsJZG1hX2J1 Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlKTsKPiArCWlndF9hc3NlcnQoZXJy bm8gPT0gMCk7Cj4gKwo+ICsJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1B UF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxF RCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKPiAr Cj4gKwljbG9zZSAoZG1hX2J1Zl9mZCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRy LCBCT19TSVpFKSA9PSAwKTsKPiArCW11bm1hcChwdHIsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9i dWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlwdHIgPSBtbWFwKE5V TEwsIEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7Cj4gKwlp Z3RfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKPiArCWlndF9hc3NlcnQocGF0dGVybl9jaGVj ayhwdHIsIEJPX1NJWkUpID09IDApOwo+ICsKPiArCW11bm1hcChwdHIsIEJPX1NJWkUpOwo+ICsJ Y2xvc2UoZG1hX2J1Zl9mZCk7Cj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cj4gK30KCkknbSBu b3QgcmVhbGx5IHN1cmUgaG93IHVzZWZ1bCB0aGlzIHRlc3QgaXMgLSBidXQgSSBkb24ndCBrbm93 IGFsbCB0aGF0Cm11Y2ggYWJvdXQgaG93IHRoZSBpbnRlcm5hbHMgd29yay4KCj4gKwo+ICsvKiBt YXAgZnJvbSBhbm90aGVyIHByb2Nlc3MgKi8KPiArc3RhdGljIHZvaWQKPiArdGVzdF9mb3JrZWQo dm9pZCkKPiArewo+ICsJaW50IGRtYV9idWZfZmQ7Cj4gKwljaGFyICpwdHI7Cj4gKwl1aW50MzJf dCBoYW5kbGU7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwlm aWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7Cj4gKwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRs ZV90b19mZChmZCwgaGFuZGxlKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwo+ICsJ aWd0X2ZvcmsoY2hpbGRubywgMSkgewo+ICsJCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJP VF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCQlpZ3RfYXNzZXJ0KHB0ciAh PSBNQVBfRkFJTEVEKTsKPiArCQlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpF KSA9PSAwKTsKPiArCQltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCQljbG9zZShkbWFfYnVmX2Zk KTsKPiArCX0KPiArCWNsb3NlKGRtYV9idWZfZmQpOwo+ICsJaWd0X3dhaXRjaGlsZHJlbigpOwo+ ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0 X3JlZmNvdW50aW5nKHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ICsJY2hhciAqcHRy Owo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJP X1NJWkUpOwo+ICsJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQg PSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09 IDApOwo+ICsJLyogQ2xvc2UgZ2VtIG9iamVjdCBiZWZvcmUgbWFwcGluZyAqLwo+ICsJZ2VtX2Ns b3NlKGZkLCBoYW5kbGUpOwo+ICsKPiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9S RUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCWlndF9hc3NlcnQocHRyICE9IE1B UF9GQUlMRUQpOwo+ICsJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0g MCk7Cj4gKwltdW5tYXAocHRyLCBCT19TSVpFKTsKPiArCWNsb3NlIChkbWFfYnVmX2ZkKTsKPiAr fQo+ICsKPiArLyogZHVwIGJlZm9yZSBtbWFwICovCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfZHVw KHZvaWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkOwo+ICsJY2hhciAqcHRyOwo+ICsJdWludDMy X3QgaGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJ ZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQgPSBkdXAocHJpbWVf aGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4g Kwo+ICsJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRt YV9idWZfZmQsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3Rf YXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKPiArCW11bm1hcChwdHIs IEJPX1NJWkUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICsJY2xvc2UgKGRtYV9idWZf ZmQpOwo+ICt9Cj4gKwo+ICsKPiArLyogVXNlZCBmb3IgZXJyb3IgY2FzZSB0ZXN0aW5nIHRvIGF2 b2lkIHdyYXBwZXIgKi8KPiArc3RhdGljIGludCBwcmltZV9oYW5kbGVfdG9fZmRfbm9fYXNzZXJ0 KHVpbnQzMl90IGhhbmRsZSwgaW50ICpmZF9vdXQpCj4gK3sKPiArCXN0cnVjdCBkcm1fcHJpbWVf aGFuZGxlIGFyZ3M7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWFyZ3MuaGFuZGxlID0gaGFuZGxlOwo+ ICsJYXJncy5mbGFncyA9IERSTV9DTE9FWEVDOwo+ICsJYXJncy5mZCA9IC0xOwo+ICsKPiArCXJl dCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfUFJJTUVfSEFORExFX1RPX0ZELCAmYXJncyk7Cj4g Kwo+ICsJKmZkX291dCA9IGFyZ3MuZmQ7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQKPiArdGVzdF9lcnJvcnModm9pZCkKPiArewo+ICsJaW50IGRtYV9idWZfZmQ7 Cj4gKwljaGFyICpwdHI7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwo+ICsJLyogQ2xvc2UgZ2Vt IG9iamVjdCBiZWZvcmUgcHJpbWluZyAqLwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9f U0laRSk7Cj4gKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7Cj4gKwlnZW1fY2xvc2UoZmQsIGhh bmRsZSk7Cj4gKwlwcmltZV9oYW5kbGVfdG9fZmRfbm9fYXNzZXJ0KGhhbmRsZSwgJmRtYV9idWZf ZmQpOwo+ICsJaWd0X2Fzc2VydChkbWFfYnVmX2ZkID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7 Cj4gKwllcnJubyA9IDA7Cj4gKwo+ICsJLyogY2xvc2UgZmQgYmVmb3JlIG1hcHBpbmcgKi8KPiAr CWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJZmlsbF9ibyhoYW5kbGUsIEJP X1NJWkUpOwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlKTsK PiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwljbG9zZShkbWFfYnVmX2ZkKTsKPiArCXB0 ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2Zk LCAwKTsKPiArCWlndF9hc3NlcnQocHRyID09IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUJBREYp Owo+ICsJZXJybm8gPSAwOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICsKPiArCS8qIE1h cCB0b28gYmlnICovCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCWZp bGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKPiArCWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9f ZmQoZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ICsJcHRyID0gbW1h cChOVUxMLCBCT19TSVpFICogMiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAw KTsKPiArCWlndF9hc3NlcnQocHRyID09IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUlOVkFMKTsK PiArCWVycm5vID0gMDsKPiArCWNsb3NlKGRtYV9idWZfZmQpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBo YW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X2FwZXJ0dXJlX2xpbWl0KHZv aWQpCj4gK3sKPiArCWludCBkbWFfYnVmX2ZkMSwgZG1hX2J1Zl9mZDI7Cj4gKwljaGFyICpwdHIx LCAqcHRyMjsKPiArCXVpbnQzMl90IGhhbmRsZTEsIGhhbmRsZTI7Cj4gKwkvKiBUd28gYnVmZmVy cyB0aGUgc3VtIG9mIHdoaWNoID4gbWFwcGFibGUgYXBlcnR1cmUgKi8KPiArCXVpbnQ2NF90IHNp emUxID0gKGdlbV9tYXBwYWJsZV9hcGVydHVyZV9zaXplKCkgKiA3KSAvIDg7Cj4gKwl1aW50NjRf dCBzaXplMiA9IChnZW1fbWFwcGFibGVfYXBlcnR1cmVfc2l6ZSgpICogMykgLyA4Owo+ICsKPiAr CWhhbmRsZTEgPSBnZW1fY3JlYXRlKGZkLCBzaXplMSk7Cj4gKwlmaWxsX2JvKGhhbmRsZTEsIEJP X1NJWkUpOwo+ICsKPiArCWRtYV9idWZfZmQxID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5k bGUxKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7Cj4gKwlwdHIxID0gbW1hcChOVUxMLCBz aXplMSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkMSwgMCk7Cj4gKwlpZ3RfYXNz ZXJ0KHB0cjEgIT0gTUFQX0ZBSUxFRCk7Cj4gKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRy MSwgQk9fU0laRSkgPT0gMCk7Cj4gKwo+ICsJaGFuZGxlMiA9IGdlbV9jcmVhdGUoZmQsIHNpemUx KTsKPiArCWZpbGxfYm8oaGFuZGxlMiwgQk9fU0laRSk7Cj4gKwlkbWFfYnVmX2ZkMiA9IHByaW1l X2hhbmRsZV90b19mZChmZCwgaGFuZGxlMik7Cj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOwo+ ICsJcHRyMiA9IG1tYXAoTlVMTCwgc2l6ZTIsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1 Zl9mZDIsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIyICE9IE1BUF9GQUlMRUQpOwo+ICsJaWd0X2Fz c2VydChwYXR0ZXJuX2NoZWNrKHB0cjIsIEJPX1NJWkUpID09IDApOwo+ICsKPiArCWlndF9hc3Nl cnQobWVtY21wKHB0cjEsIHB0cjIsIEJPX1NJWkUpID09IDApOwo+ICsKPiArCW11bm1hcChwdHIx LCBzaXplMSk7Cj4gKwltdW5tYXAocHRyMiwgc2l6ZTIpOwo+ICsJY2xvc2UoZG1hX2J1Zl9mZDEp Owo+ICsJY2xvc2UoZG1hX2J1Zl9mZDIpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUxKTsKPiAr CWdlbV9jbG9zZShmZCwgaGFuZGxlMik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArY2hlY2tf Zm9yX2RtYV9idWZfbW1hcCh2b2lkKQo+ICt7Cj4gKwlpbnQgZG1hX2J1Zl9mZDsKPiArCWNoYXIg KnB0cjsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCWludCByZXQgPSAxOwo+ICsKPiArCWhhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRs ZV90b19mZChmZCwgaGFuZGxlKTsKPiArCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9S RUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKPiArCWlmIChwdHIgIT0gTUFQX0ZBSUxF RCkKPiArCQlyZXQgPSAwOwo+ICsJbXVubWFwKHB0ciwgQk9fU0laRSk7Cj4gKwlnZW1fY2xvc2Uo ZmQsIGhhbmRsZSk7Cj4gKwljbG9zZSAoZG1hX2J1Zl9mZCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlzdHJ1Y3Qgewo+ICsJCWNvbnN0IGNoYXIgKm5hbWU7 Cj4gKwkJdm9pZCAoKmZuKSh2b2lkKTsKPiArCX0gdGVzdHNbXSA9IHsKPiArCQl7ICJ0ZXN0X2Nv cnJlY3QiLCB0ZXN0X2NvcnJlY3QgfSwKPiArCQl7ICJ0ZXN0X21hcF91bm1hcCIsIHRlc3RfbWFw X3VubWFwIH0sCj4gKwkJeyAidGVzdF9yZXByaW1lIiwgdGVzdF9yZXByaW1lIH0sCj4gKwkJeyAi dGVzdF9mb3JrZWQiLCB0ZXN0X2ZvcmtlZCB9LAo+ICsJCXsgInRlc3RfcmVmY291bnRpbmciLCB0 ZXN0X3JlZmNvdW50aW5nIH0sCj4gKwkJeyAidGVzdF9kdXAiLCB0ZXN0X2R1cCB9LAo+ICsJCXsg InRlc3RfZXJyb3JzIiwgdGVzdF9lcnJvcnMgfSwKPiArCQl7ICJ0ZXN0X2FwZXJ0dXJlX2xpbWl0 IiwgdGVzdF9hcGVydHVyZV9saW1pdCB9LAo+ICsJfTsKPiArCWludCBpOwo+ICsKPiArCWlndF9m aXh0dXJlIHsKPiArCQlmZCA9IGRybV9vcGVuX2FueSgpOwo+ICsJCWVycm5vID0gMDsKPiArCX0K PiArCj4gKwlpZ3Rfc2tpcF9vbigoY2hlY2tfZm9yX2RtYV9idWZfbW1hcCgpICE9IDApKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykgewo+ICsJCWlndF9z dWJ0ZXN0KHRlc3RzW2ldLm5hbWUpCj4gKwkJCXRlc3RzW2ldLmZuKCk7Cj4gKwl9Cj4gKwo+ICsJ aWd0X2ZpeHR1cmUKPiArCQljbG9zZShmZCk7Cj4gK30KPiAtLSAKCmxndG0uIFB1dCB0aGUgY29t bWl0IG1lc3NhZ2UgaW4gdGhlIHRlc3QgZGVzY3JpcHRpb24gYW5kIGNhbGwgaXQKUmV2aWV3ZWQt Ynk6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KCkknbSBwcmV0dHkgaW1wcmVzc2Vk IHlvdSB1c2VkIGFsbCB0aGUgaWd0XypfZm9vLgoKLS0gCkJlbiBXaWRhd3NreSwgSW50ZWwgT3Bl biBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK