[PATCH] proactive raid5 disk replacement for 2.6.11, updated
am 18.08.2005 01:52:10 von Pallai Roland--=-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
DQogdGhpcyBpcyBhIGZlYXR1cmUgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzICdw cm9hY3RpdmUgcmFp
ZDUgZGlzaw0KcmVwbGFjZW1lbnQnIChodHRwOi8vd3d3LmFyY3RpYy5vcmcv fmRlYW4vcmFpZC13
aXNobGlzdC5odG1sKSwNCnRoYXQgY291bGQgaGVscCBhIGxvdCBvbiBsYXJn ZSByYWlkNSBhcnJh
eXMgYnVpbHQgZnJvbSBjaGVhcCBzYXRhDQpkcml2ZXJzIHdoZW4gdGhlIElP IHRyYWZmaWMgc3Vj
aCBsYXJnZSB0aGF0IGRhaWx5IG1lZGlhIHNjYW4gb24gdGhlDQpkaXNrcyBp c24ndCBwb3NzaWJs
ZS4NCiBsaW51eCBzb2Z0d2FyZSByYWlkIGlzIHZlcnkgZnJhZ2lsZSBieSBk ZWZhdWx0LCB0aGUg
dHlwaWNhbCAobmVydm91cykNCmJyZWFrZG93biBzaXR1YXRpb246IEkgbm90 aWNlZCBhIGJhZCBi
bG9jayBvbiBhIGRyaXZlLCByZXBsYWNlIGl0LA0KYW5kIHRoZSByZXN5bmMg ZmFpbHMgY2F1c2Ug
YW5vdGhlciAyLTMgZGlza3MgaGFzIGhpZGRlbiBiYWRibG9ja3MgdG9vLg0K SSd2ZSB0byBzYXZl
IHRoZSBkaXNrcyBhbmQgcmVidWlsZCBiYWQgYmxvY2tzIHdpdGggYSB1c2Vy c3BhY2UgdG9vbCAo
YnkNCmhhbmQuLiksIG1lYW53aGlsZSB0aGUgc2l0ZSBpcyBkb3duIGZvciBo b3Vycy4gYmFkOyBl
c3BlY2lhbGx5IHdoZW4gYQ0KcGFpciBvZiBzaW1wbGUgc3RlcHMgZW5vdWdo IHRvIGF2b2lkIGZy
b20gdGhpcyBhdHlwaWNhbCBwcm9ibGVtOg0KIDEuIGRvbnQga2ljayBhIGRy aXZlIG9uIHJlYWQg
ZXJyb3IgY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCA5OS45OSUgaXMNCnVz ZWFibGUgYW5kIHdp
bGwgaGVscCAodG8gc2VydmUgYW5kIHRvIHNhdmUgZGF0YSkgaWYgYW5vdGhl ciBkcml2ZSBzaG93
DQpiYWQgc2VjdG9ycyBpbiBzYW1lIGFycmF5DQogMi4gbGV0IHRvIG1pcnJv ciBhIHBhcnRpYWxs
eSBmYWlsZWQgZHJpdmUgdG8gYSBzcGFyZSBfb25saW5lXyBhbmQgcmVwbGFj ZQ0KdGhlIHNvdXJj
ZSBvZiB0aGUgbWlycm9yIHdpdGggdGhlIHNwYXJlIHdoZW4gaXQncyBkb25l LiBiYWQgYmxvY2tz
IGlzbid0DQphIHByb2JsZW0gdW5sZXNzIHNhbWUgc2VjdG9yIGRhbWFnZWQg b24gdHdvIGRpc2tz
IHdoYXQncyBhIHJhcmUgY2FzZS4gaW4NCnRoaXMgd2F5IGlzIHBvc3NpYmxl IHRvIGZpeCBhbiBh
cnJheSB3aXRoIHBhcnRpYWxseSBmYWlsZWQgZHJpdmVzDQp3aXRob3V0IGRh dGEgbG9zcyBhbmQg
d2l0aG91dCBkb3dudGltZQ0KDQogSSdtIG5vdCBhIHByb2dyYW1tZXIganVz dCBhIHN5c2FkbSB3
aG8gYWRtaW5zIGEgbGFyZ2Ugc29mdHdhcmUgc2F0YQ0KYXJyYXksIGJ1dCBt eSBhbmdyeSBnb3Qg
YmlnZ2VyIHRoYW4gbXkgbGF6aW5lc3MsIHNvIEkgbWFkZSB0aGlzIHBhdGNo IG9uDQp0aGlzIHdl
ZWtlbmQuLiBJIGRvbid0IHVuZGVyc3RhbmQgZXZlcnkgcGllY2Ugb2YgdGhl IG1kIGNvZGUgKGVn
LiB0aGUNCmlmLWZvcmVzdCBvZiB0aGUgaGFuZGxlX3N0cmlwZSA6KSB5ZXQs IHNvIHRoaXMgcGF0
Y2ggbWF5IGJlIGEgYnVnLWNvbG9ueQ0KYW5kIHdyb25nIGJ5IGRlc2lnbiwg YnV0IEkndmUgdGVz
dGVkIGl0IHVuZGVyIGhlYXZ5IHN0cmVzcyB3aXRoIGJvdGggb2YNCidmYXVs dHknIG1vZHVsZSBh
bmQgcmVhbCBkaXNrcywgYW5kIGl0IHdvcmtzIGZpbmUhDQoNCiBpZGVhcywg cGllY2Ugb2YgYWR2
aWNlLCBidWdmaXgvZW5jaGFuY2VtZW50IGlzIHdlbGNvbWVkIQ0KDQoNCiAo SSBrbm93LCByYWlk
NiBjb3VsZCBiZSBhbm90aGVyIHNvbHV0aW9uIGZvciB0aGlzIHByb2JsZW0s IGJ1dCB0aGF0J3Mg
YQ0KbGFyZ2Ugb3ZlcmhlYWQuKQ0KDQoNCnVzZToNCg0KMS4gcGF0Y2ggdGhl IGtlcm5lbCwgdGhp
cyBvbmUgaXMgYWdhaW5zdCAyLjYuMTENCjIuIHR5cGU6DQoNCiMgbWFrZSBk cml2ZXMNCm1kYWRt
IC1CIC1uMSAtbCBmYXVsdHkgL2Rldi9tZC8xIC9kZXYvcmQvMA0KbWRhZG0g LUIgLW4xIC1sIGZh
dWx0eSAvZGV2L21kLzIgL2Rldi9yZC8xDQptZGFkbSAtQiAtbjEgLWwgZmF1 bHR5IC9kZXYvbWQv
MyAvZGV2L3JkLzINCg0KIyBtYWtlIHRoZSBhcnJheQ0KbWRhZG0gLUMgLW4z IC1sNSAvZGV2L21k
LzAgL2Rldi9tZC8xIC9kZXYvbWQvMiAvZGV2L21kLzMNCg0KIyAuLiB3YWl0 IGZvciBzeW5jIC4u
DQoNCiMgZ3JvdyBiYWQgYmxvY2tzIGFzIG1hKnRvciBkb2VzDQptZGFkbSAt LWdyb3cgLWwgZmF1
bHR5IC1wIHJwNDU0IC9kZXYvbWQvMQ0KbWRhZG0gLS1ncm93IC1sIGZhdWx0 eSAtcCBycDczOCAv
ZGV2L21kLzINCg0KIyBhZGQgYSBzcGFyZQ0KbWRhZG0gLWEgL2Rldi9tZC8w IC9kZXYvcmQvNA0K
DQojIC0+IGZhaWwgYSBkcml2ZSwgc3luYyBiZWdpbnMgPC0NCiMgIHRoZSBt ZC8xIHdpbGwgbm90
IG1hcmtlZCBhcyBmYWlsZWQsIHRoaXMgaXMgdGhlIHBvaW50LCBidXQgaWYg eW91IHdhbnQgdG8s
DQojICB5b3UgY2FuIGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiENCm1kYWRt IC1mIC9kZXYvbWQv
MCAvZGV2L21kLzENCg0KIyBrZXJuZWw6DQojICByZXN5bmMgZnJvbSBtZDEg dG8gc3BhcmUgcmFt
NA0KIyAgYWRkZWQgc3BhcmUgZm9yIGFjdGl2ZSByZXN5bmMNCg0KIyAuLiB3 b25kZXIgdGhlIHJl
YWQgZXJyb3JzIGZyb20gbWRbMTJdIGFuZCB0aGUgc3luYyBnb2VzIG9uIQ0K IyBmZWVsIGZyZWUg
dG8gc3RyZXNzIHRoZSBtZCBhdCB0aGlzIHRpbWUsIG1rZnMsIGRkLCBiYWRi bG9ja3MsIGV0Yw0K
DQojIGtlcm5lbDoNCiMgIHJhaWQ1X3NwYXJlX2FjdGl2ZTogMyBpbl9zeW5j IDMtPjANCiMgL3By
b2MvbWRzdGF0Og0KIyAgbWQwIDogYWN0aXZlIHJhaWQ1IHJhbTRbMF0gbWQz WzJdIG1kMlsxXSBt
ZDFbMF0NCiMgLT4gcmFtNCBhbmQgbWQxIGhhcyBzYW1lIGlkLCB0aGlzIG1l YW5zIHRoZSBzcGFy
ZSBpcyBhIGNvbXBsZXRlIG1pcnJvciwNCiMgICAgICAgaWYgeW91IHN0b3Ag dGhlIGFycmF5IHlv
dSBjYW4gYXNzZW1ibHkgaXQgd2l0aCByYW00IGluc3RlYWQgb2YgbWQxLA0K IyAgICAgICB0aGUg
c3VwZXJibG9jayBzYW1lIGJvdGggb2YgdGhlbQ0KDQojIGNoZWNrIHRoZSBt aXJyb3IgKHN0b3Ag
d3JpdGUgc3RyZXNzIGlmIGFueSkNCm1kYWRtIC0tZ3JvdyAtbCBmYXVsdHkg LXAgbm9uZSAvZGV2
L21kLzENCmNtcCAvZGV2L21kLzEgL2Rldi9yZC80DQoNCiMgaG90LXJlcGxh Y2UgdGhlIG1pcnJv
cmVkIC1wYXJ0aWFsbHkgZmFpbGVkLSBkZXZpY2Ugd2l0aCB0aGUgYWN0aXZl IHNwYXJlDQojICAo
eWVzLCBtYXJrIGl0IGFzIGZhaWxlZCBhZ2FpbiwgYnV0IGlmIHRoZXJlJ3Mg YSBzeW5jaW5nLSBv
ciBzeW5jZWQgJ2FjdGl2ZSBzcGFyZScNCiMgICAgICAgdGhlIC1mIHJlYWxs eSBmYWlscyB0aGUg
ZGV2aWNlIG9yIHJlcGxhY2UgaXQgd2l0aCB0aGUgc3luY2VkIHNwYXJlKQ0K bWRhZG0gLWYgL2Rl
di9tZC8wIC9kZXYvbWQvMQ0KDQojIGtlcm5lbDoNCiMgIHJlcGxhY2UgbWQx IHdpdGggaW5fc3lu
YyBhY3RpdmUgc3BhcmUgcmFtNA0KDQojIGFuZCB2b2lsYSENCiMgL3Byb2Mv bWRzdGF0Og0KIyAg
bWQwIDogYWN0aXZlIHJhaWQ1IHJhbTRbMF0gbWQzWzJdIG1kMlsxXQ0KDQoN CnVwZGF0ZToNCg0K
IHBlci1kZXZpY2UgYmFkIGJsb2NrIGNhY2hlIGhhcyBiZWVuIGltcGxlbWVu dGVkIHRvIHNwZWVk
IHVwIGFycmF5cyB3aXRoDQpwYXJ0aWFsbHkgZmFpbGVkIGRyaXZlcyAocmVw bGllcyBhcmUgb2Z0
ZW4gc2xvdyBmcm9tIHRob3NlKS4gYWxzbw0KaGVscHMgdG8gZGV0ZXJtaW5l IGJhZGx5IGRhbWFn
ZWQgZHJpdmVzIGJhc2VkIG9uIG51bWJlciBvZiBiYWQgYmxvY2tzLA0KYW5k IGNhbiB0YWtlIGFu
IGFjdGlvbiBpZiBzdGVwcyBvdmVyIGFuIHVzZXIgZGVmaW5lZCB0aHJlc2hv bGQNCihzZWUgL3By
b2Mvc3lzL2Rldi9yYWlkL2JhZGJsb2NrX3RvbGVyYW5jZSkuDQpyZXdyaXRl IG9mIGEgYmFkIHN0
cmlwZSB3aWxsIGRlbGV0ZSB0aGUgZW50cnkgZnJvbSB0aGUgY2FjaGUsIHNv IGl0IGhvbm9ycw0K
dGhlIGF1dG8gc2VjdG9yIHJlYWxsb2NhdGlvbiBmZWF0dXJlIG9mIEFUQSBk cml2ZXMNCg0KIHBl
cmZvcm1hbmNlIGlzIGFmZmVjdGVkIGp1c3QgYSBsaXR0bGUgYml0IGlmIHRo ZXJlJ3Mgbm8gb3Ig
c29tZSByZWdpc3RlcmVkDQpiYWQgYmxvY2tzLCBidXQgb3ZlciBhIG1pbGxp b24gdGhhdCBjb3Vs
ZCBiZSBhIHByb2JsZW0gY3VycmVudGx5LCBJJ2xsIGV4YW1pbmUNCml0IGxh dGVyLi4NCg0KIGlm
IHdlJ3ZlIGEgc3BhcmUgYW5kIGEgZHJpdmUgaGFkIGtpY2tlZCwgdGhhdCBz cGFyZSBiZWNvbWVz
IHRvDQonYWN0aXZlIHNwYXJlJywgc3luYyBiZWdpbnMsIGJ1dCB0aGUgb3Jp Z2luYWwgKGZhaWxl
ZCkgZHJpdmUgd29uJ3QgYmUNCmtpY2tlZCB1bnRpbCB0aGUgc3luYyB3aWxs IG5vdCBoYXZlIGZp
bmlzaGVkLiBpZiB0aGUgb3JpZ2luYWwgZHJpdmUgc3RpbGwNCmRyb3BzIGVy cm9ycyBhZnRlciBo
YWQgYmVlbiBzeW5jZWQsIHRoZSBpbl9zeW5jIHNwYXJlIHJlcGxhY2VzIHRo YXQgb25saW5lDQoN
CiB5b3UgY2FuIGNoZWNrIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmFkIHNl Y3RvcnMgaW4gL3By
b2MvbWRzdGF0IChpbiBkZWJ1ZyBtb2RlKSwNCmFuZCB0aGUgc2l6ZSBvZiB0 aGUgY2FjaGUgd2l0
aDogZ3JlcCBfYmJjIC9wcm9jL3NsYWJpbmZvDQoNCg0KbXkgL3Byb2MvbWRz dGF0Og0KDQptZDAg
OiBhY3RpdmUgcmFpZDUgcmFtNFsyXSBtZDJbMV0gbWQxWzBdDQogICAgICA4 MDY0IGJsb2NrcyBs
ZXZlbCA1LCA2NGsgY2h1bmssIGFsZ29yaXRobSAyIFszLzNdIFtVVVVdDQog ICAgICBrbm93biBi
YWQgc2VjdG9ycyBvbiBhY3RpdmUgZGV2aWNlczoNCiAgICAgIHJhbTQNCiAg ICAgIG1kMg0KICAg
ICAgbWQxIDU2IDEzNiAyMzIgNDcyIDYwMCA4NzIgMTE3NiAxMjQ4IDEzMzYg MTU2OCAxNjg4IDE5
NTIgMjEwNA0KDQptZDIgOiBhY3RpdmUgZmF1bHR5IHJhbTFbMF0NCiAgICAg IDQwOTYgYmxvY2tz
IG5mYXVsdHM9MA0KICAgICAgDQptZDEgOiBhY3RpdmUgZmF1bHR5IHJhbTBb MF0NCiAgICAgIDQw
OTYgYmxvY2tzIFJlYWRQZXJzaXN0ZW50PTkyKDEwMCkgbmZhdWx0cz0xMw0K ICAgICAgDQoNCg0K
LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oLm9yaWcJMjAw NS0wMy0wMyAyMzo1
MToyOS4wMDAwMDAwMDAgKzAxMDANCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4 L3JhaWQvcmFpZDUu
aAkyMDA1LTA4LTE0IDAzOjAyOjExLjAwMDAwMDAwMCArMDIwMA0KQEAgLTE0 Nyw2ICsxNDcsNyBA
QA0KICNkZWZpbmUJUjVfVVBUT0RBVEUJMAkvKiBwYWdlIGNvbnRhaW5zIGN1 cnJlbnQgZGF0YSAq
Lw0KICNkZWZpbmUJUjVfTE9DS0VECTEJLyogSU8gaGFzIGJlZW4gc3VibWl0 dGVkIG9uICJyZXEi
ICovDQogI2RlZmluZQlSNV9PVkVSV1JJVEUJMgkvKiB0b3dyaXRlIGNvdmVy cyB3aG9sZSBwYWdl
ICovDQorI2RlZmluZQlSNV9GQUlMRUQJOAkvKiBmYWlsZWQgdG8gcmVhZCB0 aGlzIHN0cmlwZSAq
Lw0KIC8qIGFuZCBzb21lIHRoYXQgYXJlIGludGVybmFsIHRvIGhhbmRsZV9z dHJpcGUgKi8NCiAj
ZGVmaW5lCVI1X0luc3luYwkzCS8qIHJkZXYgJiYgcmRldi0+aW5fc3luYyBh dCBzdGFydCAqLw0K
ICNkZWZpbmUJUjVfV2FudHJlYWQJNAkvKiB3YW50IHRvIHNjaGVkdWxlIGEg cmVhZCAqLw0KQEAg
LTE5Niw4ICsxOTcsMTYgQEANCiAgKi8NCiAgDQogDQorc3RydWN0IGJhZGJs b2NrIHsNCisJc3Ry
dWN0IGJhZGJsb2NrCQkqaGFzaF9uZXh0LCAqKmhhc2hfcHByZXY7IC8qIGhh c2ggcG9pbnRlcnMg
Ki8NCisJc2VjdG9yX3QJCXNlY3RvcjsgLyogc3RyaXBlICMgKi8NCit9Ow0K Kw0KIHN0cnVjdCBk
aXNrX2luZm8gew0KIAltZGtfcmRldl90CSpyZGV2Ow0KKwlzdHJ1Y3QgYmFk YmxvY2sgKipiYWRi
bG9ja19oYXNodGJsOyAvKiBsaXN0IG9mIGtub3duIGJhZGJsb2NrcyAqLw0K KwljaGFyCQljYWNo
ZV9uYW1lWzIwXTsNCisJa21lbV9jYWNoZV90CSpzbGFiX2NhY2hlOyAvKiBi YWRibG9jayBkYiAq
Lw0KIH07DQogDQogc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSB7DQpAQCAt MjI0LDYgKzIzMyw4
IEBADQogCWludAkJCWluYWN0aXZlX2Jsb2NrZWQ7CS8qIHJlbGVhc2Ugb2Yg aW5hY3RpdmUgc3Ry
aXBlcyBibG9ja2VkLA0KIAkJCQkJCQkgKiB3YWl0aW5nIGZvciAyNSUgdG8g YmUgZnJlZQ0KIAkJ
CQkJCQkgKi8gICAgICAgIA0KKwlpbnQJCQltaXJyb3JpdDsgLyogc291cmNl IGZvciBhY3RpdmUg
c3BhcmUgcmVzeW5jICovDQorDQogCXNwaW5sb2NrX3QJCWRldmljZV9sb2Nr Ow0KIAlzdHJ1Y3Qg
ZGlza19pbmZvCWRpc2tzWzBdOw0KIH07DQotLS0gbGludXgvaW5jbHVkZS9s aW51eC9zeXNjdGwu
aC5vcmlnCTIwMDUtMDctMDYgMjA6MTk6MTAuMDAwMDAwMDAwICswMjAwDQor KysgbGludXgvaW5j
bHVkZS9saW51eC9zeXNjdGwuaAkyMDA1LTA4LTE3IDIyOjAxOjI4LjAwMDAw MDAwMCArMDIwMA0K
QEAgLTc3OCw3ICs3NzgsOCBAQA0KIC8qIC9wcm9jL3N5cy9kZXYvcmFpZCAq Lw0KIGVudW0gew0K
IAlERVZfUkFJRF9TUEVFRF9MSU1JVF9NSU49MSwNCi0JREVWX1JBSURfU1BF RURfTElNSVRfTUFY
PTINCisJREVWX1JBSURfU1BFRURfTElNSVRfTUFYPTIsDQorCURFVl9SQUlE X0JBREJMT0NLX1RP
TEVSQU5DRT0zDQogfTsNCiANCiAvKiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQv ZGVmYXVsdCAqLw0K
LS0tIGxpbnV4L2RyaXZlcnMvbWQvbWQuYy5vcmlnCTIwMDUtMDgtMTQgMjE6 MjI6MDguMDAwMDAw
MDAwICswMjAwDQorKysgbGludXgvZHJpdmVycy9tZC9tZC5jCTIwMDUtMDgt MTQgMTc6MjA6MTUu
MDAwMDAwMDAwICswMjAwDQpAQCAtNzgsNiArNzgsMTAgQEANCiBzdGF0aWMg aW50IHN5c2N0bF9z
cGVlZF9saW1pdF9taW4gPSAxMDAwOw0KIHN0YXRpYyBpbnQgc3lzY3RsX3Nw ZWVkX2xpbWl0X21h
eCA9IDIwMDAwMDsNCiANCisvKiBvdmVyIHRoaXMgbGltaXQgdGhlIGRyaXZl J2xsIGJlIG1hcmtl
ZCBhcyBmYWlsZWQuIG1lYXN1cmUgaXMgYmxvY2suICovDQoraW50IHN5c2N0 bF9iYWRibG9ja190
b2xlcmFuY2UgPSAxMDAwMDsNCisNCisNCiBzdGF0aWMgc3RydWN0IGN0bF90 YWJsZV9oZWFkZXIg
KnJhaWRfdGFibGVfaGVhZGVyOw0KIA0KIHN0YXRpYyBjdGxfdGFibGUgcmFp ZF90YWJsZVtdID0g
ew0KQEAgLTk3LDYgKzEwMSwxNCBAQA0KIAkJLm1vZGUJCT0gMDY0NCwNCiAJ CS5wcm9jX2hhbmRs
ZXIJPSAmcHJvY19kb2ludHZlYywNCiAJfSwNCisJew0KKwkJLmN0bF9uYW1l CT0gREVWX1JBSURf
QkFEQkxPQ0tfVE9MRVJBTkNFLA0KKwkJLnByb2NuYW1lCT0gImJhZGJsb2Nr X3RvbGVyYW5jZSIs
DQorCQkuZGF0YQkJPSAmc3lzY3RsX2JhZGJsb2NrX3RvbGVyYW5jZSwNCisJ CS5tYXhsZW4JCT0g
c2l6ZW9mKGludCksDQorCQkubW9kZQkJPSAwNjQ0LA0KKwkJLnByb2NfaGFu ZGxlcgk9ICZwcm9j
X2RvaW50dmVjLA0KKwl9LA0KIAl7IC5jdGxfbmFtZSA9IDAgfQ0KIH07DQog DQpAQCAtMzUyNSwx
MCArMzUzNywxMiBAQA0KIAkJfQ0KIAkJaWYgKG1kZGV2LT5zeW5jX3RocmVh ZCkgew0KIAkJCS8q
IHJlc3luYyBoYXMgZmluaXNoZWQsIGNvbGxlY3QgcmVzdWx0ICovDQorcHJp bnRrKCJtZF9jaGVj
a19yZWNvdmVyeTogcmVzeW5jIGhhcyBmaW5pc2hlZFxuIik7DQogCQkJbWRf dW5yZWdpc3Rlcl90
aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsNCiAJCQltZGRldi0+c3luY190 aHJlYWQgPSBOVUxM
Ow0KIAkJCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYt PnJlY292ZXJ5KSAm
Jg0KIAkJCSAgICAhdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2 LT5yZWNvdmVyeSkp
IHsNCitwcmludGsoIm1kX2NoZWNrX3JlY292ZXJ5OiBhY3RpdmF0ZSBhbnkg c3BhcmVzXG4iKTsN
CiAJCQkJLyogc3VjY2Vzcy4uLiovDQogCQkJCS8qIGFjdGl2YXRlIGFueSBz cGFyZXMgKi8NCiAJ
CQkJbWRkZXYtPnBlcnMtPnNwYXJlX2FjdGl2ZShtZGRldik7DQpAQCAtMzU0 NSwxOCArMzU1OSwx
OSBAQA0KIA0KIAkJLyogbm8gcmVjb3ZlcnkgaXMgcnVubmluZy4NCiAJCSAq IHJlbW92ZSBhbnkg
ZmFpbGVkIGRyaXZlcywgdGhlbg0KLQkJICogYWRkIHNwYXJlcyBpZiBwb3Nz aWJsZQ0KKwkJICog
YWRkIHNwYXJlcyBpZiBwb3NzaWJsZS4NCisJCSAqIFNwYXJlIGFyZSBhbHNv IHJlbW92ZWQgYW5k
IHJlLWFkZGVkLCB0byBhbGxvdw0KKwkJICogdGhlIHBlcnNvbmFsaXR5IHRv IGZhaWwgdGhlIHJl
LWFkZC4NCiAJCSAqLw0KLQkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRt cCkgew0KKwkJSVRF
UkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkNCiAJCQlpZiAocmRldi0+cmFp ZF9kaXNrID49IDAg
JiYNCi0JCQkgICAgcmRldi0+ZmF1bHR5ICYmDQorCQkJICAgIChyZGV2LT5m YXVsdHkgfHwgISBy
ZGV2LT5pbl9zeW5jKSAmJg0KIAkJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+ bnJfcGVuZGluZyk9
PTApIHsNCitwcmludGsoIm1kX2NoZWNrX3JlY292ZXJ5OiBob3RfcmVtb3Zl X2Rpc2tcbiIpOw0K
IAkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzayhtZGRldiwg cmRldi0+cmFpZF9k
aXNrKT09MCkNCiAJCQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOw0KIAkJCX0N Ci0JCQlpZiAoIXJk
ZXYtPmZhdWx0eSAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJiAhcmRldi0+ aW5fc3luYykNCi0J
CQkJc3BhcmVzKys7DQotCQl9DQorDQogCQlpZiAobWRkZXYtPmRlZ3JhZGVk KSB7DQogCQkJSVRF
UkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkNCiAJCQkJaWYgKHJkZXYtPnJh aWRfZGlzayA8IDAN
CkBAIC0zNzY0LDQgKzM3ODMsNiBAQA0KIEVYUE9SVF9TWU1CT0wobWRfd2Fr ZXVwX3RocmVhZCk7
DQogRVhQT1JUX1NZTUJPTChtZF9wcmludF9kZXZpY2VzKTsNCiBFWFBPUlRf U1lNQk9MKG1kX2No
ZWNrX3JlY292ZXJ5KTsNCitFWFBPUlRfU1lNQk9MKGtpY2tfcmRldl9mcm9t X2FycmF5KTsJLy8g
Zml4bWUNCitFWFBPUlRfU1lNQk9MKHN5c2N0bF9iYWRibG9ja190b2xlcmFu Y2UpOw0KIE1PRFVM
RV9MSUNFTlNFKCJHUEwiKTsNCi0tLSBsaW51eC9kcml2ZXJzL21kL3JhaWQ1 LmMub3JpZwkyMDA1
LTA4LTE0IDIxOjIyOjA4LjAwMDAwMDAwMCArMDIwMA0KKysrIGxpbnV4L2Ry aXZlcnMvbWQvcmFp
ZDUuYwkyMDA1LTA4LTE0IDIwOjQ5OjQ5LjAwMDAwMDAwMCArMDIwMA0KQEAg LTQwLDYgKzQwLDE4
IEBADQogDQogI2RlZmluZSBzdHJpcGVfaGFzaChjb25mLCBzZWN0KQkoKGNv bmYpLT5zdHJpcGVf
aGFzaHRibFsoKHNlY3QpID4+IFNUUklQRV9TSElGVCkgJiBIQVNIX01BU0td KQ0KIA0KKyAvKg0K
KyAqIHBlci1kZXZpY2UgYmFkYmxvY2sgY2FjaGUNCisgKi8NCisNCisjZGVm aW5lCUJCX1NISUZU
CQkoUEFHRV9TSElGVC8qMTIqLyAtIDkpDQorI2RlZmluZQlCQl9IQVNIX1BB R0VTCQkxDQorI2Rl
ZmluZQlCQl9OUl9IQVNICQkoSEFTSF9QQUdFUyAqIFBBR0VfU0laRSAvIHNp emVvZihzdHJ1Y3Qg
YmFkYmxvY2sgKikpDQorI2RlZmluZQlCQl9IQVNIX01BU0sJCShCQl9OUl9I QVNIIC0gMSkNCisN
CisjZGVmaW5lCWJiX2hhc2goZGlzaywgc2VjdCkJKChkaXNrKS0+YmFkYmxv Y2tfaGFzaHRibFso
KHNlY3QpID4+IEJCX1NISUZUKSAmIEJCX0hBU0hfTUFTS10pDQorI2RlZmlu ZQliYl9oYXNobnIo
c2VjdCkJCSgoKHNlY3QpID4+IEJCX1NISUZUKSAmIEJCX0hBU0hfTUFTSykN CisNCiAvKiBiaW8n
cyBhdHRhY2hlZCB0byBhIHN0cmlwZStkZXZpY2UgZm9yIEkvTyBhcmUgbGlu a2VkIHRvZ2V0aGVy
IGluIGJpX3NlY3Rvcg0KICAqIG9yZGVyIHdpdGhvdXQgb3ZlcmxhcC4gIFRo ZXJlIG1heSBiZSBz
ZXZlcmFsIGJpbydzIHBlciBzdHJpcGUrZGV2aWNlLCBhbmQNCiAgKiBhIGJp byBjb3VsZCBzcGFu
IHNldmVyYWwgZGV2aWNlcy4NCkBAIC01Myw3ICs2NSw3IEBADQogLyoNCiAg KiBUaGUgZm9sbG93
aW5nIGNhbiBiZSB1c2VkIHRvIGRlYnVnIHRoZSBkcml2ZXINCiAgKi8NCi0j ZGVmaW5lIFJBSUQ1
X0RFQlVHCTANCisjZGVmaW5lIFJBSUQ1X0RFQlVHCTENCiAjZGVmaW5lIFJB SUQ1X1BBUkFOT0lB
CTENCiAjaWYgUkFJRDVfUEFSQU5PSUEgJiYgZGVmaW5lZChDT05GSUdfU01Q KQ0KICMgZGVmaW5l
IENIRUNLX0RFVkxPQ0soKSBhc3NlcnRfc3Bpbl9sb2NrZWQoJmNvbmYtPmRl dmljZV9sb2NrKQ0K
QEAgLTYxLDEzICs3MywxNTkgQEANCiAjIGRlZmluZSBDSEVDS19ERVZMT0NL KCkNCiAjZW5kaWYN
CiANCi0jZGVmaW5lIFBSSU5USyh4Li4uKSAoKHZvaWQpKFJBSUQ1X0RFQlVH ICYmIHByaW50ayh4
KSkpDQorI2RlZmluZSBQUklOVEsoeC4uLikgKCh2b2lkKShSQUlENV9ERUJV RyAmJiBwcmludGso
S0VSTl9ERUJVRyB4KSkpDQogI2lmIFJBSUQ1X0RFQlVHDQogI2RlZmluZSBp bmxpbmUNCiAjZGVm
aW5lIF9faW5saW5lX18NCiAjZW5kaWYNCiANCiBzdGF0aWMgdm9pZCBwcmlu dF9yYWlkNV9jb25m
IChyYWlkNV9jb25mX3QgKmNvbmYpOw0KK2V4dGVybiBpbnQgc3lzY3RsX2Jh ZGJsb2NrX3RvbGVy
YW5jZTsNCisNCisNCitzdGF0aWMgdm9pZCBiYl9pbnNlcnRfaGFzaChzdHJ1 Y3QgZGlza19pbmZv
ICpkaXNrLCBzdHJ1Y3QgYmFkYmxvY2sgKmJiKQ0KK3sNCisJc3RydWN0IGJh ZGJsb2NrICoqYmJw
ID0gJmJiX2hhc2goZGlzaywgYmItPnNlY3Rvcik7DQorDQorCS8qcHJpbnRr KCJiYl9pbnNlcnRf
aGFzaCgpLCBzZWN0b3IgJWxsdSBoYXNobnIgJWx1XG4iLCAodW5zaWduZWQg bG9uZyBsb25nKWJi
LT5zZWN0b3IsDQorCQliYl9oYXNobnIoYmItPnNlY3RvcikpOyovDQorDQor CWlmICgoYmItPmhh
c2hfbmV4dCA9ICpiYnApICE9IE5VTEwpDQorCQkoKmJicCktPmhhc2hfcHBy ZXYgPSAmYmItPmhh
c2hfbmV4dDsNCisJKmJicCA9IGJiOwkNCisJYmItPmhhc2hfcHByZXYgPSBi YnA7DQorfQ0KKw0K
K3N0YXRpYyB2b2lkIGJiX3JlbW92ZV9oYXNoKHN0cnVjdCBiYWRibG9jayAq YmIpDQorew0KKwkv
KnByaW50aygicmVtb3ZlX2hhc2goKSwgc2VjdG9yICVsbHUgaGFzaG5yICVs dVxuIiwgKHVuc2ln
bmVkIGxvbmcgbG9uZyliYi0+c2VjdG9yLA0KKwkJYmJfaGFzaG5yKGJiLT5z ZWN0b3IpKTsqLw0K
Kw0KKwlpZiAoYmItPmhhc2hfcHByZXYpIHsNCisJCWlmIChiYi0+aGFzaF9u ZXh0KQ0KKwkJCWJi
LT5oYXNoX25leHQtPmhhc2hfcHByZXYgPSBiYi0+aGFzaF9wcHJldjsNCisJ CSpiYi0+aGFzaF9w
cHJldiA9IGJiLT5oYXNoX25leHQ7DQorCQliYi0+aGFzaF9wcHJldiA9IE5V TEw7DQorCX0NCit9
DQorDQorc3RhdGljIHN0cnVjdCBiYWRibG9jayAqX19maW5kX2JhZGJsb2Nr KHN0cnVjdCBkaXNr
X2luZm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvcikNCit7DQorCXN0cnVjdCBi YWRibG9jayAqYmI7
DQorDQorCWZvciAoYmIgPSBiYl9oYXNoKGRpc2ssIHNlY3Rvcik7IGJiOyBi YiA9IGJiLT5oYXNo
X25leHQpDQorCQlpZiAoYmItPnNlY3RvciA9PSBzZWN0b3IpDQorCQkJcmV0 dXJuIGJiOw0KKwly
ZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBiYWRibG9jayAq ZmluZF9iYWRibG9j
ayhzdHJ1Y3QgZGlza19pbmZvICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpDQor ew0KKwlyYWlkNV9j
b25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIGRpc2stPnJkZXYtPm1k ZGV2LT5wcml2YXRl
Ow0KKwlzdHJ1Y3QgYmFkYmxvY2sgKmJiOw0KKw0KKwlzcGluX2xvY2tfaXJx KCZjb25mLT5kZXZp
Y2VfbG9jayk7DQorCWJiID0gX19maW5kX2JhZGJsb2NrKGRpc2ssIHNlY3Rv cik7DQorCXNwaW5f
dW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0KKwlyZXR1cm4gYmI7 DQorfQ0KKw0KK3N0
YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2JhZGJsb2NrcyAoc3RydWN0IGRp c2tfaW5mbyAqZGlz
aykNCit7DQorCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3Qg KikgZGlzay0+cmRl
di0+bWRkZXYtPnByaXZhdGU7DQorCXN0cnVjdCBiYWRibG9jayAqYmI7DQor CWludCBqOw0KKwlp
bnQgbiA9IDA7DQorDQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9s b2NrKTsNCisJZm9y
IChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJYmIgPSBkaXNr LT5iYWRibG9ja19o
YXNodGJsW2pdOw0KKwkJZm9yICg7IGJiOyBiYiA9IGJiLT5oYXNoX25leHQp DQorCQkJbisrOw0K
Kwl9DQorCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOw0K Kw0KKwlyZXR1cm4g
bjsNCit9DQorDQorc3RhdGljIGludCBncm93X2JhZGJsb2NrcyhzdHJ1Y3Qg ZGlza19pbmZvICpk
aXNrKQ0KK3sNCisJY2hhciBiW0JERVZOQU1FX1NJWkVdOw0KKwlrbWVtX2Nh Y2hlX3QgKnNjOw0K
Kw0KKwkvKiBoYXNoIHRhYmxlICovDQorCWlmICgoZGlzay0+YmFkYmxvY2tf aGFzaHRibCA9IChz
dHJ1Y3QgYmFkYmxvY2sgKiopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01J QywgSEFTSF9QQUdF
U19PUkRFUikpID09IE5VTEwpIHsNCisJICAgIHByaW50aygiZ3Jvd19iYWRi bG9ja3M6IF9fZ2V0
X2ZyZWVfcGFnZXMgZmFpbGVkXG4iKTsNCisJICAgIHJldHVybiAwOw0KKwl9 DQorCW1lbXNldChk
aXNrLT5iYWRibG9ja19oYXNodGJsLCAwLCBCQl9IQVNIX1BBR0VTICogUEFH RV9TSVpFKTsNCisN
CisJLyogYmFkYmxvY2tzIGRiICovDQorCXNwcmludGYoZGlzay0+Y2FjaGVf bmFtZSwgInJhaWQ1
LyVzXyVzX2JiYyIsIG1kbmFtZShkaXNrLT5yZGV2LT5tZGRldiksDQorCQkJ YmRldm5hbWUoZGlz
ay0+cmRldi0+YmRldiwgYikpOw0KKwlzYyA9IGttZW1fY2FjaGVfY3JlYXRl KGRpc2stPmNhY2hl
X25hbWUsDQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmFkYmxvY2spLA0K KwkJCSAgICAgICAw
LCAwLCBOVUxMLCBOVUxMKTsNCisJaWYgKCFzYykgew0KKwkJcHJpbnRrKCJn cm93X2JhZGJsb2Nr
czoga21lbV9jYWNoZV9jcmVhdGUgZmFpbGVkXG4iKTsNCisJCXJldHVybiAx Ow0KKwl9DQorCWRp
c2stPnNsYWJfY2FjaGUgPSBzYzsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyB2b2lk
IHNocmlua19iYWRibG9ja3Moc3RydWN0IGRpc2tfaW5mbyAqZGlzaykNCit7 DQorCXN0cnVjdCBi
YWRibG9jayAqYmI7DQorCWludCBqOw0KKw0KKwkvKiBiYWRibG9ja3MgZGIg Ki8NCisJZm9yIChq
ID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykgew0KKwkJYmIgPSBkaXNrLT5i YWRibG9ja19oYXNo
dGJsW2pdOw0KKwkJZm9yICg7IGJiOyBiYiA9IGJiLT5oYXNoX25leHQpDQor CQkgICAgICAgIGtt
ZW1fY2FjaGVfZnJlZShkaXNrLT5zbGFiX2NhY2hlLCBiYik7DQorCX0NCisJ a21lbV9jYWNoZV9k
ZXN0cm95KGRpc2stPnNsYWJfY2FjaGUpOw0KKwlkaXNrLT5zbGFiX2NhY2hl ID0gTlVMTDsNCisN
CisJLyogaGFzaCB0YWJsZSAqLw0KKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBs b25nKSBkaXNrLT5i
YWRibG9ja19oYXNodGJsLCBIQVNIX1BBR0VTX09SREVSKTsNCit9DQorDQor c3RhdGljIHZvaWQg
c3RvcmVfYmFkYmxvY2soc3RydWN0IGRpc2tfaW5mbyAqZGlzaywgc2VjdG9y X3Qgc2VjdG9yKQ0K
K3sNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCisJcmFpZDVfY29uZl90ICpj b25mID0gKHJhaWQ1
X2NvbmZfdCAqKSBkaXNrLT5yZGV2LT5tZGRldi0+cHJpdmF0ZTsNCisNCisJ YmIgPSBrbWVtX2Nh
Y2hlX2FsbG9jKGRpc2stPnNsYWJfY2FjaGUsIEdGUF9LRVJORUwpOw0KKwlp ZiAoIWJiKSB7DQor
CQlwcmludGsoInN0b3JlX2JhZGJsb2NrOiBrbWVtX2NhY2hlX2FsbG9jIGZh aWxlZFxuIik7DQor
CQlyZXR1cm47DQorCX0NCisJbWVtc2V0KGJiLCAwLCBzaXplb2YoKmJiKSk7 DQorCWJiLT5zZWN0
b3IgPSBzZWN0b3I7DQorDQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmlj ZV9sb2NrKTsNCisJ
YmJfaW5zZXJ0X2hhc2goZGlzaywgYmIpOw0KKwlzcGluX3VubG9ja19pcnEo JmNvbmYtPmRldmlj
ZV9sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQgZGVsZXRlX2JhZGJsb2Nr KHN0cnVjdCBkaXNr
X2luZm8gKmRpc2ssIHNlY3Rvcl90IHNlY3RvcikNCit7DQorCXN0cnVjdCBi YWRibG9jayAqYmI7
DQorCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgZGlz ay0+cmRldi0+bWRk
ZXYtPnByaXZhdGU7DQorDQorCWJiID0gZmluZF9iYWRibG9jayhkaXNrLCBz ZWN0b3IpOw0KKwlp
ZiAoIWJiKQ0KKwkJLyogcmVzZXQgb24gd3JpdGUnbGwgY2FsbCB1cyBsaWtl IGFuIGlkaW90IDp9
ICovDQorCQlyZXR1cm47DQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmlj ZV9sb2NrKTsNCisJ
YmJfcmVtb3ZlX2hhc2goYmIpOw0KKwlrbWVtX2NhY2hlX2ZyZWUoZGlzay0+ c2xhYl9jYWNoZSwg
YmIpOw0KKwlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsN Cit9DQorDQogDQog
c3RhdGljIGlubGluZSB2b2lkIF9fcmVsZWFzZV9zdHJpcGUocmFpZDVfY29u Zl90ICpjb25mLCBz
dHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KIHsNCkBAIC0yMDEsNyArMzU5LDcg QEANCiAJc2gtPnBk
X2lkeCA9IHBkX2lkeDsNCiAJc2gtPnN0YXRlID0gMDsNCiANCi0JZm9yIChp PWRpc2tzOyBpLS07
ICkgew0KKwlmb3IgKGk9ZGlza3MrMTsgaS0tOyApIHsNCiAJCXN0cnVjdCBy NWRldiAqZGV2ID0g
JnNoLT5kZXZbaV07DQogDQogCQlpZiAoZGV2LT50b3JlYWQgfHwgZGV2LT50 b3dyaXRlIHx8IGRl
di0+d3JpdHRlbiB8fA0KQEAgLTI5MSw4ICs0NDksMTAgQEANCiANCiAJc3By aW50Zihjb25mLT5j
YWNoZV9uYW1lLCAicmFpZDUvJXMiLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsN CiANCisJLyogKzE6
IHdlIG5lZWQgZXh0cmEgc3BhY2UgaW4gdGhlICpzaC0+ZGV2cyBmb3IgdGhl ICdhY3RpdmUgc3Bh
cmUnIHRvIGtlZXANCisJICAgIGhhbmRsZV9zdHJpcGUoKSBzaW1wbGUgKi8N CiAJc2MgPSBrbWVt
X2NhY2hlX2NyZWF0ZShjb25mLT5jYWNoZV9uYW1lLCANCi0JCQkgICAgICAg c2l6ZW9mKHN0cnVj
dCBzdHJpcGVfaGVhZCkrKGRldnMtMSkqc2l6ZW9mKHN0cnVjdCByNWRldiks DQorCQkJICAgICAg
IHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTErMSkqc2l6ZW9m KHN0cnVjdCByNWRl
diksDQogCQkJICAgICAgIDAsIDAsIE5VTEwsIE5VTEwpOw0KIAlpZiAoIXNj KQ0KIAkJcmV0dXJu
IDE7DQpAQCAtMzAxLDEyICs0NjEsMTIgQEANCiAJCXNoID0ga21lbV9jYWNo ZV9hbGxvYyhzYywg
R0ZQX0tFUk5FTCk7DQogCQlpZiAoIXNoKQ0KIAkJCXJldHVybiAxOw0KLQkJ bWVtc2V0KHNoLCAw
LCBzaXplb2YoKnNoKSArIChkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYp KTsNCisJCW1lbXNl
dChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGV2cy0xKzEpKnNpemVvZihzdHJ1 Y3QgcjVkZXYpKTsN
CiAJCXNoLT5yYWlkX2NvbmYgPSBjb25mOw0KIAkJc3Bpbl9sb2NrX2luaXQo JnNoLT5sb2NrKTsN
CiANCi0JCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3Mp KSB7DQotCQkJc2hy
aW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOw0KKwkJaWYgKGdy b3dfYnVmZmVycyhz
aCwgY29uZi0+cmFpZF9kaXNrcysxKSkgew0KKwkJCXNocmlua19idWZmZXJz KHNoLCBjb25mLT5y
YWlkX2Rpc2tzKzEpOw0KIAkJCWttZW1fY2FjaGVfZnJlZShzYywgc2gpOw0K IAkJCXJldHVybiAx
Ow0KIAkJfQ0KQEAgLTM5MSwxMCArNTUxLDM5IEBADQogCQl9DQogI2Vsc2UN CiAJCXNldF9iaXQo
UjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCisJCWNsZWFyX2Jp dChSNV9GQUlMRUQs
ICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAjZW5kaWYJCQ0KIAl9IGVsc2Ugew0K KwkgICAgY2hhciBi
W0JERVZOQU1FX1NJWkVdOw0KKw0KKwkgICAgLyoNCisJCXJ1bGUgMS4sOiB0 cnkgdG8ga2VlcCBh
bGwgZGlzayBpbl9zeW5jIGV2ZW4gaWYgd2UndmUgZ290IHJlYWQgZXJyb3Jz LA0KKwkJY2F1c2Ug
dGhlICdhY3RpdmUgc3BhcmUnIG1heSBjYW4gcmVidWlsZCBhIGNvbXBsZXRl IGNvbHVtbiBmcm9t
DQorCQlwYXJ0aWFsbHkgZmFpbGVkIGRyaXZlcw0KKwkgICAgKi8NCisJICAg IGlmIChjb25mLT5k
aXNrc1tpXS5yZGV2LT5pbl9zeW5jICYmIGNvbmYtPndvcmtpbmdfZGlza3Mg PCBjb25mLT5yYWlk
X2Rpc2tzKSB7DQorCQkvKiBiYWQgbmV3cywgYnV0IGtlZXAgaXQsIGNhdXNl IG1kX2Vycm9yKCkg
d291bGQgZG8gYSBjb21wbGV0ZQ0KKwkJICAgIGFycmF5IHNodXRkb3duLCBl dmVuIGlmIDk5Ljk5
JSBpcyB1c2VhYmxlICovDQorCQlwcmludGsoS0VSTl9BTEVSVA0KKwkJCSJy YWlkNV9lbmRfcmVh
ZF9yZXF1ZXN0OiBSZWFkIGZhaWx1cmUgJXMgb24gc2VjdG9yICVsbHUgKCVk KSBpbiBkZWdyYWRl
ZCBtb2RlXG4iDQorCQkJLGJkZXZuYW1lKGNvbmYtPmRpc2tzW2ldLnJkZXYt PmJkZXYsIGIpLA0K
KwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgYXRvbWljX3Jl YWQoJnNoLT5jb3Vu
dCkpOw0KKwkJaWYgKGNvbmYtPm1kZGV2LT5jdXJyX3Jlc3luYykNCisJCSAg ICAvKiByYWlkNV9h
ZGRfZGlzaygpIHdpbGwgbm8gYWNjZXB0IHRoZSBzcGFyZSBhZ2FpbiwNCisJ CQlhbmQgd2lsbCBu
b3QgbG9vcCBmb3JldmVyICovDQorCQkgICAgY29uZi0+bWRkZXYtPmRlZ3Jh ZGVkID0gMjsNCisJ
ICAgIH0gZWxzZSBpZiAoY29uZi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYyAm JiBjb25mLT53b3Jr
aW5nX2Rpc2tzID49IGNvbmYtPnJhaWRfZGlza3MpIHsNCisJCS8qIHdpbGwg YmUgY29tcHV0ZWQg
Ki8NCisJCXByaW50ayhLRVJOX0FMRVJUDQorCQkJInJhaWQ1X2VuZF9yZWFk X3JlcXVlc3Q6IFJl
YWQgZmFpbHVyZSAlcyBvbiBzZWN0b3IgJWxsdSAoJWQpIGluIG9wdGltYWwg bW9kZVxuIg0KKwkJ
CSxiZGV2bmFtZShjb25mLT5kaXNrc1tpXS5yZGV2LT5iZGV2LCBiKSwNCisJ CQkodW5zaWduZWQg
bG9uZyBsb25nKXNoLT5zZWN0b3IsIGF0b21pY19yZWFkKCZzaC0+Y291bnQp KTsNCisJCS8qIGNv
bmYtPmRpc2tzW2ldLnJlcnIrKyAqLw0KKwkgICAgfSBlbHNlDQorCQkvKiBw cmFjdGljYWxseSBp
dCBuZXZlciBoYXBwZW5zICovDQogCQltZF9lcnJvcihjb25mLT5tZGRldiwg Y29uZi0+ZGlza3Nb
aV0ucmRldik7DQotCQljbGVhcl9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2 W2ldLmZsYWdzKTsN
CisJICAgIGNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxh Z3MpOw0KKwkgICAg
c2V0X2JpdChSNV9GQUlMRUQsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCiAJfQ0K IAlyZGV2X2RlY19w
ZW5kaW5nKGNvbmYtPmRpc2tzW2ldLnJkZXYsIGNvbmYtPm1kZGV2KTsNCiAj aWYgMA0KQEAgLTQz
MCwxMCArNjE5LDExIEBADQogCVBSSU5USygiZW5kX3dyaXRlX3JlcXVlc3Qg JWxsdS8lZCwgY291
bnQgJWQsIHVwdG9kYXRlOiAlZC5cbiIsIA0KIAkJKHVuc2lnbmVkIGxvbmcg bG9uZylzaC0+c2Vj
dG9yLCBpLCBhdG9taWNfcmVhZCgmc2gtPmNvdW50KSwNCiAJCXVwdG9kYXRl KTsNCisJLyogc29y
cnkNCiAJaWYgKGkgPT0gZGlza3MpIHsNCiAJCUJVRygpOw0KIAkJcmV0dXJu IDA7DQotCX0NCisJ
fSovDQogDQogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9j aywgZmxhZ3MpOw0K
IAlpZiAoIXVwdG9kYXRlKQ0KQEAgLTQ2NywzMyArNjU3LDE0NCBAQA0KIAlk ZXYtPnJlcS5iaV9w
cml2YXRlID0gc2g7DQogDQogCWRldi0+ZmxhZ3MgPSAwOw0KLQlpZiAoaSAh PSBzaC0+cGRfaWR4
KQ0KKwlpZiAoaSAhPSBzaC0+cGRfaWR4ICYmIGkgPCBzaC0+cmFpZF9jb25m LT5yYWlkX2Rpc2tz
KQkvKiBhY3RpdmUgc3BhcmU/ICovDQogCQlkZXYtPnNlY3RvciA9IGNvbXB1 dGVfYmxvY2tucihz
aCwgaSk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2so bWRkZXZfdCAqbWRk
ZXYsIGludCBudW1iZXIpOw0KK3N0YXRpYyBpbnQgcmFpZDVfYWRkX2Rpc2so bWRkZXZfdCAqbWRk
ZXYsIG1ka19yZGV2X3QgKnJkZXYpOw0KKy8qc3RhdGljKi8gdm9pZCBraWNr X3JkZXZfZnJvbV9h
cnJheShtZGtfcmRldl90ICogcmRldik7DQorLy9zdGF0aWMgdm9pZCBtZF91 cGRhdGVfc2IobWRk
ZXZfdCAqIG1kZGV2KTsNCiBzdGF0aWMgdm9pZCBlcnJvcihtZGRldl90ICpt ZGRldiwgbWRrX3Jk
ZXZfdCAqcmRldikNCiB7DQogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsNCisJ Y2hhciBiMltCREVW
TkFNRV9TSVpFXTsNCiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2Nv bmZfdCAqKSBtZGRl
di0+cHJpdmF0ZTsNCiAJUFJJTlRLKCJyYWlkNTogZXJyb3IgY2FsbGVkXG4i KTsNCiANCiAJaWYg
KCFyZGV2LT5mYXVsdHkpIHsNCi0JCW1kZGV2LT5zYl9kaXJ0eSA9IDE7DQot CQlpZiAocmRldi0+
aW5fc3luYykgew0KLQkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsNCi0JCQlt ZGRldi0+ZGVncmFk
ZWQrKzsNCi0JCQljb25mLT5mYWlsZWRfZGlza3MrKzsNCi0JCQlyZGV2LT5p bl9zeW5jID0gMDsN
Ci0JCQkvKg0KLQkJCSAqIGlmIHJlY292ZXJ5IHdhcyBydW5uaW5nLCBtYWtl IHN1cmUgaXQgYWJv
cnRzLg0KLQkJCSAqLw0KLQkJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAm bWRkZXYtPnJlY292
ZXJ5KTsNCi0JCX0NCi0JCXJkZXYtPmZhdWx0eSA9IDE7DQotCQlwcmludGsg KEtFUk5fQUxFUlQN
Ci0JCQkicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRl dmljZS4iDQotCQkJ
IiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLA0KLQkJ CWJkZXZuYW1lKHJk
ZXYtPmJkZXYsYiksIGNvbmYtPndvcmtpbmdfZGlza3MpOw0KKwkJaW50IG1k ZGlza3MgPSAwOw0K
KwkJbWRrX3JkZXZfdCAqcmQ7DQorCQltZGtfcmRldl90ICpyZGV2cyA9IE5V TEw7DQorCQlzdHJ1
Y3QgbGlzdF9oZWFkICpydG1wOw0KKwkJaW50IGk7DQorDQorCQlJVEVSQVRF X1JERVYobWRkZXYs
cmQscnRtcCkNCisJCSAgICB7DQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWRk ZXYlZDogJXNcbiIs
IG1kZGlza3MsIGJkZXZuYW1lKHJkLT5iZGV2LGIpKTsNCisJCQltZGRpc2tz Kys7DQorCQkgICAg
fQ0KKwkJZm9yIChpID0gMDsgKHJkID0gY29uZi0+ZGlza3NbaV0ucmRldik7 IGkrKykgew0KKwkJ
CXByaW50ayhLRVJOX0lORk8gInI1ZGV2JWQ6ICVzXG4iLCBpLCBiZGV2bmFt ZShyZC0+YmRldixi
KSk7DQorCQl9DQorCQlJVEVSQVRFX1JERVYobWRkZXYscmQscnRtcCkNCisJ CSAgICB7DQorCQkJ
cmRldnMgPSByZDsNCisJCQlicmVhazsNCisJCSAgICB9DQorcHJpbnRrKCIl ZCAlZCA+ICVkICVk
IGluczolZCAlcFxuIiwNCisJbWRkZXYtPnJhaWRfZGlza3MsIG1kZGlza3Ms IGNvbmYtPnJhaWRf
ZGlza3MsIG1kZGV2LT5kZWdyYWRlZCwgcmRldi0+aW5fc3luYywgcmRldnMp Ow0KKwkJaWYgKGNv
bmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXYgPT0gcmRldiAmJiBy ZGV2LT5pbl9zeW5j
KSB7DQorCQkgICAgLyogaW5fc3luYywgYnV0IG11c3QgYmUgaGFuZGxlZCBz cGVjaWFsbHksIGRv
bid0IGxldCAnZGVncmFkZWQrKycgKi8NCisJCSAgICBwcmludGsgKCJhY3Rp dmUgc3BhcmUgZmFp
bGVkICVzIChpbl9zeW5jKVxuIiwNCisJCQkJYmRldm5hbWUocmRldi0+YmRl dixiKSk7DQorCQkg
ICAgbWRkZXYtPnNiX2RpcnR5ID0gMTsNCisJCSAgICByZGV2LT5pbl9zeW5j ID0gMDsNCisJCSAg
ICByZGV2LT5mYXVsdHkgPSAxOw0KKwkJICAgIHJkZXYtPnJhaWRfZGlzayA9 IGNvbmYtPnJhaWRf
ZGlza3M7CQkvKiBtZSBhcyBteXNlbGYsIGFnYWluIDspICovDQorCQkgICAg Y29uZi0+bWlycm9y
aXQgPSAtMTsNCisJCX0gZWxzZSBpZiAobWRkaXNrcyA+IGNvbmYtPnJhaWRf ZGlza3MgJiYgIW1k
ZGV2LT5kZWdyYWRlZCAmJiByZGV2LT5pbl9zeW5jKSB7DQorCQkgICAgLyog aGF2ZSBhY3RpdmUg
c3BhcmUsIGFycmF5IGlzIG9wdGltYWwsIHJlbW92ZWQgZGlzayBtZW1iZXIN CisJCQkgICAgb2Yg
aXQgKGJ1dCBub3QgdGhlIGFjdGl2ZSBzcGFyZSkgKi8NCisJCSAgICBpZiAo cmRldi0+cmFpZF9k
aXNrID09IGNvbmYtPm1pcnJvcml0ICYmIGNvbmYtPmRpc2tzW2NvbmYtPnJh aWRfZGlza3NdLnJk
ZXYpIHsNCisJCQlpZiAoIWNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3Nd LnJkZXYtPmluX3N5
bmMpIHsNCisJCQkgICAgcHJpbnRrKEtFUk5fQUxFUlQgImRpc2sgJXMgZmFp bGVkIGFuZCBhY3Rp
dmUgc3BhcmUgaXNuJ3QgaW5fc3luYyB5ZXQsIHJlYWRkIGFzIG5vcm1hbCBz cGFyZVxuIiwNCisJ
CQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYikpOw0KKwkJCSAgICAvKiBtYXli ZSBzaG91bGRuJ3Qg
c3RvcCBoZXJlLCBidXQgd2UgY2FuJ3QgY2FsbCB0aGlzIGRpc2sgYXMNCisJ CQkJJ2FjdGl2ZSBz
cGFyZScgYW55bW9yZSwgY2F1c2UgaXQncyBhIHNpbXBsZSByZWJ1aWxkIGZy b20NCisJCQkJYSBk
ZWdyYWRlZCBhcnJheSwgZmVhciBvZiBiYWQgYmxvY2tzISAqLw0KKwkJCSAg ICBjb25mLT5taXJy
b3JpdCA9IC0xOw0KKwkJCSAgICBnb3RvIGxldGl0Z287DQorCQkJfSBlbHNl IHsNCisJCQkgICAg
aW50IHJldDsNCisNCisJCQkgICAgLyogaG90IHJlcGxhY2UgdGhlIG1pcnJv cmVkIGRyaXZlIHdp
dGggdGhlICdhY3RpdmUgc3BhcmUnDQorCQkJCXRoaXMgaXMgcmVhbGx5ICJo b3QiLCBJIGNhbid0
IHNlZSBjbGVhcmx5IHRoZSB0aGluZ3MNCisJCQkJd2hhdCBJIGhhdmUgdG8g ZG8gaGVyZS4gOn0N
CisJCQkJcHJheS4gKi8NCisNCisJCQkgICAgcHJpbnRrKEtFUk5fQUxFUlQg InJlcGxhY2UgJXMg
d2l0aCBpbl9zeW5jIGFjdGl2ZSBzcGFyZSAlc1xuIiwNCisJCQkJICAgIGJk ZXZuYW1lKHJkZXYt
PmJkZXYsYiksDQorCQkJCSAgICBiZGV2bmFtZShyZGV2cy0+YmRldixiMikp Ow0KKwkJCSAgICBy
ZGV2LT5pbl9zeW5jID0gMDsNCisJCQkgICAgcmRldi0+ZmF1bHR5ID0gMTsN CisNCisJCQkgICAg
Y29uZi0+bWlycm9yaXQgPSAtMTsNCisNCisJCQkgICAgLyogbXkgR29kLCBh bSBJIHNhbmU/ICov
DQorCQkJICAgIHdoaWxlICgoaSA9IGF0b21pY19yZWFkKCZyZGV2LT5ucl9w ZW5kaW5nKSkpIHsN
CisJCQkJcHJpbnRrKCJ3YWl0aW5nIGZvciBkaXNrICVkIC4uICVkXG4iLA0K KwkJCQkJcmRldi0+
cmFpZF9kaXNrLCBpKTsNCisJCQkgICAgfQ0KKwkJCSAgICByZXQgPSByYWlk NV9yZW1vdmVfZGlz
ayhtZGRldiwgcmRldi0+cmFpZF9kaXNrKTsNCisJCQkgICAgaWYgKHJldCkg ew0KKwkJCQlwcmlu
dGsoS0VSTl9XQVJOSU5HICJyYWlkNV9yZW1vdmVfZGlzazE6IGJ1c3k/IVxu Iik7DQorCQkJCXJl
dHVybjsJLy8gc2hvdWxkIG5vdGhpbmcgdG8gZG8NCisJCQkgICAgfQ0KKw0K KwkJCSAgICByZCA9
IGNvbmYtPmRpc2tzW2NvbmYtPnJhaWRfZGlza3NdLnJkZXY7DQorCQkJICAg IHdoaWxlICgoaSA9
IGF0b21pY19yZWFkKCZyZC0+bnJfcGVuZGluZykpKSB7DQorCQkJCXByaW50 aygid2FpdGluZyBm
b3IgZGlzayAlZCAuLiAlZFxuIiwNCisJCQkJCWNvbmYtPnJhaWRfZGlza3Ms IGkpOw0KKwkJCSAg
ICB9DQorCQkJICAgIHJkLT5pbl9zeW5jID0gMDsNCisJCQkgICAgcmV0ID0g cmFpZDVfcmVtb3Zl
X2Rpc2sobWRkZXYsIGNvbmYtPnJhaWRfZGlza3MpOw0KKwkJCSAgICBpZiAo cmV0KSB7DQorCQkJ
CXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1X3JlbW92ZV9kaXNrMjogYnVz eT8hXG4iKTsNCisJ
CQkJcmV0dXJuOwkvLyAuLg0KKwkJCSAgICB9DQorDQorCQkJICAgIHJldCA9 IHJhaWQ1X2FkZF9k
aXNrKG1kZGV2LCByZCk7DQorCQkJICAgIGlmICghcmV0KSB7DQorCQkJCXBy aW50ayhLRVJOX1dB
Uk5JTkcgInJhaWQ1X2FkZF9kaXNrOiBubyBmcmVlIHNsb3Q/IVxuIik7DQor CQkJCXJldHVybjsJ
Ly8gLi4NCisJCQkgICAgfQ0KKwkJCSAgICByZC0+aW5fc3luYyA9IDE7DQor DQorCQkJICAgIC8q
IGJvcnJvd2VkIGZyb20gaG90X3JlbW92ZV9kaXNrKCkgKi8NCisJCQkgICAg a2lja19yZGV2X2Zy
b21fYXJyYXkocmRldik7DQorCQkJICAgIC8vbWRfdXBkYXRlX3NiKG1kZGV2 KTsNCisJCQl9DQor
CQkgICAgfSBlbHNlIHsNCisJCQkvKiBpbl9zeW5jIGRpc2sgZmFpbGVkICgh ZGVncmFkZWQpLCB0
cnlpbmcgdG8gbWFrZSBhIGNvcHkNCisJCQkgICAgdG8gYSBzcGFyZSB7YW5k IHdlIGNhbiBjYWxs
IGl0ICdhY3RpdmUgc3BhcmUnIGZyb20gbm93On0gKi8NCisJCQlwcmludGso S0VSTl9BTEVSVCAi
cmVzeW5jIGZyb20gJXMgdG8gc3BhcmUgJXMgKCVkKVxuIiwNCisJCQkJYmRl dm5hbWUocmRldi0+
YmRldixiKSwNCisJCQkgICAgICAgIGJkZXZuYW1lKHJkZXZzLT5iZGV2LGIy KSwNCisJCQkJY29u
Zi0+cmFpZF9kaXNrcyk7DQorCQkJY29uZi0+bWlycm9yaXQgPSByZGV2LT5y YWlkX2Rpc2s7DQor
DQorCQkJbWRkZXYtPmRlZ3JhZGVkKys7CS8qIGZvciBjYWxsIHJhaWQ1X2hv dF9hZGRfZGlzaygp
LCByZXNldCB0aGVyZSAqLw0KKwkJICAgIH0NCisJCX0gZWxzZSB7DQorbGV0 aXRnbzoNCisJCSAg
ICBtZGRldi0+c2JfZGlydHkgPSAxOw0KKwkJICAgIGlmIChyZGV2LT5pbl9z eW5jKSB7DQorCQkJ
ICAgIGNvbmYtPndvcmtpbmdfZGlza3MtLTsNCisJCQkgICAgbWRkZXYtPmRl Z3JhZGVkKys7DQor
CQkJICAgIGNvbmYtPmZhaWxlZF9kaXNrcysrOw0KKwkJCSAgICByZGV2LT5p bl9zeW5jID0gMDsN
CisJCQkgICAgLyoNCisJCQkgICAgICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5p bmcsIG1ha2Ugc3Vy
ZSBpdCBhYm9ydHMuDQorCQkJICAgICAqLw0KKwkJCSAgICBzZXRfYml0KE1E X1JFQ09WRVJZX0VS
UiwgJm1kZGV2LT5yZWNvdmVyeSk7DQorCQkgICAgfQ0KKwkJICAgIHJkZXYt PmZhdWx0eSA9IDE7
DQorCQkgICAgcHJpbnRrIChLRVJOX0FMRVJUDQorCQkJICAgICJyYWlkNTog RGlzayBmYWlsdXJl
IG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiINCisJCQkgICAgIiBPcGVyYXRp b24gY29udGludWlu
ZyBvbiAlZCBkZXZpY2VzXG4iLA0KKwkJCSAgICBiZGV2bmFtZShyZGV2LT5i ZGV2LGIpLCBjb25m
LT53b3JraW5nX2Rpc2tzKTsNCisJCX0NCiAJfQ0KIH0JDQogDQpAQCAtODg4 LDYgKzExODksOCBA
QA0KIAlpbnQgbG9ja2VkPTAsIHVwdG9kYXRlPTAsIHRvX3JlYWQ9MCwgdG9f d3JpdGU9MCwgZmFp
bGVkPTAsIHdyaXR0ZW49MDsNCiAJaW50IG5vbl9vdmVyd3JpdGUgPSAwOw0K IAlpbnQgZmFpbGVk
X251bT0wOw0KKwlpbnQgYXNwYXJlPTAsIGFzcGFyZW51bT0tMTsNCisJc3Ry dWN0IGRpc2tfaW5m
byAqYXNwYXJlZGV2Ow0KIAlzdHJ1Y3QgcjVkZXYgKmRldjsNCiANCiAJUFJJ TlRLKCJoYW5kbGlu
ZyBzdHJpcGUgJWxsdSwgY250PSVkLCBwZF9pZHg9JWRcbiIsDQpAQCAtODk5 LDEwICsxMjAyLDE4
IEBADQogCWNsZWFyX2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7 DQogDQogCXN5bmNp
bmcgPSB0ZXN0X2JpdChTVFJJUEVfU1lOQ0lORywgJnNoLT5zdGF0ZSk7DQor CWFzcGFyZWRldiA9
ICZjb25mLT5kaXNrc1tjb25mLT5yYWlkX2Rpc2tzXTsNCisJaWYgKCFjb25m LT5tZGRldi0+ZGVn
cmFkZWQgJiYgYXNwYXJlZGV2LT5yZGV2ICYmICFhc3BhcmVkZXYtPnJkZXYt PmZhdWx0eSAmJg0K
KwkJY29uZi0+bWlycm9yaXQgIT0gLTEpIHsNCisJICAgIGFzcGFyZSsrOw0K KwkgICAgYXNwYXJl
bnVtID0gc2gtPnJhaWRfY29uZi0+bWlycm9yaXQ7DQorCSAgICBQUklOVEso ImhhcyBhc3BhcmUg
KCVkKVxuIiwgYXNwYXJlbnVtKTsNCisJfQ0KIAkvKiBOb3cgdG8gbG9vayBh cm91bmQgYW5kIHNl
ZSB3aGF0IGNhbiBiZSBkb25lICovDQogDQotCWZvciAoaT1kaXNrczsgaS0t OyApIHsNCisJZm9y
IChpPWRpc2tzK2FzcGFyZTsgaS0tOyApIHsNCiAJCW1ka19yZGV2X3QgKnJk ZXY7DQorCQlzdHJ1
Y3QgYmFkYmxvY2sgKmJiID0gTlVMTDsNCiAJCWRldiA9ICZzaC0+ZGV2W2ld Ow0KIAkJY2xlYXJf
Yml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KIAkJY2xlYXJfYml0KFI1 X1N5bmNpbywgJmRl
di0+ZmxhZ3MpOw0KQEAgLTk0NSwxMiArMTI1Niw0MyBAQA0KIAkJfQ0KIAkJ aWYgKGRldi0+d3Jp
dHRlbikgd3JpdHRlbisrOw0KIAkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJk ZXY7IC8qIEZJWE1F
LCBzaG91bGQgSSBiZSBsb29raW5nIHJkZXYgKi8NCi0JCWlmICghcmRldiB8 fCAhcmRldi0+aW5f
c3luYykgew0KKwkJaWYgKHJkZXYgJiYgcmRldi0+aW5fc3luYyAmJg0KKwkJ ICAgICF0ZXN0X2Jp
dChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpICYmDQorCQkgICAgIXRlc3Rf Yml0KFI1X0xPQ0tF
RCwgJmRldi0+ZmxhZ3MpKSB7DQorCQkJLyogLi5wb3RlbnRpYWxseSBkZXNl cnZlZCB0byByZWFk
LCB3ZSBtdXN0IGNoZWNrIGl0DQorCQkJICAgIGNoZWNrbWUsIGl0IGNvdWxk IGJlIGEgYmlnIHBl
cmZvcm1hbmNlIHBlbmFsdHkgaWYgY2FsbGVkDQorCQkJCXdpdGhvdXQgYSBn b29kIHJlYXNvbiEg
aXQncyBzZWVtcyBvayBmb3Igbm93DQorCQkJKi8NCisJCQlQUklOVEsoImZp bmRfYmFkYmxvY2sg
JWQ6ICVsbHVcbiIsIGksIHNoLT5zZWN0b3IpOw0KKwkJCWJiID0gZmluZF9i YWRibG9jaygmY29u
Zi0+ZGlza3NbaV0sIHNoLT5zZWN0b3IpOw0KKwkJfQ0KKwkJaWYgKCFyZGV2 IHx8ICFyZGV2LT5p
bl9zeW5jDQorCQkgICAgfHwgKHRlc3RfYml0KFI1X0ZBSUxFRCwgJmRldi0+ ZmxhZ3MpICYmICF0
ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpKQ0KKwkJICAgIHx8 IGJiKSB7DQorCQkJ
aWYgKHJkZXYgJiYgcmRldi0+aW5fc3luYyAmJiB0ZXN0X2JpdChSNV9GQUlM RUQsICZkZXYtPmZs
YWdzKSAmJiAhYmIpIHsNCisJCQkJaWYgKC8qKCFhc3BhcmUgfHwgKGFzcGFy ZSAmJiBhc3BhcmVk
ZXYtPnJkZXYtPmluX3N5bmMpKSAmJg0KKwkJCQkgICAgaXQgd291bGQgYmUg Y2xlYXIsIGJ1dCB0
b28gZWFybHksIHRoZSB0aHJlYWQgaGFzbid0IHdva2VuLCB5ZXQgKi8NCisJ CQkJICAgIGNvbmYt
Pm1pcnJvcml0ID09IC0xICYmDQorCQkJCSAgICBjb3VudF9iYWRibG9ja3Mo JmNvbmYtPmRpc2tz
W2ldKSA+PSBzeXNjdGxfYmFkYmxvY2tfdG9sZXJhbmNlKSB7DQorCQkJCQlj aGFyIGJbQkRFVk5B
TUVfU0laRV07DQorDQorCQkJCQlwcmludGsoS0VSTl9BTEVSVCAidG9vIG1h bnkgYmFkYmxvY2tz
ICglbHUpIG9uIGRldmljZSAlcywgbWFya2luZyBhcyBmYWlsZWRcbiIsDQor CQkJCQkJICAgIGNv
dW50X2JhZGJsb2NrcygmY29uZi0+ZGlza3NbaV0pICsgMSwgYmRldm5hbWUo Y29uZi0+ZGlza3Nb
aV0ucmRldi0+YmRldiwgYikpOw0KKwkJCQkJbWRfZXJyb3IoY29uZi0+bWRk ZXYsIGNvbmYtPmRp
c2tzW2ldLnJkZXYpOw0KKwkJCQl9DQorCQkJCVBSSU5USygic3RvcmVfYmFk YmxvY2sgJWQ6ICVs
bHVcbiIsIGksIHNoLT5zZWN0b3IpOw0KKwkJCQlzdG9yZV9iYWRibG9jaygm Y29uZi0+ZGlza3Nb
aV0sIHNoLT5zZWN0b3IpOw0KKwkJCX0NCiAJCQlmYWlsZWQrKzsNCiAJCQlm YWlsZWRfbnVtID0g
aTsNCi0JCX0gZWxzZQ0KKwkJCVBSSU5USygiZGV2aWNlICVkIGZhaWxlZCBm b3IgdGhpcyBzdHJp
cGUgciVwIHclcFxuIiwgaSwgZGV2LT50b3JlYWQsIGRldi0+dG93cml0ZSk7 DQorCQl9IGVsc2Ug
ew0KIAkJCXNldF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncyk7DQorCQl9 DQogCX0NCisJaWYg
KGFzcGFyZSAmJiBmYWlsZWQgPiAxKQ0KKwkgICAgZmFpbGVkLS07CS8qIGZh aWxlZCA9IDEgbWVh
bnMgImFsbCBvayIgaWYgd2UndmUgYXNwYXJlLCB0aGlzIGlzIHNpbXBsZXN0 DQorCQkJICAgIG1l
dGhvZCB0byBkbyBvdXIgd29yayAqLw0KIAlQUklOVEsoImxvY2tlZD0lZCB1 cHRvZGF0ZT0lZCB0
b19yZWFkPSVkIg0KIAkJIiB0b193cml0ZT0lZCBmYWlsZWQ9JWQgZmFpbGVk X251bT0lZFxuIiwN
CiAJCWxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWls ZWQsIGZhaWxlZF9u
dW0pOw0KQEAgLTEwMTMsNiArMTM1NSw3IEBADQogCQlzcGluX3VubG9ja19p cnEoJmNvbmYtPmRl
dmljZV9sb2NrKTsNCiAJfQ0KIAlpZiAoZmFpbGVkID4gMSAmJiBzeW5jaW5n KSB7DQorCQlwcmlu
dGsoS0VSTl9BTEVSVCAic3luYyBzdG9wcGVkIGJ5IElPIGVycm9yXG4iKTsN CiAJCW1kX2RvbmVf
c3luYyhjb25mLT5tZGRldiwgU1RSSVBFX1NFQ1RPUlMsMCk7DQogCQljbGVh cl9iaXQoU1RSSVBF
X1NZTkNJTkcsICZzaC0+c3RhdGUpOw0KIAkJc3luY2luZyA9IDA7DQpAQCAt MTE4NCw2ICsxNTI3
LDI2IEBADQogCQkJCQlQUklOVEsoIldyaXRpbmcgYmxvY2sgJWRcbiIsIGkp Ow0KIAkJCQkJbG9j
a2VkKys7DQogCQkJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJnNoLT5kZXZb aV0uZmxhZ3MpOw0K
KwkJCQkJaWYgKGFzcGFyZSAmJiBpID09IGFzcGFyZW51bSkgew0KKwkJCQkJ ICAgIGNoYXIgKnBz
LCAqcGQ7DQorDQorCQkJCQkgICAgLyogbWlycm9yaW5nIHRoaXMgbmV3IGJs b2NrICovDQorCQkJ
CQkgICAgUFJJTlRLKCJXcml0aW5nIHRvIGFzcGFyZSB0b28gJWQtPiVkXG4i LA0KKwkJCQkJCQlp
LCBjb25mLT5yYWlkX2Rpc2tzKTsNCisJCQkJCSAgICAvKmlmICh0ZXN0X2Jp dChSNV9MT0NLRUQs
ICZzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLmZsYWdzKSkgew0KKwkJCQkJ CXByaW50aygiYmF6
bWVnLCBleiBsb2trb2x0MSEhIVxuIik7DQorCQkJCQkgICAgfSovDQorCQkJ CQkgICAgcHMgPSBw
YWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsNCisJCQkJCSAgICBwZCA9 IHBhZ2VfYWRkcmVz
cyhzaC0+ZGV2W2NvbmYtPnJhaWRfZGlza3NdLnBhZ2UpOw0KKwkJCQkJICAg IC8qIGJldHRlciBp
ZGVhPyAqLw0KKwkJCQkJICAgIG1lbWNweShwZCwgcHMsIFNUUklQRV9TSVpF KTsNCisJCQkJCSAg
ICBzZXRfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbY29uZi0+cmFpZF9kaXNr c10uZmxhZ3MpOw0K
KwkJCQkJICAgIHNldF9iaXQoUjVfV2FudHdyaXRlLCAmc2gtPmRldltjb25m LT5yYWlkX2Rpc2tz
XS5mbGFncyk7DQorCQkJCQl9DQorCQkJCQlpZiAoY29uZi0+ZGlza3NbaV0u cmRldiAmJiBjb25m
LT5kaXNrc1tpXS5yZGV2LT5pbl9zeW5jKSB7DQorCQkJCQkgICAgUFJJTlRL KCJyZXNldCBiYWRi
bG9jayBvbiAlZDogJWxsdVxuIiwgaSwgc2gtPnNlY3Rvcik7DQorCQkJCQkg ICAgZGVsZXRlX2Jh
ZGJsb2NrKCZjb25mLT5kaXNrc1tpXSwgc2gtPnNlY3Rvcik7DQorCQkJCQl9 DQogCQkJCQlpZiAo
IXRlc3RfYml0KFI1X0luc3luYywgJnNoLT5kZXZbaV0uZmxhZ3MpDQogCQkJ CQkgICAgfHwgKGk9
PXNoLT5wZF9pZHggJiYgZmFpbGVkID09IDApKQ0KIAkJCQkJCXNldF9iaXQo U1RSSVBFX0lOU1lO
QywgJnNoLT5zdGF0ZSk7DQpAQCAtMTIyMCwyMCArMTU4MywzOSBAQA0KIAkJ CWlmIChmYWlsZWQ9
PTApDQogCQkJCWZhaWxlZF9udW0gPSBzaC0+cGRfaWR4Ow0KIAkJCS8qIHNo b3VsZCBiZSBhYmxl
IHRvIGNvbXB1dGUgdGhlIG1pc3NpbmcgYmxvY2sgYW5kIHdyaXRlIGl0IHRv IHNwYXJlICovDQor
CQkJaWYgKGFzcGFyZSkNCisJCQkgICAgZmFpbGVkX251bSA9IGFzcGFyZW51 bTsNCiAJCQlpZiAo
IXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltmYWlsZWRfbnVtXS5m bGFncykpIHsNCiAJ
CQkJaWYgKHVwdG9kYXRlKzEgIT0gZGlza3MpDQogCQkJCQlCVUcoKTsNCiAJ CQkJY29tcHV0ZV9i
bG9jayhzaCwgZmFpbGVkX251bSk7DQogCQkJCXVwdG9kYXRlKys7DQogCQkJ fQ0KKwkJCWlmIChh
c3BhcmUpIHsNCisJCQkgICAgY2hhciAqcHMsICpwZDsNCisNCisJCQkgICAg cHMgPSBwYWdlX2Fk
ZHJlc3Moc2gtPmRldltmYWlsZWRfbnVtXS5wYWdlKTsNCisJCQkgICAgcGQg PSBwYWdlX2FkZHJl
c3Moc2gtPmRldltjb25mLT5yYWlkX2Rpc2tzXS5wYWdlKTsNCisJCQkgICAg bWVtY3B5KHBkLCBw
cywgU1RSSVBFX1NJWkUpOw0KKwkJCSAgICBQUklOVEsoIlI1X1dhbnR3cml0 ZSB0byBhc3BhcmUs
IHVwdG9kYXRlOiAlZCAlcC0+JXBcbiIsDQorCQkJCQl1cHRvZGF0ZSwgcHMs IHBkKTsNCisJCQkg
ICAgLyppZiAodGVzdF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltjb25mLT5y YWlkX2Rpc2tzXS5m
bGFncykpIHsNCisJCQkJcHJpbnRrKCJiYXptZWcsIGV6IGxva2tvbHQyISEh XG4iKTsNCisJCQkg
ICAgfSovDQorCQkJfQ0KIAkJCWlmICh1cHRvZGF0ZSAhPSBkaXNrcykNCiAJ CQkJQlVHKCk7DQor
CQkJaWYgKGFzcGFyZSkNCisJCQkgICAgZmFpbGVkX251bSA9IGNvbmYtPnJh aWRfZGlza3M7DQog
CQkJZGV2ID0gJnNoLT5kZXZbZmFpbGVkX251bV07DQogCQkJc2V0X2JpdChS NV9MT0NLRUQsICZk
ZXYtPmZsYWdzKTsNCiAJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJmRldi0+ ZmxhZ3MpOw0KIAkJ
CWxvY2tlZCsrOw0KIAkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5z dGF0ZSk7DQogCQkJ
c2V0X2JpdChSNV9TeW5jaW8sICZkZXYtPmZsYWdzKTsNCisJCQkvKiAhaW5f c3luYy4uDQorCQkJ
cHJpbnRrKCJyZXNldCBiYWRibG9jayBvbiAlZDogJWxsdVxuIiwgZmFpbGVk X251bSwgc2gtPnNl
Y3Rvcik7DQorCQkJZGVsZXRlX2JhZGJsb2NrKCZjb25mLT5kaXNrc1tmYWls ZWRfbnVtXSwgc2gt
PnNlY3Rvcik7Ki8NCiAJCX0NCiAJfQ0KIAlpZiAoc3luY2luZyAmJiBsb2Nr ZWQgPT0gMCAmJiB0
ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSkgew0KQEAgLTEy NTEsNyArMTYzMyw3
IEBADQogCQliaS0+Ymlfc2l6ZSA9IDA7DQogCQliaS0+YmlfZW5kX2lvKGJp LCBieXRlcywgMCk7
DQogCX0NCi0JZm9yIChpPWRpc2tzOyBpLS0gOykgew0KKwlmb3IgKGk9ZGlz a3MrYXNwYXJlOyBp
LS0gOykgew0KIAkJaW50IHJ3Ow0KIAkJc3RydWN0IGJpbyAqYmk7DQogCQlt ZGtfcmRldl90ICpy
ZGV2Ow0KQEAgLTE0OTMsNiArMTg3NSwxNSBAQA0KIAkJdW5wbHVnX3NsYXZl cyhtZGRldik7DQog
CQlyZXR1cm4gMDsNCiAJfQ0KKwkvKiBpZiB0aGVyZSBpcyAxIG9yIG1vcmUg ZmFpbGVkIGRyaXZl
cyBhbmQgd2UgYXJlIHRyeWluZw0KKwkgKiB0byByZXN5bmMsIHRoZW4gYXNz ZXJ0IHRoYXQgd2Ug
YXJlIGZpbmlzaGVkLCBiZWNhdXNlIHRoZXJlIGlzDQorCSAqIG5vdGhpbmcg d2UgY2FuIGRvLg0K
KwkgKi8NCisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+PSAxICYmIHRlc3RfYml0 KE1EX1JFQ09WRVJZ
X1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7DQorCQlpbnQgcnYgPSAobWRk ZXYtPnNpemUgPDwg
MSkgLSBzZWN0b3JfbnI7DQorCQltZF9kb25lX3N5bmMobWRkZXYsIHJ2LCAx KTsNCisJCXJldHVy
biBydjsNCisJfQ0KIA0KIAl4ID0gc2VjdG9yX25yOw0KIAljaHVua19vZmZz ZXQgPSBzZWN0b3Jf
ZGl2KHgsIHNlY3RvcnNfcGVyX2NodW5rKTsNCkBAIC0xNTkxLDExICsxOTgy LDExIEBADQogCX0N
CiANCiAJbWRkZXYtPnByaXZhdGUgPSBrbWFsbG9jIChzaXplb2YgKHJhaWQ1 X2NvbmZfdCkNCi0J
CQkJICArIG1kZGV2LT5yYWlkX2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNr X2luZm8pLA0KKwkJ
CQkgICsgKG1kZGV2LT5yYWlkX2Rpc2tzICsgMSkgKiBzaXplb2Yoc3RydWN0 IGRpc2tfaW5mbyks
DQogCQkJCSAgR0ZQX0tFUk5FTCk7DQogCWlmICgoY29uZiA9IG1kZGV2LT5w cml2YXRlKSA9PSBO
VUxMKQ0KIAkJZ290byBhYm9ydDsNCi0JbWVtc2V0IChjb25mLCAwLCBzaXpl b2YgKCpjb25mKSAr
IG1kZGV2LT5yYWlkX2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8p ICk7DQorCW1lbXNl
dCAoY29uZiwgMCwgc2l6ZW9mICgqY29uZikgKyAobWRkZXYtPnJhaWRfZGlz a3MgKyAxKSAqIHNp
emVvZihzdHJ1Y3QgZGlza19pbmZvKSApOw0KIAljb25mLT5tZGRldiA9IG1k ZGV2Ow0KIA0KIAlp
ZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0gKHN0cnVjdCBzdHJpcGVfaGVh ZCAqKikgX19nZXRf
ZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBIQVNIX1BBR0VTX09SREVSKSkgPT0g TlVMTCkNCkBAIC0x
NjI1LDYgKzIwMTYsOCBAQA0KIA0KIAkJZGlzay0+cmRldiA9IHJkZXY7DQog DQorCQlncm93X2Jh
ZGJsb2NrcyhkaXNrKTsNCisNCiAJCWlmIChyZGV2LT5pbl9zeW5jKSB7DQog CQkJY2hhciBiW0JE
RVZOQU1FX1NJWkVdOw0KIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBk ZXZpY2UgJXMgb3Bl
cmF0aW9uYWwgYXMgcmFpZCINCkBAIC0xNjM1LDYgKzIwMjgsNyBAQA0KIAl9 DQogDQogCWNvbmYt
PnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsNCisJY29uZi0+bWly cm9yaXQgPSAtMTsN
CiAJLyoNCiAJICogMCBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LCAx IGZvciBhIGRlZ3Jh
ZGVkIGFycmF5Lg0KIAkgKi8NCkBAIC0xNjg0LDcgKzIwNzgsNyBAQA0KIAkJ fQ0KIAl9DQogbWVt
b3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBz dHJpcGVfaGVhZCkg
Kw0KLQkJIGNvbmYtPnJhaWRfZGlza3MgKiAoKHNpemVvZihzdHJ1Y3QgYmlv KSArIFBBR0VfU0la
RSkpKSAvIDEwMjQ7DQorCQkgKGNvbmYtPnJhaWRfZGlza3MrMSkgKiAoKHNp emVvZihzdHJ1Y3Qg
YmlvKSArIFBBR0VfU0laRSkpKSAvIDEwMjQ7DQogCWlmIChncm93X3N0cmlw ZXMoY29uZiwgY29u
Zi0+bWF4X25yX3N0cmlwZXMpKSB7DQogCQlwcmludGsoS0VSTl9FUlIgDQog CQkJInJhaWQ1OiBj
b3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkp Ow0KQEAgLTE3Mzks
MTAgKzIxMzMsMTQgQEANCiBzdGF0aWMgaW50IHN0b3AgKG1kZGV2X3QgKm1k ZGV2KQ0KIHsNCiAJ
cmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+ cHJpdmF0ZTsNCisJ
aW50IGk7DQogDQogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJl YWQpOw0KIAltZGRl
di0+dGhyZWFkID0gTlVMTDsNCiAJc2hyaW5rX3N0cmlwZXMoY29uZik7DQor CWZvciAoaSA9IGNv
bmYtPnJhaWRfZGlza3M7IGktLTsgKQ0KKwkJaWYgKGNvbmYtPmRpc2tzW2ld LnJkZXYgJiYgY29u
Zi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYykNCisJCQlzaHJpbmtfYmFkYmxv Y2tzKCZjb25mLT5k
aXNrc1tpXSk7DQogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGNvbmYt PnN0cmlwZV9oYXNo
dGJsLCBIQVNIX1BBR0VTX09SREVSKTsNCiAJYmxrX3N5bmNfcXVldWUobWRk ZXYtPnF1ZXVlKTsg
LyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovDQogCWtmcmVl KGNvbmYpOw0KQEAg
LTE3ODgsNyArMjE4Niw5IEBADQogc3RhdGljIHZvaWQgc3RhdHVzIChzdHJ1 Y3Qgc2VxX2ZpbGUg
KnNlcSwgbWRkZXZfdCAqbWRkZXYpDQogew0KIAlyYWlkNV9jb25mX3QgKmNv bmYgPSAocmFpZDVf
Y29uZl90ICopIG1kZGV2LT5wcml2YXRlOw0KLQlpbnQgaTsNCisJaW50IGks IGo7DQorCWNoYXIg
YltCREVWTkFNRV9TSVpFXTsNCisJc3RydWN0IGJhZGJsb2NrICpiYjsNCiAN CiAJc2VxX3ByaW50
ZiAoc2VxLCAiIGxldmVsICVkLCAlZGsgY2h1bmssIGFsZ29yaXRobSAlZCIs IG1kZGV2LT5sZXZl
bCwgbWRkZXYtPmNodW5rX3NpemUgPj4gMTAsIG1kZGV2LT5sYXlvdXQpOw0K IAlzZXFfcHJpbnRm
IChzZXEsICIgWyVkLyVkXSBbIiwgY29uZi0+cmFpZF9kaXNrcywgY29uZi0+ d29ya2luZ19kaXNr
cyk7DQpAQCAtMTgwMSw2ICsyMjAxLDIwIEBADQogI2RlZmluZSBEKHgpIFwN CiAJc2VxX3ByaW50
ZiAoc2VxLCAiPCIjeCI6JWQ+IiwgYXRvbWljX3JlYWQoJmNvbmYtPngpKQ0K IAlwcmludGFsbChj
b25mKTsNCisNCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2sp OwkvKiBpdCdzIG9r
IG5vdyBmb3IgZGVidWcgKi8NCisJc2VxX3ByaW50ZiAoc2VxLCAiXG4gICAg ICBrbm93biBiYWQg
c2VjdG9ycyBvbiBhY3RpdmUgZGV2aWNlczoiKTsNCisJZm9yIChpID0gY29u Zi0+cmFpZF9kaXNr
czsgaS0tOyApIHsNCisJICAgIGlmIChjb25mLT5kaXNrc1tpXS5yZGV2KSB7 DQorCQlzZXFfcHJp
bnRmIChzZXEsICJcbiAgICAgICVzIiwgYmRldm5hbWUoY29uZi0+ZGlza3Nb aV0ucmRldi0+YmRl
diwgYikpOw0KKwkJZm9yIChqID0gMDsgaiA8IEJCX05SX0hBU0g7IGorKykg ew0KKwkJICAgIGJi
ID0gY29uZi0+ZGlza3NbaV0uYmFkYmxvY2tfaGFzaHRibFtqXTsNCisJCSAg ICBmb3IgKDsgYmI7
IGJiID0gYmItPmhhc2hfbmV4dCkNCisJCQlzZXFfcHJpbnRmIChzZXEsICIg JWxsdS0lbGx1Iiwg
YmItPnNlY3RvciwgYmItPnNlY3RvciArICh1bnNpZ25lZCBsb25nIGxvbmcp KFNUUklQRV9TSVpF
IC8gNTEyKSAtIDEpOw0KKwkJfQ0KKwkgICAgfQ0KKwl9DQorCXNwaW5fdW5s b2NrX2lycSgmY29u
Zi0+ZGV2aWNlX2xvY2spOw0KICNlbmRpZg0KIH0NCiANCkBAIC0xODQ0LDYg KzIyNTgsMTcgQEAN
CiAJCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOw0KIAkJfQ0KIAl9DQorCXRt cCA9IGNvbmYtPmRp
c2tzICsgaTsNCisJaWYgKHRtcC0+cmRldiAmJiAhdG1wLT5yZGV2LT5mYXVs dHkgJiYgIXRtcC0+
cmRldi0+aW5fc3luYykgew0KKwkgICAgLyogc3luYyBkb25lIHRvIHRoZSAn YWN0aXZlIHNwYXJl
JyAqLw0KKwkgICAgdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsNCisNCisJICAg IHByaW50ayhLRVJO
X05PVElDRSAicmFpZDVfc3BhcmVfYWN0aXZlOiAlZCBpbl9zeW5jICVkLT4l ZFxuIiwNCisJCQlp
LCB0bXAtPnJkZXYtPnJhaWRfZGlzaywgY29uZi0+bWlycm9yaXQpOw0KKw0K KwkgICAgLyogc2Nh
cnkuLj8gOn0gKi8NCisJICAgIHRtcC0+cmRldi0+cmFpZF9kaXNrID0gY29u Zi0+bWlycm9yaXQ7
DQorCX0NCiAJcHJpbnRfcmFpZDVfY29uZihjb25mKTsNCiAJcmV0dXJuIDA7 DQogfQ0KQEAgLTE4
NTcsNiArMjI4Miw3IEBADQogDQogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7 DQogCXJkZXYgPSBw
LT5yZGV2Ow0KK3ByaW50aygicmFpZDVfcmVtb3ZlX2Rpc2sgJWRcbiIsIG51 bWJlcik7DQogCWlm
IChyZGV2KSB7DQogCQlpZiAocmRldi0+aW5fc3luYyB8fA0KIAkJICAgIGF0 b21pY19yZWFkKCZy
ZGV2LT5ucl9wZW5kaW5nKSkgew0KQEAgLTE4NzAsNiArMjI5Niw4IEBADQog CQkJZXJyID0gLUVC
VVNZOw0KIAkJCXAtPnJkZXYgPSByZGV2Ow0KIAkJfQ0KKwkJaWYgKCFlcnIp DQorCQkJc2hyaW5r
X2JhZGJsb2NrcyhwKTsNCiAJfQ0KIGFib3J0Og0KIA0KQEAgLTE4ODQsNiAr MjMxMiwxMCBAQA0K
IAlpbnQgZGlzazsNCiAJc3RydWN0IGRpc2tfaW5mbyAqcDsNCiANCisJaWYg KG1kZGV2LT5kZWdy
YWRlZCA+IDEpDQorCQkvKiBubyBwb2ludCBhZGRpbmcgYSBkZXZpY2UgKi8N CisJCXJldHVybiAw
Ow0KKw0KIAkvKg0KIAkgKiBmaW5kIHRoZSBkaXNrIC4uLg0KIAkgKi8NCkBA IC0xODk1LDYgKzIz
MjcsMjIgQEANCiAJCQlwLT5yZGV2ID0gcmRldjsNCiAJCQlicmVhazsNCiAJ CX0NCisNCisJaWYg
KCFmb3VuZCkgew0KKwkgICAgLyogYXJyYXkgb3B0aW1hbCwgdGhpcyBzaG91 bGQgYmUgdGhlICdh
Y3RpdmUgc3BhcmUnICovDQorCSAgICBjb25mLT5kaXNrc1tkaXNrXS5yZGV2 ID0gcmRldjsNCisJ
ICAgIHJkZXYtPmluX3N5bmMgPSAwOw0KKwkgICAgcmRldi0+cmFpZF9kaXNr ID0gY29uZi0+cmFp
ZF9kaXNrczsNCisNCisJICAgIG1kZGV2LT5kZWdyYWRlZC0tOw0KKwkgICAg Zm91bmQrKzsJLyog
Y2FsbCByZXN5bmMgKi8NCisNCisJICAgIHByaW50ayhLRVJOX0lORk8gImFk ZGVkIHNwYXJlIGZv
ciBhY3RpdmUgcmVzeW5jXG4iKTsNCisJfQ0KKwlpZiAoZm91bmQpDQorCQln cm93X2JhZGJsb2Nr
cygmY29uZi0+ZGlza3NbZGlza10pOw0KKwlwcmludGsoS0VSTl9JTkZPICJy YWlkNV9hZGRfZGlz
azogJWQgKCVkKVxuIiwgZGlzaywgZm91bmQpOw0KKw0KIAlwcmludF9yYWlk NV9jb25mKGNvbmYp
Ow0KIAlyZXR1cm4gZm91bmQ7DQogfQ0K
--=-qUfi0mPUCbSVjUIavgzS--
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html