From: Lyude Subject: [PATCH v3 03/10] drm/i915/gen9: Make skl_wm_level per-plane Date: Fri, 14 Oct 2016 17:31:51 -0400 Message-ID: <1476480722-13015-4-git-send-email-cpaul@redhat.com> References: <1476480722-13015-1-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1476480722-13015-1-git-send-email-cpaul@redhat.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 Cc: Paulo Zanoni , David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org SGF2aW5nIHNrbF93bV9sZXZlbCBjb250YWluIGFsbCBvZiB0aGUgd2F0ZXJtYXJrcyBmb3IgZWFj aCBwbGFuZSBpcwphbm5veWluZyBzaW5jZSBpdCBwcmV2ZW50cyB1cyBmcm9tIGhhdmluZyBhbnkg c29ydCBvZiBvYmplY3QgdG8KcmVwcmVzZW50IGEgc2luZ2xlIHdhdGVybWFyayBsZXZlbCwgc29t ZXRoaW5nIHdlIHRha2UgYWR2YW50YWdlIG9mIGluCnRoZSBuZXh0IGNvbW1pdCB0byBjdXQgZG93 biBvbiBhbGwgb2YgdGhlIGNvcHkgcGFzdGUgY29kZSBpbiBoZXJlLgoKQ2hhbmdlcyBzaW5jZSB2 MToKLSBTdHlsZSBuaXRwaWNrcwotIEZpeCBhY2NpZGVudGFsIHVzYWdlIG9mIGkgdnMuIFBMQU5F X0NVUlNPUgotIFNwbGl0IG91dCBza2xfcGlwZV93bV9hY3RpdmVfc3RhdGUgc2ltcGxpZmljYXRp b24gaW50byBzZXBlcmF0ZSBwYXRjaAoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGNwYXVsQHJlZGhh dC5jb20+ClJldmlld2VkLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNv bT4KUmV2aWV3ZWQtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgpDYzogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbQpDYzogUGF1 bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICB8IDIwNyArKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTEx IGluc2VydGlvbnMoKyksIDEwOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApp bmRleCBlNTZkNGE0Li40ZDExMzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE2NTMs OSArMTY1Myw5IEBAIHN0cnVjdCBza2xfd21fdmFsdWVzIHsKIH07CiAKIHN0cnVjdCBza2xfd21f bGV2ZWwgewotCWJvb2wgcGxhbmVfZW5bSTkxNV9NQVhfUExBTkVTXTsKLQl1aW50MTZfdCBwbGFu ZV9yZXNfYltJOTE1X01BWF9QTEFORVNdOwotCXVpbnQ4X3QgcGxhbmVfcmVzX2xbSTkxNV9NQVhf UExBTkVTXTsKKwlib29sIHBsYW5lX2VuOworCXVpbnQxNl90IHBsYW5lX3Jlc19iOworCXVpbnQ4 X3QgcGxhbmVfcmVzX2w7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAx MGEwY2YyLi44NDMwMWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtNDY4LDkgKzQ2 OCwxMyBAQCBzdHJ1Y3QgaW50ZWxfcGlwZV93bSB7CiAJYm9vbCBzcHJpdGVzX3NjYWxlZDsKIH07 CiAKLXN0cnVjdCBza2xfcGlwZV93bSB7CitzdHJ1Y3Qgc2tsX3BsYW5lX3dtIHsKIAlzdHJ1Y3Qg c2tsX3dtX2xldmVsIHdtWzhdOwogCXN0cnVjdCBza2xfd21fbGV2ZWwgdHJhbnNfd207Cit9Owor CitzdHJ1Y3Qgc2tsX3BpcGVfd20geworCXN0cnVjdCBza2xfcGxhbmVfd20gcGxhbmVzW0k5MTVf TUFYX1BMQU5FU107CiAJdWludDMyX3QgbGluZXRpbWU7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwppbmRleCBhN2Q1NzIxLi4xYmRjY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAg LTM2NzQsNjcgKzM2NzQsNTIgQEAgc3RhdGljIGludAogc2tsX2NvbXB1dGVfd21fbGV2ZWwoY29u c3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgIHN0cnVjdCBza2xf ZGRiX2FsbG9jYXRpb24gKmRkYiwKIAkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0 YXRlLAorCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUsCiAJCSAgICAgaW50 IGxldmVsLAogCQkgICAgIHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdCkKIHsKIAlzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUtPmJhc2Uuc3RhdGU7CiAJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNzdGF0ZS0+YmFzZS5jcnRjKTsK LQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3Bs YW5lOwotCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRlOworCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gJmludGVsX3BsYW5lLT5iYXNlOworCXN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqaW50ZWxfcHN0YXRlID0gTlVMTDsKIAl1aW50MTZfdCBkZGJfYmxvY2tzOwogCWVu dW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKIAlpbnQgcmV0OworCWludCBpID0gc2ts X3dtX3BsYW5lX2lkKGludGVsX3BsYW5lKTsKKworCWlmIChzdGF0ZSkKKwkJaW50ZWxfcHN0YXRl ID0KKwkJCWludGVsX2F0b21pY19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoc3RhdGUsCisJCQkJ CQkJICAgICAgaW50ZWxfcGxhbmUpOwogCiAJLyoKLQkgKiBXZSdsbCBvbmx5IGNhbGN1bGF0ZSB3 YXRlcm1hcmtzIGZvciBwbGFuZXMgdGhhdCBhcmUgYWN0dWFsbHkKLQkgKiBlbmFibGVkLCBzbyBt YWtlIHN1cmUgYWxsIG90aGVyIHBsYW5lcyBhcmUgc2V0IGFzIGRpc2FibGVkLgorCSAqIE5vdGU6 IElmIHdlIHN0YXJ0IHN1cHBvcnRpbmcgbXVsdGlwbGUgcGVuZGluZyBhdG9taWMgY29tbWl0cyBh Z2FpbnN0CisJICogdGhlIHNhbWUgcGxhbmVzL0NSVEMncyBpbiB0aGUgZnV0dXJlLCBwbGFuZS0+ c3RhdGUgd2lsbCBubyBsb25nZXIgYmUKKwkgKiB0aGUgY29ycmVjdCBwcmUtc3RhdGUgdG8gdXNl IGZvciB0aGUgY2FsY3VsYXRpb25zIGhlcmUgYW5kIHdlJ2xsCisJICogbmVlZCB0byBjaGFuZ2Ug d2hlcmUgd2UgZ2V0IHRoZSAndW5jaGFuZ2VkJyBwbGFuZSBkYXRhIGZyb20uCisJICoKKwkgKiBG b3Igbm93IHRoaXMgaXMgZmluZSBiZWNhdXNlIHdlIG9ubHkgYWxsb3cgb25lIHF1ZXVlZCBjb21t aXQgYWdhaW5zdAorCSAqIGEgQ1JUQy4gIEV2ZW4gaWYgdGhlIHBsYW5lIGlzbid0IG1vZGlmaWVk IGJ5IHRoaXMgdHJhbnNhY3Rpb24gYW5kIHdlCisJICogZG9uJ3QgaGF2ZSBhIHBsYW5lIGxvY2ss IHdlIHN0aWxsIGhhdmUgdGhlIENSVEMncyBsb2NrLCBzbyB3ZSBrbm93CisJICogdGhhdCBubyBv dGhlciB0cmFuc2FjdGlvbnMgYXJlIHJhY2luZyB3aXRoIHVzIHRvIHVwZGF0ZSBpdC4KIAkgKi8K LQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOworCWlmICghaW50ZWxfcHN0YXRl KQorCQlpbnRlbF9wc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwog Ci0JZm9yX2VhY2hfaW50ZWxfcGxhbmVfbWFzaygmZGV2X3ByaXYtPmRybSwKLQkJCQkgIGludGVs X3BsYW5lLAotCQkJCSAgY3N0YXRlLT5iYXNlLnBsYW5lX21hc2spIHsKLQkJaW50IGkgPSBza2xf d21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOwotCi0JCXBsYW5lID0gJmludGVsX3BsYW5lLT5iYXNl OwotCQlpbnRlbF9wc3RhdGUgPSBOVUxMOwotCQlpZiAoc3RhdGUpCi0JCQlpbnRlbF9wc3RhdGUg PQotCQkJCWludGVsX2F0b21pY19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoc3RhdGUsCi0JCQkJ CQkJCSAgICAgIGludGVsX3BsYW5lKTsKKwlXQVJOX09OKCFpbnRlbF9wc3RhdGUtPmJhc2UuZmIp OwogCi0JCS8qCi0JCSAqIE5vdGU6IElmIHdlIHN0YXJ0IHN1cHBvcnRpbmcgbXVsdGlwbGUgcGVu ZGluZyBhdG9taWMgY29tbWl0cwotCQkgKiBhZ2FpbnN0IHRoZSBzYW1lIHBsYW5lcy9DUlRDJ3Mg aW4gdGhlIGZ1dHVyZSwgcGxhbmUtPnN0YXRlCi0JCSAqIHdpbGwgbm8gbG9uZ2VyIGJlIHRoZSBj b3JyZWN0IHByZS1zdGF0ZSB0byB1c2UgZm9yIHRoZQotCQkgKiBjYWxjdWxhdGlvbnMgaGVyZSBh bmQgd2UnbGwgbmVlZCB0byBjaGFuZ2Ugd2hlcmUgd2UgZ2V0IHRoZQotCQkgKiAndW5jaGFuZ2Vk JyBwbGFuZSBkYXRhIGZyb20uCi0JCSAqCi0JCSAqIEZvciBub3cgdGhpcyBpcyBmaW5lIGJlY2F1 c2Ugd2Ugb25seSBhbGxvdyBvbmUgcXVldWVkIGNvbW1pdAotCQkgKiBhZ2FpbnN0IGEgQ1JUQy4g IEV2ZW4gaWYgdGhlIHBsYW5lIGlzbid0IG1vZGlmaWVkIGJ5IHRoaXMKLQkJICogdHJhbnNhY3Rp b24gYW5kIHdlIGRvbid0IGhhdmUgYSBwbGFuZSBsb2NrLCB3ZSBzdGlsbCBoYXZlCi0JCSAqIHRo ZSBDUlRDJ3MgbG9jaywgc28gd2Uga25vdyB0aGF0IG5vIG90aGVyIHRyYW5zYWN0aW9ucyBhcmUK LQkJICogcmFjaW5nIHdpdGggdXMgdG8gdXBkYXRlIGl0LgotCQkgKi8KLQkJaWYgKCFpbnRlbF9w c3RhdGUpCi0JCQlpbnRlbF9wc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOworCWRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0+cGxhbmVbcGlwZV1b aV0pOwogCi0JCVdBUk5fT04oIWludGVsX3BzdGF0ZS0+YmFzZS5mYik7Ci0KLQkJZGRiX2Jsb2Nr cyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRiLT5wbGFuZVtwaXBlXVtpXSk7Ci0KLQkJcmV0ID0g c2tsX2NvbXB1dGVfcGxhbmVfd20oZGV2X3ByaXYsCi0JCQkJCSAgIGNzdGF0ZSwKLQkJCQkJICAg aW50ZWxfcHN0YXRlLAotCQkJCQkgICBkZGJfYmxvY2tzLAotCQkJCQkgICBsZXZlbCwKLQkJCQkJ ICAgJnJlc3VsdC0+cGxhbmVfcmVzX2JbaV0sCi0JCQkJCSAgICZyZXN1bHQtPnBsYW5lX3Jlc19s W2ldLAotCQkJCQkgICAmcmVzdWx0LT5wbGFuZV9lbltpXSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1 cm4gcmV0OwotCX0KKwlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bShkZXZfcHJpdiwKKwkJCQkg ICBjc3RhdGUsCisJCQkJICAgaW50ZWxfcHN0YXRlLAorCQkJCSAgIGRkYl9ibG9ja3MsCisJCQkJ ICAgbGV2ZWwsCisJCQkJICAgJnJlc3VsdC0+cGxhbmVfcmVzX2IsCisJCQkJICAgJnJlc3VsdC0+ cGxhbmVfcmVzX2wsCisJCQkJICAgJnJlc3VsdC0+cGxhbmVfZW4pOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3NTUsMTkgKzM3NDAsMTEgQEAgc2tsX2Nv bXB1dGVfbGluZXRpbWVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKIHN0YXRp YyB2b2lkIHNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICp0cmFuc193bSAvKiBvdXQg Ki8pCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3N0YXRlLT5iYXNlLmNydGM7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCXN0cnVj dCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Ci0KIAlpZiAoIWNzdGF0ZS0+YmFzZS5hY3RpdmUp CiAJCXJldHVybjsKIAogCS8qIFVudGlsIHdlIGtub3cgbW9yZSwganVzdCBkaXNhYmxlIHRyYW5z aXRpb24gV01zICovCi0JZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhjcnRjLT5kZXYsIGlu dGVsX2NydGMsIGludGVsX3BsYW5lKSB7Ci0JCWludCBpID0gc2tsX3dtX3BsYW5lX2lkKGludGVs X3BsYW5lKTsKLQotCQl0cmFuc193bS0+cGxhbmVfZW5baV0gPSBmYWxzZTsKLQl9CisJdHJhbnNf d20tPnBsYW5lX2VuID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BpcGVfd20o c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKQEAgLTM3NzYsMTkgKzM3NTMsMzMgQEAg c3RhdGljIGludCBza2xfYnVpbGRfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0 YXRlLAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2 OwogCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2 KTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOworCXN0cnVjdCBza2xfcGxhbmVf d20gKndtOwogCWludCBsZXZlbCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJp dik7CiAJaW50IHJldDsKIAotCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxl dmVsKyspIHsKLQkJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWwoZGV2X3ByaXYsIGRkYiwgY3N0 YXRlLAotCQkJCQkgICBsZXZlbCwgJnBpcGVfd20tPndtW2xldmVsXSk7Ci0JCWlmIChyZXQpCi0J CQlyZXR1cm4gcmV0OworCS8qCisJICogV2UnbGwgb25seSBjYWxjdWxhdGUgd2F0ZXJtYXJrcyBm b3IgcGxhbmVzIHRoYXQgYXJlIGFjdHVhbGx5CisJICogZW5hYmxlZCwgc28gbWFrZSBzdXJlIGFs bCBvdGhlciBwbGFuZXMgYXJlIHNldCBhcyBkaXNhYmxlZC4KKwkgKi8KKwltZW1zZXQocGlwZV93 bS0+cGxhbmVzLCAwLCBzaXplb2YocGlwZV93bS0+cGxhbmVzKSk7CisKKwlmb3JfZWFjaF9pbnRl bF9wbGFuZV9tYXNrKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgaW50ZWxfcGxhbmUsCisJCQkJICBj c3RhdGUtPmJhc2UucGxhbmVfbWFzaykgeworCQl3bSA9ICZwaXBlX3dtLT5wbGFuZXNbc2tsX3dt X3BsYW5lX2lkKGludGVsX3BsYW5lKV07CisKKwkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1h eF9sZXZlbDsgbGV2ZWwrKykgeworCQkJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWwoZGV2X3By aXYsIGRkYiwgY3N0YXRlLAorCQkJCQkJICAgaW50ZWxfcGxhbmUsIGxldmVsLAorCQkJCQkJICAg JndtLT53bVtsZXZlbF0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXNr bF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3N0YXRlLCAmd20tPnRyYW5zX3dtKTsKIAl9CiAJcGlw ZV93bS0+bGluZXRpbWUgPSBza2xfY29tcHV0ZV9saW5ldGltZV93bShjc3RhdGUpOwogCi0Jc2ts X2NvbXB1dGVfdHJhbnNpdGlvbl93bShjc3RhdGUsICZwaXBlX3dtLT50cmFuc193bSk7Ci0KIAly ZXR1cm4gMDsKIH0KIApAQCAtMzc5OCw1MCArMzc4OSw1NiBAQCBzdGF0aWMgdm9pZCBza2xfY29t cHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMpCiB7CiAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21f bWF4X2xldmVsKHRvX2k5MTUoZGV2KSk7CisJc3RydWN0IHNrbF9wbGFuZV93bSAqcGxhbmVfd207 CiAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCXVpbnQzMl90IHRlbXA7CiAJ aW50IGk7CiAKLQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7 Ci0JCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpOyBpKyspIHsK Kwlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgaSsrKSB7CisJ CXBsYW5lX3dtID0gJnBfd20tPnBsYW5lc1tpXTsKKworCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwg PD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7CiAJCQl0ZW1wID0gMDsKIAotCQkJdGVtcCB8PSBwX3dt LT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPDwKKwkJCXRlbXAgfD0gcGxhbmVfd20tPndtW2xl dmVsXS5wbGFuZV9yZXNfbCA8PAogCQkJCQlQTEFORV9XTV9MSU5FU19TSElGVDsKLQkJCXRlbXAg fD0gcF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW2ldOwotCQkJaWYgKHBfd20tPndtW2xldmVs XS5wbGFuZV9lbltpXSkKKwkJCXRlbXAgfD0gcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNf YjsKKwkJCWlmIChwbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuKQogCQkJCXRlbXAgfD0gUExB TkVfV01fRU47CiAKIAkJCXItPnBsYW5lW3BpcGVdW2ldW2xldmVsXSA9IHRlbXA7CiAJCX0KIAot CQl0ZW1wID0gMDsKLQotCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbFtQTEFO RV9DVVJTT1JdIDw8IFBMQU5FX1dNX0xJTkVTX1NISUZUOwotCQl0ZW1wIHw9IHBfd20tPndtW2xl dmVsXS5wbGFuZV9yZXNfYltQTEFORV9DVVJTT1JdOworCX0KIAotCQlpZiAocF93bS0+d21bbGV2 ZWxdLnBsYW5lX2VuW1BMQU5FX0NVUlNPUl0pCisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1h eF9sZXZlbDsgbGV2ZWwrKykgeworCQlwbGFuZV93bSA9ICZwX3dtLT5wbGFuZXNbUExBTkVfQ1VS U09SXTsKKwkJdGVtcCA9IDA7CisJCXRlbXAgfD0gcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9y ZXNfbCA8PCBQTEFORV9XTV9MSU5FU19TSElGVDsKKwkJdGVtcCB8PSBwbGFuZV93bS0+d21bbGV2 ZWxdLnBsYW5lX3Jlc19iOworCQlpZiAocGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9lbikKIAkJ CXRlbXAgfD0gUExBTkVfV01fRU47CiAKIAkJci0+cGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXVts ZXZlbF0gPSB0ZW1wOwotCiAJfQogCiAJLyogdHJhbnNpdGlvbiBXTXMgKi8KIAlmb3IgKGkgPSAw OyBpIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgaSsrKSB7CisJCXBsYW5lX3dtID0g JnBfd20tPnBsYW5lc1tpXTsKIAkJdGVtcCA9IDA7Ci0JCXRlbXAgfD0gcF93bS0+dHJhbnNfd20u cGxhbmVfcmVzX2xbaV0gPDwgUExBTkVfV01fTElORVNfU0hJRlQ7Ci0JCXRlbXAgfD0gcF93bS0+ dHJhbnNfd20ucGxhbmVfcmVzX2JbaV07Ci0JCWlmIChwX3dtLT50cmFuc193bS5wbGFuZV9lbltp XSkKKwkJdGVtcCB8PSBwbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wgPDwgUExBTkVfV01f TElORVNfU0hJRlQ7CisJCXRlbXAgfD0gcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iOwor CQlpZiAocGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuKQogCQkJdGVtcCB8PSBQTEFORV9XTV9F TjsKIAogCQlyLT5wbGFuZV90cmFuc1twaXBlXVtpXSA9IHRlbXA7CiAJfQogCisJcGxhbmVfd20g PSAmcF93bS0+cGxhbmVzW1BMQU5FX0NVUlNPUl07CiAJdGVtcCA9IDA7Ci0JdGVtcCB8PSBwX3dt LT50cmFuc193bS5wbGFuZV9yZXNfbFtQTEFORV9DVVJTT1JdIDw8IFBMQU5FX1dNX0xJTkVTX1NI SUZUOwotCXRlbXAgfD0gcF93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2JbUExBTkVfQ1VSU09SXTsK LQlpZiAocF93bS0+dHJhbnNfd20ucGxhbmVfZW5bUExBTkVfQ1VSU09SXSkKKwl0ZW1wIHw9IHBs YW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbCA8PCBQTEFORV9XTV9MSU5FU19TSElGVDsKKwl0 ZW1wIHw9IHBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYjsKKwlpZiAocGxhbmVfd20tPnRy YW5zX3dtLnBsYW5lX2VuKQogCQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwogCiAJci0+cGxhbmVfdHJh bnNbcGlwZV1bUExBTkVfQ1VSU09SXSA9IHRlbXA7CkBAIC00MjgyLDM1ICs0Mjc5LDM3IEBAIHN0 YXRpYyB2b2lkIHNrbF9waXBlX3dtX2FjdGl2ZV9zdGF0ZSh1aW50MzJfdCB2YWwsCiAKIAlpZiAo IWlzX3RyYW5zd20pIHsKIAkJaWYgKCFpc19jdXJzb3IpIHsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxd LnBsYW5lX2VuW2ldID0gaXNfZW5hYmxlZDsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lX3Jl c19iW2ldID0KLQkJCQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7Ci0JCQlhY3RpdmUtPndt W2xldmVsXS5wbGFuZV9yZXNfbFtpXSA9Ci0JCQkJCSh2YWwgPj4gUExBTkVfV01fTElORVNfU0hJ RlQpICYKLQkJCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CisJCQlhY3RpdmUtPnBsYW5lc1tpXS53 bVtsZXZlbF0ucGxhbmVfZW4gPSBpc19lbmFibGVkOworCQkJYWN0aXZlLT5wbGFuZXNbaV0ud21b bGV2ZWxdLnBsYW5lX3Jlc19iID0KKwkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKKwkJ CWFjdGl2ZS0+cGxhbmVzW2ldLndtW2xldmVsXS5wbGFuZV9yZXNfbCA9CisJCQkJKHZhbCA+PiBQ TEFORV9XTV9MSU5FU19TSElGVCkgJgorCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CiAJCX0gZWxz ZSB7Ci0JCQlhY3RpdmUtPndtW2xldmVsXS5wbGFuZV9lbltQTEFORV9DVVJTT1JdID0gaXNfZW5h YmxlZDsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW1BMQU5FX0NVUlNPUl0gPQot CQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBs YW5lX3Jlc19sW1BMQU5FX0NVUlNPUl0gPQotCQkJCQkodmFsID4+IFBMQU5FX1dNX0xJTkVTX1NI SUZUKSAmCi0JCQkJCQlQTEFORV9XTV9MSU5FU19NQVNLOworCQkJYWN0aXZlLT5wbGFuZXNbUExB TkVfQ1VSU09SXS53bVtsZXZlbF0ucGxhbmVfZW4gPQorCQkJCWlzX2VuYWJsZWQ7CisJCQlhY3Rp dmUtPnBsYW5lc1tQTEFORV9DVVJTT1JdLndtW2xldmVsXS5wbGFuZV9yZXNfYiA9CisJCQkJdmFs ICYgUExBTkVfV01fQkxPQ0tTX01BU0s7CisJCQlhY3RpdmUtPnBsYW5lc1tQTEFORV9DVVJTT1Jd LndtW2xldmVsXS5wbGFuZV9yZXNfbCA9CisJCQkJKHZhbCA+PiBQTEFORV9XTV9MSU5FU19TSElG VCkgJgorCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIWlz X2N1cnNvcikgewotCQkJYWN0aXZlLT50cmFuc193bS5wbGFuZV9lbltpXSA9IGlzX2VuYWJsZWQ7 Ci0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5lX3Jlc19iW2ldID0KLQkJCQkJdmFsICYgUExBTkVf V01fQkxPQ0tTX01BU0s7Ci0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5lX3Jlc19sW2ldID0KLQkJ CQkJKHZhbCA+PiBQTEFORV9XTV9MSU5FU19TSElGVCkgJgotCQkJCQkJUExBTkVfV01fTElORVNf TUFTSzsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5zX3dtLnBsYW5lX2VuID0gaXNfZW5hYmxl ZDsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5zX3dtLnBsYW5lX3Jlc19iID0KKwkJCQl2YWwg JiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5zX3dtLnBs YW5lX3Jlc19sID0KKwkJCQkodmFsID4+IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCisJCQkJUExB TkVfV01fTElORVNfTUFTSzsKIAkJfSBlbHNlIHsKLQkJCWFjdGl2ZS0+dHJhbnNfd20ucGxhbmVf ZW5bUExBTkVfQ1VSU09SXSA9IGlzX2VuYWJsZWQ7Ci0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5l X3Jlc19iW1BMQU5FX0NVUlNPUl0gPQotCQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsK LQkJCWFjdGl2ZS0+dHJhbnNfd20ucGxhbmVfcmVzX2xbUExBTkVfQ1VSU09SXSA9Ci0JCQkJCSh2 YWwgPj4gUExBTkVfV01fTElORVNfU0hJRlQpICYKLQkJCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7 CisJCQlhY3RpdmUtPnBsYW5lc1tQTEFORV9DVVJTT1JdLnRyYW5zX3dtLnBsYW5lX2VuID0KKwkJ CQlpc19lbmFibGVkOworCQkJYWN0aXZlLT5wbGFuZXNbUExBTkVfQ1VSU09SXS50cmFuc193bS5w bGFuZV9yZXNfYiA9CisJCQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7CisJCQlhY3RpdmUt PnBsYW5lc1tQTEFORV9DVVJTT1JdLnRyYW5zX3dtLnBsYW5lX3Jlc19sID0KKwkJCQkodmFsID4+ IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCisJCQkJUExBTkVfV01fTElORVNfTUFTSzsKIAkJfQog CX0KIH0KLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK