From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15DE6C433E6 for ; Fri, 22 Jan 2021 20:57:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 66E8A23B09 for ; Fri, 22 Jan 2021 20:57:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 66E8A23B09 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9E30D6EA5B; Fri, 22 Jan 2021 20:57:05 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 125C96EA58 for ; Fri, 22 Jan 2021 20:57:04 +0000 (UTC) IronPort-SDR: 4mA41pysk8VdAbPqzksSS9evNCjKLqKcdW/ZmhTKg9pC634PqM26vudjJjkEMDCIM9WRp2oMvP plZAqWIE9Agw== X-IronPort-AV: E=McAfee;i="6000,8403,9872"; a="179649244" X-IronPort-AV: E=Sophos;i="5.79,367,1602572400"; d="scan'208";a="179649244" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jan 2021 12:57:00 -0800 IronPort-SDR: XE4TjJz7Tcn5J4KzU6nB48BfvSy8hzNvOAJ5XhH57HTCShMiwnat+/fBTcxrT73nU936cG2dsx b+3s2mU/hD3w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,367,1602572400"; d="scan'208";a="468040438" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by fmsmga001.fm.intel.com with SMTP; 22 Jan 2021 12:56:58 -0800 Received: by stinkbox (sSMTP sendmail emulation); Fri, 22 Jan 2021 22:56:57 +0200 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Date: Fri, 22 Jan 2021 22:56:32 +0200 Message-Id: <20210122205633.18492-8-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210122205633.18492-1-ville.syrjala@linux.intel.com> References: <20210122205633.18492-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 7/8] drm/i915: Encapsulate dbuf state handling harder X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCklu IG9yZGVyIHRvIG1ha2UgdGhlIGRidWYgc3RhdGUgY29tcHV0YXRpb24gbGVzcyBmcmFnaWxlCmxl dCdzIG1ha2UgaXQgc3RhbmQgb24gaXRzIG93biBmZWV0IGJ5IG5vdCByZXF1aXJpbmcgc29tZW9u ZQp0byBwZWVrIGludG8gYSBjcnlzdGFsbCBiYWxsIGFoZWFkIG9mIHRpbWUgdG8gZmlndXJlIG91 dAp3aGljaCBwaXBlcyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBzdGF0ZSB1bmRlciB3aGljaCBw b3RlbnRpYWwKZnV0dXJlIGNvbmRpdGlvbnMuIEluc3RlYWQgd2UgY29tcHV0ZSBlYWNoIHBpZWNl IG9mIHRoZSBzdGF0ZQphcyB3ZSBnbyBhbG9uZywgYW5kIGlmIGFueSBmYWxsb3V0IG9jY3VycyB0 aGF0IGFmZmVjdHMgbW9yZSB0aGFuCnRoZSBjdXJyZW50IHNldCBvZiBwaXBlcyB3ZSBhZGQgdGhl IGFmZmVjdGVkIHBpcGVzIHRvIHRoZSBzdGF0ZQpuYXR1cmFsbHkuCgpUaGF0IHJlcXVpcmVzIHRo YXQgd2UgdHJhY2sgYSBmZXcgZXh0cmEgdGhpZ25zIGluIHRoZSBnbG9iYWwKZGJ1ZiBzdGF0ZTog ZGJ1ZiBzbGljZXMgZm9yIGVhY2ggcGlwZSwgYW5kIHRoZSB3ZWlnaHQgZWFjaApwaXBlIGhhcyB3 aGVuIGRpc3RyaWJ1dGluZyB0aGUgc2FtZSBzZXQgb2Ygc2xpY2UocykgYmV0d2VlbgptdWx0aXBs ZSBwaXBlcy4gRWFzeSBlbm91Z2guCgpXZSBkbyBuZWVkIHRvIGZvbGxvdyBhIHNvbWV3aGF0IGNh cmVmdWwgc2VxdWVuY2Ugb2YgY29tcHV0YXRpb25zCnRob3VnaCBhcyB0aGVyZSBhcmUgc2V2ZXJh bCBzdGVwcyBpbnZvbHZlZCBpbiBjb29raW5nIHVwIHRoZSBkYnVmCnN0YXRlLiBUaG9ndWggd2Ug Y291bGQgYXZvaWQgc29tZSBvZiB0aGF0IGJ5IGNvbXB1dGluZyBtb3JlIHRoaW5ncwpvbiBkZW1h bmQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGVhcmxpZXIgc3RlcCBvZiB0aGUgYWxnb3JpdGhtIHRv CmhhdmUgZmlsbGVkIGl0IG91dC4gSSB0aGluayB0aGUgZW5kIHJlc3VsdCBpcyBzdGlsbCByZWFz b25hYmxlCmFzIHRoZSBlbnRpcmUgc2VxdWVuY2UgaXMgcHJldHR5IG11Y2ggY29uc29saWRhdGVk IGludG8gYSBzaW5nbGUKZnVuY3Rpb24gaW5zdGVhZCBvZiBiZWluZyBzcHJlYWQgYXJvdW5kIGFs bCBvdmVyLgoKVGhlIHJvdWdoIHNlcXVlbmNlIGlzIHRoaXM6CjEuIGNhbGN1bGF0ZSBhY3RpdmVf cGlwZXMKMi4gY2FsY3VsYXRlIGRidWYgc2xpY2VzIGZvciBldmVyeSBwaXBlCjMuIGNhbGN1bGF0 ZSB0b3RhbCBlbmFibGVkIHNsaWNlcwo0LiBjYWxjdWxhdGUgbmV3IGRidWYgd2VpZ2h0cyBmb3Ig YW55IGNydGMgaW4gdGhlIHN0YXRlCjUuIGNhbGN1bGF0ZSBuZXcgZGRiIGVudHJ5IGZvciBldmVy eSBwaXBlIGJhc2VkIG9uIHRoZSBzZXRzIG9mCiAgIHNsaWNlcyBhbmQgd2VpZ2h0cywgYW5kIGFk ZCBhbnkgYWZmZWN0ZWQgY3J0YyB0byB0aGUgc3RhdGUKNi4gY2FsY3VsYXRlIG5ldyBwbGFuZSBk ZGIgZW50cmllcyBmb3IgYWxsIGNydGNzIGluIHRoZSBzdGF0ZSwKICAgYW5kIGFkZCBhbnkgYWZm ZWN0ZWQgcGxhbmUgdG8gdGhlIHN0YXRlIHNvIHRoYXQgd2UnbGwgcGVyZm9ybQogICB0aGUgcmVx dWlzaXRlIGh3IHJlcHJvZ3JhbW1pbmcKCkFuZCBhcyBhIG5pY2UgYm9udXMgd2UgZ2V0IHRvIHRo cm93IGRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtCm91dCB0aGUgd2luZG93LgoKdjI6IEtl ZXAgY3J0Y19zdGF0ZS0+d20uc2tsLmRkYgoKUmV2aWV3ZWQtYnk6IFN0YW5pc2xhdiBMaXNvdnNr aXkgPHN0YW5pc2xhdi5saXNvdnNraXlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8ICAxNSAtCiAuLi4vZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYyAgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5IC0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMgICAgICAgICAgICAgICB8IDM4MiArKysrKysrLS0tLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmggICAgICAgICAgICAgICB8ICAgMiArCiA1IGZp bGVzIGNoYW5nZWQsIDEzOSBpbnNlcnRpb25zKCspLCAyNzAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCA3ZWM3ZDk0Yjhj ZGIuLjE0YmU2MGQ4ZGFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMKQEAgLTEyNjAwLDIwICsxMjYwMCw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKHJldCkKIAkJZ290byBmYWls OwogCi0JLyoKLQkgKiBkaXN0cnVzdF9iaW9zX3dtIHdpbGwgZm9yY2UgYSBmdWxsIGRidWYgcmVj b21wdXRhdGlvbgotCSAqIGJ1dCB0aGUgaGFyZHdhcmUgc3RhdGUgd2lsbCBvbmx5IGdldCB1cGRh dGVkIGFjY29yZGluZ2x5Ci0JICogaWYgc3RhdGUtPm1vZGVzZXQ9PXRydWUuIEhlbmNlIGRpc3Ry dXN0X2Jpb3Nfd209PXRydWUgJiYKLQkgKiBzdGF0ZS0+bW9kZXNldD09ZmFsc2UgaXMgYW4gaW52 YWxpZCBjb21iaW5hdGlvbiB3aGljaAotCSAqIHdvdWxkIGNhdXNlIHRoZSBoYXJkd2FyZSBhbmQg c29mdHdhcmUgZGJ1ZiBzdGF0ZSB0byBnZXQKLQkgKiBvdXQgb2Ygc3luYy4gV2UgbXVzdCBwcmV2 ZW50IHRoYXQuCi0JICoKLQkgKiBGSVhNRSBjbGVhbiB1cCB0aGlzIG1lc3MgYW5kIGludHJvZHVj ZSBiZXR0ZXIKLQkgKiBzdGF0ZSB0cmFja2luZyBmb3IgZGJ1Zi4KLQkgKi8KLQlpZiAoZGV2X3By aXYtPndtLmRpc3RydXN0X2Jpb3Nfd20pCi0JCWFueV9tcyA9IHRydWU7Ci0KIAlpbnRlbF9mYmNf Y2hvb3NlX2NydGMoZGV2X3ByaXYsIHN0YXRlKTsKIAlyZXQgPSBjYWxjX3dhdGVybWFya19kYXRh KHN0YXRlKTsKIAlpZiAocmV0KQpAQCAtMTM0OTgsNyArMTM0ODQsNiBAQCBzdGF0aWMgaW50IGlu dGVsX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJaW50ZWxfcnVudGlt ZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCBzdGF0ZS0+d2FrZXJlZik7CiAJCXJldHVy biByZXQ7CiAJfQotCWRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtID0gZmFsc2U7CiAJaW50 ZWxfc2hhcmVkX2RwbGxfc3dhcF9zdGF0ZShzdGF0ZSk7CiAJaW50ZWxfYXRvbWljX3RyYWNrX2Zi cyhzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXlfZGVidWdmcy5jCmluZGV4IDg4NWQyZDNjOTFhMy4uZDYyYjE4ZDVlY2Q4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdm cy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1 Z2ZzLmMKQEAgLTExMzksNyArMTEzOSw2IEBAIHN0YXRpYyBzc2l6ZV90IGk5MTVfaXBjX3N0YXR1 c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCiAJCWlm ICghZGV2X3ByaXYtPmlwY19lbmFibGVkICYmIGVuYWJsZSkKIAkJCWRybV9pbmZvKCZkZXZfcHJp di0+ZHJtLAogCQkJCSAiRW5hYmxpbmcgSVBDOiBXTSB3aWxsIGJlIHByb3BlciBvbmx5IGFmdGVy IG5leHQgY29tbWl0XG4iKTsKLQkJZGV2X3ByaXYtPndtLmRpc3RydXN0X2Jpb3Nfd20gPSB0cnVl OwogCQlkZXZfcHJpdi0+aXBjX2VuYWJsZWQgPSBlbmFibGU7CiAJCWludGVsX2VuYWJsZV9pcGMo ZGV2X3ByaXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDdlZmI1MDFlMjJkMi4u YTc3YjkxZjcxNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTExMjIsMTUgKzExMjIs NiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCSAqIGNydGNfc3RhdGUtPndtLm5lZWRf cG9zdHZibF91cGRhdGUuCiAJCSAqLwogCQlzdHJ1Y3QgbXV0ZXggd21fbXV0ZXg7Ci0KLQkJLyoK LQkJICogU2V0IGR1cmluZyBIVyByZWFkb3V0IG9mIHdhdGVybWFya3MvRERCLiAgU29tZSBwbGF0 Zm9ybXMKLQkJICogbmVlZCB0byBrbm93IHdoZW4gd2UncmUgc3RpbGwgdXNpbmcgQklPUy1wcm92 aWRlZCB2YWx1ZXMKLQkJICogKHdoaWNoIHdlIGRvbid0IGZ1bGx5IHRydXN0KS4KLQkJICoKLQkJ ICogRklYTUUgZ2V0IHJpZCBvZiB0aGlzLgotCQkgKi8KLQkJYm9vbCBkaXN0cnVzdF9iaW9zX3dt OwogCX0gd207CiAKIAlzdHJ1Y3QgZHJhbV9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmlu ZGV4IDU3NWUzZGZiNTNjOS4uYjFkMjRkM2RmZWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMK QEAgLTQxMDAsNTYgKzQxMDAsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9jcnRjX2Rk Yl93ZWlnaHQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3QKIAlyZXR1cm4g aGRpc3BsYXk7CiB9CiAKLXN0YXRpYyB1OCBza2xfY29tcHV0ZV9kYnVmX3NsaWNlcyhzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgIHU4IGFjdGl2ZV9waXBlcyk7Ci0KLXN0YXRpYyBpbnQg aW50ZWxfY3J0Y19kYnVmX3dlaWdodHMoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUs Ci0JCQkJICAgc3RydWN0IGludGVsX2NydGMgKmZvcl9jcnRjLAotCQkJCSAgIHVuc2lnbmVkIGlu dCAqd2VpZ2h0X3N0YXJ0LAotCQkJCSAgIHVuc2lnbmVkIGludCAqd2VpZ2h0X2VuZCwKLQkJCQkg ICB1bnNpZ25lZCBpbnQgKndlaWdodF90b3RhbCkKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZGJ1 Zl93ZWlnaHRzKGNvbnN0IHN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpkYnVmX3N0YXRlLAorCQkJ CSAgICBlbnVtIHBpcGUgZm9yX3BpcGUsCisJCQkJICAgIHVuc2lnbmVkIGludCAqd2VpZ2h0X3N0 YXJ0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKndlaWdodF9lbmQsCisJCQkJICAgIHVuc2lnbmVk IGludCAqd2VpZ2h0X3RvdGFsKQogewotCWNvbnN0IHN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpv bGRfZGJ1Zl9zdGF0ZSA9Ci0JCWludGVsX2F0b21pY19nZXRfb2xkX2RidWZfc3RhdGUoc3RhdGUp OwotCXN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpuZXdfZGJ1Zl9zdGF0ZSA9Ci0JCWludGVsX2F0 b21pY19nZXRfbmV3X2RidWZfc3RhdGUoc3RhdGUpOwotCXU4IGFjdGl2ZV9waXBlcyA9IG5ld19k YnVmX3N0YXRlLT5hY3RpdmVfcGlwZXM7Ci0JZW51bSBwaXBlIGZvcl9waXBlID0gZm9yX2NydGMt PnBpcGU7Ci0JY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKmNydGM7Ci0JdTggZGJ1Zl9zbGljZV9tYXNrOwotCXU4IHRvdGFsX3Ns aWNlX21hc2s7Ci0JaW50IGksIHJldDsKLQotCS8qCi0JICogR2V0IGFsbG93ZWQgREJ1ZiBzbGlj ZXMgZm9yIGNvcnJlc3BvbmRlbnQgcGlwZSBhbmQgcGxhdGZvcm0uCi0JICovCi0JZGJ1Zl9zbGlj ZV9tYXNrID0gc2tsX2NvbXB1dGVfZGJ1Zl9zbGljZXMoZm9yX2NydGMsIGFjdGl2ZV9waXBlcyk7 Ci0JdG90YWxfc2xpY2VfbWFzayA9IGRidWZfc2xpY2VfbWFzazsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KGRidWZfc3RhdGUtPmJhc2Uuc3RhdGUtPmJh c2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZTsKIAogCSp3ZWlnaHRfc3RhcnQgPSAwOwogCSp3ZWln aHRfZW5kID0gMDsKIAkqd2VpZ2h0X3RvdGFsID0gMDsKIAotCWZvcl9lYWNoX25ld19pbnRlbF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Ci0JCWVudW0gcGlwZSBw aXBlID0gY3J0Yy0+cGlwZTsKLQkJdW5zaWduZWQgaW50IHdlaWdodDsKLQkJdTggcGlwZV9kYnVm X3NsaWNlX21hc2s7Ci0KLQkJaWYgKCFjcnRjX3N0YXRlLT5ody5hY3RpdmUpCi0JCQljb250aW51 ZTsKLQotCQlwaXBlX2RidWZfc2xpY2VfbWFzayA9Ci0JCQlza2xfY29tcHV0ZV9kYnVmX3NsaWNl cyhjcnRjLCBhY3RpdmVfcGlwZXMpOwotCi0JCS8qCi0JCSAqIEFjY29yZGluZyB0byBCU3BlYyBw aXBlIGNhbiBzaGFyZSBvbmUgZGJ1ZiBzbGljZSB3aXRoIGFub3RoZXIKLQkJICogcGlwZXMgb3Ig cGlwZSBjYW4gdXNlIG11bHRpcGxlIGRidWZzLCBpbiBib3RoIGNhc2VzIHdlCi0JCSAqIGFjY291 bnQgZm9yIG90aGVyIHBpcGVzIG9ubHkgaWYgdGhleSBoYXZlIGV4YWN0bHkgc2FtZSBtYXNrLgot CQkgKiBIb3dldmVyIHdlIG5lZWQgdG8gYWNjb3VudCBob3cgbWFueSBzbGljZXMgd2Ugc2hvdWxk IGVuYWJsZQotCQkgKiBpbiB0b3RhbC4KLQkJICovCi0JCXRvdGFsX3NsaWNlX21hc2sgfD0gcGlw ZV9kYnVmX3NsaWNlX21hc2s7CisJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgeworCQlp bnQgd2VpZ2h0ID0gZGJ1Zl9zdGF0ZS0+d2VpZ2h0W3BpcGVdOwogCiAJCS8qCiAJCSAqIERvIG5v dCBhY2NvdW50IHBpcGVzIHVzaW5nIG90aGVyIHNsaWNlIHNldHMKQEAgLTQxNTgsMTIgKzQxMjQs MTAgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX2RidWZfd2VpZ2h0cyhzdHJ1Y3QgaW50ZWxfYXRv bWljX3N0YXRlICpzdGF0ZSwKIAkJICogaS5lIG5vIHBhcnRpYWwgaW50ZXJzZWN0aW9uKSwgc28g aXQgaXMgZW5vdWdoIHRvIGNoZWNrIGZvcgogCQkgKiBlcXVhbGl0eSBmb3Igbm93LgogCQkgKi8K LQkJaWYgKGRidWZfc2xpY2VfbWFzayAhPSBwaXBlX2RidWZfc2xpY2VfbWFzaykKKwkJaWYgKGRi dWZfc3RhdGUtPnNsaWNlc1twaXBlXSAhPSBkYnVmX3N0YXRlLT5zbGljZXNbZm9yX3BpcGVdKQog CQkJY29udGludWU7CiAKLQkJd2VpZ2h0ID0gaW50ZWxfY3J0Y19kZGJfd2VpZ2h0KGNydGNfc3Rh dGUpOwogCQkqd2VpZ2h0X3RvdGFsICs9IHdlaWdodDsKLQogCQlpZiAocGlwZSA8IGZvcl9waXBl KSB7CiAJCQkqd2VpZ2h0X3N0YXJ0ICs9IHdlaWdodDsKIAkJCSp3ZWlnaHRfZW5kICs9IHdlaWdo dDsKQEAgLTQxNzEsODkgKzQxMzUsNjcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX2RidWZfd2Vp Z2h0cyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCSp3ZWlnaHRfZW5kICs9 IHdlaWdodDsKIAkJfQogCX0KLQotCS8qCi0JICogRklYTUU6IEZvciBub3cgd2UgYWx3YXlzIGVu YWJsZSBzbGljZSBTMSBhcyBwZXIKLQkgKiB0aGUgQnNwZWMgZGlzcGxheSBpbml0aWFsaXphdGlv biBzZXF1ZW5jZS4KLQkgKi8KLQluZXdfZGJ1Zl9zdGF0ZS0+ZW5hYmxlZF9zbGljZXMgPSB0b3Rh bF9zbGljZV9tYXNrIHwgQklUKERCVUZfUzEpOwotCi0JaWYgKG9sZF9kYnVmX3N0YXRlLT5lbmFi bGVkX3NsaWNlcyAhPSBuZXdfZGJ1Zl9zdGF0ZS0+ZW5hYmxlZF9zbGljZXMpIHsKLQkJcmV0ID0g aW50ZWxfYXRvbWljX3NlcmlhbGl6ZV9nbG9iYWxfc3RhdGUoJm5ld19kYnVmX3N0YXRlLT5iYXNl KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7CiB9CiAKIHN0 YXRpYyBpbnQKLXNrbF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAotCQkJCSAgIGNvbnN0IHU2NCB0b3RhbF9kYXRhX3JhdGUsCi0JCQkJICAgc3Ry dWN0IHNrbF9kZGJfZW50cnkgKmFsbG9jLCAvKiBvdXQgKi8KLQkJCQkgICBpbnQgKm51bV9hY3Rp dmUgLyogb3V0ICovKQorc2tsX2NydGNfYWxsb2NhdGVfZGRiKHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlLCBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIHsKLQlzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSA9Ci0JCXRvX2ludGVsX2F0b21pY19zdGF0ZShjcnRjX3N0YXRl LT51YXBpLnN0YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQl1bnNpZ25lZCBpbnQgd2VpZ2h0X3N0YXJ0LCB3ZWln aHRfZW5kLCB3ZWlnaHRfdG90YWw7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJdW5zaWduZWQgaW50IHdlaWdodF90b3RhbCwg d2VpZ2h0X3N0YXJ0LCB3ZWlnaHRfZW5kOwogCWNvbnN0IHN0cnVjdCBpbnRlbF9kYnVmX3N0YXRl ICpvbGRfZGJ1Zl9zdGF0ZSA9CiAJCWludGVsX2F0b21pY19nZXRfb2xkX2RidWZfc3RhdGUoc3Rh dGUpOwogCXN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpuZXdfZGJ1Zl9zdGF0ZSA9CiAJCWludGVs X2F0b21pY19nZXRfbmV3X2RidWZfc3RhdGUoc3RhdGUpOwotCXU4IGFjdGl2ZV9waXBlcyA9IG5l d19kYnVmX3N0YXRlLT5hY3RpdmVfcGlwZXM7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7CiAJc3RydWN0IHNrbF9kZGJfZW50cnkgZGRiX3NsaWNlczsKKwllbnVtIHBpcGUg cGlwZSA9IGNydGMtPnBpcGU7CiAJdTMyIGRkYl9yYW5nZV9zaXplOwogCXUzMiBkYnVmX3NsaWNl X21hc2s7CiAJdTMyIHN0YXJ0LCBlbmQ7CiAJaW50IHJldDsKIAotCSpudW1fYWN0aXZlID0gaHdl aWdodDgoYWN0aXZlX3BpcGVzKTsKLQotCWlmICghY3J0Y19zdGF0ZS0+aHcuYWN0aXZlKSB7Ci0J CWFsbG9jLT5zdGFydCA9IDA7Ci0JCWFsbG9jLT5lbmQgPSAwOwotCQljcnRjX3N0YXRlLT53bS5z a2wuZGRiID0gKmFsbG9jOwotCQlyZXR1cm4gMDsKKwlpZiAobmV3X2RidWZfc3RhdGUtPndlaWdo dFtwaXBlXSA9PSAwKSB7CisJCW5ld19kYnVmX3N0YXRlLT5kZGJbcGlwZV0uc3RhcnQgPSAwOwor CQluZXdfZGJ1Zl9zdGF0ZS0+ZGRiW3BpcGVdLmVuZCA9IDA7CisJCWdvdG8gb3V0OwogCX0KIAot CS8qCi0JICogSWYgdGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzIG9y IHRoZXJlIGlzIG5vCi0JICogbW9kZXNldCByZXF1ZXN0LCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0 byByZWNhbGN1bGF0ZTsKLQkgKiB0aGUgZXhpc3RpbmcgcGlwZSBhbGxvY2F0aW9uIGxpbWl0cyBz aG91bGQgcmVtYWluIHVuY2hhbmdlZC4KLQkgKiBOb3RlIHRoYXQgd2UncmUgc2FmZSBmcm9tIHJh Y2luZyBjb21taXRzIHNpbmNlIGFueSByYWNpbmcgY29tbWl0Ci0JICogdGhhdCBjaGFuZ2VzIHRo ZSBhY3RpdmUgQ1JUQyBsaXN0IG9yIGRvIG1vZGVzZXQgd291bGQgbmVlZCB0bwotCSAqIGdyYWIg X2FsbF8gY3J0YyBsb2NrcywgaW5jbHVkaW5nIHRoZSBvbmUgd2UgY3VycmVudGx5IGhvbGQuCi0J ICovCi0JaWYgKG9sZF9kYnVmX3N0YXRlLT5hY3RpdmVfcGlwZXMgPT0gbmV3X2RidWZfc3RhdGUt PmFjdGl2ZV9waXBlcyAmJgotCSAgICAhZGV2X3ByaXYtPndtLmRpc3RydXN0X2Jpb3Nfd20pCi0J CXJldHVybiAwOwotCi0JLyoKLQkgKiBHZXQgYWxsb3dlZCBEQnVmIHNsaWNlcyBmb3IgY29ycmVz cG9uZGVudCBwaXBlIGFuZCBwbGF0Zm9ybS4KLQkgKi8KLQlkYnVmX3NsaWNlX21hc2sgPSBza2xf Y29tcHV0ZV9kYnVmX3NsaWNlcyhjcnRjLCBhY3RpdmVfcGlwZXMpOworCWRidWZfc2xpY2VfbWFz ayA9IG5ld19kYnVmX3N0YXRlLT5zbGljZXNbcGlwZV07CiAKIAlza2xfZGRiX2VudHJ5X2Zvcl9z bGljZXMoZGV2X3ByaXYsIGRidWZfc2xpY2VfbWFzaywgJmRkYl9zbGljZXMpOwogCWRkYl9yYW5n ZV9zaXplID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGJfc2xpY2VzKTsKIAotCXJldCA9IGludGVs X2NydGNfZGJ1Zl93ZWlnaHRzKHN0YXRlLCBjcnRjLAotCQkJCSAgICAgICZ3ZWlnaHRfc3RhcnQs ICZ3ZWlnaHRfZW5kLCAmd2VpZ2h0X3RvdGFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owor CWludGVsX2NydGNfZGJ1Zl93ZWlnaHRzKG5ld19kYnVmX3N0YXRlLCBwaXBlLAorCQkJCSZ3ZWln aHRfc3RhcnQsICZ3ZWlnaHRfZW5kLCAmd2VpZ2h0X3RvdGFsKTsKIAogCXN0YXJ0ID0gZGRiX3Jh bmdlX3NpemUgKiB3ZWlnaHRfc3RhcnQgLyB3ZWlnaHRfdG90YWw7CiAJZW5kID0gZGRiX3Jhbmdl X3NpemUgKiB3ZWlnaHRfZW5kIC8gd2VpZ2h0X3RvdGFsOwogCi0JYWxsb2MtPnN0YXJ0ID0gZGRi X3NsaWNlcy5zdGFydCArIHN0YXJ0OwotCWFsbG9jLT5lbmQgPSBkZGJfc2xpY2VzLnN0YXJ0ICsg ZW5kOwotCWNydGNfc3RhdGUtPndtLnNrbC5kZGIgPSAqYWxsb2M7CisJbmV3X2RidWZfc3RhdGUt PmRkYltwaXBlXS5zdGFydCA9IGRkYl9zbGljZXMuc3RhcnQgKyBzdGFydDsKKwluZXdfZGJ1Zl9z dGF0ZS0+ZGRiW3BpcGVdLmVuZCA9IGRkYl9zbGljZXMuc3RhcnQgKyBlbmQ7CisKK291dDoKKwlp ZiAoc2tsX2RkYl9lbnRyeV9lcXVhbCgmb2xkX2RidWZfc3RhdGUtPmRkYltwaXBlXSwKKwkJCQkm bmV3X2RidWZfc3RhdGUtPmRkYltwaXBlXSkpCisJCXJldHVybiAwOworCisJcmV0ID0gaW50ZWxf YXRvbWljX2xvY2tfZ2xvYmFsX3N0YXRlKCZuZXdfZGJ1Zl9zdGF0ZS0+YmFzZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWNydGNfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2NydGNf c3RhdGUoJnN0YXRlLT5iYXNlLCBjcnRjKTsKKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNydGNfc3RhdGUtPndtLnNrbC5kZGIgPSBu ZXdfZGJ1Zl9zdGF0ZS0+ZGRiW3BpcGVdOwogCiAJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s Ci0JCSAgICAiW0NSVEM6JWQ6JXNdIGRidWYgc2xpY2VzIDB4JXgsIGRkYiAoJWQgLSAlZCksIGFj dGl2ZSBwaXBlcyAweCV4XG4iLAorCQkgICAgIltDUlRDOiVkOiVzXSBkYnVmIHNsaWNlcyAweCV4 IC0+IDB4JXgsIGRkYiAoJWQgLSAlZCkgLT4gKCVkIC0gJWQpLCBhY3RpdmUgcGlwZXMgMHgleCAt PiAweCV4XG4iLAogCQkgICAgY3J0Yy0+YmFzZS5iYXNlLmlkLCBjcnRjLT5iYXNlLm5hbWUsCi0J CSAgICBkYnVmX3NsaWNlX21hc2ssIGFsbG9jLT5zdGFydCwgYWxsb2MtPmVuZCwgYWN0aXZlX3Bp cGVzKTsKKwkJICAgIG9sZF9kYnVmX3N0YXRlLT5zbGljZXNbcGlwZV0sIG5ld19kYnVmX3N0YXRl LT5zbGljZXNbcGlwZV0sCisJCSAgICBvbGRfZGJ1Zl9zdGF0ZS0+ZGRiW3BpcGVdLnN0YXJ0LCBv bGRfZGJ1Zl9zdGF0ZS0+ZGRiW3BpcGVdLmVuZCwKKwkJICAgIG5ld19kYnVmX3N0YXRlLT5kZGJb cGlwZV0uc3RhcnQsIG5ld19kYnVmX3N0YXRlLT5kZGJbcGlwZV0uZW5kLAorCQkgICAgb2xkX2Ri dWZfc3RhdGUtPmFjdGl2ZV9waXBlcywgbmV3X2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyk7CiAK IAlyZXR1cm4gMDsKIH0KQEAgLTQ4MTksNTggKzQ3NjEsMzAgQEAgc2tsX3BsYW5lX3dtX2xldmVs KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogfQogCiBzdGF0aWMg aW50Ci1za2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3Rh dGUsCi0JCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQorc2tsX2FsbG9jYXRlX3BsYW5l X2RkYihzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwogCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlID0KIAkJaW50ZWxfYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNl LmRldik7Ci0Jc3RydWN0IGludGVsX2RidWZfc3RhdGUgKmRidWZfc3RhdGUgPQorCWNvbnN0IHN0 cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpkYnVmX3N0YXRlID0KIAkJaW50ZWxfYXRvbWljX2dldF9u ZXdfZGJ1Zl9zdGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IHNrbF9kZGJfZW50cnkgKmFsbG9jID0gJmRi dWZfc3RhdGUtPmRkYltjcnRjLT5waXBlXTsKKwljb25zdCBzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAq YWxsb2MgPSAmZGJ1Zl9zdGF0ZS0+ZGRiW2NydGMtPnBpcGVdOworCWludCBudW1fYWN0aXZlID0g aHdlaWdodDgoZGJ1Zl9zdGF0ZS0+YWN0aXZlX3BpcGVzKTsKIAl1MTYgYWxsb2Nfc2l6ZSwgc3Rh cnQgPSAwOwogCXUxNiB0b3RhbFtJOTE1X01BWF9QTEFORVNdID0ge307CiAJdTE2IHV2X3RvdGFs W0k5MTVfTUFYX1BMQU5FU10gPSB7fTsKIAl1NjQgdG90YWxfZGF0YV9yYXRlOwogCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQ7Ci0JaW50IG51bV9hY3RpdmU7CiAJdTMyIGJsb2NrczsKIAlpbnQgbGV2 ZWw7Ci0JaW50IHJldDsKIAogCS8qIENsZWFyIHRoZSBwYXJ0aXRpb25pbmcgZm9yIGRpc2FibGVk IHBsYW5lcy4gKi8KIAltZW1zZXQoY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95LCAwLCBz aXplb2YoY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95KSk7CiAJbWVtc2V0KGNydGNfc3Rh dGUtPndtLnNrbC5wbGFuZV9kZGJfdXYsIDAsIHNpemVvZihjcnRjX3N0YXRlLT53bS5za2wucGxh bmVfZGRiX3V2KSk7CiAKLQlpZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSkgewotCQlzdHJ1Y3Qg aW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9Ci0JCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3J0 Y19zdGF0ZS0+dWFwaS5zdGF0ZSk7Ci0JCXN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpuZXdfZGJ1 Zl9zdGF0ZSA9Ci0JCQlpbnRlbF9hdG9taWNfZ2V0X25ld19kYnVmX3N0YXRlKHN0YXRlKTsKLQkJ Y29uc3Qgc3RydWN0IGludGVsX2RidWZfc3RhdGUgKm9sZF9kYnVmX3N0YXRlID0KLQkJCWludGVs X2F0b21pY19nZXRfb2xkX2RidWZfc3RhdGUoc3RhdGUpOwotCi0JCS8qCi0JCSAqIEZJWE1FIGhh Y2sgdG8gbWFrZSBzdXJlIHdlIGNvbXB1dGUgdGhpcyBzZW5zaWJseSB3aGVuCi0JCSAqIHR1cm5p bmcgb2ZmIGFsbCB0aGUgcGlwZXMuIE90aGVyd2lzZSB3ZSBsZWF2ZSBpdCBhdAotCQkgKiB3aGF0 ZXZlciB3ZSBoYWQgcHJldmlvdXNseSwgYW5kIHRoZW4gcnVudGltZSBQTSB3aWxsCi0JCSAqIG1l c3MgaXQgdXAgYnkgdHVybmluZyBvZmYgYWxsIGJ1dCBTMS4gUmVtb3ZlIHRoaXMKLQkJICogb25j ZSB0aGUgZGJ1ZiBzdGF0ZSBjb21wdXRhdGlvbiBmbG93IGJlY29tZXMgc2FuZS4KLQkJICovCi0J CWlmIChuZXdfZGJ1Zl9zdGF0ZS0+YWN0aXZlX3BpcGVzID09IDApIHsKLQkJCW5ld19kYnVmX3N0 YXRlLT5lbmFibGVkX3NsaWNlcyA9IEJJVChEQlVGX1MxKTsKLQotCQkJaWYgKG9sZF9kYnVmX3N0 YXRlLT5lbmFibGVkX3NsaWNlcyAhPSBuZXdfZGJ1Zl9zdGF0ZS0+ZW5hYmxlZF9zbGljZXMpIHsK LQkJCQlyZXQgPSBpbnRlbF9hdG9taWNfc2VyaWFsaXplX2dsb2JhbF9zdGF0ZSgmbmV3X2RidWZf c3RhdGUtPmJhc2UpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0K LQotCQlhbGxvYy0+c3RhcnQgPSBhbGxvYy0+ZW5kID0gMDsKLQkJY3J0Y19zdGF0ZS0+d20uc2ts LmRkYiA9ICphbGxvYzsKKwlpZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSkKIAkJcmV0dXJuIDA7 Ci0JfQogCiAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCiAJCXRvdGFsX2RhdGFfcmF0 ZSA9CkBAIC00ODc5LDEyICs0NzkzLDYgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQl0b3RhbF9kYXRhX3JhdGUgPQogCQkJc2tsX2dl dF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RhdGUsIGNydGMpOwogCi0JcmV0ID0gc2tsX2Rk Yl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhkZXZfcHJpdiwgY3J0Y19zdGF0ZSwKLQkJCQkJ CSB0b3RhbF9kYXRhX3JhdGUsCi0JCQkJCQkgYWxsb2MsICZudW1fYWN0aXZlKTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OwotCiAJYWxsb2Nfc2l6ZSA9IHNrbF9kZGJfZW50cnlfc2l6ZShhbGxv Yyk7CiAJaWYgKGFsbG9jX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC01Nzk5LDM5ICs1NzA3 LDExNCBAQCBza2xfZGRiX2FkZF9hZmZlY3RlZF9wbGFuZXMoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTggaW50 ZWxfZGJ1Zl9lbmFibGVkX3NsaWNlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfZGJ1Zl9zdGF0ZSAqZGJ1 Zl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRidWZfc3RhdGUtPmJhc2Uuc3RhdGUtPmJhc2UuZGV2KTsKKwl1OCBlbmFibGVkX3NsaWNlczsK KwllbnVtIHBpcGUgcGlwZTsKKworCS8qCisJICogRklYTUU6IEZvciBub3cgd2UgYWx3YXlzIGVu YWJsZSBzbGljZSBTMSBhcyBwZXIKKwkgKiB0aGUgQnNwZWMgZGlzcGxheSBpbml0aWFsaXphdGlv biBzZXF1ZW5jZS4KKwkgKi8KKwllbmFibGVkX3NsaWNlcyA9IEJJVChEQlVGX1MxKTsKKworCWZv cl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpCisJCWVuYWJsZWRfc2xpY2VzIHw9IGRidWZfc3Rh dGUtPnNsaWNlc1twaXBlXTsKKworCXJldHVybiBlbmFibGVkX3NsaWNlczsKK30KKwogc3RhdGlj IGludAogc2tsX2NvbXB1dGVfZGRiKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQog ewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmJh c2UuZGV2KTsKIAljb25zdCBzdHJ1Y3QgaW50ZWxfZGJ1Zl9zdGF0ZSAqb2xkX2RidWZfc3RhdGU7 Ci0JY29uc3Qgc3RydWN0IGludGVsX2RidWZfc3RhdGUgKm5ld19kYnVmX3N0YXRlOworCXN0cnVj dCBpbnRlbF9kYnVmX3N0YXRlICpuZXdfZGJ1Zl9zdGF0ZSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpuZXdfY3J0Y19zdGF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKIAlpbnQgcmV0 LCBpOwogCi0JZm9yX2VhY2hfb2xkbmV3X2ludGVsX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMs IG9sZF9jcnRjX3N0YXRlLAotCQkJCQkgICAgbmV3X2NydGNfc3RhdGUsIGkpIHsKLQkJcmV0ID0g c2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0YXRlLCBjcnRjKTsKKwlmb3JfZWFjaF9uZXdfaW50ZWxf Y3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgbmV3X2NydGNfc3RhdGUsIGkpIHsKKwkJbmV3X2Ri dWZfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2RidWZfc3RhdGUoc3RhdGUpOworCQlpZiAoSVNf RVJSKG5ld19kYnVmX3N0YXRlKSkKKwkJCXJldHVybiBQVFJfRVJSKG5ld19kYnVmX3N0YXRlKTsK KworCQlvbGRfZGJ1Zl9zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfb2xkX2RidWZfc3RhdGUoc3Rh dGUpOworCQlicmVhazsKKwl9CisKKwlpZiAoIW5ld19kYnVmX3N0YXRlKQorCQlyZXR1cm4gMDsK KworCW5ld19kYnVmX3N0YXRlLT5hY3RpdmVfcGlwZXMgPQorCQlpbnRlbF9jYWxjX2FjdGl2ZV9w aXBlcyhzdGF0ZSwgb2xkX2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyk7CisKKwlpZiAob2xkX2Ri dWZfc3RhdGUtPmFjdGl2ZV9waXBlcyAhPSBuZXdfZGJ1Zl9zdGF0ZS0+YWN0aXZlX3BpcGVzKSB7 CisJCXJldCA9IGludGVsX2F0b21pY19sb2NrX2dsb2JhbF9zdGF0ZSgmbmV3X2RidWZfc3RhdGUt PmJhc2UpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKwl9CiAKLQkJcmV0ID0gc2tsX2Rk Yl9hZGRfYWZmZWN0ZWRfcGxhbmVzKG9sZF9jcnRjX3N0YXRlLAotCQkJCQkJICBuZXdfY3J0Y19z dGF0ZSk7CisJZm9yX2VhY2hfaW50ZWxfY3J0YygmZGV2X3ByaXYtPmRybSwgY3J0YykgeworCQll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisKKwkJbmV3X2RidWZfc3RhdGUtPnNsaWNlc1tw aXBlXSA9CisJCQlza2xfY29tcHV0ZV9kYnVmX3NsaWNlcyhjcnRjLCBuZXdfZGJ1Zl9zdGF0ZS0+ YWN0aXZlX3BpcGVzKTsKKworCQlpZiAob2xkX2RidWZfc3RhdGUtPnNsaWNlc1twaXBlXSA9PSBu ZXdfZGJ1Zl9zdGF0ZS0+c2xpY2VzW3BpcGVdKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gaW50 ZWxfYXRvbWljX2xvY2tfZ2xvYmFsX3N0YXRlKCZuZXdfZGJ1Zl9zdGF0ZS0+YmFzZSk7CiAJCWlm IChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCW9sZF9kYnVmX3N0YXRlID0gaW50ZWxfYXRv bWljX2dldF9vbGRfZGJ1Zl9zdGF0ZShzdGF0ZSk7Ci0JbmV3X2RidWZfc3RhdGUgPSBpbnRlbF9h dG9taWNfZ2V0X25ld19kYnVmX3N0YXRlKHN0YXRlKTsKKwluZXdfZGJ1Zl9zdGF0ZS0+ZW5hYmxl ZF9zbGljZXMgPSBpbnRlbF9kYnVmX2VuYWJsZWRfc2xpY2VzKG5ld19kYnVmX3N0YXRlKTsKKwor CWlmIChvbGRfZGJ1Zl9zdGF0ZS0+ZW5hYmxlZF9zbGljZXMgIT0gbmV3X2RidWZfc3RhdGUtPmVu YWJsZWRfc2xpY2VzKSB7CisJCXJldCA9IGludGVsX2F0b21pY19zZXJpYWxpemVfZ2xvYmFsX3N0 YXRlKCZuZXdfZGJ1Zl9zdGF0ZS0+YmFzZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owog Ci0JaWYgKG5ld19kYnVmX3N0YXRlICYmCi0JICAgIG5ld19kYnVmX3N0YXRlLT5lbmFibGVkX3Ns aWNlcyAhPSBvbGRfZGJ1Zl9zdGF0ZS0+ZW5hYmxlZF9zbGljZXMpCiAJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAogCQkJICAgICJFbmFibGVkIGRidWYgc2xpY2VzIDB4JXggLT4gMHgleCAo b3V0IG9mICVkIGRidWYgc2xpY2VzKVxuIiwKIAkJCSAgICBvbGRfZGJ1Zl9zdGF0ZS0+ZW5hYmxl ZF9zbGljZXMsCiAJCQkgICAgbmV3X2RidWZfc3RhdGUtPmVuYWJsZWRfc2xpY2VzLAogCQkJICAg IElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fc3VwcG9ydGVkX2RidWZfc2xpY2VzKTsKKwl9CisK Kwlmb3JfZWFjaF9uZXdfaW50ZWxfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgbmV3X2NydGNf c3RhdGUsIGkpIHsKKwkJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCisJCW5ld19kYnVm X3N0YXRlLT53ZWlnaHRbcGlwZV0gPSBpbnRlbF9jcnRjX2RkYl93ZWlnaHQobmV3X2NydGNfc3Rh dGUpOworCisJCWlmIChvbGRfZGJ1Zl9zdGF0ZS0+d2VpZ2h0W3BpcGVdID09IG5ld19kYnVmX3N0 YXRlLT53ZWlnaHRbcGlwZV0pCisJCQljb250aW51ZTsKKworCQlyZXQgPSBpbnRlbF9hdG9taWNf bG9ja19nbG9iYWxfc3RhdGUoJm5ld19kYnVmX3N0YXRlLT5iYXNlKTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybiByZXQ7CisJfQorCisJZm9yX2VhY2hfaW50ZWxfY3J0YygmZGV2X3ByaXYtPmRybSwg Y3J0YykgeworCQlyZXQgPSBza2xfY3J0Y19hbGxvY2F0ZV9kZGIoc3RhdGUsIGNydGMpOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3JfZWFjaF9vbGRuZXdfaW50ZWxfY3J0 Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsCisJCQkJCSAgICBuZXdfY3J0 Y19zdGF0ZSwgaSkgeworCQlyZXQgPSBza2xfYWxsb2NhdGVfcGxhbmVfZGRiKHN0YXRlLCBjcnRj KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gc2tsX2RkYl9hZGRfYWZm ZWN0ZWRfcGxhbmVzKG9sZF9jcnRjX3N0YXRlLAorCQkJCQkJICBuZXdfY3J0Y19zdGF0ZSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNTk2OCw4 MyArNTk1MSw2IEBAIHNrbF9wcmludF93bV9jaGFuZ2VzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKnN0YXRlKQogCX0KIH0KIAotc3RhdGljIGludCBpbnRlbF9hZGRfYWZmZWN0ZWRfcGlwZXMo c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICAgIHU4IHBpcGVfbWFzaykK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5i YXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGM7Ci0KLQlmb3JfZWFjaF9pbnRlbF9j cnRjKCZkZXZfcHJpdi0+ZHJtLCBjcnRjKSB7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwotCi0JCWlmICgocGlwZV9tYXNrICYgQklUKGNydGMtPnBpcGUpKSA9PSAwKQot CQkJY29udGludWU7Ci0KLQkJY3J0Y19zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0 ZSgmc3RhdGUtPmJhc2UsIGNydGMpOwotCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQotCQkJcmV0 dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQKLXNrbF9kZGJfYWRkX2FmZmVjdGVkX3BpcGVzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo c3RhdGUtPmJhc2UuZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKLQlpbnQgaSwgcmV0OwotCi0JaWYgKGRldl9wcml2 LT53bS5kaXN0cnVzdF9iaW9zX3dtKSB7Ci0JCS8qCi0JCSAqIHNrbF9kZGJfZ2V0X3BpcGVfYWxs b2NhdGlvbl9saW1pdHMoKSBjdXJyZW50bHkgcmVxdWlyZXMKLQkJICogYWxsIGFjdGl2ZSBwaXBl cyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhdGUgc28gdGhhdAotCQkgKiBpdCBjYW4gcmVkaXN0 cmlidXRlIHRoZSBkYnVmIGFtb25nIHRoZW0sIGFuZCBpdCByZWFsbHkKLQkJICogd2FudHMgdG8g cmVjb21wdXRlIHRoaW5ncyB3aGVuIGRpc3RydXN0X2Jpb3Nfd20gaXMgc2V0Ci0JCSAqIHNvIHdl IGFkZCBhbGwgdGhlIHBpcGVzIHRvIHRoZSBzdGF0ZS4KLQkJICovCi0JCXJldCA9IGludGVsX2Fk ZF9hZmZlY3RlZF9waXBlcyhzdGF0ZSwgfjApOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsK LQl9Ci0KLQlmb3JfZWFjaF9uZXdfaW50ZWxfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0 Y19zdGF0ZSwgaSkgewotCQlzdHJ1Y3QgaW50ZWxfZGJ1Zl9zdGF0ZSAqbmV3X2RidWZfc3RhdGU7 Ci0JCWNvbnN0IHN0cnVjdCBpbnRlbF9kYnVmX3N0YXRlICpvbGRfZGJ1Zl9zdGF0ZTsKLQotCQlu ZXdfZGJ1Zl9zdGF0ZSA9IGludGVsX2F0b21pY19nZXRfZGJ1Zl9zdGF0ZShzdGF0ZSk7Ci0JCWlm IChJU19FUlIobmV3X2RidWZfc3RhdGUpKQotCQkJcmV0dXJuIFBUUl9FUlIobmV3X2RidWZfc3Rh dGUpOwotCi0JCW9sZF9kYnVmX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9vbGRfZGJ1Zl9zdGF0 ZShzdGF0ZSk7Ci0KLQkJbmV3X2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyA9Ci0JCQlpbnRlbF9j YWxjX2FjdGl2ZV9waXBlcyhzdGF0ZSwgb2xkX2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyk7Ci0K LQkJaWYgKG9sZF9kYnVmX3N0YXRlLT5hY3RpdmVfcGlwZXMgPT0gbmV3X2RidWZfc3RhdGUtPmFj dGl2ZV9waXBlcykKLQkJCWJyZWFrOwotCi0JCXJldCA9IGludGVsX2F0b21pY19sb2NrX2dsb2Jh bF9zdGF0ZSgmbmV3X2RidWZfc3RhdGUtPmJhc2UpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJl dDsKLQotCQkvKgotCQkgKiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKCkgY3Vy cmVudGx5IHJlcXVpcmVzCi0JCSAqIGFsbCBhY3RpdmUgcGlwZXMgdG8gYmUgaW5jbHVkZWQgaW4g dGhlIHN0YXRlIHNvIHRoYXQKLQkJICogaXQgY2FuIHJlZGlzdHJpYnV0ZSB0aGUgZGJ1ZiBhbW9u ZyB0aGVtLgotCQkgKi8KLQkJcmV0ID0gaW50ZWxfYWRkX2FmZmVjdGVkX3BpcGVzKHN0YXRlLAot CQkJCQkgICAgICAgbmV3X2RidWZfc3RhdGUtPmFjdGl2ZV9waXBlcyk7Ci0JCWlmIChyZXQpCi0J CQlyZXR1cm4gcmV0OwotCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKgogICog VG8gbWFrZSBzdXJlIHRoZSBjdXJzb3Igd2F0ZXJtYXJrIHJlZ2lzdGVycyBhcmUgYWx3YXlzIGNv bnNpc3RlbnQKICAqIHdpdGggb3VyIGNvbXB1dGVkIHN0YXRlIHRoZSBmb2xsb3dpbmcgc2NlbmFy aW8gbmVlZHMgc3BlY2lhbApAQCAtNjExMiwxNSArNjAxOCw2IEBAIHNrbF9jb21wdXRlX3dtKHN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQogCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpuZXdfY3J0Y19zdGF0ZTsKIAlpbnQgcmV0LCBpOwogCi0JcmV0ID0gc2tsX2RkYl9hZGRfYWZm ZWN0ZWRfcGlwZXMoc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAq IENhbGN1bGF0ZSBXTSdzIGZvciBhbGwgcGlwZXMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHRyYW5z YWN0aW9uLgotCSAqIE5vdGUgdGhhdCBza2xfZGRiX2FkZF9hZmZlY3RlZF9waXBlcyBtYXkgaGF2 ZSBhZGRlZCBtb3JlIENSVEMncyB0aGF0Ci0JICogd2VyZW4ndCBvdGhlcndpc2UgYmVpbmcgbW9k aWZpZWQgaWYgcGlwZSBhbGxvY2F0aW9ucyBoYWQgdG8gY2hhbmdlLgotCSAqLwogCWZvcl9lYWNo X25ld19pbnRlbF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBuZXdfY3J0Y19zdGF0ZSwgaSkg ewogCQlyZXQgPSBza2xfYnVpbGRfcGlwZV93bShzdGF0ZSwgY3J0Yyk7CiAJCWlmIChyZXQpCkBA IC02Mjg4LDExICs2MTg1LDYgQEAgdm9pZCBza2xfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJc2tsX3BpcGVfd21fZ2V0X2h3X3N0YXRlKGNydGMs ICZjcnRjX3N0YXRlLT53bS5za2wub3B0aW1hbCk7CiAJCWNydGNfc3RhdGUtPndtLnNrbC5yYXcg PSBjcnRjX3N0YXRlLT53bS5za2wub3B0aW1hbDsKIAl9Ci0KLQlpZiAoZGV2X3ByaXYtPmFjdGl2 ZV9waXBlcykgewotCQkvKiBGdWxseSByZWNvbXB1dGUgRERCIG9uIGZpcnN0IGF0b21pYyBjb21t aXQgKi8KLQkJZGV2X3ByaXYtPndtLmRpc3RydXN0X2Jpb3Nfd20gPSB0cnVlOwotCX0KIH0KIAog c3RhdGljIHZvaWQgaWxrX3BpcGVfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmgKaW5kZXggNzI0MjA0YmI4NDQyLi45NzU1MGNmMGI2 ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaApAQCAtNzEsNiArNzEsOCBAQCBzdHJ1Y3QgaW50 ZWxfZGJ1Zl9zdGF0ZSB7CiAJc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZSBiYXNlOwogCiAJc3Ry dWN0IHNrbF9kZGJfZW50cnkgZGRiW0k5MTVfTUFYX1BJUEVTXTsKKwl1bnNpZ25lZCBpbnQgd2Vp Z2h0W0k5MTVfTUFYX1BJUEVTXTsKKwl1OCBzbGljZXNbSTkxNV9NQVhfUElQRVNdOwogCiAJdTgg ZW5hYmxlZF9zbGljZXM7CiAJdTggYWN0aXZlX3BpcGVzOwotLSAKMi4yNi4yCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK