Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761131AbYBNSVX (ORCPT ); Thu, 14 Feb 2008 13:21:23 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754893AbYBNSVO (ORCPT ); Thu, 14 Feb 2008 13:21:14 -0500 Received: from ti-out-0910.google.com ([209.85.142.188]:37686 "EHLO ti-out-0910.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754127AbYBNSVK (ORCPT ); Thu, 14 Feb 2008 13:21:10 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:references:x-google-sender-auth; b=Ik3zgLiiAfnjTCJtseFNBOdn9ByXxiyFLCauO8+LYZadlfEEozFVhJcgVIuX3wRZ1qRaTzsXPmCYU3RZIQWdlKINgRoxXE9PNn1rXO3n9MioUtuQA8XGtSRYaVbpIwEUQelRsJf3WNHqw7Rsl0QVU5mSDjbXrw3RWzvrZj8ekPE= Message-ID: Date: Thu, 14 Feb 2008 11:14:34 -0700 From: "Dan Williams" To: "Kumar Gala" Subject: Re: dma engine drivers for 2.6.25? Cc: "LKML Kernel" , "Andrew Morton" In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1344_13151137.1203012874654" References: X-Google-Sender-Auth: f4df12125b2eba07 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 55102 Lines: 737 ------=_Part_1344_13151137.1203012874654 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Wed, Feb 13, 2008 at 8:52 PM, Kumar Gala wrote: > Dan, > > What's going on with the dma engine drivers for 2.6.25? We had a > Freescale dma driver from Zhang Wei queued up but seems to have been > lost. I pulled it into my tree and am holding it until Zhang has an opportunity to address the pending review comments [1]. I also did not feel comfortable pushing it to Linus without a PPC maintainer's Acked-by/Reviewed-by. I have attached the version I am carrying. -- Dan [1] http://marc.info/?l=linux-kernel&m=119998939916613&w=2 ------=_Part_1344_13151137.1203012874654 Content-Type: text/x-patch; name=add-dma-engine-driver-for-freescale-mpc85xx-processors.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fcnmn4cr0 Content-Disposition: attachment; filename=add-dma-engine-driver-for-freescale-mpc85xx-processors.patch ZG1hZW5naW5lOiBhZGQgZHJpdmVyIGZvciBGcmVlc2NhbGUgTVBDODV4eCBETUEgY29udHJvbGxl cgoKRnJvbTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KClRoZSBkcml2ZXIg aW1wbGVtZW50cyBETUEgZW5naW5lIEFQSSBmb3IgRnJlZXNjYWxlIE1QQzg1eHggRE1BIGNvbnRy b2xsZXIsCndoaWNoIGNvdWxkIGJlIHVzZWQgYnkgZGV2aWNlcyBpbiB0aGUgc2lsaWNvbi4gIFRo ZSBkcml2ZXIgc3VwcG9ydHMgdGhlCkJhc2ljIG1vZGUgb2YgRnJlZXNjYWxlIE1QQzg1eHggRE1B IGNvbnRyb2xsZXIuICBUaGUgTVBDODV4eCBwcm9jZXNzb3JzCnN1cHBvcnRlZCBpbmNsdWRlIE1Q Qzg1NDAvNjAsIE1QQzg1NTUsIE1QQzg1NDgsIE1QQzg2NDEgYW5kIHNvIG9uLgoKVGhlIE1QQzgz eHgoTVBDODM0OSwgTVBDODM2MCkgYXJlIGFsc28gc3VwcG9ydGVkLgoKW2thbWFsZXNoQGxpbnV4 LnZuZXQuaWJtLmNvbTogYnVpbGQgZml4XQpbZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tOiBtZXJn ZSBtbSBmaXhlcywgcmViYXNlIG9uIGFzeW5jX3R4LTIuNi4yNV0KU2lnbmVkLW9mZi1ieTogWmhh bmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KU2lnbmVkLW9mZi1ieTogRWJvbnkgWmh1 IDxlYm9ueS56aHVAZnJlZXNjYWxlLmNvbT4KQ2M6IFNoYW5ub24gTmVsc29uIDxzaGFubm9uLm5l bHNvbkBpbnRlbC5jb20+CkNjOiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5j cmFzaGluZy5vcmc+CkNjOiBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KQ2M6IEt1 bWFyIEdhbGEgPGdhbGFrQGdhdGUuY3Jhc2hpbmcub3JnPgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcg TW9ydG9uIDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgpTaWduZWQtb2ZmLWJ5OiBEYW4gV2ls bGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLS0tCgogTUFJTlRBSU5FUlMgICAgICAg ICAgfCAgICA3IAogZHJpdmVycy9kbWEvS2NvbmZpZyAgfCAgIDE5ICsKIGRyaXZlcnMvZG1hL01h a2VmaWxlIHwgICAgMSAKIGRyaXZlcnMvZG1hL2ZzbGRtYS5jIHwgMTA2MCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvZnNsZG1h LmggfCAgMTg5ICsrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMjc1IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsZG1hLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2xkbWEuaAoKCmRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDY2ODBlYzQuLjliYTE2MzAgMTAwNjQ0Ci0t LSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNTg0LDYgKzE1ODQsMTMgQEAg TDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1v bmx5KQogVzoJaHR0cDovL2xpbnV4LWZiZGV2LnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWlu ZWQKIAorRlJFRVNDQUxFIERNQSBEUklWRVIKK1A7CVpoYW5nIFdlaQorTToJd2VpLnpoYW5nQGZy ZWVzY2FsZS5jb20KK0w6CWxpbnV4cHBjLWVtYmVkZGVkQG96bGFicy5vcmcKK0w6CWxpbnV4LWtl cm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogRlJFRVNDQUxFIFNPQyBGU19F TkVUIERSSVZFUgogUDoJUGFudGVsaXMgQW50b25pb3UKIE06CXBhbnRlbGlzLmFudG9uaW91QGdt YWlsLmNvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tj b25maWcKaW5kZXggYTcwM2RlZi4uMjczNDBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2Nv bmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiBtZW51Y29u ZmlnIERNQURFVklDRVMKIAlib29sICJETUEgRW5naW5lIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAo UENJICYmIFg4NikgfHwgQVJDSF9JT1AzMlggfHwgQVJDSF9JT1AzM1ggfHwgQVJDSF9JT1AxM1hY CisJZGVwZW5kcyBvbiAoUENJICYmIFg4NikgfHwgQVJDSF9JT1AzMlggfHwgQVJDSF9JT1AzM1gg fHwgQVJDSF9JT1AxM1hYIHx8IFBQQwogCWRlcGVuZHMgb24gIUhJR0hNRU02NEcKIAloZWxwCiAJ ICBETUEgZW5naW5lcyBjYW4gZG8gYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIHdpdGhvdXQK QEAgLTM3LDYgKzM3LDIzIEBAIGNvbmZpZyBJTlRFTF9JT1BfQURNQQogCWhlbHAKIAkgIEVuYWJs ZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwoUikgSU9QIFNlcmllcyBSQUlEIGVuZ2luZXMuCiAKK2Nv bmZpZyBGU0xfRE1BCisJYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHgvTVBDODN4eCBETUEgc3VwcG9y dCIKKwlkZXBlbmRzIG9uIFBQQworCXNlbGVjdCBETUFfRU5HSU5FCisJLS0taGVscC0tLQorCSAg RW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgRE1BIGVuZ2luZS4gTm93LCBpdCBzdXBw b3J0CisJICBNUEM4NTYwLzQwLCBNUEM4NTU1LCBNUEM4NTQ4IGFuZCBNUEM4NjQxIHByb2Nlc3Nv cnMuCisJICBUaGUgTVBDODM0OSwgTVBDODM2MCBpcyBhbHNvIHN1cHBvcnRlZC4KKworY29uZmln IEZTTF9ETUFfU0VMRlRFU1QKKwlib29sICJFbmFibGUgdGhlIHNlbGYgdGVzdCBmb3IgZWFjaCBE TUEgY2hhbm5lbCIKKwlkZXBlbmRzIG9uIEZTTF9ETUEKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0t CisJICBFbmFibGUgdGhlIHNlbGYgdGVzdCBmb3IgZWFjaCBETUEgY2hhbm5lbC4gQSBzZWxmIHRl c3Qgd2lsbCBiZQorCSAgcGVyZm9ybWVkIGFmdGVyIHRoZSBjaGFubmVsIHByb2JlZCB0byBlbnN1 cmUgdGhlIERNQSB3b3JrcyB3ZWxsLgorCiBjb25maWcgRE1BX0VOR0lORQogCWJvb2wKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRl eCBiMTUyY2Q4Li5jODAzNmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAgb2JqLSQoQ09ORklHX05FVF9E TUEpICs9IGlvdmxvY2subwogb2JqLSQoQ09ORklHX0lOVEVMX0lPQVRETUEpICs9IGlvYXRkbWEu bwogaW9hdGRtYS1vYmpzIDo9IGlvYXQubyBpb2F0X2RtYS5vIGlvYXRfZGNhLm8KIG9iai0kKENP TkZJR19JTlRFTF9JT1BfQURNQSkgKz0gaW9wLWFkbWEubworb2JqLSQoQ09ORklHX0ZTTF9ETUEp ICs9IGZzbGRtYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMv ZG1hL2ZzbGRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZGFjNDcK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMCwwICsxLDEwNjAg QEAKKy8qCisgKiBGcmVlc2NhbGUgTVBDODV4eCwgTVBDODN4eCBETUEgRW5naW5lIHN1cHBvcnQK KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6CisgKiAgIFpoYW5nIFdlaSA8d2Vp LnpoYW5nQGZyZWVzY2FsZS5jb20+LCBKdWwgMjAwNworICogICBFYm9ueSBaaHUgPGVib255Lnpo dUBmcmVlc2NhbGUuY29tPiwgTWF5IDIwMDcKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgRE1B IGVuZ2luZSBkcml2ZXIgZm9yIEZyZWVzY2FsZSBNUEM4NTQwIERNQSBjb250cm9sbGVyLCB3aGlj aCBpcworICogICBhbHNvIGZpdCBmb3IgTVBDODU2MCwgTVBDODU1NSwgTVBDODU0OCwgTVBDODY0 MSwgYW5kIGV0Yy4KKyAqICAgVGhlIHN1cHBvcnQgZm9yIE1QQzgzNDkgRE1BIGNvbnRvcmxsZXIg aXMgYWxzbyBhZGRlZC4KKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51 eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxp bnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJmc2xkbWEuaCIKKworc3RhdGljIHZvaWQg ZG1hX2luaXQoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJLyogUmVzZXQgdGhl IGNoYW5uZWwgKi8KKwlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwg MCwgMzIpOworCisJc3dpdGNoIChmc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykg eworCWNhc2UgRlNMX0RNQV9JUF84NVhYOgorCQkvKiBTZXQgdGhlIGNoYW5uZWwgdG8gYmVsb3cg bW9kZXM6CisJCSAqIEVJRSAtIEVycm9yIGludGVycnVwdCBlbmFibGUKKwkJICogRU9TSUUgLSBF bmQgb2Ygc2VnbWVudHMgaW50ZXJydXB0IGVuYWJsZSAoYmFzaWMgbW9kZSkKKwkJICogRU9MTklF IC0gRW5kIG9mIGxpbmtzIGludGVycnVwdCBlbmFibGUKKwkJICovCisJCURNQV9PVVQoZnNsX2No YW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCBGU0xfRE1BX01SX0VJRQorCQkJCXwgRlNMX0RN QV9NUl9FT0xOSUUgfCBGU0xfRE1BX01SX0VPU0lFLCAzMik7CisJCWJyZWFrOworCWNhc2UgRlNM X0RNQV9JUF84M1hYOgorCQkvKiBTZXQgdGhlIGNoYW5uZWwgdG8gYmVsb3cgbW9kZXM6CisJCSAq IEVPVElFIC0gRW5kLW9mLXRyYW5zZmVyIGludGVycnVwdCBlbmFibGUKKwkJICovCisJCURNQV9P VVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCBGU0xfRE1BX01SX0VPVElFLAor CQkJCTMyKTsKKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHNldF9zcihzdHJ1Y3Qg ZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgZG1hX2FkZHJfdCB2YWwpCit7CisJRE1BX09VVChmc2xf Y2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+c3IsIHZhbCwgMzIpOworfQorCitzdGF0aWMgZG1h X2FkZHJfdCBnZXRfc3Ioc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJcmV0dXJu IERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+c3IsIDMyKTsKK30KKworc3Rh dGljIHZvaWQgc2V0X2Rlc2NfY250KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJ CXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgdTMyIGNvdW50KQoreworCWh3LT5jb3VudCA9IENQ VV9UT19ETUEoZnNsX2NoYW4sIGNvdW50LCAzMik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNj X3NyYyhzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwKKwkJCQlzdHJ1Y3QgZnNsX2RtYV9s ZF9odyAqaHcsIGRtYV9hZGRyX3Qgc3JjKQoreworCXU2NCBzbm9vcF9iaXRzOworCisJc25vb3Bf Yml0cyA9ICgoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFf SVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX1NBVFJfU1JFQURUWVBFX1NOT09QX1JFQUQgPDwg MzIpIDogMDsKKwlody0+c3JjX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLCBzbm9vcF9iaXRz IHwgc3JjLCA2NCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNjX2Rlc3Qoc3RydWN0IGZzbF9k bWFfY2hhbiAqZnNsX2NoYW4sCisJCQkJc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCBkbWFfYWRk cl90IGRlc3QpCit7CisJdTY0IHNub29wX2JpdHM7CisKKwlzbm9vcF9iaXRzID0gKChmc2xfY2hh bi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84NVhYKQorCQk/ICgo dTY0KUZTTF9ETUFfREFUUl9EV1JJVEVUWVBFX1NOT09QX1dSSVRFIDw8IDMyKSA6IDA7CisJaHct PmRzdF9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwgc25vb3BfYml0cyB8IGRlc3QsIDY0KTsK K30KKworc3RhdGljIHZvaWQgc2V0X2Rlc2NfbmV4dChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xf Y2hhbiwKKwkJCQlzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3QgbmV4dCkKK3sK Kwl1NjQgc25vb3BfYml0czsKKworCXNub29wX2JpdHMgPSAoKGZzbF9jaGFuLT5mZWF0dXJlICYg RlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzgzWFgpCisJCT8gRlNMX0RNQV9TTkVOIDog MDsKKwlody0+bmV4dF9sbl9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwgc25vb3BfYml0cyB8 IG5leHQsIDY0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NkYXIoc3RydWN0IGZzbF9kbWFfY2hh biAqZnNsX2NoYW4sIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlETUFfT1VUKGZzbF9jaGFuLCAmZnNs X2NoYW4tPnJlZ19iYXNlLT5jZGFyLCBhZGRyIHwgRlNMX0RNQV9TTkVOLCA2NCk7Cit9CisKK3N0 YXRpYyBkbWFfYWRkcl90IGdldF9jZGFyKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQor eworCXJldHVybiBETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmNkYXIsIDY0 KSAmIH5GU0xfRE1BX1NORU47Cit9CisKK3N0YXRpYyB2b2lkIHNldF9uZGFyKHN0cnVjdCBmc2xf ZG1hX2NoYW4gKmZzbF9jaGFuLCBkbWFfYWRkcl90IGFkZHIpCit7CisJRE1BX09VVChmc2xfY2hh biwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bmRhciwgYWRkciwgNjQpOworfQorCitzdGF0aWMgZG1h X2FkZHJfdCBnZXRfbmRhcihzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlyZXR1 cm4gRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5uZGFyLCA2NCk7Cit9CisK K3N0YXRpYyBpbnQgZG1hX2lzX2lkbGUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7 CisJdTMyIHNyID0gZ2V0X3NyKGZzbF9jaGFuKTsKKwlyZXR1cm4gKCEoc3IgJiBGU0xfRE1BX1NS X0NCKSkgfHwgKHNyICYgRlNMX0RNQV9TUl9DSCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9zdGFy dChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwl1MzIgbXJfc2V0ID0gMDs7CisK KwlpZiAoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fUEFVU0VfRVhUKSB7CisJCURN QV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmJjciwgMCwgMzIpOworCQltcl9z ZXQgfD0gRlNMX0RNQV9NUl9FTVBfRU47CisJfSBlbHNlCisJCURNQV9PVVQoZnNsX2NoYW4sICZm c2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAorCQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJl Z19iYXNlLT5tciwgMzIpCisJCQkJJiB+RlNMX0RNQV9NUl9FTVBfRU4sIDMyKTsKKworCWlmIChm c2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQpCisJCW1yX3NldCB8PSBG U0xfRE1BX01SX0VNU19FTjsKKwllbHNlCisJCW1yX3NldCB8PSBGU0xfRE1BX01SX0NTOworCisJ RE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCisJCQlETUFfSU4oZnNs X2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikKKwkJCXwgbXJfc2V0LCAzMik7Cit9 CisKK3N0YXRpYyB2b2lkIGRtYV9oYWx0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQor eworCWludCBpID0gMDsKKwlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5t ciwKKwkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpIHwgRlNM X0RNQV9NUl9DQSwKKwkJMzIpOworCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jh c2UtPm1yLAorCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikg JiB+KEZTTF9ETUFfTVJfQ1MKKwkJfCBGU0xfRE1BX01SX0VNU19FTiB8IEZTTF9ETUFfTVJfQ0Ep LCAzMik7CisKKwl3aGlsZSAoIWRtYV9pc19pZGxlKGZzbF9jaGFuKSAmJiAoaSsrIDwgMTAwKSkK KwkJdWRlbGF5KDEwKTsKKwlpZiAoaSA+PSAxMDAgJiYgIWRtYV9pc19pZGxlKGZzbF9jaGFuKSkK KwkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAiRE1BIGhhbHQgdGltZW91dCFcbiIpOworfQorCitz dGF0aWMgdm9pZCBzZXRfbGRfZW9sKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJ c3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjKQoreworCWRlc2MtPmh3Lm5leHRfbG5fYWRkciA9IENQ VV9UT19ETUEoZnNsX2NoYW4sCisJCURNQV9UT19DUFUoZnNsX2NoYW4sIGRlc2MtPmh3Lm5leHRf bG5fYWRkciwgNjQpCXwgRlNMX0RNQV9FT0wsCisJCTY0KTsKK30KKworc3RhdGljIHZvaWQgYXBw ZW5kX2xkX3F1ZXVlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLAorCQlzdHJ1Y3QgZnNs X2Rlc2Nfc3cgKm5ld19kZXNjKQoreworCXN0cnVjdCBmc2xfZGVzY19zdyAqcXVldWVfdGFpbCA9 IHRvX2ZzbF9kZXNjKGZzbF9jaGFuLT5sZF9xdWV1ZS5wcmV2KTsKKworCWlmIChsaXN0X2VtcHR5 KCZmc2xfY2hhbi0+bGRfcXVldWUpKQorCQlyZXR1cm47CisKKwkvKiBMaW5rIHRvIHRoZSBuZXcg ZGVzY3JpcHRvciBwaHlzaWNhbCBhZGRyZXNzIGFuZAorCSAqIEVuYWJsZSBFbmQtb2Ytc2VnbWVu dCBpbnRlcnJ1cHQgZm9yCisJICogdGhlIGxhc3QgbGluayBkZXNjcmlwdG9yLgorCSAqICh0aGUg cHJldmlvdXMgbm9kZSdzIG5leHQgbGluayBkZXNjcmlwdG9yKQorCSAqCisJICogRm9yIEZTTF9E TUFfSVBfODN4eCwgdGhlIHNub29wIGVuYWJsZSBiaXQgbmVlZCBiZSBzZXQuCisJICovCisJcXVl dWVfdGFpbC0+aHcubmV4dF9sbl9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwKKwkJCW5ld19k ZXNjLT5hc3luY190eC5waHlzIHwgRlNMX0RNQV9FT1NJRSB8CisJCQkoKChmc2xfY2hhbi0+ZmVh dHVyZSAmIEZTTF9ETUFfSVBfTUFTSykKKwkJCQk9PSBGU0xfRE1BX0lQXzgzWFgpID8gRlNMX0RN QV9TTkVOIDogMCksIDY0KTsKK30KKworLyoqCisgKiBmc2xfY2hhbl9zZXRfc3JjX2xvb3Bfc2l6 ZSAtIFNldCBzb3VyY2UgYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUKKyAqIEBmc2xfY2hhbiA6 IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQHNpemUgICAgIDogQWRkcmVzcyBsb29wIHNpemUs IDAgZm9yIGRpc2FibGUgbG9vcAorICoKKyAqIFRoZSBzZXQgc291cmNlIGFkZHJlc3MgaG9sZCB0 cmFuc2ZlciBzaXplLiBUaGUgc291cmNlCisgKiBhZGRyZXNzIGhvbGQgb3IgbG9vcCB0cmFuc2Zl ciBzaXplIGlzIHdoZW4gdGhlIERNQSB0cmFuc2ZlcgorICogZGF0YSBmcm9tIHNvdXJjZSBhZGRy ZXNzIChTQSksIGlmIHRoZSBsb29wIHNpemUgaXMgNCwgdGhlIERNQSB3aWxsCisgKiByZWFkIGRh dGEgZnJvbSBTQSwgU0EgKyAxLCBTQSArIDIsIFNBICsgMywgdGhlbiBsb29wIGJhY2sgdG8gU0Es CisgKiBTQSArIDEgLi4uIGFuZCBzbyBvbi4KKyAqLworc3RhdGljIHZvaWQgZnNsX2NoYW5fc2V0 X3NyY19sb29wX3NpemUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKQor eworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMDoKKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9j aGFuLT5yZWdfYmFzZS0+bXIsCisJCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jh c2UtPm1yLCAzMikgJgorCQkJKH5GU0xfRE1BX01SX1NBSEUpLCAzMik7CisJCWJyZWFrOworCWNh c2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJRE1BX09VVChmc2xfY2hhbiwg JmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCisJCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+ cmVnX2Jhc2UtPm1yLCAzMikgfAorCQkJRlNMX0RNQV9NUl9TQUhFIHwgKF9faWxvZzIoc2l6ZSkg PDwgMTQpLAorCQkJMzIpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogZnNsX2NoYW5fc2V0 X2Rlc3RfbG9vcF9zaXplIC0gU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaG9sZCB0cmFuc2ZlciBz aXplCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqIEBzaXplICAgICA6 IEFkZHJlc3MgbG9vcCBzaXplLCAwIGZvciBkaXNhYmxlIGxvb3AKKyAqCisgKiBUaGUgc2V0IGRl c3RpbmF0aW9uIGFkZHJlc3MgaG9sZCB0cmFuc2ZlciBzaXplLiBUaGUgZGVzdGluYXRpb24KKyAq IGFkZHJlc3MgaG9sZCBvciBsb29wIHRyYW5zZmVyIHNpemUgaXMgd2hlbiB0aGUgRE1BIHRyYW5z ZmVyCisgKiBkYXRhIHRvIGRlc3RpbmF0aW9uIGFkZHJlc3MgKFRBKSwgaWYgdGhlIGxvb3Agc2l6 ZSBpcyA0LCB0aGUgRE1BIHdpbGwKKyAqIHdyaXRlIGRhdGEgdG8gVEEsIFRBICsgMSwgVEEgKyAy LCBUQSArIDMsIHRoZW4gbG9vcCBiYWNrIHRvIFRBLAorICogVEEgKyAxIC4uLiBhbmQgc28gb24u CisgKi8KK3N0YXRpYyB2b2lkIGZzbF9jaGFuX3NldF9kZXN0X2xvb3Bfc2l6ZShzdHJ1Y3QgZnNs X2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2Fz ZSAwOgorCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKKwkJCURN QV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSAmCisJCQkofkZTTF9E TUFfTVJfREFIRSksIDMyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDQ6 CisJY2FzZSA4OgorCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwK KwkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSB8CisJCQlG U0xfRE1BX01SX0RBSEUgfCAoX19pbG9nMihzaXplKSA8PCAxNiksCisJCQkzMik7CisJCWJyZWFr OworCX0KK30KKworLyoqCisgKiBmc2xfY2hhbl90b2dnbGVfZXh0X3BhdXNlIC0gVG9nZ2xlIGNo YW5uZWwgZXh0ZXJuYWwgcGF1c2Ugc3RhdHVzCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1B IGNoYW5uZWwKKyAqIEBzaXplICAgICA6IFBhdXNlIGNvbnRyb2wgc2l6ZSwgMCBmb3IgZGlzYWJs ZSBleHRlcm5hbCBwYXVzZSBjb250cm9sLgorICogICAgICAgICAgICAgVGhlIG1heGltdW0gaXMg MTAyNC4KKyAqCisgKiBUaGUgRnJlZXNjYWxlIERNQSBjaGFubmVsIGNhbiBiZSBjb250cm9sbGVk IGJ5IHRoZSBleHRlcm5hbAorICogc2lnbmFsIERSRVEjLiBUaGUgcGF1c2UgY29udHJvbCBzaXpl IGlzIGhvdyBtYW55IGJ5dGVzIGFyZSBhbGxvd2VkCisgKiB0byB0cmFuc2ZlciBiZWZvcmUgcGF1 c2luZyB0aGUgY2hhbm5lbCwgYWZ0ZXIgd2hpY2ggYSBuZXcgYXNzZXJ0aW9uCisgKiBvZiBEUkVR IyByZXN1bWVzIGNoYW5uZWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBmc2xfY2hhbl90 b2dnbGVfZXh0X3BhdXNlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSkK K3sKKwlpZiAoc2l6ZSA+IDEwMjQpCisJCXJldHVybjsKKworCWlmIChzaXplKSB7CisJCURNQV9P VVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAorCQkJRE1BX0lOKGZzbF9jaGFu LCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpCisJCQkJfCAoKF9faWxvZzIoc2l6ZSkgPDwg MjQpICYgMHgwZjAwMDAwMCksCisJCQkzMik7CisJCWZzbF9jaGFuLT5mZWF0dXJlIHw9IEZTTF9E TUFfQ0hBTl9QQVVTRV9FWFQ7CisJfSBlbHNlCisJCWZzbF9jaGFuLT5mZWF0dXJlICY9IH5GU0xf RE1BX0NIQU5fUEFVU0VfRVhUOworfQorCisvKioKKyAqIGZzbF9jaGFuX3RvZ2dsZV9leHRfc3Rh cnQgLSBUb2dnbGUgY2hhbm5lbCBleHRlcm5hbCBzdGFydCBzdGF0dXMKKyAqIEBmc2xfY2hhbiA6 IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGVuYWJsZSAgIDogMCBpcyBkaXNhYmxlZCwgMSBp cyBlbmFibGVkLgorICoKKyAqIElmIGVuYWJsZSB0aGUgZXh0ZXJuYWwgc3RhcnQsIHRoZSBjaGFu bmVsIGNhbiBiZSBzdGFydGVkIGJ5IGFuCisgKiBleHRlcm5hbCBETUEgc3RhcnQgcGluLiBTbyB0 aGUgZG1hX3N0YXJ0KCkgZG9lcyBub3Qgc3RhcnQgdGhlCisgKiB0cmFuc2ZlciBpbW1lZGlhdGVs eS4gVGhlIERNQSBjaGFubmVsIHdpbGwgd2FpdCBmb3IgdGhlCisgKiBjb250cm9sIHBpbiBhc3Nl cnRlZC4KKyAqLworc3RhdGljIHZvaWQgZnNsX2NoYW5fdG9nZ2xlX2V4dF9zdGFydChzdHJ1Y3Qg ZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQlm c2xfY2hhbi0+ZmVhdHVyZSB8PSBGU0xfRE1BX0NIQU5fU1RBUlRfRVhUOworCWVsc2UKKwkJZnNs X2NoYW4tPmZlYXR1cmUgJj0gfkZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQ7Cit9CisKK3N0YXRpYyBk bWFfY29va2llX3QgZnNsX2RtYV90eF9zdWJtaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlw dG9yICp0eCkKK3sKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MgPSB0eF90b19mc2xfZGVzYyh0 eCk7CisJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbih0eC0+Y2hh bik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfY29va2llX3QgY29va2llOworCisJLyog Y29va2llIGluY3JlbWVudCBhbmQgYWRkaW5nIHRvIGxkX3F1ZXVlIG11c3QgYmUgYXRvbWljICov CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKworCWNv b2tpZSA9IGZzbF9jaGFuLT5jb21tb24uY29va2llOworCWNvb2tpZSsrOworCWlmIChjb29raWUg PCAwKQorCQljb29raWUgPSAxOworCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKKwlm c2xfY2hhbi0+Y29tbW9uLmNvb2tpZSA9IGRlc2MtPmFzeW5jX3R4LmNvb2tpZTsKKworCWFwcGVu ZF9sZF9xdWV1ZShmc2xfY2hhbiwgZGVzYyk7CisJbGlzdF9zcGxpY2VfaW5pdCgmZGVzYy0+YXN5 bmNfdHgudHhfbGlzdCwgZnNsX2NoYW4tPmxkX3F1ZXVlLnByZXYpOworCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvb2tp ZTsKK30KKworLyoqCisgKiBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IgLSBBbGxvY2F0ZSBkZXNj cmlwdG9yIGZyb20gY2hhbm5lbCdzIERNQSBwb29sLgorICogQGZzbF9jaGFuIDogRnJlZXNjYWxl IERNQSBjaGFubmVsCisgKgorICogUmV0dXJuIC0gVGhlIGRlc2NyaXB0b3IgYWxsb2NhdGVkLiBO VUxMIGZvciBmYWlsZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmZzbF9kbWFf YWxsb2NfZGVzY3JpcHRvcigKKwkJCQkJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7 CisJZG1hX2FkZHJfdCBwZGVzYzsKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2Nfc3c7CisKKwlk ZXNjX3N3ID0gZG1hX3Bvb2xfYWxsb2MoZnNsX2NoYW4tPmRlc2NfcG9vbCwgR0ZQX0FUT01JQywg JnBkZXNjKTsKKwlpZiAoZGVzY19zdykgeworCQltZW1zZXQoZGVzY19zdywgMCwgc2l6ZW9mKHN0 cnVjdCBmc2xfZGVzY19zdykpOworCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNj X3N3LT5hc3luY190eCwKKwkJCQkJCSZmc2xfY2hhbi0+Y29tbW9uKTsKKwkJZGVzY19zdy0+YXN5 bmNfdHgudHhfc3VibWl0ID0gZnNsX2RtYV90eF9zdWJtaXQ7CisJCUlOSVRfTElTVF9IRUFEKCZk ZXNjX3N3LT5hc3luY190eC50eF9saXN0KTsKKwkJZGVzY19zdy0+YXN5bmNfdHgucGh5cyA9IHBk ZXNjOworCX0KKworCXJldHVybiBkZXNjX3N3OworfQorCisKKy8qKgorICogZnNsX2RtYV9hbGxv Y19jaGFuX3Jlc291cmNlcyAtIEFsbG9jYXRlIHJlc291cmNlcyBmb3IgRE1BIGNoYW5uZWwuCisg KiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHdpbGwgY3JlYXRlIGEgZG1hIHBvb2wgZm9yIGRlc2NyaXB0b3IgYWxsb2NhdGlvbi4KKyAqCisg KiBSZXR1cm4gLSBUaGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFsbG9jYXRlZC4KKyAqLworc3Rh dGljIGludCBmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4p OworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBXZSBuZWVkIHRoZSBkZXNjcmlwdG9yIHRv IGJlIGFsaWduZWQgdG8gMzJieXRlcworCSAqIGZvciBtZWV0aW5nIEZTTCBETUEgc3BlY2lmaWNh dGlvbiByZXF1aXJlbWVudC4KKwkgKi8KKwlmc2xfY2hhbi0+ZGVzY19wb29sID0gZG1hX3Bvb2xf Y3JlYXRlKCJmc2xfZG1hX2VuZ2luZV9kZXNjX3Bvb2wiLAorCQkJZnNsX2NoYW4tPmRldiwgc2l6 ZW9mKHN0cnVjdCBmc2xfZGVzY19zdyksCisJCQkzMiwgMCk7CisJaWYgKCFmc2xfY2hhbi0+ZGVz Y19wb29sKSB7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgIk5vIG1lbW9yeSBmb3IgY2hhbm5l bCAlZCAiCisJCQkiZGVzY3JpcHRvciBkbWEgcG9vbC5cbiIsIGZzbF9jaGFuLT5pZCk7CisJCXJl dHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGZzbF9kbWFfZnJlZV9jaGFu X3Jlc291cmNlcyAtIEZyZWUgYWxsIHJlc291cmNlcyBvZiB0aGUgY2hhbm5lbC4KKyAqIEBmc2xf Y2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCBmc2xfZG1hX2Zy ZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xf ZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9kZXNj X3N3ICpkZXNjLCAqX2Rlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoZnNs X2NoYW4tPmRldiwgIkZyZWUgYWxsIGNoYW5uZWwgcmVzb3VyY2VzLlxuIik7CisJc3Bpbl9sb2Nr X2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZmc2xfY2hhbi0+bGRfcXVldWUsIG5vZGUpIHsKKyNpZmRl ZiBGU0xfRE1BX0xEX0RFQlVHCisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwKKwkJCQkiTEQgJXAg d2lsbCBiZSByZWxlYXNlZC5cbiIsIGRlc2MpOworI2VuZGlmCisJCWxpc3RfZGVsKCZkZXNjLT5u b2RlKTsKKwkJLyogZnJlZSBsaW5rIGRlc2NyaXB0b3IgKi8KKwkJZG1hX3Bvb2xfZnJlZShmc2xf Y2hhbi0+ZGVzY19wb29sLCBkZXNjLCBkZXNjLT5hc3luY190eC5waHlzKTsKKwl9CisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCWRtYV9wb29s X2Rlc3Ryb3koZnNsX2NoYW4tPmRlc2NfcG9vbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2Fz eW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9kbWFfcHJlcF9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFu ICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc2l6ZV90 IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xf Y2hhbjsKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmZpcnN0ID0gTlVMTCwgKnByZXYgPSBOVUxMLCAq bmV3OworCXNpemVfdCBjb3B5OworCUxJU1RfSEVBRChsaW5rX2NoYWluKTsKKworCWlmICghY2hh bikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xf Y2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOworCisJZG8geworCisJCS8qIEFsbG9jYXRlIHRoZSBs aW5rIGRlc2NyaXB0b3IgZnJvbSBETUEgcG9vbCAqLworCQluZXcgPSBmc2xfZG1hX2FsbG9jX2Rl c2NyaXB0b3IoZnNsX2NoYW4pOworCQlpZiAoIW5ldykgeworCQkJZGV2X2Vycihmc2xfY2hhbi0+ ZGV2LAorCQkJCQkiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKKwkJZGV2X2RiZyhmc2xf Y2hhbi0+ZGV2LCAibmV3IGxpbmsgZGVzYyBhbGxvYyAlcFxuIiwgbmV3KTsKKyNlbmRpZgorCisJ CWNvcHkgPSBtaW4obGVuLCBGU0xfRE1BX0JDUl9NQVhfQ05UKTsKKworCQlzZXRfZGVzY19jbnQo ZnNsX2NoYW4sICZuZXctPmh3LCBjb3B5KTsKKwkJc2V0X2Rlc2Nfc3JjKGZzbF9jaGFuLCAmbmV3 LT5odywgZG1hX3NyYyk7CisJCXNldF9kZXNjX2Rlc3QoZnNsX2NoYW4sICZuZXctPmh3LCBkbWFf ZGVzdCk7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWZpcnN0ID0gbmV3OworCQllbHNlCisJCQlzZXRf ZGVzY19uZXh0KGZzbF9jaGFuLCAmcHJldi0+aHcsIG5ldy0+YXN5bmNfdHgucGh5cyk7CisKKwkJ bmV3LT5hc3luY190eC5jb29raWUgPSAwOworCQluZXctPmFzeW5jX3R4LmFjayA9IDE7CisKKwkJ cHJldiA9IG5ldzsKKwkJbGVuIC09IGNvcHk7CisJCWRtYV9zcmMgKz0gY29weTsKKwkJZG1hX2Rl c3QgKz0gY29weTsKKworCQkvKiBJbnNlcnQgdGhlIGxpbmsgZGVzY3JpcHRvciB0byB0aGUgTEQg cmluZyAqLworCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZmaXJzdC0+YXN5bmNfdHgudHhf bGlzdCk7CisJfSB3aGlsZSAobGVuKTsKKworCW5ldy0+YXN5bmNfdHguYWNrID0gMDsgLyogY2xp ZW50IGlzIGluIGNvbnRyb2wgb2YgdGhpcyBhY2sgKi8KKwluZXctPmFzeW5jX3R4LmNvb2tpZSA9 IC1FQlVTWTsKKworCS8qIFNldCBFbmQtb2YtbGluayB0byB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0 b3Igb2YgbmV3IGxpc3QqLworCXNldF9sZF9lb2woZnNsX2NoYW4sIG5ldyk7CisKKwlyZXR1cm4g Zmlyc3QgPyAmZmlyc3QtPmFzeW5jX3R4IDogTlVMTDsKK30KKworLyoqCisgKiBmc2xfZG1hX3Vw ZGF0ZV9jb21wbGV0ZWRfY29va2llIC0gVXBkYXRlIHRoZSBjb21wbGV0ZWQgY29va2llLgorICog QGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIGZzbF9k bWFfdXBkYXRlX2NvbXBsZXRlZF9jb29raWUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4p Cit7CisJc3RydWN0IGZzbF9kZXNjX3N3ICpjdXJfZGVzYywgKmRlc2M7CisJZG1hX2FkZHJfdCBs ZF9waHk7CisKKwlsZF9waHkgPSBnZXRfY2Rhcihmc2xfY2hhbikgJiBGU0xfRE1BX05MREFfTUFT SzsKKworCWlmIChsZF9waHkpIHsKKwkJY3VyX2Rlc2MgPSBOVUxMOworCQlsaXN0X2Zvcl9lYWNo X2VudHJ5KGRlc2MsICZmc2xfY2hhbi0+bGRfcXVldWUsIG5vZGUpCisJCQlpZiAoZGVzYy0+YXN5 bmNfdHgucGh5cyA9PSBsZF9waHkpIHsKKwkJCQljdXJfZGVzYyA9IGRlc2M7CisJCQkJYnJlYWs7 CisJCQl9CisKKwkJaWYgKGN1cl9kZXNjICYmIGN1cl9kZXNjLT5hc3luY190eC5jb29raWUpIHsK KwkJCWlmIChkbWFfaXNfaWRsZShmc2xfY2hhbikpCisJCQkJZnNsX2NoYW4tPmNvbXBsZXRlZF9j b29raWUgPQorCQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llOworCQkJZWxzZQorCQkJCWZz bF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KKwkJCQkJY3VyX2Rlc2MtPmFzeW5jX3R4LmNvb2tp ZSAtIDE7CisJCX0KKwl9Cit9CisKKy8qKgorICogZnNsX2NoYW5fbGRfY2xlYW51cCAtIENsZWFu IHVwIGxpbmsgZGVzY3JpcHRvcnMKKyAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5l bAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW4gdXAgdGhlIGxkX3F1ZXVlIG9mIERNQSBjaGFu bmVsLgorICogSWYgJ2luX2ludHInIGlzIHNldCwgdGhlIGZ1bmN0aW9uIHdpbGwgbW92ZSB0aGUg bGluayBkZXNjcmlwdG9yIHRvCisgKiB0aGUgcmVjeWNsZSBsaXN0LiBPdGhlcndpc2UsIGZyZWUg aXQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkIGZzbF9jaGFuX2xkX2NsZWFudXAoc3RydWN0 IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJc3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjLCAq X2Rlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xf Y2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisKKwlmc2xfZG1hX3VwZGF0ZV9jb21wbGV0ZWRfY29v a2llKGZzbF9jaGFuKTsKKwlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJjaGFuIGNvbXBsZXRlZF9j b29raWUgPSAlZFxuIiwKKwkJCWZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llKTsKKwlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZmc2xfY2hhbi0+bGRfcXVldWUsIG5vZGUp IHsKKwkJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOworCQl2b2lkICpjYWxsYmFja19w YXJhbTsKKworCQlpZiAoZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGRlc2MtPmFzeW5jX3R4LmNvb2tp ZSwKKwkJCSAgICBmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSwgZnNsX2NoYW4tPmNvbW1vbi5j b29raWUpCisJCQkJPT0gRE1BX0lOX1BST0dSRVNTKQorCQkJYnJlYWs7CisKKwkJY2FsbGJhY2sg PSBkZXNjLT5hc3luY190eC5jYWxsYmFjazsKKwkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT5hc3lu Y190eC5jYWxsYmFja19wYXJhbTsKKworCQkvKiBSZW1vdmUgZnJvbSBsZF9xdWV1ZSBsaXN0ICov CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKworCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJs aW5rIGRlc2NyaXB0b3IgJXAgd2lsbCBiZSByZWN5Y2xlLlxuIiwKKwkJCQlkZXNjKTsKKwkJZG1h X3Bvb2xfZnJlZShmc2xfY2hhbi0+ZGVzY19wb29sLCBkZXNjLCBkZXNjLT5hc3luY190eC5waHlz KTsKKworCQkvKiBSdW4gdGhlIGxpbmsgZGVzY3JpcHRvciBjYWxsYmFjayBmdW5jdGlvbiAqLwor CQlpZiAoY2FsbGJhY2spIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5k ZXNjX2xvY2ssIGZsYWdzKTsKKwkJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImxpbmsgZGVzY3Jp cHRvciAlcCBjYWxsYmFja1xuIiwKKwkJCQkJZGVzYyk7CisJCQljYWxsYmFjayhjYWxsYmFja19w YXJhbSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3Mp OworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ss IGZsYWdzKTsKK30KKworLyoqCisgKiBmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlIC0gVHJhbnNmZXIg bGluayBkZXNjcmlwdG9ycyBpbiBjaGFubmVsIGxkX3F1ZXVlLgorICogQGZzbF9jaGFuIDogRnJl ZXNjYWxlIERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIGZzbF9jaGFuX3hmZXJfbGRfcXVl dWUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJc3RydWN0IGxpc3RfaGVhZCAq bGRfbm9kZTsKKwlkbWFfYWRkcl90IG5leHRfZGVzdF9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlpZiAoIWRtYV9pc19pZGxlKGZzbF9jaGFuKSkKKwkJcmV0dXJuOworCisJZG1hX2hh bHQoZnNsX2NoYW4pOworCisJLyogSWYgdGhlcmUgYXJlIHNvbWUgbGluayBkZXNjcmlwdG9ycwor CSAqIG5vdCB0cmFuc2ZlcmVkIGluIHF1ZXVlLiBXZSBuZWVkIHRvIHN0YXJ0IGl0LgorCSAqLwor CXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisKKwkvKiBG aW5kIHRoZSBmaXJzdCB1bi10cmFuc2ZlciBkZXNjaXB0b3IgKi8KKwlmb3IgKGxkX25vZGUgPSBm c2xfY2hhbi0+bGRfcXVldWUubmV4dDsKKwkJKGxkX25vZGUgIT0gJmZzbF9jaGFuLT5sZF9xdWV1 ZSkKKwkJCSYmIChkbWFfYXN5bmNfaXNfY29tcGxldGUoCisJCQkJdG9fZnNsX2Rlc2MobGRfbm9k ZSktPmFzeW5jX3R4LmNvb2tpZSwKKwkJCQlmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSwKKwkJ CQlmc2xfY2hhbi0+Y29tbW9uLmNvb2tpZSkgPT0gRE1BX1NVQ0NFU1MpOworCQlsZF9ub2RlID0g bGRfbm9kZS0+bmV4dCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVz Y19sb2NrLCBmbGFncyk7CisKKwlpZiAobGRfbm9kZSAhPSAmZnNsX2NoYW4tPmxkX3F1ZXVlKSB7 CisJCS8qIEdldCB0aGUgbGQgc3RhcnQgYWRkcmVzcyBmcm9tIGxkX3F1ZXVlICovCisJCW5leHRf ZGVzdF9hZGRyID0gdG9fZnNsX2Rlc2MobGRfbm9kZSktPmFzeW5jX3R4LnBoeXM7CisJCWRldl9k YmcoZnNsX2NoYW4tPmRldiwgInhmZXIgTERzIHN0YXJpbmcgZnJvbSAweCUwMTZsbHhcbiIsCisJ CQkJKHU2NCluZXh0X2Rlc3RfYWRkcik7CisJCXNldF9jZGFyKGZzbF9jaGFuLCBuZXh0X2Rlc3Rf YWRkcik7CisJCWRtYV9zdGFydChmc2xfY2hhbik7CisJfSBlbHNlIHsKKwkJc2V0X2NkYXIoZnNs X2NoYW4sIDApOworCQlzZXRfbmRhcihmc2xfY2hhbiwgMCk7CisJfQorfQorCisvKioKKyAqIGZz bF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcgLSBJc3N1ZSB0aGUgRE1BIHN0YXJ0IGNvbW1hbmQK KyAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCBm c2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOworCisjaWZk ZWYgRlNMX0RNQV9MRF9ERUJVRworCXN0cnVjdCBmc2xfZGVzY19zdyAqbGQ7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBm bGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmZzbF9jaGFuLT5sZF9xdWV1ZSkpIHsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47 CisJfQorCisJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiLS1tZW1jcHkgaXNzdWUtLVxuIik7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeShsZCwgJmZzbF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworCQlp bnQgaTsKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiQ2ggJWQsIExEICUwOHhcbiIsCisJCQkJ ZnNsX2NoYW4tPmlkLCBsZC0+YXN5bmNfdHgucGh5cyk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBp KyspCisJCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJMRCBvZmZzZXQgJWQ6ICUwOHhcbiIsCisJ CQkJCWksICooKCh1MzIgKikmbGQtPmh3KSArIGkpKTsKKwl9CisJZGV2X2RiZyhmc2xfY2hhbi0+ ZGV2LCAiLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNs X2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworI2VuZGlmCisKKwlmc2xfY2hhbl94ZmVyX2xkX3F1 ZXVlKGZzbF9jaGFuKTsKK30KKworLyoqCisgKiBmc2xfZG1hX2lzX2NvbXBsZXRlIC0gRGV0ZXJt aW5lIHRoZSBETUEgc3RhdHVzCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwK KyAqLworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBmc2xfZG1hX2lzX2NvbXBsZXRlKHN0cnVjdCBk bWFfY2hhbiAqY2hhbiwKKwkJCQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwKKwkJCQkJZG1hX2Nvb2tp ZV90ICpkb25lLAorCQkJCQlkbWFfY29va2llX3QgKnVzZWQpCit7CisJc3RydWN0IGZzbF9kbWFf Y2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwlkbWFfY29va2llX3QgbGFzdF91 c2VkOworCWRtYV9jb29raWVfdCBsYXN0X2NvbXBsZXRlOworCisJZnNsX2NoYW5fbGRfY2xlYW51 cChmc2xfY2hhbik7CisKKwlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisJbGFzdF9jb21wbGV0 ZSA9IGZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCisJaWYgKGRvbmUpCisJCSpkb25lID0g bGFzdF9jb21wbGV0ZTsKKworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJl dHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3Vz ZWQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdChp bnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0g KHN0cnVjdCBmc2xfZG1hX2NoYW4gKilkYXRhOworCWRtYV9hZGRyX3Qgc3RhdDsKKworCXN0YXQg PSBnZXRfc3IoZnNsX2NoYW4pOworCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBjaGFu bmVsICVkLCBzdGF0ID0gMHgleFxuIiwKKwkJCQkJCWZzbF9jaGFuLT5pZCwgc3RhdCk7CisJc2V0 X3NyKGZzbF9jaGFuLCBzdGF0KTsJCS8qIENsZWFyIHRoZSBldmVudCByZWdpc3RlciAqLworCisJ c3RhdCAmPSB+KEZTTF9ETUFfU1JfQ0IgfCBGU0xfRE1BX1NSX0NIKTsKKwlpZiAoIXN0YXQpCisJ CXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0ICYgRlNMX0RNQV9TUl9URSkKKwkJZGV2X2Vy cihmc2xfY2hhbi0+ZGV2LCAiVHJhbnNmZXIgRXJyb3IhXG4iKTsKKworCS8qIElmIHRoZSBsaW5r IGRlc2NyaXB0b3Igc2VnbWVudCB0cmFuc2ZlciBmaW5pc2hlcywKKwkgKiB3ZSB3aWxsIHJlY3lj bGUgdGhlIHVzZWQgZGVzY3JpcHRvci4KKwkgKi8KKwlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfRU9T SSkgeworCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogRW5kLW9mLXNlZ21lbnRzIElO VFxuIik7CisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBjbG5kYXIgMHglMDE2bGx4 LCAiCisJCQkJIm5sbmRhciAweCUwMTZsbHhcbiIsICh1NjQpZ2V0X2NkYXIoZnNsX2NoYW4pLAor CQkJCSh1NjQpZ2V0X25kYXIoZnNsX2NoYW4pKTsKKwkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT1NJ OworCQlmc2xfY2hhbl9sZF9jbGVhbnVwKGZzbF9jaGFuKTsKKwl9CisKKwkvKiBJZiBpdCBjdXJy ZW50IHRyYW5zZmVyIGlzIHRoZSBlbmQtb2YtdHJhbnNmZXIsCisJICogd2Ugc2hvdWxkIGNsZWFy IHRoZSBDaGFubmVsIFN0YXJ0IGJpdCBmb3IKKwkgKiBwcmVwYXJlIG5leHQgdHJhbnNmZXIuCisJ ICovCisJaWYgKHN0YXQgJiAoRlNMX0RNQV9TUl9FT0xOSSB8IEZTTF9ETUFfU1JfRU9DREkpKSB7 CisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBFbmQtb2YtbGluayBJTlRcbiIpOwor CQlzdGF0ICY9IH5GU0xfRE1BX1NSX0VPTE5JOworCQlmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlKGZz bF9jaGFuKTsKKwl9CisKKwlpZiAoc3RhdCkKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZl bnQ6IHVuaGFuZGxlZCBzciAweCUwMnhcbiIsCisJCQkJCXN0YXQpOworCisJZGV2X2RiZyhmc2xf Y2hhbi0+ZGV2LCAiZXZlbnQ6IEV4aXRcbiIpOworCXRhc2tsZXRfc2NoZWR1bGUoJmZzbF9jaGFu LT50YXNrbGV0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5f dCBmc2xfZG1hX2RvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBm c2xfZG1hX2RldmljZSAqZmRldiA9IChzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKilkYXRhOworCXUz MiBnc3I7CisJaW50IGNoX25yOworCisJZ3NyID0gKGZkZXYtPmZlYXR1cmUgJiBGU0xfRE1BX0JJ R19FTkRJQU4pID8gaW5fYmUzMihmZGV2LT5yZWdfYmFzZSkKKwkJCTogaW5fbGUzMihmZGV2LT5y ZWdfYmFzZSk7CisJY2hfbnIgPSAoMzIgLSBmZnMoZ3NyKSkgLyA4OworCisJcmV0dXJuIGZkZXYt PmNoYW5bY2hfbnJdID8gZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdChpcnEsCisJCQlmZGV2LT5j aGFuW2NoX25yXSkgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIHZvaWQgZG1hX2RvX3Rhc2tsZXQo dW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0g KHN0cnVjdCBmc2xfZG1hX2NoYW4gKilkYXRhOworCWZzbF9jaGFuX2xkX2NsZWFudXAoZnNsX2No YW4pOworfQorCitzdGF0aWMgdm9pZCBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Qoc3RydWN0IGZzbF9k bWFfY2hhbiAqZnNsX2NoYW4pCit7CisJaWYgKGZzbF9jaGFuKQorCQlkZXZfaW5mbyhmc2xfY2hh bi0+ZGV2LCAic2VsZnRlc3Q6IGNhbGxiYWNrIGlzIG9rIVxuIik7Cit9CisKK3N0YXRpYyBpbnQg ZnNsX2RtYV9zZWxmX3Rlc3Qoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJc3Ry dWN0IGRtYV9jaGFuICpjaGFuOworCWludCBlcnIgPSAwOworCWRtYV9hZGRyX3QgZG1hX2Rlc3Qs IGRtYV9zcmM7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1OCAqc3JjLCAqZGVzdDsKKwlpbnQg aTsKKwlzaXplX3QgdGVzdF9zaXplOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq dHgxLCAqdHgyLCAqdHgzOworCisJdGVzdF9zaXplID0gNDA5NjsKKworCXNyYyA9IGttYWxsb2Mo dGVzdF9zaXplICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcmMpIHsKKwkJZGV2X2Vycihmc2xf Y2hhbi0+ZGV2LAorCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdGVzdCFc biIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXN0ID0gc3JjICsg dGVzdF9zaXplOworCisJZm9yIChpID0gMDsgaSA8IHRlc3Rfc2l6ZTsgaSsrKQorCQlzcmNbaV0g PSAodTgpIGk7CisKKwljaGFuID0gJmZzbF9jaGFuLT5jb21tb247CisKKwlpZiAoZnNsX2RtYV9h bGxvY19jaGFuX3Jlc291cmNlcyhjaGFuKSA8IDEpIHsKKwkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2 LAorCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIHJlc291cmNlcyBmb3IgRE1BXG4iKTsKKwkJ ZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVFggMSAqLworCWRtYV9zcmMg PSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBzcmMsIHRlc3Rfc2l6ZSAvIDIsCisJCQkJ IERNQV9UT19ERVZJQ0UpOworCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRl diwgZGVzdCwgdGVzdF9zaXplIC8gMiwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJdHgxID0g ZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8g MiwgMCk7CisJYXN5bmNfdHhfYWNrKHR4MSk7CisKKwljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1p dCh0eDEpOworCWZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7CisJbXNsZWVwKDIp OworCisJaWYgKGZzbF9kbWFfaXNfY29tcGxldGUoY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKSAh PSBETUFfU1VDQ0VTUykgeworCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGlt ZSBvdXQhXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGVz dCBmcmVlIGFuZCByZS1hbGxvYyBjaGFubmVsIHJlc291cmNlcyAqLworCWZzbF9kbWFfZnJlZV9j aGFuX3Jlc291cmNlcyhjaGFuKTsKKworCWlmIChmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2Vz KGNoYW4pIDwgMSkgeworCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCisJCQkJInNlbGZ0ZXN0OiBD YW5ub3QgYWxsb2MgcmVzb3VyY2VzIGZvciBETUFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQln b3RvIGZyZWVfcmVzb3VyY2VzOworCX0KKworCS8qIENvbnRpbnVlIHRvIHRlc3QKKwkgKiBUWCAy CisJICovCisJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRl c3Rfc2l6ZSAvIDIsCisJCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOworCWRtYV9k ZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAvIDIs CisJCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9GUk9NX0RFVklDRSk7CisJdHgyID0gZnNsX2RtYV9w cmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gNCwgMCk7CisJ YXN5bmNfdHhfYWNrKHR4Mik7CisKKwkvKiBUWCAzICovCisJZG1hX3NyYyA9IGRtYV9tYXBfc2lu Z2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRlc3Rfc2l6ZSAqIDMgLyA0LAorCQkJCQl0ZXN0X3Np emUgLyA0LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9j aGFuLT5kZXYsIGRlc3QgKyB0ZXN0X3NpemUgKiAzIC8gNCwKKwkJCQkJdGVzdF9zaXplIC8gNCwg RE1BX0ZST01fREVWSUNFKTsKKwl0eDMgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9k ZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKKwlhc3luY190eF9hY2sodHgzKTsKKwor CS8qIFRlc3QgZXhjaGFuZ2luZyB0aGUgcHJlcGFyZWQgdHggc29ydCAqLworCWNvb2tpZSA9IGZz bF9kbWFfdHhfc3VibWl0KHR4Myk7CisJY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgyKTsK KworI2lmZGVmIEZTTF9ETUFfQ0FMTEJBQ0tURVNUCisJaWYgKGRtYV9oYXNfY2FwKERNQV9JTlRF UlJVUFQsICgoc3RydWN0IGZzbF9kbWFfZGV2aWNlICopCisJICAgIGRldl9nZXRfZHJ2ZGF0YShm c2xfY2hhbi0+ZGV2LT5wYXJlbnQpKS0+Y29tbW9uLmNhcF9tYXNrKSkgeworCQl0eDMtPmNhbGxi YWNrID0gZnNsX2RtYV9jYWxsYmFja190ZXN0OworCQl0eDMtPmNhbGxiYWNrX3BhcmFtID0gZnNs X2NoYW47CisJfQorI2VuZGlmCisJZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsK Kwltc2xlZXAoMik7CisKKwlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5V TEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNl bGZ0ZXN0OiBUaW1lIG91dCFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfcmVz b3VyY2VzOworCX0KKworCWVyciA9IG1lbWNtcChzcmMsIGRlc3QsIHRlc3Rfc2l6ZSk7CisJaWYg KGVycikgeworCQlmb3IgKGkgPSAwOyAoKihzcmMgKyBpKSA9PSAqKGRlc3QgKyBpKSkgJiYgKGkg PCB0ZXN0X3NpemUpOworCQkJCWkrKyk7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0 ZXN0OiBUZXN0IGZhaWxlZCwgZGF0YSAlZC8lZCBpcyAiCisJCQkJImVycm9yISBzcmMgMHgleCwg ZGVzdCAweCV4XG4iLAorCQkJCWksIHRlc3Rfc2l6ZSwgKihzcmMgKyBpKSwgKihkZXN0ICsgaSkp OworCX0KKworZnJlZV9yZXNvdXJjZXM6CisJZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNo YW4pOworb3V0OgorCWtmcmVlKHNyYyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBf X2RldmluaXQgb2ZfZnNsX2RtYV9jaGFuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKKwkJ CWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBmc2xfZG1hX2Rl dmljZSAqZmRldjsKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpuZXdfZnNsX2NoYW47CisJaW50IGVy cjsKKworCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwlCVUdfT04o IWZkZXYpOworCisJLyogYWxsb2MgY2hhbm5lbCAqLworCW5ld19mc2xfY2hhbiA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2NoYW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19mc2xf Y2hhbikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIGZyZWUgbWVtb3J5IGZvciBhbGxvY2F0 aW5nICIKKwkJCQkiZG1hIGNoYW5uZWxzIVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8g ZXJyOworCX0KKworCS8qIGdldCBkbWEgY2hhbm5lbCByZWdpc3RlciBiYXNlICovCisJZXJyID0g b2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYtPm5vZGUsIDAsICZuZXdfZnNsX2NoYW4tPnJlZyk7 CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0 eSAncmVnJ1xuIiwKKwkJCQlkZXYtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCWdvdG8gZXJyOworCX0K KworCW5ld19mc2xfY2hhbi0+ZmVhdHVyZSA9ICoodTMyICopbWF0Y2gtPmRhdGE7CisKKwlpZiAo IWZkZXYtPmZlYXR1cmUpCisJCWZkZXYtPmZlYXR1cmUgPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmU7 CisKKwkvKiBJZiB0aGUgRE1BIGRldmljZSdzIGZlYXR1cmUgaXMgZGlmZmVyZW50IHRoYW4gaXRz IGNoYW5uZWxzJywKKwkgKiByZXBvcnQgdGhlIGJ1Zy4KKwkgKi8KKwlXQVJOX09OKGZkZXYtPmZl YXR1cmUgIT0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlKTsKKworCW5ld19mc2xfY2hhbi0+ZGV2ID0g JmRldi0+ZGV2OworCW5ld19mc2xfY2hhbi0+cmVnX2Jhc2UgPSBpb3JlbWFwKG5ld19mc2xfY2hh bi0+cmVnLnN0YXJ0LAorCQkJbmV3X2ZzbF9jaGFuLT5yZWcuZW5kIC0gbmV3X2ZzbF9jaGFuLT5y ZWcuc3RhcnQgKyAxKTsKKworCW5ld19mc2xfY2hhbi0+aWQgPSAoKG5ld19mc2xfY2hhbi0+cmVn LnN0YXJ0IC0gMHgxMDApICYgMHhmZmYpID4+IDc7CisJaWYgKG5ld19mc2xfY2hhbi0+aWQgPiBG U0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhl cmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCisJCQkJbmV3X2ZzbF9jaGFuLT5pZCk7CisJCWVyciA9 IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKwlmZGV2LT5jaGFuW25ld19mc2xfY2hhbi0+aWRd ID0gbmV3X2ZzbF9jaGFuOworCXRhc2tsZXRfaW5pdCgmbmV3X2ZzbF9jaGFuLT50YXNrbGV0LCBk bWFfZG9fdGFza2xldCwKKwkJCSh1bnNpZ25lZCBsb25nKW5ld19mc2xfY2hhbik7CisKKwkvKiBJ bml0IHRoZSBjaGFubmVsICovCisJZG1hX2luaXQobmV3X2ZzbF9jaGFuKTsKKworCS8qIENsZWFy IGNkYXIgcmVnaXN0ZXJzICovCisJc2V0X2NkYXIobmV3X2ZzbF9jaGFuLCAwKTsKKworCXN3aXRj aCAobmV3X2ZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSB7CisJY2FzZSBGU0xf RE1BX0lQXzg1WFg6CisJCW5ld19mc2xfY2hhbi0+dG9nZ2xlX2V4dF9zdGFydCA9IGZzbF9jaGFu X3RvZ2dsZV9leHRfc3RhcnQ7CisJCW5ld19mc2xfY2hhbi0+dG9nZ2xlX2V4dF9wYXVzZSA9IGZz bF9jaGFuX3RvZ2dsZV9leHRfcGF1c2U7CisJY2FzZSBGU0xfRE1BX0lQXzgzWFg6CisJCW5ld19m c2xfY2hhbi0+c2V0X3NyY19sb29wX3NpemUgPSBmc2xfY2hhbl9zZXRfc3JjX2xvb3Bfc2l6ZTsK KwkJbmV3X2ZzbF9jaGFuLT5zZXRfZGVzdF9sb29wX3NpemUgPSBmc2xfY2hhbl9zZXRfZGVzdF9s b29wX3NpemU7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJm5ld19mc2xfY2hhbi0+ZGVzY19sb2Nr KTsKKwlJTklUX0xJU1RfSEVBRCgmbmV3X2ZzbF9jaGFuLT5sZF9xdWV1ZSk7CisKKwluZXdfZnNs X2NoYW4tPmNvbW1vbi5kZXZpY2UgPSAmZmRldi0+Y29tbW9uOworCisJLyogQWRkIHRoZSBjaGFu bmVsIHRvIERNQSBkZXZpY2UgY2hhbm5lbCBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmbmV3X2Zz bF9jaGFuLT5jb21tb24uZGV2aWNlX25vZGUsCisJCQkmZmRldi0+Y29tbW9uLmNoYW5uZWxzKTsK KwlmZGV2LT5jb21tb24uY2hhbmNudCsrOworCisJbmV3X2ZzbF9jaGFuLT5pcnEgPSBpcnFfb2Zf cGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCWlmIChuZXdfZnNsX2NoYW4tPmlycSAhPSBO T19JUlEpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsCisJCQkJCSZm c2xfZG1hX2NoYW5fZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkJImZzbGRtYS1jaGFu bmVsIiwgbmV3X2ZzbF9jaGFuKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmZGV2LT5kZXYs ICJETUEgY2hhbm5lbCAlcyByZXF1ZXN0X2lycSBlcnJvciAiCisJCQkJIndpdGggcmV0dXJuICVk XG4iLCBkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQor CisjaWZkZWYgQ09ORklHX0ZTTF9ETUFfU0VMRlRFU1QKKwllcnIgPSBmc2xfZG1hX3NlbGZfdGVz dChuZXdfZnNsX2NoYW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworI2VuZGlmCisKKwlkZXZf aW5mbygmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBuZXdfZnNsX2NoYW4tPmlkLAor CQkJCW1hdGNoLT5jb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CisKKwlyZXR1cm4gMDsK K2VycjoKKwlkbWFfaGFsdChuZXdfZnNsX2NoYW4pOworCWlvdW5tYXAobmV3X2ZzbF9jaGFuLT5y ZWdfYmFzZSk7CisJZnJlZV9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsIG5ld19mc2xfY2hhbik7CisJ bGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKwlrZnJlZShuZXdf ZnNsX2NoYW4pOworCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHUzMiBtcGM4NTQwX2RtYV9pcF9m ZWF0dXJlID0gRlNMX0RNQV9JUF84NVhYIHwgRlNMX0RNQV9CSUdfRU5ESUFOOworY29uc3QgdTMy IG1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRM RV9FTkRJQU47CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZzbF9kbWFfY2hhbl9p ZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwK KwkJLmRhdGEgPSAodm9pZCAqKSZtcGM4NTQwX2RtYV9pcF9mZWF0dXJlLAorCX0sCisJeworCQku Y29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsCisJCS5kYXRhID0gKHZvaWQg KikmbXBjODM0OV9kbWFfaXBfZmVhdHVyZSwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0 IG9mX3BsYXRmb3JtX2RyaXZlciBvZl9mc2xfZG1hX2NoYW5fZHJpdmVyID0geworCS5uYW1lID0g Im9mLWZzbC1kbWEtY2hhbm5lbCIsCisJLm1hdGNoX3RhYmxlID0gb2ZfZnNsX2RtYV9jaGFuX2lk cywKKwkucHJvYmUgPSBvZl9mc2xfZG1hX2NoYW5fcHJvYmUsCit9OworCitzdGF0aWMgX19pbml0 IGludCBvZl9mc2xfZG1hX2NoYW5faW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9w bGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIpOworfQorCitzdGF0aWMgaW50 IF9fZGV2aW5pdCBvZl9mc2xfZG1hX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKKwkJCWNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCWludCBlcnI7CisJdW5zaWduZWQg aW50IGlycTsKKwlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisKKwlmZGV2ID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGZzbF9kbWFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZGV2 KSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gZW5vdWdoIG1lbW9yeSBmb3IgJ3ByaXYnXG4i KTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCWZkZXYtPmRldiA9ICZkZXYt PmRldjsKKwlJTklUX0xJU1RfSEVBRCgmZmRldi0+Y29tbW9uLmNoYW5uZWxzKTsKKworCS8qIGdl dCBETUEgY29udHJvbGxlciByZWdpc3RlciBiYXNlICovCisJZXJyID0gb2ZfYWRkcmVzc190b19y ZXNvdXJjZShkZXYtPm5vZGUsIDAsICZmZGV2LT5yZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vy cigmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCisJCQkJZGV2LT5u b2RlLT5mdWxsX25hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlkZXZfaW5mbygmZGV2LT5kZXYs ICJQcm9iZSB0aGUgRnJlZXNjYWxlIERNQSBkcml2ZXIgZm9yICVzICIKKwkJCSJjb250cm9sbGVy IGF0IDB4JTA4eC4uLlxuIiwKKwkJCW1hdGNoLT5jb21wYXRpYmxlLCBmZGV2LT5yZWcuc3RhcnQp OworCWZkZXYtPnJlZ19iYXNlID0gaW9yZW1hcChmZGV2LT5yZWcuc3RhcnQsIGZkZXYtPnJlZy5l bmQKKwkJCQkJCS0gZmRldi0+cmVnLnN0YXJ0ICsgMSk7CisKKwlkbWFfY2FwX3NldChETUFfTUVN Q1BZLCBmZGV2LT5jb21tb24uY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9JTlRFUlJVUFQs IGZkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisJZmRldi0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFu X3Jlc291cmNlcyA9IGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZmRldi0+Y29tbW9u LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2Vz OworCWZkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gZnNsX2RtYV9wcmVwX21l bWNweTsKKwlmZGV2LT5jb21tb24uZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gZnNsX2RtYV9pc19j b21wbGV0ZTsKKwlmZGV2LT5jb21tb24uZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBmc2xfZG1hX21l bWNweV9pc3N1ZV9wZW5kaW5nOworCWZkZXYtPmNvbW1vbi5kZXYgPSAmZGV2LT5kZXY7CisKKwlp cnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCWlmIChpcnEgIT0gTk9f SVJRKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJ UlFGX1NIQVJFRCwKKwkJCQkJImZzbGRtYS1kZXZpY2UiLCBmZGV2KTsKKwkJaWYgKGVycikgewor CQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgZGV2aWNlIHJlcXVlc3RfaXJxIGVycm9yICIKKwkJ CQkid2l0aCByZXR1cm4gJWRcbiIsIGVycik7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWRl dl9zZXRfZHJ2ZGF0YSgmKGRldi0+ZGV2KSwgZmRldik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2Jl KGRldi0+bm9kZSwgb2ZfZnNsX2RtYV9jaGFuX2lkcywgJmRldi0+ZGV2KTsKKworCWRtYV9hc3lu Y19kZXZpY2VfcmVnaXN0ZXIoJmZkZXYtPmNvbW1vbik7CisJcmV0dXJuIDA7CisKK2VycjoKKwlp b3VubWFwKGZkZXYtPnJlZ19iYXNlKTsKKwlrZnJlZShmZGV2KTsKKwlyZXR1cm4gZXJyOworfQor CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9mc2xfZG1hX2lkc1tdID0geworCXsgLmNv bXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxt cGM4MzQ5LWRtYSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJp dmVyIG9mX2ZzbF9kbWFfZHJpdmVyID0geworCS5uYW1lID0gIm9mLWZzbC1kbWEiLAorCS5tYXRj aF90YWJsZSA9IG9mX2ZzbF9kbWFfaWRzLAorCS5wcm9iZSA9IG9mX2ZzbF9kbWFfcHJvYmUsCit9 OworCitzdGF0aWMgX19pbml0IGludCBvZl9mc2xfZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4g b2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7Cit9CisKK3N1 YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2NoYW5faW5pdCk7CitzdWJzeXNfaW5pdGNhbGwob2Zf ZnNsX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVy cy9kbWEvZnNsZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3OGM0 MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCkBAIC0wLDAgKzEsMTg5 IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJ bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOgorICogICBaaGFuZyBXZWkg PHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPiwgSnVsIDIwMDcKKyAqICAgRWJvbnkgWmh1IDxlYm9u eS56aHVAZnJlZXNjYWxlLmNvbT4sIE1heSAyMDA3CisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICovCisjaWZuZGVmIF9fRE1BX0ZTTERNQV9ICisjZGVmaW5lIF9fRE1BX0ZTTERNQV9ICisK KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+Cisj aW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKKy8qIERlZmluZSBkYXRhIHN0cnVjdHVyZXMg bmVlZGVkIGJ5IEZyZWVzY2FsZQorICogTVBDODU0MCBhbmQgTVBDODM0OSBETUEgY29udHJvbGxl ci4KKyAqLworI2RlZmluZSBGU0xfRE1BX01SX0NTCQkweDAwMDAwMDAxCisjZGVmaW5lIEZTTF9E TUFfTVJfQ0MJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRlNMX0RNQV9NUl9DQQkJMHgwMDAwMDAwOAor I2RlZmluZSBGU0xfRE1BX01SX0VJRQkJMHgwMDAwMDA0MAorI2RlZmluZSBGU0xfRE1BX01SX1hG RQkJMHgwMDAwMDAyMAorI2RlZmluZSBGU0xfRE1BX01SX0VPTE5JRQkweDAwMDAwMTAwCisjZGVm aW5lIEZTTF9ETUFfTVJfRU9MU0lFCTB4MDAwMDAwODAKKyNkZWZpbmUgRlNMX0RNQV9NUl9FT1NJ RQkweDAwMDAwMjAwCisjZGVmaW5lIEZTTF9ETUFfTVJfQ0RTTQkJMHgwMDAwMDAxMAorI2RlZmlu ZSBGU0xfRE1BX01SX0NUTQkJMHgwMDAwMDAwNAorI2RlZmluZSBGU0xfRE1BX01SX0VNUF9FTgkw eDAwMjAwMDAwCisjZGVmaW5lIEZTTF9ETUFfTVJfRU1TX0VOCTB4MDAwNDAwMDAKKyNkZWZpbmUg RlNMX0RNQV9NUl9EQUhFCQkweDAwMDAyMDAwCisjZGVmaW5lIEZTTF9ETUFfTVJfU0FIRQkJMHgw MDAwMTAwMAorCisvKiBTcGVjaWFsIE1SIGRlZmluaXRpb24gZm9yIE1QQzgzNDkgKi8KKyNkZWZp bmUgRlNMX0RNQV9NUl9FT1RJRQkweDAwMDAwMDgwCisKKyNkZWZpbmUgRlNMX0RNQV9TUl9DSAkJ MHgwMDAwMDAyMAorI2RlZmluZSBGU0xfRE1BX1NSX0NCCQkweDAwMDAwMDA0CisjZGVmaW5lIEZT TF9ETUFfU1JfVEUJCTB4MDAwMDAwODAKKyNkZWZpbmUgRlNMX0RNQV9TUl9FT1NJCQkweDAwMDAw MDAyCisjZGVmaW5lIEZTTF9ETUFfU1JfRU9MU0kJMHgwMDAwMDAwMQorI2RlZmluZSBGU0xfRE1B X1NSX0VPQ0RJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRlNMX0RNQV9TUl9FT0xOSQkweDAwMDAwMDA4 CisKKyNkZWZpbmUgRlNMX0RNQV9TQVRSX1NCUEFUTVUJCQkweDIwMDAwMDAwCisjZGVmaW5lIEZT TF9ETUFfU0FUUl9TVFJBTlNJTlRfUklPCQkweDAwYzAwMDAwCisjZGVmaW5lIEZTTF9ETUFfU0FU Ul9TUkVBRFRZUEVfU05PT1BfUkVBRAkweDAwMDUwMDAwCisjZGVmaW5lIEZTTF9ETUFfU0FUUl9T UkVBRFRZUEVfQlBfSU9SSAkJMHgwMDAyMDAwMAorI2RlZmluZSBGU0xfRE1BX1NBVFJfU1JFQURU WVBFX0JQX05SRUFECQkweDAwMDQwMDAwCisjZGVmaW5lIEZTTF9ETUFfU0FUUl9TUkVBRFRZUEVf QlBfTVJFQUQJCTB4MDAwNzAwMDAKKworI2RlZmluZSBGU0xfRE1BX0RBVFJfREJQQVRNVQkJCTB4 MjAwMDAwMDAKKyNkZWZpbmUgRlNMX0RNQV9EQVRSX0RUUkFOU0lOVF9SSU8JCTB4MDBjMDAwMDAK KyNkZWZpbmUgRlNMX0RNQV9EQVRSX0RXUklURVRZUEVfU05PT1BfV1JJVEUJMHgwMDA1MDAwMAor I2RlZmluZSBGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9CUF9GTFVTSAkweDAwMDEwMDAwCisKKyNk ZWZpbmUgRlNMX0RNQV9FT0wJCSgodTY0KTB4MSkKKyNkZWZpbmUgRlNMX0RNQV9TTkVOCQkoKHU2 NCkweDEwKQorI2RlZmluZSBGU0xfRE1BX0VPU0lFCQkweDgKKyNkZWZpbmUgRlNMX0RNQV9OTERB X01BU0sJKH4odTY0KTB4MWYpCisKKyNkZWZpbmUgRlNMX0RNQV9CQ1JfTUFYX0NOVAkweDAzZmZm ZmZmdQorCisjZGVmaW5lIEZTTF9ETUFfREdTUl9URQkJMHg4MAorI2RlZmluZSBGU0xfRE1BX0RH U1JfQ0gJCTB4MjAKKyNkZWZpbmUgRlNMX0RNQV9ER1NSX1BFCQkweDEwCisjZGVmaW5lIEZTTF9E TUFfREdTUl9FT0xOSQkweDA4CisjZGVmaW5lIEZTTF9ETUFfREdTUl9DQgkJMHgwNAorI2RlZmlu ZSBGU0xfRE1BX0RHU1JfRU9TSQkweDAyCisjZGVmaW5lIEZTTF9ETUFfREdTUl9FT0xTSQkweDAx CisKK3N0cnVjdCBmc2xfZG1hX2xkX2h3IHsKKwl1NjQgX19iaXR3aXNlCXNyY19hZGRyOworCXU2 NCBfX2JpdHdpc2UJZHN0X2FkZHI7CisJdTY0IF9fYml0d2lzZQluZXh0X2xuX2FkZHI7CisJdTMy IF9fYml0d2lzZQljb3VudDsKKwl1MzIgX19iaXR3aXNlCXJlc2VydmU7Cit9IF9fYXR0cmlidXRl X18oKGFsaWduZWQoMzIpKSk7CisKK3N0cnVjdCBmc2xfZGVzY19zdyB7CisJc3RydWN0IGZzbF9k bWFfbGRfaHcgaHc7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBkbWFfYXN5bmNf dHhfZGVzY3JpcHRvciBhc3luY190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsZDsKKwl2b2lkICpw cml2OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpOworCitzdHJ1Y3QgZnNsX2RtYV9j aGFuX3JlZ3MgeworCXUzMiBfX2JpdHdpc2UJbXI7CS8qIDB4MDAgLSBNb2RlIFJlZ2lzdGVyICov CisJdTMyIF9fYml0d2lzZQlzcjsJLyogMHgwNCAtIFN0YXR1cyBSZWdpc3RlciAqLworCXU2NCBf X2JpdHdpc2UJY2RhcjsJLyogMHgwOCAtIEN1cnJlbnQgZGVzY3JpcHRvciBhZGRyZXNzIHJlZ2lz dGVyICovCisJdTY0IF9fYml0d2lzZQlzYXI7CS8qIDB4MTAgLSBTb3VyY2UgQWRkcmVzcyBSZWdp c3RlciAqLworCXU2NCBfX2JpdHdpc2UJZGFyOwkvKiAweDE4IC0gRGVzdGluYXRpb24gQWRkcmVz cyBSZWdpc3RlciAqLworCXUzMiBfX2JpdHdpc2UJYmNyOwkvKiAweDIwIC0gQnl0ZSBDb3VudCBS ZWdpc3RlciAqLworCXU2NCBfX2JpdHdpc2UJbmRhcjsJLyogMHgyNCAtIE5leHQgRGVzY3JpcHRv ciBBZGRyZXNzIFJlZ2lzdGVyICovCit9OworCitzdHJ1Y3QgZnNsX2RtYV9jaGFuOworI2RlZmlu ZSBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFIDQKKworc3RydWN0IGZzbF9kbWFfZGV2aWNl IHsKKwl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwkvKiBER1NSIHJlZ2lzdGVyIGJhc2UgKi8KKwlz dHJ1Y3QgcmVzb3VyY2UgcmVnOwkvKiBSZXNvdXJjZSBmb3IgcmVnaXN0ZXIgKi8KKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9uOworCXN0cnVjdCBmc2xfZG1h X2NoYW4gKmNoYW5bRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRV07CisJdTMyIGZlYXR1cmU7 CQkvKiBUaGUgc2FtZSBhcyBETUEgY2hhbm5lbHMgKi8KK307CisKKy8qIERlZmluZSBtYWNyb3Mg Zm9yIGZzbF9kbWFfY2hhbi0+ZmVhdHVyZSBwcm9wZXJ0eSAqLworI2RlZmluZSBGU0xfRE1BX0xJ VFRMRV9FTkRJQU4JMHgwMDAwMDAwMAorI2RlZmluZSBGU0xfRE1BX0JJR19FTkRJQU4JMHgwMDAw MDAwMQorCisjZGVmaW5lIEZTTF9ETUFfSVBfTUFTSwkJMHgwMDAwMGZmMAorI2RlZmluZSBGU0xf RE1BX0lQXzg1WFgJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRlNMX0RNQV9JUF84M1hYCQkweDAwMDAw MDIwCisKKyNkZWZpbmUgRlNMX0RNQV9DSEFOX1BBVVNFX0VYVAkweDAwMDAxMDAwCisjZGVmaW5l IEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQJMHgwMDAwMjAwMAorCitzdHJ1Y3QgZnNsX2RtYV9jaGFu IHsKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuX3JlZ3MgX19pb21lbSAqcmVnX2Jhc2U7CisJZG1hX2Nv b2tpZV90IGNvbXBsZXRlZF9jb29raWU7CS8qIFRoZSBtYXhpbXVtIGNvb2tpZSBjb21wbGV0ZWQg Ki8KKwlzcGlubG9ja190IGRlc2NfbG9jazsJCS8qIERlc2NyaXB0b3Igb3BlcmF0aW9uIGxvY2sg Ki8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxkX3F1ZXVlOwkvKiBMaW5rIGRlc2NyaXB0b3JzIHF1ZXVl ICovCisJc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsJCS8qIERNQSBjb21tb24gY2hhbm5lbCAqLwor CXN0cnVjdCBkbWFfcG9vbCAqZGVzY19wb29sOwkvKiBEZXNjcmlwdG9ycyBwb29sICovCisJc3Ry dWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KKwlzdHJ1Y3QgcmVzb3VyY2Ug cmVnOwkJLyogUmVzb3VyY2UgZm9yIHJlZ2lzdGVyICovCisJaW50IGlycTsJCQkvKiBDaGFubmVs IElSUSAqLworCWludCBpZDsJCQkJLyogUmF3IGlkIG9mIHRoaXMgY2hhbm5lbCAqLworCXN0cnVj dCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXUzMiBmZWF0dXJlOworCisJdm9pZCAoKnRvZ2ds ZV9leHRfcGF1c2UpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSk7CisJ dm9pZCAoKnRvZ2dsZV9leHRfc3RhcnQpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBp bnQgZW5hYmxlKTsKKwl2b2lkICgqc2V0X3NyY19sb29wX3NpemUpKHN0cnVjdCBmc2xfZG1hX2No YW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSk7CisJdm9pZCAoKnNldF9kZXN0X2xvb3Bfc2l6ZSkoc3Ry dWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKTsKK307CisKKyNkZWZpbmUgdG9f ZnNsX2NoYW4oY2hhbikgY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZG1hX2NoYW4sIGNv bW1vbikKKyNkZWZpbmUgdG9fZnNsX2Rlc2MobGgpIGNvbnRhaW5lcl9vZihsaCwgc3RydWN0IGZz bF9kZXNjX3N3LCBub2RlKQorI2RlZmluZSB0eF90b19mc2xfZGVzYyh0eCkgY29udGFpbmVyX29m KHR4LCBzdHJ1Y3QgZnNsX2Rlc2Nfc3csIGFzeW5jX3R4KQorCisjaWZuZGVmIF9fcG93ZXJwYzY0 X18KK3N0YXRpYyB1NjQgaW5fYmU2NChjb25zdCB1NjQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1 cm4gKCh1NjQpaW5fYmUzMigodTMyICopYWRkcikgPDwgMzIpIHwgKGluX2JlMzIoKHUzMiAqKWFk ZHIgKyAxKSk7Cit9CisKK3N0YXRpYyB2b2lkIG91dF9iZTY0KHU2NCBfX2lvbWVtICphZGRyLCB1 NjQgdmFsKQoreworCW91dF9iZTMyKCh1MzIgKilhZGRyLCB2YWwgPj4gMzIpOworCW91dF9iZTMy KCh1MzIgKilhZGRyICsgMSwgKHUzMil2YWwpOworfQorCisvKiBUaGVyZSBpcyBubyBhc20gaW5z dHJ1Y3Rpb25zIGZvciA2NCBiaXRzIHJldmVyc2UgbG9hZHMgYW5kIHN0b3JlcyAqLworc3RhdGlj IHU2NCBpbl9sZTY0KGNvbnN0IHU2NCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAoKHU2NClp bl9sZTMyKCh1MzIgKilhZGRyICsgMSkgPDwgMzIpIHwgKGluX2xlMzIoKHUzMiAqKWFkZHIpKTsK K30KKworc3RhdGljIHZvaWQgb3V0X2xlNjQodTY0IF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCit7 CisJb3V0X2xlMzIoKHUzMiAqKWFkZHIgKyAxLCB2YWwgPj4gMzIpOworCW91dF9sZTMyKCh1MzIg KilhZGRyLCAodTMyKXZhbCk7Cit9CisjZW5kaWYKKworI2RlZmluZSBETUFfSU4oZnNsX2NoYW4s IGFkZHIsIHdpZHRoKQkJCQkJXAorCQkoKChmc2xfY2hhbiktPmZlYXR1cmUgJiBGU0xfRE1BX0JJ R19FTkRJQU4pID8JCVwKKwkJCWluX2JlIyN3aWR0aChhZGRyKSA6IGluX2xlIyN3aWR0aChhZGRy KSkKKyNkZWZpbmUgRE1BX09VVChmc2xfY2hhbiwgYWRkciwgdmFsLCB3aWR0aCkJCQkJXAorCQko KChmc2xfY2hhbiktPmZlYXR1cmUgJiBGU0xfRE1BX0JJR19FTkRJQU4pID8JCVwKKwkJCW91dF9i ZSMjd2lkdGgoYWRkciwgdmFsKSA6IG91dF9sZSMjd2lkdGgoYWRkciwgdmFsKSkKKworI2RlZmlu ZSBETUFfVE9fQ1BVKGZzbF9jaGFuLCBkLCB3aWR0aCkJCQkJCVwKKwkJKCgoZnNsX2NoYW4pLT5m ZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/CQlcCisJCQliZSMjd2lkdGgjI190b19jcHUo ZCkgOglsZSMjd2lkdGgjI190b19jcHUoZCkpCisjZGVmaW5lIENQVV9UT19ETUEoZnNsX2NoYW4s IGMsIHdpZHRoKQkJCQkJXAorCQkoKChmc2xfY2hhbiktPmZlYXR1cmUgJiBGU0xfRE1BX0JJR19F TkRJQU4pID8JCVwKKwkJCWNwdV90b19iZSMjd2lkdGgoYykgOiBjcHVfdG9fbGUjI3dpZHRoKGMp KQorCisjZW5kaWYJLyogX19ETUFfRlNMRE1BX0ggKi8K ------=_Part_1344_13151137.1203012874654-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/