From mboxrd@z Thu Jan 1 00:00:00 1970 From: "j.p.lammertink" Subject: Re: Evaluating the c_can driver for EG20T Date: Thu, 25 Apr 2013 12:11:19 +0200 Message-ID: <20130425101119.ADC62B6CB1792@bmail02.one.com> References: <20130425085507.3EE222B1334F5@bmail03.one.com> <5178F624.5000208@grandegger.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----------=_1366884679-12060-10" Return-path: Received: from webmail-out2.one.com ([91.198.169.17]:59244 "EHLO webmail-out2.b-one.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752584Ab3DYKLV (ORCPT ); Thu, 25 Apr 2013 06:11:21 -0400 In-Reply-To: <5178F624.5000208@grandegger.com> Sender: linux-can-owner@vger.kernel.org List-ID: To: Wolfgang Grandegger Cc: linux-can@vger.kernel.org This is a multi-part message in MIME format... ------------=_1366884679-12060-10 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable <><> Hi Wolfgang, <><>< Hi Jeroen, <><><> Hi Wolfgang, <><><> I think I have a patch for the "Loosing CAN messages problem" <><><> See at the bottom Appendix 7 Sugested patch. <><><> I realize that this patch has a performance penalty, but I didn't da= re <><><> to make more rigorous changes. <><><> I've put the patch on top of Patch 1, of the patches that you sugest= ed (see <><><> text below) <><><> I'm interested in all feedback. <><>< Well, we want to get rid of the pch_can driver sooner than later. <><>< Therefore I would appreciate if you could test and improve the c_can <><>< driver instead. <><>< Wolfgang. <><> I tried once before but I did not succeed. I probably did something <><> wrong. Can you tell me how I can replace the pch_can driver by the <><> c_can driver? <><> We have reduced confidence in the pch_can driver and therefor we <><> are also intrested in evaluating the c_can driver. <>< Good, anyway, could you sent me your patches pch_can.c to understand <>< better your lates problems. <><> Note, after applying patch 1/7 to the pch_can driver, I also <><> attemped to <><> apply the patches 2/7-7/7 which mainly/only(?) effect the c_can <><> driver. <><> 1/7 went succesfull, 2/7-7/7 not. Do I still need to apply those <><> patches? <>< What exact kernel disto and kernel version are you using. With that <>< knowledge I could provid new patches. <>< Wolfgang. <> Hi Wolfgang, <> I've included the patch in the E-mail: <> "Losing CAN messages with socket-CAN" of 24 apr 2013 11:11. (Appendix 7) <> It also contains kernel disto and kernel version and also <> the problem description. < OK. could you send the file "pch_can.c" you used (sorry for my bad < English). Your kernel is obviously 3.5.0-27-generic from Ubuntu. I'm < going to rebase the patches on top of mainline Linux 3.5.0. Any chance < for you to use a recent mailing Linux version? <> You replied to above mentioned E-mail: <> "Therefore I would appreciate if you could test and improve the c_can <> driver instead." <> Can you please indicate how to activate the c_can driver <> (instead of the pch_driver)? < You need to deselect the PCH_CAN and select the C_CAN PCI driver in your < kernel config. I use "make menuconfig" for that purpose. But you need < the complete patch stack. < Wolfgang. Hi Wolfgang, I've attached pch_can.c. I also enlarged the scope of the spinlock in the pch_xmit() function. With this version of the pch_can driver I do no longer loose any messages. Seems that the problem is solved. I have to admit that I do not thoroughly understand this driver (yet) and that I just made educated guesses based on testing and debugging. Best Regards, Jeroen ------------=_1366884679-12060-10 Content-Type: text/plain; name="pch_can.c" Content-Disposition: attachment; filename="pch_can.c" Content-Transfer-Encoding: base64 LyoKICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3Jh dGlvbi4KICogQ29weXJpZ2h0IChDKSAyMDEwIExBUElTIFNFTUlDT05EVUNU T1IgQ08uLCBMVEQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICoKICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt cGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcs IFVTQS4KICovCgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8bGludXgvaW8uaD4KI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvc2NoZWQu aD4KI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgojaW5jbHVkZSA8bGludXgvaW5p dC5oPgojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUg PGxpbnV4L25ldGRldmljZS5oPgojaW5jbHVkZSA8bGludXgvc2tidWZmLmg+ CiNpbmNsdWRlIDxsaW51eC9jYW4uaD4KI2luY2x1ZGUgPGxpbnV4L2Nhbi9k ZXYuaD4KI2luY2x1ZGUgPGxpbnV4L2Nhbi9lcnJvci5oPgoKI2RlZmluZSBQ Q0hfQ1RSTF9JTklUCQlCSVQoMCkgLyogVGhlIElOSVQgYml0IG9mIENBTkNP TlQgcmVnaXN0ZXIuICovCiNkZWZpbmUgUENIX0NUUkxfSUUJCUJJVCgxKSAv KiBUaGUgSUUgYml0IG9mIENBTiBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZp bmUgUENIX0NUUkxfSUVfU0lFX0VJRQkoQklUKDMpIHwgQklUKDIpIHwgQklU KDEpKQojZGVmaW5lIFBDSF9DVFJMX0NDRQkJQklUKDYpCiNkZWZpbmUgUENI X0NUUkxfT1BUCQlCSVQoNykgLyogVGhlIE9QVCBiaXQgb2YgQ0FOQ09OVCBy ZWdpc3Rlci4gKi8KI2RlZmluZSBQQ0hfT1BUX1NJTEVOVAkJQklUKDMpIC8q IFRoZSBTaWxlbnQgYml0IG9mIENBTk9QVCByZWcuICovCiNkZWZpbmUgUENI X09QVF9MQkFDSwkJQklUKDQpIC8qIFRoZSBMb29wQmFjayBiaXQgb2YgQ0FO T1BUIHJlZy4gKi8KCiNkZWZpbmUgUENIX0NNQVNLX1JYX1RYX1NFVAkweDAw ZjMKI2RlZmluZSBQQ0hfQ01BU0tfUlhfVFhfR0VUCTB4MDA3MwojZGVmaW5l IFBDSF9DTUFTS19BTEwJCTB4ZmYKI2RlZmluZSBQQ0hfQ01BU0tfTkVXREFU CUJJVCgyKQojZGVmaW5lIFBDSF9DTUFTS19DTFJJTlRQTkQJQklUKDMpCiNk ZWZpbmUgUENIX0NNQVNLX0NUUkwJCUJJVCg0KQojZGVmaW5lIFBDSF9DTUFT S19BUkIJCUJJVCg1KQojZGVmaW5lIFBDSF9DTUFTS19NQVNLCQlCSVQoNikK I2RlZmluZSBQQ0hfQ01BU0tfUkRXUgkJQklUKDcpCiNkZWZpbmUgUENIX0lG X01DT05UX05FV0RBVAlCSVQoMTUpCiNkZWZpbmUgUENIX0lGX01DT05UX01T R0xPU1QJQklUKDE0KQojZGVmaW5lIFBDSF9JRl9NQ09OVF9JTlRQTkQJQklU KDEzKQojZGVmaW5lIFBDSF9JRl9NQ09OVF9VTUFTSwlCSVQoMTIpCiNkZWZp bmUgUENIX0lGX01DT05UX1RYSUUJQklUKDExKQojZGVmaW5lIFBDSF9JRl9N Q09OVF9SWElFCUJJVCgxMCkKI2RlZmluZSBQQ0hfSUZfTUNPTlRfUk1URU4J QklUKDkpCiNkZWZpbmUgUENIX0lGX01DT05UX1RYUlFYVAlCSVQoOCkKI2Rl ZmluZSBQQ0hfSUZfTUNPTlRfRU9CCUJJVCg3KQojZGVmaW5lIFBDSF9JRl9N Q09OVF9ETEMJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSkK I2RlZmluZSBQQ0hfTUFTSzJfTURJUl9NWFRECShCSVQoMTQpIHwgQklUKDE1 KSkKI2RlZmluZSBQQ0hfSUQyX0RJUgkJQklUKDEzKQojZGVmaW5lIFBDSF9J RDJfWFRECQlCSVQoMTQpCiNkZWZpbmUgUENIX0lEX01TR1ZBTAkJQklUKDE1 KQojZGVmaW5lIFBDSF9JRl9DUkVRX0JVU1kJQklUKDE1KQoKI2RlZmluZSBQ Q0hfU1RBVFVTX0lOVAkJMHg4MDAwCiNkZWZpbmUgUENIX1JQCQkJMHgwMDAw ODAwMAojZGVmaW5lIFBDSF9SRUMJCQkweDAwMDA3ZjAwCiNkZWZpbmUgUENI X1RFQwkJCTB4MDAwMDAwZmYKCiNkZWZpbmUgUENIX1RYX09LCQlCSVQoMykK I2RlZmluZSBQQ0hfUlhfT0sJCUJJVCg0KQojZGVmaW5lIFBDSF9FUEFTU0lW CQlCSVQoNSkKI2RlZmluZSBQQ0hfRVdBUk4JCUJJVCg2KQojZGVmaW5lIFBD SF9CVVNfT0ZGCQlCSVQoNykKCi8qIGJpdCBwb3NpdGlvbiBvZiBjZXJ0YWlu IGNvbnRyb2xsZXIgYml0cy4gKi8KI2RlZmluZSBQQ0hfQklUX0JSUF9TSElG VAkwCiNkZWZpbmUgUENIX0JJVF9TSldfU0hJRlQJNgojZGVmaW5lIFBDSF9C SVRfVFNFRzFfU0hJRlQJOAojZGVmaW5lIFBDSF9CSVRfVFNFRzJfU0hJRlQJ MTIKI2RlZmluZSBQQ0hfQklUX0JSUEVfQlJQRV9TSElGVAk2CgojZGVmaW5l IFBDSF9NU0tfQklUVF9CUlAJMHgzZgojZGVmaW5lIFBDSF9NU0tfQlJQRV9C UlBFCTB4M2MwCiNkZWZpbmUgUENIX01TS19DVFJMX0lFX1NJRV9FSUUJMHgw NwojZGVmaW5lIFBDSF9DT1VOVEVSX0xJTUlUCTEwCgojZGVmaW5lIFBDSF9D QU5fQ0xLCQk1MDAwMDAwMAkvKiA1ME1IeiAqLwoKLyoKICogRGVmaW5lIHRo ZSBudW1iZXIgb2YgbWVzc2FnZSBvYmplY3QuCiAqIFBDSCBDQU4gY29tbXVu aWNhdGlvbnMgYXJlIGRvbmUgdmlhIE1lc3NhZ2UgUkFNLgogKiBUaGUgTWVz c2FnZSBSQU0gY29uc2lzdHMgb2YgMzIgbWVzc2FnZSBvYmplY3RzLgogKi8K I2RlZmluZSBQQ0hfUlhfT0JKX05VTQkJMjYKI2RlZmluZSBQQ0hfVFhfT0JK X05VTQkJNgojZGVmaW5lIFBDSF9SWF9PQkpfU1RBUlQJMQojZGVmaW5lIFBD SF9SWF9PQkpfRU5ECQlQQ0hfUlhfT0JKX05VTQojZGVmaW5lIFBDSF9UWF9P QkpfU1RBUlQJKFBDSF9SWF9PQkpfRU5EICsgMSkKI2RlZmluZSBQQ0hfVFhf T0JKX0VORAkJKFBDSF9SWF9PQkpfTlVNICsgUENIX1RYX09CSl9OVU0pCgoj ZGVmaW5lIFBDSF9GSUZPX1RIUkVTSAkJMTYKCi8qIFR4UnFzdDIgc2hvdyBz dGF0dXMgb2YgTXNnT2JqTm8uMTd+MzIgKi8KI2RlZmluZSBQQ0hfVFJFUTJf VFhfTUFTSwkoKCgxIDw8IFBDSF9UWF9PQkpfTlVNKSAtIDEpIDw8XAoJCQkJ CQkJKFBDSF9SWF9PQkpfRU5EIC0gMTYpKQoKZW51bSBwY2hfaWZyZWcgewoJ UENIX1JYX0lGUkVHLAoJUENIX1RYX0lGUkVHLAp9OwoKZW51bSBwY2hfY2Fu X2VyciB7CglQQ0hfU1RVRl9FUlIgPSAxLAoJUENIX0ZPUk1fRVJSLAoJUENI X0FDS19FUlIsCglQQ0hfQklUMV9FUlIsCglQQ0hfQklUMF9FUlIsCglQQ0hf Q1JDX0VSUiwKCVBDSF9MRUNfQUxMLAp9OwoKZW51bSBwY2hfY2FuX21vZGUg ewoJUENIX0NBTl9FTkFCTEUsCglQQ0hfQ0FOX0RJU0FCTEUsCglQQ0hfQ0FO X0FMTCwKCVBDSF9DQU5fTk9ORSwKCVBDSF9DQU5fU1RPUCwKCVBDSF9DQU5f UlVOLAp9OwoKc3RydWN0IHBjaF9jYW5faWZfcmVncyB7Cgl1MzIgY3JlcTsK CXUzMiBjbWFzazsKCXUzMiBtYXNrMTsKCXUzMiBtYXNrMjsKCXUzMiBpZDE7 Cgl1MzIgaWQyOwoJdTMyIG1jb250OwoJdTMyIGRhdGFbNF07Cgl1MzIgcnN2 WzEzXTsKfTsKCnN0cnVjdCBwY2hfY2FuX3JlZ3MgewoJdTMyIGNvbnQ7Cgl1 MzIgc3RhdDsKCXUzMiBlcnJjOwoJdTMyIGJpdHQ7Cgl1MzIgaW50cjsKCXUz MiBvcHQ7Cgl1MzIgYnJwZTsKCXUzMiByZXNlcnZlOwoJc3RydWN0IHBjaF9j YW5faWZfcmVncyBpZnJlZ3NbMl07IC8qIFswXT1pZjEgIFsxXT1pZjIgKi8K CXUzMiByZXNlcnZlMVs4XTsKCXUzMiB0cmVxMTsKCXUzMiB0cmVxMjsKCXUz MiByZXNlcnZlMls2XTsKCXUzMiBkYXRhMTsKCXUzMiBkYXRhMjsKCXUzMiBy ZXNlcnZlM1s2XTsKCXUzMiBjYW5pcGVuZDE7Cgl1MzIgY2FuaXBlbmQyOwoJ dTMyIHJlc2VydmU0WzZdOwoJdTMyIGNhbm12YWwxOwoJdTMyIGNhbm12YWwy OwoJdTMyIHJlc2VydmU1WzM3XTsKCXUzMiBzcnN0Owp9OwoKc3RydWN0IHBj aF9jYW5fcHJpdiB7CglzdHJ1Y3QgY2FuX3ByaXYgY2FuOwoJc3RydWN0IHBj aV9kZXYgKmRldjsKCXUzMiB0eF9lbmFibGVbUENIX1RYX09CSl9FTkRdOwoJ dTMyIHJ4X2VuYWJsZVtQQ0hfVFhfT0JKX0VORF07Cgl1MzIgcnhfbGlua1tQ Q0hfVFhfT0JKX0VORF07Cgl1MzIgaW50X2VuYWJsZXM7CglzdHJ1Y3QgbmV0 X2RldmljZSAqbmRldjsKCXN0cnVjdCBwY2hfY2FuX3JlZ3MgX19pb21lbSAq cmVnczsKCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwoJaW50IHR4X29iajsJ LyogUG9pbnQgbmV4dCBUeCBPYmogaW5kZXggKi8KCWludCB1c2VfbXNpOwoJ c3BpbmxvY2tfdCBsb2NrOwkvKiB0byBwcm90ZWN0IHR4IG9iamVjdHMgKi8K fTsKCnN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBwY2hfY2Fu X2JpdHRpbWluZ19jb25zdCA9IHsKCS5uYW1lID0gS0JVSUxEX01PRE5BTUUs CgkudHNlZzFfbWluID0gMiwKCS50c2VnMV9tYXggPSAxNiwKCS50c2VnMl9t aW4gPSAxLAoJLnRzZWcyX21heCA9IDgsCgkuc2p3X21heCA9IDQsCgkuYnJw X21pbiA9IDEsCgkuYnJwX21heCA9IDEwMjQsIC8qIDZiaXQgKyBleHRlbmRl ZCA0Yml0ICovCgkuYnJwX2luYyA9IDEsCn07CgpzdGF0aWMgREVGSU5FX1BD SV9ERVZJQ0VfVEFCTEUocGNoX3BjaV90YmwpID0gewoJe1BDSV9WRU5ET1Jf SURfSU5URUwsIDB4ODgxOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAoJ ezAsfQp9OwpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNoX3BjaV90Ymwp OwoKc3RhdGljIGlubGluZSB2b2lkIHBjaF9jYW5fYml0X3NldCh2b2lkIF9f aW9tZW0gKmFkZHIsIHUzMiBtYXNrKQp7Cglpb3dyaXRlMzIoaW9yZWFkMzIo YWRkcikgfCBtYXNrLCBhZGRyKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHBj aF9jYW5fYml0X2NsZWFyKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIG1hc2sp CnsKCWlvd3JpdGUzMihpb3JlYWQzMihhZGRyKSAmIH5tYXNrLCBhZGRyKTsK fQoKc3RhdGljIHZvaWQgcGNoX2Nhbl9zZXRfcnVuX21vZGUoc3RydWN0IHBj aF9jYW5fcHJpdiAqcHJpdiwKCQkJCSBlbnVtIHBjaF9jYW5fbW9kZSBtb2Rl KQp7Cglzd2l0Y2ggKG1vZGUpIHsKCWNhc2UgUENIX0NBTl9SVU46CgkJcGNo X2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0lO SVQpOwoJCWJyZWFrOwoKCWNhc2UgUENIX0NBTl9TVE9QOgoJCXBjaF9jYW5f Yml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgUENIX0NUUkxfSU5JVCk7CgkJ YnJlYWs7CgoJZGVmYXVsdDoKCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICIl cyAtPiBJbnZhbGlkIE1vZGUuXG4iLCBfX2Z1bmNfXyk7CgkJYnJlYWs7Cgl9 Cn0KCnN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X29wdG1vZGUoc3RydWN0IHBj aF9jYW5fcHJpdiAqcHJpdikKewoJdTMyIHJlZ192YWwgPSBpb3JlYWQzMigm cHJpdi0+cmVncy0+b3B0KTsKCglpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYg Q0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkpCgkJcmVnX3ZhbCB8PSBQQ0hfT1BU X1NJTEVOVDsKCglpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxN T0RFX0xPT1BCQUNLKQoJCXJlZ192YWwgfD0gUENIX09QVF9MQkFDSzsKCglw Y2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX09Q VCk7Cglpb3dyaXRlMzIocmVnX3ZhbCwgJnByaXYtPnJlZ3MtPm9wdCk7Cn0K CnN0YXRpYyB2b2lkIHBjaF9jYW5fcndfbXNnX29iaih2b2lkIF9faW9tZW0g KmNyZXFfYWRkciwgdTMyIG51bSkKewoJaW50IGNvdW50ZXIgPSBQQ0hfQ09V TlRFUl9MSU1JVDsKCXUzMiBpZnhfY3JlcTsKCglpb3dyaXRlMzIobnVtLCBj cmVxX2FkZHIpOwoJd2hpbGUgKGNvdW50ZXIpIHsKCQlpZnhfY3JlcSA9IGlv cmVhZDMyKGNyZXFfYWRkcikgJiBQQ0hfSUZfQ1JFUV9CVVNZOwoJCWlmICgh aWZ4X2NyZXEpCgkJCWJyZWFrOwoJCWNvdW50ZXItLTsKCQl1ZGVsYXkoMSk7 Cgl9CglpZiAoIWNvdW50ZXIpCgkJcHJfZXJyKCIlczpJRjEgQlVTWSBGbGFn IGlzIHNldCBmb3JldmVyLlxuIiwgX19mdW5jX18pOwp9CgpzdGF0aWMgdm9p ZCBwY2hfY2FuX3NldF9pbnRfZW5hYmxlcyhzdHJ1Y3QgcGNoX2Nhbl9wcml2 ICpwcml2LAoJCQkJICAgIGVudW0gcGNoX2Nhbl9tb2RlIGludGVycnVwdF9u bykKewoJc3dpdGNoIChpbnRlcnJ1cHRfbm8pIHsKCWNhc2UgUENIX0NBTl9E SVNBQkxFOgoJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5jb250 LCBQQ0hfQ1RSTF9JRSk7CgkJYnJlYWs7CgoJY2FzZSBQQ0hfQ0FOX0FMTDoK CQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJM X0lFX1NJRV9FSUUpOwoJCWJyZWFrOwoKCWNhc2UgUENIX0NBTl9OT05FOgoJ CXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5jb250LCBQQ0hfQ1RS TF9JRV9TSUVfRUlFKTsKCQlicmVhazsKCglkZWZhdWx0OgoJCW5ldGRldl9l cnIocHJpdi0+bmRldiwgIkludmFsaWQgaW50ZXJydXB0IG51bWJlci5cbiIp OwoJCWJyZWFrOwoJfQp9CgpzdGF0aWMgdm9pZCBwY2hfY2FuX3NldF9yeHR4 KHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsIHUzMiBidWZmX251bSwKCQkJ ICAgICBpbnQgc2V0LCBlbnVtIHBjaF9pZnJlZyBkaXIpCnsKCXUzMiBpZTsK CglpZiAoZGlyKQoJCWllID0gUENIX0lGX01DT05UX1RYSUU7CgllbHNlCgkJ aWUgPSBQQ0hfSUZfTUNPTlRfUlhJRTsKCgkvKiBSZWFkaW5nIHRoZSBNc2cg YnVmZmVyIGZyb20gTWVzc2FnZSBSQU0gdG8gSUYxLzIgcmVnaXN0ZXJzLiAq LwoJaW93cml0ZTMyKFBDSF9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdz LT5pZnJlZ3NbZGlyXS5jbWFzayk7CglwY2hfY2FuX3J3X21zZ19vYmooJnBy aXYtPnJlZ3MtPmlmcmVnc1tkaXJdLmNyZXEsIGJ1ZmZfbnVtKTsKCgkvKiBT ZXR0aW5nIHRoZSBJRjEvMk1BU0sxIHJlZ2lzdGVyIHRvIGFjY2VzcyBNc2dW YWwgYW5kIFJ4SUUgYml0cyAqLwoJaW93cml0ZTMyKFBDSF9DTUFTS19SRFdS IHwgUENIX0NNQVNLX0FSQiB8IFBDSF9DTUFTS19DVFJMLAoJCSAgJnByaXYt PnJlZ3MtPmlmcmVnc1tkaXJdLmNtYXNrKTsKCglpZiAoc2V0KSB7CgkJLyog U2V0dGluZyB0aGUgTXNnVmFsIGFuZCBSeElFL1R4SUUgYml0cyAqLwoJCXBj aF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0ubWNvbnQs IGllKTsKCQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmcmVnc1tk aXJdLmlkMiwgUENIX0lEX01TR1ZBTCk7Cgl9IGVsc2UgewoJCS8qIENsZWFy aW5nIHRoZSBNc2dWYWwgYW5kIFJ4SUUvVHhJRSBiaXRzICovCgkJcGNoX2Nh bl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1tkaXJdLm1jb250LCBp ZSk7CgkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1tk aXJdLmlkMiwgUENIX0lEX01TR1ZBTCk7Cgl9CgoJcGNoX2Nhbl9yd19tc2df b2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbZGlyXS5jcmVxLCBidWZmX251bSk7 Cn0KCnN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3J4X2FsbChzdHJ1Y3QgcGNo X2Nhbl9wcml2ICpwcml2LCBpbnQgc2V0KQp7CglpbnQgaTsKCgkvKiBUcmF2 ZXJzaW5nIHRvIG9idGFpbiB0aGUgb2JqZWN0IGNvbmZpZ3VyZWQgYXMgcmVj ZWl2ZXJzLiAqLwoJZm9yIChpID0gUENIX1JYX09CSl9TVEFSVDsgaSA8PSBQ Q0hfUlhfT0JKX0VORDsgaSsrKQoJCXBjaF9jYW5fc2V0X3J4dHgocHJpdiwg aSwgc2V0LCBQQ0hfUlhfSUZSRUcpOwp9CgpzdGF0aWMgdm9pZCBwY2hfY2Fu X3NldF90eF9hbGwoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgaW50IHNl dCkKewoJaW50IGk7CgoJLyogVHJhdmVyc2luZyB0byBvYnRhaW4gdGhlIG9i amVjdCBjb25maWd1cmVkIGFzIHRyYW5zbWl0IG9iamVjdC4gKi8KCWZvciAo aSA9IFBDSF9UWF9PQkpfU1RBUlQ7IGkgPD0gUENIX1RYX09CSl9FTkQ7IGkr KykKCQlwY2hfY2FuX3NldF9yeHR4KHByaXYsIGksIHNldCwgUENIX1RYX0lG UkVHKTsKfQoKc3RhdGljIHUzMiBwY2hfY2FuX2ludF9wZW5kaW5nKHN0cnVj dCBwY2hfY2FuX3ByaXYgKnByaXYpCnsKCXJldHVybiBpb3JlYWQzMigmcHJp di0+cmVncy0+aW50cikgJiAweGZmZmY7Cn0KCnN0YXRpYyB2b2lkIHBjaF9j YW5fY2xlYXJfaWZfYnVmZmVycyhzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2 KQp7CglpbnQgaTsgLyogTXNnIE9iaiBJRCAoMX4zMikgKi8KCglmb3IgKGkg PSBQQ0hfUlhfT0JKX1NUQVJUOyBpIDw9IFBDSF9UWF9PQkpfRU5EOyBpKysp IHsKCQlpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX1NFVCwgJnByaXYtPnJl Z3MtPmlmcmVnc1swXS5jbWFzayk7CgkJaW93cml0ZTMyKDB4ZmZmZiwgJnBy aXYtPnJlZ3MtPmlmcmVnc1swXS5tYXNrMSk7CgkJaW93cml0ZTMyKDB4ZmZm ZiwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tYXNrMik7CgkJaW93cml0ZTMy KDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5pZDEpOwoJCWlvd3JpdGUz MigweDAsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uaWQyKTsKCQlpb3dyaXRl MzIoMHgwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250KTsKCQlpb3dy aXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmRhdGFbMF0pOwoJ CWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uZGF0YVsx XSk7CgkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5k YXRhWzJdKTsKCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWZyZWdz WzBdLmRhdGFbM10pOwoJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBD SF9DTUFTS19NQVNLIHwKCQkJICBQQ0hfQ01BU0tfQVJCIHwgUENIX0NNQVNL X0NUUkwsCgkJCSAgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CgkJ cGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3Jl cSwgaSk7Cgl9Cn0KCnN0YXRpYyB2b2lkIHBjaF9jYW5fY29uZmlnX3J4X3R4 X2J1ZmZlcnMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKewoJaW50IGk7 CgoJZm9yIChpID0gUENIX1JYX09CSl9TVEFSVDsgaSA8PSBQQ0hfUlhfT0JK X0VORDsgaSsrKSB7CgkJaW93cml0ZTMyKFBDSF9DTUFTS19SWF9UWF9HRVQs ICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOwoJCXBjaF9jYW5fcndf bXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIGkpOwoKCQlp b3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmlkMSk7CgkJ aW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5pZDIpOwoK CQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29u dCwKCQkJCVBDSF9JRl9NQ09OVF9VTUFTSyk7CgoJCS8qIEluIGNhc2UgRklG TyBtb2RlLCBMYXN0IEVvQiBvZiBSeCBPYmogbXVzdCBiZSAxICovCgkJaWYg KGkgPT0gUENIX1JYX09CSl9FTkQpCgkJCXBjaF9jYW5fYml0X3NldCgmcHJp di0+cmVncy0+aWZyZWdzWzBdLm1jb250LAoJCQkJCVBDSF9JRl9NQ09OVF9F T0IpOwoJCWVsc2UKCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3Mt PmlmcmVnc1swXS5tY29udCwKCQkJCQkgIFBDSF9JRl9NQ09OVF9FT0IpOwoK CQlpb3dyaXRlMzIoMCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tYXNrMSk7 CgkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5t YXNrMiwKCQkJCSAgMHgxZmZmIHwgUENIX01BU0syX01ESVJfTVhURCk7CgoJ CS8qIFNldHRpbmcgQ01BU0sgZm9yIHdyaXRpbmcgKi8KCQlpb3dyaXRlMzIo UENIX0NNQVNLX1JEV1IgfCBQQ0hfQ01BU0tfTUFTSyB8IFBDSF9DTUFTS19B UkIgfAoJCQkgIFBDSF9DTUFTS19DVFJMLCAmcHJpdi0+cmVncy0+aWZyZWdz WzBdLmNtYXNrKTsKCgkJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdz LT5pZnJlZ3NbMF0uY3JlcSwgaSk7Cgl9CgoJZm9yIChpID0gUENIX1RYX09C Sl9TVEFSVDsgaSA8PSBQQ0hfVFhfT0JKX0VORDsgaSsrKSB7CgkJaW93cml0 ZTMyKFBDSF9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZnJlZ3Nb MV0uY21hc2spOwoJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+ aWZyZWdzWzFdLmNyZXEsIGkpOwoKCQkvKiBSZXNldHRpbmcgRElSIGJpdCBm b3IgcmVjZXB0aW9uICovCgkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3Mt PmlmcmVnc1sxXS5pZDEpOwoJCWlvd3JpdGUzMihQQ0hfSUQyX0RJUiwgJnBy aXYtPnJlZ3MtPmlmcmVnc1sxXS5pZDIpOwoKCQkvKiBTZXR0aW5nIEVPQiBi aXQgZm9yIHRyYW5zbWl0dGVyICovCgkJaW93cml0ZTMyKFBDSF9JRl9NQ09O VF9FT0IgfCBQQ0hfSUZfTUNPTlRfVU1BU0ssCgkJCSAgJnByaXYtPnJlZ3Mt PmlmcmVnc1sxXS5tY29udCk7CgoJCWlvd3JpdGUzMigwLCAmcHJpdi0+cmVn cy0+aWZyZWdzWzFdLm1hc2sxKTsKCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJp di0+cmVncy0+aWZyZWdzWzFdLm1hc2syLCAweDFmZmYpOwoKCQkvKiBTZXR0 aW5nIENNQVNLIGZvciB3cml0aW5nICovCgkJaW93cml0ZTMyKFBDSF9DTUFT S19SRFdSIHwgUENIX0NNQVNLX01BU0sgfCBQQ0hfQ01BU0tfQVJCIHwKCQkJ ICBQQ0hfQ01BU0tfQ1RSTCwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFz ayk7CgoJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdz WzFdLmNyZXEsIGkpOwoJfQp9CgpzdGF0aWMgdm9pZCBwY2hfY2FuX2luaXQo c3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKewoJLyogU3RvcHBpbmcgdGhl IENhbiBkZXZpY2UuICovCglwY2hfY2FuX3NldF9ydW5fbW9kZShwcml2LCBQ Q0hfQ0FOX1NUT1ApOwoKCS8qIENsZWFyaW5nIGFsbCB0aGUgbWVzc2FnZSBv YmplY3QgYnVmZmVycy4gKi8KCXBjaF9jYW5fY2xlYXJfaWZfYnVmZmVycyhw cml2KTsKCgkvKiBDb25maWd1cmluZyB0aGUgcmVzcGVjdGl2ZSBtZXNzYWdl IG9iamVjdCBhcyBlaXRoZXIgcngvdHggb2JqZWN0LiAqLwoJcGNoX2Nhbl9j b25maWdfcnhfdHhfYnVmZmVycyhwcml2KTsKCgkvKiBFbmFibGluZyB0aGUg aW50ZXJydXB0cy4gKi8KCXBjaF9jYW5fc2V0X2ludF9lbmFibGVzKHByaXYs IFBDSF9DQU5fQUxMKTsKfQoKc3RhdGljIHZvaWQgcGNoX2Nhbl9yZWxlYXNl KHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYpCnsKCS8qIFN0b29waW5nIHRo ZSBDQU4gZGV2aWNlLiAqLwoJcGNoX2Nhbl9zZXRfcnVuX21vZGUocHJpdiwg UENIX0NBTl9TVE9QKTsKCgkvKiBEaXNhYmxpbmcgdGhlIGludGVycnVwdHMu ICovCglwY2hfY2FuX3NldF9pbnRfZW5hYmxlcyhwcml2LCBQQ0hfQ0FOX05P TkUpOwoKCS8qIERpc2FibGluZyBhbGwgdGhlIHJlY2VpdmUgb2JqZWN0LiAq LwoJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDApOwoKCS8qIERpc2FibGlu ZyBhbGwgdGhlIHRyYW5zbWl0IG9iamVjdC4gKi8KCXBjaF9jYW5fc2V0X3R4 X2FsbChwcml2LCAwKTsKfQoKLyogVGhpcyBmdW5jdGlvbiBjbGVhcnMgaW50 ZXJydXB0KHMpIGZyb20gdGhlIENBTiBkZXZpY2UuICovCnN0YXRpYyB2b2lk IHBjaF9jYW5faW50X2NscihzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LCB1 MzIgbWFzaykKewoJLyogQ2xlYXIgaW50ZXJydXB0IGZvciB0cmFuc21pdCBv YmplY3QgKi8KCWlmICgobWFzayA+PSBQQ0hfUlhfT0JKX1NUQVJUKSAmJiAo bWFzayA8PSBQQ0hfUlhfT0JKX0VORCkpIHsKCQkvKiBTZXR0aW5nIENNQVNL IGZvciBjbGVhcmluZyB0aGUgcmVjZXB0aW9uIGludGVycnVwdHMuICovCgkJ aW93cml0ZTMyKFBDSF9DTUFTS19SRFdSIHwgUENIX0NNQVNLX0NUUkwgfCBQ Q0hfQ01BU0tfQVJCLAoJCQkgICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21h c2spOwoKCQkvKiBDbGVhcmluZyB0aGUgRGlyIGJpdC4gKi8KCQlwY2hfY2Fu X2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmlkMiwgUENIX0lE Ml9ESVIpOwoKCQkvKiBDbGVhcmluZyBOZXdEYXQgJiBJbnRQbmQgKi8KCQlw Y2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250 LAoJCQkJICBQQ0hfSUZfTUNPTlRfTkVXREFUIHwgUENIX0lGX01DT05UX0lO VFBORCk7CgoJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZy ZWdzWzBdLmNyZXEsIG1hc2spOwoJfSBlbHNlIGlmICgobWFzayA+PSBQQ0hf VFhfT0JKX1NUQVJUKSAmJiAobWFzayA8PSBQQ0hfVFhfT0JKX0VORCkpIHsK CQkvKgoJCSAqIFNldHRpbmcgQ01BU0sgZm9yIGNsZWFyaW5nIGludGVycnVw dHMgZm9yIGZyYW1lIHRyYW5zbWlzc2lvbi4KCQkgKi8KCQlpb3dyaXRlMzIo UENIX0NNQVNLX1JEV1IgfCBQQ0hfQ01BU0tfQ1RSTCB8IFBDSF9DTUFTS19B UkIsCgkJCSAgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFzayk7CgoJCS8q IFJlc2V0dGluZyB0aGUgSUQgcmVnaXN0ZXJzLiAqLwoJCXBjaF9jYW5fYml0 X3NldCgmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmlkMiwKCQkJICAgICAgIFBD SF9JRDJfRElSIHwgKDB4N2ZmIDw8IDIpKTsKCQlpb3dyaXRlMzIoMHgwLCAm cHJpdi0+cmVncy0+aWZyZWdzWzFdLmlkMSk7CgoJCS8qIENsYXJpbmcgTmV3 RGF0LCBUeFJxc3QgJiBJbnRQbmQgKi8KCQlwY2hfY2FuX2JpdF9jbGVhcigm cHJpdi0+cmVncy0+aWZyZWdzWzFdLm1jb250LAoJCQkJICBQQ0hfSUZfTUNP TlRfTkVXREFUIHwgUENIX0lGX01DT05UX0lOVFBORCB8CgkJCQkgIFBDSF9J Rl9NQ09OVF9UWFJRWFQpOwoJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+ cmVncy0+aWZyZWdzWzFdLmNyZXEsIG1hc2spOwoJfQp9CgpzdGF0aWMgdm9p ZCBwY2hfY2FuX3Jlc2V0KHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYpCnsK CS8qIHdyaXRlIHRvIHN3IHJlc2V0IHJlZ2lzdGVyICovCglpb3dyaXRlMzIo MSwgJnByaXYtPnJlZ3MtPnNyc3QpOwoJaW93cml0ZTMyKDAsICZwcml2LT5y ZWdzLT5zcnN0KTsKfQoKc3RhdGljIHZvaWQgcGNoX2Nhbl9lcnJvcihzdHJ1 Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0YXR1cykKewoJc3RydWN0IHNr X2J1ZmYgKnNrYjsKCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRk ZXZfcHJpdihuZGV2KTsKCXN0cnVjdCBjYW5fZnJhbWUgKmNmOwoJdTMyIGVy cmMsIGxlYzsKCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICYo cHJpdi0+bmRldi0+c3RhdHMpOwoJZW51bSBjYW5fc3RhdGUgc3RhdGUgPSBw cml2LT5jYW4uc3RhdGU7CgoJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IobmRl diwgJmNmKTsKCWlmICghc2tiKQoJCXJldHVybjsKCglpZiAoc3RhdHVzICYg UENIX0JVU19PRkYpIHsKCQlwY2hfY2FuX3NldF90eF9hbGwocHJpdiwgMCk7 CgkJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDApOwoJCXN0YXRlID0gQ0FO X1NUQVRFX0JVU19PRkY7CgkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09G RjsKCQljYW5fYnVzX29mZihuZGV2KTsKCX0KCgllcnJjID0gaW9yZWFkMzIo JnByaXYtPnJlZ3MtPmVycmMpOwoJLyogV2FybmluZyBpbnRlcnJ1cHQuICov CglpZiAoc3RhdHVzICYgUENIX0VXQVJOKSB7CgkJc3RhdGUgPSBDQU5fU1RB VEVfRVJST1JfV0FSTklORzsKCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9y X3dhcm5pbmcrKzsKCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKCQlp ZiAoKChlcnJjICYgUENIX1JFQykgPj4gOCkgPiA5NikKCQkJY2YtPmRhdGFb MV0gfD0gQ0FOX0VSUl9DUlRMX1JYX1dBUk5JTkc7CgkJaWYgKChlcnJjICYg UENIX1RFQykgPiA5NikKCQkJY2YtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRM X1RYX1dBUk5JTkc7CgkJbmV0ZGV2X2RiZyhuZGV2LAoJCQkiJXMgLT4gRXJy b3IgQ291bnRlciBpcyBtb3JlIHRoYW4gOTYuXG4iLCBfX2Z1bmNfXyk7Cgl9 CgkvKiBFcnJvciBwYXNzaXZlIGludGVycnVwdC4gKi8KCWlmIChzdGF0dXMg JiBQQ0hfRVBBU1NJVikgewoJCXByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3Jf cGFzc2l2ZSsrOwoJCXN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU7 CgkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CgkJaWYgKGVycmMgJiBQ Q0hfUlApCgkJCWNmLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9SWF9QQVNT SVZFOwoJCWlmICgoZXJyYyAmIFBDSF9URUMpID4gMTI3KQoJCQljZi0+ZGF0 YVsxXSB8PSBDQU5fRVJSX0NSVExfVFhfUEFTU0lWRTsKCQluZXRkZXZfZGJn KG5kZXYsCgkJCSIlcyAtPiBDQU4gY29udHJvbGxlciBpcyBFUlJPUiBQQVNT SVZFIC5cbiIsIF9fZnVuY19fKTsKCX0KCglsZWMgPSBzdGF0dXMgJiBQQ0hf TEVDX0FMTDsKCXN3aXRjaCAobGVjKSB7CgljYXNlIFBDSF9TVFVGX0VSUjoK CQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7CgkJcHJpdi0+ Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKCQlzdGF0cy0+cnhfZXJyb3Jz Kys7CgkJYnJlYWs7CgljYXNlIFBDSF9GT1JNX0VSUjoKCQljZi0+ZGF0YVsy XSB8PSBDQU5fRVJSX1BST1RfRk9STTsKCQlwcml2LT5jYW4uY2FuX3N0YXRz LmJ1c19lcnJvcisrOwoJCXN0YXRzLT5yeF9lcnJvcnMrKzsKCQlicmVhazsK CWNhc2UgUENIX0FDS19FUlI6CgkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0FD SzsKCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOwoJCXN0YXRz LT5yeF9lcnJvcnMrKzsKCQlicmVhazsKCWNhc2UgUENIX0JJVDFfRVJSOgoJ Y2FzZSBQQ0hfQklUMF9FUlI6CgkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9Q Uk9UX0JJVDsKCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOwoJ CXN0YXRzLT5yeF9lcnJvcnMrKzsKCQlicmVhazsKCWNhc2UgUENIX0NSQ19F UlI6CgkJY2YtPmRhdGFbM10gfD0gQ0FOX0VSUl9QUk9UX0xPQ19DUkNfU0VR IHwKCQkJICAgICAgIENBTl9FUlJfUFJPVF9MT0NfQ1JDX0RFTDsKCQlwcml2 LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOwoJCXN0YXRzLT5yeF9lcnJv cnMrKzsKCQlicmVhazsKCWNhc2UgUENIX0xFQ19BTEw6IC8qIFdyaXR0ZW4g YnkgQ1BVLiBObyBlcnJvciBzdGF0dXMgKi8KCQlicmVhazsKCX0KCgljZi0+ ZGF0YVs2XSA9IGVycmMgJiBQQ0hfVEVDOwoJY2YtPmRhdGFbN10gPSAoZXJy YyAmIFBDSF9SRUMpID4+IDg7CgoJcHJpdi0+Y2FuLnN0YXRlID0gc3RhdGU7 CgluZXRpZl9yZWNlaXZlX3NrYihza2IpOwoKCXN0YXRzLT5yeF9wYWNrZXRz Kys7CglzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7Cn0KCnN0YXRp YyBpcnFyZXR1cm5fdCBwY2hfY2FuX2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCnsKCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gKHN0cnVj dCBuZXRfZGV2aWNlICopZGV2X2lkOwoJc3RydWN0IHBjaF9jYW5fcHJpdiAq cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwoKCWlmICghcGNoX2Nhbl9pbnRf cGVuZGluZyhwcml2KSkKCQlyZXR1cm4gSVJRX05PTkU7CgoJcGNoX2Nhbl9z ZXRfaW50X2VuYWJsZXMocHJpdiwgUENIX0NBTl9OT05FKTsKCW5hcGlfc2No ZWR1bGUoJnByaXYtPm5hcGkpOwoJcmV0dXJuIElSUV9IQU5ETEVEOwp9Cgpz dGF0aWMgdm9pZCBwY2hfZmlmb190aHJlc2goc3RydWN0IHBjaF9jYW5fcHJp diAqcHJpdiwgaW50IG9ial9pZCkKewoJaWYgKG9ial9pZCA8IFBDSF9GSUZP X1RIUkVTSCkgewoJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9D TUFTS19DVFJMIHwKCQkJICBQQ0hfQ01BU0tfQVJCLCAmcHJpdi0+cmVncy0+ aWZyZWdzWzBdLmNtYXNrKTsKCgkJLyogQ2xlYXJpbmcgdGhlIERpciBiaXQu ICovCgkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1sw XS5pZDIsIFBDSF9JRDJfRElSKTsKCgkJLyogQ2xlYXJpbmcgTmV3RGF0ICYg SW50UG5kICovCgkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlm cmVnc1swXS5tY29udCwKCQkJCSAgUENIX0lGX01DT05UX0lOVFBORCk7CgkJ cGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3Jl cSwgb2JqX2lkKTsKCX0gZWxzZSBpZiAob2JqX2lkID4gUENIX0ZJRk9fVEhS RVNIKSB7CgkJcGNoX2Nhbl9pbnRfY2xyKHByaXYsIG9ial9pZCk7Cgl9IGVs c2UgaWYgKG9ial9pZCA9PSBQQ0hfRklGT19USFJFU0gpIHsKCQlpbnQgY250 OwoJCWZvciAoY250ID0gMDsgY250IDwgUENIX0ZJRk9fVEhSRVNIOyBjbnQr KykKCQkJcGNoX2Nhbl9pbnRfY2xyKHByaXYsIGNudCArIDEpOwoJfQp9Cgpz dGF0aWMgdm9pZCBwY2hfY2FuX3J4X21zZ19sb3N0KHN0cnVjdCBuZXRfZGV2 aWNlICpuZGV2LCBpbnQgb2JqX2lkKQp7CglzdHJ1Y3QgcGNoX2Nhbl9wcml2 ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CglzdHJ1Y3QgbmV0X2Rldmlj ZV9zdGF0cyAqc3RhdHMgPSAmKHByaXYtPm5kZXYtPnN0YXRzKTsKCXN0cnVj dCBza19idWZmICpza2I7CglzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKCgluZXRk ZXZfZGJnKHByaXYtPm5kZXYsICJNc2cgT2JqIGlzIG92ZXJ3cml0dGVuLlxu Iik7CglwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzWzBd Lm1jb250LAoJCQkgIFBDSF9JRl9NQ09OVF9NU0dMT1NUKTsKCWlvd3JpdGUz MihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19DVFJMLAoJCSAgJnByaXYt PnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CglwY2hfY2FuX3J3X21zZ19vYmoo JnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jcmVxLCBvYmpfaWQpOwoKCXNrYiA9 IGFsbG9jX2Nhbl9lcnJfc2tiKG5kZXYsICZjZik7CglpZiAoIXNrYikKCQly ZXR1cm47CgoJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CgljZi0+ZGF0 YVsxXSA9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKCXN0YXRzLT5yeF9v dmVyX2Vycm9ycysrOwoJc3RhdHMtPnJ4X2Vycm9ycysrOwoKCW5ldGlmX3Jl Y2VpdmVfc2tiKHNrYik7Cn0KCnN0YXRpYyBpbnQgcGNoX2Nhbl9yeF9ub3Jt YWwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvYmpfbnVtLCBpbnQg cXVvdGEpCnsKCXUzMiByZWc7CgljYW5pZF90IGlkOwoJaW50IHJjdl9wa3Rz ID0gMDsKCXN0cnVjdCBza19idWZmICpza2I7CglzdHJ1Y3QgY2FuX2ZyYW1l ICpjZjsKCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJp dihuZGV2KTsKCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICYo cHJpdi0+bmRldi0+c3RhdHMpOwoJaW50IGk7Cgl1MzIgaWQyOwoJdTE2IGRh dGFfcmVnOwoKCWRvIHsKCQkvKiBSZWFkaW5nIHRoZSBtZXNzYWdlIG9iamVj dCBmcm9tIHRoZSBNZXNzYWdlIFJBTSAqLwoJCWlvd3JpdGUzMihQQ0hfQ01B U0tfUlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNtYXNrKTsK CQlwY2hfY2FuX3J3X21zZ19vYmooJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5j cmVxLCBvYmpfbnVtKTsKCgkJLyogUmVhZGluZyB0aGUgTUNPTlQgcmVnaXN0 ZXIuICovCgkJcmVnID0gaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmcmVnc1sw XS5tY29udCk7CgoJCWlmIChyZWcgJiBQQ0hfSUZfTUNPTlRfRU9CKQoJCQli cmVhazsKCgkJLyogSWYgTXNnTG9zdCBiaXQgc2V0LiAqLwoJCWlmIChyZWcg JiBQQ0hfSUZfTUNPTlRfTVNHTE9TVCkgewoJCQlwY2hfY2FuX3J4X21zZ19s b3N0KG5kZXYsIG9ial9udW0pOwoJCQlyY3ZfcGt0cysrOwoJCQlxdW90YS0t OwoJCQlvYmpfbnVtKys7CgkJCWNvbnRpbnVlOwoJCX0gZWxzZSBpZiAoIShy ZWcgJiBQQ0hfSUZfTUNPTlRfTkVXREFUKSkgewoJCQlvYmpfbnVtKys7CgkJ CWNvbnRpbnVlOwoJCX0KCgkJc2tiID0gYWxsb2NfY2FuX3NrYihwcml2LT5u ZGV2LCAmY2YpOwoJCWlmICghc2tiKSB7CgkJCW5ldGRldl9lcnIobmRldiwg ImFsbG9jX2Nhbl9za2IgRmFpbGVkXG4iKTsKCQkJcmV0dXJuIHJjdl9wa3Rz OwoJCX0KCgkJLyogR2V0IFJlY2VpdmVkIGRhdGEgKi8KCQlpZDIgPSBpb3Jl YWQzMigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmlkMik7CgkJaWYgKGlkMiAm IFBDSF9JRDJfWFREKSB7CgkJCWlkID0gKGlvcmVhZDMyKCZwcml2LT5yZWdz LT5pZnJlZ3NbMF0uaWQxKSAmIDB4ZmZmZik7CgkJCWlkIHw9ICgoKGlkMikg JiAweDFmZmYpIDw8IDE2KTsKCQkJY2YtPmNhbl9pZCA9IGlkIHwgQ0FOX0VG Rl9GTEFHOwoJCX0gZWxzZSB7CgkJCWlkID0gKGlkMiA+PiAyKSAmIENBTl9T RkZfTUFTSzsKCQkJY2YtPmNhbl9pZCA9IGlkOwoJCX0KCgkJaWYgKGlkMiAm IFBDSF9JRDJfRElSKQoJCQljZi0+Y2FuX2lkIHw9IENBTl9SVFJfRkxBRzsK CgkJY2YtPmNhbl9kbGMgPSBnZXRfY2FuX2RsYygoaW9yZWFkMzIoJnByaXYt PnJlZ3MtPgoJCQkJCQkgICAgaWZyZWdzWzBdLm1jb250KSkgJiAweEYpOwoK CQlmb3IgKGkgPSAwOyBpIDwgY2YtPmNhbl9kbGM7IGkgKz0gMikgewoJCQlk YXRhX3JlZyA9IGlvcmVhZDE2KCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uZGF0 YVtpIC8gMl0pOwoJCQljZi0+ZGF0YVtpXSA9IGRhdGFfcmVnOwoJCQljZi0+ ZGF0YVtpICsgMV0gPSBkYXRhX3JlZyA+PiA4OwoJCX0KCgkJbmV0aWZfcmVj ZWl2ZV9za2Ioc2tiKTsKCQlyY3ZfcGt0cysrOwoJCXN0YXRzLT5yeF9wYWNr ZXRzKys7CgkJcXVvdGEtLTsKCQlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNh bl9kbGM7CgoJCXBjaF9maWZvX3RocmVzaChwcml2LCBvYmpfbnVtKTsKCQlv YmpfbnVtKys7Cgl9IHdoaWxlIChxdW90YSA+IDApOwoKCXJldHVybiByY3Zf cGt0czsKfQoKc3RhdGljIHZvaWQgcGNoX2Nhbl90eF9jb21wbGV0ZShzdHJ1 Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGludF9zdGF0KQp7CglzdHJ1Y3Qg cGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CglzdHJ1 Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmKHByaXYtPm5kZXYtPnN0 YXRzKTsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cgl1MzIgZGxjOwoKCXNwaW5f bG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CgoJY2FuX2dldF9l Y2hvX3NrYihuZGV2LCBpbnRfc3RhdCAtIFBDSF9SWF9PQkpfRU5EIC0gMSk7 Cglpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCB8IFBDSF9DTUFTS19D TFJJTlRQTkQsCgkJICAmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmNtYXNrKTsK CXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmNy ZXEsIGludF9zdGF0KTsKCWRsYyA9IGdldF9jYW5fZGxjKGlvcmVhZDMyKCZw cml2LT5yZWdzLT5pZnJlZ3NbMV0ubWNvbnQpICYKCQkJICBQQ0hfSUZfTUNP TlRfRExDKTsKCXN0YXRzLT50eF9ieXRlcyArPSBkbGM7CglzdGF0cy0+dHhf cGFja2V0cysrOwoJaWYgKGludF9zdGF0ID09IFBDSF9UWF9PQkpfRU5EKQoJ CW5ldGlmX3dha2VfcXVldWUobmRldik7CgoJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwp9CgpzdGF0aWMgaW50IHBjaF9j YW5fcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBxdW90YSkK ewoJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuYXBpLT5kZXY7CglzdHJ1 Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Cgl1 MzIgaW50X3N0YXQ7Cgl1MzIgcmVnX3N0YXQ7CglpbnQgcXVvdGFfc2F2ZSA9 IHF1b3RhOwoKCWludF9zdGF0ID0gcGNoX2Nhbl9pbnRfcGVuZGluZyhwcml2 KTsKCWlmICghaW50X3N0YXQpCgkJZ290byBlbmQ7CgoJaWYgKGludF9zdGF0 ID09IFBDSF9TVEFUVVNfSU5UKSB7CgkJcmVnX3N0YXQgPSBpb3JlYWQzMigm cHJpdi0+cmVncy0+c3RhdCk7CgoJCWlmICgocmVnX3N0YXQgJiAoUENIX0JV U19PRkYgfCBQQ0hfTEVDX0FMTCkpICYmCgkJICAgKChyZWdfc3RhdCAmIFBD SF9MRUNfQUxMKSAhPSBQQ0hfTEVDX0FMTCkpIHsKCQkJcGNoX2Nhbl9lcnJv cihuZGV2LCByZWdfc3RhdCk7CgkJCXF1b3RhLS07CgkJfQoKCQlpZiAocmVn X3N0YXQgJiAoUENIX1RYX09LIHwgUENIX1JYX09LKSkKCQkJcGNoX2Nhbl9i aXRfY2xlYXIoJnByaXYtPnJlZ3MtPnN0YXQsCgkJCQkJICByZWdfc3RhdCAm IChQQ0hfVFhfT0sgfCBQQ0hfUlhfT0spKTsKCgkJaW50X3N0YXQgPSBwY2hf Y2FuX2ludF9wZW5kaW5nKHByaXYpOwoJfQoKCWlmIChxdW90YSA9PSAwKQoJ CWdvdG8gZW5kOwoKCWlmICgoaW50X3N0YXQgPj0gUENIX1JYX09CSl9TVEFS VCkgJiYgKGludF9zdGF0IDw9IFBDSF9SWF9PQkpfRU5EKSkgewoJCXF1b3Rh IC09IHBjaF9jYW5fcnhfbm9ybWFsKG5kZXYsIGludF9zdGF0LCBxdW90YSk7 Cgl9IGVsc2UgaWYgKChpbnRfc3RhdCA+PSBQQ0hfVFhfT0JKX1NUQVJUKSAm JgoJCSAgIChpbnRfc3RhdCA8PSBQQ0hfVFhfT0JKX0VORCkpIHsKCQkvKiBI YW5kbGUgdHJhbnNtaXNzaW9uIGludGVycnVwdCAqLwoJCXBjaF9jYW5fdHhf Y29tcGxldGUobmRldiwgaW50X3N0YXQpOwoJfQoKZW5kOgoJbmFwaV9jb21w bGV0ZShuYXBpKTsKCXBjaF9jYW5fc2V0X2ludF9lbmFibGVzKHByaXYsIFBD SF9DQU5fQUxMKTsKCglyZXR1cm4gcXVvdGFfc2F2ZSAtIHF1b3RhOwp9Cgpz dGF0aWMgaW50IHBjaF9zZXRfYml0dGltaW5nKHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2KQp7CglzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2 X3ByaXYobmRldik7Cgljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQg PSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKCXUzMiBjYW5iaXQ7Cgl1MzIgYmVw ZTsKCgkvKiBTZXR0aW5nIHRoZSBDQ0UgYml0IGZvciBhY2Nlc3NpbmcgdGhl IENhbiBUaW1pbmcgcmVnaXN0ZXIuICovCglwY2hfY2FuX2JpdF9zZXQoJnBy aXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0NDRSk7CgoJY2FuYml0ID0gKGJ0 LT5icnAgLSAxKSAmIFBDSF9NU0tfQklUVF9CUlA7CgljYW5iaXQgfD0gKGJ0 LT5zancgLSAxKSA8PCBQQ0hfQklUX1NKV19TSElGVDsKCWNhbmJpdCB8PSAo YnQtPnBoYXNlX3NlZzEgKyBidC0+cHJvcF9zZWcgLSAxKSA8PCBQQ0hfQklU X1RTRUcxX1NISUZUOwoJY2FuYml0IHw9IChidC0+cGhhc2Vfc2VnMiAtIDEp IDw8IFBDSF9CSVRfVFNFRzJfU0hJRlQ7CgliZXBlID0gKChidC0+YnJwIC0g MSkgJiBQQ0hfTVNLX0JSUEVfQlJQRSkgPj4gUENIX0JJVF9CUlBFX0JSUEVf U0hJRlQ7Cglpb3dyaXRlMzIoY2FuYml0LCAmcHJpdi0+cmVncy0+Yml0dCk7 Cglpb3dyaXRlMzIoYmVwZSwgJnByaXYtPnJlZ3MtPmJycGUpOwoJcGNoX2Nh bl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0NDRSk7 CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIHBjaF9jYW5fc3RhcnQoc3Ry dWN0IG5ldF9kZXZpY2UgKm5kZXYpCnsKCXN0cnVjdCBwY2hfY2FuX3ByaXYg KnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKCglpZiAocHJpdi0+Y2FuLnN0 YXRlICE9IENBTl9TVEFURV9TVE9QUEVEKQoJCXBjaF9jYW5fcmVzZXQocHJp dik7CgoJcGNoX3NldF9iaXR0aW1pbmcobmRldik7CglwY2hfY2FuX3NldF9v cHRtb2RlKHByaXYpOwoKCXBjaF9jYW5fc2V0X3R4X2FsbChwcml2LCAxKTsK CXBjaF9jYW5fc2V0X3J4X2FsbChwcml2LCAxKTsKCgkvKiBTZXR0aW5nIHRo ZSBDQU4gdG8gcnVuIG1vZGUuICovCglwY2hfY2FuX3NldF9ydW5fbW9kZShw cml2LCBQQ0hfQ0FOX1JVTik7CgoJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NU QVRFX0VSUk9SX0FDVElWRTsKCglyZXR1cm47Cn0KCnN0YXRpYyBpbnQgcGNo X2Nhbl9kb19zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51 bSBjYW5fbW9kZSBtb2RlKQp7CglpbnQgcmV0ID0gMDsKCglzd2l0Y2ggKG1v ZGUpIHsKCWNhc2UgQ0FOX01PREVfU1RBUlQ6CgkJcGNoX2Nhbl9zdGFydChu ZGV2KTsKCQluZXRpZl93YWtlX3F1ZXVlKG5kZXYpOwoJCWJyZWFrOwoJZGVm YXVsdDoKCQlyZXQgPSAtRU9QTk9UU1VQUDsKCQlicmVhazsKCX0KCglyZXR1 cm4gcmV0Owp9CgpzdGF0aWMgaW50IHBjaF9jYW5fb3BlbihzdHJ1Y3QgbmV0 X2RldmljZSAqbmRldikKewoJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9 IG5ldGRldl9wcml2KG5kZXYpOwoJaW50IHJldHZhbDsKCgkvKiBSZWdzdGVy aW5nIHRoZSBpbnRlcnJ1cHQuICovCglyZXR2YWwgPSByZXF1ZXN0X2lycShw cml2LT5kZXYtPmlycSwgcGNoX2Nhbl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVE LAoJCQkgICAgIG5kZXYtPm5hbWUsIG5kZXYpOwoJaWYgKHJldHZhbCkgewoJ CW5ldGRldl9lcnIobmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZC5cbiIpOwoJ CWdvdG8gcmVxX2lycV9lcnI7Cgl9CgoJLyogT3BlbiBjb21tb24gY2FuIGRl dmljZSAqLwoJcmV0dmFsID0gb3Blbl9jYW5kZXYobmRldik7CglpZiAocmV0 dmFsKSB7CgkJbmV0ZGV2X2VycihuZGV2LCAib3Blbl9jYW5kZXYoKSBmYWls ZWQgJWRcbiIsIHJldHZhbCk7CgkJZ290byBlcnJfb3Blbl9jYW5kZXY7Cgl9 CgoJcGNoX2Nhbl9pbml0KHByaXYpOwoJcGNoX2Nhbl9zdGFydChuZGV2KTsK CW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKCW5ldGlmX3N0YXJ0X3F1ZXVl KG5kZXYpOwoKCXJldHVybiAwOwoKZXJyX29wZW5fY2FuZGV2OgoJZnJlZV9p cnEocHJpdi0+ZGV2LT5pcnEsIG5kZXYpOwpyZXFfaXJxX2VycjoKCXBjaF9j YW5fcmVsZWFzZShwcml2KTsKCglyZXR1cm4gcmV0dmFsOwp9CgpzdGF0aWMg aW50IHBjaF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKewoJc3Ry dWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwoK CW5ldGlmX3N0b3BfcXVldWUobmRldik7CgluYXBpX2Rpc2FibGUoJnByaXYt Pm5hcGkpOwoJcGNoX2Nhbl9yZWxlYXNlKHByaXYpOwoJZnJlZV9pcnEocHJp di0+ZGV2LT5pcnEsIG5kZXYpOwoJY2xvc2VfY2FuZGV2KG5kZXYpOwoJcHJp di0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NUT1BQRUQ7CglyZXR1cm4gMDsK fQoKc3RhdGljIG5ldGRldl90eF90IHBjaF94bWl0KHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQp7CglzdHJ1Y3QgcGNo X2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CglzdHJ1Y3Qg Y2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRh OwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCWludCB0eF9vYmpfbm87CglpbnQg aTsKCXUzMiBpZDI7CgoJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKG5k ZXYsIHNrYikpCgkJcmV0dXJuIE5FVERFVl9UWF9PSzsKCglzcGluX2xvY2tf aXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwoKCXR4X29ial9ubyA9IHBy aXYtPnR4X29iajsKCWlmIChwcml2LT50eF9vYmogPT0gUENIX1RYX09CSl9F TkQpIHsKCQkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKCgkJcHJpdi0+dHhf b2JqID0gUENIX1RYX09CSl9TVEFSVDsKCX0gZWxzZSB7CgkJcHJpdi0+dHhf b2JqKys7Cgl9CgoJLyogU2V0dGluZyB0aGUgQ01BU0sgcmVnaXN0ZXIuICov CglwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFz aywgUENIX0NNQVNLX0FMTCk7CgoJLyogSWYgSUQgZXh0ZW5kZWQgaXMgc2V0 LiAqLwoJaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpIHsKCQlpb3dy aXRlMzIoY2YtPmNhbl9pZCAmIDB4ZmZmZiwgJnByaXYtPnJlZ3MtPmlmcmVn c1sxXS5pZDEpOwoJCWlkMiA9ICgoY2YtPmNhbl9pZCA+PiAxNikgJiAweDFm ZmYpIHwgUENIX0lEMl9YVEQ7Cgl9IGVsc2UgewoJCWlvd3JpdGUzMigwLCAm cHJpdi0+cmVncy0+aWZyZWdzWzFdLmlkMSk7CgkJaWQyID0gKGNmLT5jYW5f aWQgJiBDQU5fU0ZGX01BU0spIDw8IDI7Cgl9CgoJaWQyIHw9IFBDSF9JRF9N U0dWQUw7CgoJLyogSWYgcmVtb3RlIGZyYW1lIGhhcyB0byBiZSB0cmFuc21p dHRlZC4uICovCglpZiAoIShjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkK CQlpZDIgfD0gUENIX0lEMl9ESVI7CgoJaW93cml0ZTMyKGlkMiwgJnByaXYt PnJlZ3MtPmlmcmVnc1sxXS5pZDIpOwoKCS8qIENvcHkgZGF0YSB0byByZWdp c3RlciAqLwoJZm9yIChpID0gMDsgaSA8IGNmLT5jYW5fZGxjOyBpICs9IDIp IHsKCQlpb3dyaXRlMTYoY2YtPmRhdGFbaV0gfCAoY2YtPmRhdGFbaSArIDFd IDw8IDgpLAoJCQkgICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uZGF0YVtpIC8g Ml0pOwoJfQoKCWNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9vYmpf bm8gLSBQQ0hfUlhfT0JKX0VORCAtIDEpOwoKCS8qIFNldCB0aGUgc2l6ZSBv ZiB0aGUgZGF0YS4gVXBkYXRlIGlmMl9tY29udCAqLwoJaW93cml0ZTMyKGNm LT5jYW5fZGxjIHwgUENIX0lGX01DT05UX05FV0RBVCB8IFBDSF9JRl9NQ09O VF9UWFJRWFQgfAoJCSAgUENIX0lGX01DT05UX1RYSUUsICZwcml2LT5yZWdz LT5pZnJlZ3NbMV0ubWNvbnQpOwoKCXBjaF9jYW5fcndfbXNnX29iaigmcHJp di0+cmVncy0+aWZyZWdzWzFdLmNyZXEsIHR4X29ial9ubyk7CgogICAgc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwoKCXJl dHVybiBORVRERVZfVFhfT0s7Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0 X2RldmljZV9vcHMgcGNoX2Nhbl9uZXRkZXZfb3BzID0gewoJLm5kb19vcGVu CQk9IHBjaF9jYW5fb3BlbiwKCS5uZG9fc3RvcAkJPSBwY2hfY2xvc2UsCgku bmRvX3N0YXJ0X3htaXQJCT0gcGNoX3htaXQsCn07CgpzdGF0aWMgdm9pZCBf X2RldmV4aXQgcGNoX2Nhbl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYp CnsKCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRh KHBkZXYpOwoJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9w cml2KG5kZXYpOwoKCXVucmVnaXN0ZXJfY2FuZGV2KHByaXYtPm5kZXYpOwoJ aWYgKHByaXYtPnVzZV9tc2kpCgkJcGNpX2Rpc2FibGVfbXNpKHByaXYtPmRl dik7CglwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwoJcGNpX2Rpc2FibGVf ZGV2aWNlKHBkZXYpOwoJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwoJ cGNoX2Nhbl9yZXNldChwcml2KTsKCXBjaV9pb3VubWFwKHBkZXYsIHByaXYt PnJlZ3MpOwoJZnJlZV9jYW5kZXYocHJpdi0+bmRldik7Cn0KCiNpZmRlZiBD T05GSUdfUE0Kc3RhdGljIHZvaWQgcGNoX2Nhbl9zZXRfaW50X2N1c3RvbShz dHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2KQp7CgkvKiBDbGVhcmluZyB0aGUg SUUsIFNJRSBhbmQgRUlFIGJpdHMgb2YgQ2FuIGNvbnRyb2wgcmVnaXN0ZXIu ICovCglwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+Y29udCwgUENI X0NUUkxfSUVfU0lFX0VJRSk7CgoJLyogQXBwcm9wcmlhdGVseSBzZXR0aW5n IHRoZW0uICovCglwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmNvbnQs CgkJCSgocHJpdi0+aW50X2VuYWJsZXMgJiBQQ0hfTVNLX0NUUkxfSUVfU0lF X0VJRSkgPDwgMSkpOwp9CgovKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBp bnRlcnJ1cHQgZW5hYmxlZCBmb3IgdGhlIENBTiBkZXZpY2UuICovCnN0YXRp YyB1MzIgcGNoX2Nhbl9nZXRfaW50X2VuYWJsZXMoc3RydWN0IHBjaF9jYW5f cHJpdiAqcHJpdikKewoJLyogT2J0YWluaW5nIHRoZSBzdGF0dXMgb2YgSUUs IFNJRSBhbmQgRUlFIGludGVycnVwdCBiaXRzLiAqLwoJcmV0dXJuIChpb3Jl YWQzMigmcHJpdi0+cmVncy0+Y29udCkgJiBQQ0hfQ1RSTF9JRV9TSUVfRUlF KSA+PiAxOwp9CgpzdGF0aWMgdTMyIHBjaF9jYW5fZ2V0X3J4dHhfaXIoc3Ry dWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgdTMyIGJ1ZmZfbnVtLAoJCQkgICAg ICAgZW51bSBwY2hfaWZyZWcgZGlyKQp7Cgl1MzIgaWUsIGVuYWJsZTsKCglp ZiAoZGlyKQoJCWllID0gUENIX0lGX01DT05UX1JYSUU7CgllbHNlCgkJaWUg PSBQQ0hfSUZfTUNPTlRfVFhJRTsKCglpb3dyaXRlMzIoUENIX0NNQVNLX1JY X1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmcmVnc1tkaXJdLmNtYXNrKTsKCXBj aF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uY3Jl cSwgYnVmZl9udW0pOwoKCWlmICgoKGlvcmVhZDMyKCZwcml2LT5yZWdzLT5p ZnJlZ3NbZGlyXS5pZDIpKSAmIFBDSF9JRF9NU0dWQUwpICYmCgkJCSgoaW9y ZWFkMzIoJnByaXYtPnJlZ3MtPmlmcmVnc1tkaXJdLm1jb250KSkgJiBpZSkp CgkJZW5hYmxlID0gMTsKCWVsc2UKCQllbmFibGUgPSAwOwoKCXJldHVybiBl bmFibGU7Cn0KCnN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3J4X2J1ZmZlcl9s aW5rKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsCgkJCQkgICAgICAgdTMy IGJ1ZmZlcl9udW0sIGludCBzZXQpCnsKCWlvd3JpdGUzMihQQ0hfQ01BU0tf UlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNtYXNrKTsKCXBj aF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEs IGJ1ZmZlcl9udW0pOwoJaW93cml0ZTMyKFBDSF9DTUFTS19SRFdSIHwgUENI X0NNQVNLX0NUUkwsCgkJICAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNtYXNr KTsKCWlmIChzZXQpCgkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3Mt PmlmcmVnc1swXS5tY29udCwKCQkJCSAgUENIX0lGX01DT05UX0VPQik7Cgll bHNlCgkJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0u bWNvbnQsIFBDSF9JRl9NQ09OVF9FT0IpOwoKCXBjaF9jYW5fcndfbXNnX29i aigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIGJ1ZmZlcl9udW0pOwp9 CgpzdGF0aWMgdTMyIHBjaF9jYW5fZ2V0X3J4X2J1ZmZlcl9saW5rKHN0cnVj dCBwY2hfY2FuX3ByaXYgKnByaXYsIHUzMiBidWZmZXJfbnVtKQp7Cgl1MzIg bGluazsKCglpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYt PnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CglwY2hfY2FuX3J3X21zZ19vYmoo JnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jcmVxLCBidWZmZXJfbnVtKTsKCglp ZiAoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29udCkgJiBQ Q0hfSUZfTUNPTlRfRU9CKQoJCWxpbmsgPSAwOwoJZWxzZQoJCWxpbmsgPSAx OwoJcmV0dXJuIGxpbms7Cn0KCnN0YXRpYyBpbnQgcGNoX2Nhbl9nZXRfYnVm ZmVyX3N0YXR1cyhzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2KQp7CglyZXR1 cm4gKGlvcmVhZDMyKCZwcml2LT5yZWdzLT50cmVxMSkgJiAweGZmZmYpIHwK CSAgICAgICAoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPnRyZXEyKSA8PCAxNik7 Cn0KCnN0YXRpYyBpbnQgcGNoX2Nhbl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCnsKCWludCBpOwoJaW50IHJl dHZhbDsKCXUzMiBidWZfc3RhdDsJLyogVmFyaWFibGUgZm9yIHJlYWRpbmcg dGhlIHRyYW5zbWl0IGJ1ZmZlciBzdGF0dXMuICovCglpbnQgY291bnRlciA9 IFBDSF9DT1VOVEVSX0xJTUlUOwoKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYg PSBwY2lfZ2V0X2RydmRhdGEocGRldik7CglzdHJ1Y3QgcGNoX2Nhbl9wcml2 ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKCgkvKiBTdG9wIHRoZSBDQU4g Y29udHJvbGxlciAqLwoJcGNoX2Nhbl9zZXRfcnVuX21vZGUocHJpdiwgUENI X0NBTl9TVE9QKTsKCgkvKiBJbmRpY2F0ZSB0aGF0IHdlIGFyZSBhYm91dHRv L2luIHN1c3BlbmQgKi8KCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9T VE9QUEVEOwoKCS8qIFdhaXRpbmcgZm9yIGFsbCB0cmFuc21pc3Npb24gdG8g Y29tcGxldGUuICovCgl3aGlsZSAoY291bnRlcikgewoJCWJ1Zl9zdGF0ID0g cGNoX2Nhbl9nZXRfYnVmZmVyX3N0YXR1cyhwcml2KTsKCQlpZiAoIWJ1Zl9z dGF0KQoJCQlicmVhazsKCQljb3VudGVyLS07CgkJdWRlbGF5KDEpOwoJfQoJ aWYgKCFjb3VudGVyKQoJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIC0+IFRy YW5zbWlzc2lvbiB0aW1lIG91dC5cbiIsIF9fZnVuY19fKTsKCgkvKiBTYXZl IGludGVycnVwdCBjb25maWd1cmF0aW9uIGFuZCB0aGVuIGRpc2FibGUgdGhl bSAqLwoJcHJpdi0+aW50X2VuYWJsZXMgPSBwY2hfY2FuX2dldF9pbnRfZW5h Ymxlcyhwcml2KTsKCXBjaF9jYW5fc2V0X2ludF9lbmFibGVzKHByaXYsIFBD SF9DQU5fRElTQUJMRSk7CgoJLyogU2F2ZSBUeCBidWZmZXIgZW5hYmxlIHN0 YXRlICovCglmb3IgKGkgPSBQQ0hfVFhfT0JKX1NUQVJUOyBpIDw9IFBDSF9U WF9PQkpfRU5EOyBpKyspCgkJcHJpdi0+dHhfZW5hYmxlW2kgLSAxXSA9IHBj aF9jYW5fZ2V0X3J4dHhfaXIocHJpdiwgaSwKCQkJCQkJCSAgICAgUENIX1RY X0lGUkVHKTsKCgkvKiBEaXNhYmxlIGFsbCBUcmFuc21pdCBidWZmZXJzICov CglwY2hfY2FuX3NldF90eF9hbGwocHJpdiwgMCk7CgoJLyogU2F2ZSBSeCBi dWZmZXIgZW5hYmxlIHN0YXRlICovCglmb3IgKGkgPSBQQ0hfUlhfT0JKX1NU QVJUOyBpIDw9IFBDSF9SWF9PQkpfRU5EOyBpKyspIHsKCQlwcml2LT5yeF9l bmFibGVbaSAtIDFdID0gcGNoX2Nhbl9nZXRfcnh0eF9pcihwcml2LCBpLAoJ CQkJCQkJICAgICBQQ0hfUlhfSUZSRUcpOwoJCXByaXYtPnJ4X2xpbmtbaSAt IDFdID0gcGNoX2Nhbl9nZXRfcnhfYnVmZmVyX2xpbmsocHJpdiwgaSk7Cgl9 CgoJLyogRGlzYWJsZSBhbGwgUmVjZWl2ZSBidWZmZXJzICovCglwY2hfY2Fu X3NldF9yeF9hbGwocHJpdiwgMCk7CglyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0 ZShwZGV2KTsKCWlmIChyZXR2YWwpIHsKCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQuXG4iKTsKCX0gZWxzZSB7CgkJcGNp X2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CgkJcGNpX2Rpc2Fi bGVfZGV2aWNlKHBkZXYpOwoJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwg cGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwoJfQoKCXJldHVybiBy ZXR2YWw7Cn0KCnN0YXRpYyBpbnQgcGNoX2Nhbl9yZXN1bWUoc3RydWN0IHBj aV9kZXYgKnBkZXYpCnsKCWludCBpOwoJaW50IHJldHZhbDsKCXN0cnVjdCBu ZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CglzdHJ1 Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKCglw Y2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CglwY2lfcmVzdG9y ZV9zdGF0ZShwZGV2KTsKCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBk ZXYpOwoJaWYgKHJldHZhbCkgewoJCWRldl9lcnIoJnBkZXYtPmRldiwgInBj aV9lbmFibGVfZGV2aWNlIGZhaWxlZC5cbiIpOwoJCXJldHVybiByZXR2YWw7 Cgl9CgoJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CgoJ cHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKCgkv KiBEaXNhYmxpbmcgYWxsIGludGVycnVwdHMuICovCglwY2hfY2FuX3NldF9p bnRfZW5hYmxlcyhwcml2LCBQQ0hfQ0FOX0RJU0FCTEUpOwoKCS8qIFNldHRp bmcgdGhlIENBTiBkZXZpY2UgaW4gU3RvcCBNb2RlLiAqLwoJcGNoX2Nhbl9z ZXRfcnVuX21vZGUocHJpdiwgUENIX0NBTl9TVE9QKTsKCgkvKiBDb25maWd1 cmluZyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVycy4gKi8KCXBj aF9jYW5fY29uZmlnX3J4X3R4X2J1ZmZlcnMocHJpdik7CgoJLyogUmVzdG9y ZSB0aGUgQ0FOIHN0YXRlICovCglwY2hfc2V0X2JpdHRpbWluZyhkZXYpOwoK CS8qIExpc3Rlbi9BY3RpdmUgKi8KCXBjaF9jYW5fc2V0X29wdG1vZGUocHJp dik7CgoJLyogRW5hYmxpbmcgdGhlIHRyYW5zbWl0IGJ1ZmZlci4gKi8KCWZv ciAoaSA9IFBDSF9UWF9PQkpfU1RBUlQ7IGkgPD0gUENIX1RYX09CSl9FTkQ7 IGkrKykKCQlwY2hfY2FuX3NldF9yeHR4KHByaXYsIGksIHByaXYtPnR4X2Vu YWJsZVtpIC0gMV0sIFBDSF9UWF9JRlJFRyk7CgoJLyogQ29uZmlndXJpbmcg dGhlIHJlY2VpdmUgYnVmZmVyIGFuZCBlbmFibGluZyB0aGVtLiAqLwoJZm9y IChpID0gUENIX1JYX09CSl9TVEFSVDsgaSA8PSBQQ0hfUlhfT0JKX0VORDsg aSsrKSB7CgkJLyogUmVzdG9yZSBidWZmZXIgbGluayAqLwoJCXBjaF9jYW5f c2V0X3J4X2J1ZmZlcl9saW5rKHByaXYsIGksIHByaXYtPnJ4X2xpbmtbaSAt IDFdKTsKCgkJLyogUmVzdG9yZSBidWZmZXIgZW5hYmxlcyAqLwoJCXBjaF9j YW5fc2V0X3J4dHgocHJpdiwgaSwgcHJpdi0+cnhfZW5hYmxlW2kgLSAxXSwg UENIX1JYX0lGUkVHKTsKCX0KCgkvKiBFbmFibGUgQ0FOIEludGVycnVwdHMg Ki8KCXBjaF9jYW5fc2V0X2ludF9jdXN0b20ocHJpdik7CgoJLyogUmVzdG9y ZSBSdW4gTW9kZSAqLwoJcGNoX2Nhbl9zZXRfcnVuX21vZGUocHJpdiwgUENI X0NBTl9SVU4pOwoKCXJldHVybiByZXR2YWw7Cn0KI2Vsc2UKI2RlZmluZSBw Y2hfY2FuX3N1c3BlbmQgTlVMTAojZGVmaW5lIHBjaF9jYW5fcmVzdW1lIE5V TEwKI2VuZGlmCgpzdGF0aWMgaW50IHBjaF9jYW5fZ2V0X2JlcnJfY291bnRl cihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkJICAgIHN0cnVj dCBjYW5fYmVycl9jb3VudGVyICpiZWMpCnsKCXN0cnVjdCBwY2hfY2FuX3By aXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwoJdTMyIGVycmMgPSBpb3Jl YWQzMigmcHJpdi0+cmVncy0+ZXJyYyk7CgoJYmVjLT50eGVyciA9IGVycmMg JiBQQ0hfVEVDOwoJYmVjLT5yeGVyciA9IChlcnJjICYgUENIX1JFQykgPj4g ODsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBfX2RldmluaXQgcGNoX2Nh bl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKCQkJCSAgIGNvbnN0IHN0 cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKewoJc3RydWN0IG5ldF9kZXZpY2Ug Km5kZXY7CglzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2OwoJaW50IHJjOwoJ dm9pZCBfX2lvbWVtICphZGRyOwoKCXJjID0gcGNpX2VuYWJsZV9kZXZpY2Uo cGRldik7CglpZiAocmMpIHsKCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWls ZWQgcGNpX2VuYWJsZV9kZXZpY2UgJWRcbiIsIHJjKTsKCQlnb3RvIHByb2Jl X2V4aXRfZW5kZXY7Cgl9CgoJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBk ZXYsIEtCVUlMRF9NT0ROQU1FKTsKCWlmIChyYykgewoJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkZhaWxlZCBwY2lfcmVxdWVzdF9yZWdpb25zICVkXG4iLCBy Yyk7CgkJZ290byBwcm9iZV9leGl0X3BjaXJlcTsKCX0KCglhZGRyID0gcGNp X2lvbWFwKHBkZXYsIDEsIDApOwoJaWYgKCFhZGRyKSB7CgkJcmMgPSAtRUlP OwoJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCBwY2lfaW9tYXBcbiIp OwoJCWdvdG8gcHJvYmVfZXhpdF9pcG1hcDsKCX0KCgluZGV2ID0gYWxsb2Nf Y2FuZGV2KHNpemVvZihzdHJ1Y3QgcGNoX2Nhbl9wcml2KSwgUENIX1RYX09C Sl9FTkQpOwoJaWYgKCFuZGV2KSB7CgkJcmMgPSAtRU5PTUVNOwoJCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCBhbGxvY19jYW5kZXZcbiIpOwoJCWdv dG8gcHJvYmVfZXhpdF9hbGxvY19jYW5kZXY7Cgl9CgoJcHJpdiA9IG5ldGRl dl9wcml2KG5kZXYpOwoJcHJpdi0+bmRldiA9IG5kZXY7Cglwcml2LT5yZWdz ID0gYWRkcjsKCXByaXYtPmRldiA9IHBkZXY7Cglwcml2LT5jYW4uYml0dGlt aW5nX2NvbnN0ID0gJnBjaF9jYW5fYml0dGltaW5nX2NvbnN0OwoJcHJpdi0+ Y2FuLmRvX3NldF9tb2RlID0gcGNoX2Nhbl9kb19zZXRfbW9kZTsKCXByaXYt PmNhbi5kb19nZXRfYmVycl9jb3VudGVyID0gcGNoX2Nhbl9nZXRfYmVycl9j b3VudGVyOwoJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9D VFJMTU9ERV9MSVNURU5PTkxZIHwKCQkJCSAgICAgICBDQU5fQ1RSTE1PREVf TE9PUEJBQ0s7Cglwcml2LT50eF9vYmogPSBQQ0hfVFhfT0JKX1NUQVJUOyAv KiBQb2ludCBoZWFkIG9mIFR4IE9iaiAqLwoKCW5kZXYtPmlycSA9IHBkZXYt PmlycTsKCW5kZXYtPmZsYWdzIHw9IElGRl9FQ0hPOwoKCXBjaV9zZXRfZHJ2 ZGF0YShwZGV2LCBuZGV2KTsKCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2 LT5kZXYpOwoJbmRldi0+bmV0ZGV2X29wcyA9ICZwY2hfY2FuX25ldGRldl9v cHM7Cglwcml2LT5jYW4uY2xvY2suZnJlcSA9IFBDSF9DQU5fQ0xLOyAvKiBI eiAqLwoKCW5ldGlmX25hcGlfYWRkKG5kZXYsICZwcml2LT5uYXBpLCBwY2hf Y2FuX3BvbGwsIFBDSF9SWF9PQkpfRU5EKTsKCglyYyA9IHBjaV9lbmFibGVf bXNpKHByaXYtPmRldik7CglpZiAocmMpIHsKCQluZXRkZXZfZXJyKG5kZXYs ICJQQ0ggQ0FOIG9wZW5lZCB3aXRob3V0IE1TSVxuIik7CgkJcHJpdi0+dXNl X21zaSA9IDA7Cgl9IGVsc2UgewoJCW5ldGRldl9lcnIobmRldiwgIlBDSCBD QU4gb3BlbmVkIHdpdGggTVNJXG4iKTsKCQlwY2lfc2V0X21hc3RlcihwZGV2 KTsKCQlwcml2LT51c2VfbXNpID0gMTsKCX0KCglyYyA9IHJlZ2lzdGVyX2Nh bmRldihuZGV2KTsKCWlmIChyYykgewoJCWRldl9lcnIoJnBkZXYtPmRldiwg IkZhaWxlZCByZWdpc3Rlcl9jYW5kZXYgJWRcbiIsIHJjKTsKCQlnb3RvIHBy b2JlX2V4aXRfcmVnX2NhbmRldjsKCX0KCglyZXR1cm4gMDsKCnByb2JlX2V4 aXRfcmVnX2NhbmRldjoKCWlmIChwcml2LT51c2VfbXNpKQoJCXBjaV9kaXNh YmxlX21zaShwcml2LT5kZXYpOwoJZnJlZV9jYW5kZXYobmRldik7CnByb2Jl X2V4aXRfYWxsb2NfY2FuZGV2OgoJcGNpX2lvdW5tYXAocGRldiwgYWRkcik7 CnByb2JlX2V4aXRfaXBtYXA6CglwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYp Owpwcm9iZV9leGl0X3BjaXJlcToKCXBjaV9kaXNhYmxlX2RldmljZShwZGV2 KTsKcHJvYmVfZXhpdF9lbmRldjoKCXJldHVybiByYzsKfQoKc3RhdGljIHN0 cnVjdCBwY2lfZHJpdmVyIHBjaF9jYW5fcGNpX2RyaXZlciA9IHsKCS5uYW1l ID0gInBjaF9jYW4iLAoJLmlkX3RhYmxlID0gcGNoX3BjaV90YmwsCgkucHJv YmUgPSBwY2hfY2FuX3Byb2JlLAoJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBj aF9jYW5fcmVtb3ZlKSwKCS5zdXNwZW5kID0gcGNoX2Nhbl9zdXNwZW5kLAoJ LnJlc3VtZSA9IHBjaF9jYW5fcmVzdW1lLAp9OwoKbW9kdWxlX3BjaV9kcml2 ZXIocGNoX2Nhbl9wY2lfZHJpdmVyKTsKCk1PRFVMRV9ERVNDUklQVElPTigi SW50ZWwgRUcyMFQgUENIIENBTihDb250cm9sbGVyIEFyZWEgTmV0d29yaykg RHJpdmVyIik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKTU9EVUxFX1ZF UlNJT04oIjAuOTQiKTsK ------------=_1366884679-12060-10--