From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiago Vignatti Subject: [PATCH igt v7 2/6] prime_mmap: Add new test for calling mmap() on dma-buf fds Date: Tue, 22 Dec 2015 19:36:50 -0200 Message-ID: <1450820214-12509-8-git-send-email-tiago.vignatti@intel.com> References: <1450820214-12509-1-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id EA6256E3D2 for ; Tue, 22 Dec 2015 13:37:24 -0800 (PST) In-Reply-To: <1450820214-12509-1-git-send-email-tiago.vignatti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: daniel.thompson@linaro.org, marcheu@google.com, daniel.vetter@ffwll.ch, Rob Bradford , thellstrom@vmware.com, jglisse@redhat.com, reveman@google.com List-Id: dri-devel@lists.freedesktop.org RnJvbTogUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgoKVGhpcyB0ZXN0IGhhcyB0 aGUgZm9sbG93aW5nIHN1YnRlc3RzOgogLSB0ZXN0X2NvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIG9m IHRoZSBkYXRhCiAtIHRlc3RfbWFwX3VubWFwIGNoZWNrcyBmb3IgbWFwcGluZyBpZGVtcG90ZW5j eQogLSB0ZXN0X3JlcHJpbWUgY2hlY2tzIGZvciBkbWEtYnVmIGNyZWF0aW9uIGlkZW1wb3RlbmN5 CiAtIHRlc3RfZm9ya2VkIGNoZWNrcyBmb3IgbXVsdGlwcm9jZXNzIGFjY2VzcwogLSB0ZXN0X3Jl ZmNvdW50aW5nIGNoZWNrcyBmb3IgYnVmZmVyIHJlZmVyZW5jZSBjb3VudGluZwogLSB0ZXN0X2R1 cCBjaGVja3MgdGhhdCBkdXAoKWluZyB0aGUgZmQgd29ya3MKIC0gdGVzdF91c2VycHRyIG1ha2Ug c3VyZSBpdCBmYWlscyB3aGVuIG1tYXBpbmcgZHVlIHRoZSBsYWNrIG9mIG9iai0+YmFzZS5maWxw CiAgIGluIGEgdXNlcnB0ci4KIC0gdGVzdF9lcnJvcnMgY2hlY2tzIHRoZSBlcnJvciByZXR1cm4g dmFsdWVzIGZvciBmYWlsdXJlcwogLSB0ZXN0X2FwZXJ0dXJlX2xpbWl0IHRlc3RzIG11bHRpcGxl IGJ1ZmZlciBjcmVhdGlvbiBhdCB0aGUgZ3R0IGFwZXJ0dXJlCiAgIGxpbWl0Cgp2MiAoVGlhZ28p OiBSZW1vdmVkIHBhdHRlcm5fY2hlY2soKSwgd2hpY2ggd2FzIHdhbGtpbmcgdGhyb3VnaCBhIHVz ZWxlc3MKaXRlcmF0b3IuIFJlbW92ZWQgc3VwZXJmbHVvdXMgUFJPVF9XUklURSBmcm9tIGdlbV9t bWFwLCBpbiB0ZXN0X2NvcnJlY3QoKS4KQWRkZWQgYmluYXJ5IGZpbGUgdG8gLmdpdGlnbm9yZQp2 MyAoVGlhZ28pOiBzcXVhc2ggcGF0Y2ggInByaW1lX21tYXA6IFRlc3QgZm9yIHVzZXJwdHIgbW1h cCIgaW50byB0aGlzIG9uZS4KdjQgKFRpYWdvKTogdXNlIHN5bmNocm9uaXplZCB1c2VycHRyIGZv ciB0ZXN0aW5nLiBBZGQgdGVzdCBmb3IgYnVmZmVyCm92ZXJsYXBwaW5nLgoKU2lnbmVkLW9mZi1i eTogUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBUaWFn byBWaWduYXR0aSA8dGlhZ28udmlnbmF0dGlAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxl LnNvdXJjZXMgfCAgIDEgKwogdGVzdHMvcHJpbWVfbW1hcC5jICAgICB8IDQxNyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQs IDQxOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcHJpbWVfbW1hcC5j CgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKaW5kZXggZDU5NDAzOC4uNzVmM2NiMCAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC05Niw2ICs5Niw3IEBAIFRF U1RTX3Byb2dzX00gPSBcCiAJcG1fcnBzIFwKIAlwbV9yYzZfcmVzaWRlbmN5IFwKIAlwbV9zc2V1 IFwKKwlwcmltZV9tbWFwIFwKIAlwcmltZV9zZWxmX2ltcG9ydCBcCiAJdGVtcGxhdGUgXAogCSQo TlVMTCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3ByaW1lX21tYXAuYyBiL3Rlc3RzL3ByaW1lX21tYXAu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTMwNGE5Ci0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMvcHJpbWVfbW1hcC5jCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYiBCcmFkZm9y ZCA8cm9iIGF0IGxpbnV4LmludGVsLmNvbT4KKyAqCisgKi8KKworLyoKKyAqIFRlc3RjYXNlOiBD aGVjayB3aGV0aGVyIG1tYXAoKWluZyBkbWEtYnVmIHdvcmtzCisgKi8KKyNkZWZpbmUgX0dOVV9T T1VSQ0UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaW5j bHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJkcm10ZXN0Lmgi CisjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgor CisjZGVmaW5lIEJPX1NJWkUgKDE2KjEwMjQpCisKK3N0YXRpYyBpbnQgZmQ7CisKK2NoYXIgcGF0 dGVybltdID0gezB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwMCwgMHgw MCwKKwkweDAwLCAweDAwLCAweGZmLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmZ9Owor CitzdGF0aWMgdm9pZAorZmlsbF9ibyh1aW50MzJfdCBoYW5kbGUsIHNpemVfdCBzaXplKQorewor CW9mZl90IGk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrPXNpemVvZihwYXR0ZXJuKSkKKwl7 CisJCWdlbV93cml0ZShmZCwgaGFuZGxlLCBpLCBwYXR0ZXJuLCBzaXplb2YocGF0dGVybikpOwor CX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfY29ycmVjdCh2b2lkKQoreworCWludCBkbWFfYnVm X2ZkOworCWNoYXIgKnB0cjEsICpwdHIyOworCXVpbnQzMl90IGhhbmRsZTsKKworCWhhbmRsZSA9 IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKwor CWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7CisJaWd0X2Fzc2Vy dChlcnJubyA9PSAwKTsKKworCS8qIENoZWNrIGNvcnJlY3RuZXNzIHZzIEdFTV9NTUFQX0dUVCAq LworCXB0cjEgPSBnZW1fbW1hcF9fZ3R0KGZkLCBoYW5kbGUsIEJPX1NJWkUsIFBST1RfUkVBRCk7 CisJcHRyMiA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFf YnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0cjEgIT0gTUFQX0ZBSUxFRCk7CisJaWd0X2Fzc2Vy dChwdHIyICE9IE1BUF9GQUlMRUQpOworCWlndF9hc3NlcnQobWVtY21wKHB0cjEsIHB0cjIsIEJP X1NJWkUpID09IDApOworCisJLyogQ2hlY2sgcGF0dGVybiBjb3JyZWN0bmVzcyAqLworCWlndF9h c3NlcnQobWVtY21wKHB0cjIsIHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSkgPT0gMCk7CisKKwlt dW5tYXAocHRyMSwgQk9fU0laRSk7CisJbXVubWFwKHB0cjIsIEJPX1NJWkUpOworCWNsb3NlKGRt YV9idWZfZmQpOworCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3RfbWFwX3VubWFwKHZvaWQpCit7CisJaW50IGRtYV9idWZfZmQ7CisJY2hhciAqcHRyOworCXVp bnQzMl90IGhhbmRsZTsKKworCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOworCWZp bGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKworCWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9f ZmQoZmQsIGhhbmRsZSk7CisJaWd0X2Fzc2VydChlcnJubyA9PSAwKTsKKworCXB0ciA9IG1tYXAo TlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlp Z3RfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKKwlpZ3RfYXNzZXJ0KG1lbWNtcChwdHIsIHBh dHRlcm4sIHNpemVvZihwYXR0ZXJuKSkgPT0gMCk7CisKKwkvKiBVbm1hcCBhbmQgcmVtYXAgKi8K KwltdW5tYXAocHRyLCBCT19TSVpFKTsKKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1Rf UkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWd0X2Fzc2VydChwdHIgIT0gTUFQ X0ZBSUxFRCk7CisJaWd0X2Fzc2VydChtZW1jbXAocHRyLCBwYXR0ZXJuLCBzaXplb2YocGF0dGVy bikpID09IDApOworCisJbXVubWFwKHB0ciwgQk9fU0laRSk7CisJY2xvc2UoZG1hX2J1Zl9mZCk7 CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworfQorCisvKiBwcmltZSBhbmQgdGhlbiB1bnByaW1l IGFuZCB0aGVuIHByaW1lIGFnYWluIHRoZSBzYW1lIGhhbmRsZSAqLworc3RhdGljIHZvaWQKK3Rl c3RfcmVwcmltZSh2b2lkKQoreworCWludCBkbWFfYnVmX2ZkOworCWNoYXIgKnB0cjsKKwl1aW50 MzJfdCBoYW5kbGU7CisKKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKKwlmaWxs X2JvKGhhbmRsZSwgQk9fU0laRSk7CisKKwlkbWFfYnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2Zk KGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7CisKKwlwdHIgPSBtbWFwKE5V TEwsIEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWd0 X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CisJaWd0X2Fzc2VydChtZW1jbXAocHRyLCBwYXR0 ZXJuLCBzaXplb2YocGF0dGVybikpID09IDApOworCisJY2xvc2UgKGRtYV9idWZfZmQpOworCWln dF9hc3NlcnQobWVtY21wKHB0ciwgcGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pKSA9PSAwKTsKKwlt dW5tYXAocHRyLCBCT19TSVpFKTsKKworCWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQo ZmQsIGhhbmRsZSk7CisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1BUF9T SEFSRUQsIGRtYV9idWZfZmQsIDApOworCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwor CWlndF9hc3NlcnQobWVtY21wKHB0ciwgcGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pKSA9PSAwKTsK KworCW11bm1hcChwdHIsIEJPX1NJWkUpOworCWNsb3NlKGRtYV9idWZfZmQpOworCWdlbV9jbG9z ZShmZCwgaGFuZGxlKTsKK30KKworLyogbWFwIGZyb20gYW5vdGhlciBwcm9jZXNzICovCitzdGF0 aWMgdm9pZAordGVzdF9mb3JrZWQodm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpw dHI7CisJdWludDMyX3QgaGFuZGxlOworCisJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0la RSk7CisJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOworCisJZG1hX2J1Zl9mZCA9IHByaW1lX2hh bmRsZV90b19mZChmZCwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOworCisJaWd0 X2ZvcmsoY2hpbGRubywgMSkgeworCQlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVB RCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJCWlndF9hc3NlcnQocHRyICE9IE1BUF9G QUlMRUQpOworCQlpZ3RfYXNzZXJ0KG1lbWNtcChwdHIsIHBhdHRlcm4sIHNpemVvZihwYXR0ZXJu KSkgPT0gMCk7CisJCW11bm1hcChwdHIsIEJPX1NJWkUpOworCQljbG9zZShkbWFfYnVmX2ZkKTsK Kwl9CisJY2xvc2UoZG1hX2J1Zl9mZCk7CisJaWd0X3dhaXRjaGlsZHJlbigpOworCWdlbV9jbG9z ZShmZCwgaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcmVmY291bnRpbmcodm9pZCkK K3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3QgaGFuZGxlOworCisJ aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7CisJZmlsbF9ibyhoYW5kbGUsIEJPX1NJ WkUpOworCisJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlKTsKKwlp Z3RfYXNzZXJ0KGVycm5vID09IDApOworCS8qIENsb3NlIGdlbSBvYmplY3QgYmVmb3JlIG1hcHBp bmcgKi8KKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CisKKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJ WkUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWd0X2Fzc2VydChw dHIgIT0gTUFQX0ZBSUxFRCk7CisJaWd0X2Fzc2VydChtZW1jbXAocHRyLCBwYXR0ZXJuLCBzaXpl b2YocGF0dGVybikpID09IDApOworCW11bm1hcChwdHIsIEJPX1NJWkUpOworCWNsb3NlIChkbWFf YnVmX2ZkKTsKK30KKworLyogZHVwIGJlZm9yZSBtbWFwICovCitzdGF0aWMgdm9pZAordGVzdF9k dXAodm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3QgaGFu ZGxlOworCisJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7CisJZmlsbF9ibyhoYW5k bGUsIEJPX1NJWkUpOworCisJZG1hX2J1Zl9mZCA9IGR1cChwcmltZV9oYW5kbGVfdG9fZmQoZmQs IGhhbmRsZSkpOworCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7CisKKwlwdHIgPSBtbWFwKE5VTEws IEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWd0X2Fz c2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CisJaWd0X2Fzc2VydChtZW1jbXAocHRyLCBwYXR0ZXJu LCBzaXplb2YocGF0dGVybikpID09IDApOworCW11bm1hcChwdHIsIEJPX1NJWkUpOworCWdlbV9j bG9zZShmZCwgaGFuZGxlKTsKKwljbG9zZSAoZG1hX2J1Zl9mZCk7Cit9CisKKworLyogVXNlZCBm b3IgZXJyb3IgY2FzZSB0ZXN0aW5nIHRvIGF2b2lkIHdyYXBwZXIgKi8KK3N0YXRpYyBpbnQgcHJp bWVfaGFuZGxlX3RvX2ZkX25vX2Fzc2VydCh1aW50MzJfdCBoYW5kbGUsIGludCAqZmRfb3V0KQor eworCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIGFyZ3M7CisJaW50IHJldDsKKworCWFyZ3MuaGFu ZGxlID0gaGFuZGxlOworCWFyZ3MuZmxhZ3MgPSBEUk1fQ0xPRVhFQzsKKwlhcmdzLmZkID0gLTE7 CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1BSSU1FX0hBTkRMRV9UT19GRCwgJmFy Z3MpOworCWlmIChyZXQpCisJCXJldCA9IGVycm5vOworCSpmZF9vdXQgPSBhcmdzLmZkOworCisJ cmV0dXJuIHJldDsKK30KKworLyogdGVzdCBmb3IgbW1hcChkbWFfYnVmX2V4cG9ydCh1c2VycHRy KSkgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3VzZXJwdHIodm9pZCkKK3sKKwlpbnQgcmV0LCBkbWFf YnVmX2ZkOworCXZvaWQgKnB0cjsKKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKiBjcmVhdGUgdXNl cnB0ciBibyAqLworCXJldCA9IHBvc2l4X21lbWFsaWduKCZwdHIsIDQwOTYsIEJPX1NJWkUpOwor CWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCS8qIHdlIGFyZSBub3QgYWxsb3dlZCB0byBleHBv cnQgdW5zeW5jaHJvbml6ZWQgdXNlcnB0ci4gSnVzdCBjcmVhdGUgYSBub3JtYWwKKwkgKiBvbmUg Ki8KKwlnZW1fdXNlcnB0cihmZCwgKHVpbnQzMl90ICopcHRyLCBCT19TSVpFLCAwLCAwLCAmaGFu ZGxlKTsKKworCS8qIGV4cG9ydCB1c2VycHRyICovCisJcmV0ID0gcHJpbWVfaGFuZGxlX3RvX2Zk X25vX2Fzc2VydChoYW5kbGUsICZkbWFfYnVmX2ZkKTsKKwlpZiAocmV0KSB7CisJCWlndF9hc3Nl cnQocmV0ID09IEVJTlZBTCB8fCByZXQgPT0gRU5PREVWKTsKKwkJZ290byBmcmVlX3VzZXJwdHI7 CisJfSBlbHNlIHsKKwkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQlpZ3RfYXNzZXJ0X2x0ZSgw LCBkbWFfYnVmX2ZkKTsKKwl9CisKKwkvKiBhIHVzZXJwdHIgZG9lc24ndCBoYXZlIHRoZSBvYmot PmJhc2UuZmlscCwgYnV0IGNhbiBiZSBleHBvcnRlZCB2aWEKKwkgKiBkbWEtYnVmLCBzbyBtYWtl IHN1cmUgaXQgZmFpbHMgaGVyZSAqLworCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9S RUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0ciA9PSBNQVBf RkFJTEVEICYmIGVycm5vID09IEVOT0RFVik7CitmcmVlX3VzZXJwdHI6CisJZ2VtX2Nsb3NlKGZk LCBoYW5kbGUpOworCWNsb3NlKGRtYV9idWZfZmQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9l cnJvcnModm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3Qg aGFuZGxlOworCisJLyogQ2xvc2UgZ2VtIG9iamVjdCBiZWZvcmUgcHJpbWluZyAqLworCWhhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsK KwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CisJcHJpbWVfaGFuZGxlX3RvX2ZkX25vX2Fzc2VydCho YW5kbGUsICZkbWFfYnVmX2ZkKTsKKwlpZ3RfYXNzZXJ0KGRtYV9idWZfZmQgPT0gLTEgJiYgZXJy bm8gPT0gRU5PRU5UKTsKKwllcnJubyA9IDA7CisKKwkvKiBjbG9zZSBmZCBiZWZvcmUgbWFwcGlu ZyAqLworCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxl LCBCT19TSVpFKTsKKwlkbWFfYnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUp OworCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7CisJY2xvc2UoZG1hX2J1Zl9mZCk7CisJcHRyID0g bW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDAp OworCWlndF9hc3NlcnQocHRyID09IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUJBREYpOworCWVy cm5vID0gMDsKKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CisKKwkvKiBNYXAgdG9vIGJpZyAqLwor CWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19T SVpFKTsKKwlkbWFfYnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWln dF9hc3NlcnQoZXJybm8gPT0gMCk7CisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFICogMiwgUFJP VF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0ciA9PSBN QVBfRkFJTEVEICYmIGVycm5vID09IEVJTlZBTCk7CisJZXJybm8gPSAwOworCWNsb3NlKGRtYV9i dWZfZmQpOworCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKKworCS8qIE92ZXJsYXBwaW5nIHRoZSBl bmQgb2YgdGhlIGJ1ZmZlciAqLworCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwor CWRtYV9idWZfZmQgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZSk7CisJaWd0X2Fzc2Vy dChlcnJubyA9PSAwKTsKKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQ X1NIQVJFRCwgZG1hX2J1Zl9mZCwgQk9fU0laRSAvIDIpOworCWlndF9hc3NlcnQocHRyID09IE1B UF9GQUlMRUQgJiYgZXJybm8gPT0gRUlOVkFMKTsKKwllcnJubyA9IDA7CisJY2xvc2UoZG1hX2J1 Zl9mZCk7CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9h cGVydHVyZV9saW1pdCh2b2lkKQoreworCWludCBkbWFfYnVmX2ZkMSwgZG1hX2J1Zl9mZDI7CisJ Y2hhciAqcHRyMSwgKnB0cjI7CisJdWludDMyX3QgaGFuZGxlMSwgaGFuZGxlMjsKKwkvKiBUd28g YnVmZmVycyB0aGUgc3VtIG9mIHdoaWNoID4gbWFwcGFibGUgYXBlcnR1cmUgKi8KKwl1aW50NjRf dCBzaXplMSA9IChnZW1fbWFwcGFibGVfYXBlcnR1cmVfc2l6ZSgpICogNykgLyA4OworCXVpbnQ2 NF90IHNpemUyID0gKGdlbV9tYXBwYWJsZV9hcGVydHVyZV9zaXplKCkgKiAzKSAvIDg7CisKKwlo YW5kbGUxID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZTEpOworCWZpbGxfYm8oaGFuZGxlMSwgQk9fU0la RSk7CisKKwlkbWFfYnVmX2ZkMSA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFuZGxlMSk7CisJ aWd0X2Fzc2VydChlcnJubyA9PSAwKTsKKwlwdHIxID0gbW1hcChOVUxMLCBzaXplMSwgUFJPVF9S RUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkMSwgMCk7CisJaWd0X2Fzc2VydChwdHIxICE9IE1B UF9GQUlMRUQpOworCWlndF9hc3NlcnQobWVtY21wKHB0cjEsIHBhdHRlcm4sIHNpemVvZihwYXR0 ZXJuKSkgPT0gMCk7CisKKwloYW5kbGUyID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZTEpOworCWZpbGxf Ym8oaGFuZGxlMiwgQk9fU0laRSk7CisJZG1hX2J1Zl9mZDIgPSBwcmltZV9oYW5kbGVfdG9fZmQo ZmQsIGhhbmRsZTIpOworCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7CisJcHRyMiA9IG1tYXAoTlVM TCwgc2l6ZTIsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZDIsIDApOworCWlndF9h c3NlcnQocHRyMiAhPSBNQVBfRkFJTEVEKTsKKwlpZ3RfYXNzZXJ0KG1lbWNtcChwdHIyLCBwYXR0 ZXJuLCBzaXplb2YocGF0dGVybikpID09IDApOworCisJaWd0X2Fzc2VydChtZW1jbXAocHRyMSwg cHRyMiwgQk9fU0laRSkgPT0gMCk7CisKKwltdW5tYXAocHRyMSwgc2l6ZTEpOworCW11bm1hcChw dHIyLCBzaXplMik7CisJY2xvc2UoZG1hX2J1Zl9mZDEpOworCWNsb3NlKGRtYV9idWZfZmQyKTsK KwlnZW1fY2xvc2UoZmQsIGhhbmRsZTEpOworCWdlbV9jbG9zZShmZCwgaGFuZGxlMik7Cit9CisK K3N0YXRpYyBpbnQKK2NoZWNrX2Zvcl9kbWFfYnVmX21tYXAodm9pZCkKK3sKKwlpbnQgZG1hX2J1 Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3QgaGFuZGxlOworCWludCByZXQgPSAxOworCisJ aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7CisJZG1hX2J1Zl9mZCA9IHByaW1lX2hh bmRsZV90b19mZChmZCwgaGFuZGxlKTsKKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1Rf UkVBRCwgTUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWYgKHB0ciAhPSBNQVBfRkFJTEVE KQorCQlyZXQgPSAwOworCW11bm1hcChwdHIsIEJPX1NJWkUpOworCWdlbV9jbG9zZShmZCwgaGFu ZGxlKTsKKwljbG9zZShkbWFfYnVmX2ZkKTsKKwlyZXR1cm4gcmV0OworfQorCitpZ3RfbWFpbgor eworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXZvaWQgKCpmbikodm9pZCk7CisJ fSB0ZXN0c1tdID0geworCQl7ICJ0ZXN0X2NvcnJlY3QiLCB0ZXN0X2NvcnJlY3QgfSwKKwkJeyAi dGVzdF9tYXBfdW5tYXAiLCB0ZXN0X21hcF91bm1hcCB9LAorCQl7ICJ0ZXN0X3JlcHJpbWUiLCB0 ZXN0X3JlcHJpbWUgfSwKKwkJeyAidGVzdF9mb3JrZWQiLCB0ZXN0X2ZvcmtlZCB9LAorCQl7ICJ0 ZXN0X3JlZmNvdW50aW5nIiwgdGVzdF9yZWZjb3VudGluZyB9LAorCQl7ICJ0ZXN0X2R1cCIsIHRl c3RfZHVwIH0sCisJCXsgInRlc3RfdXNlcnB0ciIsIHRlc3RfdXNlcnB0ciB9LAorCQl7ICJ0ZXN0 X2Vycm9ycyIsIHRlc3RfZXJyb3JzIH0sCisJCXsgInRlc3RfYXBlcnR1cmVfbGltaXQiLCB0ZXN0 X2FwZXJ0dXJlX2xpbWl0IH0sCisJfTsKKwlpbnQgaTsKKworCWlndF9maXh0dXJlIHsKKwkJZmQg PSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJZXJybm8gPSAwOworCX0KKworCWln dF9za2lwX29uKChjaGVja19mb3JfZG1hX2J1Zl9tbWFwKCkgIT0gMCkpOworCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHsKKwkJaWd0X3N1YnRlc3QodGVzdHNbaV0u bmFtZSkKKwkJCXRlc3RzW2ldLmZuKCk7CisJfQorCisJaWd0X2ZpeHR1cmUKKwkJY2xvc2UoZmQp OworfQotLSAKMi4xLjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==