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 1tz1f6-00E3ee-70 for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 23:01:52 +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 1tz1f4-00EaKL-Py for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 23:01:50 +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 1tz1f4-00EaK5-2A for pgsql-hackers@lists.postgresql.org; Sun, 30 Mar 2025 23:01:50 +0000 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tz1f1-0022FS-1k for pgsql-hackers@postgresql.org; Sun, 30 Mar 2025 23:01:49 +0000 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-54b11e20a31so1641606e87.2 for ; Sun, 30 Mar 2025 16:01:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743375705; x=1743980505; 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=qM4d24ZrJ5Ye7cmKZVfRLJ+7PsnHLohpY8aquhgt0/A=; b=XyrPgmpRbdEowNMJ1+/EICUz8DGRPMmVn2JNpL6tbVoBtX0dJE0EN0rOQksue6rzVL zza+0UVTE7SwxdMvgwVaUVoe3jWK/2eTy3TfAyRjQqcNAtalpYb2EgNssIQ2Kol9622M NyGu0+qwxGauRDsh1mEXhZHH0mz0slDJJHm6h8lutHSvr/iYj+Ul6tXQOG3s5SHv+d9J Y7FqsjJxIs4wK43wYA66hbCjlP/NL1ALOI2wsTmwvf0VP1tf2WJd/ebTugFBChN5vvhb mrBPsxF5FX4yUuAdrCCetSCi1qg4S7Up47ktNqWDGHFERDIsAlMEZpJ41vjS6eThO57Z gksw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743375705; x=1743980505; 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=qM4d24ZrJ5Ye7cmKZVfRLJ+7PsnHLohpY8aquhgt0/A=; b=rJiCPnplM7Zg0rJswsC+eCrAA3ovM1B5y2gcwpNadbx15ExeRlAbNbAyNrgcvmWqoL jgQj/G6HjigKFicXe6QLGA9/4medrdJCGiWAjxFe1FCad0B80rOi37X5/bZUrF8hoIc9 suuSmWvOROubS0czJ+ayjRNfZWNBWZjAVCcTm+iz7OH5UzDvFGWQsP3/gQ5pOx8rOCxa 1TsvGa+clqXwA1HvMKu+YTtDlPVQ4Hb0/6b/XLDdIxoBX2vFRyPZbF0phl/tnBxrkiTY 2txEtCrnG2tZEyUHAgbCoqher5PPxUojCmfVMfVrdAb3MqGN1fFaRDa58jEm4anvICEz VgKA== X-Forwarded-Encrypted: i=1; AJvYcCVcGj17d5m346fiEb9+Ku1HiFiIYyopmHLZb7bN3cFHii0Krj+AKjwslXw/Ojwc0zzqd3/B62iYOSWNXxwN@postgresql.org X-Gm-Message-State: AOJu0Yysr/uwrnEa7ekjx62mxwe6yOIUDlA0QZ3Gd+e863iVJ2KUt0vq W/khALHZ0DUixsQY+rUt87ahdxXG+sQJ89RsC7yPgTCuYNE9gtkOevz7/e+OH9qXyGCQ7W9KsCg CP1ToT2tnLRxV8AL2jZlAiH4mN4o= X-Gm-Gg: ASbGncsd5gjJAHO3fCLvTGlMQfYcX7F3koxOCpfl0W5NJ2Sr95iVbBBXapLIXMOuFOV Xb/bjiYW21jA4p678IYVaBtnzNoxFM+BNyp/5SGlriea3GrbInfj1nX5W1mw4ac/FAn4GvhcBEN 30xnhzVtSlm0LoH8xApR1I6a+KCYI2b9kmlCQJHZHmqpbgr8aAOVEi8NOvuqMN X-Google-Smtp-Source: AGHT+IGSrO5OK7YJj8QGoHZrWLunub11BZLBOLFBXJLWbmB31Kw7EM+u6JJUHleCZjZda09JW5KaDY0QVm9wyLrmE0A= X-Received: by 2002:a05:6512:3d8a:b0:549:38eb:d68b with SMTP id 2adb3069b0e04-54b11114eadmr1689398e87.33.1743375705065; Sun, 30 Mar 2025 16:01:45 -0700 (PDT) MIME-Version: 1.0 References: <3e40eeec-d8bf-4496-854e-485dd901f6a2@vondra.me> <6bf7194e-4c34-4e6d-8215-f6acf8903974@vondra.me> <6705dbd2-060b-4f3c-9fcb-1c7f10880b26@vondra.me> <66283922-0448-44e7-bbdd-38aaf2be34b9@vondra.me> In-Reply-To: <66283922-0448-44e7-bbdd-38aaf2be34b9@vondra.me> From: Rahila Syed Date: Mon, 31 Mar 2025 04:31:33 +0530 X-Gm-Features: AQ5f1JoKrtD-ZN2isvE87L8gGRaW_2FXn3NPT_EYasorHYfo4qvbsmu243xTnIA Message-ID: Subject: Re: Improve monitoring of shared memory allocations To: Tomas Vondra Cc: Nazir Bilal Yavuz , Andres Freund , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000009c77f606319749e9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009c77f606319749e9 Content-Type: multipart/alternative; boundary="0000000000009c77f506319749e7" --0000000000009c77f506319749e7 Content-Type: text/plain; charset="UTF-8" Hi Tomas, > > Right. I'm still not convinced if this makes any difference, or whether > this alignment was merely a consequence of using ShmemAlloc(). I don't > want to make this harder to understand unnecessarily. > Yeah, it makes sense. > Let's keep this simple - without additional alignment. I'll think about > it a bit more, and maybe add it before commit. > OK. > > > > I will improve the comment in the next version. > > > > OK. Do we even need to pass nelem_alloc to hash_get_init_size? It's not > really used except for this bit: > > + if (init_size > nelem_alloc) > + element_alloc = false; > > Can't we determine before calling the function, to make it a bit less > confusing? > Yes, we could determine whether the pre-allocated elements are zero before calling the function, I have fixed it accordingly in the attached 0001 patch. Now, there's no need to pass `nelem_alloc` as a parameter. Instead, I've passed this information as a boolean variable-initial_elems. If it is false, no elements are pre-allocated. Please find attached the v7-series, which incorporates your review patches and addresses a few remaining comments. Thank you, Rahila Syed --0000000000009c77f506319749e7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Tomas,



Right. I'm still not convinced if this makes any difference, or whether=
this alignment was merely a consequence of using ShmemAlloc(). I don't<= br> want to make this harder to understand unnecessarily.
= =C2=A0
Yeah, it makes sense.=C2=A0


Let's keep this simple - without additional alignment. I'll think a= bout
it a bit more, and maybe add it before commit.

OK.=
=C2=A0

> I will improve the comment in the next version.
>

OK. Do we even need to pass nelem_alloc to hash_get_init_size? It's not=
really used except for this bit:

+=C2=A0 =C2=A0 if (init_size > nelem_alloc)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 element_alloc =3D false;

Can't we determine before calling the function, to make it a bit less confusing?

Yes, we could determine whether the pre= -allocated elements are zero before
calling the function, I have fixed i= t accordingly in the attached 0001 patch.=C2=A0
Now, there's no need= to pass `nelem_alloc` as a parameter. Instead, I've
passed this in= formation as a boolean variable-initial_elems.=C2=A0If it is false,
no = elements are pre-allocated.

Please find attached the v7-series, whic= h incorporates your review patches
and addresses a few remaining commen= ts.

