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 1nRCCW-000790-1X for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 12:10:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nRCCU-0002lX-Ij for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 12:10:54 +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 1nRCCU-0002lO-1G for pgsql-hackers@lists.postgresql.org; Mon, 07 Mar 2022 12:10:54 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nRCCM-0004se-Rn for pgsql-hackers@lists.postgresql.org; Mon, 07 Mar 2022 12:10:52 +0000 Received: by mail-lj1-x235.google.com with SMTP id q10so7381955ljc.7 for ; Mon, 07 Mar 2022 04:10:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hagander-net.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=M6lQ9BuA5xAqtqmC1pGotHDWqUMdumCC2l/GcgLtnKE=; b=K+CiP71uiM3fy2aGcqiB5hVZsirVetSxShUXjSuces6JEFbWkaxOtS0kbQp6SXirCJ cH5qiuj3umiVg2ALBzM1kzWV9YyFmfP77icZPwWNAh16ewyVaD2swIxDilQcS1/m1ynf rQQlZKPFCDFfm2c80F4oCmWy7wNcZsaIdqa1lf1GNA7KrB5YV4O1lZ5Bc/3qnVotwbCo jyEtga9Qv9gRFcYOmT0vMNbu9lq6u9hMHw9kp/e9u3/Ijm8cTLIycsxmotVa2rGVErET WJuDnn7zGcChFxJwLbg3db4CRLJEFZOgZ0syFhrbocXiU4OaKRLv3Ql4/AbZO7vGZ5qg 82ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=M6lQ9BuA5xAqtqmC1pGotHDWqUMdumCC2l/GcgLtnKE=; b=rGO8UOc7/la7Z8OGZkJNckE8iGsolif5wm2Mxsbv1TUE6bJB1aHH9jaUo+x16fTF46 KG1p5rosv5SFvFDRNyzmICyGKRHQ0n2rpX8Bq+aE+D9/r8iS7/oskC6702Ld2mGs611V PsbF917odmLTEEFU0CuVWstU4R2kimt3u/sxetIXr7RZ+v3FyB2BtGaQKT2OBD4t0jO3 E5wx+cp7at6d+2cdLfYA0TEY3ZzgOUPauOFEi1awFivEde2EuZnalAhFvaRpTd6znToa 3kyDlwK9P9fpZXT6OO0zsgA/nR+eWTihMP4T0lfyLfT7dJ/YknXWMoifbq1gp0t0RrjQ CerQ== X-Gm-Message-State: AOAM531hYjNiNwES9fnaup0HnkQ/Wv1x0y/L3b2QL+QzZxJAoXzBXCYm ZZL0iU2cKdSM+56ItsOtKmUwcOtum9s7H2Q7slK4SBLtc+k= X-Google-Smtp-Source: ABdhPJywYHUk1H1C7qOsnmukEHus7FSSdxtRuhmafQlygNJOdel1ljxx0FDKD1mwx9pOGe9gl7rFtrSoy7kdh8GbaXE= X-Received: by 2002:a2e:9d58:0:b0:246:4c6b:e9c8 with SMTP id y24-20020a2e9d58000000b002464c6be9c8mr7415040ljj.182.1646655044666; Mon, 07 Mar 2022 04:10:44 -0800 (PST) MIME-Version: 1.0 References: <20220225162304.GD9008@telsasoft.com> In-Reply-To: <20220225162304.GD9008@telsasoft.com> From: Magnus Hagander Date: Mon, 7 Mar 2022 13:10:32 +0100 Message-ID: Subject: Re: Add parameter jit_warn_above_fraction To: Justin Pryzby Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000174ab05d99fc15c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000174ab05d99fc15c Content-Type: text/plain; charset="UTF-8" On Fri, Feb 25, 2022 at 5:23 PM Justin Pryzby wrote: > > On Fri, Feb 25, 2022 at 04:16:01PM +0100, Magnus Hagander wrote: > > + { > > + {"jit_warn_above_fraction", PGC_SUSET, LOGGING_WHEN, > > + gettext_noop("Sets the fraction of query time spent on JIT before writing" > > + "a warning to the log."), > > + gettext_noop("Write a message tot he server log if more than this" > > + "fraction of the query runtime is spent on JIT." > > + "Zero turns off the warning.") > > + }, > > + &jit_warn_above_fraction, > > + 0.0, 0.0, 1.0, > > + NULL, NULL, NULL > > + }, > > Should be PGC_USERSET ? Yes. Definitely. Copy/paste thinko. > + gettext_noop("Write a message tot he server log if more than this" > > to the Yup. > + if (jit_enabled && jit_warn_above_fraction > 0) > + { > + int64 jit_time = > + INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.generation_counter) + > + INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.inlining_counter) + > + INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.optimization_counter) + > + INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.emission_counter); > + > + if (jit_time > msecs * jit_warn_above_fraction) > + { > + ereport(WARNING, > + (errmsg("JIT time was %ld ms of %d ms", > + jit_time, msecs))); > + } > + } > > > I think it should be a NOTICE (or less?) Hmm. I'm not so sure. Other similar parameters often use LOG, but the downside of that is that it won't be sent to the client. The problem with using NOTICE is that it won't go to the log by default. It needs to be at least warning to do that. > Is it more useful if this is applied combined with log_min_duration_statement ? > > It's easy to imagine a query for which the planner computes a high cost, but > actually runs quickly. You might get a bunch of WARNINGs that the query took > 10 MS and JIT was 75% of that, even if you don't care about queries that take > less than 10 SEC. Yeah, that's definitely a problem. But which way would you want to tie it to log_min_duration_statement? That a statement would both have to take longer than log_min_duration_statement *and* have JIT above a certain percentage? In my experience that is instead likely to miss most of the interesting times. Maybe it would need a separate guc for the timing, but I'd like to avoid that, I'm not sure it's a function worth *that* much... > I should say that this is already available by processing the output of > autoexplain. True. You just can't trigger it based on it. (and it can be somewhat of a PITA to parse things out of auto_explain on busy systems, but it does give a lot of very useful details) Meanwhile here is an updated based on your other comments above, as well as those from Julien. -- Magnus Hagander Me: https://www.hagander.net/ Work: https://www.redpill-linpro.com/ --0000000000000174ab05d99fc15c Content-Type: text/x-patch; charset="US-ASCII"; name="jit_warn_above_fraction_v2.patch" Content-Disposition: attachment; filename="jit_warn_above_fraction_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0gnw1mi0 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCA3ZWQ4YzgyYTlkLi5lYzQzMDhhNDgwIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC02NTky LDYgKzY1OTIsMjEgQEAgbG9jYWwwLiogICAgL3Zhci9sb2cvcG9zdGdyZXNxbAogICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 Imd1Yy1qaXQtd2Fybi1hYm92ZS1mcmFjdGlvbiIgeHJlZmxhYmVsPSJqaXRfd2Fybl9hYm92ZV9m cmFjdGlvbiI+CisgICAgICA8dGVybT48dmFybmFtZT5qaXRfd2Fybl9hYm92ZV9mcmFjdGlvbjwv dmFybmFtZT4gKDx0eXBlPmZsb2F0aW5nIHBvaW50PC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+ CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aml0X3dhcm5fYWJvdmVfZnJhY3Rpb248L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+ CisgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAg ICAgIENhdXNlcyBhIHdhcm5pbmcgdG8gYmUgd3JpdHRlbiB0byB0aGUgbG9nIGlmIHRoZSB0aW1l IHNwZW50IG9uIEpJVCAoc2VlIDx4cmVmIGxpbmtlbmQ9ImppdCIvPikKKyAgICAgICAgIGdvZXMg YWJvdmUgdGhpcyBmcmFjdGlvbiBvZiB0aGUgdG90YWwgcXVlcnkgcnVudGltZS4KKyAgICAgICAg IEEgdmFsdWUgb2YgMCAodGhlIGRlZmF1bHQpIGRpc2FibGVzIHRoZSB3YXJuaW5nLgorICAgICAg ICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWxvZy1zdGFydHVwLXByb2dyZXNzLWludGVydmFsIiB4 cmVmbGFiZWw9ImxvZ19zdGFydHVwX3Byb2dyZXNzX2ludGVydmFsIj4KICAgICAgIDx0ZXJtPjx2 YXJuYW1lPmxvZ19zdGFydHVwX3Byb2dyZXNzX2ludGVydmFsPC92YXJuYW1lPiAoPHR5cGU+aW50 ZWdlcjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC9mYXN0cGF0aC5jIGIvc3JjL2JhY2tlbmQvdGNvcC9mYXN0cGF0aC5jCmluZGV4IGQ0Mjlh YTQ2NjMuLmExYmZmODkzYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvZmFzdHBhdGgu YworKysgYi9zcmMvYmFja2VuZC90Y29wL2Zhc3RwYXRoLmMKQEAgLTE5Niw2ICsxOTYsNyBAQCBI YW5kbGVGdW5jdGlvblJlcXVlc3QoU3RyaW5nSW5mbyBtc2dCdWYpCiAJc3RydWN0IGZwX2luZm8g KmZpcDsKIAlib29sCQljYWxsaXQ7CiAJYm9vbAkJd2FzX2xvZ2dlZCA9IGZhbHNlOworCWludAkJ CW1zZWNzOwogCWNoYXIJCW1zZWNfc3RyWzMyXTsKIAogCS8qCkBAIC0zMDUsNyArMzA2LDcgQEAg SGFuZGxlRnVuY3Rpb25SZXF1ZXN0KFN0cmluZ0luZm8gbXNnQnVmKQogCS8qCiAJICogRW1pdCBk dXJhdGlvbiBsb2dnaW5nIGlmIGFwcHJvcHJpYXRlLgogCSAqLwotCXN3aXRjaCAoY2hlY2tfbG9n X2R1cmF0aW9uKG1zZWNfc3RyLCB3YXNfbG9nZ2VkKSkKKwlzd2l0Y2ggKGNoZWNrX2xvZ19kdXJh dGlvbigmbXNlY3MsIG1zZWNfc3RyLCB3YXNfbG9nZ2VkKSkKIAl7CiAJCWNhc2UgMToKIAkJCWVy ZXBvcnQoTE9HLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGQ3ZTM5YWVkNjQuLmZjZjIwNDI4YTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKQEAgLTEwMTYsNyArMTAxNiw5IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAlib29sCQlzYXZlX2xvZ19zdGF0ZW1lbnRfc3RhdHMg PSBsb2dfc3RhdGVtZW50X3N0YXRzOwogCWJvb2wJCXdhc19sb2dnZWQgPSBmYWxzZTsKIAlib29s CQl1c2VfaW1wbGljaXRfYmxvY2s7CisJaW50CQkJbXNlY3M7CiAJY2hhcgkJbXNlY19zdHJbMzJd OworCWludDY0CQlqaXRfdGltZSA9IDA7CiAKIAkvKgogCSAqIFJlcG9ydCBxdWVyeSB0byB2YXJp b3VzIG1vbml0b3JpbmcgZmFjaWxpdGllcy4KQEAgLTEyNzUsNiArMTI3NywxNiBAQCBleGVjX3Np bXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAKIAkJcmVjZWl2ZXItPnJEZXN0 cm95KHJlY2VpdmVyKTsKIAorCQkvKiBDb2xsZWN0IEpJVCB0aW1pbmdzIGluIGNhc2UgaXQncyBh Y3RpdmUgKi8KKwkJaWYgKGppdF9lbmFibGVkICYmIGppdF93YXJuX2Fib3ZlX2ZyYWN0aW9uID4g MCAmJiBwb3J0YWwtPnF1ZXJ5RGVzYyAmJiBwb3J0YWwtPnF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19q aXQpCisJCXsKKwkJCWppdF90aW1lICs9CisJCQkJSU5TVFJfVElNRV9HRVRfTUlMTElTRUMocG9y dGFsLT5xdWVyeURlc2MtPmVzdGF0ZS0+ZXNfaml0LT5pbnN0ci5nZW5lcmF0aW9uX2NvdW50ZXIp ICsKKwkJCQlJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhwb3J0YWwtPnF1ZXJ5RGVzYy0+ZXN0YXRl LT5lc19qaXQtPmluc3RyLmlubGluaW5nX2NvdW50ZXIpICsKKwkJCQlJTlNUUl9USU1FX0dFVF9N SUxMSVNFQyhwb3J0YWwtPnF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19qaXQtPmluc3RyLm9wdGltaXph dGlvbl9jb3VudGVyKSArCisJCQkJSU5TVFJfVElNRV9HRVRfTUlMTElTRUMocG9ydGFsLT5xdWVy eURlc2MtPmVzdGF0ZS0+ZXNfaml0LT5pbnN0ci5lbWlzc2lvbl9jb3VudGVyKTsKKwkJfQorCiAJ CVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CiAKIAkJaWYgKGxuZXh0KHBhcnNldHJlZV9saXN0 LCBwYXJzZXRyZWVfaXRlbSkgPT0gTlVMTCkKQEAgLTEzNDUsNyArMTM1Nyw3IEBAIGV4ZWNfc2lt cGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkvKgogCSAqIEVtaXQgZHVyYXRp b24gbG9nZ2luZyBpZiBhcHByb3ByaWF0ZS4KIAkgKi8KLQlzd2l0Y2ggKGNoZWNrX2xvZ19kdXJh dGlvbihtc2VjX3N0ciwgd2FzX2xvZ2dlZCkpCisJc3dpdGNoIChjaGVja19sb2dfZHVyYXRpb24o Jm1zZWNzLCBtc2VjX3N0ciwgd2FzX2xvZ2dlZCkpCiAJewogCQljYXNlIDE6CiAJCQllcmVwb3J0 KExPRywKQEAgLTEzNjEsNiArMTM3MywxNiBAQCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcpCiAJCQlicmVhazsKIAl9CiAKKwlpZiAoaml0X2VuYWJsZWQgJiYgaml0 X3dhcm5fYWJvdmVfZnJhY3Rpb24gPiAwKQorCXsKKwkJaWYgKGppdF90aW1lID4gbXNlY3MgKiBq aXRfd2Fybl9hYm92ZV9mcmFjdGlvbikKKwkJeworCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQko ZXJybXNnKCJKSVQgdG90YWwgcHJvY2Vzc2luZyB0aW1lIHdhcyAlbGQgbXMgb2YgJWQgbXMiLAor CQkJCQkJCWppdF90aW1lLCBtc2VjcykpKTsKKwkJfQorCX0KKwogCWlmIChzYXZlX2xvZ19zdGF0 ZW1lbnRfc3RhdHMpCiAJCVNob3dVc2FnZSgiUVVFUlkgU1RBVElTVElDUyIpOwogCkBAIC0xMzg4 LDYgKzE0MTAsNyBAQCBleGVjX3BhcnNlX21lc3NhZ2UoY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LAkvKiBzdHJpbmcgdG8gZXhlY3V0ZSAqLwogCUNhY2hlZFBsYW5Tb3VyY2UgKnBzcmM7CiAJYm9v bAkJaXNfbmFtZWQ7CiAJYm9vbAkJc2F2ZV9sb2dfc3RhdGVtZW50X3N0YXRzID0gbG9nX3N0YXRl bWVudF9zdGF0czsKKwlpbnQJCQltc2VjczsKIAljaGFyCQltc2VjX3N0clszMl07CiAKIAkvKgpA QCAtMTU4MSw3ICsxNjA0LDcgQEAgZXhlY19wYXJzZV9tZXNzYWdlKGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywJLyogc3RyaW5nIHRvIGV4ZWN1dGUgKi8KIAkvKgogCSAqIEVtaXQgZHVyYXRpb24g bG9nZ2luZyBpZiBhcHByb3ByaWF0ZS4KIAkgKi8KLQlzd2l0Y2ggKGNoZWNrX2xvZ19kdXJhdGlv bihtc2VjX3N0ciwgZmFsc2UpKQorCXN3aXRjaCAoY2hlY2tfbG9nX2R1cmF0aW9uKCZtc2Vjcywg bXNlY19zdHIsIGZhbHNlKSkKIAl7CiAJCWNhc2UgMToKIAkJCWVyZXBvcnQoTE9HLApAQCAtMTYy OCw2ICsxNjUxLDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdl KQogCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKIAlib29sCQlzYXZlX2xvZ19zdGF0ZW1lbnRf c3RhdHMgPSBsb2dfc3RhdGVtZW50X3N0YXRzOwogCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNl OworCWludAkJCW1zZWNzOwogCWNoYXIJCW1zZWNfc3RyWzMyXTsKIAlQYXJhbXNFcnJvckNiRGF0 YSBwYXJhbXNfZGF0YTsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBwYXJhbXNfZXJyY3h0OwpAQCAt MjA0MCw3ICsyMDY0LDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNz YWdlKQogCS8qCiAJICogRW1pdCBkdXJhdGlvbiBsb2dnaW5nIGlmIGFwcHJvcHJpYXRlLgogCSAq LwotCXN3aXRjaCAoY2hlY2tfbG9nX2R1cmF0aW9uKG1zZWNfc3RyLCBmYWxzZSkpCisJc3dpdGNo IChjaGVja19sb2dfZHVyYXRpb24oJm1zZWNzLCBtc2VjX3N0ciwgZmFsc2UpKQogCXsKIAkJY2Fz ZSAxOgogCQkJZXJlcG9ydChMT0csCkBAIC0yMDg2LDYgKzIxMTAsNyBAQCBleGVjX2V4ZWN1dGVf bWVzc2FnZShjb25zdCBjaGFyICpwb3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cykKIAlib29sCQlp c194YWN0X2NvbW1hbmQ7CiAJYm9vbAkJZXhlY3V0ZV9pc19mZXRjaDsKIAlib29sCQl3YXNfbG9n Z2VkID0gZmFsc2U7CisJaW50CQkJbXNlY3M7CiAJY2hhcgkJbXNlY19zdHJbMzJdOwogCVBhcmFt c0Vycm9yQ2JEYXRhIHBhcmFtc19kYXRhOwogCUVycm9yQ29udGV4dENhbGxiYWNrIHBhcmFtc19l cnJjeHQ7CkBAIC0yMjc3LDcgKzIzMDIsNyBAQCBleGVjX2V4ZWN1dGVfbWVzc2FnZShjb25zdCBj aGFyICpwb3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cykKIAkvKgogCSAqIEVtaXQgZHVyYXRpb24g bG9nZ2luZyBpZiBhcHByb3ByaWF0ZS4KIAkgKi8KLQlzd2l0Y2ggKGNoZWNrX2xvZ19kdXJhdGlv bihtc2VjX3N0ciwgd2FzX2xvZ2dlZCkpCisJc3dpdGNoIChjaGVja19sb2dfZHVyYXRpb24oJm1z ZWNzLCBtc2VjX3N0ciwgd2FzX2xvZ2dlZCkpCiAJewogCQljYXNlIDE6CiAJCQllcmVwb3J0KExP RywKQEAgLTIzMDAsNiArMjMyNSwyMiBAQCBleGVjX2V4ZWN1dGVfbWVzc2FnZShjb25zdCBjaGFy ICpwb3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cykKIAkJCWJyZWFrOwogCX0KIAorCWlmIChqaXRf ZW5hYmxlZCAmJiBqaXRfd2Fybl9hYm92ZV9mcmFjdGlvbiA+IDApCisJeworCQlpbnQ2NCBqaXRf dGltZSA9CisJCQlJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhwb3J0YWwtPnF1ZXJ5RGVzYy0+ZXN0 YXRlLT5lc19qaXQtPmluc3RyLmdlbmVyYXRpb25fY291bnRlcikgKworCQkJSU5TVFJfVElNRV9H RVRfTUlMTElTRUMocG9ydGFsLT5xdWVyeURlc2MtPmVzdGF0ZS0+ZXNfaml0LT5pbnN0ci5pbmxp bmluZ19jb3VudGVyKSArCisJCQlJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhwb3J0YWwtPnF1ZXJ5 RGVzYy0+ZXN0YXRlLT5lc19qaXQtPmluc3RyLm9wdGltaXphdGlvbl9jb3VudGVyKSArCisJCQlJ TlNUUl9USU1FX0dFVF9NSUxMSVNFQyhwb3J0YWwtPnF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19qaXQt Pmluc3RyLmVtaXNzaW9uX2NvdW50ZXIpOworCisJCWlmIChqaXRfdGltZSA+IG1zZWNzICogaml0 X3dhcm5fYWJvdmVfZnJhY3Rpb24pCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVy cm1zZygiSklUIHRvdGFsIHByb2Nlc3NpbmcgdGltZSB3YXMgJWxkIG1zIG9mICVkIG1zIiwKKwkJ CQkJCQlqaXRfdGltZSwgbXNlY3MpKSk7CisJCX0KKwl9CisKIAlpZiAoc2F2ZV9sb2dfc3RhdGVt ZW50X3N0YXRzKQogCQlTaG93VXNhZ2UoIkVYRUNVVEUgTUVTU0FHRSBTVEFUSVNUSUNTIik7CiAK QEAgLTIzNDYsNiArMjM4NywxMCBAQCBjaGVja19sb2dfc3RhdGVtZW50KExpc3QgKnN0bXRfbGlz dCkKICAqCQkxIGlmIGp1c3QgdGhlIGR1cmF0aW9uIHNob3VsZCBiZSBsb2dnZWQKICAqCQkyIGlm IGR1cmF0aW9uIGFuZCBxdWVyeSBkZXRhaWxzIHNob3VsZCBiZSBsb2dnZWQKICAqCisgKiBUaGUg bWlsbGlzZWNvbmQgcnVudGltZSBvZiB0aGUgcXVlcnkgaXMgc3RvcmVkIGluIG1zZWNzIGlmIGFu eSBsb2dnaW5nIHBhcmFtZXRlcgorICogdGhhdCByZXF1aXJlcyB0aGUgY2FsY3VsYXRpb24gb2Yg dGltZSBpcyBlbmFibGVkLCBldmVuIGlmIHRoZSByZXN1bHQgaXMgbm90IHRoYXQKKyAqIHRoZSBl bnRyeSBzaG91bGQgYmUgbG9nZ2VkLiBJbiBvdGhlciBjYXNlcywgaXQgaXMgc2V0IHRvIC0xLgor ICoKICAqIElmIGxvZ2dpbmcgaXMgbmVlZGVkLCB0aGUgZHVyYXRpb24gaW4gbXNlYyBpcyBmb3Jt YXR0ZWQgaW50byBtc2VjX3N0cltdLAogICogd2hpY2ggbXVzdCBiZSBhIDMyLWJ5dGUgYnVmZmVy LgogICoKQEAgLTIzNTMsMTQgKzIzOTgsMTMgQEAgY2hlY2tfbG9nX3N0YXRlbWVudChMaXN0ICpz dG10X2xpc3QpCiAgKiBlc3NlbnRpYWxseSBwcmV2ZW50cyAyIGZyb20gYmVpbmcgcmV0dXJuZWQp LgogICovCiBpbnQKLWNoZWNrX2xvZ19kdXJhdGlvbihjaGFyICptc2VjX3N0ciwgYm9vbCB3YXNf bG9nZ2VkKQorY2hlY2tfbG9nX2R1cmF0aW9uKGludCAqbXNlY3MsIGNoYXIgKm1zZWNfc3RyLCBi b29sIHdhc19sb2dnZWQpCiB7CiAJaWYgKGxvZ19kdXJhdGlvbiB8fCBsb2dfbWluX2R1cmF0aW9u X3NhbXBsZSA+PSAwIHx8Ci0JCWxvZ19taW5fZHVyYXRpb25fc3RhdGVtZW50ID49IDAgfHwgeGFj dF9pc19zYW1wbGVkKQorCWxvZ19taW5fZHVyYXRpb25fc3RhdGVtZW50ID49IDAgfHwgeGFjdF9p c19zYW1wbGVkIHx8IGppdF93YXJuX2Fib3ZlX2ZyYWN0aW9uID4gMCkKIAl7CiAJCWxvbmcJCXNl Y3M7CiAJCWludAkJCXVzZWNzOwotCQlpbnQJCQltc2VjczsKIAkJYm9vbAkJZXhjZWVkZWRfZHVy YXRpb247CiAJCWJvb2wJCWV4Y2VlZGVkX3NhbXBsZV9kdXJhdGlvbjsKIAkJYm9vbAkJaW5fc2Ft cGxlID0gZmFsc2U7CkBAIC0yMzY4LDcgKzI0MTIsNyBAQCBjaGVja19sb2dfZHVyYXRpb24oY2hh ciAqbXNlY19zdHIsIGJvb2wgd2FzX2xvZ2dlZCkKIAkJVGltZXN0YW1wRGlmZmVyZW5jZShHZXRD dXJyZW50U3RhdGVtZW50U3RhcnRUaW1lc3RhbXAoKSwKIAkJCQkJCQlHZXRDdXJyZW50VGltZXN0 YW1wKCksCiAJCQkJCQkJJnNlY3MsICZ1c2Vjcyk7Ci0JCW1zZWNzID0gdXNlY3MgLyAxMDAwOwor CQkqbXNlY3MgPSB1c2VjcyAvIDEwMDA7CiAKIAkJLyoKIAkJICogVGhpcyBvZGQtbG9va2luZyB0 ZXN0IGZvciBsb2dfbWluX2R1cmF0aW9uXyogYmVpbmcgZXhjZWVkZWQgaXMKQEAgLTIzNzgsMTIg KzI0MjIsMTIgQEAgY2hlY2tfbG9nX2R1cmF0aW9uKGNoYXIgKm1zZWNfc3RyLCBib29sIHdhc19s b2dnZWQpCiAJCWV4Y2VlZGVkX2R1cmF0aW9uID0gKGxvZ19taW5fZHVyYXRpb25fc3RhdGVtZW50 ID09IDAgfHwKIAkJCQkJCQkgKGxvZ19taW5fZHVyYXRpb25fc3RhdGVtZW50ID4gMCAmJgogCQkJ CQkJCSAgKHNlY3MgPiBsb2dfbWluX2R1cmF0aW9uX3N0YXRlbWVudCAvIDEwMDAgfHwKLQkJCQkJ CQkgICBzZWNzICogMTAwMCArIG1zZWNzID49IGxvZ19taW5fZHVyYXRpb25fc3RhdGVtZW50KSkp OworCQkJCQkJCSAgIHNlY3MgKiAxMDAwICsgKm1zZWNzID49IGxvZ19taW5fZHVyYXRpb25fc3Rh dGVtZW50KSkpOwogCiAJCWV4Y2VlZGVkX3NhbXBsZV9kdXJhdGlvbiA9IChsb2dfbWluX2R1cmF0 aW9uX3NhbXBsZSA9PSAwIHx8CiAJCQkJCQkJCQkobG9nX21pbl9kdXJhdGlvbl9zYW1wbGUgPiAw ICYmCiAJCQkJCQkJCQkgKHNlY3MgPiBsb2dfbWluX2R1cmF0aW9uX3NhbXBsZSAvIDEwMDAgfHwK LQkJCQkJCQkJCSAgc2VjcyAqIDEwMDAgKyBtc2VjcyA+PSBsb2dfbWluX2R1cmF0aW9uX3NhbXBs ZSkpKTsKKwkJCQkJCQkJCSAgc2VjcyAqIDEwMDAgKyAqbXNlY3MgPj0gbG9nX21pbl9kdXJhdGlv bl9zYW1wbGUpKSk7CiAKIAkJLyoKIAkJICogRG8gbm90IGxvZyBpZiBsb2dfc3RhdGVtZW50X3Nh bXBsZV9yYXRlID0gMC4gTG9nIGEgc2FtcGxlIGlmCkBAIC0yMzk4LDEzICsyNDQyLDE3IEBAIGNo ZWNrX2xvZ19kdXJhdGlvbihjaGFyICptc2VjX3N0ciwgYm9vbCB3YXNfbG9nZ2VkKQogCQlpZiAo ZXhjZWVkZWRfZHVyYXRpb24gfHwgaW5fc2FtcGxlIHx8IGxvZ19kdXJhdGlvbiB8fCB4YWN0X2lz X3NhbXBsZWQpCiAJCXsKIAkJCXNucHJpbnRmKG1zZWNfc3RyLCAzMiwgIiVsZC4lMDNkIiwKLQkJ CQkJIHNlY3MgKiAxMDAwICsgbXNlY3MsIHVzZWNzICUgMTAwMCk7CisJCQkJCSBzZWNzICogMTAw MCArICptc2VjcywgdXNlY3MgJSAxMDAwKTsKIAkJCWlmICgoZXhjZWVkZWRfZHVyYXRpb24gfHwg aW5fc2FtcGxlIHx8IHhhY3RfaXNfc2FtcGxlZCkgJiYgIXdhc19sb2dnZWQpCiAJCQkJcmV0dXJu IDI7CiAJCQllbHNlCiAJCQkJcmV0dXJuIDE7CiAJCX0KIAl9CisJZWxzZQorCXsKKwkJKm1zZWNz ID0gLTE7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA2ZDExZjlj NzFiLi5jZWZiMDVjNjUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTYwOCw2ICs2MDgsNyBAQCBp bnQJCQlsb2dfcGFyYW1ldGVyX21heF9sZW5ndGhfb25fZXJyb3IgPSAwOwogaW50CQkJbG9nX3Rl bXBfZmlsZXMgPSAtMTsKIGRvdWJsZQkJbG9nX3N0YXRlbWVudF9zYW1wbGVfcmF0ZSA9IDEuMDsK IGRvdWJsZQkJbG9nX3hhY3Rfc2FtcGxlX3JhdGUgPSAwOworZG91YmxlCQlqaXRfd2Fybl9hYm92 ZV9mcmFjdGlvbiA9IDA7CiBpbnQJCQl0cmFjZV9yZWNvdmVyeV9tZXNzYWdlcyA9IExPRzsKIGNo YXIJICAgKmJhY2t0cmFjZV9mdW5jdGlvbnM7CiBjaGFyCSAgICpiYWNrdHJhY2Vfc3ltYm9sX2xp c3Q7CkBAIC0zODczLDYgKzM4NzQsMTkgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfcmVhbCBDb25m aWd1cmVOYW1lc1JlYWxbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7Impp dF93YXJuX2Fib3ZlX2ZyYWN0aW9uIiwgUEdDX1VTRVJTRVQsIExPR0dJTkdfV0hFTiwKKwkJCWdl dHRleHRfbm9vcCgiU2V0cyB0aGUgZnJhY3Rpb24gb2YgcXVlcnkgdGltZSBzcGVudCBvbiBKSVQg YmVmb3JlIHdyaXRpbmcgIgorCQkJCQkJICJhIHdhcm5pbmcgdG8gdGhlIGxvZy4iKSwKKwkJCWdl dHRleHRfbm9vcCgiV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIgbG9nIGlmIG1vcmUgdGhh biB0aGlzICIKKwkJCQkJCSAiZnJhY3Rpb24gb2YgdGhlIHF1ZXJ5IHJ1bnRpbWUgaXMgc3BlbnQg b24gSklULiAiCisJCQkJCQkgIlplcm8gdHVybnMgb2ZmIHRoZSB3YXJuaW5nLiIpCisJCX0sCisJ CSZqaXRfd2Fybl9hYm92ZV9mcmFjdGlvbiwKKwkJMC4wLCAwLjAsIDEuMCwKKwkJTlVMTCwgTlVM TCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAl7CiAJCXtOVUxMLCAw LCAwLCBOVUxMLCBOVUxMfSwgTlVMTCwgMC4wLCAwLjAsIDAuMCwgTlVMTCwgTlVMTCwgTlVMTApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDRh MDk0YmIzOGIuLjE5Nzk1ZTUzOTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKQEAgLTQwNCw2ICs0MDQsOCBAQAogI2ppdF9vcHRpbWl6ZV9hYm92 ZV9jb3N0ID0gNTAwMDAwCSMgdXNlIGV4cGVuc2l2ZSBKSVQgb3B0aW1pemF0aW9ucyBpZgogCQkJ CQkjIHF1ZXJ5IGlzIG1vcmUgZXhwZW5zaXZlIHRoYW4gdGhpczsKIAkJCQkJIyAtMSBkaXNhYmxl cworI2ppdF93YXJuX2Fib3ZlX2ZyYWN0aW9uID0gMAkJIyB3YXJuIGlmIEpJVCBpcyBtb3JlIHRo YW4gdGhpcyBmcmFjdGlvbiBvZgorCQkJCQkjIHF1ZXJ5IHJ1bnRpbWUuIDAgZGlzYWJsZXMuCiAK ICMgLSBHZW5ldGljIFF1ZXJ5IE9wdGltaXplciAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2ppdC9qaXQuaCBiL3NyYy9pbmNsdWRlL2ppdC9qaXQuaAppbmRleCA3MDcxNzZkOWVkLi41OWIz N2Q2ZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9qaXQvaml0LmgKKysrIGIvc3JjL2luY2x1 ZGUvaml0L2ppdC5oCkBAIC04OSw2ICs4OSw3IEBAIGV4dGVybiBib29sIGppdF90dXBsZV9kZWZv cm1pbmc7CiBleHRlcm4gZG91YmxlIGppdF9hYm92ZV9jb3N0OwogZXh0ZXJuIGRvdWJsZSBqaXRf aW5saW5lX2Fib3ZlX2Nvc3Q7CiBleHRlcm4gZG91YmxlIGppdF9vcHRpbWl6ZV9hYm92ZV9jb3N0 OworZXh0ZXJuIGRvdWJsZSBqaXRfd2Fybl9hYm92ZV9mcmFjdGlvbjsKIAogCiBleHRlcm4gdm9p ZCBqaXRfcmVzZXRfYWZ0ZXJfZXJyb3Iodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90 Y29wL3Rjb3Bwcm90LmggYi9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKaW5kZXggOTIyOTFh NzUwZC4uM2YxMmY3ZmUyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5o CisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaApAQCAtODcsNyArODcsNyBAQCBleHRl cm4gdm9pZCBQb3N0Z3Jlc01haW4oY29uc3QgY2hhciAqZGJuYW1lLAogZXh0ZXJuIGxvbmcgZ2V0 X3N0YWNrX2RlcHRoX3JsaW1pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFJlc2V0VXNhZ2Uodm9pZCk7 CiBleHRlcm4gdm9pZCBTaG93VXNhZ2UoY29uc3QgY2hhciAqdGl0bGUpOwotZXh0ZXJuIGludAlj aGVja19sb2dfZHVyYXRpb24oY2hhciAqbXNlY19zdHIsIGJvb2wgd2FzX2xvZ2dlZCk7CitleHRl cm4gaW50CWNoZWNrX2xvZ19kdXJhdGlvbihpbnQgKm1zZWMsIGNoYXIgKm1zZWNfc3RyLCBib29s IHdhc19sb2dnZWQpOwogZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX29wdGlvbnMoaW50IGRlYnVnX2Zs YWcsCiAJCQkJCQkJICBHdWNDb250ZXh0IGNvbnRleHQsIEd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0 ZXJuIGJvb2wgc2V0X3BsYW5fZGlzYWJsaW5nX29wdGlvbnMoY29uc3QgY2hhciAqYXJnLAo= --0000000000000174ab05d99fc15c--