From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiago Vignatti Subject: [PATCH i-g-t 1/5] prime_mmap: Add new test for calling mmap() on dma-buf fds Date: Tue, 11 Aug 2015 17:59:24 -0300 Message-ID: <1439326768-5611-6-git-send-email-tiago.vignatti@intel.com> References: <1439326768-5611-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: In-Reply-To: <1439326768-5611-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, daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, Rob Bradford List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgoKVGhpcyB0ZXN0IGhhcyB0 aGUgZm9sbG93aW5nIHN1YnRlc3RzOgogLSB0ZXN0X2NvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIG9m IHRoZSBkYXRhCiAtIHRlc3RfbWFwX3VubWFwIGNoZWNrcyBmb3IgbWFwcGluZyBpZGVtcG90ZW5j eQogLSB0ZXN0X3JlcHJpbWUgY2hlY2tzIGZvciBkbWEtYnVmIGNyZWF0aW9uIGlkZW1wb3RlbmN5 CiAtIHRlc3RfZm9ya2VkIGNoZWNrcyBmb3IgbXVsdGlwcm9jZXNzIGFjY2VzcwogLSB0ZXN0X3Jl ZmNvdW50aW5nIGNoZWNrcyBmb3IgYnVmZmVyIHJlZmVyZW5jZSBjb3VudGluZwogLSB0ZXN0X2R1 cCBjaGF0cyB0aGF0IGR1cCgpaW5nIHRoZSBmZCB3b3JrcwogLSB0ZXN0X2Vycm9ycyBjaGVja3Mg dGhlIGVycm9yIHJldHVybiB2YWx1ZXMgZm9yIGZhaWx1cmVzCiAtIHRlc3RfYXBlcnR1cmVfbGlt aXQgdGVzdHMgbXVsdGlwbGUgYnVmZmVyIGNyZWF0aW9uIGF0IHRoZSBndHQgYXBlcnR1cmUKICAg bGltaXQKClNpZ25lZC1vZmYtYnk6IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogVGlhZ28gVmlnbmF0dGkgPHRpYWdvLnZpZ25hdHRpQGludGVsLmNvbT4K LS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRlc3RzL3ByaW1lX21tYXAuYyAg ICAgfCAzODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCAzODQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL3ByaW1lX21tYXAuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGM5NDcxNGIuLjViMjA3MmUgMTAwNjQ0Ci0t LSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpA QCAtOTAsNiArOTAsNyBAQCBURVNUU19wcm9nc19NID0gXAogCXBtX3JwcyBcCiAJcG1fcmM2X3Jl c2lkZW5jeSBcCiAJcG1fc3NldSBcCisJcHJpbWVfbW1hcCBcCiAJcHJpbWVfc2VsZl9pbXBvcnQg XAogCXRlbXBsYXRlIFwKIAkkKE5VTEwpCmRpZmYgLS1naXQgYS90ZXN0cy9wcmltZV9tbWFwLmMg Yi90ZXN0cy9wcmltZV9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NGRjMjA1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3ByaW1lX21tYXAuYwpAQCAtMCwwICsx LDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6 CisgKiAgICBSb2IgQnJhZGZvcmQgPHJvYiBhdCBsaW51eC5pbnRlbC5jb20+CisgKgorICovCisK Ky8qCisgKiBUZXN0Y2FzZTogQ2hlY2sgd2hldGhlciBtbWFwKClpbmcgZG1hLWJ1ZiB3b3Jrcwor ICovCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUg PHB0aHJlYWQuaD4KKworI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisj aW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKKworI2RlZmluZSBCT19TSVpFICgxNioxMDI0KQorCitzdGF0aWMg aW50IGZkOworCitjaGFyIHBhdHRlcm5bXSA9IHsweGZmLCAweDAwLCAweDAwLCAweDAwLAorCTB4 MDAsIDB4ZmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwKKwkweDAwLCAw eDAwLCAweDAwLCAweGZmfTsKKworc3RhdGljIHZvaWQKK2ZpbGxfYm8odWludDMyX3QgaGFuZGxl LCBzaXplX3Qgc2l6ZSkKK3sKKwlvZmZfdCBpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKz1z aXplb2YocGF0dGVybikpCisJeworCQlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgaSwgcGF0dGVybiwg c2l6ZW9mKHBhdHRlcm4pKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3BhdHRlcm5fY2hlY2soY2hh ciAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlvZmZfdCBpOworCWZvciAoaSA9IDA7IGkgPCBzaXpl OyBpKz1zaXplb2YocGF0dGVybikpCisJeworCQlpZiAobWVtY21wKHB0ciwgcGF0dGVybiwgc2l6 ZW9mKHBhdHRlcm4pKSAhPSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkCit0ZXN0X2NvcnJlY3Qodm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwlj aGFyICpwdHIxLCAqcHRyMjsKKwl1aW50MzJfdCBoYW5kbGU7CisKKwloYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCBCT19TSVpFKTsKKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7CisKKwlkbWFfYnVm X2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJybm8g PT0gMCk7CisKKwkvKiBDaGVjayBjb3JyZWN0bmVzcyB2cyBHRU1fTU1BUF9HVFQgKi8KKwlwdHIx ID0gZ2VtX21tYXAoZmQsIGhhbmRsZSwgQk9fU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7 CisJcHRyMiA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFf YnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0cjEgIT0gTUFQX0ZBSUxFRCk7CisJaWd0X2Fzc2Vy dChwdHIyICE9IE1BUF9GQUlMRUQpOworCWlndF9hc3NlcnQobWVtY21wKHB0cjEsIHB0cjIsIEJP X1NJWkUpID09IDApOworCisJLyogQ2hlY2sgcGF0dGVybiBjb3JyZWN0bmVzcyAqLworCWlndF9h c3NlcnQocGF0dGVybl9jaGVjayhwdHIyLCBCT19TSVpFKSA9PSAwKTsKKworCW11bm1hcChwdHIx LCBCT19TSVpFKTsKKwltdW5tYXAocHRyMiwgQk9fU0laRSk7CisJY2xvc2UoZG1hX2J1Zl9mZCk7 CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9tYXBfdW5t YXAodm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3QgaGFu ZGxlOworCisJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7CisJZmlsbF9ibyhoYW5k bGUsIEJPX1NJWkUpOworCisJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRsZV90b19mZChmZCwgaGFu ZGxlKTsKKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOworCisJcHRyID0gbW1hcChOVUxMLCBCT19T SVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOworCWlndF9hc3NlcnQo cHRyICE9IE1BUF9GQUlMRUQpOworCWlndF9hc3NlcnQocGF0dGVybl9jaGVjayhwdHIsIEJPX1NJ WkUpID09IDApOworCisJLyogVW5tYXAgYW5kIHJlbWFwICovCisJbXVubWFwKHB0ciwgQk9fU0la RSk7CisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRt YV9idWZfZmQsIDApOworCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOworCWlndF9hc3Nl cnQocGF0dGVybl9jaGVjayhwdHIsIEJPX1NJWkUpID09IDApOworCisJbXVubWFwKHB0ciwgQk9f U0laRSk7CisJY2xvc2UoZG1hX2J1Zl9mZCk7CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworfQor CisvKiBwcmltZSBhbmQgdGhlbiB1bnByaW1lIGFuZCB0aGVuIHByaW1lIGFnYWluIHRoZSBzYW1l IGhhbmRsZSAqLworc3RhdGljIHZvaWQKK3Rlc3RfcmVwcmltZSh2b2lkKQoreworCWludCBkbWFf YnVmX2ZkOworCWNoYXIgKnB0cjsKKwl1aW50MzJfdCBoYW5kbGU7CisKKwloYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCBCT19TSVpFKTsKKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7CisKKwlkbWFf YnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJy bm8gPT0gMCk7CisKKwlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVBRCwgTUFQX1NI QVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CisJ aWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0gMCk7CisKKwljbG9zZSAo ZG1hX2J1Zl9mZCk7CisJaWd0X2Fzc2VydChwYXR0ZXJuX2NoZWNrKHB0ciwgQk9fU0laRSkgPT0g MCk7CisJbXVubWFwKHB0ciwgQk9fU0laRSk7CisKKwlkbWFfYnVmX2ZkID0gcHJpbWVfaGFuZGxl X3RvX2ZkKGZkLCBoYW5kbGUpOworCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFE LCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJ TEVEKTsKKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKKwor CW11bm1hcChwdHIsIEJPX1NJWkUpOworCWNsb3NlKGRtYV9idWZfZmQpOworCWdlbV9jbG9zZShm ZCwgaGFuZGxlKTsKK30KKworLyogbWFwIGZyb20gYW5vdGhlciBwcm9jZXNzICovCitzdGF0aWMg dm9pZAordGVzdF9mb3JrZWQodm9pZCkKK3sKKwlpbnQgZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7 CisJdWludDMyX3QgaGFuZGxlOworCisJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7 CisJZmlsbF9ibyhoYW5kbGUsIEJPX1NJWkUpOworCisJZG1hX2J1Zl9mZCA9IHByaW1lX2hhbmRs ZV90b19mZChmZCwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGVycm5vID09IDApOworCisJaWd0X2Zv cmsoY2hpbGRubywgMSkgeworCQlwdHIgPSBtbWFwKE5VTEwsIEJPX1NJWkUsIFBST1RfUkVBRCwg TUFQX1NIQVJFRCwgZG1hX2J1Zl9mZCwgMCk7CisJCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlM RUQpOworCQlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKKwkJ bXVubWFwKHB0ciwgQk9fU0laRSk7CisJCWNsb3NlKGRtYV9idWZfZmQpOworCX0KKwljbG9zZShk bWFfYnVmX2ZkKTsKKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUp OworfQorCitzdGF0aWMgdm9pZAordGVzdF9yZWZjb3VudGluZyh2b2lkKQoreworCWludCBkbWFf YnVmX2ZkOworCWNoYXIgKnB0cjsKKwl1aW50MzJfdCBoYW5kbGU7CisKKwloYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCBCT19TSVpFKTsKKwlmaWxsX2JvKGhhbmRsZSwgQk9fU0laRSk7CisKKwlkbWFf YnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJy bm8gPT0gMCk7CisJLyogQ2xvc2UgZ2VtIG9iamVjdCBiZWZvcmUgbWFwcGluZyAqLworCWdlbV9j bG9zZShmZCwgaGFuZGxlKTsKKworCXB0ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9SRUFE LCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJ TEVEKTsKKwlpZ3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyLCBCT19TSVpFKSA9PSAwKTsKKwlt dW5tYXAocHRyLCBCT19TSVpFKTsKKwljbG9zZSAoZG1hX2J1Zl9mZCk7Cit9CisKKy8qIGR1cCBi ZWZvcmUgbW1hcCAqLworc3RhdGljIHZvaWQKK3Rlc3RfZHVwKHZvaWQpCit7CisJaW50IGRtYV9i dWZfZmQ7CisJY2hhciAqcHRyOworCXVpbnQzMl90IGhhbmRsZTsKKworCWhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKworCWRtYV9i dWZfZmQgPSBkdXAocHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpKTsKKwlpZ3RfYXNzZXJ0 KGVycm5vID09IDApOworCisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQUk9UX1JFQUQsIE1B UF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOworCWlndF9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQp OworCWlndF9hc3NlcnQocGF0dGVybl9jaGVjayhwdHIsIEJPX1NJWkUpID09IDApOworCW11bm1h cChwdHIsIEJPX1NJWkUpOworCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKKwljbG9zZSAoZG1hX2J1 Zl9mZCk7Cit9CisKKworLyogVXNlZCBmb3IgZXJyb3IgY2FzZSB0ZXN0aW5nIHRvIGF2b2lkIHdy YXBwZXIgKi8KK3N0YXRpYyBpbnQgcHJpbWVfaGFuZGxlX3RvX2ZkX25vX2Fzc2VydCh1aW50MzJf dCBoYW5kbGUsIGludCAqZmRfb3V0KQoreworCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIGFyZ3M7 CisJaW50IHJldDsKKworCWFyZ3MuaGFuZGxlID0gaGFuZGxlOworCWFyZ3MuZmxhZ3MgPSBEUk1f Q0xPRVhFQzsKKwlhcmdzLmZkID0gLTE7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RM X1BSSU1FX0hBTkRMRV9UT19GRCwgJmFyZ3MpOworCisJKmZkX291dCA9IGFyZ3MuZmQ7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAordGVzdF9lcnJvcnModm9pZCkKK3sKKwlpbnQg ZG1hX2J1Zl9mZDsKKwljaGFyICpwdHI7CisJdWludDMyX3QgaGFuZGxlOworCisJLyogQ2xvc2Ug Z2VtIG9iamVjdCBiZWZvcmUgcHJpbWluZyAqLworCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJP X1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKwlnZW1fY2xvc2UoZmQsIGhhbmRs ZSk7CisJcHJpbWVfaGFuZGxlX3RvX2ZkX25vX2Fzc2VydChoYW5kbGUsICZkbWFfYnVmX2ZkKTsK KwlpZ3RfYXNzZXJ0KGRtYV9idWZfZmQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKKwllcnJu byA9IDA7CisKKwkvKiBjbG9zZSBmZCBiZWZvcmUgbWFwcGluZyAqLworCWhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKwlkbWFfYnVm X2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJybm8g PT0gMCk7CisJY2xvc2UoZG1hX2J1Zl9mZCk7CisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFLCBQ Uk9UX1JFQUQsIE1BUF9TSEFSRUQsIGRtYV9idWZfZmQsIDApOworCWlndF9hc3NlcnQocHRyID09 IE1BUF9GQUlMRUQgJiYgZXJybm8gPT0gRUJBREYpOworCWVycm5vID0gMDsKKwlnZW1fY2xvc2Uo ZmQsIGhhbmRsZSk7CisKKwkvKiBNYXAgdG9vIGJpZyAqLworCWhhbmRsZSA9IGdlbV9jcmVhdGUo ZmQsIEJPX1NJWkUpOworCWZpbGxfYm8oaGFuZGxlLCBCT19TSVpFKTsKKwlkbWFfYnVmX2ZkID0g cHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZXJybm8gPT0gMCk7 CisJcHRyID0gbW1hcChOVUxMLCBCT19TSVpFICogMiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBk bWFfYnVmX2ZkLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0ciA9PSBNQVBfRkFJTEVEICYmIGVycm5vID09 IEVJTlZBTCk7CisJZXJybm8gPSAwOworCWNsb3NlKGRtYV9idWZfZmQpOworCWdlbV9jbG9zZShm ZCwgaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfYXBlcnR1cmVfbGltaXQodm9pZCkK K3sKKwlpbnQgZG1hX2J1Zl9mZDEsIGRtYV9idWZfZmQyOworCWNoYXIgKnB0cjEsICpwdHIyOwor CXVpbnQzMl90IGhhbmRsZTEsIGhhbmRsZTI7CisJLyogVHdvIGJ1ZmZlcnMgdGhlIHN1bSBvZiB3 aGljaCA+IG1hcHBhYmxlIGFwZXJ0dXJlICovCisJdWludDY0X3Qgc2l6ZTEgPSAoZ2VtX21hcHBh YmxlX2FwZXJ0dXJlX3NpemUoKSAqIDcpIC8gODsKKwl1aW50NjRfdCBzaXplMiA9IChnZW1fbWFw cGFibGVfYXBlcnR1cmVfc2l6ZSgpICogMykgLyA4OworCisJaGFuZGxlMSA9IGdlbV9jcmVhdGUo ZmQsIHNpemUxKTsKKwlmaWxsX2JvKGhhbmRsZTEsIEJPX1NJWkUpOworCisJZG1hX2J1Zl9mZDEg PSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZTEpOworCWlndF9hc3NlcnQoZXJybm8gPT0g MCk7CisJcHRyMSA9IG1tYXAoTlVMTCwgc2l6ZTEsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZG1h X2J1Zl9mZDEsIDApOworCWlndF9hc3NlcnQocHRyMSAhPSBNQVBfRkFJTEVEKTsKKwlpZ3RfYXNz ZXJ0KHBhdHRlcm5fY2hlY2socHRyMSwgQk9fU0laRSkgPT0gMCk7CisKKwloYW5kbGUyID0gZ2Vt X2NyZWF0ZShmZCwgc2l6ZTEpOworCWZpbGxfYm8oaGFuZGxlMiwgQk9fU0laRSk7CisJZG1hX2J1 Zl9mZDIgPSBwcmltZV9oYW5kbGVfdG9fZmQoZmQsIGhhbmRsZTIpOworCWlndF9hc3NlcnQoZXJy bm8gPT0gMCk7CisJcHRyMiA9IG1tYXAoTlVMTCwgc2l6ZTIsIFBST1RfUkVBRCwgTUFQX1NIQVJF RCwgZG1hX2J1Zl9mZDIsIDApOworCWlndF9hc3NlcnQocHRyMiAhPSBNQVBfRkFJTEVEKTsKKwlp Z3RfYXNzZXJ0KHBhdHRlcm5fY2hlY2socHRyMiwgQk9fU0laRSkgPT0gMCk7CisKKwlpZ3RfYXNz ZXJ0KG1lbWNtcChwdHIxLCBwdHIyLCBCT19TSVpFKSA9PSAwKTsKKworCW11bm1hcChwdHIxLCBz aXplMSk7CisJbXVubWFwKHB0cjIsIHNpemUyKTsKKwljbG9zZShkbWFfYnVmX2ZkMSk7CisJY2xv c2UoZG1hX2J1Zl9mZDIpOworCWdlbV9jbG9zZShmZCwgaGFuZGxlMSk7CisJZ2VtX2Nsb3NlKGZk LCBoYW5kbGUyKTsKK30KKworc3RhdGljIGludAorY2hlY2tfZm9yX2RtYV9idWZfbW1hcCh2b2lk KQoreworCWludCBkbWFfYnVmX2ZkOworCWNoYXIgKnB0cjsKKwl1aW50MzJfdCBoYW5kbGU7CisJ aW50IHJldCA9IDE7CisKKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKKwlkbWFf YnVmX2ZkID0gcHJpbWVfaGFuZGxlX3RvX2ZkKGZkLCBoYW5kbGUpOworCXB0ciA9IG1tYXAoTlVM TCwgQk9fU0laRSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkbWFfYnVmX2ZkLCAwKTsKKwlpZiAo cHRyICE9IE1BUF9GQUlMRUQpCisJCXJldCA9IDA7CisJbXVubWFwKHB0ciwgQk9fU0laRSk7CisJ Z2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworCWNsb3NlIChkbWFfYnVmX2ZkKTsKKwlyZXR1cm4gcmV0 OworfQorCitpZ3RfbWFpbgoreworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXZv aWQgKCpmbikodm9pZCk7CisJfSB0ZXN0c1tdID0geworCQl7ICJ0ZXN0X2NvcnJlY3QiLCB0ZXN0 X2NvcnJlY3QgfSwKKwkJeyAidGVzdF9tYXBfdW5tYXAiLCB0ZXN0X21hcF91bm1hcCB9LAorCQl7 ICJ0ZXN0X3JlcHJpbWUiLCB0ZXN0X3JlcHJpbWUgfSwKKwkJeyAidGVzdF9mb3JrZWQiLCB0ZXN0 X2ZvcmtlZCB9LAorCQl7ICJ0ZXN0X3JlZmNvdW50aW5nIiwgdGVzdF9yZWZjb3VudGluZyB9LAor CQl7ICJ0ZXN0X2R1cCIsIHRlc3RfZHVwIH0sCisJCXsgInRlc3RfZXJyb3JzIiwgdGVzdF9lcnJv cnMgfSwKKwkJeyAidGVzdF9hcGVydHVyZV9saW1pdCIsIHRlc3RfYXBlcnR1cmVfbGltaXQgfSwK Kwl9OworCWludCBpOworCisJaWd0X2ZpeHR1cmUgeworCQlmZCA9IGRybV9vcGVuX2FueSgpOwor CQllcnJubyA9IDA7CisJfQorCisJaWd0X3NraXBfb24oKGNoZWNrX2Zvcl9kbWFfYnVmX21tYXAo KSAhPSAwKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykgewor CQlpZ3Rfc3VidGVzdCh0ZXN0c1tpXS5uYW1lKQorCQkJdGVzdHNbaV0uZm4oKTsKKwl9CisKKwlp Z3RfZml4dHVyZQorCQljbG9zZShmZCk7Cit9Ci0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK