[PATCH] to support hookable flush_tlb* functions

Thomas Schlichter (schlicht@rumms.uni-mannheim.de)
Fri, 24 Jan 2003 15:24:13 +0100


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-25122-1043420275-0001-2
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
X-Mime-Autoconverted: from 8bit to 7bit by courier 0.39

Hello,

with this mail I send a patch that allows kernel modules to hook into the
different flush_tlb* functions defined in <asm/tlbflush.h> or <asm/pgtable.h> in
order to synchronize devices TLBs.

This is necessary for devices that provide their own TLB and cannot participate
on the CPU busses shootdown protocol. With this patch it is possible to assure
TLB consistency.

Currently this extension could possibly be used by high performance
interconnects like QsNet from Quadrics (www.quadrics.com), and in the near
future by even more high performance, low latency NICs that will implement
direct user space DMA transfers to not pinned user pages. TLBs are there a
mandatory requirement.

Currently I am writing my diploma thesis about the development of such a device
where I need this patch, and as it looks good to me I want to provide it to the
public community so it can be reviewed and even more tested. (the i386 parts are
tested work fine for me)

The patch consists of two parts, one generic part and for each supported
architecture an other part that depends on the generic one.

Attached to this mail is only the generic part and the architecture dependend
part for i386 compatible machines just not to waste everyones bandwidth... But
if requested I can send you patches for the other architectures, too.

The i386 patch also includes some cleanups by renaming __flush_tlb_* to
local_flush_tlb_*.

I hope some time this patches will make it into the kernel sources. (perhaps
even into 2.6.x ?)

Sincerely yours

Thomas Schlichter

P.S.: To test this patch I've also written a module that counts the different
flush_tlb* calls and shows them in /proc/tlbstat. If requested I could send you
this, too.
--=_courier-25122-1043420275-0001-2
Content-Type: application/octet-stream; name="tlbhook_generic.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tlbhook_generic.patch"

