From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab.gupta@intel.com Subject: [PATCH 03/15] drm/i915: Framework for capturing command stream based OA reports Date: Fri, 4 Nov 2016 15:00:32 +0530 Message-ID: <1478251844-23509-4-git-send-email-sourab.gupta@intel.com> References: <1478251844-23509-1-git-send-email-sourab.gupta@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 97E806E8F1 for ; Fri, 4 Nov 2016 09:29:07 +0000 (UTC) In-Reply-To: <1478251844-23509-1-git-send-email-sourab.gupta@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 Cc: "Christopher S . Hall" , Daniel Vetter , Sourab Gupta , Matthew Auld , Thomas Gleixner List-Id: intel-gfx@lists.freedesktop.org RnJvbTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBp bnRyb2R1Y2VzIGEgZnJhbWV3b3JrIHRvIGVuYWJsZSBPQSBjb3VudGVyIHJlcG9ydHMgYXNzb2Np YXRlZAp3aXRoIFJlbmRlciBjb21tYW5kIHN0cmVhbS4gV2UgY2FuIHRoZW4gYXNzb2NpYXRlIHRo ZSByZXBvcnRzIGNhcHR1cmVkCnRocm91Z2ggdGhpcyBtZWNoYW5pc20gd2l0aCB0aGVpciBjb3Jy ZXNwb25kaW5nIGNvbnRleHQgaWQncy4gVGhpcyBjYW4gYmUKZnVydGhlciBleHRlbmRlZCB0byBh c3NvY2lhdGUgYW55IG90aGVyIG1ldGFkYXRhIGluZm9ybWF0aW9uIHdpdGggdGhlCmNvcnJlc3Bv bmRpbmcgc2FtcGxlcyAoc2luY2UgdGhlIGFzc29jaWF0aW9uIHdpdGggUmVuZGVyIGNvbW1hbmQg c3RyZWFtCmdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNhcHR1cmUgdGhlc2UgaW5mb3JtYXRpb24g d2hpbGUgaW5zZXJ0aW5nIHRoZQpjb3JyZXNwb25kaW5nIGNhcHR1cmUgY29tbWFuZHMgaW50byB0 aGUgY29tbWFuZCBzdHJlYW0pLgoKVGhlIE9BIHJlcG9ydHMgZ2VuZXJhdGVkIGluIHRoaXMgd2F5 IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nCndvcmtsb2FkLCBhbmQgdGh1cyBj YW4gYmUgdXNlZCB0aGUgZGVsaW1pdCB0aGUgd29ya2xvYWQgKGkuZS4gc2FtcGxlIHRoZQpjb3Vu dGVycyBhdCB0aGUgd29ya2xvYWQgYm91bmRhcmllcyksIHdpdGhpbiBhbiBvbmdvaW5nIHN0cmVh bSBvZiBwZXJpb2RpYwpjb3VudGVyIHNuYXBzaG90cy4KClRoZXJlIG1heSBiZSB1c2VjYXNlcyB3 aGVyZWluIHdlIG5lZWQgbW9yZSB0aGFuIHBlcmlvZGljIE9BIGNhcHR1cmUgbW9kZQp3aGljaCBp cyBzdXBwb3J0ZWQgY3VycmVudGx5LiBUaGlzIG1vZGUgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHR3 byB1c2VjYXNlczoKICAgIC0gQWJpbGl0eSB0byBjYXB0dXJlIHN5c3RlbSB3aWRlIG1ldHJpY3Ms IGFsb25nd2l0aCB0aGUgYWJpbGl0eSB0byBtYXAKICAgICAgdGhlIHJlcG9ydHMgYmFjayB0byBp bmRpdmlkdWFsIGNvbnRleHRzIChwYXJ0aWN1bGFybHkgZm9yIEhTVykuCiAgICAtIEFiaWxpdHkg dG8gaW5qZWN0IHRhZ3MgZm9yIHdvcmssIGludG8gdGhlIHJlcG9ydHMuIFRoaXMgcHJvdmlkZXMK ICAgICAgdmlzaWJpbGl0eSBpbnRvIHRoZSBtdWx0aXBsZSBzdGFnZXMgb2Ygd29yayB3aXRoaW4g c2luZ2xlIGNvbnRleHQuCgpUaGUgdXNlcnNwYWNlIHdpbGwgYmUgYWJsZSB0byBkaXN0aW5ndWlz aCBiZXR3ZWVuIHRoZSBwZXJpb2RpYyBhbmQgQ1MgYmFzZWQKT0EgcmVwb3J0cyBieSB0aGUgdmly dHVlIG9mIHNvdXJjZV9pbmZvIHNhbXBsZSBmaWVsZC4KClRoZSBjb21tYW5kIE1JX1JFUE9SVF9Q RVJGX0NPVU5UIGNhbiBiZSB1c2VkIHRvIGNhcHR1cmUgc25hcHNob3RzIG9mIE9BCmNvdW50ZXJz LCBhbmQgaXMgaW5zZXJ0ZWQgYXQgQkIgYm91bmRhcmllcy4KVGhlIGRhdGEgdGh1cyBjYXB0dXJl ZCB3aWxsIGJlIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGJ1ZmZlciwgd2hpY2ggd2lsbApiZSBkaWZm ZXJlbnQgZnJvbSB0aGUgYnVmZmVyIHVzZWQgb3RoZXJ3aXNlIGZvciBwZXJpb2RpYyBPQSBjYXB0 dXJlIG1vZGUuClRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHNuYXBzaG90 IGlzIG1haW50YWluZWQgaW4gYSBsaXN0LAp3aGljaCBhbHNvIGhhcyBvZmZzZXRzIGludG8gdGhl IGdlbSBidWZmZXIgb2JqZWN0IHBlciBjYXB0dXJlZCBzbmFwc2hvdC4KSW4gb3JkZXIgdG8gdHJh Y2sgd2hldGhlciB0aGUgZ3B1IGhhcyBjb21wbGV0ZWQgcHJvY2Vzc2luZyB0aGUgbm9kZSwKYSBm aWVsZCBwZXJ0YWluaW5nIHRvIGNvcnJlc3BvbmRpbmcgZ2VtIHJlcXVlc3QgaXMgYWRkZWQsIHdo aWNoIGlzIHRyYWNrZWQKZm9yIGNvbXBsZXRpb24gb2YgdGhlIGNvbW1hbmQuCgpCb3RoIHBlcmlv ZGljIGFuZCBSQ1MgYmFzZWQgcmVwb3J0cyBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIHN0 cmVhbQooY29ycmVzcG9uZGluZyB0byByZW5kZXIgZW5naW5lKSwgYW5kIGl0IGlzIGV4cGVjdGVk IHRvIGhhdmUgdGhlIHNhbXBsZXMKaW4gdGhlIHNlcXVlbnRpYWwgb3JkZXIgYWNjb3JkaW5nIHRv IHRoZWlyIHRpbWVzdGFtcHMuIE5vdywgc2luY2UgdGhlc2UKcmVwb3J0cyBhcmUgY29sbGVjdGVk IGluIHNlcGFyYXRlIGJ1ZmZlcnMsIHRoZXNlIGFyZSBtZXJnZSBzb3J0ZWQgYXQgdGhlCnRpbWUg b2YgZm9yd2FyZGluZyB0byB1c2Vyc3BhY2UgZHVyaW5nIHRoZSByZWFkIGNhbGwuCgp2MjogQWxp Z2luaW5nIHdpdGggdGhlIG5vbi1wZXJmIGludGVyZmFjZSAoY3VzdG9tIGRybSBpb2N0bCBiYXNl ZCkuIEFsc28sCmZldyByZWxhdGVkIHBhdGNoZXMgYXJlIHNxdWFzaGVkIHRvZ2V0aGVyIGZvciBi ZXR0ZXIgcmVhZGFiaWxpdHkKClNpZ25lZC1vZmYtYnk6IFNvdXJhYiBHdXB0YSA8c291cmFiLmd1 cHRhQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4Ynlu aW5lLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAg fCAgNDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyB8ICAg NCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyAgICAgICAgICAgfCA4OTUgKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0KIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAg ICAgICAgICAgICAgICB8ICAxNSArCiA0IGZpbGVzIGNoYW5nZWQsIDgwNSBpbnNlcnRpb25zKCsp LCAxNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYTZhYzFjMy4u MDU2MTMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xODA5LDYgKzE4MDksMTggQEAg c3RydWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzIHsKIAkgKiBUaGUgc3RyZWFtIHdpbGwgYWx3YXlz IGJlIGRpc2FibGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC4KIAkgKi8KIAl2b2lkICgqZGVzdHJv eSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7CisKKwkvKgorCSAqIFJvdXRpbmUg dG8gZW1pdCB0aGUgY29tbWFuZHMgaW4gdGhlIGNvbW1hbmQgc3RyZWFtZXIgYXNzb2NpYXRlZAor CSAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZ3B1IGVuZ2luZS4KKwkgKi8KKwl2b2lkICgqY29t bWFuZF9zdHJlYW1faG9vaykoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOworfTsK KworZW51bSBpOTE1X3BlcmZfc3RyZWFtX3N0YXRlIHsKKwlJOTE1X1BFUkZfU1RSRUFNX0RJU0FC TEVELAorCUk5MTVfUEVSRl9TVFJFQU1fRU5BQkxFX0lOX1BST0dSRVNTLAorCUk5MTVfUEVSRl9T VFJFQU1fRU5BQkxFRCwKIH07CiAKIHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtIHsKQEAgLTE4MTYs MTEgKzE4MjgsMTYgQEAgc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gewogCiAJc3RydWN0IGxpc3Rf aGVhZCBsaW5rOwogCisJZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lOwogCXUzMiBzYW1wbGVf ZmxhZ3M7CiAJaW50IHNhbXBsZV9zaXplOwogCiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eDsKIAlib29sIGVuYWJsZWQ7CisJZW51bSBpOTE1X3BlcmZfc3RyZWFtX3N0YXRlIHN0YXRlOwor CisJLyogV2hldGhlciBjb21tYW5kIHN0cmVhbSBiYXNlZCBkYXRhIGNvbGxlY3Rpb24gaXMgZW5h YmxlZCAqLworCWJvb2wgY3NfbW9kZTsKIAogCWNvbnN0IHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt X29wcyAqb3BzOwogfTsKQEAgLTE4MzgsMTAgKzE4NTUsMjIgQEAgc3RydWN0IGk5MTVfb2Ffb3Bz IHsKIAlpbnQgKCpyZWFkKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkgICAg Y2hhciBfX3VzZXIgKmJ1ZiwKIAkJICAgIHNpemVfdCBjb3VudCwKLQkJICAgIHNpemVfdCAqb2Zm c2V0KTsKKwkJICAgIHNpemVfdCAqb2Zmc2V0LAorCQkgICAgdTMyIHRzKTsKIAlib29sICgqb2Ff YnVmZmVyX2lzX2VtcHR5KShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogfTsK IAorLyoKKyAqIExpc3QgZWxlbWVudCB0byBob2xkIGluZm8gYWJvdXQgdGhlIHBlcmYgc2FtcGxl IGRhdGEgYXNzb2NpYXRlZAorICogd2l0aCBhIHBhcnRpY3VsYXIgR1BVIGNvbW1hbmQgc3RyZWFt LgorICovCitzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSB7CisJc3RydWN0IGxpc3RfaGVh ZCBsaW5rOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwl1MzIgb2Zm c2V0OworCXUzMiBjdHhfaWQ7Cit9OworCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3Ry dWN0IGRybV9kZXZpY2UgZHJtOwogCkBAIC0yMTQ5LDYgKzIxNzgsOCBAQCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSB7CiAJCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyOwog CiAJCXN0cnVjdCBtdXRleCBsb2NrOworCisJCXN0cnVjdCBtdXRleCBzdHJlYW1zX2xvY2s7CiAJ CXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtczsKIAogCQlzcGlubG9ja190IGhvb2tfbG9jazsKQEAg LTIxOTUsNiArMjIyNiwxNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCQljb25zdCBz dHJ1Y3QgaTkxNV9vYV9mb3JtYXQgKm9hX2Zvcm1hdHM7CiAJCQlpbnQgbl9idWlsdGluX3NldHM7 CiAJCX0gb2E7CisKKwkJLyogQ29tbWFuZCBzdHJlYW0gYmFzZWQgcGVyZiBkYXRhIGJ1ZmZlciAq LworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwkJCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOworCQkJdTggKmFkZHI7CisJCX0gY29tbWFuZF9zdHJlYW1fYnVm OworCisJCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OworCQlzcGlubG9ja190IG5vZGVfbGlz dF9sb2NrOwogCX0gcGVyZjsKIAogCS8qIEFic3RyYWN0IHRoZSBzdWJtaXNzaW9uIG1lY2hhbmlz bSAobGVnYWN5IHJpbmdidWZmZXIgb3IgZXhlY2xpc3RzKSBhd2F5ICovCkBAIC0zNjE1LDYgKzM2 NTYsNyBAQCB2b2lkIGk5MTVfb2FfbGVnYWN5X2N0eF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKIHZvaWQgaTkxNV9vYV91cGRhdGVfcmVnX3N0YXRlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCSAgICAgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgsCiAJCQkgICAgICB1aW50MzJfdCAqcmVnX3N0YXRlKTsKK3ZvaWQgaTkxNV9w ZXJmX2NvbW1hbmRfc3RyZWFtX2hvb2soc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp OwogCiAvKiBpOTE1X2dlbV9ldmljdC5jICovCiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2 aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCAzM2M4NTIyLi5kYTUwMmM3IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0xNTIzLDEy ICsxNTIzLDE2IEBAIGV4ZWNidWZfc3VibWl0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1z ICpwYXJhbXMsCiAJaWYgKGV4ZWNfbGVuID09IDApCiAJCWV4ZWNfbGVuID0gcGFyYW1zLT5iYXRj aC0+c2l6ZSAtIHBhcmFtcy0+YXJnc19iYXRjaF9zdGFydF9vZmZzZXQ7CiAKKwlpOTE1X3BlcmZf Y29tbWFuZF9zdHJlYW1faG9vayhwYXJhbXMtPnJlcXVlc3QpOworCiAJcmV0ID0gcGFyYW1zLT5l bmdpbmUtPmVtaXRfYmJfc3RhcnQocGFyYW1zLT5yZXF1ZXN0LAogCQkJCQkgICAgZXhlY19zdGFy dCwgZXhlY19sZW4sCiAJCQkJCSAgICBwYXJhbXMtPmRpc3BhdGNoX2ZsYWdzKTsKIAlpZiAocmV0 KQogCQlyZXR1cm4gcmV0OwogCisJaTkxNV9wZXJmX2NvbW1hbmRfc3RyZWFtX2hvb2socGFyYW1z LT5yZXF1ZXN0KTsKKwogCXRyYWNlX2k5MTVfZ2VtX3JpbmdfZGlzcGF0Y2gocGFyYW1zLT5yZXF1 ZXN0LCBwYXJhbXMtPmRpc3BhdGNoX2ZsYWdzKTsKIAogCWk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92 ZV90b19hY3RpdmUodm1hcywgcGFyYW1zLT5yZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJm LmMKaW5kZXggNThhMTExOC4uN2JiYzc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKQEAg LTI0Nyw2ICsyNDcsMTMgQEAgc3RhdGljIHUzMiBpOTE1X3BlcmZfc3RyZWFtX3BhcmFub2lkID0g dHJ1ZTsKICNkZWZpbmUgR0VOOF9PQVJFUE9SVF9SRUFTT05fR09fVFJBTlNJVElPTiAgKDE8PDIz KQogI2RlZmluZSBHRU45X09BUkVQT1JUX1JFQVNPTl9DTEtfUkFUSU8gICAgICAoMTw8MjQpCiAK Ky8qIERhdGEgY29tbW9uIHRvIHBlcmlvZGljIGFuZCBSQ1MgYmFzZWQgc2FtcGxlcyAqLworc3Ry dWN0IG9hX3NhbXBsZV9kYXRhIHsKKwl1MzIgc291cmNlOworCXUzMiBjdHhfaWQ7CisJY29uc3Qg dTggKnJlcG9ydDsKK307CisKIC8qIGZvciBzeXNjdGwgcHJvY19kb2ludHZlY19taW5tYXggb2Yg aTkxNV9vYV9taW5fdGltZXJfZXhwb25lbnQgKi8KIHN0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBp bnQgb2FfZXhwb25lbnRfbWF4ID0gT0FfRVhQT05FTlRfTUFYOwpAQCAtMjg2LDggKzI5MywxOSBA QCBzdGF0aWMgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGdlbjhfcGx1c19vYV9mb3JtYXRzW0k5MTVf T0FfRk9STUFUX01BWF0gPSB7CiAJW0k5MTVfT0FfRk9STUFUX0M0X0I4XQkJICAgID0geyA3LCA2 NCB9LAogfTsKIAorLyogRHVwbGljYXRlZCBmcm9tIHNpbWlsYXIgc3RhdGljIGVudW0gaW4gaTkx NV9nZW1fZXhlY2J1ZmZlci5jICovCisjZGVmaW5lIEk5MTVfVVNFUl9SSU5HUyAoNCkKK3N0YXRp YyBjb25zdCBlbnVtIGludGVsX2VuZ2luZV9pZCB1c2VyX3JpbmdfbWFwW0k5MTVfVVNFUl9SSU5H UyArIDFdID0geworCVtJOTE1X0VYRUNfREVGQVVMVF0JPSBSQ1MsCisJW0k5MTVfRVhFQ19SRU5E RVJdCT0gUkNTLAorCVtJOTE1X0VYRUNfQkxUXQkJPSBCQ1MsCisJW0k5MTVfRVhFQ19CU0RdCQk9 IFZDUywKKwlbSTkxNV9FWEVDX1ZFQk9YXQk9IFZFQ1MKK307CisKICNkZWZpbmUgU0FNUExFX09B X1JFUE9SVAkoMTw8MCkKICNkZWZpbmUgU0FNUExFX09BX1NPVVJDRV9JTkZPCSgxPDwxKQorI2Rl ZmluZSBTQU1QTEVfQ1RYX0lECQkoMTw8MikKIAogc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVz IHsKIAl1MzIgc2FtcGxlX2ZsYWdzOwpAQCAtMzAwLDggKzMxOCwyMTcgQEAgc3RydWN0IHBlcmZf b3Blbl9wcm9wZXJ0aWVzIHsKIAlpbnQgb2FfZm9ybWF0OwogCWJvb2wgb2FfcGVyaW9kaWM7CiAJ aW50IG9hX3BlcmlvZF9leHBvbmVudDsKKworCS8qIENvbW1hbmQgc3RyZWFtIG1vZGUgKi8KKwli b29sIGNzX21vZGU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lOwogfTsKIAorLyoKKyAq IEVtaXQgdGhlIGNvbW1hbmRzIHRvIGNhcHR1cmUgbWV0cmljcywgaW50byB0aGUgY29tbWFuZCBz dHJlYW0uIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGgg dGhlIHN0cmVhbSBvcGVyYXRpb25zIGFuZCBkb2Vzbid0IHJlcXVpcmUKKyAqIHBlcmYgbXV0ZXgg bG9jay4KKyAqLworCit2b2lkIGk5MTVfcGVyZl9jb21tYW5kX3N0cmVhbV9ob29rKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZW5naW5lLT5pOTE1OworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW07 CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwltdXRl eF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50 cnkoc3RyZWFtLCAmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcywgbGluaykgeworCQlpZiAoKHN0cmVh bS0+c3RhdGUgPT0gSTkxNV9QRVJGX1NUUkVBTV9FTkFCTEVEKSAmJgorCQkJCQlzdHJlYW0tPmNz X21vZGUpCisJCQlzdHJlYW0tPm9wcy0+Y29tbWFuZF9zdHJlYW1faG9vayhyZXF1ZXN0KTsKKwl9 CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2spOworfQorCisvKgor ICogUmVsZWFzZSBzb21lIHBlcmYgZW50cmllcyB0byBtYWtlIHNwYWNlIGZvciBhIG5ldyBlbnRy eSBkYXRhLiBXZSBkZXJlZmVyZW5jZQorICogdGhlIGFzc29jaWF0ZWQgcmVxdWVzdCBiZWZvcmUg ZGVsZXRpbmcgdGhlIGVudHJ5LiBBbHNvLCBubyBuZWVkIHRvIGNoZWNrIGZvcgorICogZ3B1IGNv bXBsZXRpb24gb2YgY29tbWFuZHMsIHNpbmNlLCB0aGVzZSBlbnRyaWVzIGFyZSBhbnl3YXlzIGdv aW5nIHRvIGJlCisgKiByZXBsYWNlZCBieSBhIG5ldyBlbnRyeSwgYW5kIGdwdSB3aWxsIG92ZXJ3 cml0ZSB0aGUgYnVmZmVyIGNvbnRlbnRzCisgKiBldmVudHVhbGx5LCB3aGVuIHRoZSByZXF1ZXN0 IGFzc29jaWF0ZWQgd2l0aCBuZXcgZW50cnkgY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBy ZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkJdTMyIHRhcmdldF9zaXplKQoreworCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9u b2RlICplbnRyeSwgKm5leHQ7CisJdTMyIGVudHJ5X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5v YV9idWZmZXIuZm9ybWF0X3NpemU7CisJdTMyIHNpemUgPSAwOworCisJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlCisJCShlbnRyeSwgbmV4dCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCwgbGlu aykgeworCisJCXNpemUgKz0gZW50cnlfc2l6ZTsKKwkJaTkxNV9nZW1fcmVxdWVzdF9wdXQoZW50 cnktPnJlcXVlc3QpOworCQlsaXN0X2RlbCgmZW50cnktPmxpbmspOworCQlrZnJlZShlbnRyeSk7 CisKKwkJaWYgKHNpemUgPj0gdGFyZ2V0X3NpemUpCisJCQlicmVhazsKKwl9Cit9CisKKy8qCisg KiBJbnNlcnQgdGhlIHBlcmYgZW50cnkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhpcyBmdW5j dGlvbiBuZXZlciBmYWlscywKKyAqIHNpbmNlIGl0IGFsd2F5cyBtYW5hZ2VzIHRvIGluc2VydCB0 aGUgZW50cnkuIElmIHRoZSBzcGFjZSBpcyBleGhhdXN0ZWQgaW4KKyAqIHRoZSBidWZmZXIsIGl0 IHdpbGwgcmVtb3ZlIHRoZSBvbGRlc3QgZW50cmllcyBpbiBvcmRlciB0byBtYWtlIHNwYWNlLgor ICovCitzdGF0aWMgdm9pZCBpbnNlcnRfcGVyZl9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmVudHJ5KQor eworCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICpmaXJzdF9lbnRyeSwgKmxhc3RfZW50 cnk7CisJaW50IG1heF9vZmZzZXQgPSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYu b2JqLT5iYXNlLnNpemU7CisJdTMyIGVudHJ5X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIuZm9ybWF0X3NpemU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlz dF9sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KSkgewor CQllbnRyeS0+b2Zmc2V0ID0gMDsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpbmssICZkZXZf cHJpdi0+cGVyZi5ub2RlX2xpc3QpOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9k ZV9saXN0X2xvY2spOworCQlyZXR1cm47CisJfQorCisJZmlyc3RfZW50cnkgPSBsaXN0X2ZpcnN0 X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QsCisJCQkJICAgICAgIHR5cGVvZigqZmly c3RfZW50cnkpLCBsaW5rKTsKKwlsYXN0X2VudHJ5ID0gbGlzdF9sYXN0X2VudHJ5KCZkZXZfcHJp di0+cGVyZi5ub2RlX2xpc3QsCisJCQkJICAgICB0eXBlb2YoKmxhc3RfZW50cnkpLCBsaW5rKTsK KworCWlmIChsYXN0X2VudHJ5LT5vZmZzZXQgPj0gZmlyc3RfZW50cnktPm9mZnNldCkgeworCQkv KiBTdWZmaWNpZW50IHNwYWNlIGF2YWlsYWJsZSBhdCB0aGUgZW5kIG9mIGJ1ZmZlcj8gKi8KKwkJ aWYgKGxhc3RfZW50cnktPm9mZnNldCArIDIqZW50cnlfc2l6ZSA8IG1heF9vZmZzZXQpCisJCQll bnRyeS0+b2Zmc2V0ID0gbGFzdF9lbnRyeS0+b2Zmc2V0ICsgZW50cnlfc2l6ZTsKKwkJLyoKKwkJ ICogV3JhcGFyb3VuZCBjb25kaXRpb24uIElzIHN1ZmZpY2llbnQgc3BhY2UgYXZhaWxhYmxlIGF0 CisJCSAqIGJlZ2lubmluZyBvZiBidWZmZXI/CisJCSAqLworCQllbHNlIGlmIChlbnRyeV9zaXpl IDwgZmlyc3RfZW50cnktPm9mZnNldCkKKwkJCWVudHJ5LT5vZmZzZXQgPSAwOworCQkvKiBJbnN1 ZmZpY2llbnQgc3BhY2UuIE92ZXJ3cml0ZSBleGlzdGluZyBvbGQgZW50cmllcyAqLworCQllbHNl IHsKKwkJCXUzMiB0YXJnZXRfc2l6ZSA9IGVudHJ5X3NpemUgLSBmaXJzdF9lbnRyeS0+b2Zmc2V0 OworCisJCQlyZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVzKGRldl9wcml2LCB0YXJnZXRfc2l6ZSk7 CisJCQllbnRyeS0+b2Zmc2V0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFN1ZmZpY2llbnQg c3BhY2UgYXZhaWxhYmxlPyAqLworCQlpZiAobGFzdF9lbnRyeS0+b2Zmc2V0ICsgMiplbnRyeV9z aXplIDwgZmlyc3RfZW50cnktPm9mZnNldCkKKwkJCWVudHJ5LT5vZmZzZXQgPSBsYXN0X2VudHJ5 LT5vZmZzZXQgKyBlbnRyeV9zaXplOworCQkvKiBJbnN1ZmZpY2llbnQgc3BhY2UuIE92ZXJ3cml0 ZSBleGlzdGluZyBvbGQgZW50cmllcyAqLworCQllbHNlIHsKKwkJCXUzMiB0YXJnZXRfc2l6ZSA9 IGVudHJ5X3NpemUgLQorCQkJCShmaXJzdF9lbnRyeS0+b2Zmc2V0IC0gbGFzdF9lbnRyeS0+b2Zm c2V0IC0KKwkJCQllbnRyeV9zaXplKTsKKworCQkJcmVsZWFzZV9zb21lX3BlcmZfZW50cmllcyhk ZXZfcHJpdiwgdGFyZ2V0X3NpemUpOworCQkJZW50cnktPm9mZnNldCA9IGxhc3RfZW50cnktPm9m ZnNldCArIGVudHJ5X3NpemU7CisJCX0KKwl9CisJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpbmss ICZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVy Zi5ub2RlX2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcGVyZl9jb21tYW5kX3N0 cmVhbV9ob29rX29hKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJlcS0+aTkxNTsKKwlzdHJ1Y3QgaW50ZWxf cmluZyAqcmluZyA9IHJlcS0+cmluZzsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0g cmVxLT5jdHg7CisJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmVudHJ5OworCXUzMiBh ZGRyID0gMDsKKwlpbnQgcmV0OworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoImFsbG9jIGZh aWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwg NCk7CisJaWYgKHJldCkgeworCQlrZnJlZShlbnRyeSk7CisJCXJldHVybjsKKwl9CisKKwllbnRy eS0+Y3R4X2lkID0gY3R4LT5od19pZDsKKwlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmZW50cnkt PnJlcXVlc3QsIHJlcSk7CisKKwlpbnNlcnRfcGVyZl9lbnRyeShkZXZfcHJpdiwgZW50cnkpOwor CisJYWRkciA9IGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEtPm5vZGUuc3Rh cnQgKworCQllbnRyeS0+b2Zmc2V0OworCisJLyogYWRkciBzaG91bGQgYmUgNjQgYnl0ZSBhbGln bmVkICovCisJQlVHX09OKGFkZHIgJiAweDNmKTsKKworCWlmIChJTlRFTF9JTkZPKGRldl9wcml2 KS0+Z2VuID49IDgpIHsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1JFUE9SVF9QRVJGX0NP VU5UIHwgKDI8PDApKTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGFkZHIgfCBNSV9SRVBPUlRf UEVSRl9DT1VOVF9HR1RUKTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCQlpbnRlbF9y aW5nX2VtaXQocmluZywgaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ocmVxKSk7CisJfSBlbHNl IHsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1JFUE9SVF9QRVJGX0NPVU5UIHwgKDE8PDAp KTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGFkZHIgfCBNSV9SRVBPUlRfUEVSRl9DT1VOVF9H R1RUKTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5v KHJlcSkpOworCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CisJfQorCWludGVsX3Jp bmdfYWR2YW5jZShyaW5nKTsKKwlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShkZXZfcHJpdi0+cGVy Zi5jb21tYW5kX3N0cmVhbV9idWYudm1hLCByZXEsCisJCQkJCUVYRUNfT0JKRUNUX1dSSVRFKTsK K30KKworc3RhdGljIGludCBpOTE1X29hX3Jjc193YWl0X2dwdShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmxhc3Rf ZW50cnkgPSBOVUxMOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxID0gTlVMTDsK KwlpbnQgcmV0OworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgbGFzdCBzY2hlZHVsZWQgcmVxdWVz dCB0byBjb21wbGV0ZS4gVGhpcyB3b3VsZAorCSAqIGltcGxpY2l0bHkgd2FpdCBmb3IgdGhlIHBy aW9yIHN1Ym1pdHRlZCByZXF1ZXN0cy4gVGhlIHJlZmNvdW50CisJICogb2YgdGhlIHJlcXVlc3Rz IGlzIG5vdCBkZWNyZW1lbnRlZCBoZXJlLgorCSAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0X2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3QpKSB7CisJCWxhc3RfZW50cnkgPSBsaXN0X2xhc3RfZW50cnkoJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdCwKKwkJCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlLCBsaW5rKTsK KwkJcmVxID0gbGFzdF9lbnRyeS0+cmVxdWVzdDsKKwl9CisJc3Bpbl91bmxvY2soJmRldl9wcml2 LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gMDsKKworCXJl dCA9IGk5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgdHJ1ZSwgTlVMTCwgTlVMTCk7CisJaWYgKHJldCkg eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB3YWl0IGZvciByZXF1ZXN0XG4iKTsKKwkJcmV0dXJu IHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfb2FfcmNzX2ZyZWVf cmVxdWVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBp OTE1X3BlcmZfY3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUKKwkJKGVudHJ5LCBuZXh0LCAmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0LCBsaW5r KSB7CisJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KGVudHJ5LT5yZXF1ZXN0KTsKKworCQlzcGluX2xv Y2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwkJbGlzdF9kZWwoJmVudHJ5LT5s aW5rKTsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwkJ a2ZyZWUoZW50cnkpOworCX0KK30KKwogLyogTkI6IFRoaXMgaXMgZWl0aGVyIGNhbGxlZCB2aWEg Zm9wcyBvciB0aGUgcG9sbCBjaGVjayBocnRpbWVyIChhdG9taWMgY3R4KQogICoKICAqIEl0J3Mg c2FmZSB0byByZWFkIE9BIGNvbmZpZyBzdGF0ZSBoZXJlIHVubG9ja2VkLCBhc3N1bWluZyB0aGF0 IHRoaXMgaXMgb25seQpAQCAtMzcxLDEwICs1OTgsOCBAQCBzdGF0aWMgaW50IGFwcGVuZF9vYV9z dGF0dXMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKICAqIENvcGllcyBzaW5nbGUg T0EgcmVwb3J0IGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZmZXIuCiAgKi8KIHN0YXRpYyBpbnQg YXBwZW5kX29hX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAotCQkJICAg IGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LAotCQkJICAgIHNpemVfdCAq b2Zmc2V0LAotCQkJICAgIGNvbnN0IHU4ICpyZXBvcnQpCisJCQkgICAgY2hhciBfX3VzZXIgKmJ1 Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgIHNpemVfdCAqb2Zmc2V0LCBzdHJ1Y3Qgb2Ffc2FtcGxl X2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3Ry ZWFtLT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIuZm9ybWF0X3NpemU7CkBAIC0zOTQsNiArNjE5LDM3IEBAIHN0YXRpYyBpbnQgYXBwZW5k X29hX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCWJ1ZiArPSBzaXpl b2YoaGVhZGVyKTsKIAogCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8p IHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZkYXRhLT5zb3VyY2UsIDQpKQorCQkJcmV0dXJu IC1FRkFVTFQ7CisJCWJ1ZiArPSA0OworCX0KKworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVf Q1RYX0lEKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZGF0YS0+Y3R4X2lkLCA0KSkKKwkJ CXJldHVybiAtRUZBVUxUOworCQlidWYgKz0gNDsKKwl9CisKKwlpZiAoc2FtcGxlX2ZsYWdzICYg U0FNUExFX09BX1JFUE9SVCkgeworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZGF0YS0+cmVwb3J0 LCByZXBvcnRfc2l6ZSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnVmICs9IHJlcG9ydF9zaXpl OworCX0KKworCSgqb2Zmc2V0KSArPSBoZWFkZXIuc2l6ZTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGFwcGVuZF9vYV9idWZmZXJfc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCisJCQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJCXNpemVf dCAqb2Zmc2V0LAljb25zdCB1OCAqcmVwb3J0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJdTMyIHNhbXBsZV9mbGFncyA9IHN0cmVh bS0+c2FtcGxlX2ZsYWdzOworCXN0cnVjdCBvYV9zYW1wbGVfZGF0YSBkYXRhID0geyAwIH07CisK KwlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1NPVVJDRV9JTkZPKSB7CiAJCWVudW0gZHJt X2k5MTVfcGVyZl9vYV9ldmVudF9zb3VyY2Ugc291cmNlOwogCiAJCWlmIChJTlRFTF9JTkZPKGRl dl9wcml2KS0+Z2VuID49IDgpIHsKQEAgLTQwOSwxOSArNjY1LDE3IEBAIHN0YXRpYyBpbnQgYXBw ZW5kX29hX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQl9IGVsc2UK IAkJCXNvdXJjZSA9IEk5MTVfUEVSRl9PQV9FVkVOVF9TT1VSQ0VfUEVSSU9ESUM7CiAKLQkJaWYg KGNvcHlfdG9fdXNlcihidWYsICZzb3VyY2UsIDQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJ1 ZiArPSA0OworCQlkYXRhLnNvdXJjZSA9IHNvdXJjZTsKIAl9CiAKLQlpZiAoc2FtcGxlX2ZsYWdz ICYgU0FNUExFX09BX1JFUE9SVCkgewotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmVwb3J0LCBy ZXBvcnRfc2l6ZSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Cisjd2FybmluZyAiRklYTUU6IGFw cGVuZF9vYV9idWZmZXJfc2FtcGxlOiByZWFkIGN0eCBJRCBmcm9tIHJlcG9ydCBhbmQgbWFwIHRo YXQgdG8gYW4gaW50ZWxfY29udGV4dDo6Z2xvYmFsX2lkIgorCWlmIChzYW1wbGVfZmxhZ3MgJiBT QU1QTEVfQ1RYX0lEKQorCQlkYXRhLmN0eF9pZCA9IDA7CiAKLQkoKm9mZnNldCkgKz0gaGVhZGVy LnNpemU7CisJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCisJCWRhdGEucmVw b3J0ID0gcmVwb3J0OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGFwcGVuZF9vYV9zYW1wbGUoc3Ry ZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsICZkYXRhKTsKIH0KIAogLyoqCkBAIC00NDQsNyArNjk4 LDcgQEAgc3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0sCiAJCQkJICBzaXplX3QgY291bnQsCiAJCQkJICBzaXplX3QgKm9mZnNl dCwKIAkJCQkgIHUzMiAqaGVhZF9wdHIsCi0JCQkJICB1MzIgdGFpbCkKKwkJCQkgIHUzMiB0YWls LCB1MzIgdHMpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIuZm9ybWF0X3NpemU7CkBAIC00NTQsNyArNzA4LDcgQEAgc3RhdGljIGludCBnZW44X2FwcGVu ZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJdTMyIHRha2Vu OwogCWludCByZXQgPSAwOwogCi0JQlVHX09OKCFzdHJlYW0tPmVuYWJsZWQpOworCUJVR19PTihz dHJlYW0tPnN0YXRlICE9IEk5MTVfUEVSRl9TVFJFQU1fRU5BQkxFRCk7CiAKIAloZWFkID0gKmhl YWRfcHRyIC0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmd0dF9vZmZzZXQ7CiAJdGFpbCAt PSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZ3R0X29mZnNldDsKQEAgLTQ4NCw2ICs3Mzgs MTEgQEAgc3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0sCiAJCXU4ICpyZXBvcnQgPSBvYV9idWZfYmFzZSArIGhlYWQ7CiAJCXUz MiAqcmVwb3J0MzIgPSAodm9pZCAqKXJlcG9ydDsKIAkJdTMyIGN0eF9pZCA9IHJlcG9ydDMyWzJd OworCQl1MzIgcmVwb3J0X3RzID0gcmVwb3J0MzJbMV07CisKKwkJLyogUmVwb3J0IHRpbWVzdGFt cCBzaG91bGQgbm90IGV4Y2VlZCBwYXNzZWQgaW4gdHMgKi8KKwkJaWYgKHJlcG9ydF90cyA+IHRz KQorCQkJYnJlYWs7CiAKIAkJLyogQWxsIHRoZSByZXBvcnQgc2l6ZXMgZmFjdG9yIG5lYXRseSBp bnRvIHRoZSBidWZmZXIKIAkJICogc2l6ZSBzbyB3ZSBuZXZlciBleHBlY3QgdG8gc2VlIGEgcmVw b3J0IHNwbGl0CkBAIC01NTEsNyArODEwLDcgQEAgc3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9y ZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkgICAgZGV2X3ByaXYt PnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkICE9IGN0eF9pZCkKIAkJCQlyZXBvcnQzMlsyXSA9IDB4 ZmZmZmZmZmY7CiAKLQkJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCBidWYsIGNvdW50 LCBvZmZzZXQsCisJCQlyZXQgPSBhcHBlbmRfb2FfYnVmZmVyX3NhbXBsZShzdHJlYW0sIGJ1Ziwg Y291bnQsIG9mZnNldCwKIAkJCQkJICAgICAgIHJlcG9ydCk7CiAJCQlpZiAocmV0KQogCQkJCWJy ZWFrOwpAQCAtNTg0LDcgKzg0Myw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0 cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogc3RhdGljIGludCBnZW44X29hX3Jl YWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCWNoYXIgX191c2VyICpidWYs CiAJCQlzaXplX3QgY291bnQsCi0JCQlzaXplX3QgKm9mZnNldCkKKwkJCXNpemVfdCAqb2Zmc2V0 LCB1MzIgdHMpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIuZm9ybWF0X3NpemU7CkBAIC02NDEsNyArOTAwLDcgQEAgc3RhdGljIGludCBnZW44X29hX3Jl YWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJfQogCX0KIAotCXJldCA9IGdl bjhfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsICZoZWFkLCB0 YWlsKTsKKwlyZXQgPSBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cmVhbSwgYnVmLCBjb3VudCwg b2Zmc2V0LCAmaGVhZCwgdGFpbCwgdHMpOwogCiAJLyogQWxsIHRoZSByZXBvcnQgc2l6ZXMgYXJl IGEgcG93ZXIgb2YgdHdvIGFuZCB0aGUKIAkgKiBoZWFkIHNob3VsZCBhbHdheXMgYmUgaW5jcmVt ZW50ZWQgYnkgc29tZSBtdWx0aXBsZQpAQCAtNjgzLDcgKzk0Miw3IEBAIHN0YXRpYyBpbnQgZ2Vu N19hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJ CSAgc2l6ZV90IGNvdW50LAogCQkJCSAgc2l6ZV90ICpvZmZzZXQsCiAJCQkJICB1MzIgKmhlYWRf cHRyLAotCQkJCSAgdTMyIHRhaWwpCisJCQkJICB1MzIgdGFpbCwgdTMyIHRzKQogewogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJaW50IHJl cG9ydF9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOwpAQCAt Njk0LDcgKzk1Myw3IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCXUzMiB0YWtlbjsKIAlpbnQgcmV0ID0gMDsKIAot CUJVR19PTighc3RyZWFtLT5lbmFibGVkKTsKKwlCVUdfT04oc3RyZWFtLT5zdGF0ZSAhPSBJOTE1 X1BFUkZfU1RSRUFNX0VOQUJMRUQpOwogCiAJaGVhZCA9ICpoZWFkX3B0ciAtIGRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5ndHRfb2Zmc2V0OwogCXRhaWwgLT0gZGV2X3ByaXYtPnBlcmYub2Eu b2FfYnVmZmVyLmd0dF9vZmZzZXQ7CkBAIC03NTgsNyArMTAxNywxMSBAQCBzdGF0aWMgaW50IGdl bjdfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJ CWNvbnRpbnVlOwogCQl9CiAKLQkJcmV0ID0gYXBwZW5kX29hX3NhbXBsZShzdHJlYW0sIGJ1Ziwg Y291bnQsIG9mZnNldCwgcmVwb3J0KTsKKwkJLyogUmVwb3J0IHRpbWVzdGFtcCBzaG91bGQgbm90 IGV4Y2VlZCBwYXNzZWQgaW4gdHMgKi8KKwkJaWYgKHJlcG9ydDMyWzFdID4gdHMpCisJCQlicmVh azsKKworCQlyZXQgPSBhcHBlbmRfb2FfYnVmZmVyX3NhbXBsZShzdHJlYW0sIGJ1ZiwgY291bnQs IG9mZnNldCwgcmVwb3J0KTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCkBAIC03ODcsNyArMTA1 MCw3IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAogc3RhdGljIGludCBnZW43X29hX3JlYWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKIAkJCWNoYXIgX191c2VyICpidWYsCiAJCQlzaXplX3QgY291bnQs Ci0JCQlzaXplX3QgKm9mZnNldCkKKwkJCXNpemVfdCAqb2Zmc2V0LCB1MzIgdHMpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAlpbnQg cmVwb3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CkBA IC04NjAsNyArMTEyMyw3IEBAIHN0YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCiAJfQogCiAJcmV0ID0gZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhz dHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCwKLQkJCQkgICAgICZoZWFkLCB0YWlsKTsKKwkJCQkg ICAgICZoZWFkLCB0YWlsLCB0cyk7CiAKIAkvKiBBbGwgdGhlIHJlcG9ydCBzaXplcyBhcmUgYSBw b3dlciBvZiB0d28gYW5kIHRoZQogCSAqIGhlYWQgc2hvdWxkIGFsd2F5cyBiZSBpbmNyZW1lbnRl ZCBieSBzb21lIG11bHRpcGxlCkBAIC04ODQsMTMgKzExNDcsMTMyIEBAIHN0YXRpYyBpbnQgZ2Vu N19vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJcmV0dXJuIHJldDsK IH0KIAotc3RhdGljIGludCBpOTE1X29hX3dhaXRfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSkKKy8qKgorICogQ29waWVzIGEgY29tbWFuZCBzdHJlYW0gT0EgcmVwb3J0 IGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZmZXIsIHdoaWxlIGFsc28KKyAqIGZvcndhcmRpbmcg dGhlIHBlcmlvZGljIE9BIHJlcG9ydHMgd2l0aCB0aW1lc3RhbXAgbG93ZXIgdGhhbiBDUyByZXBv cnQuCisgKgorICogTkI6IHNvbWUgZGF0YSBtYXkgYmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCB0byB0 aGUgdXNlcnNwYWNlIGJ1ZmZlcgorICogZXZlbiBpZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgYW5k IHRoaXMgaXMgcmVmbGVjdGVkIGluIHRoZQorICogdXBkYXRlZCBAcmVhZF9zdGF0ZS4KKyAqLwor c3RhdGljIGludCBhcHBlbmRfb2FfcmNzX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtLAorCQkJCWNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQlzaXplX3Qg Km9mZnNldCwKKwkJCQlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqbm9kZSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0 cnVjdCBvYV9zYW1wbGVfZGF0YSBkYXRhID0geyAwIH07CisJY29uc3QgdTggKnJlcG9ydCA9IGRl dl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5hZGRyICsKKwkJCQlub2RlLT5vZmZzZXQ7 CisJdTMyIHNhbXBsZV9mbGFncyA9IHN0cmVhbS0+c2FtcGxlX2ZsYWdzOworCXUzMiByZXBvcnRf dHM7CisJaW50IHJldDsKIAotCS8qIFdlIHdvdWxkIHdhaXQgaW5kZWZpbml0bHkgaWYgcGVyaW9k aWMgc2FtcGxpbmcgaXMgbm90IGVuYWJsZWQgKi8KLQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLnBl cmlvZGljKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGaXJzdCwgYXBwZW5kIHRoZSBwZXJpb2RpYyBP QSBzYW1wbGVzIGhhdmluZyBsb3dlciB0aW1lc3RhbXBzICovCisJcmVwb3J0X3RzID0gKih1MzIg KikocmVwb3J0ICsgNCk7CisJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQoc3RyZWFt LCBidWYsIGNvdW50LCBvZmZzZXQsIHJlcG9ydF90cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pCisJCWRhdGEu c291cmNlID0gSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9SQ1M7CisKKwlpZiAoc2FtcGxlX2Zs YWdzICYgU0FNUExFX0NUWF9JRCkKKwkJZGF0YS5jdHhfaWQgPSBub2RlLT5jdHhfaWQ7CisKKwlp ZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkKKwkJZGF0YS5yZXBvcnQgPSByZXBv cnQ7CisKKwlyZXR1cm4gYXBwZW5kX29hX3NhbXBsZShzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNl dCwgJmRhdGEpOworfQorCisvKioKKyAqIENvcGllcyBhbGwgY29tbWFuZCBzdHJlYW0gYmFzZWQg T0EgcmVwb3J0cyBpbnRvIHVzZXJzcGFjZSByZWFkKCkgYnVmZmVyLgorICoKKyAqIE5COiBzb21l IGRhdGEgbWF5IGJlIHN1Y2Nlc3NmdWxseSBjb3BpZWQgdG8gdGhlIHVzZXJzcGFjZSBidWZmZXIK KyAqIGV2ZW4gaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIGFuZCB0aGlzIGlzIHJlZmxlY3RlZCBp biB0aGUKKyAqIHVwZGF0ZWQgQHJlYWRfc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgb2FfcmNzX2Fw cGVuZF9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCisJCQkJY2hhciBf X3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBzaXplX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBpOTE1 X3BlcmZfY3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7CisJTElTVF9IRUFEKGZyZWVfbGlzdCk7 CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9s b2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KSkgeworCQlz cGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCQlyZXR1cm4gMDsK Kwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LAorCQkJCSAmZGV2X3By aXYtPnBlcmYubm9kZV9saXN0LCBsaW5rKSB7CisJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21w bGV0ZWQoZW50cnktPnJlcXVlc3QpKQorCQkJYnJlYWs7CisJCWxpc3RfbW92ZV90YWlsKCZlbnRy eS0+bGluaywgJmZyZWVfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3RfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eSgmZnJlZV9saXN0KSkKKwkJcmV0dXJu IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZmcmVlX2xpc3Qs IGxpbmspIHsKKwkJcmV0ID0gYXBwZW5kX29hX3Jjc19zYW1wbGUoc3RyZWFtLCBidWYsIGNvdW50 LCBvZmZzZXQsIGVudHJ5KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCWxpc3RfZGVsKCZl bnRyeS0+bGluayk7CisJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KGVudHJ5LT5yZXF1ZXN0KTsKKwkJ a2ZyZWUoZW50cnkpOworCX0KKworCS8qIERvbid0IGRpc2NhcmQgcmVtYWluaW5nIGVudHJpZXMs IGtlZXAgdGhlbSBmb3IgbmV4dCByZWFkICovCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3RfbG9jayk7CisJbGlzdF9zcGxpY2UoJmZyZWVfbGlzdCwgJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2Nr KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFu ZCBzdHJlYW0gYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtIGhhcworICogZGF0YSBy ZWFkeSB0byBiZSBmb3J3YXJkZWQgdG8gdXNlcnNwYWNlLgorICogUmV0dXJucyB0cnVlIGlmIGF0 bGVhc3Qgb25lIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIGNvbW1hbmQgc3RyZWFtIGlzCisgKiBj b21wbGV0ZWQsIGVsc2UgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wgY29tbWFuZF9z dHJlYW1fYnVmX2lzX2VtcHR5KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCisKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owor CXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICplbnRyeSA9IE5VTEw7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKKworCXNwaW5fbG9jaygmZGV2X3By aXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9u dWxsKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QsCisJCQlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2Rh dGFfbm9kZSwgbGluayk7CisJaWYgKGVudHJ5KQorCQlyZXF1ZXN0ID0gZW50cnktPnJlcXVlc3Q7 CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKworCWlmICgh ZW50cnkpCisJCXJldHVybiB0cnVlOworCWVsc2UgaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X2NvbXBs ZXRlZChyZXF1ZXN0KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBDaGVja3Mgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBkYXRhIHJlYWR5IHRvIGZv cndhcmQgdG8gdXNlcnNwYWNlLgorICogRm9yIGNvbW1hbmQgc3RyZWFtIGJhc2VkIHN0cmVhbXMs IGNoZWNrIGlmIHRoZSBjb21tYW5kIHN0cmVhbSBidWZmZXIgaGFzCisgKiBhdGxlYXN0IG9uZSBz YW1wbGUgcmVhZHksIGlmIG5vdCByZXR1cm4gZmFsc2UsIGlycmVzcGVjdGl2ZSBvZiBwZXJpb2Rp YworICogb2EgYnVmZmVyIGhhdmluZyB0aGUgZGF0YSBvciBub3QuCisgKi8KKworc3RhdGljIGJv b2wgc3RyZWFtX2hhdmVfZGF0YV9fdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRl dl9wcml2OwogCiAJLyogTm90ZTogdGhlIG9hX2J1ZmZlcl9pc19lbXB0eSgpIGNvbmRpdGlvbiBp cyBvayB0byBydW4gdW5sb2NrZWQgYXMgaXQKIAkgKiBqdXN0IHBlcmZvcm1zIG1taW8gcmVhZHMg b2YgdGhlIE9BIGJ1ZmZlciBoZWFkICsgdGFpbCBwb2ludGVycyBhbmQKQEAgLTg5OCw4ICsxMjgw LDI5IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV93YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pCiAJICogY2FuJ3QgYmUgZGVzdHJveWVkIHVudGlsIGNvbXBsZXRpb24g KHN1Y2ggYXMgYSByZWFkKCkpIHRoYXQgZW5zdXJlcwogCSAqIHRoZSBkZXZpY2UgKyBPQSBidWZm ZXIgY2FuJ3QgZGlzYXBwZWFyCiAJICovCisJaWYgKHN0cmVhbS0+Y3NfbW9kZSkKKwkJcmV0dXJu ICFjb21tYW5kX3N0cmVhbV9idWZfaXNfZW1wdHkoc3RyZWFtKTsKKwllbHNlCisJCXJldHVybiAh ZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9pc19lbXB0eShkZXZfcHJpdik7Cit9CisK K3N0YXRpYyBpbnQgaTkxNV9vYV93YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKKwlpbnQgcmV0OworCisJLyogV2Ugd291bGQgd2FpdCBpbmRlZmluaXRseSBp ZiBwZXJpb2RpYyBzYW1wbGluZyBpcyBub3QgZW5hYmxlZCAqLworCWlmICghZGV2X3ByaXYtPnBl cmYub2EucGVyaW9kaWMpCisJCXJldHVybiAtRUlPOworCisJaWYgKHN0cmVhbS0+Y3NfbW9kZSkg eworCQlyZXQgPSBpOTE1X29hX3Jjc193YWl0X2dwdShkZXZfcHJpdik7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCX0KKwogCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2 X3ByaXYtPnBlcmYub2EucG9sbF93cSwKLQkJCQkJIWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9i dWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpKTsKKwkJCQkJc3RyZWFtX2hhdmVfZGF0YV9fdW5sb2Nr ZWQoc3RyZWFtKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5MTVfb2FfcG9sbF93YWl0KHN0cnVjdCBp OTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCkBAIC05MTgsNyArMTMyMSwyNyBAQCBzdGF0aWMgaW50 IGk5MTVfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogewogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAKLQlyZXR1 cm4gZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQp OworCWlmIChzdHJlYW0tPmNzX21vZGUpCisJCXJldHVybiBvYV9yY3NfYXBwZW5kX3JlcG9ydHMo c3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQpOworCWVsc2UKKwkJcmV0dXJuIGRldl9wcml2LT5w ZXJmLm9hLm9wcy5yZWFkKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0LAorCQkJCQkJVTMyX01B WCk7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX2NvbW1hbmRfc3RyZWFtX2J1ZihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5z dHJ1Y3RfbXV0ZXgpOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChkZXZfcHJpdi0+cGVy Zi5jb21tYW5kX3N0cmVhbV9idWYub2JqKTsKKwlfX2k5MTVfdm1hX3VucGluKGRldl9wcml2LT5w ZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEpOworCWk5MTVfZ2VtX29iamVjdF9wdXQoZGV2X3By aXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLm9iaik7CisKKwlkZXZfcHJpdi0+cGVyZi5jb21t YW5kX3N0cmVhbV9idWYub2JqID0gTlVMTDsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVh bV9idWYudm1hID0gTlVMTDsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRk ciA9IE5VTEw7CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsK IH0KIAogc3RhdGljIHZvaWQKQEAgLTkzMSw2ICsxMzU0LDcgQEAgZnJlZV9vYV9idWZmZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJaTkxNV9nZW1fb2JqZWN0X3B1dChpOTE1LT5w ZXJmLm9hLm9hX2J1ZmZlci5vYmopOwogCiAJaTkxNS0+cGVyZi5vYS5vYV9idWZmZXIub2JqID0g TlVMTDsKKwlpOTE1LT5wZXJmLm9hLm9hX2J1ZmZlci52bWEgPSBOVUxMOwogCWk5MTUtPnBlcmYu b2Eub2FfYnVmZmVyLmd0dF9vZmZzZXQgPSAwOwogCWk5MTUtPnBlcmYub2Eub2FfYnVmZmVyLmFk ZHIgPSBOVUxMOwogCkBAIC05NDMsMTIgKzEzNjcsMTcgQEAgc3RhdGljIHZvaWQgaTkxNV9vYV9z dHJlYW1fZGVzdHJveShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCiAJQlVHX09O KHN0cmVhbSAhPSBkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtKTsKIAotCWRldl9w cml2LT5wZXJmLm9hLm9wcy5kaXNhYmxlX21ldHJpY19zZXQoZGV2X3ByaXYpOworCWlmIChzdHJl YW0tPmNzX21vZGUpCisJCWZyZWVfY29tbWFuZF9zdHJlYW1fYnVmKGRldl9wcml2KTsKIAotCWZy ZWVfb2FfYnVmZmVyKGRldl9wcml2KTsKKwlpZiAoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVy Lm9iaikgeworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KGRldl9w cml2KTsKIAotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0Vf QUxMKTsKLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCWZyZWVfb2FfYnVmZmVy KGRldl9wcml2KTsKKworCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9S Q0VXQUtFX0FMTCk7CisJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKwl9CiAKIAlk ZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtID0gTlVMTDsKIH0KQEAgLTEwMjYsMTgg KzE0NTUsMTkgQEAgc3RhdGljIHZvaWQgZ2VuOF9pbml0X29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYub2EucG9s bGluLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyBpbnQgYWxsb2Nfb2JqKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqKm9iaiwKKwkJICAgICBzdHJ1Y3QgaTkxNV92bWEgKip2bWEsIHU4ICoqYWRkcikKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYm87CiAJZW51bSBpOTE1X21hcF90eXBlIG1hcDsK LQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAlpbnQgcmV0OwogCi0JQlVHX09OKGRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5vYmopOworCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsK IAogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtKTsK IAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCWJvID0gaTkxNV9nZW1f b2JqZWN0X2NyZWF0ZSgmZGV2X3ByaXYtPmRybSwgT0FfQlVGRkVSX1NJWkUpOwogCWlmIChJU19F UlIoYm8pKSB7CkBAIC0xMDQ1LDUxICsxNDc1LDk3IEBAIHN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVm ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJcmV0ID0gUFRSX0VSUihi byk7CiAJCWdvdG8gdW5sb2NrOwogCX0KLQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIub2Jq ID0gYm87CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKGJvLCBJOTE1 X0NBQ0hFX0xMQyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5yZWY7CiAKIAkvKiBQcmVIU1cg cmVxdWlyZWQgNTEySyBhbGlnbm1lbnQsIEhTVyByZXF1aXJlcyAxNk0gKi8KLQl2bWEgPSBpOTE1 X2dlbV9vYmplY3RfZ2d0dF9waW4oYm8sIE5VTEwsIDAsIFNaXzE2TSwgUElOX01BUFBBQkxFKTsK LQlpZiAoSVNfRVJSKHZtYSkpIHsKLQkJcmV0ID0gUFRSX0VSUih2bWEpOworCSp2bWEgPSBpOTE1 X2dlbV9vYmplY3RfZ2d0dF9waW4oYm8sIE5VTEwsIDAsIFNaXzE2TSwgUElOX01BUFBBQkxFKTsK KwlpZiAoSVNfRVJSKCp2bWEpKSB7CisJCXJldCA9IFBUUl9FUlIoKnZtYSk7CiAJCWdvdG8gZXJy X3VucmVmOwogCX0KLQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudm1hID0gdm1hOwogCiAJ bWFwID0gSEFTX0xMQyhkZXZfcHJpdikgPyBJOTE1X01BUF9XQiA6IEk5MTVfTUFQX1dDOwogCi0J ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmd0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0 KHZtYSk7Ci0JZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFkZHIgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX21hcChibywgbWFwKTsKLQlpZiAoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFk ZHIgPT0gTlVMTCkKKwkqYWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGJvLCBtYXApOwor CWlmICgqYWRkciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3VucGlu OworCX0KIAotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlcihkZXZfcHJpdik7 Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCJPQSBCdWZmZXIgaW5pdGlhbGl6ZWQsIGd0dCBvZmZzZXQg PSAweCV4LCB2YWRkciA9ICVwIiwKLQkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZ3R0 X29mZnNldCwKLQkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWRkcik7Ci0KKwkqb2Jq ID0gYm87CiAJZ290byB1bmxvY2s7CiAKIGVycl91bnBpbjoKLQlfX2k5MTVfdm1hX3VucGluKHZt YSk7CisJX19pOTE1X3ZtYV91bnBpbigqdm1hKTsKIAogZXJyX3VucmVmOgogCWk5MTVfZ2VtX29i amVjdF9wdXQoYm8pOwogCi0JZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmd0dF9vZmZzZXQg PSAwOwotCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5hZGRyID0gTlVMTDsKLQlkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIudm1hID0gTlVMTDsKLQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIub2JqID0gTlVMTDsKLQogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRy bS5zdHJ1Y3RfbXV0ZXgpOworCitvdXQ6CisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYp OwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqYm87CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJdTggKmFkZHI7CisJaW50IHJldDsKKwor CUJVR19PTihkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIub2JqKTsKKworCXJldCA9IGFsbG9j X29iaihkZXZfcHJpdiwgJmJvLCAmdm1hLCAmYWRkcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5vYmogPSBibzsKKwlkZXZfcHJpdi0+ cGVyZi5vYS5vYV9idWZmZXIudm1hID0gdm1hOworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZl ci5hZGRyID0gYWRkcjsKKwlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZ3R0X29mZnNldCA9 IGk5MTVfZ2d0dF9vZmZzZXQodm1hKTsKKworCWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29h X2J1ZmZlcihkZXZfcHJpdik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJPQSBCdWZmZXIgaW5pdGlh bGl6ZWQsIGd0dCBvZmZzZXQgPSAweCV4LCB2YWRkciA9ICVwIiwKKwkJCSBkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIuZ3R0X29mZnNldCwKKwkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIuYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfY29tbWFuZF9zdHJl YW1fYnVmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqYm87CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJdTggKm9ial9h ZGRyOworCWludCByZXQ7CisKKwlCVUdfT04oZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1f YnVmLm9iaik7CisKKwlyZXQgPSBhbGxvY19vYmooZGV2X3ByaXYsICZibywgJnZtYSwgJm9ial9h ZGRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X3ByaXYtPnBlcmYuY29tbWFu ZF9zdHJlYW1fYnVmLm9iaiA9IGJvOworCWRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1 Zi52bWEgPSB2bWE7IAorCWRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5hZGRyID0g b2JqX2FkZHI7CisJaWYgKFdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdCkpKQorCQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KTsKKwor CURSTV9ERUJVR19EUklWRVIoCisJCSJjb21tYW5kIHN0cmVhbSBidWYgaW5pdGlhbGl6ZWQsIGd0 dCBvZmZzZXQgPSAweCV4LCB2YWRkciA9ICVwIiwKKwkJICh1bnNpZ25lZCBpbnQpCisJCSBkZXZf cHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYudm1hLT5ub2RlLnN0YXJ0LAorCQkgZGV2X3By aXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLmFkZHIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0 YXRpYyB2b2lkIGNvbmZpZ19vYV9yZWdzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpOTE1X29hX3JlZyAqcmVncywKIAkJCSAgIGludCBuX3Jl Z3MpCkBAIC0xMzQ3LDcgKzE4MjMsOCBAQCBzdGF0aWMgdm9pZCBnZW43X3VwZGF0ZV9vYWNvbnRy b2xfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlhc3NlcnRf c3Bpbl9sb2NrZWQoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7CiAKLQlpZiAoZGV2X3ByaXYt PnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+ZW5hYmxlZCkgeworCWlmIChkZXZfcHJpdi0+cGVy Zi5vYS5leGNsdXNpdmVfc3RyZWFtLT5zdGF0ZSAhPQorCQkJCQlJOTE1X1BFUkZfU1RSRUFNX0RJ U0FCTEVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgY3R4X2lkID0gMDsKIAogCQlpZiAoZGV2X3ByaXYt PnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4KQpAQCAtMTQ0NCwxMCArMTkyMSwxNSBAQCBz dGF0aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0pCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKIAotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxlKGRldl9wcml2 KTsKLQogCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykKIAkJaHJ0aW1lcl9jYW5jZWwo JmRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIpOworCisJaWYgKHN0cmVhbS0+Y3Nf bW9kZSkgeworCQlpOTE1X29hX3Jjc193YWl0X2dwdShkZXZfcHJpdik7CisJCWk5MTVfb2FfcmNz X2ZyZWVfcmVxdWVzdHMoZGV2X3ByaXYpOworCX0KKworCWRldl9wcml2LT5wZXJmLm9hLm9wcy5v YV9kaXNhYmxlKGRldl9wcml2KTsKIH0KIAogc3RhdGljIHU2NCBvYV9leHBvbmVudF90b19ucyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBleHBvbmVudCkKQEAgLTE0NjMs NiArMTk0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgaTkx NV9vYV9zdHJlYW1fb3BzID0gewogCS53YWl0X3VubG9ja2VkID0gaTkxNV9vYV93YWl0X3VubG9j a2VkLAogCS5wb2xsX3dhaXQgPSBpOTE1X29hX3BvbGxfd2FpdCwKIAkucmVhZCA9IGk5MTVfb2Ff cmVhZCwKKwkuY29tbWFuZF9zdHJlYW1faG9vayA9IGk5MTVfcGVyZl9jb21tYW5kX3N0cmVhbV9o b29rX29hLAogfTsKIAogc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0sCkBAIC0xNDcwLDIzICsxOTUzLDExIEBAIHN0YXRpYyBpbnQg aTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJ ICAgICAgIHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyAqcHJvcHMpCiB7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKLQlpbnQgZm9ybWF0 X3NpemU7CisJYm9vbCByZXF1aXJlX29hX3VuaXQgPSBwcm9wcy0+c2FtcGxlX2ZsYWdzICYgKFNB TVBMRV9PQV9SRVBPUlQgfAorCQkJCQkJICAgICAgU0FNUExFX09BX1NPVVJDRV9JTkZPKTsKKwli b29sIGNzX3NhbXBsZV9kYXRhID0gcHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBP UlQ7CiAJaW50IHJldDsKIAotCS8qIElmIHRoZSBzeXNmcyBtZXRyaWNzLyBkaXJlY3Rvcnkgd2Fz bid0IHJlZ2lzdGVyZWQgZm9yIHNvbWUKLQkgKiByZWFzb24gdGhlbiBkb24ndCBsZXQgdXNlcnNw YWNlIHRyeSB0aGVpciBsdWNrIHdpdGggY29uZmlnCi0JICogSURzCi0JICovCi0JaWYgKCFkZXZf cHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopIHsKLQkJRFJNX0VSUk9SKCJPQSBtZXRyaWNzIHdlcmVu J3QgYWR2ZXJ0aXNlZCB2aWEgc3lzZnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlp ZiAoIWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlcikgewotCQlEUk1fRVJST1Io Ik9BIHVuaXQgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8q IFRvIGF2b2lkIHRoZSBjb21wbGV4aXR5IG9mIGhhdmluZyB0byBhY2N1cmF0ZWx5IGZpbHRlcgog CSAqIGNvdW50ZXIgcmVwb3J0cyBhbmQgbWFyc2hhbCB0byB0aGUgYXBwcm9wcmlhdGUgY2xpZW50 CiAJICogd2UgY3VycmVudGx5IG9ubHkgYWxsb3cgZXhjbHVzaXZlIGFjY2VzcwpAQCAtMTQ5Niw5 NyArMTk2NywxNzUgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKCFwcm9w cy0+bWV0cmljc19zZXQpIHsKLQkJRFJNX0VSUk9SKCJPQSBtZXRyaWMgc2V0IG5vdCBzcGVjaWZp ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIXByb3BzLT5vYV9mb3JtYXQp IHsKLQkJRFJNX0VSUk9SKCJPQSByZXBvcnQgZm9ybWF0IG5vdCBzcGVjaWZpZWRcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfQ1RYX0lE KSAmJiAhcHJvcHMtPmNzX21vZGUpIHsKKwkJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7CisJ CQlEUk1fRVJST1IoCisJCQkJIk9uIEhTVywgY29udGV4dCBJRCBzYW1wbGluZyBvbmx5IHN1cHBv cnRlZCB2aWEgY29tbWFuZCBzdHJlYW0iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2Ug aWYgKCFpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKKwkJCURSTV9FUlJPUigKKwkJCQkiT24gR2Vu OCsgd2l0aG91dCBleGVjbGlzdHMsIGNvbnRleHQgSUQgc2FtcGxpbmcgb25seSBzdXBwb3J0ZWQg dmlhIGNvbW1hbmQgc3RyZWFtIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCXN0 cmVhbS0+c2FtcGxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hl YWRlcik7CiAKLQlmb3JtYXRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbcHJv cHMtPm9hX2Zvcm1hdF0uc2l6ZTsKKwlpZiAocmVxdWlyZV9vYV91bml0KSB7CisJCWludCBmb3Jt YXRfc2l6ZTsKIAotCWlmIChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkg ewotCQlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVfT0FfUkVQT1JUOwotCQlzdHJlYW0t PnNhbXBsZV9zaXplICs9IGZvcm1hdF9zaXplOwotCX0KKwkJLyogSWYgdGhlIHN5c2ZzIG1ldHJp Y3MvIGRpcmVjdG9yeSB3YXNuJ3QgcmVnaXN0ZXJlZCBmb3Igc29tZQorCQkgKiByZWFzb24gdGhl biBkb24ndCBsZXQgdXNlcnNwYWNlIHRyeSB0aGVpciBsdWNrIHdpdGggY29uZmlnCisJCSAqIElE cworCQkgKi8KKwkJaWYgKCFkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopIHsKKwkJCURSTV9F UlJPUigiT0EgbWV0cmljcyB3ZXJlbid0IGFkdmVydGlzZWQgdmlhIHN5c2ZzXG4iKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CiAKLQlpZiAocHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9P QV9TT1VSQ0VfSU5GTykgewotCQlpZiAoIShwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09B X1JFUE9SVCkpIHsKKwkJaWYgKCFkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIp IHsKKwkJCURSTV9FUlJPUigiT0EgdW5pdCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldHVybiAt RU5PREVWOworCQl9CisKKwkJaWYgKCFwcm9wcy0+bWV0cmljc19zZXQpIHsKKwkJCURSTV9FUlJP UigiT0EgbWV0cmljIHNldCBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisKKwkJaWYgKCFwcm9wcy0+b2FfZm9ybWF0KSB7CisJCQlEUk1fRVJST1IoIk9BIHJlcG9y dCBmb3JtYXQgbm90IHNwZWNpZmllZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJ CWlmIChwcm9wcy0+Y3NfbW9kZSAgJiYgKHByb3BzLT5lbmdpbmUhPSBSQ1MpKSB7CiAJCQlEUk1f RVJST1IoCi0JCQkiT0Egc291cmNlIHR5cGUgY2FuJ3QgYmUgc2FtcGxlZCB3aXRob3V0IE9BIHJl cG9ydCIpOworCQkJCSJDb21tYW5kIHN0cmVhbSBPQSBtZXRyaWNzIG9ubHkgYXZhaWxhYmxlIHZp YSBSZW5kZXIgQ1NcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RyZWFtLT5zYW1w bGVfZmxhZ3MgfD0gU0FNUExFX09BX1NPVVJDRV9JTkZPOwotCQlzdHJlYW0tPnNhbXBsZV9zaXpl ICs9IDQ7Ci0JfQorCQlzdHJlYW0tPmVuZ2luZT0gUkNTOworCisJCWZvcm1hdF9zaXplID0KKwkJ CWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbcHJvcHMtPm9hX2Zvcm1hdF0uc2l6ZTsKKwor CQlpZiAocHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpIHsKKwkJCXN0cmVh bS0+c2FtcGxlX2ZsYWdzIHw9IFNBTVBMRV9PQV9SRVBPUlQ7CisJCQlzdHJlYW0tPnNhbXBsZV9z aXplICs9IGZvcm1hdF9zaXplOworCQl9CisKKwkJaWYgKHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBT QU1QTEVfT0FfU09VUkNFX0lORk8pIHsKKwkJCWlmICghKHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBT QU1QTEVfT0FfUkVQT1JUKSkgeworCQkJCURSTV9FUlJPUigKKwkJCQkJICAiT0Egc291cmNlIHR5 cGUgY2FuJ3QgYmUgc2FtcGxlZCB3aXRob3V0IE9BIHJlcG9ydCIpOworCQkJCXJldHVybiAtRUlO VkFMOworCQkJfQorCQkJc3RyZWFtLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX09BX1NPVVJDRV9J TkZPOworCQkJc3RyZWFtLT5zYW1wbGVfc2l6ZSArPSA0OworCQl9CiAKLQlkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPSBmb3JtYXRfc2l6ZTsKLQlCVUdfT04oZGV2X3By aXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplID09IDApOworCQlkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPSBmb3JtYXRfc2l6ZTsKKwkJQlVHX09OKGRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZSA9PSAwKTsKIAotCWRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXQgPQotCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3JtYXRz W3Byb3BzLT5vYV9mb3JtYXRdLmZvcm1hdDsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVy LmZvcm1hdCA9CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3JtYXRzW3Byb3BzLT5vYV9mb3Jt YXRdLmZvcm1hdDsKIAotCWRldl9wcml2LT5wZXJmLm9hLm1ldHJpY3Nfc2V0ID0gcHJvcHMtPm1l dHJpY3Nfc2V0OworCQlkZXZfcHJpdi0+cGVyZi5vYS5tZXRyaWNzX3NldCA9IHByb3BzLT5tZXRy aWNzX3NldDsKIAotCWRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljID0gcHJvcHMtPm9hX3Blcmlv ZGljOwotCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykgewotCQl1NjQgcGVyaW9kX25z ID0gb2FfZXhwb25lbnRfdG9fbnMoZGV2X3ByaXYsCi0JCQkJCQkgIHByb3BzLT5vYV9wZXJpb2Rf ZXhwb25lbnQpOworCQlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYyA9IHByb3BzLT5vYV9wZXJp b2RpYzsKKwkJaWYgKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljKSB7CisJCQl1NjQgcGVyaW9k X25zID0gb2FfZXhwb25lbnRfdG9fbnMoZGV2X3ByaXYsCisJCQkJCQlwcm9wcy0+b2FfcGVyaW9k X2V4cG9uZW50KTsKIAotCQlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQgPSBwcm9w cy0+b2FfcGVyaW9kX2V4cG9uZW50OworCQkJZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kX2V4cG9u ZW50ID0KKwkJCQkJCXByb3BzLT5vYV9wZXJpb2RfZXhwb25lbnQ7CisKKwkJCS8qIFNlZSBjb21t ZW50IGZvciBPQV9UQUlMX01BUkdJTl9OU0VDIGZvciBkZXRhaWxzCisJCQkgKiBhYm91dCB0aGlz IHRhaWxfbWFyZ2luLi4uCisJCQkgKi8KKwkJCWRldl9wcml2LT5wZXJmLm9hLnRhaWxfbWFyZ2lu ID0KKwkJCQkoKE9BX1RBSUxfTUFSR0lOX05TRUMgLyBwZXJpb2RfbnMpICsgMSkgKgorCQkJCWZv cm1hdF9zaXplOworCQl9CisKKwkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cyAmJiBzdHJlYW0t PmN0eCkKKwkJCWRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCA9IHN0cmVhbS0+Y3R4 LT5od19pZDsKKworCQlyZXQgPSBhbGxvY19vYV9idWZmZXIoZGV2X3ByaXYpOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBQUk0gLSBvYnNlcnZhYmlsaXR5IHBlcmZvcm1hbmNl IGNvdW50ZXJzOgorCQkgKgorCQkgKiAgIE9BQ09OVFJPTCwgcGVyZm9ybWFuY2UgY291bnRlciBl bmFibGUsIG5vdGU6CisJCSAqCisJCSAqICAgIldoZW4gdGhpcyBiaXQgaXMgc2V0LCBpbiBvcmRl ciB0byBoYXZlIGNvaGVyZW50IGNvdW50cywKKwkJICogICBSQzYgcG93ZXIgc3RhdGUgYW5kIHRy dW5rIGNsb2NrIGdhdGluZyBtdXN0IGJlIGRpc2FibGVkLgorCQkgKiAgIFRoaXMgY2FuIGJlIGFj aGlldmVkIGJ5IHByb2dyYW1taW5nIE1NSU8gcmVnaXN0ZXJzIGFzCisJCSAqICAgMHhBMDk0PTAg YW5kIDB4QTA5MFszMV09MSIKKwkJICoKKwkJICogICBJbiBvdXIgY2FzZSB3ZSBhcmUgZXhwZWN0 aW5nIHRoYXQgdGFraW5nIHBtICsgRk9SQ0VXQUtFCisJCSAqICAgcmVmZXJlbmNlcyB3aWxsIGVm ZmVjdGl2ZWx5IGRpc2FibGUgUkM2LgorCQkgKi8KKwkJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2 X3ByaXYpOworCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtF X0FMTCk7CisKKwkJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJsZV9tZXRyaWNfc2V0 KGRldl9wcml2KTsKKwkJaWYgKHJldCkgeworCQkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQo ZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3By aXYpOworCQkJZnJlZV9vYV9idWZmZXIoZGV2X3ByaXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQog Ci0JCS8qIFNlZSBjb21tZW50IGZvciBPQV9UQUlMX01BUkdJTl9OU0VDIGZvciBkZXRhaWxzCi0J CSAqIGFib3V0IHRoaXMgdGFpbF9tYXJnaW4uLi4KKwkJLyogT24gSGFzd2VsbCB3ZSBoYXZlIHRv IHRyYWNrIHdoaWNoIE9BU1RBVFVTMSBmbGFncyB3ZSd2ZSBhbHJlYWR5CisJCSAqIHNlZW4gc2lu Y2UgdGhleSBjYW4ndCBiZSBjbGVhcmVkIHdoaWxlIHBlcmlvZGljIHNhbXBsaW5nIGlzIGVuYWJs ZWQuCiAJCSAqLwotCQlkZXZfcHJpdi0+cGVyZi5vYS50YWlsX21hcmdpbiA9Ci0JCQkoKE9BX1RB SUxfTUFSR0lOX05TRUMgLyBwZXJpb2RfbnMpICsgMSkgKiBmb3JtYXRfc2l6ZTsKKwkJZGV2X3By aXYtPnBlcmYub2EuZ2VuN19sYXRjaGVkX29hc3RhdHVzMSA9IDA7CiAJfQogCi0JaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cyAmJiBzdHJlYW0tPmN0eCkKLQkJZGV2X3ByaXYtPnBlcmYub2Euc3Bl Y2lmaWNfY3R4X2lkID0gc3RyZWFtLT5jdHgtPmh3X2lkOworCWlmIChwcm9wcy0+c2FtcGxlX2Zs YWdzICYgU0FNUExFX0NUWF9JRCkgeworCQlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVf Q1RYX0lEOworCQlzdHJlYW0tPnNhbXBsZV9zaXplICs9IDQ7CisJfQogCi0JcmV0ID0gYWxsb2Nf b2FfYnVmZmVyKGRldl9wcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlmIChwcm9w cy0+Y3NfbW9kZSkgeworCQlpZiAoIWNzX3NhbXBsZV9kYXRhKSB7CisJCQlEUk1fRVJST1IoCisJ CQkJIlJpbmcgZ2l2ZW4gd2l0aG91dCByZXF1ZXN0aW5nIGFueSBDUyBkYXRhIHRvIHNhbXBsZSIp OworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gY3NfZXJyb3I7CisJCX0KIAotCS8qIFBSTSAt IG9ic2VydmFiaWxpdHkgcGVyZm9ybWFuY2UgY291bnRlcnM6Ci0JICoKLQkgKiAgIE9BQ09OVFJP TCwgcGVyZm9ybWFuY2UgY291bnRlciBlbmFibGUsIG5vdGU6Ci0JICoKLQkgKiAgICJXaGVuIHRo aXMgYml0IGlzIHNldCwgaW4gb3JkZXIgdG8gaGF2ZSBjb2hlcmVudCBjb3VudHMsCi0JICogICBS QzYgcG93ZXIgc3RhdGUgYW5kIHRydW5rIGNsb2NrIGdhdGluZyBtdXN0IGJlIGRpc2FibGVkLgot CSAqICAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcHJvZ3JhbW1pbmcgTU1JTyByZWdpc3RlcnMg YXMKLQkgKiAgIDB4QTA5ND0wIGFuZCAweEEwOTBbMzFdPTEiCi0JICoKLQkgKiAgIEluIG91ciBj YXNlIHdlIGFyZSBleHBlY3RpbmcgdGhhdCB0YWtpbmcgcG0gKyBGT1JDRVdBS0UKLQkgKiAgIHJl ZmVyZW5jZXMgd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIFJDNi4KLQkgKi8KLQlpbnRlbF9ydW50 aW1lX3BtX2dldChkZXZfcHJpdik7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3By aXYsIEZPUkNFV0FLRV9BTEwpOworCQlpZiAoIShwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExF X0NUWF9JRCkpIHsKKwkJCURSTV9FUlJPUigKKwkJCQkiUmluZyBnaXZlbiB3aXRob3V0IHJlcXVl c3RpbmcgYW55IENTIHNwZWNpZmljIHByb3BlcnR5Iik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJ Z290byBjc19lcnJvcjsKKwkJfQogCi0JcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJs ZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWludGVsX3VuY29yZV9mb3Jj ZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKLQkJaW50ZWxfcnVudGltZV9wbV9w dXQoZGV2X3ByaXYpOwotCQlmcmVlX29hX2J1ZmZlcihkZXZfcHJpdik7Ci0JCXJldHVybiByZXQ7 CisJCXN0cmVhbS0+Y3NfbW9kZSA9IHRydWU7CisKKwkJcmV0ID0gYWxsb2NfY29tbWFuZF9zdHJl YW1fYnVmKGRldl9wcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY3NfZXJyb3I7CiAJfQogCiAJ c3RyZWFtLT5vcHMgPSAmaTkxNV9vYV9zdHJlYW1fb3BzOwogCi0JLyogT24gSGFzd2VsbCB3ZSBo YXZlIHRvIHRyYWNrIHdoaWNoIE9BU1RBVFVTMSBmbGFncyB3ZSd2ZSBhbHJlYWR5Ci0JICogc2Vl biBzaW5jZSB0aGV5IGNhbid0IGJlIGNsZWFyZWQgd2hpbGUgcGVyaW9kaWMgc2FtcGxpbmcgaXMg ZW5hYmxlZC4KLQkgKi8KLQlkZXZfcHJpdi0+cGVyZi5vYS5nZW43X2xhdGNoZWRfb2FzdGF0dXMx ID0gMDsKLQogCWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0gPSBzdHJlYW07CiAK IAlyZXR1cm4gMDsKKworY3NfZXJyb3I6CisJaWYgKHJlcXVpcmVfb2FfdW5pdCkgeworCQlkZXZf cHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKKworCQlpbnRl bF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisJCWludGVs X3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKworCQlmcmVlX29hX2J1ZmZlcihkZXZfcHJpdik7 CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbjdfdXBkYXRlX2h3X2N0eF9p ZF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTY4MCw3ICsy MjI5LDggQEAgdm9pZCBpOTE1X29hX2xlZ2FjeV9jdHhfc3dpdGNoX25vdGlmeShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIAkJcmV0dXJuOwogCiAJaWYgKGRldl9wcml2LT5wZXJm Lm9hLmV4Y2x1c2l2ZV9zdHJlYW0gJiYKLQkgICAgZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZl X3N0cmVhbS0+ZW5hYmxlZCkgeworCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3Ry ZWFtLT5zdGF0ZSAhPQorCQkJCUk5MTVfUEVSRl9TVFJFQU1fRElTQUJMRUQpIHsKIAogCQkvKiBY WFg6IFdlIGRvbid0IHRha2UgYSBsb2NrIGhlcmUgYW5kIHRoaXMgbWF5IHJ1bgogCQkgKiBhc3lu YyB3aXRoIHJlc3BlY3QgdG8gc3RyZWFtIG1ldGhvZHMuIE5vdGFibHkgd2UKQEAgLTE4MDgsNyAr MjM1OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGk5MTVfcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxl LAogCSAqIGRpc2FibGVkIHN0cmVhbSBhcyBhbiBlcnJvci4gSW4gcGFydGljdWxhciBpdCBtaWdo dCBvdGhlcndpc2UgbGVhZAogCSAqIHRvIGEgZGVhZGxvY2sgZm9yIGJsb2NraW5nIGZpbGUgZGVz Y3JpcHRvcnMuLi4KIAkgKi8KLQlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkKKwlpZiAoc3RyZWFtLT5z dGF0ZSA9PSBJOTE1X1BFUkZfU1RSRUFNX0RJU0FCTEVEKQogCQlyZXR1cm4gLUVJTzsKIAogCWlm ICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewpAQCAtMTg0NiwxMyArMjM5NiwyMiBA QCBzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogc3Rh dGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhy dGltZXIgKmhydGltZXIpCiB7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbTsKKwog CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CiAJCWNvbnRhaW5lcl9vZihocnRp bWVyLCB0eXBlb2YoKmRldl9wcml2KSwKIAkJCSAgICAgcGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVy KTsKIAotCWlmICghZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9pc19lbXB0eShkZXZf cHJpdikpIHsKLQkJYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbGluLCB0cnVlKTsK LQkJd2FrZV91cCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CisJLyogTm8gbmVlZCB0byBw cm90ZWN0IHRoZSBzdHJlYW1zIGxpc3QgaGVyZSwgc2luY2UgdGhlIGhydGltZXIgaXMKKwkgKiBk aXNhYmxlZCBiZWZvcmUgdGhlIHN0cmVhbSBpcyByZW1vdmVkIGZyb20gbGlzdCwgYW5kIGN1cnJl bnRseSBhCisJICogc2luZ2xlIGV4Y2x1c2l2ZV9zdHJlYW0gaXMgc3VwcG9ydGVkLgorCSAqIFhY WDogcmV2aXNpdCB0aGlzIHdoZW4gbXVsdGlwbGUgY29uY3VycmVudCBzdHJlYW1zIGFyZSBzdXBw b3J0ZWQuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdHJlYW0sICZkZXZfcHJpdi0+cGVy Zi5zdHJlYW1zLCBsaW5rKSB7CisJCWlmIChzdHJlYW1faGF2ZV9kYXRhX191bmxvY2tlZChzdHJl YW0pKSB7CisJCQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsaW4sIHRydWUpOwor CQkJd2FrZV91cCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CisJCX0KIAl9CiAKIAlocnRp bWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBPTExfUEVSSU9EKSk7CkBAIC0x ODk2LDIzICsyNDU1LDIzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9wZXJmX3BvbGwoc3Ry dWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiAKIHN0YXRpYyB2b2lkIGk5MTVfcGVy Zl9lbmFibGVfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0JaWYg KHN0cmVhbS0+ZW5hYmxlZCkKKwlpZiAoc3RyZWFtLT5zdGF0ZSAhPSBJOTE1X1BFUkZfU1RSRUFN X0RJU0FCTEVEKQogCQlyZXR1cm47CiAKLQkvKiBBbGxvdyBzdHJlYW0tPm9wcy0+ZW5hYmxlKCkg dG8gcmVmZXIgdG8gdGhpcyAqLwotCXN0cmVhbS0+ZW5hYmxlZCA9IHRydWU7CisJc3RyZWFtLT5z dGF0ZSA9IEk5MTVfUEVSRl9TVFJFQU1fRU5BQkxFX0lOX1BST0dSRVNTOwogCiAJaWYgKHN0cmVh bS0+b3BzLT5lbmFibGUpCiAJCXN0cmVhbS0+b3BzLT5lbmFibGUoc3RyZWFtKTsKKworCXN0cmVh bS0+c3RhdGUgPSBJOTE1X1BFUkZfU1RSRUFNX0VOQUJMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGk5 MTVfcGVyZl9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQog ewotCWlmICghc3RyZWFtLT5lbmFibGVkKQorCWlmIChzdHJlYW0tPnN0YXRlICE9IEk5MTVfUEVS Rl9TVFJFQU1fRU5BQkxFRCkKIAkJcmV0dXJuOwogCi0JLyogQWxsb3cgc3RyZWFtLT5vcHMtPmRp c2FibGUoKSB0byByZWZlciB0byB0aGlzICovCi0Jc3RyZWFtLT5lbmFibGVkID0gZmFsc2U7CisJ c3RyZWFtLT5zdGF0ZSA9IEk5MTVfUEVSRl9TVFJFQU1fRElTQUJMRUQ7CiAKIAlpZiAoc3RyZWFt LT5vcHMtPmRpc2FibGUpCiAJCXN0cmVhbS0+b3BzLT5kaXNhYmxlKHN0cmVhbSk7CkBAIC0xOTUz LDE0ICsyNTEyLDE2IEBAIHN0YXRpYyB2b2lkIGk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJ1 Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAKLQlpZiAoc3RyZWFtLT5lbmFibGVkKQor CW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLnN0cmVhbXNfbG9jayk7CisJbGlzdF9kZWwoJnN0 cmVhbS0+bGluayk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2sp OworCisJaWYgKHN0cmVhbS0+c3RhdGUgPT0gSTkxNV9QRVJGX1NUUkVBTV9FTkFCTEVEKQogCQlp OTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKIAogCWlmIChzdHJlYW0tPm9wcy0+ZGVz dHJveSkKIAkJc3RyZWFtLT5vcHMtPmRlc3Ryb3koc3RyZWFtKTsKIAotCWxpc3RfZGVsKCZzdHJl YW0tPmxpbmspOwotCiAJaWYgKHN0cmVhbS0+Y3R4KSB7CiAJCW11dGV4X2xvY2soJmRldl9wcml2 LT5kcm0uc3RydWN0X211dGV4KTsKIAkJaTkxNV9nZW1fY29udGV4dF9wdXQoc3RyZWFtLT5jdHgp OwpAQCAtMjA3MSw3ICsyNjMyLDkgQEAgaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCSAqLwogCUJVR19PTihzdHJlYW0tPnNhbXBsZV9mbGFn cyAhPSBwcm9wcy0+c2FtcGxlX2ZsYWdzKTsKIAorCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJm LnN0cmVhbXNfbG9jayk7CiAJbGlzdF9hZGQoJnN0cmVhbS0+bGluaywgJmRldl9wcml2LT5wZXJm LnN0cmVhbXMpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYuc3RyZWFtc19sb2NrKTsK IAogCWlmIChwYXJhbS0+ZmxhZ3MgJiBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDKQogCQlmX2Zs YWdzIHw9IE9fQ0xPRVhFQzsKQEAgLTIwOTAsNyArMjY1Myw5IEBAIGludCBpOTE1X3BlcmZfb3Bl bl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlyZXR1cm4gc3RyZWFtX2Zk OwogCiBlcnJfb3BlbjoKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2sp OwogCWxpc3RfZGVsKCZzdHJlYW0tPmxpbmspOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBl cmYuc3RyZWFtc19sb2NrKTsKIAlpZiAoc3RyZWFtLT5vcHMtPmRlc3Ryb3kpCiAJCXN0cmVhbS0+ b3BzLT5kZXN0cm95KHN0cmVhbSk7CiBlcnJfYWxsb2M6CkBAIC0yMTk5LDYgKzI3NjQsMjkgQEAg c3RhdGljIGludCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0FfU09VUkNF OgogCQkJcHJvcHMtPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVfT0FfU09VUkNFX0lORk87CiAJCQli cmVhazsKKwkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfRU5HSU5FOiB7CisJCQkJdW5zaWduZWQg aW50IHVzZXJfcmluZ19pZCA9CisJCQkJCXZhbHVlICYgSTkxNV9FWEVDX1JJTkdfTUFTSzsKKwkJ CQllbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmU7CisKKwkJCQlpZiAodXNlcl9yaW5nX2lkID4g STkxNV9VU0VSX1JJTkdTKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJCS8qIFhYWDogQ3Vy cmVudGx5IG9ubHkgUkNTIGlzIHN1cHBvcnRlZC4KKwkJCQkgKiBSZW1vdmUgdGhpcyBjaGVjayB3 aGVuIHN1cHBvcnQgZm9yIG90aGVyCisJCQkJICogZW5naW5lcyBpcyBhZGRlZAorCQkJCSAqLwor CQkJCWVuZ2luZSA9IHVzZXJfcmluZ19tYXBbdXNlcl9yaW5nX2lkXTsKKwkJCQlpZiAoZW5naW5l ICE9IFJDUykKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCQlwcm9wcy0+Y3NfbW9kZSA9IHRy dWU7CisJCQkJcHJvcHMtPmVuZ2luZSA9IGVuZ2luZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNl IERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ1RYX0lEOgorCQkJcHJvcHMtPnNhbXBsZV9mbGFn cyB8PSBTQU1QTEVfQ1RYX0lEOworCQkJYnJlYWs7CiAJCWNhc2UgRFJNX0k5MTVfUEVSRl9QUk9Q X01BWDoKIAkJCUJVRygpOwogCQl9CkBAIC0yMzU3LDggKzI5NDUsMTEgQEAgdm9pZCBpOTE1X3Bl cmZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW5pdF93YWl0cXVl dWVfaGVhZCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CiAKIAlJTklUX0xJU1RfSEVBRCgm ZGV2X3ByaXYtPnBlcmYuc3RyZWFtcyk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJbXV0ZXhf aW5pdCgmZGV2X3ByaXYtPnBlcmYuc3RyZWFtc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2 X3ByaXYtPnBlcmYuaG9va19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBlcmYu bm9kZV9saXN0X2xvY2spOwogCiAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7CiAJCWRldl9w cml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlciA9IGdlbjdfaW5pdF9vYV9idWZmZXI7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJt L2k5MTVfZHJtLmgKaW5kZXggMDU4MzgxMi4uOGJhZjM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAt MTI0OCw2ICsxMjQ4LDcgQEAgZW51bSBkcm1faTkxNV9wZXJmX29hX2V2ZW50X3NvdXJjZSB7CiAJ STkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9VTkRFRklORUQsCiAJSTkxNV9QRVJGX09BX0VWRU5U X1NPVVJDRV9QRVJJT0RJQywKIAlJOTE1X1BFUkZfT0FfRVZFTlRfU09VUkNFX0NPTlRFWFRfU1dJ VENILAorCUk5MTVfUEVSRl9PQV9FVkVOVF9TT1VSQ0VfUkNTLAogCiAJSTkxNV9QRVJGX09BX0VW RU5UX1NPVVJDRV9NQVgJLyogbm9uLUFCSSAqLwogfTsKQEAgLTEyOTMsNiArMTI5NCwxOSBAQCBl bnVtIGRybV9pOTE1X3BlcmZfcHJvcGVydHlfaWQgewogCSAqLwogCURSTV9JOTE1X1BFUkZfUFJP UF9TQU1QTEVfT0FfU09VUkNFLAogCisJLyoqCisJICogVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVy dHkgc3BlY2lmaWVzIHRoZSBHUFUgZW5naW5lIGZvciB3aGljaAorCSAqIHRoZSBzYW1wbGVzIG5l ZWQgdG8gYmUgY29sbGVjdGVkLiBTcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHkgYWxzbworCSAqIGlt cGxpZXMgdGhlIGNvbW1hbmQgc3RyZWFtIGJhc2VkIHNhbXBsZSBjb2xsZWN0aW9uLgorCSAqLwor CURSTV9JOTE1X1BFUkZfUFJPUF9FTkdJTkUsCisKKwkvKioKKwkgKiBUaGUgdmFsdWUgb2YgdGhp cyBwcm9wZXJ0eSBzZXQgdG8gMSByZXF1ZXN0cyBpbmNsdXNpb24gb2YgY29udGV4dCBJRAorCSAq IGluIHRoZSBwZXJmIHNhbXBsZSBkYXRhLgorCSAqLworCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1Q TEVfQ1RYX0lELAorCiAJRFJNX0k5MTVfUEVSRl9QUk9QX01BWCAvKiBub24tQUJJICovCiB9Owog CkBAIC0xMzU4LDYgKzEzNzIsNyBAQCBlbnVtIGRybV9pOTE1X3BlcmZfcmVjb3JkX3R5cGUgewog CSAqICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKIAkgKgog CSAqICAgICB7IHUzMiBzb3VyY2VfaW5mbzsgfSAmJiBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExF X09BX1NPVVJDRQorCSAqICAgICB7IHUzMiBjdHhfaWQ7IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9Q X1NBTVBMRV9DVFhfSUQKIAkgKiAgICAgeyB1MzIgb2FfcmVwb3J0W107IH0gJiYgRFJNX0k5MTVf UEVSRl9QUk9QX1NBTVBMRV9PQQogCSAqIH07CiAJICovCi0tIAoxLjkuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==