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 15:34:22 +0530 Message-ID: <1496743462-15937-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 1dIBLk-00047j-5B for xen-devel@lists.xenproject.org; Tue, 06 Jun 2017 10:04:32 +0000 Received: by mail-pf0-f181.google.com with SMTP id l89so21931880pfi.2 for ; Tue, 06 Jun 2017 03:04:29 -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 VGhpcyBwYXRjaCBhZGRzIHRoZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBjb25zb2xlcyBhbmQgaW50 cm9kdWNlcyB0aGUgaXRlcmF0b3IKZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gbXVsdGlwbGUgY29u c29sZXMuCgpUaGlzIHBhdGNoIGlzIGluIHByZXBhcmF0aW9uIHRvIHN1cHBvcnQgYSBuZXcgdnVh cnQgY29uc29sZS4KClNpZ25lZC1vZmYtYnk6IEJodXBpbmRlciBUaGFrdXIgPGJodXBpbmRlci50 aGFrdXJAbGluYXJvLm9yZz4KLS0tCgpDaGFuZ2VzIHNpbmNlIHYzOgotIFRoZSBjaGFuZ2VzIGlu IHhlbmNvbnNvbGUgaGF2ZSBiZWVuIHNwbGl0IGludG8gZm91ciBwYXRjaGVzLiBUaGlzIGlzIHRo ZSB0aGlyZCBwYXRjaC4KCiB0b29scy9jb25zb2xlL2RhZW1vbi9pby5jIHwgMzY0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAy NjMgaW5zZXJ0aW9ucygrKSwgMTAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2Nv bnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCmluZGV4IGM1ZGQw OGQuLmRiNzNlMTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKKysrIGIv dG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwpAQCAtOTAsMTIgKzkwLDE1IEBAIHN0cnVjdCBidWZm ZXIgewogfTsKIAogc3RydWN0IGNvbnNvbGUgeworCWNoYXIgKnhzbmFtZTsKKwljaGFyICp0dHlu YW1lOwogCWludCBtYXN0ZXJfZmQ7CiAJaW50IG1hc3Rlcl9wb2xsZmRfaWR4OwogCWludCBzbGF2 ZV9mZDsKIAlpbnQgbG9nX2ZkOwogCXN0cnVjdCBidWZmZXIgYnVmZmVyOwotCWNoYXIgKmNvbnNw YXRoOworCWNoYXIgKnhzcGF0aDsKKwljaGFyICpsb2dfc3VmZml4OwogCWludCByaW5nX3JlZjsK IAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IGxvY2FsX3BvcnQ7CiAJeGVuZXZ0Y2huX3BvcnRf b3JfZXJyb3JfdCByZW1vdGVfcG9ydDsKQEAgLTEwMyw2ICsxMDYsMjMgQEAgc3RydWN0IGNvbnNv bGUgewogCXN0cnVjdCBkb21haW4gKmQ7CiB9OwogCitzdHJ1Y3QgY29uc29sZV9kYXRhIHsKKwlj aGFyICp4c25hbWU7CisJY2hhciAqdHR5bmFtZTsKKwljaGFyICpsb2dfc3VmZml4OworfTsKKwor c3RhdGljIHN0cnVjdCBjb25zb2xlX2RhdGEgY29uc29sZV9kYXRhW10gPSB7CisKKwl7CisJCS54 c25hbWUgPSAiL2NvbnNvbGUiLAorCQkudHR5bmFtZSA9ICJ0dHkiLAorCQkubG9nX3N1ZmZpeCA9 ICIiLAorCX0sCit9OworCisjZGVmaW5lIE1BWF9DT05TT0xFIChzaXplb2YoY29uc29sZV9kYXRh KS9zaXplb2Yoc3RydWN0IGNvbnNvbGVfZGF0YSkpCisKIHN0cnVjdCBkb21haW4gewogCWludCBk b21pZDsKIAlib29sIGlzX2RlYWQ7CkBAIC0xMTIsMTEgKzEzMiw5MCBAQCBzdHJ1Y3QgZG9tYWlu IHsKIAlpbnQgeGNlX3BvbGxmZF9pZHg7CiAJaW50IGV2ZW50X2NvdW50OwogCWxvbmcgbG9uZyBu ZXh0X3BlcmlvZDsKLQlzdHJ1Y3QgY29uc29sZSBjb25zb2xlOworCXN0cnVjdCBjb25zb2xlIGNv bnNvbGVbTUFYX0NPTlNPTEVdOwogfTsKIAogc3RhdGljIHN0cnVjdCBkb21haW4gKmRvbV9oZWFk OwogCit0eXBlZGVmIHZvaWQgKCpWT0lEX0lURVJfRlVOQ19BUkcxKShzdHJ1Y3QgY29uc29sZSAq KTsKK3R5cGVkZWYgYm9vbCAoKkJPT0xfSVRFUl9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICop OwordHlwZWRlZiBpbnQgKCpJTlRfSVRFUl9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwor dHlwZWRlZiB2b2lkICgqVk9JRF9JVEVSX0ZVTkNfQVJHMikoc3RydWN0IGNvbnNvbGUgKiwgIHVu c2lnbmVkIGludCk7Cit0eXBlZGVmIGludCAoKklOVF9JVEVSX0ZVTkNfQVJHMykoc3RydWN0IGNv bnNvbGUgKiwKKwkJCSBzdHJ1Y3QgZG9tYWluICpkb20sIHZvaWQgKiopOworCitzdGF0aWMgaW5s aW5lIGJvb2wgY29uc29sZV9lbmFibGVkKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJcmV0dXJu IGNvbi0+bG9jYWxfcG9ydCAhPSAtMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVf aXRlcl92b2lkX2FyZzEoc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCQkJCQkgIFZPSURfSVRFUl9G VU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgY29uc29sZSAqY29u ID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsr LCBjb24rKykKKwl7CisJCWl0ZXJfZnVuYyhjb24pOworCX0KK30KKworc3RhdGljIGlubGluZSB2 b2lkIGNvbnNvbGVfaXRlcl92b2lkX2FyZzIoc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCQkJCQkg IFZPSURfSVRFUl9GVU5DX0FSRzIgaXRlcl9mdW5jLAorCQkJCQkJCQkJCSAgdW5zaWduZWQgaW50 IGl0ZXJfZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+ Y29uc29sZVswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKysp CisJeworCQlpdGVyX2Z1bmMoY29uLCBpdGVyX2RhdGEpOworCX0KK30KKworc3RhdGljIGlubGlu ZSBib29sIGNvbnNvbGVfaXRlcl9ib29sX2FyZzEoc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCQkJ CQkgIEJPT0xfSVRFUl9GVU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWludCBpID0gMDsKKwlzdHJ1 Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBN QVhfQ09OU09MRTsgaSsrLCBjb24rKykKKwl7CisJCWlmIChpdGVyX2Z1bmMoY29uKSkKKwkJCXJl dHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNv bnNvbGVfaXRlcl9pbnRfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJCQkJCUlOVF9JVEVS X0ZVTkNfQVJHMSBpdGVyX2Z1bmMpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBjb25zb2xlICpj b24gPSAmKGQtPmNvbnNvbGVbMF0pOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9DT05TT0xFOyBp KyssIGNvbisrKQorCXsKKwkJaWYgKGl0ZXJfZnVuYyhjb24pKQorCQkJcmV0dXJuIDE7CisJfQor CXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb25zb2xlX2l0ZXJfaW50X2FyZzMo c3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCQkJCQlJTlRfSVRFUl9GVU5DX0FSRzMgaXRlcl9mdW5j LAorCQkJCQkJCQkJCXZvaWQgKml0ZXJfZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNv bnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NP TlNPTEU7IGkrKywgY29uKyspCisJeworCQlpZiAoaXRlcl9mdW5jKGNvbiwgZCwgaXRlcl9kYXRh KSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KIHN0YXRpYyBpbnQgd3JpdGVfYWxs KGludCBmZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQogewogCXdoaWxlIChsZW4pIHsK QEAgLTE2MywxMiArMjYyLDI3IEBAIHN0YXRpYyBpbnQgd3JpdGVfd2l0aF90aW1lc3RhbXAoaW50 IGZkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc3osCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGNvbnNvbGUgKmNvbikKK3N0YXRpYyBpbmxpbmUg Ym9vbCBidWZmZXJfYXZhaWxhYmxlKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGRpc2Nh cmRfb3ZlcmZsb3dlZF9kYXRhIHx8CisJCSFjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwKKwkJ Y29uLT5idWZmZXIuc2l6ZSA8IGNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSkKKwkJcmV0dXJuIHRy dWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBl bmQoc3RydWN0IGNvbnNvbGUgKmNvbiwgdW5zaWduZWQgaW50IGRhdGEpCiB7CiAJc3RydWN0IGJ1 ZmZlciAqYnVmZmVyID0gJmNvbi0+YnVmZmVyOworCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAq aW50ZiA9IGNvbi0+aW50ZXJmYWNlOworCXhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3Qgcnhwb3J0 ID0gKHhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QpZGF0YTsKIAlzdHJ1Y3QgZG9tYWluICpkb20g PSBjb24tPmQ7CiAJWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9kLCBzaXplOwotCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOworCisJLyogSWYgaW5jb21p bmcgZGF0YSBpcyBub3QgZm9yIHRoZSBjdXJyZW50IGNvbnNvbGUgdGhlbiBpZ25vcmUuICovCisJ aWYgKGNvbi0+bG9jYWxfcG9ydCAhPSByeHBvcnQpCisJCXJldHVybjsKIAogCWNvbnMgPSBpbnRm LT5vdXRfY29uczsKIAlwcm9kID0gaW50Zi0+b3V0X3Byb2Q7CkBAIC0zMjEsNyArNDM1LDcgQEAg c3RhdGljIGludCBjcmVhdGVfY29uc29sZV9sb2coc3RydWN0IGNvbnNvbGUgKmNvbikKIAkJcmV0 dXJuIC0xOwogCX0KIAotCXNucHJpbnRmKGxvZ2ZpbGUsIFBBVEhfTUFYLTEsICIlcy9ndWVzdC0l cy5sb2ciLCBsb2dfZGlyLCBkYXRhKTsKKwlzbnByaW50Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAi JXMvZ3Vlc3QtJXMlcy5sb2ciLCBsb2dfZGlyLCBkYXRhLCBjb24tPmxvZ19zdWZmaXgpOwogCWZy ZWUoZGF0YSk7CiAJbG9nZmlsZVtQQVRIX01BWC0xXSA9ICdcMCc7CiAKQEAgLTQyNyw2ICs1NDEs OSBAQCBzdGF0aWMgaW50IGNvbnNvbGVfY3JlYXRlX3R0eShzdHJ1Y3QgY29uc29sZSAqY29uKQog CXN0cnVjdCB0ZXJtaW9zIHRlcm07CiAJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOwogCisJ aWYgKCFjb25zb2xlX2VuYWJsZWQoY29uKSkKKwkJcmV0dXJuIDE7CisKIAlhc3NlcnQoY29uLT5z bGF2ZV9mZCA9PSAtMSk7CiAJYXNzZXJ0KGNvbi0+bWFzdGVyX2ZkID09IC0xKTsKIApAQCAtNDYy LDcgKzU3OSw3IEBAIHN0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfdHR5KHN0cnVjdCBjb25zb2xl ICpjb24pCiAJCWdvdG8gb3V0OwogCX0KIAotCXN1Y2Nlc3MgPSBhc3ByaW50ZigmcGF0aCwgIiVz L2xpbWl0IiwgY29uLT5jb25zcGF0aCkgIT0KKwlzdWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIl cy9saW1pdCIsIGNvbi0+eHNwYXRoKSAhPQogCQktMTsKIAlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8g b3V0OwpAQCAtNDczLDcgKzU5MCw3IEBAIHN0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfdHR5KHN0 cnVjdCBjb25zb2xlICpjb24pCiAJfQogCWZyZWUocGF0aCk7CiAKLQlzdWNjZXNzID0gKGFzcHJp bnRmKCZwYXRoLCAiJXMvdHR5IiwgY29uLT5jb25zcGF0aCkgIT0gLTEpOworCXN1Y2Nlc3MgPSAo YXNwcmludGYoJnBhdGgsICIlcy8lcyIsIGNvbi0+eHNwYXRoLCBjb24tPnR0eW5hbWUpICE9IC0x KTsKIAlpZiAoIXN1Y2Nlc3MpCiAJCWdvdG8gb3V0OwogCXN1Y2Nlc3MgPSB4c193cml0ZSh4cywg WEJUX05VTEwsIHBhdGgsIHNsYXZlLCBzdHJsZW4oc2xhdmUpKTsKQEAgLTU0MywxNCArNjYwLDE0 IEBAIHN0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfcmluZyhzdHJ1Y3QgY29uc29sZSAqY29uKQog CWNoYXIgKnR5cGUsIHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ ZDsKIAotCWVyciA9IHhzX2dhdGhlcih4cywgY29uLT5jb25zcGF0aCwKKwllcnIgPSB4c19nYXRo ZXIoeHMsIGNvbi0+eHNwYXRoLAogCQkJInJpbmctcmVmIiwgIiV1IiwgJnJpbmdfcmVmLAogCQkJ InBvcnQiLCAiJWkiLCAmcmVtb3RlX3BvcnQsCiAJCQlOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3Rv IG91dDsKIAotCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzL3R5cGUiLCBjb24tPmNv bnNwYXRoKTsKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgY29uLT54 c3BhdGgpOwogCXR5cGUgPSB4c19yZWFkKHhzLCBYQlRfTlVMTCwgcGF0aCwgTlVMTCk7CiAJaWYg KHR5cGUgJiYgc3RyY21wKHR5cGUsICJ4ZW5jb25zb2xlZCIpICE9IDApIHsKIAkJZnJlZSh0eXBl KTsKQEAgLTU5NCwxNSArNzExLDE2IEBAIHN0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfcmluZyhz dHJ1Y3QgY29uc29sZSAqY29uKQogCiAJY29uLT5sb2NhbF9wb3J0ID0gLTE7CiAJY29uLT5yZW1v dGVfcG9ydCA9IC0xOwotCWlmIChkb20tPnhjZV9oYW5kbGUgIT0gTlVMTCkKLQkJeGVuZXZ0Y2hu X2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7CiAKLQkvKiBPcGVuaW5nIGV2dGNobiBpbmRlcGVuZGVu dGx5IGZvciBlYWNoIGNvbnNvbGUgaXMgYSBiaXQKLQkgKiB3YXN0ZWZ1bCwgYnV0IHRoYXQncyBo b3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZC4uLiAqLwotCWRvbS0+eGNlX2hhbmRsZSA9IHhlbmV2 dGNobl9vcGVuKE5VTEwsIDApOwotCWlmIChkb20tPnhjZV9oYW5kbGUgPT0gTlVMTCkgewotCQll cnIgPSBlcnJubzsKLQkJZ290byBvdXQ7CisJaWYgKGRvbS0+eGNlX2hhbmRsZSA9PSBOVUxMKQor CXsKKwkJLyogT3BlbmluZyBldnRjaG4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCBjb25zb2xlIGlz IGEgYml0CisJCSAqIHdhc3RlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1 cmVkLi4uICovCisJCWRvbS0+eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVuKE5VTEwsIDApOwor CQlpZiAoZG9tLT54Y2VfaGFuZGxlID09IE5VTEwpIHsKKwkJCWVyciA9IGVycm5vOworCQkJZ290 byBvdXQ7CisJCX0KIAl9CiAgCiAJcmMgPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbihkb20t PnhjZV9oYW5kbGUsCkBAIC02MzksMjkgKzc1Nyw2NSBAQCBzdGF0aWMgYm9vbCB3YXRjaF9kb21h aW4oc3RydWN0IGRvbWFpbiAqZG9tLCBib29sIHdhdGNoKQogewogCWNoYXIgZG9taWRfc3RyWzMg KyBNQVhfU1RSTEVOKGRvbS0+ZG9taWQpXTsKIAlib29sIHN1Y2Nlc3M7Ci0Jc3RydWN0IGNvbnNv bGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNv bnNvbGVbMF07CiAKIAlzbnByaW50Zihkb21pZF9zdHIsIHNpemVvZihkb21pZF9zdHIpLCAiZG9t JXUiLCBkb20tPmRvbWlkKTsKIAlpZiAod2F0Y2gpIHsKLQkJc3VjY2VzcyA9IHhzX3dhdGNoKHhz LCBjb24tPmNvbnNwYXRoLCBkb21pZF9zdHIpOworCQlzdWNjZXNzID0geHNfd2F0Y2goeHMsIGNv bi0+eHNwYXRoLCBkb21pZF9zdHIpOwogCQlpZiAoc3VjY2VzcykKLQkJCWNvbnNvbGVfY3JlYXRl X3JpbmcoY29uKTsKKwkJCWNvbnNvbGVfaXRlcl9pbnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRl X3JpbmcpOwogCQllbHNlCi0JCQl4c191bndhdGNoKHhzLCBjb24tPmNvbnNwYXRoLCBkb21pZF9z dHIpOworCQkJeHNfdW53YXRjaCh4cywgY29uLT54c3BhdGgsIGRvbWlkX3N0cik7CiAJfSBlbHNl IHsKLQkJc3VjY2VzcyA9IHhzX3Vud2F0Y2goeHMsIGNvbi0+Y29uc3BhdGgsIGRvbWlkX3N0cik7 CisJCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhzLCBjb24tPnhzcGF0aCwgZG9taWRfc3RyKTsKIAl9 CiAKIAlyZXR1cm4gc3VjY2VzczsKIH0KIAorc3RhdGljIGludCBjb25zb2xlX2luaXQoc3RydWN0 IGNvbnNvbGUgKmNvbiwgc3RydWN0IGRvbWFpbiAqZG9tLCB2b2lkICoqZGF0YSkKK3sKKwljaGFy ICpzOworCWludCBlcnIgPSAtMTsKKwlzdHJ1Y3QgY29uc29sZV9kYXRhICoqY29uX2RhdGEgPSAo c3RydWN0IGNvbnNvbGVfZGF0YSAqKilkYXRhOworCisJY29uLT5tYXN0ZXJfZmQgPSAtMTsKKwlj b24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7CisJY29uLT5zbGF2ZV9mZCA9IC0xOworCWNvbi0+ bG9nX2ZkID0gLTE7CisJY29uLT5yaW5nX3JlZiA9IC0xOworCWNvbi0+bG9jYWxfcG9ydCA9IC0x OworCWNvbi0+cmVtb3RlX3BvcnQgPSAtMTsKKwljb24tPmQgPSBkb207CisJY29uLT50dHluYW1l ID0gKCpjb25fZGF0YSktPnR0eW5hbWU7CisJY29uLT5sb2dfc3VmZml4ID0gKCpjb25fZGF0YSkt PmxvZ19zdWZmaXg7CisJY29uLT54c25hbWUgPSAoKmNvbl9kYXRhKS0+eHNuYW1lOworCWNvbi0+ eHNwYXRoID0geHNfZ2V0X2RvbWFpbl9wYXRoKHhzLCBkb20tPmRvbWlkKTsKKwlzID0gcmVhbGxv Yyhjb24tPnhzcGF0aCwgc3RybGVuKGNvbi0+eHNwYXRoKSArCisJCQkJc3RybGVuKGNvbi0+eHNu YW1lKSArIDEpOworCWlmIChzKQorCXsKKwkJY29uLT54c3BhdGggPSBzOworCQlzdHJjYXQoY29u LT54c3BhdGgsIGNvbi0+eHNuYW1lKTsKKwkJZXJyID0gMDsKKwl9CisKKwkoKmNvbl9kYXRhKSsr OworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgY29uc29sZV9mcmVlKHN0cnVjdCBj b25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+eHNwYXRoKQorCQlmcmVlKGNvbi0+eHNwYXRoKTsK K30KIAogc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQogewog CXN0cnVjdCBkb21haW4gKmRvbTsKLQljaGFyICpzOwogCXN0cnVjdCB0aW1lc3BlYyB0czsKLQlz dHJ1Y3QgY29uc29sZSAqY29uOworCXN0cnVjdCBjb25zb2xlX2RhdGEgKmNvbl9kYXRhID0gJmNv bnNvbGVfZGF0YVswXTsKIAogCWlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRz KSA8IDApIHsKIAkJZG9sb2coTE9HX0VSUiwgIkNhbm5vdCBnZXQgdGltZSBvZiBkYXkgJXM6JXM6 TCVkIiwKQEAgLTY3OCwyOCArODMyLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVf ZG9tYWluKGludCBkb21pZCkKIAogCWRvbS0+ZG9taWQgPSBkb21pZDsKIAotCWNvbiA9ICZkb20t PmNvbnNvbGU7Ci0JY29uLT5jb25zcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5k b21pZCk7Ci0JcyA9IHJlYWxsb2MoY29uLT5jb25zcGF0aCwgc3RybGVuKGNvbi0+Y29uc3BhdGgp ICsKLQkJICAgIHN0cmxlbigiL2NvbnNvbGUiKSArIDEpOwotCWlmIChzID09IE5VTEwpCisJaWYg KGNvbnNvbGVfaXRlcl9pbnRfYXJnMyhkb20sIGNvbnNvbGVfaW5pdCwgKHZvaWQgKiopJmNvbl9k YXRhKSkKIAkJZ290byBvdXQ7Ci0JY29uLT5jb25zcGF0aCA9IHM7Ci0Jc3RyY2F0KGNvbi0+Y29u c3BhdGgsICIvY29uc29sZSIpOwogCi0JY29uLT5tYXN0ZXJfZmQgPSAtMTsKLQljb24tPm1hc3Rl cl9wb2xsZmRfaWR4ID0gLTE7Ci0JY29uLT5zbGF2ZV9mZCA9IC0xOwotCWNvbi0+bG9nX2ZkID0g LTE7Ci0JY29uLT5kID0gZG9tOwogCWRvbS0+eGNlX3BvbGxmZF9pZHggPSAtMTsKIAogCWRvbS0+ bmV4dF9wZXJpb2QgPSAoKGxvbmcgbG9uZyl0cy50dl9zZWMgKiAxMDAwKSArICh0cy50dl9uc2Vj IC8gMTAwMDAwMCkgKyBSQVRFX0xJTUlUX1BFUklPRDsKIAotCWNvbi0+cmluZ19yZWYgPSAtMTsK LQljb24tPmxvY2FsX3BvcnQgPSAtMTsKLQljb24tPnJlbW90ZV9wb3J0ID0gLTE7Ci0KIAlpZiAo IXdhdGNoX2RvbWFpbihkb20sIHRydWUpKQogCQlnb3RvIG91dDsKIApAQCAtNzEwLDcgKzg0OSw3 IEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVfZG9tYWluKGludCBkb21pZCkKIAogCXJl dHVybiBkb207CiAgb3V0OgotCWZyZWUoY29uLT5jb25zcGF0aCk7CisJY29uc29sZV9pdGVyX3Zv aWRfYXJnMShkb20sIGNvbnNvbGVfZnJlZSk7CiAJZnJlZShkb20pOwogCXJldHVybiBOVUxMOwog fQpAQCAtNzQwLDMzICs4NzksNDAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbihzdHJ1Y3Qg ZG9tYWluICpkb20pCiAJfQogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3Qg ZG9tYWluICpkKQorc3RhdGljIHZvaWQgY29uc29sZV9jbGVhbnVwKHN0cnVjdCBjb25zb2xlICpj b24pCiB7Ci0Jc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOwotCi0JY29uc29sZV9j bG9zZV90dHkoY29uKTsKLQogCWlmIChjb24tPmxvZ19mZCAhPSAtMSkgewogCQljbG9zZShjb24t PmxvZ19mZCk7CiAJCWNvbi0+bG9nX2ZkID0gLTE7CiAJfQogCi0JZnJlZShjb24tPmJ1ZmZlci5k YXRhKTsKLQljb24tPmJ1ZmZlci5kYXRhID0gTlVMTDsKKwlpZiAoY29uLT5idWZmZXIuZGF0YSkK Kwl7CisJCWZyZWUoY29uLT5idWZmZXIuZGF0YSk7CisJCWNvbi0+YnVmZmVyLmRhdGEgPSBOVUxM OworCX0KIAotCWZyZWUoY29uLT5jb25zcGF0aCk7Ci0JY29uLT5jb25zcGF0aCA9IE5VTEw7CisJ aWYgKGNvbi0+eHNwYXRoKQorCXsKKwkJZnJlZShjb24tPnhzcGF0aCk7CisJCWNvbi0+eHNwYXRo ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfZG9tYWluKHN0cnVjdCBkb21h aW4gKmQpCit7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX2Nsb3NlX3R0eSk7 CisKKwljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGQsIGNvbnNvbGVfY2xlYW51cCk7CiAKIAlyZW1v dmVfZG9tYWluKGQpOwogfQogCiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9kb21haW4oc3RydWN0IGRv bWFpbiAqZCkKIHsKLQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7Ci0KIAlkLT5p c19kZWFkID0gdHJ1ZTsKIAl3YXRjaF9kb21haW4oZCwgZmFsc2UpOwotCWNvbnNvbGVfdW5tYXBf aW50ZXJmYWNlKGNvbik7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX3VubWFw X2ludGVyZmFjZSk7CiAJaWYgKGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkKIAkJeGVuZXZ0Y2huX2Ns b3NlKGQtPnhjZV9oYW5kbGUpOwogCWQtPnhjZV9oYW5kbGUgPSBOVUxMOwpAQCAtODg1LDEwICsx MDMxLDE1IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90dHlfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNv bikKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGNvbnNvbGVfZXZlbnRfdW5tYXNrKHN0cnVjdCBjb25z b2xlICpjb24pCit7CisJaWYgKGNvbi0+bG9jYWxfcG9ydCAhPSAtMSkKKwkJKHZvaWQpeGVuZXZ0 Y2huX3VubWFzayhjb24tPmQtPnhjZV9oYW5kbGUsIGNvbi0+bG9jYWxfcG9ydCk7Cit9CisKIHN0 YXRpYyB2b2lkIGhhbmRsZV9yaW5nX3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQogewogCXhlbmV2 dGNobl9wb3J0X29yX2Vycm9yX3QgcG9ydDsKLQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+ Y29uc29sZTsKIAogCWlmIChkb20tPmlzX2RlYWQpCiAJCXJldHVybjsKQEAgLTg5OCwxMCArMTA0 OSwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkK IAogCWRvbS0+ZXZlbnRfY291bnQrKzsKIAotCWJ1ZmZlcl9hcHBlbmQoY29uKTsKKwljb25zb2xl X2l0ZXJfdm9pZF9hcmcyKGRvbSwgYnVmZmVyX2FwcGVuZCwgcG9ydCk7CiAKIAlpZiAoZG9tLT5l dmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKQotCQkodm9pZCl4ZW5ldnRjaG5fdW5t YXNrKGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7CisJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZG9t LCBjb25zb2xlX2V2ZW50X3VubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV94cyh2b2lk KQpAQCAtOTIyLDcgKzEwNzMsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfeHModm9pZCkKIAkJLyog V2UgbWF5IGdldCB3YXRjaGVzIGZpcmluZyBmb3IgZG9tYWlucyB0aGF0IGhhdmUgcmVjZW50bHkK IAkJICAgYmVlbiByZW1vdmVkLCBzbyBkb20gbWF5IGJlIE5VTEwgaGVyZS4gKi8KIAkJaWYgKGRv bSAmJiBkb20tPmlzX2RlYWQgPT0gZmFsc2UpCi0JCQljb25zb2xlX2NyZWF0ZV9yaW5nKCZkb20t PmNvbnNvbGUpOworCQkJY29uc29sZV9pdGVyX2ludF9hcmcxKGRvbSwgY29uc29sZV9jcmVhdGVf cmluZyk7CiAJfQogCiAJZnJlZSh2ZWMpOwpAQCAtOTYzLDE2ICsxMTE0LDIyIEBAIHN0YXRpYyB2 b2lkIGhhbmRsZV9odl9sb2dzKHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUsIGJvb2wgZm9y Y2UpCiAJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9ydCk7CiB9CiAKK3N0 YXRpYyB2b2lkIGNvbnNvbGVfb3Blbl9sb2coc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAo Y29uc29sZV9lbmFibGVkKGNvbikpCisJeworCQlpZiAoY29uLT5sb2dfZmQgIT0gLTEpCisJCQlj bG9zZShjb24tPmxvZ19mZCk7CisJCWNvbi0+bG9nX2ZkID0gY3JlYXRlX2NvbnNvbGVfbG9nKGNv bik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfbG9nX3JlbG9hZCh2b2lkKQogewogCWlm IChsb2dfZ3Vlc3QpIHsKIAkJc3RydWN0IGRvbWFpbiAqZDsKIAkJZm9yIChkID0gZG9tX2hlYWQ7 IGQ7IGQgPSBkLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7 Ci0KLQkJCWlmIChjb24tPmxvZ19mZCAhPSAtMSkKLQkJCQljbG9zZShjb24tPmxvZ19mZCk7Ci0J CQljb24tPmxvZ19mZCA9IGNyZWF0ZV9jb25zb2xlX2xvZyhjb24pOworCQkJY29uc29sZV9pdGVy X3ZvaWRfYXJnMShkLCBjb25zb2xlX29wZW5fbG9nKTsKIAkJfQogCX0KIApAQCAtMTAyNCw2ICsx MTgxLDQwIEBAIHN0YXRpYyB2b2lkIHJlc2V0X2Zkcyh2b2lkKQogCQltZW1zZXQoZmRzLCAwLCBz aXplb2Yoc3RydWN0IHBvbGxmZCkgKiBjdXJyZW50X2FycmF5X3NpemUpOwogfQogCitzdGF0aWMg dm9pZCBhZGRfY29uc29sZV9mZChzdHJ1Y3QgY29uc29sZSAqY29uKQoreworCWlmIChjb24tPm1h c3Rlcl9mZCAhPSAtMSkgeworCQlzaG9ydCBldmVudHMgPSAwOworCQlpZiAoIWNvbi0+ZC0+aXNf ZGVhZCAmJiByaW5nX2ZyZWVfYnl0ZXMoY29uKSkKKwkJCWV2ZW50cyB8PSBQT0xMSU47CisKKwkJ aWYgKCFidWZmZXJfZW1wdHkoJmNvbi0+YnVmZmVyKSkKKwkJCWV2ZW50cyB8PSBQT0xMT1VUOwor CisJCWlmIChldmVudHMpCisJCQljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0KKwkJCQlzZXRfZmRz KGNvbi0+bWFzdGVyX2ZkLCBldmVudHN8UE9MTFBSSSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBw cm9jZXNzX2NvbnNvbGUoc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAoY29uLT5tYXN0ZXJf ZmQgIT0gLTEgJiYgY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkgeworCQlpZiAoZmRzW2Nv bi0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJfihQT0xMSU58UE9MTE9VVHxQT0xM UFJJKSkKKwkJCWNvbnNvbGVfaGFuZGxlX2Jyb2tlbl90dHkoY29uLCBkb21haW5faXNfdmFsaWQo Y29uLT5kLT5kb21pZCkpOworCQllbHNlIHsKKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZk X2lkeF0ucmV2ZW50cyAmCisJCQkJUE9MTElOKQorCQkJCWhhbmRsZV90dHlfcmVhZChjb24pOwor CQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCQlQT0xMT1VU KQorCQkJCWhhbmRsZV90dHlfd3JpdGUoY29uKTsKKwkJfQorCX0KKwljb24tPm1hc3Rlcl9wb2xs ZmRfaWR4ID0gLTE7Cit9CisKIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiB7CiAJaW50IHJldDsKQEAg LTEwODEsNyArMTI3Miw2IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCiAJCS8qIFJlLWNhbGN1bGF0 ZSBhbnkgZXZlbnQgY291bnRlciBhbGxvd2FuY2VzICYgdW5ibG9jawogCQkgICBkb21haW5zIHdp dGggbmV3IGFsbG93YW5jZSAqLwogCQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IGQtPm5leHQp IHsKLQkJCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZC0+Y29uc29sZTsKIAogCQkJLyogQ1MgMTYy NTc6OTU1ZWU0ZmExMzQ1IGludHJvZHVjZXMgYSA1bXMgZnV6egogCQkJICogZm9yIHNlbGVjdCgp LCBpdCBpcyBub3QgY2xlYXIgcG9sbCgpIGhhcwpAQCAtMTA5MiwxNCArMTI4MiwxMyBAQCB2b2lk IGhhbmRsZV9pbyh2b2lkKQogCQkJaWYgKChub3crNSkgPiBkLT5uZXh0X3BlcmlvZCkgewogCQkJ CWQtPm5leHRfcGVyaW9kID0gbm93ICsgUkFURV9MSU1JVF9QRVJJT0Q7CiAJCQkJaWYgKGQtPmV2 ZW50X2NvdW50ID49IFJBVEVfTElNSVRfQUxMT1dBTkNFKSB7Ci0JCQkJCSh2b2lkKXhlbmV2dGNo bl91bm1hc2soZC0+eGNlX2hhbmRsZSwgY29uLT5sb2NhbF9wb3J0KTsKKwkJCQkJY29uc29sZV9p dGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX2V2ZW50X3VubWFzayk7CiAJCQkJfQogCQkJCWQtPmV2 ZW50X2NvdW50ID0gMDsKIAkJCX0KIAkJfQogCiAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0g ZC0+bmV4dCkgewotCQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOwogCiAJCQlp ZiAoZC0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKIAkJCQkvKiBEZXRl cm1pbmUgaWYgd2UncmUgZ29pbmcgdG8gYmUgdGhlIG5leHQgdGltZSBzbGljZSB0byBleHBpcmUg Ki8KQEAgLTExMDcsMjggKzEyOTYsMTUgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKIAkJCQkgICAg ZC0+bmV4dF9wZXJpb2QgPCBuZXh0X3RpbWVvdXQpCiAJCQkJCW5leHRfdGltZW91dCA9IGQtPm5l eHRfcGVyaW9kOwogCQkJfSBlbHNlIGlmIChkLT54Y2VfaGFuZGxlICE9IE5VTEwpIHsKLQkJCQlp ZiAoZGlzY2FyZF9vdmVyZmxvd2VkX2RhdGEgfHwKLQkJCQkgICAgIWNvbi0+YnVmZmVyLm1heF9j YXBhY2l0eSB8fAotCQkJCSAgICBjb24tPmJ1ZmZlci5zaXplIDwgY29uLT5idWZmZXIubWF4X2Nh cGFjaXR5KSB7Ci0JCQkJCWludCBldnRjaG5fZmQgPSB4ZW5ldnRjaG5fZmQoZC0+eGNlX2hhbmRs ZSk7Ci0JCQkJCWQtPnhjZV9wb2xsZmRfaWR4ID0gc2V0X2ZkcyhldnRjaG5fZmQsCi0JCQkJCQkJ CSAgICBQT0xMSU58UE9MTFBSSSk7CisJCQkJCWlmIChjb25zb2xlX2l0ZXJfYm9vbF9hcmcxKGQs IGJ1ZmZlcl9hdmFpbGFibGUpKQorCQkJCQl7CisJCQkJCQlpbnQgZXZ0Y2huX2ZkID0geGVuZXZ0 Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOworCQkJCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRz KGV2dGNobl9mZCwKKwkJCQkJCQkJCQkJCQlQT0xMSU58UE9MTFBSSSk7CisJCQkJCX0KIAkJCQl9 Ci0JCQl9Ci0KLQkJCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAtMSkgewotCQkJCXNob3J0IGV2ZW50 cyA9IDA7Ci0JCQkJaWYgKCFkLT5pc19kZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhjb24pKQotCQkJ CQlldmVudHMgfD0gUE9MTElOOwogCi0JCQkJaWYgKCFidWZmZXJfZW1wdHkoJmNvbi0+YnVmZmVy KSkKLQkJCQkJZXZlbnRzIHw9IFBPTExPVVQ7Ci0KLQkJCQlpZiAoZXZlbnRzKQotCQkJCQljb24t Pm1hc3Rlcl9wb2xsZmRfaWR4ID0KLQkJCQkJCXNldF9mZHMoY29uLT5tYXN0ZXJfZmQsCi0JCQkJ CQkJZXZlbnRzfFBPTExQUkkpOwotCQkJfQorCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBh ZGRfY29uc29sZV9mZCk7CiAJCX0KIAogCQkvKiBJZiBhbnkgZG9tYWluIGhhcyBiZWVuIHJhdGUg bGltaXRlZCwgd2UgbmVlZCB0byB3b3JrCkBAIC0xMTg1LDcgKzEzNjEsNiBAQCB2b2lkIGhhbmRs ZV9pbyh2b2lkKQogCQl9CiAKIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBuKSB7Ci0JCQlz dHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7CiAKIAkJCW4gPSBkLT5uZXh0OwogCQkJ aWYgKGQtPmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKQEAgLTExOTgsMjIg KzEzNzMsOSBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQogCQkJCSAgICBoYW5kbGVfcmluZ19yZWFk KGQpOwogCQkJfQogCi0JCQlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEgJiYgY29uLT5tYXN0ZXJf cG9sbGZkX2lkeCAhPSAtMSkgewotCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0u cmV2ZW50cyAmCi0JCQkJICAgIH4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkpCi0JCQkJCWNvbnNv bGVfaGFuZGxlX2Jyb2tlbl90dHkoY29uLAotCQkJCQkJICAgZG9tYWluX2lzX3ZhbGlkKGQtPmRv bWlkKSk7Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0u cmV2ZW50cyAmCi0JCQkJCSAgICBQT0xMSU4pCi0JCQkJCQloYW5kbGVfdHR5X3JlYWQoY29uKTsK LQkJCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKLQkJCQkJICAg IFBPTExPVVQpCi0JCQkJCQloYW5kbGVfdHR5X3dyaXRlKGNvbik7Ci0JCQkJfQotCQkJfQorCQkJ Y29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBwcm9jZXNzX2NvbnNvbGUpOwogCi0JCQlkLT54Y2Vf cG9sbGZkX2lkeCA9IGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKKwkJCWQtPnhjZV9wb2xs ZmRfaWR4ID0gLTE7CiAKIAkJCWlmIChkLT5sYXN0X3NlZW4gIT0gZW51bV9wYXNzKQogCQkJCXNo dXRkb3duX2RvbWFpbihkKTsKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==