Thank you,
Rahila Syed
--0000000000009c77f506319749e7-- --0000000000009c77f606319749e9 Content-Type: application/octet-stream; name="v7-0002-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Disposition: attachment; filename="v7-0002-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8w8u1810 RnJvbSBkZmI3NzMxY2Q5ZjQ2ODdmNGQ5MGE1MjEwZmIzMmMzYTc4ZmM0YTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMDM6NDU6NTAgKzA1MzAKU3ViamVjdDogW1BBVENIIDIv M10gUmVwbGFjZSBTaG1lbUFsbG9jIGNhbGxzIGJ5IFNobWVtSW5pdFN0cnVjdAoKVGhlIHNoYXJl ZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IFNobWVtQWxsb2MgaXMgbm90IHRyYWNrZWQKYnkgcGdfc2ht ZW1fYWxsb2NhdGlvbnMuIFRoaXMgY29tbWl0IHJlcGxhY2VzIG1vc3Qgb2YgdGhlCmNhbGxzIHRv IFNobWVtQWxsb2MgYnkgU2htZW1Jbml0U3RydWN0IHRvIGFzc29jaWF0ZSBhIG5hbWUKd2l0aCB0 aGUgYWxsb2NhdGlvbnMgYW5kIGVuc3VyZSB0aGF0IHRoZXkgZ2V0IHRyYWNrZWQgYnkKcGdfc2ht ZW1fYWxsb2NhdGlvbnMuIEl0IGFsc28gbWVyZ2VzIHNldmVyYWwgc21hbGxlcgpTaG1lbUFsbG9j IGNhbGxzIGludG8gbGFyZ2VyIFNobWVtSW5pdFN0cnVjdCB0byBhbGxvY2F0ZQphbmQgdHJhY2sg YWxsIHRoZSByZWxhdGVkIG1lbW9yeSBhbGxvY2F0aW9ucyB1bmRlciBzaW5nbGUKY2FsbC4KLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgfCAzMCArKysrKysrKysrLS0t LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICB8IDU3ICsrKysrKysrKysr KysrKysrKysrKysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgMjAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRp Y2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDViMjFh MDUzOTguLmQ4MjExNGZmY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAg LTEyMjYsMTQgKzEyMjYsMjEgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCSAqLwog CW1heF90YWJsZV9zaXplICo9IDEwOwogCisJcmVxdWVzdFNpemUgPSBhZGRfc2l6ZShQcmVkWGFj dExpc3REYXRhU2l6ZSwKKwkJCQkJCSAgIChtdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3NpemUs CisJCQkJCQkJCQkgc2l6ZW9mKFNFUklBTElaQUJMRVhBQ1QpKSkpOworCiAJUHJlZFhhY3QgPSBT aG1lbUluaXRTdHJ1Y3QoIlByZWRYYWN0TGlzdCIsCi0JCQkJCQkJICAgUHJlZFhhY3RMaXN0RGF0 YVNpemUsCisJCQkJCQkJICAgcmVxdWVzdFNpemUsCiAJCQkJCQkJICAgJmZvdW5kKTsKIAlBc3Nl cnQoZm91bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOwogCWlmICghZm91bmQpCiAJewogCQlpbnQJ CQlpOwogCisJCS8qIGNsZWFuIGV2ZXJ5dGhpbmcsIGJvdGggdGhlIGhlYWRlciBhbmQgdGhlIGVs ZW1lbnQgKi8KKwkJbWVtc2V0KFByZWRYYWN0LCAwLCByZXF1ZXN0U2l6ZSk7CisKIAkJZGxpc3Rf aW5pdCgmUHJlZFhhY3QtPmF2YWlsYWJsZUxpc3QpOwogCQlkbGlzdF9pbml0KCZQcmVkWGFjdC0+ YWN0aXZlTGlzdCk7CiAJCVByZWRYYWN0LT5TeGFjdEdsb2JhbFhtaW4gPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKQEAgLTEyNDIsMTEgKzEyNDksOSBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZv aWQpCiAJCVByZWRYYWN0LT5MYXN0U3hhY3RDb21taXRTZXFObyA9IEZpcnN0Tm9ybWFsU2VyQ29t bWl0U2VxTm8gLSAxOwogCQlQcmVkWGFjdC0+Q2FuUGFydGlhbENsZWFyVGhyb3VnaCA9IDA7CiAJ CVByZWRYYWN0LT5IYXZlUGFydGlhbENsZWFyZWRUaHJvdWdoID0gMDsKLQkJcmVxdWVzdFNpemUg PSBtdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3NpemUsCi0JCQkJCQkJICAgc2l6ZW9mKFNFUklB TElaQUJMRVhBQ1QpKTsKLQkJUHJlZFhhY3QtPmVsZW1lbnQgPSBTaG1lbUFsbG9jKHJlcXVlc3RT aXplKTsKKwkJUHJlZFhhY3QtPmVsZW1lbnQKKwkJCT0gKFNFUklBTElaQUJMRVhBQ1QgKikgKChj aGFyICopIFByZWRYYWN0ICsgUHJlZFhhY3RMaXN0RGF0YVNpemUpOwogCQkvKiBBZGQgYWxsIGVs ZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KLQkJbWVtc2V0KFByZWRYYWN0LT5l bGVtZW50LCAwLCByZXF1ZXN0U2l6ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBtYXhfdGFibGVfc2l6 ZTsgaSsrKQogCQl7CiAJCQlMV0xvY2tJbml0aWFsaXplKCZQcmVkWGFjdC0+ZWxlbWVudFtpXS5w ZXJYYWN0UHJlZGljYXRlTGlzdExvY2ssCkBAIC0xMzAwLDIwICsxMzA1LDI1IEBAIFByZWRpY2F0 ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkgKi8KIAltYXhfdGFibGVfc2l6ZSAqPSA1OwogCisJcmVx dWVzdFNpemUgPSBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplICsKKwkJbXVsX3NpemUoKFNp emUpIG1heF90YWJsZV9zaXplLAorCQkJCSBSV0NvbmZsaWN0RGF0YVNpemUpOworCiAJUldDb25m bGljdFBvb2wgPSBTaG1lbUluaXRTdHJ1Y3QoIlJXQ29uZmxpY3RQb29sIiwKLQkJCQkJCQkJCSBS V0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplLAorCQkJCQkJCQkJIHJlcXVlc3RTaXplLAogCQkJ CQkJCQkJICZmb3VuZCk7CiAJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKIAlp ZiAoIWZvdW5kKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKiBjbGVhbiBldmVyeXRoaW5nLCBpbmNs dWRpbmcgdGhlIGVsZW1lbnRzICovCisJCW1lbXNldChSV0NvbmZsaWN0UG9vbCwgMCwgcmVxdWVz dFNpemUpOworCiAJCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsK LQkJcmVxdWVzdFNpemUgPSBtdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3NpemUsCi0JCQkJCQkJ ICAgUldDb25mbGljdERhdGFTaXplKTsKLQkJUldDb25mbGljdFBvb2wtPmVsZW1lbnQgPSBTaG1l bUFsbG9jKHJlcXVlc3RTaXplKTsKKwkJUldDb25mbGljdFBvb2wtPmVsZW1lbnQgPSAoUldDb25m bGljdCkgKChjaGFyICopIFJXQ29uZmxpY3RQb29sICsKKwkJCQkJCQkJCQkJCVJXQ29uZmxpY3RQ b29sSGVhZGVyRGF0YVNpemUpOwogCQkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWlsYWJsZSBs aXN0LCBjbGVhbi4gKi8KLQkJbWVtc2V0KFJXQ29uZmxpY3RQb29sLT5lbGVtZW50LCAwLCByZXF1 ZXN0U2l6ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBtYXhfdGFibGVfc2l6ZTsgaSsrKQogCQl7CiAJ CQlkbGlzdF9wdXNoX3RhaWwoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0LApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcm9jLmMKaW5kZXggMDY2MzE5YWZlMi4uNGUyM2M3OTNmNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJvYy5jCkBAIC0xMjMsNiArMTIzLDI1IEBAIFByb2NHbG9iYWxTaG1lbVNpemUodm9p ZCkKIAlyZXR1cm4gc2l6ZTsKIH0KIAorLyoKKyAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNl IG5lZWRlZCBieSBQR1BST0MuCisgKi8KK3N0YXRpYyBTaXplCitQR1Byb2NTaG1lbVNpemUodm9p ZCkKK3sKKwlTaXplCQlzaXplOworCXVpbnQzMgkJVG90YWxQcm9jczsKKworCVRvdGFsUHJvY3Mg PSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7 CisKKwlzaXplID0gVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7CisJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0 YXRlcykpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9j R2xvYmFsLT5zdGF0dXNGbGFncykpOworCisJcmV0dXJuIHNpemU7Cit9CisKIC8qCiAgKiBSZXBv cnQgbnVtYmVyIG9mIHNlbWFwaG9yZXMgbmVlZGVkIGJ5IEluaXRQcm9jR2xvYmFsLgogICovCkBA IC0xNzUsNiArMTk0LDggQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkJCSAgICpmcEVuZFB0ciBQ R19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJU2l6ZQkJZnBMb2NrQml0c1NpemUsCiAJCQkJZnBS ZWxJZFNpemU7CisJU2l6ZQkJcmVxdWVzdFNpemU7CisJY2hhcgkgICAqcHRyOwogCiAJLyogQ3Jl YXRlIHRoZSBQcm9jR2xvYmFsIHNoYXJlZCBzdHJ1Y3R1cmUgKi8KIAlQcm9jR2xvYmFsID0gKFBS T0NfSERSICopCkBAIC0yMDQsNyArMjI1LDE1IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJICog d2l0aCBhIHNpbmdsZSBmcmVlbGlzdC4pICBFYWNoIFBHUFJPQyBzdHJ1Y3R1cmUgaXMgZGVkaWNh dGVkIHRvIGV4YWN0bHkKIAkgKiBvbmUgb2YgdGhlc2UgcHVycG9zZXMsIGFuZCB0aGV5IGRvIG5v dCBtb3ZlIGJldHdlZW4gZ3JvdXBzLgogCSAqLwotCXByb2NzID0gKFBHUFJPQyAqKSBTaG1lbUFs bG9jKFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DKSk7CisJcmVxdWVzdFNpemUgPSBQR1Byb2NT aG1lbVNpemUoKTsKKworCXB0ciA9IFNobWVtSW5pdFN0cnVjdCgiUEdQUk9DIHN0cnVjdHVyZXMi LAorCQkJCQkJICByZXF1ZXN0U2l6ZSwKKwkJCQkJCSAgJmZvdW5kKTsKKworCXByb2NzID0gKFBH UFJPQyAqKSBwdHI7CisJcHRyID0gKGNoYXIgKikgcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQ R1BST0MpOworCiAJTWVtU2V0KHByb2NzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQykp OwogCVByb2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBp c24ndCByZWFsbHkgYWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCkBA IC0yMTMsMTcgKzI0MiwyMSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCS8qCiAJICogQWxsb2Nh dGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUK IAkgKiBQUk9DX0hEUi4KLQkgKgotCSAqIFhYWDogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBpbmNy ZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVuCi0JICogaG93IGhvdGx5IHRoZXkg YXJlIGFjY2Vzc2VkLgogCSAqLwotCVByb2NHbG9iYWwtPnhpZHMgPQotCQkoVHJhbnNhY3Rpb25J ZCAqKSBTaG1lbUFsbG9jKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsK KwlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9uSWQgKikgcHRyOwogCU1lbVNldChQcm9j R2xvYmFsLT54aWRzLCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7 Ci0JUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzID0gKFhpZENhY2hlU3RhdHVzICopIFNobWVtQWxs b2MoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSk7CisJcHRy ID0gKGNoYXIgKikgcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMp KTsKKworCVByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcyA9IChYaWRDYWNoZVN0YXR1cyAqKSBwdHI7 CiAJTWVtU2V0KFByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcywgMCwgVG90YWxQcm9jcyAqIHNpemVv ZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSk7Ci0JUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3Mg PSAodWludDggKikgU2htZW1BbGxvYyhUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5z dGF0dXNGbGFncykpOworCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKTsKKworCVByb2NHbG9iYWwtPnN0YXR1c0ZsYWdz ID0gKHVpbnQ4ICopIHB0cjsKIAlNZW1TZXQoUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MsIDAsIFRv dGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CisJcHRyID0gKGNo YXIgKikgcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdz KSk7CisKKwkvKiBtYWtlIHN1cmUgd2VyIGRpZG4ndCBvdmVyZmxvdyAqLworCUFzc2VydCgocHRy ID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6 ZSkpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBhcnJheXMgZm9yIGZhc3QtcGF0aCBsb2Nrcy4gVGhv c2UgYXJlIHZhcmlhYmxlLWxlbmd0aCwgc28KQEAgLTIzMyw3ICsyNjYsOSBAQCBJbml0UHJvY0ds b2JhbCh2b2lkKQogCWZwTG9ja0JpdHNTaXplID0gTUFYQUxJR04oRmFzdFBhdGhMb2NrR3JvdXBz UGVyQmFja2VuZCAqIHNpemVvZih1aW50NjQpKTsKIAlmcFJlbElkU2l6ZSA9IE1BWEFMSUdOKEZh c3RQYXRoTG9ja1Nsb3RzUGVyQmFja2VuZCgpICogc2l6ZW9mKE9pZCkpOwogCi0JZnBQdHIgPSBT aG1lbUFsbG9jKFRvdGFsUHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElkU2l6ZSkpOwor CWZwUHRyID0gU2htZW1Jbml0U3RydWN0KCJGYXN0IHBhdGggbG9jayBhcnJheXMiLAorCQkJCQkJ CVRvdGFsUHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElkU2l6ZSksCisJCQkJCQkJJmZv dW5kKTsKIAlNZW1TZXQoZnBQdHIsIDAsIFRvdGFsUHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBm cFJlbElkU2l6ZSkpOwogCiAJLyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlkIG5vdCBvdmVy Zmxvdy4gKi8KQEAgLTMzMCw3ICszNjUsOSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVByZXBh cmVkWGFjdFByb2NzID0gJnByb2NzW01heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107 CiAKIAkvKiBDcmVhdGUgUHJvY1N0cnVjdExvY2sgc3BpbmxvY2ssIHRvbyAqLwotCVByb2NTdHJ1 Y3RMb2NrID0gKHNsb2NrX3QgKikgU2htZW1BbGxvYyhzaXplb2Yoc2xvY2tfdCkpOworCVByb2NT dHJ1Y3RMb2NrID0gKHNsb2NrX3QgKikgU2htZW1Jbml0U3RydWN0KCJQcm9jU3RydWN0TG9jayBz cGlubG9jayIsCisJCQkJCQkJCQkJCQkgc2l6ZW9mKHNsb2NrX3QpLAorCQkJCQkJCQkJCQkJICZm b3VuZCk7CiAJU3BpbkxvY2tJbml0KFByb2NTdHJ1Y3RMb2NrKTsKIH0KIAotLSAKMi4zNC4xCgo= --0000000000009c77f606319749e9 Content-Type: application/octet-stream; name="v7-0003-Add-cacheline-padding-between-heavily-accessed-array.patch" Content-Disposition: attachment; filename="v7-0003-Add-cacheline-padding-between-heavily-accessed-array.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8w8u5rh1 RnJvbSA2MTcxMmY4NmFiZDllZGFlMTkwZDI3ZGMwOGJlN2I5NzUzNzUxYTFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMDQ6Mjc6NDMgKzA1MzAKU3ViamVjdDogW1BBVENIIDMv M10gQWRkIGNhY2hlbGluZSBwYWRkaW5nIGJldHdlZW4gaGVhdmlseSBhY2Nlc3NlZCBhcnJheXMK Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyB8IDEyICsrKysrKy0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3Byb2MuYwppbmRleCA0ZTIzYzc5M2Y3Li44MzYzZTJmNjFkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKQEAgLTEzNCw5ICsxMzQsOSBAQCBQR1Byb2NTaG1lbVNpemUodm9pZCkKIAog CVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJl cGFyZWRfeGFjdHM7CiAKLQlzaXplID0gVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOwotCXNp emUgPSBhZGRfc2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRz KSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9i YWwtPnN1YnhpZFN0YXRlcykpOworCXNpemUgPSBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICog c2l6ZW9mKFBHUFJPQykpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDQUNIRUxJTkVBTElHTihU b3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5z dWJ4aWRTdGF0ZXMpKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3MgKiBzaXpl b2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7CiAKIAlyZXR1cm4gc2l6ZTsKQEAgLTIzMiw3 ICsyMzIsNyBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQkJCQkJICAmZm91bmQpOwogCiAJcHJv Y3MgPSAoUEdQUk9DICopIHB0cjsKLQlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICog c2l6ZW9mKFBHUFJPQyk7CisJcHRyID0gKGNoYXIgKikgcHRyICsgQ0FDSEVMSU5FQUxJR04oVG90 YWxQcm9jcyAqIHNpemVvZihQR1BST0MpKTsKIAogCU1lbVNldChwcm9jcywgMCwgVG90YWxQcm9j cyAqIHNpemVvZihQR1BST0MpKTsKIAlQcm9jR2xvYmFsLT5hbGxQcm9jcyA9IHByb2NzOwpAQCAt MjQ1LDExICsyNDUsMTEgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkgKi8KIAlQcm9jR2xvYmFs LT54aWRzID0gKFRyYW5zYWN0aW9uSWQgKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT54aWRz LCAwLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7Ci0JcHRyID0gKGNo YXIgKikgcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsKKwlw dHIgPSAoY2hhciAqKSBwdHIgKyBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICogc2l6ZW9mKCpQ cm9jR2xvYmFsLT54aWRzKSk7CiAKIAlQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMgPSAoWGlkQ2Fj aGVTdGF0dXMgKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMsIDAsIFRv dGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOwotCXB0ciA9IChj aGFyICopIHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0 ZXMpKTsKKwlwdHIgPSAoY2hhciAqKSBwdHIgKyBDQUNIRUxJTkVBTElHTihUb3RhbFByb2NzICog c2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKTsKIAogCVByb2NHbG9iYWwtPnN0YXR1 c0ZsYWdzID0gKHVpbnQ4ICopIHB0cjsKIAlNZW1TZXQoUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3Ms IDAsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSk7Ci0tIAoy LjM0LjEKCg== --0000000000009c77f606319749e9 Content-Type: application/octet-stream; name="v7-0001-Account-for-all-the-shared-memory-allocated-by-hash_.patch" Content-Disposition: attachment; filename="v7-0001-Account-for-all-the-shared-memory-allocated-by-hash_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8w8ub6d2 RnJvbSA0Y2NlNjZiZGZiYjUzYjdlZjNkOWE3MDU4ZjU5NzlhYzNiNGRjODlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMDM6MjM6MjAgKzA1MzAKU3ViamVjdDogW1BBVENIIDEv M10gQWNjb3VudCBmb3IgYWxsIHRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRlZCBieQogaGFzaF9j cmVhdGUKCnBnX3NobWVtX2FsbG9jYXRpb25zIHRyYWNrcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBi eSBTaG1lbUluaXRTdHJ1Y3QsCndoaWNoLCBpbiBjYXNlIG9mIHNoYXJlZCBoYXNoIHRhYmxlcywg b25seSBjb3ZlcnMgbWVtb3J5IGFsbG9jYXRlZAp0byB0aGUgaGFzaCBkaXJlY3RvcnkgYW5kIGhl YWRlciBzdHJ1Y3R1cmUuIFRoZSBoYXNoIHNlZ21lbnRzIGFuZApidWNrZXRzIGFyZSBhbGxvY2F0 ZWQgdXNpbmcgU2htZW1BbGxvY05vRXJyb3Igd2hpY2ggZG9lcyBub3QgYXR0cmlidXRlCnRoZSBh bGxvY2F0aW9ucyB0byB0aGUgaGFzaCB0YWJsZSBuYW1lLiBUaHVzLCB0aGVzZSBhbGxvY2F0aW9u cyBhcmUKbm90IHRyYWNrZWQgaW4gcGdfc2htZW1fYWxsb2NhdGlvbnMuCgpBbGxvY2F0ZSBtZW1v cnkgZm9yIHNlZ21lbnRzLCBidWNrZXRzIGFuZCBlbGVtZW50cyB0b2dldGhlciB3aXRoIHRoZQpk aXJlY3RvcnkgYW5kIGhlYWRlciBzdHJ1Y3R1cmVzLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGV4aXN0 aW5nIFNobWVtSW5kZXgKZW50cmllcyB0byByZWZsZWN0IHNpemUgb2YgaGFzaCB0YWJsZSBtb3Jl IGFjY3VyYXRlbHksIHRodXMgaW1wcm92aW5nCnRoZSBwZ19zaG1lbV9hbGxvY2F0aW9uIG1vbml0 b3JpbmcuIEFsc28sIG1ha2UgdGhpcyBjaGFuZ2UgZm9yIG5vbi0Kc2hhcmVkIGhhc2ggdGFibGUg c2luY2UgdGhleSBib3RoIHNoYXJlIHRoZSBoYXNoX2NyZWF0ZSBjb2RlLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvaGFz aC9keW5haGFzaC5jIHwgMjgzICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogc3JjL2lu Y2x1ZGUvdXRpbHMvaHNlYXJjaC5oICAgICAgIHwgICAzICstCiAzIGZpbGVzIGNoYW5nZWQsIDIy MiBpbnNlcnRpb25zKCspLCA2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpp bmRleCA4OTVhNDNmYjM5Li4zYzAzMGQ1NzQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAg LTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9keW5haGFzaC5oIgogCiBzdGF0aWMgdm9pZCAqU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNp emUgKmFsbG9jYXRlZF9zaXplKTsKIApAQCAtMzQ2LDcgKzM0Nyw4IEBAIFNobWVtSW5pdEhhc2go Y29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRleCAq LwogCiAJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KIAlsb2NhdGlvbiA9IFNo bWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCSAgIGhhc2hfZ2V0X3NoYXJlZF9zaXplKGluZm9Q LCBoYXNoX2ZsYWdzKSwKKwkJCQkJCQkgICBoYXNoX2dldF9pbml0X3NpemUoaW5mb1AsIGhhc2hf ZmxhZ3MsCisJCQkJCQkJCQkJCQkgIHRydWUsIGluaXRfc2l6ZSksCiAJCQkJCQkJICAgJmZvdW5k KTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMg Yi9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMKaW5kZXggM2YyNTkyOWYyZC4uM2Rl ZGU5Y2FhNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYwpAQCAtMjYwLDEyICsyNjAsMzYg QEAgc3RhdGljIGxvbmcgaGFzaF9hY2Nlc3NlcywKIAkJCWhhc2hfZXhwYW5zaW9uczsKICNlbmRp ZgogCisjZGVmaW5lCUhBU0hfRElSRUNUT1JZX1BUUihoYXNocCkgXAorCSgoKGNoYXIgKikgKGhh c2hwKS0+aGN0bCkgKyBzaXplb2YoSEFTSEhEUikpCisKKyNkZWZpbmUgSEFTSF9TRUdNRU5UX09G RlNFVChoY3RsLCBpZHgpIFwKKwkoc2l6ZW9mKEhBU0hIRFIpICsgXAorCSAoKGhjdGwpLT5kc2l6 ZSAqIHNpemVvZihIQVNIU0VHTUVOVCkpICsgXAorCSAoKGhjdGwpLT5zc2l6ZSAqIChpZHgpICog c2l6ZW9mKEhBU0hCVUNLRVQpKSkKKworI2RlZmluZSBIQVNIX1NFR01FTlRfUFRSKGhhc2hwLCBp ZHgpIFwKKwkoKGNoYXIgKikgKGhhc2hwKS0+aGN0bCArIEhBU0hfU0VHTUVOVF9PRkZTRVQoKGhh c2hwKS0+aGN0bCwgKGlkeCkpKQorCisjZGVmaW5lIEhBU0hfU0VHTUVOVF9TSVpFKGhhc2hwKSBc CisJKChoYXNocCktPnNzaXplICogc2l6ZW9mKEhBU0hCVUNLRVQpKQorCisjZGVmaW5lIEhBU0hf RUxFTUVOVFNfUFRSKGhhc2hwLCBuc2VncykgXAorCSgoY2hhciAqKSAoaGFzaHApLT5oY3RsICsg SEFTSF9TRUdNRU5UX09GRlNFVCgoaGFzaHApLT5oY3RsLCBuc2VncykpCisKKy8qIEVhY2ggZWxl bWVudCBoYXMgYSBIQVNIRUxFTUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEuICovCisjZGVmaW5l IEhBU0hfRUxFTUVOVF9TSVpFKGhjdGwpIFwKKwkoTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5U KSkgKyBNQVhBTElHTigoaGN0bCktPmVudHJ5c2l6ZSkpCisKKyNkZWZpbmUgSEFTSF9FTEVNRU5U X05FWFQoaGN0bCwgbnVtLCBwdHIpIFwKKwkoKGNoYXIgKikgKHB0cikgKyAoKG51bSkgKiBIQVNI X0VMRU1FTlRfU0laRShoY3RsKSkpCisKIC8qCiAgKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlw ZXMKICAqLwogc3RhdGljIHZvaWQgKkR5bmFIYXNoQWxsb2MoU2l6ZSBzaXplKTsKIHN0YXRpYyBI QVNIU0VHTUVOVCBzZWdfYWxsb2MoSFRBQiAqaGFzaHApOwotc3RhdGljIGJvb2wgZWxlbWVudF9h bGxvYyhIVEFCICpoYXNocCwgaW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KTsKK3N0YXRpYyBI QVNIRUxFTUVOVCAqZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwgaW50IG5lbGVtKTsKIHN0YXRp YyBib29sIGRpcl9yZWFsbG9jKEhUQUIgKmhhc2hwKTsKIHN0YXRpYyBib29sIGV4cGFuZF90YWJs ZShIVEFCICpoYXNocCk7CiBzdGF0aWMgSEFTSEJVQ0tFVCBnZXRfaGFzaF9lbnRyeShIVEFCICpo YXNocCwgaW50IGZyZWVsaXN0X2lkeCk7CkBAIC0yODEsNiArMzA1LDExIEBAIHN0YXRpYyB2b2lk IHJlZ2lzdGVyX3NlcV9zY2FuKEhUQUIgKmhhc2hwKTsKIHN0YXRpYyB2b2lkIGRlcmVnaXN0ZXJf c2VxX3NjYW4oSFRBQiAqaGFzaHApOwogc3RhdGljIGJvb2wgaGFzX3NlcV9zY2FucyhIVEFCICpo YXNocCk7CiAKK3N0YXRpYyB2b2lkIGNvbXB1dGVfYnVja2V0c19hbmRfc2Vncyhsb25nIG5lbGVt LCBsb25nIG51bV9wYXJ0aXRpb25zLAorCQkJCQkJCQkJIGxvbmcgc3NpemUsCisJCQkJCQkJCQkg aW50ICpuYnVja2V0cywgaW50ICpuc2VnbWVudHMpOworc3RhdGljIHZvaWQgZWxlbWVudF9hZGQo SFRBQiAqaGFzaHAsIEhBU0hFTEVNRU5UICpmaXJzdEVsZW1lbnQsCisJCQkJCQlpbnQgbmVsZW0s IGludCBmcmVlbGlzdF9pZHgpOwogCiAvKgogICogbWVtb3J5IGFsbG9jYXRpb24gc3VwcG9ydApA QCAtMzUzLDYgKzM4Miw4IEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxvbmcg bmVsZW0sIGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncykKIHsKIAlIVEFCCSAgICpoYXNo cDsKIAlIQVNISERSICAgICpoY3RsOworCWludAkJCW5lbGVtX2JhdGNoOworCWJvb2wgCWluaXRp YWxfZWxlbXMgPSBmYWxzZTsKIAogCS8qCiAJICogSGFzaCB0YWJsZXMgbm93IGFsbG9jYXRlIHNw YWNlIGZvciBrZXkgYW5kIGRhdGEsIGJ1dCB5b3UgaGF2ZSB0byBzYXkKQEAgLTUwNyw5ICs1Mzgs MzUgQEAgaGFzaF9jcmVhdGUoY29uc3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3Qg SEFTSENUTCAqaW5mbywgaW50IGZsYWdzKQogCQloYXNocC0+aXNzaGFyZWQgPSBmYWxzZTsKIAl9 CiAKKwkvKiBDaG9vc2UgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGFsbG9jYXRlIGF0IGEgdGlt ZS4gKi8KKwluZWxlbV9iYXRjaCA9IGNob29zZV9uZWxlbV9hbGxvYyhpbmZvLT5lbnRyeXNpemUp OworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0 ZQorCSAqCisJICogRm9yIGEgc2hhcmVkIGhhc2ggdGFibGUsIHByZWFsbG9jYXRlIHRoZSByZXF1 ZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzLgorCSAqIFRoaXMgcmVkdWNlcyBwcm9ibGVtcyB3aXRo IHJ1bi10aW1lIG91dC1vZi1zaGFyZWQtbWVtb3J5IGNvbmRpdGlvbnMuCisJICoKKwkgKiBGb3Ig YSBub24tc2hhcmVkIGhhc2ggdGFibGUsIHByZWFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVy IG9mCisJICogZWxlbWVudHMgaWYgaXQncyBsZXNzIHRoYW4gb3VyIGNob3NlbiBuZWxlbV9hbGxv Yy4gIFRoaXMgYXZvaWRzIHdhc3RpbmcKKwkgKiBzcGFjZSBpZiB0aGUgY2FsbGVyIGNvcnJlY3Rs eSBlc3RpbWF0ZXMgYSBzbWFsbCB0YWJsZSBzaXplLgorCSAqLworCWlmICgoZmxhZ3MgJiBIQVNI X1NIQVJFRF9NRU0pIHx8CisJCW5lbGVtIDwgbmVsZW1fYmF0Y2gpCisJCWluaXRpYWxfZWxlbXMg PSB0cnVlOworCWVsc2UKKwkJaW5pdGlhbF9lbGVtcyA9IGZhbHNlOworCisJLyoKKwkgKiBBbGxv Y2F0ZSB0aGUgbWVtb3J5IG5lZWRlZCBmb3IgaGFzaCBoZWFkZXIsIGRpcmVjdG9yeSwgc2VnbWVu dHMgYW5kCisJICogZWxlbWVudHMgdG9nZXRoZXIuIFVzZSBwb2ludGVyIGFyaXRobWV0aWMgdG8g YXJyaXZlIGF0IHRoZSBzdGFydCBvZgorCSAqIGVhY2ggb2YgdGhlc2Ugc3RydWN0dXJlcyBsYXRl ci4KKwkgKi8KIAlpZiAoIWhhc2hwLT5oY3RsKQogCXsKLQkJaGFzaHAtPmhjdGwgPSAoSEFTSEhE UiAqKSBoYXNocC0+YWxsb2Moc2l6ZW9mKEhBU0hIRFIpKTsKKwkJU2l6ZQkJc2l6ZSA9IGhhc2hf Z2V0X2luaXRfc2l6ZShpbmZvLCBmbGFncywgaW5pdGlhbF9lbGVtcywgbmVsZW0pOworCisJCWhh c2hwLT5oY3RsID0gKEhBU0hIRFIgKikgaGFzaHAtPmFsbG9jKHNpemUpOwogCQlpZiAoIWhhc2hw LT5oY3RsKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0Zf TUVNT1JZKSwKQEAgLTU1OCw2ICs2MTUsOSBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFyICp0YWJu YW1lLCBsb25nIG5lbGVtLCBjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCiAJaGN0bC0+ a2V5c2l6ZSA9IGluZm8tPmtleXNpemU7CiAJaGN0bC0+ZW50cnlzaXplID0gaW5mby0+ZW50cnlz aXplOwogCisJLyogcmVtZW1iZXIgaG93IG1hbnkgZWxlbWVudHMgdG8gYWxsb2NhdGUgYXQgb25j ZSAqLworCWhjdGwtPm5lbGVtX2FsbG9jID0gbmVsZW1fYmF0Y2g7CisKIAkvKiBtYWtlIGxvY2Fs IGNvcGllcyBvZiBoZWF2aWx5LXVzZWQgY29uc3RhbnQgZmllbGRzICovCiAJaGFzaHAtPmtleXNp emUgPSBoY3RsLT5rZXlzaXplOwogCWhhc2hwLT5zc2l6ZSA9IGhjdGwtPnNzaXplOwpAQCAtNTY3 LDE0ICs2MjcsNiBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFyICp0YWJuYW1lLCBsb25nIG5lbGVt LCBjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCiAJaWYgKCFpbml0X2h0YWIoaGFzaHAs IG5lbGVtKSkKIAkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBpbml0aWFsaXplIGhhc2ggdGFibGUg XCIlc1wiIiwgaGFzaHAtPnRhYm5hbWUpOwogCi0JLyoKLQkgKiBGb3IgYSBzaGFyZWQgaGFzaCB0 YWJsZSwgcHJlYWxsb2NhdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMuCi0JICog VGhpcyByZWR1Y2VzIHByb2JsZW1zIHdpdGggcnVuLXRpbWUgb3V0LW9mLXNoYXJlZC1tZW1vcnkg Y29uZGl0aW9ucy4KLQkgKgotCSAqIEZvciBhIG5vbi1zaGFyZWQgaGFzaCB0YWJsZSwgcHJlYWxs b2NhdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YKLQkgKiBlbGVtZW50cyBpZiBpdCdzIGxlc3Mg dGhhbiBvdXIgY2hvc2VuIG5lbGVtX2FsbG9jLiAgVGhpcyBhdm9pZHMgd2FzdGluZwotCSAqIHNw YWNlIGlmIHRoZSBjYWxsZXIgY29ycmVjdGx5IGVzdGltYXRlcyBhIHNtYWxsIHRhYmxlIHNpemUu Ci0JICovCiAJaWYgKChmbGFncyAmIEhBU0hfU0hBUkVEX01FTSkgfHwKIAkJbmVsZW0gPCBoY3Rs LT5uZWxlbV9hbGxvYykKIAl7CkBAIC01ODIsNiArNjM0LDkgQEAgaGFzaF9jcmVhdGUoY29uc3Qg Y2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdz KQogCQkJCQlmcmVlbGlzdF9wYXJ0aXRpb25zLAogCQkJCQluZWxlbV9hbGxvYywKIAkJCQkJbmVs ZW1fYWxsb2NfZmlyc3Q7CisJCXZvaWQJICAgKnB0ciA9IE5VTEw7CisJCWludAkJCW5zZWdzOwor CQlpbnQJCQluYnVja2V0czsKIAogCQkvKgogCQkgKiBJZiBoYXNoIHRhYmxlIGlzIHBhcnRpdGlv bmVkLCBnaXZlIGVhY2ggZnJlZWxpc3QgYW4gZXF1YWwgc2hhcmUgb2YKQEAgLTYwNiwxNCArNjYx LDMxIEBAIGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxvbmcgbmVsZW0sIGNvbnN0 IEhBU0hDVEwgKmluZm8sIGludCBmbGFncykKIAkJZWxzZQogCQkJbmVsZW1fYWxsb2NfZmlyc3Qg PSBuZWxlbV9hbGxvYzsKIAorCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBhdCB3aGlj aCB0byBmaW5kIHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YKKwkJICogZWxlbWVudHMuIFdlIGhhdmUg dG8gc2tpcCBzcGFjZSBmb3IgdGhlIGhlYWRlciwgc2VnbWVudHMgYW5kCisJCSAqIGJ1Y2tldHMu CisJCSAqLworCQljb21wdXRlX2J1Y2tldHNfYW5kX3NlZ3MobmVsZW0sIGhjdGwtPm51bV9wYXJ0 aXRpb25zLCBoY3RsLT5zc2l6ZSwKKwkJCQkJCQkJICZuYnVja2V0cywgJm5zZWdzKTsKKworCQlw dHIgPSBIQVNIX0VMRU1FTlRTX1BUUihoYXNocCwgbnNlZ3MpOworCisJCS8qCisJCSAqIEFzc2ln biB0aGUgY29ycmVjdCBsb2NhdGlvbiBvZiBlYWNoIHBhcml0aW9uIHdpdGhpbiBhIHByZS1hbGxv Y2F0ZWQKKwkJICogYnVmZmVyLgorCQkgKgorCQkgKiBBY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24g aGFwcGVucyBpbiBTaG1lbUluaXRIYXNoIGZvciBzaGFyZWQgaGFzaAorCQkgKiB0YWJsZXMgb3Ig ZWFybGllciBpbiB0aGlzIGZ1bmN0aW9uIGZvciBub24tc2hhcmVkIGhhc2ggdGFibGVzLgorCQkg KgorCQkgKiBXZSBqdXN0IG5lZWQgdG8gc3BsaXQgdGhhdCBhbGxvY2F0aW9uIGludG8gcGVyLWJh dGNoIGZyZWVsaXN0cy4KKwkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBmcmVlbGlzdF9wYXJ0aXRp b25zOyBpKyspCiAJCXsKIAkJCWludAkJCXRlbXAgPSAoaSA9PSAwKSA/IG5lbGVtX2FsbG9jX2Zp cnN0IDogbmVsZW1fYWxsb2M7CiAKLQkJCWlmICghZWxlbWVudF9hbGxvYyhoYXNocCwgdGVtcCwg aSkpCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCi0JCQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKKwkJCWVsZW1lbnRfYWRk KGhhc2hwLCAoSEFTSEVMRU1FTlQgKikgcHRyLCB0ZW1wLCBpKTsKKwkJCXB0ciA9IEhBU0hfRUxF TUVOVF9ORVhUKGhjdGwsIHRlbXAsIHB0cik7CiAJCX0KIAl9CiAKQEAgLTcwMSwzMCArNzczLDEy IEBAIGluaXRfaHRhYihIVEFCICpoYXNocCwgbG9uZyBuZWxlbSkKIAkJZm9yIChpID0gMDsgaSA8 IE5VTV9GUkVFTElTVFM7IGkrKykKIAkJCVNwaW5Mb2NrSW5pdCgmKGhjdGwtPmZyZWVMaXN0W2ld Lm11dGV4KSk7CiAKLQkvKgotCSAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV4dCBncmVhdGVy IHBvd2VyIG9mIHR3byBudW1iZXIgb2YgYnVja2V0cywKLQkgKiBhc3N1bWluZyBhIGRlc2lyZWQg bWF4aW11bSBsb2FkIGZhY3RvciBvZiAxLgotCSAqLwotCW5idWNrZXRzID0gbmV4dF9wb3cyX2lu dChuZWxlbSk7Ci0KLQkvKgotCSAqIEluIGEgcGFydGl0aW9uZWQgdGFibGUsIG5idWNrZXRzIG11 c3QgYmUgYXQgbGVhc3QgZXF1YWwgdG8KLQkgKiBudW1fcGFydGl0aW9uczsgd2VyZSBpdCBsZXNz LCBrZXlzIHdpdGggYXBwYXJlbnRseSBkaWZmZXJlbnQgcGFydGl0aW9uCi0JICogbnVtYmVycyB3 b3VsZCBtYXAgdG8gdGhlIHNhbWUgYnVja2V0LCBicmVha2luZyBwYXJ0aXRpb24gaW5kZXBlbmRl bmNlLgotCSAqIChOb3JtYWxseSBuYnVja2V0cyB3aWxsIGJlIG11Y2ggYmlnZ2VyOyB0aGlzIGlz IGp1c3QgYSBzYWZldHkgY2hlY2suKQotCSAqLwotCXdoaWxlIChuYnVja2V0cyA8IGhjdGwtPm51 bV9wYXJ0aXRpb25zKQotCQluYnVja2V0cyA8PD0gMTsKKwljb21wdXRlX2J1Y2tldHNfYW5kX3Nl Z3MobmVsZW0sIGhjdGwtPm51bV9wYXJ0aXRpb25zLCBoY3RsLT5zc2l6ZSwKKwkJCQkJCQkgJm5i dWNrZXRzLCAmbnNlZ3MpOwogCiAJaGN0bC0+bWF4X2J1Y2tldCA9IGhjdGwtPmxvd19tYXNrID0g bmJ1Y2tldHMgLSAxOwogCWhjdGwtPmhpZ2hfbWFzayA9IChuYnVja2V0cyA8PCAxKSAtIDE7CiAK LQkvKgotCSAqIEZpZ3VyZSBudW1iZXIgb2YgZGlyZWN0b3J5IHNlZ21lbnRzIG5lZWRlZCwgcm91 bmQgdXAgdG8gYSBwb3dlciBvZiAyCi0JICovCi0JbnNlZ3MgPSAobmJ1Y2tldHMgLSAxKSAvIGhj dGwtPnNzaXplICsgMTsKLQluc2VncyA9IG5leHRfcG93Ml9pbnQobnNlZ3MpOwotCiAJLyoKIAkg KiBNYWtlIHN1cmUgZGlyZWN0b3J5IGlzIGJpZyBlbm91Z2guIElmIHByZS1hbGxvY2F0ZWQgZGly ZWN0b3J5IGlzIHRvbwogCSAqIHNtYWxsLCBjaG9rZSAoY2FsbGVyIHNjcmV3ZWQgdXApLgpAQCAt NzM3LDI2ICs3OTEsMjUgQEAgaW5pdF9odGFiKEhUQUIgKmhhc2hwLCBsb25nIG5lbGVtKQogCQkJ cmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIEFsbG9jYXRlIGEgZGlyZWN0b3J5ICovCisJLyoKKwkg KiBBc3NpZ24gYSBkaXJlY3RvcnkgYnkgbWFraW5nIGl0IHBvaW50IHRvIHRoZSBjb3JyZWN0IGxv Y2F0aW9uIGluIHRoZQorCSAqIHByZS1hbGxvY2F0ZWQgYnVmZmVyLgorCSAqLwogCWlmICghKGhh c2hwLT5kaXIpKQogCXsKIAkJQ3VycmVudER5bmFIYXNoQ3h0ID0gaGFzaHAtPmhjeHQ7Ci0JCWhh c2hwLT5kaXIgPSAoSEFTSFNFR01FTlQgKikKLQkJCWhhc2hwLT5hbGxvYyhoY3RsLT5kc2l6ZSAq IHNpemVvZihIQVNIU0VHTUVOVCkpOwotCQlpZiAoIWhhc2hwLT5kaXIpCi0JCQlyZXR1cm4gZmFs c2U7CisJCWhhc2hwLT5kaXIgPSAoSEFTSFNFR01FTlQgKikgSEFTSF9ESVJFQ1RPUllfUFRSKGhh c2hwKTsKIAl9CiAKLQkvKiBBbGxvY2F0ZSBpbml0aWFsIHNlZ21lbnRzICovCisJLyogQXNzaWdu IGluaXRpYWwgc2VnbWVudHMsIHdoaWNoIGFyZSBhbHNvIHByZS1hbGxvY2F0ZWQgKi8KKwlpID0g MDsKIAlmb3IgKHNlZ3AgPSBoYXNocC0+ZGlyOyBoY3RsLT5uc2VncyA8IG5zZWdzOyBoY3RsLT5u c2VncysrLCBzZWdwKyspCiAJewotCQkqc2VncCA9IHNlZ19hbGxvYyhoYXNocCk7Ci0JCWlmICgq c2VncCA9PSBOVUxMKQotCQkJcmV0dXJuIGZhbHNlOworCQkqc2VncCA9IChIQVNIU0VHTUVOVCkg SEFTSF9TRUdNRU5UX1BUUihoYXNocCwgaSsrKTsKKwkJTWVtU2V0KCpzZWdwLCAwLCBIQVNIX1NF R01FTlRfU0laRShoYXNocCkpOwogCX0KIAotCS8qIENob29zZSBudW1iZXIgb2YgZW50cmllcyB0 byBhbGxvY2F0ZSBhdCBhIHRpbWUgKi8KLQloY3RsLT5uZWxlbV9hbGxvYyA9IGNob29zZV9uZWxl bV9hbGxvYyhoY3RsLT5lbnRyeXNpemUpOworCUFzc2VydChpID09IG5zZWdzKTsKIAogI2lmZGVm IEhBU0hfREVCVUcKIAlmcHJpbnRmKHN0ZGVyciwgImluaXRfaHRhYjpcbiVzJXBcbiVzJWxkXG4l cyVsZFxuJXMlZFxuJXMlbGRcbiVzJXVcbiVzJXhcbiVzJXhcbiVzJWxkXG4iLApAQCAtODQ2LDE2 ICs4OTksNzAgQEAgaGFzaF9zZWxlY3RfZGlyc2l6ZShsb25nIG51bV9lbnRyaWVzKQogfQogCiAv KgotICogQ29tcHV0ZSB0aGUgcmVxdWlyZWQgaW5pdGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3Ig YSBzaGFyZWQtbWVtb3J5Ci0gKiBoYXNodGFibGUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4g IFdlIG5lZWQgc3BhY2UgZm9yIHRoZSBIQVNISERSCi0gKiBhbmQgZm9yIHRoZSAobm9uIGV4cGFu c2libGUpIGRpcmVjdG9yeS4KKyAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIGluaXRpYWwgbWVtb3J5 IGFsbG9jYXRpb24gZm9yIGEgaGFzaHRhYmxlIHdpdGggdGhlIGdpdmVuCisgKiBwYXJhbWV0ZXJz LiBUaGUgaGFzaCB0YWJsZSBtYXkgYmUgc2hhcmVkIG9yIHByaXZhdGUuIFdlIG5lZWQgc3BhY2Ug Zm9yIHRoZQorICogSEFTSEhEUiwgZm9yIHRoZSBkaXJlY3RvcnksIHNlZ21lbnRzIGFuZCB0aGUg aW5pdF9zaXplIGVsZW1lbnRzIGluIGJ1Y2tldHMuCisgKgorICogRm9yIHNoYXJlZCBoYXNoIHRh YmxlcyB0aGUgZGlyZWN0b3J5IHNpemUgaXMgbm9uLWV4cGFuc2l2ZS4KKyAqCisgKiBuZWxlbSBp cyB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkIGR1cmluZyBoYXNoIHRhYmxlIGNy ZWF0aW9uLgorICoKKyAqIGluaXRpYWxfbmVsZW1zIGlzIHRydWUgaWYgaXQgaXMgZGVjaWRlZCB0 byBwcmUtYWxsb2NhdGUgZWxlbWVudHMgYW5kIGZhbHNlCisgKiBvdGhlcndpc2UuCisgKgorICog Rm9yIGEgc2hhcmVkIGhhc2ggdGFibGUgaW5pdGlhbF9lbGVtcyBpcyBhbHdheXMgdHJ1ZS4KICAq LwogU2l6ZQotaGFzaF9nZXRfc2hhcmVkX3NpemUoSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKQor aGFzaF9nZXRfaW5pdF9zaXplKGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncywgYm9vbCBp bml0aWFsX2VsZW1zLCBsb25nIG5lbGVtKQogewotCUFzc2VydChmbGFncyAmIEhBU0hfRElSU0la RSk7Ci0JQXNzZXJ0KGluZm8tPmRzaXplID09IGluZm8tPm1heF9kc2l6ZSk7Ci0JcmV0dXJuIHNp emVvZihIQVNISERSKSArIGluZm8tPmRzaXplICogc2l6ZW9mKEhBU0hTRUdNRU5UKTsKKwlpbnQJ CQluYnVja2V0czsKKwlpbnQJCQluc2VnczsKKwlpbnQJCQludW1fcGFydGl0aW9uczsKKwlsb25n CQlzc2l6ZTsKKwlsb25nCQlkc2l6ZTsKKwlTaXplCQllbGVtZW50U2l6ZSA9IEhBU0hfRUxFTUVO VF9TSVpFKGluZm8pOworCWludCAJaW5pdF9zaXplID0gMDsKKworCWlmIChmbGFncyAmIEhBU0hf U0hBUkVEX01FTSkKKwl7CisJCUFzc2VydChmbGFncyAmIEhBU0hfRElSU0laRSk7CisJCUFzc2Vy dChpbmZvLT5kc2l6ZSA9PSBpbmZvLT5tYXhfZHNpemUpOworCX0KKworCS8qIE5vbi1zaGFyZWQg aGFzaCB0YWJsZXMgbWF5IG5vdCBzcGVjaWZ5IGRpciBzaXplICovCisJaWYgKCEoZmxhZ3MgJiBI QVNIX0RJUlNJWkUpKQorCXsKKwkJZHNpemUgPSBERUZfRElSU0laRTsKKwl9CisJZWxzZQorCQlk c2l6ZSA9IGluZm8tPmRzaXplOworCisJaWYgKGZsYWdzICYgSEFTSF9QQVJUSVRJT04pCisJewor CQludW1fcGFydGl0aW9ucyA9IGluZm8tPm51bV9wYXJ0aXRpb25zOworCisJCS8qIE51bWJlciBv ZiBlbnRyaWVzIHNob3VsZCBiZSBhdGxlYXN0IGVxdWFsIHRvIHRoZSBmcmVlbGlzdHMgKi8KKwkJ aWYgKG5lbGVtIDwgTlVNX0ZSRUVMSVNUUykKKwkJCW5lbGVtID0gTlVNX0ZSRUVMSVNUUzsKKwl9 CisJZWxzZQorCQludW1fcGFydGl0aW9ucyA9IDA7CisKKwlpZiAoZmxhZ3MgJiBIQVNIX1NFR01F TlQpCisJCXNzaXplID0gaW5mby0+c3NpemU7CisJZWxzZQorCQlzc2l6ZSA9IERFRl9TRUdTSVpF OworCisJY29tcHV0ZV9idWNrZXRzX2FuZF9zZWdzKG5lbGVtLCBudW1fcGFydGl0aW9ucywgc3Np emUsCisJCQkJCQkJICZuYnVja2V0cywgJm5zZWdzKTsKKworCS8qIGluaXRpYWxfZWxlbXMgYXMg ZmFsc2UgaW5kaWNhdGVzIG5vIGVsZW1lbnRzIGFyZSB0byBiZSBwcmUtYWxsb2NhdGVkICovCisJ aWYgKGluaXRpYWxfZWxlbXMpCisJCWluaXRfc2l6ZSA9IG5lbGVtOworCisJcmV0dXJuIHNpemVv ZihIQVNISERSKSArIGRzaXplICogc2l6ZW9mKEhBU0hTRUdNRU5UKQorCQkrIHNpemVvZihIQVNI QlVDS0VUKSAqIHNzaXplICogbnNlZ3MKKwkJKyBpbml0X3NpemUgKiBlbGVtZW50U2l6ZTsKIH0K IAogCkBAIC0xMjg1LDcgKzEzOTIsNyBAQCBnZXRfaGFzaF9lbnRyeShIVEFCICpoYXNocCwgaW50 IGZyZWVsaXN0X2lkeCkKIAkJICogRmFpbGluZyBiZWNhdXNlIHRoZSBuZWVkZWQgZWxlbWVudCBp cyBpbiBhIGRpZmZlcmVudCBmcmVlbGlzdCBpcwogCQkgKiBub3QgYWNjZXB0YWJsZS4KIAkJICov Ci0JCWlmICghZWxlbWVudF9hbGxvYyhoYXNocCwgaGN0bC0+bmVsZW1fYWxsb2MsIGZyZWVsaXN0 X2lkeCkpCisJCWlmICgobmV3RWxlbWVudCA9IGVsZW1lbnRfYWxsb2MoaGFzaHAsIGhjdGwtPm5l bGVtX2FsbG9jKSkgPT0gTlVMTCkKIAkJewogCQkJaW50CQkJYm9ycm93X2Zyb21faWR4OwogCkBA IC0xMzIyLDYgKzE0MjksNyBAQCBnZXRfaGFzaF9lbnRyeShIVEFCICpoYXNocCwgaW50IGZyZWVs aXN0X2lkeCkKIAkJCS8qIG5vIGVsZW1lbnRzIGF2YWlsYWJsZSB0byBib3Jyb3cgZWl0aGVyLCBz byBvdXQgb2YgbWVtb3J5ICovCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQorCQllbGVtZW50X2FkZCho YXNocCwgbmV3RWxlbWVudCwgaGN0bC0+bmVsZW1fYWxsb2MsIGZyZWVsaXN0X2lkeCk7CiAJfQog CiAJLyogcmVtb3ZlIGVudHJ5IGZyb20gZnJlZWxpc3QsIGJ1bXAgbmVudHJpZXMgKi8KQEAgLTE3 MDAsMjkgKzE4MDgsNDMgQEAgc2VnX2FsbG9jKEhUQUIgKmhhc2hwKQogfQogCiAvKgotICogYWxs b2NhdGUgc29tZSBuZXcgZWxlbWVudHMgYW5kIGxpbmsgdGhlbSBpbnRvIHRoZSBpbmRpY2F0ZWQg ZnJlZSBsaXN0CisgKiBhbGxvY2F0ZSBzb21lIG5ldyBlbGVtZW50cwogICovCi1zdGF0aWMgYm9v bAotZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwgaW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4 KQorc3RhdGljIEhBU0hFTEVNRU5UICoKK2VsZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBu ZWxlbSkKIHsKIAlIQVNISERSICAgICpoY3RsID0gaGFzaHAtPmhjdGw7CiAJU2l6ZQkJZWxlbWVu dFNpemU7Ci0JSEFTSEVMRU1FTlQgKmZpcnN0RWxlbWVudDsKLQlIQVNIRUxFTUVOVCAqdG1wRWxl bWVudDsKLQlIQVNIRUxFTUVOVCAqcHJldkVsZW1lbnQ7Ci0JaW50CQkJaTsKKwlIQVNIRUxFTUVO VCAqZmlyc3RFbGVtZW50ID0gTlVMTDsKIAogCWlmIChoYXNocC0+aXNmaXhlZCkKLQkJcmV0dXJu IGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIEVhY2ggZWxlbWVudCBoYXMgYSBIQVNIRUxF TUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEuICovCi0JZWxlbWVudFNpemUgPSBNQVhBTElHTihz aXplb2YoSEFTSEVMRU1FTlQpKSArIE1BWEFMSUdOKGhjdGwtPmVudHJ5c2l6ZSk7Ci0KKwllbGVt ZW50U2l6ZSA9IEhBU0hfRUxFTUVOVF9TSVpFKGhjdGwpOwogCUN1cnJlbnREeW5hSGFzaEN4dCA9 IGhhc2hwLT5oY3h0OwogCWZpcnN0RWxlbWVudCA9IChIQVNIRUxFTUVOVCAqKSBoYXNocC0+YWxs b2MobmVsZW0gKiBlbGVtZW50U2l6ZSk7CiAKIAlpZiAoIWZpcnN0RWxlbWVudCkKLQkJcmV0dXJu IGZhbHNlOworCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBmaXJzdEVsZW1lbnQ7Cit9CisKKy8q CisgKiBsaW5rIHRoZSBlbGVtZW50cyBhbGxvY2F0ZWQgYnkgZWxlbWVudF9hbGxvYyBpbnRvIHRo ZSBpbmRpY2F0ZWQgZnJlZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCitlbGVtZW50X2FkZChIVEFC ICpoYXNocCwgSEFTSEVMRU1FTlQgKmZpcnN0RWxlbWVudCwgaW50IG5lbGVtLCBpbnQgZnJlZWxp c3RfaWR4KQoreworCUhBU0hIRFIgICAgKmhjdGwgPSBoYXNocC0+aGN0bDsKKwlTaXplCQllbGVt ZW50U2l6ZTsKKwlIQVNIRUxFTUVOVCAqdG1wRWxlbWVudDsKKwlIQVNIRUxFTUVOVCAqcHJldkVs ZW1lbnQ7CisJaW50CQkJaTsKKworCS8qIEVhY2ggZWxlbWVudCBoYXMgYSBIQVNIRUxFTUVOVCBo ZWFkZXIgcGx1cyB1c2VyIGRhdGEuICovCisJZWxlbWVudFNpemUgPSBIQVNIX0VMRU1FTlRfU0la RShoY3RsKTsKIAogCS8qIHByZXBhcmUgdG8gbGluayBhbGwgdGhlIG5ldyBlbnRyaWVzIGludG8g dGhlIGZyZWVsaXN0ICovCiAJcHJldkVsZW1lbnQgPSBOVUxMOwpAQCAtMTc0NCw4ICsxODY2LDYg QEAgZWxlbWVudF9hbGxvYyhIVEFCICpoYXNocCwgaW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4 KQogCiAJaWYgKElTX1BBUlRJVElPTkVEKGhjdGwpKQogCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwt PmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0ZXgpOwotCi0JcmV0dXJuIHRydWU7CiB9CiAKIC8q CkBAIC0xOTU3LDMgKzIwNzcsMzQgQEAgQXRFT1N1YlhhY3RfSGFzaFRhYmxlcyhib29sIGlzQ29t bWl0LCBpbnQgbmVzdERlcHRoKQogCQl9CiAJfQogfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBu dW1iZXIgb2YgYnVja2V0cyBhbmQgc2VnbWVudHMgdG8gc3RvcmUgdGhlIGdpdmVuCisgKiBudW1i ZXIgb2YgZWxlbWVudHMgaW4gYSBoYXNoIHRhYmxlLiBTZWdtZW50cyBjb250YWluIGJ1Y2tldHMg d2hpY2gKKyAqIGluIHR1cm4gY29udGFpbiBlbGVtZW50cy4KKyAqLworc3RhdGljIHZvaWQKK2Nv bXB1dGVfYnVja2V0c19hbmRfc2Vncyhsb25nIG5lbGVtLCBsb25nIG51bV9wYXJ0aXRpb25zLCBs b25nIHNzaXplLAorCQkJCQkJIGludCAqbmJ1Y2tldHMsIGludCAqbnNlZ21lbnRzKQoreworCS8q CisJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXh0IGdyZWF0ZXIgcG93ZXIgb2YgdHdvIG51 bWJlciBvZiBidWNrZXRzLAorCSAqIGFzc3VtaW5nIGEgZGVzaXJlZCBtYXhpbXVtIGxvYWQgZmFj dG9yIG9mIDEuCisJICovCisJKm5idWNrZXRzID0gbmV4dF9wb3cyX2ludChuZWxlbSk7CisKKwkv KgorCSAqIEluIGEgcGFydGl0aW9uZWQgdGFibGUsIG5idWNrZXRzIG11c3QgYmUgYXQgbGVhc3Qg ZXF1YWwgdG8KKwkgKiBudW1fcGFydGl0aW9uczsgd2VyZSBpdCBsZXNzLCBrZXlzIHdpdGggYXBw YXJlbnRseSBkaWZmZXJlbnQgcGFydGl0aW9uCisJICogbnVtYmVycyB3b3VsZCBtYXAgdG8gdGhl IHNhbWUgYnVja2V0LCBicmVha2luZyBwYXJ0aXRpb24gaW5kZXBlbmRlbmNlLgorCSAqIChOb3Jt YWxseSBuYnVja2V0cyB3aWxsIGJlIG11Y2ggYmlnZ2VyOyB0aGlzIGlzIGp1c3QgYSBzYWZldHkg Y2hlY2suKQorCSAqLworCXdoaWxlICgoKm5idWNrZXRzKSA8IG51bV9wYXJ0aXRpb25zKQorCQko Km5idWNrZXRzKSA8PD0gMTsKKworCS8qCisJICogRmlndXJlIG51bWJlciBvZiBkaXJlY3Rvcnkg c2VnbWVudHMgbmVlZGVkLCByb3VuZCB1cCB0byBhIHBvd2VyIG9mIDIKKwkgKi8KKwkqbnNlZ21l bnRzID0gKCgqbmJ1Y2tldHMpIC0gMSkgLyBzc2l6ZSArIDE7CisJKm5zZWdtZW50cyA9IG5leHRf cG93Ml9pbnQoKm5zZWdtZW50cyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9o c2VhcmNoLmggYi9zcmMvaW5jbHVkZS91dGlscy9oc2VhcmNoLmgKaW5kZXggOTMyY2M0ZjM0ZC4u NGQ1ZjA5MDgxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaApAQCAtMTUxLDcgKzE1MSw4IEBAIGV4dGVybiB2 b2lkIGhhc2hfc2VxX3Rlcm0oSEFTSF9TRVFfU1RBVFVTICpzdGF0dXMpOwogZXh0ZXJuIHZvaWQg aGFzaF9mcmVlemUoSFRBQiAqaGFzaHApOwogZXh0ZXJuIFNpemUgaGFzaF9lc3RpbWF0ZV9zaXpl KGxvbmcgbnVtX2VudHJpZXMsIFNpemUgZW50cnlzaXplKTsKIGV4dGVybiBsb25nIGhhc2hfc2Vs ZWN0X2RpcnNpemUobG9uZyBudW1fZW50cmllcyk7Ci1leHRlcm4gU2l6ZSBoYXNoX2dldF9zaGFy ZWRfc2l6ZShIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpOworZXh0ZXJuIFNpemUgaGFzaF9nZXRf aW5pdF9zaXplKGNvbnN0IEhBU0hDVEwgKmluZm8sIGludCBmbGFncywKKwkJCQkJCQkgICBib29s IGluaXRpYWxfZWxlbXMsIGxvbmcgbmVsZW0pOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3RfSGFzaFRh Ymxlcyhib29sIGlzQ29tbWl0KTsKIGV4dGVybiB2b2lkIEF0RU9TdWJYYWN0X0hhc2hUYWJsZXMo Ym9vbCBpc0NvbW1pdCwgaW50IG5lc3REZXB0aCk7CiAKLS0gCjIuMzQuMQoK --0000000000009c77f606319749e9--