From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sat, 07 Sep 2002 22:08:30 -0700 From: "Martin J. Bligh" Subject: Cleanup of free_area_init code Message-ID: <185352292.1031436510@[10.10.2.3]> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==========185362416==========" Sender: owner-linux-mm@kvack.org Return-Path: To: Andrew Morton Cc: linux-mm mailing list List-ID: --==========185362416========== Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline This patch cleans up free_area_init stuff, and undefines mem_map and max_mapnr for discontigmem, where they were horrible kludges anyway ... we just use the lmem_maps instead, which makes much more sense. It also kills pgdat->node_start_mapnr, which is tarred with the same brush. It breaks free_area_init_core into a couple of sections, pulls the allocation of the lmem_map back into the next higher function, and passes more things via the pgdat. But that's not very interesting, the objective was to kill mem_map for discontigmem, which seems to attract bugs like flypaper. This brings any misuses to obvious compile-time errors rather than wierd oopses, which I can't help but feel is a good thing. It does break other discontigmem architectures, but in a very obvious way (they won't compile) and it's easy to fix. I think that's a small price to pay ... ;-) At some point soon I will follow up with a patch to remove free_area_init_node for the contig mem case, or at the very least rename it to something more sensible, like __free_area_init. Christoph has grander plans to kill mem_map more extensively in addition to the attatched, but I've heard nobody disagree that it should die for the discontigmem case at least. Oh, and I renamed mem_map in drivers/pcmcia/sa1100 to pc_mem_map because my tiny little brain (and cscope) find it confusing like that. Tested on 16-way NUMA-Q with discontigmem + NUMA support and on a standard PC (well, boots and appears functional). On top of 2.5.33-mm4 M. --==========185362416========== Content-Type: application/octet-stream; name=32-free_area_init Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=32-free_area_init; size=26552 ZGlmZiAtdXJOIC1YIC9ob21lL21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2FyY2gv YWxwaGEvbW0vbnVtYS5jIDMyLWZyZWVfYXJlYV9pbml0L2FyY2gvYWxwaGEvbW0vbnVtYS5jCi0t LSAwLW51bWFmaXhlcy9hcmNoL2FscGhhL21tL251bWEuYwlGcmkgU2VwICA2IDIyOjQwOjQ2IDIw MDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2FyY2gvYWxwaGEvbW0vbnVtYS5jCUZyaSBTZXAgIDYg MjM6MDM6MTkgMjAwMgpAQCAtMjg2LDcgKzI4Niw2IEBACiAJZm9yIChuaWQgPSAwOyBuaWQgPCBu dW1ub2RlczsgbmlkKyspIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBwbGF0X25vZGVf YmRhdGFbbmlkXS5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9TSElGVDsKIAkJdW5zaWduZWQgbG9u ZyBlbmRfcGZuID0gcGxhdF9ub2RlX2JkYXRhW25pZF0ubm9kZV9sb3dfcGZuOwotCQl1bnNpZ25l ZCBsb25nIGxtYXhfbWFwbnI7CiAKIAkJaWYgKGRtYV9sb2NhbF9wZm4gPj0gZW5kX3BmbiAtIHN0 YXJ0X3BmbikKIAkJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsK QEAgLTI5NSwxMSArMjk0LDYgQEAKIAkJCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gKGVuZF9w Zm4gLSBzdGFydF9wZm4pIC0gZG1hX2xvY2FsX3BmbjsKIAkJfQogCQlmcmVlX2FyZWFfaW5pdF9u b2RlKG5pZCwgTk9ERV9EQVRBKG5pZCksIE5VTEwsIHpvbmVzX3NpemUsIHN0YXJ0X3BmbiwgTlVM TCk7Ci0JCWxtYXhfbWFwbnIgPSBQTEFUX05PREVfREFUQV9TVEFSVE5SKG5pZCkgKyBQTEFUX05P REVfREFUQV9TSVpFKG5pZCk7Ci0JCWlmIChsbWF4X21hcG5yID4gbWF4X21hcG5yKSB7Ci0JCQlt YXhfbWFwbnIgPSBsbWF4X21hcG5yOwotCQkJREJHRENPTlQoIkdyb3cgbWF4X21hcG5yIHRvICVs ZFxuIiwgbWF4X21hcG5yKTsKLQkJfQogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGtlcm5lbCdz IFpFUk9fUEdFLiAqLwpkaWZmIC11ck4gLVggL2hvbWUvbWJsaWdoLy5kaWZmLmV4Y2x1ZGUgMC1u dW1hZml4ZXMvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMgMzItZnJlZV9hcmVhX2luaXQvYXJj aC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKLS0tIDAtbnVtYWZpeGVzL2FyY2gvaTM4Ni9rZXJuZWwv Y3B1L2FtZC5jCVNhdCBBdWcgMzEgMTU6MDU6MzQgMjAwMgorKysgMzItZnJlZV9hcmVhX2luaXQv YXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC0y NSw3ICsyNSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9hbWQoc3RydWN0IGNwdWluZm9f eDg2ICpjKQogewogCXUzMiBsLCBoOwotCWludCBtYnl0ZXMgPSBtYXhfbWFwbnIgPj4gKDIwLVBB R0VfU0hJRlQpOworCWludCBtYnl0ZXMgPSBudW1fcGh5c3BhZ2VzID4+ICgyMC1QQUdFX1NISUZU KTsKIAlpbnQgcjsKIAogCS8qCmRpZmYgLXVyTiAtWCAvaG9tZS9tYmxpZ2gvLmRpZmYuZXhjbHVk ZSAwLW51bWFmaXhlcy9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYyAzMi1mcmVlX2FyZWFf aW5pdC9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwotLS0gMC1udW1hZml4ZXMvYXJjaC9p Mzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMJU2F0IEF1ZyAzMSAxNTowNTowMyAyMDAyCisrKyAzMi1m cmVlX2FyZWFfaW5pdC9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwlGcmkgU2VwICA2IDIz OjEzOjMyIDIwMDIKQEAgLTU4LDcgKzU4LDExIEBACiBFWFBPUlRfU1lNQk9MKEVJU0FfYnVzKTsK ICNlbmRpZgogRVhQT1JUX1NZTUJPTChNQ0FfYnVzKTsKLSNpZmRlZiBDT05GSUdfTVVMVElRVUFE CisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwor RVhQT1JUX1NZTUJPTChwZm5fdG9fbmlkKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTlVN QVEKIEVYUE9SVF9TWU1CT0woeHF1YWRfcG9ydGlvKTsKICNlbmRpZgogRVhQT1JUX1NZTUJPTChf X3ZlcmlmeV93cml0ZSk7CmRpZmYgLXVyTiAtWCAvaG9tZS9tYmxpZ2gvLmRpZmYuZXhjbHVkZSAw LW51bWFmaXhlcy9hcmNoL2kzODYva2VybmVsL251bWFxLmMgMzItZnJlZV9hcmVhX2luaXQvYXJj aC9pMzg2L2tlcm5lbC9udW1hcS5jCi0tLSAwLW51bWFmaXhlcy9hcmNoL2kzODYva2VybmVsL251 bWFxLmMJRnJpIFNlcCAgNiAyMjo0MDo0NyAyMDAyCisrKyAzMi1mcmVlX2FyZWFfaW5pdC9hcmNo L2kzODYva2VybmVsL251bWFxLmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC04MiwyNyAr ODIsMTkgQEAKICAqLwogaW50IHBoeXNub2RlX21hcFtNQVhfRUxFTUVOVFNdID0geyBbMCAuLi4g KE1BWF9FTEVNRU5UUyAtIDEpXSA9IC0xfTsKIAotI2RlZmluZSBNQl9UT19FTEVNRU5UKHgpICh4 ID4+IEVMRU1FTlRfUkVQUkVTRU5UUykKLSNkZWZpbmUgUEFfVE9fTUIocGEpIChwYSA+PiAyMCkg CS8qIGFzc3VtcHRpb246IGEgcGh5c2ljYWwgYWRkcmVzcyBpcyBpbiBieXRlcyAqLworI2RlZmlu ZSBQRk5fVE9fRUxFTUVOVChwZm4pIChwZm4gLyBQQUdFU19QRVJfRUxFTUVOVCkKKyNkZWZpbmUg UEFfVE9fRUxFTUVOVChwYSkgKFBGTl9UT19FTEVNRU5UKHBhID4+IFBBR0VfU0hJRlQpKQogCi1p bnQgcGFfdG9fbmlkKHU2NCBwYSkKK2ludCBwZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQog ewotCWludCBuaWQ7Ci0JCi0JbmlkID0gcGh5c25vZGVfbWFwW01CX1RPX0VMRU1FTlQoUEFfVE9f TUIocGEpKV07CisJaW50IG5pZCA9IHBoeXNub2RlX21hcFtQRk5fVE9fRUxFTUVOVChwZm4pXTsK IAotCS8qIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHBhc3NlZCBpbiBpcyBub3QgaW4gdGhlIG1hcCBm b3IgdGhlIHN5c3RlbSAqLwogCWlmIChuaWQgPT0gLTEpCi0JCUJVRygpOworCQlCVUcoKTsgLyog YWRkcmVzcyBpcyBub3QgcHJlc2VudCAqLwogCiAJcmV0dXJuIG5pZDsKIH0KIAotaW50IHBmbl90 b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JcmV0dXJuIHBhX3RvX25pZCgoKHU2NClwZm4p IDw8IFBBR0VfU0hJRlQpOwotfQotCiAvKgogICogZm9yIGVhY2ggbm9kZSBtYXJrIHRoZSByZWdp b25zCiAgKiAgICAgICAgVE9QT0ZNRU0gPSBoaV9zaHJkX21lbV9zdGFydCArIGhpX3NocmRfbWVt X3NpemUKQEAgLTEzMiw3ICsxMjQsNyBAQAogCQkJdG9wb2ZtZW0gPSBlcS0+aGlfc2hyZF9tZW1f c3RhcnQgKyBlcS0+aGlfc2hyZF9tZW1fc2l6ZTsKIAkJCXdoaWxlIChjdXIgPCB0b3BvZm1lbSkg ewogCQkJCXBoeXNub2RlX21hcFtjdXIgPj4gOF0gPSBuaWQ7Ci0JCQkJY3VyICs9IChFTEVNRU5U X1JFUFJFU0VOVFMgLSAxKTsKKwkJCQljdXIgKys7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLXVyTiAt WCAvaG9tZS9tYmxpZ2gvLmRpZmYuZXhjbHVkZSAwLW51bWFmaXhlcy9hcmNoL2kzODYvbW0vZGlz Y29udGlnLmMgMzItZnJlZV9hcmVhX2luaXQvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCi0tLSAw LW51bWFmaXhlcy9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMJRnJpIFNlcCAgNiAyMjo0MDo0NyAy MDAyCisrKyAzMi1mcmVlX2FyZWFfaW5pdC9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMJRnJpIFNl cCAgNiAyMzowMzoxOSAyMDAyCkBAIC0yNzUsMjAgKzI3NSw5IEBACiB2b2lkIF9faW5pdCBzZXRf bWF4X21hcG5yX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCXVuc2lnbmVk IGxvbmcgbG1heF9tYXBucjsKLQlpbnQgbmlkOwotCQotCWhpZ2htZW1fc3RhcnRfcGFnZSA9IG1l bV9tYXAgKyBOT0RFX0RBVEEoMCktPm5vZGVfem9uZXNbWk9ORV9ISUdITUVNXS56b25lX3N0YXJ0 X21hcG5yOworCWhpZ2htZW1fc3RhcnRfcGFnZSA9IE5PREVfREFUQSgwKS0+bm9kZV96b25lc1ta T05FX0hJR0hNRU1dLnpvbmVfbWVtX21hcDsKIAludW1fcGh5c3BhZ2VzID0gaGlnaGVuZF9wZm47 Ci0KLQlmb3IgKG5pZCA9IDA7IG5pZCA8IG51bW5vZGVzOyBuaWQrKykgewotCQlsbWF4X21hcG5y ID0gbm9kZV9zdGFydG5yKG5pZCkgKyBub2RlX3NpemUobmlkKTsKLQkJaWYgKGxtYXhfbWFwbnIg PiBtYXhfbWFwbnIpIHsKLQkJCW1heF9tYXBuciA9IGxtYXhfbWFwbnI7Ci0JCX0KLQl9Ci0JCiAj ZWxzZQotCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXMgPSBtYXhfbG93X3BmbjsKKwludW1fcGh5 c3BhZ2VzID0gbWF4X2xvd19wZm47CiAjZW5kaWYKIH0KZGlmZiAtdXJOIC1YIC9ob21lL21ibGln aC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2FyY2gvaTM4Ni9tbS9pbml0LmMgMzItZnJlZV9h cmVhX2luaXQvYXJjaC9pMzg2L21tL2luaXQuYwotLS0gMC1udW1hZml4ZXMvYXJjaC9pMzg2L21t L2luaXQuYwlGcmkgU2VwICA2IDIyOjQwOjQ3IDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2Fy Y2gvaTM4Ni9tbS9pbml0LmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC00NDAsOCArNDQw LDEwIEBACiAJaW50IHRtcDsKIAlpbnQgYmFkX3Bwcm87CiAKKyNpZm5kZWYgQ09ORklHX0RJU0NP TlRJR01FTQogCWlmICghbWVtX21hcCkKIAkJQlVHKCk7CisjZW5kaWYKIAkKIAliYWRfcHBybyA9 IHBwcm9fd2l0aF9yYW1fYnVnKCk7CiAKQEAgLTQ3MSw3ICs0NzMsNyBAQAogCiAJcHJpbnRrKCJN ZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVk LCAlZGsgZGF0YSwgJWRrIGluaXQsICVsZGsgaGlnaG1lbSlcbiIsCiAJCSh1bnNpZ25lZCBsb25n KSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAotCQltYXhfbWFwbnIgPDwgKFBB R0VfU0hJRlQtMTApLAorCQludW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJY29k ZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCQlkYXRh c2l6ZSA+PiAxMCwKZGlmZiAtdXJOIC1YIC9ob21lL21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVt YWZpeGVzL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMgMzItZnJlZV9hcmVhX2luaXQvYXJjaC9pMzg2 L21tL3BndGFibGUuYwotLS0gMC1udW1hZml4ZXMvYXJjaC9pMzg2L21tL3BndGFibGUuYwlGcmkg U2VwICA2IDIyOjQwOjQ3IDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2FyY2gvaTM4Ni9tbS9w Z3RhYmxlLmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC0yMiwyNiArMjIsMjkgQEAKIAog dm9pZCBzaG93X21lbSh2b2lkKQogewotCWludCBwZm4sIHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAw OworCWludCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMDsKIAlpbnQgc2hhcmVkID0gMCwgY2FjaGVk ID0gMDsKIAlpbnQgaGlnaG1lbSA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdfZGF0YV90 ICpwZ2RhdDsKKwl1bnNpZ25lZCBsb25nIGk7CiAKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CiAJ c2hvd19mcmVlX2FyZWFzKCk7CiAJcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2ZGtCXG4iLG5y X3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7Ci0JcGZuID0gbWF4X21hcG5yOwotCXdoaWxl IChwZm4tLSA+IDApIHsKLQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCXRvdGFsKys7Ci0J CWlmIChQYWdlSGlnaE1lbShwYWdlKSkKLQkJCWhpZ2htZW0rKzsKLQkJaWYgKFBhZ2VSZXNlcnZl ZChwYWdlKSkKLQkJCXJlc2VydmVkKys7Ci0JCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkp Ci0JCQljYWNoZWQrKzsKLQkJZWxzZSBpZiAocGFnZV9jb3VudChwYWdlKSkKLQkJCXNoYXJlZCAr PSBwYWdlX2NvdW50KHBhZ2UpIC0gMTsKKwlmb3JfZWFjaF9wZ2RhdChwZ2RhdCkgeworCQlmb3Ig KGkgPSAwOyBpIDwgcGdkYXQtPm5vZGVfc2l6ZTsgKytpKSB7CisJCQlwYWdlID0gcGdkYXQtPm5v ZGVfbWVtX21hcCArIGk7CisJCQl0b3RhbCsrOworCQkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQor CQkJCWhpZ2htZW0rKzsKKwkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJcmVzZXJ2ZWQr KzsKKwkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCQkJY2FjaGVkKys7CisJCQll bHNlIGlmIChwYWdlX2NvdW50KHBhZ2UpKQorCQkJCXNoYXJlZCArPSBwYWdlX2NvdW50KHBhZ2Up IC0gMTsKKwkJfQogCX0KIAlwcmludGsoIiVkIHBhZ2VzIG9mIFJBTVxuIiwgdG90YWwpOwogCXBy aW50aygiJWQgcGFnZXMgb2YgSElHSE1FTVxuIixoaWdobWVtKTsKZGlmZiAtdXJOIC1YIC9ob21l L21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2FyY2gvbWlwczY0L3NnaS1pcDI3L2lw MjctbWVtb3J5LmMgMzItZnJlZV9hcmVhX2luaXQvYXJjaC9taXBzNjQvc2dpLWlwMjcvaXAyNy1t ZW1vcnkuYwotLS0gMC1udW1hZml4ZXMvYXJjaC9taXBzNjQvc2dpLWlwMjcvaXAyNy1tZW1vcnku YwlGcmkgU2VwICA2IDIyOjQwOjQ3IDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2FyY2gvbWlw czY0L3NnaS1pcDI3L2lwMjctbWVtb3J5LmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC0y NTQsMTAgKzI1NCw2IEBACiAJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbiArIDEgLSBz dGFydF9wZm47CiAJCWZyZWVfYXJlYV9pbml0X25vZGUobm9kZSwgTk9ERV9EQVRBKG5vZGUpLCAw LCB6b25lc19zaXplLCAKIAkJCQkJCXN0YXJ0X3BmbiwgMCk7Ci0JCWlmICgoUExBVF9OT0RFX0RB VEFfU1RBUlROUihub2RlKSArIAotCQkJCQlQTEFUX05PREVfREFUQV9TSVpFKG5vZGUpKSA+IHBh Z2VucikKLQkJCXBhZ2VuciA9IFBMQVRfTk9ERV9EQVRBX1NUQVJUTlIobm9kZSkgKwotCQkJCQlQ TEFUX05PREVfREFUQV9TSVpFKG5vZGUpOwogCX0KIH0KIApAQCAtMjcxLDcgKzI2Nyw2IEBACiAJ dW5zaWduZWQgbG9uZyBjb2Rlc2l6ZSwgZGF0YXNpemUsIGluaXRzaXplOwogCWludCBzbG90LCBu dW1zbG90czsKIAlzdHJ1Y3QgcGFnZSAqcGcsICpwc2xvdDsKLQlwZm5fdCBwZ25yOwogCiAJbnVt X3BoeXNwYWdlcyA9IG51bXBhZ2VzOwkvKiBtZW1vcnkgYWxyZWFkeSBzaXplZCBieSBzem1lbSAq LwogCW1heF9tYXBuciA9IHBhZ2VucjsJCS8qIGFscmVhZHkgZm91bmQgZHVyaW5nIHBhZ2luZ19p bml0ICovCkBAIC0yOTMsNyArMjg4LDYgQEAKIAkJICogV2UgbmVlZCB0byBtYW51YWxseSBkbyB0 aGUgb3RoZXIgc2xvdHMuCiAJCSAqLwogCQlwZyA9IE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9t YXAgKyBzbG90X2dldHNpemUobmlkLCAwKTsKLQkJcGduciA9IFBMQVRfTk9ERV9EQVRBX1NUQVJU TlIobmlkKSArIHNsb3RfZ2V0c2l6ZShuaWQsIDApOwogCQludW1zbG90cyA9IG5vZGVfZ2V0bGFz dHNsb3QobmlkKTsKIAkJZm9yIChzbG90ID0gMTsgc2xvdCA8PSBudW1zbG90czsgc2xvdCsrKSB7 CiAJCQlwc2xvdCA9IE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXAgKyAKQEAgLTMwNCw3ICsy OTgsNyBAQAogCQkJICogZnJlZSB1cCB0aGUgcGFnZXMgdGhhdCBob2xkIHRoZSBtZW1tYXAgZW50 cmllcy4KIAkJCSAqLwogCQkJd2hpbGUgKHBnIDwgcHNsb3QpIHsKLQkJCQlwZysrOyBwZ25yKys7 CisJCQkJcGcrKzsKIAkJCX0KIAogCQkJLyoKQEAgLTMxMiw4ICszMDYsOCBAQAogCQkJICovCiAJ CQlwc2xvdCArPSBzbG90X2dldHNpemUobmlkLCBzbG90KTsKIAkJCXdoaWxlIChwZyA8IHBzbG90 KSB7Ci0JCQkJaWYgKCFwYWdlX2lzX3JhbShwZ25yKSkKLQkJCQkJY29udGludWU7CisJCQkJLyog aWYgKCFwYWdlX2lzX3JhbShwZ25yKSkgY29udGludWU7ICovCisJCQkJLyogY29tbWVudGVkIG91 dCB1bnRpbCBwYWdlX2lzX3JhbSB3b3JrcyAqLwogCQkJCUNsZWFyUGFnZVJlc2VydmVkKHBnKTsK IAkJCQlhdG9taWNfc2V0KCZwZy0+Y291bnQsIDEpOwogCQkJCV9fZnJlZV9wYWdlKHBnKTsKZGlm ZiAtdXJOIC1YIC9ob21lL21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2RyaXZlcnMv cGNtY2lhL3NhMTEwMC5oIDMyLWZyZWVfYXJlYV9pbml0L2RyaXZlcnMvcGNtY2lhL3NhMTEwMC5o Ci0tLSAwLW51bWFmaXhlcy9kcml2ZXJzL3BjbWNpYS9zYTExMDAuaAlTYXQgQXVnIDMxIDE1OjA1 OjI3IDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2RyaXZlcnMvcGNtY2lhL3NhMTEwMC5oCUZy aSBTZXAgIDYgMjM6MDM6MTkgMjAwMgpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAqLwogICBzb2Nr ZXRfc3RhdGVfdCAgICAgICAgY3Nfc3RhdGU7CiAgIHBjY2FyZF9pb19tYXAgICAgICAgICBpb19t YXBbTUFYX0lPX1dJTl07Ci0gIHBjY2FyZF9tZW1fbWFwICAgICAgICBtZW1fbWFwW01BWF9XSU5d OworICBwY2NhcmRfbWVtX21hcCAgICAgICAgcGNfbWVtX21hcFtNQVhfV0lOXTsKICAgdm9pZCAg ICAgICAgICAgICAgICAgICgqaGFuZGxlcikodm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogICB2b2lk ICAgICAgICAgICAgICAgICAgKmhhbmRsZXJfaW5mbzsKIApkaWZmIC11ck4gLVggL2hvbWUvbWJs aWdoLy5kaWZmLmV4Y2x1ZGUgMC1udW1hZml4ZXMvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVy aWMuYyAzMi1mcmVlX2FyZWFfaW5pdC9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCi0t LSAwLW51bWFmaXhlcy9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCVNhdCBBdWcgMzEg MTU6MDU6MjggMjAwMgorKysgMzItZnJlZV9hcmVhX2luaXQvZHJpdmVycy9wY21jaWEvc2ExMTAw X2dlbmVyaWMuYwlGcmkgU2VwICA2IDIzOjAzOjE5IDIwMDIKQEAgLTY4Niw3ICs2ODYsNyBAQAog ICBERUJVRygyLCAiJXMoKSBmb3Igc29jayAldVxuIiwgX19GVU5DVElPTl9fLCBzb2NrKTsKIAog ICBpZiAobWFwLT5tYXAgPCBNQVhfV0lOKSB7Ci0gICAgKm1hcCA9IHNrdC0+bWVtX21hcFttYXAt Pm1hcF07CisgICAgKm1hcCA9IHNrdC0+cGNfbWVtX21hcFttYXAtPm1hcF07CiAgICAgcmV0ID0g MDsKICAgfQogCkBAIC03NTQsNyArNzU0LDcgQEAKICAgbWFwLT5zeXNfc3RvcCArPSBzdGFydDsK ICAgbWFwLT5zeXNfc3RhcnQgPSBzdGFydDsKIAotICBza3QtPm1lbV9tYXBbbWFwLT5tYXBdID0g Km1hcDsKKyAgc2t0LT5wY19tZW1fbWFwW21hcC0+bWFwXSA9ICptYXA7CiAKICAgcmV0dXJuIDA7 CiB9ICAvKiBzYTExMDBfcGNtY2lhX3NldF9tZW1fbWFwKCkgKi8KZGlmZiAtdXJOIC1YIC9ob21l L21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2luY2x1ZGUvYXNtLWFscGhhL21tem9u ZS5oIDMyLWZyZWVfYXJlYV9pbml0L2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCi0tLSAwLW51 bWFmaXhlcy9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaAlGcmkgU2VwICA2IDIyOjQwOjUwIDIw MDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCUZyaSBT ZXAgIDYgMjM6MDM6MTkgMjAwMgpAQCAtNDYsOCArNDYsNiBAQAogCiAjZGVmaW5lIFBIWVNBRERS X1RPX05JRChwYSkJCUFMUEhBX1BBX1RPX05JRChwYSkKICNkZWZpbmUgUExBVF9OT0RFX0RBVEEo bikJCShwbGF0X25vZGVfZGF0YVsobildKQotI2RlZmluZSBQTEFUX05PREVfREFUQV9TVEFSVE5S KG4pCVwKLQkoUExBVF9OT0RFX0RBVEEobiktPmdlbmRhdGEubm9kZV9zdGFydF9tYXBucikKICNk ZWZpbmUgUExBVF9OT0RFX0RBVEFfU0laRShuKQkJKFBMQVRfTk9ERV9EQVRBKG4pLT5nZW5kYXRh Lm5vZGVfc2l6ZSkKIAogI2lmIDEKZGlmZiAtdXJOIC1YIC9ob21lL21ibGlnaC8uZGlmZi5leGNs dWRlIDAtbnVtYWZpeGVzL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggMzItZnJlZV9hcmVhX2lu aXQvaW5jbHVkZS9hc20taTM4Ni9tbXpvbmUuaAotLS0gMC1udW1hZml4ZXMvaW5jbHVkZS9hc20t aTM4Ni9tbXpvbmUuaAlGcmkgU2VwICA2IDIyOjQwOjUxIDIwMDIKKysrIDMyLWZyZWVfYXJlYV9p bml0L2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmgJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBA IC0xMSw3ICsxMSw2IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQogI2luY2x1ZGUgPGFzbS9u dW1hcS5oPgogI2Vsc2UKLSNkZWZpbmUgcGFfdG9fbmlkKHBhKQkoMCkKICNkZWZpbmUgcGZuX3Rv X25pZChwZm4pCQkoMCkKICNpZmRlZiBDT05GSUdfTlVNQQogI2RlZmluZSBfY3B1X3RvX25vZGUo Y3B1KSAwCkBAIC00NCw3ICs0Myw2IEBACiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2Vz X25vZGUoaWdub3JlLCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAo eCksIFBBR0VfU0laRSwgMCkKIAotI2RlZmluZSBub2RlX3N0YXJ0bnIobmlkKQkobm9kZV9kYXRh W25pZF0tPm5vZGVfc3RhcnRfbWFwbnIpCiAjZGVmaW5lIG5vZGVfc2l6ZShuaWQpCQkobm9kZV9k YXRhW25pZF0tPm5vZGVfc2l6ZSkKICNkZWZpbmUgbm9kZV9sb2NhbG5yKHBmbiwgbmlkKQkoKHBm bikgLSBub2RlX2RhdGFbbmlkXS0+bm9kZV9zdGFydF9wZm4pCiAKQEAgLTU1LDcgKzUzLDcgQEAK IC8qCiAgKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhl IHVuZGVybHlpbmcgbWVtb3J5LgogICovCi0jZGVmaW5lIGt2YWRkcl90b19uaWQoa2FkZHIpCXBh X3RvX25pZChfX3BhKGthZGRyKSkKKyNkZWZpbmUga3ZhZGRyX3RvX25pZChrYWRkcikJcGZuX3Rv X25pZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCiAvKgogICogUmV0dXJuIGEgcG9pbnRl ciB0byB0aGUgbm9kZSBkYXRhIGZvciBub2RlIG4uCkBAIC02NCw2ICs2Miw4IEBACiAKICNkZWZp bmUgbm9kZV9tZW1fbWFwKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXApCiAjZGVm aW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikK KyNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkgICAgICAgKE5PREVfREFUQShuaWQpLT5ub2RlX3N0 YXJ0X3BmbiArIFwKKwkJCQkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc2l6ZSkKIAogI2RlZmluZSBs b2NhbF9tYXBucihrdmFkZHIpIFwKIAkoIChfX3BhKGt2YWRkcikgPj4gUEFHRV9TSElGVCkgLSBu b2RlX3N0YXJ0X3BmbihrdmFkZHJfdG9fbmlkKGt2YWRkcikpICkKQEAgLTc0LDUgKzc0LDEzIEBA CiAjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG5vZGVfbWVtX21hcChwZm5fdG9fbmlkKHBmbikp ICsgbm9kZV9sb2NhbG5yKHBmbiwgcGZuX3RvX25pZChwZm4pKSkKICNkZWZpbmUgcGFnZV90b19w Zm4ocGFnZSkJKChwYWdlIC0gcGFnZV96b25lKHBhZ2UpLT56b25lX21lbV9tYXApICsgcGFnZV96 b25lKHBhZ2UpLT56b25lX3N0YXJ0X3BmbikKICNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKHBmbl90 b19wYWdlKHBtZF92YWwocG1kKSA+PiBQQUdFX1NISUZUKSkKKy8qCisgKiBwZm5fdmFsaWQgc2hv dWxkIGJlIG1hZGUgYXMgZmFzdCBhcyBwb3NzaWJsZSwgYW5kIHRoZSBjdXJyZW50IGRlZmluaXRp b24gCisgKiBpcyB2YWxpZCBmb3IgbWFjaGluZXMgdGhhdCBhcmUgTlVNQSwgYnV0IHN0aWxsIGNv bnRpZ3VvdXMsIHdoaWNoIGlzIHdoYXQKKyAqIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuIEEgbW9y ZSBnZW5lcmFsaXNlZCwgYnV0IHNsb3dlciBkZWZpbml0aW9uIHdvdWxkCisgKiBiZSBzb21ldGhp bmcgbGlrZSB0aGlzIC0gbWJsaWdoOgorICogKCBwZm5fdG9fcGdkYXQocGZuKSAmJiAocGZuIDwg bm9kZV9lbmRfcGZuKHBmbl90b19uaWQocGZuKSkpICkgCisgKi8gCisjZGVmaW5lIHBmbl92YWxp ZChwZm4pICAgICAgICAgIChwZm4gPCBudW1fcGh5c3BhZ2VzKQogI2VuZGlmIC8qIENPTkZJR19E SVNDT05USUdNRU0gKi8KICNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC11ck4gLVgg L2hvbWUvbWJsaWdoLy5kaWZmLmV4Y2x1ZGUgMC1udW1hZml4ZXMvaW5jbHVkZS9hc20taTM4Ni9u dW1hcS5oIDMyLWZyZWVfYXJlYV9pbml0L2luY2x1ZGUvYXNtLWkzODYvbnVtYXEuaAotLS0gMC1u dW1hZml4ZXMvaW5jbHVkZS9hc20taTM4Ni9udW1hcS5oCUZyaSBTZXAgIDYgMjI6NDA6NTEgMjAw MgorKysgMzItZnJlZV9hcmVhX2luaXQvaW5jbHVkZS9hc20taTM4Ni9udW1hcS5oCUZyaSBTZXAg IDYgMjM6MDM6MTkgMjAwMgpAQCAtMzIsMTcgKzMyLDE4IEBACiAKIC8qCiAgKiBmb3Igbm93IGFz c3VtZSB0aGF0IDY0R2IgaXMgbWF4IGFtb3VudCBvZiBSQU0gZm9yIHdob2xlIHN5c3RlbQotICog ICAgNjRHYiAqIDEwMjRNYi9HYiA9IDY1NTM2IE1iCi0gKiAgICA2NTUzNiBNYiAvIDI1Nk1iID0g MjU2CisgKiAgICA2NEdiIC8gNDA5NmJ5dGVzL3BhZ2UgPSAxNjc3NzIxNiBwYWdlcwogICovCisj ZGVmaW5lIE1BWF9OUl9QQUdFUyAxNjc3NzIxNgogI2RlZmluZSBNQVhfRUxFTUVOVFMgMjU2Ci0j ZGVmaW5lIEVMRU1FTlRfUkVQUkVTRU5UUyA4IC8qIDI1NiBNYiAqLworI2RlZmluZSBQQUdFU19Q RVJfRUxFTUVOVCAoMTY3NzcyMTYvMjU2KQogCisjZGVmaW5lIHBmbl90b19wZ2RhdChwZm4pIE5P REVfREFUQShwZm5fdG9fbmlkKHBmbikpCisjZGVmaW5lIFBIWVNBRERSX1RPX05JRChwYSkgcGZu X3RvX25pZChwYSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBNQVhfTlVNTk9ERVMJCTgKICNpZmRl ZiBDT05GSUdfTlVNQQogI2RlZmluZSBfY3B1X3RvX25vZGUoY3B1KSAoY3B1X3RvX2xvZ2ljYWxf YXBpY2lkKGNwdSkgPj4gNCkKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwotZXh0ZXJuIGludCBw YV90b19uaWQodTY0KTsKIGV4dGVybiBpbnQgcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nKTsKIGV4 dGVybiB2b2lkIGdldF9tZW1jZmdfbnVtYXEodm9pZCk7CiAjZGVmaW5lIGdldF9tZW1jZmdfbnVt YSgpIGdldF9tZW1jZmdfbnVtYXEoKQpkaWZmIC11ck4gLVggL2hvbWUvbWJsaWdoLy5kaWZmLmV4 Y2x1ZGUgMC1udW1hZml4ZXMvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmggMzItZnJlZV9hcmVhX2lu aXQvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmgKLS0tIDAtbnVtYWZpeGVzL2luY2x1ZGUvYXNtLWkz ODYvcGFnZS5oCUZyaSBTZXAgIDYgMjI6NDA6NTEgMjAwMgorKysgMzItZnJlZV9hcmVhX2luaXQv aW5jbHVkZS9hc20taTM4Ni9wYWdlLmgJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC0xNDUs MTAgKzE0NSwxMCBAQAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAjZGVmaW5lIHBmbl90 b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSkKICNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJ KCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBm bikJCSgocGZuKSA8IG1heF9tYXBucikKICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAq LwogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+ IFBBR0VfU0hJRlQpCiAKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBu cikKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikg Pj4gUEFHRV9TSElGVCkKIAogI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQg fCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCmRpZmYgLXVyTiAtWCAvaG9tZS9tYmxpZ2gvLmRpZmYu ZXhjbHVkZSAwLW51bWFmaXhlcy9pbmNsdWRlL2FzbS1taXBzNjQvbW16b25lLmggMzItZnJlZV9h cmVhX2luaXQvaW5jbHVkZS9hc20tbWlwczY0L21tem9uZS5oCi0tLSAwLW51bWFmaXhlcy9pbmNs dWRlL2FzbS1taXBzNjQvbW16b25lLmgJRnJpIFNlcCAgNiAyMjo0MDo1MSAyMDAyCisrKyAzMi1m cmVlX2FyZWFfaW5pdC9pbmNsdWRlL2FzbS1taXBzNjQvbW16b25lLmgJRnJpIFNlcCAgNiAyMzow MzoxOSAyMDAyCkBAIC0yNCw3ICsyNCw2IEBACiAKICNkZWZpbmUgUEhZU0FERFJfVE9fTklEKHBh KQkJTkFTSURfVE9fQ09NUEFDVF9OT0RFSUQoTkFTSURfR0VUKHBhKSkKICNkZWZpbmUgUExBVF9O T0RFX0RBVEEobikJCShwbGF0X25vZGVfZGF0YVtuXSkKLSNkZWZpbmUgUExBVF9OT0RFX0RBVEFf U1RBUlROUihuKSAgICAoUExBVF9OT0RFX0RBVEEobiktPmdlbmRhdGEubm9kZV9zdGFydF9tYXBu cikKICNkZWZpbmUgUExBVF9OT0RFX0RBVEFfU0laRShuKQkgICAgIChQTEFUX05PREVfREFUQShu KS0+Z2VuZGF0YS5ub2RlX3NpemUpCiAjZGVmaW5lIFBMQVRfTk9ERV9EQVRBX0xPQ0FMTlIocCwg bikgXAogCQkoKChwKSA+PiBQQUdFX1NISUZUKSAtIFBMQVRfTk9ERV9EQVRBKG4pLT5nZW5kYXRh Lm5vZGVfc3RhcnRfcGZuKQpkaWZmIC11ck4gLVggL2hvbWUvbWJsaWdoLy5kaWZmLmV4Y2x1ZGUg MC1udW1hZml4ZXMvaW5jbHVkZS9hc20tbWlwczY0L3BndGFibGUuaCAzMi1mcmVlX2FyZWFfaW5p dC9pbmNsdWRlL2FzbS1taXBzNjQvcGd0YWJsZS5oCi0tLSAwLW51bWFmaXhlcy9pbmNsdWRlL2Fz bS1taXBzNjQvcGd0YWJsZS5oCUZyaSBTZXAgIDYgMjI6NDA6NTEgMjAwMgorKysgMzItZnJlZV9h cmVhX2luaXQvaW5jbHVkZS9hc20tbWlwczY0L3BndGFibGUuaAlGcmkgU2VwICA2IDIzOjAzOjE5 IDIwMDIKQEAgLTM3MywxMCArMzczLDEwIEBACiAjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0K ICNkZWZpbmUgcHRlX3BhZ2UoeCkJCShtZW1fbWFwKyh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4 KSA+PiBQQUdFX1NISUZUKSkpCiAjZWxzZQotI2RlZmluZSBtaXBzNjRfcHRlX3BhZ2Vucih4KSBc Ci0JKFBMQVRfTk9ERV9EQVRBX1NUQVJUTlIoUEhZU0FERFJfVE9fTklEKHB0ZV92YWwoeCkpKSAr IFwKLQlQTEFUX05PREVfREFUQV9MT0NBTE5SKHB0ZV92YWwoeCksIFBIWVNBRERSX1RPX05JRChw dGVfdmFsKHgpKSkpCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCQkobWVtX21hcCttaXBzNjRfcHRlX3Bh Z2Vucih4KSkKKworI2RlZmluZSBwdGVfcGFnZSh4KSAoIE5PREVfTUVNX01BUChQSFlTQUREUl9U T19OSUQocHRlX3ZhbCh4KSkpICsKKwlQTEFUX05PREVfREFUQV9MT0NBTE5SKHB0ZV92YWwoeCks IFBIWVNBRERSX1RPX05JRChwdGVfdmFsKHgpKSkgKQorCQkJCSAgCiAjZW5kaWYKIAogLyoKZGlm ZiAtdXJOIC1YIC9ob21lL21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL2luY2x1ZGUv YXNtLXBwYzY0L21tem9uZS5oIDMyLWZyZWVfYXJlYV9pbml0L2luY2x1ZGUvYXNtLXBwYzY0L21t em9uZS5oCi0tLSAwLW51bWFmaXhlcy9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaAlGcmkgU2Vw ICA2IDIyOjQwOjUxIDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L2luY2x1ZGUvYXNtLXBwYzY0 L21tem9uZS5oCUZyaSBTZXAgIDYgMjM6MDM6MTkgMjAwMgpAQCAtMjcsOCArMjcsNiBAQAogCiAj ZGVmaW5lIFBIWVNBRERSX1RPX05JRChwYSkJCSgocGEpID4+IE1FTU9SWV9aT05FX0JJVFMpCiAj ZGVmaW5lIFBMQVRfTk9ERV9EQVRBKG4pCQkoJnBsYXRfbm9kZV9kYXRhWyhuKV0pCi0jZGVmaW5l IFBMQVRfTk9ERV9EQVRBX1NUQVJUTlIobikJXAotCShQTEFUX05PREVfREFUQShuKS0+Z2VuZGF0 YS5ub2RlX3N0YXJ0X21hcG5yKQogI2RlZmluZSBQTEFUX05PREVfREFUQV9TSVpFKG4pCQkoUExB VF9OT0RFX0RBVEEobiktPmdlbmRhdGEubm9kZV9zaXplKQogI2RlZmluZSBQTEFUX05PREVfREFU QV9MT0NBTE5SKHAsIG4pCVwKIAkoKChwKSA+PiBQQUdFX1NISUZUKSAtIFBMQVRfTk9ERV9EQVRB KG4pLT5nZW5kYXRhLm5vZGVfc3RhcnRfcGZuKQpkaWZmIC11ck4gLVggL2hvbWUvbWJsaWdoLy5k aWZmLmV4Y2x1ZGUgMC1udW1hZml4ZXMvaW5jbHVkZS9saW51eC9tbS5oIDMyLWZyZWVfYXJlYV9p bml0L2luY2x1ZGUvbGludXgvbW0uaAotLS0gMC1udW1hZml4ZXMvaW5jbHVkZS9saW51eC9tbS5o CUZyaSBTZXAgIDYgMjI6NDA6NTEgMjAwMgorKysgMzItZnJlZV9hcmVhX2luaXQvaW5jbHVkZS9s aW51eC9tbS5oCUZyaSBTZXAgIDYgMjM6MDM6MTkgMjAwMgpAQCAtMTUsNyArMTUsMTAgQEAKICNp bmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCisjaWZuZGVm IENPTkZJR19ESVNDT05USUdNRU0gICAgICAgICAgLyogRG9uJ3QgdXNlIG1hcG5ycywgZG8gaXQg cHJvcGVybHkgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKKyNlbmRpZgorCiBl eHRlcm4gdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOwogZXh0ZXJuIHZvaWQgKiBoaWdoX21l bW9yeTsKIGV4dGVybiBpbnQgcGFnZV9jbHVzdGVyOwpAQCAtMzM1LDggKzMzOCwxMCBAQAogI2Rl ZmluZSBWTV9GQVVMVF9NSU5PUgkxCiAjZGVmaW5lIFZNX0ZBVUxUX01BSk9SCTIKIAotLyogVGhl IGFycmF5IG9mIHN0cnVjdCBwYWdlcyAqLworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisv KiBUaGUgYXJyYXkgb2Ygc3RydWN0IHBhZ2VzIC0gZm9yIGRpc2NvbnRpZ21lbSB1c2UgcGdkYXQt PmxtZW1fbWFwICovCiBleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXA7CisjZW5kaWYgCiAKIGV4 dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKIApkaWZmIC11ck4gLVggL2hvbWUvbWJs aWdoLy5kaWZmLmV4Y2x1ZGUgMC1udW1hZml4ZXMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCAzMi1m cmVlX2FyZWFfaW5pdC9pbmNsdWRlL2xpbnV4L21tem9uZS5oCi0tLSAwLW51bWFmaXhlcy9pbmNs dWRlL2xpbnV4L21tem9uZS5oCUZyaSBTZXAgIDYgMjI6NDA6NTEgMjAwMgorKysgMzItZnJlZV9h cmVhX2luaXQvaW5jbHVkZS9saW51eC9tbXpvbmUuaAlGcmkgU2VwICA2IDIzOjIxOjUxIDIwMDIK QEAgLTExMiw3ICsxMTIsNiBAQAogCXN0cnVjdCBwYWdlCQkqem9uZV9tZW1fbWFwOwogCS8qIHpv bmVfc3RhcnRfcGZuID09IHpvbmVfc3RhcnRfcGFkZHIgPj4gUEFHRV9TSElGVCAqLwogCXVuc2ln bmVkIGxvbmcJCXpvbmVfc3RhcnRfcGZuOwotCXVuc2lnbmVkIGxvbmcJCXpvbmVfc3RhcnRfbWFw bnI7CiAKIAkvKgogCSAqIHJhcmVseSB1c2VkIGZpZWxkczoKQEAgLTE2Myw3ICsxNjIsNiBAQAog CXVuc2lnbmVkIGxvbmcgKnZhbGlkX2FkZHJfYml0bWFwOwogCXN0cnVjdCBib290bWVtX2RhdGEg KmJkYXRhOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm47Ci0JdW5zaWduZWQgbG9uZyBu b2RlX3N0YXJ0X21hcG5yOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9zaXplOwogCWludCBub2RlX2lk OwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRfbmV4dDsKQEAgLTE4Nyw5ICsxODUsMTAgQEAK ICAqIHByb3RvdHlwZXMgZm9yIHRoZSBkaXNjb250aWcgbWVtb3J5IGNvZGUuCiAgKi8KIHN0cnVj dCBwYWdlOwotdm9pZCBmcmVlX2FyZWFfaW5pdF9jb3JlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdk YXQsIHN0cnVjdCBwYWdlICoqZ21hcCwKLSAgdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5z aWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUsCi0gIHN0cnVjdCBw YWdlICpwbWFwKTsKK2V4dGVybiB2b2lkIGNhbGN1bGF0ZV90b3RhbHBhZ2VzIChwZ19kYXRhX3Qg KnBnZGF0LCB1bnNpZ25lZCBsb25nICp6b25lc19zaXplLAorCQl1bnNpZ25lZCBsb25nICp6aG9s ZXNfc2l6ZSk7CitleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdF9jb3JlKHBnX2RhdGFfdCAqcGdk YXQsIHVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsCisJCXVuc2lnbmVkIGxvbmcgKnpob2xlc19z aXplKTsKIHZvaWQgZ2V0X3pvbmVfY291bnRzKHVuc2lnbmVkIGxvbmcgKmFjdGl2ZSwgdW5zaWdu ZWQgbG9uZyAqaW5hY3RpdmUpOwogCiBleHRlcm4gcGdfZGF0YV90IGNvbnRpZ19wYWdlX2RhdGE7 CmRpZmYgLXVyTiAtWCAvaG9tZS9tYmxpZ2gvLmRpZmYuZXhjbHVkZSAwLW51bWFmaXhlcy9rZXJu ZWwva3N5bXMuYyAzMi1mcmVlX2FyZWFfaW5pdC9rZXJuZWwva3N5bXMuYwotLS0gMC1udW1hZml4 ZXMva2VybmVsL2tzeW1zLmMJRnJpIFNlcCAgNiAyMjo0MDo1MSAyMDAyCisrKyAzMi1mcmVlX2Fy ZWFfaW5pdC9rZXJuZWwva3N5bXMuYwlGcmkgU2VwICA2IDIzOjAzOjE5IDIwMDIKQEAgLTExNCw5 ICsxMTQsMTEgQEAKIEVYUE9SVF9TWU1CT0wodm1hcCk7CiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7 CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2NfdG9fcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKG1lbV9tYXAp OwogRVhQT1JUX1NZTUJPTChyZW1hcF9wYWdlX3JhbmdlKTsKKyNpZm5kZWYgQ09ORklHX0RJU0NP TlRJR01FTQorRVhQT1JUX1NZTUJPTChtZW1fbWFwKTsKIEVYUE9SVF9TWU1CT0wobWF4X21hcG5y KTsKKyNlbmRpZgogRVhQT1JUX1NZTUJPTChoaWdoX21lbW9yeSk7CiBFWFBPUlRfU1lNQk9MKHZt dHJ1bmNhdGUpOwogRVhQT1JUX1NZTUJPTChmaW5kX3ZtYSk7CmRpZmYgLXVyTiAtWCAvaG9tZS9t YmxpZ2gvLmRpZmYuZXhjbHVkZSAwLW51bWFmaXhlcy9rZXJuZWwvc3VzcGVuZC5jIDMyLWZyZWVf YXJlYV9pbml0L2tlcm5lbC9zdXNwZW5kLmMKLS0tIDAtbnVtYWZpeGVzL2tlcm5lbC9zdXNwZW5k LmMJRnJpIFNlcCAgNiAyMjo0MDo1MSAyMDAyCisrKyAzMi1mcmVlX2FyZWFfaW5pdC9rZXJuZWwv c3VzcGVuZC5jCUZyaSBTZXAgIDYgMjM6MDM6MTkgMjAwMgpAQCAtNDcwLDEwICs0NzAsMTIgQEAK IAlpbnQgbnJfY29weV9wYWdlcyA9IDA7CiAJaW50IHBmbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsK LQkKKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCQogCWlmIChtYXhfbWFwbnIgIT0gbnVt X3BoeXNwYWdlcykKIAkJcGFuaWMoIm1hcG5yIGlzIG5vdCBleHBlY3RlZCIpOwotCWZvciAocGZu ID0gMDsgcGZuIDwgbWF4X21hcG5yOyBwZm4rKykgeworI2VuZGlmCisJZm9yIChwZm4gPSAwOyBw Zm4gPCBudW1fcGh5c3BhZ2VzOyBwZm4rKykgewogCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsK IAkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQogCQkJcGFuaWMoIlN3c3VzcCBub3Qgc3VwcG9ydGVk IG9uIGhpZ2htZW0gYm94ZXMuIFNlbmQgMUdCIG9mIFJBTSB0byA8cGF2ZWxAdWN3LmN6PiBhbmQg dHJ5IGFnYWluIDstKS4iKTsKQEAgLTUxMywxOSArNTE1LDIwIEBACiAKIHN0YXRpYyB2b2lkIGZy ZWVfc3VzcGVuZF9wYWdlZGlyKHVuc2lnbmVkIGxvbmcgdGhpc19wYWdlZGlyKQogewotCXN0cnVj dCBwYWdlICpwYWdlID0gbWVtX21hcDsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlp bnQgcGZuOwogCXVuc2lnbmVkIGxvbmcgdGhpc19wYWdlZGlyX2VuZCA9IHRoaXNfcGFnZWRpciAr CiAJCShQQUdFX1NJWkUgPDwgcGFnZWRpcl9vcmRlcik7CiAKLQlmb3IoaT0wOyBpIDwgbnVtX3Bo eXNwYWdlczsgaSsrLCBwYWdlKyspIHsKKwlmb3IocGZuID0gMDsgcGZuIDwgbnVtX3BoeXNwYWdl czsgcGZuKyspIHsKKwkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJCWlmICghVGVzdENsZWFy UGFnZU5vc2F2ZShwYWdlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChBRERSRVNTKGkpID49IHRo aXNfcGFnZWRpciAmJiBBRERSRVNTKGkpIDwgdGhpc19wYWdlZGlyX2VuZCkKKwkJaWYgKEFERFJF U1MocGZuKSA+PSB0aGlzX3BhZ2VkaXIgJiYgQUREUkVTUyhwZm4pIDwgdGhpc19wYWdlZGlyX2Vu ZCkKIAkJCWNvbnRpbnVlOyAvKiBvbGQgcGFnZWRpciBnZXRzIGZyZWVkIGluIG9uZSAqLwogCQkK LQkJZnJlZV9wYWdlKEFERFJFU1MoaSkpOworCQlmcmVlX3BhZ2UoQUREUkVTUyhwZm4pKTsKIAl9 CiAJZnJlZV9wYWdlcyh0aGlzX3BhZ2VkaXIsIHBhZ2VkaXJfb3JkZXIpOwogfQpkaWZmIC11ck4g LVggL2hvbWUvbWJsaWdoLy5kaWZmLmV4Y2x1ZGUgMC1udW1hZml4ZXMvbW0vbWVtb3J5LmMgMzIt ZnJlZV9hcmVhX2luaXQvbW0vbWVtb3J5LmMKLS0tIDAtbnVtYWZpeGVzL21tL21lbW9yeS5jCUZy aSBTZXAgIDYgMjI6NDA6NTIgMjAwMgorKysgMzItZnJlZV9hcmVhX2luaXQvbW0vbWVtb3J5LmMJ RnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC01Myw3ICs1MywxMiBAQAogCiAjaW5jbHVkZSA8 bGludXgvc3dhcG9wcy5oPgogCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KKy8qIHVzZSB0 aGUgcGVyLXBnZGF0IGRhdGEgaW5zdGVhZCBmb3IgZGlzY29udGlnbWVtIC0gbWJsaWdoICovCiB1 bnNpZ25lZCBsb25nIG1heF9tYXBucjsKK3N0cnVjdCBwYWdlICptZW1fbWFwOworI2VuZGlmCisK IHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNwYWdlczsKIHZvaWQgKiBoaWdoX21lbW9yeTsKIHN0cnVj dCBwYWdlICpoaWdobWVtX3N0YXJ0X3BhZ2U7CkBAIC03MSw4ICs3Niw2IEBACiAJfQogCWNvcHlf dXNlcl9oaWdocGFnZSh0bywgZnJvbSwgYWRkcmVzcyk7CiB9Ci0KLXN0cnVjdCBwYWdlICptZW1f bWFwOwogCiAvKgogICogTm90ZTogdGhpcyBkb2Vzbid0IGZyZWUgdGhlIGFjdHVhbCBwYWdlcyB0 aGVtc2VsdmVzLiBUaGF0CmRpZmYgLXVyTiAtWCAvaG9tZS9tYmxpZ2gvLmRpZmYuZXhjbHVkZSAw LW51bWFmaXhlcy9tbS9udW1hLmMgMzItZnJlZV9hcmVhX2luaXQvbW0vbnVtYS5jCi0tLSAwLW51 bWFmaXhlcy9tbS9udW1hLmMJRnJpIFNlcCAgNiAyMjo0MDo1MiAyMDAyCisrKyAzMi1mcmVlX2Fy ZWFfaW5pdC9tbS9udW1hLmMJRnJpIFNlcCAgNiAyMzowMzoxOSAyMDAyCkBAIC0yMiwxMSArMjIs MjEgQEAKICAqIFNob3VsZCBiZSBpbnZva2VkIHdpdGggcGFyYW10ZXJzICgwLCAwLCB1bnNpZ25l ZCBsb25nICpbXSwgc3RhcnRfcGFkZHIpLgogICovCiB2b2lkIF9faW5pdCBmcmVlX2FyZWFfaW5p dF9ub2RlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBwYWdlICpwbWFwLAotCXVu c2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sIAor CXVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm4s IAogCXVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKQogewotCWZyZWVfYXJlYV9pbml0X2NvcmUo MCwgJmNvbnRpZ19wYWdlX2RhdGEsICZtZW1fbWFwLCB6b25lc19zaXplLCAKLQkJCQl6b25lX3N0 YXJ0X3BmbiwgemhvbGVzX3NpemUsIHBtYXApOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWNv bnRpZ19wYWdlX2RhdGEubm9kZV9pZCA9IDA7CisJY29udGlnX3BhZ2VfZGF0YS5ub2RlX3N0YXJ0 X3BmbiA9IG5vZGVfc3RhcnRfcGZuOworCWNhbGN1bGF0ZV90b3RhbHBhZ2VzICgmY29udGlnX3Bh Z2VfZGF0YSwgem9uZXNfc2l6ZSwgemhvbGVzX3NpemUpOworCWlmIChwbWFwID09IChzdHJ1Y3Qg cGFnZSAqKTApIHsKKwkJc2l6ZSA9IChwZ2RhdC0+bm9kZV9zaXplICsgMSkgKiBzaXplb2Yoc3Ry dWN0IHBhZ2UpOworCQlwbWFwID0gKHN0cnVjdCBwYWdlICopIGFsbG9jX2Jvb3RtZW1fbm9kZShw Z2RhdCwgc2l6ZSk7CisJfQorCWNvbnRpZ19wYWdlX2RhdGEubm9kZV9tZW1fbWFwID0gcG1hcDsK KwlmcmVlX2FyZWFfaW5pdF9jb3JlKCZjb250aWdfcGFnZV9kYXRhLCB6b25lc19zaXplLCB6aG9s ZXNfc2l6ZSk7CisJbWVtX21hcCA9IGNvbnRpZ19wYWdlX2RhdGEubm9kZV9tZW1fbWFwOwogfQog CiAjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KQEAgLTQ4LDIyICs1OCwyNiBAQAog ICogTm9kZXMgY2FuIGJlIGluaXRpYWxpemVkIHBhcmFsbGVseSwgaW4gbm8gcGFydGljdWxhciBv cmRlci4KICAqLwogdm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQgbmlkLCBwZ19k YXRhX3QgKnBnZGF0LCBzdHJ1Y3QgcGFnZSAqcG1hcCwKLQl1bnNpZ25lZCBsb25nICp6b25lc19z aXplLCB1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLCAKKwl1bnNpZ25lZCBsb25nICp6b25l c19zaXplLCB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuLCAKIAl1bnNpZ25lZCBsb25nICp6 aG9sZXNfc2l6ZSkKIHsKLQlpbnQgaSwgc2l6ZSA9IDA7Ci0Jc3RydWN0IHBhZ2UgKmRpc2NhcmQ7 Ci0KLQlpZiAobWVtX21hcCA9PSBOVUxMKQotCQltZW1fbWFwID0gKHN0cnVjdCBwYWdlICopUEFH RV9PRkZTRVQ7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JZnJlZV9hcmVhX2lu aXRfY29yZShuaWQsIHBnZGF0LCAmZGlzY2FyZCwgem9uZXNfc2l6ZSwgem9uZV9zdGFydF9wZm4s Ci0JCQkJCXpob2xlc19zaXplLCBwbWFwKTsKIAlwZ2RhdC0+bm9kZV9pZCA9IG5pZDsKKwlwZ2Rh dC0+bm9kZV9zdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbjsKKwljYWxjdWxhdGVfdG90YWxwYWdl cyAocGdkYXQsIHpvbmVzX3NpemUsIHpob2xlc19zaXplKTsKKwlpZiAocG1hcCA9PSAoc3RydWN0 IHBhZ2UgKikwKSB7CisJCXNpemUgPSAocGdkYXQtPm5vZGVfc2l6ZSArIDEpICogc2l6ZW9mKHN0 cnVjdCBwYWdlKTsgCisJCXBtYXAgPSAoc3RydWN0IHBhZ2UgKikgYWxsb2NfYm9vdG1lbV9ub2Rl KHBnZGF0LCBzaXplKTsKKwl9CisJcGdkYXQtPm5vZGVfbWVtX21hcCA9IHBtYXA7CisJZnJlZV9h cmVhX2luaXRfY29yZShwZ2RhdCwgem9uZXNfc2l6ZSwgemhvbGVzX3NpemUpOwogCiAJLyoKIAkg KiBHZXQgc3BhY2UgZm9yIHRoZSB2YWxpZCBiaXRtYXAuCiAJICovCisJc2l6ZSA9IDA7CiAJZm9y IChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQogCQlzaXplICs9IHpvbmVzX3NpemVbaV07 CiAJc2l6ZSA9IExPTkdfQUxJR04oKHNpemUgKyA3KSA+PiAzKTsKZGlmZiAtdXJOIC1YIC9ob21l L21ibGlnaC8uZGlmZi5leGNsdWRlIDAtbnVtYWZpeGVzL21tL3BhZ2VfYWxsb2MuYyAzMi1mcmVl X2FyZWFfaW5pdC9tbS9wYWdlX2FsbG9jLmMKLS0tIDAtbnVtYWZpeGVzL21tL3BhZ2VfYWxsb2Mu YwlGcmkgU2VwICA2IDIyOjQwOjUyIDIwMDIKKysrIDMyLWZyZWVfYXJlYV9pbml0L21tL3BhZ2Vf YWxsb2MuYwlGcmkgU2VwICA2IDIzOjI4OjQxIDIwMDIKQEAgLTcyNCw2ICs3MjQsMjMgQEAKIAl9 IAogfQogCit2b2lkIF9faW5pdCBjYWxjdWxhdGVfdG90YWxwYWdlcyAocGdfZGF0YV90ICpwZ2Rh dCwgdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwKKwl1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6 ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlYWx0b3RhbHBhZ2VzLCB0b3RhbHBhZ2VzID0gMDsKKwlp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKKwkJdG90YWxwYWdl cyArPSB6b25lc19zaXplW2ldOworCXBnZGF0LT5ub2RlX3NpemUgPSB0b3RhbHBhZ2VzOworCisJ cmVhbHRvdGFscGFnZXMgPSB0b3RhbHBhZ2VzOworCWlmICh6aG9sZXNfc2l6ZSkKKwkJZm9yIChp ID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQorCQkJcmVhbHRvdGFscGFnZXMgLT0gemhvbGVz X3NpemVbaV07CisJcHJpbnRrKCJPbiBub2RlICVkIHRvdGFscGFnZXM6ICVsdVxuIiwgcGdkYXQt Pm5vZGVfaWQsIHJlYWx0b3RhbHBhZ2VzKTsKK30KKwogLyoKICAqIEhlbHBlciBmdW5jdGlvbnMg dG8gc2l6ZSB0aGUgd2FpdHF1ZXVlIGhhc2ggdGFibGUuCiAgKiBFc3NlbnRpYWxseSB0aGVzZSB3 YW50IHRvIGNob29zZSBoYXNoIHRhYmxlIHNpemVzIHN1ZmZpY2llbnRseQpAQCAtNzc0LDQ2ICs3 OTEsMTggQEAKICAqICAgLSBtYXJrIGFsbCBtZW1vcnkgcXVldWVzIGVtcHR5CiAgKiAgIC0gY2xl YXIgdGhlIG1lbW9yeSBiaXRtYXBzCiAgKi8KLXZvaWQgX19pbml0IGZyZWVfYXJlYV9pbml0X2Nv cmUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2UgKipnbWFwLAotCXVuc2ln bmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sIAotCXVu c2lnbmVkIGxvbmcgKnpob2xlc19zaXplLCBzdHJ1Y3QgcGFnZSAqbG1lbV9tYXApCit2b2lkIF9f aW5pdCBmcmVlX2FyZWFfaW5pdF9jb3JlKHBnX2RhdGFfdCAqcGdkYXQsCisJCXVuc2lnbmVkIGxv bmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKQogewogCXVuc2lnbmVk IGxvbmcgaSwgajsKLQl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwotCXVuc2lnbmVkIGxvbmcgdG90 YWxwYWdlcywgb2Zmc2V0LCByZWFsdG90YWxwYWdlczsKKwl1bnNpZ25lZCBsb25nIGxvY2FsX29m ZnNldDsKIAljb25zdCB1bnNpZ25lZCBsb25nIHpvbmVfcmVxdWlyZWRfYWxpZ25tZW50ID0gMVVM IDw8IChNQVhfT1JERVItMSk7CisJaW50IG5pZCA9IHBnZGF0LT5ub2RlX2lkOworCXN0cnVjdCBw YWdlICpsbWVtX21hcCA9IHBnZGF0LT5ub2RlX21lbV9tYXA7CisJdW5zaWduZWQgbG9uZyB6b25l X3N0YXJ0X3BmbiA9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbjsKIAotCXRvdGFscGFnZXMgPSAwOwot CWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKLQkJdG90YWxwYWdlcyArPSB6b25l c19zaXplW2ldOwotCi0JcmVhbHRvdGFscGFnZXMgPSB0b3RhbHBhZ2VzOwotCWlmICh6aG9sZXNf c2l6ZSkKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQotCQkJcmVhbHRvdGFs cGFnZXMgLT0gemhvbGVzX3NpemVbaV07Ci0JCQkKLQlwcmludGsoIk9uIG5vZGUgJWQgdG90YWxw YWdlczogJWx1XG4iLCBuaWQsIHJlYWx0b3RhbHBhZ2VzKTsKLQotCS8qCi0JICogU29tZSBhcmNo aXRlY3R1cmVzICh3aXRoIGxvdHMgb2YgbWVtIGFuZCBkaXNjb250aW5vdXMgbWVtb3J5Ci0JICog bWFwcykgaGF2ZSB0byBzZWFyY2ggZm9yIGEgZ29vZCBtZW1fbWFwIGFyZWE6Ci0JICogRm9yIGRp c2NvbnRpZ21lbSwgdGhlIGNvbmNlcHR1YWwgbWVtIG1hcCBhcnJheSBzdGFydHMgZnJvbSAKLQkg KiBQQUdFX09GRlNFVCwgd2UgbmVlZCB0byBhbGlnbiB0aGUgYWN0dWFsIGFycmF5IG9udG8gYSBt ZW0gbWFwIAotCSAqIGJvdW5kYXJ5LCBzbyB0aGF0IE1BUF9OUiB3b3Jrcy4KLQkgKi8KLQltYXBf c2l6ZSA9ICh0b3RhbHBhZ2VzICsgMSkqc2l6ZW9mKHN0cnVjdCBwYWdlKTsKLQlpZiAobG1lbV9t YXAgPT0gKHN0cnVjdCBwYWdlICopMCkgewotCQlsbWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSBh bGxvY19ib290bWVtX25vZGUocGdkYXQsIG1hcF9zaXplKTsKLQkJbG1lbV9tYXAgPSAoc3RydWN0 IHBhZ2UgKikoUEFHRV9PRkZTRVQgKyAKLQkJCU1BUF9BTElHTigodW5zaWduZWQgbG9uZylsbWVt X21hcCAtIFBBR0VfT0ZGU0VUKSk7Ci0JfQotCSpnbWFwID0gcGdkYXQtPm5vZGVfbWVtX21hcCA9 IGxtZW1fbWFwOwotCXBnZGF0LT5ub2RlX3NpemUgPSB0b3RhbHBhZ2VzOwotCXBnZGF0LT5ub2Rl X3N0YXJ0X3BmbiA9IHpvbmVfc3RhcnRfcGZuOwotCXBnZGF0LT5ub2RlX3N0YXJ0X21hcG5yID0g KGxtZW1fbWFwIC0gbWVtX21hcCk7CiAJcGdkYXQtPm5yX3pvbmVzID0gMDsKLQotCW9mZnNldCA9 IGxtZW1fbWFwIC0gbWVtX21hcDsJCisJbG9jYWxfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgICAg Lyogb2Zmc2V0IHdpdGhpbiBsbWVtX21hcCAqLwogCWZvciAoaiA9IDA7IGogPCBNQVhfTlJfWk9O RVM7IGorKykgewogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgajsK IAkJdW5zaWduZWQgbG9uZyBtYXNrOwpAQCAtODY1LDggKzg1NCw3IEBACiAJCXpvbmUtPnBhZ2Vz X2xvdyA9IG1hc2sqMjsKIAkJem9uZS0+cGFnZXNfaGlnaCA9IG1hc2sqMzsKIAotCQl6b25lLT56 b25lX21lbV9tYXAgPSBtZW1fbWFwICsgb2Zmc2V0OwotCQl6b25lLT56b25lX3N0YXJ0X21hcG5y ID0gb2Zmc2V0OworCQl6b25lLT56b25lX21lbV9tYXAgPSBsbWVtX21hcCArIGxvY2FsX29mZnNl dDsKIAkJem9uZS0+em9uZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjsKIAogCQlpZiAoKHpv bmVfc3RhcnRfcGZuKSAmICh6b25lX3JlcXVpcmVkX2FsaWdubWVudC0xKSkKQEAgLTg3OCw3ICs4 NjYsNyBAQAogCQkgKiBkb25lLiBOb24tYXRvbWljIGluaXRpYWxpemF0aW9uLCBzaW5nbGUtcGFz cy4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdl ICpwYWdlID0gbWVtX21hcCArIG9mZnNldCArIGk7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGxt ZW1fbWFwICsgbG9jYWxfb2Zmc2V0ICsgaTsKIAkJCXNldF9wYWdlX3pvbmUocGFnZSwgbmlkICog TUFYX05SX1pPTkVTICsgaik7CiAJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAkJCVNldFBh Z2VSZXNlcnZlZChwYWdlKTsKQEAgLTg5Miw3ICs4ODAsNyBAQAogCQkJem9uZV9zdGFydF9wZm4r KzsKIAkJfQogCi0JCW9mZnNldCArPSBzaXplOworCQlsb2NhbF9vZmZzZXQgKz0gc2l6ZTsKIAkJ Zm9yIChpID0gMDsgOyBpKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgYml0bWFwX3NpemU7CiAKQEAg LTkzNCwxMCArOTIyLDEzIEBACiAJYnVpbGRfem9uZWxpc3RzKHBnZGF0KTsKIH0KIAorI2lmbmRl ZiBDT05GSUdfRElTQ09OVElHTUVNCiB2b2lkIF9faW5pdCBmcmVlX2FyZWFfaW5pdCh1bnNpZ25l ZCBsb25nICp6b25lc19zaXplKQogewotCWZyZWVfYXJlYV9pbml0X2NvcmUoMCwgJmNvbnRpZ19w YWdlX2RhdGEsICZtZW1fbWFwLCB6b25lc19zaXplLCAwLCAwLCAwKTsKKwlmcmVlX2FyZWFfaW5p dF9ub2RlKDAsICZjb250aWdfcGFnZV9kYXRhLCBOVUxMLCB6b25lc19zaXplLCAwLCBOVUxMKTsK KwltZW1fbWFwID0gY29udGlnX3BhZ2VfZGF0YS5ub2RlX21lbV9tYXA7CiB9CisjZW5kaWYKIAog c3RhdGljIGludCBfX2luaXQgc2V0dXBfbWVtX2ZyYWMoY2hhciAqc3RyKQogewo= --==========185362416==========-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/