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 1pImr4-00080W-8u for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 08:34:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pImr2-0003Sv-29 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 08:34:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pImr1-0003Sl-Ky for pgsql-hackers@lists.postgresql.org; Fri, 20 Jan 2023 08:34:31 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pImqz-0007Ui-MA for pgsql-hackers@lists.postgresql.org; Fri, 20 Jan 2023 08:34:31 +0000 Received: by mail-ed1-x52c.google.com with SMTP id g11so366253eda.12 for ; Fri, 20 Jan 2023 00:34:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:content-language:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=3fiomKpaYnZQwMIsDdMrVtkyM/lLDEAek6BvukErpr0=; b=YIXC/grclX/AcgzcMMvJu+0eniE1myXlEXZl9ZS6q+9TFFTRFTpv6KpSOf6OiP66ER /B0Kazm2AObnO3HQOYutfGJNFIhngfspgAXV30TcI610rYXHelY7szGaz4BnWfV+5U7T /sWPdQC3+v8VZCRGEEsgF1NUW3dEMJ4Avz36wPQG47lwtXE9nGYHy+5SHwFSH/L3cMJt UHf8X2rknZDBDzXaSRNusuvgletZv+vdWtp9i7GSw0p3eofUMPKmuJf6j32641VrFgtG ODp+bw/0U1lbrGC4j902KE/mFqoaU9vW/PkeBnHwTIZBjZXWowvnqcjXnOditD0jO8D4 VXog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:content-language:subject:from:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3fiomKpaYnZQwMIsDdMrVtkyM/lLDEAek6BvukErpr0=; b=ZI6PbMuBFMtJXIQgV/1hBKMswc8YhNbeyPdZn/dToxnwUdgB+wjKuLyUWoLbrLC7uN JJhakNvohHya1zGCH8wS7fTzd8FzC6jM03d5hHUY14eVh+KS5PzwWHZygOjc8Vi3AlGq X9JWhl+Lk2jwPMINIbdT482N80dgtVu4qJMM+GH6hV8TL8eJ5W4y8cXFnRovVzU5GPmC f3b1GCR5NRjyi1jGu8QZx9s71W1RnBIcbGFgnihgLxqQT2uoDXZZXnS/+1rTamHCAP3c pIJ0FCd1CUoZesWN7Gv9Que7LkfaaLfqBS8C54yU0lgzRJqffZKZ5au8cRFKZCSpmyyp oWcg== X-Gm-Message-State: AFqh2krDMQFQ8DhhCDoG5+8VyVhYb7AkaO7195hZkccgwN9Ao74Hp6LO BHETZKEfkzi5XltKr0VBCifje5ipoHEl2g== X-Google-Smtp-Source: AMrXdXt78fbgysShTVnwnb8IVkWWcDnfEc3Jaae/0TqHcVj0Esm/6NHj6SwrBAti0bBTLT+JyT/egw== X-Received: by 2002:a05:6402:5110:b0:49d:fff2:d4d7 with SMTP id m16-20020a056402511000b0049dfff2d4d7mr19082973edd.30.1674203668142; Fri, 20 Jan 2023 00:34:28 -0800 (PST) Received: from [172.16.209.129] ([147.161.235.10]) by smtp.gmail.com with ESMTPSA id dk1-20020a0564021d8100b0049be07c9ff5sm9737468edb.4.2023.01.20.00.34.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 20 Jan 2023 00:34:27 -0800 (PST) Content-Type: multipart/mixed; boundary="------------H6rtGvvsKlswO7bzkr5KsLou" Message-ID: Date: Fri, 20 Jan 2023 09:34:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 From: David Geier Subject: Parallel Bitmap Heap Scan reports per-worker stats in EXPLAIN ANALYZE Content-Language: en-US To: PostgreSQL Developers 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. --------------H6rtGvvsKlswO7bzkr5KsLou Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi hackers, EXPLAIN ANALYZE for parallel Bitmap Heap Scans currently only reports the number of heap blocks processed by the leader. It's missing the per-worker stats. The attached patch adds that functionality in the spirit of e.g. Sort or Memoize. Here is a simple test case and the EXPLAIN ANALYZE output with and without the patch: create table foo(col0 int, col1 int); insert into foo select generate_series(1, 1000, 0.001), generate_series(1000, 2000, 0.001); create index idx0 on foo(col0); create index idx1 on foo(col1); set parallel_tuple_cost = 0; set parallel_setup_cost = 0; explain (analyze, costs off, timing off) select * from foo where col0 > 900 or col1 = 1; With the patch:  Gather (actual rows=99501 loops=1)    Workers Planned: 2    Workers Launched: 2    ->  Parallel Bitmap Heap Scan on foo (actual rows=33167 loops=3)          Recheck Cond: ((col0 > 900) OR (col1 = 1))          Heap Blocks: exact=98          Worker 0:  Heap Blocks: exact=171 lossy=0          Worker 1:  Heap Blocks: exact=172 lossy=0          ->  BitmapOr (actual rows=0 loops=1)                ->  Bitmap Index Scan on idx0 (actual rows=99501 loops=1)                      Index Cond: (col0 > 900)                ->  Bitmap Index Scan on idx1 (actual rows=0 loops=1)                      Index Cond: (col1 = 1) Without the patch:  Gather (actual rows=99501 loops=1)    Workers Planned: 2    Workers Launched: 2    ->  Parallel Bitmap Heap Scan on foo (actual rows=33167 loops=3)          Recheck Cond: ((col0 > 900) OR (col1 = 1))          Heap Blocks: exact=91          ->  BitmapOr (actual rows=0 loops=1)                ->  Bitmap Index Scan on idx0 (actual rows=99501 loops=1)                      Index Cond: (col0 > 900)                ->  Bitmap Index Scan on idx1 (actual rows=0 loops=1)                      Index Cond: (col1 = 1) So in total the parallel Bitmap Heap Scan actually processed 441 heap blocks instead of just 91. Now two variable length arrays (VLA) would be needed, one for the snapshot and one for the stats. As this obviously doesn't work, I now use a single, big VLA and added functions to retrieve pointers to the respective fields. I'm using MAXALIGN() to make sure the latter field is aligned properly. Am I doing this correctly? I'm not entirely sure around alignment conventions and requirements of other platforms. I couldn't find existing tests that exercise the EXPLAIN ANALYZE output of specific nodes. I could only find a few basic smoke tests for EXPLAIN ANALYZE with parallel nodes in parallel_select.sql. Do we want tests for the changed functionality? If so I could right away also add tests for EXPLAIN ANALYZE including other parallel nodes. Thank you for your feedback. -- David Geier (ServiceNow) --------------H6rtGvvsKlswO7bzkr5KsLou Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Parallel-Bitmap-Heap-Scan-reports-per-worker-stat.patch" Content-Disposition: attachment; filename*0="v1-0001-Parallel-Bitmap-Heap-Scan-reports-per-worker-stat.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiMmM4NGZiMTZlOTUyMWQ2Y2ZhZGIwYzA2OWUyN2EyMTNlOGU4NDcxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCA4IE5vdiAyMDIyIDE5OjQwOjMxICswMTAwClN1YmplY3Q6IFtQQVRD SCB2MV0gUGFyYWxsZWwgQml0bWFwIEhlYXAgU2NhbiByZXBvcnRzIHBlci13b3JrZXIgc3Rh dHMKClNpbWlsYXJseSB0byBvdGhlciBub2RlcyAoZS5nLiBoYXNoIGpvaW4sIHNvcnQsIG1l bW9pemUpLApCaXRtYXAgSGVhcCBTY2FuIG5vdyByZXBvcnRzIHBlci13b3JrZXIgc3RhdHMg aW4gdGhlIEVYUExBSU4KQU5BTFlaRSBvdXRwdXQuIFByZXZpb3VzbHkgb25seSB0aGUgaGVh cCBibG9ja3Mgc3RhdHMgZm9yIHRoZQpsZWFkZXIgd2VyZSByZXBvcnRlZCB3aGljaCB3YXMg aW5jb21wbGV0ZSBpbiBwYXJhbGxlbCBzY2Fucy4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICB8IDQ2ICsrKysrKysrKystLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgICAgfCAgMyArCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYyB8IDg4ICsrKysrKysrKysrKysrKysrKystLS0t CiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uaCB8ICAxICsKIHNy Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwgMjMgKysrKystCiA1 IGZpbGVzIGNoYW5nZWQsIDEzOCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggNTIxMmE2NGIxZS4uZDUzMmZjNGE4NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzM5NiwyNiArMzM5Niw1OCBAQCBzaG93X2hh c2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiBzdGF0 aWMgdm9pZAogc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFu c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB7CisJQXNzZXJ0KGVzLT5hbmFseXplKTsKKwog CWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5fRk9STUFUX1RFWFQpCiAJewogCQlFeHBsYWlu UHJvcGVydHlJbnRlZ2VyKCJFeGFjdCBIZWFwIEJsb2NrcyIsIE5VTEwsCi0JCQkJCQkJICAg cGxhbnN0YXRlLT5leGFjdF9wYWdlcywgZXMpOworCQkJCQkJCSAgIHBsYW5zdGF0ZS0+c3Rh dHMuZXhhY3RfcGFnZXMsIGVzKTsKIAkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTG9zc3kg SGVhcCBCbG9ja3MiLCBOVUxMLAotCQkJCQkJCSAgIHBsYW5zdGF0ZS0+bG9zc3lfcGFnZXMs IGVzKTsKKwkJCQkJCQkgICBwbGFuc3RhdGUtPnN0YXRzLmxvc3N5X3BhZ2VzLCBlcyk7CiAJ fQogCWVsc2UKIAl7Ci0JCWlmIChwbGFuc3RhdGUtPmV4YWN0X3BhZ2VzID4gMCB8fCBwbGFu c3RhdGUtPmxvc3N5X3BhZ2VzID4gMCkKKwkJaWYgKHBsYW5zdGF0ZS0+c3RhdHMuZXhhY3Rf cGFnZXMgPiAwIHx8IHBsYW5zdGF0ZS0+c3RhdHMubG9zc3lfcGFnZXMgPiAwKQogCQl7CiAJ CQlFeHBsYWluSW5kZW50VGV4dChlcyk7CiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVz LT5zdHIsICJIZWFwIEJsb2NrczoiKTsKLQkJCWlmIChwbGFuc3RhdGUtPmV4YWN0X3BhZ2Vz ID4gMCkKLQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIgZXhhY3Q9JWxkIiwgcGxh bnN0YXRlLT5leGFjdF9wYWdlcyk7Ci0JCQlpZiAocGxhbnN0YXRlLT5sb3NzeV9wYWdlcyA+ IDApCi0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiIGxvc3N5PSVsZCIsIHBsYW5z dGF0ZS0+bG9zc3lfcGFnZXMpOworCQkJaWYgKHBsYW5zdGF0ZS0+c3RhdHMuZXhhY3RfcGFn ZXMgPiAwKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBleGFjdD0lbGQiLCBw bGFuc3RhdGUtPnN0YXRzLmV4YWN0X3BhZ2VzKTsKKwkJCWlmIChwbGFuc3RhdGUtPnN0YXRz Lmxvc3N5X3BhZ2VzID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIgbG9z c3k9JWxkIiwgcGxhbnN0YXRlLT5zdGF0cy5sb3NzeV9wYWdlcyk7CiAJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihlcy0+c3RyLCAnXG4nKTsKIAkJfQogCX0KKworCWlmIChwbGFuc3RhdGUt PnNoYXJlZF9pbmZvICE9IE5VTEwpCisJeworCQlmb3IgKGludCBuID0gMDsgbiA8IHBsYW5z dGF0ZS0+c2hhcmVkX2luZm8tPm51bV93b3JrZXJzOyBuKyspCisJCXsKKwkJCUJpdG1hcEhl YXBTY2FuSW5zdHJ1bWVudGF0aW9uICpzaSA9ICZwbGFuc3RhdGUtPnNoYXJlZF9pbmZvLT5z aW5zdHJ1bWVudFtuXTsKKworCQkJaWYgKHNpLT5leGFjdF9wYWdlcyA9PSAwICYmIHNpLT5s b3NzeV9wYWdlcyA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZXMtPndvcmtlcnNf c3RhdGUpCisJCQkJRXhwbGFpbk9wZW5Xb3JrZXIobiwgZXMpOworCisJCQlpZiAoZXMtPmZv cm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCUV4cGxhaW5JbmRlbnRU ZXh0KGVzKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsCisJCQkJCQkgIkhlYXAg QmxvY2tzOiBleGFjdD0iVUlOVDY0X0ZPUk1BVCIgbG9zc3k9IiBJTlQ2NF9GT1JNQVQiXG4i LAorCQkJCQkJIHNpLT5leGFjdF9wYWdlcywgc2ktPmxvc3N5X3BhZ2VzKTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJFeGFjdCBIZWFwIEJs b2NrcyIsIE5VTEwsIHNpLT5leGFjdF9wYWdlcywgZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0 eUludGVnZXIoIkxvc3N5IEhlYXAgQmxvY2tzIiwgTlVMTCwgc2ktPmxvc3N5X3BhZ2VzLCBl cyk7CisJCQl9CisKKwkJCWlmIChlcy0+d29ya2Vyc19zdGF0ZSkKKwkJCQlFeHBsYWluQ2xv c2VXb3JrZXIobiwgZXMpOworCQl9CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUGFyYWxsZWwuYwppbmRleCBhYTNmMjgzNDUzLi43M2VmNGYwYzBmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwpAQCAtMTA3Miw2ICsxMDcyLDkgQEAgRXhlY1Bh cmFsbGVsUmV0cmlldmVJbnN0cnVtZW50YXRpb24oUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJ CWNhc2UgVF9NZW1vaXplU3RhdGU6CiAJCQlFeGVjTWVtb2l6ZVJldHJpZXZlSW5zdHJ1bWVu dGF0aW9uKChNZW1vaXplU3RhdGUgKikgcGxhbnN0YXRlKTsKIAkJCWJyZWFrOworCQljYXNl IFRfQml0bWFwSGVhcFNjYW5TdGF0ZToKKwkJCUV4ZWNCaXRtYXBIZWFwUmV0cmlldmVJbnN0 cnVtZW50YXRpb24oKEJpdG1hcEhlYXBTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQml0bWFwSGVhcHNjYW4uYwppbmRleCBmMzVkZjBiOGJmLi42ZDM2ZTc5MjJiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYwpAQCAtMjM5 LDkgKzIzOSw5IEBAIEJpdG1hcEhlYXBOZXh0KEJpdG1hcEhlYXBTY2FuU3RhdGUgKm5vZGUp CiAJCQl9CiAKIAkJCWlmICh0Ym1yZXMtPm50dXBsZXMgPj0gMCkKLQkJCQlub2RlLT5leGFj dF9wYWdlcysrOworCQkJCW5vZGUtPnN0YXRzLmV4YWN0X3BhZ2VzKys7CiAJCQllbHNlCi0J CQkJbm9kZS0+bG9zc3lfcGFnZXMrKzsKKwkJCQlub2RlLT5zdGF0cy5sb3NzeV9wYWdlcysr OwogCiAJCQkvKiBBZGp1c3QgdGhlIHByZWZldGNoIHRhcmdldCAqLwogCQkJQml0bWFwQWRq dXN0UHJlZmV0Y2hUYXJnZXQobm9kZSk7CkBAIC02NDEsNiArNjQxLDIyIEBAIEV4ZWNSZVNj YW5CaXRtYXBIZWFwU2NhbihCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlKQogCQlFeGVjUmVT Y2FuKG91dGVyUGxhbik7CiB9CiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlv bnMgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlIGxlbmd0aCBzbmFwc2hvdCBhbmQg c3RhdHMgYXJyYXkgc3RvcmVkCisgKiBpbiBzaGFyZWQgbWVtb3J5LiBBcyB0aGVyZSBhcmUg dHdvIHdlIGNhbm5vdCB1c2UgdmFyaWFibGUgbGVuZ3RoIGFycmF5cyBmb3IgYm90aCBvZiB0 aGVtLgorICovCitzdGF0aWMgY2hhciAqCitHZXRTaGFyZWRTbmFwc2hvdERhdGEoUGFyYWxs ZWxCaXRtYXBIZWFwU3RhdGUgKm5vZGUpCit7CisJcmV0dXJuIG5vZGUtPnNuYXBzaG90X2Fu ZF9zdGF0czsKK30KKworc3RhdGljIFNoYXJlZEJpdG1hcEhlYXBTY2FuSW5mbyAqCitHZXRT aGFyZWRCaXRtYXBIZWFwU2NhbkluZm8oUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKm5vZGUp Cit7CisJcmV0dXJuIChTaGFyZWRCaXRtYXBIZWFwU2NhbkluZm8gKikobm9kZS0+c25hcHNo b3RfYW5kX3N0YXRzICsgbm9kZS0+c3RhdHNfb2Zmc2V0KTsKK30KKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCUV4ZWNFbmRCaXRtYXBIZWFwU2NhbgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjUwLDYg KzY2NiwxOSBAQCBFeGVjRW5kQml0bWFwSGVhcFNjYW4oQml0bWFwSGVhcFNjYW5TdGF0ZSAq bm9kZSkKIHsKIAlUYWJsZVNjYW5EZXNjIHNjYW5EZXNjOwogCisJLyoKKwkgKiBXaGVuIGVu ZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBi eSB0aGUKKwkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBj YW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCisJICogcHJvY2VzcyB0byByZXBvcnQgaW4g RVhQTEFJTiBBTkFMWVpFLgorCSAqLworCWlmIChub2RlLT5wc3RhdGUgIT0gTlVMTCAmJiBJ c1BhcmFsbGVsV29ya2VyKCkpCisJeworCQlTaGFyZWRCaXRtYXBIZWFwU2NhbkluZm8gKiBz aGFyZWRfaW5mbyA9IEdldFNoYXJlZEJpdG1hcEhlYXBTY2FuSW5mbyhub2RlLT5wc3RhdGUp OworCisJCUFzc2VydChQYXJhbGxlbFdvcmtlck51bWJlciA8PSBzaGFyZWRfaW5mby0+bnVt X3dvcmtlcnMpOworCQlzaGFyZWRfaW5mby0+c2luc3RydW1lbnRbUGFyYWxsZWxXb3JrZXJO dW1iZXJdID0gbm9kZS0+c3RhdHM7CisJfQorCiAJLyoKIAkgKiBleHRyYWN0IGluZm9ybWF0 aW9uIGZyb20gdGhlIG5vZGUKIAkgKi8KQEAgLTczMSw4ICs3NjAsOCBAQCBFeGVjSW5pdEJp dG1hcEhlYXBTY2FuKEJpdG1hcEhlYXBTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAlzY2Fuc3RhdGUtPnJldHVybl9lbXB0eV90dXBsZXMgPSAwOwogCXNjYW5z dGF0ZS0+dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCXNjYW5zdGF0ZS0+cHZtYnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKLQlzY2Fuc3RhdGUtPmV4YWN0X3BhZ2VzID0gMDsKLQlzY2Fu c3RhdGUtPmxvc3N5X3BhZ2VzID0gMDsKKwlzY2Fuc3RhdGUtPnN0YXRzLmV4YWN0X3BhZ2Vz ID0gMDsKKwlzY2Fuc3RhdGUtPnN0YXRzLmxvc3N5X3BhZ2VzID0gMDsKIAlzY2Fuc3RhdGUt PnByZWZldGNoX2l0ZXJhdG9yID0gTlVMTDsKIAlzY2Fuc3RhdGUtPnByZWZldGNoX3BhZ2Vz ID0gMDsKIAlzY2Fuc3RhdGUtPnByZWZldGNoX3RhcmdldCA9IDA7CkBAIC04NTYsMTIgKzg4 NSwxNCBAQCB2b2lkCiBFeGVjQml0bWFwSGVhcEVzdGltYXRlKEJpdG1hcEhlYXBTY2FuU3Rh dGUgKm5vZGUsCiAJCQkJCSAgIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHsKLQlFU3RhdGUJ ICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwotCi0Jbm9kZS0+cHNjYW5fbGVuID0g YWRkX3NpemUob2Zmc2V0b2YoUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUsCi0JCQkJCQkJCQkJ cGhzX3NuYXBzaG90X2RhdGEpLAotCQkJCQkJCSAgIEVzdGltYXRlU25hcHNob3RTcGFjZShl c3RhdGUtPmVzX3NuYXBzaG90KSk7Ci0KKwlTaXplICAgaW5zdHJfc2l6ZSA9IG11bF9zaXpl KHBjeHQtPm53b3JrZXJzLCBzaXplb2YoQml0bWFwSGVhcFNjYW5JbnN0cnVtZW50YXRpb24p KTsKKwlFU3RhdGUgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOworCisJbm9kZS0+cHNj YW5fbGVuID0gYWRkX3NpemUob2Zmc2V0b2YoUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUsIHNu YXBzaG90X2FuZF9zdGF0cyksCisJCQkJCQkJICAgTUFYQUxJR04oRXN0aW1hdGVTbmFwc2hv dFNwYWNlKGVzdGF0ZS0+ZXNfc25hcHNob3QpKSk7CisJbm9kZS0+cHNjYW5fbGVuID0gYWRk X3NpemUobm9kZS0+cHNjYW5fbGVuLCBpbnN0cl9zaXplKTsKKwlub2RlLT5wc2Nhbl9sZW4g PSBhZGRfc2l6ZShub2RlLT5wc2Nhbl9sZW4sIG9mZnNldG9mKFNoYXJlZEJpdG1hcEhlYXBT Y2FuSW5mbywgc2luc3RydW1lbnQpKTsKKyAgICAKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZwY3h0LT5lc3RpbWF0b3IsIG5vZGUtPnBzY2FuX2xlbik7CiAJc2htX3RvY19lc3RpbWF0 ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogfQpAQCAtODc3LDkgKzkwOCwxMCBAQCBF eGVjQml0bWFwSGVhcEluaXRpYWxpemVEU00oQml0bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSwK IAkJCQkJCQlQYXJhbGxlbENvbnRleHQgKnBjeHQpCiB7CiAJUGFyYWxsZWxCaXRtYXBIZWFw U3RhdGUgKnBzdGF0ZTsKKyAgICBTaGFyZWRCaXRtYXBIZWFwU2NhbkluZm8gKiBzaGFyZWRf aW5mbzsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwogCWRzYV9h cmVhICAgKmRzYSA9IG5vZGUtPnNzLnBzLnN0YXRlLT5lc19xdWVyeV9kc2E7Ci0KKyAgICAK IAkvKiBJZiB0aGVyZSdzIG5vIERTQSwgdGhlcmUgYXJlIG5vIHdvcmtlcnM7IGluaXRpYWxp emUgbm90aGluZy4gKi8KIAlpZiAoZHNhID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTg5Niw3 ICs5MjgsMTMgQEAgRXhlY0JpdG1hcEhlYXBJbml0aWFsaXplRFNNKEJpdG1hcEhlYXBTY2Fu U3RhdGUgKm5vZGUsCiAJcHN0YXRlLT5zdGF0ZSA9IEJNX0lOSVRJQUw7CiAKIAlDb25kaXRp b25WYXJpYWJsZUluaXQoJnBzdGF0ZS0+Y3YpOwotCVNlcmlhbGl6ZVNuYXBzaG90KGVzdGF0 ZS0+ZXNfc25hcHNob3QsIHBzdGF0ZS0+cGhzX3NuYXBzaG90X2RhdGEpOworCXBzdGF0ZS0+ c3RhdHNfb2Zmc2V0ID0gTUFYQUxJR04oRXN0aW1hdGVTbmFwc2hvdFNwYWNlKGVzdGF0ZS0+ ZXNfc25hcHNob3QpKTsKKwlTZXJpYWxpemVTbmFwc2hvdChlc3RhdGUtPmVzX3NuYXBzaG90 LCBHZXRTaGFyZWRTbmFwc2hvdERhdGEocHN0YXRlKSk7CisKKwkvKiBlbnN1cmUgYW55IHVu ZmlsbGVkIHNsb3RzIHdpbGwgY29udGFpbiB6ZXJvZXMgKi8KKwlzaGFyZWRfaW5mbyA9IEdl dFNoYXJlZEJpdG1hcEhlYXBTY2FuSW5mbyhwc3RhdGUpOworCW1lbXNldChzaGFyZWRfaW5m by0+c2luc3RydW1lbnQsIDAsIHBjeHQtPm53b3JrZXJzKnNpemVvZihCaXRtYXBIZWFwU2Nh bkluc3RydW1lbnRhdGlvbikpOworCXNoYXJlZF9pbmZvLT5udW1fd29ya2VycyA9IHBjeHQt Pm53b3JrZXJzOwogCiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5w bGFuLT5wbGFuX25vZGVfaWQsIHBzdGF0ZSk7CiAJbm9kZS0+cHN0YXRlID0gcHN0YXRlOwpA QCAtOTQ5LDYgKzk4NywzMCBAQCBFeGVjQml0bWFwSGVhcEluaXRpYWxpemVXb3JrZXIoQml0 bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSwKIAlwc3RhdGUgPSBzaG1fdG9jX2xvb2t1cChwd2N4 dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKIAlub2Rl LT5wc3RhdGUgPSBwc3RhdGU7CiAKLQlzbmFwc2hvdCA9IFJlc3RvcmVTbmFwc2hvdChwc3Rh dGUtPnBoc19zbmFwc2hvdF9kYXRhKTsKKwlzbmFwc2hvdCA9IFJlc3RvcmVTbmFwc2hvdChH ZXRTaGFyZWRTbmFwc2hvdERhdGEocHN0YXRlKSk7CiAJdGFibGVfc2Nhbl91cGRhdGVfc25h cHNob3Qobm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjLCBzbmFwc2hvdCk7CiB9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCQlFeGVjQml0bWFwSGVhcFJldHJpZXZlSW5zdHJ1bWVudGF0aW9u CisgKgorICoJCVRyYW5zZmVyIGJpdG1hcCBoZWFwIHNjYW4gc3RhdGlzdGljcyBmcm9tIERT TSB0byBwcml2YXRlIG1lbW9yeS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorRXhlY0Jp dG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbihCaXRtYXBIZWFwU2NhblN0YXRlICpu b2RlKQoreyAgIAorCVNpemUgc2l6ZTsKKwlTaGFyZWRCaXRtYXBIZWFwU2NhbkluZm8gKnNo YXJlZF9pbmZvOworCisJaWYgKG5vZGUtPnBzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisK KwlzaGFyZWRfaW5mbyA9IEdldFNoYXJlZEJpdG1hcEhlYXBTY2FuSW5mbyhub2RlLT5wc3Rh dGUpOworCisJc2l6ZSA9IG9mZnNldG9mKFNoYXJlZEJpdG1hcEhlYXBTY2FuSW5mbywgc2lu c3RydW1lbnQpCisJCSsgc2hhcmVkX2luZm8tPm51bV93b3JrZXJzICogc2l6ZW9mKEJpdG1h cEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKworCW5vZGUtPnNoYXJlZF9pbmZvID0gcGFs bG9jKHNpemUpOworCW1lbWNweShub2RlLT5zaGFyZWRfaW5mbywgc2hhcmVkX2luZm8sIHNp emUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUJpdG1hcEhl YXBzY2FuLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uaApp bmRleCAzYTI2N2E3ZmJkLi5iZjEyMzc3ZTI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9ub2RlQml0bWFwSGVhcHNjYW4uaApAQCAtMjgsNSArMjgsNiBAQCBleHRlcm4gdm9pZCBF eGVjQml0bWFwSGVhcFJlSW5pdGlhbGl6ZURTTShCaXRtYXBIZWFwU2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkJCSAgUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIEV4 ZWNCaXRtYXBIZWFwSW5pdGlhbGl6ZVdvcmtlcihCaXRtYXBIZWFwU2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkJCSAgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpOworZXh0ZXJu IHZvaWQgRXhlY0JpdG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbihCaXRtYXBIZWFw U2NhblN0YXRlICpub2RlKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVCSVRNQVBIRUFQU0NB Tl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDIwZjRjOGIzNWYuLjI5NDg0MTY2 ZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNjM1LDYgKzE2MzUsMjIgQEAgdHlw ZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVz Y0RhdGEgKmJpc3NfU2NhbkRlc2M7CiB9IEJpdG1hcEluZGV4U2NhblN0YXRlOwogCit0eXBl ZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbgoreworCXVpbnQ2NCBs b3NzeV9wYWdlczsKKwl1aW50NjQgZXhhY3RfcGFnZXM7Cit9IEJpdG1hcEhlYXBTY2FuSW5z dHJ1bWVudGF0aW9uOworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkgU2hhcmVkIG1lbW9y eSBjb250YWluZXIgZm9yIHBlci13b3JrZXIgYml0bWFwIGhlYXAgc2NhbiBpbmZvcm1hdGlv bgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBTaGFyZWRCaXRt YXBIZWFwU2NhbkluZm8KK3sKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1f d29ya2VyczsKKwlCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbiBzaW5zdHJ1bWVudFtG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBTaGFyZWRCaXRtYXBIZWFwU2NhbkluZm87CisK IC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBTaGFyZWRCaXRtYXBTdGF0ZSBpbmZvcm1hdGlv bgogICoKQEAgLTE2NzcsNyArMTY5Myw4IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQml0 bWFwSGVhcFN0YXRlCiAJaW50CQkJcHJlZmV0Y2hfdGFyZ2V0OwogCVNoYXJlZEJpdG1hcFN0 YXRlIHN0YXRlOwogCUNvbmRpdGlvblZhcmlhYmxlIGN2OwotCWNoYXIJCXBoc19zbmFwc2hv dF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CisJc2l6ZV90CQlzdGF0c19vZmZzZXQ7 CisJY2hhcgkJc25hcHNob3RfYW5kX3N0YXRzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9 IFBhcmFsbGVsQml0bWFwSGVhcFN0YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0x NzE1LDggKzE3MzIsNiBAQCB0eXBlZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhblN0YXRlCiAJ aW50CQkJcmV0dXJuX2VtcHR5X3R1cGxlczsKIAlCdWZmZXIJCXZtYnVmZmVyOwogCUJ1ZmZl cgkJcHZtYnVmZmVyOwotCWxvbmcJCWV4YWN0X3BhZ2VzOwotCWxvbmcJCWxvc3N5X3BhZ2Vz OwogCVRCTUl0ZXJhdG9yICpwcmVmZXRjaF9pdGVyYXRvcjsKIAlpbnQJCQlwcmVmZXRjaF9w YWdlczsKIAlpbnQJCQlwcmVmZXRjaF90YXJnZXQ7CkBAIC0xNzI2LDYgKzE3NDEsOCBAQCB0 eXBlZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhblN0YXRlCiAJVEJNU2hhcmVkSXRlcmF0b3Ig KnNoYXJlZF90Ym1pdGVyYXRvcjsKIAlUQk1TaGFyZWRJdGVyYXRvciAqc2hhcmVkX3ByZWZl dGNoX2l0ZXJhdG9yOwogCVBhcmFsbGVsQml0bWFwSGVhcFN0YXRlICpwc3RhdGU7CisJQml0 bWFwSGVhcFNjYW5JbnN0cnVtZW50YXRpb24gc3RhdHM7CisJU2hhcmVkQml0bWFwSGVhcFNj YW5JbmZvICpzaGFyZWRfaW5mbzsKIH0gQml0bWFwSGVhcFNjYW5TdGF0ZTsKIAogLyogLS0t LS0tLS0tLS0tLS0tLQotLSAKMi4zNC4xCgo= --------------H6rtGvvsKlswO7bzkr5KsLou--