From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH v2 1/6] drm/i915: Calculate gen3- watermarks semi-atomically, v3. Date: Wed, 13 Sep 2017 10:40:19 +0200 Message-ID: <20170913084024.25501-2-maarten.lankhorst@linux.intel.com> References: <20170913084024.25501-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id B1A616E79E for ; Wed, 13 Sep 2017 08:40:30 +0000 (UTC) In-Reply-To: <20170913084024.25501-1-maarten.lankhorst@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 VGhlIGdlbjMgd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGF0b21pYywK YnV0IHRoZSB3bSB1cGRhdGUgY2FsbHMgYXJlIHN0aWxsIGRvbmUgdGhyb3VnaCB0aGUgbGVnYWN5 CmZ1bmN0aW9ucy4KClRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBiaXNlY3QgdGhpbmdzIGlm IHRoZXkgZ28gd3JvbmcuCgpDSSB3YXMgaGF2aW5nIGlzc3VlcyBvbiB0aGUga21zX2N1cnNvcl9s ZWdhY3kgdGVzdHMgd2l0aCB0b28KbXVjaCBkZWJ1ZyBpbmZvIHByaW50ZWQgb3V0LCBpbiBvcmRl ciB0byByZWR1Y2UgdGhlIGNoYXR0aW5lc3MKd2Ugd2lsbCBraWxsIHRoZSBwcmludHMgZnJvbSBp bnRlbF9jYWxjdWxhdGVfd20uCgpDaGFuZ2VzIHNpbmNlIHYxOgotIE5ldXRlciBpbnRlbF9jYWxj dWxhdGVfd20gc3BhbS4KQ2hhbmdlcyBzaW5jZSB2MjoKLSBDYWxjdWxhdGUgcGxhbmVfd20gZm9y IGdlbjIgY29ycmVjdGx5LiAoTWFoZXNoKQotIFNtYWxsIGZpeGVzIGZyb20gcmV2aWV3IGZlZWRi YWNrLiAoTWFoZXNoKQoKU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4u bGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAg ICB8ICAxNSArKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICB8IDIzNyAr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxNTYg aW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCmluZGV4IDUyNDIxN2Q2MjkyZS4uZjBlNWFiMmFjMmVlIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xNTE1Myw3ICsxNTE1Myw4IEBAIGludGVsX21vZGVzZXRf c2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJc2tsX3dtX2dldF9od19z dGF0ZShkZXYpOwogCX0gZWxzZSBpZiAoSEFTX1BDSF9TUExJVChkZXZfcHJpdikpIHsKIAkJaWxr X3dtX2dldF9od19zdGF0ZShkZXYpOwotCX0KKwl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPD0gMyAmJiAhSVNfUElORVZJRVcoZGV2X3ByaXYpKQorCQlpOXh4X3dtX2dldF9od19zdGF0 ZShkZXYpOwogCiAJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKIAkJdTY0IHB1dF9k b21haW5zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAzMDc4MDc2NzI4OTYuLjc4NTU0 ZjIzZTI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTU0OSw2ICs1NDksMTUgQEAg c3RydWN0IGc0eF93bV9zdGF0ZSB7CiAJYm9vbCBmYmNfZW47CiB9OwogCitzdHJ1Y3QgaTl4eF93 bV9zdGF0ZSB7CisJdWludDE2X3QgcGxhbmVfd207CisJYm9vbCBjeHNyOworCisJc3RydWN0IHsK KwkJdWludDE2X3QgcGxhbmVfd207CisJfSBzcjsKK307CisKIHN0cnVjdCBpbnRlbF9jcnRjX3dt X3N0YXRlIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC01OTMsNiArNjAyLDEwIEBAIHN0cnVj dCBpbnRlbF9jcnRjX3dtX3N0YXRlIHsKIAkJCS8qIG9wdGltYWwgd2F0ZXJtYXJrcyAqLwogCQkJ c3RydWN0IGc0eF93bV9zdGF0ZSBvcHRpbWFsOwogCQl9IGc0eDsKKworCQlzdHJ1Y3QgeworCQkJ c3RydWN0IGk5eHhfd21fc3RhdGUgb3B0aW1hbDsKKwkJfSBpOXh4OwogCX07CiAKIAkvKgpAQCAt ODI2LDYgKzgzOSw3IEBAIHN0cnVjdCBpbnRlbF9jcnRjIHsKIAkJCXN0cnVjdCBpbnRlbF9waXBl X3dtIGlsazsKIAkJCXN0cnVjdCB2bHZfd21fc3RhdGUgdmx2OwogCQkJc3RydWN0IGc0eF93bV9z dGF0ZSBnNHg7CisJCQlzdHJ1Y3QgaTl4eF93bV9zdGF0ZSBpOXh4OwogCQl9IGFjdGl2ZTsKIAl9 IHdtOwogCkBAIC0xODc3LDYgKzE4OTEsNyBAQCB2b2lkIGdlbjZfcnBzX2lkbGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycSwKIAkJICAgIHN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpy cHMpOwogdm9pZCBnNHhfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor dm9pZCBpOXh4X3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQg dmx2X3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaWxrX3dt X2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgc2tsX3dtX2dldF9o d19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmlu ZGV4IGZhOTA1NWE0Zjc5MC4uNmY3YmUwYTJiZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMK QEAgLTc3MSwxMCArNzcxLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9jYWxjdWxhdGVf d20oaW50IHBpeGVsX3JhdGUsCiAJCQkJICAgbGF0ZW5jeV9ucyAvIDEwMCk7CiAJZW50cmllcyA9 IERJVl9ST1VORF9VUChlbnRyaWVzLCB3bS0+Y2FjaGVsaW5lX3NpemUpICsKIAkJd20tPmd1YXJk X3NpemU7Ci0JRFJNX0RFQlVHX0tNUygiRklGTyBlbnRyaWVzIHJlcXVpcmVkIGZvciBtb2RlOiAl ZFxuIiwgZW50cmllcyk7CiAKIAl3bV9zaXplID0gZmlmb19zaXplIC0gZW50cmllczsKLQlEUk1f REVCVUdfS01TKCJGSUZPIHdhdGVybWFyayBsZXZlbDogJWRcbiIsIHdtX3NpemUpOwogCiAJLyog RG9uJ3QgcHJvbW90ZSB3bV9zaXplIHRvIHVuc2lnbmVkLi4uICovCiAJaWYgKHdtX3NpemUgPiB3 bS0+bWF4X3dtKQpAQCAtMjI0NCw4OSArMjI0MiwxNTYgQEAgc3RhdGljIHZvaWQgaTk2NV91cGRh dGVfd20oc3RydWN0IGludGVsX2NydGMgKnVudXNlZF9jcnRjKQogCiAjdW5kZWYgRldfV00KIAot c3RhdGljIHZvaWQgaTl4eF91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKnVudXNlZF9jcnRj KQorc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zICppOXh4X2dldF93 bV9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJCQkgICAgIHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUodW51c2VkX2NydGMtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3QgaW50 ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqd21faW5mbzsKLQl1aW50MzJfdCBmd2F0ZXJfbG87Ci0JdWlu dDMyX3QgZndhdGVyX2hpOwotCWludCBjd20sIHNyd20gPSAxOwotCWludCBmaWZvX3NpemU7Ci0J aW50IHBsYW5lYV93bSwgcGxhbmViX3dtOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLCAqZW5h YmxlZCA9IE5VTEw7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KGNydGMtPmJhc2UucHJpbWFyeSk7CiAKIAlpZiAoSVNfSTk0NUdNKGRldl9wcml2KSkKLQkJd21f aW5mbyA9ICZpOTQ1X3dtX2luZm87CisJCXJldHVybiAmaTk0NV93bV9pbmZvOwogCWVsc2UgaWYg KCFJU19HRU4yKGRldl9wcml2KSkKLQkJd21faW5mbyA9ICZpOTE1X3dtX2luZm87CisJCXJldHVy biAmaTkxNV93bV9pbmZvOworCWVsc2UgaWYgKHBsYW5lLT5wbGFuZSA9PSBQTEFORV9BKQorCQly ZXR1cm4gJmk4MzBfYV93bV9pbmZvOwogCWVsc2UKLQkJd21faW5mbyA9ICZpODMwX2Ffd21faW5m bzsKKwkJcmV0dXJuICZpODMwX2JjX3dtX2luZm87Cit9CiAKLQlmaWZvX3NpemUgPSBkZXZfcHJp di0+ZGlzcGxheS5nZXRfZmlmb19zaXplKGRldl9wcml2LCAwKTsKLQljcnRjID0gaW50ZWxfZ2V0 X2NydGNfZm9yX3BsYW5lKGRldl9wcml2LCAwKTsKLQlpZiAoaW50ZWxfY3J0Y19hY3RpdmUoY3J0 YykpIHsKLQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQot CQkJJmNydGMtPmNvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlOwotCQljb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9Ci0JCQljcnRjLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKLQkJ aW50IGNwcDsKK3N0YXRpYyBpbnQgaTl4eF9jb21wdXRlX3BpcGVfd20oc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19p bnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+ YmFzZS5zdGF0ZSk7CisJc3RydWN0IGk5eHhfd21fc3RhdGUgKndtX3N0YXRlID0gJmNydGNfc3Rh dGUtPndtLmk5eHgub3B0aW1hbDsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50 ZWxfcGxhbmUoY3J0Yy0+YmFzZS5wcmltYXJ5KTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSA9IE5VTEw7CisJaW50IGZpZm9fc2l6ZTsKKwljb25zdCBzdHJ1Y3Qg aW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqd21faW5mbzsKIAotCQlpZiAoSVNfR0VOMihkZXZfcHJp dikpCi0JCQljcHAgPSA0OwotCQllbHNlCi0JCQljcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07CisJ Zmlmb19zaXplID0gZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2ZpZm9fc2l6ZShkZXZfcHJpdiwgcGxh bmUtPnBsYW5lKTsKIAotCQlwbGFuZWFfd20gPSBpbnRlbF9jYWxjdWxhdGVfd20oYWRqdXN0ZWRf bW9kZS0+Y3J0Y19jbG9jaywKLQkJCQkJICAgICAgIHdtX2luZm8sIGZpZm9fc2l6ZSwgY3BwLAot CQkJCQkgICAgICAgcGVzc2ltYWxfbGF0ZW5jeV9ucyk7Ci0JCWVuYWJsZWQgPSBjcnRjOworCXdt X2luZm8gPSBpOXh4X2dldF93bV9pbmZvKGRldl9wcml2LCBjcnRjKTsKKworCXdtX3N0YXRlLT5j eHNyID0gZmFsc2U7CisJbWVtc2V0KCZ3bV9zdGF0ZS0+c3IsIDAsIHNpemVvZih3bV9zdGF0ZS0+ c3IpKTsKKworCWlmIChjcnRjX3N0YXRlLT5iYXNlLnBsYW5lX21hc2sgJiBCSVQoZHJtX3BsYW5l X2luZGV4KCZwbGFuZS0+YmFzZSkpKQorCQlwbGFuZV9zdGF0ZSA9IF9fZHJtX2F0b21pY19nZXRf Y3VycmVudF9wbGFuZV9zdGF0ZSgmc3RhdGUtPmJhc2UsICZwbGFuZS0+YmFzZSk7CisKKwlpZiAo IXBsYW5lX3N0YXRlIHx8ICFpbnRlbF93bV9wbGFuZV92aXNpYmxlKGNydGNfc3RhdGUsIHRvX2lu dGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKSkpIHsKKwkJd21fc3RhdGUtPnBsYW5lX3dtID0g Zmlmb19zaXplIC0gd21faW5mby0+Z3VhcmRfc2l6ZTsKKwkJaWYgKHdtX3N0YXRlLT5wbGFuZV93 bSA+IChsb25nKXdtX2luZm8tPm1heF93bSkKKwkJCXdtX3N0YXRlLT5wbGFuZV93bSA9IHdtX2lu Zm8tPm1heF93bTsKIAl9IGVsc2UgewotCQlwbGFuZWFfd20gPSBmaWZvX3NpemUgLSB3bV9pbmZv LT5ndWFyZF9zaXplOwotCQlpZiAocGxhbmVhX3dtID4gKGxvbmcpd21faW5mby0+bWF4X3dtKQot CQkJcGxhbmVhX3dtID0gd21faW5mby0+bWF4X3dtOworCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5mYjsKKwkJdW5zaWduZWQgY3BwID0gSVNfR0VOMihkZXZfcHJp dikgPyA0IDogZmItPmZvcm1hdC0+Y3BwWzBdOworCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYWRqdXN0ZWRfbW9kZSA9CisJCQkmY3J0Y19zdGF0ZS0+YmFzZS5hZGp1c3RlZF9tb2Rl OworCQl1bnNpZ25lZCBhY3RpdmVfY3J0Y3M7CisJCWJvb2wgbWF5X2N4c3IgPSBmYWxzZTsKKwor CQlpZiAoSEFTX0ZXX0JMQyhkZXZfcHJpdikpIHsKKwkJCWlmIChzdGF0ZS0+bW9kZXNldCkKKwkJ CQlhY3RpdmVfY3J0Y3MgPSBzdGF0ZS0+YWN0aXZlX2NydGNzOworCQkJZWxzZQorCQkJCWFjdGl2 ZV9jcnRjcyA9IGRldl9wcml2LT5hY3RpdmVfY3J0Y3M7CisKKwkJCS8qIEN4U1IgY2FuIG9ubHkg YmUgZW5hYmxlZCB3aGVuIGEgc2luZ2xlIENSVEMgaXMgZW5hYmxlZC4gKi8KKwkJCW1heV9jeHNy ID0gYWN0aXZlX2NydGNzID09IGRybV9jcnRjX21hc2soJmNydGMtPmJhc2UpOworCisJCQlpZiAo SVNfSTkxNUdNKGRldl9wcml2KSAmJiBpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQoaW50ZWxfZmJf b2JqKGZiKSkpCisJCQkJbWF5X2N4c3IgPSBmYWxzZTsKKwkJfQorCisJCXdtX3N0YXRlLT5wbGFu ZV93bSA9IGludGVsX2NhbGN1bGF0ZV93bShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLAorCQkJ CQkJCXdtX2luZm8sIGZpZm9fc2l6ZSwgY3BwLAorCQkJCQkJCXBlc3NpbWFsX2xhdGVuY3lfbnMp OworCisJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyAtIHBsYW5lIHdhdGVybWFya3M6 ICVkXG4iLCB3bV9zdGF0ZS0+cGxhbmVfd20pOworCisJCWlmIChtYXlfY3hzcikgeworCQkJc3Rh dGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gNjAwMDsKKwkJCXVuc2lnbmVkIGxvbmcgZW50 cmllczsKKworCQkJZW50cmllcyA9IGludGVsX3dtX21ldGhvZDIoYWRqdXN0ZWRfbW9kZS0+Y3J0 Y19jbG9jaywKKwkJCQkJCSAgIGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsLAorCQkJCQkJICAg Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfdywgY3BwLAorCQkJCQkJICAgc3JfbGF0ZW5jeV9ucyAvIDEw MCk7CisJCQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIHdtX2luZm8tPmNhY2hlbGlu ZV9zaXplKTsKKworCQkJRFJNX0RFQlVHX0tNUygic2VsZi1yZWZyZXNoIGVudHJpZXM6ICVsZFxu IiwgZW50cmllcyk7CisKKwkJCWlmICh3bV9pbmZvLT5maWZvX3NpemUgPj0gZW50cmllcykgewor CQkJCXdtX3N0YXRlLT5jeHNyID0gdHJ1ZTsKKwkJCQl3bV9zdGF0ZS0+c3IucGxhbmVfd20gPSB3 bV9pbmZvLT5maWZvX3NpemUgLSBlbnRyaWVzOworCQkJfQorCQl9CisKKwkJRFJNX0RFQlVHX0tN UygiRklGTyB3YXRlcm1hcmtzIC0gcGxhbmUgd2F0ZXJtYXJrczogJWQsIGNhbiBjeHNyOiAlcywg U1Igc2l6ZTogJWRcbiIsCisJCQkgICAgICB3bV9zdGF0ZS0+cGxhbmVfd20sIHllc25vKHdtX3N0 YXRlLT5jeHNyKSwgd21fc3RhdGUtPnNyLnBsYW5lX3dtKTsKIAl9CiAKLQlpZiAoSVNfR0VOMihk ZXZfcHJpdikpCi0JCXdtX2luZm8gPSAmaTgzMF9iY193bV9pbmZvOworCXJldHVybiAwOworfQog Ci0JZmlmb19zaXplID0gZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2ZpZm9fc2l6ZShkZXZfcHJpdiwg MSk7Ci0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9wbGFuZShkZXZfcHJpdiwgMSk7Ci0JaWYg KGludGVsX2NydGNfYWN0aXZlKGNydGMpKSB7Ci0JCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlID0KLQkJCSZjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9k ZTsKLQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPQotCQkJY3J0Yy0+YmFzZS5w cmltYXJ5LT5zdGF0ZS0+ZmI7Ci0JCWludCBjcHA7Cit2b2lkIGk5eHhfd21fZ2V0X2h3X3N0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOworCXVpbnQz Ml90IGZ3YXRlcl9sbywgcGxhbmVhX3dtLCBwbGFuZWJfd207CisKKwlmd2F0ZXJfbG8gPSBJOTE1 X1JFQUQoRldfQkxDKTsKKworCXBsYW5lYV93bSA9IGZ3YXRlcl9sbyAmIDB4M2Y7CisJcGxhbmVi X3dtID0gKGZ3YXRlcl9sbyA+PiAxNikgJiAweDNmOworCisJZm9yX2VhY2hfaW50ZWxfY3J0Yyhk ZXYsIGNydGMpIHsKKwkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSA9IHRvX2ludGVs X2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7CisJCXN0cnVjdCBpOXh4X3dtX3N0YXRlICp3 bV9zdGF0ZSA9ICZjc3RhdGUtPndtLmk5eHgub3B0aW1hbDsKKwkJc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7CisKKwkJbWVtc2V0 KCZ3bV9zdGF0ZS0+c3IsIDAsIHNpemVvZih3bV9zdGF0ZS0+c3IpKTsKKwkJd21fc3RhdGUtPmN4 c3IgPSBmYWxzZTsKIAotCQlpZiAoSVNfR0VOMihkZXZfcHJpdikpCi0JCQljcHAgPSA0OworCQlp ZiAocGxhbmUtPnBsYW5lID09IFBMQU5FX0EpCisJCQl3bV9zdGF0ZS0+cGxhbmVfd20gPSBwbGFu ZWFfd207CiAJCWVsc2UKLQkJCWNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKKwkJCXdtX3N0YXRl LT5wbGFuZV93bSA9IHBsYW5lYl93bTsKKworCQljcnRjLT53bS5hY3RpdmUuaTl4eCA9ICp3bV9z dGF0ZTsKKwl9Cit9CiAKLQkJcGxhbmViX3dtID0gaW50ZWxfY2FsY3VsYXRlX3dtKGFkanVzdGVk X21vZGUtPmNydGNfY2xvY2ssCi0JCQkJCSAgICAgICB3bV9pbmZvLCBmaWZvX3NpemUsIGNwcCwK LQkJCQkJICAgICAgIHBlc3NpbWFsX2xhdGVuY3lfbnMpOworc3RhdGljIHZvaWQgaTl4eF91cGRh dGVfd20oc3RydWN0IGludGVsX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJdWludDMyX3QgZndhdGVy X2xvOworCXVpbnQzMl90IGZ3YXRlcl9oaTsKKwlpbnQgY3dtLCBzcndtID0gLTE7CisJaW50IHBs YW5lYV93bSwgcGxhbmViX3dtOworCXN0cnVjdCBpbnRlbF9jcnRjICplbmFibGVkID0gTlVMTDsK KworCWNydGMtPndtLmFjdGl2ZS5pOXh4ID0gY3J0Yy0+Y29uZmlnLT53bS5pOXh4Lm9wdGltYWw7 CisKKwljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BsYW5lKGRldl9wcml2LCAwKTsKKwlwbGFu ZWFfd20gPSBjcnRjLT53bS5hY3RpdmUuaTl4eC5wbGFuZV93bTsKKwlpZiAoaW50ZWxfY3J0Y19h Y3RpdmUoY3J0YykpCisJCWVuYWJsZWQgPSBjcnRjOworCisJY3J0YyA9IGludGVsX2dldF9jcnRj X2Zvcl9wbGFuZShkZXZfcHJpdiwgMSk7CisJaWYgKGludGVsX2NydGNfYWN0aXZlKGNydGMpKSB7 CiAJCWlmIChlbmFibGVkID09IE5VTEwpCiAJCQllbmFibGVkID0gY3J0YzsKIAkJZWxzZQogCQkJ ZW5hYmxlZCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcGxhbmViX3dtID0gZmlmb19zaXplIC0gd21f aW5mby0+Z3VhcmRfc2l6ZTsKLQkJaWYgKHBsYW5lYl93bSA+IChsb25nKXdtX2luZm8tPm1heF93 bSkKLQkJCXBsYW5lYl93bSA9IHdtX2luZm8tPm1heF93bTsKIAl9CisJcGxhbmViX3dtID0gY3J0 Yy0+d20uYWN0aXZlLmk5eHgucGxhbmVfd207CiAKIAlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVy bWFya3MgLSBBOiAlZCwgQjogJWRcbiIsIHBsYW5lYV93bSwgcGxhbmViX3dtKTsKIAotCWlmIChJ U19JOTE1R00oZGV2X3ByaXYpICYmIGVuYWJsZWQpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKLQotCQlvYmogPSBpbnRlbF9mYl9vYmooZW5hYmxlZC0+YmFzZS5wcmltYXJ5 LT5zdGF0ZS0+ZmIpOwotCi0JCS8qIHNlbGYtcmVmcmVzaCBzZWVtcyBidXN0ZWQgd2l0aCB1bnRp bGVkICovCi0JCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKG9iaikpCi0JCQllbmFibGVk ID0gTlVMTDsKLQl9CisJaWYgKCFlbmFibGVkLT53bS5hY3RpdmUuaTl4eC5jeHNyKQorCQllbmFi bGVkID0gTlVMTDsKIAogCS8qCiAJICogT3ZlcmxheSBnZXRzIGFuIGFnZ3Jlc3NpdmUgZGVmYXVs dCBzaW5jZSB2aWRlbyBqaXR0ZXIgaXMgYmFkLgpAQCAtMjMzNywzMSArMjQwMiw4IEBAIHN0YXRp YyB2b2lkIGk5eHhfdXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICp1bnVzZWRfY3J0YykKIAlp bnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNlKTsKIAogCS8qIENhbGMgc3IgZW50 cmllcyBmb3Igb25lIHBsYW5lIGNvbmZpZ3MgKi8KLQlpZiAoSEFTX0ZXX0JMQyhkZXZfcHJpdikg JiYgZW5hYmxlZCkgewotCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kg Ki8KLQkJc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gNjAwMDsKLQkJY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQotCQkJJmVuYWJsZWQtPmNvbmZp Zy0+YmFzZS5hZGp1c3RlZF9tb2RlOwotCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9Ci0JCQllbmFibGVkLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKLQkJaW50IGNsb2NrID0g YWRqdXN0ZWRfbW9kZS0+Y3J0Y19jbG9jazsKLQkJaW50IGh0b3RhbCA9IGFkanVzdGVkX21vZGUt PmNydGNfaHRvdGFsOwotCQlpbnQgaGRpc3BsYXkgPSBlbmFibGVkLT5jb25maWctPnBpcGVfc3Jj X3c7Ci0JCWludCBjcHA7Ci0JCWludCBlbnRyaWVzOwotCi0JCWlmIChJU19JOTE1R00oZGV2X3By aXYpIHx8IElTX0k5NDVHTShkZXZfcHJpdikpCi0JCQljcHAgPSA0OwotCQllbHNlCi0JCQljcHAg PSBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0KLQkJZW50cmllcyA9IGludGVsX3dtX21ldGhvZDIoY2xv Y2ssIGh0b3RhbCwgaGRpc3BsYXksIGNwcCwKLQkJCQkJICAgc3JfbGF0ZW5jeV9ucyAvIDEwMCk7 Ci0JCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmllcywgd21faW5mby0+Y2FjaGVsaW5lX3Np emUpOwotCQlEUk1fREVCVUdfS01TKCJzZWxmLXJlZnJlc2ggZW50cmllczogJWRcbiIsIGVudHJp ZXMpOwotCQlzcndtID0gd21faW5mby0+Zmlmb19zaXplIC0gZW50cmllczsKLQkJaWYgKHNyd20g PCAwKQotCQkJc3J3bSA9IDE7CisJaWYgKGVuYWJsZWQgJiYgZW5hYmxlZC0+d20uYWN0aXZlLmk5 eHguY3hzcikgeworCQlzcndtID0gZW5hYmxlZC0+d20uYWN0aXZlLmk5eHguc3IucGxhbmVfd207 CiAKIAkJaWYgKElTX0k5NDVHKGRldl9wcml2KSB8fCBJU19JOTQ1R00oZGV2X3ByaXYpKQogCQkJ STkxNV9XUklURShGV19CTENfU0VMRiwKQEAgLTIzODcsMjMgKzI0MjksMTggQEAgc3RhdGljIHZv aWQgaTl4eF91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKnVudXNlZF9jcnRjKQogCQlpbnRl bF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIHRydWUpOwogfQogCi1zdGF0aWMgdm9pZCBpODQ1 X3VwZGF0ZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqdW51c2VkX2NydGMpCitzdGF0aWMgdm9pZCBp ODQ1X3VwZGF0ZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIHsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHVudXNlZF9jcnRjLT5iYXNlLmRldik7Ci0J c3RydWN0IGludGVsX2NydGMgKmNydGM7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGU7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7CiAJdWludDMyX3QgZndhdGVyX2xvOwogCWludCBwbGFuZWFf d207CiAKLQljcnRjID0gc2luZ2xlX2VuYWJsZWRfY3J0YyhkZXZfcHJpdik7Ci0JaWYgKGNydGMg PT0gTlVMTCkKKwlpZiAoIWludGVsX2NydGNfYWN0aXZlKGNydGMpKQogCQlyZXR1cm47CiAKLQlh ZGp1c3RlZF9tb2RlID0gJmNydGMtPmNvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlOwotCXBsYW5l YV93bSA9IGludGVsX2NhbGN1bGF0ZV93bShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLAotCQkJ CSAgICAgICAmaTg0NV93bV9pbmZvLAotCQkJCSAgICAgICBkZXZfcHJpdi0+ZGlzcGxheS5nZXRf Zmlmb19zaXplKGRldl9wcml2LCAwKSwKLQkJCQkgICAgICAgNCwgcGVzc2ltYWxfbGF0ZW5jeV9u cyk7CisJY3J0Yy0+d20uYWN0aXZlLmk5eHggPSBjcnRjLT5jb25maWctPndtLmk5eHgub3B0aW1h bDsKKwlwbGFuZWFfd20gPSBjcnRjLT53bS5hY3RpdmUuaTl4eC5wbGFuZV93bTsKKwogCWZ3YXRl cl9sbyA9IEk5MTVfUkVBRChGV19CTEMpICYgfjB4ZmZmOwogCWZ3YXRlcl9sbyB8PSAoMzw8OCkg fCBwbGFuZWFfd207CiAKQEAgLTkwMDMsOSArOTA0MCwxMyBAQCB2b2lkIGludGVsX2luaXRfcG0o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCX0gZWxzZSBpZiAoSVNfR0VONChk ZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTk2NV91cGRhdGVf d207CiAJfSBlbHNlIGlmIChJU19HRU4zKGRldl9wcml2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxh eS5jb21wdXRlX3BpcGVfd20gPSBpOXh4X2NvbXB1dGVfcGlwZV93bTsKIAkJZGV2X3ByaXYtPmRp c3BsYXkudXBkYXRlX3dtID0gaTl4eF91cGRhdGVfd207CisKIAkJZGV2X3ByaXYtPmRpc3BsYXku Z2V0X2ZpZm9fc2l6ZSA9IGk5eHhfZ2V0X2ZpZm9fc2l6ZTsKIAl9IGVsc2UgaWYgKElTX0dFTjIo ZGV2X3ByaXYpKSB7CisJCWRldl9wcml2LT5kaXNwbGF5LmNvbXB1dGVfcGlwZV93bSA9IGk5eHhf Y29tcHV0ZV9waXBlX3dtOworCiAJCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+bnVtX3BpcGVz ID09IDEpIHsKIAkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGk4NDVfdXBkYXRlX3dt OwogCQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2ZpZm9fc2l6ZSA9IGk4NDVfZ2V0X2ZpZm9fc2l6 ZTsKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==