From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1RnqIr-0008Gu-EC for mharc-grub-devel@gnu.org; Thu, 19 Jan 2012 06:37:13 -0500 Received: from eggs.gnu.org ([140.186.70.92]:45254) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RnqIj-0008GO-4M for grub-devel@gnu.org; Thu, 19 Jan 2012 06:37:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RnqIg-0001gv-5Y for grub-devel@gnu.org; Thu, 19 Jan 2012 06:37:05 -0500 Received: from spam1.wiktel.com ([69.89.207.151]:44126) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RnqIf-0001ga-Rx for grub-devel@gnu.org; Thu, 19 Jan 2012 06:37:02 -0500 Received: from [172.16.0.253] (thief-pool2-121-14.mncable.net [24.225.121.14]) (authenticated bits=0) by spam1.wiktel.com (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id q0JBas8S002631; Thu, 19 Jan 2012 05:36:54 -0600 Subject: Re: [Patch] Robustly search for ZFS labels & uberblocks From: Richard Laager To: Vladimir =?UTF-8?Q?=27=CF=86-coder/phcoder=27?= Serbinenko , Zachary Bedell In-Reply-To: <4E838F85.6060001@gmail.com> References: <4E838F85.6060001@gmail.com> Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-IMojLx5K3qzgeMheXx0D" Date: Thu, 19 Jan 2012 05:36:54 -0600 Message-ID: <1326973014.6387.224.camel@watermelon.coderich.net> Mime-Version: 1.0 X-Mailer: Evolution 2.32.2 X-bounce-key: wiktel.com-1; rlaager@wiktel.com; 1326973015; NvIOS3zxRFe30MhVadqkPhrum4U; X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 69.89.207.151 Cc: grub-devel@gnu.org X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Jan 2012 11:37:11 -0000 --=-IMojLx5K3qzgeMheXx0D Content-Type: multipart/mixed; boundary="=-+OY88o023Zce2cnzJc0F" --=-+OY88o023Zce2cnzJc0F Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Original mailing list thread: http://lists.gnu.org/archive/html/grub-devel/2011-09/msg00031.html On 2011-09-28, Vladimir '=CF=86-coder/phcoder' Serbinenko wrote: > Could you please split this patch? In particular the removing of dprintf > takes to much of this patch and makes it unreadable. Note that we don't > comment out the code, we only remove it. [I am not the original patch writer.] I've edited the patch to get rid of the dprintf removals. I also fixed a pile of whitespace discrepancies. The patch is much easier to read now. This updated patch is attached. It applies cleanly to revision 3473. Unfortunately, I'm not familiar enough with the GRUB codebase to merge it with anything much newer. According to the commit message in the URL above, there are 7 non-logging changes in this patch. Even knowing which of those, if any, have already been addressed (or rendered moot) in trunk would be extremely helpful, as it might bring the amount of work required to within my grasp. phcoder: Any chance you could take a look at this? I think ashift=3D12 support is still missing in trunk. gentoofan on IRC provided this (completely untested) patch to trunk: http://paste.pocoo.org/show/535465/ pendor: Do you still have copies of the zpools that were triggering these errors? Do they contain confidential data? How big are they? Thanks, Richard --=-+OY88o023Zce2cnzJc0F Content-Disposition: attachment; filename="grub-zfs-ashift-label-2.patch" Content-Type: text/x-patch; name="grub-zfs-ashift-label-2.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 PT09IG1vZGlmaWVkIGZpbGUgJ2dydWItY29yZS9mcy96ZnMvemZzLmMnDQotLS0gZ3J1Yi1jb3Jl L2ZzL3pmcy96ZnMuYwkyMDExLTA2LTIzIDIyOjMxOjI5ICswMDAwDQorKysgZ3J1Yi1jb3JlL2Zz L3pmcy96ZnMuYwkyMDEyLTAxLTE5IDExOjI4OjA5ICswMDAwDQpAQCAtNzUsMTEgKzc1LDIzIEBA DQogc3RhdGljIGdydWJfZGxfdCBteV9tb2Q7DQogI2VuZGlmDQogDQorLyoNCisgKiBNYWNyb3Mg dG8gZ2V0IGZpZWxkcyBpbiBhIGJwIG9yIERWQS4NCisgKi8NCiAjZGVmaW5lCVAyUEhBU0UoeCwg YWxpZ24pCQkoKHgpICYgKChhbGlnbikgLSAxKSkNCiAjZGVmaW5lCURWQV9PRkZTRVRfVE9fUEhZ U19TRUNUT1Iob2Zmc2V0KSBcDQogCSgob2Zmc2V0ICsgVkRFVl9MQUJFTF9TVEFSVF9TSVpFKSA+ PiBTUEFfTUlOQkxPQ0tTSElGVCkNCiANCiAvKg0KKyAqIHJldHVybiB4IHJvdW5kZWQgZG93biB0 byBhbiBhbGlnbiBib3VuZGFyeQ0KKyAqIGVnLCBQMkFMSUdOKDEyMDAsIDEwMjQpID09IDEwMjQg KDEqYWxpZ24pDQorICogZWcsIFAyQUxJR04oMTAyNCwgMTAyNCkgPT0gMTAyNCAoMSphbGlnbikN CisgKiBlZywgUDJBTElHTigweDEyMzQsIDB4MTAwKSA9PSAweDEyMDAgKDB4MTIqYWxpZ24pDQor ICogZWcsIFAyQUxJR04oMHg1NjAwLCAweDEwMCkgPT0gMHg1NjAwICgweDU2KmFsaWduKQ0KKyAq Lw0KKyNkZWZpbmUJUDJBTElHTih4LCBhbGlnbikJCSgoeCkgJiAtKGFsaWduKSkNCisNCisvKg0K ICAqIEZBVCBaQVAgZGF0YSBzdHJ1Y3R1cmVzDQogICovDQogI2RlZmluZQlaRlNfQ1JDNjRfUE9M WSAweEM5NkM1Nzk1RDc4NzBGNDJVTEwJLyogRUNNQS0xODIsIHJlZmxlY3RlZCBmb3JtICovDQpA QCAtMTQ3LDYgKzE1OSwxNCBAQA0KICAgZ3J1Yl91aW50NjRfdCBmaWxlX3N0YXJ0Ow0KICAgZ3J1 Yl91aW50NjRfdCBmaWxlX2VuZDsNCiANCisgIC8qIFhYWDogYXNoaWZ0IGlzIHBlciB2ZGV2LCBu b3QgcGVyIHBvb2wuICBXZSBjdXJyZW50bHkgb25seSBldmVyIHRvdWNoDQorICAgKiBhIHNpbmds ZSB2ZGV2LCBidXQgd2hlbi9pZiByYWlkLXogb3Igc3RyaXBlcyBhcmUgc3VwcG9ydGVkLCB0aGlz DQorICAgKiBtYXkgbmVlZCByZXZpc2lvbi4NCisgICAqLw0KKyAgZ3J1Yl91aW50NjRfdCB2ZGV2 X2FzaGlmdDsNCisgIGdydWJfdWludDY0X3QgbGFiZWxfdHhnOw0KKyAgZ3J1Yl91aW50NjRfdCBw b29sX2d1aWQ7DQorDQogICAvKiBjYWNoZSBmb3IgYSBkbm9kZSBibG9jayAqLw0KICAgZG5vZGVf cGh5c190ICpkbm9kZV9idWY7DQogICBkbm9kZV9waHlzX3QgKmRub2RlX21kbjsNCkBAIC0xOTMs NiArMjEzLDEwIEBADQogc3RhdGljIGdydWJfZXJyX3QgemlvX3JlYWRfZGF0YSAoYmxrcHRyX3Qg KiBicCwgZ3J1Yl96ZnNfZW5kaWFuX3QgZW5kaWFuLA0KIAkJCQkgdm9pZCAqYnVmLCBzdHJ1Y3Qg Z3J1Yl96ZnNfZGF0YSAqZGF0YSk7DQogDQorc3RhdGljIGdydWJfZXJyX3QNCit6aW9fcmVhZCAo YmxrcHRyX3QgKiBicCwgZ3J1Yl96ZnNfZW5kaWFuX3QgZW5kaWFuLCB2b2lkICoqYnVmLA0KKwkg IGdydWJfc2l6ZV90ICpzaXplLCBzdHJ1Y3QgZ3J1Yl96ZnNfZGF0YSAqZGF0YSk7DQorDQogLyoN CiAgKiBPdXIgb3duIHZlcnNpb24gb2YgbG9nMigpLiAgU2FtZSB0aGluZyBhcyBoaWdoYml0KCkt MS4NCiAgKi8NCkBAIC0zMzIsMTcgKzM1NiwyMiBAQA0KICAqIFRocmVlIHBpZWNlcyBvZiBpbmZv cm1hdGlvbiBhcmUgbmVlZGVkIHRvIHZlcmlmeSBhbiB1YmVyYmxvY2s6IHRoZSBtYWdpYw0KICAq IG51bWJlciwgdGhlIHZlcnNpb24gbnVtYmVyLCBhbmQgdGhlIGNoZWNrc3VtLg0KICAqDQotICog Q3VycmVudGx5IEltcGxlbWVudGVkOiB2ZXJzaW9uIG51bWJlciwgbWFnaWMgbnVtYmVyDQorICog Q3VycmVudGx5IEltcGxlbWVudGVkOiB2ZXJzaW9uIG51bWJlciwgbWFnaWMgbnVtYmVyLCBsYWJl bCB0eGcNCiAgKiBOZWVkIHRvIEltcGxlbWVudDogY2hlY2tzdW0NCiAgKg0KICAqLw0KIHN0YXRp YyBncnViX2Vycl90DQotdWJlcmJsb2NrX3ZlcmlmeSAodWJlcmJsb2NrX3BoeXNfdCAqIHViLCBp bnQgb2Zmc2V0KQ0KK3ViZXJibG9ja192ZXJpZnkgKHViZXJibG9ja190ICogdWJlciwgaW50IG9m ZnNldCwgc3RydWN0IGdydWJfemZzX2RhdGEgKmRhdGEpDQogew0KLSAgdWJlcmJsb2NrX3QgKnVi ZXIgPSAmdWItPnVicF91YmVyYmxvY2s7DQogICBncnViX2Vycl90IGVycjsNCiAgIGdydWJfemZz X2VuZGlhbl90IGVuZGlhbiA9IFVOS05PV05fRU5ESUFOOw0KICAgemlvX2Nrc3VtX3QgemM7DQor ICB2b2lkICpvc3AgPSBOVUxMOw0KKyAgZ3J1Yl9zaXplX3Qgb3Nwc2l6ZTsNCisNCisgIGlmICh1 YmVyLT51Yl90eGcgPCBkYXRhLT5sYWJlbF90eGcpDQorICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRlMsDQorCSJpZ25vcmluZyBwYXJ0aWFsbHkgd3JpdHRlbiBsYWJlbDogdWJl cl90eGcgPCBsYWJlbF90eGciKTsNCiANCiAgIGlmIChncnViX3pmc190b19jcHU2NCAodWJlci0+ dWJfbWFnaWMsIExJVFRMRV9FTkRJQU4pID09IFVCRVJCTE9DS19NQUdJQw0KICAgICAgICYmIGdy dWJfemZzX3RvX2NwdTY0ICh1YmVyLT51Yl92ZXJzaW9uLCBMSVRUTEVfRU5ESUFOKSA+IDAgDQpA QCAtMzYxLDcgKzM5MCwxOSBAQA0KIA0KICAgemMuemNfd29yZFswXSA9IGdydWJfY3B1X3RvX3pm czY0IChvZmZzZXQsIGVuZGlhbik7DQogICBlcnIgPSB6aW9fY2hlY2tzdW1fdmVyaWZ5ICh6Yywg WklPX0NIRUNLU1VNX0xBQkVMLCBlbmRpYW4sDQotCQkJICAgICAoY2hhciAqKSB1YiwgVUJFUkJM T0NLX1NJWkUpOw0KKwkJCSAgICAgKGNoYXIgKikgdWJlciwgVUJFUkJMT0NLX1NJWkUoZGF0YS0+ dmRldl9hc2hpZnQpKTsNCisNCisgIGlmICghZXJyKQ0KKyAgICB7DQorICAgICAgLyogQ2hlY2sg dGhhdCB0aGUgZGF0YSBwb2ludGVkIGJ5IHRoZSByb290YnAgaXMgdXNhYmxlLiAqLw0KKyAgICAg IHZvaWQgKm9zcCA9IE5VTEw7DQorICAgICAgZ3J1Yl9zaXplX3Qgb3Nwc2l6ZTsNCisgICAgICBl cnIgPSB6aW9fcmVhZCAoJnViZXItPnViX3Jvb3RicCwgZW5kaWFuLCAmb3NwLCAmb3Nwc2l6ZSwg ZGF0YSk7DQorICAgICAgZ3J1Yl9mcmVlIChvc3ApOw0KKw0KKyAgICAgIGlmICghZXJyICYmIG9z cHNpemUgPCBPQkpTRVRfUEhZU19TSVpFX1YxNCkNCisJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GUywgInViZXJibG9jayByb290YnAgcG9pbnRzIHRvIGludmFsaWQgZGF0YSIpOw0K KyAgICB9DQogDQogICByZXR1cm4gZXJyOw0KIH0NCkBAIC0zNzIsMzIgKzQxMyw0MCBAQA0KICAq ICAgIFN1Y2Nlc3MgLSBQb2ludGVyIHRvIHRoZSBiZXN0IHViZXJibG9jay4NCiAgKiAgICBGYWls dXJlIC0gTlVMTA0KICAqLw0KLXN0YXRpYyB1YmVyYmxvY2tfcGh5c190ICoNCi1maW5kX2Jlc3R1 YiAodWJlcmJsb2NrX3BoeXNfdCAqIHViX2FycmF5LCBncnViX2Rpc2tfYWRkcl90IHNlY3RvcikN CitzdGF0aWMgdWJlcmJsb2NrX3QgKg0KK2ZpbmRfYmVzdHViIChjaGFyICp1Yl9hcnJheSwgc3Ry dWN0IGdydWJfemZzX2RhdGEgKmRhdGEpDQogew0KLSAgdWJlcmJsb2NrX3BoeXNfdCAqdWJiZXN0 ID0gTlVMTDsNCi0gIGludCBpOw0KLSAgZ3J1Yl9kaXNrX2FkZHJfdCBvZmZzZXQ7DQorICBjb25z dCBncnViX2Rpc2tfYWRkcl90IHNlY3RvciA9IGRhdGEtPnZkZXZfcGh5c19zZWN0b3I7DQorICB1 YmVyYmxvY2tfdCAqdWJiZXN0ID0gTlVMTDsNCisgIHViZXJibG9ja190ICp1Ym5leHQ7DQorICB1 bnNpZ25lZCBpbnQgaSwgb2Zmc2V0LCBwaWNrZWR1YiA9IDA7DQogICBncnViX2Vycl90IGVyciA9 IEdSVUJfRVJSX05PTkU7DQogDQotICBmb3IgKGkgPSAwOyBpIDwgKFZERVZfVUJFUkJMT0NLX1JJ TkcgPj4gVkRFVl9VQkVSQkxPQ0tfU0hJRlQpOyBpKyspDQorICBjb25zdCB1bnNpZ25lZCBpbnQg VUJDT1VOVCA9IFVCRVJCTE9DS19DT1VOVCAoZGF0YS0+dmRldl9hc2hpZnQpOw0KKyAgY29uc3Qg Z3J1Yl91aW50NjRfdCBVQkJZVEVTID0gVUJFUkJMT0NLX1NJWkUgKGRhdGEtPnZkZXZfYXNoaWZ0 KTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCBVQkNPVU5UOyBpKyspDQogICAgIHsNCi0gICAgICBv ZmZzZXQgPSAoc2VjdG9yIDw8IFNQQV9NSU5CTE9DS1NISUZUKSArIFZERVZfUEhZU19TSVpFDQot CSsgKGkgPDwgVkRFVl9VQkVSQkxPQ0tfU0hJRlQpOw0KKyAgICAgIHVibmV4dCA9ICh1YmVyYmxv Y2tfdCAqKSAoaSAqIFVCQllURVMgKyB1Yl9hcnJheSk7DQorICAgICAgb2Zmc2V0ID0gKHNlY3Rv ciA8PCBTUEFfTUlOQkxPQ0tTSElGVCkgKyBWREVWX1BIWVNfU0laRSArIChpICogVUJCWVRFUyk7 DQogDQotICAgICAgZXJyID0gdWJlcmJsb2NrX3ZlcmlmeSAoJnViX2FycmF5W2ldLCBvZmZzZXQp Ow0KKyAgICAgIGVyciA9IHViZXJibG9ja192ZXJpZnkgKHVibmV4dCwgb2Zmc2V0LCBkYXRhKTsN CiAgICAgICBpZiAoZXJyKQ0KIAl7DQogCSAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7DQog CSAgY29udGludWU7DQogCX0NCi0gICAgICBpZiAodWJiZXN0ID09IE5VTEwgDQotCSAgfHwgdmRl dl91YmVyYmxvY2tfY29tcGFyZSAoJih1Yl9hcnJheVtpXS51YnBfdWJlcmJsb2NrKSwNCi0JCQkJ ICAgICAmKHViYmVzdC0+dWJwX3ViZXJibG9jaykpID4gMCkNCi0JdWJiZXN0ID0gJnViX2FycmF5 W2ldOw0KKyAgICAgIGlmICh1YmJlc3QgPT0gTlVMTCB8fCB2ZGV2X3ViZXJibG9ja19jb21wYXJl ICh1Ym5leHQsIHViYmVzdCkgPiAwKQ0KKwl7DQorCSAgdWJiZXN0ID0gdWJuZXh0Ow0KKwkgIHBp Y2tlZHViID0gaTsNCisJfQ0KICAgICB9DQogICBpZiAoIXViYmVzdCkNCiAgICAgZ3J1Yl9lcnJu byA9IGVycjsNCisgIGVsc2UNCisgICAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgIkZvdW5kIGJlc3Qg dWJlcmJsb2NrIGF0IGlkeCAlZCwgdHhnICVsbHVcbiIsDQorCQkgIHBpY2tlZHViLCAodW5zaWdu ZWQgbG9uZyBsb25nKSB1YmJlc3QtPnViX3R4Zyk7DQogDQogICByZXR1cm4gKHViYmVzdCk7DQog fQ0KQEAgLTUxNSw4ICs1NjQsMTggQEANCiAJICBzZWN0b3IgPSBEVkFfT0ZGU0VUX1RPX1BIWVNf U0VDVE9SIChvZmZzZXQpOw0KIAkgIGVyciA9IGdydWJfZGlza19yZWFkIChkYXRhLT5kaXNrLCBz ZWN0b3IsIDAsIHBzaXplLCBidWYpOyANCiAJfQ0KKw0KICAgICAgIGlmICghZXJyKQ0KLQlyZXR1 cm4gR1JVQl9FUlJfTk9ORTsNCisJew0KKwkgIC8qIENoZWNrIHRoZSB1bmRlcmx5aW5nIGNoZWNr c3VtIGJlZm9yZSB3ZSBydWxlIHRoaXMgRFZBIGFzICJnb29kIiAqLw0KKwkgIGdydWJfdWludDMy X3QgY2hlY2thbGdvID0gKGdydWJfemZzX3RvX2NwdTY0ICgoYnApLT5ibGtfcHJvcCwgZW5kaWFu KSA+PiA0MCkgJiAweGZmOw0KKwkgIGVyciA9IHppb19jaGVja3N1bV92ZXJpZnkgKGJwLT5ibGtf Y2tzdW0sIGNoZWNrYWxnbywgZW5kaWFuLCBidWYsIHBzaXplKTsNCisJICBpZiAoIWVycikNCisJ ICAgIHJldHVybiBHUlVCX0VSUl9OT05FOw0KKwl9DQorDQorICAgICAgLyogSWYgcmVhZCBmYWls ZWQgb3IgY2hlY2tzdW0gYmFkLCByZXNldCB0aGUgZXJyb3IuICBIb3BlZnVsbHkgd2UndmUgZ290 DQorICAgICAgICogc29tZSBtb3JlIERWQSdzIHRvIHRyeS4gKi8NCiAgICAgICBncnViX2Vycm5v ID0gR1JVQl9FUlJfTk9ORTsNCiAgICAgfQ0KIA0KQEAgLTUzOSwxMiArNTk4LDkgQEANCiAgIHVu c2lnbmVkIGludCBjb21wOw0KICAgY2hhciAqY29tcGJ1ZiA9IE5VTEw7DQogICBncnViX2Vycl90 IGVycjsNCi0gIHppb19ja3N1bV90IHpjID0gYnAtPmJsa19ja3N1bTsNCi0gIGdydWJfdWludDMy X3QgY2hlY2tzdW07DQogDQogICAqYnVmID0gTlVMTDsNCiANCi0gIGNoZWNrc3VtID0gKGdydWJf emZzX3RvX2NwdTY0KChicCktPmJsa19wcm9wLCBlbmRpYW4pID4+IDQwKSAmIDB4ZmY7DQogICBj b21wID0gKGdydWJfemZzX3RvX2NwdTY0KChicCktPmJsa19wcm9wLCBlbmRpYW4pPj4zMikgJiAw eGZmOw0KICAgbHNpemUgPSAoQlBfSVNfSE9MRShicCkgPyAwIDoNCiAJICAgKCgoZ3J1Yl96ZnNf dG9fY3B1NjQgKChicCktPmJsa19wcm9wLCBlbmRpYW4pICYgMHhmZmZmKSArIDEpDQpAQCAtNTgw LDE1ICs2MzYsNiBAQA0KICAgICAgIHJldHVybiBlcnI7DQogICAgIH0NCiANCi0gIGVyciA9IHpp b19jaGVja3N1bV92ZXJpZnkgKHpjLCBjaGVja3N1bSwgZW5kaWFuLCBjb21wYnVmLCBwc2l6ZSk7 DQotICBpZiAoZXJyKQ0KLSAgICB7DQotICAgICAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgImluY29y cmVjdCBjaGVja3N1bVxuIik7DQotICAgICAgZ3J1Yl9mcmVlIChjb21wYnVmKTsNCi0gICAgICAq YnVmID0gTlVMTDsNCi0gICAgICByZXR1cm4gZXJyOw0KLSAgICB9DQotDQogICBpZiAoY29tcCAh PSBaSU9fQ09NUFJFU1NfT0ZGKQ0KICAgICB7DQogICAgICAgKmJ1ZiA9IGdydWJfbWFsbG9jIChs c2l6ZSk7DQpAQCAtMTg2NCwxMSArMTkxMSw5IEBADQogc3RhdGljIGdydWJfZXJyX3QNCiBjaGVj a19wb29sX2xhYmVsIChzdHJ1Y3QgZ3J1Yl96ZnNfZGF0YSAqZGF0YSkNCiB7DQotICBncnViX3Vp bnQ2NF90IHBvb2xfc3RhdGUsIHR4ZyA9IDA7DQotICBjaGFyICpudmxpc3Q7DQotI2lmIDANCi0g IGNoYXIgKm52Ow0KLSNlbmRpZg0KKyAgZ3J1Yl91aW50NjRfdCBwb29sX3N0YXRlOw0KKyAgY2hh ciAqbnZsaXN0OwkJCS8qIGZvciB0aGUgcG9vbCAqLw0KKyAgY2hhciAqdmRldm52bGlzdDsJCS8q IGZvciB0aGUgdmRldiAqLw0KICAgZ3J1Yl91aW50NjRfdCBkaXNrZ3VpZDsNCiAgIGdydWJfdWlu dDY0X3QgdmVyc2lvbjsNCiAgIGludCBmb3VuZDsNCkBAIC0xODk4LDcgKzE5NDMsOSBAQA0KICAg ICB9DQogICBncnViX2RwcmludGYgKCJ6ZnMiLCAiY2hlY2sgNCBwYXNzZWRcbiIpOw0KIA0KLSAg Zm91bmQgPSBncnViX3pmc19udmxpc3RfbG9va3VwX3VpbnQ2NCAobnZsaXN0LCBaUE9PTF9DT05G SUdfUE9PTF9UWEcsICZ0eGcpOw0KKyAgZGF0YS0+bGFiZWxfdHhnID0gMDsNCisgIGZvdW5kID0g Z3J1Yl96ZnNfbnZsaXN0X2xvb2t1cF91aW50NjQgKG52bGlzdCwgWlBPT0xfQ09ORklHX1BPT0xf VFhHLA0KKwkJCQkJICZkYXRhLT5sYWJlbF90eGcpOw0KICAgaWYgKCFmb3VuZCkNCiAgICAgew0K ICAgICAgIGdydWJfZnJlZSAobnZsaXN0KTsNCkBAIC0xOTA5LDcgKzE5NTYsNyBAQA0KICAgZ3J1 Yl9kcHJpbnRmICgiemZzIiwgImNoZWNrIDYgcGFzc2VkXG4iKTsNCiANCiAgIC8qIG5vdCBhbiBh Y3RpdmUgZGV2aWNlICovDQotICBpZiAodHhnID09IDApDQorICBpZiAoZGF0YS0+bGFiZWxfdHhn ID09IDApDQogICAgIHsNCiAgICAgICBncnViX2ZyZWUgKG52bGlzdCk7DQogICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgInpwb29sIGlzbid0IGFjdGl2ZSIpOw0KQEAg LTE5MzEsMjAgKzE5NzgsMzIgQEANCiAgICAgew0KICAgICAgIGdydWJfZnJlZSAobnZsaXN0KTsN CiAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwN Ci0JCQkgInRvbyBuZXcgdmVyc2lvbiAlbGx1ID4gJWxsdSIsDQorCQkJICJTUEEgdmVyc2lvbiB0 b28gbmV3ICVsbHUgPiAlbGx1IiwNCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmVyc2lvbiwN CiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgU1BBX1ZFUlNJT04pOw0KICAgICB9DQogICBncnVi X2RwcmludGYgKCJ6ZnMiLCAiY2hlY2sgOSBwYXNzZWRcbiIpOw0KLSNpZiAwDQotICBpZiAobnZs aXN0X2xvb2t1cF92YWx1ZSAobnZsaXN0LCBaUE9PTF9DT05GSUdfVkRFVl9UUkVFLCAmbnYsDQot CQkJICAgREFUQV9UWVBFX05WTElTVCwgTlVMTCkpDQorDQorICB2ZGV2bnZsaXN0ID0gZ3J1Yl96 ZnNfbnZsaXN0X2xvb2t1cF9udmxpc3QgKG52bGlzdCwgWlBPT0xfQ09ORklHX1ZERVZfVFJFRSk7 DQorICBpZiAoIXZkZXZudmxpc3QpDQogICAgIHsNCi0gICAgICBncnViX2ZyZWUgKHZkZXYpOw0K LSAgICAgIHJldHVybiAoR1JVQl9FUlJfQkFEX0ZTKTsNCisgICAgICBncnViX2ZyZWUgKG52bGlz dCk7DQorICAgICAgaWYgKCFncnViX2Vycm5vKQ0KKwlncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RlMsIFpQT09MX0NPTkZJR19WREVWX1RSRUUgIiBub3QgZm91bmQiKTsNCisgICAgICByZXR1cm4g Z3J1Yl9lcnJubzsNCiAgICAgfQ0KICAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgImNoZWNrIDEwIHBh c3NlZFxuIik7DQotI2VuZGlmDQorDQorICBmb3VuZCA9IGdydWJfemZzX252bGlzdF9sb29rdXBf dWludDY0ICh2ZGV2bnZsaXN0LCBaUE9PTF9DT05GSUdfQVNISUZULA0KKwkJCQkJICZkYXRhLT52 ZGV2X2FzaGlmdCk7DQorICBncnViX2ZyZWUgKHZkZXZudmxpc3QpOw0KKyAgaWYgKCFmb3VuZCkN CisgICAgew0KKyAgICAgIGdydWJfZnJlZSAobnZsaXN0KTsNCisgICAgICBpZiAoIWdydWJfZXJy bm8pDQorCWdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgWlBPT0xfQ09ORklHX0FTSElGVCAi IG5vdCBmb3VuZCIpOw0KKyAgICAgIHJldHVybiBncnViX2Vycm5vOw0KKyAgICB9DQogDQogICBm b3VuZCA9IGdydWJfemZzX252bGlzdF9sb29rdXBfdWludDY0IChudmxpc3QsIFpQT09MX0NPTkZJ R19HVUlELCAmZGlza2d1aWQpOw0KICAgaWYgKCEgZm91bmQpDQpAQCAtMTk1NiwxMSArMjAxNSw0 MiBAQA0KICAgICB9DQogICBncnViX2RwcmludGYgKCJ6ZnMiLCAiY2hlY2sgMTEgcGFzc2VkXG4i KTsNCiANCisgIGZvdW5kID0gZ3J1Yl96ZnNfbnZsaXN0X2xvb2t1cF91aW50NjQgKG52bGlzdCwg WlBPT0xfQ09ORklHX1BPT0xfR1VJRCwgJmRhdGEtPnBvb2xfZ3VpZCk7DQorICBpZiAoISBmb3Vu ZCkNCisgICAgew0KKyAgICAgIGdydWJfZnJlZSAobnZsaXN0KTsNCisgICAgICBpZiAoISBncnVi X2Vycm5vKQ0KKyAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCBaUE9PTF9DT05G SUdfUE9PTF9HVUlEICIgbm90IGZvdW5kIik7DQorICAgICAgcmV0dXJuIGdydWJfZXJybm87DQor ICAgIH0NCisgICBncnViX2RwcmludGYgKCJ6ZnMiLCAiY2hlY2sgMTIgcGFzc2VkXG4iKTsNCisN CisNCiAgIGdydWJfZnJlZSAobnZsaXN0KTsNCiANCisgIGdydWJfZHByaW50ZiAoInpmcyIsICJa RlMgUG9vbCBHVUlEOiAlbGx1ICglMDE2bGx4KSBMYWJlbDogR1VJRDogJWxsdSAoJTAxNmxseCks IHR4ZzogJWxsdSwgU1BBIHYlbGx1LCBhc2hpZnQ6ICVsbHVcbiIsDQorICAgICh1bnNpZ25lZCBs b25nIGxvbmcpIGRhdGEtPnBvb2xfZ3VpZCwNCisgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGF0 YS0+cG9vbF9ndWlkLA0KKyAgICAodW5zaWduZWQgbG9uZyBsb25nKSBkaXNrZ3VpZCwNCisgICAg KHVuc2lnbmVkIGxvbmcgbG9uZykgZGlza2d1aWQsDQorICAgICh1bnNpZ25lZCBsb25nIGxvbmcp IGRhdGEtPmxhYmVsX3R4ZywNCisgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmVyc2lvbiwNCisg ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGF0YS0+dmRldl9hc2hpZnQpOw0KKw0KICAgcmV0dXJu IEdSVUJfRVJSX05PTkU7DQogfQ0KIA0KKy8qDQorICogdmRldl9sYWJlbF9zdGFydCByZXR1cm5z IHRoZSBwaHlzaWNhbCBkaXNrIG9mZnNldCAoaW4gYnl0ZXMpIG9mDQorICogbGFiZWwgImwiLg0K KyAqLw0KK3N0YXRpYyBncnViX3VpbnQ2NF90IHZkZXZfbGFiZWxfc3RhcnQgKGdydWJfdWludDY0 X3QgcHNpemUsIGludCBsKQ0KK3sNCisgIHJldHVybiAobCAqIHNpemVvZiAodmRldl9sYWJlbF90 KSArIChsIDwgVkRFVl9MQUJFTFMgLyAyID8NCisJCQkJICAgICAgIDAgOiBwc2l6ZSAtDQorCQkJ CSAgICAgICBWREVWX0xBQkVMUyAqIHNpemVvZiAodmRldl9sYWJlbF90KSkpOw0KK30NCisNCiBz dGF0aWMgdm9pZA0KIHpmc191bm1vdW50IChzdHJ1Y3QgZ3J1Yl96ZnNfZGF0YSAqZGF0YSkNCiB7 DQpAQCAtMTk3OSwxMyArMjA2OSwxMyBAQA0KIHpmc19tb3VudCAoZ3J1Yl9kZXZpY2VfdCBkZXYp DQogew0KICAgc3RydWN0IGdydWJfemZzX2RhdGEgKmRhdGEgPSAwOw0KLSAgaW50IGxhYmVsID0g MDsNCi0gIHViZXJibG9ja19waHlzX3QgKnViX2FycmF5LCAqdWJiZXN0ID0gTlVMTDsNCi0gIHZk ZXZfYm9vdF9oZWFkZXJfdCAqYmg7DQorICBpbnQgbGFiZWwgPSAwLCBiZXN0bGFiZWwgPSAtMTsN CisgIGNoYXIgKnViX2FycmF5Ow0KKyAgdWJlcmJsb2NrX3QgKnViYmVzdDsNCisgIHViZXJibG9j a190ICp1YmN1ciA9IE5VTEw7DQogICB2b2lkICpvc3AgPSAwOw0KICAgZ3J1Yl9zaXplX3Qgb3Nw c2l6ZTsNCiAgIGdydWJfZXJyX3QgZXJyOw0KLSAgaW50IHZkZXZudW07DQogDQogICBpZiAoISBk ZXYtPmRpc2spDQogICAgIHsNCkBAIC0xOTk3LDExICsyMDg3LDYgQEANCiAgIGlmICghZGF0YSkN CiAgICAgcmV0dXJuIDA7DQogICBncnViX21lbXNldCAoZGF0YSwgMCwgc2l6ZW9mICgqZGF0YSkp Ow0KLSNpZiAwDQotICAvKiBpZiBpdCdzIG91ciBmaXJzdCB0aW1lIGhlcmUsIHplcm8gdGhlIGJl c3QgdWJlcmJsb2NrIG91dCAqLw0KLSAgaWYgKGRhdGEtPmJlc3RfZHJpdmUgPT0gMCAmJiBkYXRh LT5iZXN0X3BhcnQgPT0gMCAmJiBmaW5kX2Jlc3Rfcm9vdCkNCi0gICAgZ3J1Yl9tZW1zZXQgKCZj dXJyZW50X3ViZXJibG9jaywgMCwgc2l6ZW9mICh1YmVyYmxvY2tfdCkpOw0KLSNlbmRpZg0KIA0K ICAgZGF0YS0+ZGlzayA9IGRldi0+ZGlzazsNCiANCkBAIC0yMDEyLDEwMCArMjA5NywxMjkgQEAN CiAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KIA0KLSAgYmggPSBncnViX21hbGxvYyAoVkRFVl9C T09UX0hFQURFUl9TSVpFKTsNCi0gIGlmICghYmgpDQorICB1YmJlc3QgPSBncnViX21hbGxvYyAo c2l6ZW9mICgqdWJiZXN0KSk7DQorICBpZiAoIXViYmVzdCkNCiAgICAgew0KICAgICAgIHpmc191 bm1vdW50IChkYXRhKTsNCi0gICAgICBncnViX2ZyZWUgKHViX2FycmF5KTsNCiAgICAgICByZXR1 cm4gMDsNCiAgICAgfQ0KLQ0KLSAgdmRldm51bSA9IFZERVZfTEFCRUxTOw0KLQ0KLSAgLyogRG9u J3QgY2hlY2sgYmFjayBsYWJlbHMgb24gQ0RST00uICAqLw0KLSAgaWYgKGdydWJfZGlza19nZXRf c2l6ZSAoZGV2LT5kaXNrKSA9PSBHUlVCX0RJU0tfU0laRV9VTktOT1dOKQ0KLSAgICB2ZGV2bnVt ID0gVkRFVl9MQUJFTFMgLyAyOw0KLQ0KLSAgZm9yIChsYWJlbCA9IDA7IHViYmVzdCA9PSBOVUxM ICYmIGxhYmVsIDwgdmRldm51bTsgbGFiZWwrKykNCisgIGdydWJfbWVtc2V0ICh1YmJlc3QsIDAs IHNpemVvZiAoKnViYmVzdCkpOw0KKw0KKyAgLyogRXN0YWJsaXNoIHNvbWUgY29uc3RhbnRzIGZv ciB3aGVyZSB0aGluZ3MgYXJlIG9uIHRoZSBkZXZpY2U6ICovDQorDQorICAvKg0KKyAgICogIFNv bWUgZWx0b3JpdG8gc3RhY2tzIGRvbid0IGdpdmUgdXMgYSBzaXplIGFuZCB3ZSBlbmQgdXAgc2V0 dGluZyB0aGUNCisgICAqIHNpemUgdG8gTUFYVUlOVCwgZnVydGhlciBzb21lIG9mIHRoZXNlIGRl dmljZXMgc3RvcCB3b3JraW5nIG9uY2UgYSBzaW5nbGUNCisgICAqIHJlYWQgcGFzdCB0aGUgZW5k IGhhcyBiZWVuIGlzc3VlZC4gQ2hlY2tpbmcgZm9yIGEgbWF4aW11bSBwYXJ0X2xlbmd0aCBhbmQN CisgICAqIHNraXBwaW5nIHRoZSBiYWNrdXAgbGFiZWxzIGF0IHRoZSBlbmQgb2YgdGhlIHNsaWNl L3BhcnRpdGlvbi9kZXZpY2UNCisgICAqIGF2b2lkcyBicmVha2luZyBkb3duIG9uIHN1Y2ggZGV2 aWNlcy4NCisgICAqLw0KKyAgY29uc3QgaW50IHZkZXZudW0gPQ0KKyAgICBncnViX2Rpc2tfZ2V0 X3NpemUgKGRldi0+ZGlzaykgPT0gR1JVQl9ESVNLX1NJWkVfVU5LTk9XTiA/DQorICAgIFZERVZf TEFCRUxTIC8gMiA6IFZERVZfTEFCRUxTOw0KKw0KKyAgLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUg ZGV2aWNlIChkaXNrIG9yIHBhcnRpdGlvbikgYWxpZ25lZCB0byBsYWJlbCBzaXplICovDQorICBn cnViX3VpbnQ2NF90IGRldmljZV9zaXplID0NCisJZ3J1Yl9kaXNrX2dldF9zaXplIChkZXYtPmRp c2spIDw8IEdSVUJfRElTS19TRUNUT1JfQklUUzsNCisgIGNvbnN0IGdydWJfdWludDY0X3QgYWxp Z25lZGJ5dGVzID0NCisgICAgUDJBTElHTiAoZGV2aWNlX3NpemUsIChncnViX3VpbnQ2NF90KSBz aXplb2YgKHZkZXZfbGFiZWxfdCkpOw0KKw0KKyAgZm9yIChsYWJlbCA9IDA7IGxhYmVsIDwgdmRl dm51bTsgbGFiZWwrKykNCiAgICAgew0KLSAgICAgIGdydWJfemZzX2VuZGlhbl90IHViX2VuZGlh biA9IFVOS05PV05fRU5ESUFOOw0KLSAgICAgIGdydWJfZHByaW50ZiAoInpmcyIsICJsYWJlbCAl ZFxuIiwgbGFiZWwpOw0KLQ0KLSAgICAgIGRhdGEtPnZkZXZfcGh5c19zZWN0b3INCi0JPSBsYWJl bCAqIChzaXplb2YgKHZkZXZfbGFiZWxfdCkgPj4gU1BBX01JTkJMT0NLU0hJRlQpDQotCSsgKChW REVWX1NLSVBfU0laRSArIFZERVZfQk9PVF9IRUFERVJfU0laRSkgPj4gU1BBX01JTkJMT0NLU0hJ RlQpDQotCSsgKGxhYmVsIDwgVkRFVl9MQUJFTFMgLyAyID8gMCA6IGdydWJfZGlza19nZXRfc2l6 ZSAoZGV2LT5kaXNrKQ0KLQkgICAtIFZERVZfTEFCRUxTICogKHNpemVvZiAodmRldl9sYWJlbF90 KSA+PiBTUEFfTUlOQkxPQ0tTSElGVCkpOw0KKyAgICAgIGdydWJfdWludDY0X3QgbGFiZWxzdGFy dGJ5dGVzID0gdmRldl9sYWJlbF9zdGFydCAoYWxpZ25lZGJ5dGVzLCBsYWJlbCk7DQorICAgICAg Z3J1Yl91aW50NjRfdCBsYWJlbHN0YXJ0ID0gbGFiZWxzdGFydGJ5dGVzID4+IEdSVUJfRElTS19T RUNUT1JfQklUUzsNCisNCisgICAgICBncnViX2RwcmludGYgKCJ6ZnMiLCAicmVhZGluZyBsYWJl bCAlZCBhdCBzZWN0b3IgJWxsdSAoYnl0ZSAlbGx1KVxuIiwNCisJCSAgICBsYWJlbCwgKHVuc2ln bmVkIGxvbmcgbG9uZykgbGFiZWxzdGFydCwNCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBs YWJlbHN0YXJ0Ynl0ZXMpOw0KKw0KKyAgICAgIGRhdGEtPnZkZXZfcGh5c19zZWN0b3IgPSBsYWJl bHN0YXJ0ICsNCisJCSgoVkRFVl9TS0lQX1NJWkUgKyBWREVWX0JPT1RfSEVBREVSX1NJWkUpID4+ IEdSVUJfRElTS19TRUNUT1JfQklUUyk7DQorDQorICAgICAgZXJyID0gY2hlY2tfcG9vbF9sYWJl bCAoZGF0YSk7DQorICAgICAgaWYgKGVycikNCisJew0KKwkgIGdydWJfZHByaW50ZiAoInpmcyIs ICJlcnJvciBjaGVja2luZyBsYWJlbCAlZFxuIiwgbGFiZWwpOw0KKwkgIGdydWJfZXJybm8gPSBH UlVCX0VSUl9OT05FOw0KKwkgIGNvbnRpbnVlOw0KKwl9DQogDQogICAgICAgLyogUmVhZCBpbiB0 aGUgdWJlcmJsb2NrIHJpbmcgKDEyOEspLiAqLw0KLSAgICAgIGVyciA9IGdydWJfZGlza19yZWFk IChkYXRhLT5kaXNrLCBkYXRhLT52ZGV2X3BoeXNfc2VjdG9yDQotCQkJICAgICsgKFZERVZfUEhZ U19TSVpFID4+IFNQQV9NSU5CTE9DS1NISUZUKSwNCi0JCQkgICAgMCwgVkRFVl9VQkVSQkxPQ0tf UklORywgKGNoYXIgKikgdWJfYXJyYXkpOw0KLSAgICAgIGlmIChlcnIpDQotCXsNCi0JICBncnVi X2Vycm5vID0gR1JVQl9FUlJfTk9ORTsNCi0JICBjb250aW51ZTsNCi0JfQ0KLSAgICAgIGdydWJf ZHByaW50ZiAoInpmcyIsICJsYWJlbCBvayAlZFxuIiwgbGFiZWwpOw0KLQ0KLSAgICAgIHViYmVz dCA9IGZpbmRfYmVzdHViICh1Yl9hcnJheSwgZGF0YS0+dmRldl9waHlzX3NlY3Rvcik7DQotICAg ICAgaWYgKCF1YmJlc3QpDQotCXsNCi0JICBncnViX2RwcmludGYgKCJ6ZnMiLCAiTm8gdWJlcmJs b2NrIGZvdW5kXG4iKTsNCi0JICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsNCi0JICBjb250 aW51ZTsNCi0JfQ0KLSAgICAgIHViX2VuZGlhbiA9IChncnViX3pmc190b19jcHU2NCAodWJiZXN0 LT51YnBfdWJlcmJsb2NrLnViX21hZ2ljLCANCi0JCQkJICAgICBMSVRUTEVfRU5ESUFOKSA9PSBV QkVSQkxPQ0tfTUFHSUMgDQotCQkgICA/IExJVFRMRV9FTkRJQU4gOiBCSUdfRU5ESUFOKTsNCi0g ICAgICBlcnIgPSB6aW9fcmVhZCAoJnViYmVzdC0+dWJwX3ViZXJibG9jay51Yl9yb290YnAsIA0K LQkJICAgICAgdWJfZW5kaWFuLA0KLQkJICAgICAgJm9zcCwgJm9zcHNpemUsIGRhdGEpOw0KLSAg ICAgIGlmIChlcnIpDQotCXsNCi0JICBncnViX2RwcmludGYgKCJ6ZnMiLCAiY291bGRuJ3Qgemlv X3JlYWRcbiIpOyANCi0JICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsNCi0JICBjb250aW51 ZTsNCi0JfQ0KLQ0KLSAgICAgIGlmIChvc3BzaXplIDwgT0JKU0VUX1BIWVNfU0laRV9WMTQpDQot CXsNCi0JICBncnViX2RwcmludGYgKCJ6ZnMiLCAib3NwIHRvbyBzbWFsbFxuIik7IA0KLQkgIGdy dWJfZnJlZSAob3NwKTsNCi0JICBjb250aW51ZTsNCi0JfQ0KLSAgICAgIGdydWJfZHByaW50ZiAo InpmcyIsICJ1YmJlc3QgJXBcbiIsIHViYmVzdCk7DQotDQotICAgICAgZXJyID0gY2hlY2tfcG9v bF9sYWJlbCAoZGF0YSk7DQotICAgICAgaWYgKGVycikNCi0Jew0KLQkgIGdydWJfZXJybm8gPSBH UlVCX0VSUl9OT05FOw0KLQkgIGNvbnRpbnVlOw0KLQl9DQotI2lmIDANCi0gICAgICBpZiAoZmlu ZF9iZXN0X3Jvb3QgJiYNCi0JICB2ZGV2X3ViZXJibG9ja19jb21wYXJlICgmdWJiZXN0LT51YnBf dWJlcmJsb2NrLA0KLQkJCQkgICYoY3VycmVudF91YmVyYmxvY2spKSA8PSAwKQ0KLQljb250aW51 ZTsNCi0jZW5kaWYNCi0gICAgICAvKiBHb3QgdGhlIE1PUy4gU2F2ZSBpdCBhdCB0aGUgbWVtb3J5 IGFkZHIgTU9TLiAqLw0KLSAgICAgIGdydWJfbWVtbW92ZSAoJihkYXRhLT5tb3MuZG4pLCAmKChv YmpzZXRfcGh5c190ICopIG9zcCktPm9zX21ldGFfZG5vZGUsDQotCQkgICAgRE5PREVfU0laRSk7 DQotICAgICAgZGF0YS0+bW9zLmVuZGlhbiA9IChncnViX3pmc190b19jcHU2NCAodWJiZXN0LT51 YnBfdWJlcmJsb2NrLnViX3Jvb3RicC5ibGtfcHJvcCwgdWJfZW5kaWFuKSA+PiA2MykgJiAxOw0K LSAgICAgIGdydWJfbWVtbW92ZSAoJihkYXRhLT5jdXJyZW50X3ViZXJibG9jayksDQotCQkgICAg JnViYmVzdC0+dWJwX3ViZXJibG9jaywgc2l6ZW9mICh1YmVyYmxvY2tfdCkpOw0KLSAgICAgIGdy dWJfZnJlZSAodWJfYXJyYXkpOw0KLSAgICAgIGdydWJfZnJlZSAoYmgpOw0KLSAgICAgIGdydWJf ZnJlZSAob3NwKTsNCi0gICAgICByZXR1cm4gZGF0YTsgIA0KKyAgICAgIGVyciA9IGdydWJfZGlz a19yZWFkIChkYXRhLT5kaXNrLA0KKwkJCSAgICBkYXRhLT52ZGV2X3BoeXNfc2VjdG9yICsNCisJ CQkgICAgKFZERVZfUEhZU19TSVpFID4+IEdSVUJfRElTS19TRUNUT1JfQklUUyksDQorCQkJICAg IDAsIFZERVZfVUJFUkJMT0NLX1JJTkcsIHViX2FycmF5KTsNCisgICAgICBpZiAoZXJyKQ0KKwl7 DQorCSAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgImVycm9yIHJlYWRpbmcgdWJlcmJsb2NrIHJpbmcg Zm9yIGxhYmVsICVkXG4iLCBsYWJlbCk7DQorCSAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7 DQorCSAgY29udGludWU7DQorCX0NCisNCisgICAgICB1YmN1ciA9IGZpbmRfYmVzdHViICh1Yl9h cnJheSwgZGF0YSk7DQorICAgICAgaWYgKCF1YmN1cikNCisJew0KKwkgIGdydWJfZHByaW50ZiAo InpmcyIsICJObyBnb29kIHViZXJibG9ja3MgZm91bmQgaW4gbGFiZWwgJWRcbiIsIGxhYmVsKTsN CisJICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsNCisJICBjb250aW51ZTsNCisJfQ0KKw0K KyAgICAgIGlmICh2ZGV2X3ViZXJibG9ja19jb21wYXJlICh1YmN1ciwgdWJiZXN0KSA+IDApDQor CXsNCisJICAvKiBMb29rcyBsaWtlIHRoZSBibG9jayBpcyBnb29kLCBzbyB1c2UgaXQuICovDQor CSAgZ3J1Yl9tZW1jcHkgKHViYmVzdCwgdWJjdXIsIHNpemVvZiAoKnViYmVzdCkpOw0KKwkgIGJl c3RsYWJlbCA9IGxhYmVsOw0KKwkgIGdydWJfZHByaW50ZiAoInpmcyIsICJDdXJyZW50IGJlc3Qg dWJlcmJsb2NrIGZvdW5kIGluIGxhYmVsICVkXG4iLCBsYWJlbCk7DQorCX0NCiAgICAgfQ0KLSAg Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAiY291bGRuJ3QgZmluZCBhIHZhbGlkIGxhYmVs Iik7DQotICB6ZnNfdW5tb3VudCAoZGF0YSk7DQogICBncnViX2ZyZWUgKHViX2FycmF5KTsNCi0g IGdydWJfZnJlZSAoYmgpOw0KKw0KKyAgLyoNCisgICAqIFdlIHplcm8nZCB0aGUgc3RydWN0dXJl IHRvIGJlZ2luIHdpdGguICBJZiB3ZSBuZXZlciBhc3NpZ25lZCB0byBpdCwNCisgICAqIG1hZ2lj IHdpbGwgc3RpbGwgYmUgemVyby4NCisgICAqLw0KKyAgaWYgKCF1YmJlc3QtPnViX21hZ2ljKQ0K KyAgICB7DQorICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAiY291bGRuJ3QgZmlu ZCBhIHZhbGlkIFpGUyBsYWJlbCIpOw0KKyAgICAgIHpmc191bm1vdW50IChkYXRhKTsNCisgICAg ICBncnViX2ZyZWUgKHViYmVzdCk7DQorICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgIGdy dWJfZHByaW50ZiAoInpmcyIsICJ1YmJlc3QgJXAgaW4gbGFiZWwgJWRcbiIsIHViYmVzdCwgYmVz dGxhYmVsKTsNCisNCisgIGdydWJfemZzX2VuZGlhbl90IHViX2VuZGlhbiA9DQorICAgIGdydWJf emZzX3RvX2NwdTY0ICh1YmJlc3QtPnViX21hZ2ljLCBMSVRUTEVfRU5ESUFOKSA9PSBVQkVSQkxP Q0tfTUFHSUMNCisgICAgPyBMSVRUTEVfRU5ESUFOIDogQklHX0VORElBTjsNCisgIGVyciA9IHpp b19yZWFkICgmdWJiZXN0LT51Yl9yb290YnAsIHViX2VuZGlhbiwgJm9zcCwgJm9zcHNpemUsIGRh dGEpOw0KKw0KKyAgaWYgKGVycikNCisgICAgew0KKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9GUywgImNvdWxkbid0IHppb19yZWFkIG9iamVjdCBkaXJlY3RvcnkiKTsNCisgICAgICB6 ZnNfdW5tb3VudCAoZGF0YSk7DQorICAgICAgZ3J1Yl9mcmVlICh1YmJlc3QpOw0KKyAgICAgIHJl dHVybiAwOw0KKyAgICB9DQorDQorICBpZiAob3Nwc2l6ZSA8IE9CSlNFVF9QSFlTX1NJWkVfVjE0 KQ0KKyAgICB7DQorICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAib3NwIHRvbyBz bWFsbCIpOw0KKyAgICAgIHpmc191bm1vdW50IChkYXRhKTsNCisgICAgICBncnViX2ZyZWUgKG9z cCk7DQorICAgICAgZ3J1Yl9mcmVlICh1YmJlc3QpOw0KKyAgICAgIHJldHVybiAwOw0KKyAgICB9 DQorDQorICAvKiBHb3QgdGhlIE1PUy4gU2F2ZSBpdCBhdCB0aGUgbWVtb3J5IGFkZHIgTU9TLiAq Lw0KKyAgZ3J1Yl9tZW1tb3ZlICgmKGRhdGEtPm1vcy5kbiksICYoKG9ianNldF9waHlzX3QgKikg b3NwKS0+b3NfbWV0YV9kbm9kZSwgRE5PREVfU0laRSk7DQorICBkYXRhLT5tb3MuZW5kaWFuID0N CisJCShncnViX3pmc190b19jcHU2NCAodWJiZXN0LT51Yl9yb290YnAuYmxrX3Byb3AsIHViX2Vu ZGlhbikgPj4gNjMpICYgMTsNCisgIGdydWJfbWVtbW92ZSAoJihkYXRhLT5jdXJyZW50X3ViZXJi bG9jayksIHViYmVzdCwgc2l6ZW9mICh1YmVyYmxvY2tfdCkpOw0KKw0KICAgZ3J1Yl9mcmVlIChv c3ApOw0KKyAgZ3J1Yl9mcmVlICh1YmJlc3QpOw0KIA0KLSAgcmV0dXJuIDA7DQorICByZXR1cm4g KGRhdGEpOw0KIH0NCiANCiBncnViX2Vycl90DQpAQCAtMjE0OSwzMyArMjI2MywxOCBAQA0KIHN0 YXRpYyBncnViX2Vycl90IA0KIHpmc191dWlkIChncnViX2RldmljZV90IGRldmljZSwgY2hhciAq KnV1aWQpDQogew0KLSAgY2hhciAqbnZsaXN0Ow0KLSAgaW50IGZvdW5kOw0KICAgc3RydWN0IGdy dWJfemZzX2RhdGEgKmRhdGE7DQotICBncnViX3VpbnQ2NF90IGd1aWQ7DQotICBncnViX2Vycl90 IGVycjsNCi0NCi0gICp1dWlkID0gMDsNCiANCiAgIGRhdGEgPSB6ZnNfbW91bnQgKGRldmljZSk7 DQogICBpZiAoISBkYXRhKQ0KICAgICByZXR1cm4gZ3J1Yl9lcnJubzsNCiANCi0gIGVyciA9IHpm c19mZXRjaF9udmxpc3QgKGRhdGEsICZudmxpc3QpOw0KLSAgaWYgKGVycikNCi0gICAgew0KLSAg ICAgIHpmc191bm1vdW50IChkYXRhKTsNCi0gICAgICByZXR1cm4gZXJyOw0KLSAgICB9DQotDQot ICBmb3VuZCA9IGdydWJfemZzX252bGlzdF9sb29rdXBfdWludDY0IChudmxpc3QsIFpQT09MX0NP TkZJR19QT09MX0dVSUQsICZndWlkKTsNCi0gIGlmICghIGZvdW5kKQ0KLSAgICByZXR1cm4gZ3J1 Yl9lcnJubzsNCi0gIGdydWJfZnJlZSAobnZsaXN0KTsNCi0gICp1dWlkID0gZ3J1Yl94YXNwcmlu dGYgKCIlMDE2bGx4IiwgKGxvbmcgbG9uZyB1bnNpZ25lZCkgZ3VpZCk7DQorICAqdXVpZCA9IGdy dWJfeGFzcHJpbnRmICgiJTAxNmxseCIsIChsb25nIGxvbmcgdW5zaWduZWQpIGRhdGEtPnBvb2xf Z3VpZCk7DQogICB6ZnNfdW5tb3VudCAoZGF0YSk7DQorDQogICBpZiAoISAqdXVpZCkNCiAgICAg cmV0dXJuIGdydWJfZXJybm87DQorDQogICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCiB9DQogDQoN Cj09PSBtb2RpZmllZCBmaWxlICdpbmNsdWRlL2dydWIvemZzL3ViZXJibG9ja19pbXBsLmgnDQot LS0gaW5jbHVkZS9ncnViL3pmcy91YmVyYmxvY2tfaW1wbC5oCTIwMTAtMTItMDEgMjE6NTU6MjYg KzAwMDANCisrKyBpbmNsdWRlL2dydWIvemZzL3ViZXJibG9ja19pbXBsLmgJMjAxMi0wMS0xOSAx MToyODowOSArMDAwMA0KQEAgLTIzLDYgKzIzLDggQEANCiAjaWZuZGVmIF9TWVNfVUJFUkJMT0NL X0lNUExfSA0KICNkZWZpbmUJX1NZU19VQkVSQkxPQ0tfSU1QTF9IDQogDQorI2RlZmluZSBVQk1B WChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpDQorDQogLyoNCiAgKiBUaGUgdWJlcmJsb2Nr IHZlcnNpb24gaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgYW4gaW5jb21wYXRpYmxlIG9uLWRpc2sN CiAgKiBmb3JtYXQgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIFNQQSwgRE1VLCBvciBaQVAuDQpAQCAt NDUsMTYgKzQ3LDEwIEBADQogCWJsa3B0cl90CXViX3Jvb3RicDsJLyogTU9TIG9ianNldF9waHlz X3QJCSovDQogfSB1YmVyYmxvY2tfdDsNCiANCi0jZGVmaW5lCVVCRVJCTE9DS19TSVpFCQkoMVVM TCA8PCBVQkVSQkxPQ0tfU0hJRlQpDQotI2RlZmluZQlWREVWX1VCRVJCTE9DS19TSElGVAlVQkVS QkxPQ0tfU0hJRlQNCi0NCi0vKiBYWFggVWJlcmJsb2NrX3BoeXNfdCBpcyBubyBsb25nZXIgaW4g dGhlIGtlcm5lbCB6ZnMgKi8NCi10eXBlZGVmIHN0cnVjdCB1YmVyYmxvY2tfcGh5cyB7DQotCXVi ZXJibG9ja190CXVicF91YmVyYmxvY2s7DQotCWNoYXIJCXVicF9wYWRbVUJFUkJMT0NLX1NJWkUg LSBzaXplb2YgKHViZXJibG9ja190KSAtDQotCQkJCXNpemVvZiAoemlvX2Vja190KV07DQotCXpp b19lY2tfdAl1YnBfemVjOw0KLX0gdWJlcmJsb2NrX3BoeXNfdDsNCi0NCisjZGVmaW5lCVZERVZf VUJFUkJMT0NLX1NISUZUKGFzKQlVQk1BWChhcywgVUJFUkJMT0NLX1NISUZUKQ0KKyNkZWZpbmUJ VUJFUkJMT0NLX1NJWkUoYXMpCQkoMVVMTCA8PCBWREVWX1VCRVJCTE9DS19TSElGVChhcykpDQor DQorLyogTnVtYmVyIG9mIHViZXJibG9ja3MgdGhhdCBjYW4gZml0IGluIHRoZSByaW5nIGF0IGEg Z2l2ZW4gYXNoaWZ0ICovDQorI2RlZmluZSBVQkVSQkxPQ0tfQ09VTlQoYXMpIChWREVWX1VCRVJC TE9DS19SSU5HID4+IFZERVZfVUJFUkJMT0NLX1NISUZUKGFzKSkNCiANCiAjZW5kaWYJLyogX1NZ U19VQkVSQkxPQ0tfSU1QTF9IICovDQoNCm== --=-+OY88o023Zce2cnzJc0F-- --=-IMojLx5K3qzgeMheXx0D Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEABECAAYFAk8YAEoACgkQbfU6uV4fG86xVgCfaBxVXIWa7UuqU43WyzWF/2DU tmQAoPAjqEsCIGt2a2ROdwrQq039fvcF =R71f -----END PGP SIGNATURE----- --=-IMojLx5K3qzgeMheXx0D--