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 1txlx5-00ERu1-0q for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2025 12:03:15 +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 1txlx2-0056F7-Ew for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2025 12:03:12 +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 1txlx1-0056Ey-Oq for pgsql-hackers@lists.postgresql.org; Thu, 27 Mar 2025 12:03:12 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1txlwz-001QPH-1n for pgsql-hackers@postgresql.org; Thu, 27 Mar 2025 12:03:10 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5498d2a8b89so979104e87.1 for ; Thu, 27 Mar 2025 05:03:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743076988; x=1743681788; 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=5gnhBwXBG9c0MX8bkzHQheoyRRpAZcRqwGt+Tr8m1uU=; b=Dr6emzNWkkjY0AV8qJOD3vDPu6Xa5+ziaQaASmUg0buhYdMCCbKSGC0+gcs+5MD2xn l9iG35cJW9xM15aUYQzjIeS1QhiHvVhawevGvRoc/m4flN441c1h4K9KVmELxTP/L6Sb AfRn8CBDD8n8vhBSeFz0wgW1snZm8NI39st2zfRgpQMgqZREUds5b/2D54nmCfv3FKRH Ki2kSYALAN5J1LUIxvY8qIuazzJz3A2goUgcJiPyIzhhXeM1hY/cwqfaoYNxWt1GM0pX zKB93ZATijs8sRhH3+Bq6KqSexaR0reALIFQKFQCNPE+QtP75eOkkfJcncGkIjuNQzFq O5Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743076988; x=1743681788; 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=5gnhBwXBG9c0MX8bkzHQheoyRRpAZcRqwGt+Tr8m1uU=; b=u770dbh3N3+/lPat4ebfRdiCoUeX+RoNJenN7/xr5YuOD+lFMfMfhfo2jtGDXzTL33 HE9cnRE+mGifApePy4oXcyzoNnSdlbNMfwzlvK+NKSjsrkuP65EF+9aEoBsVeHkCS7sk +XUKv5uuP2VZphqNduG4a3Ze7jRvxtPC+NsBW9TdpW+BhCvsrDoWZpx6be2Sd6xsFj+B V2F6PuFMPVikHRdVSt5FD05sCgygisp8MBs37pCm6E0dotRlAGzJOSrkMULa0Atk3wCQ j3Lz0GFKWtxxDMwlVv/TTyIyVmz1n2JrzW+fGM9qktGkl+8U/K3ORF0S5QcEiqI1+VLq ZhEg== X-Forwarded-Encrypted: i=1; AJvYcCU4T7SY1r2nN9r8Yc/PSBber8OjIdB4DnreaGgfLNu6JLSBtyXvyepvlg566PvMMcOSnWBDyktqvLJKh4CH@postgresql.org X-Gm-Message-State: AOJu0YxvyYuN3DYSDzkc+vKzqIqowiGEohG5xtRKonmTh+WwgxQV3dEX ENXVmuNAq150Xk+ipQ2p5dqRc3CvyNc2mII6q6ethl05CSPwhBhGyUL1FnBnZlss+uuWw+Z/u14 l0nSYCx1023TAHl+zNSDx/9PO7jbLjI2l X-Gm-Gg: ASbGnctmZrpc73guDV30NjfpL4sfF1sIFSAf76PcKHRrg7fCftfYe75g4QzVQxSkk8y v4k65HfWMYdi4AFdhP35vtx7uC6GoC02kEdr7/ZKZ4St1ybHKnVK2+6JG6PxOvk9jO1/pLo6V0d V0TNIsWemQ21iu4002OXHuFxsi8b+BQA/XoBSNn+7JWGyepuK/zEy/kQl8gn9oJJABn1hfcAc= X-Google-Smtp-Source: AGHT+IEABBRtvwesSIZFJU5TtR9FcCAOFQCToYTn+gTjH6cZribRgLRjyRvRttrpyTiE2s4gGY5MNCXzj4dlWyulFhY= X-Received: by 2002:a05:6512:3d17:b0:549:4a13:3a82 with SMTP id 2adb3069b0e04-54b011d6859mr1185402e87.21.1743076987470; Thu, 27 Mar 2025 05:03:07 -0700 (PDT) MIME-Version: 1.0 References: <3e40eeec-d8bf-4496-854e-485dd901f6a2@vondra.me> In-Reply-To: <3e40eeec-d8bf-4496-854e-485dd901f6a2@vondra.me> From: Rahila Syed Date: Thu, 27 Mar 2025 17:32:55 +0530 X-Gm-Features: AQ5f1JqRKYCl8lhaM4fUQ5ctB0m7J9kiLspLY5T269wNnMoYzyn307IrwJGny00 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="000000000000a7b2a0063151bcbb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a7b2a0063151bcbb Content-Type: multipart/alternative; boundary="000000000000a7b29f063151bcb9" --000000000000a7b29f063151bcb9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tomas, > I did a review on v3 of the patch. I see there's been some minor changes > in v4 - I haven't tried to adjust my review, but I assume most of my > comments still apply. > > Thank you for your interest and review. > 1) I don't quite understand why hash_get_shared_size() got renamed to > hash_get_init_size()? Why is that needed? Does it cover only some > initial allocation, and there's additional memory allocated later? And > what's the point of the added const? > Earlier, this function was used to calculate the size for shared hash tables only. Now, it also calculates the size for a non-shared hash table. Hence the change of name. If I don't change the argument to const, I get a compilation error as follows: "passing argument 1 of =E2=80=98hash_get_init_size=E2=80=99 discards =E2=80= =98const=E2=80=99 qualifier from pointer target type." This is due to this function being called from hash_create which considers HASHCTL to be a const. > > 5) Isn't it wrong that PredicateLockShmemInit() removes the ShmemAlloc() > along with calculating the per-element requestSize, but then still does > > memset(PredXact->element, 0, requestSize); > > and > > memset(RWConflictPool->element, 0, requestSize); > > with requestSize for the whole allocation? I haven't seen any crashes, > but this seems wrong to me. I believe we can simply zero the whole > allocation right after ShmemInitStruct(), there's no need to do this for > each individual element. > Good catch. Thanks for updating. > > 5) InitProcGlobal is another example of hard-to-read code. Admittedly, > it wasn't particularly readable before, but making the lines even longer > does not make it much better ... > > I guess adding a couple macros similar to hash_create() would be one way > to improve this (and there's even a review comment in that sense), but I > chose to just do maintain a simple pointer. But if you think it should > be done differently, feel free to do so. > > LGTM, long lines have been reduced by the ptr approach. > 6) I moved the PGProcShmemSize() to be right after ProcGlobalShmemSize() > which seems to be doing a very similar thing, and to not require the > prototype. Minor detail, feel free to undo. > > LGTM. > > 7) I think the PG_CACHE_LINE_SIZE is entirely unrelated to the rest of > the patch, and I see no reason to do it in the same commit. So 0005 > removes this change, and 0006 reintroduces it separately. > > OK. > FWIW I see no justification for why the cache line padding is useful, > and it seems quite unlikely this would benefit anything, consiering it > adds padding between fairly long arrays. What kind of contention can we > get there? I don't get it. > I have done that to address a review comment upthread by Andres and the because comment above that code block also mentions need for padding. > Also, why is the patch adding padding after statusFlags (the last array > allocated in InitProcGlobal) and not between allProcs and xids? > I agree it makes more sense this way, so changing accordingly. > * > + * XXX can we rely on this matching the calculation in > hash_get_shared_size? > + * or could/should we add some asserts? Can we have at > least some sanity checks > + * on nbuckets/nsegs? > > Both places rely on compute_buckets_and_segs() to calculate nbuckets and nsegs, hence the probability of mismatch is low. I am open to adding some asserts to verify this. Do you have any suggestions in mind? Please find attached updated patches after merging all your review comments except a few discussed above. Thank you, Rahila Syed --000000000000a7b29f063151bcb9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hi Tomas,


I did a review on v3 of the patch. I see there's been some minor change= s
in v4 - I haven't tried to adjust my review, but I assume most of my comments still apply.

=C2=A0
Thank you for your interest and revi= ew.


1) I don't quite understand why hash_get_shared_size() got renamed to hash_get_init_size()? Why is that needed? Does it cover only some
initial allocation, and there's additional memory allocated later? And<= br> what's the point of the added const?

Earlier, = this function was used to calculate the size for shared hash tables only. <= br>Now, it also calculates the size for a non-shared hash table. Hence the = change
of name.

If I don't change the argument to const, I ge= t a compilation error as follows:
"passing argument 1 of =E2=80=98= hash_get_init_size=E2=80=99 discards =E2=80=98const=E2=80=99 qualifier from= pointer target type."
This is due to this function being called fr= om hash_create which considers HASHCTL to be
a const.=C2=A0



5) Isn't it wrong that PredicateLockShmemInit() removes the ShmemAlloc(= )
along with calculating the per-element requestSize, but then still does

=C2=A0 =C2=A0 memset(PredXact->element, 0, requestSize);

and

=C2=A0 =C2=A0 memset(RWConflictPool->element, 0, requestSize);

with requestSize for the whole allocation? I haven't seen any crashes,<= br> but this seems wrong to me. I believe we can simply zero the whole
allocation right after ShmemInitStruct(), there's no need to do this fo= r
each individual element.
=C2=A0
Good catch.= =C2=A0 Thanks for updating.
=C2=A0

