Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Jun 2010 16:44:56 +0530
From:      "Jayachandran C." <c.jayachandran@gmail.com>
To:        Alan Cox <alc@cs.rice.edu>
Cc:        Kostik Belousov <kostikbel@gmail.com>, mips@freebsd.org
Subject:   Re: svn commit: r208589 - head/sys/mips/mips
Message-ID:  <AANLkTim0LyBsdOHOoBeORRSiJZsWO3eKIQqwM8gAmZ9-@mail.gmail.com>
In-Reply-To: <AANLkTimRND9G9udHWzhN06wTJcRCN-OEjPPXctOoyj9_@mail.gmail.com>
References:  <AANLkTimIa3jmBPMhWIOcY6DenGpZ2ZYmqwDTWspVx0-u@mail.gmail.com> <AANLkTil2gE1niUWCHnsTlQvibhxBh7QYwD0TTWo0rj5c@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>

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

On Wed, Jun 9, 2010 at 11:41 PM, Jayachandran C.
<c.jayachandran@gmail.com> wrote:
> On Wed, Jun 9, 2010 at 11:20 AM, Jayachandran C.
> <c.jayachandran@gmail.com> wrote:
>> On Wed, Jun 9, 2010 at 3:01 AM, Jayachandran C.
>> <c.jayachandran@gmail.com> wrote:
>>> On Tue, Jun 8, 2010 at 12:03 PM, Alan Cox <alc@cs.rice.edu> wrote:
>>>>
>>>> VM_FREEPOOL_DIRECT is used by at least amd64 and ia64 for page table p=
ages
>>>> and small kernel memory allocations. =A0Unlike mips, these machines do=
n't have
>>>> MMU support for a direct map. =A0Their direct maps are just a range of
>>>> mappings in the regular (kernel) page table. =A0So, unlike mips, acces=
ses
>>>> through their direct map may still miss in the TLB and require a page =
table
>>>> walk. =A0VM_FREEPOOL_* is a way to increase the physical locality (or
>>>> clustering) of page allocations, so that, for example, page table page
>>>> accesses by the pmap on amd64 are less likely to miss in the TLB. =A0H=
owever,
>>>> it doesn't place a hard restriction on the range of physical addresses=
 that
>>>> will be used, which you need for mips.
>>>>
>>>> The impact of this clustering can be significant. =A0For example, on a=
md64 we
>>>> use 2MB page mappings to implement the direct map. =A0However, old Opt=
erons
>>>> only had 8 data TLB entries for 2MB page mappings. =A0For a uniprocess=
or
>>>> kernel running on such an Opteron, I measured an 18% reduction in syst=
em
>>>> time during a buildworld with the introduction of VM_FREEPOOL_DIRECT. =
=A0(See
>>>> the commit logs for vm/vm_phys.c and the comment that precedes the
>>>> VM_NFREEORDER definition on amd64.)
>>>>
>>>> Until such time as superpage support is ported to mips from the amd64/=
i386
>>>> pmaps, I don't think there is a point in having more than one VM_FREEP=
OOL_*
>>>> on mips. =A0And then, the point would be to reduce fragmentation of th=
e
>>>> physical memory that could be caused by small allocations, such as pag=
e
>>>> table pages.
>>>
>>> Thanks for the detailed explanation.
>>>
>>> Also, after looking at the code again, =A0I think vm_phys_alloc_contig(=
)
>>> can optimized not to look into segments which lie outside the area of
>>> interest. The patch is:
>> [...]
>>> This change, along with the vmparam.h changes for HIGHMEM, I think we
>>> should be able to use =A0vm_phys_alloc_contig() for page table pages (o=
r
>>> have I again missed something fundamental?).
>>
>> That patch was obviously wrong - many segments can map to a freelist
>> as the comment right above my change noted.
>>
>> But the idea of eliminating freelists for which all the segments are
>> outside (low,high) may still be useful, will look at this some more.
>
> I have attached a patch (also at
> http://people.freebsd.org/~jchandra/pmap-with-HIGHMEM-freelist.patch)
> which reverts most of the changes I did to convert the page table page
> allocation to use UMA zone, and replaces it with an implementation
> using vm_phys_alloc_contig() and vm_contig_grow_cache(). This creates
> a new HIGHMEM freelist for mips for memory outside the KSEG0 area, and
> makes a few changes in vm_phys_alloc_contig() to skip freelists for
> which all the segments fall outside the address range requested.
>
> With this the buildworld perf on MIPS is similar to what I got with
> the older code with zones.
>
> If this approach is okay, I will do another round of
> testing(buildworld passes, but I haven't really tested the case where
> grow_cache is called). =A0If the changes are not okay, I will add
> another page allocator which takes freelist as argument as you had
> suggested earlier, instead of the vm_phys_alloc_contig() changes.

Here is the alternative patch
(http://people.freebsd.org/~jchandra/pmap-with-HIGHMEM-freelist-alternate.p=
atch).
In this all the pmap.c changes are almost exactly same as the patch
above, except that the call  to vm_phys_alloc_contig() to allocate
page table pages has been replaced with a new function
vm_phys_page_alloc().

The patch also has changes in sys/vm/vm_phys.c to:
- add vm_phys_page_alloc(int flind, int pool, int order) to allocate a
page from a freelist
- add vm_phys_alloc_freelist_pages(int flind, int pool, int order) -
which will be called by vm_phys_page_alloc() and
vm_phys_alloc_pages(), to dequeue a page of correct pool and order.
- move out page initialization code of vm_phys_alloc_contig() to
vm_page_alloc_init(), and use it in both vm_phys_page_alloc and
vm_phys_alloc_contig

I have been running buildworld on this for a few hours now (with code
to add random alloc failuers), and it seems to hold up. Let me know
you comments.

Thanks,
JC.

--00c09f899574c85e660488bf3fcf
Content-Type: text/plain; charset=US-ASCII; 
	name="pmap-with-HIGHMEM-freelist-alternate.patch"
Content-Disposition: attachment; 
	filename="pmap-with-HIGHMEM-freelist-alternate.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gaax0day1

SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvdm1wYXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz
L2luY2x1ZGUvdm1wYXJhbS5oCShyZXZpc2lvbiAyMDg4OTApCisrKyBzeXMvbWlwcy9pbmNsdWRl
L3ZtcGFyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw5IEBACiAjZGVmaW5lCVZN
X01BWFVTRVJfQUREUkVTUwkoKHZtX29mZnNldF90KTB4ODAwMDAwMDApCiAjZGVmaW5lCVZNX01B
WF9NTUFQX0FERFIJVk1fTUFYVVNFUl9BRERSRVNTCiAKLSNkZWZpbmUJVk1fTUlOX0tFUk5FTF9B
RERSRVNTCQkoKHZtX29mZnNldF90KTB4QzAwMDAwMDApCi0jZGVmaW5lCVZNX01BWF9LRVJORUxf
QUREUkVTUwkJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZQlWTV9NSU5fS0VSTkVM
X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEMwMDAwMDAwKQorI2RlZmluZQlWTV9NQVhfS0VSTkVM
X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZQlWTV9ISUdITUVNX0FE
RFJFU1MJKCh2bV9wYWRkcl90KTB4MjAwMDAwMDApCiAjaWYgMAogI2RlZmluZQlLRVJOQkFTRQkJ
KFZNX01JTl9LRVJORUxfQUREUkVTUykKICNlbHNlCkBAIC0xNjgsMTMgKzE2OSwxNSBAQAogI2Rl
ZmluZQlWTV9GUkVFUE9PTF9ESVJFQ1QJMQogCiAvKgotICogd2Ugc3VwcG9ydCAxIGZyZWUgbGlz
dDoKKyAqIHdlIHN1cHBvcnQgMiBmcmVlIGxpc3RzOgogICoKLSAqCS0gREVGQVVMVCBmb3IgYWxs
IHN5c3RlbXMKKyAqCS0gREVGQVVMVCBmb3IgZGlyZWN0IG1hcHBlZCAoS1NFRzApIHBhZ2VzCisg
KgktIEhJR0hNRU0gZm9yIG90aGVyIHBhZ2VzIAogICovCiAKLSNkZWZpbmUJVk1fTkZSRUVMSVNU
CQkxCi0jZGVmaW5lCVZNX0ZSRUVMSVNUX0RFRkFVTFQJMAorI2RlZmluZQlWTV9ORlJFRUxJU1QJ
CTIKKyNkZWZpbmUJVk1fRlJFRUxJU1RfREVGQVVMVAkxCisjZGVmaW5lCVZNX0ZSRUVMSVNUX0hJ
R0hNRU0JMAogCiAvKgogICogVGhlIGxhcmdlc3QgYWxsb2NhdGlvbiBzaXplIGlzIDFNQi4KSW5k
ZXg6IHN5cy9taXBzL21pcHMvcG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBzL21pcHMvcG1h
cC5jCShyZXZpc2lvbiAyMDg4OTApCisrKyBzeXMvbWlwcy9taXBzL3BtYXAuYwkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDggKzE4NCw2IEBACiBzdGF0aWMgaW50IGluaXRfcHRlX3Byb3Qodm1fb2Zm
c2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCk7CiBzdGF0aWMgdm9pZCBwbWFw
X1RMQl9pbnZhbGlkYXRlX2tlcm5lbCh2bV9vZmZzZXRfdCk7CiBzdGF0aWMgdm9pZCBwbWFwX1RM
Ql91cGRhdGVfa2VybmVsKHZtX29mZnNldF90LCBwdF9lbnRyeV90KTsKLXN0YXRpYyB2bV9wYWdl
X3QgcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwX3QsIHVuc2lnbmVkIGludCwgaW50LCB2bV9vZmZz
ZXRfdCAqKTsKLXN0YXRpYyB2b2lkIHBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdlX3QpOwog
CiAjaWZkZWYgU01QCiBzdGF0aWMgdm9pZCBwbWFwX2ludmFsaWRhdGVfcGFnZV9hY3Rpb24odm9p
ZCAqYXJnKTsKQEAgLTE5MywxMCArMTkxLDYgQEAKIHN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3Bh
Z2VfYWN0aW9uKHZvaWQgKmFyZyk7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcG1hcF9wdHBnem9u
ZV9kdG9yKHZvaWQgKm1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgdm9pZCAqcG1h
cF9wdHBnem9uZV9hbGxvY2YodW1hX3pvbmVfdCwgaW50LCB1X2ludDhfdCAqLCBpbnQpOwotc3Rh
dGljIHVtYV96b25lX3QgcHRwZ3pvbmU7Ci0KIHN0cnVjdCBsb2NhbF9zeXNtYXBzIHsKIAlzdHJ1
Y3QgbXR4IGxvY2s7CiAJdm1fb2Zmc2V0X3QgYmFzZTsKQEAgLTMyOSw3ICszMjMsNyBAQAogfQog
CiAvKgotICoJQm9vdHN0cmFwIHRoZSBzeXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRoIHZpcnR1YWwg
bWVtb3J5LiAgVGhpcworICogQm9vdHN0cmFwIHRoZSBzeXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRo
IHZpcnR1YWwgbWVtb3J5LiAgVGhpcwogICogYXNzdW1lcyB0aGF0IHRoZSBwaHlzX2F2YWlsIGFy
cmF5IGhhcyBiZWVuIGluaXRpYWxpemVkLgogICovCiB2b2lkCkBAIC01MzUsMTAgKzUyOSw2IEBA
CiAJcHZfZW50cnlfbWF4ID0gUE1BUF9TSFBHUEVSUFJPQyAqIG1heHByb2MgKyBjbnQudl9wYWdl
X2NvdW50OwogCXB2X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2X2VudHJ5X21heCAvIDEwKTsK
IAl1bWFfem9uZV9zZXRfb2JqKHB2em9uZSwgJnB2em9uZV9vYmosIHB2X2VudHJ5X21heCk7Ci0K
LQlwdHBnem9uZSA9IHVtYV96Y3JlYXRlKCJQVCBFTlRSWSIsIFBBR0VfU0laRSwgTlVMTCwgcG1h
cF9wdHBnem9uZV9kdG9yLAotCSAgICBOVUxMLCBOVUxMLCBQQUdFX1NJWkUgLSAxLCBVTUFfWk9O
RV9OT0ZSRUUgfCBVTUFfWk9ORV9aSU5JVCk7Ci0JdW1hX3pvbmVfc2V0X2FsbG9jZihwdHBnem9u
ZSwgcG1hcF9wdHBnem9uZV9hbGxvY2YpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04ODUsMTIgKzg3NSw4IEBACiAJLyoKIAkg
KiBJZiB0aGUgcGFnZSBpcyBmaW5hbGx5IHVud2lyZWQsIHNpbXBseSBmcmVlIGl0LgogCSAqLwor
CXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVf
Y291bnQsIDEpOwotCVBNQVBfVU5MT0NLKHBtYXApOwotCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp
OwotCXBtYXBfcmVsZWFzZV9wdGVfcGFnZShtKTsKLQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7Ci0J
UE1BUF9MT0NLKHBtYXApOwogCXJldHVybiAoMSk7CiB9CiAKQEAgLTk0OSw5NiArOTM1LDM1IEBA
CiAJYnplcm8oJnBtYXAtPnBtX3N0YXRzLCBzaXplb2YgcG1hcC0+cG1fc3RhdHMpOwogfQogCisK
IHN0YXRpYyB2b2lkCi1wbWFwX3B0cGd6b25lX2R0b3Iodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9p
ZCAqYXJnKQorcG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hlKGludCB3YWl0KQogewotI2lmZGVmIElO
VkFSSUFOVFMKLQlzdGF0aWMgY2hhciB6ZXJvcGFnZVtQQUdFX1NJWkVdOwotCi0JS0FTU0VSVChz
aXplID09IFBBR0VfU0laRSwKLQkJKCJwbWFwX3B0cGd6b25lX2R0b3I6IGludmFsaWQgc2l6ZSAl
ZCIsIHNpemUpKTsKLQlLQVNTRVJUKGJjbXAobWVtLCB6ZXJvcGFnZSwgUEFHRV9TSVpFKSA9PSAw
LAotCQkoInBtYXBfcHRwZ3pvbmVfZHRvcjogZnJlZWluZyBhIG5vbi16ZXJvZWQgcGFnZSIpKTsK
LSNlbmRpZgorCXByaW50ZigiWyVzXSB3YWl0ICV4XG4iLCBfX2Z1bmNfXywgd2FpdCk7CisJdm1f
Y29udGlnX2dyb3dfY2FjaGUoMywgMCwgTUlQU19LU0VHMF9MQVJHRVNUX1BIWVMpOwogfQogCi1z
dGF0aWMgdm9pZCAqCi1wbWFwX3B0cGd6b25lX2FsbG9jZih1bWFfem9uZV90IHpvbmUsIGludCBi
eXRlcywgdV9pbnQ4X3QgKmZsYWdzLCBpbnQgd2FpdCkKLXsKLQl2bV9wYWdlX3QgbTsKLQl2bV9w
YWRkcl90IHBhZGRyOwotCWludCB0cmllczsKLQkKLQlLQVNTRVJUKGJ5dGVzID09IFBBR0VfU0la
RSwKLQkJKCJwbWFwX3B0cGd6b25lX2FsbG9jZjogaW52YWxpZCBhbGxvY2F0aW9uIHNpemUgJWQi
LCBieXRlcykpOwogCi0JKmZsYWdzID0gVU1BX1NMQUJfUFJJVjsKLQl0cmllcyA9IDA7Ci1yZXRy
eToKLQltID0gdm1fcGh5c19hbGxvY19jb250aWcoMSwgMCwgTUlQU19LU0VHMF9MQVJHRVNUX1BI
WVMsCi0JICAgIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyaWVzIDwgKCh3YWl0ICYgTV9OT1dBSVQpICE9IDAgPyAxIDogMykp
IHsKLQkJCXZtX2NvbnRpZ19ncm93X2NhY2hlKHRyaWVzLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1Rf
UEhZUyk7Ci0JCQl0cmllcysrOwotCQkJZ290byByZXRyeTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4g
KE5VTEwpOwotCX0KLQotCXBhZGRyID0gVk1fUEFHRV9UT19QSFlTKG0pOwotCXJldHVybiAoKHZv
aWQgKilNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIpKTsKLX0JCi0KIHN0YXRpYyB2bV9wYWdlX3QK
LXBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90IHBtYXAsIHVuc2lnbmVkIGludCBpbmRleCwgaW50
IHdhaXQsIHZtX29mZnNldF90ICp2YXApCitwbWFwX2FsbG9jX3B0ZV9wYWdlKHVuc2lnbmVkIGlu
dCBpbmRleCwgaW50IHdhaXQpCiB7Ci0Jdm1fcGFkZHJfdCBwYWRkcjsKLQl2b2lkICp2YTsKIAl2
bV9wYWdlX3QgbTsKLQlpbnQgbG9ja2VkOwogCi0JbG9ja2VkID0gbXR4X293bmVkKCZwbWFwLT5w
bV9tdHgpOwotCWlmIChsb2NrZWQpIHsKLQkJbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgs
IE1BX09XTkVEKTsKLQkJUE1BUF9VTkxPQ0socG1hcCk7Ci0JCXZtX3BhZ2VfdW5sb2NrX3F1ZXVl
cygpOwotCX0KLQl2YSA9IHVtYV96YWxsb2MocHRwZ3pvbmUsIHdhaXQpOwotCWlmIChsb2NrZWQp
IHsKLQkJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JfQotCWlm
ICh2YSA9PSBOVUxMKQorCW0gPSB2bV9waHlzX3BhZ2VfYWxsb2MoVk1fRlJFRUxJU1RfREVGQVVM
VCwgVk1fRlJFRVBPT0xfREVGQVVMVCwwKTsKKwlpZiAobSA9PSBOVUxMKQogCQlyZXR1cm4gKE5V
TEwpOwogCi0JcGFkZHIgPSBNSVBTX0tTRUcwX1RPX1BIWVModmEpOwotCW0gPSBQSFlTX1RPX1ZN
X1BBR0UocGFkZHIpOwotCQotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7
CisJaWYgKChtLT5mbGFncyAmIFBHX1pFUk8pID09IDApCisJCXBtYXBfemVyb19wYWdlKG0pOwor
CiAJbS0+cGluZGV4ID0gaW5kZXg7CiAJbS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOwotCW0t
PndpcmVfY291bnQgPSAxOwotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMo
KTsKLQogCWF0b21pY19hZGRfaW50KCZjbnQudl93aXJlX2NvdW50LCAxKTsKLQkqdmFwID0gKHZt
X29mZnNldF90KXZhOworCW0tPndpcmVfY291bnQgPSAxOwogCXJldHVybiAobSk7CiB9CiAKLXN0
YXRpYyB2b2lkCi1wbWFwX3JlbGVhc2VfcHRlX3BhZ2Uodm1fcGFnZV90IG0pCi17Ci0Jdm9pZCAq
dmE7Ci0Jdm1fcGFkZHJfdCBwYWRkcjsKIAotCXBhZGRyID0gVk1fUEFHRV9UT19QSFlTKG0pOwot
CXZhID0gKHZvaWQgKilNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIpOwotCXVtYV96ZnJlZShwdHBn
em9uZSwgdmEpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZSBhIHByZWFsbG9jYXRlZCBhbmQgemVy
b2VkIHBtYXAgc3RydWN0dXJlLAogICogc3VjaCBhcyBvbmUgaW4gYSB2bXNwYWNlIHN0cnVjdHVy
ZS4KQEAgLTEwNTUsMTAgKzk4MCwxMCBAQAogCS8qCiAJICogYWxsb2NhdGUgdGhlIHBhZ2UgZGly
ZWN0b3J5IHBhZ2UKIAkgKi8KLQlwdGRwZyA9IHBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcCwgTlVT
RVJQR1RCTFMsIE1fV0FJVE9LLCAmcHRkdmEpOwotCWlmIChwdGRwZyA9PSBOVUxMKQotCQlyZXR1
cm4gKDApOworCXdoaWxlICgocHRkcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKE5VU0VSUEdUQkxT
LCBNX1dBSVRPSykpID09IE5VTEwpCisJICAgICAgIHBtYXBfZ3Jvd19wdGVfcGFnZV9jYWNoZShN
X1dBSVRPSyk7CiAKKwlwdGR2YSA9IE1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMo
cHRkcGcpKTsKIAlwbWFwLT5wbV9zZWd0YWIgPSAocGRfZW50cnlfdCAqKXB0ZHZhOwogCXBtYXAt
PnBtX2FjdGl2ZSA9IDA7CiAJcG1hcC0+cG1fcHRwaGludCA9IE5VTEw7CkBAIC0xMDg5LDE1ICsx
MDE0LDI4IEBACiAJLyoKIAkgKiBGaW5kIG9yIGZhYnJpY2F0ZSBhIG5ldyBwYWdldGFibGUgcGFn
ZQogCSAqLwotCW0gPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKHBtYXAsIHB0ZXBpbmRleCwgZmxhZ3Ms
ICZwdGV2YSk7Ci0JaWYgKG0gPT0gTlVMTCkKKwlpZiAoKG0gPSBwbWFwX2FsbG9jX3B0ZV9wYWdl
KHB0ZXBpbmRleCwgZmxhZ3MpKSA9PSBOVUxMKSB7CisJCWlmIChmbGFncyAmIE1fV0FJVE9LKSB7
CisJCQlQTUFQX1VOTE9DSyhwbWFwKTsKKwkJCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOworCQkJ
cG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hlKGZsYWdzKTsKKwkJCXZtX3BhZ2VfbG9ja19xdWV1ZXMo
KTsKKwkJCVBNQVBfTE9DSyhwbWFwKTsKKwkJfQorCisJCS8qCisJCSAqIEluZGljYXRlIHRoZSBu
ZWVkIHRvIHJldHJ5LglXaGlsZSB3YWl0aW5nLCB0aGUgcGFnZQorCQkgKiB0YWJsZSBwYWdlIG1h
eSBoYXZlIGJlZW4gYWxsb2NhdGVkLgorCQkgKi8KIAkJcmV0dXJuIChOVUxMKTsKKwl9CiAKIAkv
KgogCSAqIE1hcCB0aGUgcGFnZXRhYmxlIHBhZ2UgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNzIHNw
YWNlLCBpZiBpdAogCSAqIGlzbid0IGFscmVhZHkgdGhlcmUuCiAJICovCiAKKwlwdGV2YSA9IE1J
UFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobSkpOwogCXBtYXAtPnBtX3N0YXRzLnJl
c2lkZW50X2NvdW50Kys7CiAJcG1hcC0+cG1fc2VndGFiW3B0ZXBpbmRleF0gPSAocGRfZW50cnlf
dClwdGV2YTsKIApAQCAtMTE5Myw3ICsxMTMxLDcgQEAKIAogCXB0ZHBnLT53aXJlX2NvdW50LS07
CiAJYXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9jb3VudCwgMSk7Ci0JcG1hcF9yZWxl
YXNlX3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVfemVybyhwdGRwZyk7CiAJUE1BUF9M
T0NLX0RFU1RST1kocG1hcCk7CiB9CiAKQEAgLTEyMDMsNyArMTE0MSw2IEBACiB2b2lkCiBwbWFw
X2dyb3drZXJuZWwodm1fb2Zmc2V0X3QgYWRkcikKIHsKLQl2bV9vZmZzZXRfdCBwYWdldmE7CiAJ
dm1fcGFnZV90IG5rcGc7CiAJcHRfZW50cnlfdCAqcHRlOwogCWludCBpOwpAQCAtMTIzOCwxMyAr
MTE3NSwxMyBAQAogCQkvKgogCQkgKiBUaGlzIGluZGV4IGlzIGJvZ3VzLCBidXQgb3V0IG9mIHRo
ZSB3YXkKIAkJICovCi0JCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKGtlcm5lbF9wbWFwLCBu
a3B0LCBNX05PV0FJVCwgJnBhZ2V2YSk7CisJCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKG5r
cHQsIE1fTk9XQUlUKTsKIAogCQlpZiAoIW5rcGcpCiAJCQlwYW5pYygicG1hcF9ncm93a2VybmVs
OiBubyBtZW1vcnkgdG8gZ3JvdyBrZXJuZWwiKTsKIAogCQlua3B0Kys7Ci0JCXB0ZSA9IChwdF9l
bnRyeV90ICopcGFnZXZhOworCQlwdGUgPSAocHRfZW50cnlfdCAqKU1JUFNfUEhZU19UT19LU0VH
MChWTV9QQUdFX1RPX1BIWVMobmtwZykpOwogCQlzZWd0YWJfcGRlKGtlcm5lbF9zZWdtYXAsIGtl
cm5lbF92bV9lbmQpID0gKHBkX2VudHJ5X3QpcHRlOwogCiAJCS8qCkluZGV4OiBzeXMvdm0vdm1f
cGh5cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN5cy92bS92bV9waHlzLmMJKHJldmlzaW9uIDIwODg5MCkK
KysrIHN5cy92bS92bV9waHlzLmMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDEwIEBACiBz
dGF0aWMgaW50IHZtX3BoeXNfcGFkZHJfdG9fc2VnaW5kKHZtX3BhZGRyX3QgcGEpOwogc3RhdGlj
IHZvaWQgdm1fcGh5c19zcGxpdF9wYWdlcyh2bV9wYWdlX3QgbSwgaW50IG9pbmQsIHN0cnVjdCB2
bV9mcmVlbGlzdCAqZmwsCiAgICAgaW50IG9yZGVyKTsKK3N0YXRpYyB2bV9wYWdlX3Qgdm1fcGh5
c19hbGxvY19mcmVlbGlzdF9wYWdlcyhpbnQgZmxpbmQsIGludCBwb29sLCBpbnQgb3JkZXIpOwor
c3RhdGljIHZvaWQgdm1fcGFnZV9hbGxvY19pbml0KHZtX3BhZ2VfdCBtLCBzdHJ1Y3Qgdm5vZGUg
Kipkcm9wKTsKIAorCiAvKgogICogT3V0cHV0cyB0aGUgc3RhdGUgb2YgdGhlIHBoeXNpY2FsIG1l
bW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSwKICAqIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwg
bWVtb3J5IGluIGVhY2ggZnJlZSBsaXN0LgpAQCAtMjkzLDYgKzI5NiwyOSBAQAogfQogCiAvKgor
ICogR3JhYiBhIHBhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIGZyZWVsaXN0IHdpdGggdGhlIGdpdmVu
IHBvb2wgYW5kCisgKiBvcmRlci4KKyAqLwordm1fcGFnZV90Cit2bV9waHlzX3BhZ2VfYWxsb2Mo
aW50IGZsaW5kLCBpbnQgcG9vbCwgaW50IG9yZGVyKQoreworCXN0cnVjdCB2bm9kZSAqZHJvcDsK
Kwl2bV9wYWdlX3QgbTsKKworCW10eF9sb2NrKCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4KTsKKwlt
ID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgcG9vbCwgb3JkZXIpOworCWlm
IChtID09IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAmZHJvcCk7CisJbXR4
X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJaWYgKGRyb3ApCisJCXZkcm9wKGRy
b3ApOworCXJldHVybiAobSk7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBhIGNvbnRpZ3VvdXMsIHBv
d2VyIG9mIHR3by1zaXplZCBzZXQgb2YgcGh5c2ljYWwgcGFnZXMKICAqIGZyb20gdGhlIGZyZWUg
bGlzdHMuCiAgKgpAQCAtMzAxLDQ5ICszMjcsNjggQEAKIHZtX3BhZ2VfdAogdm1fcGh5c19hbGxv
Y19wYWdlcyhpbnQgcG9vbCwgaW50IG9yZGVyKQogeworCXZtX3BhZ2VfdCBtOworCWludCBmbGlu
ZDsKKworCWZvciAoZmxpbmQgPSAwOyBmbGluZCA8IHZtX25mcmVlbGlzdHM7IGZsaW5kKyspIHsK
KwkJbSA9IHZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoZmxpbmQsIHBvb2wsIG9yZGVyKTsK
KwkJaWYgKG0gIT0gTlVMTCkKKwkJCXJldHVybiBtOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQor
CisvKgorICogRmluZCBhbmQgZGVxdWV1ZSBhIGZyZWUgcGFnZSBvbiB0aGUgZ2l2ZW4gZnJlZSBs
aXN0LCB3aXRoIHRoZSAKKyAqIHNwZWNpZmllZCBwb29sIGFuZCBvcmRlcgorICovCitzdGF0aWMg
dm1fcGFnZV90Cit2bV9waHlzX2FsbG9jX2ZyZWVsaXN0X3BhZ2VzKGludCBmbGluZCwgaW50IHBv
b2wsIGludCBvcmRlcikKK3sJCiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1f
ZnJlZWxpc3QgKmFsdDsKLQlpbnQgZmxpbmQsIG9pbmQsIHBpbmQ7CisJaW50IG9pbmQsIHBpbmQ7
CiAJdm1fcGFnZV90IG07CiAKKwlLQVNTRVJUKGZsaW5kIDwgVk1fTkZSRUVMSVNULAorCSAgICAo
InZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IGZyZWVsaXN0ICVkIGlzIG91dCBvZiByYW5n
ZSIsIGZsaW5kKSk7CiAJS0FTU0VSVChwb29sIDwgVk1fTkZSRUVQT09MLAotCSAgICAoInZtX3Bo
eXNfYWxsb2NfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9vbCkpOworCSAgICAo
InZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwg
cG9vbCkpOwogCUtBU1NFUlQob3JkZXIgPCBWTV9ORlJFRU9SREVSLAotCSAgICAoInZtX3BoeXNf
YWxsb2NfcGFnZXM6IG9yZGVyICVkIGlzIG91dCBvZiByYW5nZSIsIG9yZGVyKSk7CisJICAgICgi
dm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlczogb3JkZXIgJWQgaXMgb3V0IG9mIHJhbmdlIiwg
b3JkZXIpKTsKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7
Ci0JZm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykgewotCQlm
bCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwotCQlmb3IgKG9pbmQgPSBvcmRl
cjsgb2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgewotCQkJbSA9IFRBSUxRX0ZJUlNUKCZm
bFtvaW5kXS5wbCk7CisKKwlmbCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwor
CWZvciAob2luZCA9IG9yZGVyOyBvaW5kIDwgVk1fTkZSRUVPUkRFUjsgb2luZCsrKSB7CisJCW0g
PSBUQUlMUV9GSVJTVCgmZmxbb2luZF0ucGwpOworCQlpZiAobSAhPSBOVUxMKSB7CisJCQlUQUlM
UV9SRU1PVkUoJmZsW29pbmRdLnBsLCBtLCBwYWdlcSk7CisJCQlmbFtvaW5kXS5sY250LS07CisJ
CQltLT5vcmRlciA9IFZNX05GUkVFT1JERVI7CisJCQl2bV9waHlzX3NwbGl0X3BhZ2VzKG0sIG9p
bmQsIGZsLCBvcmRlcik7CisJCQlyZXR1cm4gKG0pOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUg
Z2l2ZW4gcG9vbCB3YXMgZW1wdHkuICBGaW5kIHRoZSBsYXJnZXN0CisJICogY29udGlndW91cywg
cG93ZXItb2YtdHdvLXNpemVkIHNldCBvZiBwYWdlcyBpbiBhbnkKKwkgKiBwb29sLiAgVHJhbnNm
ZXIgdGhlc2UgcGFnZXMgdG8gdGhlIGdpdmVuIHBvb2wsIGFuZAorCSAqIHVzZSB0aGVtIHRvIHNh
dGlzZnkgdGhlIGFsbG9jYXRpb24uCisJICovCisJZm9yIChvaW5kID0gVk1fTkZSRUVPUkRFUiAt
IDE7IG9pbmQgPj0gb3JkZXI7IG9pbmQtLSkgeworCQlmb3IgKHBpbmQgPSAwOyBwaW5kIDwgVk1f
TkZSRUVQT09MOyBwaW5kKyspIHsKKwkJCWFsdCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRd
W3BpbmRdOworCQkJbSA9IFRBSUxRX0ZJUlNUKCZhbHRbb2luZF0ucGwpOwogCQkJaWYgKG0gIT0g
TlVMTCkgewotCQkJCVRBSUxRX1JFTU9WRSgmZmxbb2luZF0ucGwsIG0sIHBhZ2VxKTsKLQkJCQlm
bFtvaW5kXS5sY250LS07CisJCQkJVEFJTFFfUkVNT1ZFKCZhbHRbb2luZF0ucGwsIG0sIHBhZ2Vx
KTsKKwkJCQlhbHRbb2luZF0ubGNudC0tOwogCQkJCW0tPm9yZGVyID0gVk1fTkZSRUVPUkRFUjsK
KwkJCQl2bV9waHlzX3NldF9wb29sKHBvb2wsIG0sIG9pbmQpOwogCQkJCXZtX3BoeXNfc3BsaXRf
cGFnZXMobSwgb2luZCwgZmwsIG9yZGVyKTsKIAkJCQlyZXR1cm4gKG0pOwogCQkJfQogCQl9Ci0K
LQkJLyoKLQkJICogVGhlIGdpdmVuIHBvb2wgd2FzIGVtcHR5LiAgRmluZCB0aGUgbGFyZ2VzdAot
CQkgKiBjb250aWd1b3VzLCBwb3dlci1vZi10d28tc2l6ZWQgc2V0IG9mIHBhZ2VzIGluIGFueQot
CQkgKiBwb29sLiAgVHJhbnNmZXIgdGhlc2UgcGFnZXMgdG8gdGhlIGdpdmVuIHBvb2wsIGFuZAot
CQkgKiB1c2UgdGhlbSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uLgotCQkgKi8KLQkJZm9yIChv
aW5kID0gVk1fTkZSRUVPUkRFUiAtIDE7IG9pbmQgPj0gb3JkZXI7IG9pbmQtLSkgewotCQkJZm9y
IChwaW5kID0gMDsgcGluZCA8IFZNX05GUkVFUE9PTDsgcGluZCsrKSB7Ci0JCQkJYWx0ID0gdm1f
cGh5c19mcmVlX3F1ZXVlc1tmbGluZF1bcGluZF07Ci0JCQkJbSA9IFRBSUxRX0ZJUlNUKCZhbHRb
b2luZF0ucGwpOwotCQkJCWlmIChtICE9IE5VTEwpIHsKLQkJCQkJVEFJTFFfUkVNT1ZFKCZhbHRb
b2luZF0ucGwsIG0sIHBhZ2VxKTsKLQkJCQkJYWx0W29pbmRdLmxjbnQtLTsKLQkJCQkJbS0+b3Jk
ZXIgPSBWTV9ORlJFRU9SREVSOwotCQkJCQl2bV9waHlzX3NldF9wb29sKHBvb2wsIG0sIG9pbmQp
OwotCQkJCQl2bV9waHlzX3NwbGl0X3BhZ2VzKG0sIG9pbmQsIGZsLCBvcmRlcik7Ci0JCQkJCXJl
dHVybiAobSk7Ci0JCQkJfQotCQkJfQotCQl9CiAJfQogCXJldHVybiAoTlVMTCk7CiB9CkBAIC01
NzcsNiArNjIyLDU2IEBACiB9CiAKIC8qCisgKiBJbml0aWFsaXplZCBhIHBhZ2UgdGhhdCBoYXMg
YmVlbiBmcmVzaGx5IGRlcXVldWVkIGZyb20gYSBmcmVlbGlzdAorICogdGhlIGNhbGxlciBoYXMg
dG8gZHJvcCB0aGUgdm5vZGUgcmV0dW5lZCBpbiBkcm9wLCBpZiBpdCBpcyBub3QgTlVMTAorICoK
KyAqIFRvIGJlIGNhbGxlZCB3aXRoIHZtX3BhZ2VfcXVldWVfZnJlZV9tdHggaGVsZC4KKyAqLwor
c3RhdGljIHZvaWQKK3ZtX3BhZ2VfYWxsb2NfaW5pdCh2bV9wYWdlX3QgbSwgc3RydWN0IHZub2Rl
ICoqZHJvcCkKK3sKKwl2bV9vYmplY3RfdCBtX29iamVjdDsKKworCUtBU1NFUlQobS0+cXVldWUg
PT0gUFFfTk9ORSwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBoYXMgdW5l
eHBlY3RlZCBxdWV1ZSAlZCIsCisJICAgIG0sIG0tPnF1ZXVlKSk7CisJS0FTU0VSVChtLT53aXJl
X2NvdW50ID09IDAsCisJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgd2ly
ZWQiLCBtKSk7CisJS0FTU0VSVChtLT5ob2xkX2NvdW50ID09IDAsCisJICAgICgidm1fcGh5c19h
bGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0pKTsKKwlLQVNTRVJUKG0tPmJ1c3kgPT0g
MCwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBpcyBidXN5IiwgbSkpOwor
CUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFn
ZSAlcCBpcyBkaXJ0eSIsIG0pKTsKKwlLQVNTRVJUKHBtYXBfcGFnZV9nZXRfbWVtYXR0cihtKSA9
PSBWTV9NRU1BVFRSX0RFRkFVTFQsCisJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2Ug
JXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAlZCIsCisJICAgIG0sIHBtYXBfcGFnZV9nZXRfbWVt
YXR0cihtKSkpOworCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfZnJlZV9tdHgsIE1BX09XTkVE
KTsKKworCSpkcm9wID0gTlVMTDsKKwlpZiAoKG0tPmZsYWdzICYgUEdfQ0FDSEVEKSAhPSAwKSB7
CisJCW0tPnZhbGlkID0gMDsKKwkJbV9vYmplY3QgPSBtLT5vYmplY3Q7CisJCXZtX3BhZ2VfY2Fj
aGVfcmVtb3ZlKG0pOworCQlpZiAobV9vYmplY3QtPnR5cGUgPT0gT0JKVF9WTk9ERSAmJgorCQkg
ICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpCisJCQkqZHJvcCA9IG1fb2JqZWN0LT5oYW5kbGU7
CisJfSBlbHNlIHsKKwkJS0FTU0VSVChWTV9QQUdFX0lTX0ZSRUUobSksCisJCSAgICAoInZtX3Bo
eXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIG5vdCBmcmVlIiwgbSkpOworCQlLQVNTRVJUKG0t
PnZhbGlkID09IDAsCisJCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAg
aXMgdmFsaWQiLCBtKSk7CisJCWNudC52X2ZyZWVfY291bnQtLTsKKwl9CisJaWYgKG0tPmZsYWdz
ICYgUEdfWkVSTykKKwkJdm1fcGFnZV96ZXJvX2NvdW50LS07CisJLyogRG9uJ3QgY2xlYXIgdGhl
IFBHX1pFUk8gZmxhZzsgd2UnbGwgbmVlZCBpdCBsYXRlci4gKi8KKwltLT5mbGFncyA9IFBHX1VO
TUFOQUdFRCB8IChtLT5mbGFncyAmIFBHX1pFUk8pOworCW0tPm9mbGFncyA9IDA7CisJLyogVW5t
YW5hZ2VkIHBhZ2VzIGRvbid0IHVzZSAiYWN0X2NvdW50Ii4gKi8KK30KKworLyoKICAqIEFsbG9j
YXRlIGEgY29udGlndW91cyBzZXQgb2YgcGh5c2ljYWwgcGFnZXMgb2YgdGhlIGdpdmVuIHNpemUK
ICAqICJucGFnZXMiIGZyb20gdGhlIGZyZWUgbGlzdHMuICBBbGwgb2YgdGhlIHBoeXNpY2FsIHBh
Z2VzIG11c3QgYmUgYXQKICAqIG9yIGFib3ZlIHRoZSBnaXZlbiBwaHlzaWNhbCBhZGRyZXNzICJs
b3ciIGFuZCBiZWxvdyB0aGUgZ2l2ZW4KQEAgLTU5MiwxMCArNjg3LDExIEBACiB7CiAJc3RydWN0
IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fcGh5c19zZWcgKnNlZzsKLQl2bV9vYmplY3Rf
dCBtX29iamVjdDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOwogCXZtX3BhZGRyX3QgcGEsIHBhX2xhc3Qs
IHNpemU7CiAJdm1fcGFnZV90IGRlZmVycmVkX3Zkcm9wX2xpc3QsIG0sIG1fcmV0OwogCWludCBm
bGluZCwgaSwgb2luZCwgb3JkZXIsIHBpbmQ7CisJCiAKIAlzaXplID0gbnBhZ2VzIDw8IFBBR0Vf
U0hJRlQ7CiAJS0FTU0VSVChzaXplICE9IDAsCkBAIC02ODcsNTAgKzc4MywyMCBAQAogCXZtX3Bo
eXNfc3BsaXRfcGFnZXMobV9yZXQsIG9pbmQsIGZsLCBvcmRlcik7CiAJZm9yIChpID0gMDsgaSA8
IG5wYWdlczsgaSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07Ci0JCUtBU1NFUlQobS0+cXVldWUgPT0g
UFFfTk9ORSwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaGFzIHVuZXhw
ZWN0ZWQgcXVldWUgJWQiLAotCQkgICAgbSwgbS0+cXVldWUpKTsKLQkJS0FTU0VSVChtLT53aXJl
X2NvdW50ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIHdp
cmVkIiwgbSkpOwotCQlLQVNTRVJUKG0tPmhvbGRfY291bnQgPT0gMCwKLQkJICAgICgidm1fcGh5
c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0pKTsKLQkJS0FTU0VSVChtLT5idXN5
ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIGJ1c3kiLCBt
KSk7Ci0JCUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250
aWc6IHBhZ2UgJXAgaXMgZGlydHkiLCBtKSk7Ci0JCUtBU1NFUlQocG1hcF9wYWdlX2dldF9tZW1h
dHRyKG0pID09IFZNX01FTUFUVFJfREVGQVVMVCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250
aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAlZCIsCi0JCSAgICBtLCBwbWFwX3Bh
Z2VfZ2V0X21lbWF0dHIobSkpKTsKLQkJaWYgKChtLT5mbGFncyAmIFBHX0NBQ0hFRCkgIT0gMCkg
ewotCQkJbS0+dmFsaWQgPSAwOwotCQkJbV9vYmplY3QgPSBtLT5vYmplY3Q7Ci0JCQl2bV9wYWdl
X2NhY2hlX3JlbW92ZShtKTsKLQkJCWlmIChtX29iamVjdC0+dHlwZSA9PSBPQkpUX1ZOT0RFICYm
Ci0JCQkgICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpIHsKLQkJCQkvKgotCQkJCSAqIEVucXVl
dWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgpLgotCQkJCSAqCi0JCQkJICogVW5tYW5h
Z2VkIHBhZ2VzIGRvbid0IHVzZSAicGFnZXEiLCBzbyBpdAotCQkJCSAqIGNhbiBiZSBzYWZlbHkg
YWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQotCQkJCSAqIGxpdmVkIHF1ZXVlIG9mIHZub2Rl
cy4KLQkJCQkgKi8KLQkJCQltLT5wYWdlcS50cWVfcHJldiA9IG1fb2JqZWN0LT5oYW5kbGU7Ci0J
CQkJbS0+cGFnZXEudHFlX25leHQgPSBkZWZlcnJlZF92ZHJvcF9saXN0OwotCQkJCWRlZmVycmVk
X3Zkcm9wX2xpc3QgPSBtOwotCQkJfQotCQl9IGVsc2UgewotCQkJS0FTU0VSVChWTV9QQUdFX0lT
X0ZSRUUobSksCi0JCQkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBpcyBub3Qg
ZnJlZSIsIG0pKTsKLQkJCUtBU1NFUlQobS0+dmFsaWQgPT0gMCwKLQkJCSAgICAoInZtX3BoeXNf
YWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAgaXMgdmFsaWQiLCBtKSk7Ci0JCQljbnQudl9mcmVl
X2NvdW50LS07CisJCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAmdnApOworCQlpZiAodnAgIT0gTlVM
TCkgeworCQkJLyoKKwkJCSAqIEVucXVldWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgp
LgorCQkJICoKKwkJCSAqIFVubWFuYWdlZCBwYWdlcyBkb24ndCB1c2UgInBhZ2VxIiwgc28gaXQK
KwkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQorCQkJICog
bGl2ZWQgcXVldWUgb2Ygdm5vZGVzLgorCQkJICovCisKKwkJCW0tPnBhZ2VxLnRxZV9wcmV2ID0g
KHZvaWQgKil2cDsKKwkJCW0tPnBhZ2VxLnRxZV9uZXh0ID0gZGVmZXJyZWRfdmRyb3BfbGlzdDsK
KwkJCWRlZmVycmVkX3Zkcm9wX2xpc3QgPSBtOwogCQl9Ci0JCWlmIChtLT5mbGFncyAmIFBHX1pF
Uk8pCi0JCQl2bV9wYWdlX3plcm9fY291bnQtLTsKLQkJLyogRG9uJ3QgY2xlYXIgdGhlIFBHX1pF
Uk8gZmxhZzsgd2UnbGwgbmVlZCBpdCBsYXRlci4gKi8KLQkJbS0+ZmxhZ3MgPSBQR19VTk1BTkFH
RUQgfCAobS0+ZmxhZ3MgJiBQR19aRVJPKTsKLQkJbS0+b2ZsYWdzID0gMDsKLQkJLyogVW5tYW5h
Z2VkIHBhZ2VzIGRvbid0IHVzZSAiYWN0X2NvdW50Ii4gKi8KIAl9CiAJZm9yICg7IGkgPCByb3Vu
ZHVwMihucGFnZXMsIDEgPDwgaW1pbihvaW5kLCBvcmRlcikpOyBpKyspIHsKIAkJbSA9ICZtX3Jl
dFtpXTsKSW5kZXg6IHN5cy92bS92bV9waHlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL3ZtL3ZtX3Bo
eXMuaAkocmV2aXNpb24gMjA4ODkwKQorKysgc3lzL3ZtL3ZtX3BoeXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsNyBAQAogdm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfY29udGlnKHVuc2ln
bmVkIGxvbmcgbnBhZ2VzLAogICAgIHZtX3BhZGRyX3QgbG93LCB2bV9wYWRkcl90IGhpZ2gsCiAg
ICAgdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQsIHVuc2lnbmVkIGxvbmcgYm91bmRhcnkpOwordm1f
cGFnZV90IHZtX3BoeXNfcGFnZV9hbGxvYyhpbnQgZmxpbmQsIGludCBwb29sLCBpbnQgb3JkZXIp
Owogdm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfcGFnZXMoaW50IHBvb2wsIGludCBvcmRlcik7CiB2
bV9wYWRkcl90IHZtX3BoeXNfYm9vdHN0cmFwX2FsbG9jKHZtX3NpemVfdCBzaXplLCB1bnNpZ25l
ZCBsb25nIGFsaWdubWVudCk7CiB2b2lkIHZtX3BoeXNfZnJlZV9wYWdlcyh2bV9wYWdlX3QgbSwg
aW50IG9yZGVyKTsK
--00c09f899574c85e660488bf3fcf--



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