From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Fri, 10 May 2002 12:24:54 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Fri, 10 May 2002 12:24:53 -0400 Received: from scfdns02.sc.intel.com ([143.183.152.26]:19961 "EHLO crotus.sc.intel.com") by vger.kernel.org with ESMTP id ; Fri, 10 May 2002 12:24:49 -0400 Message-Id: <200205101624.g4AGOSw16928@unix-os.sc.intel.com> From: Mark Gross Reply-To: mgross@unix-os.sc.intel.com Organization: SSG Intel To: linux-kernel@vger.kernel.org Subject: [PATCH] multithreaded coredumps for elf exeecutables for O(1) scheduler Date: Fri, 10 May 2002 09:24:14 -0400 X-Mailer: KMail [version 1.3.1] Cc: mark.gross@intel.com, mark@thegnar.org, vamsi@in.ibm.com, efocht@ess.nec.de MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 8bit Attached is my current patch for creating multithreaded core dump files, that works with the O(1) scheduler. This is a continuation of the work posted by Vamsi Krishna back on 3/21/02. I'm sorry for the delay. The problem of suspending the other thread processes for the duration of the core dump was a challenging problem with the O(1) scheduler. Most of the patch is the same as that posted on 3/21/02 with some minor fixes and the rebasing to the 2.5.14 kernel. The interesting bits are in the additions to sched.c to pause and resume the thread processes under the O(1) scheduler. Here I'm leveraging the work of Eric Foct for the process migration, to temporarily migrate the thread processes I need suspended to a "phantom runqueue". This is just an additional run queue that has no cpu. When I'm finish with the core dump I migrate them off the phantom run queue and continue processing whatever exit processing they do. I tried a number of approaches to process pausing that didn't quite work before I settled on the attached implementation. This work has been unit test on a 2 way and 4 way SMP systems with no lockups so far. YMMV. Note: GDB 5.x will work with the core files created with this patch, provided the libpthread that gets loaded at gdb debug time is stripped of symbols. Run strip on your libpthread so files and things should work fine for you. --mgross (W) 503-712-8218 MS: JF1-05 2111 N.E. 25th Ave. Hillsboro, OR 97124 --------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8 Content-Type: text/x-diff; charset="iso-8859-15"; name="tcore-2.5.14.pat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tcore-2.5.14.pat" ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4xNC52YW5uaWxsYS9hcmNoL2kzODYva2Vy bmVsL2kzODcuYyBsaW51eDIuNS4xNC50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwotLS0g bGludXgtMi41LjE0LnZhbm5pbGxhL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Ny5jCVN1biBNYXkgIDUg MjM6Mzg6MDYgMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9pMzg3 LmMJVHVlIE1heSAgNyAxNDo1OToxMCAyMDAyCkBAIC01MjgsMyArNTI4LDM2IEBACiAKIAlyZXR1 cm4gZnB2YWxpZDsKIH0KKworaW50IGR1bXBfdGFza19mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAq dHNrLCBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2YWxpZDsKKwor CWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aDsKKwlpZiAoIGZwdmFsaWQgKSB7CisJCWlmICh0c2sg PT0gY3VycmVudCkgdW5sYXp5X2ZwdSggdHNrICk7CisJCWlmICggY3B1X2hhc19meHNyICkgewor CQkJY29weV9mcHVfZnhzYXZlKCB0c2ssIGZwdSApOworCQl9IGVsc2UgeworCQkJY29weV9mcHVf ZnNhdmUoIHRzaywgZnB1ICk7CisJCX0KKwl9CisKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworaW50 IGR1bXBfdGFza19leHRlbmRlZF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qg dXNlcl9meHNyX3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2YWxpZDsKKwkKKwlmcHZhbGlkID0g dHNrLT51c2VkX21hdGggJiYgY3B1X2hhc19meHNyOworCWlmICggZnB2YWxpZCApIHsKKwkJaWYg KHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1KCB0c2sgKTsKKwkJbWVtY3B5KCBmcHUsICZ0c2st PnRocmVhZC5pMzg3LmZ4c2F2ZSwKKwkJc2l6ZW9mKHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0KSAp OworCX0KKwkKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBs aW51eC0yLjUuMTQudmFubmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgbGludXgyLjUu MTQudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKLS0tIGxpbnV4LTIuNS4xNC52YW5u aWxsYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwlTdW4gTWF5ICA1IDIzOjM3OjUyIDIwMDIK KysrIGxpbnV4Mi41LjE0LnRjb3JlL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCVdlZCBNYXkg IDggMTM6Mzk6MTkgMjAwMgpAQCAtNjEwLDYgKzYxMCwxOCBAQAogCiAJZHVtcC0+dV9mcHZhbGlk ID0gZHVtcF9mcHUgKHJlZ3MsICZkdW1wLT5pMzg3KTsKIH0KKy8qIAorICogQ2FwdHVyZSB0aGUg dXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIg c3BhY2UpCisgKi8KK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywg c3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJKnJlZ3MgPSAqKHN0cnVjdCBwdF9yZWdzICopKCh1 bnNpZ25lZCBsb25nKXRzay0+dGhyZWFkX2luZm8gKyBUSFJFQURfU0laRSAtIHNpemVvZihzdHJ1 Y3QgcHRfcmVncykpOworCXJlZ3MtPnhjcyAmPSAweGZmZmY7CisJcmVncy0+eGRzICY9IDB4ZmZm ZjsKKwlyZWdzLT54ZXMgJj0gMHhmZmZmOworCXJlZ3MtPnhzcyAmPSAweGZmZmY7CisJcmV0dXJu IDE7Cit9CiAKIC8qCiAgKiBUaGlzIHNwZWNpYWwgbWFjcm8gY2FuIGJlIHVzZWQgdG8gbG9hZCBh IGRlYnVnZ2luZyByZWdpc3RlcgpCaW5hcnkgZmlsZXMgbGludXgtMi41LjE0LnZhbm5pbGxhL2Nv cmUgYW5kIGxpbnV4Mi41LjE0LnRjb3JlL2NvcmUgZGlmZmVyCmRpZmYgLXVyTiAtWCBkb250ZGlm ZiBsaW51eC0yLjUuMTQudmFubmlsbGEvZnMvYmluZm10X2VsZi5jIGxpbnV4Mi41LjE0LnRjb3Jl L2ZzL2JpbmZtdF9lbGYuYwotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2ZzL2JpbmZtdF9lbGYu YwlTdW4gTWF5ICA1IDIzOjM4OjAxIDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2ZzL2JpbmZt dF9lbGYuYwlXZWQgTWF5ICA4IDEyOjIyOjExIDIwMDIKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2lu Y2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxp bnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21t Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUg PGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGlu dXgvaGlnaHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Nt cF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9o aWdobWVtLmg+CkBAIC05NTgsNyArOTYwLDcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2lm ZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkdW1wX3JlZ3MoY29uc3QgY2hhciAqc3RyLCBlbGZfZ3Jl Z190ICpyKQorc3RhdGljIHZvaWQgZHVtcF9yZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxmX2dyZWdz ZXRfdCAqcikKIHsKIAlpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciAqcmVnc1tdID0geyAiZWJ4 IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIsICJlYnAiLApAQCAtMTAwNiw2ICsxMDA4LDE2 MyBAQAogI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCiAJaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9m ZikpKSBcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9l bGZfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MpCit7CisJbWVtY3B5KGVsZi0+ ZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKTsKKwllbGYtPmVfaWRlbnRbRUlfQ0xBU1NdID0gRUxG X0NMQVNTOworCWVsZi0+ZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOworCWVsZi0+ZV9pZGVu dFtFSV9WRVJTSU9OXSA9IEVWX0NVUlJFTlQ7CisJbWVtc2V0KGVsZi0+ZV9pZGVudCtFSV9QQUQs IDAsIEVJX05JREVOVC1FSV9QQUQpOworCisJZWxmLT5lX3R5cGUgPSBFVF9DT1JFOworCWVsZi0+ ZV9tYWNoaW5lID0gRUxGX0FSQ0g7CisJZWxmLT5lX3ZlcnNpb24gPSBFVl9DVVJSRU5UOworCWVs Zi0+ZV9lbnRyeSA9IDA7CisJZWxmLT5lX3Bob2ZmID0gc2l6ZW9mKHN0cnVjdCBlbGZoZHIpOwor CWVsZi0+ZV9zaG9mZiA9IDA7CisJZWxmLT5lX2ZsYWdzID0gMDsKKwllbGYtPmVfZWhzaXplID0g c2l6ZW9mKHN0cnVjdCBlbGZoZHIpOworCWVsZi0+ZV9waGVudHNpemUgPSBzaXplb2Yoc3RydWN0 IGVsZl9waGRyKTsKKwllbGYtPmVfcGhudW0gPSBzZWdzOworCWVsZi0+ZV9zaGVudHNpemUgPSAw OworCWVsZi0+ZV9zaG51bSA9IDA7CisJZWxmLT5lX3Noc3RybmR4ID0gMDsKKwlyZXR1cm47Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2VsZl9ub3RlX3BoZHIoc3RydWN0IGVsZl9waGRy ICpwaGRyLCBpbnQgc3osIG9mZl90IG9mZnNldCkKK3sKKwlwaGRyLT5wX3R5cGUgPSBQVF9OT1RF OworCXBoZHItPnBfb2Zmc2V0ID0gb2Zmc2V0OworCXBoZHItPnBfdmFkZHIgPSAwOworCXBoZHIt PnBfcGFkZHIgPSAwOworCXBoZHItPnBfZmlsZXN6ID0gc3o7CisJcGhkci0+cF9tZW1zeiA9IDA7 CisJcGhkci0+cF9mbGFncyA9IDA7CisJcGhkci0+cF9hbGlnbiA9IDA7CisJcmV0dXJuOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9ub3RlKHN0cnVjdCBtZW1lbGZub3RlICpub3RlLCBj b25zdCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgCisJCXVuc2lnbmVkIGludCBzeiwgdm9pZCAqZGF0 YSkKK3sKKwlub3RlLT5uYW1lID0gbmFtZTsKKwlub3RlLT50eXBlID0gdHlwZTsKKwlub3RlLT5k YXRhc3ogPSBzejsKKwlub3RlLT5kYXRhID0gZGF0YTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBm aWxsIHVwIGFsbCB0aGUgZmllbGRzIGluIHByc3RhdHVzIGZyb20gdGhlIGdpdmVuIHRhc2sgc3Ry dWN0LCBleGNlcHQgcmVnaXN0ZXJzCisgKiB3aGljaCBuZWVkIHRvIGJlIGZpbGxlZCB1cCBzZXBl cmF0ZWx5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9wcnN0YXR1cyhzdHJ1Y3QgZWxm X3Byc3RhdHVzICpwcnN0YXR1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBsb25nIHNpZ25yKSAK K3sKKwlwcnN0YXR1cy0+cHJfaW5mby5zaV9zaWdubyA9IHByc3RhdHVzLT5wcl9jdXJzaWcgPSBz aWducjsKKwlwcnN0YXR1cy0+cHJfc2lncGVuZCA9IHAtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsK KwlwcnN0YXR1cy0+cHJfc2lnaG9sZCA9IHAtPmJsb2NrZWQuc2lnWzBdOworCXByc3RhdHVzLT5w cl9waWQgPSBwLT5waWQ7CisJcHJzdGF0dXMtPnByX3BwaWQgPSBwLT5wYXJlbnQtPnBpZDsKKwlw cnN0YXR1cy0+cHJfcGdycCA9IHAtPnBncnA7CisJcHJzdGF0dXMtPnByX3NpZCA9IHAtPnNlc3Np b247CisJcHJzdGF0dXMtPnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MocC0+dGltZXMudG1z X3V0aW1lKTsKKwlwcnN0YXR1cy0+cHJfdXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRp bWVzLnRtc191dGltZSk7CisJcHJzdGF0dXMtPnByX3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1Mo cC0+dGltZXMudG1zX3N0aW1lKTsKKwlwcnN0YXR1cy0+cHJfc3RpbWUudHZfdXNlYyA9IENUX1RP X1VTRUNTKHAtPnRpbWVzLnRtc19zdGltZSk7CisJcHJzdGF0dXMtPnByX2N1dGltZS50dl9zZWMg PSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5wcl9jdXRpbWUu dHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5w cl9jc3RpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3N0aW1lKTsKKwlwcnN0 YXR1cy0+cHJfY3N0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfY3N0aW1l KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX3BzaW5mbyhzdHJ1Y3Qg ZWxmX3BycHNpbmZvICpwc2luZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgaTsK KwkKKwlwc2luZm8tPnByX3BpZCA9IHAtPnBpZDsKKwlwc2luZm8tPnByX3BwaWQgPSBwLT5wYXJl bnQtPnBpZDsKKwlwc2luZm8tPnByX3BncnAgPSBwLT5wZ3JwOworCXBzaW5mby0+cHJfc2lkID0g cC0+c2Vzc2lvbjsKKworCWkgPSBwLT5zdGF0ZSA/IGZmeih+cC0+c3RhdGUpICsgMSA6IDA7CisJ cHNpbmZvLT5wcl9zdGF0ZSA9IGk7CisJcHNpbmZvLT5wcl9zbmFtZSA9IChpIDwgMCB8fCBpID4g NSkgPyAnLicgOiAiUlNEWlREIltpXTsKKwlwc2luZm8tPnByX3pvbWIgPSBwc2luZm8tPnByX3Nu YW1lID09ICdaJzsKKwlwc2luZm8tPnByX25pY2UgPSAgdGFza19uaWNlKHApOworCXBzaW5mby0+ cHJfZmxhZyA9IHAtPmZsYWdzOworCXBzaW5mby0+cHJfdWlkID0gTkVXX1RPX09MRF9VSUQocC0+ dWlkKTsKKwlwc2luZm8tPnByX2dpZCA9IE5FV19UT19PTERfR0lEKHAtPmdpZCk7CisJc3RybmNw eShwc2luZm8tPnByX2ZuYW1lLCBwLT5jb21tLCBzaXplb2YocHNpbmZvLT5wcl9mbmFtZSkpOwor CXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHZhcmlhYmxlIHRoYXQgY2FuIGJlIHNl dCBpbiBwcm9jIHRvIGRldGVybWluZSBpZiB3ZSB3YW50IHRvCisgKiBkdW1wIGEgbXVsdGl0aHJl YWRlZCBjb3JlIG9yIG5vdC4gQSB2YWx1ZSBvZiAxIG1lYW5zIHllcyB3aGlsZSBhbnkKKyAqIG90 aGVyIHZhbHVlIG1lYW5zIG5vLgorICoKKyAqIEl0IGlzIGxvY2F0ZWQgYXQgL3Byb2Mvc3lzL2tl cm5lbC9jb3JlX2R1bXBzX3RocmVhZHMKKyAqLworZXh0ZXJuIGludCBjb3JlX2R1bXBzX3RocmVh ZHM7CisKKy8qIEhlcmUgaXMgdGhlIHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMgb2YgZWFjaCB0 aHJlYWQgaXMgY2FwdHVyZWQuICovCitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMKK3sKKwlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRf UFJTVEFUVVMgKi8KKwllbGZfZnByZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCisJZWxm X2ZweHJlZ3NldF90IHhmcHU7CQkvKiBOVF9QUlhGUFJFRyAqLworCXN0cnVjdCBtZW1lbGZub3Rl IG5vdGVzWzNdOworCWludCBudW1fbm90ZXM7Cit9OworCisvKgorICogSW4gb3JkZXIgdG8gYWRk IHRoZSBzcGVjaWZpYyB0aHJlYWQgaW5mb3JtYXRpb24gZm9yIHRoZSBlbGYgZmlsZSBmb3JtYXQs CisgKiB3ZSBuZWVkIHRvIGtlZXAgYSBsaW5rZWQgbGlzdCBvZiBldmVyeSB0aHJlYWRzIHByX3N0 YXR1cyBhbmQgdGhlbgorICogY3JlYXRlIGEgc2luZ2xlIHNlY3Rpb24gZm9yIHRoZW0gaW4gdGhl IGZpbmFsIGNvcmUgZmlsZS4KKyAqLworc3RhdGljIGludCBlbGZfZHVtcF90aHJlYWRfc3RhdHVz KGxvbmcgc2lnbnIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBsaXN0X2hlYWQgKiB0 aHJlYWRfbGlzdCkKK3sKKworCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdDsKKwlpbnQgc3og PSAwOworCisJdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0KSB7 CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRocmVh ZCBzdGF0dXMuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnQtPmxp c3QpOworCXQtPm51bV9ub3RlcyA9IDA7CisKKwlmaWxsX3Byc3RhdHVzKCZ0LT5wcnN0YXR1cywg cCwgc2lnbnIpOworCWVsZl9jb3JlX2NvcHlfdGFza19yZWdzKHAsICZ0LT5wcnN0YXR1cy5wcl9y ZWcpOwkKKwlmaWxsX25vdGUoJnQtPm5vdGVzWzBdLCAiQ09SRSIsIE5UX1BSU1RBVFVTLCBzaXpl b2YodC0+cHJzdGF0dXMpLCAmKHQtPnByc3RhdHVzKSk7CisJdC0+bnVtX25vdGVzKys7CisJc3og Kz0gbm90ZXNpemUoJnQtPm5vdGVzWzBdKTsKKworCWlmICgodC0+cHJzdGF0dXMucHJfZnB2YWxp ZCA9IGVsZl9jb3JlX2NvcHlfdGFza19mcHJlZ3MocCwgJnQtPmZwdSkpKSB7CisJCWZpbGxfbm90 ZSgmdC0+bm90ZXNbMV0sICJDT1JFIiwgTlRfUFJGUFJFRywgc2l6ZW9mKHQtPmZwdSksICYodC0+ ZnB1KSk7CisJCXQtPm51bV9ub3RlcysrOworCQlzeiArPSBub3Rlc2l6ZSgmdC0+bm90ZXNbMV0p OworCX0KKworCWlmIChlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhwLCAmdC0+eGZwdSkpIHsK KwkJZmlsbF9ub3RlKCZ0LT5ub3Rlc1syXSwgIkxJTlVYIiwgTlRfUFJYRlBSRUcsIHNpemVvZih0 LT54ZnB1KSwgJih0LT54ZnB1KSk7CisJCXQtPm51bV9ub3RlcysrOworCQlzeiArPSBub3Rlc2l6 ZSgmdC0+bm90ZXNbMl0pOworCX0KKwkKKwlsaXN0X2FkZCgmdC0+bGlzdCwgdGhyZWFkX2xpc3Qp OworCXJldHVybiBzejsKK30KKworCisKIC8qCiAgKiBBY3R1YWwgZHVtcGVyCiAgKgpAQCAtMTAy NCwxMiArMTE4MywzMCBAQAogCXN0cnVjdCBlbGZoZHIgZWxmOwogCW9mZl90IG9mZnNldCA9IDAs IGRhdGFvZmY7CiAJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGN1cnJlbnQtPnJsaW1bUkxJTUlUX0NP UkVdLnJsaW1fY3VyOwotCWludCBudW1ub3RlID0gNDsKLQlzdHJ1Y3QgbWVtZWxmbm90ZSBub3Rl c1s0XTsKKwlpbnQgbnVtbm90ZSA9IDU7CisJc3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbNV07CiAJ c3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRfUFJTVEFUVVMgKi8KLQllbGZfZnBy ZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCiAJc3RydWN0IGVsZl9wcnBzaW5mbyBwc2lu Zm87CS8qIE5UX1BSUFNJTkZPICovCisgCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKyAJTElTVF9I RUFEKHRocmVhZF9saXN0KTsKKyAJc3RydWN0IGxpc3RfaGVhZCAqdDsKKwllbGZfZnByZWdzZXRf dCBmcHU7CisJZWxmX2ZweHJlZ3NldF90IHhmcHU7CisJaW50IGR1bXBfdGhyZWFkcyA9IGNvcmVf ZHVtcHNfdGhyZWFkczsgLyogdGhpcyB2YWx1ZSBzaG91bGQgbm90IGNoYW5nZSBvbmNlIHRoZSAq LworCQkJCQkvKiBkdW1waW5nIHN0YXJ0cyAqLworCWludCB0aHJlYWRfc3RhdHVzX3NpemUgPSAw OworCQogCisJLyogRmlyc3QgcGF1c2UgYWxsIHJlbGF0ZWQgdGhyZWFkZWQgcHJvY2Vzc2VzICov CisJaWYgKGR1bXBfdGhyZWFkcykJeworCQlzdXNwZW5kX3RocmVhZHMoKTsKKwl9CisJCisJLyog bm93IHN0b3AgYWxsIHZtIG9wZXJhdGlvbnMgKi8KKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+ bW1hcF9zZW0pOworCXNlZ3MgPSBjdXJyZW50LT5tbS0+bWFwX2NvdW50OworCisJCiAJLyogZmly c3QgY29weSB0aGUgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgKi8KIAltZW1zZXQoJnBzaW5m bywgMCwgc2l6ZW9mKHBzaW5mbykpOwogCXsKQEAgLTEwNjMsMzUgKzEyNDAsMzIgQEAKIAllbHNl CiAJCSooc3RydWN0IHB0X3JlZ3MgKikmcHJzdGF0dXMucHJfcmVnID0gKnJlZ3M7CiAjZW5kaWYK KyAKKwlpZiAoZHVtcF90aHJlYWRzKSB7CisJCS8qIGNhcHR1cmUgdGhlIHN0YXR1cyBvZiBhbGwg b3RoZXIgdGhyZWFkcyAqLworCQlpZiAoc2lnbnIpIHsKKwkJCXJlYWRfbG9jaygmdGFza2xpc3Rf bG9jayk7CisJCQlmb3JfZWFjaF90YXNrKHApCisJCQkJaWYgKGN1cnJlbnQtPm1tID09IHAtPm1t ICYmIGN1cnJlbnQgIT0gcCkgeworCQkJCQlpbnQgc3ogPSBlbGZfZHVtcF90aHJlYWRfc3RhdHVz KHNpZ25yLCBwLCAmdGhyZWFkX2xpc3QpOworCQkJCQlpZiAoIXN6KSB7CisJCQkJCQlyZWFkX3Vu bG9jaygmdGFza2xpc3RfbG9jayk7CisJCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJCX0KKwkJCQkJ ZWxzZQorCQkJCQkJdGhyZWFkX3N0YXR1c19zaXplICs9IHN6OworCQkJCX0KKwkJCXJlYWRfdW5s b2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJfQorCX0gLyogRW5kIGlmKGR1bXBfdGhyZWFkcykgKi8K IAotCS8qIG5vdyBzdG9wIGFsbCB2bSBvcGVyYXRpb25zICovCi0JZG93bl93cml0ZSgmY3VycmVu dC0+bW0tPm1tYXBfc2VtKTsKLQlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKIAogI2lm ZGVmIERFQlVHCiAJcHJpbnRrKCJlbGZfY29yZV9kdW1wOiAlZCBzZWdzICVsdSBsaW1pdFxuIiwg c2VncywgbGltaXQpOwogI2VuZGlmCiAKIAkvKiBTZXQgdXAgaGVhZGVyICovCi0JbWVtY3B5KGVs Zi5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpOwotCWVsZi5lX2lkZW50W0VJX0NMQVNTXSA9IEVM Rl9DTEFTUzsKLQllbGYuZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOwotCWVsZi5lX2lkZW50 W0VJX1ZFUlNJT05dID0gRVZfQ1VSUkVOVDsKLQltZW1zZXQoZWxmLmVfaWRlbnQrRUlfUEFELCAw LCBFSV9OSURFTlQtRUlfUEFEKTsKLQotCWVsZi5lX3R5cGUgPSBFVF9DT1JFOwotCWVsZi5lX21h Y2hpbmUgPSBFTEZfQVJDSDsKLQllbGYuZV92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKLQllbGYuZV9l bnRyeSA9IDA7Ci0JZWxmLmVfcGhvZmYgPSBzaXplb2YoZWxmKTsKLQllbGYuZV9zaG9mZiA9IDA7 Ci0JZWxmLmVfZmxhZ3MgPSAwOwotCWVsZi5lX2Voc2l6ZSA9IHNpemVvZihlbGYpOwotCWVsZi5l X3BoZW50c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwotCWVsZi5lX3BobnVtID0gc2Vn cysxOwkJLyogSW5jbHVkZSBub3RlcyAqLwotCWVsZi5lX3NoZW50c2l6ZSA9IDA7Ci0JZWxmLmVf c2hudW0gPSAwOwotCWVsZi5lX3Noc3RybmR4ID0gMDsKKwlmaWxsX2VsZl9oZWFkZXIoJmVsZiwg c2VncysxKTsgLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24qLwogCiAJZnMgPSBnZXRfZnMoKTsK IAlzZXRfZnMoS0VSTkVMX0RTKTsKQEAgLTExMDgsNjQgKzEyODIsMzUgQEAKIAkgKiB3aXRoIGlu Zm8gZnJvbSB0aGVpciAvcHJvYy4KIAkgKi8KIAotCW5vdGVzWzBdLm5hbWUgPSAiQ09SRSI7Ci0J bm90ZXNbMF0udHlwZSA9IE5UX1BSU1RBVFVTOwotCW5vdGVzWzBdLmRhdGFzeiA9IHNpemVvZihw cnN0YXR1cyk7Ci0Jbm90ZXNbMF0uZGF0YSA9ICZwcnN0YXR1czsKLQlwcnN0YXR1cy5wcl9pbmZv LnNpX3NpZ25vID0gcHJzdGF0dXMucHJfY3Vyc2lnID0gc2lnbnI7Ci0JcHJzdGF0dXMucHJfc2ln cGVuZCA9IGN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsKLQlwcnN0YXR1cy5wcl9zaWdo b2xkID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0JcHNpbmZvLnByX3BpZCA9IHByc3RhdHVz LnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlwc2luZm8ucHJfcHBpZCA9IHByc3RhdHVzLnByX3Bw aWQgPSBjdXJyZW50LT5wYXJlbnQtPnBpZDsKLQlwc2luZm8ucHJfcGdycCA9IHByc3RhdHVzLnBy X3BncnAgPSBjdXJyZW50LT5wZ3JwOwotCXBzaW5mby5wcl9zaWQgPSBwcnN0YXR1cy5wcl9zaWQg PSBjdXJyZW50LT5zZXNzaW9uOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NF Q1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl91dGltZS50dl91c2Vj ID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9z dGltZS50dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19zdGltZSk7Ci0JcHJz dGF0dXMucHJfc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19z dGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+ dGltZXMudG1zX2N1dGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9UT19V U0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9jc3RpbWUudHZf c2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3N0aW1lKTsKLQlwcnN0YXR1cy5w cl9jc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jc3RpbWUp OworCQorCWZpbGxfcHJzdGF0dXMoJnByc3RhdHVzLCBjdXJyZW50LCBzaWducik7CisJZmlsbF9u b3RlKCZub3Rlc1swXSwgIkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHByc3RhdHVzKSwgJnBy c3RhdHVzKTsKKwkKKwllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7 CisgCQorCWZpbGxfcHNpbmZvKCZwc2luZm8sIGN1cnJlbnQpOworCWZpbGxfbm90ZSgmbm90ZXNb MV0sICJDT1JFIiwgTlRfUFJQU0lORk8sIHNpemVvZihwc2luZm8pLCAmcHNpbmZvKTsKKwkKKwlm aWxsX25vdGUoJm5vdGVzWzJdLCAiQ09SRSIsIE5UX1RBU0tTVFJVQ1QsIHNpemVvZigqY3VycmVu dCksIGN1cnJlbnQpOworICAKKyAgCS8qIFRyeSB0byBkdW1wIHRoZSBGUFUuICovCisJaWYgKChw cnN0YXR1cy5wcl9mcHZhbGlkID0gZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhjdXJyZW50LCAm ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZub3Rlc1szXSwgIkNPUkUiLCBOVF9QUkZQUkVHLCBzaXpl b2YoZnB1KSwgJmZwdSk7CisJfSBlbHNlIHsKKwkJLS1udW1ub3RlOworIAl9CisJaWYgKGVsZl9j b3JlX2NvcHlfdGFza194ZnByZWdzKGN1cnJlbnQsICZ4ZnB1KSkgeworCQlmaWxsX25vdGUoJm5v dGVzWzRdLCAiTElOVVgiLCBOVF9QUlhGUFJFRywgc2l6ZW9mKHhmcHUpLCAmeGZwdSk7CisJfSBl bHNlIHsKKwkJLS1udW1ub3RlOworCX0KKyAgCQogCiAjaWZkZWYgREVCVUcKIAlkdW1wX3JlZ3Mo IlBhc3NlZCBpbiByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsKIAlkdW1wX3JlZ3MoInByc3Rh dHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9yZWcpOwogI2VuZGlmCiAKLQlu b3Rlc1sxXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUgPSBOVF9QUlBTSU5GTzsKLQlu b3Rlc1sxXS5kYXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rlc1sxXS5kYXRhID0gJnBzaW5m bzsKLQlpID0gY3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQtPnN0YXRlKSArIDEgOiAwOwot CXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1 KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21iID0gcHNpbmZvLnByX3NuYW1l ID09ICdaJzsKLQlwc2luZm8ucHJfbmljZSA9IHRhc2tfbmljZShjdXJyZW50KTsKLQlwc2luZm8u cHJfZmxhZyA9IGN1cnJlbnQtPmZsYWdzOwotCXBzaW5mby5wcl91aWQgPSBORVdfVE9fT0xEX1VJ RChjdXJyZW50LT51aWQpOwotCXBzaW5mby5wcl9naWQgPSBORVdfVE9fT0xEX0dJRChjdXJyZW50 LT5naWQpOwotCXN0cm5jcHkocHNpbmZvLnByX2ZuYW1lLCBjdXJyZW50LT5jb21tLCBzaXplb2Yo cHNpbmZvLnByX2ZuYW1lKSk7Ci0KLQlub3Rlc1syXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzJd LnR5cGUgPSBOVF9UQVNLU1RSVUNUOwotCW5vdGVzWzJdLmRhdGFzeiA9IHNpemVvZigqY3VycmVu dCk7Ci0Jbm90ZXNbMl0uZGF0YSA9IGN1cnJlbnQ7Ci0KLQkvKiBUcnkgdG8gZHVtcCB0aGUgRlBV LiAqLwotCXByc3RhdHVzLnByX2ZwdmFsaWQgPSBkdW1wX2ZwdSAocmVncywgJmZwdSk7Ci0JaWYg KCFwcnN0YXR1cy5wcl9mcHZhbGlkKQotCXsKLQkJbnVtbm90ZS0tOwotCX0KLQllbHNlCi0Jewot CQlub3Rlc1szXS5uYW1lID0gIkNPUkUiOwotCQlub3Rlc1szXS50eXBlID0gTlRfUFJGUFJFRzsK LQkJbm90ZXNbM10uZGF0YXN6ID0gc2l6ZW9mKGZwdSk7Ci0JCW5vdGVzWzNdLmRhdGEgPSAmZnB1 OwotCX0KLQkKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICovCiAJewogCQlzdHJ1Y3QgZWxm X3BoZHIgcGhkcjsKQEAgLTExNzMsMTcgKzEzMTgsMTIgQEAKIAogCQlmb3IoaSA9IDA7IGkgPCBu dW1ub3RlOyBpKyspCiAJCQlzeiArPSBub3Rlc2l6ZSgmbm90ZXNbaV0pOworCQkKKwkJaWYgKGR1 bXBfdGhyZWFkcykKKwkJCXN6ICs9IHRocmVhZF9zdGF0dXNfc2l6ZTsKIAotCQlwaGRyLnBfdHlw ZSA9IFBUX05PVEU7Ci0JCXBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7Ci0JCXBoZHIucF92YWRkciA9 IDA7Ci0JCXBoZHIucF9wYWRkciA9IDA7Ci0JCXBoZHIucF9maWxlc3ogPSBzejsKLQkJcGhkci5w X21lbXN6ID0gMDsKLQkJcGhkci5wX2ZsYWdzID0gMDsKLQkJcGhkci5wX2FsaWduID0gMDsKLQot CQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKKwkJZmlsbF9lbGZfbm90ZV9waGRyKCZwaGRyLCBz eiwgb2Zmc2V0KTsKKwkJb2Zmc2V0ICs9IHN6OwogCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2Yo cGhkcikpOwogCX0KIApAQCAtMTIxMiwxMCArMTM1MiwyMSBAQAogCQlEVU1QX1dSSVRFKCZwaGRy LCBzaXplb2YocGhkcikpOwogCX0KIAorIAkvKiB3cml0ZSBvdXQgdGhlIG5vdGVzIHNlY3Rpb24g Ki8KIAlmb3IoaSA9IDA7IGkgPCBudW1ub3RlOyBpKyspCiAJCWlmICghd3JpdGVub3RlKCZub3Rl c1tpXSwgZmlsZSkpCiAJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAorCS8qIHdyaXRlIG91dCB0aGUg dGhyZWFkIHN0YXR1cyBub3RlcyBzZWN0aW9uICovCisgCWlmIChkdW1wX3RocmVhZHMpICB7CisJ CWxpc3RfZm9yX2VhY2godCwgJnRocmVhZF9saXN0KSB7CisJCQlzdHJ1Y3QgZWxmX3RocmVhZF9z dGF0dXMgKnRtcCA9IGxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0 KTsKKwkJCWZvciAoaSA9IDA7IGkgPCB0bXAtPm51bV9ub3RlczsgaSsrKQorCQkJCWlmICghd3Jp dGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBmaWxlKSkKKwkJCQkJZ290byBlbmRfY29yZWR1bXA7CisJ CX0KKyAJfQorIAogCURVTVBfU0VFSyhkYXRhb2ZmKTsKIAogCWZvcih2bWEgPSBjdXJyZW50LT5t bS0+bW1hcDsgdm1hICE9IE5VTEw7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewpAQCAtMTI1OSwxMSAr MTQxMCwyNCBAQAogCQkgICAgICAgKG9mZl90KSBmaWxlLT5mX3Bvcywgb2Zmc2V0KTsKIAl9CiAK LSBlbmRfY29yZWR1bXA6CitlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKKworY2xlYW51cDoK KwlpZiAoZHVtcF90aHJlYWRzKSAgeworCQl3aGlsZSghbGlzdF9lbXB0eSgmdGhyZWFkX2xpc3Qp KSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSB0aHJlYWRfbGlzdC5uZXh0OworCQkJbGlz dF9kZWwodG1wKTsKKwkJCWtmcmVlKGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZWxmX3RocmVhZF9z dGF0dXMsIGxpc3QpKTsKKwkJfQorCisJCXJlc3VtZV90aHJlYWRzKCk7CisJfQorCiAJdXBfd3Jp dGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGhhc19kdW1wZWQ7CiB9CisKICNl bmRpZgkJLyogVVNFX0VMRl9DT1JFX0RVTVAgKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9l bGZfYmluZm10KHZvaWQpCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmls bGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBsaW51eDIuNS4xNC50Y29yZS9pbmNsdWRlL2FzbS1p Mzg2L2VsZi5oCi0tLSBsaW51eC0yLjUuMTQudmFubmlsbGEvaW5jbHVkZS9hc20taTM4Ni9lbGYu aAlNb24gTWF5ICA2IDE2OjI3OjM4IDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUv YXNtLWkzODYvZWxmLmgJVHVlIE1heSAgNyAxNTowMToyMSAyMDAyCkBAIC05OSw2ICs5OSwxNiBA QAogCiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3My KSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisKKworZXh0ZXJu IGludCBkdW1wX3Rhc2tfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdz ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3Ry dWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CitleHRlcm4gaW50IGR1bXBfdGFza19leHRlbmRlZF9m cHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCAqKTsKKwor I2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0c2ssIHB0X3JlZ3MpIGR1bXBfdGFza19y ZWdzKHRzaywgcHRfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZf ZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKKyNkZWZpbmUgRUxGX0NPUkVf Q09QWV9YRlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFza19leHRlbmRlZF9mcHUodHNr LCBlbGZfeGZwcmVncykKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC11ck4gLVggZG9udGRpZmYg bGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvZWxmLmggbGludXgyLjUuMTQudGNv cmUvaW5jbHVkZS9saW51eC9lbGYuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUv bGludXgvZWxmLmgJTW9uIE1heSAgNiAxNjoyNzozOCAyMDAyCisrKyBsaW51eDIuNS4xNC50Y29y ZS9pbmNsdWRlL2xpbnV4L2VsZi5oCVR1ZSBNYXkgIDcgMTU6MjI6NTUgMjAwMgpAQCAtNTc2LDYg KzU3Niw5IEBACiAjZGVmaW5lIE5UX1BSUFNJTkZPCTMKICNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0 CiAjZGVmaW5lIE5UX1BSRlBYUkVHCTIwCisjZGVmaW5lIE5UX1BSWEZQUkVHICAgICAweDQ2ZTYy YjdmCS8qIG5vdGUgbmFtZSBtdXN0IGJlICJMSU5VWCIgYXMgcGVyIEdEQiAqLworCQkJCQkvKiBm cm9tIGdkYjUuMS9pbmNsdWRlL2VsZi9jb21tb24uaCAqLworCiAKIC8qIE5vdGUgaGVhZGVyIGlu IGEgUFRfTk9URSBzZWN0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBlbGYzMl9ub3RlIHsKZGlmZiAt dXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4xNC52YW5uaWxsYS9pbmNsdWRlL2xpbnV4L2VsZmNv cmUuaCBsaW51eDIuNS4xNC50Y29yZS9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaAotLS0gbGludXgt Mi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvZWxmY29yZS5oCU1vbiBNYXkgIDYgMTY6Mjc6 MzggMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgJVHVl IE1heSAgNyAxNTowNTowMSAyMDAyCkBAIC04Niw0ICs4Niw1NSBAQAogI2RlZmluZSBQUkFSR1Na IEVMRl9QUkFSR1NaIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdGF0aWMgaW5saW5l IHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfUkVHUworCUVMRl9DT1JFX0NP UFlfUkVHUygoKmVsZnJlZ3MpLCByZWdzKQorI2Vsc2UKKwlpZiAoc2l6ZW9mKGVsZl9ncmVnc2V0 X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpIHsKKwkJcHJpbnRrKCJzaXplb2YoZWxmX2dy ZWdzZXRfdCkgKCVsZCkgIT0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAoJWxkKVxuIiwKKwkJCShs b25nKXNpemVvZihlbGZfZ3JlZ3NldF90KSwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7 CisJfSBlbHNlCisJCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7CisjZW5kaWYK K30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRh c2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKQoreworI2lmZGVmIEVMRl9DT1JF X0NPUFlfVEFTS19SRUdTCisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwkKKwlpZiAoRUxGX0NPUkVf Q09QWV9UQVNLX1JFR1ModCwgJnJlZ3MpKSB7CisJCWVsZl9jb3JlX2NvcHlfcmVncyhlbGZyZWdz LCAmcmVncyk7CisJCXJldHVybiAxOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitleHRl cm4gaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKKwor c3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhzdHJ1Y3QgdGFza19z dHJ1Y3QgKnQsIGVsZl9mcHJlZ3NldF90ICpmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9G UFJFR1MKKwlyZXR1cm4gRUxGX0NPUkVfQ09QWV9GUFJFR1ModCwgZnB1KTsKKyNlbHNlCisJcmV0 dXJuIGR1bXBfZnB1KE5VTEwsIGZwdSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQg ZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZnB4 cmVnc2V0X3QgKnhmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdTCisJcmV0dXJu IEVMRl9DT1JFX0NPUFlfWEZQUkVHUyh0LCB4ZnB1KTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5k aWYKK30KKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKICNlbmRpZiAvKiBfTElOVVhf RUxGQ09SRV9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmlsbGEv aW5jbHVkZS9saW51eC9zY2hlZC5oIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUvbGludXgvc2No ZWQuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvc2NoZWQuaAlNb24g TWF5ICA2IDE2OjQwOjE5IDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUvbGludXgv c2NoZWQuaAlUdWUgTWF5ICA3IDE0OjQ0OjA5IDIwMDIKQEAgLTEzMCw2ICsxMzAsMTIgQEAKIAog I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKKworLyogZnVuY3Rpb25zIGZvciBwYXVzaW5n IGFuZCByZXN1bW1pbmcgZnVuY3Rpb25zIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNpbmcgc2lnbmFs cyAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF90aHJlYWRzKCB2b2lkICk7CitleHRlcm4gdm9pZCBy ZXN1bWVfdGhyZWFkcyggdm9pZCApOworCisKIC8qCiAgKiBUaGlzIHNlcmlhbGl6ZXMgInNjaGVk dWxlKCkiIGFuZCBhbHNvIHByb3RlY3RzCiAgKiB0aGUgcnVuLXF1ZXVlIGZyb20gZGVsZXRpb25z L21vZGlmaWNhdGlvbnMgKGJ1dApkaWZmIC11ck4gLVggZG9udGRpZmYgbGludXgtMi41LjE0LnZh bm5pbGxhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggbGludXgyLjUuMTQudGNvcmUvaW5jbHVkZS9s aW51eC9zeXNjdGwuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvc3lz Y3RsLmgJTW9uIE1heSAgNiAxNjoyNjoxOCAyMDAyCisrKyBsaW51eDIuNS4xNC50Y29yZS9pbmNs dWRlL2xpbnV4L3N5c2N0bC5oCVR1ZSBNYXkgIDcgMTQ6NDQ6MTEgMjAwMgpAQCAtODcsNiArODcs NyBAQAogCUtFUk5fQ0FQX0JTRVQ9MTQsCS8qIGludDogY2FwYWJpbGl0eSBib3VuZGluZyBzZXQg Ki8KIAlLRVJOX1BBTklDPTE1LAkJLyogaW50OiBwYW5pYyB0aW1lb3V0ICovCiAJS0VSTl9SRUFM Uk9PVERFVj0xNiwJLyogcmVhbCByb290IGRldmljZSB0byBtb3VudCBhZnRlciBpbml0cmQgKi8K KwlLRVJOX0NPUkVfRFVNUFNfVEhSRUFEUz0xNywgLyogaW50OiBpbmNsdWRlIHN0YXR1cyBvZiBv dGhlcnMgdGhyZWFkcyBpbiBkdW1wICovCiAKIAlLRVJOX1NQQVJDX1JFQk9PVD0yMSwJLyogcmVi b290IGNvbW1hbmQgb24gU3BhcmMgKi8KIAlLRVJOX0NUTEFMVERFTD0yMiwJLyogaW50OiBhbGxv dyBjdGwtYWx0LWRlbCB0byByZWJvb3QgKi8KZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIu NS4xNC52YW5uaWxsYS9rZXJuZWwvc2NoZWQuYyBsaW51eDIuNS4xNC50Y29yZS9rZXJuZWwvc2No ZWQuYwotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2tlcm5lbC9zY2hlZC5jCVN1biBNYXkgIDUg MjM6Mzc6NTcgMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUva2VybmVsL3NjaGVkLmMJVGh1IE1h eSAgOSAwOToyNjozMCAyMDAyCkBAIC0xNTQsNyArMTU0LDggQEAKIAlsaXN0X3QgbWlncmF0aW9u X3F1ZXVlOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcnVucXVl dWUgcnVucXVldWVzW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgc3RydWN0 IHJ1bnF1ZXVlIHJ1bnF1ZXVlc1tOUl9DUFVTICsgMV0gX19jYWNoZWxpbmVfYWxpZ25lZDsKKyNk ZWZpbmUgUEhBTlRPTV9DUFUgTlJfQ1BVUwogCiAjZGVmaW5lIGNwdV9ycShjcHUpCQkocnVucXVl dWVzICsgKGNwdSkpCiAjZGVmaW5lIHRoaXNfcnEoKQkJY3B1X3JxKHNtcF9wcm9jZXNzb3JfaWQo KSkKQEAgLTI2Myw2ICsyNjQsOSBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgbmVlZF9yZXNj aGVkLCBucnBvbGxpbmc7CiAKKwlpZiggdW5saWtlbHkoIXAtPmNwdXNfYWxsb3dlZCkgKQorCQkJ cmV0dXJuOworCQkJCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJLyogbWluaW1pc2UgdGhlIGNoYW5j ZSBvZiBzZW5kaW5nIGFuIGludGVycnVwdCB0byBwb2xsX2lkbGUoKSAqLwogCW5ycG9sbGluZyA9 IHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsVElGX1BPTExJTkdfTlJGTEFHKTsKQEAgLTI3Myw2ICsy NzcsOSBAQAogCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAtPnRocmVhZF9pbmZvLT5jcHUpOwogCXBy ZWVtcHRfZW5hYmxlKCk7CiAjZWxzZQorCS8vIGRvIHdlIG5lZWQgdGhlIGNwdXNfYWxsb3dlZCB0 ZXN0IGhlcmUgZm9yIGNvcmVfZHVtcHNfdGhyZWFkcz8KKwkvL2lmKCB1bmxpa2VseSghcC0+Y3B1 c19hbGxvd2VkKSByZXR1cm47IC8vID8KKwkKIAlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKICNl bmRpZgogfQpAQCAtMzM5LDcgKzM0Niw3IEBACiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJ aWYgKCFwLT5hcnJheSkgewogCQlhY3RpdmF0ZV90YXNrKHAsIHJxKTsKLQkJaWYgKHAtPnByaW8g PCBycS0+Y3Vyci0+cHJpbykKKwkJaWYgKHAtPmNwdXNfYWxsb3dlZCAmJiAocC0+cHJpbyA8IHJx LT5jdXJyLT5wcmlvKSApCiAJCQlyZXNjaGVkX3Rhc2socnEtPmN1cnIpOwogCQlzdWNjZXNzID0g MTsKIAl9CkBAIC05OTYsNiArMTAwMywxMzUgQEAKIAogdm9pZCBzY2hlZHVsaW5nX2Z1bmN0aW9u c19lbmRfaGVyZSh2b2lkKSB7IH0KIAorLyoKKyAqIG5lZWRlZCBmb3IgYWNjdXJhdGUgY29yZSBk dW1wcyBvZiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisgKiBzZWUgYmluZm10X2VsZi5j IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCByZXNjaGVkdWxlX290aGVy X2NwdXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGksIGNwdTsKKwlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnA7CisKKwlmb3IoaT0wOyBpPCBzbXBfbnVtX2NwdXM7IGkrKykgeworCQlj cHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CisJCXAgPSBjcHVfY3VycihjcHUpOworCQlpZiAocC0+ dGhyZWFkX2luZm8tPmNwdSE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQkJc2V0X3Rza19uZWVk X3Jlc2NoZWQocCk7CisJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAtPnRocmVhZF9pbmZvLT5jcHUp OworCQl9CisJfQorI2VuZGlmCQorCXJldHVybjsKK30KKworCisvKiBmdW5jdGlvbnMgZm9yIHBh dXNpbmcgYW5kIHJlc3VtbWluZyBmdW5jdGlvbnMgd2l0aCBvdXQgdXNpbmcgc2lnbmFscyAqLwor dm9pZCBzdXNwZW5kX3RocmVhZHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJ1 bnF1ZXVlX3QgKnBoYW50b21ROworCXRhc2tfdCAqdGhyZWFkc1tOUl9DUFVTXSwgKnA7CisJaW50 IGksIE9uQ1BVQ291bnQgPSAwOworCisvLworLy8gZ3JhYiBhbGwgdGhlIHJxX2xvY2tzLgorLy8g Y3VycmVudCBpcyB0aGUgcHJvY2VzcyBkdW1waW5nIGNvcmUKKy8vICAKKworCXByZWVtcHRfZGlz YWJsZSgpOworCQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvcihpPTA7IGk8IHNtcF9u dW1fY3B1czsgaSsrKSB7CisJCXNwaW5fbG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlj dXJyZW50LT5jcHVzX2FsbG93ZWQgPSAxVUwgPDwgY3VycmVudC0+dGhyZWFkX2luZm8tPmNwdTsK KwkvLyBwcmV2ZW50IG1pZ3JhaW9uIG9mIGR1bXBpbmcgcHJvY2VzcyBtYWtpbmcgbGlmZSBjb21w bGljYXRlZC4KKworCXBoYW50b21RID0gY3B1X3JxKFBIQU5UT01fQ1BVKTsgCisJc3Bpbl9sb2Nr KCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVzY2hlZHVsZV9vdGhlcl9jcHVzKCk7CisJLy8gdGhp cyBpcyBhbiBvcHRpb25hbCBJUEksIGJ1dCBpdCBtYWtlcyBmb3IgdGhlIG1vc3QgYWNjdXJhdGUg Y29yZSBmaWxlcyBwb3NzaWJsZS4KKwkKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCisJ Zm9yX2VhY2hfdGFzayhwKSB7CisJCWlmIChjdXJyZW50LT5tbSA9PSBwLT5tbSAmJiBjdXJyZW50 ICE9IHApIHsKKwkJCWlmKCBwID09IHRhc2tfcnEocCktPmN1cnIgKSB7CisJCQkJLy90aGVuIHJl bWVtYmVyIGl0IGZvciBsYXRlciB1cyBvZiBzZXRfY3B1c19hbGxvd2VkCisJCQkJdGhyZWFkc1tP bkNQVUNvdW50XSA9IHA7CisJCQkJcC0+Y3B1c19hbGxvd2VkID0gMDsvL3ByZXZlbnQgbG9hZCBi YWxhbmNlIGZyb20gbW92aW5nIHRoZXNlIGd1eXMuCisJCQkJT25DUFVDb3VudCArKzsKKwkJCX0g ZWxzZSB7CisJCQkJLy8gd2UgbWFudWFseSBtb3ZlIHRoZSBwcm9jZXNzIHRvIHRoZSBwaGFudG9t IHJ1biBxdWV1ZS4KKworCQkJCWlmIChwLT5hcnJheSkgeworCQkJCQlkZWFjdGl2YXRlX3Rhc2so cCwgdGFza19ycShwKSk7CisJCQkJCWFjdGl2YXRlX3Rhc2socCwgcGhhbnRvbVEpOworCQkJCX0K KwkJCQlwLT50aHJlYWRfaW5mby0+Y3B1ID0gUEhBTlRPTV9DUFU7CisJCQkJcC0+Y3B1c19hbGxv d2VkID0gMDsvL3ByZXZlbnQgbG9hZCBiYWxhbmNlIGZyb20gbW92aW5nIHRoZXNlIGd1eXMuCisJ CQl9CisJCX0KKwl9CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJc3Bpbl91bmxv Y2soJnBoYW50b21RLT5sb2NrKTsKKwlmb3IoaT1zbXBfbnVtX2NwdXMtMTsgMDw9IGk7IGktLSkg eworCQlzcGluX3VubG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVz dG9yZShmbGFncyk7CisKKwlmb3IoIGkgPSAwOyBpPE9uQ1BVQ291bnQ7IGkrKykgeworCQlzZXRf Y3B1c19hbGxvd2VkKHRocmVhZHNbaV0sIDApOworCX0KKwkKK30KKwordm9pZCByZXN1bWVfdGhy ZWFkcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcnVucXVldWVfdCAqcGhhbnRv bVE7CisJdGFza190ICpwOworCWludCBpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXBo YW50b21RID0gY3B1X3JxKFBIQU5UT01fQ1BVKTsKKworCWZvcihpPTA7IGk8IHNtcF9udW1fY3B1 czsgaSsrKSB7CisJCXNwaW5fbG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisJc3Bpbl9sb2Nr KCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlmb3Jf ZWFjaF90YXNrKHApIHsKKwkJaWYgKGN1cnJlbnQtPm1tID09IHAtPm1tICYmIGN1cnJlbnQgIT0g cCkgeworCQkJcC0+Y3B1c19hbGxvd2VkID0gMVVMIDw8IGN1cnJlbnQtPnRocmVhZF9pbmZvLT5j cHU7CisJCQlpZiAocC0+YXJyYXkpIHsKKwkJCQlkZWFjdGl2YXRlX3Rhc2socCxwaGFudG9tUSk7 CisJCQkJYWN0aXZhdGVfdGFzayhwLCB0YXNrX3JxKGN1cnJlbnQpKTsKKwkJCX0KKwkJCXAtPnRo cmVhZF9pbmZvLT5jcHUgPSBjdXJyZW50LT50aHJlYWRfaW5mby0+Y3B1OworCQl9CisJfQorCisJ cmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJc3Bpbl91bmxvY2soJnBoYW50b21RLT5s b2NrKTsKKwlmb3IoaT1zbXBfbnVtX2NwdXMtMTsgMDw9IGk7IGktLSkgeworCQlzcGluX3VubG9j aygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJ cHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworfQorCisKKwogdm9pZCBzZXRfdXNlcl9uaWNl KHRhc2tfdCAqcCwgbG9uZyBuaWNlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTgy LDExICsxNzE4LDExIEBACiB7CiAJcnVucXVldWVfdCAqcnE7CiAJaW50IGksIGosIGs7CisJcHJp b19hcnJheV90ICphcnJheTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJ cnVucXVldWVfdCAqcnEgPSBjcHVfcnEoaSk7Ci0JCXByaW9fYXJyYXlfdCAqYXJyYXk7CiAKKwlm b3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCXJxID0gY3B1X3JxKGkpOwogCQlycS0+ YWN0aXZlID0gcnEtPmFycmF5czsKIAkJcnEtPmV4cGlyZWQgPSBycS0+YXJyYXlzICsgMTsKIAkJ c3Bpbl9sb2NrX2luaXQoJnJxLT5sb2NrKTsKQEAgLTE2MDMsNiArMTczOSwyOCBAQAogCQkJX19z ZXRfYml0KE1BWF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAkJfQogCX0KKworIAorCWkgPSBQSEFO VE9NX0NQVTsKKwlycSA9IGNwdV9ycShpKTsKKwlycS0+YWN0aXZlID0gcnEtPmFycmF5czsKKwly cS0+ZXhwaXJlZCA9IHJxLT5hcnJheXMgKyAxOworCXJxLT5jdXJyID0gTlVMTDsKKwlzcGluX2xv Y2tfaW5pdCgmcnEtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZycS0+ZnJvemVuKTsKKwlJTklU X0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisKKwlmb3IgKGogPSAwOyBqIDwgMjsg aisrKSB7CisJCWFycmF5ID0gcnEtPmFycmF5cyArIGo7CisJCWZvciAoayA9IDA7IGsgPCBNQVhf UFJJTzsgaysrKSB7CisJCQlJTklUX0xJU1RfSEVBRChhcnJheS0+cXVldWUgKyBrKTsKKwkJCV9f Y2xlYXJfYml0KGssIGFycmF5LT5iaXRtYXApOworCQl9CisJCS8vIGRlbGltaXRlciBmb3IgYml0 c2VhcmNoCisJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CisJfQorCisKIAkv KgogCSAqIFdlIGhhdmUgdG8gZG8gYSBsaXR0bGUgbWFnaWMgdG8gZ2V0IHRoZSBmaXJzdAogCSAq IHByb2Nlc3MgcmlnaHQgaW4gU01QIG1vZGUuCkBAIC0xNjYyLDkgKzE4MjAsMTEgQEAKIAltaWdy YXRpb25fcmVxX3QgcmVxOwogCXJ1bnF1ZXVlX3QgKnJxOwogCi0JbmV3X21hc2sgJj0gY3B1X29u bGluZV9tYXA7Ci0JaWYgKCFuZXdfbWFzaykKLQkJQlVHKCk7CisJaWYobmV3X21hc2speyAvLyBj YW4gYmUgTyBmb3IgVENvcmUgcHJvY2VzcyBzdXNwZW5kcworCQluZXdfbWFzayAmPSBjcHVfb25s aW5lX21hcDsKKwkJaWYgKCFuZXdfbWFzaykKKwkJCUJVRygpOworCX0KIAogCXByZWVtcHRfZGlz YWJsZSgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CkBAIC0xNzM3LDcgKzE4OTcs MTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCQlw ID0gcmVxLT50YXNrOwotCQljcHVfZGVzdCA9IF9fZmZzKHAtPmNwdXNfYWxsb3dlZCk7CisKKwkJ aWYoIHAtPmNwdXNfYWxsb3dlZCkKKwkJCWNwdV9kZXN0ID0gX19mZnMocC0+Y3B1c19hbGxvd2Vk KTsKKwkJZWxzZQorCQkJY3B1X2Rlc3QgPSBQSEFOVE9NX0NQVTsKKwogCQlycV9kZXN0ID0gY3B1 X3JxKGNwdV9kZXN0KTsKIHJlcGVhdDoKIAkJY3B1X3NyYyA9IHAtPnRocmVhZF9pbmZvLT5jcHU7 CmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmlsbGEva2VybmVsL3N5c2N0 bC5jIGxpbnV4Mi41LjE0LnRjb3JlL2tlcm5lbC9zeXNjdGwuYwotLS0gbGludXgtMi41LjE0LnZh bm5pbGxhL2tlcm5lbC9zeXNjdGwuYwlTdW4gTWF5ICA1IDIzOjM3OjU0IDIwMDIKKysrIGxpbnV4 Mi41LjE0LnRjb3JlL2tlcm5lbC9zeXNjdGwuYwlUdWUgTWF5ICA3IDE0OjM5OjM3IDIwMDIKQEAg LTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNlbmRpZgogCitpbnQg Y29yZV9kdW1wc190aHJlYWRzID0gMDsKKwogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAog LyogRXh0ZXJuYWwgdmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLwpAQCAtMTcxLDcg KzE3Myw5IEBACiAJIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKIAl7S0VSTl9UQUlOVEVE LCAidGFpbnRlZCIsICZ0YWludGVkLCBzaXplb2YoaW50KSwKIAkgMDY0NCwgTlVMTCwgJnByb2Nf ZG9pbnR2ZWN9LAotCXtLRVJOX0NBUF9CU0VULCAiY2FwLWJvdW5kIiwgJmNhcF9ic2V0LCBzaXpl b2Yoa2VybmVsX2NhcF90KSwKKwl7S0VSTl9DT1JFX0RVTVBTX1RIUkVBRFMsICJjb3JlX2R1bXBz X3RocmVhZHMiLCAmY29yZV9kdW1wc190aHJlYWRzLCBzaXplb2YoaW50KSwKKwkgMDY0NCwgTlVM TCwgJnByb2NfZG9pbnR2ZWN9LAorCSB7S0VSTl9DQVBfQlNFVCwgImNhcC1ib3VuZCIsICZjYXBf YnNldCwgc2l6ZW9mKGtlcm5lbF9jYXBfdCksCiAJIDA2MDAsIE5VTEwsICZwcm9jX2RvaW50dmVj X2JzZXR9LAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCXtLRVJOX1JFQUxST09UREVW LCAicmVhbC1yb290LWRldiIsICZyZWFsX3Jvb3RfZGV2LCBzaXplb2YoaW50KSwK --------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8--