From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pallai Roland Subject: [PATCH] proactive raid5 disk replacement for 2.6.11, updated Date: Thu, 18 Aug 2005 01:52:10 +0200 Message-ID: <1124322731.3810.77.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-qUfi0mPUCbSVjUIavgzS" Return-path: Sender: linux-raid-owner@vger.kernel.org To: linux-raid@vger.kernel.org List-Id: linux-raid.ids --=-qUfi0mPUCbSVjUIavgzS Content-Type: text/plain Content-Transfer-Encoding: 7bit per-device bad block cache has been implemented to speed up arrays with partially failed drives (replies are often slow from those). also helps to determine badly damaged drives based on number of bad blocks, and can take an action if steps over an user defined threshold (see /proc/sys/dev/raid/badblock_tolerance). rewrite of a bad stripe will delete the entry from the cache, so it honors the auto sector reallocation feature of ATA drives performance is affected just a little bit if there's no or some registered bad blocks, but over a million that could be a problem currently, I'll examine it later.. if we've a spare and a drive had kicked, that spare becomes to 'active spare', sync begins, but the original (failed) drive won't be kicked until the sync will not have finished. if the original drive still drops errors after had been synced, the in_sync spare replaces that online otherwise you can do it manually (mdadm -f) you can check the list of registered bad sectors in /proc/mdstat (in debug mode), and the size of the cache with: grep _bbc /proc/slabinfo please let me know if you're interested in, otherwise I'll not flood the list with this topic.. my /proc/mdstat now: md0 : active raid5 ram4[2] md2[1] md1[0] 8064 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] known bad sectors on active devices: ram4 md2 md1 56 136 232 472 600 872 1176 1248 1336 1568 1688 1952 2104 md2 : active faulty ram1[0] 4096 blocks nfaults=0 md1 : active faulty ram0[0] 4096 blocks ReadPersistent=92(100) nfaults=13 -- dap --=-qUfi0mPUCbSVjUIavgzS Content-Disposition: attachment; filename=04_raid5-asp-dap3.diff Content-Type: text/x-patch; name=04_raid5-asp-dap3.diff; charset=ISO-8859-2 Content-Transfer-Encoding: base64 DQogdGhpcyBpcyBhIGZlYXR1cmUgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzICdwcm9hY3RpdmUgcmFp ZDUgZGlzaw0KcmVwbGFjZW1lbnQnIChodHRwOi8vd3d3LmFyY3RpYy5vcmcvfmRlYW4vcmFpZC13 aXNobGlzdC5odG1sKSwNCnRoYXQgY291bGQgaGVscCBhIGxvdCBvbiBsYXJnZSByYWlkNSBhcnJh eXMgYnVpbHQgZnJvbSBjaGVhcCBzYXRhDQpkcml2ZXJzIHdoZW4gdGhlIElPIHRyYWZmaWMgc3Vj aCBsYXJnZSB0aGF0IGRhaWx5IG1lZGlhIHNjYW4gb24gdGhlDQpkaXNrcyBpc24ndCBwb3NzaWJs ZS4NCiBsaW51eCBzb2Z0d2FyZSByYWlkIGlzIHZlcnkgZnJhZ2lsZSBieSBkZWZhdWx0LCB0aGUg dHlwaWNhbCAobmVydm91cykNCmJyZWFrZG93biBzaXR1YXRpb246IEkgbm90aWNlZCBhIGJhZCBi bG9jayBvbiBhIGRyaXZlLCByZXBsYWNlIGl0LA0KYW5kIHRoZSByZXN5bmMgZmFpbHMgY2F1c2Ug YW5vdGhlciAyLTMgZGlza3MgaGFzIGhpZGRlbiBiYWRibG9ja3MgdG9vLg0KSSd2ZSB0byBzYXZl IHRoZSBkaXNrcyBhbmQgcmVidWlsZCBiYWQgYmxvY2tzIHdpdGggYSB1c2Vyc3BhY2UgdG9vbCAo YnkNCmhhbmQuLiksIG1lYW53aGlsZSB0aGUgc2l0ZSBpcyBkb3duIGZvciBob3Vycy4gYmFkOyBl c3BlY2lhbGx5IHdoZW4gYQ0KcGFpciBvZiBzaW1wbGUgc3RlcHMgZW5vdWdoIHRvIGF2b2lkIGZy b20gdGhpcyBhdHlwaWNhbCBwcm9ibGVtOg0KIDEuIGRvbnQga2ljayBhIGRyaXZlIG9uIHJlYWQg ZXJyb3IgY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCA5OS45OSUgaXMNCnVzZWFibGUgYW5kIHdp bGwgaGVscCAodG8gc2VydmUgYW5kIHRvIHNhdmUgZGF0YSkgaWYgYW5vdGhlciBkcml2ZSBzaG93 DQpiYWQgc2VjdG9ycyBpbiBzYW1lIGFycmF5DQogMi4gbGV0IHRvIG1pcnJvciBhIHBhcnRpYWxs eSBmYWlsZWQgZHJpdmUgdG8gYSBzcGFyZSBfb25saW5lXyBhbmQgcmVwbGFjZQ0KdGhlIHNvdXJj ZSBvZiB0aGUgbWlycm9yIHdpdGggdGhlIHNwYXJlIHdoZW4gaXQncyBkb25lLiBiYWQgYmxvY2tz IGlzbid0DQphIHByb2JsZW0gdW5sZXNzIHNhbWUgc2VjdG9yIGRhbWFnZWQgb24gdHdvIGRpc2tz IHdoYXQncyBhIHJhcmUgY2FzZS4gaW4NCnRoaXMgd2F5IGlzIHBvc3NpYmxlIHRvIGZpeCBhbiBh cnJheSB3aXRoIHBhcnRpYWxseSBmYWlsZWQgZHJpdmVzDQp3aXRob3V0IGRhdGEgbG9zcyBhbmQg d2l0aG91dCBkb3dudGltZQ0KDQogSSdtIG5vdCBhIHByb2dyYW1tZXIganVzdCBhIHN5c2FkbSB3 aG8gYWRtaW5zIGEgbGFyZ2Ugc29mdHdhcmUgc2F0YQ0KYXJyYXksIGJ1dCBteSBhbmdyeSBnb3Qg YmlnZ2VyIHRoYW4gbXkgbGF6aW5lc3MsIHNvIEkgbWFkZSB0aGlzIHBhdGNoIG9uDQp0aGlzIHdl ZWtlbmQuLiBJIGRvbid0IHVuZGVyc3RhbmQgZXZlcnkgcGllY2Ugb2YgdGhlIG1kIGNvZGUgKGVn LiB0aGUNCmlmLWZvcmVzdCBvZiB0aGUgaGFuZGxlX3N0cmlwZSA6KSB5ZXQsIHNvIHRoaXMgcGF0 Y2ggbWF5IGJlIGEgYnVnLWNvbG9ueQ0KYW5kIHdyb25nIGJ5IGRlc2lnbiwgYnV0IEkndmUgdGVz dGVkIGl0IHVuZGVyIGhlYXZ5IHN0cmVzcyB3aXRoIGJvdGggb2YNCidmYXVsdHknIG1vZHVsZSBh bmQgcmVhbCBkaXNrcywgYW5kIGl0IHdvcmtzIGZpbmUhDQoNCiBpZGVhcywgcGllY2Ugb2YgYWR2 aWNlLCBidWdmaXgvZW5jaGFuY2VtZW50IGlzIHdlbGNvbWVkIQ0KDQoNCiAoSSBrbm93LCByYWlk NiBjb3VsZCBiZSBhbm90aGVyIHNvbHV0aW9uIGZvciB0aGlzIHByb2JsZW0sIGJ1dCB0aGF0J3Mg YQ0KbGFyZ2Ugb3ZlcmhlYWQuKQ0KDQoNCnVzZToNCg0KMS4gcGF0Y2ggdGhlIGtlcm5lbCwgdGhp cyBvbmUgaXMgYWdhaW5zdCAyLjYuMTENCjIuIHR5cGU6DQoNCiMgbWFrZSBkcml2ZXMNCm1kYWRt IC1CIC1uMSAtbCBmYXVsdHkgL2Rldi9tZC8xIC9kZXYvcmQvMA0KbWRhZG0gLUIgLW4xIC1sIGZh dWx0eSAvZGV2L21kLzIgL2Rldi9yZC8xDQptZGFkbSAtQiAtbjEgLWwgZmF1bHR5IC9kZXYvbWQv MyAvZGV2L3JkLzINCg0KIyBtYWtlIHRoZSBhcnJheQ0KbWRhZG0gLUMgLW4zIC1sNSAvZGV2L21k LzAgL2Rldi9tZC8xIC9kZXYvbWQvMiAvZGV2L21kLzMNCg0KIyAuLiB3YWl0IGZvciBzeW5jIC4u DQoNCiMgZ3JvdyBiYWQgYmxvY2tzIGFzIG1hKnRvciBkb2VzDQptZGFkbSAtLWdyb3cgLWwgZmF1 bHR5IC1wIHJwNDU0IC9kZXYvbWQvMQ0KbWRhZG0gLS1ncm93IC1sIGZhdWx0eSAtcCBycDczOCAv ZGV2L21kLzINCg0KIyBhZGQgYSBzcGFyZQ0KbWRhZG0gLWEgL2Rldi9tZC8wIC9kZXYvcmQvNA0K DQojIC0+IGZhaWwgYSBkcml2ZSwgc3luYyBiZWdpbnMgPC0NCiMgIHRoZSBtZC8xIHdpbGwgbm90 IG1hcmtlZCBhcyBmYWlsZWQsIHRoaXMgaXMgdGhlIHBvaW50LCBidXQgaWYgeW91IHdhbnQgdG8s DQojICB5b3UgY2FuIGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiENCm1kYWRtIC1mIC9kZXYvbWQv MCAvZGV2L21kLzENCg0KIyBrZXJuZWw6DQojICByZXN5bmMgZnJvbSBtZDEgdG8gc3BhcmUgcmFt NA0KIyAgYWRkZWQgc3BhcmUgZm9yIGFjdGl2ZSByZXN5bmMNCg0KIyAuLiB3b25kZXIgdGhlIHJl YWQgZXJyb3JzIGZyb20gbWRbMTJdIGFuZCB0aGUgc3luYyBnb2VzIG9uIQ0KIyBmZWVsIGZyZWUg dG8gc3RyZXNzIHRoZSBtZCBhdCB0aGlzIHRpbWUsIG1rZnMsIGRkLCBiYWRibG9ja3MsIGV0Yw0K DQojIGtlcm5lbDoNCiMgIHJhaWQ1X3NwYXJlX2FjdGl2ZTogMyBpbl9zeW5jIDMtPjANCiMgL3By b2MvbWRzdGF0Og0KIyAgbWQwIDogYWN0aXZlIHJhaWQ1IHJhbTRbMF0gbWQzWzJdIG1kMlsxXSBt ZDFbMF0NCiMgLT4gcmFtNCBhbmQgbWQxIGhhcyBzYW1lIGlkLCB0aGlzIG1lYW5zIHRoZSBzcGFy ZSBpcyBhIGNvbXBsZXRlIG1pcnJvciwNCiMgICAgICAgaWYgeW91IHN0b3AgdGhlIGFycmF5IHlv dSBjYW4gYXNzZW1ibHkgaXQgd2l0aCByYW00IGluc3RlYWQgb2YgbWQxLA0KIyAgICAgICB0aGUg c3VwZXJibG9jayBzYW1lIGJvdGggb2YgdGhlbQ0KDQojIGNoZWNrIHRoZSBtaXJyb3IgKHN0b3Ag d3JpdGUgc3RyZXNzIGlmIGFueSkNCm1kYWRtIC0tZ3JvdyAtbCBmYXVsdHkgLXAgbm9uZSAvZGV2 L21kLzENCmNtcCAvZGV2L21kLzEgL2Rldi9yZC80DQoNCiMgaG90LXJlcGxhY2UgdGhlIG1pcnJv cmVkIC1wYXJ0aWFsbHkgZmFpbGVkLSBkZXZpY2Ugd2l0aCB0aGUgYWN0aXZlIHNwYXJlDQojICAo eWVzLCBtYXJrIGl0IGFzIGZhaWxlZCBhZ2FpbiwgYnV0IGlmIHRoZXJlJ3MgYSBzeW5jaW5nLSBv ciBzeW5jZWQgJ2FjdGl2ZSBzcGFyZScNCiMgICAgICAgdGhlIC1mIHJlYWxseSBmYWlscyB0aGUg ZGV2aWNlIG9yIHJlcGxhY2UgaXQgd2l0aCB0aGUgc3luY2VkIHNwYXJlKQ0KbWRhZG0gLWYgL2Rl di9tZC8wIC9kZXYvbWQvMQ0KDQojIGtlcm5lbDoNCiMgIHJlcGxhY2UgbWQxIHdpdGggaW5fc3lu YyBhY3RpdmUgc3BhcmUgcmFtNA0KDQojIGFuZCB2b2lsYSENCiMgL3Byb2MvbWRzdGF0Og0KIyAg bWQwIDogYWN0aXZlIHJhaWQ1IHJhbTRbMF0gbWQzWzJdIG1kMlsxXQ0KDQoNCnVwZGF0ZToNCg0K IHBlci1kZXZpY2UgYmFkIGJsb2NrIGNhY2hlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRvIHNwZWVk IHVwIGFycmF5cyB3aXRoDQpwYXJ0aWFsbHkgZmFpbGVkIGRyaXZlcyAocmVwbGllcyBhcmUgb2Z0 ZW4gc2xvdyBmcm9tIHRob3NlKS4gYWxzbw0KaGVscHMgdG8gZGV0ZXJtaW5lIGJhZGx5IGRhbWFn ZWQgZHJpdmVzIGJhc2VkIG9uIG51bWJlciBvZiBiYWQgYmxvY2tzLA0KYW5kIGNhbiB0YWtlIGFu IGFjdGlvbiBpZiBzdGVwcyBvdmVyIGFuIHVzZXIgZGVmaW5lZCB0aHJlc2hvbGQNCihzZWUgL3By b2Mvc3lzL2Rldi9yYWlkL2JhZGJsb2NrX3RvbGVyYW5jZSkuDQpyZXdyaXRlIG9mIGEgYmFkIHN0 cmlwZSB3aWxsIGRlbGV0ZSB0aGUgZW50cnkgZnJvbSB0aGUgY2FjaGUsIHNvIGl0IGhvbm9ycw0K dGhlIGF1dG8gc2VjdG9yIHJlYWxsb2NhdGlvbiBmZWF0dXJlIG9mIEFUQSBkcml2ZXMNCg0KIHBl cmZvcm1hbmNlIGlzIGFmZmVjdGVkIGp1c3QgYSBsaXR0bGUgYml0IGlmIHRoZXJlJ3Mgbm8gb3Ig c29tZSByZWdpc3RlcmVkDQpiYWQgYmxvY2tzLCBidXQgb3ZlciBhIG1pbGxpb24gdGhhdCBjb3Vs ZCBiZSBhIHByb2JsZW0gY3VycmVudGx5LCBJJ2xsIGV4YW1pbmUNCml0IGxhdGVyLi4NCg0KIGlm IHdlJ3ZlIGEgc3BhcmUgYW5kIGEgZHJpdmUgaGFkIGtpY2tlZCwgdGhhdCBzcGFyZSBiZWNvbWVz IHRvDQonYWN0aXZlIHNwYXJlJywgc3luYyBiZWdpbnMsIGJ1dCB0aGUgb3JpZ2luYWwgKGZhaWxl ZCkgZHJpdmUgd29uJ3QgYmUNCmtpY2tlZCB1bnRpbCB0aGUgc3luYyB3aWxsIG5vdCBoYXZlIGZp bmlzaGVkLiBpZiB0aGUgb3JpZ2luYWwgZHJpdmUgc3RpbGwNCmRyb3BzIGVycm9ycyBhZnRlciBo YWQgYmVlbiBzeW5jZWQsIHRoZSBpbl9zeW5jIHNwYXJlIHJlcGxhY2VzIHRoYXQgb25saW5lDQoN CiB5b3UgY2FuIGNoZWNrIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmFkIHNlY3RvcnMgaW4gL3By b2MvbWRzdGF0IChpbiBkZWJ1ZyBtb2RlKSwNCmFuZCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgd2l0 aDogZ3JlcCBfYmJjIC9wcm9jL3NsYWJpbmZvDQoNCg0KbXkgL3Byb2MvbWRzdGF0Og0KDQptZDAg OiBhY3RpdmUgcmFpZDUgcmFtNFsyXSBtZDJbMV0gbWQxWzBdDQogICAgICA4MDY0IGJsb2NrcyBs ZXZlbCA1LCA2NGsgY2h1bmssIGFsZ29yaXRobSAyIFszLzNdIFtVVVVdDQogICAgICBrbm93biBi YWQgc2VjdG9ycyBvbiBhY3RpdmUgZGV2aWNlczoNCiAgICAgIHJhbTQNCiAgICAgIG1kMg0KICAg ICAgbWQxIDU2IDEzNiAyMzIgNDcyIDYwMCA4NzIgMTE3NiAxMjQ4IDEzMzYgMTU2OCAxNjg4IDE5 NTIgMjEwNA0KDQptZDIgOiBhY3RpdmUgZmF1bHR5IHJhbTFbMF0NCiAgICAgIDQwOTYgYmxvY2tz IG5mYXVsdHM9MA0KICAgICAgDQptZDEgOiBhY3RpdmUgZmF1bHR5IHJhbTBbMF0NCiAgICAgIDQw OTYgYmxvY2tzIFJlYWRQZXJzaXN0ZW50PTkyKDEwMCkgbmZhdWx0cz0xMw0KICAgICAgDQoNCg0K LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oLm9yaWcJMjAwNS0wMy0wMyAyMzo1 MToyOS4wMDAwMDAwMDAgKzAxMDANCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUu aAkyMDA1LTA4LTE0IDAzOjAyOjExLjAwMDAwMDAwMCArMDIwMA0KQEAgLTE0Nyw2ICsxNDcsNyBA QA0KICNkZWZpbmUJUjVfVVBUT0RBVEUJMAkvKiBwYWdlIGNvbnRhaW5zIGN1cnJlbnQgZGF0YSAq Lw0KICNkZWZpbmUJUjVfTE9DS0VECTEJLyogSU8gaGFzIGJlZW4gc3VibWl0dGVkIG9uICJyZXEi ICovDQogI2RlZmluZQlSNV9PVkVSV1JJVEUJMgkvKiB0b3dyaXRlIGNvdmVycyB3aG9sZSBwYWdl ICovDQorI2RlZmluZQlSNV9GQUlMRUQJOAkvKiBmYWlsZWQgdG8gcmVhZCB0aGlzIHN0cmlwZSAq Lw0KIC8qIGFuZCBzb21lIHRoYXQgYXJlIGludGVybmFsIHRvIGhhbmRsZV9zdHJpcGUgKi8NCiAj ZGVmaW5lCVI1X0luc3luYwkzCS8qIHJkZXYgJiYgcmRldi0+aW5fc3luYyBhdCBzdGFydCAqLw0K ICNkZWZpbmUJUjVfV2FudHJlYWQJNAkvKiB3YW50IHRvIHNjaGVkdWxlIGEgcmVhZCAqLw0KQEAg LTE5Niw4ICsxOTcsMTYgQEANCiAgKi8NCiAgDQogDQorc3RydWN0IGJhZGJsb2NrIHsNCisJc3Ry dWN0IGJhZGJsb2NrCQkqaGFzaF9uZXh0LCAqKmhhc2hfcHByZXY7IC8qIGhhc2ggcG9pbnRlcnMg Ki8NCisJc2VjdG9yX3QJCXNlY3RvcjsgLyogc3RyaXBlICMgKi8NCit9Ow0KKw0KIHN0cnVjdCBk aXNrX2luZm8gew0KIAltZGtfcmRldl90CSpyZGV2Ow0KKwlzdHJ1Y3QgYmFkYmxvY2sgKipiYWRi bG9ja19oYXNodGJsOyAvKiBsaXN0IG9mIGtub3duIGJhZGJsb2NrcyAqLw0KKwljaGFyCQljYWNo ZV9uYW1lWzIwXTsNCisJa21lbV9jYWNoZV90CSpzbGFiX2NhY2hlOyAvKiBiYWRibG9jayBkYiAq Lw0KIH07DQogDQogc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSB7DQpAQCAtMjI0LDYgKzIzMyw4 IEBADQogCWludAkJCWluYWN0aXZlX2Jsb2NrZWQ7CS8qIHJlbGVhc2Ugb2YgaW5hY3RpdmUgc3Ry aXBlcyBibG9ja2VkLA0KIAkJCQkJCQkgKiB3YWl0aW5nIGZvciAyNSUgdG8gYmUgZnJlZQ0KIAkJ CQkJCQkgKi8gICAgICAgIA0KKwlpbnQJCQltaXJyb3JpdDsgLyogc291cmNlIGZvciBhY3RpdmUg c3BhcmUgcmVzeW5jICovDQorDQogCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOw0KIAlzdHJ1Y3Qg ZGlza19pbmZvCWRpc2tzWzBdOw0KIH07DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9zeXNjdGwu aC5vcmlnCTIwMDUtMDctMDYgMjA6MTk6MTAuMDAwMDAwMDAwICswMjAwDQorKysgbGludXgvaW5j bHVkZS9saW51eC9zeXNjdGwuaAkyMDA1LTA4LTE3IDIyOjAxOjI4LjAwMDAwMDAwMCArMDIwMA0K QEAgLTc3OCw3ICs3NzgsOCBAQA0KIC8qIC9wcm9jL3N5cy9kZXYvcmFpZCAqLw0KIGVudW0gew0K IAlERVZfUkFJRF9TUEVFRF9MSU1JVF9NSU49MSwNCi0JREVWX1JBSURfU1BFRURfTElNSVRfTUFY PTINCisJREVWX1JBSURfU1BFRURfTElNSVRfTUFYPTIsDQorCURFVl9SQUlEX0JBREJMT0NLX1RP TEVSQU5DRT0zDQogfTsNCiANCiAvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvZGVmYXVsdCAqLw0K LS0tIGxpbnV4L2RyaXZlcnMvbWQvbWQuYy5vcmlnCTIwMDUtMDgtMTQgMjE6MjI6MDguMDAwMDAw MDAwICswMjAwDQorKysgbGludXgvZHJpdmVycy9tZC9tZC5jCTIwMDUtMDgtMTQgMTc6MjA6MTUu MDAwMDAwMDAwICswMjAwDQpAQCAtNzgsNiArNzgsMTAgQEANCiBzdGF0aWMgaW50IHN5c2N0bF9z cGVlZF9saW1pdF9taW4gPSAxMDAwOw0KIHN0YXRpYyBpbnQgc3lzY3RsX3NwZWVkX2xpbWl0X21h eCA9IDIwMDAwMDsNCiANCisvKiBvdmVyIHRoaXMgbGltaXQgdGhlIGRyaXZlJ2xsIGJlIG1hcmtl ZCBhcyBmYWlsZWQuIG1lYXN1cmUgaXMgYmxvY2suICovDQoraW50IHN5c2N0bF9iYWRibG9ja190 b2xlcmFuY2UgPSAxMDAwMDsNCisNCisNCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIg KnJhaWRfdGFibGVfaGVhZGVyOw0KIA0KIHN0YXRpYyBjdGxfdGFibGUgcmFpZF90YWJsZVtdID0g ew0KQEAgLTk3LDYgKzEwMSwxNCBAQA0KIAkJLm1vZGUJCT0gMDY0NCwNCiAJCS5wcm9jX2hhbmRs ZXIJPSAmcHJvY19kb2ludHZlYywNCiAJfSwNCisJew0KKwkJLmN0bF9uYW1lCT0gREVWX1JBSURf QkFEQkxPQ0tfVE9MRVJBTkNFLA0KKwkJLnByb2NuYW1lCT0gImJhZGJsb2NrX3RvbGVyYW5jZSIs DQorCQkuZGF0YQkJPSAmc3lzY3RsX2JhZGJsb2NrX3RvbGVyYW5jZSwNCisJCS5tYXhsZW4JCT0g c2l6ZW9mKGludCksDQorCQkubW9kZQkJPSAwNjQ0LA0KKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9j X2RvaW50dmVjLA0KKwl9LA0KIAl7IC5jdGxfbmFtZSA9IDAgfQ0KIH07DQogDQpAQCAtMzUyNSwx MCArMzUzNywxMiBAQA0KIAkJfQ0KIAkJaWYgKG1kZGV2LT5zeW5jX3RocmVhZCkgew0KIAkJCS8q IHJlc3luYyBoYXMgZmluaXNoZWQsIGNvbGxlY3QgcmVzdWx0ICovDQorcHJpbnRrKCJtZF9jaGVj a19yZWNvdmVyeTogcmVzeW5jIGhhcyBmaW5pc2hlZFxuIik7DQogCQkJbWRfdW5yZWdpc3Rlcl90 aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsNCiAJCQltZGRldi0+c3luY190aHJlYWQgPSBOVUxM Ow0KIAkJCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KSAm Jg0KIAkJCSAgICAhdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkp IHsNCitwcmludGsoIm1kX2NoZWNrX3JlY292ZXJ5OiBhY3RpdmF0ZSBhbnkgc3BhcmVzXG4iKTsN CiAJCQkJLyogc3VjY2Vzcy4uLiovDQogCQkJCS8qIGFjdGl2YXRlIGFueSBzcGFyZXMgKi8NCiAJ CQkJbWRkZXYtPnBlcnMtPnNwYXJlX2FjdGl2ZShtZGRldik7DQpAQCAtMzU0NSwxOCArMzU1OSwx OSBAQA0KIA0KIAkJLyogbm8gcmVjb3ZlcnkgaXMgcnVubmluZy4NCiAJCSAqIHJlbW92ZSBhbnkg ZmFpbGVkIGRyaXZlcywgdGhlbg0KLQkJICogYWRkIHNwYXJlcyBpZiBwb3NzaWJsZQ0KKwkJICog YWRkIHNwYXJlcyBpZiBwb3NzaWJsZS4NCisJCSAqIFNwYXJlIGFyZSBhbHNvIHJlbW92ZWQgYW5k IHJlLWFkZGVkLCB0byBhbGxvdw0KKwkJICogdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlIHJl LWFkZC4NCiAJCSAqLw0KLQkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkgew0KKwkJSVRF UkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkNCiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAg JiYNCi0JCQkgICAgcmRldi0+ZmF1bHR5ICYmDQorCQkJICAgIChyZGV2LT5mYXVsdHkgfHwgISBy ZGV2LT5pbl9zeW5jKSAmJg0KIAkJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZyk9 PTApIHsNCitwcmludGsoIm1kX2NoZWNrX3JlY292ZXJ5OiBob3RfcmVtb3ZlX2Rpc2tcbiIpOw0K IAkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzayhtZGRldiwgcmRldi0+cmFpZF9k aXNrKT09MCkNCiAJCQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOw0KIAkJCX0NCi0JCQlpZiAoIXJk ZXYtPmZhdWx0eSAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJiAhcmRldi0+aW5fc3luYykNCi0J CQkJc3BhcmVzKys7DQotCQl9DQorDQogCQlpZiAobWRkZXYtPmRlZ3JhZGVkKSB7DQogCQkJSVRF UkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkNCiAJCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDAN CkBAIC0zNzY0LDQgKzM3ODMsNiBAQA0KIEVYUE9SVF9TWU1CT0wobWRfd2FrZXVwX3RocmVhZCk7 DQogRVhQT1JUX1NZTUJPTChtZF9wcmludF9kZXZpY2VzKTsNCiBFWFBPUlRfU1lNQk9MKG1kX2No ZWNrX3JlY292ZXJ5KTsNCitFWFBPUlRfU1lNQk9MKGtpY2tfcmRldl9mcm9tX2FycmF5KTsJLy8g Zml4bWUNCitFWFBPUlRfU1lNQk9MKHN5c2N0bF9iYWRibG9ja190b2xlcmFuY2UpOw0KIE1PRFVM RV9MSUNFTlNFKCJHUEwiKTsNCi0tLSBsaW51eC9kcml2ZXJzL21kL3JhaWQ1LmMub3JpZwkyMDA1 LTA4LTE0IDIxOjIyOjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGxpbnV4L2RyaXZlcnMvbWQvcmFp ZDUuYwkyMDA1LTA4LTE0IDIwOjQ5OjQ5LjAwMDAwMDAwMCArMDIwMA0KQEAgLTQwLDYgKzQwLDE4 IEBADQogDQogI2RlZmluZSBzdHJpcGVfaGFzaChjb25mLCBzZWN0KQkoKGNvbmYpLT5zdHJpcGVf aGFzaHRibFsoKHNlY3QpID4+IFNUUklQRV9TSElGVCkgJiBIQVNIX01BU0tdKQ0KIA0KKyAvKg0K KyAqIHBlci1kZXZpY2UgYmFkYmxvY2sgY2FjaGUNCisgKi8NCisNCisjZGVmaW5lCUJCX1NISUZU CQkoUEFHRV9TSElGVC8qMTIqLyAtIDkpDQorI2RlZmluZQlCQl9IQVNIX1BBR0VTCQkxDQorI2Rl ZmluZQlCQl9OUl9IQVNICQkoSEFTSF9QQUdFUyAqIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3Qg YmFkYmxvY2sgKikpDQorI2RlZmluZQlCQl9IQVNIX01BU0sJCShCQl9OUl9IQVNIIC0gMSkNCisN CisjZGVmaW5lCWJiX2hhc2goZGlzaywgc2VjdCkJKChkaXNrKS0+YmFkYmxvY2tfaGFzaHRibFso KHNlY3QpID4+IEJCX1NISUZUKSAmIEJCX0hBU0hfTUFTS10pDQorI2RlZmluZQliYl9oYXNobnIo c2VjdCkJCSgoKHNlY3QpID4+IEJCX1NISUZUKSAmIEJCX0hBU0hfTUFTSykNCisNCiAvKiBiaW8n cyBhdHRhY2hlZCB0byBhIHN0cmlwZStkZXZpY2UgZm9yIEkvTyBhcmUgbGlua2VkIHRvZ2V0aGVy IGluIGJpX3NlY3Rvcg0KICAqIG9yZGVyIHdpdGhvdXQgb3ZlcmxhcC4gIFRoZXJlIG1heSBiZSBz ZXZlcmFsIGJpbydzIHBlciBzdHJpcGUrZGV2aWNlLCBhbmQNCiAgKiBhIGJpbyBjb3VsZCBzcGFu IHNldmVyYWwgZGV2aWNlcy4NCkBAIC01Myw3ICs2NSw3IEBADQogLyoNCiAgKiBUaGUgZm9sbG93 aW5nIGNhbiBiZSB1c2VkIHRvIGRlYnVnIHRoZSBkcml2ZXINCiAgKi8NCi0jZGVmaW5lIFJBSUQ1 X0RFQlVHCTANCisjZGVmaW5lIFJBSUQ1X0RFQlVHCTENCiAjZGVmaW5lIFJBSUQ1X1BBUkFOT0lB CTENCiAjaWYgUkFJRDVfUEFSQU5PSUEgJiYgZGVmaW5lZChDT05GSUdfU01QKQ0KICMgZGVmaW5l IENIRUNLX0RFVkxPQ0soKSBhc3NlcnRfc3Bpbl9sb2NrZWQoJmNvbmYtPmRldmljZV9sb2NrKQ0K QEAgLTYxLDEzICs3MywxNTkgQEANCiAjIGRlZmluZSBDSEVDS19ERVZMT0NLKCkNCiAjZW5kaWYN CiANCi0jZGVmaW5lIFBSSU5USyh4Li4uKSAoKHZvaWQpKFJBSUQ1X0RFQlVHICYmIHByaW50ayh4 KSkpDQorI2RlZmluZSBQUklOVEsoeC4uLikgKCh2b2lkKShSQUlENV9ERUJVRyAmJiBwcmludGso S0VSTl9ERUJVRyB4KSkpDQogI2lmIFJBSUQ1X0RFQlVHDQogI2RlZmluZSBpbmxpbmUNCiAjZGVm aW5lIF9faW5saW5lX18NCiAjZW5kaWYNCiANCiBzdGF0aWMgdm9pZCBwcmludF9yYWlkNV9jb25m IChyYWlkNV9jb25mX3QgKmNvbmYpOw0KK2V4dGVybiBpbnQgc3lzY3RsX2JhZGJsb2NrX3RvbGVy YW5jZTsNCisNCisNCitzdGF0aWMgdm9pZCBiYl9pbnNlcnRfaGFzaChzdHJ1Y3QgZGlza19pbmZv ICpkaXNrLCBzdHJ1Y3QgYmFkYmxvY2sgKmJiKQ0KK3sNCisJc3RydWN0IGJhZGJsb2NrICoqYmJw ID0gJmJiX2hhc2goZGlzaywgYmItPnNlY3Rvcik7DQorDQorCS8qcHJpbnRrKCJiYl9pbnNlcnRf aGFzaCgpLCBzZWN0b3IgJWxsdSBoYXNobnIgJWx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJi LT5zZWN0b3IsDQorCQliYl9oYXNobnIoYmItPnNlY3RvcikpOyovDQorDQorCWlmICgoYmItPmhh c2hfbmV4dCA9ICpiYnApICE9IE5VTEwpDQorCQkoKmJicCktPmhhc2hfcHByZXYgPSAmYmItPmhh c2hfbmV4dDsNCisJKmJicCA9IGJiOwkNCisJYmItPmhhc2hfcHByZXYgPSBiYnA7DQorfQ0KKw0K K3N0YXRpYyB2b2lkIGJiX3JlbW92ZV9oYXNoKHN0cnVjdCBiYWRibG9jayAqYmIpDQorew0KKwkv KnByaW50aygicmVtb3ZlX2hhc2goKSwgc2VjdG9yICVsbHUgaGFzaG5yICVsdVxuIiwgKHVuc2ln bmVkIGxvbmcgbG9uZyliYi0+c2VjdG9yLA0KKwkJYmJfaGFzaG5yKGJiLT5zZWN0b3IpKTsqLw0K Kw0KKwlpZiAoYmItPmhhc2hfcHByZXYpIHsNCisJCWlmIChiYi0+aGFzaF9uZXh0KQ0KKwkJCWJi LT5oYXNoX25leHQtPmhhc2hfcHByZXYgPSBiYi0+aGFzaF9wcHJldjsNCisJCSpiYi0+aGFzaF9w cHJldiA9IGJiLT5oYXNoX25leHQ7DQorCQliYi0+aGFzaF9wcHJldiA9IE5VTEw7DQorCX0NCit9 DQorDQorc3RhdGljIHN0cnVjdCBiYWRibG9jayAqX19maW5kX2JhZGJsb2NrKHN0cnVjdCBkaXNr X2luZm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvcikNCit7DQorCXN0cnVjdCBiYWRibG9jayAqYmI7 DQorDQorCWZvciAoYmIgPSBiYl9oYXNoKGRpc2ssIHNlY3Rvcik7IGJiOyBiYiA9IGJiLT5oYXNo X25leHQpDQorCQlpZiAoYmItPnNlY3RvciA9PSBzZWN0b3IpDQorCQkJcmV0dXJuIGJiOw0KKwly ZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBiYWRibG9jayAqZmluZF9iYWRibG9j ayhzdHJ1Y3QgZGlza19pbmZvICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpDQorew0KKwlyYWlkNV9j b25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIGRpc2stPnJkZXYtPm1kZGV2LT5wcml2YXRl Ow0KKwlzdHJ1Y3QgYmFkYmxvY2sgKmJiOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZp Y2VfbG9jayk7DQorCWJiID0gX19maW5kX2JhZGJsb2NrKGRpc2ssIHNlY3Rvcik7DQorCXNwaW5f dW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKwlyZXR1cm4gYmI7DQorfQ0KKw0KK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2JhZGJsb2NrcyAoc3RydWN0IGRpc2tfaW5mbyAqZGlz aykNCit7DQorCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgZGlzay0+cmRl di0+bWRkZXYtPnByaXZhdGU7DQorCXN0cnVjdCBiYWRibG9jayAqYmI7DQorCWludCBqOw0KKwlp bnQgbiA9IDA7DQorDQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisJZm9y IChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJYmIgPSBkaXNrLT5iYWRibG9ja19o YXNodGJsW2pdOw0KKwkJZm9yICg7IGJiOyBiYiA9IGJiLT5oYXNoX25leHQpDQorCQkJbisrOw0K Kwl9DQorCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKw0KKwlyZXR1cm4g bjsNCit9DQorDQorc3RhdGljIGludCBncm93X2JhZGJsb2NrcyhzdHJ1Y3QgZGlza19pbmZvICpk aXNrKQ0KK3sNCisJY2hhciBiW0JERVZOQU1FX1NJWkVdOw0KKwlrbWVtX2NhY2hlX3QgKnNjOw0K Kw0KKwkvKiBoYXNoIHRhYmxlICovDQorCWlmICgoZGlzay0+YmFkYmxvY2tfaGFzaHRibCA9IChz dHJ1Y3QgYmFkYmxvY2sgKiopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgSEFTSF9QQUdF U19PUkRFUikpID09IE5VTEwpIHsNCisJICAgIHByaW50aygiZ3Jvd19iYWRibG9ja3M6IF9fZ2V0 X2ZyZWVfcGFnZXMgZmFpbGVkXG4iKTsNCisJICAgIHJldHVybiAwOw0KKwl9DQorCW1lbXNldChk aXNrLT5iYWRibG9ja19oYXNodGJsLCAwLCBCQl9IQVNIX1BBR0VTICogUEFHRV9TSVpFKTsNCisN CisJLyogYmFkYmxvY2tzIGRiICovDQorCXNwcmludGYoZGlzay0+Y2FjaGVfbmFtZSwgInJhaWQ1 LyVzXyVzX2JiYyIsIG1kbmFtZShkaXNrLT5yZGV2LT5tZGRldiksDQorCQkJYmRldm5hbWUoZGlz ay0+cmRldi0+YmRldiwgYikpOw0KKwlzYyA9IGttZW1fY2FjaGVfY3JlYXRlKGRpc2stPmNhY2hl X25hbWUsDQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmFkYmxvY2spLA0KKwkJCSAgICAgICAw LCAwLCBOVUxMLCBOVUxMKTsNCisJaWYgKCFzYykgew0KKwkJcHJpbnRrKCJncm93X2JhZGJsb2Nr czoga21lbV9jYWNoZV9jcmVhdGUgZmFpbGVkXG4iKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWRp c2stPnNsYWJfY2FjaGUgPSBzYzsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IHNocmlua19iYWRibG9ja3Moc3RydWN0IGRpc2tfaW5mbyAqZGlzaykNCit7DQorCXN0cnVjdCBi YWRibG9jayAqYmI7DQorCWludCBqOw0KKw0KKwkvKiBiYWRibG9ja3MgZGIgKi8NCisJZm9yIChq ID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJYmIgPSBkaXNrLT5iYWRibG9ja19oYXNo dGJsW2pdOw0KKwkJZm9yICg7IGJiOyBiYiA9IGJiLT5oYXNoX25leHQpDQorCQkgICAgICAgIGtt ZW1fY2FjaGVfZnJlZShkaXNrLT5zbGFiX2NhY2hlLCBiYik7DQorCX0NCisJa21lbV9jYWNoZV9k ZXN0cm95KGRpc2stPnNsYWJfY2FjaGUpOw0KKwlkaXNrLT5zbGFiX2NhY2hlID0gTlVMTDsNCisN CisJLyogaGFzaCB0YWJsZSAqLw0KKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBkaXNrLT5i YWRibG9ja19oYXNodGJsLCBIQVNIX1BBR0VTX09SREVSKTsNCit9DQorDQorc3RhdGljIHZvaWQg c3RvcmVfYmFkYmxvY2soc3RydWN0IGRpc2tfaW5mbyAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKQ0K K3sNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCisJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1 X2NvbmZfdCAqKSBkaXNrLT5yZGV2LT5tZGRldi0+cHJpdmF0ZTsNCisNCisJYmIgPSBrbWVtX2Nh Y2hlX2FsbG9jKGRpc2stPnNsYWJfY2FjaGUsIEdGUF9LRVJORUwpOw0KKwlpZiAoIWJiKSB7DQor CQlwcmludGsoInN0b3JlX2JhZGJsb2NrOiBrbWVtX2NhY2hlX2FsbG9jIGZhaWxlZFxuIik7DQor CQlyZXR1cm47DQorCX0NCisJbWVtc2V0KGJiLCAwLCBzaXplb2YoKmJiKSk7DQorCWJiLT5zZWN0 b3IgPSBzZWN0b3I7DQorDQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisJ YmJfaW5zZXJ0X2hhc2goZGlzaywgYmIpOw0KKwlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmlj ZV9sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQgZGVsZXRlX2JhZGJsb2NrKHN0cnVjdCBkaXNr X2luZm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvcikNCit7DQorCXN0cnVjdCBiYWRibG9jayAqYmI7 DQorCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgZGlzay0+cmRldi0+bWRk ZXYtPnByaXZhdGU7DQorDQorCWJiID0gZmluZF9iYWRibG9jayhkaXNrLCBzZWN0b3IpOw0KKwlp ZiAoIWJiKQ0KKwkJLyogcmVzZXQgb24gd3JpdGUnbGwgY2FsbCB1cyBsaWtlIGFuIGlkaW90IDp9 ICovDQorCQlyZXR1cm47DQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisJ YmJfcmVtb3ZlX2hhc2goYmIpOw0KKwlrbWVtX2NhY2hlX2ZyZWUoZGlzay0+c2xhYl9jYWNoZSwg YmIpOw0KKwlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCit9DQorDQogDQog c3RhdGljIGlubGluZSB2b2lkIF9fcmVsZWFzZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBz dHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KIHsNCkBAIC0yMDEsNyArMzU5LDcgQEANCiAJc2gtPnBk X2lkeCA9IHBkX2lkeDsNCiAJc2gtPnN0YXRlID0gMDsNCiANCi0JZm9yIChpPWRpc2tzOyBpLS07 ICkgew0KKwlmb3IgKGk9ZGlza3MrMTsgaS0tOyApIHsNCiAJCXN0cnVjdCByNWRldiAqZGV2ID0g JnNoLT5kZXZbaV07DQogDQogCQlpZiAoZGV2LT50b3JlYWQgfHwgZGV2LT50b3dyaXRlIHx8IGRl di0+d3JpdHRlbiB8fA0KQEAgLTI5MSw4ICs0NDksMTAgQEANCiANCiAJc3ByaW50Zihjb25mLT5j YWNoZV9uYW1lLCAicmFpZDUvJXMiLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsNCiANCisJLyogKzE6 IHdlIG5lZWQgZXh0cmEgc3BhY2UgaW4gdGhlICpzaC0+ZGV2cyBmb3IgdGhlICdhY3RpdmUgc3Bh cmUnIHRvIGtlZXANCisJICAgIGhhbmRsZV9zdHJpcGUoKSBzaW1wbGUgKi8NCiAJc2MgPSBrbWVt X2NhY2hlX2NyZWF0ZShjb25mLT5jYWNoZV9uYW1lLCANCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVj dCBzdHJpcGVfaGVhZCkrKGRldnMtMSkqc2l6ZW9mKHN0cnVjdCByNWRldiksDQorCQkJICAgICAg IHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTErMSkqc2l6ZW9mKHN0cnVjdCByNWRl diksDQogCQkJICAgICAgIDAsIDAsIE5VTEwsIE5VTEwpOw0KIAlpZiAoIXNjKQ0KIAkJcmV0dXJu IDE7DQpAQCAtMzAxLDEyICs0NjEsMTIgQEANCiAJCXNoID0ga21lbV9jYWNoZV9hbGxvYyhzYywg R0ZQX0tFUk5FTCk7DQogCQlpZiAoIXNoKQ0KIAkJCXJldHVybiAxOw0KLQkJbWVtc2V0KHNoLCAw LCBzaXplb2YoKnNoKSArIChkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsNCisJCW1lbXNl dChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGV2cy0xKzEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsN CiAJCXNoLT5yYWlkX2NvbmYgPSBjb25mOw0KIAkJc3Bpbl9sb2NrX2luaXQoJnNoLT5sb2NrKTsN CiANCi0JCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7DQotCQkJc2hy aW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOw0KKwkJaWYgKGdyb3dfYnVmZmVycyhz aCwgY29uZi0+cmFpZF9kaXNrcysxKSkgew0KKwkJCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5y YWlkX2Rpc2tzKzEpOw0KIAkJCWttZW1fY2FjaGVfZnJlZShzYywgc2gpOw0KIAkJCXJldHVybiAx Ow0KIAkJfQ0KQEAgLTM5MSwxMCArNTUxLDM5IEBADQogCQl9DQogI2Vsc2UNCiAJCXNldF9iaXQo UjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCisJCWNsZWFyX2JpdChSNV9GQUlMRUQs ICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAjZW5kaWYJCQ0KIAl9IGVsc2Ugew0KKwkgICAgY2hhciBi W0JERVZOQU1FX1NJWkVdOw0KKw0KKwkgICAgLyoNCisJCXJ1bGUgMS4sOiB0cnkgdG8ga2VlcCBh bGwgZGlzayBpbl9zeW5jIGV2ZW4gaWYgd2UndmUgZ290IHJlYWQgZXJyb3JzLA0KKwkJY2F1c2Ug dGhlICdhY3RpdmUgc3BhcmUnIG1heSBjYW4gcmVidWlsZCBhIGNvbXBsZXRlIGNvbHVtbiBmcm9t DQorCQlwYXJ0aWFsbHkgZmFpbGVkIGRyaXZlcw0KKwkgICAgKi8NCisJICAgIGlmIChjb25mLT5k aXNrc1tpXS5yZGV2LT5pbl9zeW5jICYmIGNvbmYtPndvcmtpbmdfZGlza3MgPCBjb25mLT5yYWlk X2Rpc2tzKSB7DQorCQkvKiBiYWQgbmV3cywgYnV0IGtlZXAgaXQsIGNhdXNlIG1kX2Vycm9yKCkg d291bGQgZG8gYSBjb21wbGV0ZQ0KKwkJICAgIGFycmF5IHNodXRkb3duLCBldmVuIGlmIDk5Ljk5 JSBpcyB1c2VhYmxlICovDQorCQlwcmludGsoS0VSTl9BTEVSVA0KKwkJCSJyYWlkNV9lbmRfcmVh ZF9yZXF1ZXN0OiBSZWFkIGZhaWx1cmUgJXMgb24gc2VjdG9yICVsbHUgKCVkKSBpbiBkZWdyYWRl ZCBtb2RlXG4iDQorCQkJLGJkZXZuYW1lKGNvbmYtPmRpc2tzW2ldLnJkZXYtPmJkZXYsIGIpLA0K KwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgYXRvbWljX3JlYWQoJnNoLT5jb3Vu dCkpOw0KKwkJaWYgKGNvbmYtPm1kZGV2LT5jdXJyX3Jlc3luYykNCisJCSAgICAvKiByYWlkNV9h ZGRfZGlzaygpIHdpbGwgbm8gYWNjZXB0IHRoZSBzcGFyZSBhZ2FpbiwNCisJCQlhbmQgd2lsbCBu b3QgbG9vcCBmb3JldmVyICovDQorCQkgICAgY29uZi0+bWRkZXYtPmRlZ3JhZGVkID0gMjsNCisJ ICAgIH0gZWxzZSBpZiAoY29uZi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYyAmJiBjb25mLT53b3Jr aW5nX2Rpc2tzID49IGNvbmYtPnJhaWRfZGlza3MpIHsNCisJCS8qIHdpbGwgYmUgY29tcHV0ZWQg Ki8NCisJCXByaW50ayhLRVJOX0FMRVJUDQorCQkJInJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Q6IFJl YWQgZmFpbHVyZSAlcyBvbiBzZWN0b3IgJWxsdSAoJWQpIGluIG9wdGltYWwgbW9kZVxuIg0KKwkJ CSxiZGV2bmFtZShjb25mLT5kaXNrc1tpXS5yZGV2LT5iZGV2LCBiKSwNCisJCQkodW5zaWduZWQg bG9uZyBsb25nKXNoLT5zZWN0b3IsIGF0b21pY19yZWFkKCZzaC0+Y291bnQpKTsNCisJCS8qIGNv bmYtPmRpc2tzW2ldLnJlcnIrKyAqLw0KKwkgICAgfSBlbHNlDQorCQkvKiBwcmFjdGljYWxseSBp dCBuZXZlciBoYXBwZW5zICovDQogCQltZF9lcnJvcihjb25mLT5tZGRldiwgY29uZi0+ZGlza3Nb aV0ucmRldik7DQotCQljbGVhcl9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsN CisJICAgIGNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0KKwkgICAg c2V0X2JpdChSNV9GQUlMRUQsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAJfQ0KIAlyZGV2X2RlY19w ZW5kaW5nKGNvbmYtPmRpc2tzW2ldLnJkZXYsIGNvbmYtPm1kZGV2KTsNCiAjaWYgMA0KQEAgLTQz MCwxMCArNjE5LDExIEBADQogCVBSSU5USygiZW5kX3dyaXRlX3JlcXVlc3QgJWxsdS8lZCwgY291 bnQgJWQsIHVwdG9kYXRlOiAlZC5cbiIsIA0KIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2Vj dG9yLCBpLCBhdG9taWNfcmVhZCgmc2gtPmNvdW50KSwNCiAJCXVwdG9kYXRlKTsNCisJLyogc29y cnkNCiAJaWYgKGkgPT0gZGlza3MpIHsNCiAJCUJVRygpOw0KIAkJcmV0dXJuIDA7DQotCX0NCisJ fSovDQogDQogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOw0K IAlpZiAoIXVwdG9kYXRlKQ0KQEAgLTQ2NywzMyArNjU3LDE0NCBAQA0KIAlkZXYtPnJlcS5iaV9w cml2YXRlID0gc2g7DQogDQogCWRldi0+ZmxhZ3MgPSAwOw0KLQlpZiAoaSAhPSBzaC0+cGRfaWR4 KQ0KKwlpZiAoaSAhPSBzaC0+cGRfaWR4ICYmIGkgPCBzaC0+cmFpZF9jb25mLT5yYWlkX2Rpc2tz KQkvKiBhY3RpdmUgc3BhcmU/ICovDQogCQlkZXYtPnNlY3RvciA9IGNvbXB1dGVfYmxvY2tucihz aCwgaSk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2sobWRkZXZfdCAqbWRk ZXYsIGludCBudW1iZXIpOw0KK3N0YXRpYyBpbnQgcmFpZDVfYWRkX2Rpc2sobWRkZXZfdCAqbWRk ZXYsIG1ka19yZGV2X3QgKnJkZXYpOw0KKy8qc3RhdGljKi8gdm9pZCBraWNrX3JkZXZfZnJvbV9h cnJheShtZGtfcmRldl90ICogcmRldik7DQorLy9zdGF0aWMgdm9pZCBtZF91cGRhdGVfc2IobWRk ZXZfdCAqIG1kZGV2KTsNCiBzdGF0aWMgdm9pZCBlcnJvcihtZGRldl90ICptZGRldiwgbWRrX3Jk ZXZfdCAqcmRldikNCiB7DQogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsNCisJY2hhciBiMltCREVW TkFNRV9TSVpFXTsNCiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRl di0+cHJpdmF0ZTsNCiAJUFJJTlRLKCJyYWlkNTogZXJyb3IgY2FsbGVkXG4iKTsNCiANCiAJaWYg KCFyZGV2LT5mYXVsdHkpIHsNCi0JCW1kZGV2LT5zYl9kaXJ0eSA9IDE7DQotCQlpZiAocmRldi0+ aW5fc3luYykgew0KLQkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsNCi0JCQltZGRldi0+ZGVncmFk ZWQrKzsNCi0JCQljb25mLT5mYWlsZWRfZGlza3MrKzsNCi0JCQlyZGV2LT5pbl9zeW5jID0gMDsN Ci0JCQkvKg0KLQkJCSAqIGlmIHJlY292ZXJ5IHdhcyBydW5uaW5nLCBtYWtlIHN1cmUgaXQgYWJv cnRzLg0KLQkJCSAqLw0KLQkJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292 ZXJ5KTsNCi0JCX0NCi0JCXJkZXYtPmZhdWx0eSA9IDE7DQotCQlwcmludGsgKEtFUk5fQUxFUlQN Ci0JCQkicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS4iDQotCQkJ IiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLA0KLQkJCWJkZXZuYW1lKHJk ZXYtPmJkZXYsYiksIGNvbmYtPndvcmtpbmdfZGlza3MpOw0KKwkJaW50IG1kZGlza3MgPSAwOw0K KwkJbWRrX3JkZXZfdCAqcmQ7DQorCQltZGtfcmRldl90ICpyZGV2cyA9IE5VTEw7DQorCQlzdHJ1 Y3QgbGlzdF9oZWFkICpydG1wOw0KKwkJaW50IGk7DQorDQorCQlJVEVSQVRFX1JERVYobWRkZXYs cmQscnRtcCkNCisJCSAgICB7DQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWRkZXYlZDogJXNcbiIs IG1kZGlza3MsIGJkZXZuYW1lKHJkLT5iZGV2LGIpKTsNCisJCQltZGRpc2tzKys7DQorCQkgICAg fQ0KKwkJZm9yIChpID0gMDsgKHJkID0gY29uZi0+ZGlza3NbaV0ucmRldik7IGkrKykgew0KKwkJ CXByaW50ayhLRVJOX0lORk8gInI1ZGV2JWQ6ICVzXG4iLCBpLCBiZGV2bmFtZShyZC0+YmRldixi KSk7DQorCQl9DQorCQlJVEVSQVRFX1JERVYobWRkZXYscmQscnRtcCkNCisJCSAgICB7DQorCQkJ cmRldnMgPSByZDsNCisJCQlicmVhazsNCisJCSAgICB9DQorcHJpbnRrKCIlZCAlZCA+ICVkICVk IGluczolZCAlcFxuIiwNCisJbWRkZXYtPnJhaWRfZGlza3MsIG1kZGlza3MsIGNvbmYtPnJhaWRf ZGlza3MsIG1kZGV2LT5kZWdyYWRlZCwgcmRldi0+aW5fc3luYywgcmRldnMpOw0KKwkJaWYgKGNv bmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXYgPT0gcmRldiAmJiByZGV2LT5pbl9zeW5j KSB7DQorCQkgICAgLyogaW5fc3luYywgYnV0IG11c3QgYmUgaGFuZGxlZCBzcGVjaWFsbHksIGRv bid0IGxldCAnZGVncmFkZWQrKycgKi8NCisJCSAgICBwcmludGsgKCJhY3RpdmUgc3BhcmUgZmFp bGVkICVzIChpbl9zeW5jKVxuIiwNCisJCQkJYmRldm5hbWUocmRldi0+YmRldixiKSk7DQorCQkg ICAgbWRkZXYtPnNiX2RpcnR5ID0gMTsNCisJCSAgICByZGV2LT5pbl9zeW5jID0gMDsNCisJCSAg ICByZGV2LT5mYXVsdHkgPSAxOw0KKwkJICAgIHJkZXYtPnJhaWRfZGlzayA9IGNvbmYtPnJhaWRf ZGlza3M7CQkvKiBtZSBhcyBteXNlbGYsIGFnYWluIDspICovDQorCQkgICAgY29uZi0+bWlycm9y aXQgPSAtMTsNCisJCX0gZWxzZSBpZiAobWRkaXNrcyA+IGNvbmYtPnJhaWRfZGlza3MgJiYgIW1k ZGV2LT5kZWdyYWRlZCAmJiByZGV2LT5pbl9zeW5jKSB7DQorCQkgICAgLyogaGF2ZSBhY3RpdmUg c3BhcmUsIGFycmF5IGlzIG9wdGltYWwsIHJlbW92ZWQgZGlzayBtZW1iZXINCisJCQkgICAgb2Yg aXQgKGJ1dCBub3QgdGhlIGFjdGl2ZSBzcGFyZSkgKi8NCisJCSAgICBpZiAocmRldi0+cmFpZF9k aXNrID09IGNvbmYtPm1pcnJvcml0ICYmIGNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJk ZXYpIHsNCisJCQlpZiAoIWNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXYtPmluX3N5 bmMpIHsNCisJCQkgICAgcHJpbnRrKEtFUk5fQUxFUlQgImRpc2sgJXMgZmFpbGVkIGFuZCBhY3Rp dmUgc3BhcmUgaXNuJ3QgaW5fc3luYyB5ZXQsIHJlYWRkIGFzIG5vcm1hbCBzcGFyZVxuIiwNCisJ CQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYikpOw0KKwkJCSAgICAvKiBtYXliZSBzaG91bGRuJ3Qg c3RvcCBoZXJlLCBidXQgd2UgY2FuJ3QgY2FsbCB0aGlzIGRpc2sgYXMNCisJCQkJJ2FjdGl2ZSBz cGFyZScgYW55bW9yZSwgY2F1c2UgaXQncyBhIHNpbXBsZSByZWJ1aWxkIGZyb20NCisJCQkJYSBk ZWdyYWRlZCBhcnJheSwgZmVhciBvZiBiYWQgYmxvY2tzISAqLw0KKwkJCSAgICBjb25mLT5taXJy b3JpdCA9IC0xOw0KKwkJCSAgICBnb3RvIGxldGl0Z287DQorCQkJfSBlbHNlIHsNCisJCQkgICAg aW50IHJldDsNCisNCisJCQkgICAgLyogaG90IHJlcGxhY2UgdGhlIG1pcnJvcmVkIGRyaXZlIHdp dGggdGhlICdhY3RpdmUgc3BhcmUnDQorCQkJCXRoaXMgaXMgcmVhbGx5ICJob3QiLCBJIGNhbid0 IHNlZSBjbGVhcmx5IHRoZSB0aGluZ3MNCisJCQkJd2hhdCBJIGhhdmUgdG8gZG8gaGVyZS4gOn0N CisJCQkJcHJheS4gKi8NCisNCisJCQkgICAgcHJpbnRrKEtFUk5fQUxFUlQgInJlcGxhY2UgJXMg d2l0aCBpbl9zeW5jIGFjdGl2ZSBzcGFyZSAlc1xuIiwNCisJCQkJICAgIGJkZXZuYW1lKHJkZXYt PmJkZXYsYiksDQorCQkJCSAgICBiZGV2bmFtZShyZGV2cy0+YmRldixiMikpOw0KKwkJCSAgICBy ZGV2LT5pbl9zeW5jID0gMDsNCisJCQkgICAgcmRldi0+ZmF1bHR5ID0gMTsNCisNCisJCQkgICAg Y29uZi0+bWlycm9yaXQgPSAtMTsNCisNCisJCQkgICAgLyogbXkgR29kLCBhbSBJIHNhbmU/ICov DQorCQkJICAgIHdoaWxlICgoaSA9IGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkpIHsN CisJCQkJcHJpbnRrKCJ3YWl0aW5nIGZvciBkaXNrICVkIC4uICVkXG4iLA0KKwkJCQkJcmRldi0+ cmFpZF9kaXNrLCBpKTsNCisJCQkgICAgfQ0KKwkJCSAgICByZXQgPSByYWlkNV9yZW1vdmVfZGlz ayhtZGRldiwgcmRldi0+cmFpZF9kaXNrKTsNCisJCQkgICAgaWYgKHJldCkgew0KKwkJCQlwcmlu dGsoS0VSTl9XQVJOSU5HICJyYWlkNV9yZW1vdmVfZGlzazE6IGJ1c3k/IVxuIik7DQorCQkJCXJl dHVybjsJLy8gc2hvdWxkIG5vdGhpbmcgdG8gZG8NCisJCQkgICAgfQ0KKw0KKwkJCSAgICByZCA9 IGNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXY7DQorCQkJICAgIHdoaWxlICgoaSA9 IGF0b21pY19yZWFkKCZyZC0+bnJfcGVuZGluZykpKSB7DQorCQkJCXByaW50aygid2FpdGluZyBm b3IgZGlzayAlZCAuLiAlZFxuIiwNCisJCQkJCWNvbmYtPnJhaWRfZGlza3MsIGkpOw0KKwkJCSAg ICB9DQorCQkJICAgIHJkLT5pbl9zeW5jID0gMDsNCisJCQkgICAgcmV0ID0gcmFpZDVfcmVtb3Zl X2Rpc2sobWRkZXYsIGNvbmYtPnJhaWRfZGlza3MpOw0KKwkJCSAgICBpZiAocmV0KSB7DQorCQkJ CXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1X3JlbW92ZV9kaXNrMjogYnVzeT8hXG4iKTsNCisJ CQkJcmV0dXJuOwkvLyAuLg0KKwkJCSAgICB9DQorDQorCQkJICAgIHJldCA9IHJhaWQ1X2FkZF9k aXNrKG1kZGV2LCByZCk7DQorCQkJICAgIGlmICghcmV0KSB7DQorCQkJCXByaW50ayhLRVJOX1dB Uk5JTkcgInJhaWQ1X2FkZF9kaXNrOiBubyBmcmVlIHNsb3Q/IVxuIik7DQorCQkJCXJldHVybjsJ Ly8gLi4NCisJCQkgICAgfQ0KKwkJCSAgICByZC0+aW5fc3luYyA9IDE7DQorDQorCQkJICAgIC8q IGJvcnJvd2VkIGZyb20gaG90X3JlbW92ZV9kaXNrKCkgKi8NCisJCQkgICAga2lja19yZGV2X2Zy b21fYXJyYXkocmRldik7DQorCQkJICAgIC8vbWRfdXBkYXRlX3NiKG1kZGV2KTsNCisJCQl9DQor CQkgICAgfSBlbHNlIHsNCisJCQkvKiBpbl9zeW5jIGRpc2sgZmFpbGVkICghZGVncmFkZWQpLCB0 cnlpbmcgdG8gbWFrZSBhIGNvcHkNCisJCQkgICAgdG8gYSBzcGFyZSB7YW5kIHdlIGNhbiBjYWxs IGl0ICdhY3RpdmUgc3BhcmUnIGZyb20gbm93On0gKi8NCisJCQlwcmludGsoS0VSTl9BTEVSVCAi cmVzeW5jIGZyb20gJXMgdG8gc3BhcmUgJXMgKCVkKVxuIiwNCisJCQkJYmRldm5hbWUocmRldi0+ YmRldixiKSwNCisJCQkgICAgICAgIGJkZXZuYW1lKHJkZXZzLT5iZGV2LGIyKSwNCisJCQkJY29u Zi0+cmFpZF9kaXNrcyk7DQorCQkJY29uZi0+bWlycm9yaXQgPSByZGV2LT5yYWlkX2Rpc2s7DQor DQorCQkJbWRkZXYtPmRlZ3JhZGVkKys7CS8qIGZvciBjYWxsIHJhaWQ1X2hvdF9hZGRfZGlzaygp LCByZXNldCB0aGVyZSAqLw0KKwkJICAgIH0NCisJCX0gZWxzZSB7DQorbGV0aXRnbzoNCisJCSAg ICBtZGRldi0+c2JfZGlydHkgPSAxOw0KKwkJICAgIGlmIChyZGV2LT5pbl9zeW5jKSB7DQorCQkJ ICAgIGNvbmYtPndvcmtpbmdfZGlza3MtLTsNCisJCQkgICAgbWRkZXYtPmRlZ3JhZGVkKys7DQor CQkJICAgIGNvbmYtPmZhaWxlZF9kaXNrcysrOw0KKwkJCSAgICByZGV2LT5pbl9zeW5jID0gMDsN CisJCQkgICAgLyoNCisJCQkgICAgICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5pbmcsIG1ha2Ugc3Vy ZSBpdCBhYm9ydHMuDQorCQkJICAgICAqLw0KKwkJCSAgICBzZXRfYml0KE1EX1JFQ09WRVJZX0VS UiwgJm1kZGV2LT5yZWNvdmVyeSk7DQorCQkgICAgfQ0KKwkJICAgIHJkZXYtPmZhdWx0eSA9IDE7 DQorCQkgICAgcHJpbnRrIChLRVJOX0FMRVJUDQorCQkJICAgICJyYWlkNTogRGlzayBmYWlsdXJl IG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiINCisJCQkgICAgIiBPcGVyYXRpb24gY29udGludWlu ZyBvbiAlZCBkZXZpY2VzXG4iLA0KKwkJCSAgICBiZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBjb25m LT53b3JraW5nX2Rpc2tzKTsNCisJCX0NCiAJfQ0KIH0JDQogDQpAQCAtODg4LDYgKzExODksOCBA QA0KIAlpbnQgbG9ja2VkPTAsIHVwdG9kYXRlPTAsIHRvX3JlYWQ9MCwgdG9fd3JpdGU9MCwgZmFp bGVkPTAsIHdyaXR0ZW49MDsNCiAJaW50IG5vbl9vdmVyd3JpdGUgPSAwOw0KIAlpbnQgZmFpbGVk X251bT0wOw0KKwlpbnQgYXNwYXJlPTAsIGFzcGFyZW51bT0tMTsNCisJc3RydWN0IGRpc2tfaW5m byAqYXNwYXJlZGV2Ow0KIAlzdHJ1Y3QgcjVkZXYgKmRldjsNCiANCiAJUFJJTlRLKCJoYW5kbGlu ZyBzdHJpcGUgJWxsdSwgY250PSVkLCBwZF9pZHg9JWRcbiIsDQpAQCAtODk5LDEwICsxMjAyLDE4 IEBADQogCWNsZWFyX2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7DQogDQogCXN5bmNp bmcgPSB0ZXN0X2JpdChTVFJJUEVfU1lOQ0lORywgJnNoLT5zdGF0ZSk7DQorCWFzcGFyZWRldiA9 ICZjb25mLT5kaXNrc1tjb25mLT5yYWlkX2Rpc2tzXTsNCisJaWYgKCFjb25mLT5tZGRldi0+ZGVn cmFkZWQgJiYgYXNwYXJlZGV2LT5yZGV2ICYmICFhc3BhcmVkZXYtPnJkZXYtPmZhdWx0eSAmJg0K KwkJY29uZi0+bWlycm9yaXQgIT0gLTEpIHsNCisJICAgIGFzcGFyZSsrOw0KKwkgICAgYXNwYXJl bnVtID0gc2gtPnJhaWRfY29uZi0+bWlycm9yaXQ7DQorCSAgICBQUklOVEsoImhhcyBhc3BhcmUg KCVkKVxuIiwgYXNwYXJlbnVtKTsNCisJfQ0KIAkvKiBOb3cgdG8gbG9vayBhcm91bmQgYW5kIHNl ZSB3aGF0IGNhbiBiZSBkb25lICovDQogDQotCWZvciAoaT1kaXNrczsgaS0tOyApIHsNCisJZm9y IChpPWRpc2tzK2FzcGFyZTsgaS0tOyApIHsNCiAJCW1ka19yZGV2X3QgKnJkZXY7DQorCQlzdHJ1 Y3QgYmFkYmxvY2sgKmJiID0gTlVMTDsNCiAJCWRldiA9ICZzaC0+ZGV2W2ldOw0KIAkJY2xlYXJf Yml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KIAkJY2xlYXJfYml0KFI1X1N5bmNpbywgJmRl di0+ZmxhZ3MpOw0KQEAgLTk0NSwxMiArMTI1Niw0MyBAQA0KIAkJfQ0KIAkJaWYgKGRldi0+d3Jp dHRlbikgd3JpdHRlbisrOw0KIAkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7IC8qIEZJWE1F LCBzaG91bGQgSSBiZSBsb29raW5nIHJkZXYgKi8NCi0JCWlmICghcmRldiB8fCAhcmRldi0+aW5f c3luYykgew0KKwkJaWYgKHJkZXYgJiYgcmRldi0+aW5fc3luYyAmJg0KKwkJICAgICF0ZXN0X2Jp dChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpICYmDQorCQkgICAgIXRlc3RfYml0KFI1X0xPQ0tF RCwgJmRldi0+ZmxhZ3MpKSB7DQorCQkJLyogLi5wb3RlbnRpYWxseSBkZXNlcnZlZCB0byByZWFk LCB3ZSBtdXN0IGNoZWNrIGl0DQorCQkJICAgIGNoZWNrbWUsIGl0IGNvdWxkIGJlIGEgYmlnIHBl cmZvcm1hbmNlIHBlbmFsdHkgaWYgY2FsbGVkDQorCQkJCXdpdGhvdXQgYSBnb29kIHJlYXNvbiEg aXQncyBzZWVtcyBvayBmb3Igbm93DQorCQkJKi8NCisJCQlQUklOVEsoImZpbmRfYmFkYmxvY2sg JWQ6ICVsbHVcbiIsIGksIHNoLT5zZWN0b3IpOw0KKwkJCWJiID0gZmluZF9iYWRibG9jaygmY29u Zi0+ZGlza3NbaV0sIHNoLT5zZWN0b3IpOw0KKwkJfQ0KKwkJaWYgKCFyZGV2IHx8ICFyZGV2LT5p bl9zeW5jDQorCQkgICAgfHwgKHRlc3RfYml0KFI1X0ZBSUxFRCwgJmRldi0+ZmxhZ3MpICYmICF0 ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpKQ0KKwkJICAgIHx8IGJiKSB7DQorCQkJ aWYgKHJkZXYgJiYgcmRldi0+aW5fc3luYyAmJiB0ZXN0X2JpdChSNV9GQUlMRUQsICZkZXYtPmZs YWdzKSAmJiAhYmIpIHsNCisJCQkJaWYgKC8qKCFhc3BhcmUgfHwgKGFzcGFyZSAmJiBhc3BhcmVk ZXYtPnJkZXYtPmluX3N5bmMpKSAmJg0KKwkJCQkgICAgaXQgd291bGQgYmUgY2xlYXIsIGJ1dCB0 b28gZWFybHksIHRoZSB0aHJlYWQgaGFzbid0IHdva2VuLCB5ZXQgKi8NCisJCQkJICAgIGNvbmYt Pm1pcnJvcml0ID09IC0xICYmDQorCQkJCSAgICBjb3VudF9iYWRibG9ja3MoJmNvbmYtPmRpc2tz W2ldKSA+PSBzeXNjdGxfYmFkYmxvY2tfdG9sZXJhbmNlKSB7DQorCQkJCQljaGFyIGJbQkRFVk5B TUVfU0laRV07DQorDQorCQkJCQlwcmludGsoS0VSTl9BTEVSVCAidG9vIG1hbnkgYmFkYmxvY2tz ICglbHUpIG9uIGRldmljZSAlcywgbWFya2luZyBhcyBmYWlsZWRcbiIsDQorCQkJCQkJICAgIGNv dW50X2JhZGJsb2NrcygmY29uZi0+ZGlza3NbaV0pICsgMSwgYmRldm5hbWUoY29uZi0+ZGlza3Nb aV0ucmRldi0+YmRldiwgYikpOw0KKwkJCQkJbWRfZXJyb3IoY29uZi0+bWRkZXYsIGNvbmYtPmRp c2tzW2ldLnJkZXYpOw0KKwkJCQl9DQorCQkJCVBSSU5USygic3RvcmVfYmFkYmxvY2sgJWQ6ICVs bHVcbiIsIGksIHNoLT5zZWN0b3IpOw0KKwkJCQlzdG9yZV9iYWRibG9jaygmY29uZi0+ZGlza3Nb aV0sIHNoLT5zZWN0b3IpOw0KKwkJCX0NCiAJCQlmYWlsZWQrKzsNCiAJCQlmYWlsZWRfbnVtID0g aTsNCi0JCX0gZWxzZQ0KKwkJCVBSSU5USygiZGV2aWNlICVkIGZhaWxlZCBmb3IgdGhpcyBzdHJp cGUgciVwIHclcFxuIiwgaSwgZGV2LT50b3JlYWQsIGRldi0+dG93cml0ZSk7DQorCQl9IGVsc2Ug ew0KIAkJCXNldF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncyk7DQorCQl9DQogCX0NCisJaWYg KGFzcGFyZSAmJiBmYWlsZWQgPiAxKQ0KKwkgICAgZmFpbGVkLS07CS8qIGZhaWxlZCA9IDEgbWVh bnMgImFsbCBvayIgaWYgd2UndmUgYXNwYXJlLCB0aGlzIGlzIHNpbXBsZXN0DQorCQkJICAgIG1l dGhvZCB0byBkbyBvdXIgd29yayAqLw0KIAlQUklOVEsoImxvY2tlZD0lZCB1cHRvZGF0ZT0lZCB0 b19yZWFkPSVkIg0KIAkJIiB0b193cml0ZT0lZCBmYWlsZWQ9JWQgZmFpbGVkX251bT0lZFxuIiwN CiAJCWxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWlsZWQsIGZhaWxlZF9u dW0pOw0KQEAgLTEwMTMsNiArMTM1NSw3IEBADQogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRl dmljZV9sb2NrKTsNCiAJfQ0KIAlpZiAoZmFpbGVkID4gMSAmJiBzeW5jaW5nKSB7DQorCQlwcmlu dGsoS0VSTl9BTEVSVCAic3luYyBzdG9wcGVkIGJ5IElPIGVycm9yXG4iKTsNCiAJCW1kX2RvbmVf c3luYyhjb25mLT5tZGRldiwgU1RSSVBFX1NFQ1RPUlMsMCk7DQogCQljbGVhcl9iaXQoU1RSSVBF X1NZTkNJTkcsICZzaC0+c3RhdGUpOw0KIAkJc3luY2luZyA9IDA7DQpAQCAtMTE4NCw2ICsxNTI3 LDI2IEBADQogCQkJCQlQUklOVEsoIldyaXRpbmcgYmxvY2sgJWRcbiIsIGkpOw0KIAkJCQkJbG9j a2VkKys7DQogCQkJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0K KwkJCQkJaWYgKGFzcGFyZSAmJiBpID09IGFzcGFyZW51bSkgew0KKwkJCQkJICAgIGNoYXIgKnBz LCAqcGQ7DQorDQorCQkJCQkgICAgLyogbWlycm9yaW5nIHRoaXMgbmV3IGJsb2NrICovDQorCQkJ CQkgICAgUFJJTlRLKCJXcml0aW5nIHRvIGFzcGFyZSB0b28gJWQtPiVkXG4iLA0KKwkJCQkJCQlp LCBjb25mLT5yYWlkX2Rpc2tzKTsNCisJCQkJCSAgICAvKmlmICh0ZXN0X2JpdChSNV9MT0NLRUQs ICZzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLmZsYWdzKSkgew0KKwkJCQkJCXByaW50aygiYmF6 bWVnLCBleiBsb2trb2x0MSEhIVxuIik7DQorCQkJCQkgICAgfSovDQorCQkJCQkgICAgcHMgPSBw YWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsNCisJCQkJCSAgICBwZCA9IHBhZ2VfYWRkcmVz cyhzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLnBhZ2UpOw0KKwkJCQkJICAgIC8qIGJldHRlciBp ZGVhPyAqLw0KKwkJCQkJICAgIG1lbWNweShwZCwgcHMsIFNUUklQRV9TSVpFKTsNCisJCQkJCSAg ICBzZXRfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbY29uZi0+cmFpZF9kaXNrc10uZmxhZ3MpOw0K KwkJCQkJICAgIHNldF9iaXQoUjVfV2FudHdyaXRlLCAmc2gtPmRldltjb25mLT5yYWlkX2Rpc2tz XS5mbGFncyk7DQorCQkJCQl9DQorCQkJCQlpZiAoY29uZi0+ZGlza3NbaV0ucmRldiAmJiBjb25m LT5kaXNrc1tpXS5yZGV2LT5pbl9zeW5jKSB7DQorCQkJCQkgICAgUFJJTlRLKCJyZXNldCBiYWRi bG9jayBvbiAlZDogJWxsdVxuIiwgaSwgc2gtPnNlY3Rvcik7DQorCQkJCQkgICAgZGVsZXRlX2Jh ZGJsb2NrKCZjb25mLT5kaXNrc1tpXSwgc2gtPnNlY3Rvcik7DQorCQkJCQl9DQogCQkJCQlpZiAo IXRlc3RfYml0KFI1X0luc3luYywgJnNoLT5kZXZbaV0uZmxhZ3MpDQogCQkJCQkgICAgfHwgKGk9 PXNoLT5wZF9pZHggJiYgZmFpbGVkID09IDApKQ0KIAkJCQkJCXNldF9iaXQoU1RSSVBFX0lOU1lO QywgJnNoLT5zdGF0ZSk7DQpAQCAtMTIyMCwyMCArMTU4MywzOSBAQA0KIAkJCWlmIChmYWlsZWQ9 PTApDQogCQkJCWZhaWxlZF9udW0gPSBzaC0+cGRfaWR4Ow0KIAkJCS8qIHNob3VsZCBiZSBhYmxl IHRvIGNvbXB1dGUgdGhlIG1pc3NpbmcgYmxvY2sgYW5kIHdyaXRlIGl0IHRvIHNwYXJlICovDQor CQkJaWYgKGFzcGFyZSkNCisJCQkgICAgZmFpbGVkX251bSA9IGFzcGFyZW51bTsNCiAJCQlpZiAo IXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltmYWlsZWRfbnVtXS5mbGFncykpIHsNCiAJ CQkJaWYgKHVwdG9kYXRlKzEgIT0gZGlza3MpDQogCQkJCQlCVUcoKTsNCiAJCQkJY29tcHV0ZV9i bG9jayhzaCwgZmFpbGVkX251bSk7DQogCQkJCXVwdG9kYXRlKys7DQogCQkJfQ0KKwkJCWlmIChh c3BhcmUpIHsNCisJCQkgICAgY2hhciAqcHMsICpwZDsNCisNCisJCQkgICAgcHMgPSBwYWdlX2Fk ZHJlc3Moc2gtPmRldltmYWlsZWRfbnVtXS5wYWdlKTsNCisJCQkgICAgcGQgPSBwYWdlX2FkZHJl c3Moc2gtPmRldltjb25mLT5yYWlkX2Rpc2tzXS5wYWdlKTsNCisJCQkgICAgbWVtY3B5KHBkLCBw cywgU1RSSVBFX1NJWkUpOw0KKwkJCSAgICBQUklOVEsoIlI1X1dhbnR3cml0ZSB0byBhc3BhcmUs IHVwdG9kYXRlOiAlZCAlcC0+JXBcbiIsDQorCQkJCQl1cHRvZGF0ZSwgcHMsIHBkKTsNCisJCQkg ICAgLyppZiAodGVzdF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltjb25mLT5yYWlkX2Rpc2tzXS5m bGFncykpIHsNCisJCQkJcHJpbnRrKCJiYXptZWcsIGV6IGxva2tvbHQyISEhXG4iKTsNCisJCQkg ICAgfSovDQorCQkJfQ0KIAkJCWlmICh1cHRvZGF0ZSAhPSBkaXNrcykNCiAJCQkJQlVHKCk7DQor CQkJaWYgKGFzcGFyZSkNCisJCQkgICAgZmFpbGVkX251bSA9IGNvbmYtPnJhaWRfZGlza3M7DQog CQkJZGV2ID0gJnNoLT5kZXZbZmFpbGVkX251bV07DQogCQkJc2V0X2JpdChSNV9MT0NLRUQsICZk ZXYtPmZsYWdzKTsNCiAJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJmRldi0+ZmxhZ3MpOw0KIAkJ CWxvY2tlZCsrOw0KIAkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7DQogCQkJ c2V0X2JpdChSNV9TeW5jaW8sICZkZXYtPmZsYWdzKTsNCisJCQkvKiAhaW5fc3luYy4uDQorCQkJ cHJpbnRrKCJyZXNldCBiYWRibG9jayBvbiAlZDogJWxsdVxuIiwgZmFpbGVkX251bSwgc2gtPnNl Y3Rvcik7DQorCQkJZGVsZXRlX2JhZGJsb2NrKCZjb25mLT5kaXNrc1tmYWlsZWRfbnVtXSwgc2gt PnNlY3Rvcik7Ki8NCiAJCX0NCiAJfQ0KIAlpZiAoc3luY2luZyAmJiBsb2NrZWQgPT0gMCAmJiB0 ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSkgew0KQEAgLTEyNTEsNyArMTYzMyw3 IEBADQogCQliaS0+Ymlfc2l6ZSA9IDA7DQogCQliaS0+YmlfZW5kX2lvKGJpLCBieXRlcywgMCk7 DQogCX0NCi0JZm9yIChpPWRpc2tzOyBpLS0gOykgew0KKwlmb3IgKGk9ZGlza3MrYXNwYXJlOyBp LS0gOykgew0KIAkJaW50IHJ3Ow0KIAkJc3RydWN0IGJpbyAqYmk7DQogCQltZGtfcmRldl90ICpy ZGV2Ow0KQEAgLTE0OTMsNiArMTg3NSwxNSBAQA0KIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7DQog CQlyZXR1cm4gMDsNCiAJfQ0KKwkvKiBpZiB0aGVyZSBpcyAxIG9yIG1vcmUgZmFpbGVkIGRyaXZl cyBhbmQgd2UgYXJlIHRyeWluZw0KKwkgKiB0byByZXN5bmMsIHRoZW4gYXNzZXJ0IHRoYXQgd2Ug YXJlIGZpbmlzaGVkLCBiZWNhdXNlIHRoZXJlIGlzDQorCSAqIG5vdGhpbmcgd2UgY2FuIGRvLg0K KwkgKi8NCisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+PSAxICYmIHRlc3RfYml0KE1EX1JFQ09WRVJZ X1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7DQorCQlpbnQgcnYgPSAobWRkZXYtPnNpemUgPDwg MSkgLSBzZWN0b3JfbnI7DQorCQltZF9kb25lX3N5bmMobWRkZXYsIHJ2LCAxKTsNCisJCXJldHVy biBydjsNCisJfQ0KIA0KIAl4ID0gc2VjdG9yX25yOw0KIAljaHVua19vZmZzZXQgPSBzZWN0b3Jf ZGl2KHgsIHNlY3RvcnNfcGVyX2NodW5rKTsNCkBAIC0xNTkxLDExICsxOTgyLDExIEBADQogCX0N CiANCiAJbWRkZXYtPnByaXZhdGUgPSBrbWFsbG9jIChzaXplb2YgKHJhaWQ1X2NvbmZfdCkNCi0J CQkJICArIG1kZGV2LT5yYWlkX2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pLA0KKwkJ CQkgICsgKG1kZGV2LT5yYWlkX2Rpc2tzICsgMSkgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyks DQogCQkJCSAgR0ZQX0tFUk5FTCk7DQogCWlmICgoY29uZiA9IG1kZGV2LT5wcml2YXRlKSA9PSBO VUxMKQ0KIAkJZ290byBhYm9ydDsNCi0JbWVtc2V0IChjb25mLCAwLCBzaXplb2YgKCpjb25mKSAr IG1kZGV2LT5yYWlkX2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pICk7DQorCW1lbXNl dCAoY29uZiwgMCwgc2l6ZW9mICgqY29uZikgKyAobWRkZXYtPnJhaWRfZGlza3MgKyAxKSAqIHNp emVvZihzdHJ1Y3QgZGlza19pbmZvKSApOw0KIAljb25mLT5tZGRldiA9IG1kZGV2Ow0KIA0KIAlp ZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0gKHN0cnVjdCBzdHJpcGVfaGVhZCAqKikgX19nZXRf ZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBIQVNIX1BBR0VTX09SREVSKSkgPT0gTlVMTCkNCkBAIC0x NjI1LDYgKzIwMTYsOCBAQA0KIA0KIAkJZGlzay0+cmRldiA9IHJkZXY7DQogDQorCQlncm93X2Jh ZGJsb2NrcyhkaXNrKTsNCisNCiAJCWlmIChyZGV2LT5pbl9zeW5jKSB7DQogCQkJY2hhciBiW0JE RVZOQU1FX1NJWkVdOw0KIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBkZXZpY2UgJXMgb3Bl cmF0aW9uYWwgYXMgcmFpZCINCkBAIC0xNjM1LDYgKzIwMjgsNyBAQA0KIAl9DQogDQogCWNvbmYt PnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsNCisJY29uZi0+bWlycm9yaXQgPSAtMTsN CiAJLyoNCiAJICogMCBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LCAxIGZvciBhIGRlZ3Jh ZGVkIGFycmF5Lg0KIAkgKi8NCkBAIC0xNjg0LDcgKzIwNzgsNyBAQA0KIAkJfQ0KIAl9DQogbWVt b3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkg Kw0KLQkJIGNvbmYtPnJhaWRfZGlza3MgKiAoKHNpemVvZihzdHJ1Y3QgYmlvKSArIFBBR0VfU0la RSkpKSAvIDEwMjQ7DQorCQkgKGNvbmYtPnJhaWRfZGlza3MrMSkgKiAoKHNpemVvZihzdHJ1Y3Qg YmlvKSArIFBBR0VfU0laRSkpKSAvIDEwMjQ7DQogCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29u Zi0+bWF4X25yX3N0cmlwZXMpKSB7DQogCQlwcmludGsoS0VSTl9FUlIgDQogCQkJInJhaWQ1OiBj b3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkpOw0KQEAgLTE3Mzks MTAgKzIxMzMsMTQgQEANCiBzdGF0aWMgaW50IHN0b3AgKG1kZGV2X3QgKm1kZGV2KQ0KIHsNCiAJ cmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsNCisJ aW50IGk7DQogDQogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOw0KIAltZGRl di0+dGhyZWFkID0gTlVMTDsNCiAJc2hyaW5rX3N0cmlwZXMoY29uZik7DQorCWZvciAoaSA9IGNv bmYtPnJhaWRfZGlza3M7IGktLTsgKQ0KKwkJaWYgKGNvbmYtPmRpc2tzW2ldLnJkZXYgJiYgY29u Zi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYykNCisJCQlzaHJpbmtfYmFkYmxvY2tzKCZjb25mLT5k aXNrc1tpXSk7DQogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGNvbmYtPnN0cmlwZV9oYXNo dGJsLCBIQVNIX1BBR0VTX09SREVSKTsNCiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsg LyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovDQogCWtmcmVlKGNvbmYpOw0KQEAg LTE3ODgsNyArMjE4Niw5IEBADQogc3RhdGljIHZvaWQgc3RhdHVzIChzdHJ1Y3Qgc2VxX2ZpbGUg KnNlcSwgbWRkZXZfdCAqbWRkZXYpDQogew0KIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVf Y29uZl90ICopIG1kZGV2LT5wcml2YXRlOw0KLQlpbnQgaTsNCisJaW50IGksIGo7DQorCWNoYXIg YltCREVWTkFNRV9TSVpFXTsNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCiANCiAJc2VxX3ByaW50 ZiAoc2VxLCAiIGxldmVsICVkLCAlZGsgY2h1bmssIGFsZ29yaXRobSAlZCIsIG1kZGV2LT5sZXZl bCwgbWRkZXYtPmNodW5rX3NpemUgPj4gMTAsIG1kZGV2LT5sYXlvdXQpOw0KIAlzZXFfcHJpbnRm IChzZXEsICIgWyVkLyVkXSBbIiwgY29uZi0+cmFpZF9kaXNrcywgY29uZi0+d29ya2luZ19kaXNr cyk7DQpAQCAtMTgwMSw2ICsyMjAxLDIwIEBADQogI2RlZmluZSBEKHgpIFwNCiAJc2VxX3ByaW50 ZiAoc2VxLCAiPCIjeCI6JWQ+IiwgYXRvbWljX3JlYWQoJmNvbmYtPngpKQ0KIAlwcmludGFsbChj b25mKTsNCisNCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwkvKiBpdCdzIG9r IG5vdyBmb3IgZGVidWcgKi8NCisJc2VxX3ByaW50ZiAoc2VxLCAiXG4gICAgICBrbm93biBiYWQg c2VjdG9ycyBvbiBhY3RpdmUgZGV2aWNlczoiKTsNCisJZm9yIChpID0gY29uZi0+cmFpZF9kaXNr czsgaS0tOyApIHsNCisJICAgIGlmIChjb25mLT5kaXNrc1tpXS5yZGV2KSB7DQorCQlzZXFfcHJp bnRmIChzZXEsICJcbiAgICAgICVzIiwgYmRldm5hbWUoY29uZi0+ZGlza3NbaV0ucmRldi0+YmRl diwgYikpOw0KKwkJZm9yIChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJICAgIGJi ID0gY29uZi0+ZGlza3NbaV0uYmFkYmxvY2tfaGFzaHRibFtqXTsNCisJCSAgICBmb3IgKDsgYmI7 IGJiID0gYmItPmhhc2hfbmV4dCkNCisJCQlzZXFfcHJpbnRmIChzZXEsICIgJWxsdS0lbGx1Iiwg YmItPnNlY3RvciwgYmItPnNlY3RvciArICh1bnNpZ25lZCBsb25nIGxvbmcpKFNUUklQRV9TSVpF IC8gNTEyKSAtIDEpOw0KKwkJfQ0KKwkgICAgfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2lycSgmY29u Zi0+ZGV2aWNlX2xvY2spOw0KICNlbmRpZg0KIH0NCiANCkBAIC0xODQ0LDYgKzIyNTgsMTcgQEAN CiAJCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOw0KIAkJfQ0KIAl9DQorCXRtcCA9IGNvbmYtPmRp c2tzICsgaTsNCisJaWYgKHRtcC0+cmRldiAmJiAhdG1wLT5yZGV2LT5mYXVsdHkgJiYgIXRtcC0+ cmRldi0+aW5fc3luYykgew0KKwkgICAgLyogc3luYyBkb25lIHRvIHRoZSAnYWN0aXZlIHNwYXJl JyAqLw0KKwkgICAgdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsNCisNCisJICAgIHByaW50ayhLRVJO X05PVElDRSAicmFpZDVfc3BhcmVfYWN0aXZlOiAlZCBpbl9zeW5jICVkLT4lZFxuIiwNCisJCQlp LCB0bXAtPnJkZXYtPnJhaWRfZGlzaywgY29uZi0+bWlycm9yaXQpOw0KKw0KKwkgICAgLyogc2Nh cnkuLj8gOn0gKi8NCisJICAgIHRtcC0+cmRldi0+cmFpZF9kaXNrID0gY29uZi0+bWlycm9yaXQ7 DQorCX0NCiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsNCiAJcmV0dXJuIDA7DQogfQ0KQEAgLTE4 NTcsNiArMjI4Miw3IEBADQogDQogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7DQogCXJkZXYgPSBw LT5yZGV2Ow0KK3ByaW50aygicmFpZDVfcmVtb3ZlX2Rpc2sgJWRcbiIsIG51bWJlcik7DQogCWlm IChyZGV2KSB7DQogCQlpZiAocmRldi0+aW5fc3luYyB8fA0KIAkJICAgIGF0b21pY19yZWFkKCZy ZGV2LT5ucl9wZW5kaW5nKSkgew0KQEAgLTE4NzAsNiArMjI5Niw4IEBADQogCQkJZXJyID0gLUVC VVNZOw0KIAkJCXAtPnJkZXYgPSByZGV2Ow0KIAkJfQ0KKwkJaWYgKCFlcnIpDQorCQkJc2hyaW5r X2JhZGJsb2NrcyhwKTsNCiAJfQ0KIGFib3J0Og0KIA0KQEAgLTE4ODQsNiArMjMxMiwxMCBAQA0K IAlpbnQgZGlzazsNCiAJc3RydWN0IGRpc2tfaW5mbyAqcDsNCiANCisJaWYgKG1kZGV2LT5kZWdy YWRlZCA+IDEpDQorCQkvKiBubyBwb2ludCBhZGRpbmcgYSBkZXZpY2UgKi8NCisJCXJldHVybiAw Ow0KKw0KIAkvKg0KIAkgKiBmaW5kIHRoZSBkaXNrIC4uLg0KIAkgKi8NCkBAIC0xODk1LDYgKzIz MjcsMjIgQEANCiAJCQlwLT5yZGV2ID0gcmRldjsNCiAJCQlicmVhazsNCiAJCX0NCisNCisJaWYg KCFmb3VuZCkgew0KKwkgICAgLyogYXJyYXkgb3B0aW1hbCwgdGhpcyBzaG91bGQgYmUgdGhlICdh Y3RpdmUgc3BhcmUnICovDQorCSAgICBjb25mLT5kaXNrc1tkaXNrXS5yZGV2ID0gcmRldjsNCisJ ICAgIHJkZXYtPmluX3N5bmMgPSAwOw0KKwkgICAgcmRldi0+cmFpZF9kaXNrID0gY29uZi0+cmFp ZF9kaXNrczsNCisNCisJICAgIG1kZGV2LT5kZWdyYWRlZC0tOw0KKwkgICAgZm91bmQrKzsJLyog Y2FsbCByZXN5bmMgKi8NCisNCisJICAgIHByaW50ayhLRVJOX0lORk8gImFkZGVkIHNwYXJlIGZv ciBhY3RpdmUgcmVzeW5jXG4iKTsNCisJfQ0KKwlpZiAoZm91bmQpDQorCQlncm93X2JhZGJsb2Nr cygmY29uZi0+ZGlza3NbZGlza10pOw0KKwlwcmludGsoS0VSTl9JTkZPICJyYWlkNV9hZGRfZGlz azogJWQgKCVkKVxuIiwgZGlzaywgZm91bmQpOw0KKw0KIAlwcmludF9yYWlkNV9jb25mKGNvbmYp Ow0KIAlyZXR1cm4gZm91bmQ7DQogfQ0K --=-qUfi0mPUCbSVjUIavgzS--