Thread (28 messages) 28 messages, 3 authors, 2018-03-02
STALE3034d
Revisions (3)
  1. v2 [diff vs current]
  2. v3 [diff vs current]
  3. v4 current

[PATCH 14/15] lightnvm: pblk: refactor init/exit sequences

From: Javier González <hidden>
Date: 2018-02-28 17:08:28
Also in: linux-nvme, lkml
Subsystem: the rest · Maintainer: Linus Torvalds

UmVmYWN0b3IgaW5pdCBhbmQgZXhpdCBzZXF1ZW5jZXMgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4g
SW4gdGhlIHdheSwgZml4CmJhZCBmcmVlIG9yZGVyaW5nIG9uIHRoZSBpbml0IGVycm9yIHBhdGgu
CgpTaWduZWQtb2ZmLWJ5OiBKYXZpZXIgR29uesOhbGV6IDxqYXZpZXJAY25leGxhYnMuY29tPgot
LS0KIGRyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMgfCA1MzMgKysrKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI2NiBpbnNlcnRpb25z
KCspLCAyNjcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9wYmxr
LWluaXQuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMKaW5kZXggYmQyNTkyZmMzMzc4
Li5iM2UxNWVmNjNkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMK
KysrIGIvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYwpAQCAtMTAzLDcgKzEwMyw0MCBAQCBz
dGF0aWMgdm9pZCBwYmxrX2wycF9mcmVlKHN0cnVjdCBwYmxrICpwYmxrKQogCXZmcmVlKHBibGst
PnRyYW5zX21hcCk7CiB9CiAKLXN0YXRpYyBpbnQgcGJsa19sMnBfaW5pdChzdHJ1Y3QgcGJsayAq
cGJsaykKK3N0YXRpYyBpbnQgcGJsa19sMnBfcmVjb3ZlcihzdHJ1Y3QgcGJsayAqcGJsaywgYm9v
bCBmYWN0b3J5X2luaXQpCit7CisJc3RydWN0IHBibGtfbGluZSAqbGluZSA9IE5VTEw7CisKKwlp
ZiAoZmFjdG9yeV9pbml0KSB7CisJCXBibGtfc2V0dXBfdXVpZChwYmxrKTsKKwl9IGVsc2Ugewor
CQlsaW5lID0gcGJsa19yZWNvdl9sMnAocGJsayk7CisJCWlmIChJU19FUlIobGluZSkpIHsKKwkJ
CXByX2VycigicGJsazogY291bGQgbm90IHJlY292ZXIgbDJwIHRhYmxlXG4iKTsKKwkJCXJldHVy
biAtRUZBVUxUOworCQl9CisJfQorCisjaWZkZWYgQ09ORklHX05WTV9ERUJVRworCXByX2luZm8o
InBibGsgaW5pdDogTDJQIENSQzogJXhcbiIsIHBibGtfbDJwX2NyYyhwYmxrKSk7CisjZW5kaWYK
KworCS8qIEZyZWUgZnVsbCBsaW5lcyBkaXJlY3RseSBhcyBHQyBoYXMgbm90IGJlZW4gc3RhcnRl
ZCB5ZXQgKi8KKwlwYmxrX2djX2ZyZWVfZnVsbF9saW5lcyhwYmxrKTsKKworCWlmICghbGluZSkg
eworCQkvKiBDb25maWd1cmUgbmV4dCBsaW5lIGZvciB1c2VyIGRhdGEgKi8KKwkJbGluZSA9IHBi
bGtfbGluZV9nZXRfZmlyc3RfZGF0YShwYmxrKTsKKwkJaWYgKCFsaW5lKSB7CisJCQlwcl9lcnIo
InBibGs6IGxpbmUgbGlzdCBjb3JydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0K
Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYmxrX2wycF9pbml0KHN0cnVjdCBw
YmxrICpwYmxrLCBib29sIGZhY3RvcnlfaW5pdCkKIHsKIAlzZWN0b3JfdCBpOwogCXN0cnVjdCBw
cGFfYWRkciBwcGE7CkBAIC0xMTksNyArMTUyLDcgQEAgc3RhdGljIGludCBwYmxrX2wycF9pbml0
KHN0cnVjdCBwYmxrICpwYmxrKQogCWZvciAoaSA9IDA7IGkgPCBwYmxrLT5ybC5ucl9zZWNzOyBp
KyspCiAJCXBibGtfdHJhbnNfbWFwX3NldChwYmxrLCBpLCBwcGEpOwogCi0JcmV0dXJuIDA7CisJ
cmV0dXJuIHBibGtfbDJwX3JlY292ZXIocGJsaywgZmFjdG9yeV9pbml0KTsKIH0KIAogc3RhdGlj
IHZvaWQgcGJsa19yd2JfZnJlZShzdHJ1Y3QgcGJsayAqcGJsaykKQEAgLTI2OCw4NiArMzAxLDEx
MyBAQCBzdGF0aWMgaW50IHBibGtfY29yZV9pbml0KHN0cnVjdCBwYmxrICpwYmxrKQogewogCXN0
cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2OwogCXN0cnVjdCBudm1fZ2VvICpnZW8g
PSAmZGV2LT5nZW87CisJaW50IG1heF93cml0ZV9wcGFzOworCisJYXRvbWljNjRfc2V0KCZwYmxr
LT51c2VyX3dhLCAwKTsKKwlhdG9taWM2NF9zZXQoJnBibGstPnBhZF93YSwgMCk7CisJYXRvbWlj
NjRfc2V0KCZwYmxrLT5nY193YSwgMCk7CisJcGJsay0+dXNlcl9yc3Rfd2EgPSAwOworCXBibGst
PnBhZF9yc3Rfd2EgPSAwOworCXBibGstPmdjX3JzdF93YSA9IDA7CisKKwlhdG9taWNfbG9uZ19z
ZXQoJnBibGstPm5yX2ZsdXNoLCAwKTsKKwlwYmxrLT5ucl9mbHVzaF9yc3QgPSAwOwogCiAJcGJs
ay0+cGdzX2luX2J1ZmZlciA9IGdlby0+bXdfY3VuaXRzICogZ2VvLT5hbGxfbHVuczsKIAorCXBi
bGstPm1pbl93cml0ZV9wZ3MgPSBnZW8tPndzX29wdCAqIChnZW8tPmNzZWNzIC8gUEFHRV9TSVpF
KTsKKwltYXhfd3JpdGVfcHBhcyA9IHBibGstPm1pbl93cml0ZV9wZ3MgKiBnZW8tPmFsbF9sdW5z
OworCXBibGstPm1heF93cml0ZV9wZ3MgPSAobWF4X3dyaXRlX3BwYXMgPCBOVk1fTUFYX1ZMQkEp
ID8KKwkJCQltYXhfd3JpdGVfcHBhcyA6IE5WTV9NQVhfVkxCQTsKKwlwYmxrX3NldF9zZWNfcGVy
X3dyaXRlKHBibGssIHBibGstPm1pbl93cml0ZV9wZ3MpOworCisJaWYgKHBibGstPm1heF93cml0
ZV9wZ3MgPiBQQkxLX01BWF9SRVFfQUREUlMpIHsKKwkJcHJfZXJyKCJwYmxrOiBjYW5ub3Qgc3Vw
cG9ydCBkZXZpY2UgbWF4X3BoeXNfc2VjdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor
CXBibGstPnBhZF9kaXN0ID0ga3phbGxvYygocGJsay0+bWluX3dyaXRlX3BncyAtIDEpICogc2l6
ZW9mKGF0b21pYzY0X3QpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXBibGstPnBhZF9k
aXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWlmIChwYmxrX2luaXRfZ2xvYmFsX2NhY2hlcyhw
YmxrKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZmFpbF9mcmVlX3BhZF9kaXN0OwogCiAJ
LyogSW50ZXJuYWwgYmlvcyBjYW4gYmUgYXQgbW9zdCB0aGUgc2VjdG9ycyBzaWduYWxlZCBieSB0
aGUgZGV2aWNlLiAqLwogCXBibGstPnBhZ2VfYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9wYWdl
X3Bvb2woTlZNX01BWF9WTEJBLCAwKTsKIAlpZiAoIXBibGstPnBhZ2VfYmlvX3Bvb2wpCi0JCWdv
dG8gZnJlZV9nbG9iYWxfY2FjaGVzOworCQlnb3RvIGZhaWxfZnJlZV9nbG9iYWxfY2FjaGVzOwog
CiAJcGJsay0+Z2VuX3dzX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woUEJMS19HRU5f
V1NfUE9PTF9TSVpFLAogCQkJCQkJCXBibGtfd3NfY2FjaGUpOwogCWlmICghcGJsay0+Z2VuX3dz
X3Bvb2wpCi0JCWdvdG8gZnJlZV9wYWdlX2Jpb19wb29sOworCQlnb3RvIGZhaWxfZnJlZV9wYWdl
X2Jpb19wb29sOwogCiAJcGJsay0+cmVjX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2wo
Z2VvLT5hbGxfbHVucywKIAkJCQkJCQlwYmxrX3JlY19jYWNoZSk7CiAJaWYgKCFwYmxrLT5yZWNf
cG9vbCkKLQkJZ290byBmcmVlX2dlbl93c19wb29sOworCQlnb3RvIGZhaWxfZnJlZV9nZW5fd3Nf
cG9vbDsKIAogCXBibGstPnJfcnFfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChnZW8t
PmFsbF9sdW5zLAogCQkJCQkJCXBibGtfZ19ycV9jYWNoZSk7CiAJaWYgKCFwYmxrLT5yX3JxX3Bv
b2wpCi0JCWdvdG8gZnJlZV9yZWNfcG9vbDsKKwkJZ290byBmYWlsX2ZyZWVfcmVjX3Bvb2w7CiAK
IAlwYmxrLT5lX3JxX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woZ2VvLT5hbGxfbHVu
cywKIAkJCQkJCQlwYmxrX2dfcnFfY2FjaGUpOwogCWlmICghcGJsay0+ZV9ycV9wb29sKQotCQln
b3RvIGZyZWVfcl9ycV9wb29sOworCQlnb3RvIGZhaWxfZnJlZV9yX3JxX3Bvb2w7CiAKIAlwYmxr
LT53X3JxX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woZ2VvLT5hbGxfbHVucywKIAkJ
CQkJCQlwYmxrX3dfcnFfY2FjaGUpOwogCWlmICghcGJsay0+d19ycV9wb29sKQotCQlnb3RvIGZy
ZWVfZV9ycV9wb29sOworCQlnb3RvIGZhaWxfZnJlZV9lX3JxX3Bvb2w7CiAKIAlwYmxrLT5jbG9z
ZV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgicGJsay1jbG9zZS13cSIsCiAJCQlXUV9NRU1fUkVDTEFJ
TSB8IFdRX1VOQk9VTkQsIFBCTEtfTlJfQ0xPU0VfSk9CUyk7CiAJaWYgKCFwYmxrLT5jbG9zZV93
cSkKLQkJZ290byBmcmVlX3dfcnFfcG9vbDsKKwkJZ290byBmYWlsX2ZyZWVfd19ycV9wb29sOwog
CiAJcGJsay0+YmJfd3EgPSBhbGxvY193b3JrcXVldWUoInBibGstYmItd3EiLAogCQkJV1FfTUVN
X1JFQ0xBSU0gfCBXUV9VTkJPVU5ELCAwKTsKIAlpZiAoIXBibGstPmJiX3dxKQotCQlnb3RvIGZy
ZWVfY2xvc2Vfd3E7CisJCWdvdG8gZmFpbF9mcmVlX2Nsb3NlX3dxOwogCiAJcGJsay0+cl9lbmRf
d3EgPSBhbGxvY193b3JrcXVldWUoInBibGstcmVhZC1lbmQtd3EiLAogCQkJV1FfTUVNX1JFQ0xB
SU0gfCBXUV9VTkJPVU5ELCAwKTsKIAlpZiAoIXBibGstPnJfZW5kX3dxKQotCQlnb3RvIGZyZWVf
YmJfd3E7CisJCWdvdG8gZmFpbF9mcmVlX2JiX3dxOwogCiAJaWYgKHBibGtfc2V0X2FkZHJmKHBi
bGspKQotCQlnb3RvIGZyZWVfcl9lbmRfd3E7Ci0KLQlpZiAocGJsa19yd2JfaW5pdChwYmxrKSkK
LQkJZ290byBmcmVlX3JfZW5kX3dxOworCQlnb3RvIGZhaWxfZnJlZV9yX2VuZF93cTsKIAogCUlO
SVRfTElTVF9IRUFEKCZwYmxrLT5jb21wbF9saXN0KTsKKwogCXJldHVybiAwOwogCi1mcmVlX3Jf
ZW5kX3dxOgorZmFpbF9mcmVlX3JfZW5kX3dxOgogCWRlc3Ryb3lfd29ya3F1ZXVlKHBibGstPnJf
ZW5kX3dxKTsKLWZyZWVfYmJfd3E6CitmYWlsX2ZyZWVfYmJfd3E6CiAJZGVzdHJveV93b3JrcXVl
dWUocGJsay0+YmJfd3EpOwotZnJlZV9jbG9zZV93cToKK2ZhaWxfZnJlZV9jbG9zZV93cToKIAlk
ZXN0cm95X3dvcmtxdWV1ZShwYmxrLT5jbG9zZV93cSk7Ci1mcmVlX3dfcnFfcG9vbDoKK2ZhaWxf
ZnJlZV93X3JxX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KHBibGstPndfcnFfcG9vbCk7Ci1mcmVl
X2VfcnFfcG9vbDoKK2ZhaWxfZnJlZV9lX3JxX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KHBibGst
PmVfcnFfcG9vbCk7Ci1mcmVlX3JfcnFfcG9vbDoKK2ZhaWxfZnJlZV9yX3JxX3Bvb2w6CiAJbWVt
cG9vbF9kZXN0cm95KHBibGstPnJfcnFfcG9vbCk7Ci1mcmVlX3JlY19wb29sOgorZmFpbF9mcmVl
X3JlY19wb29sOgogCW1lbXBvb2xfZGVzdHJveShwYmxrLT5yZWNfcG9vbCk7Ci1mcmVlX2dlbl93
c19wb29sOgorZmFpbF9mcmVlX2dlbl93c19wb29sOgogCW1lbXBvb2xfZGVzdHJveShwYmxrLT5n
ZW5fd3NfcG9vbCk7Ci1mcmVlX3BhZ2VfYmlvX3Bvb2w6CitmYWlsX2ZyZWVfcGFnZV9iaW9fcG9v
bDoKIAltZW1wb29sX2Rlc3Ryb3kocGJsay0+cGFnZV9iaW9fcG9vbCk7Ci1mcmVlX2dsb2JhbF9j
YWNoZXM6CitmYWlsX2ZyZWVfZ2xvYmFsX2NhY2hlczoKIAlwYmxrX2ZyZWVfZ2xvYmFsX2NhY2hl
cyhwYmxrKTsKK2ZhaWxfZnJlZV9wYWRfZGlzdDoKKwlrZnJlZShwYmxrLT5wYWRfZGlzdCk7CiAJ
cmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTM2OSwxNCArNDI5LDggQEAgc3RhdGljIHZvaWQgcGJs
a19jb3JlX2ZyZWUoc3RydWN0IHBibGsgKnBibGspCiAJbWVtcG9vbF9kZXN0cm95KHBibGstPmVf
cnFfcG9vbCk7CiAJbWVtcG9vbF9kZXN0cm95KHBibGstPndfcnFfcG9vbCk7CiAKLQlwYmxrX3J3
Yl9mcmVlKHBibGspOwotCiAJcGJsa19mcmVlX2dsb2JhbF9jYWNoZXMocGJsayk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHBibGtfbHVuc19mcmVlKHN0cnVjdCBwYmxrICpwYmxrKQotewotCWtmcmVlKHBi
bGstPmx1bnMpOworCWtmcmVlKHBibGstPnBhZF9kaXN0KTsKIH0KIAogc3RhdGljIHZvaWQgcGJs
a19saW5lX21nX2ZyZWUoc3RydWN0IHBibGsgKnBibGspCkBAIC0zOTMsOCArNDQ3LDYgQEAgc3Rh
dGljIHZvaWQgcGJsa19saW5lX21nX2ZyZWUoc3RydWN0IHBibGsgKnBibGspCiAJCXBibGtfbWZy
ZWUobF9tZy0+ZWxpbmVfbWV0YVtpXS0+YnVmLCBsX21nLT5lbWV0YV9hbGxvY190eXBlKTsKIAkJ
a2ZyZWUobF9tZy0+ZWxpbmVfbWV0YVtpXSk7CiAJfQotCi0Ja2ZyZWUocGJsay0+bGluZXMpOwog
fQogCiBzdGF0aWMgdm9pZCBwYmxrX2xpbmVfbWV0YV9mcmVlKHN0cnVjdCBwYmxrX2xpbmUgKmxp
bmUpCkBAIC00MTgsNiArNDcwLDExIEBAIHN0YXRpYyB2b2lkIHBibGtfbGluZXNfZnJlZShzdHJ1
Y3QgcGJsayAqcGJsaykKIAkJcGJsa19saW5lX21ldGFfZnJlZShsaW5lKTsKIAl9CiAJc3Bpbl91
bmxvY2soJmxfbWctPmZyZWVfbG9jayk7CisKKwlwYmxrX2xpbmVfbWdfZnJlZShwYmxrKTsKKwor
CWtmcmVlKHBibGstPmx1bnMpOworCWtmcmVlKHBibGstPmxpbmVzKTsKIH0KIAogc3RhdGljIGlu
dCBwYmxrX2JiX2dldF90Ymwoc3RydWN0IG52bV90Z3RfZGV2ICpkZXYsIHN0cnVjdCBwYmxrX2x1
biAqcmx1biwKQEAgLTQ4MSw3ICs1MzgsNyBAQCBzdGF0aWMgdm9pZCAqcGJsa19jaHVua19nZXRf
bWV0YShzdHJ1Y3QgcGJsayAqcGJsaykKIAkJcmV0dXJuIHBibGtfY2h1bmtfZ2V0X2luZm8ocGJs
ayk7CiB9CiAKLXN0YXRpYyBpbnQgcGJsa19sdW5zX2luaXQoc3RydWN0IHBibGsgKnBibGssIHN0
cnVjdCBwcGFfYWRkciAqbHVucykKK3N0YXRpYyBpbnQgcGJsa19sdW5zX2luaXQoc3RydWN0IHBi
bGsgKnBibGspCiB7CiAJc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7CiAJc3Ry
dWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKQEAgLTQ5NCwxMSArNTUxLDYgQEAgc3RhdGlj
IGludCBwYmxrX2x1bnNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyICps
dW5zKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwYmxrLT5sdW5zID0ga2NhbGxvYyhnZW8t
PmFsbF9sdW5zLCBzaXplb2Yoc3RydWN0IHBibGtfbHVuKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7
Ci0JaWYgKCFwYmxrLT5sdW5zKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWZvciAoaSA9IDA7IGkg
PCBnZW8tPmFsbF9sdW5zOyBpKyspIHsKIAkJLyogU3RyaXBlIGFjcm9zcyBjaGFubmVscyAqLwog
CQlpbnQgY2ggPSBpICUgZ2VvLT5udW1fY2g7CkBAIC01MDYsNyArNTU4LDcgQEAgc3RhdGljIGlu
dCBwYmxrX2x1bnNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyICpsdW5z
KQogCQlpbnQgbHVuaWQgPSBsdW5fcmF3ICsgY2ggKiBnZW8tPm51bV9sdW47CiAKIAkJcmx1biA9
ICZwYmxrLT5sdW5zW2ldOwotCQlybHVuLT5icHBhID0gbHVuc1tsdW5pZF07CisJCXJsdW4tPmJw
cGEgPSBkZXYtPmx1bnNbbHVuaWRdOwogCiAJCXNlbWFfaW5pdCgmcmx1bi0+d3Jfc2VtLCAxKTsK
IAl9CkBAIC01MTQsMzggKzU2Niw2IEBAIHN0YXRpYyBpbnQgcGJsa19sdW5zX2luaXQoc3RydWN0
IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRkciAqbHVucykKIAlyZXR1cm4gMDsKIH0KIAotc3Rh
dGljIGludCBwYmxrX2xpbmVzX2NvbmZpZ3VyZShzdHJ1Y3QgcGJsayAqcGJsaywgaW50IGZsYWdz
KQotewotCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUgPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0J
aWYgKCEoZmxhZ3MgJiBOVk1fVEFSR0VUX0ZBQ1RPUlkpKSB7Ci0JCWxpbmUgPSBwYmxrX3JlY292
X2wycChwYmxrKTsKLQkJaWYgKElTX0VSUihsaW5lKSkgewotCQkJcHJfZXJyKCJwYmxrOiBjb3Vs
ZCBub3QgcmVjb3ZlciBsMnAgdGFibGVcbiIpOwotCQkJcmV0ID0gLUVGQVVMVDsKLQkJfQotCX0K
LQotI2lmZGVmIENPTkZJR19OVk1fREVCVUcKLQlwcl9pbmZvKCJwYmxrIGluaXQ6IEwyUCBDUkM6
ICV4XG4iLCBwYmxrX2wycF9jcmMocGJsaykpOwotI2VuZGlmCi0KLQkvKiBGcmVlIGZ1bGwgbGlu
ZXMgZGlyZWN0bHkgYXMgR0MgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgeWV0ICovCi0JcGJsa19nY19m
cmVlX2Z1bGxfbGluZXMocGJsayk7Ci0KLQlpZiAoIWxpbmUpIHsKLQkJLyogQ29uZmlndXJlIG5l
eHQgbGluZSBmb3IgdXNlciBkYXRhICovCi0JCWxpbmUgPSBwYmxrX2xpbmVfZ2V0X2ZpcnN0X2Rh
dGEocGJsayk7Ci0JCWlmICghbGluZSkgewotCQkJcHJfZXJyKCJwYmxrOiBsaW5lIGxpc3QgY29y
cnVwdGVkXG4iKTsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0Owot
fQotCiAvKiBTZWUgY29tbWVudCBvdmVyIHN0cnVjdCBsaW5lX2VtZXRhIGRlZmluaXRpb24gKi8K
IHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19lbWV0YV9sZW4oc3RydWN0IHBibGsgKnBibGspCiB7
CkBAIC02MTEsODEgKzYzMSw2IEBAIHN0YXRpYyB2b2lkIHBibGtfc2V0X3Byb3Zpc2lvbihzdHJ1
Y3QgcGJsayAqcGJsaywgbG9uZyBucl9mcmVlX2Jsa3MpCiAJYXRvbWljX3NldCgmcGJsay0+cmwu
ZnJlZV91c2VyX2Jsb2NrcywgbnJfZnJlZV9ibGtzKTsKIH0KIAotc3RhdGljIGludCBwYmxrX2xp
bmVzX2FsbG9jX21ldGFkYXRhKHN0cnVjdCBwYmxrICpwYmxrKQotewotCXN0cnVjdCBwYmxrX2xp
bmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwotCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0g
PSAmcGJsay0+bG07Ci0JaW50IGk7Ci0KLQkvKiBzbWV0YSBpcyBhbHdheXMgc21hbGwgZW5vdWdo
IHRvIGZpdCBvbiBhIGttYWxsb2MgbWVtb3J5IGFsbG9jYXRpb24sCi0JICogZW1ldGEgZGVwZW5k
cyBvbiB0aGUgbnVtYmVyIG9mIExVTnMgYWxsb2NhdGVkIHRvIHRoZSBwYmxrIGluc3RhbmNlCi0J
ICovCi0JZm9yIChpID0gMDsgaSA8IFBCTEtfREFUQV9MSU5FUzsgaSsrKSB7Ci0JCWxfbWctPnNs
aW5lX21ldGFbaV0gPSBrbWFsbG9jKGxtLT5zbWV0YV9sZW4sIEdGUF9LRVJORUwpOwotCQlpZiAo
IWxfbWctPnNsaW5lX21ldGFbaV0pCi0JCQlnb3RvIGZhaWxfZnJlZV9zbWV0YTsKLQl9Ci0KLQkv
KiBlbWV0YSBhbGxvY2F0ZXMgdGhyZWUgZGlmZmVyZW50IGJ1ZmZlcnMgZm9yIG1hbmFnaW5nIG1l
dGFkYXRhIHdpdGgKLQkgKiBpbi1tZW1vcnkgYW5kIGluLW1lZGlhIGxheW91dHMKLQkgKi8KLQlm
b3IgKGkgPSAwOyBpIDwgUEJMS19EQVRBX0xJTkVTOyBpKyspIHsKLQkJc3RydWN0IHBibGtfZW1l
dGEgKmVtZXRhOwotCi0JCWVtZXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBibGtfZW1ldGEp
LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFlbWV0YSkKLQkJCWdvdG8gZmFpbF9mcmVlX2VtZXRhOwot
Ci0JCWlmIChsbS0+ZW1ldGFfbGVuWzBdID4gS01BTExPQ19NQVhfQ0FDSEVfU0laRSkgewotCQkJ
bF9tZy0+ZW1ldGFfYWxsb2NfdHlwZSA9IFBCTEtfVk1BTExPQ19NRVRBOwotCi0JCQllbWV0YS0+
YnVmID0gdm1hbGxvYyhsbS0+ZW1ldGFfbGVuWzBdKTsKLQkJCWlmICghZW1ldGEtPmJ1Zikgewot
CQkJCWtmcmVlKGVtZXRhKTsKLQkJCQlnb3RvIGZhaWxfZnJlZV9lbWV0YTsKLQkJCX0KLQotCQkJ
ZW1ldGEtPm5yX2VudHJpZXMgPSBsbS0+ZW1ldGFfc2VjWzBdOwotCQkJbF9tZy0+ZWxpbmVfbWV0
YVtpXSA9IGVtZXRhOwotCQl9IGVsc2UgewotCQkJbF9tZy0+ZW1ldGFfYWxsb2NfdHlwZSA9IFBC
TEtfS01BTExPQ19NRVRBOwotCi0JCQllbWV0YS0+YnVmID0ga21hbGxvYyhsbS0+ZW1ldGFfbGVu
WzBdLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghZW1ldGEtPmJ1ZikgewotCQkJCWtmcmVlKGVtZXRh
KTsKLQkJCQlnb3RvIGZhaWxfZnJlZV9lbWV0YTsKLQkJCX0KLQotCQkJZW1ldGEtPm5yX2VudHJp
ZXMgPSBsbS0+ZW1ldGFfc2VjWzBdOwotCQkJbF9tZy0+ZWxpbmVfbWV0YVtpXSA9IGVtZXRhOwot
CQl9Ci0JfQotCi0JbF9tZy0+dnNjX2xpc3QgPSBrY2FsbG9jKGxfbWctPm5yX2xpbmVzLCBzaXpl
b2YoX19sZTMyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsX21nLT52c2NfbGlzdCkKLQkJZ290byBm
YWlsX2ZyZWVfZW1ldGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbF9tZy0+bnJfbGluZXM7IGkrKykK
LQkJbF9tZy0+dnNjX2xpc3RbaV0gPSBjcHVfdG9fbGUzMihFTVBUWV9FTlRSWSk7Ci0KLQlyZXR1
cm4gMDsKLQotZmFpbF9mcmVlX2VtZXRhOgotCXdoaWxlICgtLWkgPj0gMCkgewotCQlpZiAobF9t
Zy0+ZW1ldGFfYWxsb2NfdHlwZSA9PSBQQkxLX1ZNQUxMT0NfTUVUQSkKLQkJCXZmcmVlKGxfbWct
PmVsaW5lX21ldGFbaV0tPmJ1Zik7Ci0JCWVsc2UKLQkJCWtmcmVlKGxfbWctPmVsaW5lX21ldGFb
aV0tPmJ1Zik7Ci0JCWtmcmVlKGxfbWctPmVsaW5lX21ldGFbaV0pOwotCX0KLQotZmFpbF9mcmVl
X3NtZXRhOgotCWZvciAoaSA9IDA7IGkgPCBQQkxLX0RBVEFfTElORVM7IGkrKykKLQkJa2ZyZWUo
bF9tZy0+c2xpbmVfbWV0YVtpXSk7Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQogc3RhdGljIGlu
dCBwYmxrX3NldHVwX2xpbmVfbWV0YV8xMihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtf
bGluZSAqbGluZSwKIAkJCQkgICB2b2lkICpjaHVua19tZXRhKQogewpAQCAtODM1LDI5ICs3ODAs
MTMgQEAgc3RhdGljIGludCBwYmxrX2FsbG9jX2xpbmVfbWV0YShzdHJ1Y3QgcGJsayAqcGJsaywg
c3RydWN0IHBibGtfbGluZSAqbGluZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYmxr
X2xpbmVzX2luaXQoc3RydWN0IHBibGsgKnBibGspCitzdGF0aWMgaW50IHBibGtfbGluZV9tZ19p
bml0KHN0cnVjdCBwYmxrICpwYmxrKQogewogCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJs
ay0+ZGV2OwogCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87CiAJc3RydWN0IHBibGtf
bGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7CiAJc3RydWN0IHBibGtfbGluZV9tZXRhICps
bSA9ICZwYmxrLT5sbTsKLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwotCXZvaWQgKmNodW5rX21l
dGE7Ci0JdW5zaWduZWQgaW50IHNtZXRhX2xlbiwgZW1ldGFfbGVuOwotCWxvbmcgbnJfZnJlZV9j
aGtzID0gMDsKLQlpbnQgYmJfZGlzdGFuY2UsIG1heF93cml0ZV9wcGFzOwotCWludCBpLCByZXQ7
Ci0KLQlwYmxrLT5taW5fd3JpdGVfcGdzID0gZ2VvLT53c19vcHQgKiAoZ2VvLT5jc2VjcyAvIFBB
R0VfU0laRSk7Ci0JbWF4X3dyaXRlX3BwYXMgPSBwYmxrLT5taW5fd3JpdGVfcGdzICogZ2VvLT5h
bGxfbHVuczsKLQlwYmxrLT5tYXhfd3JpdGVfcGdzID0gbWluX3QoaW50LCBtYXhfd3JpdGVfcHBh
cywgTlZNX01BWF9WTEJBKTsKLQlwYmxrX3NldF9zZWNfcGVyX3dyaXRlKHBibGssIHBibGstPm1p
bl93cml0ZV9wZ3MpOwotCi0JaWYgKHBibGstPm1heF93cml0ZV9wZ3MgPiBQQkxLX01BWF9SRVFf
QUREUlMpIHsKLQkJcHJfZXJyKCJwYmxrOiB2ZWN0b3IgbGlzdCB0b28gYmlnKCV1ID4gJXUpXG4i
LAotCQkJCXBibGstPm1heF93cml0ZV9wZ3MsIFBCTEtfTUFYX1JFUV9BRERSUyk7Ci0JCXJldHVy
biAtRUlOVkFMOwotCX0KKwlpbnQgaSwgYmJfZGlzdGFuY2U7CiAKIAlsX21nLT5ucl9saW5lcyA9
IGdlby0+bnVtX2NoazsKIAlsX21nLT5sb2dfbGluZSA9IGxfbWctPmRhdGFfbGluZSA9IE5VTEw7
CkBAIC04NjUsNiArNzk0LDExOSBAQCBzdGF0aWMgaW50IHBibGtfbGluZXNfaW5pdChzdHJ1Y3Qg
cGJsayAqcGJsaykKIAlsX21nLT5ucl9mcmVlX2xpbmVzID0gMDsKIAliaXRtYXBfemVybygmbF9t
Zy0+bWV0YV9iaXRtYXAsIFBCTEtfREFUQV9MSU5FUyk7CiAKKwlJTklUX0xJU1RfSEVBRCgmbF9t
Zy0+ZnJlZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbF9tZy0+Y29ycnVwdF9saXN0KTsKKwlJ
TklUX0xJU1RfSEVBRCgmbF9tZy0+YmFkX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsX21nLT5n
Y19mdWxsX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsX21nLT5nY19oaWdoX2xpc3QpOworCUlO
SVRfTElTVF9IRUFEKCZsX21nLT5nY19taWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmxfbWct
PmdjX2xvd19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbF9tZy0+Z2NfZW1wdHlfbGlzdCk7CisK
KwlJTklUX0xJU1RfSEVBRCgmbF9tZy0+ZW1ldGFfbGlzdCk7CisKKwlsX21nLT5nY19saXN0c1sw
XSA9ICZsX21nLT5nY19oaWdoX2xpc3Q7CisJbF9tZy0+Z2NfbGlzdHNbMV0gPSAmbF9tZy0+Z2Nf
bWlkX2xpc3Q7CisJbF9tZy0+Z2NfbGlzdHNbMl0gPSAmbF9tZy0+Z2NfbG93X2xpc3Q7CisKKwlz
cGluX2xvY2tfaW5pdCgmbF9tZy0+ZnJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbF9tZy0+
Y2xvc2VfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmxfbWctPmdjX2xvY2spOworCisJbF9tZy0+
dnNjX2xpc3QgPSBrY2FsbG9jKGxfbWctPm5yX2xpbmVzLCBzaXplb2YoX19sZTMyKSwgR0ZQX0tF
Uk5FTCk7CisJaWYgKCFsX21nLT52c2NfbGlzdCkKKwkJZ290byBmYWlsOworCisJbF9tZy0+YmJf
dGVtcGxhdGUgPSBremFsbG9jKGxtLT5zZWNfYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYg
KCFsX21nLT5iYl90ZW1wbGF0ZSkKKwkJZ290byBmYWlsX2ZyZWVfdnNjX2xpc3Q7CisKKwlsX21n
LT5iYl9hdXggPSBremFsbG9jKGxtLT5zZWNfYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYg
KCFsX21nLT5iYl9hdXgpCisJCWdvdG8gZmFpbF9mcmVlX2JiX3RlbXBsYXRlOworCisJLyogc21l
dGEgaXMgYWx3YXlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBrbWFsbG9jIG1lbW9yeSBhbGxv
Y2F0aW9uLAorCSAqIGVtZXRhIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBMVU5zIGFsbG9jYXRl
ZCB0byB0aGUgcGJsayBpbnN0YW5jZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBQQkxLX0RBVEFf
TElORVM7IGkrKykgeworCQlsX21nLT5zbGluZV9tZXRhW2ldID0ga21hbGxvYyhsbS0+c21ldGFf
bGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFsX21nLT5zbGluZV9tZXRhW2ldKQorCQkJZ290byBm
YWlsX2ZyZWVfc21ldGE7CisJfQorCisJLyogZW1ldGEgYWxsb2NhdGVzIHRocmVlIGRpZmZlcmVu
dCBidWZmZXJzIGZvciBtYW5hZ2luZyBtZXRhZGF0YSB3aXRoCisJICogaW4tbWVtb3J5IGFuZCBp
bi1tZWRpYSBsYXlvdXRzCisJICovCisJZm9yIChpID0gMDsgaSA8IFBCTEtfREFUQV9MSU5FUzsg
aSsrKSB7CisJCXN0cnVjdCBwYmxrX2VtZXRhICplbWV0YTsKKworCQllbWV0YSA9IGttYWxsb2Mo
c2l6ZW9mKHN0cnVjdCBwYmxrX2VtZXRhKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZW1ldGEpCisJ
CQlnb3RvIGZhaWxfZnJlZV9lbWV0YTsKKworCQlpZiAobG0tPmVtZXRhX2xlblswXSA+IEtNQUxM
T0NfTUFYX0NBQ0hFX1NJWkUpIHsKKwkJCWxfbWctPmVtZXRhX2FsbG9jX3R5cGUgPSBQQkxLX1ZN
QUxMT0NfTUVUQTsKKworCQkJZW1ldGEtPmJ1ZiA9IHZtYWxsb2MobG0tPmVtZXRhX2xlblswXSk7
CisJCQlpZiAoIWVtZXRhLT5idWYpIHsKKwkJCQlrZnJlZShlbWV0YSk7CisJCQkJZ290byBmYWls
X2ZyZWVfZW1ldGE7CisJCQl9CisKKwkJCWVtZXRhLT5ucl9lbnRyaWVzID0gbG0tPmVtZXRhX3Nl
Y1swXTsKKwkJCWxfbWctPmVsaW5lX21ldGFbaV0gPSBlbWV0YTsKKwkJfSBlbHNlIHsKKwkJCWxf
bWctPmVtZXRhX2FsbG9jX3R5cGUgPSBQQkxLX0tNQUxMT0NfTUVUQTsKKworCQkJZW1ldGEtPmJ1
ZiA9IGttYWxsb2MobG0tPmVtZXRhX2xlblswXSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWVtZXRh
LT5idWYpIHsKKwkJCQlrZnJlZShlbWV0YSk7CisJCQkJZ290byBmYWlsX2ZyZWVfZW1ldGE7CisJ
CQl9CisKKwkJCWVtZXRhLT5ucl9lbnRyaWVzID0gbG0tPmVtZXRhX3NlY1swXTsKKwkJCWxfbWct
PmVsaW5lX21ldGFbaV0gPSBlbWV0YTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBsX21n
LT5ucl9saW5lczsgaSsrKQorCQlsX21nLT52c2NfbGlzdFtpXSA9IGNwdV90b19sZTMyKEVNUFRZ
X0VOVFJZKTsKKworCWJiX2Rpc3RhbmNlID0gKGdlby0+YWxsX2x1bnMpICogZ2VvLT53c19vcHQ7
CisJZm9yIChpID0gMDsgaSA8IGxtLT5zZWNfcGVyX2xpbmU7IGkgKz0gYmJfZGlzdGFuY2UpCisJ
CWJpdG1hcF9zZXQobF9tZy0+YmJfdGVtcGxhdGUsIGksIGdlby0+d3Nfb3B0KTsKKworCXJldHVy
biAwOworCitmYWlsX2ZyZWVfZW1ldGE6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCWlmIChsX21n
LT5lbWV0YV9hbGxvY190eXBlID09IFBCTEtfVk1BTExPQ19NRVRBKQorCQkJdmZyZWUobF9tZy0+
ZWxpbmVfbWV0YVtpXS0+YnVmKTsKKwkJZWxzZQorCQkJa2ZyZWUobF9tZy0+ZWxpbmVfbWV0YVtp
XS0+YnVmKTsKKwkJa2ZyZWUobF9tZy0+ZWxpbmVfbWV0YVtpXSk7CisJfQorZmFpbF9mcmVlX3Nt
ZXRhOgorCWtmcmVlKGxfbWctPmJiX2F1eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEJMS19EQVRB
X0xJTkVTOyBpKyspCisJCWtmcmVlKGxfbWctPnNsaW5lX21ldGFbaV0pOworZmFpbF9mcmVlX2Ji
X3RlbXBsYXRlOgorCWtmcmVlKGxfbWctPmJiX3RlbXBsYXRlKTsKK2ZhaWxfZnJlZV92c2NfbGlz
dDoKKwlrZnJlZShsX21nLT52c2NfbGlzdCk7CitmYWlsOgorCXJldHVybiAtRU5PTUVNOworfQor
CitzdGF0aWMgaW50IHBibGtfbGluZV9tZXRhX2luaXQoc3RydWN0IHBibGsgKnBibGspCit7CisJ
c3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7CisJc3RydWN0IG52bV9nZW8gKmdl
byA9ICZkZXYtPmdlbzsKKwlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwor
CXVuc2lnbmVkIGludCBzbWV0YV9sZW4sIGVtZXRhX2xlbjsKKwlpbnQgaTsKKwogCWxtLT5zZWNf
cGVyX2xpbmUgPSBnZW8tPmNsYmEgKiBnZW8tPmFsbF9sdW5zOwogCWxtLT5ibGtfcGVyX2xpbmUg
PSBnZW8tPmFsbF9sdW5zOwogCWxtLT5ibGtfYml0bWFwX2xlbiA9IEJJVFNfVE9fTE9OR1MoZ2Vv
LT5hbGxfbHVucykgKiBzaXplb2YobG9uZyk7CkBAIC05MTUsNTggKzk1Nyw0OSBAQCBzdGF0aWMg
aW50IHBibGtfbGluZXNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaykKIAkJcmV0dXJuIC1FSU5WQUw7
CiAJfQogCi0JcmV0ID0gcGJsa19saW5lc19hbGxvY19tZXRhZGF0YShwYmxrKTsKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBwYmxrX2xpbmVzX2luaXQoc3RydWN0IHBibGsgKnBibGspCit7
CisJc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7CisJc3RydWN0IG52bV9nZW8g
KmdlbyA9ICZkZXYtPmdlbzsKKwlzdHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+
bF9tZzsKKwlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOworCXZvaWQgKmNodW5rX21ldGE7CisJbG9u
ZyBucl9mcmVlX2Noa3MgPSAwOworCWludCBpLCByZXQ7CisKKwlyZXQgPSBwYmxrX2xpbmVfbWV0
YV9pbml0KHBibGspOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsX21nLT5iYl90ZW1w
bGF0ZSA9IGt6YWxsb2MobG0tPnNlY19iaXRtYXBfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxf
bWctPmJiX3RlbXBsYXRlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9mcmVlX21l
dGE7Ci0JfQotCi0JbF9tZy0+YmJfYXV4ID0ga3phbGxvYyhsbS0+c2VjX2JpdG1hcF9sZW4sIEdG
UF9LRVJORUwpOwotCWlmICghbF9tZy0+YmJfYXV4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdv
dG8gZmFpbF9mcmVlX2JiX3RlbXBsYXRlOwotCX0KLQotCWJiX2Rpc3RhbmNlID0gKGdlby0+YWxs
X2x1bnMpICogZ2VvLT53c19vcHQ7Ci0JZm9yIChpID0gMDsgaSA8IGxtLT5zZWNfcGVyX2xpbmU7
IGkgKz0gYmJfZGlzdGFuY2UpCi0JCWJpdG1hcF9zZXQobF9tZy0+YmJfdGVtcGxhdGUsIGksIGdl
by0+d3Nfb3B0KTsKLQotCUlOSVRfTElTVF9IRUFEKCZsX21nLT5mcmVlX2xpc3QpOwotCUlOSVRf
TElTVF9IRUFEKCZsX21nLT5jb3JydXB0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZsX21nLT5i
YWRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxfbWctPmdjX2Z1bGxfbGlzdCk7Ci0JSU5JVF9M
SVNUX0hFQUQoJmxfbWctPmdjX2hpZ2hfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxfbWctPmdj
X21pZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbF9tZy0+Z2NfbG93X2xpc3QpOwotCUlOSVRf
TElTVF9IRUFEKCZsX21nLT5nY19lbXB0eV9saXN0KTsKLQotCUlOSVRfTElTVF9IRUFEKCZsX21n
LT5lbWV0YV9saXN0KTsKLQotCWxfbWctPmdjX2xpc3RzWzBdID0gJmxfbWctPmdjX2hpZ2hfbGlz
dDsKLQlsX21nLT5nY19saXN0c1sxXSA9ICZsX21nLT5nY19taWRfbGlzdDsKLQlsX21nLT5nY19s
aXN0c1syXSA9ICZsX21nLT5nY19sb3dfbGlzdDsKLQotCXNwaW5fbG9ja19pbml0KCZsX21nLT5m
cmVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZsX21nLT5jbG9zZV9sb2NrKTsKLQlzcGluX2xv
Y2tfaW5pdCgmbF9tZy0+Z2NfbG9jayk7CisJcmV0ID0gcGJsa19saW5lX21nX2luaXQocGJsayk7
CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCXBibGstPmxpbmVzID0ga2NhbGxvYyhsX21n
LT5ucl9saW5lcywgc2l6ZW9mKHN0cnVjdCBwYmxrX2xpbmUpLAorCXBibGstPmx1bnMgPSBrY2Fs
bG9jKGdlby0+YWxsX2x1bnMsIHNpemVvZihzdHJ1Y3QgcGJsa19sdW4pLAogCQkJCQkJCQlHRlBf
S0VSTkVMKTsKLQlpZiAoIXBibGstPmxpbmVzKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8g
ZmFpbF9mcmVlX2JiX2F1eDsKLQl9CisJaWYgKCFwYmxrLT5sdW5zKQorCQlyZXR1cm4gLUVOT01F
TTsKKworCXJldCA9IHBibGtfbHVuc19pbml0KHBibGspOworCWlmIChyZXQpCisJCWdvdG8gZmFp
bF9mcmVlX2x1bnM7CiAKIAljaHVua19tZXRhID0gcGJsa19jaHVua19nZXRfbWV0YShwYmxrKTsK
IAlpZiAoSVNfRVJSKGNodW5rX21ldGEpKSB7CiAJCXByX2VycigicGJsazogY291bGQgbm90IGdl
dCBjaHVuayBsb2cgKCVsdSlcbiIsCiAJCQkJCQkJUFRSX0VSUihjaHVua19tZXRhKSk7CiAJCXJl
dCA9IFBUUl9FUlIoY2h1bmtfbWV0YSk7Ci0JCWdvdG8gZmFpbF9mcmVlX2xpbmVzOworCQlnb3Rv
IGZhaWxfZnJlZV9tZXRhOworCX0KKworCXBibGstPmxpbmVzID0ga2NhbGxvYyhsX21nLT5ucl9s
aW5lcywgc2l6ZW9mKHN0cnVjdCBwYmxrX2xpbmUpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlp
ZiAoIXBibGstPmxpbmVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9mcmVlX2No
dW5rX21ldGE7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGxfbWctPm5yX2xpbmVzOyBpKyspIHsK
QEAgLTk3NCw3ICsxMDA3LDcgQEAgc3RhdGljIGludCBwYmxrX2xpbmVzX2luaXQoc3RydWN0IHBi
bGsgKnBibGspCiAKIAkJcmV0ID0gcGJsa19hbGxvY19saW5lX21ldGEocGJsaywgbGluZSk7CiAJ
CWlmIChyZXQpCi0JCQlnb3RvIGZhaWxfZnJlZV9jaHVua19tZXRhOworCQkJZ290byBmYWlsX2Zy
ZWVfbGluZXM7CiAKIAkJbnJfZnJlZV9jaGtzICs9IHBibGtfc2V0dXBfbGluZV9tZXRhKHBibGss
IGxpbmUsIGNodW5rX21ldGEsIGkpOwogCX0KQEAgLTk4NCwxOCArMTAxNywxNiBAQCBzdGF0aWMg
aW50IHBibGtfbGluZXNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaykKIAlrZnJlZShjaHVua19tZXRh
KTsKIAlyZXR1cm4gMDsKIAotZmFpbF9mcmVlX2NodW5rX21ldGE6Ci0Ja2ZyZWUoY2h1bmtfbWV0
YSk7CitmYWlsX2ZyZWVfbGluZXM6CiAJd2hpbGUgKC0taSA+PSAwKQogCQlwYmxrX2xpbmVfbWV0
YV9mcmVlKCZwYmxrLT5saW5lc1tpXSk7Ci1mYWlsX2ZyZWVfbGluZXM6CiAJa2ZyZWUocGJsay0+
bGluZXMpOwotZmFpbF9mcmVlX2JiX2F1eDoKLQlrZnJlZShsX21nLT5iYl9hdXgpOwotZmFpbF9m
cmVlX2JiX3RlbXBsYXRlOgotCWtmcmVlKGxfbWctPmJiX3RlbXBsYXRlKTsKK2ZhaWxfZnJlZV9j
aHVua19tZXRhOgorCWtmcmVlKGNodW5rX21ldGEpOwogZmFpbF9mcmVlX21ldGE6CiAJcGJsa19s
aW5lX21nX2ZyZWUocGJsayk7CitmYWlsX2ZyZWVfbHVuczoKKwlrZnJlZShwYmxrLT5sdW5zKTsK
IAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDM2LDEyICsxMDY3LDEwIEBAIHN0YXRpYyB2b2lkIHBi
bGtfd3JpdGVyX3N0b3Aoc3RydWN0IHBibGsgKnBibGspCiAKIHN0YXRpYyB2b2lkIHBibGtfZnJl
ZShzdHJ1Y3QgcGJsayAqcGJsaykKIHsKLQlwYmxrX2x1bnNfZnJlZShwYmxrKTsKIAlwYmxrX2xp
bmVzX2ZyZWUocGJsayk7Ci0Ja2ZyZWUocGJsay0+cGFkX2Rpc3QpOwotCXBibGtfbGluZV9tZ19m
cmVlKHBibGspOwotCXBibGtfY29yZV9mcmVlKHBibGspOwogCXBibGtfbDJwX2ZyZWUocGJsayk7
CisJcGJsa19yd2JfZnJlZShwYmxrKTsKKwlwYmxrX2NvcmVfZnJlZShwYmxrKTsKIAogCWtmcmVl
KHBibGspOwogfQpAQCAtMTExMiwxOSArMTE0MSw2IEBAIHN0YXRpYyB2b2lkICpwYmxrX2luaXQo
c3RydWN0IG52bV90Z3RfZGV2ICpkZXYsIHN0cnVjdCBnZW5kaXNrICp0ZGlzaywKIAlzcGluX2xv
Y2tfaW5pdCgmcGJsay0+dHJhbnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBibGstPmxvY2sp
OwogCi0JaWYgKGZsYWdzICYgTlZNX1RBUkdFVF9GQUNUT1JZKQotCQlwYmxrX3NldHVwX3V1aWQo
cGJsayk7Ci0KLQlhdG9taWM2NF9zZXQoJnBibGstPnVzZXJfd2EsIDApOwotCWF0b21pYzY0X3Nl
dCgmcGJsay0+cGFkX3dhLCAwKTsKLQlhdG9taWM2NF9zZXQoJnBibGstPmdjX3dhLCAwKTsKLQlw
YmxrLT51c2VyX3JzdF93YSA9IDA7Ci0JcGJsay0+cGFkX3JzdF93YSA9IDA7Ci0JcGJsay0+Z2Nf
cnN0X3dhID0gMDsKLQotCWF0b21pYzY0X3NldCgmcGJsay0+bnJfZmx1c2gsIDApOwotCXBibGst
Pm5yX2ZsdXNoX3JzdCA9IDA7Ci0KICNpZmRlZiBDT05GSUdfTlZNX0RFQlVHCiAJYXRvbWljX2xv
bmdfc2V0KCZwYmxrLT5pbmZsaWdodF93cml0ZXMsIDApOwogCWF0b21pY19sb25nX3NldCgmcGJs
ay0+cGFkZGVkX3dyaXRlcywgMCk7CkBAIC0xMTQ4LDQ4ICsxMTY0LDM1IEBAIHN0YXRpYyB2b2lk
ICpwYmxrX2luaXQoc3RydWN0IG52bV90Z3RfZGV2ICpkZXYsIHN0cnVjdCBnZW5kaXNrICp0ZGlz
aywKIAlhdG9taWNfbG9uZ19zZXQoJnBibGstPndyaXRlX2ZhaWxlZCwgMCk7CiAJYXRvbWljX2xv
bmdfc2V0KCZwYmxrLT5lcmFzZV9mYWlsZWQsIDApOwogCi0JcmV0ID0gcGJsa19sdW5zX2luaXQo
cGJsaywgZGV2LT5sdW5zKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigicGJsazogY291bGQgbm90
IGluaXRpYWxpemUgbHVuc1xuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyZXQgPSBwYmxrX2xp
bmVzX2luaXQocGJsayk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoInBibGs6IGNvdWxkIG5vdCBp
bml0aWFsaXplIGxpbmVzXG4iKTsKLQkJZ290byBmYWlsX2ZyZWVfbHVuczsKLQl9Ci0KLQlwYmxr
LT5wYWRfZGlzdCA9IGt6YWxsb2MoKHBibGstPm1pbl93cml0ZV9wZ3MgLSAxKSAqIHNpemVvZihh
dG9taWM2NF90KSwKLQkJCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYmxrLT5wYWRfZGlzdCkgewot
CQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfZnJlZV9saW5lX21ldGE7Ci0JfQotCiAJcmV0
ID0gcGJsa19jb3JlX2luaXQocGJsayk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInBibGs6IGNv
dWxkIG5vdCBpbml0aWFsaXplIGNvcmVcbiIpOwotCQlnb3RvIGZhaWxfZnJlZV9wYWRfZGlzdDsK
KwkJZ290byBmYWlsOwogCX0KIAotCXJldCA9IHBibGtfbDJwX2luaXQocGJsayk7CisJcmV0ID0g
cGJsa19saW5lc19pbml0KHBibGspOwogCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJwYmxrOiBjb3Vs
ZCBub3QgaW5pdGlhbGl6ZSBtYXBzXG4iKTsKKwkJcHJfZXJyKCJwYmxrOiBjb3VsZCBub3QgaW5p
dGlhbGl6ZSBsaW5lc1xuIik7CiAJCWdvdG8gZmFpbF9mcmVlX2NvcmU7CiAJfQogCi0JcmV0ID0g
cGJsa19saW5lc19jb25maWd1cmUocGJsaywgZmxhZ3MpOworCXJldCA9IHBibGtfcndiX2luaXQo
cGJsayk7CiAJaWYgKHJldCkgewotCQlwcl9lcnIoInBibGs6IGNvdWxkIG5vdCBjb25maWd1cmUg
bGluZXNcbiIpOwotCQlnb3RvIGZhaWxfZnJlZV9sMnA7CisJCXByX2VycigicGJsazogY291bGQg
bm90IGluaXRpYWxpemUgd3JpdGUgYnVmZmVyXG4iKTsKKwkJZ290byBmYWlsX2ZyZWVfbGluZXM7
CisJfQorCisJcmV0ID0gcGJsa19sMnBfaW5pdChwYmxrLCBmbGFncyAmIE5WTV9UQVJHRVRfRkFD
VE9SWSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInBibGs6IGNvdWxkIG5vdCBpbml0aWFsaXpl
IG1hcHNcbiIpOworCQlnb3RvIGZhaWxfZnJlZV9yd2I7CiAJfQogCiAJcmV0ID0gcGJsa193cml0
ZXJfaW5pdChwYmxrKTsKIAlpZiAocmV0KSB7CiAJCWlmIChyZXQgIT0gLUVJTlRSKQogCQkJcHJf
ZXJyKCJwYmxrOiBjb3VsZCBub3QgaW5pdGlhbGl6ZSB3cml0ZSB0aHJlYWRcbiIpOwotCQlnb3Rv
IGZhaWxfZnJlZV9saW5lczsKKwkJZ290byBmYWlsX2ZyZWVfbDJwOwogCX0KIAogCXJldCA9IHBi
bGtfZ2NfaW5pdChwYmxrKTsKQEAgLTEyMjQsMTggKzEyMjcsMTQgQEAgc3RhdGljIHZvaWQgKnBi
bGtfaW5pdChzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiwgc3RydWN0IGdlbmRpc2sgKnRkaXNrLAog
CiBmYWlsX3N0b3Bfd3JpdGVyOgogCXBibGtfd3JpdGVyX3N0b3AocGJsayk7Ci1mYWlsX2ZyZWVf
bGluZXM6Ci0JcGJsa19saW5lc19mcmVlKHBibGspOwogZmFpbF9mcmVlX2wycDoKIAlwYmxrX2wy
cF9mcmVlKHBibGspOworZmFpbF9mcmVlX3J3YjoKKwlwYmxrX3J3Yl9mcmVlKHBibGspOworZmFp
bF9mcmVlX2xpbmVzOgorCXBibGtfbGluZXNfZnJlZShwYmxrKTsKIGZhaWxfZnJlZV9jb3JlOgog
CXBibGtfY29yZV9mcmVlKHBibGspOwotZmFpbF9mcmVlX3BhZF9kaXN0OgotCWtmcmVlKHBibGst
PnBhZF9kaXN0KTsKLWZhaWxfZnJlZV9saW5lX21ldGE6Ci0JcGJsa19saW5lX21nX2ZyZWUocGJs
ayk7Ci1mYWlsX2ZyZWVfbHVuczoKLQlwYmxrX2x1bnNfZnJlZShwYmxrKTsKIGZhaWw6CiAJa2Zy
ZWUocGJsayk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKLS0gCjIuNy40CgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5nIGxp
c3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu
b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help