Date: Tue, 26 Oct 2010 11:52:16 -0700 From: Garrett Cooper <yanegomi@gmail.com> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-hackers@freebsd.org Subject: Re: [PATCH] mfiutil(8) - capture errors and percolate up to caller Message-ID: <AANLkTimPPdHPGpfUThjeA8rmhFmrLz94DggVhkgSa=E7@mail.gmail.com> In-Reply-To: <201010261438.10387.jhb@freebsd.org> References: <AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X@mail.gmail.com> <201010261438.10387.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--00504502d357930c9b0493899b55 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Tue, Oct 26, 2010 at 11:38 AM, John Baldwin <jhb@freebsd.org> wrote: > On Tuesday, October 26, 2010 2:09:53 pm Garrett Cooper wrote: >> =A0 =A0 Because a number of places in the mfiutil(8) code immediately ca= ll >> 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. >> =A0 =A0 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. > > Just a few nits: > > 1) The include of <sys/param.h> should replace <sys/types.h> (there's a n= ote > about these two headers in style(9), FYI). Done -- thanks for pointing me to that :). > 2) patrol_get_props() should return 'error' on failure rather than 'errno= '. Good catch -- fixed! > 3) mfi_get_time() failing isn't fatal. =A0The code already handles this c= ase by > not printing out a 'next run time' if at is zero. =A0I think you can remo= ve the > check for at =3D=3D 0. =A0If all the other commands work and just that co= mmand fails > I don't think it should be fatal. Ok -- removed the at =3D=3D 0 check. Thanks! -Garrett --00504502d357930c9b0493899b55 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_gfr4tfub0 SW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5z YmluL21maXV0aWwvbWZpX2NvbmZpZy5jCShyZXZpc2lvbiAyMTQyNjApCisrKyB1c3Iuc2Jpbi9t Zml1dGlsL21maV9jb25maWcuYwkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEyIEBACiAg KiAkRnJlZUJTRCQKICAqLwogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lz L3BhcmFtLmg+CiAjaWZkZWYgREVCVUcKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjZW5kaWYK LSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KICNpZmRlZiBERUJVRwogI2luY2x1ZGUgPHN0ZGlu dC5oPgpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIGludAlhZGRfc3BhcmUoaW50IGFjLCBjaGFy ICoqYXYpOwogc3RhdGljIGludAlyZW1vdmVfc3BhcmUoaW50IGFjLCBjaGFyICoqYXYpOwogCi0j ZGVmaW5lIHBvd2Vyb2YyKHgpICAgICgoKCh4KS0xKSYoeCkpPT0wKQotCiBzdGF0aWMgbG9uZwog ZGVodW1hbml6ZShjb25zdCBjaGFyICp2YWx1ZSkKIHsKQEAgLTE1MSwxMyArMTQ5LDE0IEBACiBj bGVhcl9jb25maWcoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3RydWN0IG1maV9sZF9saXN0IGxp c3Q7Ci0JaW50IGNoLCBmZDsKKwlpbnQgY2gsIGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJZmQg PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCiAJaWYgKCFtZmlfcmVjb25maWdfc3VwcG9ydGVkKCkpIHsKQEAgLTE2Nyw4ICsxNjYs OSBAQAogCX0KIAogCWlmIChtZmlfbGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIpOwot CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZm9yIChpID0gMDsg aSA8IGxpc3QubGRfY291bnQ7IGkrKykgewpAQCAtMTg5LDggKzE4OSw5IEBACiAJfQogCiAJaWYg KG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19DTEVBUiwgTlVMTCwgMCwgTlVMTCwg MCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjbGVh ciBjb25maWd1cmF0aW9uIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAKIAlwcmludGYoIm1maSVkOiBDb25maWd1cmF0aW9uIGNsZWFyZWRcbiIsIG1maV91bml0 KTsKQEAgLTMzNSw4ICszMzYsOSBAQAogCQkJcmV0dXJuIChlcnJvcik7CiAKIAkJaWYgKG1maV9w ZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCBwaW5mbywgTlVMTCkgPCAwKSB7CisJCQllcnJvciA9 IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8gZm9yIGRyaXZlICVz IiwgY3ApOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ CWlmIChwaW5mby0+Zndfc3RhdGUgIT0gTUZJX1BEX1NUQVRFX1VOQ09ORklHVVJFRF9HT09EKSB7 CkBAIC01NDgsOCArNTUwLDkgQEAKIAkKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAo ZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVy biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19z dXBwb3J0ZWQoKSkgewpAQCAtNjYwLDggKzY2Myw5IEBACiAJICogYXJyYXkgYW5kIHZvbHVtZSBp ZGVudGlmaWVycy4KIAkgKi8KIAlpZiAobWZpX2NvbmZpZ19yZWFkKGZkLCAmY29uZmlnKSA8IDAp IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHJlYWQgY29uZmlndXJhdGlv biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXAgPSAoY2hh ciAqKWNvbmZpZy0+YXJyYXk7CiAJc3RhdGUuYXJyYXlfcmVmID0gMHhmZmZmOwpAQCAtNzQ1LDE0 ICs3NDksMTQgQEAKICNpZmRlZiBERUJVRwogCWlmIChkdW1wKQogCQlkdW1wX2NvbmZpZyhmZCwg Y29uZmlnKTsKLQllbHNlCiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyBjb25maWcgdG8gdGhl IGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19B REQsIGNvbmZpZywgY29uZmlnX3NpemUsCiAJICAgIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2xlYW4gdXAuICovCkBAIC03 NzQsNyArNzc4LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3Ry dWN0IG1maV9sZF9pbmZvIGluZm87Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhf dCB0YXJnZXRfaWQsIG1ib3hbNF07CiAKIAkvKgpAQCAtNzk5LDggKzgwMyw5IEBACiAKIAlmZCA9 IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJ CXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19zdXBwb3J0ZWQoKSkgewpAQCAtODEwLDEzICs4MTUs MTUgQEAKIAl9CiAKIAlpZiAobWZpX2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmdGFyZ2V0X2lk KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBh dlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBpbmZvIGZvciB2b2x1bWUgJWQiLCB0 YXJnZXRfaWQpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ aWYgKG1maV92b2x1bWVfYnVzeShmZCwgdGFyZ2V0X2lkKSkgewpAQCAtODI4LDggKzgzNSw5IEBA CiAJbWJveF9zdG9yZV9sZHJlZihtYm94LCAmaW5mby5sZF9jb25maWcucHJvcGVydGllcy5sZCk7 CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0xEX0RFTEVURSwgTlVMTCwgMCwg bWJveCwKIAkgICAgc2l6ZW9mKG1ib3gpLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK IAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTg1OCw4ICs4NjYsOSBAQAog CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl cnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZkLCBhdlsxXSwgJmRldmlj ZV9pZCk7CkBAIC04NjcsOCArODc2LDkgQEAKIAkJcmV0dXJuIChlcnJvcik7CiAKIAlpZiAobWZp X3BkX2dldF9pbmZvKGZkLCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3Ig PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJu IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9 IE1GSV9QRF9TVEFURV9VTkNPTkZJR1VSRURfR09PRCkgewpAQCAtODc4LDE0ICs4ODgsMTYgQEAK IAogCWlmIChhYyA+IDIpIHsKIAkJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZkLCBhdlsyXSwgJnRh cmdldF9pZCkgPCAwKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiSW52YWxpZCB2b2x1 bWUgJXMiLCBhdlsyXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3IpOwog CQl9CiAJfQogCiAJaWYgKG1maV9jb25maWdfcmVhZChmZCwgJmNvbmZpZykgPCAwKSB7CisJCWVy cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24iKTsKLQkJ cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXNwYXJlID0gbWFsbG9j KHNpemVvZihzdHJ1Y3QgbWZpX3NwYXJlKSArIHNpemVvZih1aW50MTZfdCkgKgpAQCAtOTM5LDgg Kzk1MSw5IEBACiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19NQUtFX1NQ QVJFLCBzcGFyZSwKIAkgICAgc2l6ZW9mKHN0cnVjdCBtZmlfc3BhcmUpICsgc2l6ZW9mKHVpbnQx Nl90KSAqIHNwYXJlLT5hcnJheV9jb3VudCwKIAkgICAgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJ CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBhc3NpZ24gc3BhcmUiKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTk2 NCw4ICs5NzcsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkg eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZk LCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC05NzQsOCArOTg4LDkgQEAKIAogCS8qIEdldCB0aGUg aW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBkZXZpY2Vf aWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVk IHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9IE1GSV9Q RF9TVEFURV9IT1RfU1BBUkUpIHsKQEAgLTk4Niw4ICsxMDAxLDkgQEAKIAltYm94X3N0b3JlX3Bk cmVmKG1ib3gsICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01E X0NGR19SRU1PVkVfU1BBUkUsIE5VTEwsIDAsIG1ib3gsCiAJICAgIHNpemVvZihtYm94KSwgTlVM TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgc3Bh cmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3Nl KGZkKTsKQEAgLTEwOTMsNyArMTEwOSw3IEBACiBkZWJ1Z19jb25maWcoaW50IGFjLCBjaGFyICoq YXYpCiB7CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwotCWludCBmZDsKKwlpbnQg ZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoImRlYnVnOiBleHRyYSBhcmd1 bWVudHMiKTsKQEAgLTExMDIsMTQgKzExMTgsMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3Vu aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0 aGUgY29uZmlnIGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9jb25maWdfcmVhZChm ZCwgJmNvbmZpZykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBn ZXQgY29uZmlnIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK IAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlvbi4gKi8KQEAgLTExMjcsNyArMTE0NSw3IEBA CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwogCWNoYXIgYnVmWzY0XTsKIAlzaXpl X3QgbGVuOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJ d2FybngoImR1bXA6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMTEzNiwyMyArMTE1NCwyNiBAQAog 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 cmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAJcmV0dXJuICgwKTsKIH0KQEAgLTgxLDE5ICs4MywyMSBAQAogCWNoYXIgbGFiZWxbMTZdOwog CXRpbWVfdCBub3c7CiAJdWludDMyX3QgYXQ7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJ dV9pbnQgaTsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCXRpbWUoJm5vdyk7CiAJbWZpX2dldF90aW1lKGZkLCAm YXQpOwotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJvcCkgPCAwKQotCQlyZXR1cm4gKGVy cm5vKTsKKwllcnJvciA9IHBhdHJvbF9nZXRfcHJvcHMoZmQsICZwcm9wKTsKKwlpZiAoZXJyb3Ip CisJCXJldHVybiAoZXJyb3IpOwogCXByaW50ZigiT3BlcmF0aW9uIE1vZGU6ICIpOwogCXN3aXRj aCAocHJvcC5vcF9tb2RlKSB7CiAJY2FzZSBNRklfUFJfT1BNT0RFX0FVVE86CkBAIC0xMjIsOCAr MTI2LDkgQEAKIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9HRVRfU1RB VFVTLCAmc3RhdHVzLAogCSAgICBzaXplb2Yoc3RhdHVzKSwgTlVMTCwgMCwgTlVMTCkgPCAwKSB7 CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgcGF0cm9sIHJlYWQgcHJv cGVydGllcyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXBy aW50ZigiUnVucyBDb21wbGV0ZWQ6ICV1XG4iLCBzdGF0dXMubnVtX2l0ZXJhdGlvbik7CiAJcHJp bnRmKCJDdXJyZW50IFN0YXRlOiAiKTsKQEAgLTE0Niw4ICsxNTEsOSBAQAogCX0KIAlpZiAoc3Rh dHVzLnN0YXRlID09IE1GSV9QUl9TVEFURV9BQ1RJVkUpIHsKIAkJaWYgKG1maV9wZF9nZXRfbGlz dChmZCwgJmxpc3QsIE5VTEwpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZh aWxlZCB0byBnZXQgZHJpdmUgbGlzdCIpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4g KGVycm9yKTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CkBA IC0xNTYsOSArMTYyLDEwIEBACiAKIAkJCWlmIChtZmlfcGRfZ2V0X2luZm8oZmQsIGxpc3QtPmFk ZHJbaV0uZGV2aWNlX2lkLCAmaW5mbywKIAkJCSAgICBOVUxMKSA8IDApIHsKKwkJCQllcnJvciA9 IGVycm5vOwogCQkJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsCiAJ CQkJICAgIGxpc3QtPmFkZHJbaV0uZGV2aWNlX2lkKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsKKwkJ CQlyZXR1cm4gKGVycm9yKTsKIAkJCX0KIAkJCWlmIChpbmZvLnByb2dfaW5mby5hY3RpdmUgJiBN RklfUERfUFJPR1JFU1NfUEFUUk9MKSB7CiAJCQkJc25wcmludGYobGFiZWwsIHNpemVvZihsYWJl bCksICIgICAgRHJpdmUgJXUiLApAQCAtMTc4LDE4ICsxODUsMjAgQEAKIHN0YXRpYyBpbnQKIHN0 YXJ0X3BhdHJvbChpbnQgYWMsIGNoYXIgKiphdikKIHsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBm ZDsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3Ig PSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy biAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9T VEFSVCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkgPAogCSAgICAwKSB7CisJCWVycm9yID0gZXJy bm87CiAJCXdhcm4oIkZhaWxlZCB0byBzdGFydCBwYXRyb2wgcmVhZCIpOwotCQlyZXR1cm4gKGVy cm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJY2xvc2UoZmQpOwpAQCAtMjAxLDE4ICsy MTAsMjAgQEAKIHN0YXRpYyBpbnQKIHN0b3BfcGF0cm9sKGludCBhYywgY2hhciAqKmF2KQogewot CWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJ aWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQly ZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9kY21kX2Nv bW1hbmQoZmQsIE1GSV9EQ01EX1BSX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpIDwKIAkg ICAgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc3RvcCBwYXRyb2wg cmVhZCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJY2xv c2UoZmQpOwpAQCAtMjI3LDEwICsyMzgsMTAgQEAKIAlzdHJ1Y3QgbWZpX3ByX3Byb3BlcnRpZXMg cHJvcDsKIAlsb25nIHZhbDsKIAl0aW1lX3Qgbm93OworCWludCBlcnJvciwgZmQ7CiAJdWludDMy X3QgYXQsIG5leHRfZXhlYywgZXhlY19mcmVxOwogCWNoYXIgKmNwOwogCXVpbnQ4X3Qgb3BfbW9k ZTsKLQlpbnQgZmQ7CiAKIAlleGVjX2ZyZXEgPSAwOwkvKiBHQ0MgdG9vIHN0dXBpZCAqLwogCW5l eHRfZXhlYyA9IDA7CkBAIC0yNzIsMTIgKzI4MywxNCBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlf dW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3Bl biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKHBh dHJvbF9nZXRfcHJvcHMoZmQsICZwcm9wKSA8IDApCi0JCXJldHVybiAoZXJybm8pOworCWVycm9y ID0gcGF0cm9sX2dldF9wcm9wcyhmZCwgJnByb3ApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChl cnJvcik7CiAJcHJvcC5vcF9tb2RlID0gb3BfbW9kZTsKIAlpZiAob3BfbW9kZSA9PSBNRklfUFJf T1BNT0RFX0FVVE8pIHsKIAkJaWYgKGFjID4gMikKQEAgLTI5NCw4ICszMDcsOSBAQAogCX0KIAlp ZiAobWZpX2RjbWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfU0VUX1BST1BFUlRJRVMsICZwcm9w LAogCSAgICBzaXplb2YocHJvcCksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVy cm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHBhdHJvbCByZWFkIHByb3BlcnRpZXMiKTsKLQkJ cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK --00504502d357930c9b0493899b55--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimPPdHPGpfUThjeA8rmhFmrLz94DggVhkgSa=E7>