From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 1/4] tests/gem_evict_everything: Factor out eviction logic Date: Mon, 3 Feb 2014 10:59:40 +0000 Message-ID: <1391425183-1980-2-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1391425183-1980-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 648D7FABBB for ; Mon, 3 Feb 2014 07:11:44 -0800 (PST) In-Reply-To: <1391425183-1980-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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkluIHByZXBh cmF0aW9uIGZvciB1c2VycHRyIHRlc3Qgd2UgbW92ZSB0aGUgZXZpY3Rpb24gbG9naWMKaW50byBh IGNvbW1vbiBmaWxlIHNvIGl0IGNhbiBiZSB1c2VkIGZyb20gYm90aCB0ZXN0IGNhc2VzLgoKU2ln bmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0t CiB0ZXN0cy9ldmljdGlvbl9jb21tb24uYyAgICAgIHwgMjM1ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2dlbV9ldmljdF9ldmVyeXRoaW5nLmMgfCAy MTAgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMjc2IGluc2VydGlvbnMoKyksIDE2OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZXN0cy9ldmljdGlvbl9jb21tb24uYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V2aWN0aW9uX2Nv bW1vbi5jIGIvdGVzdHMvZXZpY3Rpb25fY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZWZlNTYwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V2aWN0aW9uX2Nv bW1vbi5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDcsIDIwMTEs IDIwMTMsIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+CisgKiAgICBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgorICogICAgVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KKyAq CisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorCitz dHJ1Y3QgaWd0X2V2aWN0aW9uX3Rlc3Rfb3BzCit7CisJdWludDMyX3QgKCpjcmVhdGUpKGludCBm ZCwgaW50IHNpemUpOworCXZvaWQJICgqY2xvc2UpKGludCBmZCwgdWludDMyX3QgYm8pOworCXZv aWQJICgqY29weSkoaW50IGZkLCB1aW50MzJfdCBkc3QsIHVpbnQzMl90IHNyYywKKwkJCSB1aW50 MzJfdCAqYWxsX2JvLCBpbnQgbnJfYm9zLCBpbnQgZXJyb3IpOworCXZvaWQJICgqY2xlYXIpKGlu dCBmZCwgdWludDMyX3QgYm8sIGludCBzaXplKTsKK307CisKKyNkZWZpbmUgRk9SS0lOR19FVklD VElPTlNfSU5URVJSVVBUSUJMRQkgICgxIDw8IDApCisjZGVmaW5lIEZPUktJTkdfRVZJQ1RJT05T X1NXQVBQSU5HCSAgKDEgPDwgMSkKKyNkZWZpbmUgRk9SS0lOR19FVklDVElPTlNfRFVQX0RSTUZE CSAgKDEgPDwgMikKKyNkZWZpbmUgRk9SS0lOR19FVklDVElPTlNfTUVNT1JZX1BSRVNTVVJFICgx IDw8IDMpCisjZGVmaW5lIEFMTF9GT1JLSU5HX0VWSUNUSU9OUwkoRk9SS0lOR19FVklDVElPTlNf SU5URVJSVVBUSUJMRSB8IFwKKwkJCQkgRk9SS0lOR19FVklDVElPTlNfU1dBUFBJTkcgfCBcCisJ CQkJIEZPUktJTkdfRVZJQ1RJT05TX0RVUF9EUk1GRCB8IFwKKwkJCQkgRk9SS0lOR19FVklDVElP TlNfTUVNT1JZX1BSRVNTVVJFKQorCitzdGF0aWMgdm9pZCBleGNoYW5nZV91aW50MzJfdCh2b2lk ICphcnJheSwgdW5zaWduZWQgaSwgdW5zaWduZWQgaikKK3sKKwl1aW50MzJfdCAqaV9hcnIgPSBh cnJheTsKKwl1aW50MzJfdCBpX3RtcDsKKworCWlfdG1wID0gaV9hcnJbaV07CisJaV9hcnJbaV0g PSBpX2FycltqXTsKKwlpX2FycltqXSA9IGlfdG1wOworfQorCitzdGF0aWMgaW50IG1pbm9yX2V2 aWN0aW9ucyhpbnQgZmQsIHN0cnVjdCBpZ3RfZXZpY3Rpb25fdGVzdF9vcHMgKm9wcywKKwkJCQlp bnQgc3VyZmFjZV9zaXplLCBpbnQgbnJfc3VyZmFjZXMpCit7CisJdWludDMyX3QgKmJvLCAqc2Vs OworCWludCBuLCBtLCBwYXNzLCBmYWlsOworCisJaWd0X3JlcXVpcmUoKHVpbnQ2NF90KW5yX3N1 cmZhY2VzICogc3VyZmFjZV9zaXplIC8gKDEwMjQgKiAxMDI0KQorCQkJPCBpbnRlbF9nZXRfdG90 YWxfcmFtX21iKCkgKiA5IC8gMTApOworCisJYm8gPSBtYWxsb2MoMypucl9zdXJmYWNlcypzaXpl b2YoKmJvKSk7CisJaWd0X2Fzc2VydChibyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgMipucl9zdXJm YWNlczsgbisrKQorCQlib1tuXSA9IG9wcy0+Y3JlYXRlKGZkLCBzdXJmYWNlX3NpemUpOworCisJ c2VsID0gYm8gKyBuOworCWZvciAoZmFpbCA9IDAsIG0gPSAwOyBmYWlsIDwgMTA7IGZhaWwrKykg eworCQlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMTAwOyBwYXNzKyspIHsKKwkJCWZvciAobiA9IDA7 IG4gPCBucl9zdXJmYWNlczsgbisrLCBtICs9IDcpCisJCQkJc2VsW25dID0gYm9bbSUoMipucl9z dXJmYWNlcyldOworCQkJb3BzLT5jb3B5KGZkLCBzZWxbMF0sIHNlbFsxXSwgc2VsLCBucl9zdXJm YWNlcywgMCk7CisJCX0KKwkJb3BzLT5jb3B5KGZkLCBib1swXSwgYm9bMF0sIGJvLCAyKm5yX3N1 cmZhY2VzLCBFTk9TUEMpOworCX0KKworCWZvciAobiA9IDA7IG4gPCAyKm5yX3N1cmZhY2VzOyBu KyspCisJCW9wcy0+Y2xvc2UoZmQsIGJvW25dKTsKKwlmcmVlKGJvKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IG1ham9yX2V2aWN0aW9ucyhpbnQgZmQsIHN0cnVjdCBpZ3RfZXZpY3Rp b25fdGVzdF9vcHMgKm9wcywKKwkJCQlpbnQgc3VyZmFjZV9zaXplLCBpbnQgbnJfc3VyZmFjZXMp Cit7CisJaW50IG4sIG0sIGxvb3A7CisJdWludDMyX3QgKmJvOworCisJaWd0X3JlcXVpcmUoKHVp bnQ2NF90KW5yX3N1cmZhY2VzICogc3VyZmFjZV9zaXplIC8gKDEwMjQgKiAxMDI0KQorCQkJPCBp bnRlbF9nZXRfdG90YWxfcmFtX21iKCkgKiA5IC8gMTApOworCisJYm8gPSBtYWxsb2MobnJfc3Vy ZmFjZXMqc2l6ZW9mKCpibykpOworCWlndF9hc3NlcnQoYm8pOworCisJZm9yIChuID0gMDsgbiA8 IG5yX3N1cmZhY2VzOyBuKyspCisJCWJvW25dID0gb3BzLT5jcmVhdGUoZmQsIHN1cmZhY2Vfc2l6 ZSk7CisKKwlmb3IgKGxvb3AgPSAwLCBtID0gMDsgbG9vcCA8IDEwMDsgbG9vcCsrLCBtICs9IDE3 KSB7CisJCW4gPSBtICUgbnJfc3VyZmFjZXM7CisJCW9wcy0+Y29weShmZCwgYm9bbl0sIGJvW25d LCAmYm9bbl0sIDEsIDApOworCX0KKworCWZvciAobiA9IDA7IG4gPCBucl9zdXJmYWNlczsgbisr KQorCQlvcHMtPmNsb3NlKGZkLCBib1tuXSk7CisJZnJlZShibyk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBzd2FwcGluZ19ldmljdGlvbnMoaW50IGZkLCBzdHJ1Y3QgaWd0X2V2aWN0 aW9uX3Rlc3Rfb3BzICpvcHMsCisJCQkJaW50IHN1cmZhY2Vfc2l6ZSwKKwkJCQlpbnQgd29ya2lu Z19zdXJmYWNlcywKKwkJCQlpbnQgdHJhc2hfc3VyZmFjZXMpCit7CisJdWludDMyX3QgKmJvOwor CWludCBpLCBuLCBwYXNzOworCisJaWd0X3JlcXVpcmUoKHVpbnQ2NF90KXdvcmtpbmdfc3VyZmFj ZXMgKiBzdXJmYWNlX3NpemUgLyAoMTAyNCAqIDEwMjQpCisJCQk8IGludGVsX2dldF90b3RhbF9y YW1fbWIoKSAqIDkgLyAxMCk7CisKKwlpZiAodHJhc2hfc3VyZmFjZXMgPCB3b3JraW5nX3N1cmZh Y2VzKQorCQl0cmFzaF9zdXJmYWNlcyA9IHdvcmtpbmdfc3VyZmFjZXM7CisKKwlibyA9IG1hbGxv Yyh0cmFzaF9zdXJmYWNlcypzaXplb2YoKmJvKSk7CisJaWd0X2Fzc2VydChibyk7CisKKwlmb3Ig KG4gPSAwOyBuIDwgdHJhc2hfc3VyZmFjZXM7IG4rKykKKwkJYm9bbl0gPSBvcHMtPmNyZWF0ZShm ZCwgc3VyZmFjZV9zaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cmFzaF9zdXJmYWNlcy8zMjsg aSsrKSB7CisJCWlndF9wZXJtdXRlX2FycmF5KGJvLCB0cmFzaF9zdXJmYWNlcywgZXhjaGFuZ2Vf dWludDMyX3QpOworCisJCWZvciAocGFzcyA9IDA7IHBhc3MgPCAxMDA7IHBhc3MrKykgeworCQkJ b3BzLT5jb3B5KGZkLCBib1swXSwgYm9bMV0sIGJvLCB3b3JraW5nX3N1cmZhY2VzLCAwKTsKKwkJ fQorCX0KKworCWZvciAobiA9IDA7IG4gPCB0cmFzaF9zdXJmYWNlczsgbisrKQorCQlvcHMtPmNs b3NlKGZkLCBib1tuXSk7CisJZnJlZShibyk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBt aW4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKworc3RhdGljIGludCBmb3JraW5nX2V2 aWN0aW9ucyhpbnQgZmQsIHN0cnVjdCBpZ3RfZXZpY3Rpb25fdGVzdF9vcHMgKm9wcywKKwkJCQlp bnQgc3VyZmFjZV9zaXplLCBpbnQgd29ya2luZ19zdXJmYWNlcywKKwkJCQlpbnQgdHJhc2hfc3Vy ZmFjZXMsIHVuc2lnbmVkIGZsYWdzKQoreworCXVpbnQzMl90ICpibzsKKwlpbnQgbiwgcGFzcywg bDsKKwlpbnQgbnVtX3RocmVhZHMgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKwlp bnQgYm9fY291bnQ7CisKKwlpZ3RfcmVxdWlyZSgodWludDY0X3Qpd29ya2luZ19zdXJmYWNlcyAq IHN1cmZhY2Vfc2l6ZSAvICgxMDI0ICogMTAyNCkKKwkJCTwgaW50ZWxfZ2V0X3RvdGFsX3JhbV9t YigpICogOSAvIDEwKTsKKworCWlmIChmbGFncyAmIEZPUktJTkdfRVZJQ1RJT05TX1NXQVBQSU5H KSB7CisJCWlndF9yZXF1aXJlKGludGVsX2dldF90b3RhbF9yYW1fbWIoKSAvIDQKKwkJCQk8IGlu dGVsX2dldF90b3RhbF9zd2FwX21iKCkpOworCQlib19jb3VudCA9IHRyYXNoX3N1cmZhY2VzOwor CisJCWlmIChib19jb3VudCA8IHdvcmtpbmdfc3VyZmFjZXMpCisJCQlib19jb3VudCA9IHdvcmtp bmdfc3VyZmFjZXM7CisJfSBlbHNlCisJCWJvX2NvdW50ID0gd29ya2luZ19zdXJmYWNlczsKKwor CWJvID0gbWFsbG9jKGJvX2NvdW50KnNpemVvZigqYm8pKTsKKwlpZ3RfYXNzZXJ0KGJvKTsKKwor CWZvciAobiA9IDA7IG4gPCBib19jb3VudDsgbisrKQorCQlib1tuXSA9IG9wcy0+Y3JlYXRlKGZk LCBzdXJmYWNlX3NpemUpOworCisJaWd0X2ZvcmsoaSwgbWluKG51bV90aHJlYWRzICogNCwgMTIp KSB7CisJCWludCByZWFsZmQgPSBmZDsKKwkJaW50IG51bV9wYXNzZXMgPSBmbGFncyAmIEZPUktJ TkdfRVZJQ1RJT05TX1NXQVBQSU5HID8gMTAgOiAxMDA7CisKKwkJLyogRXZlcnkgZm9yayBzaG91 bGQgaGF2ZSBhIGRpZmZlcmVudCBwZXJtdXRhdGlvbiEgKi8KKwkJc3JhbmQoaSAqIDYzKTsKKwor CQlpZiAoZmxhZ3MgJiBGT1JLSU5HX0VWSUNUSU9OU19JTlRFUlJVUFRJQkxFKQorCQkJaWd0X2Zv cmtfc2lnbmFsX2hlbHBlcigpOworCisJCWlndF9wZXJtdXRlX2FycmF5KGJvLCBib19jb3VudCwg ZXhjaGFuZ2VfdWludDMyX3QpOworCisJCWlmIChmbGFncyAmIEZPUktJTkdfRVZJQ1RJT05TX0RV UF9EUk1GRCkgeworCQkJcmVhbGZkID0gZHJtX29wZW5fYW55KCk7CisKKwkJCS8qIFdlIGNhbiBv dmVyd3JpdGUgdGhlIGJvIGFycmF5IHNpbmNlIHdlJ3JlIGZvcmtlZC4gKi8KKwkJCWZvciAobCA9 IDA7IGwgPCBib19jb3VudDsgbCsrKSB7CisJCQkJdWludDMyX3QgZmxpbms7CisKKwkJCQlmbGlu ayA9IGdlbV9mbGluayhmZCwgYm9bbF0pOworCQkJCWJvW2xdID0gZ2VtX29wZW4ocmVhbGZkLCBm bGluayk7CisJCQl9CisJCX0KKworCQlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgbnVtX3Bhc3Nlczsg cGFzcysrKSB7CisJCQlvcHMtPmNvcHkocmVhbGZkLCBib1swXSwgYm9bMV0sIGJvLCB3b3JraW5n X3N1cmZhY2VzLCAwKTsKKworCQkJZm9yIChsID0gMDsgbCA8IHdvcmtpbmdfc3VyZmFjZXMgJiYK KwkJCSAgKGZsYWdzICYgRk9SS0lOR19FVklDVElPTlNfTUVNT1JZX1BSRVNTVVJFKTsKKwkJCSAg ICBsKyspIHsKKwkJCQlvcHMtPmNsZWFyKHJlYWxmZCwgYm9bbF0sIHN1cmZhY2Vfc2l6ZSk7CisJ CQl9CisJCX0KKworCQlpZiAoZmxhZ3MgJiBGT1JLSU5HX0VWSUNUSU9OU19JTlRFUlJVUFRJQkxF KQorCQkJaWd0X3N0b3Bfc2lnbmFsX2hlbHBlcigpOworCisJCS8qIGRybWZkIGNsb3Npbmcgd2ls bCB0YWtlIGNhcmUgb2YgYWRkaXRpb25hbCBibyByZWZzICovCisJCWlmIChmbGFncyAmIEZPUktJ TkdfRVZJQ1RJT05TX0RVUF9EUk1GRCkKKwkJCWNsb3NlKHJlYWxmZCk7CisJfQorCisJaWd0X3dh aXRjaGlsZHJlbigpOworCisJZm9yIChuID0gMDsgbiA8IGJvX2NvdW50OyBuKyspCisJCW9wcy0+ Y2xvc2UoZmQsIGJvW25dKTsKKwlmcmVlKGJvKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvdGVzdHMvZ2VtX2V2aWN0X2V2ZXJ5dGhpbmcuYyBiL3Rlc3RzL2dlbV9ldmljdF9ldmVyeXRo aW5nLmMKaW5kZXggNDFhYmVmNy4uYWQzM2MwYSAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX2V2aWN0 X2V2ZXJ5dGhpbmcuYworKysgYi90ZXN0cy9nZW1fZXZpY3RfZXZlcnl0aGluZy5jCkBAIC0xLDUg KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCDCqSAyMDExLDIwMTIgSW50ZWwgQ29ycG9yYXRpb24K KyAqIENvcHlyaWdodCDCqSAyMDExLDIwMTIsMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCiAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLApAQCAtNDUsNiArNDUsOCBAQAog I2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgogCisjaW5jbHVkZSAi ZXZpY3Rpb25fY29tbW9uLmMiCisKICNkZWZpbmUgSEVJR0hUIDI1NgogI2RlZmluZSBXSURUSCAx MDI0CiAKQEAgLTEyNSwxODMgKzEyNyw1MSBAQCBjb3B5KGludCBmZCwgdWludDMyX3QgZHN0LCB1 aW50MzJfdCBzcmMsIHVpbnQzMl90ICphbGxfYm8sIGludCBuX2JvLCBpbnQgZXJyb3IpCiAJZnJl ZShvYmopOwogfQogCi1zdGF0aWMgdm9pZCBleGNoYW5nZV91aW50MzJfdCh2b2lkICphcnJheSwg dW5zaWduZWQgaSwgdW5zaWduZWQgaikKK3N0YXRpYyB2b2lkIGNsZWFyKGludCBmZCwgdWludDMy X3QgaGFuZGxlLCBpbnQgc2l6ZSkKIHsKLQl1aW50MzJfdCAqaV9hcnIgPSBhcnJheTsKLQl1aW50 MzJfdCBpX3RtcDsKKwl2b2lkICpiYXNlID0gZ2VtX21tYXBfX2NwdShmZCwgaGFuZGxlLCBzaXpl LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKIAotCWlfdG1wID0gaV9hcnJbaV07Ci0JaV9hcnJb aV0gPSBpX2FycltqXTsKLQlpX2FycltqXSA9IGlfdG1wOworCWlndF9hc3NlcnQoYmFzZSAhPSBO VUxMKTsKKwltZW1zZXQoYmFzZSwgMCwgc2l6ZSk7CisJbXVubWFwKGJhc2UsIHNpemUpOwogfQog Ci0jZGVmaW5lIG1pbihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQotCi0jZGVmaW5lIElO VEVSUlVQVElCTEUJKDEgPDwgMCkKLSNkZWZpbmUgU1dBUFBJTkcJKDEgPDwgMSkKLSNkZWZpbmUg RFVQX0RSTUZECSgxIDw8IDIpCi0jZGVmaW5lIE1FTU9SWV9QUkVTU1VSRQkoMSA8PCAzKQotI2Rl ZmluZSBBTExfRkxBR1MJKElOVEVSUlVQVElCTEUgfCBTV0FQUElORyB8IERVUF9EUk1GRCB8IE1F TU9SWV9QUkVTU1VSRSkKK3N0YXRpYyBzdHJ1Y3QgaWd0X2V2aWN0aW9uX3Rlc3Rfb3BzIGZhdWx0 X29wcyA9IHsKKwkuY3JlYXRlID0gZ2VtX2NyZWF0ZSwKKwkuY2xvc2UgPSBnZW1fY2xvc2UsCisJ LmNvcHkgPSBjb3B5LAorCS5jbGVhciA9IGNsZWFyLAorfTsKIAotc3RhdGljIHZvaWQgZm9ya2Vk X2V2aWN0aW9ucyhpbnQgZmQsIGludCBzaXplLCBpbnQgY291bnQsCi0JCQkgICAgIHVuc2lnbmVk IGZsYWdzKQorc3RhdGljIHZvaWQgdGVzdF9mb3JraW5nX2V2aWN0aW9ucyhpbnQgZmQsIGludCBz aXplLCBpbnQgY291bnQsCisJCQkJCXVuc2lnbmVkIGZsYWdzKQogewotCXVpbnQzMl90ICpibzsK LQlpbnQgbiwgcGFzcywgbDsKLQlpbnQgbnVtX3RocmVhZHMgPSBzeXNjb25mKF9TQ19OUFJPQ0VT U09SU19PTkxOKTsKLQlpbnQgYm9fY291bnQ7Ci0KLQlpZ3RfcmVxdWlyZSgodWludDY0X3QpY291 bnQgKiBzaXplIC8gKDEwMjQgKiAxMDI0KSA8IGludGVsX2dldF90b3RhbF9yYW1fbWIoKSAqIDkg LyAxMCk7Ci0KLQlpZiAoZmxhZ3MgJiBTV0FQUElORykgewotCQlpZ3RfcmVxdWlyZShpbnRlbF9n ZXRfdG90YWxfcmFtX21iKCkgLyA0IDwgaW50ZWxfZ2V0X3RvdGFsX3N3YXBfbWIoKSk7Ci0JCWJv X2NvdW50ID0gaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpICogMTEgLyAxMDsKLQotCQlpZiAoYm9f Y291bnQgPCBjb3VudCkKLQkJCWJvX2NvdW50ID0gY291bnQ7Ci0JfSBlbHNlCi0JCWJvX2NvdW50 ID0gY291bnQ7Ci0KLQlibyA9IG1hbGxvYyhib19jb3VudCpzaXplb2YoKmJvKSk7Ci0JaWd0X2Fz c2VydChibyk7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgYm9fY291bnQ7IG4rKykKLQkJYm9bbl0gPSBn ZW1fY3JlYXRlKGZkLCBzaXplKTsKLQotCWlndF9mb3JrKGksIG1pbihjb3VudCwgbWluKG51bV90 aHJlYWRzICogNSwgMTIpKSkgewotCQlpbnQgcmVhbGZkID0gZmQ7Ci0JCWludCBudW1fcGFzc2Vz ID0gZmxhZ3MgJiBTV0FQUElORyA/IDEwIDogMTAwOwotCi0JCS8qIEV2ZXJ5IGZvcmsgc2hvdWxk IGhhdmUgYSBkaWZmZXJlbnQgcGVybXV0YXRpb24hICovCi0JCXNyYW5kKGkgKiA2Myk7Ci0KLQkJ aWYgKGZsYWdzICYgSU5URVJSVVBUSUJMRSkKLQkJCWlndF9mb3JrX3NpZ25hbF9oZWxwZXIoKTsK LQotCQlpZ3RfcGVybXV0ZV9hcnJheShibywgYm9fY291bnQsIGV4Y2hhbmdlX3VpbnQzMl90KTsK LQotCQlpZiAoZmxhZ3MgJiBEVVBfRFJNRkQpIHsKLQkJCXJlYWxmZCA9IGRybV9vcGVuX2FueSgp OwotCi0JCQkvKiBXZSBjYW4gb3ZlcndyaXRlIHRoZSBibyBhcnJheSBzaW5jZSB3ZSdyZSBmb3Jr ZWQuICovCi0JCQlmb3IgKGwgPSAwOyBsIDwgY291bnQ7IGwrKykgewotCQkJCXVpbnQzMl90IGZs aW5rOwotCi0JCQkJZmxpbmsgPSBnZW1fZmxpbmsoZmQsIGJvW2xdKTsKLQkJCQlib1tsXSA9IGdl bV9vcGVuKHJlYWxmZCwgZmxpbmspOwotCQkJfQotCi0JCX0KLQotCQlmb3IgKHBhc3MgPSAwOyBw YXNzIDwgbnVtX3Bhc3NlczsgcGFzcysrKSB7Ci0JCQljb3B5KHJlYWxmZCwgYm9bMF0sIGJvWzFd LCBibywgY291bnQsIDApOwotCi0JCQlmb3IgKGwgPSAwOyBsIDwgY291bnQgJiYgKGZsYWdzICYg TUVNT1JZX1BSRVNTVVJFKTsgbCsrKSB7Ci0JCQkJdWludDMyX3QgKmJhc2UgPSBnZW1fbW1hcF9f Y3B1KHJlYWxmZCwgYm9bbF0sCi0JCQkJCQkJICAgICAgIHNpemUsCi0JCQkJCQkJICAgICAgIFBS T1RfUkVBRCB8IFBST1RfV1JJVEUpOwotCQkJCW1lbXNldChiYXNlLCAwLCBzaXplKTsKLQkJCQlt dW5tYXAoYmFzZSwgc2l6ZSk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZmxhZ3MgJiBJTlRFUlJVUFRJ QkxFKQotCQkJaWd0X3N0b3Bfc2lnbmFsX2hlbHBlcigpOwotCi0JCS8qIGRybWZkIGNsb3Npbmcg d2lsbCB0YWtlIGNhcmUgb2YgYWRkaXRpb25hbCBibyByZWZzICovCi0JCWlmIChmbGFncyAmIERV UF9EUk1GRCkKLQkJCWNsb3NlKHJlYWxmZCk7Ci0JfQorCWludCB0cmFzaF9jb3VudDsKIAotCWln dF93YWl0Y2hpbGRyZW4oKTsKKwl0cmFzaF9jb3VudCA9IGludGVsX2dldF90b3RhbF9yYW1fbWIo KSAqIDExIC8gMTA7CiAKLQlmb3IgKG4gPSAwOyBuIDwgYm9fY291bnQ7IG4rKykKLQkJZ2VtX2Ns b3NlKGZkLCBib1tuXSk7Ci0JZnJlZShibyk7CisJZm9ya2luZ19ldmljdGlvbnMoZmQsICZmYXVs dF9vcHMsIHNpemUsIGNvdW50LCB0cmFzaF9jb3VudCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9p ZCBzd2FwcGluZ19ldmljdGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50KQorc3RhdGlj IHZvaWQgdGVzdF9zd2FwcGluZ19ldmljdGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50 KQogewotCXVpbnQzMl90ICpibzsKLQlpbnQgaSwgbiwgcGFzczsKLQlpbnQgYm9fY291bnQ7Ci0K LQlpZ3RfcmVxdWlyZSgodWludDY0X3QpY291bnQgKiBzaXplIC8gKDEwMjQgKiAxMDI0KSA8IGlu dGVsX2dldF90b3RhbF9yYW1fbWIoKSAqIDkgLyAxMCk7CisJaW50IHRyYXNoX2NvdW50OwogCiAJ aWd0X3JlcXVpcmUoaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpIC8gNCA8IGludGVsX2dldF90b3Rh bF9zd2FwX21iKCkpOwotCWJvX2NvdW50ID0gaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpICogMTEg LyAxMDsKLQotCWlmIChib19jb3VudCA8IGNvdW50KQotCQlib19jb3VudCA9IGNvdW50OwogCi0J Ym8gPSBtYWxsb2MoYm9fY291bnQqc2l6ZW9mKCpibykpOwotCWlndF9hc3NlcnQoYm8pOworCXRy YXNoX2NvdW50ID0gaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpICogMTEgLyAxMDsKIAotCWZvciAo biA9IDA7IG4gPCBib19jb3VudDsgbisrKQotCQlib1tuXSA9IGdlbV9jcmVhdGUoZmQsIHNpemUp OwotCi0JZm9yIChpID0gMDsgaSA8IGJvX2NvdW50LzMyOyBpKyspIHsKLQkJaWd0X3Blcm11dGVf YXJyYXkoYm8sIGJvX2NvdW50LCBleGNoYW5nZV91aW50MzJfdCk7Ci0KLQkJZm9yIChwYXNzID0g MDsgcGFzcyA8IDEwMDsgcGFzcysrKSB7Ci0JCQljb3B5KGZkLCBib1swXSwgYm9bMV0sIGJvLCBj b3VudCwgMCk7Ci0JCX0KLQl9Ci0KLQlmb3IgKG4gPSAwOyBuIDwgYm9fY291bnQ7IG4rKykKLQkJ Z2VtX2Nsb3NlKGZkLCBib1tuXSk7Ci0JZnJlZShibyk7CisJc3dhcHBpbmdfZXZpY3Rpb25zKGZk LCAmZmF1bHRfb3BzLCBzaXplLCBjb3VudCwgdHJhc2hfY291bnQpOwogfQogCi1zdGF0aWMgdm9p ZCBtaW5vcl9ldmljdGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50KQorc3RhdGljIHZv aWQgdGVzdF9taW5vcl9ldmljdGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50KQogewot CXVpbnQzMl90ICpibywgKnNlbDsKLQlpbnQgbiwgbSwgcGFzcywgZmFpbDsKLQotCWlndF9yZXF1 aXJlKCh1aW50NjRfdCljb3VudCAqIHNpemUgLyAoMTAyNCAqIDEwMjQpIDwgaW50ZWxfZ2V0X3Rv dGFsX3JhbV9tYigpICogOSAvIDEwKTsKLQotCWJvID0gbWFsbG9jKDMqY291bnQqc2l6ZW9mKCpi bykpOwotCWlndF9hc3NlcnQoYm8pOwotCi0JZm9yIChuID0gMDsgbiA8IDIqY291bnQ7IG4rKykK LQkJYm9bbl0gPSBnZW1fY3JlYXRlKGZkLCBzaXplKTsKLQotCXNlbCA9IGJvICsgbjsKLQlmb3Ig KGZhaWwgPSAwLCBtID0gMDsgZmFpbCA8IDEwOyBmYWlsKyspIHsKLQkJZm9yIChwYXNzID0gMDsg cGFzcyA8IDEwMDsgcGFzcysrKSB7Ci0JCQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKywgbSAr PSA3KQotCQkJCXNlbFtuXSA9IGJvW20lKDIqY291bnQpXTsKLQkJCWNvcHkoZmQsIHNlbFswXSwg c2VsWzFdLCBzZWwsIGNvdW50LCAwKTsKLQkJfQotCQljb3B5KGZkLCBib1swXSwgYm9bMF0sIGJv LCAyKmNvdW50LCBFTk9TUEMpOwotCX0KLQotCWZvciAobiA9IDA7IG4gPCAyKmNvdW50OyBuKysp Ci0JCWdlbV9jbG9zZShmZCwgYm9bbl0pOwotCWZyZWUoYm8pOworCW1pbm9yX2V2aWN0aW9ucyhm ZCwgJmZhdWx0X29wcywgc2l6ZSwgY291bnQpOwogfQogCi1zdGF0aWMgdm9pZCBtYWpvcl9ldmlj dGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgdGVzdF9tYWpv cl9ldmljdGlvbnMoaW50IGZkLCBpbnQgc2l6ZSwgaW50IGNvdW50KQogewotCWludCBuLCBtLCBs b29wOwotCXVpbnQzMl90ICpibzsKLQotCWlndF9yZXF1aXJlKCh1aW50NjRfdCljb3VudCAqIHNp emUgLyAoMTAyNCAqIDEwMjQpIDwgaW50ZWxfZ2V0X3RvdGFsX3JhbV9tYigpICogOSAvIDEwKTsK LQotCWJvID0gbWFsbG9jKGNvdW50KnNpemVvZigqYm8pKTsKLQlpZ3RfYXNzZXJ0KGJvKTsKLQot CWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKQotCQlib1tuXSA9IGdlbV9jcmVhdGUoZmQsIHNp emUpOwotCi0JZm9yIChsb29wID0gMCwgbSA9IDA7IGxvb3AgPCAxMDA7IGxvb3ArKywgbSArPSAx NykgewotCQluID0gbSAlIGNvdW50OwotCQljb3B5KGZkLCBib1tuXSwgYm9bbl0sICZib1tuXSwg MSwgMCk7Ci0JfQotCi0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspCi0JCWdlbV9jbG9zZShm ZCwgYm9bbl0pOwotCWZyZWUoYm8pOworCW1ham9yX2V2aWN0aW9ucyhmZCwgJmZhdWx0X29wcywg c2l6ZSwgY291bnQpOwogfQogCiBpZ3RfbWFpbgpAQCAtMzE5LDI2ICsxODksMjggQEAgaWd0X21h aW4KIAkJY291bnQgPSAzKmdlbV9hcGVydHVyZV9zaXplKGZkKSAvIHNpemUgLyA0OwogCX0KIAot CWZvciAodW5zaWduZWQgZmxhZ3MgPSAwOyBmbGFncyA8IEFMTF9GTEFHUyArIDE7IGZsYWdzKysp IHsKKwlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3MgPCBBTExfRk9SS0lOR19FVklDVElP TlMgKyAxOyBmbGFncysrKSB7CiAJCWlndF9zdWJ0ZXN0X2YoImZvcmtlZCVzJXMlcy0lcyIsCi0J CQkgICAgICBmbGFncyAmIFNXQVBQSU5HID8gIi1zd2FwcGluZyIgOiAiIiwKLQkJCSAgICAgIGZs YWdzICYgRFVQX0RSTUZEID8gIi1tdWx0aWZkIiA6ICIiLAotCQkJICAgICAgZmxhZ3MgJiBNRU1P UllfUFJFU1NVUkUgPyAiLW1lbXByZXNzdXJlIiA6ICIiLAotCQkJICAgICAgZmxhZ3MgJiBJTlRF UlJVUFRJQkxFID8gImludGVycnVwdGlibGUiIDogIm5vcm1hbCIpIHsKLQkJCWZvcmtlZF9ldmlj dGlvbnMoZmQsIHNpemUsIGNvdW50LCBmbGFncyk7CisJCSAgICBmbGFncyAmIEZPUktJTkdfRVZJ Q1RJT05TX1NXQVBQSU5HID8gIi1zd2FwcGluZyIgOiAiIiwKKwkJICAgIGZsYWdzICYgRk9SS0lO R19FVklDVElPTlNfRFVQX0RSTUZEID8gIi1tdWx0aWZkIiA6ICIiLAorCQkgICAgZmxhZ3MgJiBG T1JLSU5HX0VWSUNUSU9OU19NRU1PUllfUFJFU1NVUkUgPworCQkJCSItbWVtcHJlc3N1cmUiIDog IiIsCisJCSAgICBmbGFncyAmIEZPUktJTkdfRVZJQ1RJT05TX0lOVEVSUlVQVElCTEUgPworCQkJ CSJpbnRlcnJ1cHRpYmxlIiA6ICJub3JtYWwiKSB7CisJCQl0ZXN0X2ZvcmtpbmdfZXZpY3Rpb25z KGZkLCBzaXplLCBjb3VudCwgZmxhZ3MpOwogCQl9CiAJfQogCiAJaWd0X3N1YnRlc3QoInN3YXBw aW5nLW5vcm1hbCIpCi0JCXN3YXBwaW5nX2V2aWN0aW9ucyhmZCwgc2l6ZSwgY291bnQpOworCQl0 ZXN0X3N3YXBwaW5nX2V2aWN0aW9ucyhmZCwgc2l6ZSwgY291bnQpOwogCiAJaWd0X3N1YnRlc3Qo Im1pbm9yLW5vcm1hbCIpCi0JCW1pbm9yX2V2aWN0aW9ucyhmZCwgc2l6ZSwgY291bnQpOworCQl0 ZXN0X21pbm9yX2V2aWN0aW9ucyhmZCwgc2l6ZSwgY291bnQpOwogCiAJaWd0X3N1YnRlc3QoIm1h am9yLW5vcm1hbCIpIHsKIAkJc2l6ZSA9IDMqZ2VtX2FwZXJ0dXJlX3NpemUoZmQpIC8gNDsKIAkJ Y291bnQgPSA0OwotCQltYWpvcl9ldmljdGlvbnMoZmQsIHNpemUsIGNvdW50KTsKKwkJdGVzdF9t YWpvcl9ldmljdGlvbnMoZmQsIHNpemUsIGNvdW50KTsKIAl9CiAKIAlpZ3RfZml4dHVyZSB7CkBA IC0zNDksMTUgKzIyMSwxNSBAQCBpZ3RfbWFpbgogCWlndF9mb3JrX3NpZ25hbF9oZWxwZXIoKTsK IAogCWlndF9zdWJ0ZXN0KCJzd2FwcGluZy1pbnRlcnJ1cHRpYmxlIikKLQkJc3dhcHBpbmdfZXZp Y3Rpb25zKGZkLCBzaXplLCBjb3VudCk7CisJCXRlc3Rfc3dhcHBpbmdfZXZpY3Rpb25zKGZkLCBz aXplLCBjb3VudCk7CiAKIAlpZ3Rfc3VidGVzdCgibWlub3ItaW50ZXJydXB0aWJsZSIpCi0JCW1p bm9yX2V2aWN0aW9ucyhmZCwgc2l6ZSwgY291bnQpOworCQl0ZXN0X21pbm9yX2V2aWN0aW9ucyhm ZCwgc2l6ZSwgY291bnQpOwogCiAJaWd0X3N1YnRlc3QoIm1ham9yLWludGVycnVwdGlibGUiKSB7 CiAJCXNpemUgPSAzKmdlbV9hcGVydHVyZV9zaXplKGZkKSAvIDQ7CiAJCWNvdW50ID0gNDsKLQkJ bWFqb3JfZXZpY3Rpb25zKGZkLCBzaXplLCBjb3VudCk7CisJCXRlc3RfbWFqb3JfZXZpY3Rpb25z KGZkLCBzaXplLCBjb3VudCk7CiAJfQogCiAJaWd0X3N0b3Bfc2lnbmFsX2hlbHBlcigpOwotLSAK MS44LjQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK