From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 08/10] xen/arm: vpl011: Modify the APIs in xenconsole to acces both PV and VCON consoles Date: Mon, 3 Apr 2017 15:14:31 +0530 Message-ID: <1491212673-13476-9-git-send-email-bhupinder.thakur@linaro.org> References: <1491212673-13476-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 1cuyYI-0001nV-Fh for xen-devel@lists.xenproject.org; Mon, 03 Apr 2017 09:45:34 +0000 Received: by mail-pg0-f41.google.com with SMTP id g2so113988235pge.3 for ; Mon, 03 Apr 2017 02:45:32 -0700 (PDT) In-Reply-To: <1491212673-13476-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: Wei Liu , Julien Grall , Stefano Stabellini , Ian Jackson List-Id: xen-devel@lists.xenproject.org WGVuY29uc29sZSBzdXBwb3J0cyBvbmx5IFBWIGNvbnNvbGUgY3VycmVudGx5LiBUbyBnZXQgYWNj ZXNzIHRvIGVtdWxhdGVkIHBsMDExCnVhcnQgYW5vdGhlciBiYWNrZW5kIGNvbnNvbGUgaXMgcmVx dWlyZWQuCgpUaGlzIHBhdGNoIG1vZGlmaWVzIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgYW5k IEFQSXMgdXNlZAppbiB4ZW5jb25zb2xlIHRvIHN1cHBvcnQgdHdvIGNvbnNvbGUgdHlwZXM6IFBW IGFuZCBWQ09OICh2aXJ0dWFsIGNvbnNvbGUpLgoKQ2hhbmdlIHN1bW1hcnk6CgoxLiBNb2RpZnkg dGhlIGRvbWFpbiBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCB0d28gY29uc29sZSB0eXBlczogUFYgYW5k IGEKICAgdmlydHVhbCBjb25zb2xlIChWQ09OKS4KCjIuIE1vZGlmeSBkaWZmZXJlbnQgQVBJcyBz dWNoIGFzIGJ1ZmZlcl9hcHBlbmQoKSB0byB0YWtlIGEgbmV3IHBhcmFtZXRlcgogICBjb25zb2xl X3R5cGUgYXMgaW5wdXQgYW5kIG9wZXJhdGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBpbmRleGVk IGJ5CiAgIHRoZSBjb25zb2xlX3R5cGUuCgozLiBNb2RmaWNhdGlvbnMgaW4gZG9tYWluX2NyZWF0 ZV9yaW5nKCk6CiAgICAtIEJpbmQgdG8gdGhlIHZwbDAxMSBldmVudCBjaGFubmVsIG9idGFpbmVk IGZyb20gdGhlIHhlbiBzdG9yZSBhcyBhCiAgICAgIG5ldwogICAgICBwYXJhbWV0ZXIKICAgIC0g TWFwIHRoZSBQRk4gdG8gaXRzIGFkZHJlc3Mgc3BhY2UgdG8gYmUgdXNlZCBhcyBJTi9PVVQgcmlu ZwogICAgICBidWZmZXJzLgogICAgICBJdCBvYnRhaW5zIHRoZSBQRk4gZnJvbSB0aGUgeGVuIHN0 b3JlIGFzIGEgbmV3IHBhcmFtZXRlcgoKNC4gTW9kaWZpY2F0aW9ucyBpbiBoYW5kbGVfcmluZ19y ZWFkKCkgdG8gaGFuZGxlIGJvdGggUFYgYW5kIFZDT04KICAgZXZlbnRzLgoKNS4gQWRkIGEgbmV3 IGxvZ19maWxlIGZvciBWQ09OIGNvbnNvbGUgbG9ncy4KClNpZ25lZC1vZmYtYnk6IEJodXBpbmRl ciBUaGFrdXIgPGJodXBpbmRlci50aGFrdXJAbGluYXJvLm9yZz4KLS0tCiB0b29scy9jb25zb2xl L2RhZW1vbi9pby5jIHwgNTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNTYgaW5zZXJ0aW9ucygrKSwgMTUyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25z b2xlL2RhZW1vbi9pby5jCmluZGV4IDBjZDFmZWUuLmI5YmU1YTUgMTAwNjQ0Ci0tLSBhL3Rvb2xz L2NvbnNvbGUvZGFlbW9uL2lvLmMKKysrIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwpAQCAt MTY0LDExICsxNjQsMzkgQEAgc3RhdGljIGludCB3cml0ZV93aXRoX3RpbWVzdGFtcChpbnQgZmQs IGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzeiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZv aWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3QgZG9tYWluICpkb20pCisvKgorICogVGhpcyBmdW5jdGlv biBjaGVja3MgaWYgdGhlIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBidWZmZXJlZCBmb3IgdGhhdCBj b25zb2xlLgorICogSWYgbm90IHRoZW4gaXQgbWFya3MgaXQgcGVuZGluZyBmb3IgbGF0ZXIgcmVj ZWl2aW5nLgorICovCitzdGF0aWMgYm9vbCBidWZmZXJfYXZhaWxhYmxlKHN0cnVjdCBkb21haW4g KmRvbSwgaW50IGNvbnNvbGVfdHlwZSkKK3sKKwlpZiAoZGlzY2FyZF9vdmVyZmxvd2VkX2RhdGEg fHwKKwkJIWRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0ubWF4X2NhcGFjaXR5IHx8CisJCWRvbS0+ YnVmZmVyW2NvbnNvbGVfdHlwZV0uc2l6ZSA8IGRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0ubWF4 X2NhcGFjaXR5KQorCXsKKwkJZG9tLT5jb25zb2xlX2RhdGFfcGVuZGluZyAmPSB+KDE8PGNvbnNv bGVfdHlwZSk7CisJCXJldHVybiB0cnVlOworCX0KKwllbHNlCisJeworCQlkb20tPmNvbnNvbGVf ZGF0YV9wZW5kaW5nIHw9ICgxPDxjb25zb2xlX3R5cGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQor fQorCitzdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0cnVjdCBkb21haW4gKmRvbSwgaW50IGNv bnNvbGVfdHlwZSkKIHsKLQlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSAmZG9tLT5idWZmZXI7CisJ c3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gJmRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV07CisJc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmPWRvbS0+aW50ZXJmYWNlW2NvbnNvbGVfdHlwZV07 CisJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0PWRvbS0+bG9jYWxfcG9ydFtjb25zb2xl X3R5cGVdOworCiAJWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9kLCBzaXplOwotCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOworCisJLyoKKwkgKiBjaGVj ayBpZiBtb3JlIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBidWZmZXJlZAorCSAqLworCWlmICghYnVm ZmVyX2F2YWlsYWJsZShkb20sIGNvbnNvbGVfdHlwZSkpCisJCXJldHVybjsKIAogCWNvbnMgPSBp bnRmLT5vdXRfY29uczsKIAlwcm9kID0gaW50Zi0+b3V0X3Byb2Q7CkBAIC0xOTMsMjIgKzIyMSwy MiBAQCBzdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0cnVjdCBkb21haW4gKmRvbSkKIAogCXhl bl9tYigpOwogCWludGYtPm91dF9jb25zID0gY29uczsKLQl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+ eGNlX2hhbmRsZSwgZG9tLT5sb2NhbF9wb3J0KTsKKwl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNl X2hhbmRsZSwgcG9ydCk7CiAKIAkvKiBHZXQgdGhlIGRhdGEgdG8gdGhlIGxvZ2ZpbGUgYXMgZWFy bHkgYXMgcG9zc2libGUgYmVjYXVzZSBpZgogCSAqIG5vIG9uZSBpcyBsaXN0ZW5pbmcgb24gdGhl IGNvbnNvbGUgcHR5IHRoZW4gaXQgd2lsbCBmaWxsIHVwCiAJICogYW5kIGhhbmRsZV90dHlfd3Jp dGUgd2lsbCBzdG9wIGJlaW5nIGNhbGxlZC4KIAkgKi8KLQlpZiAoZG9tLT5sb2dfZmQgIT0gLTEp IHsKKwlpZiAoZG9tLT5sb2dfZmRbY29uc29sZV90eXBlXSAhPSAtMSkgewogCQlpbnQgbG9ncmV0 OwogCQlpZiAobG9nX3RpbWVfZ3Vlc3QpIHsKIAkJCWxvZ3JldCA9IHdyaXRlX3dpdGhfdGltZXN0 YW1wKAotCQkJCWRvbS0+bG9nX2ZkLAorCQkJCWRvbS0+bG9nX2ZkW2NvbnNvbGVfdHlwZV0sCiAJ CQkJYnVmZmVyLT5kYXRhICsgYnVmZmVyLT5zaXplIC0gc2l6ZSwKIAkJCQlzaXplLCAmbG9nX3Rp bWVfZ3Vlc3RfbmVlZHRzKTsKIAkJfSBlbHNlIHsKIAkJCWxvZ3JldCA9IHdyaXRlX2FsbCgKLQkJ CQlkb20tPmxvZ19mZCwKKwkJCQlkb20tPmxvZ19mZFtjb25zb2xlX3R5cGVdLAogCQkJCWJ1ZmZl ci0+ZGF0YSArIGJ1ZmZlci0+c2l6ZSAtIHNpemUsCiAJCQkJc2l6ZSk7CiAJCX0KQEAgLTI5Niwx MiArMzI0LDEzIEBAIHN0YXRpYyBpbnQgY3JlYXRlX2h2X2xvZyh2b2lkKQogCXJldHVybiBmZDsK IH0KIAotc3RhdGljIGludCBjcmVhdGVfZG9tYWluX2xvZyhzdHJ1Y3QgZG9tYWluICpkb20pCitz dGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4gKmRvbSwgaW50IGNvbnNv bGVfdHlwZSkKIHsKIAljaGFyIGxvZ2ZpbGVbUEFUSF9NQVhdOwogCWNoYXIgKm5hbWVwYXRoLCAq ZGF0YSwgKnM7CiAJaW50IGZkOwogCXVuc2lnbmVkIGludCBsZW47CisJY2hhciAqY29uc29sZV9u YW1lW109eyJwdiIsICJ2Y29uIn07CiAKIAluYW1lcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4 cywgZG9tLT5kb21pZCk7CiAJcyA9IHJlYWxsb2MobmFtZXBhdGgsIHN0cmxlbihuYW1lcGF0aCkg KyA2KTsKQEAgLTMyMCw3ICszNDksNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0 cnVjdCBkb21haW4gKmRvbSkKIAkJcmV0dXJuIC0xOwogCX0KIAotCXNucHJpbnRmKGxvZ2ZpbGUs IFBBVEhfTUFYLTEsICIlcy9ndWVzdC0lcy5sb2ciLCBsb2dfZGlyLCBkYXRhKTsKKwlzbnByaW50 Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAiJXMvZ3Vlc3QtJXMtJXMubG9nIiwgbG9nX2RpciwgY29u c29sZV9uYW1lW2NvbnNvbGVfdHlwZV0sIGRhdGEpOwogCWZyZWUoZGF0YSk7CiAJbG9nZmlsZVtQ QVRIX01BWC0xXSA9ICdcMCc7CiAKQEAgLTM0NCwxNCArMzczLDI0IEBAIHN0YXRpYyBpbnQgY3Jl YXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFpbiAqZG9tKQogCiBzdGF0aWMgdm9pZCBkb21haW5f Y2xvc2VfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIHsKLQlpZiAoZG9tLT5tYXN0ZXJfZmQgIT0g LTEpIHsKLQkJY2xvc2UoZG9tLT5tYXN0ZXJfZmQpOwotCQlkb20tPm1hc3Rlcl9mZCA9IC0xOwor CWlmIChkb20tPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfUFZdICE9IC0xKSB7CisJCWNsb3NlKGRv bS0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9QVl0pOworCQlkb20tPm1hc3Rlcl9mZFtDT05TT0xF X1RZUEVfUFZdID0gLTE7CisJfQorCisJaWYgKGRvbS0+c2xhdmVfZmRbQ09OU09MRV9UWVBFX1BW XSAhPSAtMSkgeworCQljbG9zZShkb20tPnNsYXZlX2ZkW0NPTlNPTEVfVFlQRV9QVl0pOworCQlk b20tPnNsYXZlX2ZkW0NPTlNPTEVfVFlQRV9QVl0gPSAtMTsKKwl9CisKKwlpZiAoZG9tLT5tYXN0 ZXJfZmRbQ09OU09MRV9UWVBFX1ZDT05dICE9IC0xKSB7CisJCWNsb3NlKGRvbS0+bWFzdGVyX2Zk W0NPTlNPTEVfVFlQRV9WQ09OXSk7CisJCWRvbS0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9WQ09O XSA9IC0xOwogCX0KIAotCWlmIChkb20tPnNsYXZlX2ZkICE9IC0xKSB7Ci0JCWNsb3NlKGRvbS0+ c2xhdmVfZmQpOwotCQlkb20tPnNsYXZlX2ZkID0gLTE7CisJaWYgKGRvbS0+c2xhdmVfZmRbQ09O U09MRV9UWVBFX1ZDT05dICE9IC0xKSB7CisJCWNsb3NlKGRvbS0+c2xhdmVfZmRbQ09OU09MRV9U WVBFX1ZDT05dKTsKKwkJZG9tLT5zbGF2ZV9mZFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKIAl9 CiB9CiAKQEAgLTQyNCw2MyArNDYzLDg2IEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHko c3RydWN0IGRvbWFpbiAqZG9tKQogCWNoYXIgKmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlz dHJ1Y3QgdGVybWlvcyB0ZXJtOworCWludCBjb25zb2xlX3R5cGU9MDsKIAotCWFzc2VydChkb20t PnNsYXZlX2ZkID09IC0xKTsKLQlhc3NlcnQoZG9tLT5tYXN0ZXJfZmQgPT0gLTEpOworCWFzc2Vy dChkb20tPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfUFZdID09IC0xKTsKKwlhc3NlcnQoZG9tLT5z bGF2ZV9mZFtDT05TT0xFX1RZUEVfUFZdID09IC0xKTsKKwlhc3NlcnQoZG9tLT5tYXN0ZXJfZmRb Q09OU09MRV9UWVBFX1ZDT05dID09IC0xKTsKKwlhc3NlcnQoZG9tLT5zbGF2ZV9mZFtDT05TT0xF X1RZUEVfVkNPTl0gPT0gLTEpOwogCi0JaWYgKG9wZW5wdHkoJmRvbS0+bWFzdGVyX2ZkLCAmZG9t LT5zbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7Ci0JCWVyciA9IGVycm5vOwotCQlk b2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSB0dHkgZm9yIGRvbWFpbi0lZCAiCi0JCSAg ICAgICIoZXJybm8gPSAlaSwgJXMpIiwKLQkJICAgICAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJv cihlcnIpKTsKLQkJcmV0dXJuIDA7Ci0JfQorCS8qCisJICogT3BlbiBwdHkgZm9yIGJvdGggUFYg YW5kIHZjb24gY29uc29sZXMuCisJICovCisJZm9yIChjb25zb2xlX3R5cGU9MDsgY29uc29sZV90 eXBlPE1BWF9DT05TT0xFOyBjb25zb2xlX3R5cGUrKykKKwl7CisJCWlmIChvcGVucHR5KCZkb20t Pm1hc3Rlcl9mZFtjb25zb2xlX3R5cGVdLCAmZG9tLT5zbGF2ZV9mZFtjb25zb2xlX3R5cGVdLCBO VUxMLCBOVUxMLCBOVUxMKSA8IDApIHsKKwkJCWVyciA9IGVycm5vOworCQkJZG9sb2coTE9HX0VS UiwgIkZhaWxlZCB0byBjcmVhdGUgdHR5IGZvciBkb21haW4tJWQgIgorCQkJCSAgIihlcnJubyA9 ICVpLCAlcykiLAorCQkJCSAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKKwkJCXJl dHVybiAwOworCQl9CiAKLQlpZiAodGNnZXRhdHRyKGRvbS0+c2xhdmVfZmQsICZ0ZXJtKSA8IDAp IHsKLQkJZXJyID0gZXJybm87Ci0JCWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gZ2V0IHR0eSBh dHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgotCQkJIihlcnJubyA9ICVpLCAlcykiLAotCQkJZG9t LT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKLQkJZ290byBvdXQ7Ci0JfQotCWNmbWFrZXJh dygmdGVybSk7Ci0JaWYgKHRjc2V0YXR0cihkb20tPnNsYXZlX2ZkLCBUQ1NBTk9XLCAmdGVybSkg PCAwKSB7Ci0JCWVyciA9IGVycm5vOwotCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHNldCB0 dHkgYXR0cmlidXRlcyBmb3IgZG9tYWluLSVkICIKLQkJCSIoZXJybm8gPSAlaSwgJXMpIiwKLQkJ CWRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7Ci0JCWdvdG8gb3V0OwotCX0KKwkJaWYg KHRjZ2V0YXR0cihkb20tPnNsYXZlX2ZkW2NvbnNvbGVfdHlwZV0sICZ0ZXJtKSA8IDApIHsKKwkJ CWVyciA9IGVycm5vOworCQkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgdHR5IGF0dHJp YnV0ZXMgZm9yIGRvbWFpbi0lZCAiCisJCQkJIihlcnJubyA9ICVpLCAlcykiLAorCQkJCWRvbS0+ ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQljZm1ha2Vy YXcoJnRlcm0pOworCQlpZiAodGNzZXRhdHRyKGRvbS0+c2xhdmVfZmRbY29uc29sZV90eXBlXSwg VENTQU5PVywgJnRlcm0pIDwgMCkgeworCQkJZXJyID0gZXJybm87CisJCQlkb2xvZyhMT0dfRVJS LCAiRmFpbGVkIHRvIHNldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9tYWluLSVkICIKKwkJCQkiKGVy cm5vID0gJWksICVzKSIsCisJCQkJZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKKwkJ CWdvdG8gb3V0OworCQl9CiAKLQlpZiAoKHNsYXZlID0gcHRzbmFtZShkb20tPm1hc3Rlcl9mZCkp ID09IE5VTEwpIHsKLQkJZXJyID0gZXJybm87Ci0JCWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8g Z2V0IHNsYXZlIG5hbWUgZm9yIGRvbWFpbi0lZCAiCi0JCSAgICAgICIoZXJybm8gPSAlaSwgJXMp IiwKLQkJICAgICAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKLQkJZ290byBvdXQ7 Ci0JfQorCQlpZiAoKHNsYXZlID0gcHRzbmFtZShkb20tPm1hc3Rlcl9mZFtjb25zb2xlX3R5cGVd KSkgPT0gTlVMTCkgeworCQkJZXJyID0gZXJybm87CisJCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVk IHRvIGdldCBzbGF2ZSBuYW1lIGZvciBkb21haW4tJWQgIgorCQkJCSAgIihlcnJubyA9ICVpLCAl cykiLAorCQkJCSAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKKwkJCWdvdG8gb3V0 OworCQl9CiAKLQlzdWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIlcy9saW1pdCIsIGRvbS0+Y29u c3BhdGgpICE9Ci0JCS0xOwotCWlmICghc3VjY2VzcykKLQkJZ290byBvdXQ7Ci0JZGF0YSA9IHhz X3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCAmbGVuKTsKLQlpZiAoZGF0YSkgewotCQlkb20tPmJ1 ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0b3VsKGRhdGEsIDAsIDApOwotCQlmcmVlKGRhdGEpOwor CQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSBjb25zb2xlIGJ1ZmZlciBjYXBhY2l0eS4KKwkJICov CisJCXN1Y2Nlc3MgPSBhc3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0IiwgZG9tLT5jb25zcGF0aCkg IT0KKwkJCS0xOworCQlpZiAoIXN1Y2Nlc3MpCisJCQlnb3RvIG91dDsKKwkJZGF0YSA9IHhzX3Jl YWQoeHMsIFhCVF9OVUxMLCBwYXRoLCAmbGVuKTsKKwkJaWYgKGRhdGEpIHsKKwkJCWRvbS0+YnVm ZmVyW2NvbnNvbGVfdHlwZV0ubWF4X2NhcGFjaXR5ID0gc3RydG91bChkYXRhLCAwLCAwKTsKKwkJ CWZyZWUoZGF0YSk7CisJCX0KKwkJZnJlZShwYXRoKTsKKworCQkvKgorCQkgKiBXcml0ZSBjb25z b2xlIHNsYXZlIG5hbWUgdG8geGVuIHN0b3JlLgorCQkgKi8KKwkJaWYgKGNvbnNvbGVfdHlwZSA9 PSBDT05TT0xFX1RZUEVfVkNPTikKKwkJCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBhdGgsICIlcy92 dHR5IiwgZG9tLT5jb25zcGF0aCkgIT0gLTEpOworCQllbHNlCisJCQlzdWNjZXNzID0gKGFzcHJp bnRmKCZwYXRoLCAiJXMvdHR5IiwgZG9tLT5jb25zcGF0aCkgIT0gLTEpOworCisJCWlmICghc3Vj Y2VzcykKKwkJCWdvdG8gb3V0OworCQlzdWNjZXNzID0geHNfd3JpdGUoeHMsIFhCVF9OVUxMLCBw YXRoLCBzbGF2ZSwgc3RybGVuKHNsYXZlKSk7CisJCWZyZWUocGF0aCk7CisKKwkJaWYgKGZjbnRs KGRvbS0+bWFzdGVyX2ZkW2NvbnNvbGVfdHlwZV0sIEZfU0VURkwsIE9fTk9OQkxPQ0spID09IC0x KQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCFkb20tPnZjb25fZW5hYmxlZCkKKwkJCWJyZWFrOwog CX0KLQlmcmVlKHBhdGgpOwogCi0Jc3VjY2VzcyA9IChhc3ByaW50ZigmcGF0aCwgIiVzL3R0eSIs IGRvbS0+Y29uc3BhdGgpICE9IC0xKTsKIAlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8gb3V0OwotCXN1 Y2Nlc3MgPSB4c193cml0ZSh4cywgWEJUX05VTEwsIHBhdGgsIHNsYXZlLCBzdHJsZW4oc2xhdmUp KTsKLQlmcmVlKHBhdGgpOwotCWlmICghc3VjY2VzcykKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZmNu dGwoZG9tLT5tYXN0ZXJfZmQsIEZfU0VURkwsIE9fTk9OQkxPQ0spID09IC0xKQotCQlnb3RvIG91 dDsKIAogCXJldHVybiAxOwogb3V0OgpAQCAtNTIzLDIxICs1ODUsNTMgQEAgc3RhdGljIGludCB4 c19nYXRoZXIoc3RydWN0IHhzX2hhbmRsZSAqeHMsIGNvbnN0IGNoYXIgKmRpciwgLi4uKQogCXJl dHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvbWFpbl91bm1hcF9pbnRlcmZhY2Uoc3RydWN0 IGRvbWFpbiAqZG9tKQorc3RhdGljIHZvaWQgZG9tYWluX3VubWFwX2ludGVyZmFjZShzdHJ1Y3Qg ZG9tYWluICpkb20sIGludCBjb25zb2xlX3R5cGUpCiB7Ci0JaWYgKGRvbS0+aW50ZXJmYWNlID09 IE5VTEwpCisJaWYgKGRvbS0+aW50ZXJmYWNlW2NvbnNvbGVfdHlwZV0gPT0gTlVMTCkKIAkJcmV0 dXJuOwotCWlmICh4Z3RfaGFuZGxlICYmIGRvbS0+cmluZ19yZWYgPT0gLTEpCi0JCXhlbmdudHRh Yl91bm1hcCh4Z3RfaGFuZGxlLCBkb20tPmludGVyZmFjZSwgMSk7CisJaWYgKHhndF9oYW5kbGUg JiYgZG9tLT5yaW5nX3JlZltjb25zb2xlX3R5cGVdID09IC0xKQorCQl4ZW5nbnR0YWJfdW5tYXAo eGd0X2hhbmRsZSwgZG9tLT5pbnRlcmZhY2VbY29uc29sZV90eXBlXSwgMSk7CiAJZWxzZQotCQlt dW5tYXAoZG9tLT5pbnRlcmZhY2UsIFhDX1BBR0VfU0laRSk7Ci0JZG9tLT5pbnRlcmZhY2UgPSBO VUxMOwotCWRvbS0+cmluZ19yZWYgPSAtMTsKKwkJbXVubWFwKGRvbS0+aW50ZXJmYWNlW2NvbnNv bGVfdHlwZV0sIFhDX1BBR0VfU0laRSk7CisJZG9tLT5pbnRlcmZhY2VbY29uc29sZV90eXBlXSA9 IE5VTEw7CisJZG9tLT5yaW5nX3JlZltjb25zb2xlX3R5cGVdID0gLTE7Cit9CisKK3N0YXRpYyBp bnQgYmluZF9ldmVudF9jaGFubmVsKHN0cnVjdCBkb21haW4gKmRvbSwgaW50IG5ld19ycG9ydCwg aW50ICpscG9ydCwgaW50ICpycG9ydCkKK3sKKwlpbnQgZXJyID0gMCwgcmM7CisKKwkvKiBHbyBu byBmdXJ0aGVyIGlmIHBvcnQgaGFzIG5vdCBjaGFuZ2VkIGFuZCB3ZSBhcmUgc3RpbGwgYm91bmQu ICovCisJaWYgKG5ld19ycG9ydCA9PSAqcnBvcnQpIHsKKwkJeGNfZXZ0Y2huX3N0YXR1c190IHN0 YXR1cyA9IHsKKwkJLmRvbSA9IERPTUlEX1NFTEYsCisJCS5wb3J0ID0gKmxwb3J0IH07CisJCWlm ICgoeGNfZXZ0Y2huX3N0YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKKwkJCShzdGF0dXMuc3Rh dHVzID09IEVWVENITlNUQVRfaW50ZXJkb21haW4pKQorCQkJZ290byBvdXQ7CisJfQorCisJKmxw b3J0ID0gLTE7CisJKnJwb3J0ID0gLTE7CisJcmMgPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFp bihkb20tPnhjZV9oYW5kbGUsCisJCQkJCQkJCQlkb20tPmRvbWlkLCBuZXdfcnBvcnQpOworCisJ aWYgKHJjID09IC0xKSB7CisJCWVyciA9IGVycm5vOworCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54 Y2VfaGFuZGxlKTsKKwkJZG9tLT54Y2VfaGFuZGxlID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQor CisJKmxwb3J0ID0gcmM7CisJKnJwb3J0ID0gbmV3X3Jwb3J0Oworb3V0OgorCXJldHVybiBlcnI7 CiB9CiAgCiBzdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20p CiB7Ci0JaW50IGVyciwgcmVtb3RlX3BvcnQsIHJpbmdfcmVmLCByYzsKKwlpbnQgZXJyLCByZW1v dGVfcG9ydCwgcmluZ19yZWYsIHZjb25fcmVtb3RlX3BvcnQsIHZjb25fcmluZ19yZWY7CiAJY2hh ciAqdHlwZSwgcGF0aFtQQVRIX01BWF07CiAKIAllcnIgPSB4c19nYXRoZXIoeHMsIGRvbS0+Y29u c3BhdGgsCkBAIC01NDcsNiArNjQxLDE3IEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV9yaW5n KHN0cnVjdCBkb21haW4gKmRvbSkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAorCS8qIHZjb24g Y29uc29sZSBpcyBvcHRpb25hbC4gKi8KKwllcnIgPSB4c19nYXRoZXIoeHMsIGRvbS0+Y29uc3Bh dGgsCisJCSJ2Y29uLXJpbmctcmVmIiwgIiV1IiwgJnZjb25fcmluZ19yZWYsCisJCSJ2Y29uLXBv cnQiLCAiJWkiLCAmdmNvbl9yZW1vdGVfcG9ydCwKKwkJTlVMTCk7CisKKwlpZiAoZXJyIHx8IHZj b25fcmluZ19yZWYgPT0gLTEpCisJCWRvbS0+dmNvbl9lbmFibGVkID0gZmFsc2U7CisJZWxzZQor CQlkb20tPnZjb25fZW5hYmxlZCA9IHRydWU7CisKIAlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0 aCksICIlcy90eXBlIiwgZG9tLT5jb25zcGF0aCk7CiAJdHlwZSA9IHhzX3JlYWQoeHMsIFhCVF9O VUxMLCBwYXRoLCBOVUxMKTsKIAlpZiAodHlwZSAmJiBzdHJjbXAodHlwZSwgInhlbmNvbnNvbGVk IikgIT0gMCkgewpAQCAtNTU2LDQxICs2NjEsNTEgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRl X3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQogCWZyZWUodHlwZSk7CiAKIAkvKiBJZiB1c2luZyBy aW5nX3JlZiBhbmQgaXQgaGFzIGNoYW5nZWQsIHJlbWFwICovCi0JaWYgKHJpbmdfcmVmICE9IGRv bS0+cmluZ19yZWYgJiYgZG9tLT5yaW5nX3JlZiAhPSAtMSkKLQkJZG9tYWluX3VubWFwX2ludGVy ZmFjZShkb20pOworCWlmIChyaW5nX3JlZiAhPSBkb20tPnJpbmdfcmVmW0NPTlNPTEVfVFlQRV9Q Vl0gJiYgZG9tLT5yaW5nX3JlZltDT05TT0xFX1RZUEVfUFZdICE9IC0xKQorCQlkb21haW5fdW5t YXBfaW50ZXJmYWNlKGRvbSwgQ09OU09MRV9UWVBFX1BWKTsKKworCS8qIElmIHVzaW5nIHZjb24g cmluZ19yZWYgYW5kIGl0IGhhcyBjaGFuZ2VkLCByZW1hcCAqLworCWlmIChkb20tPnZjb25fZW5h YmxlZCAmJgorCQl2Y29uX3JpbmdfcmVmICE9IGRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1ZD T05dICYmCisJCWRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1ZDT05dICE9IC0xICkKKwkJZG9t YWluX3VubWFwX2ludGVyZmFjZShkb20sIENPTlNPTEVfVFlQRV9WQ09OKTsKIAotCWlmICghZG9t LT5pbnRlcmZhY2UgJiYgeGd0X2hhbmRsZSkgeworCWlmICghZG9tLT5pbnRlcmZhY2VbQ09OU09M RV9UWVBFX1BWXSAmJiB4Z3RfaGFuZGxlKSB7CiAJCS8qIFByZWZlciB1c2luZyBncmFudCB0YWJs ZSAqLwotCQlkb20tPmludGVyZmFjZSA9IHhlbmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhndF9oYW5k bGUsCi0JCQlkb20tPmRvbWlkLCBHTlRUQUJfUkVTRVJWRURfQ09OU09MRSwKLQkJCVBST1RfUkVB RHxQUk9UX1dSSVRFKTsKLQkJZG9tLT5yaW5nX3JlZiA9IC0xOworCQlkb20tPmludGVyZmFjZVtD T05TT0xFX1RZUEVfUFZdID0geGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKKwkJ CQkJCQkJCQkJCQkJCQkgIGRvbS0+ZG9taWQsIEdOVFRBQl9SRVNFUlZFRF9DT05TT0xFLAorCQkJ CQkJCQkJCQkJCQkJCSAgUFJPVF9SRUFEfFBST1RfV1JJVEUpOworCQlkb20tPnJpbmdfcmVmW0NP TlNPTEVfVFlQRV9QVl0gPSAtMTsKIAl9Ci0JaWYgKCFkb20tPmludGVyZmFjZSkgeworCisJaWYg KCFkb20tPmludGVyZmFjZVtDT05TT0xFX1RZUEVfUFZdKSB7CiAJCS8qIEZhbGwgYmFjayB0byB4 Y19tYXBfZm9yZWlnbl9yYW5nZSAqLwotCQlkb20tPmludGVyZmFjZSA9IHhjX21hcF9mb3JlaWdu X3JhbmdlKAorCQlkb20tPmludGVyZmFjZVtDT05TT0xFX1RZUEVfUFZdID0geGNfbWFwX2ZvcmVp Z25fcmFuZ2UoCiAJCQl4YywgZG9tLT5kb21pZCwgWENfUEFHRV9TSVpFLAogCQkJUFJPVF9SRUFE fFBST1RfV1JJVEUsCiAJCQkodW5zaWduZWQgbG9uZylyaW5nX3JlZik7Ci0JCWlmIChkb20tPmlu dGVyZmFjZSA9PSBOVUxMKSB7CisJCWlmIChkb20tPmludGVyZmFjZVtDT05TT0xFX1RZUEVfUFZd ID09IE5VTEwpIHsKIAkJCWVyciA9IEVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWRvbS0+ cmluZ19yZWYgPSByaW5nX3JlZjsKKwkJZG9tLT5yaW5nX3JlZltDT05TT0xFX1RZUEVfUFZdID0g cmluZ19yZWY7CiAJfQogCi0JLyogR28gbm8gZnVydGhlciBpZiBwb3J0IGhhcyBub3QgY2hhbmdl ZCBhbmQgd2UgYXJlIHN0aWxsIGJvdW5kLiAqLwotCWlmIChyZW1vdGVfcG9ydCA9PSBkb20tPnJl bW90ZV9wb3J0KSB7Ci0JCXhjX2V2dGNobl9zdGF0dXNfdCBzdGF0dXMgPSB7Ci0JCQkuZG9tID0g RE9NSURfU0VMRiwKLQkJCS5wb3J0ID0gZG9tLT5sb2NhbF9wb3J0IH07Ci0JCWlmICgoeGNfZXZ0 Y2huX3N0YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKLQkJICAgIChzdGF0dXMuc3RhdHVzID09 IEVWVENITlNUQVRfaW50ZXJkb21haW4pKQorCS8qIE1hcCB2Y29uIGNvbnNvbGUgcmluZyBidWZm ZXIuICovCisJaWYgKGRvbS0+dmNvbl9lbmFibGVkICYmICFkb20tPmludGVyZmFjZVtDT05TT0xF X1RZUEVfVkNPTl0pIHsKKworCQkvKiBGYWxsIGJhY2sgdG8geGNfbWFwX2ZvcmVpZ25fcmFuZ2Ug Ki8KKwkJZG9tLT5pbnRlcmZhY2VbQ09OU09MRV9UWVBFX1ZDT05dID0geGNfbWFwX2ZvcmVpZ25f cmFuZ2UoCisJCXhjLCBkb20tPmRvbWlkLCBYQ19QQUdFX1NJWkUsCisJCVBST1RfUkVBRHxQUk9U X1dSSVRFLAorCQkodW5zaWduZWQgbG9uZyl2Y29uX3JpbmdfcmVmKTsKKwkJaWYgKCBkb20tPmlu dGVyZmFjZVtDT05TT0xFX1RZUEVfVkNPTl0gPT0gTlVMTCApIHsKKwkJCWVyciA9IEVJTlZBTDsK IAkJCWdvdG8gb3V0OworCQl9CisJCWRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1ZDT05dID0g dmNvbl9yaW5nX3JlZjsKIAl9CiAKLQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKLQlkb20tPnJlbW90 ZV9wb3J0ID0gLTE7CiAJaWYgKGRvbS0+eGNlX2hhbmRsZSAhPSBOVUxMKQogCQl4ZW5ldnRjaG5f Y2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsKIApAQCAtNjAyLDMxICs3MTcsNDYgQEAgc3RhdGljIGlu dCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQogCQlnb3RvIG91dDsKIAl9 CiAgCi0JcmMgPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbihkb20tPnhjZV9oYW5kbGUsCi0J CWRvbS0+ZG9taWQsIHJlbW90ZV9wb3J0KTsKLQotCWlmIChyYyA9PSAtMSkgewotCQllcnIgPSBl cnJubzsKKwllcnIgPSBiaW5kX2V2ZW50X2NoYW5uZWwoZG9tLCByZW1vdGVfcG9ydCwKKwkJCQkJ CQkgJmRvbS0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfUFZdLAorCQkJCQkJCSAmZG9tLT5yZW1v dGVfcG9ydFtDT05TT0xFX1RZUEVfUFZdKTsKKwlpZiAoZXJyKQorCXsKIAkJeGVuZXZ0Y2huX2Ns b3NlKGRvbS0+eGNlX2hhbmRsZSk7Ci0JCWRvbS0+eGNlX2hhbmRsZSA9IE5VTEw7CiAJCWdvdG8g b3V0OwogCX0KLQlkb20tPmxvY2FsX3BvcnQgPSByYzsKLQlkb20tPnJlbW90ZV9wb3J0ID0gcmVt b3RlX3BvcnQ7CiAKLQlpZiAoZG9tLT5tYXN0ZXJfZmQgPT0gLTEpIHsKKwlpZiAoZG9tLT52Y29u X2VuYWJsZWQpCisJeworCQllcnIgPSBiaW5kX2V2ZW50X2NoYW5uZWwoZG9tLCB2Y29uX3JlbW90 ZV9wb3J0LAorCQkJCQkJCQkgJmRvbS0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0sCisJ CQkJCQkJCSAmZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0pOworCQlpZiAoZXJy KQorCQl7CisJCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsKKwkJCWdvdG8gb3V0 OworCQl9CisJfQorCisJaWYgKGRvbS0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9QVl0gPT0gLTEp IHsKIAkJaWYgKCFkb21haW5fY3JlYXRlX3R0eShkb20pKSB7CiAJCQllcnIgPSBlcnJubzsKIAkJ CXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwogCQkJZG9tLT54Y2VfaGFuZGxlID0g TlVMTDsKLQkJCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwotCQkJZG9tLT5yZW1vdGVfcG9ydCA9IC0x OworCQkJZG9tLT5sb2NhbF9wb3J0W0NPTlNPTEVfVFlQRV9QVl0gPSAtMTsKKwkJCWRvbS0+cmVt b3RlX3BvcnRbQ09OU09MRV9UWVBFX1BWXSA9IC0xOworCQkJZG9tLT5sb2NhbF9wb3J0W0NPTlNP TEVfVFlQRV9WQ09OXSA9IC0xOworCQkJZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfVkNP Tl0gPSAtMTsKKwkJCWRvbS0+dmNvbl9lbmFibGVkID0gZmFsc2U7CiAJCQlnb3RvIG91dDsKIAkJ fQogCX0KIAotCWlmIChsb2dfZ3Vlc3QgJiYgKGRvbS0+bG9nX2ZkID09IC0xKSkKLQkJZG9tLT5s b2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkb20pOworCWlmIChsb2dfZ3Vlc3QgJiYgKGRvbS0+ bG9nX2ZkW0NPTlNPTEVfVFlQRV9QVl0gPT0gLTEpKQorCQlkb20tPmxvZ19mZFtDT05TT0xFX1RZ UEVfUFZdID0gY3JlYXRlX2RvbWFpbl9sb2coZG9tLCBDT05TT0xFX1RZUEVfUFYpOworCisJaWYg KGxvZ19ndWVzdCAmJiBkb20tPnZjb25fZW5hYmxlZCAmJiAoZG9tLT5sb2dfZmRbQ09OU09MRV9U WVBFX1ZDT05dID09IC0xKSkKKwkJZG9tLT5sb2dfZmRbQ09OU09MRV9UWVBFX1ZDT05dID0gY3Jl YXRlX2RvbWFpbl9sb2coZG9tLCBDT05TT0xFX1RZUEVfVkNPTik7CiAKICBvdXQ6CiAJcmV0dXJu IGVycjsKQEAgLTY4MSwxNyArODExLDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVf ZG9tYWluKGludCBkb21pZCkKIAlkb20tPmNvbnNwYXRoID0gczsKIAlzdHJjYXQoZG9tLT5jb25z cGF0aCwgIi9jb25zb2xlIik7CiAKLQlkb20tPm1hc3Rlcl9mZCA9IC0xOwotCWRvbS0+bWFzdGVy X3BvbGxmZF9pZHggPSAtMTsKLQlkb20tPnNsYXZlX2ZkID0gLTE7Ci0JZG9tLT5sb2dfZmQgPSAt MTsKKwlkb20tPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfUFZdID0gLTE7CisJZG9tLT5tYXN0ZXJf cG9sbGZkX2lkeFtDT05TT0xFX1RZUEVfUFZdID0gLTE7CisJZG9tLT5zbGF2ZV9mZFtDT05TT0xF X1RZUEVfUFZdID0gLTE7CisJZG9tLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1ZDT05dID0gLTE7 CisJZG9tLT5tYXN0ZXJfcG9sbGZkX2lkeFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKKwlkb20t PnNsYXZlX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSA9IC0xOworCWRvbS0+bG9nX2ZkW0NPTlNPTEVf VFlQRV9QVl0gPSAtMTsKKwlkb20tPmxvZ19mZFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKIAlk b20tPnhjZV9wb2xsZmRfaWR4ID0gLTE7CiAKIAlkb20tPm5leHRfcGVyaW9kID0gKChsb25nIGxv bmcpdHMudHZfc2VjICogMTAwMCkgKyAodHMudHZfbnNlYyAvIDEwMDAwMDApICsgUkFURV9MSU1J VF9QRVJJT0Q7CiAKLQlkb20tPnJpbmdfcmVmID0gLTE7Ci0JZG9tLT5sb2NhbF9wb3J0ID0gLTE7 Ci0JZG9tLT5yZW1vdGVfcG9ydCA9IC0xOworCWRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1BW XSA9IC0xOworCWRvbS0+cmluZ19yZWZbQ09OU09MRV9UWVBFX1ZDT05dID0gLTE7CisJZG9tLT5s b2NhbF9wb3J0W0NPTlNPTEVfVFlQRV9QVl0gPSAtMTsKKwlkb20tPnJlbW90ZV9wb3J0W0NPTlNP TEVfVFlQRV9QVl0gPSAtMTsKKwlkb20tPmxvY2FsX3BvcnRbQ09OU09MRV9UWVBFX1ZDT05dID0g LTE7CisJZG9tLT5yZW1vdGVfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKIAogCWlmICgh d2F0Y2hfZG9tYWluKGRvbSwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwpAQCAtNzM3LDEzICs4NzQsMjEg QEAgc3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKIHsKIAlkb21h aW5fY2xvc2VfdHR5KGQpOwogCi0JaWYgKGQtPmxvZ19mZCAhPSAtMSkgewotCQljbG9zZShkLT5s b2dfZmQpOwotCQlkLT5sb2dfZmQgPSAtMTsKKwlpZiAoZC0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9Q Vl0gIT0gLTEpIHsKKwkJY2xvc2UoZC0+bG9nX2ZkW0NPTlNPTEVfVFlQRV9QVl0pOworCQlkLT5s b2dfZmRbQ09OU09MRV9UWVBFX1BWXSA9IC0xOworCX0KKworCWlmIChkLT5sb2dfZmRbQ09OU09M RV9UWVBFX1ZDT05dICE9IC0xKSB7CisJCWNsb3NlKGQtPmxvZ19mZFtDT05TT0xFX1RZUEVfVkNP Tl0pOworCQlkLT5sb2dfZmRbQ09OU09MRV9UWVBFX1ZDT05dID0gLTE7CiAJfQogCi0JZnJlZShk LT5idWZmZXIuZGF0YSk7Ci0JZC0+YnVmZmVyLmRhdGEgPSBOVUxMOworCWZyZWUoZC0+YnVmZmVy W0NPTlNPTEVfVFlQRV9QVl0uZGF0YSk7CisJZnJlZShkLT5idWZmZXJbQ09OU09MRV9UWVBFX1ZD T05dLmRhdGEpOworCisJZC0+YnVmZmVyW0NPTlNPTEVfVFlQRV9QVl0uZGF0YSA9IE5VTEw7CisJ ZC0+YnVmZmVyW0NPTlNPTEVfVFlQRV9WQ09OXS5kYXRhID0gTlVMTDsKIAogCWZyZWUoZC0+Y29u c3BhdGgpOwogCWQtPmNvbnNwYXRoID0gTlVMTDsKQEAgLTc1NSw3ICs5MDAsOCBAQCBzdGF0aWMg dm9pZCBzaHV0ZG93bl9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKIHsKIAlkLT5pc19kZWFkID0g dHJ1ZTsKIAl3YXRjaF9kb21haW4oZCwgZmFsc2UpOwotCWRvbWFpbl91bm1hcF9pbnRlcmZhY2Uo ZCk7CisJZG9tYWluX3VubWFwX2ludGVyZmFjZShkLCBDT05TT0xFX1RZUEVfUFYpOworCWRvbWFp bl91bm1hcF9pbnRlcmZhY2UoZCwgQ09OU09MRV9UWVBFX1ZDT04pOwogCWlmIChkLT54Y2VfaGFu ZGxlICE9IE5VTEwpCiAJCXhlbmV2dGNobl9jbG9zZShkLT54Y2VfaGFuZGxlKTsKIAlkLT54Y2Vf aGFuZGxlID0gTlVMTDsKQEAgLTc4Niw5ICs5MzIsOSBAQCBzdGF0aWMgdm9pZCBlbnVtX2RvbWFp bnModm9pZCkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmluZ19mcmVlX2J5dGVzKHN0cnVjdCBkb21h aW4gKmRvbSkKK3N0YXRpYyBpbnQgcmluZ19mcmVlX2J5dGVzKHN0cnVjdCBkb21haW4gKmRvbSwg aW50IGNvbnNvbGVfdHlwZSkKIHsKLQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBk b20tPmludGVyZmFjZTsKKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBkb20tPmlu dGVyZmFjZVtjb25zb2xlX3R5cGVdOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZCwgc3Bh Y2U7CiAKIAljb25zID0gaW50Zi0+aW5fY29uczsKQEAgLTgxMywyNSArOTU5LDI2IEBAIHN0YXRp YyB2b2lkIGRvbWFpbl9oYW5kbGVfYnJva2VuX3R0eShzdHJ1Y3QgZG9tYWluICpkb20sIGludCBy ZWNyZWF0ZSkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9t YWluICpkb20pCitzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9t LCBpbnQgY29uc29sZV90eXBlKQogewogCXNzaXplX3QgbGVuID0gMDsKIAljaGFyIG1zZ1s4MF07 CiAJaW50IGk7Ci0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gZG9tLT5pbnRlcmZh Y2U7CiAJWEVOQ09OU19SSU5HX0lEWCBwcm9kOworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAq aW50Zj1kb20tPmludGVyZmFjZVtjb25zb2xlX3R5cGVdOworCXhlbmV2dGNobl9wb3J0X29yX2Vy cm9yX3QgcG9ydD1kb20tPmxvY2FsX3BvcnRbY29uc29sZV90eXBlXTsKIAogCWlmIChkb20tPmlz X2RlYWQpCiAJCXJldHVybjsKIAotCWxlbiA9IHJpbmdfZnJlZV9ieXRlcyhkb20pOworCWxlbiA9 IHJpbmdfZnJlZV9ieXRlcyhkb20sIGNvbnNvbGVfdHlwZSk7CiAJaWYgKGxlbiA9PSAwKQogCQly ZXR1cm47CiAKIAlpZiAobGVuID4gc2l6ZW9mKG1zZykpCiAJCWxlbiA9IHNpemVvZihtc2cpOwog Ci0JbGVuID0gcmVhZChkb20tPm1hc3Rlcl9mZCwgbXNnLCBsZW4pOworCWxlbiA9IHJlYWQoZG9t LT5tYXN0ZXJfZmRbY29uc29sZV90eXBlXSwgbXNnLCBsZW4pOwogCS8qCiAJICogTm90ZTogb24g U29sYXJpcywgbGVuID09IDAgbWVhbnMgdGhlIHNsYXZlIGNsb3NlZCwgYW5kIHRoaXMKIAkgKiBp cyBubyBwcm9ibGVtLCBidXQgTGludXggY2FuJ3QgaGFuZGxlIHRoaXMgdXNlZnVsbHksIHNvIHdl CkBAIC04NDcsMjggKzk5NCwyOSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0 IGRvbWFpbiAqZG9tKQogCQl9CiAJCXhlbl93bWIoKTsKIAkJaW50Zi0+aW5fcHJvZCA9IHByb2Q7 Ci0JCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBkb20tPmxvY2FsX3BvcnQpOwor CQl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7CiAJfSBlbHNlIHsKIAkJ ZG9tYWluX2Nsb3NlX3R0eShkb20pOwogCQlzaHV0ZG93bl9kb21haW4oZG9tKTsKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIGhhbmRsZV90dHlfd3JpdGUoc3RydWN0IGRvbWFpbiAqZG9tKQorc3RhdGlj IHZvaWQgaGFuZGxlX3R0eV93cml0ZShzdHJ1Y3QgZG9tYWluICpkb20sIGludCBjb25zb2xlX3R5 cGUpCiB7CiAJc3NpemVfdCBsZW47CiAKIAlpZiAoZG9tLT5pc19kZWFkKQogCQlyZXR1cm47CiAK LQlsZW4gPSB3cml0ZShkb20tPm1hc3Rlcl9mZCwgZG9tLT5idWZmZXIuZGF0YSArIGRvbS0+YnVm ZmVyLmNvbnN1bWVkLAotCQkgICAgZG9tLT5idWZmZXIuc2l6ZSAtIGRvbS0+YnVmZmVyLmNvbnN1 bWVkKTsKKwlsZW4gPSB3cml0ZShkb20tPm1hc3Rlcl9mZFtjb25zb2xlX3R5cGVdLAorCQkJCWRv bS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0uZGF0YSArIGRvbS0+YnVmZmVyW2NvbnNvbGVfdHlwZV0u Y29uc3VtZWQsCisJCQkJZG9tLT5idWZmZXJbY29uc29sZV90eXBlXS5zaXplIC0gZG9tLT5idWZm ZXJbY29uc29sZV90eXBlXS5jb25zdW1lZCk7CiAgCWlmIChsZW4gPCAxKSB7CiAJCWRvbG9nKExP R19ERUJVRywgIldyaXRlIGZhaWxlZCBvbiBkb21haW4gJWQ6ICV6ZCwgJWRcbiIsCiAJCSAgICAg IGRvbS0+ZG9taWQsIGxlbiwgZXJybm8pOwogCQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoZG9t LCBkb21haW5faXNfdmFsaWQoZG9tLT5kb21pZCkpOwogCX0gZWxzZSB7Ci0JCWJ1ZmZlcl9hZHZh bmNlKCZkb20tPmJ1ZmZlciwgbGVuKTsKKwkJYnVmZmVyX2FkdmFuY2UoJmRvbS0+YnVmZmVyW2Nv bnNvbGVfdHlwZV0sIGxlbik7CiAJfQogfQogCkBAIC04ODQsNyArMTAzMiwxMCBAQCBzdGF0aWMg dm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKIAogCWRvbS0+ZXZlbnRf Y291bnQrKzsKIAotCWJ1ZmZlcl9hcHBlbmQoZG9tKTsKKwlpZiAocG9ydCA9PSBkb20tPmxvY2Fs X3BvcnRbQ09OU09MRV9UWVBFX1ZDT05dKQorCQlidWZmZXJfYXBwZW5kKGRvbSwgQ09OU09MRV9U WVBFX1ZDT04pOworCWVsc2UKKwkJYnVmZmVyX2FwcGVuZChkb20sIENPTlNPTEVfVFlQRV9QVik7 CiAKIAlpZiAoZG9tLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKQogCQkodm9p ZCl4ZW5ldnRjaG5fdW5tYXNrKGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7CkBAIC05NTQsOSArMTEw NSwxNiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfbG9nX3JlbG9hZCh2b2lkKQogCWlmIChsb2dfZ3Vl c3QpIHsKIAkJc3RydWN0IGRvbWFpbiAqZDsKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBk LT5uZXh0KSB7Ci0JCQlpZiAoZC0+bG9nX2ZkICE9IC0xKQotCQkJCWNsb3NlKGQtPmxvZ19mZCk7 Ci0JCQlkLT5sb2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkKTsKKwkJCWlmIChkLT5sb2dfZmRb Q09OU09MRV9UWVBFX1BWXSAhPSAtMSkKKwkJCQljbG9zZShkLT5sb2dfZmRbQ09OU09MRV9UWVBF X1BWXSk7CisJCQlkLT5sb2dfZmRbQ09OU09MRV9UWVBFX1BWXSA9IGNyZWF0ZV9kb21haW5fbG9n KGQsIENPTlNPTEVfVFlQRV9QVik7CisKKwkJCWlmIChkLT52Y29uX2VuYWJsZWQpCisJCQl7CisJ CQkJaWYgKGQtPmxvZ19mZFtDT05TT0xFX1RZUEVfVkNPTl0gIT0gLTEpCisJCQkJCWNsb3NlKGQt PmxvZ19mZFtDT05TT0xFX1RZUEVfVkNPTl0pOworCQkJCWQtPmxvZ19mZFtDT05TT0xFX1RZUEVf UFZdID0gY3JlYXRlX2RvbWFpbl9sb2coZCwgQ09OU09MRV9UWVBFX1ZDT04pOworCQkJfQogCQl9 CiAJfQogCkBAIC0xMDc0LDcgKzEyMzIsOSBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCQkJaWYg KChub3crNSkgPiBkLT5uZXh0X3BlcmlvZCkgewogCQkJCWQtPm5leHRfcGVyaW9kID0gbm93ICsg UkFURV9MSU1JVF9QRVJJT0Q7CiAJCQkJaWYgKGQtPmV2ZW50X2NvdW50ID49IFJBVEVfTElNSVRf QUxMT1dBTkNFKSB7Ci0JCQkJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZC0+eGNlX2hhbmRsZSwg ZC0+bG9jYWxfcG9ydCk7CisJCQkJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZC0+eGNlX2hhbmRs ZSwgZC0+bG9jYWxfcG9ydFtDT05TT0xFX1RZUEVfUFZdKTsKKwkJCQkJaWYgKGQtPnZjb25fZW5h YmxlZCkKKwkJCQkJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZC0+eGNlX2hhbmRsZSwgZC0+bG9j YWxfcG9ydFtDT05TT0xFX1RZUEVfVkNPTl0pOwogCQkJCX0KIAkJCQlkLT5ldmVudF9jb3VudCA9 IDA7CiAJCQl9CkBAIC0xMDg3LDI3ICsxMjQ3LDQ3IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiAJ CQkJICAgIGQtPm5leHRfcGVyaW9kIDwgbmV4dF90aW1lb3V0KQogCQkJCQluZXh0X3RpbWVvdXQg PSBkLT5uZXh0X3BlcmlvZDsKIAkJCX0gZWxzZSBpZiAoZC0+eGNlX2hhbmRsZSAhPSBOVUxMKSB7 Ci0JCQkJaWYgKGRpc2NhcmRfb3ZlcmZsb3dlZF9kYXRhIHx8Ci0JCQkJICAgICFkLT5idWZmZXIu bWF4X2NhcGFjaXR5IHx8Ci0JCQkJICAgIGQtPmJ1ZmZlci5zaXplIDwgZC0+YnVmZmVyLm1heF9j YXBhY2l0eSkgeworCisJCQkJaWYgKGJ1ZmZlcl9hdmFpbGFibGUoZCwgQ09OU09MRV9UWVBFX1BW KSkgeworCQkJCQlpbnQgZXZ0Y2huX2ZkID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwor CQkJCQlkLT54Y2VfcG9sbGZkX2lkeCA9IHNldF9mZHMoZXZ0Y2huX2ZkLAorCQkJCQkJCQkJCQkJ UE9MTElOfFBPTExQUkkpOworCQkJCX0KKworCQkJCWlmIChidWZmZXJfYXZhaWxhYmxlKGQsIENP TlNPTEVfVFlQRV9WQ09OICkgKQorCQkJCXsKIAkJCQkJaW50IGV2dGNobl9mZCA9IHhlbmV2dGNo bl9mZChkLT54Y2VfaGFuZGxlKTsKIAkJCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2 dGNobl9mZCwKLQkJCQkJCQkJICAgIFBPTExJTnxQT0xMUFJJKTsKKwkJCQkJCQkJCQkJCVBPTExJ TnxQT0xMUFJJKTsKIAkJCQl9CiAJCQl9CiAKLQkJCWlmIChkLT5tYXN0ZXJfZmQgIT0gLTEpIHsK KwkJCWlmIChkLT5tYXN0ZXJfZmRbQ09OU09MRV9UWVBFX1BWXSAhPSAtMSkgewogCQkJCXNob3J0 IGV2ZW50cyA9IDA7Ci0JCQkJaWYgKCFkLT5pc19kZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhkKSkK KwkJCQlpZiAoIWQtPmlzX2RlYWQgJiYgcmluZ19mcmVlX2J5dGVzKGQsIENPTlNPTEVfVFlQRV9Q VikpCiAJCQkJCWV2ZW50cyB8PSBQT0xMSU47CiAKLQkJCQlpZiAoIWJ1ZmZlcl9lbXB0eSgmZC0+ YnVmZmVyKSkKKwkJCQlpZiAoIWJ1ZmZlcl9lbXB0eSgmZC0+YnVmZmVyW0NPTlNPTEVfVFlQRV9Q Vl0pKQogCQkJCQlldmVudHMgfD0gUE9MTE9VVDsKIAogCQkJCWlmIChldmVudHMpCi0JCQkJCWQt Pm1hc3Rlcl9wb2xsZmRfaWR4ID0KLQkJCQkJCXNldF9mZHMoZC0+bWFzdGVyX2ZkLAotCQkJCQkJ CWV2ZW50c3xQT0xMUFJJKTsKKwkJCQkJZC0+bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09MRV9UWVBF X1BWXSA9CisJCQkJCQlzZXRfZmRzKGQtPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfUFZdLAorCQkJ CQkJCQlldmVudHN8UE9MTFBSSSk7CisJCQl9CisKKwkJCWlmIChkLT52Y29uX2VuYWJsZWQgJiYg ZC0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9WQ09OXSAhPSAtMSkgeworCQkJCXNob3J0IGV2ZW50 cyA9IDA7CisJCQkJaWYgKCFkLT5pc19kZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhkLCBDT05TT0xF X1RZUEVfVkNPTikpCisJCQkJCWV2ZW50cyB8PSBQT0xMSU47CisKKwkJCQlpZiAoIWJ1ZmZlcl9l bXB0eSgmZC0+YnVmZmVyW0NPTlNPTEVfVFlQRV9WQ09OXSkpCisJCQkJCWV2ZW50cyB8PSBQT0xM T1VUOworCisJCQkJaWYgKGV2ZW50cykKKwkJCQkJZC0+bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09M RV9UWVBFX1ZDT05dID0KKwkJCQkJCXNldF9mZHMoZC0+bWFzdGVyX2ZkW0NPTlNPTEVfVFlQRV9W Q09OXSwKKwkJCQkJCQkJZXZlbnRzfFBPTExQUkkpOwogCQkJfQogCQl9CiAKQEAgLTExNjYsNiAr MTM0NiwxNiBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCiAJCWZvciAoZCA9IGRvbV9oZWFkOyBk OyBkID0gbikgewogCQkJbiA9IGQtPm5leHQ7CisKKwkJCS8qCisJCQkgKiBDaGVjayBpZiB0aGUg ZGF0YSBwZW5kaW5nIGZsYWcgaXMgc2V0IGZvciBhbnkgb2YgdGhlIGNvbnNvbGVzLgorCQkJICog SWYgeWVzIHRoZW4gc2VydmljZSB0aG9zZSBmaXJzdC4KKwkJCSAqLworCQkJaWYgKCBkLT5jb25z b2xlX2RhdGFfcGVuZGluZyAmICgxPDxDT05TT0xFX1RZUEVfUFYpICkKKwkJCQlidWZmZXJfYXBw ZW5kKGQsIENPTlNPTEVfVFlQRV9QVik7CisJCQllbHNlIGlmICggZC0+Y29uc29sZV9kYXRhX3Bl bmRpbmcgJiAoMTw8Q09OU09MRV9UWVBFX1ZDT04pICkKKwkJCQlidWZmZXJfYXBwZW5kKGQsIENP TlNPTEVfVFlQRV9WQ09OKTsKKwogCQkJaWYgKGQtPmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9B TExPV0FOQ0UpIHsKIAkJCQlpZiAoZC0+eGNlX2hhbmRsZSAhPSBOVUxMICYmCiAJCQkJICAgIGQt PnhjZV9wb2xsZmRfaWR4ICE9IC0xICYmCkBAIC0xMTc2LDIyICsxMzY2LDM2IEBAIHZvaWQgaGFu ZGxlX2lvKHZvaWQpCiAJCQkJICAgIGhhbmRsZV9yaW5nX3JlYWQoZCk7CiAJCQl9CiAKLQkJCWlm IChkLT5tYXN0ZXJfZmQgIT0gLTEgJiYgZC0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKLQkJ CQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCWlmIChkLT5tYXN0 ZXJfZmRbQ09OU09MRV9UWVBFX1BWXSAhPSAtMSAmJiBkLT5tYXN0ZXJfcG9sbGZkX2lkeFtDT05T T0xFX1RZUEVfUFZdICE9IC0xKSB7CisJCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeFtD T05TT0xFX1RZUEVfUFZdXS5yZXZlbnRzICYKKwkJCQkgICAgfihQT0xMSU58UE9MTE9VVHxQT0xM UFJJKSkKKwkJCQkJZG9tYWluX2hhbmRsZV9icm9rZW5fdHR5KGQsIGRvbWFpbl9pc192YWxpZChk LT5kb21pZCkpOworCQkJCWVsc2UgeworCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4 W0NPTlNPTEVfVFlQRV9QVl1dLnJldmVudHMgJgorCQkJCQkgICAgUE9MTElOKQorCQkJCQkJaGFu ZGxlX3R0eV9yZWFkKGQsIENPTlNPTEVfVFlQRV9QVik7CisJCQkJCWlmIChmZHNbZC0+bWFzdGVy X3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1BWXV0ucmV2ZW50cyAmCisJCQkJCSAgICBQT0xMT1VU KQorCQkJCQkJaGFuZGxlX3R0eV93cml0ZShkLCBDT05TT0xFX1RZUEVfUFYpOworCQkJCX0KKwkJ CX0KKworCQkJaWYgKGQtPm1hc3Rlcl9mZFtDT05TT0xFX1RZUEVfVkNPTl0gIT0gLTEgJiYgZC0+ bWFzdGVyX3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1ZDT05dICE9IC0xKSB7CisJCQkJaWYgKGZk c1tkLT5tYXN0ZXJfcG9sbGZkX2lkeFtDT05TT0xFX1RZUEVfVkNPTl1dLnJldmVudHMgJgogCQkJ CSAgICB+KFBPTExJTnxQT0xMT1VUfFBPTExQUkkpKQotCQkJCQlkb21haW5faGFuZGxlX2Jyb2tl bl90dHkoZCwKLQkJCQkJCSAgIGRvbWFpbl9pc192YWxpZChkLT5kb21pZCkpOworCQkJCQlkb21h aW5faGFuZGxlX2Jyb2tlbl90dHkoZCwgZG9tYWluX2lzX3ZhbGlkKGQtPmRvbWlkKSk7CiAJCQkJ ZWxzZSB7Ci0JCQkJCWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJ CQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4W0NPTlNPTEVfVFlQRV9WQ09OXV0ucmV2ZW50 cyAmCiAJCQkJCSAgICBQT0xMSU4pCi0JCQkJCQloYW5kbGVfdHR5X3JlYWQoZCk7Ci0JCQkJCWlm IChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJCQkJaGFuZGxlX3R0eV9y ZWFkKGQsIENPTlNPTEVfVFlQRV9WQ09OKTsKKwkJCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZk X2lkeFtDT05TT0xFX1RZUEVfVkNPTl1dLnJldmVudHMgJgogCQkJCQkgICAgUE9MTE9VVCkKLQkJ CQkJCWhhbmRsZV90dHlfd3JpdGUoZCk7CisJCQkJCQloYW5kbGVfdHR5X3dyaXRlKGQsIENPTlNP TEVfVFlQRV9WQ09OKTsKIAkJCQl9CiAJCQl9CiAKLQkJCWQtPnhjZV9wb2xsZmRfaWR4ID0gZC0+ bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKKwkJCWQtPnhjZV9wb2xsZmRfaWR4ID0gZC0+bWFzdGVy X3BvbGxmZF9pZHhbQ09OU09MRV9UWVBFX1BWXSA9CisJCQkJCQkJCQlkLT5tYXN0ZXJfcG9sbGZk X2lkeFtDT05TT0xFX1RZUEVfVkNPTl0gPSAtMTsKIAogCQkJaWYgKGQtPmxhc3Rfc2VlbiAhPSBl bnVtX3Bhc3MpCiAJCQkJc2h1dGRvd25fZG9tYWluKGQpOwotLSAKMi43LjQKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK