From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH] tests/gem_userptr_benchmark: Benchmarking userptr surfaces and impact Date: Wed, 5 Feb 2014 12:41:46 +0000 Message-ID: <1391604106-26817-2-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1391604106-26817-1-git-send-email-tvrtko.ursulin@linux.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 E32011067D6 for ; Wed, 5 Feb 2014 04:41:57 -0800 (PST) In-Reply-To: <1391604106-26817-1-git-send-email-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRoaXMgYWRk cyBhIHNtYWxsIGJlbmNobWFyayBmb3IgdGhlIG5ldyB1c2VycHRyIGZ1bmN0aW9uYWxpdHkuCgpB cGFydCBmcm9tIGJhc2ljIHN1cmZhY2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLCBhbHNvIHRl c3RlZCBpcyB0aGUKaW1wYWN0IG9mIGhhdmluZyB1c2VycHRyIHN1cmZhY2VzIGluIHRoZSBwcm9j ZXNzIGFkZHJlc3Mgc3BhY2UuIFJlYXNvbgpmb3IgdGhhdCBpcyB0aGUgaW1wYWN0IG9mIE1NVSBu b3RpZmllcnMgb24gY29tbW9uIGFkZHJlc3Mgc3BhY2UKb3BlcmF0aW9ucyBsaWtlIG11bm1hcCgp IHdoaWNoIGlzIHBlciBwcm9jZXNzLgoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2 cnRrby51cnN1bGluQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrPgotLS0KIHRlc3RzLy5naXRpZ25vcmUgICAgICAgICAgICAgIHwgICAxICsKIHRl c3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgIHwgICAxICsKIHRlc3RzL2dlbV91c2VycHRyX2Jl bmNobWFyay5jIHwgNDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA0NTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2dlbV91c2VycHRyX2JlbmNobWFyay5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGln bm9yZSBiL3Rlc3RzLy5naXRpZ25vcmUKaW5kZXggMWEzYjlkMS4uMTI1YmM4OCAxMDA2NDQKLS0t IGEvdGVzdHMvLmdpdGlnbm9yZQorKysgYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC05Myw2ICs5Myw3 IEBAIGdlbV90aWxpbmdfbWF4X3N0cmlkZQogZ2VtX3VuZmVuY2VfYWN0aXZlX2J1ZmZlcnMKIGdl bV91bnJlZl9hY3RpdmVfYnVmZmVycwogZ2VtX3VzZXJwdHJfYmxpdHMKK2dlbV91c2VycHRyX2Jl bmNobWFyawogZ2VtX3dhaXRfcmVuZGVyX3RpbWVvdXQKIGdlbV93cml0ZV9yZWFkX3Jpbmdfc3dp dGNoCiBnZW4zX21peGVkX2JsaXRzCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCBjNjllMGUzLi43YmU1MzlkIDEwMDY0NAot LS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK QEAgLTExNyw2ICsxMTcsNyBAQCBURVNUU19wcm9ncyA9IFwKIAlnZW1fdW5mZW5jZV9hY3RpdmVf YnVmZmVycyBcCiAJZ2VtX3VucmVmX2FjdGl2ZV9idWZmZXJzIFwKIAlnZW1fdXNlcnB0cl9ibGl0 cyBcCisJZ2VtX3VzZXJwdHJfYmVuY2htYXJrIFwKIAlnZW1fd2FpdF9yZW5kZXJfdGltZW91dCBc CiAJZ2VuM19taXhlZF9ibGl0cyBcCiAJZ2VuM19yZW5kZXJfbGluZWFyX2JsaXRzIFwKZGlmZiAt LWdpdCBhL3Rlc3RzL2dlbV91c2VycHRyX2JlbmNobWFyay5jIGIvdGVzdHMvZ2VtX3VzZXJwdHJf YmVuY2htYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkYTAyYwot LS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dlbV91c2VycHRyX2JlbmNobWFyay5jCkBAIC0wLDAg KzEsNDUxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9y czoKKyAqICAgIFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CisgKgor ICovCisKKy8qKiBAZmlsZSBnZW1fdXNlcnB0cl9iZW5jaG1hcmsuYworICoKKyAqIEJlbmNobWFy ayB0aGUgdXNlcnB0ciBjb2RlIGFuZCBpbXBhY3Qgb2YgaGF2aW5nIHVzZXJwdHIgc3VyZmFjZXMK KyAqIGluIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSBvbiBzb21lIG5vcm1hbCBvcGVyYXRpb25zLgor ICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+ CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5 cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNs dWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpbnRlbF9i dWZtZ3IuaCIKKyNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgorI2luY2x1ZGUgImludGVs X2dwdV90b29scy5oIgorCisjZGVmaW5lIFdJRFRIIDEyOAorI2RlZmluZSBIRUlHSFQgMTI4Cisj ZGVmaW5lIFBBR0VfU0laRSA0MDk2CisKKyNkZWZpbmUgTE9DQUxfSTkxNV9HRU1fVVNFUlBUUiAg ICAgICAweDM0CisjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIgRFJNX0lPV1Ig KERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgbG9jYWxf aTkxNV9nZW1fdXNlcnB0cikKK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV91c2VycHRyIHsKKwl1aW50 NjRfdCB1c2VyX3B0cjsKKwl1aW50NjRfdCB1c2VyX3NpemU7CisJdWludDMyX3QgZmxhZ3M7Cisj ZGVmaW5lIEk5MTVfVVNFUlBUUl9SRUFEX09OTFkgKDE8PDApCisjZGVmaW5lIEk5MTVfVVNFUlBU Ul9VTlNZTkNIUk9OSVpFRCAoMTw8MzEpCisJdWludDMyX3QgaGFuZGxlOworfTsKKworc3RhdGlj IHVpbnQzMl90IHVzZXJwdHJfZmxhZ3M7CisKK3N0YXRpYyB1aW50MzJfdCBsaW5lYXJbV0lEVEgq SEVJR0hUXTsKKworc3RhdGljIHZvaWQgZ2VtX3VzZXJwdHJfdGVzdF91bnN5bmNocm9uaXplZCh2 b2lkKQoreworCXVzZXJwdHJfZmxhZ3MgPSBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQ7Cit9 CisKK3N0YXRpYyB2b2lkIGdlbV91c2VycHRyX3Rlc3Rfc3luY2hyb25pemVkKHZvaWQpCit7CisJ dXNlcnB0cl9mbGFncyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VtX3VzZXJwdHIoaW50IGZkLCB2 b2lkICpwdHIsIGludCBzaXplLCBpbnQgcmVhZF9vbmx5LCB1aW50MzJfdCAqaGFuZGxlKQorewor CXN0cnVjdCBsb2NhbF9pOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7CisJaW50IHJldDsKKworCXVz ZXJwdHIudXNlcl9wdHIgPSAodWludHB0cl90KXB0cjsKKwl1c2VycHRyLnVzZXJfc2l6ZSA9IHNp emU7CisJdXNlcnB0ci5mbGFncyA9IHVzZXJwdHJfZmxhZ3M7CisJaWYgKHJlYWRfb25seSkKKwkJ dXNlcnB0ci5mbGFncyB8PSBJOTE1X1VTRVJQVFJfUkVBRF9PTkxZOworCisJcmV0ID0gZHJtSW9j dGwoZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIsICZ1c2VycHRyKTsKKwlpZiAocmV0 KQorCQlyZXQgPSBlcnJubzsKKwlpZ3Rfc2tpcF9vbl9mKHJldCA9PSBFTk9ERVYgJiYKKwkJICAg ICAgKHVzZXJwdHJfZmxhZ3MgJiBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQpID09IDAsCisJ CSAgICAgICJTa2lwcGluZywgc3luY2hyb25pemVkIG1hcHBpbmdzIHdpdGggbm8ga2VybmVsIENP TkZJR19NTVVfTk9USUZJRVI/Iik7CisJaWYgKHJldCA9PSAwKQorCQkqaGFuZGxlID0gdXNlcnB0 ci5oYW5kbGU7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDMyX3QKK2NyZWF0ZV91 c2VycHRyKGludCBmZCwgdWludDMyX3QgdmFsLCB1aW50MzJfdCAqcHRyKQoreworCXVpbnQzMl90 IGhhbmRsZTsKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIHB0ciwgc2l6 ZW9mKGxpbmVhciksIDAsICZoYW5kbGUpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCWlndF9h c3NlcnQoaGFuZGxlICE9IDApOworCisJLyogRmlsbCB0aGUgQk8gd2l0aCBkd29yZHMgc3RhcnRp bmcgYXQgdmFsICovCisJZm9yIChpID0gMDsgaSA8IFdJRFRIKkhFSUdIVDsgaSsrKQorCQlwdHJb aV0gPSB2YWwrKzsKKworCXJldHVybiBoYW5kbGU7Cit9CisKK3N0YXRpYyB2b2lkICoqaGFuZGxl X3B0cl9tYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9oYW5kbGVfcHRyX21hcDsKKworc3Rh dGljIHZvaWQgYWRkX2hhbmRsZV9wdHIodWludDMyX3QgaGFuZGxlLCB2b2lkICpwdHIpCit7CisJ aWYgKGhhbmRsZSA+PSBudW1faGFuZGxlX3B0cl9tYXApIHsKKwkJaGFuZGxlX3B0cl9tYXAgPSBy ZWFsbG9jKGhhbmRsZV9wdHJfbWFwLAorCQkJCQkgKGhhbmRsZSArIDEwMDApICogc2l6ZW9mKHZv aWQqKSk7CisJCW51bV9oYW5kbGVfcHRyX21hcCA9IGhhbmRsZSArIDEwMDA7CisJfQorCisJaGFu ZGxlX3B0cl9tYXBbaGFuZGxlXSA9IHB0cjsKK30KKworc3RhdGljIHZvaWQgKmdldF9oYW5kbGVf cHRyKHVpbnQzMl90IGhhbmRsZSkKK3sKKwlyZXR1cm4gaGFuZGxlX3B0cl9tYXBbaGFuZGxlXTsK K30KKworc3RhdGljIHZvaWQgZnJlZV9oYW5kbGVfcHRyKHVpbnQzMl90IGhhbmRsZSkKK3sKKwlp Z3RfYXNzZXJ0KGhhbmRsZSA8IG51bV9oYW5kbGVfcHRyX21hcCk7CisJaWd0X2Fzc2VydChoYW5k bGVfcHRyX21hcFtoYW5kbGVdKTsKKworCWZyZWUoaGFuZGxlX3B0cl9tYXBbaGFuZGxlXSk7CisJ aGFuZGxlX3B0cl9tYXBbaGFuZGxlXSA9IE5VTEw7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVh dGVfdXNlcnB0cl9ibyhpbnQgZmQsIGludCBzaXplKQoreworCXZvaWQgKnB0cjsKKwl1aW50MzJf dCBoYW5kbGU7CisJaW50IHJldDsKKworCXJldCA9IHBvc2l4X21lbWFsaWduKCZwdHIsIFBBR0Vf U0laRSwgc2l6ZSk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwlyZXQgPSBnZW1fdXNlcnB0 cihmZCwgKHVpbnQzMl90ICopcHRyLCBzaXplLCAwLCAmaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KHJl dCA9PSAwKTsKKwlhZGRfaGFuZGxlX3B0cihoYW5kbGUsIHB0cik7CisKKwlyZXR1cm4gaGFuZGxl OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3VzZXJwdHJfYm8oaW50IGZkLCB1aW50MzJfdCBoYW5k bGUpCit7CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworCWZyZWVfaGFuZGxlX3B0cihoYW5kbGUp OworfQorCitzdGF0aWMgaW50IGhhc191c2VycHRyKGludCBmZCkKK3sKKwl1aW50MzJfdCBoYW5k bGUgPSAwOworCXZvaWQgKnB0cjsKKwl1aW50MzJfdCBvbGRmbGFnczsKKwlpbnQgcmV0OworCisJ YXNzZXJ0KHBvc2l4X21lbWFsaWduKCZwdHIsIFBBR0VfU0laRSwgUEFHRV9TSVpFKSA9PSAwKTsK KwlvbGRmbGFncyA9IHVzZXJwdHJfZmxhZ3M7CisJZ2VtX3VzZXJwdHJfdGVzdF91bnN5bmNocm9u aXplZCgpOworCXJldCA9IGdlbV91c2VycHRyKGZkLCBwdHIsIFBBR0VfU0laRSwgMCwgJmhhbmRs ZSk7CisJdXNlcnB0cl9mbGFncyA9IG9sZGZsYWdzOworCWlmIChyZXQgIT0gMCkgeworCQlmcmVl KHB0cik7CisJCXJldHVybiAwOworCX0KKworCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKKwlmcmVl KHB0cik7CisKKwlyZXR1cm4gaGFuZGxlICE9IDA7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBpbnQgbnJfYm9zW10gPSB7MCwgMSwgMTAsIDEwMCwgMTAwMH07CitzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IHRlc3RfZHVyYXRpb25fc2VjID0gMzsKKworc3RhdGljIHZvbGF0aWxlIHVuc2ln bmVkIGludCBydW5fdGVzdDsKKworc3RhdGljIHZvaWQgYWxhcm1faGFuZGxlcihpbnQgc2lnKQor eworCWFzc2VydChydW5fdGVzdCA9PSAxKTsKKwlydW5fdGVzdCA9IDA7Cit9CisKK3N0YXRpYyB2 b2lkIHN0YXJ0X3Rlc3QodW5zaWduZWQgaW50IGR1cmF0aW9uKQoreworCXJ1bl90ZXN0ID0gMTsK KwlpZiAoZHVyYXRpb24gPT0gMCkKKwkJZHVyYXRpb24gPSB0ZXN0X2R1cmF0aW9uX3NlYzsKKwlz aWduYWwoU0lHQUxSTSwgYWxhcm1faGFuZGxlcik7CisJYWxhcm0oZHVyYXRpb24pOworfQorCitz dGF0aWMgdm9pZCBleGNoYW5nZV9wdHIodm9pZCAqYXJyYXksIHVuc2lnbmVkIGksIHVuc2lnbmVk IGopCit7CisJdm9pZCAqKmFyciwgKnRtcDsKKwlhcnIgPSAodm9pZCAqKilhcnJheTsKKworCXRt cCA9IGFycltpXTsKKwlhcnJbaV0gPSBhcnJbal07CisJYXJyW2pdID0gdG1wOworfQorCitzdGF0 aWMgdm9pZCB0ZXN0X21hbGxvY19mcmVlKGludCByYW5kb20pCit7CisJdW5zaWduZWQgbG9uZyBp dGVyID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgdG90ID0gMTAwMDsKKwl2b2lkICpwdHJbdG90XTsK KworCXN0YXJ0X3Rlc3QodGVzdF9kdXJhdGlvbl9zZWMpOworCisJd2hpbGUgKHJ1bl90ZXN0KSB7 CisJCWZvciAoaSA9IDA7IGkgPCB0b3Q7IGkrKykgeworCQkJcHRyW2ldID0gbWFsbG9jKDEwMDAp OworCQkJYXNzZXJ0KHB0cltpXSk7CisJCX0KKwkJaWYgKHJhbmRvbSkKKwkJCWlndF9wZXJtdXRl X2FycmF5KHB0ciwgdG90LCBleGNoYW5nZV9wdHIpOworCQlmb3IgKGkgPSAwOyBpIDwgdG90OyBp KyspCisJCQlmcmVlKHB0cltpXSk7CisJCWl0ZXIrKzsKKwl9CisKKwlwcmludGYoIiU4bHUgb3Av c1xuIiwgaXRlciAvIHRlc3RfZHVyYXRpb25fc2VjKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9t YWxsb2NfcmVhbGxvY19mcmVlKGludCByYW5kb20pCit7CisJdW5zaWduZWQgbG9uZyBpdGVyID0g MDsKKwl1bnNpZ25lZCBpbnQgaSwgdG90ID0gMTAwMDsKKwl2b2lkICpwdHJbdG90XTsKKworCXN0 YXJ0X3Rlc3QodGVzdF9kdXJhdGlvbl9zZWMpOworCisJd2hpbGUgKHJ1bl90ZXN0KSB7CisJCWZv ciAoaSA9IDA7IGkgPCB0b3Q7IGkrKykgeworCQkJcHRyW2ldID0gbWFsbG9jKDEwMDApOworCQkJ YXNzZXJ0KHB0cltpXSk7CisJCX0KKwkJaWYgKHJhbmRvbSkKKwkJCWlndF9wZXJtdXRlX2FycmF5 KHB0ciwgdG90LCBleGNoYW5nZV9wdHIpOworCQlmb3IgKGkgPSAwOyBpIDwgdG90OyBpKyspIHsK KwkJCXB0cltpXSA9IHJlYWxsb2MocHRyW2ldLCAyMDAwKTsKKwkJCWFzc2VydChwdHJbaV0pOwor CQl9CisJCWlmIChyYW5kb20pCisJCQlpZ3RfcGVybXV0ZV9hcnJheShwdHIsIHRvdCwgZXhjaGFu Z2VfcHRyKTsKKwkJZm9yIChpID0gMDsgaSA8IHRvdDsgaSsrKQorCQkJZnJlZShwdHJbaV0pOwor CQlpdGVyKys7CisJfQorCisJcHJpbnRmKCIlOGx1IG9wL3NcbiIsIGl0ZXIgLyB0ZXN0X2R1cmF0 aW9uX3NlYyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbW1hcF91bm1hcChpbnQgcmFuZG9tKQor eworCXVuc2lnbmVkIGxvbmcgaXRlciA9IDA7CisJdW5zaWduZWQgaW50IGksIHRvdCA9IDEwMDA7 CisJdm9pZCAqcHRyW3RvdF07CisKKwlzdGFydF90ZXN0KHRlc3RfZHVyYXRpb25fc2VjKTsKKwor CXdoaWxlIChydW5fdGVzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdG90OyBpKyspIHsKKwkJCXB0 cltpXSA9IG1tYXAoTlVMTCwgMTAwMCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCQkJTUFQ X0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCQlhc3NlcnQocHRyW2ldICE9IE1B UF9GQUlMRUQpOworCQl9CisJCWlmIChyYW5kb20pCisJCQlpZ3RfcGVybXV0ZV9hcnJheShwdHIs IHRvdCwgZXhjaGFuZ2VfcHRyKTsKKwkJZm9yIChpID0gMDsgaSA8IHRvdDsgaSsrKQorCQkJbXVu bWFwKHB0cltpXSwgMTAwMCk7CisJCWl0ZXIrKzsKKwl9CisKKwlwcmludGYoIiU4bHUgb3Avc1xu IiwgaXRlciAvIHRlc3RfZHVyYXRpb25fc2VjKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbXBh Y3QoaW50IGZkKQoreworCXVuc2lnbmVkIGludCB0b3RhbCA9IHNpemVvZihucl9ib3MpIC8gc2l6 ZW9mKG5yX2Jvc1swXSk7CisJdW5zaWduZWQgaW50IHN1YnRlc3QsIGk7CisJdWludDMyX3QgaGFu ZGxlc1tucl9ib3NbdG90YWwtMV1dOworCisJZm9yIChzdWJ0ZXN0ID0gMDsgc3VidGVzdCA8IHRv dGFsOyBzdWJ0ZXN0KyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2Jvc1tzdWJ0ZXN0XTsgaSsr KQorCQkJaGFuZGxlc1tpXSA9IGNyZWF0ZV91c2VycHRyX2JvKGZkLCBzaXplb2YobGluZWFyKSk7 CisKKwkJcHJpbnRmKCJtYWxsb2MtZnJlZSwgICAgICAgICAgICAgICAgJTV1IGJvcyA9ICIsIG5y X2Jvc1tzdWJ0ZXN0XSk7CisJCXRlc3RfbWFsbG9jX2ZyZWUoMCk7CisJCXByaW50ZigibWFsbG9j LWZyZWUtcmFuZG9tICAgICAgICAgICU1dSBib3MgPSAiLCBucl9ib3Nbc3VidGVzdF0pOworCQl0 ZXN0X21hbGxvY19mcmVlKDEpOworCisJCXByaW50ZigibWFsbG9jLXJlYWxsb2MtZnJlZSwgICAg ICAgICU1dSBib3MgPSAiLCBucl9ib3Nbc3VidGVzdF0pOworCQl0ZXN0X21hbGxvY19yZWFsbG9j X2ZyZWUoMCk7CisJCXByaW50ZigibWFsbG9jLXJlYWxsb2MtZnJlZS1yYW5kb20sICU1dSBib3Mg PSAiLCBucl9ib3Nbc3VidGVzdF0pOworCQl0ZXN0X21hbGxvY19yZWFsbG9jX2ZyZWUoMSk7CisK KwkJcHJpbnRmKCJtbWFwLXVubWFwLCAgICAgICAgICAgICAgICAgJTV1IGJvcyA9ICIsIG5yX2Jv c1tzdWJ0ZXN0XSk7CisJCXRlc3RfbW1hcF91bm1hcCgwKTsKKwkJcHJpbnRmKCJtbWFwLXVubWFw LXJhbmRvbSwgICAgICAgICAgJTV1IGJvcyA9ICIsIG5yX2Jvc1tzdWJ0ZXN0XSk7CisJCXRlc3Rf bW1hcF91bm1hcCgxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfYm9zW3N1YnRlc3RdOyBpKysp CisJCQlmcmVlX3VzZXJwdHJfYm8oZmQsIGhhbmRsZXNbaV0pOworCX0KK30KKworc3RhdGljIHZv aWQgdGVzdF9zaW5nbGUoaW50IGZkKQoreworCWNoYXIgKnB0ciwgKmJvX3B0cjsKKwl1aW50MzJf dCBoYW5kbGUgPSAwOworCXVuc2lnbmVkIGxvbmcgaXRlciA9IDA7CisJaW50IHJldDsKKwl1bnNp Z25lZCBsb25nIG1hcF9zaXplID0gc2l6ZW9mKGxpbmVhcikgKyBQQUdFX1NJWkUgLSAxOworCisJ cHRyID0gbW1hcChOVUxMLCBtYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCU1B UF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSwgLTEsIDApOworCWFzc2VydChwdHIgIT0gTUFQX0ZB SUxFRCk7CisKKwlib19wdHIgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcHRyICsgKFBBR0Vf U0laRSAtIDEpKQorCQkJCQkmIH4oUEFHRV9TSVpFIC0gMSkpOworCisJc3RhcnRfdGVzdCh0ZXN0 X2R1cmF0aW9uX3NlYyk7CisKKwl3aGlsZSAocnVuX3Rlc3QpIHsKKwkJcmV0ID0gZ2VtX3VzZXJw dHIoZmQsIGJvX3B0ciwgc2l6ZW9mKGxpbmVhciksIDAsICZoYW5kbGUpOworCQlhc3NlcnQocmV0 ID09IDApOworCQlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CisJCWl0ZXIrKzsKKwl9CisKKwltdW5t YXAocHRyLCBtYXBfc2l6ZSk7CisKKwlwcmludGYoIiU4bHUgb3Avc1xuIiwgaXRlciAvIHRlc3Rf ZHVyYXRpb25fc2VjKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9tdWx0aXBsZShpbnQgZmQsIHVu c2lnbmVkIGludCBiYXRjaCwgaW50IHJhbmRvbSkKK3sKKwljaGFyICpwdHIsICpib19wdHI7CisJ dWludDMyX3QgaGFuZGxlc1sxMDAwMF07CisJaW50IG1hcFsxMDAwMF07CisJdW5zaWduZWQgbG9u ZyBpdGVyID0gMDsKKwlpbnQgcmV0OworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbWFwX3NpemUg PSBiYXRjaCAqIHNpemVvZihsaW5lYXIpICsgUEFHRV9TSVpFIC0gMTsKKworCWFzc2VydChiYXRj aCA8IChzaXplb2YoaGFuZGxlcykgLyBzaXplb2YoaGFuZGxlc1swXSkpKTsKKwlhc3NlcnQoYmF0 Y2ggPCAoc2l6ZW9mKG1hcCkgLyBzaXplb2YobWFwWzBdKSkpOworCisJcHRyID0gbW1hcChOVUxM LCBtYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCU1BUF9BTk9OWU1PVVMgfCBN QVBfUFJJVkFURSwgLTEsIDApOworCWFzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CisKKwlib19w dHIgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcHRyICsgKFBBR0VfU0laRSAtIDEpKQorCQkJ CSYgfihQQUdFX1NJWkUgLSAxKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmF0Y2g7IGkrKykKKwkJ bWFwW2ldID0gaTsKKworCXN0YXJ0X3Rlc3QodGVzdF9kdXJhdGlvbl9zZWMpOworCisJd2hpbGUg KHJ1bl90ZXN0KSB7CisJCWlmIChyYW5kb20pCisJCQlpZ3RfcGVybXV0ZV9hcnJheShtYXAsIGJh dGNoLCBpZ3RfZXhjaGFuZ2VfaW50KTsKKwkJZm9yIChpID0gMDsgaSA8IGJhdGNoOyBpKyspIHsK KwkJCXJldCA9IGdlbV91c2VycHRyKGZkLCBib19wdHIgKyBtYXBbaV0gKiBzaXplb2YobGluZWFy KSwKKwkJCQkJCXNpemVvZihsaW5lYXIpLAorCQkJCQkJMCwgJmhhbmRsZXNbaV0pOworCQkJYXNz ZXJ0KHJldCA9PSAwKTsKKwkJfQorCQlpZiAocmFuZG9tKQorCQkJaWd0X3Blcm11dGVfYXJyYXko bWFwLCBiYXRjaCwgaWd0X2V4Y2hhbmdlX2ludCk7CisJCWZvciAoaSA9IDA7IGkgPCBiYXRjaDsg aSsrKQorCQkJZ2VtX2Nsb3NlKGZkLCBoYW5kbGVzW21hcFtpXV0pOworCQlpdGVyKys7CisJfQor CisJbXVubWFwKHB0ciwgbWFwX3NpemUpOworCisJcHJpbnRmKCIlOGx1IG9wL3NcbiIsIGl0ZXIg LyB0ZXN0X2R1cmF0aW9uX3NlYyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfdXNlcnB0cihpbnQg ZmQpCit7CisJcHJpbnRmKCJjcmVhdGUtZGVzdHJveSAgICAgICAgICAgICAgICA9ICIpOworCXRl c3Rfc2luZ2xlKGZkKTsKKworCXByaW50ZigibXVsdGktY3JlYXRlLWRlc3Ryb3kgICAgICAgICAg PSAiKTsKKwl0ZXN0X211bHRpcGxlKGZkLCAxMDAsIDApOworCisJcHJpbnRmKCJtdWx0aS1jcmVh dGUtZGVzdHJveS1yYW5kb20gICA9ICIpOworCXRlc3RfbXVsdGlwbGUoZmQsIDEwMCwgMSk7Cit9 CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmQgPSAtMSwgcmV0 OworCisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJaWd0X3N1YnRlc3RfaW5pdChhcmdj LCBhcmd2KTsKKworCWZkID0gZHJtX29wZW5fYW55KCk7CisJaWd0X2Fzc2VydChmZCA+PSAwKTsK KworCXJldCA9IGhhc191c2VycHRyKGZkKTsKKwlpZ3Rfc2tpcF9vbl9mKHJldCA9PSAwLCAiTm8g dXNlcnB0ciBzdXBwb3J0IC0gJXMgKCVkKVxuIiwKKwkJCXN0cmVycm9yKGVycm5vKSwgcmV0KTsK KworCisJZ2VtX3VzZXJwdHJfdGVzdF91bnN5bmNocm9uaXplZCgpOworCisJaWd0X3N1YnRlc3Qo InVzZXJwdHItdW5zeW5jIikKKwkJdGVzdF91c2VycHRyKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJ1 c2VycHRyLWltcGFjdC11bnN5bmMiKQorCQl0ZXN0X2ltcGFjdChmZCk7CisKKwlnZW1fdXNlcnB0 cl90ZXN0X3N5bmNocm9uaXplZCgpOworCisJaWd0X3N1YnRlc3QoInVzZXJwdHItc3luYyIpCisJ CXRlc3RfdXNlcnB0cihmZCk7CisKKwlpZ3Rfc3VidGVzdCgidXNlcnB0ci1pbXBhY3Qtc3luYyIp CisJCXRlc3RfaW1wYWN0KGZkKTsKKworCWlndF9leGl0KCk7CisKKwlyZXR1cm4gMDsKK30KLS0g CjEuOC40LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==