Date: Tue, 26 Oct 2010 11:09:53 -0700 From: Garrett Cooper <yanegomi@gmail.com> To: freebsd-hackers@freebsd.org Subject: [PATCH] mfiutil(8) - capture errors and percolate up to caller Message-ID: <AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--0016e64967c8f95e77049389033e Content-Type: text/plain; charset=ISO-8859-1 Because a number of places in the mfiutil(8) code immediately call warn(3) after an error to an API occurred, and because warn(3) employs printf, et all (multiple times) in libc, there's an off-chance that the errno value can get stomped on by the warn(3) calls, which could lead to confusing results from anyone depending on the value being returned from the mfiutil APIs. Thus, the attached patch I'm providing fixes those cases, as well as converts an existing internal API (display_pending_firmware) to an non-void return mechanism. I also made a few stack variable alignment changes to match style(9) as well as got rid of the ad hoc powerof2 call in favor of the value in sys/param.h. I've run a small number of unit tests on my desktop at home with my mfi(4) card, but will test out other failing cases with equipment I have access to at work. Thanks! -Garrett --0016e64967c8f95e77049389033e Content-Type: text/x-patch; charset=US-ASCII; name="mfiutil-capture-errno-values.patch" Content-Disposition: attachment; filename="mfiutil-capture-errno-values.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gfr3a4kx0 SW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5z YmluL21maXV0aWwvbWZpX2NvbmZpZy5jCShyZXZpc2lvbiAyMTQyNjApCisrKyB1c3Iuc2Jpbi9t Zml1dGlsL21maV9jb25maWcuYwkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAg KiAkRnJlZUJTRCQKICAqLwogCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lz L3R5cGVzLmg+CiAjaWZkZWYgREVCVUcKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjZW5kaWYK LSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KICNpZmRlZiBERUJVRwogI2luY2x1ZGUgPHN0ZGlu dC5oPgpAQCAtNTIsOCArNTMsNiBAQAogc3RhdGljIGludAlhZGRfc3BhcmUoaW50IGFjLCBjaGFy ICoqYXYpOwogc3RhdGljIGludAlyZW1vdmVfc3BhcmUoaW50IGFjLCBjaGFyICoqYXYpOwogCi0j ZGVmaW5lIHBvd2Vyb2YyKHgpICAgICgoKCh4KS0xKSYoeCkpPT0wKQotCiBzdGF0aWMgbG9uZwog ZGVodW1hbml6ZShjb25zdCBjaGFyICp2YWx1ZSkKIHsKQEAgLTE1MSwxMyArMTUwLDE0IEBACiBj bGVhcl9jb25maWcoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3RydWN0IG1maV9sZF9saXN0IGxp c3Q7Ci0JaW50IGNoLCBmZDsKKwlpbnQgY2gsIGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJZmQg PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCiAJaWYgKCFtZmlfcmVjb25maWdfc3VwcG9ydGVkKCkpIHsKQEAgLTE2Nyw4ICsxNjcs OSBAQAogCX0KIAogCWlmIChtZmlfbGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIpOwot CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZm9yIChpID0gMDsg aSA8IGxpc3QubGRfY291bnQ7IGkrKykgewpAQCAtMTg5LDggKzE5MCw5IEBACiAJfQogCiAJaWYg KG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19DTEVBUiwgTlVMTCwgMCwgTlVMTCwg MCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjbGVh ciBjb25maWd1cmF0aW9uIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAKIAlwcmludGYoIm1maSVkOiBDb25maWd1cmF0aW9uIGNsZWFyZWRcbiIsIG1maV91bml0 KTsKQEAgLTMzNSw4ICszMzcsOSBAQAogCQkJcmV0dXJuIChlcnJvcik7CiAKIAkJaWYgKG1maV9w ZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCBwaW5mbywgTlVMTCkgPCAwKSB7CisJCQllcnJvciA9 IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8gZm9yIGRyaXZlICVz IiwgY3ApOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ CWlmIChwaW5mby0+Zndfc3RhdGUgIT0gTUZJX1BEX1NUQVRFX1VOQ09ORklHVVJFRF9HT09EKSB7 CkBAIC01NDgsOCArNTUxLDkgQEAKIAkKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAo ZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVy biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19z dXBwb3J0ZWQoKSkgewpAQCAtNjYwLDggKzY2NCw5IEBACiAJICogYXJyYXkgYW5kIHZvbHVtZSBp ZGVudGlmaWVycy4KIAkgKi8KIAlpZiAobWZpX2NvbmZpZ19yZWFkKGZkLCAmY29uZmlnKSA8IDAp IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHJlYWQgY29uZmlndXJhdGlv biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXAgPSAoY2hh ciAqKWNvbmZpZy0+YXJyYXk7CiAJc3RhdGUuYXJyYXlfcmVmID0gMHhmZmZmOwpAQCAtNzQ1LDE0 ICs3NTAsMTQgQEAKICNpZmRlZiBERUJVRwogCWlmIChkdW1wKQogCQlkdW1wX2NvbmZpZyhmZCwg Y29uZmlnKTsKLQllbHNlCiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyBjb25maWcgdG8gdGhl IGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19B REQsIGNvbmZpZywgY29uZmlnX3NpemUsCiAJICAgIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2xlYW4gdXAuICovCkBAIC03 NzQsNyArNzc5LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3Ry dWN0IG1maV9sZF9pbmZvIGluZm87Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhf dCB0YXJnZXRfaWQsIG1ib3hbNF07CiAKIAkvKgpAQCAtNzk5LDggKzgwNCw5IEBACiAKIAlmZCA9 IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJ CXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19zdXBwb3J0ZWQoKSkgewpAQCAtODEwLDEzICs4MTYs MTUgQEAKIAl9CiAKIAlpZiAobWZpX2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmdGFyZ2V0X2lk KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBh dlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBpbmZvIGZvciB2b2x1bWUgJWQiLCB0 YXJnZXRfaWQpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ aWYgKG1maV92b2x1bWVfYnVzeShmZCwgdGFyZ2V0X2lkKSkgewpAQCAtODI4LDggKzgzNiw5IEBA CiAJbWJveF9zdG9yZV9sZHJlZihtYm94LCAmaW5mby5sZF9jb25maWcucHJvcGVydGllcy5sZCk7 CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0xEX0RFTEVURSwgTlVMTCwgMCwg bWJveCwKIAkgICAgc2l6ZW9mKG1ib3gpLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK IAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTg1OCw4ICs4NjcsOSBAQAog CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl cnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZkLCBhdlsxXSwgJmRldmlj ZV9pZCk7CkBAIC04NjcsOCArODc3LDkgQEAKIAkJcmV0dXJuIChlcnJvcik7CiAKIAlpZiAobWZp X3BkX2dldF9pbmZvKGZkLCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3Ig PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJu IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9 IE1GSV9QRF9TVEFURV9VTkNPTkZJR1VSRURfR09PRCkgewpAQCAtODc4LDE0ICs4ODksMTYgQEAK IAogCWlmIChhYyA+IDIpIHsKIAkJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZkLCBhdlsyXSwgJnRh cmdldF9pZCkgPCAwKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiSW52YWxpZCB2b2x1 bWUgJXMiLCBhdlsyXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3IpOwog CQl9CiAJfQogCiAJaWYgKG1maV9jb25maWdfcmVhZChmZCwgJmNvbmZpZykgPCAwKSB7CisJCWVy cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24iKTsKLQkJ cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXNwYXJlID0gbWFsbG9j KHNpemVvZihzdHJ1Y3QgbWZpX3NwYXJlKSArIHNpemVvZih1aW50MTZfdCkgKgpAQCAtOTM5LDgg Kzk1Miw5IEBACiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19NQUtFX1NQ QVJFLCBzcGFyZSwKIAkgICAgc2l6ZW9mKHN0cnVjdCBtZmlfc3BhcmUpICsgc2l6ZW9mKHVpbnQx Nl90KSAqIHNwYXJlLT5hcnJheV9jb3VudCwKIAkgICAgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJ CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBhc3NpZ24gc3BhcmUiKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTk2 NCw4ICs5NzgsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkg eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZk LCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC05NzQsOCArOTg5LDkgQEAKIAogCS8qIEdldCB0aGUg aW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBkZXZpY2Vf aWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVk IHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9IE1GSV9Q RF9TVEFURV9IT1RfU1BBUkUpIHsKQEAgLTk4Niw4ICsxMDAyLDkgQEAKIAltYm94X3N0b3JlX3Bk cmVmKG1ib3gsICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01E X0NGR19SRU1PVkVfU1BBUkUsIE5VTEwsIDAsIG1ib3gsCiAJICAgIHNpemVvZihtYm94KSwgTlVM TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgc3Bh cmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3Nl KGZkKTsKQEAgLTEwOTMsNyArMTExMCw3IEBACiBkZWJ1Z19jb25maWcoaW50IGFjLCBjaGFyICoq YXYpCiB7CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwotCWludCBmZDsKKwlpbnQg ZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoImRlYnVnOiBleHRyYSBhcmd1 bWVudHMiKTsKQEAgLTExMDIsMTQgKzExMTksMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3Vu aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0 aGUgY29uZmlnIGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9jb25maWdfcmVhZChm ZCwgJmNvbmZpZykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBn ZXQgY29uZmlnIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK IAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlvbi4gKi8KQEAgLTExMjcsNyArMTE0Niw3IEBA CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwogCWNoYXIgYnVmWzY0XTsKIAlzaXpl X3QgbGVuOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJ d2FybngoImR1bXA6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMTEzNiwyMyArMTE1NSwyNiBAQAog CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl cnJvcik7CiAJfQogCiAJLyogR2V0IHRoZSBzdGFzaGVkIGNvcHkgb2YgdGhlIGxhc3QgZGNtZCBm cm9tIHRoZSBkcml2ZXIuICovCiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRldi5tZmku JWQuZGVidWdfY29tbWFuZCIsIG1maV91bml0KTsKIAlpZiAoc3lzY3RsYnluYW1lKGJ1ZiwgTlVM TCwgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxl ZCB0byByZWFkIGRlYnVnIGNvbW1hbmQiKTsKLQkJaWYgKGVycm5vID09IEVOT0VOVCkKLQkJCWVy cm5vID0gRU9QTk9UU1VQUDsKLQkJcmV0dXJuIChlcnJubyk7CisJCWlmIChlcnJvciA9PSBFTk9F TlQpCisJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNv bmZpZyA9IG1hbGxvYyhsZW4pOwogCWlmIChzeXNjdGxieW5hbWUoYnVmLCBjb25maWcsICZsZW4s IE5VTEwsIDApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gcmVh ZCBkZWJ1ZyBjb21tYW5kIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAJZHVtcF9jb25maWcoZmQsIGNvbmZpZyk7CiAJZnJlZShjb25maWcpOwpJbmRleDogdXNy LnNiaW4vbWZpdXRpbC9tZmlfdm9sdW1lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp bC9tZmlfdm9sdW1lLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp X3ZvbHVtZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKIHVwZGF0ZV9jYWNo ZV9wb2xpY3koaW50IGZkLCBzdHJ1Y3QgbWZpX2xkX3Byb3BzICpwcm9wcywgdWludDhfdCBuZXdf cG9saWN5LAogICAgIHVpbnQ4X3QgbWFzaykKIHsKKwlpbnQgZXJyb3I7CiAJdWludDhfdCBjaGFu Z2VzLCBwb2xpY3k7CiAKIAlwb2xpY3kgPSAocHJvcHMtPmRlZmF1bHRfY2FjaGVfcG9saWN5ICYg fm1hc2spIHwgbmV3X3BvbGljeTsKQEAgLTE0MCw4ICsxNDEsOSBAQAogCiAJcHJvcHMtPmRlZmF1 bHRfY2FjaGVfcG9saWN5ID0gcG9saWN5OwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCBwcm9w cykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1l IHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0K IAlyZXR1cm4gKDApOwogfQpAQCAtMTYwLDE4ICsxNjIsMjEgQEAKIAogCWZkID0gbWZpX29wZW4o bWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZp X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlm IChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQllcnJv ciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVy biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9wcm9w cyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu KCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7 CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChhYyA9PSAyKSB7CkBAIC0yOTgsOCArMzAz LDggQEAKIAkJCQl9CiAJCQkJcHJvcHMuZGlza19jYWNoZV9wb2xpY3kgPSBwb2xpY3k7CiAJCQkJ aWYgKG1maV9sZF9zZXRfcHJvcHMoZmQsICZwcm9wcykgPCAwKSB7CisJCQkJCWVycm9yID0gZXJy bm87CiAJCQkJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJCQkJ ZXJyb3IgPSBlcnJubzsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0zMTcsNyArMzIyLDcg QEAKIHZvbHVtZV9uYW1lKGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfbGRfcHJv cHMgcHJvcHM7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhfdCB0YXJnZXRfaWQ7 CiAKIAlpZiAoYWMgIT0gMykgewpAQCAtMzMyLDE4ICszMzcsMjEgQEAKIAogCWZkID0gbWZpX29w ZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fybigi bWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog CWlmIChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJl dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9w cm9wcyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3 YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50ZigibWZpJXUgdm9sdW1lICVzIG5h bWUgY2hhbmdlZCBmcm9tIFwiJXNcIiB0byBcIiVzXCJcbiIsIG1maV91bml0LApAQCAtMzUxLDgg KzM1OSw5IEBACiAJYnplcm8ocHJvcHMubmFtZSwgc2l6ZW9mKHByb3BzLm5hbWUpKTsKIAlzdHJj cHkocHJvcHMubmFtZSwgYXZbMl0pOwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCAmcHJvcHMp IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHZvbHVtZSBw cm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK IAljbG9zZShmZCk7CkBAIC0zNjUsNyArMzc0LDcgQEAKIHZvbHVtZV9wcm9ncmVzcyhpbnQgYWMs IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3QgbWZpX2xkX2luZm8gaW5mbzsKLQlpbnQgZmQ7CisJaW50 IGVycm9yLCBmZDsKIAl1aW50OF90IHRhcmdldF9pZDsKIAogCWlmIChhYyAhPSAyKSB7CkBAIC0z NzYsMjAgKzM4NSwyMyBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwg MCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVy cm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZk LCBhdlsxXSwgJnRhcmdldF9pZCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIklu dmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo ZXJyb3IpOwogCX0KIAogCS8qIEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAo bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIHZvbHVtZSAlcyIs CiAJCSAgICBtZmlfdm9sdW1lX25hbWUoZmQsIHRhcmdldF9pZCkpOwotCQlyZXR1cm4gKGVycm5v KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGlzcGxheSBhbnkgb2YgdGhlIGFjdGl2 ZSBldmVudHMuICovCkluZGV4OiB1c3Iuc2Jpbi9tZml1dGlsL21maV9kcml2ZS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHJldmlzaW9uIDIxNDI2MCkKKysr IHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3 OSwxMSBAQAogbWZpX2xvb2t1cF9kcml2ZShpbnQgZmQsIGNoYXIgKmRyaXZlLCB1aW50MTZfdCAq ZGV2aWNlX2lkKQogewogCXN0cnVjdCBtZmlfcGRfbGlzdCAqbGlzdDsKLQl1aW50OF90IGVuY2ws IHNsb3Q7CiAJbG9uZyB2YWw7CisJaW50IGVycm9yOwogCXVfaW50IGk7CiAJY2hhciAqY3A7CisJ dWludDhfdCBlbmNsLCBzbG90OwogCiAJLyogTG9vayBmb3IgYSByYXcgZGV2aWNlIGlkIGZpcnN0 LiAqLwogCXZhbCA9IHN0cnRvbChkcml2ZSwgJmNwLCAwKTsKQEAgLTExOCw4ICsxMTksOSBAQAog CQlzbG90ID0gdmFsOwogCiAJCWlmIChtZmlfcGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8 IDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZHJpdmUg bGlzdCIpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ CWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CkBAIC0zMDIsOCArMzA0LDkgQEAK IAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBl cnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo ZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgZHJpdmUsICZkZXZp Y2VfaWQpOwpAQCAtMzEyLDggKzMxNSw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMg ZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVM TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv IGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g KGVycm9yKTsKIAl9CiAKIAkvKiBUcnkgdG8gY2hhbmdlIHRoZSBzdGF0ZS4gKi8KQEAgLTMyNyw5 ICszMzEsMTAgQEAKIAltYm94WzVdID0gbmV3X3N0YXRlID4+IDg7CiAJaWYgKG1maV9kY21kX2Nv bW1hbmQoZmQsIE1GSV9EQ01EX1BEX1NUQVRFX1NFVCwgTlVMTCwgMCwgbWJveCwgNiwKIAkgICAg TlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgZHJp dmUgJXUgdG8gJXMiLCBkZXZpY2VfaWQsCiAJCSAgICBtZmlfcGRzdGF0ZShuZXdfc3RhdGUpKTsK LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK QEAgLTM5NSw4ICs0MDAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC00MDUsMTMgKzQxMSwxNCBAQAogCiAJLyog R2V0IHRoZSBpbmZvIGZvciB0aGlzIGRyaXZlLiAqLwogCWlmIChtZmlfcGRfZ2V0X2luZm8oZmQs IGRldmljZV9pZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu KCJGYWlsZWQgdG8gZmV0Y2ggaW5mbyBmb3IgZHJpdmUgJXUiLCBkZXZpY2VfaWQpOwotCQlyZXR1 cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHN0YXRl LCBtdXN0IGJlIFJFQlVJTEQuICovCiAJaWYgKGluZm8uZndfc3RhdGUgIT0gTUZJX1BEX1NUQVRF X1JFQlVJTEQpIHsKLQkJd2FybigiRHJpdmUgJWQgaXMgbm90IGluIHRoZSBSRUJVSUxEIHN0YXRl IiwgZGV2aWNlX2lkKTsKKwkJd2FybngoIkRyaXZlICVkIGlzIG5vdCBpbiB0aGUgUkVCVUlMRCBz dGF0ZSIsIGRldmljZV9pZCk7CiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTQxOSw4ICs0 MjYsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1m aV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJTERfU1RBUlQsIE5VTEwsIDAsIG1i b3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWls ZWQgdG8gc3RhcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAo ZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwogCkBAIC00NDQsOCAr NDUyLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgYXZb MV0sICZkZXZpY2VfaWQpOwpAQCAtNDU0LDggKzQ2Myw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8g Zm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAm aW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBm ZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOwor CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBDaGVjayB0aGUgc3RhdGUsIG11c3QgYmUgUkVC VUlMRC4gKi8KQEAgLTQ2OCw4ICs0NzgsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0s ICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJ TERfQUJPUlQsIE5VTEwsIDAsIG1ib3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9 IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWJvcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRl dmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xv c2UoZmQpOwogCkBAIC00OTIsOCArNTAzLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQp OwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsK LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZp X2xvb2t1cF9kcml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTAyLDggKzUxNCw5IEBA CiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRf aW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87 CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7 Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwog CkBAIC01NTEsOCArNTY0LDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChm ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJu IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9k cml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTYxLDE2ICs1NzUsMTggQEAKIAogCS8q IEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZk LCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fy bigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1ib3hfc3RvcmVfcGRyZWYo Jm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIG9wY29kZSwg TlVMTCwgMCwgbWJveCwgNCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o IkZhaWxlZCB0byAlcyBjbGVhciBvbiBkcml2ZSAldSIsCiAJCSAgICBvcGNvZGUgPT0gTUZJX0RD TURfUERfQ0xFQVJfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lkKTsK LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK QEAgLTYwNCw4ICs2MjAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC02MTcsMTAgKzYzNCwxMSBAQAogCW1ib3hb Ml0gPSAwOwogCW1ib3hbM10gPSAwOwogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBvcGNvZGUs IE5VTEwsIDAsIG1ib3gsIDQsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu KCJGYWlsZWQgdG8gJXMgbG9jYXRlIG9uIGRyaXZlICV1IiwKIAkJICAgIG9wY29kZSA9PSBNRklf RENNRF9QRF9MT0NBVEVfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lk KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAljbG9zZShmZCk7 CiAKSW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2ZsYXNoLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNy LnNiaW4vbWZpdXRpbC9tZmlfZmxhc2guYwkocmV2aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4v bWZpdXRpbC9tZmlfZmxhc2guYwkod29ya2luZyBjb3B5KQpAQCAtNzIsMTYgKzcyLDE4IEBACiAJ ICAgIGZ3X3RpbWVfd2lkdGgsIGNvbXAtPmJ1aWxkX3RpbWUpOwogfQogCi1zdGF0aWMgdm9pZAor c3RhdGljIGludAogZGlzcGxheV9wZW5kaW5nX2Zpcm13YXJlKGludCBmZCkKIHsKIAlzdHJ1Y3Qg bWZpX2N0cmxfaW5mbyBpbmZvOwogCXN0cnVjdCBtZmlfaW5mb19jb21wb25lbnQgaGVhZGVyOwor CWludCBlcnJvcjsKIAl1X2ludCBpOwogCiAJaWYgKG1maV9jdHJsX2dldF9pbmZvKGZkLCAmaW5m bywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQg Y29udHJvbGxlciBpbmZvIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ cHJpbnRmKCJtZmklZCBQZW5kaW5nIEZpcm13YXJlIEltYWdlczpcbiIsIG1maV91bml0KTsKQEAg LTk3LDYgKzk5LDggQEAKIAlkaXNwbGF5X2Zpcm13YXJlKCZoZWFkZXIpOwogCWZvciAoaSA9IDA7 IGkgPCBpbmZvLnBlbmRpbmdfaW1hZ2VfY29tcG9uZW50X2NvdW50OyBpKyspCiAJCWRpc3BsYXlf ZmlybXdhcmUoJmluZm8ucGVuZGluZ19pbWFnZV9jb21wb25lbnRbaV0pOworCisJcmV0dXJuICgw KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNyw3ICsxMjEsNyBAQAogCXNpemVfdCBucmVhZDsK IAljaGFyICpidWY7CiAJc3RydWN0IHN0YXQgc2I7Ci0JaW50IGZkLCBmbGFzaDsKKwlpbnQgZXJy b3IsIGZkLCBmbGFzaDsKIAl1aW50OF90IG1ib3hbNF0sIHN0YXR1czsKIAogCWlmIChhYyAhPSAy KSB7CkBAIC0xMjcsMTMgKzEzMSwxNSBAQAogCiAJZmxhc2ggPSBvcGVuKGF2WzFdLCBPX1JET05M WSk7CiAJaWYgKGZsYXNoIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJmbGFzaDog RmFpbGVkIHRvIG9wZW4gJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g KGVycm9yKTsKIAl9CiAKIAlpZiAoZnN0YXQoZmxhc2gsICZzYikgPCAwKSB7CisJCWVycm9yID0g ZXJybm87CiAJCXdhcm4oImZzdGF0KCVzKSIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAoc2Iuc3Rfc2l6ZSAlIDEwMjQgIT0gMCB8fCBzYi5z dF9zaXplID4gMHg3ZmZmZmZmZikgewogCQl3YXJueCgiSW52YWxpZCBmbGFzaCBmaWxlIHNpemUi KTsKQEAgLTE0Miw4ICsxNDgsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYg KGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1 cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRmlyc3QsIGFzayB0aGUg ZmlybXdhcmUgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmbGFzaCBmaWxlLiAqLwpAQCAtMTkw LDEwICsxOTcsMTAgQEAKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCXByaW50ZigiZmluaXNoZWRc biIpOwotCWRpc3BsYXlfcGVuZGluZ19maXJtd2FyZShmZCk7CisJZXJyb3IgPSBkaXNwbGF5X3Bl bmRpbmdfZmlybXdhcmUoZmQpOwogCiAJY2xvc2UoZmQpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1 cm4gKGVycm9yKTsKIH0KIE1GSV9DT01NQU5EKHRvcCwgZmxhc2gsIGZsYXNoX2FkYXB0ZXIpOwpJ bmRleDogdXNyLnNiaW4vbWZpdXRpbC9tZmlfZXZ0LmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4v bWZpdXRpbC9tZmlfZXZ0LmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwv bWZpX2V2dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8c3lz L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2Vycm5vLmg+CiAjaW5jbHVkZSA8ZXJyLmg+Ci0vLyNp bmNsdWRlIDxsaWJ1dGlsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIu aD4KICNpbmNsdWRlIDxzdHJpbmdzLmg+CkBAIC02Nyw3ICs2Niw3IEBACiBzaG93X2xvZ3N0YXRl KGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfZXZ0X2xvZ19zdGF0ZSBpbmZvOwot CWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNo b3cgbG9nc3RhdGU6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtNzYsMTMgKzc1LDE1IEBACiAKIAlm ZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87 CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y KTsKIAl9CiAKIAlpZiAobWZpX2V2ZW50X2dldF9pbmZvKGZkLCAmaW5mbywgTlVMTCkgPCAwKSB7 CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50Zigi bWZpJWQgRXZlbnQgTG9nIFNlcXVlbmNlIE51bWJlcnM6XG4iLCBtZmlfdW5pdCk7CkBAIC01MzYs MTggKzUzNywyMCBAQAogCXNzaXplX3Qgc2l6ZTsKIAl1aW50MzJfdCBzZXEsIHN0YXJ0LCBzdG9w OwogCXVpbnQ4X3Qgc3RhdHVzOwotCWludCBjaCwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CisJ aW50IGNoLCBlcnJvciwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CiAJdV9pbnQgaTsKIAogCWZk ID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK IAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip OwogCX0KIAogCWlmIChtZmlfZXZlbnRfZ2V0X2luZm8oZmQsICZpbmZvLCBOVUxMKSA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBldmVudCBsb2cgaW5mbyIp OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGVmYXVs dCBzZXR0aW5ncy4gKi8KQEAgLTU2NSwxNCArNTY4LDE2IEBACiAJCXN3aXRjaCAoY2gpIHsKIAkJ Y2FzZSAnYyc6CiAJCQlpZiAocGFyc2VfY2xhc3Mob3B0YXJnLCAmZmlsdGVyLm1lbWJlcnMuY2xh c3MpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJd2FybigiRXJyb3IgcGFyc2luZyBl dmVudCBjbGFzcyIpOwotCQkJCXJldHVybiAoZXJybm8pOworCQkJCXJldHVybiAoZXJyb3IpOwog CQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQkJaWYgKHBhcnNlX2xvY2FsZShvcHRhcmcs ICZmaWx0ZXIubWVtYmVycy5sb2NhbGUpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJ d2FybigiRXJyb3IgcGFyc2luZyBldmVudCBsb2NhbGUiKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsK KwkJCQlyZXR1cm4gKGVycm9yKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICduJzoKQEAgLTYw OCwyMCArNjEzLDIzIEBACiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAJaWYgKGFjID4gMCAmJiBw YXJzZV9zZXEoJmluZm8sIGF2WzBdLCAmc3RhcnQpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJFcnJvciBwYXJzaW5nIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciIpOwotCQlyZXR1 cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChhYyA+IDEgJiYgcGFyc2Vf c2VxKCZpbmZvLCBhdlsxXSwgJnN0b3ApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu KCJFcnJvciBwYXJzaW5nIGVuZGluZyBzZXF1ZW5jZSBudW1iZXIiKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBtYWxsb2Moc2l6ZSk7CiAJZm9y IChzZXEgPSBzdGFydDs7KSB7CiAJCWlmIChtZmlfZ2V0X2V2ZW50cyhmZCwgbGlzdCwgbnVtX2V2 ZW50cywgZmlsdGVyLCBzZXEsCiAJCSAgICAmc3RhdHVzKSA8IDApIHsKKwkJCWVycm9yID0gZXJy bm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZXZlbnRzIik7Ci0JCQlyZXR1cm4gKGVycm5v KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWlmIChzdGF0dXMgPT0gTUZJX1NUQVRfTk9U X0ZPVU5EKSB7CiAJCQlpZiAoc2VxID09IHN0YXJ0KQpJbmRleDogdXNyLnNiaW4vbWZpdXRpbC9t Zmlfc2hvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX3Nob3cuYwkocmV2 aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4vbWZpdXRpbC9tZmlfc2hvdy5jCSh3b3JraW5nIGNv cHkpCkBAIC01NCw3ICs1NCw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJsX2luZm8gaW5mbzsKIAlj aGFyIHN0cmlwZVs1XTsKLQlpbnQgZmQsIGNvbW1hOworCWludCBlcnJvciwgZmQsIGNvbW1hOwog CiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgYWRhcHRlcjogZXh0cmEgYXJndW1lbnRz Iik7CkBAIC02MywxMyArNjMsMTUgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlm IChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfY3RybF9nZXRf aW5mbyhmZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJG YWlsZWQgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0 dXJuIChlcnJvcik7CiAJfQogCXByaW50ZigibWZpJWQgQWRhcHRlcjpcbiIsIG1maV91bml0KTsK IAlwcmludGYoIiAgICBQcm9kdWN0IE5hbWU6ICUuODBzXG4iLCBpbmZvLnByb2R1Y3RfbmFtZSk7 CkBAIC0xMzcsNyArMTM5LDcgQEAKIAlzdHJ1Y3QgbWZpX2JidV9jYXBhY2l0eV9pbmZvIGNhcDsK IAlzdHJ1Y3QgbWZpX2JidV9kZXNpZ25faW5mbyBkZXNpZ247CiAJdWludDhfdCBzdGF0dXM7Ci0J aW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hv dyBiYXR0ZXJ5OiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTE0Niw4ICsxNDgsOSBAQAogCiAJZmQg PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0JCVV9HRVRfQ0FQQUNJ VFlfSU5GTywgJmNhcCwKQEAgLTE1NiwxNCArMTU5LDE2IEBACiAJCQlwcmludGYoIm1maSVkOiBO byBiYXR0ZXJ5IHByZXNlbnRcbiIsIG1maV91bml0KTsKIAkJCXJldHVybiAoMCk7CiAJCX0KKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjYXBhY2l0eSBpbmZvIik7Ci0J CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2RjbWRf Y29tbWFuZChmZCwgTUZJX0RDTURfQkJVX0dFVF9ERVNJR05fSU5GTywgJmRlc2lnbiwKIAkgICAg c2l6ZW9mKGRlc2lnbiksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRlc2lnbiBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOwor CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlwcmludGYoIm1maSVkOiBCYXR0ZXJ5IFN0YXRlOlxu IiwgbWZpX3VuaXQpOwpAQCAtMjQyLDcgKzI0Nyw3IEBACiAJc3RydWN0IG1maV9wZF9pbmZvIHBp bmZvOwogCXVpbnQxNl90IGRldmljZV9pZDsKIAljaGFyICpwOwotCWludCBmZCwgaSwgajsKKwlp bnQgZXJyb3IsIGZkLCBpLCBqOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgY29u ZmlnOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTI1MSwxNCArMjU2LDE2IEBACiAKIAlmZCA9IG1m aV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh cm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAKIAkvKiBHZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLwogCWlmIChtZmlf Y29uZmlnX3JlYWQoZmQsICZjb25maWcpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu KCJGYWlsZWQgdG8gZ2V0IGNvbmZpZyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl cnJvcik7CiAJfQogCiAJLyogRHVtcCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24uICovCkBAIC0zMzcs OCArMzQ0LDggQEAKIHsKIAlzdHJ1Y3QgbWZpX2xkX2xpc3QgbGlzdDsKIAlzdHJ1Y3QgbWZpX2xk X2luZm8gaW5mbzsKKwlpbnQgZXJyb3IsIGZkOwogCXVfaW50IGksIGxlbiwgc3RhdGVfbGVuOwot CWludCBmZDsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IHZvbHVtZXM6IGV4dHJh IGFyZ3VtZW50cyIpOwpAQCAtMzQ3LDE0ICszNTQsMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZp X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29w ZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdl dCB0aGUgbG9naWNhbCBkcml2ZSBsaXN0IGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1m aV9sZF9nZXRfbGlzdChmZCwgJmxpc3QsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IHZvbHVtZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOwor CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBMaXN0IHRoZSB2b2x1bWVzLiAqLwpAQCAtMzc2 LDkgKzM4NSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBsaXN0LmxkX2NvdW50OyBpKyspIHsKIAkJ aWYgKG1maV9sZF9nZXRfaW5mbyhmZCwgbGlzdC5sZF9saXN0W2ldLmxkLnYudGFyZ2V0X2lkLCAm aW5mbywKIAkJICAgIE5VTEwpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZh aWxlZCB0byBnZXQgaW5mbyBmb3Igdm9sdW1lICVkIiwKIAkJCSAgICBsaXN0LmxkX2xpc3RbaV0u bGQudi50YXJnZXRfaWQpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsK IAkJfQogCQlwcmludGYoIiU2cyAiLAogCQkgICAgbWZpX3ZvbHVtZV9uYW1lKGZkLCBsaXN0Lmxk X2xpc3RbaV0ubGQudi50YXJnZXRfaWQpKTsKQEAgLTQxNiw3ICs0MjYsNyBAQAogCXN0cnVjdCBt ZmlfcGRfbGlzdCAqbGlzdDsKIAlzdHJ1Y3QgbWZpX3BkX2luZm8gaW5mbzsKIAl1X2ludCBpLCBs ZW4sIHN0YXRlX2xlbjsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAx KSB7CiAJCXdhcm54KCJzaG93IGRyaXZlczogZXh0cmEgYXJndW1lbnRzIik7CkBAIC00MjUsMTMg KzQzNSwxNSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgewor CQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsK KwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9wZF9nZXRfbGlzdChmZCwgJmxpc3Qs IE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRy aXZlIGxpc3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog CS8qIFdhbGsgdGhlIGxpc3Qgb2YgZHJpdmVzIHRvIGRldGVybWluZSB3aWR0aCBvZiBzdGF0ZSBj b2x1bW4uICovCkBAIC00NDIsOSArNDU0LDEwIEBACiAKIAkJaWYgKG1maV9wZF9nZXRfaW5mbyhm ZCwgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQsICZpbmZvLAogCQkgICAgTlVMTCkgPCAwKSB7CisJ CQllcnJvciA9IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZl ICV1IiwKIAkJCSAgICBsaXN0LT5hZGRyW2ldLmRldmljZV9pZCk7Ci0JCQlyZXR1cm4gKGVycm5v KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWxlbiA9IHN0cmxlbihtZmlfcGRzdGF0ZShp bmZvLmZ3X3N0YXRlKSk7CiAJCWlmIChsZW4gPiBzdGF0ZV9sZW4pCkBAIC00NjIsOSArNDc1LDEw IEBACiAJCS8qIEZldGNoIGRldGFpbHMgZm9yIHRoaXMgZHJpdmUuICovCiAJCWlmIChtZmlfcGRf Z2V0X2luZm8oZmQsIGxpc3QtPmFkZHJbaV0uZGV2aWNlX2lkLCAmaW5mbywKIAkJICAgIE5VTEwp IDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv IGZvciBkcml2ZSAldSIsCiAJCQkgICAgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQpOwotCQkJcmV0 dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJCXByaW50X3BkKCZpbmZv LCBzdGF0ZV9sZW4sIDEpOwpAQCAtNTExLDcgKzUyNSw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJs X2luZm8gaW5mbzsKIAlzdHJ1Y3QgbWZpX2luZm9fY29tcG9uZW50IGhlYWRlcjsKLQlpbnQgZmQ7 CisJaW50IGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJaWYgKGFjICE9IDEpIHsKQEAgLTUyMSwx MyArNTM1LDE1IEBACiAKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7 CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8p OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2N0cmxfZ2V0X2luZm8oZmQsICZp bmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdl dCBjb250cm9sbGVyIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip OwogCX0KIAogCWlmIChpbmZvLnBhY2thZ2VfdmVyc2lvblswXSAhPSAnXDAnKQpJbmRleDogdXNy LnNiaW4vbWZpdXRpbC9tZmlfcGF0cm9sLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp bC9tZmlfcGF0cm9sLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp X3BhdHJvbC5jCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTMgQEAKIHN0YXRpYyBpbnQK IHBhdHJvbF9nZXRfcHJvcHMoaW50IGZkLCBzdHJ1Y3QgbWZpX3ByX3Byb3BlcnRpZXMgKnByb3Ap CiB7CisJaW50IGVycm9yOwogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BS X0dFVF9QUk9QRVJUSUVTLCBwcm9wLAogCSAgICBzaXplb2YoKnByb3ApLCBOVUxMLCAwLCBOVUxM KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBwYXRyb2wg cmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAl9 CiAJcmV0dXJuICgwKTsKIH0KQEAgLTgxLDE5ICs4MywyMyBAQAogCWNoYXIgbGFiZWxbMTZdOwog CXRpbWVfdCBub3c7CiAJdWludDMyX3QgYXQ7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJ dV9pbnQgaTsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCXRpbWUoJm5vdyk7CiAJbWZpX2dldF90aW1lKGZkLCAm YXQpOwotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJvcCkgPCAwKQotCQlyZXR1cm4gKGVy cm5vKTsKKwlpZiAoYXQgPT0gMCkKKwkJcmV0dXJuIChFTlhJTyk7CisJZXJyb3IgPSBwYXRyb2xf Z2V0X3Byb3BzKGZkLCAmcHJvcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlw cmludGYoIk9wZXJhdGlvbiBNb2RlOiAiKTsKIAlzd2l0Y2ggKHByb3Aub3BfbW9kZSkgewogCWNh c2UgTUZJX1BSX09QTU9ERV9BVVRPOgpAQCAtMTIyLDggKzEyOCw5IEBACiAKIAlpZiAobWZpX2Rj bWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfR0VUX1NUQVRVUywgJnN0YXR1cywKIAkgICAgc2l6 ZW9mKHN0YXR1cyksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3 YXJuKCJGYWlsZWQgdG8gZ2V0IHBhdHJvbCByZWFkIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChl cnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlwcmludGYoIlJ1bnMgQ29tcGxldGVkOiAl dVxuIiwgc3RhdHVzLm51bV9pdGVyYXRpb24pOwogCXByaW50ZigiQ3VycmVudCBTdGF0ZTogIik7 CkBAIC0xNDYsOCArMTUzLDkgQEAKIAl9CiAJaWYgKHN0YXR1cy5zdGF0ZSA9PSBNRklfUFJfU1RB VEVfQUNUSVZFKSB7CiAJCWlmIChtZmlfcGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDAp IHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRyaXZlIGxpc3Qi KTsKLQkJCXJldHVybiAoZXJybm8pOworCQkJcmV0dXJuIChlcnJvcik7CiAJCX0KIAogCQlmb3Ig KGkgPSAwOyBpIDwgbGlzdC0+Y291bnQ7IGkrKykgewpAQCAtMTU2LDkgKzE2NCwxMCBAQAogCiAJ CQlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBsaXN0LT5hZGRyW2ldLmRldmljZV9pZCwgJmluZm8s CiAJCQkgICAgTlVMTCkgPCAwKSB7CisJCQkJZXJyb3IgPSBlcnJubzsKIAkJCQl3YXJuKCJGYWls ZWQgdG8gZmV0Y2ggaW5mbyBmb3IgZHJpdmUgJXUiLAogCQkJCSAgICBsaXN0LT5hZGRyW2ldLmRl dmljZV9pZCk7Ci0JCQkJcmV0dXJuIChlcnJubyk7CisJCQkJcmV0dXJuIChlcnJvcik7CiAJCQl9 CiAJCQlpZiAoaW5mby5wcm9nX2luZm8uYWN0aXZlICYgTUZJX1BEX1BST0dSRVNTX1BBVFJPTCkg ewogCQkJCXNucHJpbnRmKGxhYmVsLCBzaXplb2YobGFiZWwpLCAiICAgIERyaXZlICV1IiwKQEAg LTE3OCwxOCArMTg3LDIwIEBACiBzdGF0aWMgaW50CiBzdGFydF9wYXRyb2woaW50IGFjLCBjaGFy ICoqYXYpCiB7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlmZCA9IG1maV9vcGVuKG1m aV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9v cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo bWZpX2RjbWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDAs IE5VTEwpIDwKIAkgICAgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8g c3RhcnQgcGF0cm9sIHJlYWQiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip OwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTIwMSwxOCArMjEyLDIwIEBACiBzdGF0aWMgaW50CiBz dG9wX3BhdHJvbChpbnQgYWMsIGNoYXIgKiphdikKIHsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBm ZDsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3Ig PSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy biAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9T VE9QLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSA8CiAJICAgIDApIHsKKwkJZXJyb3IgPSBlcnJu bzsKIAkJd2FybigiRmFpbGVkIHRvIHN0b3AgcGF0cm9sIHJlYWQiKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTIyNywxMCArMjQw LDEwIEBACiAJc3RydWN0IG1maV9wcl9wcm9wZXJ0aWVzIHByb3A7CiAJbG9uZyB2YWw7CiAJdGlt ZV90IG5vdzsKKwlpbnQgZXJyb3IsIGZkOwogCXVpbnQzMl90IGF0LCBuZXh0X2V4ZWMsIGV4ZWNf ZnJlcTsKIAljaGFyICpjcDsKIAl1aW50OF90IG9wX21vZGU7Ci0JaW50IGZkOwogCiAJZXhlY19m cmVxID0gMDsJLyogR0NDIHRvbyBzdHVwaWQgKi8KIAluZXh0X2V4ZWMgPSAwOwpAQCAtMjcyLDEy ICsyODUsMTQgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7 CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJv cCkgPCAwKQotCQlyZXR1cm4gKGVycm5vKTsKKwllcnJvciA9IHBhdHJvbF9nZXRfcHJvcHMoZmQs ICZwcm9wKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCXByb3Aub3BfbW9kZSA9 IG9wX21vZGU7CiAJaWYgKG9wX21vZGUgPT0gTUZJX1BSX09QTU9ERV9BVVRPKSB7CiAJCWlmIChh YyA+IDIpCkBAIC0yOTQsOCArMzA5LDkgQEAKIAl9CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQs IE1GSV9EQ01EX1BSX1NFVF9QUk9QRVJUSUVTLCAmcHJvcCwKIAkgICAgc2l6ZW9mKHByb3ApLCBO VUxMLCAwLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv IHNldCBwYXRyb2wgcmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1 cm4gKGVycm9yKTsKIAl9CiAKIAljbG9zZShmZCk7Cg== --0016e64967c8f95e77049389033e--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X>