From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mahesh Kumar Subject: [PATCH 3/3] drm/i915/gen9: WM memory bandwidth related workaround Date: Wed, 1 Feb 2017 14:54:44 +0530 Message-ID: <20170201092444.15414-1-mahesh1.kumar@intel.com> References: <201702010236.HxL3QyRD%fengguang.wu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 627146E2FD for ; Wed, 1 Feb 2017 09:22:28 +0000 (UTC) In-Reply-To: <201702010236.HxL3QyRD%fengguang.wu@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 VGhpcyBwYXRjaCBlbmFibGVzIHdvcmthcm91bmRzIHJlbGF0ZWQgdG8gZGlzcGxheSBhcmJpdHJh dGVkIG1lbW9yeQpiYW5kd2lkdGggb25seSBpZiBpdCdzIG5lY2Vzc2FyeS4gV0EncyBhcmUgYXBw bGljYWJsZSBmb3IgYWxsIEdFTjkKYmFzZWQgcGxhdGZvcm1zLgoKQ2hhbmdlcyBzaW5jZSB2MToK IC0gUmViYXNlIG9uIHRvcCBvZiBQYXVsbydzIHBhdGNoIHNlcmllcwpDaGFuZ2VzIHNpbmNlIHYy OgogLSBBZGRyZXNzIHJldmlldyBjb21tZW50cwogLSBSZWJhc2UvcmV3b3JrIGFzIHBlciBvdGhl ciBwYXRjaCBjaGFuZ2VzIGluIHNlcmllcwpDaGFuZ2VzIHNpbmNlIHYzOgogLSBSZWJhc2UgdGhl IHBhdGNoCiAtIEFkZHJlc3MgUGF1bG8ncyByZXZpZXcgY29tbWVudHMKIC0gaW50cm9kdWNlIHd3 X211dGV4IHRvIHByb3RlY3QgV00gb3BlcmF0aW9ucwogLSBQcm90ZWN0IHN5c3RlbSBtZW1vcnkg YmFuZHdpZHRoIGNhbGN1bGF0aW9uIHdpdGggd3dfbXV0ZXgKQ2hhbmdlcyBzaW5jZSB2NDoKIC0g ZHJvcCBnb3RvIGxhYmVsCiAtIGZpeCBjb21waWxhdGlvbiB3YXJuaW5nCgpTaWduZWQtb2ZmLWJ5 OiBNYWhlc2ggS3VtYXIgPG1haGVzaDEua3VtYXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oICAgICAgfCAgMTUgKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jIHwgIDM0ICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAg ICAgfCAxNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIDQgZmlsZXMgY2hh bmdlZCwgMTkyIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCmluZGV4IGI4ZDBkZDI4MTFhOS4uYTE0YjJhOWQyZTZhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKQEAgLTgxNCw2ICs4MTQsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRf ZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCW11dGV4X2luaXQoJmRl dl9wcml2LT5tb2Rlc2V0X3Jlc3RvcmVfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmF2 X211dGV4KTsKIAltdXRleF9pbml0KCZkZXZfcHJpdi0+d20ud21fbXV0ZXgpOworCWRybV9tb2Rl c2V0X2xvY2tfaW5pdCgmZGV2X3ByaXYtPndtLndtX3d3X211dGV4KTsKIAltdXRleF9pbml0KCZk ZXZfcHJpdi0+cHBzX211dGV4KTsKIAogCWludGVsX3VjX2luaXRfZWFybHkoZGV2X3ByaXYpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZGYyNGRlMmI2NWYyLi42ZTVjZGQ2YzlkZmQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTE3NCw2ICsxMTc0LDEzIEBAIGVudW0gaW50ZWxf c2JpX2Rlc3RpbmF0aW9uIHsKIAlTQklfTVBIWSwKIH07CiAKKy8qIFNLTCsgV2F0ZXJtYXJrIGFy Yml0cmF0ZWQgZGlzcGxheSBiYW5kd2lkdGggV29ya2Fyb3VuZHMgKi8KK2VudW0gd2F0ZXJtYXJr X21lbW9yeV93YSB7CisJV0FURVJNQVJLX1dBX05PTkUsCisJV0FURVJNQVJLX1dBX1hfVElMRUQs CisJV0FURVJNQVJLX1dBX1lfVElMRUQsCit9OworCiAjZGVmaW5lIFFVSVJLX1BJUEVBX0ZPUkNF ICgxPDwwKQogI2RlZmluZSBRVUlSS19MVkRTX1NTQ19ESVNBQkxFICgxPDwxKQogI2RlZmluZSBR VUlSS19JTlZFUlRfQlJJR0hUTkVTUyAoMTw8MikKQEAgLTE3NDQsOCArMTc1MSwxNSBAQCBzdHJ1 Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSB5X3BsYW5lW0k5 MTVfTUFYX1BJUEVTXVtJOTE1X01BWF9QTEFORVNdOwogfTsKIAorc3RydWN0IHNrbF9tZW1fYndf YXR0ciB7CisJZW51bSB3YXRlcm1hcmtfbWVtb3J5X3dhIG1lbV93YTsKKwl1aW50MzJfdCBwaXBl X2J3X2ticHNbSTkxNV9NQVhfUElQRVNdOworCWJvb2wgcGlwZV95X3RpbGVkW0k5MTVfTUFYX1BJ UEVTXTsKK307CisKIHN0cnVjdCBza2xfd21fdmFsdWVzIHsKIAl1bnNpZ25lZCBkaXJ0eV9waXBl czsKKwlzdHJ1Y3Qgc2tsX21lbV9id19hdHRyIG1lbV9hdHRyOwogCXN0cnVjdCBza2xfZGRiX2Fs bG9jYXRpb24gZGRiOwogfTsKIApAQCAtMjM0OCw2ICsyMzYyLDcgQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewogCQkgKiBjc3RhdGUtPndtLm5lZWRfcG9zdHZibF91cGRhdGUuCiAJCSAqLwog CQlzdHJ1Y3QgbXV0ZXggd21fbXV0ZXg7CisJCXN0cnVjdCBkcm1fbW9kZXNldF9sb2NrIHdtX3d3 X211dGV4OyAvKiBwcm90ZWN0IEREQi9XTSByZWRpc3RyaWJ1dGlvbiBhbW9uZyBwaXBlcyAqLwog CiAJCS8qCiAJCSAqIFNldCBkdXJpbmcgSFcgcmVhZG91dCBvZiB3YXRlcm1hcmtzL0REQi4gIFNv bWUgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMWFhNzA4 YjZmNTVlLi5kZTUxMmJkODEzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK QEAgLTE0NTg5LDYgKzE0NTg5LDM4IEBAIHN0YXRpYyB2b2lkIGludGVsX2F0b21pY190cmFja19m YnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQkJCSAgdG9faW50ZWxfcGxhbmUo cGxhbmUpLT5mcm9udGJ1ZmZlcl9iaXQpOwogfQogCitzdGF0aWMgdm9pZAoraW50ZWxfdXBkYXRl X3dtX2J3X3dhKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50 ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0 ZSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJY29uc3Qgc3RydWN0IGRybV9j cnRjX3N0YXRlICpjc3RhdGU7CisJY29uc3Qgc3RydWN0IG1lbWRldl9pbmZvICptZW1kZXZfaW5m byA9ICZkZXZfcHJpdi0+bWVtZGV2X2luZm87CisJc3RydWN0IHNrbF9tZW1fYndfYXR0ciAqcmVz dWx0cyA9ICZpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fYXR0cjsKKwlzdHJ1Y3Qgc2tsX21l bV9id19hdHRyICpod192YWxzID0gJmRldl9wcml2LT53bS5za2xfaHcubWVtX2F0dHI7CisJaW50 IGk7CisKKwlpZiAoIUlTX0dFTjkoZGV2X3ByaXYpKQorCQlyZXR1cm47CisKKwlpZiAoIW1lbWRl dl9pbmZvLT52YWxpZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0 ZSwgY3J0YywgY3N0YXRlLCBpKSB7CisJCWh3X3ZhbHMtPnBpcGVfYndfa2Jwc1tpXSA9IHJlc3Vs dHMtPnBpcGVfYndfa2Jwc1tpXTsKKwkJaHdfdmFscy0+cGlwZV95X3RpbGVkW2ldID0gcmVzdWx0 cy0+cGlwZV95X3RpbGVkW2ldOworCX0KKworCWh3X3ZhbHMtPm1lbV93YSA9IHJlc3VsdHMtPm1l bV93YTsKKworCS8qCisJICogQXMgd2UgYWxyZWFkeSB1cGRhdGVkIHN0YXRlIHZhcmlhYmxlcyBu byBuZWVkIHRvIGhvbGQgdGhlIGxvY2ssCisJICogb3RoZXIgY29tbWl0cyBjYW4gcHJvY2VlZCBu b3cgd2l0aCB0aGVpciBjYWxjdWxhdGlvbgorCSAqLworCWRybV9tb2Rlc2V0X3VubG9jaygmZGV2 X3ByaXYtPndtLndtX3d3X211dGV4KTsKK30KKwogLyoqCiAgKiBpbnRlbF9hdG9taWNfY29tbWl0 IC0gY29tbWl0IHZhbGlkYXRlZCBzdGF0ZSBvYmplY3QKICAqIEBkZXY6IERSTSBkZXZpY2UKQEAg LTE0NjI5LDYgKzE0NjYxLDggQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAJaW50ZWxfc2hhcmVkX2RwbGxfc3dhcF9zdGF0ZShzdGF0ZSk7 CiAJaW50ZWxfYXRvbWljX3RyYWNrX2ZicyhzdGF0ZSk7CiAKKwlpbnRlbF91cGRhdGVfd21fYndf d2Eoc3RhdGUpOworCiAJaWYgKGludGVsX3N0YXRlLT5tb2Rlc2V0KSB7CiAJCW1lbWNweShkZXZf cHJpdi0+bWluX3BpeGNsaywgaW50ZWxfc3RhdGUtPm1pbl9waXhjbGssCiAJCSAgICAgICBzaXpl b2YoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGspKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4 IDE2ZTgzZWZhMTExOC4uYWE3NTU1OGVkZjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAg LTI4ODcsMjAgKzI4ODcsNiBAQCBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCiAKICNkZWZpbmUgU0tMX1NBR1ZfQkxPQ0tfVElNRQkzMCAvKiDCtXMgKi8KIAot LyoKLSAqIEZJWE1FOiBXZSBzdGlsbCBkb24ndCBoYXZlIHRoZSBwcm9wZXIgY29kZSBkZXRlY3Qg aWYgd2UgbmVlZCB0byBhcHBseSB0aGUgV0EsCi0gKiBzbyBhc3N1bWUgd2UnbGwgYWx3YXlzIG5l ZWQgaXQgaW4gb3JkZXIgdG8gYXZvaWQgdW5kZXJydW5zLgotICovCi1zdGF0aWMgYm9vbCBza2xf bmVlZHNfbWVtb3J5X2J3X3dhKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQotewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmJhc2Uu ZGV2KTsKLQotCWlmIChJU19HRU45X0JDKGRldl9wcml2KSB8fCBJU19CUk9YVE9OKGRldl9wcml2 KSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sCiBp bnRlbF9oYXNfc2FndihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CkBAIC0z MDQ5LDcgKzMwMzQsOCBAQCBib29sIGludGVsX2Nhbl9lbmFibGVfc2FndihzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCiAKIAkJbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5j eVtsZXZlbF07CiAKLQkJaWYgKHNrbF9uZWVkc19tZW1vcnlfYndfd2EoaW50ZWxfc3RhdGUpICYm CisJCWlmIChpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fYXR0ci5tZW1fd2EgIT0KKwkJICAg IFdBVEVSTUFSS19XQV9OT05FICYmCiAJCSAgICBwbGFuZS0+YmFzZS5zdGF0ZS0+ZmItPm1vZGlm aWVyID09CiAJCSAgICBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKIAkJCWxhdGVuY3kgKz0gMTU7 CkBAIC0zNTgxLDcgKzM1NjcsNyBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl1aW50MzJfdCB5X21pbl9z Y2FubGluZXM7CiAJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQogCQl0b19pbnRl bF9hdG9taWNfc3RhdGUoY3N0YXRlLT5iYXNlLnN0YXRlKTsKLQlib29sIGFwcGx5X21lbW9yeV9i d193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUpOworCWVudW0gd2F0ZXJtYXJrX21l bW9yeV93YSBtZW1fd2E7CiAJYm9vbCB5X3RpbGVkLCB4X3RpbGVkOwogCiAJaWYgKGxhdGVuY3kg PT0gMCB8fCAhY3N0YXRlLT5iYXNlLmFjdGl2ZSB8fCAhaW50ZWxfcHN0YXRlLT5iYXNlLnZpc2li bGUpIHsKQEAgLTM1OTcsNyArMzU4Myw4IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVf d20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCWlmIChJU19LQUJZ TEFLRShkZXZfcHJpdikgJiYgZGV2X3ByaXYtPmlwY19lbmFibGVkKQogCQlsYXRlbmN5ICs9IDQ7 CiAKLQlpZiAoYXBwbHlfbWVtb3J5X2J3X3dhICYmIHhfdGlsZWQpCisJbWVtX3dhID0gc3RhdGUt PndtX3Jlc3VsdHMubWVtX2F0dHIubWVtX3dhOworCWlmIChtZW1fd2EgIT0gV0FURVJNQVJLX1dB X05PTkUgJiYgeF90aWxlZCkKIAkJbGF0ZW5jeSArPSAxNTsKIAogCXdpZHRoID0gZHJtX3JlY3Rf d2lkdGgoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2OwpAQCAtMzYzMiw3ICszNjE5LDcg QEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXlfbWluX3NjYW5saW5lcyA9IDQ7CiAJfQogCi0JaWYgKGFw cGx5X21lbW9yeV9id193YSkKKwlpZiAobWVtX3dhID09IFdBVEVSTUFSS19XQV9ZX1RJTEVEKQog CQl5X21pbl9zY2FubGluZXMgKj0gMjsKIAogCXBsYW5lX2J5dGVzX3Blcl9saW5lID0gd2lkdGgg KiBjcHA7CkBAIC00MDYxLDYgKzQwNDgsMTYgQEAgc2tsX2NvbXB1dGVfZGRiKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKIAl9CiAKIAkvKgorCSAqIElmIFdhdGVybWFyayB3b3JrYXJv dW5kIGlzIGNoYW5nZWQgd2UgbmVlZCB0byByZWNhbGN1bGF0ZQorCSAqIHdhdGVybWFyayB2YWx1 ZXMgZm9yIGFsbCBhY3RpdmUgcGlwZXMKKwkgKi8KKwlpZiAoaW50ZWxfc3RhdGUtPndtX3Jlc3Vs dHMubWVtX2F0dHIubWVtX3dhICE9CisJCQkJZGV2X3ByaXYtPndtLnNrbF9ody5tZW1fYXR0ci5t ZW1fd2EpIHsKKwkJcmVhbGxvY19waXBlcyA9IH4wOworCQlpbnRlbF9zdGF0ZS0+d21fcmVzdWx0 cy5kaXJ0eV9waXBlcyA9IH4wOworCX0KKworCS8qCiAJICogV2UncmUgbm90IHJlY29tcHV0aW5n IGZvciB0aGUgcGlwZXMgbm90IGluY2x1ZGVkIGluIHRoZSBjb21taXQsIHNvCiAJICogbWFrZSBz dXJlIHdlIHN0YXJ0IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuCiAJICovCkBAIC00MDg1LDYgKzQw ODIsMTI4IEBAIHNrbF9jb21wdXRlX2RkYihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK3NrbF9jb21wdXRlX21lbW9yeV9iYW5kd2lk dGhfd21fd2Eoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9z dGF0ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7CisJc3RydWN0IG1lbWRldl9pbmZv ICptZW1kZXZfaW5mbyA9ICZkZXZfcHJpdi0+bWVtZGV2X2luZm87CisJc3RydWN0IHNrbF9tZW1f YndfYXR0ciAqbWVtX2F0dHIgPSAmaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMubWVtX2F0dHI7CisJ c3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwor CWludCBhY3RpdmVfcGlwZXMgPSAwOworCXVpbnQzMl90IG1heF9waXBlX2J3X2ticHMgPSAwLCB0 b3RhbF9waXBlX2J3X2ticHM7CisJaW50IGRpc3BsYXlfYndfcGVyY2VudGFnZTsKKwlib29sIHlf dGlsZV9lbmFibGVkID0gZmFsc2U7CisJaW50IHJldCwgaTsKKworCWlmICghSVNfR0VOOShkZXZf cHJpdikpIHsKKwkJbWVtX2F0dHItPm1lbV93YSA9IFdBVEVSTUFSS19XQV9OT05FOworCQlyZXR1 cm4gMDsKKwl9CisKKwlpZiAoIW1lbWRldl9pbmZvLT52YWxpZCkgeworCQltZW1fYXR0ci0+bWVt X3dhID0gV0FURVJNQVJLX1dBX1lfVElMRUQ7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICog V2UgaG9sZCB3bV9tdXRleCBsb2NrLCBzbyBhbnkgb3RoZXIgZmxpcCBjYW4ndCBwcm9jZWVkIGJl eW9uZCBXTQorCSAqIGNhbGN1bGF0aW9uIHN0ZXAgdW50aWwgdGhpcyBmbGlwIHdyaXRlcyBtb2Rp ZmllZCBXTSB2YWx1ZXMuCisJICogU28gaXQncyBzYWZlIHRvIHJlYWQgcGxhbmVfc3RhdGUgb2Yg b3RoZXIgcGlwZXMgd2l0aG91dCB0YWtpbmcgQ1JUQyBsb2NrCisJICovCisJcmV0ID0gZHJtX21v ZGVzZXRfbG9jaygmZGV2X3ByaXYtPndtLndtX3d3X211dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1jcHkobWVtX2F0dHIsICZkZXZfcHJp di0+d20uc2tsX2h3Lm1lbV9hdHRyLCBzaXplb2YoKm1lbV9hdHRyKSk7CisKKwlmb3JfZWFjaF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkpIHsKKwkJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmU7CisJCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKKwkJaW50 IGFjdGl2ZV9wbGFuZXMgPSAwOworCQl1aW50MzJfdCBtYXhfcGxhbmVfYndfa2JwcyA9IDA7CisK KwkJbWVtX2F0dHItPnBpcGVfeV90aWxlZFtpXSA9IGZhbHNlOworCisJCWlmICghY3N0YXRlLT5h Y3RpdmUpIHsKKwkJCW1lbV9hdHRyLT5waXBlX2J3X2ticHNbaV0gPSAwOworCQkJY29udGludWU7 CisJCX0KKworCQlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmVfc3RhdGUocGxh bmUsIHBzdGF0ZSwKKwkJCQkJCQkJY3N0YXRlKSB7CisJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYjsKKwkJCXVpbnQzMl90IHBsYW5lX2J3X2ticHM7CisJCQllbnVtIHBsYW5lX2lkIGlkID0g dG9faW50ZWxfcGxhbmUocGxhbmUpLT5pZDsKKworCQkJaWYgKCFwc3RhdGUtPnZpc2libGUpCisJ CQkJY29udGludWU7CisKKwkJCWlmIChXQVJOX09OKCFwc3RhdGUtPmZiKSkKKwkJCQljb250aW51 ZTsKKworCQkJaWYgKGlkID09IFBMQU5FX0NVUlNPUikKKwkJCQljb250aW51ZTsKKworCQkJZmIg PSBwc3RhdGUtPmZiOworCQkJaWYgKChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQgfHwKKwkJCQlmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSkK KwkJCQltZW1fYXR0ci0+cGlwZV95X3RpbGVkW2ldID0gdHJ1ZTsKKworCQkJcGxhbmVfYndfa2Jw cyA9IHNrbF9hZGp1c3RlZF9wbGFuZV9waXhlbF9yYXRlKAorCQkJCQkJdG9faW50ZWxfY3J0Y19z dGF0ZShjc3RhdGUpLAorCQkJCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKSk7CisJCQlt YXhfcGxhbmVfYndfa2JwcyA9IG1heChwbGFuZV9id19rYnBzLAorCQkJCQkJCW1heF9wbGFuZV9i d19rYnBzKTsKKwkJCWFjdGl2ZV9wbGFuZXMrKzsKKwkJfQorCQltZW1fYXR0ci0+cGlwZV9id19r YnBzW2ldID0gbWF4X3BsYW5lX2J3X2ticHMgKiBhY3RpdmVfcGxhbmVzOworCX0KKworCWZvcl9l YWNoX3BpcGUoZGV2X3ByaXYsIGkpIHsKKwkJaWYgKG1lbV9hdHRyLT5waXBlX2J3X2ticHNbaV0p IHsKKwkJCW1heF9waXBlX2J3X2ticHMgPSBtYXgobWF4X3BpcGVfYndfa2JwcywKKwkJCQkJbWVt X2F0dHItPnBpcGVfYndfa2Jwc1tpXSk7CisJCQlhY3RpdmVfcGlwZXMrKzsKKwkJfQorCQlpZiAo bWVtX2F0dHItPnBpcGVfeV90aWxlZFtpXSkKKwkJCXlfdGlsZV9lbmFibGVkID0gdHJ1ZTsKKwl9 CisKKwl0b3RhbF9waXBlX2J3X2ticHMgPSBtYXhfcGlwZV9id19rYnBzICogYWN0aXZlX3BpcGVz OworCWRpc3BsYXlfYndfcGVyY2VudGFnZSA9IERJVl9ST1VORF9VUF9VTEwoKHVpbnQ2NF90KXRv dGFsX3BpcGVfYndfa2JwcyAqCisJCQkJCTEwMCwgbWVtZGV2X2luZm8tPmJhbmR3aWR0aF9rYnBz KTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYW55IFl0aWxlIHBsYW5lIGVuYWJsZWQgYW5kIGFy Yml0cmF0ZWQgZGlzcGxheQorCSAqIGJhbmR3aWR0aCA+IDIwJSBvZiByYXcgc3lzdGVtIG1lbW9y eSBiYW5kd2lkdGgKKwkgKiBFbmFsZSBZLXRpbGUgcmVsYXRlZCBXQQorCSAqCisJICogSWYgbWVt b3J5IGlzIGR1YWwgY2hhbm5lbCBzaW5nbGUgcmFuaywgWHRpbGUgbGltaXQgPSAzNSUsIGVsc2Ug WHRpbGUKKwkgKiBsaW1pdCA9IDYwJQorCSAqIElmIHRoZXJlIGlzIG5vIFl0aWxlIHBsYW5lIGVu YWJsZWQgYW5kCisJICogYXJiaXRyYXRlZCBkaXNwbGF5IGJhbmR3aWR0aCA+IFh0aWxlIGxpbWl0 CisJICogRW5hYmxlIFgtdGlsZSByZWFsYXRlZCBXQQorCSAqLworCWlmICh5X3RpbGVfZW5hYmxl ZCAmJiAoZGlzcGxheV9id19wZXJjZW50YWdlID4gMjApKQorCQltZW1fYXR0ci0+bWVtX3dhID0g V0FURVJNQVJLX1dBX1lfVElMRUQ7CisJZWxzZSB7CisJCWludCB4X3RpbGVfcGVyY2VudGFnZSA9 IDYwOworCQllbnVtIHJhbmsgcmFuayA9IG1lbWRldl9pbmZvLT5yYW5rOworCisJCWlmICgocmFu ayA9PSBJOTE1X0RSQU1fUkFOS19TSU5HTEUpICYmCisJCQkJCShtZW1kZXZfaW5mby0+bnVtX2No YW5uZWxzID09IDIpKQorCQkJeF90aWxlX3BlcmNlbnRhZ2UgPSAzNTsKKworCQlpZiAoZGlzcGxh eV9id19wZXJjZW50YWdlID4geF90aWxlX3BlcmNlbnRhZ2UpCisJCQltZW1fYXR0ci0+bWVtX3dh ID0gV0FURVJNQVJLX1dBX1hfVElMRUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2 b2lkCiBza2xfY29weV93bV9mb3JfcGlwZShzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyAqZHN0LAogCQkg ICAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpzcmMsCkBAIC00MTYwLDYgKzQyNzksMTAgQEAgc2ts X2NvbXB1dGVfd20oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCS8qIENsZWFyIGFs bCBkaXJ0eSBmbGFncyAqLwogCXJlc3VsdHMtPmRpcnR5X3BpcGVzID0gMDsKIAorCXJldCA9IHNr bF9jb21wdXRlX21lbW9yeV9iYW5kd2lkdGhfd21fd2Eoc3RhdGUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKIAlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3RhdGUpOwogCWlmIChyZXQpCiAJ CXJldHVybiByZXQ7Ci0tIAoyLjExLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=