From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 9869C6E5FB for ; Fri, 25 Jan 2019 14:07:37 +0000 (UTC) From: Paul Kocialkowski Date: Fri, 25 Jan 2019 15:06:23 +0100 Message-Id: <20190125140623.10801-22-paul.kocialkowski@bootlin.com> In-Reply-To: <20190125140623.10801-1-paul.kocialkowski@bootlin.com> References: <20190125140623.10801-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 21/21] chamelium: Add a display test for randomized planes 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: Petri Latvala , Eben Upton List-ID: VGhpcyBpbnRyb2R1Y2VzIGEgbmV3IHRlc3QgZm9yIHRoZSBDaGFtZWxpdW0sIHRoYXQgc2V0cyB1 cCBwbGFuZXMKd2l0aCByYW5kb21pemVkIHByb3BlcnRpZXMgc3VjaCBhcyB0aGUgZm9ybWF0LCBk aW1lbnNpb25zLCBwb3NpdGlvbiwKaW4tZnJhbWVidWZmZXIgb2Zmc2V0cyBhbmQgc3RyaWRlLiBU aGUgQ2hhbWVsaXVtIGNhcHR1cmUgaXMgY2hlY2tlZAphZ2FpbnN0IHRoZSByZWZlcmVuY2UgZ2Vu ZXJhdGVkIGJ5IGNhaXJvIHdpdGggZWl0aGVyIGEgQ1JDIG9yIHRoZQpjaGVja2VyYm9hcmQtc3Bl Y2lmaWMgY29tcGFyaXNvbiBtZXRob2QuCgpUaGlzIHRlc3QgYWxzbyBpbmNsdWRlcyB0ZXN0aW5n IG9mIHRoZSBWQzQtc3BlY2lmaWMgVC10aWxlZCBhbmQKU0FORC10aWxlZCBtb2RlcywgaW4gYWxs IGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4KClNpbmNlIHRoaXMgdGVzdCBkb2Vz IG5vdCBzaGFyZSBtdWNoIHdpdGggcHJldmlvdXMgQ2hhbWVsaXVtIGRpc3BsYXkKdGVzdHMgKGVz cGVjaWFsbHkgcmVnYXJkaW5nIEtNUyBjb25maWd1cmF0aW9uKSwgbW9zdCBvZiB0aGUgY29kZSBp cwpub3Qgc2hhcmVkIHdpdGggb3RoZXIgdGVzdHMuCgpUaGlzIHRlc3QgY2FuIGJlIGRlcml2ZWQg d2l0aCByZXByb2R1Y2libGUgcHJvcGVydGllcyBmb3IgcmVncmVzc2lvbgp0ZXN0aW5nIGluIHRo ZSBmdXR1cmUuIEZvciBub3csIGl0IHNlcnZlcyBhcyBhIGZ1enppbmcgdGVzdAoKU2lnbmVkLW9m Zi1ieTogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgot LS0KIHRlc3RzL2ttc19jaGFtZWxpdW0uYyB8IDQzOCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0MzggaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL3Rlc3RzL2ttc19jaGFtZWxpdW0uYyBiL3Rlc3RzL2ttc19jaGFtZWxpdW0uYwpp bmRleCBmMzMyNTkyYjRlZGIuLmUwNzE1OTUwMWM4NyAxMDA2NDQKLS0tIGEvdGVzdHMva21zX2No YW1lbGl1bS5jCisrKyBiL3Rlc3RzL2ttc19jaGFtZWxpdW0uYwpAQCAtMjYsNiArMjYsNyBAQAog CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X3Zj NC5oIgogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTcwMyw2 ICs3MDQsNDM1IEBAIHRlc3RfZGlzcGxheV9mcmFtZV9kdW1wKGRhdGFfdCAqZGF0YSwgc3RydWN0 IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQogCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7 CiB9CiAKK3N0YXRpYyB2b2lkIHNlbGVjdF90aWxlZF9tb2RpZmllcihpZ3RfcGxhbmVfdCAqcGxh bmUsIHVpbnQzMl90IHdpZHRoLAorCQkJCSAgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3Jt YXQsCisJCQkJICB1aW50NjRfdCAqbW9kaWZpZXIpCit7CisJaWYgKGlndF9wbGFuZV9oYXNfZm9y bWF0X21vZChwbGFuZSwgZm9ybWF0LAorCQkJCSAgICAgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01f VkM0X1RfVElMRUQpKSB7CisJCWlndF9kZWJ1ZygiU2VsZWN0aW5nIFZDNCBULXRpbGluZ1xuIik7 CisKKwkJKm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fVkM0X1RfVElMRUQ7CisJ fSBlbHNlIGlmIChpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwKKwkJCQkJ ICAgIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQyNTYpKSB7CisJCS8qIFJhbmRvbWl6ZSB0 aGUgY29sdW1uIGhlaWdodCB0byBsZXNzIHRoYW4gdHdpY2UgdGhlIG1pbmltdW0uICovCisJCXNp emVfdCBjb2x1bW5faGVpZ2h0ID0gKHJhbmQoKSAlIGhlaWdodCkgKyBoZWlnaHQ7CisKKwkJaWd0 X2RlYnVnKCJTZWxlY3RpbmcgVkM0IFNBTkQyNTYgdGlsaW5nIHdpdGggY29sdW1uIGhlaWdodCAl bGRcbiIsCisJCQkgIGNvbHVtbl9oZWlnaHQpOworCisJCSptb2RpZmllciA9IERSTV9GT1JNQVRf TU9EX0JST0FEQ09NX1NBTkQyNTZfQ09MX0hFSUdIVChjb2x1bW5faGVpZ2h0KTsKKwl9IGVsc2Ug eworCQkqbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9MSU5FQVI7CisJfQorfQorCitzdGF0aWMg dm9pZCByYW5kb21pemVfcGxhbmVfZm9ybWF0X3N0cmlkZShpZ3RfcGxhbmVfdCAqcGxhbmUsCisJ CQkJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCQkJICB1aW50MzJfdCAq Zm9ybWF0LCB1aW50NjRfdCAqbW9kaWZpZXIsCisJCQkJCSAgc2l6ZV90ICpzdHJpZGUsIGJvb2wg YWxsb3dfeXV2KQoreworCXNpemVfdCBzdHJpZGVfbWluOworCXVpbnQzMl90ICpmb3JtYXRzX2Fy cmF5OworCXVuc2lnbmVkIGludCBmb3JtYXRzX2NvdW50OworCXVuc2lnbmVkIGludCBjb3VudCA9 IDA7CisJdW5zaWduZWQgaW50IGk7CisJYm9vbCB0aWxlZDsKKwlpbnQgaW5kZXg7CisKKwlpZ3Rf Zm9ybWF0X2FycmF5X2ZpbGwoJmZvcm1hdHNfYXJyYXksICZmb3JtYXRzX2NvdW50LCBhbGxvd195 dXYpOworCisJLyogRmlyc3QgcGFzcyB0byBjb3VudCB0aGUgc3VwcG9ydGVkIGZvcm1hdHMuICov CisJZm9yIChpID0gMDsgaSA8IGZvcm1hdHNfY291bnQ7IGkrKykKKwkJaWYgKGlndF9wbGFuZV9o YXNfZm9ybWF0X21vZChwbGFuZSwgZm9ybWF0c19hcnJheVtpXSwKKwkJCQkJICAgICBEUk1fRk9S TUFUX01PRF9MSU5FQVIpKQorCQkJY291bnQrKzsKKworCWlndF9hc3NlcnQoY291bnQgPiAwKTsK KworCWluZGV4ID0gcmFuZCgpICUgY291bnQ7CisKKwkvKiBTZWNvbmQgcGFzcyB0byBnZXQgdGhl IGluZGV4LXRoIHN1cHBvcnRlZCBmb3JtYXQuICovCisJZm9yIChpID0gMDsgaSA8IGZvcm1hdHNf Y291bnQ7IGkrKykgeworCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9y bWF0c19hcnJheVtpXSwKKwkJCQkJICAgICAgRFJNX0ZPUk1BVF9NT0RfTElORUFSKSkKKwkJCWNv bnRpbnVlOworCisJCWlmICghaW5kZXgtLSkgeworCQkJKmZvcm1hdCA9IGZvcm1hdHNfYXJyYXlb aV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWZyZWUoZm9ybWF0c19hcnJheSk7CisKKwlpZ3Rf YXNzZXJ0KGluZGV4IDwgMCk7CisKKwlzdHJpZGVfbWluID0gd2lkdGggKiBpZ3RfZm9ybWF0X3Bs YW5lX2JwcCgqZm9ybWF0LCAwKSAvIDg7CisKKwkvKiBSYW5kb21pemUgdGhlIHN0cmlkZSB0byBs ZXNzIHRoYW4gdHdpY2UgdGhlIG1pbmltdW0uICovCisJKnN0cmlkZSA9IChyYW5kKCkgJSBzdHJp ZGVfbWluKSArIHN0cmlkZV9taW47CisKKwkvKiBQaXhtYW4gcmVxdWlyZXMgdGhlIHN0cmlkZSB0 byBiZSBhbGlnbmVkIHRvIDMyLWJ5dGUgd29yZHMuICovCisJKnN0cmlkZSA9IEFMSUdOKCpzdHJp ZGUsIHNpemVvZih1aW50MzJfdCkpOworCisJLyogUmFuZG9taXplIHRoZSB1c2Ugb2YgYSB0aWxl ZCBtb2RlIHdpdGggYSAxLzQgcHJvYmFiaWxpdHkuICovCisJdGlsZWQgPSAoKHJhbmQoKSAlIDQp ID09IDApOworCisJaWYgKHRpbGVkKQorCQlzZWxlY3RfdGlsZWRfbW9kaWZpZXIocGxhbmUsIHdp ZHRoLCBoZWlnaHQsICpmb3JtYXQsIG1vZGlmaWVyKTsKKwllbHNlCisJCSptb2RpZmllciA9IERS TV9GT1JNQVRfTU9EX0xJTkVBUjsKK30KKworc3RhdGljIHZvaWQgcmFuZG9taXplX3BsYW5lX2Rp bWVuc2lvbnMoZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJCSAgICAgICB1aW50MzJfdCAqd2lk dGgsIHVpbnQzMl90ICpoZWlnaHQsCisJCQkJICAgICAgIHVpbnQzMl90ICpzcmNfdywgdWludDMy X3QgKnNyY19oLAorCQkJCSAgICAgICB1aW50MzJfdCAqc3JjX3gsIHVpbnQzMl90ICpzcmNfeSwK KwkJCQkgICAgICAgdWludDMyX3QgKmNydGNfdywgdWludDMyX3QgKmNydGNfaCwKKwkJCQkgICAg ICAgaW50MzJfdCAqY3J0Y194LCBpbnQzMl90ICpjcnRjX3ksCisJCQkJICAgICAgIGJvb2wgYWxs b3dfc2NhbGluZykKK3sKKwlkb3VibGUgcmF0aW87CisKKwkvKiBSYW5kb21pemUgd2lkdGggYW5k IGhlaWdodCBpbiB0aGUgbW9kZSBkaW1lbnNpb25zIHJhbmdlLiAqLworCSp3aWR0aCA9IChyYW5k KCkgJSBtb2RlLT5oZGlzcGxheSkgKyAxOworCSpoZWlnaHQgPSAocmFuZCgpICUgbW9kZS0+dmRp c3BsYXkpICsgMTsKKworCS8qIFJhbmRvbWl6ZSBzb3VyY2Ugb2Zmc2V0IGluIHRoZSBmaXJzdCBo YWxmIG9mIHRoZSBvcmlnaW5hbCBzaXplLiAqLworCSpzcmNfeCA9IHJhbmQoKSAlICgqd2lkdGgg LyAyKTsKKwkqc3JjX3kgPSByYW5kKCkgJSAoKmhlaWdodCAvIDIpOworCisJLyogVGhlIHNvdXJj ZSBzaXplIG9ubHkgaW5jbHVkZXMgdGhlIGFjdGl2ZSBzb3VyY2UgYXJlYS4gKi8KKwkqc3JjX3cg PSAqd2lkdGggLSAqc3JjX3g7CisJKnNyY19oID0gKmhlaWdodCAtICpzcmNfeTsKKworCWlmIChh bGxvd19zY2FsaW5nKSB7CisJCSpjcnRjX3cgPSAocmFuZCgpICUgbW9kZS0+aGRpc3BsYXkpICsg MTsKKwkJKmNydGNfaCA9IChyYW5kKCkgJSBtb2RlLT52ZGlzcGxheSkgKyAxOworCisJCS8qCisJ CSAqIERvbid0IGJvdGhlciB3aXRoIHNjYWxpbmcgaWYgZGltZW5zaW9ucyBhcmUgcXVpdGUgY2xv c2UgaW4KKwkJICogb3JkZXIgdG8gZ2V0IG5vbi1zY2FsaW5nIGNhc2VzIG1vcmUgZnJlcXVlbnRs eS4gQWxzbyBsaW1pdAorCQkgKiBzY2FsaW5nIHRvIDN4IHRvIGF2b2lkIGFncmVzc2l2ZSBmaWx0 ZXJpbmcgdGhhdCBtYWtlcworCQkgKiBjb21wYXJpc29uIGxlc3MgcmVsaWFibGUuCisJCSAqLwor CisJCXJhdGlvID0gKChkb3VibGUpICpjcnRjX3cgLyAqc3JjX3cpOworCQlpZiAocmF0aW8gPiAw LjggJiYgcmF0aW8gPCAxLjIpCisJCQkqY3J0Y193ID0gKnNyY193OworCQllbHNlIGlmIChyYXRp byA+IDMuMCkKKwkJCSpjcnRjX3cgPSAqc3JjX3cgKiAzOworCisJCXJhdGlvID0gKChkb3VibGUp ICpjcnRjX2ggLyAqc3JjX2gpOworCQlpZiAocmF0aW8gPiAwLjggJiYgcmF0aW8gPCAxLjIpCisJ CQkqY3J0Y19oID0gKnNyY19oOworCQllbHNlIGlmIChyYXRpbyA+IDMuMCkKKwkJCSpjcnRjX2gg PSAqc3JjX2ggKiAzOworCX0gZWxzZSB7CisJCSpjcnRjX3cgPSAqc3JjX3c7CisJCSpjcnRjX2gg PSAqc3JjX2g7CisJfQorCisJaWYgKCpjcnRjX3cgIT0gKnNyY193IHx8ICpjcnRjX2ggIT0gKnNy Y19oKSB7CisJCS8qCisJCSAqIFdoZW4gc2NhbGluZyBpcyBpbnZvbHZlZCwgbWFrZSBzdXJlIHRv IG5vdCBnbyBvZmYtYm91bmRzIG9yCisJCSAqIHNjYWxlZCBjbGlwcGluZyBtYXkgcmVzdWx0IGlu IGRlY2ltYWwgZGltZW5zaW9ucywgdGhhdCBtb3N0CisJCSAqIGRyaXZlcnMgZG9uJ3Qgc3VwcG9y dC4KKwkJICovCisJCSpjcnRjX3ggPSByYW5kKCkgJSAobW9kZS0+aGRpc3BsYXkgLSAqY3J0Y193 KTsKKwkJKmNydGNfeSA9IHJhbmQoKSAlIChtb2RlLT52ZGlzcGxheSAtICpjcnRjX2gpOworCX0g ZWxzZSB7CisJCS8qCisJCSAqIFJhbmRvbWl6ZSB0aGUgb24tY3J0YyBwb3NpdGlvbiBhbmQgYWxs b3cgdGhlIHBsYW5lIHRvIGdvCisJCSAqIG9mZi1kaXNwbGF5IGJ5IGxlc3MgdGhhbiBoYWxmIG9m IGl0cyBvbi1jcnRjIGRpbWVuc2lvbnMuCisJCSAqLworCQkqY3J0Y194ID0gKHJhbmQoKSAlIG1v ZGUtPmhkaXNwbGF5KSAtICpjcnRjX3cgLyAyOworCQkqY3J0Y195ID0gKHJhbmQoKSAlIG1vZGUt PnZkaXNwbGF5KSAtICpjcnRjX2ggLyAyOworCX0KK30KKworc3RhdGljIHZvaWQgYmxpdF9wbGFu ZV9jYWlybyhkYXRhX3QgKmRhdGEsIGNhaXJvX3N1cmZhY2VfdCAqcmVzdWx0LAorCQkJICAgICB1 aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gsCisJCQkgICAgIHVpbnQzMl90IHNyY194LCB1 aW50MzJfdCBzcmNfeSwKKwkJCSAgICAgdWludDMyX3QgY3J0Y193LCB1aW50MzJfdCBjcnRjX2gs CisJCQkgICAgIGludDMyX3QgY3J0Y194LCBpbnQzMl90IGNydGNfeSwKKwkJCSAgICAgc3RydWN0 IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOworCWNhaXJvX3N1cmZh Y2VfdCAqY2xpcHBlZF9zdXJmYWNlOworCWNhaXJvX3QgKmNyOworCisJc3VyZmFjZSA9IGlndF9n ZXRfY2Fpcm9fc3VyZmFjZShkYXRhLT5kcm1fZmQsIGZiKTsKKworCWlmIChzcmNfeCB8fCBzcmNf eSkgeworCQljbGlwcGVkX3N1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlS T19GT1JNQVRfUkdCMjQsCisJCQkJCQkJICAgICBzcmNfdywgc3JjX2gpOworCisJCWNyID0gY2Fp cm9fY3JlYXRlKGNsaXBwZWRfc3VyZmFjZSk7CisKKwkJY2Fpcm9fdHJhbnNsYXRlKGNyLCAtMS4g KiBzcmNfeCwgLTEuICogc3JjX3kpOworCisJCWNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwg c3VyZmFjZSwgMCwgMCk7CisKKwkJY2Fpcm9fcGFpbnQoY3IpOworCQljYWlyb19zdXJmYWNlX2Zs dXNoKGNsaXBwZWRfc3VyZmFjZSk7CisKKwkJY2Fpcm9fZGVzdHJveShjcik7CisJfSBlbHNlIHsK KwkJY2xpcHBlZF9zdXJmYWNlID0gc3VyZmFjZTsKKwl9CisKKwljciA9IGNhaXJvX2NyZWF0ZShy ZXN1bHQpOworCisJY2Fpcm9fdHJhbnNsYXRlKGNyLCBjcnRjX3gsIGNydGNfeSk7CisKKwlpZiAo c3JjX3cgIT0gY3J0Y193IHx8IHNyY19oICE9IGNydGNfaCkgeworCQljYWlyb19zY2FsZShjciwg KGRvdWJsZSkgY3J0Y193IC8gc3JjX3csCisJCQkgICAgKGRvdWJsZSkgY3J0Y19oIC8gc3JjX2gp OworCX0KKworCWNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgY2xpcHBlZF9zdXJmYWNlLCAw LCAwKTsKKwljYWlyb19zdXJmYWNlX2Rlc3Ryb3koY2xpcHBlZF9zdXJmYWNlKTsKKworCWlmIChz cmNfdyAhPSBjcnRjX3cgfHwgc3JjX2ggIT0gY3J0Y19oKSB7CisJCWNhaXJvX3BhdHRlcm5fc2V0 X2ZpbHRlcihjYWlyb19nZXRfc291cmNlKGNyKSwKKwkJCQkJIENBSVJPX0ZJTFRFUl9CSUxJTkVB Uik7CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNyKSwKKwkJ CQkJIENBSVJPX0VYVEVORF9OT05FKTsKKwl9CisKKwljYWlyb19wYWludChjcik7CisJY2Fpcm9f c3VyZmFjZV9mbHVzaChyZXN1bHQpOworCisJY2Fpcm9fZGVzdHJveShjcik7Cit9CisKK3N0YXRp YyB2b2lkIGNvbmZpZ3VyZV9wbGFuZShpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IHNyY193 LCB1aW50MzJfdCBzcmNfaCwKKwkJCSAgICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ks IHVpbnQzMl90IGNydGNfdywKKwkJCSAgICB1aW50MzJfdCBjcnRjX2gsIGludDMyX3QgY3J0Y194 LCBpbnQzMl90IGNydGNfeSwKKwkJCSAgICBzdHJ1Y3QgaWd0X2ZiICpmYikKK3sKKwlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCBmYik7CisKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBj cnRjX3gsIGNydGNfeSk7CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjcnRjX3csIGNydGNf aCk7CisKKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgc3JjX3gsIHNyY195KTsKKwlp Z3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBzcmNfdywgc3JjX2gpOworfQorCitzdGF0aWMgdm9p ZCBwcmVwYXJlX3JhbmRvbWl6ZWRfcGxhbmUoZGF0YV90ICpkYXRhLAorCQkJCSAgICAgZHJtTW9k ZU1vZGVJbmZvICptb2RlLAorCQkJCSAgICAgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCSAgICAg c3RydWN0IGlndF9mYiAqb3ZlcmxheV9mYiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCwK KwkJCQkgICAgIGNhaXJvX3N1cmZhY2VfdCAqcmVzdWx0X3N1cmZhY2UsCisJCQkJICAgICBib29s IGFsbG93X3NjYWxpbmcsIGJvb2wgYWxsb3dfeXV2KQoreworCXN0cnVjdCBpZ3RfZmIgcGF0dGVy bl9mYjsKKwl1aW50MzJfdCBvdmVybGF5X2ZiX3csIG92ZXJsYXlfZmJfaDsKKwl1aW50MzJfdCBv dmVybGF5X3NyY193LCBvdmVybGF5X3NyY19oOworCXVpbnQzMl90IG92ZXJsYXlfc3JjX3gsIG92 ZXJsYXlfc3JjX3k7CisJaW50MzJfdCBvdmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3k7CisJ dWludDMyX3Qgb3ZlcmxheV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oOworCXVpbnQzMl90IGZvcm1h dDsKKwl1aW50NjRfdCBtb2RpZmllcjsKKwlzaXplX3Qgc3RyaWRlOworCWJvb2wgdGlsZWQ7CisJ aW50IGZiX2lkOworCisJcmFuZG9taXplX3BsYW5lX2RpbWVuc2lvbnMobW9kZSwgJm92ZXJsYXlf ZmJfdywgJm92ZXJsYXlfZmJfaCwKKwkJCQkgICAmb3ZlcmxheV9zcmNfdywgJm92ZXJsYXlfc3Jj X2gsCisJCQkJICAgJm92ZXJsYXlfc3JjX3gsICZvdmVybGF5X3NyY195LAorCQkJCSAgICZvdmVy bGF5X2NydGNfdywgJm92ZXJsYXlfY3J0Y19oLAorCQkJCSAgICZvdmVybGF5X2NydGNfeCwgJm92 ZXJsYXlfY3J0Y195LAorCQkJCSAgIGFsbG93X3NjYWxpbmcpOworCisJaWd0X2RlYnVnKCJQbGFu ZSAlZDogZnJhbWVidWZmZXIgc2l6ZSAlZHglZFxuIiwgaW5kZXgsCisJCSAgb3ZlcmxheV9mYl93 LCBvdmVybGF5X2ZiX2gpOworCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IG9uLWNydGMgc2l6ZSAlZHgl ZFxuIiwgaW5kZXgsCisJCSAgb3ZlcmxheV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oKTsKKwlpZ3Rf ZGVidWcoIlBsYW5lICVkOiBvbi1jcnRjIHBvc2l0aW9uICVkeCVkXG4iLCBpbmRleCwKKwkJICBv dmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3kpOworCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IGlu LWZyYW1lYnVmZmVyIHNpemUgJWR4JWRcbiIsIGluZGV4LAorCQkgIG92ZXJsYXlfc3JjX3csIG92 ZXJsYXlfc3JjX2gpOworCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IGluLWZyYW1lYnVmZmVyIHBvc2l0 aW9uICVkeCVkXG4iLCBpbmRleCwKKwkJICBvdmVybGF5X3NyY194LCBvdmVybGF5X3NyY195KTsK KworCS8qIEdldCBhIHBhdHRlcm4gZnJhbWVidWZmZXIgZm9yIHRoZSBvdmVybGF5IHBsYW5lLiAq LworCWZiX2lkID0gY2hhbWVsaXVtX2dldF9wYXR0ZXJuX2ZiKGRhdGEsIG92ZXJsYXlfZmJfdywg b3ZlcmxheV9mYl9oLAorCQkJCQkgRFJNX0ZPUk1BVF9YUkdCODg4OCwgMzIsICZwYXR0ZXJuX2Zi KTsKKwlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7CisKKwlyYW5kb21pemVfcGxhbmVfZm9ybWF0X3N0 cmlkZShwbGFuZSwgb3ZlcmxheV9mYl93LCBvdmVybGF5X2ZiX2gsCisJCQkJICAgICAgJmZvcm1h dCwgJm1vZGlmaWVyLCAmc3RyaWRlLCBhbGxvd195dXYpOworCisJdGlsZWQgPSAobW9kaWZpZXIg IT0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7CisKKwlpZ3RfZGVidWcoIlBsYW5lICVkOiAl cyBmb3JtYXQgKCVzKSB3aXRoIHN0cmlkZSAlbGRcbiIsIGluZGV4LAorCQkgIGlndF9mb3JtYXRf c3RyKGZvcm1hdCksIHRpbGVkID8gInRpbGVkIiA6ICJsaW5lYXIiLCBzdHJpZGUpOworCisJZmJf aWQgPSBpZ3RfZmJfY29udmVydF93aXRoX3N0cmlkZShvdmVybGF5X2ZiLCAmcGF0dGVybl9mYiwg Zm9ybWF0LAorCQkJCQkgICBtb2RpZmllciwgc3RyaWRlKTsKKwlpZ3RfYXNzZXJ0KGZiX2lkID4g MCk7CisKKwlibGl0X3BsYW5lX2NhaXJvKGRhdGEsIHJlc3VsdF9zdXJmYWNlLCBvdmVybGF5X3Ny Y193LCBvdmVybGF5X3NyY19oLAorCQkJIG92ZXJsYXlfc3JjX3gsIG92ZXJsYXlfc3JjX3ksCisJ CQkgb3ZlcmxheV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oLAorCQkJIG92ZXJsYXlfY3J0Y194LCBv dmVybGF5X2NydGNfeSwgJnBhdHRlcm5fZmIpOworCisJY29uZmlndXJlX3BsYW5lKHBsYW5lLCBv dmVybGF5X3NyY193LCBvdmVybGF5X3NyY19oLAorCQkJb3ZlcmxheV9zcmNfeCwgb3ZlcmxheV9z cmNfeSwKKwkJCW92ZXJsYXlfY3J0Y193LCBvdmVybGF5X2NydGNfaCwKKwkJCW92ZXJsYXlfY3J0 Y194LCBvdmVybGF5X2NydGNfeSwgb3ZlcmxheV9mYik7CisKKwkvKiBSZW1vdmUgdGhlIG9yaWdp bmFsIHBhdHRlcm4gZnJhbWVidWZmZXIuICovCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQs ICZwYXR0ZXJuX2ZiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kaXNwbGF5X3BsYW5lc19yYW5k b20oZGF0YV90ICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQs CisJCQkJICAgICAgIGVudW0gY2hhbWVsaXVtX2NoZWNrIGNoZWNrKQoreworCWlndF9vdXRwdXRf dCAqb3V0cHV0OworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwlpZ3RfcGxhbmVfdCAqcHJpbWFy eV9wbGFuZTsKKwlzdHJ1Y3QgaWd0X2ZiIHByaW1hcnlfZmI7CisJc3RydWN0IGlndF9mYiByZXN1 bHRfZmI7CisJc3RydWN0IGlndF9mYiAqb3ZlcmxheV9mYnM7CisJaWd0X2NyY190ICpjcmM7CisJ aWd0X2NyY190ICpleHBlY3RlZF9jcmM7CisJc3RydWN0IGNoYW1lbGl1bV9mYl9jcmNfYXN5bmNf ZGF0YSAqZmJfY3JjOworCXVuc2lnbmVkIGludCBvdmVybGF5X3BsYW5lc19tYXggPSAwOworCXVu c2lnbmVkIGludCBvdmVybGF5X3BsYW5lc19jb3VudDsKKwljYWlyb19zdXJmYWNlX3QgKnJlc3Vs dF9zdXJmYWNlOworCWludCBjYXB0dXJlZF9mcmFtZV9jb3VudDsKKwlib29sIGFsbG93X3NjYWxp bmc7CisJYm9vbCBhbGxvd195dXY7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGZi X2lkOworCisJc3dpdGNoIChjaGVjaykgeworCWNhc2UgQ0hBTUVMSVVNX0NIRUNLX0NSQzoKKwkJ YWxsb3dfc2NhbGluZyA9IGZhbHNlOworCQlhbGxvd195dXYgPSBmYWxzZTsKKwkJYnJlYWs7CisJ Y2FzZSBDSEFNRUxJVU1fQ0hFQ0tfQ0hFQ0tFUkJPQVJEOgorCQlhbGxvd19zY2FsaW5nID0gdHJ1 ZTsKKwkJYWxsb3dfeXV2ID0gdHJ1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2Vy dChmYWxzZSk7CisJfQorCisJc3JhbmQodGltZShOVUxMKSk7CisKKwlyZXNldF9zdGF0ZShkYXRh LCBwb3J0KTsKKworCS8qIEZpbmQgdGhlIGNvbm5lY3RvciBhbmQgcGlwZS4gKi8KKwlvdXRwdXQg PSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0KTsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9t b2RlKG91dHB1dCk7CisKKwkvKiBHZXQgYSBmcmFtZWJ1ZmZlciBmb3IgdGhlIHByaW1hcnkgcGxh bmUuICovCisJcHJpbWFyeV9wbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0 LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZ3RfYXNzZXJ0KHByaW1hcnlfcGxhbmUpOwor CisJZmJfaWQgPSBjaGFtZWxpdW1fZ2V0X3BhdHRlcm5fZmIoZGF0YSwgbW9kZS0+aGRpc3BsYXks IG1vZGUtPnZkaXNwbGF5LAorCQkJCQkgRFJNX0ZPUk1BVF9YUkdCODg4OCwgNjQsICZwcmltYXJ5 X2ZiKTsKKwlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7CisKKwkvKiBHZXQgYSBmcmFtZWJ1ZmZlciBm b3IgdGhlIGNhaXJvIGNvbXBvc2l0aW9uIHJlc3VsdC4gKi8KKwlmYl9pZCA9IGlndF9jcmVhdGVf ZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwKKwkJCSAgICAgIG1vZGUtPnZkaXNwbGF5 LCBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9O RSwgJnJlc3VsdF9mYik7CisJaWd0X2Fzc2VydChmYl9pZCA+IDApOworCisJcmVzdWx0X3N1cmZh Y2UgPSBpZ3RfZ2V0X2NhaXJvX3N1cmZhY2UoZGF0YS0+ZHJtX2ZkLCAmcmVzdWx0X2ZiKTsKKwor CS8qIFBhaW50IHRoZSBwcmltYXJ5IGZyYW1lYnVmZmVyIG9uIHRoZSByZXN1bHQgc3VyZmFjZS4g Ki8KKwlibGl0X3BsYW5lX2NhaXJvKGRhdGEsIHJlc3VsdF9zdXJmYWNlLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLAorCQkJICZwcmltYXJ5X2ZiKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgcHJpbWFy eSBwbGFuZS4gKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnlfcGxhbmUsICZwcmltYXJ5X2Zi KTsKKworCW92ZXJsYXlfcGxhbmVzX21heCA9CisJCWlndF9vdXRwdXRfY291bnRfcGxhbmVfdHlw ZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX09WRVJMQVkpOworCisJLyogTGltaXQgdGhlIG51bWJl ciBvZiBwbGFuZXMgdG8gYSByZWFzb25hYmxlIHNjZW5lLiAqLworCW92ZXJsYXlfcGxhbmVzX21h eCA9IG1heChvdmVybGF5X3BsYW5lc19tYXgsIDQpOworCisJb3ZlcmxheV9wbGFuZXNfY291bnQg PSAocmFuZCgpICUgb3ZlcmxheV9wbGFuZXNfbWF4KSArIDE7CisJaWd0X2RlYnVnKCJVc2luZyAl ZCBvdmVybGF5IHBsYW5lc1xuIiwgb3ZlcmxheV9wbGFuZXNfY291bnQpOworCisJb3ZlcmxheV9m YnMgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ3RfZmIpLCBvdmVybGF5X3BsYW5lc19jb3VudCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgb3ZlcmxheV9wbGFuZXNfY291bnQ7IGkrKykgeworCQlzdHJ1 Y3QgaWd0X2ZiICpvdmVybGF5X2ZiID0gJm92ZXJsYXlfZmJzW2ldOworCQlpZ3RfcGxhbmVfdCAq cGxhbmUgPQorCQkJaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZV9pbmRleChvdXRwdXQsCisJCQkJ CQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSwKKwkJCQkJCQlpKTsKKwkJaWd0X2Fzc2VydChwbGFu ZSk7CisKKwkJcHJlcGFyZV9yYW5kb21pemVkX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBvdmVy bGF5X2ZiLCBpLAorCQkJCQkgcmVzdWx0X3N1cmZhY2UsIGFsbG93X3NjYWxpbmcsCisJCQkJCSBh bGxvd195dXYpOworCX0KKworCWNhaXJvX3N1cmZhY2VfZGVzdHJveShyZXN1bHRfc3VyZmFjZSk7 CisKKwlpZiAoY2hlY2sgPT0gQ0hBTUVMSVVNX0NIRUNLX0NSQykKKwkJZmJfY3JjID0gY2hhbWVs aXVtX2NhbGN1bGF0ZV9mYl9jcmNfYXN5bmNfc3RhcnQoZGF0YS0+ZHJtX2ZkLAorCQkJCQkJCQkm cmVzdWx0X2ZiKTsKKworCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1J VF9BVE9NSUMpOworCisJaWYgKGNoZWNrID09IENIQU1FTElVTV9DSEVDS19DUkMpIHsKKwkJY2hh bWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJ Y3JjID0gY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhkYXRhLT5jaGFtZWxpdW0sCisJCQkJ CQkgICAmY2FwdHVyZWRfZnJhbWVfY291bnQpOworCisJCWlndF9hc3NlcnQoY2FwdHVyZWRfZnJh bWVfY291bnQgPT0gMSk7CisKKwkJZXhwZWN0ZWRfY3JjID0gY2hhbWVsaXVtX2NhbGN1bGF0ZV9m Yl9jcmNfYXN5bmNfZmluaXNoKGZiX2NyYyk7CisKKwkJY2hhbWVsaXVtX2Fzc2VydF9jcmNfZXFf b3JfZHVtcChkYXRhLT5jaGFtZWxpdW0sCisJCQkJCQlleHBlY3RlZF9jcmMsIGNyYywKKwkJCQkJ CSZyZXN1bHRfZmIsIDApOworCisJCWZyZWUoZXhwZWN0ZWRfY3JjKTsKKwkJZnJlZShjcmMpOwor CX0gZWxzZSBpZiAoY2hlY2sgPT0gQ0hBTUVMSVVNX0NIRUNLX0NIRUNLRVJCT0FSRCkgeworCQlz dHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmR1bXA7CisKKwkJZHVtcCA9IGNoYW1lbGl1bV9w b3J0X2R1bXBfcGl4ZWxzKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgMCwgMCwKKwkJCQkJCSAgMCwg MCk7CisJCWNoYW1lbGl1bV9hc3NlcnRfZnJhbWVfbWF0Y2hfb3JfZHVtcChkYXRhLT5jaGFtZWxp dW0sIHBvcnQsCisJCQkJCQkgICAgIGR1bXAsICZyZXN1bHRfZmIsIGNoZWNrKTsKKwkJY2hhbWVs aXVtX2Rlc3Ryb3lfZnJhbWVfZHVtcChkdW1wKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3Zl cmxheV9wbGFuZXNfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgaWd0X2ZiICpvdmVybGF5X2ZiID0g Jm92ZXJsYXlfZmJzW2ldOworCQlpZ3RfcGxhbmVfdCAqcGxhbmU7CisKKwkJcGxhbmUgPSBpZ3Rf b3V0cHV0X2dldF9wbGFuZV90eXBlX2luZGV4KG91dHB1dCwKKwkJCQkJCQlEUk1fUExBTkVfVFlQ RV9PVkVSTEFZLAorCQkJCQkJCWkpOworCQlpZ3RfYXNzZXJ0KHBsYW5lKTsKKworCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmRybV9mZCwgb3ZlcmxheV9mYik7CisJfQorCisJZnJlZShvdmVybGF5X2Zi cyk7CisKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnByaW1hcnlfZmIpOworCWlndF9y ZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcmVzdWx0X2ZiKTsKK30KKwogc3RhdGljIHZvaWQKIHRl c3RfaHBkX3dpdGhvdXRfZGRjKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpw b3J0KQogewpAQCAtOTc3LDYgKzE0MDcsMTAgQEAgaWd0X21haW4KIAkJCXRlc3RfZGlzcGxheV9v bmVfbW9kZSgmZGF0YSwgcG9ydCwgRFJNX0ZPUk1BVF9YUkdCMTU1NSwKIAkJCQkJICAgICAgQ0hB TUVMSVVNX0NIRUNLX0NSQywgMSk7CiAKKwkJY29ubmVjdG9yX3N1YnRlc3QoImhkbWktY3JjLXBs YW5lcy1yYW5kb20iLCBIRE1JQSkKKwkJCXRlc3RfZGlzcGxheV9wbGFuZXNfcmFuZG9tKCZkYXRh LCBwb3J0LAorCQkJCQkJICAgQ0hBTUVMSVVNX0NIRUNLX0NSQyk7CisKIAkJY29ubmVjdG9yX3N1 YnRlc3QoImhkbWktY21wLW52MTIiLCBIRE1JQSkKIAkJCXRlc3RfZGlzcGxheV9vbmVfbW9kZSgm ZGF0YSwgcG9ydCwgRFJNX0ZPUk1BVF9OVjEyLAogCQkJCQkgICAgICBDSEFNRUxJVU1fQ0hFQ0tf Q0hFQ0tFUkJPQVJELCAxKTsKQEAgLTEwMDksNiArMTQ0MywxMCBAQCBpZ3RfbWFpbgogCQkJdGVz dF9kaXNwbGF5X29uZV9tb2RlKCZkYXRhLCBwb3J0LCBEUk1fRk9STUFUX1lWVTQyMiwKIAkJCQkJ ICAgICAgQ0hBTUVMSVVNX0NIRUNLX0NIRUNLRVJCT0FSRCwgMSk7CiAKKwkJY29ubmVjdG9yX3N1 YnRlc3QoImhkbWktY21wLXBsYW5lcy1yYW5kb20iLCBIRE1JQSkKKwkJCXRlc3RfZGlzcGxheV9w bGFuZXNfcmFuZG9tKCZkYXRhLCBwb3J0LAorCQkJCQkJICAgQ0hBTUVMSVVNX0NIRUNLX0NIRUNL RVJCT0FSRCk7CisKIAkJY29ubmVjdG9yX3N1YnRlc3QoImhkbWktZnJhbWUtZHVtcCIsIEhETUlB KQogCQkJdGVzdF9kaXNwbGF5X2ZyYW1lX2R1bXAoJmRhdGEsIHBvcnQpOwogCX0KLS0gCjIuMjAu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRl diBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==