5) InitProcGlobal is another example of hard-to-read code. Admittedly,
it wasn't particularly readable before, but making the lines even longe= r
does not make it much better ...

I guess adding a couple macros similar to hash_create() would be one way to improve this (and there's even a review comment in that sense), but = I
chose to just do maintain a simple pointer. But if you think it should
be done differently, feel free to do so.

=C2=A0
LGTM, long lines have been reduced b= y the ptr approach.=C2=A0


6) I moved the PGProcShmemSize() to be right after ProcGlobalShmemSize() which seems to be doing a very similar thing, and to not require the
prototype. Minor detail, feel free to undo.

LGTM.
=C2=A0

7) I think the PG_CACHE_LINE_SIZE is entirely unrelated to the rest of
the patch, and I see no reason to do it in the same commit. So 0005
removes this change, and 0006 reintroduces it separately.

OK.
=C2=A0
FWIW I see no justification for why the cache line padding is useful,
and it seems quite unlikely this would benefit anything, consiering it
adds padding between fairly long arrays. What kind of contention can we
get there? I don't get it.
=C2=A0
I have done t= hat to address a review comment upthread by Andres and
the because comme= nt above that code block also mentions need for
padding.

<= /div>

Also, why is the patch adding padding after statusFlags (the last array
allocated in InitProcGlobal) and not between allProcs and xids?
=C2=A0
I agree it makes more sense this way, so ch= anging accordingly.
=C2=A0
=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* XXX can we rely on th= is matching the calculation in hash_get_shared_size?
+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* or could/should we add some asserts= ? Can we have at least some sanity checks
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0* on nbuckets/nsegs?

= =C2=A0
=C2=A0Both places rely on compute_buckets_and_segs() to ca= lculate nbuckets and nsegs,
=C2=A0hence the probability of mismat= ch is low.=C2=A0 I am open to adding some asserts to verify this.
=C2=A0Do you have any suggestions in mind?=C2=A0=C2=A0

Please find = attached updated patches after merging all your review comments except
a= few discussed above.
=C2=A0
Thank you,
R= ahila Syed
--000000000000a7b29f063151bcb9-- --000000000000a7b2a0063151bcbb Content-Type: application/octet-stream; name="v5-0003-Add-cacheline-padding-between-heavily-accessed-array.patch" Content-Disposition: attachment; filename="v5-0003-Add-cacheline-padding-between-heavily-accessed-array.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8raya1m0 RnJvbSA4YjhmZTM5NWRmOTc0ZTVlN2QxYWU4NWQ5MzNjNTNlYzg2MTMyZTFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjcgTWFyIDIwMjUgMTc6MjA6MTIgKzA1MzAKU3ViamVjdDogW1BBVENIIDMv M10gQWRkIGNhY2hlbGluZSBwYWRkaW5nIGJldHdlZW4gaGVhdmlseSBhY2Nlc3NlZCBhcnJheXMK Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyB8IDkgKysrKysrLS0tCiAxIGZp bGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCmluZGV4IDZlZTQ4NDEwYjguLmVkYzVjNzQwNmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYwpAQCAtMTM1LDggKzEzNSwxMSBAQCBQR1Byb2NTaG1lbVNpemUodm9pZCkKIAl1aW50 MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhf cHJlcGFyZWRfeGFjdHM7CiAKIAlzaXplID0gVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOwor CXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7CisJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOwor CXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykp OwogCXJldHVybiBzaXplOwogfQpAQCAtMjMxLDcgKzIzNCw3IEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJCQkJCQkJCQkgICAmZm91bmQpOwogCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKLQlw dHIgPSAoY2hhciAqKXB0ciArIFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DKTsKKwlwdHIgPSAo Y2hhciAqKXB0ciArIFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DKSArIFBHX0NBQ0hFX0xJTkVf U0laRTsKIAogCU1lbVNldChwcm9jcywgMCwgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MpKTsK IAlQcm9jR2xvYmFsLT5hbGxQcm9jcyA9IHByb2NzOwpAQCAtMjQ0LDExICsyNDcsMTEgQEAgSW5p dFByb2NHbG9iYWwodm9pZCkKIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9u SWQgKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT54aWRzLCAwLCBUb3RhbFByb2NzICogc2l6 ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7Ci0JcHRyID0gKGNoYXIgKilwdHIgKyAoVG90YWxQcm9j cyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpOworCXB0ciA9IChjaGFyICopcHRyICsgVG90 YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykgKyBQR19DQUNIRV9MSU5FX1NJWkU7 CiAKIAlQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMgPSAoWGlkQ2FjaGVTdGF0dXMgKikgcHRyOwog CU1lbVNldChQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMsIDAsIFRvdGFsUHJvY3MgKiBzaXplb2Yo KlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOwotCXB0ciA9IChjaGFyICopcHRyICsgKFRvdGFs UHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOworCXB0ciA9IChjaGFy ICopcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykp ICsgUEdfQ0FDSEVfTElORV9TSVpFOwogCiAJUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MgPSAodWlu dDggKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT5zdGF0dXNGbGFncywgMCwgVG90YWxQcm9j cyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKLS0gCjIuMzQuMQoK --000000000000a7b2a0063151bcbb Content-Type: application/octet-stream; name="v5-0001-Account-for-initial-shared-memory-allocated-by-hash_.patch" Content-Disposition: attachment; filename="v5-0001-Account-for-initial-shared-memory-allocated-by-hash_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8rayl681 RnJvbSA0NGIzZmJiMDZkZDk0MzZjNTU0NWMyYTkzNDMyZDY1ZTQwMGEzNjBjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjcgTWFyIDIwMjUgMTI6NTk6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIDEv Ml0gQWNjb3VudCBmb3IgYWxsIHRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRlZCBieQogaGFzaF9j cmVhdGUKCnBnX3NobWVtX2FsbG9jYXRpb25zIHRyYWNrcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBi eSBTaG1lbUluaXRTdHJ1Y3QsCndoaWNoLCBpbiBjYXNlIG9mIHNoYXJlZCBoYXNoIHRhYmxlcywg b25seSBjb3ZlcnMgbWVtb3J5IGFsbG9jYXRlZAp0byB0aGUgaGFzaCBkaXJlY3RvcnkgYW5kIGhl YWRlciBzdHJ1Y3R1cmUuIFRoZSBoYXNoIHNlZ21lbnRzIGFuZApidWNrZXRzIGFyZSBhbGxvY2F0 ZWQgdXNpbmcgU2htZW1BbGxvY05vRXJyb3Igd2hpY2ggZG9lcyBub3QgYXR0cmlidXRlCnRoZSBh bGxvY2F0aW9ucyB0byB0aGUgaGFzaCB0YWJsZSBuYW1lLiBUaHVzLCB0aGVzZSBhbGxvY2F0aW9u cyBhcmUKbm90IHRyYWNrZWQgaW4gcGdfc2htZW1fYWxsb2NhdGlvbnMuCgpBbGxvY2F0ZSBtZW1v cnkgZm9yIHNlZ21lbnRzLCBidWNrZXRzIGFuZCBlbGVtZW50cyB0b2dldGhlciB3aXRoIHRoZQpk aXJlY3RvcnkgYW5kIGhlYWRlciBzdHJ1Y3R1cmVzLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGV4aXN0 aW5nIFNobWVtSW5kZXgKZW50cmllcyB0byByZWZsZWN0IHNpemUgb2YgaGFzaCB0YWJsZSBtb3Jl IGFjY3VyYXRlbHksIHRodXMgaW1wcm92aW5nCnRoZSBwZ19zaG1lbV9hbGxvY2F0aW9uIG1vbml0 b3JpbmcuIEFsc28sIG1ha2UgdGhpcyBjaGFuZ2UgZm9yIG5vbi0Kc2hhcmVkIGhhc2ggdGFibGUg c2luY2UgdGhleSBib3RoIHNoYXJlIHRoZSBoYXNoX2NyZWF0ZSBjb2RlLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvaGFz aC9keW5haGFzaC5jIHwgMjY1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogc3JjL2lu Y2x1ZGUvdXRpbHMvaHNlYXJjaC5oICAgICAgIHwgICAzICstCiAzIGZpbGVzIGNoYW5nZWQsIDIx MyBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpp bmRleCA4OTVhNDNmYjM5Li5kOGFlZDBiZmFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAg LTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9keW5haGFzaC5oIgogCiBzdGF0aWMgdm9pZCAqU2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNp emUgKmFsbG9jYXRlZF9zaXplKTsKIApAQCAtMzQ2LDcgKzM0Nyw3IEBAIFNobWVtSW5pdEhhc2go Y29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRleCAq LwogCiAJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KIAlsb2NhdGlvbiA9IFNo bWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCSAgIGhhc2hfZ2V0X3NoYXJlZF9zaXplKGluZm9Q LCBoYXNoX2ZsYWdzKSwKKwkJCQkJCQkgICBoYXNoX2dldF9pbml0X3NpemUoaW5mb1AsIGhhc2hf ZmxhZ3MsIGluaXRfc2l6ZSwgMCksCiAJCQkJCQkJICAgJmZvdW5kKTsKIAogCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMgYi9zcmMvYmFja2VuZC91dGls cy9oYXNoL2R5bmFoYXNoLmMKaW5kZXggM2YyNTkyOWYyZC4uMWYyMTVhMTZjNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2hhc2gvZHluYWhhc2guYwpAQCAtMjYwLDEyICsyNjAsMzYgQEAgc3RhdGljIGxvbmcgaGFz aF9hY2Nlc3NlcywKIAkJCWhhc2hfZXhwYW5zaW9uczsKICNlbmRpZgogCisKKyNkZWZpbmUgSEFT SF9FTEVNRU5UU19PRkZTRVQoaGN0bCwgbnNlZ3MpIFwKKwkoTUFYQUxJR04oc2l6ZW9mKEhBU0hI RFIpKSArIFwKKwkgKChoY3RsKS0+ZHNpemUgKiBNQVhBTElHTihzaXplb2YoSEFTSFNFR01FTlQp KSkgKyBcCisJICgoaGN0bCktPnNzaXplICogKG5zZWdzKSAqIE1BWEFMSUdOKHNpemVvZihIQVNI QlVDS0VUKSkpKQorCisjZGVmaW5lIEhBU0hfRUxFTUVOVFMoaGFzaHAsIG5zZWdzKSBcCisJKChj aGFyICopIChoYXNocCktPmhjdGwgKyBIQVNIX0VMRU1FTlRTX09GRlNFVCgoaGFzaHApLT5oY3Rs LCBuc2VncykpCisKKyNkZWZpbmUgSEFTSF9TRUdNRU5UX09GRlNFVChoY3RsLCBpZHgpIFwKKwko TUFYQUxJR04oc2l6ZW9mKEhBU0hIRFIpKSArIFwKKwkgKChoY3RsKS0+ZHNpemUgKiBNQVhBTElH TihzaXplb2YoSEFTSFNFR01FTlQpKSkgKyBcCisJICgoaGN0bCktPnNzaXplICogKGlkeCkgKiBN QVhBTElHTihzaXplb2YoSEFTSEJVQ0tFVCkpKSkKKworI2RlZmluZSBIQVNIX1NFR01FTlRfUFRS KGhhc2hwLCBpZHgpIFwKKwkoSEFTSFNFR01FTlQpICgoY2hhciAqKSAoaGFzaHApLT5oY3RsICsg SEFTSF9TRUdNRU5UX09GRlNFVCgoaGFzaHApLT5oY3RsLCAoaWR4KSkpCisKKyNkZWZpbmUgSEFT SF9TRUdNRU5UX1NJWkUoaGFzaHApCSgoaGFzaHApLT5zc2l6ZSAqIE1BWEFMSUdOKHNpemVvZihI QVNIQlVDS0VUKSkpCisKKyNkZWZpbmUJSEFTSF9ESVJFQ1RPUlkoaGFzaHApCShIQVNIU0VHTUVO VCAqKSAoKChjaGFyICopIChoYXNocCktPmhjdGwpICsgTUFYQUxJR04oc2l6ZW9mKEhBU0hIRFIp KSkKKworI2RlZmluZSBIQVNIX0VMRU1FTlRfTkVYVChoY3RsLCBudW0sIHB0cikgXAorCSgoY2hh ciAqKSAocHRyKSArICgobnVtKSAqIChNQVhBTElHTihzaXplb2YoSEFTSEVMRU1FTlQpKSArIE1B WEFMSUdOKChoY3RsKS0+ZW50cnlzaXplKSkpKQorCiAvKgogICogUHJpdmF0ZSBmdW5jdGlvbiBw cm90b3R5cGVzCiAgKi8KIHN0YXRpYyB2b2lkICpEeW5hSGFzaEFsbG9jKFNpemUgc2l6ZSk7CiBz dGF0aWMgSEFTSFNFR01FTlQgc2VnX2FsbG9jKEhUQUIgKmhhc2hwKTsKLXN0YXRpYyBib29sIGVs ZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSwgaW50IGZyZWVsaXN0X2lkeCk7Citz dGF0aWMgSEFTSEVMRU1FTlQgKmVsZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSk7 CiBzdGF0aWMgYm9vbCBkaXJfcmVhbGxvYyhIVEFCICpoYXNocCk7CiBzdGF0aWMgYm9vbCBleHBh bmRfdGFibGUoSFRBQiAqaGFzaHApOwogc3RhdGljIEhBU0hCVUNLRVQgZ2V0X2hhc2hfZW50cnko SFRBQiAqaGFzaHAsIGludCBmcmVlbGlzdF9pZHgpOwpAQCAtMjgxLDYgKzMwNSwxMSBAQCBzdGF0 aWMgdm9pZCByZWdpc3Rlcl9zZXFfc2NhbihIVEFCICpoYXNocCk7CiBzdGF0aWMgdm9pZCBkZXJl Z2lzdGVyX3NlcV9zY2FuKEhUQUIgKmhhc2hwKTsKIHN0YXRpYyBib29sIGhhc19zZXFfc2NhbnMo SFRBQiAqaGFzaHApOwogCitzdGF0aWMgdm9pZAljb21wdXRlX2J1Y2tldHNfYW5kX3NlZ3MobG9u ZyBuZWxlbSwgbG9uZyBudW1fcGFydGl0aW9ucywKKwkJCQkJCQkJCSBsb25nIHNzaXplLCAvKiBz ZWdtZW50IHNpemUgKi8KKwkJCQkJCQkJCSBpbnQgKm5idWNrZXRzLCBpbnQgKm5zZWdtZW50cyk7 CitzdGF0aWMgdm9pZCBlbGVtZW50X2FkZChIVEFCICpoYXNocCwgSEFTSEVMRU1FTlQgKmZpcnN0 RWxlbWVudCwKKwkJCQkJCWludCBuZWxlbSwgaW50IGZyZWVsaXN0X2lkeCk7CiAKIC8qCiAgKiBt ZW1vcnkgYWxsb2NhdGlvbiBzdXBwb3J0CkBAIC0zNTMsNiArMzgyLDcgQEAgaGFzaF9jcmVhdGUo Y29uc3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50 IGZsYWdzKQogewogCUhUQUIJICAgKmhhc2hwOwogCUhBU0hIRFIgICAgKmhjdGw7CisJaW50CQkJ bmVsZW1fYmF0Y2g7CiAKIAkvKgogCSAqIEhhc2ggdGFibGVzIG5vdyBhbGxvY2F0ZSBzcGFjZSBm b3Iga2V5IGFuZCBkYXRhLCBidXQgeW91IGhhdmUgdG8gc2F5CkBAIC01MDcsOSArNTM3LDE5IEBA IGhhc2hfY3JlYXRlKGNvbnN0IGNoYXIgKnRhYm5hbWUsIGxvbmcgbmVsZW0sIGNvbnN0IEhBU0hD VEwgKmluZm8sIGludCBmbGFncykKIAkJaGFzaHAtPmlzc2hhcmVkID0gZmFsc2U7CiAJfQogCisJ LyogQ2hvb3NlIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBhbGxvY2F0ZSBhdCBhIHRpbWUuICov CisJbmVsZW1fYmF0Y2ggPSBjaG9vc2VfbmVsZW1fYWxsb2MoaW5mby0+ZW50cnlzaXplKTsKKwor CS8qCisJICogQWxsb2NhdGUgdGhlIG1lbW9yeSBuZWVkZWQgZm9yIGhhc2ggaGVhZGVyLCBkaXJl Y3RvcnksIHNlZ21lbnRzIGFuZAorCSAqIGVsZW1lbnRzIHRvZ2V0aGVyLiBVc2UgcG9pbnRlciBh cml0aG1ldGljIHRvIGFycml2ZSBhdCB0aGUgc3RhcnQgb2YKKwkgKiBlYWNoIG9mIHRoZXNlIHN0 cnVjdHVyZXMgbGF0ZXIuCisJICovCiAJaWYgKCFoYXNocC0+aGN0bCkKIAl7Ci0JCWhhc2hwLT5o Y3RsID0gKEhBU0hIRFIgKikgaGFzaHAtPmFsbG9jKHNpemVvZihIQVNISERSKSk7CisJCVNpemUJ c2l6ZSA9IGhhc2hfZ2V0X2luaXRfc2l6ZShpbmZvLCBmbGFncywgbmVsZW0sIG5lbGVtX2JhdGNo KTsKKworCQloYXNocC0+aGN0bCA9IChIQVNISERSICopIGhhc2hwLT5hbGxvYyhzaXplKTsKIAkJ aWYgKCFoYXNocC0+aGN0bCkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNP REVfT1VUX09GX01FTU9SWSksCkBAIC01NTgsNiArNTk4LDkgQEAgaGFzaF9jcmVhdGUoY29uc3Qg Y2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdz KQogCWhjdGwtPmtleXNpemUgPSBpbmZvLT5rZXlzaXplOwogCWhjdGwtPmVudHJ5c2l6ZSA9IGlu Zm8tPmVudHJ5c2l6ZTsKIAorCS8qIHJlbWVtYmVyIGhvdyBtYW55IGVsZW1lbnRzIHRvIGFsbG9j YXRlIGF0IG9uY2UgKi8KKwloY3RsLT5uZWxlbV9hbGxvYyA9IG5lbGVtX2JhdGNoOworCiAJLyog bWFrZSBsb2NhbCBjb3BpZXMgb2YgaGVhdmlseS11c2VkIGNvbnN0YW50IGZpZWxkcyAqLwogCWhh c2hwLT5rZXlzaXplID0gaGN0bC0+a2V5c2l6ZTsKIAloYXNocC0+c3NpemUgPSBoY3RsLT5zc2l6 ZTsKQEAgLTU4Miw2ICs2MjUsOSBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFyICp0YWJuYW1lLCBs b25nIG5lbGVtLCBjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpCiAJCQkJCWZyZWVsaXN0 X3BhcnRpdGlvbnMsCiAJCQkJCW5lbGVtX2FsbG9jLAogCQkJCQluZWxlbV9hbGxvY19maXJzdDsK KwkJdm9pZAkgICAqcHRyID0gTlVMTDsKKwkJaW50CQkJbnNlZ3M7CisJCWludAkJCW5idWNrZXRz OwogCiAJCS8qCiAJCSAqIElmIGhhc2ggdGFibGUgaXMgcGFydGl0aW9uZWQsIGdpdmUgZWFjaCBm cmVlbGlzdCBhbiBlcXVhbCBzaGFyZSBvZgpAQCAtNTkyLDYgKzYzOCwxNiBAQCBoYXNoX2NyZWF0 ZShjb25zdCBjaGFyICp0YWJuYW1lLCBsb25nIG5lbGVtLCBjb25zdCBIQVNIQ1RMICppbmZvLCBp bnQgZmxhZ3MpCiAJCWVsc2UKIAkJCWZyZWVsaXN0X3BhcnRpdGlvbnMgPSAxOwogCisJCWNvbXB1 dGVfYnVja2V0c19hbmRfc2VncyhuZWxlbSwgaGN0bC0+bnVtX3BhcnRpdGlvbnMsIGhjdGwtPnNz aXplLAorCQkJCQkJCQkgJm5idWNrZXRzLCAmbnNlZ3MpOworCisJCS8qCisJCSAqIENhbGN1bGF0 ZSB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRvIGZpbmQgdGhlIGZpcnN0IHBhcnRpdGlvbiBvZgorCQkg KiBlbGVtZW50cy4KKwkJICogV2UgaGF2ZSB0byBza2lwIHNwYWNlIGZvciB0aGUgaGVhZGVyLCBz ZWdtZW50cyBhbmQgYnVja2V0cy4KKyAJCSAqLworCQlwdHIgPSBIQVNIX0VMRU1FTlRTKGhhc2hw LCBuc2Vncyk7CisKIAkJbmVsZW1fYWxsb2MgPSBuZWxlbSAvIGZyZWVsaXN0X3BhcnRpdGlvbnM7 CiAJCWlmIChuZWxlbV9hbGxvYyA8PSAwKQogCQkJbmVsZW1fYWxsb2MgPSAxOwpAQCAtNjEwLDEw ICs2NjYsMTcgQEAgaGFzaF9jcmVhdGUoY29uc3QgY2hhciAqdGFibmFtZSwgbG9uZyBuZWxlbSwg Y29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKQogCQl7CiAJCQlpbnQJCQl0ZW1wID0gKGkg PT0gMCkgPyBuZWxlbV9hbGxvY19maXJzdCA6IG5lbGVtX2FsbG9jOwogCi0JCQlpZiAoIWVsZW1l bnRfYWxsb2MoaGFzaHAsIHRlbXAsIGkpKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJy Y29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkJIGVycm1zZygib3V0IG9mIG1lbW9y eSIpKSk7CisJCQkvKgorCQkJICogQXNzaWduIHRoZSBjb3JyZWN0IGxvY2F0aW9uIG9mIGVhY2gg cGFyaXRpb24gd2l0aGluIGEKKwkJCSAqIHByZS1hbGxvY2F0ZWQgYnVmZmVyLgorCQkJICoKKwkJ CSAqIEFjdHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBoYXBwZW5zIGluIFNobWVtSW5pdEhhc2ggZm9y CisJCQkgKiBzaGFyZWQgaGFzaCB0YWJsZXMgb3IgZWFybGllciBpbiB0aGlzIGZ1bmN0aW9uIGZv ciBub24tc2hhcmVkCisJCQkgKiBoYXNoIHRhYmxlcy4KKwkJCSAqIFdlIGp1c3QgbmVlZCB0byBz cGxpdCB0aGF0IGFsbG9jYXRpb24gcGVyLWJhdGNoIGZyZWVsaXN0cy4KKwkJCSAqLworCQkJZWxl bWVudF9hZGQoaGFzaHAsIChIQVNIRUxFTUVOVCAqKSBwdHIsIHRlbXAsIGkpOworCQkJcHRyID0g SEFTSF9FTEVNRU5UX05FWFQoaGN0bCwgdGVtcCwgcHRyKTsKIAkJfQogCX0KIApAQCAtNzAxLDMw ICs3NjQsMTIgQEAgaW5pdF9odGFiKEhUQUIgKmhhc2hwLCBsb25nIG5lbGVtKQogCQlmb3IgKGkg PSAwOyBpIDwgTlVNX0ZSRUVMSVNUUzsgaSsrKQogCQkJU3BpbkxvY2tJbml0KCYoaGN0bC0+ZnJl ZUxpc3RbaV0ubXV0ZXgpKTsKIAotCS8qCi0JICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXh0 IGdyZWF0ZXIgcG93ZXIgb2YgdHdvIG51bWJlciBvZiBidWNrZXRzLAotCSAqIGFzc3VtaW5nIGEg ZGVzaXJlZCBtYXhpbXVtIGxvYWQgZmFjdG9yIG9mIDEuCi0JICovCi0JbmJ1Y2tldHMgPSBuZXh0 X3BvdzJfaW50KG5lbGVtKTsKLQotCS8qCi0JICogSW4gYSBwYXJ0aXRpb25lZCB0YWJsZSwgbmJ1 Y2tldHMgbXVzdCBiZSBhdCBsZWFzdCBlcXVhbCB0bwotCSAqIG51bV9wYXJ0aXRpb25zOyB3ZXJl IGl0IGxlc3MsIGtleXMgd2l0aCBhcHBhcmVudGx5IGRpZmZlcmVudCBwYXJ0aXRpb24KLQkgKiBu dW1iZXJzIHdvdWxkIG1hcCB0byB0aGUgc2FtZSBidWNrZXQsIGJyZWFraW5nIHBhcnRpdGlvbiBp bmRlcGVuZGVuY2UuCi0JICogKE5vcm1hbGx5IG5idWNrZXRzIHdpbGwgYmUgbXVjaCBiaWdnZXI7 IHRoaXMgaXMganVzdCBhIHNhZmV0eSBjaGVjay4pCi0JICovCi0Jd2hpbGUgKG5idWNrZXRzIDwg aGN0bC0+bnVtX3BhcnRpdGlvbnMpCi0JCW5idWNrZXRzIDw8PSAxOworCWNvbXB1dGVfYnVja2V0 c19hbmRfc2VncyhuZWxlbSwgaGN0bC0+bnVtX3BhcnRpdGlvbnMsIGhjdGwtPnNzaXplLAorCQkJ CQkJCSAmbmJ1Y2tldHMsICZuc2Vncyk7CiAKIAloY3RsLT5tYXhfYnVja2V0ID0gaGN0bC0+bG93 X21hc2sgPSBuYnVja2V0cyAtIDE7CiAJaGN0bC0+aGlnaF9tYXNrID0gKG5idWNrZXRzIDw8IDEp IC0gMTsKIAotCS8qCi0JICogRmlndXJlIG51bWJlciBvZiBkaXJlY3Rvcnkgc2VnbWVudHMgbmVl ZGVkLCByb3VuZCB1cCB0byBhIHBvd2VyIG9mIDIKLQkgKi8KLQluc2VncyA9IChuYnVja2V0cyAt IDEpIC8gaGN0bC0+c3NpemUgKyAxOwotCW5zZWdzID0gbmV4dF9wb3cyX2ludChuc2Vncyk7Ci0K IAkvKgogCSAqIE1ha2Ugc3VyZSBkaXJlY3RvcnkgaXMgYmlnIGVub3VnaC4gSWYgcHJlLWFsbG9j YXRlZCBkaXJlY3RvcnkgaXMgdG9vCiAJICogc21hbGwsIGNob2tlIChjYWxsZXIgc2NyZXdlZCB1 cCkuCkBAIC03MzcsMjYgKzc4MiwyNSBAQCBpbml0X2h0YWIoSFRBQiAqaGFzaHAsIGxvbmcgbmVs ZW0pCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogQWxsb2NhdGUgYSBkaXJlY3RvcnkgKi8K KwkvKgorCSAqIEFzc2lnbiBhIGRpcmVjdG9yeSBieSBtYWtpbmcgaXQgcG9pbnQgdG8gdGhlIGNv cnJlY3QgbG9jYXRpb24gaW4gdGhlCisJICogcHJlLWFsbG9jYXRlZCBidWZmZXIuCisJICovCiAJ aWYgKCEoaGFzaHAtPmRpcikpCiAJewogCQlDdXJyZW50RHluYUhhc2hDeHQgPSBoYXNocC0+aGN4 dDsKLQkJaGFzaHAtPmRpciA9IChIQVNIU0VHTUVOVCAqKQotCQkJaGFzaHAtPmFsbG9jKGhjdGwt PmRzaXplICogc2l6ZW9mKEhBU0hTRUdNRU5UKSk7Ci0JCWlmICghaGFzaHAtPmRpcikKLQkJCXJl dHVybiBmYWxzZTsKKwkJaGFzaHAtPmRpciA9IEhBU0hfRElSRUNUT1JZKGhhc2hwKTsKIAl9CiAK LQkvKiBBbGxvY2F0ZSBpbml0aWFsIHNlZ21lbnRzICovCisJLyogQXNzaWduIGluaXRpYWwgc2Vn bWVudHMsIHdoaWNoIGFyZSBhbHNvIHByZS1hbGxvY2F0ZWQgKi8KKwlpID0gMDsKIAlmb3IgKHNl Z3AgPSBoYXNocC0+ZGlyOyBoY3RsLT5uc2VncyA8IG5zZWdzOyBoY3RsLT5uc2VncysrLCBzZWdw KyspCiAJewotCQkqc2VncCA9IHNlZ19hbGxvYyhoYXNocCk7Ci0JCWlmICgqc2VncCA9PSBOVUxM KQotCQkJcmV0dXJuIGZhbHNlOworCQkqc2VncCA9IEhBU0hfU0VHTUVOVF9QVFIoaGFzaHAsIGkr Kyk7CisJCU1lbVNldCgqc2VncCwgMCwgSEFTSF9TRUdNRU5UX1NJWkUoaGFzaHApKTsKIAl9CiAK LQkvKiBDaG9vc2UgbnVtYmVyIG9mIGVudHJpZXMgdG8gYWxsb2NhdGUgYXQgYSB0aW1lICovCi0J aGN0bC0+bmVsZW1fYWxsb2MgPSBjaG9vc2VfbmVsZW1fYWxsb2MoaGN0bC0+ZW50cnlzaXplKTsK KwlBc3NlcnQoaSA9PSBuc2Vncyk7CiAKICNpZmRlZiBIQVNIX0RFQlVHCiAJZnByaW50ZihzdGRl cnIsICJpbml0X2h0YWI6XG4lcyVwXG4lcyVsZFxuJXMlbGRcbiVzJWRcbiVzJWxkXG4lcyV1XG4l cyV4XG4lcyV4XG4lcyVsZFxuIiwKQEAgLTg0NywxNSArODkxLDc5IEBAIGhhc2hfc2VsZWN0X2Rp cnNpemUobG9uZyBudW1fZW50cmllcykKIAogLyoKICAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIGlu aXRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGEgc2hhcmVkLW1lbW9yeQotICogaGFzaHRhYmxl IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBXZSBuZWVkIHNwYWNlIGZvciB0aGUgSEFTSEhE UgotICogYW5kIGZvciB0aGUgKG5vbiBleHBhbnNpYmxlKSBkaXJlY3RvcnkuCisgKiBvciBub24t c2hhcmVkIG1lbW9yeSBoYXNodGFibGUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAqIFdl IG5lZWQgc3BhY2UgZm9yIHRoZSBIQVNISERSLCBmb3IgdGhlIGRpcmVjdG9yeSwgc2VnbWVudHMg YW5kCisgKiB0aGUgaW5pdF9zaXplIGVsZW1lbnRzIGluIGJ1Y2tldHMuCQorICogCisgKiBGb3Ig c2hhcmVkIGhhc2ggdGFibGVzIHRoZSBkaXJlY3Rvcnkgc2l6ZSBpcyBub24tZXhwYW5zaXZlLgor ICogCisgKiBpbml0X3NpemUgc2hvdWxkIG1hdGNoIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVu dHMgYWxsb2NhdGVkCisgKiBkdXJpbmcgaGFzaCB0YWJsZSBjcmVhdGlvbiwgaXQgY291bGQgYmUg emVybyBmb3Igbm9uLXNoYXJlZCBoYXNoCisgKiB0YWJsZXMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1 ZSBvZiBuZWxlbV9hbGxvYy4gRm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqIHNlZSBjb21tZW50cyB3 aXRoaW4gdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBuZWxlbV9hbGxvYyBwYXJhbWV0ZXIgaXMgbm90 IHJlbGV2YW50IGZvciBzaGFyZWQgaGFzaCB0YWJsZXMuCiAgKi8KIFNpemUKLWhhc2hfZ2V0X3No YXJlZF9zaXplKEhBU0hDVEwgKmluZm8sIGludCBmbGFncykKK2hhc2hfZ2V0X2luaXRfc2l6ZShj b25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MsIGxvbmcgaW5pdF9zaXplLCBpbnQgbmVsZW1f YWxsb2MpCiB7Ci0JQXNzZXJ0KGZsYWdzICYgSEFTSF9ESVJTSVpFKTsKLQlBc3NlcnQoaW5mby0+ ZHNpemUgPT0gaW5mby0+bWF4X2RzaXplKTsKLQlyZXR1cm4gc2l6ZW9mKEhBU0hIRFIpICsgaW5m by0+ZHNpemUgKiBzaXplb2YoSEFTSFNFR01FTlQpOworCWludAkJCW5idWNrZXRzOworCWludAkJ CW5zZWdzOworCWludAkJCW51bV9wYXJ0aXRpb25zOworCWxvbmcJCXNzaXplOworCWxvbmcJCWRz aXplOworCWJvb2wJCWVsZW1lbnRfYWxsb2MgPSB0cnVlOyAvKkFsd2F5cyB0cnVlIGZvciBzaGFy ZWQgaGFzaCB0YWJsZXMgKi8KKwlTaXplCQllbGVtZW50U2l6ZSA9IE1BWEFMSUdOKHNpemVvZihI QVNIRUxFTUVOVCkpICsgTUFYQUxJR04oaW5mby0+ZW50cnlzaXplKTsKKworCS8qCisJICogRm9y IG5vbi1zaGFyZWQgaGFzaCB0YWJsZXMsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRz IGFyZQorCSAqIGFsbG9jYXRlZCBvbmx5IGlmIHRoZXkgYXJlIGxlc3MgdGhhbiBuZWxlbV9hbGxv Yy4gSW4gYW55IGNhc2UsIHRoZQorCSAqIGluaXRfc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhl IG51bWJlciBvZiBlbGVtZW50cyBhZGRlZCB1c2luZworCSAqIGVsZW1lbnRfYWRkKCkgaW4gaGFz aF9jcmVhdGUuCisJICovCisJaWYgKCEoZmxhZ3MgJiBIQVNIX1NIQVJFRF9NRU0pKQorCXsKKwkJ aWYgKGluaXRfc2l6ZSA+IG5lbGVtX2FsbG9jKQorCQkJZWxlbWVudF9hbGxvYyA9IGZhbHNlOwor CX0KKwllbHNlCisJeworCQlBc3NlcnQoZmxhZ3MgJiBIQVNIX0RJUlNJWkUpOworCQlBc3NlcnQo aW5mby0+ZHNpemUgPT0gaW5mby0+bWF4X2RzaXplKTsKKwl9CisJLyogTm9uLXNoYXJlZCBoYXNo IHRhYmxlcyBtYXkgbm90IHNwZWNpZnkgZGlyIHNpemUgKi8KKwlpZiAoIShmbGFncyAmIEhBU0hf RElSU0laRSkpCisJeworCQlkc2l6ZSA9IERFRl9ESVJTSVpFOworCX0KKwllbHNlCisJCWRzaXpl ID0gaW5mby0+ZHNpemU7CisKKwlpZiAoZmxhZ3MgJiBIQVNIX1BBUlRJVElPTikKKwl7CisJCW51 bV9wYXJ0aXRpb25zID0gaW5mby0+bnVtX3BhcnRpdGlvbnM7CisKKwkJLyogTnVtYmVyIG9mIGVu dHJpZXMgc2hvdWxkIGJlIGF0bGVhc3QgZXF1YWwgdG8gdGhlIGZyZWVsaXN0cyAqLworCQlpZiAo aW5pdF9zaXplIDwgTlVNX0ZSRUVMSVNUUykKKwkJCWluaXRfc2l6ZSA9IE5VTV9GUkVFTElTVFM7 CisJfQorCWVsc2UKKwkJbnVtX3BhcnRpdGlvbnMgPSAwOworCisJaWYgKGZsYWdzICYgSEFTSF9T RUdNRU5UKQorCQlzc2l6ZSA9IGluZm8tPnNzaXplOworCWVsc2UKKwkJc3NpemUgPSBERUZfU0VH U0laRTsKKworCWNvbXB1dGVfYnVja2V0c19hbmRfc2Vncyhpbml0X3NpemUsIG51bV9wYXJ0aXRp b25zLCBzc2l6ZSwKKwkJCQkJCQkgJm5idWNrZXRzLCAmbnNlZ3MpOworCisJaWYgKCFlbGVtZW50 X2FsbG9jKQorCQlpbml0X3NpemUgPSAwOworCisJcmV0dXJuIE1BWEFMSUdOKHNpemVvZihIQVNI SERSKSkgKyBkc2l6ZSAqIE1BWEFMSUdOKHNpemVvZihIQVNIU0VHTUVOVCkpICsKKwkJKyBNQVhB TElHTihzaXplb2YoSEFTSEJVQ0tFVCkpICogc3NpemUgKiBuc2VncworCQkrIGluaXRfc2l6ZSAq IGVsZW1lbnRTaXplOwogfQogCiAKQEAgLTEyODUsNyArMTM5Myw4IEBAIGdldF9oYXNoX2VudHJ5 KEhUQUIgKmhhc2hwLCBpbnQgZnJlZWxpc3RfaWR4KQogCQkgKiBGYWlsaW5nIGJlY2F1c2UgdGhl IG5lZWRlZCBlbGVtZW50IGlzIGluIGEgZGlmZmVyZW50IGZyZWVsaXN0IGlzCiAJCSAqIG5vdCBh Y2NlcHRhYmxlLgogCQkgKi8KLQkJaWYgKCFlbGVtZW50X2FsbG9jKGhhc2hwLCBoY3RsLT5uZWxl bV9hbGxvYywgZnJlZWxpc3RfaWR4KSkKKwkJbmV3RWxlbWVudCA9IGVsZW1lbnRfYWxsb2MoaGFz aHAsIGhjdGwtPm5lbGVtX2FsbG9jKTsKKwkJaWYgKG5ld0VsZW1lbnQgPT0gTlVMTCkKIAkJewog CQkJaW50CQkJYm9ycm93X2Zyb21faWR4OwogCkBAIC0xMzIyLDYgKzE0MzEsNyBAQCBnZXRfaGFz aF9lbnRyeShIVEFCICpoYXNocCwgaW50IGZyZWVsaXN0X2lkeCkKIAkJCS8qIG5vIGVsZW1lbnRz IGF2YWlsYWJsZSB0byBib3Jyb3cgZWl0aGVyLCBzbyBvdXQgb2YgbWVtb3J5ICovCiAJCQlyZXR1 cm4gTlVMTDsKIAkJfQorCQllbGVtZW50X2FkZChoYXNocCwgbmV3RWxlbWVudCwgaGN0bC0+bmVs ZW1fYWxsb2MsIGZyZWVsaXN0X2lkeCk7CiAJfQogCiAJLyogcmVtb3ZlIGVudHJ5IGZyb20gZnJl ZWxpc3QsIGJ1bXAgbmVudHJpZXMgKi8KQEAgLTE3MDAsMzAgKzE4MTAsNDMgQEAgc2VnX2FsbG9j KEhUQUIgKmhhc2hwKQogfQogCiAvKgotICogYWxsb2NhdGUgc29tZSBuZXcgZWxlbWVudHMgYW5k IGxpbmsgdGhlbSBpbnRvIHRoZSBpbmRpY2F0ZWQgZnJlZSBsaXN0CisgKiBhbGxvY2F0ZSBzb21l IG5ldyBlbGVtZW50cwogICovCi1zdGF0aWMgYm9vbAotZWxlbWVudF9hbGxvYyhIVEFCICpoYXNo cCwgaW50IG5lbGVtLCBpbnQgZnJlZWxpc3RfaWR4KQorc3RhdGljIEhBU0hFTEVNRU5UICoKK2Vs ZW1lbnRfYWxsb2MoSFRBQiAqaGFzaHAsIGludCBuZWxlbSkKIHsKIAlIQVNISERSICAgICpoY3Rs ID0gaGFzaHAtPmhjdGw7CiAJU2l6ZQkJZWxlbWVudFNpemU7Ci0JSEFTSEVMRU1FTlQgKmZpcnN0 RWxlbWVudDsKLQlIQVNIRUxFTUVOVCAqdG1wRWxlbWVudDsKLQlIQVNIRUxFTUVOVCAqcHJldkVs ZW1lbnQ7Ci0JaW50CQkJaTsKKwlIQVNIRUxFTUVOVCAqZmlyc3RFbGVtZW50ID0gTlVMTDsKIAog CWlmIChoYXNocC0+aXNmaXhlZCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAog CS8qIEVhY2ggZWxlbWVudCBoYXMgYSBIQVNIRUxFTUVOVCBoZWFkZXIgcGx1cyB1c2VyIGRhdGEu ICovCiAJZWxlbWVudFNpemUgPSBNQVhBTElHTihzaXplb2YoSEFTSEVMRU1FTlQpKSArIE1BWEFM SUdOKGhjdGwtPmVudHJ5c2l6ZSk7Ci0KIAlDdXJyZW50RHluYUhhc2hDeHQgPSBoYXNocC0+aGN4 dDsKIAlmaXJzdEVsZW1lbnQgPSAoSEFTSEVMRU1FTlQgKikgaGFzaHAtPmFsbG9jKG5lbGVtICog ZWxlbWVudFNpemUpOwogCiAJaWYgKCFmaXJzdEVsZW1lbnQpCi0JCXJldHVybiBmYWxzZTsKKwkJ cmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZmlyc3RFbGVtZW50OworfQorCisvKgorICogTGluayB0 aGUgZWxlbWVudHMgYWxsb2NhdGVkIGJ5IGVsZW1lbnRfYWxsb2MgaW50byB0aGUgaW5kaWNhdGVk IGZyZWUgbGlzdAorICovCitzdGF0aWMgdm9pZAorZWxlbWVudF9hZGQoSFRBQiAqaGFzaHAsIEhB U0hFTEVNRU5UICpmaXJzdEVsZW1lbnQsIGludCBuZWxlbSwgaW50IGZyZWVsaXN0X2lkeCkKK3sK KwlIQVNISERSICAgICpoY3RsID0gaGFzaHAtPmhjdGw7CisJU2l6ZQkJZWxlbWVudFNpemU7CisJ SEFTSEVMRU1FTlQgKnRtcEVsZW1lbnQ7CisJSEFTSEVMRU1FTlQgKnByZXZFbGVtZW50OworCWlu dAkJCWk7CiAKKwkvKiBFYWNoIGVsZW1lbnQgaGFzIGEgSEFTSEVMRU1FTlQgaGVhZGVyIHBsdXMg dXNlciBkYXRhLiAqLworCWVsZW1lbnRTaXplID0gTUFYQUxJR04oc2l6ZW9mKEhBU0hFTEVNRU5U KSkgKyBNQVhBTElHTihoY3RsLT5lbnRyeXNpemUpOwogCS8qIHByZXBhcmUgdG8gbGluayBhbGwg dGhlIG5ldyBlbnRyaWVzIGludG8gdGhlIGZyZWVsaXN0ICovCiAJcHJldkVsZW1lbnQgPSBOVUxM OwogCXRtcEVsZW1lbnQgPSBmaXJzdEVsZW1lbnQ7CkBAIC0xNzQ0LDggKzE4NjcsNiBAQCBlbGVt ZW50X2FsbG9jKEhUQUIgKmhhc2hwLCBpbnQgbmVsZW0sIGludCBmcmVlbGlzdF9pZHgpCiAKIAlp ZiAoSVNfUEFSVElUSU9ORUQoaGN0bCkpCiAJCVNwaW5Mb2NrUmVsZWFzZSgmaGN0bC0+ZnJlZUxp c3RbZnJlZWxpc3RfaWR4XS5tdXRleCk7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTE5 NTcsMyArMjA3OCwzNSBAQCBBdEVPU3ViWGFjdF9IYXNoVGFibGVzKGJvb2wgaXNDb21taXQsIGlu dCBuZXN0RGVwdGgpCiAJCX0KIAl9CiB9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBv ZiBidWNrZXRzIGFuZCBzZWdtZW50cyB0byBzdG9yZSB0aGUgZ2l2ZW4KKyAqIG51bWJlciBvZiBl bGVtZW50cyBpbiBhIGhhc2ggdGFibGUuIFNlZ21lbnRzIGNvbnRhaW4gYnVja2V0cyB3aGljaAor ICogaW4gdHVybiBjb250YWluIGVsZW1lbnRzLgorICovCitzdGF0aWMgdm9pZAorY29tcHV0ZV9i dWNrZXRzX2FuZF9zZWdzKGxvbmcgbmVsZW0sIGxvbmcgbnVtX3BhcnRpdGlvbnMsIGxvbmcgc3Np emUsCisJCQkJCQkgaW50ICpuYnVja2V0cywgaW50ICpuc2VnbWVudHMpCit7CisJLyoKKwkgKiBB bGxvY2F0ZSBzcGFjZSBmb3IgdGhlIG5leHQgZ3JlYXRlciBwb3dlciBvZiB0d28gbnVtYmVyIG9m IGJ1Y2tldHMsCisJICogYXNzdW1pbmcgYSBkZXNpcmVkIG1heGltdW0gbG9hZCBmYWN0b3Igb2Yg MS4KKwkgKi8KKwkqbmJ1Y2tldHMgPSBuZXh0X3BvdzJfaW50KG5lbGVtKTsKKworCS8qCisJICog SW4gYSBwYXJ0aXRpb25lZCB0YWJsZSwgbmJ1Y2tldHMgbXVzdCBiZSBhdCBsZWFzdCBlcXVhbCB0 bworCSAqIG51bV9wYXJ0aXRpb25zOyB3ZXJlIGl0IGxlc3MsIGtleXMgd2l0aCBhcHBhcmVudGx5 IGRpZmZlcmVudCBwYXJ0aXRpb24KKwkgKiBudW1iZXJzIHdvdWxkIG1hcCB0byB0aGUgc2FtZSBi dWNrZXQsIGJyZWFraW5nIHBhcnRpdGlvbiBpbmRlcGVuZGVuY2UuCisJICogKE5vcm1hbGx5IG5i dWNrZXRzIHdpbGwgYmUgbXVjaCBiaWdnZXI7IHRoaXMgaXMganVzdCBhIHNhZmV0eSBjaGVjay4p CisJICovCisJd2hpbGUgKCgqbmJ1Y2tldHMpIDwgbnVtX3BhcnRpdGlvbnMpCisJCSgqbmJ1Y2tl dHMpIDw8PSAxOworCisKKwkvKgorCSAqIEZpZ3VyZSBudW1iZXIgb2YgZGlyZWN0b3J5IHNlZ21l bnRzIG5lZWRlZCwgcm91bmQgdXAgdG8gYSBwb3dlciBvZiAyCisJICovCisJKm5zZWdtZW50cyA9 ICgoKm5idWNrZXRzKSAtIDEpIC8gc3NpemUgKyAxOworCSpuc2VnbWVudHMgPSBuZXh0X3BvdzJf aW50KCpuc2VnbWVudHMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJj aC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oCmluZGV4IDkzMmNjNGYzNGQuLjc5Yjk1 OWZmYzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9oc2VhcmNoLmgKQEAgLTE1MSw3ICsxNTEsOCBAQCBleHRlcm4gdm9pZCBo YXNoX3NlcV90ZXJtKEhBU0hfU0VRX1NUQVRVUyAqc3RhdHVzKTsKIGV4dGVybiB2b2lkIGhhc2hf ZnJlZXplKEhUQUIgKmhhc2hwKTsKIGV4dGVybiBTaXplIGhhc2hfZXN0aW1hdGVfc2l6ZShsb25n IG51bV9lbnRyaWVzLCBTaXplIGVudHJ5c2l6ZSk7CiBleHRlcm4gbG9uZyBoYXNoX3NlbGVjdF9k aXJzaXplKGxvbmcgbnVtX2VudHJpZXMpOwotZXh0ZXJuIFNpemUgaGFzaF9nZXRfc2hhcmVkX3Np emUoSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKTsKK2V4dGVybiBTaXplIGhhc2hfZ2V0X2luaXRf c2l6ZShjb25zdCBIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MsCisJCQkJCQkJICAgbG9uZyBpbml0 X3NpemUsIGludCBuZWxlbV9hbGxvYyk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9IYXNoVGFibGVz KGJvb2wgaXNDb21taXQpOwogZXh0ZXJuIHZvaWQgQXRFT1N1YlhhY3RfSGFzaFRhYmxlcyhib29s IGlzQ29tbWl0LCBpbnQgbmVzdERlcHRoKTsKIAotLSAKMi4zNC4xCgo= --000000000000a7b2a0063151bcbb Content-Type: application/octet-stream; name="v5-0002-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Disposition: attachment; filename="v5-0002-Replace-ShmemAlloc-calls-by-ShmemInitStruct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8rayt8w2 RnJvbSA2NWRhYjg1ZTNjMGQ2ODg5Y2ZhMDJkYTI5YzJiMTFkNmRkMzliNTZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjcgTWFyIDIwMjUgMTY6NDM6MjggKzA1MzAKU3ViamVjdDogW1BBVENIIDIv Ml0gUmVwbGFjZSBTaG1lbUFsbG9jIGNhbGxzIGJ5IFNobWVtSW5pdFN0cnVjdAoKVGhlIHNoYXJl ZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IFNobWVtQWxsb2MgaXMgbm90IHRyYWNrZWQKYnkgcGdfc2ht ZW1fYWxsb2NhdGlvbnMuIFRoaXMgY29tbWl0IHJlcGxhY2VzIG1vc3Qgb2YgdGhlCmNhbGxzIHRv IFNobWVtQWxsb2MgYnkgU2htZW1Jbml0U3RydWN0IHRvIGFzc29jaWF0ZSBhIG5hbWUKd2l0aCB0 aGUgYWxsb2NhdGlvbnMgYW5kIGVuc3VyZSB0aGF0IHRoZXkgZ2V0IHRyYWNrZWQgYnkKcGdfc2ht ZW1fYWxsb2NhdGlvbnMuIEl0IGFsc28gbWVyZ2VzIHNldmVyYWwgc21hbGxlcgpTaG1lbUFsbG9j IGNhbGxzIGludG8gbGFyZ2VyIFNobWVtSW5pdFN0cnVjdCB0byBhbGxvY2F0ZQphbmQgdHJhY2sg YWxsIHRoZSByZWxhdGVkIG1lbW9yeSBhbGxvY2F0aW9ucyB1bmRlciBzaW5nbGUKY2FsbC4KLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgfCAyNyArKysrKysrKystLS0t LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgIHwgNTYgKysrKysrKysrKysr KysrKysrKysrKystLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspLCAyMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGlj YXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggNWIyMWEw NTM5OC4uZGUyNjI5ZmRmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAt MTIyNiwxNCArMTIyNiwyMCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJICovCiAJ bWF4X3RhYmxlX3NpemUgKj0gMTA7CiAKKwlyZXF1ZXN0U2l6ZSA9IGFkZF9zaXplKFByZWRYYWN0 TGlzdERhdGFTaXplLAorCQkJCQkJICAgKG11bF9zaXplKChTaXplKSBtYXhfdGFibGVfc2l6ZSwK KwkJCQkJCQkJCSBzaXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKSk7CiAJUHJlZFhhY3QgPSBTaG1l bUluaXRTdHJ1Y3QoIlByZWRYYWN0TGlzdCIsCi0JCQkJCQkJICAgUHJlZFhhY3RMaXN0RGF0YVNp emUsCisJCQkJCQkJICAgcmVxdWVzdFNpemUsCiAJCQkJCQkJICAgJmZvdW5kKTsKIAlBc3NlcnQo Zm91bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOwogCWlmICghZm91bmQpCiAJewogCQlpbnQJCQlp OwogCisJCS8qIHJlc2V0IGV2ZXJ5dGhpbmcsIGJvdGggdGhlIGhlYWRlciBhbmQgdGhlIGVsZW1l bnQgKi8KKwkJbWVtc2V0KFByZWRYYWN0LCAwLCByZXF1ZXN0U2l6ZSk7CisKIAkJZGxpc3RfaW5p dCgmUHJlZFhhY3QtPmF2YWlsYWJsZUxpc3QpOwogCQlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YWN0 aXZlTGlzdCk7CiAJCVByZWRYYWN0LT5TeGFjdEdsb2JhbFhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKQEAgLTEyNDIsMTEgKzEyNDgsOCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQp CiAJCVByZWRYYWN0LT5MYXN0U3hhY3RDb21taXRTZXFObyA9IEZpcnN0Tm9ybWFsU2VyQ29tbWl0 U2VxTm8gLSAxOwogCQlQcmVkWGFjdC0+Q2FuUGFydGlhbENsZWFyVGhyb3VnaCA9IDA7CiAJCVBy ZWRYYWN0LT5IYXZlUGFydGlhbENsZWFyZWRUaHJvdWdoID0gMDsKLQkJcmVxdWVzdFNpemUgPSBt dWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3NpemUsCi0JCQkJCQkJICAgc2l6ZW9mKFNFUklBTEla QUJMRVhBQ1QpKTsKLQkJUHJlZFhhY3QtPmVsZW1lbnQgPSBTaG1lbUFsbG9jKHJlcXVlc3RTaXpl KTsKKwkJUHJlZFhhY3QtPmVsZW1lbnQgPSAoU0VSSUFMSVpBQkxFWEFDVCAqKSAoKGNoYXIgKikg UHJlZFhhY3QgKyBQcmVkWGFjdExpc3REYXRhU2l6ZSk7CiAJCS8qIEFkZCBhbGwgZWxlbWVudHMg dG8gYXZhaWxhYmxlIGxpc3QsIGNsZWFuLiAqLwotCQltZW1zZXQoUHJlZFhhY3QtPmVsZW1lbnQs IDAsIHJlcXVlc3RTaXplKTsKIAkJZm9yIChpID0gMDsgaSA8IG1heF90YWJsZV9zaXplOyBpKysp CiAJCXsKIAkJCUxXTG9ja0luaXRpYWxpemUoJlByZWRYYWN0LT5lbGVtZW50W2ldLnBlclhhY3RQ cmVkaWNhdGVMaXN0TG9jaywKQEAgLTEyOTksMjEgKzEzMDIsMjUgQEAgUHJlZGljYXRlTG9ja1No bWVtSW5pdCh2b2lkKQogCSAqIHByb2JhYmx5IE9LLgogCSAqLwogCW1heF90YWJsZV9zaXplICo9 IDU7CisJcmVxdWVzdFNpemUgPSBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplICsKKwkJCQkJ bXVsX3NpemUoKFNpemUpIG1heF90YWJsZV9zaXplLAorCQkJCQkJCSBSV0NvbmZsaWN0RGF0YVNp emUpOwogCiAJUldDb25mbGljdFBvb2wgPSBTaG1lbUluaXRTdHJ1Y3QoIlJXQ29uZmxpY3RQb29s IiwKLQkJCQkJCQkJCSBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplLAorCQkJCQkJCQkJIHJl cXVlc3RTaXplLAogCQkJCQkJCQkJICZmb3VuZCk7CiAJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQ b3N0bWFzdGVyKTsKIAlpZiAoIWZvdW5kKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKiBjbGVhbiBl dmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhlIGVsZW1lbnRzICovCisJCW1lbXNldChSV0NvbmZsaWN0 UG9vbCwgMCwgcmVxdWVzdFNpemUpOworCiAJCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5h dmFpbGFibGVMaXN0KTsKLQkJcmVxdWVzdFNpemUgPSBtdWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxl X3NpemUsCi0JCQkJCQkJICAgUldDb25mbGljdERhdGFTaXplKTsKLQkJUldDb25mbGljdFBvb2wt PmVsZW1lbnQgPSBTaG1lbUFsbG9jKHJlcXVlc3RTaXplKTsKKwkJUldDb25mbGljdFBvb2wtPmVs ZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29uZmxpY3RQb29sICsKKwkJCVJXQ29u ZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOwogCQkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWls YWJsZSBsaXN0LCBjbGVhbi4gKi8KLQkJbWVtc2V0KFJXQ29uZmxpY3RQb29sLT5lbGVtZW50LCAw LCByZXF1ZXN0U2l6ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBtYXhfdGFibGVfc2l6ZTsgaSsrKQog CQl7CiAJCQlkbGlzdF9wdXNoX3RhaWwoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggZTRjYTg2MWE4ZS4uNmVlNDg0MTBiOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0xMjMsNiArMTIzLDI0IEBAIFByb2NHbG9iYWxTaG1lbVNp emUodm9pZCkKIAlyZXR1cm4gc2l6ZTsKIH0KIAorLyoKKyAqIHJldmlldzogYWRkIGNvbW1lbnQs IGV4cGxhaW5pbmcgdGhlIFBHX0NBQ0hFX0xJTkVfU0laRSB0aGluZworICogcmV2aWV3OiBJJ2Qg ZXZlbiBtYXliZSBzcGxpdCB0aGUgUEdfQ0FDSEVfTElORV9TSVpFIHRoaW5nIGludG8KKyAqIGEg c2VwYXJhdGUgY29tbWl0LCBub3QgdG8gbWl4IGl0IHdpdGggdGhlICJtb25pdG9yaW5nIGltcHJv dmVtZW50IgorICovCitzdGF0aWMgU2l6ZQorUEdQcm9jU2htZW1TaXplKHZvaWQpCit7CisJU2l6 ZQkJc2l6ZTsKKwl1aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElB UllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CisKKwlzaXplID0gVG90YWxQcm9jcyAqIHNp emVvZihQR1BST0MpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT54aWRzKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFRvdGFsUHJvY3Mg KiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpOworCXNpemUgPSBhZGRfc2l6ZShz aXplLCBUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpOworCXJl dHVybiBzaXplOworfQorCiAvKgogICogUmVwb3J0IG51bWJlciBvZiBzZW1hcGhvcmVzIG5lZWRl ZCBieSBJbml0UHJvY0dsb2JhbC4KICAqLwpAQCAtMTc1LDYgKzE5Myw4IEBAIEluaXRQcm9jR2xv YmFsKHZvaWQpCiAJCQkgICAqZnBFbmRQdHIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwogCVNp emUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOworCVNpemUJCXJlcXVlc3RTaXpl OworCWNoYXIJICAgKnB0cjsKIAogCS8qIENyZWF0ZSB0aGUgUHJvY0dsb2JhbCBzaGFyZWQgc3Ry dWN0dXJlICovCiAJUHJvY0dsb2JhbCA9IChQUk9DX0hEUiAqKQpAQCAtMjA0LDcgKzIyNCwxNSBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCSAqIHdpdGggYSBzaW5nbGUgZnJlZWxpc3QuKSAgRWFj aCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRlZCB0byBleGFjdGx5CiAJICogb25lIG9mIHRo ZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBub3QgbW92ZSBiZXR3ZWVuIGdyb3Vwcy4KIAkgKi8K LQlwcm9jcyA9IChQR1BST0MgKikgU2htZW1BbGxvYyhUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJP QykpOworCXJlcXVlc3RTaXplID0gUEdQcm9jU2htZW1TaXplKCk7CisKKwlwdHIgPSBTaG1lbUlu aXRTdHJ1Y3QoIlBHUFJPQyBzdHJ1Y3R1cmVzIiwKKwkJCQkJCQkJCSAgIHJlcXVlc3RTaXplLAor CQkJCQkJCQkJICAgJmZvdW5kKTsKKworCXByb2NzID0gKFBHUFJPQyAqKSBwdHI7CisJcHRyID0g KGNoYXIgKilwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisKIAlNZW1TZXQocHJv Y3MsIDAsIFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DKSk7CiAJUHJvY0dsb2JhbC0+YWxsUHJv Y3MgPSBwcm9jczsKIAkvKiBYWFggYWxsUHJvY0NvdW50IGlzbid0IHJlYWxseSBhbGwgb2YgdGhl bTsgaXQgZXhjbHVkZXMgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTIxMywxNyArMjQxLDIxIEBAIElu aXRQcm9jR2xvYmFsKHZvaWQpCiAJLyoKIAkgKiBBbGxvY2F0ZSBhcnJheXMgbWlycm9yaW5nIFBH UFJPQyBmaWVsZHMgaW4gYSBkZW5zZSBtYW5uZXIuIFNlZQogCSAqIFBST0NfSERSLgotCSAqCi0J ICogWFhYOiBJdCBtaWdodCBtYWtlIHNlbnNlIHRvIGluY3JlYXNlIHBhZGRpbmcgZm9yIHRoZXNl IGFycmF5cywgZ2l2ZW4KLQkgKiBob3cgaG90bHkgdGhleSBhcmUgYWNjZXNzZWQuCiAJICovCi0J UHJvY0dsb2JhbC0+eGlkcyA9Ci0JCShUcmFuc2FjdGlvbklkICopIFNobWVtQWxsb2MoVG90YWxQ cm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpOworCVByb2NHbG9iYWwtPnhpZHMgPSAo VHJhbnNhY3Rpb25JZCAqKSBwdHI7CiAJTWVtU2V0KFByb2NHbG9iYWwtPnhpZHMsIDAsIFRvdGFs UHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKTsKLQlQcm9jR2xvYmFsLT5zdWJ4aWRT dGF0ZXMgPSAoWGlkQ2FjaGVTdGF0dXMgKikgU2htZW1BbGxvYyhUb3RhbFByb2NzICogc2l6ZW9m KCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKTsKKwlwdHIgPSAoY2hhciAqKXB0ciArIChUb3Rh bFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSk7CisKKwlQcm9jR2xvYmFsLT5zdWJ4 aWRTdGF0ZXMgPSAoWGlkQ2FjaGVTdGF0dXMgKikgcHRyOwogCU1lbVNldChQcm9jR2xvYmFsLT5z dWJ4aWRTdGF0ZXMsIDAsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0 YXRlcykpOwotCVByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzID0gKHVpbnQ4ICopIFNobWVtQWxsb2Mo VG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKKwlwdHIgPSAo Y2hhciAqKXB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0 ZXMpKTsKKworCVByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzID0gKHVpbnQ4ICopIHB0cjsKIAlNZW1T ZXQoUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MsIDAsIFRvdGFsUHJvY3MgKiBzaXplb2YoKlByb2NH bG9iYWwtPnN0YXR1c0ZsYWdzKSk7CisJcHRyID0gKGNoYXIgKilwdHIgKyAoVG90YWxQcm9jcyAq IHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKKworCS8qIG1ha2Ugc3VyZSB3ZXIg ZGlkbid0IG92ZXJmbG93ICovCisJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0 ciA8PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7CiAKIAkvKgogCSAqIEFsbG9jYXRl IGFycmF5cyBmb3IgZmFzdC1wYXRoIGxvY2tzLiBUaG9zZSBhcmUgdmFyaWFibGUtbGVuZ3RoLCBz bwpAQCAtMjMzLDcgKzI2NSw5IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJZnBMb2NrQml0c1Np emUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tHcm91cHNQZXJCYWNrZW5kICogc2l6ZW9mKHVpbnQ2 NCkpOwogCWZwUmVsSWRTaXplID0gTUFYQUxJR04oRmFzdFBhdGhMb2NrU2xvdHNQZXJCYWNrZW5k KCkgKiBzaXplb2YoT2lkKSk7CiAKLQlmcFB0ciA9IFNobWVtQWxsb2MoVG90YWxQcm9jcyAqIChm cExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKSk7CisJZnBQdHIgPSBTaG1lbUluaXRTdHJ1Y3Qo IkZhc3QgcGF0aCBsb2NrIGFycmF5cyIsCisJCQkJCQkJVG90YWxQcm9jcyAqIChmcExvY2tCaXRz U2l6ZSArIGZwUmVsSWRTaXplKSwKKwkJCQkJCQkmZm91bmQpOwogCU1lbVNldChmcFB0ciwgMCwg VG90YWxQcm9jcyAqIChmcExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKSk7CiAKIAkvKiBGb3Ig YXNzZXJ0cyBjaGVja2luZyB3ZSBkaWQgbm90IG92ZXJmbG93LiAqLwpAQCAtMzMwLDcgKzM2NCw5 IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJUHJlcGFyZWRYYWN0UHJvY3MgPSAmcHJvY3NbTWF4 QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTXTsKIAogCS8qIENyZWF0ZSBQcm9jU3RydWN0 TG9jayBzcGlubG9jaywgdG9vICovCi0JUHJvY1N0cnVjdExvY2sgPSAoc2xvY2tfdCAqKSBTaG1l bUFsbG9jKHNpemVvZihzbG9ja190KSk7CisJUHJvY1N0cnVjdExvY2sgPSAoc2xvY2tfdCAqKSBT aG1lbUluaXRTdHJ1Y3QoIlByb2NTdHJ1Y3RMb2NrIHNwaW5sb2NrIiwKKwkJCQkJCQkJCQkJCSBz aXplb2Yoc2xvY2tfdCksCisJCQkJCQkJCQkJCQkgJmZvdW5kKTsKIAlTcGluTG9ja0luaXQoUHJv Y1N0cnVjdExvY2spOwogfQogCi0tIAoyLjM0LjEKCg== --000000000000a7b2a0063151bcbb--