From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pallai Roland Subject: iostat messed up with md on 2.6.16.x Date: Wed, 24 May 2006 02:50:23 +0200 Message-ID: <1148431824.2377.11.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-vEjes5bt/oJzzDHO/llO" Return-path: Sender: linux-raid-owner@vger.kernel.org To: Linux RAID Mailing List List-Id: linux-raid.ids --=-vEjes5bt/oJzzDHO/llO Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I upgraded my kernel from 2.6.15.6 to 2.6.16.16 and now the 'iostat -x 1' permanently shows 100% utilisation on each disk that member of an md array. I asked my friend who using 3 boxes with 2.6.16.2 2.6.16.9 2.6.16.11 and raid1, he's reported the same too. it works for anyone? I don't think that it's exactly a md problem, but only appears with the md, so I wrote here I did a basic debugging on evening and I think the problem is the double calling of disk->in_flight-- in block/ll_rw_blk.c - I dont know why, but here's a sample line from /proc/diskstats after a raid array assembled: 8 0 sda 52 1134 8256 568 3 7 24 16 4294967295 433820 4294534144 ^^^^^^^^^^ in_flight = -1 I wrote an ugly workaround and now the iostat working well [see attach#1], but if it's a real bug, someone should find the root cause of it, please ps: the 'proactive disk replacement' patch for raid5 has been ported to 2.6.16 and tested by some of my friends and now it's working for us, lots of bugs fixed since my last post, if you want to give a try, I attached that too (and sorry for the big post if you're not intrested in) -- dap --=-vEjes5bt/oJzzDHO/llO Content-Disposition: attachment; filename=01_2616iostatfix-dap1.diff Content-Type: text/x-patch; name=01_2616iostatfix-dap1.diff; charset=us-ascii Content-Transfer-Encoding: base64 DQpyYWlkIHRvbWJvayBhbGF0dCBheiBpbl9mbGlnaHQgLTEgLWJlIGNzYXAgYXQgYW1pa29yIGVs c3RhcnRvbCBhIGN1Y2MsIGVob2wgYSBmaXgNCmN5cmF4ICAyLjYuMTYuMiAgMi42LjE2LjkgIDIu Ni4xNi4xMQ0KZGFwICAgIDIuNi4xNi4xNg0KDQoNCi0tLSBsaW51eC0yLjYuMTYuMTYvYmxvY2sv bGxfcndfYmxrLmMub3JpZwkyMDA2LTA1LTI0IDAxOjEwOjM0LjAwMDAwMDAwMCArMDIwMA0KKysr IGxpbnV4LTIuNi4xNi4xNi9ibG9jay9sbF9yd19ibGsuYwkyMDA2LTA1LTI0IDAxOjM2OjQ1LjAw MDAwMDAwMCArMDIwMA0KQEAgLTI3NDYsNyArMjc0NiwxMCBAQA0KIA0KIAlpZiAocmVxLT5ycV9k aXNrKSB7DQogCQlkaXNrX3JvdW5kX3N0YXRzKHJlcS0+cnFfZGlzayk7DQotCQlyZXEtPnJxX2Rp c2stPmluX2ZsaWdodC0tOw0KKwkJaWYgKHJlcS0+cnFfZGlzay0+aW5fZmxpZ2h0ID4gMCkNCisJ CSAgICByZXEtPnJxX2Rpc2stPmluX2ZsaWdodC0tOw0KKwkJZWxzZQ0KKwkJICAgIHByaW50aygi YXR0ZW1wdF9tZXJnZTogYXNzZXJ0KHJlcS0+cnFfZGlzay0+aW5fZmxpZ2h0KSBmYWlsZWRcbiIp Ow0KIAl9DQogDQogCXJlcS0+aW9wcmlvID0gaW9wcmlvX2Jlc3QocmVxLT5pb3ByaW8sIG5leHQt PmlvcHJpbyk7DQpAQCAtMzQwOCw3ICszNDExLDEwIEBADQogCQlfX2Rpc2tfc3RhdF9pbmMoZGlz aywgaW9zW3J3XSk7DQogCQlfX2Rpc2tfc3RhdF9hZGQoZGlzaywgdGlja3NbcnddLCBkdXJhdGlv bik7DQogCQlkaXNrX3JvdW5kX3N0YXRzKGRpc2spOw0KLQkJZGlzay0+aW5fZmxpZ2h0LS07DQor CQlpZiAoZGlzay0+aW5fZmxpZ2h0ID4gMCkNCisJCSAgICBkaXNrLT5pbl9mbGlnaHQtLTsNCisJ CWVsc2UNCisJCSAgICBwcmludGsoImVuZF90aGF0X3JlcXVlc3RfbGFzdDogYXNzZXJ0KGRpc2st PmluX2ZsaWdodCkgZmFpbGVkXG4iKTsNCiAJfQ0KIAlpZiAocmVxLT5lbmRfaW8pDQogCQlyZXEt PmVuZF9pbyhyZXEsIGVycm9yKTsNCg== --=-vEjes5bt/oJzzDHO/llO Content-Disposition: attachment; filename=04_raid5-asp-dap.txt Content-Type: text/plain; name=04_raid5-asp-dap.txt; charset=us-ascii Content-Transfer-Encoding: base64 DQpDaGFuZ2Vsb2c6DQo4DQogLSAuLi4NCg0KDQogVGhpcyBpcyBhIGZlYXR1cmUgcGF0Y2ggdGhh dCBpbXBsZW1lbnRzICdwcm9hY3RpdmUgcmFpZDUgZGlzaw0KcmVwbGFjZW1lbnQnIChodHRwOi8v d3d3LmFyY3RpYy5vcmcvfmRlYW4vcmFpZC13aXNobGlzdC5odG1sKSwNCnRoYXQgY291bGQgaGVs cCBhIGxvdCBvbiBsYXJnZSByYWlkNSBhcnJheXMgYnVpbHQgZnJvbSBjaGVhcCBzYXRhDQpkcml2 ZXMgd2hlbiB0aGUgSU8gdHJhZmZpYyBzdWNoIGxhcmdlIHRoYXQgZGFpbHkgbWVkaWEgc2NhbiBv biB0aGUNCmRpc2tzIGlzbid0IHBvc3NpYmxlLg0KIEFuIGF0eXBpY2FsIGJyZWFrZG93biBzaXR1 YXRpb24gaXMgd2hlbiBhIGRyaXZlIGdldHMga2lja2VkIGZyb20gdGhlDQphcnJheSBkdWUgdG8g YSBiYWQgYmxvY2ssIEkgcmVwbGFjZSBpdCBidXQgdGhlIHJlc3luYyBmYWlscyBjYXVzZQ0KYW5v dGhlciAyLTMgZGlza3MgaGFzIGhpZGRlbiBiYWRibG9ja3MgdG9vLiBJbiB0aGlzIHNpdHVhdGlv biBJJ3ZlDQp0byBzYXZlIHRoZSBkaXNrcyB3aXRoIGRkIGFuZCByZWJ1aWxkIGJhZCBibG9ja3Mg d2l0aCBhIHVzZXJzcGFjZQ0KdG9vbCAoYnkgaGFuZCksIG1lYW53aGlsZSB0aGUgc2l0ZSBpcyBk b3duIGZvciBob3Vycy4gVGhpcyBwYXRjaA0KdHJpZXMgdG8gcHJvdmlkZSBhIHNvbHV0aW9uIGZv ciB0aGlzIHByb2JsZW0sIHRoZSB0d28gbWFpbiBmZWF0dXJlIGlzOg0KIDEuIERvbid0IGtpY2sg YSBkcml2ZSBvbiByZWFkIGVycm9yIGNhdXNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgOTkuOTklIGlz DQp1c2VhYmxlIGFuZCB3aWxsIGhlbHAgKHRvIHNlcnZlIGFuZCB0byBzYXZlIGRhdGEpIGlmIGFu b3RoZXIgZHJpdmUgc2hvd3MNCmJhZCBzZWN0b3JzIGluIHNhbWUgYXJyYXkgLSBOZWlsJ3MgbmV3 IChleHBlcmltZW50YWwpIHNlY3RvciByZXdyaXRlDQpmZWF0dXJlIGluY2x1ZGVkLCB0aGUgZmly c3QgdGhpbmcgaXMgYWx3YXlzIGEgdHJ5IHRvIHJld3JpdGUgdGhlDQpiYWQgc2VjdG9yDQogMi4g TGV0IHRvIG1pcnJvciBhIHBhcnRpYWxseSBmYWlsZWQgZHJpdmUgdG8gYSBzcGFyZSBfb25saW5l XyBhbmQNCnJlcGxhY2UgdGhlIHNvdXJjZSBvZiB0aGUgbWlycm9yIHdpdGggdGhlIHNwYXJlIHdo ZW4gaXQncyBkb25lLiBCYWQNCmJsb2NrcyBpc24ndCBhIHByb2JsZW0gdW5sZXNzIHNhbWUgc3Ry aXBlIGlzIGRhbWFnZWQgb24gdHdvIGRpc2tzDQp3aGF0J3MgYSByYXJlIGNhc2UuIEluIHRoaXMg d2F5IGlzIHBvc3NpYmxlIHRvIGZpeCBhbiBhcnJheSB3aXRoDQpwYXJ0aWFsbHkgZmFpbGVkIGRy aXZlcyB3aXRob3V0IGRhdGEgbG9zcyBhbmQgd2l0aG91dCBkb3dudGltZS4gSW4NCm90aGVyIHdv cmRzLCB5b3UgbmV2ZXIgaGF2ZSB0byBkZWdyYWRlIHRoZSBhcnJheSBkdWUgdG8gYSBkaXNrIGNo YW5nZSwNCnlvdSBjYW4gZG8gdGhhdCBpbiBvcHRpbWFsIHN0YXRlLg0KDQogUGVyLWRldmljZSBi YWQgYmxvY2sgY2FjaGUgaXMgaW1wbGVtZW50ZWQgdG8gc3BlZWQgdXAgYXJyYXlzIHdpdGgNCnBh cnRpYWxseSBmYWlsZWQgZHJpdmVzIChyZXBsaWVzIGFyZSBvZnRlbiBzbG93IGZyb20gdGhvc2Up LCBhbHNvDQpoZWxwcyB0byBkZXRlcm1pbmUgYmFkbHkgZGFtYWdlZCBkcml2ZXMgYmFzZWQgb24g bnVtYmVyIG9mIGJhZCBibG9ja3MsDQphbmQgY2FuIHRha2UgYW4gYWN0aW9uIGlmIHN0ZXBzIG92 ZXIgYW4gdXNlciBkZWZpbmVkIHRocmVzaG9sZA0KKHNlZSAvcHJvYy9zeXMvZGV2L3JhaWQvYmFk YmxvY2tfdG9sZXJhbmNlKS4gUmV3cml0ZSBvZiBhIGJhZCBibG9jaw0Kd2lsbCBkZWxldGUgdGhl IGVudHJ5IGZyb20gdGhlIGNhY2hlLg0KIHBlcmZvcm1hbmNlIGlzIGFmZmVjdGVkIGp1c3QgYSBs aXR0bGUgYml0IGlmIHRoZXJlJ3Mgbm8gb3Igc29tZQ0KcmVnaXN0ZXJlZCBiYWQgYmxvY2tzLCBi dXQgb3ZlciBhIG1pbGxpb24gdGhhdCBjb3VsZCBiZSBhIHByb2JsZW0NCmN1cnJlbnRseS4uDQoN CiBTb21lIHdvcmRzIGFib3V0IGVycm9yIGhhbmRsaW5nOiBmaXJzdCBiaWcgY2hhbmdlIGlzIG5v dyB5b3UgY2FuIHVzZSBhbg0KZXh0ZXJuYWwgZXJyb3IgaGFuZGxlciwgd2hhdCBtZWFucyB0aGF0 IGEgdXNlci1zcGFjZSBzY3JpcHQgd2lsbCBiZQ0KY2FsbGVkIGJ5IHRoZSBrZXJuZWwgdG8gaGFu ZGxlIHRoZSBzaXR1YXRpb24uIFRoZSBjb21tb24gbWV0aG9kIGluDQp0aGlzIHNjcmlwdCBpcyB0 byBjYWxsICdtZGFkbScgYW5kIGNob29zaW5nIHJldHVybiB2YWx1ZXMgKHNlZSBiZWxvdykuDQpU aGlzIGlzIGdvb2QgLWZvciBleGFtcGxlLSBpZiB5b3UgaGF2ZSAxIHNwYXJlIGRyaXZlIGZvciAy IGFycmF5cywgYQ0Kc2NyaXB0IGNhbiBoYW5kbGUgaXQgbmljZWx5Li4gSWYgdGhlIHNjcmlwdCBo YXMgZmFpbGVkIHRvIHJ1biAob3IgZG9lcw0Kbm90IGV4aXN0cyksIHRoZXJlJ3MgYSBkZWZhdWx0 IGFsZ29yaXRobSwgdGhlIG1haW4gZ3VpZGVsaW5lcyBvZiB0aGF0Og0KIC0gYSAiZGlzayBmYWls IiBtZWFucyB0aGF0IGl0J3Mgb3ZlcnN0ZXBzIHRoZSAnYmFkYmxvY2sgdGhyZXNob2xkJyBvcg0K ICAgIGZhaWxlZCBvbiB3cml0ZQ0KIC0gaWYgYSBkcml2ZSBmYWlscyBpbiBhbiBvcHRpbWFsIGFy cmF5IGFuZCB0aGVyZSdzIG5vIHNwYXJlIHRoZQ0KICAgIGRpc2sgd2lsbCBiZSBraWNrZWQgZnJv bSB0aGUgYXJyYXkNCiAtIGlmIHRoZSBkcml2ZSBmYWlscyBpbiBkZWdyYWRlZCBhcnJheSB0aGUg ZHJpdmUgX3dvbid0XyBiZSBraWNrZWQuDQogICAgcHJvY2Vzc2VzIGdldHMgcmVhZC93cml0ZSBl cnJvciBpZiBkYXRhIGlzIG5lZWRlZCBmcm9tIHRoZQ0KICAgIGRhbWFnZWQgc2VjdG9ycy4gaWYg eW91IHdhbnQgdGhlIG9sZCBiZWhhdmlvciB1c2UgYW4gZXh0ZXJuYWwNCiAgICBlcnJvciBoYW5k bGVyDQogLSBpZiBkcml2ZSBmYWlscyBhbmQgdGhlcmUncyBhIHNwYXJlIHRoZW4gdGhlIHByb2Fj dGl2ZSBtaXJyb3JpbmcNCiAgICBiZWdpbnMgdG8gdGhlIHNwYXJlLiB0aGUgZmFpbGluZyBkcml2 ZSB3b24ndCBiZSBraWNrZWQgdW50aWwNCiAgICB0aGUgbWlycm9yIGhhcyBub3QgYmVlbiBkb25l DQoNCllvdSBzaG91bGQgcHV0IHlvdXIgZXh0ZXJuYWwgZXJyb3IgaGFuZGxlciBzY3JpcHQgYXQg bG9jYXRpb24NCiIvc2Jpbi9tZGV2ZW50IjsgaXQgZ2V0cyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50 czoNCiAxc3Q6IG5hbWUgb2YgdGhlIG1kIGFycmF5IChlZy46ICJtZDAiKQ0KIDJuZDoga2luZCBv ZiB0aGUgZmFpbCBldmVudCBhcyBzdHJpbmcsIGN1cnJlbnRseSBhbHdheXMgImRyaXZlZmFpbCIN CiAzcmQ6IG5hbWUgb2YgdGhlIGRyaXZlIChtYXliZSBtYWpvci9taW5vciBuciB3b3VsZCBiZSBi ZXR0ZXIsIGN1cnJlbnRseQ0KCQkJIHlvdSBjYW4gdHJhbnNsYXRlIHRvIHRoYXQgYnkgL3Byb2Mv cGFydGl0aW9ucykNCg0KTGV0J3Mgc2VlIGhvdyBjYW4geW91IGhhbmRsZSBzb21lIHNpdHVhdGlv bnMgZnJvbSB0aGUgc2NyaXB0Og0KICBhcnJheSBpcyBvcHRpbWFsLCBhIGRpc2sgZmFpbHM6DQog ICAgeW91IHdhbnQgdG8uLiBmYWlsIHRoYXQgZHJpdmUgYW5kIGFkZCBhIHNwYXJlIGZvciBub3Jt YWwgcmVidWlsZGluZw0KCW1kYWRtIC1mIC9kZXYvJDIgL2Rldi8kMw0KCW1kYWRtIC1hIC9kZXYv JDIgL2Rldi9teV9zcGFyZTENCglleGl0IDANCiAgICAuLnN0YXJ0IHByb2FjdGl2ZSBtaXJyb3Jp bmcgb2YgdGhhdCBkaXNrDQoJbWRhZG0gLWEgL2Rldi8kMiAvZGV2L215X3NwYXJlMQ0KCWV4aXQg MA0KICAgIC4ua2VlcCBpdCBvbiBhbmQgcmVzZXQgdGhlIGJhZGJsb2NrIGNhY2hlDQoJZXhpdCAx DQogICAgLi5qdXN0IGtlZXAgaXQgaW4gc3luYw0KCWV4aXQgMA0KICAgIC4ubGV0IHRoZSBkZWZh dWx0IGFjdGlvbg0KCWV4aXQgMg0KICAgIE5vdGljZSB0aGF0IGlmIHRoZSBwcm9hY3RpdmUgbWly cm9yaW5nIGlzIGRvbmUgdGhlIHNwYXJlIHdvbid0DQogICAgcmVwbGFjZSB0aGUgc291cmNlIGRy aXZlIGF1dG9tYXRpY2FsbHksIHlvdSBzaG91bGQgZG8gaXQgYnkgaGFuZA0KICAgIG9yIGJ5IGEg c2NoZWR1bGVkIHRhc2suIFlvdSd2ZSBnb3QgYSBsYXN0IGNoYW5jZSB0byByZS10aGluayBpdC4N Cg0KDQogV2VsbCwgYmV0dGVyIGlmIHlvdSBrbm93LCBJdCdzIGFuIHVnbHkgaGFjaywgSSdtIG5v dCBhIGtlcm5lbCBndXJ1LA0KYnV0IEkgbG92ZSB0aGUgaWRlYSBhbmQgbm93IEkgY2FuJ3QgbGl2 ZSB3aXRob3V0IGl0IG9uIG15IG93biBzZXJ2ZXJzDQooc28gdGhpcyBpcyB3b3JrcyBmb3IgbWUp LiBJIGhvcGUgc29tZWJvZHkgd2lsbCBpbXBsZW1lbnQgdGhpcw0KZmVhdHVyZSBvbmNlIGluIGEg bXVjaCBuaWNlciBhZGFwdGF0aW9uLCBJJ20gdHJ5aW5nIHRvIG1haW50YWluDQp0aGlzIHBhdGNo IHRpbGwgdGhlbi4uDQoNCg0KIChyYWlkNiBjb3VsZCBiZSBhbm90aGVyIHNvbHV0aW9uIGZvciB0 aGlzIHByb2JsZW0sIGJ1dCB0aGF0J3MgdGhlDQogYmlnIGZhdCBldmlsIGluIG15IGV5ZXMgOykN Cg0KDQp1c2U6DQoNCjEuIHBhdGNoIHRoZSBrZXJuZWwsIHRoaXMgb25lIGlzIGFnYWluc3QgMi42 LjE0DQoyLiB0eXBlOg0KDQojIG1ha2UgdGhlIGRyaXZlcw0KbWRhZG0gLUIgLW4xIC1sIGZhdWx0 eSAtYzQgL2Rldi9tZC8xIC9kZXYvcmQvMA0KbWRhZG0gLUIgLW4xIC1sIGZhdWx0eSAtYzQgL2Rl di9tZC8yIC9kZXYvcmQvMQ0KbWRhZG0gLUIgLW4xIC1sIGZhdWx0eSAtYzQgL2Rldi9tZC8zIC9k ZXYvcmQvMg0KDQojIG1ha2UgdGhlIGFycmF5DQptZGFkbSAtQyAtbjMgLWw1IC9kZXYvbWQvMCAv ZGV2L21kLzEgL2Rldi9tZC8yIC9kZXYvbWQvMw0KDQojIC4uIHdhaXQgZm9yIHN5bmMgLi4NCg0K IyBncm93IGJhZCBibG9ja3MgYXMgbWEqdG9yIGRvZXMgOikNCm1kYWRtIC0tZ3JvdyAtbCBmYXVs dHkgLXAgcnA0NTQgL2Rldi9tZC8xDQptZGFkbSAtLWdyb3cgLWwgZmF1bHR5IC1wIHJwNzM4IC9k ZXYvbWQvMg0KDQojIGFkZCBhIHNwYXJlDQptZGFkbSAtYSAvZGV2L21kLzAgL2Rldi9yZC80DQoN CiMgLT4gZmFpbCBhIGRyaXZlLCBzeW5jIGJlZ2lucyA8LQ0KIyAgdGhlIG1kLzEgd2lsbCBub3Qg YmUgbWFya2VkIGFzIGZhaWxlZCwgdGhpcyBpcyB0aGUgcG9pbnQsIGJ1dA0KIyAgaWYgeW91IHdh bnQgdG8sIHlvdSBjYW4gaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluDQptZGFkbSAtZiAvZGV2L21k LzAgL2Rldi9tZC8xDQoNCiMga2VybmVsOg0KIyAgcmVzeW5jIGZyb20gbWQxIHRvIHNwYXJlIHJh bTQNCiMgIGFkZGVkIHNwYXJlIGZvciBhY3RpdmUgcmVzeW5jDQoNCiMgLi4gd29uZGVyIHRoZSBy ZWFkIGVycm9ycyBmcm9tIG1kWzEyXSBhbmQgdGhlIHN5bmMgZ29lcyBvbiENCiMgZmVlbCBmcmVl IHRvIHN0cmVzcyB0aGUgbWQgYXQgdGhpcyB0aW1lLCBta2ZzLCBkZCwgYmFkYmxvY2tzLCBldGMN Cg0KIyBrZXJuZWw6DQojICByYWlkNV9zcGFyZV9hY3RpdmU6IDMgaW5fc3luYyAzLT4wDQojIC9w cm9jL21kc3RhdDoNCiMgIG1kMCA6IGFjdGl2ZSByYWlkNSByYW00WzBdIG1kM1syXSBtZDJbMV0g bWQxWzBdDQojIC0+IHJhbTQgYW5kIG1kMSBoYXMgc2FtZSBpZCwgdGhpcyBtZWFucyB0aGUgc3Bh cmUgaXMgYSBjb21wbGV0ZQ0KIwltaXJyb3IsIGlmIHlvdSBzdG9wIHRoZSBhcnJheSB5b3UgY2Fu IGFzc2VtYmx5IGl0IHdpdGggcmFtNA0KIwlpbnN0ZWFkIG9mIG1kMSwgdGhlIHN1cGVyYmxvY2sg aXMgc2FtZSBvbiB0aGVtDQoNCiMgY2hlY2sgdGhlIG1pcnJvciAoc3RvcCB3cml0ZSBzdHJlc3Mg aWYgYW55KQ0KbWRhZG0gLS1ncm93IC1sIGZhdWx0eSAtcCBub25lIC9kZXYvbWQvMQ0KY21wIC9k ZXYvbWQvMSAvZGV2L3JkLzQNCg0KIyBob3QtcmVwbGFjZSB0aGUgbWlycm9yZWQgLXBhcnRpYWxs eSBmYWlsZWQtIGRldmljZSB3aXRoIHRoZSBhY3RpdmUNCiMgIHNwYXJlICh5ZXMsIG1hcmsgaXQg YXMgZmFpbGVkIGFnYWluLCBidXQgaWYgdGhlcmUncyBhIHN5bmNpbmctIG9yDQojICBzeW5jZWQg J2FjdGl2ZSBzcGFyZScgdGhlIC1mIHJlYWxseSBmYWlscyB0aGUgZGV2aWNlIG9yIHJlcGxhY2UN CiMgIGl0IHdpdGggdGhlIHN5bmNlZCBzcGFyZSkNCm1kYWRtIC1mIC9kZXYvbWQvMCAvZGV2L21k LzENCg0KIyBrZXJuZWw6DQojICByZXBsYWNlIG1kMSB3aXRoIGluX3N5bmMgYWN0aXZlIHNwYXJl IHJhbTQNCg0KIyBhbmQgdm9pbGEhDQojIC9wcm9jL21kc3RhdDoNCiMgIG1kMCA6IGFjdGl2ZSBy YWlkNSByYW00WzBdIG1kM1syXSBtZDJbMV0NCg0K --=-vEjes5bt/oJzzDHO/llO Content-Disposition: attachment; filename=04_raid5-asp-dap9.diff Content-Type: text/x-patch; name=04_raid5-asp-dap9.diff; charset=us-ascii Content-Transfer-Encoding: base64 LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvc3lzY3RsLmgub3JpZwkyMDA1LTExLTA4IDE0OjQxOjA2 LjAwMDAwMDAwMCArMDEwMA0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvc3lzY3RsLmgJMjAwNS0x MS0wOSAyMDowODo1MS4wMDAwMDAwMDAgKzAxMDANCkBAIC04MDcsNyArODA3LDkgQEANCiAvKiAv cHJvYy9zeXMvZGV2L3JhaWQgKi8NCiBlbnVtIHsNCiAJREVWX1JBSURfU1BFRURfTElNSVRfTUlO PTEsDQotCURFVl9SQUlEX1NQRUVEX0xJTUlUX01BWD0yDQorCURFVl9SQUlEX1NQRUVEX0xJTUlU X01BWD0yLA0KKwlERVZfUkFJRF9CQURCTE9DS19UT0xFUkFOQ0U9MywNCisgICAgICAgIERFVl9S QUlEX01BWF9SRVdSSVRFUz00DQogfTsNCiANCiAvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvZGVm YXVsdCAqLw0KLS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgub3JpZwkyMDA1LTEw LTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvcmFp ZC9tZF9rLmgJMjAwNS0xMS0wOSAyMDowNjowMi4wMDAwMDAwMDAgKzAxMDANCkBAIC0xNzMsNiAr MTczLDExIEBADQogCWNoYXIJCQkJdXVpZFsxNl07DQogDQogCXN0cnVjdCBtZGtfdGhyZWFkX3MJ CSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovDQorCXN0cnVjdCBlZWhfZGF0YSB7DQor CQlpbnQJCQlmYWlsZWRfbnVtOwkvKiBkcml2ZSAjLCBwYXNzIHRvIHJhaWQ1X2FkZF9kaXNrKCkN CisJCQkJCQkJICAgIGZyb20gaGFuZGxlX3N0cmlwZSgpICovDQorCX0gZWVoX2RhdGE7DQorDQog CXN0cnVjdCBtZGtfdGhyZWFkX3MJCSpzeW5jX3RocmVhZDsJLyogZG9pbmcgcmVzeW5jIG9yIHJl Y29uc3RydWN0ICovDQogCXNlY3Rvcl90CQkJY3Vycl9yZXN5bmM7CS8qIGJsb2NrcyBzY2hlZHVs ZWQgKi8NCiAJdW5zaWduZWQgbG9uZwkJCXJlc3luY19tYXJrOwkvKiBhIHJlY2VudCB0aW1lc3Rh bXAgKi8NCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaC5vcmlnCTIwMDUtMTEt MDggMTg6MjY6NDguMDAwMDAwMDAwICswMTAwDQorKysgbGludXgvaW5jbHVkZS9saW51eC9yYWlk L3JhaWQ1LmgJMjAwNS0xMS0wOSAyMjoyNzo1OC4wMDAwMDAwMDAgKzAxMDANCkBAIC0xNTYsNiAr MTU2LDcgQEANCiAjZGVmaW5lCVI1X092ZXJsYXAJNwkvKiBUaGVyZSBpcyBhIHBlbmRpbmcgb3Zl cmxhcHBpbmcgcmVxdWVzdCBvbiB0aGlzIGJsb2NrICovDQogI2RlZmluZQlSNV9SZWFkRXJyb3IJ OAkvKiBzZWVuIGEgcmVhZCBlcnJvciBoZXJlIHJlY2VudGx5ICovDQogI2RlZmluZQlSNV9SZVdy aXRlCTkJLyogaGF2ZSB0cmllZCB0byBvdmVyLXdyaXRlIHRoZSByZWFkZXJyb3IgKi8NCisjZGVm aW5lCVI1X0hhcmRSZWFkRXJyCTEwCS8qIHJld3JpdGUgZmFpbGVkLCBwdXQgaW50byBiYWRibG9j a3MgbGlzdCAqLw0KIA0KIC8qDQogICogV3JpdGUgbWV0aG9kDQpAQCAtMjAwLDggKzIwMSwxNyBA QA0KICAqLw0KICANCiANCitzdHJ1Y3QgYmFkYmxvY2sgew0KKwlzdHJ1Y3QgYmFkYmxvY2sJCSpo YXNoX25leHQsICoqaGFzaF9wcHJldjsgLyogaGFzaCBwb2ludGVycyAqLw0KKwlzZWN0b3JfdAkJ c2VjdG9yOyAvKiBzdHJpcGUgIyAqLw0KKwlpbnQJCQluOwkvKiAjIG9mIGZhdWx0cyAqLw0KK307 DQorDQogc3RydWN0IGRpc2tfaW5mbyB7DQogCW1ka19yZGV2X3QJKnJkZXY7DQorCXN0cnVjdCBi YWRibG9jayAqKmJhZGJsb2NrX2hhc2h0Ymw7IC8qIGxpc3Qgb2Yga25vd24gYmFkYmxvY2tzICov DQorCWNoYXIJCWNhY2hlX25hbWVbMjBdOw0KKwlrbWVtX2NhY2hlX3QJKnNsYWJfY2FjaGU7IC8q IGJhZGJsb2NrIGRiICovDQogfTsNCiANCiBzdHJ1Y3QgcmFpZDVfcHJpdmF0ZV9kYXRhIHsNCkBA IC0yMzgsNiArMjQ4LDggQEANCiAJaW50CQkJaW5hY3RpdmVfYmxvY2tlZDsJLyogcmVsZWFzZSBv ZiBpbmFjdGl2ZSBzdHJpcGVzIGJsb2NrZWQsDQogCQkJCQkJCSAqIHdhaXRpbmcgZm9yIDI1JSB0 byBiZSBmcmVlDQogCQkJCQkJCSAqLyAgICAgICAgDQorCWludAkJCW1pcnJvcml0OyAvKiBzb3Vy Y2UgZm9yIGFjdGl2ZSBzcGFyZSByZXN5bmMgKi8NCisNCiAJc3BpbmxvY2tfdAkJZGV2aWNlX2xv Y2s7DQogCXN0cnVjdCBkaXNrX2luZm8JZGlza3NbMF07DQogfTsNCi0tLSBsaW51eC9kcml2ZXJz L21kL21kLmMub3JpZwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGxp bnV4L2RyaXZlcnMvbWQvbWQuYwkyMDA1LTExLTA5IDIwOjE4OjM5LjAwMDAwMDAwMCArMDEwMA0K QEAgLTg0LDYgKzg0LDExIEBADQogICogb3IgL3N5cy9ibG9jay9tZFgvbWQvc3luY19zcGVlZF97 bWluLG1heH0NCiAgKi8NCiANCisvKiB0aGUgZHJpdmUnbGwgYmUgbWFya2VkIGZhaWxlZCBvdmVy IHRoaXMgdGhyZXNob2xkLiBtZWFzdXJlIGlzIGJsb2NrLiAqLw0KK2ludCBzeXNjdGxfYmFkYmxv Y2tfdG9sZXJhbmNlID0gMTAwMDA7DQoraW50IHN5c2N0bF9tYXhfcmV3cml0ZXMgPSAxMDsNCisN CisNCiBzdGF0aWMgaW50IHN5c2N0bF9zcGVlZF9saW1pdF9taW4gPSAxMDAwOw0KIHN0YXRpYyBp bnQgc3lzY3RsX3NwZWVkX2xpbWl0X21heCA9IDIwMDAwMDsNCiBzdGF0aWMgaW5saW5lIGludCBz cGVlZF9taW4obWRkZXZfdCAqbWRkZXYpDQpAQCAtMTE3LDYgKzEyMiwyMiBAQA0KIAkJLm1vZGUJ CT0gMDY0NCwNCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywNCiAJfSwNCisJew0K KwkJLmN0bF9uYW1lCT0gREVWX1JBSURfQkFEQkxPQ0tfVE9MRVJBTkNFLA0KKwkJLnByb2NuYW1l CT0gImJhZGJsb2NrX3RvbGVyYW5jZSIsDQorCQkuZGF0YQkJPSAmc3lzY3RsX2JhZGJsb2NrX3Rv bGVyYW5jZSwNCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksDQorCQkubW9kZQkJPSAwNjQ0LA0K KwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLA0KKwl9LA0KKwl7DQorCQkuY3RsX25h bWUJPSBERVZfUkFJRF9NQVhfUkVXUklURVMsDQorCQkucHJvY25hbWUJPSAibWF4X3Jld3JpdGVz IiwNCisJCS5kYXRhCQk9ICZzeXNjdGxfbWF4X3Jld3JpdGVzLA0KKwkJLm1heGxlbgkJPSBzaXpl b2YoaW50KSwNCisJCS5tb2RlCQk9IDA2NDQsDQorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9p bnR2ZWMsDQorCX0sDQogCXsgLmN0bF9uYW1lID0gMCB9DQogfTsNCiANCkBAIC01MDQyLDYgKzUw NjMsOSBAQA0KIEVYUE9SVF9TWU1CT0wobWRfd2FrZXVwX3RocmVhZCk7DQogRVhQT1JUX1NZTUJP TChtZF9wcmludF9kZXZpY2VzKTsNCiBFWFBPUlRfU1lNQk9MKG1kX2NoZWNrX3JlY292ZXJ5KTsN CitFWFBPUlRfU1lNQk9MKGtpY2tfcmRldl9mcm9tX2FycmF5KTsJLy8gZml4bWUNCitFWFBPUlRf U1lNQk9MKHN5c2N0bF9iYWRibG9ja190b2xlcmFuY2UpOw0KK0VYUE9SVF9TWU1CT0woc3lzY3Rs X21heF9yZXdyaXRlcyk7DQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KIE1PRFVMRV9BTElBUygi bWQiKTsNCiBNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoTURfTUFKT1IpOw0KLS0tIGxpbnV4 L2RyaXZlcnMvbWQvcmFpZDUuYy5vcmlnCTIwMDUtMTEtMDggMTg6MjY6NDguMDAwMDAwMDAwICsw MTAwDQorKysgbGludXgvZHJpdmVycy9tZC9yYWlkNS5jCTIwMDUtMTEtMTAgMDI6MzI6NTIuMDAw MDAwMDAwICswMTAwDQpAQCAtNDAsNiArNDAsMTkgQEANCiANCiAjZGVmaW5lIHN0cmlwZV9oYXNo KGNvbmYsIHNlY3QpCSgmKChjb25mKS0+c3RyaXBlX2hhc2h0YmxbKChzZWN0KSA+PiBTVFJJUEVf U0hJRlQpICYgSEFTSF9NQVNLXSkpDQogDQorIC8qDQorICogcGVyLWRldmljZSBiYWRibG9jayBj YWNoZQ0KKyAqLw0KKw0KKyNkZWZpbmUJSEFTSF9QQUdFU19PUkRFUgkwDQorI2RlZmluZQlCQl9T SElGVAkJKFBBR0VfU0hJRlQvKjEyKi8gLSA5KQ0KKyNkZWZpbmUJQkJfSEFTSF9QQUdFUwkJMQ0K KyNkZWZpbmUJQkJfTlJfSEFTSAkJKEJCX0hBU0hfUEFHRVMgKiBQQUdFX1NJWkUgLyBzaXplb2Yo c3RydWN0IGJhZGJsb2NrICopKQ0KKyNkZWZpbmUJQkJfSEFTSF9NQVNLCQkoQkJfTlJfSEFTSCAt IDEpDQorDQorI2RlZmluZQliYl9oYXNoKGRpc2ssIHNlY3QpCSgoZGlzayktPmJhZGJsb2NrX2hh c2h0YmxbKChzZWN0KSA+PiBCQl9TSElGVCkgJiBCQl9IQVNIX01BU0tdKQ0KKyNkZWZpbmUJYmJf aGFzaG5yKHNlY3QpCQkoKChzZWN0KSA+PiBCQl9TSElGVCkgJiBCQl9IQVNIX01BU0spDQorDQog LyogYmlvJ3MgYXR0YWNoZWQgdG8gYSBzdHJpcGUrZGV2aWNlIGZvciBJL08gYXJlIGxpbmtlZCB0 b2dldGhlciBpbiBiaV9zZWN0b3INCiAgKiBvcmRlciB3aXRob3V0IG92ZXJsYXAuICBUaGVyZSBt YXkgYmUgc2V2ZXJhbCBiaW8ncyBwZXIgc3RyaXBlK2RldmljZSwgYW5kDQogICogYSBiaW8gY291 bGQgc3BhbiBzZXZlcmFsIGRldmljZXMuDQpAQCAtNjEsMTMgKzc0LDE2NSBAQA0KICMgZGVmaW5l IENIRUNLX0RFVkxPQ0soKQ0KICNlbmRpZg0KIA0KLSNkZWZpbmUgUFJJTlRLKHguLi4pICgodm9p ZCkoUkFJRDVfREVCVUcgJiYgcHJpbnRrKHgpKSkNCisjZGVmaW5lIFBSSU5USyh4Li4uKSAoKHZv aWQpKFJBSUQ1X0RFQlVHICYmIHByaW50ayhLRVJOX0RFQlVHIHgpKSkNCiAjaWYgUkFJRDVfREVC VUcNCiAjZGVmaW5lIGlubGluZQ0KICNkZWZpbmUgX19pbmxpbmVfXw0KICNlbmRpZg0KIA0KIHN0 YXRpYyB2b2lkIHByaW50X3JhaWQ1X2NvbmYgKHJhaWQ1X2NvbmZfdCAqY29uZik7DQorZXh0ZXJu IGludCBzeXNjdGxfYmFkYmxvY2tfdG9sZXJhbmNlOw0KK2V4dGVybiBpbnQgc3lzY3RsX21heF9y ZXdyaXRlczsNCisNCisNCitzdGF0aWMgdm9pZCBiYl9pbnNlcnRfaGFzaChzdHJ1Y3QgZGlza19p bmZvICpkaXNrLCBzdHJ1Y3QgYmFkYmxvY2sgKmJiKQ0KK3sNCisJc3RydWN0IGJhZGJsb2NrICoq YmJwID0gJmJiX2hhc2goZGlzaywgYmItPnNlY3Rvcik7DQorDQorCS8qcHJpbnRrKCJiYl9pbnNl cnRfaGFzaCgpLCBzZWN0b3IgJWxsdSBoYXNobnIgJWx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25n KWJiLT5zZWN0b3IsDQorCQliYl9oYXNobnIoYmItPnNlY3RvcikpOyovDQorDQorCWlmICgoYmIt Pmhhc2hfbmV4dCA9ICpiYnApICE9IE5VTEwpDQorCQkoKmJicCktPmhhc2hfcHByZXYgPSAmYmIt Pmhhc2hfbmV4dDsNCisJKmJicCA9IGJiOwkNCisJYmItPmhhc2hfcHByZXYgPSBiYnA7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGJiX3JlbW92ZV9oYXNoKHN0cnVjdCBiYWRibG9jayAqYmIpDQorew0K KwkvKnByaW50aygicmVtb3ZlX2hhc2goKSwgc2VjdG9yICVsbHUgaGFzaG5yICVsdVxuIiwgKHVu c2lnbmVkIGxvbmcgbG9uZyliYi0+c2VjdG9yLA0KKwkJYmJfaGFzaG5yKGJiLT5zZWN0b3IpKTsq Lw0KKw0KKwlpZiAoYmItPmhhc2hfcHByZXYpIHsNCisJCWlmIChiYi0+aGFzaF9uZXh0KQ0KKwkJ CWJiLT5oYXNoX25leHQtPmhhc2hfcHByZXYgPSBiYi0+aGFzaF9wcHJldjsNCisJCSpiYi0+aGFz aF9wcHJldiA9IGJiLT5oYXNoX25leHQ7DQorCQliYi0+aGFzaF9wcHJldiA9IE5VTEw7DQorCX0N Cit9DQorDQorc3RhdGljIHN0cnVjdCBiYWRibG9jayAqX19maW5kX2JhZGJsb2NrKHN0cnVjdCBk aXNrX2luZm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvciwgaW50IG4pDQorew0KKwlzdHJ1Y3QgYmFk YmxvY2sgKmJiOw0KKw0KKwlmb3IgKGJiID0gYmJfaGFzaChkaXNrLCBzZWN0b3IpOyBiYjsgYmIg PSBiYi0+aGFzaF9uZXh0KQ0KKwkJaWYgKGJiLT5zZWN0b3IgPT0gc2VjdG9yICYmIGJiLT5uID49 IG4pDQorCQkJcmV0dXJuIGJiOw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIHN0cnVj dCBiYWRibG9jayAqZmluZF9iYWRibG9jayhzdHJ1Y3QgZGlza19pbmZvICpkaXNrLCBzZWN0b3Jf dCBzZWN0b3IsIGludCBuKQ0KK3sNCisJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZf dCAqKSBkaXNrLT5yZGV2LT5tZGRldi0+cHJpdmF0ZTsNCisJc3RydWN0IGJhZGJsb2NrICpiYjsN CisNCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKwliYiA9IF9fZmluZF9i YWRibG9jayhkaXNrLCBzZWN0b3IsIG4pOw0KKwlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmlj ZV9sb2NrKTsNCisJcmV0dXJuIGJiOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3Vu dF9iYWRibG9ja3MgKHN0cnVjdCBkaXNrX2luZm8gKmRpc2ssIGludCBuKQ0KK3sNCisJcmFpZDVf Y29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBkaXNrLT5yZGV2LT5tZGRldi0+cHJpdmF0 ZTsNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCisJaW50IGo7DQorCWludCBpID0gMDsNCisNCisJ c3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKwlmb3IgKGogPSAwOyBqIDwgQkJf TlJfSEFTSDsgaisrKSB7DQorCQliYiA9IGRpc2stPmJhZGJsb2NrX2hhc2h0Ymxbal07DQorCQlm b3IgKDsgYmI7IGJiID0gYmItPmhhc2hfbmV4dCkNCisJCQlpZiAoYmItPm4gPj0gbikNCisJCQkJ aSsrOw0KKwl9DQorCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKw0KKwly ZXR1cm4gaTsNCit9DQorDQorc3RhdGljIGludCBncm93X2JhZGJsb2NrcyhzdHJ1Y3QgZGlza19p bmZvICpkaXNrKQ0KK3sNCisJY2hhciBiW0JERVZOQU1FX1NJWkVdOw0KKwlrbWVtX2NhY2hlX3Qg KnNjOw0KKw0KKwkvKiBoYXNoIHRhYmxlICovDQorCWlmICgoZGlzay0+YmFkYmxvY2tfaGFzaHRi bCA9IChzdHJ1Y3QgYmFkYmxvY2sgKiopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgSEFT SF9QQUdFU19PUkRFUikpID09IE5VTEwpIHsNCisJICAgIHByaW50aygiZ3Jvd19iYWRibG9ja3M6 IF9fZ2V0X2ZyZWVfcGFnZXMgZmFpbGVkXG4iKTsNCisJICAgIHJldHVybiAwOw0KKwl9DQorCW1l bXNldChkaXNrLT5iYWRibG9ja19oYXNodGJsLCAwLCBCQl9IQVNIX1BBR0VTICogUEFHRV9TSVpF KTsNCisNCisJLyogYmFkYmxvY2tzIGRiICovDQorCXNwcmludGYoZGlzay0+Y2FjaGVfbmFtZSwg InJhaWQ1LyVzXyVzX2JiYyIsIG1kbmFtZShkaXNrLT5yZGV2LT5tZGRldiksDQorCQkJYmRldm5h bWUoZGlzay0+cmRldi0+YmRldiwgYikpOw0KKwlzYyA9IGttZW1fY2FjaGVfY3JlYXRlKGRpc2st PmNhY2hlX25hbWUsDQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmFkYmxvY2spLA0KKwkJCSAg ICAgICAwLCAwLCBOVUxMLCBOVUxMKTsNCisJaWYgKCFzYykgew0KKwkJcHJpbnRrKCJncm93X2Jh ZGJsb2Nrczoga21lbV9jYWNoZV9jcmVhdGUgZmFpbGVkXG4iKTsNCisJCXJldHVybiAxOw0KKwl9 DQorCWRpc2stPnNsYWJfY2FjaGUgPSBzYzsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIHNocmlua19iYWRibG9ja3Moc3RydWN0IGRpc2tfaW5mbyAqZGlzaykNCit7DQorCXN0 cnVjdCBiYWRibG9jayAqYmI7DQorCWludCBqOw0KKw0KKwkvKiBiYWRibG9ja3MgZGIgKi8NCisJ Zm9yIChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJYmIgPSBkaXNrLT5iYWRibG9j a19oYXNodGJsW2pdOw0KKwkJZm9yICg7IGJiOyBiYiA9IGJiLT5oYXNoX25leHQpDQorCQkgICAg ICAgIGttZW1fY2FjaGVfZnJlZShkaXNrLT5zbGFiX2NhY2hlLCBiYik7DQorCX0NCisJa21lbV9j YWNoZV9kZXN0cm95KGRpc2stPnNsYWJfY2FjaGUpOw0KKwlkaXNrLT5zbGFiX2NhY2hlID0gTlVM TDsNCisNCisJLyogaGFzaCB0YWJsZSAqLw0KKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBk aXNrLT5iYWRibG9ja19oYXNodGJsLCBIQVNIX1BBR0VTX09SREVSKTsNCit9DQorDQorc3RhdGlj IHN0cnVjdCBiYWRibG9jayAqc3RvcmVfYmFkYmxvY2soc3RydWN0IGRpc2tfaW5mbyAqZGlzaywg c2VjdG9yX3Qgc2VjdG9yKQ0KK3sNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCisJcmFpZDVfY29u Zl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBkaXNrLT5yZGV2LT5tZGRldi0+cHJpdmF0ZTsN CisNCisJYmIgPSBrbWVtX2NhY2hlX2FsbG9jKGRpc2stPnNsYWJfY2FjaGUsIEdGUF9LRVJORUwp Ow0KKwlpZiAoIWJiKSB7DQorCQlwcmludGsoInN0b3JlX2JhZGJsb2NrOiBrbWVtX2NhY2hlX2Fs bG9jIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKwltZW1zZXQoYmIsIDAsIHNp emVvZigqYmIpKTsNCisJYmItPnNlY3RvciA9IHNlY3RvcjsNCisJYmItPm4gPSAwOw0KKw0KKwlz cGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorCWJiX2luc2VydF9oYXNoKGRpc2ss IGJiKTsNCisJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorDQorCXJldHVy biBiYjsNCit9DQorDQorc3RhdGljIHZvaWQgZGVsZXRlX2JhZGJsb2NrKHN0cnVjdCBkaXNrX2lu Zm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvcikNCit7DQorCXN0cnVjdCBiYWRibG9jayAqYmI7DQor CXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgZGlzay0+cmRldi0+bWRkZXYt PnByaXZhdGU7DQorDQorCS8qIGRlbGV0ZSBvbmx5IGZyb20gdGhlIEhhcmRSZWFkRXJyIGxpc3Qg Ki8NCisJYmIgPSBmaW5kX2JhZGJsb2NrKGRpc2ssIHNlY3Rvciwgc3lzY3RsX21heF9yZXdyaXRl cyk7DQorCWlmICghYmIpDQorCQkvKiByZXNldCBvbiB3cml0ZSdsbCBjYWxsIHVzIGxpa2UgYW4g aWRpb3QgOn0gKi8NCisJCXJldHVybjsNCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xv Y2spOw0KKwliYl9yZW1vdmVfaGFzaChiYik7DQorCWttZW1fY2FjaGVfZnJlZShkaXNrLT5zbGFi X2NhY2hlLCBiYik7DQorCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KK30N CisNCiANCiBzdGF0aWMgdm9pZCBfX3JlbGVhc2Vfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwg c3RydWN0IHN0cmlwZV9oZWFkICpzaCkNCiB7DQpAQCAtMTk4LDcgKzM2Myw3IEBADQogCXNoLT5w ZF9pZHggPSBwZF9pZHg7DQogCXNoLT5zdGF0ZSA9IDA7DQogDQotCWZvciAoaT1kaXNrczsgaS0t OyApIHsNCisJZm9yIChpPWRpc2tzKzE7IGktLTsgKSB7DQogCQlzdHJ1Y3QgcjVkZXYgKmRldiA9 ICZzaC0+ZGV2W2ldOw0KIA0KIAkJaWYgKGRldi0+dG9yZWFkIHx8IGRldi0+dG93cml0ZSB8fCBk ZXYtPndyaXR0ZW4gfHwNCkBAIC0yOTEsMTIgKzQ1NiwxMiBAQA0KIAlzaCA9IGttZW1fY2FjaGVf YWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7DQogCWlmICghc2gpDQogCQlyZXR1 cm4gMDsNCi0JbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEp KnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsNCisJbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChj b25mLT5yYWlkX2Rpc2tzLTErMSkqc2l6ZW9mKHN0cnVjdCByNWRldikpOw0KIAlzaC0+cmFpZF9j b25mID0gY29uZjsNCiAJc3Bpbl9sb2NrX2luaXQoJnNoLT5sb2NrKTsNCiANCi0JaWYgKGdyb3df YnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcykpIHsNCi0JCXNocmlua19idWZmZXJzKHNoLCBj b25mLT5yYWlkX2Rpc2tzKTsNCisJaWYgKGdyb3dfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNr cysxKSkgew0KKwkJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MrMSk7DQogCQlr bWVtX2NhY2hlX2ZyZWUoY29uZi0+c2xhYl9jYWNoZSwgc2gpOw0KIAkJcmV0dXJuIDA7DQogCX0N CkBAIC0zMTUsOCArNDgwLDEwIEBADQogDQogCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZSwgInJh aWQ1LyVzIiwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7DQogDQorCS8qICsxOiB3ZSBuZWVkIGV4dHJh IHNwYWNlIGluIHRoZSAqc2gtPmRldnMgZm9yIHRoZSAnYWN0aXZlIHNwYXJlJyB0byBrZWVwDQor CSAgICBoYW5kbGVfc3RyaXBlKCkgc2ltcGxlICovDQogCXNjID0ga21lbV9jYWNoZV9jcmVhdGUo Y29uZi0+Y2FjaGVfbmFtZSwgDQotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQp KyhkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLA0KKwkJCSAgICAgICBzaXplb2Yoc3RydWN0 IHN0cmlwZV9oZWFkKSsoZGV2cy0xKzEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLA0KIAkJCSAgICAg ICAwLCAwLCBOVUxMLCBOVUxMKTsNCiAJaWYgKCFzYykNCiAJCXJldHVybiAxOw0KQEAgLTQzNSw3 ICs2MDIsMjIgQEANCiAJCWVsc2Ugew0KIAkJCWNsZWFyX2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ ZGV2W2ldLmZsYWdzKTsNCiAJCQljbGVhcl9iaXQoUjVfUmVXcml0ZSwgJnNoLT5kZXZbaV0uZmxh Z3MpOw0KLQkJCW1kX2Vycm9yKGNvbmYtPm1kZGV2LCBjb25mLT5kaXNrc1tpXS5yZGV2KTsNCisN CisJICAgIAkJLyoNCisJCQkgICAgcnVsZSAxLiw6IHRyeSB0byBrZWVwIGFsbCBkaXNrIGluX3N5 bmMgZXZlbiBpZiB3ZSd2ZSBnb3QNCisJCQkgICAgdW5maXhhYmxlIHJlYWQgZXJyb3JzLCBjYXVz ZSB0aGUgJ2FjdGl2ZSBzcGFyZScgbWF5IGNhbg0KKwkJCSAgICByZWJ1aWxkIGEgY29tcGxldGUg Y29sdW1uIGZyb20gcGFydGlhbGx5IGZhaWxlZCBkcml2ZXMNCisJICAgIAkJKi8NCisJCQlpZiAo dGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPmRpc2tzW2ldLnJkZXYtPmZsYWdzKSkgew0KKwkJCSAg ICBjaGFyIGJbQkRFVk5BTUVfU0laRV07DQorCQkJICAgIHByaW50ayhLRVJOX0FMRVJUDQorCQkJ CSAgICAicmFpZDVfZW5kX3JlYWRfcmVxdWVzdDogUmVhZCBmYWlsdXJlICVzIG9uIHNlY3RvciAl bGx1ICglZCkgaW4gJXMgbW9kZVxuIiwNCisJCQkJICAgIGJkZXZuYW1lKGNvbmYtPmRpc2tzW2ld LnJkZXYtPmJkZXYsIGIpLA0KKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9y LCBhdG9taWNfcmVhZCgmc2gtPmNvdW50KSwNCisJCQkJICAgIGNvbmYtPndvcmtpbmdfZGlza3Mg Pj0gY29uZi0+cmFpZF9kaXNrcyA/ICJvcHRpbWFsIiA6ICJkZWdyYWRlZCIpOw0KKwkJCSAgICBz ZXRfYml0KFI1X0hhcmRSZWFkRXJyLCAmc2gtPmRldltpXS5mbGFncyk7DQorCQkJfSBlbHNlDQor CQkJICAgIG1kX2Vycm9yKGNvbmYtPm1kZGV2LCBjb25mLT5kaXNrc1tpXS5yZGV2KTsNCiAJCX0N CiAJfQ0KIAlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPmRpc2tzW2ldLnJkZXYsIGNvbmYtPm1kZGV2 KTsNCkBAIC00NzIsMTQgKzY1NCwyNiBAQA0KIAlQUklOVEsoImVuZF93cml0ZV9yZXF1ZXN0ICVs bHUvJWQsIGNvdW50ICVkLCB1cHRvZGF0ZTogJWQuXG4iLCANCiAJCSh1bnNpZ25lZCBsb25nIGxv bmcpc2gtPnNlY3RvciwgaSwgYXRvbWljX3JlYWQoJnNoLT5jb3VudCksDQogCQl1cHRvZGF0ZSk7 DQorCS8qIHNvcnJ5DQogCWlmIChpID09IGRpc2tzKSB7DQogCQlCVUcoKTsNCiAJCXJldHVybiAw Ow0KLQl9DQorCX0qLw0KIA0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ss IGZsYWdzKTsNCi0JaWYgKCF1cHRvZGF0ZSkNCisJaWYgKCF1cHRvZGF0ZSkgew0KKwkgICAgICAg IGNoYXIgYltCREVWTkFNRV9TSVpFXTsNCisJCS8qICB3ZSBtdXN0IGZhaWwgdGhpcyBkcml2ZSwg Y2F1c2Ugcmlza3MgdGhlIGludGVncml0eSBvZiBkYXRhDQorCQkgICAgaWYgdGhpcyBzZWN0b3Ig aXMgcmVhZGFibGUuIGxhdGVyLCB3ZSBjb3VsZCBjaGVjaw0KKwkJICAgIGlzIGl0IHRoaXMgcmVh ZGFibGUsIGlmIG5vdCwgdGhlbiB3ZSBjYW4gaGFuZGxlIGl0IGFzIGENCisJCSAgICBjb21tb24g YmFkYmxvY2suICovDQorCSAgICAgICAgcHJpbnRrKEtFUk5fQUxFUlQNCisJCQkicmFpZDVfZW5k X3dyaXRlX3JlcXVlc3Q6IFdyaXRlIGZhaWx1cmUgJXMgb24gc2VjdG9yICVsbHUgKCVkKSBpbiAl cyBtb2RlXG4iLA0KKwkJICAgICAgICBiZGV2bmFtZShjb25mLT5kaXNrc1tpXS5yZGV2LT5iZGV2 LCBiKSwNCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIGF0b21pY19yZWFkKCZz aC0+Y291bnQpLA0KKwkJICAgICAgICBjb25mLT53b3JraW5nX2Rpc2tzID49IGNvbmYtPnJhaWRf ZGlza3MgPyAib3B0aW1hbCIgOiAiZGVncmFkZWQiKTsNCiAJCW1kX2Vycm9yKGNvbmYtPm1kZGV2 LCBjb25mLT5kaXNrc1tpXS5yZGV2KTsNCisJfQ0KIA0KIAlyZGV2X2RlY19wZW5kaW5nKGNvbmYt PmRpc2tzW2ldLnJkZXYsIGNvbmYtPm1kZGV2KTsNCiAJDQpAQCAtNTA5LDMzICs3MDMsMTU2IEBA DQogCWRldi0+cmVxLmJpX3ByaXZhdGUgPSBzaDsNCiANCiAJZGV2LT5mbGFncyA9IDA7DQotCWlm IChpICE9IHNoLT5wZF9pZHgpDQorCWlmIChpICE9IHNoLT5wZF9pZHggJiYgaSA8IHNoLT5yYWlk X2NvbmYtPnJhaWRfZGlza3MpCS8qIGFjdGl2ZSBzcGFyZT8gKi8NCiAJCWRldi0+c2VjdG9yID0g Y29tcHV0ZV9ibG9ja25yKHNoLCBpKTsNCiB9DQogDQorc3RhdGljIGludCByYWlkNV9yZW1vdmVf ZGlzayhtZGRldl90ICptZGRldiwgaW50IG51bWJlcik7DQorc3RhdGljIGludCByYWlkNV9hZGRf ZGlzayhtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7DQorLypzdGF0aWMqLyB2b2lk IGtpY2tfcmRldl9mcm9tX2FycmF5KG1ka19yZGV2X3QgKiByZGV2KTsNCiBzdGF0aWMgdm9pZCBl cnJvcihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikNCiB7DQogCWNoYXIgYltCREVW TkFNRV9TSVpFXTsNCisJY2hhciBiMltCREVWTkFNRV9TSVpFXTsNCiAJcmFpZDVfY29uZl90ICpj b25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsNCiAJUFJJTlRLKCJyYWlkNTog ZXJyb3IgY2FsbGVkXG4iKTsNCiANCiAJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFn cykpIHsNCi0JCW1kZGV2LT5zYl9kaXJ0eSA9IDE7DQotCQlpZiAodGVzdF9iaXQoSW5fc3luYywg JnJkZXYtPmZsYWdzKSkgew0KLQkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsNCi0JCQltZGRldi0+ ZGVncmFkZWQrKzsNCi0JCQljb25mLT5mYWlsZWRfZGlza3MrKzsNCisJCWludCBtZGRpc2tzID0g MDsNCisJCW1ka19yZGV2X3QgKnJkOw0KKwkJbWRrX3JkZXZfdCAqcmRldnMgPSBOVUxMOw0KKwkJ c3RydWN0IGxpc3RfaGVhZCAqcnRtcDsNCisJCWludCBpOw0KKw0KKwkJSVRFUkFURV9SREVWKG1k ZGV2LHJkLHJ0bXApDQorCQkgICAgew0KKwkJCXByaW50aygibWRkZXYlZDogJXNcbiIsIG1kZGlz a3MsIGJkZXZuYW1lKHJkLT5iZGV2LGIpKTsNCisJCQltZGRpc2tzKys7DQorCQkgICAgfQ0KKwkJ Zm9yIChpID0gMDsgaSA8IG1kZGlza3MgJiYgKHJkID0gY29uZi0+ZGlza3NbaV0ucmRldik7IGkr Kykgew0KKwkJCXByaW50aygicjVkZXYlZDogJXNcbiIsIGksIGJkZXZuYW1lKHJkLT5iZGV2LGIp KTsNCisJCX0NCisJCUlURVJBVEVfUkRFVihtZGRldixyZCxydG1wKQ0KKwkJICAgIHsNCisJCQly ZGV2cyA9IHJkOw0KKwkJCWJyZWFrOw0KKwkJICAgIH0NCitwcmludGsoIklJICVkICVkID4gJWQg JWQgaW5zOiVkICVwXG4iLA0KKwltZGRldi0+cmFpZF9kaXNrcywgbWRkaXNrcywgY29uZi0+cmFp ZF9kaXNrcywgbWRkZXYtPmRlZ3JhZGVkLA0KKwl0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+Zmxh Z3MpLCByZGV2cyk7DQorCQlpZiAoY29uZi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10ucmRldiA9 PSByZGV2DQorCQkgICAgJiYgY29uZi0+bWlycm9yaXQgIT0gLTEpIHsNCisJCQkvKiBpbl9zeW5j LCBidXQgbXVzdCBiZSBoYW5kbGVkIHNwZWNpYWxseSwgZG9uJ3QgbGV0ICdkZWdyYWRlZCsrJyAq Lw0KKwkJICAgICAgICBwcmludGsgKEtFUk5fQUxFUlQgImFjdGl2ZSBzcGFyZSBoYXMgZmFpbGVk ICVzIChpbl9zeW5jICVkKVxuIiwNCisJCQkJICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsYiksIHRl c3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpOw0KKwkJCW1kZGV2LT5zYl9kaXJ0eSA9IDE7 DQorCQkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpDQorCQkJCXJkZXYtPnJh aWRfZGlzayA9IGNvbmYtPnJhaWRfZGlza3M7IC8qIG1lIGFzIG15c2VsZiwgYWdhaW4gOykgKi8N CiAJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsNCi0JCQkvKg0KLQkJCSAqIGlm IHJlY292ZXJ5IHdhcyBydW5uaW5nLCBtYWtlIHN1cmUgaXQgYWJvcnRzLg0KLQkJCSAqLw0KLQkJ CXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KTsNCi0JCX0NCi0JCXNl dF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOw0KLQkJcHJpbnRrIChLRVJOX0FMRVJUDQotCQkJ InJhaWQ1OiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuIg0KLQkJCSIgT3Bl cmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlc1xuIiwNCi0JCQliZGV2bmFtZShyZGV2LT5i ZGV2LGIpLCBjb25mLT53b3JraW5nX2Rpc2tzKTsNCisJCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYt PmZsYWdzKTsNCisJCSAgICAgICAgY29uZi0+bWlycm9yaXQgPSAtMTsNCisJCX0gZWxzZSBpZiAo bWRkaXNrcyA+IGNvbmYtPnJhaWRfZGlza3MgJiYgIW1kZGV2LT5kZWdyYWRlZA0KKwkJICAgICYm IHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsNCisJCSAgICAvKiBoYXZlIGFjdGl2 ZSBzcGFyZSwgYXJyYXkgaXMgb3B0aW1hbCwgcmVtb3ZlZCBkaXNrIG1lbWJlcg0KKwkJCSAgICBv ZiBpdCAoYnV0IG5vdCB0aGUgYWN0aXZlIHNwYXJlKSAqLw0KKwkJICAgIGlmIChyZGV2LT5yYWlk X2Rpc2sgPT0gY29uZi0+bWlycm9yaXQgJiYgY29uZi0+ZGlza3NbY29uZi0+cmFpZF9kaXNrc10u cmRldikgew0KKwkJCWlmICghdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPmRpc2tzW2NvbmYtPnJh aWRfZGlza3NdLnJkZXYtPmZsYWdzKSkgew0KKwkJCSAgICBwcmludGsoS0VSTl9BTEVSVCAiZGlz ayAlcyBmYWlsZWQgYW5kIGFjdGl2ZSBzcGFyZSBpc24ndCBpbl9zeW5jIHlldCwgcmVhZGQgYXMg bm9ybWFsIHNwYXJlXG4iLA0KKwkJCQkJYmRldm5hbWUocmRldi0+YmRldixiKSk7DQorCQkJICAg IGNvbmYtPm1pcnJvcml0ID0gLTE7DQorCQkJICAgIGdvdG8gbGV0aXRnbzsNCisJCQl9IGVsc2Ug ew0KKwkJCSAgICBpbnQgcmV0Ow0KKw0KKwkJCSAgICAvKiBob3QgcmVwbGFjZSB0aGUgbWlycm9y ZWQgZHJpdmUgd2l0aCB0aGUgJ2FjdGl2ZSBzcGFyZScNCisJCQkJdGhpcyBpcyByZWFsbHkgImhv dCIsIEkgY2FuJ3Qgc2VlIGNsZWFybHkgdGhlIHRoaW5ncw0KKwkJCQl3aGF0IEkgaGF2ZSB0byBk byBoZXJlLiA6fQ0KKwkJCQlwcmF5LiAqLw0KKw0KKwkJCSAgICBwcmludGsoS0VSTl9BTEVSVCAi cmVwbGFjZSAlcyB3aXRoIGluX3N5bmMgYWN0aXZlIHNwYXJlICVzXG4iLA0KKwkJCQkgICAgYmRl dm5hbWUocmRldi0+YmRldixiKSwNCisJCQkJICAgIGJkZXZuYW1lKHJkZXZzLT5iZGV2LGIyKSk7 DQorCQkJICAgIGNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOw0KKwkJCSAgICBzZXRf Yml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsNCisNCisJCQkgICAgY29uZi0+bWlycm9yaXQgPSAt MTsNCisNCisJCQkgICAgLyogbXkgR29kLCBhbSBJIHNhbmU/ICovDQorCQkJICAgIHdoaWxlICgo aSA9IGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkpIHsNCisJCQkJcHJpbnRrKCJ3YWl0 aW5nIGZvciBkaXNrICVkIC4uICVkXG4iLA0KKwkJCQkJcmRldi0+cmFpZF9kaXNrLCBpKTsNCisJ CQkgICAgfQ0KKwkJCSAgICByZXQgPSByYWlkNV9yZW1vdmVfZGlzayhtZGRldiwgcmRldi0+cmFp ZF9kaXNrKTsNCisJCQkgICAgaWYgKHJldCkgew0KKwkJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1 X3JlbW92ZV9kaXNrMTogYnVzeT8hXG4iKTsNCisJCQkJcmV0dXJuOwkvLyBzaG91bGQgbm90aGlu ZyB0byBkbw0KKwkJCSAgICB9DQorDQorCQkJICAgIHJkID0gY29uZi0+ZGlza3NbY29uZi0+cmFp ZF9kaXNrc10ucmRldjsNCisJCQkgICAgd2hpbGUgKChpID0gYXRvbWljX3JlYWQoJnJkLT5ucl9w ZW5kaW5nKSkpIHsNCisJCQkJcHJpbnRrKCJ3YWl0aW5nIGZvciBkaXNrICVkIC4uICVkXG4iLA0K KwkJCQkJY29uZi0+cmFpZF9kaXNrcywgaSk7DQorCQkJICAgIH0NCisJCQkgICAgY2xlYXJfYml0 KEluX3N5bmMsICZyZC0+ZmxhZ3MpOw0KKwkJCSAgICByZXQgPSByYWlkNV9yZW1vdmVfZGlzayht ZGRldiwgY29uZi0+cmFpZF9kaXNrcyk7DQorCQkJICAgIGlmIChyZXQpIHsNCisJCQkJcHJpbnRr KEtFUk5fRVJSICJyYWlkNV9yZW1vdmVfZGlzazI6IGJ1c3k/IVxuIik7DQorCQkJCXJldHVybjsJ Ly8gLi4NCisJCQkgICAgfQ0KKw0KKwkJCSAgICByZXQgPSByYWlkNV9hZGRfZGlzayhtZGRldiwg cmQpOw0KKwkJCSAgICBpZiAoIXJldCkgew0KKwkJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1X2Fk ZF9kaXNrOiBubyBmcmVlIHNsb3Q/IVxuIik7DQorCQkJCXJldHVybjsJLy8gLi4NCisJCQkgICAg fQ0KKwkJCSAgICBzZXRfYml0KEluX3N5bmMsICZyZC0+ZmxhZ3MpOw0KKw0KKwkJCSAgICAvKiBi b3Jyb3dlZCBmcm9tIGhvdF9yZW1vdmVfZGlzaygpICovDQorCQkJICAgIGtpY2tfcmRldl9mcm9t X2FycmF5KHJkZXYpOw0KKwkJCSAgICBtZGRldi0+c2JfZGlydHkgPSAxOw0KKwkJCX0NCisJCSAg ICB9IGVsc2Ugew0KKwkJCS8qIGluX3N5bmMgZGlzayBmYWlsZWQgKCFkZWdyYWRlZCksIGhhdmUg YSBzcGFyZSwgc3RhcnRpbmcNCisJCQkgICAgcHJvYWN0aXZlIG1pcnJvcmluZyAqLw0KKwkJCWlm IChjb25mLT5taXJyb3JpdCA9PSAtMSkgew0KKwkJCQlwcmludGsoS0VSTl9BTEVSVCAicmVzeW5j IGZyb20gJXMgdG8gc3BhcmUgJXMgKCVkKVxuIiwNCisJCQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYs YiksDQorCQkJICAgIAkJYmRldm5hbWUocmRldnMtPmJkZXYsYjIpLA0KKwkJCQkJY29uZi0+cmFp ZF9kaXNrcyk7DQorDQorCQkJCWNvbmYtPm1pcnJvcml0ID0gcmRldi0+cmFpZF9kaXNrOw0KKw0K KwkJCQltZGRldi0+ZGVncmFkZWQrKzsJLyogdG8gY2FsbCByYWlkNV9ob3RfYWRkX2Rpc2soKSwg cmVzZXQgdGhlcmUgKi8NCisJCQl9IGVsc2Ugew0KKwkJCQlwcmludGsoS0VSTl9BTEVSVCAicHJv YWN0aXZlIG1pcnJvcmluZyBpcyBhY3RpdmUsIGxldCB0aGlzIGRldmljZSBnb1xuIik7DQorCQkJ CWdvdG8gbGV0aXRnbzsNCisJCQl9DQorCQkgICAgfQ0KKwkJfSBlbHNlIHsNCitsZXRpdGdvOg0K KwkJICAgIG1kZGV2LT5zYl9kaXJ0eSA9IDE7DQorCQkgICAgaWYgKHRlc3RfYml0KEluX3N5bmMs ICZyZGV2LT5mbGFncykpIHsNCisJCQkgICAgY29uZi0+d29ya2luZ19kaXNrcy0tOw0KKwkJCSAg ICBtZGRldi0+ZGVncmFkZWQrKzsNCisJCQkgICAgY29uZi0+ZmFpbGVkX2Rpc2tzKys7DQorCQkJ ICAgIGNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOw0KKwkJCSAgICAvKiBlcnJvcigp IHdhcyBub3QgY2FsbGVkIGlmIHRoZSBzeW5jaW5nIHdhcyBzdG9wcGVkIGJ5IElPIGVycm9yICov DQorCQkJICAgIGlmIChjb25mLT5taXJyb3JpdCAhPSAtMSAmJg0KKwkJCQkhdGVzdF9iaXQoSW5f c3luYywgJmNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXYtPmZsYWdzKSkgew0KKwkJ CQkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJzdG9wIHByb2FjdGl2ZSBtaXJyb3JpbmdcbiIpOw0K KwkJCQkgICAgY29uZi0+bWlycm9yaXQgPSAtMTsNCisJCQkgICAgfQ0KKwkJCSAgICAvKg0KKwkJ CSAgICAgKiBpZiByZWNvdmVyeSB3YXMgcnVubmluZywgbWFrZSBzdXJlIGl0IGFib3J0cy4NCisJ CQkgICAgICovDQorCQkJICAgIHNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292 ZXJ5KTsNCisJCSAgICB9DQorCQkgICAgc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7DQor CQkgICAgcHJpbnRrIChLRVJOX0FMRVJUDQorCQkJICAgICJyYWlkNTogRGlzayBmYWlsdXJlIG9u ICVzLCBkaXNhYmxpbmcgZGV2aWNlLiINCisJCQkgICAgIiBPcGVyYXRpb24gY29udGludWluZyBv biAlZCBkZXZpY2VzXG4iLA0KKwkJCSAgICBiZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBjb25mLT53 b3JraW5nX2Rpc2tzKTsNCisJCX0NCiAJfQ0KIH0JDQogDQpAQCAtOTQwLDYgKzEyNTcsOCBAQA0K IAlpbnQgbG9ja2VkPTAsIHVwdG9kYXRlPTAsIHRvX3JlYWQ9MCwgdG9fd3JpdGU9MCwgZmFpbGVk PTAsIHdyaXR0ZW49MDsNCiAJaW50IG5vbl9vdmVyd3JpdGUgPSAwOw0KIAlpbnQgZmFpbGVkX251 bT0wOw0KKwlpbnQgYXNwYXJlPTAsIGFzcGFyZW51bT0tMTsNCisJc3RydWN0IGRpc2tfaW5mbyAq YXNwYXJlZGV2Ow0KIAlzdHJ1Y3QgcjVkZXYgKmRldjsNCiANCiAJUFJJTlRLKCJoYW5kbGluZyBz dHJpcGUgJWxsdSwgY250PSVkLCBwZF9pZHg9JWRcbiIsDQpAQCAtOTUyLDEwICsxMjcxLDE4IEBA DQogDQogCXN5bmNpbmcgPSB0ZXN0X2JpdChTVFJJUEVfU1lOQ0lORywgJnNoLT5zdGF0ZSk7DQog CS8qIE5vdyB0byBsb29rIGFyb3VuZCBhbmQgc2VlIHdoYXQgY2FuIGJlIGRvbmUgKi8NCisJYXNw YXJlZGV2ID0gJmNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdOw0KKwlpZiAoIWNvbmYtPm1k ZGV2LT5kZWdyYWRlZCAmJiBhc3BhcmVkZXYtPnJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJmFz cGFyZWRldi0+cmRldi0+ZmxhZ3MpDQorCQkmJiBjb25mLT5taXJyb3JpdCAhPSAtMSkgew0KKwkg ICAgYXNwYXJlKys7DQorCSAgICBhc3BhcmVudW0gPSBzaC0+cmFpZF9jb25mLT5taXJyb3JpdDsN CisJICAgIFBSSU5USygiaGFzIGFzcGFyZSAoJWQpXG4iLCBhc3BhcmVudW0pOw0KKwl9DQogDQog CXJjdV9yZWFkX2xvY2soKTsNCi0JZm9yIChpPWRpc2tzOyBpLS07ICkgew0KKwlmb3IgKGk9ZGlz a3MrYXNwYXJlOyBpLS07ICkgew0KIAkJbWRrX3JkZXZfdCAqcmRldjsNCisJCXN0cnVjdCBiYWRi bG9jayAqYmIgPSBOVUxMOw0KIAkJZGV2ID0gJnNoLT5kZXZbaV07DQogCQljbGVhcl9iaXQoUjVf SW5zeW5jLCAmZGV2LT5mbGFncyk7DQogDQpAQCAtOTk3LDE4ICsxMzI0LDk1IEBADQogCQl9DQog CQlpZiAoZGV2LT53cml0dGVuKSB3cml0dGVuKys7DQogCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNl KGNvbmYtPmRpc2tzW2ldLnJkZXYpOw0KKwkJaWYgKHJkZXYgJiYgdGVzdF9iaXQoSW5fc3luYywg JnJkZXYtPmZsYWdzKSAmJg0KKwkJICAgICFzeW5jaW5nICYmCS8qIGJldHRlciB0byB0cnkgb24g c3luY2luZy4uICovDQorCQkgICAgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmZGV2LT5mbGFncykg JiYNCisJCSAgICAhdGVzdF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncykpIHsNCisJCQkvKiAu LnBvdGVudGlhbGx5IGRlc2VydmVkIHRvIHJlYWQsIHdlIG11c3QgY2hlY2sgaXQNCisJCQkgICAg Y2hlY2ttZTogaXQgY291bGQgYmUgYSBiaWcgcGVyZm9ybWFuY2UgcGVuYWx0eSBpZiBjYWxsZWQN CisJCQkJd2l0aG91dCBhIGdvb2QgcmVhc29uISBpdCdzIHNlZW1zIG9rIGZvciBub3cNCisJCQkq Lw0KKwkJCVBSSU5USygiZmluZF9iYWRibG9jayAlZDogJWxsdVxuIiwgaSwgc2gtPnNlY3Rvcik7 DQorCQkJYmIgPSBmaW5kX2JhZGJsb2NrKCZjb25mLT5kaXNrc1tpXSwgc2gtPnNlY3Rvciwgc3lz Y3RsX21heF9yZXdyaXRlcyk7DQorCQl9DQogCQlpZiAoIXJkZXYgfHwgIXRlc3RfYml0KEluX3N5 bmMsICZyZGV2LT5mbGFncykpIHsNCiAJCQkvKiBUaGUgUmVhZEVycm9yIGZsYWcgd2lsbCBqdXN0 IGJlIGNvbmZ1c2luZyBub3cgKi8NCiAJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmZGV2LT5m bGFncyk7DQogCQkJY2xlYXJfYml0KFI1X1JlV3JpdGUsICZkZXYtPmZsYWdzKTsNCiAJCX0NCiAJ CWlmICghcmRldiB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQ0KLQkJICAgIHx8 IHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJmRldi0+ZmxhZ3MpKSB7DQorCQkgICAgfHwgdGVzdF9i aXQoUjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncykNCisJCSAgICB8fCB0ZXN0X2JpdChSNV9IYXJk UmVhZEVyciwgJmRldi0+ZmxhZ3MpDQorCQkgICAgfHwgYmIpIHsNCisJCQlpZiAocmRldiAmJiB0 ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpDQorCQkJICAgICYmICFiYiAmJiAodGVzdF9i aXQoUjVfSGFyZFJlYWRFcnIsICZkZXYtPmZsYWdzKQ0KKwkJCQkgICAgICAgfHwgdGVzdF9iaXQo UjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncykpDQorCQkJICAgICkgew0KKwkJCQkvKiB0YWtlIGFu IGFjdGlvbiBvbmx5IGlmIGl0J3MgYSBfbmV3XyBiYWQgYmxvY2sNCisJCQkJICAgIGFuZCBub3Qg d2hpbGUgcHJvYWN0aXZlIG1pcnJvcmluZyBpcyBydW5uaW5nICovDQorDQorCQkJCWlmICghYXNw YXJlIHx8IChhc3BhcmUgJiYgdGVzdF9iaXQoSW5fc3luYywgJmFzcGFyZWRldi0+cmRldi0+Zmxh Z3MpLyphc3BhcmVudW0gIT0gaSovKSkgew0KKwkJCQkgICAgc3RydWN0IGJhZGJsb2NrICpfYmI7 DQorCQkJCSAgICAvKiBpZiBhc3BhcmUgaXMgc3luY2luZyB3ZSBzaG91bGRuJ3QgcmVnaXN0ZXIg bmV3DQorCQkJCQliYWQgYmxvY2tzLCBhZnRlciB0aGUgc3luYyB0aGlzIGRpc2sgd2lsbA0KKwkJ CQkJYmUga2lja2VkIGFueXdheSAqLw0KKw0KKwkJCQkgICAgaWYgKHRlc3RfYml0KFI1X0hhcmRS ZWFkRXJyLCAmZGV2LT5mbGFncykpIHsNCisJCQkJCXByaW50aygiUjVfSGFyZFJlYWRFcnIgZmlu ZF9iYWRibG9jayAlZCwwOiAlbGx1XG4iLCBpLCBzaC0+c2VjdG9yKTsNCisJCQkJCS8qIGl0IGlz IHBvc3NpYmxlIHRoYXQgaXQncyBhbHJlYWR5IG9uIHRoZSBsaXN0DQorCQkJCQkgICAgZHVlIHRv IGEgc29mdCBlcnJvciAqLw0KKwkJCQkJX2JiID0gZmluZF9iYWRibG9jaygmY29uZi0+ZGlza3Nb aV0sIHNoLT5zZWN0b3IsIDApOw0KKwkJCQkJaWYgKCFfYmIpDQorCQkJCQkgICAgX2JiID0gc3Rv cmVfYmFkYmxvY2soJmNvbmYtPmRpc2tzW2ldLCBzaC0+c2VjdG9yKTsNCisNCisJCQkJCWlmIChf YmIpDQorCQkJCQkgICAgX2JiLT5uID0gMTAwOwkvLyBmaXhtZQ0KKw0KKwkJCQkJLy8gaGEga296 YmVuIHZvbHQgbWFzaWsgSU8gZXMgYXp0IGthcGp1ayBlbG9iYiBpZGU/Pw0KKwkJCQkJLy8gaGFz b25sbyBkb2xvZyB2YW4gYSByZXdyaXRlLW5hbCBpcywgZWd5IGNpcG8NCisJCQkJCWNsZWFyX2Jp dChSNV9IYXJkUmVhZEVyciwgJmRldi0+ZmxhZ3MpOw0KKwkJCQkgICAgfSBlbHNlDQorCQkJCSAg ICAvKiBGSVhNRTogZXogbmVtIGlkZSBrZW5lLCBtZXJ0IGl0dCB0b2Jic3pvcg0KKwkJCQkJaXMg cmFoaXZvZGhhdCBlZ3kgaGliYW5hbCBlcyBhICtzemFyIGxlc3osDQorCQkJCQlpbmthYmIgYXog X2VuZF9yZWFkIC1iZSBrZW5lICovDQorCQkJCSAgICBpZiAodGVzdF9iaXQoUjVfUmVhZEVycm9y LCAmZGV2LT5mbGFncykgJiYNCisJCQkJCSF0ZXN0X2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFn cykpIHsNCisJCQkJCS8qIG1pa29yIHR1bGxlcGkgYSBsaW1pdGV0IHNlY3RvciByZXdyaXRlIHV0 YW4NCisJCQkJCSAgICBSZVJlYWQgLW5lbCBhIGZpbmRfYmFjYmxvY2sgbWVndGFsYWxqYSBheg0K KwkJCQkJICAgIGFkb3R0IHN6ZWt0b3J0IGVzICdOT1QgY29ycmVjdGVkJyAtZWwNCisJCQkJCSAg ICBiZWJpbGxlbiBhIEhhcmRSZWFkRXJyIGZsYWcsIGFtaSB2ZWd1bGlzIGpvICovDQorCQkJCQlw cmludGsoIlI1X1JlYWRFcnJvciBmaW5kX2JhZGJsb2NrICVkLDA6ICVsbHVcbiIsIGksIHNoLT5z ZWN0b3IpOw0KKwkJCQkJX2JiID0gZmluZF9iYWRibG9jaygmY29uZi0+ZGlza3NbaV0sIHNoLT5z ZWN0b3IsIDApOw0KKwkJCQkJaWYgKCFfYmIpDQorCQkJCQkgICAgX2JiID0gc3RvcmVfYmFkYmxv Y2soJmNvbmYtPmRpc2tzW2ldLCBzaC0+c2VjdG9yKTsNCisNCisJCQkJCWlmIChfYmIpDQorCQkJ CQkgICAgX2JiLT5uKys7DQorCQkJCSAgICB9DQorDQorCQkJCSAgICBpZiAoY291bnRfYmFkYmxv Y2tzKCZjb25mLT5kaXNrc1tpXSwgc3lzY3RsX21heF9yZXdyaXRlcykgPj0gc3lzY3RsX2JhZGJs b2NrX3RvbGVyYW5jZSkgew0KKwkJCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOw0KKw0KKwkJCQkJ cHJpbnRrKEtFUk5fQUxFUlQgInRvbyBtYW55IGJhZGJsb2NrcyAoJWx1KSBvbiBkZXZpY2UgJXMg WyVkXVxuIiwNCisJCQkJCQkgICAgY291bnRfYmFkYmxvY2tzKCZjb25mLT5kaXNrc1tpXSwgc3lz Y3RsX21heF9yZXdyaXRlcykgKyAxLA0KKwkJCQkJCSAgICBiZGV2bmFtZShjb25mLT5kaXNrc1tp XS5yZGV2LT5iZGV2LCBiKSwNCisJCQkJCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRp bmcpKTsNCisNCisJCQkJCS8qIHVzZWQgYnkgcmFpZDVfYWRkX2Rpc2sgKi8NCisJCQkJCWNvbmYt Pm1kZGV2LT5lZWhfZGF0YS5mYWlsZWRfbnVtID0gaTsNCisJCQkJCW1kX2Vycm9yKGNvbmYtPm1k ZGV2LCBjb25mLT5kaXNrc1tpXS5yZGV2KTsNCisJCQkJICAgIH0NCisJCQkJfQ0KKwkJCX0NCiAJ CQlmYWlsZWQrKzsNCiAJCQlmYWlsZWRfbnVtID0gaTsNCisJCQlQUklOVEsoImRldmljZSAlZCBm YWlsZWQgZm9yIHRoaXMgc3RyaXBlIHIlcCB3JXBcbiIsIGksIGRldi0+dG9yZWFkLCBkZXYtPnRv d3JpdGUpOw0KIAkJfSBlbHNlDQogCQkJc2V0X2JpdChSNV9JbnN5bmMsICZkZXYtPmZsYWdzKTsN CiAJfQ0KKwlpZiAoYXNwYXJlICYmIGZhaWxlZCA+IDEpDQorCSAgICBmYWlsZWQtLTsJLyogZmFp bGVkID0gMSBtZWFucyAiYWxsIG9rIiBpZiB3ZSd2ZSBhc3BhcmUsIHRoaXMgaXMgc2ltcGxlc3QN CisJCQkgICAgbWV0aG9kIHRvIGRvIG91ciB3b3JrICovDQogCXJjdV9yZWFkX3VubG9jaygpOw0K IAlQUklOVEsoImxvY2tlZD0lZCB1cHRvZGF0ZT0lZCB0b19yZWFkPSVkIg0KIAkJIiB0b193cml0 ZT0lZCBmYWlsZWQ9JWQgZmFpbGVkX251bT0lZFxuIiwNCkBAIC0xMDY2LDcgKzE0NzAsNyBAQA0K IA0KIAkJCS8qIGZhaWwgYW55IHJlYWRzIGlmIHRoaXMgZGV2aWNlIGlzIG5vbi1vcGVyYXRpb25h bCAqLw0KIAkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmc2gtPmRldltpXS5mbGFncykgfHwN Ci0JCQkgICAgdGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncykpIHsNCisJ CQkgICAgdGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncykpIHsgLy8gaGF2 ZSBtZWFuaW5nIG9mIHRoaXM/Pw0KIAkJCQliaSA9IHNoLT5kZXZbaV0udG9yZWFkOw0KIAkJCQlz aC0+ZGV2W2ldLnRvcmVhZCA9IE5VTEw7DQogCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVf T3ZlcmxhcCwgJnNoLT5kZXZbaV0uZmxhZ3MpKQ0KQEAgLTEwODksNiArMTQ5MywxMyBAQA0KIAkJ fQ0KIAl9DQogCWlmIChmYWlsZWQgPiAxICYmIHN5bmNpbmcpIHsNCisJCXByaW50ayhLRVJOX0FM RVJUICJyZWJ1aWxkIHN0b3BwZWQgYnkgSU8gZXJyb3IsIG1hcmtpbmcgdGhlIHNwYXJlIGZhaWxl ZFxuIik7DQorCQkvL3NldF9iaXQoRmF1bHR5LCAmY29uZi0+ZGlza3NbZmFpbGVkX251bV0ucmRl di0+ZmxhZ3MpOw0KKwkJLyogbWRfZG9uZV9zeW5jLCB3YWtldXAoKToNCisJCSAgIC0+IG1kWF9z eW5jOjptZF9kb19zeW5jKCkgKGZsYWdzICYgTURfUkVDT1ZFUllfRVJSKQ0KKwkJICAgIC0+IHJh aWQ1OjptZF9jaGVja19yZWNvdmVyeSgpDQorCQkgICAgIC0+IHJhaWQ1X3NwYXJlX2FjdGl2ZQ0K KwkJKi8NCiAJCW1kX2RvbmVfc3luYyhjb25mLT5tZGRldiwgU1RSSVBFX1NFQ1RPUlMsMCk7DQog CQljbGVhcl9iaXQoU1RSSVBFX1NZTkNJTkcsICZzaC0+c3RhdGUpOw0KIAkJc3luY2luZyA9IDA7 DQpAQCAtMTI2NSw2ICsxNjc2LDI4IEBADQogCQkJCQlQUklOVEsoIldyaXRpbmcgYmxvY2sgJWRc biIsIGkpOw0KIAkJCQkJbG9ja2VkKys7DQogCQkJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJnNo LT5kZXZbaV0uZmxhZ3MpOw0KKwkJCQkJaWYgKGFzcGFyZSAmJiBpID09IGFzcGFyZW51bSkgew0K KwkJCQkJICAgIGNoYXIgKnBzLCAqcGQ7DQorDQorCQkJCQkgICAgLyogbWlycm9yaW5nIHRoaXMg bmV3IGJsb2NrICovDQorCQkJCQkgICAgUFJJTlRLKCJXcml0aW5nIHRvIGFzcGFyZSB0b28gJWQt PiVkXG4iLA0KKwkJCQkJCQlpLCBjb25mLT5yYWlkX2Rpc2tzKTsNCisJCQkJCSAgICAvKmlmICh0 ZXN0X2JpdChSNV9MT0NLRUQsICZzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLmZsYWdzKSkgew0K KwkJCQkJCXByaW50aygiYmF6bWVnLCBleiBsb2trb2x0MSEhIVxuIik7DQorCQkJCQkgICAgfSov DQorCQkJCQkgICAgcHMgPSBwYWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsNCisJCQkJCSAg ICBwZCA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLnBhZ2UpOw0KKwkJ CQkJICAgIC8qIGJldHRlciBpZGVhPyAqLw0KKwkJCQkJICAgIG1lbWNweShwZCwgcHMsIFNUUklQ RV9TSVpFKTsNCisJCQkJCSAgICBzZXRfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbY29uZi0+cmFp ZF9kaXNrc10uZmxhZ3MpOw0KKwkJCQkJICAgIHNldF9iaXQoUjVfV2FudHdyaXRlLCAmc2gtPmRl dltjb25mLT5yYWlkX2Rpc2tzXS5mbGFncyk7DQorCQkJCQl9DQorCQkJCQkvKiBpdCBoYWQgdGhl IGNoYW5jZSBvbiByZXdyaXRlcw0KKwkJCQkJaWYgKGNvbmYtPmRpc2tzW2ldLnJkZXYNCisJCQkJ CSAgICAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+ZGlza3NbaV0ucmRldi0+ZmxhZ3MpKSB7 DQorCQkJCQkgICAgUFJJTlRLKCJyZXNldCBiYWRibG9jayBvbiAlZDogJWxsdVxuIiwgaSwgc2gt PnNlY3Rvcik7DQorCQkJCQkgICAgZGVsZXRlX2JhZGJsb2NrKCZjb25mLT5kaXNrc1tpXSwgc2gt PnNlY3Rvcik7DQorCQkJCQl9Ki8NCiAJCQkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmc2gt PmRldltpXS5mbGFncykNCiAJCQkJCSAgICB8fCAoaT09c2gtPnBkX2lkeCAmJiBmYWlsZWQgPT0g MCkpDQogCQkJCQkJc2V0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsNCkBAIC0xMzEw LDE1ICsxNzQzLDQwIEBADQogCQkJLyogZWl0aGVyIGZhaWxlZCBwYXJpdHkgY2hlY2ssIG9yIHJl Y292ZXJ5IGlzIGhhcHBlbmluZyAqLw0KIAkJCWlmIChmYWlsZWQ9PTApDQogCQkJCWZhaWxlZF9u dW0gPSBzaC0+cGRfaWR4Ow0KKwkJCWlmIChhc3BhcmUpDQorCQkJICAgIGZhaWxlZF9udW0gPSBh c3BhcmVudW07CS8vIHNvdXJjZSBvZiBtaXJyb3INCiAJCQlkZXYgPSAmc2gtPmRldltmYWlsZWRf bnVtXTsNCisJCQlpZiAoYXNwYXJlICYmICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+Zmxh Z3MpKSB7DQorCQkJICAgIHByaW50aygiYXNwYXJlOiBjb21wdXRlIGJsb2NrXG4iKTsNCisgIAkJ CSAgICBjb21wdXRlX2Jsb2NrKHNoLCBmYWlsZWRfbnVtKTsNCisJCQkgICAgdXB0b2RhdGUrKzsJ CS8vID8/Pw0KKwkJCX0NCiAJCQlCVUdfT04oIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmZGV2LT5m bGFncykpOw0KIAkJCUJVR19PTih1cHRvZGF0ZSAhPSBkaXNrcyk7DQogDQorCQkJaWYgKGFzcGFy ZSkgew0KKwkJCSAgICBjaGFyICpwcywgKnBkOw0KKw0KKwkJCSAgICBwcyA9IHBhZ2VfYWRkcmVz cyhzaC0+ZGV2W2ZhaWxlZF9udW1dLnBhZ2UpOw0KKwkJCSAgICBwZCA9IHBhZ2VfYWRkcmVzcyhz aC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLnBhZ2UpOw0KKwkJCSAgICBtZW1jcHkocGQsIHBzLCBT VFJJUEVfU0laRSk7DQorCQkJICAgIFBSSU5USygiUjVfV2FudHdyaXRlIHRvIGFzcGFyZSwgdXB0 b2RhdGU6ICVkICVwLT4lcFxuIiwNCisJCQkJCXVwdG9kYXRlLCBwcywgcGQpOw0KKwkJCSAgICAv KmlmICh0ZXN0X2JpdChSNV9MT0NLRUQsICZzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLmZsYWdz KSkgew0KKwkJCQlwcmludGsoImJhem1lZywgZXogbG9ra29sdDIhISFcbiIpOw0KKwkJCSAgICB9 Ki8NCisNCisJCQkgICAgZmFpbGVkX251bSA9IGNvbmYtPnJhaWRfZGlza3M7DQorCQkJICAgIGRl diA9ICZzaC0+ZGV2W2ZhaWxlZF9udW1dOw0KKwkJCX0NCiAJCQlzZXRfYml0KFI1X0xPQ0tFRCwg JmRldi0+ZmxhZ3MpOw0KIAkJCXNldF9iaXQoUjVfV2FudHdyaXRlLCAmZGV2LT5mbGFncyk7DQog CQkJY2xlYXJfYml0KFNUUklQRV9ERUdSQURFRCwgJnNoLT5zdGF0ZSk7DQogCQkJbG9ja2VkKys7 DQogCQkJc2V0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsNCisJCQkvKiAhaW5fc3lu Yy4uDQorCQkJcHJpbnRrKCJyZXNldCBiYWRibG9jayBvbiAlZDogJWxsdVxuIiwgZmFpbGVkX251 bSwgc2gtPnNlY3Rvcik7DQorCQkJZGVsZXRlX2JhZGJsb2NrKCZjb25mLT5kaXNrc1tmYWlsZWRf bnVtXSwgc2gtPnNlY3Rvcik7Ki8NCiAJCX0NCiAJfQ0KIAlpZiAoc3luY2luZyAmJiBsb2NrZWQg PT0gMCAmJiB0ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSkgew0KQEAgLTEzNTYs NyArMTgxNCw3IEBADQogCQliaS0+Ymlfc2l6ZSA9IDA7DQogCQliaS0+YmlfZW5kX2lvKGJpLCBi eXRlcywgMCk7DQogCX0NCi0JZm9yIChpPWRpc2tzOyBpLS0gOykgew0KKwlmb3IgKGk9ZGlza3Mr YXNwYXJlOyBpLS0gOykgew0KIAkJaW50IHJ3Ow0KIAkJc3RydWN0IGJpbyAqYmk7DQogCQltZGtf cmRldl90ICpyZGV2Ow0KQEAgLTE3NDAsNiArMjE5OCwxMDIgQEANCiAJUFJJTlRLKCItLS0gcmFp ZDVkIGluYWN0aXZlXG4iKTsNCiB9DQogDQorDQorc3RhdGljIHNzaXplX3QNCityYWlkNV9zaG93 X2JhZGJsb2NrcyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkNCit7DQorCXJhaWQ1X2NvbmZf dCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOw0KKwlpbnQgaSwgajsNCisJc3RydWN0IGJh ZGJsb2NrICpiYjsNCisJaW50IGsgPSAwOw0KKwlpbnQgbCA9IDA7DQorCWlmICghY29uZikNCisJ CXJldHVybiAwOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CS8qIGl0 J3Mgb2sgbm93IGZvciBkZWJ1ZyAqLw0KKwkvL3NlcV9wcmludGYgKHNlcSwgIlxuICAgICAga25v d24gYmFkIHNlY3RvcnMgb24gYWN0aXZlIGRldmljZXM6Iik7DQorCWZvciAoaSA9IGNvbmYtPnJh aWRfZGlza3M7IGktLTsgKSB7DQorCSAgICBpZiAoY29uZi0+ZGlza3NbaV0ucmRldikgew0KKwkJ Ly9zZXFfcHJpbnRmIChzZXEsICJcbiAgICAgICVzIiwgYmRldm5hbWUoY29uZi0+ZGlza3NbaV0u cmRldi0+YmRldiwgYikpOw0KKwkJZm9yIChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0K KwkJICAgIGJiID0gY29uZi0+ZGlza3NbaV0uYmFkYmxvY2tfaGFzaHRibFtqXTsNCisJCSAgICBm b3IgKDsgYmI7IGJiID0gYmItPmhhc2hfbmV4dCkNCisJCQkvKnNlcV9wcmludGYgKHNlcSwgIiAl bGx1LSVsbHUoJWQpIiwgYmItPnNlY3RvciwgYmItPnNlY3RvciArICh1bnNpZ25lZCBsb25nIGxv bmcpKFNUUklQRV9TSVpFIC8gNTEyKSAtIDEsDQorCQkJCQliYi0+bik7Ki8NCisJCQlpZiAoYmIt Pm4gPj0gMTAwKQ0KKwkJCSAgICBrKys7DQorCQkJZWxzZQ0KKwkJCSAgICBsKys7DQorCQl9DQor CSAgICB9DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorDQor CXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZCAlZFxuIiwgaywgbCk7DQorfQ0KKw0KK3N0YXRpYyBz c2l6ZV90DQorcmFpZDVfcmVzZXRfYmFkYmxvY2tzKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFy ICpwYWdlLCBzaXplX3QgbGVuKQ0KK3sNCisJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9f Y29uZihtZGRldik7DQorCWNoYXIgKmVuZDsNCisJaW50IG5ldzsNCisJaW50IGksIGo7DQorCXN0 cnVjdCBiYWRibG9jayAqYmI7DQorCWlmIChsZW4gPj0gUEFHRV9TSVpFKQ0KKwkJcmV0dXJuIC1F SU5WQUw7DQorCWlmICghY29uZikNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwluZXcgPSBzaW1w bGVfc3RydG91bChwYWdlLCAmZW5kLCAxMCk7DQorCWlmICghKnBhZ2UgfHwgKCplbmQgJiYgKmVu ZCAhPSAnXG4nKSApDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKG5ldykgew0KKwkgICAg c3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwkvKiBpdCdzIG9rIG5vdyBmb3IgZGVi dWcgKi8NCisJICAgIGZvciAoaSA9IGNvbmYtPnJhaWRfZGlza3M7IGktLTsgKSB7DQorCQlpZiAo Y29uZi0+ZGlza3NbaV0ucmRldikgew0KKwkJICAgIGZvciAoaiA9IDA7IGogPCBCQl9OUl9IQVNI OyBqKyspIHsNCisJCQlzdHJ1Y3QgYmFkYmxvY2sgKmJicHJldiA9IE5VTEw7DQorDQorCQkJYmIg PSBjb25mLT5kaXNrc1tpXS5iYWRibG9ja19oYXNodGJsW2pdOw0KKwkJICAgICAgICBmb3IgKDsg YmI7IGJiID0gYmItPmhhc2hfbmV4dCkgew0KKwkJCSAgICBpZiAoYmJwcmV2KQ0KKwkJCQlrbWVt X2NhY2hlX2ZyZWUoY29uZi0+ZGlza3NbaV0uc2xhYl9jYWNoZSwgYmJwcmV2KTsNCisJCQkgICAg YmJfcmVtb3ZlX2hhc2goYmIpOw0KKwkJCSAgICBiYnByZXYgPSBiYjsNCisJCQl9DQorDQorCQkJ aWYgKGJicHJldikNCisJCQkgICAga21lbV9jYWNoZV9mcmVlKGNvbmYtPmRpc2tzW2ldLnNsYWJf Y2FjaGUsIGJicHJldik7DQorCQkgICAgfQ0KKwkJfQ0KKwkgICAgfQ0KKwkgICAgc3Bpbl91bmxv Y2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorCX0NCisNCisJcmV0dXJuIGxlbjsNCit9DQor DQorc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeQ0KK3JhaWQ1X2JhZGJsb2NrcyA9IF9fQVRU UihiYWRibG9ja3MsIFNfSVJVR08gfCBTX0lXVVNSLA0KKwkJCSByYWlkNV9zaG93X2JhZGJsb2Nr cywNCisJCQkgcmFpZDVfcmVzZXRfYmFkYmxvY2tzKTsNCisNCisNCitzdGF0aWMgc3NpemVfdA0K K3N0cmlwZV9jYWNoZV9hY3RpdmVfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkNCit7 DQorCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOw0KKwlpZiAoY29u ZikNCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgYXRvbWljX3JlYWQoJmNvbmYtPmFj dGl2ZV9zdHJpcGVzKSk7DQorCWVsc2UNCisJCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgc3Ry dWN0IG1kX3N5c2ZzX2VudHJ5DQorcmFpZDVfc3RyaXBlY2FjaGVfYWN0aXZlID0gX19BVFRSX1JP KHN0cmlwZV9jYWNoZV9hY3RpdmUpOw0KKw0KIHN0YXRpYyBzc2l6ZV90DQogcmFpZDVfc2hvd19z dHJpcGVfY2FjaGVfc2l6ZShtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkNCiB7DQpAQCAtMTc4 NSwyMiArMjMzOSwxMCBAQA0KIAkJCQlyYWlkNV9zaG93X3N0cmlwZV9jYWNoZV9zaXplLA0KIAkJ CQlyYWlkNV9zdG9yZV9zdHJpcGVfY2FjaGVfc2l6ZSk7DQogDQotc3RhdGljIHNzaXplX3QNCi1z dHJpcGVfY2FjaGVfYWN0aXZlX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpDQotew0K LQlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsNCi0JaWYgKGNvbmYp DQotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGF0b21pY19yZWFkKCZjb25mLT5hY3Rp dmVfc3RyaXBlcykpOw0KLQllbHNlDQotCQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHN0cnVj dCBtZF9zeXNmc19lbnRyeQ0KLXJhaWQ1X3N0cmlwZWNhY2hlX2FjdGl2ZSA9IF9fQVRUUl9STyhz dHJpcGVfY2FjaGVfYWN0aXZlKTsNCi0NCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmFpZDVf YXR0cnNbXSA9ICB7DQogCSZyYWlkNV9zdHJpcGVjYWNoZV9zaXplLmF0dHIsDQogCSZyYWlkNV9z dHJpcGVjYWNoZV9hY3RpdmUuYXR0ciwNCisJJnJhaWQ1X2JhZGJsb2Nrcy5hdHRyLA0KIAlOVUxM LA0KIH07DQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcmFpZDVfYXR0cnNfZ3JvdXAg PSB7DQpAQCAtMTgyMyw3ICsyMzY1LDcgQEANCiAJfQ0KIA0KIAltZGRldi0+cHJpdmF0ZSA9IGt6 YWxsb2Moc2l6ZW9mIChyYWlkNV9jb25mX3QpDQotCQkJCSArIG1kZGV2LT5yYWlkX2Rpc2tzICog c2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pLA0KKwkJCQkgKyAobWRkZXYtPnJhaWRfZGlza3MgKyAx KSAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwNCiAJCQkJIEdGUF9LRVJORUwpOw0KIAlpZiAo KGNvbmYgPSBtZGRldi0+cHJpdmF0ZSkgPT0gTlVMTCkNCiAJCWdvdG8gYWJvcnQ7DQpAQCAtMTg1 NCw2ICsyMzk2LDggQEANCiANCiAJCWRpc2stPnJkZXYgPSByZGV2Ow0KIA0KKwkJZ3Jvd19iYWRi bG9ja3MoZGlzayk7DQorDQogCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkg ew0KIAkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsNCiAJCQlwcmludGsoS0VSTl9JTkZPICJyYWlk NTogZGV2aWNlICVzIG9wZXJhdGlvbmFsIGFzIHJhaWQiDQpAQCAtMTg2NCw2ICsyNDA4LDcgQEAN CiAJfQ0KIA0KIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7DQorCWNvbmYt Pm1pcnJvcml0ID0gLTE7DQogCS8qDQogCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJh eSwgMSBmb3IgYSBkZWdyYWRlZCBhcnJheS4NCiAJICovDQpAQCAtMTkyMSw3ICsyNDY2LDcgQEAN CiAJCX0NCiAJfQ0KIAltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3Ry dWN0IHN0cmlwZV9oZWFkKSArDQotCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVj dCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsNCisJCSAoY29uZi0+cmFpZF9kaXNrcysxKSAq ICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsNCiAJaWYgKGdyb3df c3RyaXBlcyhjb25mLCBjb25mLT5tYXhfbnJfc3RyaXBlcykpIHsNCiAJCXByaW50ayhLRVJOX0VS UiANCiAJCQkicmFpZDU6IGNvdWxkbid0IGFsbG9jYXRlICVka0IgZm9yIGJ1ZmZlcnNcbiIsIG1l bW9yeSk7DQpAQCAtMTk3OSwxMCArMjUyNCwxNCBAQA0KIHN0YXRpYyBpbnQgc3RvcChtZGRldl90 ICptZGRldikNCiB7DQogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgbWRk ZXYtPnByaXZhdGU7DQorCWludCBpOw0KIA0KIAltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+ dGhyZWFkKTsNCiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7DQogCXNocmlua19zdHJpcGVzKGNvbmYp Ow0KKwlmb3IgKGkgPSBjb25mLT5yYWlkX2Rpc2tzOyBpLS07ICkNCisJCWlmIChjb25mLT5kaXNr c1tpXS5yZGV2ICYmIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5kaXNrc1tpXS5yZGV2LT5mbGFn cykpDQorCQkJc2hyaW5rX2JhZGJsb2NrcygmY29uZi0+ZGlza3NbaV0pOw0KIAlrZnJlZShjb25m LT5zdHJpcGVfaGFzaHRibCk7DQogCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRo ZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLw0KIAlzeXNmc19yZW1vdmVfZ3JvdXAoJm1k ZGV2LT5rb2JqLCAmcmFpZDVfYXR0cnNfZ3JvdXApOw0KQEAgLTIwMzAsNiArMjU3OSwxMSBAQA0K IHsNCiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0 ZTsNCiAJaW50IGk7DQorI2lmIFJBSUQ1X0RFQlVHIHx8IDENCisJaW50IGo7DQorCWNoYXIgYltC REVWTkFNRV9TSVpFXTsNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCisjZW5kaWYNCiANCiAJc2Vx X3ByaW50ZiAoc2VxLCAiIGxldmVsICVkLCAlZGsgY2h1bmssIGFsZ29yaXRobSAlZCIsIG1kZGV2 LT5sZXZlbCwgbWRkZXYtPmNodW5rX3NpemUgPj4gMTAsIG1kZGV2LT5sYXlvdXQpOw0KIAlzZXFf cHJpbnRmIChzZXEsICIgWyVkLyVkXSBbIiwgY29uZi0+cmFpZF9kaXNrcywgY29uZi0+d29ya2lu Z19kaXNrcyk7DQpAQCAtMjA0Myw2ICsyNTk3LDIzIEBADQogCXNlcV9wcmludGYgKHNlcSwgIjwi I3giOiVkPiIsIGF0b21pY19yZWFkKCZjb25mLT54KSkNCiAJcHJpbnRhbGwoY29uZik7DQogI2Vu ZGlmDQorDQorI2lmIFJBSUQ1X0RFQlVHIHx8IDENCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2 aWNlX2xvY2spOwkvKiBpdCdzIG9rIG5vdyBmb3IgZGVidWcgKi8NCisJc2VxX3ByaW50ZiAoc2Vx LCAiXG4gICAgICBrbm93biBiYWQgc2VjdG9ycyBvbiBhY3RpdmUgZGV2aWNlczoiKTsNCisJZm9y IChpID0gY29uZi0+cmFpZF9kaXNrczsgaS0tOyApIHsNCisJICAgIGlmIChjb25mLT5kaXNrc1tp XS5yZGV2KSB7DQorCQlzZXFfcHJpbnRmIChzZXEsICJcbiAgICAgICVzIiwgYmRldm5hbWUoY29u Zi0+ZGlza3NbaV0ucmRldi0+YmRldiwgYikpOw0KKwkJZm9yIChqID0gMDsgaiA8IEJCX05SX0hB U0g7IGorKykgew0KKwkJICAgIGJiID0gY29uZi0+ZGlza3NbaV0uYmFkYmxvY2tfaGFzaHRibFtq XTsNCisJCSAgICBmb3IgKDsgYmI7IGJiID0gYmItPmhhc2hfbmV4dCkNCisJCQlzZXFfcHJpbnRm IChzZXEsICIgJWxsdS0lbGx1KCVkKSIsIGJiLT5zZWN0b3IsIGJiLT5zZWN0b3IgKyAodW5zaWdu ZWQgbG9uZyBsb25nKShTVFJJUEVfU0laRSAvIDUxMikgLSAxLA0KKwkJCQkJYmItPm4pOw0KKwkJ fQ0KKwkgICAgfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0K KyNlbmRpZg0KIH0NCiANCiBzdGF0aWMgdm9pZCBwcmludF9yYWlkNV9jb25mIChyYWlkNV9jb25m X3QgKmNvbmYpDQpAQCAtMjA4NSw2ICsyNjU2LDE3IEBADQogCQkJc2V0X2JpdChJbl9zeW5jLCAm dG1wLT5yZGV2LT5mbGFncyk7DQogCQl9DQogCX0NCisJdG1wID0gY29uZi0+ZGlza3MgKyBpOw0K KwlpZiAodG1wLT5yZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKQ0K KwkJCSYmICF0ZXN0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncykpIHsNCisJICAgIHNl dF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpOw0KKw0KKwkgICAgcHJpbnRrKEtFUk5f Tk9USUNFICJyYWlkNV9zcGFyZV9hY3RpdmU6ICVkIGluX3N5bmMgJWQtPiVkXG4iLA0KKwkJCWks IHRtcC0+cmRldi0+cmFpZF9kaXNrLCBjb25mLT5taXJyb3JpdCk7DQorDQorCSAgICAvKiBzY2Fy eS4uPyA6fSAqLw0KKwkgICAgdG1wLT5yZGV2LT5yYWlkX2Rpc2sgPSBjb25mLT5taXJyb3JpdDsN CisJfQ0KIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOw0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtMjA5 OCw2ICsyNjgwLDcgQEANCiANCiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsNCiAJcmRldiA9IHAt PnJkZXY7DQorcHJpbnRrKCJyYWlkNV9yZW1vdmVfZGlzayAlZFxuIiwgbnVtYmVyKTsNCiAJaWYg KHJkZXYpIHsNCiAJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8DQogCQkg ICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7DQpAQCAtMjExMSw2ICsyNjk0LDE3 IEBADQogCQkJZXJyID0gLUVCVVNZOw0KIAkJCXAtPnJkZXYgPSByZGV2Ow0KIAkJfQ0KKwkJaWYg KCFlcnIpIHsNCisJCQlzaHJpbmtfYmFkYmxvY2tzKHApOw0KKw0KKwkJCS8qIHN0b3BwZWQgYnkg SU8gZXJyb3IuLiAqLw0KKwkJCWlmIChjb25mLT5taXJyb3JpdCAhPSAtMQ0KKwkJCSAgICAmJiBj b25mLT5kaXNrc1tjb25mLT5yYWlkX2Rpc2tzXS5yZGV2ID09IE5VTEwpIHsNCisJCQkJcHJpbnRr KEtFUk5fSU5GTyAicmFpZDVfcmVtb3ZlX2Rpc2s6IElPIGVycm9yIG9uIHByb2FjdGl2ZSBtaXJy b3Jpbmcgb2YgJWQhXG4iLA0KKwkJCQkJICAgIGNvbmYtPm1pcnJvcml0KTsNCisJCQkJY29uZi0+ bWlycm9yaXQgPSAtMTsNCisJCQl9DQorCQl9DQogCX0NCiBhYm9ydDoNCiANCkBAIC0yMTQyLDYg KzI3MzYsMzAgQEANCiAJCQlyY3VfYXNzaWduX3BvaW50ZXIocC0+cmRldiwgcmRldik7DQogCQkJ YnJlYWs7DQogCQl9DQorDQorCWlmICghZm91bmQgJiYgY29uZi0+ZGlza3NbZGlza10ucmRldiA9 PSBOVUxMKSB7DQorCSAgICBjaGFyIGJbQkRFVk5BTUVfU0laRV07DQorDQorCSAgICAvKiBhcnJh eSBvcHRpbWFsLCB0aGlzIHNob3VsZCBiZSB0aGUgJ2FjdGl2ZSBzcGFyZScgYWRkZWQgYnkgZWVo X3RocmVhZC9lcnJvcigpICovDQorCSAgICBjb25mLT5kaXNrc1tkaXNrXS5yZGV2ID0gcmRldjsN CisJICAgIGNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOw0KKwkgICAgcmRldi0+cmFp ZF9kaXNrID0gY29uZi0+cmFpZF9kaXNrczsNCisJICAgIGNvbmYtPmZ1bGxzeW5jID0gMTsNCisN CisJICAgIGlmIChtZGRldi0+ZGVncmFkZWQpIC8qIGlmIHdlJ3JlIGhlcmUgYW5kIGl0J3MgdHJ1 ZSwgd2UncmUgY2FsbGVkIGFmdGVyIGVycm9yKCkgKi8NCisJCSAgICBtZGRldi0+ZGVncmFkZWQt LTsNCisJICAgIGVsc2UNCisJCSAgICBjb25mLT5taXJyb3JpdCA9IG1kZGV2LT5lZWhfZGF0YS5m YWlsZWRfbnVtOw0KKwkgICAgZm91bmQgPSAxOw0KKw0KKwkgICAgcHJpbnRrKEtFUk5fTk9USUNF ICJhZGRlZCBzcGFyZSBmb3IgcHJvYWN0aXZlIHJlcGxhY2VtZW50IG9mICVzXG4iLA0KKwkJICAg IGJkZXZuYW1lKGNvbmYtPmRpc2tzW2NvbmYtPm1pcnJvcml0XS5yZGV2LT5iZGV2LCBiKSk7DQor CX0NCisJaWYgKGZvdW5kKQ0KKwkJZ3Jvd19iYWRibG9ja3MoJmNvbmYtPmRpc2tzW2Rpc2tdKTsN CisJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDVfYWRkX2Rpc2s6ICVkICglZCkgaW5fc3luYzogJWRc biIsIGRpc2ssIGZvdW5kLA0KKwkJICAgIGZvdW5kID8gdGVzdF9iaXQoSW5fc3luYywgJnJkZXYt PmZsYWdzKSA6IC0xKTsNCisNCiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsNCiAJcmV0dXJuIGZv dW5kOw0KIH0NCn== --=-vEjes5bt/oJzzDHO/llO--