--20cf305e2505c5092a04af451d02
Content-Type: multipart/alternative; boundary=20cf305e2505c5092704af451d00
--20cf305e2505c5092704af451d00
Content-Type: text/plain; charset=ISO-8859-1
Hello,
Here is the top io patch attached.
This patch is just for testing purpose.
I have made some changes to PRES print and sorting stuff.
As, I was testing this on my old system, cause its graphical and gives me
some good read and write results while fire-fox is running.
I talked on IRC and Alex told me that the IVCSW (In voluntary context
switches) values are not stored properly but on my system I always see the
IVCSW values zero both with the values from the struct kp_ru and kp_cru i.e.
I tried to check the values of process resource usage and childs resource
usage and the IVCSW is allways zero. May be their are no involuntary context
switches on my system, may be the processes are kind enough to utilise cpu
in bounds.
Also, I added a function to sort the reads which is not sorting the
processes properly, although the logic is same the way with other sort
ORDERKEY's.
Please test this patch with the top -m io command and give me some
suggestions on it.
Note: This patch is just to get some feedback. The only things missing in
this patch is sorting the output depending on write, total io, vcsw, ivcsw
and faults.
- Pratyush Kshirsagar.
--20cf305e2505c5092704af451d00
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hello,<br>Here is the top io patch attached.<br>This patch is just for test=
ing purpose.<br>I have made some changes to PRES print and sorting stuff.<b=
r>As, I was testing this on my old system, cause its graphical and gives me=
some good read and write results while fire-fox is running.<br>
I talked on IRC and Alex told me that the IVCSW=A0 (In voluntary context sw=
itches) values are not stored properly but on my system I always see the IV=
CSW values zero both with the values from the struct kp_ru and kp_cru i.e. =
I tried to check the values of process resource usage and childs resource u=
sage and the IVCSW is allways zero. May be their are no involuntary context=
switches on my system, may be the processes are kind enough to utilise cpu=
in bounds.<br>
Also, I added a function to sort the reads which is not sorting the process=
es properly, although the logic is same the way with other sort ORDERKEY=
9;s.<br><br>Please test this patch with the top -m io command and give me s=
ome suggestions on it.<br>
<br>Note: This patch is just to get some feedback. The only things missing =
in this patch is sorting the output depending on write, total io, vcsw, ivc=
sw and faults.<br><br>- Pratyush Kshirsagar.<br>
--20cf305e2505c5092704af451d00--
--20cf305e2505c5092a04af451d02
Content-Type: application/octet-stream; name="top_io_patch_review_01.patch"
Content-Disposition: attachment; filename="top_io_patch_review_01.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gtkl7vn00
ZGlmZiAtLWdpdCBhL2NvbnRyaWIvdG9wL3RvcC5jIGIvY29udHJpYi90b3AvdG9wLmMKaW5kZXgg
OGQ4Nzk0MC4uNWY0NzU0ZSAxMDA2NDQKLS0tIGEvY29udHJpYi90b3AvdG9wLmMKKysrIGIvY29u
dHJpYi90b3AvdG9wLmMKQEAgLTQxNCw4ICs0MTQsMTQgQEAgZG9fYXJndW1lbnRzKGdsb2JhbHN0
YXRlICpnc3RhdGUsIGludCBhYywgY2hhciAqKmF2KQogCSAgICBicmVhazsKIAogCWNhc2UgJ20n
OgotCSAgICBpID0gYXRvaShvcHRhcmcpOwotCSAgICBnc3RhdGUtPnBzZWxlY3QubW9kZSA9IGk7
CisJICAgIGlmIChzdHJjbXAob3B0YXJnLCJpbyIpID09IDApIHsKKwkJZGlzcGxheW1vZGUgPSBE
SVNQX0lPOworCSAgICB9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsImNwdSIpID09IDApIHsKKwkJ
ZGlzcGxheW1vZGUgPSBESVNQX0NQVTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisJCSAgICBpID0g
YXRvaShvcHRhcmcpOworCQkgICAgZ3N0YXRlLT5wc2VsZWN0Lm1vZGUgPSBpOworCSAgICB9CiAJ
ICAgIGJyZWFrOwogCiAJY2FzZSAnUyc6CmRpZmYgLS1naXQgYS9jb250cmliL3RvcC90b3AuaCBi
L2NvbnRyaWIvdG9wL3RvcC5oCmluZGV4IGM1MDA0NmEuLjVlODFlNGQgMTAwNjQ0Ci0tLSBhL2Nv
bnRyaWIvdG9wL3RvcC5oCisrKyBiL2NvbnRyaWIvdG9wL3RvcC5oCkBAIC02NSw2ICs2NSwxMCBA
QCBzdHJ1Y3QgZXh0X2RlY2wgewogICAgIGludCAoKmZfZGlzcGxheSkoY2hhciAqLCBpbnQpOwog
fTsKIAorLyogRGlzcGxheSBtb2RlcyB0byBkaXN0aW5ndWlzaCB0aGUgdHlwZSBvZiB0b3AgZGlz
cGxheSAqLworZW51bSBkaXNwbGF5bW9kZXMgeyBESVNQX0NQVSA9IDAsIERJU1BfSU8sIERJU1Bf
TUFYIH07CisKK2V4dGVybiBlbnVtIGRpc3BsYXltb2RlcyBkaXNwbGF5bW9kZTsKIC8qCiAgKiAg
IlRhYmxlX3NpemUiIGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGVzIHVzZWQgdG8g
bWFwIHVpZCB0bwogICogIHVzZXJuYW1lLiAgVGhpbmdzIHdpbGwgd29yayBiZXN0IGlmIHRoZSBu
dW1iZXIgaXMgYSBwcmltZSBudW1iZXIuCmRpZmYgLS1naXQgYS9zeXMvc3lzL2tpbmZvLmggYi9z
eXMvc3lzL2tpbmZvLmgKaW5kZXggYzU0N2M2ZC4uYmFmZjZlOSAxMDA2NDQKLS0tIGEvc3lzL3N5
cy9raW5mby5oCisrKyBiL3N5cy9zeXMva2luZm8uaApAQCAtMjA0LDYgKzIwNCw3IEBAIHN0cnVj
dCBraW5mb19wcm9jIHsKIAlzdHJ1Y3QgcnVzYWdlCWtwX3J1OwogCXN0cnVjdCBydXNhZ2UJa3Bf
Y3J1OwogCisJdm9pZCAJCSprcF91ZGF0YTsKIAlpbnQJCWtwX2F1eGZsYWdzOwkvKiBnZW5lcmF0
ZWQgZmxhZ3MgKi8KICNkZWZpbmUgS0lfQ1RUWQkxCiAjZGVmaW5lIEtJX1NMRUFERVIJMgpkaWZm
IC0tZ2l0IGEvdXNyLmJpbi90b3AvbV9kcmFnb25mbHkuYyBiL3Vzci5iaW4vdG9wL21fZHJhZ29u
Zmx5LmMKaW5kZXggZmZhNzg5YS4uZmJkMzkzNyAxMDA2NDQKLS0tIGEvdXNyLmJpbi90b3AvbV9k
cmFnb25mbHkuYworKysgYi91c3IuYmluL3RvcC9tX2RyYWdvbmZseS5jCkBAIC02Myw2ICs2Myw3
IEBAIHN0YXRpYyBpbnQgc21wbW9kZTsKIHN0YXRpYyBpbnQgbmFtZWxlbmd0aDsKIHN0YXRpYyBp
bnQgY21kbGVuZ3RoOwogc3RhdGljIGludCBzaG93X2Z1bGxjbWQ7CitlbnVtIGRpc3BsYXltb2Rl
cyBkaXNwbGF5bW9kZTsKIAogaW50IG5fY3B1cyA9IDA7CiAKQEAgLTg0LDYgKzg1LDcgQEAgc3Ry
dWN0IGhhbmRsZSB7CiAjZGVmaW5lIFBQKHBwLCBmaWVsZCkgKChwcCktPmtwXyAjIyBmaWVsZCkK
ICNkZWZpbmUgTFAocHAsIGZpZWxkKSAoKHBwKS0+a3BfbHdwLmtsXyAjIyBmaWVsZCkKICNkZWZp
bmUgVlAocHAsIGZpZWxkKSAoKHBwKS0+a3Bfdm1fICMjIGZpZWxkKQorI2RlZmluZSBSVShwcCkg
ICAgICAgICgmKHBwKS0+a3BfcnUpCiAKIC8qIGRlZmluZSB3aGF0IHdlaWdodGVkIGNwdSBpcy4g
ICovCiAjZGVmaW5lIHdlaWdodGVkX2NwdShwY3QsIHBwKSAoUFAoKHBwKSwgc3d0aW1lKSA9PSAw
ID8gMC4wIDogXApAQCAtOTYsMTggKzk4LDIzIEBAIHN0cnVjdCBoYW5kbGUgewogICogVGhlc2Ug
ZGVmaW5pdGlvbnMgY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBwZXItcHJvY2VzcyBhcmVhCiAg
Ki8KIAorc3RhdGljIGNoYXIgaW9faGVhZGVyW10gPQorIiAgUElEICUtKi4qcyBWQ1NXICBJVkNT
VyAgUkVBRCAgIFdSSVRFICAgICBGQVVMVCAgIFRPVEFMICAgUEVSQ0VOVCBDT01NQU5EIjsKKwor
I2RlZmluZSBpb19Qcm9jX2Zvcm1hdCBcCisJIiU1ZCAlLSouKnMgJTZsZCAlNmxkICU2bGQgJTZs
ZCAlNmxkICU2bGQgICU1LjJmJSUgJTdzIgorCiBzdGF0aWMgY2hhciBzbXBfaGVhZGVyW10gPQot
IiAgUElEICUtKi4qcyBQUkkgTklDRSAgU0laRSAgICBSRVMgU1RBVEUgIEMgICBUSU1FICAgQ1RJ
TUUgICBDUFUgQ09NTUFORCI7CisiICBQSUQgJS0qLipzIE5JQ0UgIFNJWkUgICBQUkVTICAgU1RB
VEUgQ1BVICBUSU1FICAgQ1RJTUUgICAgQ1BVIENPTU1BTkQiOwogCiAjZGVmaW5lIHNtcF9Qcm9j
X2Zvcm1hdCBcCi0JIiU1ZCAlLSouKnMgJTNkICUzZCU3cyAlNnMgJS02LjZzICUxeCU3cyAlN3Mg
JTUuMmYlJSAlLipzIgorCSIlNWQgJS0qLipzICUzZCU3cyAlNnMgJTcuN3MgJTJkICU2cyAlN3Mg
JTUuMmYlJSAlLipzIgogCiBzdGF0aWMgY2hhciB1cF9oZWFkZXJbXSA9Ci0iICBQSUQgJS0qLipz
IFBSSSBOSUNFICBTSVpFICAgIFJFUyBTVEFURSAgICBUSU1FICAgQ1RJTUUgICBDUFUgQ09NTUFO
RCI7CisiICBQSUQgJS0qLipzIE5JQ0UgIFNJWkUgICBQUkVTICAgU1RBVEUgICAgVElNRSAgIENU
SU1FICAgIENQVSBDT01NQU5EIjsKIAogI2RlZmluZSB1cF9Qcm9jX2Zvcm1hdCBcCi0JIiU1ZCAl
LSouKnMgJTNkICUzZCU3cyAlNnMgJS02LjZzJS4wZCU3cyAlN3MgJTUuMmYlJSAlLipzIgotCisJ
IiU1ZCAlLSouKnMgJTNkJTdzICU2cyAlNy43cyUuMGQgJTdzICU3cyAlNS4yZiUlICUuKnMiCiAK
IAogLyogcHJvY2VzcyBzdGF0ZSBuYW1lcyBmb3IgdGhlICJTVEFURSIgY29sdW1uIG9mIHRoZSBk
aXNwbGF5ICovCkBAIC0xNzIsNiArMTc5LDE1IEBAIHN0YXRpYyBpbnQgb25wcm9jID0gLTE7CiBz
dGF0aWMgaW50IHByZWZfbGVuOwogc3RhdGljIHN0cnVjdCBraW5mb19wcm9jICpwYmFzZTsKIHN0
YXRpYyBzdHJ1Y3Qga2luZm9fcHJvYyAqKnByZWY7CitzdGF0aWMgc3RydWN0IGtpbmZvX3Byb2Mg
KnByZXZpb3VzX3Byb2NzOworc3RhdGljIHN0cnVjdCBraW5mb19wcm9jICoqcHJldmlvdXNfcHJl
ZjsKK3N0YXRpYyBpbnQgcHJldmlvdXNfcHJvY19jb3VudCA9IDA7CitzdGF0aWMgaW50IHByZXZp
b3VzX3Byb2NfY291bnRfbWF4ID0gMDsKKworLyogdG90YWwgbnVtYmVyIG9mIGlvIG9wZXJhdGlv
bnMgKi8KK3N0YXRpYyBsb25nIHRvdGFsX2luYmxvY2s7CitzdGF0aWMgbG9uZyB0b3RhbF9vdWJs
b2NrOworc3RhdGljIGxvbmcgdG90YWxfbWFqZmx0OwogCiAvKiB0aGVzZSBhcmUgZm9yIGdldHRp
bmcgdGhlIG1lbW9yeSBzdGF0aXN0aWNzICovCiAKQEAgLTE4Myw3ICsxOTksNyBAQCBzdGF0aWMg
aW50IHBhZ2VzaGlmdDsJCS8qIGxvZyBiYXNlIDIgb2YgdGhlIHBhZ2VzaXplICovCiAKIC8qIHNv
cnRpbmcgb3JkZXJzLiBmaXJzdCBpcyBkZWZhdWx0ICovCiBjaGFyICpvcmRlcm5hbWVzW10gPSB7
Ci0JImNwdSIsICJzaXplIiwgInJlcyIsICJ0aW1lIiwgInByaSIsICJ0aHIiLCAicGlkIiwgImN0
aW1lIiwgIE5VTEwKKyAgImNwdSIsICJzaXplIiwgInJlcyIsICJ0aW1lIiwgInByaSIsICJ0aHIi
LCAicGlkIiwgImN0aW1lIiwgInJlYWQiLCBOVUxMCiB9OwogCiAvKiBjb21wYXJlIHJvdXRpbmVz
ICovCkBAIC0xOTUsNiArMjExLDggQEAgaW50IGNvbXBhcmVfY3RpbWUgKHN0cnVjdCBraW5mb19w
cm9jICoqLCBzdHJ1Y3Qga2luZm9fcHJvYyAqKik7CiBpbnQgY29tcGFyZV9wcmlvKHN0cnVjdCBr
aW5mb19wcm9jICoqLCBzdHJ1Y3Qga2luZm9fcHJvYyAqKik7CiBpbnQgY29tcGFyZV90aHIgKHN0
cnVjdCBraW5mb19wcm9jICoqLCBzdHJ1Y3Qga2luZm9fcHJvYyAqKik7CiBpbnQgY29tcGFyZV9w
aWQgKHN0cnVjdCBraW5mb19wcm9jICoqLCBzdHJ1Y3Qga2luZm9fcHJvYyAqKik7CitpbnQgY29t
cGFyZV9waWQxIChzdHJ1Y3Qga2luZm9fcHJvYyAqLCBzdHJ1Y3Qga2luZm9fcHJvYyAqKTsKK2lu
dCBjb21wYXJlX2lvcmVhZCAoc3RydWN0IGtpbmZvX3Byb2MgKiosIHN0cnVjdCBraW5mb19wcm9j
ICoqKTsKIAogaW50ICgqcHJvY19jb21wYXJlc1tdKSAoc3RydWN0IGtpbmZvX3Byb2MgKiosc3Ry
dWN0IGtpbmZvX3Byb2MgKiopID0gewogCXByb2NfY29tcGFyZSwKQEAgLTIwNSw2ICsyMjMsNyBA
QCBpbnQgKCpwcm9jX2NvbXBhcmVzW10pIChzdHJ1Y3Qga2luZm9fcHJvYyAqKixzdHJ1Y3Qga2lu
Zm9fcHJvYyAqKikgPSB7CiAJY29tcGFyZV90aHIsCiAJY29tcGFyZV9waWQsCiAJY29tcGFyZV9j
dGltZSwKKwljb21wYXJlX2lvcmVhZCwKIAlOVUxMCiB9OwogCkBAIC0zMjcsOCArMzQ2LDE2IEBA
IGZvcm1hdF9oZWFkZXIoY2hhciAqdW5hbWVfZmllbGQpCiB7CiAJc3RhdGljIGNoYXIgSGVhZGVy
WzEyOF07CiAKLQlzbnByaW50ZihIZWFkZXIsIHNpemVvZihIZWFkZXIpLCBzbXBtb2RlID8gc21w
X2hlYWRlciA6IHVwX2hlYWRlciwKLQkgICAgbmFtZWxlbmd0aCwgbmFtZWxlbmd0aCwgdW5hbWVf
ZmllbGQpOworCXN3aXRjaChkaXNwbGF5bW9kZSkgeworCWNhc2UgRElTUF9DUFU6CisJCXNucHJp
bnRmKEhlYWRlciwgc2l6ZW9mKEhlYWRlciksIHNtcG1vZGUgPyBzbXBfaGVhZGVyIDogdXBfaGVh
ZGVyLAorCQkgICAgbmFtZWxlbmd0aCwgbmFtZWxlbmd0aCwgdW5hbWVfZmllbGQpOworCQlicmVh
azsKKwljYXNlIERJU1BfSU86CisJCXNucHJpbnRmKEhlYWRlciwgc2l6ZW9mKEhlYWRlciksIGlv
X2hlYWRlciwKKwkJCW5hbWVsZW5ndGgsIG5hbWVsZW5ndGgsIHVuYW1lX2ZpZWxkKTsKKwkJYnJl
YWs7CisJfQogCiAJaWYgKHNjcmVlbl93aWR0aCA8PSA3OSkKIAkJY21kbGVuZ3RoID0gODA7CkBA
IC0zNjEsNyArMzg4LDYgQEAgZ2V0X3N5c3RlbV9pbmZvKHN0cnVjdCBzeXN0ZW1faW5mbyAqc2kp
CiAJCWlmIChjcF90aW1lID09IE5VTEwpCiAJCQllcnIoMSwgImNwX3RpbWUiKTsKIAkJY3Bfb2xk
ID0gY3BfdGltZSArIG5fY3B1czsKLQogCQlsZW4gPSBuX2NwdXMgKiBzaXplb2YoY3Bfb2xkWzBd
KTsKIAkJYnplcm8oY3BfdGltZSwgbGVuKTsKIAkJaWYgKHN5c2N0bGJ5bmFtZSgia2Vybi5jcHV0
aW1lIiwgY3Bfb2xkLCAmbGVuLCBOVUxMLCAwKSkKQEAgLTQ0OSw2ICs0NzUsNzMgQEAgZ2V0X3N5
c3RlbV9pbmZvKHN0cnVjdCBzeXN0ZW1faW5mbyAqc2kpCiAJfQogfQogCisjZGVmaW5lIE5PUFJP
QyAoKHZvaWQgKiktMSkKKworY29uc3Qgc3RydWN0IGtpbmZvX3Byb2MgKgorZ2V0X29sZF9wcm9j
KHN0cnVjdCBraW5mb19wcm9jICpwcCkgeworCisJc3RydWN0IGtpbmZvX3Byb2MgKipvbGRwcCwg
Km9sZHA7CisJaWYocHJldmlvdXNfcHJvY19jb3VudCA9PSAwKQorCQlyZXR1cm4gKE5VTEwpOwor
CWlmKHBwLT5rcF91ZGF0YSA9PSBOT1BST0MpCisJCXJldHVybiAoTlVMTCk7CisJaWYocHAtPmtw
X3VkYXRhICE9IE5VTEwpIHsKKwkJcmV0dXJuIChwcC0+a3BfdWRhdGEpOworCX0KKwlvbGRwcCA9
IGJzZWFyY2goJnBwLCBwcmV2aW91c19wcmVmLCBwcmV2aW91c19wcm9jX2NvdW50LCBzaXplb2Yo
KnByZXZpb3VzX3ByZWYpLAorCQkoaW50KCopIChjb25zdCB2b2lkICosIGNvbnN0ICB2b2lkICop
KSBjb21wYXJlX3BpZDEpOworCWlmKG9sZHBwID09IE5VTEwpIHsKKwkJcHAtPmtwX3VkYXRhID0g
Tk9QUk9DOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlvbGRwID0gKm9sZHBwOworCWlmKGJjbXAo
Jm9sZHAtPmtwX3N0YXJ0LCAmcHAtPmtwX3N0YXJ0LCBzaXplb2YocHAtPmtwX3N0YXJ0KSkgIT0g
MCkgeworCQlwcC0+a3BfdWRhdGEgPSBOT1BST0M7CisJCXJldHVybihOVUxMKTsKKwl9CisJcHAt
PmtwX3VkYXRhID0gb2xkcDsKKwlyZXR1cm4gKG9sZHApOworfQorCisvKgorICogUmV0dXJuIHRo
ZSB0b3RhbCBhbW91bnQgb2YgSU8gZG9uZSBpbiBibG9ja3MgaW4vb3V0IGFuZCBmYXVsdHMuCisg
KiBzdG9yZSB0aGUgdmFsdWVzIGluZGl2aWR1YWxseSBpbiB0aGUgcG9pbnRlcnMgcGFzc2VkIGlu
LgorICovCitsb25nCitnZXRfaW9fc3RhdHMoc3RydWN0IGtpbmZvX3Byb2MgKnBwLCBsb25nICpp
bnAsIGxvbmcgKm91cCwgbG9uZyAqZmxwLAorICAgIGxvbmcgKnZjc3csIGxvbmcgKml2Y3N3KQor
eworCWNvbnN0IHN0cnVjdCBraW5mb19wcm9jICpvbGRwOworCXN0YXRpYyBzdHJ1Y3Qga2luZm9f
cHJvYyBkdW1teTsKKwlsb25nIHJldDsKKworCW9sZHAgPSBnZXRfb2xkX3Byb2MocHApOworCWlm
IChvbGRwID09IE5VTEwpIHsKKwkJYnplcm8oJmR1bW15LCBzaXplb2YoZHVtbXkpKTsKKwkJb2xk
cCA9ICZkdW1teTsKKwl9CisJKmlucCA9ICAgUFAocHAscnUpLnJ1X2luYmxvY2sgLSBQUChwcCxy
dSkucnVfaW5ibG9jazsKKwkqb3VwID0gICBQUChwcCxydSkucnVfb3VibG9jayAtIFBQKG9sZHAs
cnUpLnJ1X291YmxvY2s7CisJKmZscCA9ICAgUFAocHAscnUpLnJ1X21hamZsdCAgLSBQUChvbGRw
LHJ1KS5ydV9tYWpmbHQ7CisJKnZjc3cgPSAgUFAocHAscnUpLnJ1X252Y3N3ICAgLSBQUChvbGRw
LHJ1KS5ydV9udmNzdzsKKwkqaXZjc3cgPSBQUChwcCxydSkucnVfbml2Y3N3ICAtIFBQKG9sZHAs
cnUpLnJ1X25pdmNzdzsKKwlyZXQgPQorCSAgICAoUFAocHAscnUpLnJ1X2luYmxvY2sgLSBQUChv
bGRwLHJ1KS5ydV9pbmJsb2NrKSArCisJICAgIChQUChwcCxydSkucnVfb3VibG9jayAtIFBQKG9s
ZHAscnUpLnJ1X291YmxvY2spICsKKwkgICAgKFBQKHBwLHJ1KS5ydV9tYWpmbHQgIC0gUFAob2xk
cCxydSkucnVfbWFqZmx0KTsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhl
IHRvdGFsIG51bWJlciBvZiBibG9jayBpbi9vdXQgYW5kIGZhdWx0cyBieSBhIHByb2Nlc3MuCisg
Ki8KK2xvbmcKK2dldF9pb190b3RhbChzdHJ1Y3Qga2luZm9fcHJvYyAqcHApCit7CisJbG9uZyBk
dW1teTsKKworCXJldHVybiAoZ2V0X2lvX3N0YXRzKHBwLCAmZHVtbXksICZkdW1teSwgJmR1bW15
LCAmZHVtbXksICZkdW1teSkpOworfQogCiBzdGF0aWMgc3RydWN0IGhhbmRsZSBoYW5kbGU7CiAK
QEAgLTQ1OSw2ICs1NTIsOCBAQCBnZXRfcHJvY2Vzc19pbmZvKHN0cnVjdCBzeXN0ZW1faW5mbyAq
c2ksIHN0cnVjdCBwcm9jZXNzX3NlbGVjdCAqc2VsLAogCWludCBpOwogCWludCB0b3RhbF9wcm9j
czsKIAlpbnQgYWN0aXZlX3Byb2NzOworCWxvbmcgcF9pbzsKKwlsb25nIHBfaW5ibG9jaywgcF9v
dWJsb2NrLCBwX21hamZsdCwgcF92Y3N3LCBwX2l2Y3N3OwogCXN0cnVjdCBraW5mb19wcm9jICoq
cHJlZnA7CiAJc3RydWN0IGtpbmZvX3Byb2MgKnBwOwogCkBAIC00NjcsNiArNTYyLDI3IEBAIGdl
dF9wcm9jZXNzX2luZm8oc3RydWN0IHN5c3RlbV9pbmZvICpzaSwgc3RydWN0IHByb2Nlc3Nfc2Vs
ZWN0ICpzZWwsCiAJaW50IHNob3dfc3lzdGVtOwogCWludCBzaG93X3VpZDsKIAorCWlmKHByZXZp
b3VzX3Byb2NfY291bnRfbWF4IDwgbnByb2MpIHsKKwkJZnJlZShwcmV2aW91c19wcm9jcyk7CisJ
CXByZXZpb3VzX3Byb2NzID0gbWFsbG9jKG5wcm9jICogc2l6ZW9mKCpwcmV2aW91c19wcm9jcykp
OworCQlmcmVlKHByZXZpb3VzX3ByZWYpOworCQlwcmV2aW91c19wcmVmID0gbWFsbG9jKG5wcm9j
ICogc2l6ZW9mKCpwcmV2aW91c19wcmVmKSk7CisJCWlmKHByZXZpb3VzX3Byb2NzID09IE5VTEwg
fHwgcHJldmlvdXNfcHJlZiA9PSBOVUxMKSB7CisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJ0
b3A6IE91dCBvZiBtZW1vcnkuIFxuIik7CisJCQlxdWl0KDIzKTsKKwkJfQorCQlwcmV2aW91c19w
cm9jX2NvdW50X21heCA9IG5wcm9jOworCX0KKworCWlmKG5wcm9jKSB7CisJCWZvcihpPTA7IGk8
bnByb2M7IGkrKykgeworCQkJcHJldmlvdXNfcHJlZltpXSA9ICZwcmV2aW91c19wcm9jc1tpXTsK
KwkJCWJjb3B5KHBiYXNlLCBwcmV2aW91c19wcm9jcywgbnByb2MgKiBzaXplb2YoKnByZXZpb3Vz
X3Byb2NzKSk7CisJCQlxc29ydChwcmV2aW91c19wcmVmLCBucHJvYywgc2l6ZW9mKCpwcmV2aW91
c19wcmVmKSwKKwkJCQkoaW50ICgqKSAgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkgY29t
cGFyZV9waWQxKTsKKwkJfQorCX0KKwlwcmV2aW91c19wcm9jX2NvdW50ID0gbnByb2M7CiAKIAlw
YmFzZSA9IGt2bV9nZXRwcm9jcyhrZCwgS0VSTl9QUk9DX0FMTCwgMCwgJm5wcm9jKTsKIAlpZiAo
bnByb2MgPiBvbnByb2MpCkBAIC00ODgsNiArNjA0LDEwIEBAIGdldF9wcm9jZXNzX2luZm8oc3Ry
dWN0IHN5c3RlbV9pbmZvICpzaSwgc3RydWN0IHByb2Nlc3Nfc2VsZWN0ICpzZWwsCiAJLyogY291
bnQgdXAgcHJvY2VzcyBzdGF0ZXMgYW5kIGdldCBwb2ludGVycyB0byBpbnRlcmVzdGluZyBwcm9j
cyAqLwogCXRvdGFsX3Byb2NzID0gMDsKIAlhY3RpdmVfcHJvY3MgPSAwOworCXRvdGFsX2luYmxv
Y2sgPSAwOworCXRvdGFsX291YmxvY2sgPSAwOworCXRvdGFsX21hamZsdCA9IDA7CisKIAltZW1z
ZXQoKGNoYXIgKilwcm9jZXNzX3N0YXRlcywgMCwgc2l6ZW9mKHByb2Nlc3Nfc3RhdGVzKSk7CiAJ
cHJlZnAgPSBwcmVmOwogCWZvciAocHAgPSBwYmFzZSwgaSA9IDA7IGkgPCBucHJvYzsgcHArKywg
aSsrKSB7CkBAIC00OTksNiArNjE5LDEyIEBAIGdldF9wcm9jZXNzX2luZm8oc3RydWN0IHN5c3Rl
bV9pbmZvICpzaSwgc3RydWN0IHByb2Nlc3Nfc2VsZWN0ICpzZWwsCiAJCSAqLwogCQlpZiAoKHNo
b3dfdGhyZWFkcyAmJiAoTFAocHAsIHBpZCkgPT0gLTEpKSB8fAogCQkgICAgKHNob3dfc3lzdGVt
IHx8ICgoUFAocHAsIGZsYWdzKSAmIFBfU1lTVEVNKSA9PSAwKSkpIHsKKwkJICBwX2lvID0gZ2V0
X2lvX3N0YXRzKHBwLCAmcF9pbmJsb2NrLCAmcF9vdWJsb2NrLCAmcF9tYWpmbHQsCisJCQkJICAg
ICAgJnBfdmNzdywgJnBfaXZjc3cpOworCQkgIHRvdGFsX2luYmxvY2sgKz0gcF9pbmJsb2NrOwor
CQkgIHRvdGFsX291YmxvY2sgKz0gcF9vdWJsb2NrOworCQkgIHRvdGFsX21hamZsdCArPSBwX21h
amZsdDsKKwogCQkJdG90YWxfcHJvY3MrKzsKIAkJCWlmIChMUChwcCwgc3RhdCkgPT0gTFNSVU4p
CiAJCQkJcHJvY2Vzc19zdGF0ZXNbMF0rKzsKQEAgLTU0Miw2ICs2NjgsOCBAQCBmb3JtYXRfbmV4
dF9wcm9jZXNzKGNhZGRyX3QgeGhhbmRsZSwgY2hhciAqKCpnZXRfdXNlcmlkKSAoaW50KSkKIAlj
aGFyICoqY29tbV9mdWxsOwogCWNoYXIgKmNvbW07CiAJY2hhciBjcHV0aW1lX2ZtdFsxMF0sIGNj
cHV0aW1lX2ZtdFsxMF07CisJc3RydWN0IHJ1c2FnZSBydSwgKnJ1cDsKKwlsb25nIHBfdG90LCBz
X3RvdDsKIAogCS8qIGZpbmQgYW5kIHJlbWVtYmVyIHRoZSBuZXh0IHByb2Mgc3RydWN0dXJlICov
CiAJaHAgPSAoc3RydWN0IGhhbmRsZSAqKXhoYW5kbGU7CkBAIC02MTcsMTcgKzc0NSw1MiBAQCBm
b3JtYXRfbmV4dF9wcm9jZXNzKGNhZGRyX3QgeGhhbmRsZSwgY2hhciAqKCpnZXRfdXNlcmlkKSAo
aW50KSkKIAkJYnJlYWs7CiAJfQogCisJaWYoZGlzcGxheW1vZGUgPT0gRElTUF9JTykgeworCQlj
b25zdCBzdHJ1Y3Qga2luZm9fcHJvYyAqb2xkcDsKKwkJb2xkcCA9IGdldF9vbGRfcHJvYyhwcCk7
CisJCWlmKG9sZHAgIT0gTlVMTCkgeworCQkJcnUucnVfaW5ibG9jayA9IFBQKHBwLHJ1KS5ydV9p
bmJsb2NrIC0gUFAob2xkcCxydSkucnVfaW5ibG9jazsKKwkJCXJ1LnJ1X291YmxvY2sgPSBQUChw
cCxydSkucnVfb3VibG9jayAtIFBQKG9sZHAscnUpLnJ1X291YmxvY2s7CisJCQlydS5ydV9tYWpm
bHQgID0gUFAocHAscnUpLnJ1X21hamZsdCAgLSBQUChvbGRwLHJ1KS5ydV9tYWpmbHQ7CisJCQly
dS5ydV9udmNzdyAgID0gUFAocHAscnUpLnJ1X252Y3N3ICAgLSBQUChvbGRwLHJ1KS5ydV9udmNz
dzsKKwkJCXJ1LnJ1X25pdmNzdyAgPSBQUChwcCxydSkucnVfbml2Y3N3ICAtIFBQKG9sZHAscnUp
LnJ1X25pdmNzdzsKKwkJCXJ1cCA9ICZydTsKKwkJfSBlbHNlIHsKKwkJCXJ1cCA9IFJVKHBwKTsK
Ky8vCQkJcnUucnVfaW5ibG9jayA9IFBQKHBwLHJ1KS5ydV9pbmJsb2NrOworLy8JCQlydS5ydV9v
dWJsb2NrID0gUFAocHAscnUpLnJ1X291YmxvY2s7CisvLwkJCXJ1LnJ1X21hamZsdCAgPSBQUChw
cCxydSkucnVfbWFqZmx0OworLy8JCQlydS5ydV9udmNzdyAgID0gUFAocHAscnUpLnJ1X252Y3N3
OworLy8JCQlydS5ydV9uaXZjc3cgICA9IFBQKHBwLHJ1KS5ydV9uaXZjc3c7CisJCX0KKwkJcF90
b3QgPSAobG9uZykgKHJ1cC0+cnVfaW5ibG9jayArIHJ1cC0+cnVfb3VibG9jayArIHJ1cC0+cnVf
bWFqZmx0KTsKKwkJc190b3QgPSB0b3RhbF9pbmJsb2NrICsgdG90YWxfb3VibG9jayArIHRvdGFs
X21hamZsdDsKKwkJc25wcmludGYoZm10LCBzaXplb2YoZm10KSwKKwkJCWlvX1Byb2NfZm9ybWF0
LAorCQkJKGludClQUChwcCxwaWQpLAorCQkJbmFtZWxlbmd0aCwgbmFtZWxlbmd0aCwKKwkJCWdl
dF91c2VyaWQoUFAocHAscnVpZCkpLAorCQkJcnVwLT5ydV9udmNzdywKKwkJCXJ1cC0+cnVfbml2
Y3N3LAorCQkJcnVwLT5ydV9pbmJsb2NrLAorCQkJcnVwLT5ydV9vdWJsb2NrLAorCQkJcnVwLT5y
dV9tYWpmbHQsCisJCQlwX3RvdCwKKwkJCXNfdG90ID09IDAgPyAwLjAgOiAocF90b3QgKiAxMDAu
MCAvIHNfdG90KSwKKwkJCS8vY21kbGVuZ3RoLAorCQkJc2hvd19mdWxsY21kID8gKmNvbW1fZnVs
bCA6IGNvbW0pOworCQkJcmV0dXJuIChmbXQpOworCX0gZWxzZSB7CiAJLyogZm9ybWF0IHRoaXMg
ZW50cnkgKi8KIAlzbnByaW50ZihmbXQsIHNpemVvZihmbXQpLAogCSAgICBzbXBtb2RlID8gc21w
X1Byb2NfZm9ybWF0IDogdXBfUHJvY19mb3JtYXQsCiAJICAgIChpbnQpUFAocHAsIHBpZCksCiAJ
ICAgIG5hbWVsZW5ndGgsIG5hbWVsZW5ndGgsCiAJICAgIGdldF91c2VyaWQoUFAocHAsIHJ1aWQp
KSwKLQkgICAgKGludCkoKHNob3dfdGhyZWFkcyAmJiAoTFAocHAsIHBpZCkgPT0gLTEpKSA/Ci0J
ICAgIExQKHBwLCB0ZHByaW8pIDogTFAocHAsIHByaW8pKSwKIAkgICAgKGludCl4bmljZSwKIAkg
ICAgZm9ybWF0X2soUFJPQ1NJWkUocHApKSwKLQkgICAgZm9ybWF0X2socGFnZXRvayhWUChwcCwg
cnNzaXplKSkpLAorLy8JICAgIGZvcm1hdF9rKHBhZ2V0b2soVlAocHAsIHByc3NpemUpKSksCisJ
ICAgICIgIiAsCiAJICAgIHN0YXR1cywKIAkgICAgKGludCkoc21wbW9kZSA/IExQKHBwLCBjcHVp
ZCkgOiAwKSwKIAkgICAgY3B1dGltZV9mbXQsCkBAIC02MzgsNiArODAxLDcgQEAgZm9ybWF0X25l
eHRfcHJvY2VzcyhjYWRkcl90IHhoYW5kbGUsIGNoYXIgKigqZ2V0X3VzZXJpZCkgKGludCkpCiAK
IAkvKiByZXR1cm4gdGhlIHJlc3VsdCAqLwogCXJldHVybiAoZm10KTsKKwl9CiB9CiAKIC8qIGNv
bXBhcmlzb24gcm91dGluZXMgZm9yIHFzb3J0ICovCkBAIC04ODIsNiArMTA0NiwyMSBAQCBjb21w
YXJlX3RocihzdHJ1Y3Qga2luZm9fcHJvYyAqKnBwMSwgc3RydWN0IGtpbmZvX3Byb2MgKipwcDIp
CiAJcmV0dXJuIChyZXN1bHQpOwogfQogCitpbnQgY29tcGFyZV9waWQxIChzdHJ1Y3Qga2luZm9f
cHJvYyAqcHAxLCBzdHJ1Y3Qga2luZm9fcHJvYyAqcHAyKSB7CisJc3RydWN0IGtpbmZvX3Byb2Mg
KnAxID0gcHAxOworCXN0cnVjdCBraW5mb19wcm9jICpwMiA9IHBwMjsKKwlpbnQgcmVzdWx0Owor
CisvLwlpZigocDIpLT5rcF9waWQgPCAwIHx8IChwMSktPmtwX3BpZCA8IDApCisvLwkJYWJvcnQo
KTsKKworLy8JcmV0dXJuICgocDEpLT5rcF9waWQgLSAocDIpLT5rcF9waWQpOworCU9SREVSS0VZ
X1BJRAorCTsKKworCXJldHVybihyZXN1bHQpOworCit9CiAvKiBjb21wYXJlX3BpZCAtIHRoZSBj
b21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIGJ5IHByb2Nlc3MgaWQgKi8KIAogaW50CkBA
IC05MDEsNiArMTA4MCwxOSBAQCBjb21wYXJlX3BpZChzdHJ1Y3Qga2luZm9fcHJvYyAqKnBwMSwg
c3RydWN0IGtpbmZvX3Byb2MgKipwcDIpCiAJcmV0dXJuKHJlc3VsdCk7CiB9CiAKK2ludAorY29t
cGFyZV9pb3JlYWQoc3RydWN0IGtpbmZvX3Byb2MgKipwcDEsIHN0cnVjdCBraW5mb19wcm9jICoq
cHAyKQoreworCXN0cnVjdCBraW5mb19wcm9jICpwMTsKKwlzdHJ1Y3Qga2luZm9fcHJvYyAqcDI7
CisJbG9uZyBpbnAxLCBpbnAyLCBkdW1teTsKKworCSh2b2lkKSBnZXRfaW9fc3RhdHMocDEsICZp
bnAxLCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZHVtbXkpOworCSh2b2lkKSBnZXRfaW9fc3Rh
dHMocDIsICZpbnAyLCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZHVtbXkpOworCisJcmV0dXJu
KGlucDItaW5wMSk7Cit9CisKIC8qCiAgKiBwcm9jX293bmVyKHBpZCkgLSByZXR1cm5zIHRoZSB1
aWQgdGhhdCBvd25zIHByb2Nlc3MgInBpZCIsIG9yIC0xIGlmCiAgKgkJdGhlIHByb2Nlc3MgZG9l
cyBub3QgZXhpc3QuCg==
--20cf305e2505c5092a04af451d02--