Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Fri, 14 Jun 2002 19:10:37 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Fri, 14 Jun 2002 19:10:36 -0400 Received: from fmr04.intel.com ([143.183.121.6]:9680 "EHLO caduceus.sc.intel.com") by vger.kernel.org with ESMTP id ; Fri, 14 Jun 2002 19:10:32 -0400 Message-Id: <200206142310.g5ENADP23772@unix-os.sc.intel.com> From: mgross Reply-To: mgross@unix-os.sc.intel.com Organization: SSG Intel To: Linux Kernel Mailing List Subject: [PATCH] Multi-threaded core dumps for 2.5.21. Date: Fri, 14 Jun 2002 16:17:20 -0400 X-Mailer: KMail [version 1.3.1] Cc: Linus Torvalds , mark.gross@intel.com MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_WOPPXSJZ0C8YG1ZUKIOY" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --------------Boundary-00=_WOPPXSJZ0C8YG1ZUKIOY Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 8bit Attached is a re-base of the 2.5.18 patch posted last week. This patch has been tested on my SMP system and seems very stable, so far. I would like very much to see this feature added to the 2.5.x kernels and more milage given to it. For ISV's not having the ability to create core dumps for pthread applications is a strong justification for not using Linux. Now is a good time for Linux support the ISV's WRT core files for multi-threaded applications. To use the core files from multi-threaded applications, created with this patch you may need to strip the objects from /lib/libpthread. For my system 'strip /lib/libpthread-0.9.so makes things good, YMMV. Please apply this patch. --mgross --------------Boundary-00=_WOPPXSJZ0C8YG1ZUKIOY Content-Type: text/x-diff; charset="iso-8859-15"; name="tcore-2521.pat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tcore-2521.pat" ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYva2VybmVsL2kzODcu YyBsaW51eDI1MjEudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9pMzg3LmMKLS0tIGxpbnV4LTIuNS4y MS9hcmNoL2kzODYva2VybmVsL2kzODcuYwlTdW4gSnVuICA5IDAxOjMxOjMyIDIwMDIKKysrIGxp bnV4MjUyMS50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwlGcmkgSnVuIDE0IDE1OjIyOjMy IDIwMDIKQEAgLTUyOCwzICs1MjgsMzYgQEAKIAogCXJldHVybiBmcHZhbGlkOwogfQorCitpbnQg ZHVtcF90YXNrX2ZwdSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2kzODdf c3RydWN0ICpmcHUgKQoreworCWludCBmcHZhbGlkOworCisJZnB2YWxpZCA9IHRzay0+dXNlZF9t YXRoOworCWlmICggZnB2YWxpZCApIHsKKwkJaWYgKHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1 KCB0c2sgKTsKKwkJaWYgKCBjcHVfaGFzX2Z4c3IgKSB7CisJCQljb3B5X2ZwdV9meHNhdmUoIHRz aywgZnB1ICk7CisJCX0gZWxzZSB7CisJCQljb3B5X2ZwdV9mc2F2ZSggdHNrLCBmcHUgKTsKKwkJ fQorCX0KKworCXJldHVybiBmcHZhbGlkOworfQorCitpbnQgZHVtcF90YXNrX2V4dGVuZGVkX2Zw dSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0ICpmcHUg KQoreworCWludCBmcHZhbGlkOworCQorCWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aCAmJiBjcHVf aGFzX2Z4c3I7CisJaWYgKCBmcHZhbGlkICkgeworCQlpZiAodHNrID09IGN1cnJlbnQpIHVubGF6 eV9mcHUoIHRzayApOworCQltZW1jcHkoIGZwdSwgJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlLAor CQlzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpICk7CisJfQorCQorCXJldHVybiBmcHZh bGlkOworfQorCisKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYv a2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjEudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNz LmMKLS0tIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwlTdW4gSnVuICA5 IDAxOjI2OjIyIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9hcmNoL2kzODYva2VybmVsL3Byb2Nl c3MuYwlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTYxMCw2ICs2MTAsMjQgQEAKIAogCWR1 bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+aTM4Nyk7CiB9CisvKiAKKyAq IENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBydW5u aW5nIChpbiB1c2VyIHNwYWNlKQorICovCisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgoraW50 IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAgZWxmX2dyZWdzZXRfdCAq cmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisJCisJcHRyZWdzID0gKihzdHJ1Y3Qg cHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0c2stPnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUg LSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlwdHJlZ3MueGNzICY9IDB4ZmZmZjsKKwlwdHJl Z3MueGRzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueGVzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueHNzICY9 IDB4ZmZmZjsKKworCWVsZl9jb3JlX2NvcHlfcmVncyhyZWdzLCAmcHRyZWdzKTsKKworCXJldHVy biAxOworfQogCiAvKgogICogVGhpcyBzcGVjaWFsIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGxvYWQg YSBkZWJ1Z2dpbmcgcmVnaXN0ZXIKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9h cmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjEudGNvcmUvYXJjaC9pYTY0L2tlcm5l bC9wcm9jZXNzLmMKLS0tIGxpbnV4LTIuNS4yMS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwlT dW4gSnVuICA5IDAxOjI5OjUwIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9hcmNoL2lhNjQva2Vy bmVsL3Byb2Nlc3MuYwlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTM3Miw2ICszNzIsMzEg QEAKIHZvaWQKIGRvX2NvcHlfcmVncyAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lk ICphcmcpCiB7CisJZG9fY29weV90YXNrX3JlZ3MoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwor dm9pZAorZG9fZHVtcF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJn KQoreworCWRvX2R1bXBfdGFza19mcHUoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwordm9pZAor aWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2dyZWdzZXRf dCBkc3QpCit7CisJdW53X2luaXRfcnVubmluZyhkb19jb3B5X3JlZ3MsIGRzdCk7Cit9CisKK2lu dAorZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2ZwcmVnc2V0X3QgZHN0KQorewor CXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7CisJcmV0dXJuIDE7CS8qIGYwLWYz MSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFsd2F5cyByZXR1cm4gMSAqLworfQorCitzdGF0aWMg dm9pZAorZG9fY29weV90YXNrX3JlZ3MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0 IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCit7CiAJdW5zaWduZWQgbG9uZyBtYXNr LCBzcCwgbmF0X2JpdHMgPSAwLCBpcCwgYXJfcm5hdCwgdXJic19lbmQsIGNmbTsKIAllbGZfZ3Jl Z190ICpkc3QgPSBhcmc7CiAJc3RydWN0IHB0X3JlZ3MgKnB0OwpAQCAtMzg2LDEyICs0MTEsMTIg QEAKIAl1bndfZ2V0X3NwKGluZm8sICZzcCk7CiAJcHQgPSAoc3RydWN0IHB0X3JlZ3MgKikgKHNw ICsgMTYpOwogCi0JdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQoY3VycmVudCwgcHQs ICZjZm0pOworCXVyYnNfZW5kID0gaWE2NF9nZXRfdXNlcl9yYnNfZW5kKHRhc2ssIHB0LCAmY2Zt KTsKIAotCWlmIChpYTY0X3N5bmNfdXNlcl9yYnMoY3VycmVudCwgaW5mby0+c3csIHB0LT5hcl9i c3BzdG9yZSwgdXJic19lbmQpIDwgMCkKKwlpZiAoaWE2NF9zeW5jX3VzZXJfcmJzKHRhc2ssIGlu Zm8tPnN3LCBwdC0+YXJfYnNwc3RvcmUsIHVyYnNfZW5kKSA8IDApCiAJCXJldHVybjsKIAotCWlh NjRfcGVlayhjdXJyZW50LCBpbmZvLT5zdywgdXJic19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0 X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAorCWlhNjRfcGVlayh0YXNrLCBpbmZvLT5zdywgdXJi c19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAogCQkg ICZhcl9ybmF0KTsKIAogCS8qCkBAIC00NDAsNyArNDY1LDcgQEAKIH0KIAogdm9pZAotZG9fZHVt cF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQorZG9fZHVtcF90 YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdW53X2ZyYW1lX2luZm8g KmluZm8sIHZvaWQgKmFyZykKIHsKIAllbGZfZnByZWdfdCAqZHN0ID0gYXJnOwogCWludCBpOwpA QCAtNDU1LDIyICs0ODAsNDEgQEAKIAlmb3IgKGkgPSAyOyBpIDwgMzI7ICsraSkKIAkJdW53X2dl dF9mcihpbmZvLCBpLCBkc3QgKyBpKTsKIAotCWlhNjRfZmx1c2hfZnBoKGN1cnJlbnQpOwotCWlm ICgoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKSAhPSAwKQot CQltZW1jcHkoZHN0ICsgMzIsIGN1cnJlbnQtPnRocmVhZC5mcGgsIDk2KjE2KTsKKwlpYTY0X2Zs dXNoX2ZwaCh0YXNrKTsKKwlpZiAoKHRhc2stPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0ZQ SF9WQUxJRCkgIT0gMCkKKwkJbWVtY3B5KGRzdCArIDMyLCB0YXNrLT50aHJlYWQuZnBoLCA5Niox Nik7CiB9CiAKLXZvaWQKLWlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAq cHQsIGVsZl9ncmVnc2V0X3QgZHN0KQoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKIHsKLQl1bndfaW5pdF9ydW5uaW5nKGRv X2NvcHlfcmVncywgZHN0KTsKKwlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdGNvcmVfaW5mbzsKKwor CWlmKGN1cnJlbnQgPT0gdGFzaykgeworCQl1bndfaW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywg cmVncyk7CisJfQorCWVsc2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29y ZV9pbmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFz ayk7CisJCWRvX2NvcHlfdGFza19yZWdzKHRhc2ssICZ0Y29yZV9pbmZvLCByZWdzKTsKKwl9CisK KwlyZXR1cm4gMTsKIH0KIAotaW50Ci1kdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnB0LCBlbGZf ZnByZWdzZXRfdCBkc3QpCitpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0 YXNrLCBlbGZfZnByZWdzZXRfdCAqZHN0KQogewotCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9m cHUsIGRzdCk7Ci0JcmV0dXJuIDE7CS8qIGYwLWYzMSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFs d2F5cyByZXR1cm4gMSAqLworCXN0cnVjdCB1bndfZnJhbWVfaW5mbyB0Y29yZV9pbmZvOworCisJ aWYoY3VycmVudCA9PSB0YXNrKSB7CisJCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRz dCk7CisJfQorCWVsc2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9p bmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7 CisJCWRvX2R1bXBfdGFza19mcHUodGFzaywgJnRjb3JlX2luZm8sIGRzdCk7CisJfQorCisJcmV0 dXJuIDE7IAogfQogCiBhc21saW5rYWdlIGxvbmcKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4 LTIuNS4yMS9mcy9iaW5mbXRfZWxmLmMgbGludXgyNTIxLnRjb3JlL2ZzL2JpbmZtdF9lbGYuYwot LS0gbGludXgtMi41LjIxL2ZzL2JpbmZtdF9lbGYuYwlTdW4gSnVuICA5IDAxOjI5OjQwIDIwMDIK KysrIGxpbnV4MjUyMS50Y29yZS9mcy9iaW5mbXRfZWxmLmMJRnJpIEp1biAxNCAxNToyMjozMiAy MDAyCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUg PGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4 L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4K QEAgLTMwLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAjaW5jbHVkZSA8 bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nv bXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtOTYzLDcgKzk2NSw3IEBA CiAvKiAjZGVmaW5lIERFQlVHICovCiAKICNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgZHVtcF9y ZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxmX2dyZWdfdCAqcikKK3N0YXRpYyB2b2lkIGR1bXBfcmVn cyhjb25zdCBjaGFyICpzdHIsIGVsZl9ncmVnc2V0X3QgKnIpCiB7CiAJaW50IGk7CiAJc3RhdGlj IGNvbnN0IGNoYXIgKnJlZ3NbXSA9IHsgImVieCIsICJlY3giLCAiZWR4IiwgImVzaSIsICJlZGki LCAiZWJwIiwKQEAgLTEwMTEsNiArMTAxMywxNTggQEAKICNkZWZpbmUgRFVNUF9TRUVLKG9mZikJ XAogCWlmICghZHVtcF9zZWVrKGZpbGUsIChvZmYpKSkgXAogCQlnb3RvIGVuZF9jb3JlZHVtcDsK Kworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfZWxmX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYs IGludCBzZWdzKQoreworCW1lbWNweShlbGYtPmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRyk7CisJ ZWxmLT5lX2lkZW50W0VJX0NMQVNTXSA9IEVMRl9DTEFTUzsKKwllbGYtPmVfaWRlbnRbRUlfREFU QV0gPSBFTEZfREFUQTsKKwllbGYtPmVfaWRlbnRbRUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5UOwor CW1lbXNldChlbGYtPmVfaWRlbnQrRUlfUEFELCAwLCBFSV9OSURFTlQtRUlfUEFEKTsKKworCWVs Zi0+ZV90eXBlID0gRVRfQ09SRTsKKwllbGYtPmVfbWFjaGluZSA9IEVMRl9BUkNIOworCWVsZi0+ ZV92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKKwllbGYtPmVfZW50cnkgPSAwOworCWVsZi0+ZV9waG9m ZiA9IHNpemVvZihzdHJ1Y3QgZWxmaGRyKTsKKwllbGYtPmVfc2hvZmYgPSAwOworCWVsZi0+ZV9m bGFncyA9IDA7CisJZWxmLT5lX2Voc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxmaGRyKTsKKwllbGYt PmVfcGhlbnRzaXplID0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CisJZWxmLT5lX3BobnVtID0g c2VnczsKKwllbGYtPmVfc2hlbnRzaXplID0gMDsKKwllbGYtPmVfc2hudW0gPSAwOworCWVsZi0+ ZV9zaHN0cm5keCA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9l bGZfbm90ZV9waGRyKHN0cnVjdCBlbGZfcGhkciAqcGhkciwgaW50IHN6LCBvZmZfdCBvZmZzZXQp Cit7CisJcGhkci0+cF90eXBlID0gUFRfTk9URTsKKwlwaGRyLT5wX29mZnNldCA9IG9mZnNldDsK KwlwaGRyLT5wX3ZhZGRyID0gMDsKKwlwaGRyLT5wX3BhZGRyID0gMDsKKwlwaGRyLT5wX2ZpbGVz eiA9IHN6OworCXBoZHItPnBfbWVtc3ogPSAwOworCXBoZHItPnBfZmxhZ3MgPSAwOworCXBoZHIt PnBfYWxpZ24gPSAwOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfbm90 ZShzdHJ1Y3QgbWVtZWxmbm90ZSAqbm90ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIAor CQl1bnNpZ25lZCBpbnQgc3osIHZvaWQgKmRhdGEpCit7CisJbm90ZS0+bmFtZSA9IG5hbWU7CisJ bm90ZS0+dHlwZSA9IHR5cGU7CisJbm90ZS0+ZGF0YXN6ID0gc3o7CisJbm90ZS0+ZGF0YSA9IGRh dGE7CisJcmV0dXJuOworfQorCisvKgorICogZmlsbCB1cCBhbGwgdGhlIGZpZWxkcyBpbiBwcnN0 YXR1cyBmcm9tIHRoZSBnaXZlbiB0YXNrIHN0cnVjdCwgZXhjZXB0IHJlZ2lzdGVycworICogd2hp Y2ggbmVlZCB0byBiZSBmaWxsZWQgdXAgc2VwZXJhdGVseS4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkIGZpbGxfcHJzdGF0dXMoc3RydWN0IGVsZl9wcnN0YXR1cyAqcHJzdGF0dXMsIHN0cnVjdCB0 YXNrX3N0cnVjdCAqcCwgbG9uZyBzaWducikgCit7CisJcHJzdGF0dXMtPnByX2luZm8uc2lfc2ln bm8gPSBwcnN0YXR1cy0+cHJfY3Vyc2lnID0gc2lnbnI7CisJcHJzdGF0dXMtPnByX3NpZ3BlbmQg PSBwLT5wZW5kaW5nLnNpZ25hbC5zaWdbMF07CisJcHJzdGF0dXMtPnByX3NpZ2hvbGQgPSBwLT5i bG9ja2VkLnNpZ1swXTsKKwlwcnN0YXR1cy0+cHJfcGlkID0gcC0+cGlkOworCXByc3RhdHVzLT5w cl9wcGlkID0gcC0+cGFyZW50LT5waWQ7CisJcHJzdGF0dXMtPnByX3BncnAgPSBwLT5wZ3JwOwor CXByc3RhdHVzLT5wcl9zaWQgPSBwLT5zZXNzaW9uOworCXByc3RhdHVzLT5wcl91dGltZS50dl9z ZWMgPSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc191dGltZSk7CisJcHJzdGF0dXMtPnByX3V0aW1l LnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfdXRpbWUpOworCXByc3RhdHVzLT5w cl9zdGltZS50dl9zZWMgPSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc19zdGltZSk7CisJcHJzdGF0 dXMtPnByX3N0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfc3RpbWUpOwor CXByc3RhdHVzLT5wcl9jdXRpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3V0 aW1lKTsKKwlwcnN0YXR1cy0+cHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1l cy50bXNfY3V0aW1lKTsKKwlwcnN0YXR1cy0+cHJfY3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1Mo cC0+dGltZXMudG1zX2NzdGltZSk7CisJcHJzdGF0dXMtPnByX2NzdGltZS50dl91c2VjID0gQ1Rf VE9fVVNFQ1MocC0+dGltZXMudG1zX2NzdGltZSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZmlsbF9wc2luZm8oc3RydWN0IGVsZl9wcnBzaW5mbyAqcHNpbmZvLCBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnApCit7CisJaW50IGk7CisJCisJcHNpbmZvLT5wcl9waWQgPSBwLT5waWQ7 CisJcHNpbmZvLT5wcl9wcGlkID0gcC0+cGFyZW50LT5waWQ7CisJcHNpbmZvLT5wcl9wZ3JwID0g cC0+cGdycDsKKwlwc2luZm8tPnByX3NpZCA9IHAtPnNlc3Npb247CisKKwlpID0gcC0+c3RhdGUg PyBmZnoofnAtPnN0YXRlKSArIDEgOiAwOworCXBzaW5mby0+cHJfc3RhdGUgPSBpOworCXBzaW5m by0+cHJfc25hbWUgPSAoaSA8IDAgfHwgaSA+IDUpID8gJy4nIDogIlJTRFpURCJbaV07CisJcHNp bmZvLT5wcl96b21iID0gcHNpbmZvLT5wcl9zbmFtZSA9PSAnWic7CisJcHNpbmZvLT5wcl9uaWNl ID0gIHRhc2tfbmljZShwKTsKKwlwc2luZm8tPnByX2ZsYWcgPSBwLT5mbGFnczsKKwlwc2luZm8t PnByX3VpZCA9IE5FV19UT19PTERfVUlEKHAtPnVpZCk7CisJcHNpbmZvLT5wcl9naWQgPSBORVdf VE9fT0xEX0dJRChwLT5naWQpOworCXN0cm5jcHkocHNpbmZvLT5wcl9mbmFtZSwgcC0+Y29tbSwg c2l6ZW9mKHBzaW5mby0+cHJfZm5hbWUpKTsKKwlyZXR1cm47Cit9CisKKy8qIEhlcmUgaXMgdGhl IHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMgb2YgZWFjaCB0aHJlYWQgaXMgY2FwdHVyZWQuICov CitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJ c3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRfUFJTVEFUVVMgKi8KKwllbGZfZnBy ZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBS RUdTCisJZWxmX2ZweHJlZ3NldF90IHhmcHU7CQkvKiBOVF9QUlhGUFJFRyAqLworI2VuZGlmCisJ c3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbM107CisJaW50IG51bV9ub3RlczsKK307CisKKy8qCisg KiBJbiBvcmRlciB0byBhZGQgdGhlIHNwZWNpZmljIHRocmVhZCBpbmZvcm1hdGlvbiBmb3IgdGhl IGVsZiBmaWxlIGZvcm1hdCwKKyAqIHdlIG5lZWQgdG8ga2VlcCBhIGxpbmtlZCBsaXN0IG9mIGV2 ZXJ5IHRocmVhZHMgcHJfc3RhdHVzIGFuZCB0aGVuCisgKiBjcmVhdGUgYSBzaW5nbGUgc2VjdGlv biBmb3IgdGhlbSBpbiB0aGUgZmluYWwgY29yZSBmaWxlLgorICovCitzdGF0aWMgaW50IGVsZl9k dW1wX3RocmVhZF9zdGF0dXMobG9uZyBzaWduciwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3Ry dWN0IGxpc3RfaGVhZCAqIHRocmVhZF9saXN0KQoreworCisJc3RydWN0IGVsZl90aHJlYWRfc3Rh dHVzICp0OworCWludCBzeiA9IDA7CisKKwl0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jYXRl IG1lbW9yeSBmb3IgdGhyZWFkIHN0YXR1cy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlJTklU X0xJU1RfSEVBRCgmdC0+bGlzdCk7CisJdC0+bnVtX25vdGVzID0gMDsKKworCWZpbGxfcHJzdGF0 dXMoJnQtPnByc3RhdHVzLCBwLCBzaWducik7CisJZWxmX2NvcmVfY29weV90YXNrX3JlZ3MocCwg JnQtPnByc3RhdHVzLnByX3JlZyk7CQorCQorCWZpbGxfbm90ZSgmdC0+bm90ZXNbMF0sICJDT1JF IiwgTlRfUFJTVEFUVVMsIHNpemVvZih0LT5wcnN0YXR1cyksICYodC0+cHJzdGF0dXMpKTsKKwl0 LT5udW1fbm90ZXMrKzsKKwlzeiArPSBub3Rlc2l6ZSgmdC0+bm90ZXNbMF0pOworCisJaWYgKCh0 LT5wcnN0YXR1cy5wcl9mcHZhbGlkID0gZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhwLCAmdC0+ ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZ0LT5ub3Rlc1sxXSwgIkNPUkUiLCBOVF9QUkZQUkVHLCBz aXplb2YodC0+ZnB1KSwgJih0LT5mcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5v dGVzaXplKCZ0LT5ub3Rlc1sxXSk7CisJfQorCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdT CisJaWYgKGVsZl9jb3JlX2NvcHlfdGFza194ZnByZWdzKHAsICZ0LT54ZnB1KSkgeworCQlmaWxs X25vdGUoJnQtPm5vdGVzWzJdLCAiTElOVVgiLCBOVF9QUlhGUFJFRywgc2l6ZW9mKHQtPnhmcHUp LCAmKHQtPnhmcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5vdGVzaXplKCZ0LT5u b3Rlc1syXSk7CisJfQorI2VuZGlmCQorCWxpc3RfYWRkKCZ0LT5saXN0LCB0aHJlYWRfbGlzdCk7 CisJcmV0dXJuIHN6OworfQorCisKKwogLyoKICAqIEFjdHVhbCBkdW1wZXIKICAqCkBAIC0xMDI5 LDEyICsxMTgzLDIzIEBACiAJc3RydWN0IGVsZmhkciBlbGY7CiAJb2ZmX3Qgb2Zmc2V0ID0gMCwg ZGF0YW9mZjsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gY3VycmVudC0+cmxpbVtSTElNSVRfQ09S RV0ucmxpbV9jdXI7Ci0JaW50IG51bW5vdGUgPSA0OwotCXN0cnVjdCBtZW1lbGZub3RlIG5vdGVz WzRdOworCWludCBudW1ub3RlID0gNTsKKwlzdHJ1Y3QgbWVtZWxmbm90ZSBub3Rlc1s1XTsKIAlz dHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzOwkvKiBOVF9QUlNUQVRVUyAqLwotCWVsZl9mcHJl Z3NldF90IGZwdTsJCS8qIE5UX1BSRlBSRUcgKi8KIAlzdHJ1Y3QgZWxmX3BycHNpbmZvIHBzaW5m bzsJLyogTlRfUFJQU0lORk8gKi8KKyAJc3RydWN0IHRhc2tfc3RydWN0ICpwOworIAlMSVNUX0hF QUQodGhyZWFkX2xpc3QpOworIAlzdHJ1Y3QgbGlzdF9oZWFkICp0OworCWVsZl9mcHJlZ3NldF90 IGZwdTsKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX1hGUFJFR1MKKwllbGZfZnB4cmVnc2V0X3QgeGZw dTsKKyNlbmRpZgorCWludCB0aHJlYWRfc3RhdHVzX3NpemUgPSAwOworCQogCisJLyogRmlyc3Qg cGF1c2UgYWxsIHJlbGF0ZWQgdGhyZWFkZWQgcHJvY2Vzc2VzICovCisJdGNvcmVfc3VzcGVuZF90 aHJlYWRzKCk7CisJCiAJLyogZmlyc3QgY29weSB0aGUgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3Bh Y2UgKi8KIAltZW1zZXQoJnBzaW5mbywgMCwgc2l6ZW9mKHBzaW5mbykpOwogCXsKQEAgLTEwNTIs NyArMTIxNyw2IEBACiAKIAl9CiAKLQltZW1zZXQoJnByc3RhdHVzLCAwLCBzaXplb2YocHJzdGF0 dXMpKTsKIAkvKgogCSAqIFRoaXMgdHJhbnNmZXJzIHRoZSByZWdpc3RlcnMgZnJvbSByZWdzIGlu dG8gdGhlIHN0YW5kYXJkCiAJICogY29yZWR1bXAgYXJyYW5nZW1lbnQsIHdoYXRldmVyIHRoYXQg aXMuCkBAIC0xMDY4LDkgKzEyMzIsNDIgQEAKIAllbHNlCiAJCSooc3RydWN0IHB0X3JlZ3MgKikm cHJzdGF0dXMucHJfcmVnID0gKnJlZ3M7CiAjZW5kaWYKKyAKKwkvKiBjYXB0dXJlIHRoZSBzdGF0 dXMgb2YgYWxsIG90aGVyIHRocmVhZHMgKi8KKwlpZiAoc2lnbnIpIHsKKwkJcmVhZF9sb2NrKCZ0 YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfdGFzayhwKQorCQkJaWYgKGN1cnJlbnQtPm1tID09 IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJCWludCBzeiA9IGVsZl9kdW1wX3RocmVhZF9z dGF0dXMoc2lnbnIsIHAsICZ0aHJlYWRfbGlzdCk7CisJCQkJaWYgKCFzeikgeworCQkJCQlyZWFk X3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQkJ ZWxzZQorCQkJCQl0aHJlYWRfc3RhdHVzX3NpemUgKz0gc3o7CisJCQl9CisJCXJlYWRfdW5sb2Nr KCZ0YXNrbGlzdF9sb2NrKTsKKwl9CisJCisJbWVtc2V0KCZwcnN0YXR1cywgMCwgc2l6ZW9mKHBy c3RhdHVzKSk7CisJZmlsbF9wcnN0YXR1cygmcHJzdGF0dXMsIGN1cnJlbnQsIHNpZ25yKTsKKwll bGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7CisJCisJLyogV2Ugbm8g bG9uZ2VyIHN0b3AgYWxsIHZtIG9wZXJhdGlvbnMgKi8KIAotCS8qIG5vdyBzdG9wIGFsbCB2bSBv cGVyYXRpb25zICovCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkvKiBU aGlzIGJlY2F1c2UgdGhvc2UgcHJvY2VzZXMgdGhhdCBjb3VsZCBwb3NzaWJseSAKKwkgKiBjaGFu Z2UgbWFwX2NvdW50IG9yIHRoZSBtbWFwIC8gdm1hIHBhZ2VzIGFyZSBub3cgc3VzcGVuZGVkLgor CSAqCisJICogT25seSBwdHJhY2UgY2FuIHRvdWNoIHRoZXNlIG1lbW9yeSBhZGRyZXNzLCBidXQg aXQgY2Fubm90IGNoYW5nZQorCSAqIHRoZSBtYXBfY291bnQgb3IgdGhlIHBhZ2VzLiAgU28gbm8g cG9zc2liaWxpdHkgb2YgY3Jhc2hpbmcgZXhpc3RzIHdoaWxlIGR1bXBpbmcKKwkgKiB0aGUgbW0t PnZtX25leHQgYXJlYXMgdG8gdGhlIGNvcmUgZmlsZS4KKwkgKgorCSAqIEdyYWJiaW5nIG1tYXBf c2VtIGluIHRoaXMgZnVuY3Rpb24gaXMgcmlza3kgV1JUIHRoZSB1c2Ugb2Ygc3VzcGVuZF90aHJl YWRzLgorCSAqIEFsdGhvdWdoIG5vIGxvY2tzIHVwcyBoYXZlIGJlZW4gaW5kdWNlZCwgaWYgb25l IG9mIHRoZSBzdXNwZW5kZWQgdGhyZWFkcyB3YXMgCisJICogaW4gbGluZSBmb3IgdGhlIGN1cnJl bnQtPm1tYXBfc2VtIGFuZCBpZiBnZXRzIGl0IHdoaWxlIG9uIHRoZSBQaGFudG9tIHJ1bnF1ZSwK KwkgKiB0aGVuIHdlIHdvdWxkIGRlYWQgbG9jayBpbiB0aGlzIGZ1bmN0aW9uIGlmIHdlIGNvbnRp bnVlIHRvIGF0dGVtcHQgdG8gZG93bl93cml0ZQorCSAqIGluIHRoaXMgZnVuY3Rpb24uCisJICov CiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7CiAKICNpZmRlZiBERUJVRwpAQCAtMTA3 OCwyNSArMTI3NSw3IEBACiAjZW5kaWYKIAogCS8qIFNldCB1cCBoZWFkZXIgKi8KLQltZW1jcHko ZWxmLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRyk7Ci0JZWxmLmVfaWRlbnRbRUlfQ0xBU1NdID0g RUxGX0NMQVNTOwotCWVsZi5lX2lkZW50W0VJX0RBVEFdID0gRUxGX0RBVEE7Ci0JZWxmLmVfaWRl bnRbRUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5UOwotCW1lbXNldChlbGYuZV9pZGVudCtFSV9QQUQs IDAsIEVJX05JREVOVC1FSV9QQUQpOwotCi0JZWxmLmVfdHlwZSA9IEVUX0NPUkU7Ci0JZWxmLmVf bWFjaGluZSA9IEVMRl9BUkNIOwotCWVsZi5lX3ZlcnNpb24gPSBFVl9DVVJSRU5UOwotCWVsZi5l X2VudHJ5ID0gMDsKLQllbGYuZV9waG9mZiA9IHNpemVvZihlbGYpOwotCWVsZi5lX3Nob2ZmID0g MDsKLQllbGYuZV9mbGFncyA9IDA7Ci0JZWxmLmVfZWhzaXplID0gc2l6ZW9mKGVsZik7Ci0JZWxm LmVfcGhlbnRzaXplID0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7Ci0JZWxmLmVfcGhudW0gPSBz ZWdzKzE7CQkvKiBJbmNsdWRlIG5vdGVzICovCi0JZWxmLmVfc2hlbnRzaXplID0gMDsKLQllbGYu ZV9zaG51bSA9IDA7Ci0JZWxmLmVfc2hzdHJuZHggPSAwOworCWZpbGxfZWxmX2hlYWRlcigmZWxm LCBzZWdzKzEpOyAvKiBpbmNsdWRpbmcgbm90ZXMgc2VjdGlvbiovCiAKIAlmcyA9IGdldF9mcygp OwogCXNldF9mcyhLRVJORUxfRFMpOwpAQCAtMTExMyw2NCArMTI5MiwzNCBAQAogCSAqIHdpdGgg aW5mbyBmcm9tIHRoZWlyIC9wcm9jLgogCSAqLwogCi0Jbm90ZXNbMF0ubmFtZSA9ICJDT1JFIjsK LQlub3Rlc1swXS50eXBlID0gTlRfUFJTVEFUVVM7Ci0Jbm90ZXNbMF0uZGF0YXN6ID0gc2l6ZW9m KHByc3RhdHVzKTsKLQlub3Rlc1swXS5kYXRhID0gJnByc3RhdHVzOwotCXByc3RhdHVzLnByX2lu Zm8uc2lfc2lnbm8gPSBwcnN0YXR1cy5wcl9jdXJzaWcgPSBzaWducjsKLQlwcnN0YXR1cy5wcl9z aWdwZW5kID0gY3VycmVudC0+cGVuZGluZy5zaWduYWwuc2lnWzBdOwotCXByc3RhdHVzLnByX3Np Z2hvbGQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQlwc2luZm8ucHJfcGlkID0gcHJzdGF0 dXMucHJfcGlkID0gY3VycmVudC0+cGlkOwotCXBzaW5mby5wcl9wcGlkID0gcHJzdGF0dXMucHJf cHBpZCA9IGN1cnJlbnQtPnBhcmVudC0+cGlkOwotCXBzaW5mby5wcl9wZ3JwID0gcHJzdGF0dXMu cHJfcGdycCA9IGN1cnJlbnQtPnBncnA7Ci0JcHNpbmZvLnByX3NpZCA9IHByc3RhdHVzLnByX3Np ZCA9IGN1cnJlbnQtPnNlc3Npb247Ci0JcHJzdGF0dXMucHJfdXRpbWUudHZfc2VjID0gQ1RfVE9f U0VDUyhjdXJyZW50LT50aW1lcy50bXNfdXRpbWUpOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3Vz ZWMgPSBDVF9UT19VU0VDUyhjdXJyZW50LT50aW1lcy50bXNfdXRpbWUpOwotCXByc3RhdHVzLnBy X3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+dGltZXMudG1zX3N0aW1lKTsKLQlw cnN0YXR1cy5wcl9zdGltZS50dl91c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1z X3N0aW1lKTsKLQlwcnN0YXR1cy5wcl9jdXRpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50 LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9jdXRpbWUudHZfdXNlYyA9IENUX1RP X1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jdXRpbWUpOwotCXByc3RhdHVzLnByX2NzdGltZS50 dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jc3RpbWUpOwotCXByc3RhdHVz LnByX2NzdGltZS50dl91c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX2NzdGlt ZSk7CisJZmlsbF9ub3RlKCZub3Rlc1swXSwgIkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHBy c3RhdHVzKSwgJnByc3RhdHVzKTsKKyAJCisJZmlsbF9wc2luZm8oJnBzaW5mbywgY3VycmVudCk7 CisJZmlsbF9ub3RlKCZub3Rlc1sxXSwgIkNPUkUiLCBOVF9QUlBTSU5GTywgc2l6ZW9mKHBzaW5m byksICZwc2luZm8pOworCQorCWZpbGxfbm90ZSgmbm90ZXNbMl0sICJDT1JFIiwgTlRfVEFTS1NU UlVDVCwgc2l6ZW9mKCpjdXJyZW50KSwgY3VycmVudCk7CisgIAorICAJLyogVHJ5IHRvIGR1bXAg dGhlIEZQVS4gKi8KKwlpZiAoKHByc3RhdHVzLnByX2ZwdmFsaWQgPSBlbGZfY29yZV9jb3B5X3Rh c2tfZnByZWdzKGN1cnJlbnQsICZmcHUpKSkgeworCQlmaWxsX25vdGUoJm5vdGVzWzNdLCAiQ09S RSIsIE5UX1BSRlBSRUcsIHNpemVvZihmcHUpLCAmZnB1KTsKKwl9IGVsc2UgeworCQktLW51bW5v dGU7CisgCX0KKyNpZmRlZiBFTEZfQ09SRV9DT1BZX1hGUFJFR1MKKwlpZiAoZWxmX2NvcmVfY29w eV90YXNrX3hmcHJlZ3MoY3VycmVudCwgJnhmcHUpKSB7CisJCWZpbGxfbm90ZSgmbm90ZXNbNF0s ICJMSU5VWCIsIE5UX1BSWEZQUkVHLCBzaXplb2YoeGZwdSksICZ4ZnB1KTsKKwl9IGVsc2Ugewor CQktLW51bW5vdGU7CisJfQorI2Vsc2UKKwludW1ub3RlIC0tOworI2VuZGlmCQogCiAjaWZkZWYg REVCVUcKIAlkdW1wX3JlZ3MoIlBhc3NlZCBpbiByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsK IAlkdW1wX3JlZ3MoInByc3RhdHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9y ZWcpOwogI2VuZGlmCiAKLQlub3Rlc1sxXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUg PSBOVF9QUlBTSU5GTzsKLQlub3Rlc1sxXS5kYXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rl c1sxXS5kYXRhID0gJnBzaW5mbzsKLQlpID0gY3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQt PnN0YXRlKSArIDEgOiAwOwotCXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1l ID0gKGkgPCAwIHx8IGkgPiA1KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21i ID0gcHNpbmZvLnByX3NuYW1lID09ICdaJzsKLQlwc2luZm8ucHJfbmljZSA9IHRhc2tfbmljZShj dXJyZW50KTsKLQlwc2luZm8ucHJfZmxhZyA9IGN1cnJlbnQtPmZsYWdzOwotCXBzaW5mby5wcl91 aWQgPSBORVdfVE9fT0xEX1VJRChjdXJyZW50LT51aWQpOwotCXBzaW5mby5wcl9naWQgPSBORVdf VE9fT0xEX0dJRChjdXJyZW50LT5naWQpOwotCXN0cm5jcHkocHNpbmZvLnByX2ZuYW1lLCBjdXJy ZW50LT5jb21tLCBzaXplb2YocHNpbmZvLnByX2ZuYW1lKSk7Ci0KLQlub3Rlc1syXS5uYW1lID0g IkNPUkUiOwotCW5vdGVzWzJdLnR5cGUgPSBOVF9UQVNLU1RSVUNUOwotCW5vdGVzWzJdLmRhdGFz eiA9IHNpemVvZigqY3VycmVudCk7Ci0Jbm90ZXNbMl0uZGF0YSA9IGN1cnJlbnQ7Ci0KLQkvKiBU cnkgdG8gZHVtcCB0aGUgRlBVLiAqLwotCXByc3RhdHVzLnByX2ZwdmFsaWQgPSBkdW1wX2ZwdSAo cmVncywgJmZwdSk7Ci0JaWYgKCFwcnN0YXR1cy5wcl9mcHZhbGlkKQotCXsKLQkJbnVtbm90ZS0t OwotCX0KLQllbHNlCi0JewotCQlub3Rlc1szXS5uYW1lID0gIkNPUkUiOwotCQlub3Rlc1szXS50 eXBlID0gTlRfUFJGUFJFRzsKLQkJbm90ZXNbM10uZGF0YXN6ID0gc2l6ZW9mKGZwdSk7Ci0JCW5v dGVzWzNdLmRhdGEgPSAmZnB1OwotCX0KLQkKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICov CiAJewogCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkcjsKQEAgLTExNzgsMTcgKzEzMjcsMTEgQEAKIAog CQlmb3IoaSA9IDA7IGkgPCBudW1ub3RlOyBpKyspCiAJCQlzeiArPSBub3Rlc2l6ZSgmbm90ZXNb aV0pOworCQkKKwkJc3ogKz0gdGhyZWFkX3N0YXR1c19zaXplOwogCi0JCXBoZHIucF90eXBlID0g UFRfTk9URTsKLQkJcGhkci5wX29mZnNldCA9IG9mZnNldDsKLQkJcGhkci5wX3ZhZGRyID0gMDsK LQkJcGhkci5wX3BhZGRyID0gMDsKLQkJcGhkci5wX2ZpbGVzeiA9IHN6OwotCQlwaGRyLnBfbWVt c3ogPSAwOwotCQlwaGRyLnBfZmxhZ3MgPSAwOwotCQlwaGRyLnBfYWxpZ24gPSAwOwotCi0JCW9m ZnNldCArPSBwaGRyLnBfZmlsZXN6OworCQlmaWxsX2VsZl9ub3RlX3BoZHIoJnBoZHIsIHN6LCBv ZmZzZXQpOworCQlvZmZzZXQgKz0gc3o7CiAJCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRy KSk7CiAJfQogCkBAIC0xMjE3LDEwICsxMzYwLDE5IEBACiAJCURVTVBfV1JJVEUoJnBoZHIsIHNp emVvZihwaGRyKSk7CiAJfQogCisgCS8qIHdyaXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwog CWZvcihpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKIAkJaWYgKCF3cml0ZW5vdGUoJm5vdGVzW2ld LCBmaWxlKSkKIAkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCisJLyogd3JpdGUgb3V0IHRoZSB0aHJl YWQgc3RhdHVzIG5vdGVzIHNlY3Rpb24gKi8KKwlsaXN0X2Zvcl9lYWNoKHQsICZ0aHJlYWRfbGlz dCkgeworCQlzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMgKnRtcCA9IGxpc3RfZW50cnkodCwgc3Ry dWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KTsKKwkJZm9yIChpID0gMDsgaSA8IHRtcC0+bnVt X25vdGVzOyBpKyspCisJCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSkpCisJ CQkJZ290byBlbmRfY29yZWR1bXA7CisJfQorIAogCURVTVBfU0VFSyhkYXRhb2ZmKTsKIAogCWZv cih2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsgdm1hICE9IE5VTEw7IHZtYSA9IHZtYS0+dm1fbmV4 dCkgewpAQCAtMTI2NCwxMSArMTQxNiwyMSBAQAogCQkgICAgICAgKG9mZl90KSBmaWxlLT5mX3Bv cywgb2Zmc2V0KTsKIAl9CiAKLSBlbmRfY29yZWR1bXA6CitlbmRfY29yZWR1bXA6CiAJc2V0X2Zz KGZzKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworY2xlYW51cDoKKwl3 aGlsZSghbGlzdF9lbXB0eSgmdGhyZWFkX2xpc3QpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnRt cCA9IHRocmVhZF9saXN0Lm5leHQ7CisJCWxpc3RfZGVsKHRtcCk7CisJCWtmcmVlKGxpc3RfZW50 cnkodG1wLCBzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpKTsKKwl9CisKKwl0Y29yZV9y ZXN1bWVfdGhyZWFkcygpOworCiAJcmV0dXJuIGhhc19kdW1wZWQ7CiB9CisKICNlbmRpZgkJLyog VVNFX0VMRl9DT1JFX0RVTVAgKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9lbGZfYmluZm10 KHZvaWQpCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMjEvaW5jbHVkZS9hc20taTM4 Ni9lbGYuaCBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAotLS0gbGludXgt Mi41LjIxL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgJU3VuIEp1biAgOSAwMTozMDo1MiAyMDAyCisr KyBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAlGcmkgSnVuIDE0IDE1OjIy OjMyIDIwMDIKQEAgLTk5LDYgKzk5LDE2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5l IFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9T VlI0OlBFUl9MSU5VWCkKKworCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFz a19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAo c3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1w X3Rhc2tfZXh0ZW5kZWRfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHVzZXJfZnhz cl9zdHJ1Y3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZf cmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09Q WV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykK KyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9YRlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFz a19leHRlbmRlZF9mcHUodHNrLCBlbGZfeGZwcmVncykKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZm IC11ck4gLVggZG9udGRpZmYgbGludXgtMi41LjIxL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggbGlu dXgyNTIxLnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKLS0tIGxpbnV4LTIuNS4yMS9pbmNs dWRlL2FzbS1pYTY0L2VsZi5oCVN1biBKdW4gIDkgMDE6MzA6NTMgMjAwMgorKysgbGludXgyNTIx LnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBA IC02NSwxMiArNjUsMTYgQEAKICNkZWZpbmUgRUxGX05HUkVHCTEyOAkvKiB3ZSByZWFsbHkgbmVl ZCBqdXN0IDcyIGJ1dCBsZXQncyBsZWF2ZSBzb21lIGhlYWRyb29tLi4uICovCiAjZGVmaW5lIEVM Rl9ORlBSRUcJMTI4CS8qIGYwIGFuZCBmMSBjb3VsZCBiZSBvbWl0dGVkLCBidXQgc28gd2hhdC4u LiAqLwogCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZweHJlZ3NldF90OworCiB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKIHR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3Nl dF90W0VMRl9OR1JFR107CiAKIHR5cGVkZWYgc3RydWN0IGlhNjRfZnByZWcgZWxmX2ZwcmVnX3Q7 CiB0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOwogCisKKwog c3RydWN0IHB0X3JlZ3M7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24uLi4gKi8KIGV4dGVybiB2b2lk IGlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAqc3JjLCBlbGZfZ3JlZ3Nl dF90IGRzdCk7CiAjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhfZGVzdCxfcmVncykJaWE2NF9l bGZfY29yZV9jb3B5X3JlZ3MoX3JlZ3MsIF9kZXN0KTsKQEAgLTg4LDYgKzkyLDE0IEBACiBzdHJ1 Y3QgZWxmNjRfaGRyOwogZXh0ZXJuIHZvaWQgaWE2NF9zZXRfcGVyc29uYWxpdHkgKHN0cnVjdCBl bGY2NF9oZHIgKmVsZl9leCwgaW50IGliY3MyX2ludGVycHJldGVyKTsKICNkZWZpbmUgU0VUX1BF UlNPTkFMSVRZKGV4LCBpYmNzMikJaWE2NF9zZXRfcGVyc29uYWxpdHkoJihleCksIGliY3MyKQor CitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3Jl Z3NldF90ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3Qg KiwgZWxmX2ZwcmVnc2V0X3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1Mo dHNrLCBlbGZfZ3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX2dyZWdzKQorI2RlZmluZSBF TEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBl bGZfZnByZWdzKQorCisKICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X0VMRl9IICovCmRp ZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMjEvaW5jbHVkZS9saW51eC9lbGYuaCBsaW51 eDI1MjEudGNvcmUvaW5jbHVkZS9saW51eC9lbGYuaAotLS0gbGludXgtMi41LjIxL2luY2x1ZGUv bGludXgvZWxmLmgJU3VuIEp1biAgOSAwMToyNzozOSAyMDAyCisrKyBsaW51eDI1MjEudGNvcmUv aW5jbHVkZS9saW51eC9lbGYuaAlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTU3Niw2ICs1 NzYsOSBAQAogI2RlZmluZSBOVF9QUlBTSU5GTwkzCiAjZGVmaW5lIE5UX1RBU0tTVFJVQ1QJNAog I2RlZmluZSBOVF9QUkZQWFJFRwkyMAorI2RlZmluZSBOVF9QUlhGUFJFRyAgICAgMHg0NmU2MmI3 ZgkvKiBub3RlIG5hbWUgbXVzdCBiZSAiTElOVVgiIGFzIHBlciBHREIgKi8KKwkJCQkJLyogZnJv bSBnZGI1LjEvaW5jbHVkZS9lbGYvY29tbW9uLmggKi8KKwogCiAvKiBOb3RlIGhlYWRlciBpbiBh IFBUX05PVEUgc2VjdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CkBAIC02MDYs NiArNjA5LDUgQEAKICNkZWZpbmUgZWxmX25vdGUJZWxmNjRfbm90ZQogCiAjZW5kaWYKLQogCiAj ZW5kaWYgLyogX0xJTlVYX0VMRl9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUu MjEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmggbGludXgyNTIxLnRjb3JlL2luY2x1ZGUvbGludXgv ZWxmY29yZS5oCi0tLSBsaW51eC0yLjUuMjEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgJU3VuIEp1 biAgOSAwMToyOTo1MCAyMDAyCisrKyBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9saW51eC9lbGZj b3JlLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBAIC04Niw0ICs4Niw0OCBAQAogI2RlZmlu ZSBQUkFSR1NaIEVMRl9QUkFSR1NaIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdGF0 aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3Ms IHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfUkVHUworCUVM Rl9DT1JFX0NPUFlfUkVHUygoKmVsZnJlZ3MpLCByZWdzKQorI2Vsc2UKKwlpZiAoc2l6ZW9mKGVs Zl9ncmVnc2V0X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpIHsKKwkJcHJpbnRrKCJzaXpl b2YoZWxmX2dyZWdzZXRfdCkgKCVsZCkgIT0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAoJWxkKVxu IiwKKwkJCShsb25nKXNpemVvZihlbGZfZ3JlZ3NldF90KSwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBw dF9yZWdzKSk7CisJfSBlbHNlCisJCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7 CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Mo c3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQoreworI2lmZGVm IEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCisJCisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfVEFTS19S RUdTKHQsIGVsZnJlZ3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgZHVt cF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOworCitzdGF0aWMgaW5s aW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwg ZWxmX2ZwcmVnc2V0X3QgKmZwdSkKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX0ZQUkVHUworCXJl dHVybiBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0LCBmcHUpOworI2Vsc2UKKwlyZXR1cm4gZHVtcF9m cHUoTlVMTCwgZnB1KTsKKyNlbmRpZgorfQorCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdT CitzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnQsIGVsZl9mcHhyZWdzZXRfdCAqeGZwdSkKK3sKKwlyZXR1cm4gRUxGX0NPUkVf Q09QWV9YRlBSRUdTKHQsIHhmcHUpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9f ICovCisKKwogI2VuZGlmIC8qIF9MSU5VWF9FTEZDT1JFX0ggKi8KZGlmZiAtdXJOIC1YIGRvbnRk aWZmIGxpbnV4LTIuNS4yMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbGludXgyNTIxLnRjb3JlL2lu Y2x1ZGUvbGludXgvc2NoZWQuaAotLS0gbGludXgtMi41LjIxL2luY2x1ZGUvbGludXgvc2NoZWQu aAlTdW4gSnVuICA5IDAxOjI3OjIxIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9pbmNsdWRlL2xp bnV4L3NjaGVkLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBAIC0xMzIsNiArMTMyLDE0IEBA CiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCisKKy8qIGZ1bmN0aW9ucyBmb3IgcGF1 c2luZyBhbmQgcmVzdW1taW5nIGZ1bmN0aW9ucyAKKyAqIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNp bmcgc2lnbmFscy4gIFRoZXNlIGFyZSB1c2VkCisgKiBieSB0aGUgbXVsdGl0aHJlYWRlZCBlbGYg Y29yZSBkdW1wIGNvZGUgaW4gYmluZm10X2VsZi5jKi8KK2V4dGVybiB2b2lkIHRjb3JlX3N1c3Bl bmRfdGhyZWFkcyggdm9pZCApOworZXh0ZXJuIHZvaWQgdGNvcmVfcmVzdW1lX3RocmVhZHMoIHZv aWQgKTsKKworCiAvKgogICogVGhpcyBzZXJpYWxpemVzICJzY2hlZHVsZSgpIiBhbmQgYWxzbyBw cm90ZWN0cwogICogdGhlIHJ1bi1xdWV1ZSBmcm9tIGRlbGV0aW9ucy9tb2RpZmljYXRpb25zIChi dXQKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9rZXJuZWwvc2NoZWQuYyBsaW51 eDI1MjEudGNvcmUva2VybmVsL3NjaGVkLmMKLS0tIGxpbnV4LTIuNS4yMS9rZXJuZWwvc2NoZWQu YwlTdW4gSnVuICA5IDAxOjI4OjEzIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9rZXJuZWwvc2No ZWQuYwlGcmkgSnVuIDE0IDE1OjI3OjEwIDIwMDIKQEAgLTE0NSw3ICsxNDUsOCBAQAogCWxpc3Rf dCBtaWdyYXRpb25fcXVldWU7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAotc3RhdGljIHN0 cnVjdCBydW5xdWV1ZSBydW5xdWV1ZXNbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0 YXRpYyBzdHJ1Y3QgcnVucXVldWUgcnVucXVldWVzW05SX0NQVVMgKyAxXSBfX2NhY2hlbGluZV9h bGlnbmVkOworI2RlZmluZSBQSEFOVE9NX0NQVSBOUl9DUFVTCiAKICNkZWZpbmUgY3B1X3JxKGNw dSkJCShydW5xdWV1ZXMgKyAoY3B1KSkKICNkZWZpbmUgdGhpc19ycSgpCQljcHVfcnEoc21wX3By b2Nlc3Nvcl9pZCgpKQpAQCAtMjU2LDYgKzI1Nyw5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWlu dCBuZWVkX3Jlc2NoZWQsIG5ycG9sbGluZzsKIAorCWlmKCB1bmxpa2VseSghcC0+Y3B1c19hbGxv d2VkKSApCisJCQlyZXR1cm47CisJCQkKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBtaW5pbWlz ZSB0aGUgY2hhbmNlIG9mIHNlbmRpbmcgYW4gaW50ZXJydXB0IHRvIHBvbGxfaWRsZSgpICovCiAJ bnJwb2xsaW5nID0gdGVzdF90c2tfdGhyZWFkX2ZsYWcocCxUSUZfUE9MTElOR19OUkZMQUcpOwpA QCAtMzM2LDcgKzM0MCw3IEBACiAJCWlmIChvbGRfc3RhdGUgPT0gVEFTS19VTklOVEVSUlVQVElC TEUpCiAJCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CiAJCWFjdGl2YXRlX3Rhc2socCwgcnEp OwotCQlpZiAocC0+cHJpbyA8IHJxLT5jdXJyLT5wcmlvKQorCQlpZiAocC0+Y3B1c19hbGxvd2Vk ICYmIChwLT5wcmlvIDwgcnEtPmN1cnItPnByaW8pICkKIAkJCXJlc2NoZWRfdGFzayhycS0+Y3Vy cik7CiAJCXN1Y2Nlc3MgPSAxOwogCX0KQEAgLTEwMDQsNiArMTAwOCwxMzMgQEAKIAogdm9pZCBz Y2hlZHVsaW5nX2Z1bmN0aW9uc19lbmRfaGVyZSh2b2lkKSB7IH0KIAorLyoKKyAqIG5lZWRlZCBm b3IgYWNjdXJhdGUgY29yZSBkdW1wcyBvZiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisg KiBzZWUgYmluZm10X2VsZi5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9p ZCByZXNjaGVkdWxlX290aGVyX2NwdXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50 IGksIGNwdTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlmb3IoaT0wOyBpPCBzbXBfbnVt X2NwdXM7IGkrKykgeworCQljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CisJCXAgPSBjcHVfY3Vy cihjcHUpOworCQlpZiAocC0+dGhyZWFkX2luZm8tPmNwdSE9IHNtcF9wcm9jZXNzb3JfaWQoKSkg eworCQkJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CisJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAt PnRocmVhZF9pbmZvLT5jcHUpOworCQl9CisJfQorI2VuZGlmCQorCXJldHVybjsKK30KKworCisv KiBmdW5jdGlvbnMgZm9yIHBhdXNpbmcgYW5kIHJlc3VtbWluZyBmdW5jdGlvbnMgd2l0aCBvdXQg dXNpbmcgc2lnbmFscyAqLwordm9pZCB0Y29yZV9zdXNwZW5kX3RocmVhZHModm9pZCkKK3sKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCXJ1bnF1ZXVlX3QgKnBoYW50b21ROworCXRhc2tfdCAqdGhy ZWFkc1tOUl9DUFVTXSwgKnA7CisJaW50IGksIE9uQ1BVQ291bnQgPSAwOworCisvLworLy8gZ3Jh YiBhbGwgdGhlIHJxX2xvY2tzLgorLy8gY3VycmVudCBpcyB0aGUgcHJvY2VzcyBkdW1waW5nIGNv cmUKKy8vICAKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJLy8gYXZv aWQgcG90ZW50aWFsIHJhY2Ugb24gPjIgd2F5IFNNUCBpZiAzIG9yIG1vcmUgdGhyZWFkIHByb2Nz CisJLy8gZHVtcCBjb3JlIGF0IHRoZSBzYW1lIHRpbWUuCisJCisJbG9jYWxfaXJxX3NhdmUoZmxh Z3MpOworCisJZm9yKGk9MDsgaTwgc21wX251bV9jcHVzOyBpKyspIHsKKwkJc3Bpbl9sb2NrKCZj cHVfcnEoaSktPmxvY2spOworCX0KKworCWN1cnJlbnQtPmNwdXNfYWxsb3dlZCA9IDFVTCA8PCBj dXJyZW50LT50aHJlYWRfaW5mby0+Y3B1OworCS8vIHByZXZlbnQgbWlncmFpb24gb2YgZHVtcGlu ZyBwcm9jZXNzIG1ha2luZyBsaWZlIGNvbXBsaWNhdGVkLgorCisJcGhhbnRvbVEgPSBjcHVfcnEo UEhBTlRPTV9DUFUpOyAKKwlzcGluX2xvY2soJnBoYW50b21RLT5sb2NrKTsKKwkKKwlyZXNjaGVk dWxlX290aGVyX2NwdXMoKTsKKwkvLyB0aGlzIGlzIGFuIG9wdGlvbmFsIElQSSwgYnV0IGl0IG1h a2VzIGZvciB0aGUgbW9zdCBhY2N1cmF0ZSBjb3JlIGZpbGVzIHBvc3NpYmxlLgorCQorCXJlYWRf bG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlmb3JfZWFjaF90YXNrKHApIHsKKwkJaWYgKGN1cnJl bnQtPm1tID09IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJaWYoIHAgPT0gdGFza19ycShw KS0+Y3VyciApIHsKKwkJCQkvL3RoZW4gcmVtZW1iZXIgaXQgZm9yIGxhdGVyIHVzIG9mIHNldF9j cHVzX2FsbG93ZWQKKwkJCQl0aHJlYWRzW09uQ1BVQ291bnRdID0gcDsKKwkJCQlwLT5jcHVzX2Fs bG93ZWQgPSAwOy8vcHJldmVudCBsb2FkIGJhbGFuY2UgZnJvbSBtb3ZpbmcgdGhlc2UgZ3V5cy4K KwkJCQlPbkNQVUNvdW50ICsrOworCQkJfSBlbHNlIHsKKwkJCQkvLyB3ZSBtYW51YWx5IG1vdmUg dGhlIHByb2Nlc3MgdG8gdGhlIHBoYW50b20gcnVuIHF1ZXVlLgorCisJCQkJaWYgKHAtPmFycmF5 KSB7CisJCQkJCWRlYWN0aXZhdGVfdGFzayhwLCB0YXNrX3JxKHApKTsKKwkJCQkJYWN0aXZhdGVf dGFzayhwLCBwaGFudG9tUSk7CisJCQkJfQorCQkJCXAtPnRocmVhZF9pbmZvLT5jcHUgPSBQSEFO VE9NX0NQVTsKKwkJCQlwLT5jcHVzX2FsbG93ZWQgPSAwOy8vcHJldmVudCBsb2FkIGJhbGFuY2Ug ZnJvbSBtb3ZpbmcgdGhlc2UgZ3V5cy4KKwkJCX0KKwkJfQorCX0KKwlyZWFkX3VubG9jaygmdGFz a2xpc3RfbG9jayk7CisKKwlzcGluX3VubG9jaygmcGhhbnRvbVEtPmxvY2spOworCWZvcihpPXNt cF9udW1fY3B1cy0xOyAwPD0gaTsgaS0tKSB7CisJCXNwaW5fdW5sb2NrKCZjcHVfcnEoaSktPmxv Y2spOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWZvciggaSA9IDA7IGk8 T25DUFVDb3VudDsgaSsrKSB7CisJCXNldF9jcHVzX2FsbG93ZWQodGhyZWFkc1tpXSwgMCk7CisJ fQorCQorCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworfQorCit2b2lkIHRjb3Jl X3Jlc3VtZV90aHJlYWRzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlydW5xdWV1 ZV90ICpwaGFudG9tUTsKKwl0YXNrX3QgKnA7CisJaW50IGk7CisKKwlsb2NhbF9pcnFfc2F2ZShm bGFncyk7CisJcGhhbnRvbVEgPSBjcHVfcnEoUEhBTlRPTV9DUFUpOworCisJc3Bpbl9sb2NrKCZ0 YXNrX3JxKGN1cnJlbnQpLT5sb2NrKTsKKwlzcGluX2xvY2soJnBoYW50b21RLT5sb2NrKTsKKwkK KwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWZvcl9lYWNoX3Rhc2socCkgeworCQlpZiAo Y3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVudCAhPSBwKSB7CisJCQlwLT5jcHVzX2FsbG93 ZWQgPSAxVUwgPDwgY3VycmVudC0+dGhyZWFkX2luZm8tPmNwdTsKKwkJCWlmIChwLT5hcnJheSkg eworCQkJCWRlYWN0aXZhdGVfdGFzayhwLHBoYW50b21RKTsKKwkJCQlhY3RpdmF0ZV90YXNrKHAs IHRhc2tfcnEoY3VycmVudCkpOworCQkJfQorCQkJcC0+dGhyZWFkX2luZm8tPmNwdSA9IGN1cnJl bnQtPnRocmVhZF9pbmZvLT5jcHU7CisJCX0KKwl9CisKKwlyZWFkX3VubG9jaygmdGFza2xpc3Rf bG9jayk7CisKKwlzcGluX3VubG9jaygmcGhhbnRvbVEtPmxvY2spOworCXNwaW5fdW5sb2NrKCZ0 YXNrX3JxKGN1cnJlbnQpLT5sb2NrKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30K KworCisKIHZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSkKIHsKIAl1bnNp Z25lZCBsb25nIGZsYWdzOwpAQCAtMTU5MSw5ICsxNzIyLDkgQEAKIHsKIAlydW5xdWV1ZV90ICpy cTsKIAlpbnQgaSwgaiwgazsKKwlwcmlvX2FycmF5X3QgKmFycmF5OwogCiAJZm9yIChpID0gMDsg aSA8IE5SX0NQVVM7IGkrKykgewotCQlwcmlvX2FycmF5X3QgKmFycmF5OwogCiAJCXJxID0gY3B1 X3JxKGkpOwogCQlycS0+YWN0aXZlID0gcnEtPmFycmF5czsKQEAgLTE2MTIsNiArMTc0MywyOCBA QAogCQkJX19zZXRfYml0KE1BWF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAkJfQogCX0KKworIAor CWkgPSBQSEFOVE9NX0NQVTsKKwlycSA9IGNwdV9ycShpKTsKKwlycS0+YWN0aXZlID0gcnEtPmFy cmF5czsKKwlycS0+ZXhwaXJlZCA9IHJxLT5hcnJheXMgKyAxOworCXJxLT5jdXJyID0gTlVMTDsK KwlzcGluX2xvY2tfaW5pdCgmcnEtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZycS0+ZnJvemVu KTsKKwlJTklUX0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisKKwlmb3IgKGogPSAw OyBqIDwgMjsgaisrKSB7CisJCWFycmF5ID0gcnEtPmFycmF5cyArIGo7CisJCWZvciAoayA9IDA7 IGsgPCBNQVhfUFJJTzsgaysrKSB7CisJCQlJTklUX0xJU1RfSEVBRChhcnJheS0+cXVldWUgKyBr KTsKKwkJCV9fY2xlYXJfYml0KGssIGFycmF5LT5iaXRtYXApOworCQl9CisJCS8vIGRlbGltaXRl ciBmb3IgYml0c2VhcmNoCisJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CisJ fQorCisKIAkvKgogCSAqIFdlIGhhdmUgdG8gZG8gYSBsaXR0bGUgbWFnaWMgdG8gZ2V0IHRoZSBm aXJzdAogCSAqIHByb2Nlc3MgcmlnaHQgaW4gU01QIG1vZGUuCkBAIC0xNjcyLDkgKzE4MjUsMTEg QEAKIAltaWdyYXRpb25fcmVxX3QgcmVxOwogCXJ1bnF1ZXVlX3QgKnJxOwogCi0JbmV3X21hc2sg Jj0gY3B1X29ubGluZV9tYXA7Ci0JaWYgKCFuZXdfbWFzaykKLQkJQlVHKCk7CisJaWYobmV3X21h c2speyAvLyBjYW4gYmUgTyBmb3IgVENvcmUgcHJvY2VzcyBzdXNwZW5kcworCQluZXdfbWFzayAm PSBjcHVfb25saW5lX21hcDsKKwkJaWYgKCFuZXdfbWFzaykKKwkJCUJVRygpOworCX0KIAogCXBy ZWVtcHRfZGlzYWJsZSgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CkBAIC0xNzQ3 LDcgKzE5MDIsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdz KTsKIAogCQlwID0gcmVxLT50YXNrOwotCQljcHVfZGVzdCA9IF9fZmZzKHAtPmNwdXNfYWxsb3dl ZCk7CisKKwkJaWYoIHAtPmNwdXNfYWxsb3dlZCkKKwkJCWNwdV9kZXN0ID0gX19mZnMocC0+Y3B1 c19hbGxvd2VkKTsKKwkJZWxzZQorCQkJY3B1X2Rlc3QgPSBQSEFOVE9NX0NQVTsKKwogCQlycV9k ZXN0ID0gY3B1X3JxKGNwdV9kZXN0KTsKIHJlcGVhdDoKIAkJY3B1X3NyYyA9IHAtPnRocmVhZF9p bmZvLT5jcHU7CkJpbmFyeSBmaWxlcyBsaW51eC0yLjUuMjEvc2NyaXB0cy9maXhkZXAgYW5kIGxp bnV4MjUyMS50Y29yZS9zY3JpcHRzL2ZpeGRlcCBkaWZmZXIK --------------Boundary-00=_WOPPXSJZ0C8YG1ZUKIOY-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/