From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 08/12 v3] xen/arm: vpl011: Modify xenconsole to support multiple consoles Date: Wed, 10 May 2017 20:05:14 +0530 Message-ID: <1494426918-32737-3-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-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 1d8SkR-0004qG-N3 for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:51 +0000 Received: by mail-pf0-f170.google.com with SMTP id e193so16900086pfh.0 for ; Wed, 10 May 2017 07:37:49 -0700 (PDT) In-Reply-To: <1494426918-32737-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 , Ian Jackson List-Id: xen-devel@lists.xenproject.org WGVuY29uc29sZSBzdXBwb3J0cyBvbmx5IFBWIGNvbnNvbGUgY3VycmVudGx5LiBUaGlzIHBhdGNo IGFkZHMgc3VwcG9ydApmb3Igc3VwcG9ydGluZyBtdWx0aXBsZSBjb25zb2xlcy4KClRoaXMgcGF0 Y2ggbW9kaWZpZXMgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJcyB1c2VkCmluIHhl bmNvbnNvbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25zb2xlcy4KCkNoYW5nZSBzdW1tYXJ5OgoK MS4gU3BsaXQgdGhlIGRvbWFpbiBzdHJ1Y3R1cmUgaW50byBhIGNvbnNvbGUgc3RydWN0dXJlIGFu ZCB0aGUKICAgZG9tYWluIHN0cnVjdHVyZSwgd2hlcmUgZWFjaCBjb25zb2xlIHN0cnVjdHVyZSBy ZXByZXNlbnRzIG9uZQogICBjb25zb2xlLgoKMi4gTW9kaWZ5IGRpZmZlcmVudCBBUElzIHN1Y2gg YXMgYnVmZmVyX2FwcGVuZCgpIGV0Yy4gdG8gdGFrZQogICBjb25zb2xlIHN0cnVjdHVyZSBhcyBp bnB1dCBhbmQgcGVyZm9ybSBwZXIgY29uc29sZSBzcGVjaWZpYwogICBvcGVyYXRpb25zLgoKMy4g RGVmaW5lIGEgZ2VuZXJpYyBjb25zb2xlX2NyZWF0ZV9yaW5nKCksIHdoaWNoIHNldHMgdXAgdGhl CiAgIHJpbmcgYnVmZmVyIGFuZCBldmVudCBjaGFubmVsIGZvciBlYWNoIGNvbnNvbGUuCgozLiBN b2RpZnkgZG9tYWluX2NyZWF0ZV9yaW5nKCkgdG8gdXNlIGNvbnNvbGVfY3JlYXRlX3JpbmcoKS4K CjQuIE1vZGlmaWNhdGlvbnMgaW4gaGFuZGxlX3JpbmdfcmVhZCgpIHRvIHJlYWQgcmluZyBidWZm ZXIgZGF0YQogICBmcm9tIG11bHRpcGxlIGNvbnNvbGVzLgoKNS4gQWRkIGxvZyBmaWxlIHN1cHBv cnQgZm9yIG11bHRpcGxlIGNvbnNvbGVzLgoKU2lnbmVkLW9mZi1ieTogQmh1cGluZGVyIFRoYWt1 ciA8Ymh1cGluZGVyLnRoYWt1ckBsaW5hcm8ub3JnPgotLS0KCkNoYW5nZXMgc2luY2UgdjI6Cgot IERlZmluZWQgYSBuZXcgZnVuY3Rpb24gY29uc29sZV9jcmVhdGVfcmluZygpIHdoaWNoIHNldHMg dXAgdGhlIHJpbmcgYnVmZmVyIGFuZCAKICBldmVudCBjaGFubmVsIGEgbmV3IGNvbnNvbGUuIGRv bWFpbl9jcmVhdGVfcmluZygpIHVzZXMgdGhpcyBmdW5jdGlvbiB0byBzZXR1cAogIGEgY29uc29s ZS4KLSBUaGlzIHBhdGNoIGRvZXMgbm90IGNvbnRhaW4gdnVhcnQgc3BlY2lmaWMgY2hhbmdlcywg d2hpY2ggd291bGQgYmUgaW50cm9kdWNlZCBpbgogIHRoZSBuZXh0IHBhdGNoLgotIENoYW5nZXMg Zm9yIGtlZXBpbmcgdGhlIFBWIGxvZyBmaWxlIG5hbWUgdW5jaGFuZ2VkLgoKQ2hhbmdlcyBzaW5j ZSB2MToKCi0gU3BsaXQgdGhlIGRvbWFpbiBzdHJ1dHVyZSB0byBhIHNlcGFyYXRlIGNvbnNvbGUg c3RydWN0dXJlCi0gTW9kaWZpZWQgdGhlIGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSBjb25z b2xlIHN0cnV0dXJlCi0gUmVwbGFjZWQgcmVwZXRpdGl2ZSBwZXIgY29uc29sZSBjb2RlIHdpdGgg Z2VuZXJpYyBjb2RlCgogdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyB8IDY1MCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDYw IGluc2VydGlvbnMoKyksIDE5MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9jb25z b2xlL2RhZW1vbi9pby5jIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwppbmRleCA3ZTZhODg2 Li45YmIxNGRlIDEwMDY0NAotLS0gYS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCisrKyBiL3Rv b2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKQEAgLTg5LDI5ICs4OSwxMzkgQEAgc3RydWN0IGJ1ZmZl ciB7CiAJc2l6ZV90IG1heF9jYXBhY2l0eTsKIH07CiAKLXN0cnVjdCBkb21haW4gewotCWludCBk b21pZDsKK3N0cnVjdCBjb25zb2xlIHsKKwljaGFyICp4c25hbWU7CisJY2hhciAqdHR5bmFtZTsK IAlpbnQgbWFzdGVyX2ZkOwogCWludCBtYXN0ZXJfcG9sbGZkX2lkeDsKIAlpbnQgc2xhdmVfZmQ7 CiAJaW50IGxvZ19mZDsKLQlib29sIGlzX2RlYWQ7Ci0JdW5zaWduZWQgbGFzdF9zZWVuOwogCXN0 cnVjdCBidWZmZXIgYnVmZmVyOwotCXN0cnVjdCBkb21haW4gKm5leHQ7Ci0JY2hhciAqY29uc3Bh dGg7CiAJaW50IHJpbmdfcmVmOwogCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgbG9jYWxfcG9y dDsKIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0OworCXN0cnVjdCB4ZW5j b25zX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBkb21haW4gKmQ7ICAvKiBSZWZlcmVu Y2UgdG8gdGhlIGRvbWFpbiBpdCBpcyBjb250YWluZWQgaW4uICovCisJY2hhciAqeHNwYXRoOwor CWludCAoKm1hcF9yaW5nX3JlZikoc3RydWN0IGNvbnNvbGUgKiwgaW50KTsKKwlib29sIG1hbmRh dG9yeTsKK307CisKK3N0cnVjdCBjb25zb2xlX2RhdGEgeworCWNoYXIgKnhzbmFtZTsKKwljaGFy ICp0dHluYW1lOworCWludCAoKm1hcGZ1bmMpKHN0cnVjdCBjb25zb2xlICosIGludCk7CisJYm9v bCBtYW5kYXRvcnk7Cit9OworCitzdGF0aWMgaW50IG1hcF9wdmNvbl9yaW5nX3JlZihzdHJ1Y3Qg Y29uc29sZSAqLCBpbnQgKTsKKworc3RhdGljIHN0cnVjdCBjb25zb2xlX2RhdGEgY29uc29sZV9k YXRhW10gPSB7CisKKwl7CisJCS54c25hbWUgPSAiL2NvbnNvbGUiLAorCQkudHR5bmFtZSA9ICJ0 dHkiLAorCQkubWFwZnVuYyA9IG1hcF9wdmNvbl9yaW5nX3JlZiwKKwkJLm1hbmRhdG9yeSA9IHRy dWUKKwl9LAorfTsKKworI2RlZmluZSBNQVhfQ09OU09MRSAoc2l6ZW9mKGNvbnNvbGVfZGF0YSkv c2l6ZW9mKHN0cnVjdCBjb25zb2xlX2RhdGEpKQorCitzdHJ1Y3QgZG9tYWluIHsKKwlpbnQgZG9t aWQ7CisJYm9vbCBpc19kZWFkOworCXVuc2lnbmVkIGxhc3Rfc2VlbjsKKwlzdHJ1Y3QgZG9tYWlu ICpuZXh0OwogCXhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGU7CiAJaW50IHhjZV9wb2xsZmRf aWR4OwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCWludCBldmVudF9j b3VudDsKIAlsb25nIGxvbmcgbmV4dF9wZXJpb2Q7CisJc3RydWN0IGNvbnNvbGUgY29uc29sZVtN QVhfQ09OU09MRV07CiB9OwogCiBzdGF0aWMgc3RydWN0IGRvbWFpbiAqZG9tX2hlYWQ7CiAKK3R5 cGVkZWYgdm9pZCAoKlZPSURfSVRFUl9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwordHlw ZWRlZiBib29sICgqQk9PTF9JVEVSX0ZVTkNfQVJHMSkoc3RydWN0IGNvbnNvbGUgKik7Cit0eXBl ZGVmIGludCAoKklOVF9JVEVSX0ZVTkNfQVJHMSkoc3RydWN0IGNvbnNvbGUgKik7Cit0eXBlZGVm IHZvaWQgKCpWT0lEX0lURVJfRlVOQ19BUkcyKShzdHJ1Y3QgY29uc29sZSAqLCAgdW5zaWduZWQg aW50KTsKK3R5cGVkZWYgaW50ICgqSU5UX0lURVJfRlVOQ19BUkczKShzdHJ1Y3QgY29uc29sZSAq LAorCQkJIHN0cnVjdCBkb21haW4gKmRvbSwgdm9pZCAqKik7CisKK3N0YXRpYyBpbmxpbmUgYm9v bCBjb25zb2xlX2VuYWJsZWQoc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlyZXR1cm4gY29uLT5s b2NhbF9wb3J0ICE9IC0xOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9pdGVyX3Zv aWRfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJCQkJCSAgIFZPSURfSVRFUl9GVU5DX0FS RzEgaXRlcl9mdW5jKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihk LT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24r KykKKwl7CisJCWl0ZXJfZnVuYyhjb24pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNv bnNvbGVfaXRlcl92b2lkX2FyZzIoc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCQkJCQkgICBWT0lE X0lURVJfRlVOQ19BUkcyIGl0ZXJfZnVuYywKKwkJCQkJCQkJCQkgICB1bnNpZ25lZCBpbnQgaXRl cl9kYXRhKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25z b2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKKwl7 CisJCWl0ZXJfZnVuYyhjb24sIGl0ZXJfZGF0YSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGJv b2wgY29uc29sZV9pdGVyX2Jvb2xfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJCQkJCSAg IEJPT0xfSVRFUl9GVU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3Qg Y29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhf Q09OU09MRTsgaSsrLCBjb24rKykKKwl7CisJCWlmIChpdGVyX2Z1bmMoY29uKSkKKwkJCXJldHVy biB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnNv bGVfaXRlcl9pbnRfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJCQkJCSBJTlRfSVRFUl9G VU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgY29uc29sZSAqY29u ID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsr LCBjb24rKykKKwl7CisJCWlmIChpdGVyX2Z1bmMoY29uKSkKKwkJCXJldHVybiAxOworCX0KKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY29uc29sZV9pdGVyX2ludF9hcmczKHN0 cnVjdCBkb21haW4gKmQsCisJCQkJCQkJCQkJIElOVF9JVEVSX0ZVTkNfQVJHMyBpdGVyX2Z1bmMs CisJCQkJCQkJCQkJIHZvaWQgKml0ZXJfZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNv bnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NP TlNPTEU7IGkrKywgY29uKyspCisJeworCQlpZiAoaXRlcl9mdW5jKGNvbiwgZCwgaXRlcl9kYXRh KSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB3cml0ZV9h bGwoaW50IGZkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCiB7CiAJd2hpbGUgKGxlbikg ewpAQCAtMTU4LDExICsyNjgsMjkgQEAgc3RhdGljIGludCB3cml0ZV93aXRoX3RpbWVzdGFtcChp bnQgZmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzeiwKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgaW5saW5l IGJvb2wgYnVmZmVyX2F2YWlsYWJsZShzdHJ1Y3QgY29uc29sZSAqY29uKQogewotCXN0cnVjdCBi dWZmZXIgKmJ1ZmZlciA9ICZkb20tPmJ1ZmZlcjsKKwlpZiAoZGlzY2FyZF9vdmVyZmxvd2VkX2Rh dGEgfHwKKwkJIWNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSB8fAorCQljb24tPmJ1ZmZlci5zaXpl IDwgY29uLT5idWZmZXIubWF4X2NhcGFjaXR5KQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJl dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChzdHJ1Y3QgY29uc29s ZSAqY29uLCB1bnNpZ25lZCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSAm Y29uLT5idWZmZXI7CisJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29uLT5pbnRl cmZhY2U7CisJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0ID0gY29uLT5sb2NhbF9wb3J0 OworCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKKwl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJv cl90IHJ4cG9ydCA9ICh4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90KWRhdGE7CisKIAlYRU5DT05T X1JJTkdfSURYIGNvbnMsIHByb2QsIHNpemU7Ci0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICpp bnRmID0gZG9tLT5pbnRlcmZhY2U7CisKKwkvKiBJZiBpbmNvbWluZyBkYXRhIGlzIG5vdCBmb3Ig dGhlIGN1cnJlbnQgY29uc29sZSB0aGVuIGlnbm9yZS4gKi8KKwlpZiAocG9ydCAhPSByeHBvcnQp CisJCXJldHVybjsKIAogCWNvbnMgPSBpbnRmLT5vdXRfY29uczsKIAlwcm9kID0gaW50Zi0+b3V0 X3Byb2Q7CkBAIC0xODcsMjIgKzMxNSwyMiBAQCBzdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0 cnVjdCBkb21haW4gKmRvbSkKIAogCXhlbl9tYigpOwogCWludGYtPm91dF9jb25zID0gY29uczsK LQl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgZG9tLT5sb2NhbF9wb3J0KTsKKwl4 ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7CiAKIAkvKiBHZXQgdGhlIGRh dGEgdG8gdGhlIGxvZ2ZpbGUgYXMgZWFybHkgYXMgcG9zc2libGUgYmVjYXVzZSBpZgogCSAqIG5v IG9uZSBpcyBsaXN0ZW5pbmcgb24gdGhlIGNvbnNvbGUgcHR5IHRoZW4gaXQgd2lsbCBmaWxsIHVw CiAJICogYW5kIGhhbmRsZV90dHlfd3JpdGUgd2lsbCBzdG9wIGJlaW5nIGNhbGxlZC4KIAkgKi8K LQlpZiAoZG9tLT5sb2dfZmQgIT0gLTEpIHsKKwlpZiAoY29uLT5sb2dfZmQgIT0gLTEpIHsKIAkJ aW50IGxvZ3JldDsKIAkJaWYgKGxvZ190aW1lX2d1ZXN0KSB7CiAJCQlsb2dyZXQgPSB3cml0ZV93 aXRoX3RpbWVzdGFtcCgKLQkJCQlkb20tPmxvZ19mZCwKKwkJCQljb24tPmxvZ19mZCwKIAkJCQli dWZmZXItPmRhdGEgKyBidWZmZXItPnNpemUgLSBzaXplLAogCQkJCXNpemUsICZsb2dfdGltZV9n dWVzdF9uZWVkdHMpOwogCQl9IGVsc2UgewogCQkJbG9ncmV0ID0gd3JpdGVfYWxsKAotCQkJCWRv bS0+bG9nX2ZkLAorCQkJCWNvbi0+bG9nX2ZkLAogCQkJCWJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+ c2l6ZSAtIHNpemUsCiAJCQkJc2l6ZSk7CiAJCX0KQEAgLTI5MCwxMiArNDE4LDEzIEBAIHN0YXRp YyBpbnQgY3JlYXRlX2h2X2xvZyh2b2lkKQogCXJldHVybiBmZDsKIH0KIAotc3RhdGljIGludCBj cmVhdGVfZG9tYWluX2xvZyhzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgaW50IGNyZWF0ZV9j b25zb2xlX2xvZyhzdHJ1Y3QgY29uc29sZSAqY29uKQogewogCWNoYXIgbG9nZmlsZVtQQVRIX01B WF07CiAJY2hhciAqbmFtZXBhdGgsICpkYXRhLCAqczsKIAlpbnQgZmQ7CiAJdW5zaWduZWQgaW50 IGxlbjsKKwlzdHJ1Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7CiAKIAluYW1lcGF0aCA9IHhzX2dl dF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7CiAJcyA9IHJlYWxsb2MobmFtZXBhdGgsIHN0 cmxlbihuYW1lcGF0aCkgKyA2KTsKQEAgLTMxNCw3ICs0NDMsOSBAQCBzdGF0aWMgaW50IGNyZWF0 ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4gKmRvbSkKIAkJcmV0dXJuIC0xOwogCX0KIAotCXNu cHJpbnRmKGxvZ2ZpbGUsIFBBVEhfTUFYLTEsICIlcy9ndWVzdC0lcy5sb2ciLCBsb2dfZGlyLCBk YXRhKTsKKwlzbnByaW50Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAiJXMlcy9ndWVzdC0lcy5sb2ci LAorCQkJIGxvZ19kaXIsIGNvbi0+eHNwYXRoLCBkYXRhKTsKKwogCWZyZWUoZGF0YSk7CiAJbG9n ZmlsZVtQQVRIX01BWC0xXSA9ICdcMCc7CiAKQEAgLTMzNiwxOSArNDY3LDI0IEBAIHN0YXRpYyBp bnQgY3JlYXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFpbiAqZG9tKQogCXJldHVybiBmZDsKIH0K IAotc3RhdGljIHZvaWQgZG9tYWluX2Nsb3NlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0 aWMgdm9pZCBjb25zb2xlX2Nsb3NlX3R0eShzdHJ1Y3QgY29uc29sZSAqY29uKQogewotCWlmIChk b20tPm1hc3Rlcl9mZCAhPSAtMSkgewotCQljbG9zZShkb20tPm1hc3Rlcl9mZCk7Ci0JCWRvbS0+ bWFzdGVyX2ZkID0gLTE7CisJaWYgKGNvbi0+bWFzdGVyX2ZkICE9IC0xKSB7CisJCWNsb3NlKGNv bi0+bWFzdGVyX2ZkKTsKKwkJY29uLT5tYXN0ZXJfZmQgPSAtMTsKIAl9CiAKLQlpZiAoZG9tLT5z bGF2ZV9mZCAhPSAtMSkgewotCQljbG9zZShkb20tPnNsYXZlX2ZkKTsKLQkJZG9tLT5zbGF2ZV9m ZCA9IC0xOworCWlmIChjb24tPnNsYXZlX2ZkICE9IC0xKSB7CisJCWNsb3NlKGNvbi0+c2xhdmVf ZmQpOworCQljb24tPnNsYXZlX2ZkID0gLTE7CiAJfQogfQogCitzdGF0aWMgdm9pZCBkb21haW5f Y2xvc2VfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKK3sKKwljb25zb2xlX2l0ZXJfdm9pZF9hcmcx KGRvbSwgY29uc29sZV9jbG9zZV90dHkpOworfQorCiAjaWZkZWYgX19zdW5fXwogc3RhdGljIGlu dCBvcGVucHR5KGludCAqYW1hc3RlciwgaW50ICphc2xhdmUsIGNoYXIgKm5hbWUsCiAJCSAgIHN0 cnVjdCB0ZXJtaW9zICp0ZXJtcCwgc3RydWN0IHdpbnNpemUgKndpbnApCkBAIC00MDksNyArNTQ1 LDcgQEAgdm9pZCBjZm1ha2VyYXcoc3RydWN0IHRlcm1pb3MgKnRlcm1pb3NfcCkKIH0KICNlbmRp ZiAvKiBfX3N1bl9fICovCiAKLXN0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHkoc3RydWN0IGRv bWFpbiAqZG9tKQorc3RhdGljIGludCBjb25zb2xlX2NyZWF0ZV90dHkoc3RydWN0IGNvbnNvbGUg KmNvbikKIHsKIAljb25zdCBjaGFyICpzbGF2ZTsKIAljaGFyICpwYXRoOwpAQCAtNDE4LDE5ICs1 NTQsMjMgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20p CiAJY2hhciAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCB0ZXJtaW9zIHRlcm07 CisJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOworCisJaWYgKCFjb25zb2xlX2VuYWJsZWQo Y29uKSkKKwkJcmV0dXJuIDA7CiAKLQlhc3NlcnQoZG9tLT5zbGF2ZV9mZCA9PSAtMSk7Ci0JYXNz ZXJ0KGRvbS0+bWFzdGVyX2ZkID09IC0xKTsKKwlhc3NlcnQoY29uLT5tYXN0ZXJfZmQgPT0gLTEp OworCWFzc2VydChjb24tPnNsYXZlX2ZkID09IC0xKTsKIAotCWlmIChvcGVucHR5KCZkb20tPm1h c3Rlcl9mZCwgJmRvbS0+c2xhdmVfZmQsIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkgeworCWlmIChv cGVucHR5KCZjb24tPm1hc3Rlcl9mZCwgJmNvbi0+c2xhdmVfZmQsIE5VTEwsIE5VTEwsIE5VTEwp IDwgMCkgewogCQllcnIgPSBlcnJubzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBjcmVh dGUgdHR5IGZvciBkb21haW4tJWQgIgotCQkgICAgICAiKGVycm5vID0gJWksICVzKSIsCi0JCSAg ICAgIGRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7Ci0JCXJldHVybiAwOworCQkJICAi KGVycm5vID0gJWksICVzKSIsCisJCQkgIGRvbS0+ZG9taWQsIGVyciwgc3RyZXJyb3IoZXJyKSk7 CisJCWdvdG8gb3V0OwogCX0KIAotCWlmICh0Y2dldGF0dHIoZG9tLT5zbGF2ZV9mZCwgJnRlcm0p IDwgMCkgeworCWlmICh0Y2dldGF0dHIoY29uLT5zbGF2ZV9mZCwgJnRlcm0pIDwgMCkgewogCQll cnIgPSBlcnJubzsKIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgdHR5IGF0dHJpYnV0 ZXMgZm9yIGRvbWFpbi0lZCAiCiAJCQkiKGVycm5vID0gJWksICVzKSIsCkBAIC00MzgsNyArNTc4 LDcgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCiAJ CWdvdG8gb3V0OwogCX0KIAljZm1ha2VyYXcoJnRlcm0pOwotCWlmICh0Y3NldGF0dHIoZG9tLT5z bGF2ZV9mZCwgVENTQU5PVywgJnRlcm0pIDwgMCkgeworCWlmICh0Y3NldGF0dHIoY29uLT5zbGF2 ZV9mZCwgVENTQU5PVywgJnRlcm0pIDwgMCkgewogCQllcnIgPSBlcnJubzsKIAkJZG9sb2coTE9H X0VSUiwgIkZhaWxlZCB0byBzZXQgdHR5IGF0dHJpYnV0ZXMgZm9yIGRvbWFpbi0lZCAiCiAJCQki KGVycm5vID0gJWksICVzKSIsCkBAIC00NDYsNDAgKzU4Niw1NCBAQCBzdGF0aWMgaW50IGRvbWFp bl9jcmVhdGVfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYg KChzbGF2ZSA9IHB0c25hbWUoZG9tLT5tYXN0ZXJfZmQpKSA9PSBOVUxMKSB7CisJaWYgKChzbGF2 ZSA9IHB0c25hbWUoY29uLT5tYXN0ZXJfZmQpKSA9PSBOVUxMKSB7CiAJCWVyciA9IGVycm5vOwog CQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGdldCBzbGF2ZSBuYW1lIGZvciBkb21haW4tJWQg IgotCQkgICAgICAiKGVycm5vID0gJWksICVzKSIsCi0JCSAgICAgIGRvbS0+ZG9taWQsIGVyciwg c3RyZXJyb3IoZXJyKSk7CisJCQkgICIoZXJybm8gPSAlaSwgJXMpIiwKKwkJCSAgZG9tLT5kb21p ZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3VjY2VzcyA9IGFz cHJpbnRmKCZwYXRoLCAiJXMvbGltaXQiLCBkb20tPmNvbnNwYXRoKSAhPQorCXN1Y2Nlc3MgPSBh c3ByaW50ZigmcGF0aCwgIiVzL2xpbWl0IiwgY29uLT54c3BhdGgpICE9CiAJCS0xOwogCWlmICgh c3VjY2VzcykKIAkJZ290byBvdXQ7CiAJZGF0YSA9IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRo LCAmbGVuKTsKIAlpZiAoZGF0YSkgewotCQlkb20tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0 b3VsKGRhdGEsIDAsIDApOworCQljb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0b3VsKGRh dGEsIDAsIDApOwogCQlmcmVlKGRhdGEpOwogCX0KIAlmcmVlKHBhdGgpOwogCi0Jc3VjY2VzcyA9 IChhc3ByaW50ZigmcGF0aCwgIiVzL3R0eSIsIGRvbS0+Y29uc3BhdGgpICE9IC0xKTsKKwlzdWNj ZXNzID0gKGFzcHJpbnRmKCZwYXRoLCAiJXMvJXMiLCBjb24tPnhzcGF0aCwgY29uLT50dHluYW1l KSAhPSAtMSk7CisKIAlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8gb3V0OwogCXN1Y2Nlc3MgPSB4c193 cml0ZSh4cywgWEJUX05VTEwsIHBhdGgsIHNsYXZlLCBzdHJsZW4oc2xhdmUpKTsKIAlmcmVlKHBh dGgpOwotCWlmICghc3VjY2VzcykKKworCWlmIChmY250bChjb24tPm1hc3Rlcl9mZCwgRl9TRVRG TCwgT19OT05CTE9DSykgPT0gLTEpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGZjbnRsKGRvbS0+bWFz dGVyX2ZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA9PSAtMSkKKwlpZiAoIXN1Y2Nlc3MpCiAJCWdv dG8gb3V0OwogCi0JcmV0dXJuIDE7Ci1vdXQ6Ci0JZG9tYWluX2Nsb3NlX3R0eShkb20pOwogCXJl dHVybiAwOworCitvdXQ6CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9tYWluX2NyZWF0 ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjb25zb2xl X2l0ZXJfaW50X2FyZzEoZG9tLCBjb25zb2xlX2NyZWF0ZV90dHkpOworCisJaWYgKHJldCkKKwkJ ZG9tYWluX2Nsb3NlX3R0eShkb20pOworCisJcmV0dXJuIHJldDsKIH0KICAKIC8qIFRha2VzIHR1 cGxlcyBvZiBuYW1lcywgc2NhbmYtc3R5bGUgYXJncywgYW5kIHZvaWQgKiosIE5VTEwgdGVybWlu YXRlZC4gKi8KQEAgLTUxNywzMSArNjcxLDEwNiBAQCBzdGF0aWMgaW50IHhzX2dhdGhlcihzdHJ1 Y3QgeHNfaGFuZGxlICp4cywgY29uc3QgY2hhciAqZGlyLCAuLi4pCiAJcmV0dXJuIHJldDsKIH0K IAotc3RhdGljIHZvaWQgZG9tYWluX3VubWFwX2ludGVyZmFjZShzdHJ1Y3QgZG9tYWluICpkb20p CitzdGF0aWMgdm9pZCBjb25zb2xlX3VubWFwX2ludGVyZmFjZShzdHJ1Y3QgY29uc29sZSAqY29u KQogewotCWlmIChkb20tPmludGVyZmFjZSA9PSBOVUxMKQorCWlmIChjb24tPmludGVyZmFjZSA9 PSBOVUxMKQogCQlyZXR1cm47Ci0JaWYgKHhndF9oYW5kbGUgJiYgZG9tLT5yaW5nX3JlZiA9PSAt MSkKLQkJeGVuZ250dGFiX3VubWFwKHhndF9oYW5kbGUsIGRvbS0+aW50ZXJmYWNlLCAxKTsKKwlp ZiAoeGd0X2hhbmRsZSAmJiBjb24tPnJpbmdfcmVmID09IC0xKQorCQl4ZW5nbnR0YWJfdW5tYXAo eGd0X2hhbmRsZSwgY29uLT5pbnRlcmZhY2UsIDEpOwogCWVsc2UKLQkJbXVubWFwKGRvbS0+aW50 ZXJmYWNlLCBYQ19QQUdFX1NJWkUpOwotCWRvbS0+aW50ZXJmYWNlID0gTlVMTDsKLQlkb20tPnJp bmdfcmVmID0gLTE7CisJCW11bm1hcChjb24tPmludGVyZmFjZSwgWENfUEFHRV9TSVpFKTsKKwlj b24tPmludGVyZmFjZSA9IE5VTEw7CisJY29uLT5yaW5nX3JlZiA9IC0xOworfQorCitzdGF0aWMg dm9pZCBkb21haW5fdW5tYXBfaW50ZXJmYWNlKHN0cnVjdCBkb21haW4gKmRvbSkKK3sKKwljb25z b2xlX2l0ZXJfdm9pZF9hcmcxKGRvbSwgY29uc29sZV91bm1hcF9pbnRlcmZhY2UpOworfQorCitz dGF0aWMgaW50IGJpbmRfZXZlbnRfY2hhbm5lbChzdHJ1Y3QgZG9tYWluICpkb20sCisJCQkJCQkJ ICBpbnQgbmV3X3Jwb3J0LAorCQkJCQkJCSAgaW50ICpscG9ydCwKKwkJCQkJCQkgIGludCAqcnBv cnQpCit7CisJaW50IGVyciA9IDAsIHJjOworCisJLyogR28gbm8gZnVydGhlciBpZiBwb3J0IGhh cyBub3QgY2hhbmdlZCBhbmQgd2UgYXJlIHN0aWxsIGJvdW5kLiAqLworCWlmIChuZXdfcnBvcnQg PT0gKnJwb3J0KSB7CisJCXhjX2V2dGNobl9zdGF0dXNfdCBzdGF0dXMgPSB7CisJCS5kb20gPSBE T01JRF9TRUxGLAorCQkucG9ydCA9ICpscG9ydCB9OworCQlpZiAoKHhjX2V2dGNobl9zdGF0dXMo eGMsICZzdGF0dXMpID09IDApICYmCisJCQkoc3RhdHVzLnN0YXR1cyA9PSBFVlRDSE5TVEFUX2lu dGVyZG9tYWluKSkKKwkJCWdvdG8gb3V0OworCX0KKworCSpscG9ydCA9IC0xOworCSpycG9ydCA9 IC0xOworCXJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZG9tLT54Y2VfaGFuZGxlLAor CQkJCQkJCQkJZG9tLT5kb21pZCwgbmV3X3Jwb3J0KTsKKworCWlmIChyYyA9PSAtMSkgeworCQll cnIgPSBlcnJubzsKKwkJZ290byBvdXQ7CisJfQorCisJKmxwb3J0ID0gcmM7CisJKnJwb3J0ID0g bmV3X3Jwb3J0Oworb3V0OgorCXJldHVybiBlcnI7CiB9CiAgCi1zdGF0aWMgaW50IGRvbWFpbl9j cmVhdGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgaW50IG1hcF9wdmNvbl9yaW5n X3JlZihzdHJ1Y3QgY29uc29sZSAqY29uLCBpbnQgcmluZ19yZWYpCiB7Ci0JaW50IGVyciwgcmVt b3RlX3BvcnQsIHJpbmdfcmVmLCByYzsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZG9tYWluICpk b20gPSBjb24tPmQ7CisKKwlpZiAoIWNvbi0+aW50ZXJmYWNlICYmIHhndF9oYW5kbGUpIHsKKwkJ LyogUHJlZmVyIHVzaW5nIGdyYW50IHRhYmxlICovCisJCWNvbi0+aW50ZXJmYWNlID0geGVuZ250 dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKKwkJCQkJCQkJCQkJCSBkb20tPmRvbWlkLCAK KwkJCQkJCQkJCQkJCSBHTlRUQUJfUkVTRVJWRURfQ09OU09MRSwKKwkJCQkJCQkJCQkJCSBQUk9U X1JFQUR8UFJPVF9XUklURSk7CisJCWNvbi0+cmluZ19yZWYgPSAtMTsKKwl9CisKKwlpZiAoIWNv bi0+aW50ZXJmYWNlKSB7CisJCWNvbi0+aW50ZXJmYWNlID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2Uo eGMsCisJCQkJCQkJCQkJCSAgZG9tLT5kb21pZCwKKwkJCQkJCQkJCQkJICBYQ19QQUdFX1NJWkUs CisJCQkJCQkJCQkJCSAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisJCQkJCQkJCQkJCSAgKHVuc2ln bmVkIGxvbmcpcmluZ19yZWYpOworCQlpZiAoY29uLT5pbnRlcmZhY2UgPT0gTlVMTCkgeworCQkJ ZXJyID0gRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJY29uLT5yaW5nX3JlZiA9IHJpbmdf cmVmOworCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY29uc29sZV9j cmVhdGVfcmluZyhzdHJ1Y3QgY29uc29sZSAqY29uKQoreworCWludCBlcnIsIHJlbW90ZV9wb3J0 LCByaW5nX3JlZjsKIAljaGFyICp0eXBlLCBwYXRoW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgZG9tYWlu ICpkb20gPSBjb24tPmQ7CisKKwllcnIgPSB4c19nYXRoZXIoeHMsIGNvbi0+eHNwYXRoLAorCQkJ CQkicmluZy1yZWYiLCAiJXUiLCAmcmluZ19yZWYsCisJCQkJCSJwb3J0IiwgIiVpIiwgJnJlbW90 ZV9wb3J0LAorCQkJCQlOVUxMKTsKIAotCWVyciA9IHhzX2dhdGhlcih4cywgZG9tLT5jb25zcGF0 aCwKLQkJCSJyaW5nLXJlZiIsICIldSIsICZyaW5nX3JlZiwKLQkJCSJwb3J0IiwgIiVpIiwgJnJl bW90ZV9wb3J0LAotCQkJTlVMTCk7CiAJaWYgKGVycikKKwl7CisJCS8qIElmIHRoZSBjb25zb2xl IGlzIG5vdCBtYW5kYXRvcnkgdGhlbiBkbyBub3QgcmV0dXJuIGFuIGVycm9yLiAqLworCQlpZiAo IWNvbi0+bWFuZGF0b3J5KQorCQkJZXJyID0gMDsKIAkJZ290byBvdXQ7CisJfQogCi0Jc25wcmlu dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvdHlwZSIsIGRvbS0+Y29uc3BhdGgpOworCXNucHJp bnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzL3R5cGUiLCBjb24tPnhzcGF0aCk7CiAJdHlwZSA9 IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCBOVUxMKTsKIAlpZiAodHlwZSAmJiBzdHJjbXAo dHlwZSwgInhlbmNvbnNvbGVkIikgIT0gMCkgewogCQlmcmVlKHR5cGUpOwpAQCAtNTUwLDQxICs3 NzksNDQgQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9t KQogCWZyZWUodHlwZSk7CiAKIAkvKiBJZiB1c2luZyByaW5nX3JlZiBhbmQgaXQgaGFzIGNoYW5n ZWQsIHJlbWFwICovCi0JaWYgKHJpbmdfcmVmICE9IGRvbS0+cmluZ19yZWYgJiYgZG9tLT5yaW5n X3JlZiAhPSAtMSkKLQkJZG9tYWluX3VubWFwX2ludGVyZmFjZShkb20pOworCWlmIChyaW5nX3Jl ZiAhPSBjb24tPnJpbmdfcmVmICYmIGNvbi0+cmluZ19yZWYgIT0gLTEpCisJCWNvbnNvbGVfdW5t YXBfaW50ZXJmYWNlKGNvbik7CiAKLQlpZiAoIWRvbS0+aW50ZXJmYWNlICYmIHhndF9oYW5kbGUp IHsKLQkJLyogUHJlZmVyIHVzaW5nIGdyYW50IHRhYmxlICovCi0JCWRvbS0+aW50ZXJmYWNlID0g eGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKLQkJCWRvbS0+ZG9taWQsIEdOVFRB Ql9SRVNFUlZFRF9DT05TT0xFLAotCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUpOwotCQlkb20tPnJp bmdfcmVmID0gLTE7Ci0JfQotCWlmICghZG9tLT5pbnRlcmZhY2UpIHsKLQkJLyogRmFsbCBiYWNr IHRvIHhjX21hcF9mb3JlaWduX3JhbmdlICovCi0JCWRvbS0+aW50ZXJmYWNlID0geGNfbWFwX2Zv cmVpZ25fcmFuZ2UoCi0JCQl4YywgZG9tLT5kb21pZCwgWENfUEFHRV9TSVpFLAotCQkJUFJPVF9S RUFEfFBST1RfV1JJVEUsCi0JCQkodW5zaWduZWQgbG9uZylyaW5nX3JlZik7Ci0JCWlmIChkb20t PmludGVyZmFjZSA9PSBOVUxMKSB7Ci0JCQllcnIgPSBFSU5WQUw7Ci0JCQlnb3RvIG91dDsKKwll cnIgPSBjb24tPm1hcF9yaW5nX3JlZihjb24sIHJpbmdfcmVmKTsKKworCWlmIChlcnIpCisJCWdv dG8gb3V0OworCisJZXJyID0gYmluZF9ldmVudF9jaGFubmVsKGRvbSwgcmVtb3RlX3BvcnQsCisJ CQkJCQkJICZjb24tPmxvY2FsX3BvcnQsCisJCQkJCQkJICZjb24tPnJlbW90ZV9wb3J0KTsKKwlp ZiAoZXJyKQorCQlnb3RvIG91dDE7CisKKwlpZiAoY29uLT5tYXN0ZXJfZmQgPT0gLTEpIHsKKwkJ aWYgKGNvbnNvbGVfY3JlYXRlX3R0eShjb24pKSB7CisJCQllcnIgPSBlcnJubzsKKwkJCWNvbi0+ bG9jYWxfcG9ydCA9IC0xOworCQkJY29uLT5yZW1vdGVfcG9ydCA9IC0xOworCQkJZ290byBvdXQx OwogCQl9Ci0JCWRvbS0+cmluZ19yZWYgPSByaW5nX3JlZjsKIAl9CiAKLQkvKiBHbyBubyBmdXJ0 aGVyIGlmIHBvcnQgaGFzIG5vdCBjaGFuZ2VkIGFuZCB3ZSBhcmUgc3RpbGwgYm91bmQuICovCi0J aWYgKHJlbW90ZV9wb3J0ID09IGRvbS0+cmVtb3RlX3BvcnQpIHsKLQkJeGNfZXZ0Y2huX3N0YXR1 c190IHN0YXR1cyA9IHsKLQkJCS5kb20gPSBET01JRF9TRUxGLAotCQkJLnBvcnQgPSBkb20tPmxv Y2FsX3BvcnQgfTsKLQkJaWYgKCh4Y19ldnRjaG5fc3RhdHVzKHhjLCAmc3RhdHVzKSA9PSAwKSAm JgotCQkgICAgKHN0YXR1cy5zdGF0dXMgPT0gRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbikpCi0JCQln b3RvIG91dDsKLQl9CisJaWYgKGxvZ19ndWVzdCAmJiAoY29uLT5sb2dfZmQgPT0gLTEpKQorCQlj b24tPmxvZ19mZCA9IGNyZWF0ZV9jb25zb2xlX2xvZyhjb24pOworCisJcmV0dXJuIGVycjsKKwor IG91dDE6CisJY29uc29sZV91bm1hcF9pbnRlcmZhY2UoY29uKTsKKyBvdXQ6CisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9t KQoreworCWludCBlcnI7CiAKLQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKLQlkb20tPnJlbW90ZV9w b3J0ID0gLTE7CiAJaWYgKGRvbS0+eGNlX2hhbmRsZSAhPSBOVUxMKQogCQl4ZW5ldnRjaG5fY2xv c2UoZG9tLT54Y2VfaGFuZGxlKTsKIApAQCAtNTkyLDM3ICs4MjQsMTcgQEAgc3RhdGljIGludCBk b21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQogCSAqIHdhc3RlZnVsLCBidXQg dGhhdCdzIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLi4uICovCiAJZG9tLT54Y2VfaGFuZGxl ID0geGVuZXZ0Y2huX29wZW4oTlVMTCwgMCk7CiAJaWYgKGRvbS0+eGNlX2hhbmRsZSA9PSBOVUxM KSB7Ci0JCWVyciA9IGVycm5vOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIGVycm5vOwogCX0KLSAK LQlyYyA9IHhlbmV2dGNobl9iaW5kX2ludGVyZG9tYWluKGRvbS0+eGNlX2hhbmRsZSwKLQkJZG9t LT5kb21pZCwgcmVtb3RlX3BvcnQpOwogCi0JaWYgKHJjID09IC0xKSB7Ci0JCWVyciA9IGVycm5v OworCWVyciA9IGNvbnNvbGVfaXRlcl9pbnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRlX3Jpbmcp OworCisJaWYgKGVycikKKwl7CiAJCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwog CQlkb20tPnhjZV9oYW5kbGUgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0JZG9tLT5sb2NhbF9w b3J0ID0gcmM7Ci0JZG9tLT5yZW1vdGVfcG9ydCA9IHJlbW90ZV9wb3J0OwotCi0JaWYgKGRvbS0+ bWFzdGVyX2ZkID09IC0xKSB7Ci0JCWlmICghZG9tYWluX2NyZWF0ZV90dHkoZG9tKSkgewotCQkJ ZXJyID0gZXJybm87Ci0JCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsKLQkJCWRv bS0+eGNlX2hhbmRsZSA9IE5VTEw7Ci0JCQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKLQkJCWRvbS0+ cmVtb3RlX3BvcnQgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJfQogCi0JaWYgKGxvZ19ndWVz dCAmJiAoZG9tLT5sb2dfZmQgPT0gLTEpKQotCQlkb20tPmxvZ19mZCA9IGNyZWF0ZV9kb21haW5f bG9nKGRvbSk7Ci0KLSBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjMwLDI3ICs4NDIsNjYg QEAgc3RhdGljIGJvb2wgd2F0Y2hfZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSwgYm9vbCB3YXRj aCkKIHsKIAljaGFyIGRvbWlkX3N0clszICsgTUFYX1NUUkxFTihkb20tPmRvbWlkKV07CiAJYm9v bCBzdWNjZXNzOworCWNoYXIgKnBhdGggPSBkb20tPmNvbnNvbGVbMF0ueHNwYXRoOwogCiAJc25w cmludGYoZG9taWRfc3RyLCBzaXplb2YoZG9taWRfc3RyKSwgImRvbSV1IiwgZG9tLT5kb21pZCk7 CiAJaWYgKHdhdGNoKSB7Ci0JCXN1Y2Nlc3MgPSB4c193YXRjaCh4cywgZG9tLT5jb25zcGF0aCwg ZG9taWRfc3RyKTsKKwkJc3VjY2VzcyA9IHhzX3dhdGNoKHhzLCBwYXRoLCBkb21pZF9zdHIpOwog CQlpZiAoc3VjY2VzcykKIAkJCWRvbWFpbl9jcmVhdGVfcmluZyhkb20pOwogCQllbHNlCi0JCQl4 c191bndhdGNoKHhzLCBkb20tPmNvbnNwYXRoLCBkb21pZF9zdHIpOworCQkJeHNfdW53YXRjaCh4 cywgcGF0aCwgZG9taWRfc3RyKTsKIAl9IGVsc2UgewotCQlzdWNjZXNzID0geHNfdW53YXRjaCh4 cywgZG9tLT5jb25zcGF0aCwgZG9taWRfc3RyKTsKKwkJc3VjY2VzcyA9IHhzX3Vud2F0Y2goeHMs IHBhdGgsIGRvbWlkX3N0cik7CiAJfQogCiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKK3N0YXRpYyBp bnQgY29uc29sZV9pbml0KHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBkb21haW4gKmRvbSwg dm9pZCAqKmRhdGEpCit7CisJY2hhciAqczsKKwlpbnQgZXJyID0gLTE7CisJc3RydWN0IGNvbnNv bGVfZGF0YSAqKmNvbl9kYXRhID0gKHN0cnVjdCBjb25zb2xlX2RhdGEgKiopZGF0YTsKKworCWNv bi0+bWFzdGVyX2ZkID0gLTE7CisJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOworCWNvbi0+ c2xhdmVfZmQgPSAtMTsKKwljb24tPmxvZ19mZCA9IC0xOworCWNvbi0+cmluZ19yZWYgPSAtMTsK Kwljb24tPmxvY2FsX3BvcnQgPSAtMTsKKwljb24tPnJlbW90ZV9wb3J0ID0gLTE7CisJY29uLT5k ID0gZG9tOworCWNvbi0+dHR5bmFtZSA9ICgqY29uX2RhdGEpLT50dHluYW1lOworCWNvbi0+eHNu YW1lID0gKCpjb25fZGF0YSktPnhzbmFtZTsKKwljb24tPm1hcF9yaW5nX3JlZiA9ICgqY29uX2Rh dGEpLT5tYXBmdW5jOworCWNvbi0+bWFuZGF0b3J5ID0gKCpjb25fZGF0YSktPm1hbmRhdG9yeTsK Kwljb24tPnhzcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7CisJcyA9 IHJlYWxsb2MoY29uLT54c3BhdGgsIHN0cmxlbihjb24tPnhzcGF0aCkgKworCQkJCXN0cmxlbihj b24tPnhzbmFtZSkgKyAxKTsKKworCSgqY29uX2RhdGEpKys7CisKKwlpZiAocykKKwl7CisJCWNv bi0+eHNwYXRoID0gczsKKwkJc3RyY2F0KGNvbi0+eHNwYXRoLCBjb24tPnhzbmFtZSk7CisJCWVy ciA9IDA7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnNvbGVfZnJlZShz dHJ1Y3QgY29uc29sZSAqY29uKQoreworCWlmIChjb24tPnhzcGF0aCkKKwkJZnJlZShjb24tPnhz cGF0aCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVfZG9tYWluKGludCBkb21p ZCkKIHsKIAlzdHJ1Y3QgZG9tYWluICpkb207Ci0JY2hhciAqczsKIAlzdHJ1Y3QgdGltZXNwZWMg dHM7CisJc3RydWN0IGNvbnNvbGVfZGF0YSAqY29uX2RhdGEgPSAmY29uc29sZV9kYXRhWzBdOwog CiAJaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpIDwgMCkgewogCQlkb2xv ZyhMT0dfRVJSLCAiQ2Fubm90IGdldCB0aW1lIG9mIGRheSAlczolczpMJWQiLApAQCAtNjY3LDI2 ICs5MTgsMTMgQEAgc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlk KQogCiAJZG9tLT5kb21pZCA9IGRvbWlkOwogCi0JZG9tLT5jb25zcGF0aCA9IHhzX2dldF9kb21h aW5fcGF0aCh4cywgZG9tLT5kb21pZCk7Ci0JcyA9IHJlYWxsb2MoZG9tLT5jb25zcGF0aCwgc3Ry bGVuKGRvbS0+Y29uc3BhdGgpICsKLQkJICAgIHN0cmxlbigiL2NvbnNvbGUiKSArIDEpOwotCWlm IChzID09IE5VTEwpCisJaWYgKGNvbnNvbGVfaXRlcl9pbnRfYXJnMyhkb20sIGNvbnNvbGVfaW5p dCwgKHZvaWQgKiopJmNvbl9kYXRhKSkKIAkJZ290byBvdXQ7Ci0JZG9tLT5jb25zcGF0aCA9IHM7 Ci0Jc3RyY2F0KGRvbS0+Y29uc3BhdGgsICIvY29uc29sZSIpOwogCi0JZG9tLT5tYXN0ZXJfZmQg PSAtMTsKLQlkb20tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Ci0JZG9tLT5zbGF2ZV9mZCA9IC0x OwotCWRvbS0+bG9nX2ZkID0gLTE7CiAJZG9tLT54Y2VfcG9sbGZkX2lkeCA9IC0xOwogCiAJZG9t LT5uZXh0X3BlcmlvZCA9ICgobG9uZyBsb25nKXRzLnR2X3NlYyAqIDEwMDApICsgKHRzLnR2X25z ZWMgLyAxMDAwMDAwKSArIFJBVEVfTElNSVRfUEVSSU9EOwogCi0JZG9tLT5yaW5nX3JlZiA9IC0x OwotCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwotCWRvbS0+cmVtb3RlX3BvcnQgPSAtMTsKLQogCWlm ICghd2F0Y2hfZG9tYWluKGRvbSwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCkBAIC02OTYsOCArOTM0 LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVfZG9tYWluKGludCBkb21pZCkKIAlk b2xvZyhMT0dfREVCVUcsICJOZXcgZG9tYWluICVkIiwgZG9taWQpOwogCiAJcmV0dXJuIGRvbTsK KwogIG91dDoKLQlmcmVlKGRvbS0+Y29uc3BhdGgpOworCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEo ZG9tLCBjb25zb2xlX2ZyZWUpOworCiAJZnJlZShkb20pOwogCXJldHVybiBOVUxMOwogfQpAQCAt NzI3LDIwICs5NjcsMjQgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbihzdHJ1Y3QgZG9tYWlu ICpkb20pCiAJfQogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3QgZG9tYWlu ICpkKQotewotCWRvbWFpbl9jbG9zZV90dHkoZCk7CiAKLQlpZiAoZC0+bG9nX2ZkICE9IC0xKSB7 Ci0JCWNsb3NlKGQtPmxvZ19mZCk7Ci0JCWQtPmxvZ19mZCA9IC0xOworc3RhdGljIHZvaWQgY29u c29sZV9jbGVhbnVwKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+bG9nX2ZkICE9 IC0xKSB7CisJCWNsb3NlKGNvbi0+bG9nX2ZkKTsKKwkJY29uLT5sb2dfZmQgPSAtMTsKIAl9CisJ ZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKKwljb24tPmJ1ZmZlci5kYXRhID0gTlVMTDsKKwlmcmVl KGNvbi0+eHNwYXRoKTsKKwljb24tPnhzcGF0aCA9IE5VTEw7Cit9CiAKLQlmcmVlKGQtPmJ1ZmZl ci5kYXRhKTsKLQlkLT5idWZmZXIuZGF0YSA9IE5VTEw7CitzdGF0aWMgdm9pZCBjbGVhbnVwX2Rv bWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworCWRvbWFpbl9jbG9zZV90dHkoZCk7CiAKLQlmcmVl KGQtPmNvbnNwYXRoKTsKLQlkLT5jb25zcGF0aCA9IE5VTEw7CisJY29uc29sZV9pdGVyX3ZvaWRf YXJnMShkLCBjb25zb2xlX2NsZWFudXApOwogCiAJcmVtb3ZlX2RvbWFpbihkKTsKIH0KQEAgLTc4 MCw5ICsxMDI0LDkgQEAgc3RhdGljIHZvaWQgZW51bV9kb21haW5zKHZvaWQpCiAJfQogfQogCi1z dGF0aWMgaW50IHJpbmdfZnJlZV9ieXRlcyhzdHJ1Y3QgZG9tYWluICpkb20pCitzdGF0aWMgaW50 IHJpbmdfZnJlZV9ieXRlcyhzdHJ1Y3QgY29uc29sZSAqY29uKQogewotCXN0cnVjdCB4ZW5jb25z X2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOworCXN0cnVjdCB4ZW5jb25zX2ludGVy ZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJv ZCwgc3BhY2U7CiAKIAljb25zID0gaW50Zi0+aW5fY29uczsKQEAgLTgwNywyNSArMTA1MSwyNyBA QCBzdGF0aWMgdm9pZCBkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoc3RydWN0IGRvbWFpbiAqZG9t LCBpbnQgcmVjcmVhdGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3Ry dWN0IGRvbWFpbiAqZG9tKQorc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBjb25z b2xlICpjb24pCiB7CiAJc3NpemVfdCBsZW4gPSAwOwogCWNoYXIgbXNnWzgwXTsKIAlpbnQgaTsK LQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBkb20tPmludGVyZmFjZTsKIAlYRU5D T05TX1JJTkdfSURYIHByb2Q7CisJc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29u LT5pbnRlcmZhY2U7CisJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0ID0gY29uLT5sb2Nh bF9wb3J0OworCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKIAogCWlmIChkb20tPmlzX2Rl YWQpCiAJCXJldHVybjsKIAotCWxlbiA9IHJpbmdfZnJlZV9ieXRlcyhkb20pOworCWxlbiA9IHJp bmdfZnJlZV9ieXRlcyhjb24pOwogCWlmIChsZW4gPT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKGxl biA+IHNpemVvZihtc2cpKQogCQlsZW4gPSBzaXplb2YobXNnKTsKIAotCWxlbiA9IHJlYWQoZG9t LT5tYXN0ZXJfZmQsIG1zZywgbGVuKTsKKwlsZW4gPSByZWFkKGNvbi0+bWFzdGVyX2ZkLCBtc2cs IGxlbik7CiAJLyoKIAkgKiBOb3RlOiBvbiBTb2xhcmlzLCBsZW4gPT0gMCBtZWFucyB0aGUgc2xh dmUgY2xvc2VkLCBhbmQgdGhpcwogCSAqIGlzIG5vIHByb2JsZW0sIGJ1dCBMaW51eCBjYW4ndCBo YW5kbGUgdGhpcyB1c2VmdWxseSwgc28gd2UKQEAgLTg0MSwzMSArMTA4NywzOSBAQCBzdGF0aWMg dm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQogCQl9CiAJCXhlbl93bWIo KTsKIAkJaW50Zi0+aW5fcHJvZCA9IHByb2Q7Ci0JCXhlbmV2dGNobl9ub3RpZnkoZG9tLT54Y2Vf aGFuZGxlLCBkb20tPmxvY2FsX3BvcnQpOworCQl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hh bmRsZSwgcG9ydCk7CiAJfSBlbHNlIHsKIAkJZG9tYWluX2Nsb3NlX3R0eShkb20pOwogCQlzaHV0 ZG93bl9kb21haW4oZG9tKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV90dHlfd3JpdGUo c3RydWN0IGRvbWFpbiAqZG9tKQorc3RhdGljIHZvaWQgaGFuZGxlX3R0eV93cml0ZShzdHJ1Y3Qg Y29uc29sZSAqY29uKQogewogCXNzaXplX3QgbGVuOworCXN0cnVjdCBkb21haW4gKmRvbSA9IGNv bi0+ZDsKIAogCWlmIChkb20tPmlzX2RlYWQpCiAJCXJldHVybjsKIAotCWxlbiA9IHdyaXRlKGRv bS0+bWFzdGVyX2ZkLCBkb20tPmJ1ZmZlci5kYXRhICsgZG9tLT5idWZmZXIuY29uc3VtZWQsCi0J CSAgICBkb20tPmJ1ZmZlci5zaXplIC0gZG9tLT5idWZmZXIuY29uc3VtZWQpOworCWxlbiA9IHdy aXRlKGNvbi0+bWFzdGVyX2ZkLAorCQkJCWNvbi0+YnVmZmVyLmRhdGEgKyBjb24tPmJ1ZmZlci5j b25zdW1lZCwKKwkJCQljb24tPmJ1ZmZlci5zaXplIC0gY29uLT5idWZmZXIuY29uc3VtZWQpOwog IAlpZiAobGVuIDwgMSkgewogCQlkb2xvZyhMT0dfREVCVUcsICJXcml0ZSBmYWlsZWQgb24gZG9t YWluICVkOiAlemQsICVkXG4iLAogCQkgICAgICBkb20tPmRvbWlkLCBsZW4sIGVycm5vKTsKIAkJ ZG9tYWluX2hhbmRsZV9icm9rZW5fdHR5KGRvbSwgZG9tYWluX2lzX3ZhbGlkKGRvbS0+ZG9taWQp KTsKIAl9IGVsc2UgewotCQlidWZmZXJfYWR2YW5jZSgmZG9tLT5idWZmZXIsIGxlbik7CisJCWJ1 ZmZlcl9hZHZhbmNlKCZjb24tPmJ1ZmZlciwgbGVuKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGNv bnNvbGVfZXZlbnRfdW5tYXNrKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+bG9j YWxfcG9ydCAhPSAtMSkKKwkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhjb24tPmQtPnhjZV9oYW5k bGUsIGNvbi0+bG9jYWxfcG9ydCk7Cit9CisKIHN0YXRpYyB2b2lkIGhhbmRsZV9yaW5nX3JlYWQo c3RydWN0IGRvbWFpbiAqZG9tKQogewogCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgcG9ydDsK QEAgLTg3OCwxMCArMTEzMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVj dCBkb21haW4gKmRvbSkKIAogCWRvbS0+ZXZlbnRfY291bnQrKzsKIAotCWJ1ZmZlcl9hcHBlbmQo ZG9tKTsKKwljb25zb2xlX2l0ZXJfdm9pZF9hcmcyKGRvbSwgYnVmZmVyX2FwcGVuZCwgcG9ydCk7 CiAKIAlpZiAoZG9tLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKQotCQkodm9p ZCl4ZW5ldnRjaG5fdW5tYXNrKGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7CisJCWNvbnNvbGVfaXRl cl92b2lkX2FyZzEoZG9tLCBjb25zb2xlX2V2ZW50X3VubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lk IGhhbmRsZV94cyh2b2lkKQpAQCAtOTQzLDE0ICsxMTk3LDIyIEBAIHN0YXRpYyB2b2lkIGhhbmRs ZV9odl9sb2dzKHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUsIGJvb2wgZm9yY2UpCiAJCSh2 b2lkKXhlbmV2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9ydCk7CiB9CiAKK3N0YXRpYyB2b2lk IGNvbnNvbGVfb3Blbl9sb2coc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAoY29uc29sZV9l bmFibGVkKGNvbikpCisJeworCQlpZiAoY29uLT5sb2dfZmQgIT0gLTEpCisJCQljbG9zZShjb24t PmxvZ19mZCk7CisJCWNvbi0+bG9nX2ZkID0gY3JlYXRlX2NvbnNvbGVfbG9nKGNvbik7CisJfQor fQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfbG9nX3JlbG9hZCh2b2lkKQogewogCWlmIChsb2dfZ3Vl c3QpIHsKIAkJc3RydWN0IGRvbWFpbiAqZDsKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBk LT5uZXh0KSB7Ci0JCQlpZiAoZC0+bG9nX2ZkICE9IC0xKQotCQkJCWNsb3NlKGQtPmxvZ19mZCk7 Ci0JCQlkLT5sb2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkKTsKKwkJCWNvbnNvbGVfaXRlcl92 b2lkX2FyZzEoZCwgY29uc29sZV9vcGVuX2xvZyk7CiAJCX0KIAl9CiAKQEAgLTEwMDIsNiArMTI2 NCw0MCBAQCBzdGF0aWMgdm9pZCByZXNldF9mZHModm9pZCkKIAkJbWVtc2V0KGZkcywgMCwgc2l6 ZW9mKHN0cnVjdCBwb2xsZmQpICogY3VycmVudF9hcnJheV9zaXplKTsKIH0KIAorc3RhdGljIHZv aWQgYWRkX2NvbnNvbGVfZmQoc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAoY29uLT5tYXN0 ZXJfZmQgIT0gLTEpIHsKKwkJc2hvcnQgZXZlbnRzID0gMDsKKwkJaWYgKCFjb24tPmQtPmlzX2Rl YWQgJiYgcmluZ19mcmVlX2J5dGVzKGNvbikpCisJCQlldmVudHMgfD0gUE9MTElOOworCisJCWlm ICghYnVmZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikpCisJCQlldmVudHMgfD0gUE9MTE9VVDsKKwor CQlpZiAoZXZlbnRzKQorCQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9CisJCQkJc2V0X2Zkcyhj b24tPm1hc3Rlcl9mZCwgZXZlbnRzfFBPTExQUkkpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJv Y2Vzc19jb25zb2xlKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+bWFzdGVyX2Zk ICE9IC0xICYmIGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKKwkJaWYgKGZkc1tjb24t Pm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCX4oUE9MTElOfFBPTExPVVR8UE9MTFBS SSkpCisJCQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoY29uLT5kLCBkb21haW5faXNfdmFsaWQo Y29uLT5kLT5kb21pZCkpOworCQllbHNlIHsKKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZk X2lkeF0ucmV2ZW50cyAmCisJCQkJUE9MTElOKQorCQkJCWhhbmRsZV90dHlfcmVhZChjb24pOwor CQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCQlQT0xMT1VU KQorCQkJCWhhbmRsZV90dHlfd3JpdGUoY29uKTsKKwkJfQorCX0KKwljb24tPm1hc3Rlcl9wb2xs ZmRfaWR4ID0gLTE7Cit9CisKIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiB7CiAJaW50IHJldDsKQEAg LTEwNjgsNyArMTM2NCw3IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiAJCQlpZiAoKG5vdys1KSA+ IGQtPm5leHRfcGVyaW9kKSB7CiAJCQkJZC0+bmV4dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlU X1BFUklPRDsKIAkJCQlpZiAoZC0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0Up IHsKLQkJCQkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhkLT54Y2VfaGFuZGxlLCBkLT5sb2NhbF9w b3J0KTsKKwkJCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX2V2ZW50X3VubWFz ayk7CiAJCQkJfQogCQkJCWQtPmV2ZW50X2NvdW50ID0gMDsKIAkJCX0KQEAgLTEwODEsMjggKzEz NzcsMTUgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJCQkgICAgZC0+bmV4dF9wZXJpb2QgPCBu ZXh0X3RpbWVvdXQpCiAJCQkJCW5leHRfdGltZW91dCA9IGQtPm5leHRfcGVyaW9kOwogCQkJfSBl bHNlIGlmIChkLT54Y2VfaGFuZGxlICE9IE5VTEwpIHsKLQkJCQlpZiAoZGlzY2FyZF9vdmVyZmxv d2VkX2RhdGEgfHwKLQkJCQkgICAgIWQtPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwKLQkJCQkgICAg ZC0+YnVmZmVyLnNpemUgPCBkLT5idWZmZXIubWF4X2NhcGFjaXR5KSB7CisJCQkJaWYgKGNvbnNv bGVfaXRlcl9ib29sX2FyZzEoZCwgYnVmZmVyX2F2YWlsYWJsZSkpCisJCQkJewogCQkJCQlpbnQg ZXZ0Y2huX2ZkID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwogCQkJCQlkLT54Y2VfcG9s bGZkX2lkeCA9IHNldF9mZHMoZXZ0Y2huX2ZkLAotCQkJCQkJCQkgICAgUE9MTElOfFBPTExQUkkp OworCQkJCQkJCQkJCQkJUE9MTElOfFBPTExQUkkpOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGQt Pm1hc3Rlcl9mZCAhPSAtMSkgewotCQkJCXNob3J0IGV2ZW50cyA9IDA7Ci0JCQkJaWYgKCFkLT5p c19kZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhkKSkKLQkJCQkJZXZlbnRzIHw9IFBPTExJTjsKLQot CQkJCWlmICghYnVmZmVyX2VtcHR5KCZkLT5idWZmZXIpKQotCQkJCQlldmVudHMgfD0gUE9MTE9V VDsKLQotCQkJCWlmIChldmVudHMpCi0JCQkJCWQtPm1hc3Rlcl9wb2xsZmRfaWR4ID0KLQkJCQkJ CXNldF9mZHMoZC0+bWFzdGVyX2ZkLAotCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKLQkJCX0KKwkJ CWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgYWRkX2NvbnNvbGVfZmQpOwogCQl9CiAKIAkJLyog SWYgYW55IGRvbWFpbiBoYXMgYmVlbiByYXRlIGxpbWl0ZWQsIHdlIG5lZWQgdG8gd29yawpAQCAt MTE3MCwyMiArMTQ1Myw5IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiAJCQkJICAgIGhhbmRsZV9y aW5nX3JlYWQoZCk7CiAJCQl9CiAKLQkJCWlmIChkLT5tYXN0ZXJfZmQgIT0gLTEgJiYgZC0+bWFz dGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKLQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4 XS5yZXZlbnRzICYKLQkJCQkgICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkKLQkJCQkJZG9t YWluX2hhbmRsZV9icm9rZW5fdHR5KGQsCi0JCQkJCQkgICBkb21haW5faXNfdmFsaWQoZC0+ZG9t aWQpKTsKLQkJCQllbHNlIHsKLQkJCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2 ZW50cyAmCi0JCQkJCSAgICBQT0xMSU4pCi0JCQkJCQloYW5kbGVfdHR5X3JlYWQoZCk7Ci0JCQkJ CWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgotCQkJCQkgICAgUE9MTE9V VCkKLQkJCQkJCWhhbmRsZV90dHlfd3JpdGUoZCk7Ci0JCQkJfQotCQkJfQorCQkJY29uc29sZV9p dGVyX3ZvaWRfYXJnMShkLCBwcm9jZXNzX2NvbnNvbGUpOwogCi0JCQlkLT54Y2VfcG9sbGZkX2lk eCA9IGQtPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7CisJCQlkLT54Y2VfcG9sbGZkX2lkeCA9IC0x OwogCiAJCQlpZiAoZC0+bGFzdF9zZWVuICE9IGVudW1fcGFzcykKIAkJCQlzaHV0ZG93bl9kb21h aW4oZCk7Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=