From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pallai Roland Subject: Re: [PATCH] proactive raid5 disk replacement for 2.6.11 [fixed patch] Date: Sun, 14 Aug 2005 23:29:09 +0200 Message-ID: <1124054949.3810.34.camel@localhost.localdomain> References: <1124050204.3810.28.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-qbhBH6SxgEViRcTt+0Yf" Return-path: In-Reply-To: <1124050204.3810.28.camel@localhost.localdomain> Sender: linux-raid-owner@vger.kernel.org To: linux-raid@vger.kernel.org List-Id: linux-raid.ids --=-qbhBH6SxgEViRcTt+0Yf Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sun, 2005-08-14 at 22:10 +0200, Pallai Roland wrote: > this is a feature patch that implements 'proactive raid5 disk > replacement' (http://www.arctic.org/~dean/raid-wishlist.html), > [...] sorry, the previous patch doesn't work against vanilla kernel, this one do.. -- dap --=-qbhBH6SxgEViRcTt+0Yf Content-Disposition: attachment; filename=04_raid5-asp-dap2.diff Content-Type: text/x-patch; name=04_raid5-asp-dap2.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 bWQwIDogYWN0aXZlIHJhaWQ1IHJhbTRbMF0gbWQzWzJdIG1kMlsxXQ0KDQoNCi4uIEkgaG9wZSBz b21lb25lIGNhbiB1c2UgaXQgZm9yIHNvbWV0aGluZywgZm9yIG1lIGl0J3MgYSBtdXN0aGF2ZSBm ZWF0dXJlIC4uDQoNCg0KLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oLm9yaWcJ MjAwNS0wMy0wMyAyMzo1MToyOS4wMDAwMDAwMDAgKzAxMDANCisrKyBsaW51eC9pbmNsdWRlL2xp bnV4L3JhaWQvcmFpZDUuaAkyMDA1LTA4LTE0IDAzOjAyOjExLjAwMDAwMDAwMCArMDIwMA0KQEAg LTE0Nyw2ICsxNDcsNyBAQA0KICNkZWZpbmUJUjVfVVBUT0RBVEUJMAkvKiBwYWdlIGNvbnRhaW5z IGN1cnJlbnQgZGF0YSAqLw0KICNkZWZpbmUJUjVfTE9DS0VECTEJLyogSU8gaGFzIGJlZW4gc3Vi bWl0dGVkIG9uICJyZXEiICovDQogI2RlZmluZQlSNV9PVkVSV1JJVEUJMgkvKiB0b3dyaXRlIGNv dmVycyB3aG9sZSBwYWdlICovDQorI2RlZmluZQlSNV9GQUlMRUQJOAkvKiBmYWlsZWQgdG8gcmVh ZCB0aGlzIHN0cmlwZSAqLw0KIC8qIGFuZCBzb21lIHRoYXQgYXJlIGludGVybmFsIHRvIGhhbmRs ZV9zdHJpcGUgKi8NCiAjZGVmaW5lCVI1X0luc3luYwkzCS8qIHJkZXYgJiYgcmRldi0+aW5fc3lu YyBhdCBzdGFydCAqLw0KICNkZWZpbmUJUjVfV2FudHJlYWQJNAkvKiB3YW50IHRvIHNjaGVkdWxl IGEgcmVhZCAqLw0KQEAgLTIyNCw2ICsyMjUsOCBAQA0KIAlpbnQJCQlpbmFjdGl2ZV9ibG9ja2Vk OwkvKiByZWxlYXNlIG9mIGluYWN0aXZlIHN0cmlwZXMgYmxvY2tlZCwNCiAJCQkJCQkJICogd2Fp dGluZyBmb3IgMjUlIHRvIGJlIGZyZWUNCiAJCQkJCQkJICovICAgICAgICANCisJaW50CQkJbWly cm9yaXQ7IC8qIHNvdXJjZSBmb3IgYWN0aXZlIHNwYXJlIHJlc3luYyAqLw0KKw0KIAlzcGlubG9j a190CQlkZXZpY2VfbG9jazsNCiAJc3RydWN0IGRpc2tfaW5mbwlkaXNrc1swXTsNCiB9Ow0KLS0t IGxpbnV4L2RyaXZlcnMvbWQvbWQuYy5vcmlnCTIwMDUtMDgtMTQgMjE6MjI6MDguMDAwMDAwMDAw ICswMjAwDQorKysgbGludXgvZHJpdmVycy9tZC9tZC5jCTIwMDUtMDgtMTQgMTc6MjA6MTUuMDAw MDAwMDAwICswMjAwDQpAQCAtMzU0NSwxOCArMzU0NywxOSBAQA0KIA0KIAkJLyogbm8gcmVjb3Zl cnkgaXMgcnVubmluZy4NCiAJCSAqIHJlbW92ZSBhbnkgZmFpbGVkIGRyaXZlcywgdGhlbg0KLQkJ ICogYWRkIHNwYXJlcyBpZiBwb3NzaWJsZQ0KKwkJICogYWRkIHNwYXJlcyBpZiBwb3NzaWJsZS4N CisJCSAqIFNwYXJlIGFyZSBhbHNvIHJlbW92ZWQgYW5kIHJlLWFkZGVkLCB0byBhbGxvdw0KKwkJ ICogdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlIHJlLWFkZC4NCiAJCSAqLw0KLQkJSVRFUkFU RV9SREVWKG1kZGV2LHJkZXYscnRtcCkgew0KKwkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRt cCkNCiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYNCi0JCQkgICAgcmRldi0+ZmF1bHR5 ICYmDQorCQkJICAgIChyZGV2LT5mYXVsdHkgfHwgISByZGV2LT5pbl9zeW5jKSAmJg0KIAkJCSAg ICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZyk9PTApIHsNCitwcmludGsoIm1kX2NoZWNr X3JlY292ZXJ5OiBob3RfcmVtb3ZlX2Rpc2tcbiIpOw0KIAkJCQlpZiAobWRkZXYtPnBlcnMtPmhv dF9yZW1vdmVfZGlzayhtZGRldiwgcmRldi0+cmFpZF9kaXNrKT09MCkNCiAJCQkJCXJkZXYtPnJh aWRfZGlzayA9IC0xOw0KIAkJCX0NCi0JCQlpZiAoIXJkZXYtPmZhdWx0eSAmJiByZGV2LT5yYWlk X2Rpc2sgPj0gMCAmJiAhcmRldi0+aW5fc3luYykNCi0JCQkJc3BhcmVzKys7DQotCQl9DQorDQog CQlpZiAobWRkZXYtPmRlZ3JhZGVkKSB7DQogCQkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRt cCkNCiAJCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDANCkBAIC0zNzY0LDQgKzM3NzEsNSBAQA0K IEVYUE9SVF9TWU1CT0wobWRfd2FrZXVwX3RocmVhZCk7DQogRVhQT1JUX1NZTUJPTChtZF9wcmlu dF9kZXZpY2VzKTsNCiBFWFBPUlRfU1lNQk9MKG1kX2NoZWNrX3JlY292ZXJ5KTsNCitFWFBPUlRf U1lNQk9MKGtpY2tfcmRldl9mcm9tX2FycmF5KTsJLy8gZml4bWUNCiBNT0RVTEVfTElDRU5TRSgi R1BMIik7DQotLS0gbGludXgvZHJpdmVycy9tZC9yYWlkNS5jLm9yaWcJMjAwNS0wOC0xNCAyMToy MjowOC4wMDAwMDAwMDAgKzAyMDANCisrKyBsaW51eC9kcml2ZXJzL21kL3JhaWQ1LmMJMjAwNS0w OC0xNCAyMDo0OTo0OS4wMDAwMDAwMDAgKzAyMDANCkBAIC01Myw3ICs1Myw3IEBADQogLyoNCiAg KiBUaGUgZm9sbG93aW5nIGNhbiBiZSB1c2VkIHRvIGRlYnVnIHRoZSBkcml2ZXINCiAgKi8NCi0j ZGVmaW5lIFJBSUQ1X0RFQlVHCTANCisjZGVmaW5lIFJBSUQ1X0RFQlVHCTENCiAjZGVmaW5lIFJB SUQ1X1BBUkFOT0lBCTENCiAjaWYgUkFJRDVfUEFSQU5PSUEgJiYgZGVmaW5lZChDT05GSUdfU01Q KQ0KICMgZGVmaW5lIENIRUNLX0RFVkxPQ0soKSBhc3NlcnRfc3Bpbl9sb2NrZWQoJmNvbmYtPmRl dmljZV9sb2NrKQ0KQEAgLTYxLDcgKzYxLDcgQEANCiAjIGRlZmluZSBDSEVDS19ERVZMT0NLKCkN CiAjZW5kaWYNCiANCi0jZGVmaW5lIFBSSU5USyh4Li4uKSAoKHZvaWQpKFJBSUQ1X0RFQlVHICYm IHByaW50ayh4KSkpDQorI2RlZmluZSBQUklOVEsoeC4uLikgKCh2b2lkKShSQUlENV9ERUJVRyAm JiBwcmludGsoS0VSTl9ERUJVRyB4KSkpDQogI2lmIFJBSUQ1X0RFQlVHDQogI2RlZmluZSBpbmxp bmUNCiAjZGVmaW5lIF9faW5saW5lX18NCkBAIC0yMDEsNyArMjAxLDcgQEANCiAJc2gtPnBkX2lk eCA9IHBkX2lkeDsNCiAJc2gtPnN0YXRlID0gMDsNCiANCi0JZm9yIChpPWRpc2tzOyBpLS07ICkg ew0KKwlmb3IgKGk9ZGlza3MrMTsgaS0tOyApIHsNCiAJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNo LT5kZXZbaV07DQogDQogCQlpZiAoZGV2LT50b3JlYWQgfHwgZGV2LT50b3dyaXRlIHx8IGRldi0+ d3JpdHRlbiB8fA0KQEAgLTI5MSw4ICsyOTEsMTAgQEANCiANCiAJc3ByaW50Zihjb25mLT5jYWNo ZV9uYW1lLCAicmFpZDUvJXMiLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsNCiANCisJLyogKzE6IHdl IG5lZWQgZXh0cmEgc3BhY2UgaW4gdGhlICpzaC0+ZGV2cyBmb3IgdGhlICdhY3RpdmUgc3BhcmUn IHRvIGtlZXANCisJICAgIGhhbmRsZV9zdHJpcGUoKSBzaW1wbGUgKi8NCiAJc2MgPSBrbWVtX2Nh Y2hlX2NyZWF0ZShjb25mLT5jYWNoZV9uYW1lLCANCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBz dHJpcGVfaGVhZCkrKGRldnMtMSkqc2l6ZW9mKHN0cnVjdCByNWRldiksDQorCQkJICAgICAgIHNp emVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTErMSkqc2l6ZW9mKHN0cnVjdCByNWRldiks DQogCQkJICAgICAgIDAsIDAsIE5VTEwsIE5VTEwpOw0KIAlpZiAoIXNjKQ0KIAkJcmV0dXJuIDE7 DQpAQCAtMzAxLDEyICszMDMsMTIgQEANCiAJCXNoID0ga21lbV9jYWNoZV9hbGxvYyhzYywgR0ZQ X0tFUk5FTCk7DQogCQlpZiAoIXNoKQ0KIAkJCXJldHVybiAxOw0KLQkJbWVtc2V0KHNoLCAwLCBz aXplb2YoKnNoKSArIChkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsNCisJCW1lbXNldChz aCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGV2cy0xKzEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsNCiAJ CXNoLT5yYWlkX2NvbmYgPSBjb25mOw0KIAkJc3Bpbl9sb2NrX2luaXQoJnNoLT5sb2NrKTsNCiAN Ci0JCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7DQotCQkJc2hyaW5r X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOw0KKwkJaWYgKGdyb3dfYnVmZmVycyhzaCwg Y29uZi0+cmFpZF9kaXNrcysxKSkgew0KKwkJCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlk X2Rpc2tzKzEpOw0KIAkJCWttZW1fY2FjaGVfZnJlZShzYywgc2gpOw0KIAkJCXJldHVybiAxOw0K IAkJfQ0KQEAgLTM5MSwxMCArMzkzLDM5IEBADQogCQl9DQogI2Vsc2UNCiAJCXNldF9iaXQoUjVf VVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCisJCWNsZWFyX2JpdChSNV9GQUlMRUQsICZz aC0+ZGV2W2ldLmZsYWdzKTsNCiAjZW5kaWYJCQ0KIAl9IGVsc2Ugew0KKwkgICAgY2hhciBiW0JE RVZOQU1FX1NJWkVdOw0KKw0KKwkgICAgLyoNCisJCXJ1bGUgMS4sOiB0cnkgdG8ga2VlcCBhbGwg ZGlzayBpbl9zeW5jIGV2ZW4gaWYgd2UndmUgZ290IHJlYWQgZXJyb3JzLA0KKwkJY2F1c2UgdGhl ICdhY3RpdmUgc3BhcmUnIG1heWJlIGNhbiByZWJ1aWxkIGEgY29tcGxldGUgY29sdW1uIGZyb20N CisJCXBhcnRpYWxseSBmYWlsZWQgZHJpdmVzDQorCSAgICAqLw0KKwkgICAgaWYgKGNvbmYtPmRp c2tzW2ldLnJkZXYtPmluX3N5bmMgJiYgY29uZi0+d29ya2luZ19kaXNrcyA8IGNvbmYtPnJhaWRf ZGlza3MpIHsNCisJCS8qIGJhZCBuZXdzLCBidXQga2VlcCBpdCwgY2F1c2UgbWRfZXJyb3IoKSB3 b3VsZCBkbyBhIGNvbXBsZXRlDQorCQkgICAgYXJyYXkgc2h1dGRvd24sIGV2ZW4gaWYgOTkuOTkl IGlzIHVzZWFibGUgKi8NCisJCXByaW50ayhLRVJOX0FMRVJUDQorCQkJInJhaWQ1X2VuZF9yZWFk X3JlcXVlc3Q6IFJlYWQgZmFpbHVyZSAlcyBvbiBzZWN0b3IgJWxsdSAoJWQpIGluIGRlZ3JhZGVk IG1vZGVcbiINCisJCQksYmRldm5hbWUoY29uZi0+ZGlza3NbaV0ucmRldi0+YmRldiwgYiksDQor CQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBhdG9taWNfcmVhZCgmc2gtPmNvdW50 KSk7DQorCQlpZiAoY29uZi0+bWRkZXYtPmN1cnJfcmVzeW5jKQ0KKwkJICAgIC8qIHJhaWQ1X2Fk ZF9kaXNrKCkgd2lsbCBubyBhY2NlcHQgdGhlIHNwYXJlIGFnYWluLA0KKwkJCWFuZCB3aWxsIG5v dCBsb29wIGZvcmV2ZXIgKi8NCisJCSAgICBjb25mLT5tZGRldi0+ZGVncmFkZWQgPSAyOw0KKwkg ICAgfSBlbHNlIGlmIChjb25mLT5kaXNrc1tpXS5yZGV2LT5pbl9zeW5jICYmIGNvbmYtPndvcmtp bmdfZGlza3MgPj0gY29uZi0+cmFpZF9kaXNrcykgew0KKwkJLyogd2lsbCBiZSBjb21wdXRlZCAq Lw0KKwkJcHJpbnRrKEtFUk5fQUxFUlQNCisJCQkicmFpZDVfZW5kX3JlYWRfcmVxdWVzdDogUmVh ZCBmYWlsdXJlICVzIG9uIHNlY3RvciAlbGx1ICglZCkgaW4gb3B0aW1hbCBtb2RlXG4iDQorCQkJ LGJkZXZuYW1lKGNvbmYtPmRpc2tzW2ldLnJkZXYtPmJkZXYsIGIpLA0KKwkJCSh1bnNpZ25lZCBs b25nIGxvbmcpc2gtPnNlY3RvciwgYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpOw0KKwkJLyogY29u Zi0+ZGlza3NbaV0ucmVycisrICovDQorCSAgICB9IGVsc2UNCisJCS8qIHByYWN0aWNhbGx5IGl0 IG5ldmVyIGhhcHBlbnMgKi8NCiAJCW1kX2Vycm9yKGNvbmYtPm1kZGV2LCBjb25mLT5kaXNrc1tp XS5yZGV2KTsNCi0JCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0K KwkgICAgY2xlYXJfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncyk7DQorCSAgICBz ZXRfYml0KFI1X0ZBSUxFRCwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0KIAl9DQogCXJkZXZfZGVjX3Bl bmRpbmcoY29uZi0+ZGlza3NbaV0ucmRldiwgY29uZi0+bWRkZXYpOw0KICNpZiAwDQpAQCAtNDMw LDEwICs0NjEsMTEgQEANCiAJUFJJTlRLKCJlbmRfd3JpdGVfcmVxdWVzdCAlbGx1LyVkLCBjb3Vu dCAlZCwgdXB0b2RhdGU6ICVkLlxuIiwgDQogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0 b3IsIGksIGF0b21pY19yZWFkKCZzaC0+Y291bnQpLA0KIAkJdXB0b2RhdGUpOw0KKwkvKiBzb3Jy eQ0KIAlpZiAoaSA9PSBkaXNrcykgew0KIAkJQlVHKCk7DQogCQlyZXR1cm4gMDsNCi0JfQ0KKwl9 Ki8NCiANCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7DQog CWlmICghdXB0b2RhdGUpDQpAQCAtNDY3LDMzICs0OTksMTQyIEBADQogCWRldi0+cmVxLmJpX3By aXZhdGUgPSBzaDsNCiANCiAJZGV2LT5mbGFncyA9IDA7DQotCWlmIChpICE9IHNoLT5wZF9pZHgp DQorCWlmIChpICE9IHNoLT5wZF9pZHggJiYgaSA8IHNoLT5yYWlkX2NvbmYtPnJhaWRfZGlza3Mp CS8qIGFjdGl2ZSBzcGFyZT8gKi8NCiAJCWRldi0+c2VjdG9yID0gY29tcHV0ZV9ibG9ja25yKHNo LCBpKTsNCiB9DQogDQorc3RhdGljIGludCByYWlkNV9yZW1vdmVfZGlzayhtZGRldl90ICptZGRl diwgaW50IG51bWJlcik7DQorc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhtZGRldl90ICptZGRl diwgbWRrX3JkZXZfdCAqcmRldik7DQorLypzdGF0aWMqLyB2b2lkIGtpY2tfcmRldl9mcm9tX2Fy cmF5KG1ka19yZGV2X3QgKiByZGV2KTsNCisvL3N0YXRpYyB2b2lkIG1kX3VwZGF0ZV9zYihtZGRl dl90ICogbWRkZXYpOw0KIHN0YXRpYyB2b2lkIGVycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRl dl90ICpyZGV2KQ0KIHsNCiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOw0KKwljaGFyIGIyW0JERVZO QU1FX1NJWkVdOw0KIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2 LT5wcml2YXRlOw0KIAlQUklOVEsoInJhaWQ1OiBlcnJvciBjYWxsZWRcbiIpOw0KIA0KIAlpZiAo IXJkZXYtPmZhdWx0eSkgew0KLQkJbWRkZXYtPnNiX2RpcnR5ID0gMTsNCi0JCWlmIChyZGV2LT5p bl9zeW5jKSB7DQotCQkJY29uZi0+d29ya2luZ19kaXNrcy0tOw0KLQkJCW1kZGV2LT5kZWdyYWRl ZCsrOw0KLQkJCWNvbmYtPmZhaWxlZF9kaXNrcysrOw0KLQkJCXJkZXYtPmluX3N5bmMgPSAwOw0K LQkJCS8qDQotCQkJICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5pbmcsIG1ha2Ugc3VyZSBpdCBhYm9y dHMuDQotCQkJICovDQotCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3Zl cnkpOw0KLQkJfQ0KLQkJcmRldi0+ZmF1bHR5ID0gMTsNCi0JCXByaW50ayAoS0VSTl9BTEVSVA0K LQkJCSJyYWlkNTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiINCi0JCQki IE9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXNcbiIsDQotCQkJYmRldm5hbWUocmRl di0+YmRldixiKSwgY29uZi0+d29ya2luZ19kaXNrcyk7DQorCQlpbnQgbWRkaXNrcyA9IDA7DQor CQltZGtfcmRldl90ICpyZDsNCisJCW1ka19yZGV2X3QgKnJkZXZzID0gTlVMTDsNCisJCXN0cnVj dCBsaXN0X2hlYWQgKnJ0bXA7DQorCQlpbnQgaTsNCisNCisJCUlURVJBVEVfUkRFVihtZGRldixy ZCxydG1wKQ0KKwkJICAgIHsNCisJCQlwcmludGsoS0VSTl9JTkZPICJtZGRldiVkOiAlc1xuIiwg bWRkaXNrcywgYmRldm5hbWUocmQtPmJkZXYsYikpOw0KKwkJCW1kZGlza3MrKzsNCisJCSAgICB9 DQorCQlmb3IgKGkgPSAwOyAocmQgPSBjb25mLT5kaXNrc1tpXS5yZGV2KTsgaSsrKSB7DQorCQkJ cHJpbnRrKEtFUk5fSU5GTyAicjVkZXYlZDogJXNcbiIsIGksIGJkZXZuYW1lKHJkLT5iZGV2LGIp KTsNCisJCX0NCisJCUlURVJBVEVfUkRFVihtZGRldixyZCxydG1wKQ0KKwkJICAgIHsNCisJCQly ZGV2cyA9IHJkOw0KKwkJCWJyZWFrOw0KKwkJICAgIH0NCitwcmludGsoIiVkICVkID4gJWQgJWQg aW5zOiVkICVwXG4iLA0KKwltZGRldi0+cmFpZF9kaXNrcywgbWRkaXNrcywgY29uZi0+cmFpZF9k aXNrcywgbWRkZXYtPmRlZ3JhZGVkLCByZGV2LT5pbl9zeW5jLCByZGV2cyk7DQorCQlpZiAoY29u Zi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10ucmRldiA9PSByZGV2ICYmIHJkZXYtPmluX3N5bmMp IHsNCisJCSAgICAvKiBpbl9zeW5jLCBidXQgbXVzdCBiZSBoYW5kbGVkIHNwZWNpYWxseSwgZG9u J3QgbGV0ICdkZWdyYWRlZCsrJyAqLw0KKwkJICAgIHByaW50ayAoImFjdGl2ZSBzcGFyZSBmYWls ZWQgJXMgKGluX3N5bmMpXG4iLA0KKwkJCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsNCisJCSAg ICBtZGRldi0+c2JfZGlydHkgPSAxOw0KKwkJICAgIHJkZXYtPmluX3N5bmMgPSAwOw0KKwkJICAg IHJkZXYtPmZhdWx0eSA9IDE7DQorCQkgICAgcmRldi0+cmFpZF9kaXNrID0gY29uZi0+cmFpZF9k aXNrczsJCS8qIG1lIGFzIG15c2VsZiwgYWdhaW4gOykgKi8NCisJCSAgICBjb25mLT5taXJyb3Jp dCA9IC0xOw0KKwkJfSBlbHNlIGlmIChtZGRpc2tzID4gY29uZi0+cmFpZF9kaXNrcyAmJiAhbWRk ZXYtPmRlZ3JhZGVkICYmIHJkZXYtPmluX3N5bmMpIHsNCisJCSAgICAvKiBoYXZlIGFjdGl2ZSBz cGFyZSwgYXJyYXkgaXMgb3B0aW1hbCwgcmVtb3ZlZCBkaXNrIG1lbWJlcg0KKwkJCSAgICBvZiBp dCAoYnV0IG5vdCB0aGUgYWN0aXZlIHNwYXJlKSAqLw0KKwkJICAgIGlmIChyZGV2LT5yYWlkX2Rp c2sgPT0gY29uZi0+bWlycm9yaXQgJiYgY29uZi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10ucmRl dikgew0KKwkJCWlmICghY29uZi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10ucmRldi0+aW5fc3lu Yykgew0KKwkJCSAgICBwcmludGsoS0VSTl9BTEVSVCAiZGlzayAlcyBmYWlsZWQgYW5kIGFjdGl2 ZSBzcGFyZSBpc24ndCBpbl9zeW5jIHlldCwgcmVhZGQgYXMgbm9ybWFsIHNwYXJlXG4iLA0KKwkJ CQkJYmRldm5hbWUocmRldi0+YmRldixiKSk7DQorCQkJICAgIC8qIG1heWJlIHNob3VsZG4ndCBz dG9wIGhlcmUsIGJ1dCB3ZSBjYW4ndCBjYWxsIHRoaXMgZGlzayBhcw0KKwkJCQknYWN0aXZlIHNw YXJlJyBhbnltb3JlLCBjYXVzZSBpdCdzIGEgc2ltcGxlIHJlYnVpbGQgZnJvbQ0KKwkJCQlhIGRl Z3JhZGVkIGFycmF5LCBmZWFyIG9mIGJhZCBibG9ja3MhICovDQorCQkJICAgIGNvbmYtPm1pcnJv cml0ID0gLTE7DQorCQkJICAgIGdvdG8gbGV0aXRnbzsNCisJCQl9IGVsc2Ugew0KKwkJCSAgICBp bnQgcmV0Ow0KKw0KKwkJCSAgICAvKiBob3QgcmVwbGFjZSB0aGUgc3luY2VkIGRyaXZlIHdpdGgg dGhlICdhY3RpdmUgc3BhcmUnDQorCQkJCXRoaXMgaXMgcmVhbGx5ICJob3QiLCBJIGNhbid0IHNl ZSBjbGVhcmx5IHRoZSB0aGluZ3MNCisJCQkJd2hhdCBJIGhhdmUgdG8gZG8gaGVyZS4gOn0NCisJ CQkJcHJheS4gKi8NCisNCisJCQkgICAgcHJpbnRrKEtFUk5fQUxFUlQgInJlcGxhY2UgJXMgd2l0 aCBpbl9zeW5jIGFjdGl2ZSBzcGFyZSAlc1xuIiwNCisJCQkJICAgIGJkZXZuYW1lKHJkZXYtPmJk ZXYsYiksDQorCQkJCSAgICBiZGV2bmFtZShyZGV2cy0+YmRldixiMikpOw0KKwkJCSAgICByZGV2 LT5pbl9zeW5jID0gMDsNCisJCQkgICAgcmRldi0+ZmF1bHR5ID0gMTsNCisNCisJCQkgICAgY29u Zi0+bWlycm9yaXQgPSAtMTsNCisNCisJCQkgICAgLyogbXkgR29kLCBhbSBJIHNhbmU/ICovDQor CQkJICAgIHdoaWxlICgoaSA9IGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkpIHsNCisJ CQkJcHJpbnRrKCJ3YWl0aW5nIGZvciBkaXNrICVkIC4uICVkXG4iLA0KKwkJCQkJcmRldi0+cmFp ZF9kaXNrLCBpKTsNCisJCQkgICAgfQ0KKwkJCSAgICByZXQgPSByYWlkNV9yZW1vdmVfZGlzayht ZGRldiwgcmRldi0+cmFpZF9kaXNrKTsNCisJCQkgICAgaWYgKHJldCkgew0KKwkJCQlwcmludGso S0VSTl9XQVJOSU5HICJyYWlkNV9yZW1vdmVfZGlzazE6IGJ1c3k/IVxuIik7DQorCQkJCXJldHVy bjsJLy8gc2hvdWxkIGl0IG5vdGhpbmcgdG8gZG8NCisJCQkgICAgfQ0KKwkJCSAgICByZXQgPSBy YWlkNV9hZGRfZGlzayhtZGRldiwgY29uZi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10ucmRldik7 DQorCQkJICAgIGlmICghcmV0KSB7DQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1X2Fk ZF9kaXNrOiBubyBmcmVlIHNsb3Q/IVxuIik7DQorCQkJCXJldHVybjsJLy8gLi4NCisJCQkgICAg fQ0KKw0KKwkJCSAgICB3aGlsZSAoKGkgPSBhdG9taWNfcmVhZCgmY29uZi0+ZGlza3NbY29uZi0+ cmFpZF9kaXNrc10ucmRldi0+bnJfcGVuZGluZykpKSB7DQorCQkJCXByaW50aygid2FpdGluZyBm b3IgZGlzayAlZCAuLiAlZFxuIiwNCisJCQkJCWNvbmYtPnJhaWRfZGlza3MsIGkpOw0KKwkJCSAg ICB9DQorCQkJICAgIHJldCA9IHJhaWQ1X3JlbW92ZV9kaXNrKG1kZGV2LCBjb25mLT5yYWlkX2Rp c2tzKTsNCisJCQkgICAgaWYgKHJldCkgew0KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYWlk NV9yZW1vdmVfZGlzazI6IGJ1c3k/IVxuIik7DQorCQkJCXJldHVybjsJLy8gLi4NCisJCQkgICAg fQ0KKw0KKwkJCSAgICBjb25mLT5kaXNrc1tyZGV2LT5yYWlkX2Rpc2tdLnJkZXYtPmluX3N5bmMg PSAxOw0KKw0KKwkJCSAgICAvKiBib3Jyb3dlZCBmcm9tIGhvdF9yZW1vdmVfZGlzaygpICovDQor CQkJICAgIGtpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpOw0KKwkJCSAgICAvL21kX3VwZGF0ZV9z YihtZGRldik7DQorCQkJfQ0KKwkJICAgIH0gZWxzZSB7DQorCQkJLyogaW5fc3luYyBkaXNrIGZh aWxlZCAoIWRlZ3JhZGVkKSwgdHJ5aW5nIHRvIG1ha2UgYSBjb3B5DQorCQkJICAgIHRvIGEgc3Bh cmUge2FuZCB3ZSBjb3VsZCBjYWxsIGl0ICdhY3RpdmUgc3BhcmUnIGZyb20gbm93On0gKi8NCisJ CQlwcmludGsoS0VSTl9BTEVSVCAicmVzeW5jIGZyb20gJXMgdG8gc3BhcmUgJXMgKCVkKVxuIiwN CisJCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwNCisJCQkgICAgICAgIGJkZXZuYW1lKHJkZXZz LT5iZGV2LGIyKSwNCisJCQkJY29uZi0+cmFpZF9kaXNrcyk7DQorCQkJY29uZi0+bWlycm9yaXQg PSByZGV2LT5yYWlkX2Rpc2s7DQorDQorCQkJbWRkZXYtPmRlZ3JhZGVkKys7CS8qIGZvciBjYWxs IHJhaWQ1X2hvdF9hZGRfZGlzaygpLCByZXNldCB0aGVyZSAqLw0KKwkJICAgIH0NCisJCX0gZWxz ZSB7DQorbGV0aXRnbzoNCisJCSAgICBtZGRldi0+c2JfZGlydHkgPSAxOw0KKwkJICAgIGlmIChy ZGV2LT5pbl9zeW5jKSB7DQorCQkJICAgIGNvbmYtPndvcmtpbmdfZGlza3MtLTsNCisJCQkgICAg bWRkZXYtPmRlZ3JhZGVkKys7DQorCQkJICAgIGNvbmYtPmZhaWxlZF9kaXNrcysrOw0KKwkJCSAg ICByZGV2LT5pbl9zeW5jID0gMDsNCisJCQkgICAgLyoNCisJCQkgICAgICogaWYgcmVjb3Zlcnkg d2FzIHJ1bm5pbmcsIG1ha2Ugc3VyZSBpdCBhYm9ydHMuDQorCQkJICAgICAqLw0KKwkJCSAgICBz ZXRfYml0KE1EX1JFQ09WRVJZX0VSUiwgJm1kZGV2LT5yZWNvdmVyeSk7DQorCQkgICAgfQ0KKwkJ ICAgIHJkZXYtPmZhdWx0eSA9IDE7DQorCQkgICAgcHJpbnRrIChLRVJOX0FMRVJUDQorCQkJICAg ICJyYWlkNTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiINCisJCQkgICAg IiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLA0KKwkJCSAgICBiZGV2bmFt ZShyZGV2LT5iZGV2LGIpLCBjb25mLT53b3JraW5nX2Rpc2tzKTsNCisJCX0NCiAJfQ0KIH0JDQog DQpAQCAtODg4LDYgKzEwMjksOCBAQA0KIAlpbnQgbG9ja2VkPTAsIHVwdG9kYXRlPTAsIHRvX3Jl YWQ9MCwgdG9fd3JpdGU9MCwgZmFpbGVkPTAsIHdyaXR0ZW49MDsNCiAJaW50IG5vbl9vdmVyd3Jp dGUgPSAwOw0KIAlpbnQgZmFpbGVkX251bT0wOw0KKwlpbnQgYXNwYXJlPTAsIGFzcGFyZW51bT0t MTsNCisJc3RydWN0IGRpc2tfaW5mbyAqYXNwYXJlZGV2Ow0KIAlzdHJ1Y3QgcjVkZXYgKmRldjsN CiANCiAJUFJJTlRLKCJoYW5kbGluZyBzdHJpcGUgJWxsdSwgY250PSVkLCBwZF9pZHg9JWRcbiIs DQpAQCAtODk5LDkgKzEwNDIsMTYgQEANCiAJY2xlYXJfYml0KFNUUklQRV9ERUxBWUVELCAmc2gt PnN0YXRlKTsNCiANCiAJc3luY2luZyA9IHRlc3RfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0 YXRlKTsNCisJYXNwYXJlZGV2ID0gJmNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdOw0KKwlp ZiAoIWNvbmYtPm1kZGV2LT5kZWdyYWRlZCAmJiBhc3BhcmVkZXYtPnJkZXYgJiYgIWFzcGFyZWRl di0+cmRldi0+ZmF1bHR5ICYmDQorCQljb25mLT5taXJyb3JpdCAhPSAtMSkgew0KKwkgICAgYXNw YXJlKys7DQorCSAgICBhc3BhcmVudW0gPSBzaC0+cmFpZF9jb25mLT5taXJyb3JpdDsNCisJICAg IFBSSU5USygiaGFzIGFzcGFyZSAoJWQpXG4iLCBhc3BhcmVudW0pOw0KKwl9DQogCS8qIE5vdyB0 byBsb29rIGFyb3VuZCBhbmQgc2VlIHdoYXQgY2FuIGJlIGRvbmUgKi8NCiANCi0JZm9yIChpPWRp c2tzOyBpLS07ICkgew0KKwlmb3IgKGk9ZGlza3MrYXNwYXJlOyBpLS07ICkgew0KIAkJbWRrX3Jk ZXZfdCAqcmRldjsNCiAJCWRldiA9ICZzaC0+ZGV2W2ldOw0KIAkJY2xlYXJfYml0KFI1X0luc3lu YywgJmRldi0+ZmxhZ3MpOw0KQEAgLTk0NSwxMiArMTA5NSwxNyBAQA0KIAkJfQ0KIAkJaWYgKGRl di0+d3JpdHRlbikgd3JpdHRlbisrOw0KIAkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7IC8q IEZJWE1FLCBzaG91bGQgSSBiZSBsb29raW5nIHJkZXYgKi8NCi0JCWlmICghcmRldiB8fCAhcmRl di0+aW5fc3luYykgew0KKwkJaWYgKCFyZGV2IHx8ICFyZGV2LT5pbl9zeW5jIHx8DQorCQkgICAg KHRlc3RfYml0KFI1X0ZBSUxFRCwgJmRldi0+ZmxhZ3MpICYmICF0ZXN0X2JpdChSNV9VUFRPREFU RSwgJmRldi0+ZmxhZ3MpKSkgew0KIAkJCWZhaWxlZCsrOw0KIAkJCWZhaWxlZF9udW0gPSBpOw0K KwkJCVBSSU5USygiZGV2aWNlICVkIGZhaWxlZCBmb3IgdGhpcyBzdHJpcGUgciVwIHclcFxuIiwg aSwgZGV2LT50b3JlYWQsIGRldi0+dG93cml0ZSk7DQogCQl9IGVsc2UNCiAJCQlzZXRfYml0KFI1 X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KIAl9DQorCWlmIChhc3BhcmUgJiYgZmFpbGVkID4gMSkN CisJICAgIGZhaWxlZC0tOwkvKiBmYWlsZWQgPSAxIG1lYW5zICJhbGwgb2siIGlmIHdlJ3ZlIGFz cGFyZSwgdGhpcyBpcyBzaW1wbGVzdA0KKwkJCSAgICBtZXRob2QgdG8gZG8gb3VyIHdvcmsgKi8N CiAJUFJJTlRLKCJsb2NrZWQ9JWQgdXB0b2RhdGU9JWQgdG9fcmVhZD0lZCINCiAJCSIgdG9fd3Jp dGU9JWQgZmFpbGVkPSVkIGZhaWxlZF9udW09JWRcbiIsDQogCQlsb2NrZWQsIHVwdG9kYXRlLCB0 b19yZWFkLCB0b193cml0ZSwgZmFpbGVkLCBmYWlsZWRfbnVtKTsNCkBAIC0xMDEzLDYgKzExNjgs NyBAQA0KIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQogCX0NCiAJaWYg KGZhaWxlZCA+IDEgJiYgc3luY2luZykgew0KKwkJcHJpbnRrKEtFUk5fQUxFUlQgInN5bmMgc3Rv cHBlZCBieSBJTyBlcnJvclxuIik7DQogCQltZF9kb25lX3N5bmMoY29uZi0+bWRkZXYsIFNUUklQ RV9TRUNUT1JTLDApOw0KIAkJY2xlYXJfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKTsN CiAJCXN5bmNpbmcgPSAwOw0KQEAgLTExODQsNiArMTM0MCwyMiBAQA0KIAkJCQkJUFJJTlRLKCJX cml0aW5nIGJsb2NrICVkXG4iLCBpKTsNCiAJCQkJCWxvY2tlZCsrOw0KIAkJCQkJc2V0X2JpdChS NV9XYW50d3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCisJCQkJCWlmIChhc3BhcmUgJiYgaSA9 PSBhc3BhcmVudW0pIHsNCisJCQkJCSAgICBjaGFyICpwcywgKnBkOw0KKw0KKwkJCQkJICAgIC8q IG1pcnJvcmluZyB0aGlzIG5ldyBibG9jayAqLw0KKwkJCQkJICAgIFBSSU5USygiV3JpdGluZyB0 byBhc3BhcmUgdG9vICVkLT4lZFxuIiwNCisJCQkJCQkJaSwgY29uZi0+cmFpZF9kaXNrcyk7DQor CQkJCQkgICAgLyppZiAodGVzdF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltjb25mLT5yYWlkX2Rp c2tzXS5mbGFncykpIHsNCisJCQkJCQlwcmludGsoImJhem1lZywgZXogbG9ra29sdDEhISFcbiIp Ow0KKwkJCQkJICAgIH0qLw0KKwkJCQkJICAgIHBzID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbaV0u cGFnZSk7DQorCQkJCQkgICAgcGQgPSBwYWdlX2FkZHJlc3Moc2gtPmRldltjb25mLT5yYWlkX2Rp c2tzXS5wYWdlKTsNCisJCQkJCSAgICAvKiBiZXR0ZXIgaWRlYT8gKi8NCisJCQkJCSAgICBtZW1j cHkocGQsIHBzLCBTVFJJUEVfU0laRSk7DQorCQkJCQkgICAgc2V0X2JpdChSNV9MT0NLRUQsICZz aC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLmZsYWdzKTsNCisJCQkJCSAgICBzZXRfYml0KFI1X1dh bnR3cml0ZSwgJnNoLT5kZXZbY29uZi0+cmFpZF9kaXNrc10uZmxhZ3MpOw0KKwkJCQkJfQ0KIAkJ CQkJaWYgKCF0ZXN0X2JpdChSNV9JbnN5bmMsICZzaC0+ZGV2W2ldLmZsYWdzKQ0KIAkJCQkJICAg IHx8IChpPT1zaC0+cGRfaWR4ICYmIGZhaWxlZCA9PSAwKSkNCiAJCQkJCQlzZXRfYml0KFNUUklQ RV9JTlNZTkMsICZzaC0+c3RhdGUpOw0KQEAgLTEyMjAsMTQgKzEzOTIsMzAgQEANCiAJCQlpZiAo ZmFpbGVkPT0wKQ0KIAkJCQlmYWlsZWRfbnVtID0gc2gtPnBkX2lkeDsNCiAJCQkvKiBzaG91bGQg YmUgYWJsZSB0byBjb21wdXRlIHRoZSBtaXNzaW5nIGJsb2NrIGFuZCB3cml0ZSBpdCB0byBzcGFy ZSAqLw0KKwkJCWlmIChhc3BhcmUpDQorCQkJICAgIGZhaWxlZF9udW0gPSBhc3BhcmVudW07DQog CQkJaWYgKCF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbZmFpbGVkX251bV0uZmxhZ3Mp KSB7DQogCQkJCWlmICh1cHRvZGF0ZSsxICE9IGRpc2tzKQ0KIAkJCQkJQlVHKCk7DQogCQkJCWNv bXB1dGVfYmxvY2soc2gsIGZhaWxlZF9udW0pOw0KIAkJCQl1cHRvZGF0ZSsrOw0KIAkJCX0NCisJ CQlpZiAoYXNwYXJlKSB7DQorCQkJICAgIGNoYXIgKnBzLCAqcGQ7DQorDQorCQkJICAgIHBzID0g cGFnZV9hZGRyZXNzKHNoLT5kZXZbZmFpbGVkX251bV0ucGFnZSk7DQorCQkJICAgIHBkID0gcGFn ZV9hZGRyZXNzKHNoLT5kZXZbY29uZi0+cmFpZF9kaXNrc10ucGFnZSk7DQorCQkJICAgIG1lbWNw eShwZCwgcHMsIFNUUklQRV9TSVpFKTsNCisJCQkgICAgUFJJTlRLKCJSNV9XYW50d3JpdGUgdG8g YXNwYXJlLCB1cHRvZGF0ZTogJWQgJXAtPiVwXG4iLA0KKwkJCQkJdXB0b2RhdGUsIHBzLCBwZCk7 DQorCQkJICAgIC8qaWYgKHRlc3RfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbY29uZi0+cmFpZF9k aXNrc10uZmxhZ3MpKSB7DQorCQkJCXByaW50aygiYmF6bWVnLCBleiBsb2trb2x0MiEhIVxuIik7 DQorCQkJICAgIH0qLw0KKwkJCX0NCiAJCQlpZiAodXB0b2RhdGUgIT0gZGlza3MpDQogCQkJCUJV RygpOw0KKwkJCWlmIChhc3BhcmUpDQorCQkJICAgIGZhaWxlZF9udW0gPSBjb25mLT5yYWlkX2Rp c2tzOw0KIAkJCWRldiA9ICZzaC0+ZGV2W2ZhaWxlZF9udW1dOw0KIAkJCXNldF9iaXQoUjVfTE9D S0VELCAmZGV2LT5mbGFncyk7DQogCQkJc2V0X2JpdChSNV9XYW50d3JpdGUsICZkZXYtPmZsYWdz KTsNCkBAIC0xMjUxLDcgKzE0MzksNyBAQA0KIAkJYmktPmJpX3NpemUgPSAwOw0KIAkJYmktPmJp X2VuZF9pbyhiaSwgYnl0ZXMsIDApOw0KIAl9DQotCWZvciAoaT1kaXNrczsgaS0tIDspIHsNCisJ Zm9yIChpPWRpc2tzK2FzcGFyZTsgaS0tIDspIHsNCiAJCWludCBydzsNCiAJCXN0cnVjdCBiaW8g KmJpOw0KIAkJbWRrX3JkZXZfdCAqcmRldjsNCkBAIC0xNDkzLDYgKzE2ODEsMTUgQEANCiAJCXVu cGx1Z19zbGF2ZXMobWRkZXYpOw0KIAkJcmV0dXJuIDA7DQogCX0NCisJLyogaWYgdGhlcmUgaXMg MSBvciBtb3JlIGZhaWxlZCBkcml2ZXMgYW5kIHdlIGFyZSB0cnlpbmcNCisJICogdG8gcmVzeW5j LCB0aGVuIGFzc2VydCB0aGF0IHdlIGFyZSBmaW5pc2hlZCwgYmVjYXVzZSB0aGVyZSBpcw0KKwkg KiBub3RoaW5nIHdlIGNhbiBkby4NCisJICovDQorCWlmIChtZGRldi0+ZGVncmFkZWQgPj0gMSAm JiB0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkgew0KKwkJaW50 IHJ2ID0gKG1kZGV2LT5zaXplIDw8IDEpIC0gc2VjdG9yX25yOw0KKwkJbWRfZG9uZV9zeW5jKG1k ZGV2LCBydiwgMSk7DQorCQlyZXR1cm4gcnY7DQorCX0NCiANCiAJeCA9IHNlY3Rvcl9ucjsNCiAJ Y2h1bmtfb2Zmc2V0ID0gc2VjdG9yX2Rpdih4LCBzZWN0b3JzX3Blcl9jaHVuayk7DQpAQCAtMTU5 MSwxMSArMTc4OCwxMSBAQA0KIAl9DQogDQogCW1kZGV2LT5wcml2YXRlID0ga21hbGxvYyAoc2l6 ZW9mIChyYWlkNV9jb25mX3QpDQotCQkJCSAgKyBtZGRldi0+cmFpZF9kaXNrcyAqIHNpemVvZihz dHJ1Y3QgZGlza19pbmZvKSwNCisJCQkJICArIChtZGRldi0+cmFpZF9kaXNrcyArIDEpICogc2l6 ZW9mKHN0cnVjdCBkaXNrX2luZm8pLA0KIAkJCQkgIEdGUF9LRVJORUwpOw0KIAlpZiAoKGNvbmYg PSBtZGRldi0+cHJpdmF0ZSkgPT0gTlVMTCkNCiAJCWdvdG8gYWJvcnQ7DQotCW1lbXNldCAoY29u ZiwgMCwgc2l6ZW9mICgqY29uZikgKyBtZGRldi0+cmFpZF9kaXNrcyAqIHNpemVvZihzdHJ1Y3Qg ZGlza19pbmZvKSApOw0KKwltZW1zZXQgKGNvbmYsIDAsIHNpemVvZiAoKmNvbmYpICsgKG1kZGV2 LT5yYWlkX2Rpc2tzICsgMSkgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbykgKTsNCiAJY29uZi0+ bWRkZXYgPSBtZGRldjsNCiANCiAJaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IChzdHJ1Y3Qg c3RyaXBlX2hlYWQgKiopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgSEFTSF9QQUdFU19P UkRFUikpID09IE5VTEwpDQpAQCAtMTYzNSw2ICsxODMyLDcgQEANCiAJfQ0KIA0KIAljb25mLT5y YWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7DQorCWNvbmYtPm1pcnJvcml0ID0gLTE7DQog CS8qDQogCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBmb3IgYSBkZWdyYWRl ZCBhcnJheS4NCiAJICovDQpAQCAtMTY4NCw3ICsxODgyLDcgQEANCiAJCX0NCiAJfQ0KIG1lbW9y eSA9IGNvbmYtPm1heF9ucl9zdHJpcGVzICogKHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpICsN Ci0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUp KSkgLyAxMDI0Ow0KKwkJIChjb25mLT5yYWlkX2Rpc2tzKzEpICogKChzaXplb2Yoc3RydWN0IGJp bykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0Ow0KIAlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYt Pm1heF9ucl9zdHJpcGVzKSkgew0KIAkJcHJpbnRrKEtFUk5fRVJSIA0KIAkJCSJyYWlkNTogY291 bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsNCkBAIC0xODQ0LDYg KzIwNDIsMTcgQEANCiAJCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOw0KIAkJfQ0KIAl9DQorCXRt cCA9IGNvbmYtPmRpc2tzICsgaTsNCisJaWYgKHRtcC0+cmRldiAmJiAhdG1wLT5yZGV2LT5mYXVs dHkgJiYgIXRtcC0+cmRldi0+aW5fc3luYykgew0KKwkgICAgLyogc3luYyBkb25lIHRvIHRoZSAn YWN0aXZlIHNwYXJlJyAqLw0KKwkgICAgdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsNCisNCisJICAg IHByaW50ayhLRVJOX05PVElDRSAicmFpZDVfc3BhcmVfYWN0aXZlOiAlZCBpbl9zeW5jICVkLT4l ZFxuIiwNCisJCQlpLCB0bXAtPnJkZXYtPnJhaWRfZGlzaywgY29uZi0+bWlycm9yaXQpOw0KKw0K KwkgICAgLyogc2NhcnkuLj8gOn0gKi8NCisJICAgIHRtcC0+cmRldi0+cmFpZF9kaXNrID0gY29u Zi0+bWlycm9yaXQ7DQorCX0NCiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsNCiAJcmV0dXJuIDA7 DQogfQ0KQEAgLTE4NTcsNiArMjA2Niw3IEBADQogDQogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7 DQogCXJkZXYgPSBwLT5yZGV2Ow0KK3ByaW50aygicmFpZDVfcmVtb3ZlX2Rpc2sgJWRcbiIsIG51 bWJlcik7DQogCWlmIChyZGV2KSB7DQogCQlpZiAocmRldi0+aW5fc3luYyB8fA0KIAkJICAgIGF0 b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgew0KQEAgLTE4ODQsNiArMjA5NCwxMCBAQA0K IAlpbnQgZGlzazsNCiAJc3RydWN0IGRpc2tfaW5mbyAqcDsNCiANCisJaWYgKG1kZGV2LT5kZWdy YWRlZCA+IDEpDQorCQkvKiBubyBwb2ludCBhZGRpbmcgYSBkZXZpY2UgKi8NCisJCXJldHVybiAw Ow0KKw0KIAkvKg0KIAkgKiBmaW5kIHRoZSBkaXNrIC4uLg0KIAkgKi8NCkBAIC0xODk1LDYgKzIx MDksMjAgQEANCiAJCQlwLT5yZGV2ID0gcmRldjsNCiAJCQlicmVhazsNCiAJCX0NCisNCisJaWYg KCFmb3VuZCkgew0KKwkgICAgLyogYXJyYXkgb3B0aW1hbCwgdGhpcyBzaG91bGQgYmUgdGhlICdh Y3RpdmUgc3BhcmUnICovDQorCSAgICBjb25mLT5kaXNrc1tkaXNrXS5yZGV2ID0gcmRldjsNCisJ ICAgIHJkZXYtPmluX3N5bmMgPSAwOw0KKwkgICAgcmRldi0+cmFpZF9kaXNrID0gY29uZi0+cmFp ZF9kaXNrczsNCisNCisJICAgIG1kZGV2LT5kZWdyYWRlZC0tOw0KKwkgICAgZm91bmQrKzsJLyog Y2FsbCByZXN5bmMgKi8NCisNCisJICAgIHByaW50ayhLRVJOX0lORk8gImFkZGVkIHNwYXJlIGZv ciBhY3RpdmUgcmVzeW5jXG4iKTsNCisJfQ0KKwlwcmludGsoS0VSTl9JTkZPICJyYWlkNV9hZGRf ZGlzazogJWQgKCVkKVxuIiwgZGlzaywgZm91bmQpOw0KKw0KIAlwcmludF9yYWlkNV9jb25mKGNv bmYpOw0KIAlyZXR1cm4gZm91bmQ7DQogfQ0K --=-qbhBH6SxgEViRcTt+0Yf--