From mboxrd@z Thu Jan 1 00:00:00 1970 From: mgross Date: Fri, 14 Jun 2002 18:45:14 +0000 Subject: [Linux-ia64] [PATCH] Multi-threaded core dumps for 2.4.18 non-O(1) kernels. MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------Boundary-00=_EFLP50N986AQPO8L6Y5E" Message-Id: List-Id: To: linux-ia64@vger.kernel.org --------------Boundary-00=_EFLP50N986AQPO8L6Y5E Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 8bit The following patch is a back port of the 2.5.18 tcore patch I posted last week. It applies cleanly to the 2.4.18-ia64 tree. The ia64 SMP version has been tested and works very well. To use this patch you will need to strip the objects from the libpthread module loaded by GDB at post mortem debug time. ('strip /lib/libpthread-0.9.so for my system', YMMV) --mgross --------------Boundary-00=_EFLP50N986AQPO8L6Y5E Content-Type: text/x-diff; charset="iso-8859-15"; name="tcore-ia64-2418.pat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tcore-ia64-2418.pat" ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvaTM4Ny5jIGxpbnV4 MjQxOC50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwotLS0gbGludXgvYXJjaC9pMzg2L2tl cm5lbC9pMzg3LmMJRnJpIEZlYiAyMyAxMDowOTowOCAyMDAxCisrKyBsaW51eDI0MTgudGNvcmUv YXJjaC9pMzg2L2tlcm5lbC9pMzg3LmMJRnJpIEp1biAxNCAxMDo0MDozNyAyMDAyCkBAIC01MjAs MyArNTIwLDQ0IEBACiAKIAlyZXR1cm4gZnB2YWxpZDsKIH0KKworaW50IGR1bXBfdGFza19mcHUo IHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqZnB1ICkK K3sKKwlpbnQgZnB2YWxpZDsKKworCWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aDsKKwlpZiAoIGZw dmFsaWQgKSB7CisJCWlmICh0c2sgPT0gY3VycmVudCkgdW5sYXp5X2ZwdSggdHNrICk7CisJCWlm ICggY3B1X2hhc19meHNyICkgeworCQkJY29weV9mcHVfZnhzYXZlKCB0c2ssIGZwdSApOworCQl9 IGVsc2UgeworCQkJY29weV9mcHVfZnNhdmUoIHRzaywgZnB1ICk7CisJCX0KKwl9CisKKwlyZXR1 cm4gZnB2YWxpZDsKK30KKworaW50IGR1bXBfdGFza19leHRlbmRlZF9mcHUoIHN0cnVjdCB0YXNr X3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2 YWxpZDsKKwkKKwlmcHZhbGlkID0gdHNrLT51c2VkX21hdGggJiYgY3B1X2hhc19meHNyOworCWlm ICggZnB2YWxpZCApIHsKKwkJaWYgKHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1KCB0c2sgKTsK KwkJbWVtY3B5KCBmcHUsICZ0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSwKKwkJc2l6ZW9mKHN0cnVj dCB1c2VyX2Z4c3Jfc3RydWN0KSApOworCX0KKwkKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworCisj aWZkZWYgQ09ORklHX1NNUAordm9pZCBkdW1wX3NtcF91bmxhenlfZnB1KHZvaWQpCit7CisJdW5s YXp5X2ZwdShjdXJyZW50KTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKwpkaWZmIC11ck4gLVggZG9u dGRpZmYgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgbGludXgyNDE4LnRjb3JlL2Fy Y2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCi0tLSBsaW51eC9hcmNoL2kzODYva2VybmVsL3Byb2Nl c3MuYwlNb24gRmViIDI1IDExOjM3OjUzIDIwMDIKKysrIGxpbnV4MjQxOC50Y29yZS9hcmNoL2kz ODYva2VybmVsL3Byb2Nlc3MuYwlGcmkgSnVuIDE0IDEwOjQwOjM3IDIwMDIKQEAgLTY0NCw2ICs2 NDQsMjQgQEAKIAogCWR1bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+aTM4 Nyk7CiB9CisvKiAKKyAqIENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0 YXNrIGlzIG5vdCBydW5uaW5nIChpbiB1c2VyIHNwYWNlKQorICovCisjaW5jbHVkZSA8bGludXgv ZWxmY29yZS5oPgoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAg ZWxmX2dyZWdzZXRfdCAqcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisJCisJcHRy ZWdzID0gKihzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0c2sgKyBUSFJFQURfU0la RSAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCXB0cmVncy54Y3MgJj0gMHhmZmZmOworCXB0 cmVncy54ZHMgJj0gMHhmZmZmOworCXB0cmVncy54ZXMgJj0gMHhmZmZmOworCXB0cmVncy54c3Mg Jj0gMHhmZmZmOworCisJZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOworCisJcmV0 dXJuIDE7Cit9CiAKIC8qCiAgKiBUaGlzIHNwZWNpYWwgbWFjcm8gY2FuIGJlIHVzZWQgdG8gbG9h ZCBhIGRlYnVnZ2luZyByZWdpc3RlcgpkaWZmIC11ck4gLVggZG9udGRpZmYgbGludXgvYXJjaC9p YTY0L2tlcm5lbC9wcm9jZXNzLmMgbGludXgyNDE4LnRjb3JlL2FyY2gvaWE2NC9rZXJuZWwvcHJv Y2Vzcy5jCi0tLSBsaW51eC9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwlGcmkgSnVuIDE0IDEw OjQ0OjAyIDIwMDIKKysrIGxpbnV4MjQxOC50Y29yZS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3Mu YwlGcmkgSnVuIDE0IDEwOjQwOjM3IDIwMDIKQEAgLTM0NSw2ICszNDUsMzEgQEAKIHZvaWQKIGRv X2NvcHlfcmVncyAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCiB7CisJ ZG9fY29weV90YXNrX3JlZ3MoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwordm9pZAorZG9fZHVt cF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCWRvX2R1 bXBfdGFza19mcHUoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwordm9pZAoraWE2NF9lbGZfY29y ZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2dyZWdzZXRfdCBkc3QpCit7CisJ dW53X2luaXRfcnVubmluZyhkb19jb3B5X3JlZ3MsIGRzdCk7Cit9CisKK2ludAorZHVtcF9mcHUg KHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2ZwcmVnc2V0X3QgZHN0KQoreworCXVud19pbml0X3J1 bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7CisJcmV0dXJuIDE7CS8qIGYwLWYzMSBhcmUgYWx3YXlz IHZhbGlkIHNvIHdlIGFsd2F5cyByZXR1cm4gMSAqLworfQorCitzdGF0aWMgdm9pZAorZG9fY29w eV90YXNrX3JlZ3MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHVud19mcmFtZV9p bmZvICppbmZvLCB2b2lkICphcmcpCit7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBzcCwgbmF0X2Jp dHMgPSAwLCBpcCwgYXJfcm5hdCwgdXJic19lbmQsIGNmbTsKIAllbGZfZ3JlZ190ICpkc3QgPSBh cmc7CiAJc3RydWN0IHB0X3JlZ3MgKnB0OwpAQCAtMzU5LDEyICszODQsMTIgQEAKIAl1bndfZ2V0 X3NwKGluZm8sICZzcCk7CiAJcHQgPSAoc3RydWN0IHB0X3JlZ3MgKikgKHNwICsgMTYpOwogCi0J dXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQoY3VycmVudCwgcHQsICZjZm0pOworCXVy YnNfZW5kID0gaWE2NF9nZXRfdXNlcl9yYnNfZW5kKHRhc2ssIHB0LCAmY2ZtKTsKIAotCWlmIChp YTY0X3N5bmNfdXNlcl9yYnMoY3VycmVudCwgaW5mby0+c3csIHB0LT5hcl9ic3BzdG9yZSwgdXJi c19lbmQpIDwgMCkKKwlpZiAoaWE2NF9zeW5jX3VzZXJfcmJzKHRhc2ssIGluZm8tPnN3LCBwdC0+ YXJfYnNwc3RvcmUsIHVyYnNfZW5kKSA8IDApCiAJCXJldHVybjsKIAotCWlhNjRfcGVlayhjdXJy ZW50LCBpbmZvLT5zdywgdXJic19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcg KikgdXJic19lbmQpLAorCWlhNjRfcGVlayh0YXNrLCBpbmZvLT5zdywgdXJic19lbmQsIChsb25n KSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAogCQkgICZhcl9ybmF0KTsK IAogCS8qCkBAIC00MTMsNyArNDM4LDcgQEAKIH0KIAogdm9pZAotZG9fZHVtcF9mcHUgKHN0cnVj dCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQorZG9fZHVtcF90YXNrX2ZwdSAoc3Ry dWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQg KmFyZykKIHsKIAllbGZfZnByZWdfdCAqZHN0ID0gYXJnOwogCWludCBpOwpAQCAtNDI4LDIyICs0 NTMsNDEgQEAKIAlmb3IgKGkgPSAyOyBpIDwgMzI7ICsraSkKIAkJdW53X2dldF9mcihpbmZvLCBp LCBkc3QgKyBpKTsKIAotCWlhNjRfZmx1c2hfZnBoKGN1cnJlbnQpOwotCWlmICgoY3VycmVudC0+ dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKSAhPSAwKQotCQltZW1jcHkoZHN0 ICsgMzIsIGN1cnJlbnQtPnRocmVhZC5mcGgsIDk2KjE2KTsKKwlpYTY0X2ZsdXNoX2ZwaCh0YXNr KTsKKwlpZiAoKHRhc2stPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0ZQSF9WQUxJRCkgIT0g MCkKKwkJbWVtY3B5KGRzdCArIDMyLCB0YXNrLT50aHJlYWQuZnBoLCA5NioxNik7CiB9CiAKLXZv aWQKLWlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAqcHQsIGVsZl9ncmVn c2V0X3QgZHN0KQoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywg ZWxmX2dyZWdzZXRfdCAqcmVncykKIHsKLQl1bndfaW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywg ZHN0KTsKKwlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdGNvcmVfaW5mbzsKKworCWlmKGN1cnJlbnQg PT0gdGFzaykgeworCQl1bndfaW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywgcmVncyk7CisJfQor CWVsc2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9pbmZvKSk7CQor CQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7CisJCWRvX2Nv cHlfdGFza19yZWdzKHRhc2ssICZ0Y29yZV9pbmZvLCByZWdzKTsKKwl9CisKKwlyZXR1cm4gMTsK IH0KIAotaW50Ci1kdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnB0LCBlbGZfZnByZWdzZXRfdCBk c3QpCitpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbGZfZnBy ZWdzZXRfdCAqZHN0KQogewotCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7Ci0J cmV0dXJuIDE7CS8qIGYwLWYzMSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFsd2F5cyByZXR1cm4g MSAqLworCXN0cnVjdCB1bndfZnJhbWVfaW5mbyB0Y29yZV9pbmZvOworCisJaWYoY3VycmVudCA9 PSB0YXNrKSB7CisJCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7CisJfQorCWVs c2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9pbmZvKSk7CQorCQl1 bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7CisJCWRvX2R1bXBf dGFza19mcHUodGFzaywgJnRjb3JlX2luZm8sIGRzdCk7CisJfQorCisJcmV0dXJuIDE7IAogfQog CiBhc21saW5rYWdlIGxvbmcKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4L2ZzL2JpbmZtdF9l bGYuYyBsaW51eDI0MTgudGNvcmUvZnMvYmluZm10X2VsZi5jCi0tLSBsaW51eC9mcy9iaW5mbXRf ZWxmLmMJRnJpIEp1biAxNCAxMDo0NDowNCAyMDAyCisrKyBsaW51eDI0MTgudGNvcmUvZnMvYmlu Zm10X2VsZi5jCUZyaSBKdW4gMTQgMTA6NDA6MzcgMjAwMgpAQCAtMzAsNiArMzAsNyBAQAogI2lu Y2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVk ZSA8bGludXgvaGlnaHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxp bnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxs aW51eC9oaWdobWVtLmg+CkBAIC05NTUsNyArOTU2LDcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8K IAogI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkdW1wX3JlZ3MoY29uc3QgY2hhciAqc3RyLCBl bGZfZ3JlZ190ICpyKQorc3RhdGljIHZvaWQgZHVtcF9yZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxm X2dyZWdzZXRfdCAqcikKIHsKIAlpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciAqcmVnc1tdID0g eyAiZWJ4IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIsICJlYnAiLApAQCAtMTAwMyw2ICsx MDA0LDE1NiBAQAogI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCiAJaWYgKCFkdW1wX3NlZWsoZmls ZSwgKG9mZikpKSBcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOworCitzdGF0aWMgaW5saW5lIHZvaWQg ZmlsbF9lbGZfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MpCit7CisJbWVtY3B5 KGVsZi0+ZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKTsKKwllbGYtPmVfaWRlbnRbRUlfQ0xBU1Nd ID0gRUxGX0NMQVNTOworCWVsZi0+ZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOworCWVsZi0+ ZV9pZGVudFtFSV9WRVJTSU9OXSA9IEVWX0NVUlJFTlQ7CisJbWVtc2V0KGVsZi0+ZV9pZGVudCtF SV9QQUQsIDAsIEVJX05JREVOVC1FSV9QQUQpOworCisJZWxmLT5lX3R5cGUgPSBFVF9DT1JFOwor CWVsZi0+ZV9tYWNoaW5lID0gRUxGX0FSQ0g7CisJZWxmLT5lX3ZlcnNpb24gPSBFVl9DVVJSRU5U OworCWVsZi0+ZV9lbnRyeSA9IDA7CisJZWxmLT5lX3Bob2ZmID0gc2l6ZW9mKHN0cnVjdCBlbGZo ZHIpOworCWVsZi0+ZV9zaG9mZiA9IDA7CisJZWxmLT5lX2ZsYWdzID0gMDsKKwllbGYtPmVfZWhz aXplID0gc2l6ZW9mKHN0cnVjdCBlbGZoZHIpOworCWVsZi0+ZV9waGVudHNpemUgPSBzaXplb2Yo c3RydWN0IGVsZl9waGRyKTsKKwllbGYtPmVfcGhudW0gPSBzZWdzOworCWVsZi0+ZV9zaGVudHNp emUgPSAwOworCWVsZi0+ZV9zaG51bSA9IDA7CisJZWxmLT5lX3Noc3RybmR4ID0gMDsKKwlyZXR1 cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2VsZl9ub3RlX3BoZHIoc3RydWN0IGVs Zl9waGRyICpwaGRyLCBpbnQgc3osIG9mZl90IG9mZnNldCkKK3sKKwlwaGRyLT5wX3R5cGUgPSBQ VF9OT1RFOworCXBoZHItPnBfb2Zmc2V0ID0gb2Zmc2V0OworCXBoZHItPnBfdmFkZHIgPSAwOwor CXBoZHItPnBfcGFkZHIgPSAwOworCXBoZHItPnBfZmlsZXN6ID0gc3o7CisJcGhkci0+cF9tZW1z eiA9IDA7CisJcGhkci0+cF9mbGFncyA9IDA7CisJcGhkci0+cF9hbGlnbiA9IDA7CisJcmV0dXJu OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9ub3RlKHN0cnVjdCBtZW1lbGZub3RlICpu b3RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgCisJCXVuc2lnbmVkIGludCBzeiwgdm9p ZCAqZGF0YSkKK3sKKwlub3RlLT5uYW1lID0gbmFtZTsKKwlub3RlLT50eXBlID0gdHlwZTsKKwlu b3RlLT5kYXRhc3ogPSBzejsKKwlub3RlLT5kYXRhID0gZGF0YTsKKwlyZXR1cm47Cit9CisKKy8q CisgKiBmaWxsIHVwIGFsbCB0aGUgZmllbGRzIGluIHByc3RhdHVzIGZyb20gdGhlIGdpdmVuIHRh c2sgc3RydWN0LCBleGNlcHQgcmVnaXN0ZXJzCisgKiB3aGljaCBuZWVkIHRvIGJlIGZpbGxlZCB1 cCBzZXBlcmF0ZWx5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9wcnN0YXR1cyhzdHJ1 Y3QgZWxmX3Byc3RhdHVzICpwcnN0YXR1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBsb25nIHNp Z25yKSAKK3sKKwlwcnN0YXR1cy0+cHJfaW5mby5zaV9zaWdubyA9IHByc3RhdHVzLT5wcl9jdXJz aWcgPSBzaWducjsKKwlwcnN0YXR1cy0+cHJfc2lncGVuZCA9IHAtPnBlbmRpbmcuc2lnbmFsLnNp Z1swXTsKKwlwcnN0YXR1cy0+cHJfc2lnaG9sZCA9IHAtPmJsb2NrZWQuc2lnWzBdOworCXByc3Rh dHVzLT5wcl9waWQgPSBwLT5waWQ7CisJcHJzdGF0dXMtPnByX3BwaWQgPSBwLT5wX3BwdHItPnBp ZDsKKwlwcnN0YXR1cy0+cHJfcGdycCA9IHAtPnBncnA7CisJcHJzdGF0dXMtPnByX3NpZCA9IHAt PnNlc3Npb247CisJcHJzdGF0dXMtPnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MocC0+dGlt ZXMudG1zX3V0aW1lKTsKKwlwcnN0YXR1cy0+cHJfdXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNT KHAtPnRpbWVzLnRtc191dGltZSk7CisJcHJzdGF0dXMtPnByX3N0aW1lLnR2X3NlYyA9IENUX1RP X1NFQ1MocC0+dGltZXMudG1zX3N0aW1lKTsKKwlwcnN0YXR1cy0+cHJfc3RpbWUudHZfdXNlYyA9 IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRtc19zdGltZSk7CisJcHJzdGF0dXMtPnByX2N1dGltZS50 dl9zZWMgPSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5wcl9j dXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3Rh dHVzLT5wcl9jc3RpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3N0aW1lKTsK KwlwcnN0YXR1cy0+cHJfY3N0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNf Y3N0aW1lKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX3BzaW5mbyhz dHJ1Y3QgZWxmX3BycHNpbmZvICpwc2luZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlp bnQgaTsKKwkKKwlwc2luZm8tPnByX3BpZCA9IHAtPnBpZDsKKwlwc2luZm8tPnByX3BwaWQgPSBw LT5wX3BwdHItPnBpZDsKKwlwc2luZm8tPnByX3BncnAgPSBwLT5wZ3JwOworCXBzaW5mby0+cHJf c2lkID0gcC0+c2Vzc2lvbjsKKworCWkgPSBwLT5zdGF0ZSA/IGZmeih+cC0+c3RhdGUpICsgMSA6 IDA7CisJcHNpbmZvLT5wcl9zdGF0ZSA9IGk7CisJcHNpbmZvLT5wcl9zbmFtZSA9IChpIDwgMCB8 fCBpID4gNSkgPyAnLicgOiAiUlNEWlREIltpXTsKKwlwc2luZm8tPnByX3pvbWIgPSBwc2luZm8t PnByX3NuYW1lID09ICdaJzsKKwlwc2luZm8tPnByX25pY2UgPSAgcC0+bmljZTsKKwlwc2luZm8t PnByX2ZsYWcgPSBwLT5mbGFnczsKKwlwc2luZm8tPnByX3VpZCA9IE5FV19UT19PTERfVUlEKHAt PnVpZCk7CisJcHNpbmZvLT5wcl9naWQgPSBORVdfVE9fT0xEX0dJRChwLT5naWQpOworCXN0cm5j cHkocHNpbmZvLT5wcl9mbmFtZSwgcC0+Y29tbSwgc2l6ZW9mKHBzaW5mby0+cHJfZm5hbWUpKTsK KwlyZXR1cm47Cit9CisKKy8qIEhlcmUgaXMgdGhlIHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMg b2YgZWFjaCB0aHJlYWQgaXMgY2FwdHVyZWQuICovCitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMK K3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1 czsJLyogTlRfUFJTVEFUVVMgKi8KKwllbGZfZnByZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVH ICovCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdTCisJZWxmX2ZweHJlZ3NldF90IHhmcHU7 CQkvKiBOVF9QUlhGUFJFRyAqLworI2VuZGlmCisJc3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbM107 CisJaW50IG51bV9ub3RlczsKK307CisKKy8qCisgKiBJbiBvcmRlciB0byBhZGQgdGhlIHNwZWNp ZmljIHRocmVhZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGVsZiBmaWxlIGZvcm1hdCwKKyAqIHdlIG5l ZWQgdG8ga2VlcCBhIGxpbmtlZCBsaXN0IG9mIGV2ZXJ5IHRocmVhZHMgcHJfc3RhdHVzIGFuZCB0 aGVuCisgKiBjcmVhdGUgYSBzaW5nbGUgc2VjdGlvbiBmb3IgdGhlbSBpbiB0aGUgZmluYWwgY29y ZSBmaWxlLgorICovCitzdGF0aWMgaW50IGVsZl9kdW1wX3RocmVhZF9zdGF0dXMobG9uZyBzaWdu ciwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IGxpc3RfaGVhZCAqIHRocmVhZF9saXN0 KQoreworCisJc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzICp0OworCWludCBzeiA9IDA7CisKKwl0 ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXQpIHsKKwkJcHJpbnRr KEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhyZWFkIHN0YXR1cy5c biIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmdC0+bGlzdCk7CisJdC0+ bnVtX25vdGVzID0gMDsKKworCWZpbGxfcHJzdGF0dXMoJnQtPnByc3RhdHVzLCBwLCBzaWducik7 CisJZWxmX2NvcmVfY29weV90YXNrX3JlZ3MocCwgJnQtPnByc3RhdHVzLnByX3JlZyk7CQorCQor CWZpbGxfbm90ZSgmdC0+bm90ZXNbMF0sICJDT1JFIiwgTlRfUFJTVEFUVVMsIHNpemVvZih0LT5w cnN0YXR1cyksICYodC0+cHJzdGF0dXMpKTsKKwl0LT5udW1fbm90ZXMrKzsKKwlzeiArPSBub3Rl c2l6ZSgmdC0+bm90ZXNbMF0pOworCisJaWYgKCh0LT5wcnN0YXR1cy5wcl9mcHZhbGlkID0gZWxm X2NvcmVfY29weV90YXNrX2ZwcmVncyhwLCAmdC0+ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZ0LT5u b3Rlc1sxXSwgIkNPUkUiLCBOVF9QUkZQUkVHLCBzaXplb2YodC0+ZnB1KSwgJih0LT5mcHUpKTsK KwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5vdGVzaXplKCZ0LT5ub3Rlc1sxXSk7CisJfQor CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdTCisJaWYgKGVsZl9jb3JlX2NvcHlfdGFza194 ZnByZWdzKHAsICZ0LT54ZnB1KSkgeworCQlmaWxsX25vdGUoJnQtPm5vdGVzWzJdLCAiTElOVVgi LCBOVF9QUlhGUFJFRywgc2l6ZW9mKHQtPnhmcHUpLCAmKHQtPnhmcHUpKTsKKwkJdC0+bnVtX25v dGVzKys7CisJCXN6ICs9IG5vdGVzaXplKCZ0LT5ub3Rlc1syXSk7CisJfQorI2VuZGlmCQorCWxp c3RfYWRkKCZ0LT5saXN0LCB0aHJlYWRfbGlzdCk7CisJcmV0dXJuIHN6OworfQorCiAvKgogICog QWN0dWFsIGR1bXBlcgogICoKQEAgLTEwMjEsMTIgKzExNzIsMjMgQEAKIAlzdHJ1Y3QgZWxmaGRy IGVsZjsKIAlvZmZfdCBvZmZzZXQgPSAwLCBkYXRhb2ZmOwogCXVuc2lnbmVkIGxvbmcgbGltaXQg PSBjdXJyZW50LT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1cjsKLQlpbnQgbnVtbm90ZSA9IDQ7 Ci0Jc3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbNF07CisJaW50IG51bW5vdGUgPSA1OworCXN0cnVj dCBtZW1lbGZub3RlIG5vdGVzWzVdOwogCXN0cnVjdCBlbGZfcHJzdGF0dXMgcHJzdGF0dXM7CS8q IE5UX1BSU1RBVFVTICovCi0JZWxmX2ZwcmVnc2V0X3QgZnB1OwkJLyogTlRfUFJGUFJFRyAqLwog CXN0cnVjdCBlbGZfcHJwc2luZm8gcHNpbmZvOwkvKiBOVF9QUlBTSU5GTyAqLworIAlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnA7CisgCUxJU1RfSEVBRCh0aHJlYWRfbGlzdCk7CisgCXN0cnVjdCBsaXN0 X2hlYWQgKnQ7CisJZWxmX2ZwcmVnc2V0X3QgZnB1OworI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQ UkVHUworCWVsZl9mcHhyZWdzZXRfdCB4ZnB1OworI2VuZGlmCisJaW50IHRocmVhZF9zdGF0dXNf c2l6ZSA9IDA7CisJCiAKKwkvKiBGaXJzdCBwYXVzZSBhbGwgcmVsYXRlZCB0aHJlYWRlZCBwcm9j ZXNzZXMgKi8KKwl0Y29yZV9zdXNwZW5kX3RocmVhZHMoKTsKKwkKIAkvKiBmaXJzdCBjb3B5IHRo ZSBwYXJhbWV0ZXJzIGZyb20gdXNlciBzcGFjZSAqLwogCW1lbXNldCgmcHNpbmZvLCAwLCBzaXpl b2YocHNpbmZvKSk7CiAJewpAQCAtMTA2MSwzNCArMTIyMyw0OSBAQAogCQkqKHN0cnVjdCBwdF9y ZWdzICopJnByc3RhdHVzLnByX3JlZyA9ICpyZWdzOwogI2VuZGlmCiAKLQkvKiBub3cgc3RvcCBh bGwgdm0gb3BlcmF0aW9ucyAqLwotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7 Ci0Jc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7CisJIC8qIGNhcHR1cmUgdGhlIHN0YXR1 cyBvZiBhbGwgb3RoZXIgdGhyZWFkcyAqLworCWlmIChzaWducikgeworCQlyZWFkX2xvY2soJnRh c2tsaXN0X2xvY2spOworCQlmb3JfZWFjaF90YXNrKHApCisJCQlpZiAoY3VycmVudC0+bW0gPT0g cC0+bW0gJiYgY3VycmVudCAhPSBwKSB7CisJCQkJaW50IHN6ID0gZWxmX2R1bXBfdGhyZWFkX3N0 YXR1cyhzaWduciwgcCwgJnRocmVhZF9saXN0KTsKKwkJCQlpZiAoIXN6KSB7CisJCQkJCXJlYWRf dW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCQll bHNlCisJCQkJCXRocmVhZF9zdGF0dXNfc2l6ZSArPSBzejsKKwkJCX0KKwkJcmVhZF91bmxvY2so JnRhc2tsaXN0X2xvY2spOworCX0KKwkKKwltZW1zZXQoJnByc3RhdHVzLCAwLCBzaXplb2YocHJz dGF0dXMpKTsKKwlmaWxsX3Byc3RhdHVzKCZwcnN0YXR1cywgY3VycmVudCwgc2lnbnIpOworCWVs Zl9jb3JlX2NvcHlfcmVncygmcHJzdGF0dXMucHJfcmVnLCByZWdzKTsKKwkKKwkvKiBXZSBubyBs b25nZXIgc3RvcCBhbGwgdm0gb3BlcmF0aW9ucyAqLworICAKKwkvKiBUaGlzIGJlY2F1c2UgdGhv c2UgcHJvY2VzZXMgdGhhdCBjb3VsZCBwb3NzaWJseSAKKwkgKiBjaGFuZ2UgbWFwX2NvdW50IG9y IHRoZSBtbWFwIC8gdm1hIHBhZ2VzIGFyZSBub3cgc3VzcGVuZGVkLgorCSAqCisJICogT25seSBw dHJhY2UgY2FuIHRvdWNoIHRoZXNlIG1lbW9yeSBhZGRyZXNzLCBidXQgaXQgY2Fubm90IGNoYW5n ZQorCSAqIHRoZSBtYXBfY291bnQgb3IgdGhlIHBhZ2VzLiAgU28gbm8gcG9zc2liaWxpdHkgb2Yg Y3Jhc2hpbmcgZXhpc3RzIHdoaWxlIGR1bXBpbmcKKwkgKiB0aGUgbW0tPnZtX25leHQgYXJlYXMg dG8gdGhlIGNvcmUgZmlsZS4KKwkgKgorCSAqIEdyYWJiaW5nIG1tYXBfc2VtIGluIHRoaXMgZnVu Y3Rpb24gaXMgcmlza3kgV1JUIHRoZSB1c2Ugb2Ygc3VzcGVuZF90aHJlYWRzLgorCSAqIEFsdGhv dWdoIG5vIGxvY2tzIHVwcyBoYXZlIGJlZW4gaW5kdWNlZCwgaWYgb25lIG9mIHRoZSBzdXNwZW5k ZWQgdGhyZWFkcyB3YXMgCisJICogaW4gbGluZSBmb3IgdGhlIGN1cnJlbnQtPm1tYXBfc2VtIGFu ZCBpZiBnZXRzIGl0IHdoaWxlIG9uIHRoZSBQaGFudG9tIHJ1bnF1ZSwKKwkgKiB0aGVuIHdlIHdv dWxkIGRlYWQgbG9jayBpbiB0aGlzIGZ1bmN0aW9uIGlmIHdlIGNvbnRpbnVlIHRvIGF0dGVtcHQg dG8gZG93bl93cml0ZQorCSAqIGluIHRoaXMgZnVuY3Rpb24uCisJICovCisgIAlzZWdzID0gY3Vy cmVudC0+bW0tPm1hcF9jb3VudDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJlbGZfY29yZV9k dW1wOiAlZCBzZWdzICVsdSBsaW1pdFxuIiwgc2VncywgbGltaXQpOwogI2VuZGlmCiAKIAkvKiBT ZXQgdXAgaGVhZGVyICovCi0JbWVtY3B5KGVsZi5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpOwot CWVsZi5lX2lkZW50W0VJX0NMQVNTXSA9IEVMRl9DTEFTUzsKLQllbGYuZV9pZGVudFtFSV9EQVRB XSA9IEVMRl9EQVRBOwotCWVsZi5lX2lkZW50W0VJX1ZFUlNJT05dID0gRVZfQ1VSUkVOVDsKLQlt ZW1zZXQoZWxmLmVfaWRlbnQrRUlfUEFELCAwLCBFSV9OSURFTlQtRUlfUEFEKTsKLQotCWVsZi5l X3R5cGUgPSBFVF9DT1JFOwotCWVsZi5lX21hY2hpbmUgPSBFTEZfQVJDSDsKLQllbGYuZV92ZXJz aW9uID0gRVZfQ1VSUkVOVDsKLQllbGYuZV9lbnRyeSA9IDA7Ci0JZWxmLmVfcGhvZmYgPSBzaXpl b2YoZWxmKTsKLQllbGYuZV9zaG9mZiA9IDA7Ci0JZWxmLmVfZmxhZ3MgPSAwOwotCWVsZi5lX2Vo c2l6ZSA9IHNpemVvZihlbGYpOwotCWVsZi5lX3BoZW50c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxm X3BoZHIpOwotCWVsZi5lX3BobnVtID0gc2VncysxOwkJLyogSW5jbHVkZSBub3RlcyAqLwotCWVs Zi5lX3NoZW50c2l6ZSA9IDA7Ci0JZWxmLmVfc2hudW0gPSAwOwotCWVsZi5lX3Noc3RybmR4ID0g MDsKKwlmaWxsX2VsZl9oZWFkZXIoJmVsZiwgc2VncysxKTsgLyogaW5jbHVkaW5nIG5vdGVzIHNl Y3Rpb24qLwogCiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKQEAgLTExMDUs NjQgKzEyODIsMzQgQEAKIAkgKiB3aXRoIGluZm8gZnJvbSB0aGVpciAvcHJvYy4KIAkgKi8KIAot CW5vdGVzWzBdLm5hbWUgPSAiQ09SRSI7Ci0Jbm90ZXNbMF0udHlwZSA9IE5UX1BSU1RBVFVTOwot CW5vdGVzWzBdLmRhdGFzeiA9IHNpemVvZihwcnN0YXR1cyk7Ci0Jbm90ZXNbMF0uZGF0YSA9ICZw cnN0YXR1czsKLQlwcnN0YXR1cy5wcl9pbmZvLnNpX3NpZ25vID0gcHJzdGF0dXMucHJfY3Vyc2ln ID0gc2lnbnI7Ci0JcHJzdGF0dXMucHJfc2lncGVuZCA9IGN1cnJlbnQtPnBlbmRpbmcuc2lnbmFs LnNpZ1swXTsKLQlwcnN0YXR1cy5wcl9zaWdob2xkID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07 Ci0JcHNpbmZvLnByX3BpZCA9IHByc3RhdHVzLnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlwc2lu Zm8ucHJfcHBpZCA9IHByc3RhdHVzLnByX3BwaWQgPSBjdXJyZW50LT5wX3BwdHItPnBpZDsKLQlw c2luZm8ucHJfcGdycCA9IHByc3RhdHVzLnByX3BncnAgPSBjdXJyZW50LT5wZ3JwOwotCXBzaW5m by5wcl9zaWQgPSBwcnN0YXR1cy5wcl9zaWQgPSBjdXJyZW50LT5zZXNzaW9uOwotCXByc3RhdHVz LnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsK LQlwcnN0YXR1cy5wcl91dGltZS50dl91c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMu dG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9zdGltZS50dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJl bnQtPnRpbWVzLnRtc19zdGltZSk7Ci0JcHJzdGF0dXMucHJfc3RpbWUudHZfdXNlYyA9IENUX1RP X1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19zdGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2 X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+dGltZXMudG1zX2N1dGltZSk7Ci0JcHJzdGF0dXMu cHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3V0aW1l KTsKLQlwcnN0YXR1cy5wcl9jc3RpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1l cy50bXNfY3N0aW1lKTsKLQlwcnN0YXR1cy5wcl9jc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNT KGN1cnJlbnQtPnRpbWVzLnRtc19jc3RpbWUpOwotCiAjaWZkZWYgREVCVUcKIAlkdW1wX3JlZ3Mo IlBhc3NlZCBpbiByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsKIAlkdW1wX3JlZ3MoInByc3Rh dHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9yZWcpOwogI2VuZGlmCiAKLQlu b3Rlc1sxXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUgPSBOVF9QUlBTSU5GTzsKLQlu b3Rlc1sxXS5kYXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rlc1sxXS5kYXRhID0gJnBzaW5m bzsKLQlpID0gY3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQtPnN0YXRlKSArIDEgOiAwOwot CXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1 KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21iID0gcHNpbmZvLnByX3NuYW1l ID09ICdaJzsKLQlwc2luZm8ucHJfbmljZSA9IGN1cnJlbnQtPm5pY2U7Ci0JcHNpbmZvLnByX2Zs YWcgPSBjdXJyZW50LT5mbGFnczsKLQlwc2luZm8ucHJfdWlkID0gTkVXX1RPX09MRF9VSUQoY3Vy cmVudC0+dWlkKTsKLQlwc2luZm8ucHJfZ2lkID0gTkVXX1RPX09MRF9HSUQoY3VycmVudC0+Z2lk KTsKLQlzdHJuY3B5KHBzaW5mby5wcl9mbmFtZSwgY3VycmVudC0+Y29tbSwgc2l6ZW9mKHBzaW5m by5wcl9mbmFtZSkpOwotCi0Jbm90ZXNbMl0ubmFtZSA9ICJDT1JFIjsKLQlub3Rlc1syXS50eXBl ID0gTlRfVEFTS1NUUlVDVDsKLQlub3Rlc1syXS5kYXRhc3ogPSBzaXplb2YoKmN1cnJlbnQpOwot CW5vdGVzWzJdLmRhdGEgPSBjdXJyZW50OwotCi0JLyogVHJ5IHRvIGR1bXAgdGhlIEZQVS4gKi8K LQlwcnN0YXR1cy5wcl9mcHZhbGlkID0gZHVtcF9mcHUgKHJlZ3MsICZmcHUpOwotCWlmICghcHJz dGF0dXMucHJfZnB2YWxpZCkKLQl7Ci0JCW51bW5vdGUtLTsKLQl9Ci0JZWxzZQotCXsKLQkJbm90 ZXNbM10ubmFtZSA9ICJDT1JFIjsKLQkJbm90ZXNbM10udHlwZSA9IE5UX1BSRlBSRUc7Ci0JCW5v dGVzWzNdLmRhdGFzeiA9IHNpemVvZihmcHUpOwotCQlub3Rlc1szXS5kYXRhID0gJmZwdTsKLQl9 CisJZmlsbF9ub3RlKCZub3Rlc1swXSwgIkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHByc3Rh dHVzKSwgJnByc3RhdHVzKTsKIAkKKwlmaWxsX3BzaW5mbygmcHNpbmZvLCBjdXJyZW50KTsKKwlm aWxsX25vdGUoJm5vdGVzWzFdLCAiQ09SRSIsIE5UX1BSUFNJTkZPLCBzaXplb2YocHNpbmZvKSwg JnBzaW5mbyk7CisJCisJZmlsbF9ub3RlKCZub3Rlc1syXSwgIkNPUkUiLCBOVF9UQVNLU1RSVUNU LCBzaXplb2YoKmN1cnJlbnQpLCBjdXJyZW50KTsKKyAgCisgIAkvKiBUcnkgdG8gZHVtcCB0aGUg RlBVLiAqLworCWlmICgocHJzdGF0dXMucHJfZnB2YWxpZCA9IGVsZl9jb3JlX2NvcHlfdGFza19m cHJlZ3MoY3VycmVudCwgJmZwdSkpKSB7CisJCWZpbGxfbm90ZSgmbm90ZXNbM10sICJDT1JFIiwg TlRfUFJGUFJFRywgc2l6ZW9mKGZwdSksICZmcHUpOworCX0gZWxzZSB7CisJCS0tbnVtbm90ZTsK KyAJfQorI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQUkVHUworCWlmIChlbGZfY29yZV9jb3B5X3Rh c2tfeGZwcmVncyhjdXJyZW50LCAmeGZwdSkpIHsKKwkJZmlsbF9ub3RlKCZub3Rlc1s0XSwgIkxJ TlVYIiwgTlRfUFJYRlBSRUcsIHNpemVvZih4ZnB1KSwgJnhmcHUpOworCX0gZWxzZSB7CisJCS0t bnVtbm90ZTsKKwl9CisjZWxzZQorCW51bW5vdGUgLS07CisjZW5kaWYJCisgIAogCS8qIFdyaXRl IG5vdGVzIHBoZHIgZW50cnkgKi8KIAl7CiAJCXN0cnVjdCBlbGZfcGhkciBwaGRyOwpAQCAtMTE3 MCwxNyArMTMxNywxMSBAQAogCiAJCWZvcihpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKIAkJCXN6 ICs9IG5vdGVzaXplKCZub3Rlc1tpXSk7CisJCQorCQlzeiArPSB0aHJlYWRfc3RhdHVzX3NpemU7 CiAKLQkJcGhkci5wX3R5cGUgPSBQVF9OT1RFOwotCQlwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0Owot CQlwaGRyLnBfdmFkZHIgPSAwOwotCQlwaGRyLnBfcGFkZHIgPSAwOwotCQlwaGRyLnBfZmlsZXN6 ID0gc3o7Ci0JCXBoZHIucF9tZW1zeiA9IDA7Ci0JCXBoZHIucF9mbGFncyA9IDA7Ci0JCXBoZHIu cF9hbGlnbiA9IDA7Ci0KLQkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CisJCWZpbGxfZWxmX25v dGVfcGhkcigmcGhkciwgc3osIG9mZnNldCk7CisJCW9mZnNldCArPSBzejsKIAkJRFVNUF9XUklU RSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsKIAl9CiAKQEAgLTEyMDksMTAgKzEzNTAsMTkgQEAKIAkJ RFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsKIAl9CiAKKyAJLyogd3JpdGUgb3V0IHRo ZSBub3RlcyBzZWN0aW9uICovCiAJZm9yKGkgPSAwOyBpIDwgbnVtbm90ZTsgaSsrKQogCQlpZiAo IXdyaXRlbm90ZSgmbm90ZXNbaV0sIGZpbGUpKQogCQkJZ290byBlbmRfY29yZWR1bXA7CiAKKwkv KiB3cml0ZSBvdXQgdGhlIHRocmVhZCBzdGF0dXMgbm90ZXMgc2VjdGlvbiAqLworCWxpc3RfZm9y X2VhY2godCwgJnRocmVhZF9saXN0KSB7CisJCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdG1w ID0gbGlzdF9lbnRyeSh0LCBzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpOworCQlmb3Ig KGkgPSAwOyBpIDwgdG1wLT5udW1fbm90ZXM7IGkrKykKKwkJCWlmICghd3JpdGVub3RlKCZ0bXAt Pm5vdGVzW2ldLCBmaWxlKSkKKwkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKwl9CisgCiAJRFVNUF9T RUVLKGRhdGFvZmYpOwogCiAJZm9yKHZtYSA9IGN1cnJlbnQtPm1tLT5tbWFwOyB2bWEgIT0gTlVM TDsgdm1hID0gdm1hLT52bV9uZXh0KSB7CkBAIC0xMjU2LDExICsxNDA2LDIxIEBACiAJCSAgICAg ICAob2ZmX3QpIGZpbGUtPmZfcG9zLCBvZmZzZXQpOwogCX0KIAotIGVuZF9jb3JlZHVtcDoKK2Vu ZF9jb3JlZHVtcDoKIAlzZXRfZnMoZnMpOwotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9z ZW0pOworCitjbGVhbnVwOgorCXdoaWxlKCFsaXN0X2VtcHR5KCZ0aHJlYWRfbGlzdCkpIHsKKwkJ c3RydWN0IGxpc3RfaGVhZCAqdG1wID0gdGhyZWFkX2xpc3QubmV4dDsKKwkJbGlzdF9kZWwodG1w KTsKKwkJa2ZyZWUobGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cywgbGlz dCkpOworCX0KKworCXRjb3JlX3Jlc3VtZV90aHJlYWRzKCk7CisKIAlyZXR1cm4gaGFzX2R1bXBl ZDsKIH0KKwogI2VuZGlmCQkvKiBVU0VfRUxGX0NPUkVfRFVNUCAqLwogCiBzdGF0aWMgaW50IF9f aW5pdCBpbml0X2VsZl9iaW5mbXQodm9pZCkKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4L2lu Y2x1ZGUvYXNtLWkzODYvZWxmLmggbGludXgyNDE4LnRjb3JlL2luY2x1ZGUvYXNtLWkzODYvZWxm LmgKLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvZWxmLmgJVGh1IE5vdiAyMiAxMTo0ODoyOSAy MDAxCisrKyBsaW51eDI0MTgudGNvcmUvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAlGcmkgSnVuIDE0 IDEwOjQwOjM3IDIwMDIKQEAgLTk5LDYgKzk5LDIxIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAj ZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIp P1BFUl9TVlI0OlBFUl9MSU5VWCkKKworCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1 Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNr X2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOworZXh0ZXJuIGlu dCBkdW1wX3Rhc2tfZXh0ZW5kZWRfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHVz ZXJfZnhzcl9zdHJ1Y3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNr LCBlbGZfcmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfcmVncykKKyNkZWZpbmUgRUxGX0NP UkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2Zw cmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9YRlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1 bXBfdGFza19leHRlbmRlZF9mcHUodHNrLCBlbGZfeGZwcmVncykKKworI2lmZGVmIENPTkZJR19T TVAKK2V4dGVybiB2b2lkIGR1bXBfc21wX3VubGF6eV9mcHUodm9pZCk7CisjZGVmaW5lIEVMRl9D T1JFX1NZTkMgZHVtcF9zbXBfdW5sYXp5X2ZwdQorI2VuZGlmCisKICNlbmRpZgogCiAjZW5kaWYK ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4L2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggbGludXgy NDE4LnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWlh NjQvZWxmLmgJRnJpIEp1biAxNCAxMDo0NDowNCAyMDAyCisrKyBsaW51eDI0MTgudGNvcmUvaW5j bHVkZS9hc20taWE2NC9lbGYuaAlGcmkgSnVuIDE0IDEwOjQyOjI1IDIwMDIKQEAgLTY2LDEyICs2 NiwxNiBAQAogI2RlZmluZSBFTEZfTkdSRUcJMTI4CS8qIHdlIHJlYWxseSBuZWVkIGp1c3QgNzIg YnV0IGxldCdzIGxlYXZlIHNvbWUgaGVhZHJvb20uLi4gKi8KICNkZWZpbmUgRUxGX05GUFJFRwkx MjgJLyogZjAgYW5kIGYxIGNvdWxkIGJlIG9taXR0ZWQsIGJ1dCBzbyB3aGF0Li4uICovCiAKK3R5 cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnB4cmVnc2V0X3Q7CisKIHR5cGVkZWYgdW5zaWduZWQg bG9uZyBlbGZfZ3JlZ190OwogdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05H UkVHXTsKIAogdHlwZWRlZiBzdHJ1Y3QgaWE2NF9mcHJlZyBlbGZfZnByZWdfdDsKIHR5cGVkZWYg ZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CiAKKworCiBzdHJ1Y3QgcHRf cmVnczsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbi4uLiAqLwogZXh0ZXJuIHZvaWQgaWE2NF9lbGZf Y29yZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpzcmMsIGVsZl9ncmVnc2V0X3QgZHN0KTsK ICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKF9kZXN0LF9yZWdzKQlpYTY0X2VsZl9jb3JlX2Nv cHlfcmVncyhfcmVncywgX2Rlc3QpOwpAQCAtODksNiArOTMsMTIgQEAKIHN0cnVjdCBlbGY2NF9o ZHI7CiBleHRlcm4gdm9pZCBpYTY0X3NldF9wZXJzb25hbGl0eSAoc3RydWN0IGVsZjY0X2hkciAq ZWxmX2V4LCBpbnQgaWJjczJfaW50ZXJwcmV0ZXIpOwogI2RlZmluZSBTRVRfUEVSU09OQUxJVFko ZXgsIGliY3MyKQlpYTY0X3NldF9wZXJzb25hbGl0eSgmKGV4KSwgaWJjczIpCisKK2V4dGVybiBp bnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9ncmVnc2V0X3QgKik7 CitleHRlcm4gaW50IGR1bXBfdGFza19mcHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZnBy ZWdzZXRfdCAqKTsKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0c2ssIGVsZl9n cmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfZ3JlZ3MpCisjZGVmaW5lIEVMRl9DT1JFX0NP UFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3Mp CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9FTEZfSCAqLwpkaWZmIC11ck4gLVggZG9u dGRpZmYgbGludXgvaW5jbHVkZS9saW51eC9lbGYuaCBsaW51eDI0MTgudGNvcmUvaW5jbHVkZS9s aW51eC9lbGYuaAotLS0gbGludXgvaW5jbHVkZS9saW51eC9lbGYuaAlUaHUgTm92IDIyIDExOjQ4 OjI5IDIwMDEKKysrIGxpbnV4MjQxOC50Y29yZS9pbmNsdWRlL2xpbnV4L2VsZi5oCUZyaSBKdW4g MTQgMTA6NDA6MzcgMjAwMgpAQCAtNTc2LDYgKzU3Niw5IEBACiAjZGVmaW5lIE5UX1BSUFNJTkZP CTMKICNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0CiAjZGVmaW5lIE5UX1BSRlBYUkVHCTIwCisjZGVm aW5lIE5UX1BSWEZQUkVHICAgICAweDQ2ZTYyYjdmCS8qIG5vdGUgbmFtZSBtdXN0IGJlICJMSU5V WCIgYXMgcGVyIEdEQiAqLworCQkJCQkvKiBmcm9tIGdkYjUuMS9pbmNsdWRlL2VsZi9jb21tb24u aCAqLworCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCiB0eXBlZGVm IHN0cnVjdCBlbGYzMl9ub3RlIHsKQEAgLTYwNyw1ICs2MTAsNCBAQAogCiAjZW5kaWYKIAotCiAj ZW5kaWYgLyogX0xJTlVYX0VMRl9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC9pbmNs dWRlL2xpbnV4L2VsZmNvcmUuaCBsaW51eDI0MTgudGNvcmUvaW5jbHVkZS9saW51eC9lbGZjb3Jl LmgKLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvZWxmY29yZS5oCVRodSBOb3YgMjIgMTE6NDk6MDIg MjAwMQorKysgbGludXgyNDE4LnRjb3JlL2luY2x1ZGUvbGludXgvZWxmY29yZS5oCUZyaSBKdW4g MTQgMTA6NDA6MzcgMjAwMgpAQCAtODYsNCArODYsNjYgQEAKICNkZWZpbmUgUFJBUkdTWiBFTEZf UFJBUkdTWiAKICNlbmRpZgogCisjaWZkZWYgX19LRVJORUxfXworc3RhdGljIGlubGluZSB2b2lk IGVsZl9jb3JlX2NvcHlfcmVncyhlbGZfZ3JlZ3NldF90ICplbGZyZWdzLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX1JFR1MKKwlFTEZfQ09SRV9DT1BZX1JF R1MoKCplbGZyZWdzKSwgcmVncykKKyNlbHNlCisJaWYgKHNpemVvZihlbGZfZ3JlZ3NldF90KSAh PSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKSB7CisJCXByaW50aygic2l6ZW9mKGVsZl9ncmVnc2V0 X3QpICglbGQpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykgKCVsZClcbiIsCisJCQkobG9uZylz aXplb2YoZWxmX2dyZWdzZXRfdCksIChsb25nKXNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCX0g ZWxzZQorCQkqKHN0cnVjdCBwdF9yZWdzICopZWxmcmVncyA9ICpyZWdzOworI2VuZGlmCit9CisK K3N0YXRpYyBpbmxpbmUgaW50IGVsZl9jb3JlX2NvcHlfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCogZWxmcmVncykKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZ X1RBU0tfUkVHUworCQorCXJldHVybiBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0LCBlbGZyZWdz KTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitleHRlcm4gaW50IGR1bXBfZnB1IChzdHJ1Y3Qg cHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgZWxmX2Nv cmVfY29weV90YXNrX2ZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9mcHJlZ3NldF90 ICpmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9GUFJFR1MKKwlyZXR1cm4gRUxGX0NPUkVf Q09QWV9GUFJFR1ModCwgZnB1KTsKKyNlbHNlCisJcmV0dXJuIGR1bXBfZnB1KE5VTEwsIGZwdSk7 CisjZW5kaWYKK30KKworI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQUkVHUworc3RhdGljIGlubGlu ZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBl bGZfZnB4cmVnc2V0X3QgKnhmcHUpCit7CisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfWEZQUkVHUyh0 LCB4ZnB1KTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIHRyaXZpYWwg ZnVuY3Rpb24gdXNlZCBmb3IgU01QIENQVSBzeW5jaHJvbml6YXRpb24uCisgKiBJdCBkb2Vzbid0 IGRvIGFueXRoaW5nLgorICovCitzdGF0aWMgdm9pZCB0Y29yZV9kb19ub3RoaW5nKHZvaWQgKnZh cikKK3sKKworI2lmZGVmIEVMRl9DT1JFX1NZTkMKKwlFTEZfQ09SRV9TWU5DKCk7CisjZW5kaWYK KworCXJldHVybjsKK30KKworI2VuZGlmCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwor CiAjZW5kaWYgLyogX0xJTlVYX0VMRkNPUkVfSCAqLwpkaWZmIC11ck4gLVggZG9udGRpZmYgbGlu dXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIGxpbnV4MjQxOC50Y29yZS9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgKLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaAlGcmkgRGVjIDIxIDA5OjQyOjAz IDIwMDEKKysrIGxpbnV4MjQxOC50Y29yZS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJRnJpIEp1biAx NCAxMDo0MDozNyAyMDAyCkBAIC0xMzIsNiArMTMyLDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9z cGlubG9jay5oPgogCisKKy8qIGZ1bmN0aW9ucyBmb3IgcGF1c2luZyBhbmQgcmVzdW1taW5nIGZ1 bmN0aW9ucyAKKyAqIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNpbmcgc2lnbmFscy4gIFRoZXNlIGFy ZSB1c2VkCisgKiBieSB0aGUgbXVsdGl0aHJlYWRlZCBlbGYgY29yZSBkdW1wIGNvZGUgaW4gYmlu Zm10X2VsZi5jKi8KK2V4dGVybiB2b2lkIHRjb3JlX3N1c3BlbmRfdGhyZWFkcyggdm9pZCApOwor ZXh0ZXJuIHZvaWQgdGNvcmVfcmVzdW1lX3RocmVhZHMoIHZvaWQgKTsKKworCiAvKgogICogVGhp cyBzZXJpYWxpemVzICJzY2hlZHVsZSgpIiBhbmQgYWxzbyBwcm90ZWN0cwogICogdGhlIHJ1bi1x dWV1ZSBmcm9tIGRlbGV0aW9ucy9tb2RpZmljYXRpb25zIChidXQKZGlmZiAtdXJOIC1YIGRvbnRk aWZmIGxpbnV4L2tlcm5lbC9zY2hlZC5jIGxpbnV4MjQxOC50Y29yZS9rZXJuZWwvc2NoZWQuYwot LS0gbGludXgva2VybmVsL3NjaGVkLmMJRnJpIERlYyAyMSAwOTo0MjowNCAyMDAxCisrKyBsaW51 eDI0MTgudGNvcmUva2VybmVsL3NjaGVkLmMJRnJpIEp1biAxNCAxMDo0MDozNyAyMDAyCkBAIC0z Myw2ICszMyw4IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11 X2NvbnRleHQuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KKwogZXh0ZXJuIHZvaWQg dGltZXJfYmgodm9pZCk7CiBleHRlcm4gdm9pZCB0cXVldWVfYmgodm9pZCk7CiBleHRlcm4gdm9p ZCBpbW1lZGlhdGVfYmgodm9pZCk7CkBAIC0xMjEsNyArMTIzLDcgQEAKICNlbHNlCiAKICNkZWZp bmUgaWRsZV90YXNrKGNwdSkgKCZpbml0X3Rhc2spCi0jZGVmaW5lIGNhbl9zY2hlZHVsZShwLGNw dSkgKDEpCisjZGVmaW5lIGNhbl9zY2hlZHVsZShwLGNwdSkgKChwKS0+Y3B1c19hbGxvd2VkICYg KDEgPDwgY3B1KSkKIAogI2VuZGlmCiAKQEAgLTg1MSw2ICs4NTMsMTA4IEBACiB9CiAKIHZvaWQg c2NoZWR1bGluZ19mdW5jdGlvbnNfZW5kX2hlcmUodm9pZCkgeyB9CisgIAorLyoKKyAqIG5lZWRl ZCBmb3IgYWNjdXJhdGUgY29yZSBkdW1wcyBvZiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMu CisgKiBzZWUgYmluZm10X2VsZi5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMg dm9pZCByZXNjaGVkdWxlX290aGVyX2NwdXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJ aW50IGksIGNwdTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlmb3IoaT0wOyBpPCBzbXBf bnVtX2NwdXM7IGkrKykgeworCQljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CisJCXAgPSBjcHVf Y3VycihjcHUpOworCQlpZiAocC0+cHJvY2Vzc29yICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgewor CQkJcC0+bmVlZF9yZXNjaGVkID0gMTsKKwkJCXNtcF9zZW5kX3Jlc2NoZWR1bGUocC0+cHJvY2Vz c29yKTsKKwkJfQorIAl9CisjZW5kaWYJCisJcmV0dXJuOworfQorCisvKiBmdW5jdGlvbnMgZm9y IHBhdXNpbmcgYW5kIHJlc3VtbWluZyBmdW5jdGlvbnMgd2l0aCBvdXQgdXNpbmcgc2lnbmFscyAq Lwordm9pZCB0Y29yZV9zdXNwZW5kX3RocmVhZHModm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnA7CisKKy8vCisvLyBncmFiIGFsbCB0aGUgcnFfbG9ja3MuCisvLyBjdXJyZW50IGlzIHRo ZSBwcm9jZXNzIGR1bXBpbmcgY29yZQorLy8gIAorCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0t Pm1tYXBfc2VtKTsKKwkvLyBhdm9pZCBwb3RlbnRpYWwgcmFjZSBvbiA+MiB3YXkgU01QIGlmIDMg b3IgbW9yZSB0aHJlYWQgcHJvY3MKKwkvLyBkdW1wIGNvcmUgYXQgdGhlIHNhbWUgdGltZS4KKwkK KworCS8qCisJICogYnJ1dGUgZm9yY2UgbWV0aG9kIHVzZXMgdGhlIHJ1bnF1ZXVlX2xvY2sgY29u dGVudGlvbi4gIEdyYWIgdGhpcyBsb2NrLCBhbmQKKwkgKiBmb3JjZSBhIHNjaGVkdWxlIGNhbGwg b24gYWxsIHRoZSBvdGhlciBDUFUncyB0byBnZXQgdGhlbSBzcGlubmluZy4KKwkgKiBzcGluX2xv Y2tfcHJlZmV0Y2goJnJ1bnF1ZXVlX2xvY2spIDwtLSBpcyB0aGlzIG5lZWRlZD8KKwkgKi8KKwly ZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnJ1bnF1ZXVlX2xvY2sp OworCisJdGFza19sb2NrKGN1cnJlbnQpOworCWN1cnJlbnQtPmNwdXNfYWxsb3dlZCA9IDFVTCA8 PCBjdXJyZW50LT5wcm9jZXNzb3I7CisJLy8gcHJldmVudCBtaWdyYWlvbiBvZiBkdW1waW5nIHBy b2Nlc3MgbWFraW5nIGxpZmUgY29tcGxpY2F0ZWQuCisJdGFza191bmxvY2soY3VycmVudCk7CisJ CQkKKwlyZXNjaGVkdWxlX290aGVyX2NwdXMoKTsKKwkvLyB0aGlzIGlzIGFuIG9wdGlvbmFsIElQ SSwgYnV0IGl0IG1ha2VzIGZvciB0aGUgbW9zdCBhY2N1cmF0ZSBjb3JlIGZpbGVzIHBvc3NpYmxl LgorCQkKKwlmb3JfZWFjaF90YXNrKHApCisJCWlmIChjdXJyZW50LT5tbSA9PSBwLT5tbSAmJiBj dXJyZW50ICE9IHApIHsKKwkJCXRhc2tfbG9jayhwKTsKKwkJCXAtPmNwdXNfYWxsb3dlZCA9IDBV TDsKKwkJCXRhc2tfdW5sb2NrKHApOworCQkJLyogCisJCQkgKiBmb3JjZXMgeWVpbGQgYW5kIGtl ZXBzIHdha2luZyBwcm9jZXNzIGZyb20gZ2V0dGluZyBzY2hlZHVsZWQKKwkJCSAqIGluLiBUaGlz IHdpbGwgcmVzdWx0IGluIHRoZXNlIHByb2Nlc3NlcyBnZXR0aW5nIHN3YXBwZWQgb3V0IGFuZAor CQkJICogbm90IHN3YXBwZWQgaW4gYnkgdGhlIHNjaGVkdWxlciBpZiB0aGV5IGhhdmUgYmVlbiBz bGVlcGluZy4KKwkJCSAqLworCQl9CisJCQorCXNwaW5fdW5sb2NrX2lycSgmcnVucXVldWVfbG9j ayk7CisJCisJLyogbGV0IHRoZW0gYWxsIHJ1biBhZ2Fpbi4uICovCisJcmVhZF91bmxvY2soJnRh c2tsaXN0X2xvY2spOworCisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCisj aWZkZWYgQ09ORklHX1NNUAorCS8qIAorCSAqIG5vdyB3ZSBzeW5jcm9uaXplIG9uIGFsbCB0aGUg Q1BVJ3MgdG8gbWFrZSBzdXJlCisJICogbm9uZSBvZiB0aGUgb3RoZXIgdGhyZWFkIHByb2Nlc3Nl cyBhcmUgcnVubmluZyBpbiAKKwkgKiBhbmQgYW55IGxhenkgZnB1IHJlZ2lzdGVyIGRhdGEgaGFz IGJlZW4gY2FwdHVyZWQgCisJICogZnJvbSB1c2VyIHNwYWNlIGJlZm9yZSB3ZSBwcm9jZWVkLgor CSAqLworCXNtcF9jYWxsX2Z1bmN0aW9uKHRjb3JlX2RvX25vdGhpbmcsIE5VTEwsIDEsMSk7Cisj ZW5kaWYKKwkKK3JldHVybjsKK30KKwordm9pZCB0Y29yZV9yZXN1bWVfdGhyZWFkcyh2b2lkKQor eworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7 CisJZm9yX2VhY2hfdGFzayhwKQorCQlpZiAoY3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVu dCAhPSBwKXsgCisJCQl0YXNrX2xvY2socCk7CisJCQlwLT5jcHVzX2FsbG93ZWQgPSAxVUwgPDwg Y3VycmVudC0+cHJvY2Vzc29yOworCQkJdGFza191bmxvY2socCk7CisJCX0KKwlyZWFkX3VubG9j aygmdGFza2xpc3RfbG9jayk7CisKKwlyZXR1cm47Cit9CisKIAogI2lmbmRlZiBfX2FscGhhX18K IAo= --------------Boundary-00=_EFLP50N986AQPO8L6Y5E--