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 1trEqL-00H7y9-9q for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Mar 2025 11:29:17 +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 1trEpJ-005GUX-6s for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Mar 2025 11:28:13 +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 <3danissimo@gmail.com>) id 1trEpI-005GUO-P3 for pgsql-hackers@lists.postgresql.org; Sun, 09 Mar 2025 11:28:12 +0000 Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1trEpG-001qEK-1b for pgsql-hackers@postgresql.org; Sun, 09 Mar 2025 11:28:11 +0000 Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-6ef7c9e9592so27808677b3.1 for ; Sun, 09 Mar 2025 04:28:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741519690; x=1742124490; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RyB2Chj9SOMkUPtfOtqtY8+GkD3+0vRBXAUob364VoM=; b=iX3H8Eoaudba/lHU1DhsbDnay+JxG6yDxlI6i/PKayPdUJ7QFU9ThT55te4TO4Sc3P ryP00PTmwpIWjUfxi6vzq3OXaVWmrbNYvPwdXdVrLc0Uoj5GF+XOB7Tv9vaX+Zy/B3Sr 4nvv7iM67S44IpHkC+LDcGbUY5XIFzaAfMuY9exk+RUkIJDDuqhGo29lxZk8rQuuwpNM 6nsmdh4K+oRT9+lk3ulkYag63YiLfo0YwEo3+Yu4LBKphaUHph87JSdE41hVE5zGcqS1 LHWk2KE5gY9jd5EYbDzgu0pq510lG+QDN1CvRpsogN5Z/WfkRiCIhde6IAy8GXra5bE0 sOMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741519690; x=1742124490; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RyB2Chj9SOMkUPtfOtqtY8+GkD3+0vRBXAUob364VoM=; b=VYzafbVtDsZQ654Ui3+/coY+miXoCkfsakCd3U+1ZwXQRdjP6wcAyfcM7aVW8hQ+dR ZQXdNoKhMULhLUItG9getkhHCPvpOrx/1nGvIJjb/lf/keARCZi6910ioCBqT35vq+rV el5nVIKc/ML2+wpRNCt1ItGYbAXCu2QO2JW+GHr1wc6FU/YWBZwQqsWzt5hxaUF0DZJ7 M7KHs0pSsIEtfTHe//eykt/1cFdi6RSCslqw+Sc2uzLJBML9+8/a1BsGLG2SnV94rFZO axm41/TAkoLrDZXdzX95rXKVi/z8zD7395q80QwJDmae7+kChYufFSdZUEdnuyszihkj ShCg== X-Forwarded-Encrypted: i=1; AJvYcCXZ92FHyRtqYmN/bMXiNhU+jukSVqP3cJfbn6/l4s5r4UJUnQmK0FYdHr1Kc2Ea2Ux0BTVXHw5LoMAk39m5@postgresql.org X-Gm-Message-State: AOJu0Yxr2Epx7C5IsLvZuSIlpBRGg8AafC/u4jG8euKnUd2agCUA5loz G8Wgzi1lke8UOrLVHPlJYP5F3Htxp5TlpOrcW1wP+QcRuVUn4aWdqLx/ooZenv788nmh+p3040P 5HXWCV2YeFOCNNprLvBriUUikgj4= X-Gm-Gg: ASbGncsUwNc+1liMeoebPuhk1qRtpCfXvQRQ2GcYowvmPJ56iyRMe8tAGSKKbYYXnur oj92uiGcKJU+PUqwf9anHb5P4Vk/uj5OtTfwXslCMBu9XyX4HkE7fdLAcb6cXind6p0pT9QikSE t4pkm+Fd38N2rxdNpP+/R78mxQCTI= X-Google-Smtp-Source: AGHT+IFMEI62IPNnme9Njg6/2j7K/pyA4leMRuXCaVf2p8k5MZVHNSwPA3xeNk2ECvDOqRBlbHiMYedBcjsNU+dwKDU= X-Received: by 2002:a05:690c:6d09:b0:6f9:871e:6903 with SMTP id 00721157ae682-6febf3fa3d4mr137567057b3.37.1741519689696; Sun, 09 Mar 2025 04:28:09 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> <23a29125a2d07f96d49f97c31fcdb09a7f0ff6c1.camel@j-davis.com> <9F9326B4-8AD9-4858-B1C1-559FC64E6E93@gmail.com> In-Reply-To: <9F9326B4-8AD9-4858-B1C1-559FC64E6E93@gmail.com> From: Daniil Davydov <3danissimo@gmail.com> Date: Sun, 9 Mar 2025 18:27:58 +0700 X-Gm-Features: AQ5f1JqCtXe81Z5PXNuIVJVHFD55UYeEFy32Lsv1RIbEspFFHIGUSwWWpQ3sn1Q Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Jingtang Zhang Cc: Bharath Rupireddy , pgsql-hackers@lists.postgresql.org, PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000798567062fe72626" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000798567062fe72626 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, A few days ago I came up with an idea to implement multi insert optimization wherever possible. I prepared a raw patch and it showed a great performance gain (up to 4 times during INSERT ... INTO ... in the best case). Then I was very happy to find this thread. You did a great job and I want to help you to bring the matter to an end. On Thu, Oct 31, 2024 at 11:17=E2=80=AFAM Jingtang Zhang wrote: > I did some performance test these days, and I have some findings. > HEAD: > 12.29% postgres [.] pg_checksum_block > 6.33% postgres [.] GetPrivateRefCountEntry > 5.40% postgres [.] pg_comp_crc32c_sse42 > 4.54% [kernel] [k] copy_user_enhanced_fast_string > 2.69% postgres [.] BufferIsValid > 1.52% postgres [.] XLogRecordAssemble > > Patched: > 11.75% postgres [.] tts_virtual_materialize > 8.87% postgres [.] pg_checksum_block > 8.17% postgres [.] slot_deform_heap_tuple > 8.09% postgres [.] heap_compute_data_size > 6.17% postgres [.] fill_val > 3.81% postgres [.] heap_fill_tuple > 3.37% postgres [.] tts_virtual_copyslot > 2.62% [kernel] [k] copy_user_enhanced_fast_string I applied v25 patches on the master branch and made some measurements to find out what is the bottleneck in this case. The 'time' utility showed that without a patch, this query will run 1.5 times slower. I also made a few flamegraphs for this test. Most of the time is spent calling these two functions : tts_virtual_copyslot and heap_form_tuple. All tests were run in virtual machine with these CPU characteristics: Architecture: x86_64 CPU(s): 2 On-line CPU(s) list: 0,1 Virtualization features: Virtualization: AMD-V Hypervisor vendor: KVM Virtualization type: full Caches (sum of all): L1d: 128 KiB (2 instances) L1i: 128 KiB (2 instances) L2: 1 MiB (2 instances) L3: 32 MiB (2 instances) NUMA: NUMA node(s): 1 NUMA node0 CPU(s): 0,1 In my implementation, I used Tuplestore functionality to store tuples. In order to get rid of getting stuck in the above mentioned functions, I crossed it with the current implementation (v25 patches) and got a 10% increase in performance (for the test above). I also set up v22 patches to compare performance (with/without tuplestore) for INSERT ... INTO ... queries (with -j 4 -c 10 parameters for pgbech), and there also was an increase in TPS (about 3-4%). I attach a patch that adds Tuplestore to v25. What do you think about this = idea? -- Best regards, Daniil Davydov --000000000000798567062fe72626 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Replace-holding-tuples-in-virtual-slots-with-tuplest.patch" Content-Disposition: attachment; filename="0001-Replace-holding-tuples-in-virtual-slots-with-tuplest.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m81jnwai0 RnJvbSBhNTljZmNiYjA1YmIwN2M5NGE0YzBhZDY1MzFiYWE1ZTUzMTYyOWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBTdW4sIDkgTWFyIDIwMjUgMTY6Mzc6NDQgKzA3MDAKU3ViamVjdDogW1BBVENI XSBSZXBsYWNlIGhvbGRpbmcgdHVwbGVzIGluIHZpcnR1YWwgc2xvdHMgd2l0aCB0dXBsZXN0b3Jh Z2UKCkR1cmluZyBwZXJmb3JtYW5jZSB0ZXN0aW5nLCBpdCB3YXMgZm91bmQgb3V0IHRoYXQgaW4g dGhlIGN1cnJlbnQKaW1wbGVtZW50YXRpb24gYSBsb3Qgb2YgdGhlIHByb2dyYW0ncyB0aW1lIGlz IHNwZW50IGNhbGxpbmcgdHdvIGZ1bmN0aW9ucyA6CnR0c192aXJ0dWFsX2NvcHlzbG90IGFuZCBo ZWFwX2ZpbGxfdHVwbGUuIENhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZAp0byB0 aGUgZmFjdCB0aGF0IHR1cGxlcyBhcmUgc3RvcmVkIGluIHZpcnR1YWxfdHRzLCBzbyBJIHByb3Bv c2UgdG8gcmVwbGFjZSB0aGlzCmxvZ2ljIHdpdGggVHVwbGVzdG9yZSBmdW5jdGlvbmFsaXR5LgoK RGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC85RjkzMjZC NC04QUQ5LTQ4NTgtQjFDMS01NTlGQzY0RTZFOTMlNDBnbWFpbC5jb20KLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyB8IDY3ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICB8ICA5ICsrKystCiAyIGZpbGVz IGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKaW5kZXggYWNkY2UxYTRiNC4uMjc2NDgwMjEzYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKQEAgLTI2NjUsNyArMjY2NSw2IEBAIHZvaWQKIGhlYXBfbW9kaWZ5X2J1ZmZl cl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCiAJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90KQogewotCVR1cGxlVGFibGVTbG90ICpkc3RzbG90OwogCUhlYXBJbnNlcnRTdGF0ZSAq aXN0YXRlOwogCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOwogCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKQEAgLTI2ODIsOCArMjY4MSwxMCBAQCBoZWFwX21vZGlmeV9idWZmZXJfaW5z ZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAogCQltaXN0YXRlID0KIAkJCShIZWFwTXVsdGlJ bnNlcnRTdGF0ZSAqKSBwYWxsb2Moc2l6ZW9mKEhlYXBNdWx0aUluc2VydFN0YXRlKSk7CiAJCW1p c3RhdGUtPnNsb3RzID0KLQkJCShUdXBsZVRhYmxlU2xvdCAqKikgcGFsbG9jMChzaXplb2YoVHVw bGVUYWJsZVNsb3QgKikgKiBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7Ci0JCW1pc3RhdGUtPmN1 cl9zbG90cyA9IDA7CisJCQkoVHVwbGVUYWJsZVNsb3QgKiopIHBhbGxvYzAoc2l6ZW9mKHZvaWQg KikgKiBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7CisJCW1pc3RhdGUtPnRzdG9yZSA9IHR1cGxl c3RvcmVfYmVnaW5faGVhcChmYWxzZSwgZmFsc2UsIHdvcmtfbWVtKTsKKwkJbWlzdGF0ZS0+bnVz ZWQgPSAwOworCiAJCWlzdGF0ZS0+bWlzdGF0ZSA9IG1pc3RhdGU7CiAKIAkJLyoKQEAgLTI3MDIs MzYgKzI3MDMsMTEgQEAgaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRl ICpzdGF0ZSwKIAlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5kYXRhOwogCUFz c2VydChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCk7CiAJbWlzdGF0ZSA9IGlzdGF0ZS0+bWlzdGF0 ZTsKLQlkc3RzbG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKLQotCWlm IChkc3RzbG90ID09IE5VTEwpCi0JewotCQkvKgotCQkgKiBXZSB1c2UgdmlydHVhbCB0dXBsZSBz bG90cyBidWZmZXJlZCBzbG90cyBmb3IgbGV2ZXJhZ2luZyB0aGUKLQkJICogb3B0aW1pemF0aW9u IGl0IHByb3ZpZGVzIHRvIG1pbmltaXplIHBoeXNpY2FsIGRhdGEgY29weWluZy4gVGhlCi0JCSAq IHZpcnR1YWwgc2xvdCBnZXRzIG1hdGVyaWFsaXplZCB3aGVuIHdlIGNvcHkgKHZpYSBiZWxvdwot CQkgKiBFeGVjQ29weVNsb3QpIHRoZSB0dXBsZXMgZnJvbSB0aGUgc291cmNlIHNsb3Qgd2hpY2gg Y2FuIGJlIG9mIGFueQotCQkgKiB0eXBlLiBUaGlzIHdheSwgaXQgaXMgZW5zdXJlZCB0aGF0IHRo ZSB0dXBsZSBzdG9yYWdlIGRvZXNuJ3QgZGVwZW5kCi0JCSAqIG9uIGV4dGVybmFsIG1lbW9yeSwg YmVjYXVzZSBhbGwgdGhlIGRhdHVtcyB0aGF0IGFyZW4ndCBwYXNzZWQgYnkKLQkJICogdmFsdWUg YXJlIGNvcGllZCBpbnRvIHRoZSBzbG90J3MgbWVtb3J5IGNvbnRleHQuCi0JCSAqLwotCQlkc3Rz bG90ID0gTWFrZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3Ioc3RhdGUtPnJlbCksCi0J CQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOwotCi0JCW1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1 cl9zbG90c10gPSBkc3RzbG90OwotCX0KLQotCUFzc2VydChUVFNfSVNfVklSVFVBTChkc3RzbG90 KSk7Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB0aGUgY29weSBjbGVhcnMgdGhlIHByZXZpb3VzIGRl c3RpbmF0aW9uIHNsb3QgY29udGVudHMsIHNvIG5vCi0JICogbmVlZCB0byBleHBsaWNpdGx5IEV4 ZWNDbGVhclR1cGxlKCkgaGVyZS4KLQkgKi8KLQlFeGVjQ29weVNsb3QoZHN0c2xvdCwgc2xvdCk7 CiAKLQltaXN0YXRlLT5jdXJfc2xvdHMrKzsKKwl0dXBsZXN0b3JlX3B1dHR1cGxlc2xvdChtaXN0 YXRlLT50c3RvcmUsIHNsb3QpOworCW1pc3RhdGUtPm51c2VkICs9IDE7CiAKLQlpZiAobWlzdGF0 ZS0+Y3VyX3Nsb3RzID49IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTKQorCWlmIChtaXN0YXRlLT5u dXNlZCA+PSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUykKIAkJaGVhcF9tb2RpZnlfYnVmZmVyX2Zs dXNoKHN0YXRlKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKQEAgLTI3 NDYsMTkgKzI3MjIsMzUgQEAgaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlKQogCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOwogCUhlYXBNdWx0aUluc2VydFN0 YXRlICptaXN0YXRlOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBsZURlc2MgdHVw ZGVzYzsKIAogCS8qIFF1aWNrIGV4aXQgaWYgd2UgaGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5 ZXQgKi8KIAlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3Ioc3RhdGUtPnJlbCk7CiAJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0 ZSAqKSBzdGF0ZS0+ZGF0YTsKIAlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpOwogCW1p c3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CiAKIAkvKiBRdWljayBleGl0IGlmIHdlIGhhdmUgZmx1 c2hlZCBhbHJlYWR5ICovCi0JaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwKQorCWlmIChtaXN0 YXRlLT5udXNlZCA9PSAwKQogCQlyZXR1cm47CiAKKwlmb3IgKGludCBpID0gMDsgaSA8IG1pc3Rh dGUtPm51c2VkOyBpKyspCisJeworCQlib29sIG9rOworCisJCWlmIChpc3RhdGUtPm1pc3RhdGUt PnNsb3RzW2ldID09IE5VTEwpCisJCXsKKwkJCWlzdGF0ZS0+bWlzdGF0ZS0+c2xvdHNbaV0gPQor CQkJCU1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdCh0dXBkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxl KTsKKwkJfQorCQlvayA9IHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KG1pc3RhdGUtPnRzdG9yZSwg dHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkgaXN0YXRlLT5taXN0YXRlLT5zbG90c1tpXSk7CisJCUFz c2VydChvayk7CisJfQorCiAJLyoKIAkgKiBoZWFwX211bHRpX2luc2VydCgpIGNhbiBsZWFrIG1l bW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQogCSAqIGNvbnRleHQgYmVmb3Jl IGNhbGxpbmcgaXQuCkBAIC0yNzY2LDcgKzI3NTgsNyBAQCBoZWFwX21vZGlmeV9idWZmZXJfZmx1 c2goVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCiAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhtaXN0YXRlLT5tZW1fY3R4KTsKIAloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVs LAogCQkJCQkgIG1pc3RhdGUtPnNsb3RzLAotCQkJCQkgIG1pc3RhdGUtPmN1cl9zbG90cywKKwkJ CQkJICBtaXN0YXRlLT5udXNlZCwKIAkJCQkJICBzdGF0ZS0+Y2lkLAogCQkJCQkgIHN0YXRlLT5v cHRpb25zLAogCQkJCQkgIGlzdGF0ZS0+YmlzdGF0ZSk7CkBAIC0yNzc5LDE0ICsyNzcxLDE1IEBA IGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKIAkgKi8K IAlpZiAoc3RhdGUtPmJ1ZmZlcl9mbHVzaF9jYiAhPSBOVUxMKQogCXsKLQkJZm9yIChpbnQgaSA9 IDA7IGkgPCBtaXN0YXRlLT5jdXJfc2xvdHM7IGkrKykKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBt aXN0YXRlLT5udXNlZDsgaSsrKQogCQl7CiAJCQlzdGF0ZS0+YnVmZmVyX2ZsdXNoX2NiKHN0YXRl LT5idWZmZXJfZmx1c2hfY3R4LAogCQkJCQkJCQkgICBtaXN0YXRlLT5zbG90c1tpXSk7CiAJCX0K IAl9CiAKLQltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworCXR1cGxlc3RvcmVfY2xlYXIobWlzdGF0 ZS0+dHN0b3JlKTsKKwltaXN0YXRlLT5udXNlZCA9IDA7CiB9CiAKIC8qCkBAIC0yODExLDExICsy ODA0LDEzIEBAIGhlYXBfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUp CiAKIAkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKIAotCQlBc3NlcnQobWlzdGF0 ZS0+Y3VyX3Nsb3RzID09IDApOworCQlBc3NlcnQobWlzdGF0ZS0+bnVzZWQ9PSAwKTsKIAogCQlm b3IgKGludCBpID0gMDsgaSA8IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTICYmIG1pc3RhdGUtPnNs b3RzW2ldICE9IE5VTEw7IGkrKykKIAkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QobWlz dGF0ZS0+c2xvdHNbaV0pOwogCisJCXR1cGxlc3RvcmVfZW5kKG1pc3RhdGUtPnRzdG9yZSk7CisK IAkJTWVtb3J5Q29udGV4dERlbGV0ZShtaXN0YXRlLT5tZW1fY3R4KTsKIAl9CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaAppbmRleCBmZGJiZjliOGU4Li41ZDhlNjcyMDU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0y Nyw4ICsyNywxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG9ja2RlZnMuaCIKICNpbmNsdWRlICJz dG9yYWdlL3JlYWRfc3RyZWFtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCisjaW5j bHVkZSAidGNvcC9kZXN0LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9zbmFwc2hvdC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKIAogCiAv KiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciBoZWFwX2luc2VydCAqLwpAQCAtMjg1LDggKzI4Nywx MSBAQCB0eXBlZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRTdGF0ZQogCS8qIEFycmF5IG9mIGJ1 ZmZlcmVkIHNsb3RzICovCiAJVHVwbGVUYWJsZVNsb3QgKipzbG90czsKIAotCS8qIE51bWJlciBv ZiBidWZmZXJlZCBzbG90cyBjdXJyZW50bHkgaGVsZCAqLwotCWludAkJCWN1cl9zbG90czsKKwkv KiBIb2xkcyB0aGUgdHVwbGUgc2V0ICovCisJVHVwbGVzdG9yZXN0YXRlICp0c3RvcmU7CisKKwkv KiBOdW1iZXIgb2YgYnVmZmVyZWQgdHVwbGVzIGN1cnJlbnRseSBoZWxkICovCisJaW50CQkJCW51 c2VkOwogCiAJLyogTWVtb3J5IGNvbnRleHQgZm9yIGRlYWxpbmcgd2l0aCBtdWx0aSBpbnNlcnRz ICovCiAJTWVtb3J5Q29udGV4dCBtZW1fY3R4OwotLSAKMi40My4wCgo= --000000000000798567062fe72626--