Date: Tue, 5 Apr 2011 08:34:33 -0700 From: "Achim Leubner" <Achim_Leubner@pmc-sierra.com> To: "Ed Maste" <emaste@phaedrus.sandvine.ca>, "Scott Long" <scottl@samsco.org> Cc: freebsd-scsi@FreeBSD.org Subject: aac driver patch for FreeBSD 8.2 Message-ID: <FD2BDBE06AC58549AE9E16C08B45675D04F88AD6@BBY1EXM10.pmc_nt.nt.pmc-sierra.bc.ca>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. ------_=_NextPart_001_01CBF3A6.F7D71E12 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Ed, Hi Scott, =20 Attached you find an aac driver patch to support PMC-Sierra's SRC based = controller family. It includes the following changes: - New hardware device id 0x28b interface=20 - New XPORT header required - Sync. command interface: small changes, doorbell bits shifted - Async. Interface: different inbound queue handling, no = outbound I2O queue available, using doorbell and response buffer in host = memory for status - Changed AIF (adapter initiated FIB) interface=20 - Passthrough (raw_srb) IOCTL handling changed =20 The driver package shipped with the new controller family is tested in = an release cycle and I adapted the changes to the FreeBSD 8.2 inbox = driver because we want to become inbox with that driver as soon as = possible.=20 Any comments are greatly appreciated. =20 Thanks, Achim =20 Achim Leubner Firmware Design Engineer PMC-Sierra Germany GmbH Sitz/Registered Office: Ismaning bei Muenchen Amtsgericht/Local Court Muenchen, HRB 189193 Gesch=E4ftsf=FChrer/Managing Director: Michael W. Zellner =20 ------_=_NextPart_001_01CBF3A6.F7D71E12 Content-Type: text/plain; name="fb82_aac.txt" Content-Transfer-Encoding: base64 Content-Description: fb82_aac.txt Content-Disposition: attachment; filename="fb82_aac.txt" ZGlmZiAtcHJ1TiBvbGQvYWFjLmMgbmV3L2FhYy5jCi0tLSBvbGQvYWFjLmMJMjAxMS0wMy0zMSAx NDo1NzozNC4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWMuYwkyMDExLTA0LTAxIDEyOjQyOjQ5 LjAwMDAwMDAwMCArMDAwMApAQCAtMiw3ICsyLDggQEAKICAqIENvcHlyaWdodCAoYykgMjAwMCBN aWNoYWVsIFNtaXRoCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgU2NvdHQgTG9uZwogICogQ29weXJp Z2h0IChjKSAyMDAwIEJTRGkKLSAqIENvcHlyaWdodCAoYykgMjAwMSBBZGFwdGVjLCBJbmMuCisg KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMp IDIwMTAgUE1DLVNpZXJyYSwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKQEAgLTk3LDcgKzk4LDcgQEAgc3RhdGljIGludAlhYWNfY2hlY2tfZmlybXdhcmUo c3RydWN0IGFhYwogc3RhdGljIGludAlhYWNfaW5pdChzdHJ1Y3QgYWFjX3NvZnRjICpzYyk7CiBz dGF0aWMgaW50CWFhY19zeW5jX2NvbW1hbmQoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50MzJf dCBjb21tYW5kLAogCQkJCSB1X2ludDMyX3QgYXJnMCwgdV9pbnQzMl90IGFyZzEsIHVfaW50MzJf dCBhcmcyLAotCQkJCSB1X2ludDMyX3QgYXJnMywgdV9pbnQzMl90ICpzcCk7CisJCQkJIHVfaW50 MzJfdCBhcmczLCB1X2ludDMyX3QgKnNwLCB1X2ludDMyX3QgKnIxKTsKIHN0YXRpYyBpbnQJYWFj X3NldHVwX2ludHIoc3RydWN0IGFhY19zb2Z0YyAqc2MpOwogc3RhdGljIGludAlhYWNfZW5xdWV1 ZV9maWIoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBxdWV1ZSwKIAkJCQlzdHJ1Y3QgYWFjX2Nv bW1hbmQgKmNtKTsKQEAgLTE4Miw2ICsxODMsMzMgQEAgc3RydWN0IGFhY19pbnRlcmZhY2UgYWFj X3JrdF9pbnRlcmZhY2UgPQogCWFhY19ya3Rfc2V0X291dGJfcXVldWUKIH07CiAKKy8qIFBNQyBT UkMgaW50ZXJmYWNlICovCitzdGF0aWMgaW50CWFhY19zcmNfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBh YWNfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfcW5vdGlmeShzdHJ1Y3QgYWFjX3Nv ZnRjICpzYywgaW50IHFiaXQpOworc3RhdGljIGludAlhYWNfc3JjX2dldF9pc3RhdHVzKHN0cnVj dCBhYWNfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfY2xlYXJfaXN0YXR1cyhzdHJ1 Y3QgYWFjX3NvZnRjICpzYywgaW50IG1hc2spOworc3RhdGljIHZvaWQJYWFjX3NyY19zZXRfbWFp bGJveChzdHJ1Y3QgYWFjX3NvZnRjICpzYywgdV9pbnQzMl90IGNvbW1hbmQsCisJCQkJICAgIHVf aW50MzJfdCBhcmcwLCB1X2ludDMyX3QgYXJnMSwKKwkJCQkgICAgdV9pbnQzMl90IGFyZzIsIHVf aW50MzJfdCBhcmczKTsKK3N0YXRpYyBpbnQJYWFjX3NyY19nZXRfbWFpbGJveChzdHJ1Y3QgYWFj X3NvZnRjICpzYywgaW50IG1iKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfc2V0X2ludGVycnVwdHMo c3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBlbmFibGUpOworc3RhdGljIGludCBhYWNfc3JjX3Nl bmRfY29tbWFuZChzdHJ1Y3QgYWFjX3NvZnRjICpzYywgc3RydWN0IGFhY19jb21tYW5kICpjbSk7 CitzdGF0aWMgaW50IGFhY19zcmNfZ2V0X291dGJfcXVldWUoc3RydWN0IGFhY19zb2Z0YyAqc2Mp Oworc3RhdGljIHZvaWQgYWFjX3NyY19zZXRfb3V0Yl9xdWV1ZShzdHJ1Y3QgYWFjX3NvZnRjICpz YywgaW50IGluZGV4KTsKKworc3RydWN0IGFhY19pbnRlcmZhY2UgYWFjX3NyY19pbnRlcmZhY2Ug PSB7CisJYWFjX3NyY19nZXRfZndzdGF0dXMsCisJYWFjX3NyY19xbm90aWZ5LAorCWFhY19zcmNf Z2V0X2lzdGF0dXMsCisJYWFjX3NyY19jbGVhcl9pc3RhdHVzLAorCWFhY19zcmNfc2V0X21haWxi b3gsCisJYWFjX3NyY19nZXRfbWFpbGJveCwKKwlhYWNfc3JjX3NldF9pbnRlcnJ1cHRzLAorCWFh Y19zcmNfc2VuZF9jb21tYW5kLAorCWFhY19zcmNfZ2V0X291dGJfcXVldWUsCisJYWFjX3NyY19z ZXRfb3V0Yl9xdWV1ZQorfTsKKwogLyogRGVidWdnaW5nIGFuZCBEaWFnbm9zdGljcyAqLwogc3Rh dGljIHZvaWQJYWFjX2Rlc2NyaWJlX2NvbnRyb2xsZXIoc3RydWN0IGFhY19zb2Z0YyAqc2MpOwog c3RhdGljIGNoYXIJKmFhY19kZXNjcmliZV9jb2RlKHN0cnVjdCBhYWNfY29kZV9sb29rdXAgKnRh YmxlLApAQCAtMTk2LDYgKzIyNCw3IEBAIHN0YXRpYyBpbnQJCWFhY19pb2N0bF9zZW5kZmliKHN0 cnVjdCBhYWMKIHN0YXRpYyBpbnQJCWFhY19pb2N0bF9zZW5kX3Jhd19zcmIoc3RydWN0IGFhY19z b2Z0YyAqc2MsIGNhZGRyX3QgYXJnKTsKIHN0YXRpYyB2b2lkCQlhYWNfaGFuZGxlX2FpZihzdHJ1 Y3QgYWFjX3NvZnRjICpzYywKIAkJCQkJICAgc3RydWN0IGFhY19maWIgKmZpYik7CitzdGF0aWMg dm9pZAkJYWFjX3JlcXVlc3RfYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjKTsKIHN0YXRpYyBpbnQJ CWFhY19yZXZfY2hlY2soc3RydWN0IGFhY19zb2Z0YyAqc2MsIGNhZGRyX3QgdWRhdGEpOwogc3Rh dGljIGludAkJYWFjX29wZW5fYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBjYWRkcl90IGFyZyk7 CiBzdGF0aWMgaW50CQlhYWNfY2xvc2VfYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBjYWRkcl90 IGFyZyk7CkBAIC0yMDcsOCArMjM2LDExIEBAIHN0YXRpYyBpbnQJCWFhY19nZXRfcGNpX2luZm8o c3RydWN0IGFhY18KIHN0YXRpYyBpbnQJCWFhY19zdXBwb3J0ZWRfZmVhdHVyZXMoc3RydWN0IGFh Y19zb2Z0YyAqc2MsIGNhZGRyX3QgdXB0cik7CiBzdGF0aWMgdm9pZAkJYWFjX2lvY3RsX2V2ZW50 KHN0cnVjdCBhYWNfc29mdGMgKnNjLAogCQkJCQlzdHJ1Y3QgYWFjX2V2ZW50ICpldmVudCwgdm9p ZCAqYXJnKTsKK3N0YXRpYyBpbnQJCWFhY19yZXNldF9hZGFwdGVyKHN0cnVjdCBhYWNfc29mdGMg KnNjKTsKIHN0YXRpYyBzdHJ1Y3QgYWFjX21udGluZm9yZXNwICoKIAlhYWNfZ2V0X2NvbnRhaW5l cl9pbmZvKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBzdHJ1Y3QgYWFjX2ZpYiAqZmliLCBpbnQgY2lk KTsKK3N0YXRpYyB1X2ludDMyX3QKKwlhYWNfY2hlY2tfYWRhcHRlcl9oZWFsdGgoc3RydWN0IGFh Y19zb2Z0YyAqc2MsIHVfaW50OF90ICpibGVkKTsKIAogc3RhdGljIHN0cnVjdCBjZGV2c3cgYWFj X2NkZXZzdyA9IHsKIAkuZF92ZXJzaW9uID0JRF9WRVJTSU9OLApAQCAtMjM3LDcgKzI2OSw3IEBA IGFhY19hdHRhY2goc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJaW50IGVycm9yLCB1bml0OwogCiAJ ZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwotCisJc2Mt PmhpbnRfZmxhZ3MgPSBkZXZpY2VfZ2V0X2ZsYWdzKHNjLT5hYWNfZGV2KTsKIAkvKgogCSAqIElu aXRpYWxpemUgcGVyLWNvbnRyb2xsZXIgcXVldWVzLgogCSAqLwpAQCAtNDg3LDYgKzUxOSw3IEBA IGFhY19hZGRfY29udGFpbmVyKHN0cnVjdCBhYWNfc29mdGMgKnNjLCAKIHN0YXRpYyBpbnQKIGFh Y19hbGxvYyhzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIHsKKwlidXNfc2l6ZV90IG1heHNpemU7CiAK IAlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CiAKQEAg LTUxNCw2ICs1NDcsMTEgQEAgYWFjX2FsbG9jKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCS8qCiAJ ICogQ3JlYXRlIERNQSB0YWcgZm9yIG1hcHBpbmcgRklCcyBpbnRvIGNvbnRyb2xsZXItYWRkcmVz c2FibGUgc3BhY2UuLgogCSAqLworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1f VFlQRTEpIAorCQltYXhzaXplID0gc2MtPmFhY19tYXhfZmlic19hbGxvYyAqIChzYy0+YWFjX21h eF9maWJfc2l6ZSArCisJCQlzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsgMzEpOwor CWVsc2UKKwkJbWF4c2l6ZSA9IHNjLT5hYWNfbWF4X2ZpYnNfYWxsb2MgKiBzYy0+YWFjX21heF9m aWJfc2l6ZTsKIAlpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5hYWNfcGFyZW50X2RtYXQsCS8q IHBhcmVudCAqLwogCQkJICAgICAgIDEsIDAsIAkJCS8qIGFsZ25tbnQsIGJvdW5kYXJ5ICovCiAJ CQkgICAgICAgKHNjLT5mbGFncyAmIEFBQ19GTEFHU180R0JfV0lORE9XKSA/CkBAIC01MjEsMTEg KzU1OSw5IEBAIGFhY19hbGxvYyhzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAkJCSAgICAgICAweDdm ZmZmZmZmLAkJLyogbG93YWRkciAqLwogCQkJICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAJLyog aGlnaGFkZHIgKi8KIAkJCSAgICAgICBOVUxMLCBOVUxMLCAJCS8qIGZpbHRlciwgZmlsdGVyYXJn ICovCi0JCQkgICAgICAgc2MtPmFhY19tYXhfZmlic19hbGxvYyAqCi0JCQkgICAgICAgc2MtPmFh Y19tYXhfZmliX3NpemUsICAvKiBtYXhzaXplICovCisJCQkgICAgICAgbWF4c2l6ZSwgIAkJLyog bWF4c2l6ZSAqLwogCQkJICAgICAgIDEsCQkJLyogbnNlZ21lbnRzICovCi0JCQkgICAgICAgc2Mt PmFhY19tYXhfZmlic19hbGxvYyAqCi0JCQkgICAgICAgc2MtPmFhY19tYXhfZmliX3NpemUsCS8q IG1heHNpemUgKi8KKwkJCSAgICAgICBtYXhzaXplLAkJCS8qIG1heHNpemUgKi8KIAkJCSAgICAg ICAwLAkJCS8qIGZsYWdzICovCiAJCQkgICAgICAgTlVMTCwgTlVMTCwJCS8qIE5vIGxvY2tpbmcg bmVlZGVkICovCiAJCQkgICAgICAgJnNjLT5hYWNfZmliX2RtYXQpKSB7CkBAIC01MzYsNiArNTcy LDkgQEAgYWFjX2FsbG9jKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCS8qCiAJICogQ3JlYXRlIERN QSB0YWcgZm9yIHRoZSBjb21tb24gc3RydWN0dXJlIGFuZCBhbGxvY2F0ZSBpdC4KIAkgKi8KKwlt YXhzaXplID0gODE5MiArIHNpemVvZihzdHJ1Y3QgYWFjX2NvbW1vbik7CisJaWYgKHNjLT5mbGFn cyAmIEFBQ19GTEFHU19ORVdfQ09NTV9UWVBFMSkgCisJCW1heHNpemUgKz0gc2MtPmFhY19tYXhf ZmlicyAqIHNpemVvZih1X2ludDMyX3QpOwogCWlmIChidXNfZG1hX3RhZ19jcmVhdGUoc2MtPmFh Y19wYXJlbnRfZG1hdCwgCS8qIHBhcmVudCAqLwogCQkJICAgICAgIDEsIDAsCQkJLyogYWxnbm1u dCwgYm91bmRhcnkgKi8KIAkJCSAgICAgICAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTXzRHQl9XSU5E T1cpID8KQEAgLTU0Myw5ICs1ODIsOSBAQCBhYWNfYWxsb2Moc3RydWN0IGFhY19zb2Z0YyAqc2Mp CiAJCQkgICAgICAgMHg3ZmZmZmZmZiwJCS8qIGxvd2FkZHIgKi8KIAkJCSAgICAgICBCVVNfU1BB Q0VfTUFYQUREUiwgCS8qIGhpZ2hhZGRyICovCiAJCQkgICAgICAgTlVMTCwgTlVMTCwgCQkvKiBm aWx0ZXIsIGZpbHRlcmFyZyAqLwotCQkJICAgICAgIDgxOTIgKyBzaXplb2Yoc3RydWN0IGFhY19j b21tb24pLCAvKiBtYXhzaXplICovCisJCQkgICAgICAgbWF4c2l6ZSwgCQkvKiBtYXhzaXplICov CiAJCQkgICAgICAgMSwJCQkvKiBuc2VnbWVudHMgKi8KLQkJCSAgICAgICBCVVNfU1BBQ0VfTUFY U0laRV8zMkJJVCwJLyogbWF4c2Vnc2l6ZSAqLworCQkJICAgICAgIG1heHNpemUsCQkJLyogbWF4 c2Vnc2l6ZSAqLwogCQkJICAgICAgIDAsCQkJLyogZmxhZ3MgKi8KIAkJCSAgICAgICBOVUxMLCBO VUxMLAkJLyogTm8gbG9ja2luZyBuZWVkZWQgKi8KIAkJCSAgICAgICAmc2MtPmFhY19jb21tb25f ZG1hdCkpIHsKQEAgLTU2Niw3ICs2MDUsNyBAQCBhYWNfYWxsb2Moc3RydWN0IGFhY19zb2Z0YyAq c2MpCiAJICogb2YgaWdub3JlZD8KIAkgKi8KIAkodm9pZClidXNfZG1hbWFwX2xvYWQoc2MtPmFh Y19jb21tb25fZG1hdCwgc2MtPmFhY19jb21tb25fZG1hbWFwLAotCQkJc2MtPmFhY19jb21tb24s IDgxOTIgKyBzaXplb2YoKnNjLT5hYWNfY29tbW9uKSwKKwkJCXNjLT5hYWNfY29tbW9uLCBtYXhz aXplLAogCQkJYWFjX2NvbW1vbl9tYXAsIHNjLCAwKTsKIAogCWlmIChzYy0+YWFjX2NvbW1vbl9i dXNhZGRyIDwgODE5MikgewpAQCAtNTc0LDcgKzYxMyw3IEBAIGFhY19hbGxvYyhzdHJ1Y3QgYWFj X3NvZnRjICpzYykKIAkJICAgICgodWludDhfdCAqKXNjLT5hYWNfY29tbW9uICsgODE5Mik7CiAJ CXNjLT5hYWNfY29tbW9uX2J1c2FkZHIgKz0gODE5MjsKIAl9Ci0JYnplcm8oc2MtPmFhY19jb21t b24sIHNpemVvZigqc2MtPmFhY19jb21tb24pKTsKKwliemVybyhzYy0+YWFjX2NvbW1vbiwgbWF4 c2l6ZSAtIDgxOTIpOwogCiAJLyogQWxsb2NhdGUgc29tZSBGSUJzIGFuZCBhc3NvY2lhdGVkIGNv bW1hbmQgc3RydWN0cyAqLwogCVRBSUxRX0lOSVQoJnNjLT5hYWNfZmlibWFwX3RxaCk7CkBAIC02 NDAsNyArNjc5LDggQEAgYWFjX2ZyZWUoc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJaWYgKHNjLT5h YWNfcmVnc19yZXMwICE9IE5VTEwpCiAJCWJ1c19yZWxlYXNlX3Jlc291cmNlKHNjLT5hYWNfZGV2 LCBTWVNfUkVTX01FTU9SWSwKIAkJCQkgICAgIHNjLT5hYWNfcmVnc19yaWQwLCBzYy0+YWFjX3Jl Z3NfcmVzMCk7Ci0JaWYgKHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9OQVJLICYmIHNjLT5hYWNf cmVnc19yZXMxICE9IE5VTEwpCisJaWYgKChzYy0+YWFjX2h3aWYgPT0gQUFDX0hXSUZfU1JDIHx8 IHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9OQVJLKQorCQkmJiBzYy0+YWFjX3JlZ3NfcmVzMSAh PSBOVUxMKQogCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+YWFjX2RldiwgU1lTX1JFU19NRU1P UlksCiAJCQkJICAgICBzYy0+YWFjX3JlZ3NfcmlkMSwgc2MtPmFhY19yZWdzX3JlczEpOwogfQpA QCAtODAwLDYgKzg0MCwxMDcgQEAgYWFjX3Jlc3VtZShkZXZpY2VfdCBkZXYpCiB9CiAKIC8qCisg KiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgTkVXX0NPTU1fVFlQRTEgaW50ZXJmYWNlLgorICovCit2 b2lkCithYWNfbmV3X2ludHJfdHlwZTEodm9pZCAqYXJnKQoreworCXN0cnVjdCBhYWNfc29mdGMg KnNjOworCXN0cnVjdCBhYWNfY29tbWFuZCAqY207CisJc3RydWN0IGFhY19maWIgKmZpYjsKKwl1 X2ludDMyX3QgYmVsbGJpdHMsIGJlbGxiaXRzX3NoaWZ0ZWQsIGluZGV4LCBoYW5kbGU7CisJaW50 IGlzRmFzdFJlc3BvbnNlLCBpc0FpZiwgbm9Nb3JlQWlmOworCWludCBvdXJfaW50ZXJydXB0ID0g MDsKKworCXNjID0gKHN0cnVjdCBhYWNfc29mdGMgKilhcmc7CisKKwlmd3ByaW50ZihzYywgSEJB X0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisJbXR4X2xvY2soJnNjLT5hYWNfaW9f bG9jayk7CisJYmVsbGJpdHMgPSBBQUNfTUVNMF9HRVRSRUc0KHNjLCBBQUNfU1JDX09EQlJfUik7 CisJaWYgKGJlbGxiaXRzICYgQUFDX0RCX1JFU1BPTlNFX1NFTlRfTlMpIHsKKwkJYmVsbGJpdHMg PSBBQUNfREJfUkVTUE9OU0VfU0VOVF9OUzsKKwkJLyogaGFuZGxlIGFzeW5jLiBzdGF0dXMgKi8K KwkJb3VyX2ludGVycnVwdCA9IDE7CisJCWluZGV4ID0gc2MtPmFhY19ob3N0X3JycV9pZHg7CisJ CWlmIChzYy0+YWFjX2NvbW1vbi0+YWNfaG9zdF9ycnFbaW5kZXhdID09IDApIHsKKwkJCXVfaW50 MzJfdCBvbGRfaW5kZXggPSBpbmRleDsKKwkJCS8qIGFkanVzdCBpbmRleCAqLworCQkJZG8gewor CQkJCWluZGV4Kys7CisJCQkJaWYgKGluZGV4ID09IHNjLT5hYWNfbWF4X2ZpYnMpIAorCQkJCQlp bmRleCA9IDA7CisJCQkJaWYgKHNjLT5hYWNfY29tbW9uLT5hY19ob3N0X3JycVtpbmRleF0gIT0g MCkgCisJCQkJCWJyZWFrOworCQkJfSB3aGlsZSAoaW5kZXggIT0gb2xkX2luZGV4KTsKKwkJCXNj LT5hYWNfaG9zdF9ycnFfaWR4ID0gaW5kZXg7CisJCX0KKwkJZm9yICg7OykgeworCQkJaXNGYXN0 UmVzcG9uc2UgPSBpc0FpZiA9IG5vTW9yZUFpZiA9IDA7CisJCQkvKiByZW1vdmUgdG9nZ2xlIGJp dCAoMzEpICovCisJCQloYW5kbGUgPSAoc2MtPmFhY19jb21tb24tPmFjX2hvc3RfcnJxW2luZGV4 XSAmIDB4N2ZmZmZmZmYpOworCQkJLyogY2hlY2sgZmFzdCByZXNwb25zZSBiaXQgKDMwKSAqLwor CQkJaWYgKGhhbmRsZSAmIDB4NDAwMDAwMDApIAorCQkJCWlzRmFzdFJlc3BvbnNlID0gMTsKKwkJ CS8qIGNoZWNrIEFJRiBiaXQgKDIzKSAqLworCQkJZWxzZSBpZiAoaGFuZGxlICYgMHgwMDgwMDAw MCkgCisJCQkJaXNBaWYgPSBUUlVFOworCQkJaGFuZGxlICY9IDB4MDAwMGZmZmY7CisJCQlpZiAo aGFuZGxlID09IDApIAorCQkJCWJyZWFrOworCisJCQljbSA9IHNjLT5hYWNfY29tbWFuZHMgKyAo aGFuZGxlIC0gMSk7CisJCQlmaWIgPSBjbS0+Y21fZmliOworCQkJaWYgKGlzQWlmKSB7CisJCQkJ bm9Nb3JlQWlmID0gKGZpYi0+SGVhZGVyLlhmZXJTdGF0ZSAmIEFBQ19GSUJTVEFURV9OT01PUkVB SUYpID8gMTowOworCQkJCWlmICghbm9Nb3JlQWlmKSAKKwkJCQkJYWFjX2hhbmRsZV9haWYoc2Ms IGZpYik7CisJCQkJYWFjX3JlbW92ZV9idXN5KGNtKTsKKwkJCQlhYWNfcmVsZWFzZV9jb21tYW5k KGNtKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGlzRmFzdFJlc3BvbnNlKSB7CisJCQkJCWZpYi0+ SGVhZGVyLlhmZXJTdGF0ZSB8PSBBQUNfRklCU1RBVEVfRE9ORUFEQVA7CisJCQkJCSooKHVfaW50 MzJfdCAqKShmaWItPmRhdGEpKSA9IEFBQ19FUlJPUl9OT1JNQUw7CisJCQkJfQorCQkJCWFhY19y ZW1vdmVfYnVzeShjbSk7CisJCQkJYWFjX3VubWFwX2NvbW1hbmQoY20pOworCQkJCWNtLT5jbV9m bGFncyB8PSBBQUNfQ01EX0NPTVBMRVRFRDsKKworCQkJCS8qIGlzIHRoZXJlIGEgY29tcGxldGlv biBoYW5kbGVyPyAqLworCQkJCWlmIChjbS0+Y21fY29tcGxldGUgIT0gTlVMTCkgeworCQkJCQlj bS0+Y21fY29tcGxldGUoY20pOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGFzc3VtZSB0aGF0IHNv bWVvbmUgaXMgc2xlZXBpbmcgb24gdGhpcyBjb21tYW5kICovCisJCQkJCXdha2V1cChjbSk7CisJ CQkJfQorCQkJCXNjLT5mbGFncyAmPSB+QUFDX1FVRVVFX0ZSWk47CisJCQl9CisKKwkJCXNjLT5h YWNfY29tbW9uLT5hY19ob3N0X3JycVtpbmRleCsrXSA9IDA7CisJCQlpZiAoaW5kZXggPT0gc2Mt PmFhY19tYXhfZmlicykgCisJCQkJaW5kZXggPSAwOworCQkJc2MtPmFhY19ob3N0X3JycV9pZHgg PSBpbmRleDsKKworCQkJaWYgKChpc0FpZiAmJiAhbm9Nb3JlQWlmKSB8fCBzYy0+YWlmX3BlbmRp bmcpIAorCQkJCWFhY19yZXF1ZXN0X2FpZihzYyk7CisJCX0KKwl9IGVsc2UgeworCQliZWxsYml0 c19zaGlmdGVkID0gKGJlbGxiaXRzID4+IEFBQ19TUkNfT0RSX1NISUZUKTsKKwkJaWYgKGJlbGxi aXRzX3NoaWZ0ZWQgJiBBQUNfREJfQUlGX1BFTkRJTkcpIHsKKwkJCW91cl9pbnRlcnJ1cHQgPSAx OworCQkJLyogaGFuZGxlIEFJRiAqLworCQkJYWFjX3JlcXVlc3RfYWlmKHNjKTsKKwkJfQorICAg IH0KKwlpZiAob3VyX2ludGVycnVwdCkgCisJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNf T0RCUl9DLCBiZWxsYml0cyk7CisKKwkvKiBzZWUgaWYgd2UgY2FuIHN0YXJ0IHNvbWUgbW9yZSBJ L08gKi8KKwlpZiAoKHNjLT5mbGFncyAmIEFBQ19RVUVVRV9GUlpOKSA9PSAwKQorCQlhYWNfc3Rh cnRpbyhzYyk7CisJbXR4X3VubG9jaygmc2MtPmFhY19pb19sb2NrKTsKK30KKworLyoKICAqIElu dGVycnVwdCBoYW5kbGVyIGZvciBORVdfQ09NTSBpbnRlcmZhY2UuCiAgKi8KIHZvaWQKQEAgLTk0 NSw2ICsxMDg2LDggQEAgYWFjX3N0YXJ0aW8oc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJZndwcmlu dGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwogCiAJZm9yICg7Oykg eworCQlpZiAoc2MtPmFhY19zdGF0ZSAmIEFBQ19TVEFURV9SRVNFVCkKKwkJCWJyZWFrOwogCQkv KgogCQkgKiBUaGlzIGZsYWcgbWlnaHQgYmUgc2V0IGlmIHRoZSBjYXJkIGlzIG91dCBvZiByZXNv dXJjZXMuCiAJCSAqIENoZWNraW5nIGl0IGhlcmUgcHJldmVudHMgYW4gaW5maW5pdGUgbG9vcCBv ZiBkZWZlcnJhbHMuCkBAIC0xMTkwLDYgKzEzMzMsMTYgQEAgYWFjX2Jpb19jb21tYW5kKHN0cnVj dCBhYWNfc29mdGMgKnNjLCBzdAogCWlmICgoYnAgPSBhYWNfZGVxdWV1ZV9iaW8oc2MpKSA9PSBO VUxMKQogCQlnb3RvIGZhaWw7CiAKKwlhZCA9IChzdHJ1Y3QgYWFjX2Rpc2sgKilicC0+YmlvX2Rp c2stPmRfZHJ2MTsKKwkvKiBjb250YWluZXIgc3RpbGwgdmFsaWQ/ICovCisJaWYgKGFkLT5hZF9j b250YWluZXIgPT0gTlVMTCkgeworCQlicC0+YmlvX2ZsYWdzIHw9IEJJT19FUlJPUjsKKwkJYnAt PmJpb19lcnJvciA9IEVJTlZBTDsKKwkJYmlvZG9uZShicCk7CisJCWJwID0gTlVMTDsKKwkJZ290 byBmYWlsOworCX0KKwogCS8qIGZpbGwgb3V0IHRoZSBjb21tYW5kICovCiAJY20tPmNtX2RhdGEg PSAodm9pZCAqKWJwLT5iaW9fZGF0YTsKIAljbS0+Y21fZGF0YWxlbiA9IGJwLT5iaW9fYmNvdW50 OwpAQCAtMTIxMSw4ICsxMzY0LDYgQEAgYWFjX2Jpb19jb21tYW5kKHN0cnVjdCBhYWNfc29mdGMg KnNjLCBzdAogCQlBQUNfRklCU1RBVEVfRkFTVF9SRVNQT05TRTsKIAogCS8qIGJ1aWxkIHRoZSBy ZWFkL3dyaXRlIHJlcXVlc3QgKi8KLQlhZCA9IChzdHJ1Y3QgYWFjX2Rpc2sgKilicC0+YmlvX2Rp c2stPmRfZHJ2MTsKLQogCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfUkFXX0lPKSB7CiAJCXN0 cnVjdCBhYWNfcmF3X2lvICpyYXc7CiAJCXJhdyA9IChzdHJ1Y3QgYWFjX3Jhd19pbyAqKSZmaWIt PmRhdGFbMF07CkBAIC0xMzA4LDcgKzE0NTksOSBAQCBhYWNfYmlvX2NvbXBsZXRlKHN0cnVjdCBh YWNfY29tbWFuZCAqY20pCiAKIAkvKiBmZXRjaCByZWxldmFudCBzdGF0dXMgYW5kIHRoZW4gcmVs ZWFzZSB0aGUgY29tbWFuZCAqLwogCWJwID0gKHN0cnVjdCBiaW8gKiljbS0+Y21fcHJpdmF0ZTsK LQlpZiAoYnAtPmJpb19jbWQgPT0gQklPX1JFQUQpIHsKKwlpZiAoY20tPmNtX2ZsYWdzICYgQUFD X0NNRF9SRVNFVCkgeworCQlzdGF0dXMgPSBTVF9CVVNfUkVTRVQ7CisJfSBlbHNlIGlmIChicC0+ YmlvX2NtZCA9PSBCSU9fUkVBRCkgewogCQlicnIgPSAoc3RydWN0IGFhY19ibG9ja3JlYWRfcmVz cG9uc2UgKikmY20tPmNtX2ZpYi0+ZGF0YVswXTsKIAkJc3RhdHVzID0gYnJyLT5TdGF0dXM7CiAJ fSBlbHNlIHsKQEAgLTEzMjEsNyArMTQ3NCw3IEBAIGFhY19iaW9fY29tcGxldGUoc3RydWN0IGFh Y19jb21tYW5kICpjbSkKIAlpZiAoc3RhdHVzID09IFNUX09LKSB7CiAJCWJwLT5iaW9fcmVzaWQg PSAwOwogCX0gZWxzZSB7Ci0JCWJwLT5iaW9fZXJyb3IgPSBFSU87CisJCWJwLT5iaW9fZXJyb3Ig PSAoc3RhdHVzID09IFNUX05PVF9SRUFEWSA/IEVCVVNZIDogRUlPKTsKIAkJYnAtPmJpb19mbGFn cyB8PSBCSU9fRVJST1I7CiAJCS8qIHBhc3MgYW4gZXJyb3Igc3RyaW5nIG91dCB0byB0aGUgZGlz ayBsYXllciAqLwogCQlicC0+YmlvX2RyaXZlcjEgPSBhYWNfZGVzY3JpYmVfY29kZShhYWNfY29t bWFuZF9zdGF0dXNfdGFibGUsCkBAIC0xNDAwLDYgKzE1NTMsNyBAQCBhYWNfcmVsZWFzZV9jb21t YW5kKHN0cnVjdCBhYWNfY29tbWFuZCAqCiAJY20tPmNtX2NvbXBsZXRlID0gTlVMTDsKIAljbS0+ Y21fcHJpdmF0ZSA9IE5VTEw7CiAJY20tPmNtX3F1ZXVlID0gQUFDX0FEQVBfTk9STV9DTURfUVVF VUU7CisJY20tPmNtX3Bhc3N0aHJfZG1hdCA9IDA7CiAJY20tPmNtX2ZpYi0+SGVhZGVyLlhmZXJT dGF0ZSA9IEFBQ19GSUJTVEFURV9FTVBUWTsKIAljbS0+Y21fZmliLT5IZWFkZXIuU3RydWN0VHlw ZSA9IEFBQ19GSUJUWVBFX1RGSUI7CiAJY20tPmNtX2ZpYi0+SGVhZGVyLkZsYWdzID0gMDsKQEAg LTE0NDgsNiArMTYwMiw3IEBAIGFhY19hbGxvY19jb21tYW5kcyhzdHJ1Y3QgYWFjX3NvZnRjICpz YykKIAlzdHJ1Y3QgYWFjX2ZpYm1hcCAqZm07CiAJdWludDY0X3QgZmlicGh5czsKIAlpbnQgaSwg ZXJyb3I7CisJdV9pbnQzMl90IG1heHNpemU7CiAKIAlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RC R19GVU5DVElPTl9FTlRSWV9CLCAiIik7CiAKQEAgLTE0NjcsMjcgKzE2MjIsNDAgQEAgYWFjX2Fs bG9jX2NvbW1hbmRzKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCQlyZXR1cm4gKEVOT01FTSk7CiAJ fQogCisJbWF4c2l6ZSA9IHNjLT5hYWNfbWF4X2ZpYl9zaXplOworCWlmIChzYy0+ZmxhZ3MgJiBB QUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIAorCQltYXhzaXplICs9IHNpemVvZihzdHJ1Y3QgYWFj X2ZpYl94cG9ydGhkcikgKyAzMTsKKwogCS8qIElnbm9yZSBlcnJvcnMgc2luY2UgdGhpcyBkb2Vz bid0IGJvdW5jZSAqLwogCSh2b2lkKWJ1c19kbWFtYXBfbG9hZChzYy0+YWFjX2ZpYl9kbWF0LCBm bS0+YWFjX2ZpYm1hcCwgZm0tPmFhY19maWJzLAotCQkJICAgICAgc2MtPmFhY19tYXhfZmlic19h bGxvYyAqIHNjLT5hYWNfbWF4X2ZpYl9zaXplLAorCQkJICAgICAgc2MtPmFhY19tYXhfZmlic19h bGxvYyAqIG1heHNpemUsCiAJCQkgICAgICBhYWNfbWFwX2NvbW1hbmRfaGVscGVyLCAmZmlicGh5 cywgMCk7CiAKIAkvKiBpbml0aWFsaXplIGNvbnN0YW50IGZpZWxkcyBpbiB0aGUgY29tbWFuZCBz dHJ1Y3R1cmUgKi8KLQliemVybyhmbS0+YWFjX2ZpYnMsIHNjLT5hYWNfbWF4X2ZpYnNfYWxsb2Mg KiBzYy0+YWFjX21heF9maWJfc2l6ZSk7CisJYnplcm8oZm0tPmFhY19maWJzLCBzYy0+YWFjX21h eF9maWJzX2FsbG9jICogbWF4c2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNjLT5hYWNfbWF4X2Zp YnNfYWxsb2M7IGkrKykgewogCQljbSA9IHNjLT5hYWNfY29tbWFuZHMgKyBzYy0+dG90YWxfZmli czsKIAkJZm0tPmFhY19jb21tYW5kcyA9IGNtOwogCQljbS0+Y21fc2MgPSBzYzsKIAkJY20tPmNt X2ZpYiA9IChzdHJ1Y3QgYWFjX2ZpYiAqKQotCQkJKCh1X2ludDhfdCAqKWZtLT5hYWNfZmlicyAr IGkqc2MtPmFhY19tYXhfZmliX3NpemUpOwotCQljbS0+Y21fZmlicGh5cyA9IGZpYnBoeXMgKyBp KnNjLT5hYWNfbWF4X2ZpYl9zaXplOworCQkJKCh1X2ludDhfdCAqKWZtLT5hYWNfZmlicyArIGkg KiBtYXhzaXplKTsKKwkJY20tPmNtX2ZpYnBoeXMgPSBmaWJwaHlzICsgaSAqIG1heHNpemU7CisJ CWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIHsKKwkJCXVfaW50NjRf dCBmaWJwaHlzX2FsaWduZWQ7CisJCQlmaWJwaHlzX2FsaWduZWQgPSAKKwkJCQkoY20tPmNtX2Zp YnBoeXMgKyBzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsgMzEpICYgfjMxOworCQkJ Y20tPmNtX2ZpYiA9IChzdHJ1Y3QgYWFjX2ZpYiAqKQorCQkJCSgodV9pbnQ4X3QgKiljbS0+Y21f ZmliICsgKGZpYnBoeXNfYWxpZ25lZCAtIGNtLT5jbV9maWJwaHlzKSk7CisJCQljbS0+Y21fZmli cGh5cyA9IGZpYnBoeXNfYWxpZ25lZDsKKwkJfQogCQljbS0+Y21faW5kZXggPSBzYy0+dG90YWxf ZmliczsKIAogCQlpZiAoKGVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmFhY19idWZmZXJf ZG1hdCwgMCwKIAkJCQkJICAgICAgICZjbS0+Y21fZGF0YW1hcCkpICE9IDApCiAJCQlicmVhazsK IAkJbXR4X2xvY2soJnNjLT5hYWNfaW9fbG9jayk7Ci0JCWFhY19yZWxlYXNlX2NvbW1hbmQoY20p OworCQlpZiAoc2MtPmFhY19tYXhfZmlicyA8PSAxIHx8IHNjLT5hYWNfbWF4X2ZpYnMgLSBzYy0+ dG90YWxfZmlicyA+IDEpCisJCQlhYWNfcmVsZWFzZV9jb21tYW5kKGNtKTsKIAkJc2MtPnRvdGFs X2ZpYnMrKzsKIAkJbXR4X3VubG9jaygmc2MtPmFhY19pb19sb2NrKTsKIAl9CkBAIC0xNTk4LDE0 ICsxNzY2LDE3IEBAIGFhY19tYXBfY29tbWFuZF9zZyh2b2lkICphcmcsIGJ1c19kbWFfc2UKIAlj bS0+Y21fZmliLT5IZWFkZXIuUmVjZWl2ZXJGaWJBZGRyZXNzID0gKHVfaW50MzJfdCljbS0+Y21f ZmlicGh5czsKIAogCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGZvciBzcGVlZHkg cmV2ZXJzZS1sb29rdXAgKi8KLQljbS0+Y21fZmliLT5IZWFkZXIuU2VuZGVyRGF0YSA9IGNtLT5j bV9pbmRleDsKKwljbS0+Y21fZmliLT5IZWFkZXIuU2VuZGVyRGF0YSArPSBjbS0+Y21faW5kZXg7 CisKKwlpZiAoY20tPmNtX3Bhc3N0aHJfZG1hdCA9PSAwKSB7CisJCWlmIChjbS0+Y21fZmxhZ3Mg JiBBQUNfQ01EX0RBVEFJTikKKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+YWFjX2J1ZmZlcl9kbWF0 LCBjbS0+Y21fZGF0YW1hcCwKKwkJCQkJCQlCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKwkJaWYgKGNt LT5jbV9mbGFncyAmIEFBQ19DTURfREFUQU9VVCkKKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+YWFj X2J1ZmZlcl9kbWF0LCBjbS0+Y21fZGF0YW1hcCwKKwkJCQkJCQlCVVNfRE1BU1lOQ19QUkVXUklU RSk7CisJfQogCi0JaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfREFUQUlOKQotCQlidXNfZG1h bWFwX3N5bmMoc2MtPmFhY19idWZmZXJfZG1hdCwgY20tPmNtX2RhdGFtYXAsCi0JCQkJQlVTX0RN QVNZTkNfUFJFUkVBRCk7Ci0JaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfREFUQU9VVCkKLQkJ YnVzX2RtYW1hcF9zeW5jKHNjLT5hYWNfYnVmZmVyX2RtYXQsIGNtLT5jbV9kYXRhbWFwLAotCQkJ CUJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9NQVBQRUQ7 CiAKIAlpZiAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19DT01NKSB7CkBAIC0xNjQ0LDcgKzE4 MTUsNyBAQCBhYWNfdW5tYXBfY29tbWFuZChzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNtCiAJaWYgKCEo Y20tPmNtX2ZsYWdzICYgQUFDX0NNRF9NQVBQRUQpKQogCQlyZXR1cm47CiAKLQlpZiAoY20tPmNt X2RhdGFsZW4gIT0gMCkgeworCWlmIChjbS0+Y21fZGF0YWxlbiAhPSAwICYmIGNtLT5jbV9wYXNz dGhyX2RtYXQgPT0gMCkgewogCQlpZiAoY20tPmNtX2ZsYWdzICYgQUFDX0NNRF9EQVRBSU4pCiAJ CQlidXNfZG1hbWFwX3N5bmMoc2MtPmFhY19idWZmZXJfZG1hdCwgY20tPmNtX2RhdGFtYXAsCiAJ CQkJCUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKQEAgLTE2NzgsNyArMTg0OSw4IEBAIGFhY19jb21t b25fbWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW4KIHN0YXRpYyBpbnQKIGFhY19jaGVja19m aXJtd2FyZShzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIHsKLQl1X2ludDMyX3QgY29kZSwgbWFqb3Is IG1pbm9yLCBvcHRpb25zID0gMCwgYXR1X3NpemUgPSAwOworCXVfaW50MzJfdCBjb2RlLCBtYWpv ciwgbWlub3IsIG1heHNpemU7CisJdV9pbnQzMl90IG9wdGlvbnMgPSAwLCBhdHVfc2l6ZSA9IDA7 CiAJaW50IHN0YXR1czsKIAl0aW1lX3QgdGhlbjsKIApAQCAtMTcxMiw3ICsxODg0LDcgQEAgYWFj X2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCSAqLwogCWlmIChzYy0+Zmxh Z3MgJiBBQUNfRkxBR1NfUEVSQzJRQykgewogCQlpZiAoYWFjX3N5bmNfY29tbWFuZChzYywgQUFD X01PTktFUl9HRVRLRVJOVkVSLCAwLCAwLCAwLCAwLAotCQkJCSAgICAgTlVMTCkpIHsKKwkJCQkg ICAgIE5VTEwsIE5VTEwpKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LAogCQkJCSAg ICAgICJFcnJvciByZWFkaW5nIGZpcm13YXJlIHZlcnNpb25cbiIpOwogCQkJcmV0dXJuIChFSU8p OwpAQCAtMTcyOCwxMyArMTkwMCwxMiBAQCBhYWNfY2hlY2tfZmlybXdhcmUoc3RydWN0IGFhY19z b2Z0YyAqc2MpCiAJCQlyZXR1cm4gKEVJTlZBTCk7CiAJCX0KIAl9Ci0KIAkvKgogCSAqIFJldHJp ZXZlIHRoZSBjYXBhYmlsaXRpZXMvc3VwcG9ydGVkIG9wdGlvbnMgd29yZCBzbyB3ZSBrbm93IHdo YXQKIAkgKiB3b3JrLWFyb3VuZHMgdG8gZW5hYmxlLiAgU29tZSBmaXJtd2FyZSByZXZzIGRvbid0 IHN1cHBvcnQgdGhpcwogCSAqIGNvbW1hbmQuCiAJICovCi0JaWYgKGFhY19zeW5jX2NvbW1hbmQo c2MsIEFBQ19NT05LRVJfR0VUSU5GTywgMCwgMCwgMCwgMCwgJnN0YXR1cykpIHsKKwlpZiAoYWFj X3N5bmNfY29tbWFuZChzYywgQUFDX01PTktFUl9HRVRJTkZPLCAwLCAwLCAwLCAwLCAmc3RhdHVz LCBOVUxMKSkgewogCQlpZiAoc3RhdHVzICE9IEFBQ19TUkJfU1RTX0lOVkFMSURfUkVRVUVTVCkg ewogCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwKIAkJCSAgICAgIlJlcXVlc3RBZGFwdGVy SW5mbyBmYWlsZWRcbiIpOwpAQCAtMTc1MSwxNCArMTkyMiwxOCBAQCBhYWNfY2hlY2tfZmlybXdh cmUoc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJCWlmIChvcHRpb25zICYgQUFDX1NVUFBPUlRFRF9O T05EQVNEKQogCQkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19FTkFCTEVfQ0FNOwogCQlpZiAoKG9w dGlvbnMgJiBBQUNfU1VQUE9SVEVEX1NHTUFQX0hPU1Q2NCkgIT0gMAotCQkgICAgICYmIChzaXpl b2YoYnVzX2FkZHJfdCkgPiA0KSkgeworCQkJJiYgKHNpemVvZihidXNfYWRkcl90KSA+IDQpCisJ CQkmJiAoc2MtPmhpbnRfZmxhZ3MgJiAweDEpKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNf ZGV2LAogCQkJICAgICJFbmFibGluZyA2NC1iaXQgYWRkcmVzcyBzdXBwb3J0XG4iKTsKIAkJCXNj LT5mbGFncyB8PSBBQUNfRkxBR1NfU0dfNjRCSVQ7CiAJCX0KLQkJaWYgKChvcHRpb25zICYgQUFD X1NVUFBPUlRFRF9ORVdfQ09NTSkKLQkJICYmIHNjLT5hYWNfaWYuYWlmX3NlbmRfY29tbWFuZCkK LQkJCXNjLT5mbGFncyB8PSBBQUNfRkxBR1NfTkVXX0NPTU07CisJCWlmIChzYy0+YWFjX2lmLmFp Zl9zZW5kX2NvbW1hbmQpIHsKKwkJCWlmIChvcHRpb25zICYgQUFDX1NVUFBPUlRFRF9ORVdfQ09N TV9UWVBFMSkKKwkJCQlzYy0+ZmxhZ3MgfD0gQUFDX0ZMQUdTX05FV19DT01NIHwgQUFDX0ZMQUdT X05FV19DT01NX1RZUEUxOworCQkJZWxzZSBpZiAob3B0aW9ucyAmIEFBQ19TVVBQT1JURURfTkVX X0NPTU0pCisJCQkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19ORVdfQ09NTTsKKwkJfQogCQlpZiAo b3B0aW9ucyAmIEFBQ19TVVBQT1JURURfNjRCSVRfQVJSQVlTSVpFKQogCQkJc2MtPmZsYWdzIHw9 IEFBQ19GTEFHU19BUlJBWV82NEJJVDsKIAl9CkBAIC0xNzY3LDM5ICsxOTQyLDcxIEBAIGFhY19j aGVja19maXJtd2FyZShzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAlzYy0+YWFjX21heF9maWJzID0g KHNjLT5mbGFncyAmIEFBQ19GTEFHU18yNTZGSUJTID8gMjU2OjUxMik7CiAKIAkvKiBSZW1hcCBt ZW0uIHJlc291cmNlLCBpZiByZXF1aXJlZCAqLwotCWlmICgoc2MtPmZsYWdzICYgQUFDX0ZMQUdT X05FV19DT01NKSAmJgotCQlhdHVfc2l6ZSA+IHJtYW5fZ2V0X3NpemUoc2MtPmFhY19yZWdzX3Jl czEpKSB7Ci0JCWJ1c19yZWxlYXNlX3Jlc291cmNlKAotCQkJc2MtPmFhY19kZXYsIFNZU19SRVNf TUVNT1JZLAotCQkJc2MtPmFhY19yZWdzX3JpZDEsIHNjLT5hYWNfcmVnc19yZXMxKTsKLQkJc2Mt PmFhY19yZWdzX3JlczEgPSBidXNfYWxsb2NfcmVzb3VyY2UoCi0JCQlzYy0+YWFjX2RldiwgU1lT X1JFU19NRU1PUlksICZzYy0+YWFjX3JlZ3NfcmlkMSwKLQkJCTB1bCwgfjB1bCwgYXR1X3NpemUs IFJGX0FDVElWRSk7Ci0JCWlmIChzYy0+YWFjX3JlZ3NfcmVzMSA9PSBOVUxMKSB7Ci0JCQlzYy0+ YWFjX3JlZ3NfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoCisJaWYgKHNjLT5hYWNfaHdp ZiA9PSBBQUNfSFdJRl9OQVJLKSB7CisJCWlmICgoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19D T01NKSAmJgorCQkJYXR1X3NpemUgPiBybWFuX2dldF9zaXplKHNjLT5hYWNfcmVnc19yZXMxKSkg eworCQkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoCiAJCQkJc2MtPmFhY19kZXYsIFNZU19SRVNfTUVN T1JZLAotCQkJCSZzYy0+YWFjX3JlZ3NfcmlkMSwgUkZfQUNUSVZFKTsKKwkJCQlzYy0+YWFjX3Jl Z3NfcmlkMSwgc2MtPmFhY19yZWdzX3JlczEpOworCQkJc2MtPmFhY19yZWdzX3JlczEgPSBidXNf YWxsb2NfcmVzb3VyY2UoCisJCQkJc2MtPmFhY19kZXYsIFNZU19SRVNfTUVNT1JZLCAmc2MtPmFh Y19yZWdzX3JpZDEsCisJCQkJMHVsLCB+MHVsLCBhdHVfc2l6ZSwgUkZfQUNUSVZFKTsKIAkJCWlm IChzYy0+YWFjX3JlZ3NfcmVzMSA9PSBOVUxMKSB7Ci0JCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFj X2RldiwKLQkJCQkgICAgImNvdWxkbid0IGFsbG9jYXRlIHJlZ2lzdGVyIHdpbmRvd1xuIik7Ci0J CQkJcmV0dXJuIChFTlhJTyk7CisJCQkJc2MtPmFhY19yZWdzX3JlczEgPSBidXNfYWxsb2NfcmVz b3VyY2VfYW55KAorCQkJCQlzYy0+YWFjX2RldiwgU1lTX1JFU19NRU1PUlksCisJCQkJCSZzYy0+ YWFjX3JlZ3NfcmlkMSwgUkZfQUNUSVZFKTsKKwkJCQlpZiAoc2MtPmFhY19yZWdzX3JlczEgPT0g TlVMTCkgeworCQkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LAorCQkJCQkJImNvdWxkbid0 IGFsbG9jYXRlIHJlZ2lzdGVyIHdpbmRvd1xuIik7CisJCQkJCXJldHVybiAoRU5YSU8pOworCQkJ CX0KKwkJCQlzYy0+ZmxhZ3MgJj0gfkFBQ19GTEFHU19ORVdfQ09NTTsKIAkJCX0KLQkJCXNjLT5m bGFncyAmPSB+QUFDX0ZMQUdTX05FV19DT01NOworCQkJc2MtPmFhY19idGFnMSA9IHJtYW5fZ2V0 X2J1c3RhZyhzYy0+YWFjX3JlZ3NfcmVzMSk7CisJCQlzYy0+YWFjX2JoYW5kbGUxID0gcm1hbl9n ZXRfYnVzaGFuZGxlKHNjLT5hYWNfcmVnc19yZXMxKTsKIAkJfQotCQlzYy0+YWFjX2J0YWcxID0g cm1hbl9nZXRfYnVzdGFnKHNjLT5hYWNfcmVnc19yZXMxKTsKLQkJc2MtPmFhY19iaGFuZGxlMSA9 IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+YWFjX3JlZ3NfcmVzMSk7Ci0KLQkJaWYgKHNjLT5hYWNf aHdpZiA9PSBBQUNfSFdJRl9OQVJLKSB7Ci0JCQlzYy0+YWFjX3JlZ3NfcmVzMCA9IHNjLT5hYWNf cmVnc19yZXMxOwotCQkJc2MtPmFhY19yZWdzX3JpZDAgPSBzYy0+YWFjX3JlZ3NfcmlkMTsKLQkJ CXNjLT5hYWNfYnRhZzAgPSBzYy0+YWFjX2J0YWcxOwotCQkJc2MtPmFhY19iaGFuZGxlMCA9IHNj LT5hYWNfYmhhbmRsZTE7CisJfSBlbHNlIHsKKwkJaWYgKChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1Nf TkVXX0NPTU0pICYmCisJCQlhdHVfc2l6ZSA+IHJtYW5fZ2V0X3NpemUoc2MtPmFhY19yZWdzX3Jl czApKSB7CisJCQlidXNfcmVsZWFzZV9yZXNvdXJjZSgKKwkJCQlzYy0+YWFjX2RldiwgU1lTX1JF U19NRU1PUlksCisJCQkJc2MtPmFhY19yZWdzX3JpZDAsIHNjLT5hYWNfcmVnc19yZXMwKTsKKwkJ CXNjLT5hYWNfcmVnc19yZXMwID0gYnVzX2FsbG9jX3Jlc291cmNlKAorCQkJCXNjLT5hYWNfZGV2 LCBTWVNfUkVTX01FTU9SWSwgJnNjLT5hYWNfcmVnc19yaWQwLAorCQkJCTB1bCwgfjB1bCwgYXR1 X3NpemUsIFJGX0FDVElWRSk7CisJCQlpZiAoc2MtPmFhY19yZWdzX3JlczAgPT0gTlVMTCkgewor CQkJCXNjLT5hYWNfcmVnc19yZXMwID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueSgKKwkJCQkJc2Mt PmFhY19kZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCQkmc2MtPmFhY19yZWdzX3JpZDAsIFJGX0FD VElWRSk7CisJCQkJaWYgKHNjLT5hYWNfcmVnc19yZXMwID09IE5VTEwpIHsKKwkJCQkJZGV2aWNl X3ByaW50ZihzYy0+YWFjX2RldiwKKwkJCQkJCSJjb3VsZG4ndCBhbGxvY2F0ZSByZWdpc3RlciB3 aW5kb3dcbiIpOworCQkJCQlyZXR1cm4gKEVOWElPKTsKKwkJCQl9CisJCQkJc2MtPmZsYWdzICY9 IH5BQUNfRkxBR1NfTkVXX0NPTU07CisJCQl9CisJCQlzYy0+YWFjX2J0YWcwID0gcm1hbl9nZXRf YnVzdGFnKHNjLT5hYWNfcmVnc19yZXMwKTsKKwkJCXNjLT5hYWNfYmhhbmRsZTAgPSBybWFuX2dl dF9idXNoYW5kbGUoc2MtPmFhY19yZWdzX3JlczApOworCQl9CisJCWlmIChzYy0+YWFjX2h3aWYg IT0gQUFDX0hXSUZfU1JDKSB7CisJCQlzYy0+YWFjX3JlZ3NfcmVzMSA9IHNjLT5hYWNfcmVnc19y ZXMwOworCQkJc2MtPmFhY19yZWdzX3JpZDEgPSBzYy0+YWFjX3JlZ3NfcmlkMDsKKwkJCXNjLT5h YWNfYnRhZzEgPSBzYy0+YWFjX2J0YWcwOworCQkJc2MtPmFhY19iaGFuZGxlMSA9IHNjLT5hYWNf YmhhbmRsZTA7CiAJCX0KIAl9CiAKKwlpZiAoc2MtPmFhY19od2lmID09IEFBQ19IV0lGX1NSQyAm JiAKKwkJIShzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpKSB7CisJCWRldmlj ZV9wcmludGYoc2MtPmFhY19kZXYsCisJCQkiaW52YWxpZCBjb21tYW5kIGludGVyZmFjZSBmb3Ig dGhhdCBjb250cm9sbGVyIGZhbWlseSFcbiIpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCiAJ LyogUmVhZCBwcmVmZXJyZWQgc2V0dGluZ3MgKi8KIAlzYy0+YWFjX21heF9maWJfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgYWFjX2ZpYik7CiAJc2MtPmFhY19tYXhfc2VjdG9ycyA9IDEyODsJCQkJLyog NjRLQiAqLworCXNjLT5hYWNfbWF4X2FpZiA9IDE7CiAJaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFH U19TR182NEJJVCkKIAkJc2MtPmFhY19zZ190YWJsZXNpemUgPSAoQUFDX0ZJQl9EQVRBU0laRQog CQkgLSBzaXplb2Yoc3RydWN0IGFhY19ibG9ja3dyaXRlNjQpKQpAQCAtMTgwOSw3ICsyMDE2LDcg QEAgYWFjX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCQkgLSBzaXplb2Yo c3RydWN0IGFhY19ibG9ja3dyaXRlKSkKIAkJIC8gc2l6ZW9mKHN0cnVjdCBhYWNfc2dfZW50cnkp OwogCi0JaWYgKCFhYWNfc3luY19jb21tYW5kKHNjLCBBQUNfTU9OS0VSX0dFVENPTU1QUkVGLCAw LCAwLCAwLCAwLCBOVUxMKSkgeworCWlmICghYWFjX3N5bmNfY29tbWFuZChzYywgQUFDX01PTktF Ul9HRVRDT01NUFJFRiwgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCkpIHsKIAkJb3B0aW9ucyA9IEFB Q19HRVRfTUFJTEJPWChzYywgMSk7CiAJCXNjLT5hYWNfbWF4X2ZpYl9zaXplID0gKG9wdGlvbnMg JiAweEZGRkYpOwogCQlzYy0+YWFjX21heF9zZWN0b3JzID0gKG9wdGlvbnMgPj4gMTYpIDw8IDE7 CkBAIC0xODE3LDEwICsyMDI0LDE4IEBAIGFhY19jaGVja19maXJtd2FyZShzdHJ1Y3QgYWFjX3Nv ZnRjICpzYykKIAkJc2MtPmFhY19zZ190YWJsZXNpemUgPSAob3B0aW9ucyA+PiAxNik7CiAJCW9w dGlvbnMgPSBBQUNfR0VUX01BSUxCT1goc2MsIDMpOwogCQlzYy0+YWFjX21heF9maWJzID0gKG9w dGlvbnMgJiAweEZGRkYpOworCQlvcHRpb25zID0gQUFDX0dFVF9NQUlMQk9YKHNjLCA0KTsKKwkJ c2MtPmFhY19tYXhfYWlmID0gKG9wdGlvbnMgJiAweEZGRkYpOworCX0KKworCW1heHNpemUgPSBz Yy0+YWFjX21heF9maWJfc2l6ZTsKKwlpZiAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19DT01N X1RZUEUxKSAKKwkJbWF4c2l6ZSArPSBzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsg MzE7CisJaWYgKG1heHNpemUgPiBQQUdFX1NJWkUpIHsKKyAgICAJc2MtPmFhY19tYXhfZmliX3Np emUgLT0gKG1heHNpemUgLSBQQUdFX1NJWkUpOworCQltYXhzaXplID0gUEFHRV9TSVpFOwogCX0K LQlpZiAoc2MtPmFhY19tYXhfZmliX3NpemUgPiBQQUdFX1NJWkUpCi0JCXNjLT5hYWNfbWF4X2Zp Yl9zaXplID0gUEFHRV9TSVpFOwotCXNjLT5hYWNfbWF4X2ZpYnNfYWxsb2MgPSBQQUdFX1NJWkUg LyBzYy0+YWFjX21heF9maWJfc2l6ZTsKKwlzYy0+YWFjX21heF9maWJzX2FsbG9jID0gUEFHRV9T SVpFIC8gbWF4c2l6ZTsKIAogCWlmIChzYy0+YWFjX21heF9maWJfc2l6ZSA+IHNpemVvZihzdHJ1 Y3QgYWFjX2ZpYikpIHsKIAkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19SQVdfSU87CkBAIC0xODgw LDEwICsyMDk1LDI4IEBAIGFhY19pbml0KHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCWlwLT5Ib3N0 RWxhcHNlZFNlY29uZHMgPSB0aW1lX3VwdGltZTsJLyogcmVzZXQgbGF0ZXIgaWYgaW52YWxpZCAq LwogCiAJaXAtPkluaXRGbGFncyA9IDA7Ci0JaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFHU19ORVdf Q09NTSkgeworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIHsKKwkJ aXAtPkluaXRTdHJ1Y3RSZXZpc2lvbiA9IEFBQ19JTklUX1NUUlVDVF9SRVZJU0lPTl82OworCQlp cC0+SW5pdEZsYWdzIHw9IEFBQ19JTklURkxBR1NfTkVXX0NPTU1fVFlQRTFfU1VQUE9SVEVEOwor CQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiTmV3IGNvbW0uIGludGVyZmFjZSB0eXBlMSBl bmFibGVkXG4iKTsKKwl9IGVsc2UgaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFHU19ORVdfQ09NTSkg ewogCQlpcC0+SW5pdEZsYWdzIHw9IEFBQ19JTklURkxBR1NfTkVXX0NPTU1fU1VQUE9SVEVEOwog CQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiTmV3IGNvbW0uIGludGVyZmFjZSBlbmFibGVk XG4iKTsKIAl9CisJaXAtPk1heE51bUFpZiA9IHNjLT5hYWNfbWF4X2FpZjsKKwlpcC0+SG9zdFJS UV9BZGRyTG93ID0gCisJCXNjLT5hYWNfY29tbW9uX2J1c2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qg YWFjX2NvbW1vbiwgYWNfaG9zdF9ycnEpOworCS8qIGFsd2F5cyAzMi1iaXQgYWRkcmVzcyAqLwor CWlwLT5Ib3N0UlJRX0FkZHJIaWdoID0gMDsKKworCS8qIEFEUG1sMTA4NjM6IERpc2FibGUgUG93 ZXIgTWFuYWdlbWVudCBzdXBwb3J0ICovCisJc2MtPmFhY19zdXBwb3J0X29wdDIgJj0gfkFBQ19T VVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVDsKKworCWlmIChzYy0+YWFjX3N1cHBvcnRfb3B0MiAm IEFBQ19TVVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVCkgeworCQlpcC0+SW5pdEZsYWdzIHw9IEFB Q19JTklURkxBR1NfRFJJVkVSX1NVUFBPUlRTX1BNOworCQlpcC0+SW5pdEZsYWdzIHw9IEFBQ19J TklURkxBR1NfRFJJVkVSX1VTRVNfVVRDX1RJTUU7CisJCWRldmljZV9wcmludGYoc2MtPmFhY19k ZXYsICJQb3dlciBNYW5hZ2VtZW50IGVuYWJsZWRcbiIpOworCX0KIAogCWlwLT5NYXhJb0NvbW1h bmRzID0gc2MtPmFhY19tYXhfZmliczsKIAlpcC0+TWF4SW9TaXplID0gc2MtPmFhY19tYXhfc2Vj dG9ycyA8PCA5OwpAQCAtMTk3MCw2ICsyMjAzLDkgQEAgYWFjX2luaXQoc3RydWN0IGFhY19zb2Z0 YyAqc2MpCiAJY2FzZSBBQUNfSFdJRl9SS1Q6CiAJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19S S1RfT0RCUiwgfjApOwogCQlicmVhazsKKwljYXNlIEFBQ19IV0lGX1NSQzoKKwkJQUFDX01FTTBf U0VUUkVHNChzYywgQUFDX1NSQ19PREJSX0MsIH4wKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJ YnJlYWs7CiAJfQpAQCAtMTk4MCw3ICsyMjE2LDcgQEAgYWFjX2luaXQoc3RydWN0IGFhY19zb2Z0 YyAqc2MpCiAJaWYgKGFhY19zeW5jX2NvbW1hbmQoc2MsIEFBQ19NT05LRVJfSU5JVFNUUlVDVCwK IAkJCSAgICAgc2MtPmFhY19jb21tb25fYnVzYWRkciArCiAJCQkgICAgIG9mZnNldG9mKHN0cnVj dCBhYWNfY29tbW9uLCBhY19pbml0KSwgMCwgMCwgMCwKLQkJCSAgICAgTlVMTCkpIHsKKwkJCSAg ICAgTlVMTCwgTlVMTCkpIHsKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwKIAkJCSAgICAg ICJlcnJvciBlc3RhYmxpc2hpbmcgaW5pdCBzdHJ1Y3R1cmVcbiIpOwogCQllcnJvciA9IEVJTzsK QEAgLTIwMDMsNyArMjIzOSwxNCBAQCBhYWNfc2V0dXBfaW50cihzdHJ1Y3QgYWFjX3NvZnRjICpz YykKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwgImNhbid0IGFsbG9jYXRlIGludGVycnVw dFxuIik7CiAJCXJldHVybiAoRUlOVkFMKTsKIAl9Ci0JaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFH U19ORVdfQ09NTSkgeworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEp IHsKKwkJaWYgKGJ1c19zZXR1cF9pbnRyKHNjLT5hYWNfZGV2LCBzYy0+YWFjX2lycSwKKwkJCQkg ICBJTlRSX01QU0FGRXxJTlRSX1RZUEVfQklPLCBOVUxMLCAKKwkJCQkgICBhYWNfbmV3X2ludHJf dHlwZTEsIHNjLCAmc2MtPmFhY19pbnRyKSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2Rl diwgImNhbid0IHNldCB1cCBpbnRlcnJ1cHRcbiIpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9 CisJfSBlbHNlIGlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU0pIHsKIAkJaWYgKGJ1 c19zZXR1cF9pbnRyKHNjLT5hYWNfZGV2LCBzYy0+YWFjX2lycSwKIAkJCQkgICBJTlRSX01QU0FG RXxJTlRSX1RZUEVfQklPLCBOVUxMLCAKIAkJCQkgICBhYWNfbmV3X2ludHIsIHNjLCAmc2MtPmFh Y19pbnRyKSkgewpAQCAtMjAyOSw3ICsyMjcyLDcgQEAgYWFjX3NldHVwX2ludHIoc3RydWN0IGFh Y19zb2Z0YyAqc2MpCiBzdGF0aWMgaW50CiBhYWNfc3luY19jb21tYW5kKHN0cnVjdCBhYWNfc29m dGMgKnNjLCB1X2ludDMyX3QgY29tbWFuZCwKIAkJIHVfaW50MzJfdCBhcmcwLCB1X2ludDMyX3Qg YXJnMSwgdV9pbnQzMl90IGFyZzIsIHVfaW50MzJfdCBhcmczLAotCQkgdV9pbnQzMl90ICpzcCkK KwkJIHVfaW50MzJfdCAqc3AsIHVfaW50MzJfdCAqcjEpCiB7CiAJdGltZV90IHRoZW47CiAJdV9p bnQzMl90IHN0YXR1czsKQEAgLTIwNjIsNiArMjMwNSwxMCBAQCBhYWNfc3luY19jb21tYW5kKHN0 cnVjdCBhYWNfc29mdGMgKnNjLCB1CiAJaWYgKHNwICE9IE5VTEwpCiAJCSpzcCA9IHN0YXR1czsK IAorCS8qIHJldHVybiBwYXJhbWV0ZXIgKi8KKwlpZiAocjEgIT0gTlVMTCkgCisJCSpyMSA9IEFB Q19HRVRfTUFJTEJPWChzYywgMCk7CisKIAlpZiAoc3RhdHVzICE9IEFBQ19TUkJfU1RTX1NVQ0NF U1MpCiAJCXJldHVybiAoLTEpOwogCXJldHVybigwKTsKQEAgLTIwOTcsNyArMjM0NCw3IEBAIGFh Y19zeW5jX2ZpYihzdHJ1Y3QgYWFjX3NvZnRjICpzYywgdV9pbnQKIAkgKiBHaXZlIHRoZSBGSUIg dG8gdGhlIGNvbnRyb2xsZXIsIHdhaXQgZm9yIGEgcmVzcG9uc2UuCiAJICovCiAJaWYgKGFhY19z eW5jX2NvbW1hbmQoc2MsIEFBQ19NT05LRVJfU1lOQ0ZJQiwKLQkJCSAgICAgZmliLT5IZWFkZXIu UmVjZWl2ZXJGaWJBZGRyZXNzLCAwLCAwLCAwLCBOVUxMKSkgeworCQkJICAgICBmaWItPkhlYWRl ci5SZWNlaXZlckZpYkFkZHJlc3MsIDAsIDAsIDAsIE5VTEwsIE5VTEwpKSB7CiAJCWZ3cHJpbnRm KHNjLCBIQkFfRkxBR1NfREJHX0VSUk9SX0IsICJJTyBlcnJvciIpOwogCQlyZXR1cm4oRUlPKTsK IAl9CkBAIC0yMzQ5LDEyICsyNTk2LDExIEBAIGFhY190aW1lb3V0KHN0cnVjdCBhYWNfc29mdGMg KnNjKQogCWRlYWRsaW5lID0gdGltZV91cHRpbWUgLSBBQUNfQ01EX1RJTUVPVVQ7CiAJVEFJTFFf Rk9SRUFDSChjbSwgJnNjLT5hYWNfYnVzeSwgY21fbGluaykgewogCQlpZiAoKGNtLT5jbV90aW1l c3RhbXAgIDwgZGVhZGxpbmUpCi0JCSAgICAmJiAhKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfVElN RURPVVQpKSB7CisJCQkvKiAmJiAhKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfVElNRURPVVQpICov KSB7CiAJCQljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9USU1FRE9VVDsKIAkJCWRldmljZV9wcmlu dGYoc2MtPmFhY19kZXYsCi0JCQkgICAgIkNPTU1BTkQgJXAgKFRZUEUgJWQpIFRJTUVPVVQgQUZU RVIgJWQgU0VDT05EU1xuIiwKLQkJCSAgICBjbSwgY20tPmNtX2ZpYi0+SGVhZGVyLkNvbW1hbmQs Ci0JCQkgICAgKGludCkodGltZV91cHRpbWUtY20tPmNtX3RpbWVzdGFtcCkpOworCQkJCSAgICAg ICJDT01NQU5EICVwIFRJTUVPVVQgQUZURVIgJWQgU0VDT05EU1xuIiwKKwkJCQkgICAgICBjbSwg KGludCkodGltZV91cHRpbWUtY20tPmNtX3RpbWVzdGFtcCkpOwogCQkJQUFDX1BSSU5UX0ZJQihz YywgY20tPmNtX2ZpYik7CiAJCQl0aW1lZG91dCsrOwogCQl9CkBAIC0yMzY1LDYgKzI2MTEsNyBA QCBhYWNfdGltZW91dChzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAkJaWYgKGNvZGUgIT0gQUFDX1VQ X0FORF9SVU5OSU5HKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiV0FSTklORyEg Q29udHJvbGxlciBpcyBubyAiCiAJCQkJICAgICAgImxvbmdlciBydW5uaW5nISBjb2RlPSAweCV4 XG4iLCBjb2RlKTsKKwkJCWFhY19yZXNldF9hZGFwdGVyKHNjKTsKIAkJfQogCX0KIAlyZXR1cm47 CkBAIC0yMzkwLDggKzI2MzcsNyBAQCBhYWNfcnhfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBhYWNfc29m dGMgKnNjCiB7CiAJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwg IiIpOwogCi0JcmV0dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIHNjLT5mbGFncyAmIEFBQ19GTEFH U19ORVdfQ09NTSA/Ci0JICAgIEFBQ19SWF9PTVIwIDogQUFDX1JYX0ZXU1RBVFVTKSk7CisJcmV0 dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIEFBQ19SWF9PTVIwKSk7CiB9CiAKIHN0YXRpYyBpbnQK QEAgLTIzOTksOCArMjY0NSwxNSBAQCBhYWNfcmt0X2dldF9md3N0YXR1cyhzdHJ1Y3QgYWFjX3Nv ZnRjICpzCiB7CiAJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwg IiIpOwogCi0JcmV0dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIHNjLT5mbGFncyAmIEFBQ19GTEFH U19ORVdfQ09NTSA/Ci0JICAgIEFBQ19SS1RfT01SMCA6IEFBQ19SS1RfRldTVEFUVVMpKTsKKwly ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1JLVF9PTVIwKSk7Cit9CisKK3N0YXRpYyBp bnQKK2FhY19zcmNfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBhYWNfc29mdGMgKnNjKQoreworCWZ3cHJp bnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIiKTsKKworCXJldHVybihB QUNfTUVNMF9HRVRSRUc0KHNjLCBBQUNfU1JDX09NUikpOwogfQogCiAvKgpAQCAtMjQzMSw2ICsy Njg0LDE0IEBAIGFhY19ya3RfcW5vdGlmeShzdHJ1Y3QgYWFjX3NvZnRjICpzYywgaW4KIAlBQUNf TUVNMF9TRVRSRUc0KHNjLCBBQUNfUktUX0lEQlIsIHFiaXQpOwogfQogCitzdGF0aWMgdm9pZAor YWFjX3NyY19xbm90aWZ5KHN0cnVjdCBhYWNfc29mdGMgKnNjLCBpbnQgcWJpdCkKK3sKKwlmd3By aW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwlBQUNfTUVN MF9TRVRSRUc0KHNjLCBBQUNfU1JDX0lEQlIsIHFiaXQgPDwgQUFDX1NSQ19JRFJfU0hJRlQpOwor fQorCiAvKgogICogR2V0IHRoZSBpbnRlcnJ1cHQgcmVhc29uIGJpdHMKICAqLwpAQCAtMjQ1OCw2 ICsyNzE5LDE0IEBAIGFhY19ya3RfZ2V0X2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MKIAly ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1JLVF9PREJSKSk7CiB9CiAKK3N0YXRpYyBp bnQKK2FhY19zcmNfZ2V0X2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MpCit7CisJZndwcmlu dGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOworCisJcmV0dXJuKEFB Q19NRU0wX0dFVFJFRzQoc2MsIEFBQ19TUkNfT0RCUl9SKSA+PiBBQUNfU1JDX09EUl9TSElGVCk7 Cit9CisKIC8qCiAgKiBDbGVhciBzb21lIGludGVycnVwdCByZWFzb24gYml0cwogICovCkBAIC0y NDg1LDYgKzI3NTQsMTQgQEAgYWFjX3JrdF9jbGVhcl9pc3RhdHVzKHN0cnVjdCBhYWNfc29mdGMg KgogCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19SS1RfT0RCUiwgbWFzayk7CiB9CiAKK3N0YXRp YyB2b2lkCithYWNfc3JjX2NsZWFyX2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBt YXNrKQoreworCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIi KTsKKworCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfT0RCUl9DLCBtYXNrIDw8IEFBQ19T UkNfT0RSX1NISUZUKTsKK30KKwogLyoKICAqIFBvcHVsYXRlIHRoZSBtYWlsYm94IGFuZCBzZXQg dGhlIGNvbW1hbmQgd29yZAogICovCkBAIC0yNTI3LDYgKzI4MDQsMTkgQEAgYWFjX3JrdF9zZXRf bWFpbGJveChzdHJ1Y3QgYWFjX3NvZnRjICpzYwogCUFBQ19NRU0xX1NFVFJFRzQoc2MsIEFBQ19S S1RfTUFJTEJPWCArIDE2LCBhcmczKTsKIH0KIAorc3RhdGljIHZvaWQKK2FhY19zcmNfc2V0X21h aWxib3goc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50MzJfdCBjb21tYW5kLCB1X2ludDMyX3Qg YXJnMCwKKwkJICAgIHVfaW50MzJfdCBhcmcxLCB1X2ludDMyX3QgYXJnMiwgdV9pbnQzMl90IGFy ZzMpCit7CisJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIp OworCisJQUFDX01FTTBfU0VUUkVHNChzYywgQUFDX1NSQ19NQUlMQk9YLCBjb21tYW5kKTsKKwlB QUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyA0LCBhcmcwKTsKKwlBQUNfTUVN MF9TRVRSRUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyA4LCBhcmcxKTsKKwlBQUNfTUVNMF9TRVRS RUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyAxMiwgYXJnMik7CisJQUFDX01FTTBfU0VUUkVHNChz YywgQUFDX1NSQ19NQUlMQk9YICsgMTYsIGFyZzMpOworfQorCiAvKgogICogRmV0Y2ggdGhlIGlt bWVkaWF0ZSBjb21tYW5kIHN0YXR1cyB3b3JkCiAgKi8KQEAgLTI1NTQsNiArMjg0NCwxNCBAQCBh YWNfcmt0X2dldF9tYWlsYm94KHN0cnVjdCBhYWNfc29mdGMgKnNjCiAJcmV0dXJuKEFBQ19NRU0x X0dFVFJFRzQoc2MsIEFBQ19SS1RfTUFJTEJPWCArIChtYiAqIDQpKSk7CiB9CiAKK3N0YXRpYyBp bnQKK2FhY19zcmNfZ2V0X21haWxib3goc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBtYikKK3sK Kwlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwly ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1NSQ19NQUlMQk9YICsgKG1iICogNCkpKTsK K30KKwogLyoKICAqIFNldC9jbGVhciBpbnRlcnJ1cHQgbWFza3MKICAqLwpAQCAtMjU5OSw2ICsy ODk3LDE4IEBAIGFhY19ya3Rfc2V0X2ludGVycnVwdHMoc3RydWN0IGFhY19zb2Z0YyAKIAl9CiB9 CiAKK3N0YXRpYyB2b2lkCithYWNfc3JjX3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhYWNfc29mdGMg KnNjLCBpbnQgZW5hYmxlKQoreworCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9O X0VOVFJZX0IsICIlc2FibGUgaW50ZXJydXB0cyIsIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisK KwlpZiAoZW5hYmxlKSB7CisJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfT0lNUiwgfkFB Q19EQl9JTlRfTkVXX0NPTU1fVFlQRTEpOworCX0gZWxzZSB7CisJCUFBQ19NRU0wX1NFVFJFRzQo c2MsIEFBQ19TUkNfT0lNUiwgfjApOworCX0KK30KKwogLyoKICAqIE5ldyBjb21tLiBpbnRlcmZh Y2U6IFNlbmQgY29tbWFuZCBmdW5jdGlvbnMKICAqLwpAQCAtMjY0OCw2ICsyOTU4LDM1IEBAIGFh Y19ya3Rfc2VuZF9jb21tYW5kKHN0cnVjdCBhYWNfc29mdGMgKnMKIAlyZXR1cm4gMDsKIH0KIAor c3RhdGljIGludAorYWFjX3NyY19zZW5kX2NvbW1hbmQoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHN0 cnVjdCBhYWNfY29tbWFuZCAqY20pCit7CisJc3RydWN0IGFhY19maWJfeHBvcnRoZHIgKnBGaWJY OworCXVfaW50MzJfdCBmaWJzaXplOworCXVfaW50NjRfdCBhZGRyZXNzOworCisJZndwcmludGYo c2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgInNlbmQgY29tbWFuZCAobmV3IGNv bW0uIHR5cGUxKSIpOworCisJLyogQ2FsY3VsYXRlIHRoZSBhbW91bnQgdG8gdGhlIGZpYnNpemUg Yml0cyAqLworCWZpYnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBhYWNfZmliX3hwb3J0aGRyKSArIAor CSAgIGNtLT5jbV9maWItPkhlYWRlci5TaXplICsgMTI3KSAvIDEyOCAtIDE7IAorCWlmIChmaWJz aXplID4gMzEpIAorCQlmaWJzaXplID0gMzE7CisKKwkvKiBGaWxsIFhQT1JUIGhlYWRlciAqLyAK KwlwRmliWCA9IChzdHJ1Y3QgYWFjX2ZpYl94cG9ydGhkciAqKQorCQkoKHVuc2lnbmVkIGNoYXIg KiljbS0+Y21fZmliIC0gc2l6ZW9mKHN0cnVjdCBhYWNfZmliX3hwb3J0aGRyKSk7CisJcEZpYlgt PkhhbmRsZSA9IGNtLT5jbV9maWItPkhlYWRlci5TZW5kZXJEYXRhICsgMTsKKwlwRmliWC0+SG9z dEFkZHJlc3MgPSBjbS0+Y21fZmlicGh5czsKKwlwRmliWC0+U2l6ZSA9IGNtLT5jbV9maWItPkhl YWRlci5TaXplOworCWFkZHJlc3MgPSBjbS0+Y21fZmlicGh5cyAtIHNpemVvZihzdHJ1Y3QgYWFj X2ZpYl94cG9ydGhkcik7CisKKwlhYWNfZW5xdWV1ZV9idXN5KGNtKTsKKwlBQUNfTUVNMF9TRVRS RUc0KHNjLCBBQUNfU1JDX0lRVUVfSCwgKHVfaW50MzJfdCkoYWRkcmVzcyA+PiAzMikpOworCUFB Q19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfSVFVRV9MLCAodV9pbnQzMl90KWFkZHJlc3MgKyBm aWJzaXplKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5ldyBjb21tLiBpbnRlcmZhY2U6IGdl dCwgc2V0IG91dGJvdW5kIHF1ZXVlIGluZGV4CiAgKi8KQEAgLTI2NjcsNiArMzAwNiwxNCBAQCBh YWNfcmt0X2dldF9vdXRiX3F1ZXVlKHN0cnVjdCBhYWNfc29mdGMgCiAJcmV0dXJuKEFBQ19NRU0w X0dFVFJFRzQoc2MsIEFBQ19SS1RfT1FVRSkpOwogfQogCitzdGF0aWMgaW50CithYWNfc3JjX2dl dF9vdXRiX3F1ZXVlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQoreworCWZ3cHJpbnRmKHNjLCBIQkFf RkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIiKTsKKworCXJldHVybigtMSk7Cit9CisKIHN0 YXRpYyB2b2lkCiBhYWNfcnhfc2V0X291dGJfcXVldWUoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGlu dCBpbmRleCkKIHsKQEAgLTI2ODMsNiArMzAzMCwxMiBAQCBhYWNfcmt0X3NldF9vdXRiX3F1ZXVl KHN0cnVjdCBhYWNfc29mdGMgCiAJQUFDX01FTTBfU0VUUkVHNChzYywgQUFDX1JLVF9PUVVFLCBp bmRleCk7CiB9CiAKK3N0YXRpYyB2b2lkCithYWNfc3JjX3NldF9vdXRiX3F1ZXVlKHN0cnVjdCBh YWNfc29mdGMgKnNjLCBpbnQgaW5kZXgpCit7CisJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdf RlVOQ1RJT05fRU5UUllfQiwgIiIpOworfQorCiAvKgogICogRGVidWdnaW5nIGFuZCBEaWFnbm9z dGljcwogICovCkBAIC0yNzAyLDYgKzMwNTUsMjQgQEAgYWFjX2Rlc2NyaWJlX2NvbnRyb2xsZXIo c3RydWN0IGFhY19zb2Z0YwogCW10eF9sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwogCWFhY19hbGxv Y19zeW5jX2ZpYihzYywgJmZpYik7CiAKKwlpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFD X1NVUFBPUlRFRF9TVVBQTEVNRU5UX0FEQVBURVJfSU5GTykgeworCQlmaWItPmRhdGFbMF0gPSAw OworCQlpZiAoYWFjX3N5bmNfZmliKHNjLCBSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJbmZvLCAw LCBmaWIsIDEpKSAKKwkJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJSZXF1ZXN0U3VwcGxl bWVudEFkYXB0ZXJJbmZvIGZhaWxlZFxuIik7CisJCWVsc2UgeworCQkJc3RydWN0IGFhY19zdXBw bGVtZW50X2FkYXB0ZXJfaW5mbyAqc3VwcF9pbmZvOworCisJCQlzdXBwX2luZm8gPSAoKHN0cnVj dCBhYWNfc3VwcGxlbWVudF9hZGFwdGVyX2luZm8gKikmZmliLT5kYXRhWzBdKTsgCisJCQlhZGFw dGVyX3R5cGUgPSBzdXBwX2luZm8tPkFkYXB0ZXJUeXBlVGV4dDsKKwkJCXNjLT5hYWNfZmVhdHVy ZV9iaXRzID0gc3VwcF9pbmZvLT5GZWF0dXJlQml0czsKKwkJCXNjLT5hYWNfc3VwcG9ydF9vcHQy ID0gc3VwcF9pbmZvLT5TdXBwb3J0ZWRPcHRpb25zMjsKKwkJfQorCX0KKwlkZXZpY2VfcHJpbnRm KHNjLT5hYWNfZGV2LCAiJXMsIGFhYyBkcml2ZXIgJWQuJWQuJWQtJWRcbiIsCisJCWFkYXB0ZXJf dHlwZSwKKwkJQUFDX0RSSVZFUl9NQUpPUl9WRVJTSU9OLCBBQUNfRFJJVkVSX01JTk9SX1ZFUlNJ T04sCisJCUFBQ19EUklWRVJfQlVHRklYX0xFVkVMLCBBQUNfRFJJVkVSX0JVSUxEKTsKKwogCWZp Yi0+ZGF0YVswXSA9IDA7CiAJaWYgKGFhY19zeW5jX2ZpYihzYywgUmVxdWVzdEFkYXB0ZXJJbmZv LCAwLCBmaWIsIDEpKSB7CiAJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJSZXF1ZXN0QWRh cHRlckluZm8gZmFpbGVkXG4iKTsKQEAgLTI3NTYsMjAgKzMxMjcsNiBAQCBhYWNfZGVzY3JpYmVf Y29udHJvbGxlcihzdHJ1Y3QgYWFjX3NvZnRjCiAJCQkgICAgICAiXDI0SEVBVFNFTlNPUiIpOwog CX0KIAotCWlmIChzYy0+c3VwcG9ydGVkX29wdGlvbnMgJiBBQUNfU1VQUE9SVEVEX1NVUFBMRU1F TlRfQURBUFRFUl9JTkZPKSB7Ci0JCWZpYi0+ZGF0YVswXSA9IDA7Ci0JCWlmIChhYWNfc3luY19m aWIoc2MsIFJlcXVlc3RTdXBwbGVtZW50QWRhcHRlckluZm8sIDAsIGZpYiwgMSkpCi0JCQlkZXZp Y2VfcHJpbnRmKHNjLT5hYWNfZGV2LAotCQkJICAgICJSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJ bmZvIGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCWFkYXB0ZXJfdHlwZSA9ICgoc3RydWN0IGFhY19z dXBwbGVtZW50X2FkYXB0ZXJfaW5mbyAqKQotCQkJICAgICZmaWItPmRhdGFbMF0pLT5BZGFwdGVy VHlwZVRleHQ7Ci0JfQotCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICIlcywgYWFjIGRyaXZl ciAlZC4lZC4lZC0lZFxuIiwKLQkJYWRhcHRlcl90eXBlLAotCQlBQUNfRFJJVkVSX01BSk9SX1ZF UlNJT04sIEFBQ19EUklWRVJfTUlOT1JfVkVSU0lPTiwKLQkJQUFDX0RSSVZFUl9CVUdGSVhfTEVW RUwsIEFBQ19EUklWRVJfQlVJTEQpOwotCiAJYWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOwogCW10 eF91bmxvY2soJnNjLT5hYWNfaW9fbG9jayk7CiB9CkBAIC0zMDUwLDI1ICszNDA3LDI1IEBAIHN0 YXRpYyBpbnQKIGFhY19pb2N0bF9zZW5kX3Jhd19zcmIoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGNh ZGRyX3QgYXJnKQogewogCXN0cnVjdCBhYWNfY29tbWFuZCAqY207Ci0Jc3RydWN0IGFhY19ldmVu dCAqZXZlbnQ7CiAJc3RydWN0IGFhY19maWIgKmZpYjsKLQlzdHJ1Y3QgYWFjX3NyYiAqc3JiY21k LCAqdXNlcl9zcmI7Ci0Jc3RydWN0IGFhY19zZ19lbnRyeSAqc2dlOwotCXN0cnVjdCBhYWNfc2df ZW50cnk2NCAqc2dlNjQ7Ci0Jdm9pZCAqc3JiX3NnX2FkZHJlc3MsICp1cmVwbHk7Ci0JdWludDMy X3QgZmlic2l6ZSwgc3JiX3NnX2J5dGVjb3VudDsKLQlpbnQgZXJyb3IsIHRyYW5zZmVyX2RhdGE7 CisJc3RydWN0IGFhY19zcmIgKnNyYmNtZDsKKwlzdHJ1Y3QgYWFjX3NyYiAqdXNlcl9zcmIgPSAo c3RydWN0IGFhY19zcmIgKilhcmc7CisJdm9pZCAqdXNlcl9yZXBseTsKKwlpbnQgZXJyb3IsIHRy YW5zZmVyX2RhdGEgPSAwOworCWJ1c19kbWFtYXBfdCBvcmlnX21hcCA9IDA7CisJdV9pbnQzMl90 IGZpYnNpemUgPSAwOworCXVfaW50NjRfdCBzcmJfc2dfYWRkcmVzczsKKwl1X2ludDMyX3Qgc3Ji X3NnX2J5dGVjb3VudDsKIAogCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VO VFJZX0IsICIiKTsKIAogCWNtID0gTlVMTDsKLQl0cmFuc2Zlcl9kYXRhID0gMDsKLQlmaWJzaXpl ID0gMDsKLQl1c2VyX3NyYiA9IChzdHJ1Y3QgYWFjX3NyYiAqKWFyZzsKIAogCW10eF9sb2NrKCZz Yy0+YWFjX2lvX2xvY2spOwogCWlmIChhYWNfYWxsb2NfY29tbWFuZChzYywgJmNtKSkgewotCQkg ZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhYWNfZXZlbnQpLCBNX0FBQ0JVRiwKKwkJc3Ry dWN0IGFhY19ldmVudCAqZXZlbnQ7CisKKwkJZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBh YWNfZXZlbnQpLCBNX0FBQ0JVRiwKIAkJICAgIE1fTk9XQUlUIHwgTV9aRVJPKTsKIAkJaWYgKGV2 ZW50ID09IE5VTEwpIHsKIAkJCWVycm9yID0gRUJVU1k7CkBAIC0zMDc5LDEwOCArMzQzNiwxNzEg QEAgYWFjX2lvY3RsX3NlbmRfcmF3X3NyYihzdHJ1Y3QgYWFjX3NvZnRjIAogCQlldmVudC0+ZXZf Y2FsbGJhY2sgPSBhYWNfaW9jdGxfZXZlbnQ7CiAJCWV2ZW50LT5ldl9hcmcgPSAmY207CiAJCWFh Y19hZGRfZXZlbnQoc2MsIGV2ZW50KTsKLQkJbXNsZWVwKGNtLCAmc2MtPmFhY19pb19sb2NrLCAw LCAiYWFjcmF3IiwgMCk7CisJCW1zbGVlcChjbSwgJnNjLT5hYWNfaW9fbG9jaywgMCwgInNuZHJh dyIsIDApOwogCX0KIAltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwogCiAJY20tPmNtX2Rh dGEgPSBOVUxMOworCS8qIHNhdmUgb3JpZ2luYWwgZG1hIG1hcCAqLworCW9yaWdfbWFwID0gY20t PmNtX2RhdGFtYXA7CisKIAlmaWIgPSBjbS0+Y21fZmliOwogCXNyYmNtZCA9IChzdHJ1Y3QgYWFj X3NyYiAqKWZpYi0+ZGF0YTsKLQllcnJvciA9IGNvcHlpbigmdXNlcl9zcmItPmRhdGFfbGVuLCAm Zmlic2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JaWYgKGVycm9yICE9IDApCisJaWYgKChlcnJv ciA9IGNvcHlpbigodm9pZCAqKSZ1c2VyX3NyYi0+ZGF0YV9sZW4sICZmaWJzaXplLCAKKwkJc2l6 ZW9mICh1X2ludDMyX3QpKSAhPSAwKSkgCiAJCWdvdG8gb3V0OwotCWlmIChmaWJzaXplID4gKHNj LT5hYWNfbWF4X2ZpYl9zaXplIC0gc2l6ZW9mKHN0cnVjdCBhYWNfZmliX2hlYWRlcikpKSB7CisJ aWYgKGZpYnNpemUgPiAoc2MtPmFhY19tYXhfZmliX3NpemUtc2l6ZW9mKHN0cnVjdCBhYWNfZmli X2hlYWRlcikpKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3Ig PSBjb3B5aW4odXNlcl9zcmIsIHNyYmNtZCwgZmlic2l6ZSk7Ci0JaWYgKGVycm9yICE9IDApCisJ aWYgKChlcnJvciA9IGNvcHlpbigodm9pZCAqKXVzZXJfc3JiLCBzcmJjbWQsIGZpYnNpemUpICE9 IDApKSAKIAkJZ290byBvdXQ7Ci0Jc3JiY21kLT5mdW5jdGlvbiA9IDA7Ci0Jc3JiY21kLT5yZXRy eV9saW1pdCA9IDA7CisKKwlzcmJjbWQtPmZ1bmN0aW9uID0gMDsJCS8qIFNSQkZfRXhlY3V0ZVNj c2kgKi8KKwlzcmJjbWQtPnJldHJ5X2xpbWl0ID0gMDsJLyogb2Jzb2xldGUgKi8KKworCS8qIG9u bHkgb25lIHNnIGVsZW1lbnQgZnJvbSB1c2Vyc3BhY2Ugc3VwcG9ydGVkICovCiAJaWYgKHNyYmNt ZC0+c2dfbWFwLlNnQ291bnQgPiAxKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIG91dDsK IAl9Ci0KLQkvKiBSZXRyaWV2ZSBjb3JyZWN0IFNHIGVudHJpZXMuICovCi0JaWYgKGZpYnNpemUg PT0gKHNpemVvZihzdHJ1Y3QgYWFjX3NyYikgKwotCSAgICBzcmJjbWQtPnNnX21hcC5TZ0NvdW50 ICogc2l6ZW9mKHN0cnVjdCBhYWNfc2dfZW50cnkpKSkgewotCQlzZ2UgPSBzcmJjbWQtPnNnX21h cC5TZ0VudHJ5OwotCQlzZ2U2NCA9IE5VTEw7Ci0JCXNyYl9zZ19ieXRlY291bnQgPSBzZ2UtPlNn Qnl0ZUNvdW50OwotCQlzcmJfc2dfYWRkcmVzcyA9ICh2b2lkICopKHVpbnRwdHJfdClzZ2UtPlNn QWRkcmVzczsKLQl9CisJLyogY2hlY2sgZmlic2l6ZSAqLworCWlmIChmaWJzaXplID09IChzaXpl b2Yoc3RydWN0IGFhY19zcmIpICsgCisJCXNyYmNtZC0+c2dfbWFwLlNnQ291bnQgKiBzaXplb2Yo c3RydWN0IGFhY19zZ19lbnRyeSkpKSB7CisJCXN0cnVjdCBhYWNfc2dfZW50cnkgKnNncCA9IHNy YmNtZC0+c2dfbWFwLlNnRW50cnk7CisJCXNyYl9zZ19ieXRlY291bnQgPSBzZ3AtPlNnQnl0ZUNv dW50OworCQlzcmJfc2dfYWRkcmVzcyA9ICh1X2ludDY0X3Qpc2dwLT5TZ0FkZHJlc3M7CisJfSBl bHNlIGlmIChmaWJzaXplID09IChzaXplb2Yoc3RydWN0IGFhY19zcmIpICsgCisJCXNyYmNtZC0+ c2dfbWFwLlNnQ291bnQgKiBzaXplb2Yoc3RydWN0IGFhY19zZ19lbnRyeTY0KSkpIHsKICNpZmRl ZiBfX2FtZDY0X18KLQllbHNlIGlmIChmaWJzaXplID09IChzaXplb2Yoc3RydWN0IGFhY19zcmIp ICsKLQkgICAgc3JiY21kLT5zZ19tYXAuU2dDb3VudCAqIHNpemVvZihzdHJ1Y3QgYWFjX3NnX2Vu dHJ5NjQpKSkgewotCQlzZ2UgPSBOVUxMOwotCQlzZ2U2NCA9IChzdHJ1Y3QgYWFjX3NnX2VudHJ5 NjQgKilzcmJjbWQtPnNnX21hcC5TZ0VudHJ5OwotCQlzcmJfc2dfYnl0ZWNvdW50ID0gc2dlNjQt PlNnQnl0ZUNvdW50OwotCQlzcmJfc2dfYWRkcmVzcyA9ICh2b2lkICopc2dlNjQtPlNnQWRkcmVz czsKLQkJaWYgKHNnZTY0LT5TZ0FkZHJlc3MgPiAweGZmZmZmZmZmdWxsICYmCi0JCSAgICAoc2Mt PmZsYWdzICYgQUFDX0ZMQUdTX1NHXzY0QklUKSA9PSAwKSB7CisJCXN0cnVjdCBhYWNfc2dfZW50 cnk2NCAqc2dwID0gCisJCQkoc3RydWN0IGFhY19zZ19lbnRyeTY0ICopc3JiY21kLT5zZ19tYXAu U2dFbnRyeTsKKwkJc3JiX3NnX2J5dGVjb3VudCA9IHNncC0+U2dCeXRlQ291bnQ7CisJCXNyYl9z Z19hZGRyZXNzID0gc2dwLT5TZ0FkZHJlc3M7CisJCWlmIChzcmJfc2dfYWRkcmVzcyA+IDB4ZmZm ZmZmZmZ1bGwgJiYgCisJCQkhKHNjLT5mbGFncyAmIEFBQ19GTEFHU19TR182NEJJVCkpCisjZW5k aWYJCisJCXsKIAkJCWVycm9yID0gRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KLQl9Ci0jZW5k aWYKLQllbHNlIHsKKwl9IGVsc2UgewogCQllcnJvciA9IEVJTlZBTDsKIAkJZ290byBvdXQ7CiAJ fQotCXVyZXBseSA9IChjaGFyICopYXJnICsgZmlic2l6ZTsKKwl1c2VyX3JlcGx5ID0gKGNoYXIg KilhcmcgKyBmaWJzaXplOwogCXNyYmNtZC0+ZGF0YV9sZW4gPSBzcmJfc2dfYnl0ZWNvdW50Owot CWlmIChzcmJjbWQtPnNnX21hcC5TZ0NvdW50ID09IDEpCisJaWYgKHNyYmNtZC0+c2dfbWFwLlNn Q291bnQgPT0gMSkgCiAJCXRyYW5zZmVyX2RhdGEgPSAxOwogCi0JY20tPmNtX3NndGFibGUgPSAo c3RydWN0IGFhY19zZ190YWJsZSAqKSZzcmJjbWQtPnNnX21hcDsKIAlpZiAodHJhbnNmZXJfZGF0 YSkgewotCQljbS0+Y21fZGF0YWxlbiA9IHNyYl9zZ19ieXRlY291bnQ7Ci0JCWNtLT5jbV9kYXRh ID0gbWFsbG9jKGNtLT5jbV9kYXRhbGVuLCBNX0FBQ0JVRiwgTV9OT1dBSVQpOwotCQlpZiAoY20t PmNtX2RhdGEgPT0gTlVMTCkgeworCQkvKgorCQkgKiBDcmVhdGUgRE1BIHRhZyBmb3IgdGhlIHBh c3N0aHIuIGRhdGEgYnVmZmVyIGFuZCBhbGxvY2F0ZSBpdC4KKwkJICovCisJCWlmIChidXNfZG1h X3RhZ19jcmVhdGUoc2MtPmFhY19wYXJlbnRfZG1hdCwgCS8qIHBhcmVudCAqLworCQkJMSwgMCwJ CQkvKiBhbGdubW50LCBib3VuZGFyeSAqLworCQkJKHNjLT5mbGFncyAmIEFBQ19GTEFHU19TR182 NEJJVCkgPworCQkJQlVTX1NQQUNFX01BWEFERFJfMzJCSVQgOgorCQkJMHg3ZmZmZmZmZiwJCS8q IGxvd2FkZHIgKi8KKwkJCUJVU19TUEFDRV9NQVhBRERSLCAJLyogaGlnaGFkZHIgKi8KKwkJCU5V TEwsIE5VTEwsIAkJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KKwkJCXNyYl9zZ19ieXRlY291bnQs IAkvKiBzaXplICovCisJCQlzYy0+YWFjX3NnX3RhYmxlc2l6ZSwJLyogbnNlZ21lbnRzICovCisJ CQlzcmJfc2dfYnl0ZWNvdW50LCAJLyogbWF4c2Vnc2l6ZSAqLworCQkJMCwJCQkvKiBmbGFncyAq LworCQkJTlVMTCwgTlVMTCwJCS8qIE5vIGxvY2tpbmcgbmVlZGVkICovCisJCQkmY20tPmNtX3Bh c3N0aHJfZG1hdCkpIHsKIAkJCWVycm9yID0gRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJ aWYgKHNyYmNtZC0+ZmxhZ3MgJiBBQUNfU1JCX0ZMQUdTX0RBVEFfSU4pCisJCWlmIChidXNfZG1h bWVtX2FsbG9jKGNtLT5jbV9wYXNzdGhyX2RtYXQsICh2b2lkICoqKSZjbS0+Y21fZGF0YSwKKwkJ CUJVU19ETUFfTk9XQUlULCAmY20tPmNtX2RhdGFtYXApKSB7CisJCQllcnJvciA9IEVOT01FTTsK KwkJCWdvdG8gb3V0OworCQl9CisJCS8qIGZpbGwgc29tZSBjbSB2YXJpYWJsZXMgKi8KKwkJY20t PmNtX2RhdGFsZW4gPSBzcmJfc2dfYnl0ZWNvdW50OworCQlpZiAoc3JiY21kLT5mbGFncyAmIEFB Q19TUkJfRkxBR1NfREFUQV9JTikgCiAJCQljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9EQVRBSU47 Ci0JCWlmIChzcmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX09VVCkgeworCQlpZiAo c3JiY21kLT5mbGFncyAmIEFBQ19TUkJfRkxBR1NfREFUQV9PVVQpCiAJCQljbS0+Y21fZmxhZ3Mg fD0gQUFDX0NNRF9EQVRBT1VUOwotCQkJZXJyb3IgPSBjb3B5aW4oc3JiX3NnX2FkZHJlc3MsIGNt LT5jbV9kYXRhLAotCQkJICAgIGNtLT5jbV9kYXRhbGVuKTsKLQkJCWlmIChlcnJvciAhPSAwKQor CisJCWlmIChzcmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX09VVCkgeworCQkJaWYg KChlcnJvciA9IGNvcHlpbigKKyNpZmRlZiBfX2FtZDY0X18KKwkJCQkodm9pZCAqKXNyYl9zZ19h ZGRyZXNzLAorI2Vsc2UKKwkJCQkodm9pZCAqKSh1X2ludDMyX3Qpc3JiX3NnX2FkZHJlc3MsCisj ZW5kaWYKKwkJCQljbS0+Y21fZGF0YSwgY20tPmNtX2RhdGFsZW4pKSAhPSAwKQogCQkJCWdvdG8g b3V0OworCQkJLyogc3luYyByZXF1aXJlZCBmb3IgYnVzX2RtYW1lbV9hbGxvYygpIGFsbG9jLiBt ZW0uPyAqLworCQkJYnVzX2RtYW1hcF9zeW5jKGNtLT5jbV9wYXNzdGhyX2RtYXQsIGNtLT5jbV9k YXRhbWFwLAorCQkJCUJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAkJfQogCX0KIAotCWZpYi0+SGVh ZGVyLlNpemUgPSBzaXplb2Yoc3RydWN0IGFhY19maWJfaGVhZGVyKSArCi0JICAgIHNpemVvZihz dHJ1Y3QgYWFjX3NyYik7CisJLyogYnVpbGQgdGhlIEZJQiAqLworCWZpYi0+SGVhZGVyLlNpemUg PSBzaXplb2Yoc3RydWN0IGFhY19maWJfaGVhZGVyKSArIAorCQlzaXplb2Yoc3RydWN0IGFhY19z cmIpOwogCWZpYi0+SGVhZGVyLlhmZXJTdGF0ZSA9Ci0JICAgIEFBQ19GSUJTVEFURV9IT1NUT1dO RUQgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9JTklUSUFMSVNFRCB8Ci0JICAgIEFBQ19GSUJTVEFU RV9FTVBUWSAgICAgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9GUk9NSE9TVCAgICB8Ci0JICAgIEFB Q19GSUJTVEFURV9SRVhQRUNURUQgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9OT1JNICAgICAgICB8 Ci0JICAgIEFBQ19GSUJTVEFURV9BU1lOQyAgICAgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9GQVNU X1JFU1BPTlNFOwotCWZpYi0+SGVhZGVyLkNvbW1hbmQgPSAoc2MtPmZsYWdzICYgQUFDX0ZMQUdT X1NHXzY0QklUKSAhPSAwID8KLQkgICAgU2NzaVBvcnRDb21tYW5kVTY0IDogU2NzaVBvcnRDb21t YW5kOworCQlBQUNfRklCU1RBVEVfSE9TVE9XTkVEICAgfAorCQlBQUNfRklCU1RBVEVfSU5JVElB TElTRUQgfAorCQlBQUNfRklCU1RBVEVfRU1QVFkJIHwKKwkJQUFDX0ZJQlNUQVRFX0ZST01IT1NU CSB8CisJCUFBQ19GSUJTVEFURV9SRVhQRUNURUQgICB8CisJCUFBQ19GSUJTVEFURV9OT1JNCSB8 CisJCUFBQ19GSUJTVEFURV9BU1lOQwkgfAorCQlBQUNfRklCU1RBVEVfRkFTVF9SRVNQT05TRTsK KworCWZpYi0+SGVhZGVyLkNvbW1hbmQgPSAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX1NHXzY0QklU KSA/IAorCQlTY3NpUG9ydENvbW1hbmRVNjQgOiBTY3NpUG9ydENvbW1hbmQ7CisJY20tPmNtX3Nn dGFibGUgPSAoc3RydWN0IGFhY19zZ190YWJsZSAqKSZzcmJjbWQtPnNnX21hcDsKKworCS8qIHNl bmQgY29tbWFuZCAqLworCWlmICh0cmFuc2Zlcl9kYXRhKSB7CisJCWJ1c19kbWFtYXBfbG9hZChj bS0+Y21fcGFzc3Rocl9kbWF0LAorCQkJY20tPmNtX2RhdGFtYXAsIGNtLT5jbV9kYXRhLAorCQkJ Y20tPmNtX2RhdGFsZW4sCisJCQlhYWNfbWFwX2NvbW1hbmRfc2csIGNtLCAwKTsKKwl9IGVsc2Ug eworCQlhYWNfbWFwX2NvbW1hbmRfc2coY20sIE5VTEwsIDAsIDApOworCX0KIAorCS8qIHdhaXQg Zm9yIGNvbXBsZXRpb24gKi8KIAltdHhfbG9jaygmc2MtPmFhY19pb19sb2NrKTsKLQlhYWNfd2Fp dF9jb21tYW5kKGNtKTsKKwl3aGlsZSAoIShjbS0+Y21fZmxhZ3MgJiBBQUNfQ01EX0NPTVBMRVRF RCkpCisJCW1zbGVlcChjbSwgJnNjLT5hYWNfaW9fbG9jaywgMCwgInNuZHJ3MiIsIDApOwogCW10 eF91bmxvY2soJnNjLT5hYWNfaW9fbG9jayk7CiAKLQlpZiAodHJhbnNmZXJfZGF0YSAmJiAoc3Ji Y21kLT5mbGFncyAmIEFBQ19TUkJfRkxBR1NfREFUQV9JTikgIT0gMCkgewotCQllcnJvciA9IGNv cHlvdXQoY20tPmNtX2RhdGEsIHNyYl9zZ19hZGRyZXNzLCBjbS0+Y21fZGF0YWxlbik7Ci0JCWlm IChlcnJvciAhPSAwKQorCS8qIGNvcHkgZGF0YSAqLworCWlmICh0cmFuc2Zlcl9kYXRhICYmIChz cmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX0lOKSkgeworCQlpZiAoKGVycm9yID0g Y29weW91dChjbS0+Y21fZGF0YSwgCisjaWZkZWYgX19hbWQ2NF9fCisJCQkodm9pZCAqKXNyYl9z Z19hZGRyZXNzLAorI2Vsc2UKKwkJCSh2b2lkICopKHVfaW50MzJfdClzcmJfc2dfYWRkcmVzcywK KyNlbmRpZgorCQkJY20tPmNtX2RhdGFsZW4pKSAhPSAwKQogCQkJZ290byBvdXQ7CisJCS8qIHN5 bmMgcmVxdWlyZWQgZm9yIGJ1c19kbWFtZW1fYWxsb2MoKSBhbGxvY2F0ZWQgbWVtLj8gKi8KKwkJ YnVzX2RtYW1hcF9zeW5jKGNtLT5jbV9wYXNzdGhyX2RtYXQsIGNtLT5jbV9kYXRhbWFwLAorCQkJ CUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKIAl9Ci0JZXJyb3IgPSBjb3B5b3V0KGZpYi0+ZGF0YSwg dXJlcGx5LCBzaXplb2Yoc3RydWN0IGFhY19zcmJfcmVzcG9uc2UpKTsKKworCS8qIHN0YXR1cyAq LworCWVycm9yID0gY29weW91dChmaWItPmRhdGEsIHVzZXJfcmVwbHksIHNpemVvZihzdHJ1Y3Qg YWFjX3NyYl9yZXNwb25zZSkpOworCiBvdXQ6Ci0JaWYgKGNtICE9IE5VTEwpIHsKLQkJaWYgKGNt LT5jbV9kYXRhICE9IE5VTEwpCi0JCQlmcmVlKGNtLT5jbV9kYXRhLCBNX0FBQ0JVRik7CisJaWYg KGNtICYmIGNtLT5jbV9kYXRhKSB7CisJCWlmICh0cmFuc2Zlcl9kYXRhKQorCQkJYnVzX2RtYW1h cF91bmxvYWQoY20tPmNtX3Bhc3N0aHJfZG1hdCwgY20tPmNtX2RhdGFtYXApOworCQlidXNfZG1h bWVtX2ZyZWUoY20tPmNtX3Bhc3N0aHJfZG1hdCwgY20tPmNtX2RhdGEsIGNtLT5jbV9kYXRhbWFw KTsKKwkJY20tPmNtX2RhdGFtYXAgPSBvcmlnX21hcDsKKwl9CisJaWYgKGNtICYmIGNtLT5jbV9w YXNzdGhyX2RtYXQpIAorCQlidXNfZG1hX3RhZ19kZXN0cm95KGNtLT5jbV9wYXNzdGhyX2RtYXQp OworCWlmIChjbSkgeyAKIAkJbXR4X2xvY2soJnNjLT5hYWNfaW9fbG9jayk7CiAJCWFhY19yZWxl YXNlX2NvbW1hbmQoY20pOwogCQltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwpAQCAtMzE4 OSw2ICszNjA5LDQyIEBAIG91dDoKIH0KIAogLyoKKyAqIFJlcXVlc3QgYW4gQUlGIGZyb20gdGhl IGNvbnRyb2xsZXIgKG5ldyBjb21tLiB0eXBlMSkKKyAqLworc3RhdGljIHZvaWQKK2FhY19yZXF1 ZXN0X2FpZihzdHJ1Y3QgYWFjX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNt OworCXN0cnVjdCBhYWNfZmliICpmaWI7CisKKwlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19G VU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwlpZiAoYWFjX2FsbG9jX2NvbW1hbmQoc2MsICZjbSkp IHsKKwkJc2MtPmFpZl9wZW5kaW5nID0gMTsKKwkJcmV0dXJuOworCX0KKwlzYy0+YWlmX3BlbmRp bmcgPSAwOworICAgIAorCS8qIGJ1aWxkIHRoZSBGSUIgKi8KKwlmaWIgPSBjbS0+Y21fZmliOwor CWZpYi0+SGVhZGVyLlNpemUgPSBzaXplb2Yoc3RydWN0IGFhY19maWIpOworCWZpYi0+SGVhZGVy LlhmZXJTdGF0ZSA9CisgICAgICAgIEFBQ19GSUJTVEFURV9IT1NUT1dORUQgICB8CisgICAgICAg IEFBQ19GSUJTVEFURV9JTklUSUFMSVNFRCB8CisgICAgICAgIEFBQ19GSUJTVEFURV9FTVBUWQkg fAorICAgICAgICBBQUNfRklCU1RBVEVfRlJPTUhPU1QJIHwKKyAgICAgICAgQUFDX0ZJQlNUQVRF X1JFWFBFQ1RFRCAgIHwKKyAgICAgICAgQUFDX0ZJQlNUQVRFX05PUk0JIHwKKyAgICAgICAgQUFD X0ZJQlNUQVRFX0FTWU5DOworCS8qIHNldCBBSUYgbWFya2VyICovCisJZmliLT5IZWFkZXIuU2Vu ZGVyRGF0YSA9IDB4MDA4MDAwMDA7CisJZmliLT5IZWFkZXIuQ29tbWFuZCA9IEFpZlJlcXVlc3Q7 CisJKChzdHJ1Y3QgYWFjX2FpZl9jb21tYW5kICopZmliLT5kYXRhKS0+Y29tbWFuZCA9IEFpZlJl cUV2ZW50OworCisJYWFjX21hcF9jb21tYW5kX3NnKGNtLCBOVUxMLCAwLCAwKTsKK30KKworLyoK ICAqIGNkZXZwcml2IGludGVyZmFjZSBwcml2YXRlIGRlc3RydWN0b3IuCiAgKi8KIHN0YXRpYyB2 b2lkCkBAIC0zMjk1LDYgKzM3NTEsOSBAQCBhYWNfaGFuZGxlX2FpZihzdHJ1Y3QgYWFjX3NvZnRj ICpzYywgc3RyCiAJCQljbyA9IFRBSUxRX0ZJUlNUKCZzYy0+YWFjX2NvbnRhaW5lcl90cWgpOwog CQkJd2hpbGUgKGNvICE9IE5VTEwpIHsKIAkJCQlpZiAoY28tPmNvX2ZvdW5kID09IDApIHsKKwkJ CQkJc3RydWN0IGFhY19kaXNrICphZDsKKwkJCQkJYWQgPSBkZXZpY2VfZ2V0X3NvZnRjKGNvLT5j b19kaXNrKTsKKwkJCQkJYWQtPmFkX2NvbnRhaW5lciA9IE5VTEw7CiAJCQkJCW10eF91bmxvY2so JnNjLT5hYWNfaW9fbG9jayk7CiAJCQkJCW10eF9sb2NrKCZHaWFudCk7CiAJCQkJCWRldmljZV9k ZWxldGVfY2hpbGQoc2MtPmFhY19kZXYsCkBAIC0zNjEyLDYgKzQwNzEsNyBAQCBhYWNfc3VwcG9y dGVkX2ZlYXR1cmVzKHN0cnVjdCBhYWNfc29mdGMgCiAJIGlmIChmLmZlYXQuZlZhbHVlID09IDAp IHsKIAkJZi5mZWF0LmZCaXRzLmxhcmdlTEJBID0KIAkJICAgIChzYy0+ZmxhZ3MgJiBBQUNfRkxB R1NfTEJBXzY0QklUKSA/IDEgOiAwOworCQlmLmZlYXQuZkJpdHMuSkJPRFN1cHBvcnQgPSAxOwog CQkvKiBUT0RPOiBJbiB0aGUgZnV0dXJlLCBhZGQgb3RoZXIgZmVhdHVyZXMgc3RhdGUgaGVyZSBh cyB3ZWxsICovCiAJfSBlbHNlIHsKIAkJaWYgKGYuZmVhdC5mQml0cy5sYXJnZUxCQSkKQEAgLTM3 ODMsNiArNDI0Myw3IEBAIGFhY19nZXRfYnVzX2luZm8oc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJ CWNhbWluZi0+SW5pdGlhdG9yQnVzSWQgPSBidXNpbmZvLkluaXRpYXRvckJ1c0lkW2ldOwogCQlj YW1pbmYtPmFhY19zYyA9IHNjOwogCQljYW1pbmYtPnNpbV9kZXYgPSBjaGlsZDsKKwkJY2FtaW5m LT5hYWNfY2FtID0gTlVMTDsKIAogCQlkZXZpY2Vfc2V0X2l2YXJzKGNoaWxkLCBjYW1pbmYpOwog CQlkZXZpY2Vfc2V0X2Rlc2MoY2hpbGQsICJTQ1NJIFBhc3N0aHJvdWdoIEJ1cyIpOwpAQCAtMzc5 NiwzICs0MjU3LDE2NCBAQCBhYWNfZ2V0X2J1c19pbmZvKHN0cnVjdCBhYWNfc29mdGMgKnNjKQog CiAJcmV0dXJuOwogfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBrZXJuZWwgaXMgdXAg YW5kIHJ1bm5pbmcuIElmIHdlIGFyZSBpbiBhCisgKiBCbGlua0xFRCBzdGF0ZSwgcmV0dXJuIHRo ZSBCbGlua0xFRCBjb2RlLgorICovCitzdGF0aWMgdV9pbnQzMl90CithYWNfY2hlY2tfYWRhcHRl cl9oZWFsdGgoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50OF90ICpibGVkKQoreworCXVfaW50 MzJfdCByZXQ7CisKKwlyZXQgPSBBQUNfR0VUX0ZXU1RBVFVTKHNjKTsKKworCWlmIChyZXQgJiBB QUNfVVBfQU5EX1JVTk5JTkcpCisJCXJldCA9IDA7CisJZWxzZSBpZiAocmV0ICYgQUFDX0tFUk5F TF9QQU5JQyAmJiBibGVkKQorCQkqYmxlZCA9IChyZXQgPj4gMTYpICYgMHhmZjsKKworCXJldHVy biAocmV0KTsKK30KKworLyoKKyAqIE9uY2UgZG8gYW4gSU9QIHJlc2V0LCBiYXNpY2FsbHkgaGF2 ZSB0byByZS1pbml0aWFsaXplIHRoZSBjYXJkIGFzCisgKiBpZiBjb21pbmcgdXAgZnJvbSBhIGNv bGQgYm9vdCwgYW5kIHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBhbnkgSU8gdGhh dCB3YXMgb3V0c3RhbmRpbmcgdG8gdGhlIGFkYXB0ZXIgYXQgdGhlIHRpbWUgb2YgdGhlIElPUAor ICogUkVTRVQuIEFuZCBwcmVwYXJlIHRoZSBkcml2ZXIgZm9yIElPUCBSRVNFVCBieSBtYWtpbmcg dGhlIGluaXQgY29kZQorICogbW9kdWxhciB3aXRoIHRoZSBhYmlsaXR5IHRvIGNhbGwgaXQgZnJv bSBtdWx0aXBsZSBwbGFjZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FhY19yZXNldF9hZGFwdGVyKHN0 cnVjdCBhYWNfc29mdGMgKnNjKQoreworCXN0cnVjdCBhYWNfY29tbWFuZCAqY207CisJc3RydWN0 IGFhY19maWIgKmZpYjsKKwlzdHJ1Y3QgYWFjX3BhdXNlX2NvbW1hbmQgKnBjOworCXVfaW50MzJf dCBzdGF0dXMsIG9sZF9mbGFncywgcmVzZXRfbWFzaywgd2FpdENvdW50OworCisJZndwcmludGYo c2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOworCisJaWYgKHNjLT5hYWNf c3RhdGUgJiBBQUNfU1RBVEVfUkVTRVQpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2Rldiwg ImFhY19yZXNldF9hZGFwdGVyKCkgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAo RUlOVkFMKTsKKwl9CisJc2MtPmFhY19zdGF0ZSB8PSBBQUNfU1RBVEVfUkVTRVQ7CisKKwkvKiBk aXNhYmxlIGludGVycnVwdCAqLworCUFBQ19NQVNLX0lOVEVSUlVQVFMoc2MpOworCisJLyoKKwkg KiBBYm9ydCBhbGwgcGVuZGluZyBjb21tYW5kczoKKwkgKiBhKSBvbiB0aGUgY29udHJvbGxlcgor CSAqLworCXdoaWxlICgoY20gPSBhYWNfZGVxdWV1ZV9idXN5KHNjKSkgIT0gTlVMTCkgeworCQlj bS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9SRVNFVDsKKworCQkvKiBpcyB0aGVyZSBhIGNvbXBsZXRp b24gaGFuZGxlcj8gKi8KKwkJaWYgKGNtLT5jbV9jb21wbGV0ZSAhPSBOVUxMKSB7CisJCQljbS0+ Y21fY29tcGxldGUoY20pOworCQl9IGVsc2UgeworCQkJLyogYXNzdW1lIHRoYXQgc29tZW9uZSBp cyBzbGVlcGluZyBvbiB0aGlzCisJCQkgKiBjb21tYW5kCisJCQkgKi8KKwkJCXdha2V1cChjbSk7 CisJCX0KKwl9CisKKwkvKiBiKSBpbiB0aGUgd2FpdGluZyBxdWV1ZXMgKi8KKwl3aGlsZSAoKGNt ID0gYWFjX2RlcXVldWVfcmVhZHkoc2MpKSAhPSBOVUxMKSB7CisJCWNtLT5jbV9mbGFncyB8PSBB QUNfQ01EX1JFU0VUOworCisJCS8qIGlzIHRoZXJlIGEgY29tcGxldGlvbiBoYW5kbGVyPyAqLwor CQlpZiAoY20tPmNtX2NvbXBsZXRlICE9IE5VTEwpIHsKKwkJCWNtLT5jbV9jb21wbGV0ZShjbSk7 CisJCX0gZWxzZSB7CisJCQkvKiBhc3N1bWUgdGhhdCBzb21lb25lIGlzIHNsZWVwaW5nIG9uIHRo aXMKKwkJCSAqIGNvbW1hbmQKKwkJCSAqLworCQkJd2FrZXVwKGNtKTsKKwkJfQorCX0KKworCS8q IGZsdXNoIGRyaXZlcyAqLworCWlmIChhYWNfY2hlY2tfYWRhcHRlcl9oZWFsdGgoc2MsIE5VTEwp ID09IDApCisJCSh2b2lkKSBhYWNfc2h1dGRvd24oc2MtPmFhY19kZXYpOworCisJLyogZXhlY3V0 ZSBJT1AgcmVzZXQgKi8KKwlpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFDX1NVUFBPUlRF RF9NVV9SRVNFVCkgeworCQlBQUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfSVJDU1IsIEFBQ19JUkNT Ul9DT1JFU19SU1QpOworCisJCS8qIFdlIG5lZWQgdG8gd2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9y ZSBhY2Nlc3NpbmcgdGhlIE1VIGFnYWluCisJCSAqIDEwMDAwICogMTAwdXMgPSAxMDAwLDAwMHVz ID0gMTAwMG1zID0gMXMgIAorCQkgKi8KKwkJd2FpdENvdW50ID0gNSAqIDEwMDAwOworCQl3aGls ZSAod2FpdENvdW50KSB7CisJCQlERUxBWSgxMDApOwkJCS8qIGRlbGF5IDEwMCBtaWNyb3NlY29u ZHMgKi8KKwkJCXdhaXRDb3VudC0tOworCQl9CisJfSBlbHNlIGlmICgoYWFjX3N5bmNfY29tbWFu ZChzYywgCisJCUFBQ19JT1BfUkVTRVRfQUxXQVlTLCAwLCAwLCAwLCAwLCAmc3RhdHVzLCAmcmVz ZXRfbWFzaykpICE9IDApIHsKKwkJLyogY2FsbCBJT1BfUkVTRVQgZm9yIG9sZGVyIGZpcm13YXJl ICovCisJCWlmICgoYWFjX3N5bmNfY29tbWFuZChzYywgCisJCQlBQUNfSU9QX1JFU0VULCAwLCAw LCAwLCAwLCAmc3RhdHVzLCBOVUxMKSkgIT0gMCkgeworCisJCQlpZiAoc3RhdHVzID09IEFBQ19T UkJfU1RTX0lOVkFMSURfUkVRVUVTVCkKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAi SU9QX1JFU0VUIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJZWxzZQorCQkJCS8qIHByb2JhYmx5IHRp bWVvdXQgKi8KKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiSU9QX1JFU0VUIGZhaWxl ZFxuIik7CisKKwkJCS8qIHVud2luZCBhYWNfc2h1dGRvd24oKSAqLworCQkJYWFjX2FsbG9jX3N5 bmNfZmliKHNjLCAmZmliKTsKKwkJCXBjID0gKHN0cnVjdCBhYWNfcGF1c2VfY29tbWFuZCAqKSZm aWItPmRhdGFbMF07CisJCQlwYy0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJCXBj LT5UeXBlID0gQ1RfUEFVU0VfSU87CisJCQlwYy0+VGltZW91dCA9IDE7CisJCQlwYy0+TWluID0g MTsKKwkJCXBjLT5Ob1Jlc2NhbiA9IDE7CisKKwkJCSh2b2lkKSBhYWNfc3luY19maWIoc2MsIENv bnRhaW5lckNvbW1hbmQsIDAsIGZpYiwKKwkJCQlzaXplb2YgKHN0cnVjdCBhYWNfcGF1c2VfY29t bWFuZCkpOworCQkJYWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOworCisJCQlnb3RvIGZpbmlzaDsK KwkJfQorCX0gZWxzZSBpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFDX1NVUFBPUlRFRF9E T09SQkVMTF9SRVNFVCkgeworCQlBQUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfU1JDX0lEQlIsIHJl c2V0X21hc2spOworCQkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIDUgc2Vjb25kcyBiZWZvcmUgYWNj ZXNzaW5nIHRoZSBkb29yYmVsbCBhZ2FpbgorCQkgKiAxMDAwMCAqIDEwMHVzID0gMTAwMCwwMDB1 cyA9IDEwMDBtcyA9IDFzICAKKwkJICovCisJCXdhaXRDb3VudCA9IDUgKiAxMDAwMDsKKwkJd2hp bGUgKHdhaXRDb3VudCkgeworCQkJREVMQVkoMTAwKTsJCQkvKiBkZWxheSAxMDAgbWljcm9zZWNv bmRzICovCisJCQl3YWl0Q291bnQtLTsKKwkJfQorCX0KKworCS8qCisJICogUmUtcmVhZCBhbmQg cmVuZWdvdGlhdGUgdGhlIEZJQiBwYXJhbWV0ZXJzLCBhcyBvbmUgb2YgdGhlIGFjdGlvbnMKKwkg KiB0aGF0IGNhbiByZXN1bHQgZnJvbSBhbiBJT1AgcmVzZXQgaXMgdGhlIHJ1bm5pbmcgb2YgYSBu ZXcgZmlybXdhcmUKKwkgKiBpbWFnZS4KKwkgKi8KKwlvbGRfZmxhZ3MgPSBzYy0+ZmxhZ3M7CisJ LyoKKwkgKiBJbml0aWFsaXplIHRoZSBhZGFwdGVyLgorCSAqLworCWlmIChhYWNfY2hlY2tfZmly bXdhcmUoc2MpICE9IDApCisJCWdvdG8gZmluaXNoOworCWlmIChhYWNfaW5pdChzYykgIT0gMCkK KwkJZ290byBmaW5pc2g7CisKKwlpZiAoKG9sZF9mbGFncyAmIEFBQ19GTEFHU19ORVdfQ09NTSkg JiYKKwkJIShzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU0pKSB7CisJCS8qIHJlbWFwIGlu dGVycnVwdCBoYW5kbGVyICovCisJCWFhY19zZXR1cF9pbnRyKHNjKTsKKwl9CisKK2ZpbmlzaDoK KwlzYy0+YWFjX3N0YXRlICY9IH5BQUNfU1RBVEVfUkVTRVQ7CisJQUFDX1VOTUFTS19JTlRFUlJV UFRTKHNjKTsKKwlhYWNfc3RhcnRpbyhzYyk7CisJcmV0dXJuICgwKTsKK30KKwpkaWZmIC1wcnVO IG9sZC9hYWNfY2FtLmMgbmV3L2FhY19jYW0uYwotLS0gb2xkL2FhY19jYW0uYwkyMDExLTAzLTMx IDE0OjU3OjM0LjAwMDAwMDAwMCArMDAwMAorKysgbmV3L2FhY19jYW0uYwkyMDExLTA0LTAxIDEy OjU3OjAwLjAwMDAwMDAwMCArMDAwMApAQCAtNTM4LDcgKzUzOCw5IEBAIGFhY19jYW1fY29tcGxl dGUoc3RydWN0IGFhY19jb21tYW5kICpjbSkKIAljY2IgPSBjbS0+Y21fcHJpdmF0ZTsKIAlzcmJy ID0gKHN0cnVjdCBhYWNfc3JiX3Jlc3BvbnNlICopJmNtLT5jbV9maWItPmRhdGFbMF07CiAKLQlp ZiAoc3Jici0+ZmliX3N0YXR1cyAhPSAwKSB7CisJaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURf UkVTRVQpIHsKKwkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fU0NTSV9CVVNfUkVTRVQ7CisJfSBl bHNlIGlmIChzcmJyLT5maWJfc3RhdHVzICE9IDApIHsKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFj X2RldiwgIlBhc3N0aHJ1IEZJQiBmYWlsZWQhXG4iKTsKIAkJY2NiLT5jY2JfaC5zdGF0dXMgPSBD QU1fUkVRX0FCT1JURUQ7CiAJfSBlbHNlIHsKQEAgLTU4Myw5ICs1ODUsMTAgQEAgYWFjX2NhbV9j b21wbGV0ZShzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNtKQogCQkJCSAqIFdlIHdhbnQgREFTRCBhbmQg UFJPQyBkZXZpY2VzIHRvIG9ubHkgYmUKIAkJCQkgKiB2aXNpYmxlIHRocm91Z2ggdGhlIHBhc3Mg ZGV2aWNlLgogCQkJCSAqLwotCQkJCWlmICgoZGV2aWNlID09IFRfRElSRUNUKSB8fAotCQkJCSAg ICAoZGV2aWNlID09IFRfUFJPQ0VTU09SKSB8fAotCQkJCSAgICAoc2MtPmZsYWdzICYgQUFDX0ZM QUdTX0NBTV9QQVNTT05MWSkpCisJCQkJaWYgKChkZXZpY2UgPT0gVF9ESVJFQ1QgJiYgCisJCQkJ IAkhKHNjLT5hYWNfZmVhdHVyZV9iaXRzICYgQUFDX1NVUFBMX1NVUFBPUlRFRF9KQk9EKSkgfHwK KwkJCQkJKGRldmljZSA9PSBUX1BST0NFU1NPUikgfHwKKwkJCQkJKHNjLT5mbGFncyAmIEFBQ19G TEFHU19DQU1fUEFTU09OTFkpKQogCQkJCQljY2ItPmNzaW8uZGF0YV9wdHJbMF0gPQogCQkJCQkg ICAgKChkZXZpY2UgJiAweGUwKSB8IFRfTk9ERVZJQ0UpOwogCQkJCX0gZWxzZSBpZiAoY2NiLT5j Y2JfaC5zdGF0dXMgPT0gQ0FNX1NFTF9USU1FT1VUICYmCmRpZmYgLXBydU4gb2xkL2FhY19kaXNr LmMgbmV3L2FhY19kaXNrLmMKLS0tIG9sZC9hYWNfZGlzay5jCTIwMTEtMDMtMzEgMTQ6NTc6MzQu MDAwMDAwMDAwICswMDAwCisrKyBuZXcvYWFjX2Rpc2suYwkyMDExLTA0LTAxIDEzOjMyOjIwLjAw MDAwMDAwMCArMDAwMApAQCAtOTMsMjYgKzkzLDYwIEBAIERSSVZFUl9NT0RVTEUoYWFjZCwgYWFj LCBhYWNfZGlza19kcml2ZXIKIHN0YXRpYyBpbnQKIGFhY19kaXNrX29wZW4oc3RydWN0IGRpc2sg KmRwKQogewotCXN0cnVjdCBhYWNfZGlzawkqc2M7CisJc3RydWN0IGFhY19kaXNrCSpzY2Q7CisJ c3RydWN0IGFhY19zb2Z0YyAqc2M7CiAKIAlmd3ByaW50ZihOVUxMLCBIQkFfRkxBR1NfREJHX0ZV TkNUSU9OX0VOVFJZX0IsICIiKTsKIAotCXNjID0gKHN0cnVjdCBhYWNfZGlzayAqKWRwLT5kX2Ry djE7CisJc2NkID0gKHN0cnVjdCBhYWNfZGlzayAqKWRwLT5kX2RydjE7CiAJCi0JaWYgKHNjID09 IE5VTEwpIHsKKwlpZiAoc2NkID09IE5VTEwpIHsKIAkJcHJpbnRmKCJhYWNfZGlza19vcGVuOiBO byBTb2Z0Y1xuIik7CiAJCXJldHVybiAoRU5YSU8pOwogCX0KKwlzYyA9IHNjZC0+YWRfY29udHJv bGxlcjsKIAogCS8qIGNoZWNrIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgdXAgYW5kIHJ1bm5pbmcg Ki8KLQlpZiAoc2MtPmFkX2NvbnRyb2xsZXItPmFhY19zdGF0ZSAmIEFBQ19TVEFURV9TVVNQRU5E KSB7Ci0JCWRldmljZV9wcmludGYoc2MtPmFkX2NvbnRyb2xsZXItPmFhY19kZXYsCi0JCSAgICAi Q29udHJvbGxlciBTdXNwZW5kZWQgY29udHJvbGxlciBzdGF0ZSA9IDB4JXhcbiIsCi0JCSAgICBz Yy0+YWRfY29udHJvbGxlci0+YWFjX3N0YXRlKTsKLQkJcmV0dXJuKEVOWElPKTsKKwlpZiAoc2Mt PmFhY19zdGF0ZSAmIEFBQ19TVEFURV9TVVNQRU5EKSB7CisJCWRldmljZV9wcmludGYoc2MtPmFh Y19kZXYsIAorCQkJIkNvbnRyb2xsZXIgU3VzcGVuZGVkIGNvbnRyb2xsZXIgc3RhdGUgPSAweCV4 XG4iLAorCQkJc2MtPmFhY19zdGF0ZSk7CisJCXJldHVybiAoRU5YSU8pOworCX0gICAgICAgICAg CisKKwkvKiBhbHJlYWR5IG9wZW5lZD8gKi8KKwlpZiAoc2NkLT5hZF9mbGFncyAmIEFBQ19ESVNL X09QRU4pIAorCQlyZXR1cm4gKDApOworCisJLyogcG93ZXIgbWFuYWdlbWVudCAqLworCWlmIChz Yy0+YWFjX3N1cHBvcnRfb3B0MiAmIEFBQ19TVVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVCkgewor CQlzdHJ1Y3QgYWFjX2ZpYiAqZmliOworCQlzdHJ1Y3QgYWFjX2NudF9jb25maWcgKmNtZDsKKwor CQltdHhfbG9jaygmc2MtPmFhY19pb19sb2NrKTsKKwkJYWFjX2FsbG9jX3N5bmNfZmliKHNjLCAm ZmliKTsKKworCQkvKiBTdGFydCB1bml0ICovCisJCWNtZCA9IChzdHJ1Y3QgYWFjX2NudF9jb25m aWcgKikmZmliLT5kYXRhWzBdOworCQliemVybyhjbWQsIHNpemVvZiAoKmNtZCkgLSBDVF9QQUNL RVRfU0laRSk7CisJCWNtZC0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJY21kLT5D VENvbW1hbmQuY29tbWFuZCA9IENUX1BNX0RSSVZFUl9TVVBQT1JUOworCQljbWQtPkNUQ29tbWFu ZC5wYXJhbVswXSA9IEFBQ19QTV9EUklWRVJTVVBfU1RBUlRfVU5JVDsKKwkJY21kLT5DVENvbW1h bmQucGFyYW1bMV0gPSBzY2QtPmFkX2NvbnRhaW5lci0+Y29fbW50b2JqLk9iamVjdElkOworCQlj bWQtPkNUQ29tbWFuZC5wYXJhbVsyXSA9IDA7CS8qIDEgLSBpbW1lZGlhdGUgKi8KKworCQlpZiAo YWFjX3N5bmNfZmliKHNjLCBDb250YWluZXJDb21tYW5kLCAwLCBmaWIsCisJCQkJIHNpemVvZihz dHJ1Y3QgYWFjX2NudF9jb25maWcpKSB8fAorCQkJKih1X2ludDMyX3QgKikmZmliLT5kYXRhWzBd ICE9IDApIHsKKwkJCXByaW50ZigiUG93ZXIgTWFuYWdlbWVudDogRXJyb3Igc3RhcnRpbmcgY29u dGFpbmVyICVkXG4iLCAKKwkJCQlzY2QtPmFkX2NvbnRhaW5lci0+Y29fbW50b2JqLk9iamVjdElk KTsKKwkJfQorCisJCWFhY19yZWxlYXNlX3N5bmNfZmliKHNjKTsKKwkJbXR4X3VubG9jaygmc2Mt PmFhY19pb19sb2NrKTsKIAl9CiAKLQlzYy0+YWRfZmxhZ3MgfD0gQUFDX0RJU0tfT1BFTjsKKwlz Y2QtPmFkX2ZsYWdzIHw9IEFBQ19ESVNLX09QRU47CiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMTIy LDE2ICsxNTYsNTAgQEAgYWFjX2Rpc2tfb3BlbihzdHJ1Y3QgZGlzayAqZHApCiBzdGF0aWMgaW50 CiBhYWNfZGlza19jbG9zZShzdHJ1Y3QgZGlzayAqZHApCiB7Ci0Jc3RydWN0IGFhY19kaXNrCSpz YzsKKwlzdHJ1Y3QgYWFjX2Rpc2sJKnNjZDsKKwlzdHJ1Y3QgYWFjX3NvZnRjICpzYzsKIAogCWZ3 cHJpbnRmKE5VTEwsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwogCi0Jc2Mg PSAoc3RydWN0IGFhY19kaXNrICopZHAtPmRfZHJ2MTsKKwlzY2QgPSAoc3RydWN0IGFhY19kaXNr ICopZHAtPmRfZHJ2MTsKIAkKLQlpZiAoc2MgPT0gTlVMTCkKKwlpZiAoc2NkID09IE5VTEwpCiAJ CXJldHVybiAoRU5YSU8pOworCXNjID0gc2NkLT5hZF9jb250cm9sbGVyOworCisJLyogYWxyZWFk eSBjbG9zZWQ/ICovCisJaWYgKCEoc2NkLT5hZF9mbGFncyAmIEFBQ19ESVNLX09QRU4pKSAKKwkJ cmV0dXJuICgwKTsKKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlpZiAoc2MtPmFhY19zdXBw b3J0X29wdDIgJiBBQUNfU1VQUE9SVEVEX1BPV0VSX01BTkFHRU1FTlQpIHsKKwkJc3RydWN0IGFh Y19maWIgKmZpYjsKKwkJc3RydWN0IGFhY19jbnRfY29uZmlnICpjbWQ7CisKKwkJbXR4X2xvY2so JnNjLT5hYWNfaW9fbG9jayk7CisJCWFhY19hbGxvY19zeW5jX2ZpYihzYywgJmZpYik7CisKKwkJ LyogU3RvcCB1bml0ICovCisJCWNtZCA9IChzdHJ1Y3QgYWFjX2NudF9jb25maWcgKikmZmliLT5k YXRhWzBdOworCQliemVybyhjbWQsIHNpemVvZiAoKmNtZCkgLSBDVF9QQUNLRVRfU0laRSk7CisJ CWNtZC0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJY21kLT5DVENvbW1hbmQuY29t bWFuZCA9IENUX1BNX0RSSVZFUl9TVVBQT1JUOworCQljbWQtPkNUQ29tbWFuZC5wYXJhbVswXSA9 IEFBQ19QTV9EUklWRVJTVVBfU1RPUF9VTklUOworCQljbWQtPkNUQ29tbWFuZC5wYXJhbVsxXSA9 IHNjZC0+YWRfY29udGFpbmVyLT5jb19tbnRvYmouT2JqZWN0SWQ7CisJCWNtZC0+Q1RDb21tYW5k LnBhcmFtWzJdID0gMDsJLyogMSAtIGltbWVkaWF0ZSAqLworCisJCWlmIChhYWNfc3luY19maWIo c2MsIENvbnRhaW5lckNvbW1hbmQsIDAsIGZpYiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBhYWNfY250 X2NvbmZpZykpIHx8CisJCQkqKHVfaW50MzJfdCAqKSZmaWItPmRhdGFbMF0gIT0gMCkgeworCQkJ cHJpbnRmKCJQb3dlciBNYW5hZ2VtZW50OiBFcnJvciBzdG9wcGluZyBjb250YWluZXIgJWRcbiIs IAorCQkJCXNjZC0+YWRfY29udGFpbmVyLT5jb19tbnRvYmouT2JqZWN0SWQpOworCQl9CisKKwkJ YWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOworCQltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2sp OworCX0KIAotCXNjLT5hZF9mbGFncyAmPSB+QUFDX0RJU0tfT1BFTjsKKwlzY2QtPmFkX2ZsYWdz ICY9IH5BQUNfRElTS19PUEVOOwogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtcHJ1TiBvbGQvYWFj X2lvY3RsLmggbmV3L2FhY19pb2N0bC5oCi0tLSBvbGQvYWFjX2lvY3RsLmgJMjAxMS0wMy0zMSAx NTowMDozNS4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWNfaW9jdGwuaAkyMDExLTA0LTAxIDEz OjMzOjI5LjAwMDAwMDAwMCArMDAwMApAQCAtMTU3LDEyICsxNTcsMTIgQEAgdW5pb24gYWFjX3N0 YXRyZXF1ZXN0IHsKIHN0cnVjdCBhYWNfcmV2X2NoZWNrIHsKIAlSZXZDb21wb25lbnQJCWNhbGxp bmdDb21wb25lbnQ7CiAJc3RydWN0IEZzYVJldmlzaW9uCWNhbGxpbmdSZXZpc2lvbjsKLX07Cit9 IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWFjX3Jldl9jaGVja19yZXNwIHsKIAlpbnQJCQlwb3NzaWJs eUNvbXBhdGlibGU7CiAJc3RydWN0IEZzYVJldmlzaW9uCWFkYXB0ZXJTV1JldmlzaW9uOwotfTsK K30gX19wYWNrZWQ7CiAKIC8qCiAgKiBDb250ZXh0IHBhc3NlZCBpbiBieSBhIGNvbnN1bWVyIGxv b2tpbmcgdG8gY29sbGVjdCBhbiBBSUYuCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RydWN0IGdldF9h ZGFwdGVyX2ZpYl9pb2N0bCB7CiAJdV9pbnQzMl90CUFkYXB0ZXJGaWJDb250ZXh0OwogCWludAkg IAlXYWl0OwogCWNhZGRyX3QJCUFpZkZpYjsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWFj X3F1ZXJ5X2Rpc2sgewogCWludDMyX3QJCUNvbnRhaW5lck51bWJlcjsKQEAgLTE4NCw3ICsxODQs NyBAQCBzdHJ1Y3QgYWFjX3F1ZXJ5X2Rpc2sgewogCWludDMyX3QJCUluc3RhbmNlOwogCWNoYXIJ CWRpc2tEZXZpY2VOYW1lWzEwXTsKIAl1X2ludDMyX3QJVW5NYXBwZWQ7Ci19OworfSBfX3BhY2tl ZDsKIAogLyogRmVhdHVyZXMsIGFza2VkIGZyb20gdGhlIHRvb2xzIHRvIGtub3cgaWYgdGhlIGRy aXZlcgogICogc3VwcG9ydHMgZHJpdmVzID4yVEIKQEAgLTE5Miw3ICsxOTIsMTAgQEAgc3RydWN0 IGFhY19xdWVyeV9kaXNrIHsKIHR5cGVkZWYgdW5pb24gewogCXN0cnVjdCB7CiAJCXVfaW50MzJf dCBsYXJnZUxCQSAgOiAxOwkvKiBkaXNrIHN1cHBvcnQgZ3JlYXRlciAyVEIgKi8KLQkJdV9pbnQz Ml90IGZSZXNlcnZlZCA6IDMxOworCQl1X2ludDMyX3QgSW9jdGxCdWYgIDogMTsgICAgLyogQVJD SU9DVEwgY2FsbCBzdXBwb3J0ICovCisJCXVfaW50MzJfdCBBSUZTdXBwb3J0OiAxOyAgICAvKiBB SUYgc3VwcG9ydCAqLworCQl1X2ludDMyX3QgSkJPRFN1cHBvcnQ6MTsgICAgLyogZmlybXdhcmUg KyBkcml2ZXIgYm90aCBzdXBwb3J0IEpCT0QgKi8KKwkJdV9pbnQzMl90IGZSZXNlcnZlZCA6IDI4 OwogCX0gZkJpdHM7CiAJdV9pbnQzMl90IGZWYWx1ZTsKIH0gZmVhdHVyZXNTdGF0ZTsKZGlmZiAt cHJ1TiBvbGQvYWFjX3BjaS5jIG5ldy9hYWNfcGNpLmMKLS0tIG9sZC9hYWNfcGNpLmMJMjAxMS0w My0zMSAxNDo1NzozNC4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWNfcGNpLmMJMjAxMS0wNC0w MSAxMzo0MTowMC4wMDAwMDAwMDAgKzAwMDAKQEAgLTIsNyArMiw4IEBACiAgKiBDb3B5cmlnaHQg KGMpIDIwMDAgTWljaGFlbCBTbWl0aAogICogQ29weXJpZ2h0IChjKSAyMDAxIFNjb3R0IExvbmcK ICAqIENvcHlyaWdodCAoYykgMjAwMCBCU0RpCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgQWRhcHRl YywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAgQWRhcHRlYywgSW5jLgorICogQ29w eXJpZ2h0IChjKSAyMDEwIFBNQy1TaWVycmEsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CkBAIC0yNDMsMTUgKzI0NCw3IEBAIHN0cnVjdCBhYWNfaWRlbnQK IAl7MHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMmQwLCBBQUNfSFdJRl9JOTYwUlgsIDAsCiAJ ICJBZGFwdGVjIFJBSUQgNTI0NDUifSwKIAl7MHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMmQx LCBBQUNfSFdJRl9JOTYwUlgsIDAsCi0JICJBZGFwdGVjIFJBSUQgNTQwNSJ9LAotCXsweDkwMDUs IDB4MDI4NSwgMHg5MDA1LCAweDAyZDQsIEFBQ19IV0lGX0k5NjBSWCwgMCwKLQkgIkFkYXB0ZWMg UkFJRCAyMDQ1In0sCi0JezB4OTAwNSwgMHgwMjg1LCAweDkwMDUsIDB4MDJkNSwgQUFDX0hXSUZf STk2MFJYLCAwLAotCSAiQWRhcHRlYyBSQUlEIDI0MDUifSwKLQl7MHg5MDA1LCAweDAyODUsIDB4 OTAwNSwgMHgwMmQ2LCBBQUNfSFdJRl9JOTYwUlgsIDAsCi0JICJBZGFwdGVjIFJBSUQgMjQ0NSJ9 LAotCXsweDkwMDUsIDB4MDI4NSwgMHg5MDA1LCAweDAyZDcsIEFBQ19IV0lGX0k5NjBSWCwgMCwK LQkgIkFkYXB0ZWMgUkFJRCAyODA1In0sCisgICAgICAgICJBZGFwdGVjIFJBSUQgNTQwNSJ9LAog CXsweDkwMDUsIDB4MDI4NiwgMHgxMDE0LCAweDk1ODAsIEFBQ19IV0lGX1JLVCwgMCwKIAkgIklC TSBTZXJ2ZVJBSUQtOGsifSwKIAl7MHg5MDA1LCAweDAyODUsIDB4MTAxNCwgMHgwMzRkLCBBQUNf SFdJRl9JOTYwUlgsIDAsCkBAIC0yODQsNiArMjc3LDggQEAgYWFjX2ZhbWlseV9pZGVudGlmaWVy c1tdID0gewogCSAiQWRhcHRlYyBSQUlEIENvbnRyb2xsZXIifSwKIAl7MHg5MDA1LCAweDAyODYs IDAsIDAsIEFBQ19IV0lGX1JLVCwgMCwKIAkgIkFkYXB0ZWMgUkFJRCBDb250cm9sbGVyIn0sCisJ ezB4OTAwNSwgMHgwMjhiLCAwLCAwLCBBQUNfSFdJRl9TUkMsIDAsCisJICJBZGFwdGVjIFJBSUQg Q29udHJvbGxlciJ9LAogCXswLCAwLCAwLCAwLCAwLCAwLCAwfQogfTsKIApAQCAtMzY5LDYgKzM2 NCw0MCBAQCBhYWNfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAJCWdvdG8gb3V0OwogCX0KIAor CS8qIAorCSAqIERldGVjdCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHZlcnNpb24sIHNldCB1cCB0 aGUgYnVzIGludGVyZmFjZQorCSAqIGluZGlyZWN0aW9uLgorCSAqLworCWlkID0gYWFjX2ZpbmRf aWRlbnQoZGV2KTsKKwlzYy0+YWFjX2h3aWYgPSBpZC0+aHdpZjsKKwlzd2l0Y2goc2MtPmFhY19o d2lmKSB7CisJY2FzZSBBQUNfSFdJRl9JOTYwUlg6CisJY2FzZSBBQUNfSFdJRl9OQVJLOgorCQlm d3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIGk5 NjBSeC9OQVJLIik7CisJCXNjLT5hYWNfaWYgPSBhYWNfcnhfaW50ZXJmYWNlOworCQlicmVhazsK KwljYXNlIEFBQ19IV0lGX1NUUk9OR0FSTToKKwkJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdf SU5JVF9CLCAic2V0IGhhcmR3YXJlIHVwIGZvciBTdHJvbmdBUk0iKTsKKwkJc2MtPmFhY19pZiA9 IGFhY19zYV9pbnRlcmZhY2U7CisJCWJyZWFrOworCWNhc2UgQUFDX0hXSUZfUktUOgorCQlmd3By aW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIFJvY2tl dC9NSVBTIik7CisJCXNjLT5hYWNfaWYgPSBhYWNfcmt0X2ludGVyZmFjZTsKKwkJYnJlYWs7CisJ Y2FzZSBBQUNfSFdJRl9TUkM6CisJCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0lOSVRfQiwg InNldCBoYXJkd2FyZSB1cCBmb3IgUE1DIFNSQyIpOworCQlzYy0+YWFjX2lmID0gYWFjX3NyY19p bnRlcmZhY2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNjLT5hYWNfaHdpZiA9IEFBQ19IV0lG X1VOS05PV047CisJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJ1bmtub3duIGhhcmR3YXJl IHR5cGVcbiIpOworCQllcnJvciA9IEVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhc3N1 bWUgZmFpbHVyZSBpcyAnb3V0IG9mIG1lbW9yeScgKi8KKwllcnJvciA9IEVOT01FTTsKKwogCS8q CiAJICogQWxsb2NhdGUgdGhlIFBDSSByZWdpc3RlciB3aW5kb3cuCiAJICovCkBAIC0zODIsOCAr NDExLDggQEAgYWFjX3BjaV9hdHRhY2goZGV2aWNlX3QgZGV2KQogCXNjLT5hYWNfYnRhZzAgPSBy bWFuX2dldF9idXN0YWcoc2MtPmFhY19yZWdzX3JlczApOwogCXNjLT5hYWNfYmhhbmRsZTAgPSBy bWFuX2dldF9idXNoYW5kbGUoc2MtPmFhY19yZWdzX3JlczApOwogCi0JaWYgKHNjLT5hYWNfaHdp ZiA9PSBBQUNfSFdJRl9OQVJLKSB7Ci0JCXNjLT5hYWNfcmVnc19yaWQxID0gUENJUl9CQVIoMSk7 CisJaWYgKHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9TUkMgfHwgc2MtPmFhY19od2lmID09IEFB Q19IV0lGX05BUkspIHsKKwkJc2MtPmFhY19yZWdzX3JpZDEgPSBQQ0lSX0JBUigyKTsKIAkJaWYg KChzYy0+YWFjX3JlZ3NfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2MtPmFhY19kZXYs CiAJCSAgICBTWVNfUkVTX01FTU9SWSwgJnNjLT5hYWNfcmVnc19yaWQxLCBSRl9BQ1RJVkUpKSA9 PSBOVUxMKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LApAQCAtNDE5LDMzICs0NDgs NiBAQCBhYWNfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAJCWdvdG8gb3V0OwogCX0KIAotCS8q IAotCSAqIERldGVjdCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHZlcnNpb24sIHNldCB1cCB0aGUg YnVzIGludGVyZmFjZQotCSAqIGluZGlyZWN0aW9uLgotCSAqLwotCWlkID0gYWFjX2ZpbmRfaWRl bnQoZGV2KTsKLQlzYy0+YWFjX2h3aWYgPSBpZC0+aHdpZjsKLQlzd2l0Y2goc2MtPmFhY19od2lm KSB7Ci0JY2FzZSBBQUNfSFdJRl9JOTYwUlg6Ci0JY2FzZSBBQUNfSFdJRl9OQVJLOgotCQlmd3By aW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIGk5NjBS eC9OQVJLIik7Ci0JCXNjLT5hYWNfaWYgPSBhYWNfcnhfaW50ZXJmYWNlOwotCQlicmVhazsKLQlj YXNlIEFBQ19IV0lGX1NUUk9OR0FSTToKLQkJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfSU5J VF9CLCAic2V0IGhhcmR3YXJlIHVwIGZvciBTdHJvbmdBUk0iKTsKLQkJc2MtPmFhY19pZiA9IGFh Y19zYV9pbnRlcmZhY2U7Ci0JCWJyZWFrOwotCWNhc2UgQUFDX0hXSUZfUktUOgotCQlmd3ByaW50 ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIFJvY2tldC9N SVBTIik7Ci0JCXNjLT5hYWNfaWYgPSBhYWNfcmt0X2ludGVyZmFjZTsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJc2MtPmFhY19od2lmID0gQUFDX0hXSUZfVU5LTk9XTjsKLQkJZGV2aWNlX3ByaW50 ZihzYy0+YWFjX2RldiwgInVua25vd24gaGFyZHdhcmUgdHlwZVxuIik7Ci0JCWVycm9yID0gRU5Y SU87Ci0JCWdvdG8gb3V0OwotCX0KLQogCS8qIFNldCB1cCBxdWlya3MgKi8KIAlzYy0+ZmxhZ3Mg PSBpZC0+cXVpcmtzOwogCmRpZmYgLXBydU4gb2xkL2FhY3JlZy5oIG5ldy9hYWNyZWcuaAotLS0g b2xkL2FhY3JlZy5oCTIwMTEtMDMtMzEgMTQ6NTc6MzQuMDAwMDAwMDAwICswMDAwCisrKyBuZXcv YWFjcmVnLmgJMjAxMS0wNC0wMSAxMzo0Njo1MS4wMDAwMDAwMDAgKzAwMDAKQEAgLTIsNyArMiw4 IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgTWljaGFlbCBTbWl0aAogICogQ29weXJpZ2h0IChj KSAyMDAwLTIwMDEgU2NvdHQgTG9uZwogICogQ29weXJpZ2h0IChjKSAyMDAwIEJTRGkKLSAqIENv cHlyaWdodCAoYykgMjAwMSBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAx MCBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUE1DLVNpZXJyYSwgSW5jLgog ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMyw2ICsxMjQs MTQgQEAgc3RydWN0IGFhY19xdWV1ZV90YWJsZSB7CiAjZGVmaW5lIEFBQ19BREFQX05PUk1fUkVT UF9RVUVVRQk2CiAjZGVmaW5lIEFBQ19BREFQX0hJR0hfUkVTUF9RVUVVRQk3CiAKKy8qIHRyYW5z cG9ydCBGSUIgaGVhZGVyIChQTUMpICovCitzdHJ1Y3QgYWFjX2ZpYl94cG9ydGhkciB7CisJdV9p bnQ2NF90CUhvc3RBZGRyZXNzOwkvKiBGSUIgaG9zdCBhZGRyZXNzIHcvbyB4cG9ydCBoZWFkZXIg Ki8KKwl1X2ludDMyX3QJU2l6ZTsJCQkvKiBGSUIgc2l6ZSBleGNsdWRpbmcgeHBvcnQgaGVhZGVy ICovCisJdV9pbnQzMl90CUhhbmRsZTsJCQkvKiBkcml2ZXIgaGFuZGxlIHRvIHJlZmVyZW5jZSB0 aGUgRklCICovCisJdV9pbnQ2NF90CVJlc2VydmVkWzJdOworfSBfX3BhY2tlZDsKKwogLyoKICAq IExpc3Qgc3RydWN0dXJlIHVzZWQgdG8gY2hhaW4gRklCcyAodXNlZCBieSB0aGUgYWRhcHRlciAt IHdlIGhhbmcgRklCcyBvZmYKICAqIG91ciBwcml2YXRlIGNvbW1hbmQgc3RydWN0dXJlIGFuZCBk b24ndCB0b3VjaCB0aGVzZSkKQEAgLTI2OCw2ICsyNzcsNyBAQCB0eXBlZGVmIGVudW0gewogI2Rl ZmluZSBBQUNfRklCU1RBVEVfQklPU0ZJQgkJKDE8PDE4KQogI2RlZmluZSBBQUNfRklCU1RBVEVf RkFTVF9SRVNQT05TRQkoMTw8MTkpCS8qIGZhc3QgcmVzcG9uc2UgY2FwYWJsZSAqLwogI2RlZmlu ZSBBQUNfRklCU1RBVEVfQVBJRklCCQkoMTw8MjApCisjZGVmaW5lIEFBQ19GSUJTVEFURV9OT01P UkVBSUYJCSgxPDwyMSkKIAogLyoKICAqIEZJQiBlcnJvciB2YWx1ZXMKQEAgLTI5MCw2ICszMDAs NyBAQCBzdHJ1Y3QgYWFjX2FkYXB0ZXJfaW5pdCB7CiAJdV9pbnQzMl90CUluaXRTdHJ1Y3RSZXZp c2lvbjsKICNkZWZpbmUgQUFDX0lOSVRfU1RSVUNUX1JFVklTSU9OCQkzCiAjZGVmaW5lIEFBQ19J TklUX1NUUlVDVF9SRVZJU0lPTl80CQk0CisjZGVmaW5lIEFBQ19JTklUX1NUUlVDVF9SRVZJU0lP Tl82CQk2CiAJdV9pbnQzMl90CU1pbmlQb3J0UmV2aXNpb247CiAjZGVmaW5lIEFBQ19JTklUX1NU UlVDVF9NSU5JUE9SVF9SRVZJU0lPTgkxCiAJdV9pbnQzMl90CUZpbGVzeXN0ZW1SZXZpc2lvbjsK QEAgLTMwNiwxMiArMzE3LDE4IEBAIHN0cnVjdCBhYWNfYWRhcHRlcl9pbml0IHsKIAl1X2ludDMy X3QJSG9zdEVsYXBzZWRTZWNvbmRzOwogCS8qIEFEQVBURVJfSU5JVF9TVFJVQ1RfUkVWSVNJT05f NCBiZWdpbnMgaGVyZSAqLwogCXVfaW50MzJfdAlJbml0RmxhZ3M7CQkJLyogZmxhZ3MgZm9yIHN1 cHBvcnRlZCBmZWF0dXJlcyAqLwotI2RlZmluZQlBQUNfSU5JVEZMQUdTX05FV19DT01NX1NVUFBP UlRFRAkxCi0jZGVmaW5lCUFBQ19JTklURkxBR1NfRFJJVkVSX1VTRVNfVVRDX1RJTUUJMHgxMAot I2RlZmluZQlBQUNfSU5JVEZMQUdTX0RSSVZFUl9TVVBQT1JUU19QTQkweDIwCisjZGVmaW5lIEFB Q19JTklURkxBR1NfTkVXX0NPTU1fU1VQUE9SVEVECTEKKyNkZWZpbmUgQUFDX0lOSVRGTEFHU19E UklWRVJfVVNFU19VVENfVElNRQkweDEwCisjZGVmaW5lIEFBQ19JTklURkxBR1NfRFJJVkVSX1NV UFBPUlRTX1BNCTB4MjAKKyNkZWZpbmUgQUFDX0lOSVRGTEFHU19ORVdfQ09NTV9UWVBFMV9TVVBQ T1JURUQgIDB4NDEKIAl1X2ludDMyX3QJTWF4SW9Db21tYW5kczsJCS8qIG1heCBvdXRzdGFuZGlu ZyBjb21tYW5kcyAqLwogCXVfaW50MzJfdAlNYXhJb1NpemU7CQkJLyogbGFyZ2VzdCBJL08gY29t bWFuZCAqLwogCXVfaW50MzJfdAlNYXhGaWJTaXplOwkJCS8qIGxhcmdlc3QgRklCIHRvIGFkYXB0 ZXIgKi8KKwkvKiBBREFQVEVSX0lOSVRfU1RSVUNUX1JFVklTSU9OXzUgYmVnaW5zIGhlcmUgKi8K Kwl1X2ludDMyX3QJTWF4TnVtQWlmOwkgICAgICAgIC8qIG1heCBudW1iZXIgb2YgYWlmICovIAor CS8qIEFEQVBURVJfSU5JVF9TVFJVQ1RfUkVWSVNJT05fNiBiZWdpbnMgaGVyZSAqLworCXVfaW50 MzJfdAlIb3N0UlJRX0FkZHJMb3c7CisJdV9pbnQzMl90CUhvc3RSUlFfQWRkckhpZ2g7CS8qIEhv c3QgUlJRIChyZXNwb25zZSBxdWV1ZSkgZm9yIFNSQyAqLwogfSBfX3BhY2tlZDsKIAogLyoKQEAg LTU3OCw2ICs1OTUsNyBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgQUFDX1NVUFBPUlRFRF9ORVdf Q09NTQkJMHgyMDAwMAogI2RlZmluZSBBQUNfU1VQUE9SVEVEXzY0QklUX0FSUkFZU0laRQkweDQw MDAwCiAjZGVmaW5lIEFBQ19TVVBQT1JURURfSEVBVF9TRU5TT1IJMHg4MDAwMAorI2RlZmluZSBB QUNfU1VQUE9SVEVEX05FV19DT01NX1RZUEUxCTB4MTAwMDAwMDAgIC8qIFBNQyB0eXBlIG5ldyBj b21tICovCiAKIC8qIAogICogU3RydWN0dXJlIHVzZWQgdG8gcmVzcG9uZCB0byBhIFJlcXVlc3RB ZGFwdGVySW5mbyBmaWIuCkBAIC02MDYsNiArNjI0LDIwIEBAIHN0cnVjdCBhYWNfYWRhcHRlcl9p bmZvIHsKIAlBQUNfT2VtRmxhdm9yCU9lbVZhcmlhbnQ7CiB9IF9fcGFja2VkOwogCisvKgorICog TW9yZSBvcHRpb25zIGZyb20gc3VwcGxlbWVudCBpbmZvIC0gU3VwcG9ydGVkT3B0aW9uczIKKyAq LworI2RlZmluZSBBQUNfU1VQUE9SVEVEX01VX1JFU0VUCQkJMHgwMQorI2RlZmluZSBBQUNfU1VQ UE9SVEVEX0lHTk9SRV9SRVNFVAkJMHgwMgorI2RlZmluZSBBQUNfU1VQUE9SVEVEX1BPV0VSX01B TkFHRU1FTlQJCTB4MDQKKyNkZWZpbmUgQUFDX1NVUFBPUlRFRF9BUkNJT19QSFlERVYJCTB4MDgK KyNkZWZpbmUgQUFDX1NVUFBPUlRFRF9ET09SQkVMTF9SRVNFVAkJMHg0MDAwCisKKy8qCisgKiBG ZWF0dXJlQml0cyBvZiBSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJbmZvIHVzZWQgaW4gdGhlIGRy aXZlcgorICovCisjZGVmaW5lIEFBQ19TVVBQTF9TVVBQT1JURURfSkJPRAkweDA4MDAwMDAwCisK IC8qIAogICogU3RydWN0dXJlIHVzZWQgdG8gcmVzcG9uZCB0byBhIFJlcXVlc3RTdXBwbGVtZW50 QWRhcHRlckluZm8gZmliLgogICovCkBAIC02NTQsOCArNjg2LDEyIEBAIHN0cnVjdCBhYWNfc3Vw cGxlbWVudF9hZGFwdGVyX2luZm8gewogCXVfaW50OF90CQlNZmdQY2JhU2VyaWFsTm9bTUZHX1BD QkFfU0VSSUFMX05VTUJFUl9XSURUSF07CiAJLyogV1dOIGZyb20gdGhlIE1GRyBzZWN0b3IgKi8K IAl1X2ludDhfdAkJTWZnV1dOTmFtZVtNRkdfV1dOX1dJRFRIXTsKLQkvKiBHcm93dGggQXJlYSBm b3IgZnV0dXJlIGV4cGFuc2lvbiAoKDcqNCkgLSAxMiAtIDgpLzQgPSAyIHdvcmRzICovCi0JdV9p bnQzMl90CVJlc2VydmVkR3Jvd3RoWzJdOworCXVfaW50MzJfdAlTdXBwb3J0ZWRPcHRpb25zMjsJ CS8qIG1vcmUgc3VwcG9ydGVkIGZlYXR1cmVzICovCisJdV9pbnQzMl90CUV4cGFuc2lvbkZsYWc7 CQkJLyogMSAtIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdV9pbnQzMl90CUZlYXR1 cmVCaXRzMzsKKwl1X2ludDMyX3QJU3VwcG9ydGVkUGVyZm9ybWFuY2VNb2RlOworCS8qIEdyb3d0 aCBBcmVhIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdV9pbnQzMl90CVJlc2VydmVkR3Jvd3Ro WzgwXTsKIH0gX19wYWNrZWQ7CiAKIC8qCkBAIC02NzUsNiArNzExLDggQEAgc3RydWN0IGFhY19z dXBwbGVtZW50X2FkYXB0ZXJfaW5mbyB7CiAjZGVmaW5lIEFBQ19NT05LRVJfUkNWVEVNUAkweDI1 CiAjZGVmaW5lIEFBQ19NT05LRVJfR0VUQ09NTVBSRUYJMHgyNgogI2RlZmluZSBBQUNfTU9OS0VS X1JFSU5JVAkweGVlCisjZGVmaW5lCUFBQ19JT1BfUkVTRVQJCTB4MTAwMAorI2RlZmluZQlBQUNf SU9QX1JFU0VUX0FMV0FZUwkweDEwMDEKIAogLyoKICAqICBBZGFwdGVyIFN0YXR1cyBSZWdpc3Rl cgpAQCAtMTAwNCw3ICsxMDQyLDggQEAgdHlwZWRlZiBlbnVtIHsKIAlBaWZSZXFTZW5kQVBJUmVw b3J0LAkvKiBBUEkgZ2VuZXJpYyByZXBvcnQgcmVxdWVzdHMgKi8KIAlBaWZSZXFBUElKb2JTdGFy dCwJLyogU3RhcnQgYSBqb2IgZnJvbSB0aGUgQVBJICovCiAJQWlmUmVxQVBJSm9iVXBkYXRlLAkv KiBVcGRhdGUgYSBqb2IgcmVwb3J0IGZyb20gdGhlIEFQSSAqLwotCUFpZlJlcUFQSUpvYkZpbmlz aAkvKiBGaW5pc2ggYSBqb2IgZnJvbSB0aGUgQVBJICovCisJQWlmUmVxQVBJSm9iRmluaXNoLAkv KiBGaW5pc2ggYSBqb2IgZnJvbSB0aGUgQVBJICovCisJQWlmUmVxRXZlbnQgPSAyMDAJLyogUE1D IE5FVyBDT01NOiBSZXF1ZXN0IHRoZSBldmVudCBkYXRhICovCiB9IEFBQ19BaWZDb21tYW5kOwog CiBzdHJ1Y3QgYWFjX2FpZl9jb21tYW5kIHsKQEAgLTExNDMsNiArMTE4Miw0MiBAQCB0eXBlZGVm IGVudW0gX1ZNX0NPTU1BTkRTIHsKIAlWTV9OYW1lU2VydmU2NAkJIAogfSBBQUNfVk1Db21tYW5k OwogCisvKiBDb250YWluZXIgQ29uZmlndXJhdGlvbiBTdWItQ29tbWFuZHMgKi8KKyNkZWZpbmUg Q1RfR0VUX1NDU0lfTUVUSE9ECTY0CisjZGVmaW5lCUNUX1BBVVNFX0lPCQkJNjUKKyNkZWZpbmUJ Q1RfUkVMRUFTRV9JTwkJCTY2CisjZGVmaW5lCUNUX0dFVF9DT05GSUdfU1RBVFVTCQkxNDcKKyNk ZWZpbmUJQ1RfQ09NTUlUX0NPTkZJRwkJMTUyCisjZGVmaW5lIENUX1BNX0RSSVZFUl9TVVBQT1JU CQkyNDUKKworLyogQ1RfUE1fRFJJVkVSX1NVUFBPUlQgcGFyYW1ldGVyICovCit0eXBlZGVmIGVu dW0geworCUFBQ19QTV9EUklWRVJTVVBfR0VUX1NUQVRVUyA9IDEsCisJQUFDX1BNX0RSSVZFUlNV UF9TVEFSVF9VTklULAorCUFBQ19QTV9EUklWRVJTVVBfU1RPUF9VTklUCit9IEFBQ19DVF9QTV9E UklWRVJfU1VQUE9SVF9TVUJfQ09NOworCisvKgorICogQ1RfUEFVU0VfSU8gaXMgaW1tZWRpYXRl IG1pbmltYWwgcnVudGltZSBjb21tYW5kIHRoYXQgaXMgdXNlZAorICogdG8gcmVzdGFydCB0aGUg YXBwbGljYXRpb25zIGFuZCBjYWNoZS4KKyAqLworc3RydWN0IGFhY19wYXVzZV9jb21tYW5kIHsK Kwl1X2ludDMyX3QJQ29tbWFuZDsKKwl1X2ludDMyX3QJVHlwZTsKKwl1X2ludDMyX3QJVGltZW91 dDsKKwl1X2ludDMyX3QJTWluOworCXVfaW50MzJfdAlOb1Jlc2NhbjsKKwl1X2ludDMyX3QJUGFy bTM7CisJdV9pbnQzMl90CVBhcm00OworCXVfaW50MzJfdAlDb3VudDsKK30gX19wYWNrZWQ7CisK Ky8qIEZsYWcgdmFsdWVzIGZvciBDb250ZW50U3RhdGUgKi8KKyNkZWZpbmUgQUFDX0ZTQ1NfTk9U Q0xFQU4JMHgxCS8qIGZzY2hlY2sgaXMgbmVjZXNzYXJ5IGJlZm9yZSBtb3VudGluZyAqLworI2Rl ZmluZSBBQUNfRlNDU19SRUFET05MWQkweDIJLyogcG9zc2libGUgcmVzdWx0IG9mIGJyb2tlbiBt aXJyb3IgKi8KKyNkZWZpbmUgQUFDX0ZTQ1NfSElEREVOCQkweDQJLyogY29udGFpbmVyIHNob3Vs ZCBiZSBpZ25vcmVkIGJ5IGRyaXZlciAqLworI2RlZmluZSBBQUNfRlNDU19OT1RfUkVBRFkJMHg4 CS8qIGNudCBpcyBpbiBzcGlubi4gc3RhdGUsIG5vdCByZHkgZm9yIElPJ3MgKi8KKwogLyoKICAq ICJtb3VudGFibGUgb2JqZWN0IgogICovCkBAIC0xMTg3LDcgKzEyNjIsNiBAQCBzdHJ1Y3QgYWFj X2Nsb3NlY29tbWFuZCB7CiAvKgogICogQ29udGFpbmVyIENvbmZpZyBDb21tYW5kCiAgKi8KLSNk ZWZpbmUgQ1RfR0VUX1NDU0lfTUVUSE9ECTY0CiBzdHJ1Y3QgYWFjX2N0Y2ZnIHsKIAl1X2ludDMy X3QJCUNvbW1hbmQ7CiAJdV9pbnQzMl90CQljbWQ7CkBAIC0xMzA5LDYgKzEzODMsMjQgQEAgdHlw ZWRlZiBlbnVtIHsKIAlDTVVOU1RBQkxFCiB9IEFBQ19Db21taXRMZXZlbDsKIAorCisjZGVmaW5l CUNUX0ZJQl9QQVJBTVMJCQk2CisjZGVmaW5lCU1BWF9GSUJfUEFSQU1TCQkJMTAKKyNkZWZpbmUJ Q1RfUEFDS0VUX1NJWkUgXAorCShBQUNfRklCX0RBVEFTSVpFIC0gc2l6ZW9mICh1X2ludDMyX3Qp IC0gXAorCSgoc2l6ZW9mICh1X2ludDMyX3QpKSAqIChNQVhfRklCX1BBUkFNUyArIDEpKSkKKwor c3RydWN0IGFhY19mc2FfY3RtIHsKKwl1X2ludDMyX3QJY29tbWFuZDsKKwl1X2ludDMyX3QJcGFy YW1bQ1RfRklCX1BBUkFNU107CisJaW50OF90CQlkYXRhW0NUX1BBQ0tFVF9TSVpFXTsKK307CisK K3N0cnVjdCBhYWNfY250X2NvbmZpZyB7CisJdV9pbnQzMl90CQlDb21tYW5kOworCXN0cnVjdCBh YWNfZnNhX2N0bQlDVENvbW1hbmQ7Cit9OworCiAvKgogICogQmxvY2sgcmVhZC93cml0ZSBvcGVy YXRpb25zLgogICogVGhlc2Ugc3RydWN0dXJlcyBhcmUgcGFja2VkIGludG8gdGhlICdkYXRhJyBh cmVhIGluIHRoZSBGSUIuCkBAIC0xMzc4LDcgKzE0NzAsNyBAQCBzdHJ1Y3QgYWFjX3Jhd19pbyB7 CiBzdHJ1Y3QgYWFjX2Nsb3NlX2NvbW1hbmQgewogCXVfaW50MzJfdAkJQ29tbWFuZDsKIAl1X2lu dDMyX3QJCUNvbnRhaW5lcklkOwotfTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBTQ1NJIFBhc3N0 aHJvdWdoIHN0cnVjdHVyZXMKQEAgLTEzOTUsNyArMTQ4Nyw3IEBAIHN0cnVjdCBhYWNfc3JiIHsK IAl1X2ludDMyX3QJCWNkYl9sZW47CiAJdV9pbnQ4X3QJCWNkYlsxNl07CiAJc3RydWN0IGFhY19z Z190YWJsZQlzZ19tYXA7Ci19OworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJQUFDX1NSQl9GVU5D X0VYRUNVVEVfU0NTSQk9IDB4MDAsCkBAIC0xNDM2LDcgKzE1MjgsNyBAQCBzdHJ1Y3QgYWFjX3Ny Yl9yZXNwb25zZSB7CiAJdV9pbnQzMl90CWRhdGFfbGVuOwogCXVfaW50MzJfdAlzZW5zZV9sZW47 CiAJdV9pbnQ4X3QJc2Vuc2VbQUFDX0hPU1RfU0VOU0VfREFUQV9NQVhdOwotfTsKK30gX19wYWNr ZWQ7CiAKIC8qCiAgKiBTdGF0dXMgY29kZXMgZm9yIFNDU0kgcGFzc3Rocm91Z2ggY29tbWFuZHMu ICBTaW5jZSB0aGV5IGFyZSBiYXNlZCBvbiBBU1BJLApAQCAtMTUzMSw2ICsxNjIzLDI5IEBAIGVu dW0gewogI2RlZmluZSBBQUNfUktUX0ZXU1RBVFVTCTB4MTAxYwkvKiBGaXJtd2FyZSBTdGF0dXMg KG1haWxib3ggNykgKi8KIAogLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgQWRh cHRlYyBQTUMgU1JDIGFkYXB0ZXJzLgorICovCisvKiBhY2Nlc3NpYmxlIHZpYSBCQVIwICovCisj ZGVmaW5lIEFBQ19TUkNfT01SCQkJMHhiYwkvKiBvdXRib3VuZCBtZXNzYWdlIHJlZ2lzdGVyICov CisjZGVmaW5lIEFBQ19TUkNfSURCUgkJMHgyMAkvKiBpbmJvdW5kIGRvb3JiZWxsIHJlZ2lzdGVy ICovCisjZGVmaW5lIEFBQ19TUkNfSUlTUgkJMHgyNAkvKiBpbmJvdW5kIGludGVycnVwdCBzdGF0 dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUFDX1NSQ19PREJSX1IJCTB4OWMJLyogb3V0Ym91bmQg ZG9vcmJlbGwgcmVnaXN0ZXIgcmVhZCAqLworI2RlZmluZSBBQUNfU1JDX09EQlJfQwkJMHhhMAkv KiBvdXRib3VuZCBkb29yYmVsbCByZWdpc3RlciBjbGVhciAqLworI2RlZmluZSBBQUNfU1JDX09J TVIJCTB4MzQJLyogb3V0Ym91bmQgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUg QUFDX1NSQ19JUVVFX0wJCTB4YzAJLyogaW5ib3VuZCBxdWV1ZSBhZGRyZXNzIChsb3cpICovCisj ZGVmaW5lIEFBQ19TUkNfSVFVRV9ICQkweGM0CS8qIGluYm91bmQgcXVldWUgYWRkcmVzcyAoaGln aCkgKi8KKworI2RlZmluZSBBQUNfU1JDX01BSUxCT1gJCTB4N2ZjNjAJLyogbWFpbGJveCAoMjAg Ynl0ZXMpICovCisKKyNkZWZpbmUgQUFDX1NSQ19PRFJfU0hJRlQgCTEyCQkvKiBvdXRib3VuZCBk b29yYmVsbCBzaGlmdCAqLworI2RlZmluZSBBQUNfU1JDX0lEUl9TSElGVCAJOQkJLyogaW5ib3Vu ZCBkb29yYmVsbCBzaGlmdCAqLworCisvKiBTdW5yaXNlIExha2UgZHVhbCBjb3JlIHJlc2V0ICov CisjZGVmaW5lIEFBQ19JUkNTUgkJMHgzOAkvKiBpbmJvdW5kIGR1YWwgY29yZXMgcmVzZXQgKi8K KyNkZWZpbmUgQUFDX0lSQ1NSX0NPUkVTX1JTVAkzCisKKworLyoKICAqIENvbW1vbiBiaXQgZGVm aW5pdGlvbnMgZm9yIHRoZSBkb29yYmVsbCByZWdpc3RlcnMuCiAgKi8KIApAQCAtMTU0Miw2ICsx NjU3LDkgQEAgZW51bSB7CiAjZGVmaW5lIEFBQ19EQl9SRVNQT05TRV9SRUFEWQkoMTw8MikJLyog b25lIG9yIG1vcmUgY29tbWFuZHMgY29tcGxldGUgKi8KICNkZWZpbmUgQUFDX0RCX0NPTU1BTkRf Tk9UX0ZVTEwJKDE8PDMpCS8qIGNvbW1hbmQgcXVldWUgbm90IGZ1bGwgKi8KICNkZWZpbmUgQUFD X0RCX1JFU1BPTlNFX05PVF9GVUxMICgxPDw0KQkvKiByZXNwb25zZSBxdWV1ZSBub3QgZnVsbCAq LworI2RlZmluZSBBQUNfREJfQUlGX1BFTkRJTkcJCSgxPDw2KQkvKiBwZW5kaW5nIEFJRiAobmV3 IGNvbW0uIHR5cGUxKSAqLworLyogUE1DIHNwZWNpZmljIG91dGJvdW5kIGRvb3JiZWxsIGJpdHMg Ki8KKyNkZWZpbmUgQUFDX0RCX1JFU1BPTlNFX1NFTlRfTlMJCSgxPDwxKQkvKiByZXNwb25zZSBz ZW50IChub3Qgc2hpZnRlZCkgKi8KIAogLyoKICAqIFRoZSBhZGFwdGVyIGNhbiByZXF1ZXN0IHRo ZSBob3N0IHByaW50IGEgbWVzc2FnZSBieSBzZXR0aW5nIHRoZQpAQCAtMTU2MCw1ICsxNjc4LDYg QEAgZW51bSB7CiAjZGVmaW5lIEFBQ19EQl9JTlRFUlJVUFRTCShBQUNfREJfQ09NTUFORF9SRUFE WSAgfAlcCiAJCQkJIEFBQ19EQl9SRVNQT05TRV9SRUFEWSB8CVwKIAkJCQkgQUFDX0RCX1BSSU5U RikKLSNkZWZpbmUgQUFDX0RCX0lOVF9ORVdfQ09NTQkJMHgwOAkJCisjZGVmaW5lIEFBQ19EQl9J TlRfTkVXX0NPTU0JCTB4MDggIAorI2RlZmluZSBBQUNfREJfSU5UX05FV19DT01NX1RZUEUxCTB4 MDQKIApkaWZmIC1wcnVOIG9sZC9hYWN2YXIuaCBuZXcvYWFjdmFyLmgKLS0tIG9sZC9hYWN2YXIu aAkyMDExLTAzLTMxIDE0OjU3OjM0LjAwMDAwMDAwMCArMDAwMAorKysgbmV3L2FhY3Zhci5oCTIw MTEtMDQtMDEgMTQ6MDE6NDguMDAwMDAwMDAwICswMDAwCkBAIC0yLDcgKzIsOCBAQAogICogQ29w eXJpZ2h0IChjKSAyMDAwIE1pY2hhZWwgU21pdGgKICAqIENvcHlyaWdodCAoYykgMjAwMSBTY290 dCBMb25nCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgQlNEaQotICogQ29weXJpZ2h0IChjKSAyMDAx IEFkYXB0ZWMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDEwIEFkYXB0ZWMsIEluYy4K KyAqIENvcHlyaWdodCAoYykgMjAxMCBQTUMtU2llcnJhLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDMsOCArNDQsOCBAQAogI2RlZmluZQlBQUNf VFlQRV9SRUxFQVNFCQk0CiAKICNkZWZpbmUJQUFDX0RSSVZFUl9NQUpPUl9WRVJTSU9OCTIKLSNk ZWZpbmUJQUFDX0RSSVZFUl9NSU5PUl9WRVJTSU9OCTEKLSNkZWZpbmUJQUFDX0RSSVZFUl9CVUdG SVhfTEVWRUwJCTkKKyNkZWZpbmUJQUFDX0RSSVZFUl9NSU5PUl9WRVJTSU9OCTQKKyNkZWZpbmUJ QUFDX0RSSVZFUl9CVUdGSVhfTEVWRUwJCTEKICNkZWZpbmUJQUFDX0RSSVZFUl9UWVBFCQkJQUFD X1RZUEVfUkVMRUFTRQogCiAjaWZuZGVmIEFBQ19EUklWRVJfQlVJTEQKQEAgLTU2LDEyICs1Nyw2 IEBACiAgKi8KIAogLyoKLSAqIFRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgYWxsb3dzIGZvciBhIDE2 LWJpdCBzL2cgbGlzdCBsZW5ndGguICBXZSBsaW1pdCAKLSAqIG91cnNlbHZlcyB0byBhIHJlYXNv bmFibGUgbWF4aW11bSBhbmQgZW5zdXJlIGFsaWdubWVudC4KLSAqLwotI2RlZmluZSBBQUNfTUFY U0dFTlRSSUVTCTY0CS8qIG1heCBTL0cgZW50cmllcywgbGltaXQgNjU1MzUgKi8JCQotCi0vKgog ICogV2UgYWxsb2NhdGUgYSBzbWFsbCBzZXQgb2YgRklCcyBmb3IgdGhlIGFkYXB0ZXIgdG8gdXNl IHRvIHNlbmQgdXMgbWVzc2FnZXMuCiAgKi8KICNkZWZpbmUgQUFDX0FEQVBURVJfRklCUwk4CkBA IC0xNzYsMTQgKzE3MSwxNSBAQCBzdHJ1Y3QgYWFjX2NvbW1hbmQKICNkZWZpbmUgQUFDX09OX0FB Q1FfQUlGCQkoMTw8OCkKICNkZWZpbmUgQUFDX09OX0FBQ1FfTk9STQkoMTw8MTApCiAjZGVmaW5l IEFBQ19PTl9BQUNRX01BU0sJKCgxPDw1KXwoMTw8Nil8KDE8PDcpfCgxPDw4KXwoMTw8MTApKQot I2RlZmluZSBBQUNfUVVFVUVfRlJaTgkJKDE8PDkpCQkvKiBGcmVlemUgdGhlIHByb2Nlc3Npbmcg b2YKLQkJCQkJCSAqIGNvbW1hbmRzIG9uIHRoZSBxdWV1ZS4gKi8KKyNkZWZpbmUgQUFDX0NNRF9S RVNFVAkJKDE8PDkpCiAKIAl2b2lkCQkJKCogY21fY29tcGxldGUpKHN0cnVjdCBhYWNfY29tbWFu ZCAqY20pOwogCXZvaWQJCQkqY21fcHJpdmF0ZTsKIAl0aW1lX3QJCQljbV90aW1lc3RhbXA7CS8q IGNvbW1hbmQgY3JlYXRpb24gdGltZSAqLwogCWludAkJCWNtX3F1ZXVlOwogCWludAkJCWNtX2lu ZGV4OworCWJ1c19kbWFfdGFnX3QJCWNtX3Bhc3N0aHJfZG1hdDsJLyogcGFzc3Rocm91Z2ggYnVm ZmVyL2NvbW1hbmQKKwkJCQkJCQkgKiBETUEgdGFnICovCiB9OwogCiBzdHJ1Y3QgYWFjX2ZpYm1h cCB7CkBAIC0yMjIsNiArMjE4LDkgQEAgc3RydWN0IGFhY19jb21tb24gewogCQogCS8qIGZpYiBm b3Igc3luY2hyb25vdXMgY29tbWFuZHMgKi8KIAlzdHJ1Y3QgYWFjX2ZpYgkJYWNfc3luY19maWI7 CisKKwkvKiByZXNwb25zZSBidWZmZXIgZm9yIFNSQyAobmV3IGNvbW0uIHR5cGUxKSAtIG11c3Qg YmUgbGFzdCBlbGVtZW50ICovCisJdV9pbnQzMl90ICAgYWNfaG9zdF9ycnFbMF07CiB9OwogCiAv KgpAQCAtMjQ0LDggKzI0Myw4IEBAIHN0cnVjdCBhYWNfaW50ZXJmYWNlIAogfTsKIGV4dGVybiBz dHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfcnhfaW50ZXJmYWNlOwogZXh0ZXJuIHN0cnVjdCBhYWNf aW50ZXJmYWNlCWFhY19zYV9pbnRlcmZhY2U7Ci1leHRlcm4gc3RydWN0IGFhY19pbnRlcmZhY2UJ YWFjX2ZhX2ludGVyZmFjZTsKIGV4dGVybiBzdHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfcmt0X2lu dGVyZmFjZTsKK2V4dGVybiBzdHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfc3JjX2ludGVyZmFjZTsK IAogI2RlZmluZSBBQUNfR0VUX0ZXU1RBVFVTKHNjKQkJKChzYyktPmFhY19pZi5haWZfZ2V0X2Z3 c3RhdHVzKChzYykpKQogI2RlZmluZSBBQUNfUU5PVElGWShzYywgcWJpdCkJCSgoc2MpLT5hYWNf aWYuYWlmX3Fub3RpZnkoKHNjKSwgKHFiaXQpKSkKQEAgLTMyNCw2ICszMjMsNyBAQCBzdHJ1Y3Qg YWFjX3NvZnRjIAogI2RlZmluZQlBQUNfU1RBVEVfVU5VU0VEMAkoMTw8MSkKICNkZWZpbmUgQUFD X1NUQVRFX0lOVEVSUlVQVFNfT04JKDE8PDIpCiAjZGVmaW5lIEFBQ19TVEFURV9BSUZfU0xFRVBF UgkoMTw8MykKKyNkZWZpbmUgQUFDX1NUQVRFX1JFU0VUCQkoMTw8NCkKIAlzdHJ1Y3QgRnNhUmV2 aXNpb24JCWFhY19yZXZpc2lvbjsKIAogCS8qIGNvbnRyb2xsZXIgaGFyZHdhcmUgaW50ZXJmYWNl ICovCkBAIC0zMzIsNiArMzMyLDcgQEAgc3RydWN0IGFhY19zb2Z0YyAKICNkZWZpbmUgQUFDX0hX SUZfU1RST05HQVJNCTEKICNkZWZpbmUgQUFDX0hXSUZfUktUCQkzCiAjZGVmaW5lCUFBQ19IV0lG X05BUksJCTQKKyNkZWZpbmUgQUFDX0hXSUZfU1JDCQk1CiAjZGVmaW5lIEFBQ19IV0lGX1VOS05P V04JLTEKIAlidXNfZG1hX3RhZ190CQlhYWNfY29tbW9uX2RtYXQ7CS8qIGNvbW1vbiBzdHJ1Y3R1 cmUKIAkJCQkJCQkgKiBETUEgdGFnICovCkBAIC0zMzksNiArMzQwLDcgQEAgc3RydWN0IGFhY19z b2Z0YyAKIAkJCQkJCQkgKiBETUEgbWFwICovCiAJc3RydWN0IGFhY19jb21tb24JKmFhY19jb21t b247CiAJdV9pbnQzMl90CQlhYWNfY29tbW9uX2J1c2FkZHI7CisJdV9pbnQzMl90CQlhYWNfaG9z dF9ycnFfaWR4OwogCXN0cnVjdCBhYWNfaW50ZXJmYWNlCWFhY19pZjsKIAogCS8qIGNvbW1hbmQv ZmliIHJlc291cmNlcyAqLwpAQCAtMzgxLDYgKzM4Myw3IEBAIHN0cnVjdCBhYWNfc29mdGMgCiAJ c3RydWN0IGFhY19maWIJCWFhY19haWZxW0FBQ19BSUZRX0xFTkdUSF07CiAJaW50CQkJYWlmcV9p ZHg7CiAJaW50CQkJYWlmcV9maWxsZWQ7CisJaW50IAkJCWFpZl9wZW5kaW5nOwogCXN0cnVjdCBh YWNfZmliX2NvbnRleHQgKmZpYmN0eDsKIAlzdHJ1Y3Qgc2VsaW5mbwkJcmN2X3NlbGVjdDsKIAlz dHJ1Y3QgcHJvYwkJKmFpZnRocmVhZDsKQEAgLTQwOSw4ICs0MTIsMTIgQEAgc3RydWN0IGFhY19z b2Z0YyAKICNkZWZpbmUgQUFDX0ZMQUdTX05FV19DT01NCSgxIDw8IDExKQkvKiBOZXcgY29tbS4g aW50ZXJmYWNlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBBQUNfRkxBR1NfUkFXX0lPCSgxIDw8IDEy KQkvKiBSYXcgSS9PIGludGVyZmFjZSAqLwogI2RlZmluZSBBQUNfRkxBR1NfQVJSQVlfNjRCSVQJ KDEgPDwgMTMpCS8qIDY0LWJpdCBhcnJheSBzaXplICovCi0jZGVmaW5lCUFBQ19GTEFHU19MQkFf NjRCSVQJKDEgPDwgMTQpCS8qIDY0LWJpdCBMQkEgc3VwcG9ydCAqLwotCisjZGVmaW5lIEFBQ19G TEFHU19MQkFfNjRCSVQJKDEgPDwgMTQpCS8qIDY0LWJpdCBMQkEgc3VwcG9ydCAqLworI2RlZmlu ZSBBQUNfUVVFVUVfRlJaTgkJKDEgPDwgMTUpCS8qIEZyZWV6ZSB0aGUgcHJvY2Vzc2luZyBvZgor CQkJCQkJICogY29tbWFuZHMgb24gdGhlIHF1ZXVlLiAqLworI2RlZmluZSBBQUNfRkxBR1NfTkVX X0NPTU1fVFlQRTEgKDEgPDwgMTYpCS8qIE5ldyBjb21tLiB0eXBlMSBzdXBwb3J0ZWQgKi8KKwl1 X2ludDMyX3QJCWhpbnRfZmxhZ3M7CQkvKiBkcml2ZXIgcGFyYW1ldGVycyAqLworCWludAlzaW1f ZnJlZXplZDsJCQkJLyogZmxhZyBmb3Igc2ltX2ZyZWV6ZS9yZWxlYXNlICovCQkKIAl1X2ludDMy X3QJCXN1cHBvcnRlZF9vcHRpb25zOwogCXVfaW50MzJfdAkJc2NzaV9tZXRob2RfaWQ7CiAJVEFJ TFFfSEVBRCgsYWFjX3NpbSkJYWFjX3NpbV90cWg7CkBAIC00MjIsNiArNDI5LDkgQEAgc3RydWN0 IGFhY19zb2Z0YyAKIAl1X2ludDMyX3QJYWFjX21heF9maWJfc2l6ZTsJCS8qIG1heC4gRklCIHNp emUgKi8KIAl1X2ludDMyX3QJYWFjX3NnX3RhYmxlc2l6ZTsJCS8qIG1heC4gc2cgY291bnQgZnJv bSBob3N0ICovCiAJdV9pbnQzMl90CWFhY19tYXhfc2VjdG9yczsJCS8qIG1heC4gSS9PIHNpemUg ZnJvbSBob3N0IChibG9ja3MpICovCisJdV9pbnQzMl90CWFhY19mZWF0dXJlX2JpdHM7CQkvKiBm ZWF0dXJlIGJpdHMgZnJvbSBzdXBwbC4gaW5mbyAqLworCXVfaW50MzJfdAlhYWNfc3VwcG9ydF9v cHQyOwkJLyogc3VwcC4gb3B0aW9ucyBmcm9tIHN1cHBsLiBpbmZvICovCisJdV9pbnQzMl90CWFh Y19tYXhfYWlmOwkJCS8qIG1heC4gQUlGIGNvdW50ICovCiAjZGVmaW5lIEFBQ19DQU1fVEFSR0VU X1dJTERDQVJEIH4wCiAJdm9pZAkJCSgqY2FtX3Jlc2Nhbl9jYikoc3RydWN0IGFhY19zb2Z0YyAq LCB1aW50MzJfdCwKIAkJCQkgICAgdWludDMyX3QpOwpAQCAtNDUzLDYgKzQ2Myw3IEBAIGV4dGVy biBpbnQJCWFhY19kZXRhY2goZGV2aWNlX3QgZGV2KTsKIGV4dGVybiBpbnQJCWFhY19zaHV0ZG93 bihkZXZpY2VfdCBkZXYpOwogZXh0ZXJuIGludAkJYWFjX3N1c3BlbmQoZGV2aWNlX3QgZGV2KTsg CiBleHRlcm4gaW50CQlhYWNfcmVzdW1lKGRldmljZV90IGRldik7CitleHRlcm4gdm9pZAkJYWFj X25ld19pbnRyX3R5cGUxKHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZAkJYWFjX25ld19pbnRyKHZv aWQgKmFyZyk7CiBleHRlcm4gaW50CQlhYWNfZmlsdGVyKHZvaWQgKmFyZyk7CiBleHRlcm4gdm9p ZAkJYWFjX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYnApOwo= ------_=_NextPart_001_01CBF3A6.F7D71E12--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FD2BDBE06AC58549AE9E16C08B45675D04F88AD6>