From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 08/27 v10] xen/arm: vpl011: Modify xenconsole to define and use a new console structure Date: Fri, 22 Sep 2017 13:53:07 +0530 Message-ID: <1506068606-17066-9-git-send-email-bhupinder.thakur@linaro.org> References: <1506068606-17066-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dvJFi-0003pE-NT for xen-devel@lists.xenproject.org; Fri, 22 Sep 2017 08:24:02 +0000 Received: by mail-pf0-f175.google.com with SMTP id x78so231867pff.10 for ; Fri, 22 Sep 2017 01:24:00 -0700 (PDT) In-Reply-To: <1506068606-17066-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 WGVuY29uc29sZSB1c2VzIGEgZG9tYWluIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyBjb25zb2xl IHNwZWNpZmljIGZpZWxkcy4gVGhpcwpwYXRjaCBkZWZpbmVzIGEgbmV3IGNvbnNvbGUgc3RydWN0 dXJlLCB3aGljaCB3b3VsZCBiZSB1c2VkIGJ5IHRoZSB4ZW5jb25zb2xlCmZ1bmN0aW9ucyB0byBw ZXJmb3JtIGNvbnNvbGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBsaWtlIHJlYWRpbmcvd3JpdGluZyBk YXRhIGZyb20vdG8KdGhlIGNvbnNvbGUgcmluZyBidWZmZXIgb3IgcmVhZGluZy93cml0aW5nIGRh dGEgZnJvbS90byBjb25zb2xlIHR0eS4KClRoaXMgcGF0Y2ggaXMgaW4gcHJlcGFyYXRpb24gdG8g c3VwcG9ydCBtdWx0aXBsZSBjb25zb2xlcyB0byBzdXBwb3J0IHZ1YXJ0IGNvbnNvbGUuCgpTaWdu ZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhha3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+ ClJldmlld2VkLWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+ CkFja2VkLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ0M6IElhbiBKYWNr c29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDQzogV2VpIExpdSA8d2VpLmxpdTJAY2l0 cml4LmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4K Q0M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+CgpDaGFuZ2VzIHNpbmNlIHY0 OgotIE1vdmVkIHRoZSBmb2xsb3dpbmcgZmllbGRzIGZyb20gdGhlIHN0cnVjdCBkb21haW4gdG8g c3RydWN0IGNvbnNvbGU6CiAgLT54ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlOwogIC0+aW50 IHhjZV9wb2xsZmRfaWR4OwogIC0+aW50IGV2ZW50X2NvdW50OwogIC0+bG9uZyBsb25nIG5leHRf cGVyaW9kOwoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBUaGUgY2hhbmdlcyBpbiB4ZW5jb25zb2xlIGhh dmUgYmVlbiBzcGxpdCBpbnRvIGZvdXIgcGF0Y2hlcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGF0Y2gK ICB3aGljaCBtb2RpZmllcyB0aGUgeGVuY29uc29sZSB0byB1c2UgYSBuZXcgY29uc29sZSBzdHJ1 Y3R1cmUuCgpDaGFuZ2VzIHNpbmNlIHYyOgotIERlZmluZWQgYSBuZXcgZnVuY3Rpb24gY29uc29s ZV9jcmVhdGVfcmluZygpIHdoaWNoIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIGFuZCAKICBldmVu dCBjaGFubmVsIGEgbmV3IGNvbnNvbGUuIGRvbWFpbl9jcmVhdGVfcmluZygpIHVzZXMgdGhpcyBm dW5jdGlvbiB0byBzZXR1cAogIGEgY29uc29sZS4KLSBUaGlzIHBhdGNoIGRvZXMgbm90IGNvbnRh aW4gdnVhcnQgc3BlY2lmaWMgY2hhbmdlcywgd2hpY2ggd291bGQgYmUgaW50cm9kdWNlZCBpbgog IHRoZSBuZXh0IHBhdGNoLgotIENoYW5nZXMgZm9yIGtlZXBpbmcgdGhlIFBWIGxvZyBmaWxlIG5h bWUgdW5jaGFuZ2VkLgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBTcGxpdCB0aGUgZG9tYWluIHN0cnV0 dXJlIHRvIGEgc2VwYXJhdGUgY29uc29sZSBzdHJ1Y3R1cmUKLSBNb2RpZmllZCB0aGUgZnVuY3Rp b25zIHRvIG9wZXJhdGUgb24gdGhlIGNvbnNvbGUgc3RydXR1cmUKLSBSZXBsYWNlZCByZXBldGl0 aXZlIHBlciBjb25zb2xlIGNvZGUgd2l0aCBnZW5lcmljIGNvZGUKCiB0b29scy9jb25zb2xlL2Rh ZW1vbi9pby5jIHwgMjk5ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMTM0IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25zb2xl L2RhZW1vbi9pby5jCmluZGV4IGU4MDMzZDIuLjMwY2QxNjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Nv bnNvbGUvZGFlbW9uL2lvLmMKKysrIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwpAQCAtODks MjUgKzg5LDMwIEBAIHN0cnVjdCBidWZmZXIgewogCXNpemVfdCBtYXhfY2FwYWNpdHk7CiB9Owog Ci1zdHJ1Y3QgZG9tYWluIHsKLQlpbnQgZG9taWQ7CitzdHJ1Y3QgY29uc29sZSB7CiAJaW50IG1h c3Rlcl9mZDsKIAlpbnQgbWFzdGVyX3BvbGxmZF9pZHg7CiAJaW50IHNsYXZlX2ZkOwogCWludCBs b2dfZmQ7Ci0JYm9vbCBpc19kZWFkOwotCXVuc2lnbmVkIGxhc3Rfc2VlbjsKIAlzdHJ1Y3QgYnVm ZmVyIGJ1ZmZlcjsKLQlzdHJ1Y3QgZG9tYWluICpuZXh0OwogCWNoYXIgKmNvbnNwYXRoOwogCWlu dCByaW5nX3JlZjsKLQl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IGxvY2FsX3BvcnQ7Ci0JeGVu ZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCByZW1vdGVfcG9ydDsKIAl4ZW5ldnRjaG5faGFuZGxlICp4 Y2VfaGFuZGxlOwogCWludCB4Y2VfcG9sbGZkX2lkeDsKLQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZh Y2UgKmludGVyZmFjZTsKIAlpbnQgZXZlbnRfY291bnQ7CiAJbG9uZyBsb25nIG5leHRfcGVyaW9k OworCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgbG9jYWxfcG9ydDsKKwl4ZW5ldnRjaG5fcG9y dF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0OworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50 ZXJmYWNlOworCXN0cnVjdCBkb21haW4gKmQ7Cit9OworCitzdHJ1Y3QgZG9tYWluIHsKKwlpbnQg ZG9taWQ7CisJYm9vbCBpc19kZWFkOworCXVuc2lnbmVkIGxhc3Rfc2VlbjsKKwlzdHJ1Y3QgZG9t YWluICpuZXh0OworCXN0cnVjdCBjb25zb2xlIGNvbnNvbGU7CiB9OwogCiBzdGF0aWMgc3RydWN0 IGRvbWFpbiAqZG9tX2hlYWQ7CkBAIC0xNjAsOSArMTY1LDEwIEBAIHN0YXRpYyBpbnQgd3JpdGVf d2l0aF90aW1lc3RhbXAoaW50IGZkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc3osCiAKIHN0 YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGRvbWFpbiAqZG9tKQogewotCXN0cnVjdCBi dWZmZXIgKmJ1ZmZlciA9ICZkb20tPmJ1ZmZlcjsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRv bS0+Y29uc29sZTsKKwlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSAmY29uLT5idWZmZXI7CiAJWEVO Q09OU19SSU5HX0lEWCBjb25zLCBwcm9kLCBzaXplOwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFj ZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50 ZiA9IGNvbi0+aW50ZXJmYWNlOwogCiAJY29ucyA9IGludGYtPm91dF9jb25zOwogCXByb2QgPSBp bnRmLT5vdXRfcHJvZDsKQEAgLTE4NywyMiArMTkzLDIyIEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9h cHBlbmQoc3RydWN0IGRvbWFpbiAqZG9tKQogCiAJeGVuX21iKCk7CiAJaW50Zi0+b3V0X2NvbnMg PSBjb25zOwotCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBkb20tPmxvY2FsX3Bv cnQpOworCXhlbmV2dGNobl9ub3RpZnkoY29uLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQp OwogCiAJLyogR2V0IHRoZSBkYXRhIHRvIHRoZSBsb2dmaWxlIGFzIGVhcmx5IGFzIHBvc3NpYmxl IGJlY2F1c2UgaWYKIAkgKiBubyBvbmUgaXMgbGlzdGVuaW5nIG9uIHRoZSBjb25zb2xlIHB0eSB0 aGVuIGl0IHdpbGwgZmlsbCB1cAogCSAqIGFuZCBoYW5kbGVfdHR5X3dyaXRlIHdpbGwgc3RvcCBi ZWluZyBjYWxsZWQuCiAJICovCi0JaWYgKGRvbS0+bG9nX2ZkICE9IC0xKSB7CisJaWYgKGNvbi0+ bG9nX2ZkICE9IC0xKSB7CiAJCWludCBsb2dyZXQ7CiAJCWlmIChsb2dfdGltZV9ndWVzdCkgewog CQkJbG9ncmV0ID0gd3JpdGVfd2l0aF90aW1lc3RhbXAoCi0JCQkJZG9tLT5sb2dfZmQsCisJCQkJ Y29uLT5sb2dfZmQsCiAJCQkJYnVmZmVyLT5kYXRhICsgYnVmZmVyLT5zaXplIC0gc2l6ZSwKIAkJ CQlzaXplLCAmbG9nX3RpbWVfZ3Vlc3RfbmVlZHRzKTsKIAkJfSBlbHNlIHsKIAkJCWxvZ3JldCA9 IHdyaXRlX2FsbCgKLQkJCQlkb20tPmxvZ19mZCwKKwkJCQljb24tPmxvZ19mZCwKIAkJCQlidWZm ZXItPmRhdGEgKyBidWZmZXItPnNpemUgLSBzaXplLAogCQkJCXNpemUpOwogCQl9CkBAIC0zMzgs MTQgKzM0NCwxNiBAQCBzdGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4g KmRvbSkKIAogc3RhdGljIHZvaWQgZG9tYWluX2Nsb3NlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20p CiB7Ci0JaWYgKGRvbS0+bWFzdGVyX2ZkICE9IC0xKSB7Ci0JCWNsb3NlKGRvbS0+bWFzdGVyX2Zk KTsKLQkJZG9tLT5tYXN0ZXJfZmQgPSAtMTsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+ Y29uc29sZTsKKworCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAtMSkgeworCQljbG9zZShjb24tPm1h c3Rlcl9mZCk7CisJCWNvbi0+bWFzdGVyX2ZkID0gLTE7CiAJfQogCi0JaWYgKGRvbS0+c2xhdmVf ZmQgIT0gLTEpIHsKLQkJY2xvc2UoZG9tLT5zbGF2ZV9mZCk7Ci0JCWRvbS0+c2xhdmVfZmQgPSAt MTsKKwlpZiAoY29uLT5zbGF2ZV9mZCAhPSAtMSkgeworCQljbG9zZShjb24tPnNsYXZlX2ZkKTsK KwkJY29uLT5zbGF2ZV9mZCA9IC0xOwogCX0KIH0KIApAQCAtNDE4LDExICs0MjYsMTIgQEAgc3Rh dGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCiAJY2hhciAqZGF0 YTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCB0ZXJtaW9zIHRlcm07CisJc3RydWN0IGNv bnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CiAKLQlhc3NlcnQoZG9tLT5zbGF2ZV9mZCA9PSAt MSk7Ci0JYXNzZXJ0KGRvbS0+bWFzdGVyX2ZkID09IC0xKTsKKwlhc3NlcnQoY29uLT5zbGF2ZV9m ZCA9PSAtMSk7CisJYXNzZXJ0KGNvbi0+bWFzdGVyX2ZkID09IC0xKTsKIAotCWlmIChvcGVucHR5 KCZkb20tPm1hc3Rlcl9mZCwgJmRvbS0+c2xhdmVfZmQsIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkg eworCWlmIChvcGVucHR5KCZjb24tPm1hc3Rlcl9mZCwgJmNvbi0+c2xhdmVfZmQsIE5VTEwsIE5V TEwsIE5VTEwpIDwgMCkgewogCQllcnIgPSBlcnJubzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxl ZCB0byBjcmVhdGUgdHR5IGZvciBkb21haW4tJWQgIgogCQkgICAgICAiKGVycm5vID0gJWksICVz KSIsCkBAIC00MzAsNyArNDM5LDcgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1 Y3QgZG9tYWluICpkb20pCiAJCXJldHVybiAwOwogCX0KIAotCWlmICh0Y2dldGF0dHIoZG9tLT5z bGF2ZV9mZCwgJnRlcm0pIDwgMCkgeworCWlmICh0Y2dldGF0dHIoY29uLT5zbGF2ZV9mZCwgJnRl cm0pIDwgMCkgewogCQllcnIgPSBlcnJubzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBn ZXQgdHR5IGF0dHJpYnV0ZXMgZm9yIGRvbWFpbi0lZCAiCiAJCQkiKGVycm5vID0gJWksICVzKSIs CkBAIC00MzgsNyArNDQ3LDcgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3Qg ZG9tYWluICpkb20pCiAJCWdvdG8gb3V0OwogCX0KIAljZm1ha2VyYXcoJnRlcm0pOwotCWlmICh0 Y3NldGF0dHIoZG9tLT5zbGF2ZV9mZCwgVENTQU5PVywgJnRlcm0pIDwgMCkgeworCWlmICh0Y3Nl dGF0dHIoY29uLT5zbGF2ZV9mZCwgVENTQU5PVywgJnRlcm0pIDwgMCkgewogCQllcnIgPSBlcnJu bzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBzZXQgdHR5IGF0dHJpYnV0ZXMgZm9yIGRv bWFpbi0lZCAiCiAJCQkiKGVycm5vID0gJWksICVzKSIsCkBAIC00NDYsNyArNDU1LDcgQEAgc3Rh dGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCiAJCWdvdG8gb3V0 OwogCX0KIAotCWlmICgoc2xhdmUgPSBwdHNuYW1lKGRvbS0+bWFzdGVyX2ZkKSkgPT0gTlVMTCkg eworCWlmICgoc2xhdmUgPSBwdHNuYW1lKGNvbi0+bWFzdGVyX2ZkKSkgPT0gTlVMTCkgewogCQll cnIgPSBlcnJubzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgc2xhdmUgbmFtZSBm b3IgZG9tYWluLSVkICIKIAkJICAgICAgIihlcnJubyA9ICVpLCAlcykiLApAQCAtNDU0LDE4ICs0 NjMsMTggQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20p CiAJCWdvdG8gb3V0OwogCX0KIAotCXN1Y2Nlc3MgPSBhc3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0 IiwgZG9tLT5jb25zcGF0aCkgIT0KKwlzdWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIlcy9saW1p dCIsIGNvbi0+Y29uc3BhdGgpICE9CiAJCS0xOwogCWlmICghc3VjY2VzcykKIAkJZ290byBvdXQ7 CiAJZGF0YSA9IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCAmbGVuKTsKIAlpZiAoZGF0YSkg ewotCQlkb20tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0b3VsKGRhdGEsIDAsIDApOworCQlj b24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0b3VsKGRhdGEsIDAsIDApOwogCQlmcmVlKGRh dGEpOwogCX0KIAlmcmVlKHBhdGgpOwogCi0Jc3VjY2VzcyA9IChhc3ByaW50ZigmcGF0aCwgIiVz L3R0eSIsIGRvbS0+Y29uc3BhdGgpICE9IC0xKTsKKwlzdWNjZXNzID0gKGFzcHJpbnRmKCZwYXRo LCAiJXMvdHR5IiwgY29uLT5jb25zcGF0aCkgIT0gLTEpOwogCWlmICghc3VjY2VzcykKIAkJZ290 byBvdXQ7CiAJc3VjY2VzcyA9IHhzX3dyaXRlKHhzLCBYQlRfTlVMTCwgcGF0aCwgc2xhdmUsIHN0 cmxlbihzbGF2ZSkpOwpAQCAtNDczLDcgKzQ4Miw3IEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0 ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQogCWlmICghc3VjY2VzcykKIAkJZ290byBvdXQ7CiAK LQlpZiAoZmNudGwoZG9tLT5tYXN0ZXJfZmQsIEZfU0VURkwsIE9fTk9OQkxPQ0spID09IC0xKQor CWlmIChmY250bChjb24tPm1hc3Rlcl9mZCwgRl9TRVRGTCwgT19OT05CTE9DSykgPT0gLTEpCiAJ CWdvdG8gb3V0OwogCiAJcmV0dXJuIDE7CkBAIC01MTksMjkgKzUyOCwzMiBAQCBzdGF0aWMgaW50 IHhzX2dhdGhlcihzdHJ1Y3QgeHNfaGFuZGxlICp4cywgY29uc3QgY2hhciAqZGlyLCAuLi4pCiAK IHN0YXRpYyB2b2lkIGRvbWFpbl91bm1hcF9pbnRlcmZhY2Uoc3RydWN0IGRvbWFpbiAqZG9tKQog ewotCWlmIChkb20tPmludGVyZmFjZSA9PSBOVUxMKQorCXN0cnVjdCBjb25zb2xlICpjb24gPSAm ZG9tLT5jb25zb2xlOworCisJaWYgKGNvbi0+aW50ZXJmYWNlID09IE5VTEwpCiAJCXJldHVybjsK LQlpZiAoeGd0X2hhbmRsZSAmJiBkb20tPnJpbmdfcmVmID09IC0xKQotCQl4ZW5nbnR0YWJfdW5t YXAoeGd0X2hhbmRsZSwgZG9tLT5pbnRlcmZhY2UsIDEpOworCWlmICh4Z3RfaGFuZGxlICYmIGNv bi0+cmluZ19yZWYgPT0gLTEpCisJCXhlbmdudHRhYl91bm1hcCh4Z3RfaGFuZGxlLCBjb24tPmlu dGVyZmFjZSwgMSk7CiAJZWxzZQotCQltdW5tYXAoZG9tLT5pbnRlcmZhY2UsIFhDX1BBR0VfU0la RSk7Ci0JZG9tLT5pbnRlcmZhY2UgPSBOVUxMOwotCWRvbS0+cmluZ19yZWYgPSAtMTsKKwkJbXVu bWFwKGNvbi0+aW50ZXJmYWNlLCBYQ19QQUdFX1NJWkUpOworCWNvbi0+aW50ZXJmYWNlID0gTlVM TDsKKwljb24tPnJpbmdfcmVmID0gLTE7CiB9CiAgCiBzdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVf cmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCiB7CiAJaW50IGVyciwgcmVtb3RlX3BvcnQsIHJpbmdf cmVmLCByYzsKIAljaGFyICp0eXBlLCBwYXRoW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgY29uc29sZSAq Y29uID0gJmRvbS0+Y29uc29sZTsKIAotCWVyciA9IHhzX2dhdGhlcih4cywgZG9tLT5jb25zcGF0 aCwKKwllcnIgPSB4c19nYXRoZXIoeHMsIGNvbi0+Y29uc3BhdGgsCiAJCQkicmluZy1yZWYiLCAi JXUiLCAmcmluZ19yZWYsCiAJCQkicG9ydCIsICIlaSIsICZyZW1vdGVfcG9ydCwKIAkJCU5VTEwp OwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0Jc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgp LCAiJXMvdHlwZSIsIGRvbS0+Y29uc3BhdGgpOworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRo KSwgIiVzL3R5cGUiLCBjb24tPmNvbnNwYXRoKTsKIAl0eXBlID0geHNfcmVhZCh4cywgWEJUX05V TEwsIHBhdGgsIE5VTEwpOwogCWlmICh0eXBlICYmIHN0cmNtcCh0eXBlLCAieGVuY29uc29sZWQi KSAhPSAwKSB7CiAJCWZyZWUodHlwZSk7CkBAIC01NTAsNzcgKzU2Miw3NyBAQCBzdGF0aWMgaW50 IGRvbWFpbl9jcmVhdGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCiAJZnJlZSh0eXBlKTsKIAog CS8qIElmIHVzaW5nIHJpbmdfcmVmIGFuZCBpdCBoYXMgY2hhbmdlZCwgcmVtYXAgKi8KLQlpZiAo cmluZ19yZWYgIT0gZG9tLT5yaW5nX3JlZiAmJiBkb20tPnJpbmdfcmVmICE9IC0xKQorCWlmIChy aW5nX3JlZiAhPSBjb24tPnJpbmdfcmVmICYmIGNvbi0+cmluZ19yZWYgIT0gLTEpCiAJCWRvbWFp bl91bm1hcF9pbnRlcmZhY2UoZG9tKTsKIAotCWlmICghZG9tLT5pbnRlcmZhY2UgJiYgeGd0X2hh bmRsZSkgeworCWlmICghY29uLT5pbnRlcmZhY2UgJiYgeGd0X2hhbmRsZSkgewogCQkvKiBQcmVm ZXIgdXNpbmcgZ3JhbnQgdGFibGUgKi8KLQkJZG9tLT5pbnRlcmZhY2UgPSB4ZW5nbnR0YWJfbWFw X2dyYW50X3JlZih4Z3RfaGFuZGxlLAorCQljb24tPmludGVyZmFjZSA9IHhlbmdudHRhYl9tYXBf Z3JhbnRfcmVmKHhndF9oYW5kbGUsCiAJCQlkb20tPmRvbWlkLCBHTlRUQUJfUkVTRVJWRURfQ09O U09MRSwKIAkJCVBST1RfUkVBRHxQUk9UX1dSSVRFKTsKLQkJZG9tLT5yaW5nX3JlZiA9IC0xOwor CQljb24tPnJpbmdfcmVmID0gLTE7CiAJfQotCWlmICghZG9tLT5pbnRlcmZhY2UpIHsKKwlpZiAo IWNvbi0+aW50ZXJmYWNlKSB7CiAJCS8qIEZhbGwgYmFjayB0byB4Y19tYXBfZm9yZWlnbl9yYW5n ZSAqLwotCQlkb20tPmludGVyZmFjZSA9IHhjX21hcF9mb3JlaWduX3JhbmdlKAorCQljb24tPmlu dGVyZmFjZSA9IHhjX21hcF9mb3JlaWduX3JhbmdlKAogCQkJeGMsIGRvbS0+ZG9taWQsIFhDX1BB R0VfU0laRSwKIAkJCVBST1RfUkVBRHxQUk9UX1dSSVRFLAogCQkJKHVuc2lnbmVkIGxvbmcpcmlu Z19yZWYpOwotCQlpZiAoZG9tLT5pbnRlcmZhY2UgPT0gTlVMTCkgeworCQlpZiAoY29uLT5pbnRl cmZhY2UgPT0gTlVMTCkgewogCQkJZXJyID0gRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJ ZG9tLT5yaW5nX3JlZiA9IHJpbmdfcmVmOworCQljb24tPnJpbmdfcmVmID0gcmluZ19yZWY7CiAJ fQogCiAJLyogR28gbm8gZnVydGhlciBpZiBwb3J0IGhhcyBub3QgY2hhbmdlZCBhbmQgd2UgYXJl IHN0aWxsIGJvdW5kLiAqLwotCWlmIChyZW1vdGVfcG9ydCA9PSBkb20tPnJlbW90ZV9wb3J0KSB7 CisJaWYgKHJlbW90ZV9wb3J0ID09IGNvbi0+cmVtb3RlX3BvcnQpIHsKIAkJeGNfZXZ0Y2huX3N0 YXR1c190IHN0YXR1cyA9IHsKIAkJCS5kb20gPSBET01JRF9TRUxGLAotCQkJLnBvcnQgPSBkb20t PmxvY2FsX3BvcnQgfTsKKwkJCS5wb3J0ID0gY29uLT5sb2NhbF9wb3J0IH07CiAJCWlmICgoeGNf ZXZ0Y2huX3N0YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKIAkJICAgIChzdGF0dXMuc3RhdHVz ID09IEVWVENITlNUQVRfaW50ZXJkb21haW4pKQogCQkJZ290byBvdXQ7CiAJfQogCi0JZG9tLT5s b2NhbF9wb3J0ID0gLTE7Ci0JZG9tLT5yZW1vdGVfcG9ydCA9IC0xOwotCWlmIChkb20tPnhjZV9o YW5kbGUgIT0gTlVMTCkKLQkJeGVuZXZ0Y2huX2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7CisJY29u LT5sb2NhbF9wb3J0ID0gLTE7CisJY29uLT5yZW1vdGVfcG9ydCA9IC0xOworCWlmIChjb24tPnhj ZV9oYW5kbGUgIT0gTlVMTCkKKwkJeGVuZXZ0Y2huX2Nsb3NlKGNvbi0+eGNlX2hhbmRsZSk7CiAK IAkvKiBPcGVuaW5nIGV2dGNobiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIGNvbnNvbGUgaXMgYSBi aXQKIAkgKiB3YXN0ZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZC4u LiAqLwotCWRvbS0+eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVuKE5VTEwsIDApOwotCWlmIChk b20tPnhjZV9oYW5kbGUgPT0gTlVMTCkgeworCWNvbi0+eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9v cGVuKE5VTEwsIDApOworCWlmIChjb24tPnhjZV9oYW5kbGUgPT0gTlVMTCkgewogCQllcnIgPSBl cnJubzsKIAkJZ290byBvdXQ7CiAJfQogIAotCXJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21h aW4oZG9tLT54Y2VfaGFuZGxlLAorCXJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oY29u LT54Y2VfaGFuZGxlLAogCQlkb20tPmRvbWlkLCByZW1vdGVfcG9ydCk7CiAKIAlpZiAocmMgPT0g LTEpIHsKIAkJZXJyID0gZXJybm87Ci0JCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUp OwotCQlkb20tPnhjZV9oYW5kbGUgPSBOVUxMOworCQl4ZW5ldnRjaG5fY2xvc2UoY29uLT54Y2Vf aGFuZGxlKTsKKwkJY29uLT54Y2VfaGFuZGxlID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQotCWRv bS0+bG9jYWxfcG9ydCA9IHJjOwotCWRvbS0+cmVtb3RlX3BvcnQgPSByZW1vdGVfcG9ydDsKKwlj b24tPmxvY2FsX3BvcnQgPSByYzsKKwljb24tPnJlbW90ZV9wb3J0ID0gcmVtb3RlX3BvcnQ7CiAK LQlpZiAoZG9tLT5tYXN0ZXJfZmQgPT0gLTEpIHsKKwlpZiAoY29uLT5tYXN0ZXJfZmQgPT0gLTEp IHsKIAkJaWYgKCFkb21haW5fY3JlYXRlX3R0eShkb20pKSB7CiAJCQllcnIgPSBlcnJubzsKLQkJ CXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwotCQkJZG9tLT54Y2VfaGFuZGxlID0g TlVMTDsKLQkJCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwotCQkJZG9tLT5yZW1vdGVfcG9ydCA9IC0x OworCQkJeGVuZXZ0Y2huX2Nsb3NlKGNvbi0+eGNlX2hhbmRsZSk7CisJCQljb24tPnhjZV9oYW5k bGUgPSBOVUxMOworCQkJY29uLT5sb2NhbF9wb3J0ID0gLTE7CisJCQljb24tPnJlbW90ZV9wb3J0 ID0gLTE7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChsb2dfZ3Vlc3QgJiYgKGRvbS0+ bG9nX2ZkID09IC0xKSkKLQkJZG9tLT5sb2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkb20pOwor CWlmIChsb2dfZ3Vlc3QgJiYgKGNvbi0+bG9nX2ZkID09IC0xKSkKKwkJY29uLT5sb2dfZmQgPSBj cmVhdGVfZG9tYWluX2xvZyhkb20pOwogCiAgb3V0OgogCXJldHVybiBlcnI7CkBAIC02MzAsMTYg KzY0MiwxNyBAQCBzdGF0aWMgYm9vbCB3YXRjaF9kb21haW4oc3RydWN0IGRvbWFpbiAqZG9tLCBi b29sIHdhdGNoKQogewogCWNoYXIgZG9taWRfc3RyWzMgKyBNQVhfU1RSTEVOKGRvbS0+ZG9taWQp XTsKIAlib29sIHN1Y2Nlc3M7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7 CiAKIAlzbnByaW50Zihkb21pZF9zdHIsIHNpemVvZihkb21pZF9zdHIpLCAiZG9tJXUiLCBkb20t PmRvbWlkKTsKIAlpZiAod2F0Y2gpIHsKLQkJc3VjY2VzcyA9IHhzX3dhdGNoKHhzLCBkb20tPmNv bnNwYXRoLCBkb21pZF9zdHIpOworCQlzdWNjZXNzID0geHNfd2F0Y2goeHMsIGNvbi0+Y29uc3Bh dGgsIGRvbWlkX3N0cik7CiAJCWlmIChzdWNjZXNzKQogCQkJZG9tYWluX2NyZWF0ZV9yaW5nKGRv bSk7CiAJCWVsc2UKLQkJCXhzX3Vud2F0Y2goeHMsIGRvbS0+Y29uc3BhdGgsIGRvbWlkX3N0cik7 CisJCQl4c191bndhdGNoKHhzLCBjb24tPmNvbnNwYXRoLCBkb21pZF9zdHIpOwogCX0gZWxzZSB7 Ci0JCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhzLCBkb20tPmNvbnNwYXRoLCBkb21pZF9zdHIpOwor CQlzdWNjZXNzID0geHNfdW53YXRjaCh4cywgY29uLT5jb25zcGF0aCwgZG9taWRfc3RyKTsKIAl9 CiAKIAlyZXR1cm4gc3VjY2VzczsKQEAgLTY1MSw2ICs2NjQsNyBAQCBzdGF0aWMgc3RydWN0IGRv bWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiAJc3RydWN0IGRvbWFpbiAqZG9tOwogCWNo YXIgKnM7CiAJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCBjb25zb2xlICpjb247CiAKIAlp ZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAwKSB7CiAJCWRvbG9nKExP R19FUlIsICJDYW5ub3QgZ2V0IHRpbWUgb2YgZGF5ICVzOiVzOkwlZCIsCkBAIC02NjcsMjUgKzY4 MSwyNiBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiAK IAlkb20tPmRvbWlkID0gZG9taWQ7CiAKLQlkb20tPmNvbnNwYXRoID0geHNfZ2V0X2RvbWFpbl9w YXRoKHhzLCBkb20tPmRvbWlkKTsKLQlzID0gcmVhbGxvYyhkb20tPmNvbnNwYXRoLCBzdHJsZW4o ZG9tLT5jb25zcGF0aCkgKworCWNvbiA9ICZkb20tPmNvbnNvbGU7CisJY29uLT5jb25zcGF0aCA9 IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7CisJcyA9IHJlYWxsb2MoY29uLT5j b25zcGF0aCwgc3RybGVuKGNvbi0+Y29uc3BhdGgpICsKIAkJICAgIHN0cmxlbigiL2NvbnNvbGUi KSArIDEpOwogCWlmIChzID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCWRvbS0+Y29uc3BhdGggPSBz OwotCXN0cmNhdChkb20tPmNvbnNwYXRoLCAiL2NvbnNvbGUiKTsKKwljb24tPmNvbnNwYXRoID0g czsKKwlzdHJjYXQoY29uLT5jb25zcGF0aCwgIi9jb25zb2xlIik7CiAKLQlkb20tPm1hc3Rlcl9m ZCA9IC0xOwotCWRvbS0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKLQlkb20tPnNsYXZlX2ZkID0g LTE7Ci0JZG9tLT5sb2dfZmQgPSAtMTsKLQlkb20tPnhjZV9wb2xsZmRfaWR4ID0gLTE7CisJY29u LT5tYXN0ZXJfZmQgPSAtMTsKKwljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7CisJY29uLT5z bGF2ZV9mZCA9IC0xOworCWNvbi0+bG9nX2ZkID0gLTE7CisJY29uLT54Y2VfcG9sbGZkX2lkeCA9 IC0xOwogCi0JZG9tLT5uZXh0X3BlcmlvZCA9ICgobG9uZyBsb25nKXRzLnR2X3NlYyAqIDEwMDAp ICsgKHRzLnR2X25zZWMgLyAxMDAwMDAwKSArIFJBVEVfTElNSVRfUEVSSU9EOworCWNvbi0+bmV4 dF9wZXJpb2QgPSAoKGxvbmcgbG9uZyl0cy50dl9zZWMgKiAxMDAwKSArICh0cy50dl9uc2VjIC8g MTAwMDAwMCkgKyBSQVRFX0xJTUlUX1BFUklPRDsKIAotCWRvbS0+cmluZ19yZWYgPSAtMTsKLQlk b20tPmxvY2FsX3BvcnQgPSAtMTsKLQlkb20tPnJlbW90ZV9wb3J0ID0gLTE7CisJY29uLT5yaW5n X3JlZiA9IC0xOworCWNvbi0+bG9jYWxfcG9ydCA9IC0xOworCWNvbi0+cmVtb3RlX3BvcnQgPSAt MTsKIAogCWlmICghd2F0Y2hfZG9tYWluKGRvbSwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwpAQCAtNjk3 LDcgKzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVfZG9tYWluKGludCBkb21p ZCkKIAogCXJldHVybiBkb207CiAgb3V0OgotCWZyZWUoZG9tLT5jb25zcGF0aCk7CisJZnJlZShj b24tPmNvbnNwYXRoKTsKIAlmcmVlKGRvbSk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03MjksMzAg Kzc0NCwzNCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSkK IAogc3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKIHsKKwlzdHJ1 Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CisKIAlkb21haW5fY2xvc2VfdHR5KGQpOwog Ci0JaWYgKGQtPmxvZ19mZCAhPSAtMSkgewotCQljbG9zZShkLT5sb2dfZmQpOwotCQlkLT5sb2df ZmQgPSAtMTsKKwlpZiAoY29uLT5sb2dfZmQgIT0gLTEpIHsKKwkJY2xvc2UoY29uLT5sb2dfZmQp OworCQljb24tPmxvZ19mZCA9IC0xOwogCX0KIAotCWZyZWUoZC0+YnVmZmVyLmRhdGEpOwotCWQt PmJ1ZmZlci5kYXRhID0gTlVMTDsKKwlmcmVlKGNvbi0+YnVmZmVyLmRhdGEpOworCWNvbi0+YnVm ZmVyLmRhdGEgPSBOVUxMOwogCi0JZnJlZShkLT5jb25zcGF0aCk7Ci0JZC0+Y29uc3BhdGggPSBO VUxMOworCWZyZWUoY29uLT5jb25zcGF0aCk7CisJY29uLT5jb25zcGF0aCA9IE5VTEw7CiAKIAly ZW1vdmVfZG9tYWluKGQpOwogfQogCiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9kb21haW4oc3RydWN0 IGRvbWFpbiAqZCkKIHsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CisKIAlk LT5pc19kZWFkID0gdHJ1ZTsKIAl3YXRjaF9kb21haW4oZCwgZmFsc2UpOwogCWRvbWFpbl91bm1h cF9pbnRlcmZhY2UoZCk7Ci0JaWYgKGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkKLQkJeGVuZXZ0Y2hu X2Nsb3NlKGQtPnhjZV9oYW5kbGUpOwotCWQtPnhjZV9oYW5kbGUgPSBOVUxMOworCWlmIChjb24t PnhjZV9oYW5kbGUgIT0gTlVMTCkKKwkJeGVuZXZ0Y2huX2Nsb3NlKGNvbi0+eGNlX2hhbmRsZSk7 CisJY29uLT54Y2VfaGFuZGxlID0gTlVMTDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGVudW1fcGFz cyA9IDA7CkBAIC03ODIsNyArODAxLDggQEAgc3RhdGljIHZvaWQgZW51bV9kb21haW5zKHZvaWQp CiAKIHN0YXRpYyBpbnQgcmluZ19mcmVlX2J5dGVzKHN0cnVjdCBkb21haW4gKmRvbSkKIHsKLQlz dHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBkb20tPmludGVyZmFjZTsKKwlzdHJ1Y3Qg Y29uc29sZSAqY29uID0gJmRvbS0+Y29uc29sZTsKKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2Ug KmludGYgPSBjb24tPmludGVyZmFjZTsKIAlYRU5DT05TX1JJTkdfSURYIGNvbnMsIHByb2QsIHNw YWNlOwogCiAJY29ucyA9IGludGYtPmluX2NvbnM7CkBAIC04MTIsNyArODMyLDggQEAgc3RhdGlj IHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKIAlzc2l6ZV90IGxlbiA9 IDA7CiAJY2hhciBtc2dbODBdOwogCWludCBpOwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAq aW50ZiA9IGRvbS0+aW50ZXJmYWNlOworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25z b2xlOworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOwog CVhFTkNPTlNfUklOR19JRFggcHJvZDsKIAogCWlmIChkb20tPmlzX2RlYWQpCkBAIC04MjUsNyAr ODQ2LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkK IAlpZiAobGVuID4gc2l6ZW9mKG1zZykpCiAJCWxlbiA9IHNpemVvZihtc2cpOwogCi0JbGVuID0g cmVhZChkb20tPm1hc3Rlcl9mZCwgbXNnLCBsZW4pOworCWxlbiA9IHJlYWQoY29uLT5tYXN0ZXJf ZmQsIG1zZywgbGVuKTsKIAkvKgogCSAqIE5vdGU6IG9uIFNvbGFyaXMsIGxlbiA9PSAwIG1lYW5z IHRoZSBzbGF2ZSBjbG9zZWQsIGFuZCB0aGlzCiAJICogaXMgbm8gcHJvYmxlbSwgYnV0IExpbnV4 IGNhbid0IGhhbmRsZSB0aGlzIHVzZWZ1bGx5LCBzbyB3ZQpAQCAtODQxLDcgKzg2Miw3IEBAIHN0 YXRpYyB2b2lkIGhhbmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCiAJCX0KIAkJeGVu X3dtYigpOwogCQlpbnRmLT5pbl9wcm9kID0gcHJvZDsKLQkJeGVuZXZ0Y2huX25vdGlmeShkb20t PnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7CisJCXhlbmV2dGNobl9ub3RpZnkoY29uLT54 Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQpOwogCX0gZWxzZSB7CiAJCWRvbWFpbl9jbG9zZV90 dHkoZG9tKTsKIAkJc2h1dGRvd25fZG9tYWluKGRvbSk7CkBAIC04NTEsMzcgKzg3MiwzOSBAQCBz dGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQogc3RhdGljIHZv aWQgaGFuZGxlX3R0eV93cml0ZShzdHJ1Y3QgZG9tYWluICpkb20pCiB7CiAJc3NpemVfdCBsZW47 CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CiAKIAlpZiAoZG9tLT5pc19k ZWFkKQogCQlyZXR1cm47CiAKLQlsZW4gPSB3cml0ZShkb20tPm1hc3Rlcl9mZCwgZG9tLT5idWZm ZXIuZGF0YSArIGRvbS0+YnVmZmVyLmNvbnN1bWVkLAotCQkgICAgZG9tLT5idWZmZXIuc2l6ZSAt IGRvbS0+YnVmZmVyLmNvbnN1bWVkKTsKKwlsZW4gPSB3cml0ZShjb24tPm1hc3Rlcl9mZCwgY29u LT5idWZmZXIuZGF0YSArIGNvbi0+YnVmZmVyLmNvbnN1bWVkLAorCQkgICAgY29uLT5idWZmZXIu c2l6ZSAtIGNvbi0+YnVmZmVyLmNvbnN1bWVkKTsKICAJaWYgKGxlbiA8IDEpIHsKIAkJZG9sb2co TE9HX0RFQlVHLCAiV3JpdGUgZmFpbGVkIG9uIGRvbWFpbiAlZDogJXpkLCAlZFxuIiwKIAkJICAg ICAgZG9tLT5kb21pZCwgbGVuLCBlcnJubyk7CiAJCWRvbWFpbl9oYW5kbGVfYnJva2VuX3R0eShk b20sIGRvbWFpbl9pc192YWxpZChkb20tPmRvbWlkKSk7CiAJfSBlbHNlIHsKLQkJYnVmZmVyX2Fk dmFuY2UoJmRvbS0+YnVmZmVyLCBsZW4pOworCQlidWZmZXJfYWR2YW5jZSgmY29uLT5idWZmZXIs IGxlbik7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21h aW4gKmRvbSkKIHsKIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHBvcnQ7CisJc3RydWN0IGNv bnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CiAKIAlpZiAoZG9tLT5pc19kZWFkKQogCQlyZXR1 cm47CiAKLQlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyhkb20tPnhjZV9oYW5kbGUpKSA9 PSAtMSkKKwlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyhjb24tPnhjZV9oYW5kbGUpKSA9 PSAtMSkKIAkJcmV0dXJuOwogCi0JZG9tLT5ldmVudF9jb3VudCsrOworCWNvbi0+ZXZlbnRfY291 bnQrKzsKIAogCWJ1ZmZlcl9hcHBlbmQoZG9tKTsKIAotCWlmIChkb20tPmV2ZW50X2NvdW50IDwg UkFURV9MSU1JVF9BTExPV0FOQ0UpCi0JCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZG9tLT54Y2Vf aGFuZGxlLCBwb3J0KTsKKwlpZiAoY29uLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dB TkNFKQorCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGNvbi0+eGNlX2hhbmRsZSwgcG9ydCk7CiB9 CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV94cyh2b2lkKQpAQCAtOTQ4LDkgKzk3MSwxMSBAQCBzdGF0 aWMgdm9pZCBoYW5kbGVfbG9nX3JlbG9hZCh2b2lkKQogCWlmIChsb2dfZ3Vlc3QpIHsKIAkJc3Ry dWN0IGRvbWFpbiAqZDsKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Ci0J CQlpZiAoZC0+bG9nX2ZkICE9IC0xKQotCQkJCWNsb3NlKGQtPmxvZ19mZCk7Ci0JCQlkLT5sb2df ZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkKTsKKwkJCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZC0+ Y29uc29sZTsKKworCQkJaWYgKGNvbi0+bG9nX2ZkICE9IC0xKQorCQkJCWNsb3NlKGNvbi0+bG9n X2ZkKTsKKwkJCWNvbi0+bG9nX2ZkID0gY3JlYXRlX2RvbWFpbl9sb2coZCk7CiAJCX0KIAl9CiAK QEAgLTEwNTksNDggKzEwODQsNTIgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJLyogUmUtY2Fs Y3VsYXRlIGFueSBldmVudCBjb3VudGVyIGFsbG93YW5jZXMgJiB1bmJsb2NrCiAJCSAgIGRvbWFp bnMgd2l0aCBuZXcgYWxsb3dhbmNlICovCiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+ bmV4dCkgeworCQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOworCiAJCQkvKiBD UyAxNjI1Nzo5NTVlZTRmYTEzNDUgaW50cm9kdWNlcyBhIDVtcyBmdXp6CiAJCQkgKiBmb3Igc2Vs ZWN0KCksIGl0IGlzIG5vdCBjbGVhciBwb2xsKCkgaGFzCiAJCQkgKiBzaW1pbGFyIGJlaGF2aW9y IChyZXR1cm5pbmcgYSBjb3VwbGUgb2YgbXMKIAkJCSAqIHNvb25lciB0aGFuIHJlcXVlc3RlZCkg YXMgd2VsbC4gSnVzdCBsZWF2ZQogCQkJICogdGhlIGZ1enogaGVyZS4gUmVtb3ZlIGl0IHdpdGgg YSBzZXBhcmF0ZQogCQkJICogcGF0Y2ggaWYgbmVjZXNzYXJ5ICovCi0JCQlpZiAoKG5vdys1KSA+ IGQtPm5leHRfcGVyaW9kKSB7Ci0JCQkJZC0+bmV4dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlU X1BFUklPRDsKLQkJCQlpZiAoZC0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0Up IHsKLQkJCQkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhkLT54Y2VfaGFuZGxlLCBkLT5sb2NhbF9w b3J0KTsKKwkJCWlmICgobm93KzUpID4gY29uLT5uZXh0X3BlcmlvZCkgeworCQkJCWNvbi0+bmV4 dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklPRDsKKwkJCQlpZiAoY29uLT5ldmVudF9j b3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgeworCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5t YXNrKGNvbi0+eGNlX2hhbmRsZSwgY29uLT5sb2NhbF9wb3J0KTsKIAkJCQl9Ci0JCQkJZC0+ZXZl bnRfY291bnQgPSAwOworCQkJCWNvbi0+ZXZlbnRfY291bnQgPSAwOwogCQkJfQogCQl9CiAKIAkJ Zm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Ci0JCQlpZiAoZC0+ZXZlbnRfY291 bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKKwkJCXN0cnVjdCBjb25zb2xlICpjb24gPSAm ZC0+Y29uc29sZTsKKworCQkJaWYgKGNvbi0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExP V0FOQ0UpIHsKIAkJCQkvKiBEZXRlcm1pbmUgaWYgd2UncmUgZ29pbmcgdG8gYmUgdGhlIG5leHQg dGltZSBzbGljZSB0byBleHBpcmUgKi8KIAkJCQlpZiAoIW5leHRfdGltZW91dCB8fAotCQkJCSAg ICBkLT5uZXh0X3BlcmlvZCA8IG5leHRfdGltZW91dCkKLQkJCQkJbmV4dF90aW1lb3V0ID0gZC0+ bmV4dF9wZXJpb2Q7Ci0JCQl9IGVsc2UgaWYgKGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkgeworCQkJ CSAgICBjb24tPm5leHRfcGVyaW9kIDwgbmV4dF90aW1lb3V0KQorCQkJCQluZXh0X3RpbWVvdXQg PSBjb24tPm5leHRfcGVyaW9kOworCQkJfSBlbHNlIGlmIChjb24tPnhjZV9oYW5kbGUgIT0gTlVM TCkgewogCQkJCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0YSB8fAotCQkJCSAgICAhZC0+YnVm ZmVyLm1heF9jYXBhY2l0eSB8fAotCQkJCSAgICBkLT5idWZmZXIuc2l6ZSA8IGQtPmJ1ZmZlci5t YXhfY2FwYWNpdHkpIHsKLQkJCQkJaW50IGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZChkLT54Y2Vf aGFuZGxlKTsKLQkJCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2dGNobl9mZCwKKwkJ CQkgICAgIWNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSB8fAorCQkJCSAgICBjb24tPmJ1ZmZlci5z aXplIDwgY29uLT5idWZmZXIubWF4X2NhcGFjaXR5KSB7CisJCQkJCWludCBldnRjaG5fZmQgPSB4 ZW5ldnRjaG5fZmQoY29uLT54Y2VfaGFuZGxlKTsKKwkJCQkJY29uLT54Y2VfcG9sbGZkX2lkeCA9 IHNldF9mZHMoZXZ0Y2huX2ZkLAogCQkJCQkJCQkgICAgUE9MTElOfFBPTExQUkkpOwogCQkJCX0K IAkJCX0KIAotCQkJaWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSkgeworCQkJaWYgKGNvbi0+bWFzdGVy X2ZkICE9IC0xKSB7CiAJCQkJc2hvcnQgZXZlbnRzID0gMDsKIAkJCQlpZiAoIWQtPmlzX2RlYWQg JiYgcmluZ19mcmVlX2J5dGVzKGQpKQogCQkJCQlldmVudHMgfD0gUE9MTElOOwogCi0JCQkJaWYg KCFidWZmZXJfZW1wdHkoJmQtPmJ1ZmZlcikpCisJCQkJaWYgKCFidWZmZXJfZW1wdHkoJmNvbi0+ YnVmZmVyKSkKIAkJCQkJZXZlbnRzIHw9IFBPTExPVVQ7CiAKIAkJCQlpZiAoZXZlbnRzKQotCQkJ CQlkLT5tYXN0ZXJfcG9sbGZkX2lkeCA9Ci0JCQkJCQlzZXRfZmRzKGQtPm1hc3Rlcl9mZCwKKwkJ CQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9CisJCQkJCQlzZXRfZmRzKGNvbi0+bWFzdGVyX2Zk LAogCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKIAkJCX0KIAkJfQpAQCAtMTE2MywzMyArMTE5Miwz NSBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCQl9CiAKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7 IGQgPSBuKSB7CisJCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CisKIAkJCW4g PSBkLT5uZXh0OwotCQkJaWYgKGQtPmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0Up IHsKLQkJCQlpZiAoZC0+eGNlX2hhbmRsZSAhPSBOVUxMICYmCi0JCQkJICAgIGQtPnhjZV9wb2xs ZmRfaWR4ICE9IC0xICYmCi0JCQkJICAgICEoZmRzW2QtPnhjZV9wb2xsZmRfaWR4XS5yZXZlbnRz ICYKKwkJCWlmIChjb24tPmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKKwkJ CQlpZiAoY29uLT54Y2VfaGFuZGxlICE9IE5VTEwgJiYKKwkJCQkgICAgY29uLT54Y2VfcG9sbGZk X2lkeCAhPSAtMSAmJgorCQkJCSAgICAhKGZkc1tjb24tPnhjZV9wb2xsZmRfaWR4XS5yZXZlbnRz ICYKIAkJCQkgICAgICB+KFBPTExJTnxQT0xMT1VUfFBPTExQUkkpKSAmJgotCQkJCSAgICAgIChm ZHNbZC0+eGNlX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJCSAgICAgIChmZHNbY29uLT54Y2Vf cG9sbGZkX2lkeF0ucmV2ZW50cyAmCiAJCQkJICAgICAgIFBPTExJTikpCiAJCQkJICAgIGhhbmRs ZV9yaW5nX3JlYWQoZCk7CiAJCQl9CiAKLQkJCWlmIChkLT5tYXN0ZXJfZmQgIT0gLTEgJiYgZC0+ bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKLQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRf aWR4XS5yZXZlbnRzICYKKwkJCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAtMSAmJiBjb24tPm1hc3Rl cl9wb2xsZmRfaWR4ICE9IC0xKSB7CisJCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4 XS5yZXZlbnRzICYKIAkJCQkgICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkKIAkJCQkJZG9t YWluX2hhbmRsZV9icm9rZW5fdHR5KGQsCiAJCQkJCQkgICBkb21haW5faXNfdmFsaWQoZC0+ZG9t aWQpKTsKIAkJCQllbHNlIHsKLQkJCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2 ZW50cyAmCisJCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCiAJ CQkJCSAgICBQT0xMSU4pCiAJCQkJCQloYW5kbGVfdHR5X3JlYWQoZCk7Ci0JCQkJCWlmIChmZHNb ZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJCQlpZiAoZmRzW2Nvbi0+bWFzdGVy X3BvbGxmZF9pZHhdLnJldmVudHMgJgogCQkJCQkgICAgUE9MTE9VVCkKIAkJCQkJCWhhbmRsZV90 dHlfd3JpdGUoZCk7CiAJCQkJfQogCQkJfQogCi0JCQlkLT54Y2VfcG9sbGZkX2lkeCA9IGQtPm1h c3Rlcl9wb2xsZmRfaWR4ID0gLTE7CisJCQljb24tPnhjZV9wb2xsZmRfaWR4ID0gY29uLT5tYXN0 ZXJfcG9sbGZkX2lkeCA9IC0xOwogCiAJCQlpZiAoZC0+bGFzdF9zZWVuICE9IGVudW1fcGFzcykK IAkJCQlzaHV0ZG93bl9kb21haW4oZCk7Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=