ZGlmZiAtdXJQIGxpbnV4LTIuNS41OS9pbmNsdWRlL2xpbnV4L3RsYmhvb2suaCBsaW51eC0yLjUu
NTlfcGF0Y2hlZC9pbmNsdWRlL2xpbnV4L3RsYmhvb2suaAotLS0gbGludXgtMi41LjU5L2luY2x1
ZGUvbGludXgvdGxiaG9vay5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgbGludXgtMi41
LjU5X3BhdGNoZWQvaW5jbHVkZS9saW51eC90bGJob29rLmgJV2VkIEphbiAyMiAyMjoyOTozMCAy
MDAzCkBAIC0wLDAgKzEsMTIyIEBACisjaWZuZGVmIF9MSU5VWF9UTEJIT09LX0gKKyNkZWZpbmUg
X0xJTlVYX1RMQkhPT0tfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKwordHlwZWRlZiBzdHJ1
Y3QgdGxiX2hvb2tfc3RydWN0IHsKKwl2b2lkICgqZmx1c2hfdGxiKSggdm9pZCApOworCXZvaWQg
KCpmbHVzaF90bGJfYWxsKSggdm9pZCApOworCXZvaWQgKCpmbHVzaF90bGJfbW0pKCBzdHJ1Y3Qg
bW1fc3RydWN0ICptbSApOworCXZvaWQgKCpmbHVzaF90bGJfcGFnZSkoIHN0cnVjdCB2bV9hcmVh
X3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciApOworCXZvaWQgKCpmbHVzaF90
bGJfcmFuZ2UpKCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQl1bnNpZ25lZCBsb25n
IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCApOworCXZvaWQgKCpmbHVzaF90bGJfa2VybmVsX3Jh
bmdlKSggdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQl1bnNpZ25lZCBsb25nIGVuZCApOworCXZv
aWQgKCpmbHVzaF90bGJfcGd0YWJsZXMpKCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQl1bnNp
Z25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCApOworCisJc3RydWN0IHRsYl9ob29r
X3N0cnVjdCAqbmV4dDsKKwlzdHJ1Y3QgdGxiX2hvb2tfc3RydWN0ICpsYXN0OworfSB0bGJfaG9v
a190OworCitleHRlcm4gdGxiX2hvb2tfdCAqdGxiX2hvb2tfcm9vdDsKKworZXh0ZXJuIGludCBy
ZWdpc3Rlcl90bGJfaG9vayggdGxiX2hvb2tfdCAqaG9vayApOworZXh0ZXJuIGludCB1bnJlZ2lz
dGVyX3RsYl9ob29rKCB0bGJfaG9va190ICpob29rICk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBm
bHVzaF90bGJfaG9vayggdm9pZCApCit7CisJdGxiX2hvb2tfdCAqaG9vayA9IHRsYl9ob29rX3Jv
b3Q7CisKKwl3aGlsZSggaG9vayApCisJeworCQlpZiggaG9vay0+Zmx1c2hfdGxiICkKKwkJCWhv
b2stPmZsdXNoX3RsYiggKTsKKwkJaG9vayA9IGhvb2stPm5leHQ7CisJfQorfQorCisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsX2hvb2soIHZvaWQgKQoreworCXRsYl9ob29rX3Qg
Kmhvb2sgPSB0bGJfaG9va19yb290OworCisJd2hpbGUoIGhvb2sgKQorCXsKKwkJaWYoIGhvb2st
PmZsdXNoX3RsYl9hbGwgKQorCQkJaG9vay0+Zmx1c2hfdGxiX2FsbCggKTsKKwkJaG9vayA9IGhv
b2stPm5leHQ7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW1faG9v
ayggc3RydWN0IG1tX3N0cnVjdCAqbW0gKQoreworCXRsYl9ob29rX3QgKmhvb2sgPSB0bGJfaG9v
a19yb290OworCisJd2hpbGUoIGhvb2sgKQorCXsKKwkJaWYoIGhvb2stPmZsdXNoX3RsYl9tbSAp
CisJCQlob29rLT5mbHVzaF90bGJfbW0oIG1tICk7CisJCWhvb2sgPSBob29rLT5uZXh0OworCX0K
K30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2VfaG9vayggc3RydWN0IHZt
X2FyZWFfc3RydWN0ICp2bWEsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyICkKK3sKKwl0bGJfaG9v
a190ICpob29rID0gdGxiX2hvb2tfcm9vdDsKKworCXdoaWxlKCBob29rICkKKwl7CisJCWlmKCBo
b29rLT5mbHVzaF90bGJfcGFnZSApCisJCQlob29rLT5mbHVzaF90bGJfcGFnZSggdm1hLCBhZGRy
ICk7CisJCWhvb2sgPSBob29rLT5uZXh0OworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQg
Zmx1c2hfdGxiX3JhbmdlX2hvb2soIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVu
c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kICkKK3sKKwl0bGJfaG9va190ICpo
b29rID0gdGxiX2hvb2tfcm9vdDsKKworCXdoaWxlKCBob29rICkKKwl7CisJCWlmKCBob29rLT5m
bHVzaF90bGJfcmFuZ2UgKQorCQkJaG9vay0+Zmx1c2hfdGxiX3JhbmdlKCB2bWEsIHN0YXJ0LCBl
bmQgKTsKKwkJaG9vayA9IGhvb2stPm5leHQ7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlX2hvb2soIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJ
dW5zaWduZWQgbG9uZyBlbmQgKQoreworCXRsYl9ob29rX3QgKmhvb2sgPSB0bGJfaG9va19yb290
OworCisJd2hpbGUoIGhvb2spCisJeworCQlpZiggaG9vay0+Zmx1c2hfdGxiX2tlcm5lbF9yYW5n
ZSApCisJCQlob29rLT5mbHVzaF90bGJfa2VybmVsX3JhbmdlKCBzdGFydCwgZW5kICk7CisJCWhv
b2sgPSBob29rLT5uZXh0OworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxi
X3BndGFibGVzX2hvb2soIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcg
c3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kICkKK3sKKwl0bGJfaG9va190ICpob29rID0gdGxiX2hv
b2tfcm9vdDsKKworCXdoaWxlKCBob29rICkKKwl7CisJCWlmKCBob29rLT5mbHVzaF90bGJfcGd0
YWJsZXMgKQorCQkJaG9vay0+Zmx1c2hfdGxiX3BndGFibGVzKCBtbSwgc3RhcnQsIGVuZCApOwor
CQlob29rID0gaG9vay0+bmV4dDsKKwl9Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfVExCSE9PS19I
ICovCmRpZmYgLXVyUCBsaW51eC0yLjUuNTkvbW0vTWFrZWZpbGUgbGludXgtMi41LjU5X3BhdGNo
ZWQvbW0vTWFrZWZpbGUKLS0tIGxpbnV4LTIuNS41OS9tbS9NYWtlZmlsZQlGcmkgSmFuIDE3IDAz
OjIyOjIwIDIwMDMKKysrIGxpbnV4LTIuNS41OV9wYXRjaGVkL21tL01ha2VmaWxlCVdlZCBKYW4g
MjIgMjI6MzQ6MDYgMjAwMwpAQCAtMiw3ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51
eCBtZW1vcnkgbWFuYWdlci4KICMKIAotZXhwb3J0LW9ianMgOj0gc2htZW0ubyBmaWxlbWFwLm8g
bWVtcG9vbC5vIHBhZ2VfYWxsb2MubyBwYWdlLXdyaXRlYmFjay5vCitleHBvcnQtb2JqcyAJCTo9
IHNobWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2su
byBcCisJCQkgICB0bGJob29rLm8KIAogbW11LXkJCQk6PSBub21tdS5vCiBtbXUtJChDT05GSUdf
TU1VKQk6PSBmcmVtYXAubyBoaWdobWVtLm8gbWFkdmlzZS5vIG1lbW9yeS5vIG1pbmNvcmUubyBc
CkBAIC0xMSw2ICsxMiw2IEBACiAKIG9iai15CQkJOj0gYm9vdG1lbS5vIGZpbGVtYXAubyBtZW1w
b29sLm8gb29tX2tpbGwubyBcCiAJCQkgICBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBw
ZGZsdXNoLm8gcmVhZGFoZWFkLm8gXAotCQkJICAgc2xhYi5vIHN3YXAubyB0cnVuY2F0ZS5vIHZj
YWNoZS5vIHZtc2Nhbi5vICQobW11LXkpCisJCQkgICBzbGFiLm8gc3dhcC5vIHRsYmhvb2subyB0
cnVuY2F0ZS5vIHZjYWNoZS5vIHZtc2Nhbi5vICQobW11LXkpCiAKIG9iai0kKENPTkZJR19TV0FQ
KQkrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm8KZGlmZiAtdXJQIGxpbnV4LTIu
NS41OS9tbS90bGJob29rLmMgbGludXgtMi41LjU5X3BhdGNoZWQvbW0vdGxiaG9vay5jCi0tLSBs
aW51eC0yLjUuNTkvbW0vdGxiaG9vay5jCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgbGlu
dXgtMi41LjU5X3BhdGNoZWQvbW0vdGxiaG9vay5jCVdlZCBKYW4gMjIgMjI6Mzg6NDIgMjAwMwpA
QCAtMCwwICsxLDcwIEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu
dXgvdGxiaG9vay5oPgorCitzdGF0aWMgc3BpbmxvY2tfdCB0bGJfaG9va19sb2NrID0gU1BJTl9M
T0NLX1VOTE9DS0VEOworCit0bGJfaG9va190ICp0bGJfaG9va19yb290ID0gTlVMTDsKKworCisv
KiByZWdpc3RlciBob29rcyBmb3IgdGhlIGZsdXNoX3RsYiogZnVuY3Rpb25zICovCitpbnQgcmVn
aXN0ZXJfdGxiX2hvb2soIHRsYl9ob29rX3QgKmhvb2sgKQoreworCXRsYl9ob29rX3QgKmxhc3Q7
CisKKwlpZiggIWhvb2sgKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhvb2stPm5leHQgPSBOVUxM
OworCisJLy8gbG9jayB0aGUgdGxiX2hvb2tfc3RydWN0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9u
cworCXNwaW5fbG9jayggJnRsYl9ob29rX2xvY2sgKTsKKworCWlmKCB0bGJfaG9va19yb290ICkK
Kwl7CisJCWxhc3QgPSB0bGJfaG9va19yb290LT5sYXN0OworCQl0bGJfaG9va19yb290LT5sYXN0
ID0gaG9vazsKKworCQlob29rLT5sYXN0ID0gbGFzdDsKKwkJbGFzdC0+bmV4dCA9IGhvb2s7CisJ
fSBlbHNlIHsKKwkJaG9vay0+bGFzdCA9IGhvb2s7CisJCXRsYl9ob29rX3Jvb3QgPSBob29rOwor
CX0KKworCXNwaW5fdW5sb2NrKCAmdGxiX2hvb2tfbG9jayApOworCisJcmV0dXJuIDA7Cit9CisK
KworLyogdW5yZWdpc3RlciBob29rcyBmb3IgdGhlIGZsdXNoX3RsYiogZnVuY3Rpb25zICovCitp
bnQgdW5yZWdpc3Rlcl90bGJfaG9vayggdGxiX2hvb2tfdCAqaG9vayApCit7CisJaWYoICFob29r
ICkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyBsb2NrIHRoZSB0bGJfaG9va19zdHJ1Y3QgdG8g
YXZvaWQgcmFjZSBjb25kaXRpb25zCisJc3Bpbl9sb2NrKCAmdGxiX2hvb2tfbG9jayApOworCisJ
aWYoIGhvb2sgPT0gdGxiX2hvb2tfcm9vdCApCisJeworCQl0bGJfaG9va19yb290ID0gaG9vay0+
bmV4dDsKKwl9IGVsc2UgeworCQlob29rLT5sYXN0LT5uZXh0ID0gaG9vay0+bmV4dDsKKwl9CisK
KwlpZiggaG9vay0+bmV4dCApCisJeworCQlob29rLT5uZXh0LT5sYXN0ID0gaG9vay0+bGFzdDsK
Kwl9IGVsc2UgaWYoIHRsYl9ob29rX3Jvb3QgKSB7CisJCXRsYl9ob29rX3Jvb3QtPmxhc3QgPSBo
b29rLT5sYXN0OworCX0KKworCXNwaW5fdW5sb2NrKCAmdGxiX2hvb2tfbG9jayApOworCisJcmV0
dXJuIDA7Cit9CisKKworRVhQT1JUX1NZTUJPTCggcmVnaXN0ZXJfdGxiX2hvb2sgKTsKK0VYUE9S
VF9TWU1CT0woIHVucmVnaXN0ZXJfdGxiX2hvb2sgKTsK

--=_courier-25122-1043420275-0001-2
Content-Type: application/octet-stream; name="tlbhook_i386.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tlbhook_i386.patch"

ZGlmZiAtdXJQIGxpbnV4LTIuNS41OS9hcmNoL2kzODYva2VybmVsL3NtcC5jIGxpbnV4LTIuNS41
OV9wYXRjaGVkL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKLS0tIGxpbnV4LTIuNS41OS9hcmNoL2kz
ODYva2VybmVsL3NtcC5jCUZyaSBKYW4gMTcgMDM6MjE6MzggMjAwMworKysgbGludXgtMi41LjU5
X3BhdGNoZWQvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwlXZWQgSmFuIDIyIDIzOjE5OjQ1IDIwMDMK
QEAgLTMyNyw3ICszMjcsNyBAQAogCQkJaWYgKGZsdXNoX3ZhID09IEZMVVNIX0FMTCkKIAkJCQls
b2NhbF9mbHVzaF90bGIoKTsKIAkJCWVsc2UKLQkJCQlfX2ZsdXNoX3RsYl9vbmUoZmx1c2hfdmEp
OworCQkJCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZmx1c2hfdmEpOwogCQl9IGVsc2UKIAkJCWxlYXZl
X21tKGNwdSk7CiAJfQpAQCAtMzgyLDcgKzM4Miw3IEBACiAJc3Bpbl91bmxvY2soJnRsYnN0YXRl
X2xvY2spOwogfQogCQotdm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCit2b2lkIHNt
cF9mbHVzaF90bGIodm9pZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1t
OwogCXVuc2lnbmVkIGxvbmcgY3B1X21hc2s7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAlwcmVlbXB0
X2VuYWJsZSgpOwogfQogCi12b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqIG1t
KQordm9pZCBzbXBfZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCiB7CiAJdW5z
aWduZWQgbG9uZyBjcHVfbWFzazsKIApAQCAtNDE1LDcgKzQxNSw3IEBACiAJcHJlZW1wdF9lbmFi
bGUoKTsKIH0KIAotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2
bWEsIHVuc2lnbmVkIGxvbmcgdmEpCit2b2lkIHNtcF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCiB7CiAJc3RydWN0IG1tX3N0cnVj
dCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgY3B1X21hc2s7CkBAIC00MjUsNyAr
NDI1LDcgQEAKIAogCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKIAkJaWYoY3VycmVu
dC0+bW0pCi0JCQlfX2ZsdXNoX3RsYl9vbmUodmEpOworCQkJbG9jYWxfZmx1c2hfdGxiX29uZSh2
YSk7CiAJCSBlbHNlCiAJCSAJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9CkBAIC00
NDAsNyArNDQwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQo
KTsKIAotCV9fZmx1c2hfdGxiX2FsbCgpOworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAlpZiAo
Y3B1X3RsYnN0YXRlW2NwdV0uc3RhdGUgPT0gVExCU1RBVEVfTEFaWSkKIAkJbGVhdmVfbW0oY3B1
KTsKIH0KQEAgLTQ1MCw3ICs0NTAsNyBAQAogCWRvX2ZsdXNoX3RsYl9hbGxfbG9jYWwoKTsKIH0K
IAotdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit2b2lkIHNtcF9mbHVzaF90bGJfYWxsKHZvaWQp
CiB7CiAJc21wX2NhbGxfZnVuY3Rpb24gKGZsdXNoX3RsYl9hbGxfaXBpLDAsMSwxKTsKIApkaWZm
IC11clAgbGludXgtMi41LjU5L2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYyBs
aW51eC0yLjUuNTlfcGF0Y2hlZC9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMK
LS0tIGxpbnV4LTIuNS41OS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMJRnJp
IEphbiAxNyAwMzoyMjowMiAyMDAzCisrKyBsaW51eC0yLjUuNTlfcGF0Y2hlZC9hcmNoL2kzODYv
bWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMJV2VkIEphbiAyMiAyMzoxODowMyAyMDAzCkBAIC04
OTIsNyArODkyLDcgQEAKIAkJCWlmIChmbHVzaF92YSA9PSBGTFVTSF9BTEwpCiAJCQkJbG9jYWxf
Zmx1c2hfdGxiKCk7CiAJCQllbHNlCi0JCQkJX19mbHVzaF90bGJfb25lKGZsdXNoX3ZhKTsKKwkJ
CQlsb2NhbF9mbHVzaF90bGJfb25lKGZsdXNoX3ZhKTsKIAkJfSBlbHNlCiAJCQlsZWF2ZV9tbShj
cHUpOwogCX0KQEAgLTk0OCw3ICs5NDgsNyBAQAogfQogCiB2b2lkCi1mbHVzaF90bGJfY3VycmVu
dF90YXNrKHZvaWQpCitzbXBfZmx1c2hfdGxiKHZvaWQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAq
bW0gPSBjdXJyZW50LT5tbTsKIAl1bnNpZ25lZCBsb25nIGNwdV9tYXNrOwpAQCAtOTY1LDcgKzk2
NSw3IEBACiAKIAogdm9pZAotZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCitz
bXBfZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCiB7CiAJdW5zaWduZWQgbG9u
ZyBjcHVfbWFzazsKIApAQCAtOTg1LDcgKzk4NSw3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0K
IAotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2ln
bmVkIGxvbmcgdmEpCit2b2lkIHNtcF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1
Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2
bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgY3B1X21hc2s7CkBAIC05OTUsNyArOTk1LDcgQEAK
IAljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzayAmIH4oMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCkp
OwogCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKIAkJaWYoY3VycmVudC0+bW0pCi0J
CQlfX2ZsdXNoX3RsYl9vbmUodmEpOworCQkJbG9jYWxfZmx1c2hfdGxiX29uZSh2YSk7CiAJCSBl
bHNlCiAJCSAJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9CkBAIC0xMjE3LDcgKzEy
MTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0J
X19mbHVzaF90bGJfYWxsKCk7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwogCWlmIChjcHVfdGxi
c3RhdGVbY3B1XS5zdGF0ZSA9PSBUTEJTVEFURV9MQVpZKQogCQlsZWF2ZV9tbShjcHUpOwogfQpA
QCAtMTIzMSw3ICsxMjMxLDcgQEAKIAogLyogZmx1c2ggdGhlIFRMQiBvZiBldmVyeSBhY3RpdmUg
Q1BVIGluIHRoZSBzeXN0ZW0gKi8KIHZvaWQKLWZsdXNoX3RsYl9hbGwodm9pZCkKK3NtcF9mbHVz
aF90bGJfYWxsKHZvaWQpCiB7CiAJc21wX2NhbGxfZnVuY3Rpb24gKGZsdXNoX3RsYl9hbGxfZnVu
Y3Rpb24sIDAsIDEsIDEpOwogCmRpZmYgLXVyUCBsaW51eC0yLjUuNTkvYXJjaC9pMzg2L21tL2hp
Z2htZW0uYyBsaW51eC0yLjUuNTlfcGF0Y2hlZC9hcmNoL2kzODYvbW0vaGlnaG1lbS5jCi0tLSBs
aW51eC0yLjUuNTkvYXJjaC9pMzg2L21tL2hpZ2htZW0uYwlGcmkgSmFuIDE3IDAzOjIyOjE0IDIw
MDMKKysrIGxpbnV4LTIuNS41OV9wYXRjaGVkL2FyY2gvaTM4Ni9tbS9oaWdobWVtLmMJV2VkIEph
biAyMiAyMzoxNDozMyAyMDAzCkBAIC00Miw3ICs0Miw3IEBACiAJCUJVRygpOwogI2VuZGlmCiAJ
c2V0X3B0ZShrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBrbWFwX3Byb3QpKTsKLQlfX2ZsdXNo
X3RsYl9vbmUodmFkZHIpOworCWxvY2FsX2ZsdXNoX3RsYl9vbmUodmFkZHIpOwogCiAJcmV0dXJu
ICh2b2lkKikgdmFkZHI7CiB9CkBAIC02Niw3ICs2Niw3IEBACiAJICogdGhpcyBwdGUgd2l0aG91
dCBmaXJzdCByZW1hcCBpdAogCSAqLwogCXB0ZV9jbGVhcihrbWFwX3B0ZS1pZHgpOwotCV9fZmx1
c2hfdGxiX29uZSh2YWRkcik7CisJbG9jYWxfZmx1c2hfdGxiX29uZSh2YWRkcik7CiAjZW5kaWYK
IAogCWRlY19wcmVlbXB0X2NvdW50KCk7CmRpZmYgLXVyUCBsaW51eC0yLjUuNTkvYXJjaC9pMzg2
L21tL2luaXQuYyBsaW51eC0yLjUuNTlfcGF0Y2hlZC9hcmNoL2kzODYvbW0vaW5pdC5jCi0tLSBs
aW51eC0yLjUuNTkvYXJjaC9pMzg2L21tL2luaXQuYwlGcmkgSmFuIDE3IDAzOjIyOjI3IDIwMDMK
KysrIGxpbnV4LTIuNS41OV9wYXRjaGVkL2FyY2gvaTM4Ni9tbS9pbml0LmMJV2VkIEphbiAyMiAy
MzoxNTowNSAyMDAzCkBAIC0zNjksNyArMzY5LDcgQEAKIAlpZiAoY3B1X2hhc19wYWUpCiAJCXNl
dF9pbl9jcjQoWDg2X0NSNF9QQUUpOwogI2VuZGlmCi0JX19mbHVzaF90bGJfYWxsKCk7CisJbG9j
YWxfZmx1c2hfdGxiX2FsbCgpOwogCiAJa21hcF9pbml0KCk7CiAJem9uZV9zaXplc19pbml0KCk7
CmRpZmYgLXVyUCBsaW51eC0yLjUuNTkvYXJjaC9pMzg2L21tL3BhZ2VhdHRyLmMgbGludXgtMi41
LjU5X3BhdGNoZWQvYXJjaC9pMzg2L21tL3BhZ2VhdHRyLmMKLS0tIGxpbnV4LTIuNS41OS9hcmNo
L2kzODYvbW0vcGFnZWF0dHIuYwlGcmkgSmFuIDE3IDAzOjIyOjA0IDIwMDMKKysrIGxpbnV4LTIu
NS41OV9wYXRjaGVkL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCVdlZCBKYW4gMjIgMjM6MTQ6MDEg
MjAwMwpAQCAtNTMsNyArNTMsNyBAQAogCS8qIEZsdXNoIGFsbCB0byB3b3JrIGFyb3VuZCBFcnJh
dGEgaW4gZWFybHkgYXRobG9ucyByZWdhcmRpbmcgCiAJICogbGFyZ2UgcGFnZSBmbHVzaGluZy4g
CiAJICovCi0JX19mbHVzaF90bGJfYWxsKCk7IAkKKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7IAkK
IH0KIAogc3RhdGljIHZvaWQgc2V0X3BtZF9wdGUocHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcg
YWRkcmVzcywgcHRlX3QgcHRlKSAKZGlmZiAtdXJQIGxpbnV4LTIuNS41OS9hcmNoL2kzODYvbW0v
cGd0YWJsZS5jIGxpbnV4LTIuNS41OV9wYXRjaGVkL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMKLS0t
IGxpbnV4LTIuNS41OS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jCUZyaSBKYW4gMTcgMDM6MjM6MDEg
MjAwMworKysgbGludXgtMi41LjU5X3BhdGNoZWQvYXJjaC9pMzg2L21tL3BndGFibGUuYwlXZWQg
SmFuIDIyIDIzOjE1OjMyIDIwMDMKQEAgLTgxLDcgKzgxLDcgQEAKIAkgKiBJdCdzIGVub3VnaCB0
byBmbHVzaCB0aGlzIG9uZSBtYXBwaW5nLgogCSAqIChQR0UgbWFwcGluZ3MgZ2V0IGZsdXNoZWQg
YXMgd2VsbCkKIAkgKi8KLQlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOworCWxvY2FsX2ZsdXNoX3Rs
Yl9vbmUodmFkZHIpOwogfQogCiAvKgpAQCAtMTE0LDcgKzExNCw3IEBACiAJICogSXQncyBlbm91
Z2ggdG8gZmx1c2ggdGhpcyBvbmUgbWFwcGluZy4KIAkgKiAoUEdFIG1hcHBpbmdzIGdldCBmbHVz
aGVkIGFzIHdlbGwpCiAJICovCi0JX19mbHVzaF90bGJfb25lKHZhZGRyKTsKKwlsb2NhbF9mbHVz
aF90bGJfb25lKHZhZGRyKTsKIH0KCiB2b2lkIF9fc2V0X2ZpeG1hcCAoZW51bSBmaXhlZF9hZGRy
ZXNzZXMgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKQpkaWZmIC11clAg
bGludXgtMi41LjU5L2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaCBsaW51eC0yLjUuNTlfcGF0
Y2hlZC9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKLS0tIGxpbnV4LTIuNS41OS9pbmNsdWRl
L2FzbS1pMzg2L3RsYmZsdXNoLmgJRnJpIEphbiAxNyAwMzoyMjo0OSAyMDAzCisrKyBsaW51eC0y
LjUuNTlfcGF0Y2hlZC9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgJV2VkIEphbiAyMiAyMzox
MjoxMCAyMDAzCkBAIC0yLDEwICsyLDEwIEBACiAjZGVmaW5lIF9JMzg2X1RMQkZMVVNIX0gKCiAj
aW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRl
IDxsaW51eC90bGJob29rLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgoKLSNkZWZpbmUg
X19mbHVzaF90bGIoKQkJCQkJCQlcCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpCQkJCQkJXAog
CWRvIHsJCQkJCQkJCVwKIAkJdW5zaWduZWQgaW50IHRtcHJlZzsJCQkJCVwKIAkJCQkJCQkJCVwK
QEAgLTM3LDEyICszNywxMiBAQAoKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBna2Vybl9tYXNrOwoK
LSMgZGVmaW5lIF9fZmx1c2hfdGxiX2FsbCgpCQkJCQkJXAorIyBkZWZpbmUgbG9jYWxfZmx1c2hf
dGxiX2FsbCgpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKGNwdV9oYXNfcGdlKQkJCQkJ
XAogCQkJX19mbHVzaF90bGJfZ2xvYmFsKCk7CQkJCVwKIAkJZWxzZQkJCQkJCQlcCi0JCQlfX2Zs
dXNoX3RsYigpOwkJCQkJXAorCQkJbG9jYWxfZmx1c2hfdGxiKCk7CQkJCVwKIAl9IHdoaWxlICgw
KQogCiAjZGVmaW5lIGNwdV9oYXNfaW52bHBnCShib290X2NwdV9kYXRhLng4NiA+IDMpCkBAIC01
MSwxNCArNTEsMTQgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW52bHBnICUwIjogOiJtIiAo
KihjaGFyICopIGFkZHIpKQogCiAjaWZkZWYgQ09ORklHX1g4Nl9JTlZMUEcKLSMgZGVmaW5lIF9f
Zmx1c2hfdGxiX29uZShhZGRyKSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikKKyMgZGVmaW5lIGxv
Y2FsX2ZsdXNoX3RsYl9vbmUoYWRkcikgX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpCiAjZWxzZQot
IyBkZWZpbmUgX19mbHVzaF90bGJfb25lKGFkZHIpCQkJCQkJXAorIyBkZWZpbmUgbG9jYWxfZmx1
c2hfdGxiX29uZShhZGRyKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKGNwdV9oYXNfaW52
bHBnKQkJCQkJXAogCQkJX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpOwkJCVwKIAkJZWxzZQkJCQkJ
CQlcCi0JCQlfX2ZsdXNoX3RsYigpOwkJCQkJXAorCQkJbG9jYWxfZmx1c2hfdGxiKCk7CQkJCVwK
IAl9IHdoaWxlICgwKQogI2VuZGlmCiAKQEAgLTc5LDQ3ICs3OSw5NCBAQAogCiAjaWZuZGVmIENP
TkZJR19TTVAKIAotI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCi0jZGVmaW5lIGZs
dXNoX3RsYl9hbGwoKSBfX2ZsdXNoX3RsYl9hbGwoKQotI2RlZmluZSBsb2NhbF9mbHVzaF90bGIo
KSBfX2ZsdXNoX3RsYigpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiKHZvaWQpCit7CisJ
Zmx1c2hfdGxiX2hvb2soKTsKKwlsb2NhbF9mbHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlmbHVzaF90bGJfYWxsX2hvb2soKTsKKwls
b2NhbF9mbHVzaF90bGJfYWxsKCk7Cit9Cgogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9t
bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwlmbHVzaF90bGJfbW1faG9vayhtbSk7CiAJaWYg
KG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKLQkJX19mbHVzaF90bGIoKTsKKwkJbG9jYWxfZmx1
c2hfdGxiKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJZmx1c2hfdGxi
X3BhZ2VfaG9vayh2bWEsIGFkZHIpOwogCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2
ZV9tbSkKLQkJX19mbHVzaF90bGJfb25lKGFkZHIpOworCQlsb2NhbF9mbHVzaF90bGJfb25lKGFk
ZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqdm1hLAogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5k
KQogeworCWZsdXNoX3RsYl9yYW5nZV9ob29rKHZtYSwgc3RhcnQsIGVuZCk7CiAJaWYgKHZtYS0+
dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOworCQlsb2NhbF9m
bHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFu
Z2UodW5zaWduZWQgbG9uZyBzdGFydCwKKwl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90
bGJfa2VybmVsX3JhbmdlX2hvb2soc3RhcnQsIGVuZCk7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgp
OwogfQogCiAjZWxzZQogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0jZGVmaW5lIGxvY2FsX2Zs
dXNoX3RsYigpIFwKLQlfX2ZsdXNoX3RsYigpCitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiKHZv
aWQpOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBz
bXBfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBzbXBfZmx1
c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworCitz
dGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiKHZvaWQpCit7CisJZmx1c2hfdGxiX2hvb2soKTsK
KwlzbXBfZmx1c2hfdGxiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxs
KHZvaWQpCit7CisJZmx1c2hfdGxiX2FsbF9ob29rKCk7CisJc21wX2ZsdXNoX3RsYl9hbGwoKTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICpt
bSkKK3sKKwlmbHVzaF90bGJfbW1faG9vayhtbSk7CisJc21wX2ZsdXNoX3RsYl9tbShtbSk7Cit9
CiAKLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBmbHVzaF90
bGJfY3VycmVudF90YXNrKHZvaWQpOwotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBt
bV9zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9z
dHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3Bh
Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJdW5zaWduZWQgbG9uZyBhZGRyKQorewor
CWZsdXNoX3RsYl9wYWdlX2hvb2sodm1hLCBhZGRyKTsKKwlzbXBfZmx1c2hfdGxiX3BhZ2Uodm1h
LCBhZGRyKTsKK30KIAotI2RlZmluZSBmbHVzaF90bGIoKQlmbHVzaF90bGJfY3VycmVudF90YXNr
KCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3Ry
dWN0ICogdm1hLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorewor
CWZsdXNoX3RsYl9yYW5nZV9ob29rKHZtYSwgc3RhcnQsIGVuZCk7CisJc21wX2ZsdXNoX3RsYl9t
bSh2bWEtPnZtX21tKTsKK30KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShz
dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk
IGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5z
aWduZWQgbG9uZyBzdGFydCwKKwl1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlmbHVzaF90bGJfbW0o
dm1hLT52bV9tbSk7CisJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZV9ob29rKHN0YXJ0LCBlbmQpOwor
CXNtcF9mbHVzaF90bGJfYWxsKCk7CiB9CgogI2RlZmluZSBUTEJTVEFURV9PSwkxCkBAIC0xMzYs
MTEgKzE4MywxMCBAQAoKICNlbmRpZgoKLSNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShz
dGFydCwgZW5kKSBmbHVzaF90bGJfYWxsKCkKLQogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3Rs
Yl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25n
IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwlmbHVzaF90bGJfcGd0YWJsZXNfaG9vayht
bSwgc3RhcnQsIGVuZCk7CiAJLyogaTM4NiBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNh
Y2hlcyBpbiBUTEIgKi8KIH0KCg==

--=_courier-25122-1043420275-0001-2--