From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH xf86-video-intel 2/2] sna: Support 10bpc gamma via the GAMMA_LUT crtc property Date: Mon, 18 Feb 2019 21:50:52 +0200 Message-ID: <20190218195052.1729-2-ville.syrjala@linux.intel.com> References: <20190218195052.1729-1-ville.syrjala@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 ESMTPS id 4F29589213 for ; Mon, 18 Feb 2019 19:50:59 +0000 (UTC) In-Reply-To: <20190218195052.1729-1-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClBy b2JlIHRoZSBHQU1NQV9MVVQvR0FNTUFfTFVUX1NJWkUgcHJvcHMgYW5kIHV0aWxpemUgdGhlbSB3 aGVuCnRoZSBydW5uaW5nIHdpdGggPiA4YnBjLgoKQ2M6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmts ZWluZXIuZGVAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxl LnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0KIHNyYy9zbmEvc25hX2Rpc3BsYXkuYyB8IDI0 NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L3NuYS9zbmFfZGlzcGxheS5jIGIvc3JjL3NuYS9zbmFfZGlzcGxheS5jCmluZGV4IDkxNmNjM2Mw NGUwNy4uMmY4MmUxZmEzZDg2IDEwMDY0NAotLS0gYS9zcmMvc25hL3NuYV9kaXNwbGF5LmMKKysr IGIvc3JjL3NuYS9zbmFfZGlzcGxheS5jCkBAIC0xMjcsNiArMTI3LDcgQEAgc3RydWN0IGxvY2Fs X21vZGVfb2JqX2dldF9wcm9wZXJ0aWVzIHsKIAl1aW50MzJfdCBvYmpfdHlwZTsKIAl1aW50MzJf dCBwYWQ7CiB9OworI2RlZmluZSBMT0NBTF9NT0RFX09CSkVDVF9DUlRDIDB4Y2NjY2NjY2MKICNk ZWZpbmUgTE9DQUxfTU9ERV9PQkpFQ1RfUExBTkUgMHhlZWVlZWVlZQogCiBzdHJ1Y3QgbG9jYWxf bW9kZV9zZXRfcGxhbmUgewpAQCAtMjI5LDYgKzIzMCwxMSBAQCBzdHJ1Y3Qgc25hX2NydGMgewog CX0gcHJpbWFyeTsKIAlzdHJ1Y3QgbGlzdCBzcHJpdGVzOwogCisJc3RydWN0IGRybV9jb2xvcl9s dXQgKmdhbW1hX2x1dDsKKwl1aW50NjRfdCBnYW1tYV9sdXRfcHJvcDsKKwl1aW50NjRfdCBnYW1t YV9sdXRfYmxvYjsKKwl1aW50MzJfdCBnYW1tYV9sdXRfc2l6ZTsKKwogCXVpbnQzMl90IG1vZGVf c2VyaWFsLCBmbGlwX3NlcmlhbDsKIAogCXVpbnQzMl90IGxhc3Rfc2VxLCB3cmFwX3NlcTsKQEAg LTMxNyw2ICszMjMsOSBAQCBzdGF0aWMgdm9pZCBfX3NuYV9vdXRwdXRfZHBtcyh4Zjg2T3V0cHV0 UHRyIG91dHB1dCwgaW50IGRwbXMsIGludCBmaXh1cCk7CiBzdGF0aWMgdm9pZCBzbmFfY3J0Y19k aXNhYmxlX2N1cnNvcihzdHJ1Y3Qgc25hICpzbmEsIHN0cnVjdCBzbmFfY3J0YyAqY3J0Yyk7CiBz dGF0aWMgYm9vbCBzbmFfY3J0Y19mbGlwKHN0cnVjdCBzbmEgKnNuYSwgc3RydWN0IHNuYV9jcnRj ICpjcnRjLAogCQkJICBzdHJ1Y3Qga2dlbV9ibyAqYm8sIGludCB4LCBpbnQgeSk7CitzdGF0aWMg dm9pZCBzbmFfY3J0Y19nYW1tYV9zZXQoeGY4NkNydGNQdHIgY3J0YywKKwkJCSAgICAgICBDQVJE MTYgKnJlZCwgQ0FSRDE2ICpncmVlbiwKKwkJCSAgICAgICBDQVJEMTYgKmJsdWUsIGludCBzaXpl KTsKIAogc3RhdGljIGJvb2wgaXNfemFwaG9kKFNjcm5JbmZvUHRyIHNjcm4pCiB7CkBAIC0zMTUw LDExICszMTU5LDkgQEAgc25hX2NydGNfc2V0X21vZGVfbWFqb3IoeGY4NkNydGNQdHIgY3J0Yywg RGlzcGxheU1vZGVQdHIgbW9kZSwKIAkgICAgICAgbW9kZS0+VkRpc3BsYXkgPD0gc25hLT5tb2Rl Lm1heF9jcnRjX2hlaWdodCk7CiAKICNpZiBIQVNfR0FNTUEKLQlkcm1Nb2RlQ3J0Y1NldEdhbW1h KHNuYS0+a2dlbS5mZCwgX19zbmFfY3J0Y19pZChzbmFfY3J0YyksCi0JCQkgICAgY3J0Yy0+Z2Ft bWFfc2l6ZSwKLQkJCSAgICBjcnRjLT5nYW1tYV9yZWQsCi0JCQkgICAgY3J0Yy0+Z2FtbWFfZ3Jl ZW4sCi0JCQkgICAgY3J0Yy0+Z2FtbWFfYmx1ZSk7CisJc25hX2NydGNfZ2FtbWFfc2V0KGNydGMs CisJCQkgICBjcnRjLT5nYW1tYV9yZWQsIGNydGMtPmdhbW1hX2dyZWVuLAorCQkJICAgY3J0Yy0+ Z2FtbWFfYmx1ZSwgY3J0Yy0+Z2FtbWFfc2l6ZSk7CiAjZW5kaWYKIAogCXNhdmVkX2ttb2RlID0g c25hX2NydGMtPmttb2RlOwpAQCAtMzIxMiwxMiArMzIxOSw0NCBAQCB2b2lkIHNuYV9tb2RlX2Fk anVzdF9mcmFtZShzdHJ1Y3Qgc25hICpzbmEsIGludCB4LCBpbnQgeSkKIAogc3RhdGljIHZvaWQK IHNuYV9jcnRjX2dhbW1hX3NldCh4Zjg2Q3J0Y1B0ciBjcnRjLAotCQkgICAgICAgQ0FSRDE2ICpy ZWQsIENBUkQxNiAqZ3JlZW4sIENBUkQxNiAqYmx1ZSwgaW50IHNpemUpCisJCSAgIENBUkQxNiAq cmVkLCBDQVJEMTYgKmdyZWVuLCBDQVJEMTYgKmJsdWUsIGludCBzaXplKQogewotCWFzc2VydCh0 b19zbmFfY3J0YyhjcnRjKSk7Ci0JZHJtTW9kZUNydGNTZXRHYW1tYSh0b19zbmEoY3J0Yy0+c2Ny biktPmtnZW0uZmQsCi0JCQkgICAgc25hX2NydGNfaWQoY3J0YyksCi0JCQkgICAgc2l6ZSwgcmVk LCBncmVlbiwgYmx1ZSk7CisJc3RydWN0IHNuYSAqc25hID0gdG9fc25hKGNydGMtPnNjcm4pOwor CXN0cnVjdCBzbmFfY3J0YyAqc25hX2NydGMgPSB0b19zbmFfY3J0YyhjcnRjKTsKKwlzdHJ1Y3Qg ZHJtX2NvbG9yX2x1dCAqbHV0ID0gc25hX2NydGMtPmdhbW1hX2x1dDsKKwl1aW50MzJfdCBibG9i X3NpemUgPSBzaXplICogc2l6ZW9mKGx1dFswXSk7CisJdWludDMyX3QgYmxvYl9pZDsKKwlpbnQg cmV0LCBpOworCisJREJHKCgiJXM6IGdhbW1hX3NpemUgJWRcbiIsIF9fRlVOQ1RJT05fXywgc2l6 ZSkpOworCisJaWYgKCFsdXQpIHsKKwkJYXNzZXJ0KHNpemUgPT0gMjU2KTsKKworCQlkcm1Nb2Rl Q3J0Y1NldEdhbW1hKHRvX3NuYShjcnRjLT5zY3JuKS0+a2dlbS5mZCwKKwkJCQkgICAgc25hX2Ny dGNfaWQoY3J0YyksCisJCQkJICAgIHNpemUsIHJlZCwgZ3JlZW4sIGJsdWUpOworCQlyZXR1cm47 CisJfQorCisJYXNzZXJ0KHNpemUgPT0gc25hX2NydGMtPmdhbW1hX2x1dF9zaXplKTsKKworCWZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJbHV0W2ldLnJlZCA9IHJlZFtpXTsKKwkJbHV0 W2ldLmdyZWVuID0gZ3JlZW5baV07CisJCWx1dFtpXS5ibHVlID0gYmx1ZVtpXTsKKwl9CisKKwly ZXQgPSBkcm1Nb2RlQ3JlYXRlUHJvcGVydHlCbG9iKHNuYS0+a2dlbS5mZCwgbHV0LCBibG9iX3Np emUsICZibG9iX2lkKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlyZXQgPSBkcm1Nb2RlT2Jq ZWN0U2V0UHJvcGVydHkoc25hLT5rZ2VtLmZkLAorCQkJCSAgICAgICBzbmFfY3J0Yy0+aWQsIERS TV9NT0RFX09CSkVDVF9DUlRDLAorCQkJCSAgICAgICBzbmFfY3J0Yy0+Z2FtbWFfbHV0X3Byb3As CisJCQkJICAgICAgIGJsb2JfaWQpOworCisJZHJtTW9kZURlc3Ryb3lQcm9wZXJ0eUJsb2Ioc25h LT5rZ2VtLmZkLCBibG9iX2lkKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMyMjksNiArMzI2OCw4 IEBAIHNuYV9jcnRjX2Rlc3Ryb3koeGY4NkNydGNQdHIgY3J0YykKIAlpZiAoc25hX2NydGMgPT0g TlVMTCkKIAkJcmV0dXJuOwogCisJZnJlZShzbmFfY3J0Yy0+Z2FtbWFfbHV0KTsKKwogCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShzcHJpdGUsIHNuLCAmc25hX2NydGMtPnNwcml0ZXMsIGxpbmsp CiAJCWZyZWUoc3ByaXRlKTsKIApAQCAtMzY2Myw2ICszNzA0LDU1IEBAIGJvb2wgc25hX2hhc19z cHJpdGVfZm9ybWF0KHN0cnVjdCBzbmEgKnNuYSwgdWludDMyX3QgZm9ybWF0KQogCXJldHVybiBm YWxzZTsKIH0KIAoraW5saW5lIHN0YXRpYyBib29sIHByb3BfaXNfZ2FtbWFfbHV0KGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkgKnByb3ApCit7CisJcmV0dXJuIHByb3BfaGFzX3R5 cGVfYW5kX25hbWUocHJvcCwgNCwgIkdBTU1BX0xVVCIpOworfQorCitpbmxpbmUgc3RhdGljIGJv b2wgcHJvcF9pc19nYW1tYV9sdXRfc2l6ZShjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3Bl cnR5ICpwcm9wKQoreworCXJldHVybiBwcm9wX2hhc190eXBlX2FuZF9uYW1lKHByb3AsIDEsICJH QU1NQV9MVVRfU0laRSIpOworfQorCitzdGF0aWMgdm9pZCBzbmFfY3J0Y19wYXJzZV9wcm9wKHN0 cnVjdCBzbmEgKnNuYSwKKwkJCQlzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5ICpwcm9wLAor CQkJCXVpbnQ2NF90IHZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmFfY3J0YyAqY3J0 YyA9IGRhdGE7CisKKwlpZiAocHJvcF9pc19nYW1tYV9sdXQocHJvcCkpIHsKKwkJY3J0Yy0+Z2Ft bWFfbHV0X3Byb3AgPSBwcm9wLT5wcm9wX2lkOworCQljcnRjLT5nYW1tYV9sdXRfYmxvYiA9IHZh bHVlOworCX0gZWxzZSBpZiAocHJvcF9pc19nYW1tYV9sdXRfc2l6ZShwcm9wKSkgeworCQljcnRj LT5nYW1tYV9sdXRfc2l6ZSA9IHZhbHVlOworCX0KK30KKworc3RhdGljIHZvaWQKK3NuYV9jcnRj X2luaXRfX3Byb3BzKHN0cnVjdCBzbmEgKnNuYSwgc3RydWN0IHNuYV9jcnRjICpjcnRjKQorewor CVNjcm5JbmZvUHRyIHNjcm4gPSBzbmEtPnNjcm47CisKKwlwYXJzZV9wcm9wcyhzbmEsIExPQ0FM X01PREVfT0JKRUNUX0NSVEMsIGNydGMtPmlkLAorCQkgICAgc25hX2NydGNfcGFyc2VfcHJvcCwg Y3J0Yyk7CisKKwkvKiB1c2UgaGlnaCBwcmVjaXNpb24gZ2FtbWEgTFVUIGZvciA+IDhicGMgKi8K KwkvKiBYLVNlcnZlciA8IDEuMjAgbWlzaGFuZGxlcyA+IDI1NiBzbG90cyAvID4gOCBicGMgY29s b3IgbWFwcy4gKi8KKwlpZiAoc2Nybi0+cmdiQml0cyA8PSA4IHx8CisJICAgIFhPUkdfVkVSU0lP Tl9DVVJSRU5UIDwgWE9SR19WRVJTSU9OX05VTUVSSUMoMSwyMCwwLDAsMCkpCisJCWNydGMtPmdh bW1hX2x1dF9zaXplID0gMDsKKworCWlmIChjcnRjLT5nYW1tYV9sdXRfc2l6ZSkgeworCQljcnRj LT5nYW1tYV9sdXQgPSBjYWxsb2MobWF4KGNydGMtPmdhbW1hX2x1dF9zaXplLCAyNTYpLAorCQkJ CQkgc2l6ZW9mKGNydGMtPmdhbW1hX2x1dFswXSkpOworCQlpZiAoIWNydGMtPmdhbW1hX2x1dCkK KwkJCWNydGMtPmdhbW1hX2x1dF9zaXplID0gMDsKKwl9CisKKwlEQkcoKCIlczogQ1JUQzolZCwg Z2FtbWFfbHV0X3NpemU9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwkgICAgIHNuYV9jcnRjX2lkKGNy dGMpLCBjcnRjLT5nYW1tYV9sdXRfc2l6ZSkpOworfQorCiBzdGF0aWMgdm9pZAogc25hX2NydGNf aW5pdF9fcm90YXRpb24oc3RydWN0IHNuYSAqc25hLCBzdHJ1Y3Qgc25hX2NydGMgKmNydGMpCiB7 CkBAIC0zNzIzLDYgKzM4MTMsOSBAQCBzbmFfY3J0Y19hZGQoU2NybkluZm9QdHIgc2NybiwgdW5z aWduZWQgaWQpCiAKIAlsaXN0X2luaXQoJnNuYV9jcnRjLT5zcHJpdGVzKTsKIAlzbmFfY3J0Y19p bml0X19yb3RhdGlvbihzbmEsIHNuYV9jcnRjKTsKKworCXNuYV9jcnRjX2luaXRfX3Byb3BzKHNu YSwgc25hX2NydGMpOworCiAJc25hX2NydGNfZmluZF9wbGFuZXMoc25hLCBzbmFfY3J0Yyk7CiAK IAlEQkcoKCIlczogQ1JUQzolZCBbcGlwZT0lZF0sIHByaW1hcnkgaWQ9JXg6IHN1cHBvcnRlZC1y b3RhdGlvbnM9JXgsIGN1cnJlbnQtcm90YXRpb249JXhcbiIsCkBAIC03MjgyLDM2ICs3Mzc1LDEx MCBAQCBzdGF0aWMgdm9pZCBvdXRwdXRfc2V0X2dhbW1hKHhmODZPdXRwdXRQdHIgb3V0cHV0LCB4 Zjg2Q3J0Y1B0ciBjcnRjKQogCQkJICBtb24tPm1vbl9nYW1tYV9ibHVlKTsKIH0KIAorc3RhdGlj IGJvb2wKK2NydGNfZ2V0X2dhbW1hX2x1dCh4Zjg2Q3J0Y1B0ciBjcnRjLAorCQkgICBDQVJEMTYg KnJlZCwgQ0FSRDE2ICpncmVlbiwgQ0FSRDE2ICpibHVlLCBpbnQgc2l6ZSkKK3sKKworCXN0cnVj dCBzbmEgKnNuYSA9IHRvX3NuYShjcnRjLT5zY3JuKTsKKwlzdHJ1Y3Qgc25hX2NydGMgKnNuYV9j cnRjID0gdG9fc25hX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dCA9IHNu YV9jcnRjLT5nYW1tYV9sdXQ7CisJc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIGJsb2I7CisJaW50 IGx1dF9zaXplLCBpOworCisJREJHKCgiJXM6IGdhbW1hX3NpemUgJWRcbiIsIF9fRlVOQ1RJT05f Xywgc2l6ZSkpOworCisJbWVtc2V0KCZibG9iLCAwLCBzaXplb2YoYmxvYikpOworCWJsb2IuYmxv Yl9pZCA9IHNuYV9jcnRjLT5nYW1tYV9sdXRfYmxvYjsKKworCWlmIChkcm1Jb2N0bChzbmEtPmtn ZW0uZmQsIERSTV9JT0NUTF9NT0RFX0dFVFBST1BCTE9CLCAmYmxvYikpCisJCXJldHVybiBmYWxz ZTsKKworCWx1dF9zaXplID0gYmxvYi5sZW5ndGggLyBzaXplb2YobHV0WzBdKTsKKworCWlmIChs dXRfc2l6ZSA9PSAwIHx8CisJICAgIGx1dF9zaXplID4gbWF4KHNuYV9jcnRjLT5nYW1tYV9sdXRf c2l6ZSwgMjU2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJYmxvYi5kYXRhID0gKHVpbnRwdHJfdCls dXQ7CisKKwlpZiAoZHJtSW9jdGwoc25hLT5rZ2VtLmZkLCBEUk1fSU9DVExfTU9ERV9HRVRQUk9Q QkxPQiwgJmJsb2IpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsg aSsrKSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICplbnRyeSA9CisJCQkmbHV0W2kgKiAobHV0 X3NpemUgLSAxKSAvIChzaXplIC0gMSldOworCisJCXJlZFtpXSA9IGVudHJ5LT5yZWQ7CisJCWdy ZWVuW2ldID0gZW50cnktPmdyZWVuOworCQlibHVlW2ldID0gZW50cnktPmJsdWU7CisJfQorCisJ cmV0dXJuIHJlZFtzaXplIC0gMV0gJiYKKwkJZ3JlZW5bc2l6ZSAtIDFdICYmCisJCWJsdWVbc2l6 ZSAtIDFdOworfQorCitzdGF0aWMgYm9vbCBjcnRjX2dldF9nYW1tYV9sZWdhY3koeGY4NkNydGNQ dHIgY3J0YywKKwkJCQkgIENBUkQxNiAqcmVkLAorCQkJCSAgQ0FSRDE2ICpncmVlbiwKKwkJCQkg IENBUkQxNiAqYmx1ZSwKKwkJCQkgIGludCBzaXplKQoreworCXN0cnVjdCBzbmEgKnNuYSA9IHRv X3NuYShjcnRjLT5zY3JuKTsKKwlzdHJ1Y3Qgc25hX2NydGMgKnNuYV9jcnRjID0gdG9fc25hX2Ny dGMoY3J0Yyk7CisJc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IGx1dCA9IHsKKwkJLmNydGNfaWQg PSBfX3NuYV9jcnRjX2lkKHNuYV9jcnRjKSwKKwkJLmdhbW1hX3NpemUgPSBzaXplLAorCQkucmVk ID0gKHVpbnRwdHJfdClyZWQsCisJCS5ncmVlbiA9ICh1aW50cHRyX3QpZ3JlZW4sCisJCS5ibHVl ID0gKHVpbnRwdHJfdClibHVlLAorCX07CisKKwlpZiAoZHJtSW9jdGwoc25hLT5rZ2VtLmZkLCBE Uk1fSU9DVExfTU9ERV9HRVRHQU1NQSwgJmx1dCkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ VkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChyZWQsIHNpemUqc2l6ZW9mKHJlZFswXSkpKTsK KwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGdyZWVuLCBzaXplKnNpemVvZihncmVlblsw XSkpKTsKKwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGJsdWVyZWQsIHNpemUqc2l6ZW9m KGJsdWVbMF0pKSk7CisKKwlyZXR1cm4gcmVkW3NpemUgLSAxXSAmJgorCQlncmVlbltzaXplIC0g MV0gJiYKKwkJYmx1ZVtzaXplIC0gMV07Cit9CisKIHN0YXRpYyB2b2lkIGNydGNfaW5pdF9nYW1t YSh4Zjg2Q3J0Y1B0ciBjcnRjKQogeworCXN0cnVjdCBzbmEgKnNuYSA9IHRvX3NuYShjcnRjLT5z Y3JuKTsKKwlzdHJ1Y3Qgc25hX2NydGMgKnNuYV9jcnRjID0gdG9fc25hX2NydGMoY3J0Yyk7CiAJ dWludDE2X3QgKmdhbW1hOworCWludCBzaXplOworCisJYXNzZXJ0KHNuYV9jcnRjKTsKKworCXNp emUgPSBzbmFfY3J0Yy0+Z2FtbWFfbHV0X3NpemU7CisJaWYgKCFzaXplKQorCQlzaXplID0gMjU2 OwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZ2FtbWEgcmFtcHMgKi8KIAlnYW1tYSA9IE5VTEw7Ci0J aWYgKGNydGMtPmdhbW1hX3NpemUgPT0gMjU2KQorCWlmIChjcnRjLT5nYW1tYV9zaXplID09IHNp emUpCiAJCWdhbW1hID0gY3J0Yy0+Z2FtbWFfcmVkOwogCWlmIChnYW1tYSA9PSBOVUxMKQotCQln YW1tYSA9IG1hbGxvYygzICogMjU2ICogc2l6ZW9mKHVpbnQxNl90KSk7CisJCWdhbW1hID0gbWFs bG9jKDMgKiBzaXplICogc2l6ZW9mKHVpbnQxNl90KSk7CiAJaWYgKGdhbW1hKSB7Ci0JCXN0cnVj dCBzbmEgKnNuYSA9IHRvX3NuYShjcnRjLT5zY3JuKTsKLQkJc3RydWN0IHNuYV9jcnRjICpzbmFf Y3J0YyA9IHRvX3NuYV9jcnRjKGNydGMpOwogCQlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgbHV0 OwotCQlib29sIGdhbW1hX3NldCA9IGZhbHNlOwotCi0JCWFzc2VydChzbmFfY3J0Yyk7Ci0KLQkJ bHV0LmNydGNfaWQgPSBfX3NuYV9jcnRjX2lkKHNuYV9jcnRjKTsKLQkJbHV0LmdhbW1hX3NpemUg PSAyNTY7Ci0JCWx1dC5yZWQgPSAodWludHB0cl90KShnYW1tYSk7Ci0JCWx1dC5ncmVlbiA9ICh1 aW50cHRyX3QpKGdhbW1hICsgMjU2KTsKLQkJbHV0LmJsdWUgPSAodWludHB0cl90KShnYW1tYSAr IDIgKiAyNTYpOwotCQlpZiAoZHJtSW9jdGwoc25hLT5rZ2VtLmZkLCBEUk1fSU9DVExfTU9ERV9H RVRHQU1NQSwgJmx1dCkgPT0gMCkgewotCQkJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChn YW1tYSwgMyoyNTYqc2l6ZW9mKGdhbW1hWzBdKSkpOwotCQkJZ2FtbWFfc2V0ID0KLQkJCQlnYW1t YVsyNTYgLSAxXSAmJgotCQkJCWdhbW1hWzIqMjU2IC0gMV0gJiYKLQkJCQlnYW1tYVszKjI1NiAt IDFdOwotCQl9CisJCWJvb2wgZ2FtbWFfc2V0OworCQl1aW50MTZfdCAqcmVkID0gZ2FtbWE7CisJ CXVpbnQxNl90ICpncmVlbiA9IGdhbW1hICsgc2l6ZTsKKwkJdWludDE2X3QgKmJsdWUgPSBnYW1t YSArIDIgKiBzaXplOworCisJCWlmIChzbmFfY3J0Yy0+Z2FtbWFfbHV0X3NpemUpCisJCQlnYW1t YV9zZXQgPSBjcnRjX2dldF9nYW1tYV9sdXQoY3J0YywgcmVkLAorCQkJCQkJICAgICAgIGdyZWVu LCBibHVlLCBzaXplKTsKKwkJZWxzZQorCQkJZ2FtbWFfc2V0ID0gY3J0Y19nZXRfZ2FtbWFfbGVn YWN5KGNydGMsIHJlZCwKKwkJCQkJCQkgIGdyZWVuLCBibHVlLCBzaXplKTsKIAogCQlEQkcoKCIl czogQ1JUQzolZCwgcGlwZT0lZDogZ2FtbWEgc2V0Pz0lZFxuIiwKIAkJICAgICBfX0ZVTkNUSU9O X18sIF9fc25hX2NydGNfaWQoc25hX2NydGMpLCBfX3NuYV9jcnRjX3BpcGUoc25hX2NydGMpLApA QCAtNzMxOSwxOSArNzQ4NiwyMSBAQCBzdGF0aWMgdm9pZCBjcnRjX2luaXRfZ2FtbWEoeGY4NkNy dGNQdHIgY3J0YykKIAkJaWYgKCFnYW1tYV9zZXQpIHsKIAkJCWludCBpOwogCi0JCQlmb3IgKGkg PSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCQlnYW1tYVtpXSA9IGkgPDwgODsKLQkJCQlnYW1tYVsy NTYgKyBpXSA9IGkgPDwgODsKLQkJCQlnYW1tYVsyKjI1NiArIGldID0gaSA8PCA4OworCQkJZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJCXVpbnQxNl90IHZhbCA9IGkgKiAweGZmZmYg LyAoc2l6ZSAtIDEpOworCisJCQkJcmVkW2ldID0gdmFsOworCQkJCWdyZWVuW2ldID0gdmFsOwor CQkJCWJsdWVbaV0gPSB2YWw7CiAJCQl9CiAJCX0KIAotCQlpZiAoZ2FtbWEgIT0gY3J0Yy0+Z2Ft bWFfcmVkKSB7CisJCWlmIChyZWQgIT0gY3J0Yy0+Z2FtbWFfcmVkKSB7CiAJCQlmcmVlKGNydGMt PmdhbW1hX3JlZCk7Ci0JCQljcnRjLT5nYW1tYV9yZWQgPSBnYW1tYTsKLQkJCWNydGMtPmdhbW1h X2dyZWVuID0gZ2FtbWEgKyAyNTY7Ci0JCQljcnRjLT5nYW1tYV9ibHVlID0gZ2FtbWEgKyAyKjI1 NjsKLQkJCWNydGMtPmdhbW1hX3NpemUgPSAyNTY7CisJCQljcnRjLT5nYW1tYV9yZWQgPSByZWQ7 CisJCQljcnRjLT5nYW1tYV9ncmVlbiA9IGdyZWVuOworCQkJY3J0Yy0+Z2FtbWFfYmx1ZSA9IGJs dWU7CisJCQljcnRjLT5nYW1tYV9zaXplID0gc2l6ZTsKIAkJfQogCX0KIH0KLS0gCjIuMTkuMgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4