From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH v6 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Fri, 24 May 2019 18:36:14 +0300 Message-ID: <20190524153614.32410-1-ville.syrjala@linux.intel.com> References: <20190521164025.30225-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id B642689FC5 for ; Fri, 24 May 2019 15:36:17 +0000 (UTC) In-Reply-To: <20190521164025.30225-2-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 RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCklD TCBoYXMgc28gbWFueSBwbGFuZXMgdGhhdCBpdCBjYW4gZWFzaWx5IGV4Y2VlZCB0aGUgbWF4aW11 bQplZmZlY3RpdmUgbWVtb3J5IGJhbmR3aWR0aCBvZiB0aGUgc3lzdGVtLiBXZSBtdXN0IHRoZXJl Zm9yZSBjaGVjawp0aGF0IHdlIGRvbid0IGV4Y2VlZCB0aGF0IGxpbWl0LgoKVGhlIGFsZ29yaXRo bSBpcyB2ZXJ5IG1hZ2ljIG51bWJlciBoZWF2eSBhbmQgbGFja3Mgc3VmZmljaWVudApleHBsYW5h dGlvbiBmb3Igbm93LiBXZSBhbHNvIGhhdmUgbm8gc2FuZSB3YXkgdG8gcXVlcnkgdGhlCm1lbW9y eSBjbG9jayBhbmQgdGltaW5ncywgc28gd2UgbXVzdCByZWx5IG9uIGEgY29tYmluYXRpb24gb2YK cmF3IHJlYWRvdXQgZnJvbSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIGhhcmRjb2RlZCBhc3N1 bXB0aW9ucy4KVGhlIG1lbW9yeSBjb250cm9sbGVyIHZhbHVlcyBvYnZpb3VzbHkgY2hhbmdlIGFz IHRoZSBzeXN0ZW0KanVtcHMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IFNBR1YgcG9pbnRzLCBzbyB3 ZSB0cnkgdG8gc3RhYmlsaXplCml0IGZpcnN0IGJ5IGRpc2FibGluZyBTQUdWIGZvciB0aGUgZHVy YXRpb24gb2YgdGhlIHJlYWRvdXQuCgpUaGUgdXRpbGl6ZWQgYmFuZHdpZHRoIGlzIHRyYWNrZWQg dmlhIGEgZGV2aWNlIHdpZGUgYXRvbWljCnByaXZhdGUgb2JqZWN0LiBUaGF0IGlzIGFjdHVhbGx5 IG5vdCByb2J1c3QgYmVjYXVzZSB3ZSBjYW4ndAphZmZvcmQgdG8gZW5mb3JjZSBzdHJpY3QgZ2xv YmFsIG9yZGVyaW5nIGJldHdlZW4gdGhlIHBpcGVzLgpUaHVzIEkgdGhpbmsgSSdsbCBuZWVkIHRv IGNoYW5nZSB0aGlzIHRvIHNpbXBseSBjaG9wIHVwIHRoZQphdmFpbGFibGUgYmFuZHdpZHRoIGJl dHdlZW4gYWxsIHRoZSBhY3RpdmUgcGlwZXMuIEVhY2ggcGlwZQpjYW4gdGhlbiBkbyB3aGF0ZXZl ciBpdCB3YW50cyBhcyBsb25nIGFzIGl0IGRvZXNuJ3QgZXhjZWVkCml0cyBidWRnZXQuIFRoYXQg c2NoZW1lIHdpbGwgYWxzbyByZXF1aXJlIHRoYXQgd2UgYXNzdW1lIHRoYXQKYW55IG51bWJlciBv ZiBwbGFuZXMgY291bGQgYmUgYWN0aXZlIGF0IGFueSB0aW1lLgoKVE9ETzogbWFrZSBpdCByb2J1 c3QgYW5kIGRlYWwgd2l0aCBhbGwgdGhlIG9wZW4gcXVlc3Rpb25zCgp2MjogU2xlZXAgbG9uZ2Vy IGFmdGVyIGRpc2FibGluZyBTQUdWCnYzOiBQb2xsIGZvciB0aGUgZGNsayB0byBnZXQgcmFpc2Vk IChzZWVuIGl0IHRha2UgMjUwbXMhKQogICAgSWYgdGhlIHN5c3RlbSBoYXMgMjEzM01UL3MgbWVt b3J5IHRoZW4gd2UgcG9pbnRsZXNzbHkKICAgIHdhaXQgb25lIGZ1bGwgc2Vjb25kIDooCnY0OiBV c2UgdGhlIG5ldyBwY29kZSBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBxZ3YgcG9pbnRzIHJhdGhlcgog ICAgdGhhdCB1c2luZyBoYXJkY29kZWQgbnVtYmVycwp2NTogTW92ZSB0aGUgcGNvZGUgc3R1ZmYg aW50byBpbnRlbF9idy5jIChNYXR0KQogICAgcy9pbnRlbF9zYWd2X2luZm8vaW50ZWxfcWd2X2lu Zm8vCiAgICBEbyB0aGUgTlYxMi9QMDEwIGFzIHBlciBzcGVjIGZvciBub3cgKE1hdHQpCiAgICBz L0lTX0lDRUxBS0UvSVNfR0VOMTEvCnY2OiBJZ25vcmUgYmFuZHdpZHRoIGxpbWl0cyBpZiB0aGUg cGNvZGUgcXVlcnkgZmFpbHMKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3 LmQucm9wZXJAaW50ZWwuY29tPgpBY2tlZC1ieTogQ2xpbnQgVGF5bG9yIDxDbGludG9uLkEuVGF5 bG9yQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgICB8 ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICB8ICAgOCAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgICB8ICAgMyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyB8ICAyNyArKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYncuYyAgICAgICAgICAgfCA0MjEgKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuaCAgICAgICAgICAgfCAgNDcgKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgICB8ICA0MCArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgfCAgIDIgKwogMTAgZmlsZXMgY2hhbmdl ZCwgNTUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNjgxMDZm ZTM1YTA0Li4xMzlhMGZjMTkzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xMzgsNiArMTM4 LDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAogCSAgaW50ZWxfYXRvbWljLm8gXAogCSAg aW50ZWxfYXRvbWljX3BsYW5lLm8gXAogCSAgaW50ZWxfYmlvcy5vIFwKKwkgIGludGVsX2J3Lm8g XAogCSAgaW50ZWxfY2RjbGsubyBcCiAJICBpbnRlbF9jb2xvci5vIFwKIAkgIGludGVsX2NvbWJv X3BoeS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDgzZDJlYjllNzRjYi4uNjY5OWUz YTk0MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNs dWRlICJpOTE1X3ZncHUuaCIKICNpbmNsdWRlICJpbnRlbF9hY3BpLmgiCiAjaW5jbHVkZSAiaW50 ZWxfYXVkaW8uaCIKKyNpbmNsdWRlICJpbnRlbF9idy5oIgogI2luY2x1ZGUgImludGVsX2NkY2xr LmgiCiAjaW5jbHVkZSAiaW50ZWxfY3NyLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHAuaCIKQEAgLTE2 NTcsNiArMTY1OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9odyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJICovCiAJaW50ZWxfZ2V0X2RyYW1faW5mbyhkZXZf cHJpdik7CiAKKwlpbnRlbF9id19pbml0X2h3KGRldl9wcml2KTsKIAogCXJldHVybiAwOwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAzMTFlMTkxNTQ2NzIuLjE1ODAyM2NmMzIxNyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8ZHJtL2Ry bV9jYWNoZS5oPgogI2luY2x1ZGUgPGRybS9kcm1fdXRpbC5oPgogI2luY2x1ZGUgPGRybS9kcm1f ZHNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2Nv bm5lY3Rvci5oPgogI2luY2x1ZGUgPGRybS9pOTE1X21laV9oZGNwX2ludGVyZmFjZS5oPgogCkBA IC0xODQxLDYgKzE4NDIsMTMgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCQl9IHR5cGU7 CiAJfSBkcmFtX2luZm87CiAKKwlzdHJ1Y3QgaW50ZWxfYndfaW5mbyB7CisJCWludCBudW1fcGxh bmVzOworCQlpbnQgZGVyYXRlZGJ3WzNdOworCX0gbWF4X2J3WzZdOworCisJc3RydWN0IGRybV9w cml2YXRlX29iaiBid19vYmo7CisKIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHJ1bnRpbWVfcG07 CiAKIAlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggNDlkY2UwNGRkNjg4Li41 MTFhMGM3NThiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtODc3Nyw2ICs4Nzc3LDkg QEAgZW51bSB7CiAjZGVmaW5lICAgR0VONl9QQ09ERV9XUklURV9NSU5fRlJFUV9UQUJMRQkweDgK ICNkZWZpbmUgICBHRU42X1BDT0RFX1JFQURfTUlOX0ZSRVFfVEFCTEUJMHg5CiAjZGVmaW5lICAg R0VONl9SRUFEX09DX1BBUkFNUwkJCTB4YworI2RlZmluZSAgIElDTF9QQ09ERV9NRU1fU1VCU1lT WVNURU1fSU5GTwkweGQKKyNkZWZpbmUgICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxf SU5GTwkoMHgwIDw8IDgpCisjZGVmaW5lICAgICBJQ0xfUENPREVfTUVNX1NTX1JFQURfUUdWX1BP SU5UX0lORk8ocG9pbnQpCSgoKHBvaW50KSA8PCAxNikgfCAoMHgxIDw8IDgpKQogI2RlZmluZSAg IEdFTjZfUENPREVfUkVBRF9EX0NPTVAJCTB4MTAKICNkZWZpbmUgICBHRU42X1BDT0RFX1dSSVRF X0RfQ09NUAkJMHgxMQogI2RlZmluZSAgIEhTV19QQ09ERV9ERV9XUklURV9GUkVRX1JFUQkJMHgx NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwppbmRleCBkMTE2ODFk NzFhZGQuLjU4ZWExYjY3MmExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfYXRvbWljX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWlj X3BsYW5lLmMKQEAgLTExNCw2ICsxMTQsMjkgQEAgaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95 X3N0YXRlKHBsYW5lLCBzdGF0ZSk7CiB9CiAKK3Vuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9kYXRh X3JhdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOworCXVuc2ln bmVkIGludCBjcHA7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCisJCXJldHVy biAwOworCisJY3BwID0gZmItPmZvcm1hdC0+Y3BwWzBdOworCisJLyoKKwkgKiBCYXNlZCBvbiBI U0QjOjE0MDg3MTU0OTMKKwkgKiBOVjEyIGNwcCA9PSA0LCBQMDEwIGNwcCA9PSA4CisJICoKKwkg KiBGSVhNRSB3aGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgdGhpcz8KKwkgKi8KKwlpZiAoZmItPmZv cm1hdC0+aXNfeXV2ICYmIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgPiAxKQorCQljcHAgKj0gNDsK KworCXJldHVybiBjcHAgKiBjcnRjX3N0YXRlLT5waXhlbF9yYXRlOworfQorCiBpbnQgaW50ZWxf cGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm9sZF9jcnRjX3N0YXRlLAogCQkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2Ny dGNfc3RhdGUsCiAJCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5l X3N0YXRlLApAQCAtMTI1LDYgKzE0OCw3IEBAIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2tf d2l0aF9zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfCiAJbmV3 X2NydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgJj0gfkJJVChwbGFuZS0+aWQpOwogCW5ld19jcnRj X3N0YXRlLT5udjEyX3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7CiAJbmV3X2NydGNfc3RhdGUt PmM4X3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7CisJbmV3X2NydGNfc3RhdGUtPmRhdGFfcmF0 ZVtwbGFuZS0+aWRdID0gMDsKIAluZXdfcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSA9IGZhbHNl OwogCiAJaWYgKCFuZXdfcGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAmJiAhb2xkX3BsYW5lX3N0YXRl LT5iYXNlLmNydGMpCkBAIC0xNDksNiArMTczLDkgQEAgaW50IGludGVsX3BsYW5lX2F0b21pY19j aGVja193aXRoX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y18K IAlpZiAobmV3X3BsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUgfHwgb2xkX3BsYW5lX3N0YXRlLT5i YXNlLnZpc2libGUpCiAJCW5ld19jcnRjX3N0YXRlLT51cGRhdGVfcGxhbmVzIHw9IEJJVChwbGFu ZS0+aWQpOwogCisJbmV3X2NydGNfc3RhdGUtPmRhdGFfcmF0ZVtwbGFuZS0+aWRdID0KKwkJaW50 ZWxfcGxhbmVfZGF0YV9yYXRlKG5ld19jcnRjX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOworCiAJ cmV0dXJuIGludGVsX3BsYW5lX2F0b21pY19jYWxjX2NoYW5nZXMob2xkX2NydGNfc3RhdGUsCiAJ CQkJCSAgICAgICAmbmV3X2NydGNfc3RhdGUtPmJhc2UsCiAJCQkJCSAgICAgICBvbGRfcGxhbmVf c3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxh bmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5oCmluZGV4IDE0 Njc4NjIwNDQwZi4uMGE5NjUxMzc2ZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9hdG9taWNfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9h dG9taWNfcGxhbmUuaApAQCAtMTUsNiArMTUsOCBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7 CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBpbnRlbF9wbGFu ZV9oZWxwZXJfZnVuY3M7CiAKK3Vuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9kYXRhX3JhdGUoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJICAgY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CiB2b2lkIGludGVsX3VwZGF0ZV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCQkJY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uYjI0OWIxOGJjY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuYwpAQCAtMCwwICsxLDQyMSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5o PgorCisjaW5jbHVkZSAiaW50ZWxfYncuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNs dWRlICJpbnRlbF9zaWRlYmFuZC5oIgorCisvKiBQYXJhbWV0ZXJzIGZvciBRY2xrIEdleXNlcnZp bGxlIChRR1YpICovCitzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50IHsKKwl1MTYgZGNsaywgdF9ycCwg dF9yZHByZSwgdF9yYywgdF9yYXMsIHRfcmNkOworfTsKKworc3RydWN0IGludGVsX3Fndl9pbmZv IHsKKwlzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50IHBvaW50c1szXTsKKwl1OCBudW1fcG9pbnRzOwor CXU4IG51bV9jaGFubmVsczsKKwl1OCB0X2JsOworCWVudW0gaW50ZWxfZHJhbV90eXBlIGRyYW1f dHlwZTsKK307CisKK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRfbWVtX2dsb2JhbF9pbmZvKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaW50ZWxfcWd2 X2luZm8gKnFpKQoreworCXUzMiB2YWwgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBzYW5keWJy aWRnZV9wY29kZV9yZWFkKGRldl9wcml2LAorCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TVUJTWVNZ U1RFTV9JTkZPIHwKKwkJCQkgICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxfSU5GTywK KwkJCQkgICAgICZ2YWwsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0 Y2ggKHZhbCAmIDB4ZikgeworCWNhc2UgMDoKKwkJcWktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1f RERSNDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlxaS0+ZHJhbV90eXBlID0gSU5URUxfRFJBTV9E RFIzOworCQlicmVhazsKKwljYXNlIDI6CisJCXFpLT5kcmFtX3R5cGUgPSBJTlRFTF9EUkFNX0xQ RERSMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlxaS0+ZHJhbV90eXBlID0gSU5URUxfRFJBTV9M UEREUjM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRSh2YWwgJiAweGYpOwor CQlicmVhazsKKwl9CisKKwlxaS0+bnVtX2NoYW5uZWxzID0gKHZhbCAmIDB4ZjApID4+IDQ7CisJ cWktPm51bV9wb2ludHMgPSAodmFsICYgMHhmMDApID4+IDg7CisKKwlxaS0+dF9ibCA9IHFpLT5k cmFtX3R5cGUgPT0gSU5URUxfRFJBTV9ERFI0ID8gNCA6IDg7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBpY2xfcGNvZGVfcmVhZF9xZ3ZfcG9pbnRfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSBzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50ICpzcCwKKwkJ CQkJIGludCBwb2ludCkKK3sKKwl1MzIgdmFsID0gMCwgdmFsMjsKKwlpbnQgcmV0OworCisJcmV0 ID0gc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKKwkJCQkgICAgIElDTF9QQ09ERV9N RU1fU1VCU1lTWVNURU1fSU5GTyB8CisJCQkJICAgICBJQ0xfUENPREVfTUVNX1NTX1JFQURfUUdW X1BPSU5UX0lORk8ocG9pbnQpLAorCQkJCSAgICAgJnZhbCwgJnZhbDIpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlzcC0+ZGNsayA9IHZhbCAmIDB4ZmZmZjsKKwlzcC0+dF9ycCA9ICh2 YWwgJiAweGZmMDAwMCkgPj4gMTY7CisJc3AtPnRfcmNkID0gKHZhbCAmIDB4ZmYwMDAwMDApID4+ IDI0OworCisJc3AtPnRfcmRwcmUgPSB2YWwyICYgMHhmZjsKKwlzcC0+dF9yYXMgPSAodmFsMiAm IDB4ZmYwMCkgPj4gODsKKworCXNwLT50X3JjID0gc3AtPnRfcnAgKyBzcC0+dF9yYXM7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpY2xfZ2V0X3Fndl9wb2ludHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgc3RydWN0IGludGVsX3Fndl9pbmZvICpx aSkKK3sKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gaWNsX3Bjb2RlX3JlYWRfbWVtX2dsb2JhbF9p bmZvKGRldl9wcml2LCBxaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChXQVJO X09OKHFpLT5udW1fcG9pbnRzID4gQVJSQVlfU0laRShxaS0+cG9pbnRzKSkpCisJCXFpLT5udW1f cG9pbnRzID0gQVJSQVlfU0laRShxaS0+cG9pbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBxaS0+ bnVtX3BvaW50czsgaSsrKSB7CisJCXN0cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgKnNwID0gJnFpLT5w b2ludHNbaV07CisKKwkJcmV0ID0gaWNsX3Bjb2RlX3JlYWRfcWd2X3BvaW50X2luZm8oZGV2X3By aXYsIHNwLCBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJRFJNX0RFQlVHX0tN UygiUUdWICVkOiBEQ0xLPSVkIHRSUD0lZCB0UkRQUkU9JWQgdFJBUz0lZCB0UkNEPSVkIHRSQz0l ZFxuIiwKKwkJCSAgICAgIGksIHNwLT5kY2xrLCBzcC0+dF9ycCwgc3AtPnRfcmRwcmUsIHNwLT50 X3JhcywKKwkJCSAgICAgIHNwLT50X3JjZCwgc3AtPnRfcmMpOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGljbF9jYWxjX2J3KGludCBkY2xrLCBpbnQgbnVtLCBpbnQgZGVuKQor eworCS8qIG11bHRpcGxlcyBvZiAxNi42NjZNSHogKDEwMC82KSAqLworCXJldHVybiBESVZfUk9V TkRfQ0xPU0VTVChudW0gKiBkY2xrICogMTAwLCBkZW4gKiA2KTsKK30KKworc3RhdGljIGludCBp Y2xfc2Fndl9tYXhfZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfcWd2X2luZm8gKnFpKQoreworCXUx NiBkY2xrID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxaS0+bnVtX3BvaW50czsg aSsrKQorCQlkY2xrID0gbWF4KGRjbGssIHFpLT5wb2ludHNbaV0uZGNsayk7CisKKwlyZXR1cm4g ZGNsazsKK30KKworc3RydWN0IGludGVsX3NhX2luZm8geworCXU4IGRlYnVyc3QsIG1wYWdlc2l6 ZSwgZGVwcm9nYndsaW1pdCwgZGlzcGxheXJ0aWRzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9zYV9pbmZvIGljbF9zYV9pbmZvID0geworCS5kZWJ1cnN0ID0gOCwKKwkubXBhZ2Vz aXplID0gMTYsCisJLmRlcHJvZ2J3bGltaXQgPSAyNSwgLyogR0IvcyAqLworCS5kaXNwbGF5cnRp ZHMgPSAxMjgsCit9OworCitzdGF0aWMgaW50IGljbF9nZXRfYndfaW5mbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX3Fndl9pbmZvIHFpID0ge307 CisJY29uc3Qgc3RydWN0IGludGVsX3NhX2luZm8gKnNhID0gJmljbF9zYV9pbmZvOworCWJvb2wg aXNfeV90aWxlID0gdHJ1ZTsgLyogYXNzdW1lIHkgdGlsZSBtYXkgYmUgdXNlZCAqLworCWludCBu dW1fY2hhbm5lbHM7CisJaW50IGRlaW50ZXJsZWF2ZTsKKwlpbnQgaXBxZGVwdGgsIGlwcWRlcHRo cGNoOworCWludCBkY2xrX21heDsKKwlpbnQgbWF4ZGVidzsKKwlpbnQgaSwgcmV0OworCisJcmV0 ID0gaWNsX2dldF9xZ3ZfcG9pbnRzKGRldl9wcml2LCAmcWkpOworCWlmIChyZXQpIHsKKwkJRFJN X0RFQlVHX0tNUygiRmFpbGVkIHRvIGdldCBtZW1vcnkgc3Vic3lzdGVtIGluZm9ybWF0aW9uLCBp Z25vcmluZyBiYW5kd2lkdGggbGltaXRzIik7CisJCXJldHVybiByZXQ7CisJfQorCW51bV9jaGFu bmVscyA9IHFpLm51bV9jaGFubmVsczsKKworCWRlaW50ZXJsZWF2ZSA9IERJVl9ST1VORF9VUChu dW1fY2hhbm5lbHMsIGlzX3lfdGlsZSA/IDQgOiAyKTsKKwlkY2xrX21heCA9IGljbF9zYWd2X21h eF9kY2xrKCZxaSk7CisKKwlpcHFkZXB0aHBjaCA9IDE2OworCisJbWF4ZGVidyA9IG1pbihzYS0+ ZGVwcm9nYndsaW1pdCAqIDEwMDAsCisJCSAgICAgIGljbF9jYWxjX2J3KGRjbGtfbWF4LCAxNiwg MSkgKiA2IC8gMTApOyAvKiA2MCUgKi8KKwlpcHFkZXB0aCA9IG1pbihpcHFkZXB0aHBjaCwgc2Et PmRpc3BsYXlydGlkcyAvIG51bV9jaGFubmVscyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShkZXZfcHJpdi0+bWF4X2J3KTsgaSsrKSB7CisJCXN0cnVjdCBpbnRlbF9id19pbmZvICpi aSA9ICZkZXZfcHJpdi0+bWF4X2J3W2ldOworCQlpbnQgY2xwY2hncm91cDsKKwkJaW50IGo7CisK KwkJY2xwY2hncm91cCA9IChzYS0+ZGVidXJzdCAqIGRlaW50ZXJsZWF2ZSAvIG51bV9jaGFubmVs cykgPDwgaTsKKwkJYmktPm51bV9wbGFuZXMgPSAoaXBxZGVwdGggLSBjbHBjaGdyb3VwKSAvIGNs cGNoZ3JvdXAgKyAxOworCisJCWZvciAoaiA9IDA7IGogPCBxaS5udW1fcG9pbnRzOyBqKyspIHsK KwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgKnNwID0gJnFpLnBvaW50c1tqXTsKKwkJ CWludCBjdCwgYnc7CisKKwkJCS8qCisJCQkgKiBNYXggcm93IGN5Y2xlIHRpbWUKKwkJCSAqCisJ CQkgKiBGSVhNRSB3aGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgdGhlCisJCQkgKiBhc3N1bWVkIGJ1 cnN0IGxlbmd0aD8KKwkJCSAqLworCQkJY3QgPSBtYXhfdChpbnQsIHNwLT50X3JjLCBzcC0+dF9y cCArIHNwLT50X3JjZCArCisJCQkJICAgKGNscGNoZ3JvdXAgLSAxKSAqIHFpLnRfYmwgKyBzcC0+ dF9yZHByZSk7CisJCQlidyA9IGljbF9jYWxjX2J3KHNwLT5kY2xrLCBjbHBjaGdyb3VwICogMzIg KiBudW1fY2hhbm5lbHMsIGN0KTsKKworCQkJYmktPmRlcmF0ZWRid1tqXSA9IG1pbihtYXhkZWJ3 LAorCQkJCQkgICAgICAgYncgKiA5IC8gMTApOyAvKiA5MCUgKi8KKworCQkJRFJNX0RFQlVHX0tN UygiQlclZCAvIFFHViAlZDogbnVtX3BsYW5lcz0lZCBkZXJhdGVkYnc9JWRcbiIsCisJCQkJICAg ICAgaSwgaiwgYmktPm51bV9wbGFuZXMsIGJpLT5kZXJhdGVkYndbal0pOworCQl9CisKKwkJaWYg KGJpLT5udW1fcGxhbmVzID09IDEpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHVuc2lnbmVkIGludCBpY2xfbWF4X2J3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCSAgICAgICBpbnQgbnVtX3BsYW5lcywgaW50IHFndl9wb2ludCkKK3sKKwlp bnQgaTsKKworCS8qIERpZCB3ZSBpbml0aWFsaXplIHRoZSBidyBsaW1pdHMgc3VjY2VzZnVsbHk/ ICovCisJaWYgKGRldl9wcml2LT5tYXhfYndbMF0ubnVtX3BsYW5lcyA9PSAwKQorCQlyZXR1cm4g VUlOVF9NQVg7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZfcHJpdi0+bWF4X2J3 KTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBpbnRlbF9id19pbmZvICpiaSA9CisJCQkmZGV2X3By aXYtPm1heF9id1tpXTsKKworCQlpZiAobnVtX3BsYW5lcyA+PSBiaS0+bnVtX3BsYW5lcykKKwkJ CXJldHVybiBiaS0+ZGVyYXRlZGJ3W3Fndl9wb2ludF07CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgaW50ZWxfYndfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cit7CisJaWYgKElTX0dFTihkZXZfcHJpdiwgMTEpKQorCQlpY2xfZ2V0X2J3X2luZm8oZGV2X3By aXYpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX21heF9kYXRhX3JhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQlpbnQgbnVtX3BsYW5lcykKK3sKKwlp ZiAoSVNfR0VOKGRldl9wcml2LCAxMSkpCisJCS8qCisJCSAqIEZJWE1FIHdpdGggU0FHViBkaXNh YmxlZCBtYXliZSB3ZSBjYW4gYXNzdW1lCisJCSAqIHBvaW50IDEgd2lsbCBhbHdheXMgYmUgdXNl ZD8gU2VlbXMgdG8gbWF0Y2gKKwkJICogdGhlIGJlaGF2aW91ciBvYnNlcnZlZCBpbiB0aGUgd2ls ZC4KKwkJICovCisJCXJldHVybiBtaW4zKGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9wbGFuZXMs IDApLAorCQkJICAgIGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9wbGFuZXMsIDEpLAorCQkJICAg IGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9wbGFuZXMsIDIpKTsKKwllbHNlCisJCXJldHVybiBV SU5UX01BWDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9id19jcnRjX251bV9hY3Rp dmVfcGxhbmVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQorewor CS8qCisJICogV2UgYXNzdW1lIGN1cnNvcnMgYXJlIHNtYWxsIGVub3VnaAorCSAqIHRvIG5vdCBu b3QgY2F1c2UgYmFuZHdpZHRoIHByb2JsZW1zLgorCSAqLworCXJldHVybiBod2VpZ2h0OChjcnRj X3N0YXRlLT5hY3RpdmVfcGxhbmVzICYgfkJJVChQTEFORV9DVVJTT1IpKTsKK30KKworc3RhdGlj IHVuc2lnbmVkIGludCBpbnRlbF9id19jcnRjX2RhdGFfcmF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9y YXRlID0gMDsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOworCisJZm9yX2VhY2hfcGxhbmVfaWRf b25fY3J0YyhjcnRjLCBwbGFuZV9pZCkgeworCQkvKgorCQkgKiBXZSBhc3N1bWUgY3Vyc29ycyBh cmUgc21hbGwgZW5vdWdoCisJCSAqIHRvIG5vdCBub3QgY2F1c2UgYmFuZHdpZHRoIHByb2JsZW1z LgorCQkgKi8KKwkJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJCWNvbnRpbnVlOwor CisJCWRhdGFfcmF0ZSArPSBjcnRjX3N0YXRlLT5kYXRhX3JhdGVbcGxhbmVfaWRdOworCX0KKwor CXJldHVybiBkYXRhX3JhdGU7Cit9CisKK3ZvaWQgaW50ZWxfYndfY3J0Y191cGRhdGUoc3RydWN0 IGludGVsX2J3X3N0YXRlICpid19zdGF0ZSwKKwkJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRl bF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CisKKwlid19zdGF0ZS0+ZGF0YV9yYXRlW2Ny dGMtPnBpcGVdID0KKwkJaW50ZWxfYndfY3J0Y19kYXRhX3JhdGUoY3J0Y19zdGF0ZSk7CisJYndf c3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW2NydGMtPnBpcGVdID0KKwkJaW50ZWxfYndfY3J0Y19u dW1fYWN0aXZlX3BsYW5lcyhjcnRjX3N0YXRlKTsKKworCURSTV9ERUJVR19LTVMoInBpcGUgJWMg ZGF0YSByYXRlICV1IG51bSBhY3RpdmUgcGxhbmVzICV1XG4iLAorCQkgICAgICBwaXBlX25hbWUo Y3J0Yy0+cGlwZSksCisJCSAgICAgIGJ3X3N0YXRlLT5kYXRhX3JhdGVbY3J0Yy0+cGlwZV0sCisJ CSAgICAgIGJ3X3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSk7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfYndfbnVtX2FjdGl2ZV9wbGFuZXMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2J3 X3N0YXRlICpid19zdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2FjdGl2ZV9wbGFuZXMgPSAw OworCWVudW0gcGlwZSBwaXBlOworCisJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkKKwkJ bnVtX2FjdGl2ZV9wbGFuZXMgKz0gYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW3BpcGVdOwor CisJcmV0dXJuIG51bV9hY3RpdmVfcGxhbmVzOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlu dGVsX2J3X2RhdGFfcmF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJ ICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUpCit7CisJdW5zaWdu ZWQgaW50IGRhdGFfcmF0ZSA9IDA7CisJZW51bSBwaXBlIHBpcGU7CisKKwlmb3JfZWFjaF9waXBl KGRldl9wcml2LCBwaXBlKQorCQlkYXRhX3JhdGUgKz0gYndfc3RhdGUtPmRhdGFfcmF0ZVtwaXBl XTsKKworCXJldHVybiBkYXRhX3JhdGU7Cit9CisKK2ludCBpbnRlbF9id19hdG9taWNfY2hlY2so c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+YmFzZS5kZXYpOworCXN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwgKm9sZF9jcnRjX3N0YXRlOworCXN0cnVjdCBp bnRlbF9id19zdGF0ZSAqYndfc3RhdGUgPSBOVUxMOworCXVuc2lnbmVkIGludCBkYXRhX3JhdGUs IG1heF9kYXRhX3JhdGU7CisJdW5zaWduZWQgaW50IG51bV9hY3RpdmVfcGxhbmVzOworCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjOworCWludCBpOworCisJLyogRklYTUUgZWFybGllciBnZW5zIG5l ZWQgc29tZSBjaGVja3MgdG9vICovCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKKwkJ cmV0dXJuIDA7CisKKwlmb3JfZWFjaF9vbGRuZXdfaW50ZWxfY3J0Y19pbl9zdGF0ZShzdGF0ZSwg Y3J0Yywgb2xkX2NydGNfc3RhdGUsCisJCQkJCSAgICBuZXdfY3J0Y19zdGF0ZSwgaSkgeworCQl1 bnNpZ25lZCBpbnQgb2xkX2RhdGFfcmF0ZSA9CisJCQlpbnRlbF9id19jcnRjX2RhdGFfcmF0ZShv bGRfY3J0Y19zdGF0ZSk7CisJCXVuc2lnbmVkIGludCBuZXdfZGF0YV9yYXRlID0KKwkJCWludGVs X2J3X2NydGNfZGF0YV9yYXRlKG5ld19jcnRjX3N0YXRlKTsKKwkJdW5zaWduZWQgaW50IG9sZF9h Y3RpdmVfcGxhbmVzID0KKwkJCWludGVsX2J3X2NydGNfbnVtX2FjdGl2ZV9wbGFuZXMob2xkX2Ny dGNfc3RhdGUpOworCQl1bnNpZ25lZCBpbnQgbmV3X2FjdGl2ZV9wbGFuZXMgPQorCQkJaW50ZWxf YndfY3J0Y19udW1fYWN0aXZlX3BsYW5lcyhuZXdfY3J0Y19zdGF0ZSk7CisKKwkJLyoKKwkJICog QXZvaWQgbG9ja2luZyB0aGUgYncgc3RhdGUgd2hlbgorCQkgKiBub3RoaW5nIHNpZ25pZmljYW50 IGhhcyBjaGFuZ2VkLgorCQkgKi8KKwkJaWYgKG9sZF9kYXRhX3JhdGUgPT0gbmV3X2RhdGFfcmF0 ZSAmJgorCQkgICAgb2xkX2FjdGl2ZV9wbGFuZXMgPT0gbmV3X2FjdGl2ZV9wbGFuZXMpCisJCQlj b250aW51ZTsKKworCQlid19zdGF0ZSAgPSBpbnRlbF9hdG9taWNfZ2V0X2J3X3N0YXRlKHN0YXRl KTsKKwkJaWYgKElTX0VSUihid19zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VSUihid19zdGF0ZSk7 CisKKwkJYndfc3RhdGUtPmRhdGFfcmF0ZVtjcnRjLT5waXBlXSA9IG5ld19kYXRhX3JhdGU7CisJ CWJ3X3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSA9IG5ld19hY3RpdmVfcGxh bmVzOworCisJCURSTV9ERUJVR19LTVMoInBpcGUgJWMgZGF0YSByYXRlICV1IG51bSBhY3RpdmUg cGxhbmVzICV1XG4iLAorCQkJICAgICAgcGlwZV9uYW1lKGNydGMtPnBpcGUpLAorCQkJICAgICAg Yndfc3RhdGUtPmRhdGFfcmF0ZVtjcnRjLT5waXBlXSwKKwkJCSAgICAgIGJ3X3N0YXRlLT5udW1f YWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSk7CisJfQorCisJaWYgKCFid19zdGF0ZSkKKwkJcmV0 dXJuIDA7CisKKwlkYXRhX3JhdGUgPSBpbnRlbF9id19kYXRhX3JhdGUoZGV2X3ByaXYsIGJ3X3N0 YXRlKTsKKwludW1fYWN0aXZlX3BsYW5lcyA9IGludGVsX2J3X251bV9hY3RpdmVfcGxhbmVzKGRl dl9wcml2LCBid19zdGF0ZSk7CisKKwltYXhfZGF0YV9yYXRlID0gaW50ZWxfbWF4X2RhdGFfcmF0 ZShkZXZfcHJpdiwgbnVtX2FjdGl2ZV9wbGFuZXMpOworCisJZGF0YV9yYXRlID0gRElWX1JPVU5E X1VQKGRhdGFfcmF0ZSwgMTAwMCk7CisKKwlpZiAoZGF0YV9yYXRlID4gbWF4X2RhdGFfcmF0ZSkg eworCQlEUk1fREVCVUdfS01TKCJCYW5kd2lkdGggJXUgTUIvcyBleGNlZWRzIG1heCBhdmFpbGFi bGUgJWQgTUIvcyAoJWQgYWN0aXZlIHBsYW5lcylcbiIsCisJCQkgICAgICBkYXRhX3JhdGUsIG1h eF9kYXRhX3JhdGUsIG51bV9hY3RpdmVfcGxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKmludGVs X2J3X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCit7CisJc3Ry dWN0IGludGVsX2J3X3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRl LCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5V TEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShv YmosICZzdGF0ZS0+YmFzZSk7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMg dm9pZCBpbnRlbF9id19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwK KwkJCQkgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQoreworCWtmcmVlKHN0YXRl KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBpbnRl bF9id19mdW5jcyA9IHsKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2J3X2R1cGxp Y2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9id19kZXN0cm95X3N0 YXRlLAorfTsKKworaW50IGludGVsX2J3X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6 YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVy biAtRU5PTUVNOworCisJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KCZkZXZfcHJpdi0+ZHJt LCAmZGV2X3ByaXYtPmJ3X29iaiwKKwkJCQkgICAgJnN0YXRlLT5iYXNlLCAmaW50ZWxfYndfZnVu Y3MpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9idy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU5ZDljNmQ2M2JjMwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmgKQEAgLTAsMCArMSw0NyBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0lOVEVMX0JXX0hfXworI2RlZmlu ZSBfX0lOVEVMX0JXX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKworI2luY2x1 ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgorCitzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7CitzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZTsKKworc3RydWN0IGludGVsX2J3X3N0YXRlIHsKKwlzdHJ1Y3QgZHJtX3ByaXZh dGVfc3RhdGUgYmFzZTsKKworCXVuc2lnbmVkIGludCBkYXRhX3JhdGVbSTkxNV9NQVhfUElQRVNd OworCXU4IG51bV9hY3RpdmVfcGxhbmVzW0k5MTVfTUFYX1BJUEVTXTsKK307CisKKyNkZWZpbmUg dG9faW50ZWxfYndfc3RhdGUoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGludGVsX2J3X3N0 YXRlLCBiYXNlKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqCitpbnRl bF9hdG9taWNfZ2V0X2J3X3N0YXRlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmJh c2UuZGV2KTsKKwlzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKmJ3X3N0YXRlOworCisJYndfc3Rh dGUgPSBkcm1fYXRvbWljX2dldF9wcml2YXRlX29ial9zdGF0ZSgmc3RhdGUtPmJhc2UsCisJCQkJ CQkgICAgJmRldl9wcml2LT5id19vYmopOworCWlmIChJU19FUlIoYndfc3RhdGUpKQorCQlyZXR1 cm4gRVJSX0NBU1QoYndfc3RhdGUpOworCisJcmV0dXJuIHRvX2ludGVsX2J3X3N0YXRlKGJ3X3N0 YXRlKTsKK30KKwordm9pZCBpbnRlbF9id19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CitpbnQgaW50ZWxfYndfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOworaW50IGludGVsX2J3X2F0b21pY19jaGVjayhzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSk7Cit2b2lkIGludGVsX2J3X2NydGNfdXBkYXRlKHN0cnVjdCBpbnRlbF9i d19zdGF0ZSAqYndfc3RhdGUsCisJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKTsKKworI2VuZGlmIC8qIF9fSU5URUxfQldfSF9fICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMDEyYWQwOGYzOGMzLi45MDkxNzFkM2VjMjUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRl ICJpbnRlbF9hY3BpLmgiCiAjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCiAjaW5jbHVkZSAiaW50 ZWxfYXRvbWljX3BsYW5lLmgiCisjaW5jbHVkZSAiaW50ZWxfYncuaCIKICNpbmNsdWRlICJpbnRl bF9jb2xvci5oIgogI2luY2x1ZGUgImludGVsX2NkY2xrLmgiCiAjaW5jbHVkZSAiaW50ZWxfY3J0 LmgiCkBAIC0zMTU1LDYgKzMxNTYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV9kaXNhYmxl X25vYXRvbWljKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCiAJaW50ZWxfc2V0X3BsYW5lX3Zp c2libGUoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGZhbHNlKTsKIAlmaXh1cF9hY3RpdmVfcGxh bmVzKGNydGNfc3RhdGUpOworCWNydGNfc3RhdGUtPmRhdGFfcmF0ZVtwbGFuZS0+aWRdID0gMDsK IAogCWlmIChwbGFuZS0+aWQgPT0gUExBTkVfUFJJTUFSWSkKIAkJaW50ZWxfcHJlX2Rpc2FibGVf cHJpbWFyeV9ub2F0b21pYygmY3J0Yy0+YmFzZSk7CkBAIC02ODc5LDYgKzY4ODEsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfbm9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmRldik7CisJc3RydWN0IGludGVsX2J3X3N0YXRl ICpid19zdGF0ZSA9CisJCXRvX2ludGVsX2J3X3N0YXRlKGRldl9wcml2LT5id19vYmouc3RhdGUp OwogCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwogCXN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmU7CiAJdTY0IGRvbWFpbnM7CkBAIC02OTQxLDYgKzY5NDUsOSBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfbm9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCWRldl9wcml2LT5hY3RpdmVfY3J0Y3MgJj0gfigxIDw8IGludGVsX2NydGMtPnBpcGUpOwog CWRldl9wcml2LT5taW5fY2RjbGtbaW50ZWxfY3J0Yy0+cGlwZV0gPSAwOwogCWRldl9wcml2LT5t aW5fdm9sdGFnZV9sZXZlbFtpbnRlbF9jcnRjLT5waXBlXSA9IDA7CisKKwlid19zdGF0ZS0+ZGF0 YV9yYXRlW2ludGVsX2NydGMtPnBpcGVdID0gMDsKKwlid19zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFu ZXNbaW50ZWxfY3J0Yy0+cGlwZV0gPSAwOwogfQogCiAvKgpAQCAtMTEyODAsNiArMTEyODcsNyBA QCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NhbGNfY2hhbmdlcyhjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdAogCWlmICghaXNfY3J0Y19lbmFibGVkKSB7CiAJCXBs YW5lX3N0YXRlLT52aXNpYmxlID0gdmlzaWJsZSA9IGZhbHNlOwogCQl0b19pbnRlbF9jcnRjX3N0 YXRlKGNydGNfc3RhdGUpLT5hY3RpdmVfcGxhbmVzICY9IH5CSVQocGxhbmUtPmlkKTsKKwkJdG9f aW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZGF0YV9yYXRlW3BsYW5lLT5pZF0gPSAwOwog CX0KIAogCWlmICghd2FzX3Zpc2libGUgJiYgIXZpc2libGUpCkBAIC0xMzQwNiw3ICsxMzQxNCwx NSBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCQlyZXR1cm4gcmV0OwogCiAJaW50ZWxfZmJjX2Nob29zZV9jcnRjKGRldl9wcml2LCBpbnRl bF9zdGF0ZSk7Ci0JcmV0dXJuIGNhbGNfd2F0ZXJtYXJrX2RhdGEoaW50ZWxfc3RhdGUpOworCXJl dCA9IGNhbGNfd2F0ZXJtYXJrX2RhdGEoaW50ZWxfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXQgPSBpbnRlbF9id19hdG9taWNfY2hlY2soaW50ZWxfc3RhdGUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpbnRl bF9hdG9taWNfcHJlcGFyZV9jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKQEAgLTE1Nzg4 LDYgKzE1ODA0LDEwIEBAIGludCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKIAogCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7CiAKKwlyZXQgPSBpbnRlbF9id19p bml0KGRldl9wcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJZGV2LT5tb2RlX2Nv bmZpZy5taW5fd2lkdGggPSAwOwogCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7CiAK QEAgLTE2NDE2LDggKzE2NDM2LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfcmVhZG91 dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2VuZCgmY29ubl9pdGVyKTsKIAogCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7 CisJCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUgPQorCQkJdG9faW50ZWxfYndfc3Rh dGUoZGV2X3ByaXYtPmJ3X29iai5zdGF0ZSk7CiAJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlID0KIAkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7CisJ CXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7CiAJCWludCBtaW5fY2RjbGsgPSAwOwogCiAJCW1l bXNldCgmY3J0Yy0+YmFzZS5tb2RlLCAwLCBzaXplb2YoY3J0Yy0+YmFzZS5tb2RlKSk7CkBAIC0x NjQ1Niw2ICsxNjQ3OSwyMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdf c3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJZGV2X3ByaXYtPm1pbl92b2x0YWdlX2xl dmVsW2NydGMtPnBpcGVdID0KIAkJCWNydGNfc3RhdGUtPm1pbl92b2x0YWdlX2xldmVsOwogCisJ CWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMsIHBsYW5l KSB7CisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KKwkJ CQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7CisKKwkJCS8qCisJCQkg KiBGSVhNRSBkb24ndCBoYXZlIHRoZSBmYiB5ZXQsIHNvIGNhbid0CisJCQkgKiB1c2UgaW50ZWxf cGxhbmVfZGF0YV9yYXRlKCkgOigKKwkJCSAqLworCQkJaWYgKHBsYW5lX3N0YXRlLT5iYXNlLnZp c2libGUpCisJCQkJY3J0Y19zdGF0ZS0+ZGF0YV9yYXRlW3BsYW5lLT5pZF0gPQorCQkJCQk0ICog Y3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKKwkJfQorCisJCWludGVsX2J3X2NydGNfdXBkYXRlKGJ3 X3N0YXRlLCBjcnRjX3N0YXRlKTsKKwogCQlpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2so ZGV2X3ByaXYsIGNydGNfc3RhdGUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5k ZXggMGZiZGJlNTU5YjkyLi5mMzQxMDQyYjZjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o CkBAIC04ODUsNiArODg1LDggQEAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgewogCiAJc3RydWN0 IGludGVsX2NydGNfd21fc3RhdGUgd207CiAKKwl1MzIgZGF0YV9yYXRlW0k5MTVfTUFYX1BMQU5F U107CisKIAkvKiBHYW1tYSBtb2RlIHByb2dyYW1tZWQgb24gdGhlIHBpcGUgKi8KIAl1MzIgZ2Ft bWFfbW9kZTsKIAotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZng=