From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83E0B6E1A5 for ; Wed, 28 Jul 2021 15:13:04 +0000 (UTC) From: Andrzej Turko Date: Wed, 28 Jul 2021 17:12:07 +0200 Message-Id: <20210728151207.5322-6-andrzej.turko@linux.intel.com> In-Reply-To: <20210728151207.5322-1-andrzej.turko@linux.intel.com> References: <20210728151207.5322-1-andrzej.turko@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 5/5] benchmarks/intel_allocator: Test the allocator performance 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 List-ID: VGhpcyB0ZXN0cyB0aGUgYWxsb2NhdG9yIHdpdGggcmVnYXJkIHRvCmJvdGggcGVyZm9ybWFuY2Ug YW5kIGVmZmljaWVudCB1c2Ugb2YgdGhlCmFkZHJlc3Mgc3BhY2UuCgpTaWduZWQtb2ZmLWJ5OiBB bmRyemVqIFR1cmtvIDxhbmRyemVqLnR1cmtvQGxpbnV4LmludGVsLmNvbT4KQ2M6IFpiaWduaWV3 IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgotLS0KIGJlbmNo bWFya3MvaW50ZWxfYWxsb2NhdG9yLmMgfCA3NTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGJlbmNobWFya3MvbWVzb24uYnVpbGQgICAgICAgfCAgIDEgKwogMiBmaWxlcyBj aGFuZ2VkLCA3NTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJlbmNobWFya3Mv aW50ZWxfYWxsb2NhdG9yLmMKCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2ludGVsX2FsbG9jYXRv ci5jIGIvYmVuY2htYXJrcy9pbnRlbF9hbGxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjAwYmIyMDc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2JlbmNobWFya3Mv aW50ZWxfYWxsb2NhdG9yLmMKQEAgLTAsMCArMSw3NTYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfbWFwLmgiCisjaW5jbHVkZSAi aW50ZWxfYWxsb2NhdG9yLmgiCisKKy8vI2RlZmluZSBEQkcKKyNpZmRlZiBEQkcKKyNkZWZpbmUg aWFsX2RlYnVnKC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBlY2hv X3F1ZXJ5KC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUg aWFsX2RlYnVnKC4uLikge30KKyNkZWZpbmUgZWNob19xdWVyeSguLi4pIHt9CisjZW5kaWYKKwor c3RhdGljIF9BdG9taWModWludDMyX3QpIG5leHRfaGFuZGxlOworCitzdGF0aWMgaW5saW5lIHVp bnQzMl90IGdlbV9oYW5kbGVfZ2VuKHZvaWQpCit7CisJcmV0dXJuIGF0b21pY19mZXRjaF9hZGQo Jm5leHRfaGFuZGxlLCAxKTsKK30KKworc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3IgeworCXN0 cnVjdCBpZ3RfbGlzdF9oZWFkIGFsbG9jYXRlZDsKKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCByZXNl cnZlZDsKKworCXVpbnQ2NF90IGFsbG9jYXRvcl9oYW5kbGU7CisJdWludDY0X3QgdmFzX3N0YXJ0 OworCXVpbnQ2NF90IHZhc19lbmQ7Cit9OworCitzdHJ1Y3QgdmFfYmxvY2sgeworCXVpbnQ2NF90 IG9mZnNldDsKKwl1aW50NjRfdCBzaXplOworCXVpbnQzMl90IGhhbmRsZTsKKwlzdHJ1Y3QgaWd0 X2xpc3RfaGVhZCBsaW5rOworfTsKKworc3RydWN0IGFsbG9jX2Jsb2NrIHsKKwl1aW50NjRfdCBz aXplOworCXVpbnQzMl90IGhhbmRsZTsKKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBsaW5rOworfTsK Kworc3RydWN0IHJzdmRfYmxvY2sgeworCXVpbnQ2NF90IHNpemU7CisJdWludDY0X3Qgb2Zmc2V0 OworCXVpbnQzMl90IGhhbmRsZTsKK307CisKKyNkZWZpbmUgUVVFUllfQUxMT0MgMQorI2RlZmlu ZSBRVUVSWV9GUkVFIDIKKyNkZWZpbmUgUVVFUllfSVNfQUxMT0NBVEVEIDMKKyNkZWZpbmUgUVVF UllfUkVTRVJWRSA0CisjZGVmaW5lIFFVRVJZX1VOUkVTRVJWRSA1CisjZGVmaW5lIFFVRVJZX0lT X1JFU0VSVkVEIDYKKworI2RlZmluZSBNQVhURVNUTEVOICgxIDw8IDI0KQorI2RlZmluZSBOT19D SEVDSyAwCisjZGVmaW5lIENVUlNPUllfQ0hFQ0sgMQorI2RlZmluZSBUSE9ST1VHSF9DSEVDSyAy CisKK3N0cnVjdCBhbGxvY2F0b3JfcXVlcnkgeworCWludCB0eXBlOworCisJdW5pb24geworCQlz dHJ1Y3QgeworCQkJdWludDMyX3QgaGFuZGxlOworCQkJdWludDY0X3Qgc2l6ZTsKKwkJCXVpbnQ2 NF90IGFsaWdubWVudDsKKwkJfSBhbGxvYzsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGhhbmRs ZTsKKwkJfSBmcmVlOworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgaGFuZGxlOworCQkJdWludDY0 X3Qgc2l6ZTsKKwkJCXVpbnQ2NF90IG9mZnNldDsKKwkJfSBpc19hbGxvY2F0ZWQ7CisJCXN0cnVj dCB7CisJCQl1aW50MzJfdCBoYW5kbGU7CisJCQl1aW50NjRfdCBzaXplOworCQkJdWludDY0X3Qg b2Zmc2V0OworCQl9IHJlc2VydmU7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBoYW5kbGU7CisJ CQl1aW50NjRfdCBzaXplOworCQkJdWludDY0X3Qgb2Zmc2V0OworCQl9IHVucmVzZXJ2ZTsKKwkJ c3RydWN0IHsKKwkJCXVpbnQ2NF90IHNpemU7CisJCQl1aW50NjRfdCBvZmZzZXQ7CisJCX0gaXNf cmVzZXJ2ZWQ7CisJfTsKK307CisKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX2FsbG9jYXRvcihzdHJ1 Y3QgdmFsaWRhdGVkX2FsbG9jYXRvciAqdmEpCit7CisJc3RydWN0IHZhX2Jsb2NrICphLCAqYjsK KwlpbnQgc2FtZTsKKwlib29sIGlzX2FsbG9jYXRlZCwgaXNfcmVzZXJ2ZWQ7CisKKwlpZ3RfbGlz dF9mb3JfZWFjaF9lbnRyeShhLCAmdmEtPmFsbG9jYXRlZCwgbGluaykgeworCisJCWlndF9hc3Nl cnQoYS0+b2Zmc2V0ICsgYS0+c2l6ZSA+IGEtPm9mZnNldCk7CisJCXNhbWUgPSAwOworCQlpZ3Rf bGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmdmEtPmFsbG9jYXRlZCwgbGluaykgeworCisJCQlpZiAo YS0+aGFuZGxlID09IGItPmhhbmRsZSkgeworCQkJCXNhbWUrKzsKKwkJCX0gZWxzZSB7CisJCQkJ aWd0X2Fzc2VydF9mKChhLT5vZmZzZXQgPCBiLT5vZmZzZXQgJiYKKwkJCQkJICAgICAgYS0+b2Zm c2V0ICsgYS0+c2l6ZSA8PSBiLT5vZmZzZXQpIHx8CisJCQkJCSAgICAgKGItPm9mZnNldCA8IGEt Pm9mZnNldCAmJgorCQkJCQkgICAgICBiLT5vZmZzZXQgKyBiLT5zaXplIDw9IGEtPm9mZnNldCks CisJCQkJCSAgICAgIlR3byBhbGxvY2F0ZWQgYmxvY2tzIG92ZXJsYXAiKTsKKwkJCX0KKwkJfQor CQlpZ3RfYXNzZXJ0X2Yoc2FtZSA9PSAxLCAiQSBoYW5kbGUgYXBwZWFycyBtb3JlIHRoYW4gb25j ZS5cbiIpOworCX0KKworCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZ2YS0+cmVzZXJ2ZWQs IGxpbmspIHsKKworCQlpZ3RfYXNzZXJ0KGEtPm9mZnNldCArIGEtPnNpemUgPiBhLT5vZmZzZXQp OworCQlzYW1lID0gMDsKKwkJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoYiwgJnZhLT5yZXNlcnZl ZCwgbGluaykgeworCisJCQlpZiAoYS0+b2Zmc2V0ID09IGItPm9mZnNldCkgeworCQkJCXNhbWUr KzsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2Fzc2VydF9mKChhLT5vZmZzZXQgPCBiLT5vZmZzZXQg JiYKKwkJCQkJICAgICAgYS0+b2Zmc2V0ICsgYS0+c2l6ZSA8PSBiLT5vZmZzZXQpIHx8CisJCQkJ CSAgICAgKGItPm9mZnNldCA8IGEtPm9mZnNldCAmJgorCQkJCQkgICAgICBiLT5vZmZzZXQgKyBi LT5zaXplIDw9IGEtPm9mZnNldCksCisJCQkJCSAgICAgIlR3byByZXNlcnZlZCBhcmVhcyBvdmVy bGFwIik7CisJCQl9CisJCX0KKwkJaWd0X2Fzc2VydF9mKHNhbWUgPT0gMSwgIlRoZSBzYW1lIGFy ZWEgaGFzIGJlZW4gcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuXG4iKTsKKwl9CisKKwlpZ3RfbGlz dF9mb3JfZWFjaF9lbnRyeShhLCAmdmEtPnJlc2VydmVkLCBsaW5rKSB7CisJCWlndF9saXN0X2Zv cl9lYWNoX2VudHJ5KGIsICZ2YS0+YWxsb2NhdGVkLCBsaW5rKSB7CisKKwkJCWlndF9hc3NlcnRf ZigoYS0+b2Zmc2V0IDwgYi0+b2Zmc2V0ICYmCisJCQkJICAgICAgYS0+b2Zmc2V0ICsgYS0+c2l6 ZSA8PSBiLT5vZmZzZXQpIHx8CisJCQkJICAgICAoYi0+b2Zmc2V0IDwgYS0+b2Zmc2V0ICYmCisJ CQkJICAgICAgYi0+b2Zmc2V0ICsgYi0+c2l6ZSA8PSBhLT5vZmZzZXQpLAorCQkJCSAgICAgIkFu IGFsbG9jYXRlZCBibG9jayBvdmVybGFwcyB3aXRoIGEgcmVzZXJ2ZWQgYXJlYS5cbiIpOworCQl9 CisJfQorCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnZhLT5yZXNlcnZlZCwgbGluaykg eworCQlpc19yZXNlcnZlZCA9IGludGVsX2FsbG9jYXRvcl9pc19yZXNlcnZlZCh2YS0+YWxsb2Nh dG9yX2hhbmRsZSwKKwkJCQkJCQkgIGEtPnNpemUsCisJCQkJCQkJICBhLT5vZmZzZXQpOworCQlp Z3RfYXNzZXJ0X2YoaXNfcmVzZXJ2ZWQsICJUaGUgYWxsb2NhdG9yIGhhcyBub3QgcmVwb3J0ZWQg YSByZXNlcnZlZCBhcmVhLlxuIik7CisJfQorCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoYSwg JnZhLT5hbGxvY2F0ZWQsIGxpbmspIHsKKwkJaXNfYWxsb2NhdGVkID0gaW50ZWxfYWxsb2NhdG9y X2lzX2FsbG9jYXRlZCh2YS0+YWxsb2NhdG9yX2hhbmRsZSwKKwkJCQkJCQkgICAgYS0+aGFuZGxl LAorCQkJCQkJCSAgICBhLT5zaXplLAorCQkJCQkJCSAgICBhLT5vZmZzZXQpOworCQlpZ3RfYXNz ZXJ0X2YoaXNfYWxsb2NhdGVkLCAiVGhlIGFsbG9jYXRvciBoYXMgbm90IHJlcG9ydGVkIGFuIGFs bG9jYXRlZCBibG9jay5cbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2YV9ibG9jaworKmdl dF9ieV9oYW5kbGUoc3RydWN0IGlndF9saXN0X2hlYWQgKmxpc3QsIHVpbnQzMl90IGhhbmRsZSkK K3sKKwlzdHJ1Y3QgdmFfYmxvY2sgKmVudHJ5OworCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnko ZW50cnksIGxpc3QsIGxpbmspIHsKKwkJaWYgKGVudHJ5LT5oYW5kbGUgPT0gaGFuZGxlKQorCQkJ cmV0dXJuIGVudHJ5OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB2YV9i bG9jaworKmdldF9ieV9vZmZzZXQoc3RydWN0IGlndF9saXN0X2hlYWQgKmxpc3QsIHVpbnQ2NF90 IG9mZnNldCkKK3sKKwlzdHJ1Y3QgdmFfYmxvY2sgKmVudHJ5OworCisJaWd0X2xpc3RfZm9yX2Vh Y2hfZW50cnkoZW50cnksIGxpc3QsIGxpbmspIHsKKwkJaWYgKGVudHJ5LT5vZmZzZXQgPT0gb2Zm c2V0KQorCQkJcmV0dXJuIGVudHJ5OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0 cnVjdCB2YV9ibG9jaworKmdldF9vdmVybGFwcGluZyhzdHJ1Y3QgaWd0X2xpc3RfaGVhZCAqbGlz dCwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQoreworCXN0cnVjdCB2YV9ibG9jayAq ZW50cnk7CisJdWludDY0X3Qgc3RhcnQsIGVuZDsKKwlib29sIG92ZXJsYXBzOworCisJaWd0X2xp c3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGxpbmspIHsKKwkJc3RhcnQgPSBlbnRyeS0+ b2Zmc2V0OworCQllbmQgPSBlbnRyeS0+b2Zmc2V0ICsgZW50cnktPnNpemU7CisKKwkJb3Zlcmxh cHMgPSAoKHN0YXJ0ID49IG9mZnNldCAmJiBzdGFydCA8IG9mZnNldCArIHNpemUpIHx8CisJCQkg ICAgKGVuZCA+IG9mZnNldCAmJiBlbmQgPD0gb2Zmc2V0ICsgc2l6ZSkpOworCisJCWlmIChvdmVy bGFwcykKKwkJCXJldHVybiBlbnRyeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAordmFsaWRhdGVkX2FsbG9jYXRvcl9hbGxvYyhzdHJ1Y3QgdmFsaWRhdGVkX2FsbG9j YXRvciAqdmEsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICB1aW50NjRfdCBzaXplLCB1aW50NjRf dCBhbGlnbm1lbnQpCit7CisJc3RydWN0IHZhX2Jsb2NrICpibG9jazsKKwl1aW50NjRfdCBvZmZz ZXQ7CisKKwlvZmZzZXQgPSBfX2ludGVsX2FsbG9jYXRvcl9hbGxvYyh2YS0+YWxsb2NhdG9yX2hh bmRsZSwgaGFuZGxlLAorCQkJCQkgc2l6ZSwgYWxpZ25tZW50LCBBTExPQ19TVFJBVEVHWV9OT05F KTsKKworCWJsb2NrID0gZ2V0X2J5X2hhbmRsZSgmdmEtPmFsbG9jYXRlZCwgaGFuZGxlKTsKKwlp ZiAoYmxvY2spIHsKKwkJaWd0X2Fzc2VydChibG9jay0+b2Zmc2V0ID09IG9mZnNldCk7CisJCXJl dHVybiBvZmZzZXQ7CisJfQorCisJLyogbm90IGVub3VnaCBzcGFjZSAqLworCWlmIChvZmZzZXQg PT0gQUxMT0NfSU5WQUxJRF9BRERSRVNTKQorCQlyZXR1cm4gQUxMT0NfSU5WQUxJRF9BRERSRVNT OworCisJaWd0X2Fzc2VydChvZmZzZXQgPj0gdmEtPnZhc19zdGFydCAmJgorCQkgICBvZmZzZXQg KyBzaXplIDw9IHZhLT52YXNfZW5kKTsKKworCWlmIChhbGlnbm1lbnQgPiAwKQorCQlpZ3RfYXNz ZXJ0KG9mZnNldCAlIGFsaWdubWVudCA9PSAwKTsKKworCS8qIGNoZWNrIHRoYXQgbm8gYWxsb2Nh dGVkIGJsb2NrIG92ZXJsYXBzICovCisJaWd0X2Fzc2VydCghZ2V0X292ZXJsYXBwaW5nKCZ2YS0+ YWxsb2NhdGVkLCBvZmZzZXQsIHNpemUpKTsKKwkvKiBjaGVjayB0aGF0IG5vIHJlc2VydmVkIGFy ZWEgb3ZlcmxhcHMgKi8KKwlpZ3RfYXNzZXJ0KCFnZXRfb3ZlcmxhcHBpbmcoJnZhLT5yZXNlcnZl ZCwgb2Zmc2V0LCBzaXplKSk7CisKKwlibG9jayA9IChzdHJ1Y3QgdmFfYmxvY2sgKikgbWFsbG9j KHNpemVvZihzdHJ1Y3QgdmFfYmxvY2spKTsKKwlpZ3RfYXNzZXJ0KGJsb2NrKTsKKwlibG9jay0+ b2Zmc2V0ID0gb2Zmc2V0OworCWJsb2NrLT5zaXplID0gc2l6ZTsKKwlibG9jay0+aGFuZGxlID0g aGFuZGxlOworCWlndF9saXN0X2FkZCgmYmxvY2stPmxpbmssICZ2YS0+YWxsb2NhdGVkKTsKKwor CXJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBib29sCit2YWxpZGF0ZWRfYWxsb2NhdG9yX2Zy ZWUoc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3IgKnZhLCB1aW50MzJfdCBoYW5kbGUpCit7CisJ c3RydWN0IHZhX2Jsb2NrICpibG9jazsKKworCWJsb2NrID0gZ2V0X2J5X2hhbmRsZSgmdmEtPmFs bG9jYXRlZCwgaGFuZGxlKTsKKworCWlmIChibG9jaykgeworCQlpZ3RfbGlzdF9kZWwoJmJsb2Nr LT5saW5rKTsKKwkJZnJlZShibG9jayk7CisJCWlndF9hc3NlcnQoaW50ZWxfYWxsb2NhdG9yX2Zy ZWUodmEtPmFsbG9jYXRvcl9oYW5kbGUsIGhhbmRsZSkpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVs c2UgeworCQlpZ3RfYXNzZXJ0KCFpbnRlbF9hbGxvY2F0b3JfZnJlZSh2YS0+YWxsb2NhdG9yX2hh bmRsZSwgaGFuZGxlKSk7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sCit2 YWxpZGF0ZWRfYWxsb2NhdG9yX2lzX2FsbG9jYXRlZChzdHJ1Y3QgdmFsaWRhdGVkX2FsbG9jYXRv ciAqdmEsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qgb2Zm c2V0KQoreworCXN0cnVjdCB2YV9ibG9jayAqYmxvY2s7CisJYm9vbCBpc19hbGxvY2F0ZWQ7CisK KwlibG9jayA9IGdldF9ieV9oYW5kbGUoJnZhLT5hbGxvY2F0ZWQsIGhhbmRsZSk7CisKKwlpc19h bGxvY2F0ZWQgPSAgKGJsb2NrICYmIGJsb2NrLT5zaXplID09IHNpemUgJiYKKwkJCSBibG9jay0+ b2Zmc2V0ID09IG9mZnNldCk7CisKKwlpZ3RfYXNzZXJ0KGlzX2FsbG9jYXRlZCA9PSBpbnRlbF9h bGxvY2F0b3JfaXNfYWxsb2NhdGVkKHZhLT5hbGxvY2F0b3JfaGFuZGxlLAorCQkJCQkJCQloYW5k bGUsIHNpemUsIG9mZnNldCkpOworCisJcmV0dXJuIGlzX2FsbG9jYXRlZDsKK30KKworc3RhdGlj IGJvb2wKK3ZhbGlkYXRlZF9hbGxvY2F0b3JfcmVzZXJ2ZShzdHJ1Y3QgdmFsaWRhdGVkX2FsbG9j YXRvciAqdmEsIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICB1aW50NjRfdCBzaXplLCB1aW50NjRf dCBvZmZzZXQpCit7CisJc3RydWN0IHZhX2Jsb2NrICpibG9jazsKKwlib29sIHJlc2VydmVkOwor CisJcmVzZXJ2ZWQgPSBpbnRlbF9hbGxvY2F0b3JfcmVzZXJ2ZSh2YS0+YWxsb2NhdG9yX2hhbmRs ZSwgaGFuZGxlLAorCQkJCQkgICBzaXplLCBvZmZzZXQpOworCWlmICghcmVzZXJ2ZWQpIHsKKwkJ aWYgKG9mZnNldCA+PSB2YS0+dmFzX3N0YXJ0ICYmIG9mZnNldCArIHNpemUgPD0gdmEtPnZhc19l bmQpCisJCQlpZ3RfYXNzZXJ0KGdldF9vdmVybGFwcGluZygmdmEtPnJlc2VydmVkLCBvZmZzZXQs IHNpemUpIHx8CisJCQkJICAgZ2V0X292ZXJsYXBwaW5nKCZ2YS0+YWxsb2NhdGVkLCBvZmZzZXQs IHNpemUpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlndF9hc3NlcnQoIWdldF9vdmVybGFw cGluZygmdmEtPmFsbG9jYXRlZCwgb2Zmc2V0LCBzaXplKSk7CisJaWd0X2Fzc2VydCghZ2V0X292 ZXJsYXBwaW5nKCZ2YS0+cmVzZXJ2ZWQsIG9mZnNldCwgc2l6ZSkpOworCisJYmxvY2sgPSAoc3Ry dWN0IHZhX2Jsb2NrICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHZhX2Jsb2NrKSk7CisJaWd0X2Fz c2VydChibG9jayk7CisJYmxvY2stPmhhbmRsZSA9IGhhbmRsZTsKKwlibG9jay0+b2Zmc2V0ID0g b2Zmc2V0OworCWJsb2NrLT5zaXplID0gc2l6ZTsKKwlpZ3RfbGlzdF9hZGQoJmJsb2NrLT5saW5r LCAmdmEtPnJlc2VydmVkKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAordmFs aWRhdGVkX2FsbG9jYXRvcl91bnJlc2VydmUoc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3IgKnZh LCB1aW50MzJfdCBoYW5kbGUsCisJCQkgICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZz ZXQpCit7CisJc3RydWN0IHZhX2Jsb2NrICpibG9jazsKKworCWJsb2NrID0gZ2V0X2J5X29mZnNl dCgmdmEtPnJlc2VydmVkLCBvZmZzZXQpOworCisJaWYgKGJsb2NrICYmIGJsb2NrLT5zaXplID09 IHNpemUgJiYgYmxvY2stPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJaWd0X2Fzc2VydChpbnRlbF9h bGxvY2F0b3JfdW5yZXNlcnZlKHZhLT5hbGxvY2F0b3JfaGFuZGxlLAorCQkJCQkJICAgICBoYW5k bGUsIHNpemUsIG9mZnNldCkpOworCQlpZ3RfbGlzdF9kZWwoJmJsb2NrLT5saW5rKTsKKwkJZnJl ZShibG9jayk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCWlndF9hc3NlcnQoIWludGVs X2FsbG9jYXRvcl91bnJlc2VydmUodmEtPmFsbG9jYXRvcl9oYW5kbGUsCisJCQkJCQkgICAgICBo YW5kbGUsIHNpemUsIG9mZnNldCkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMg Ym9vbAordmFsaWRhdGVkX2FsbG9jYXRvcl9pc19yZXNlcnZlZChzdHJ1Y3QgdmFsaWRhdGVkX2Fs bG9jYXRvciAqdmEsCisJCQkgICAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQorewor CXN0cnVjdCB2YV9ibG9jayAqYmxvY2s7CisJYm9vbCBpc19yZXNlcnZlZDsKKworCWJsb2NrID0g Z2V0X2J5X29mZnNldCgmdmEtPnJlc2VydmVkLCBvZmZzZXQpOworCWlzX3Jlc2VydmVkID0gKGJs b2NrICYmIGJsb2NrLT5zaXplID09IHNpemUpOworCWlndF9hc3NlcnQoaXNfcmVzZXJ2ZWQgPT0g aW50ZWxfYWxsb2NhdG9yX2lzX3Jlc2VydmVkKHZhLT5hbGxvY2F0b3JfaGFuZGxlLAorCQkJCQkJ CSAgICAgIHNpemUsIG9mZnNldCkpOworCXJldHVybiBpc19yZXNlcnZlZDsKK30KKworc3RhdGlj IHN0cnVjdCB2YWxpZGF0ZWRfYWxsb2NhdG9yCisqdmFsaWRhdGVkX2FsbG9jYXRvcl9jcmVhdGUo aW50IGZkLCBpbnQgYWxsb2NhdG9yX3R5cGUpCit7CisJc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0 b3IgKnZhOworCisJdmEgPSAoc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3IgKikgbWFsbG9jKHNp emVvZiAoc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3IpKTsKKwlpZ3RfYXNzZXJ0KHZhKTsKKwlJ R1RfSU5JVF9MSVNUX0hFQUQoJnZhLT5hbGxvY2F0ZWQpOworCUlHVF9JTklUX0xJU1RfSEVBRCgm dmEtPnJlc2VydmVkKTsKKworCXZhLT5hbGxvY2F0b3JfaGFuZGxlID0gaW50ZWxfYWxsb2NhdG9y X29wZW4oZmQsIDAsIGFsbG9jYXRvcl90eXBlKTsKKwlpbnRlbF9hbGxvY2F0b3JfZ2V0X2FkZHJl c3NfcmFuZ2UodmEtPmFsbG9jYXRvcl9oYW5kbGUsCisJCQkJCSAgJnZhLT52YXNfc3RhcnQsCisJ CQkJCSAgJnZhLT52YXNfZW5kKTsKKworCXJldHVybiB2YTsKK30KKworc3RhdGljIGJvb2wgdmFs aWRhdGVkX2FsbG9jYXRvcl9kZXN0cm95KHN0cnVjdCB2YWxpZGF0ZWRfYWxsb2NhdG9yICp2YSkK K3sKKwlib29sIGlzX2VtcHR5OworCXN0cnVjdCB2YV9ibG9jayAqZW50cnksICp0bXA7CisKKwlp c19lbXB0eSA9IGlndF9saXN0X2VtcHR5KCZ2YS0+YWxsb2NhdGVkKSAmJgorCQkgICBpZ3RfbGlz dF9lbXB0eSgmdmEtPnJlc2VydmVkKTsKKwlpZ3RfYXNzZXJ0X2VxKGlzX2VtcHR5LCBpbnRlbF9h bGxvY2F0b3JfY2xvc2UodmEtPmFsbG9jYXRvcl9oYW5kbGUpKTsKKworCWlndF9saXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJnZhLT5hbGxvY2F0ZWQsIGxpbmspIHsKKwkJaWd0 X2xpc3RfZGVsKCZlbnRyeS0+bGluayk7CisJCWZyZWUoZW50cnkpOworCX0KKworCWlndF9saXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJnZhLT5yZXNlcnZlZCwgbGluaykgewor CQlpZ3RfbGlzdF9kZWwoJmVudHJ5LT5saW5rKTsKKwkJZnJlZShlbnRyeSk7CisJfQorCisJZnJl ZSh2YSk7CisJcmV0dXJuIGlzX2VtcHR5OworfQorCitzdGF0aWMgdm9pZCBnZXRfZGV2aWNlX2Fk ZHJlc3NfcmFuZ2UoaW50IGZkLCB1aW50NjRfdCAqc3RhcnQsIHVpbnQ2NF90ICplbmQpCit7CisJ dWludDY0X3QgYWhuZDsKKworCWFobmQgPSBpbnRlbF9hbGxvY2F0b3Jfb3BlbihmZCwgMCwgSU5U RUxfQUxMT0NBVE9SX1NJTVBMRSk7CisJaW50ZWxfYWxsb2NhdG9yX2dldF9hZGRyZXNzX3Jhbmdl KGFobmQsIHN0YXJ0LCBlbmQpOworCWludGVsX2FsbG9jYXRvcl9jbG9zZShhaG5kKTsKK30KKwor c3RhdGljIHZvaWQKK2V4ZWN1dGVfdGVzdF9ub19jaGVjayhpbnQgZmQsIGludCBhbGxvY190eXBl LCBpbnQgbnF1ZXJpZXMsCisJCSAgICAgIHN0cnVjdCBhbGxvY2F0b3JfcXVlcnkgKnF1ZXJpZXMp Cit7CisJdWludDY0X3QgYWhuZDsKKwl1aW50NjRfdCBvZmZzZXQ7CisJdWludDY0X3QgYWxsb2Nh dGVkX21lbSA9IDAsIHJlcXVlc3RlZF9tZW0gPSAwOworCXVpbnQzMl90IHJlYWxfYWxsb2NzID0g MCwgcmVxdWVzdGVkX2FsbG9jcyA9IDA7CisJaW50IGkgPSAwOworCisJYWhuZCA9IGludGVsX2Fs bG9jYXRvcl9vcGVuKGZkLCAwLCBhbGxvY190eXBlKTsKKworCWZvciAoaSA9IDA7IGkgPCBucXVl cmllczsgaSsrKSB7CisKKwkJc3dpdGNoKHF1ZXJpZXNbaV0udHlwZSkgeworCQljYXNlIFFVRVJZ X0FMTE9DOgorCQkJb2Zmc2V0ID0gX19pbnRlbF9hbGxvY2F0b3JfYWxsb2MoYWhuZCwgcXVlcmll c1tpXS5hbGxvYy5oYW5kbGUsCisJCQkJCQkJIHF1ZXJpZXNbaV0uYWxsb2Muc2l6ZSwKKwkJCQkJ CQkgcXVlcmllc1tpXS5hbGxvYy5hbGlnbm1lbnQsCisJCQkJCQkJIEFMTE9DX1NUUkFURUdZX05P TkUpOworCisJCQlhbGxvY2F0ZWRfbWVtICs9IChvZmZzZXQgPT0gQUxMT0NfSU5WQUxJRF9BRERS RVNTID8KKwkJCQkJCSAgMCA6IHF1ZXJpZXNbaV0uYWxsb2Muc2l6ZSk7CisJCQlyZXF1ZXN0ZWRf bWVtICs9IHF1ZXJpZXNbaV0uYWxsb2Muc2l6ZTsKKwkJCXJlYWxfYWxsb2NzICs9IChvZmZzZXQg PT0gQUxMT0NfSU5WQUxJRF9BRERSRVNTID8gMCA6IDEpOworCQkJcmVxdWVzdGVkX2FsbG9jcyAr PSAxOworCQkJYnJlYWs7CisJCWNhc2UgUVVFUllfRlJFRToKKwkJCWludGVsX2FsbG9jYXRvcl9m cmVlKGFobmQsIHF1ZXJpZXNbaV0uZnJlZS5oYW5kbGUpOworCQkJYnJlYWs7CisJCWNhc2UgUVVF UllfSVNfQUxMT0NBVEVEOgorCQkJaW50ZWxfYWxsb2NhdG9yX2lzX2FsbG9jYXRlZChhaG5kLCBx dWVyaWVzW2ldLmlzX2FsbG9jYXRlZC5oYW5kbGUsCisJCQkJCQkgICAgIHF1ZXJpZXNbaV0uaXNf YWxsb2NhdGVkLnNpemUsCisJCQkJCQkgICAgIHF1ZXJpZXNbaV0uaXNfYWxsb2NhdGVkLm9mZnNl dCk7CisJCQlicmVhazsKKwkJY2FzZSBRVUVSWV9SRVNFUlZFOgorCQkJaW50ZWxfYWxsb2NhdG9y X3Jlc2VydmUoYWhuZCwgcXVlcmllc1tpXS5yZXNlcnZlLmhhbmRsZSwKKwkJCQkJCXF1ZXJpZXNb aV0ucmVzZXJ2ZS5zaXplLAorCQkJCQkJcXVlcmllc1tpXS5yZXNlcnZlLm9mZnNldCk7CisJCQli cmVhazsKKwkJY2FzZSBRVUVSWV9VTlJFU0VSVkU6CisJCQlpbnRlbF9hbGxvY2F0b3JfdW5yZXNl cnZlKGFobmQsIHF1ZXJpZXNbaV0udW5yZXNlcnZlLmhhbmRsZSwKKwkJCQkJCSAgcXVlcmllc1tp XS51bnJlc2VydmUuc2l6ZSwKKwkJCQkJCSAgcXVlcmllc1tpXS51bnJlc2VydmUub2Zmc2V0KTsK KwkJCWJyZWFrOworCQljYXNlIFFVRVJZX0lTX1JFU0VSVkVEOgorCQkJaW50ZWxfYWxsb2NhdG9y X2lzX3Jlc2VydmVkKGFobmQsIHF1ZXJpZXNbaV0uaXNfcmVzZXJ2ZWQuc2l6ZSwKKwkJCQkJCSAg ICBxdWVyaWVzW2ldLmlzX3Jlc2VydmVkLm9mZnNldCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlp bnRlbF9hbGxvY2F0b3JfY2xvc2UoYWhuZCk7CisKKwlpZ3RfaW5mbygiVGVzdCBzdW1tYXJ5OiAl ZCBhbGxvY2F0aW9ucyBvdXQgb2YgJWQgc3VjY2VkZGVkICglZiAlJSlcbiIsCisJCSByZWFsX2Fs bG9jcywgcmVxdWVzdGVkX2FsbG9jcywKKwkJICgoZmxvYXQpIHJlYWxfYWxsb2NzICogMTAwKSAv IChmbG9hdCkgcmVxdWVzdGVkX2FsbG9jcyk7CisKK30KKworc3RhdGljIHZvaWQKK2V4ZWN1dGVf dGVzdF9jaGVjayhpbnQgZmQsIGludCBhbGxvY190eXBlLCBpbnQgbnF1ZXJpZXMsCisJCSAgIHN0 cnVjdCBhbGxvY2F0b3JfcXVlcnkgKnF1ZXJpZXMsIGludCBtb2RlKQoreworCXN0cnVjdCB2YWxp ZGF0ZWRfYWxsb2NhdG9yICp2YTsKKwl1aW50NjRfdCBvZmZzZXQ7CisJdWludDY0X3QgYWxsb2Nh dGVkX21lbSA9IDAsIHJlcXVlc3RlZF9tZW0gPSAwOworCXVpbnQzMl90IHJlYWxfYWxsb2NzID0g MCwgcmVxdWVzdGVkX2FsbG9jcyA9IDA7CisJaW50IGkgPSAwOworCisJdmEgPSB2YWxpZGF0ZWRf YWxsb2NhdG9yX2NyZWF0ZShmZCwgYWxsb2NfdHlwZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnF1 ZXJpZXM7IGkrKykgeworCisJCWlhbF9kZWJ1ZygiXG4iKTsKKwkJc3dpdGNoKHF1ZXJpZXNbaV0u dHlwZSkgeworCQljYXNlIFFVRVJZX0FMTE9DOgorCQkJaWFsX2RlYnVnKCJBbGxvYyAlZCAweCVs bHggKDB4JWxseClcbiIsIHF1ZXJpZXNbaV0uYWxsb2MuaGFuZGxlLAorCQkJCSAgcXVlcmllc1tp XS5hbGxvYy5zaXplLCBxdWVyaWVzW2ldLmFsbG9jLmFsaWdubWVudCk7CisJCQlvZmZzZXQgPSB2 YWxpZGF0ZWRfYWxsb2NhdG9yX2FsbG9jKHZhLCBxdWVyaWVzW2ldLmFsbG9jLmhhbmRsZSwKKwkJ CQkJCQkgICBxdWVyaWVzW2ldLmFsbG9jLnNpemUsCisJCQkJCQkJICAgcXVlcmllc1tpXS5hbGxv Yy5hbGlnbm1lbnQpOworCisJCQlhbGxvY2F0ZWRfbWVtICs9IChvZmZzZXQgPT0gQUxMT0NfSU5W QUxJRF9BRERSRVNTID8KKwkJCQkJCSAgMCA6IHF1ZXJpZXNbaV0uYWxsb2Muc2l6ZSk7CisJCQly ZXF1ZXN0ZWRfbWVtICs9IHF1ZXJpZXNbaV0uYWxsb2Muc2l6ZTsKKwkJCXJlYWxfYWxsb2NzICs9 IChvZmZzZXQgPT0gQUxMT0NfSU5WQUxJRF9BRERSRVNTID8gMCA6IDEpOworCQkJcmVxdWVzdGVk X2FsbG9jcyArPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUVVFUllfRlJFRToKKwkJCWlhbF9kZWJ1 ZygiRnJlZSAlZFxuIiwgcXVlcmllc1tpXS5mcmVlLmhhbmRsZSk7CisJCQl2YWxpZGF0ZWRfYWxs b2NhdG9yX2ZyZWUodmEsIHF1ZXJpZXNbaV0uZnJlZS5oYW5kbGUpOworCQkJYnJlYWs7CisJCWNh c2UgUVVFUllfSVNfQUxMT0NBVEVEOgorCQkJdmFsaWRhdGVkX2FsbG9jYXRvcl9pc19hbGxvY2F0 ZWQodmEsIHF1ZXJpZXNbaV0uaXNfYWxsb2NhdGVkLmhhbmRsZSwKKwkJCQkJCQkgcXVlcmllc1tp XS5pc19hbGxvY2F0ZWQuc2l6ZSwKKwkJCQkJCQkgcXVlcmllc1tpXS5pc19hbGxvY2F0ZWQub2Zm c2V0KTsKKwkJCWJyZWFrOworCQljYXNlIFFVRVJZX1JFU0VSVkU6CisJCQlpYWxfZGVidWcgKCJS ZXNlcnZlICVkIDB4JWxseCArIDB4JWxseFxuIiwgcXVlcmllc1tpXS5yZXNlcnZlLmhhbmRsZSwK KwkJCQkgICBxdWVyaWVzW2ldLnJlc2VydmUuc2l6ZSwgcXVlcmllc1tpXS5yZXNlcnZlLm9mZnNl dCk7CisJCQl2YWxpZGF0ZWRfYWxsb2NhdG9yX3Jlc2VydmUodmEsIHF1ZXJpZXNbaV0ucmVzZXJ2 ZS5oYW5kbGUsCisJCQkJCQkgICAgcXVlcmllc1tpXS5yZXNlcnZlLnNpemUsCisJCQkJCQkgICAg cXVlcmllc1tpXS5yZXNlcnZlLm9mZnNldCk7CisJCQlicmVhazsKKwkJY2FzZSBRVUVSWV9VTlJF U0VSVkU6CisJCQlpYWxfZGVidWcgKCJVbnJlc2VydmUgJWQgMHglbGx4IDB4JWxseFxuIiwgcXVl cmllc1tpXS5yZXNlcnZlLmhhbmRsZSwKKwkJCQkgICBxdWVyaWVzW2ldLnJlc2VydmUuc2l6ZSwg cXVlcmllc1tpXS5yZXNlcnZlLm9mZnNldCk7CisJCQl2YWxpZGF0ZWRfYWxsb2NhdG9yX3VucmVz ZXJ2ZSh2YSwgcXVlcmllc1tpXS51bnJlc2VydmUuaGFuZGxlLAorCQkJCQkJICAgICAgcXVlcmll c1tpXS51bnJlc2VydmUuc2l6ZSwKKwkJCQkJCSAgICAgIHF1ZXJpZXNbaV0udW5yZXNlcnZlLm9m ZnNldCk7CisJCQlicmVhazsKKwkJY2FzZSBRVUVSWV9JU19SRVNFUlZFRDoKKwkJCXZhbGlkYXRl ZF9hbGxvY2F0b3JfaXNfcmVzZXJ2ZWQodmEsIHF1ZXJpZXNbaV0uaXNfcmVzZXJ2ZWQuc2l6ZSwK KwkJCQkJCQlxdWVyaWVzW2ldLmlzX3Jlc2VydmVkLm9mZnNldCk7CisJCQlicmVhazsKKwkJfQor CisJCWlmIChtb2RlID09IFRIT1JPVUdIX0NIRUNLKSB2YWxpZGF0ZV9hbGxvY2F0b3IodmEpOwor CX0KKworCXZhbGlkYXRlZF9hbGxvY2F0b3JfZGVzdHJveSh2YSk7CisKKwlpZ3RfaW5mbygiVGVz dCBzdW1tYXJ5OiAlZCBhbGxvY2F0aW9ucyBvdXQgb2YgJWQgc3VjY2VkZGVkICglZiAlJSlcbiIs CisJCSByZWFsX2FsbG9jcywgcmVxdWVzdGVkX2FsbG9jcywKKwkJICgoZmxvYXQpIHJlYWxfYWxs b2NzICogMTAwKSAvIChmbG9hdCkgcmVxdWVzdGVkX2FsbG9jcyk7Cit9CisKK3N0YXRpYyB2b2lk CitleGVjdXRlX3Rlc3QoaW50IGZkLCBpbnQgYWxsb2NfdHlwZSwgaW50IG5xdWVyaWVzLAorCSAg ICAgc3RydWN0IGFsbG9jYXRvcl9xdWVyeSAqcXVlcmllcywgaW50IG1vZGUpCit7CisJaWYgKG1v ZGUgPT0gTk9fQ0hFQ0spCisJCWV4ZWN1dGVfdGVzdF9ub19jaGVjayhmZCwgYWxsb2NfdHlwZSwg bnF1ZXJpZXMsIHF1ZXJpZXMpOworCWVsc2UKKwkJZXhlY3V0ZV90ZXN0X2NoZWNrKGZkLCBhbGxv Y190eXBlLCBucXVlcmllcywgcXVlcmllcywgbW9kZSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBy YW5kdTY0KHZvaWQpCit7CisJdWludDY0X3QgeCA9IDA7CisJaW50IHJuZF9iaXRzID0gaWd0X2Zs cyhSQU5EX01BWCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IDY0OyBpICs9IHJuZF9iaXRzKQor CQl4ID0gKHggPDwgcm5kX2JpdHMpICsgcmFuZCgpOworCisJcmV0dXJuIHg7Cit9CisKK3N0YXRp YyBpbnQKK2NyZWF0ZV9zaW1wbGVfdGVzdChpbnQgZmQsIHVpbnQ2NF90IG1pbl9zaXplLCBpbnQg bnFfc3RhZ2UsCisJCSAgIHN0cnVjdCBhbGxvY2F0b3JfcXVlcnkgKnF1ZXJpZXMpCit7CisJdWlu dDY0X3Qgc3RhcnQsIGVuZCwgc2l6ZSwgb2Zmc2V0LCBmcmVlX3NwYWNlOworCWludCBpLCBqLCBz dGFnZXMsIG5xLCBvYmpjb3VudDsKKwlpbnQgcGVybVs2NF07CisJdWludDY0X3Qgb2Zmc2V0c1s2 NF0sIHNpemVzWzY0XTsKKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBhbGxvY19saXN0OworCXN0cnVj dCBhbGxvY19ibG9jayAqYmxvY2ssICplbnRyeTsKKworCUlHVF9JTklUX0xJU1RfSEVBRCgmYWxs b2NfbGlzdCk7CisJaWd0X2Fzc2VydChtaW5fc2l6ZSA+IDApOworCWdldF9kZXZpY2VfYWRkcmVz c19yYW5nZShmZCwgJnN0YXJ0LCAmZW5kKTsKKworCXN0YWdlcyA9IDA7CisJZm9yIChzaXplID0g bWluX3NpemU7IHN0YXJ0ICsgc2l6ZSAqIDJVTEwgPD0gZW5kOyBzaXplICo9IDJVTEwpIHsKKwkJ cGVybVtzdGFnZXNdID0gc3RhZ2VzOworCQlzaXplc1tzdGFnZXMrK10gPSBzaXplOworCX0KKwor CXBlcm1bc3RhZ2VzXSA9IHN0YWdlczsKKwlzaXplc1tzdGFnZXMrK10gPSBlbmQgLSBzdGFydCAt IChzaXplIC0gbWluX3NpemUpOworCWlndF9wZXJtdXRlX2FycmF5KHBlcm0sIHN0YWdlcywgaWd0 X2V4Y2hhbmdlX2ludCk7CisJb2Zmc2V0ID0gc3RhcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3Rh Z2VzOyBpKyspIHsKKwkJb2Zmc2V0c1twZXJtW2ldXSA9IG9mZnNldDsKKwkJb2Zmc2V0ICs9IHNp emVzW3Blcm1baV1dOworCX0KKworCW5xID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3RhZ2VzOyBp KyspIHsKKwkJcXVlcmllc1tucV0udHlwZSA9IFFVRVJZX1JFU0VSVkU7CisJCXF1ZXJpZXNbbnFd LnJlc2VydmUuc2l6ZSA9IHNpemVzW2ldOworCQlxdWVyaWVzW25xXS5yZXNlcnZlLm9mZnNldCA9 IG9mZnNldHNbaV07CisJCXF1ZXJpZXNbbnFdLnJlc2VydmUuaGFuZGxlID0gLTE7CisJCW5xKys7 CisJfQorCisJZnJlZV9zcGFjZSA9IDA7CisJb2JqY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkg PCBzdGFnZXM7IGkrKykgeworCisJCXF1ZXJpZXNbbnFdLnR5cGUgPSBRVUVSWV9VTlJFU0VSVkU7 CisJCXF1ZXJpZXNbbnFdLnVucmVzZXJ2ZS5zaXplID0gc2l6ZXNbaV07CisJCXF1ZXJpZXNbbnFd LnVucmVzZXJ2ZS5vZmZzZXQgPSBvZmZzZXRzW2ldOworCQlxdWVyaWVzW25xXS51bnJlc2VydmUu aGFuZGxlID0gLTE7CisJCW5xKys7CisJCWZyZWVfc3BhY2UgKz0gc2l6ZXNbaV07CisKKwkJZm9y IChqID0gbnFfc3RhZ2U7IGogPiAwOyBqLS0pIHsKKworCQkJaWYgKG9iamNvdW50ID4gMCAmJiBy YW5kKCkgJSA0ID09IDApIHsKKworCQkJCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAm YWxsb2NfbGlzdCwgbGluaykgeworCQkJCQlibG9jayA9IGVudHJ5OworCQkJCQlpZiAocmFuZCgp ICUgMTAgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZ3RfYXNzZXJ0KGJsb2NrKTsK KwkJCQlxdWVyaWVzW25xXS50eXBlID0gUVVFUllfRlJFRTsKKwkJCQlxdWVyaWVzW25xXS5mcmVl LmhhbmRsZSA9IGJsb2NrLT5oYW5kbGU7CisJCQkJbnErKzsKKworCQkJCW9iamNvdW50LS07CisJ CQkJZnJlZV9zcGFjZSArPSBibG9jay0+c2l6ZTsKKwkJCQlpZ3RfbGlzdF9kZWwoJmJsb2NrLT5s aW5rKTsKKwkJCQlmcmVlKGJsb2NrKTsKKworCQkJfSBlbHNlIGlmIChmcmVlX3NwYWNlID4gMCkg eworCisJCQkJYmxvY2sgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGxvY19ibG9jaykpOworCQkJ CWlndF9hc3NlcnQoYmxvY2spOworCQkJCWJsb2NrLT5oYW5kbGUgPSBnZW1faGFuZGxlX2dlbigp OworCQkJCWJsb2NrLT5zaXplID0gcmFuZHU2NCgpICUgZnJlZV9zcGFjZSArIDE7CisKKwkJCQlp Z3RfbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmYWxsb2NfbGlzdCk7CisJCQkJb2JqY291bnQrKzsK KwkJCQlmcmVlX3NwYWNlIC09IGJsb2NrLT5zaXplOworCQkJCXF1ZXJpZXNbbnFdLnR5cGUgPSBR VUVSWV9BTExPQzsKKwkJCQlxdWVyaWVzW25xXS5hbGxvYy5zaXplID0gYmxvY2stPnNpemU7CisJ CQkJcXVlcmllc1tucV0uYWxsb2MuYWxpZ25tZW50ID0gMTw8KHJhbmQoKSAlIDgpOworCQkJCXF1 ZXJpZXNbbnFdLmFsbG9jLmhhbmRsZSA9IGJsb2NrLT5oYW5kbGU7CisJCQkJbnErKzsKKwkJCX0K KwkJfQorCX0KKworCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIGJsb2NrLCAm YWxsb2NfbGlzdCwgbGluaykgeworCQlpZ3RfbGlzdF9kZWwoJmVudHJ5LT5saW5rKTsKKwkJZnJl ZShlbnRyeSk7CisJfQorCisJcmV0dXJuIG5xOworfQorCitzdGF0aWMgdm9pZCBiYXNpY190ZXN0 KGludCBmZCwgaW50IGFsbG9jX3R5cGUpCit7CisJc3RydWN0IHZhbGlkYXRlZF9hbGxvY2F0b3Ig KnZhOworCXVpbnQ2NF90IG9mZnNldHNbNV07CisJYm9vbCByZXNlcnZlZDsKKworCXZhID0gdmFs aWRhdGVkX2FsbG9jYXRvcl9jcmVhdGUoZmQsIGFsbG9jX3R5cGUpOworCisJb2Zmc2V0c1sxXSA9 IHZhbGlkYXRlZF9hbGxvY2F0b3JfYWxsb2ModmEsIDEsIDEyMywgOCk7CisJaWd0X2Fzc2VydChv ZmZzZXRzWzFdICE9IEFMTE9DX0lOVkFMSURfQUREUkVTUyk7CisKKwlvZmZzZXRzWzJdID0gdmFs aWRhdGVkX2FsbG9jYXRvcl9hbGxvYyh2YSwgMiwgMTIzLCA4KTsKKwlpZ3RfYXNzZXJ0KG9mZnNl dHNbMl0gIT0gQUxMT0NfSU5WQUxJRF9BRERSRVNTKTsKKworCXJlc2VydmVkID0gdmFsaWRhdGVk X2FsbG9jYXRvcl9yZXNlcnZlKHZhLCAtMSwgMTI4LCAxMDI0KTsKKworCWlndF9hc3NlcnQodmFs aWRhdGVkX2FsbG9jYXRvcl9pc19hbGxvY2F0ZWQodmEsIDEsIDEyMywgb2Zmc2V0c1sxXSkpOwor CWlndF9hc3NlcnQoIXZhbGlkYXRlZF9hbGxvY2F0b3JfaXNfYWxsb2NhdGVkKHZhLCAyLCAxMjAs IG9mZnNldHNbMl0pKTsKKwlpZ3RfYXNzZXJ0KCF2YWxpZGF0ZWRfYWxsb2NhdG9yX2lzX2FsbG9j YXRlZCh2YSwgMiwgMTIzLCBvZmZzZXRzWzFdKSk7CisJaWd0X2Fzc2VydCghdmFsaWRhdGVkX2Fs bG9jYXRvcl9pc19hbGxvY2F0ZWQodmEsIDMsIDEyMywgb2Zmc2V0c1syXSkpOworCisJaWd0X2Fz c2VydCh2YWxpZGF0ZWRfYWxsb2NhdG9yX2ZyZWUodmEsIDEpKTsKKwlpZ3RfYXNzZXJ0KHZhbGlk YXRlZF9hbGxvY2F0b3JfZnJlZSh2YSwgMikpOworCWlndF9hc3NlcnQoIXZhbGlkYXRlZF9hbGxv Y2F0b3JfZnJlZSh2YSwgMSkpOworCisJaWd0X2Fzc2VydChyZXNlcnZlZCA9PSB2YWxpZGF0ZWRf YWxsb2NhdG9yX3VucmVzZXJ2ZSh2YSwgLTEsIDEyOCwgMTAyNCkpOworCisJaWd0X2Fzc2VydCh2 YWxpZGF0ZWRfYWxsb2NhdG9yX3Jlc2VydmUodmEsIDEsIDMwMCwgMjA0NykpOworCWlndF9hc3Nl cnQodmFsaWRhdGVkX2FsbG9jYXRvcl9yZXNlcnZlKHZhLCAyLCA0NTAsIDEwMjQpKTsKKwlpZ3Rf YXNzZXJ0KCF2YWxpZGF0ZWRfYWxsb2NhdG9yX3Jlc2VydmUodmEsIDMsIDIwLCAxMDA1KSk7CisK KwlpZ3RfYXNzZXJ0KCF2YWxpZGF0ZWRfYWxsb2NhdG9yX3VucmVzZXJ2ZSh2YSwgMSwgNTQwLCAx MDI0KSk7CisJaWd0X2Fzc2VydCh2YWxpZGF0ZWRfYWxsb2NhdG9yX3VucmVzZXJ2ZSh2YSwgMSwg MzAwLCAyMDQ3KSk7CisJaWd0X2Fzc2VydCghdmFsaWRhdGVkX2FsbG9jYXRvcl91bnJlc2VydmUo dmEsIDIsIDQ1MCwgMjA0NykpOworCWlndF9hc3NlcnQodmFsaWRhdGVkX2FsbG9jYXRvcl91bnJl c2VydmUodmEsIDIsIDQ1MCwgMTAyNCkpOworCisJb2Zmc2V0c1sxXSA9IHZhbGlkYXRlZF9hbGxv Y2F0b3JfYWxsb2ModmEsIDIsIDUwMCwgMzIpOworCisJaWYgKG9mZnNldHNbMV0gKyA1MDAgPiBv ZmZzZXRzWzFdKSB7CisJCXZhbGlkYXRlZF9hbGxvY2F0b3JfcmVzZXJ2ZSh2YSwgLTEsIDEwMCwg b2Zmc2V0c1sxXSs0OTkpOworCQl2YWxpZGF0ZWRfYWxsb2NhdG9yX3Jlc2VydmUodmEsIC0xLCAx MDAsIG9mZnNldHNbMV0rNTAwKTsKKwl9CisKKwlpZiAob2Zmc2V0c1sxXSA+PSAxMDApIHsKKwkJ dmFsaWRhdGVkX2FsbG9jYXRvcl9yZXNlcnZlKHZhLCAtMSwgMTAwLCBvZmZzZXRzWzFdIC0gOTkp OworCQl2YWxpZGF0ZWRfYWxsb2NhdG9yX3Jlc2VydmUodmEsIC0xLCAxMDAsIG9mZnNldHNbMV0g LSAxMDApOworCX0KKworCWlndF9hc3NlcnQoIXZhbGlkYXRlZF9hbGxvY2F0b3JfZGVzdHJveSh2 YSkpOworfQorCitzdHJ1Y3QgYWxsb2NhdG9yX3F1ZXJ5IHF1ZXJ5X2FycmF5W01BWFRFU1RMRU5d OworCitzdHJ1Y3QgYWxsb2NhdG9ycyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1aW50OF90IHR5 cGU7Cit9IGFsc1tdID0geworCXsic2ltcGxlIiwgSU5URUxfQUxMT0NBVE9SX1NJTVBMRX0sCisJ eyJic3QiLCBJTlRFTF9BTExPQ0FUT1JfQlNUfSwKKwl7TlVMTCwgMH0sCit9OworCitpZ3RfbWFp bgoreworCWludCBmZDsKKwlpbnQgdGVzdGxlbjsKKwlzdHJ1Y3QgYWxsb2NhdG9ycyAqYTsKKwor CWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJ YXRvbWljX2luaXQoJm5leHRfaGFuZGxlLCAxKTsKKwkJc3JhbmRvbSgweGRlYWRiZWVmKTsKKwl9 CisKKwlpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWMoImJhc2ljIikgeworCQlmb3IgKGEgPSBhbHM7 IGEtPm5hbWU7IGErKykgeworCQkJaWd0X2R5bmFtaWNfZigiJXMtYWxsb2NhdG9yIiwgYS0+bmFt ZSkKKwkJCQliYXNpY190ZXN0KGZkLCBhLT50eXBlKTsKKwkJfQorCX0KKworCWlndF9zdWJ0ZXN0 X3dpdGhfZHluYW1pYygic2hvcnQiKSB7CisJCXRlc3RsZW4gPSBjcmVhdGVfc2ltcGxlX3Rlc3Qo ZmQsIDFVTEwgPDwgMTAsCisJCQkJCSAgICAgODAsIHF1ZXJ5X2FycmF5KTsKKworCQlmb3IgKGEg PSBhbHM7IGEtPm5hbWU7IGErKykgeworCQkJaWd0X2R5bmFtaWNfZigiJXMtYWxsb2NhdG9yIiwg YS0+bmFtZSkKKwkJCQkJZXhlY3V0ZV90ZXN0KGZkLCBhLT50eXBlLCB0ZXN0bGVuLAorCQkJCQkJ ICAgICBxdWVyeV9hcnJheSwgVEhPUk9VR0hfQ0hFQ0spOworCQl9CisJfQorCisJaWd0X3N1YnRl c3Rfd2l0aF9keW5hbWljKCJsb25nIikgeworCQl0ZXN0bGVuID0gY3JlYXRlX3NpbXBsZV90ZXN0 KGZkLCAxVUxMIDw8IDYsCisJCQkJCSAgICAgMjAwMDAwLCBxdWVyeV9hcnJheSk7CisKKwkJZm9y IChhID0gYWxzOyBhLT5uYW1lOyBhKyspIHsKKwkJCWlndF9keW5hbWljX2YoIiVzLWFsbG9jYXRv ciIsIGEtPm5hbWUpCisJCQkJCWV4ZWN1dGVfdGVzdChmZCwgYS0+dHlwZSwgdGVzdGxlbiwKKwkJ CQkJCSAgICAgcXVlcnlfYXJyYXksIE5PX0NIRUNLKTsKKwkJfQorCX0KKworCWlndF9maXh0dXJl CisJCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvbWVzb24uYnVpbGQgYi9i ZW5jaG1hcmtzL21lc29uLmJ1aWxkCmluZGV4IDk4YTA4ZTI1Yy4uZTA4NGNiMmNlIDEwMDY0NAot LS0gYS9iZW5jaG1hcmtzL21lc29uLmJ1aWxkCisrKyBiL2JlbmNobWFya3MvbWVzb24uYnVpbGQK QEAgLTEzLDYgKzEzLDcgQEAgYmVuY2htYXJrX3Byb2dzID0gWwogCSdnZW1fc3lzbGF0ZW5jeScs CiAJJ2dlbV91c2VycHRyX2JlbmNobWFyaycsCiAJJ2dlbV93c2ltJywKKwknaW50ZWxfYWxsb2Nh dG9yJywKIAkna21zX3ZibGFuaycsCiAJJ3ByaW1lX2xvb2t1cCcsCiAJJ3ZnZW1fbW1hcCcsCi0t IAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=