From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v9] drm/i915/skl: Update DDB values atomically with wms/plane attrs Date: Mon, 8 Aug 2016 10:35:17 -0400 Message-ID: <1470666918-8918-1-git-send-email-cpaul@redhat.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Matt Roper Cc: David Airlie , linux-kernel@vger.kernel.org, Hans de Goede , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org Tm93IHRoYXQgd2UgY2FuIGhvb2sgaW50byB1cGRhdGVfY3J0Y3MgYW5kIGNvbnRyb2wgdGhlIG9y ZGVyIGluIHdoaWNoIHdlCnVwZGF0ZSBDUlRDcyBhdCBlYWNoIG1vZGVzZXQsIHdlIGNhbiBmaW5p c2ggdGhlIGZpbmFsIHN0ZXAgb2YgZml4aW5nClNreWxha2UncyB3YXRlcm1hcmsgaGFuZGxpbmcg YnkgcGVyZm9ybWluZyBEREIgdXBkYXRlcyBhdCB0aGUgc2FtZSB0aW1lCmFzIHBsYW5lIHVwZGF0 ZXMgYW5kIHdhdGVybWFyayB1cGRhdGVzLgoKVGhlIGZpcnN0IG1ham9yIGNoYW5nZSBpbiB0aGlz IHBhdGNoIGlzIHNrbF91cGRhdGVfY3J0Y3MoKSwgd2hpY2gKaGFuZGxlcyBlbnN1cmluZyB0aGF0 IHdlIG9yZGVyIGVhY2ggQ1JUQyB1cGRhdGUgaW4gb3VyIGF0b21pYyBjb21taXRzCnByb3Blcmx5 IHNvIHRoYXQgdGhleSBob25vciB0aGUgRERCIGZsdXNoIG9yZGVyLgoKVGhlIHNlY29uZCBtYWpv ciBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGUgb3JkZXIgaW4gd2hpY2ggd2UgZmx1c2ggdGhl CnBpcGVzLiBXaGlsZSB0aGUgcHJldmlvdXMgb3JkZXIgbWF5IGhhdmUgd29ya2VkLCBpdCBjYW4n dCBiZSB1c2VkIGluCnRoaXMgYXBwcm9hY2ggc2luY2UgaXQgbm8gbG9uZ2VyIHdpbGwgZG8gdGhl IHJpZ2h0IHRoaW5nLiBGb3IgZXhhbXBsZSwKdXNpbmcgdGhlIG9sZCBkZGIgZmx1c2ggb3JkZXI6 CgpXZSBoYXZlIHBpcGVzIEEsIEIsIGFuZCBDIGVuYWJsZWQsIGFuZCB3ZSdyZSBkaXNhYmxpbmcg Qy4gSW5pdGlhbCBkZGIKYWxsb2NhdGlvbiBsb29rcyBsaWtlIHRoaXM6Cgp8ICAgQSAgIHwgICBC ICAgfHh4eHh4eHh8CgpTaW5jZSB3ZSdyZSBwZXJmb3JtaW5nIHRoZSBkZGIgdXBkYXRlcyBhZnRl ciBwZXJmb3JtaW5nIGFueSBDUlRDCmRpc2FibGVtZW50cyBpbiBpbnRlbF9hdG9taWNfY29tbWl0 X3RhaWwoKSwgdGhlIHNwYWNlIHRvIHRoZSByaWdodCBvZgpwaXBlIEIgaXMgdW5hbGxvY2F0ZWQu CgoxLiBGbHVzaCBwaXBlcyB3aXRoIG5ldyBhbGxvY2F0aW9uIGNvbnRhaW5lZCBpbnRvIG9sZCBz cGFjZS4gTm9uZQogICBhcHBseSwgc28gd2Ugc2tpcCB0aGlzCjIuIEZsdXNoIHBpcGVzIGhhdmlu ZyB0aGVpciBhbGxvY2F0aW9uIHJlZHVjZWQsIGJ1dCBvdmVybGFwcGluZyB3aXRoIGEKICAgcHJl dmlvdXMgYWxsb2NhdGlvbi4gTm9uZSBhcHBseSwgc28gd2UgYWxzbyBza2lwIHRoaXMKMy4gRmx1 c2ggcGlwZXMgdGhhdCBnb3QgbW9yZSBzcGFjZSBhbGxvY2F0ZWQuIFRoaXMgYXBwbGllcyB0byBB IGFuZCBCLAogICBnaXZpbmcgdXMgdGhlIGZvbGxvd2luZyB1cGRhdGUgb3JkZXI6IEEsIEIKClRo aXMgaXMgd3JvbmcsIHNpbmNlIHVwZGF0aW5nIHBpcGUgQSBmaXJzdCB3aWxsIGNhdXNlIGl0IHRv IG92ZXJsYXAgd2l0aApCIGFuZCBwb3RlbnRpYWxseSBidXJzdCBpbnRvIGZsYW1lcy4gT3VyIG5l dyBvcmRlciAoc2VlIHRoZSBjb2RlCmNvbW1lbnRzIGZvciBkZXRhaWxzKSB3b3VsZCB1cGRhdGUg dGhlIHBpcGVzIGluIHRoZSBwcm9wZXIgb3JkZXI6IEIsIEEuCgpBcyB3ZWxsLCB3ZSBjYWxjdWxh dGUgdGhlIG9yZGVyIGZvciBlYWNoIEREQiB1cGRhdGUgZHVyaW5nIHRoZSBjaGVjawpwaGFzZSwg YW5kIHJlZmVyZW5jZSBpdCBsYXRlciBpbiB0aGUgY29tbWl0IHBoYXNlIHdoZW4gd2UgaGl0CnNr bF91cGRhdGVfY3J0Y3MoKS4KClRoaXMgbG9uZyBvdmVyZHVlIHBhdGNoIGZpeGVzIHRoZSByZXN0 IG9mIHRoZSB1bmRlcnJ1bnMgb24gU2t5bGFrZS4KCkNoYW5nZXMgc2luY2UgdjE6CiAtIEFkZCBz a2xfZGRiX2VudHJ5X3dyaXRlKCkgZm9yIGN1cnNvciBpbnRvIHNrbF93cml0ZV9jdXJzb3Jfd20o KQpDaGFuZ2VzIHNpbmNlIHYyOgogLSBVc2UgdGhlIG1ldGhvZCBmb3IgdXBkYXRpbmcgQ1JUQ3Mg dGhhdCBWaWxsZSBzdWdnZXN0ZWQKIC0gSW4gc2tsX3VwZGF0ZV93bSgpLCBvbmx5IGNvcHkgdGhl IHdhdGVybWFya3MgZm9yIHRoZSBjcnRjIHRoYXQgd2FzCiAgIHBhc3NlZCB0byB1cwpDaGFuZ2Vz IHNpbmNlIHYzOgogLSBTbWFsbCBjb21tZW50IGZpeCBpbiBza2xfZGRiX2FsbG9jYXRpb25fb3Zl cmxhcHMoKQoKRml4ZXM6IDBlOGZiN2JhN2NhNSAoImRybS9pOTE1L3NrbDogRmx1c2ggdGhlIFdN IGNvbmZpZ3VyYXRpb24iKQpGaXhlczogODIxMWJkNWJkZjVlICgiZHJtL2k5MTUvc2tsOiBQcm9n cmFtIHRoZSBEREIgYWxsb2NhdGlvbiIpCltvbWl0dGluZyBDQyBmb3Igc3RhYmxlLCBzaW5jZSB0 aGlzIHBhdGNoIHdpbGwgbmVlZCB0byBiZSBjaGFuZ2VkIGZvcgpzdWNoIGJhY2twb3J0cyBmaXJz dF0KClRlc3RjYXNlOiBrbXNfY3Vyc29yX2xlZ2FjeQpTaWduZWQtb2ZmLWJ5OiBMeXVkZSA8Y3Bh dWxAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxh bmtob3JzdEBsaW51eC5pbnRlbC5jb20+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRl bC5jb20+CkNjOiBSYWRoYWtyaXNobmEgU3JpcGFkYSA8cmFkaGFrcmlzaG5hLnNyaXBhZGFAaW50 ZWwuY29tPgpDYzogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KQ2M6IE1hdHQg Um9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jIHwgMTAwICsrKysrKysrKysrKysrKy0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDcgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMgICAgICB8IDIwNyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMTcwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ODBiNmZkLi5hZDVmNmU1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMjkwMywxNiArMTI5MDMsMjMgQEAg c3RhdGljIHZvaWQgdmVyaWZ5X3dtX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCSAg aHdfZW50cnktPnN0YXJ0LCBod19lbnRyeS0+ZW5kKTsKIAl9CiAKLQkvKiBjdXJzb3IgKi8KLQlo d19lbnRyeSA9ICZod19kZGIucGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXTsKLQlzd19lbnRyeSA9 ICZzd19kZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl07Ci0KLQlpZiAoIXNrbF9kZGJfZW50 cnlfZXF1YWwoaHdfZW50cnksIHN3X2VudHJ5KSkgewotCQlEUk1fRVJST1IoIm1pc21hdGNoIGlu IEREQiBzdGF0ZSBwaXBlICVjIGN1cnNvciAiCi0JCQkgICIoZXhwZWN0ZWQgKCV1LCV1KSwgZm91 bmQgKCV1LCV1KSlcbiIsCi0JCQkgIHBpcGVfbmFtZShwaXBlKSwKLQkJCSAgc3dfZW50cnktPnN0 YXJ0LCBzd19lbnRyeS0+ZW5kLAotCQkJICBod19lbnRyeS0+c3RhcnQsIGh3X2VudHJ5LT5lbmQp OworCS8qCisJICogY3Vyc29yCisJICogSWYgdGhlIGN1cnNvciBwbGFuZSBpc24ndCBhY3RpdmUs IHdlIG1heSBub3QgaGF2ZSB1cGRhdGVkIGl0J3MgZGRiCisJICogYWxsb2NhdGlvbi4gSW4gdGhh dCBjYXNlIHNpbmNlIHRoZSBkZGIgYWxsb2NhdGlvbiB3aWxsIGJlIHVwZGF0ZWQKKwkgKiBvbmNl IHRoZSBwbGFuZSBiZWNvbWVzIHZpc2libGUsIHdlIGNhbiBza2lwIHRoaXMgY2hlY2sKKwkgKi8K KwlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIpIHsKKwkJaHdfZW50cnkgPSAmaHdfZGRiLnBs YW5lW3BpcGVdW1BMQU5FX0NVUlNPUl07CisJCXN3X2VudHJ5ID0gJnN3X2RkYi0+cGxhbmVbcGlw ZV1bUExBTkVfQ1VSU09SXTsKKworCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZW50cnks IHN3X2VudHJ5KSkgeworCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlwZSAl YyBjdXJzb3IgIgorCQkJCSAgIihleHBlY3RlZCAoJXUsJXUpLCBmb3VuZCAoJXUsJXUpKVxuIiwK KwkJCQkgIHBpcGVfbmFtZShwaXBlKSwKKwkJCQkgIHN3X2VudHJ5LT5zdGFydCwgc3dfZW50cnkt PmVuZCwKKwkJCQkgIGh3X2VudHJ5LT5zdGFydCwgaHdfZW50cnktPmVuZCk7CisJCX0KIAl9CiB9 CiAKQEAgLTEzNjY0LDYgKzEzNjcxLDcyIEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jcnRj cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJfQogfQogCitzdGF0aWMgdm9pZCBz a2xfdXBkYXRlX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAg dW5zaWduZWQgaW50ICpjcnRjX3ZibGFua19tYXNrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRv X2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7CisJc3RydWN0IHNrbF9kZGJfYWxs b2NhdGlvbiAqbmV3X2RkYiA9ICZpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGI7CisJc3RydWN0 IHNrbF9kZGJfYWxsb2NhdGlvbiBjdXJfZGRiOworCWJvb2wgcHJvZ3Jlc3M7CisJYm9vbCByZWFs bG9jYXRlZFtJOTE1X01BWF9QSVBFU10gPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKwlpbnQgd2Fp dF92YmxfcGlwZXMsIGk7CisKKwkvKgorCSAqIFdoZW5ldmVyIHRoZSBudW1iZXIgb2YgYWN0aXZl IHBpcGVzIGNoYW5nZSwgc28gZG9lcyB0aGUgRERCCisJICogYWxsb2NhdGlvbi4gRERCIGFsbG9j YXRpb25zIG9uIHBpcGVzIGNhbm5vdCBldmVyIG92ZXJsYXAgd2l0aAorCSAqIGVhY2hvdGhlciBh dCBhbnkgcG9pbnQgaW4gdGltZSwgc28gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIG9yZGVyIHdlCisJ ICogdXBkYXRlIHRoZSBwaXBlcyBzbyB0aGF0IHdlIGVuc3VyZSB0aGV5IG5ldmVyIG92ZXJsYXAg aW5iZXR3ZWVuIEREQgorCSAqIHVwZGF0ZXMuCisJICovCisJZG8geworCQlwcm9ncmVzcyA9IGZh bHNlOworCQl3YWl0X3ZibF9waXBlcyA9IDA7CisJCWN1cl9kZGIgPSBkZXZfcHJpdi0+d20uc2ts X2h3LmRkYjsKKworCQlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBvbGRfY3J0 Y19zdGF0ZSwgaSkgeworCQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRl bF9jcnRjKGNydGMpOworCQkJcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisKKwkJCWlmICghaW50 ZWxfY3J0Yy0+YWN0aXZlIHx8IG5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKQorCQkJCWNvbnRp bnVlOworCQkJaWYgKHNrbF9kZGJfYWxsb2NhdGlvbl9lcXVhbHMoJmN1cl9kZGIsIG5ld19kZGIs IHBpcGUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNrbF9kZGJfYWxsb2NhdGlvbl9vdmVybGFw cyhzdGF0ZSwgJmN1cl9kZGIsCisJCQkJCQkJbmV3X2RkYiwgcGlwZSkpCisJCQkJY29udGludWU7 CisKKwkJCWludGVsX3VwZGF0ZV9jcnRjKGNydGMsIHN0YXRlLCBvbGRfY3J0Y19zdGF0ZSwKKwkJ CQkJICBjcnRjX3ZibGFua19tYXNrKTsKKworCQkJd2FpdF92YmxfcGlwZXMgfD0gZHJtX2NydGNf bWFzayhjcnRjKTsKKwkJCXJlYWxsb2NhdGVkW3BpcGVdID0gdHJ1ZTsKKwkJCXByb2dyZXNzID0g dHJ1ZTsKKwkJfQorCisJCS8qIFdhaXQgZm9yIGVhY2ggcGlwZSdzIG5ldyBhbGxvY2F0aW9uIHRv IHRha2UgZWZmZWN0ICovCisJCWludGVsX2F0b21pY193YWl0X2Zvcl92YmxhbmtzKGRldiwgZGV2 X3ByaXYsIHdhaXRfdmJsX3BpcGVzKTsKKwl9IHdoaWxlIChwcm9ncmVzcyk7CisKKwkvKgorCSAq IE5vdyB0aGF0IHdlJ3ZlIGhhbmRsZWQgYW55IGRkYiByZWFsbG9jYXRpb25zLCB3ZSBjYW4gZ28g YWhlYWQgYW5kCisJICogZW5hYmxlIGFueSBuZXcgcGlwZXMuCisJICovCisJZm9yX2VhY2hfY3J0 Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsIGkpIHsKKwkJcGlwZSA9IHRv X2ludGVsX2NydGMoY3J0YyktPnBpcGU7CisKKwkJaWYgKHJlYWxsb2NhdGVkW3BpcGVdIHx8ICFj cnRjLT5zdGF0ZS0+YWN0aXZlKQorCQkJY29udGludWU7CisKKwkJaW50ZWxfdXBkYXRlX2NydGMo Y3J0Yywgc3RhdGUsIG9sZF9jcnRjX3N0YXRlLAorCQkJCSAgY3J0Y192YmxhbmtfbWFzayk7CisJ fQorfQorCiBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ ZGV2OwpAQCAtMTUyMzMsOCArMTUzMDYsNiBAQCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9ob29r cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2LT5kaXNwbGF5 LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwogCX0KIAotCWRldl9wcml2LT5kaXNw bGF5LnVwZGF0ZV9jcnRjcyA9IGludGVsX3VwZGF0ZV9jcnRjczsKLQogCS8qIFJldHVybnMgdGhl IGNvcmUgZGlzcGxheSBjbG9jayBzcGVlZCAqLwogCWlmIChJU19TS1lMQUtFKGRldl9wcml2KSB8 fCBJU19LQUJZTEFLRShkZXZfcHJpdikpCiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9kaXNwbGF5 X2Nsb2NrX3NwZWVkID0KQEAgLTE1MzI0LDYgKzE1Mzk1LDExIEBAIHZvaWQgaW50ZWxfaW5pdF9k aXNwbGF5X2hvb2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCXNrbF9t b2Rlc2V0X2NhbGNfY2RjbGs7CiAJfQogCisJaWYgKGRldl9wcml2LT5pbmZvLmdlbiA+PSA5KQor CQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3MgPSBza2xfdXBkYXRlX2NydGNzOworCWVs c2UKKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX2NydGNzID0gaW50ZWxfdXBkYXRlX2NydGNz OworCiAJc3dpdGNoIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuKSB7CiAJY2FzZSAyOgogCQlk ZXZfcHJpdi0+ZGlzcGxheS5xdWV1ZV9mbGlwID0gaW50ZWxfZ2VuMl9xdWV1ZV9mbGlwOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAxYWVkZDlmLi40YjE0OWRjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaApAQCAtMTcwMiw2ICsxNzAyLDEzIEBAIHZvaWQgc2tsX2RkYl9nZXRfaHdf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICBzdHJ1Y3Qgc2ts X2RkYl9hbGxvY2F0aW9uICpkZGIgLyogb3V0ICovKTsKIGludCBza2xfZW5hYmxlX3NhZ3Yoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCBza2xfZGlzYWJsZV9zYWd2KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Citib29sIHNrbF9kZGJfYWxsb2NhdGlv bl9lcXVhbHMoY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqb2xkLAorCQkJICAgICAg IGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywKKwkJCSAgICAgICBlbnVtIHBp cGUgcGlwZSk7Citib29sIHNrbF9kZGJfYWxsb2NhdGlvbl9vdmVybGFwcyhzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24g Km9sZCwKKwkJCQkgY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqbmV3LAorCQkJCSBl bnVtIHBpcGUgcGlwZSk7CiB2b2lkIHNrbF93cml0ZV9jdXJzb3Jfd20oc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMsCiAJCQkgY29uc3Qgc3RydWN0IHNrbF93bV92YWx1ZXMgKndtKTsKIHZv aWQgc2tsX3dyaXRlX3BsYW5lX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKaW5kZXggM2YyM2U1ZS4uZmNjOGU0NCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jCkBAIC0zODE1LDYgKzM4MTUsMTEgQEAgdm9pZCBza2xfd3JpdGVfcGxhbmVfd20o c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAJCQkgICB3bS0+cGxhbmVbcGlwZV1bcGxh bmVdW2xldmVsXSk7CiAJfQogCUk5MTVfV1JJVEUoUExBTkVfV01fVFJBTlMocGlwZSwgcGxhbmUp LCB3bS0+cGxhbmVfdHJhbnNbcGlwZV1bcGxhbmVdKTsKKworCXNrbF9kZGJfZW50cnlfd3JpdGUo ZGV2X3ByaXYsIFBMQU5FX0JVRl9DRkcocGlwZSwgcGxhbmUpLAorCQkJICAgICZ3bS0+ZGRiLnBs YW5lW3BpcGVdW3BsYW5lXSk7CisJc2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwgUExBTkVf TlYxMl9CVUZfQ0ZHKHBpcGUsIHBsYW5lKSwKKwkJCSAgICAmd20tPmRkYi55X3BsYW5lW3BpcGVd W3BsYW5lXSk7CiB9CiAKIHZvaWQgc2tsX3dyaXRlX2N1cnNvcl93bShzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YywKQEAgLTM4MzEsMTcwICszODM2LDQ5IEBAIHZvaWQgc2tsX3dyaXRlX2N1 cnNvcl93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKIAkJCSAgIHdtLT5wbGFuZVtw aXBlXVtQTEFORV9DVVJTT1JdW2xldmVsXSk7CiAJfQogCUk5MTVfV1JJVEUoQ1VSX1dNX1RSQU5T KHBpcGUpLCB3bS0+cGxhbmVfdHJhbnNbcGlwZV1bUExBTkVfQ1VSU09SXSk7Ci19Ci0KLXN0YXRp YyB2b2lkIHNrbF93cml0ZV93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAotCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fdmFsdWVzICpuZXcpCi17Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRj OwogCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKLQkJaW50IGk7Ci0JCWVudW0g cGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQotCQlpZiAoKG5ldy0+ZGlydHlfcGlwZXMgJiBkcm1f Y3J0Y19tYXNrKCZjcnRjLT5iYXNlKSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWNydGMt PmFjdGl2ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxh bmVzKGNydGMpOyBpKyspIHsKLQkJCXNrbF9kZGJfZW50cnlfd3JpdGUoZGV2X3ByaXYsCi0JCQkJ CSAgICBQTEFORV9CVUZfQ0ZHKHBpcGUsIGkpLAotCQkJCQkgICAgJm5ldy0+ZGRiLnBsYW5lW3Bp cGVdW2ldKTsKLQkJCXNrbF9kZGJfZW50cnlfd3JpdGUoZGV2X3ByaXYsCi0JCQkJCSAgICBQTEFO RV9OVjEyX0JVRl9DRkcocGlwZSwgaSksCi0JCQkJCSAgICAmbmV3LT5kZGIueV9wbGFuZVtwaXBl XVtpXSk7Ci0JCX0KLQotCQlza2xfZGRiX2VudHJ5X3dyaXRlKGRldl9wcml2LCBDVVJfQlVGX0NG RyhwaXBlKSwKLQkJCQkgICAgJm5ldy0+ZGRiLnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0pOwot CX0KKwlza2xfZGRiX2VudHJ5X3dyaXRlKGRldl9wcml2LCBDVVJfQlVGX0NGRyhwaXBlKSwKKwkJ CSAgICAmd20tPmRkYi5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdKTsKIH0KIAotLyoKLSAqIFdo ZW4gc2V0dGluZyB1cCBhIG5ldyBEREIgYWxsb2NhdGlvbiBhcnJhbmdlbWVudCwgd2UgbmVlZCB0 byBjb3JyZWN0bHkKLSAqIHNlcXVlbmNlIHRoZSB0aW1lcyBhdCB3aGljaCB0aGUgbmV3IGFsbG9j YXRpb25zIGZvciB0aGUgcGlwZXMgYXJlIHRha2VuIGludG8KLSAqIGFjY291bnQgb3Igd2UnbGwg aGF2ZSBwaXBlcyBmZXRjaGluZyBmcm9tIHNwYWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRvCi0g KiBhbm90aGVyIHBpcGUuCi0gKgotICogUm91Z2hseSB0aGUgc2VxdWVuY2UgbG9va3MgbGlrZToK LSAqICAxLiByZS1hbGxvY2F0ZSB0aGUgcGlwZShzKSB3aXRoIHRoZSBhbGxvY2F0aW9uIGJlaW5n IHJlZHVjZWQgYW5kIG5vdAotICogICAgIG92ZXJsYXBwaW5nIHdpdGggYSBwcmV2aW91cyBsaWdo dC11cCBwaXBlIChhbm90aGVyIHdheSB0byBwdXQgaXQgaXM6Ci0gKiAgICAgcGlwZXMgd2l0aCB0 aGVpciBuZXcgYWxsb2NhdGlvbiBzdHJpY2tseSBpbmNsdWRlZCBpbnRvIHRoZWlyIG9sZCBvbmVz KS4KLSAqICAyLiByZS1hbGxvY2F0ZSB0aGUgb3RoZXIgcGlwZXMgdGhhdCBnZXQgdGhlaXIgYWxs b2NhdGlvbiByZWR1Y2VkCi0gKiAgMy4gYWxsb2NhdGUgdGhlIHBpcGVzIGhhdmluZyB0aGVpciBh bGxvY2F0aW9uIGluY3JlYXNlZAotICoKLSAqIFN0ZXBzIDEuIGFuZCAyLiBhcmUgaGVyZSB0byB0 YWtlIGNhcmUgb2YgdGhlIGZvbGxvd2luZyBjYXNlOgotICogLSBJbml0aWFsbHkgRERCIGxvb2tz IGxpa2UgdGhpczoKLSAqICAgICB8ICAgQiAgICB8ICAgQyAgICB8Ci0gKiAtIGVuYWJsZSBwaXBl IEEuCi0gKiAtIHBpcGUgQiBoYXMgYSByZWR1Y2VkIEREQiBhbGxvY2F0aW9uIHRoYXQgb3Zlcmxh cHMgd2l0aCB0aGUgb2xkIHBpcGUgQwotICogICBhbGxvY2F0aW9uCi0gKiAgICAgfCAgQSAgfCAg QiAgfCAgQyAgfAotICoKLSAqIFdlIG5lZWQgdG8gc2VxdWVuY2UgdGhlIHJlLWFsbG9jYXRpb246 IEMsIEIsIEEgKGFuZCBub3QgQiwgQywgQSkuCi0gKi8KLQotc3RhdGljIHZvaWQKLXNrbF93bV9m bHVzaF9waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBp cGUsIGludCBwYXNzKQotewotCWludCBwbGFuZTsKLQotCURSTV9ERUJVR19LTVMoImZsdXNoIHBp cGUgJWMgKHBhc3MgJWQpXG4iLCBwaXBlX25hbWUocGlwZSksIHBhc3MpOwotCi0JZm9yX2VhY2hf cGxhbmUoZGV2X3ByaXYsIHBpcGUsIHBsYW5lKSB7Ci0JCUk5MTVfV1JJVEUoUExBTkVfU1VSRihw aXBlLCBwbGFuZSksCi0JCQkgICBJOTE1X1JFQUQoUExBTkVfU1VSRihwaXBlLCBwbGFuZSkpKTsK LQl9Ci0JSTkxNV9XUklURShDVVJCQVNFKHBpcGUpLCBJOTE1X1JFQUQoQ1VSQkFTRShwaXBlKSkp OwotfQotCi1zdGF0aWMgYm9vbAotc2tsX2RkYl9hbGxvY2F0aW9uX2luY2x1ZGVkKGNvbnN0IHN0 cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm9sZCwKLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tsX2Rk Yl9hbGxvY2F0aW9uICpuZXcsCi0JCQkgICAgZW51bSBwaXBlIHBpcGUpCitib29sIHNrbF9kZGJf YWxsb2NhdGlvbl9lcXVhbHMoY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqb2xkLAor CQkJICAgICAgIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywKKwkJCSAgICAg ICBlbnVtIHBpcGUgcGlwZSkKIHsKLQl1aW50MTZfdCBvbGRfc2l6ZSwgbmV3X3NpemU7Ci0KLQlv bGRfc2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmb2xkLT5waXBlW3BpcGVdKTsKLQluZXdfc2l6 ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmbmV3LT5waXBlW3BpcGVdKTsKLQotCXJldHVybiBvbGRf c2l6ZSAhPSBuZXdfc2l6ZSAmJgotCSAgICAgICBuZXctPnBpcGVbcGlwZV0uc3RhcnQgPj0gb2xk LT5waXBlW3BpcGVdLnN0YXJ0ICYmCi0JICAgICAgIG5ldy0+cGlwZVtwaXBlXS5lbmQgPD0gb2xk LT5waXBlW3BpcGVdLmVuZDsKKwlyZXR1cm4gbmV3LT5waXBlW3BpcGVdLnN0YXJ0ID09IG9sZC0+ cGlwZVtwaXBlXS5zdGFydCAmJgorCSAgICAgICBuZXctPnBpcGVbcGlwZV0uZW5kID09IG9sZC0+ cGlwZVtwaXBlXS5lbmQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNrbF9mbHVzaF93bV92YWx1ZXMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCXN0cnVjdCBza2xfd21fdmFsdWVz ICpuZXdfdmFsdWVzKQorYm9vbCBza2xfZGRiX2FsbG9jYXRpb25fb3ZlcmxhcHMoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0 aW9uICpvbGQsCisJCQkJIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywKKwkJ CQkgZW51bSBwaXBlIHBpcGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJp di0+ZHJtOwotCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmN1cl9kZGIsICpuZXdfZGRiOwot CWJvb2wgcmVhbGxvY2F0ZWRbSTkxNV9NQVhfUElQRVNdID0ge307Ci0Jc3RydWN0IGludGVsX2Ny dGMgKmNydGM7Ci0JZW51bSBwaXBlIHBpcGU7Ci0KLQluZXdfZGRiID0gJm5ld192YWx1ZXMtPmRk YjsKLQljdXJfZGRiID0gJmRldl9wcml2LT53bS5za2xfaHcuZGRiOwotCi0JLyoKLQkgKiBGaXJz dCBwYXNzOiBmbHVzaCB0aGUgcGlwZXMgd2l0aCB0aGUgbmV3IGFsbG9jYXRpb24gY29udGFpbmVk IGludG8KLQkgKiB0aGUgb2xkIHNwYWNlLgotCSAqCi0JICogV2UnbGwgd2FpdCBmb3IgdGhlIHZi bGFuayBvbiB0aG9zZSBwaXBlcyB0byBlbnN1cmUgd2UgY2FuIHNhZmVseQotCSAqIHJlLWFsbG9j YXRlIHRoZSBmcmVlZCBzcGFjZSB3aXRob3V0IHRoaXMgcGlwZSBmZXRjaGluZyBmcm9tIGl0Lgot CSAqLwotCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Ci0JCWlmICghY3J0Yy0+YWN0 aXZlKQotCQkJY29udGludWU7Ci0KLQkJcGlwZSA9IGNydGMtPnBpcGU7Ci0KLQkJaWYgKCFza2xf ZGRiX2FsbG9jYXRpb25faW5jbHVkZWQoY3VyX2RkYiwgbmV3X2RkYiwgcGlwZSkpCi0JCQljb250 aW51ZTsKLQotCQlza2xfd21fZmx1c2hfcGlwZShkZXZfcHJpdiwgcGlwZSwgMSk7Ci0JCWludGVs X3dhaXRfZm9yX3ZibGFuayhkZXYsIHBpcGUpOwotCi0JCXJlYWxsb2NhdGVkW3BpcGVdID0gdHJ1 ZTsKLQl9Ci0KLQotCS8qCi0JICogU2Vjb25kIHBhc3M6IGZsdXNoIHRoZSBwaXBlcyB0aGF0IGFy ZSBoYXZpbmcgdGhlaXIgYWxsb2NhdGlvbgotCSAqIHJlZHVjZWQsIGJ1dCBvdmVybGFwcGluZyB3 aXRoIGEgcHJldmlvdXMgYWxsb2NhdGlvbi4KLQkgKgotCSAqIEhlcmUgYXMgd2VsbCB3ZSBuZWVk IHRvIHdhaXQgZm9yIHRoZSB2YmxhbmsgdG8gbWFrZSBzdXJlIHRoZSBmcmVlZAotCSAqIHNwYWNl IGlzIG5vdCB1c2VkIGFueW1vcmUuCi0JICovCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNy dGMpIHsKLQkJaWYgKCFjcnRjLT5hY3RpdmUpCi0JCQljb250aW51ZTsKLQotCQlwaXBlID0gY3J0 Yy0+cGlwZTsKLQotCQlpZiAocmVhbGxvY2F0ZWRbcGlwZV0pCi0JCQljb250aW51ZTsKLQotCQlp ZiAoc2tsX2RkYl9lbnRyeV9zaXplKCZuZXdfZGRiLT5waXBlW3BpcGVdKSA8Ci0JCSAgICBza2xf ZGRiX2VudHJ5X3NpemUoJmN1cl9kZGItPnBpcGVbcGlwZV0pKSB7Ci0JCQlza2xfd21fZmx1c2hf cGlwZShkZXZfcHJpdiwgcGlwZSwgMik7Ci0JCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBw aXBlKTsKLQkJCXJlYWxsb2NhdGVkW3BpcGVdID0gdHJ1ZTsKLQkJfQotCX0KLQotCS8qCi0JICog VGhpcmQgcGFzczogZmx1c2ggdGhlIHBpcGVzIHRoYXQgZ290IG1vcmUgc3BhY2UgYWxsb2NhdGVk LgotCSAqCi0JICogV2UgZG9uJ3QgbmVlZCB0byBhY3RpdmVseSB3YWl0IGZvciB0aGUgdXBkYXRl IGhlcmUsIG5leHQgdmJsYW5rCi0JICogd2lsbCBqdXN0IGdldCBtb3JlIEREQiBzcGFjZSB3aXRo IHRoZSBjb3JyZWN0IFdNIHZhbHVlcy4KLQkgKi8KLQlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwg Y3J0YykgewotCQlpZiAoIWNydGMtPmFjdGl2ZSkKLQkJCWNvbnRpbnVlOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj OworCWVudW0gcGlwZSBvdGhlcnA7CiAKLQkJcGlwZSA9IGNydGMtPnBpcGU7CisJZm9yX2VhY2hf aW50ZWxfY3J0YyhkZXYsIGludGVsX2NydGMpIHsKKwkJb3RoZXJwID0gaW50ZWxfY3J0Yy0+cGlw ZTsKIAogCQkvKgotCQkgKiBBdCB0aGlzIHBvaW50LCBvbmx5IHRoZSBwaXBlcyBtb3JlIHNwYWNl IHRoYW4gYmVmb3JlIGFyZQotCQkgKiBsZWZ0IHRvIHJlLWFsbG9jYXRlLgorCQkgKiBXaGVuIGNo ZWNraW5nIGZvciBvdmVybGFwcywgd2UgZG9uJ3Qgd2FudCB0bzoKKwkJICogIC0gQ29tcGFyZSBh Z2FpbnN0IG91cnNlbHZlcworCQkgKiAgLSBDb21wYXJlIGFnYWluc3QgcGlwZXMgdGhhdCB3aWxs IGJlL2FyZSBkaXNhYmxlZAorCQkgKiAgLSBDb21wYXJlIGFnYWluc3QgcGlwZXMgdGhhdCBhcmVu J3QgZW5hYmxlZCB5ZXQKIAkJICovCi0JCWlmIChyZWFsbG9jYXRlZFtwaXBlXSkKKwkJaWYgKG90 aGVycCA9PSBwaXBlIHx8ICFuZXctPnBpcGVbb3RoZXJwXS5lbmQgfHwKKwkJICAgICFvbGQtPnBp cGVbb3RoZXJwXS5lbmQpCiAJCQljb250aW51ZTsKIAotCQlza2xfd21fZmx1c2hfcGlwZShkZXZf cHJpdiwgcGlwZSwgMyk7CisJCWlmICgobmV3LT5waXBlW3BpcGVdLnN0YXJ0ID49IG9sZC0+cGlw ZVtvdGhlcnBdLnN0YXJ0ICYmCisJCSAgICAgbmV3LT5waXBlW3BpcGVdLnN0YXJ0IDwgb2xkLT5w aXBlW290aGVycF0uZW5kKSB8fAorCQkgICAgKG9sZC0+cGlwZVtvdGhlcnBdLnN0YXJ0ID49IG5l dy0+cGlwZVtwaXBlXS5zdGFydCAmJgorCQkgICAgIG9sZC0+cGlwZVtvdGhlcnBdLnN0YXJ0IDwg bmV3LT5waXBlW3BpcGVdLmVuZCkpCisJCQlyZXR1cm4gdHJ1ZTsKIAl9CisKKwlyZXR1cm4gZmFs c2U7CiB9CiAKIHN0YXRpYyBpbnQgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3N0YXRlLApAQCAtNDE4MSw3ICs0MDY1LDcgQEAgc3RhdGljIHZvaWQgc2tsX3VwZGF0 ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc3RydWN0IHNrbF93bV92YWx1ZXMgKmh3X3Zh bHMgPSAmZGV2X3ByaXYtPndtLnNrbF9odzsKIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0 YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAJc3RydWN0IHNrbF9waXBl X3dtICpwaXBlX3dtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWw7Ci0JaW50IHBpcGU7CisJZW51 bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCiAJaWYgKChyZXN1bHRzLT5kaXJ0eV9w aXBlcyAmIGRybV9jcnRjX21hc2soY3J0YykpID09IDApCiAJCXJldHVybjsKQEAgLTQxOTAsMTUg KzQwNzQsMjIgQEAgc3RhdGljIHZvaWQgc2tsX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCiAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+d20ud21fbXV0ZXgpOwogCi0Jc2tsX3dyaXRl X3dtX3ZhbHVlcyhkZXZfcHJpdiwgcmVzdWx0cyk7Ci0Jc2tsX2ZsdXNoX3dtX3ZhbHVlcyhkZXZf cHJpdiwgcmVzdWx0cyk7Ci0KIAkvKgotCSAqIFN0b3JlIHRoZSBuZXcgY29uZmlndXJhdGlvbiAo YnV0IG9ubHkgZm9yIHRoZSBwaXBlcyB0aGF0IGhhdmUKLQkgKiBjaGFuZ2VkOyB0aGUgb3RoZXIg dmFsdWVzIHdlcmVuJ3QgcmVjb21wdXRlZCkuCisJICogSWYgdGhpcyBwaXBlIGlzbid0IGFjdGl2 ZSBhbHJlYWR5LCB3ZSdyZSBnb2luZyB0byBiZSBlbmFibGluZyBpdAorCSAqIHZlcnkgc29vbi4g U2luY2UgaXQncyBzYWZlIHRvIHVwZGF0ZSBhIHBpcGUncyBkZGIgYWxsb2NhdGlvbiB3aGlsZQor CSAqIHRoZSBwaXBlJ3Mgc2h1dCBvZmYsIGp1c3QgZG8gc28gaGVyZS4gQWxyZWFkeSBhY3RpdmUg cGlwZXMgd2lsbCBoYXZlCisJICogdGhlaXIgd2F0ZXJtYXJrcyB1cGRhdGVkIG9uY2Ugd2UgdXBk YXRlIHRoZWlyIHBsYW5lcy4KIAkgKi8KLQlmb3JfZWFjaF9waXBlX21hc2tlZChkZXZfcHJpdiwg cGlwZSwgcmVzdWx0cy0+ZGlydHlfcGlwZXMpCi0JCXNrbF9jb3B5X3dtX2Zvcl9waXBlKGh3X3Zh bHMsIHJlc3VsdHMsIHBpcGUpOworCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZlX2NoYW5nZWQpIHsK KwkJaW50IHBsYW5lOworCisJCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGludGVsX251bV9wbGFu ZXMoaW50ZWxfY3J0Yyk7IHBsYW5lKyspCisJCQlza2xfd3JpdGVfcGxhbmVfd20oaW50ZWxfY3J0 YywgcmVzdWx0cywgcGxhbmUpOworCisJCXNrbF93cml0ZV9jdXJzb3Jfd20oaW50ZWxfY3J0Yywg cmVzdWx0cyk7CisJfQorCisJc2tsX2NvcHlfd21fZm9yX3BpcGUoaHdfdmFscywgcmVzdWx0cywg cGlwZSk7CiAKIAltdXRleF91bmxvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7CiB9Ci0tIAoy LjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==