Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l9eXm-0000JY-Hy for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Feb 2021 01:43:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1l9eXk-0000ZR-Sg for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Feb 2021 01:43:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l9eXk-0000ZJ-8T for pgsql-hackers@lists.postgresql.org; Wed, 10 Feb 2021 01:43:48 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l9eXc-0003Dp-Hf for pgsql-hackers@postgresql.org; Wed, 10 Feb 2021 01:43:47 +0000 Received: from hnk.local (p18067-ipngn2801funabasi.chiba.ocn.ne.jp [153.212.145.67]) by oss.nttdata.com (Postfix) with ESMTPSA id DF1C8627C8; Wed, 10 Feb 2021 10:43:35 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com Subject: Re: adding wait_start column to pg_locks To: torikoshia Cc: Ian Lawrence Barwick , Robert Haas , Justin Pryzby , pgsql-hackers References: <23d39ee9c31643fad8f9ba9c5cf3aaf4@oss.nttdata.com> <0fd375a53e306566cea7f451cc8cfcde@oss.nttdata.com> <7b1bb07a-73ec-1fcc-2f65-41101adf0080@oss.nttdata.com> <8002219d-b999-12fa-2327-49afe40e5fbb@oss.nttdata.com> <88c451c7-2729-4329-fbae-6ed7664adea1@oss.nttdata.com> <3db333a9-31f7-a225-8038-eeb835ba8f37@oss.nttdata.com> <990e5d4b-075f-101f-aec5-bb44f9b30550@oss.nttdata.com> <40dfaa75-1058-e811-1f7c-4cf7203a3068@oss.nttdata.com> <64102638-7fc3-1941-12f1-e139e3463c03@oss.nttdata.com> <067d5597e5de82fe47e5716991ab65c4@oss.nttdata.com> From: Fujii Masao Message-ID: <337d5311-6113-15e0-bd85-90b47b55f5ae@oss.nttdata.com> Date: Wed, 10 Feb 2021 10:43:35 +0900 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <067d5597e5de82fe47e5716991ab65c4@oss.nttdata.com> Content-Type: multipart/mixed; boundary="------------1FEDCFFADF48B894D1726190" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------1FEDCFFADF48B894D1726190 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 2021/02/09 23:31, torikoshia wrote: > On 2021-02-09 22:54, Fujii Masao wrote: >> On 2021/02/09 19:11, Fujii Masao wrote: >>> >>> >>> On 2021/02/09 18:13, Fujii Masao wrote: >>>> >>>> >>>> On 2021/02/09 17:48, torikoshia wrote: >>>>> On 2021-02-05 18:49, Fujii Masao wrote: >>>>>> On 2021/02/05 0:03, torikoshia wrote: >>>>>>> On 2021-02-03 11:23, Fujii Masao wrote: >>>>>>>>> 64-bit fetches are not atomic on some platforms. So spinlock is necessary when updating "waitStart" without holding the partition lock? Also GetLockStatusData() needs spinlock when reading "waitStart"? >>>>>>>> >>>>>>>> Also it might be worth thinking to use 64-bit atomic operations like >>>>>>>> pg_atomic_read_u64(), for that. >>>>>>> >>>>>>> Thanks for your suggestion and advice! >>>>>>> >>>>>>> In the attached patch I used pg_atomic_read_u64() and pg_atomic_write_u64(). >>>>>>> >>>>>>> waitStart is TimestampTz i.e., int64, but it seems pg_atomic_read_xxx and pg_atomic_write_xxx only supports unsigned int, so I cast the type. >>>>>>> >>>>>>> I may be using these functions not correctly, so if something is wrong, I would appreciate any comments. >>>>>>> >>>>>>> >>>>>>> About the documentation, since your suggestion seems better than v6, I used it as is. >>>>>> >>>>>> Thanks for updating the patch! >>>>>> >>>>>> +    if (pg_atomic_read_u64(&MyProc->waitStart) == 0) >>>>>> +        pg_atomic_write_u64(&MyProc->waitStart, >>>>>> +                            pg_atomic_read_u64((pg_atomic_uint64 *) &now)); >>>>>> >>>>>> pg_atomic_read_u64() is really necessary? I think that >>>>>> "pg_atomic_write_u64(&MyProc->waitStart, now)" is enough. >>>>>> >>>>>> +        deadlockStart = get_timeout_start_time(DEADLOCK_TIMEOUT); >>>>>> +        pg_atomic_write_u64(&MyProc->waitStart, >>>>>> +                    pg_atomic_read_u64((pg_atomic_uint64 *) &deadlockStart)); >>>>>> >>>>>> Same as above. >>>>>> >>>>>> +        /* >>>>>> +         * Record waitStart reusing the deadlock timeout timer. >>>>>> +         * >>>>>> +         * It would be ideal this can be synchronously done with updating >>>>>> +         * lock information. Howerver, since it gives performance impacts >>>>>> +         * to hold partitionLock longer time, we do it here asynchronously. >>>>>> +         */ >>>>>> >>>>>> IMO it's better to comment why we reuse the deadlock timeout timer. >>>>>> >>>>>>      proc->waitStatus = waitStatus; >>>>>> +    pg_atomic_init_u64(&MyProc->waitStart, 0); >>>>>> >>>>>> pg_atomic_write_u64() should be used instead? Because waitStart can be >>>>>> accessed concurrently there. >>>>>> >>>>>> I updated the patch and addressed the above review comments. Patch attached. >>>>>> Barring any objection, I will commit this version. >>>>> >>>>> Thanks for modifying the patch! >>>>> I agree with your comments. >>>>> >>>>> BTW, I ran pgbench several times before and after applying >>>>> this patch. >>>>> >>>>> The environment is virtual machine(CentOS 8), so this is >>>>> just for reference, but there were no significant difference >>>>> in latency or tps(both are below 1%). >>>> >>>> Thanks for the test! I pushed the patch. >>> >>> But I reverted the patch because buildfarm members rorqual and >>> prion don't like the patch. I'm trying to investigate the cause >>> of this failures. >>> >>> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=rorqual&dt=2021-02-09%2009%3A20%3A10 >> >> -    relation     | locktype |        mode >> ------------------+----------+--------------------- >> - test_prepared_1 | relation | RowExclusiveLock >> - test_prepared_1 | relation | AccessExclusiveLock >> -(2 rows) >> - >> +ERROR:  invalid spinlock number: 0 >> >> "rorqual" reported that the above error happened in the server built with >> --disable-atomics --disable-spinlocks when reading pg_locks after >> the transaction was prepared. The cause of this issue is that "waitStart" >> atomic variable in the dummy proc created at the end of prepare transaction >> was not initialized. I updated the patch so that pg_atomic_init_u64() is >> called for the "waitStart" in the dummy proc for prepared transaction. >> Patch attached. I confirmed that the patched server built with >> --disable-atomics --disable-spinlocks passed all the regression tests. > > Thanks for fixing the bug, I also tested v9.patch configured with > --disable-atomics --disable-spinlocks on my environment and confirmed > that all tests have passed. Thanks for the test! I found another bug in the patch. InitProcess() initializes "waitStart", but previously InitAuxiliaryProcess() did not. This could cause "invalid spinlock number" error when reading pg_locks in the standby server. I fixed that. Attached is the updated version of the patch. Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION --------------1FEDCFFADF48B894D1726190 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v10.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v10.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQg Yi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnRyZWUub3V0CmluZGV4IDEzODQ4 Yjc0NDkuLjVhM2YxZWY3MzcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3Rl ZC9jaGVja19idHJlZS5vdXQKKysrIGIvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNr X2J0cmVlLm91dApAQCAtOTcsOCArOTcsOCBAQCBTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2No ZWNrKCdidHRlc3RfYl9pZHgnKTsKIFNFTEVDVCAqIEZST00gcGdfbG9ja3MKIFdIRVJFIHJl bGF0aW9uID0gQU5ZKEFSUkFZWydidHRlc3RfYScsICdidHRlc3RfYV9pZHgnLCAnYnR0ZXN0 X2InLCAnYnR0ZXN0X2JfaWR4J106OnJlZ2NsYXNzW10pCiAgICAgQU5EIHBpZCA9IHBnX2Jh Y2tlbmRfcGlkKCk7Ci0gbG9ja3R5cGUgfCBkYXRhYmFzZSB8IHJlbGF0aW9uIHwgcGFnZSB8 IHR1cGxlIHwgdmlydHVhbHhpZCB8IHRyYW5zYWN0aW9uaWQgfCBjbGFzc2lkIHwgb2JqaWQg fCBvYmpzdWJpZCB8IHZpcnR1YWx0cmFuc2FjdGlvbiB8IHBpZCB8IG1vZGUgfCBncmFudGVk IHwgZmFzdHBhdGggCi0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tCisgbG9ja3R5cGUgfCBkYXRhYmFzZSB8IHJlbGF0aW9uIHwgcGFnZSB8 IHR1cGxlIHwgdmlydHVhbHhpZCB8IHRyYW5zYWN0aW9uaWQgfCBjbGFzc2lkIHwgb2JqaWQg fCBvYmpzdWJpZCB8IHZpcnR1YWx0cmFuc2FjdGlvbiB8IHBpZCB8IG1vZGUgfCBncmFudGVk IHwgZmFzdHBhdGggfCB3YWl0c3RhcnQgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAoMCByb3dzKQogCiBDT01N SVQ7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IGVhMjIyYzA0NjQuLjkwODVkMmU2NGMgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCkBAIC0xMDYwNCw2ICsxMDYwNCwxOSBAQCBTQ1JBTS1TSEEtMjU2JDxy ZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBs YWNlYWJsZT4mbAogICAgICAgIGxvY2sgdGFibGUKICAgICAgIDwvcGFyYT48L2VudHJ5Pgog ICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2df dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8 c3RydWN0ZmllbGQ+d2FpdHN0YXJ0PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGltZXN0YW1wdHo8 L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaW1lIHdoZW4g dGhlIHNlcnZlciBwcm9jZXNzIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhpcyBsb2NrLAorICAg ICAgIG9yIG51bGwgaWYgdGhlIGxvY2sgaXMgaGVsZC4KKyAgICAgICBOb3RlIHRoYXQgdGhp cyBjYW4gYmUgbnVsbCBmb3IgYSB2ZXJ5IHNob3J0IHBlcmlvZCBvZiB0aW1lIGFmdGVyCisg ICAgICAgdGhlIHdhaXQgc3RhcnRlZCBldmVuIHRob3VnaCA8c3RydWN0ZmllbGQ+Z3JhbnRl ZDwvc3RydWN0ZmllbGQ+CisgICAgICAgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+Lgor ICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgogICAgIDwvdGJvZHk+CiAgICA8 L3Rncm91cD4KICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFz ZS5jCmluZGV4IGZjMThiNzc4MzIuLjcwZDIyNTc3Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtODczLDggKzg3MywxNSBAQCBQR1BST0MgKgogVHdv UGhhc2VHZXREdW1teVByb2MoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgbG9ja19oZWxkKQog ewogCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0ID0gVHdvUGhhc2VHZXRHWGFjdCh4aWQsIGxv Y2tfaGVsZCk7CisJUEdQUk9DCSAgICpkdW1teSA9ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tn eGFjdC0+cGdwcm9jbm9dOwogCi0JcmV0dXJuICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tneGFj dC0+cGdwcm9jbm9dOworCS8qCisJICogSW5pdGlhbGl6ZSBhdG9taWMgdmFyaWFibGUgaW4g ZHVtbXkgcHJvYyBzbyB0aGF0IEdldExvY2tTdGF0dXNEYXRhKCkKKwkgKiBjYW4gcmVhZCBp dCBsYXRlci4KKwkgKi8KKwlwZ19hdG9taWNfaW5pdF91NjQoJmR1bW15LT53YWl0U3RhcnQs IDApOworCisJcmV0dXJuIGR1bW15OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCmluZGV4IDM5YTMwYzAwZjcuLjU4NzdhNjA3MTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTU0MCwxMiArNTQwLDM0IEBA IHZvaWQKIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2soTE9DS1RBRyBsb2NrdGFn LCBib29sIGxvZ2dpbmdfY29uZmxpY3QpCiB7CiAJVGltZXN0YW1wVHogbHRpbWU7CisJVGlt ZXN0YW1wVHogbm93OwogCiAJQXNzZXJ0KEluSG90U3RhbmRieSk7CiAKIAlsdGltZSA9IEdl dFN0YW5kYnlMaW1pdFRpbWUoKTsKKwlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAK LQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49IGx0aW1lICYmIGx0aW1lICE9IDApCisJ LyoKKwkgKiBVcGRhdGUgd2FpdFN0YXJ0IGlmIGZpcnN0IHRpbWUgdGhyb3VnaCBhZnRlciB0 aGUgc3RhcnR1cCBwcm9jZXNzCisJICogc3RhcnRlZCB3YWl0aW5nIGZvciB0aGUgbG9jay4g SXQgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGV2ZXJ5IHRpbWUKKwkgKiBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhMb2NrKCkgaXMgY2FsbGVkIGR1cmluZyB0aGUgd2FpdC4KKwkgKgor CSAqIFVzZSB0aGUgY3VycmVudCB0aW1lIG9idGFpbmVkIGZvciBjb21wYXJpc29uIHdpdGgg bHRpbWUgYXMgd2FpdFN0YXJ0CisJICogKGkuZS4sIHRoZSB0aW1lIHdoZW4gdGhpcyBwcm9j ZXNzIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIGxvY2spLiBTaW5jZQorCSAqIGdldHRpbmcg dGhlIGN1cnJlbnQgdGltZSBuZXdseSBjYW4gY2F1c2Ugb3ZlcmhlYWQsIHdlIHJldXNlIHRo ZQorCSAqIGFscmVhZHktb2J0YWluZWQgdGltZSB0byBhdm9pZCB0aGF0IG92ZXJoZWFkLgor CSAqCisJICogTm90ZSB0aGF0IHdhaXRTdGFydCBpcyB1cGRhdGVkIHdpdGhvdXQgaG9sZGlu ZyB0aGUgbG9jayB0YWJsZSdzCisJICogcGFydGl0aW9uIGxvY2ssIHRvIGF2b2lkIHRoZSBv dmVyaGVhZCBieSBhZGRpdGlvbmFsIGxvY2sgYWNxdWlzaXRpb24uCisJICogVGhpcyBjYW4g Y2F1c2UgIndhaXRzdGFydCIgaW4gcGdfbG9ja3MgdG8gYmVjb21lIE5VTEwgZm9yIGEgdmVy eSBzaG9ydAorCSAqIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHRoZSB3YWl0IHN0YXJ0ZWQgZXZl biB0aG91Z2ggImdyYW50ZWQiIGlzIGZhbHNlLgorCSAqIFRoaXMgaXMgT0sgaW4gcHJhY3Rp Y2UgYmVjYXVzZSB3ZSBjYW4gYXNzdW1lIHRoYXQgdXNlcnMgYXJlIGxpa2VseSB0bworCSAq IGxvb2sgYXQgIndhaXRzdGFydCIgd2hlbiB3YWl0aW5nIGZvciB0aGUgbG9jayBmb3IgYSBs b25nIHRpbWUuCisJICovCisJaWYgKHBnX2F0b21pY19yZWFkX3U2NCgmTXlQcm9jLT53YWl0 U3RhcnQpID09IDApCisJCXBnX2F0b21pY193cml0ZV91NjQoJk15UHJvYy0+d2FpdFN0YXJ0 LCBub3cpOworCisJaWYgKG5vdyA+PSBsdGltZSAmJiBsdGltZSAhPSAwKQogCXsKIAkJLyoK IAkJICogV2UncmUgYWxyZWFkeSBiZWhpbmQsIHNvIGNsZWFyIGEgcGF0aCBhcyBxdWlja2x5 IGFzIHBvc3NpYmxlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXggNzljMWNmOWI4 Yi4uMTA4YjRkOTAyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC0zNjE5LDYg KzM2MTksMTIgQEAgR2V0TG9ja1N0YXR1c0RhdGEodm9pZCkKIAkJCWluc3RhbmNlLT5sZWFk ZXJQaWQgPSBwcm9jLT5waWQ7CiAJCQlpbnN0YW5jZS0+ZmFzdHBhdGggPSB0cnVlOwogCisJ CQkvKgorCQkJICogU3VjY2Vzc2Z1bGx5IHRha2luZyBmYXN0IHBhdGggbG9jayBtZWFucyB0 aGVyZSB3ZXJlIG5vCisJCQkgKiBjb25mbGljdGluZyBsb2Nrcy4KKwkJCSAqLworCQkJaW5z dGFuY2UtPndhaXRTdGFydCA9IDA7CisKIAkJCWVsKys7CiAJCX0KIApAQCAtMzY0Niw2ICsz NjUyLDcgQEAgR2V0TG9ja1N0YXR1c0RhdGEodm9pZCkKIAkJCWluc3RhbmNlLT5waWQgPSBw cm9jLT5waWQ7CiAJCQlpbnN0YW5jZS0+bGVhZGVyUGlkID0gcHJvYy0+cGlkOwogCQkJaW5z dGFuY2UtPmZhc3RwYXRoID0gdHJ1ZTsKKwkJCWluc3RhbmNlLT53YWl0U3RhcnQgPSAwOwog CiAJCQllbCsrOwogCQl9CkBAIC0zNjk4LDYgKzM3MDUsNyBAQCBHZXRMb2NrU3RhdHVzRGF0 YSh2b2lkKQogCQlpbnN0YW5jZS0+cGlkID0gcHJvYy0+cGlkOwogCQlpbnN0YW5jZS0+bGVh ZGVyUGlkID0gcHJvY2xvY2stPmdyb3VwTGVhZGVyLT5waWQ7CiAJCWluc3RhbmNlLT5mYXN0 cGF0aCA9IGZhbHNlOworCQlpbnN0YW5jZS0+d2FpdFN0YXJ0ID0gKFRpbWVzdGFtcFR6KSBw Z19hdG9taWNfcmVhZF91NjQoJnByb2MtPndhaXRTdGFydCk7CiAKIAkJZWwrKzsKIAl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCBjODdmZmM2NTQ5Li4wODg0OTA5YTIyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTQwMiw2ICs0MDIsNyBAQCBJbml0UHJv Y2Vzcyh2b2lkKQogCU15UHJvYy0+bHdXYWl0TW9kZSA9IDA7CiAJTXlQcm9jLT53YWl0TG9j ayA9IE5VTEw7CiAJTXlQcm9jLT53YWl0UHJvY0xvY2sgPSBOVUxMOworCXBnX2F0b21pY19p bml0X3U2NCgmTXlQcm9jLT53YWl0U3RhcnQsIDApOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKIAl7CiAJCWludAkJCWk7CkBAIC01ODAsNiArNTgxLDcgQEAgSW5pdEF1eGlsaWFy eVByb2Nlc3Modm9pZCkKIAlNeVByb2MtPmx3V2FpdE1vZGUgPSAwOwogCU15UHJvYy0+d2Fp dExvY2sgPSBOVUxMOwogCU15UHJvYy0+d2FpdFByb2NMb2NrID0gTlVMTDsKKwlwZ19hdG9t aWNfaW5pdF91NjQoJk15UHJvYy0+d2FpdFN0YXJ0LCAwKTsKICNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCiAJewogCQlpbnQJCQlpOwpAQCAtMTI2Miw2ICsxMjY0LDIzIEBAIFByb2NT bGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUp CiAJCX0KIAkJZWxzZQogCQkJZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoREVBRExPQ0tfVElNRU9V VCwgRGVhZGxvY2tUaW1lb3V0KTsKKworCQkvKgorCQkgKiBVc2UgdGhlIGN1cnJlbnQgdGlt ZSBvYnRhaW5lZCBmb3IgdGhlIGRlYWRsb2NrIHRpbWVvdXQgdGltZXIgYXMKKwkJICogd2Fp dFN0YXJ0IChpLmUuLCB0aGUgdGltZSB3aGVuIHRoaXMgcHJvY2VzcyBzdGFydGVkIHdhaXRp bmcgZm9yIHRoZQorCQkgKiBsb2NrKS4gU2luY2UgZ2V0dGluZyB0aGUgY3VycmVudCB0aW1l IG5ld2x5IGNhbiBjYXVzZSBvdmVyaGVhZCwgd2UKKwkJICogcmV1c2UgdGhlIGFscmVhZHkt b2J0YWluZWQgdGltZSB0byBhdm9pZCB0aGF0IG92ZXJoZWFkLgorCQkgKgorCQkgKiBOb3Rl IHRoYXQgd2FpdFN0YXJ0IGlzIHVwZGF0ZWQgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrIHRh YmxlJ3MKKwkJICogcGFydGl0aW9uIGxvY2ssIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBieSBh ZGRpdGlvbmFsIGxvY2sKKwkJICogYWNxdWlzaXRpb24uIFRoaXMgY2FuIGNhdXNlICJ3YWl0 c3RhcnQiIGluIHBnX2xvY2tzIHRvIGJlY29tZSBOVUxMCisJCSAqIGZvciBhIHZlcnkgc2hv cnQgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIHdhaXQgc3RhcnRlZCBldmVuIHRob3VnaAor CQkgKiAiZ3JhbnRlZCIgaXMgZmFsc2UuIFRoaXMgaXMgT0sgaW4gcHJhY3RpY2UgYmVjYXVz ZSB3ZSBjYW4gYXNzdW1lCisJCSAqIHRoYXQgdXNlcnMgYXJlIGxpa2VseSB0byBsb29rIGF0 ICJ3YWl0c3RhcnQiIHdoZW4gd2FpdGluZyBmb3IgdGhlCisJCSAqIGxvY2sgZm9yIGEgbG9u ZyB0aW1lLgorCQkgKi8KKwkJcGdfYXRvbWljX3dyaXRlX3U2NCgmTXlQcm9jLT53YWl0U3Rh cnQsCisJCQkJCQkJZ2V0X3RpbWVvdXRfc3RhcnRfdGltZShERUFETE9DS19USU1FT1VUKSk7 CiAJfQogCWVsc2UgaWYgKGxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cykKIAl7CkBAIC0x Njc4LDYgKzE2OTcsNyBAQCBQcm9jV2FrZXVwKFBHUFJPQyAqcHJvYywgUHJvY1dhaXRTdGF0 dXMgd2FpdFN0YXR1cykKIAlwcm9jLT53YWl0TG9jayA9IE5VTEw7CiAJcHJvYy0+d2FpdFBy b2NMb2NrID0gTlVMTDsKIAlwcm9jLT53YWl0U3RhdHVzID0gd2FpdFN0YXR1czsKKwlwZ19h dG9taWNfd3JpdGVfdTY0KCZNeVByb2MtPndhaXRTdGFydCwgMCk7CiAKIAkvKiBBbmQgYXdh a2VuIGl0ICovCiAJU2V0TGF0Y2goJnByb2MtPnByb2NMYXRjaCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbG9ja2Z1bmNzLmMKaW5kZXggYjFjZjViNzlhNy4uOTdmMDI2NWMxMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9sb2NrZnVuY3MuYwpAQCAtNjMsNyArNjMsNyBAQCB0eXBlZGVmIHN0cnVj dAogfSBQR19Mb2NrX1N0YXR1czsKIAogLyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gcGdfbG9j a3Mgb3V0cHV0ICovCi0jZGVmaW5lIE5VTV9MT0NLX1NUQVRVU19DT0xVTU5TCQkxNQorI2Rl ZmluZSBOVU1fTE9DS19TVEFUVVNfQ09MVU1OUwkJMTYKIAogLyoKICAqIFZYSURHZXREYXR1 bSAtIENvbnN0cnVjdCBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBWWElECkBAIC0xNDIs NiArMTQyLDggQEAgcGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAg IEJPT0xPSUQsIC0xLCAwKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRy TnVtYmVyKSAxNSwgImZhc3RwYXRoIiwKIAkJCQkJCSAgIEJPT0xPSUQsIC0xLCAwKTsKKwkJ VHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxNiwgIndhaXRzdGFy dCIsCisJCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCiAJCWZ1bmNjdHgtPnR1 cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIApAQCAtMzM2LDYgKzMzOCwx MCBAQCBwZ19sb2NrX3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbMTJdID0g Q1N0cmluZ0dldFRleHREYXR1bShHZXRMb2NrbW9kZU5hbWUoaW5zdGFuY2UtPmxvY2t0YWcu bG9ja3RhZ19sb2NrbWV0aG9kaWQsIG1vZGUpKTsKIAkJdmFsdWVzWzEzXSA9IEJvb2xHZXRE YXR1bShncmFudGVkKTsKIAkJdmFsdWVzWzE0XSA9IEJvb2xHZXREYXR1bShpbnN0YW5jZS0+ ZmFzdHBhdGgpOworCQlpZiAoIWdyYW50ZWQgJiYgaW5zdGFuY2UtPndhaXRTdGFydCAhPSAw KQorCQkJdmFsdWVzWzE1XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oaW5zdGFuY2UtPndhaXRT dGFydCk7CisJCWVsc2UKKwkJCW51bGxzWzE1XSA9IHRydWU7CiAKIAkJdHVwbGUgPSBoZWFw X2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CiAJCXJl c3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKQEAgLTQwNiw2ICs0MTIsNyBAQCBw Z19sb2NrX3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbMTJdID0gQ1N0cmlu Z0dldFRleHREYXR1bSgiU0lSZWFkTG9jayIpOwogCQl2YWx1ZXNbMTNdID0gQm9vbEdldERh dHVtKHRydWUpOwogCQl2YWx1ZXNbMTRdID0gQm9vbEdldERhdHVtKGZhbHNlKTsKKwkJbnVs bHNbMTVdID0gdHJ1ZTsKIAogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShmdW5jY3R4LT50 dXBsZV9kZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0 dW0odHVwbGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9u LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAppbmRleCA2Mzg4MzBhYWFj Li5jMWE1ZGQ0ZWU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNp b24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaApAQCAtNTMsNiAr NTMsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmluZSBDQVRBTE9H X1ZFUlNJT05fTk8JMjAyMTAyMDIxCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwkyMDIx MDIwOTEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA0ZTBjOWJl NThjLi4xNDg3NzEwZDU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTU5OTQs OSArNTk5NCw5IEBACiB7IG9pZCA9PiAnMTM3MScsIGRlc2NyID0+ICd2aWV3IHN5c3RlbSBs b2NrIGluZm9ybWF0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfbG9ja19zdGF0dXMnLCBwcm9y b3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ICd0JywKICAgcHJvdm9sYXRpbGUgPT4gJ3Yn LCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKLSAgcHJvYWxs YXJndHlwZXMgPT4gJ3t0ZXh0LG9pZCxvaWQsaW50NCxpbnQyLHRleHQseGlkLG9pZCxvaWQs aW50Mix0ZXh0LGludDQsdGV4dCxib29sLGJvb2x9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tv LG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne2xv Y2t0eXBlLGRhdGFiYXNlLHJlbGF0aW9uLHBhZ2UsdHVwbGUsdmlydHVhbHhpZCx0cmFuc2Fj dGlvbmlkLGNsYXNzaWQsb2JqaWQsb2Jqc3ViaWQsdmlydHVhbHRyYW5zYWN0aW9uLHBpZCxt b2RlLGdyYW50ZWQsZmFzdHBhdGh9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LG9p ZCxvaWQsaW50NCxpbnQyLHRleHQseGlkLG9pZCxvaWQsaW50Mix0ZXh0LGludDQsdGV4dCxi b29sLGJvb2wsdGltZXN0YW1wdHp9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvLG8s byxvLG8sbyxvLG8sbyxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7bG9ja3R5cGUs ZGF0YWJhc2UscmVsYXRpb24scGFnZSx0dXBsZSx2aXJ0dWFseGlkLHRyYW5zYWN0aW9uaWQs Y2xhc3NpZCxvYmppZCxvYmpzdWJpZCx2aXJ0dWFsdHJhbnNhY3Rpb24scGlkLG1vZGUsZ3Jh bnRlZCxmYXN0cGF0aCx3YWl0c3RhcnR9JywKICAgcHJvc3JjID0+ICdwZ19sb2NrX3N0YXR1 cycgfSwKIHsgb2lkID0+ICcyNTYxJywKICAgZGVzY3IgPT4gJ2dldCBhcnJheSBvZiBQSURz IG9mIHNlc3Npb25zIGJsb2NraW5nIHNwZWNpZmllZCBiYWNrZW5kIFBJRCBmcm9tIGFjcXVp cmluZyBhIGhlYXZ5d2VpZ2h0IGxvY2snLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sb2NrLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCA2OGEzNDg3 ZDQ5Li45YjJhNDIxYzMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2su aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaApAQCAtMjIsNiArMjIsNyBAQAog I2luY2x1ZGUgInN0b3JhZ2UvbG9ja2RlZnMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9j ay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJ1dGlscy90aW1l c3RhbXAuaCIKIAogLyogc3RydWN0IFBHUFJPQyBpcyBkZWNsYXJlZCBpbiBwcm9jLmgsIGJ1 dCBtdXN0IGZvcndhcmQtcmVmZXJlbmNlIGl0ICovCiB0eXBlZGVmIHN0cnVjdCBQR1BST0Mg UEdQUk9DOwpAQCAtNDQ2LDYgKzQ0Nyw4IEBAIHR5cGVkZWYgc3RydWN0IExvY2tJbnN0YW5j ZURhdGEKIAlMT0NLTU9ERQl3YWl0TG9ja01vZGU7CS8qIGxvY2sgYXdhaXRlZCBieSB0aGlz IFBHUFJPQywgaWYgYW55ICovCiAJQmFja2VuZElkCWJhY2tlbmQ7CQkvKiBiYWNrZW5kIElE IG9mIHRoaXMgUEdQUk9DICovCiAJTG9jYWxUcmFuc2FjdGlvbklkIGx4aWQ7CS8qIGxvY2Fs IHRyYW5zYWN0aW9uIElEIG9mIHRoaXMgUEdQUk9DICovCisJVGltZXN0YW1wVHogd2FpdFN0 YXJ0OwkJLyogdGltZSBhdCB3aGljaCB0aGlzIFBHUFJPQyBzdGFydGVkIHdhaXRpbmcKKwkJ CQkJCQkJICogZm9yIGxvY2sgKi8KIAlpbnQJCQlwaWQ7CQkJLyogcGlkIG9mIHRoaXMgUEdQ Uk9DICovCiAJaW50CQkJbGVhZGVyUGlkOwkJLyogcGlkIG9mIGdyb3VwIGxlYWRlcjsgPSBw aWQgaWYgbm8gZ3JvdXAgKi8KIAlib29sCQlmYXN0cGF0aDsJCS8qIHRha2VuIHZpYSBmYXN0 cGF0aD8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggNjgzYWI2NGY3Ni4uYTc3N2NiNjRhMSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTE4MSw2ICsxODEsOCBAQCBzdHJ1Y3QgUEdQUk9DCiAJ TE9DS01PREUJd2FpdExvY2tNb2RlOwkvKiB0eXBlIG9mIGxvY2sgd2UncmUgd2FpdGluZyBm b3IgKi8KIAlMT0NLTUFTSwloZWxkTG9ja3M7CQkvKiBiaXRtYXNrIGZvciBsb2NrIHR5cGVz IGFscmVhZHkgaGVsZCBvbiB0aGlzCiAJCQkJCQkJCSAqIGxvY2sgb2JqZWN0IGJ5IHRoaXMg YmFja2VuZCAqLworCXBnX2F0b21pY191aW50NjQgd2FpdFN0YXJ0OyAvKiB0aW1lIGF0IHdo aWNoIHdhaXQgZm9yIGxvY2sgYWNxdWlzaXRpb24KKwkJCQkJCQkJICogc3RhcnRlZCAqLwog CiAJYm9vbAkJZGVsYXlDaGtwdDsJCS8qIHRydWUgaWYgdGhpcyBwcm9jIGRlbGF5cyBjaGVj a3BvaW50IHN0YXJ0ICovCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5k ZXggYjYzMmQ5ZjJlYS4uMTBhMWYzNGViYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKQEAgLTEzOTQsOCArMTM5NCw5IEBAIHBnX2xvY2tzfCBTRUxFQ1QgbC5sb2Nr dHlwZSwKICAgICBsLnBpZCwKICAgICBsLm1vZGUsCiAgICAgbC5ncmFudGVkLAotICAgIGwu ZmFzdHBhdGgKLSAgIEZST00gcGdfbG9ja19zdGF0dXMoKSBsKGxvY2t0eXBlLCBkYXRhYmFz ZSwgcmVsYXRpb24sIHBhZ2UsIHR1cGxlLCB2aXJ0dWFseGlkLCB0cmFuc2FjdGlvbmlkLCBj bGFzc2lkLCBvYmppZCwgb2Jqc3ViaWQsIHZpcnR1YWx0cmFuc2FjdGlvbiwgcGlkLCBtb2Rl LCBncmFudGVkLCBmYXN0cGF0aCk7CisgICAgbC5mYXN0cGF0aCwKKyAgICBsLndhaXRzdGFy dAorICAgRlJPTSBwZ19sb2NrX3N0YXR1cygpIGwobG9ja3R5cGUsIGRhdGFiYXNlLCByZWxh dGlvbiwgcGFnZSwgdHVwbGUsIHZpcnR1YWx4aWQsIHRyYW5zYWN0aW9uaWQsIGNsYXNzaWQs IG9iamlkLCBvYmpzdWJpZCwgdmlydHVhbHRyYW5zYWN0aW9uLCBwaWQsIG1vZGUsIGdyYW50 ZWQsIGZhc3RwYXRoLCB3YWl0c3RhcnQpOwogcGdfbWF0dmlld3N8IFNFTEVDVCBuLm5zcG5h bWUgQVMgc2NoZW1hbmFtZSwKICAgICBjLnJlbG5hbWUgQVMgbWF0dmlld25hbWUsCiAgICAg cGdfZ2V0X3VzZXJieWlkKGMucmVsb3duZXIpIEFTIG1hdHZpZXdvd25lciwK --------------1FEDCFFADF48B894D1726190--