From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O91Fw-0000gu-6U for qemu-devel@nongnu.org; Mon, 03 May 2010 15:24:40 -0400 Received: from [140.186.70.92] (port=38769 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O91Ft-0000ge-Bv for qemu-devel@nongnu.org; Mon, 03 May 2010 15:24:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O91Fq-00052s-SV for qemu-devel@nongnu.org; Mon, 03 May 2010 15:24:37 -0400 Received: from mail-pw0-f45.google.com ([209.85.160.45]:62541) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O91Fq-00052a-E1 for qemu-devel@nongnu.org; Mon, 03 May 2010 15:24:34 -0400 Received: by pwi6 with SMTP id 6so1291857pwi.4 for ; Mon, 03 May 2010 12:24:32 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: Date: Mon, 3 May 2010 22:24:32 +0300 Message-ID: From: Blue Swirl Content-Type: multipart/mixed; boundary=001636b2ae82e209e60485b58acd Subject: [Qemu-devel] Re: sparc64 lazy conditional codes evaluation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Kovalenko Cc: qemu-devel --001636b2ae82e209e60485b58acd Content-Type: text/plain; charset=UTF-8 On 5/3/10, Igor Kovalenko wrote: > Hi! > > There is an issue with lazy conditional codes evaluation where > we return from trap handler with mismatching conditionals. > > I seldom reproduce it here when dragging qemu window while > machine is working through silo initialization. I use gentoo minimal cd > install-sparc64-minimal-20100322.iso but I think anything with silo boot > would experience the same. Once in a while it would report crc error, > unable to open cd partition or it would fail to decompress image. I think I've also seen this. > Pattern that fails appears to require a sequence of compare insn > possibly followed by a few instructions which do not touch conditionals, > then conditional branch insn. If it happens that we trap while processing > conditional branch insn so it is restarted after return from trap then > seldom conditional codes are calculated incorrectly. > > I cannot point to exact cause but it appears that after trap return > we may have CC_OP and CC_SRC* mismatch somewhere, > since adding more cond evaluation flushes over the code helps. > > We already tried doing flush more frequently and it is still not > complete, so the question is how to finally do this once and right :) > > Obviously I do not get the design of lazy evaluation right, but > the following list appears to be good start. Plan is to prepare > a change to qemu and find a way to test it. > > 1. Since SPARC* is a RISC CPU it seems to be not profitable to > use DisasContext->cc_op to predict if flags should be not evaluated > due to overriding insn. Instead we can drop cc_op from disassembler > context and simplify code to only use cc_op from env. Not currently, but in the future we may use that to do even lazier flags computation. For example the sequence 'cmp x, y; bne target' could be much more optimal by changing the branch to do the comparison. Here's an old unfinished patch to do some of this. > Another point is that we always write to env->cc_op when > translating *cc insns > This should solve any issue with dc->cc_op prediction going > out of sync with env->cc_op and cpu_cc_src* I think this is what is happening now. > 2. We must flush lazy evaluation back to CC_OP_FLAGS in a few cases when > a. conditional code is required by insn (like addc, cond branch etc.) > - here we can optimize by evaluating specific bits (carry?) > - not sure if it works in case we have two cond consuming insns, > where first needs carry another needs the rest of flags Here's another patch to optimize C flag handling. It doesn't pass my tests though. > b. CCR is read by rdccr (helper_rdccr) > - have to compute all flags > c. trap occurs and we prepare trap level context (saving pstate) > - have to compute all flags > d. control goes out of tcg runtime (so gdbstub reads correct value from env) > - have to compute all flags Fully agree. --001636b2ae82e209e60485b58acd Content-Type: text/x-diff; charset=US-ASCII; name="0001-Convert-C-flag-input-BROKEN.patch" Content-Disposition: attachment; filename="0001-Convert-C-flag-input-BROKEN.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g8roflxp RnJvbSBiMDg2M2MyMTNjZTQ4N2U5YzEwMzQ2NzQ2NjhkMWI2NGE0M2I3MjY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAzIE1heSAyMDEwIDE5OjExOjM3ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gQ29udmVy dCBDIGZsYWcgaW5wdXQgQlJPS0VOCgpTaWduZWQtb2ZmLWJ5OiBCbHVlIFN3aXJsIDxibGF1d2ly YmVsQGdtYWlsLmNvbT4KLS0tCiB0YXJnZXQtc3BhcmMvdHJhbnNsYXRlLmMgfCAgIDI0ICsrKysr KysrLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDE2 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3RhcmdldC1zcGFyYy90cmFuc2xhdGUuYyBiL3Rh cmdldC1zcGFyYy90cmFuc2xhdGUuYwppbmRleCBiZTJhMTE2Li45NGMzNDNkIDEwMDY0NAotLS0g YS90YXJnZXQtc3BhcmMvdHJhbnNsYXRlLmMKKysrIGIvdGFyZ2V0LXNwYXJjL3RyYW5zbGF0ZS5j CkBAIC0zMzYsNyArMzM2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9hZGR4aV9jYyhU Q0d2IGRzdCwgVENHdiBzcmMxLCB0YXJnZXRfbG9uZyBzcmMyKQogewogICAgIHRjZ19nZW5fbW92 X3RsKGNwdV9jY19zcmMsIHNyYzEpOwogICAgIHRjZ19nZW5fbW92aV90bChjcHVfY2Nfc3JjMiwg c3JjMik7Ci0gICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7CisgICAgZ2VuX2hl bHBlcl9jb21wdXRlX0NfaWNjKGNwdV90bXAwKTsKICAgICB0Y2dfZ2VuX2FkZF90bChjcHVfY2Nf ZHN0LCBjcHVfY2Nfc3JjLCBjcHVfdG1wMCk7CiAgICAgdGNnX2dlbl9hZGRpX3RsKGNwdV9jY19k c3QsIGNwdV9jY19kc3QsIHNyYzIpOwogICAgIHRjZ19nZW5fbW92X3RsKGRzdCwgY3B1X2NjX2Rz dCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9hZGR4X2Nj KFRDR3YgZHN0LCBUQ0d2IHNyYzEsIFRDR3Ygc3JjMikKIHsKICAgICB0Y2dfZ2VuX21vdl90bChj cHVfY2Nfc3JjLCBzcmMxKTsKICAgICB0Y2dfZ2VuX21vdl90bChjcHVfY2Nfc3JjMiwgc3JjMik7 Ci0gICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7CisgICAgZ2VuX2hlbHBlcl9j b21wdXRlX0NfaWNjKGNwdV90bXAwKTsKICAgICB0Y2dfZ2VuX2FkZF90bChjcHVfY2NfZHN0LCBj cHVfY2Nfc3JjLCBjcHVfdG1wMCk7CiAgICAgdGNnX2dlbl9hZGRfdGwoY3B1X2NjX2RzdCwgY3B1 X2NjX2RzdCwgY3B1X2NjX3NyYzIpOwogICAgIHRjZ19nZW5fbW92X3RsKGRzdCwgY3B1X2NjX2Rz dCk7CkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9zdWJ4aV9j YyhUQ0d2IGRzdCwgVENHdiBzcmMxLCB0YXJnZXRfbG9uZyBzcmMyKQogewogICAgIHRjZ19nZW5f bW92X3RsKGNwdV9jY19zcmMsIHNyYzEpOwogICAgIHRjZ19nZW5fbW92aV90bChjcHVfY2Nfc3Jj Miwgc3JjMik7Ci0gICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7CisgICAgZ2Vu X2hlbHBlcl9jb21wdXRlX0NfaWNjKGNwdV90bXAwKTsKICAgICB0Y2dfZ2VuX3N1Yl90bChjcHVf Y2NfZHN0LCBjcHVfY2Nfc3JjLCBjcHVfdG1wMCk7CiAgICAgdGNnX2dlbl9zdWJpX3RsKGNwdV9j Y19kc3QsIGNwdV9jY19kc3QsIHNyYzIpOwogICAgIHRjZ19nZW5fbW92X3RsKGRzdCwgY3B1X2Nj X2RzdCk7CkBAIC00MjksNyArNDI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9zdWJ4 X2NjKFRDR3YgZHN0LCBUQ0d2IHNyYzEsIFRDR3Ygc3JjMikKIHsKICAgICB0Y2dfZ2VuX21vdl90 bChjcHVfY2Nfc3JjLCBzcmMxKTsKICAgICB0Y2dfZ2VuX21vdl90bChjcHVfY2Nfc3JjMiwgc3Jj Mik7Ci0gICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7CisgICAgZ2VuX2hlbHBl cl9jb21wdXRlX0NfaWNjKGNwdV90bXAwKTsKICAgICB0Y2dfZ2VuX3N1Yl90bChjcHVfY2NfZHN0 LCBjcHVfY2Nfc3JjLCBjcHVfdG1wMCk7CiAgICAgdGNnX2dlbl9zdWJfdGwoY3B1X2NjX2RzdCwg Y3B1X2NjX2RzdCwgY3B1X2NjX3NyYzIpOwogICAgIHRjZ19nZW5fbW92X3RsKGRzdCwgY3B1X2Nj X2RzdCk7CkBAIC0yOTUzLDI1ICsyOTUzLDIxIEBAIHN0YXRpYyB2b2lkIGRpc2FzX3NwYXJjX2lu c24oRGlzYXNDb250ZXh0ICogZGMpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfSU1N KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltbSA9IEdFVF9GSUVMRHMoaW5zbiwg MTksIDMxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG9wICYgMHgxMCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5faGVscGVyX2NvbXB1dGVfcHNyKCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9vcF9hZGR4aV9jYyhjcHVfZHN0 LCBjcHVfc3JjMSwgc2ltbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjZ19n ZW5fbW92aV9pMzIoY3B1X2NjX29wLCBDQ19PUF9BRERYKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGMtPmNjX29wID0gQ0NfT1BfQUREWDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5faGVs cGVyX2NvbXB1dGVfcHNyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9t b3ZfcmVnX0MoY3B1X3RtcDAsIGNwdV9wc3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnZW5faGVscGVyX2NvbXB1dGVfQ19pY2MoY3B1X3RtcDApOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCBzaW1t KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNnX2dlbl9hZGRfdGwoY3B1X2Rz dCwgY3B1X3NyYzEsIGNwdV90bXAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh4b3AgJiAweDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl bl9oZWxwZXJfY29tcHV0ZV9wc3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2VuX29wX2FkZHhfY2MoY3B1X2RzdCwgY3B1X3NyYzEsIGNwdV9zcmMyKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGNnX2dlbl9tb3ZpX2kzMihjcHVfY2Nfb3AsIENDX09QX0FE RFgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+Y2Nfb3AgPSBDQ19PUF9B RERYOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY29tcHV0ZV9wc3IoKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY29tcHV0ZV9DX2ljYyhj cHVfdG1wMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjZ19nZW5fYWRkX3Rs KGNwdV90bXAwLCBjcHVfc3JjMiwgY3B1X3RtcDApOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0Y2dfZ2VuX2FkZF90bChjcHVfZHN0LCBjcHVfc3JjMSwgY3B1X3RtcDApOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMwMDksMjUgKzMwMDUsMjEgQEAgc3RhdGlj IHZvaWQgZGlzYXNfc3BhcmNfaW5zbihEaXNhc0NvbnRleHQgKiBkYykKICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChJU19JTU0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1t ID0gR0VUX0ZJRUxEcyhpbnNuLCAxOSwgMzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICh4b3AgJiAweDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9o ZWxwZXJfY29tcHV0ZV9wc3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu X29wX3N1YnhpX2NjKGNwdV9kc3QsIGNwdV9zcmMxLCBzaW1tKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGNnX2dlbl9tb3ZpX2kzMihjcHVfY2Nfb3AsIENDX09QX1NVQlgpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+Y2Nfb3AgPSBDQ19PUF9TVUJYOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdlbl9oZWxwZXJfY29tcHV0ZV9wc3IoKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2VuX21vdl9yZWdfQyhjcHVfdG1wMCwgY3B1X3Bzcik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY29tcHV0ZV9DX2ljYyhjcHVfdG1w MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjZ19nZW5fYWRkaV90bChjcHVf dG1wMCwgY3B1X3RtcDAsIHNpbW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 Y2dfZ2VuX3N1Yl90bChjcHVfZHN0LCBjcHVfc3JjMSwgY3B1X3RtcDApOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhvcCAmIDB4MTApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9jb21wdXRlX3BzcigpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnZW5fb3Bfc3VieF9jYyhjcHVfZHN0LCBjcHVfc3JjMSwgY3B1 X3NyYzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2dfZ2VuX21vdmlfaTMy KGNwdV9jY19vcCwgQ0NfT1BfU1VCWCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRjLT5jY19vcCA9IENDX09QX1NVQlg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9jb21wdXRl X3BzcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fbW92X3JlZ19DKGNw dV90bXAwLCBjcHVfcHNyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2hl bHBlcl9jb21wdXRlX0NfaWNjKGNwdV90bXAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGNnX2dlbl9hZGRfdGwoY3B1X3RtcDAsIGNwdV9zcmMyLCBjcHVfdG1wMCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjZ19nZW5fc3ViX3RsKGNwdV9kc3QsIGNwdV9z cmMxLCBjcHVfdG1wMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotLSAKMS41LjYu NQoK --001636b2ae82e209e60485b58acd Content-Type: text/x-diff; charset=US-ASCII; name="0002-Branch-optimization-BROKEN.patch" Content-Disposition: attachment; filename="0002-Branch-optimization-BROKEN.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g8rogkm3 RnJvbSA5M2NjZTQzYmUwNDNjYTI1NzcwMTY1YjhjMDY1NDZlYWZjMzIwNzE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAzIE1heSAyMDEwIDE5OjIxOjU5ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gQnJhbmNo IG9wdGltaXphdGlvbiBCUk9LRU4KClNpZ25lZC1vZmYtYnk6IEJsdWUgU3dpcmwgPGJsYXV3aXJi ZWxAZ21haWwuY29tPgotLS0KIHRhcmdldC1zcGFyYy90cmFuc2xhdGUuYyB8ICAxMDggKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlcyBjaGFuZ2Vk LCAxMDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90YXJnZXQt c3BhcmMvdHJhbnNsYXRlLmMgYi90YXJnZXQtc3BhcmMvdHJhbnNsYXRlLmMKaW5kZXggOTRjMzQz ZC4uNTdiZGExMiAxMDA2NDQKLS0tIGEvdGFyZ2V0LXNwYXJjL3RyYW5zbGF0ZS5jCisrKyBiL3Rh cmdldC1zcGFyYy90cmFuc2xhdGUuYwpAQCAtMTExNSw2ICsxMTE1LDEwNCBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgZ2VuX2NvbmRfcmVnKFRDR3Ygcl9kc3QsIGludCBjb25kLCBUQ0d2IHJfc3JjKQog fQogI2VuZGlmCiAKKy8vIEludmVydGVkIGxvZ2ljCitzdGF0aWMgY29uc3QgaW50IGdlbl90Y2df Y29uZFsxNl0gPSB7CisgICAgLTEsCisgICAgVENHX0NPTkRfTkUsCisgICAgVENHX0NPTkRfR1Qs CisgICAgVENHX0NPTkRfR0UsCisgICAgVENHX0NPTkRfR1RVLAorICAgIFRDR19DT05EX0dFVSwK KyAgICAtMSwKKyAgICAtMSwKKyAgICAtMSwKKyAgICBUQ0dfQ09ORF9FUSwKKyAgICBUQ0dfQ09O RF9MRSwKKyAgICBUQ0dfQ09ORF9MVCwKKyAgICBUQ0dfQ09ORF9MRVUsCisgICAgVENHX0NPTkRf TFRVLAorICAgIC0xLAorICAgIC0xLAorfTsKKworLyogZ2VuZXJhdGUgYSBjb25kaXRpb25hbCBq dW1wIHRvIGxhYmVsICdsMScgYWNjb3JkaW5nIHRvIGp1bXAgb3Bjb2RlCisgICB2YWx1ZSAnYicu IEluIHRoZSBmYXN0IGNhc2UsIFQwIGlzIGd1YXJhbnRlZCBub3QgdG8gYmUgdXNlZC4gKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZCBnZW5fYnJjb25kKERpc2FzQ29udGV4dCAqZGMsIGludCBjb25kLCBp bnQgbDEsIGludCBjYywgVENHdiByX2NvbmQpCit7CisgICAgLy9wcmludGYoImdlbl9icmNvbmQ6 IGNjX29wICVkXG4iLCBkYy0+Y2Nfb3ApOworICAgIHN3aXRjaCAoZGMtPmNjX29wKSB7CisgICAg ICAgIC8qIHdlIG9wdGltaXplIHRoZSBjbXAvYnIgY2FzZSAqLworICAgIGNhc2UgQ0NfT1BfU1VC OgorICAgICAgICAvLyBJbnZlcnRlZCBsb2dpYworICAgICAgICBzd2l0Y2ggKGNvbmQpIHsKKyAg ICAgICAgY2FzZSAweDA6IC8vIG4KKyAgICAgICAgICAgIHRjZ19nZW5fYnIobDEpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgxOiAvLyBlCisgICAgICAgICAgICBpZiAoY2Mg PT0gMSkgeworICAgICAgICAgICAgICAgIHRjZ19nZW5fYnJjb25kaV9pNjQoVENHX0NPTkRfTkUs IGNwdV9jY19kc3QsIDAsIGwxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgdGNnX2dlbl9icmNvbmRpX2kzMihUQ0dfQ09ORF9ORSwgY3B1X2NjX2RzdCwgMCwgbDEpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgyOiAvLyBs ZQorICAgICAgICBjYXNlIDB4MzogLy8gbAorICAgICAgICBjYXNlIDB4NDogLy8gbGV1CisgICAg ICAgIGNhc2UgMHg1OiAvLyBjcy9sdQorICAgICAgICBjYXNlIDB4YTogLy8gZworICAgICAgICBj YXNlIDB4YjogLy8gZ2UKKyAgICAgICAgY2FzZSAweGM6IC8vIGd1CisgICAgICAgIGNhc2UgMHhk OiAvLyBjYy9nZXUKKyAgICAgICAgICAgIGlmIChjYyA9PSAxKSB7CisgICAgICAgICAgICAgICAg dGNnX2dlbl9icmNvbmRpX2k2NChnZW5fdGNnX2NvbmRbY29uZF0sIGNwdV9jY19zcmMsIGNwdV9j Y19zcmMyLCBsMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRjZ19n ZW5fYnJjb25kaV9pMzIoZ2VuX3RjZ19jb25kW2NvbmRdLCBjcHVfY2Nfc3JjLCBjcHVfY2Nfc3Jj MiwgbDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug MHg2OiAvLyBuZWcKKyAgICAgICAgICAgIGlmIChjYyA9PSAxKSB7CisgICAgICAgICAgICAgICAg dGNnX2dlbl9icmNvbmRpX2k2NChUQ0dfQ09ORF9HRSwgY3B1X2NjX2RzdCwgMCwgbDEpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0Y2dfZ2VuX2JyY29uZGlfaTMyKFRD R19DT05EX0dFLCBjcHVfY2NfZHN0LCAwLCBsMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSAweDc6IC8vIHZzCisgICAgICAgICAgICBnZW5faGVscGVy X2NvbXB1dGVfcHNyKCk7CisgICAgICAgICAgICBkYy0+Y2Nfb3AgPSBDQ19PUF9GTEFHUzsKKyAg ICAgICAgICAgIGdlbl9vcF9ldmFsX2J2cyhjcHVfY2NfZHN0LCBjcHVfY2Nfc3JjKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4ODogLy8gYQorICAgICAgICAgICAgLy8gbm9w CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDk6IC8vIG5lCisgICAgICAgICAg ICBpZiAoY2MgPT0gMSkgeworICAgICAgICAgICAgICAgIHRjZ19nZW5fYnJjb25kaV9pNjQoVENH X0NPTkRfRVEsIGNwdV9jY19kc3QsIDAsIGwxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgdGNnX2dlbl9icmNvbmRpX2kzMihUQ0dfQ09ORF9FUSwgY3B1X2NjX2RzdCwg MCwgbDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug MHhlOiAvLyBwb3MKKyAgICAgICAgICAgIGlmIChjYyA9PSAxKSB7CisgICAgICAgICAgICAgICAg dGNnX2dlbl9icmNvbmRpX2k2NChUQ0dfQ09ORF9MVCwgY3B1X2NjX2RzdCwgMCwgbDEpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0Y2dfZ2VuX2JyY29uZGlfaTMyKFRD R19DT05EX0xULCBjcHVfY2NfZHN0LCAwLCBsMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSAweGY6IC8vIHZjCisgICAgICAgICAgICBnZW5faGVscGVy X2NvbXB1dGVfcHNyKCk7CisgICAgICAgICAgICBkYy0+Y2Nfb3AgPSBDQ19PUF9GTEFHUzsKKyAg ICAgICAgICAgIGdlbl9vcF9ldmFsX2J2YyhjcHVfY2NfZHN0LCBjcHVfY2Nfc3JjKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0NfT1Bf RkxBR1M6CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ2VuX2NvbmQocl9jb25kLCBjYywgY29uZCwg ZGMpOworICAgICAgICB0Y2dfZ2VuX2JyY29uZGlfdGwoVENHX0NPTkRfRVEsIHJfY29uZCwgMCwg bDEpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIC8qIFhYWDogcG90ZW50aWFsbHkgaW5j b3JyZWN0IGlmIGR5bmFtaWMgbnBjICovCiBzdGF0aWMgdm9pZCBkb19icmFuY2goRGlzYXNDb250 ZXh0ICpkYywgaW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGluc24sIGludCBjYywKICAgICAgICAg ICAgICAgICAgICAgICBUQ0d2IHJfY29uZCkKQEAgLTExNDMsMTEgKzEyNDEsMTcgQEAgc3RhdGlj IHZvaWQgZG9fYnJhbmNoKERpc2FzQ29udGV4dCAqZGMsIGludDMyX3Qgb2Zmc2V0LCB1aW50MzJf dCBpbnNuLCBpbnQgY2MsCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmbHVzaF9j b25kKGRjLCByX2NvbmQpOwotICAgICAgICBnZW5fY29uZChyX2NvbmQsIGNjLCBjb25kLCBkYyk7 CiAgICAgICAgIGlmIChhKSB7Ci0gICAgICAgICAgICBnZW5fYnJhbmNoX2EoZGMsIHRhcmdldCwg ZGMtPm5wYywgcl9jb25kKTsKKyAgICAgICAgICAgIGludCBsMSA9IGdlbl9uZXdfbGFiZWwoKTsK KworICAgICAgICAgICAgZ2VuX2JyY29uZChkYywgY29uZCwgbDEsIGNjLCByX2NvbmQpOworICAg ICAgICAgICAgZ2VuX2dvdG9fdGIoZGMsIDAsIGRjLT5ucGMsIHRhcmdldCk7CisKKyAgICAgICAg ICAgIGdlbl9zZXRfbGFiZWwobDEpOworICAgICAgICAgICAgZ2VuX2dvdG9fdGIoZGMsIDEsIGRj LT5ucGMgKyA0LCBkYy0+bnBjICsgOCk7CiAgICAgICAgICAgICBkYy0+aXNfYnIgPSAxOwogICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2VuX2NvbmQocl9jb25kLCBjYywgY29uZCwgZGMp OwogICAgICAgICAgICAgZGMtPnBjID0gZGMtPm5wYzsKICAgICAgICAgICAgIGRjLT5qdW1wX3Bj WzBdID0gdGFyZ2V0OwogICAgICAgICAgICAgZGMtPmp1bXBfcGNbMV0gPSBkYy0+bnBjICsgNDsK LS0gCjEuNS42LjUKCg== --001636b2ae82e209e60485b58acd--