From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 10/14 v4] xen/arm: vpl011: Modify xenconsole to support multiple consoles Date: Tue, 6 Jun 2017 22:55:25 +0530 Message-ID: <1496769929-23355-11-git-send-email-bhupinder.thakur@linaro.org> References: <1496769929-23355-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 1dIIF6-0001pz-Do for xen-devel@lists.xenproject.org; Tue, 06 Jun 2017 17:26:08 +0000 Received: by mail-pf0-f177.google.com with SMTP id l89so25888741pfi.2 for ; Tue, 06 Jun 2017 10:26:06 -0700 (PDT) In-Reply-To: <1496769929-23355-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 VGhpcyBwYXRjaCBhZGRzIHRoZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBjb25zb2xlcyBhbmQgaW50 cm9kdWNlcyB0aGUgaXRlcmF0b3IKZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gbXVsdGlwbGUgY29u c29sZXMuCgpUaGlzIHBhdGNoIGlzIGluIHByZXBhcmF0aW9uIHRvIHN1cHBvcnQgYSBuZXcgdnVh cnQgY29uc29sZS4KClNpZ25lZC1vZmYtYnk6IEJodXBpbmRlciBUaGFrdXIgPGJodXBpbmRlci50 aGFrdXJAbGluYXJvLm9yZz4KLS0tCkNDOiBpagpDQzogd2wKQ0M6IHNzCkNDOiBqZwoKQ2hhbmdl cyBzaW5jZSB2MzoKLSBUaGUgY2hhbmdlcyBpbiB4ZW5jb25zb2xlIGhhdmUgYmVlbiBzcGxpdCBp bnRvIGZvdXIgcGF0Y2hlcy4gVGhpcyBpcyB0aGUgdGhpcmQgcGF0Y2guCgogdG9vbHMvY29uc29s ZS9kYWVtb24vaW8uYyB8IDM2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMoKyksIDEwMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jIGIvdG9vbHMvY29u c29sZS9kYWVtb24vaW8uYwppbmRleCBjNWRkMDhkLi5kYjczZTEwIDEwMDY0NAotLS0gYS90b29s cy9jb25zb2xlL2RhZW1vbi9pby5jCisrKyBiL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKQEAg LTkwLDEyICs5MCwxNSBAQCBzdHJ1Y3QgYnVmZmVyIHsKIH07CiAKIHN0cnVjdCBjb25zb2xlIHsK KwljaGFyICp4c25hbWU7CisJY2hhciAqdHR5bmFtZTsKIAlpbnQgbWFzdGVyX2ZkOwogCWludCBt YXN0ZXJfcG9sbGZkX2lkeDsKIAlpbnQgc2xhdmVfZmQ7CiAJaW50IGxvZ19mZDsKIAlzdHJ1Y3Qg YnVmZmVyIGJ1ZmZlcjsKLQljaGFyICpjb25zcGF0aDsKKwljaGFyICp4c3BhdGg7CisJY2hhciAq bG9nX3N1ZmZpeDsKIAlpbnQgcmluZ19yZWY7CiAJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBs b2NhbF9wb3J0OwogCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgcmVtb3RlX3BvcnQ7CkBAIC0x MDMsNiArMTA2LDIzIEBAIHN0cnVjdCBjb25zb2xlIHsKIAlzdHJ1Y3QgZG9tYWluICpkOwogfTsK IAorc3RydWN0IGNvbnNvbGVfZGF0YSB7CisJY2hhciAqeHNuYW1lOworCWNoYXIgKnR0eW5hbWU7 CisJY2hhciAqbG9nX3N1ZmZpeDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZV9kYXRhIGNv bnNvbGVfZGF0YVtdID0geworCisJeworCQkueHNuYW1lID0gIi9jb25zb2xlIiwKKwkJLnR0eW5h bWUgPSAidHR5IiwKKwkJLmxvZ19zdWZmaXggPSAiIiwKKwl9LAorfTsKKworI2RlZmluZSBNQVhf Q09OU09MRSAoc2l6ZW9mKGNvbnNvbGVfZGF0YSkvc2l6ZW9mKHN0cnVjdCBjb25zb2xlX2RhdGEp KQorCiBzdHJ1Y3QgZG9tYWluIHsKIAlpbnQgZG9taWQ7CiAJYm9vbCBpc19kZWFkOwpAQCAtMTEy LDExICsxMzIsOTAgQEAgc3RydWN0IGRvbWFpbiB7CiAJaW50IHhjZV9wb2xsZmRfaWR4OwogCWlu dCBldmVudF9jb3VudDsKIAlsb25nIGxvbmcgbmV4dF9wZXJpb2Q7Ci0Jc3RydWN0IGNvbnNvbGUg Y29uc29sZTsKKwlzdHJ1Y3QgY29uc29sZSBjb25zb2xlW01BWF9DT05TT0xFXTsKIH07CiAKIHN0 YXRpYyBzdHJ1Y3QgZG9tYWluICpkb21faGVhZDsKIAordHlwZWRlZiB2b2lkICgqVk9JRF9JVEVS X0ZVTkNfQVJHMSkoc3RydWN0IGNvbnNvbGUgKik7Cit0eXBlZGVmIGJvb2wgKCpCT09MX0lURVJf RlVOQ19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKK3R5cGVkZWYgaW50ICgqSU5UX0lURVJfRlVO Q19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKK3R5cGVkZWYgdm9pZCAoKlZPSURfSVRFUl9GVU5D X0FSRzIpKHN0cnVjdCBjb25zb2xlICosICB1bnNpZ25lZCBpbnQpOwordHlwZWRlZiBpbnQgKCpJ TlRfSVRFUl9GVU5DX0FSRzMpKHN0cnVjdCBjb25zb2xlICosCisJCQkgc3RydWN0IGRvbWFpbiAq ZG9tLCB2b2lkICoqKTsKKworc3RhdGljIGlubGluZSBib29sIGNvbnNvbGVfZW5hYmxlZChzdHJ1 Y3QgY29uc29sZSAqY29uKQoreworCXJldHVybiBjb24tPmxvY2FsX3BvcnQgIT0gLTE7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX2l0ZXJfdm9pZF9hcmcxKHN0cnVjdCBkb21haW4g KmQsCisJCQkJCQkJCQkJICBWT0lEX0lURVJfRlVOQ19BUkcxIGl0ZXJfZnVuYykKK3sKKwlpbnQg aSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCisJeworCQlpdGVyX2Z1bmMoY29u KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX2l0ZXJfdm9pZF9hcmcyKHN0 cnVjdCBkb21haW4gKmQsCisJCQkJCQkJCQkJICBWT0lEX0lURVJfRlVOQ19BUkcyIGl0ZXJfZnVu YywKKwkJCQkJCQkJCQkgIHVuc2lnbmVkIGludCBpdGVyX2RhdGEpCit7CisJaW50IGkgPSAwOwor CXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOworCisJZm9yIChpID0gMDsg aSA8IE1BWF9DT05TT0xFOyBpKyssIGNvbisrKQorCXsKKwkJaXRlcl9mdW5jKGNvbiwgaXRlcl9k YXRhKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb25zb2xlX2l0ZXJfYm9vbF9hcmcx KHN0cnVjdCBkb21haW4gKmQsCisJCQkJCQkJCQkJICBCT09MX0lURVJfRlVOQ19BUkcxIGl0ZXJf ZnVuYykKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29s ZVswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCisJewor CQlpZiAoaXRlcl9mdW5jKGNvbikpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNl OworfQorCitzdGF0aWMgaW5saW5lIGludCBjb25zb2xlX2l0ZXJfaW50X2FyZzEoc3RydWN0IGRv bWFpbiAqZCwKKwkJCQkJCQkJCQlJTlRfSVRFUl9GVU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWlu dCBpID0gMDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZv ciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKKwl7CisJCWlmIChpdGVyX2Z1 bmMoY29uKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgY29uc29sZV9pdGVyX2ludF9hcmczKHN0cnVjdCBkb21haW4gKmQsCisJCQkJCQkJCQkJ SU5UX0lURVJfRlVOQ19BUkczIGl0ZXJfZnVuYywKKwkJCQkJCQkJCQl2b2lkICppdGVyX2RhdGEp Cit7CisJaW50IGkgPSAwOworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0p OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9DT05TT0xFOyBpKyssIGNvbisrKQorCXsKKwkJaWYg KGl0ZXJfZnVuYyhjb24sIGQsIGl0ZXJfZGF0YSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJu IDA7Cit9CiBzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6 ZV90IGxlbikKIHsKIAl3aGlsZSAobGVuKSB7CkBAIC0xNjMsMTIgKzI2MiwyNyBAQCBzdGF0aWMg aW50IHdyaXRlX3dpdGhfdGltZXN0YW1wKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90 IHN6LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0cnVjdCBj b25zb2xlICpjb24pCitzdGF0aWMgaW5saW5lIGJvb2wgYnVmZmVyX2F2YWlsYWJsZShzdHJ1Y3Qg Y29uc29sZSAqY29uKQoreworCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0YSB8fAorCQkhY29u LT5idWZmZXIubWF4X2NhcGFjaXR5IHx8CisJCWNvbi0+YnVmZmVyLnNpemUgPCBjb24tPmJ1ZmZl ci5tYXhfY2FwYWNpdHkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgdm9pZCBidWZmZXJfYXBwZW5kKHN0cnVjdCBjb25zb2xlICpjb24sIHVuc2ln bmVkIGludCBkYXRhKQogewogCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9ICZjb24tPmJ1ZmZlcjsK KwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBjb24tPmludGVyZmFjZTsKKwl4ZW5l dnRjaG5fcG9ydF9vcl9lcnJvcl90IHJ4cG9ydCA9ICh4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90 KWRhdGE7CiAJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOwogCVhFTkNPTlNfUklOR19JRFgg Y29ucywgcHJvZCwgc2l6ZTsKLQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBjb24t PmludGVyZmFjZTsKKworCS8qIElmIGluY29taW5nIGRhdGEgaXMgbm90IGZvciB0aGUgY3VycmVu dCBjb25zb2xlIHRoZW4gaWdub3JlLiAqLworCWlmIChjb24tPmxvY2FsX3BvcnQgIT0gcnhwb3J0 KQorCQlyZXR1cm47CiAKIAljb25zID0gaW50Zi0+b3V0X2NvbnM7CiAJcHJvZCA9IGludGYtPm91 dF9wcm9kOwpAQCAtMzIxLDcgKzQzNSw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2NvbnNvbGVfbG9n KHN0cnVjdCBjb25zb2xlICpjb24pCiAJCXJldHVybiAtMTsKIAl9CiAKLQlzbnByaW50Zihsb2dm aWxlLCBQQVRIX01BWC0xLCAiJXMvZ3Vlc3QtJXMubG9nIiwgbG9nX2RpciwgZGF0YSk7CisJc25w cmludGYobG9nZmlsZSwgUEFUSF9NQVgtMSwgIiVzL2d1ZXN0LSVzJXMubG9nIiwgbG9nX2Rpciwg ZGF0YSwgY29uLT5sb2dfc3VmZml4KTsKIAlmcmVlKGRhdGEpOwogCWxvZ2ZpbGVbUEFUSF9NQVgt MV0gPSAnXDAnOwogCkBAIC00MjcsNiArNTQxLDkgQEAgc3RhdGljIGludCBjb25zb2xlX2NyZWF0 ZV90dHkoc3RydWN0IGNvbnNvbGUgKmNvbikKIAlzdHJ1Y3QgdGVybWlvcyB0ZXJtOwogCXN0cnVj dCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKIAorCWlmICghY29uc29sZV9lbmFibGVkKGNvbikpCisJ CXJldHVybiAxOworCiAJYXNzZXJ0KGNvbi0+c2xhdmVfZmQgPT0gLTEpOwogCWFzc2VydChjb24t Pm1hc3Rlcl9mZCA9PSAtMSk7CiAKQEAgLTQ2Miw3ICs1NzksNyBAQCBzdGF0aWMgaW50IGNvbnNv bGVfY3JlYXRlX3R0eShzdHJ1Y3QgY29uc29sZSAqY29uKQogCQlnb3RvIG91dDsKIAl9CiAKLQlz dWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIlcy9saW1pdCIsIGNvbi0+Y29uc3BhdGgpICE9CisJ c3VjY2VzcyA9IGFzcHJpbnRmKCZwYXRoLCAiJXMvbGltaXQiLCBjb24tPnhzcGF0aCkgIT0KIAkJ LTE7CiAJaWYgKCFzdWNjZXNzKQogCQlnb3RvIG91dDsKQEAgLTQ3Myw3ICs1OTAsNyBAQCBzdGF0 aWMgaW50IGNvbnNvbGVfY3JlYXRlX3R0eShzdHJ1Y3QgY29uc29sZSAqY29uKQogCX0KIAlmcmVl KHBhdGgpOwogCi0Jc3VjY2VzcyA9IChhc3ByaW50ZigmcGF0aCwgIiVzL3R0eSIsIGNvbi0+Y29u c3BhdGgpICE9IC0xKTsKKwlzdWNjZXNzID0gKGFzcHJpbnRmKCZwYXRoLCAiJXMvJXMiLCBjb24t PnhzcGF0aCwgY29uLT50dHluYW1lKSAhPSAtMSk7CiAJaWYgKCFzdWNjZXNzKQogCQlnb3RvIG91 dDsKIAlzdWNjZXNzID0geHNfd3JpdGUoeHMsIFhCVF9OVUxMLCBwYXRoLCBzbGF2ZSwgc3RybGVu KHNsYXZlKSk7CkBAIC01NDMsMTQgKzY2MCwxNCBAQCBzdGF0aWMgaW50IGNvbnNvbGVfY3JlYXRl X3Jpbmcoc3RydWN0IGNvbnNvbGUgKmNvbikKIAljaGFyICp0eXBlLCBwYXRoW1BBVEhfTUFYXTsK IAlzdHJ1Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7CiAKLQllcnIgPSB4c19nYXRoZXIoeHMsIGNv bi0+Y29uc3BhdGgsCisJZXJyID0geHNfZ2F0aGVyKHhzLCBjb24tPnhzcGF0aCwKIAkJCSJyaW5n LXJlZiIsICIldSIsICZyaW5nX3JlZiwKIAkJCSJwb3J0IiwgIiVpIiwgJnJlbW90ZV9wb3J0LAog CQkJTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlzbnByaW50ZihwYXRoLCBzaXpl b2YocGF0aCksICIlcy90eXBlIiwgY29uLT5jb25zcGF0aCk7CisJc25wcmludGYocGF0aCwgc2l6 ZW9mKHBhdGgpLCAiJXMvdHlwZSIsIGNvbi0+eHNwYXRoKTsKIAl0eXBlID0geHNfcmVhZCh4cywg WEJUX05VTEwsIHBhdGgsIE5VTEwpOwogCWlmICh0eXBlICYmIHN0cmNtcCh0eXBlLCAieGVuY29u c29sZWQiKSAhPSAwKSB7CiAJCWZyZWUodHlwZSk7CkBAIC01OTQsMTUgKzcxMSwxNiBAQCBzdGF0 aWMgaW50IGNvbnNvbGVfY3JlYXRlX3Jpbmcoc3RydWN0IGNvbnNvbGUgKmNvbikKIAogCWNvbi0+ bG9jYWxfcG9ydCA9IC0xOwogCWNvbi0+cmVtb3RlX3BvcnQgPSAtMTsKLQlpZiAoZG9tLT54Y2Vf aGFuZGxlICE9IE5VTEwpCi0JCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwogCi0J LyogT3BlbmluZyBldnRjaG4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCBjb25zb2xlIGlzIGEgYml0 Ci0JICogd2FzdGVmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQuLi4g Ki8KLQlkb20tPnhjZV9oYW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAwKTsKLQlpZiAoZG9t LT54Y2VfaGFuZGxlID09IE5VTEwpIHsKLQkJZXJyID0gZXJybm87Ci0JCWdvdG8gb3V0OworCWlm IChkb20tPnhjZV9oYW5kbGUgPT0gTlVMTCkKKwl7CisJCS8qIE9wZW5pbmcgZXZ0Y2huIGluZGVw ZW5kZW50bHkgZm9yIGVhY2ggY29uc29sZSBpcyBhIGJpdAorCQkgKiB3YXN0ZWZ1bCwgYnV0IHRo YXQncyBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZC4uLiAqLworCQlkb20tPnhjZV9oYW5kbGUg PSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAwKTsKKwkJaWYgKGRvbS0+eGNlX2hhbmRsZSA9PSBOVUxM KSB7CisJCQllcnIgPSBlcnJubzsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogIAogCXJjID0geGVu ZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZG9tLT54Y2VfaGFuZGxlLApAQCAtNjM5LDI5ICs3NTcs NjUgQEAgc3RhdGljIGJvb2wgd2F0Y2hfZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSwgYm9vbCB3 YXRjaCkKIHsKIAljaGFyIGRvbWlkX3N0clszICsgTUFYX1NUUkxFTihkb20tPmRvbWlkKV07CiAJ Ym9vbCBzdWNjZXNzOwotCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOworCXN0 cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlWzBdOwogCiAJc25wcmludGYoZG9taWRf c3RyLCBzaXplb2YoZG9taWRfc3RyKSwgImRvbSV1IiwgZG9tLT5kb21pZCk7CiAJaWYgKHdhdGNo KSB7Ci0JCXN1Y2Nlc3MgPSB4c193YXRjaCh4cywgY29uLT5jb25zcGF0aCwgZG9taWRfc3RyKTsK KwkJc3VjY2VzcyA9IHhzX3dhdGNoKHhzLCBjb24tPnhzcGF0aCwgZG9taWRfc3RyKTsKIAkJaWYg KHN1Y2Nlc3MpCi0JCQljb25zb2xlX2NyZWF0ZV9yaW5nKGNvbik7CisJCQljb25zb2xlX2l0ZXJf aW50X2FyZzEoZG9tLCBjb25zb2xlX2NyZWF0ZV9yaW5nKTsKIAkJZWxzZQotCQkJeHNfdW53YXRj aCh4cywgY29uLT5jb25zcGF0aCwgZG9taWRfc3RyKTsKKwkJCXhzX3Vud2F0Y2goeHMsIGNvbi0+ eHNwYXRoLCBkb21pZF9zdHIpOwogCX0gZWxzZSB7Ci0JCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhz LCBjb24tPmNvbnNwYXRoLCBkb21pZF9zdHIpOworCQlzdWNjZXNzID0geHNfdW53YXRjaCh4cywg Y29uLT54c3BhdGgsIGRvbWlkX3N0cik7CiAJfQogCiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKK3N0 YXRpYyBpbnQgY29uc29sZV9pbml0KHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBkb21haW4g KmRvbSwgdm9pZCAqKmRhdGEpCit7CisJY2hhciAqczsKKwlpbnQgZXJyID0gLTE7CisJc3RydWN0 IGNvbnNvbGVfZGF0YSAqKmNvbl9kYXRhID0gKHN0cnVjdCBjb25zb2xlX2RhdGEgKiopZGF0YTsK KworCWNvbi0+bWFzdGVyX2ZkID0gLTE7CisJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOwor CWNvbi0+c2xhdmVfZmQgPSAtMTsKKwljb24tPmxvZ19mZCA9IC0xOworCWNvbi0+cmluZ19yZWYg PSAtMTsKKwljb24tPmxvY2FsX3BvcnQgPSAtMTsKKwljb24tPnJlbW90ZV9wb3J0ID0gLTE7CisJ Y29uLT5kID0gZG9tOworCWNvbi0+dHR5bmFtZSA9ICgqY29uX2RhdGEpLT50dHluYW1lOworCWNv bi0+bG9nX3N1ZmZpeCA9ICgqY29uX2RhdGEpLT5sb2dfc3VmZml4OworCWNvbi0+eHNuYW1lID0g KCpjb25fZGF0YSktPnhzbmFtZTsKKwljb24tPnhzcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4 cywgZG9tLT5kb21pZCk7CisJcyA9IHJlYWxsb2MoY29uLT54c3BhdGgsIHN0cmxlbihjb24tPnhz cGF0aCkgKworCQkJCXN0cmxlbihjb24tPnhzbmFtZSkgKyAxKTsKKwlpZiAocykKKwl7CisJCWNv bi0+eHNwYXRoID0gczsKKwkJc3RyY2F0KGNvbi0+eHNwYXRoLCBjb24tPnhzbmFtZSk7CisJCWVy ciA9IDA7CisJfQorCisJKCpjb25fZGF0YSkrKzsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyB2b2lkIGNvbnNvbGVfZnJlZShzdHJ1Y3QgY29uc29sZSAqY29uKQoreworCWlmIChjb24tPnhz cGF0aCkKKwkJZnJlZShjb24tPnhzcGF0aCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpj cmVhdGVfZG9tYWluKGludCBkb21pZCkKIHsKIAlzdHJ1Y3QgZG9tYWluICpkb207Ci0JY2hhciAq czsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0Jc3RydWN0IGNvbnNvbGUgKmNvbjsKKwlzdHJ1Y3Qg Y29uc29sZV9kYXRhICpjb25fZGF0YSA9ICZjb25zb2xlX2RhdGFbMF07CiAKIAlpZiAoY2xvY2tf Z2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAwKSB7CiAJCWRvbG9nKExPR19FUlIsICJD YW5ub3QgZ2V0IHRpbWUgb2YgZGF5ICVzOiVzOkwlZCIsCkBAIC02NzgsMjggKzgzMiwxMyBAQCBz dGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCiAKIAlkb20tPmRv bWlkID0gZG9taWQ7CiAKLQljb24gPSAmZG9tLT5jb25zb2xlOwotCWNvbi0+Y29uc3BhdGggPSB4 c19nZXRfZG9tYWluX3BhdGgoeHMsIGRvbS0+ZG9taWQpOwotCXMgPSByZWFsbG9jKGNvbi0+Y29u c3BhdGgsIHN0cmxlbihjb24tPmNvbnNwYXRoKSArCi0JCSAgICBzdHJsZW4oIi9jb25zb2xlIikg KyAxKTsKLQlpZiAocyA9PSBOVUxMKQorCWlmIChjb25zb2xlX2l0ZXJfaW50X2FyZzMoZG9tLCBj b25zb2xlX2luaXQsICh2b2lkICoqKSZjb25fZGF0YSkpCiAJCWdvdG8gb3V0OwotCWNvbi0+Y29u c3BhdGggPSBzOwotCXN0cmNhdChjb24tPmNvbnNwYXRoLCAiL2NvbnNvbGUiKTsKIAotCWNvbi0+ bWFzdGVyX2ZkID0gLTE7Ci0JY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOwotCWNvbi0+c2xh dmVfZmQgPSAtMTsKLQljb24tPmxvZ19mZCA9IC0xOwotCWNvbi0+ZCA9IGRvbTsKIAlkb20tPnhj ZV9wb2xsZmRfaWR4ID0gLTE7CiAKIAlkb20tPm5leHRfcGVyaW9kID0gKChsb25nIGxvbmcpdHMu dHZfc2VjICogMTAwMCkgKyAodHMudHZfbnNlYyAvIDEwMDAwMDApICsgUkFURV9MSU1JVF9QRVJJ T0Q7CiAKLQljb24tPnJpbmdfcmVmID0gLTE7Ci0JY29uLT5sb2NhbF9wb3J0ID0gLTE7Ci0JY29u LT5yZW1vdGVfcG9ydCA9IC0xOwotCiAJaWYgKCF3YXRjaF9kb21haW4oZG9tLCB0cnVlKSkKIAkJ Z290byBvdXQ7CiAKQEAgLTcxMCw3ICs4NDksNyBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3Jl YXRlX2RvbWFpbihpbnQgZG9taWQpCiAKIAlyZXR1cm4gZG9tOwogIG91dDoKLQlmcmVlKGNvbi0+ Y29uc3BhdGgpOworCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZG9tLCBjb25zb2xlX2ZyZWUpOwog CWZyZWUoZG9tKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTc0MCwzMyArODc5LDQwIEBAIHN0YXRp YyB2b2lkIHJlbW92ZV9kb21haW4oc3RydWN0IGRvbWFpbiAqZG9tKQogCX0KIH0KIAotc3RhdGlj IHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKK3N0YXRpYyB2b2lkIGNvbnNv bGVfY2xlYW51cChzdHJ1Y3QgY29uc29sZSAqY29uKQogewotCXN0cnVjdCBjb25zb2xlICpjb24g PSAmZC0+Y29uc29sZTsKLQotCWNvbnNvbGVfY2xvc2VfdHR5KGNvbik7Ci0KIAlpZiAoY29uLT5s b2dfZmQgIT0gLTEpIHsKIAkJY2xvc2UoY29uLT5sb2dfZmQpOwogCQljb24tPmxvZ19mZCA9IC0x OwogCX0KIAotCWZyZWUoY29uLT5idWZmZXIuZGF0YSk7Ci0JY29uLT5idWZmZXIuZGF0YSA9IE5V TEw7CisJaWYgKGNvbi0+YnVmZmVyLmRhdGEpCisJeworCQlmcmVlKGNvbi0+YnVmZmVyLmRhdGEp OworCQljb24tPmJ1ZmZlci5kYXRhID0gTlVMTDsKKwl9CiAKLQlmcmVlKGNvbi0+Y29uc3BhdGgp OwotCWNvbi0+Y29uc3BhdGggPSBOVUxMOworCWlmIChjb24tPnhzcGF0aCkKKwl7CisJCWZyZWUo Y29uLT54c3BhdGgpOworCQljb24tPnhzcGF0aCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9p ZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworCWNvbnNvbGVfaXRlcl92b2lk X2FyZzEoZCwgY29uc29sZV9jbG9zZV90dHkpOworCisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShk LCBjb25zb2xlX2NsZWFudXApOwogCiAJcmVtb3ZlX2RvbWFpbihkKTsKIH0KIAogc3RhdGljIHZv aWQgc2h1dGRvd25fZG9tYWluKHN0cnVjdCBkb21haW4gKmQpCiB7Ci0Jc3RydWN0IGNvbnNvbGUg KmNvbiA9ICZkLT5jb25zb2xlOwotCiAJZC0+aXNfZGVhZCA9IHRydWU7CiAJd2F0Y2hfZG9tYWlu KGQsIGZhbHNlKTsKLQljb25zb2xlX3VubWFwX2ludGVyZmFjZShjb24pOworCWNvbnNvbGVfaXRl cl92b2lkX2FyZzEoZCwgY29uc29sZV91bm1hcF9pbnRlcmZhY2UpOwogCWlmIChkLT54Y2VfaGFu ZGxlICE9IE5VTEwpCiAJCXhlbmV2dGNobl9jbG9zZShkLT54Y2VfaGFuZGxlKTsKIAlkLT54Y2Vf aGFuZGxlID0gTlVMTDsKQEAgLTg4NSwxMCArMTAzMSwxNSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVf dHR5X3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24pCiAJfQogfQogCitzdGF0aWMgdm9pZCBjb25z b2xlX2V2ZW50X3VubWFzayhzdHJ1Y3QgY29uc29sZSAqY29uKQoreworCWlmIChjb24tPmxvY2Fs X3BvcnQgIT0gLTEpCisJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soY29uLT5kLT54Y2VfaGFuZGxl LCBjb24tPmxvY2FsX3BvcnQpOworfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0 cnVjdCBkb21haW4gKmRvbSkKIHsKIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHBvcnQ7Ci0J c3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CiAKIAlpZiAoZG9tLT5pc19kZWFk KQogCQlyZXR1cm47CkBAIC04OTgsMTAgKzEwNDksMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3Jp bmdfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCiAKIAlkb20tPmV2ZW50X2NvdW50Kys7CiAKLQli dWZmZXJfYXBwZW5kKGNvbik7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMihkb20sIGJ1ZmZlcl9h cHBlbmQsIHBvcnQpOwogCiAJaWYgKGRvbS0+ZXZlbnRfY291bnQgPCBSQVRFX0xJTUlUX0FMTE9X QU5DRSkKLQkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhkb20tPnhjZV9oYW5kbGUsIHBvcnQpOwor CQljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGRvbSwgY29uc29sZV9ldmVudF91bm1hc2spOwogfQog CiBzdGF0aWMgdm9pZCBoYW5kbGVfeHModm9pZCkKQEAgLTkyMiw3ICsxMDczLDcgQEAgc3RhdGlj IHZvaWQgaGFuZGxlX3hzKHZvaWQpCiAJCS8qIFdlIG1heSBnZXQgd2F0Y2hlcyBmaXJpbmcgZm9y IGRvbWFpbnMgdGhhdCBoYXZlIHJlY2VudGx5CiAJCSAgIGJlZW4gcmVtb3ZlZCwgc28gZG9tIG1h eSBiZSBOVUxMIGhlcmUuICovCiAJCWlmIChkb20gJiYgZG9tLT5pc19kZWFkID09IGZhbHNlKQot CQkJY29uc29sZV9jcmVhdGVfcmluZygmZG9tLT5jb25zb2xlKTsKKwkJCWNvbnNvbGVfaXRlcl9p bnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRlX3JpbmcpOwogCX0KIAogCWZyZWUodmVjKTsKQEAg LTk2MywxNiArMTExNCwyMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfaHZfbG9ncyh4ZW5ldnRjaG5f aGFuZGxlICp4Y2VfaGFuZGxlLCBib29sIGZvcmNlKQogCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNr KHhjZV9oYW5kbGUsIHBvcnQpOwogfQogCitzdGF0aWMgdm9pZCBjb25zb2xlX29wZW5fbG9nKHN0 cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbnNvbGVfZW5hYmxlZChjb24pKQorCXsKKwkJ aWYgKGNvbi0+bG9nX2ZkICE9IC0xKQorCQkJY2xvc2UoY29uLT5sb2dfZmQpOworCQljb24tPmxv Z19mZCA9IGNyZWF0ZV9jb25zb2xlX2xvZyhjb24pOworCX0KK30KKwogc3RhdGljIHZvaWQgaGFu ZGxlX2xvZ19yZWxvYWQodm9pZCkKIHsKIAlpZiAobG9nX2d1ZXN0KSB7CiAJCXN0cnVjdCBkb21h aW4gKmQ7CiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+bmV4dCkgewotCQkJc3RydWN0 IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOwotCi0JCQlpZiAoY29uLT5sb2dfZmQgIT0gLTEp Ci0JCQkJY2xvc2UoY29uLT5sb2dfZmQpOwotCQkJY29uLT5sb2dfZmQgPSBjcmVhdGVfY29uc29s ZV9sb2coY29uKTsKKwkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgY29uc29sZV9vcGVuX2xv Zyk7CiAJCX0KIAl9CiAKQEAgLTEwMjQsNiArMTE4MSw0MCBAQCBzdGF0aWMgdm9pZCByZXNldF9m ZHModm9pZCkKIAkJbWVtc2V0KGZkcywgMCwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogY3VycmVu dF9hcnJheV9zaXplKTsKIH0KIAorc3RhdGljIHZvaWQgYWRkX2NvbnNvbGVfZmQoc3RydWN0IGNv bnNvbGUgKmNvbikKK3sKKwlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEpIHsKKwkJc2hvcnQgZXZl bnRzID0gMDsKKwkJaWYgKCFjb24tPmQtPmlzX2RlYWQgJiYgcmluZ19mcmVlX2J5dGVzKGNvbikp CisJCQlldmVudHMgfD0gUE9MTElOOworCisJCWlmICghYnVmZmVyX2VtcHR5KCZjb24tPmJ1ZmZl cikpCisJCQlldmVudHMgfD0gUE9MTE9VVDsKKworCQlpZiAoZXZlbnRzKQorCQkJY29uLT5tYXN0 ZXJfcG9sbGZkX2lkeCA9CisJCQkJc2V0X2Zkcyhjb24tPm1hc3Rlcl9mZCwgZXZlbnRzfFBPTExQ UkkpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jb25zb2xlKHN0cnVjdCBjb25zb2xl ICpjb24pCit7CisJaWYgKGNvbi0+bWFzdGVyX2ZkICE9IC0xICYmIGNvbi0+bWFzdGVyX3BvbGxm ZF9pZHggIT0gLTEpIHsKKwkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRz ICYKKwkJCX4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkpCisJCQljb25zb2xlX2hhbmRsZV9icm9r ZW5fdHR5KGNvbiwgZG9tYWluX2lzX3ZhbGlkKGNvbi0+ZC0+ZG9taWQpKTsKKwkJZWxzZSB7CisJ CQlpZiAoZmRzW2Nvbi0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJCVBPTExJTikK KwkJCQloYW5kbGVfdHR5X3JlYWQoY29uKTsKKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZk X2lkeF0ucmV2ZW50cyAmCisJCQkJUE9MTE9VVCkKKwkJCQloYW5kbGVfdHR5X3dyaXRlKGNvbik7 CisJCX0KKwl9CisJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOworfQorCiB2b2lkIGhhbmRs ZV9pbyh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMDgxLDcgKzEyNzIsNiBAQCB2b2lkIGhhbmRs ZV9pbyh2b2lkKQogCQkvKiBSZS1jYWxjdWxhdGUgYW55IGV2ZW50IGNvdW50ZXIgYWxsb3dhbmNl cyAmIHVuYmxvY2sKIAkJICAgZG9tYWlucyB3aXRoIG5ldyBhbGxvd2FuY2UgKi8KIAkJZm9yIChk ID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgY29uc29sZSAqY29uID0g JmQtPmNvbnNvbGU7CiAKIAkJCS8qIENTIDE2MjU3Ojk1NWVlNGZhMTM0NSBpbnRyb2R1Y2VzIGEg NW1zIGZ1enoKIAkJCSAqIGZvciBzZWxlY3QoKSwgaXQgaXMgbm90IGNsZWFyIHBvbGwoKSBoYXMK QEAgLTEwOTIsMTQgKzEyODIsMTMgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJCWlmICgobm93 KzUpID4gZC0+bmV4dF9wZXJpb2QpIHsKIAkJCQlkLT5uZXh0X3BlcmlvZCA9IG5vdyArIFJBVEVf TElNSVRfUEVSSU9EOwogCQkJCWlmIChkLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9X QU5DRSkgewotCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGQtPnhjZV9oYW5kbGUsIGNvbi0+ bG9jYWxfcG9ydCk7CisJCQkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgY29uc29sZV9ldmVu dF91bm1hc2spOwogCQkJCX0KIAkJCQlkLT5ldmVudF9jb3VudCA9IDA7CiAJCQl9CiAJCX0KIAog CQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IGQtPm5leHQpIHsKLQkJCXN0cnVjdCBjb25zb2xl ICpjb24gPSAmZC0+Y29uc29sZTsKIAogCQkJaWYgKGQtPmV2ZW50X2NvdW50ID49IFJBVEVfTElN SVRfQUxMT1dBTkNFKSB7CiAJCQkJLyogRGV0ZXJtaW5lIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIHRo ZSBuZXh0IHRpbWUgc2xpY2UgdG8gZXhwaXJlICovCkBAIC0xMTA3LDI4ICsxMjk2LDE1IEBAIHZv aWQgaGFuZGxlX2lvKHZvaWQpCiAJCQkJICAgIGQtPm5leHRfcGVyaW9kIDwgbmV4dF90aW1lb3V0 KQogCQkJCQluZXh0X3RpbWVvdXQgPSBkLT5uZXh0X3BlcmlvZDsKIAkJCX0gZWxzZSBpZiAoZC0+ eGNlX2hhbmRsZSAhPSBOVUxMKSB7Ci0JCQkJaWYgKGRpc2NhcmRfb3ZlcmZsb3dlZF9kYXRhIHx8 Ci0JCQkJICAgICFjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwKLQkJCQkgICAgY29uLT5idWZm ZXIuc2l6ZSA8IGNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSkgewotCQkJCQlpbnQgZXZ0Y2huX2Zk ID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwotCQkJCQlkLT54Y2VfcG9sbGZkX2lkeCA9 IHNldF9mZHMoZXZ0Y2huX2ZkLAotCQkJCQkJCQkgICAgUE9MTElOfFBPTExQUkkpOworCQkJCQlp ZiAoY29uc29sZV9pdGVyX2Jvb2xfYXJnMShkLCBidWZmZXJfYXZhaWxhYmxlKSkKKwkJCQkJewor CQkJCQkJaW50IGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZChkLT54Y2VfaGFuZGxlKTsKKwkJCQkJ CWQtPnhjZV9wb2xsZmRfaWR4ID0gc2V0X2ZkcyhldnRjaG5fZmQsCisJCQkJCQkJCQkJCQkJUE9M TElOfFBPTExQUkkpOworCQkJCQl9CiAJCQkJfQotCQkJfQotCi0JCQlpZiAoY29uLT5tYXN0ZXJf ZmQgIT0gLTEpIHsKLQkJCQlzaG9ydCBldmVudHMgPSAwOwotCQkJCWlmICghZC0+aXNfZGVhZCAm JiByaW5nX2ZyZWVfYnl0ZXMoY29uKSkKLQkJCQkJZXZlbnRzIHw9IFBPTExJTjsKIAotCQkJCWlm ICghYnVmZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikpCi0JCQkJCWV2ZW50cyB8PSBQT0xMT1VUOwot Ci0JCQkJaWYgKGV2ZW50cykKLQkJCQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9Ci0JCQkJCQlz ZXRfZmRzKGNvbi0+bWFzdGVyX2ZkLAotCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKLQkJCX0KKwkJ CWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgYWRkX2NvbnNvbGVfZmQpOwogCQl9CiAKIAkJLyog SWYgYW55IGRvbWFpbiBoYXMgYmVlbiByYXRlIGxpbWl0ZWQsIHdlIG5lZWQgdG8gd29yawpAQCAt MTE4NSw3ICsxMzYxLDYgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJfQogCiAJCWZvciAoZCA9 IGRvbV9oZWFkOyBkOyBkID0gbikgewotCQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25z b2xlOwogCiAJCQluID0gZC0+bmV4dDsKIAkJCWlmIChkLT5ldmVudF9jb3VudCA8IFJBVEVfTElN SVRfQUxMT1dBTkNFKSB7CkBAIC0xMTk4LDIyICsxMzczLDkgQEAgdm9pZCBoYW5kbGVfaW8odm9p ZCkKIAkJCQkgICAgaGFuZGxlX3JpbmdfcmVhZChkKTsKIAkJCX0KIAotCQkJaWYgKGNvbi0+bWFz dGVyX2ZkICE9IC0xICYmIGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKLQkJCQlpZiAo ZmRzW2Nvbi0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgotCQkJCSAgICB+KFBPTExJTnxQ T0xMT1VUfFBPTExQUkkpKQotCQkJCQljb25zb2xlX2hhbmRsZV9icm9rZW5fdHR5KGNvbiwKLQkJ CQkJCSAgIGRvbWFpbl9pc192YWxpZChkLT5kb21pZCkpOwotCQkJCWVsc2UgewotCQkJCQlpZiAo ZmRzW2Nvbi0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgotCQkJCQkgICAgUE9MTElOKQot CQkJCQkJaGFuZGxlX3R0eV9yZWFkKGNvbik7Ci0JCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9s bGZkX2lkeF0ucmV2ZW50cyAmCi0JCQkJCSAgICBQT0xMT1VUKQotCQkJCQkJaGFuZGxlX3R0eV93 cml0ZShjb24pOwotCQkJCX0KLQkJCX0KKwkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgcHJv Y2Vzc19jb25zb2xlKTsKIAotCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBjb24tPm1hc3Rlcl9wb2xs ZmRfaWR4ID0gLTE7CisJCQlkLT54Y2VfcG9sbGZkX2lkeCA9IC0xOwogCiAJCQlpZiAoZC0+bGFz dF9zZWVuICE9IGVudW1fcGFzcykKIAkJCQlzaHV0ZG93bl9kb21haW4oZCk7Ci0tIAoyLjcuNAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=