From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758115Ab2JYD3T (ORCPT ); Wed, 24 Oct 2012 23:29:19 -0400 Received: from mail-ie0-f174.google.com ([209.85.223.174]:45502 "EHLO mail-ie0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757842Ab2JYD3M (ORCPT ); Wed, 24 Oct 2012 23:29:12 -0400 MIME-Version: 1.0 In-Reply-To: <3245066.cWfgP9Ikey@vostro.rjw.lan> References: <32e5bed743cc6cc4e614291a7080299f5f0d0933.1350677395.git.viresh.kumar@linaro.org> <1597360.JT7plJlUsZ@vostro.rjw.lan> <3245066.cWfgP9Ikey@vostro.rjw.lan> Date: Thu, 25 Oct 2012 08:59:11 +0530 Message-ID: Subject: Re: [PATCH 2/2] cpufreq: governors: remove redundant code From: Viresh Kumar To: "Rafael J. Wysocki" Cc: cpufreq@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linaro-dev@lists.linaro.org, patches@linaro.org, pdsw-power-team@arm.com, arvind.chauhan@arm.com Content-Type: multipart/mixed; boundary=e89a8f3b9c3f8a843104ccd9cece Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --e89a8f3b9c3f8a843104ccd9cece Content-Type: text/plain; charset=ISO-8859-1 On 25 October 2012 02:42, Rafael J. Wysocki wrote: > On Wednesday 24 of October 2012 21:43:46 Rafael J. Wysocki wrote: >> On Wednesday 24 of October 2012 11:37:13 Viresh Kumar wrote: >> > On 22 October 2012 14:16, Viresh Kumar wrote: >> > > On 20 October 2012 01:42, Viresh Kumar wrote: >> > >> Initially ondemand governor was written and then using its code conservative >> > >> governor is written. It used a lot of code from ondemand governor, but copy of >> > >> code was created instead of using the same routines from both governors. Which >> > >> increased code redundancy, which is difficult to manage. >> > >> >> > >> This patch is an attempt to move common part of both the governors to >> > >> cpufreq_governor.c file to come over above mentioned issues. >> > >> >> > >> This shouldn't change anything from functionality point of view. >> > >> >> > >> Signed-off-by: Viresh Kumar >> > >> > For everybody else, this patch is already pushed by Rafael in his linux-next >> > branch. >> >> Well, not yet, although I'm going to do that. > > Or I would if it still applied. Unfortunately, though, it doesn't apply any > more to my linux-next branch due to some previous changes in it. > > Care to rebase? Ahh.. I got confused by the following patch: commit 83a73f712f2275033b2dc7f5c664988a1823ebc7 Author: viresh kumar Date: Tue Oct 23 01:28:05 2012 +0200 cpufreq: Move common part from governors to separate file, v2 Multiple cpufreq governers have defined similar get_cpu_idle_time_***() routines. These routines must be moved to some common place, so that all governors can use them. So moving them to cpufreq_governor.c, which seems to be a better place for keeping these routines. Signed-off-by: Viresh Kumar Signed-off-by: Rafael J. Wysocki Actually, i should i have replied on this patch (and i forgot). I wanted you to skip this patch, as the latest patch already had this change. But now i see commits from others on cpufreq_governor.c file. Hmm... So you can keep your tree as it is and apply the attached patch. It is the same patch getting discussed in this thread. Just rebased over your latest next. You must also apply my other patches fixing sparse warnings (they can be applied over this patch, tested), to fix sparse warnings from cpufreq. -- viresh --e89a8f3b9c3f8a843104ccd9cece Content-Type: application/octet-stream; name="0001-cpufreq-governors-remove-redundant-code.patch" Content-Disposition: attachment; filename="0001-cpufreq-governors-remove-redundant-code.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h8pbc52y0 RnJvbSBlODlkYTQyMDg5MmU1MTQ0ZDQzODM0NWMyOTE0NGI2YmM5YTFmNDM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlkOiA8ZTg5ZGE0MjA4OTJlNTE0NGQ0MzgzNDVjMjkxNDRi NmJjOWExZjQzOC4xMzUxMTM1NDQ3LmdpdC52aXJlc2gua3VtYXJAbGluYXJvLm9yZz4KRnJvbTog VmlyZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAbGluYXJvLm9yZz4KRGF0ZTogTW9uLCAxNSBPY3Qg MjAxMiAxMToyODozNCArMDUzMApTdWJqZWN0OiBbUEFUQ0hdIGNwdWZyZXE6IGdvdmVybm9yczog cmVtb3ZlIHJlZHVuZGFudCBjb2RlCgpJbml0aWFsbHkgb25kZW1hbmQgZ292ZXJub3Igd2FzIHdy aXR0ZW4gYW5kIHRoZW4gdXNpbmcgaXRzIGNvZGUgY29uc2VydmF0aXZlCmdvdmVybm9yIGlzIHdy aXR0ZW4uIEl0IHVzZWQgYSBsb3Qgb2YgY29kZSBmcm9tIG9uZGVtYW5kIGdvdmVybm9yLCBidXQg Y29weSBvZgpjb2RlIHdhcyBjcmVhdGVkIGluc3RlYWQgb2YgdXNpbmcgdGhlIHNhbWUgcm91dGlu ZXMgZnJvbSBib3RoIGdvdmVybm9ycy4gV2hpY2gKaW5jcmVhc2VkIGNvZGUgcmVkdW5kYW5jeSwg d2hpY2ggaXMgZGlmZmljdWx0IHRvIG1hbmFnZS4KClRoaXMgcGF0Y2ggaXMgYW4gYXR0ZW1wdCB0 byBtb3ZlIGNvbW1vbiBwYXJ0IG9mIGJvdGggdGhlIGdvdmVybm9ycyB0bwpjcHVmcmVxX2dvdmVy bm9yLmMgZmlsZSB0byBjb21lIG92ZXIgYWJvdmUgbWVudGlvbmVkIGlzc3Vlcy4KClRoaXMgc2hv dWxkbid0IGNoYW5nZSBhbnl0aGluZyBmcm9tIGZ1bmN0aW9uYWxpdHkgcG9pbnQgb2Ygdmlldy4K ClNpZ25lZC1vZmYtYnk6IFZpcmVzaCBLdW1hciA8dmlyZXNoLmt1bWFyQGxpbmFyby5vcmc+Ci0t LQogZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgfCA1NDggKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2dvdmVybm9yLmMgICAg IHwgMjc2ICsrKysrKysrKysrKy0KIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2dvdmVybm9yLmgg ICAgIHwgMTc3ICsrKysrKysrKwogZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyAg ICAgfCA2OTggKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4 L2NwdWZyZXEuaCAgICAgICAgICAgICAgICB8ICAgNiAtCiA1IGZpbGVzIGNoYW5nZWQsIDgzMCBp bnNlcnRpb25zKCspLCA4NzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9jcHVmcmVxL2NwdWZyZXFfZ292ZXJub3IuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJl cS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2Vy dmF0aXZlLmMKaW5kZXggMTgxYWJhZC4uNjRlZjczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVm cmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFf Y29uc2VydmF0aXZlLmMKQEAgLTExLDgzICsxMSwzMCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNp bmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVk ZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUg PGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxs aW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLSNpbmNsdWRlIDxsaW51 eC90aWNrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hl ZC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1 LWRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CiAKLS8qCi0gKiBkYnMgaXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9y IGRlbWFuZGJhc2VkIHN3aXRjaGluZwotICogSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJsZSBuYW1l cyBzbWFsbGVyLCBzaW1wbGVyCi0gKi8KKyNpbmNsdWRlICJjcHVmcmVxX2dvdmVybm9yLmgiCiAK Ky8qIENvbnNlcnZhdGl2ZSBnb3Zlcm5vciBtYWNvcnMgKi8KICNkZWZpbmUgREVGX0ZSRVFVRU5D WV9VUF9USFJFU0hPTEQJCSg4MCkKICNkZWZpbmUgREVGX0ZSRVFVRU5DWV9ET1dOX1RIUkVTSE9M RAkJKDIwKQotCi0vKgotICogVGhlIHBvbGxpbmcgZnJlcXVlbmN5IG9mIHRoaXMgZ292ZXJub3Ig ZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0eSBvZgotICogdGhlIHByb2Nlc3Nvci4gRGVmYXVsdCBw b2xsaW5nIGZyZXF1ZW5jeSBpcyAxMDAwIHRpbWVzIHRoZSB0cmFuc2l0aW9uCi0gKiBsYXRlbmN5 IG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBnb3Zlcm5vciB3aWxsIHdvcmsgb24gYW55IHByb2Nlc3Nv ciB3aXRoCi0gKiB0cmFuc2l0aW9uIGxhdGVuY3kgPD0gMTBtUywgdXNpbmcgYXBwcm9wcmlhdGUg c2FtcGxpbmcKLSAqIHJhdGUuCi0gKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+ IDEwbVMgKG1vc3RseSBkcml2ZXJzIHdpdGggQ1BVRlJFUV9FVEVSTkFMKQotICogdGhpcyBnb3Zl cm5vciB3aWxsIG5vdCB3b3JrLgotICogQWxsIHRpbWVzIGhlcmUgYXJlIGluIHVTLgotICovCi0j ZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFX1JBVElPCQkJKDIpCi0KLXN0YXRpYyB1bnNpZ25lZCBp bnQgbWluX3NhbXBsaW5nX3JhdGU7Ci0KLSNkZWZpbmUgTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEw MDApCi0jZGVmaW5lIE1JTl9MQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwKQogI2RlZmluZSBERUZf U0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxKQogI2RlZmluZSBNQVhfU0FNUExJTkdfRE9XTl9GQUNU T1IJCSgxMCkKLSNkZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICog MTAwMCkKLQotc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y ayk7Ci0KLXN0cnVjdCBjcHVfZGJzX2luZm9fcyB7Ci0JY3B1dGltZTY0X3QgcHJldl9jcHVfaWRs ZTsKLQljcHV0aW1lNjRfdCBwcmV2X2NwdV93YWxsOwotCWNwdXRpbWU2NF90IHByZXZfY3B1X25p Y2U7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwotCXN0cnVjdCBkZWxheWVk X3dvcmsgd29yazsKLQl1bnNpZ25lZCBpbnQgZG93bl9za2lwOwotCXVuc2lnbmVkIGludCByZXF1 ZXN0ZWRfZnJlcTsKLQlpbnQgY3B1OwotCXVuc2lnbmVkIGludCBlbmFibGU6MTsKLQkvKgotCSAq IHBlcmNwdSBtdXRleCB0aGF0IHNlcmlhbGl6ZXMgZ292ZXJub3IgbGltaXQgY2hhbmdlIHdpdGgK LQkgKiBkb19kYnNfdGltZXIgaW52b2NhdGlvbi4gV2UgZG8gbm90IHdhbnQgZG9fZGJzX3RpbWVy IHRvIHJ1bgotCSAqIHdoZW4gdXNlciBpcyBjaGFuZ2luZyB0aGUgZ292ZXJub3Igb3IgbGltaXRz LgotCSAqLwotCXN0cnVjdCBtdXRleCB0aW1lcl9tdXRleDsKLX07Ci1zdGF0aWMgREVGSU5FX1BF Ul9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjc19jcHVfZGJzX2luZm8pOwogCi1zdGF0aWMg dW5zaWduZWQgaW50IGRic19lbmFibGU7CS8qIG51bWJlciBvZiBDUFVzIHVzaW5nIHRoaXMgcG9s aWN5ICovCitzdGF0aWMgc3RydWN0IGRic19kYXRhIGNzX2Ric19kYXRhOworc3RhdGljIERFRklO RV9QRVJfQ1BVKHN0cnVjdCBjc19jcHVfZGJzX2luZm9fcywgY3NfY3B1X2Ric19pbmZvKTsKIAot LyoKLSAqIGRic19tdXRleCBwcm90ZWN0cyBkYnNfZW5hYmxlIGluIGdvdmVybm9yIHN0YXJ0L3N0 b3AuCi0gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoZGJzX211dGV4KTsKLQotc3RhdGljIHN0cnVj dCBkYnNfdHVuZXJzIHsKLQl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZTsKLQl1bnNpZ25lZCBp bnQgc2FtcGxpbmdfZG93bl9mYWN0b3I7Ci0JdW5zaWduZWQgaW50IHVwX3RocmVzaG9sZDsKLQl1 bnNpZ25lZCBpbnQgZG93bl90aHJlc2hvbGQ7Ci0JdW5zaWduZWQgaW50IGlnbm9yZV9uaWNlOwot CXVuc2lnbmVkIGludCBmcmVxX3N0ZXA7Ci19IGRic190dW5lcnNfaW5zID0geworc3RhdGljIHN0 cnVjdCBjc19kYnNfdHVuZXJzIGNzX3R1bmVycyA9IHsKIAkudXBfdGhyZXNob2xkID0gREVGX0ZS RVFVRU5DWV9VUF9USFJFU0hPTEQsCiAJLmRvd25fdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9E T1dOX1RIUkVTSE9MRCwKIAkuc2FtcGxpbmdfZG93bl9mYWN0b3IgPSBERUZfU0FNUExJTkdfRE9X Tl9GQUNUT1IsCkBAIC05NSw2MSArNDIsMTIxIEBAIHN0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyB7 CiAJLmZyZXFfc3RlcCA9IDUsCiB9OwogCi0vKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFu c2l0aW9ucyAqLwotc3RhdGljIGludAotZGJzX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlm aWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCSAgICAgdm9pZCAqZGF0YSkKKy8q CisgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBjaGVjaywgaWYgY3VycmVudCBpZGxlIHRpbWUg aXMgbGVzcyB0aGFuIDIwJQorICogKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBm cmVxdWVuY3kgRXZlcnkgc2FtcGxpbmdfcmF0ZSAqCisgKiBzYW1wbGluZ19kb3duX2ZhY3Rvciwg d2UgY2hlY2ssIGlmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIG1vcmUgdGhhbiA4MCUsIHRoZW4KKyAq IHdlIHRyeSB0byBkZWNyZWFzZSBmcmVxdWVuY3kKKyAqCisgKiBBbnkgZnJlcXVlbmN5IGluY3Jl YXNlIHRha2VzIGl0IHRvIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeS4gRnJlcXVlbmN5IHJlZHVjdGlv bgorICogaGFwcGVucyBhdCBtaW5pbXVtIHN0ZXBzIG9mIDUlIChkZWZhdWx0KSBvZiBtYXhpbXVt IGZyZXF1ZW5jeQorICovCitzdGF0aWMgdm9pZCBjc19jaGVja19jcHUoaW50IGNwdSwgdW5zaWdu ZWQgaW50IGxvYWQpCiB7Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwotCXN0 cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNzX2NwdV9kYnNf aW5mbywKLQkJCQkJCQlmcmVxLT5jcHUpOworCXN0cnVjdCBjc19jcHVfZGJzX2luZm9fcyAqZGJz X2luZm8gPSAmcGVyX2NwdShjc19jcHVfZGJzX2luZm8sIGNwdSk7CisJc3RydWN0IGNwdWZyZXFf cG9saWN5ICpwb2xpY3kgPSBkYnNfaW5mby0+Y2Ricy5jdXJfcG9saWN5OworCXVuc2lnbmVkIGlu dCBmcmVxX3RhcmdldDsKKworCS8qCisJICogYnJlYWsgb3V0IGlmIHdlICdjYW5ub3QnIHJlZHVj ZSB0aGUgc3BlZWQgYXMgdGhlIHVzZXIgbWlnaHQKKwkgKiB3YW50IGZyZXFfc3RlcCB0byBiZSB6 ZXJvCisJICovCisJaWYgKGNzX3R1bmVycy5mcmVxX3N0ZXAgPT0gMCkKKwkJcmV0dXJuOworCisJ LyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLworCWlmIChsb2FkID4gY3NfdHVuZXJz LnVwX3RocmVzaG9sZCkgeworCQlkYnNfaW5mby0+ZG93bl9za2lwID0gMDsKKworCQkvKiBpZiB3 ZSBhcmUgYWxyZWFkeSBhdCBmdWxsIHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5ICovCisJCWlm IChkYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPT0gcG9saWN5LT5tYXgpCisJCQlyZXR1cm47CisK KwkJZnJlcV90YXJnZXQgPSAoY3NfdHVuZXJzLmZyZXFfc3RlcCAqIHBvbGljeS0+bWF4KSAvIDEw MDsKKworCQkvKiBtYXggZnJlcSBjYW5ub3QgYmUgbGVzcyB0aGFuIDEwMC4gQnV0IHdobyBrbm93 cy4uLi4gKi8KKwkJaWYgKHVubGlrZWx5KGZyZXFfdGFyZ2V0ID09IDApKQorCQkJZnJlcV90YXJn ZXQgPSA1OworCisJCWRic19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSArPSBmcmVxX3RhcmdldDsKKwkJ aWYgKGRic19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA+IHBvbGljeS0+bWF4KQorCQkJZGJzX2luZm8t PnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5tYXg7CiAKKwkJX19jcHVmcmVxX2RyaXZlcl90YXJn ZXQocG9saWN5LCBkYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEsCisJCQlDUFVGUkVRX1JFTEFUSU9O X0gpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGUgb3B0aW1hbCBmcmVxdWVuY3kgaXMg dGhlIGZyZXF1ZW5jeSB0aGF0IGlzIHRoZSBsb3dlc3QgdGhhdCBjYW4KKwkgKiBzdXBwb3J0IHRo ZSBjdXJyZW50IENQVSB1c2FnZSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHVwIHBvbGljeS4gVG8g YmUKKwkgKiBzYWZlLCB3ZSBmb2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KKwkg Ki8KKwlpZiAobG9hZCA8IChjc190dW5lcnMuZG93bl90aHJlc2hvbGQgLSAxMCkpIHsKKwkJZnJl cV90YXJnZXQgPSAoY3NfdHVuZXJzLmZyZXFfc3RlcCAqIHBvbGljeS0+bWF4KSAvIDEwMDsKKwor CQlkYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgLT0gZnJlcV90YXJnZXQ7CisJCWlmIChkYnNfaW5m by0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKKwkJCWRic19pbmZvLT5yZXF1ZXN0ZWRf ZnJlcSA9IHBvbGljeS0+bWluOworCisJCS8qCisJCSAqIGlmIHdlIGNhbm5vdCByZWR1Y2UgdGhl IGZyZXF1ZW5jeSBhbnltb3JlLCBicmVhayBvdXQgZWFybHkKKwkJICovCisJCWlmIChwb2xpY3kt PmN1ciA9PSBwb2xpY3ktPm1pbikKKwkJCXJldHVybjsKKworCQlfX2NwdWZyZXFfZHJpdmVyX3Rh cmdldChwb2xpY3ksIGRic19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSwKKwkJCQlDUFVGUkVRX1JFTEFU SU9OX0gpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBjc19kYnNfdGltZXIoc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjc19jcHVfZGJzX2luZm9fcyAqZGJz X2luZm8gPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBjc19jcHVfZGJzX2luZm9fcywg Y2Ricy53b3JrLndvcmspOworCXVuc2lnbmVkIGludCBjcHUgPSBkYnNfaW5mby0+Y2Ricy5jcHU7 CisJaW50IGRlbGF5ID0gZGVsYXlfZm9yX3NhbXBsaW5nX3JhdGUoY3NfdHVuZXJzLnNhbXBsaW5n X3JhdGUpOworCisJbXV0ZXhfbG9jaygmZGJzX2luZm8tPmNkYnMudGltZXJfbXV0ZXgpOworCisJ ZGJzX2NoZWNrX2NwdSgmY3NfZGJzX2RhdGEsIGNwdSk7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dv cmtfb24oY3B1LCAmZGJzX2luZm8tPmNkYnMud29yaywgZGVsYXkpOworCW11dGV4X3VubG9jaygm ZGJzX2luZm8tPmNkYnMudGltZXJfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IGRic19jcHVmcmVx X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAor CQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKKwlz dHJ1Y3QgY3NfY3B1X2Ric19pbmZvX3MgKmRic19pbmZvID0KKwkJCQkJJnBlcl9jcHUoY3NfY3B1 X2Ric19pbmZvLCBmcmVxLT5jcHUpOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5Owog Ci0JaWYgKCF0aGlzX2Ric19pbmZvLT5lbmFibGUpCisJaWYgKCFkYnNfaW5mby0+ZW5hYmxlKQog CQlyZXR1cm4gMDsKIAotCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7CisJcG9s aWN5ID0gZGJzX2luZm8tPmNkYnMuY3VyX3BvbGljeTsKIAogCS8qCi0JICogd2Ugb25seSBjYXJl IGlmIG91ciBpbnRlcm5hbGx5IHRyYWNrZWQgZnJlcSBtb3ZlcyBvdXRzaWRlCi0JICogdGhlICd2 YWxpZCcgcmFuZ2VzIG9mIGZyZXFlbmN5IGF2YWlsYWJsZSB0byB1cyBvdGhlcndpc2UKLQkgKiB3 ZSBkbyBub3QgY2hhbmdlIGl0CisJICogd2Ugb25seSBjYXJlIGlmIG91ciBpbnRlcm5hbGx5IHRy YWNrZWQgZnJlcSBtb3ZlcyBvdXRzaWRlIHRoZSAndmFsaWQnCisJICogcmFuZ2VzIG9mIGZyZXFl bmN5IGF2YWlsYWJsZSB0byB1cyBvdGhlcndpc2Ugd2UgZG8gbm90IGNoYW5nZSBpdAogCSovCi0J aWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID4gcG9saWN5LT5tYXgKLQkJCXx8IHRo aXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9saWN5LT5taW4pCi0JCXRoaXNfZGJzX2lu Zm8tPnJlcXVlc3RlZF9mcmVxID0gZnJlcS0+bmV3OworCWlmIChkYnNfaW5mby0+cmVxdWVzdGVk X2ZyZXEgPiBwb2xpY3ktPm1heAorCQkJfHwgZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9s aWN5LT5taW4pCisJCWRic19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IGZyZXEtPm5ldzsKIAogCXJl dHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRic19jcHVmcmVxX25v dGlmaWVyX2Jsb2NrID0gewotCS5ub3RpZmllcl9jYWxsID0gZGJzX2NwdWZyZXFfbm90aWZpZXIK LX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBpbnRlcmZhY2UgKioqKioq KioqKioqKioqKioqKioqKioqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21p bihzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIG1pbl9zYW1wbGlu Z19yYXRlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgY3NfZGJzX2RhdGEubWluX3Nh bXBsaW5nX3JhdGUpOwogfQogCi1kZWZpbmVfb25lX2dsb2JhbF9ybyhzYW1wbGluZ19yYXRlX21p bik7Ci0KLS8qIGNwdWZyZXFfY29uc2VydmF0aXZlIEdvdmVybm9yIFR1bmFibGVzICovCi0jZGVm aW5lIHNob3dfb25lKGZpbGVfbmFtZSwgb2JqZWN0KQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hv d18jI2ZpbGVfbmFtZQkJCQkJCVwKLShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJp YnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50Zihi dWYsICIldVxuIiwgZGJzX3R1bmVyc19pbnMub2JqZWN0KTsJCVwKLX0KLXNob3dfb25lKHNhbXBs aW5nX3JhdGUsIHNhbXBsaW5nX3JhdGUpOwotc2hvd19vbmUoc2FtcGxpbmdfZG93bl9mYWN0b3Is IHNhbXBsaW5nX2Rvd25fZmFjdG9yKTsKLXNob3dfb25lKHVwX3RocmVzaG9sZCwgdXBfdGhyZXNo b2xkKTsKLXNob3dfb25lKGRvd25fdGhyZXNob2xkLCBkb3duX3RocmVzaG9sZCk7Ci1zaG93X29u ZShpZ25vcmVfbmljZV9sb2FkLCBpZ25vcmVfbmljZSk7Ci1zaG93X29uZShmcmVxX3N0ZXAsIGZy ZXFfc3RlcCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NhbXBsaW5nX2Rvd25fZmFjdG9yKHN0 cnVjdCBrb2JqZWN0ICphLAogCQkJCQkgIHN0cnVjdCBhdHRyaWJ1dGUgKmIsCiAJCQkJCSAgY29u c3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xNjEsNyArMTY4LDcgQEAgc3RhdGljIHNz aXplX3Qgc3RvcmVfc2FtcGxpbmdfZG93bl9mYWN0b3Ioc3RydWN0IGtvYmplY3QgKmEsCiAJaWYg KHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX0RPV05fRkFDVE9SIHx8IGlucHV0IDwg MSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2Zh Y3RvciA9IGlucHV0OworCWNzX3R1bmVycy5zYW1wbGluZ19kb3duX2ZhY3RvciA9IGlucHV0Owog CXJldHVybiBjb3VudDsKIH0KIApAQCAtMTc1LDcgKzE4Miw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0 b3JlX3NhbXBsaW5nX3JhdGUoc3RydWN0IGtvYmplY3QgKmEsIHN0cnVjdCBhdHRyaWJ1dGUgKmIs CiAJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRic190dW5lcnNfaW5zLnNh bXBsaW5nX3JhdGUgPSBtYXgoaW5wdXQsIG1pbl9zYW1wbGluZ19yYXRlKTsKKwljc190dW5lcnMu c2FtcGxpbmdfcmF0ZSA9IG1heChpbnB1dCwgY3NfZGJzX2RhdGEubWluX3NhbXBsaW5nX3JhdGUp OwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTg2LDExICsxOTMsMTAgQEAgc3RhdGljIHNzaXpl X3Qgc3RvcmVfdXBfdGhyZXNob2xkKHN0cnVjdCBrb2JqZWN0ICphLCBzdHJ1Y3QgYXR0cmlidXRl ICpiLAogCWludCByZXQ7CiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAotCWlm IChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fAotCQkJaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMu ZG93bl90aHJlc2hvbGQpCisJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDw9 IGNzX3R1bmVycy5kb3duX3RocmVzaG9sZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYnNfdHVu ZXJzX2lucy51cF90aHJlc2hvbGQgPSBpbnB1dDsKKwljc190dW5lcnMudXBfdGhyZXNob2xkID0g aW5wdXQ7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yMDMsMjEgKzIwOSwxOSBAQCBzdGF0aWMg c3NpemVfdCBzdG9yZV9kb3duX3RocmVzaG9sZChzdHJ1Y3Qga29iamVjdCAqYSwgc3RydWN0IGF0 dHJpYnV0ZSAqYiwKIAogCS8qIGNhbm5vdCBiZSBsb3dlciB0aGFuIDExIG90aGVyd2lzZSBmcmVx IHdpbGwgbm90IGZhbGwgKi8KIAlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPCAxMSB8fCBpbnB1dCA+ IDEwMCB8fAotCQkJaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKQorCQkJaW5w dXQgPj0gY3NfdHVuZXJzLnVwX3RocmVzaG9sZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYnNf dHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCA9IGlucHV0OworCWNzX3R1bmVycy5kb3duX3RocmVz aG9sZCA9IGlucHV0OwogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVf aWdub3JlX25pY2VfbG9hZChzdHJ1Y3Qga29iamVjdCAqYSwgc3RydWN0IGF0dHJpYnV0ZSAqYiwK IAkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQl1bnNpZ25lZCBp bnQgaW5wdXQ7CisJdW5zaWduZWQgaW50IGlucHV0LCBqOwogCWludCByZXQ7CiAKLQl1bnNpZ25l ZCBpbnQgajsKLQogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAJaWYgKHJldCAh PSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyNSwxOSArMjI5LDIwIEBAIHN0YXRpYyBzc2l6 ZV90IHN0b3JlX2lnbm9yZV9uaWNlX2xvYWQoc3RydWN0IGtvYmplY3QgKmEsIHN0cnVjdCBhdHRy aWJ1dGUgKmIsCiAJaWYgKGlucHV0ID4gMSkKIAkJaW5wdXQgPSAxOwogCi0JaWYgKGlucHV0ID09 IGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKGlu cHV0ID09IGNzX3R1bmVycy5pZ25vcmVfbmljZSkgLyogbm90aGluZyB0byBkbyAqLwogCQlyZXR1 cm4gY291bnQ7CiAKLQlkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSA9IGlucHV0OworCWNzX3R1 bmVycy5pZ25vcmVfbmljZSA9IGlucHV0OwogCiAJLyogd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBw cmV2X2NwdV9pZGxlICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCXN0cnVjdCBjcHVf ZGJzX2luZm9fcyAqZGJzX2luZm87CisJCXN0cnVjdCBjc19jcHVfZGJzX2luZm9fcyAqZGJzX2lu Zm87CiAJCWRic19pbmZvID0gJnBlcl9jcHUoY3NfY3B1X2Ric19pbmZvLCBqKTsKLQkJZGJzX2lu Zm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAotCQkJCQkJJmRic19pbmZv LT5wcmV2X2NwdV93YWxsKTsKLQkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQotCQkJ ZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrY3B1c3RhdF9jcHUoaikuY3B1c3RhdFtDUFVUSU1F X05JQ0VdOworCQlkYnNfaW5mby0+Y2Ricy5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3Rp bWUoaiwKKwkJCQkJCSZkYnNfaW5mby0+Y2Ricy5wcmV2X2NwdV93YWxsKTsKKwkJaWYgKGNzX3R1 bmVycy5pZ25vcmVfbmljZSkKKwkJCWRic19pbmZvLT5jZGJzLnByZXZfY3B1X25pY2UgPQorCQkJ CWtjcHVzdGF0X2NwdShqKS5jcHVzdGF0W0NQVVRJTUVfTklDRV07CiAJfQogCXJldHVybiBjb3Vu dDsKIH0KQEAgLTI1NSwxOCArMjYwLDI4IEBAIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZyZXFfc3Rl cChzdHJ1Y3Qga29iamVjdCAqYSwgc3RydWN0IGF0dHJpYnV0ZSAqYiwKIAlpZiAoaW5wdXQgPiAx MDApCiAJCWlucHV0ID0gMTAwOwogCi0JLyogbm8gbmVlZCB0byB0ZXN0IGhlcmUgaWYgZnJlcV9z dGVwIGlzIHplcm8gYXMgdGhlIHVzZXIgbWlnaHQgYWN0dWFsbHkKLQkgKiB3YW50IHRoaXMsIHRo ZXkgd291bGQgYmUgY3JhenkgdGhvdWdoIDopICovCi0JZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVw ID0gaW5wdXQ7CisJLyoKKwkgKiBubyBuZWVkIHRvIHRlc3QgaGVyZSBpZiBmcmVxX3N0ZXAgaXMg emVybyBhcyB0aGUgdXNlciBtaWdodCBhY3R1YWxseQorCSAqIHdhbnQgdGhpcywgdGhleSB3b3Vs ZCBiZSBjcmF6eSB0aG91Z2ggOikKKwkgKi8KKwljc190dW5lcnMuZnJlcV9zdGVwID0gaW5wdXQ7 CiAJcmV0dXJuIGNvdW50OwogfQogCitzaG93X29uZShjcywgc2FtcGxpbmdfcmF0ZSwgc2FtcGxp bmdfcmF0ZSk7CitzaG93X29uZShjcywgc2FtcGxpbmdfZG93bl9mYWN0b3IsIHNhbXBsaW5nX2Rv d25fZmFjdG9yKTsKK3Nob3dfb25lKGNzLCB1cF90aHJlc2hvbGQsIHVwX3RocmVzaG9sZCk7Citz aG93X29uZShjcywgZG93bl90aHJlc2hvbGQsIGRvd25fdGhyZXNob2xkKTsKK3Nob3dfb25lKGNz LCBpZ25vcmVfbmljZV9sb2FkLCBpZ25vcmVfbmljZSk7CitzaG93X29uZShjcywgZnJlcV9zdGVw LCBmcmVxX3N0ZXApOworCiBkZWZpbmVfb25lX2dsb2JhbF9ydyhzYW1wbGluZ19yYXRlKTsKIGRl ZmluZV9vbmVfZ2xvYmFsX3J3KHNhbXBsaW5nX2Rvd25fZmFjdG9yKTsKIGRlZmluZV9vbmVfZ2xv YmFsX3J3KHVwX3RocmVzaG9sZCk7CiBkZWZpbmVfb25lX2dsb2JhbF9ydyhkb3duX3RocmVzaG9s ZCk7CiBkZWZpbmVfb25lX2dsb2JhbF9ydyhpZ25vcmVfbmljZV9sb2FkKTsKIGRlZmluZV9vbmVf Z2xvYmFsX3J3KGZyZXFfc3RlcCk7CitkZWZpbmVfb25lX2dsb2JhbF9ybyhzYW1wbGluZ19yYXRl X21pbik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewog CSZzYW1wbGluZ19yYXRlX21pbi5hdHRyLApAQCAtMjc5LDI4MyArMjk0LDM4IEBAIHN0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewogCU5VTEwKIH07CiAKLXN0YXRp YyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRic19hdHRyX2dyb3VwID0geworc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgY3NfYXR0cl9ncm91cCA9IHsKIAkuYXR0cnMgPSBkYnNfYXR0cmli dXRlcywKIAkubmFtZSA9ICJjb25zZXJ2YXRpdmUiLAogfTsKIAogLyoqKioqKioqKioqKioqKioq KioqKioqKioqIHN5c2ZzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2 b2lkIGRic19jaGVja19jcHUoc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvKQot ewotCXVuc2lnbmVkIGludCBsb2FkID0gMDsKLQl1bnNpZ25lZCBpbnQgbWF4X2xvYWQgPSAwOwot CXVuc2lnbmVkIGludCBmcmVxX3RhcmdldDsKLQotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9s aWN5OwotCXVuc2lnbmVkIGludCBqOwotCi0JcG9saWN5ID0gdGhpc19kYnNfaW5mby0+Y3VyX3Bv bGljeTsKLQotCS8qCi0JICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2ssIGlmIGN1cnJl bnQgaWRsZSB0aW1lIGlzIGxlc3MKLQkgKiB0aGFuIDIwJSAoZGVmYXVsdCksIHRoZW4gd2UgdHJ5 IHRvIGluY3JlYXNlIGZyZXF1ZW5jeQotCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUqc2FtcGxpbmdf ZG93bl9mYWN0b3IsIHdlIGNoZWNrLCBpZiBjdXJyZW50Ci0JICogaWRsZSB0aW1lIGlzIG1vcmUg dGhhbiA4MCUsIHRoZW4gd2UgdHJ5IHRvIGRlY3JlYXNlIGZyZXF1ZW5jeQotCSAqCi0JICogQW55 IGZyZXF1ZW5jeSBpbmNyZWFzZSB0YWtlcyBpdCB0byB0aGUgbWF4aW11bSBmcmVxdWVuY3kuCi0J ICogRnJlcXVlbmN5IHJlZHVjdGlvbiBoYXBwZW5zIGF0IG1pbmltdW0gc3RlcHMgb2YKLQkgKiA1 JSAoZGVmYXVsdCkgb2YgbWF4aW11bSBmcmVxdWVuY3kKLQkgKi8KLQotCS8qIEdldCBBYnNvbHV0 ZSBMb2FkICovCi0JZm9yX2VhY2hfY3B1KGosIHBvbGljeS0+Y3B1cykgewotCQlzdHJ1Y3QgY3B1 X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCWNwdXRpbWU2NF90IGN1cl93YWxsX3RpbWUsIGN1 cl9pZGxlX3RpbWU7Ci0JCXVuc2lnbmVkIGludCBpZGxlX3RpbWUsIHdhbGxfdGltZTsKLQotCQlq X2Ric19pbmZvID0gJnBlcl9jcHUoY3NfY3B1X2Ric19pbmZvLCBqKTsKLQotCQljdXJfaWRsZV90 aW1lID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwgJmN1cl93YWxsX3RpbWUpOwotCi0JCXdhbGxfdGlt ZSA9ICh1bnNpZ25lZCBpbnQpCi0JCQkoY3VyX3dhbGxfdGltZSAtIGpfZGJzX2luZm8tPnByZXZf Y3B1X3dhbGwpOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsID0gY3VyX3dhbGxfdGltZTsK LQotCQlpZGxlX3RpbWUgPSAodW5zaWduZWQgaW50KQotCQkJKGN1cl9pZGxlX3RpbWUgLSBqX2Ri c19pbmZvLT5wcmV2X2NwdV9pZGxlKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGN1 cl9pZGxlX3RpbWU7Ci0KLQkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7Ci0JCQl1 NjQgY3VyX25pY2U7Ci0JCQl1bnNpZ25lZCBsb25nIGN1cl9uaWNlX2ppZmZpZXM7Ci0KLQkJCWN1 cl9uaWNlID0ga2NwdXN0YXRfY3B1KGopLmNwdXN0YXRbQ1BVVElNRV9OSUNFXSAtCi0JCQkJCSBq X2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlOwotCQkJLyoKLQkJCSAqIEFzc3VtcHRpb246IG5pY2Ug dGltZSBiZXR3ZWVuIHNhbXBsaW5nIHBlcmlvZHMgd2lsbAotCQkJICogYmUgbGVzcyB0aGFuIDJe MzIgamlmZmllcyBmb3IgMzIgYml0IHN5cwotCQkJICovCi0JCQljdXJfbmljZV9qaWZmaWVzID0g KHVuc2lnbmVkIGxvbmcpCi0JCQkJCWNwdXRpbWU2NF90b19qaWZmaWVzNjQoY3VyX25pY2UpOwot Ci0JCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlID0ga2NwdXN0YXRfY3B1KGopLmNwdXN0YXRb Q1BVVElNRV9OSUNFXTsKLQkJCWlkbGVfdGltZSArPSBqaWZmaWVzX3RvX3VzZWNzKGN1cl9uaWNl X2ppZmZpZXMpOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KCF3YWxsX3RpbWUgfHwgd2FsbF90aW1l IDwgaWRsZV90aW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWxvYWQgPSAxMDAgKiAod2FsbF90aW1l IC0gaWRsZV90aW1lKSAvIHdhbGxfdGltZTsKLQotCQlpZiAobG9hZCA+IG1heF9sb2FkKQotCQkJ bWF4X2xvYWQgPSBsb2FkOwotCX0KK2RlZmluZV9nZXRfY3B1X2Ric19yb3V0aW5lcyhjc19jcHVf ZGJzX2luZm8pOwogCi0JLyoKLQkgKiBicmVhayBvdXQgaWYgd2UgJ2Nhbm5vdCcgcmVkdWNlIHRo ZSBzcGVlZCBhcyB0aGUgdXNlciBtaWdodAotCSAqIHdhbnQgZnJlcV9zdGVwIHRvIGJlIHplcm8K LQkgKi8KLQlpZiAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwID09IDApCi0JCXJldHVybjsKLQot CS8qIENoZWNrIGZvciBmcmVxdWVuY3kgaW5jcmVhc2UgKi8KLQlpZiAobWF4X2xvYWQgPiBkYnNf dHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKLQkJdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0g MDsKLQotCQkvKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCBmdWxsIHNwZWVkIHRoZW4gYnJlYWsgb3V0 IGVhcmx5ICovCi0JCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9PSBwb2xpY3kt Pm1heCkKLQkJCXJldHVybjsKLQotCQlmcmVxX3RhcmdldCA9IChkYnNfdHVuZXJzX2lucy5mcmVx X3N0ZXAgKiBwb2xpY3ktPm1heCkgLyAxMDA7Ci0KLQkJLyogbWF4IGZyZXEgY2Fubm90IGJlIGxl c3MgdGhhbiAxMDAuIEJ1dCB3aG8ga25vd3MuLi4uICovCi0JCWlmICh1bmxpa2VseShmcmVxX3Rh cmdldCA9PSAwKSkKLQkJCWZyZXFfdGFyZ2V0ID0gNTsKLQotCQl0aGlzX2Ric19pbmZvLT5yZXF1 ZXN0ZWRfZnJlcSArPSBmcmVxX3RhcmdldDsKLQkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3Rl ZF9mcmVxID4gcG9saWN5LT5tYXgpCi0JCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9 IHBvbGljeS0+bWF4OwotCi0JCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgdGhpc19k YnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEsCi0JCQlDUFVGUkVRX1JFTEFUSU9OX0gpOwotCQlyZXR1 cm47Ci0JfQotCi0JLyoKLQkgKiBUaGUgb3B0aW1hbCBmcmVxdWVuY3kgaXMgdGhlIGZyZXF1ZW5j eSB0aGF0IGlzIHRoZSBsb3dlc3QgdGhhdAotCSAqIGNhbiBzdXBwb3J0IHRoZSBjdXJyZW50IENQ VSB1c2FnZSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHVwCi0JICogcG9saWN5LiBUbyBiZSBzYWZl LCB3ZSBmb2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KLQkgKi8KLQlpZiAobWF4 X2xvYWQgPCAoZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQgLSAxMCkpIHsKLQkJZnJlcV90 YXJnZXQgPSAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwICogcG9saWN5LT5tYXgpIC8gMTAwOwot Ci0JCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIC09IGZyZXFfdGFyZ2V0OwotCQlpZiAo dGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKLQkJCXRoaXNfZGJz X2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5taW47Ci0KLQkJLyoKLQkJICogaWYgd2Ug Y2Fubm90IHJlZHVjZSB0aGUgZnJlcXVlbmN5IGFueW1vcmUsIGJyZWFrIG91dCBlYXJseQotCQkg Ki8KLQkJaWYgKHBvbGljeS0+Y3VyID09IHBvbGljeS0+bWluKQotCQkJcmV0dXJuOwotCi0JCV9f Y3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2Zy ZXEsCi0JCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotc3RhdGlj IHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qg Y3B1X2Ric19pbmZvX3MgKmRic19pbmZvID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBj cHVfZGJzX2luZm9fcywgd29yay53b3JrKTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gZGJzX2luZm8t PmNwdTsKLQotCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNh bWUgamlmZnkgKi8KLQlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5z LnNhbXBsaW5nX3JhdGUpOwotCi0JZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OwotCi0JbXV0ZXhf bG9jaygmZGJzX2luZm8tPnRpbWVyX211dGV4KTsKLQotCWRic19jaGVja19jcHUoZGJzX2luZm8p OwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJmRic19pbmZvLT53b3JrLCBkZWxh eSk7Ci0JbXV0ZXhfdW5sb2NrKCZkYnNfaW5mby0+dGltZXJfbXV0ZXgpOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5m bykKLXsKLQkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1l IGppZmZ5ICovCi0JaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5z YW1wbGluZ19yYXRlKTsKLQlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CitzdGF0aWMgc3RydWN0 IG5vdGlmaWVyX2Jsb2NrIGNzX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7CisJLm5vdGlmaWVy X2NhbGwgPSBkYnNfY3B1ZnJlcV9ub3RpZmllciwKK307CiAKLQlkYnNfaW5mby0+ZW5hYmxlID0g MTsKLQlJTklUX0RFRkVSUkFCTEVfV09SSygmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7 Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsICZkYnNfaW5mby0+d29y aywgZGVsYXkpOwotfQorc3RhdGljIHN0cnVjdCBjc19vcHMgY3Nfb3BzID0geworCS5ub3RpZmll cl9ibG9jayA9ICZjc19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAorfTsKIAotc3RhdGljIGlubGlu ZSB2b2lkIGRic190aW1lcl9leGl0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCi17 Ci0JZGJzX2luZm8tPmVuYWJsZSA9IDA7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkYnNf aW5mby0+d29yayk7Ci19CitzdGF0aWMgc3RydWN0IGRic19kYXRhIGNzX2Ric19kYXRhID0gewor CS5nb3Zlcm5vciA9IEdPVl9DT05TRVJWQVRJVkUsCisJLmF0dHJfZ3JvdXAgPSAmY3NfYXR0cl9n cm91cCwKKwkudHVuZXJzID0gJmNzX3R1bmVycywKKwkuZ2V0X2NwdV9jZGJzID0gZ2V0X2NwdV9j ZGJzLAorCS5nZXRfY3B1X2Ric19pbmZvX3MgPSBnZXRfY3B1X2Ric19pbmZvX3MsCisJLmdvdl9k YnNfdGltZXIgPSBjc19kYnNfdGltZXIsCisJLmdvdl9jaGVja19jcHUgPSBjc19jaGVja19jcHUs CisJLmdvdl9vcHMgPSAmY3Nfb3BzLAorfTsKIAotc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9y X2RicyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgY3NfY3B1ZnJl cV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJICAgdW5z aWduZWQgaW50IGV2ZW50KQogewotCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKLQlz dHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm87Ci0JdW5zaWduZWQgaW50IGo7Ci0J aW50IHJjOwotCi0JdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNzX2NwdV9kYnNfaW5mbywgY3B1 KTsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIENQVUZSRVFfR09WX1NUQVJUOgotCQlpZiAo KCFjcHVfb25saW5lKGNwdSkpIHx8ICghcG9saWN5LT5jdXIpKQotCQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQotCQlmb3JfZWFjaF9jcHUoaiwgcG9saWN5 LT5jcHVzKSB7Ci0JCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCQlqX2Ri c19pbmZvID0gJnBlcl9jcHUoY3NfY3B1X2Ric19pbmZvLCBqKTsKLQkJCWpfZGJzX2luZm8tPmN1 cl9wb2xpY3kgPSBwb2xpY3k7Ci0KLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRf Y3B1X2lkbGVfdGltZShqLAotCQkJCQkJJmpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOwotCQkJ aWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQotCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1 X25pY2UgPQotCQkJCQkJa2NwdXN0YXRfY3B1KGopLmNwdXN0YXRbQ1BVVElNRV9OSUNFXTsKLQkJ fQotCQl0aGlzX2Ric19pbmZvLT5jcHUgPSBjcHU7Ci0JCXRoaXNfZGJzX2luZm8tPmRvd25fc2tp cCA9IDA7Ci0JCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5jdXI7Ci0K LQkJbXV0ZXhfaW5pdCgmdGhpc19kYnNfaW5mby0+dGltZXJfbXV0ZXgpOwotCQlkYnNfZW5hYmxl Kys7Ci0JCS8qCi0JCSAqIFN0YXJ0IHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhpcyBn b3Zlcm5vcgotCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCi0JCSAqLwotCQlpZiAoZGJzX2Vu YWJsZSA9PSAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQgbGF0ZW5jeTsKLQkJCS8qIHBvbGljeSBsYXRl bmN5IGlzIGluIG5TLiBDb252ZXJ0IGl0IHRvIHVTIGZpcnN0ICovCi0JCQlsYXRlbmN5ID0gcG9s aWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSAvIDEwMDA7Ci0JCQlpZiAobGF0ZW5jeSA9 PSAwKQotCQkJCWxhdGVuY3kgPSAxOwotCi0JCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChjcHVm cmVxX2dsb2JhbF9rb2JqZWN0LAotCQkJCQkJJmRic19hdHRyX2dyb3VwKTsKLQkJCWlmIChyYykg ewotCQkJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKLQkJCQlyZXR1cm4gcmM7Ci0JCQl9Ci0K LQkJCS8qCi0JCQkgKiBjb25zZXJ2YXRpdmUgZG9lcyBub3QgaW1wbGVtZW50IG1pY3JvIGxpa2Ug b25kZW1hbmQKLQkJCSAqIGdvdmVybm9yLCB0aHVzIHdlIGFyZSBib3VuZCB0byBqaWZmZXMvSFoK LQkJCSAqLwotCQkJbWluX3NhbXBsaW5nX3JhdGUgPQotCQkJCU1JTl9TQU1QTElOR19SQVRFX1JB VElPICogamlmZmllc190b191c2VjcygxMCk7Ci0JCQkvKiBCcmluZyBrZXJuZWwgYW5kIEhXIGNv bnN0cmFpbnRzIHRvZ2V0aGVyICovCi0JCQltaW5fc2FtcGxpbmdfcmF0ZSA9IG1heChtaW5fc2Ft cGxpbmdfcmF0ZSwKLQkJCQkJTUlOX0xBVEVOQ1lfTVVMVElQTElFUiAqIGxhdGVuY3kpOwotCQkJ ZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9Ci0JCQkJbWF4KG1pbl9zYW1wbGluZ19yYXRl LAotCQkJCSAgICBsYXRlbmN5ICogTEFURU5DWV9NVUxUSVBMSUVSKTsKLQotCQkJY3B1ZnJlcV9y ZWdpc3Rlcl9ub3RpZmllcigKLQkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAotCQkJ CQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmZGJz X211dGV4KTsKLQotCQlkYnNfdGltZXJfaW5pdCh0aGlzX2Ric19pbmZvKTsKLQotCQlicmVhazsK LQotCWNhc2UgQ1BVRlJFUV9HT1ZfU1RPUDoKLQkJZGJzX3RpbWVyX2V4aXQodGhpc19kYnNfaW5m byk7Ci0KLQkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQkJZGJzX2VuYWJsZS0tOwotCQltdXRl eF9kZXN0cm95KCZ0aGlzX2Ric19pbmZvLT50aW1lcl9tdXRleCk7Ci0KLQkJLyoKLQkJICogU3Rv cCB0aGUgdGltZXJzY2hlZHVsZSB3b3JrLCB3aGVuIHRoaXMgZ292ZXJub3IKLQkJICogaXMgdXNl ZCBmb3IgZmlyc3QgdGltZQotCQkgKi8KLQkJaWYgKGRic19lbmFibGUgPT0gMCkKLQkJCWNwdWZy ZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigKLQkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2Nr LAotCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotCi0JCW11dGV4X3VubG9jaygm ZGJzX211dGV4KTsKLQkJaWYgKCFkYnNfZW5hYmxlKQotCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKGNw dWZyZXFfZ2xvYmFsX2tvYmplY3QsCi0JCQkJCSAgICZkYnNfYXR0cl9ncm91cCk7Ci0KLQkJYnJl YWs7Ci0KLQljYXNlIENQVUZSRVFfR09WX0xJTUlUUzoKLQkJbXV0ZXhfbG9jaygmdGhpc19kYnNf aW5mby0+dGltZXJfbXV0ZXgpOwotCQlpZiAocG9saWN5LT5tYXggPCB0aGlzX2Ric19pbmZvLT5j dXJfcG9saWN5LT5jdXIpCi0JCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCgKLQkJCQkJdGhpc19k YnNfaW5mby0+Y3VyX3BvbGljeSwKLQkJCQkJcG9saWN5LT5tYXgsIENQVUZSRVFfUkVMQVRJT05f SCk7Ci0JCWVsc2UgaWYgKHBvbGljeS0+bWluID4gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeS0+ Y3VyKQotCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoCi0JCQkJCXRoaXNfZGJzX2luZm8tPmN1 cl9wb2xpY3ksCi0JCQkJCXBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwotCQlkYnNf Y2hlY2tfY3B1KHRoaXNfZGJzX2luZm8pOwotCQltdXRleF91bmxvY2soJnRoaXNfZGJzX2luZm8t PnRpbWVyX211dGV4KTsKLQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNwdWZy ZXFfZ292ZXJub3JfZGJzKCZjc19kYnNfZGF0YSwgcG9saWN5LCBldmVudCk7CiB9CiAKICNpZm5k ZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRQpAQCAtNTYzLDEzICsz MzMsMTQgQEAgc3RhdGljCiAjZW5kaWYKIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yIGNwdWZyZXFf Z292X2NvbnNlcnZhdGl2ZSA9IHsKIAkubmFtZQkJCT0gImNvbnNlcnZhdGl2ZSIsCi0JLmdvdmVy bm9yCQk9IGNwdWZyZXFfZ292ZXJub3JfZGJzLAorCS5nb3Zlcm5vcgkJPSBjc19jcHVmcmVxX2dv dmVybm9yX2RicywKIAkubWF4X3RyYW5zaXRpb25fbGF0ZW5jeQk9IFRSQU5TSVRJT05fTEFURU5D WV9MSU1JVCwKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2lu aXQgY3B1ZnJlcV9nb3ZfZGJzX2luaXQodm9pZCkKIHsKKwltdXRleF9pbml0KCZjc19kYnNfZGF0 YS5tdXRleCk7CiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292 X2NvbnNlcnZhdGl2ZSk7CiB9CiAKQEAgLTU3OCw3ICszNDksNiBAQCBzdGF0aWMgdm9pZCBfX2V4 aXQgY3B1ZnJlcV9nb3ZfZGJzX2V4aXQodm9pZCkKIAljcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJu b3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CiB9CiAKLQogTU9EVUxFX0FVVEhPUigiQWxl eGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4iKTsKIE1PRFVMRV9ERVNDUklQVElP TigiJ2NwdWZyZXFfY29uc2VydmF0aXZlJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZv ciAiCiAJCSJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3Nv cnMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfZ292ZXJub3IuYyBiL2Ry aXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2dvdmVybm9yLmMKaW5kZXggNjc5ODQyYS4uY2Q1ZmU1NyAx MDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfZ292ZXJub3IuYworKysgYi9kcml2 ZXJzL2NwdWZyZXEvY3B1ZnJlcV9nb3Zlcm5vci5jCkBAIC0zLDE5ICszLDMwIEBACiAgKgogICog Q1BVRlJFUSBnb3Zlcm5vcnMgY29tbW9uIGNvZGUKICAqCisgKiBDb3B5cmlnaHQJKEMpIDIwMDEg UnVzc2VsbCBLaW5nCisgKgkJKEMpIDIwMDMgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNo LnBhbGxpcGFkaUBpbnRlbC5jb20+LgorICoJCShDKSAyMDAzIEp1biBOYWthamltYSA8anVuLm5h a2FqaW1hQGludGVsLmNvbT4KKyAqCQkoQykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBk aWdyaXoub3JnLnVrPgorICoJCShjKSAyMDEyIFZpcmVzaCBLdW1hciA8dmlyZXNoLmt1bWFyQGxp bmFyby5vcmc+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChm bXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgot I2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNp bmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4K KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgotLyoKLSAqIENvZGUgcGlja2VkIGZyb20gZWFybGllciBnb3Zl cm5lciBpbXBsZW1lbnRhdGlvbnMKLSAqLworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgor CisjaW5jbHVkZSAiY3B1ZnJlcV9nb3Zlcm5vci5oIgorCiBzdGF0aWMgaW5saW5lIHU2NCBnZXRf Y3B1X2lkbGVfdGltZV9qaWZmeSh1bnNpZ25lZCBpbnQgY3B1LCB1NjQgKndhbGwpCiB7CiAJdTY0 IGlkbGVfdGltZTsKQEAgLTMzLDkgKzQ0LDkgQEAgc3RhdGljIGlubGluZSB1NjQgZ2V0X2NwdV9p ZGxlX3RpbWVfamlmZnkodW5zaWduZWQgaW50IGNwdSwgdTY0ICp3YWxsKQogCiAJaWRsZV90aW1l ID0gY3VyX3dhbGxfdGltZSAtIGJ1c3lfdGltZTsKIAlpZiAod2FsbCkKLQkJKndhbGwgPSBjcHV0 aW1lX3RvX3VzZWNzKGN1cl93YWxsX3RpbWUpOworCQkqd2FsbCA9IGppZmZpZXNfdG9fdXNlY3Mo Y3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gY3B1dGltZV90b191c2VjcyhpZGxlX3RpbWUpOwor CXJldHVybiBqaWZmaWVzX3RvX3VzZWNzKGlkbGVfdGltZSk7CiB9CiAKIGNwdXRpbWU2NF90IGdl dF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQpAQCAt NDksNCArNjAsMjU1IEBAIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGlu dCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQogCiAJcmV0dXJuIGlkbGVfdGltZTsKIH0KLUVYUE9S VF9TWU1CT0xfR1BMKGdldF9jcHVfaWRsZV90aW1lKTsKKwordm9pZCBkYnNfY2hlY2tfY3B1KHN0 cnVjdCBkYnNfZGF0YSAqZGJzX2RhdGEsIGludCBjcHUpCit7CisJc3RydWN0IGNwdV9kYnNfY29t bW9uX2luZm8gKmNkYnMgPSBkYnNfZGF0YS0+Z2V0X2NwdV9jZGJzKGNwdSk7CisJc3RydWN0IG9k X2Ric190dW5lcnMgKm9kX3R1bmVycyA9IGRic19kYXRhLT50dW5lcnM7CisJc3RydWN0IGNzX2Ri c190dW5lcnMgKmNzX3R1bmVycyA9IGRic19kYXRhLT50dW5lcnM7CisJc3RydWN0IGNwdWZyZXFf cG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IG1heF9sb2FkID0gMDsKKwl1bnNpZ25lZCBp bnQgaWdub3JlX25pY2U7CisJdW5zaWduZWQgaW50IGo7CisKKwlpZiAoZGJzX2RhdGEtPmdvdmVy bm9yID09IEdPVl9PTkRFTUFORCkKKwkJaWdub3JlX25pY2UgPSBvZF90dW5lcnMtPmlnbm9yZV9u aWNlOworCWVsc2UKKwkJaWdub3JlX25pY2UgPSBjc190dW5lcnMtPmlnbm9yZV9uaWNlOworCisJ cG9saWN5ID0gY2Ricy0+Y3VyX3BvbGljeTsKKworCS8qIEdldCBBYnNvbHV0ZSBMb2FkIChpbiB0 ZXJtcyBvZiBmcmVxIGZvciBvbmRlbWFuZCBnb3YpICovCisJZm9yX2VhY2hfY3B1KGosIHBvbGlj eS0+Y3B1cykgeworCQlzdHJ1Y3QgY3B1X2Ric19jb21tb25faW5mbyAqal9jZGJzOworCQljcHV0 aW1lNjRfdCBjdXJfd2FsbF90aW1lLCBjdXJfaWRsZV90aW1lLCBjdXJfaW93YWl0X3RpbWU7CisJ CXVuc2lnbmVkIGludCBpZGxlX3RpbWUsIHdhbGxfdGltZSwgaW93YWl0X3RpbWU7CisJCXVuc2ln bmVkIGludCBsb2FkOworCisJCWpfY2RicyA9IGRic19kYXRhLT5nZXRfY3B1X2NkYnMoaik7CisK KwkJY3VyX2lkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lKGosICZjdXJfd2FsbF90aW1lKTsK KworCQl3YWxsX3RpbWUgPSAodW5zaWduZWQgaW50KQorCQkJKGN1cl93YWxsX3RpbWUgLSBqX2Nk YnMtPnByZXZfY3B1X3dhbGwpOworCQlqX2NkYnMtPnByZXZfY3B1X3dhbGwgPSBjdXJfd2FsbF90 aW1lOworCisJCWlkbGVfdGltZSA9ICh1bnNpZ25lZCBpbnQpCisJCQkoY3VyX2lkbGVfdGltZSAt IGpfY2Ricy0+cHJldl9jcHVfaWRsZSk7CisJCWpfY2Ricy0+cHJldl9jcHVfaWRsZSA9IGN1cl9p ZGxlX3RpbWU7CisKKwkJaWYgKGlnbm9yZV9uaWNlKSB7CisJCQl1NjQgY3VyX25pY2U7CisJCQl1 bnNpZ25lZCBsb25nIGN1cl9uaWNlX2ppZmZpZXM7CisKKwkJCWN1cl9uaWNlID0ga2NwdXN0YXRf Y3B1KGopLmNwdXN0YXRbQ1BVVElNRV9OSUNFXSAtCisJCQkJCSBjZGJzLT5wcmV2X2NwdV9uaWNl OworCQkJLyoKKwkJCSAqIEFzc3VtcHRpb246IG5pY2UgdGltZSBiZXR3ZWVuIHNhbXBsaW5nIHBl cmlvZHMgd2lsbAorCQkJICogYmUgbGVzcyB0aGFuIDJeMzIgamlmZmllcyBmb3IgMzIgYml0IHN5 cworCQkJICovCisJCQljdXJfbmljZV9qaWZmaWVzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCWNw dXRpbWU2NF90b19qaWZmaWVzNjQoY3VyX25pY2UpOworCisJCQljZGJzLT5wcmV2X2NwdV9uaWNl ID0KKwkJCQlrY3B1c3RhdF9jcHUoaikuY3B1c3RhdFtDUFVUSU1FX05JQ0VdOworCQkJaWRsZV90 aW1lICs9IGppZmZpZXNfdG9fdXNlY3MoY3VyX25pY2VfamlmZmllcyk7CisJCX0KKworCQlpZiAo ZGJzX2RhdGEtPmdvdmVybm9yID09IEdPVl9PTkRFTUFORCkgeworCQkJc3RydWN0IG9kX2NwdV9k YnNfaW5mb19zICpvZF9qX2Ric19pbmZvID0KKwkJCQlkYnNfZGF0YS0+Z2V0X2NwdV9kYnNfaW5m b19zKGNwdSk7CisKKwkJCWN1cl9pb3dhaXRfdGltZSA9IGdldF9jcHVfaW93YWl0X3RpbWVfdXMo aiwKKwkJCQkJJmN1cl93YWxsX3RpbWUpOworCQkJaWYgKGN1cl9pb3dhaXRfdGltZSA9PSAtMVVM TCkKKwkJCQljdXJfaW93YWl0X3RpbWUgPSAwOworCisJCQlpb3dhaXRfdGltZSA9ICh1bnNpZ25l ZCBpbnQpIChjdXJfaW93YWl0X3RpbWUgLQorCQkJCQlvZF9qX2Ric19pbmZvLT5wcmV2X2NwdV9p b3dhaXQpOworCQkJb2Rfal9kYnNfaW5mby0+cHJldl9jcHVfaW93YWl0ID0gY3VyX2lvd2FpdF90 aW1lOworCisJCQkvKgorCQkJICogRm9yIHRoZSBwdXJwb3NlIG9mIG9uZGVtYW5kLCB3YWl0aW5n IGZvciBkaXNrIElPIGlzCisJCQkgKiBhbiBpbmRpY2F0aW9uIHRoYXQgeW91J3JlIHBlcmZvcm1h bmNlIGNyaXRpY2FsLCBhbmQKKwkJCSAqIG5vdCB0aGF0IHRoZSBzeXN0ZW0gaXMgYWN0dWFsbHkg aWRsZS4gU28gc3VidHJhY3QgdGhlCisJCQkgKiBpb3dhaXQgdGltZSBmcm9tIHRoZSBjcHUgaWRs ZSB0aW1lLgorCQkJICovCisJCQlpZiAob2RfdHVuZXJzLT5pb19pc19idXN5ICYmIGlkbGVfdGlt ZSA+PSBpb3dhaXRfdGltZSkKKwkJCQlpZGxlX3RpbWUgLT0gaW93YWl0X3RpbWU7CisJCX0KKwor CQlpZiAodW5saWtlbHkoIXdhbGxfdGltZSB8fCB3YWxsX3RpbWUgPCBpZGxlX3RpbWUpKQorCQkJ Y29udGludWU7CisKKwkJbG9hZCA9IDEwMCAqICh3YWxsX3RpbWUgLSBpZGxlX3RpbWUpIC8gd2Fs bF90aW1lOworCisJCWlmIChkYnNfZGF0YS0+Z292ZXJub3IgPT0gR09WX09OREVNQU5EKSB7CisJ CQlpbnQgZnJlcV9hdmcgPSBfX2NwdWZyZXFfZHJpdmVyX2dldGF2Zyhwb2xpY3ksIGopOworCQkJ aWYgKGZyZXFfYXZnIDw9IDApCisJCQkJZnJlcV9hdmcgPSBwb2xpY3ktPmN1cjsKKworCQkJbG9h ZCAqPSBmcmVxX2F2ZzsKKwkJfQorCisJCWlmIChsb2FkID4gbWF4X2xvYWQpCisJCQltYXhfbG9h ZCA9IGxvYWQ7CisJfQorCisJZGJzX2RhdGEtPmdvdl9jaGVja19jcHUoY3B1LCBtYXhfbG9hZCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdChzdHJ1Y3QgZGJzX2RhdGEg KmRic19kYXRhLAorCQlzdHJ1Y3QgY3B1X2Ric19jb21tb25faW5mbyAqY2RicywgdW5zaWduZWQg aW50IHNhbXBsaW5nX3JhdGUpCit7CisJaW50IGRlbGF5ID0gZGVsYXlfZm9yX3NhbXBsaW5nX3Jh dGUoc2FtcGxpbmdfcmF0ZSk7CisKKwlJTklUX0RFRkVSUkFCTEVfV09SSygmY2Ricy0+d29yaywg ZGJzX2RhdGEtPmdvdl9kYnNfdGltZXIpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjZGJz LT5jcHUsICZjZGJzLT53b3JrLCBkZWxheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNf dGltZXJfZXhpdChzdHJ1Y3QgY3B1X2Ric19jb21tb25faW5mbyAqY2RicykKK3sKKwljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJmNkYnMtPndvcmspOworfQorCitpbnQgY3B1ZnJlcV9nb3Zlcm5v cl9kYnMoc3RydWN0IGRic19kYXRhICpkYnNfZGF0YSwKKwkJc3RydWN0IGNwdWZyZXFfcG9saWN5 ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgb2RfY3B1X2Ric19pbmZv X3MgKm9kX2Ric19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgY3NfY3B1X2Ric19pbmZvX3MgKmNzX2Ri c19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qgb2RfZGJzX3R1bmVycyAqb2RfdHVuZXJzID0gZGJzX2Rh dGEtPnR1bmVyczsKKwlzdHJ1Y3QgY3NfZGJzX3R1bmVycyAqY3NfdHVuZXJzID0gZGJzX2RhdGEt PnR1bmVyczsKKwlzdHJ1Y3QgY3B1X2Ric19jb21tb25faW5mbyAqY3B1X2NkYnM7CisJdW5zaWdu ZWQgaW50ICpzYW1wbGluZ19yYXRlLCBsYXRlbmN5LCBpZ25vcmVfbmljZSwgaiwgY3B1ID0gcG9s aWN5LT5jcHU7CisJaW50IHJjOworCisJY3B1X2NkYnMgPSBkYnNfZGF0YS0+Z2V0X2NwdV9jZGJz KGNwdSk7CisKKwlpZiAoZGJzX2RhdGEtPmdvdmVybm9yID09IEdPVl9DT05TRVJWQVRJVkUpIHsK KwkJY3NfZGJzX2luZm8gPSBkYnNfZGF0YS0+Z2V0X2NwdV9kYnNfaW5mb19zKGNwdSk7CisJCXNh bXBsaW5nX3JhdGUgPSAmY3NfdHVuZXJzLT5zYW1wbGluZ19yYXRlOworCQlpZ25vcmVfbmljZSA9 IGNzX3R1bmVycy0+aWdub3JlX25pY2U7CisJfSBlbHNlIHsKKwkJb2RfZGJzX2luZm8gPSBkYnNf ZGF0YS0+Z2V0X2NwdV9kYnNfaW5mb19zKGNwdSk7CisJCXNhbXBsaW5nX3JhdGUgPSAmb2RfdHVu ZXJzLT5zYW1wbGluZ19yYXRlOworCQlpZ25vcmVfbmljZSA9IG9kX3R1bmVycy0+aWdub3JlX25p Y2U7CisJfQorCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQ1BVRlJFUV9HT1ZfU1RBUlQ6CisJ CWlmICgoIWNwdV9vbmxpbmUoY3B1KSkgfHwgKCFwb2xpY3ktPmN1cikpCisJCQlyZXR1cm4gLUVJ TlZBTDsKKworCQltdXRleF9sb2NrKCZkYnNfZGF0YS0+bXV0ZXgpOworCisJCWRic19kYXRhLT5l bmFibGUrKzsKKwkJY3B1X2NkYnMtPmNwdSA9IGNwdTsKKwkJZm9yX2VhY2hfY3B1KGosIHBvbGlj eS0+Y3B1cykgeworCQkJc3RydWN0IGNwdV9kYnNfY29tbW9uX2luZm8gKmpfY2RiczsKKwkJCWpf Y2RicyA9IGRic19kYXRhLT5nZXRfY3B1X2NkYnMoaik7CisKKwkJCWpfY2Ricy0+Y3VyX3BvbGlj eSA9IHBvbGljeTsKKwkJCWpfY2Ricy0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1l KGosCisJCQkJCSZqX2NkYnMtPnByZXZfY3B1X3dhbGwpOworCQkJaWYgKGlnbm9yZV9uaWNlKQor CQkJCWpfY2Ricy0+cHJldl9jcHVfbmljZSA9CisJCQkJCWtjcHVzdGF0X2NwdShqKS5jcHVzdGF0 W0NQVVRJTUVfTklDRV07CisJCX0KKworCQkvKgorCQkgKiBTdGFydCB0aGUgdGltZXJzY2hlZHVs ZSB3b3JrLCB3aGVuIHRoaXMgZ292ZXJub3IgaXMgdXNlZCBmb3IKKwkJICogZmlyc3QgdGltZQor CQkgKi8KKwkJaWYgKGRic19kYXRhLT5lbmFibGUgIT0gMSkKKwkJCWdvdG8gc2Vjb25kX3RpbWU7 CisKKwkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoY3B1ZnJlcV9nbG9iYWxfa29iamVjdCwKKwkJ CQlkYnNfZGF0YS0+YXR0cl9ncm91cCk7CisJCWlmIChyYykgeworCQkJbXV0ZXhfdW5sb2NrKCZk YnNfZGF0YS0+bXV0ZXgpOworCQkJcmV0dXJuIHJjOworCQl9CisKKwkJLyogcG9saWN5IGxhdGVu Y3kgaXMgaW4gblMuIENvbnZlcnQgaXQgdG8gdVMgZmlyc3QgKi8KKwkJbGF0ZW5jeSA9IHBvbGlj eS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgLyAxMDAwOworCQlpZiAobGF0ZW5jeSA9PSAw KQorCQkJbGF0ZW5jeSA9IDE7CisKKwkJLyoKKwkJICogY29uc2VydmF0aXZlIGRvZXMgbm90IGlt cGxlbWVudCBtaWNybyBsaWtlIG9uZGVtYW5kCisJCSAqIGdvdmVybm9yLCB0aHVzIHdlIGFyZSBi b3VuZCB0byBqaWZmZXMvSFoKKwkJICovCisJCWlmIChkYnNfZGF0YS0+Z292ZXJub3IgPT0gR09W X0NPTlNFUlZBVElWRSkgeworCQkJc3RydWN0IGNzX29wcyAqb3BzID0gZGJzX2RhdGEtPmdvdl9v cHM7CisKKwkJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIob3BzLT5ub3RpZmllcl9ibG9jaywK KwkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKworCQkJZGJzX2RhdGEtPm1pbl9z YW1wbGluZ19yYXRlID0gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKgorCQkJCWppZmZpZXNfdG9f dXNlY3MoMTApOworCQl9IGVsc2UgeworCQkJc3RydWN0IG9kX29wcyAqb3BzID0gZGJzX2RhdGEt Pmdvdl9vcHM7CisKKwkJCW9kX3R1bmVycy0+aW9faXNfYnVzeSA9IG9wcy0+aW9fYnVzeSgpOwor CQl9CisKKwkJLyogQnJpbmcga2VybmVsIGFuZCBIVyBjb25zdHJhaW50cyB0b2dldGhlciAqLwor CQlkYnNfZGF0YS0+bWluX3NhbXBsaW5nX3JhdGUgPSBtYXgoZGJzX2RhdGEtPm1pbl9zYW1wbGlu Z19yYXRlLAorCQkJCU1JTl9MQVRFTkNZX01VTFRJUExJRVIgKiBsYXRlbmN5KTsKKwkJKnNhbXBs aW5nX3JhdGUgPSBtYXgoZGJzX2RhdGEtPm1pbl9zYW1wbGluZ19yYXRlLCBsYXRlbmN5ICoKKwkJ CQlMQVRFTkNZX01VTFRJUExJRVIpOworCitzZWNvbmRfdGltZToKKwkJaWYgKGRic19kYXRhLT5n b3Zlcm5vciA9PSBHT1ZfQ09OU0VSVkFUSVZFKSB7CisJCQljc19kYnNfaW5mby0+ZG93bl9za2lw ID0gMDsKKwkJCWNzX2Ric19pbmZvLT5lbmFibGUgPSAxOworCQkJY3NfZGJzX2luZm8tPnJlcXVl c3RlZF9mcmVxID0gcG9saWN5LT5jdXI7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgb2Rfb3BzICpv cHMgPSBkYnNfZGF0YS0+Z292X29wczsKKwkJCW9kX2Ric19pbmZvLT5yYXRlX211bHQgPSAxOwor CQkJb2RfZGJzX2luZm8tPnNhbXBsZV90eXBlID0gT0RfTk9STUFMX1NBTVBMRTsKKwkJCW9wcy0+ cG93ZXJzYXZlX2JpYXNfaW5pdF9jcHUoY3B1KTsKKwkJfQorCQltdXRleF91bmxvY2soJmRic19k YXRhLT5tdXRleCk7CisKKwkJbXV0ZXhfaW5pdCgmY3B1X2NkYnMtPnRpbWVyX211dGV4KTsKKwkJ ZGJzX3RpbWVyX2luaXQoZGJzX2RhdGEsIGNwdV9jZGJzLCAqc2FtcGxpbmdfcmF0ZSk7CisJCWJy ZWFrOworCisJY2FzZSBDUFVGUkVRX0dPVl9TVE9QOgorCQlpZiAoZGJzX2RhdGEtPmdvdmVybm9y ID09IEdPVl9DT05TRVJWQVRJVkUpCisJCQljc19kYnNfaW5mby0+ZW5hYmxlID0gMDsKKworCQlk YnNfdGltZXJfZXhpdChjcHVfY2Ricyk7CisKKwkJbXV0ZXhfbG9jaygmZGJzX2RhdGEtPm11dGV4 KTsKKwkJbXV0ZXhfZGVzdHJveSgmY3B1X2NkYnMtPnRpbWVyX211dGV4KTsKKwkJZGJzX2RhdGEt PmVuYWJsZS0tOworCQlpZiAoIWRic19kYXRhLT5lbmFibGUpIHsKKwkJCXN0cnVjdCBjc19vcHMg Km9wcyA9IGRic19kYXRhLT5nb3Zfb3BzOworCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoY3B1ZnJl cV9nbG9iYWxfa29iamVjdCwKKwkJCQkJZGJzX2RhdGEtPmF0dHJfZ3JvdXApOworCQkJaWYgKGRi c19kYXRhLT5nb3Zlcm5vciA9PSBHT1ZfQ09OU0VSVkFUSVZFKQorCQkJCWNwdWZyZXFfdW5yZWdp c3Rlcl9ub3RpZmllcihvcHMtPm5vdGlmaWVyX2Jsb2NrLAorCQkJCQkJQ1BVRlJFUV9UUkFOU0lU SU9OX05PVElGSUVSKTsKKwkJfQorCQltdXRleF91bmxvY2soJmRic19kYXRhLT5tdXRleCk7CisK KwkJYnJlYWs7CisKKwljYXNlIENQVUZSRVFfR09WX0xJTUlUUzoKKwkJbXV0ZXhfbG9jaygmY3B1 X2NkYnMtPnRpbWVyX211dGV4KTsKKwkJaWYgKHBvbGljeS0+bWF4IDwgY3B1X2NkYnMtPmN1cl9w b2xpY3ktPmN1cikKKwkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGNwdV9jZGJzLT5jdXJfcG9s aWN5LAorCQkJCQlwb2xpY3ktPm1heCwgQ1BVRlJFUV9SRUxBVElPTl9IKTsKKwkJZWxzZSBpZiAo cG9saWN5LT5taW4gPiBjcHVfY2Ricy0+Y3VyX3BvbGljeS0+Y3VyKQorCQkJX19jcHVmcmVxX2Ry aXZlcl90YXJnZXQoY3B1X2NkYnMtPmN1cl9wb2xpY3ksCisJCQkJCXBvbGljeS0+bWluLCBDUFVG UkVRX1JFTEFUSU9OX0wpOworCQlkYnNfY2hlY2tfY3B1KGRic19kYXRhLCBjcHUpOworCQltdXRl eF91bmxvY2soJmNwdV9jZGJzLT50aW1lcl9tdXRleCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2dvdmVybm9yLmggYi9k cml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9nb3Zlcm5vci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjM0ZTE0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWZyZXEv Y3B1ZnJlcV9nb3Zlcm5vci5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogZHJpdmVycy9jcHVm cmVxL2NwdWZyZXFfZ292ZXJub3IuaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBDUFVGcmVxIGdv dmVybm9ycyBjb21tb24gY29kZQorICoKKyAqIENvcHlyaWdodAkoQykgMjAwMSBSdXNzZWxsIEtp bmcKKyAqCQkoQykgMjAwMyBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRp QGludGVsLmNvbT4uCisgKgkJKEMpIDIwMDMgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50 ZWwuY29tPgorICoJCShDKSAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcu dWs+CisgKgkJKGMpIDIwMTIgVmlyZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAbGluYXJvLm9yZz4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0NQVUZSRVFfR09WRVJORVJf SAorI2RlZmluZSBfQ1BVRlJFUV9HT1ZFUk5FUl9ICisKKyNpbmNsdWRlIDxhc20vY3B1dGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+ CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4K KyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCisvKgorICogVGhlIHBvbGxpbmcgZnJlcXVlbmN5 IGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdHkgb2YgdGhlIHByb2Nlc3Nvci4gRGVmYXVsdAorICog cG9sbGluZyBmcmVxdWVuY3kgaXMgMTAwMCB0aW1lcyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5IG9m IHRoZSBwcm9jZXNzb3IuIFRoZQorICogZ292ZXJub3Igd2lsbCB3b3JrIG9uIGFueSBwcm9jZXNz b3Igd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPD0gMTBtUywgdXNpbmcKKyAqIGFwcHJvcHJpYXRl IHNhbXBsaW5nIHJhdGUuCisgKgorICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kg PiAxMG1TIChtb3N0bHkgZHJpdmVycyB3aXRoIENQVUZSRVFfRVRFUk5BTCkKKyAqIHRoaXMgZ292 ZXJub3Igd2lsbCBub3Qgd29yay4gQWxsIHRpbWVzIGhlcmUgYXJlIGluIHVTLgorICovCisjZGVm aW5lIE1JTl9TQU1QTElOR19SQVRFX1JBVElPCQkJKDIpCisjZGVmaW5lIExBVEVOQ1lfTVVMVElQ TElFUgkJCSgxMDAwKQorI2RlZmluZSBNSU5fTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEwMCkKKyNk ZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICogMTAwMCkKKworLyog T25kZW1hbmQgU2FtcGxpbmcgdHlwZXMgKi8KK2VudW0ge09EX05PUk1BTF9TQU1QTEUsIE9EX1NV Ql9TQU1QTEV9OworCisvKiBNYWNybyBjcmVhdGluZyBzeXNmcyBzaG93IHJvdXRpbmVzICovCisj ZGVmaW5lIHNob3dfb25lKF9nb3YsIGZpbGVfbmFtZSwgb2JqZWN0KQkJCQlcCitzdGF0aWMgc3Np emVfdCBzaG93XyMjZmlsZV9uYW1lCQkJCQkJXAorKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1 Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBz cHJpbnRmKGJ1ZiwgIiV1XG4iLCBfZ292IyNfdHVuZXJzLm9iamVjdCk7CQlcCit9CisKKyNkZWZp bmUgZGVmaW5lX2dldF9jcHVfZGJzX3JvdXRpbmVzKF9kYnNfaW5mbykJCQkJXAorc3RhdGljIHN0 cnVjdCBjcHVfZGJzX2NvbW1vbl9pbmZvICpnZXRfY3B1X2NkYnMoaW50IGNwdSkJCVwKK3sJCQkJ CQkJCQlcCisJcmV0dXJuICZwZXJfY3B1KF9kYnNfaW5mbywgY3B1KS5jZGJzOwkJCQlcCit9CQkJ CQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgKmdldF9jcHVfZGJzX2luZm9fcyhpbnQg Y3B1KQkJCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiAmcGVyX2NwdShfZGJzX2luZm8sIGNwdSk7 CQkJCVwKK30KKworLyoKKyAqIEFiYnJldmlhdGlvbnM6CisgKiBkYnM6IHVzZWQgYXMgYSBzaG9y dGZvcm0gZm9yIGRlbWFuZCBiYXNlZCBzd2l0Y2hpbmcgSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJs ZQorICoJbmFtZXMgc21hbGxlciwgc2ltcGxlcgorICogY2RiczogY29tbW9uIGRicworICogb25f KjogT24tZGVtYW5kIGdvdmVybm9yCisgKiBjc18qOiBDb25zZXJ2YXRpdmUgZ292ZXJub3IKKyAq LworCisvKiBQZXIgY3B1IHN0cnVjdHVyZXMgKi8KK3N0cnVjdCBjcHVfZGJzX2NvbW1vbl9pbmZv IHsKKwlpbnQgY3B1OworCWNwdXRpbWU2NF90IHByZXZfY3B1X2lkbGU7CisJY3B1dGltZTY0X3Qg cHJldl9jcHVfd2FsbDsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOworCXN0cnVjdCBjcHVm cmVxX3BvbGljeSAqY3VyX3BvbGljeTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJLyoK KwkgKiBwZXJjcHUgbXV0ZXggdGhhdCBzZXJpYWxpemVzIGdvdmVybm9yIGxpbWl0IGNoYW5nZSB3 aXRoIGdvdl9kYnNfdGltZXIKKwkgKiBpbnZvY2F0aW9uLiBXZSBkbyBub3Qgd2FudCBnb3ZfZGJz X3RpbWVyIHRvIHJ1biB3aGVuIHVzZXIgaXMgY2hhbmdpbmcKKwkgKiB0aGUgZ292ZXJub3Igb3Ig bGltaXRzLgorCSAqLworCXN0cnVjdCBtdXRleCB0aW1lcl9tdXRleDsKK307CisKK3N0cnVjdCBv ZF9jcHVfZGJzX2luZm9fcyB7CisJc3RydWN0IGNwdV9kYnNfY29tbW9uX2luZm8gY2RiczsKKwlj cHV0aW1lNjRfdCBwcmV2X2NwdV9pb3dhaXQ7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3Rh YmxlICpmcmVxX3RhYmxlOworCXVuc2lnbmVkIGludCBmcmVxX2xvOworCXVuc2lnbmVkIGludCBm cmVxX2xvX2ppZmZpZXM7CisJdW5zaWduZWQgaW50IGZyZXFfaGlfamlmZmllczsKKwl1bnNpZ25l ZCBpbnQgcmF0ZV9tdWx0OworCXVuc2lnbmVkIGludCBzYW1wbGVfdHlwZToxOworfTsKKworc3Ry dWN0IGNzX2NwdV9kYnNfaW5mb19zIHsKKwlzdHJ1Y3QgY3B1X2Ric19jb21tb25faW5mbyBjZGJz OworCXVuc2lnbmVkIGludCBkb3duX3NraXA7CisJdW5zaWduZWQgaW50IHJlcXVlc3RlZF9mcmVx OworCXVuc2lnbmVkIGludCBlbmFibGU6MTsKK307CisKKy8qIEdvdmVybmVycyBzeXNmcyB0dW5h YmxlcyAqLworc3RydWN0IG9kX2Ric190dW5lcnMgeworCXVuc2lnbmVkIGludCBpZ25vcmVfbmlj ZTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxpbmdf ZG93bl9mYWN0b3I7CisJdW5zaWduZWQgaW50IHVwX3RocmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQg ZG93bl9kaWZmZXJlbnRpYWw7CisJdW5zaWduZWQgaW50IHBvd2Vyc2F2ZV9iaWFzOworCXVuc2ln bmVkIGludCBpb19pc19idXN5OworfTsKKworc3RydWN0IGNzX2Ric190dW5lcnMgeworCXVuc2ln bmVkIGludCBpZ25vcmVfbmljZTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZTsKKwl1bnNp Z25lZCBpbnQgc2FtcGxpbmdfZG93bl9mYWN0b3I7CisJdW5zaWduZWQgaW50IHVwX3RocmVzaG9s ZDsKKwl1bnNpZ25lZCBpbnQgZG93bl90aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IGZyZXFfc3Rl cDsKK307CisKKy8qIFBlciBHb3Zlcm5lciBkYXRhICovCitzdHJ1Y3QgZGJzX2RhdGEgeworCS8q IENvbW1vbiBhY3Jvc3MgZ292ZXJub3JzICovCisJI2RlZmluZSBHT1ZfT05ERU1BTkQJCTAKKwkj ZGVmaW5lIEdPVl9DT05TRVJWQVRJVkUJMQorCWludCBnb3Zlcm5vcjsKKwl1bnNpZ25lZCBpbnQg bWluX3NhbXBsaW5nX3JhdGU7CisJdW5zaWduZWQgaW50IGVuYWJsZTsgLyogbnVtYmVyIG9mIENQ VXMgdXNpbmcgdGhpcyBwb2xpY3kgKi8KKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyX2dy b3VwOworCXZvaWQgKnR1bmVyczsKKworCS8qIGRic19tdXRleCBwcm90ZWN0cyBkYnNfZW5hYmxl IGluIGdvdmVybm9yIHN0YXJ0L3N0b3AgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlzdHJ1 Y3QgY3B1X2Ric19jb21tb25faW5mbyAqKCpnZXRfY3B1X2NkYnMpKGludCBjcHUpOworCXZvaWQg KigqZ2V0X2NwdV9kYnNfaW5mb19zKShpbnQgY3B1KTsKKwl2b2lkICgqZ292X2Ric190aW1lciko c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwl2b2lkICgqZ292X2NoZWNrX2NwdSkoaW50IGNw dSwgdW5zaWduZWQgaW50IGxvYWQpOworCisJLyogR292ZXJub3Igc3BlY2lmaWMgb3BzLCBzZWUg YmVsb3cgKi8KKwl2b2lkICpnb3Zfb3BzOworfTsKKworLyogR292ZXJub3Igc3BlY2lmaWMgb3Bz LCB3aWxsIGJlIHBhc3NlZCB0byBkYnNfZGF0YS0+Z292X29wcyAqLworc3RydWN0IG9kX29wcyB7 CisJaW50ICgqaW9fYnVzeSkodm9pZCk7CisJdm9pZCAoKnBvd2Vyc2F2ZV9iaWFzX2luaXRfY3B1 KShpbnQgY3B1KTsKKwl1bnNpZ25lZCBpbnQgKCpwb3dlcnNhdmVfYmlhc190YXJnZXQpKHN0cnVj dCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJdW5zaWduZWQgaW50IGZyZXFfbmV4dCwgdW5z aWduZWQgaW50IHJlbGF0aW9uKTsKKwl2b2lkICgqZnJlcV9pbmNyZWFzZSkoc3RydWN0IGNwdWZy ZXFfcG9saWN5ICpwLCB1bnNpZ25lZCBpbnQgZnJlcSk7Cit9OworCitzdHJ1Y3QgY3Nfb3BzIHsK KwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyX2Jsb2NrOworfTsKKworc3RhdGljIGlu bGluZSBpbnQgZGVsYXlfZm9yX3NhbXBsaW5nX3JhdGUodW5zaWduZWQgaW50IHNhbXBsaW5nX3Jh dGUpCit7CisJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhzYW1wbGluZ19yYXRlKTsKKwor CS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUgamlmZnkg Ki8KKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQorCQlkZWxheSAtPSBqaWZmaWVzICUgZGVs YXk7CisKKwlyZXR1cm4gZGVsYXk7Cit9CisKK2NwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1l KHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKTsKK3ZvaWQgZGJzX2NoZWNrX2Nw dShzdHJ1Y3QgZGJzX2RhdGEgKmRic19kYXRhLCBpbnQgY3B1KTsKK2ludCBjcHVmcmVxX2dvdmVy bm9yX2RicyhzdHJ1Y3QgZGJzX2RhdGEgKmRic19kYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xp Y3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGV2ZW50KTsKKyNlbmRpZiAvKiBfQ1BVRlJFUV9HT1ZF Uk5FUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5j IGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCBkN2Y3NzRiLi5iZGFh YjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBi L2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTEwLDI0ICsxMCwyMyBAQAog ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjog IiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUu aD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgor I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+ CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgog I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BlcmNwdS1kZWZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNp bmNsdWRlIDxsaW51eC90aWNrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNsdWRl IDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLS8qCi0gKiBkYnMg aXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9yIGRlbWFuZGJhc2VkIHN3aXRj aGluZwotICogSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJsZSBuYW1lcyBzbWFsbGVyLCBzaW1wbGVy Ci0gKi8KKyNpbmNsdWRlICJjcHVmcmVxX2dvdmVybm9yLmgiCiAKKy8qIE9uLWRlbWFuZCBnb3Zl cm5vciBtYWNvcnMgKi8KICNkZWZpbmUgREVGX0ZSRVFVRU5DWV9ET1dOX0RJRkZFUkVOVElBTAkJ KDEwKQogI2RlZmluZSBERUZfRlJFUVVFTkNZX1VQX1RIUkVTSE9MRAkJKDgwKQogI2RlZmluZSBE RUZfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxKQpAQCAtMzgsODAgKzM3LDEwIEBACiAjZGVmaW5l IE1JTl9GUkVRVUVOQ1lfVVBfVEhSRVNIT0xECQkoMTEpCiAjZGVmaW5lIE1BWF9GUkVRVUVOQ1lf VVBfVEhSRVNIT0xECQkoMTAwKQogCi0vKgotICogVGhlIHBvbGxpbmcgZnJlcXVlbmN5IG9mIHRo aXMgZ292ZXJub3IgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0eSBvZgotICogdGhlIHByb2Nlc3Nv ci4gRGVmYXVsdCBwb2xsaW5nIGZyZXF1ZW5jeSBpcyAxMDAwIHRpbWVzIHRoZSB0cmFuc2l0aW9u Ci0gKiBsYXRlbmN5IG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBnb3Zlcm5vciB3aWxsIHdvcmsgb24g YW55IHByb2Nlc3NvciB3aXRoCi0gKiB0cmFuc2l0aW9uIGxhdGVuY3kgPD0gMTBtUywgdXNpbmcg YXBwcm9wcmlhdGUgc2FtcGxpbmcKLSAqIHJhdGUuCi0gKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRp b24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzIHdpdGggQ1BVRlJFUV9FVEVSTkFMKQot ICogdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgotICogQWxsIHRpbWVzIGhlcmUgYXJlIGlu IHVTLgotICovCi0jZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFX1JBVElPCQkJKDIpCi0KLXN0YXRp YyB1bnNpZ25lZCBpbnQgbWluX3NhbXBsaW5nX3JhdGU7Ci0KLSNkZWZpbmUgTEFURU5DWV9NVUxU SVBMSUVSCQkJKDEwMDApCi0jZGVmaW5lIE1JTl9MQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwKQot I2RlZmluZSBUUkFOU0lUSU9OX0xBVEVOQ1lfTElNSVQJCSgxMCAqIDEwMDAgKiAxMDAwKQotCi1z dGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRp YyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ks Ci0JCQkJdW5zaWduZWQgaW50IGV2ZW50KTsKLQotI2lmbmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVG QVVMVF9HT1ZfT05ERU1BTkQKLXN0YXRpYwotI2VuZGlmCi1zdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5v ciBjcHVmcmVxX2dvdl9vbmRlbWFuZCA9IHsKLSAgICAgICAubmFtZSAgICAgICAgICAgICAgICAg ICA9ICJvbmRlbWFuZCIsCi0gICAgICAgLmdvdmVybm9yICAgICAgICAgICAgICAgPSBjcHVmcmVx X2dvdmVybm9yX2RicywKLSAgICAgICAubWF4X3RyYW5zaXRpb25fbGF0ZW5jeSA9IFRSQU5TSVRJ T05fTEFURU5DWV9MSU1JVCwKLSAgICAgICAub3duZXIgICAgICAgICAgICAgICAgICA9IFRISVNf TU9EVUxFLAotfTsKLQotLyogU2FtcGxpbmcgdHlwZXMgKi8KLWVudW0ge0RCU19OT1JNQUxfU0FN UExFLCBEQlNfU1VCX1NBTVBMRX07Ci0KLXN0cnVjdCBjcHVfZGJzX2luZm9fcyB7Ci0JY3B1dGlt ZTY0X3QgcHJldl9jcHVfaWRsZTsKLQljcHV0aW1lNjRfdCBwcmV2X2NwdV9pb3dhaXQ7Ci0JY3B1 dGltZTY0X3QgcHJldl9jcHVfd2FsbDsKLQljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOwotCXN0 cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbGljeTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdv cms7Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOwotCXVuc2ln bmVkIGludCBmcmVxX2xvOwotCXVuc2lnbmVkIGludCBmcmVxX2xvX2ppZmZpZXM7Ci0JdW5zaWdu ZWQgaW50IGZyZXFfaGlfamlmZmllczsKLQl1bnNpZ25lZCBpbnQgcmF0ZV9tdWx0OwotCWludCBj cHU7Ci0JdW5zaWduZWQgaW50IHNhbXBsZV90eXBlOjE7Ci0JLyoKLQkgKiBwZXJjcHUgbXV0ZXgg dGhhdCBzZXJpYWxpemVzIGdvdmVybm9yIGxpbWl0IGNoYW5nZSB3aXRoCi0JICogZG9fZGJzX3Rp bWVyIGludm9jYXRpb24uIFdlIGRvIG5vdCB3YW50IGRvX2Ric190aW1lciB0byBydW4KLQkgKiB3 aGVuIHVzZXIgaXMgY2hhbmdpbmcgdGhlIGdvdmVybm9yIG9yIGxpbWl0cy4KLQkgKi8KLQlzdHJ1 Y3QgbXV0ZXggdGltZXJfbXV0ZXg7Ci19Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBj cHVfZGJzX2luZm9fcywgb2RfY3B1X2Ric19pbmZvKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBk YnNfZW5hYmxlOwkvKiBudW1iZXIgb2YgQ1BVcyB1c2luZyB0aGlzIHBvbGljeSAqLworc3RhdGlj IHN0cnVjdCBkYnNfZGF0YSBvZF9kYnNfZGF0YTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1 Y3Qgb2RfY3B1X2Ric19pbmZvX3MsIG9kX2NwdV9kYnNfaW5mbyk7CiAKLS8qCi0gKiBkYnNfbXV0 ZXggcHJvdGVjdHMgZGJzX2VuYWJsZSBpbiBnb3Zlcm5vciBzdGFydC9zdG9wLgotICovCi1zdGF0 aWMgREVGSU5FX01VVEVYKGRic19tdXRleCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyB7 Ci0JdW5zaWduZWQgaW50IHNhbXBsaW5nX3JhdGU7Ci0JdW5zaWduZWQgaW50IHVwX3RocmVzaG9s ZDsKLQl1bnNpZ25lZCBpbnQgZG93bl9kaWZmZXJlbnRpYWw7Ci0JdW5zaWduZWQgaW50IGlnbm9y ZV9uaWNlOwotCXVuc2lnbmVkIGludCBzYW1wbGluZ19kb3duX2ZhY3RvcjsKLQl1bnNpZ25lZCBp bnQgcG93ZXJzYXZlX2JpYXM7Ci0JdW5zaWduZWQgaW50IGlvX2lzX2J1c3k7Ci19IGRic190dW5l cnNfaW5zID0geworc3RhdGljIHN0cnVjdCBvZF9kYnNfdHVuZXJzIG9kX3R1bmVycyA9IHsKIAku dXBfdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9VUF9USFJFU0hPTEQsCiAJLnNhbXBsaW5nX2Rv d25fZmFjdG9yID0gREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SLAogCS5kb3duX2RpZmZlcmVudGlh bCA9IERFRl9GUkVRVUVOQ1lfRE9XTl9ESUZGRVJFTlRJQUwsCkBAIC0xMTksMTQgKzQ4LDM1IEBA IHN0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyB7CiAJLnBvd2Vyc2F2ZV9iaWFzID0gMCwKIH07CiAK LXN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pb3dhaXRfdGltZSh1bnNpZ25lZCBp bnQgY3B1LCBjcHV0aW1lNjRfdCAqd2FsbCkKK3N0YXRpYyB2b2lkIG9uZGVtYW5kX3Bvd2Vyc2F2 ZV9iaWFzX2luaXRfY3B1KGludCBjcHUpCiB7Ci0JdTY0IGlvd2FpdF90aW1lID0gZ2V0X2NwdV9p b3dhaXRfdGltZV91cyhjcHUsIHdhbGwpOworCXN0cnVjdCBvZF9jcHVfZGJzX2luZm9fcyAqZGJz X2luZm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sIGNwdSk7CiAKLQlpZiAoaW93YWl0X3Rp bWUgPT0gLTFVTEwpCi0JCXJldHVybiAwOworCWRic19pbmZvLT5mcmVxX3RhYmxlID0gY3B1ZnJl cV9mcmVxdWVuY3lfZ2V0X3RhYmxlKGNwdSk7CisJZGJzX2luZm8tPmZyZXFfbG8gPSAwOworfQog Ci0JcmV0dXJuIGlvd2FpdF90aW1lOworLyoKKyAqIE5vdCBhbGwgQ1BVcyB3YW50IElPIHRpbWUg dG8gYmUgYWNjb3VudGVkIGFzIGJ1c3k7IHRoaXMgZGVwZW5kcyBvbiBob3cKKyAqIGVmZmljaWVu dCBpZGxpbmcgYXQgYSBoaWdoZXIgZnJlcXVlbmN5L3ZvbHRhZ2UgaXMuCisgKiBQYXZlbCBNYWNo ZWsgc2F5cyB0aGlzIGlzIG5vdCBzbyBmb3IgdmFyaW91cyBnZW5lcmF0aW9ucyBvZiBBTUQgYW5k IG9sZAorICogSW50ZWwgc3lzdGVtcy4KKyAqIE1pa2UgQ2hhbiAoYW5kcm9pZGxjb20pIGNhbGlz IHRoaXMgaXMgYWxzbyBub3QgdHJ1ZSBmb3IgQVJNLgorICogQmVjYXVzZSBvZiB0aGlzLCB3aGl0 ZWxpc3Qgc3BlY2lmaWMga25vd24gKHNlcmllcykgb2YgQ1BVcyBieSBkZWZhdWx0LCBhbmQKKyAq IGxlYXZlIGFsbCBvdGhlcnMgdXAgdG8gdGhlIHVzZXIuCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxk X2lvX2JlX2J1c3kodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJLyoKKwkgKiBG b3IgSW50ZWwsIENvcmUgMiAobW9kZWwgMTUpIGFuZGwgbGF0ZXIgaGF2ZSBhbiBlZmZpY2llbnQg aWRsZS4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1Jf SU5URUwgJiYKKwkJCWJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYKKwkJCWJvb3RfY3B1X2RhdGEu eDg2X21vZGVsID49IDE1KQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOwogfQogCiAv KgpAQCAtMTM1LDE0ICs4NSwxMyBAQCBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVf aW93YWl0X3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbAogICogZnJlcV9s bywgYW5kIGZyZXFfbG9famlmZmllcyBpbiBwZXJjcHUgYXJlYSBmb3IgYXZlcmFnaW5nIGZyZXFz LgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vyc2F2ZV9iaWFzX3RhcmdldChzdHJ1Y3Qg Y3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKLQkJCQkJICB1bnNpZ25lZCBpbnQgZnJlcV9uZXh0LAot CQkJCQkgIHVuc2lnbmVkIGludCByZWxhdGlvbikKKwkJdW5zaWduZWQgaW50IGZyZXFfbmV4dCwg dW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBmcmVxX3JlcSwgZnJlcV9y ZWR1YywgZnJlcV9hdmc7CiAJdW5zaWduZWQgaW50IGZyZXFfaGksIGZyZXFfbG87CiAJdW5zaWdu ZWQgaW50IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBpbnQgamlmZmllc190b3RhbCwgamlmZmllc19o aSwgamlmZmllc19sbzsKLQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvID0gJnBlcl9j cHUob2RfY3B1X2Ric19pbmZvLAorCXN0cnVjdCBvZF9jcHVfZGJzX2luZm9fcyAqZGJzX2luZm8g PSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sCiAJCQkJCQkgICBwb2xpY3ktPmNwdSk7CiAKIAlp ZiAoIWRic19pbmZvLT5mcmVxX3RhYmxlKSB7CkBAIC0xNTQsNyArMTAzLDcgQEAgc3RhdGljIHVu c2lnbmVkIGludCBwb3dlcnNhdmVfYmlhc190YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpw b2xpY3ksCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgZGJzX2luZm8t PmZyZXFfdGFibGUsIGZyZXFfbmV4dCwKIAkJCXJlbGF0aW9uLCAmaW5kZXgpOwogCWZyZXFfcmVx ID0gZGJzX2luZm8tPmZyZXFfdGFibGVbaW5kZXhdLmZyZXF1ZW5jeTsKLQlmcmVxX3JlZHVjID0g ZnJlcV9yZXEgKiBkYnNfdHVuZXJzX2lucy5wb3dlcnNhdmVfYmlhcyAvIDEwMDA7CisJZnJlcV9y ZWR1YyA9IGZyZXFfcmVxICogb2RfdHVuZXJzLnBvd2Vyc2F2ZV9iaWFzIC8gMTAwMDsKIAlmcmVx X2F2ZyA9IGZyZXFfcmVxIC0gZnJlcV9yZWR1YzsKIAogCS8qIEZpbmQgZnJlcSBib3VuZHMgZm9y IGZyZXFfYXZnIGluIGZyZXFfdGFibGUgKi8KQEAgLTE3Myw3ICsxMjIsNyBAQCBzdGF0aWMgdW5z aWduZWQgaW50IHBvd2Vyc2F2ZV9iaWFzX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBv bGljeSwKIAkJZGJzX2luZm8tPmZyZXFfbG9famlmZmllcyA9IDA7CiAJCXJldHVybiBmcmVxX2xv OwogCX0KLQlqaWZmaWVzX3RvdGFsID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5z YW1wbGluZ19yYXRlKTsKKwlqaWZmaWVzX3RvdGFsID0gdXNlY3NfdG9famlmZmllcyhvZF90dW5l cnMuc2FtcGxpbmdfcmF0ZSk7CiAJamlmZmllc19oaSA9IChmcmVxX2F2ZyAtIGZyZXFfbG8pICog amlmZmllc190b3RhbDsKIAlqaWZmaWVzX2hpICs9ICgoZnJlcV9oaSAtIGZyZXFfbG8pIC8gMik7 CiAJamlmZmllc19oaSAvPSAoZnJlcV9oaSAtIGZyZXFfbG8pOwpAQCAtMTg0LDEzICsxMzMsNiBA QCBzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vyc2F2ZV9iaWFzX3RhcmdldChzdHJ1Y3QgY3B1ZnJl cV9wb2xpY3kgKnBvbGljeSwKIAlyZXR1cm4gZnJlcV9oaTsKIH0KIAotc3RhdGljIHZvaWQgb25k ZW1hbmRfcG93ZXJzYXZlX2JpYXNfaW5pdF9jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgY3B1X2Ri c19pbmZvX3MgKmRic19pbmZvID0gJnBlcl9jcHUob2RfY3B1X2Ric19pbmZvLCBjcHUpOwotCWRi c19pbmZvLT5mcmVxX3RhYmxlID0gY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKGNwdSk7Ci0J ZGJzX2luZm8tPmZyZXFfbG8gPSAwOwotfQotCiBzdGF0aWMgdm9pZCBvbmRlbWFuZF9wb3dlcnNh dmVfYmlhc19pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xOTksNTMgKzE0MSwxMzggQEAgc3Rh dGljIHZvaWQgb25kZW1hbmRfcG93ZXJzYXZlX2JpYXNfaW5pdCh2b2lkKQogCX0KIH0KIAotLyoq KioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioq KioqKioqKiovCitzdGF0aWMgdm9pZCBkYnNfZnJlcV9pbmNyZWFzZShzdHJ1Y3QgY3B1ZnJlcV9w b2xpY3kgKnAsIHVuc2lnbmVkIGludCBmcmVxKQoreworCWlmIChvZF90dW5lcnMucG93ZXJzYXZl X2JpYXMpCisJCWZyZXEgPSBwb3dlcnNhdmVfYmlhc190YXJnZXQocCwgZnJlcSwgQ1BVRlJFUV9S RUxBVElPTl9IKTsKKwllbHNlIGlmIChwLT5jdXIgPT0gcC0+bWF4KQorCQlyZXR1cm47CiAKLXN0 YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9taW4oc3RydWN0IGtvYmplY3QgKmtvYmos Ci0JCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorCV9fY3B1ZnJl cV9kcml2ZXJfdGFyZ2V0KHAsIGZyZXEsIG9kX3R1bmVycy5wb3dlcnNhdmVfYmlhcyA/CisJCQlD UFVGUkVRX1JFTEFUSU9OX0wgOiBDUFVGUkVRX1JFTEFUSU9OX0gpOworfQorCisvKgorICogRXZl cnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2ssIGlmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3Mg dGhhbiAyMCUKKyAqIChkZWZhdWx0KSwgdGhlbiB3ZSB0cnkgdG8gaW5jcmVhc2UgZnJlcXVlbmN5 IEV2ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGxvb2sgZm9yCisgKiBhIHRoZSBsb3dlc3QgZnJlcXVl bmN5IHdoaWNoIGNhbiBzdXN0YWluIHRoZSBsb2FkIHdoaWxlIGtlZXBpbmcgaWRsZSB0aW1lCisg KiBvdmVyIDMwJS4gSWYgc3VjaCBhIGZyZXF1ZW5jeSBleGlzdCwgd2UgdHJ5IHRvIGRlY3JlYXNl IHRvIHRoaXMgZnJlcXVlbmN5LgorICoKKyAqIEFueSBmcmVxdWVuY3kgaW5jcmVhc2UgdGFrZXMg aXQgdG8gdGhlIG1heGltdW0gZnJlcXVlbmN5LiBGcmVxdWVuY3kgcmVkdWN0aW9uCisgKiBoYXBw ZW5zIGF0IG1pbmltdW0gc3RlcHMgb2YgNSUgKGRlZmF1bHQpIG9mIGN1cnJlbnQgZnJlcXVlbmN5 CisgKi8KK3N0YXRpYyB2b2lkIG9kX2NoZWNrX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbG9h ZF9mcmVxKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtaW5fc2FtcGxpbmdfcmF0 ZSk7CisJc3RydWN0IG9kX2NwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9ICZwZXJfY3B1KG9kX2Nw dV9kYnNfaW5mbywgY3B1KTsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGRic19p bmZvLT5jZGJzLmN1cl9wb2xpY3k7CisKKwlkYnNfaW5mby0+ZnJlcV9sbyA9IDA7CisKKwkvKiBD aGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCisJaWYgKGxvYWRfZnJlcSA+IG9kX3R1bmVy cy51cF90aHJlc2hvbGQgKiBwb2xpY3ktPmN1cikgeworCQkvKiBJZiBzd2l0Y2hpbmcgdG8gbWF4 IHNwZWVkLCBhcHBseSBzYW1wbGluZ19kb3duX2ZhY3RvciAqLworCQlpZiAocG9saWN5LT5jdXIg PCBwb2xpY3ktPm1heCkKKwkJCWRic19pbmZvLT5yYXRlX211bHQgPQorCQkJCW9kX3R1bmVycy5z YW1wbGluZ19kb3duX2ZhY3RvcjsKKwkJZGJzX2ZyZXFfaW5jcmVhc2UocG9saWN5LCBwb2xpY3kt Pm1heCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGRlY3JlYXNl ICovCisJLyogaWYgd2UgY2Fubm90IHJlZHVjZSB0aGUgZnJlcXVlbmN5IGFueW1vcmUsIGJyZWFr IG91dCBlYXJseSAqLworCWlmIChwb2xpY3ktPmN1ciA9PSBwb2xpY3ktPm1pbikKKwkJcmV0dXJu OworCisJLyoKKwkgKiBUaGUgb3B0aW1hbCBmcmVxdWVuY3kgaXMgdGhlIGZyZXF1ZW5jeSB0aGF0 IGlzIHRoZSBsb3dlc3QgdGhhdCBjYW4KKwkgKiBzdXBwb3J0IHRoZSBjdXJyZW50IENQVSB1c2Fn ZSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHVwIHBvbGljeS4gVG8gYmUKKwkgKiBzYWZlLCB3ZSBm b2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KKwkgKi8KKwlpZiAobG9hZF9mcmVx IDwgKG9kX3R1bmVycy51cF90aHJlc2hvbGQgLSBvZF90dW5lcnMuZG93bl9kaWZmZXJlbnRpYWwp ICoKKwkJCXBvbGljeS0+Y3VyKSB7CisJCXVuc2lnbmVkIGludCBmcmVxX25leHQ7CisJCWZyZXFf bmV4dCA9IGxvYWRfZnJlcSAvIChvZF90dW5lcnMudXBfdGhyZXNob2xkIC0KKwkJCQlvZF90dW5l cnMuZG93bl9kaWZmZXJlbnRpYWwpOworCisJCS8qIE5vIGxvbmdlciBmdWxseSBidXN5LCByZXNl dCByYXRlX211bHQgKi8KKwkJZGJzX2luZm8tPnJhdGVfbXVsdCA9IDE7CisKKwkJaWYgKGZyZXFf bmV4dCA8IHBvbGljeS0+bWluKQorCQkJZnJlcV9uZXh0ID0gcG9saWN5LT5taW47CisKKwkJaWYg KCFvZF90dW5lcnMucG93ZXJzYXZlX2JpYXMpIHsKKwkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0 KHBvbGljeSwgZnJlcV9uZXh0LAorCQkJCQlDUFVGUkVRX1JFTEFUSU9OX0wpOworCQl9IGVsc2Ug eworCQkJaW50IGZyZXEgPSBwb3dlcnNhdmVfYmlhc190YXJnZXQocG9saWN5LCBmcmVxX25leHQs CisJCQkJCUNQVUZSRVFfUkVMQVRJT05fTCk7CisJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChw b2xpY3ksIGZyZXEsCisJCQkJCUNQVUZSRVFfUkVMQVRJT05fTCk7CisJCX0KKwl9CiB9CiAKLWRl ZmluZV9vbmVfZ2xvYmFsX3JvKHNhbXBsaW5nX3JhdGVfbWluKTsKK3N0YXRpYyB2b2lkIG9kX2Ri c190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9kX2NwdV9kYnNf aW5mb19zICpkYnNfaW5mbyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb2RfY3B1X2Ri c19pbmZvX3MsIGNkYnMud29yay53b3JrKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGJzX2luZm8t PmNkYnMuY3B1OworCWludCBkZWxheSwgc2FtcGxlX3R5cGUgPSBkYnNfaW5mby0+c2FtcGxlX3R5 cGU7CiAKLS8qIGNwdWZyZXFfb25kZW1hbmQgR292ZXJub3IgVHVuYWJsZXMgKi8KLSNkZWZpbmUg c2hvd19vbmUoZmlsZV9uYW1lLCBvYmplY3QpCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMj ZmlsZV9uYW1lCQkJCQkJXAotKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpICAgICAgICAgICAgICBcCi17CQkJCQkJCQkJXAotCXJldHVybiBz cHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYnNfdHVuZXJzX2lucy5vYmplY3QpOwkJXAorCW11dGV4X2xv Y2soJmRic19pbmZvLT5jZGJzLnRpbWVyX211dGV4KTsKKworCS8qIENvbW1vbiBOT1JNQUxfU0FN UExFIHNldHVwICovCisJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gT0RfTk9STUFMX1NBTVBMRTsK KwlpZiAoc2FtcGxlX3R5cGUgPT0gT0RfU1VCX1NBTVBMRSkgeworCQlkZWxheSA9IGRic19pbmZv LT5mcmVxX2xvX2ppZmZpZXM7CisJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGRic19pbmZvLT5j ZGJzLmN1cl9wb2xpY3ksCisJCQlkYnNfaW5mby0+ZnJlcV9sbywgQ1BVRlJFUV9SRUxBVElPTl9I KTsKKwl9IGVsc2UgeworCQlkYnNfY2hlY2tfY3B1KCZvZF9kYnNfZGF0YSwgY3B1KTsKKwkJaWYg KGRic19pbmZvLT5mcmVxX2xvKSB7CisJCQkvKiBTZXR1cCB0aW1lciBmb3IgU1VCX1NBTVBMRSAq LworCQkJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gT0RfU1VCX1NBTVBMRTsKKwkJCWRlbGF5ID0g ZGJzX2luZm8tPmZyZXFfaGlfamlmZmllczsKKwkJfSBlbHNlIHsKKwkJCWRlbGF5ID0gZGVsYXlf Zm9yX3NhbXBsaW5nX3JhdGUoZGJzX2luZm8tPnJhdGVfbXVsdCk7CisJCX0KKwl9CisKKwlzY2hl ZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCAmZGJzX2luZm8tPmNkYnMud29yaywgZGVsYXkpOwor CW11dGV4X3VubG9jaygmZGJzX2luZm8tPmNkYnMudGltZXJfbXV0ZXgpOworfQorCisvKioqKioq KioqKioqKioqKioqKioqKioqKiogc3lzZnMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioq KioqKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21pbihzdHJ1Y3Qga29i amVjdCAqa29iaiwKKwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYp Cit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIG9kX2Ric19kYXRhLm1pbl9zYW1wbGlu Z19yYXRlKTsKIH0KLXNob3dfb25lKHNhbXBsaW5nX3JhdGUsIHNhbXBsaW5nX3JhdGUpOwotc2hv d19vbmUoaW9faXNfYnVzeSwgaW9faXNfYnVzeSk7Ci1zaG93X29uZSh1cF90aHJlc2hvbGQsIHVw X3RocmVzaG9sZCk7Ci1zaG93X29uZShzYW1wbGluZ19kb3duX2ZhY3Rvciwgc2FtcGxpbmdfZG93 bl9mYWN0b3IpOwotc2hvd19vbmUoaWdub3JlX25pY2VfbG9hZCwgaWdub3JlX25pY2UpOwotc2hv d19vbmUocG93ZXJzYXZlX2JpYXMsIHBvd2Vyc2F2ZV9iaWFzKTsKIAogLyoqCiAgKiB1cGRhdGVf c2FtcGxpbmdfcmF0ZSAtIHVwZGF0ZSBzYW1wbGluZyByYXRlIGVmZmVjdGl2ZSBpbW1lZGlhdGVs eSBpZiBuZWVkZWQuCiAgKiBAbmV3X3JhdGU6IG5ldyBzYW1wbGluZyByYXRlCiAgKgogICogSWYg bmV3IHJhdGUgaXMgc21hbGxlciB0aGFuIHRoZSBvbGQsIHNpbXBseSB1cGRhaW5nCi0gKiBkYnNf dHVuZXJzX2ludC5zYW1wbGluZ19yYXRlIG1pZ2h0IG5vdCBiZSBhcHByb3ByaWF0ZS4gRm9yIGV4 YW1wbGUsCi0gKiBpZiB0aGUgb3JpZ2luYWwgc2FtcGxpbmdfcmF0ZSB3YXMgMSBzZWNvbmQgYW5k IHRoZSByZXF1ZXN0ZWQgbmV3IHNhbXBsaW5nCi0gKiByYXRlIGlzIDEwIG1zIGJlY2F1c2UgdGhl IHVzZXIgbmVlZHMgaW1tZWRpYXRlIHJlYWN0aW9uIGZyb20gb25kZW1hbmQKLSAqIGdvdmVybm9y LCBidXQgbm90IHN1cmUgaWYgaGlnaGVyIGZyZXF1ZW5jeSB3aWxsIGJlIHJlcXVpcmVkIG9yIG5v dCwKLSAqIHRoZW4sIHRoZSBnb3Zlcm5vciBtYXkgY2hhbmdlIHRoZSBzYW1wbGluZyByYXRlIHRv byBsYXRlOyB1cCB0byAxIHNlY29uZAotICogbGF0ZXIuIFRodXMsIGlmIHdlIGFyZSByZWR1Y2lu ZyB0aGUgc2FtcGxpbmcgcmF0ZSwgd2UgbmVlZCB0byBtYWtlIHRoZQotICogbmV3IHZhbHVlIGVm ZmVjdGl2ZSBpbW1lZGlhdGVseS4KKyAqIGRic190dW5lcnNfaW50LnNhbXBsaW5nX3JhdGUgbWln aHQgbm90IGJlIGFwcHJvcHJpYXRlLiBGb3IgZXhhbXBsZSwgaWYgdGhlCisgKiBvcmlnaW5hbCBz YW1wbGluZ19yYXRlIHdhcyAxIHNlY29uZCBhbmQgdGhlIHJlcXVlc3RlZCBuZXcgc2FtcGxpbmcg cmF0ZSBpcyAxMAorICogbXMgYmVjYXVzZSB0aGUgdXNlciBuZWVkcyBpbW1lZGlhdGUgcmVhY3Rp b24gZnJvbSBvbmRlbWFuZCBnb3Zlcm5vciwgYnV0IG5vdAorICogc3VyZSBpZiBoaWdoZXIgZnJl cXVlbmN5IHdpbGwgYmUgcmVxdWlyZWQgb3Igbm90LCB0aGVuLCB0aGUgZ292ZXJub3IgbWF5Cisg KiBjaGFuZ2UgdGhlIHNhbXBsaW5nIHJhdGUgdG9vIGxhdGU7IHVwIHRvIDEgc2Vjb25kIGxhdGVy LiBUaHVzLCBpZiB3ZSBhcmUKKyAqIHJlZHVjaW5nIHRoZSBzYW1wbGluZyByYXRlLCB3ZSBuZWVk IHRvIG1ha2UgdGhlIG5ldyB2YWx1ZSBlZmZlY3RpdmUKKyAqIGltbWVkaWF0ZWx5LgogICovCiBz dGF0aWMgdm9pZCB1cGRhdGVfc2FtcGxpbmdfcmF0ZSh1bnNpZ25lZCBpbnQgbmV3X3JhdGUpCiB7 CiAJaW50IGNwdTsKIAotCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBuZXdfcmF0ZQot CQkJCSAgICAgPSBtYXgobmV3X3JhdGUsIG1pbl9zYW1wbGluZ19yYXRlKTsKKwlvZF90dW5lcnMu c2FtcGxpbmdfcmF0ZSA9IG5ld19yYXRlID0gbWF4KG5ld19yYXRlLAorCQkJb2RfZGJzX2RhdGEu bWluX3NhbXBsaW5nX3JhdGUpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3Ry dWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7Ci0JCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJz X2luZm87CisJCXN0cnVjdCBvZF9jcHVfZGJzX2luZm9fcyAqZGJzX2luZm87CiAJCXVuc2lnbmVk IGxvbmcgbmV4dF9zYW1wbGluZywgYXBwb2ludGVkX2F0OwogCiAJCXBvbGljeSA9IGNwdWZyZXFf Y3B1X2dldChjcHUpOwpAQCAtMjU0LDI4ICsyODEsMjggQEAgc3RhdGljIHZvaWQgdXBkYXRlX3Nh bXBsaW5nX3JhdGUodW5zaWduZWQgaW50IG5ld19yYXRlKQogCQlkYnNfaW5mbyA9ICZwZXJfY3B1 KG9kX2NwdV9kYnNfaW5mbywgcG9saWN5LT5jcHUpOwogCQljcHVmcmVxX2NwdV9wdXQocG9saWN5 KTsKIAotCQltdXRleF9sb2NrKCZkYnNfaW5mby0+dGltZXJfbXV0ZXgpOworCQltdXRleF9sb2Nr KCZkYnNfaW5mby0+Y2Ricy50aW1lcl9tdXRleCk7CiAKLQkJaWYgKCFkZWxheWVkX3dvcmtfcGVu ZGluZygmZGJzX2luZm8tPndvcmspKSB7Ci0JCQltdXRleF91bmxvY2soJmRic19pbmZvLT50aW1l cl9tdXRleCk7CisJCWlmICghZGVsYXllZF93b3JrX3BlbmRpbmcoJmRic19pbmZvLT5jZGJzLndv cmspKSB7CisJCQltdXRleF91bmxvY2soJmRic19pbmZvLT5jZGJzLnRpbWVyX211dGV4KTsKIAkJ CWNvbnRpbnVlOwogCQl9CiAKLQkJbmV4dF9zYW1wbGluZyAgPSBqaWZmaWVzICsgdXNlY3NfdG9f amlmZmllcyhuZXdfcmF0ZSk7Ci0JCWFwcG9pbnRlZF9hdCA9IGRic19pbmZvLT53b3JrLnRpbWVy LmV4cGlyZXM7Ci0KKwkJbmV4dF9zYW1wbGluZyA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVz KG5ld19yYXRlKTsKKwkJYXBwb2ludGVkX2F0ID0gZGJzX2luZm8tPmNkYnMud29yay50aW1lci5l eHBpcmVzOwogCiAJCWlmICh0aW1lX2JlZm9yZShuZXh0X3NhbXBsaW5nLCBhcHBvaW50ZWRfYXQp KSB7CiAKLQkJCW11dGV4X3VubG9jaygmZGJzX2luZm8tPnRpbWVyX211dGV4KTsKLQkJCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmZGJzX2luZm8tPndvcmspOwotCQkJbXV0ZXhfbG9jaygmZGJz X2luZm8tPnRpbWVyX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmZGJzX2luZm8tPmNkYnMudGlt ZXJfbXV0ZXgpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkYnNfaW5mby0+Y2Ricy53 b3JrKTsKKwkJCW11dGV4X2xvY2soJmRic19pbmZvLT5jZGJzLnRpbWVyX211dGV4KTsKIAotCQkJ c2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsICZkYnNfaW5mby0+d29yaywK LQkJCQkJCSB1c2Vjc190b19qaWZmaWVzKG5ld19yYXRlKSk7CisJCQlzY2hlZHVsZV9kZWxheWVk X3dvcmtfb24oZGJzX2luZm8tPmNkYnMuY3B1LAorCQkJCQkmZGJzX2luZm8tPmNkYnMud29yaywK KwkJCQkJdXNlY3NfdG9famlmZmllcyhuZXdfcmF0ZSkpOwogCiAJCX0KLQkJbXV0ZXhfdW5sb2Nr KCZkYnNfaW5mby0+dGltZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmRic19pbmZvLT5jZGJz LnRpbWVyX211dGV4KTsKIAl9CiB9CiAKQEAgLTMwMCw3ICszMjcsNyBAQCBzdGF0aWMgc3NpemVf dCBzdG9yZV9pb19pc19idXN5KHN0cnVjdCBrb2JqZWN0ICphLCBzdHJ1Y3QgYXR0cmlidXRlICpi LAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAJaWYgKHJldCAhPSAxKQogCQly ZXR1cm4gLUVJTlZBTDsKLQlkYnNfdHVuZXJzX2lucy5pb19pc19idXN5ID0gISFpbnB1dDsKKwlv ZF90dW5lcnMuaW9faXNfYnVzeSA9ICEhaW5wdXQ7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0z MTUsNyArMzQyLDcgQEAgc3RhdGljIHNzaXplX3Qgc3RvcmVfdXBfdGhyZXNob2xkKHN0cnVjdCBr b2JqZWN0ICphLCBzdHJ1Y3QgYXR0cmlidXRlICpiLAogCQkJaW5wdXQgPCBNSU5fRlJFUVVFTkNZ X1VQX1RIUkVTSE9MRCkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZGJzX3R1bmVyc19pbnMu dXBfdGhyZXNob2xkID0gaW5wdXQ7CisJb2RfdHVuZXJzLnVwX3RocmVzaG9sZCA9IGlucHV0Owog CXJldHVybiBjb3VudDsKIH0KIApAQCAtMzI4LDEyICszNTUsMTIgQEAgc3RhdGljIHNzaXplX3Qg c3RvcmVfc2FtcGxpbmdfZG93bl9mYWN0b3Ioc3RydWN0IGtvYmplY3QgKmEsCiAKIAlpZiAocmV0 ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfRE9XTl9GQUNUT1IgfHwgaW5wdXQgPCAxKQog CQlyZXR1cm4gLUVJTlZBTDsKLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2ZhY3RvciA9 IGlucHV0OworCW9kX3R1bmVycy5zYW1wbGluZ19kb3duX2ZhY3RvciA9IGlucHV0OwogCiAJLyog UmVzZXQgZG93biBzYW1wbGluZyBtdWx0aXBsaWVyIGluIGNhc2UgaXQgd2FzIGFjdGl2ZSAqLwog CWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19p bmZvOwotCQlkYnNfaW5mbyA9ICZwZXJfY3B1KG9kX2NwdV9kYnNfaW5mbywgaik7CisJCXN0cnVj dCBvZF9jcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8s CisJCQkJaik7CiAJCWRic19pbmZvLT5yYXRlX211bHQgPSAxOwogCX0KIAlyZXR1cm4gY291bnQ7 CkBAIC0zNTQsMTkgKzM4MSwyMCBAQCBzdGF0aWMgc3NpemVfdCBzdG9yZV9pZ25vcmVfbmljZV9s b2FkKHN0cnVjdCBrb2JqZWN0ICphLCBzdHJ1Y3QgYXR0cmlidXRlICpiLAogCWlmIChpbnB1dCA+ IDEpCiAJCWlucHV0ID0gMTsKIAotCWlmIChpbnB1dCA9PSBkYnNfdHVuZXJzX2lucy5pZ25vcmVf bmljZSkgeyAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKGlucHV0ID09IG9kX3R1bmVycy5pZ25v cmVfbmljZSkgeyAvKiBub3RoaW5nIHRvIGRvICovCiAJCXJldHVybiBjb3VudDsKIAl9Ci0JZGJz X3R1bmVyc19pbnMuaWdub3JlX25pY2UgPSBpbnB1dDsKKwlvZF90dW5lcnMuaWdub3JlX25pY2Ug PSBpbnB1dDsKIAogCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZSAqLwog CWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19p bmZvOworCQlzdHJ1Y3Qgb2RfY3B1X2Ric19pbmZvX3MgKmRic19pbmZvOwogCQlkYnNfaW5mbyA9 ICZwZXJfY3B1KG9kX2NwdV9kYnNfaW5mbywgaik7Ci0JCWRic19pbmZvLT5wcmV2X2NwdV9pZGxl ID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKLQkJCQkJCSZkYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7 Ci0JCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKLQkJCWRic19pbmZvLT5wcmV2X2Nw dV9uaWNlID0ga2NwdXN0YXRfY3B1KGopLmNwdXN0YXRbQ1BVVElNRV9OSUNFXTsKKwkJZGJzX2lu Zm8tPmNkYnMucHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCisJCQkJCQkmZGJz X2luZm8tPmNkYnMucHJldl9jcHVfd2FsbCk7CisJCWlmIChvZF90dW5lcnMuaWdub3JlX25pY2Up CisJCQlkYnNfaW5mby0+Y2Ricy5wcmV2X2NwdV9uaWNlID0KKwkJCQlrY3B1c3RhdF9jcHUoaiku Y3B1c3RhdFtDUFVUSU1FX05JQ0VdOwogCiAJfQogCXJldHVybiBjb3VudDsKQEAgLTM4NSwxNyAr NDEzLDI1IEBAIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Bvd2Vyc2F2ZV9iaWFzKHN0cnVjdCBrb2Jq ZWN0ICphLCBzdHJ1Y3QgYXR0cmlidXRlICpiLAogCWlmIChpbnB1dCA+IDEwMDApCiAJCWlucHV0 ID0gMTAwMDsKIAotCWRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzID0gaW5wdXQ7CisJb2Rf dHVuZXJzLnBvd2Vyc2F2ZV9iaWFzID0gaW5wdXQ7CiAJb25kZW1hbmRfcG93ZXJzYXZlX2JpYXNf aW5pdCgpOwogCXJldHVybiBjb3VudDsKIH0KIAorc2hvd19vbmUob2QsIHNhbXBsaW5nX3JhdGUs IHNhbXBsaW5nX3JhdGUpOworc2hvd19vbmUob2QsIGlvX2lzX2J1c3ksIGlvX2lzX2J1c3kpOwor c2hvd19vbmUob2QsIHVwX3RocmVzaG9sZCwgdXBfdGhyZXNob2xkKTsKK3Nob3dfb25lKG9kLCBz YW1wbGluZ19kb3duX2ZhY3Rvciwgc2FtcGxpbmdfZG93bl9mYWN0b3IpOworc2hvd19vbmUob2Qs IGlnbm9yZV9uaWNlX2xvYWQsIGlnbm9yZV9uaWNlKTsKK3Nob3dfb25lKG9kLCBwb3dlcnNhdmVf YmlhcywgcG93ZXJzYXZlX2JpYXMpOworCiBkZWZpbmVfb25lX2dsb2JhbF9ydyhzYW1wbGluZ19y YXRlKTsKIGRlZmluZV9vbmVfZ2xvYmFsX3J3KGlvX2lzX2J1c3kpOwogZGVmaW5lX29uZV9nbG9i YWxfcncodXBfdGhyZXNob2xkKTsKIGRlZmluZV9vbmVfZ2xvYmFsX3J3KHNhbXBsaW5nX2Rvd25f ZmFjdG9yKTsKIGRlZmluZV9vbmVfZ2xvYmFsX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5l X29uZV9nbG9iYWxfcncocG93ZXJzYXZlX2JpYXMpOworZGVmaW5lX29uZV9nbG9iYWxfcm8oc2Ft cGxpbmdfcmF0ZV9taW4pOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0 ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9taW4uYXR0ciwKQEAgLTQwOCwzNTQgKzQ0NCw3MSBA QCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAlOVUxMCiB9 OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkYnNfYXR0cl9ncm91cCA9IHsKK3N0 YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG9kX2F0dHJfZ3JvdXAgPSB7CiAJLmF0dHJzID0g ZGJzX2F0dHJpYnV0ZXMsCiAJLm5hbWUgPSAib25kZW1hbmQiLAogfTsKIAogLyoqKioqKioqKioq KioqKioqKioqKioqKioqIHN5c2ZzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0 YXRpYyB2b2lkIGRic19mcmVxX2luY3JlYXNlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcCwgdW5z aWduZWQgaW50IGZyZXEpCi17Ci0JaWYgKGRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzKQot CQlmcmVxID0gcG93ZXJzYXZlX2JpYXNfdGFyZ2V0KHAsIGZyZXEsIENQVUZSRVFfUkVMQVRJT05f SCk7Ci0JZWxzZSBpZiAocC0+Y3VyID09IHAtPm1heCkKLQkJcmV0dXJuOwotCi0JX19jcHVmcmVx X2RyaXZlcl90YXJnZXQocCwgZnJlcSwgZGJzX3R1bmVyc19pbnMucG93ZXJzYXZlX2JpYXMgPwot CQkJQ1BVRlJFUV9SRUxBVElPTl9MIDogQ1BVRlJFUV9SRUxBVElPTl9IKTsKLX0KLQotc3RhdGlj IHZvaWQgZGJzX2NoZWNrX2NwdShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8p Ci17Ci0JdW5zaWduZWQgaW50IG1heF9sb2FkX2ZyZXE7Ci0KLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xp Y3kgKnBvbGljeTsKLQl1bnNpZ25lZCBpbnQgajsKLQotCXRoaXNfZGJzX2luZm8tPmZyZXFfbG8g PSAwOwotCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7Ci0KLQkvKgotCSAqIEV2 ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGNoZWNrLCBpZiBjdXJyZW50IGlkbGUgdGltZSBpcyBsZXNz Ci0JICogdGhhbiAyMCUgKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBmcmVxdWVu Y3kKLQkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBsb29rIGZvciBhIHRoZSBsb3dlc3QKLQkg KiBmcmVxdWVuY3kgd2hpY2ggY2FuIHN1c3RhaW4gdGhlIGxvYWQgd2hpbGUga2VlcGluZyBpZGxl IHRpbWUgb3ZlcgotCSAqIDMwJS4gSWYgc3VjaCBhIGZyZXF1ZW5jeSBleGlzdCwgd2UgdHJ5IHRv IGRlY3JlYXNlIHRvIHRoaXMgZnJlcXVlbmN5LgotCSAqCi0JICogQW55IGZyZXF1ZW5jeSBpbmNy ZWFzZSB0YWtlcyBpdCB0byB0aGUgbWF4aW11bSBmcmVxdWVuY3kuCi0JICogRnJlcXVlbmN5IHJl ZHVjdGlvbiBoYXBwZW5zIGF0IG1pbmltdW0gc3RlcHMgb2YKLQkgKiA1JSAoZGVmYXVsdCkgb2Yg Y3VycmVudCBmcmVxdWVuY3kKLQkgKi8KLQotCS8qIEdldCBBYnNvbHV0ZSBMb2FkIC0gaW4gdGVy bXMgb2YgZnJlcSAqLwotCW1heF9sb2FkX2ZyZXEgPSAwOwotCi0JZm9yX2VhY2hfY3B1KGosIHBv bGljeS0+Y3B1cykgewotCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCWNw dXRpbWU2NF90IGN1cl93YWxsX3RpbWUsIGN1cl9pZGxlX3RpbWUsIGN1cl9pb3dhaXRfdGltZTsK LQkJdW5zaWduZWQgaW50IGlkbGVfdGltZSwgd2FsbF90aW1lLCBpb3dhaXRfdGltZTsKLQkJdW5z aWduZWQgaW50IGxvYWQsIGxvYWRfZnJlcTsKLQkJaW50IGZyZXFfYXZnOwotCi0JCWpfZGJzX2lu Zm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sIGopOwotCi0JCWN1cl9pZGxlX3RpbWUgPSBn ZXRfY3B1X2lkbGVfdGltZShqLCAmY3VyX3dhbGxfdGltZSk7Ci0JCWN1cl9pb3dhaXRfdGltZSA9 IGdldF9jcHVfaW93YWl0X3RpbWUoaiwgJmN1cl93YWxsX3RpbWUpOwotCi0JCXdhbGxfdGltZSA9 ICh1bnNpZ25lZCBpbnQpCi0JCQkoY3VyX3dhbGxfdGltZSAtIGpfZGJzX2luZm8tPnByZXZfY3B1 X3dhbGwpOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsID0gY3VyX3dhbGxfdGltZTsKLQot CQlpZGxlX3RpbWUgPSAodW5zaWduZWQgaW50KQotCQkJKGN1cl9pZGxlX3RpbWUgLSBqX2Ric19p bmZvLT5wcmV2X2NwdV9pZGxlKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGN1cl9p ZGxlX3RpbWU7Ci0KLQkJaW93YWl0X3RpbWUgPSAodW5zaWduZWQgaW50KQotCQkJKGN1cl9pb3dh aXRfdGltZSAtIGpfZGJzX2luZm8tPnByZXZfY3B1X2lvd2FpdCk7Ci0JCWpfZGJzX2luZm8tPnBy ZXZfY3B1X2lvd2FpdCA9IGN1cl9pb3dhaXRfdGltZTsKLQotCQlpZiAoZGJzX3R1bmVyc19pbnMu aWdub3JlX25pY2UpIHsKLQkJCXU2NCBjdXJfbmljZTsKLQkJCXVuc2lnbmVkIGxvbmcgY3VyX25p Y2VfamlmZmllczsKLQotCQkJY3VyX25pY2UgPSBrY3B1c3RhdF9jcHUoaikuY3B1c3RhdFtDUFVU SU1FX05JQ0VdIC0KLQkJCQkJIGpfZGJzX2luZm8tPnByZXZfY3B1X25pY2U7Ci0JCQkvKgotCQkJ ICogQXNzdW1wdGlvbjogbmljZSB0aW1lIGJldHdlZW4gc2FtcGxpbmcgcGVyaW9kcyB3aWxsCi0J CQkgKiBiZSBsZXNzIHRoYW4gMl4zMiBqaWZmaWVzIGZvciAzMiBiaXQgc3lzCi0JCQkgKi8KLQkJ CWN1cl9uaWNlX2ppZmZpZXMgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJY3B1dGltZTY0X3RvX2pp ZmZpZXM2NChjdXJfbmljZSk7Ci0KLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrY3B1 c3RhdF9jcHUoaikuY3B1c3RhdFtDUFVUSU1FX05JQ0VdOwotCQkJaWRsZV90aW1lICs9IGppZmZp ZXNfdG9fdXNlY3MoY3VyX25pY2VfamlmZmllcyk7Ci0JCX0KLQotCQkvKgotCQkgKiBGb3IgdGhl IHB1cnBvc2Ugb2Ygb25kZW1hbmQsIHdhaXRpbmcgZm9yIGRpc2sgSU8gaXMgYW4KLQkJICogaW5k aWNhdGlvbiB0aGF0IHlvdSdyZSBwZXJmb3JtYW5jZSBjcml0aWNhbCwgYW5kIG5vdCB0aGF0Ci0J CSAqIHRoZSBzeXN0ZW0gaXMgYWN0dWFsbHkgaWRsZS4gU28gc3VidHJhY3QgdGhlIGlvd2FpdCB0 aW1lCi0JCSAqIGZyb20gdGhlIGNwdSBpZGxlIHRpbWUuCi0JCSAqLwotCi0JCWlmIChkYnNfdHVu ZXJzX2lucy5pb19pc19idXN5ICYmIGlkbGVfdGltZSA+PSBpb3dhaXRfdGltZSkKLQkJCWlkbGVf dGltZSAtPSBpb3dhaXRfdGltZTsKK2RlZmluZV9nZXRfY3B1X2Ric19yb3V0aW5lcyhvZF9jcHVf ZGJzX2luZm8pOwogCi0JCWlmICh1bmxpa2VseSghd2FsbF90aW1lIHx8IHdhbGxfdGltZSA8IGlk bGVfdGltZSkpCi0JCQljb250aW51ZTsKLQotCQlsb2FkID0gMTAwICogKHdhbGxfdGltZSAtIGlk bGVfdGltZSkgLyB3YWxsX3RpbWU7Ci0KLQkJZnJlcV9hdmcgPSBfX2NwdWZyZXFfZHJpdmVyX2dl dGF2Zyhwb2xpY3ksIGopOwotCQlpZiAoZnJlcV9hdmcgPD0gMCkKLQkJCWZyZXFfYXZnID0gcG9s aWN5LT5jdXI7Ci0KLQkJbG9hZF9mcmVxID0gbG9hZCAqIGZyZXFfYXZnOwotCQlpZiAobG9hZF9m cmVxID4gbWF4X2xvYWRfZnJlcSkKLQkJCW1heF9sb2FkX2ZyZXEgPSBsb2FkX2ZyZXE7Ci0JfQot Ci0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLwotCWlmIChtYXhfbG9hZF9mcmVx ID4gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkICogcG9saWN5LT5jdXIpIHsKLQkJLyogSWYg c3dpdGNoaW5nIHRvIG1heCBzcGVlZCwgYXBwbHkgc2FtcGxpbmdfZG93bl9mYWN0b3IgKi8KLQkJ aWYgKHBvbGljeS0+Y3VyIDwgcG9saWN5LT5tYXgpCi0JCQl0aGlzX2Ric19pbmZvLT5yYXRlX211 bHQgPQotCQkJCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX2Rvd25fZmFjdG9yOwotCQlkYnNfZnJl cV9pbmNyZWFzZShwb2xpY3ksIHBvbGljeS0+bWF4KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIENo ZWNrIGZvciBmcmVxdWVuY3kgZGVjcmVhc2UgKi8KLQkvKiBpZiB3ZSBjYW5ub3QgcmVkdWNlIHRo ZSBmcmVxdWVuY3kgYW55bW9yZSwgYnJlYWsgb3V0IGVhcmx5ICovCi0JaWYgKHBvbGljeS0+Y3Vy ID09IHBvbGljeS0+bWluKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFRoZSBvcHRpbWFsIGZyZXF1 ZW5jeSBpcyB0aGUgZnJlcXVlbmN5IHRoYXQgaXMgdGhlIGxvd2VzdCB0aGF0Ci0JICogY2FuIHN1 cHBvcnQgdGhlIGN1cnJlbnQgQ1BVIHVzYWdlIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgdXAKLQkg KiBwb2xpY3kuIFRvIGJlIHNhZmUsIHdlIGZvY3VzIDEwIHBvaW50cyB1bmRlciB0aGUgdGhyZXNo b2xkLgotCSAqLwotCWlmIChtYXhfbG9hZF9mcmVxIDwKLQkgICAgKGRic190dW5lcnNfaW5zLnVw X3RocmVzaG9sZCAtIGRic190dW5lcnNfaW5zLmRvd25fZGlmZmVyZW50aWFsKSAqCi0JICAgICBw b2xpY3ktPmN1cikgewotCQl1bnNpZ25lZCBpbnQgZnJlcV9uZXh0OwotCQlmcmVxX25leHQgPSBt YXhfbG9hZF9mcmVxIC8KLQkJCQkoZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkIC0KLQkJCQkg ZGJzX3R1bmVyc19pbnMuZG93bl9kaWZmZXJlbnRpYWwpOwotCi0JCS8qIE5vIGxvbmdlciBmdWxs eSBidXN5LCByZXNldCByYXRlX211bHQgKi8KLQkJdGhpc19kYnNfaW5mby0+cmF0ZV9tdWx0ID0g MTsKLQotCQlpZiAoZnJlcV9uZXh0IDwgcG9saWN5LT5taW4pCi0JCQlmcmVxX25leHQgPSBwb2xp Y3ktPm1pbjsKLQotCQlpZiAoIWRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzKSB7Ci0JCQlf X2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXFfbmV4dCwKLQkJCQkJQ1BVRlJFUV9S RUxBVElPTl9MKTsKLQkJfSBlbHNlIHsKLQkJCWludCBmcmVxID0gcG93ZXJzYXZlX2JpYXNfdGFy Z2V0KHBvbGljeSwgZnJlcV9uZXh0LAotCQkJCQlDUFVGUkVRX1JFTEFUSU9OX0wpOwotCQkJX19j cHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBmcmVxLAotCQkJCUNQVUZSRVFfUkVMQVRJT05f TCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9Ci0JCWNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIHdvcmsud29yayk7Ci0JdW5z aWduZWQgaW50IGNwdSA9IGRic19pbmZvLT5jcHU7Ci0JaW50IHNhbXBsZV90eXBlID0gZGJzX2lu Zm8tPnNhbXBsZV90eXBlOwotCi0JaW50IGRlbGF5OwotCi0JbXV0ZXhfbG9jaygmZGJzX2luZm8t PnRpbWVyX211dGV4KTsKLQotCS8qIENvbW1vbiBOT1JNQUxfU0FNUExFIHNldHVwICovCi0JZGJz X2luZm8tPnNhbXBsZV90eXBlID0gREJTX05PUk1BTF9TQU1QTEU7Ci0JaWYgKCFkYnNfdHVuZXJz X2lucy5wb3dlcnNhdmVfYmlhcyB8fAotCSAgICBzYW1wbGVfdHlwZSA9PSBEQlNfTk9STUFMX1NB TVBMRSkgewotCQlkYnNfY2hlY2tfY3B1KGRic19pbmZvKTsKLQkJaWYgKGRic19pbmZvLT5mcmVx X2xvKSB7Ci0JCQkvKiBTZXR1cCB0aW1lciBmb3IgU1VCX1NBTVBMRSAqLwotCQkJZGJzX2luZm8t PnNhbXBsZV90eXBlID0gREJTX1NVQl9TQU1QTEU7Ci0JCQlkZWxheSA9IGRic19pbmZvLT5mcmVx X2hpX2ppZmZpZXM7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNh bXBsaW5nIG5lYXJseSBvbgotCQkJICogc2FtZSBqaWZmeQotCQkJICovCi0JCQlkZWxheSA9IHVz ZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZQotCQkJCSogZGJzX2lu Zm8tPnJhdGVfbXVsdCk7Ci0KLQkJCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCi0JCQkJZGVs YXkgLT0gamlmZmllcyAlIGRlbGF5OwotCQl9Ci0JfSBlbHNlIHsKLQkJX19jcHVmcmVxX2RyaXZl cl90YXJnZXQoZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQlkYnNfaW5mby0+ZnJlcV9sbywgQ1BV RlJFUV9SRUxBVElPTl9IKTsKLQkJZGVsYXkgPSBkYnNfaW5mby0+ZnJlcV9sb19qaWZmaWVzOwot CX0KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCAmZGJzX2luZm8tPndvcmssIGRlbGF5 KTsKLQltdXRleF91bmxvY2soJmRic19pbmZvLT50aW1lcl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZv KQotewotCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUg amlmZnkgKi8KLQlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNh bXBsaW5nX3JhdGUpOwotCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkKLQkJZGVsYXkgLT0g amlmZmllcyAlIGRlbGF5Oworc3RhdGljIHN0cnVjdCBvZF9vcHMgb2Rfb3BzID0geworCS5pb19i dXN5ID0gc2hvdWxkX2lvX2JlX2J1c3ksCisJLnBvd2Vyc2F2ZV9iaWFzX2luaXRfY3B1ID0gb25k ZW1hbmRfcG93ZXJzYXZlX2JpYXNfaW5pdF9jcHUsCisJLnBvd2Vyc2F2ZV9iaWFzX3RhcmdldCA9 IHBvd2Vyc2F2ZV9iaWFzX3RhcmdldCwKKwkuZnJlcV9pbmNyZWFzZSA9IGRic19mcmVxX2luY3Jl YXNlLAorfTsKIAotCWRic19pbmZvLT5zYW1wbGVfdHlwZSA9IERCU19OT1JNQUxfU0FNUExFOwot CUlOSVRfREVGRVJSQUJMRV9XT1JLKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKLQlz Y2hlZHVsZV9kZWxheWVkX3dvcmtfb24oZGJzX2luZm8tPmNwdSwgJmRic19pbmZvLT53b3JrLCBk ZWxheSk7Ci19CitzdGF0aWMgc3RydWN0IGRic19kYXRhIG9kX2Ric19kYXRhID0geworCS5nb3Zl cm5vciA9IEdPVl9PTkRFTUFORCwKKwkuYXR0cl9ncm91cCA9ICZvZF9hdHRyX2dyb3VwLAorCS50 dW5lcnMgPSAmb2RfdHVuZXJzLAorCS5nZXRfY3B1X2NkYnMgPSBnZXRfY3B1X2NkYnMsCisJLmdl dF9jcHVfZGJzX2luZm9fcyA9IGdldF9jcHVfZGJzX2luZm9fcywKKwkuZ292X2Ric190aW1lciA9 IG9kX2Ric190aW1lciwKKwkuZ292X2NoZWNrX2NwdSA9IG9kX2NoZWNrX2NwdSwKKwkuZ292X29w cyA9ICZvZF9vcHMsCit9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3Ry dWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKK3N0YXRpYyBpbnQgb2RfY3B1ZnJlcV9nb3Zl cm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCXVuc2lnbmVkIGludCBl dmVudCkKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRic19pbmZvLT53b3JrKTsKKwly ZXR1cm4gY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoJm9kX2Ric19kYXRhLCBwb2xpY3ksIGV2ZW50KTsK IH0KIAotLyoKLSAqIE5vdCBhbGwgQ1BVcyB3YW50IElPIHRpbWUgdG8gYmUgYWNjb3VudGVkIGFz IGJ1c3k7IHRoaXMgZGVwZW5kc29uIGhvdwotICogZWZmaWNpZW50IGlkbGluZyBhdCBhIGhpZ2hl ciBmcmVxdWVuY3kvdm9sdGFnZSBpcy4KLSAqIFBhdmVsIE1hY2hlayBzYXlzIHRoaXMgaXMgbm90 IHNvIGZvciB2YXJpb3VzIGdlbmVyYXRpb25zIG9mIEFNRCBhbmQgb2xkCi0gKiBJbnRlbCBzeXN0 ZW1zLgotICogTWlrZSBDaGFuIChhbmRyb2lkbGNvbSkgY2FsaXMgdGhpcyBpcyBhbHNvIG5vdCB0 cnVlIGZvciBBUk0uCi0gKiBCZWNhdXNlIG9mIHRoaXMsIHdoaXRlbGlzdCBzcGVjaWZpYyBrbm93 biAoc2VyaWVzKSBvZiBDUFVzIGJ5IGRlZmF1bHQsIGFuZAotICogbGVhdmUgYWxsIG90aGVycyB1 cCB0byB0aGUgdXNlci4KLSAqLwotc3RhdGljIGludCBzaG91bGRfaW9fYmVfYnVzeSh2b2lkKQot ewotI2lmIGRlZmluZWQoQ09ORklHX1g4NikKLQkvKgotCSAqIEZvciBJbnRlbCwgQ29yZSAyICht b2RlbCAxNSkgYW5kbCBsYXRlciBoYXZlIGFuIGVmZmljaWVudCBpZGxlLgotCSAqLwotCWlmIChi b290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgotCSAgICBib290 X2NwdV9kYXRhLng4NiA9PSA2ICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDE1 KQotCQlyZXR1cm4gMTsKKyNpZm5kZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVN QU5ECitzdGF0aWMKICNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNwdWZyZXFf Z292ZXJub3JfZGJzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAotCQkJCSAgIHVuc2ln bmVkIGludCBldmVudCkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7Ci0Jc3Ry dWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvOwotCXVuc2lnbmVkIGludCBqOwotCWlu dCByYzsKLQotCXRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sIGNwdSk7 Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBDUFVGUkVRX0dPVl9TVEFSVDoKLQkJaWYgKCgh Y3B1X29ubGluZShjcHUpKSB8fCAoIXBvbGljeS0+Y3VyKSkKLQkJCXJldHVybiAtRUlOVkFMOwot Ci0JCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0KLQkJZGJzX2VuYWJsZSsrOwotCQlmb3JfZWFj aF9jcHUoaiwgcG9saWN5LT5jcHVzKSB7Ci0JCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJz X2luZm87Ci0JCQlqX2Ric19pbmZvID0gJnBlcl9jcHUob2RfY3B1X2Ric19pbmZvLCBqKTsKLQkJ CWpfZGJzX2luZm8tPmN1cl9wb2xpY3kgPSBwb2xpY3k7Ci0KLQkJCWpfZGJzX2luZm8tPnByZXZf Y3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAotCQkJCQkJJmpfZGJzX2luZm8tPnByZXZf Y3B1X3dhbGwpOwotCQkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQotCQkJCWpfZGJz X2luZm8tPnByZXZfY3B1X25pY2UgPQotCQkJCQkJa2NwdXN0YXRfY3B1KGopLmNwdXN0YXRbQ1BV VElNRV9OSUNFXTsKLQkJfQotCQl0aGlzX2Ric19pbmZvLT5jcHUgPSBjcHU7Ci0JCXRoaXNfZGJz X2luZm8tPnJhdGVfbXVsdCA9IDE7Ci0JCW9uZGVtYW5kX3Bvd2Vyc2F2ZV9iaWFzX2luaXRfY3B1 KGNwdSk7Ci0JCS8qCi0JCSAqIFN0YXJ0IHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhp cyBnb3Zlcm5vcgotCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCi0JCSAqLwotCQlpZiAoZGJz X2VuYWJsZSA9PSAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQgbGF0ZW5jeTsKLQotCQkJcmMgPSBzeXNm c19jcmVhdGVfZ3JvdXAoY3B1ZnJlcV9nbG9iYWxfa29iamVjdCwKLQkJCQkJCSZkYnNfYXR0cl9n cm91cCk7Ci0JCQlpZiAocmMpIHsKLQkJCQltdXRleF91bmxvY2soJmRic19tdXRleCk7Ci0JCQkJ cmV0dXJuIHJjOwotCQkJfQotCi0JCQkvKiBwb2xpY3kgbGF0ZW5jeSBpcyBpbiBuUy4gQ29udmVy dCBpdCB0byB1UyBmaXJzdCAqLwotCQkJbGF0ZW5jeSA9IHBvbGljeS0+Y3B1aW5mby50cmFuc2l0 aW9uX2xhdGVuY3kgLyAxMDAwOwotCQkJaWYgKGxhdGVuY3kgPT0gMCkKLQkJCQlsYXRlbmN5ID0g MTsKLQkJCS8qIEJyaW5nIGtlcm5lbCBhbmQgSFcgY29uc3RyYWludHMgdG9nZXRoZXIgKi8KLQkJ CW1pbl9zYW1wbGluZ19yYXRlID0gbWF4KG1pbl9zYW1wbGluZ19yYXRlLAotCQkJCQlNSU5fTEFU RU5DWV9NVUxUSVBMSUVSICogbGF0ZW5jeSk7Ci0JCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19y YXRlID0KLQkJCQltYXgobWluX3NhbXBsaW5nX3JhdGUsCi0JCQkJICAgIGxhdGVuY3kgKiBMQVRF TkNZX01VTFRJUExJRVIpOwotCQkJZGJzX3R1bmVyc19pbnMuaW9faXNfYnVzeSA9IHNob3VsZF9p b19iZV9idXN5KCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwotCi0JCW11dGV4 X2luaXQoJnRoaXNfZGJzX2luZm8tPnRpbWVyX211dGV4KTsKLQkJZGJzX3RpbWVyX2luaXQodGhp c19kYnNfaW5mbyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVGUkVRX0dPVl9TVE9QOgotCQlkYnNf dGltZXJfZXhpdCh0aGlzX2Ric19pbmZvKTsKLQotCQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwot CQltdXRleF9kZXN0cm95KCZ0aGlzX2Ric19pbmZvLT50aW1lcl9tdXRleCk7Ci0JCWRic19lbmFi bGUtLTsKLQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwotCQlpZiAoIWRic19lbmFibGUpCi0J CQlzeXNmc19yZW1vdmVfZ3JvdXAoY3B1ZnJlcV9nbG9iYWxfa29iamVjdCwKLQkJCQkJICAgJmRi c19hdHRyX2dyb3VwKTsKLQotCQlicmVhazsKLQotCWNhc2UgQ1BVRlJFUV9HT1ZfTElNSVRTOgot CQltdXRleF9sb2NrKCZ0aGlzX2Ric19pbmZvLT50aW1lcl9tdXRleCk7Ci0JCWlmIChwb2xpY3kt Pm1heCA8IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ktPmN1cikKLQkJCV9fY3B1ZnJlcV9kcml2 ZXJfdGFyZ2V0KHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQkJcG9saWN5LT5tYXgsIENQ VUZSRVFfUkVMQVRJT05fSCk7Ci0JCWVsc2UgaWYgKHBvbGljeS0+bWluID4gdGhpc19kYnNfaW5m by0+Y3VyX3BvbGljeS0+Y3VyKQotCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQodGhpc19kYnNf aW5mby0+Y3VyX3BvbGljeSwKLQkJCQlwb2xpY3ktPm1pbiwgQ1BVRlJFUV9SRUxBVElPTl9MKTsK LQkJZGJzX2NoZWNrX2NwdSh0aGlzX2Ric19pbmZvKTsKLQkJbXV0ZXhfdW5sb2NrKCZ0aGlzX2Ri c19pbmZvLT50aW1lcl9tdXRleCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KK3N0cnVj dCBjcHVmcmVxX2dvdmVybm9yIGNwdWZyZXFfZ292X29uZGVtYW5kID0geworCS5uYW1lCQkJPSAi b25kZW1hbmQiLAorCS5nb3Zlcm5vcgkJPSBvZF9jcHVmcmVxX2dvdmVybm9yX2RicywKKwkubWF4 X3RyYW5zaXRpb25fbGF0ZW5jeQk9IFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVCwKKwkub3duZXIJ CQk9IFRISVNfTU9EVUxFLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9nb3ZfZGJz X2luaXQodm9pZCkKIHsKIAl1NjQgaWRsZV90aW1lOwogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAK KwltdXRleF9pbml0KCZvZF9kYnNfZGF0YS5tdXRleCk7CiAJaWRsZV90aW1lID0gZ2V0X2NwdV9p ZGxlX3RpbWVfdXMoY3B1LCBOVUxMKTsKIAlwdXRfY3B1KCk7CiAJaWYgKGlkbGVfdGltZSAhPSAt MVVMTCkgewogCQkvKiBJZGxlIG1pY3JvIGFjY291bnRpbmcgaXMgc3VwcG9ydGVkLiBVc2UgZmlu ZXIgdGhyZXNob2xkcyAqLwotCQlkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQgPSBNSUNST19G UkVRVUVOQ1lfVVBfVEhSRVNIT0xEOwotCQlkYnNfdHVuZXJzX2lucy5kb3duX2RpZmZlcmVudGlh bCA9Ci0JCQkJCU1JQ1JPX0ZSRVFVRU5DWV9ET1dOX0RJRkZFUkVOVElBTDsKKwkJb2RfdHVuZXJz LnVwX3RocmVzaG9sZCA9IE1JQ1JPX0ZSRVFVRU5DWV9VUF9USFJFU0hPTEQ7CisJCW9kX3R1bmVy cy5kb3duX2RpZmZlcmVudGlhbCA9IE1JQ1JPX0ZSRVFVRU5DWV9ET1dOX0RJRkZFUkVOVElBTDsK IAkJLyoKIAkJICogSW4gbm9oei9taWNybyBhY2NvdW50aW5nIGNhc2Ugd2Ugc2V0IHRoZSBtaW5p bXVtIGZyZXF1ZW5jeQogCQkgKiBub3QgZGVwZW5kaW5nIG9uIEhaLCBidXQgZml4ZWQgKHZlcnkg bG93KS4gVGhlIGRlZmVycmVkCiAJCSAqIHRpbWVyIG1pZ2h0IHNraXAgc29tZSBzYW1wbGVzIGlm IGlkbGUvc2xlZXBpbmcgYXMgbmVlZGVkLgogCQkqLwotCQltaW5fc2FtcGxpbmdfcmF0ZSA9IE1J Q1JPX0ZSRVFVRU5DWV9NSU5fU0FNUExFX1JBVEU7CisJCW9kX2Ric19kYXRhLm1pbl9zYW1wbGlu Z19yYXRlID0gTUlDUk9fRlJFUVVFTkNZX01JTl9TQU1QTEVfUkFURTsKIAl9IGVsc2UgewogCQkv KiBGb3IgY29ycmVjdCBzdGF0aXN0aWNzLCB3ZSBuZWVkIDEwIHRpY2tzIGZvciBlYWNoIG1lYXN1 cmUgKi8KLQkJbWluX3NhbXBsaW5nX3JhdGUgPQotCQkJTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8g KiBqaWZmaWVzX3RvX3VzZWNzKDEwKTsKKwkJb2RfZGJzX2RhdGEubWluX3NhbXBsaW5nX3JhdGUg PSBNSU5fU0FNUExJTkdfUkFURV9SQVRJTyAqCisJCQlqaWZmaWVzX3RvX3VzZWNzKDEwKTsKIAl9 CiAKIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3Zfb25kZW1h bmQpOwpAQCAtNzY2LDcgKzUxOSw2IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX2dvdl9k YnNfZXhpdCh2b2lkKQogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3Zf b25kZW1hbmQpOwogfQogCi0KIE1PRFVMRV9BVVRIT1IoIlZlbmthdGVzaCBQYWxsaXBhZGkgPHZl bmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiQWxleGV5IFN0 YXJpa292c2tpeSA8YWxleGV5Lnkuc3Rhcmlrb3Zza2l5QGludGVsLmNvbT4iKTsKIE1PRFVMRV9E RVNDUklQVElPTigiJ2NwdWZyZXFfb25kZW1hbmQnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJu b3IgZm9yICIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9s aW51eC9jcHVmcmVxLmgKaW5kZXggZDAzYzIxOS4uYTU1Yjg4ZSAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTQwNywx MCArNDA3LDQgQEAgdm9pZCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzdHJ1Y3Qg Y3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBj cHUpOwogCiB2b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHVuc2lnbmVkIGlu dCBjcHUpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgIEdvdmVybm9y IEhlbHBlcnMJCQkJICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotY3B1dGltZTY0X3QgZ2V0X2NwdV9p ZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpOwotCiAjZW5kaWYg LyogX0xJTlVYX0NQVUZSRVFfSCAqLwotLSAKMS43LjEyLnJjMi4xOC5nNjFiNDcyZQoK --e89a8f3b9c3f8a843104ccd9cece--