From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 327F96E8AF for ; Fri, 20 Nov 2020 11:32:11 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 20 Nov 2020 12:31:17 +0100 Message-Id: <20201120113131.67971-18-zbigniew.kempczynski@intel.com> In-Reply-To: <20201120113131.67971-1-zbigniew.kempczynski@intel.com> References: <20201120113131.67971-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v10 17/31] tests/api_intel_allocator: Simple allocator test suite List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: RnJvbTogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgoK V2Ugd2FudCB0byB2ZXJpZnkgYWxsb2NhdG9yIHdvcmtzIGFzIGV4cGVjdGVkLiBUcnkgdG8gZXhw bG9pdCBpdC4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcu a2VtcGN6eW5za2lAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEb21pbmlrIEdyemVnb3J6ZWsg PGRvbWluaWsuZ3J6ZWdvcnpla0BpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KLS0tCiB0ZXN0cy9pOTE1L2FwaV9pbnRlbF9hbGxvY2F0b3IuYyB8 IDU4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICB8ICAgMSArCiAyIGZpbGVzIGNoYW5nZWQsIDU5MCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9hcGlfaW50ZWxfYWxsb2NhdG9yLmMKCmRp ZmYgLS1naXQgYS90ZXN0cy9pOTE1L2FwaV9pbnRlbF9hbGxvY2F0b3IuYyBiL3Rlc3RzL2k5MTUv YXBpX2ludGVsX2FsbG9jYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw Li44NDM2NmU3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUvYXBpX2ludGVsX2FsbG9j YXRvci5jCkBAIC0wLDAgKzEsNTg5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRhdG9taWMuaD4KKyNpbmNsdWRlICJpOTE1L2dlbS5o IgorI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9hdXguaCIKKyNpbmNsdWRlICJpbnRl bF9hbGxvY2F0b3IuaCIKKworI2RlZmluZSBPQkpfU0laRSAxMDI0CisKK3N0cnVjdCB0ZXN0X29i aiB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IG9mZnNldDsKKwl1aW50NjRfdCBzaXpl OworfTsKKworc3RhdGljIF9BdG9taWModWludDMyX3QpIG5leHRfaGFuZGxlOworCitzdGF0aWMg aW5saW5lIHVpbnQzMl90IGdlbV9oYW5kbGVfZ2VuKHZvaWQpCit7CisJcmV0dXJuIGF0b21pY19m ZXRjaF9hZGQoJm5leHRfaGFuZGxlLCAxKTsKK30KKworc3RhdGljIHZvaWQgYWxsb2Nfc2ltcGxl KGludCBmZCkKK3sKKwl1aW50NjRfdCBpYWxoOworCXVpbnQ2NF90IG9mZnNldDAsIG9mZnNldDE7 CisJYm9vbCBpc19hbGxvY2F0ZWQsIGZyZWVkOworCisJaWFsaCA9IGludGVsX2FsbG9jYXRvcl9v cGVuKGZkLCAwLCBJTlRFTF9BTExPQ0FUT1JfU0lNUExFKTsKKworCW9mZnNldDAgPSBpbnRlbF9h bGxvY2F0b3JfYWxsb2MoaWFsaCwgMSwgMHgxMDAwLCAweDEwMDApOworCW9mZnNldDEgPSBpbnRl bF9hbGxvY2F0b3JfYWxsb2MoaWFsaCwgMSwgMHgxMDAwLCAweDEwMDApOworCWlndF9hc3NlcnQo b2Zmc2V0MCA9PSBvZmZzZXQxKTsKKworCWlzX2FsbG9jYXRlZCA9IGludGVsX2FsbG9jYXRvcl9p c19hbGxvY2F0ZWQoaWFsaCwgMSwgMHgxMDAwLCBvZmZzZXQwKTsKKwlpZ3RfYXNzZXJ0KGlzX2Fs bG9jYXRlZCk7CisKKwlmcmVlZCA9IGludGVsX2FsbG9jYXRvcl9mcmVlKGlhbGgsIDEpOworCWln dF9hc3NlcnQoZnJlZWQpOworCisJaXNfYWxsb2NhdGVkID0gaW50ZWxfYWxsb2NhdG9yX2lzX2Fs bG9jYXRlZChpYWxoLCAxLCAweDEwMDAsIG9mZnNldDApOworCWlndF9hc3NlcnQoIWlzX2FsbG9j YXRlZCk7CisKKwlmcmVlZCA9IGludGVsX2FsbG9jYXRvcl9mcmVlKGlhbGgsIDEpOworCWlndF9h c3NlcnQoIWZyZWVkKTsKKworCWludGVsX2FsbG9jYXRvcl9jbG9zZShpYWxoKTsKK30KKworc3Rh dGljIHZvaWQgcmVzZXJ2ZV9zaW1wbGUoaW50IGZkKQoreworCXVpbnQ2NF90IGlhbGg7CisJdWlu dDY0X3Qgc3RhcnQ7CisJYm9vbCByZXNlcnZlZCwgdW5yZXNlcnZlZDsKKworCWlhbGggPSBpbnRl bF9hbGxvY2F0b3Jfb3BlbihmZCwgMCwgSU5URUxfQUxMT0NBVE9SX1NJTVBMRSk7CisJaW50ZWxf YWxsb2NhdG9yX2dldF9hZGRyZXNzX3JhbmdlKGlhbGgsICZzdGFydCwgTlVMTCk7CisKKwlyZXNl cnZlZCA9IGludGVsX2FsbG9jYXRvcl9yZXNlcnZlKGlhbGgsIDAsIDB4MTAwMCwgc3RhcnQpOwor CWlndF9hc3NlcnQocmVzZXJ2ZWQpOworCisJcmVzZXJ2ZWQgPSBpbnRlbF9hbGxvY2F0b3JfaXNf cmVzZXJ2ZWQoaWFsaCwgMHgxMDAwLCBzdGFydCk7CisJaWd0X2Fzc2VydChyZXNlcnZlZCk7CisK KwlyZXNlcnZlZCA9IGludGVsX2FsbG9jYXRvcl9yZXNlcnZlKGlhbGgsIDAsIDB4MTAwMCwgc3Rh cnQpOworCWlndF9hc3NlcnQoIXJlc2VydmVkKTsKKworCXVucmVzZXJ2ZWQgPSBpbnRlbF9hbGxv Y2F0b3JfdW5yZXNlcnZlKGlhbGgsIDAsIDB4MTAwMCwgc3RhcnQpOworCWlndF9hc3NlcnQodW5y ZXNlcnZlZCk7CisKKwlyZXNlcnZlZCA9IGludGVsX2FsbG9jYXRvcl9pc19yZXNlcnZlZChpYWxo LCAweDEwMDAsIHN0YXJ0KTsKKwlpZ3RfYXNzZXJ0KCFyZXNlcnZlZCk7CisKKwlpbnRlbF9hbGxv Y2F0b3JfY2xvc2UoaWFsaCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX2JiKGludCBmZCkKK3sK KwlzdHJ1Y3QgYnVmX29wcyAqYm9wczsKKwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisJc3RydWN0 IGludGVsX2JiICppYmI7CisJdWludDY0X3Qgb2Zmc2V0MCwgb2Zmc2V0MTsKKworCWJvcHMgPSBi dWZfb3BzX2NyZWF0ZShmZCk7CisJYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA1MTIsIDUx MiwgMzIsIDAsIEk5MTVfVElMSU5HX05PTkUsCisJCQkgICAgICAgSTkxNV9DT01QUkVTU0lPTl9O T05FKTsKKwlpYmIgPSBpbnRlbF9iYl9jcmVhdGUoZmQsIDQwOTYpOworCWludGVsX2JiX3NldF9k ZWJ1ZyhpYmIsIHRydWUpOworCisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGJ1ZiwgZmFs c2UpOworCW9mZnNldDAgPSBidWYtPmFkZHIub2Zmc2V0OworCisJaW50ZWxfYmJfcmVzZXQoaWJi LCB0cnVlKTsKKwlidWYtPmFkZHIub2Zmc2V0ID0gSU5URUxfQlVGX0lOVkFMSURfQUREUkVTUzsK KworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBidWYsIGZhbHNlKTsKKwlvZmZzZXQxID0g YnVmLT5hZGRyLm9mZnNldDsKKworCWlndF9hc3NlcnQob2Zmc2V0MCA9PSBvZmZzZXQxKTsKKwor CWludGVsX2J1Zl9kZXN0cm95KGJ1Zik7CisJaW50ZWxfYmJfZGVzdHJveShpYmIpOworCWJ1Zl9v cHNfZGVzdHJveShib3BzKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXJ2ZShpbnQgZmQsIHVpbnQ4 X3QgdHlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWw7CisJc3RydWN0IHRlc3Rf b2JqIG9iajsKKworCWlhbCA9IGZyb21fdXNlcl9wb2ludGVyKGludGVsX2FsbG9jYXRvcl9vcGVu KGZkLCAwLCB0eXBlKSk7CisKKwlpZ3RfYXNzZXJ0KGlhbC0+cmVzZXJ2ZShpYWwsIDAsIDB4NDAw MDAsIDB4ODAwMDAwKSk7CisJLyogdHJ5IHJlc2VydmUgb25jZSBhZ2FpbiAqLworCWlndF9hc3Nl cnRfZXEoaWFsLT5yZXNlcnZlKGlhbCwgMCwgMHg0MDA0MCwgMHg3MDAwMDApLCBmYWxzZSk7CisK KwlvYmouaGFuZGxlID0gZ2VtX2hhbmRsZV9nZW4oKTsKKwlvYmouc2l6ZSA9IE9CSl9TSVpFOwor CW9iai5vZmZzZXQgPSBpYWwtPmFsbG9jKGlhbCwgb2JqLmhhbmRsZSwgb2JqLnNpemUsIDApOwor CisJaWd0X2Fzc2VydF9lcShpYWwtPnJlc2VydmUoaWFsLCAwLCBvYmoub2Zmc2V0LAorCQkJCW9i ai5vZmZzZXQgKyBvYmouc2l6ZSksIGZhbHNlKTsKKwlpYWwtPmZyZWUoaWFsLCBvYmouaGFuZGxl KTsKKwlpZ3RfYXNzZXJ0X2VxKGlhbC0+cmVzZXJ2ZShpYWwsIDAsIG9iai5vZmZzZXQsCisJCQkJ b2JqLm9mZnNldCArIG9iai5zaXplKSwgdHJ1ZSk7CisKKwlpYWwtPnVucmVzZXJ2ZShpYWwsIDAs IG9iai5vZmZzZXQsIG9iai5vZmZzZXQgKyBvYmouc2l6ZSk7CisJaWFsLT51bnJlc2VydmUoaWFs LCAwLCAweDQwMDAwLCAweDgwMDAwMCk7CisJaWd0X2Fzc2VydChpYWwtPnJlc2VydmUoaWFsLCAw LCAweDQwMDQwLCAweDcwMDAwMCkpOworCWlhbC0+dW5yZXNlcnZlKGlhbCwgMCwgMHg0MDA0MCwg MHg3MDAwMDApOworCisJaWd0X2Fzc2VydChpYWwtPmlzX2VtcHR5KGlhbCkpOworCisJaW50ZWxf YWxsb2NhdG9yX2Nsb3NlKHRvX3VzZXJfcG9pbnRlcihpYWwpKTsKK30KKworc3RhdGljIGJvb2wg b3ZlcmxhcHMoc3RydWN0IHRlc3Rfb2JqICpidWYxLCBzdHJ1Y3QgdGVzdF9vYmogKmJ1ZjIpCit7 CisJdWludDY0X3QgYmVnaW4xID0gYnVmMS0+b2Zmc2V0OworCXVpbnQ2NF90IGVuZDEgPSBidWYx LT5vZmZzZXQgKyBidWYxLT5zaXplOworCXVpbnQ2NF90IGJlZ2luMiA9IGJ1ZjItPm9mZnNldDsK Kwl1aW50NjRfdCBlbmQyID0gYnVmMi0+b2Zmc2V0ICsgYnVmMi0+c2l6ZTsKKworCXJldHVybiAo ZW5kMSA+IGJlZ2luMiAmJiBlbmQyID4gZW5kMSkgfHwgKGVuZDIgPiBiZWdpbjEgJiYgZW5kMSA+ IGVuZDIpOworfQorCitzdGF0aWMgdm9pZCBiYXNpY19hbGxvYyhpbnQgZmQsIGludCBjbnQsIHVp bnQ4X3QgdHlwZSkKK3sKKwlzdHJ1Y3QgdGVzdF9vYmogKm9iajsKKwlzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICppYWw7CisJaW50IGksIGo7CisKKwlpYWwgPSBmcm9tX3VzZXJfcG9pbnRlcihpbnRl bF9hbGxvY2F0b3Jfb3BlbihmZCwgMCwgdHlwZSkpOworCW9iaiA9IG1hbGxvYyhzaXplb2Yoc3Ry dWN0IHRlc3Rfb2JqKSAqIGNudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJ aWd0X3Byb2dyZXNzKCJhbGxvY2F0aW5nIG9iamVjdHM6ICIsIGksIGNudCk7CisJCW9ialtpXS5o YW5kbGUgPSBnZW1faGFuZGxlX2dlbigpOworCQlvYmpbaV0uc2l6ZSA9IE9CSl9TSVpFOworCQlv YmpbaV0ub2Zmc2V0ID0gaWFsLT5hbGxvYyhpYWwsIG9ialtpXS5oYW5kbGUsCisJCQkJCSAgIG9i altpXS5zaXplLCA0MDk2KTsKKwkJaWd0X2Fzc2VydF9lcShvYmpbaV0ub2Zmc2V0ICUgNDA5Niwg MCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCWlndF9wcm9ncmVzcygi Y2hlY2sgb3ZlcmxhcHBpbmc6ICIsIGksIGNudCk7CisKKwkJaWYgKHR5cGUgPT0gSU5URUxfQUxM T0NBVE9SX1JBTkRPTSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBjbnQ7IGor KykgeworCQkJaWYgKGogPT0gaSkKKwkJCQljb250aW51ZTsKKwkJCQlpZ3RfYXNzZXJ0KCFvdmVy bGFwcygmb2JqW2ldLCAmb2JqW2pdKSk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY250 OyBpKyspIHsKKwkJaWd0X3Byb2dyZXNzKCJmcmVlaW5nIG9iamVjdHM6ICIsIGksIGNudCk7CisJ CWlhbC0+ZnJlZShpYWwsIG9ialtpXS5oYW5kbGUpOworCX0KKworCWlndF9hc3NlcnQoaWFsLT5p c19lbXB0eShpYWwpKTsKKworCWZyZWUob2JqKTsKKwlpbnRlbF9hbGxvY2F0b3JfY2xvc2UodG9f dXNlcl9wb2ludGVyKGlhbCkpOworfQorCitzdGF0aWMgdm9pZCByZXVzZShpbnQgZmQsIHVpbnQ4 X3QgdHlwZSkKK3sKKwlzdHJ1Y3QgdGVzdF9vYmogb2JqWzEyOF0sIHRtcDsKKwlzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yICppYWw7CisJdWludDY0X3QgcHJldl9vZmZzZXQ7CisJaW50IGk7CisKKwlp YWwgPSBmcm9tX3VzZXJfcG9pbnRlcihpbnRlbF9hbGxvY2F0b3Jfb3BlbihmZCwgMCwgdHlwZSkp OworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCW9ialtpXS5oYW5kbGUgPSBnZW1f aGFuZGxlX2dlbigpOworCQlvYmpbaV0uc2l6ZSA9IE9CSl9TSVpFOworCQlvYmpbaV0ub2Zmc2V0 ID0gaWFsLT5hbGxvYyhpYWwsIG9ialtpXS5oYW5kbGUsCisJCQkJCSAgIG9ialtpXS5zaXplLCAw eDQwKTsKKwl9CisKKwkvKiBjaGVjayBzaW1wbGUgcmV1c2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwg MTI4OyBpKyspIHsKKwkJcHJldl9vZmZzZXQgPSBvYmpbaV0ub2Zmc2V0OworCQlvYmpbaV0ub2Zm c2V0ID0gaWFsLT5hbGxvYyhpYWwsIG9ialtpXS5oYW5kbGUsIG9ialtpXS5zaXplLCAwKTsKKwkJ aWd0X2Fzc2VydChwcmV2X29mZnNldCA9PSBvYmpbaV0ub2Zmc2V0KTsKKwl9CisJaS0tOworCisJ LyogZnJlZSBibyBwcmV2b3VzbHkgYWxsb2NlZCAqLworCWlhbC0+ZnJlZShpYWwsIG9ialtpXS5o YW5kbGUpOworCS8qIGFsbG9jIGRpZmZlcmVudCBidWZmZXIgdG8gZmlsbCBmcmVlZCBob2xlICov CisJdG1wLmhhbmRsZSA9IGdlbV9oYW5kbGVfZ2VuKCk7CisJdG1wLm9mZnNldCA9IGlhbC0+YWxs b2MoaWFsLCB0bXAuaGFuZGxlLCBPQkpfU0laRSwgMCk7CisJaWd0X2Fzc2VydChwcmV2X29mZnNl dCA9PSB0bXAub2Zmc2V0KTsKKworCW9ialtpXS5vZmZzZXQgPSBpYWwtPmFsbG9jKGlhbCwgb2Jq W2ldLmhhbmRsZSwgb2JqW2ldLnNpemUsIDApOworCWlndF9hc3NlcnQocHJldl9vZmZzZXQgIT0g b2JqW2ldLm9mZnNldCk7CisJaWFsLT5mcmVlKGlhbCwgdG1wLmhhbmRsZSk7CisKKwlmb3IgKGkg PSAwOyBpIDwgMTI4OyBpKyspCisJCWlhbC0+ZnJlZShpYWwsIG9ialtpXS5oYW5kbGUpOworCisJ aWd0X2Fzc2VydChpYWwtPmlzX2VtcHR5KGlhbCkpOworCisJaW50ZWxfYWxsb2NhdG9yX2Nsb3Nl KHRvX3VzZXJfcG9pbnRlcihpYWwpKTsKK30KKworc3RydWN0IGlhbF90aHJlYWRfYXJncyB7CisJ c3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsOworCXB0aHJlYWRfdCB0aHJlYWQ7CisJdWludDMy X3QgKmhhbmRsZXM7CisJdWludDY0X3QgKm9mZnNldHM7CisJdWludDMyX3QgY291bnQ7CisJaW50 IHRocmVhZHM7CisJaW50IGlkeDsKK307CisKK3N0YXRpYyB2b2lkICphbGxvY19ib19pbl90aHJl YWQodm9pZCAqYXJnKQoreworCXN0cnVjdCBpYWxfdGhyZWFkX2FyZ3MgKmEgPSBhcmc7CisJaW50 IGk7CisKKwlmb3IgKGkgPSBhLT5pZHg7IGkgPCBhLT5jb3VudDsgaSArPSBhLT50aHJlYWRzKSB7 CisJCWEtPmhhbmRsZXNbaV0gPSBnZW1faGFuZGxlX2dlbigpOworCQlwdGhyZWFkX211dGV4X2xv Y2soJmEtPmlhbC0+bXV0ZXgpOworCQlhLT5vZmZzZXRzW2ldID0gYS0+aWFsLT5hbGxvYyhhLT5p YWwsIGEtPmhhbmRsZXNbaV0sIE9CSl9TSVpFLAorCQkJCQkgICAgICAxVUwgPDwgKChyYW5kb20o KSAlIDIwKSArIDEpKTsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJmEtPmlhbC0+bXV0ZXgpOwor CX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZnJlZV9ib19pbl90aHJlYWQo dm9pZCAqYXJnKQoreworCXN0cnVjdCBpYWxfdGhyZWFkX2FyZ3MgKmEgPSBhcmc7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAoYS0+aWR4ICsgMSkgJSBhLT50aHJlYWRzOyBpIDwgYS0+Y291bnQ7IGkg Kz0gYS0+dGhyZWFkcykgeworCQlwdGhyZWFkX211dGV4X2xvY2soJmEtPmlhbC0+bXV0ZXgpOwor CQlhLT5pYWwtPmZyZWUoYS0+aWFsLCBhLT5oYW5kbGVzW2ldKTsKKwkJcHRocmVhZF9tdXRleF91 bmxvY2soJmEtPmlhbC0+bXV0ZXgpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisjZGVmaW5l IFRIUkVBRFMgNgorCitzdGF0aWMgdm9pZCBwYXJhbGxlbF9vbmUoaW50IGZkLCB1aW50OF90IHR5 cGUpCit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsOworCXN0cnVjdCBpYWxfdGhyZWFk X2FyZ3MgYVtUSFJFQURTXTsKKwl1aW50MzJfdCAqaGFuZGxlczsKKwl1aW50NjRfdCAqb2Zmc2V0 czsKKwlpbnQgY291bnQsIGk7CisKKwlzcmFuZG9tKDB4ZGVhZGJlZWYpOworCWlhbCA9IGZyb21f dXNlcl9wb2ludGVyKGludGVsX2FsbG9jYXRvcl9vcGVuKGZkLCAwLCB0eXBlKSk7CisJY291bnQg PSAxVUwgPDwgMTI7CisKKwloYW5kbGVzID0gbWFsbG9jKHNpemVvZih1aW50MzJfdCkgKiBjb3Vu dCk7CisJb2Zmc2V0cyA9IGNhbGxvYygxLCBzaXplb2YodWludDY0X3QpICogY291bnQpOworCisJ Zm9yIChpID0gMDsgaSA8IFRIUkVBRFM7IGkrKykgeworCQlhW2ldLmlhbCA9IGlhbDsKKwkJYVtp XS5oYW5kbGVzID0gaGFuZGxlczsKKwkJYVtpXS5vZmZzZXRzID0gb2Zmc2V0czsKKwkJYVtpXS5j b3VudCA9IGNvdW50OworCQlhW2ldLnRocmVhZHMgPSBUSFJFQURTOworCQlhW2ldLmlkeCA9IGk7 CisJCXB0aHJlYWRfY3JlYXRlKCZhW2ldLnRocmVhZCwgTlVMTCwgYWxsb2NfYm9faW5fdGhyZWFk LCAmYVtpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRIUkVBRFM7IGkrKykKKwkJcHRocmVh ZF9qb2luKGFbaV0udGhyZWFkLCBOVUxMKTsKKworCS8qIENoZWNrIGlmIGFsbCBvYmplY3RzIGFy ZSBhbG9jYXRlZCAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJLyogUmFuZG9t IGFsbG9jYXRvciBkb24ndCBoYXZlIHN0YXRlLiBBbHdheXMgcmV0dXJucyBkaWZmZXJlbnQgb2Zm c2V0ICovCisJCWlmICh0eXBlID09IElOVEVMX0FMTE9DQVRPUl9SQU5ET00pCisJCQlicmVhazsK KworCQlpZ3RfYXNzZXJ0X2VxKG9mZnNldHNbaV0sCisJCQkgICAgICBhLT5pYWwtPmFsbG9jKGlh bCwgaGFuZGxlc1tpXSwgT0JKX1NJWkUsIDApKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVEhS RUFEUzsgaSsrKQorCQlwdGhyZWFkX2NyZWF0ZSgmYVtpXS50aHJlYWQsIE5VTEwsIGZyZWVfYm9f aW5fdGhyZWFkLCAmYVtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVEhSRUFEUzsgaSsrKQorCQlw dGhyZWFkX2pvaW4oYVtpXS50aHJlYWQsIE5VTEwpOworCisJLyogQ2hlY2sgaWYgYWxsIG9mZnNl dHMgd2hlcmUgb2JqZWN0cyB3ZXJlIGFyZSBmcmVlICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKKwkJaWYgKHR5cGUgPT0gSU5URUxfQUxMT0NBVE9SX1JBTkRPTSkKKwkJCWJyZWFr OworCisJCWlndF9hc3NlcnQoaWFsLT5yZXNlcnZlKGlhbCwgMCwgb2Zmc2V0c1tpXSwgb2Zmc2V0 c1tpXSArIDEpKTsKKwl9CisKKwlmcmVlKGhhbmRsZXMpOworCWZyZWUob2Zmc2V0cyk7CisKKwlp bnRlbF9hbGxvY2F0b3JfY2xvc2UodG9fdXNlcl9wb2ludGVyKGlhbCkpOworfQorCisjZGVmaW5l IFNJTVBMRV9HUk9VUF9BTExPQ1MgMQorc3RhdGljIHZvaWQgX19zaW1wbGVfYWxsb2NzKGludCBm ZCkKK3sKKwl1aW50MzJfdCBoYW5kbGVzW1NJTVBMRV9HUk9VUF9BTExPQ1NdOworCXVpbnQ2NF90 IGFobmQ7CisJdWludDMyX3QgY3R4OworCWludCBpOworCisJY3R4ID0gcmFuZCgpICUgMjsKKwlh aG5kID0gaW50ZWxfYWxsb2NhdG9yX29wZW4oZmQsIGN0eCwgSU5URUxfQUxMT0NBVE9SX1NJTVBM RSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0lNUExFX0dST1VQX0FMTE9DUzsgaSsrKSB7CisJCXVp bnQzMl90IHNpemU7CisKKwkJc2l6ZSA9IChyYW5kKCkgJSA0ICsgMSkgKiAweDEwMDA7CisJCWhh bmRsZXNbaV0gPSBnZW1fY3JlYXRlKGZkLCBzaXplKTsKKwkJaW50ZWxfYWxsb2NhdG9yX2FsbG9j KGFobmQsIGhhbmRsZXNbaV0sIHNpemUsIDB4MTAwMCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IFNJTVBMRV9HUk9VUF9BTExPQ1M7IGkrKykgeworCQlpZ3RfYXNzZXJ0X2YoaW50ZWxfYWxsb2Nh dG9yX2ZyZWUoYWhuZCwgaGFuZGxlc1tpXSkgPT0gMSwKKwkJCSAgICAgIkVycm9yIGZyZWVpbmcg aGFuZGxlOiAldVxuIiwgaGFuZGxlc1tpXSk7CisJCWdlbV9jbG9zZShmZCwgaGFuZGxlc1tpXSk7 CisJfQorCisJaW50ZWxfYWxsb2NhdG9yX2Nsb3NlKGFobmQpOworfQorCitzdGF0aWMgdm9pZCBm b3JrX3NpbXBsZV9vbmNlKGludCBmZCkKK3sKKwlpbnRlbF9hbGxvY2F0b3JfbXVsdGlwcm9jZXNz X3N0YXJ0KCk7CisKKwlpZ3RfZm9yayhjaGlsZCwgMSkKKwkJX19zaW1wbGVfYWxsb2NzKGZkKTsK KworCWlndF93YWl0Y2hpbGRyZW4oKTsKKworCWludGVsX2FsbG9jYXRvcl9tdWx0aXByb2Nlc3Nf c3RvcCgpOworfQorCisjZGVmaW5lIFNJTVBMRV9USU1FT1VUIDUKK3N0YXRpYyB2b2lkICpfX2Zv cmtfc2ltcGxlX3RocmVhZCh2b2lkICpkYXRhKQoreworCWludCBmZCA9IChpbnQpIChsb25nKSBk YXRhOworCisJaWd0X3VudGlsX3RpbWVvdXQoU0lNUExFX1RJTUVPVVQpIHsKKwkJX19zaW1wbGVf YWxsb2NzKGZkKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZm9ya19z aW1wbGVfc3RyZXNzKGludCBmZCwgYm9vbCB0d29fbGV2ZWxfaW5jZXB0aW9uKQoreworCXB0aHJl YWRfdCB0aHJlYWQwLCB0aHJlYWQxOworCXVpbnQ2NF90IGFobmQwLCBhaG5kMTsKKwlib29sIGFy ZV9lbXB0eTsKKworCWludGVsX2FsbG9jYXRvcl9tdWx0aXByb2Nlc3Nfc3RhcnQoKTsKKworCWFo bmQwID0gaW50ZWxfYWxsb2NhdG9yX29wZW4oZmQsIDAsIElOVEVMX0FMTE9DQVRPUl9TSU1QTEUp OworCWFobmQxID0gaW50ZWxfYWxsb2NhdG9yX29wZW4oZmQsIDEsIElOVEVMX0FMTE9DQVRPUl9T SU1QTEUpOworCisJcHRocmVhZF9jcmVhdGUoJnRocmVhZDAsIE5VTEwsIF9fZm9ya19zaW1wbGVf dGhyZWFkLCAodm9pZCAqKSAobG9uZykgZmQpOworCXB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQxLCBO VUxMLCBfX2Zvcmtfc2ltcGxlX3RocmVhZCwgKHZvaWQgKikgKGxvbmcpIGZkKTsKKworCWlndF9m b3JrKGNoaWxkLCA4KSB7CisJCWlmICh0d29fbGV2ZWxfaW5jZXB0aW9uKSB7CisJCQlwdGhyZWFk X2NyZWF0ZSgmdGhyZWFkMCwgTlVMTCwgX19mb3JrX3NpbXBsZV90aHJlYWQsCisJCQkJICAgICAg ICh2b2lkICopIChsb25nKSBmZCk7CisJCQlwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkMSwgTlVMTCwg X19mb3JrX3NpbXBsZV90aHJlYWQsCisJCQkJICAgICAgICh2b2lkICopIChsb25nKSBmZCk7CisJ CX0KKworCQlpZ3RfdW50aWxfdGltZW91dChTSU1QTEVfVElNRU9VVCkgeworCQkJX19zaW1wbGVf YWxsb2NzKGZkKTsKKwkJfQorCisJCWlmICh0d29fbGV2ZWxfaW5jZXB0aW9uKSB7CisJCQlwdGhy ZWFkX2pvaW4odGhyZWFkMCwgTlVMTCk7CisJCQlwdGhyZWFkX2pvaW4odGhyZWFkMSwgTlVMTCk7 CisJCX0KKwl9CisJaWd0X3dhaXRjaGlsZHJlbigpOworCisJcHRocmVhZF9qb2luKHRocmVhZDAs IE5VTEwpOworCXB0aHJlYWRfam9pbih0aHJlYWQxLCBOVUxMKTsKKworCWFyZV9lbXB0eSA9IGlu dGVsX2FsbG9jYXRvcl9jbG9zZShhaG5kMCk7CisJYXJlX2VtcHR5ICY9IGludGVsX2FsbG9jYXRv cl9jbG9zZShhaG5kMSk7CisKKwlpbnRlbF9hbGxvY2F0b3JfbXVsdGlwcm9jZXNzX3N0b3AoKTsK KworCWlndF9hc3NlcnRfZihhcmVfZW1wdHksICJBbGxvY2F0b3JzIHdlcmUgbm90IGVtcHRpZWRc biIpOworfQorCitzdGF0aWMgdm9pZCBfX3Jlb3Blbl9hbGxvY3MoaW50IGZkMSwgaW50IGZkMikK K3sKKwl1aW50NjRfdCBhaG5kMCwgYWhuZDEsIGFobmQyOworCisJYWhuZDAgPSBpbnRlbF9hbGxv Y2F0b3Jfb3BlbihmZDEsIDAsIElOVEVMX0FMTE9DQVRPUl9TSU1QTEUpOworCWFobmQxID0gaW50 ZWxfYWxsb2NhdG9yX29wZW4oZmQyLCAwLCBJTlRFTF9BTExPQ0FUT1JfU0lNUExFKTsKKwlhaG5k MiA9IGludGVsX2FsbG9jYXRvcl9vcGVuKGZkMiwgMCwgSU5URUxfQUxMT0NBVE9SX1NJTVBMRSk7 CisJaWd0X2Fzc2VydChhaG5kMCAhPSBhaG5kMSk7CisJaWd0X2Fzc2VydChhaG5kMSA9PSBhaG5k Mik7CisKKwlpbnRlbF9hbGxvY2F0b3JfY2xvc2UoYWhuZDApOworCWludGVsX2FsbG9jYXRvcl9j bG9zZShhaG5kMSk7CisJaW50ZWxfYWxsb2NhdG9yX2Nsb3NlKGFobmQyKTsKK30KKworc3RhdGlj IHZvaWQgcmVvcGVuKGludCBmZCkKK3sKKwlpbnQgZmQyOworCisJaWd0X3JlcXVpcmVfZ2VtKGZk KTsKKworCWZkMiA9IGdlbV9yZW9wZW5fZHJpdmVyKGZkKTsKKworCV9fcmVvcGVuX2FsbG9jcyhm ZCwgZmQyKTsKKworCWNsb3NlKGZkMik7Cit9CisKKyNkZWZpbmUgUkVPUEVOX1RJTUVPVVQgMwor c3RhdGljIHZvaWQgcmVvcGVuX2ZvcmsoaW50IGZkKQoreworCWludCBmZDI7CisKKwlpZ3RfcmVx dWlyZV9nZW0oZmQpOworCisJaW50ZWxfYWxsb2NhdG9yX211bHRpcHJvY2Vzc19zdGFydCgpOwor CisJZmQyID0gZ2VtX3Jlb3Blbl9kcml2ZXIoZmQpOworCisJaWd0X2ZvcmsoY2hpbGQsIDEpIHsK KwkJaWd0X3VudGlsX3RpbWVvdXQoUkVPUEVOX1RJTUVPVVQpCisJCQlfX3Jlb3Blbl9hbGxvY3Mo ZmQsIGZkMik7CisJfQorCWlndF91bnRpbF90aW1lb3V0KFJFT1BFTl9USU1FT1VUKQorCQlfX3Jl b3Blbl9hbGxvY3MoZmQsIGZkMik7CisKKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7CisKKwljbG9zZShm ZDIpOworCisJaW50ZWxfYWxsb2NhdG9yX211bHRpcHJvY2Vzc19zdG9wKCk7Cit9CisKK3N0cnVj dCBhbGxvY2F0b3JzIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQ4X3QgdHlwZTsKK30gYWxz W10gPSB7CisJeyJzaW1wbGUiLCBJTlRFTF9BTExPQ0FUT1JfU0lNUExFfSwKKwl7InJhbmRvbSIs IElOVEVMX0FMTE9DQVRPUl9SQU5ET019LAorCXtOVUxMLCAwfSwKK307CisKK2lndF9tYWluCit7 CisJaW50IGZkOworCXN0cnVjdCBhbGxvY2F0b3JzICphOworCisJaWd0X2ZpeHR1cmUgeworCQlm ZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOworCQlhdG9taWNfaW5pdCgmbmV4dF9o YW5kbGUsIDEpOworCQlzcmFuZG9tKDB4ZGVhZGJlZWYpOworCX0KKworCWlndF9zdWJ0ZXN0X2Yo ImFsbG9jLXNpbXBsZSIpCisJCWFsbG9jX3NpbXBsZShmZCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJy ZXNlcnZlLXNpbXBsZSIpCisJCXJlc2VydmVfc2ltcGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0X2Yo InB1cmdlLWJiIikKKwkJcHVyZ2VfYmIoZmQpOworCisJaWd0X3N1YnRlc3RfZigicHJpbnQiKQor CQliYXNpY19hbGxvYyhmZCwgMVVMIDw8IDIsIElOVEVMX0FMTE9DQVRPUl9SQU5ET00pOworCisJ aWd0X3N1YnRlc3RfZigicmV1c2UiKQorCQlyZXVzZShmZCwgSU5URUxfQUxMT0NBVE9SX1NJTVBM RSk7CisKKwlpZ3Rfc3VidGVzdF9mKCJyZXNlcnZlIikKKwkJcmVzZXJ2ZShmZCwgSU5URUxfQUxM T0NBVE9SX1NJTVBMRSk7CisKKwlmb3IgKGEgPSBhbHM7IGEtPm5hbWU7IGErKykgeworCQlpZ3Rf c3VidGVzdF93aXRoX2R5bmFtaWNfZigiJXMtYWxsb2NhdG9yIiwgYS0+bmFtZSkgeworCQkJaWd0 X2R5bmFtaWMoImJhc2ljIikKKwkJCQliYXNpY19hbGxvYyhmZCwgMVVMIDw8IDgsIGEtPnR5cGUp OworCisJCQlpZ3RfZHluYW1pYygicGFyYWxsZWwtb25lIikKKwkJCQlwYXJhbGxlbF9vbmUoZmQs IGEtPnR5cGUpOworCisJCQlpZiAoYS0+dHlwZSAhPSBJTlRFTF9BTExPQ0FUT1JfUkFORE9NKSB7 CisJCQkJaWd0X2R5bmFtaWMoInJldXNlIikKKwkJCQkJcmV1c2UoZmQsIGEtPnR5cGUpOworCisJ CQkJaWd0X2R5bmFtaWMoInJlc2VydmUiKQorCQkJCQlyZXNlcnZlKGZkLCBhLT50eXBlKTsKKwkJ CX0KKwkJfQorCX0KKworCWlndF9zdWJ0ZXN0X2YoImZvcmstc2ltcGxlLW9uY2UiKQorCQlmb3Jr X3NpbXBsZV9vbmNlKGZkKTsKKworCWlndF9zdWJ0ZXN0X2YoImZvcmstc2ltcGxlLXN0cmVzcyIp CisJCWZvcmtfc2ltcGxlX3N0cmVzcyhmZCwgZmFsc2UpOworCisJaWd0X3N1YnRlc3RfZigiZm9y ay1zaW1wbGUtc3RyZXNzLXNpZ25hbCIpIHsKKwkJaWd0X2Zvcmtfc2lnbmFsX2hlbHBlcigpOwor CQlmb3JrX3NpbXBsZV9zdHJlc3MoZmQsIGZhbHNlKTsKKwkJaWd0X3N0b3Bfc2lnbmFsX2hlbHBl cigpOworCX0KKworCWlndF9zdWJ0ZXN0X2YoInR3by1sZXZlbC1pbmNlcHRpb24iKQorCQlmb3Jr X3NpbXBsZV9zdHJlc3MoZmQsIHRydWUpOworCisJaWd0X3N1YnRlc3RfZigidHdvLWxldmVsLWlu Y2VwdGlvbi1pbnRlcnJ1cHRpYmxlIikgeworCQlpZ3RfZm9ya19zaWduYWxfaGVscGVyKCk7CisJ CWZvcmtfc2ltcGxlX3N0cmVzcyhmZCwgdHJ1ZSk7CisJCWlndF9zdG9wX3NpZ25hbF9oZWxwZXIo KTsKKwl9CisKKwlpZ3Rfc3VidGVzdF9mKCJyZW9wZW4iKQorCQlyZW9wZW4oZmQpOworCisJaWd0 X3N1YnRlc3RfZigicmVvcGVuLWZvcmsiKQorCQlyZW9wZW5fZm9yayhmZCk7CisKKwlpZ3RfZml4 dHVyZQorCQljbG9zZShmZCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rl c3RzL21lc29uLmJ1aWxkCmluZGV4IGEyZGVjZjRhLi41N2Q3ZTkzZSAxMDA2NDQKLS0tIGEvdGVz dHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTExMCw2ICsxMTAsNyBA QCB0ZXN0X3Byb2dzID0gWwogXQogCiBpOTE1X3Byb2dzID0gWworCSdhcGlfaW50ZWxfYWxsb2Nh dG9yJywKIAknYXBpX2ludGVsX2JiJywKIAknZ2VuM19taXhlZF9ibGl0cycsCiAJJ2dlbjNfcmVu ZGVyX2xpbmVhcl9ibGl0cycsCi0tIAoyLjI2LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaWd0LWRldgo=