From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NF8fw-00050f-N2 for qemu-devel@nongnu.org; Mon, 30 Nov 2009 11:00:32 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NF8fr-0004z9-KX for qemu-devel@nongnu.org; Mon, 30 Nov 2009 11:00:32 -0500 Received: from [199.232.76.173] (port=58349 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NF8fq-0004ym-Gl for qemu-devel@nongnu.org; Mon, 30 Nov 2009 11:00:27 -0500 Received: from mail-px0-f197.google.com ([209.85.216.197]:55831) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NF8fp-0001lt-Vx for qemu-devel@nongnu.org; Mon, 30 Nov 2009 11:00:26 -0500 Received: by pxi35 with SMTP id 35so2566578pxi.18 for ; Mon, 30 Nov 2009 08:00:24 -0800 (PST) MIME-Version: 1.0 Date: Mon, 30 Nov 2009 14:00:24 -0200 Message-ID: <5d6222a80911300800o6aa548f0r88edd8e1e66e758e@mail.gmail.com> From: Glauber Costa Content-Type: multipart/mixed; boundary=00504502ce0346af8d047998bdaa Subject: [Qemu-devel] Use per-cpu reset handlers. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Avi Kivity --00504502ce0346af8d047998bdaa Content-Type: text/plain; charset=UTF-8 The proposal in this patch is to add a system_reset caller that only resets state related to the cpu. This will guarantee that does functions are called from the cpu-threads, not the I/O thread. In principle, it might seem close to the remote execution mechanism, but: * It does not involve any extra signalling, so it should be faster. * The cpu is guaranteed to be stopped, so it is much less racy. * What runs where becomes more explicit. * This is much, much less racy The previous implementation was giving me races on reset. This one makes it work flawlesly w.r.t reset. --00504502ce0346af8d047998bdaa Content-Type: application/octet-stream; name="0001-Use-per-cpu-reset-handlers.patch" Content-Disposition: attachment; filename="0001-Use-per-cpu-reset-handlers.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2nfeg180 RnJvbSBjY2IyZmQ1MWFhOGIxODFjN2M5YWM1MjY2ZDQzOWUxNzNmMzYwMjk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHbGF1YmVyIENvc3RhIDxnbG9tbWVyQHJlZGhhdC5jb20+CkRh dGU6IEZyaSwgMjcgTm92IDIwMDkgMTQ6MzQ6MzggLTAyMDAKU3ViamVjdDogW1BBVENIXSBVc2Ug cGVyLWNwdSByZXNldCBoYW5kbGVycy4KClRoZSBwcm9wb3NhbCBpbiB0aGlzIHBhdGNoIGlzIHRv IGFkZCBhIHN5c3RlbV9yZXNldCBjYWxsZXIgdGhhdCBvbmx5CnJlc2V0cyBzdGF0ZSByZWxhdGVk IHRvIHRoZSBjcHUuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBkb2VzIGZ1bmN0aW9ucwphcmUg Y2FsbGVkIGZyb20gdGhlIGNwdS10aHJlYWRzLCBub3QgdGhlIEkvTyB0aHJlYWQuCgpJbiBwcmlu Y2lwbGUsIGl0IG1pZ2h0IHNlZW0gY2xvc2UgdG8gdGhlIHJlbW90ZSBleGVjdXRpb24gbWVjaGFu aXNtLCBidXQ6CiAqIEl0IGRvZXMgbm90IGludm9sdmUgYW55IGV4dHJhIHNpZ25hbGxpbmcsIHNv IGl0IHNob3VsZCBiZSBmYXN0ZXIuCiAqIFRoZSBjcHUgaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9w cGVkLCBzbyBpdCBpcyBtdWNoIGxlc3MgcmFjeS4KICogV2hhdCBydW5zIHdoZXJlIGJlY29tZXMg bW9yZSBleHBsaWNpdC4KICogVGhpcyBpcyBtdWNoLCBtdWNoIGxlc3MgcmFjeQoKVGhlIHByZXZp b3VzIGltcGxlbWVudGF0aW9uIHdhcyBnaXZpbmcgbWUgcmFjZXMgb24gcmVzZXQuIFRoaXMgb25l IG1ha2VzCml0IHdvcmsgZmxhd2xlc2x5IHcuci50IHJlc2V0LgoKU2lnbmVkLW9mZi1ieTogR2xh dWJlciBDb3N0YSA8Z2xvbW1lckByZWRoYXQuY29tPgotLS0KIGNwdS1kZWZzLmggICAgfCAgICAy ICsrCiBleGVjLWFsbC5oICAgIHwgICAxMiArKysrKysrKysrKysKIGV4ZWMuYyAgICAgICAgfCAg IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBody9hcGljLWt2bS5jIHwgICAx OCArKysrKysrKystLS0tLS0tLS0KIGt2bS1hbGwuYyAgICAgfCAgICA3ICsrKy0tLS0KIHZsLmMg ICAgICAgICAgfCAgIDEwICsrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9u cygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY3B1LWRlZnMuaCBiL2NwdS1kZWZz LmgKaW5kZXggMTg3OTJmYy4uMzdmZDExYyAxMDA2NDQKLS0tIGEvY3B1LWRlZnMuaAorKysgYi9j cHUtZGVmcy5oCkBAIC0xODUsNiArMTg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUWVtdVdvcmtJdGVt IHsKICAgICBDUFVXYXRjaHBvaW50ICp3YXRjaHBvaW50X2hpdDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBRZW11V29ya0l0ZW0g cXVldWVkX3dvcms7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICBpbnQgcmVzZXRfcmVxdWVzdGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICBRVEFJTFFfSEVBRChyZXNldF9oZWFkLCBDUFVSZXNldEVu dHJ5KSByZXNldF9oYW5kbGVyczsgICAgICAgICAgICAgIFwKICAgICB1aW50NjRfdCBxdWV1ZWRf bG9jYWwsIHF1ZXVlZF90b3RhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg ICBzdHJ1Y3QgUWVtdU11dGV4IHF1ZXVlX2xvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2V4ZWMtYWxsLmgg Yi9leGVjLWFsbC5oCmluZGV4IGRkMTM0YTkuLmY2NzY3YWIgMTAwNjQ0Ci0tLSBhL2V4ZWMtYWxs LmgKKysrIGIvZXhlYy1hbGwuaApAQCAtNzgsNiArNzgsMTggQEAgdm9pZCBjcHVfaW9fcmVjb21w aWxlKENQVVN0YXRlICplbnYsIHZvaWQgKnJldGFkZHIpOwogVHJhbnNsYXRpb25CbG9jayAqdGJf Z2VuX2NvZGUoQ1BVU3RhdGUgKmVudiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 YXJnZXRfdWxvbmcgcGMsIHRhcmdldF91bG9uZyBjc19iYXNlLCBpbnQgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2ZsYWdzKTsKKwordHlwZWRlZiB2b2lkIENQVVJl c2V0SGFuZGxlcihDUFVTdGF0ZSAqZW52KTsKK3R5cGVkZWYgc3RydWN0IENQVVJlc2V0RW50cnkg eworICAgIFFUQUlMUV9FTlRSWShDUFVSZXNldEVudHJ5KSBlbnRyeTsKKyAgICBDUFVSZXNldEhh bmRsZXIgKmZ1bmM7CisgICAgdm9pZCAqb3BhcXVlOworfSBDUFVSZXNldEVudHJ5OworCit2b2lk IHFlbXVfcmVnaXN0ZXJfcmVzZXRfY3B1KENQVVN0YXRlICplbnYsIENQVVJlc2V0SGFuZGxlciAq ZnVuYyk7Cit2b2lkIHFlbXVfdW5yZWdpc3Rlcl9yZXNldF9jcHUoQ1BVU3RhdGUgKmVudiwgQ1BV UmVzZXRIYW5kbGVyICpmdW5jKTsKKwordm9pZCBxZW11X2NwdV9yZXNldChDUFVTdGF0ZSAqZW52 KTsKIHZvaWQgY3B1X2V4ZWNfaW5pdChDUFVTdGF0ZSAqZW52KTsKIHZvaWQgUUVNVV9OT1JFVFVS TiBjcHVfbG9vcF9leGl0KHZvaWQpOwogaW50IHBhZ2VfdW5wcm90ZWN0KHRhcmdldF91bG9uZyBh ZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBjLCB2b2lkICpwdWMpOwpkaWZmIC0tZ2l0IGEvZXhlYy5j IGIvZXhlYy5jCmluZGV4IDA3NmQyNmIuLjZiZTMzMzIgMTAwNjQ0Ci0tLSBhL2V4ZWMuYworKysg Yi9leGVjLmMKQEAgLTU4OCw2ICs1ODgsNyBAQCB2b2lkIGNwdV9leGVjX2luaXQoQ1BVU3RhdGUg KmVudikKICAgICBlbnYtPm51bWFfbm9kZSA9IDA7CiAgICAgUVRBSUxRX0lOSVQoJmVudi0+YnJl YWtwb2ludHMpOwogICAgIFFUQUlMUV9JTklUKCZlbnYtPndhdGNocG9pbnRzKTsKKyAgICBRVEFJ TFFfSU5JVCgmZW52LT5yZXNldF9oYW5kbGVycyk7CiAgICAgKnBlbnYgPSBlbnY7CiAjaWYgZGVm aW5lZChDT05GSUdfVVNFUl9PTkxZKQogICAgIGNwdV9saXN0X3VubG9jaygpOwpAQCAtNTk5LDYg KzYwMCwzNyBAQCB2b2lkIGNwdV9leGVjX2luaXQoQ1BVU3RhdGUgKmVudikKICNlbmRpZgogfQog Cit2b2lkIHFlbXVfcmVnaXN0ZXJfcmVzZXRfY3B1KENQVVN0YXRlICplbnYsIENQVVJlc2V0SGFu ZGxlciAqZnVuYykKK3sKKyAgICBDUFVSZXNldEVudHJ5ICpyZSA9IHFlbXVfbWFsbG9jeihzaXpl b2YoQ1BVUmVzZXRFbnRyeSkpOworICAgIAorICAgIHJlLT5mdW5jID0gZnVuYzsKKyAgICByZS0+ b3BhcXVlID0gZW52OworICAgIFFUQUlMUV9JTlNFUlRfVEFJTCgmZW52LT5yZXNldF9oYW5kbGVy cywgcmUsIGVudHJ5KTsKK30KKwordm9pZCBxZW11X3VucmVnaXN0ZXJfcmVzZXRfY3B1KENQVVN0 YXRlICplbnYsIENQVVJlc2V0SGFuZGxlciAqZnVuYykKK3sKKyAgICBDUFVSZXNldEVudHJ5ICpy ZTsKKyAgICAKKyAgICBRVEFJTFFfRk9SRUFDSChyZSwgJmVudi0+cmVzZXRfaGFuZGxlcnMsIGVu dHJ5KSB7CisgICAgICAgIGlmIChyZS0+ZnVuYyA9PSBmdW5jICYmIHJlLT5vcGFxdWUgPT0gZW52 KSB7CisgICAgICAgICAgICBRVEFJTFFfUkVNT1ZFKCZlbnYtPnJlc2V0X2hhbmRsZXJzLCByZSwg ZW50cnkpOworICAgICAgICAgICAgcWVtdV9mcmVlKHJlKTsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBxZW11X2NwdV9yZXNldChDUFVTdGF0ZSAqZW52 KQoreyAgIAorICAgIENQVVJlc2V0RW50cnkgKnJlLCAqbnJlOworICAgIC8qIHJlc2V0IGFsbCBk ZXZpY2VzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorICAgIFFUQUlMUV9GT1JFQUNIX1NBRkUocmUsICZlbnYtPnJlc2V0X2hhbmRs ZXJzLCBlbnRyeSwgbnJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHJl LT5mdW5jKHJlLT5vcGFxdWUpOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfSAKKwog c3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfcGFnZV9iaXRtYXAoUGFnZURlc2MgKnApCiB7 CiAgICAgaWYgKHAtPmNvZGVfYml0bWFwKSB7CmRpZmYgLS1naXQgYS9ody9hcGljLWt2bS5jIGIv aHcvYXBpYy1rdm0uYwppbmRleCBkYzYxMzg2Li5hYmUzZWUwIDEwMDY0NAotLS0gYS9ody9hcGlj LWt2bS5jCisrKyBiL2h3L2FwaWMta3ZtLmMKQEAgLTg5LDIwICs4OSwyMCBAQCBzdGF0aWMgY29u c3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfYXBpYyA9IHsKICAgICAucG9zdF9sb2FkID0g YXBpY19wb3N0X2xvYWQsCiB9OwogCi1zdGF0aWMgdm9pZCBrdm1fYXBpY19yZXNldCh2b2lkICpv cGFxdWUpCitzdGF0aWMgdm9pZCBrdm1fYXBpY19yZXNldChDUFVTdGF0ZSAqZW52KQogewotICAg IEFQSUNTdGF0ZSAqcyA9IG9wYXF1ZTsKKyAgICBBUElDU3RhdGUgKnMgPSBlbnYtPmFwaWNfc3Rh dGU7CiAgICAgaW50IGJzcDsKICAgICBpbnQgaTsKIAotICAgIGNwdV9zeW5jaHJvbml6ZV9zdGF0 ZShzLT5jcHVfZW52KTsKKyAgICBjcHVfc3luY2hyb25pemVfc3RhdGUoZW52KTsKIAotICAgIGJz cCA9IGNwdV9pc19ic3Aocy0+Y3B1X2Vudik7CisgICAgYnNwID0gY3B1X2lzX2JzcChlbnYpOwog CiAgICAgcy0+ZGV2LmFwaWNiYXNlID0gMHhmZWUwMDAwMCB8CiAgICAgICAgIChic3AgPyBNU1Jf SUEzMl9BUElDQkFTRV9CU1AgOiAwKSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKIAotICAg IGNwdV9yZXNldChzLT5jcHVfZW52KTsKKyAgICBjcHVfcmVzZXQoZW52KTsKIAogICAgIHMtPmRl di50cHIgPSAwOwogICAgIHMtPmRldi5zcHVyaW91c192ZWMgPSAweGZmOwpAQCAtMTIzLDEzICsx MjMsMTMgQEAgc3RhdGljIHZvaWQga3ZtX2FwaWNfcmVzZXQodm9pZCAqb3BhcXVlKQogICAgIHMt PmRldi53YWl0X2Zvcl9zaXBpID0gMTsKIAogCi0gICAgcy0+Y3B1X2Vudi0+bXBfc3RhdGUKKyAg ICBlbnYtPm1wX3N0YXRlCiAgICAgICAgICAgICA9IGJzcCA/IEtWTV9NUF9TVEFURV9SVU5OQUJM RSA6IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEOwogCiAgICAgLyogV2UgaGF2ZSB0byB0ZWxs IHRoZSBrZXJuZWwgYWJvdXQgbXBfc3RhdGUsIGJ1dCBhbHNvIHNhdmUgc3JlZ3MsIHNpbmNlCiAg ICAgICogYXBpYyBiYXNlIHdhcyBqdXN0IHVwZGF0ZWQKICAgICAgKi8KLSAgICBrdm1fYXJjaF9w dXRfcmVnaXN0ZXJzKHMtPmNwdV9lbnYpOworICAgIGt2bV9hcmNoX3B1dF9yZWdpc3RlcnMoZW52 KTsKIAogICAgIGlmIChic3ApIHsKICAgICAgICAgLyoKQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0 aWMgdm9pZCBrdm1fYXBpY19yZXNldCh2b2lkICpvcGFxdWUpCiAgICAgICAgICAqLwogICAgICAg ICBzLT5kZXYubHZ0W0FQSUNfTFZUX0xJTlQwXSA9IDB4NzAwOwogICAgIH0KLSAgICBrdm1fc2V0 X2xhcGljKHMtPmNwdV9lbnYsICZzLT5rdm1fbGFwaWNfc3RhdGUpOworICAgIGt2bV9zZXRfbGFw aWMoZW52LCAmcy0+a3ZtX2xhcGljX3N0YXRlKTsKIH0KIAogaW50IGt2bV9hcGljX2luaXQoQ1BV U3RhdGUgKmVudikKQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQga3ZtX2FwaWNfaW5pdChDUFVTdGF0 ZSAqZW52KQogICAgIG1zaXhfc3VwcG9ydGVkID0gMTsKIAogICAgIHZtc3RhdGVfcmVnaXN0ZXIo cy0+ZGV2LmlkLCAmdm1zdGF0ZV9hcGljLCBzKTsKLSAgICBxZW11X3JlZ2lzdGVyX3Jlc2V0KGt2 bV9hcGljX3Jlc2V0LCBzKTsKKyAgICBxZW11X3JlZ2lzdGVyX3Jlc2V0X2NwdShlbnYsIGt2bV9h cGljX3Jlc2V0KTsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva3ZtLWFsbC5jIGIv a3ZtLWFsbC5jCmluZGV4IGI3M2ZiYWEuLjdlOTcxMDAgMTAwNjQ0Ci0tLSBhL2t2bS1hbGwuYwor KysgYi9rdm0tYWxsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdm0uaD4K IAogI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiCisjaW5jbHVkZSAiZXhlYy1hbGwuaCIKICNpbmNs dWRlICJzeXNlbXUuaCIKICNpbmNsdWRlICJody9ody5oIgogI2luY2x1ZGUgImdkYnN0dWIuaCIK QEAgLTE0OCwxMCArMTQ5LDggQEAgc3RhdGljIGludCBrdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lv bihLVk1TdGF0ZSAqcywgS1ZNU2xvdCAqc2xvdCkKICAgICByZXR1cm4ga3ZtX3ZtX2lvY3RsKHMs IEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OLCAmbWVtKTsKIH0KIAotc3RhdGljIHZvaWQga3Zt X3Jlc2V0X3ZjcHUodm9pZCAqb3BhcXVlKQorc3RhdGljIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoQ1BV U3RhdGUgKmVudikKIHsKLSAgICBDUFVTdGF0ZSAqZW52ID0gb3BhcXVlOwotCiAgICAga3ZtX2Fy Y2hfcmVzZXRfdmNwdShlbnYpOwogICAgIGlmIChrdm1fYXJjaF9wdXRfcmVnaXN0ZXJzKGVudikp IHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYXRhbDoga3ZtIHZjcHUgcmVzZXQgZmFpbGVk XG4iKTsKQEAgLTIwMyw3ICsyMDIsNyBAQCBpbnQga3ZtX2luaXRfdmNwdShDUFVTdGF0ZSAqZW52 KQogCiAgICAgcmV0ID0ga3ZtX2FyY2hfaW5pdF92Y3B1KGVudik7CiAgICAgaWYgKHJldCA9PSAw KSB7Ci0gICAgICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXQoa3ZtX3Jlc2V0X3ZjcHUsIGVudik7Cisg ICAgICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXRfY3B1KGVudiwga3ZtX3Jlc2V0X3ZjcHUpOwogICAg IH0KIGVycjoKICAgICByZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdmwuYyBiL3ZsLmMKaW5kZXgg NjY2YmYwMC4uNjk2ZjE5NiAxMDA2NDQKLS0tIGEvdmwuYworKysgYi92bC5jCkBAIC0zMjM0LDEx ICszMjM0LDE3IEBAIHZvaWQgcWVtdV91bnJlZ2lzdGVyX3Jlc2V0KFFFTVVSZXNldEhhbmRsZXIg KmZ1bmMsIHZvaWQgKm9wYXF1ZSkKIHZvaWQgcWVtdV9zeXN0ZW1fcmVzZXQodm9pZCkKIHsKICAg ICBRRU1VUmVzZXRFbnRyeSAqcmUsICpucmU7CisgICAgQ1BVU3RhdGUgKnBlbnYgPSBmaXJzdF9j cHU7CiAKICAgICAvKiByZXNldCBhbGwgZGV2aWNlcyAqLwogICAgIFFUQUlMUV9GT1JFQUNIX1NB RkUocmUsICZyZXNldF9oYW5kbGVycywgZW50cnksIG5yZSkgewogICAgICAgICByZS0+ZnVuYyhy ZS0+b3BhcXVlKTsKICAgICB9CisKKyAgICB3aGlsZSAocGVudikgeworICAgICAgICBwZW52LT5y ZXNldF9yZXF1ZXN0ZWQgPSAxOworICAgICAgICBwZW52ID0gcGVudi0+bmV4dF9jcHU7CisgICAg fQogfQogCiB2b2lkIHFlbXVfc3lzdGVtX3Jlc2V0X3JlcXVlc3Qodm9pZCkKQEAgLTM1MzAsNiAr MzUzNiwxMCBAQCBzdGF0aWMgdm9pZCAqa3ZtX2NwdV90aHJlYWRfZm4odm9pZCAqYXJnKQogICAg IH0KIAogICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChlbnYtPnJlc2V0X3JlcXVlc3RlZCkg eworICAgICAgICAgICAgcWVtdV9jcHVfcmVzZXQoZW52KTsKKyAgICAgICAgICAgIGVudi0+cmVz ZXRfcmVxdWVzdGVkID0gMDsKKyAgICAgICAgfQogICAgICAgICBpZiAoY3B1X2Nhbl9ydW4oZW52 KSkKICAgICAgICAgICAgIHFlbXVfY3B1X2V4ZWMoZW52KTsKICAgICAgICAgcWVtdV93YWl0X2lv X2V2ZW50KGVudik7Ci0tIAoxLjYuNS4yCgo= --00504502ce0346af8d047998bdaa--