From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v2 03/10] drm/i915/gen9: Make skl_wm_level per-plane Date: Fri, 7 Oct 2016 20:11:27 -0400 Message-ID: <1475885497-6094-4-git-send-email-cpaul@redhat.com> References: <1475885497-6094-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: <1475885497-6094-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 b24gaW50byBzZXBhcmF0ZSBwYXRjaAoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGNwYXVsQHJlZGhh dC5jb20+ClJldmlld2VkLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggIHwgICA2ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCB8ICAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYyAgfCAyMDcgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAz IGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRpb25zKCspLCAxMDggZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZTlkMDM1ZWEuLjAyODdjOTMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaApAQCAtMTY0OSw5ICsxNjQ5LDkgQEAgc3RydWN0IHNrbF93bV92YWx1ZXMgewog fTsKIAogc3RydWN0IHNrbF93bV9sZXZlbCB7Ci0JYm9vbCBwbGFuZV9lbltJOTE1X01BWF9QTEFO RVNdOwotCXVpbnQxNl90IHBsYW5lX3Jlc19iW0k5MTVfTUFYX1BMQU5FU107Ci0JdWludDhfdCBw bGFuZV9yZXNfbFtJOTE1X01BWF9QTEFORVNdOworCWJvb2wgcGxhbmVfZW47CisJdWludDE2X3Qg cGxhbmVfcmVzX2I7CisJdWludDhfdCBwbGFuZV9yZXNfbDsKIH07CiAKIC8qCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCmluZGV4IDM1YmEyODIuLmQ2ODRmNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCkBAIC00NjgsOSArNDY4LDEzIEBAIHN0cnVjdCBpbnRlbF9waXBlX3dtIHsKIAlib29s IHNwcml0ZXNfc2NhbGVkOwogfTsKIAotc3RydWN0IHNrbF9waXBlX3dtIHsKK3N0cnVjdCBza2xf cGxhbmVfd20gewogCXN0cnVjdCBza2xfd21fbGV2ZWwgd21bOF07CiAJc3RydWN0IHNrbF93bV9s ZXZlbCB0cmFuc193bTsKK307CisKK3N0cnVjdCBza2xfcGlwZV93bSB7CisJc3RydWN0IHNrbF9w bGFuZV93bSBwbGFuZXNbSTkxNV9NQVhfUExBTkVTXTsKIAl1aW50MzJfdCBsaW5ldGltZTsKIH07 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IGNjNWQ1ZTkuLjRjMmViY2QgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYwpAQCAtMzY3MCw2NyArMzY3MCw1MiBAQCBzdGF0aWMgaW50CiBza2xf Y29tcHV0ZV93bV9sZXZlbChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCSAgICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAogCQkgICAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCisJCSAgICAgc3RydWN0IGludGVsX3BsYW5lICppbnRl bF9wbGFuZSwKIAkJICAgICBpbnQgbGV2ZWwsCiAJCSAgICAgc3RydWN0IHNrbF93bV9sZXZlbCAq cmVzdWx0KQogewogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNzdGF0ZS0+YmFz ZS5zdGF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3N0YXRlLT5iYXNlLmNydGMpOwotCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwotCXN0cnVjdCBp bnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Ci0Jc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRl bF9wc3RhdGU7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmaW50ZWxfcGxhbmUtPmJhc2U7 CisJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUgPSBOVUxMOwogCXVpbnQx Nl90IGRkYl9ibG9ja3M7CiAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCWlu dCByZXQ7CisJaW50IGkgPSBza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOworCisJaWYgKHN0 YXRlKQorCQlpbnRlbF9wc3RhdGUgPQorCQkJaW50ZWxfYXRvbWljX2dldF9leGlzdGluZ19wbGFu ZV9zdGF0ZShzdGF0ZSwKKwkJCQkJCQkgICAgICBpbnRlbF9wbGFuZSk7CiAKIAkvKgotCSAqIFdl J2xsIG9ubHkgY2FsY3VsYXRlIHdhdGVybWFya3MgZm9yIHBsYW5lcyB0aGF0IGFyZSBhY3R1YWxs eQotCSAqIGVuYWJsZWQsIHNvIG1ha2Ugc3VyZSBhbGwgb3RoZXIgcGxhbmVzIGFyZSBzZXQgYXMg ZGlzYWJsZWQuCisJICogTm90ZTogSWYgd2Ugc3RhcnQgc3VwcG9ydGluZyBtdWx0aXBsZSBwZW5k aW5nIGF0b21pYyBjb21taXRzIGFnYWluc3QKKwkgKiB0aGUgc2FtZSBwbGFuZXMvQ1JUQydzIGlu IHRoZSBmdXR1cmUsIHBsYW5lLT5zdGF0ZSB3aWxsIG5vIGxvbmdlciBiZQorCSAqIHRoZSBjb3Jy ZWN0IHByZS1zdGF0ZSB0byB1c2UgZm9yIHRoZSBjYWxjdWxhdGlvbnMgaGVyZSBhbmQgd2UnbGwK KwkgKiBuZWVkIHRvIGNoYW5nZSB3aGVyZSB3ZSBnZXQgdGhlICd1bmNoYW5nZWQnIHBsYW5lIGRh dGEgZnJvbS4KKwkgKgorCSAqIEZvciBub3cgdGhpcyBpcyBmaW5lIGJlY2F1c2Ugd2Ugb25seSBh bGxvdyBvbmUgcXVldWVkIGNvbW1pdCBhZ2FpbnN0CisJICogYSBDUlRDLiAgRXZlbiBpZiB0aGUg cGxhbmUgaXNuJ3QgbW9kaWZpZWQgYnkgdGhpcyB0cmFuc2FjdGlvbiBhbmQgd2UKKwkgKiBkb24n dCBoYXZlIGEgcGxhbmUgbG9jaywgd2Ugc3RpbGwgaGF2ZSB0aGUgQ1JUQydzIGxvY2ssIHNvIHdl IGtub3cKKwkgKiB0aGF0IG5vIG90aGVyIHRyYW5zYWN0aW9ucyBhcmUgcmFjaW5nIHdpdGggdXMg dG8gdXBkYXRlIGl0LgogCSAqLwotCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7 CisJaWYgKCFpbnRlbF9wc3RhdGUpCisJCWludGVsX3BzdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7CiAKLQlmb3JfZWFjaF9pbnRlbF9wbGFuZV9tYXNrKCZkZXZfcHJp di0+ZHJtLAotCQkJCSAgaW50ZWxfcGxhbmUsCi0JCQkJICBjc3RhdGUtPmJhc2UucGxhbmVfbWFz aykgewotCQlpbnQgaSA9IHNrbF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7Ci0KLQkJcGxhbmUg PSAmaW50ZWxfcGxhbmUtPmJhc2U7Ci0JCWludGVsX3BzdGF0ZSA9IE5VTEw7Ci0JCWlmIChzdGF0 ZSkKLQkJCWludGVsX3BzdGF0ZSA9Ci0JCQkJaW50ZWxfYXRvbWljX2dldF9leGlzdGluZ19wbGFu ZV9zdGF0ZShzdGF0ZSwKLQkJCQkJCQkJICAgICAgaW50ZWxfcGxhbmUpOworCVdBUk5fT04oIWlu dGVsX3BzdGF0ZS0+YmFzZS5mYik7CiAKLQkJLyoKLQkJICogTm90ZTogSWYgd2Ugc3RhcnQgc3Vw cG9ydGluZyBtdWx0aXBsZSBwZW5kaW5nIGF0b21pYyBjb21taXRzCi0JCSAqIGFnYWluc3QgdGhl IHNhbWUgcGxhbmVzL0NSVEMncyBpbiB0aGUgZnV0dXJlLCBwbGFuZS0+c3RhdGUKLQkJICogd2ls bCBubyBsb25nZXIgYmUgdGhlIGNvcnJlY3QgcHJlLXN0YXRlIHRvIHVzZSBmb3IgdGhlCi0JCSAq IGNhbGN1bGF0aW9ucyBoZXJlIGFuZCB3ZSdsbCBuZWVkIHRvIGNoYW5nZSB3aGVyZSB3ZSBnZXQg dGhlCi0JCSAqICd1bmNoYW5nZWQnIHBsYW5lIGRhdGEgZnJvbS4KLQkJICoKLQkJICogRm9yIG5v dyB0aGlzIGlzIGZpbmUgYmVjYXVzZSB3ZSBvbmx5IGFsbG93IG9uZSBxdWV1ZWQgY29tbWl0Ci0J CSAqIGFnYWluc3QgYSBDUlRDLiAgRXZlbiBpZiB0aGUgcGxhbmUgaXNuJ3QgbW9kaWZpZWQgYnkg dGhpcwotCQkgKiB0cmFuc2FjdGlvbiBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHBsYW5lIGxvY2ssIHdl IHN0aWxsIGhhdmUKLQkJICogdGhlIENSVEMncyBsb2NrLCBzbyB3ZSBrbm93IHRoYXQgbm8gb3Ro ZXIgdHJhbnNhY3Rpb25zIGFyZQotCQkgKiByYWNpbmcgd2l0aCB1cyB0byB1cGRhdGUgaXQuCi0J CSAqLwotCQlpZiAoIWludGVsX3BzdGF0ZSkKLQkJCWludGVsX3BzdGF0ZSA9IHRvX2ludGVsX3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6 ZSgmZGRiLT5wbGFuZVtwaXBlXVtpXSk7CiAKLQkJV0FSTl9PTighaW50ZWxfcHN0YXRlLT5iYXNl LmZiKTsKLQotCQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGItPnBsYW5lW3Bp cGVdW2ldKTsKLQotCQlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bShkZXZfcHJpdiwKLQkJCQkJ ICAgY3N0YXRlLAotCQkJCQkgICBpbnRlbF9wc3RhdGUsCi0JCQkJCSAgIGRkYl9ibG9ja3MsCi0J CQkJCSAgIGxldmVsLAotCQkJCQkgICAmcmVzdWx0LT5wbGFuZV9yZXNfYltpXSwKLQkJCQkJICAg JnJlc3VsdC0+cGxhbmVfcmVzX2xbaV0sCi0JCQkJCSAgICZyZXN1bHQtPnBsYW5lX2VuW2ldKTsK LQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQorCXJldCA9IHNrbF9jb21wdXRlX3BsYW5l X3dtKGRldl9wcml2LAorCQkJCSAgIGNzdGF0ZSwKKwkJCQkgICBpbnRlbF9wc3RhdGUsCisJCQkJ ICAgZGRiX2Jsb2NrcywKKwkJCQkgICBsZXZlbCwKKwkJCQkgICAmcmVzdWx0LT5wbGFuZV9yZXNf YiwKKwkJCQkgICAmcmVzdWx0LT5wbGFuZV9yZXNfbCwKKwkJCQkgICAmcmVzdWx0LT5wbGFuZV9l bik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwogfQpAQCAtMzc1MSwx OSArMzczNiwxMSBAQCBza2xfY29tcHV0ZV9saW5ldGltZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlKQogc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJCSAgICAgIHN0cnVjdCBza2xfd21fbGV2 ZWwgKnRyYW5zX3dtIC8qIG91dCAqLykKIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjc3Rh dGUtPmJhc2UuY3J0YzsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKLQogCWlmICgh Y3N0YXRlLT5iYXNlLmFjdGl2ZSkKIAkJcmV0dXJuOwogCiAJLyogVW50aWwgd2Uga25vdyBtb3Jl LCBqdXN0IGRpc2FibGUgdHJhbnNpdGlvbiBXTXMgKi8KLQlmb3JfZWFjaF9pbnRlbF9wbGFuZV9v bl9jcnRjKGNydGMtPmRldiwgaW50ZWxfY3J0YywgaW50ZWxfcGxhbmUpIHsKLQkJaW50IGkgPSBz a2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOwotCi0JCXRyYW5zX3dtLT5wbGFuZV9lbltpXSA9 IGZhbHNlOwotCX0KKwl0cmFuc193bS0+cGxhbmVfZW4gPSBmYWxzZTsKIH0KIAogc3RhdGljIGlu dCBza2xfYnVpbGRfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLApAQCAt Mzc3MiwxOSArMzc0OSwzMyBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9waXBlX3dtKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNz dGF0ZS0+YmFzZS5jcnRjLT5kZXY7CiAJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7 CisJc3RydWN0IHNrbF9wbGFuZV93bSAqd207CiAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtf d21fbWF4X2xldmVsKGRldik7CiAJaW50IHJldDsKIAotCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8 PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKLQkJcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWwoZGV2 X3ByaXYsIGRkYiwgY3N0YXRlLAotCQkJCQkgICBsZXZlbCwgJnBpcGVfd20tPndtW2xldmVsXSk7 Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCS8qCisJICogV2UnbGwgb25seSBjYWxjdWxh dGUgd2F0ZXJtYXJrcyBmb3IgcGxhbmVzIHRoYXQgYXJlIGFjdHVhbGx5CisJICogZW5hYmxlZCwg c28gbWFrZSBzdXJlIGFsbCBvdGhlciBwbGFuZXMgYXJlIHNldCBhcyBkaXNhYmxlZC4KKwkgKi8K KwltZW1zZXQocGlwZV93bS0+cGxhbmVzLCAwLCBzaXplb2YocGlwZV93bS0+cGxhbmVzKSk7CisK Kwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9tYXNrKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgaW50ZWxf cGxhbmUsCisJCQkJICBjc3RhdGUtPmJhc2UucGxhbmVfbWFzaykgeworCQl3bSA9ICZwaXBlX3dt LT5wbGFuZXNbc2tsX3dtX3BsYW5lX2lkKGludGVsX3BsYW5lKV07CisKKwkJZm9yIChsZXZlbCA9 IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgeworCQkJcmV0ID0gc2tsX2NvbXB1dGVf d21fbGV2ZWwoZGV2X3ByaXYsIGRkYiwgY3N0YXRlLAorCQkJCQkJICAgaW50ZWxfcGxhbmUsIGxl dmVsLAorCQkJCQkJICAgJndtLT53bVtsZXZlbF0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4g cmV0OworCQl9CisJCXNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3N0YXRlLCAmd20tPnRyYW5z X3dtKTsKIAl9CiAJcGlwZV93bS0+bGluZXRpbWUgPSBza2xfY29tcHV0ZV9saW5ldGltZV93bShj c3RhdGUpOwogCi0Jc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjc3RhdGUsICZwaXBlX3dtLT50 cmFuc193bSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc5NCw1MCArMzc4NSw1NiBAQCBzdGF0 aWMgdm9pZCBza2xfY29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkJICAgc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCiB7CiAJaW50IGxldmVsLCBtYXhf bGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7CisJc3RydWN0IHNrbF9wbGFuZV93bSAqcGxh bmVfd207CiAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCXVpbnQzMl90IHRl bXA7CiAJaW50IGk7CiAKLQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZl bCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpOyBp KyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgaSsr KSB7CisJCXBsYW5lX3dtID0gJnBfd20tPnBsYW5lc1tpXTsKKworCQlmb3IgKGxldmVsID0gMDsg bGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7CiAJCQl0ZW1wID0gMDsKIAotCQkJdGVtcCB8 PSBwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPDwKKwkJCXRlbXAgfD0gcGxhbmVfd20t PndtW2xldmVsXS5wbGFuZV9yZXNfbCA8PAogCQkJCQlQTEFORV9XTV9MSU5FU19TSElGVDsKLQkJ CXRlbXAgfD0gcF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW2ldOwotCQkJaWYgKHBfd20tPndt W2xldmVsXS5wbGFuZV9lbltpXSkKKwkJCXRlbXAgfD0gcGxhbmVfd20tPndtW2xldmVsXS5wbGFu ZV9yZXNfYjsKKwkJCWlmIChwbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuKQogCQkJCXRlbXAg fD0gUExBTkVfV01fRU47CiAKIAkJCXItPnBsYW5lW3BpcGVdW2ldW2xldmVsXSA9IHRlbXA7CiAJ CX0KIAotCQl0ZW1wID0gMDsKLQotCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5wbGFuZV9yZXNf bFtQTEFORV9DVVJTT1JdIDw8IFBMQU5FX1dNX0xJTkVTX1NISUZUOwotCQl0ZW1wIHw9IHBfd20t PndtW2xldmVsXS5wbGFuZV9yZXNfYltQTEFORV9DVVJTT1JdOworCX0KIAotCQlpZiAocF93bS0+ d21bbGV2ZWxdLnBsYW5lX2VuW1BMQU5FX0NVUlNPUl0pCisJZm9yIChsZXZlbCA9IDA7IGxldmVs IDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgeworCQlwbGFuZV93bSA9ICZwX3dtLT5wbGFuZXNbUExB TkVfQ1VSU09SXTsKKwkJdGVtcCA9IDA7CisJCXRlbXAgfD0gcGxhbmVfd20tPndtW2xldmVsXS5w bGFuZV9yZXNfbCA8PCBQTEFORV9XTV9MSU5FU19TSElGVDsKKwkJdGVtcCB8PSBwbGFuZV93bS0+ d21bbGV2ZWxdLnBsYW5lX3Jlc19iOworCQlpZiAocGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9l bikKIAkJCXRlbXAgfD0gUExBTkVfV01fRU47CiAKIAkJci0+cGxhbmVbcGlwZV1bUExBTkVfQ1VS U09SXVtsZXZlbF0gPSB0ZW1wOwotCiAJfQogCiAJLyogdHJhbnNpdGlvbiBXTXMgKi8KIAlmb3Ig KGkgPSAwOyBpIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgaSsrKSB7CisJCXBsYW5l X3dtID0gJnBfd20tPnBsYW5lc1tpXTsKIAkJdGVtcCA9IDA7Ci0JCXRlbXAgfD0gcF93bS0+dHJh bnNfd20ucGxhbmVfcmVzX2xbaV0gPDwgUExBTkVfV01fTElORVNfU0hJRlQ7Ci0JCXRlbXAgfD0g cF93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2JbaV07Ci0JCWlmIChwX3dtLT50cmFuc193bS5wbGFu ZV9lbltpXSkKKwkJdGVtcCB8PSBwbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wgPDwgUExB TkVfV01fTElORVNfU0hJRlQ7CisJCXRlbXAgfD0gcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jl c19iOworCQlpZiAocGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuKQogCQkJdGVtcCB8PSBQTEFO RV9XTV9FTjsKIAogCQlyLT5wbGFuZV90cmFuc1twaXBlXVtpXSA9IHRlbXA7CiAJfQogCisJcGxh bmVfd20gPSAmcF93bS0+cGxhbmVzW1BMQU5FX0NVUlNPUl07CiAJdGVtcCA9IDA7Ci0JdGVtcCB8 PSBwX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbFtQTEFORV9DVVJTT1JdIDw8IFBMQU5FX1dNX0xJ TkVTX1NISUZUOwotCXRlbXAgfD0gcF93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2JbUExBTkVfQ1VS U09SXTsKLQlpZiAocF93bS0+dHJhbnNfd20ucGxhbmVfZW5bUExBTkVfQ1VSU09SXSkKKwl0ZW1w IHw9IHBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbCA8PCBQTEFORV9XTV9MSU5FU19TSElG VDsKKwl0ZW1wIHw9IHBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYjsKKwlpZiAocGxhbmVf d20tPnRyYW5zX3dtLnBsYW5lX2VuKQogCQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwogCiAJci0+cGxh bmVfdHJhbnNbcGlwZV1bUExBTkVfQ1VSU09SXSA9IHRlbXA7CkBAIC00Mjc4LDM1ICs0Mjc1LDM3 IEBAIHN0YXRpYyB2b2lkIHNrbF9waXBlX3dtX2FjdGl2ZV9zdGF0ZSh1aW50MzJfdCB2YWwsCiAK IAlpZiAoIWlzX3RyYW5zd20pIHsKIAkJaWYgKCFpc19jdXJzb3IpIHsKLQkJCWFjdGl2ZS0+d21b bGV2ZWxdLnBsYW5lX2VuW2ldID0gaXNfZW5hYmxlZDsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBs YW5lX3Jlc19iW2ldID0KLQkJCQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7Ci0JCQlhY3Rp dmUtPndtW2xldmVsXS5wbGFuZV9yZXNfbFtpXSA9Ci0JCQkJCSh2YWwgPj4gUExBTkVfV01fTElO RVNfU0hJRlQpICYKLQkJCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CisJCQlhY3RpdmUtPnBsYW5l c1tpXS53bVtsZXZlbF0ucGxhbmVfZW4gPSBpc19lbmFibGVkOworCQkJYWN0aXZlLT5wbGFuZXNb aV0ud21bbGV2ZWxdLnBsYW5lX3Jlc19iID0KKwkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFT SzsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLndtW2xldmVsXS5wbGFuZV9yZXNfbCA9CisJCQkJKHZh bCA+PiBQTEFORV9XTV9MSU5FU19TSElGVCkgJgorCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CiAJ CX0gZWxzZSB7Ci0JCQlhY3RpdmUtPndtW2xldmVsXS5wbGFuZV9lbltQTEFORV9DVVJTT1JdID0g aXNfZW5hYmxlZDsKLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW1BMQU5FX0NVUlNP Ul0gPQotCQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKLQkJCWFjdGl2ZS0+d21bbGV2 ZWxdLnBsYW5lX3Jlc19sW1BMQU5FX0NVUlNPUl0gPQotCQkJCQkodmFsID4+IFBMQU5FX1dNX0xJ TkVTX1NISUZUKSAmCi0JCQkJCQlQTEFORV9XTV9MSU5FU19NQVNLOworCQkJYWN0aXZlLT5wbGFu ZXNbUExBTkVfQ1VSU09SXS53bVtsZXZlbF0ucGxhbmVfZW4gPQorCQkJCWlzX2VuYWJsZWQ7CisJ CQlhY3RpdmUtPnBsYW5lc1tQTEFORV9DVVJTT1JdLndtW2xldmVsXS5wbGFuZV9yZXNfYiA9CisJ CQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7CisJCQlhY3RpdmUtPnBsYW5lc1tQTEFORV9D VVJTT1JdLndtW2xldmVsXS5wbGFuZV9yZXNfbCA9CisJCQkJKHZhbCA+PiBQTEFORV9XTV9MSU5F U19TSElGVCkgJgorCQkJCVBMQU5FX1dNX0xJTkVTX01BU0s7CiAJCX0KIAl9IGVsc2UgewogCQlp ZiAoIWlzX2N1cnNvcikgewotCQkJYWN0aXZlLT50cmFuc193bS5wbGFuZV9lbltpXSA9IGlzX2Vu YWJsZWQ7Ci0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5lX3Jlc19iW2ldID0KLQkJCQkJdmFsICYg UExBTkVfV01fQkxPQ0tTX01BU0s7Ci0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5lX3Jlc19sW2ld ID0KLQkJCQkJKHZhbCA+PiBQTEFORV9XTV9MSU5FU19TSElGVCkgJgotCQkJCQkJUExBTkVfV01f TElORVNfTUFTSzsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5zX3dtLnBsYW5lX2VuID0gaXNf ZW5hYmxlZDsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5zX3dtLnBsYW5lX3Jlc19iID0KKwkJ CQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKKwkJCWFjdGl2ZS0+cGxhbmVzW2ldLnRyYW5z X3dtLnBsYW5lX3Jlc19sID0KKwkJCQkodmFsID4+IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCisJ CQkJUExBTkVfV01fTElORVNfTUFTSzsKIAkJfSBlbHNlIHsKLQkJCWFjdGl2ZS0+dHJhbnNfd20u cGxhbmVfZW5bUExBTkVfQ1VSU09SXSA9IGlzX2VuYWJsZWQ7Ci0JCQlhY3RpdmUtPnRyYW5zX3dt LnBsYW5lX3Jlc19iW1BMQU5FX0NVUlNPUl0gPQotCQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1Nf TUFTSzsKLQkJCWFjdGl2ZS0+dHJhbnNfd20ucGxhbmVfcmVzX2xbUExBTkVfQ1VSU09SXSA9Ci0J CQkJCSh2YWwgPj4gUExBTkVfV01fTElORVNfU0hJRlQpICYKLQkJCQkJCVBMQU5FX1dNX0xJTkVT X01BU0s7CisJCQlhY3RpdmUtPnBsYW5lc1tQTEFORV9DVVJTT1JdLnRyYW5zX3dtLnBsYW5lX2Vu ID0KKwkJCQlpc19lbmFibGVkOworCQkJYWN0aXZlLT5wbGFuZXNbUExBTkVfQ1VSU09SXS50cmFu c193bS5wbGFuZV9yZXNfYiA9CisJCQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7CisJCQlh Y3RpdmUtPnBsYW5lc1tQTEFORV9DVVJTT1JdLnRyYW5zX3dtLnBsYW5lX3Jlc19sID0KKwkJCQko dmFsID4+IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCisJCQkJUExBTkVfV01fTElORVNfTUFTSzsK IAkJfQogCX0KIH0KLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK