Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rtwMa-0011lE-TV for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Apr 2024 21:17:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rtwMZ-00CriP-90 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Apr 2024 21:17:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rtwMY-00CriH-I5 for pgsql-hackers@lists.postgresql.org; Mon, 08 Apr 2024 21:17:10 +0000 Received: from forward500c.mail.yandex.net ([2a02:6b8:c03:500:1:45:d181:d500]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rtwMS-001tGg-AF for pgsql-hackers@lists.postgresql.org; Mon, 08 Apr 2024 21:17:09 +0000 Received: from mail-nwsmtp-smtp-production-main-81.myt.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-81.myt.yp-c.yandex.net [IPv6:2a02:6b8:c12:3729:0:640:85f7:0]) by forward500c.mail.yandex.net (Yandex) with ESMTPS id 003E160E7E; Tue, 9 Apr 2024 00:16:59 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-81.myt.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id uGgjg90NmmI0-pF0RSETo; Tue, 09 Apr 2024 00:16:58 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1712611018; bh=g0laFLusoiuAvAH7ka6Y5ctwD9IK3MB3s2off4W//9g=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=Hnz1IqXJAEnsCIHv9EaAIiVA+SgjR3w5is5i2ZCpVX7vS3jpFs28fCdADcyCA2hXO ajpfVIsSv8iIsK4OUxbR8Y3cm/5z+nVYI2lIxQG2gEb/BBD7if2uJimKV1xIFxEz51 KIMNBPxLRxQF0jSBzqzjuX0jyZ2sao1FrGqsEMrc= Authentication-Results: mail-nwsmtp-smtp-production-main-81.myt.yp-c.yandex.net; dkim=pass header.i=@yandex.ru Content-Type: multipart/mixed; boundary="------------jpjub5Pp4CcdTMExwBnCF4sm" Message-ID: <13bd913f-94b6-43cf-b849-4d762e5297d8@yandex.ru> Date: Tue, 9 Apr 2024 00:16:56 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Parallel Bitmap Heap Scan reports per-worker stats in EXPLAIN ANALYZE To: Donghang Lin Cc: David Geier , Melanie Plageman , Tomas Vondra , Dilip Kumar , PostgreSQL Developers , hlinnaka@iki.fi References: Content-Language: en-US From: Alena Rybakina In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------jpjub5Pp4CcdTMExwBnCF4sm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi! Thank you for your work on this issue! Your patch required a little revision. I did this and attached the patch. Also, I think you should add some clarification to the comments about printing 'exact' and 'loosy' pages in show_hashagg_info function, which you get from planstate->stats, whereas previously it was output only from planstate. Perhaps it is enough to mention this in the comment to the commit. I mean this place: diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 926d70afaf..02251994c6 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -3467,26 +3467,57 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)  static void  show_tidbitmap_info(BitmapHeapScanState *planstate, ExplainState *es)  { +    Assert(es->analyze); +      if (es->format != EXPLAIN_FORMAT_TEXT)      {          ExplainPropertyInteger("Exact Heap Blocks", NULL, -                               planstate->exact_pages, es); +                               planstate->stats.exact_pages, es);          ExplainPropertyInteger("Lossy Heap Blocks", NULL, -                               planstate->lossy_pages, es); +                               planstate->stats.lossy_pages, es);      }      else      { -        if (planstate->exact_pages > 0 || planstate->lossy_pages > 0) +        if (planstate->stats.exact_pages > 0 || planstate->stats.lossy_pages > 0)          {              ExplainIndentText(es);              appendStringInfoString(es->str, "Heap Blocks:"); -            if (planstate->exact_pages > 0) -                appendStringInfo(es->str, " exact=%ld", planstate->exact_pages); -            if (planstate->lossy_pages > 0) -                appendStringInfo(es->str, " lossy=%ld", planstate->lossy_pages); +            if (planstate->stats.exact_pages > 0) +                appendStringInfo(es->str, " exact=%ld", planstate->stats.exact_pages); +            if (planstate->stats.lossy_pages > 0) +                appendStringInfo(es->str, " lossy=%ld", planstate->stats.lossy_pages);              appendStringInfoChar(es->str, '\n');          }      } + +    if (planstate->pstate != NULL) +    { +        for (int n = 0; n < planstate->sinstrument->num_workers; n++) +        { +            BitmapHeapScanInstrumentation *si = &planstate->sinstrument->sinstrument[n]; + +            if (si->exact_pages == 0 && si->lossy_pages == 0) +                continue; + +            if (es->workers_state) +                ExplainOpenWorker(n, es); + +            if (es->format == EXPLAIN_FORMAT_TEXT) +            { +                ExplainIndentText(es); +                appendStringInfo(es->str, "Heap Blocks: exact=%ld lossy=%ld\n", +                         si->exact_pages, si->lossy_pages); +            } +            else +            { +                ExplainPropertyInteger("Exact Heap Blocks", NULL, si->exact_pages, es); +                ExplainPropertyInteger("Lossy Heap Blocks", NULL, si->lossy_pages, es); +            } + +            if (es->workers_state) +                ExplainCloseWorker(n, es); +        } +    }  } I suggest some code refactoring (diff.diff.no-cfbot file) that allows you to improve your code. -- Regards, Alena Rybakina Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --------------jpjub5Pp4CcdTMExwBnCF4sm Content-Type: text/plain; charset=UTF-8; name="diff.diff.no-cfbot" Content-Disposition: attachment; filename="diff.diff.no-cfbot" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKaW5kZXggOTcz YmY1NjAyMmQuLmNhOGQ5NGJhMDlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQml0bWFwSGVhcHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl Qml0bWFwSGVhcHNjYW4uYwpAQCAtNjM0LDggKzYzNCw5IEBAIEV4ZWNFbmRCaXRtYXBIZWFw U2NhbihCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlKQogCSAqLwogCWlmIChub2RlLT5zaW5z dHJ1bWVudCAhPSBOVUxMICYmIElzUGFyYWxsZWxXb3JrZXIoKSkKIAl7CisJCUJpdG1hcEhl YXBTY2FuSW5zdHJ1bWVudGF0aW9uICpzaTsKIAkJQXNzZXJ0KFBhcmFsbGVsV29ya2VyTnVt YmVyIDw9IG5vZGUtPnNpbnN0cnVtZW50LT5udW1fd29ya2Vycyk7Ci0JCUJpdG1hcEhlYXBT Y2FuSW5zdHJ1bWVudGF0aW9uICpzaSA9ICZub2RlLT5zaW5zdHJ1bWVudC0+c2luc3RydW1l bnRbUGFyYWxsZWxXb3JrZXJOdW1iZXJdOworCQlzaSA9ICZub2RlLT5zaW5zdHJ1bWVudC0+ c2luc3RydW1lbnRbUGFyYWxsZWxXb3JrZXJOdW1iZXJdOwogCQlzaS0+ZXhhY3RfcGFnZXMg Kz0gbm9kZS0+c3RhdHMuZXhhY3RfcGFnZXM7CiAJCXNpLT5sb3NzeV9wYWdlcyArPSBub2Rl LT5zdGF0cy5sb3NzeV9wYWdlczsKIAl9CkBAIC04NjQsNyArODY1LDcgQEAgRXhlY0JpdG1h cEhlYXBJbml0aWFsaXplRFNNKEJpdG1hcEhlYXBTY2FuU3RhdGUgKm5vZGUsCiAKIAlwdHIg PSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgc2l6ZSk7CiAJcHN0YXRlID0gKFBhcmFs bGVsQml0bWFwSGVhcFN0YXRlICopIHB0cjsKLQlwdHIgKz0gTUFYQUxJR04oc2l6ZW9mKFBh cmFsbGVsQml0bWFwSGVhcFN0YXRlKSk7CisJcHRyICs9IHNpemU7CiAJaWYgKG5vZGUtPnNz LnBzLmluc3RydW1lbnQgJiYgcGN4dC0+bndvcmtlcnMgPiAwKQogCQlzaW5zdHJ1bWVudCA9 IChTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0aW9uICopIHB0cjsKIAo= --------------jpjub5Pp4CcdTMExwBnCF4sm Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Parallel-Bitmap-Heap-Scan-reports-per-worker-stats.patch" Content-Disposition: attachment; filename*0="v6-0001-Parallel-Bitmap-Heap-Scan-reports-per-worker-stats.p"; filename*1="atch" Content-Transfer-Encoding: base64 RnJvbSA4ZGM5Mzk3NDlhM2YwY2VhOWJhMzM3YzAyMGI5Y2NkNDc0ZTdjOGUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCA4IEFwciAyMDI0IDIzOjQxOjQxICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gUGFyYWxsZWwgQml0bWFwIEhlYXAgU2NhbiByZXBvcnRzIHBlci13b3Jr ZXIgc3RhdHMuCgpTaW1pbGFybHkgdG8gb3RoZXIgbm9kZXMgKGUuZy4gaGFzaCBqb2luLCBz b3J0LCBtZW1vaXplKSwKQml0bWFwIEhlYXAgU2NhbiBub3cgcmVwb3J0cyBwZXItd29ya2Vy IHN0YXRzIGluIHRoZSBFWFBMQUlOCkFOQUxZWkUgb3V0cHV0LiBQcmV2aW91c2x5IG9ubHkg dGhlIGhlYXAgYmxvY2tzIHN0YXRzIGZvciB0aGUKbGVhZGVyIHdlcmUgcmVwb3J0ZWQgd2hp Y2ggd2FzIGluY29tcGxldGUgaW4gcGFyYWxsZWwgc2NhbnMuCgpEaXNjdXNzaW9uOiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvYjNkODA5NjEtYzJlNS0z OGNjLTZhMzItNjE4ODZjZGY3NjZkJTQwZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgfCA0NSArKysrKysrKystLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgICAgfCAgMyArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYyB8IDk1ICsrKysrKysrKysrKysrKysrKysr LS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uaCB8ICAxICsK IHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwgMzMgKysrKysr Ky0KIDUgZmlsZXMgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAyYzVkOTgwZjcyOS4uMGJlZTYwYzRh OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM1ODQsMjYgKzM1ODQsNTcgQEAg c2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVz KQogc3RhdGljIHZvaWQKIHNob3dfdGlkYml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0 ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogeworCUFzc2VydChlcy0+YW5hbHl6 ZSk7CisKIAlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQogCXsKIAkJ RXhwbGFpblByb3BlcnR5SW50ZWdlcigiRXhhY3QgSGVhcCBCbG9ja3MiLCBOVUxMLAotCQkJ CQkJCSAgIHBsYW5zdGF0ZS0+ZXhhY3RfcGFnZXMsIGVzKTsKKwkJCQkJCQkgICBwbGFuc3Rh dGUtPnN0YXRzLmV4YWN0X3BhZ2VzLCBlcyk7CiAJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIo Ikxvc3N5IEhlYXAgQmxvY2tzIiwgTlVMTCwKLQkJCQkJCQkgICBwbGFuc3RhdGUtPmxvc3N5 X3BhZ2VzLCBlcyk7CisJCQkJCQkJICAgcGxhbnN0YXRlLT5zdGF0cy5sb3NzeV9wYWdlcywg ZXMpOwogCX0KIAllbHNlCiAJewotCQlpZiAocGxhbnN0YXRlLT5leGFjdF9wYWdlcyA+IDAg fHwgcGxhbnN0YXRlLT5sb3NzeV9wYWdlcyA+IDApCisJCWlmIChwbGFuc3RhdGUtPnN0YXRz LmV4YWN0X3BhZ2VzID4gMCB8fCBwbGFuc3RhdGUtPnN0YXRzLmxvc3N5X3BhZ2VzID4gMCkK IAkJewogCQkJRXhwbGFpbkluZGVudFRleHQoZXMpOwogCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhlcy0+c3RyLCAiSGVhcCBCbG9ja3M6Iik7Ci0JCQlpZiAocGxhbnN0YXRlLT5leGFj dF9wYWdlcyA+IDApCi0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiIGV4YWN0PSVs ZCIsIHBsYW5zdGF0ZS0+ZXhhY3RfcGFnZXMpOwotCQkJaWYgKHBsYW5zdGF0ZS0+bG9zc3lf cGFnZXMgPiAwKQotCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBsb3NzeT0lbGQi LCBwbGFuc3RhdGUtPmxvc3N5X3BhZ2VzKTsKKwkJCWlmIChwbGFuc3RhdGUtPnN0YXRzLmV4 YWN0X3BhZ2VzID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIgZXhhY3Q9 JWxkIiwgcGxhbnN0YXRlLT5zdGF0cy5leGFjdF9wYWdlcyk7CisJCQlpZiAocGxhbnN0YXRl LT5zdGF0cy5sb3NzeV9wYWdlcyA+IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry LCAiIGxvc3N5PSVsZCIsIHBsYW5zdGF0ZS0+c3RhdHMubG9zc3lfcGFnZXMpOwogCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CiAJCX0KIAl9CisKKwlpZiAocGxh bnN0YXRlLT5wc3RhdGUgIT0gTlVMTCkKKwl7CisJCWZvciAoaW50IG4gPSAwOyBuIDwgcGxh bnN0YXRlLT5zaW5zdHJ1bWVudC0+bnVtX3dvcmtlcnM7IG4rKykKKwkJeworCQkJQml0bWFw SGVhcFNjYW5JbnN0cnVtZW50YXRpb24gKnNpID0gJnBsYW5zdGF0ZS0+c2luc3RydW1lbnQt PnNpbnN0cnVtZW50W25dOworCisJCQlpZiAoc2ktPmV4YWN0X3BhZ2VzID09IDAgJiYgc2kt Pmxvc3N5X3BhZ2VzID09IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChlcy0+d29ya2Vy c19zdGF0ZSkKKwkJCQlFeHBsYWluT3BlbldvcmtlcihuLCBlcyk7CisKKwkJCWlmIChlcy0+ Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCQl7CisJCQkJRXhwbGFpbkluZGVu dFRleHQoZXMpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIkhlYXAgQmxvY2tz OiBleGFjdD0lbGQgbG9zc3k9JWxkXG4iLAorCQkJCQkJIHNpLT5leGFjdF9wYWdlcywgc2kt Pmxvc3N5X3BhZ2VzKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlFeHBsYWluUHJvcGVy dHlJbnRlZ2VyKCJFeGFjdCBIZWFwIEJsb2NrcyIsIE5VTEwsIHNpLT5leGFjdF9wYWdlcywg ZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkxvc3N5IEhlYXAgQmxvY2tzIiwg TlVMTCwgc2ktPmxvc3N5X3BhZ2VzLCBlcyk7CisJCQl9CisKKwkJCWlmIChlcy0+d29ya2Vy c19zdGF0ZSkKKwkJCQlFeHBsYWluQ2xvc2VXb3JrZXIobiwgZXMpOworCQl9CisJfQogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwppbmRleCA4YzUzZDE4MzRl OS4uYmZiMzQxOWVmYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBA IC0xMDc2LDYgKzEwNzYsOSBAQCBFeGVjUGFyYWxsZWxSZXRyaWV2ZUluc3RydW1lbnRhdGlv bihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJY2FzZSBUX01lbW9pemVTdGF0ZToKIAkJCUV4 ZWNNZW1vaXplUmV0cmlldmVJbnN0cnVtZW50YXRpb24oKE1lbW9pemVTdGF0ZSAqKSBwbGFu c3RhdGUpOwogCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBIZWFwU2NhblN0YXRlOgorCQkJ RXhlY0JpdG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbigoQml0bWFwSGVhcFNjYW5T dGF0ZSAqKSBwbGFuc3RhdGUpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsK IAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jCmluZGV4 IDZiNDhhNmQ4MzUwLi45NzNiZjU2MDIyZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJpdG1hcEhlYXBzY2FuLmMKQEAgLTIzNiw5ICsyMzYsOSBAQCBCaXRtYXBIZWFwTmV4 dChCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlKQogCQkJdmFsaWRfYmxvY2sgPSB0YWJsZV9z Y2FuX2JpdG1hcF9uZXh0X2Jsb2NrKHNjYW4sIHRibXJlcyk7CiAKIAkJCWlmICh0Ym1yZXMt Pm50dXBsZXMgPj0gMCkKLQkJCQlub2RlLT5leGFjdF9wYWdlcysrOworCQkJCW5vZGUtPnN0 YXRzLmV4YWN0X3BhZ2VzKys7CiAJCQllbHNlCi0JCQkJbm9kZS0+bG9zc3lfcGFnZXMrKzsK KwkJCQlub2RlLT5zdGF0cy5sb3NzeV9wYWdlcysrOwogCiAJCQlpZiAoIXZhbGlkX2Jsb2Nr KQogCQkJewpAQCAtNjI3LDYgKzYyNywxOSBAQCBFeGVjRW5kQml0bWFwSGVhcFNjYW4oQml0 bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSkKIHsKIAlUYWJsZVNjYW5EZXNjIHNjYW5EZXNjOwog CisJLyoKKwkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3Rh dGlzdGljcyBnYXRoZXJlZCBieSB0aGUKKwkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBt ZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCisJICogcHJv Y2VzcyB0byByZXBvcnQgaW4gRVhQTEFJTiBBTkFMWVpFLgorCSAqLworCWlmIChub2RlLT5z aW5zdHJ1bWVudCAhPSBOVUxMICYmIElzUGFyYWxsZWxXb3JrZXIoKSkKKwl7CisJCUFzc2Vy dChQYXJhbGxlbFdvcmtlck51bWJlciA8PSBub2RlLT5zaW5zdHJ1bWVudC0+bnVtX3dvcmtl cnMpOworCQlCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbiAqc2kgPSAmbm9kZS0+c2lu c3RydW1lbnQtPnNpbnN0cnVtZW50W1BhcmFsbGVsV29ya2VyTnVtYmVyXTsKKwkJc2ktPmV4 YWN0X3BhZ2VzICs9IG5vZGUtPnN0YXRzLmV4YWN0X3BhZ2VzOworCQlzaS0+bG9zc3lfcGFn ZXMgKz0gbm9kZS0+c3RhdHMubG9zc3lfcGFnZXM7CisJfQorCiAJLyoKIAkgKiBleHRyYWN0 IGluZm9ybWF0aW9uIGZyb20gdGhlIG5vZGUKIAkgKi8KQEAgLTY5NCw4ICs3MDcsOCBAQCBF eGVjSW5pdEJpdG1hcEhlYXBTY2FuKEJpdG1hcEhlYXBTY2FuICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAlzY2Fuc3RhdGUtPnRibWl0ZXJhdG9yID0gTlVMTDsKIAlz Y2Fuc3RhdGUtPnRibXJlcyA9IE5VTEw7CiAJc2NhbnN0YXRlLT5wdm1idWZmZXIgPSBJbnZh bGlkQnVmZmVyOwotCXNjYW5zdGF0ZS0+ZXhhY3RfcGFnZXMgPSAwOwotCXNjYW5zdGF0ZS0+ bG9zc3lfcGFnZXMgPSAwOworCXNjYW5zdGF0ZS0+c3RhdHMuZXhhY3RfcGFnZXMgPSAwOwor CXNjYW5zdGF0ZS0+c3RhdHMubG9zc3lfcGFnZXMgPSAwOwogCXNjYW5zdGF0ZS0+cHJlZmV0 Y2hfaXRlcmF0b3IgPSBOVUxMOwogCXNjYW5zdGF0ZS0+cHJlZmV0Y2hfcGFnZXMgPSAwOwog CXNjYW5zdGF0ZS0+cHJlZmV0Y2hfdGFyZ2V0ID0gMDsKQEAgLTgwMyw3ICs4MTYsMjIgQEAg dm9pZAogRXhlY0JpdG1hcEhlYXBFc3RpbWF0ZShCaXRtYXBIZWFwU2NhblN0YXRlICpub2Rl LAogCQkJCQkgICBQYXJhbGxlbENvbnRleHQgKnBjeHQpCiB7Ci0Jc2htX3RvY19lc3RpbWF0 ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBzaXplb2YoUGFyYWxsZWxCaXRtYXBIZWFwU3Rh dGUpKTsKKwlTaXplCQlzaXplOworCisJLyoKKwkgKiBXZSBzdG9yZSBQYXJhbGxlbEJpdG1h cEhlYXBTdGF0ZSBmb2xsb3dlZCBieQorCSAqIFNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50 YXRpb25JbmZvIGluIHRoZSBzYW1lIHNobWVtIGNodW5rLgorCSAqLworCXNpemUgPSBNQVhB TElHTihzaXplb2YoUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUpKTsKKworCS8qIGRvbid0IG5l ZWQgdGhpcyBpZiBub3QgaW5zdHJ1bWVudGluZyBvciBubyB3b3JrZXJzICovCisJaWYgKG5v ZGUtPnNzLnBzLmluc3RydW1lbnQgJiYgcGN4dC0+bndvcmtlcnMgPiAwKQorCXsKKwkJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9mKFNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50 YXRpb24sIHNpbnN0cnVtZW50KSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZShwY3h0LT5ud29ya2Vycywgc2l6ZW9mKEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9u KSkpOworCX0KKworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwg c2l6ZSk7CiAJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwog fQogCkBAIC04MTgsMTMgKzg0NiwyNyBAQCBFeGVjQml0bWFwSGVhcEluaXRpYWxpemVEU00o Qml0bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQlQYXJhbGxlbENvbnRleHQgKnBj eHQpCiB7CiAJUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKnBzdGF0ZTsKKwlTaGFyZWRCaXRt YXBIZWFwSW5zdHJ1bWVudGF0aW9uICpzaW5zdHJ1bWVudCA9IE5VTEw7CiAJZHNhX2FyZWEg ICAqZHNhID0gbm9kZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2RzYTsKKwljaGFyCSAgICpw dHI7CisJU2l6ZQkJc2l6ZTsKIAogCS8qIElmIHRoZXJlJ3Mgbm8gRFNBLCB0aGVyZSBhcmUg bm8gd29ya2VyczsgaW5pdGlhbGl6ZSBub3RoaW5nLiAqLwogCWlmIChkc2EgPT0gTlVMTCkK IAkJcmV0dXJuOwogCi0JcHN0YXRlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHNp emVvZihQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSkpOworCXNpemUgPSBNQVhBTElHTihzaXpl b2YoUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUpKTsKKwlpZiAobm9kZS0+c3MucHMuaW5zdHJ1 bWVudCAmJiBwY3h0LT5ud29ya2VycyA+IDApCisJeworCQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgb2Zmc2V0b2YoU2hhcmVkQml0bWFwSGVhcEluc3RydW1lbnRhdGlvbiwgc2luc3RydW1l bnQpKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHBjeHQtPm53b3JrZXJz LCBzaXplb2YoQml0bWFwSGVhcFNjYW5JbnN0cnVtZW50YXRpb24pKSk7CisJfQorCisJcHRy ID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHNpemUpOworCXBzdGF0ZSA9IChQYXJh bGxlbEJpdG1hcEhlYXBTdGF0ZSAqKSBwdHI7CisJcHRyICs9IE1BWEFMSUdOKHNpemVvZihQ YXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSkpOworCWlmIChub2RlLT5zcy5wcy5pbnN0cnVtZW50 ICYmIHBjeHQtPm53b3JrZXJzID4gMCkKKwkJc2luc3RydW1lbnQgPSAoU2hhcmVkQml0bWFw SGVhcEluc3RydW1lbnRhdGlvbiAqKSBwdHI7CiAKIAlwc3RhdGUtPnRibWl0ZXJhdG9yID0g MDsKIAlwc3RhdGUtPnByZWZldGNoX2l0ZXJhdG9yID0gMDsKQEAgLTgzNyw4ICs4NzksMTYg QEAgRXhlY0JpdG1hcEhlYXBJbml0aWFsaXplRFNNKEJpdG1hcEhlYXBTY2FuU3RhdGUgKm5v ZGUsCiAKIAlDb25kaXRpb25WYXJpYWJsZUluaXQoJnBzdGF0ZS0+Y3YpOwogCisJLyogZW5z dXJlIGFueSB1bmZpbGxlZCBzbG90cyB3aWxsIGNvbnRhaW4gemVyb2VzICovCisJaWYgKHNp bnN0cnVtZW50KQorCXsKKwkJc2luc3RydW1lbnQtPm51bV93b3JrZXJzID0gcGN4dC0+bndv cmtlcnM7CisJCW1lbXNldChzaW5zdHJ1bWVudC0+c2luc3RydW1lbnQsIDAsIHBjeHQtPm53 b3JrZXJzICogc2l6ZW9mKEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9uKSk7CisJfQor CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIHBzdGF0ZSk7CiAJbm9kZS0+cHN0YXRlID0gcHN0YXRlOworCW5vZGUtPnNpbnN0 cnVtZW50ID0gc2luc3RydW1lbnQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg4MCwxMCAr OTMwLDM3IEBAIHZvaWQKIEV4ZWNCaXRtYXBIZWFwSW5pdGlhbGl6ZVdvcmtlcihCaXRtYXBI ZWFwU2NhblN0YXRlICpub2RlLAogCQkJCQkJCSAgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAq cHdjeHQpCiB7Ci0JUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKnBzdGF0ZTsKKwljaGFyCSAg ICpwdHI7CiAKIAlBc3NlcnQobm9kZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2RzYSAhPSBO VUxMKTsKIAotCXBzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnNz LnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwotCW5vZGUtPnBzdGF0ZSA9IHBzdGF0 ZTsKKwlwdHIgPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFu LT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKKworCW5vZGUtPnBzdGF0ZSA9IChQYXJhbGxlbEJp dG1hcEhlYXBTdGF0ZSAqKSBwdHI7CisJcHRyICs9IE1BWEFMSUdOKHNpemVvZihQYXJhbGxl bEJpdG1hcEhlYXBTdGF0ZSkpOworCisJaWYgKG5vZGUtPnNzLnBzLmluc3RydW1lbnQpCisJ CW5vZGUtPnNpbnN0cnVtZW50ID0gKFNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50YXRpb24g KikgcHRyOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY0JpdG1hcEhlYXBSZXRyaWV2 ZUluc3RydW1lbnRhdGlvbgorICoKKyAqCQlUcmFuc2ZlciBiaXRtYXAgaGVhcCBzY2FuIHN0 YXRpc3RpY3MgZnJvbSBEU00gdG8gcHJpdmF0ZSBtZW1vcnkuCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KK3ZvaWQKK0V4ZWNCaXRtYXBIZWFwUmV0cmlldmVJbnN0cnVtZW50YXRpb24oQml0bWFw SGVhcFNjYW5TdGF0ZSAqbm9kZSkKK3sKKwlTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0 aW9uICpzaW5zdHJ1bWVudCA9IG5vZGUtPnNpbnN0cnVtZW50OworCVNpemUJCXNpemU7CisK KwlpZiAoc2luc3RydW1lbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2l6ZSA9IG9mZnNl dG9mKFNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50YXRpb24sIHNpbnN0cnVtZW50KQorCQkr IHNpbnN0cnVtZW50LT5udW1fd29ya2VycyAqIHNpemVvZihCaXRtYXBIZWFwU2Nhbkluc3Ry dW1lbnRhdGlvbik7CisKKwlub2RlLT5zaW5zdHJ1bWVudCA9IHBhbGxvYyhzaXplKTsKKwlt ZW1jcHkobm9kZS0+c2luc3RydW1lbnQsIHNpbnN0cnVtZW50LCBzaXplKTsKIH0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmgKaW5kZXggZWEwMDNhOWNh YWUuLjQ0NmE2NjQ1OTBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2Rl Qml0bWFwSGVhcHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQml0bWFw SGVhcHNjYW4uaApAQCAtMjgsNSArMjgsNiBAQCBleHRlcm4gdm9pZCBFeGVjQml0bWFwSGVh cFJlSW5pdGlhbGl6ZURTTShCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkJ CSAgUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIEV4ZWNCaXRtYXBIZWFw SW5pdGlhbGl6ZVdvcmtlcihCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkJ CSAgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpOworZXh0ZXJuIHZvaWQgRXhlY0Jp dG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbihCaXRtYXBIZWFwU2NhblN0YXRlICpu b2RlKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVCSVRNQVBIRUFQU0NBTl9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGZhMmY3MGI3YTQ4Li4wYWMzMzA2ZDc2YSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3NDQsNiArMTc0NCwxMiBAQCB0eXBlZGVmIHN0cnVj dCBCaXRtYXBJbmRleFNjYW5TdGF0ZQogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqYmlz c19TY2FuRGVzYzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKK3R5cGVkZWYgc3RydWN0 IEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9uCit7CisJbG9uZyBsb3NzeV9wYWdlczsK Kwlsb25nIGV4YWN0X3BhZ2VzOworfSBCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbjsK KwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIFNoYXJlZEJpdG1hcFN0YXRlIGluZm9ybWF0 aW9uCiAgKgpAQCAtMTc4Nyw2ICsxNzkzLDIwIEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVs Qml0bWFwSGVhcFN0YXRlCiAJQ29uZGl0aW9uVmFyaWFibGUgY3Y7CiB9IFBhcmFsbGVsQml0 bWFwSGVhcFN0YXRlOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkgSW5zdHJ1bWVudGF0 aW9uIGRhdGEgZm9yIGEgcGFyYWxsZWwgYml0bWFwIGhlYXAgc2Nhbi4KKyAqCisgKiBEdXJp bmcgYSBwYXJhbGxlbCBiaXRtYXAgaGVhcCBzY2FuLCB0aGlzIGxpdmVzIGluIHNoYXJlZCBt ZW1vcnkuICBBdCB0aGUKKyAqIGVuZCwgZWFjaCB3b3JrZXIgY29waWVzIHRoZWlyIG93biBz dGF0cyB0byB0aGUgcmlnaHQgc2xvdC4gIEZpbmFsbHksIHRoZQorICogbGVhZGVyIGNvcGll cyB0aGUgZGF0YSB0byBpdHMgbG9jYWwgbWVtb3J5CisgICogLS0tLS0tLS0tLS0tLS0tLQor ICovCit0eXBlZGVmIHN0cnVjdCBTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0aW9uCit7 CisJaW50CQkJbnVtX3dvcmtlcnM7CisJQml0bWFwSGVhcFNjYW5JbnN0cnVtZW50YXRpb24g c2luc3RydW1lbnRbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gU2hhcmVkQml0bWFwSGVh cEluc3RydW1lbnRhdGlvbjsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIEJpdG1hcEhl YXBTY2FuU3RhdGUgaW5mb3JtYXRpb24KICAqCkBAIC0xODE1LDggKzE4MzUsNiBAQCB0eXBl ZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhblN0YXRlCiAJVEJNSXRlcmF0b3IgKnRibWl0ZXJh dG9yOwogCVRCTUl0ZXJhdGVSZXN1bHQgKnRibXJlczsKIAlCdWZmZXIJCXB2bWJ1ZmZlcjsK LQlsb25nCQlleGFjdF9wYWdlczsKLQlsb25nCQlsb3NzeV9wYWdlczsKIAlUQk1JdGVyYXRv ciAqcHJlZmV0Y2hfaXRlcmF0b3I7CiAJaW50CQkJcHJlZmV0Y2hfcGFnZXM7CiAJaW50CQkJ cHJlZmV0Y2hfdGFyZ2V0OwpAQCAtMTgyNSw2ICsxODQzLDE3IEBAIHR5cGVkZWYgc3RydWN0 IEJpdG1hcEhlYXBTY2FuU3RhdGUKIAlUQk1TaGFyZWRJdGVyYXRvciAqc2hhcmVkX3RibWl0 ZXJhdG9yOwogCVRCTVNoYXJlZEl0ZXJhdG9yICpzaGFyZWRfcHJlZmV0Y2hfaXRlcmF0b3I7 CiAJUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKnBzdGF0ZTsKKworCS8qCisJICogSW4gYSBw YXJhbGxlbGl6ZWQgYml0bWFwIGhlYXAgc2NhbiwgZWFjaCB3b3JrZXIgc2V0cyB0aGVpcgor CSAqIGluc3RydW1lbnRhdG9uIGRhdGEgaW4gcHN0YXRlLT5zaW5zdHJ1bWVudCBhdCB0aGUg ZW5kLiAgVGhlIGxlYWRlcgorCSAqIGNvcGllcyB0aGUgc2hhcmVkLW1lbW9yeSBpbmZvIGJh Y2sgdG8gbG9jYWwgc3RvcmFnZSBiZWZvcmUgRFNNCisJICogc2h1dGRvd24sIGFuZCBzdG9y ZXMgaXQgaGVyZSBpbiAnaW5zdHJ1bWVudCcuICBJdCByZW1haW5zIE5VTEwgaW4KKwkgKiB3 b3JrZXJzIGFuZCBpbiBub24tcGFyYWxsZWwgc2NhbnMuCisJICovCisJU2hhcmVkQml0bWFw SGVhcEluc3RydW1lbnRhdGlvbiAqc2luc3RydW1lbnQ7CisKKwlCaXRtYXBIZWFwU2Nhbklu c3RydW1lbnRhdGlvbiBzdGF0czsKIH0gQml0bWFwSGVhcFNjYW5TdGF0ZTsKIAogLyogLS0t LS0tLS0tLS0tLS0tLQotLSAKMi4zNC4xCgo= --------------jpjub5Pp4CcdTMExwBnCF4sm--