From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 08/14 v4] xen/arm: vpl011: Modify xenconsole to define and use a new console structure Date: Tue, 6 Jun 2017 15:33:59 +0530 Message-ID: <1496743439-15835-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIBLO-0003y8-OX for xen-devel@lists.xenproject.org; Tue, 06 Jun 2017 10:04:10 +0000 Received: by mail-pg0-f45.google.com with SMTP id v18so23422191pgb.1 for ; Tue, 06 Jun 2017 03:04:06 -0700 (PDT) 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+ Ci0tLQoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBUaGUgY2hhbmdlcyBpbiB4ZW5jb25zb2xlIGhhdmUg YmVlbiBzcGxpdCBpbnRvIGZvdXIgcGF0Y2hlcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGF0Y2gKICB3 aGljaCBtb2RpZmllcyB0aGUgeGVuY29uc29sZSB0byB1c2UgYSBuZXcgY29uc29sZSBzdHJ1Y3R1 cmUuCgpDaGFuZ2VzIHNpbmNlIHYyOgotIERlZmluZWQgYSBuZXcgZnVuY3Rpb24gY29uc29sZV9j cmVhdGVfcmluZygpIHdoaWNoIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIGFuZCAKICBldmVudCBj aGFubmVsIGEgbmV3IGNvbnNvbGUuIGRvbWFpbl9jcmVhdGVfcmluZygpIHVzZXMgdGhpcyBmdW5j dGlvbiB0byBzZXR1cAogIGEgY29uc29sZS4KLSBUaGlzIHBhdGNoIGRvZXMgbm90IGNvbnRhaW4g dnVhcnQgc3BlY2lmaWMgY2hhbmdlcywgd2hpY2ggd291bGQgYmUgaW50cm9kdWNlZCBpbgogIHRo ZSBuZXh0IHBhdGNoLgotIENoYW5nZXMgZm9yIGtlZXBpbmcgdGhlIFBWIGxvZyBmaWxlIG5hbWUg dW5jaGFuZ2VkLgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBTcGxpdCB0aGUgZG9tYWluIHN0cnV0dXJl IHRvIGEgc2VwYXJhdGUgY29uc29sZSBzdHJ1Y3R1cmUKLSBNb2RpZmllZCB0aGUgZnVuY3Rpb25z IHRvIG9wZXJhdGUgb24gdGhlIGNvbnNvbGUgc3RydXR1cmUKLSBSZXBsYWNlZCByZXBldGl0aXZl IHBlciBjb25zb2xlIGNvZGUgd2l0aCBnZW5lcmljIGNvZGUKCiB0b29scy9jb25zb2xlL2RhZW1v bi9pby5jIHwgMjI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyBiL3Rvb2xzL2NvbnNvbGUvZGFl bW9uL2lvLmMKaW5kZXggOTQ3ZjEzYS4uMDQwMmRkZiAxMDA2NDQKLS0tIGEvdG9vbHMvY29uc29s ZS9kYWVtb24vaW8uYworKysgYi90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCkBAIC04OSwyNSAr ODksMzAgQEAgc3RydWN0IGJ1ZmZlciB7CiAJc2l6ZV90IG1heF9jYXBhY2l0eTsKIH07CiAKLXN0 cnVjdCBkb21haW4gewotCWludCBkb21pZDsKK3N0cnVjdCBjb25zb2xlIHsKIAlpbnQgbWFzdGVy X2ZkOwogCWludCBtYXN0ZXJfcG9sbGZkX2lkeDsKIAlpbnQgc2xhdmVfZmQ7CiAJaW50IGxvZ19m ZDsKLQlib29sIGlzX2RlYWQ7Ci0JdW5zaWduZWQgbGFzdF9zZWVuOwogCXN0cnVjdCBidWZmZXIg YnVmZmVyOwotCXN0cnVjdCBkb21haW4gKm5leHQ7CiAJY2hhciAqY29uc3BhdGg7CiAJaW50IHJp bmdfcmVmOwogCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgbG9jYWxfcG9ydDsKIAl4ZW5ldnRj aG5fcG9ydF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0OworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFj ZSAqaW50ZXJmYWNlOworCXN0cnVjdCBkb21haW4gKmQ7Cit9OworCitzdHJ1Y3QgZG9tYWluIHsK KwlpbnQgZG9taWQ7CisJYm9vbCBpc19kZWFkOworCXVuc2lnbmVkIGxhc3Rfc2VlbjsKKwlzdHJ1 Y3QgZG9tYWluICpuZXh0OwogCXhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGU7CiAJaW50IHhj ZV9wb2xsZmRfaWR4OwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCWlu dCBldmVudF9jb3VudDsKIAlsb25nIGxvbmcgbmV4dF9wZXJpb2Q7CisJc3RydWN0IGNvbnNvbGUg Y29uc29sZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpkb21faGVhZDsKQEAgLTE2MCw5 ICsxNjUsMTAgQEAgc3RhdGljIGludCB3cml0ZV93aXRoX3RpbWVzdGFtcChpbnQgZmQsIGNvbnN0 IGNoYXIgKmRhdGEsIHNpemVfdCBzeiwKIAogc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1 Y3QgZG9tYWluICpkb20pCiB7Ci0Jc3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gJmRvbS0+YnVmZmVy OworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOworCXN0cnVjdCBidWZmZXIg KmJ1ZmZlciA9ICZjb24tPmJ1ZmZlcjsKIAlYRU5DT05TX1JJTkdfSURYIGNvbnMsIHByb2QsIHNp emU7Ci0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gZG9tLT5pbnRlcmZhY2U7CisJ c3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29uLT5pbnRlcmZhY2U7CiAKIAljb25z ID0gaW50Zi0+b3V0X2NvbnM7CiAJcHJvZCA9IGludGYtPm91dF9wcm9kOwpAQCAtMTg3LDIyICsx OTMsMjIgQEAgc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3QgZG9tYWluICpkb20pCiAK IAl4ZW5fbWIoKTsKIAlpbnRmLT5vdXRfY29ucyA9IGNvbnM7Ci0JeGVuZXZ0Y2huX25vdGlmeShk b20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7CisJeGVuZXZ0Y2huX25vdGlmeShkb20t PnhjZV9oYW5kbGUsIGNvbi0+bG9jYWxfcG9ydCk7CiAKIAkvKiBHZXQgdGhlIGRhdGEgdG8gdGhl IGxvZ2ZpbGUgYXMgZWFybHkgYXMgcG9zc2libGUgYmVjYXVzZSBpZgogCSAqIG5vIG9uZSBpcyBs aXN0ZW5pbmcgb24gdGhlIGNvbnNvbGUgcHR5IHRoZW4gaXQgd2lsbCBmaWxsIHVwCiAJICogYW5k IGhhbmRsZV90dHlfd3JpdGUgd2lsbCBzdG9wIGJlaW5nIGNhbGxlZC4KIAkgKi8KLQlpZiAoZG9t LT5sb2dfZmQgIT0gLTEpIHsKKwlpZiAoY29uLT5sb2dfZmQgIT0gLTEpIHsKIAkJaW50IGxvZ3Jl dDsKIAkJaWYgKGxvZ190aW1lX2d1ZXN0KSB7CiAJCQlsb2dyZXQgPSB3cml0ZV93aXRoX3RpbWVz dGFtcCgKLQkJCQlkb20tPmxvZ19mZCwKKwkJCQljb24tPmxvZ19mZCwKIAkJCQlidWZmZXItPmRh dGEgKyBidWZmZXItPnNpemUgLSBzaXplLAogCQkJCXNpemUsICZsb2dfdGltZV9ndWVzdF9uZWVk dHMpOwogCQl9IGVsc2UgewogCQkJbG9ncmV0ID0gd3JpdGVfYWxsKAotCQkJCWRvbS0+bG9nX2Zk LAorCQkJCWNvbi0+bG9nX2ZkLAogCQkJCWJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+c2l6ZSAtIHNp emUsCiAJCQkJc2l6ZSk7CiAJCX0KQEAgLTMzOCwxNCArMzQ0LDE2IEBAIHN0YXRpYyBpbnQgY3Jl YXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFpbiAqZG9tKQogCiBzdGF0aWMgdm9pZCBkb21haW5f Y2xvc2VfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIHsKLQlpZiAoZG9tLT5tYXN0ZXJfZmQgIT0g LTEpIHsKLQkJY2xvc2UoZG9tLT5tYXN0ZXJfZmQpOwotCQlkb20tPm1hc3Rlcl9mZCA9IC0xOwor CXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOworCisJaWYgKGNvbi0+bWFzdGVy X2ZkICE9IC0xKSB7CisJCWNsb3NlKGNvbi0+bWFzdGVyX2ZkKTsKKwkJY29uLT5tYXN0ZXJfZmQg PSAtMTsKIAl9CiAKLQlpZiAoZG9tLT5zbGF2ZV9mZCAhPSAtMSkgewotCQljbG9zZShkb20tPnNs YXZlX2ZkKTsKLQkJZG9tLT5zbGF2ZV9mZCA9IC0xOworCWlmIChjb24tPnNsYXZlX2ZkICE9IC0x KSB7CisJCWNsb3NlKGNvbi0+c2xhdmVfZmQpOworCQljb24tPnNsYXZlX2ZkID0gLTE7CiAJfQog fQogCkBAIC00MTgsMTEgKzQyNiwxMiBAQCBzdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVfdHR5KHN0 cnVjdCBkb21haW4gKmRvbSkKIAljaGFyICpkYXRhOwogCXVuc2lnbmVkIGludCBsZW47CiAJc3Ry dWN0IHRlcm1pb3MgdGVybTsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+Y29uc29sZTsK IAotCWFzc2VydChkb20tPnNsYXZlX2ZkID09IC0xKTsKLQlhc3NlcnQoZG9tLT5tYXN0ZXJfZmQg PT0gLTEpOworCWFzc2VydChjb24tPnNsYXZlX2ZkID09IC0xKTsKKwlhc3NlcnQoY29uLT5tYXN0 ZXJfZmQgPT0gLTEpOwogCi0JaWYgKG9wZW5wdHkoJmRvbS0+bWFzdGVyX2ZkLCAmZG9tLT5zbGF2 ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7CisJaWYgKG9wZW5wdHkoJmNvbi0+bWFzdGVy X2ZkLCAmY29uLT5zbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7CiAJCWVyciA9IGVy cm5vOwogCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSB0dHkgZm9yIGRvbWFpbi0l ZCAiCiAJCSAgICAgICIoZXJybm8gPSAlaSwgJXMpIiwKQEAgLTQzMCw3ICs0MzksNyBAQCBzdGF0 aWMgaW50IGRvbWFpbl9jcmVhdGVfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIAkJcmV0dXJuIDA7 CiAJfQogCi0JaWYgKHRjZ2V0YXR0cihkb20tPnNsYXZlX2ZkLCAmdGVybSkgPCAwKSB7CisJaWYg KHRjZ2V0YXR0cihjb24tPnNsYXZlX2ZkLCAmdGVybSkgPCAwKSB7CiAJCWVyciA9IGVycm5vOwog CQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGdldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9tYWlu LSVkICIKIAkJCSIoZXJybm8gPSAlaSwgJXMpIiwKQEAgLTQzOCw3ICs0NDcsNyBAQCBzdGF0aWMg aW50IGRvbWFpbl9jcmVhdGVfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIAkJZ290byBvdXQ7CiAJ fQogCWNmbWFrZXJhdygmdGVybSk7Ci0JaWYgKHRjc2V0YXR0cihkb20tPnNsYXZlX2ZkLCBUQ1NB Tk9XLCAmdGVybSkgPCAwKSB7CisJaWYgKHRjc2V0YXR0cihjb24tPnNsYXZlX2ZkLCBUQ1NBTk9X LCAmdGVybSkgPCAwKSB7CiAJCWVyciA9IGVycm5vOwogCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVk IHRvIHNldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9tYWluLSVkICIKIAkJCSIoZXJybm8gPSAlaSwg JXMpIiwKQEAgLTQ0Niw3ICs0NTUsNyBAQCBzdGF0aWMgaW50IGRvbWFpbl9jcmVhdGVfdHR5KHN0 cnVjdCBkb21haW4gKmRvbSkKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChzbGF2ZSA9IHB0c25h bWUoZG9tLT5tYXN0ZXJfZmQpKSA9PSBOVUxMKSB7CisJaWYgKChzbGF2ZSA9IHB0c25hbWUoY29u LT5tYXN0ZXJfZmQpKSA9PSBOVUxMKSB7CiAJCWVyciA9IGVycm5vOwogCQlkb2xvZyhMT0dfRVJS LCAiRmFpbGVkIHRvIGdldCBzbGF2ZSBuYW1lIGZvciBkb21haW4tJWQgIgogCQkgICAgICAiKGVy cm5vID0gJWksICVzKSIsCkBAIC00NTQsMTggKzQ2MywxOCBAQCBzdGF0aWMgaW50IGRvbWFpbl9j cmVhdGVfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3VjY2Vz cyA9IGFzcHJpbnRmKCZwYXRoLCAiJXMvbGltaXQiLCBkb20tPmNvbnNwYXRoKSAhPQorCXN1Y2Nl c3MgPSBhc3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0IiwgY29uLT5jb25zcGF0aCkgIT0KIAkJLTE7 CiAJaWYgKCFzdWNjZXNzKQogCQlnb3RvIG91dDsKIAlkYXRhID0geHNfcmVhZCh4cywgWEJUX05V TEwsIHBhdGgsICZsZW4pOwogCWlmIChkYXRhKSB7Ci0JCWRvbS0+YnVmZmVyLm1heF9jYXBhY2l0 eSA9IHN0cnRvdWwoZGF0YSwgMCwgMCk7CisJCWNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSA9IHN0 cnRvdWwoZGF0YSwgMCwgMCk7CiAJCWZyZWUoZGF0YSk7CiAJfQogCWZyZWUocGF0aCk7CiAKLQlz dWNjZXNzID0gKGFzcHJpbnRmKCZwYXRoLCAiJXMvdHR5IiwgZG9tLT5jb25zcGF0aCkgIT0gLTEp OworCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBhdGgsICIlcy90dHkiLCBjb24tPmNvbnNwYXRoKSAh PSAtMSk7CiAJaWYgKCFzdWNjZXNzKQogCQlnb3RvIG91dDsKIAlzdWNjZXNzID0geHNfd3JpdGUo eHMsIFhCVF9OVUxMLCBwYXRoLCBzbGF2ZSwgc3RybGVuKHNsYXZlKSk7CkBAIC00NzMsNyArNDgy LDcgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCiAJ aWYgKCFzdWNjZXNzKQogCQlnb3RvIG91dDsKIAotCWlmIChmY250bChkb20tPm1hc3Rlcl9mZCwg Rl9TRVRGTCwgT19OT05CTE9DSykgPT0gLTEpCisJaWYgKGZjbnRsKGNvbi0+bWFzdGVyX2ZkLCBG X1NFVEZMLCBPX05PTkJMT0NLKSA9PSAtMSkKIAkJZ290byBvdXQ7CiAKIAlyZXR1cm4gMTsKQEAg LTUxOSwyOSArNTI4LDMyIEBAIHN0YXRpYyBpbnQgeHNfZ2F0aGVyKHN0cnVjdCB4c19oYW5kbGUg KnhzLCBjb25zdCBjaGFyICpkaXIsIC4uLikKIAogc3RhdGljIHZvaWQgZG9tYWluX3VubWFwX2lu dGVyZmFjZShzdHJ1Y3QgZG9tYWluICpkb20pCiB7Ci0JaWYgKGRvbS0+aW50ZXJmYWNlID09IE5V TEwpCisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CisKKwlpZiAoY29uLT5p bnRlcmZhY2UgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmICh4Z3RfaGFuZGxlICYmIGRvbS0+cmlu Z19yZWYgPT0gLTEpCi0JCXhlbmdudHRhYl91bm1hcCh4Z3RfaGFuZGxlLCBkb20tPmludGVyZmFj ZSwgMSk7CisJaWYgKHhndF9oYW5kbGUgJiYgY29uLT5yaW5nX3JlZiA9PSAtMSkKKwkJeGVuZ250 dGFiX3VubWFwKHhndF9oYW5kbGUsIGNvbi0+aW50ZXJmYWNlLCAxKTsKIAllbHNlCi0JCW11bm1h cChkb20tPmludGVyZmFjZSwgWENfUEFHRV9TSVpFKTsKLQlkb20tPmludGVyZmFjZSA9IE5VTEw7 Ci0JZG9tLT5yaW5nX3JlZiA9IC0xOworCQltdW5tYXAoY29uLT5pbnRlcmZhY2UsIFhDX1BBR0Vf U0laRSk7CisJY29uLT5pbnRlcmZhY2UgPSBOVUxMOworCWNvbi0+cmluZ19yZWYgPSAtMTsKIH0K ICAKIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV9yaW5nKHN0cnVjdCBkb21haW4gKmRvbSkKIHsK IAlpbnQgZXJyLCByZW1vdGVfcG9ydCwgcmluZ19yZWYsIHJjOwogCWNoYXIgKnR5cGUsIHBhdGhb UEFUSF9NQVhdOworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOwogCi0JZXJy ID0geHNfZ2F0aGVyKHhzLCBkb20tPmNvbnNwYXRoLAorCWVyciA9IHhzX2dhdGhlcih4cywgY29u LT5jb25zcGF0aCwKIAkJCSJyaW5nLXJlZiIsICIldSIsICZyaW5nX3JlZiwKIAkJCSJwb3J0Iiwg IiVpIiwgJnJlbW90ZV9wb3J0LAogCQkJTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAK LQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgZG9tLT5jb25zcGF0aCk7 CisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvdHlwZSIsIGNvbi0+Y29uc3BhdGgp OwogCXR5cGUgPSB4c19yZWFkKHhzLCBYQlRfTlVMTCwgcGF0aCwgTlVMTCk7CiAJaWYgKHR5cGUg JiYgc3RyY21wKHR5cGUsICJ4ZW5jb25zb2xlZCIpICE9IDApIHsKIAkJZnJlZSh0eXBlKTsKQEAg LTU1MCw0MSArNTYyLDQxIEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV9yaW5nKHN0cnVjdCBk b21haW4gKmRvbSkKIAlmcmVlKHR5cGUpOwogCiAJLyogSWYgdXNpbmcgcmluZ19yZWYgYW5kIGl0 IGhhcyBjaGFuZ2VkLCByZW1hcCAqLwotCWlmIChyaW5nX3JlZiAhPSBkb20tPnJpbmdfcmVmICYm IGRvbS0+cmluZ19yZWYgIT0gLTEpCisJaWYgKHJpbmdfcmVmICE9IGNvbi0+cmluZ19yZWYgJiYg Y29uLT5yaW5nX3JlZiAhPSAtMSkKIAkJZG9tYWluX3VubWFwX2ludGVyZmFjZShkb20pOwogCi0J aWYgKCFkb20tPmludGVyZmFjZSAmJiB4Z3RfaGFuZGxlKSB7CisJaWYgKCFjb24tPmludGVyZmFj ZSAmJiB4Z3RfaGFuZGxlKSB7CiAJCS8qIFByZWZlciB1c2luZyBncmFudCB0YWJsZSAqLwotCQlk b20tPmludGVyZmFjZSA9IHhlbmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhndF9oYW5kbGUsCisJCWNv bi0+aW50ZXJmYWNlID0geGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKIAkJCWRv bS0+ZG9taWQsIEdOVFRBQl9SRVNFUlZFRF9DT05TT0xFLAogCQkJUFJPVF9SRUFEfFBST1RfV1JJ VEUpOwotCQlkb20tPnJpbmdfcmVmID0gLTE7CisJCWNvbi0+cmluZ19yZWYgPSAtMTsKIAl9Ci0J aWYgKCFkb20tPmludGVyZmFjZSkgeworCWlmICghY29uLT5pbnRlcmZhY2UpIHsKIAkJLyogRmFs bCBiYWNrIHRvIHhjX21hcF9mb3JlaWduX3JhbmdlICovCi0JCWRvbS0+aW50ZXJmYWNlID0geGNf bWFwX2ZvcmVpZ25fcmFuZ2UoCisJCWNvbi0+aW50ZXJmYWNlID0geGNfbWFwX2ZvcmVpZ25fcmFu Z2UoCiAJCQl4YywgZG9tLT5kb21pZCwgWENfUEFHRV9TSVpFLAogCQkJUFJPVF9SRUFEfFBST1Rf V1JJVEUsCiAJCQkodW5zaWduZWQgbG9uZylyaW5nX3JlZik7Ci0JCWlmIChkb20tPmludGVyZmFj ZSA9PSBOVUxMKSB7CisJCWlmIChjb24tPmludGVyZmFjZSA9PSBOVUxMKSB7CiAJCQllcnIgPSBF SU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlkb20tPnJpbmdfcmVmID0gcmluZ19yZWY7CisJ CWNvbi0+cmluZ19yZWYgPSByaW5nX3JlZjsKIAl9CiAKIAkvKiBHbyBubyBmdXJ0aGVyIGlmIHBv cnQgaGFzIG5vdCBjaGFuZ2VkIGFuZCB3ZSBhcmUgc3RpbGwgYm91bmQuICovCi0JaWYgKHJlbW90 ZV9wb3J0ID09IGRvbS0+cmVtb3RlX3BvcnQpIHsKKwlpZiAocmVtb3RlX3BvcnQgPT0gY29uLT5y ZW1vdGVfcG9ydCkgewogCQl4Y19ldnRjaG5fc3RhdHVzX3Qgc3RhdHVzID0gewogCQkJLmRvbSA9 IERPTUlEX1NFTEYsCi0JCQkucG9ydCA9IGRvbS0+bG9jYWxfcG9ydCB9OworCQkJLnBvcnQgPSBj b24tPmxvY2FsX3BvcnQgfTsKIAkJaWYgKCh4Y19ldnRjaG5fc3RhdHVzKHhjLCAmc3RhdHVzKSA9 PSAwKSAmJgogCQkgICAgKHN0YXR1cy5zdGF0dXMgPT0gRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbikp CiAJCQlnb3RvIG91dDsKIAl9CiAKLQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKLQlkb20tPnJlbW90 ZV9wb3J0ID0gLTE7CisJY29uLT5sb2NhbF9wb3J0ID0gLTE7CisJY29uLT5yZW1vdGVfcG9ydCA9 IC0xOwogCWlmIChkb20tPnhjZV9oYW5kbGUgIT0gTlVMTCkKIAkJeGVuZXZ0Y2huX2Nsb3NlKGRv bS0+eGNlX2hhbmRsZSk7CiAKQEAgLTYwNSwyMiArNjE3LDIyIEBAIHN0YXRpYyBpbnQgZG9tYWlu X2NyZWF0ZV9yaW5nKHN0cnVjdCBkb21haW4gKmRvbSkKIAkJZG9tLT54Y2VfaGFuZGxlID0gTlVM TDsKIAkJZ290byBvdXQ7CiAJfQotCWRvbS0+bG9jYWxfcG9ydCA9IHJjOwotCWRvbS0+cmVtb3Rl X3BvcnQgPSByZW1vdGVfcG9ydDsKKwljb24tPmxvY2FsX3BvcnQgPSByYzsKKwljb24tPnJlbW90 ZV9wb3J0ID0gcmVtb3RlX3BvcnQ7CiAKLQlpZiAoZG9tLT5tYXN0ZXJfZmQgPT0gLTEpIHsKKwlp ZiAoY29uLT5tYXN0ZXJfZmQgPT0gLTEpIHsKIAkJaWYgKCFkb21haW5fY3JlYXRlX3R0eShkb20p KSB7CiAJCQllcnIgPSBlcnJubzsKIAkJCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUp OwogCQkJZG9tLT54Y2VfaGFuZGxlID0gTlVMTDsKLQkJCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwot CQkJZG9tLT5yZW1vdGVfcG9ydCA9IC0xOworCQkJY29uLT5sb2NhbF9wb3J0ID0gLTE7CisJCQlj b24tPnJlbW90ZV9wb3J0ID0gLTE7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChsb2df Z3Vlc3QgJiYgKGRvbS0+bG9nX2ZkID09IC0xKSkKLQkJZG9tLT5sb2dfZmQgPSBjcmVhdGVfZG9t YWluX2xvZyhkb20pOworCWlmIChsb2dfZ3Vlc3QgJiYgKGNvbi0+bG9nX2ZkID09IC0xKSkKKwkJ Y29uLT5sb2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkb20pOwogCiAgb3V0OgogCXJldHVybiBl cnI7CkBAIC02MzAsMTYgKzY0MiwxNyBAQCBzdGF0aWMgYm9vbCB3YXRjaF9kb21haW4oc3RydWN0 IGRvbWFpbiAqZG9tLCBib29sIHdhdGNoKQogewogCWNoYXIgZG9taWRfc3RyWzMgKyBNQVhfU1RS TEVOKGRvbS0+ZG9taWQpXTsKIAlib29sIHN1Y2Nlc3M7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9 ICZkb20tPmNvbnNvbGU7CiAKIAlzbnByaW50Zihkb21pZF9zdHIsIHNpemVvZihkb21pZF9zdHIp LCAiZG9tJXUiLCBkb20tPmRvbWlkKTsKIAlpZiAod2F0Y2gpIHsKLQkJc3VjY2VzcyA9IHhzX3dh dGNoKHhzLCBkb20tPmNvbnNwYXRoLCBkb21pZF9zdHIpOworCQlzdWNjZXNzID0geHNfd2F0Y2go eHMsIGNvbi0+Y29uc3BhdGgsIGRvbWlkX3N0cik7CiAJCWlmIChzdWNjZXNzKQogCQkJZG9tYWlu X2NyZWF0ZV9yaW5nKGRvbSk7CiAJCWVsc2UKLQkJCXhzX3Vud2F0Y2goeHMsIGRvbS0+Y29uc3Bh dGgsIGRvbWlkX3N0cik7CisJCQl4c191bndhdGNoKHhzLCBjb24tPmNvbnNwYXRoLCBkb21pZF9z dHIpOwogCX0gZWxzZSB7Ci0JCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhzLCBkb20tPmNvbnNwYXRo LCBkb21pZF9zdHIpOworCQlzdWNjZXNzID0geHNfdW53YXRjaCh4cywgY29uLT5jb25zcGF0aCwg ZG9taWRfc3RyKTsKIAl9CiAKIAlyZXR1cm4gc3VjY2VzczsKQEAgLTY1MSw2ICs2NjQsNyBAQCBz dGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiAJc3RydWN0IGRv bWFpbiAqZG9tOwogCWNoYXIgKnM7CiAJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCBjb25z b2xlICpjb247CiAKIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAw KSB7CiAJCWRvbG9nKExPR19FUlIsICJDYW5ub3QgZ2V0IHRpbWUgb2YgZGF5ICVzOiVzOkwlZCIs CkBAIC02NjcsMjUgKzY4MSwyNiBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFp bihpbnQgZG9taWQpCiAKIAlkb20tPmRvbWlkID0gZG9taWQ7CiAKLQlkb20tPmNvbnNwYXRoID0g eHNfZ2V0X2RvbWFpbl9wYXRoKHhzLCBkb20tPmRvbWlkKTsKLQlzID0gcmVhbGxvYyhkb20tPmNv bnNwYXRoLCBzdHJsZW4oZG9tLT5jb25zcGF0aCkgKworCWNvbiA9ICZkb20tPmNvbnNvbGU7CisJ Y29uLT5jb25zcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7CisJcyA9 IHJlYWxsb2MoY29uLT5jb25zcGF0aCwgc3RybGVuKGNvbi0+Y29uc3BhdGgpICsKIAkJICAgIHN0 cmxlbigiL2NvbnNvbGUiKSArIDEpOwogCWlmIChzID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCWRv bS0+Y29uc3BhdGggPSBzOwotCXN0cmNhdChkb20tPmNvbnNwYXRoLCAiL2NvbnNvbGUiKTsKKwlj b24tPmNvbnNwYXRoID0gczsKKwlzdHJjYXQoY29uLT5jb25zcGF0aCwgIi9jb25zb2xlIik7CiAK LQlkb20tPm1hc3Rlcl9mZCA9IC0xOwotCWRvbS0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKLQlk b20tPnNsYXZlX2ZkID0gLTE7Ci0JZG9tLT5sb2dfZmQgPSAtMTsKKwljb24tPm1hc3Rlcl9mZCA9 IC0xOworCWNvbi0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKKwljb24tPnNsYXZlX2ZkID0gLTE7 CisJY29uLT5sb2dfZmQgPSAtMTsKIAlkb20tPnhjZV9wb2xsZmRfaWR4ID0gLTE7CiAKIAlkb20t Pm5leHRfcGVyaW9kID0gKChsb25nIGxvbmcpdHMudHZfc2VjICogMTAwMCkgKyAodHMudHZfbnNl YyAvIDEwMDAwMDApICsgUkFURV9MSU1JVF9QRVJJT0Q7CiAKLQlkb20tPnJpbmdfcmVmID0gLTE7 Ci0JZG9tLT5sb2NhbF9wb3J0ID0gLTE7Ci0JZG9tLT5yZW1vdGVfcG9ydCA9IC0xOworCWNvbi0+ cmluZ19yZWYgPSAtMTsKKwljb24tPmxvY2FsX3BvcnQgPSAtMTsKKwljb24tPnJlbW90ZV9wb3J0 ID0gLTE7CiAKIAlpZiAoIXdhdGNoX2RvbWFpbihkb20sIHRydWUpKQogCQlnb3RvIG91dDsKQEAg LTY5Nyw3ICs3MTIsNyBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQg ZG9taWQpCiAKIAlyZXR1cm4gZG9tOwogIG91dDoKLQlmcmVlKGRvbS0+Y29uc3BhdGgpOworCWZy ZWUoY29uLT5jb25zcGF0aCk7CiAJZnJlZShkb20pOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzI5 LDE4ICs3NDQsMjAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpk b20pCiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfZG9tYWluKHN0cnVjdCBkb21haW4gKmQpCiB7CisJ c3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOworCiAJZG9tYWluX2Nsb3NlX3R0eShk KTsKIAotCWlmIChkLT5sb2dfZmQgIT0gLTEpIHsKLQkJY2xvc2UoZC0+bG9nX2ZkKTsKLQkJZC0+ bG9nX2ZkID0gLTE7CisJaWYgKGNvbi0+bG9nX2ZkICE9IC0xKSB7CisJCWNsb3NlKGNvbi0+bG9n X2ZkKTsKKwkJY29uLT5sb2dfZmQgPSAtMTsKIAl9CiAKLQlmcmVlKGQtPmJ1ZmZlci5kYXRhKTsK LQlkLT5idWZmZXIuZGF0YSA9IE5VTEw7CisJZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKKwljb24t PmJ1ZmZlci5kYXRhID0gTlVMTDsKIAotCWZyZWUoZC0+Y29uc3BhdGgpOwotCWQtPmNvbnNwYXRo ID0gTlVMTDsKKwlmcmVlKGNvbi0+Y29uc3BhdGgpOworCWNvbi0+Y29uc3BhdGggPSBOVUxMOwog CiAJcmVtb3ZlX2RvbWFpbihkKTsKIH0KQEAgLTc4Miw3ICs3OTksOCBAQCBzdGF0aWMgdm9pZCBl bnVtX2RvbWFpbnModm9pZCkKIAogc3RhdGljIGludCByaW5nX2ZyZWVfYnl0ZXMoc3RydWN0IGRv bWFpbiAqZG9tKQogewotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50 ZXJmYWNlOworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOworCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOwogCVhFTkNPTlNfUklOR19J RFggY29ucywgcHJvZCwgc3BhY2U7CiAKIAljb25zID0gaW50Zi0+aW5fY29uczsKQEAgLTgxMiw3 ICs4MzAsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9t KQogCXNzaXplX3QgbGVuID0gMDsKIAljaGFyIG1zZ1s4MF07CiAJaW50IGk7Ci0Jc3RydWN0IHhl bmNvbnNfaW50ZXJmYWNlICppbnRmID0gZG9tLT5pbnRlcmZhY2U7CisJc3RydWN0IGNvbnNvbGUg KmNvbiA9ICZkb20tPmNvbnNvbGU7CisJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0g Y29uLT5pbnRlcmZhY2U7CiAJWEVOQ09OU19SSU5HX0lEWCBwcm9kOwogCiAJaWYgKGRvbS0+aXNf ZGVhZCkKQEAgLTgyNSw3ICs4NDQsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3Ry dWN0IGRvbWFpbiAqZG9tKQogCWlmIChsZW4gPiBzaXplb2YobXNnKSkKIAkJbGVuID0gc2l6ZW9m KG1zZyk7CiAKLQlsZW4gPSByZWFkKGRvbS0+bWFzdGVyX2ZkLCBtc2csIGxlbik7CisJbGVuID0g cmVhZChjb24tPm1hc3Rlcl9mZCwgbXNnLCBsZW4pOwogCS8qCiAJICogTm90ZTogb24gU29sYXJp cywgbGVuID09IDAgbWVhbnMgdGhlIHNsYXZlIGNsb3NlZCwgYW5kIHRoaXMKIAkgKiBpcyBubyBw cm9ibGVtLCBidXQgTGludXggY2FuJ3QgaGFuZGxlIHRoaXMgdXNlZnVsbHksIHNvIHdlCkBAIC04 NDEsNyArODYwLDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4g KmRvbSkKIAkJfQogCQl4ZW5fd21iKCk7CiAJCWludGYtPmluX3Byb2QgPSBwcm9kOwotCQl4ZW5l dnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgZG9tLT5sb2NhbF9wb3J0KTsKKwkJeGVuZXZ0 Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGNvbi0+bG9jYWxfcG9ydCk7CiAJfSBlbHNlIHsK IAkJZG9tYWluX2Nsb3NlX3R0eShkb20pOwogCQlzaHV0ZG93bl9kb21haW4oZG9tKTsKQEAgLTg1 MSwxOCArODcwLDE5IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9tYWlu ICpkb20pCiBzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3dyaXRlKHN0cnVjdCBkb21haW4gKmRvbSkK IHsKIAlzc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+Y29uc29sZTsK IAogCWlmIChkb20tPmlzX2RlYWQpCiAJCXJldHVybjsKIAotCWxlbiA9IHdyaXRlKGRvbS0+bWFz dGVyX2ZkLCBkb20tPmJ1ZmZlci5kYXRhICsgZG9tLT5idWZmZXIuY29uc3VtZWQsCi0JCSAgICBk b20tPmJ1ZmZlci5zaXplIC0gZG9tLT5idWZmZXIuY29uc3VtZWQpOworCWxlbiA9IHdyaXRlKGNv bi0+bWFzdGVyX2ZkLCBjb24tPmJ1ZmZlci5kYXRhICsgY29uLT5idWZmZXIuY29uc3VtZWQsCisJ CSAgICBjb24tPmJ1ZmZlci5zaXplIC0gY29uLT5idWZmZXIuY29uc3VtZWQpOwogIAlpZiAobGVu IDwgMSkgewogCQlkb2xvZyhMT0dfREVCVUcsICJXcml0ZSBmYWlsZWQgb24gZG9tYWluICVkOiAl emQsICVkXG4iLAogCQkgICAgICBkb20tPmRvbWlkLCBsZW4sIGVycm5vKTsKIAkJZG9tYWluX2hh bmRsZV9icm9rZW5fdHR5KGRvbSwgZG9tYWluX2lzX3ZhbGlkKGRvbS0+ZG9taWQpKTsKIAl9IGVs c2UgewotCQlidWZmZXJfYWR2YW5jZSgmZG9tLT5idWZmZXIsIGxlbik7CisJCWJ1ZmZlcl9hZHZh bmNlKCZjb24tPmJ1ZmZlciwgbGVuKTsKIAl9CiB9CiAKQEAgLTk0OCw5ICs5NjgsMTEgQEAgc3Rh dGljIHZvaWQgaGFuZGxlX2xvZ19yZWxvYWQodm9pZCkKIAlpZiAobG9nX2d1ZXN0KSB7CiAJCXN0 cnVjdCBkb21haW4gKmQ7CiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+bmV4dCkgewot CQkJaWYgKGQtPmxvZ19mZCAhPSAtMSkKLQkJCQljbG9zZShkLT5sb2dfZmQpOwotCQkJZC0+bG9n X2ZkID0gY3JlYXRlX2RvbWFpbl9sb2coZCk7CisJCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQt PmNvbnNvbGU7CisKKwkJCWlmIChjb24tPmxvZ19mZCAhPSAtMSkKKwkJCQljbG9zZShjb24tPmxv Z19mZCk7CisJCQljb24tPmxvZ19mZCA9IGNyZWF0ZV9kb21haW5fbG9nKGQpOwogCQl9CiAJfQog CkBAIC0xMDU5LDYgKzEwODEsOCBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCQkvKiBSZS1jYWxj dWxhdGUgYW55IGV2ZW50IGNvdW50ZXIgYWxsb3dhbmNlcyAmIHVuYmxvY2sKIAkJICAgZG9tYWlu cyB3aXRoIG5ldyBhbGxvd2FuY2UgKi8KIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5u ZXh0KSB7CisJCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CisKIAkJCS8qIENT IDE2MjU3Ojk1NWVlNGZhMTM0NSBpbnRyb2R1Y2VzIGEgNW1zIGZ1enoKIAkJCSAqIGZvciBzZWxl Y3QoKSwgaXQgaXMgbm90IGNsZWFyIHBvbGwoKSBoYXMKIAkJCSAqIHNpbWlsYXIgYmVoYXZpb3Ig KHJldHVybmluZyBhIGNvdXBsZSBvZiBtcwpAQCAtMTA2OCwxMyArMTA5MiwxNSBAQCB2b2lkIGhh bmRsZV9pbyh2b2lkKQogCQkJaWYgKChub3crNSkgPiBkLT5uZXh0X3BlcmlvZCkgewogCQkJCWQt Pm5leHRfcGVyaW9kID0gbm93ICsgUkFURV9MSU1JVF9QRVJJT0Q7CiAJCQkJaWYgKGQtPmV2ZW50 X2NvdW50ID49IFJBVEVfTElNSVRfQUxMT1dBTkNFKSB7Ci0JCQkJCSh2b2lkKXhlbmV2dGNobl91 bm1hc2soZC0+eGNlX2hhbmRsZSwgZC0+bG9jYWxfcG9ydCk7CisJCQkJCSh2b2lkKXhlbmV2dGNo bl91bm1hc2soZC0+eGNlX2hhbmRsZSwgY29uLT5sb2NhbF9wb3J0KTsKIAkJCQl9CiAJCQkJZC0+ ZXZlbnRfY291bnQgPSAwOwogCQkJfQogCQl9CiAKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQg PSBkLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CisKIAkJ CWlmIChkLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewogCQkJCS8qIERl dGVybWluZSBpZiB3ZSdyZSBnb2luZyB0byBiZSB0aGUgbmV4dCB0aW1lIHNsaWNlIHRvIGV4cGly ZSAqLwogCQkJCWlmICghbmV4dF90aW1lb3V0IHx8CkBAIC0xMDgyLDI1ICsxMTA4LDI1IEBAIHZv aWQgaGFuZGxlX2lvKHZvaWQpCiAJCQkJCW5leHRfdGltZW91dCA9IGQtPm5leHRfcGVyaW9kOwog CQkJfSBlbHNlIGlmIChkLT54Y2VfaGFuZGxlICE9IE5VTEwpIHsKIAkJCQlpZiAoZGlzY2FyZF9v dmVyZmxvd2VkX2RhdGEgfHwKLQkJCQkgICAgIWQtPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwKLQkJ CQkgICAgZC0+YnVmZmVyLnNpemUgPCBkLT5idWZmZXIubWF4X2NhcGFjaXR5KSB7CisJCQkJICAg ICFjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwKKwkJCQkgICAgY29uLT5idWZmZXIuc2l6ZSA8 IGNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSkgewogCQkJCQlpbnQgZXZ0Y2huX2ZkID0geGVuZXZ0 Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwogCQkJCQlkLT54Y2VfcG9sbGZkX2lkeCA9IHNldF9mZHMo ZXZ0Y2huX2ZkLAogCQkJCQkJCQkgICAgUE9MTElOfFBPTExQUkkpOwogCQkJCX0KIAkJCX0KIAot CQkJaWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSkgeworCQkJaWYgKGNvbi0+bWFzdGVyX2ZkICE9IC0x KSB7CiAJCQkJc2hvcnQgZXZlbnRzID0gMDsKIAkJCQlpZiAoIWQtPmlzX2RlYWQgJiYgcmluZ19m cmVlX2J5dGVzKGQpKQogCQkJCQlldmVudHMgfD0gUE9MTElOOwogCi0JCQkJaWYgKCFidWZmZXJf ZW1wdHkoJmQtPmJ1ZmZlcikpCisJCQkJaWYgKCFidWZmZXJfZW1wdHkoJmNvbi0+YnVmZmVyKSkK IAkJCQkJZXZlbnRzIHw9IFBPTExPVVQ7CiAKIAkJCQlpZiAoZXZlbnRzKQotCQkJCQlkLT5tYXN0 ZXJfcG9sbGZkX2lkeCA9Ci0JCQkJCQlzZXRfZmRzKGQtPm1hc3Rlcl9mZCwKKwkJCQkJY29uLT5t YXN0ZXJfcG9sbGZkX2lkeCA9CisJCQkJCQlzZXRfZmRzKGNvbi0+bWFzdGVyX2ZkLAogCQkJCQkJ CWV2ZW50c3xQT0xMUFJJKTsKIAkJCX0KIAkJfQpAQCAtMTE1OSw2ICsxMTg1LDggQEAgdm9pZCBo YW5kbGVfaW8odm9pZCkKIAkJfQogCiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gbikgewor CQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOworCiAJCQluID0gZC0+bmV4dDsK IAkJCWlmIChkLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKSB7CiAJCQkJaWYg KGQtPnhjZV9oYW5kbGUgIT0gTlVMTCAmJgpAQCAtMTE3MCwyMiArMTE5OCwyMiBAQCB2b2lkIGhh bmRsZV9pbyh2b2lkKQogCQkJCSAgICBoYW5kbGVfcmluZ19yZWFkKGQpOwogCQkJfQogCi0JCQlp ZiAoZC0+bWFzdGVyX2ZkICE9IC0xICYmIGQtPm1hc3Rlcl9wb2xsZmRfaWR4ICE9IC0xKSB7Ci0J CQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCisJCQlpZiAoY29uLT5t YXN0ZXJfZmQgIT0gLTEgJiYgY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkgeworCQkJCWlm IChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCiAJCQkJICAgIH4oUE9MTElO fFBPTExPVVR8UE9MTFBSSSkpCiAJCQkJCWRvbWFpbl9oYW5kbGVfYnJva2VuX3R0eShkLAogCQkJ CQkJICAgZG9tYWluX2lzX3ZhbGlkKGQtPmRvbWlkKSk7CiAJCQkJZWxzZSB7Ci0JCQkJCWlmIChm ZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJCQlpZiAoZmRzW2Nvbi0+bWFz dGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgogCQkJCQkgICAgUE9MTElOKQogCQkJCQkJaGFuZGxl X3R0eV9yZWFkKGQpOwotCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRz ICYKKwkJCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKIAkJCQkJ ICAgIFBPTExPVVQpCiAJCQkJCQloYW5kbGVfdHR5X3dyaXRlKGQpOwogCQkJCX0KIAkJCX0KIAot CQkJZC0+eGNlX3BvbGxmZF9pZHggPSBkLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOworCQkJZC0+ eGNlX3BvbGxmZF9pZHggPSBjb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7CiAKIAkJCWlmIChk LT5sYXN0X3NlZW4gIT0gZW51bV9wYXNzKQogCQkJCXNodXRkb3duX2RvbWFpbihkKTsKLS0gCjIu Ny40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==