Subject: Re: Looking for advice on using pageable memory
To: None <tech-kern@netbsd.org>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: tech-kern
Date: 11/13/2006 21:22:10
------=_Part_100446_18711275.1163449330612
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On 11/13/06, Jason Thorpe <thorpej@shagadelic.org> wrote:
>
> On Nov 13, 2006, at 4:26 AM, Julio M. Merino Vidal wrote:
>
> > 2) Then I tried to tweak the uvm_km_alloc_poolpage and other
> >   related functions (their *_cached and *free* counterparts) to
> > request
> >   pageable kernel memory by using the UVM_KMF_PAGEABLE flag
> >   (instead of the UVM_KMF_WIRED currently used).  Similarly I changed
> >   usages of pmap_kenter_va for pmap_enter which allows me to _not_
> >   pass the wired flag.
> >
> >   This worked (the system didn't crash, that is) but the system could
> >   not send them to swap at all.  It also reached a limit were it could
> >   not allocate more pages (even when there was plenty of free swap
> >   space), so it started thrashing as crazy.
> >
> >   Does it have any effect to set a page UVM_KMF_PAGEABLE in the
> >   main kernel map?  It doesn't seem so...
>
> kernel_map is already pageable:
>
>          uvm_map_setup_kernel(&kernel_map_store, base, end,
> VM_MAP_PAGEABLE);

Aha; I saw that, but as my experiments failed I assumed it didn't work
as I imagined for whatever reason.

> The right thing for you to do is to simply define your own pool page
> allocator for your tmpfs pools, and use uvm_km_alloc(kernel_map, ...,
> UVM_KMF_PAGEABLE) within that allocator to allocate the pages.

Please take a look at the two attached patches:

The first one, tmpfs-simple.diff, is something I've just hacked based
on your advice.  It is very simple, seems to work (except for a couple
of problems), but tmpfs feels slower -- I bet it is because the "pool
page cache" is not involved.  (The pool code must be that "complex"
for a reason! ;-)

The second one, tmpfs-generic.diff, is what I was trying before I
wrote the first email (and why I said that 2 wasn't working).  I aimed
at adding a flag to pools to make them pageable so that you'd take
advantage of the standard allocators. The thing is that the switch
from wired memory to pageable one seems to be a very small change
inside all the pool management code.  So why implement a new pool
allocator if one can reuse the existing ones with all their included
goodies?  But oh well, for some reason this is not working.  I guess I
messed something up when dealing with the pmap.  Any idea?

Thank you!

-- 
Julio M. Merino Vidal <jmmv84@gmail.com>
The Julipedia - http://julipedia.blogspot.com/

------=_Part_100446_18711275.1163449330612
Content-Type: text/plain; name="tmpfs-simple.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tmpfs-simple.diff"

SW5kZXg6IGZzL3RtcGZzL3RtcGZzX3Bvb2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL2ZzL3RtcGZzL3RtcGZzX3Bvb2wuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42
CmRpZmYgLXUgLXAgLXIxLjYgdG1wZnNfcG9vbC5jCi0tLSBmcy90bXBmcy90bXBmc19wb29sLmMJ
OSBOb3YgMjAwNiAxNjoyMDo1NiAtMDAwMAkxLjYKKysrIGZzL3RtcGZzL3RtcGZzX3Bvb2wuYwkx
MyBOb3YgMjAwNiAyMDoxODozOCAtMDAwMApAQCAtNTYsMTEgKzU2LDYgQEAgX19LRVJORUxfUkNT
SUQoMCwgIiROZXRCU0Q6IHRtcGZzX3Bvb2wuYwogdm9pZCAqCXRtcGZzX3Bvb2xfcGFnZV9hbGxv
YyhzdHJ1Y3QgcG9vbCAqLCBpbnQpOwogdm9pZAl0bXBmc19wb29sX3BhZ2VfZnJlZShzdHJ1Y3Qg
cG9vbCAqLCB2b2lkICopOwogCi0vKiBYWFg6IFdpbGwgZ28gYXdheSB3aGVuIG91ciBwb29sIGFs
bG9jYXRvciBkb2VzIHdoYXQgaXQgaGFzIHRvIGRvIGJ5Ci0gKiBpdHNlbGYuICovCi1leHRlcm4g
dm9pZCoJcG9vbF9wYWdlX2FsbG9jX25vaW50cihzdHJ1Y3QgcG9vbCAqLCBpbnQpOwotZXh0ZXJu
IHZvaWQJcG9vbF9wYWdlX2ZyZWVfbm9pbnRyKHN0cnVjdCBwb29sICosIHZvaWQgKik7Ci0KIC8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMTY0LDggKzE1OSw5IEBAIHRtcGZzX3Bvb2xfcGFn
ZV9hbGxvYyhzdHJ1Y3QgcG9vbCAqcHAsIGkKIAkJcmV0dXJuIE5VTEw7CiAKIAl0bXAtPnRtX3Bh
Z2VzX3VzZWQgKz0gMTsKLQlwYWdlID0gcG9vbF9wYWdlX2FsbG9jX25vaW50cihwcCwgZmxhZ3Mp
OwotCUtBU1NFUlQocGFnZSAhPSBOVUxMKTsKKwlwYWdlID0gKHZvaWQgKil1dm1fa21fYWxsb2Mo
a2VybmVsX21hcCwgUEFHRV9TSVpFLCAwLAorCSAgICAoZmxhZ3MgJiBQUl9XQUlUT0sgPyAwIDog
VVZNX0tNRl9OT1dBSVQpIHwgVVZNX0tNRl9QQUdFQUJMRSk7CisJS0FTU0VSVChJTVBMSUVTKGZs
YWdzICYgUFJfV0FJVE9LLCBwYWdlICE9IE5VTEwpKTsKIAogCXJldHVybiBwYWdlOwogfQpAQCAt
MTgyLDcgKzE3OCw3IEBAIHRtcGZzX3Bvb2xfcGFnZV9mcmVlKHN0cnVjdCBwb29sICpwcCwgdm8K
IAl0bXAgPSB0cHAtPnRwX21vdW50OwogCiAJdG1wLT50bV9wYWdlc191c2VkIC09IDE7Ci0JcG9v
bF9wYWdlX2ZyZWVfbm9pbnRyKHBwLCB2KTsKKwl1dm1fa21fZnJlZShrZXJuZWxfbWFwLCAodmFk
ZHJfdCl2LCBQQUdFX1NJWkUsIFVWTV9LTUZfUEFHRUFCTEUpOwogfQogCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8K
------=_Part_100446_18711275.1163449330612
Content-Type: text/plain; name="tmpfs-generic.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tmpfs-generic.diff"

SW5kZXg6IHV2bS91dm1fZXh0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3N5cy91dm0vdXZtX2V4dGVybi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC11
IC1wIC1yMS4xMjEgdXZtX2V4dGVybi5oCi0tLSB1dm0vdXZtX2V4dGVybi5oCTEyIE9jdCAyMDA2
IDEwOjE0OjIwIC0wMDAwCTEuMTIxCisrKyB1dm0vdXZtX2V4dGVybi5oCTEyIE5vdiAyMDA2IDIy
OjA1OjU3IC0wMDAwCkBAIC02MDAsMTAgKzYwMCwxNCBAQCB2b2lkCQkJdXZtX2ttX2ZyZWUoc3Ry
dWN0IHZtX21hcCAqLCB2YWRkCiBzdHJ1Y3Qgdm1fbWFwCQkqdXZtX2ttX3N1YmFsbG9jKHN0cnVj
dCB2bV9tYXAgKiwgdmFkZHJfdCAqLAogCQkJICAgIHZhZGRyX3QgKiwgdnNpemVfdCwgaW50LCBi
b29sZWFuX3QsCiAJCQkgICAgc3RydWN0IHZtX21hcF9rZXJuZWwgKik7Ci12YWRkcl90CQkJdXZt
X2ttX2FsbG9jX3Bvb2xwYWdlKHN0cnVjdCB2bV9tYXAgKiwgYm9vbGVhbl90KTsKLXZvaWQJCQl1
dm1fa21fZnJlZV9wb29scGFnZShzdHJ1Y3Qgdm1fbWFwICosIHZhZGRyX3QpOwotdmFkZHJfdAkJ
CXV2bV9rbV9hbGxvY19wb29scGFnZV9jYWNoZShzdHJ1Y3Qgdm1fbWFwICosIGJvb2xlYW5fdCk7
Ci12b2lkCQkJdXZtX2ttX2ZyZWVfcG9vbHBhZ2VfY2FjaGUoc3RydWN0IHZtX21hcCAqLCB2YWRk
cl90KTsKK3ZhZGRyX3QJCQl1dm1fa21fYWxsb2NfcG9vbHBhZ2Uoc3RydWN0IHZtX21hcCAqLCBi
b29sZWFuX3QsCisJCQkgICAgYm9vbGVhbl90KTsKK3ZvaWQJCQl1dm1fa21fZnJlZV9wb29scGFn
ZShzdHJ1Y3Qgdm1fbWFwICosIHZhZGRyX3QsCisJCQkgICAgYm9vbGVhbl90KTsKK3ZhZGRyX3QJ
CQl1dm1fa21fYWxsb2NfcG9vbHBhZ2VfY2FjaGUoc3RydWN0IHZtX21hcCAqLCBib29sZWFuX3Qs
CisJCQkgICAgYm9vbGVhbl90KTsKK3ZvaWQJCQl1dm1fa21fZnJlZV9wb29scGFnZV9jYWNoZShz
dHJ1Y3Qgdm1fbWFwICosIHZhZGRyX3QsCisJCQkgICAgYm9vbGVhbl90KTsKIHZvaWQJCQl1dm1f
a21fdmFjYWNoZV9pbml0KHN0cnVjdCB2bV9tYXAgKiwKIAkJCSAgICBjb25zdCBjaGFyICosIHNp
emVfdCk7CiAKSW5kZXg6IHV2bS91dm1fa20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL3V2bS91dm1fa20uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45MgpkaWZmIC11
IC1wIC1yMS45MiB1dm1fa20uYwotLS0gdXZtL3V2bV9rbS5jCTEgTm92IDIwMDYgMTA6MTg6Mjcg
LTAwMDAJMS45MgorKysgdXZtL3V2bV9rbS5jCTEzIE5vdiAyMDA2IDIwOjA2OjA5IC0wMDAwCkBA
IC02NzcsMTAgKzY3NywxMSBAQCB1dm1fa21fZnJlZShzdHJ1Y3Qgdm1fbWFwICptYXAsIHZhZGRy
X3QgCiAKIC8qIEFSR1NVU0VEICovCiB2YWRkcl90Ci11dm1fa21fYWxsb2NfcG9vbHBhZ2VfY2Fj
aGUoc3RydWN0IHZtX21hcCAqbWFwLCBib29sZWFuX3Qgd2FpdG9rKQordXZtX2ttX2FsbG9jX3Bv
b2xwYWdlX2NhY2hlKHN0cnVjdCB2bV9tYXAgKm1hcCwgYm9vbGVhbl90IHdhaXRvaywKKyAgICBi
b29sZWFuX3QgcGFnZWFibGUpCiB7CiAjaWYgZGVmaW5lZChQTUFQX01BUF9QT09MUEFHRSkKLQly
ZXR1cm4gdXZtX2ttX2FsbG9jX3Bvb2xwYWdlKG1hcCwgd2FpdG9rKTsKKwlyZXR1cm4gdXZtX2tt
X2FsbG9jX3Bvb2xwYWdlKG1hcCwgd2FpdG9rLCBwYWdlYWJsZSk7CiAjZWxzZQogCXN0cnVjdCB2
bV9wYWdlICpwZzsKIAlzdHJ1Y3QgcG9vbCAqcHAgPSAmdm1fbWFwX3RvX2tlcm5lbChtYXApLT52
bWtfdmFjYWNoZTsKQEAgLTY4OSw3ICs2OTAsNyBAQCB1dm1fa21fYWxsb2NfcG9vbHBhZ2VfY2Fj
aGUoc3RydWN0IHZtX21hCiAJY29uc3QgYm9vbGVhbl90IGludHJzYWZlID0gKG1hcC0+ZmxhZ3Mg
JiBWTV9NQVBfSU5UUlNBRkUpICE9IDA7CiAKIAlpZiAoKG1hcC0+ZmxhZ3MgJiBWTV9NQVBfVkFD
QUNIRSkgPT0gMCkKLQkJcmV0dXJuIHV2bV9rbV9hbGxvY19wb29scGFnZShtYXAsIHdhaXRvayk7
CisJCXJldHVybiB1dm1fa21fYWxsb2NfcG9vbHBhZ2UobWFwLCB3YWl0b2ssIHBhZ2VhYmxlKTsK
IAogCWlmIChpbnRyc2FmZSkKIAkJcyA9IHNwbHZtKCk7CkBAIC03MDAsNyArNzAxLDcgQEAgdXZt
X2ttX2FsbG9jX3Bvb2xwYWdlX2NhY2hlKHN0cnVjdCB2bV9tYQogCQlyZXR1cm4gMDsKIAlLQVNT
RVJUKCFwbWFwX2V4dHJhY3QocG1hcF9rZXJuZWwoKSwgdmEsIE5VTEwpKTsKIGFnYWluOgotCXBn
ID0gdXZtX3BhZ2VhbGxvYyhOVUxMLCAwLCBOVUxMLCBVVk1fUEdBX1VTRVJFU0VSVkUpOworCXBn
ID0gdXZtX3BhZ2VhbGxvYyhOVUxMLCAwLCBOVUxMLCBwYWdlYWJsZSA/IDAgOiBVVk1fUEdBX1VT
RVJFU0VSVkUpOwogCWlmIChfX3ByZWRpY3RfZmFsc2UocGcgPT0gTlVMTCkpIHsKIAkJaWYgKHdh
aXRvaykgewogCQkJdXZtX3dhaXQoInBscGciKTsKQEAgLTcxNCw3ICs3MTUsMTIgQEAgYWdhaW46
CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlwbWFwX2tlbnRlcl9wYSh2YSwgVk1fUEFHRV9UT19Q
SFlTKHBnKSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUpOworCWlmIChwYWdlYWJsZSkKKwkJ
cG1hcF9lbnRlcihwbWFwX2tlcm5lbCgpLCB2YSwgVk1fUEFHRV9UT19QSFlTKHBnKSwKKwkJICAg
IFZNX1BST1RfUkVBRCB8IFZNX1BST1RfV1JJVEUsIDApOworCWVsc2UKKwkJcG1hcF9rZW50ZXJf
cGEodmEsIFZNX1BBR0VfVE9fUEhZUyhwZyksCisJCSAgICBWTV9QUk9UX1JFQUQgfCBWTV9QUk9U
X1dSSVRFKTsKIAlwbWFwX3VwZGF0ZShwbWFwX2tlcm5lbCgpKTsKIAogCXJldHVybiB2YTsKQEAg
LTcyMiwxNCArNzI4LDE0IEBAIGFnYWluOgogfQogCiB2YWRkcl90Ci11dm1fa21fYWxsb2NfcG9v
bHBhZ2Uoc3RydWN0IHZtX21hcCAqbWFwLCBib29sZWFuX3Qgd2FpdG9rKQordXZtX2ttX2FsbG9j
X3Bvb2xwYWdlKHN0cnVjdCB2bV9tYXAgKm1hcCwgYm9vbGVhbl90IHdhaXRvaywgYm9vbGVhbl90
IHBhZ2VhYmxlKQogewogI2lmIGRlZmluZWQoUE1BUF9NQVBfUE9PTFBBR0UpCiAJc3RydWN0IHZt
X3BhZ2UgKnBnOwogCXZhZGRyX3QgdmE7CiAKICBhZ2FpbjoKLQlwZyA9IHV2bV9wYWdlYWxsb2Mo
TlVMTCwgMCwgTlVMTCwgVVZNX1BHQV9VU0VSRVNFUlZFKTsKKwlwZyA9IHV2bV9wYWdlYWxsb2Mo
TlVMTCwgMCwgTlVMTCwgcGFnZWFibGUgPyAwIDogVVZNX1BHQV9VU0VSRVNFUlZFKTsKIAlpZiAo
X19wcmVkaWN0X2ZhbHNlKHBnID09IE5VTEwpKSB7CiAJCWlmICh3YWl0b2spIHsKIAkJCXV2bV93
YWl0KCJwbHBnIik7CkBAIC03NDksNyArNzU1LDggQEAgdXZtX2ttX2FsbG9jX3Bvb2xwYWdlKHN0
cnVjdCB2bV9tYXAgKm1hcAogCWlmIChpbnRyc2FmZSkKIAkJcyA9IHNwbHZtKCk7CiAJdmEgPSB1
dm1fa21fYWxsb2MobWFwLCBQQUdFX1NJWkUsIDAsCi0JICAgICh3YWl0b2sgPyAwIDogVVZNX0tN
Rl9OT1dBSVQgfCBVVk1fS01GX1RSWUxPQ0spIHwgVVZNX0tNRl9XSVJFRCk7CisJICAgICh3YWl0
b2sgPyAwIDogVVZNX0tNRl9OT1dBSVQgfCBVVk1fS01GX1RSWUxPQ0spIHwKKwkgICAgKHBhZ2Vh
YmxlID8gVVZNX0tNRl9QQUdFQUJMRSA6IFVWTV9LTUZfV0lSRUQpKTsKIAlpZiAoaW50cnNhZmUp
CiAJCXNwbHgocyk7CiAJcmV0dXJuICh2YSk7CkBAIC03NjQsNyArNzcxLDggQEAgdXZtX2ttX2Fs
bG9jX3Bvb2xwYWdlKHN0cnVjdCB2bV9tYXAgKm1hcAogCiAvKiBBUkdTVVNFRCAqLwogdm9pZAot
dXZtX2ttX2ZyZWVfcG9vbHBhZ2VfY2FjaGUoc3RydWN0IHZtX21hcCAqbWFwLCB2YWRkcl90IGFk
ZHIpCit1dm1fa21fZnJlZV9wb29scGFnZV9jYWNoZShzdHJ1Y3Qgdm1fbWFwICptYXAsIHZhZGRy
X3QgYWRkciwKKyAgICBib29sZWFuX3QgcGFnZWFibGUpCiB7CiAjaWYgZGVmaW5lZChQTUFQX1VO
TUFQX1BPT0xQQUdFKQogCXV2bV9rbV9mcmVlX3Bvb2xwYWdlKG1hcCwgYWRkcik7CkBAIC03NzQs
MTMgKzc4MiwxNiBAQCB1dm1fa21fZnJlZV9wb29scGFnZV9jYWNoZShzdHJ1Y3Qgdm1fbWFwCiAJ
Y29uc3QgYm9vbGVhbl90IGludHJzYWZlID0gKG1hcC0+ZmxhZ3MgJiBWTV9NQVBfSU5UUlNBRkUp
ICE9IDA7CiAKIAlpZiAoKG1hcC0+ZmxhZ3MgJiBWTV9NQVBfVkFDQUNIRSkgPT0gMCkgewotCQl1
dm1fa21fZnJlZV9wb29scGFnZShtYXAsIGFkZHIpOworCQl1dm1fa21fZnJlZV9wb29scGFnZSht
YXAsIGFkZHIsIHBhZ2VhYmxlKTsKIAkJcmV0dXJuOwogCX0KIAogCUtBU1NFUlQocG1hcF9leHRy
YWN0KHBtYXBfa2VybmVsKCksIGFkZHIsIE5VTEwpKTsKIAl1dm1fa21fcGdyZW1vdmVfaW50cnNh
ZmUoYWRkciwgYWRkciArIFBBR0VfU0laRSk7Ci0JcG1hcF9rcmVtb3ZlKGFkZHIsIFBBR0VfU0la
RSk7CisJaWYgKHBhZ2VhYmxlKQorCQlwbWFwX3JlbW92ZShwbWFwX2tlcm5lbCgpLCBhZGRyLCBh
ZGRyICsgUEFHRV9TSVpFKTsKKwllbHNlCisJCXBtYXBfa3JlbW92ZShhZGRyLCBQQUdFX1NJWkUp
OwogI2lmIGRlZmluZWQoREVCVUcpCiAJcG1hcF91cGRhdGUocG1hcF9rZXJuZWwoKSk7CiAjZW5k
aWYKQEAgLTc5Niw3ICs4MDcsNyBAQCB1dm1fa21fZnJlZV9wb29scGFnZV9jYWNoZShzdHJ1Y3Qg
dm1fbWFwCiAKIC8qIEFSR1NVU0VEICovCiB2b2lkCi11dm1fa21fZnJlZV9wb29scGFnZShzdHJ1
Y3Qgdm1fbWFwICptYXAsIHZhZGRyX3QgYWRkcikKK3V2bV9rbV9mcmVlX3Bvb2xwYWdlKHN0cnVj
dCB2bV9tYXAgKm1hcCwgdmFkZHJfdCBhZGRyLCBib29sZWFuX3QgcGFnZWFibGUpCiB7CiAjaWYg
ZGVmaW5lZChQTUFQX1VOTUFQX1BPT0xQQUdFKQogCXBhZGRyX3QgcGE7CkBAIC04MDksNyArODIw
LDggQEAgdXZtX2ttX2ZyZWVfcG9vbHBhZ2Uoc3RydWN0IHZtX21hcCAqbWFwLAogCiAJaWYgKGlu
dHJzYWZlKQogCQlzID0gc3Bsdm0oKTsKLQl1dm1fa21fZnJlZShtYXAsIGFkZHIsIFBBR0VfU0la
RSwgVVZNX0tNRl9XSVJFRCk7CisJdXZtX2ttX2ZyZWUobWFwLCBhZGRyLCBQQUdFX1NJWkUsCisJ
ICAgIHBhZ2VhYmxlID8gVVZNX0tNRl9QQUdFQUJMRSA6IFVWTV9LTUZfV0lSRUQpOwogCWlmIChp
bnRyc2FmZSkKIAkJc3BseChzKTsKICNlbmRpZiAvKiBQTUFQX1VOTUFQX1BPT0xQQUdFICovCklu
ZGV4OiBrZXJuL3N1YnJfcG9vbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9z
eXMva2Vybi9zdWJyX3Bvb2wuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjQKZGlmZiAtdSAt
cCAtcjEuMTI0IHN1YnJfcG9vbC5jCi0tLSBrZXJuL3N1YnJfcG9vbC5jCTEgTm92IDIwMDYgMTA6
MTc6NTggLTAwMDAJMS4xMjQKKysrIGtlcm4vc3Vicl9wb29sLmMJMTIgTm92IDIwMDYgMjI6MDU6
NTggLTAwMDAKQEAgLTIzNTYsMzAgKzIzNTYsMzYgQEAgdm9pZCAqCiBwb29sX3BhZ2VfYWxsb2Mo
c3RydWN0IHBvb2wgKnBwLCBpbnQgZmxhZ3MpCiB7CiAJYm9vbGVhbl90IHdhaXRvayA9IChmbGFn
cyAmIFBSX1dBSVRPSykgPyBUUlVFIDogRkFMU0U7CisJYm9vbGVhbl90IHBhZ2VhYmxlID0gcHAt
PnByX3JvZmxhZ3MgJiBQUl9QQUdFQUJMRTsKIAotCXJldHVybiAoKHZvaWQgKikgdXZtX2ttX2Fs
bG9jX3Bvb2xwYWdlX2NhY2hlKGttZW1fbWFwLCB3YWl0b2spKTsKKwlyZXR1cm4gKCh2b2lkICop
IHV2bV9rbV9hbGxvY19wb29scGFnZV9jYWNoZShrbWVtX21hcCwgd2FpdG9rLAorCSAgICBwYWdl
YWJsZSkpOwogfQogCiB2b2lkCiBwb29sX3BhZ2VfZnJlZShzdHJ1Y3QgcG9vbCAqcHAsIHZvaWQg
KnYpCiB7CisJYm9vbGVhbl90IHBhZ2VhYmxlID0gcHAtPnByX3JvZmxhZ3MgJiBQUl9QQUdFQUJM
RTsKIAotCXV2bV9rbV9mcmVlX3Bvb2xwYWdlX2NhY2hlKGttZW1fbWFwLCAodmFkZHJfdCkgdik7
CisJdXZtX2ttX2ZyZWVfcG9vbHBhZ2VfY2FjaGUoa21lbV9tYXAsICh2YWRkcl90KSB2LCBwYWdl
YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkICoKIHBvb2xfcGFnZV9hbGxvY19tZXRhKHN0cnVjdCBw
b29sICpwcCwgaW50IGZsYWdzKQogewogCWJvb2xlYW5fdCB3YWl0b2sgPSAoZmxhZ3MgJiBQUl9X
QUlUT0spID8gVFJVRSA6IEZBTFNFOworCWJvb2xlYW5fdCBwYWdlYWJsZSA9IHBwLT5wcl9yb2Zs
YWdzICYgUFJfUEFHRUFCTEU7CiAKLQlyZXR1cm4gKCh2b2lkICopIHV2bV9rbV9hbGxvY19wb29s
cGFnZShrbWVtX21hcCwgd2FpdG9rKSk7CisJcmV0dXJuICgodm9pZCAqKSB1dm1fa21fYWxsb2Nf
cG9vbHBhZ2Uoa21lbV9tYXAsIHdhaXRvaywKKwkgICAgcGFnZWFibGUpKTsKIH0KIAogc3RhdGlj
IHZvaWQKIHBvb2xfcGFnZV9mcmVlX21ldGEoc3RydWN0IHBvb2wgKnBwLCB2b2lkICp2KQogewor
CWJvb2xlYW5fdCBwYWdlYWJsZSA9IHBwLT5wcl9yb2ZsYWdzICYgUFJfUEFHRUFCTEU7CiAKLQl1
dm1fa21fZnJlZV9wb29scGFnZShrbWVtX21hcCwgKHZhZGRyX3QpIHYpOworCXV2bV9rbV9mcmVl
X3Bvb2xwYWdlKGttZW1fbWFwLCAodmFkZHJfdCkgdiwgcGFnZWFibGUpOwogfQogCiAjaWZkZWYg
UE9PTF9TVUJQQUdFCkBAIC0yNDIzLDEzICsyNDI5LDE2IEBAIHZvaWQgKgogcG9vbF9wYWdlX2Fs
bG9jX25vaW50cihzdHJ1Y3QgcG9vbCAqcHAsIGludCBmbGFncykKIHsKIAlib29sZWFuX3Qgd2Fp
dG9rID0gKGZsYWdzICYgUFJfV0FJVE9LKSA/IFRSVUUgOiBGQUxTRTsKKwlib29sZWFuX3QgcGFn
ZWFibGUgPSBwcC0+cHJfcm9mbGFncyAmIFBSX1BBR0VBQkxFOwogCi0JcmV0dXJuICgodm9pZCAq
KSB1dm1fa21fYWxsb2NfcG9vbHBhZ2VfY2FjaGUoa2VybmVsX21hcCwgd2FpdG9rKSk7CisJcmV0
dXJuICgodm9pZCAqKSB1dm1fa21fYWxsb2NfcG9vbHBhZ2VfY2FjaGUoa2VybmVsX21hcCwgd2Fp
dG9rLAorCSAgICBwYWdlYWJsZSkpOwogfQogCiB2b2lkCiBwb29sX3BhZ2VfZnJlZV9ub2ludHIo
c3RydWN0IHBvb2wgKnBwLCB2b2lkICp2KQogeworCWJvb2xlYW5fdCBwYWdlYWJsZSA9IHBwLT5w
cl9yb2ZsYWdzICYgUFJfUEFHRUFCTEU7CiAKLQl1dm1fa21fZnJlZV9wb29scGFnZV9jYWNoZShr
ZXJuZWxfbWFwLCAodmFkZHJfdCkgdik7CisJdXZtX2ttX2ZyZWVfcG9vbHBhZ2VfY2FjaGUoa2Vy
bmVsX21hcCwgKHZhZGRyX3QpIHYsIHBhZ2VhYmxlKTsKIH0KSW5kZXg6IGtlcm4vdWlwY19tYnVm
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9rZXJuL3VpcGNfbWJ1Zi5j
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExNgpkaWZmIC11IC1wIC1yMS4xMTYgdWlwY19tYnVm
LmMKLS0tIGtlcm4vdWlwY19tYnVmLmMJMSBOb3YgMjAwNiAxMDoxNzo1OSAtMDAwMAkxLjExNgor
Kysga2Vybi91aXBjX21idWYuYwkxMiBOb3YgMjAwNiAyMjowNTo1OCAtMDAwMApAQCAtMzQ4LDE1
ICszNDgsMTcgQEAgc3RhdGljIHZvaWQgKgogbWNscG9vbF9hbGxvYyhzdHJ1Y3QgcG9vbCAqcHAs
IGludCBmbGFncykKIHsKIAlib29sZWFuX3Qgd2FpdG9rID0gKGZsYWdzICYgUFJfV0FJVE9LKSA/
IFRSVUUgOiBGQUxTRTsKKwlib29sZWFuX3QgcGFnZWFibGUgPSBwcC0+cHJfcm9mbGFncyAmIFBS
X1BBR0VBQkxFOwogCi0JcmV0dXJuICgodm9pZCAqKXV2bV9rbV9hbGxvY19wb29scGFnZShtYl9t
YXAsIHdhaXRvaykpOworCXJldHVybiAoKHZvaWQgKil1dm1fa21fYWxsb2NfcG9vbHBhZ2UobWJf
bWFwLCB3YWl0b2ssIHBhZ2VhYmxlKSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBtY2xwb29sX3JlbGVh
c2Uoc3RydWN0IHBvb2wgKnBwLCB2b2lkICp2KQogeworCWJvb2xlYW5fdCBwYWdlYWJsZSA9IHBw
LT5wcl9yb2ZsYWdzICYgUFJfUEFHRUFCTEU7CiAKLQl1dm1fa21fZnJlZV9wb29scGFnZShtYl9t
YXAsICh2YWRkcl90KXYpOworCXV2bV9rbV9mcmVlX3Bvb2xwYWdlKG1iX21hcCwgKHZhZGRyX3Qp
diwgcGFnZWFibGUpOwogfQogCiAvKkFSR1NVU0VEKi8KSW5kZXg6IHN5cy9wb29sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9zeXMvcG9vbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjU0CmRpZmYgLXUgLXAgLXIxLjU0IHBvb2wuaAotLS0gc3lzL3Bvb2wuaAkyMCBB
dWcgMjAwNiAwOTozNToyNSAtMDAwMAkxLjU0CisrKyBzeXMvcG9vbC5oCTEyIE5vdiAyMDA2IDIy
OjA1OjU5IC0wMDAwCkBAIC0xNjcsNiArMTY3LDcgQEAgc3RydWN0IHBvb2wgewogI2RlZmluZSBQ
Ul9SRUNVUlNJVkUJMHgyMDAJLyogcG9vbCBjb250YWlucyBwb29scywgZm9yIHZtc3RhdCg4KSAq
LwogI2RlZmluZSBQUl9OT1RPVUNICTB4NDAwCS8qIGRvbid0IHVzZSBmcmVlIGl0ZW1zIHRvIGtl
ZXAgaW50ZXJuYWwgc3RhdGUqLwogI2RlZmluZSBQUl9OT0FMSUdOCTB4ODAwCS8qIGRvbid0IGFz
c3VtZSBiYWNrZW5kIGFsaWdubWVudCAqLworI2RlZmluZSBQUl9QQUdFQUJMRQkweDEwMDAJLyog
cG9vbCBwYWdlcyBhcmUgcGFnZWFibGUgKi8KIAogCS8qCiAJICogYHByX3Nsb2NrJyBwcm90ZWN0
cyB0aGUgcG9vbCdzIGRhdGEgc3RydWN0dXJlcyB3aGVuIHJlbW92aW5nCkluZGV4OiBmcy90bXBm
cy90bXBmc19wb29sLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9mcy90
bXBmcy90bXBmc19wb29sLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1y
MS42IHRtcGZzX3Bvb2wuYwotLS0gZnMvdG1wZnMvdG1wZnNfcG9vbC5jCTkgTm92IDIwMDYgMTY6
MjA6NTYgLTAwMDAJMS42CisrKyBmcy90bXBmcy90bXBmc19wb29sLmMJMTIgTm92IDIwMDYgMjI6
MDU6NTkgLTAwMDAKQEAgLTEzMSw3ICsxMzEsNyBAQCB0bXBmc19wb29sX2luaXQoc3RydWN0IHRt
cGZzX3Bvb2wgKnRwcCwgCiAJICAgICIlc19wb29sXyVwIiwgd2hhdCwgdG1wKTsKIAlLQVNTRVJU
KGNudCA8IHNpemVvZih0cHAtPnRwX25hbWUpKTsKIAotCXBvb2xfaW5pdCgmdHBwLT50cF9wb29s
LCBzaXplLCAwLCAwLCAwLCB0cHAtPnRwX25hbWUsCisJcG9vbF9pbml0KCZ0cHAtPnRwX3Bvb2ws
IHNpemUsIDAsIDAsIFBSX1BBR0VBQkxFLCB0cHAtPnRwX25hbWUsCiAJICAgICZ0bXBmc19wb29s
X2FsbG9jYXRvcik7CiAJdHBwLT50cF9tb3VudCA9IHRtcDsKIH0K
------=_Part_100446_18711275.1163449330612--