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: Thu, 2 Jun 2016 10:48:37 +0530 Message-ID: <1464844729-2774-4-git-send-email-sourab.gupta@intel.com> References: <1464844729-2774-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id BE8746E311 for ; Thu, 2 Jun 2016 05:17:06 +0000 (UTC) In-Reply-To: <1464844729-2774-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: Daniel Vetter , Sourab Gupta , Deepak S 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 NCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyAgICAgICAgICAgfCA4NzEgKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jICAgICAgICAgICB8ICAgNCArCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAg ICAgICAgICAgfCAgMTUgKwogNSBmaWxlcyBjaGFuZ2VkLCA4MDQgaW5zZXJ0aW9ucygrKSwgMTM0 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDgyNjIyYzQuLmY5NWIw MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc5MSw2ICsxNzkxLDE4IEBAIHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtX29wcyB7CiAJICogVGhlIHN0cmVhbSB3aWxsIGFsd2F5cyBiZSBk aXNhYmxlZCBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCiAJICovCiAJdm9pZCAoKmRlc3Ryb3kpKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pOworCisJLyoKKwkgKiBSb3V0aW5lIHRvIGVt aXQgdGhlIGNvbW1hbmRzIGluIHRoZSBjb21tYW5kIHN0cmVhbWVyIGFzc29jaWF0ZWQKKwkgKiB3 aXRoIHRoZSBjb3JyZXNwb25kaW5nIGdwdSBlbmdpbmUuCisJICovCisJdm9pZCAoKmNvbW1hbmRf c3RyZWFtX2hvb2spKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKK307CisKK2Vu dW0gaTkxNV9wZXJmX3N0cmVhbV9zdGF0ZSB7CisJSTkxNV9QRVJGX1NUUkVBTV9ESVNBQkxFRCwK KwlJOTE1X1BFUkZfU1RSRUFNX0VOQUJMRV9JTl9QUk9HUkVTUywKKwlJOTE1X1BFUkZfU1RSRUFN X0VOQUJMRUQsCiB9OwogCiBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSB7CkBAIC0xNzk4LDExICsx ODEwLDE1IEBAIHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtIHsKIAogCXN0cnVjdCBsaXN0X2hlYWQg bGluazsKIAorCWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZTsKIAl1MzIgc2FtcGxlX2ZsYWdz OwogCWludCBzYW1wbGVfc2l6ZTsKIAogCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7Ci0JYm9v bCBlbmFibGVkOworCWVudW0gaTkxNV9wZXJmX3N0cmVhbV9zdGF0ZSBzdGF0ZTsKKworCS8qIFdo ZXRoZXIgY29tbWFuZCBzdHJlYW0gYmFzZWQgZGF0YSBjb2xsZWN0aW9uIGlzIGVuYWJsZWQgKi8K Kwlib29sIGNzX21vZGU7CiAKIAljb25zdCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgKm9w czsKIH07CkBAIC0xODE4LDEwICsxODM0LDIxIEBAIHN0cnVjdCBpOTE1X29hX29wcyB7CiAJCQkJ CXUzMiBjdHhfaWQpOwogCXZvaWQgKCpsZWdhY3lfY3R4X3N3aXRjaF91bmxvY2tlZCkoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwogCWludCAoKnJlYWQpKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCi0JCSAgICBzdHJ1Y3QgaTkxNV9wZXJmX3JlYWRfc3RhdGUgKnJl YWRfc3RhdGUpOworCQkgICAgc3RydWN0IGk5MTVfcGVyZl9yZWFkX3N0YXRlICpyZWFkX3N0YXRl LCB1MzIgdHMpOwogCWJvb2wgKCpvYV9idWZmZXJfaXNfZW1wdHkpKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7CiB9OwogCisvKgorICogTGlzdCBlbGVtZW50IHRvIGhvbGQgaW5m byBhYm91dCB0aGUgcGVyZiBzYW1wbGUgZGF0YSBhc3NvY2lhdGVkCisgKiB3aXRoIGEgcGFydGlj dWxhciBHUFUgY29tbWFuZCBzdHJlYW0uCisgKi8KK3N0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9u b2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXF1ZXN0OworCXUzMiBvZmZzZXQ7CisJdTMyIGN0eF9pZDsKK307CisKIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBrbWVt X2NhY2hlICpvYmplY3RzOwpAQCAtMjEwNyw2ICsyMTM0LDggQEAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgewogCQlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjsKIAogCQlz dHJ1Y3QgbXV0ZXggbG9jazsKKworCQlzdHJ1Y3QgbXV0ZXggc3RyZWFtc19sb2NrOwogCQlzdHJ1 Y3QgbGlzdF9oZWFkIHN0cmVhbXM7CiAKIAkJc3BpbmxvY2tfdCBob29rX2xvY2s7CkBAIC0yMTUx LDYgKzIxODAsMTYgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCQkJY29uc3Qgc3RydWN0 IGk5MTVfb2FfZm9ybWF0ICpvYV9mb3JtYXRzOwogCQkJaW50IG5fYnVpbHRpbl9zZXRzOwogCQl9 IG9hOworCisJCS8qIENvbW1hbmQgc3RyZWFtIGJhc2VkIHBlcmYgZGF0YSBidWZmZXIgKi8KKwkJ c3RydWN0IHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKKwkJCXU4ICphZGRyOworCQl9IGNvbW1hbmRfc3RyZWFtX2J1ZjsKKwor CQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGVfbGlzdDsKKwkJc3BpbmxvY2tfdCBub2RlX2xpc3RfbG9j azsKIAl9IHBlcmY7CiAKIAkvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxl Z2FjeSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwpAQCAtMzUxMyw2ICszNTUyLDcg QEAgdm9pZCBpOTE1X29hX2xlZ2FjeV9jdHhfc3dpdGNoX25vdGlmeShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSk7CiB2b2lkIGk5MTVfb2FfdXBkYXRlX3JlZ19zdGF0ZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y3R4LAogCQkJICAgICAgdWludDMyX3QgKnJlZ19zdGF0ZSk7Cit2b2lkIGk5MTVfcGVyZl9jb21t YW5kX3N0cmVhbV9ob29rKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKIAogLyog aTkxNV9nZW1fZXZpY3QuYyAqLwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ldmljdF9zb21l dGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYwppbmRleCBlMGVlNWQxLi44Yjc1OWFmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0xMzA1LDEyICsxMzA1LDE2IEBAIGk5 MTVfZ2VtX3JpbmdidWZmZXJfc3VibWlzc2lvbihzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3BhcmFt cyAqcGFyYW1zLAogCWlmIChleGVjX2xlbiA9PSAwKQogCQlleGVjX2xlbiA9IHBhcmFtcy0+YmF0 Y2hfb2JqLT5iYXNlLnNpemU7CiAKKwlpOTE1X3BlcmZfY29tbWFuZF9zdHJlYW1faG9vayhwYXJh bXMtPnJlcXVlc3QpOworCiAJcmV0ID0gZW5naW5lLT5kaXNwYXRjaF9leGVjYnVmZmVyKHBhcmFt cy0+cmVxdWVzdCwKIAkJCQkJZXhlY19zdGFydCwgZXhlY19sZW4sCiAJCQkJCXBhcmFtcy0+ZGlz cGF0Y2hfZmxhZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlpOTE1X3BlcmZfY29t bWFuZF9zdHJlYW1faG9vayhwYXJhbXMtPnJlcXVlc3QpOworCiAJdHJhY2VfaTkxNV9nZW1fcmlu Z19kaXNwYXRjaChwYXJhbXMtPnJlcXVlc3QsIHBhcmFtcy0+ZGlzcGF0Y2hfZmxhZ3MpOwogCiAJ aTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2FjdGl2ZSh2bWFzLCBwYXJhbXMtPnJlcXVlc3Qp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwppbmRleCBhNTU3YTgyLi40MmU5MzBmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtODEsNiArODEsMTMgQEAgc3RhdGljIHUzMiBpOTE1X3Bl cmZfc3RyZWFtX3BhcmFub2lkID0gdHJ1ZTsKICNkZWZpbmUgR0VOOF9PQVJFUE9SVF9SRUFTT05f R09fVFJBTlNJVElPTiAgKDE8PDIzKQogI2RlZmluZSBHRU45X09BUkVQT1JUX1JFQVNPTl9DTEtf UkFUSU8gICAgICAoMTw8MjQpCiAKKy8qIERhdGEgY29tbW9uIHRvIHBlcmlvZGljIGFuZCBSQ1Mg YmFzZWQgc2FtcGxlcyAqLworc3RydWN0IG9hX3NhbXBsZV9kYXRhIHsKKwl1MzIgc291cmNlOwor CXUzMiBjdHhfaWQ7CisJY29uc3QgdTggKnJlcG9ydDsKK307CisKIC8qIGZvciBzeXNjdGwgcHJv Y19kb2ludHZlY19taW5tYXggb2YgaTkxNV9vYV9taW5fdGltZXJfZXhwb25lbnQgKi8KIHN0YXRp YyBpbnQgemVybzsKIHN0YXRpYyBpbnQgb2FfZXhwb25lbnRfbWF4ID0gT0FfRVhQT05FTlRfTUFY OwpAQCAtMTIwLDggKzEyNywxOSBAQCBzdGF0aWMgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGdlbjhf cGx1c19vYV9mb3JtYXRzW0k5MTVfT0FfRk9STUFUX01BWF0gPSB7CiAJW0k5MTVfT0FfRk9STUFU X0M0X0I4XQkJICAgID0geyA3LCA2NCB9LAogfTsKIAorLyogRHVwbGljYXRlZCBmcm9tIHNpbWls YXIgc3RhdGljIGVudW0gaW4gaTkxNV9nZW1fZXhlY2J1ZmZlci5jICovCisjZGVmaW5lIEk5MTVf VVNFUl9SSU5HUyAoNCkKK3N0YXRpYyBjb25zdCBlbnVtIGludGVsX2VuZ2luZV9pZCB1c2VyX3Jp bmdfbWFwW0k5MTVfVVNFUl9SSU5HUyArIDFdID0geworCVtJOTE1X0VYRUNfREVGQVVMVF0JPSBS Q1MsCisJW0k5MTVfRVhFQ19SRU5ERVJdCT0gUkNTLAorCVtJOTE1X0VYRUNfQkxUXQkJPSBCQ1Ms CisJW0k5MTVfRVhFQ19CU0RdCQk9IFZDUywKKwlbSTkxNV9FWEVDX1ZFQk9YXQk9IFZFQ1MKK307 CisKICNkZWZpbmUgU0FNUExFX09BX1JFUE9SVAkoMTw8MCkKICNkZWZpbmUgU0FNUExFX09BX1NP VVJDRV9JTkZPCSgxPDwxKQorI2RlZmluZSBTQU1QTEVfQ1RYX0lECQkoMTw8MikKIAogc3RydWN0 IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsKIAl1MzIgc2FtcGxlX2ZsYWdzOwpAQCAtMTM0LDggKzE1 MiwyMzEgQEAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsKIAlpbnQgb2FfZm9ybWF0Owog CWJvb2wgb2FfcGVyaW9kaWM7CiAJaW50IG9hX3BlcmlvZF9leHBvbmVudDsKKworCS8qIENvbW1h bmQgc3RyZWFtIG1vZGUgKi8KKwlib29sIGNzX21vZGU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQg ZW5naW5lOwogfTsKIAorLyoKKyAqIEVtaXQgdGhlIGNvbW1hbmRzIHRvIGNhcHR1cmUgbWV0cmlj cywgaW50byB0aGUgY29tbWFuZCBzdHJlYW0uIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxs ZWQgY29uY3VycmVudGx5IHdpdGggdGhlIHN0cmVhbSBvcGVyYXRpb25zIGFuZCBkb2Vzbid0IHJl cXVpcmUKKyAqIHBlcmYgbXV0ZXggbG9jay4KKyAqLworCit2b2lkIGk5MTVfcGVyZl9jb21tYW5k X3N0cmVhbV9ob29rKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5kZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW07CisKKwlpZiAoIWRldl9wcml2LT5wZXJm LmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5z dHJlYW1zX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFtLCAmZGV2X3ByaXYtPnBl cmYuc3RyZWFtcywgbGluaykgeworCQlpZiAoKHN0cmVhbS0+c3RhdGUgPT0gSTkxNV9QRVJGX1NU UkVBTV9FTkFCTEVEKSAmJgorCQkJCQlzdHJlYW0tPmNzX21vZGUpCisJCQlzdHJlYW0tPm9wcy0+ Y29tbWFuZF9zdHJlYW1faG9vayhyZXF1ZXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+cGVyZi5zdHJlYW1zX2xvY2spOworfQorCisvKgorICogUmVsZWFzZSBzb21lIHBlcmYgZW50 cmllcyB0byBtYWtlIHNwYWNlIGZvciBhIG5ldyBlbnRyeSBkYXRhLiBXZSBkZXJlZmVyZW5jZQor ICogdGhlIGFzc29jaWF0ZWQgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcgdGhlIGVudHJ5LiBBbHNv LCBubyBuZWVkIHRvIGNoZWNrIGZvcgorICogZ3B1IGNvbXBsZXRpb24gb2YgY29tbWFuZHMsIHNp bmNlLCB0aGVzZSBlbnRyaWVzIGFyZSBhbnl3YXlzIGdvaW5nIHRvIGJlCisgKiByZXBsYWNlZCBi eSBhIG5ldyBlbnRyeSwgYW5kIGdwdSB3aWxsIG92ZXJ3cml0ZSB0aGUgYnVmZmVyIGNvbnRlbnRz CisgKiBldmVudHVhbGx5LCB3aGVuIHRoZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBuZXcgZW50 cnkgY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCByZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJdTMyIHRhcmdldF9zaXpl KQoreworCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7CisJdTMy IGVudHJ5X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CisJ dTMyIHNpemUgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlCisJCShlbnRyeSwgbmV4 dCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCwgbGluaykgeworCisJCXNpemUgKz0gZW50cnlf c2l6ZTsKKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShlbnRyeS0+cmVxdWVzdCk7CisJ CWxpc3RfZGVsKCZlbnRyeS0+bGluayk7CisJCWtmcmVlKGVudHJ5KTsKKworCQlpZiAoc2l6ZSA+ PSB0YXJnZXRfc2l6ZSkKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEluc2VydCB0aGUgcGVy ZiBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGlzIGZ1bmN0aW9uIG5ldmVyIGZhaWxz LAorICogc2luY2UgaXQgYWx3YXlzIG1hbmFnZXMgdG8gaW5zZXJ0IHRoZSBlbnRyeS4gSWYgdGhl IHNwYWNlIGlzIGV4aGF1c3RlZCBpbgorICogdGhlIGJ1ZmZlciwgaXQgd2lsbCByZW1vdmUgdGhl IG9sZGVzdCBlbnRyaWVzIGluIG9yZGVyIHRvIG1ha2Ugc3BhY2UuCisgKi8KK3N0YXRpYyB2b2lk IGluc2VydF9wZXJmX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJ CQlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZW50cnkpCit7CisJc3RydWN0IGk5MTVf cGVyZl9jc19kYXRhX25vZGUgKmZpcnN0X2VudHJ5LCAqbGFzdF9lbnRyeTsKKwlpbnQgbWF4X29m ZnNldCA9IGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5vYmotPmJhc2Uuc2l6ZTsK Kwl1MzIgZW50cnlfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6 ZTsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCWlmIChs aXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QpKSB7CisJCWVudHJ5LT5vZmZzZXQg PSAwOworCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGluaywgJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdCk7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisJ CXJldHVybjsKKwl9CisKKwlmaXJzdF9lbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2 LT5wZXJmLm5vZGVfbGlzdCwKKwkJCQkgICAgICAgdHlwZW9mKCpmaXJzdF9lbnRyeSksIGxpbmsp OworCWxhc3RfZW50cnkgPSBsaXN0X2xhc3RfZW50cnkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlz dCwKKwkJCQkgICAgIHR5cGVvZigqbGFzdF9lbnRyeSksIGxpbmspOworCisJaWYgKGxhc3RfZW50 cnktPm9mZnNldCA+PSBmaXJzdF9lbnRyeS0+b2Zmc2V0KSB7CisJCS8qIFN1ZmZpY2llbnQgc3Bh Y2UgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2YgYnVmZmVyPyAqLworCQlpZiAobGFzdF9lbnRyeS0+ b2Zmc2V0ICsgMiplbnRyeV9zaXplIDwgbWF4X29mZnNldCkKKwkJCWVudHJ5LT5vZmZzZXQgPSBs YXN0X2VudHJ5LT5vZmZzZXQgKyBlbnRyeV9zaXplOworCQkvKgorCQkgKiBXcmFwYXJvdW5kIGNv bmRpdGlvbi4gSXMgc3VmZmljaWVudCBzcGFjZSBhdmFpbGFibGUgYXQKKwkJICogYmVnaW5uaW5n IG9mIGJ1ZmZlcj8KKwkJICovCisJCWVsc2UgaWYgKGVudHJ5X3NpemUgPCBmaXJzdF9lbnRyeS0+ b2Zmc2V0KQorCQkJZW50cnktPm9mZnNldCA9IDA7CisJCS8qIEluc3VmZmljaWVudCBzcGFjZS4g T3ZlcndyaXRlIGV4aXN0aW5nIG9sZCBlbnRyaWVzICovCisJCWVsc2UgeworCQkJdTMyIHRhcmdl dF9zaXplID0gZW50cnlfc2l6ZSAtIGZpcnN0X2VudHJ5LT5vZmZzZXQ7CisKKwkJCXJlbGVhc2Vf c29tZV9wZXJmX2VudHJpZXMoZGV2X3ByaXYsIHRhcmdldF9zaXplKTsKKwkJCWVudHJ5LT5vZmZz ZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJLyogU3VmZmljaWVudCBzcGFjZSBhdmFpbGFibGU/ ICovCisJCWlmIChsYXN0X2VudHJ5LT5vZmZzZXQgKyAyKmVudHJ5X3NpemUgPCBmaXJzdF9lbnRy eS0+b2Zmc2V0KQorCQkJZW50cnktPm9mZnNldCA9IGxhc3RfZW50cnktPm9mZnNldCArIGVudHJ5 X3NpemU7CisJCS8qIEluc3VmZmljaWVudCBzcGFjZS4gT3ZlcndyaXRlIGV4aXN0aW5nIG9sZCBl bnRyaWVzICovCisJCWVsc2UgeworCQkJdTMyIHRhcmdldF9zaXplID0gZW50cnlfc2l6ZSAtCisJ CQkJKGZpcnN0X2VudHJ5LT5vZmZzZXQgLSBsYXN0X2VudHJ5LT5vZmZzZXQgLQorCQkJCWVudHJ5 X3NpemUpOworCisJCQlyZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVzKGRldl9wcml2LCB0YXJnZXRf c2l6ZSk7CisJCQllbnRyeS0+b2Zmc2V0ID0gbGFzdF9lbnRyeS0+b2Zmc2V0ICsgZW50cnlfc2l6 ZTsKKwkJfQorCX0KKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGluaywgJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2Nr KTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wZXJmX2NvbW1hbmRfc3RyZWFtX2hvb2tfb2Eoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lID0gcmVxLT5lbmdpbmU7CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdi dWYgPSByZXEtPnJpbmdidWY7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJlcS0+Y3R4 OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+ZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZW50cnk7CisJdTMyIGFk ZHIgPSAwOworCWludCByZXQ7CisKKwkvKiBPQSBjb3VudGVycyBhcmUgb25seSBzdXBwb3J0ZWQg b24gdGhlIHJlbmRlciBlbmdpbmUgKi8KKwlCVUdfT04oZW5naW5lLT5pZCAhPSBSQ1MpOworCisJ ZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZW50cnkg PT0gTlVMTCkgeworCQlEUk1fRVJST1IoImFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9 CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwgNCk7CisJaWYgKHJldCkgeworCQlrZnJl ZShlbnRyeSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+Y3R4X2lkID0gY3R4LT5od19pZDsK KwlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmZW50cnktPnJlcXVlc3QsIHJlcSk7CisKKwlpbnNl cnRfcGVyZl9lbnRyeShkZXZfcHJpdiwgZW50cnkpOworCisJYWRkciA9IGRldl9wcml2LT5wZXJm LmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEtPm5vZGUuc3RhcnQgKworCQllbnRyeS0+b2Zmc2V0Owor CisJLyogYWRkciBzaG91bGQgYmUgNjQgYnl0ZSBhbGlnbmVkICovCisJQlVHX09OKGFkZHIgJiAw eDNmKTsKKworCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKKwkJaW50ZWxfbG9naWNhbF9y aW5nX2VtaXQocmluZ2J1ZiwgTUlfUkVQT1JUX1BFUkZfQ09VTlQgfCAoMjw8MCkpOworCQlpbnRl bF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAorCQkJCQlhZGRyIHwgTUlfUkVQT1JUX1BFUkZf Q09VTlRfR0dUVCk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIDApOworCQlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAorCQkJaTkxNV9nZW1fcmVxdWVzdF9nZXRf c2Vxbm8ocmVxKSk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHJpbmdidWYpOworCX0g ZWxzZSB7CisJCWlmIChJTlRFTF9JTkZPKGVuZ2luZS0+ZGV2KS0+Z2VuID49IDgpIHsKKwkJCWlu dGVsX3JpbmdfZW1pdChlbmdpbmUsIE1JX1JFUE9SVF9QRVJGX0NPVU5UIHwgKDI8PDApKTsKKwkJ CWludGVsX3JpbmdfZW1pdChlbmdpbmUsIGFkZHIgfCBNSV9SRVBPUlRfUEVSRl9DT1VOVF9HR1RU KTsKKwkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIDApOworCQkJaW50ZWxfcmluZ19lbWl0KGVu Z2luZSwKKwkJCQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhyZXEpKTsKKwkJfSBlbHNlIHsK KwkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIE1JX1JFUE9SVF9QRVJGX0NPVU5UIHwgKDE8PDAp KTsKKwkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIGFkZHIgfCBNSV9SRVBPUlRfUEVSRl9DT1VO VF9HR1RUKTsKKwkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0 X3NlcW5vKHJlcSkpOworCQkJaW50ZWxfcmluZ19lbWl0KGVuZ2luZSwgTUlfTk9PUCk7CisJCX0K KwkJaW50ZWxfcmluZ19hZHZhbmNlKGVuZ2luZSk7CisJfQorCWk5MTVfdm1hX21vdmVfdG9fYWN0 aXZlKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEsIHJlcSk7Cit9CisKK3N0 YXRpYyBpbnQgaTkxNV9vYV9yY3Nfd2FpdF9ncHUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQoreworCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICpsYXN0X2VudHJ5ID0g TlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IE5VTEw7CisJaW50IHJl dDsKKworCS8qCisJICogV2FpdCBmb3IgdGhlIGxhc3Qgc2NoZWR1bGVkIHJlcXVlc3QgdG8gY29t cGxldGUuIFRoaXMgd291bGQKKwkgKiBpbXBsaWNpdGx5IHdhaXQgZm9yIHRoZSBwcmlvciBzdWJt aXR0ZWQgcmVxdWVzdHMuIFRoZSByZWZjb3VudAorCSAqIG9mIHRoZSByZXF1ZXN0cyBpcyBub3Qg ZGVjcmVtZW50ZWQgaGVyZS4KKwkgKi8KKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdF9sb2NrKTsKKworCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0 KSkgeworCQlsYXN0X2VudHJ5ID0gbGlzdF9sYXN0X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2Rl X2xpc3QsCisJCQlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSwgbGluayk7CisJCXJlcSA9 IGxhc3RfZW50cnktPnJlcXVlc3Q7CisJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3RfbG9jayk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBfX2k5 MTVfd2FpdF9yZXF1ZXN0KHJlcSwgdHJ1ZSwgTlVMTCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byB3YWl0IGZvciByZXF1ZXN0XG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfb2FfcmNzX2ZyZWVfcmVxdWVz dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpOTE1X3Bl cmZfY3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUKKwkJKGVudHJ5LCBuZXh0LCAmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0LCBsaW5rKSB7CisJ CWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UoZW50cnktPnJlcXVlc3QpOworCisJCXNwaW5f bG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCQlsaXN0X2RlbCgmZW50cnkt PmxpbmspOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOwor CQlrZnJlZShlbnRyeSk7CisJfQorfQorCiAvKiBOQjogVGhpcyBpcyBlaXRoZXIgY2FsbGVkIHZp YSBmb3BzIG9yIHRoZSBwb2xsIGNoZWNrIGhydGltZXIgKGF0b21pYyBjdHgpCiAgKgogICogSXQn cyBzYWZlIHRvIHJlYWQgT0EgY29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3VtaW5nIHRo YXQgdGhpcyBpcyBvbmx5CkBAIC0yMDUsNyArNDQ2LDcgQEAgc3RhdGljIGludCBhcHBlbmRfb2Ff c3RhdHVzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAgKi8KIHN0YXRpYyBpbnQg YXBwZW5kX29hX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJICAg IHN0cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSAqcmVhZF9zdGF0ZSwKLQkJCSAgICBjb25zdCB1 OCAqcmVwb3J0KQorCQkJICAgIHN0cnVjdCBvYV9zYW1wbGVfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwogCWludCBy ZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKQEAg LTIyNSw2ICs0NjYsMzggQEAgc3RhdGljIGludCBhcHBlbmRfb2Ffc2FtcGxlKHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJYnVmICs9IHNpemVvZihoZWFkZXIpOwogCiAJaWYgKHNh bXBsZV9mbGFncyAmIFNBTVBMRV9PQV9TT1VSQ0VfSU5GTykgeworCQlpZiAoY29weV90b191c2Vy KGJ1ZiwgJmRhdGEtPnNvdXJjZSwgNCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnVmICs9IDQ7 CisJfQorCisJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9DVFhfSUQpIHsKKwkJaWYgKGNvcHlf dG9fdXNlcihidWYsICZkYXRhLT5jdHhfaWQsIDQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1 ZiArPSA0OworCX0KKworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJ CWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkYXRhLT5yZXBvcnQsIHJlcG9ydF9zaXplKSkKKwkJCXJl dHVybiAtRUZBVUxUOworCQlidWYgKz0gcmVwb3J0X3NpemU7CisJfQorCisJcmVhZF9zdGF0ZS0+ YnVmID0gYnVmOworCXJlYWRfc3RhdGUtPnJlYWQgKz0gaGVhZGVyLnNpemU7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBhcHBlbmRfb2FfYnVmZmVyX3NhbXBsZShzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJCSAgICBzdHJ1Y3QgaTkxNV9wZXJmX3JlYWRfc3RhdGUg KnJlYWRfc3RhdGUsCisJCQkJICAgIGNvbnN0IHU4ICpyZXBvcnQpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwl1MzIgc2FtcGxlX2Zs YWdzID0gc3RyZWFtLT5zYW1wbGVfZmxhZ3M7CisJc3RydWN0IG9hX3NhbXBsZV9kYXRhIGRhdGEg PSB7IDAgfTsKKworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pIHsK IAkJZW51bSBkcm1faTkxNV9wZXJmX29hX2V2ZW50X3NvdXJjZSBzb3VyY2U7CiAKIAkJaWYgKElO VEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOCkgewpAQCAtMjQwLDIwICs1MTMsMTYgQEAgc3Rh dGljIGludCBhcHBlbmRfb2Ffc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0s CiAJCX0gZWxzZQogCQkJc291cmNlID0gSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9QRVJJT0RJ QzsKIAotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJnNvdXJjZSwgNCkpCi0JCQlyZXR1cm4gLUVG QVVMVDsKLQkJYnVmICs9IDQ7Ci0JfQotCi0JaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9S RVBPUlQpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlcG9ydCwgcmVwb3J0X3NpemUpKQot CQkJcmV0dXJuIC1FRkFVTFQ7CisJCWRhdGEuc291cmNlID0gc291cmNlOwogCX0KKyN3YXJuaW5n ICJGSVhNRTogYXBwZW5kX29hX2J1ZmZlcl9zYW1wbGU6IHJlYWQgY3R4IElEIGZyb20gcmVwb3J0 IGFuZCBtYXAgdGhhdCB0byBhbiBpbnRlbF9jb250ZXh0OjpnbG9iYWxfaWQiCisJaWYgKHNhbXBs ZV9mbGFncyAmIFNBTVBMRV9DVFhfSUQpCisJCWRhdGEuY3R4X2lkID0gMDsKIAotCXJlYWRfc3Rh dGUtPmJ1ZiArPSBoZWFkZXIuc2l6ZTsKLQlyZWFkX3N0YXRlLT5yZWFkICs9IGhlYWRlci5zaXpl OworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKQorCQlkYXRhLnJlcG9ydCA9 IHJlcG9ydDsKIAotCXJldHVybiAwOworCXJldHVybiBhcHBlbmRfb2Ffc2FtcGxlKHN0cmVhbSwg cmVhZF9zdGF0ZSwgJmRhdGEpOwogfQogCiAvKioKQEAgLTI3Myw3ICs1NDIsNyBAQCBzdGF0aWMg aW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIHN0 YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtLAogCQkJCSAgc3RydWN0IGk5MTVfcGVyZl9yZWFkX3N0YXRlICpyZWFkX3N0YXRlLAog CQkJCSAgdTMyICpoZWFkX3B0ciwKLQkJCQkgIHUzMiB0YWlsKQorCQkJCSAgdTMyIHRhaWwsIHUz MiB0cykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRl dl9wcml2OwogCWludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5m b3JtYXRfc2l6ZTsKQEAgLTI4Myw3ICs1NTIsNyBAQCBzdGF0aWMgaW50IGdlbjhfYXBwZW5kX29h X3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAl1MzIgdGFrZW47CiAJ aW50IHJldCA9IDA7CiAKLQlCVUdfT04oIXN0cmVhbS0+ZW5hYmxlZCk7CisJQlVHX09OKHN0cmVh bS0+c3RhdGUgIT0gSTkxNV9QRVJGX1NUUkVBTV9FTkFCTEVEKTsKIAogCWhlYWQgPSAqaGVhZF9w dHIgLSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZ3R0X29mZnNldDsKIAl0YWlsIC09IGRl dl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5ndHRfb2Zmc2V0OwpAQCAtMzEzLDYgKzU4MiwxMSBA QCBzdGF0aWMgaW50IGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSwKIAkJdTggKnJlcG9ydCA9IG9hX2J1Zl9iYXNlICsgaGVhZDsKIAkJdTMyICpy ZXBvcnQzMiA9ICh2b2lkICopcmVwb3J0OwogCQl1MzIgY3R4X2lkID0gcmVwb3J0MzJbMl07CisJ CXUzMiByZXBvcnRfdHMgPSByZXBvcnQzMlsxXTsKKworCQkvKiBSZXBvcnQgdGltZXN0YW1wIHNo b3VsZCBub3QgZXhjZWVkIHBhc3NlZCBpbiB0cyAqLworCQlpZiAocmVwb3J0X3RzID4gdHMpCisJ CQlicmVhazsKIAogCQkvKiBBbGwgdGhlIHJlcG9ydCBzaXplcyBmYWN0b3IgbmVhdGx5IGludG8g dGhlIGJ1ZmZlcgogCQkgKiBzaXplIHNvIHdlIG5ldmVyIGV4cGVjdCB0byBzZWUgYSByZXBvcnQg c3BsaXQKQEAgLTM2NCw3ICs2MzgsOCBAQCBzdGF0aWMgaW50IGdlbjhfYXBwZW5kX29hX3JlcG9y dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCSAgICBkZXZfcHJpdi0+cGVy Zi5vYS5zcGVjaWZpY19jdHhfaWQgIT0gY3R4X2lkKQogCQkJCXJlcG9ydDMyWzJdID0gMHgxZmZm ZmY7CiAKLQkJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRlLCByZXBv cnQpOworCQkJcmV0ID0gYXBwZW5kX29hX2J1ZmZlcl9zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRl LAorCQkJCQkJCXJlcG9ydCk7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCkBAIC0zODYsNyAr NjYxLDcgQEAgc3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCiAgKiB1cGRhdGVkIEByZWFkX3N0YXRlLgogICovCiBzdGF0aWMg aW50IGdlbjhfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAotCQkJc3Ry dWN0IGk5MTVfcGVyZl9yZWFkX3N0YXRlICpyZWFkX3N0YXRlKQorCQkJc3RydWN0IGk5MTVfcGVy Zl9yZWFkX3N0YXRlICpyZWFkX3N0YXRlLCB1MzIgdHMpCiB7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0X3NpemUgPSBk ZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CkBAIC00MjgsNyArNzAzLDcg QEAgc3RhdGljIGludCBnZW44X29hX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKIAogCS8qIElmIHRoZXJlIGlzIHN0aWxsIGJ1ZmZlciBzcGFjZSAqLwogCi0JcmV0ID0gZ2Vu OF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJlYW0sIHJlYWRfc3RhdGUsICZoZWFkLCB0YWlsKTsKKwly ZXQgPSBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cmVhbSwgcmVhZF9zdGF0ZSwgJmhlYWQsIHRh aWwsIHRzKTsKIAogCS8qIEFsbCB0aGUgcmVwb3J0IHNpemVzIGFyZSBhIHBvd2VyIG9mIHR3byBh bmQgdGhlCiAJICogaGVhZCBzaG91bGQgYWx3YXlzIGJlIGluY3JlbWVudGVkIGJ5IHNvbWUgbXVs dGlwbGUKQEAgLTQ2Nyw3ICs3NDIsNyBAQCBzdGF0aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogc3RhdGljIGludCBnZW43X2FwcGVuZF9vYV9yZXBv cnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkJICBzdHJ1Y3QgaTkxNV9w ZXJmX3JlYWRfc3RhdGUgKnJlYWRfc3RhdGUsCiAJCQkJICB1MzIgKmhlYWRfcHRyLAotCQkJCSAg dTMyIHRhaWwpCisJCQkJICB1MzIgdGFpbCwgdTMyIHRzKQogewogCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJaW50IHJlcG9ydF9zaXplID0g ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOwpAQCAtNDc4LDcgKzc1Myw3 IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtLAogCXUzMiB0YWtlbjsKIAlpbnQgcmV0ID0gMDsKIAotCUJVR19PTighc3Ry ZWFtLT5lbmFibGVkKTsKKwlCVUdfT04oc3RyZWFtLT5zdGF0ZSAhPSBJOTE1X1BFUkZfU1RSRUFN X0VOQUJMRUQpOwogCiAJaGVhZCA9ICpoZWFkX3B0ciAtIGRldl9wcml2LT5wZXJmLm9hLm9hX2J1 ZmZlci5ndHRfb2Zmc2V0OwogCXRhaWwgLT0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmd0 dF9vZmZzZXQ7CkBAIC01NDIsNyArODE3LDExIEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2Ff cmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJY29udGludWU7CiAJ CX0KIAotCQlyZXQgPSBhcHBlbmRfb2Ffc2FtcGxlKHN0cmVhbSwgcmVhZF9zdGF0ZSwgcmVwb3J0 KTsKKwkJLyogUmVwb3J0IHRpbWVzdGFtcCBzaG91bGQgbm90IGV4Y2VlZCBwYXNzZWQgaW4gdHMg Ki8KKwkJaWYgKHJlcG9ydDMyWzFdID4gdHMpCisJCQlicmVhazsKKworCQlyZXQgPSBhcHBlbmRf b2FfYnVmZmVyX3NhbXBsZShzdHJlYW0sIHJlYWRfc3RhdGUsIHJlcG9ydCk7CiAJCWlmIChyZXQp CiAJCQlicmVhazsKIApAQCAtNTY5LDcgKzg0OCw3IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRf b2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogICogdXBkYXRlZCBA cmVhZF9zdGF0ZS4KICAqLwogc3RhdGljIGludCBnZW43X29hX3JlYWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKLQkJCXN0cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSAqcmVhZF9z dGF0ZSkKKwkJCXN0cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSAqcmVhZF9zdGF0ZSwgdTMyIHRz KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3By aXY7CiAJaW50IHJlcG9ydF9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1h dF9zaXplOwpAQCAtNjQxLDcgKzkyMCw3IEBAIHN0YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQlHRU43X09BU1RBVFVTMV9SRVBPUlRfTE9T VDsKIAl9CiAKLQlyZXQgPSBnZW43X2FwcGVuZF9vYV9yZXBvcnRzKHN0cmVhbSwgcmVhZF9zdGF0 ZSwgJmhlYWQsIHRhaWwpOworCXJldCA9IGdlbjdfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBy ZWFkX3N0YXRlLCAmaGVhZCwgdGFpbCwgdHMpOwogCiAJLyogQWxsIHRoZSByZXBvcnQgc2l6ZXMg YXJlIGEgcG93ZXIgb2YgdHdvIGFuZCB0aGUKIAkgKiBoZWFkIHNob3VsZCBhbHdheXMgYmUgaW5j cmVtZW50ZWQgYnkgc29tZSBtdWx0aXBsZQpAQCAtNjY1LDIwICs5NDQsMTMxIEBAIHN0YXRpYyBp bnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJcmV0dXJu IHJldDsKIH0KIAotc3RhdGljIGJvb2wgaTkxNV9vYV9jYW5fcmVhZChzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQorLyoqCisgKiBDb3BpZXMgYSBjb21tYW5kIHN0cmVhbSBPQSByZXBv cnQgaW50byB1c2Vyc3BhY2UgcmVhZCgpIGJ1ZmZlciwgd2hpbGUgYWxzbworICogZm9yd2FyZGlu ZyB0aGUgcGVyaW9kaWMgT0EgcmVwb3J0cyB3aXRoIHRpbWVzdGFtcCBsb3dlciB0aGFuIENTIHJl cG9ydC4KKyAqCisgKiBOQjogc29tZSBkYXRhIG1heSBiZSBzdWNjZXNzZnVsbHkgY29waWVkIHRv IHRoZSB1c2Vyc3BhY2UgYnVmZmVyCisgKiBldmVuIGlmIGFuIGVycm9yIGlzIHJldHVybmVkLCBh bmQgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlCisgKiB1cGRhdGVkIEByZWFkX3N0YXRlLgorICov CitzdGF0aWMgaW50IGFwcGVuZF9vYV9yY3Nfc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCisJCQkJIHN0cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSAqcmVhZF9zdGF0ZSwK KwkJCQkgc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKm5vZGUpCiB7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3Qgb2Ff c2FtcGxlX2RhdGEgZGF0YSA9IHsgMCB9OworCWNvbnN0IHU4ICpyZXBvcnQgPSBkZXZfcHJpdi0+ cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkciArCisJCQkJbm9kZS0+b2Zmc2V0OworCXUzMiBz YW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBsZV9mbGFnczsKKwl1MzIgcmVwb3J0X3RzOworCWlu dCByZXQ7CiAKLQlyZXR1cm4gIWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfaXNfZW1w dHkoZGV2X3ByaXYpOworCS8qIEZpcnN0LCBhcHBlbmQgdGhlIHBlcmlvZGljIE9BIHNhbXBsZXMg aGF2aW5nIGxvd2VyIHRpbWVzdGFtcHMgKi8KKwlyZXBvcnRfdHMgPSAqKHUzMiAqKShyZXBvcnQg KyA0KTsKKwlyZXQgPSBkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVhZChzdHJlYW0sIHJlYWRfc3Rh dGUsIHJlcG9ydF90cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzYW1wbGVf ZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pCisJCWRhdGEuc291cmNlID0gSTkxNV9QRVJG X09BX0VWRU5UX1NPVVJDRV9SQ1M7CisKKwlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX0NUWF9J RCkKKwkJZGF0YS5jdHhfaWQgPSBub2RlLT5jdHhfaWQ7CisKKwlpZiAoc2FtcGxlX2ZsYWdzICYg U0FNUExFX09BX1JFUE9SVCkKKwkJZGF0YS5yZXBvcnQgPSByZXBvcnQ7CisKKwlyZXR1cm4gYXBw ZW5kX29hX3NhbXBsZShzdHJlYW0sIHJlYWRfc3RhdGUsICZkYXRhKTsKIH0KIAotc3RhdGljIGlu dCBpOTE1X29hX3dhaXRfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkK Ky8qKgorICogQ29waWVzIGFsbCBjb21tYW5kIHN0cmVhbSBiYXNlZCBPQSByZXBvcnRzIGludG8g dXNlcnNwYWNlIHJlYWQoKSBidWZmZXIuCisgKgorICogTkI6IHNvbWUgZGF0YSBtYXkgYmUgc3Vj Y2Vzc2Z1bGx5IGNvcGllZCB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgorICogZXZlbiBpZiBhbiBl cnJvciBpcyByZXR1cm5lZCwgYW5kIHRoaXMgaXMgcmVmbGVjdGVkIGluIHRoZQorICogdXBkYXRl ZCBAcmVhZF9zdGF0ZS4KKyAqLworc3RhdGljIGludCBvYV9yY3NfYXBwZW5kX3JlcG9ydHMoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgIHN0cnVjdCBpOTE1X3BlcmZfcmVh ZF9zdGF0ZSAqcmVhZF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICpl bnRyeSwgKm5leHQ7CisJTElTVF9IRUFEKGZyZWVfbGlzdCk7CisJaW50IHJldCA9IDA7CiAKLQkv KiBXZSB3b3VsZCB3YWl0IGluZGVmaW5pdGx5IGlmIHBlcmlvZGljIHNhbXBsaW5nIGlzIG5vdCBl bmFibGVkICovCi0JaWYgKCFkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykKLQkJcmV0dXJuIC1F SU87CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisJaWYgKGxp c3RfZW1wdHkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2soJmRl dl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwKKwkJCQkgJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdCwgbGluaykgeworCQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGVudHJ5LT5y ZXF1ZXN0LCB0cnVlKSkKKwkJCWJyZWFrOworCQlsaXN0X21vdmVfdGFpbCgmZW50cnktPmxpbmss ICZmcmVlX2xpc3QpOworCX0KKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0 X2xvY2spOworCisJaWYgKGxpc3RfZW1wdHkoJmZyZWVfbGlzdCkpCisJCXJldHVybiAwOworCisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmZnJlZV9saXN0LCBsaW5rKSB7 CisJCXJldCA9IGFwcGVuZF9vYV9yY3Nfc2FtcGxlKHN0cmVhbSwgcmVhZF9zdGF0ZSwgZW50cnkp OworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJbGlzdF9kZWwoJmVudHJ5LT5saW5rKTsKKwkJ aTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShlbnRyeS0+cmVxdWVzdCk7CisJCWtmcmVlKGVu dHJ5KTsKKwl9CisKKwkvKiBEb24ndCBkaXNjYXJkIHJlbWFpbmluZyBlbnRyaWVzLCBrZWVwIHRo ZW0gZm9yIG5leHQgcmVhZCAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0 X2xvY2spOworCWxpc3Rfc3BsaWNlKCZmcmVlX2xpc3QsICZkZXZfcHJpdi0+cGVyZi5ub2RlX2xp c3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc3RyZWFt IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmVhbSBoYXMKKyAqIGRhdGEgcmVhZHkgdG8g YmUgZm9yd2FyZGVkIHRvIHVzZXJzcGFjZS4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhdGxlYXN0IG9u ZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBjb21tYW5kIHN0cmVhbSBpcworICogY29tcGxldGVk LCBlbHNlIHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sIGNvbW1hbmRfc3RyZWFtX2J1 Zl9pc19lbXB0eShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQorCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3Qg aTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdCA9IE5VTEw7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdF9sb2NrKTsKKwllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZGV2 X3ByaXYtPnBlcmYubm9kZV9saXN0LAorCQkJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUs IGxpbmspOworCWlmIChlbnRyeSkKKwkJcmVxdWVzdCA9IGVudHJ5LT5yZXF1ZXN0OworCXNwaW5f dW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisKKwlpZiAoIWVudHJ5KQor CQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVx dWVzdCwgdHJ1ZSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZGF0YSByZWFkeSB0byBmb3J3 YXJkIHRvIHVzZXJzcGFjZS4KKyAqIEZvciBjb21tYW5kIHN0cmVhbSBiYXNlZCBzdHJlYW1zLCBj aGVjayBpZiB0aGUgY29tbWFuZCBzdHJlYW0gYnVmZmVyIGhhcworICogYXRsZWFzdCBvbmUgc2Ft cGxlIHJlYWR5LCBpZiBub3QgcmV0dXJuIGZhbHNlLCBpcnJlc3BlY3RpdmUgb2YgcGVyaW9kaWMK KyAqIG9hIGJ1ZmZlciBoYXZpbmcgdGhlIGRhdGEgb3Igbm90LgorICovCisKK3N0YXRpYyBib29s IHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZf cHJpdjsKIAogCS8qIE5vdGU6IHRoZSBvYV9idWZmZXJfaXNfZW1wdHkoKSBjb25kaXRpb24gaXMg b2sgdG8gcnVuIHVubG9ja2VkIGFzIGl0CiAJICoganVzdCBwZXJmb3JtcyBtbWlvIHJlYWRzIG9m IHRoZSBPQSBidWZmZXIgaGVhZCArIHRhaWwgcG9pbnRlcnMgYW5kCkBAIC02ODYsOCArMTA3Niwz NSBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffd2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKQogCSAqIGNhbid0IGJlIGRlc3Ryb3llZCB1bnRpbCBjb21wbGV0aW9uIChz dWNoIGFzIGEgcmVhZCgpKSB0aGF0IGVuc3VyZXMKIAkgKiB0aGUgZGV2aWNlICsgT0EgYnVmZmVy IGNhbid0IGRpc2FwcGVhcgogCSAqLworCWlmIChzdHJlYW0tPmNzX21vZGUpCisJCXJldHVybiAh Y29tbWFuZF9zdHJlYW1fYnVmX2lzX2VtcHR5KHN0cmVhbSk7CisJZWxzZQorCQlyZXR1cm4gIWRl dl9wcml2LT5wZXJmLm9hLm9wcy5vYV9idWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpOworfQorCitz dGF0aWMgYm9vbCBpOTE1X29hX2Nhbl9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCit7CisKKwlyZXR1cm4gc3RyZWFtX2hhdmVfZGF0YV9fdW5sb2NrZWQoc3RyZWFtKTsKK30K Kworc3RhdGljIGludCBpOTE1X29hX3dhaXRfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJl YW0tPmRldl9wcml2OworCWludCByZXQ7CisKKwkvKiBXZSB3b3VsZCB3YWl0IGluZGVmaW5pdGx5 IGlmIHBlcmlvZGljIHNhbXBsaW5nIGlzIG5vdCBlbmFibGVkICovCisJaWYgKCFkZXZfcHJpdi0+ cGVyZi5vYS5wZXJpb2RpYykKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoc3RyZWFtLT5jc19tb2Rl KSB7CisJCXJldCA9IGk5MTVfb2FfcmNzX3dhaXRfZ3B1KGRldl9wcml2KTsKKwkJaWYgKHJldCkK KwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShk ZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxLAotCQkJCQkhZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9h X2J1ZmZlcl9pc19lbXB0eShkZXZfcHJpdikpOworCQkJCQlzdHJlYW1faGF2ZV9kYXRhX191bmxv Y2tlZChzdHJlYW0pKTsKIH0KIAogc3RhdGljIHZvaWQgaTkxNV9vYV9wb2xsX3dhaXQoc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKQEAgLTcwNCw3ICsxMTIxLDI3IEBAIHN0YXRpYyBp bnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAotCXJl dHVybiBkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVhZChzdHJlYW0sIHJlYWRfc3RhdGUpOworCWlm IChzdHJlYW0tPmNzX21vZGUpCisJCXJldHVybiBvYV9yY3NfYXBwZW5kX3JlcG9ydHMoc3RyZWFt LCByZWFkX3N0YXRlKTsKKwllbHNlCisJCXJldHVybiBkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVh ZChzdHJlYW0sIHJlYWRfc3RhdGUsIFUzMl9NQVgpOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9j b21tYW5kX3N0cmVhbV9idWYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorewor CW11dGV4X2xvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X2dlbV9v YmplY3RfdW5waW5fbWFwKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5vYmopOwor CWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFt X2J1Zi5vYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKAorCQkJJmRldl9wcml2LT5w ZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5vYmotPmJhc2UpOworCisJZGV2X3ByaXYtPnBlcmYuY29t bWFuZF9zdHJlYW1fYnVmLm9iaiA9IE5VTEw7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJl YW1fYnVmLnZtYSA9IE5VTEw7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLmFk ZHIgPSBOVUxMOworCisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgp OwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzI5LDEyICsxMTY2LDE3IEBAIHN0YXRpYyB2b2lkIGk5 MTVfb2Ffc3RyZWFtX2Rlc3Ryb3koc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAog CUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSk7CiAK LQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKKwlp ZiAoc3RyZWFtLT5jc19tb2RlKQorCQlmcmVlX2NvbW1hbmRfc3RyZWFtX2J1ZihkZXZfcHJpdik7 CiAKLQlmcmVlX29hX2J1ZmZlcihkZXZfcHJpdik7CisJaWYgKGRldl9wcml2LT5wZXJmLm9hLm9h X2J1ZmZlci5vYmopIHsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLmRpc2FibGVfbWV0cmljX3Nl dChkZXZfcHJpdik7CiAKLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9S Q0VXQUtFX0FMTCk7Ci0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQlmcmVlX29h X2J1ZmZlcihkZXZfcHJpdik7CisKKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3By aXYsIEZPUkNFV0FLRV9BTEwpOworCQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJ fQogCiAJZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSA9IE5VTEw7CiB9CkBAIC03 OTIsMTYgKzEyMzQsMTcgQEAgc3RhdGljIHZvaWQgZ2VuOF9pbml0X29hX2J1ZmZlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCSAgICBHRU44X09BVEFJTFBUUl9NQVNLKSk7 CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKK3N0YXRpYyBpbnQgYWxsb2Nfb2JqKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKKwkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqKm9iaiwgdTgg KiphZGRyKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpibzsKIAlpbnQgcmV0Owog Ci0JQlVHX09OKGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5vYmopOworCWludGVsX3J1bnRp bWVfcG1fZ2V0KGRldl9wcml2KTsKIAogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKGRldl9wcml2LT5kZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0 OwogCiAJYm8gPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGRldl9wcml2LT5kZXYsIE9BX0JVRkZF Ul9TSVpFKTsKIAlpZiAoSVNfRVJSKGJvKSkgewpAQCAtODA5LDcgKzEyNTIsNiBAQCBzdGF0aWMg aW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ CXJldCA9IFBUUl9FUlIoYm8pOwogCQlnb3RvIHVubG9jazsKIAl9Ci0JZGV2X3ByaXYtPnBlcmYu b2Eub2FfYnVmZmVyLm9iaiA9IGJvOwogCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNo ZV9sZXZlbChibywgSTkxNV9DQUNIRV9MTEMpOwogCWlmIChyZXQpCkBAIC04MjAsMTcgKzEyNjIs MTMgQEAgc3RhdGljIGludCBhbGxvY19vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VucmVmOwogCi0JZGV2X3ByaXYtPnBl cmYub2Eub2FfYnVmZmVyLmd0dF9vZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoYm8p OwotCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5hZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bp bl9tYXAoYm8pOwotCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWRkciA9PSBOVUxM KQorCSphZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoYm8pOworCWlmICgqYWRkciA9PSBO VUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3VucGluOworCX0KIAotCWRldl9w cml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlcihkZXZfcHJpdik7Ci0KLQlEUk1fREVCVUdf RFJJVkVSKCJPQSBCdWZmZXIgaW5pdGlhbGl6ZWQsIGd0dCBvZmZzZXQgPSAweCV4LCB2YWRkciA9 ICVwIiwKLQkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZ3R0X29mZnNldCwKLQkJCSBk ZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWRkcik7Ci0KKwkqb2JqID0gYm87CiAJZ290byB1 bmxvY2s7CiAKIGVycl91bnBpbjoKQEAgLTg0MSw5ICsxMjc5LDYzIEBAIGVycl91bnJlZjoKIAog dW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKwor b3V0OgorCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKIAlyZXR1cm4gcmV0OwogfQog CitzdGF0aWMgaW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJvOworCXU4ICpvYmpfYWRk cjsKKwlpbnQgcmV0OworCisJQlVHX09OKGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5vYmop OworCisJcmV0ID0gYWxsb2Nfb2JqKGRldl9wcml2LCAmYm8sICZvYmpfYWRkcik7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5vYmogPSBi bzsKKwlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWRkciA9IG9ial9hZGRyOworCWRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5ndHRfb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zm c2V0KGJvKTsKKworCWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlcihkZXZfcHJp dik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJPQSBCdWZmZXIgaW5pdGlhbGl6ZWQsIGd0dCBvZmZz ZXQgPSAweCV4LCB2YWRkciA9ICVwIiwKKwkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIu Z3R0X29mZnNldCwKKwkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWRkcik7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfY29tbWFuZF9zdHJlYW1fYnVmKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqYm87CisJdTggKm9ial9hZGRyOworCWludCByZXQ7CisKKwlCVUdfT04oZGV2X3ByaXYtPnBl cmYuY29tbWFuZF9zdHJlYW1fYnVmLm9iaik7CisKKwlyZXQgPSBhbGxvY19vYmooZGV2X3ByaXYs ICZibywgJm9ial9hZGRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X3ByaXYt PnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLm9iaiA9IGJvOworCWRldl9wcml2LT5wZXJmLmNvbW1h bmRfc3RyZWFtX2J1Zi5hZGRyID0gb2JqX2FkZHI7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9z dHJlYW1fYnVmLnZtYSA9IGk5MTVfZ2VtX29ial90b19nZ3R0KGJvKTsKKwlpZiAoV0FSTl9PTigh bGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KSkpCisJCUlOSVRfTElTVF9IRUFE KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QpOworCisJRFJNX0RFQlVHX0RSSVZFUigKKwkJImNv bW1hbmQgc3RyZWFtIGJ1ZiBpbml0aWFsaXplZCwgZ3R0IG9mZnNldCA9IDB4JXgsIHZhZGRyID0g JXAiLAorCQkgKHVuc2lnbmVkIGludCkKKwkJIGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFt X2J1Zi52bWEtPm5vZGUuc3RhcnQsCisJCSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9i dWYuYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY29uZmlnX29hX3JlZ3Mo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgY29uc3Qgc3RydWN0IGk5 MTVfb2FfcmVnICpyZWdzLAogCQkJICAgaW50IG5fcmVncykKQEAgLTEwODcsNyArMTU3OSw4IEBA IHN0YXRpYyB2b2lkIGdlbjdfdXBkYXRlX29hY29udHJvbF9sb2NrZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogewogCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2X3ByaXYtPnBl cmYuaG9va19sb2NrKTsKIAotCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFt LT5lbmFibGVkKSB7CisJaWYgKGRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPnN0 YXRlICE9CisJCQkJCUk5MTVfUEVSRl9TVFJFQU1fRElTQUJMRUQpIHsKIAkJdW5zaWduZWQgbG9u ZyBjdHhfaWQgPSAwOwogCiAJCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFt LT5jdHgpCkBAIC0xMTY5LDEwICsxNjYyLDE1IEBAIHN0YXRpYyB2b2lkIGk5MTVfb2Ffc3RyZWFt X2Rpc2FibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwogCi0JZGV2X3ByaXYt PnBlcmYub2Eub3BzLm9hX2Rpc2FibGUoZGV2X3ByaXYpOwotCiAJaWYgKGRldl9wcml2LT5wZXJm Lm9hLnBlcmlvZGljKQogCQlocnRpbWVyX2NhbmNlbCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF9j aGVja190aW1lcik7CisKKwlpZiAoc3RyZWFtLT5jc19tb2RlKSB7CisJCWk5MTVfb2FfcmNzX3dh aXRfZ3B1KGRldl9wcml2KTsKKwkJaTkxNV9vYV9yY3NfZnJlZV9yZXF1ZXN0cyhkZXZfcHJpdik7 CisJfQorCisJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2Rpc2FibGUoZGV2X3ByaXYpOwogfQog CiBzdGF0aWMgdTY0IG9hX2V4cG9uZW50X3RvX25zKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgaW50IGV4cG9uZW50KQpAQCAtMTE4OSw2ICsxNjg3LDcgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtX29wcyBpOTE1X29hX3N0cmVhbV9vcHMgPSB7CiAJLndh aXRfdW5sb2NrZWQgPSBpOTE1X29hX3dhaXRfdW5sb2NrZWQsCiAJLnBvbGxfd2FpdCA9IGk5MTVf b2FfcG9sbF93YWl0LAogCS5yZWFkID0gaTkxNV9vYV9yZWFkLAorCS5jb21tYW5kX3N0cmVhbV9o b29rID0gaTkxNV9wZXJmX2NvbW1hbmRfc3RyZWFtX2hvb2tfb2EsCiB9OwogCiBzdGF0aWMgaW50 IGk5MTVfb2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKQEAg LTExOTYsMTQgKzE2OTUsMTEgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkgICAgICAgc3RydWN0IHBlcmZfb3Blbl9w cm9wZXJ0aWVzICpwcm9wcykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBzdHJlYW0tPmRldl9wcml2OwotCWludCBmb3JtYXRfc2l6ZTsKKwlib29sIHJlcXVpcmVfb2Ff dW5pdCA9IHByb3BzLT5zYW1wbGVfZmxhZ3MgJiAoU0FNUExFX09BX1JFUE9SVCB8CisJCQkJCQkg ICAgICBTQU1QTEVfT0FfU09VUkNFX0lORk8pOworCWJvb2wgY3Nfc2FtcGxlX2RhdGEgPSBwcm9w cy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVDsKIAlpbnQgcmV0OwogCi0JaWYgKCFk ZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIpIHsKLQkJRFJNX0VSUk9SKCJPQSB1 bml0IG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAkvKiBUbyBh dm9pZCB0aGUgY29tcGxleGl0eSBvZiBoYXZpbmcgdG8gYWNjdXJhdGVseSBmaWx0ZXIKIAkgKiBj b3VudGVyIHJlcG9ydHMgYW5kIG1hcnNoYWwgdG8gdGhlIGFwcHJvcHJpYXRlIGNsaWVudAogCSAq IHdlIGN1cnJlbnRseSBvbmx5IGFsbG93IGV4Y2x1c2l2ZSBhY2Nlc3MKQEAgLTEyMTMsOTcgKzE3 MDksMTY2IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmICghcHJvcHMtPm1l dHJpY3Nfc2V0KSB7Ci0JCURSTV9FUlJPUigiT0EgbWV0cmljIHNldCBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFwcm9wcy0+b2FfZm9ybWF0KSB7Ci0J CURSTV9FUlJPUigiT0EgcmVwb3J0IGZvcm1hdCBub3Qgc3BlY2lmaWVkXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7CisJaWYgKChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX0NUWF9JRCkgJiYg IXByb3BzLT5jc19tb2RlKSB7CisJCWlmIChJU19IQVNXRUxMKGRldl9wcml2LT5kZXYpKSB7CisJ CQlEUk1fRVJST1IoCisJCQkJIk9uIEhTVywgY29udGV4dCBJRCBzYW1wbGluZyBvbmx5IHN1cHBv cnRlZCB2aWEgY29tbWFuZCBzdHJlYW0iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2Ug aWYgKCFpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKKwkJCURSTV9FUlJPUigKKwkJCQkiT24gR2Vu OCsgd2l0aG91dCBleGVjbGlzdHMsIGNvbnRleHQgSUQgc2FtcGxpbmcgb25seSBzdXBwb3J0ZWQg dmlhIGNvbW1hbmQgc3RyZWFtIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCXN0 cmVhbS0+c2FtcGxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hl YWRlcik7CiAKLQlmb3JtYXRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbcHJv cHMtPm9hX2Zvcm1hdF0uc2l6ZTsKKwlpZiAocmVxdWlyZV9vYV91bml0KSB7CisJCWludCBmb3Jt YXRfc2l6ZTsKIAotCWlmIChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkg ewotCQlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVfT0FfUkVQT1JUOwotCQlzdHJlYW0t PnNhbXBsZV9zaXplICs9IGZvcm1hdF9zaXplOwotCX0KKwkJaWYgKCFkZXZfcHJpdi0+cGVyZi5v YS5vcHMuaW5pdF9vYV9idWZmZXIpIHsKKwkJCURSTV9FUlJPUigiT0EgdW5pdCBub3Qgc3VwcG9y dGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJaWYgKCFwcm9wcy0+bWV0cmlj c19zZXQpIHsKKwkJCURSTV9FUlJPUigiT0EgbWV0cmljIHNldCBub3Qgc3BlY2lmaWVkXG4iKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFwcm9wcy0+b2FfZm9ybWF0KSB7CisJ CQlEUk1fRVJST1IoIk9BIHJlcG9ydCBmb3JtYXQgbm90IHNwZWNpZmllZFxuIik7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfQogCi0JaWYgKHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0Ff U09VUkNFX0lORk8pIHsKLQkJaWYgKCEocHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9S RVBPUlQpKSB7CisJCWlmIChwcm9wcy0+Y3NfbW9kZSAgJiYgKHByb3BzLT5lbmdpbmUhPSBSQ1Mp KSB7CiAJCQlEUk1fRVJST1IoCi0JCQkiT0Egc291cmNlIHR5cGUgY2FuJ3QgYmUgc2FtcGxlZCB3 aXRob3V0IE9BIHJlcG9ydCIpOworCQkJCSJDb21tYW5kIHN0cmVhbSBPQSBtZXRyaWNzIG9ubHkg YXZhaWxhYmxlIHZpYSBSZW5kZXIgQ1NcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJ c3RyZWFtLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX09BX1NPVVJDRV9JTkZPOwotCQlzdHJlYW0t PnNhbXBsZV9zaXplICs9IDQ7Ci0JfQorCQlzdHJlYW0tPmVuZ2luZT0gUkNTOworCisJCWZvcm1h dF9zaXplID0KKwkJCWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbcHJvcHMtPm9hX2Zvcm1h dF0uc2l6ZTsKKworCQlpZiAocHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQp IHsKKwkJCXN0cmVhbS0+c2FtcGxlX2ZsYWdzIHw9IFNBTVBMRV9PQV9SRVBPUlQ7CisJCQlzdHJl YW0tPnNhbXBsZV9zaXplICs9IGZvcm1hdF9zaXplOworCQl9CisKKwkJaWYgKHByb3BzLT5zYW1w bGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pIHsKKwkJCWlmICghKHByb3BzLT5zYW1w bGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSkgeworCQkJCURSTV9FUlJPUigKKwkJCQkJICAi T0Egc291cmNlIHR5cGUgY2FuJ3QgYmUgc2FtcGxlZCB3aXRob3V0IE9BIHJlcG9ydCIpOworCQkJ CXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJc3RyZWFtLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExF X09BX1NPVVJDRV9JTkZPOworCQkJc3RyZWFtLT5zYW1wbGVfc2l6ZSArPSA0OworCQl9CisKKwkJ ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplID0gZm9ybWF0X3NpemU7CisJ CUJVR19PTihkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPT0gMCk7CisK KwkJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdCA9CisJCQlkZXZfcHJpdi0+cGVy Zi5vYS5vYV9mb3JtYXRzW3Byb3BzLT5vYV9mb3JtYXRdLmZvcm1hdDsKIAotCWRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZSA9IGZvcm1hdF9zaXplOwotCUJVR19PTihkZXZf cHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPT0gMCk7CisJCWRldl9wcml2LT5w ZXJmLm9hLm1ldHJpY3Nfc2V0ID0gcHJvcHMtPm1ldHJpY3Nfc2V0OwogCi0JZGV2X3ByaXYtPnBl cmYub2Eub2FfYnVmZmVyLmZvcm1hdCA9Ci0JCWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNb cHJvcHMtPm9hX2Zvcm1hdF0uZm9ybWF0OworCQlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYyA9 IHByb3BzLT5vYV9wZXJpb2RpYzsKKwkJaWYgKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljKSB7 CisJCQl1NjQgcGVyaW9kX25zID0gb2FfZXhwb25lbnRfdG9fbnMoZGV2X3ByaXYsCisJCQkJCQlw cm9wcy0+b2FfcGVyaW9kX2V4cG9uZW50KTsKIAotCWRldl9wcml2LT5wZXJmLm9hLm1ldHJpY3Nf c2V0ID0gcHJvcHMtPm1ldHJpY3Nfc2V0OworCQkJZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kX2V4 cG9uZW50ID0KKwkJCQkJCXByb3BzLT5vYV9wZXJpb2RfZXhwb25lbnQ7CiAKLQlkZXZfcHJpdi0+ cGVyZi5vYS5wZXJpb2RpYyA9IHByb3BzLT5vYV9wZXJpb2RpYzsKLQlpZiAoZGV2X3ByaXYtPnBl cmYub2EucGVyaW9kaWMpIHsKLQkJdTY0IHBlcmlvZF9ucyA9IG9hX2V4cG9uZW50X3RvX25zKGRl dl9wcml2LAotCQkJCQkJICBwcm9wcy0+b2FfcGVyaW9kX2V4cG9uZW50KTsKKwkJCS8qIFNlZSBj b21tZW50IGZvciBPQV9UQUlMX01BUkdJTl9OU0VDIGZvciBkZXRhaWxzCisJCQkgKiBhYm91dCB0 aGlzIHRhaWxfbWFyZ2luLi4uCisJCQkgKi8KKwkJCWRldl9wcml2LT5wZXJmLm9hLnRhaWxfbWFy Z2luID0KKwkJCQkoKE9BX1RBSUxfTUFSR0lOX05TRUMgLyBwZXJpb2RfbnMpICsgMSkgKgorCQkJ CWZvcm1hdF9zaXplOworCQl9CisKKwkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cyAmJiBzdHJl YW0tPmN0eCkKKwkJCWRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCA9IHN0cmVhbS0+ Y3R4LT5od19pZDsKIAotCQlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQgPSBwcm9w cy0+b2FfcGVyaW9kX2V4cG9uZW50OworCQlyZXQgPSBhbGxvY19vYV9idWZmZXIoZGV2X3ByaXYp OworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCQkvKiBTZWUgY29tbWVudCBmb3IgT0Ff VEFJTF9NQVJHSU5fTlNFQyBmb3IgZGV0YWlscwotCQkgKiBhYm91dCB0aGlzIHRhaWxfbWFyZ2lu Li4uCisJCS8qIFBSTSAtIG9ic2VydmFiaWxpdHkgcGVyZm9ybWFuY2UgY291bnRlcnM6CisJCSAq CisJCSAqICAgT0FDT05UUk9MLCBwZXJmb3JtYW5jZSBjb3VudGVyIGVuYWJsZSwgbm90ZToKKwkJ ICoKKwkJICogICAiV2hlbiB0aGlzIGJpdCBpcyBzZXQsIGluIG9yZGVyIHRvIGhhdmUgY29oZXJl bnQgY291bnRzLAorCQkgKiAgIFJDNiBwb3dlciBzdGF0ZSBhbmQgdHJ1bmsgY2xvY2sgZ2F0aW5n IG11c3QgYmUgZGlzYWJsZWQuCisJCSAqICAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcHJvZ3Jh bW1pbmcgTU1JTyByZWdpc3RlcnMgYXMKKwkJICogICAweEEwOTQ9MCBhbmQgMHhBMDkwWzMxXT0x IgorCQkgKgorCQkgKiAgIEluIG91ciBjYXNlIHdlIGFyZSBleHBlY3RpbmcgdGhhdCB0YWtpbmcg cG0gKyBGT1JDRVdBS0UKKwkJICogICByZWZlcmVuY2VzIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJs ZSBSQzYuCiAJCSAqLwotCQlkZXZfcHJpdi0+cGVyZi5vYS50YWlsX21hcmdpbiA9Ci0JCQkoKE9B X1RBSUxfTUFSR0lOX05TRUMgLyBwZXJpb2RfbnMpICsgMSkgKiBmb3JtYXRfc2l6ZTsKKwkJaW50 ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOworCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dl dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisKKwkJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eu b3BzLmVuYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKKwkJaWYgKHJldCkgeworCQkJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCQkJaW50ZWxf cnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQkJZnJlZV9vYV9idWZmZXIoZGV2X3ByaXYpOwor CQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIE9uIEhhc3dlbGwgd2UgaGF2ZSB0byB0cmFjayB3 aGljaCBPQVNUQVRVUzEgZmxhZ3Mgd2UndmUgYWxyZWFkeQorCQkgKiBzZWVuIHNpbmNlIHRoZXkg Y2FuJ3QgYmUgY2xlYXJlZCB3aGlsZSBwZXJpb2RpYyBzYW1wbGluZyBpcyBlbmFibGVkLgorCQkg Ki8KKwkJZGV2X3ByaXYtPnBlcmYub2EuZ2VuN19sYXRjaGVkX29hc3RhdHVzMSA9IDA7CiAJfQog Ci0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cyAmJiBzdHJlYW0tPmN0eCkKLQkJZGV2X3ByaXYt PnBlcmYub2Euc3BlY2lmaWNfY3R4X2lkID0gc3RyZWFtLT5jdHgtPmh3X2lkOworCWlmIChwcm9w cy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX0NUWF9JRCkgeworCQlzdHJlYW0tPnNhbXBsZV9mbGFn cyB8PSBTQU1QTEVfQ1RYX0lEOworCQlzdHJlYW0tPnNhbXBsZV9zaXplICs9IDQ7CisJfQogCi0J cmV0ID0gYWxsb2Nfb2FfYnVmZmVyKGRldl9wcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0 OworCWlmIChwcm9wcy0+Y3NfbW9kZSkgeworCQlpZiAoIWNzX3NhbXBsZV9kYXRhKSB7CisJCQlE Uk1fRVJST1IoCisJCQkJIlJpbmcgZ2l2ZW4gd2l0aG91dCByZXF1ZXN0aW5nIGFueSBDUyBkYXRh IHRvIHNhbXBsZSIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gY3NfZXJyb3I7CisJCX0K IAotCS8qIFBSTSAtIG9ic2VydmFiaWxpdHkgcGVyZm9ybWFuY2UgY291bnRlcnM6Ci0JICoKLQkg KiAgIE9BQ09OVFJPTCwgcGVyZm9ybWFuY2UgY291bnRlciBlbmFibGUsIG5vdGU6Ci0JICoKLQkg KiAgICJXaGVuIHRoaXMgYml0IGlzIHNldCwgaW4gb3JkZXIgdG8gaGF2ZSBjb2hlcmVudCBjb3Vu dHMsCi0JICogICBSQzYgcG93ZXIgc3RhdGUgYW5kIHRydW5rIGNsb2NrIGdhdGluZyBtdXN0IGJl IGRpc2FibGVkLgotCSAqICAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcHJvZ3JhbW1pbmcgTU1J TyByZWdpc3RlcnMgYXMKLQkgKiAgIDB4QTA5ND0wIGFuZCAweEEwOTBbMzFdPTEiCi0JICoKLQkg KiAgIEluIG91ciBjYXNlIHdlIGFyZSBleHBlY3RpbmcgdGhhdCB0YWtpbmcgcG0gKyBGT1JDRVdB S0UKLQkgKiAgIHJlZmVyZW5jZXMgd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIFJDNi4KLQkgKi8K LQlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCQlpZiAoIShwcm9wcy0+c2FtcGxlX2Zs YWdzICYgU0FNUExFX0NUWF9JRCkpIHsKKwkJCURSTV9FUlJPUigKKwkJCQkiUmluZyBnaXZlbiB3 aXRob3V0IHJlcXVlc3RpbmcgYW55IENTIHNwZWNpZmljIHByb3BlcnR5Iik7CisJCQlyZXQgPSAt RUlOVkFMOworCQkJZ290byBjc19lcnJvcjsKKwkJfQogCi0JcmV0ID0gZGV2X3ByaXYtPnBlcmYu b2Eub3BzLmVuYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKLQkJaW50ZWxf cnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwotCQlmcmVlX29hX2J1ZmZlcihkZXZfcHJpdik7Ci0J CXJldHVybiByZXQ7CisJCXN0cmVhbS0+Y3NfbW9kZSA9IHRydWU7CisKKwkJcmV0ID0gYWxsb2Nf Y29tbWFuZF9zdHJlYW1fYnVmKGRldl9wcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY3NfZXJy b3I7CiAJfQogCiAJc3RyZWFtLT5vcHMgPSAmaTkxNV9vYV9zdHJlYW1fb3BzOwogCi0JLyogT24g SGFzd2VsbCB3ZSBoYXZlIHRvIHRyYWNrIHdoaWNoIE9BU1RBVFVTMSBmbGFncyB3ZSd2ZSBhbHJl YWR5Ci0JICogc2VlbiBzaW5jZSB0aGV5IGNhbid0IGJlIGNsZWFyZWQgd2hpbGUgcGVyaW9kaWMg c2FtcGxpbmcgaXMgZW5hYmxlZC4KLQkgKi8KLQlkZXZfcHJpdi0+cGVyZi5vYS5nZW43X2xhdGNo ZWRfb2FzdGF0dXMxID0gMDsKLQogCWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0g PSBzdHJlYW07CiAKIAlyZXR1cm4gMDsKKworY3NfZXJyb3I6CisJaWYgKHJlcXVpcmVfb2FfdW5p dCkgeworCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2 KTsKKworCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FM TCk7CisJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKworCQlmcmVlX29hX2J1ZmZl cihkZXZfcHJpdik7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbjdfdXBk YXRlX2h3X2N0eF9pZF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApA QCAtMTM5NSw3ICsxOTYwLDggQEAgdm9pZCBpOTE1X29hX2xlZ2FjeV9jdHhfc3dpdGNoX25vdGlm eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIAkJcmV0dXJuOwogCiAJaWYgKGRl dl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0gJiYKLQkgICAgZGV2X3ByaXYtPnBlcmYu b2EuZXhjbHVzaXZlX3N0cmVhbS0+ZW5hYmxlZCkgeworCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5l eGNsdXNpdmVfc3RyZWFtLT5zdGF0ZSAhPQorCQkJCUk5MTVfUEVSRl9TVFJFQU1fRElTQUJMRUQp IHsKIAogCQkvKiBYWFg6IFdlIGRvbid0IHRha2UgYSBsb2NrIGhlcmUgYW5kIHRoaXMgbWF5IHJ1 bgogCQkgKiBhc3luYyB3aXRoIHJlc3BlY3QgdG8gc3RyZWFtIG1ldGhvZHMuIE5vdGFibHkgd2UK QEAgLTE1MDUsNyArMjA3MSw3IEBAIHN0YXRpYyBzc2l6ZV90IGk5MTVfcGVyZl9yZWFkKHN0cnVj dCBmaWxlICpmaWxlLAogCSAqIGRpc2FibGVkIHN0cmVhbSBhcyBhbiBlcnJvci4gSW4gcGFydGlj dWxhciBpdCBtaWdodCBvdGhlcndpc2UgbGVhZAogCSAqIHRvIGEgZGVhZGxvY2sgZm9yIGJsb2Nr aW5nIGZpbGUgZGVzY3JpcHRvcnMuLi4KIAkgKi8KLQlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkKKwlp ZiAoc3RyZWFtLT5zdGF0ZSA9PSBJOTE1X1BFUkZfU1RSRUFNX0RJU0FCTEVEKQogCQlyZXR1cm4g LUVJTzsKIAogCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewpAQCAtMTUzNywx MiArMjEwMywyMSBAQCBzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAq ZmlsZSwKIAogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJf Y2Ioc3RydWN0IGhydGltZXIgKmhydGltZXIpCiB7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0g KnN0cmVhbTsKKwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CiAJCWNvbnRh aW5lcl9vZihocnRpbWVyLCB0eXBlb2YoKmRldl9wcml2KSwKIAkJCSAgICAgcGVyZi5vYS5wb2xs X2NoZWNrX3RpbWVyKTsKIAotCWlmICghZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9p c19lbXB0eShkZXZfcHJpdikpCi0JCXdha2VfdXAoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3Ep OworCS8qIE5vIG5lZWQgdG8gcHJvdGVjdCB0aGUgc3RyZWFtcyBsaXN0IGhlcmUsIHNpbmNlIHRo ZSBocnRpbWVyIGlzCisJICogZGlzYWJsZWQgYmVmb3JlIHRoZSBzdHJlYW0gaXMgcmVtb3ZlZCBm cm9tIGxpc3QsIGFuZCBjdXJyZW50bHkgYQorCSAqIHNpbmdsZSBleGNsdXNpdmVfc3RyZWFtIGlz IHN1cHBvcnRlZC4KKwkgKiBYWFg6IHJldmlzaXQgdGhpcyB3aGVuIG11bHRpcGxlIGNvbmN1cnJl bnQgc3RyZWFtcyBhcmUgc3VwcG9ydGVkLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Ry ZWFtLCAmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcywgbGluaykgeworCQlpZiAoc3RyZWFtX2hhdmVf ZGF0YV9fdW5sb2NrZWQoc3RyZWFtKSkKKwkJCXdha2VfdXAoJmRldl9wcml2LT5wZXJmLm9hLnBv bGxfd3EpOworCX0KIAogCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUo UE9MTF9QRVJJT0QpKTsKIApAQCAtMTU3OCwyMyArMjE1MywyMyBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGk5MTVfcGVyZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQog CiBzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKQogewotCWlmIChzdHJlYW0tPmVuYWJsZWQpCisJaWYgKHN0cmVhbS0+c3Rh dGUgIT0gSTkxNV9QRVJGX1NUUkVBTV9ESVNBQkxFRCkKIAkJcmV0dXJuOwogCi0JLyogQWxsb3cg c3RyZWFtLT5vcHMtPmVuYWJsZSgpIHRvIHJlZmVyIHRvIHRoaXMgKi8KLQlzdHJlYW0tPmVuYWJs ZWQgPSB0cnVlOworCXN0cmVhbS0+c3RhdGUgPSBJOTE1X1BFUkZfU1RSRUFNX0VOQUJMRV9JTl9Q Uk9HUkVTUzsKIAogCWlmIChzdHJlYW0tPm9wcy0+ZW5hYmxlKQogCQlzdHJlYW0tPm9wcy0+ZW5h YmxlKHN0cmVhbSk7CisKKwlzdHJlYW0tPnN0YXRlID0gSTkxNV9QRVJGX1NUUkVBTV9FTkFCTEVE OwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKLQlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkKKwlpZiAoc3Ry ZWFtLT5zdGF0ZSAhPSBJOTE1X1BFUkZfU1RSRUFNX0VOQUJMRUQpCiAJCXJldHVybjsKIAotCS8q IEFsbG93IHN0cmVhbS0+b3BzLT5kaXNhYmxlKCkgdG8gcmVmZXIgdG8gdGhpcyAqLwotCXN0cmVh bS0+ZW5hYmxlZCA9IGZhbHNlOworCXN0cmVhbS0+c3RhdGUgPSBJOTE1X1BFUkZfU1RSRUFNX0RJ U0FCTEVEOwogCiAJaWYgKHN0cmVhbS0+b3BzLT5kaXNhYmxlKQogCQlzdHJlYW0tPm9wcy0+ZGlz YWJsZShzdHJlYW0pOwpAQCAtMTYzNSwxNCArMjIxMCwxNiBAQCBzdGF0aWMgdm9pZCBpOTE1X3Bl cmZfZGVzdHJveV9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwogCi0J aWYgKHN0cmVhbS0+ZW5hYmxlZCkKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1z X2xvY2spOworCWxpc3RfZGVsKCZzdHJlYW0tPmxpbmspOworCW11dGV4X3VubG9jaygmZGV2X3By aXYtPnBlcmYuc3RyZWFtc19sb2NrKTsKKworCWlmIChzdHJlYW0tPnN0YXRlID09IEk5MTVfUEVS Rl9TVFJFQU1fRU5BQkxFRCkKIAkJaTkxNV9wZXJmX2Rpc2FibGVfbG9ja2VkKHN0cmVhbSk7CiAK IAlpZiAoc3RyZWFtLT5vcHMtPmRlc3Ryb3kpCiAJCXN0cmVhbS0+b3BzLT5kZXN0cm95KHN0cmVh bSk7CiAKLQlsaXN0X2RlbCgmc3RyZWFtLT5saW5rKTsKLQogCWlmIChzdHJlYW0tPmN0eCkgewog CQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlpOTE1X2dlbV9j b250ZXh0X3VucmVmZXJlbmNlKHN0cmVhbS0+Y3R4KTsKQEAgLTE3NTMsNyArMjMzMCw5IEBAIGlu dCBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkg Ki8KIAlCVUdfT04oc3RyZWFtLT5zYW1wbGVfZmxhZ3MgIT0gcHJvcHMtPnNhbXBsZV9mbGFncyk7 CiAKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2spOwogCWxpc3RfYWRk KCZzdHJlYW0tPmxpbmssICZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKwltdXRleF91bmxvY2so JmRldl9wcml2LT5wZXJmLnN0cmVhbXNfbG9jayk7CiAKIAlpZiAocGFyYW0tPmZsYWdzICYgSTkx NV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQykKIAkJZl9mbGFncyB8PSBPX0NMT0VYRUM7CkBAIC0xNzcy LDcgKzIzNTEsOSBAQCBpbnQgaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJcmV0dXJuIHN0cmVhbV9mZDsKIAogZXJyX29wZW46CisJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPnBlcmYuc3RyZWFtc19sb2NrKTsKIAlsaXN0X2RlbCgmc3RyZWFtLT5saW5r KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLnN0cmVhbXNfbG9jayk7CiAJaWYgKHN0 cmVhbS0+b3BzLT5kZXN0cm95KQogCQlzdHJlYW0tPm9wcy0+ZGVzdHJveShzdHJlYW0pOwogZXJy X2FsbG9jOgpAQCAtMTg4MSw2ICsyNDYyLDI5IEBAIHN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVz X3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJY2FzZSBEUk1f STkxNV9QRVJGX1BST1BfU0FNUExFX09BX1NPVVJDRToKIAkJCXByb3BzLT5zYW1wbGVfZmxhZ3Mg fD0gU0FNUExFX09BX1NPVVJDRV9JTkZPOwogCQkJYnJlYWs7CisJCWNhc2UgRFJNX0k5MTVfUEVS Rl9QUk9QX0VOR0lORTogeworCQkJCXVuc2lnbmVkIGludCB1c2VyX3JpbmdfaWQgPQorCQkJCQl2 YWx1ZSAmIEk5MTVfRVhFQ19SSU5HX01BU0s7CisJCQkJZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5n aW5lOworCisJCQkJaWYgKHVzZXJfcmluZ19pZCA+IEk5MTVfVVNFUl9SSU5HUykKKwkJCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJCQkvKiBYWFg6IEN1cnJlbnRseSBvbmx5IFJDUyBpcyBzdXBwb3J0 ZWQuCisJCQkJICogUmVtb3ZlIHRoaXMgY2hlY2sgd2hlbiBzdXBwb3J0IGZvciBvdGhlcgorCQkJ CSAqIGVuZ2luZXMgaXMgYWRkZWQKKwkJCQkgKi8KKwkJCQllbmdpbmUgPSB1c2VyX3JpbmdfbWFw W3VzZXJfcmluZ19pZF07CisJCQkJaWYgKGVuZ2luZSAhPSBSQ1MpCisJCQkJCXJldHVybiAtRUlO VkFMOworCisJCQkJcHJvcHMtPmNzX21vZGUgPSB0cnVlOworCQkJCXByb3BzLT5lbmdpbmUgPSBl bmdpbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExF X0NUWF9JRDoKKwkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX0NUWF9JRDsKKwkJCWJy ZWFrOwogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9NQVg6CiAJCQlCVUcoKTsKIAkJfQpAQCAt MTk4OCw4ICsyNTkyLDExIEBAIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxKTsK IAogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKwlJTklUX0xJU1Rf SEVBRCgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KTsKIAltdXRleF9pbml0KCZkZXZfcHJpdi0+ cGVyZi5sb2NrKTsKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2spOwog CXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+cGVyZi5ob29rX2xvY2spOworCXNwaW5fbG9ja19p bml0KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CiAKIAlpZiAoSVNfSEFTV0VMTChk ZXYpKSB7CiAJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5pbml0X29hX2J1ZmZlciA9IGdlbjdfaW5p dF9vYV9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IDdiMDkyOTkuLjI3NTFm M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC04NjksMTAgKzg2OSwxNCBAQCBpbnQg aW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24oc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMg KnBhcmFtcywKIAlleGVjX3N0YXJ0ID0gcGFyYW1zLT5iYXRjaF9vYmpfdm1fb2Zmc2V0ICsKIAkJ ICAgICBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7CiAKKwlpOTE1X3BlcmZfY29tbWFuZF9zdHJl YW1faG9vayhwYXJhbXMtPnJlcXVlc3QpOworCiAJcmV0ID0gZW5naW5lLT5lbWl0X2JiX3N0YXJ0 KHBhcmFtcy0+cmVxdWVzdCwgZXhlY19zdGFydCwgcGFyYW1zLT5kaXNwYXRjaF9mbGFncyk7CiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWk5MTVfcGVyZl9jb21tYW5kX3N0cmVhbV9ob29r KHBhcmFtcy0+cmVxdWVzdCk7CisKIAl0cmFjZV9pOTE1X2dlbV9yaW5nX2Rpc3BhdGNoKHBhcmFt cy0+cmVxdWVzdCwgcGFyYW1zLT5kaXNwYXRjaF9mbGFncyk7CiAKIAlpOTE1X2dlbV9leGVjYnVm ZmVyX21vdmVfdG9fYWN0aXZlKHZtYXMsIHBhcmFtcy0+cmVxdWVzdCk7CmRpZmYgLS1naXQgYS9p bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgK aW5kZXggYzRlOGRhZC4uN2ZhY2VkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1 X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMTE5Niw2ICsxMTk2 LDcgQEAgZW51bSBkcm1faTkxNV9wZXJmX29hX2V2ZW50X3NvdXJjZSB7CiAJSTkxNV9QRVJGX09B X0VWRU5UX1NPVVJDRV9VTkRFRklORUQsCiAJSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9QRVJJ T0RJQywKIAlJOTE1X1BFUkZfT0FfRVZFTlRfU09VUkNFX0NPTlRFWFRfU1dJVENILAorCUk5MTVf UEVSRl9PQV9FVkVOVF9TT1VSQ0VfUkNTLAogCiAJSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9N QVgJLyogbm9uLUFCSSAqLwogfTsKQEAgLTEyNDEsNiArMTI0MiwxOSBAQCBlbnVtIGRybV9pOTE1 X3BlcmZfcHJvcGVydHlfaWQgewogCSAqLwogCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0Ff U09VUkNFLAogCisJLyoqCisJICogVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgc3BlY2lmaWVz IHRoZSBHUFUgZW5naW5lIGZvciB3aGljaAorCSAqIHRoZSBzYW1wbGVzIG5lZWQgdG8gYmUgY29s bGVjdGVkLiBTcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHkgYWxzbworCSAqIGltcGxpZXMgdGhlIGNv bW1hbmQgc3RyZWFtIGJhc2VkIHNhbXBsZSBjb2xsZWN0aW9uLgorCSAqLworCURSTV9JOTE1X1BF UkZfUFJPUF9FTkdJTkUsCisKKwkvKioKKwkgKiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBz ZXQgdG8gMSByZXF1ZXN0cyBpbmNsdXNpb24gb2YgY29udGV4dCBJRAorCSAqIGluIHRoZSBwZXJm IHNhbXBsZSBkYXRhLgorCSAqLworCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ1RYX0lELAor CiAJRFJNX0k5MTVfUEVSRl9QUk9QX01BWCAvKiBub24tQUJJICovCiB9OwogCkBAIC0xMzA2LDYg KzEzMjAsNyBAQCBlbnVtIGRybV9pOTE1X3BlcmZfcmVjb3JkX3R5cGUgewogCSAqICAgICBzdHJ1 Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKIAkgKgogCSAqICAgICB7IHUz MiBzb3VyY2VfaW5mbzsgfSAmJiBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BX1NPVVJDRQor CSAqICAgICB7IHUzMiBjdHhfaWQ7IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9DVFhf SUQKIAkgKiAgICAgeyB1MzIgb2FfcmVwb3J0W107IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NB TVBMRV9PQQogCSAqIH07CiAJICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==