From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 13/17 v5] xen/arm: vpl011: Modify xenconsole to support multiple consoles Date: Thu, 22 Jun 2017 13:08:48 +0530 Message-ID: <1498117132-27139-14-git-send-email-bhupinder.thakur@linaro.org> References: <1498117132-27139-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 1dNwiN-0005qP-S7 for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 07:39:44 +0000 Received: by mail-pg0-f53.google.com with SMTP id 132so4600063pgb.2 for ; Thu, 22 Jun 2017 00:39:41 -0700 (PDT) In-Reply-To: <1498117132-27139-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 aGFrdXJAbGluYXJvLm9yZz4KLS0tCkNDOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0 cml4LmNvbT4KQ0M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkNDOiBTdGVmYW5vIFN0 YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+CkNDOiBKdWxpZW4gR3JhbGwgPGp1bGll bi5ncmFsbEBhcm0uY29tPgoKQ2hhbmdlcyBzaW5jZSB2NDoKLSBDaGFuZ2VzIHRvIG1ha2UgZXZl bnQgY2hhbm5lbCBoYW5kbGluZyBwZXIgY29uc29sZSByYXRoZXIgdGhhbiBwZXIgZG9tYWluLgoK Q2hhbmdlcyBzaW5jZSB2MzoKLSBUaGUgY2hhbmdlcyBpbiB4ZW5jb25zb2xlIGhhdmUgYmVlbiBz cGxpdCBpbnRvIGZvdXIgcGF0Y2hlcy4gVGhpcyBpcyB0aGUgdGhpcmQgcGF0Y2guCgogdG9vbHMv Y29uc29sZS9kYWVtb24vaW8uYyB8IDQzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKyksIDEzMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jIGIvdG9v bHMvY29uc29sZS9kYWVtb24vaW8uYwppbmRleCBhMmEzNDk2Li5iYWYwZTJlIDEwMDY0NAotLS0g YS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCisrKyBiL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lv LmMKQEAgLTkwLDEyICs5MCwxNCBAQCBzdHJ1Y3QgYnVmZmVyIHsKIH07CiAKIHN0cnVjdCBjb25z b2xlIHsKKwljaGFyICp0dHluYW1lOwogCWludCBtYXN0ZXJfZmQ7CiAJaW50IG1hc3Rlcl9wb2xs ZmRfaWR4OwogCWludCBzbGF2ZV9mZDsKIAlpbnQgbG9nX2ZkOwogCXN0cnVjdCBidWZmZXIgYnVm ZmVyOwogCWNoYXIgKnhzcGF0aDsKKwljaGFyICpsb2dfc3VmZml4OwogCWludCByaW5nX3JlZjsK IAl4ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlOwogCWludCB4Y2VfcG9sbGZkX2lkeDsKQEAg LTEwNywxNiArMTA5LDExMiBAQCBzdHJ1Y3QgY29uc29sZSB7CiAJc3RydWN0IGRvbWFpbiAqZDsK IH07CiAKK3N0cnVjdCBjb25zb2xlX2RhdGEgeworCWNoYXIgKnhzbmFtZTsKKwljaGFyICp0dHlu YW1lOworCWNoYXIgKmxvZ19zdWZmaXg7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbnNvbGVfZGF0 YSBjb25zb2xlX2RhdGFbXSA9IHsKKworCXsKKwkJLnhzbmFtZSA9ICIvY29uc29sZSIsCisJCS50 dHluYW1lID0gInR0eSIsCisJCS5sb2dfc3VmZml4ID0gIiIsCisJfSwKK307CisKKyNkZWZpbmUg TUFYX0NPTlNPTEUgKHNpemVvZihjb25zb2xlX2RhdGEpL3NpemVvZihzdHJ1Y3QgY29uc29sZV9k YXRhKSkKKwogc3RydWN0IGRvbWFpbiB7CiAJaW50IGRvbWlkOwogCWJvb2wgaXNfZGVhZDsKIAl1 bnNpZ25lZCBsYXN0X3NlZW47CiAJc3RydWN0IGRvbWFpbiAqbmV4dDsKLQlzdHJ1Y3QgY29uc29s ZSBjb25zb2xlOworCXN0cnVjdCBjb25zb2xlIGNvbnNvbGVbTUFYX0NPTlNPTEVdOwogfTsKIAog c3RhdGljIHN0cnVjdCBkb21haW4gKmRvbV9oZWFkOwogCit0eXBlZGVmIHZvaWQgKCpWT0lEX0lU RVJfRlVOQ19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKK3R5cGVkZWYgYm9vbCAoKkJPT0xfSVRF Ul9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwordHlwZWRlZiBpbnQgKCpJTlRfSVRFUl9G VU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwordHlwZWRlZiB2b2lkICgqVk9JRF9JVEVSX0ZV TkNfQVJHMikoc3RydWN0IGNvbnNvbGUgKiwgIHZvaWQgKik7Cit0eXBlZGVmIGludCAoKklOVF9J VEVSX0ZVTkNfQVJHMykoc3RydWN0IGNvbnNvbGUgKiwKKwkJCSBzdHJ1Y3QgZG9tYWluICpkb20s IHZvaWQgKiopOworCitzdGF0aWMgaW5saW5lIGJvb2wgY29uc29sZV9lbmFibGVkKHN0cnVjdCBj b25zb2xlICpjb24pCit7CisJcmV0dXJuIGNvbi0+bG9jYWxfcG9ydCAhPSAtMTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGNvbnNvbGVfaXRlcl92b2lkX2FyZzEoc3RydWN0IGRvbWFpbiAqZCwK KwkJCQkJCQkJCQkgIFZPSURfSVRFUl9GVU5DX0FSRzEgaXRlcl9mdW5jKQoreworCWludCBpID0g MDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9 IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKKwl7CisJCWl0ZXJfZnVuYyhjb24pOwor CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfaXRlcl92b2lkX2FyZzIoc3RydWN0 IGRvbWFpbiAqZCwKKwkJCQkJCQkJCQkgIFZPSURfSVRFUl9GVU5DX0FSRzIgaXRlcl9mdW5jLAor CQkJCQkJCQkJCSAgdm9pZCAqaXRlcl9kYXRhKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgY29u c29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09O U09MRTsgaSsrLCBjb24rKykKKwl7CisJCWl0ZXJfZnVuYyhjb24sIGl0ZXJfZGF0YSk7CisJfQor fQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29uc29sZV9pdGVyX2Jvb2xfYXJnMShzdHJ1Y3QgZG9t YWluICpkLAorCQkJCQkJCQkJCSAgQk9PTF9JVEVSX0ZVTkNfQVJHMSBpdGVyX2Z1bmMpCit7CisJ aW50IGkgPSAwOworCXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOworCisJ Zm9yIChpID0gMDsgaSA8IE1BWF9DT05TT0xFOyBpKyssIGNvbisrKQorCXsKKwkJaWYgKGl0ZXJf ZnVuYyhjb24pKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3Rh dGljIGlubGluZSBpbnQgY29uc29sZV9pdGVyX2ludF9hcmcxKHN0cnVjdCBkb21haW4gKmQsCisJ CQkJCQkJCQkJSU5UX0lURVJfRlVOQ19BUkcxIGl0ZXJfZnVuYykKK3sKKwlpbnQgaSA9IDA7CisJ c3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCisJeworCQlpZiAoaXRlcl9mdW5jKGNvbikpCisJ CQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnNv bGVfaXRlcl9pbnRfYXJnMyhzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJCQkJCUlOVF9JVEVSX0ZV TkNfQVJHMyBpdGVyX2Z1bmMsCisJCQkJCQkJCQkJdm9pZCAqKml0ZXJfZGF0YSkKK3sKKwlpbnQg aSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCisJeworCQlpZiAoaXRlcl9mdW5j KGNvbiwgZCwgaXRlcl9kYXRhKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KIHN0 YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQog ewogCXdoaWxlIChsZW4pIHsKQEAgLTE2MywxMiArMjYxLDIyIEBAIHN0YXRpYyBpbnQgd3JpdGVf d2l0aF90aW1lc3RhbXAoaW50IGZkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc3osCiAJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGNvbnNvbGUgKmNv bikKK3N0YXRpYyBpbmxpbmUgYm9vbCBidWZmZXJfYXZhaWxhYmxlKHN0cnVjdCBjb25zb2xlICpj b24pCit7CisJaWYgKGRpc2NhcmRfb3ZlcmZsb3dlZF9kYXRhIHx8CisJCSFjb24tPmJ1ZmZlci5t YXhfY2FwYWNpdHkgfHwKKwkJY29uLT5idWZmZXIuc2l6ZSA8IGNvbi0+YnVmZmVyLm1heF9jYXBh Y2l0eSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp YyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGNvbnNvbGUgKmNvbiwgeGVuZXZ0Y2huX3BvcnRf b3JfZXJyb3JfdCBwb3J0KQogewogCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9ICZjb24tPmJ1ZmZl cjsKKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBjb24tPmludGVyZmFjZTsKIAlz dHJ1Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7CiAJWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9k LCBzaXplOwotCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNl OwogCiAJY29ucyA9IGludGYtPm91dF9jb25zOwogCXByb2QgPSBpbnRmLT5vdXRfcHJvZDsKQEAg LTMyMSw3ICs0MjksNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9jb25zb2xlX2xvZyhzdHJ1Y3QgY29u c29sZSAqY29uKQogCQlyZXR1cm4gLTE7CiAJfQogCi0Jc25wcmludGYobG9nZmlsZSwgUEFUSF9N QVgtMSwgIiVzL2d1ZXN0LSVzLmxvZyIsIGxvZ19kaXIsIGRhdGEpOworCXNucHJpbnRmKGxvZ2Zp bGUsIFBBVEhfTUFYLTEsICIlcy9ndWVzdC0lcyVzLmxvZyIsIGxvZ19kaXIsIGRhdGEsIGNvbi0+ bG9nX3N1ZmZpeCk7CiAJZnJlZShkYXRhKTsKIAlsb2dmaWxlW1BBVEhfTUFYLTFdID0gJ1wwJzsK IApAQCAtNDczLDcgKzU4MSw3IEBAIHN0YXRpYyBpbnQgY29uc29sZV9jcmVhdGVfdHR5KHN0cnVj dCBjb25zb2xlICpjb24pCiAJfQogCWZyZWUocGF0aCk7CiAKLQlzdWNjZXNzID0gKGFzcHJpbnRm KCZwYXRoLCAiJXMvdHR5IiwgY29uLT54c3BhdGgpICE9IC0xKTsKKwlzdWNjZXNzID0gKGFzcHJp bnRmKCZwYXRoLCAiJXMvJXMiLCBjb24tPnhzcGF0aCwgY29uLT50dHluYW1lKSAhPSAtMSk7CiAJ aWYgKCFzdWNjZXNzKQogCQlnb3RvIG91dDsKIAlzdWNjZXNzID0geHNfd3JpdGUoeHMsIFhCVF9O VUxMLCBwYXRoLCBzbGF2ZSwgc3RybGVuKHNsYXZlKSk7CkBAIC01OTQsNiArNzAyLDcgQEAgc3Rh dGljIGludCBjb25zb2xlX2NyZWF0ZV9yaW5nKHN0cnVjdCBjb25zb2xlICpjb24pCiAKIAljb24t PmxvY2FsX3BvcnQgPSAtMTsKIAljb24tPnJlbW90ZV9wb3J0ID0gLTE7CisKIAlpZiAoY29uLT54 Y2VfaGFuZGxlICE9IE5VTEwpCiAJCXhlbmV2dGNobl9jbG9zZShjb24tPnhjZV9oYW5kbGUpOwog CkBAIC02MzksMTMgKzc0OCwxMyBAQCBzdGF0aWMgYm9vbCB3YXRjaF9kb21haW4oc3RydWN0IGRv bWFpbiAqZG9tLCBib29sIHdhdGNoKQogewogCWNoYXIgZG9taWRfc3RyWzMgKyBNQVhfU1RSTEVO KGRvbS0+ZG9taWQpXTsKIAlib29sIHN1Y2Nlc3M7Ci0Jc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZk b20tPmNvbnNvbGU7CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGVbMF07CiAK IAlzbnByaW50Zihkb21pZF9zdHIsIHNpemVvZihkb21pZF9zdHIpLCAiZG9tJXUiLCBkb20tPmRv bWlkKTsKIAlpZiAod2F0Y2gpIHsKIAkJc3VjY2VzcyA9IHhzX3dhdGNoKHhzLCBjb24tPnhzcGF0 aCwgZG9taWRfc3RyKTsKIAkJaWYgKHN1Y2Nlc3MpCi0JCQljb25zb2xlX2NyZWF0ZV9yaW5nKGNv bik7CisJCQljb25zb2xlX2l0ZXJfaW50X2FyZzEoZG9tLCBjb25zb2xlX2NyZWF0ZV9yaW5nKTsK IAkJZWxzZQogCQkJeHNfdW53YXRjaCh4cywgY29uLT54c3BhdGgsIGRvbWlkX3N0cik7CiAJfSBl bHNlIHsKQEAgLTY1NSwyMCArNzY0LDU5IEBAIHN0YXRpYyBib29sIHdhdGNoX2RvbWFpbihzdHJ1 Y3QgZG9tYWluICpkb20sIGJvb2wgd2F0Y2gpCiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLQotc3Rh dGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQorc3RhdGljIGludCBj b25zb2xlX2luaXQoc3RydWN0IGNvbnNvbGUgKmNvbiwgc3RydWN0IGRvbWFpbiAqZG9tLCB2b2lk ICoqZGF0YSkKIHsKLQlzdHJ1Y3QgZG9tYWluICpkb207CiAJY2hhciAqczsKKwlpbnQgZXJyID0g LTE7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwotCXN0cnVjdCBjb25zb2xlICpjb247CisJc3RydWN0 IGNvbnNvbGVfZGF0YSAqKmNvbl9kYXRhID0gKHN0cnVjdCBjb25zb2xlX2RhdGEgKiopZGF0YTsK KwljaGFyICp4c25hbWU7CiAKIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0 cykgPCAwKSB7CiAJCWRvbG9nKExPR19FUlIsICJDYW5ub3QgZ2V0IHRpbWUgb2YgZGF5ICVzOiVz OkwlZCIsCiAJCSAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKLQkJcmV0 dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CisJfQorCisJY29uLT5tYXN0ZXJfZmQgPSAtMTsKKwlj b24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7CisJY29uLT5zbGF2ZV9mZCA9IC0xOworCWNvbi0+ bG9nX2ZkID0gLTE7CisJY29uLT5yaW5nX3JlZiA9IC0xOworCWNvbi0+bG9jYWxfcG9ydCA9IC0x OworCWNvbi0+cmVtb3RlX3BvcnQgPSAtMTsKKwljb24tPnhjZV9wb2xsZmRfaWR4ID0gLTE7CisJ Y29uLT5uZXh0X3BlcmlvZCA9ICgobG9uZyBsb25nKXRzLnR2X3NlYyAqIDEwMDApICsgKHRzLnR2 X25zZWMgLyAxMDAwMDAwKSArIFJBVEVfTElNSVRfUEVSSU9EOworCWNvbi0+ZCA9IGRvbTsKKwlj b24tPnR0eW5hbWUgPSAoKmNvbl9kYXRhKS0+dHR5bmFtZTsKKwljb24tPmxvZ19zdWZmaXggPSAo KmNvbl9kYXRhKS0+bG9nX3N1ZmZpeDsKKwl4c25hbWUgPSAoKmNvbl9kYXRhKS0+eHNuYW1lOwor CWNvbi0+eHNwYXRoID0geHNfZ2V0X2RvbWFpbl9wYXRoKHhzLCBkb20tPmRvbWlkKTsKKwlzID0g cmVhbGxvYyhjb24tPnhzcGF0aCwgc3RybGVuKGNvbi0+eHNwYXRoKSArCisJCQkJc3RybGVuKHhz bmFtZSkgKyAxKTsKKwlpZiAocykKKwl7CisJCWNvbi0+eHNwYXRoID0gczsKKwkJc3RyY2F0KGNv bi0+eHNwYXRoLCB4c25hbWUpOworCQllcnIgPSAwOwogCX0KIAorCSgqY29uX2RhdGEpKys7CisK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBjb25zb2xlX2ZyZWUoc3RydWN0IGNvbnNv bGUgKmNvbikKK3sKKwlpZiAoY29uLT54c3BhdGgpCisJCWZyZWUoY29uLT54c3BhdGgpOworfQor CitzdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCit7CisJc3Ry dWN0IGRvbWFpbiAqZG9tOworCXN0cnVjdCBjb25zb2xlX2RhdGEgKmNvbl9kYXRhID0gJmNvbnNv bGVfZGF0YVswXTsKKwogCWRvbSA9IGNhbGxvYygxLCBzaXplb2YgKmRvbSk7CiAJaWYgKGRvbSA9 PSBOVUxMKSB7CiAJCWRvbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5ICVzOiVzKCk6TCVkIiwK QEAgLTY3OCwyNyArODI2LDggQEAgc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4o aW50IGRvbWlkKQogCiAJZG9tLT5kb21pZCA9IGRvbWlkOwogCi0JY29uID0gJmRvbS0+Y29uc29s ZTsKLQljb24tPnhzcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7Ci0J cyA9IHJlYWxsb2MoY29uLT54c3BhdGgsIHN0cmxlbihjb24tPnhzcGF0aCkgKwotCQkgICAgc3Ry bGVuKCIvY29uc29sZSIpICsgMSk7Ci0JaWYgKHMgPT0gTlVMTCkKKwlpZiAoY29uc29sZV9pdGVy X2ludF9hcmczKGRvbSwgY29uc29sZV9pbml0LCAodm9pZCAqKikmY29uX2RhdGEpKQogCQlnb3Rv IG91dDsKLQljb24tPnhzcGF0aCA9IHM7Ci0Jc3RyY2F0KGNvbi0+eHNwYXRoLCAiL2NvbnNvbGUi KTsKLQotCWNvbi0+bWFzdGVyX2ZkID0gLTE7Ci0JY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0x OwotCWNvbi0+c2xhdmVfZmQgPSAtMTsKLQljb24tPmxvZ19mZCA9IC0xOwotCWNvbi0+eGNlX3Bv bGxmZF9pZHggPSAtMTsKLQljb24tPmQgPSBkb207Ci0KLQljb24tPm5leHRfcGVyaW9kID0gKChs b25nIGxvbmcpdHMudHZfc2VjICogMTAwMCkgKyAodHMudHZfbnNlYyAvIDEwMDAwMDApICsgUkFU RV9MSU1JVF9QRVJJT0Q7Ci0KLQljb24tPnJpbmdfcmVmID0gLTE7Ci0JY29uLT5sb2NhbF9wb3J0 ID0gLTE7Ci0JY29uLT5yZW1vdGVfcG9ydCA9IC0xOwogCiAJaWYgKCF3YXRjaF9kb21haW4oZG9t LCB0cnVlKSkKIAkJZ290byBvdXQ7CkBAIC03MTAsNyArODM5LDcgQEAgc3RhdGljIHN0cnVjdCBk b21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQogCiAJcmV0dXJuIGRvbTsKICBvdXQ6Ci0J ZnJlZShjb24tPnhzcGF0aCk7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkb20sIGNvbnNvbGVf ZnJlZSk7CiAJZnJlZShkb20pOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzQwLDM4ICs4NjksNTEg QEAgc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkb20pCiAJfQogfQog Ci1zdGF0aWMgdm9pZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQorc3RhdGljIHZv aWQgY29uc29sZV9jbGVhbnVwKHN0cnVjdCBjb25zb2xlICpjb24pCiB7Ci0Jc3RydWN0IGNvbnNv bGUgKmNvbiA9ICZkLT5jb25zb2xlOwotCi0JY29uc29sZV9jbG9zZV90dHkoY29uKTsKLQogCWlm IChjb24tPmxvZ19mZCAhPSAtMSkgewogCQljbG9zZShjb24tPmxvZ19mZCk7CiAJCWNvbi0+bG9n X2ZkID0gLTE7CiAJfQogCi0JZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKLQljb24tPmJ1ZmZlci5k YXRhID0gTlVMTDsKKwlpZiAoY29uLT5idWZmZXIuZGF0YSkKKwl7CisJCWZyZWUoY29uLT5idWZm ZXIuZGF0YSk7CisJCWNvbi0+YnVmZmVyLmRhdGEgPSBOVUxMOworCX0KKworCWlmIChjb24tPnhz cGF0aCkKKwl7CisJCWZyZWUoY29uLT54c3BhdGgpOworCQljb24tPnhzcGF0aCA9IE5VTEw7CisJ fQorfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQorewor CWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgY29uc29sZV9jbG9zZV90dHkpOwogCi0JZnJlZShj b24tPnhzcGF0aCk7Ci0JY29uLT54c3BhdGggPSBOVUxMOworCWNvbnNvbGVfaXRlcl92b2lkX2Fy ZzEoZCwgY29uc29sZV9jbGVhbnVwKTsKIAogCXJlbW92ZV9kb21haW4oZCk7CiB9CiAKLXN0YXRp YyB2b2lkIHNodXRkb3duX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQorc3RhdGljIHZvaWQgY29u c29sZV9jbG9zZV9ldnRjaG4oc3RydWN0IGNvbnNvbGUgKmNvbikKIHsKLQlzdHJ1Y3QgY29uc29s ZSAqY29uID0gJmQtPmNvbnNvbGU7Ci0KLQlkLT5pc19kZWFkID0gdHJ1ZTsKLQl3YXRjaF9kb21h aW4oZCwgZmFsc2UpOwotCWNvbnNvbGVfdW5tYXBfaW50ZXJmYWNlKGNvbik7CiAJaWYgKGNvbi0+ eGNlX2hhbmRsZSAhPSBOVUxMKQogCQl4ZW5ldnRjaG5fY2xvc2UoY29uLT54Y2VfaGFuZGxlKTsK KwogCWNvbi0+eGNlX2hhbmRsZSA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHNodXRkb3duX2Rv bWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworCWQtPmlzX2RlYWQgPSB0cnVlOworCXdhdGNoX2Rv bWFpbihkLCBmYWxzZSk7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX3VubWFw X2ludGVyZmFjZSk7CisJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX2Nsb3NlX2V2 dGNobik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBlbnVtX3Bhc3MgPSAwOwogCiBzdGF0aWMgdm9p ZCBlbnVtX2RvbWFpbnModm9pZCkKQEAgLTg4NSwxMiArMTAyNywzMiBAQCBzdGF0aWMgdm9pZCBo YW5kbGVfdHR5X3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24pCiAJfQogfQogCi1zdGF0aWMgdm9p ZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKK3N0YXRpYyB2b2lkIGNvbnNv bGVfZXZ0Y2huX3VubWFzayhzdHJ1Y3QgY29uc29sZSAqY29uLCB2b2lkICpkYXRhKQoreworCWxv bmcgbG9uZyBub3cgPSAobG9uZyBsb25nKWRhdGE7CisKKwlpZiAoIWNvbnNvbGVfZW5hYmxlZChj b24pKQorCQlyZXR1cm47CisKKwkvKiBDUyAxNjI1Nzo5NTVlZTRmYTEzNDUgaW50cm9kdWNlcyBh IDVtcyBmdXp6CisJICogZm9yIHNlbGVjdCgpLCBpdCBpcyBub3QgY2xlYXIgcG9sbCgpIGhhcwor CSAqIHNpbWlsYXIgYmVoYXZpb3IgKHJldHVybmluZyBhIGNvdXBsZSBvZiBtcworCSAqIHNvb25l ciB0aGFuIHJlcXVlc3RlZCkgYXMgd2VsbC4gSnVzdCBsZWF2ZQorCSAqIHRoZSBmdXp6IGhlcmUu IFJlbW92ZSBpdCB3aXRoIGEgc2VwYXJhdGUKKwkgKiBwYXRjaCBpZiBuZWNlc3NhcnkgKi8KKwlp ZiAoKG5vdys1KSA+IGNvbi0+bmV4dF9wZXJpb2QpIHsKKwkJY29uLT5uZXh0X3BlcmlvZCA9IG5v dyArIFJBVEVfTElNSVRfUEVSSU9EOworCQlpZiAoY29uLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJ TUlUX0FMTE9XQU5DRSkKKwkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGNvbi0+eGNlX2hhbmRs ZSwgY29uLT5sb2NhbF9wb3J0KTsKKwkJY29uLT5ldmVudF9jb3VudCA9IDA7CisJfQorfQorCitz dGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBjb25zb2xlICpjb24pCiB7CiAJeGVu ZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0OwotCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9t LT5jb25zb2xlOwogCi0JaWYgKGRvbS0+aXNfZGVhZCkKKwlpZiAoY29uLT5kLT5pc19kZWFkKQog CQlyZXR1cm47CiAKIAlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyhjb24tPnhjZV9oYW5k bGUpKSA9PSAtMSkKQEAgLTg5OCwxMCArMTA2MCwyMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmlu Z19yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKIAogCWNvbi0+ZXZlbnRfY291bnQrKzsKIAotCWJ1 ZmZlcl9hcHBlbmQoY29uKTsKKwlidWZmZXJfYXBwZW5kKGNvbiwgcG9ydCk7CiAKIAlpZiAoY29u LT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKQotCQkodm9pZCl4ZW5ldnRjaG5f dW5tYXNrKGNvbi0+eGNlX2hhbmRsZSwgcG9ydCk7CisJCSh2b2lkKXhlbmV2dGNobl91bm1hc2so Y29uLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQpOworfQorCitzdGF0aWMgdm9pZCBoYW5k bGVfY29uc29sZV9yaW5nKHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+ZXZlbnRf Y291bnQgPCBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgeworCQlpZiAoY29uLT54Y2VfaGFuZGxlICE9 IE5VTEwgJiYKKwkJCWNvbi0+eGNlX3BvbGxmZF9pZHggIT0gLTEgJiYKKwkJCSEoZmRzW2Nvbi0+ eGNlX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJICB+KFBPTExJTnxQT0xMT1VUfFBPTExQUkkp KSAmJgorCQkJICAoZmRzW2Nvbi0+eGNlX3BvbGxmZF9pZHhdLnJldmVudHMgJgorCQkJICAgUE9M TElOKSkKKwkJCWhhbmRsZV9yaW5nX3JlYWQoY29uKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGhh bmRsZV94cyh2b2lkKQpAQCAtOTIyLDcgKzEwOTcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfeHMo dm9pZCkKIAkJLyogV2UgbWF5IGdldCB3YXRjaGVzIGZpcmluZyBmb3IgZG9tYWlucyB0aGF0IGhh dmUgcmVjZW50bHkKIAkJICAgYmVlbiByZW1vdmVkLCBzbyBkb20gbWF5IGJlIE5VTEwgaGVyZS4g Ki8KIAkJaWYgKGRvbSAmJiBkb20tPmlzX2RlYWQgPT0gZmFsc2UpCi0JCQljb25zb2xlX2NyZWF0 ZV9yaW5nKCZkb20tPmNvbnNvbGUpOworCQkJY29uc29sZV9pdGVyX2ludF9hcmcxKGRvbSwgY29u c29sZV9jcmVhdGVfcmluZyk7CiAJfQogCiAJZnJlZSh2ZWMpOwpAQCAtOTYzLDE2ICsxMTM4LDIy IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9odl9sb2dzKHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5k bGUsIGJvb2wgZm9yY2UpCiAJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9y dCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbnNvbGVfb3Blbl9sb2coc3RydWN0IGNvbnNvbGUgKmNv bikKK3sKKwlpZiAoY29uc29sZV9lbmFibGVkKGNvbikpCisJeworCQlpZiAoY29uLT5sb2dfZmQg IT0gLTEpCisJCQljbG9zZShjb24tPmxvZ19mZCk7CisJCWNvbi0+bG9nX2ZkID0gY3JlYXRlX2Nv bnNvbGVfbG9nKGNvbik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfbG9nX3JlbG9hZCh2 b2lkKQogewogCWlmIChsb2dfZ3Vlc3QpIHsKIAkJc3RydWN0IGRvbWFpbiAqZDsKIAkJZm9yIChk ID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgY29uc29sZSAqY29uID0g JmQtPmNvbnNvbGU7Ci0KLQkJCWlmIChjb24tPmxvZ19mZCAhPSAtMSkKLQkJCQljbG9zZShjb24t PmxvZ19mZCk7Ci0JCQljb24tPmxvZ19mZCA9IGNyZWF0ZV9jb25zb2xlX2xvZyhjb24pOworCQkJ Y29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX29wZW5fbG9nKTsKIAkJfQogCX0KIApA QCAtMTAyNCw2ICsxMjA1LDYyIEBAIHN0YXRpYyB2b2lkIHJlc2V0X2Zkcyh2b2lkKQogCQltZW1z ZXQoZmRzLCAwLCBzaXplb2Yoc3RydWN0IHBvbGxmZCkgKiBjdXJyZW50X2FycmF5X3NpemUpOwog fQogCitzdGF0aWMgdm9pZCBhZGRfY29uc29sZV9ldnRjaG5fZmQoc3RydWN0IGNvbnNvbGUgKmNv biwgdm9pZCAqZGF0YSkKK3sKKwlsb25nIGxvbmcgbmV4dF90aW1lb3V0ID0gKigobG9uZyBsb25n ICopZGF0YSk7CisKKwlpZiAoY29uLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5D RSkgeworCQkvKiBEZXRlcm1pbmUgaWYgd2UncmUgZ29pbmcgdG8gYmUgdGhlIG5leHQgdGltZSBz bGljZSB0byBleHBpcmUgKi8KKwkJaWYgKCFuZXh0X3RpbWVvdXQgfHwKKwkJCWNvbi0+bmV4dF9w ZXJpb2QgPCBuZXh0X3RpbWVvdXQpCisJCQluZXh0X3RpbWVvdXQgPSBjb24tPm5leHRfcGVyaW9k OworCX0gZWxzZSBpZiAoY29uLT54Y2VfaGFuZGxlICE9IE5VTEwpIHsKKwkJCWlmIChidWZmZXJf YXZhaWxhYmxlKGNvbikpCisJCQl7CisJCQkJaW50IGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZChj b24tPnhjZV9oYW5kbGUpOworCQkJCWNvbi0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2dGNo bl9mZCwKKwkJCQkJCQkJCQkJICBQT0xMSU58UE9MTFBSSSk7CisJCQl9CisJCX0KKworCSooKGxv bmcgbG9uZyAqKWRhdGEpID0gbmV4dF90aW1lb3V0OworfQorCitzdGF0aWMgdm9pZCBhZGRfY29u c29sZV90dHlfZmQoc3RydWN0IGNvbnNvbGUgKmNvbikKK3sKKwlpZiAoY29uLT5tYXN0ZXJfZmQg IT0gLTEpIHsKKwkJc2hvcnQgZXZlbnRzID0gMDsKKwkJaWYgKCFjb24tPmQtPmlzX2RlYWQgJiYg cmluZ19mcmVlX2J5dGVzKGNvbikpCisJCQlldmVudHMgfD0gUE9MTElOOworCisJCWlmICghYnVm ZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikpCisJCQlldmVudHMgfD0gUE9MTE9VVDsKKworCQlpZiAo ZXZlbnRzKQorCQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9CisJCQkJc2V0X2Zkcyhjb24tPm1h c3Rlcl9mZCwgZXZlbnRzfFBPTExQUkkpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Nv bnNvbGVfdHR5KHN0cnVjdCBjb25zb2xlICpjb24pCit7CisJaWYgKGNvbi0+bWFzdGVyX2ZkICE9 IC0xICYmIGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKKwkJaWYgKGZkc1tjb24tPm1h c3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKKwkJCX4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkp CisJCQljb25zb2xlX2hhbmRsZV9icm9rZW5fdHR5KGNvbiwgZG9tYWluX2lzX3ZhbGlkKGNvbi0+ ZC0+ZG9taWQpKTsKKwkJZWxzZSB7CisJCQlpZiAoZmRzW2Nvbi0+bWFzdGVyX3BvbGxmZF9pZHhd LnJldmVudHMgJgorCQkJCVBPTExJTikKKwkJCQloYW5kbGVfdHR5X3JlYWQoY29uKTsKKwkJCWlm IChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCisJCQkJUE9MTE9VVCkKKwkJ CQloYW5kbGVfdHR5X3dyaXRlKGNvbik7CisJCX0KKwl9CisJY29uLT5tYXN0ZXJfcG9sbGZkX2lk eCA9IC0xOworCWNvbi0+eGNlX3BvbGxmZF9pZHggPSAtMTsKK30KKwogdm9pZCBoYW5kbGVfaW8o dm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTA4MSw1NSArMTMxOCwxMSBAQCB2b2lkIGhhbmRsZV9p byh2b2lkKQogCQkvKiBSZS1jYWxjdWxhdGUgYW55IGV2ZW50IGNvdW50ZXIgYWxsb3dhbmNlcyAm IHVuYmxvY2sKIAkJICAgZG9tYWlucyB3aXRoIG5ldyBhbGxvd2FuY2UgKi8KIAkJZm9yIChkID0g ZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQt PmNvbnNvbGU7Ci0KLQkJCS8qIENTIDE2MjU3Ojk1NWVlNGZhMTM0NSBpbnRyb2R1Y2VzIGEgNW1z IGZ1enoKLQkJCSAqIGZvciBzZWxlY3QoKSwgaXQgaXMgbm90IGNsZWFyIHBvbGwoKSBoYXMKLQkJ CSAqIHNpbWlsYXIgYmVoYXZpb3IgKHJldHVybmluZyBhIGNvdXBsZSBvZiBtcwotCQkJICogc29v bmVyIHRoYW4gcmVxdWVzdGVkKSBhcyB3ZWxsLiBKdXN0IGxlYXZlCi0JCQkgKiB0aGUgZnV6eiBo ZXJlLiBSZW1vdmUgaXQgd2l0aCBhIHNlcGFyYXRlCi0JCQkgKiBwYXRjaCBpZiBuZWNlc3Nhcnkg Ki8KLQkJCWlmICgobm93KzUpID4gY29uLT5uZXh0X3BlcmlvZCkgewotCQkJCWNvbi0+bmV4dF9w ZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklPRDsKLQkJCQlpZiAoY29uLT5ldmVudF9jb3Vu dCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewotCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNr KGNvbi0+eGNlX2hhbmRsZSwgY29uLT5sb2NhbF9wb3J0KTsKLQkJCQl9Ci0JCQkJY29uLT5ldmVu dF9jb3VudCA9IDA7Ci0JCQl9Ci0JCX0KIAotCQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IGQt Pm5leHQpIHsKLQkJCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZC0+Y29uc29sZTsKLQotCQkJaWYg KGNvbi0+ZXZlbnRfY291bnQgPj0gUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKLQkJCQkvKiBEZXRl cm1pbmUgaWYgd2UncmUgZ29pbmcgdG8gYmUgdGhlIG5leHQgdGltZSBzbGljZSB0byBleHBpcmUg Ki8KLQkJCQlpZiAoIW5leHRfdGltZW91dCB8fAotCQkJCSAgICBjb24tPm5leHRfcGVyaW9kIDwg bmV4dF90aW1lb3V0KQotCQkJCQluZXh0X3RpbWVvdXQgPSBjb24tPm5leHRfcGVyaW9kOwotCQkJ fSBlbHNlIGlmIChjb24tPnhjZV9oYW5kbGUgIT0gTlVMTCkgewotCQkJCWlmIChkaXNjYXJkX292 ZXJmbG93ZWRfZGF0YSB8fAotCQkJCSAgICAhY29uLT5idWZmZXIubWF4X2NhcGFjaXR5IHx8Ci0J CQkJICAgIGNvbi0+YnVmZmVyLnNpemUgPCBjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkpIHsKLQkJ CQkJaW50IGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZChjb24tPnhjZV9oYW5kbGUpOwotCQkJCQlj b24tPnhjZV9wb2xsZmRfaWR4ID0gc2V0X2ZkcyhldnRjaG5fZmQsCi0JCQkJCQkJCSAgICBQT0xM SU58UE9MTFBSSSk7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEp IHsKLQkJCQlzaG9ydCBldmVudHMgPSAwOwotCQkJCWlmICghZC0+aXNfZGVhZCAmJiByaW5nX2Zy ZWVfYnl0ZXMoY29uKSkKLQkJCQkJZXZlbnRzIHw9IFBPTExJTjsKLQotCQkJCWlmICghYnVmZmVy X2VtcHR5KCZjb24tPmJ1ZmZlcikpCi0JCQkJCWV2ZW50cyB8PSBQT0xMT1VUOwotCi0JCQkJaWYg KGV2ZW50cykKLQkJCQkJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9Ci0JCQkJCQlzZXRfZmRzKGNv bi0+bWFzdGVyX2ZkLAotCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKLQkJCX0KLQkJfQorCQkJY29u c29sZV9pdGVyX3ZvaWRfYXJnMihkLCBjb25zb2xlX2V2dGNobl91bm1hc2ssICh2b2lkICopbm93 KTsKKwkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzIoZCwgYWRkX2NvbnNvbGVfZXZ0Y2huX2ZkLCAo dm9pZCAqKSZuZXh0X3RpbWVvdXQpOworCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBhZGRf Y29uc29sZV90dHlfZmQpOworICAgICAgICB9CiAKIAkJLyogSWYgYW55IGRvbWFpbiBoYXMgYmVl biByYXRlIGxpbWl0ZWQsIHdlIG5lZWQgdG8gd29yawogCQkgICBvdXQgd2hhdCB0aW1lb3V0IHRv IHN1cHBseSB0byBwb2xsICovCkBAIC0xMTg5LDM1ICsxMzgyLDExIEBAIHZvaWQgaGFuZGxlX2lv KHZvaWQpCiAJCX0KIAogCQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IG4pIHsKLQkJCXN0cnVj dCBjb25zb2xlICpjb24gPSAmZC0+Y29uc29sZTsKIAogCQkJbiA9IGQtPm5leHQ7Ci0JCQlpZiAo Y29uLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKSB7Ci0JCQkJaWYgKGNvbi0+ eGNlX2hhbmRsZSAhPSBOVUxMICYmCi0JCQkJICAgIGNvbi0+eGNlX3BvbGxmZF9pZHggIT0gLTEg JiYKLQkJCQkgICAgIShmZHNbY29uLT54Y2VfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCi0JCQkJICAg ICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkgJiYKLQkJCQkgICAgICAoZmRzW2Nvbi0+eGNl X3BvbGxmZF9pZHhdLnJldmVudHMgJgotCQkJCSAgICAgICBQT0xMSU4pKQotCQkJCSAgICBoYW5k bGVfcmluZ19yZWFkKGQpOwotCQkJfQotCi0JCQlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEgJiYg Y29uLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkgewotCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJf cG9sbGZkX2lkeF0ucmV2ZW50cyAmCi0JCQkJICAgIH4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkp Ci0JCQkJCWNvbnNvbGVfaGFuZGxlX2Jyb2tlbl90dHkoY29uLAotCQkJCQkJICAgZG9tYWluX2lz X3ZhbGlkKGQtPmRvbWlkKSk7Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJf cG9sbGZkX2lkeF0ucmV2ZW50cyAmCi0JCQkJCSAgICBQT0xMSU4pCi0JCQkJCQloYW5kbGVfdHR5 X3JlYWQoY29uKTsKLQkJCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRz ICYKLQkJCQkJICAgIFBPTExPVVQpCi0JCQkJCQloYW5kbGVfdHR5X3dyaXRlKGNvbik7Ci0JCQkJ fQotCQkJfQogCi0JCQljb24tPnhjZV9wb2xsZmRfaWR4ID0gY29uLT5tYXN0ZXJfcG9sbGZkX2lk eCA9IC0xOworCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBoYW5kbGVfY29uc29sZV9yaW5n KTsKKwkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgaGFuZGxlX2NvbnNvbGVfdHR5KTsKIAog CQkJaWYgKGQtPmxhc3Rfc2VlbiAhPSBlbnVtX3Bhc3MpCiAJCQkJc2h1dGRvd25fZG9tYWluKGQp OwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK