From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 16/24] drm/i915: atomic plane updates in a nutshell Date: Mon, 1 Jun 2015 15:27:19 +0200 Message-ID: <1433165247-15928-17-git-send-email-maarten.lankhorst@linux.intel.com> References: <1433165247-15928-1-git-send-email-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 ESMTP id 77C456E608 for ; Mon, 1 Jun 2015 06:27:45 -0700 (PDT) In-Reply-To: <1433165247-15928-1-git-send-email-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 Tm93IHRoYXQgYWxsIHBsYW5lcyBhcmUgYWRkZWQgZHVyaW5nIGEgbW9kZXNldCB3ZSBjYW4gdXNl IHRoZQpjYWxjdWxhdGVkIGNoYW5nZXMgYmVmb3JlIGRpc2FibGluZyBhIHBsYW5lLCBhbmQgdGhl biBlaXRoZXIgY29tbWl0Cm9yIGZvcmNlIGRpc2FibGUgYSBwbGFuZSBiZWZvcmUgZGlzYWJsaW5n IHRoZSBjcnRjLgoKVGhlIGNvZGUgaXMgc2hhcmVkIHdpdGggYXRvbWljX2JlZ2luL2ZsdXNoLCBl eGNlcHQgd2F0ZXJtYXJrIHVwZGF0aW5nCmFuZCB2YmxhbmsgZXZhc2lvbiBhcmUgbm90IHVzZWQu CgpTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGlu dXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8 IDEyNCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfc3ByaXRlLmMgIHwgICAzIC0KIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0 aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j CmluZGV4IDEyZGE5N2Q5ZjM4Ni4uZTJhMWM0YzAxMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCkBAIC0xMDksOCArMTA5LDYgQEAgc3RhdGljIHZvaWQgc2tsX2luaXRfc2Nh bGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3IK IAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgaW50IGk5eHhf Z2V0X3JlZmNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJ CSAgIGludCBudW1fY29ubmVjdG9ycyk7Ci1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2VuYWJsZV9w bGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlz YWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogc3RhdGljIHN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9maW5kX2VuY29kZXIoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29u bmVjdG9yLCBpbnQgcGlwZSkKIHsKQEAgLTIyMTUsMjggKzIyMTMsNiBAQCBzdGF0aWMgdm9pZCBp bnRlbF9kaXNhYmxlX3BpcGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJCWludGVsX3dhaXRf Zm9yX3BpcGVfb2ZmKGNydGMpOwogfQogCi0vKioKLSAqIGludGVsX2VuYWJsZV9wcmltYXJ5X2h3 X3BsYW5lIC0gZW5hYmxlIHRoZSBwcmltYXJ5IHBsYW5lIG9uIGEgZ2l2ZW4gcGlwZQotICogQHBs YW5lOiAgcGxhbmUgdG8gYmUgZW5hYmxlZAotICogQGNydGM6IGNydGMgZm9yIHRoZSBwbGFuZQot ICoKLSAqIEVuYWJsZSBAcGxhbmUgb24gQGNydGMsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHBpcGUg aXMgcnVubmluZyBmaXJzdC4KLSAqLwotc3RhdGljIHZvaWQgaW50ZWxfZW5hYmxlX3ByaW1hcnlf aHdfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSAgc3RydWN0IGRybV9jcnRj ICpjcnRjKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OwotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JLyogSWYg dGhlIHBpcGUgaXNuJ3QgZW5hYmxlZCwgd2UgY2FuJ3QgcHVtcCBwaXhlbHMgYW5kIG1heSBoYW5n ICovCi0JYXNzZXJ0X3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgaW50ZWxfY3J0Yy0+cGlwZSk7Ci0J dG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlzaWJsZSA9IHRydWU7Ci0KLQlk ZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBwbGFuZS0+ZmIsCi0J CQkJCSAgICAgICBjcnRjLT54LCBjcnRjLT55KTsKLX0KLQogc3RhdGljIGJvb2wgbmVlZF92dGRf d2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfSU5URUxfSU9NTVUK QEAgLTQ1MDEsMjAgKzQ0NzcsNiBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV9wZml0X2VuYWJsZShz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2VuYWJs ZV9zcHJpdGVfcGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCWVudW0gcGlwZSBwaXBlID0gdG9faW50ZWxfY3J0Yyhj cnRjKS0+cGlwZTsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKLQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKmludGVsX3BsYW5lOwotCi0JZHJtX2Zvcl9lYWNoX2xlZ2FjeV9wbGFuZShwbGFuZSwgJmRl di0+bW9kZV9jb25maWcucGxhbmVfbGlzdCkgewotCQlpbnRlbF9wbGFuZSA9IHRvX2ludGVsX3Bs YW5lKHBsYW5lKTsKLQkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUpCi0JCQlpbnRlbF9w bGFuZV9yZXN0b3JlKCZpbnRlbF9wbGFuZS0+YmFzZSk7Ci0JfQotfQotCiB2b2lkIGhzd19lbmFi bGVfaXBzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKQEAgLTQ4MTUsNTEgKzQ3NzcsMzEgQEAgc3RhdGljIHZvaWQg aW50ZWxfcHJlX3BsYW5lX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAogc3RhdGlj IHZvaWQgaW50ZWxfY3J0Y19lbmFibGVfcGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlpbnQgcGlwZSA9IGludGVsX2Ny dGMtPnBpcGU7Ci0KLQlpbnRlbF9lbmFibGVfcHJpbWFyeV9od19wbGFuZShjcnRjLT5wcmltYXJ5 LCBjcnRjKTsKLQlpbnRlbF9lbmFibGVfc3ByaXRlX3BsYW5lcyhjcnRjKTsKLQlpbnRlbF9jcnRj X3VwZGF0ZV9jdXJzb3IoY3J0YywgdHJ1ZSk7CisJc3RydWN0IGRybV9wbGFuZSAqcDsKIAotCWlu dGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7CisJZHJtX2Zvcl9lYWNoX3BsYW5lX21hc2so cCwgY3J0Yy0+ZGV2LCBjcnRjLT5zdGF0ZS0+cGxhbmVfbWFzaykgeworCQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocCk7CiAKLQkvKgotCSAqIEZJWE1FOiBPbmNl IHdlIGdyb3cgcHJvcGVyIG51Y2xlYXIgZmxpcCBzdXBwb3J0IG91dCBvZiB0aGlzIHdlIG5lZWQK LQkgKiB0byBjb21wdXRlIHRoZSBtYXNrIG9mIGZsaXAgcGxhbmVzIHByZWNpc2VseS4gRm9yIHRo ZSB0aW1lIGJlaW5nCi0JICogY29uc2lkZXIgdGhpcyBhIGZsaXAgdG8gYSBOVUxMIHBsYW5lLgot CSAqLwotCWludGVsX2Zyb250YnVmZmVyX2ZsaXAoZGV2LCBJTlRFTF9GUk9OVEJVRkZFUl9BTExf TUFTSyhwaXBlKSk7CisJCXBsYW5lLT5jb21taXRfcGxhbmUocCwgdG9faW50ZWxfcGxhbmVfc3Rh dGUocC0+c3RhdGUpKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlzYWJsZV9w bGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQorc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kaXNh YmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2OwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOwotCWludCBwaXBlID0g aW50ZWxfY3J0Yy0+cGlwZTsKLQotCWludGVsX2NydGNfd2FpdF9mb3JfcGVuZGluZ19mbGlwcyhj cnRjKTsKLQotCWludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoY3J0Yyk7CisJc3RydWN0IGRybV9w bGFuZSAqcDsKIAogCWludGVsX2NydGNfZHBtc19vdmVybGF5X2Rpc2FibGUoaW50ZWxfY3J0Yyk7 Ci0JZm9yX2VhY2hfaW50ZWxfcGxhbmUoZGV2LCBpbnRlbF9wbGFuZSkgewotCQlpZiAoaW50ZWxf cGxhbmUtPnBpcGUgPT0gcGlwZSkgewotCQkJc3RydWN0IGRybV9jcnRjICpmcm9tID0gaW50ZWxf cGxhbmUtPmJhc2UuY3J0YzsKIAotCQkJaW50ZWxfcGxhbmUtPmRpc2FibGVfcGxhbmUoJmludGVs X3BsYW5lLT5iYXNlLAotCQkJCQkJICAgZnJvbSA/OiBjcnRjLCB0cnVlKTsKLQkJfQotCX0KKwlk cm1fZm9yX2VhY2hfcGxhbmVfbWFzayhwLCBjcnRjLT5kZXYsIG9sZF9jcnRjX3N0YXRlLT5wbGFu ZV9tYXNrKSB7CisJCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShw KTsKIAotCS8qCi0JICogRklYTUU6IE9uY2Ugd2UgZ3JvdyBwcm9wZXIgbnVjbGVhciBmbGlwIHN1 cHBvcnQgb3V0IG9mIHRoaXMgd2UgbmVlZAotCSAqIHRvIGNvbXB1dGUgdGhlIG1hc2sgb2YgZmxp cCBwbGFuZXMgcHJlY2lzZWx5LiBGb3IgdGhlIHRpbWUgYmVpbmcKLQkgKiBjb25zaWRlciB0aGlz IGEgZmxpcCB0byBhIE5VTEwgcGxhbmUuCi0JICovCi0JaW50ZWxfZnJvbnRidWZmZXJfZmxpcChk ZXYsIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKHBpcGUpKTsKKwkJaWYgKGNydGMtPnN0YXRl LT5hY3RpdmUpCisJCQlwbGFuZS0+ZGlzYWJsZV9wbGFuZShwLCBjcnRjLCB0cnVlKTsKKwkJZWxz ZQorCQkJcGxhbmUtPmNvbW1pdF9wbGFuZShwLCB0b19pbnRlbF9wbGFuZV9zdGF0ZShwLT5zdGF0 ZSkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXJvbmxha2VfY3J0Y19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQpAQCAtMTE1MDUsMTAgKzExNDQ3LDYgQEAgaW50IGludGVsX3BsYW5lX2F0 b21pY19jYWxjX2NoYW5nZXMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlm IChvbGRfcGxhbmVfc3RhdGUtPmJhc2UuZmIgJiYgIWZiKQogCQlpbnRlbF9jcnRjLT5hdG9taWMu ZGlzYWJsZWRfcGxhbmVzIHw9IDEgPDwgaTsKIAotCS8qIGRvbid0IHJ1biByZXN0IGR1cmluZyBt b2Rlc2V0IHlldCAqLwotCWlmICghaW50ZWxfY3J0Yy0+YWN0aXZlIHx8IG1vZGVfY2hhbmdlZCkK LQkJcmV0dXJuIDA7Ci0KIAlEUk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolaV0gd2FzIGVuYWJsZWQg JWkgbm93IGVuYWJsZWQ6ICVpXG4iLAogCQkJIGlkeCwgd2FzX2NydGNfZW5hYmxlZCwgaXNfY3J0 Y19lbmFibGVkKTsKIApAQCAtMTI4OTUsMTEgKzEyODMzLDExIEBAIHN0YXRpYyBpbnQgX19pbnRl bF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJCQljb250aW51ZTsK IAogCQlhbnlfbXMgPSB0cnVlOwotCQlpZiAoIWNydGNfc3RhdGUtPmFjdGl2ZSkKLQkJCWNvbnRp bnVlOwotCi0JCWludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoY3J0Yyk7Ci0JCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZGlzYWJsZShjcnRjKTsKKwkJaW50ZWxfcHJlX3BsYW5lX3VwZGF0ZSh0b19p bnRlbF9jcnRjKGNydGMpKTsKKwkJaWYgKGNydGNfc3RhdGUtPmFjdGl2ZSkgeworCQkJaW50ZWxf Y3J0Y19kaXNhYmxlX3BsYW5lcyhjcnRjLCBjcnRjX3N0YXRlKTsKKwkJCWRldl9wcml2LT5kaXNw bGF5LmNydGNfZGlzYWJsZShjcnRjKTsKKwkJfQogCX0KIAogCS8qIE9ubHkgYWZ0ZXIgZGlzYWJs aW5nIGFsbCBvdXRwdXQgcGlwZWxpbmVzIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGNhbiB3ZQpAQCAt MTI5MTMsMTUgKzEyODUxLDE3IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAKIAkvKiBOb3cgZW5hYmxlIHRoZSBjbG9ja3MsIHBs YW5lLCBwaXBlLCBhbmQgY29ubmVjdG9ycyB0aGF0IHdlIHNldCB1cC4gKi8KIAlmb3JfZWFjaF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Ci0JCWRybV9hdG9taWNf aGVscGVyX2NvbW1pdF9wbGFuZXNfb25fY3J0YyhjcnRjX3N0YXRlKTsKLQotCQlpZiAoIW5lZWRz X21vZGVzZXQoY3J0Yy0+c3RhdGUpIHx8ICFjcnRjLT5zdGF0ZS0+YWN0aXZlKQorCQlpZiAoIW5l ZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKSB7CisJCQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRf cGxhbmVzX29uX2NydGMoY3J0Y19zdGF0ZSk7CiAJCQljb250aW51ZTsKKwkJfQogCi0JCXVwZGF0 ZV9zY2FubGluZV9vZmZzZXQodG9faW50ZWxfY3J0YyhjcnRjKSk7Ci0KLQkJZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19lbmFibGUoY3J0Yyk7Ci0JCWludGVsX2NydGNfZW5hYmxlX3BsYW5lcyhjcnRj KTsKKwkJaWYgKGNydGMtPnN0YXRlLT5hY3RpdmUpIHsKKwkJCXVwZGF0ZV9zY2FubGluZV9vZmZz ZXQodG9faW50ZWxfY3J0YyhjcnRjKSk7CisJCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJs ZShjcnRjKTsKKwkJCWludGVsX2NydGNfZW5hYmxlX3BsYW5lcyhjcnRjKTsKKwkJfQorCQlpbnRl bF9wb3N0X3BsYW5lX3VwZGF0ZSh0b19pbnRlbF9jcnRjKGNydGMpKTsKIAl9CiAKIAkvKiBGSVhN RTogYWRkIHN1YnBpeGVsIG9yZGVyICovCkBAIC0xMzQ5OCw5ICsxMzQzOCw2IEBAIGludGVsX2Nv bW1pdF9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCWNydGMtPnggPSBz cmMtPngxID4+IDE2OwogCWNydGMtPnkgPSBzcmMtPnkxID4+IDE2OwogCi0JaWYgKCFpbnRlbF9j cnRjLT5hY3RpdmUpCi0JCXJldHVybjsKLQogCWlmIChzdGF0ZS0+dmlzaWJsZSkKIAkJLyogRklY TUU6IGtpbGwgdGhpcyBmYXN0Ym9vdCBoYWNrICovCiAJCWludGVsX3VwZGF0ZV9waXBlX3NpemUo aW50ZWxfY3J0Yyk7CkBAIC0xMzc1OCw5ICsxMzY5NSw2IEBAIGludGVsX2NvbW1pdF9jdXJzb3Jf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJY3J0Yy0+Y3Vyc29yX3ggPSBzdGF0ZS0+ YmFzZS5jcnRjX3g7CiAJY3J0Yy0+Y3Vyc29yX3kgPSBzdGF0ZS0+YmFzZS5jcnRjX3k7CiAKLQlp ZiAoIWludGVsX2NydGMtPmFjdGl2ZSkKLQkJcmV0dXJuOwotCiAJaWYgKGludGVsX2NydGMtPmN1 cnNvcl9ibyA9PSBvYmopCiAJCWdvdG8gdXBkYXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nw cml0ZS5jCmluZGV4IDZiNWQyNWYyYTkwYi4uNTQ0M2UxNmYzMDdlIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9zcHJpdGUuYwpAQCAtOTM2LDkgKzkzNiw2IEBAIGludGVsX2NvbW1pdF9zcHJpdGVf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlwbGFuZS0+ZmIgPSBmYjsKIAotCWlm ICghaW50ZWxfY3J0Yy0+YWN0aXZlKQotCQlyZXR1cm47Ci0KIAlpZiAoc3RhdGUtPnZpc2libGUp IHsKIAkJaW50ZWxfcGxhbmUtPnVwZGF0ZV9wbGFuZShwbGFuZSwgY3J0YywgZmIsCiAJCQkJCSAg c3RhdGUtPmRzdC54MSwgc3RhdGUtPmRzdC55MSwKLS0gCjIuMS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=