From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v8 6/6] drm/i915/skl: Update DDB values atomically with wms/plane attrs Date: Fri, 5 Aug 2016 20:07:12 -0400 Message-ID: <1470442033-21388-7-git-send-email-cpaul@redhat.com> References: <1470442033-21388-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: <1470442033-21388-1-git-send-email-cpaul@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Matt Roper Cc: Radhakrishna Sripada , linux-kernel@vger.kernel.org, Hans de Goede , dri-devel@lists.freedesktop.org, Daniel Vetter , Lyude 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 IHdhdGVybWFya3MgZm9yIHRoZSBjcnRjIHRoYXQgd2FzCiAgIHBhc3NlZCB0byB1cwoKRml4ZXM6 IDBlOGZiN2JhN2NhNSAoImRybS9pOTE1L3NrbDogRmx1c2ggdGhlIFdNIGNvbmZpZ3VyYXRpb24i KQpGaXhlczogODIxMWJkNWJkZjVlICgiZHJtL2k5MTUvc2tsOiBQcm9ncmFtIHRoZSBEREIgYWxs b2NhdGlvbiIpClNpZ25lZC1vZmYtYnk6IEx5dWRlIDxjcGF1bEByZWRoYXQuY29tPgpbb21pdHRp bmcgQ0MgZm9yIHN0YWJsZSwgc2luY2UgdGhpcyBwYXRjaCB3aWxsIG5lZWQgdG8gYmUgY2hhbmdl ZCBmb3IKc3VjaCBiYWNrcG9ydHMgZmlyc3RdCkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5 cmphbGFAbGludXguaW50ZWwuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBp bnRlbC5jb20+CkNjOiBSYWRoYWtyaXNobmEgU3JpcGFkYSA8cmFkaGFrcmlzaG5hLnNyaXBhZGFA aW50ZWwuY29tPgpDYzogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KQ2M6IE1h dHQgUm9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMTAwICsrKysrKysrKysrKysrKy0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDcgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMgICAgICB8IDIwNyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogMyBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMTcwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ODBiNmZkLi5hZDVmNmU1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMjkwMywxNiArMTI5MDMsMjMg QEAgc3RhdGljIHZvaWQgdmVyaWZ5X3dtX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJ CSAgaHdfZW50cnktPnN0YXJ0LCBod19lbnRyeS0+ZW5kKTsKIAl9CiAKLQkvKiBjdXJzb3IgKi8K LQlod19lbnRyeSA9ICZod19kZGIucGxhbmVbcGlwZV1bUExBTkVfQ1VSU09SXTsKLQlzd19lbnRy eSA9ICZzd19kZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl07Ci0KLQlpZiAoIXNrbF9kZGJf ZW50cnlfZXF1YWwoaHdfZW50cnksIHN3X2VudHJ5KSkgewotCQlEUk1fRVJST1IoIm1pc21hdGNo IGluIEREQiBzdGF0ZSBwaXBlICVjIGN1cnNvciAiCi0JCQkgICIoZXhwZWN0ZWQgKCV1LCV1KSwg Zm91bmQgKCV1LCV1KSlcbiIsCi0JCQkgIHBpcGVfbmFtZShwaXBlKSwKLQkJCSAgc3dfZW50cnkt PnN0YXJ0LCBzd19lbnRyeS0+ZW5kLAotCQkJICBod19lbnRyeS0+c3RhcnQsIGh3X2VudHJ5LT5l bmQpOworCS8qCisJICogY3Vyc29yCisJICogSWYgdGhlIGN1cnNvciBwbGFuZSBpc24ndCBhY3Rp dmUsIHdlIG1heSBub3QgaGF2ZSB1cGRhdGVkIGl0J3MgZGRiCisJICogYWxsb2NhdGlvbi4gSW4g dGhhdCBjYXNlIHNpbmNlIHRoZSBkZGIgYWxsb2NhdGlvbiB3aWxsIGJlIHVwZGF0ZWQKKwkgKiBv bmNlIHRoZSBwbGFuZSBiZWNvbWVzIHZpc2libGUsIHdlIGNhbiBza2lwIHRoaXMgY2hlY2sKKwkg Ki8KKwlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIpIHsKKwkJaHdfZW50cnkgPSAmaHdfZGRi LnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl07CisJCXN3X2VudHJ5ID0gJnN3X2RkYi0+cGxhbmVb cGlwZV1bUExBTkVfQ1VSU09SXTsKKworCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZW50 cnksIHN3X2VudHJ5KSkgeworCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlw ZSAlYyBjdXJzb3IgIgorCQkJCSAgIihleHBlY3RlZCAoJXUsJXUpLCBmb3VuZCAoJXUsJXUpKVxu IiwKKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwKKwkJCQkgIHN3X2VudHJ5LT5zdGFydCwgc3dfZW50 cnktPmVuZCwKKwkJCQkgIGh3X2VudHJ5LT5zdGFydCwgaHdfZW50cnktPmVuZCk7CisJCX0KIAl9 CiB9CiAKQEAgLTEzNjY0LDYgKzEzNjcxLDcyIEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9j cnRjcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJfQogfQogCitzdGF0aWMgdm9p ZCBza2xfdXBkYXRlX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAg ICAgdW5zaWduZWQgaW50ICpjcnRjX3ZibGFua19tYXNrKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9 IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOwor CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7CisJc3RydWN0IHNrbF9kZGJf YWxsb2NhdGlvbiAqbmV3X2RkYiA9ICZpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGI7CisJc3Ry dWN0IHNrbF9kZGJfYWxsb2NhdGlvbiBjdXJfZGRiOworCWJvb2wgcHJvZ3Jlc3M7CisJYm9vbCBy ZWFsbG9jYXRlZFtJOTE1X01BWF9QSVBFU10gPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKwlpbnQg d2FpdF92YmxfcGlwZXMsIGk7CisKKwkvKgorCSAqIFdoZW5ldmVyIHRoZSBudW1iZXIgb2YgYWN0 aXZlIHBpcGVzIGNoYW5nZSwgc28gZG9lcyB0aGUgRERCCisJICogYWxsb2NhdGlvbi4gRERCIGFs bG9jYXRpb25zIG9uIHBpcGVzIGNhbm5vdCBldmVyIG92ZXJsYXAgd2l0aAorCSAqIGVhY2hvdGhl ciBhdCBhbnkgcG9pbnQgaW4gdGltZSwgc28gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIG9yZGVyIHdl CisJICogdXBkYXRlIHRoZSBwaXBlcyBzbyB0aGF0IHdlIGVuc3VyZSB0aGV5IG5ldmVyIG92ZXJs YXAgaW5iZXR3ZWVuIEREQgorCSAqIHVwZGF0ZXMuCisJICovCisJZG8geworCQlwcm9ncmVzcyA9 IGZhbHNlOworCQl3YWl0X3ZibF9waXBlcyA9IDA7CisJCWN1cl9kZGIgPSBkZXZfcHJpdi0+d20u c2tsX2h3LmRkYjsKKworCQlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBvbGRf Y3J0Y19zdGF0ZSwgaSkgeworCQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19p bnRlbF9jcnRjKGNydGMpOworCQkJcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisKKwkJCWlmICgh aW50ZWxfY3J0Yy0+YWN0aXZlIHx8IG5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKQorCQkJCWNv bnRpbnVlOworCQkJaWYgKHNrbF9kZGJfYWxsb2NhdGlvbl9lcXVhbHMoJmN1cl9kZGIsIG5ld19k ZGIsIHBpcGUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNrbF9kZGJfYWxsb2NhdGlvbl9vdmVy bGFwcyhzdGF0ZSwgJmN1cl9kZGIsCisJCQkJCQkJbmV3X2RkYiwgcGlwZSkpCisJCQkJY29udGlu dWU7CisKKwkJCWludGVsX3VwZGF0ZV9jcnRjKGNydGMsIHN0YXRlLCBvbGRfY3J0Y19zdGF0ZSwK KwkJCQkJICBjcnRjX3ZibGFua19tYXNrKTsKKworCQkJd2FpdF92YmxfcGlwZXMgfD0gZHJtX2Ny dGNfbWFzayhjcnRjKTsKKwkJCXJlYWxsb2NhdGVkW3BpcGVdID0gdHJ1ZTsKKwkJCXByb2dyZXNz ID0gdHJ1ZTsKKwkJfQorCisJCS8qIFdhaXQgZm9yIGVhY2ggcGlwZSdzIG5ldyBhbGxvY2F0aW9u IHRvIHRha2UgZWZmZWN0ICovCisJCWludGVsX2F0b21pY193YWl0X2Zvcl92YmxhbmtzKGRldiwg ZGV2X3ByaXYsIHdhaXRfdmJsX3BpcGVzKTsKKwl9IHdoaWxlIChwcm9ncmVzcyk7CisKKwkvKgor CSAqIE5vdyB0aGF0IHdlJ3ZlIGhhbmRsZWQgYW55IGRkYiByZWFsbG9jYXRpb25zLCB3ZSBjYW4g Z28gYWhlYWQgYW5kCisJICogZW5hYmxlIGFueSBuZXcgcGlwZXMuCisJICovCisJZm9yX2VhY2hf Y3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsIGkpIHsKKwkJcGlwZSA9 IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7CisKKwkJaWYgKHJlYWxsb2NhdGVkW3BpcGVdIHx8 ICFjcnRjLT5zdGF0ZS0+YWN0aXZlKQorCQkJY29udGludWU7CisKKwkJaW50ZWxfdXBkYXRlX2Ny dGMoY3J0Yywgc3RhdGUsIG9sZF9jcnRjX3N0YXRlLAorCQkJCSAgY3J0Y192YmxhbmtfbWFzayk7 CisJfQorfQorCiBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0 ZS0+ZGV2OwpAQCAtMTUyMzMsOCArMTUzMDYsNiBAQCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9o b29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2LT5kaXNw bGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwogCX0KIAotCWRldl9wcml2LT5k aXNwbGF5LnVwZGF0ZV9jcnRjcyA9IGludGVsX3VwZGF0ZV9jcnRjczsKLQogCS8qIFJldHVybnMg dGhlIGNvcmUgZGlzcGxheSBjbG9jayBzcGVlZCAqLwogCWlmIChJU19TS1lMQUtFKGRldl9wcml2 KSB8fCBJU19LQUJZTEFLRShkZXZfcHJpdikpCiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9kaXNw bGF5X2Nsb2NrX3NwZWVkID0KQEAgLTE1MzI0LDYgKzE1Mzk1LDExIEBAIHZvaWQgaW50ZWxfaW5p dF9kaXNwbGF5X2hvb2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCXNr bF9tb2Rlc2V0X2NhbGNfY2RjbGs7CiAJfQogCisJaWYgKGRldl9wcml2LT5pbmZvLmdlbiA+PSA5 KQorCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3MgPSBza2xfdXBkYXRlX2NydGNzOwor CWVsc2UKKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX2NydGNzID0gaW50ZWxfdXBkYXRlX2Ny dGNzOworCiAJc3dpdGNoIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuKSB7CiAJY2FzZSAyOgog CQlkZXZfcHJpdi0+ZGlzcGxheS5xdWV1ZV9mbGlwID0gaW50ZWxfZ2VuMl9xdWV1ZV9mbGlwOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAxYWVkZDlmLi40YjE0OWRjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaApAQCAtMTcwMiw2ICsxNzAyLDEzIEBAIHZvaWQgc2tsX2RkYl9nZXRf aHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICBzdHJ1Y3Qg c2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgLyogb3V0ICovKTsKIGludCBza2xfZW5hYmxlX3NhZ3Yo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCBza2xfZGlzYWJsZV9zYWd2 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Citib29sIHNrbF9kZGJfYWxsb2Nh dGlvbl9lcXVhbHMoY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqb2xkLAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywKKwkJCSAgICAgICBlbnVt IHBpcGUgcGlwZSk7Citib29sIHNrbF9kZGJfYWxsb2NhdGlvbl9vdmVybGFwcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRp b24gKm9sZCwKKwkJCQkgY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqbmV3LAorCQkJ CSBlbnVtIHBpcGUgcGlwZSk7CiB2b2lkIHNrbF93cml0ZV9jdXJzb3Jfd20oc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMsCiAJCQkgY29uc3Qgc3RydWN0IHNrbF93bV92YWx1ZXMgKndtKTsK IHZvaWQgc2tsX3dyaXRlX3BsYW5lX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggM2YyM2U1ZS4uYTgwNDkwOCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCkBAIC0zODE1LDYgKzM4MTUsMTEgQEAgdm9pZCBza2xfd3JpdGVfcGxhbmVf d20oc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAJCQkgICB3bS0+cGxhbmVbcGlwZV1b cGxhbmVdW2xldmVsXSk7CiAJfQogCUk5MTVfV1JJVEUoUExBTkVfV01fVFJBTlMocGlwZSwgcGxh bmUpLCB3bS0+cGxhbmVfdHJhbnNbcGlwZV1bcGxhbmVdKTsKKworCXNrbF9kZGJfZW50cnlfd3Jp dGUoZGV2X3ByaXYsIFBMQU5FX0JVRl9DRkcocGlwZSwgcGxhbmUpLAorCQkJICAgICZ3bS0+ZGRi LnBsYW5lW3BpcGVdW3BsYW5lXSk7CisJc2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwgUExB TkVfTlYxMl9CVUZfQ0ZHKHBpcGUsIHBsYW5lKSwKKwkJCSAgICAmd20tPmRkYi55X3BsYW5lW3Bp cGVdW3BsYW5lXSk7CiB9CiAKIHZvaWQgc2tsX3dyaXRlX2N1cnNvcl93bShzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKQEAgLTM4MzEsMTcwICszODM2LDQ5IEBAIHZvaWQgc2tsX3dyaXRl X2N1cnNvcl93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKIAkJCSAgIHdtLT5wbGFu ZVtwaXBlXVtQTEFORV9DVVJTT1JdW2xldmVsXSk7CiAJfQogCUk5MTVfV1JJVEUoQ1VSX1dNX1RS QU5TKHBpcGUpLCB3bS0+cGxhbmVfdHJhbnNbcGlwZV1bUExBTkVfQ1VSU09SXSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIHNrbF93cml0ZV93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAotCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fdmFsdWVzICpuZXcpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjOwogCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKLQkJaW50IGk7Ci0JCWVu dW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQotCQlpZiAoKG5ldy0+ZGlydHlfcGlwZXMgJiBk cm1fY3J0Y19tYXNrKCZjcnRjLT5iYXNlKSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWNy dGMtPmFjdGl2ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1f cGxhbmVzKGNydGMpOyBpKyspIHsKLQkJCXNrbF9kZGJfZW50cnlfd3JpdGUoZGV2X3ByaXYsCi0J CQkJCSAgICBQTEFORV9CVUZfQ0ZHKHBpcGUsIGkpLAotCQkJCQkgICAgJm5ldy0+ZGRiLnBsYW5l W3BpcGVdW2ldKTsKLQkJCXNrbF9kZGJfZW50cnlfd3JpdGUoZGV2X3ByaXYsCi0JCQkJCSAgICBQ TEFORV9OVjEyX0JVRl9DRkcocGlwZSwgaSksCi0JCQkJCSAgICAmbmV3LT5kZGIueV9wbGFuZVtw aXBlXVtpXSk7Ci0JCX0KLQotCQlza2xfZGRiX2VudHJ5X3dyaXRlKGRldl9wcml2LCBDVVJfQlVG X0NGRyhwaXBlKSwKLQkJCQkgICAgJm5ldy0+ZGRiLnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0p OwotCX0KKwlza2xfZGRiX2VudHJ5X3dyaXRlKGRldl9wcml2LCBDVVJfQlVGX0NGRyhwaXBlKSwK KwkJCSAgICAmd20tPmRkYi5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdKTsKIH0KIAotLyoKLSAq IFdoZW4gc2V0dGluZyB1cCBhIG5ldyBEREIgYWxsb2NhdGlvbiBhcnJhbmdlbWVudCwgd2UgbmVl ZCB0byBjb3JyZWN0bHkKLSAqIHNlcXVlbmNlIHRoZSB0aW1lcyBhdCB3aGljaCB0aGUgbmV3IGFs bG9jYXRpb25zIGZvciB0aGUgcGlwZXMgYXJlIHRha2VuIGludG8KLSAqIGFjY291bnQgb3Igd2Un bGwgaGF2ZSBwaXBlcyBmZXRjaGluZyBmcm9tIHNwYWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRv Ci0gKiBhbm90aGVyIHBpcGUuCi0gKgotICogUm91Z2hseSB0aGUgc2VxdWVuY2UgbG9va3MgbGlr ZToKLSAqICAxLiByZS1hbGxvY2F0ZSB0aGUgcGlwZShzKSB3aXRoIHRoZSBhbGxvY2F0aW9uIGJl aW5nIHJlZHVjZWQgYW5kIG5vdAotICogICAgIG92ZXJsYXBwaW5nIHdpdGggYSBwcmV2aW91cyBs aWdodC11cCBwaXBlIChhbm90aGVyIHdheSB0byBwdXQgaXQgaXM6Ci0gKiAgICAgcGlwZXMgd2l0 aCB0aGVpciBuZXcgYWxsb2NhdGlvbiBzdHJpY2tseSBpbmNsdWRlZCBpbnRvIHRoZWlyIG9sZCBv bmVzKS4KLSAqICAyLiByZS1hbGxvY2F0ZSB0aGUgb3RoZXIgcGlwZXMgdGhhdCBnZXQgdGhlaXIg YWxsb2NhdGlvbiByZWR1Y2VkCi0gKiAgMy4gYWxsb2NhdGUgdGhlIHBpcGVzIGhhdmluZyB0aGVp ciBhbGxvY2F0aW9uIGluY3JlYXNlZAotICoKLSAqIFN0ZXBzIDEuIGFuZCAyLiBhcmUgaGVyZSB0 byB0YWtlIGNhcmUgb2YgdGhlIGZvbGxvd2luZyBjYXNlOgotICogLSBJbml0aWFsbHkgRERCIGxv b2tzIGxpa2UgdGhpczoKLSAqICAgICB8ICAgQiAgICB8ICAgQyAgICB8Ci0gKiAtIGVuYWJsZSBw aXBlIEEuCi0gKiAtIHBpcGUgQiBoYXMgYSByZWR1Y2VkIEREQiBhbGxvY2F0aW9uIHRoYXQgb3Zl cmxhcHMgd2l0aCB0aGUgb2xkIHBpcGUgQwotICogICBhbGxvY2F0aW9uCi0gKiAgICAgfCAgQSAg fCAgQiAgfCAgQyAgfAotICoKLSAqIFdlIG5lZWQgdG8gc2VxdWVuY2UgdGhlIHJlLWFsbG9jYXRp b246IEMsIEIsIEEgKGFuZCBub3QgQiwgQywgQSkuCi0gKi8KLQotc3RhdGljIHZvaWQKLXNrbF93 bV9mbHVzaF9waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUsIGludCBwYXNzKQotewotCWludCBwbGFuZTsKLQotCURSTV9ERUJVR19LTVMoImZsdXNo IHBpcGUgJWMgKHBhc3MgJWQpXG4iLCBwaXBlX25hbWUocGlwZSksIHBhc3MpOwotCi0JZm9yX2Vh Y2hfcGxhbmUoZGV2X3ByaXYsIHBpcGUsIHBsYW5lKSB7Ci0JCUk5MTVfV1JJVEUoUExBTkVfU1VS RihwaXBlLCBwbGFuZSksCi0JCQkgICBJOTE1X1JFQUQoUExBTkVfU1VSRihwaXBlLCBwbGFuZSkp KTsKLQl9Ci0JSTkxNV9XUklURShDVVJCQVNFKHBpcGUpLCBJOTE1X1JFQUQoQ1VSQkFTRShwaXBl KSkpOwotfQotCi1zdGF0aWMgYm9vbAotc2tsX2RkYl9hbGxvY2F0aW9uX2luY2x1ZGVkKGNvbnN0 IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm9sZCwKLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2ts X2RkYl9hbGxvY2F0aW9uICpuZXcsCi0JCQkgICAgZW51bSBwaXBlIHBpcGUpCitib29sIHNrbF9k ZGJfYWxsb2NhdGlvbl9lcXVhbHMoY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqb2xk LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywKKwkJCSAg ICAgICBlbnVtIHBpcGUgcGlwZSkKIHsKLQl1aW50MTZfdCBvbGRfc2l6ZSwgbmV3X3NpemU7Ci0K LQlvbGRfc2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmb2xkLT5waXBlW3BpcGVdKTsKLQluZXdf c2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmbmV3LT5waXBlW3BpcGVdKTsKLQotCXJldHVybiBv bGRfc2l6ZSAhPSBuZXdfc2l6ZSAmJgotCSAgICAgICBuZXctPnBpcGVbcGlwZV0uc3RhcnQgPj0g b2xkLT5waXBlW3BpcGVdLnN0YXJ0ICYmCi0JICAgICAgIG5ldy0+cGlwZVtwaXBlXS5lbmQgPD0g b2xkLT5waXBlW3BpcGVdLmVuZDsKKwlyZXR1cm4gbmV3LT5waXBlW3BpcGVdLnN0YXJ0ID09IG9s ZC0+cGlwZVtwaXBlXS5zdGFydCAmJgorCSAgICAgICBuZXctPnBpcGVbcGlwZV0uZW5kID09IG9s ZC0+cGlwZVtwaXBlXS5lbmQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNrbF9mbHVzaF93bV92YWx1ZXMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCXN0cnVjdCBza2xfd21fdmFs dWVzICpuZXdfdmFsdWVzKQorYm9vbCBza2xfZGRiX2FsbG9jYXRpb25fb3ZlcmxhcHMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX2RkYl9hbGxv Y2F0aW9uICpvbGQsCisJCQkJIGNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ldywK KwkJCQkgZW51bSBwaXBlIHBpcGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZf cHJpdi0+ZHJtOwotCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmN1cl9kZGIsICpuZXdfZGRi OwotCWJvb2wgcmVhbGxvY2F0ZWRbSTkxNV9NQVhfUElQRVNdID0ge307Ci0Jc3RydWN0IGludGVs X2NydGMgKmNydGM7Ci0JZW51bSBwaXBlIHBpcGU7Ci0KLQluZXdfZGRiID0gJm5ld192YWx1ZXMt PmRkYjsKLQljdXJfZGRiID0gJmRldl9wcml2LT53bS5za2xfaHcuZGRiOwotCi0JLyoKLQkgKiBG aXJzdCBwYXNzOiBmbHVzaCB0aGUgcGlwZXMgd2l0aCB0aGUgbmV3IGFsbG9jYXRpb24gY29udGFp bmVkIGludG8KLQkgKiB0aGUgb2xkIHNwYWNlLgotCSAqCi0JICogV2UnbGwgd2FpdCBmb3IgdGhl IHZibGFuayBvbiB0aG9zZSBwaXBlcyB0byBlbnN1cmUgd2UgY2FuIHNhZmVseQotCSAqIHJlLWFs bG9jYXRlIHRoZSBmcmVlZCBzcGFjZSB3aXRob3V0IHRoaXMgcGlwZSBmZXRjaGluZyBmcm9tIGl0 LgotCSAqLwotCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Ci0JCWlmICghY3J0Yy0+ YWN0aXZlKQotCQkJY29udGludWU7Ci0KLQkJcGlwZSA9IGNydGMtPnBpcGU7Ci0KLQkJaWYgKCFz a2xfZGRiX2FsbG9jYXRpb25faW5jbHVkZWQoY3VyX2RkYiwgbmV3X2RkYiwgcGlwZSkpCi0JCQlj b250aW51ZTsKLQotCQlza2xfd21fZmx1c2hfcGlwZShkZXZfcHJpdiwgcGlwZSwgMSk7Ci0JCWlu dGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHBpcGUpOwotCi0JCXJlYWxsb2NhdGVkW3BpcGVdID0g dHJ1ZTsKLQl9Ci0KLQotCS8qCi0JICogU2Vjb25kIHBhc3M6IGZsdXNoIHRoZSBwaXBlcyB0aGF0 IGFyZSBoYXZpbmcgdGhlaXIgYWxsb2NhdGlvbgotCSAqIHJlZHVjZWQsIGJ1dCBvdmVybGFwcGlu ZyB3aXRoIGEgcHJldmlvdXMgYWxsb2NhdGlvbi4KLQkgKgotCSAqIEhlcmUgYXMgd2VsbCB3ZSBu ZWVkIHRvIHdhaXQgZm9yIHRoZSB2YmxhbmsgdG8gbWFrZSBzdXJlIHRoZSBmcmVlZAotCSAqIHNw YWNlIGlzIG5vdCB1c2VkIGFueW1vcmUuCi0JICovCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYs IGNydGMpIHsKLQkJaWYgKCFjcnRjLT5hY3RpdmUpCi0JCQljb250aW51ZTsKLQotCQlwaXBlID0g Y3J0Yy0+cGlwZTsKLQotCQlpZiAocmVhbGxvY2F0ZWRbcGlwZV0pCi0JCQljb250aW51ZTsKLQot CQlpZiAoc2tsX2RkYl9lbnRyeV9zaXplKCZuZXdfZGRiLT5waXBlW3BpcGVdKSA8Ci0JCSAgICBz a2xfZGRiX2VudHJ5X3NpemUoJmN1cl9kZGItPnBpcGVbcGlwZV0pKSB7Ci0JCQlza2xfd21fZmx1 c2hfcGlwZShkZXZfcHJpdiwgcGlwZSwgMik7Ci0JCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2 LCBwaXBlKTsKLQkJCXJlYWxsb2NhdGVkW3BpcGVdID0gdHJ1ZTsKLQkJfQotCX0KLQotCS8qCi0J ICogVGhpcmQgcGFzczogZmx1c2ggdGhlIHBpcGVzIHRoYXQgZ290IG1vcmUgc3BhY2UgYWxsb2Nh dGVkLgotCSAqCi0JICogV2UgZG9uJ3QgbmVlZCB0byBhY3RpdmVseSB3YWl0IGZvciB0aGUgdXBk YXRlIGhlcmUsIG5leHQgdmJsYW5rCi0JICogd2lsbCBqdXN0IGdldCBtb3JlIEREQiBzcGFjZSB3 aXRoIHRoZSBjb3JyZWN0IFdNIHZhbHVlcy4KLQkgKi8KLQlmb3JfZWFjaF9pbnRlbF9jcnRjKGRl diwgY3J0YykgewotCQlpZiAoIWNydGMtPmFjdGl2ZSkKLQkJCWNvbnRpbnVlOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjOworCWVudW0gcGlwZSBvdGhlcnA7CiAKLQkJcGlwZSA9IGNydGMtPnBpcGU7CisJZm9yX2Vh Y2hfaW50ZWxfY3J0YyhkZXYsIGludGVsX2NydGMpIHsKKwkJb3RoZXJwID0gaW50ZWxfY3J0Yy0+ cGlwZTsKIAogCQkvKgotCQkgKiBBdCB0aGlzIHBvaW50LCBvbmx5IHRoZSBwaXBlcyBtb3JlIHNw YWNlIHRoYW4gYmVmb3JlIGFyZQotCQkgKiBsZWZ0IHRvIHJlLWFsbG9jYXRlLgorCQkgKiBXaGVu IGNoZWNraW5nIGZvciBvdmVybGFwcywgd2UgZG9uJ3Qgd2FudCB0bzoKKwkJICogIC0gQ29tcGFy ZSBhZ2FpbnN0IG91cnNlbHZlcworCQkgKiAgLSBDb21wYXJlIGFnYWluc3QgcGlwZXMgdGhhdCB3 aWxsIGJlIGRpc2FibGVkIGluIHN0ZXAgMAorCQkgKiAgLSBDb21wYXJlIGFnYWluc3QgcGlwZXMg dGhhdCB3b24ndCBiZSBlbmFibGVkIHVudGlsIHN0ZXAgMwogCQkgKi8KLQkJaWYgKHJlYWxsb2Nh dGVkW3BpcGVdKQorCQlpZiAob3RoZXJwID09IHBpcGUgfHwgIW5ldy0+cGlwZVtvdGhlcnBdLmVu ZCB8fAorCQkgICAgIW9sZC0+cGlwZVtvdGhlcnBdLmVuZCkKIAkJCWNvbnRpbnVlOwogCi0JCXNr bF93bV9mbHVzaF9waXBlKGRldl9wcml2LCBwaXBlLCAzKTsKKwkJaWYgKChuZXctPnBpcGVbcGlw ZV0uc3RhcnQgPj0gb2xkLT5waXBlW290aGVycF0uc3RhcnQgJiYKKwkJICAgICBuZXctPnBpcGVb cGlwZV0uc3RhcnQgPCBvbGQtPnBpcGVbb3RoZXJwXS5lbmQpIHx8CisJCSAgICAob2xkLT5waXBl W290aGVycF0uc3RhcnQgPj0gbmV3LT5waXBlW3BpcGVdLnN0YXJ0ICYmCisJCSAgICAgb2xkLT5w aXBlW290aGVycF0uc3RhcnQgPCBuZXctPnBpcGVbcGlwZV0uZW5kKSkKKwkJCXJldHVybiB0cnVl OwogCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGludCBza2xfdXBkYXRlX3BpcGVf d20oc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCkBAIC00MTgxLDcgKzQwNjUsNyBAQCBz dGF0aWMgdm9pZCBza2xfdXBkYXRlX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlzdHJ1Y3Qg c2tsX3dtX3ZhbHVlcyAqaHdfdmFscyA9ICZkZXZfcHJpdi0+d20uc2tsX2h3OwogCXN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKIAlzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1h bDsKLQlpbnQgcGlwZTsKKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CiAKIAlp ZiAoKHJlc3VsdHMtPmRpcnR5X3BpcGVzICYgZHJtX2NydGNfbWFzayhjcnRjKSkgPT0gMCkKIAkJ cmV0dXJuOwpAQCAtNDE5MCwxNSArNDA3NCwyMiBAQCBzdGF0aWMgdm9pZCBza2xfdXBkYXRlX3dt KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAogCW11dGV4X2xvY2soJmRldl9wcml2LT53bS53bV9t dXRleCk7CiAKLQlza2xfd3JpdGVfd21fdmFsdWVzKGRldl9wcml2LCByZXN1bHRzKTsKLQlza2xf Zmx1c2hfd21fdmFsdWVzKGRldl9wcml2LCByZXN1bHRzKTsKLQogCS8qCi0JICogU3RvcmUgdGhl IG5ldyBjb25maWd1cmF0aW9uIChidXQgb25seSBmb3IgdGhlIHBpcGVzIHRoYXQgaGF2ZQotCSAq IGNoYW5nZWQ7IHRoZSBvdGhlciB2YWx1ZXMgd2VyZW4ndCByZWNvbXB1dGVkKS4KKwkgKiBJZiB0 aGlzIHBpcGUgaXNuJ3QgYWN0aXZlIGFscmVhZHksIHdlJ3JlIGdvaW5nIHRvIGJlIGVuYWJsaW5n IGl0CisJICogdmVyeSBzb29uLiBTaW5jZSBpdCdzIHNhZmUgdG8gdXBkYXRlIGEgcGlwZSdzIGRk YiBhbGxvY2F0aW9uIHdoaWxlCisJICogdGhlIHBpcGUncyBzaHV0IG9mZiwganVzdCBkbyBzbyBo ZXJlLiBBbHJlYWR5IGFjdGl2ZSBwaXBlcyB3aWxsIGhhdmUKKwkgKiB0aGVpciB3YXRlcm1hcmtz IHVwZGF0ZWQgb25jZSB3ZSB1cGRhdGUgdGhlaXIgcGxhbmVzLgogCSAqLwotCWZvcl9lYWNoX3Bp cGVfbWFza2VkKGRldl9wcml2LCBwaXBlLCByZXN1bHRzLT5kaXJ0eV9waXBlcykKLQkJc2tsX2Nv cHlfd21fZm9yX3BpcGUoaHdfdmFscywgcmVzdWx0cywgcGlwZSk7CisJaWYgKGNydGMtPnN0YXRl LT5hY3RpdmVfY2hhbmdlZCkgeworCQlpbnQgcGxhbmU7CisKKwkJZm9yIChwbGFuZSA9IDA7IHBs YW5lIDwgaW50ZWxfbnVtX3BsYW5lcyhpbnRlbF9jcnRjKTsgcGxhbmUrKykKKwkJCXNrbF93cml0 ZV9wbGFuZV93bShpbnRlbF9jcnRjLCByZXN1bHRzLCBwbGFuZSk7CisKKwkJc2tsX3dyaXRlX2N1 cnNvcl93bShpbnRlbF9jcnRjLCByZXN1bHRzKTsKKwl9CisKKwlza2xfY29weV93bV9mb3JfcGlw ZShod192YWxzLCByZXN1bHRzLCBwaXBlKTsKIAogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPndt LndtX211dGV4KTsKIH0KLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK