Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jul 2010 12:43:00 +0530
From:      "Jayachandran C." <c.jayachandran@gmail.com>
To:        Alan Cox <alc@cs.rice.edu>
Cc:        freebsd-mips@freebsd.org
Subject:   Re: svn commit: r208589 - head/sys/mips/mips
Message-ID:  <AANLkTimVNpvdeGkFcwhhuJJnA6u76-Fo2PwaiparZSK8@mail.gmail.com>
In-Reply-To: <4C3E0144.50402@cs.rice.edu>
References:  <AANLkTimIa3jmBPMhWIOcY6DenGpZ2ZYmqwDTWspVx0-u@mail.gmail.com> <AANLkTinA2D5iTDGPbflHVzLyAZW-ZewjJkUWWL8FVskr@mail.gmail.com> <4C07E07B.9060802@cs.rice.edu> <AANLkTimjyPc_AXKP1yaJaF1BN7CAGBeNikVzcp9OCb4P@mail.gmail.com> <4C09345F.9040300@cs.rice.edu> <AANLkTinmFOZY3OlaoKStxlNIRBt2G2I4ILkQ1P0CjozG@mail.gmail.com> <4C0D2BEA.6060103@cs.rice.edu> <AANLkTikZxx_30H9geHvZYkYd0sE-wiuZljEd0PAi14ca@mail.gmail.com> <4C0D3F40.2070101@cs.rice.edu> <20100607202844.GU83316@deviant.kiev.zoral.com.ua> <4C0D64B7.7060604@cs.rice.edu> <AANLkTilBxdXxXrWC1cAT0wX9ubmFrvaAdk4feG6PwDYQ@mail.gmail.com> <4C0DE424.9080601@cs.rice.edu> <AANLkTinzIUOykgwtHlJ2vDwYS9as3ha_BYiy_qRd5h2Q@mail.gmail.com> <AANLkTimWh77REpi3ZD0BOihZit5qKNYNbtAx5PWQRYBX@mail.gmail.com> <AANLkTimRND9G9udHWzhN06wTJcRCN-OEjPPXctOoyj9_@mail.gmail.com> <AANLkTim0LyBsdOHOoBeORRSiJZsWO3eKIQqwM8gAmZ9-@mail.gmail.com> <AANLkTikH7PZ9ly0kRuMkfrkjJ0jYLUzCHy7ea0_vneWf@mail.gmail.com> <4C3E0144.50402@cs.rice.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
--0014853d013085a1e1048bb84c56
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On Wed, Jul 14, 2010 at 11:56 PM, Alan Cox <alc@cs.rice.edu> wrote:
[....]
> This makes sense. =A0I have the following requests. =A0All but 1.a. are s=
imple,
> mechanical changes.
>
> 1. Move vm_phys_page_alloc() to vm_page.c and rename it to
> vm_page_alloc_freelist().
>
> 1.a. The new vm_page_alloc_freelist() should really have a "req" paramete=
r
> like vm_page_alloc() and duplicate the following from vm_page_alloc():
>
> =A0 mtx_lock(&vm_page_queue_free_mtx);
> =A0 if (cnt.v_free_count + cnt.v_cache_count > cnt.v_free_reserved ||
> =A0 =A0 =A0 (page_req =3D=3D VM_ALLOC_SYSTEM &&
> =A0 =A0 =A0 cnt.v_free_count + cnt.v_cache_count > cnt.v_interrupt_free_m=
in) ||
> =A0 =A0 =A0 (page_req =3D=3D VM_ALLOC_INTERRUPT &&
> =A0 =A0 =A0 cnt.v_free_count + cnt.v_cache_count > 0)) {
>
> In essence, user page table page allocation shouldn't be allowed to alloc=
ate
> the last available page. =A0Only pmap_growkernel() should use
> VM_ALLOC_INTERRUPT. =A0(See either the amd64 or i386 pmap.)
>
> You could also drop the "pool" parameter and pass VM_FREEPOOL_DIRECT to
> vm_phys_alloc_freelist_pages() from vm_page_alloc_freelist(). =A0(This is
> consistent with what vm_page_alloc() does for VM_ALLOC_NOOBJ.)
>
> 2. Move vm_page_alloc_init() to vm_page.c as well. =A0(And add it to
> vm_page.h.)
>
> 3. Make vm_phys_alloc_freelist_pages() extern.
>
>
>> Since I had originally added the UMA zone for =A0page table
>> pages for MIPS, which has the issues you had noted, I would like to
>> fix this...
>
>
> The patch introduces a few unnecessary blank lines. =A0Can you please rem=
ove
> these:
[...]
>
> FreeBSD style(9) requires parentheses around the "m":
[...]
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return m;

[freebsd-mips cc-ed, for comments on MIPS side]

Here's is the updated patch with the review comments taken care of. I
have been testing this on MIPS, could not see any regression so far.

--
Redo the page table page allocation on MIPS, based on suggestion from
alc@. The current UMA zone based allocation can be replaced by a
scheme that creates a new free list for the KSEG0 region, and a new
function in sys/vm to allocate pages from a specific free page list.

The changes are :
- Revert the earlier changes in MIPS pmap.c that added UMA zone for
page table pages.
- Add a new freelist VM_FREELIST_HIGHMEM to vmparam.h for memory that
is not directly mapped (in 32bit compilation). Normal page allocations
will first try the HIGHMEM freelist and then the default freelist
(which is for the KSEG0 direct mapped memory).
- Add a new function 'vm_page_t vm_page_alloc_freelist(int flind, int
order, int req)' to vm/vm_page.c to allocate a page from a specified
freelist.  The MIPS page table pages will be allocated using this
function from the KSEG0 freelist.
- Move the page initialization code from  vm_phys_alloc_contig() to a
new function vm_page_alloc_init(), and use this function to initialize
pages in vm_page_alloc_freelist() too.
-  Split the  vm_phys_alloc_pages(pool, order) to create
vm_phys_alloc_freelist_pages(int flind, int pool, int order), and use
this function from both vm_page_alloc_freelist() and
vm_phys_alloc_pages().
--

Thanks,
JC.

--0014853d013085a1e1048bb84c56
Content-Type: text/x-patch; charset=US-ASCII;
	name="pmap-pagetable-page-alloc.patch"
Content-Disposition: attachment; filename="pmap-pagetable-page-alloc.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gbsz8bmo0

SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvdm1wYXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz
L2luY2x1ZGUvdm1wYXJhbS5oCShyZXZpc2lvbiAyMTAxNTcpCisrKyBzeXMvbWlwcy9pbmNsdWRl
L3ZtcGFyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBACiAjZGVmaW5lCVZN
X01BWFVTRVJfQUREUkVTUwkoKHZtX29mZnNldF90KTB4ODAwMDAwMDApCiAjZGVmaW5lCVZNX01J
Tl9LRVJORUxfQUREUkVTUwkoKHZtX29mZnNldF90KTB4QzAwMDAwMDApCiAjZGVmaW5lCVZNX01B
WF9LRVJORUxfQUREUkVTUwkoKHZtX29mZnNldF90KTB4RkZGRkMwMDApCisjZGVmaW5lCVZNX0hJ
R0hNRU1fQUREUkVTUwkoKHZtX3BhZGRyX3QpMHgyMDAwMDAwMCkKICNlbmRpZgogI2lmIDAKICNk
ZWZpbmUJS0VSTkJBU0UJCShWTV9NSU5fS0VSTkVMX0FERFJFU1MpCkBAIC0xMjUsNyArMTI2LDYg
QEAKICNkZWZpbmUJVk1fTlJFU0VSVkxFVkVMCQkwCiAjZW5kaWYKIAotCiAvKiB2aXJ0dWFsIHNp
emVzIChieXRlcykgZm9yIHZhcmlvdXMga2VybmVsIHN1Ym1hcHMgKi8KICNpZm5kZWYgVk1fS01F
TV9TSVpFCiAjZGVmaW5lCVZNX0tNRU1fU0laRQkJKDEyICogMTAyNCAqIDEwMjQpCkBAIC0xNzQs
MTMgKzE3NCwxOSBAQAogI2RlZmluZQlWTV9GUkVFUE9PTF9ESVJFQ1QJMQogCiAvKgotICogd2Ug
c3VwcG9ydCAxIGZyZWUgbGlzdDoKKyAqIHdlIHN1cHBvcnQgMiBmcmVlIGxpc3RzOgogICoKLSAq
CS0gREVGQVVMVCBmb3IgYWxsIHN5c3RlbXMKKyAqCS0gREVGQVVMVCBmb3IgZGlyZWN0IG1hcHBl
ZCAoS1NFRzApIHBhZ2VzCisgKgktIEhJR0hNRU0gZm9yIG90aGVyIHBhZ2VzIAogICovCi0KKyNp
ZmRlZiBfX21pcHNfbjY0CiAjZGVmaW5lCVZNX05GUkVFTElTVAkJMQogI2RlZmluZQlWTV9GUkVF
TElTVF9ERUZBVUxUCTAKKyNlbHNlCisjZGVmaW5lCVZNX05GUkVFTElTVAkJMgorI2RlZmluZQlW
TV9GUkVFTElTVF9ERUZBVUxUCTEKKyNkZWZpbmUJVk1fRlJFRUxJU1RfSElHSE1FTQkwCisjZW5k
aWYKIAogLyoKICAqIFRoZSBsYXJnZXN0IGFsbG9jYXRpb24gc2l6ZSBpcyAxTUIuCkluZGV4OiBz
eXMvbWlwcy9taXBzL3BtYXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9taXBzL3BtYXAuYwko
cmV2aXNpb24gMjEwMTU3KQorKysgc3lzL21pcHMvbWlwcy9wbWFwLmMJKHdvcmtpbmcgY29weSkK
QEAgLTE4Nyw4ICsxODcsOCBAQAogc3RhdGljIHZtX3BhZ2VfdCBfcG1hcF9hbGxvY3B0ZShwbWFw
X3QgcG1hcCwgdW5zaWduZWQgcHRlcGluZGV4LCBpbnQgZmxhZ3MpOwogc3RhdGljIGludCBwbWFw
X3VudXNlX3B0KHBtYXBfdCwgdm1fb2Zmc2V0X3QsIHZtX3BhZ2VfdCk7CiBzdGF0aWMgaW50IGlu
aXRfcHRlX3Byb3Qodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCk7
Ci1zdGF0aWMgdm1fcGFnZV90IHBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90LCB1bnNpZ25lZCBp
bnQsIGludCwgdm1fb2Zmc2V0X3QgKik7Ci1zdGF0aWMgdm9pZCBwbWFwX3JlbGVhc2VfcHRlX3Bh
Z2Uodm1fcGFnZV90KTsKK3N0YXRpYyB2bV9wYWdlX3QgcG1hcF9hbGxvY19wdGVfcGFnZSh1bnNp
Z25lZCBpbnQgaW5kZXgsIGludCByZXEpOworc3RhdGljIHZvaWQgcG1hcF9ncm93X3B0ZV9wYWdl
X2NhY2hlKHZvaWQpOwogCiAjaWZkZWYgU01QCiBzdGF0aWMgdm9pZCBwbWFwX2ludmFsaWRhdGVf
cGFnZV9hY3Rpb24odm9pZCAqYXJnKTsKQEAgLTE5NiwxMCArMTk2LDYgQEAKIHN0YXRpYyB2b2lk
IHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uKHZvaWQgKmFyZyk7CiAjZW5kaWYKIAotc3RhdGljIHZv
aWQgcG1hcF9wdHBnem9uZV9kdG9yKHZvaWQgKm1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Ci1z
dGF0aWMgdm9pZCAqcG1hcF9wdHBnem9uZV9hbGxvY2YodW1hX3pvbmVfdCwgaW50LCB1X2ludDhf
dCAqLCBpbnQpOwotc3RhdGljIHVtYV96b25lX3QgcHRwZ3pvbmU7Ci0KICNpZiAhZGVmaW5lZChf
X21pcHNfbjY0KQogc3RydWN0IGxvY2FsX3N5c21hcHMgewogCXZtX29mZnNldF90IGJhc2U7CkBA
IC01MzksMTAgKzUzNSw2IEBACiAJcHZfZW50cnlfbWF4ID0gUE1BUF9TSFBHUEVSUFJPQyAqIG1h
eHByb2MgKyBjbnQudl9wYWdlX2NvdW50OwogCXB2X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2
X2VudHJ5X21heCAvIDEwKTsKIAl1bWFfem9uZV9zZXRfb2JqKHB2em9uZSwgJnB2em9uZV9vYmos
IHB2X2VudHJ5X21heCk7Ci0KLQlwdHBnem9uZSA9IHVtYV96Y3JlYXRlKCJQVCBFTlRSWSIsIFBB
R0VfU0laRSwgTlVMTCwgcG1hcF9wdHBnem9uZV9kdG9yLAotCSAgICBOVUxMLCBOVUxMLCBQQUdF
X1NJWkUgLSAxLCBVTUFfWk9ORV9OT0ZSRUUgfCBVTUFfWk9ORV9aSU5JVCk7Ci0JdW1hX3pvbmVf
c2V0X2FsbG9jZihwdHBnem9uZSwgcG1hcF9wdHBnem9uZV9hbGxvY2YpOwogfQogCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04ODIsMTIg
Kzg3NCw4IEBACiAJLyoKIAkgKiBJZiB0aGUgcGFnZSBpcyBmaW5hbGx5IHVud2lyZWQsIHNpbXBs
eSBmcmVlIGl0LgogCSAqLworCXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCWF0b21pY19zdWJ0cmFj
dF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwotCVBNQVBfVU5MT0NLKHBtYXApOwotCXZtX3Bh
Z2VfdW5sb2NrX3F1ZXVlcygpOwotCXBtYXBfcmVsZWFzZV9wdGVfcGFnZShtKTsKLQl2bV9wYWdl
X2xvY2tfcXVldWVzKCk7Ci0JUE1BUF9MT0NLKHBtYXApOwogCXJldHVybiAoMSk7CiB9CiAKQEAg
LTk0Nyw5NSArOTM1LDMwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wbWFwX3B0cGd6b25lX2R0b3Io
dm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9pZCAqYXJnKQorcG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hl
KCkKIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0Jc3RhdGljIGNoYXIgemVyb3BhZ2VbUEFHRV9TSVpF
XTsKLQotCUtBU1NFUlQoc2l6ZSA9PSBQQUdFX1NJWkUsCi0JCSgicG1hcF9wdHBnem9uZV9kdG9y
OiBpbnZhbGlkIHNpemUgJWQiLCBzaXplKSk7Ci0JS0FTU0VSVChiY21wKG1lbSwgemVyb3BhZ2Us
IFBBR0VfU0laRSkgPT0gMCwKLQkJKCJwbWFwX3B0cGd6b25lX2R0b3I6IGZyZWVpbmcgYSBub24t
emVyb2VkIHBhZ2UiKSk7Ci0jZW5kaWYKKwl2bV9jb250aWdfZ3Jvd19jYWNoZSgzLCAwLCBNSVBT
X0tTRUcwX0xBUkdFU1RfUEhZUyk7CiB9CiAKLXN0YXRpYyB2b2lkICoKLXBtYXBfcHRwZ3pvbmVf
YWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAqZmxhZ3MsIGludCB3
YWl0KQotewotCXZtX3BhZ2VfdCBtOwotCXZtX3BhZGRyX3QgcGFkZHI7Ci0JaW50IHRyaWVzOwot
CQotCUtBU1NFUlQoYnl0ZXMgPT0gUEFHRV9TSVpFLAotCQkoInBtYXBfcHRwZ3pvbmVfYWxsb2Nm
OiBpbnZhbGlkIGFsbG9jYXRpb24gc2l6ZSAlZCIsIGJ5dGVzKSk7Ci0KLQkqZmxhZ3MgPSBVTUFf
U0xBQl9QUklWOwotCXRyaWVzID0gMDsKLXJldHJ5OgotCW0gPSB2bV9waHlzX2FsbG9jX2NvbnRp
ZygxLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUywKLQkgICAgUEFHRV9TSVpFLCBQQUdFX1NJ
WkUpOwotCWlmIChtID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAodHJpZXMgPCAoKHdh
aXQgJiBNX05PV0FJVCkgIT0gMCA/IDEgOiAzKSkgewotCQkJdm1fY29udGlnX2dyb3dfY2FjaGUo
dHJpZXMsIDAsIE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKTsKLQkJCXRyaWVzKys7Ci0JCQlnb3Rv
IHJldHJ5OwotCQl9IGVsc2UKLQkJCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JcGFkZHIgPSBWTV9Q
QUdFX1RPX1BIWVMobSk7Ci0JcmV0dXJuICgodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRk
cikpOwotfQkKLQogc3RhdGljIHZtX3BhZ2VfdAotcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwX3Qg
cG1hcCwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgd2FpdCwgdm1fb2Zmc2V0X3QgKnZhcCkKK3Bt
YXBfYWxsb2NfcHRlX3BhZ2UodW5zaWduZWQgaW50IGluZGV4LCBpbnQgcmVxKQogewotCXZtX3Bh
ZGRyX3QgcGFkZHI7Ci0Jdm9pZCAqdmE7CiAJdm1fcGFnZV90IG07Ci0JaW50IGxvY2tlZDsKIAot
CWxvY2tlZCA9IG10eF9vd25lZCgmcG1hcC0+cG1fbXR4KTsKLQlpZiAobG9ja2VkKSB7Ci0JCW10
eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JCVBNQVBfVU5MT0NLKHBt
YXApOwotCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKLQl9Ci0JdmEgPSB1bWFfemFsbG9jKHB0
cGd6b25lLCB3YWl0KTsKLQlpZiAobG9ja2VkKSB7Ci0JCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsK
LQkJUE1BUF9MT0NLKHBtYXApOwotCX0KLQlpZiAodmEgPT0gTlVMTCkKKwltID0gdm1fcGFnZV9h
bGxvY19mcmVlbGlzdChWTV9GUkVFTElTVF9ERUZBVUxULCAwLCByZXEpOworCWlmIChtID09IE5V
TEwpCiAJCXJldHVybiAoTlVMTCk7CiAKLQlwYWRkciA9IE1JUFNfS1NFRzBfVE9fUEhZUyh2YSk7
Ci0JbSA9IFBIWVNfVE9fVk1fUEFHRShwYWRkcik7Ci0JCi0JaWYgKCFsb2NrZWQpCi0JCXZtX3Bh
Z2VfbG9ja19xdWV1ZXMoKTsKKwlpZiAoKG0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKKwkJcG1h
cF96ZXJvX3BhZ2UobSk7CisKIAltLT5waW5kZXggPSBpbmRleDsKIAltLT52YWxpZCA9IFZNX1BB
R0VfQklUU19BTEw7Ci0JbS0+d2lyZV9jb3VudCA9IDE7Ci0JaWYgKCFsb2NrZWQpCi0JCXZtX3Bh
Z2VfdW5sb2NrX3F1ZXVlcygpOwotCiAJYXRvbWljX2FkZF9pbnQoJmNudC52X3dpcmVfY291bnQs
IDEpOwotCSp2YXAgPSAodm1fb2Zmc2V0X3QpdmE7CisJbS0+d2lyZV9jb3VudCA9IDE7CiAJcmV0
dXJuIChtKTsKIH0KIAotc3RhdGljIHZvaWQKLXBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdl
X3QgbSkKLXsKLQl2b2lkICp2YTsKLQl2bV9wYWRkcl90IHBhZGRyOwotCi0JcGFkZHIgPSBWTV9Q
QUdFX1RPX1BIWVMobSk7Ci0JdmEgPSAodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRkcik7
Ci0JdW1hX3pmcmVlKHB0cGd6b25lLCB2YSk7Ci19Ci0KIC8qCiAgKiBJbml0aWFsaXplIGEgcHJl
YWxsb2NhdGVkIGFuZCB6ZXJvZWQgcG1hcCBzdHJ1Y3R1cmUsCiAgKiBzdWNoIGFzIG9uZSBpbiBh
IHZtc3BhY2Ugc3RydWN0dXJlLgpAQCAtMTA1MiwxMCArOTc1LDEwIEBACiAJLyoKIAkgKiBhbGxv
Y2F0ZSB0aGUgcGFnZSBkaXJlY3RvcnkgcGFnZQogCSAqLwotCXB0ZHBnID0gcG1hcF9hbGxvY19w
dGVfcGFnZShwbWFwLCBOVVNFUlBHVEJMUywgTV9XQUlUT0ssICZwdGR2YSk7Ci0JaWYgKHB0ZHBn
ID09IE5VTEwpCi0JCXJldHVybiAoMCk7CisJd2hpbGUgKChwdGRwZyA9IHBtYXBfYWxsb2NfcHRl
X3BhZ2UoTlVTRVJQR1RCTFMsIFZNX0FMTE9DX05PUk1BTCkpID09IE5VTEwpCisJICAgICAgIHBt
YXBfZ3Jvd19wdGVfcGFnZV9jYWNoZSgpOwogCisJcHRkdmEgPSBNSVBTX1BIWVNfVE9fS1NFRzAo
Vk1fUEFHRV9UT19QSFlTKHB0ZHBnKSk7CiAJcG1hcC0+cG1fc2VndGFiID0gKHBkX2VudHJ5X3Qg
KilwdGR2YTsKIAlwbWFwLT5wbV9hY3RpdmUgPSAwOwogCXBtYXAtPnBtX3B0cGhpbnQgPSBOVUxM
OwpAQCAtMTA4NiwxNSArMTAwOSwyOCBAQAogCS8qCiAJICogRmluZCBvciBmYWJyaWNhdGUgYSBu
ZXcgcGFnZXRhYmxlIHBhZ2UKIAkgKi8KLQltID0gcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwLCBw
dGVwaW5kZXgsIGZsYWdzLCAmcHRldmEpOwotCWlmIChtID09IE5VTEwpCisJaWYgKChtID0gcG1h
cF9hbGxvY19wdGVfcGFnZShwdGVwaW5kZXgsIFZNX0FMTE9DX05PUk1BTCkpID09IE5VTEwpIHsK
KwkJaWYgKGZsYWdzICYgTV9XQUlUT0spIHsKKwkJCVBNQVBfVU5MT0NLKHBtYXApOworCQkJdm1f
cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCQlwbWFwX2dyb3dfcHRlX3BhZ2VfY2FjaGUoKTsKKwkJ
CXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKKwkJCVBNQVBfTE9DSyhwbWFwKTsKKwkJfQorCisJCS8q
CisJCSAqIEluZGljYXRlIHRoZSBuZWVkIHRvIHJldHJ5LglXaGlsZSB3YWl0aW5nLCB0aGUgcGFn
ZQorCQkgKiB0YWJsZSBwYWdlIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkLgorCQkgKi8KIAkJcmV0
dXJuIChOVUxMKTsKKwl9CiAKIAkvKgogCSAqIE1hcCB0aGUgcGFnZXRhYmxlIHBhZ2UgaW50byB0
aGUgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBpZiBpdAogCSAqIGlzbid0IGFscmVhZHkgdGhlcmUu
CiAJICovCiAKKwlwdGV2YSA9IE1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobSkp
OwogCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50Kys7CiAJcG1hcC0+cG1fc2VndGFiW3B0
ZXBpbmRleF0gPSAocGRfZW50cnlfdClwdGV2YTsKIApAQCAtMTE5MCw3ICsxMTI2LDcgQEAKIAog
CXB0ZHBnLT53aXJlX2NvdW50LS07CiAJYXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9j
b3VudCwgMSk7Ci0JcG1hcF9yZWxlYXNlX3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVf
emVybyhwdGRwZyk7CiAJUE1BUF9MT0NLX0RFU1RST1kocG1hcCk7CiB9CiAKQEAgLTEyMDAsNyAr
MTEzNiw2IEBACiB2b2lkCiBwbWFwX2dyb3drZXJuZWwodm1fb2Zmc2V0X3QgYWRkcikKIHsKLQl2
bV9vZmZzZXRfdCBwYWdldmE7CiAJdm1fcGFnZV90IG5rcGc7CiAJcHRfZW50cnlfdCAqcHRlOwog
CWludCBpOwpAQCAtMTIzNSwxNCArMTE3MCwxMyBAQAogCQkvKgogCQkgKiBUaGlzIGluZGV4IGlz
IGJvZ3VzLCBidXQgb3V0IG9mIHRoZSB3YXkKIAkJICovCi0JCW5rcGcgPSBwbWFwX2FsbG9jX3B0
ZV9wYWdlKGtlcm5lbF9wbWFwLCBua3B0LCBNX05PV0FJVCwgJnBhZ2V2YSk7Ci0KKyAJCW5rcGcg
PSBwbWFwX2FsbG9jX3B0ZV9wYWdlKG5rcHQsIFZNX0FMTE9DX0lOVEVSUlVQVCk7CiAJCWlmICgh
bmtwZykKIAkJCXBhbmljKCJwbWFwX2dyb3drZXJuZWw6IG5vIG1lbW9yeSB0byBncm93IGtlcm5l
bCIpOwogCiAJCW5rcHQrKzsKLQkJcHRlID0gKHB0X2VudHJ5X3QgKilwYWdldmE7Ci0JCXNlZ3Rh
Yl9wZGUoa2VybmVsX3NlZ21hcCwga2VybmVsX3ZtX2VuZCkgPSBwdGU7CisgCQlwdGUgPSAocHRf
ZW50cnlfdCAqKU1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobmtwZykpOworICAJ
CXNlZ3RhYl9wZGUoa2VybmVsX3NlZ21hcCwga2VybmVsX3ZtX2VuZCkgPSAocGRfZW50cnlfdClw
dGU7CiAKIAkJLyoKIAkJICogVGhlIFJbNC03XT8wMCBzdG9yZXMgb25seSBvbmUgY29weSBvZiB0
aGUgR2xvYmFsIGJpdCBpbgpJbmRleDogc3lzL3ZtL3ZtX3BoeXMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
eXMvdm0vdm1fcGh5cy5jCShyZXZpc2lvbiAyMTAxNTcpCisrKyBzeXMvdm0vdm1fcGh5cy5jCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsNDkgKzMwMSw2NyBAQAogdm1fcGFnZV90CiB2bV9waHlzX2Fs
bG9jX3BhZ2VzKGludCBwb29sLCBpbnQgb3JkZXIpCiB7CisJdm1fcGFnZV90IG07CisJaW50IGZs
aW5kOworCisJZm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykg
eworCQltID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgcG9vbCwgb3JkZXIp
OworCQlpZiAobSAhPSBOVUxMKQorCQkJcmV0dXJuIChtKTsKKwl9CisJcmV0dXJuIChOVUxMKTsK
K30KKworLyoKKyAqIEZpbmQgYW5kIGRlcXVldWUgYSBmcmVlIHBhZ2Ugb24gdGhlIGdpdmVuIGZy
ZWUgbGlzdCwgd2l0aCB0aGUgCisgKiBzcGVjaWZpZWQgcG9vbCBhbmQgb3JkZXIKKyAqLwordm1f
cGFnZV90Cit2bV9waHlzX2FsbG9jX2ZyZWVsaXN0X3BhZ2VzKGludCBmbGluZCwgaW50IHBvb2ws
IGludCBvcmRlcikKK3sJCiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fZnJl
ZWxpc3QgKmFsdDsKLQlpbnQgZmxpbmQsIG9pbmQsIHBpbmQ7CisJaW50IG9pbmQsIHBpbmQ7CiAJ
dm1fcGFnZV90IG07CiAKKwlLQVNTRVJUKGZsaW5kIDwgVk1fTkZSRUVMSVNULAorCSAgICAoInZt
X3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IGZyZWVsaXN0ICVkIGlzIG91dCBvZiByYW5nZSIs
IGZsaW5kKSk7CiAJS0FTU0VSVChwb29sIDwgVk1fTkZSRUVQT09MLAotCSAgICAoInZtX3BoeXNf
YWxsb2NfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9vbCkpOworCSAgICAoInZt
X3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9v
bCkpOwogCUtBU1NFUlQob3JkZXIgPCBWTV9ORlJFRU9SREVSLAotCSAgICAoInZtX3BoeXNfYWxs
b2NfcGFnZXM6IG9yZGVyICVkIGlzIG91dCBvZiByYW5nZSIsIG9yZGVyKSk7CisJICAgICgidm1f
cGh5c19hbGxvY19mcmVlbGlzdF9wYWdlczogb3JkZXIgJWQgaXMgb3V0IG9mIHJhbmdlIiwgb3Jk
ZXIpKTsKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7Ci0J
Zm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykgewotCQlmbCA9
IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwotCQlmb3IgKG9pbmQgPSBvcmRlcjsg
b2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgewotCQkJbSA9IFRBSUxRX0ZJUlNUKCZmbFtv
aW5kXS5wbCk7CisJZmwgPSB2bV9waHlzX2ZyZWVfcXVldWVzW2ZsaW5kXVtwb29sXTsKKwlmb3Ig
KG9pbmQgPSBvcmRlcjsgb2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgeworCQltID0gVEFJ
TFFfRklSU1QoJmZsW29pbmRdLnBsKTsKKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJVEFJTFFfUkVN
T1ZFKCZmbFtvaW5kXS5wbCwgbSwgcGFnZXEpOworCQkJZmxbb2luZF0ubGNudC0tOworCQkJbS0+
b3JkZXIgPSBWTV9ORlJFRU9SREVSOworCQkJdm1fcGh5c19zcGxpdF9wYWdlcyhtLCBvaW5kLCBm
bCwgb3JkZXIpOworCQkJcmV0dXJuIChtKTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGdpdmVu
IHBvb2wgd2FzIGVtcHR5LiAgRmluZCB0aGUgbGFyZ2VzdAorCSAqIGNvbnRpZ3VvdXMsIHBvd2Vy
LW9mLXR3by1zaXplZCBzZXQgb2YgcGFnZXMgaW4gYW55CisJICogcG9vbC4gIFRyYW5zZmVyIHRo
ZXNlIHBhZ2VzIHRvIHRoZSBnaXZlbiBwb29sLCBhbmQKKwkgKiB1c2UgdGhlbSB0byBzYXRpc2Z5
IHRoZSBhbGxvY2F0aW9uLgorCSAqLworCWZvciAob2luZCA9IFZNX05GUkVFT1JERVIgLSAxOyBv
aW5kID49IG9yZGVyOyBvaW5kLS0pIHsKKwkJZm9yIChwaW5kID0gMDsgcGluZCA8IFZNX05GUkVF
UE9PTDsgcGluZCsrKSB7CisJCQlhbHQgPSB2bV9waHlzX2ZyZWVfcXVldWVzW2ZsaW5kXVtwaW5k
XTsKKwkJCW0gPSBUQUlMUV9GSVJTVCgmYWx0W29pbmRdLnBsKTsKIAkJCWlmIChtICE9IE5VTEwp
IHsKLQkJCQlUQUlMUV9SRU1PVkUoJmZsW29pbmRdLnBsLCBtLCBwYWdlcSk7Ci0JCQkJZmxbb2lu
ZF0ubGNudC0tOworCQkJCVRBSUxRX1JFTU9WRSgmYWx0W29pbmRdLnBsLCBtLCBwYWdlcSk7CisJ
CQkJYWx0W29pbmRdLmxjbnQtLTsKIAkJCQltLT5vcmRlciA9IFZNX05GUkVFT1JERVI7CisJCQkJ
dm1fcGh5c19zZXRfcG9vbChwb29sLCBtLCBvaW5kKTsKIAkJCQl2bV9waHlzX3NwbGl0X3BhZ2Vz
KG0sIG9pbmQsIGZsLCBvcmRlcik7CiAJCQkJcmV0dXJuIChtKTsKIAkJCX0KIAkJfQotCi0JCS8q
Ci0JCSAqIFRoZSBnaXZlbiBwb29sIHdhcyBlbXB0eS4gIEZpbmQgdGhlIGxhcmdlc3QKLQkJICog
Y29udGlndW91cywgcG93ZXItb2YtdHdvLXNpemVkIHNldCBvZiBwYWdlcyBpbiBhbnkKLQkJICog
cG9vbC4gIFRyYW5zZmVyIHRoZXNlIHBhZ2VzIHRvIHRoZSBnaXZlbiBwb29sLCBhbmQKLQkJICog
dXNlIHRoZW0gdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbi4KLQkJICovCi0JCWZvciAob2luZCA9
IFZNX05GUkVFT1JERVIgLSAxOyBvaW5kID49IG9yZGVyOyBvaW5kLS0pIHsKLQkJCWZvciAocGlu
ZCA9IDA7IHBpbmQgPCBWTV9ORlJFRVBPT0w7IHBpbmQrKykgewotCQkJCWFsdCA9IHZtX3BoeXNf
ZnJlZV9xdWV1ZXNbZmxpbmRdW3BpbmRdOwotCQkJCW0gPSBUQUlMUV9GSVJTVCgmYWx0W29pbmRd
LnBsKTsKLQkJCQlpZiAobSAhPSBOVUxMKSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmYWx0W29pbmRd
LnBsLCBtLCBwYWdlcSk7Ci0JCQkJCWFsdFtvaW5kXS5sY250LS07Ci0JCQkJCW0tPm9yZGVyID0g
Vk1fTkZSRUVPUkRFUjsKLQkJCQkJdm1fcGh5c19zZXRfcG9vbChwb29sLCBtLCBvaW5kKTsKLQkJ
CQkJdm1fcGh5c19zcGxpdF9wYWdlcyhtLCBvaW5kLCBmbCwgb3JkZXIpOwotCQkJCQlyZXR1cm4g
KG0pOwotCQkJCX0KLQkJCX0KLQkJfQogCX0KIAlyZXR1cm4gKE5VTEwpOwogfQpAQCAtNTkyLDcg
KzYxMCw3IEBACiB7CiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fcGh5c19z
ZWcgKnNlZzsKLQl2bV9vYmplY3RfdCBtX29iamVjdDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOwogCXZt
X3BhZGRyX3QgcGEsIHBhX2xhc3QsIHNpemU7CiAJdm1fcGFnZV90IGRlZmVycmVkX3Zkcm9wX2xp
c3QsIG0sIG1fcmV0OwogCWludCBmbGluZCwgaSwgb2luZCwgb3JkZXIsIHBpbmQ7CkBAIC02ODcs
NTAgKzcwNSwxOSBAQAogCXZtX3BoeXNfc3BsaXRfcGFnZXMobV9yZXQsIG9pbmQsIGZsLCBvcmRl
cik7CiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07Ci0J
CUtBU1NFUlQobS0+cXVldWUgPT0gUFFfTk9ORSwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250
aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgcXVldWUgJWQiLAotCQkgICAgbSwgbS0+cXVldWUp
KTsKLQkJS0FTU0VSVChtLT53aXJlX2NvdW50ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2Nf
Y29udGlnOiBwYWdlICVwIGlzIHdpcmVkIiwgbSkpOwotCQlLQVNTRVJUKG0tPmhvbGRfY291bnQg
PT0gMCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0p
KTsKLQkJS0FTU0VSVChtLT5idXN5ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGln
OiBwYWdlICVwIGlzIGJ1c3kiLCBtKSk7Ci0JCUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKLQkJICAg
ICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgZGlydHkiLCBtKSk7Ci0JCUtBU1NF
UlQocG1hcF9wYWdlX2dldF9tZW1hdHRyKG0pID09IFZNX01FTUFUVFJfREVGQVVMVCwKLQkJICAg
ICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAl
ZCIsCi0JCSAgICBtLCBwbWFwX3BhZ2VfZ2V0X21lbWF0dHIobSkpKTsKLQkJaWYgKChtLT5mbGFn
cyAmIFBHX0NBQ0hFRCkgIT0gMCkgewotCQkJbS0+dmFsaWQgPSAwOwotCQkJbV9vYmplY3QgPSBt
LT5vYmplY3Q7Ci0JCQl2bV9wYWdlX2NhY2hlX3JlbW92ZShtKTsKLQkJCWlmIChtX29iamVjdC0+
dHlwZSA9PSBPQkpUX1ZOT0RFICYmCi0JCQkgICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpIHsK
LQkJCQkvKgotCQkJCSAqIEVucXVldWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgpLgot
CQkJCSAqCi0JCQkJICogVW5tYW5hZ2VkIHBhZ2VzIGRvbid0IHVzZSAicGFnZXEiLCBzbyBpdAot
CQkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQotCQkJCSAq
IGxpdmVkIHF1ZXVlIG9mIHZub2Rlcy4KLQkJCQkgKi8KLQkJCQltLT5wYWdlcS50cWVfcHJldiA9
IG1fb2JqZWN0LT5oYW5kbGU7Ci0JCQkJbS0+cGFnZXEudHFlX25leHQgPSBkZWZlcnJlZF92ZHJv
cF9saXN0OwotCQkJCWRlZmVycmVkX3Zkcm9wX2xpc3QgPSBtOwotCQkJfQotCQl9IGVsc2Ugewot
CQkJS0FTU0VSVChWTV9QQUdFX0lTX0ZSRUUobSksCi0JCQkgICAgKCJ2bV9waHlzX2FsbG9jX2Nv
bnRpZzogcGFnZSAlcCBpcyBub3QgZnJlZSIsIG0pKTsKLQkJCUtBU1NFUlQobS0+dmFsaWQgPT0g
MCwKLQkJCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAgaXMgdmFsaWQi
LCBtKSk7Ci0JCQljbnQudl9mcmVlX2NvdW50LS07CisJCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAm
dnApOworCQlpZiAodnAgIT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIEVucXVldWUgdGhlIHZub2Rl
IGZvciBkZWZlcnJlZCB2ZHJvcCgpLgorCQkJICoKKwkJCSAqIFVubWFuYWdlZCBwYWdlcyBkb24n
dCB1c2UgInBhZ2VxIiwgc28gaXQKKwkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0
cnVjdCBhIHNob3J0LQorCQkJICogbGl2ZWQgcXVldWUgb2Ygdm5vZGVzLgorCQkJICovCisJCQlt
LT5wYWdlcS50cWVfcHJldiA9ICh2b2lkICopdnA7CisJCQltLT5wYWdlcS50cWVfbmV4dCA9IGRl
ZmVycmVkX3Zkcm9wX2xpc3Q7CisJCQlkZWZlcnJlZF92ZHJvcF9saXN0ID0gbTsKIAkJfQotCQlp
ZiAobS0+ZmxhZ3MgJiBQR19aRVJPKQotCQkJdm1fcGFnZV96ZXJvX2NvdW50LS07Ci0JCS8qIERv
bid0IGNsZWFyIHRoZSBQR19aRVJPIGZsYWc7IHdlJ2xsIG5lZWQgaXQgbGF0ZXIuICovCi0JCW0t
PmZsYWdzID0gUEdfVU5NQU5BR0VEIHwgKG0tPmZsYWdzICYgUEdfWkVSTyk7Ci0JCW0tPm9mbGFn
cyA9IDA7Ci0JCS8qIFVubWFuYWdlZCBwYWdlcyBkb24ndCB1c2UgImFjdF9jb3VudCIuICovCiAJ
fQogCWZvciAoOyBpIDwgcm91bmR1cDIobnBhZ2VzLCAxIDw8IGltaW4ob2luZCwgb3JkZXIpKTsg
aSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07CkluZGV4OiBzeXMvdm0vdm1fcGh5cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHN5cy92bS92bV9waHlzLmgJKHJldmlzaW9uIDIxMDE1NykKKysrIHN5cy92bS92bV9w
aHlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICB2bV9wYWRkcl90IGxv
dywgdm1fcGFkZHJfdCBoaWdoLAogICAgIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50LCB1bnNpZ25l
ZCBsb25nIGJvdW5kYXJ5KTsKIHZtX3BhZ2VfdCB2bV9waHlzX2FsbG9jX3BhZ2VzKGludCBwb29s
LCBpbnQgb3JkZXIpOwordm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoaW50
IGZsaW5kLCBpbnQgcG9vbCwgaW50IG9yZGVyKTsKIHZtX3BhZGRyX3Qgdm1fcGh5c19ib290c3Ry
YXBfYWxsb2Modm1fc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KTsKIHZvaWQg
dm1fcGh5c19mcmVlX3BhZ2VzKHZtX3BhZ2VfdCBtLCBpbnQgb3JkZXIpOwogdm9pZCB2bV9waHlz
X2luaXQodm9pZCk7CkluZGV4OiBzeXMvdm0vdm1fcGFnZS5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy92
bS92bV9wYWdlLmMJKHJldmlzaW9uIDIxMDE1NykKKysrIHN5cy92bS92bV9wYWdlLmMJKHdvcmtp
bmcgY29weSkKQEAgLTEzNTUsNiArMTM1NSw5MyBAQAogfQogCiAvKgorICogSW5pdGlhbGl6ZSBh
IHBhZ2UgdGhhdCBoYXMgYmVlbiBmcmVzaGx5IGRlcXVldWVkIGZyb20gYSBmcmVlbGlzdC4KKyAq
IFRoZSBjYWxsZXIgaGFzIHRvIGRyb3AgdGhlIHZub2RlIHJldHVuZWQgaW4gZHJvcCwgaWYgaXQg
aXMgbm90IE5VTEwuCisgKgorICogVG8gYmUgY2FsbGVkIHdpdGggdm1fcGFnZV9xdWV1ZV9mcmVl
X210eCBoZWxkLgorICovCit2b2lkCit2bV9wYWdlX2FsbG9jX2luaXQodm1fcGFnZV90IG0sIHN0
cnVjdCB2bm9kZSAqKmRyb3ApCit7CisJdm1fb2JqZWN0X3QgbV9vYmplY3Q7CisKKwlLQVNTRVJU
KG0tPnF1ZXVlID09IFBRX05PTkUsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVw
IGhhcyB1bmV4cGVjdGVkIHF1ZXVlICVkIiwKKwkgICAgbSwgbS0+cXVldWUpKTsKKwlLQVNTRVJU
KG0tPndpcmVfY291bnQgPT0gMCwKKwkgICAgKCJ2bV9wYWdlX2FsbG9jX2luaXQ6IHBhZ2UgJXAg
aXMgd2lyZWQiLCBtKSk7CisJS0FTU0VSVChtLT5ob2xkX2NvdW50ID09IDAsCisJICAgICgidm1f
cGFnZV9hbGxvY19pbml0OiBwYWdlICVwIGlzIGhlbGQiLCBtKSk7CisJS0FTU0VSVChtLT5idXN5
ID09IDAsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVwIGlzIGJ1c3kiLCBtKSk7
CisJS0FTU0VSVChtLT5kaXJ0eSA9PSAwLAorCSAgICAoInZtX3BhZ2VfYWxsb2NfaW5pdDogcGFn
ZSAlcCBpcyBkaXJ0eSIsIG0pKTsKKwlLQVNTRVJUKHBtYXBfcGFnZV9nZXRfbWVtYXR0cihtKSA9
PSBWTV9NRU1BVFRSX0RFRkFVTFQsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVw
IGhhcyB1bmV4cGVjdGVkIG1lbWF0dHIgJWQiLAorCSAgICBtLCBwbWFwX3BhZ2VfZ2V0X21lbWF0
dHIobSkpKTsKKwltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7
CisJKmRyb3AgPSBOVUxMOworCWlmICgobS0+ZmxhZ3MgJiBQR19DQUNIRUQpICE9IDApIHsKKwkJ
bS0+dmFsaWQgPSAwOworCQltX29iamVjdCA9IG0tPm9iamVjdDsKKwkJdm1fcGFnZV9jYWNoZV9y
ZW1vdmUobSk7CisJCWlmIChtX29iamVjdC0+dHlwZSA9PSBPQkpUX1ZOT0RFICYmCisJCSAgICBt
X29iamVjdC0+Y2FjaGUgPT0gTlVMTCkKKwkJCSpkcm9wID0gbV9vYmplY3QtPmhhbmRsZTsKKwl9
IGVsc2UgeworCQlLQVNTRVJUKFZNX1BBR0VfSVNfRlJFRShtKSwKKwkJICAgICgidm1fcGFnZV9h
bGxvY19pbml0OiBwYWdlICVwIGlzIG5vdCBmcmVlIiwgbSkpOworCQlLQVNTRVJUKG0tPnZhbGlk
ID09IDAsCisJCSAgICAoInZtX3BhZ2VfYWxsb2NfaW5pdDogZnJlZSBwYWdlICVwIGlzIHZhbGlk
IiwgbSkpOworCQljbnQudl9mcmVlX2NvdW50LS07CisJfQorCWlmIChtLT5mbGFncyAmIFBHX1pF
Uk8pCisJCXZtX3BhZ2VfemVyb19jb3VudC0tOworCS8qIERvbid0IGNsZWFyIHRoZSBQR19aRVJP
IGZsYWc7IHdlJ2xsIG5lZWQgaXQgbGF0ZXIuICovCisJbS0+ZmxhZ3MgPSBQR19VTk1BTkFHRUQg
fCAobS0+ZmxhZ3MgJiBQR19aRVJPKTsKKwltLT5vZmxhZ3MgPSAwOworCS8qIFVubWFuYWdlZCBw
YWdlcyBkb24ndCB1c2UgImFjdF9jb3VudCIuICovCit9CisKKy8qCisgKiAJdm1fcGFnZV9hbGxv
Y19mcmVlbGlzdDoKKyAqIAorICoJQWxsb2NhdGUgYSBwYWdlIGZyb20gdGhlIHNwZWNpZmllZCBm
cmVlbGlzdCB3aXRoIHNwZWNpZmllZCBvcmRlci4KKyAqCU9ubHkgdGhlIEFMTE9DX0NMQVNTIHZh
bHVlcyBpbiByZXEgYXJlIGhvbm9yZWQsIG90aGVyIHJlcXVlc3QgZmxhZ3MKKyAqCWFyZSBpZ25v
cmVkLgorICovCit2bV9wYWdlX3QKK3ZtX3BhZ2VfYWxsb2NfZnJlZWxpc3QoaW50IGZsaW5kLCBp
bnQgb3JkZXIsIGludCByZXEpCit7CisJc3RydWN0IHZub2RlICpkcm9wOworCXZtX3BhZ2VfdCBt
OworCWludCBwYWdlX3JlcTsKKworCW0gPSBOVUxMOworCXBhZ2VfcmVxID0gcmVxICYgVk1fQUxM
T0NfQ0xBU1NfTUFTSzsKKwltdHhfbG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJLyoK
KwkgKiBEbyBub3QgYWxsb2NhdGUgcmVzZXJ2ZWQgcGFnZXMgdW5sZXNzIHRoZSByZXEgaGFzIGFz
a2VkIGZvciBpdAorCSAqLworCWlmIChjbnQudl9mcmVlX2NvdW50ICsgY250LnZfY2FjaGVfY291
bnQgPiBjbnQudl9mcmVlX3Jlc2VydmVkIHx8CisJICAgIChwYWdlX3JlcSA9PSBWTV9BTExPQ19T
WVNURU0gJiYgCisJICAgIGNudC52X2ZyZWVfY291bnQgKyBjbnQudl9jYWNoZV9jb3VudCA+IGNu
dC52X2ludGVycnVwdF9mcmVlX21pbikgfHwKKwkgICAgKHBhZ2VfcmVxID09IFZNX0FMTE9DX0lO
VEVSUlVQVCAmJgorCSAgICBjbnQudl9mcmVlX2NvdW50ICsgY250LnZfY2FjaGVfY291bnQgPiAw
KSkgeworCQltID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgVk1fRlJFRVBP
T0xfRElSRUNULCBvcmRlcik7CisJfQorCWlmIChtID09IE5VTEwpIHsKKwkJbXR4X3VubG9jaygm
dm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXZtX3BhZ2Vf
YWxsb2NfaW5pdChtLCAmZHJvcCk7CisJbXR4X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210
eCk7CisJaWYgKGRyb3ApCisJCXZkcm9wKGRyb3ApOworCXJldHVybiAobSk7Cit9CisKKy8qCiAg
Kgl2bV93YWl0OgkoYWxzbyBzZWUgVk1fV0FJVCBtYWNybykKICAqCiAgKglCbG9jayB1bnRpbCBm
cmVlIHBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24KSW5kZXg6IHN5cy92bS92bV9w
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc3lzL3ZtL3ZtX3BhZ2UuaAkocmV2aXNpb24gMjEwMTU3KQor
Kysgc3lzL3ZtL3ZtX3BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBACiAg
KgogICovCiAKK3N0cnVjdCB2bm9kZTsKIGV4dGVybiBpbnQgdm1fcGFnZV96ZXJvX2NvdW50Owog
CiBleHRlcm4gdm1fcGFnZV90IHZtX3BhZ2VfYXJyYXk7CQkvKiBGaXJzdCByZXNpZGVudCBwYWdl
IGluIHRhYmxlICovCkBAIC0zMzksNiArMzQwLDggQEAKIAogdm9pZCB2bV9wYWdlX2FjdGl2YXRl
ICh2bV9wYWdlX3QpOwogdm1fcGFnZV90IHZtX3BhZ2VfYWxsb2MgKHZtX29iamVjdF90LCB2bV9w
aW5kZXhfdCwgaW50KTsKK3ZtX3BhZ2VfdCB2bV9wYWdlX2FsbG9jX2ZyZWVsaXN0KGludCwgaW50
LCBpbnQpOwordm9pZCB2bV9wYWdlX2FsbG9jX2luaXQgKHZtX3BhZ2VfdCwgc3RydWN0IHZub2Rl
ICoqKTsKIHZtX3BhZ2VfdCB2bV9wYWdlX2dyYWIgKHZtX29iamVjdF90LCB2bV9waW5kZXhfdCwg
aW50KTsKIHZvaWQgdm1fcGFnZV9jYWNoZSh2bV9wYWdlX3QpOwogdm9pZCB2bV9wYWdlX2NhY2hl
X2ZyZWUodm1fb2JqZWN0X3QsIHZtX3BpbmRleF90LCB2bV9waW5kZXhfdCk7Cg==
--0014853d013085a1e1048bb84c56--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimVNpvdeGkFcwhhuJJnA6u76-Fo2PwaiparZSK8>