From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from paperstreet.colino.net (colino.net [213.41.131.56]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTP id 488532BEA0 for ; Sun, 28 Nov 2004 03:59:22 +1100 (EST) Date: Sat, 27 Nov 2004 17:58:47 +0100 From: Colin Leroy To: debian-powerpc@lists.debian.org, linuxppc-dev@ozlabs.org Message-ID: <20041127175847.1dc499f0@babar> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=Multipart_Sat__27_Nov_2004_17_58_47_+0100_UIezLzvP2D_Cts0m Subject: [PATCH] test patch, sungem wake-on-lan for 2.6.9+sleep List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , --Multipart_Sat__27_Nov_2004_17_58_47_+0100_UIezLzvP2D_Cts0m Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, this patch is a port of Ben's sungem WOL patch that applies on top of 2.6.9 + Ben's sleep patch. It also has 2.6.10-rc2's therm_adt746x. hth -- Colin --Multipart_Sat__27_Nov_2004_17_58_47_+0100_UIezLzvP2D_Cts0m Content-Type: application/octet-stream; name=sleep_and_wol.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=sleep_and_wol.patch ZGlmZiAtdXIgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMgYi9hcmNoL3BwYy9w bGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfZmVh dHVyZS5jCTIwMDQtMTEtMjYgMjA6MDk6NDQuNzY4NTI4OTI4ICswMTAwCisrKyBiL2FyY2gvcHBj L3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYwkyMDA0LTExLTI2IDE3OjM2OjQyLjAwMDAwMDAwMCAr MDEwMApAQCAtMTY4OCw4ICsxNjg4LDExIEBACiAJICovCiAKIAlzYXZlX3VuaW5fY2xvY2tfY3Rs ID0gVU5fSU4oVU5JX05fQ0xPQ0tfQ05UTCk7CisJLyogTm90ZTogZG8gbm90IHN3aXRjaCBHTUFD IG9mZiwgZHJpdmVyIGRvZXMgaXQgd2hlbiBuZWNlc3NhcnksIFdPTCBtdXN0IGtlZXAgaXQKKwkg KiBlbmFibGVkICEKKwkgKi8KIAlVTl9PVVQoVU5JX05fQ0xPQ0tfQ05UTCwgc2F2ZV91bmluX2Ns b2NrX2N0bCAmCi0JCX4oVU5JX05fQ0xPQ0tfQ05UTF9HTUFDfFVOSV9OX0NMT0NLX0NOVExfRlcv KnxVTklfTl9DTE9DS19DTlRMX1BDSSovKSk7CisJICAgICAgIH4oLypVTklfTl9DTE9DS19DTlRM X0dNQUN8Ki9VTklfTl9DTE9DS19DTlRMX0ZXLyp8VU5JX05fQ0xPQ0tfQ05UTF9QQ0kqLykpOwog CXVkZWxheSgxMDApOwogCVVOX09VVChVTklfTl9IV0lOSVRfU1RBVEUsIFVOSV9OX0hXSU5JVF9T VEFURV9TTEVFUElORyk7CiAJVU5fT1VUKFVOSV9OX1BPV0VSX01HVCwgVU5JX05fUE9XRVJfTUdU X1NMRUVQKTsKZGlmZiAtdXIgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9k cml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gv dGhlcm1fYWR0NzQ2eC5jCTIwMDQtMTAtMTggMjM6NTQ6NTQuMDAwMDAwMDAwICswMjAwCisrKyBi L2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwkyMDA0LTExLTE5IDA5OjAwOjM1LjAw MDAwMDAwMCArMDEwMApAQCAtMjIsMTMgKzIyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvc3Bpbmxv Y2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQu aD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKICNpbmNsdWRlIDxhc20vcHJvbS5o PgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVk ZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFz bS9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICN1bmRlZiBERUJV RwogCkBAIC01MCwyMSArNTMsMjYgQEAKIHN0YXRpYyBpbnQgZmFuX3NwZWVkID0gLTE7CiAKIE1P RFVMRV9BVVRIT1IoIkNvbGluIExlcm95IDxjb2xpbkBjb2xpbm8ubmV0PiIpOwotTU9EVUxFX0RF U0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFEVDc0NnggdGhlcm1vc3RhdCBpbiBpQm9vayBHNCBhbmQg UG93ZXJib29rIEc0IEFsdSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFEVDc0 NnggdGhlcm1vc3RhdCBpbiBpQm9vayBHNCBhbmQgIgorCQkgICAiUG93ZXJib29rIEc0IEFsdSIp OwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1NT0RVTEVfUEFSTShsaW1pdF9hZGp1c3QsImki KTsKLU1PRFVMRV9QQVJNX0RFU0MobGltaXRfYWRqdXN0LCJBZGp1c3QgbWF4aW11bSB0ZW1wZXJh dHVyZXMgKDUwIGNwdSwgNzAgZ3B1KSBieSBOIGRlZ3JlZXMuIik7Ci1NT0RVTEVfUEFSTShmYW5f c3BlZWQsImkiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmFuX3NwZWVkLCJTcGVjaWZ5IGZhbiBzcGVl ZCAoMC0yNTUpIHdoZW4gbGltIDwgdGVtcCA8IGxpbSs4IChkZWZhdWx0IDEyOCkiKTsKK21vZHVs ZV9wYXJhbShsaW1pdF9hZGp1c3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGxpbWl0 X2FkanVzdCwiQWRqdXN0IG1heGltdW0gdGVtcGVyYXR1cmVzICg1MCBjcHUsIDcwIGdwdSkgIgor CQkgImJ5IE4gZGVncmVlcy4iKTsKKworbW9kdWxlX3BhcmFtKGZhbl9zcGVlZCwgaW50LCAwNjQ0 KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFuX3NwZWVkLCJTcGVjaWZ5IHN0YXJ0aW5nIGZhbiBzcGVl ZCAoMC0yNTUpICIKKwkJICIoZGVmYXVsdCA2NCkiKTsKIAogc3RydWN0IHRoZXJtb3N0YXQgewog CXN0cnVjdCBpMmNfY2xpZW50CWNsdDsKKwl1OAkJCXRlbXBzWzNdOwogCXU4CQkJY2FjaGVkX3Rl bXBbM107CiAJdTgJCQlpbml0aWFsX2xpbWl0c1szXTsKIAl1OAkJCWxpbWl0c1szXTsKIAlpbnQJ CQlsYXN0X3NwZWVkWzJdOwotCWludAkJCW92ZXJyaWRpbmdbMl07CisJaW50CQkJbGFzdF92YXJb Ml07CiB9OwogCiBzdGF0aWMgZW51bSB7QURUNzQ2MCwgQURUNzQ2N30gdGhlcm1fdHlwZTsKQEAg LTczLDcgKzgxLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgdGhlcm1vc3RhdCogdGhlcm1vc3RhdDsKIHN0 YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZF90aGVybSA9IE5VTEw7CiAKLXN0YXRpYyBp bnQgYXR0YWNoX29uZV90aGVybW9zdGF0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50 IGFkZHIsIGludCBidXNubyk7CitzdGF0aWMgaW50IGF0dGFjaF9vbmVfdGhlcm1vc3RhdChzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAorCQkJCSBpbnQgYnVzbm8pOworCiBz dGF0aWMgdm9pZCB3cml0ZV9ib3RoX2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGlu dCBzcGVlZCk7CiBzdGF0aWMgdm9pZCB3cml0ZV9mYW5fc3BlZWQoc3RydWN0IHRoZXJtb3N0YXQg KnRoLCBpbnQgc3BlZWQsIGludCBmYW4pOwogCkBAIC0xMzksMTAgKzE0OSwxMSBAQAogCQlrdGhy ZWFkX3N0b3AodGhyZWFkX3RoZXJtKTsKIAl9CiAJCQotCXByaW50ayhLRVJOX0lORk8gImFkdDc0 Nng6IFB1dHRpbmcgbWF4IHRlbXBlcmF0dXJlcyBiYWNrIGZyb20gJWQsICVkLCAlZCwiCi0JCSIg dG8gJWQsICVkLCAlZFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJhZHQ3NDZ4OiBQdXR0aW5nIG1h eCB0ZW1wZXJhdHVyZXMgYmFjayBmcm9tICIKKwkJCSAiJWQsICVkLCAlZCB0byAlZCwgJWQsICVk XG4iLAogCQl0aC0+bGltaXRzWzBdLCB0aC0+bGltaXRzWzFdLCB0aC0+bGltaXRzWzJdLAotCQl0 aC0+aW5pdGlhbF9saW1pdHNbMF0sIHRoLT5pbml0aWFsX2xpbWl0c1sxXSwgdGgtPmluaXRpYWxf bGltaXRzWzJdKTsKKwkJdGgtPmluaXRpYWxfbGltaXRzWzBdLCB0aC0+aW5pdGlhbF9saW1pdHNb MV0sCisJCXRoLT5pbml0aWFsX2xpbWl0c1syXSk7CiAJCiAJZm9yIChpID0gMDsgaSA8IDM7IGkr KykKIAkJd3JpdGVfcmVnKHRoLCBMSU1JVF9SRUdbaV0sIHRoLT5pbml0aWFsX2xpbWl0c1tpXSk7 CkBAIC0yMDEsMTEgKzIxMiwxMSBAQAogCQogCWlmICh0aC0+bGFzdF9zcGVlZFtmYW5dICE9IHNw ZWVkKSB7CiAJCWlmIChzcGVlZCA9PSAtMSkKLQkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Nng6 IFNldHRpbmcgc3BlZWQgdG86IGF1dG9tYXRpYyBmb3IgJXMgZmFuLlxuIiwKLQkJCQlmYW4/IkdQ VSI6IkNQVSIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImFkdDc0Nng6IFNldHRpbmcgc3BlZWQg dG8gYXV0b21hdGljICIKKwkJCQkiZm9yICVzIGZhbi5cbiIsIGZhbj8iR1BVIjoiQ1BVIik7CiAJ CWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Nng6IFNldHRpbmcgc3BlZWQgdG86ICVk IGZvciAlcyBmYW4uXG4iLAotCQkJCXNwZWVkLCBmYW4/IkdQVSI6IkNQVSIpOworCQkJcHJpbnRr KEtFUk5fREVCVUcgImFkdDc0Nng6IFNldHRpbmcgc3BlZWQgdG8gJWQgIgorCQkJCSJmb3IgJXMg ZmFuLlxuIiwgc3BlZWQsIGZhbj8iR1BVIjoiQ1BVIik7CiAJfSBlbHNlCiAJCXJldHVybjsKIAkK QEAgLTIxNiw4ICsyMjcsMTEgQEAKIAl9IGVsc2UgewogCQkvKiBiYWNrIHRvIGF1dG9tYXRpYyAq LwogCQlpZih0aGVybV90eXBlID09IEFEVDc0NjApIHsKLQkJCW1hbnVhbCA9IHJlYWRfcmVnKHRo LCBNQU5VQUxfTU9ERVtmYW5dKSAmICh+TUFOVUFMX01BU0spOwotCQkJd3JpdGVfcmVnKHRoLCBN QU5VQUxfTU9ERVtmYW5dLCBtYW51YWx8UkVNX0NPTlRST0xbZmFuXSk7CisJCQltYW51YWwgPSBy ZWFkX3JlZyh0aCwKKwkJCQlNQU5VQUxfTU9ERVtmYW5dKSAmICh+TUFOVUFMX01BU0spOworCisJ CQl3cml0ZV9yZWcodGgsCisJCQkJTUFOVUFMX01PREVbZmFuXSwgbWFudWFsfFJFTV9DT05UUk9M W2Zhbl0pOwogCQl9IGVsc2UgewogCQkJbWFudWFsID0gcmVhZF9yZWcodGgsIE1BTlVBTF9NT0RF W2Zhbl0pOwogCQkJd3JpdGVfcmVnKHRoLCBNQU5VQUxfTU9ERVtmYW5dLCBtYW51YWwmKH5BVVRP X01BU0spKTsKQEAgLTIyNyw5NyArMjQxLDExNyBAQAogCXRoLT5sYXN0X3NwZWVkW2Zhbl0gPSBz cGVlZDsJCQkKIH0KIAotc3RhdGljIGludCBtb25pdG9yX3Rhc2sodm9pZCAqYXJnKQorc3RhdGlj IHZvaWQgcmVhZF9zZW5zb3JzKHN0cnVjdCB0aGVybW9zdGF0ICp0aCkKIHsKLQlzdHJ1Y3QgdGhl cm1vc3RhdCogdGggPSBhcmc7Ci0JdTggdGVtcHNbM107Ci0JdTggbGltc1szXTsKLQlpbnQgaTsK KwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQl0aC0+dGVtcHNbaV0g ID0gcmVhZF9yZWcodGgsIFRFTVBfUkVHW2ldKTsKK30KKwogI2lmZGVmIERFQlVHCi0JaW50IG1m YW5fc3BlZWQ7CitzdGF0aWMgdm9pZCBkaXNwbGF5X3N0YXRzKHN0cnVjdCB0aGVybW9zdGF0ICp0 aCkKK3sKKwlpZiAodGgtPnRlbXBzWzBdICE9IHRoLT5jYWNoZWRfdGVtcFswXQorCXx8ICB0aC0+ dGVtcHNbMV0gIT0gdGgtPmNhY2hlZF90ZW1wWzFdCisJfHwgIHRoLT50ZW1wc1syXSAhPSB0aC0+ Y2FjaGVkX3RlbXBbMl0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYWR0NzQ2eDogVGVtcGVyYXR1 cmUgaW5mb3M6IgorCQkJCSAiIHRoZXJtb3N0YXRzOiAlZCwlZCwlZDsiCisJCQkJICIgbGltaXRz OiAlZCwlZCwlZDsiCisJCQkJICIgZmFuIHNwZWVkOiAlZCBSUE1cbiIsCisJCQkJIHRoLT50ZW1w c1swXSwgdGgtPnRlbXBzWzFdLCB0aC0+dGVtcHNbMl0sCisJCQkJIHRoLT5saW1pdHNbMF0sICB0 aC0+bGltaXRzWzFdLCAgdGgtPmxpbWl0c1syXSwKKwkJCQkgcmVhZF9mYW5fc3BlZWQodGgsIEZB Tl9TUEVFRFswXSkpOworCX0KKwl0aC0+Y2FjaGVkX3RlbXBbMF0gPSB0aC0+dGVtcHNbMF07CisJ dGgtPmNhY2hlZF90ZW1wWzFdID0gdGgtPnRlbXBzWzFdOworCXRoLT5jYWNoZWRfdGVtcFsyXSA9 IHRoLT50ZW1wc1syXTsKK30KICNlbmRpZgotCXdoaWxlKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkp Ci0JewotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDAwKTsKIAotCQkvKiBDaGVjayBzdGF0dXMg Ki8KLQkJLyogbG9jYWwgICA6IGNoaXAgKi8KLQkJLyogcmVtb3RlIDE6IENQVSA/Ki8KLQkJLyog cmVtb3RlIDI6IEdQVSA/Ki8KLSNpZm5kZWYgREVCVUcKLQkJaWYgKGZhbl9zcGVlZCAhPSAtMSkg ewotI2VuZGlmCi0JCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQkJdGVtcHNbaV0gID0g cmVhZF9yZWcodGgsIFRFTVBfUkVHW2ldKTsKLQkJCQlsaW1zW2ldICAgPSB0aC0+bGltaXRzW2ld Oworc3RhdGljIHZvaWQgdXBkYXRlX2ZhbnNfc3BlZWQgKHN0cnVjdCB0aGVybW9zdGF0ICp0aCkK K3sKKwlpbnQgbGFzdHZhciA9IDA7IC8qIGxhc3QgdmFyaWF0aW9uLCBmb3IgaUJvb2sgKi8KKwlp bnQgaSA9IDA7CisKKwkvKiB3ZSBkb24ndCBjYXJlIGFib3V0IGxvY2FsIHNlbnNvciwgc28gd2Ug c3RhcnQgYXQgc2Vuc29yIDEgKi8KKwlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKSB7CisJCWludCBz dGFydGVkID0gMDsKKwkJaW50IGZhbl9udW1iZXIgPSAodGhlcm1fdHlwZSA9PSBBRFQ3NDYwICYm IGkgPT0gMik7CisJCWludCB2YXIgPSB0aC0+dGVtcHNbaV0gLSB0aC0+bGltaXRzW2ldOworCisJ CWlmICh2YXIgPiAtMSkgeworCQkJaW50IHN0ZXAgPSAoMjU1IC0gZmFuX3NwZWVkKSAvIDc7CisJ CQlpbnQgbmV3X3NwZWVkID0gMDsKKworCQkJLyogaHlzdGVyZXNpcyA6IGNoYW5nZSBmYW4gc3Bl ZWQgb25seSBpZiB2YXJpYXRpb24gaXMKKwkJCSAqIG1vcmUgdGhhbiB0d28gZGVncmVlcyAqLwor CQkJaWYgKGFicyh2YXIgLSB0aC0+bGFzdF92YXJbZmFuX251bWJlcl0pIDwgMikKKwkJCQljb250 aW51ZTsKKworCQkJc3RhcnRlZCA9IDE7CisJCQluZXdfc3BlZWQgPSBmYW5fc3BlZWQgKyAoKHZh ci0xKSpzdGVwKTsKKworCQkJaWYgKG5ld19zcGVlZCA8IGZhbl9zcGVlZCkKKwkJCQluZXdfc3Bl ZWQgPSBmYW5fc3BlZWQ7CisJCQlpZiAobmV3X3NwZWVkID4gMjU1KQorCQkJCW5ld19zcGVlZCA9 IDI1NTsKKworCQkJcHJpbnRrKEtFUk5fREVCVUcgImFkdDc0Nng6IHNldHRpbmcgZmFucyBzcGVl ZCB0byAlZCAiCisJCQkJCSAiKGxpbWl0IGV4Y2VlZGVkIGJ5ICVkIG9uICVzKSBcbiIsCisJCQkJ CW5ld19zcGVlZCwgdmFyLAorCQkJCQlmYW5fbnVtYmVyPyJHUFUvcHdyIjoiQ1BVIik7CisJCQl3 cml0ZV9ib3RoX2Zhbl9zcGVlZCh0aCwgbmV3X3NwZWVkKTsKKwkJCXRoLT5sYXN0X3ZhcltmYW5f bnVtYmVyXSA9IHZhcjsKKwkJfSBlbHNlIGlmICh2YXIgPCAtMikgeworCQkJLyogZG9uJ3Qgc3Rv cCBmYW4gaWYgR1BVL3Bvd2VyIGlzIGNvbGQgYW5kIENQVSBpcyBub3QKKwkJCSAqIHNvIGNvbGQg KGxhc3R2YXIgPj0gLTEpICovCisJCQlpZiAoaSA9PSAyICYmIGxhc3R2YXIgPCAtMSkgeworCQkJ CWlmICh0aC0+bGFzdF9zcGVlZFtmYW5fbnVtYmVyXSAhPSAwKQorCQkJCQlwcmludGsoS0VSTl9E RUJVRyAiYWR0NzQ2eDogU3RvcHBpbmcgIgorCQkJCQkJImZhbnMuXG4iKTsKKwkJCQl3cml0ZV9i b3RoX2Zhbl9zcGVlZCh0aCwgMCk7CiAJCQl9Ci0jaWZuZGVmIERFQlVHCiAJCX0KKworCQlsYXN0 dmFyID0gdmFyOworCisJCWlmIChzdGFydGVkKQorCQkJcmV0dXJuOyAvKiB3ZSBkb24ndCB3YW50 IHRvIHJlLXN0b3AgdGhlIGZhbgorCQkJCSogaWYgQ1BVIGlzIGhlYXRpbmcgYW5kIEdQVS9wb3dl ciBpcyBub3QgKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgbW9uaXRvcl90YXNrKHZvaWQgKmFyZykK K3sKKwlzdHJ1Y3QgdGhlcm1vc3RhdCogdGggPSBhcmc7CisKKwl3aGlsZSgha3RocmVhZF9zaG91 bGRfc3RvcCgpKSB7CisJCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkKKwkJCXJlZnJp Z2VyYXRvcihQRl9GUkVFWkUpOworCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMDApOworCisj aWZuZGVmIERFQlVHCisJCWlmIChmYW5fc3BlZWQgIT0gLTEpCisJCQlyZWFkX3NlbnNvcnModGgp OworI2Vsc2UKKwkJcmVhZF9zZW5zb3JzKHRoKTsKICNlbmRpZgkJCi0JCWlmIChmYW5fc3BlZWQg IT0gLTEpIHsKLQkJCWludCBsYXN0dmFyID0gMDsJCS8qIGZvciBpQm9vayAqLwotCQkJZm9yIChp ID0gMTsgaSA8IDM7IGkrKykgewkvKiB3ZSBkb24ndCBjYXJlIGFib3V0IGxvY2FsIHNlbnNvciAq LwotCQkJCWludCBzdGFydGVkID0gMDsKLQkJCQlpbnQgZmFuX251bWJlciA9ICh0aGVybV90eXBl ID09IEFEVDc0NjAgJiYgaSA9PSAyKTsKLQkJCQlpbnQgdmFyID0gdGVtcHNbaV0gLSBsaW1zW2ld OwotCQkJCWlmICh2YXIgPiA4KSB7Ci0JCQkJCWlmICh0aC0+b3ZlcnJpZGluZ1tmYW5fbnVtYmVy XSA9PSAwKQotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWR0NzQ2eDogTGltaXQgZXhjZWVkZWQg YnkgJWQsIG92ZXJyaWRpbmcgc3BlY2lmaWVkIGZhbiBzcGVlZCBmb3IgJXMuXG4iLAotCQkJCQkJ CXZhciwgZmFuX251bWJlcj8iR1BVIjoiQ1BVIik7Ci0JCQkJCXRoLT5vdmVycmlkaW5nW2Zhbl9u dW1iZXJdID0gMTsKLQkJCQkJd3JpdGVfZmFuX3NwZWVkKHRoLCAyNTUsIGZhbl9udW1iZXIpOwot CQkJCQlzdGFydGVkID0gMTsKLQkJCQl9IGVsc2UgaWYgKCghdGgtPm92ZXJyaWRpbmdbZmFuX251 bWJlcl0gfHwgdmFyIDwgNikgJiYgdmFyID4gMCkgewotCQkJCQlpZiAodGgtPm92ZXJyaWRpbmdb ZmFuX251bWJlcl0gPT0gMSkKLQkJCQkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Nng6IExpbWl0 IGV4Y2VlZGVkIGJ5ICVkLCBzZXR0aW5nIHNwZWVkIHRvIHNwZWNpZmllZCBmb3IgJXMuXG4iLAot CQkJCQkJCXZhciwgZmFuX251bWJlcj8iR1BVIjoiQ1BVIik7CQkJCQkKLQkJCQkJdGgtPm92ZXJy aWRpbmdbZmFuX251bWJlcl0gPSAwOwotCQkJCQl3cml0ZV9mYW5fc3BlZWQodGgsIGZhbl9zcGVl ZCwgZmFuX251bWJlcik7Ci0JCQkJCXN0YXJ0ZWQgPSAxOwotCQkJCX0gZWxzZSBpZiAodmFyIDwg LTEpIHsKLQkJCQkJLyogZG9uJ3Qgc3RvcCBpQm9vayBmYW4gaWYgR1BVIGlzIGNvbGQgYW5kIENQ VSBpcyBub3QKLQkJCQkJICogc28gY29sZCAobGFzdHZhciA+PSAtMSkgKi8KLQkJCQkJaWYgKHRo ZXJtX3R5cGUgPT0gQURUNzQ2MCB8fCBsYXN0dmFyIDwgLTEgfHwgaSA9PSAxKSB7Ci0JCQkJCQlp ZiAodGgtPmxhc3Rfc3BlZWRbZmFuX251bWJlcl0gIT0gMCkKLQkJCQkJCQlwcmludGsoS0VSTl9J TkZPICJhZHQ3NDZ4OiBTdG9wcGluZyAlcyBmYW4uXG4iLAotCQkJCQkJCQlmYW5fbnVtYmVyPyJH UFUiOiJDUFUiKTsKLQkJCQkJCXdyaXRlX2Zhbl9zcGVlZCh0aCwgMCwgZmFuX251bWJlcik7Ci0J CQkJCX0KLQkJCQl9Ci0JCQkJCi0JCQkJbGFzdHZhciA9IHZhcjsKLQkJCQkKLQkJCQlpZiAoc3Rh cnRlZCAmJiB0aGVybV90eXBlID09IEFEVDc0NjcpCi0JCQkJCWJyZWFrOyAvKiB3ZSBkb24ndCB3 YW50IHRvIHJlLXN0b3AgdGhlIGZhbgotCQkJCQkJKiBpZiBDUFUgaXMgaGVhdGluZyBhbmQgR1BV IGlzIG5vdCAqLwotCQkJfQotCQl9CisKKwkJaWYgKGZhbl9zcGVlZCAhPSAtMSkKKwkJCXVwZGF0 ZV9mYW5zX3NwZWVkKHRoKTsKKwogI2lmZGVmIERFQlVHCi0JCW1mYW5fc3BlZWQgPSByZWFkX2Zh bl9zcGVlZCh0aCwgRkFOX1NQRUVEWzBdKTsKLQkJLyogb25seSBvbmUgZmFuIGluIHRoZSBpQm9v ayBHNCAqLwotCQkJCQotCQlpZiAodGVtcHNbMF0gIT0gdGgtPmNhY2hlZF90ZW1wWzBdCi0JCXx8 ICB0ZW1wc1sxXSAhPSB0aC0+Y2FjaGVkX3RlbXBbMV0KLQkJfHwgIHRlbXBzWzJdICE9IHRoLT5j YWNoZWRfdGVtcFsyXSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWR0NzQ2eDogVGVtcGVyYXR1 cmUgaW5mb3M6IgotCQkJCQkgIiB0aGVybW9zdGF0czogJWQsJWQsJWQ7IgotCQkJCQkgIiBsaW1p dHM6ICVkLCVkLCVkOyIKLQkJCQkJICIgZmFuIHNwZWVkOiAlZCBSUE1cbiIsCi0JCQkJdGVtcHNb MF0sIHRlbXBzWzFdLCB0ZW1wc1syXSwKLQkJCQlsaW1zWzBdLCAgbGltc1sxXSwgIGxpbXNbMl0s Ci0JCQkJbWZhbl9zcGVlZCk7Ci0JCX0KLQkJdGgtPmNhY2hlZF90ZW1wWzBdID0gdGVtcHNbMF07 Ci0JCXRoLT5jYWNoZWRfdGVtcFsxXSA9IHRlbXBzWzFdOwotCQl0aC0+Y2FjaGVkX3RlbXBbMl0g PSB0ZW1wc1syXTsKLSNlbmRpZgkJCisJCWRpc3BsYXlfc3RhdHModGgpOworI2VuZGlmCisKIAl9 CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXNldF9saW1pdChzdHJ1Y3QgdGhlcm1v c3RhdCAqdGgsIGludCBpKQorc3RhdGljIHZvaWQgc2V0X2xpbWl0KHN0cnVjdCB0aGVybW9zdGF0 ICp0aCwgaW50IGkpCiB7CiAJCS8qIFNldCBDUFUgbGltaXQgaGlnaGVyIHRvIGF2b2lkIHBvd2Vy ZG93bnMgKi8gCiAJCXRoLT5saW1pdHNbaV0gPSBkZWZhdWx0X2xpbWl0c19jaGlwW2ldICsgbGlt aXRfYWRqdXN0OwpAQCAtMzI2LDkgKzM2MCw5IEBACiAJCS8qIHNldCBvdXIgbGltaXRzIHRvIG5v cm1hbCAqLwogCQl0aC0+bGltaXRzW2ldID0gZGVmYXVsdF9saW1pdHNfbG9jYWxbaV0gKyBsaW1p dF9hZGp1c3Q7CiB9Ci0JCi1zdGF0aWMgaW50Ci1hdHRhY2hfb25lX3RoZXJtb3N0YXQoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGJ1c25vKQorCitzdGF0aWMgaW50 IGF0dGFjaF9vbmVfdGhlcm1vc3RhdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBh ZGRyLAorCQkJCSBpbnQgYnVzbm8pCiB7CiAJc3RydWN0IHRoZXJtb3N0YXQqIHRoOwogCWludCBy YzsKQEAgLTMzNiw5ICszNzAsMTMgQEAKIAogCWlmICh0aGVybW9zdGF0KQogCQlyZXR1cm4gMDsK LQl0aCA9IChzdHJ1Y3QgdGhlcm1vc3RhdCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aGVybW9z dGF0KSwgR0ZQX0tFUk5FTCk7CisKKwl0aCA9IChzdHJ1Y3QgdGhlcm1vc3RhdCAqKQorCQlrbWFs bG9jKHNpemVvZihzdHJ1Y3QgdGhlcm1vc3RhdCksIEdGUF9LRVJORUwpOworCiAJaWYgKCF0aCkK IAkJcmV0dXJuIC1FTk9NRU07CisKIAltZW1zZXQodGgsIDAsIHNpemVvZigqdGgpKTsKIAl0aC0+ Y2x0LmFkZHIgPSBhZGRyOwogCXRoLT5jbHQuYWRhcHRlciA9IGFkYXB0ZXI7CkBAIC0zNDgsMTUg KzM4NiwxNiBAQAogCiAJcmMgPSByZWFkX3JlZyh0aCwgMCk7CiAJaWYgKHJjIDwgMCkgewotCQlw cmludGsoS0VSTl9FUlIgImFkdDc0Nng6IFRoZXJtb3N0YXQgZmFpbGVkIHRvIHJlYWQgY29uZmln IGZyb20gYnVzICVkICFcbiIsCi0JCQlidXNubyk7CisJCXByaW50ayhLRVJOX0VSUiAiYWR0NzQ2 eDogVGhlcm1vc3RhdCBmYWlsZWQgdG8gcmVhZCBjb25maWcgIgorCQkJCSJmcm9tIGJ1cyAlZCAh XG4iLAorCQkJCWJ1c25vKTsKIAkJa2ZyZWUodGgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisK IAkvKiBmb3JjZSBtYW51YWwgY29udHJvbCB0byBzdGFydCB0aGUgZmFuIHF1aWV0ZXIgKi8KLQkK IAlpZiAoZmFuX3NwZWVkID09IC0xKQotCQlmYW5fc3BlZWQ9MTI4OworCQlmYW5fc3BlZWQgPSA2 NDsKIAkKIAlpZih0aGVybV90eXBlID09IEFEVDc0NjApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAi YWR0NzQ2eDogQURUNzQ2MCBpbml0aWFsaXppbmdcbiIpOwpAQCAtMzcxLDE0ICs0MTAsMTYgQEAK IAl9CiAJCiAJcHJpbnRrKEtFUk5fSU5GTyAiYWR0NzQ2eDogTG93ZXJpbmcgbWF4IHRlbXBlcmF0 dXJlcyBmcm9tICVkLCAlZCwgJWQiCi0JCSIgdG8gJWQsICVkLCAlZFxuIiwKLQkJdGgtPmluaXRp YWxfbGltaXRzWzBdLCB0aC0+aW5pdGlhbF9saW1pdHNbMV0sIHRoLT5pbml0aWFsX2xpbWl0c1sy XSwgCi0JCXRoLT5saW1pdHNbMF0sIHRoLT5saW1pdHNbMV0sIHRoLT5saW1pdHNbMl0pOworCQkJ ICIgdG8gJWQsICVkLCAlZFxuIiwKKwkJCSB0aC0+aW5pdGlhbF9saW1pdHNbMF0sIHRoLT5pbml0 aWFsX2xpbWl0c1sxXSwKKwkJCSB0aC0+aW5pdGlhbF9saW1pdHNbMl0sIHRoLT5saW1pdHNbMF0s IHRoLT5saW1pdHNbMV0sCisJCQkgdGgtPmxpbWl0c1syXSk7CiAKIAl0aGVybW9zdGF0ID0gdGg7 CiAKIAlpZiAoaTJjX2F0dGFjaF9jbGllbnQoJnRoLT5jbHQpKSB7Ci0JCXByaW50ayhLRVJOX0lO Rk8gImFkdDc0Nng6IFRoZXJtb3N0YXQgZmFpbGVkIHRvIGF0dGFjaCBjbGllbnQgIVxuIik7CisJ CXByaW50ayhLRVJOX0lORk8gImFkdDc0Nng6IFRoZXJtb3N0YXQgZmFpbGVkIHRvIGF0dGFjaCAi CisJCQkJICJjbGllbnQgIVxuIik7CiAJCXRoZXJtb3N0YXQgPSBOVUxMOwogCQlrZnJlZSh0aCk7 CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzg3LDEwICs0MjgsMTQgQEAKIAkvKiBiZSBzdXJlIHRv IHJlYWxseSB3cml0ZSBmYW4gc3BlZWQgdGhlIGZpcnN0IHRpbWUgKi8KIAl0aC0+bGFzdF9zcGVl ZFswXSA9IC0yOwogCXRoLT5sYXN0X3NwZWVkWzFdID0gLTI7Ci0JCisJdGgtPmxhc3RfdmFyWzBd ID0gLTgwOworCXRoLT5sYXN0X3ZhclsxXSA9IC04MDsKKwogCWlmIChmYW5fc3BlZWQgIT0gLTEp IHsKKwkJLyogbWFudWFsIG1vZGUsIHN0b3AgZmFucyAqLwogCQl3cml0ZV9ib3RoX2Zhbl9zcGVl ZCh0aCwgMCk7CiAJfSBlbHNlIHsKKwkJLyogYXV0b21hdGljIG1vZGUgKi8KIAkJd3JpdGVfYm90 aF9mYW5fc3BlZWQodGgsIC0xKTsKIAl9CiAJCkBAIC01MDcsOCArNTUyLDkgQEAKIAl0aGVybV9i dXMgPSAoKCpwcm9wKSA+PiA4KSAmIDB4MGY7CiAJdGhlcm1fYWRkcmVzcyA9ICgoKnByb3ApICYg MHhmZikgPj4gMTsKIAotCXByaW50ayhLRVJOX0lORk8gImFkdDc0Nng6IFRoZXJtb3N0YXQgYnVz OiAlZCwgYWRkcmVzczogMHglMDJ4LCBsaW1pdF9hZGp1c3Q6ICVkLCBmYW5fc3BlZWQ6ICVkXG4i LAotCQl0aGVybV9idXMsIHRoZXJtX2FkZHJlc3MsIGxpbWl0X2FkanVzdCwgZmFuX3NwZWVkKTsK KwlwcmludGsoS0VSTl9JTkZPICJhZHQ3NDZ4OiBUaGVybW9zdGF0IGJ1czogJWQsIGFkZHJlc3M6 IDB4JTAyeCwgIgorCQkJICJsaW1pdF9hZGp1c3Q6ICVkLCBmYW5fc3BlZWQ6ICVkXG4iLAorCQkJ IHRoZXJtX2J1cywgdGhlcm1fYWRkcmVzcywgbGltaXRfYWRqdXN0LCBmYW5fc3BlZWQpOwogCiAJ b2ZfZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInRlbXBlcmF0dXJlcyIpOwog CQpAQCAtNTQ1LDggKzU5MSwxMSBAQAogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm9mX2Rldi0+ZGV2 LCAmZGV2X2F0dHJfbGltaXRfYWRqdXN0KTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYt PmRldiwgJmRldl9hdHRyX3NwZWNpZmllZF9mYW5fc3BlZWQpOwogCQlkZXZpY2VfcmVtb3ZlX2Zp bGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3B1X2Zhbl9zcGVlZCk7CisKIAkJaWYodGhlcm1f dHlwZSA9PSBBRFQ3NDYwKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRl dl9hdHRyX2dwdV9mYW5fc3BlZWQpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRl diwKKwkJCQkJICAgJmRldl9hdHRyX2dwdV9mYW5fc3BlZWQpOworCiAJCW9mX2RldmljZV91bnJl Z2lzdGVyKG9mX2Rldik7CiAJfQogCWkyY19kZWxfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7 CmRpZmYgLXVyIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwot LS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYwkyMDA0LTExLTI2IDIwOjA5OjQ0Ljc5OTUyNDIxNiAr MDEwMAorKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwkyMDA0LTExLTI2IDE5OjU0OjQxLjAwMDAw MDAwMCArMDEwMApAQCAtMTAsOSArMTAsMjQgQEAKICAqIChDKSAyMDA0IGJ5IEVyaWMgTGVtb2lu ZSAoZXJpYy5sZW1vaW5lQGdtYWlsLmNvbSkKICAqIAogICogVE9ETzogCi0gKiAgLSBHZXQgcmlk IG9mIGFsbCB0aG9zZSBuYXN0eSBtZGVsYXkncyBhbmQgcmVwbGFjZSB0aGVtCi0gKiB3aXRoIHNj aGVkdWxlX3RpbWVvdXQuCi0gKiAgLSBJbXBsZW1lbnQgV09MCisgKiAgLSBOb3cgdGhhdCB0aGUg ZHJpdmVyIHdhcyBzaWduaWZpY2FudGx5IHNpbXBsaWZpZWQsIEkgbmVlZCB0byByZXdvcmsKKyAq ICAgIHRoZSBsb2NraW5nLiBJJ20gc3VyZSB3ZSBkb24ndCBuZWVkIF8yXyBzcGlubG9ja3MsIGFu ZCB3ZSBwcm9iYWJseQorICogICAgY2FuIGF2b2lkIHRha2luZyBtb3N0IG9mIHRoZW0gZm9yIHNv IGxvbmcgcGVyaW9kIG9mIHRpbWUgKGFuZCBzY2hlZHVsZQorICogICAgaW5zdGVhZCkuIFRoZSBt YWluIGlzc3VlcyBhdCB0aGlzIHBvaW50IGFyZSBjYXVzZWQgYnkgdGhlIG5ldGRldiBsYXllcgor ICogICAgdGhvdWdoOgorICogICAgCisgKiAgICBnZW1fY2hhbmdlX210dSgpIGFuZCBnZW1fc2V0 X211bHRpY2FzdCgpIGFyZSBjYWxsZWQgd2l0aCBhIHJlYWRfbG9jaygpCisgKiAgICBoZWxwIGJ5 IG5ldC9jb3JlL2Rldi5jLCB0aHVzIHRoZXkgY2FuJ3Qgc2NoZWR1bGUuIFRoYXQgbWVhbnMgdGhl eSBjYW4ndAorICogICAgY2FsbCBuZXRpZl9wb2xsX2Rpc2FibGUoKSBuZWl0aGVyLCB0aHVzIGZv cmNlIGdlbV9wb2xsKCkgdG8ga2VlcCBhIHNwaW5sb2NrCisgKiAgICB3aGVyZSBpdCBjb3VsZCBo YXZlIGJlZW4gZHJvcHBlZC4gY2hhbmdlX210dSBlc3BlY2lhbGx5IHdvdWxkIGxvdmUgYWxzbyB0 bworICogICAgYmUgYWJsZSB0byBtc2xlZXAgaW5zdGVhZCBvZiBob3JyaWQgbG9ja2VkIGRlbGF5 cyB3aGVuIHJlc2V0dGluZyB0aGUgSFcsCisgKiAgICBidXQgdGhhdCByZWFkX2xvY2soKSBtYWtl cyBpdCBpbXBvc3NpYmxlLCB1bmxlc3MgSSBkZWZlciBpdCdzIGFjdGlvbiB0bworICogICAgdGhl IHJlc2V0IHRhc2ssIHdoaWNoIG1lYW5zIGl0J2xsIGJlIGFzeW5jaHJvbm91cyAod29uJ3QgdGFr ZSBlZmZlY3QgdW50aWwKKyAqICAgIHRoZSBzeXN0ZW0gc2NoZWR1bGVzIGEgYml0KS4KKyAqCisg KiAgICBBbHNvLCBpdCB3b3VsZCBwcm9iYWJseSBiZSBwb3NzaWJsZSB0byBhbHNvIHJlbW92ZSBt b3N0IG9mIHRoZSBsb25nLWxpZmUKKyAqICAgIGxvY2tpbmcgaW4gb3Blbi9yZXN1bWUgY29kZSBw YXRoIChnZW1fcmVpbml0X2NoaXApIGJ5IGJlZWluZyBtb3JlIGNhcmVmdWwKKyAqICAgIGFib3V0 IHdoZW4gd2UgY2FuIHN0YXJ0IHRha2luZyBpbnRlcnJ1cHRzIG9yIGdldCB4bWl0KCkgY2FsbGVk Li4uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTk2LDYgKzIxMSwyOSBA QAogCXdyaXRlbChHUkVHX1NUQVRfTkFQSSB8IEdSRUdfU1RBVF9UWERPTkUsIGdwLT5yZWdzICsg R1JFR19JTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbV9nZXRfY2VsbChzdHJ1Y3QgZ2VtICpn cCkKK3sKKwlncC0+Y2VsbF9lbmFibGVkKys7CisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJaWYg KGdwLT5jZWxsX2VuYWJsZWQgPT0gMSkgeworCQltYigpOworCQlwbWFjX2NhbGxfZmVhdHVyZShQ TUFDX0ZUUl9HTUFDX0VOQUJMRSwgZ3AtPm9mX25vZGUsIDAsIDEpOworCQl1ZGVsYXkoMTApOwor CX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KK30KKworLyogVHVybiBvZmYgdGhlIGNo aXAncyBjbG9jayAqLworc3RhdGljIHZvaWQgZ2VtX3B1dF9jZWxsKHN0cnVjdCBnZW0gKmdwKQor eworCWdwLT5jZWxsX2VuYWJsZWQtLTsKKwlCVUdfT04oZ3AtPmNlbGxfZW5hYmxlZCA8IDApOwor I2lmZGVmIENPTkZJR19QUENfUE1BQworCWlmIChncC0+Y2VsbF9lbmFibGVkID09IDApCisJCXBt YWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dNQUNfRU5BQkxFLCBncC0+b2Zfbm9kZSwgMCwgMCk7 CisjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCit9CisKIHN0YXRpYyB2b2lkIGdlbV9oYW5k bGVfbWlmX2V2ZW50KHN0cnVjdCBnZW0gKmdwLCB1MzIgcmVnX3ZhbCwgdTMyIGNoYW5nZWRfYml0 cykKIHsKIAlpZiAobmV0aWZfbXNnX2ludHIoZ3ApKQpAQCAtNTk3LDcgKzYzNSw3IEBACiAJcmV0 dXJuIDA7CiAKIGRvX3Jlc2V0OgotCWdwLT5yZXNldF90YXNrX3BlbmRpbmcgPSAyOworCWdwLT5y ZXNldF90YXNrX3BlbmRpbmcgPSAxOwogCXNjaGVkdWxlX3dvcmsoJmdwLT5yZXNldF90YXNrKTsK IAogCXJldHVybiAxOwpAQCAtODIzLDYgKzg2MSw5IEBACiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYt PnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qCisJICogTkFQSSBsb2NraW5nIG5p Z2h0bWFyZTogU2VlIGNvbW1lbnQgYXQgaGVhZCBvZiBkcml2ZXIgCisJICovCiAJc3Bpbl9sb2Nr X2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKIAlkbyB7CkBAIC04NzQsOCArOTE1LDExIEBA CiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAot CS8qIFN3YWxsb3cgaW50ZXJydXB0cyB3aGVuIHNodXR0aW5nIHRoZSBjaGlwIGRvd24gKi8KLQlp ZiAoIWdwLT5od19ydW5uaW5nKQorCS8qIFN3YWxsb3cgaW50ZXJydXB0cyB3aGVuIHNodXR0aW5n IHRoZSBjaGlwIGRvd24sIHRob3VnaAorCSAqIHRoYXQgc2hvdWxkbid0IGhhcHBlbiwgd2Ugc2hv dWxkIGhhdmUgZG9uZSBmcmVlX2lycSgpIGF0CisJICogdGhpcyBwb2ludC4uLgorCSAqLworCWlm ICghZ3AtPnJ1bm5pbmcpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCXNwaW5fbG9ja19pcnFz YXZlKCZncC0+bG9jaywgZmxhZ3MpOwpAQCAtOTE2LDcgKzk2MCw3IEBACiAJc3RydWN0IGdlbSAq Z3AgPSBkZXYtPnByaXY7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmFuc21pdCB0aW1lZCBv dXQsIHJlc2V0dGluZ1xuIiwgZGV2LT5uYW1lKTsKLQlpZiAoIWdwLT5od19ydW5uaW5nKSB7CisJ aWYgKCFncC0+cnVubmluZykgewogCQlwcmludGsoIiVzOiBocm0uLiBodyBub3QgcnVubmluZyAh XG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQpAQCAtOTM0LDcgKzk3OCw3IEBACiAJc3Bp bl9sb2NrX2lycSgmZ3AtPmxvY2spOwogCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwogCi0JZ3At PnJlc2V0X3Rhc2tfcGVuZGluZyA9IDI7CisJZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9IDE7CiAJ c2NoZWR1bGVfd29yaygmZ3AtPnJlc2V0X3Rhc2spOwogCiAJc3Bpbl91bmxvY2soJmdwLT50eF9s b2NrKTsKQEAgLTk3NSw2ICsxMDE5LDExIEBACiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsK IAkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CiAJfQorCS8qIFdlIHJhY2VkIHdpdGggZ2VtX2Rv X3N0b3AoKSAqLworCWlmICghZ3AtPnJ1bm5pbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZ3AtPnR4X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KIAog CS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCiAJaWYgKFRYX0JVRkZTX0FWQUlM KGdwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7CkBAIC0xMDczLDQ2ICsx MTIyLDEwIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotLyogSnVtYm8tZ3JhbXMgZG9u J3Qgc2VlbSB0byB3b3JrIDotKCAqLwotI2RlZmluZSBHRU1fTUlOX01UVQk2OAotI2lmIDEKLSNk ZWZpbmUgR0VNX01BWF9NVFUJMTUwMAotI2Vsc2UKLSNkZWZpbmUgR0VNX01BWF9NVFUJOTAwMAot I2VuZGlmCi0KLXN0YXRpYyBpbnQgZ2VtX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRl diwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7Ci0KLQlpZiAo bmV3X210dSA8IEdFTV9NSU5fTVRVIHx8IG5ld19tdHUgPiBHRU1fTUFYX01UVSkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3By ZXNlbnQoZGV2KSkgewotCQkvKiBXZSdsbCBqdXN0IGNhdGNoIGl0IGxhdGVyIHdoZW4gdGhlCi0J CSAqIGRldmljZSBpcyB1cCdkIG9yIHJlc3VtZWQuCi0JCSAqLwotCQlkZXYtPm10dSA9IG5ld19t dHU7Ci0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKLQlzcGlu X2xvY2soJmdwLT50eF9sb2NrKTsKLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JZ3AtPnJlc2V0X3Rh c2tfcGVuZGluZyA9IDE7Ci0Jc2NoZWR1bGVfd29yaygmZ3AtPnJlc2V0X3Rhc2spOwotCXNwaW5f dW5sb2NrKCZncC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7Ci0KLQlm bHVzaF9zY2hlZHVsZWRfd29yaygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgU1RPUF9U UklFUyAzMgogCiAvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9s b2NrLiAqLwotc3RhdGljIHZvaWQgZ2VtX3N0b3Aoc3RydWN0IGdlbSAqZ3ApCitzdGF0aWMgdm9p ZCBnZW1fcmVzZXQoc3RydWN0IGdlbSAqZ3ApCiB7CiAJaW50IGxpbWl0OwogCXUzMiB2YWw7CkBA IC0xMTQwLDcgKzExNTMsNyBAQAogLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGdwLT5sb2NrIGFu ZCBncC0+dHhfbG9jay4gKi8KIHN0YXRpYyB2b2lkIGdlbV9zdGFydF9kbWEoc3RydWN0IGdlbSAq Z3ApCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJdTMyIHZhbDsKIAkKIAkvKiBXZSBhcmUgcmVh ZHkgdG8gcm9jaywgdHVybiBldmVyeXRoaW5nIG9uLiAqLwogCXZhbCA9IHJlYWRsKGdwLT5yZWdz ICsgVFhETUFfQ0ZHKTsKQEAgLTExNTUsMTAgKzExNjgsMzEgQEAKIAkodm9pZCkgcmVhZGwoZ3At PnJlZ3MgKyBNQUNfUlhDRkcpOwogCXVkZWxheSgxMDApOwogCi0Jd3JpdGVsKEdSRUdfU1RBVF9U WERPTkUsIGdwLT5yZWdzICsgR1JFR19JTUFTSyk7CisJZ2VtX2VuYWJsZV9pbnRzKGdwKTsKIAog CXdyaXRlbChSWF9SSU5HX1NJWkUgLSA0LCBncC0+cmVncyArIFJYRE1BX0tJQ0spOworfQorCisv KiBNdXN0IGJlIGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9sb2NrLiBETUEgd29u J3QgYmUKKyAqIGFjdHVhbGx5IHN0b3BwZWQgYmVmb3JlIGFib3V0IDRtcyB0aG8gLi4uCisgKi8K K3N0YXRpYyB2b2lkIGdlbV9zdG9wX2RtYShzdHJ1Y3QgZ2VtICpncCkKK3sKKwl1MzIgdmFsOwor CisJLyogV2UgYXJlIGRvbmUgcm9ja2luZywgdHVybiBldmVyeXRoaW5nIG9mZi4gKi8KKwl2YWwg PSByZWFkbChncC0+cmVncyArIFRYRE1BX0NGRyk7CisJd3JpdGVsKHZhbCAmIH5UWERNQV9DRkdf RU5BQkxFLCBncC0+cmVncyArIFRYRE1BX0NGRyk7CisJdmFsID0gcmVhZGwoZ3AtPnJlZ3MgKyBS WERNQV9DRkcpOworCXdyaXRlbCh2YWwgJiB+UlhETUFfQ0ZHX0VOQUJMRSwgZ3AtPnJlZ3MgKyBS WERNQV9DRkcpOworCXZhbCA9IHJlYWRsKGdwLT5yZWdzICsgTUFDX1RYQ0ZHKTsKKwl3cml0ZWwo dmFsICYgfk1BQ19UWENGR19FTkFCLCBncC0+cmVncyArIE1BQ19UWENGRyk7CisJdmFsID0gcmVh ZGwoZ3AtPnJlZ3MgKyBNQUNfUlhDRkcpOworCXdyaXRlbCh2YWwgJiB+TUFDX1JYQ0ZHX0VOQUIs IGdwLT5yZWdzICsgTUFDX1JYQ0ZHKTsKKworCSh2b2lkKSByZWFkbChncC0+cmVncyArIE1BQ19S WENGRyk7CiAKKwkvKiBOZWVkIHRvIHdhaXQgYSBiaXQgLi4uIGRvbmUgYnkgdGhlIGNhbGxlciAq LwogfQogCiAKQEAgLTEyMTksMTAgKzEyNTMsMTAgQEAKIAlpZiAoc3BlZWQgPT0gMCkKIAkJc3Bl ZWQgPSBTUEVFRF8xMDsKIAkKLQkvKiBJZiBIVyBpcyBkb3duLCB3ZSBkb24ndCB0cnkgdG8gYWN0 dWFsbHkgc2V0dXAgdGhlIFBIWSwgd2UKKwkvKiBJZiB3ZSBhcmUgYXNsZWVwLCB3ZSBkb24ndCB0 cnkgdG8gYWN0dWFsbHkgc2V0dXAgdGhlIFBIWSwgd2UKIAkgKiBqdXN0IHN0b3JlIHRoZSBzZXR0 aW5ncwogCSAqLwotCWlmICghZ3AtPmh3X3J1bm5pbmcpIHsKKwlpZiAoZ3AtPmFzbGVlcCkgewog CQlncC0+cGh5X21paS5hdXRvbmVnID0gZ3AtPndhbnRfYXV0b25lZyA9IGF1dG9uZWc7CiAJCWdw LT5waHlfbWlpLnNwZWVkID0gc3BlZWQ7CiAJCWdwLT5waHlfbWlpLmR1cGxleCA9IGR1cGxleDsK QEAgLTEyNzksNiArMTMxMyw5IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGlzIHVw IGF0ICVkIE1icHMsICVzLWR1cGxleC5cbiIsCiAJCQlncC0+ZGV2LT5uYW1lLCBzcGVlZCwgKGZ1 bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKSk7CiAKKwlpZiAoIWdwLT5ydW5uaW5nKQorCQly ZXR1cm4gMDsKKwogCXZhbCA9IChNQUNfVFhDRkdfRUlQRzAgfCBNQUNfVFhDRkdfTkdVKTsKIAlp ZiAoZnVsbF9kdXBsZXgpIHsKIAkJdmFsIHw9IChNQUNfVFhDRkdfSUNTIHwgTUFDX1RYQ0ZHX0lD T0xMKTsKQEAgLTE0MDUsNDggKzE0NDIsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdlbV9p bml0X3JpbmdzKHN0cnVjdCBnZW0gKik7Ci1zdGF0aWMgdm9pZCBnZW1faW5pdF9odyhzdHJ1Y3Qg Z2VtICosIGludCk7Ci0KLXN0YXRpYyB2b2lkIGdlbV9yZXNldF90YXNrKHZvaWQgKmRhdGEpCi17 Ci0Jc3RydWN0IGdlbSAqZ3AgPSAoc3RydWN0IGdlbSAqKSBkYXRhOwotCi0JbmV0aWZfcG9sbF9k aXNhYmxlKGdwLT5kZXYpOwotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKLQlzcGluX2xvY2so JmdwLT50eF9sb2NrKTsKLQotCWlmIChncC0+aHdfcnVubmluZyAmJiBncC0+b3BlbmVkKSB7Ci0J CW5ldGlmX3N0b3BfcXVldWUoZ3AtPmRldik7Ci0KLQkJLyogUmVzZXQgdGhlIGNoaXAgJiByaW5n cyAqLwotCQlnZW1fc3RvcChncCk7Ci0JCWdlbV9pbml0X3JpbmdzKGdwKTsKLQotCQlnZW1faW5p dF9odyhncCwKLQkJCSAgICAoZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9PSAyKSk7Ci0KLQkJbmV0 aWZfd2FrZV9xdWV1ZShncC0+ZGV2KTsKLQl9Ci0JZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9IDA7 Ci0KLQlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2spOwotCXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxv Y2spOwotCW5ldGlmX3BvbGxfZW5hYmxlKGdwLT5kZXYpOwotfQotCiBzdGF0aWMgdm9pZCBnZW1f bGlua190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSAoc3Ry dWN0IGdlbSAqKSBkYXRhOwogCWludCByZXN0YXJ0X2FuZWcgPSAwOwogCQkKLQlpZiAoIWdwLT5o d19ydW5uaW5nKQorCWlmIChncC0+YXNsZWVwKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJx KCZncC0+bG9jayk7CiAJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CisJZ2VtX2dldF9jZWxsKGdw KTsKIAotCS8qIElmIHRoZSBsaW5rIG9mIHRhc2sgaXMgc3RpbGwgcGVuZGluZywgd2UganVzdAor CS8qIElmIHRoZSByZXNldCB0YXNrIGlzIHN0aWxsIHBlbmRpbmcsIHdlIGp1c3QKIAkgKiByZXNj aGVkdWxlIHRoZSBsaW5rIHRpbWVyCiAJICovCiAJaWYgKGdwLT5yZXNldF90YXNrX3BlbmRpbmcp CkBAIC0xNDYyLDggKzE0NzAsNyBAQAogCQlpZiAoKHZhbCAmIFBDU19NSUlTVEFUX0xTKSAhPSAw KSB7CiAJCQlncC0+bHN0YXRlID0gbGlua191cDsKIAkJCW5ldGlmX2NhcnJpZXJfb24oZ3AtPmRl dik7Ci0JCQlpZiAoZ3AtPm9wZW5lZCkKLQkJCQkodm9pZClnZW1fc2V0X2xpbmtfbW9kZXMoZ3Ap OworCQkJKHZvaWQpZ2VtX3NldF9saW5rX21vZGVzKGdwKTsKIAkJfQogCQlnb3RvIHJlc3RhcnQ7 CiAJfQpAQCAtMTQ4NCw3ICsxNDkxLDcgQEAKIAkJfSBlbHNlIGlmIChncC0+bHN0YXRlICE9IGxp bmtfdXApIHsKIAkJCWdwLT5sc3RhdGUgPSBsaW5rX3VwOwogCQkJbmV0aWZfY2Fycmllcl9vbihn cC0+ZGV2KTsKLQkJCWlmIChncC0+b3BlbmVkICYmIGdlbV9zZXRfbGlua19tb2RlcyhncCkpCisJ CQlpZiAoZ2VtX3NldF9saW5rX21vZGVzKGdwKSkKIAkJCQlyZXN0YXJ0X2FuZWcgPSAxOwogCQl9 CiAJfSBlbHNlIHsKQEAgLTE0OTcsNyArMTUwNCw3IEBACiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAi JXM6IExpbmsgZG93blxuIiwKIAkJCQkJZ3AtPmRldi0+bmFtZSk7CiAJCQluZXRpZl9jYXJyaWVy X29mZihncC0+ZGV2KTsKLQkJCWdwLT5yZXNldF90YXNrX3BlbmRpbmcgPSAyOworCQkJZ3AtPnJl c2V0X3Rhc2tfcGVuZGluZyA9IDE7CiAJCQlzY2hlZHVsZV93b3JrKCZncC0+cmVzZXRfdGFzayk7 CiAJCQlyZXN0YXJ0X2FuZWcgPSAxOwogCQl9IGVsc2UgaWYgKCsrZ3AtPnRpbWVyX3RpY2tzID4g MTApIHsKQEAgLTE1MTQsNiArMTUyMSw3IEBACiByZXN0YXJ0OgogCW1vZF90aW1lcigmZ3AtPmxp bmtfdGltZXIsIGppZmZpZXMgKyAoKDEyICogSFopIC8gMTApKTsKIG91dF91bmxvY2s6CisJZ2Vt X3B1dF9jZWxsKGdwKTsKIAlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2spOwogCXNwaW5fdW5sb2Nr X2lycSgmZ3AtPmxvY2spOwogfQpAQCAtMTYxOSw1OSArMTYyNyw0MCBAQAogCXdtYigpOwogfQog Ci0vKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9sb2NrLiAqLwor LyogSW5pdCBQSFkgaW50ZXJmYWNlIGFuZCBzdGFydCBsaW5rIHBvbGwgc3RhdGUgbWFjaGluZSAq Lwogc3RhdGljIHZvaWQgZ2VtX2luaXRfcGh5KHN0cnVjdCBnZW0gKmdwKQogewogCXUzMiBtaWZj Zmc7Ci0JCisKIAkvKiBSZXZlcnQgTUlGIENGRyBzZXR0aW5nIGRvbmUgb24gc3RvcF9waHkgKi8K IAltaWZjZmcgPSByZWFkbChncC0+cmVncyArIE1JRl9DRkcpOwogCW1pZmNmZyAmPSB+TUlGX0NG R19CQk1PREU7CiAJd3JpdGVsKG1pZmNmZywgZ3AtPnJlZ3MgKyBNSUZfQ0ZHKTsKIAkKLSNpZmRl ZiBDT05GSUdfUFBDX1BNQUMKIAlpZiAoZ3AtPnBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lE X0FQUExFKSB7Ci0JCWludCBpLCBqOworCQlpbnQgaTsKIAogCQkvKiBUaG9zZSBkZWxheSBzdWNr cywgdGhlIEhXIHNlZW0gdG8gbG92ZSB0aGVtIHRob3VnaCwgSSdsbAogCQkgKiBzZXJpc291bHkg Y29uc2lkZXIgYnJlYWtpbmcgc29tZSBsb2NrcyBoZXJlIHRvIGJlIGFibGUKIAkJICogdG8gc2No ZWR1bGUgaW5zdGVhZAogCQkgKi8KLQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfR01BQ19Q SFlfUkVTRVQsIGdwLT5vZl9ub2RlLCAwLCAwKTsKLQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykg eworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJ CQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9HTUFDX1BIWV9SRVNFVCwgZ3AtPm9mX25vZGUs IDAsIDApOworCQkJbXNsZWVwKDIwKTsKKyNlbmRpZgogCQkJLyogU29tZSBQSFlzIHVzZWQgYnkg YXBwbGUgaGF2ZSBwcm9ibGVtIGdldHRpbmcgYmFjayB0byB1cywKLQkJCSAqIHdlIF9rbm93XyBp dCdzIGFjdHVhbGx5IGF0IGFkZHIgMCBvciAxLCB0aGF0J3MgYSBoYWNrLCBidXQKLQkJCSAqIGl0 IGhlbHBzIHRvIGRvIHRoYXQgcmVzZXQgbm93LiBJIHN1c3BlY3Qgc29tZSBtb3RoZXJib2FyZHMK LQkJCSAqIGRvbid0IHdpcmUgdGhlIFBIWSByZXNldCBsaW5lIHByb3Blcmx5LCB0aHVzIHRoZSBQ SFkgZG9lc24ndAotCQkJICogY29tZSBiYWNrIHdpdGggdGhlIGFib3ZlIHBtYWNfY2FsbF9mZWF0 dXJlLgorCQkJICogd2UgZG8gYW4gYWRkaXRpb25hbCByZXNldCBoZXJlCiAJCQkgKi8KLQkJCWdw LT5taWlfcGh5X2FkZHIgPSAwOwotCQkJcGh5X3dyaXRlKGdwLCBNSUlfQk1DUiwgQk1DUl9SRVNF VCk7Ci0JCQlncC0+bWlpX3BoeV9hZGRyID0gMTsKIAkJCXBoeV93cml0ZShncCwgTUlJX0JNQ1Is IEJNQ1JfUkVTRVQpOwotCQkJLyogV2Ugc2hvdWxkIHByb2JhYmx5IGJyZWFrIHNvbWUgbG9ja3Mg aGVyZSBhbmQgc2NoZWR1bGUuLi4gKi8KLQkJCW1kZWxheSgxMCk7Ci0JCQkKLQkJCS8qIE9uIEsy LCB3ZSBvbmx5IHByb2JlIHRoZSBpbnRlcm5hbCBQSFkgYXQgYWRkcmVzcyAxLCBvdGhlcgotCQkJ ICogYWRkcmVzc2VzIHRlbmQgdG8gcmV0dXJuIGdhcmJhZ2UuCi0JCQkgKi8KLQkJCWlmIChncC0+ cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVBQTEVfSzJfR01BQykKKwkJCW1zbGVlcCgy MCk7CisJCQlpZiAocGh5X3JlYWQoZ3AsIE1JSV9CTUNSKSAhPSAweGZmZmYpCiAJCQkJYnJlYWs7 Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQkJZ3AtPm1paV9waHlfYWRkciA9 IGk7Ci0JCQkJaWYgKHBoeV9yZWFkKGdwLCBNSUlfQk1DUikgIT0gMHhmZmZmKQotCQkJCQlicmVh azsKLQkJCX0KLQkJCWlmIChpID09IDMyKSB7CisJCQlpZiAoaSA9PSAyKQogCQkJCXByaW50ayhL RVJOX1dBUk5JTkcgIiVzOiBHTUFDIFBIWSBub3QgcmVzcG9uZGluZyAhXG4iLAogCQkJCSAgICAg ICBncC0+ZGV2LT5uYW1lKTsKLQkJCQlncC0+bWlpX3BoeV9hZGRyID0gMDsKLQkJCX0gZWxzZQot CQkJCWJyZWFrOwogCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCiAJaWYg KGdwLT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TVU4gJiYKIAkgICAgZ3AtPnBkZXYt PmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9HRU0pIHsKQEAgLTE3NTUsNiArMTc0NCwxNiBA QAogCQkJdmFsIHw9IFBDU19TQ1RSTF9MT09QOwogCQl3cml0ZWwodmFsLCBncC0+cmVncyArIFBD U19TQ1RSTCk7CiAJfQorCisJLyogRGVmYXVsdCBhbmVnIHBhcmFtZXRlcnMgKi8KKwlncC0+dGlt ZXJfdGlja3MgPSAwOworCWdwLT5sc3RhdGUgPSBsaW5rX2Rvd247CisJbmV0aWZfY2Fycmllcl9v ZmYoZ3AtPmRldik7CisKKwkvKiBDYW4gSSBhZHZlcnRpc2UgZ2lnYWJpdCBoZXJlID8gSSdkIG5l ZWQgQkNNIFBIWSBkb2NzLi4uICovCisJc3Bpbl9sb2NrX2lycSgmZ3AtPmxvY2spOworCWdlbV9i ZWdpbl9hdXRvX25lZ290aWF0aW9uKGdwLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEoJmdwLT5s b2NrKTsKIH0KIAogLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGdwLT5sb2NrIGFuZCBncC0+dHhf bG9jay4gKi8KQEAgLTE3OTYsOCArMTc5NSw3IEBACiB9CiAKIC8qIE11c3QgYmUgaW52b2tlZCB1 bmRlciBncC0+bG9jayBhbmQgZ3AtPnR4X2xvY2suICovCi1zdGF0aWMgdTMyCi1nZW1fc2V0dXBf bXVsdGljYXN0KHN0cnVjdCBnZW0gKmdwKQorc3RhdGljIHUzMiBnZW1fc2V0dXBfbXVsdGljYXN0 KHN0cnVjdCBnZW0gKmdwKQogewogCXUzMiByeGNmZyA9IDA7CiAJaW50IGk7CkBAIC0xOTE0LDYg KzE5MTIsMTAgQEAKIAkgKiBtYWtlIG5vIHVzZSBvZiB0aG9zZSBldmVudHMgb3RoZXIgdGhhbiB0 byByZWNvcmQgdGhlbS4KIAkgKi8KIAl3cml0ZWwoMHhmZmZmZmZmZiwgZ3AtPnJlZ3MgKyBNQUNf TUNNQVNLKTsKKworCS8qIERvbid0IGVuYWJsZSBHRU0ncyBXT0wgaW4gbm9ybWFsIG9wZXJhdGlv bnMKKwkgKi8KKwl3cml0ZWwoMCwgZ3AtPnJlZ3MgKyBXT0xfV0FLRUNTUik7CiB9CiAKIC8qIE11 c3QgYmUgaW52b2tlZCB1bmRlciBncC0+bG9jayBhbmQgZ3AtPnR4X2xvY2suICovCkBAIC0xOTc1 LDYgKzE5NzcsMjMgQEAKIAkJZ3AtPnR4X2ZpZm9fc3ogPSByZWFkbChncC0+cmVncyArIFRYRE1B X0ZTWikgKiA2NDsKIAkJZ3AtPnJ4X2ZpZm9fc3ogPSByZWFkbChncC0+cmVncyArIFJYRE1BX0ZT WikgKiA2NDsKIAkJZ3AtPnN3cnN0X2Jhc2UgPSAwOworCisJCW1pZl9jZmcgPSByZWFkbChncC0+ cmVncyArIE1JRl9DRkcpOworCQltaWZfY2ZnICY9IH4oTUlGX0NGR19QU0VMRUNUfE1JRl9DRkdf UE9MTHxNSUZfQ0ZHX0JCTU9ERXxNSUZfQ0ZHX01ESTEpOworCQltaWZfY2ZnIHw9IE1JRl9DRkdf TURJMDsKKwkJd3JpdGVsKG1pZl9jZmcsIGdwLT5yZWdzICsgTUlGX0NGRyk7CisJCXdyaXRlbChQ Q1NfRE1PREVfTUdNLCBncC0+cmVncyArIFBDU19ETU9ERSk7CisJCXdyaXRlbChNQUNfWElGQ0ZH X09FLCBncC0+cmVncyArIE1BQ19YSUZDRkcpOworCisJCS8qIFdlIGhhcmQtY29kZSB0aGUgUEhZ IGFkZHJlc3Mgc28gd2UgY2FuIHByb3Blcmx5IGJyaW5nIGl0IG91dCBvZgorCQkgKiByZXNldCBs YXRlciBvbiwgd2UgY2FuJ3QgcmVhbGx5IHByb2JlIGl0IGF0IHRoaXMgcG9pbnQsIHRob3VnaAor CQkgKiB0aGF0IGlzbid0IGFuIGlzc3VlLgorCQkgKi8KKwkJaWYgKGdwLT5wZGV2LT5kZXZpY2Ug PT0gUENJX0RFVklDRV9JRF9BUFBMRV9LMl9HTUFDKQorCQkJZ3AtPm1paV9waHlfYWRkciA9IDE7 CisJCWVsc2UKKwkJCWdwLT5taWlfcGh5X2FkZHIgPSAwOworCiAJCXJldHVybiAwOwogCX0KIApA QCAtMjA1Myw3MSArMjA3MiwzMCBAQAogfQogCiAvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgZ3At PmxvY2sgYW5kIGdwLT50eF9sb2NrLiAqLwotc3RhdGljIHZvaWQgZ2VtX2luaXRfaHcoc3RydWN0 IGdlbSAqZ3AsIGludCByZXN0YXJ0X2xpbmspCitzdGF0aWMgdm9pZCBnZW1fcmVpbml0X2NoaXAo c3RydWN0IGdlbSAqZ3ApCiB7Ci0JLyogT24gQXBwbGUncyBnbWFjLCBJIGluaXRpYWxpemUgdGhl IFBIWSBvbmx5IGFmdGVyCi0JICogc2V0dGluZyB1cCB0aGUgY2hpcC4gSXQgYXBwZWFycyB0aGUg Z2lnYWJpdCBQSFlzCi0JICogZG9uJ3QgcXVpdGUgbGlrZSBiZWVpbmcgdGFsa2VkIHRvIG9uIHRo ZSBHSUkgd2hlbgotCSAqIHRoZSBjaGlwIGlzIG5vdCBydW5uaW5nLCBJIHN1c3BlY3QgaXQgbWln aHQgbm90Ci0JICogYmUgY2xvY2tlZCBhdCB0aGF0IHBvaW50LiAtLUJlbkgKLQkgKi8KLQlpZiAo cmVzdGFydF9saW5rKQotCQlnZW1faW5pdF9waHkoZ3ApOwotCWdlbV9pbml0X3BhdXNlX3RocmVz aG9sZHMoZ3ApOwotCWdlbV9pbml0X2RtYShncCk7Ci0JZ2VtX2luaXRfbWFjKGdwKTsKLQotCWlm IChyZXN0YXJ0X2xpbmspIHsKLQkJLyogRGVmYXVsdCBhbmVnIHBhcmFtZXRlcnMgKi8KLQkJZ3At PnRpbWVyX3RpY2tzID0gMDsKLQkJZ3AtPmxzdGF0ZSA9IGxpbmtfZG93bjsKLQkJbmV0aWZfY2Fy cmllcl9vZmYoZ3AtPmRldik7CisJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwlnZW1fcmVzZXQoZ3Ap OwogCi0JCS8qIENhbiBJIGFkdmVydGlzZSBnaWdhYml0IGhlcmUgPyBJJ2QgbmVlZCBCQ00gUEhZ IGRvY3MuLi4gKi8KLQkJZ2VtX2JlZ2luX2F1dG9fbmVnb3RpYXRpb24oZ3AsIE5VTEwpOwotCX0g ZWxzZSB7Ci0JCWlmIChncC0+bHN0YXRlID09IGxpbmtfdXApIHsKLQkJCW5ldGlmX2NhcnJpZXJf b24oZ3AtPmRldik7Ci0JCQlnZW1fc2V0X2xpbmtfbW9kZXMoZ3ApOwotCQl9Ci0JfQotfQorCS8q IE1ha2Ugc3VyZSBpbnRzIGFyZSBkaXNhYmxlZCAqLworCWdlbV9kaXNhYmxlX2ludHMoZ3ApOwog Ci0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCi0vKiBFbmFibGUgdGhlIGNoaXAncyBjbG9jayBhbmQg bWFrZSBzdXJlIGl0J3MgY29uZmlnIHNwYWNlIGlzCi0gKiBzZXR1cCBwcm9wZXJseS4gVGhlcmUg YXBwZWFyIHRvIGJlIG5vIG5lZWQgdG8gcmVzdG9yZSB0aGUKLSAqIGJhc2UgYWRkcmVzc2VzLgot ICovCi1zdGF0aWMgdm9pZCBnZW1fYXBwbGVfcG93ZXJ1cChzdHJ1Y3QgZ2VtICpncCkKLXsKLQl1 MzIgbWlmX2NmZzsKKwkvKiBBbGxvY2F0ZSAmIHNldHVwIHJpbmcgYnVmZmVycyAqLworCWdlbV9p bml0X3JpbmdzKGdwKTsKIAotCW1iKCk7Ci0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfR01B Q19FTkFCTEUsIGdwLT5vZl9ub2RlLCAwLCAxKTsKKwkvKiBDb25maWd1cmUgcGF1c2UgdGhyZXNo b2xkcyAqLworCWdlbV9pbml0X3BhdXNlX3RocmVzaG9sZHMoZ3ApOwogCi0gICAgICAgCXVkZWxh eSgxMCk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UoZ3AtPnBkZXYpOwotCXBjaV9zZXRfbWFzdGVyKGdw LT5wZGV2KTsKKwkvKiBDb25maWd1cmUgcGF1c2UgdGhyZXNob2xkcyAqLworCWdlbV9pbml0X3Bh dXNlX3RocmVzaG9sZHMoZ3ApOwogCQotCW1pZl9jZmcgPSByZWFkbChncC0+cmVncyArIE1JRl9D RkcpOwotCW1pZl9jZmcgJj0gfihNSUZfQ0ZHX1BTRUxFQ1R8TUlGX0NGR19QT0xMfE1JRl9DRkdf QkJNT0RFfE1JRl9DRkdfTURJMSk7Ci0JbWlmX2NmZyB8PSBNSUZfQ0ZHX01ESTA7Ci0Jd3JpdGVs KG1pZl9jZmcsIGdwLT5yZWdzICsgTUlGX0NGRyk7Ci0Jd3JpdGVsKFBDU19ETU9ERV9NR00sIGdw LT5yZWdzICsgUENTX0RNT0RFKTsKLQl3cml0ZWwoTUFDX1hJRkNGR19PRSwgZ3AtPnJlZ3MgKyBN QUNfWElGQ0ZHKTsKLX0KLQotLyogVHVybiBvZmYgdGhlIGNoaXAncyBjbG9jayAqLwotc3RhdGlj IHZvaWQgZ2VtX2FwcGxlX3Bvd2VyZG93bihzdHJ1Y3QgZ2VtICpncCkKLXsKLQlwY2lfZGlzYWJs ZV9kZXZpY2UoZ3AtPnBkZXYpOwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dNQUNfRU5B QkxFLCBncC0+b2Zfbm9kZSwgMCwgMCk7CisJLyogSW5pdCBETUEgJiBNQUMgZW5naW5lcyAqLwor CWdlbV9pbml0X2RtYShncCk7CisJZ2VtX2luaXRfbWFjKGdwKTsKIH0KIAotI2VuZGlmIC8qIENP TkZJR19QUENfUE1BQyAqLwotCiAvKiBNdXN0IGJlIGludm9rZWQgd2l0aCBubyBsb2NrIGhlbGQu ICovCi1zdGF0aWMgdm9pZCBnZW1fc3RvcF9waHkoc3RydWN0IGdlbSAqZ3ApCitzdGF0aWMgdm9p ZCBnZW1fc3RvcF9waHkoc3RydWN0IGdlbSAqZ3AsIGludCB3b2wpCiB7CiAJdTMyIG1pZmNmZzsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjEzNCw4ICsyMTEyLDIyIEBACiAJbWlmY2ZnICY9 IH5NSUZfQ0ZHX1BPTEw7CiAJd3JpdGVsKG1pZmNmZywgZ3AtPnJlZ3MgKyBNSUZfQ0ZHKTsKIAot CWlmIChncC0+d2FrZV9vbl9sYW4pIHsKLQkJLyogU2V0dXAgd2FrZS1vbi1sYW4gKi8KKwlpZiAo d29sKSB7CisJCXVuc2lnbmVkIGNoYXIgKmUgPSAmZ3AtPmRldi0+ZGV2X2FkZHJbMF07CisJCXUz MiBjc3I7CisKKwkJLyogU2V0dXAgd2FrZS1vbi1sYW4gZm9yIE1BR0lDIHBhY2tldCAqLworCQl3 cml0ZWwoTUFDX1JYQ0ZHX0hGRSB8IE1BQ19SWENGR19TRkNTIHwgTUFDX1JYQ0ZHX0VOQUIsCisJ CSAgICAgICBncC0+cmVncyArIE1BQ19SWENGRyk7CQorCQl3cml0ZWwoKGVbNF0gPDwgOCkgfCBl WzVdLCBncC0+cmVncyArIFdPTF9NQVRDSDApOworCQl3cml0ZWwoKGVbMl0gPDwgOCkgfCBlWzNd LCBncC0+cmVncyArIFdPTF9NQVRDSDEpOworCQl3cml0ZWwoKGVbMF0gPDwgOCkgfCBlWzFdLCBn cC0+cmVncyArIFdPTF9NQVRDSDIpOworCisJCXdyaXRlbChXT0xfTUNPVU5UX04gfCBXT0xfTUNP VU5UX00sIGdwLT5yZWdzICsgV09MX01DT1VOVCk7CisJCWNzciA9IFdPTF9XQUtFQ1NSX0VOQUJM RTsKKwkJaWYgKChyZWFkbChncC0+cmVncyArIE1BQ19YSUZDRkcpICYgTUFDX1hJRkNGR19HTUlJ KSA9PSAwKQorCQkJY3NyIHw9IFdPTF9XQUtFQ1NSX01JSTsKKwkJd3JpdGVsKGNzciwgZ3AtPnJl Z3MgKyBXT0xfV0FLRUNTUik7CiAJfSBlbHNlIHsKIAkJd3JpdGVsKDAsIGdwLT5yZWdzICsgTUFD X1JYQ0ZHKTsKIAkJKHZvaWQpcmVhZGwoZ3AtPnJlZ3MgKyBNQUNfUlhDRkcpOwpAQCAtMjE1MSwy MCArMjE0MywyMSBAQAogCXdyaXRlbCgwLCBncC0+cmVncyArIFRYRE1BX0NGRyk7CiAJd3JpdGVs KDAsIGdwLT5yZWdzICsgUlhETUFfQ0ZHKTsKIAotCWlmICghZ3AtPndha2Vfb25fbGFuKSB7CisJ LyogTm8gbmVlZCB0byB0YWtlIHRoZSBsb2NrIGhlcmUgKi8KKwlpZiAoIXdvbCkgewogCQlzcGlu X2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAkJc3Bpbl9sb2NrKCZncC0+dHhfbG9j ayk7Ci0JCWdlbV9zdG9wKGdwKTsKKwkJZ2VtX3Jlc2V0KGdwKTsKIAkJd3JpdGVsKE1BQ19UWFJT VF9DTUQsIGdwLT5yZWdzICsgTUFDX1RYUlNUKTsKIAkJd3JpdGVsKE1BQ19SWFJTVF9DTUQsIGdw LT5yZWdzICsgTUFDX1JYUlNUKTsKIAkJc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKIAkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAoZm91bmRf bWlpX3BoeShncCkgJiYgZ3AtPnBoeV9taWkuZGVmLT5vcHMtPnN1c3BlbmQpCi0JCWdwLT5waHlf bWlpLmRlZi0+b3BzLT5zdXNwZW5kKCZncC0+cGh5X21paSwgMCAvKiB3YWtlIG9uIGxhbiBvcHRp b25zICovKTsKKwlpZiAoIXdvbCAmJiBmb3VuZF9taWlfcGh5KGdwKSAmJiBncC0+cGh5X21paS5k ZWYtPm9wcy0+c3VzcGVuZCkKKwkJZ3AtPnBoeV9taWkuZGVmLT5vcHMtPnN1c3BlbmQoJmdwLT5w aHlfbWlpKTsKIAotCWlmICghZ3AtPndha2Vfb25fbGFuKSB7CisJaWYgKCF3b2wpIHsKIAkJLyog QWNjb3JkaW5nIHRvIEFwcGxlLCB3ZSBtdXN0IHNldCB0aGUgTURJTyBwaW5zIHRvIHRoaXMgYmVn bmlnbgogCQkgKiBzdGF0ZSBvciB3ZSBtYXkgMSkgZWF0IG1vcmUgY3VycmVudCwgMikgZGFtYWdl IHNvbWUgUEhZcwogCQkgKi8KQEAgLTIxNzcsMTgxICsyMTcwLDE2MCBAQAogCX0KIH0KIAotLyog U2h1dCBkb3duIHRoZSBjaGlwLCBtdXN0IGJlIGNhbGxlZCB3aXRoIHBtX3NlbSBoZWxkLiAgKi8K LXN0YXRpYyB2b2lkIGdlbV9zaHV0ZG93bihzdHJ1Y3QgZ2VtICpncCkKKworc3RhdGljIGludCBn ZW1fZG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQkvKiBNYWtlIHVzIG5vdC1y dW5uaW5nIHRvIGF2b2lkIHRpbWVycyByZXNwYXduaW5nCi0JICogYW5kIHN3YWxsb3cgaXJxcyAK LQkgKi8KLQlncC0+aHdfcnVubmluZyA9IDA7Ci0Jd21iKCk7CisJc3RydWN0IGdlbSAqZ3AgPSBk ZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIFN0b3AgdGhlIGxpbmsgdGlt ZXIgKi8KLQlkZWxfdGltZXJfc3luYygmZ3AtPmxpbmtfdGltZXIpOworCXNwaW5fbG9ja19pcnFz YXZlKCZncC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwogCi0JLyog U3RvcCB0aGUgcmVzZXQgdGFzayAqLwotCXdoaWxlIChncC0+cmVzZXRfdGFza19wZW5kaW5nKQot CQl5aWVsZCgpOwotCQotCS8qIEFjdHVhbGx5IHN0b3AgdGhlIGNoaXAgKi8KLQlpZiAoZ3AtPnBk ZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFKSB7Ci0JCWdlbV9zdG9wX3BoeShncCk7 CisJLyogRW5hYmxlIHRoZSBjZWxsICovCisJZ2VtX2dldF9jZWxsKGdwKTsKIAotI2lmZGVmIENP TkZJR19QUENfUE1BQwotCQkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCi0JCWdlbV9hcHBsZV9w b3dlcmRvd24oZ3ApOwotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwotCX0gZWxzZXsKLQkJ dW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBJbml0ICYgc2V0dXAgY2hpcCBoYXJkd2FyZSAqLwor CWdlbV9yZWluaXRfY2hpcChncCk7CisKKwlncC0+cnVubmluZyA9IDE7CisKKwlpZiAoZ3AtPmxz dGF0ZSA9PSBsaW5rX3VwKSB7CisJCW5ldGlmX2NhcnJpZXJfb24oZ3AtPmRldik7CisJCWdlbV9z ZXRfbGlua19tb2RlcyhncCk7CisJfQorCisJbmV0aWZfd2FrZV9xdWV1ZShncC0+ZGV2KTsKKwor CXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3At PmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXF1ZXN0X2lycShncC0+cGRldi0+aXJxLCBnZW1faW50 ZXJydXB0LAorCQkJCSAgIFNBX1NISVJRLCBkZXYtPm5hbWUsICh2b2lkICopZGV2KSkgeworCQlw cmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgIVxuIiwgZ3AtPmRldi0+ bmFtZSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAJCXNwaW5f bG9jaygmZ3AtPnR4X2xvY2spOwotCQlnZW1fc3RvcChncCk7CisKKwkJZ3AtPnJ1bm5pbmcgPSAg MDsKKwkJZ2VtX3Jlc2V0KGdwKTsKKwkJZ2VtX2NsZWFuX3JpbmdzKGdwKTsKKwkJZ2VtX3B1dF9j ZWxsKGdwKTsKKwkJCiAJCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7CiAJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CisKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQor CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbV9wbV90YXNrKHZvaWQgKmRhdGEpCitz dGF0aWMgdm9pZCBnZW1fZG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgd29sKQog ewotCXN0cnVjdCBnZW0gKmdwID0gKHN0cnVjdCBnZW0gKikgZGF0YTsKKwlzdHJ1Y3QgZ2VtICpn cCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogV2UgYXNzdW1lIGlm IHdlIGNhbid0IGxvY2sgdGhlIHBtX3NlbSwgdGhlbiBvcGVuKCkgd2FzCi0JICogY2FsbGVkIGFn YWluIChvciBzdXNwZW5kKCkpLCBhbmQgd2UgY2FuIHNhZmVseSBpZ25vcmUKLQkgKiB0aGUgUE0g cmVxdWVzdAotCSAqLwotCWlmIChkb3duX3RyeWxvY2soJmdwLT5wbV9zZW0pKQotCQlyZXR1cm47 CisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZncC0+ dHhfbG9jayk7CiAKLQkvKiBEcml2ZXIgd2FzIHJlLW9wZW5lZCBvciBhbHJlYWR5IHNodXQgZG93 biAqLwotCWlmIChncC0+b3BlbmVkIHx8ICFncC0+aHdfcnVubmluZykgewotCQl1cCgmZ3AtPnBt X3NlbSk7Ci0JCXJldHVybjsKLQl9CisJZ3AtPnJ1bm5pbmcgPSAwOwogCi0JZ2VtX3NodXRkb3du KGdwKTsKKwkvKiBTdG9wIG5ldGlmIHF1ZXVlICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwog Ci0JdXAoJmdwLT5wbV9zZW0pOwotfQorCS8qIE1ha2Ugc3VyZSBpbnRzIGFyZSBkaXNhYmxlZCAq LworCWdlbV9kaXNhYmxlX2ludHMoZ3ApOwogCi1zdGF0aWMgdm9pZCBnZW1fcG1fdGltZXIodW5z aWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBnZW0gKmdwID0gKHN0cnVjdCBnZW0gKikgZGF0 YTsKKwkvKiBXZSBjYW4gZHJvcCB0aGUgbG9jayBub3cgKi8KKwlzcGluX3VubG9jaygmZ3AtPnR4 X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CisKKwkv KiBJZiB3ZSBhcmUgZ29pbmcgdG8gc2xlZXAgd2l0aCBXT0wgKi8KKwlpZiAod29sKQorCQlnZW1f c3RvcF9kbWEoZ3ApOworCWVsc2UKKwkJZ2VtX3Jlc2V0KGdwKTsKKwltc2xlZXAoMTApOworCisJ LyogR2V0IHJpZCBvZiByaW5ncyAqLworCWdlbV9jbGVhbl9yaW5ncyhncCk7CisKKwkvKiBObyBp cnEgbmVlZGVkIGFueW1vcmUgKi8KKwlmcmVlX2lycShncC0+cGRldi0+aXJxLCAodm9pZCAqKSBk ZXYpOwogCi0Jc2NoZWR1bGVfd29yaygmZ3AtPnBtX3Rhc2spOworCS8qIENlbGwgbm90IG5lZWRl ZCBuZWl0aGVyIGlmIG5vIFdPTCAqLworCWlmICghd29sKSB7CisJCXNwaW5fbG9ja19pcnFzYXZl KCZncC0+bG9jaywgZmxhZ3MpOworCQlnZW1fcHV0X2NlbGwoZ3ApOworCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOworCX0KIH0KIAotc3RhdGljIGludCBnZW1fb3Bl bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZ2VtX3Jlc2V0X3Rhc2sodm9p ZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKLQlpbnQgaHdfd2FzX3Vw OworCXN0cnVjdCBnZW0gKmdwID0gKHN0cnVjdCBnZW0gKikgZGF0YTsKIAogCWRvd24oJmdwLT5w bV9zZW0pOwogCi0JaHdfd2FzX3VwID0gZ3AtPmh3X3J1bm5pbmc7CisJbmV0aWZfcG9sbF9kaXNh YmxlKGdwLT5kZXYpOwogCi0JLyogU3RvcCB0aGUgUE0gdGltZXIvdGFzayAqLwotCWRlbF90aW1l cigmZ3AtPnBtX3RpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCXNwaW5fbG9ja19p cnEoJmdwLT5sb2NrKTsKKwlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKIAotCS8qIFRoZSBwb3dl ci1tYW5hZ2VtZW50IHNlbWFwaG9yZSBwcm90ZWN0cyB0aGUgaHdfcnVubmluZwotCSAqIGV0Yy4g c3RhdGUgc28gaXQgaXMgc2FmZSB0byBkbyB0aGlzIGJpdCB3aXRob3V0IGdwLT5sb2NrCi0JICov Ci0JaWYgKCFncC0+aHdfcnVubmluZykgewotI2lmZGVmIENPTkZJR19QUENfUE1BQwotCQkvKiBG aXJzdCwgd2UgbmVlZCB0byBicmluZyB1cCB0aGUgY2hpcCAqLwotCQlpZiAoZ3AtPnBkZXYtPnZl bmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFKSB7Ci0JCQlnZW1fYXBwbGVfcG93ZXJ1cChncCk7 Ci0JCQlnZW1fY2hlY2tfaW52YXJpYW50cyhncCk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfUFBD X1BNQUMgKi8KKwlpZiAoZ3AtPnJ1bm5pbmcgPT0gMCkKKwkJZ290byBub3RfcnVubmluZzsKIAot CQkvKiBSZXNldCB0aGUgY2hpcCAqLwotCQlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7Ci0JCXNw aW5fbG9jaygmZ3AtPnR4X2xvY2spOwotCQlnZW1fc3RvcChncCk7Ci0JCXNwaW5fdW5sb2NrKCZn cC0+dHhfbG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOworCWlmIChncC0+cnVu bmluZykgeworCQluZXRpZl9zdG9wX3F1ZXVlKGdwLT5kZXYpOwogCi0JCWdwLT5od19ydW5uaW5n ID0gMTsKKwkJLyogUmVzZXQgdGhlIGNoaXAgJiByaW5ncyAqLworCQlnZW1fcmVpbml0X2NoaXAo Z3ApOworCQlpZiAoZ3AtPmxzdGF0ZSA9PSBsaW5rX3VwKQorCQkJZ2VtX3NldF9saW5rX21vZGVz KGdwKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShncC0+ZGV2KTsKIAl9Cisgbm90X3J1bm5pbmc6CisJ Z3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9IDA7CiAKLQkvKiBXZSBjYW4gbm93IHJlcXVlc3QgdGhl IGludGVycnVwdCBhcyB3ZSBrbm93IGl0J3MgbWFza2VkCi0JICogb24gdGhlIGNvbnRyb2xsZXIK LQkgKi8KLQlpZiAocmVxdWVzdF9pcnEoZ3AtPnBkZXYtPmlycSwgZ2VtX2ludGVycnVwdCwKLQkJ CVNBX1NISVJRLCBkZXYtPm5hbWUsICh2b2lkICopZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIg IiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgIVxuIiwgZ3AtPmRldi0+bmFtZSk7CisJc3Bpbl91 bmxvY2soJmdwLT50eF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmdwLT5sb2NrKTsKIAotCQlz cGluX2xvY2tfaXJxKCZncC0+bG9jayk7Ci0JCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwotI2lm ZGVmIENPTkZJR19QUENfUE1BQwotCQlpZiAoIWh3X3dhc191cCAmJiBncC0+cGRldi0+dmVuZG9y ID09IFBDSV9WRU5ET1JfSURfQVBQTEUpCi0JCQlnZW1fYXBwbGVfcG93ZXJkb3duKGdwKTsKLSNl bmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KLQkJLyogRmlyZSB0aGUgUE0gdGltZXIgdGhhdCB3 aWxsIHNodXQgdXMgZG93biBpbiBhYm91dCAxMCBzZWNvbmRzICovCi0JCWdwLT5wbV90aW1lci5l eHBpcmVzID0gamlmZmllcyArIDEwKkhaOwotCQlhZGRfdGltZXIoJmdwLT5wbV90aW1lcik7Ci0J CXVwKCZncC0+cG1fc2VtKTsKLQkJc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKLQkJc3Bpbl91 bmxvY2tfaXJxKCZncC0+bG9jayk7Ci0KLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQorCW5ldGlmX3Bv bGxfZW5hYmxlKGdwLT5kZXYpOwogCi0gICAgICAgCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsK LQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKKwl1cCgmZ3AtPnBtX3NlbSk7Cit9CiAKLQkvKiBB bGxvY2F0ZSAmIHNldHVwIHJpbmcgYnVmZmVycyAqLwotCWdlbV9pbml0X3JpbmdzKGdwKTsKIAot CS8qIEluaXQgJiBzZXR1cCBjaGlwIGhhcmR3YXJlICovCi0JZ2VtX2luaXRfaHcoZ3AsICFod193 YXNfdXApOworc3RhdGljIGludCBnZW1fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorewor CXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OworCWludCByYyA9IDA7CiAKLQlncC0+b3BlbmVk ID0gMTsKKwlkb3duKCZncC0+cG1fc2VtKTsKIAotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7 Ci0Jc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisJLyogV2UgbmVlZCB0aGUgY2VsbCBlbmFi bGVkICovCisJaWYgKCFncC0+YXNsZWVwKQorCQlyYyA9IGdlbV9kb19zdGFydChkZXYpOworCWdw LT5vcGVuZWQgPSAocmMgPT0gMCk7CiAKIAl1cCgmZ3AtPnBtX3NlbSk7CiAKLQlyZXR1cm4gMDsK KwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZ2VtX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAKLQkvKiBNYWtlIHN1cmUg d2UgZG9uJ3QgZ2V0IGRpc3RyYWN0ZWQgYnkgc3VzcGVuZC9yZXN1bWUgKi8KLQlkb3duKCZncC0+ cG1fc2VtKTsKLQogCS8qIE5vdGU6IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBuZXRpZl9wb2xsX2Rp c2FibGUoKSBoZXJlIGJlY2F1c2UKIAkgKiBvdXIgY2FsbGVyIChkZXZfY2xvc2UpIGFscmVhZHkg ZGlkIGl0IGZvciB1cwogCSAqLwogCi0JLyogU3RvcCB0cmFmZmljLCBtYXJrIHVzIGNsb3NlZCAq LwotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKLQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsK Kwlkb3duKCZncC0+cG1fc2VtKTsKIAogCWdwLT5vcGVuZWQgPSAwOwkKLQotCW5ldGlmX3N0b3Bf cXVldWUoZGV2KTsKLQotCS8qIFN0b3AgY2hpcCAqLwotCWdlbV9zdG9wKGdwKTsKLQotCS8qIEdl dCByaWQgb2YgcmluZ3MgKi8KLQlnZW1fY2xlYW5fcmluZ3MoZ3ApOwotCi0JLyogQnllLCB0aGUg cG0gdGltZXIgd2lsbCBmaW5pc2ggdGhlIGpvYiAqLwotCWZyZWVfaXJxKGdwLT5wZGV2LT5pcnEs ICh2b2lkICopIGRldik7Ci0KLQlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2spOwotCXNwaW5fdW5s b2NrX2lycSgmZ3AtPmxvY2spOwotCi0JLyogRmlyZSB0aGUgUE0gdGltZXIgdGhhdCB3aWxsIHNo dXQgdXMgZG93biBpbiBhYm91dCAxMCBzZWNvbmRzICovCi0JZ3AtPnBtX3RpbWVyLmV4cGlyZXMg PSBqaWZmaWVzICsgMTAqSFo7Ci0JYWRkX3RpbWVyKCZncC0+cG1fdGltZXIpOworCWlmICghZ3At PmFzbGVlcCkKKwkJZ2VtX2RvX3N0b3AoZGV2LCAwKTsKIAogCXVwKCZncC0+cG1fc2VtKTsKIAkK QEAgLTIzNjMsNDUgKzIzMzUsNjMgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNp X2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CiAKLQluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKLQotCS8qIFdlIGhv bGQgdGhlIFBNIHNlbWFwaG9yZSBkdXJpbmcgZW50aXJlIGRyaXZlcgotCSAqIHNsZWVwIHRpbWUK LQkgKi8KIAlkb3duKCZncC0+cG1fc2VtKTsKIAorCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOwor CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1c3BlbmRpbmcsIFdha2VPbkxhbiAlc1xuIiwKLQkg ICAgICAgZGV2LT5uYW1lLCBncC0+d2FrZV9vbl9sYW4gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQi KTsKKwkgICAgICAgZGV2LT5uYW1lLAorCSAgICAgICAoZ3AtPndha2Vfb25fbGFuICYmIGdwLT5v cGVuZWQpID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAJCi0JLyogSWYgdGhlIGRyaXZlciBp cyBvcGVuZWQsIHdlIHN0b3AgdGhlIERNQSAqLwotCWlmIChncC0+b3BlbmVkKSB7Ci0JCXNwaW5f bG9ja19pcnEoJmdwLT5sb2NrKTsKLQkJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CisJLyogS2Vl cCB0aGUgY2VsbCBlbmFibGVkIGR1cmluZyB0aGUgZW50aXJlIG9wZXJhdGlvbiAqLworCXNwaW5f bG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2sp OworCWdlbV9nZXRfY2VsbChncCk7CisJc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwogCisJLyogSWYgdGhlIGRyaXZl ciBpcyBvcGVuZWQsIHdlIHN0b3AgdGhlIE1BQyAqLworCWlmIChncC0+b3BlbmVkKSB7CiAJCS8q IFN0b3AgdHJhZmZpYywgbWFyayB1cyBjbG9zZWQgKi8KIAkJbmV0aWZfZGV2aWNlX2RldGFjaChk ZXYpOwogCi0JCS8qIFN0b3AgY2hpcCAqLwotCQlnZW1fc3RvcChncCk7CisJCS8qIFN3aXRjaCBv ZmYgTUFDLCByZW1lbWJlciBXT0wgc2V0dGluZyAqLworCQlncC0+YXNsZWVwX3dvbCA9IGdwLT53 YWtlX29uX2xhbjsKKwkJZ2VtX2RvX3N0b3AoZGV2LCBncC0+YXNsZWVwX3dvbCk7CisJCW1zbGVl cCgxMCk7CisJfSBlbHNlCisJCWdwLT5hc2xlZXBfd29sID0gMDsKIAotCQkvKiBHZXQgcmlkIG9m IHJpbmcgYnVmZmVycyAqLwotCQlnZW1fY2xlYW5fcmluZ3MoZ3ApOworCS8qIE1hcmsgdXMgYXNs ZWVwICovCisJZ3AtPmFzbGVlcCA9IDE7CisJd21iKCk7CiAKLQkJc3Bpbl91bmxvY2soJmdwLT50 eF9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisJLyogU3RvcCB0aGUgbGlu ayB0aW1lciAqLworCWRlbF90aW1lcl9zeW5jKCZncC0+bGlua190aW1lcik7CiAKLQkJaWYgKGdw LT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkKLQkJCWRpc2FibGVfaXJxKGdw LT5wZGV2LT5pcnEpOwotCX0KKwkvKiBOb3cgd2UgcmVsZWFzZSB0aGUgc2VtYXBob3JlIHRvIG5v dCBibG9jayB0aGUgcmVzZXQgdGFzayB3aG8KKwkgKiBjYW4gdGFrZSBpdCB0b28uIFdlIGFyZSBt YXJrZWQgYXNsZWVwLCBzbyB0aGVyZSB3aWxsIGJlIG5vCisJICogY29uZmxpY3QgaGVyZQorCSAq LworCXVwKCZncC0+cG1fc2VtKTsKIAotCWlmIChncC0+aHdfcnVubmluZykgewotCQkvKiBLaWxs IFBNIHRpbWVyIGlmIGFueSAqLwotCQlkZWxfdGltZXJfc3luYygmZ3AtPnBtX3RpbWVyKTsKLQkJ Zmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkvKiBXYWl0IGZvciBhIHBlbmRpbmcgcmVzZXQgdGFz ayB0byBjb21wbGV0ZSAqLworCXdoaWxlIChncC0+cmVzZXRfdGFza19wZW5kaW5nKQorCQl5aWVs ZCgpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQkJZ2VtX3NodXRkb3duKGdwKTsKLQl9 CisJLyogU2h1dCB0aGUgUEhZIGRvd24gZXZlbnR1YWxseSBhbmQgc2V0dXAgV09MICovCisJZ2Vt X3N0b3BfcGh5KGdwLCBncC0+YXNsZWVwX3dvbCk7CisKKwkvKiBNYWtlIHN1cmUgYnVzIG1hc3Rl ciBpcyBkaXNhYmxlZCAqLworCXBjaV9kaXNhYmxlX2RldmljZShncC0+cGRldik7CisKKwkvKiBS ZWxlYXNlIHRoZSBjZWxsLCBubyBuZWVkIHRvIHRha2UgYSBsb2NrIGF0IHRoaXMgcG9pbnQgc2lu Y2UKKwkgKiBub3RoaW5nIGVsc2UgY2FuIGhhcHBlbiBub3cKKwkgKi8KKwlnZW1fcHV0X2NlbGwo Z3ApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDEwLDM2ICsyNDAwLDc0IEBACiB7CiAJc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZ2VtICpn cCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKEtFUk5fSU5G TyAiJXM6IHJlc3VtaW5nXG4iLCBkZXYtPm5hbWUpOwogCi0JaWYgKGdwLT5vcGVuZWQpIHsKLSNp ZmRlZiBDT05GSUdfUFBDX1BNQUMKLQkJLyogRmlyc3QsIHdlIG5lZWQgdG8gYnJpbmcgdXAgdGhl IGNoaXAgKi8KLQkJaWYgKGdwLT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkg ewotCQkJZ2VtX2FwcGxlX3Bvd2VydXAoZ3ApOwotCQkJZ2VtX2NoZWNrX2ludmFyaWFudHMoZ3Ap OwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCi0JCXNwaW5fbG9ja19pcnEoJmdw LT5sb2NrKTsKLQkJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CisJZG93bigmZ3AtPnBtX3NlbSk7 CiAKLQkJZ2VtX3N0b3AoZ3ApOwotCQlncC0+aHdfcnVubmluZyA9IDE7Ci0JCWdlbV9pbml0X3Jp bmdzKGdwKTsKLQkJZ2VtX2luaXRfaHcoZ3AsIDEpOworCS8qIEtlZXAgdGhlIGNlbGwgZW5hYmxl ZCBkdXJpbmcgdGhlIGVudGlyZSBvcGVyYXRpb24sIG5vIG5lZWQgdG8KKwkgKiB0YWtlIGEgbG9j ayBoZXJlIHRobyBzaW5jZSBub3RoaW5nIGVsc2UgY2FuIGhhcHBlbiB3aGlsZSB3ZSBhcmUKKwkg KiBtYXJrZWQgYXNsZWVwCisJICovCisJZ2VtX2dldF9jZWxsKGdwKTsKKworCS8qIE1ha2Ugc3Vy ZSBQQ0kgYWNjZXNzIGFuZCBidXMgbWFzdGVyIGFyZSBlbmFibGVkICovCisJaWYgKHBjaV9lbmFi bGVfZGV2aWNlKGdwLT5wZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCByZS1l bmFibGUgY2hpcCAhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJLyogUHV0IGNlbGwgYW5k IGZvcmdldCBpdCBmb3Igbm93LCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMKKwkJICogc3RpbGwg YXNsZWVwLCBhIG5ldyBzbGVlcCBjeWNsZSBtYXkgYnJpbmcgaXQgYmFjaworCQkgKi8KKwkJZ2Vt X3B1dF9jZWxsKGdwKTsKKwkJdXAoJmdwLT5wbV9zZW0pOworCQlyZXR1cm4gMDsKKwl9CisJcGNp X3NldF9tYXN0ZXIoZ3AtPnBkZXYpOwogCi0JCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0J CXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOworCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwln ZW1fcmVzZXQoZ3ApOwogCisJLyogTWFyayB1cyB3b2tlbiB1cCAqLworCWdwLT5hc2xlZXAgPSAw OworCXdtYigpOworCisJLyogQnJpbmcgdGhlIFBIWSBiYWNrLiBBZ2FpbiwgbG9jayBpcyB1c2Vs ZXNzIGF0IHRoaXMgcG9pbnQgYXMKKwkgKiBub3RoaW5nIGNhbiBiZSBoYXBwZW5pbmcgdW50aWwg d2UgcmVzdGFydCB0aGUgd2hvbGUgdGhpbmcKKwkgKi8KKwlnZW1faW5pdF9waHkoZ3ApOworCisJ LyogSWYgd2Ugd2VyZSBvcGVuZWQsIGJyaW5nIGV2ZXJ5dGhpbmcgYmFjayAqLworCWlmIChncC0+ b3BlbmVkKSB7CisJCS8qIFJlc3RhcnQgTUFDICovCisJCWdlbV9kb19zdGFydChkZXYpOworCisJ CS8qIFJlLWF0dGFjaCBuZXQgZGV2aWNlICovCiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsK LQkJaWYgKGdwLT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkKLQkJCWVuYWJs ZV9pcnEoZ3AtPnBkZXYtPmlycSk7CisKIAl9Ci0JdXAoJmdwLT5wbV9zZW0pOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7 CisKKwkvKiBJZiB3ZSBoYWQgV09MIGVuYWJsZWQsIHRoZSBjZWxsIGNsb2NrIHdhcyBuZXZlciB0 dXJuZWQgb2ZmIGR1cmluZworCSAqIHNsZWVwLCBzbyB3ZSBlbmQgdXAgYmVlaW5nIHVuYmFsYW5j ZWQuIEZpeCB0aGF0IGhlcmUKKwkgKi8KKwlpZiAoZ3AtPmFzbGVlcF93b2wpCisJCWdlbV9wdXRf Y2VsbChncCk7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBob2xkIHRoZSBj ZWxsLCBpdCB3aWxsIGJlIGhlbGQgaWYgdGhlCisJICogZHJpdmVyIGlzIG9wZW4gYnkgZ2VtX2Rv X3N0YXJ0KCkuCisJICovCisJZ2VtX3B1dF9jZWxsKGdwKTsKKworCXNwaW5fdW5sb2NrKCZncC0+ dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAog CW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CiAJCisJdXAoJmdwLT5wbV9zZW0pOworCiAJcmV0dXJu IDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCkBAIC0yNDUyLDcgKzI0ODAsMTAgQEAKIAlz cGluX2xvY2tfaXJxKCZncC0+bG9jayk7CiAJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CiAKLQlp ZiAoZ3AtPmh3X3J1bm5pbmcpIHsKKwkvKiBJIGhhdmUgc2VlbiB0aGlzIGJlaW5nIGNhbGxlZCB3 aGlsZSB0aGUgUE0gd2FzIGluIHByb2dyZXNzLAorCSAqIHNvIHdlIHNoaWVsZCBhZ2FpbnN0IHRo aXMKKwkgKi8KKwlpZiAoZ3AtPnJ1bm5pbmcpIHsKIAkJc3RhdHMtPnJ4X2NyY19lcnJvcnMgKz0g cmVhZGwoZ3AtPnJlZ3MgKyBNQUNfRkNTRVJSKTsKIAkJd3JpdGVsKDAsIGdwLT5yZWdzICsgTUFD X0ZDU0VSUik7CiAKQEAgLTI0ODIsMTIgKzI1MTMsMTIgQEAKIAl1MzIgcnhjZmcsIHJ4Y2ZnX25l dzsKIAlpbnQgbGltaXQgPSAxMDAwMDsKIAkKLQlpZiAoIWdwLT5od19ydW5uaW5nKQotCQlyZXR1 cm47Ci0JCQogCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKIAlzcGluX2xvY2soJmdwLT50eF9s b2NrKTsKIAorCWlmICghZ3AtPnJ1bm5pbmcpCisJCWdvdG8gYmFpbDsKKwogCW5ldGlmX3N0b3Bf cXVldWUoZGV2KTsKIAogCXJ4Y2ZnID0gcmVhZGwoZ3AtPnJlZ3MgKyBNQUNfUlhDRkcpOwpAQCAt MjUxMCw5ICsyNTQxLDQ2IEBACiAJd3JpdGVsKHJ4Y2ZnLCBncC0+cmVncyArIE1BQ19SWENGRyk7 CiAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CisgYmFpbDoKKwlzcGluX3VubG9jaygmZ3AtPnR4 X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOworfQorCisvKiBKdW1iby1ncmFt cyBkb24ndCBzZWVtIHRvIHdvcmsgOi0oICovCisjZGVmaW5lIEdFTV9NSU5fTVRVCTY4CisjaWYg MQorI2RlZmluZSBHRU1fTUFYX01UVQkxNTAwCisjZWxzZQorI2RlZmluZSBHRU1fTUFYX01UVQk5 MDAwCisjZW5kaWYKKworc3RhdGljIGludCBnZW1fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKIAor CWlmIChuZXdfbXR1IDwgR0VNX01JTl9NVFUgfHwgbmV3X210dSA+IEdFTV9NQVhfTVRVKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8ICFuZXRpZl9kZXZp Y2VfcHJlc2VudChkZXYpKSB7CisJCS8qIFdlJ2xsIGp1c3QgY2F0Y2ggaXQgbGF0ZXIgd2hlbiB0 aGUKKwkJICogZGV2aWNlIGlzIHVwJ2Qgb3IgcmVzdW1lZC4KKwkJICovCisJCWRldi0+bXR1ID0g bmV3X210dTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmZ3AtPmxvY2spOwor CXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlpZiAoZ3At PnJ1bm5pbmcpIHsKKwkJZ2VtX3JlaW5pdF9jaGlwKGdwKTsKKwkJaWYgKGdwLT5sc3RhdGUgPT0g bGlua191cCkKKwkJCWdlbV9zZXRfbGlua19tb2RlcyhncCk7CisJfQogCXNwaW5fdW5sb2NrKCZn cC0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisKKwlyZXR1cm4gMDsK IH0KIAogc3RhdGljIHZvaWQgZ2VtX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC0yNTQzLDcgKzI2MTEsNiBAQAogCiAJ CS8qIFJldHVybiBjdXJyZW50IFBIWSBzZXR0aW5ncyAqLwogCQlzcGluX2xvY2tfaXJxKCZncC0+ bG9jayk7Ci0JCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwogCQljbWQtPmF1dG9uZWcgPSBncC0+ d2FudF9hdXRvbmVnOwogCQljbWQtPnNwZWVkID0gZ3AtPnBoeV9taWkuc3BlZWQ7CiAJCWNtZC0+ ZHVwbGV4ID0gZ3AtPnBoeV9taWkuZHVwbGV4OwkJCQpAQCAtMjU1NSw3ICsyNjIyLDYgQEAKIAkJ ICovCiAJCWlmIChjbWQtPmFkdmVydGlzaW5nID09IDApCiAJCQljbWQtPmFkdmVydGlzaW5nID0g Y21kLT5zdXBwb3J0ZWQ7Ci0JCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7CiAJCXNwaW5fdW5s b2NrX2lycSgmZ3AtPmxvY2spOwogCX0gZWxzZSB7IC8vIFhYWCBQQ1MgPwogCQljbWQtPnN1cHBv cnRlZCA9CkBAIC0yNTk1LDkgKzI2NjEsOSBAQAogCSAgICAgIAogCS8qIEFwcGx5IHNldHRpbmdz IGFuZCByZXN0YXJ0IGxpbmsgcHJvY2Vzcy4gKi8KIAlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7 Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CisJZ2VtX2dldF9jZWxsKGdwKTsKIAlnZW1fYmVn aW5fYXV0b19uZWdvdGlhdGlvbihncCwgY21kKTsKLQlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2sp OworCWdlbV9wdXRfY2VsbChncCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CiAKIAly ZXR1cm4gMDsKQEAgLTI2MTIsOSArMjY3OCw5IEBACiAKIAkvKiBSZXN0YXJ0IGxpbmsgcHJvY2Vz cy4gKi8KIAlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9j ayk7CisJZ2VtX2dldF9jZWxsKGdwKTsKIAlnZW1fYmVnaW5fYXV0b19uZWdvdGlhdGlvbihncCwg TlVMTCk7Ci0Jc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKKwlnZW1fcHV0X2NlbGwoZ3ApOwog CXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yNjMxLDcgKzI2 OTcsMzEgQEAKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKIAlncC0+bXNnX2VuYWJsZSA9 IHZhbHVlOwogfQotICAKKworCisvKiBBZGQgbW9yZSB3aGVuIEkgdW5kZXJzdGFuZCBob3cgdG8g cHJvZ3JhbSB0aGUgY2hpcCAqLworLyogbGlrZSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8IFdB S0VfQkNBU1QgKi8KKworI2RlZmluZSBXT0xfU1VQUE9SVEVEX01BU0sJKFdBS0VfTUFHSUMpCisK K3N0YXRpYyB2b2lkIGdlbV9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl dGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKKwor CS8qIEFkZCBtb3JlIHdoZW4gSSB1bmRlcnN0YW5kIGhvdyB0byBwcm9ncmFtIHRoZSBjaGlwICov CisJd29sLT5zdXBwb3J0ZWQgPSBXT0xfU1VQUE9SVEVEX01BU0s7CisJd29sLT53b2xvcHRzID0g Z3AtPndha2Vfb25fbGFuOworfQorCitzdGF0aWMgaW50IGdlbV9zZXRfd29sKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgZ2Vt ICpncCA9IGRldi0+cHJpdjsKKworCWdwLT53YWtlX29uX2xhbiA9IHdvbC0+d29sb3B0cyAmIFdP TF9TVVBQT1JURURfTUFTSzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRv b2xfb3BzIGdlbV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gZ2VtX2dldF9kcnZp bmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtMjY0MCw2ICsyNzMw LDggQEAKIAkubndheV9yZXNldAkJPSBnZW1fbndheV9yZXNldCwKIAkuZ2V0X21zZ2xldmVsCQk9 IGdlbV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBnZW1fc2V0X21zZ2xldmVsLAor CS5nZXRfd29sCQk9IGdlbV9nZXRfd29sLAorCS5zZXRfd29sCQk9IGdlbV9zZXRfd29sLAogfTsK IAogc3RhdGljIGludCBnZW1faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlm cmVxICppZnIsIGludCBjbWQpCkBAIC0yNjQ3LDIyICsyNzM5LDI4IEBACiAJc3RydWN0IGdlbSAq Z3AgPSBkZXYtPnByaXY7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlm cik7CiAJaW50IHJjID0gLUVPUE5PVFNVUFA7Ci0JCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwog CS8qIEhvbGQgdGhlIFBNIHNlbWFwaG9yZSB3aGlsZSBkb2luZyBpb2N0bCdzIG9yIHdlIG1heSBj b2xsaWRlCi0JICogd2l0aCBvcGVuL2Nsb3NlIGFuZCBwb3dlciBtYW5hZ2VtZW50IGFuZCBvb3Bz LgorCSAqIHdpdGggcG93ZXIgbWFuYWdlbWVudC4KIAkgKi8KIAlkb3duKCZncC0+cG1fc2VtKTsK LQkKKwkJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CisJZ2VtX2dldF9j ZWxsKGdwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOworCiAJ c3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IGFkZHJlc3Mgb2YgTUlJ IFBIWSBpbiB1c2UuICovCiAJCWRhdGEtPnBoeV9pZCA9IGdwLT5taWlfcGh5X2FkZHI7CiAJCS8q IEZhbGx0aHJvdWdoLi4uICovCiAKIAljYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCBNSUkgUEhZ IHJlZ2lzdGVyLiAqLwotCQlpZiAoIWdwLT5od19ydW5uaW5nKQotCQkJcmMgPSAtRUlPOworCQlp ZiAoIWdwLT5ydW5uaW5nKQorCQkJcmMgPSAtRUFHQUlOOwogCQllbHNlIHsKLQkJCWRhdGEtPnZh bF9vdXQgPSBfX3BoeV9yZWFkKGdwLCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVt ICYgMHgxZik7CisJCQlkYXRhLT52YWxfb3V0ID0gX19waHlfcmVhZChncCwgZGF0YS0+cGh5X2lk ICYgMHgxZiwKKwkJCQkJCSAgIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKIAkJCXJjID0gMDsKIAkJ fQogCQlicmVhazsKQEAgLTI2NzAsMTQgKzI3NjgsMTkgQEAKIAljYXNlIFNJT0NTTUlJUkVHOgkJ LyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURN SU4pKQogCQkJcmMgPSAtRVBFUk07Ci0JCWVsc2UgaWYgKCFncC0+aHdfcnVubmluZykKLQkJCXJj ID0gLUVJTzsKKwkJZWxzZSBpZiAoIWdwLT5ydW5uaW5nKQorCQkJcmMgPSAtRUFHQUlOOwogCQll bHNlIHsKLQkJCV9fcGh5X3dyaXRlKGdwLCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdf bnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKKwkJCV9fcGh5X3dyaXRlKGdwLCBkYXRhLT5waHlf aWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKKwkJCQkgICAgZGF0YS0+dmFsX2luKTsK IAkJCXJjID0gMDsKIAkJfQogCQlicmVhazsKIAl9OworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZn cC0+bG9jaywgZmxhZ3MpOworCWdlbV9wdXRfY2VsbChncCk7CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAogCXVwKCZncC0+cG1fc2VtKTsKIAkKQEAgLTI3ODIs NiArMjg4NSw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZ2Vt X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2Ug KmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChkZXYpIHsKKwkJc3RydWN0IGdl bSAqZ3AgPSBkZXYtPnByaXY7CisKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCQkvKiBT dG9wIHRoZSBsaW5rIHRpbWVyICovCisJCWRlbF90aW1lcl9zeW5jKCZncC0+bGlua190aW1lcik7 CisKKwkJLyogV2Ugc2hvdWxkbid0IG5lZWQgYW55IGxvY2tpbmcgaGVyZSAqLworCQlnZW1fZ2V0 X2NlbGwoZ3ApOworCisJCS8qIFdhaXQgZm9yIGEgcGVuZGluZyByZXNldCB0YXNrIHRvIGNvbXBs ZXRlICovCisJCXdoaWxlIChncC0+cmVzZXRfdGFza19wZW5kaW5nKQorCQkJeWllbGQoKTsKKwkJ Zmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQkvKiBTaHV0IHRoZSBQSFkgZG93biAqLworCQln ZW1fc3RvcF9waHkoZ3AsIDApOworCisJCWdlbV9wdXRfY2VsbChncCk7CisKKwkJLyogTWFrZSBz dXJlIGJ1cyBtYXN0ZXIgaXMgZGlzYWJsZWQgKi8KKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGdwLT5w ZGV2KTsKKworCQkvKiBGcmVlIHJlc291cmNlcyAqLworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBk ZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgZ2VtX2luaXRfYmxvY2spLAorCQkJCSAgICBncC0+ aW5pdF9ibG9jaywKKwkJCQkgICAgZ3AtPmdibG9ja19kdm1hKTsKKwkJaW91bm1hcChncC0+cmVn cyk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJCWZyZWVfbmV0ZGV2KGRldik7CisK KwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCX0KK30KKwogc3RhdGljIGludCBfX2Rl dmluaXQgZ2VtX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3Ry dWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTI4NzMsMTEgKzMwMTcsNiBAQAogCWdwLT5s aW5rX3RpbWVyLmZ1bmN0aW9uID0gZ2VtX2xpbmtfdGltZXI7CiAJZ3AtPmxpbmtfdGltZXIuZGF0 YSA9ICh1bnNpZ25lZCBsb25nKSBncDsKIAotCWluaXRfdGltZXIoJmdwLT5wbV90aW1lcik7Ci0J Z3AtPnBtX3RpbWVyLmZ1bmN0aW9uID0gZ2VtX3BtX3RpbWVyOwotCWdwLT5wbV90aW1lci5kYXRh ID0gKHVuc2lnbmVkIGxvbmcpIGdwOwotCi0JSU5JVF9XT1JLKCZncC0+cG1fdGFzaywgZ2VtX3Bt X3Rhc2ssIGdwKTsKIAlJTklUX1dPUksoJmdwLT5yZXNldF90YXNrLCBnZW1fcmVzZXRfdGFzaywg Z3ApOwogCQogCWdwLT5sc3RhdGUgPSBsaW5rX2Rvd247CkBAIC0yODkzLDE5ICszMDMyLDE4IEBA CiAJfQogCiAJLyogT24gQXBwbGUsIHdlIHBvd2VyIHRoZSBjaGlwIHVwIG5vdyBpbiBvcmRlciBm b3IgY2hlY2sKLQkgKiBpbnZhcmlhbnRzIHRvIHdvcmssIGJ1dCBhbHNvIGJlY2F1c2UgdGhlIGZp cm13YXJlIG1pZ2h0Ci0JICogbm90IGhhdmUgcHJvcGVybHkgc2h1dCBkb3duIHRoZSBQSFkuCisJ ICogaW52YXJpYW50cyB0byB3b3JrLiBXZSBhbHNvIHNldCBzb21lIHJlZ2lzdGVycyB0aGF0IGFy ZQorCSAqIG5vcm1hbGx5CiAJICovCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJZ3AtPm9mX25v ZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0JaWYgKHBkZXYtPnZlbmRvciA9PSBQ Q0lfVkVORE9SX0lEX0FQUExFKQotCQlnZW1fYXBwbGVfcG93ZXJ1cChncCk7CiAjZW5kaWYKLQlz cGluX2xvY2tfaXJxKCZncC0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7Ci0JZ2Vt X3N0b3AoZ3ApOwotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJx KCZncC0+bG9jayk7CisKKwkvKiBNYWtlIHN1cmUgY2VsbCBpcyBlbmFibGVkICovCisJZ2VtX2dl dF9jZWxsKGdwKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHN0b3BwZWQgYW5kIGlu IGluaXQgc3RhdGUgKi8KKwlnZW1fcmVzZXQoZ3ApOwogCiAJLyogRmlsbCB1cCB0aGUgbWlpX3Bo eSBzdHJ1Y3R1cmUgKGV2ZW4gaWYgd2Ugd29uJ3QgdXNlIGl0KSAqLwogCWdwLT5waHlfbWlpLmRl diA9IGRldjsKQEAgLTI5MTQsNyArMzA1Miw4IEBACiAKIAkvKiBCeSBkZWZhdWx0LCB3ZSBzdGFy dCB3aXRoIGF1dG9uZWcgKi8KIAlncC0+d2FudF9hdXRvbmVnID0gMTsKLQkKKworCS8qIENoZWNr IGZpZm8gc2l6ZXMsIFBIWSB0eXBlLCBldGMuLi4gKi8KIAlpZiAoZ2VtX2NoZWNrX2ludmFyaWFu dHMoZ3ApKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwpAQCAt Mjk1NCw2ICszMDkzLDE5IEBACiAJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZW1fcG9sbF9jb250 cm9sbGVyOwogI2VuZGlmCiAKKwkvKiBTZXQgdGhhdCBub3csIGluIGNhc2UgUE0ga2lja3MgaW4g bm93ICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwkvKiBEZXRlY3QgJiBpbml0 IFBIWSwgc3RhcnQgYXV0b25lZywgd2UgcmVsZWFzZSB0aGUgY2VsbCBub3cKKwkgKiB0b28sIGl0 IHdpbGwgYmUgbWFuYWdlZCBieSB3aG9ldmVyIG5lZWRzIGl0CisJICovCisJZ2VtX2luaXRfcGh5 KGdwKTsKKworCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKKwlnZW1fcHV0X2NlbGwoZ3ApOwor CXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOworCisJLyogUmVnaXN0ZXIgd2l0aCBrZXJuZWwg Ki8KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAi Q2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsICIKIAkJICAgICAgICJhYm9ydGluZy5cbiIpOwpA QCAtMjk2OCw0OCArMzEyMCwyMiBAQAogCQkgICAgICAgaSA9PSA1ID8gJyAnIDogJzonKTsKIAlw cmludGsoIlxuIik7CiAKLQkvKiBEZXRlY3QgJiBpbml0IFBIWSwgc3RhcnQgYXV0b25lZyAqLwot CXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKLQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKLQln cC0+aHdfcnVubmluZyA9IDE7Ci0JZ2VtX2luaXRfcGh5KGdwKTsKLQlnZW1fYmVnaW5fYXV0b19u ZWdvdGlhdGlvbihncCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKLQlzcGlu X3VubG9ja19pcnEoJmdwLT5sb2NrKTsKLQogCWlmIChncC0+cGh5X3R5cGUgPT0gcGh5X21paV9t ZGlvMCB8fAogICAgICAJICAgIGdwLT5waHlfdHlwZSA9PSBwaHlfbWlpX21kaW8xKQogCQlwcmlu dGsoS0VSTl9JTkZPICIlczogRm91bmQgJXMgUEhZXG4iLCBkZXYtPm5hbWUsIAogCQkJZ3AtPnBo eV9taWkuZGVmID8gZ3AtPnBoeV9taWkuZGVmLT5uYW1lIDogIm5vIik7CiAKLQlwY2lfc2V0X2Ry dmRhdGEocGRldiwgZGV2KTsKLQogCS8qIEdFTSBjYW4gZG8gaXQgYWxsLi4uICovCiAJZGV2LT5m ZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9MTFRYOwog CWlmIChwY2lfdXNpbmdfZGFjKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsK IAotCS8qIEZpcmUgdGhlIFBNIHRpbWVyIHRoYXQgd2lsbCBzaHV0IHVzIGRvd24gaW4gYWJvdXQg MTAgc2Vjb25kcyAqLwotCWdwLT5wbV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOwot CWFkZF90aW1lcigmZ3AtPnBtX3RpbWVyKTsKLQogCXJldHVybiAwOwogCiBlcnJfb3V0X2ZyZWVf Y29uc2lzdGVudDoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsCi0JCQkgICAgc2l6ZW9mKHN0 cnVjdCBnZW1faW5pdF9ibG9jayksCi0JCQkgICAgZ3AtPmluaXRfYmxvY2ssCi0JCQkgICAgZ3At PmdibG9ja19kdm1hKTsKLQorCWdlbV9yZW1vdmVfb25lKHBkZXYpOwogZXJyX291dF9pb3VubWFw OgotCWRvd24oJmdwLT5wbV9zZW0pOwotCS8qIFN0b3AgdGhlIFBNIHRpbWVyICYgdGFzayAqLwot CWRlbF90aW1lcl9zeW5jKCZncC0+cG1fdGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7 Ci0JaWYgKGdwLT5od19ydW5uaW5nKQotCQlnZW1fc2h1dGRvd24oZ3ApOwotCXVwKCZncC0+cG1f c2VtKTsKLQorCWdlbV9wdXRfY2VsbChncCk7CiAJaW91bm1hcChncC0+cmVncyk7CiAKIGVycl9v dXRfZnJlZV9yZXM6CkBAIC0zMDIzLDM0ICszMTQ5LDYgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBf X2RldmV4aXQgZ2VtX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWlmIChkZXYpIHsK LQkJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7Ci0KLQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2 KTsKLQotCQlkb3duKCZncC0+cG1fc2VtKTsKLQkJLyogU3RvcCB0aGUgUE0gdGltZXIgJiB0YXNr ICovCi0JCWRlbF90aW1lcl9zeW5jKCZncC0+cG1fdGltZXIpOwotCQlmbHVzaF9zY2hlZHVsZWRf d29yaygpOwotCQlpZiAoZ3AtPmh3X3J1bm5pbmcpCi0JCQlnZW1fc2h1dGRvd24oZ3ApOwotCQl1 cCgmZ3AtPnBtX3NlbSk7Ci0KLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAotCQkJCSAgICBz aXplb2Yoc3RydWN0IGdlbV9pbml0X2Jsb2NrKSwKLQkJCQkgICAgZ3AtPmluaXRfYmxvY2ssCi0J CQkJICAgIGdwLT5nYmxvY2tfZHZtYSk7Ci0JCWlvdW5tYXAoZ3AtPnJlZ3MpOwotCQlwY2lfcmVs ZWFzZV9yZWdpb25zKHBkZXYpOwotCQlmcmVlX25ldGRldihkZXYpOwotCi0JCXBjaV9zZXRfZHJ2 ZGF0YShwZGV2LCBOVUxMKTsKLQl9Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnZW1f ZHJpdmVyID0gewogCS5uYW1lCQk9IEdFTV9NT0RVTEVfTkFNRSwKZGlmZiAtdXIgYS9kcml2ZXJz L25ldC9zdW5nZW0uaCBiL2RyaXZlcnMvbmV0L3N1bmdlbS5oCi0tLSBhL2RyaXZlcnMvbmV0L3N1 bmdlbS5oCTIwMDQtMTAtMTggMjM6NTQ6MzIuMDAwMDAwMDAwICswMjAwCisrKyBiL2RyaXZlcnMv bmV0L3N1bmdlbS5oCTIwMDQtMTEtMjYgMTc6MzY6NDIuMDAwMDAwMDAwICswMTAwCkBAIC0xNzAs NiArMTcwLDI3IEBACiAgKiB0aGVtIGxhdGVyLiAtRGF2ZU0KICAqLwogCisvKiBXYWtlT25MYW4g UmVnaXN0ZXJzCSovCisjZGVmaW5lIFdPTF9NQVRDSDAJMHgzMDAwVUwKKyNkZWZpbmUgV09MX01B VENIMQkweDMwMDRVTAorI2RlZmluZSBXT0xfTUFUQ0gyCTB4MzAwOFVMCisjZGVmaW5lIFdPTF9N Q09VTlQJMHgzMDBDVUwKKyNkZWZpbmUgV09MX1dBS0VDU1IJMHgzMDEwVUwKKworLyogV09MIE1h dGNoIGNvdW50IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgV09MX01DT1VOVF9OCQkweDAwMDAwMDEw CisjZGVmaW5lIFdPTF9NQ09VTlRfTQkJMHgwMDAwMDAwMCAvKiAwIDw8IDggKi8KKworI2RlZmlu ZSBXT0xfV0FLRUNTUl9FTkFCTEUJMHgwMDAwMDAwMQorI2RlZmluZSBXT0xfV0FLRUNTUl9NSUkJ CTB4MDAwMDAwMDIKKyNkZWZpbmUgV09MX1dBS0VDU1JfU0VFTgkweDAwMDAwMDA0CisjZGVmaW5l IFdPTF9XQUtFQ1NSX0ZJTFRfVUNBU1QJMHgwMDAwMDAwOAorI2RlZmluZSBXT0xfV0FLRUNTUl9G SUxUX01DQVNUCTB4MDAwMDAwMTAKKyNkZWZpbmUgV09MX1dBS0VDU1JfRklMVF9CQ0FTVAkweDAw MDAwMDIwCisjZGVmaW5lIFdPTF9XQUtFQ1NSX0ZJTFRfU0VFTgkweDAwMDAwMDQwCisKKwogLyog UmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFJYRE1BX0NGRwkweDQwMDBVTAkvKiBS WCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCSovCiAjZGVmaW5lIFJYRE1BX0RCTE9XCTB4NDAwNFVM CS8qIFJYIERlc2NyaXB0b3IgQmFzZSBMb3cJKi8KQEAgLTI3Niw2ICsyOTcsOSBAQAogICovCiAK IC8qIE1BQyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUFDX1dPTF9NQUdJQzAJMHgzMDAwVUwJLyog c2l4IGFkZHJlc3MgYnl0ZXMJCSovCisjZGVmaW5lIE1BQ19XT0xfTUFHSUMxCTB4MzAwNFVMCQor I2RlZmluZSBNQUNfV09MX01BR0lDMgkweDMwMDhVTAogI2RlZmluZSBNQUNfVFhSU1QJMHg2MDAw VUwJLyogVFggTUFDIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQqLwogI2RlZmluZSBNQUNfUlhSU1QJ MHg2MDA0VUwJLyogUlggTUFDIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQqLwogI2RlZmluZSBNQUNf U05EUEFVU0UJMHg2MDA4VUwJLyogU2VuZCBQYXVzZSBDb21tYW5kIFJlZ2lzdGVyCSovCkBAIC03 NTAsNiArNzc0LDE3IEBACiAjZGVmaW5lIFBDU19TQ1RSTF9UWFoJMHgwMDAwYzAwMAkvKiBQTEwg aW5wdXQgdG8gU2VyaWFsaW5rCSovCiAjZGVmaW5lIFBDU19TQ1RSTF9UWFAJMHgwMDAzMDAwMAkv KiBQTEwgaW5wdXQgdG8gU2VyaWFsaW5rCSovCiAKKy8qIFBhdHRlcm4gTWF0Y2ggQ291bnQgcmVn aXN0ZXIuICovCisjZGVmaW5lIFBBVF9NQVRDSF9DRkcJMHgzMDBDVUwKKyNkZWZpbmUgUEFUX01B VENIX04JMHgwMDEwVUwKKyNkZWZpbmUgUEFUX01BVENIX00JMHgwMDAwVUwgCS8qIERhcndpbiBz b3VyY2Ugbm90ZXMgKDA8PDgpICE/Ki8KKworLyogV2FrZSBvbiBMYW4gQ1NSIFJlZ2lzdGVyICov CisjZGVmaW5lIFdPTF9DU1JfQ0ZHCTB4MzAxMFVMCisjZGVmaW5lIFdPTF9FTkFCTEUJMHgwMDAx VUwKKyNkZWZpbmUgV09MX01PREVfTUlJCTB4MDAwMlVMCisKKwogLyogU2hhcmVkIE91dHB1dCBT ZWxlY3QgUmVnaXN0ZXIuICBGb3IgdGVzdCBhbmQgZGVidWcsIGFsbG93cyBtdWx0aXBsZXhpbmcK ICAqIHRlc3Qgb3V0cHV0cyBpbnRvIHRoZSBQUk9NIGFkZHJlc3MgcGlucy4gIFNldCB0byB6ZXJv IGZvciBub3JtYWwKICAqIG9wZXJhdGlvbi4KQEAgLTk2MSwxMSArOTk2LDEyIEBACiAJLyogU2V0 IHdoZW4gY2hpcCBpcyBhY3R1YWxseSBpbiBvcGVyYXRpb25hbCBzdGF0ZQogCSAqIChpZS4gbm90 IHBvd2VyIG1hbmFnZWQpCiAJICovCi0JaW50IGh3X3J1bm5pbmc7Ci0JaW50IG9wZW5lZDsKKwlp bnQgYXNsZWVwOwkJLyogY2hpcCBhc2xlZXAsIHByb3RlY3RlZCBieSBwbV9zZW0gKi8KKwlpbnQg YXNsZWVwX3dvbDsJCS8qIHdhcyBhc2xlZXAgd2l0aCBXT0wgZW5hYmxlZCAqLworCWludCBjZWxs X2VuYWJsZWQ7CS8qIGNlbGwgZW5hYmxlIGNvdW50LCBwcm90ZWN0ZWQgYnkgbG9jayAqLworCWlu dCBvcGVuZWQ7CQkvKiBkcml2ZXIgb3BlbmVkLCBwcm90ZWN0ZWQgYnkgcG1fc2VtICovCisJaW50 IHJ1bm5pbmc7CQkvKiBjaGlwIHJ1bm5pbmcsIHByb3RlY3RlZCBieSBsb2NrICovCiAJc3RydWN0 IHNlbWFwaG9yZSBwbV9zZW07Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHBtX3Rhc2s7Ci0Jc3RydWN0 IHRpbWVyX2xpc3QgcG1fdGltZXI7CiAKIAlzdHJ1Y3QgZ2VtX2luaXRfYmxvY2sgKmluaXRfYmxv Y2s7CiAKZGlmZiAtdXIgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMgYi9kcml2ZXJzL25ldC9z dW5nZW1fcGh5LmMKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCTIwMDQtMTEtMjYgMjA6 MDk6NDQuODAxNTIzOTEyICswMTAwCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYwkyMDA0 LTExLTI2IDE3OjQ5OjMxLjAwMDAwMDAwMCArMDEwMApAQCAtOTgsMjUgKzk4LDE1IEBACiAJZGF0 YSAmPSB+TUlJX0JDTTUyMDFfTVVMVElQSFlfU1VQRVJJU09MQVRFOwogCXBoeV93cml0ZShwaHks IE1JSV9CQ001MjAxX01VTFRJUEhZLCBkYXRhKTsKIAorCXBoeV93cml0ZShwaHksIE1JSV9CQ001 MjAxX0lOVEVSUlVQVCwgMCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiY201MjAx X3N1c3BlbmQoc3RydWN0IG1paV9waHkqIHBoeSwgaW50IHdvbF9vcHRpb25zKQorc3RhdGljIGlu dCBiY201MjAxX3N1c3BlbmQoc3RydWN0IG1paV9waHkqIHBoeSkKIHsKLQlpZiAoIXdvbF9vcHRp b25zKQotCQlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIwMV9JTlRFUlJVUFQsIDApOwotCi0JLyog SGVyZSdzIGEgc3RyYW5nZSBoYWNrIHVzZWQgYnkgYm90aCBNYWNPUyA5IGFuZCBYICovCi0JcGh5 X3dyaXRlKHBoeSwgTUlJX0xQQSwgcGh5X3JlYWQocGh5LCBNSUlfTFBBKSk7Ci0JCi0JaWYgKCF3 b2xfb3B0aW9ucykgewotI2lmIDAgLyogQ29tbWVudGVkIG91dCBpbiBEYXJ3aW4uLi4gc29tZW9u ZSBoYXMgdGhvc2UgZGF3biBkb2NzID8gKi8KLQkJdTE2IHZhbCA9IHBoeV9yZWFkKHBoeSwgTUlJ X0JDTTUyMDFfQVVYTU9ERTIpCi0JCXBoeV93cml0ZShwaHksIE1JSV9CQ001MjAxX0FVWE1PREUy LAotCQkJICB2YWwgJiB+TUlJX0JDTTUyMDFfQVVYTU9ERTJfTE9XUE9XRVIpOwotI2VuZGlmCQkJ Ci0JCXBoeV93cml0ZShwaHksIE1JSV9CQ001MjAxX01VTFRJUEhZLCBNSUlfQkNNNTIwMV9NVUxU SVBIWV9TVVBFUklTT0xBVEUpOwotCX0KKwlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIwMV9JTlRF UlJVUFQsIDApOworCXBoeV93cml0ZShwaHksIE1JSV9CQ001MjAxX01VTFRJUEhZLCBNSUlfQkNN NTIwMV9NVUxUSVBIWV9TVVBFUklTT0xBVEUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDQsOSAr MTM0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmNtNTIyMV9zdXNwZW5kKHN0 cnVjdCBtaWlfcGh5KiBwaHksIGludCB3b2xfb3B0aW9ucykKK3N0YXRpYyBpbnQgYmNtNTIyMV9z dXNwZW5kKHN0cnVjdCBtaWlfcGh5KiBwaHkpCiB7CiAJdTE2IGRhdGE7CisKIAlkYXRhID0gcGh5 X3JlYWQocGh5LCBNSUlfQkNNNTIyMV9URVNUKTsKIAlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIy MV9URVNULAogCQlkYXRhIHwgTUlJX0JDTTUyMjFfVEVTVF9FTkFCTEVfU0hBRE9XUyk7CkBAIC0x ODcsNyArMTc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiY201NDAwX3N1c3Bl bmQoc3RydWN0IG1paV9waHkqIHBoeSwgaW50IHdvbF9vcHRpb25zKQorc3RhdGljIGludCBiY201 NDAwX3N1c3BlbmQoc3RydWN0IG1paV9waHkqIHBoeSkKIHsKICNpZiAwIC8qIENvbW1lbnRlZCBv dXQgaW4gRGFyd2luLi4uIHNvbWVvbmUgaGFzIHRob3NlIGRhd24gZG9jcyA/ICovCiAJcGh5X3dy aXRlKHBoeSwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOwpAQCAtMjQzLDcgKzIzNCw3IEBACiAJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmNtNTQwMV9zdXNwZW5kKHN0cnVjdCBtaWlfcGh5KiBw aHksIGludCB3b2xfb3B0aW9ucykKK3N0YXRpYyBpbnQgYmNtNTQwMV9zdXNwZW5kKHN0cnVjdCBt aWlfcGh5KiBwaHkpCiB7CiAjaWYgMCAvKiBDb21tZW50ZWQgb3V0IGluIERhcndpbi4uLiBzb21l b25lIGhhcyB0aG9zZSBkYXduIGRvY3MgPyAqLwogCXBoeV93cml0ZShwaHksIE1JSV9CTUNSLCBC TUNSX1BET1dOKTsKQEAgLTI4MCw3ICsyNzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMg aW50IGJjbTU0MTFfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5LCBpbnQgd29sX29wdGlvbnMp CitzdGF0aWMgaW50IGJjbTU0MTFfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5KQogewogCXBo eV93cml0ZShwaHksIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKIApkaWZmIC11ciBhL2RyaXZlcnMv bmV0L3N1bmdlbV9waHkuaCBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaAotLS0gYS9kcml2ZXJz L25ldC9zdW5nZW1fcGh5LmgJMjAwNC0xMS0yNiAyMDowOTo0NC44MDI1MjM3NjAgKzAxMDAKKysr IGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCTIwMDQtMTEtMjYgMTc6MzY6NDIuMDAwMDAwMDAw ICswMTAwCkBAIC03LDcgKzcsNyBAQAogc3RydWN0IG1paV9waHlfb3BzCiB7CiAJaW50CQkoKmlu aXQpKHN0cnVjdCBtaWlfcGh5ICpwaHkpOwotCWludAkJKCpzdXNwZW5kKShzdHJ1Y3QgbWlpX3Bo eSAqcGh5LCBpbnQgd29sX29wdGlvbnMpOworCWludAkJKCpzdXNwZW5kKShzdHJ1Y3QgbWlpX3Bo eSAqcGh5KTsKIAlpbnQJCSgqc2V0dXBfYW5lZykoc3RydWN0IG1paV9waHkgKnBoeSwgdTMyIGFk dmVydGlzZSk7CiAJaW50CQkoKnNldHVwX2ZvcmNlZCkoc3RydWN0IG1paV9waHkgKnBoeSwgaW50 IHNwZWVkLCBpbnQgZmQpOwogCWludAkJKCpwb2xsX2xpbmspKHN0cnVjdCBtaWlfcGh5ICpwaHkp OwogCg== --Multipart_Sat__27_Nov_2004_17_58_47_+0100_UIezLzvP2D_Cts0m--