From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH 4/5] drm/i915: Implement color management on bdw/skl/bxt/kbl Date: Fri, 26 Feb 2016 17:05:01 +0000 Message-ID: <1456506302-640-5-git-send-email-lionel.g.landwerlin@intel.com> References: <1456506302-640-1-git-send-email-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456506302-640-1-git-send-email-lionel.g.landwerlin@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, dri-devel@lists.freedesktop.org Cc: Kumar@freedesktop.org, kausalmalladi@gmail.com List-Id: dri-devel@lists.freedesktop.org UGF0Y2ggYmFzZWQgb24gYSBwcmV2aW91cyBzZXJpZXMgYnkgU2hhc2hhbmsgU2hhcm1hLgoKdjI6 IERvIG5vdCByZWFkIEdBTU1BX01PREUgcmVnaXN0ZXIgdG8gZmlndXJlIHdoYXQgbW9kZSB3ZSdy ZSBpbgoKdjM6IFByb2dyYW0gUFJFQ19QQUxfR0NfTUFYIHRvIGNsYW1wIHBpeGVsIHZhbHVlcyA+ IDEuMAoKICAgIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0aGUgQnJvYWRjYXN0IFJHQiBwcm9w ZXJ0eSBpcyBhZmZlY3RlZCBieSBDVE0KCnY0OiBVcGRhdGUgY29udHJpYnV0b3JzCgp2NTogUmVm YWN0b3IgZGVnYW1tYS9nYW1tYSBMVVRzIGxvYWQgaW50byBhIHNpbmdsZSBmdW5jdGlvbgoKdjY6 IEZpeCBtaXNzaW5nIGludGVsX2NydGMgdmFyaWFibGUgKGJpc2VjdCBpc3N1ZSkKCnY3OiBGaXgg JiBzaW1wbGlmeSBsaW1pdGVkIHJhbmdlIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiAoTWF0dCBSb3Bl cidzCiAgICBjb21tZW50KQoKU2lnbmVkLW9mZi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFu ay5zaGFybWFAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBLdW1hciwgS2lyYW4gUyA8a2lyYW4u cy5rdW1hckBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEthdXNhbCBNYWxsYWRpIDxrYXVzYWxt YWxsYWRpQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25l bC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpBY2tub3dsZWRnZWQtYnk6IE1hdHQgUm9wZXIgPG1h dHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50 bXBsICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAg fCAgMjQgKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgfCAgIDYgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgIHwgIDIyICsrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyAgIHwgMzQ1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgMjIg KystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDMgKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMgICB8ICAgOCArCiA4IGZpbGVzIGNoYW5nZWQs IDM3MSBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVu dGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwK aW5kZXggMTY5MmM0ZC4uNDMwZTk5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29r L2dwdS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbApAQCAtMjE1Myw3 ICsyMTUzLDExIEBAIHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK IAk8dGQgdmFsaWduPSJ0b3AiID5FTlVNPC90ZD4KIAk8dGQgdmFsaWduPSJ0b3AiID57ICJBdXRv bWF0aWMiLCAiRnVsbCIsICJMaW1pdGVkIDE2OjIzNSIgfTwvdGQ+CiAJPHRkIHZhbGlnbj0idG9w IiA+Q29ubmVjdG9yPC90ZD4KLQk8dGQgdmFsaWduPSJ0b3AiID5UQkQ8L3RkPgorCTx0ZCB2YWxp Z249InRvcCIgPldoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gTGltaXRlZCAxNjoyMzUKKwkJ YW5kIENUTSBpcyBzZXQsIHRoZSBoYXJkd2FyZSB3aWxsIGJlIHByb2dyYW1tZWQgd2l0aCB0aGUK KwkJcmVzdWx0IG9mIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiBDVE0gYnkgdGhlIGxpbWl0ZWQgcmFu Z2UKKwkJbWF0cml4IHRvIGVuc3VyZSB0aGUgcGl4ZWxzIG5vcm1hbHkgaW4gdGhlIHJhbmdlIDAu LjEuMCBhcmUKKwkJcmVtYXBwZWQgdG8gdGhlIHJhbmdlIDE2LzI1NS4uMjM1LzI1NS48L3RkPgog CTwvdHI+CiAJPHRyPgogCTx0ZCB2YWxpZ249InRvcCIgPuKAnGF1ZGlv4oCdPC90ZD4KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCmluZGV4IDIwZTgyMDAuLjM4MDdiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwpAQCAtNjYsNiArNjYsOSBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVy OwogI2RlZmluZSBJVkJfQ1VSU09SX09GRlNFVFMgXAogCS5jdXJzb3Jfb2Zmc2V0cyA9IHsgQ1VS U09SX0FfT0ZGU0VULCBJVkJfQ1VSU09SX0JfT0ZGU0VULCBJVkJfQ1VSU09SX0NfT0ZGU0VUIH0K IAorI2RlZmluZSBCRFdfQ09MT1JTIFwKKwkuY29sb3IgPSB7IC5kZWdhbW1hX2x1dF9zaXplID0g NTEyLCAuZ2FtbWFfbHV0X3NpemUgPSA1MTIgfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X2RldmljZV9pbmZvIGludGVsX2k4MzBfaW5mbyA9IHsKIAkuZ2VuID0gMiwgLmlzX21vYmlsZSA9 IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLCAubnVtX3BpcGVzID0gMiwKIAkuaGFzX292 ZXJsYXkgPSAxLCAub3ZlcmxheV9uZWVkc19waHlzaWNhbCA9IDEsCkBAIC0yODgsMjQgKzI5MSwy OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2hhc3dlbGxf bV9pbmZvID0gewogCS5pc19tb2JpbGUgPSAxLAogfTsKIAorI2RlZmluZSBCRFdfRkVBVFVSRVMg XAorCUhTV19GRUFUVVJFUywgXAorCUJEV19DT0xPUlMKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9icm9hZHdlbGxfZF9pbmZvID0gewotCUhTV19GRUFUVVJF UywKKwlCRFdfRkVBVFVSRVMsCiAJLmdlbiA9IDgsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0 IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9tX2luZm8gPSB7Ci0JSFNXX0ZFQVRV UkVTLAorCUJEV19GRUFUVVJFUywKIAkuZ2VuID0gOCwgLmlzX21vYmlsZSA9IDEsCiB9OwogCiBz dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9ndDNk X2luZm8gPSB7Ci0JSFNXX0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuZ2VuID0gOCwKIAku cmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklO RyB8IEJTRDJfUklORywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2lu Zm8gaW50ZWxfYnJvYWR3ZWxsX2d0M21faW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZF QVRVUkVTLAogCS5nZW4gPSA4LCAuaXNfbW9iaWxlID0gMSwKIAkucmluZ19tYXNrID0gUkVOREVS X1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywKIH07 CkBAIC0zMjEsMTMgKzMyOCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9p bmZvIGludGVsX2NoZXJyeXZpZXdfaW5mbyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9pbmZvID0gewotCUhTV19GRUFUVVJFUywK KwlCRFdfRkVBVFVSRVMsCiAJLmlzX3NreWxha2UgPSAxLAogCS5nZW4gPSA5LAogfTsKIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9za3lsYWtlX2d0M19pbmZv ID0gewotCUhTV19GRUFUVVJFUywKKwlCRFdfRkVBVFVSRVMsCiAJLmlzX3NreWxha2UgPSAxLAog CS5nZW4gPSA5LAogCS5yaW5nX21hc2sgPSBSRU5ERVJfUklORyB8IEJTRF9SSU5HIHwgQkxUX1JJ TkcgfCBWRUJPWF9SSU5HIHwgQlNEMl9SSU5HLApAQCAtMzQ1LDE3ICszNTIsMTggQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9icm94dG9uX2luZm8gPSB7CiAJ Lmhhc19mYmMgPSAxLAogCUdFTl9ERUZBVUxUX1BJUEVPRkZTRVRTLAogCUlWQl9DVVJTT1JfT0ZG U0VUUywKKwlCRFdfQ09MT1JTLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZp Y2VfaW5mbyBpbnRlbF9rYWJ5bGFrZV9pbmZvID0gewotCUhTV19GRUFUVVJFUywKKwlCRFdfRkVB VFVSRVMsCiAJLmlzX3ByZWxpbWluYXJ5ID0gMSwKIAkuaXNfa2FieWxha2UgPSAxLAogCS5nZW4g PSA5LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9r YWJ5bGFrZV9ndDNfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5p c19wcmVsaW1pbmFyeSA9IDEsCiAJLmlzX2thYnlsYWtlID0gMSwKIAkuZ2VuID0gOSwKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCmluZGV4IGQ0NmQ1ZTcuLjVkMTFkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaApAQCAtNjYzLDYgKzY2Myw3IEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNz IHsKIAkvKiBkaXNwbGF5IGNsb2NrIGluY3JlYXNlL2RlY3JlYXNlICovCiAJLyogcGxsIGNsb2Nr IGluY3JlYXNlL2RlY3JlYXNlICovCiAKKwl2b2lkICgqbG9hZF9jc2NfbWF0cml4KShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwogCXZvaWQgKCpsb2FkX2x1dHMpKHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7CiB9OwogCkBAIC04MTIsNiArODEzLDExIEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7 CiAJdTggaGFzX3NsaWNlX3BnOjE7CiAJdTggaGFzX3N1YnNsaWNlX3BnOjE7CiAJdTggaGFzX2V1 X3BnOjE7CisKKwlzdHJ1Y3QgY29sb3JfbHV0cyB7CisJCXUxNiBkZWdhbW1hX2x1dF9zaXplOwor CQl1MTYgZ2FtbWFfbHV0X3NpemU7CisJfSBjb2xvcjsKIH07CiAKICN1bmRlZiBERUZJTkVfRkxB RwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggZjc2Y2JmMy4uNzZhOWU0OSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCkBAIC03NjUxLDYgKzc2NTEsMjggQEAgZW51bSBza2xfZGlzcF9wb3dl cl93ZWxscyB7CiAjZGVmaW5lIFBJUEVfQ1NDX1BPU1RPRkZfTUUocGlwZSkJX01NSU9fUElQRShw aXBlLCBfUElQRV9BX0NTQ19QT1NUT0ZGX01FLCBfUElQRV9CX0NTQ19QT1NUT0ZGX01FKQogI2Rl ZmluZSBQSVBFX0NTQ19QT1NUT0ZGX0xPKHBpcGUpCV9NTUlPX1BJUEUocGlwZSwgX1BJUEVfQV9D U0NfUE9TVE9GRl9MTywgX1BJUEVfQl9DU0NfUE9TVE9GRl9MTykKIAorLyogcGlwZSBkZWdhbW1h L2dhbW1hIExVVHMgb24gSVZCKyAqLworI2RlZmluZSBfUEFMX1BSRUNfSU5ERVhfQQkweDRBNDAw CisjZGVmaW5lIF9QQUxfUFJFQ19JTkRFWF9CCTB4NEFDMDAKKyNkZWZpbmUgX1BBTF9QUkVDX0lO REVYX0MJMHg0QjQwMAorI2RlZmluZSAgIFBBTF9QUkVDXzEwXzEyX0JJVAkJKDAgPDwgMzEpCisj ZGVmaW5lICAgUEFMX1BSRUNfU1BMSVRfTU9ERQkJKDEgPDwgMzEpCisjZGVmaW5lICAgUEFMX1BS RUNfQVVUT19JTkNSRU1FTlQJKDEgPDwgMTUpCisjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0EJMHg0 QTQwNAorI2RlZmluZSBfUEFMX1BSRUNfREFUQV9CCTB4NEFDMDQKKyNkZWZpbmUgX1BBTF9QUkVD X0RBVEFfQwkweDRCNDA0CisjZGVmaW5lIF9QQUxfUFJFQ19HQ19NQVhfQQkweDRBNDEwCisjZGVm aW5lIF9QQUxfUFJFQ19HQ19NQVhfQgkweDRBQzEwCisjZGVmaW5lIF9QQUxfUFJFQ19HQ19NQVhf QwkweDRCNDEwCisjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0EJMHg0QTQyMAorI2RlZmlu ZSBfUEFMX1BSRUNfRVhUX0dDX01BWF9CCTB4NEFDMjAKKyNkZWZpbmUgX1BBTF9QUkVDX0VYVF9H Q19NQVhfQwkweDRCNDIwCisKKyNkZWZpbmUgUFJFQ19QQUxfSU5ERVgocGlwZSkJCV9NTUlPX1BJ UEUocGlwZSwgX1BBTF9QUkVDX0lOREVYX0EsIF9QQUxfUFJFQ19JTkRFWF9CKQorI2RlZmluZSBQ UkVDX1BBTF9EQVRBKHBpcGUpCQlfTU1JT19QSVBFKHBpcGUsIF9QQUxfUFJFQ19EQVRBX0EsIF9Q QUxfUFJFQ19EQVRBX0IpCisjZGVmaW5lIFBSRUNfUEFMX0dDX01BWChwaXBlLCBpKQlfTU1JTyhf UElQRShwaXBlLCBfUEFMX1BSRUNfR0NfTUFYX0EsIF9QQUxfUFJFQ19HQ19NQVhfQikgKyAoaSkg KiA0KQorI2RlZmluZSBQUkVDX1BBTF9FWFRfR0NfTUFYKHBpcGUsIGkpCV9NTUlPKF9QSVBFKHBp cGUsIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0EsIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0IpICsgKGkp ICogNCkKKwogLyogTUlQSSBEU0kgcmVnaXN0ZXJzICovCiAKICNkZWZpbmUgX01JUElfUE9SVChw b3J0LCBhLCBjKQlfUE9SVDMocG9ydCwgYSwgMCwgYykJLyogcG9ydHMgQSBhbmQgQyBvbmx5ICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYwppbmRleCAxNjY1N2ViLi5jNjM0MGQ4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMKQEAgLTI0LDM5ICsyNCwxNTUgQEAKIAogI2luY2x1 ZGUgImludGVsX2Rydi5oIgogCisjZGVmaW5lIENUTV9DT0VGRl9TSUdOCSgxVUxMIDw8IDYzKQor CisjZGVmaW5lIENUTV9DT0VGRl8xXzAJKDFVTEwgPDwgMzIpCisjZGVmaW5lIENUTV9DT0VGRl8y XzAJKENUTV9DT0VGRl8xXzAgPDwgMSkKKyNkZWZpbmUgQ1RNX0NPRUZGXzRfMAkoQ1RNX0NPRUZG XzJfMCA8PCAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF81CShDVE1fQ09FRkZfMV8wID4+IDEpCisj ZGVmaW5lIENUTV9DT0VGRl8wXzI1CShDVE1fQ09FRkZfMF81ID4+IDEpCisjZGVmaW5lIENUTV9D T0VGRl8wXzEyNQkoQ1RNX0NPRUZGXzBfMjUgPj4gMSkKKworI2RlZmluZSBDVE1fQ09FRkZfTElN SVRFRF9SQU5HRSAoKDIzNVVMTCAtIDE2VUxMKSAqIENUTV9DT0VGRl8xXzAgLyAyNTUpCisKKyNk ZWZpbmUgQ1RNX0NPRUZGX05FR0FUSVZFKGNvZWZmKQkoKChjb2VmZikgJiBDVE1fQ09FRkZfU0lH TikgIT0gMCkKKyNkZWZpbmUgQ1RNX0NPRUZGX0FCUyhjb2VmZikJCSgoY29lZmYpICYgKENUTV9D T0VGRl9TSUdOIC0gMSkpCisKKyNkZWZpbmUgTEVHQUNZX0xVVF9MRU5HVEgJCShzaXplb2Yoc3Ry dWN0IGRybV9jb2xvcl9sdXQpICogMjU2KQorCiAvKgotICogU2V0IHVwIHRoZSBwaXBlIENTQyB1 bml0LgorICogRXh0cmFjdCB0aGUgQ1NDIGNvZWZmaWNpZW50IGZyb20gYSBDVE0gY29lZmZpY2ll bnQgKGluIFUzMi4zMiBmaXhlZCBwb2ludAorICogZm9ybWF0KS4gVGhpcyBtYWNybyB0YWtlcyB0 aGUgY29lZmZpY2llbnQgd2Ugd2FudCB0cmFuc2Zvcm1lZCBhbmQgdGhlCisgKiBudW1iZXIgb2Yg ZnJhY3Rpb25hbCBiaXRzLgogICoKLSAqIEN1cnJlbnRseSBvbmx5IGZ1bGwgcmFuZ2UgUkdCIHRv IGxpbWl0ZWQgcmFuZ2UgUkdCIGNvbnZlcnNpb24KLSAqIGlzIHN1cHBvcnRlZCwgYnV0IGV2ZW50 dWFsbHkgdGhpcyBzaG91bGQgaGFuZGxlIHZhcmlvdXMKLSAqIFJHQjwtPllDYkNyIHNjZW5hcmlv cyBhcyB3ZWxsLgorICogV2Ugb25seSBoYXZlIGEgOSBiaXRzIHByZWNpc2lvbiB3aW5kb3cgd2hp Y2ggc2xpZGVzIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUKKyAqIG9mIHRoZSBDVE0gY29lZmZpY2ll bnQgYW5kIHdlIHdyaXRlIHRoZSB2YWx1ZSBmcm9tIGJpdCAzLiBXZSBhbHNvIHJvdW5kIHRoZQor ICogdmFsdWUuCiAgKi8KKyNkZWZpbmUgSTlYWF9DU0NfQ09FRkZfRlAoY29lZmYsIGZiaXRzKQlc CisJKGNsYW1wX3ZhbCgoKGNvZWZmKSA+PiAoMzIgLSAoZmJpdHMpIC0gMykpICsgNCwgMCwgMHhm ZmYpICYgMHhmZjgpCisKKyNkZWZpbmUgSTlYWF9DU0NfQ09FRkZfTElNSVRFRF9SQU5HRQlcCisJ STlYWF9DU0NfQ09FRkZfRlAoQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UsIDkpCisjZGVmaW5lIEk5 WFhfQ1NDX0NPRUZGXzFfMAkJXAorCSgoNyA8PCAxMikgfCBJOVhYX0NTQ19DT0VGRl9GUChDVE1f Q09FRkZfMV8wLCA4KSkKKworc3RhdGljIGJvb2wgY3J0Y19zdGF0ZV9pc19sZWdhY3koc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gIXN0YXRlLT5kZWdhbW1hX2x1dCAm JgorCQkhc3RhdGUtPmN0bSAmJgorCQlzdGF0ZS0+Z2FtbWFfbHV0ICYmCisJCXN0YXRlLT5nYW1t YV9sdXQtPmxlbmd0aCA9PSBMRUdBQ1lfTFVUX0xFTkdUSDsKK30KKworLyoKKyAqIFdoZW4gdXNp bmcgbGltaXRlZCByYW5nZSwgbXVsdGlwbHkgdGhlIG1hdHJpeCBnaXZlbiBieSB1c2Vyc3BhY2Ug YnkKKyAqIHRoZSBtYXRyaXggdGhhdCB3ZSB3b3VsZCB1c2UgZm9yIHRoZSBsaW1pdGVkIHJhbmdl LiBXZSBkbyB0aGUKKyAqIG11bHRpcGxpY2F0aW9uIGluIFUyLjMwIGZvcm1hdC4KKyAqLworc3Rh dGljIHZvaWQgY3RtX211bHRfYnlfbGltaXRlZCh1aW50NjRfdCAqcmVzdWx0LCBpbnQ2NF90ICpp bnB1dCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCXJlc3VsdFtp XSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWludDY0X3QgdXNlcl9jb2Vm ZiA9IGlucHV0W2kgKiAzICsgaV07CisJCXVpbnQ2NF90IGxpbWl0ZWRfY29lZmYgPSBDVE1fQ09F RkZfTElNSVRFRF9SQU5HRSA+PiAyOworCQl1aW50NjRfdCBhYnNfY29lZmYgPSBjbGFtcF92YWwo Q1RNX0NPRUZGX0FCUyh1c2VyX2NvZWZmKSwKKwkJCQkJICAgICAgIDAsCisJCQkJCSAgICAgICBD VE1fQ09FRkZfNF8wIC0gMSkgPj4gMjsKKworCQlyZXN1bHRbaSAqIDMgKyBpXSA9IChsaW1pdGVk X2NvZWZmICogYWJzX2NvZWZmKSA+PiAyNzsKKwkJaWYgKENUTV9DT0VGRl9ORUdBVElWRSh1c2Vy X2NvZWZmKSkKKwkJCXJlc3VsdFtpICogMyArIGldIHw9IENUTV9DT0VGRl9TSUdOOworCX0KK30K KworLyogU2V0IHVwIHRoZSBwaXBlIENTQyB1bml0LiAqLwogc3RhdGljIHZvaWQgaTl4eF9sb2Fk X2NzY19tYXRyaXgoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0g Y3J0Yy0+c3RhdGU7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Yyk7Ci0JaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCXVpbnQxNl90IGNvZWZm ID0gMHg3ODAwOyAvKiAxLjAgKi8KLQotCS8qCi0JICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9m IHZhbHVlcyBhY3R1YWxseSBjb21lIG91dCBvZiB0aGUgcGlwZQotCSAqIHdpdGggdGhlc2UgY29l ZmYvcG9zdG9mZiB2YWx1ZXMgYW5kIGFkanVzdCB0byBnZXQgdGhlIGJlc3QKLQkgKiBhY2N1cmFj eS4gUGVyaGFwcyB3ZSBldmVuIG5lZWQgdG8gdGFrZSB0aGUgYnBjIHZhbHVlIGludG8KLQkgKiBj b25zaWRlcmF0aW9uLgotCSAqLwotCi0JaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGltaXRlZF9j b2xvcl9yYW5nZSkKLQkJY29lZmYgPSAoKDIzNSAtIDE2KSAqICgxIDw8IDEyKSAvIDI1NSkgJiAw eGZmODsgLyogMC54eHguLi4gKi8KKwlpbnQgaSwgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJ dWludDE2X3QgY29lZmZzWzldID0geyAwLCB9OworCisJaWYgKGNydGNfc3RhdGUtPmN0bSkgewor CQlzdHJ1Y3QgZHJtX2NvbG9yX2N0bSAqY3RtID0KKwkJCShzdHJ1Y3QgZHJtX2NvbG9yX2N0bSAq KWNydGNfc3RhdGUtPmN0bS0+ZGF0YTsKKwkJdWludDY0X3QgaW5wdXRbOV0gPSB7IDAsIH07CisK KwkJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkgeworCQkJY3Rt X211bHRfYnlfbGltaXRlZChpbnB1dCwgY3RtLT5tYXRyaXgpOworCQl9IGVsc2UgeworCQkJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5wdXQpOyBpKyspCisJCQkJaW5wdXRbaV0gPSBjdG0t Pm1hdHJpeFtpXTsKKwkJfQorCisJCS8qCisJCSAqIENvbnZlcnQgZml4ZWQgcG9pbnQgUzMxLjMy IGlucHV0IHRvIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlCisJCSAqIGhhcmR3YXJlLgorCQkgKi8K KwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29lZmZzKTsgaSsrKSB7CisJCQl1aW50NjRf dCBhYnNfY29lZmYgPSAoKDFVTEwgPDwgNjMpIC0gMSkgJiBpbnB1dFtpXTsKKworCQkJLyoKKwkJ CSAqIENsYW1wIGlucHV0IHZhbHVlIHRvIG1pbi9tYXggc3VwcG9ydGVkIGJ5CisJCQkgKiBoYXJk d2FyZS4KKwkJCSAqLworCQkJYWJzX2NvZWZmID0gY2xhbXBfdmFsKGFic19jb2VmZiwgMCwgQ1RN X0NPRUZGXzRfMCAtIDEpOworCisJCQkvKiBzaWduIGJpdCAqLworCQkJaWYgKENUTV9DT0VGRl9O RUdBVElWRShpbnB1dFtpXSkpCisJCQkJY29lZmZzW2ldIHw9IDEgPDwgMTU7CisKKwkJCWlmIChh YnNfY29lZmYgPCBDVE1fQ09FRkZfMF8xMjUpCisJCQkJY29lZmZzW2ldIHw9ICgzIDw8IDEyKSB8 CisJCQkJCUk5WFhfQ1NDX0NPRUZGX0ZQKGFic19jb2VmZiwgMTIpOworCQkJZWxzZSBpZiAoYWJz X2NvZWZmIDwgQ1RNX0NPRUZGXzBfMjUpCisJCQkJY29lZmZzW2ldIHw9ICgyIDw8IDEyKSB8CisJ CQkJCUk5WFhfQ1NDX0NPRUZGX0ZQKGFic19jb2VmZiwgMTEpOworCQkJZWxzZSBpZiAoYWJzX2Nv ZWZmIDwgQ1RNX0NPRUZGXzBfNSkKKwkJCQljb2VmZnNbaV0gfD0gKDEgPDwgMTIpIHwKKwkJCQkJ STlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZmLCAxMCk7CisJCQllbHNlIGlmIChhYnNfY29lZmYg PCBDVE1fQ09FRkZfMV8wKQorCQkJCWNvZWZmc1tpXSB8PSBJOVhYX0NTQ19DT0VGRl9GUChhYnNf Y29lZmYsIDkpOworCQkJZWxzZSBpZiAoYWJzX2NvZWZmIDwgQ1RNX0NPRUZGXzJfMCkKKwkJCQlj b2VmZnNbaV0gfD0gKDcgPDwgMTIpIHwKKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZm LCA4KTsKKwkJCWVsc2UKKwkJCQljb2VmZnNbaV0gfD0gKDYgPDwgMTIpIHwKKwkJCQkJSTlYWF9D U0NfQ09FRkZfRlAoYWJzX2NvZWZmLCA3KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIExv YWQgYW4gaWRlbnRpdHkgbWF0cml4IGlmIG5vIGNvZWZmaWNpZW50cyBhcmUgcHJvdmlkZWQuCisJ CSAqCisJCSAqIFRPRE86IENoZWNrIHdoYXQga2luZCBvZiB2YWx1ZXMgYWN0dWFsbHkgY29tZSBv dXQgb2YgdGhlCisJCSAqIHBpcGUgd2l0aCB0aGVzZSBjb2VmZi9wb3N0b2ZmIHZhbHVlcyBhbmQg YWRqdXN0IHRvIGdldCB0aGUKKwkJICogYmVzdCBhY2N1cmFjeS4gUGVyaGFwcyB3ZSBldmVuIG5l ZWQgdG8gdGFrZSB0aGUgYnBjIHZhbHVlCisJCSAqIGludG8gY29uc2lkZXJhdGlvbi4KKwkJICov CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmIChpbnRlbF9jcnRjLT5jb25maWct PmxpbWl0ZWRfY29sb3JfcmFuZ2UpCisJCQkJY29lZmZzW2kgKiAzICsgaV0gPQorCQkJCQlJOVhY X0NTQ19DT0VGRl9MSU1JVEVEX1JBTkdFOworCQkJZWxzZQorCQkJCWNvZWZmc1tpICogMyArIGld ID0gSTlYWF9DU0NfQ09FRkZfMV8wOworCQl9CisJfQogCi0JSTkxNV9XUklURShQSVBFX0NTQ19D T0VGRl9SWV9HWShwaXBlKSwgY29lZmYgPDwgMTYpOwotCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfQlkocGlwZSksIDApOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09FRkZfUllfR1kocGlwZSks IGNvZWZmc1swXSA8PCAxNiB8IGNvZWZmc1sxXSk7CisJSTkxNV9XUklURShQSVBFX0NTQ19DT0VG Rl9CWShwaXBlKSwgY29lZmZzWzJdIDw8IDE2KTsKIAotCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfUlVfR1UocGlwZSksIGNvZWZmKTsKLQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JVKHBp cGUpLCAwKTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JVX0dVKHBpcGUpLCBjb2VmZnNb M10gPDwgMTYgfCBjb2VmZnNbNF0pOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09FRkZfQlUocGlw ZSksIGNvZWZmc1s1XSA8PCAxNik7CiAKLQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JWX0dW KHBpcGUpLCAwKTsKLQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JWKHBpcGUpLCBjb2VmZiA8 PCAxNik7CisJSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9SVl9HVihwaXBlKSwgY29lZmZzWzZd IDw8IDE2IHwgY29lZmZzWzddKTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JWKHBpcGUp LCBjb2VmZnNbOF0gPDwgMTYpOwogCiAJSTkxNV9XUklURShQSVBFX0NTQ19QUkVPRkZfSEkocGlw ZSksIDApOwogCUk5MTVfV1JJVEUoUElQRV9DU0NfUFJFT0ZGX01FKHBpcGUpLCAwKTsKQEAgLTg1 LDEzICsyMDEsMTggQEAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2NzY19tYXRyaXgoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCiB2b2lkIGludGVsX2NvbG9yX3NldF9jc2Moc3RydWN0IGRybV9jcnRj ICpjcnRjKQogewotCWk5eHhfbG9hZF9jc2NfbWF0cml4KGNydGMpOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2NzY19t YXRyaXgpCisJCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeChjcnRjKTsKIH0KIAot LyogTG9hZHMgdGhlIHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3IgdGhlIENSVEMgd2l0aCB0aGUgcHJl cGFyZWQgdmFsdWVzLiAqLworLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1hIHVuaXQg Zm9yIHRoZSBDUlRDLiAqLwogc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dHMoc3RydWN0IGRybV9j cnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOwogCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCWVudW0gcGlwZSBwaXBlID0g aW50ZWxfY3J0Yy0+cGlwZTsKQEAgLTEwNCwxOCArMjI1LDMzIEBAIHN0YXRpYyB2b2lkIGk5eHhf bG9hZF9sdXRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJCWFzc2VydF9wbGxfZW5hYmxlZChk ZXZfcHJpdiwgcGlwZSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCXVp bnQzMl90IHdvcmQgPSAoaW50ZWxfY3J0Yy0+bHV0X3JbaV0gPDwgMTYpIHwKLQkJCShpbnRlbF9j cnRjLT5sdXRfZ1tpXSA8PCA4KSB8Ci0JCQlpbnRlbF9jcnRjLT5sdXRfYltpXTsKLQkJaWYgKEhB U19HTUNIX0RJU1BMQVkoZGV2KSkKLQkJCUk5MTVfV1JJVEUoUEFMRVRURShwaXBlLCBpKSwgd29y ZCk7Ci0JCWVsc2UKLQkJCUk5MTVfV1JJVEUoTEdDX1BBTEVUVEUocGlwZSwgaSksIHdvcmQpOwor CWlmIChzdGF0ZS0+Z2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPQor CQkJKHN0cnVjdCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5nYW1tYV9sdXQtPmRhdGE7CisJCWZv ciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJdWludDMyX3Qgd29yZCA9CisJCQkJKGRybV9j b2xvcl9sdXRfZXh0cmFjdChsdXRbaV0ucmVkLCA4KSA8PCAxNikgfAorCQkJCShkcm1fY29sb3Jf bHV0X2V4dHJhY3QobHV0W2ldLmdyZWVuLCA4KSA8PCA4KSB8CisJCQkJZHJtX2NvbG9yX2x1dF9l eHRyYWN0KGx1dFtpXS5ibHVlLCA4KTsKKworCQkJaWYgKEhBU19HTUNIX0RJU1BMQVkoZGV2KSkK KwkJCQlJOTE1X1dSSVRFKFBBTEVUVEUocGlwZSwgaSksIHdvcmQpOworCQkJZWxzZQorCQkJCUk5 MTVfV1JJVEUoTEdDX1BBTEVUVEUocGlwZSwgaSksIHdvcmQpOworCQl9CisJfSBlbHNlIHsKKwkJ Zm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl1aW50MzJfdCB3b3JkID0gKGkgPDwgMTYp IHwgKGkgPDwgOCkgfCBpOworCisJCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQorCQkJCUk5 MTVfV1JJVEUoUEFMRVRURShwaXBlLCBpKSwgd29yZCk7CisJCQllbHNlCisJCQkJSTkxNV9XUklU RShMR0NfUEFMRVRURShwaXBlLCBpKSwgd29yZCk7CisJCX0KIAl9CiB9CiAKLS8qIExvYWRzIHRo ZSBsZWdhY3kgcGFsZXR0ZS9nYW1tYSB1bml0IGZvciB0aGUgQ1JUQyBvbiBIYXN3ZWxsKy4gKi8K Ky8qIExvYWRzIHRoZSBsZWdhY3kgcGFsZXR0ZS9nYW1tYSB1bml0IGZvciB0aGUgQ1JUQyBvbiBI YXN3ZWxsLiAqLwogc3RhdGljIHZvaWQgaGFzd2VsbF9sb2FkX2x1dHMoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xNDQs NiArMjgwLDg5IEBAIHN0YXRpYyB2b2lkIGhhc3dlbGxfbG9hZF9sdXRzKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIAkJaHN3X2VuYWJsZV9pcHMoaW50ZWxfY3J0Yyk7CiB9CiAKKy8qIExvYWRzIHRo ZSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRoZSBDUlRDIG9uIEJyb2Fkd2VsbCsuICovCitzdGF0 aWMgdm9pZCBicm9hZHdlbGxfbG9hZF9sdXRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUgPSBjcnRjLT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9z dGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoc3RhdGUpOworCWVudW0gcGlwZSBwaXBlID0gdG9f aW50ZWxfY3J0YyhjcnRjKS0+cGlwZTsKKwl1aW50MzJfdCBpLCBsdXRfc2l6ZSA9IElOVEVMX0lO Rk8oZGV2KS0+Y29sb3IuZGVnYW1tYV9sdXRfc2l6ZTsKKworCWlmIChjcnRjX3N0YXRlX2lzX2xl Z2FjeShzdGF0ZSkpIHsKKwkJaGFzd2VsbF9sb2FkX2x1dHMoY3J0Yyk7CisJCXJldHVybjsKKwl9 CisKKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0lOREVYKHBpcGUpLAorCQkgICBQQUxfUFJFQ19TUExJ VF9NT0RFIHwgUEFMX1BSRUNfQVVUT19JTkNSRU1FTlQpOworCisJaWYgKHN0YXRlLT5kZWdhbW1h X2x1dCkgeworCQlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0ID0KKwkJCShzdHJ1Y3QgZHJtX2Nv bG9yX2x1dCAqKSBzdGF0ZS0+ZGVnYW1tYV9sdXQtPmRhdGE7CisKKwkJZm9yIChpID0gMDsgaSA8 IGx1dF9zaXplOyBpKyspIHsKKwkJCXVpbnQzMl90IHdvcmQgPQorCQkJZHJtX2NvbG9yX2x1dF9l eHRyYWN0KGx1dFtpXS5yZWQsIDEwKSA8PCAyMCB8CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3Qo bHV0W2ldLmdyZWVuLCAxMCkgPDwgMTAgfAorCQkJZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtp XS5ibHVlLCAxMCk7CisKKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFUQShwaXBlKSwgd29yZCk7 CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJ dWludDMyX3QgdiA9IChpICogKCgxIDw8IDEwKSAtIDEpKSAvIChsdXRfc2l6ZSAtIDEpOworCisJ CQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlwZSksCisJCQkJICAgKHYgPDwgMjApIHwgKHYg PDwgMTApIHwgdik7CisJCX0KKwl9CisKKwlpZiAoc3RhdGUtPmdhbW1hX2x1dCkgeworCQlzdHJ1 Y3QgZHJtX2NvbG9yX2x1dCAqbHV0ID0KKwkJCShzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqKSBzdGF0 ZS0+Z2FtbWFfbHV0LT5kYXRhOworCisJCWZvciAoaSA9IDA7IGkgPCBsdXRfc2l6ZTsgaSsrKSB7 CisJCQl1aW50MzJfdCB3b3JkID0KKwkJCShkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJl ZCwgMTApIDw8IDIwKSB8CisJCQkoZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5ncmVlbiwg MTApIDw8IDEwKSB8CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDEwKTsK KworCQkJSTkxNV9XUklURShQUkVDX1BBTF9EQVRBKHBpcGUpLCB3b3JkKTsKKwkJfQorCisJCS8q IFByb2dyYW0gdGhlIG1heCByZWdpc3RlciB0byBjbGFtcCB2YWx1ZXMgPiAxLjAuICovCisJCUk5 MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDApLAorCQkJICAgZHJtX2NvbG9yX2x1dF9l eHRyYWN0KGx1dFtpXS5yZWQsIDE2KSk7CisJCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBp cGUsIDEpLAorCQkJICAgZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5ncmVlbiwgMTYpKTsK KwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiksCisJCQkgICBkcm1fY29sb3Jf bHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDE2KSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsg aSA8IGx1dF9zaXplOyBpKyspIHsKKwkJCXVpbnQzMl90IHYgPSAoaSAqICgoMSA8PCAxMCkgLSAx KSkgLyAobHV0X3NpemUgLSAxKTsKKworCQkJSTkxNV9XUklURShQUkVDX1BBTF9EQVRBKHBpcGUp LAorCQkJCSAgICh2IDw8IDIwKSB8ICh2IDw8IDEwKSB8IHYpOworCQl9CisKKwkJSTkxNV9XUklU RShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMCksICgxIDw8IDE2KSAtIDEpOworCQlJOTE1X1dSSVRF KFBSRUNfUEFMX0dDX01BWChwaXBlLCAxKSwgKDEgPDwgMTYpIC0gMSk7CisJCUk5MTVfV1JJVEUo UFJFQ19QQUxfR0NfTUFYKHBpcGUsIDIpLCAoMSA8PCAxNikgLSAxKTsKKwl9CisKKwlpbnRlbF9z dGF0ZS0+Z2FtbWFfbW9kZSA9IEdBTU1BX01PREVfTU9ERV9TUExJVDsKKwlJOTE1X1dSSVRFKEdB TU1BX01PREUocGlwZSksIEdBTU1BX01PREVfTU9ERV9TUExJVCk7CisJUE9TVElOR19SRUFEKEdB TU1BX01PREUocGlwZSkpOworCisJLyoKKwkgKiBSZXNldCB0aGUgaW5kZXgsIG90aGVyd2lzZSBp dCBwcmV2ZW50cyB0aGUgbGVnYWN5IHBhbGV0dGUgdG8gYmUKKwkgKiB3cml0dGVuIHByb3Blcmx5 LgorCSAqLworCUk5MTVfV1JJVEUoUFJFQ19QQUxfSU5ERVgocGlwZSksIDApOworfQorCiB2b2lk IGludGVsX2NvbG9yX2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTE1NiwzOSArMzc1LDYxIEBAIHZvaWQg aW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlkZXZfcHJpdi0+ ZGlzcGxheS5sb2FkX2x1dHMoY3J0Yyk7CiB9CiAKLXZvaWQgaW50ZWxfY29sb3JfbGVnYWN5X2dh bW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAotCQkJ CSAgdTE2ICpibHVlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3Qgc2l6ZSkKK2ludCBpbnRlbF9j b2xvcl9jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKLQlpbnQgZW5kID0gKHN0YXJ0ICsgc2l6ZSA+IDI1Nikg PyAyNTYgOiBzdGFydCArIHNpemUsIGk7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7CisJc2l6ZV90IGdhbW1hX2xlbmd0aCwgZGVnYW1tYV9sZW5ndGg7CiAKLQlmb3IgKGkgPSBz dGFydDsgaSA8IGVuZDsgaSsrKSB7Ci0JCWludGVsX2NydGMtPmx1dF9yW2ldID0gcmVkW2ldID4+ IDg7Ci0JCWludGVsX2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gODsKLQkJaW50ZWxfY3J0 Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDg7Ci0JfQorCWRlZ2FtbWFfbGVuZ3RoID0gSU5URUxf SU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1dF9zaXplICoKKwkJc2l6ZW9mKHN0cnVjdCBkcm1f Y29sb3JfbHV0KTsKKwlnYW1tYV9sZW5ndGggPSBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmdhbW1h X2x1dF9zaXplICoKKwkJc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KTsKIAotCWludGVsX2Nv bG9yX2xvYWRfbHV0cyhjcnRjKTsKKwkvKgorCSAqIFdlIGFsbG93IGJvdGggZGVnYW1tYSAmIGdh bW1hIGx1dHMgYXQgdGhlIHJpZ2h0IHNpemUgb3IKKwkgKiBOVUxMLgorCSAqLworCWlmICgoIWNy dGNfc3RhdGUtPmRlZ2FtbWFfbHV0IHx8CisJICAgICBjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dC0+ bGVuZ3RoID09IGRlZ2FtbWFfbGVuZ3RoKSAmJgorCSAgICAoIWNydGNfc3RhdGUtPmdhbW1hX2x1 dCB8fAorCSAgICAgY3J0Y19zdGF0ZS0+Z2FtbWFfbHV0LT5sZW5ndGggPT0gZ2FtbWFfbGVuZ3Ro KSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGFsc28gYWxsb3cgbm8gZGVnYW1tYSBsdXQg YW5kIGEgZ2FtbWEgbHV0IGF0IHRoZSBsZWdhY3kKKwkgKiBzaXplICgyNTYgZW50cmllcykuCisJ ICovCisJaWYgKCFjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dCAmJgorCSAgICBjcnRjX3N0YXRlLT5n YW1tYV9sdXQgJiYKKwkgICAgY3J0Y19zdGF0ZS0+Z2FtbWFfbHV0LT5sZW5ndGggPT0gTEVHQUNZ X0xVVF9MRU5HVEgpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHZvaWQg aW50ZWxfY29sb3JfaW5pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjKTsKLQlpbnQgaTsKIAogCWRybV9tb2RlX2NydGNfc2V0X2dhbW1h X3NpemUoY3J0YywgMjU2KTsKLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJaW50ZWxf Y3J0Yy0+bHV0X3JbaV0gPSBpOwotCQlpbnRlbF9jcnRjLT5sdXRfZ1tpXSA9IGk7Ci0JCWludGVs X2NydGMtPmx1dF9iW2ldID0gaTsKLQl9CiAKLQlpZiAoSVNfSEFTV0VMTChkZXYpIHx8Ci0JICAg IChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA4ICYmICFJU19DSEVSUllWSUVXKGRldikpKSB7CisJ aWYgKElTX0hBU1dFTEwoZGV2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2NzY19tYXRy aXggPSBpOXh4X2xvYWRfY3NjX21hdHJpeDsKIAkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9sdXRz ID0gaGFzd2VsbF9sb2FkX2x1dHM7CisJfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2KSB8fCBJ U19TS1lMQUtFKGRldikgfHwKKwkJICAgSVNfQlJPWFRPTihkZXYpIHx8IElTX0tBQllMQUtFKGRl dikpIHsKKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9jc2NfbWF0cml4ID0gaTl4eF9sb2FkX2Nz Y19tYXRyaXg7CisJCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGJyb2Fkd2VsbF9sb2Fk X2x1dHM7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9sdXRzID0gaTl4eF9s b2FkX2x1dHM7CiAJfQorCisJLyogRW5hYmxlIGNvbG9yIG1hbmFnZW1lbnQgc3VwcG9ydCB3aGVu IHdlIGhhdmUgZGVnYW1tYSAmIGdhbW1hIExVVHMuICovCisJaWYgKElOVEVMX0lORk8oZGV2KS0+ Y29sb3IuZGVnYW1tYV9sdXRfc2l6ZSAhPSAwICYmCisJICAgIElOVEVMX0lORk8oZGV2KS0+Y29s b3IuZ2FtbWFfbHV0X3NpemUgIT0gMCkKKwkJZHJtX2hlbHBlcl9jcnRjX2VuYWJsZV9jb2xvcl9t Z210KGNydGMsCisJCQkJCUlOVEVMX0lORk8oZGV2KS0+Y29sb3IuZGVnYW1tYV9sdXRfc2l6ZSwK KwkJCQkJSU5URUxfSU5GTyhkZXYpLT5jb2xvci5nYW1tYV9sdXRfc2l6ZSk7CiB9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggYTVmNTdjZC4uMTc3ODM2OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTE4MjAsNiArMTE4MjAsMTIgQEAgc3RhdGlj IGludCBpbnRlbF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQly ZXR1cm4gcmV0OwogCX0KIAorCWlmIChjcnRjX3N0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQpIHsK KwkJcmV0ID0gaW50ZWxfY29sb3JfY2hlY2soY3J0YywgY3J0Y19zdGF0ZSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IDA7CiAJaWYgKGRldl9wcml2LT5kaXNwbGF5 LmNvbXB1dGVfcGlwZV93bSkgewogCQlyZXQgPSBkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX3Bp cGVfd20oaW50ZWxfY3J0Yywgc3RhdGUpOwpAQCAtMTE4NDEsNyArMTE4NDcsNiBAQCBzdGF0aWMg aW50IGludGVsX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNz ID0gewogCS5tb2RlX3NldF9iYXNlX2F0b21pYyA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWlj LAotCS5sb2FkX2x1dCA9IGludGVsX2NvbG9yX2xvYWRfbHV0cywKIAkuYXRvbWljX2JlZ2luID0g aW50ZWxfYmVnaW5fY3J0Y19jb21taXQsCiAJLmF0b21pY19mbHVzaCA9IGludGVsX2ZpbmlzaF9j cnRjX2NvbW1pdCwKIAkuYXRvbWljX2NoZWNrID0gaW50ZWxfY3J0Y19hdG9taWNfY2hlY2ssCkBA IC0xMzQ0Myw2ICsxMzQ0OCwxOCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jb21taXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlKGNy dGMpOwogCQl9CiAKKwkJaWYgKCFtb2Rlc2V0ICYmCisJCSAgICBjcnRjLT5zdGF0ZS0+YWN0aXZl ICYmCisJCSAgICBjcnRjLT5zdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkKSB7CisJCQkvKgorCQkJ ICogT25seSB1cGRhdGUgY29sb3IgbWFuYWdlbWVudCB3aGVuIG5vdCBkb2luZworCQkJICogYSBt b2Rlc2V0IGFzIHRoaXMgd2lsbCBiZSBkb25lIGJ5CisJCQkgKiBjcnRjX2VuYWJsZSBhbHJlYWR5 LgorCQkJICovCisJCQlpbnRlbF9jb2xvcl9zZXRfY3NjKGNydGMpOworCQkJaW50ZWxfY29sb3Jf bG9hZF9sdXRzKGNydGMpOworCQl9CisKIAkJaWYgKCFtb2Rlc2V0KQogCQkJaW50ZWxfcHJlX3Bs YW5lX3VwZGF0ZSh0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpKTsKIApAQCAtMTM1Mzgs OCArMTM1NTUsOSBAQCBvdXQ6CiAjdW5kZWYgZm9yX2VhY2hfaW50ZWxfY3J0Y19tYXNrZWQKIAog c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewot CS5nYW1tYV9zZXQgPSBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0LAorCS5nYW1tYV9zZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0LAogCS5zZXRfY29uZmlnID0gZHJt X2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkuc2V0X3Byb3BlcnR5ID0gZHJtX2F0b21pY19o ZWxwZXJfY3J0Y19zZXRfcHJvcGVydHksCiAJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ks CiAJLnBhZ2VfZmxpcCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAogCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gaW50ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCmluZGV4IGQyODU1YzcuLjYxNTRiODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBA IC0xNjI1LDkgKzE2MjUsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJf ZnVuY3MgaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzOwogCiAvKiBpbnRlbF9jb2xvci5jICovCiB2 b2lkIGludGVsX2NvbG9yX2luaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBpbnRlbF9j b2xvcl9jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq c3RhdGUpOwogdm9pZCBpbnRlbF9jb2xvcl9zZXRfY3NjKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7 CiB2b2lkIGludGVsX2NvbG9yX2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotdm9p ZCBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2 ICpyZWQsIHUxNiAqZ3JlZW4sCi0JCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHN0YXJ0LCB1aW50 MzJfdCBzaXplKTsKIAogI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiZGV2LmMKaW5kZXggOTdhOTFlNi4uNzc3Zjk4YyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9mYmRldi5jCkBAIC0zNzksNiArMzc5LDcgQEAgcmV0cnk6CiAJCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3I7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAkJc3Ry dWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqbmV3X2NydGM7CisJCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjOwogCiAJCWZiX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwog CQljb25uZWN0b3IgPSBmYl9jb25uLT5jb25uZWN0b3I7CkBAIC00MjAsNiArNDIxLDEzIEBAIHJl dHJ5OgogCiAJCW51bV9jb25uZWN0b3JzX2VuYWJsZWQrKzsKIAorCQlpbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0Yyhjb25uZWN0b3ItPnN0YXRlLT5jcnRjKTsKKwkJZm9yIChqID0gMDsgaiA8IDI1 NjsgaisrKSB7CisJCQlpbnRlbF9jcnRjLT5sdXRfcltqXSA9IGo7CisJCQlpbnRlbF9jcnRjLT5s dXRfZ1tqXSA9IGo7CisJCQlpbnRlbF9jcnRjLT5sdXRfYltqXSA9IGo7CisJCX0KKwogCQluZXdf Y3J0YyA9IGludGVsX2ZiX2hlbHBlcl9jcnRjKGZiX2hlbHBlciwgY29ubmVjdG9yLT5zdGF0ZS0+ Y3J0Yyk7CiAKIAkJLyoKLS0gCjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK