From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 07/10 v2] xen/arm: vpl011: Add support for vuart in xenconsole Date: Fri, 28 Apr 2017 21:31:21 +0530 Message-ID: <1493395284-18430-8-git-send-email-bhupinder.thakur@linaro.org> References: <1493395284-18430-1-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d48LK-0000Fb-40 for xen-devel@lists.xenproject.org; Fri, 28 Apr 2017 16:02:02 +0000 Received: by mail-pg0-f47.google.com with SMTP id o3so11675716pgn.2 for ; Fri, 28 Apr 2017 09:01:59 -0700 (PDT) In-Reply-To: <1493395284-18430-1-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Wei Liu , Andrew Cooper , Ian Jackson , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org WGVuY29uc29sZSBzdXBwb3J0cyBvbmx5IFBWIGNvbnNvbGUgY3VycmVudGx5LiBUaGlzIHBhdGNo IGFkZHMgc3VwcG9ydApmb3IgdnVhcnQsIHdoaWNoIGFsbG93cyBlbXVsYXRlZCBwbDAxMSB1YXJ0 IHRvIGJlIGFjY2Vzc2VkIGFzIGEgY29uc29sZS4KClRoaXMgcGF0Y2ggbW9kaWZpZXMgZGlmZmVy ZW50IGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJcyB1c2VkCmluIHhlbmNvbnNvbGUgdG8gc3VwcG9y dCB0d28gY29uc29sZSB0eXBlczogUFYgYW5kIFZVQVJULgoKQ2hhbmdlIHN1bW1hcnk6CgoxLiBT cGxpdCB0aGUgZG9tYWluIHN0cnVjdHVyZSBpbnRvIGEgY29uc29sZSBzdHJ1Y3R1cmUgYW5kIHRo ZQogICBkb21haW4gc3RydWN0dXJlLiBFYWNoIFBWIGFuZCBWVUFSVCB3aWxsIGhhdmUgc2VwcmF0 ZSBjb25zb2xlCiAgIHN0cnVjdHVyZXMuCgoyLiBNb2RpZnkgZGlmZmVyZW50IEFQSXMgc3VjaCBh cyBidWZmZXJfYXBwZW5kKCkgZXRjLiB0byB0YWtlCiAgIGNvbnNvbGUgc3RydWN0dXJlIGFzIGlu cHV0IGFuZCBwZXJmb3JtIHBlciBjb25zb2xlIHNwZWNpZmljCiAgIG9wZXJhdGlvbnMuCgozLiBN b2RmaWNhdGlvbnMgaW4gZG9tYWluX2NyZWF0ZV9yaW5nKCk6CiAgICAtIEJpbmQgdG8gdGhlIHZw bDAxMSBldmVudCBjaGFubmVsIG9idGFpbmVkIGZyb20gdGhlIHhlbiBzdG9yZSBhcyBhCiAgICAg IG5ldyBwYXJhbWV0ZXIuCiAgICAtIE1hcCB0aGUgUEZOIHRvIGl0cyBhZGRyZXNzIHNwYWNlIHRv IGJlIHVzZWQgYXMgSU4vT1VUIHJpbmcKICAgICAgYnVmZmVycy4KICAgICAgSXQgb2J0YWlucyB0 aGUgUEZOIGZyb20gdGhlIHhlbiBzdG9yZSBhcyBhIG5ldyBwYXJhbWV0ZXIKCjQuIE1vZGlmaWNh dGlvbnMgaW4gaGFuZGxlX3JpbmdfcmVhZCgpIHRvIGhhbmRsZSBib3RoIFBWIGFuZCBWVUFSVAog ICBldmVudHMuCgo1LiBBZGQgYSBuZXcgbG9nX2ZpbGUgZm9yIFZVQVJUIGNvbnNvbGUgbG9ncy4K ClNpZ25lZC1vZmYtYnk6IEJodXBpbmRlciBUaGFrdXIgPGJodXBpbmRlci50aGFrdXJAbGluYXJv Lm9yZz4KLS0tCgpDaGFuZ2VzIHNpbmNlIHYxOgoKLSBTcGxpdCB0aGUgZG9tYWluIHN0cnV0dXJl IHRvIGEgc2VwYXJhdGUgY29uc29sZSBzdHJ1Y3R1cmUKLSBNb2RpZmllZCB0aGUgZnVuY3Rpb25z IHRvIG9wZXJhdGUgb24gdGhlIGNvbnNvbGUgc3RydXR1cmUKLSBSZXBsYWNlZCByZXBldGl0aXZl IHBlciBjb25zb2xlIGNvZGUgd2l0aCBnZW5lcmljIGNvZGUKCiB0b29scy9jb25zb2xlL2RhZW1v bi9pby5jIHwgNTE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCAzNjUgaW5zZXJ0aW9ucygrKSwgMTQ5IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25zb2xlL2Rh ZW1vbi9pby5jCmluZGV4IDdlNmE4ODYuLjU1ZmRhMzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NvbnNv bGUvZGFlbW9uL2lvLmMKKysrIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwpAQCAtNjEsNiAr NjEsMTAgQEAKIC8qIER1cmF0aW9uIG9mIGVhY2ggdGltZSBwZXJpb2QgaW4gbXMgKi8KICNkZWZp bmUgUkFURV9MSU1JVF9QRVJJT0QgMjAwCiAKKyNkZWZpbmUgTUFYX0NPTlNPTEUgMgorI2RlZmlu ZSBDT05TT0xFX1RZUEVfUFYgMAorI2RlZmluZSBDT05TT0xFX1RZUEVfVlVBUlQgMQorCiBleHRl cm4gaW50IGxvZ19yZWxvYWQ7CiBleHRlcm4gaW50IGxvZ19ndWVzdDsKIGV4dGVybiBpbnQgbG9n X2h2OwpAQCAtODksMjkgKzkzLDc1IEBAIHN0cnVjdCBidWZmZXIgewogCXNpemVfdCBtYXhfY2Fw YWNpdHk7CiB9OwogCi1zdHJ1Y3QgZG9tYWluIHsKLQlpbnQgZG9taWQ7CitzdHJ1Y3QgY29uc29s ZSB7CisJY2hhciAqbmFtZTsKKwljaGFyICp0dHluYW1lOwogCWludCBtYXN0ZXJfZmQ7CiAJaW50 IG1hc3Rlcl9wb2xsZmRfaWR4OwogCWludCBzbGF2ZV9mZDsKIAlpbnQgbG9nX2ZkOwotCWJvb2wg aXNfZGVhZDsKLQl1bnNpZ25lZCBsYXN0X3NlZW47CiAJc3RydWN0IGJ1ZmZlciBidWZmZXI7Ci0J c3RydWN0IGRvbWFpbiAqbmV4dDsKLQljaGFyICpjb25zcGF0aDsKIAlpbnQgcmluZ19yZWY7CiAJ eGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBsb2NhbF9wb3J0OwogCXhlbmV2dGNobl9wb3J0X29y X2Vycm9yX3QgcmVtb3RlX3BvcnQ7CisJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRlcmZh Y2U7CisJc3RydWN0IGRvbWFpbiAqZDsgIC8qIFJlZmVyZW5jZSB0byB0aGUgZG9tYWluIGl0IGlz IGNvbnRhaW5lZCBpbi4gKi8KK307CisKK3N0cnVjdCBkb21haW4geworCWludCBkb21pZDsKKwli b29sIGlzX2RlYWQ7CisJdW5zaWduZWQgbGFzdF9zZWVuOworCXN0cnVjdCBkb21haW4gKm5leHQ7 CisJY2hhciAqY29uc3BhdGg7CiAJeGVuZXZ0Y2huX2hhbmRsZSAqeGNlX2hhbmRsZTsKIAlpbnQg eGNlX3BvbGxmZF9pZHg7Ci0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJ aW50IGV2ZW50X2NvdW50OwogCWxvbmcgbG9uZyBuZXh0X3BlcmlvZDsKKwlzdHJ1Y3QgY29uc29s ZSBjb25zb2xlW01BWF9DT05TT0xFXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpkb21f aGVhZDsKIAorc3RhdGljIGlubGluZSBib29sIGNvbnNvbGVfZW5hYmxlZChzdHJ1Y3QgY29uc29s ZSAqY29uKSB7IHJldHVybiBjb24tPmxvY2FsX3BvcnQgIT0gLTE7IH0KKworc3RhdGljIGlubGlu ZSB2b2lkIGNvbnNvbGVfaXRlcl9ub19jaGVjayhzdHJ1Y3QgZG9tYWluICpkLCB2b2lkICgqIGl0 ZXJfZnVuYykoc3RydWN0IGNvbnNvbGUgKikpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBjb25z b2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOworCisJZm9yIChpPTA7IGkgPCBNQVhfQ09OU09M RTsgaSsrLCBjb24rKykKKwl7CisJCWl0ZXJfZnVuYyhjb24pOworCX0KK30KKworc3RhdGljIGlu bGluZSBib29sIGNvbnNvbGVfaXRlcl9ib29sX2NoZWNrKHN0cnVjdCBkb21haW4gKmQsIGJvb2wg KCogaXRlcl9mdW5jKShzdHJ1Y3QgY29uc29sZSAqKSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0 IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3IgKGk9MDsgaSA8IE1BWF9D T05TT0xFOyBpKyssIGNvbisrKQorCXsKKwkJaWYgKGl0ZXJfZnVuYyhjb24pKQorCQkJcmV0dXJu IHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY29uc29s ZV9pdGVyX2Vycl9jaGVjayhzdHJ1Y3QgZG9tYWluICpkLCBpbnQgKCogaXRlcl9mdW5jKShzdHJ1 Y3QgY29uc29sZSAqKSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICYo ZC0+Y29uc29sZVswXSk7CisKKwlmb3IgKGk9MDsgaSA8IE1BWF9DT05TT0xFOyBpKyssIGNvbisr KQorCXsKKwkJaWYgKCFpdGVyX2Z1bmMoY29uKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4g MTsKK30KKwogc3RhdGljIGludCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyKiBidWYsIHNp emVfdCBsZW4pCiB7CiAJd2hpbGUgKGxlbikgewpAQCAtMTU4LDExICsyMDgsMjQgQEAgc3RhdGlj IGludCB3cml0ZV93aXRoX3RpbWVzdGFtcChpbnQgZmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVf dCBzeiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3Qg ZG9tYWluICpkb20pCitzdGF0aWMgaW5saW5lIGJvb2wgYnVmZmVyX2F2YWlsYWJsZShzdHJ1Y3Qg Y29uc29sZSAqY29uKQoreworCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0YSB8fAorCQkhY29u LT5idWZmZXIubWF4X2NhcGFjaXR5IHx8CisJCWNvbi0+YnVmZmVyLnNpemUgPCBjb24tPmJ1ZmZl ci5tYXhfY2FwYWNpdHkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0cnVjdCBjb25zb2xlICpjb24pCiB7Ci0J c3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gJmRvbS0+YnVmZmVyOworCXN0cnVjdCBidWZmZXIgKmJ1 ZmZlciA9ICZjb24tPmJ1ZmZlcjsKKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBj b24tPmludGVyZmFjZTsKKwl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHBvcnQgPSBjb24tPmxv Y2FsX3BvcnQ7CisJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOworCiAJWEVOQ09OU19SSU5H X0lEWCBjb25zLCBwcm9kLCBzaXplOwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9 IGRvbS0+aW50ZXJmYWNlOwogCiAJY29ucyA9IGludGYtPm91dF9jb25zOwogCXByb2QgPSBpbnRm LT5vdXRfcHJvZDsKQEAgLTE4NywyMiArMjUwLDIyIEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBl bmQoc3RydWN0IGRvbWFpbiAqZG9tKQogCiAJeGVuX21iKCk7CiAJaW50Zi0+b3V0X2NvbnMgPSBj b25zOwotCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBkb20tPmxvY2FsX3BvcnQp OworCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKIAogCS8qIEdldCB0 aGUgZGF0YSB0byB0aGUgbG9nZmlsZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBiZWNhdXNlIGlmCiAJ ICogbm8gb25lIGlzIGxpc3RlbmluZyBvbiB0aGUgY29uc29sZSBwdHkgdGhlbiBpdCB3aWxsIGZp bGwgdXAKIAkgKiBhbmQgaGFuZGxlX3R0eV93cml0ZSB3aWxsIHN0b3AgYmVpbmcgY2FsbGVkLgog CSAqLwotCWlmIChkb20tPmxvZ19mZCAhPSAtMSkgeworCWlmIChjb24tPmxvZ19mZCAhPSAtMSkg ewogCQlpbnQgbG9ncmV0OwogCQlpZiAobG9nX3RpbWVfZ3Vlc3QpIHsKIAkJCWxvZ3JldCA9IHdy aXRlX3dpdGhfdGltZXN0YW1wKAotCQkJCWRvbS0+bG9nX2ZkLAorCQkJCWNvbi0+bG9nX2ZkLAog CQkJCWJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+c2l6ZSAtIHNpemUsCiAJCQkJc2l6ZSwgJmxvZ190 aW1lX2d1ZXN0X25lZWR0cyk7CiAJCX0gZWxzZSB7CiAJCQlsb2dyZXQgPSB3cml0ZV9hbGwoCi0J CQkJZG9tLT5sb2dfZmQsCisJCQkJY29uLT5sb2dfZmQsCiAJCQkJYnVmZmVyLT5kYXRhICsgYnVm ZmVyLT5zaXplIC0gc2l6ZSwKIAkJCQlzaXplKTsKIAkJfQpAQCAtMjkwLDEyICszNTMsMTMgQEAg c3RhdGljIGludCBjcmVhdGVfaHZfbG9nKHZvaWQpCiAJcmV0dXJuIGZkOwogfQogCi1zdGF0aWMg aW50IGNyZWF0ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4gKmRvbSkKK3N0YXRpYyBpbnQgY3Jl YXRlX2NvbnNvbGVfbG9nKHN0cnVjdCBjb25zb2xlICpjb24pCiB7CiAJY2hhciBsb2dmaWxlW1BB VEhfTUFYXTsKIAljaGFyICpuYW1lcGF0aCwgKmRhdGEsICpzOwogCWludCBmZDsKIAl1bnNpZ25l ZCBpbnQgbGVuOworCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKIAogCW5hbWVwYXRoID0g eHNfZ2V0X2RvbWFpbl9wYXRoKHhzLCBkb20tPmRvbWlkKTsKIAlzID0gcmVhbGxvYyhuYW1lcGF0 aCwgc3RybGVuKG5hbWVwYXRoKSArIDYpOwpAQCAtMzE0LDcgKzM3OCw4IEBAIHN0YXRpYyBpbnQg Y3JlYXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFpbiAqZG9tKQogCQlyZXR1cm4gLTE7CiAJfQog Ci0Jc25wcmludGYobG9nZmlsZSwgUEFUSF9NQVgtMSwgIiVzL2d1ZXN0LSVzLmxvZyIsIGxvZ19k aXIsIGRhdGEpOworCXNucHJpbnRmKGxvZ2ZpbGUsIFBBVEhfTUFYLTEsICIlcy9ndWVzdC0lcy0l cy5sb2ciLAorCQkJIGxvZ19kaXIsIGNvbi0+bmFtZSwgZGF0YSk7CiAJZnJlZShkYXRhKTsKIAls b2dmaWxlW1BBVEhfTUFYLTFdID0gJ1wwJzsKIApAQCAtMzM2LDE5ICs0MDEsMjQgQEAgc3RhdGlj IGludCBjcmVhdGVfZG9tYWluX2xvZyhzdHJ1Y3QgZG9tYWluICpkb20pCiAJcmV0dXJuIGZkOwog fQogCi1zdGF0aWMgdm9pZCBkb21haW5fY2xvc2VfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKK3N0 YXRpYyB2b2lkIGNvbnNvbGVfY2xvc2VfdHR5KHN0cnVjdCBjb25zb2xlICpjb24pCiB7Ci0JaWYg KGRvbS0+bWFzdGVyX2ZkICE9IC0xKSB7Ci0JCWNsb3NlKGRvbS0+bWFzdGVyX2ZkKTsKLQkJZG9t LT5tYXN0ZXJfZmQgPSAtMTsKKwlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEpIHsKKwkJY2xvc2Uo Y29uLT5tYXN0ZXJfZmQpOworCQljb24tPm1hc3Rlcl9mZCA9IC0xOwogCX0KIAotCWlmIChkb20t PnNsYXZlX2ZkICE9IC0xKSB7Ci0JCWNsb3NlKGRvbS0+c2xhdmVfZmQpOwotCQlkb20tPnNsYXZl X2ZkID0gLTE7CisJaWYgKGNvbi0+c2xhdmVfZmQgIT0gLTEpIHsKKwkJY2xvc2UoY29uLT5zbGF2 ZV9mZCk7CisJCWNvbi0+c2xhdmVfZmQgPSAtMTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGRvbWFp bl9jbG9zZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQoreworCWNvbnNvbGVfaXRlcl9ub19jaGVj ayhkb20sIGNvbnNvbGVfY2xvc2VfdHR5KTsKK30KKwogI2lmZGVmIF9fc3VuX18KIHN0YXRpYyBp bnQgb3BlbnB0eShpbnQgKmFtYXN0ZXIsIGludCAqYXNsYXZlLCBjaGFyICpuYW1lLAogCQkgICBz dHJ1Y3QgdGVybWlvcyAqdGVybXAsIHN0cnVjdCB3aW5zaXplICp3aW5wKQpAQCAtNDA5LDcgKzQ3 OSw3IEBAIHZvaWQgY2ZtYWtlcmF3KHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zX3ApCiB9CiAjZW5k aWYgLyogX19zdW5fXyAqLwogCi1zdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVfdHR5KHN0cnVjdCBk b21haW4gKmRvbSkKK3N0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfdHR5KHN0cnVjdCBjb25zb2xl ICpjb24pCiB7CiAJY29uc3QgY2hhciAqc2xhdmU7CiAJY2hhciAqcGF0aDsKQEAgLTQxOCwxOSAr NDg4LDIzIEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9t KQogCWNoYXIgKmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3QgdGVybWlvcyB0ZXJt OworCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKKworCWlmICghY29uc29sZV9lbmFibGVk KGNvbikpCisJCXJldHVybiAxOwogCi0JYXNzZXJ0KGRvbS0+c2xhdmVfZmQgPT0gLTEpOwotCWFz c2VydChkb20tPm1hc3Rlcl9mZCA9PSAtMSk7CisJYXNzZXJ0KGNvbi0+bWFzdGVyX2ZkID09IC0x KTsKKwlhc3NlcnQoY29uLT5zbGF2ZV9mZCA9PSAtMSk7CiAKLQlpZiAob3BlbnB0eSgmZG9tLT5t YXN0ZXJfZmQsICZkb20tPnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSA8IDApIHsKKwlpZiAo b3BlbnB0eSgmY29uLT5tYXN0ZXJfZmQsICZjb24tPnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxM KSA8IDApIHsKIAkJZXJyID0gZXJybm87CiAJCWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY3Jl YXRlIHR0eSBmb3IgZG9tYWluLSVkICIKLQkJICAgICAgIihlcnJubyA9ICVpLCAlcykiLAotCQkg ICAgICBkb20tPmRvbWlkLCBlcnIsIHN0cmVycm9yKGVycikpOwotCQlyZXR1cm4gMDsKKwkJCSAg IihlcnJubyA9ICVpLCAlcykiLAorCQkJICBkb20tPmRvbWlkLCBlcnIsIHN0cmVycm9yKGVycikp OworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGNnZXRhdHRyKGRvbS0+c2xhdmVfZmQsICZ0ZXJt KSA8IDApIHsKKwlpZiAodGNnZXRhdHRyKGNvbi0+c2xhdmVfZmQsICZ0ZXJtKSA8IDApIHsKIAkJ ZXJyID0gZXJybm87CiAJCWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gZ2V0IHR0eSBhdHRyaWJ1 dGVzIGZvciBkb21haW4tJWQgIgogCQkJIihlcnJubyA9ICVpLCAlcykiLApAQCAtNDM4LDcgKzUx Miw3IEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQog CQlnb3RvIG91dDsKIAl9CiAJY2ZtYWtlcmF3KCZ0ZXJtKTsKLQlpZiAodGNzZXRhdHRyKGRvbS0+ c2xhdmVfZmQsIFRDU0FOT1csICZ0ZXJtKSA8IDApIHsKKwlpZiAodGNzZXRhdHRyKGNvbi0+c2xh dmVfZmQsIFRDU0FOT1csICZ0ZXJtKSA8IDApIHsKIAkJZXJyID0gZXJybm87CiAJCWRvbG9nKExP R19FUlIsICJGYWlsZWQgdG8gc2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgogCQkJ IihlcnJubyA9ICVpLCAlcykiLApAQCAtNDQ2LDExICs1MjAsMTEgQEAgc3RhdGljIGludCBkb21h aW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCiAJCWdvdG8gb3V0OwogCX0KIAotCWlm ICgoc2xhdmUgPSBwdHNuYW1lKGRvbS0+bWFzdGVyX2ZkKSkgPT0gTlVMTCkgeworCWlmICgoc2xh dmUgPSBwdHNuYW1lKGNvbi0+bWFzdGVyX2ZkKSkgPT0gTlVMTCkgewogCQllcnIgPSBlcnJubzsK IAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgc2xhdmUgbmFtZSBmb3IgZG9tYWluLSVk ICIKLQkJICAgICAgIihlcnJubyA9ICVpLCAlcykiLAotCQkgICAgICBkb20tPmRvbWlkLCBlcnIs IHN0cmVycm9yKGVycikpOworCQkJICAiKGVycm5vID0gJWksICVzKSIsCisJCQkgIGRvbS0+ZG9t aWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDYwLDI3ICs1 MzQsNDEgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20p CiAJCWdvdG8gb3V0OwogCWRhdGEgPSB4c19yZWFkKHhzLCBYQlRfTlVMTCwgcGF0aCwgJmxlbik7 CiAJaWYgKGRhdGEpIHsKLQkJZG9tLT5idWZmZXIubWF4X2NhcGFjaXR5ID0gc3RydG91bChkYXRh LCAwLCAwKTsKKwkJY29uLT5idWZmZXIubWF4X2NhcGFjaXR5ID0gc3RydG91bChkYXRhLCAwLCAw KTsKIAkJZnJlZShkYXRhKTsKIAl9CiAJZnJlZShwYXRoKTsKIAotCXN1Y2Nlc3MgPSAoYXNwcmlu dGYoJnBhdGgsICIlcy90dHkiLCBkb20tPmNvbnNwYXRoKSAhPSAtMSk7CisJc3VjY2VzcyA9IChh c3ByaW50ZigmcGF0aCwgIiVzLyVzIiwgZG9tLT5jb25zcGF0aCwgY29uLT50dHluYW1lKSAhPSAt MSk7CisKIAlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8gb3V0OwogCXN1Y2Nlc3MgPSB4c193cml0ZSh4 cywgWEJUX05VTEwsIHBhdGgsIHNsYXZlLCBzdHJsZW4oc2xhdmUpKTsKIAlmcmVlKHBhdGgpOwot CWlmICghc3VjY2VzcykKKworCWlmIChmY250bChjb24tPm1hc3Rlcl9mZCwgRl9TRVRGTCwgT19O T05CTE9DSykgPT0gLTEpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGZjbnRsKGRvbS0+bWFzdGVyX2Zk LCBGX1NFVEZMLCBPX05PTkJMT0NLKSA9PSAtMSkKKwlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8gb3V0 OwogCiAJcmV0dXJuIDE7CisKIG91dDoKLQlkb21haW5fY2xvc2VfdHR5KGRvbSk7CiAJcmV0dXJu IDA7CiB9CisKK3N0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9t KQoreworCWludCByZXQ7CisKKwlyZXQgPSBjb25zb2xlX2l0ZXJfZXJyX2NoZWNrKGRvbSwgY29u c29sZV9jcmVhdGVfdHR5KTsKKworCWlmICghcmV0KQorCQlkb21haW5fY2xvc2VfdHR5KGRvbSk7 CisKKwlyZXR1cm4gcmV0OworfQogIAogLyogVGFrZXMgdHVwbGVzIG9mIG5hbWVzLCBzY2FuZi1z dHlsZSBhcmdzLCBhbmQgdm9pZCAqKiwgTlVMTCB0ZXJtaW5hdGVkLiAqLwogc3RhdGljIGludCB4 c19nYXRoZXIoc3RydWN0IHhzX2hhbmRsZSAqeHMsIGNvbnN0IGNoYXIgKmRpciwgLi4uKQpAQCAt NTE3LDIyICs2MDUsNjQgQEAgc3RhdGljIGludCB4c19nYXRoZXIoc3RydWN0IHhzX2hhbmRsZSAq eHMsIGNvbnN0IGNoYXIgKmRpciwgLi4uKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lk IGRvbWFpbl91bm1hcF9pbnRlcmZhY2Uoc3RydWN0IGRvbWFpbiAqZG9tKQorc3RhdGljIHZvaWQg Y29uc29sZV91bm1hcF9pbnRlcmZhY2Uoc3RydWN0IGNvbnNvbGUgKmNvbikKIHsKLQlpZiAoZG9t LT5pbnRlcmZhY2UgPT0gTlVMTCkKKwlpZiAoY29uLT5pbnRlcmZhY2UgPT0gTlVMTCkKIAkJcmV0 dXJuOwotCWlmICh4Z3RfaGFuZGxlICYmIGRvbS0+cmluZ19yZWYgPT0gLTEpCi0JCXhlbmdudHRh Yl91bm1hcCh4Z3RfaGFuZGxlLCBkb20tPmludGVyZmFjZSwgMSk7CisJaWYgKHhndF9oYW5kbGUg JiYgY29uLT5yaW5nX3JlZiA9PSAtMSkKKwkJeGVuZ250dGFiX3VubWFwKHhndF9oYW5kbGUsIGNv bi0+aW50ZXJmYWNlLCAxKTsKIAllbHNlCi0JCW11bm1hcChkb20tPmludGVyZmFjZSwgWENfUEFH RV9TSVpFKTsKLQlkb20tPmludGVyZmFjZSA9IE5VTEw7Ci0JZG9tLT5yaW5nX3JlZiA9IC0xOwor CQltdW5tYXAoY29uLT5pbnRlcmZhY2UsIFhDX1BBR0VfU0laRSk7CisJY29uLT5pbnRlcmZhY2Ug PSBOVUxMOworCWNvbi0+cmluZ19yZWYgPSAtMTsKK30KKworc3RhdGljIHZvaWQgZG9tYWluX3Vu bWFwX2ludGVyZmFjZShzdHJ1Y3QgZG9tYWluICpkb20pCit7CisJY29uc29sZV9pdGVyX25vX2No ZWNrKGRvbSwgY29uc29sZV91bm1hcF9pbnRlcmZhY2UpOworfQorCitzdGF0aWMgaW50IGJpbmRf ZXZlbnRfY2hhbm5lbChzdHJ1Y3QgZG9tYWluICpkb20sCisJCQkJCQkJICBpbnQgbmV3X3Jwb3J0 LAorCQkJCQkJCSAgaW50ICpscG9ydCwKKwkJCQkJCQkgIGludCAqcnBvcnQpCit7CisJaW50IGVy ciA9IDAsIHJjOworCisJLyogR28gbm8gZnVydGhlciBpZiBwb3J0IGhhcyBub3QgY2hhbmdlZCBh bmQgd2UgYXJlIHN0aWxsIGJvdW5kLiAqLworCWlmIChuZXdfcnBvcnQgPT0gKnJwb3J0KSB7CisJ CXhjX2V2dGNobl9zdGF0dXNfdCBzdGF0dXMgPSB7CisJCS5kb20gPSBET01JRF9TRUxGLAorCQku cG9ydCA9ICpscG9ydCB9OworCQlpZiAoKHhjX2V2dGNobl9zdGF0dXMoeGMsICZzdGF0dXMpID09 IDApICYmCisJCQkoc3RhdHVzLnN0YXR1cyA9PSBFVlRDSE5TVEFUX2ludGVyZG9tYWluKSkKKwkJ CWdvdG8gb3V0OworCX0KKworCSpscG9ydCA9IC0xOworCSpycG9ydCA9IC0xOworCXJjID0geGVu ZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZG9tLT54Y2VfaGFuZGxlLAorCQkJCQkJCQkJZG9tLT5k b21pZCwgbmV3X3Jwb3J0KTsKKworCWlmIChyYyA9PSAtMSkgeworCQllcnIgPSBlcnJubzsKKwkJ eGVuZXZ0Y2huX2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7CisJCWRvbS0+eGNlX2hhbmRsZSA9IE5V TEw7CisJCWdvdG8gb3V0OworCX0KKworCSpscG9ydCA9IHJjOworCSpycG9ydCA9IG5ld19ycG9y dDsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogIAogc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jp bmcoc3RydWN0IGRvbWFpbiAqZG9tKQogewotCWludCBlcnIsIHJlbW90ZV9wb3J0LCByaW5nX3Jl ZiwgcmM7CisJaW50IGVyciwgcmVtb3RlX3BvcnQsIHJpbmdfcmVmLCB2dWFydF9yZW1vdGVfcG9y dCwgdnVhcnRfcmluZ19yZWY7CiAJY2hhciAqdHlwZSwgcGF0aFtQQVRIX01BWF07CisJc3RydWN0 IGNvbnNvbGUgKnB2X2NvbiA9ICZkb20tPmNvbnNvbGVbQ09OU09MRV9UWVBFX1BWXTsKKwlzdHJ1 Y3QgY29uc29sZSAqdnVhcnRfY29uID0gJmRvbS0+Y29uc29sZVtDT05TT0xFX1RZUEVfVlVBUlRd OwogCiAJZXJyID0geHNfZ2F0aGVyKHhzLCBkb20tPmNvbnNwYXRoLAogCQkJInJpbmctcmVmIiwg IiV1IiwgJnJpbmdfcmVmLApAQCAtNTQxLDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IGRvbWFpbl9j cmVhdGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAK KwkvKiB2dWFydCBpcyBvcHRpb25hbC4gKi8KKwllcnIgPSB4c19nYXRoZXIoeHMsIGRvbS0+Y29u c3BhdGgsCisJCQkJCSJ2dWFydC8wL3JpbmctcmVmIiwgIiV1IiwgJnZ1YXJ0X3JpbmdfcmVmLAor CQkJCQkidnVhcnQvMC9wb3J0IiwgIiVpIiwgJnZ1YXJ0X3JlbW90ZV9wb3J0LAorCQkJCQlOVUxM KTsKKwlpZiAoZXJyKQorCXsKKwkJdnVhcnRfcmVtb3RlX3BvcnQgPSAtMTsKKwkJdnVhcnRfcmlu Z19yZWYgPSAtMTsKKwl9CisKIAlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBl IiwgZG9tLT5jb25zcGF0aCk7CiAJdHlwZSA9IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCBO VUxMKTsKIAlpZiAodHlwZSAmJiBzdHJjbXAodHlwZSwgInhlbmNvbnNvbGVkIikgIT0gMCkgewpA QCAtNTUwLDQxICs2OTEsNTAgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0 IGRvbWFpbiAqZG9tKQogCWZyZWUodHlwZSk7CiAKIAkvKiBJZiB1c2luZyByaW5nX3JlZiBhbmQg aXQgaGFzIGNoYW5nZWQsIHJlbWFwICovCi0JaWYgKHJpbmdfcmVmICE9IGRvbS0+cmluZ19yZWYg JiYgZG9tLT5yaW5nX3JlZiAhPSAtMSkKLQkJZG9tYWluX3VubWFwX2ludGVyZmFjZShkb20pOwor CWlmIChyaW5nX3JlZiAhPSBwdl9jb24tPnJpbmdfcmVmICYmIHB2X2Nvbi0+cmluZ19yZWYgIT0g LTEpCisJCWNvbnNvbGVfdW5tYXBfaW50ZXJmYWNlKHB2X2Nvbik7CiAKLQlpZiAoIWRvbS0+aW50 ZXJmYWNlICYmIHhndF9oYW5kbGUpIHsKKwkvKiBJZiB1c2luZyB2dWFydCByaW5nX3JlZiBhbmQg aXQgaGFzIGNoYW5nZWQsIHJlbWFwICovCisJaWYgKHZ1YXJ0X3JpbmdfcmVmICE9IHZ1YXJ0X2Nv bi0+cmluZ19yZWYgJiYKKwkJdnVhcnRfY29uLT5yaW5nX3JlZiAhPSAtMSApCisJCWNvbnNvbGVf dW5tYXBfaW50ZXJmYWNlKHZ1YXJ0X2Nvbik7CisKKwlpZiAoIXB2X2Nvbi0+aW50ZXJmYWNlICYm IHhndF9oYW5kbGUpIHsKIAkJLyogUHJlZmVyIHVzaW5nIGdyYW50IHRhYmxlICovCi0JCWRvbS0+ aW50ZXJmYWNlID0geGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKLQkJCWRvbS0+ ZG9taWQsIEdOVFRBQl9SRVNFUlZFRF9DT05TT0xFLAotCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUp OwotCQlkb20tPnJpbmdfcmVmID0gLTE7CisJCXB2X2Nvbi0+aW50ZXJmYWNlID0geGVuZ250dGFi X21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKKwkJCQkJCQkJCQkJCQlkb20tPmRvbWlkLCBHTlRU QUJfUkVTRVJWRURfQ09OU09MRSwKKwkJCQkJCQkJCQkJCQlQUk9UX1JFQUR8UFJPVF9XUklURSk7 CisJCXB2X2Nvbi0+cmluZ19yZWYgPSAtMTsKIAl9Ci0JaWYgKCFkb20tPmludGVyZmFjZSkgewor CWlmICghcHZfY29uLT5pbnRlcmZhY2UpIHsKIAkJLyogRmFsbCBiYWNrIHRvIHhjX21hcF9mb3Jl aWduX3JhbmdlICovCi0JCWRvbS0+aW50ZXJmYWNlID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCisJ CXB2X2Nvbi0+aW50ZXJmYWNlID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCiAJCQl4YywgZG9tLT5k b21pZCwgWENfUEFHRV9TSVpFLAogCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUsCiAJCQkodW5zaWdu ZWQgbG9uZylyaW5nX3JlZik7Ci0JCWlmIChkb20tPmludGVyZmFjZSA9PSBOVUxMKSB7CisJCWlm IChwdl9jb24tPmludGVyZmFjZSA9PSBOVUxMKSB7CiAJCQllcnIgPSBFSU5WQUw7CiAJCQlnb3Rv IG91dDsKIAkJfQotCQlkb20tPnJpbmdfcmVmID0gcmluZ19yZWY7CisJCXB2X2Nvbi0+cmluZ19y ZWYgPSByaW5nX3JlZjsKIAl9CiAKLQkvKiBHbyBubyBmdXJ0aGVyIGlmIHBvcnQgaGFzIG5vdCBj aGFuZ2VkIGFuZCB3ZSBhcmUgc3RpbGwgYm91bmQuICovCi0JaWYgKHJlbW90ZV9wb3J0ID09IGRv bS0+cmVtb3RlX3BvcnQpIHsKLQkJeGNfZXZ0Y2huX3N0YXR1c190IHN0YXR1cyA9IHsKLQkJCS5k b20gPSBET01JRF9TRUxGLAotCQkJLnBvcnQgPSBkb20tPmxvY2FsX3BvcnQgfTsKLQkJaWYgKCh4 Y19ldnRjaG5fc3RhdHVzKHhjLCAmc3RhdHVzKSA9PSAwKSAmJgotCQkgICAgKHN0YXR1cy5zdGF0 dXMgPT0gRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbikpCi0JCQlnb3RvIG91dDsKKwkvKiBNYXAgdnVh cnQgY29uc29sZSByaW5nIGJ1ZmZlci4gKi8KKwlpZiAoKHZ1YXJ0X3JlbW90ZV9wb3J0ICE9IC0x KSAmJiAhdnVhcnRfY29uLT5pbnRlcmZhY2UpIHsKKworCQl2dWFydF9jb24tPmludGVyZmFjZSA9 IHhjX21hcF9mb3JlaWduX3JhbmdlKHhjLAorCQkJCQkJCQkJCQkJCWRvbS0+ZG9taWQsCisJCQkJ CQkJCQkJCQkJWENfUEFHRV9TSVpFLAorCQkJCQkJCQkJCQkJCVBST1RfUkVBRHxQUk9UX1dSSVRF LAorCQkJCQkJCQkJCQkJCSh1bnNpZ25lZCBsb25nKXZ1YXJ0X3JpbmdfcmVmKTsKKworCQlpZiAo dnVhcnRfY29uLT5pbnRlcmZhY2UgPT0gTlVMTCkgeworCQkJZXJyID0gRUlOVkFMOworCQkJZ290 byBvdXQxOworCQl9CisJCXZ1YXJ0X2Nvbi0+cmluZ19yZWYgPSB2dWFydF9yaW5nX3JlZjsKIAl9 CiAKLQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKLQlkb20tPnJlbW90ZV9wb3J0ID0gLTE7CiAJaWYg KGRvbS0+eGNlX2hhbmRsZSAhPSBOVUxMKQogCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFu ZGxlKTsKIApAQCAtNTkzLDM1ICs3NDMsNTUgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jp bmcoc3RydWN0IGRvbWFpbiAqZG9tKQogCWRvbS0+eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVu KE5VTEwsIDApOwogCWlmIChkb20tPnhjZV9oYW5kbGUgPT0gTlVMTCkgewogCQllcnIgPSBlcnJu bzsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0MjsKIAl9CiAgCi0JcmMgPSB4ZW5ldnRjaG5fYmlu ZF9pbnRlcmRvbWFpbihkb20tPnhjZV9oYW5kbGUsCi0JCWRvbS0+ZG9taWQsIHJlbW90ZV9wb3J0 KTsKLQotCWlmIChyYyA9PSAtMSkgewotCQllcnIgPSBlcnJubzsKKwllcnIgPSBiaW5kX2V2ZW50 X2NoYW5uZWwoZG9tLCByZW1vdGVfcG9ydCwKKwkJCQkJCQkgJnB2X2Nvbi0+bG9jYWxfcG9ydCwK KwkJCQkJCQkgJnB2X2Nvbi0+cmVtb3RlX3BvcnQpOworCWlmIChlcnIpCisJewogCQl4ZW5ldnRj aG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsKLQkJZG9tLT54Y2VfaGFuZGxlID0gTlVMTDsKLQkJ Z290byBvdXQ7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAodnVhcnRfcmVtb3RlX3BvcnQgIT0g LTEpCisJeworCQllcnIgPSBiaW5kX2V2ZW50X2NoYW5uZWwoZG9tLCB2dWFydF9yZW1vdGVfcG9y dCwKKwkJCQkJCQkJICZ2dWFydF9jb24tPmxvY2FsX3BvcnQsCisJCQkJCQkJCSAmdnVhcnRfY29u LT5yZW1vdGVfcG9ydCk7CisJCWlmIChlcnIpCisJCXsKKwkJCXhlbmV2dGNobl9jbG9zZShkb20t PnhjZV9oYW5kbGUpOworCQkJZ290byBvdXQyOworCQl9CiAJfQotCWRvbS0+bG9jYWxfcG9ydCA9 IHJjOwotCWRvbS0+cmVtb3RlX3BvcnQgPSByZW1vdGVfcG9ydDsKIAotCWlmIChkb20tPm1hc3Rl cl9mZCA9PSAtMSkgeworCWlmIChwdl9jb24tPm1hc3Rlcl9mZCA9PSAtMSkgewogCQlpZiAoIWRv bWFpbl9jcmVhdGVfdHR5KGRvbSkpIHsKIAkJCWVyciA9IGVycm5vOwogCQkJeGVuZXZ0Y2huX2Ns b3NlKGRvbS0+eGNlX2hhbmRsZSk7CiAJCQlkb20tPnhjZV9oYW5kbGUgPSBOVUxMOwotCQkJZG9t LT5sb2NhbF9wb3J0ID0gLTE7Ci0JCQlkb20tPnJlbW90ZV9wb3J0ID0gLTE7Ci0JCQlnb3RvIG91 dDsKKwkJCXB2X2Nvbi0+bG9jYWxfcG9ydCA9IC0xOworCQkJcHZfY29uLT5yZW1vdGVfcG9ydCA9 IC0xOworCQkJdnVhcnRfY29uLT5sb2NhbF9wb3J0ID0gLTE7CisJCQl2dWFydF9jb24tPnJlbW90 ZV9wb3J0ID0gLTE7CisJCQlnb3RvIG91dDI7CiAJCX0KIAl9CiAKLQlpZiAobG9nX2d1ZXN0ICYm IChkb20tPmxvZ19mZCA9PSAtMSkpCi0JCWRvbS0+bG9nX2ZkID0gY3JlYXRlX2RvbWFpbl9sb2co ZG9tKTsKKwlpZiAobG9nX2d1ZXN0ICYmIChwdl9jb24tPmxvZ19mZCA9PSAtMSkpCisJCXB2X2Nv bi0+bG9nX2ZkID0gY3JlYXRlX2NvbnNvbGVfbG9nKHB2X2Nvbik7CisKKwlpZiAobG9nX2d1ZXN0 ICYmICh2dWFydF9yZW1vdGVfcG9ydCAhPSAtMSkgJiYgKHZ1YXJ0X2Nvbi0+bG9nX2ZkID09IC0x KSkKKwkJdnVhcnRfY29uLT5sb2dfZmQgPSBjcmVhdGVfY29uc29sZV9sb2codnVhcnRfY29uKTsK IAorCXJldHVybiBlcnI7CisKKyBvdXQyOgorCWNvbnNvbGVfdW5tYXBfaW50ZXJmYWNlKHZ1YXJ0 X2Nvbik7Cisgb3V0MToKKwljb25zb2xlX3VubWFwX2ludGVyZmFjZShwdl9jb24pOwogIG91dDoK IAlyZXR1cm4gZXJyOwogfQpAQCAtNjQ1LDYgKzgxNSwxOSBAQCBzdGF0aWMgYm9vbCB3YXRjaF9k b21haW4oc3RydWN0IGRvbWFpbiAqZG9tLCBib29sIHdhdGNoKQogCXJldHVybiBzdWNjZXNzOwog fQogCitzdGF0aWMgdm9pZCBjb25zb2xlX2luaXQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGNv bnNvbGUgKmNvbiwgY2hhciAqbmFtZSwgY2hhciAqdHR5bmFtZSkKK3sKKwljb24tPm1hc3Rlcl9m ZCA9IC0xOworCWNvbi0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKKwljb24tPnNsYXZlX2ZkID0g LTE7CisJY29uLT5sb2dfZmQgPSAtMTsKKwljb24tPnJpbmdfcmVmID0gLTE7CisJY29uLT5sb2Nh bF9wb3J0ID0gLTE7CisJY29uLT5yZW1vdGVfcG9ydCA9IC0xOworCWNvbi0+bmFtZSA9IG5hbWU7 CisJY29uLT50dHluYW1lID0gdHR5bmFtZTsKKwljb24tPmQgPSBkOworfQogCiBzdGF0aWMgc3Ry dWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiB7CkBAIC02NzUsMTggKzg1OCwx MyBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiAJZG9t LT5jb25zcGF0aCA9IHM7CiAJc3RyY2F0KGRvbS0+Y29uc3BhdGgsICIvY29uc29sZSIpOwogCi0J ZG9tLT5tYXN0ZXJfZmQgPSAtMTsKLQlkb20tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Ci0JZG9t LT5zbGF2ZV9mZCA9IC0xOwotCWRvbS0+bG9nX2ZkID0gLTE7CisJY29uc29sZV9pbml0KGRvbSwg JmRvbS0+Y29uc29sZVtDT05TT0xFX1RZUEVfUFZdLCAicHYiLCAidHR5Iik7CisJY29uc29sZV9p bml0KGRvbSwgJmRvbS0+Y29uc29sZVtDT05TT0xFX1RZUEVfVlVBUlRdLCAidnVhcnQiLCAidnR0 eSIpOworCiAJZG9tLT54Y2VfcG9sbGZkX2lkeCA9IC0xOwogCiAJZG9tLT5uZXh0X3BlcmlvZCA9 ICgobG9uZyBsb25nKXRzLnR2X3NlYyAqIDEwMDApICsgKHRzLnR2X25zZWMgLyAxMDAwMDAwKSAr IFJBVEVfTElNSVRfUEVSSU9EOwogCi0JZG9tLT5yaW5nX3JlZiA9IC0xOwotCWRvbS0+bG9jYWxf cG9ydCA9IC0xOwotCWRvbS0+cmVtb3RlX3BvcnQgPSAtMTsKLQogCWlmICghd2F0Y2hfZG9tYWlu KGRvbSwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCkBAIC03MjcsMTcgKzkwNSwyMiBAQCBzdGF0aWMg dm9pZCByZW1vdmVfZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSkKIAl9CiB9CiAKKworc3RhdGlj IHZvaWQgY29uc29sZV9jbGVhbnVwKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+ bG9nX2ZkICE9IC0xKSB7CisJCWNsb3NlKGNvbi0+bG9nX2ZkKTsKKwkJY29uLT5sb2dfZmQgPSAt MTsKKwl9CisJZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKKwljb24tPmJ1ZmZlci5kYXRhID0gTlVM TDsKK30KKwogc3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKIHsK IAlkb21haW5fY2xvc2VfdHR5KGQpOwogCi0JaWYgKGQtPmxvZ19mZCAhPSAtMSkgewotCQljbG9z ZShkLT5sb2dfZmQpOwotCQlkLT5sb2dfZmQgPSAtMTsKLQl9Ci0KLQlmcmVlKGQtPmJ1ZmZlci5k YXRhKTsKLQlkLT5idWZmZXIuZGF0YSA9IE5VTEw7CisJY29uc29sZV9pdGVyX25vX2NoZWNrKGQs IGNvbnNvbGVfY2xlYW51cCk7CiAKIAlmcmVlKGQtPmNvbnNwYXRoKTsKIAlkLT5jb25zcGF0aCA9 IE5VTEw7CkBAIC03NDksNyArOTMyLDkgQEAgc3RhdGljIHZvaWQgc2h1dGRvd25fZG9tYWluKHN0 cnVjdCBkb21haW4gKmQpCiB7CiAJZC0+aXNfZGVhZCA9IHRydWU7CiAJd2F0Y2hfZG9tYWluKGQs IGZhbHNlKTsKKwogCWRvbWFpbl91bm1hcF9pbnRlcmZhY2UoZCk7CisKIAlpZiAoZC0+eGNlX2hh bmRsZSAhPSBOVUxMKQogCQl4ZW5ldnRjaG5fY2xvc2UoZC0+eGNlX2hhbmRsZSk7CiAJZC0+eGNl X2hhbmRsZSA9IE5VTEw7CkBAIC03ODAsOSArOTY1LDkgQEAgc3RhdGljIHZvaWQgZW51bV9kb21h aW5zKHZvaWQpCiAJfQogfQogCi1zdGF0aWMgaW50IHJpbmdfZnJlZV9ieXRlcyhzdHJ1Y3QgZG9t YWluICpkb20pCitzdGF0aWMgaW50IHJpbmdfZnJlZV9ieXRlcyhzdHJ1Y3QgY29uc29sZSAqY29u KQogewotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOwor CXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOwogCVhFTkNP TlNfUklOR19JRFggY29ucywgcHJvZCwgc3BhY2U7CiAKIAljb25zID0gaW50Zi0+aW5fY29uczsK QEAgLTgwNywyNSArOTkyLDI3IEBAIHN0YXRpYyB2b2lkIGRvbWFpbl9oYW5kbGVfYnJva2VuX3R0 eShzdHJ1Y3QgZG9tYWluICpkb20sIGludCByZWNyZWF0ZSkKIAl9CiB9CiAKLXN0YXRpYyB2b2lk IGhhbmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgdm9pZCBoYW5kbGVf dHR5X3JlYWQoc3RydWN0IGNvbnNvbGUgKmNvbikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJY2hh ciBtc2dbODBdOwogCWludCBpOwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRv bS0+aW50ZXJmYWNlOwogCVhFTkNPTlNfUklOR19JRFggcHJvZDsKKwlzdHJ1Y3QgeGVuY29uc19p bnRlcmZhY2UgKmludGYgPSBjb24tPmludGVyZmFjZTsKKwl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJv cl90IHBvcnQgPSBjb24tPmxvY2FsX3BvcnQ7CisJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5k OwogCiAJaWYgKGRvbS0+aXNfZGVhZCkKIAkJcmV0dXJuOwogCi0JbGVuID0gcmluZ19mcmVlX2J5 dGVzKGRvbSk7CisJbGVuID0gcmluZ19mcmVlX2J5dGVzKGNvbik7CiAJaWYgKGxlbiA9PSAwKQog CQlyZXR1cm47CiAKIAlpZiAobGVuID4gc2l6ZW9mKG1zZykpCiAJCWxlbiA9IHNpemVvZihtc2cp OwogCi0JbGVuID0gcmVhZChkb20tPm1hc3Rlcl9mZCwgbXNnLCBsZW4pOworCWxlbiA9IHJlYWQo Y29uLT5tYXN0ZXJfZmQsIG1zZywgbGVuKTsKIAkvKgogCSAqIE5vdGU6IG9uIFNvbGFyaXMsIGxl biA9PSAwIG1lYW5zIHRoZSBzbGF2ZSBjbG9zZWQsIGFuZCB0aGlzCiAJICogaXMgbm8gcHJvYmxl bSwgYnV0IExpbnV4IGNhbid0IGhhbmRsZSB0aGlzIHVzZWZ1bGx5LCBzbyB3ZQpAQCAtODQxLDM0 ICsxMDI4LDQ0IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9tYWluICpk b20pCiAJCX0KIAkJeGVuX3dtYigpOwogCQlpbnRmLT5pbl9wcm9kID0gcHJvZDsKLQkJeGVuZXZ0 Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7CisJCXhlbmV2dGNo bl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKIAl9IGVsc2UgewogCQlkb21haW5fY2xv c2VfdHR5KGRvbSk7CiAJCXNodXRkb3duX2RvbWFpbihkb20pOwogCX0KIH0KIAotc3RhdGljIHZv aWQgaGFuZGxlX3R0eV93cml0ZShzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgdm9pZCBoYW5k bGVfdHR5X3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24pCiB7CiAJc3NpemVfdCBsZW47CisJc3Ry dWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOwogCiAJaWYgKGRvbS0+aXNfZGVhZCkKIAkJcmV0dXJu OwogCi0JbGVuID0gd3JpdGUoZG9tLT5tYXN0ZXJfZmQsIGRvbS0+YnVmZmVyLmRhdGEgKyBkb20t PmJ1ZmZlci5jb25zdW1lZCwKLQkJICAgIGRvbS0+YnVmZmVyLnNpemUgLSBkb20tPmJ1ZmZlci5j b25zdW1lZCk7CisJbGVuID0gd3JpdGUoY29uLT5tYXN0ZXJfZmQsCisJCQkJY29uLT5idWZmZXIu ZGF0YSArIGNvbi0+YnVmZmVyLmNvbnN1bWVkLAorCQkJCWNvbi0+YnVmZmVyLnNpemUgLSBjb24t PmJ1ZmZlci5jb25zdW1lZCk7CiAgCWlmIChsZW4gPCAxKSB7CiAJCWRvbG9nKExPR19ERUJVRywg IldyaXRlIGZhaWxlZCBvbiBkb21haW4gJWQ6ICV6ZCwgJWRcbiIsCiAJCSAgICAgIGRvbS0+ZG9t aWQsIGxlbiwgZXJybm8pOwogCQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoZG9tLCBkb21haW5f aXNfdmFsaWQoZG9tLT5kb21pZCkpOwogCX0gZWxzZSB7Ci0JCWJ1ZmZlcl9hZHZhbmNlKCZkb20t PmJ1ZmZlciwgbGVuKTsKKwkJYnVmZmVyX2FkdmFuY2UoJmNvbi0+YnVmZmVyLCBsZW4pOwogCX0K IH0KIAorc3RhdGljIHZvaWQgY29uc29sZV9ldmVudF91bm1hc2soc3RydWN0IGNvbnNvbGUgKmNv bikKK3sKKwlpZiAoY29uLT5sb2NhbF9wb3J0ICE9IC0xKQorCQkodm9pZCl4ZW5ldnRjaG5fdW5t YXNrKGNvbi0+ZC0+eGNlX2hhbmRsZSwgY29uLT5sb2NhbF9wb3J0KTsKK30KKwogc3RhdGljIHZv aWQgaGFuZGxlX3JpbmdfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCiB7CiAJeGVuZXZ0Y2huX3Bv cnRfb3JfZXJyb3JfdCBwb3J0OworCXN0cnVjdCBjb25zb2xlICpwdl9jb24gPSAmZG9tLT5jb25z b2xlW0NPTlNPTEVfVFlQRV9QVl07CisJc3RydWN0IGNvbnNvbGUgKnZ1YXJ0X2NvbiA9ICZkb20t PmNvbnNvbGVbQ09OU09MRV9UWVBFX1ZVQVJUXTsKIAogCWlmIChkb20tPmlzX2RlYWQpCiAJCXJl dHVybjsKQEAgLTg3OCwxMCArMTA3NSwxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFk KHN0cnVjdCBkb21haW4gKmRvbSkKIAogCWRvbS0+ZXZlbnRfY291bnQrKzsKIAotCWJ1ZmZlcl9h cHBlbmQoZG9tKTsKKwlpZiAocG9ydCA9PSB2dWFydF9jb24tPmxvY2FsX3BvcnQpCisJCWJ1ZmZl cl9hcHBlbmQodnVhcnRfY29uKTsKKwllbHNlCisJCWJ1ZmZlcl9hcHBlbmQocHZfY29uKTsKIAog CWlmIChkb20tPmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0UpCi0JCSh2b2lkKXhl bmV2dGNobl91bm1hc2soZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKKwkJY29uc29sZV9pdGVyX25v X2NoZWNrKGRvbSwgY29uc29sZV9ldmVudF91bm1hc2spOwogfQogCiBzdGF0aWMgdm9pZCBoYW5k bGVfeHModm9pZCkKQEAgLTk0MywxNCArMTE0MywyMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfaHZf bG9ncyh4ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlLCBib29sIGZvcmNlKQogCQkodm9pZCl4 ZW5ldnRjaG5fdW5tYXNrKHhjZV9oYW5kbGUsIHBvcnQpOwogfQogCitzdGF0aWMgdm9pZCBjb25z b2xlX29wZW5fbG9nKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbnNvbGVfZW5hYmxl ZChjb24pKQorCXsKKwkJaWYgKGNvbi0+bG9nX2ZkICE9IC0xKQorCQkJY2xvc2UoY29uLT5sb2df ZmQpOworCQljb24tPmxvZ19mZCA9IGNyZWF0ZV9jb25zb2xlX2xvZyhjb24pOworCX0KK30KKwog c3RhdGljIHZvaWQgaGFuZGxlX2xvZ19yZWxvYWQodm9pZCkKIHsKIAlpZiAobG9nX2d1ZXN0KSB7 CiAJCXN0cnVjdCBkb21haW4gKmQ7CiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+bmV4 dCkgewotCQkJaWYgKGQtPmxvZ19mZCAhPSAtMSkKLQkJCQljbG9zZShkLT5sb2dfZmQpOwotCQkJ ZC0+bG9nX2ZkID0gY3JlYXRlX2RvbWFpbl9sb2coZCk7CisJCQljb25zb2xlX2l0ZXJfbm9fY2hl Y2soZCwgY29uc29sZV9vcGVuX2xvZyk7CiAJCX0KIAl9CiAKQEAgLTEwMDIsNiArMTIxMCw0MCBA QCBzdGF0aWMgdm9pZCByZXNldF9mZHModm9pZCkKIAkJbWVtc2V0KGZkcywgMCwgc2l6ZW9mKHN0 cnVjdCBwb2xsZmQpICogY3VycmVudF9hcnJheV9zaXplKTsKIH0KIAorc3RhdGljIHZvaWQgYWRk X2NvbnNvbGVfZmQoc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAoY29uLT5tYXN0ZXJfZmQg IT0gLTEpIHsKKwkJc2hvcnQgZXZlbnRzID0gMDsKKwkJaWYgKCFjb24tPmQtPmlzX2RlYWQgJiYg cmluZ19mcmVlX2J5dGVzKGNvbikpCisJCQlldmVudHMgfD0gUE9MTElOOworCisJCWlmICghYnVm ZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikpCisJCQlldmVudHMgfD0gUE9MTE9VVDsKKworCQlpZiAo ZXZlbnRzKQorCQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9CisJCQkJc2V0X2Zkcyhjb24tPm1h c3Rlcl9mZCwgZXZlbnRzfFBPTExQUkkpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19j b25zb2xlKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+bWFzdGVyX2ZkICE9IC0x ICYmIGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKKwkJaWYgKGZkc1tjb24tPm1hc3Rl cl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCX4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkpCisJ CQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoY29uLT5kLCBkb21haW5faXNfdmFsaWQoY29uLT5k LT5kb21pZCkpOworCQllbHNlIHsKKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0u cmV2ZW50cyAmCisJCQkJUE9MTElOKQorCQkJCWhhbmRsZV90dHlfcmVhZChjb24pOworCQkJaWYg KGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCQlQT0xMT1VUKQorCQkJ CWhhbmRsZV90dHlfd3JpdGUoY29uKTsKKwkJfQorCX0KKwljb24tPm1hc3Rlcl9wb2xsZmRfaWR4 ID0gLTE7Cit9CisKIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTEwNjgs NyArMTMxMCw3IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiAJCQlpZiAoKG5vdys1KSA+IGQtPm5l eHRfcGVyaW9kKSB7CiAJCQkJZC0+bmV4dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklP RDsKIAkJCQlpZiAoZC0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKLQkJ CQkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhkLT54Y2VfaGFuZGxlLCBkLT5sb2NhbF9wb3J0KTsK KwkJCQkJY29uc29sZV9pdGVyX25vX2NoZWNrKGQsIGNvbnNvbGVfZXZlbnRfdW5tYXNrKTsKIAkJ CQl9CiAJCQkJZC0+ZXZlbnRfY291bnQgPSAwOwogCQkJfQpAQCAtMTA4MSwyOCArMTMyMywxNSBA QCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCQkJCSAgICBkLT5uZXh0X3BlcmlvZCA8IG5leHRfdGlt ZW91dCkKIAkJCQkJbmV4dF90aW1lb3V0ID0gZC0+bmV4dF9wZXJpb2Q7CiAJCQl9IGVsc2UgaWYg KGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkgewotCQkJCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0 YSB8fAotCQkJCSAgICAhZC0+YnVmZmVyLm1heF9jYXBhY2l0eSB8fAotCQkJCSAgICBkLT5idWZm ZXIuc2l6ZSA8IGQtPmJ1ZmZlci5tYXhfY2FwYWNpdHkpIHsKKwkJCQlpZiAoY29uc29sZV9pdGVy X2Jvb2xfY2hlY2soZCwgYnVmZmVyX2F2YWlsYWJsZSkpCisJCQkJewogCQkJCQlpbnQgZXZ0Y2hu X2ZkID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwogCQkJCQlkLT54Y2VfcG9sbGZkX2lk eCA9IHNldF9mZHMoZXZ0Y2huX2ZkLAotCQkJCQkJCQkgICAgUE9MTElOfFBPTExQUkkpOworCQkJ CQkJCQkJCQkJUE9MTElOfFBPTExQUkkpOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGQtPm1hc3Rl cl9mZCAhPSAtMSkgewotCQkJCXNob3J0IGV2ZW50cyA9IDA7Ci0JCQkJaWYgKCFkLT5pc19kZWFk ICYmIHJpbmdfZnJlZV9ieXRlcyhkKSkKLQkJCQkJZXZlbnRzIHw9IFBPTExJTjsKLQotCQkJCWlm ICghYnVmZmVyX2VtcHR5KCZkLT5idWZmZXIpKQotCQkJCQlldmVudHMgfD0gUE9MTE9VVDsKLQot CQkJCWlmIChldmVudHMpCi0JCQkJCWQtPm1hc3Rlcl9wb2xsZmRfaWR4ID0KLQkJCQkJCXNldF9m ZHMoZC0+bWFzdGVyX2ZkLAotCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKLQkJCX0KKwkJCWNvbnNv bGVfaXRlcl9ub19jaGVjayhkLCBhZGRfY29uc29sZV9mZCk7CiAJCX0KIAogCQkvKiBJZiBhbnkg ZG9tYWluIGhhcyBiZWVuIHJhdGUgbGltaXRlZCwgd2UgbmVlZCB0byB3b3JrCkBAIC0xMTcwLDIy ICsxMzk5LDkgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJCQkgICAgaGFuZGxlX3JpbmdfcmVh ZChkKTsKIAkJCX0KIAotCQkJaWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSAmJiBkLT5tYXN0ZXJfcG9s bGZkX2lkeCAhPSAtMSkgewotCQkJCWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVu dHMgJgotCQkJCSAgICB+KFBPTExJTnxQT0xMT1VUfFBPTExQUkkpKQotCQkJCQlkb21haW5faGFu ZGxlX2Jyb2tlbl90dHkoZCwKLQkJCQkJCSAgIGRvbWFpbl9pc192YWxpZChkLT5kb21pZCkpOwot CQkJCWVsc2UgewotCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYK LQkJCQkJICAgIFBPTExJTikKLQkJCQkJCWhhbmRsZV90dHlfcmVhZChkKTsKLQkJCQkJaWYgKGZk c1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCi0JCQkJCSAgICBQT0xMT1VUKQotCQkJ CQkJaGFuZGxlX3R0eV93cml0ZShkKTsKLQkJCQl9Ci0JCQl9CisJCQljb25zb2xlX2l0ZXJfbm9f Y2hlY2soZCwgcHJvY2Vzc19jb25zb2xlKTsKIAotCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBkLT5t YXN0ZXJfcG9sbGZkX2lkeCA9IC0xOworCQkJZC0+eGNlX3BvbGxmZF9pZHggPSAtMTsKIAogCQkJ aWYgKGQtPmxhc3Rfc2VlbiAhPSBlbnVtX3Bhc3MpCiAJCQkJc2h1dGRvd25fZG9tYWluKGQpOwot LSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK