Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Nov 2011 10:06:43 -0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        freebsd-wireless@freebsd.org, freebsd-mobile@freebsd.org
Subject:   [patch] updated reset handling
Message-ID:  <CAJ-Vmo=pGe9ioddPWuvZmzeFnRJ_2Gu23GtMKw7CEX1i8351qA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--20cf3079b74e69c3da04b1ddf704
Content-Type: text/plain; charset=ISO-8859-1

Hi,

This patch introduces all the missing locking/serialisation to
(hopefully) ensure the reset and channel change paths are handled
correctly.
This fixes all of the throughput issues that occur during an interface reset.

I'm not going to push it into -HEAD until I've done a lot more testing
(read: more than just one station and one access point.) I'd thus like
to hear feedback from the 11n testers I have out there.

Thanks,


Adrian

--20cf3079b74e69c3da04b1ddf704
Content-Type: application/octet-stream; 
	name="freebsd-head-reset-noloss-5.diff"
Content-Disposition: attachment; filename="freebsd-head-reset-noloss-5.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gv2n6yei0

ZGlmZiAtLWdpdCBhL3N5cy9kZXYvYXRoL2lmX2F0aC5jIGIvc3lzL2Rldi9hdGgvaWZfYXRoLmMK
aW5kZXggYzM0ODVlNC4uYTg2NzFlNSAxMDA2NDQKLS0tIGEvc3lzL2Rldi9hdGgvaWZfYXRoLmMK
KysrIGIvc3lzL2Rldi9hdGgvaWZfYXRoLmMKQEAgLTEzNTksMTYgKzEzNTksMzYgQEAgYXRoX2lu
dHIodm9pZCAqYXJnKQogCUhBTF9JTlQgc3RhdHVzID0gMDsKIAl1aW50MzJfdCB0eHFzOwogCisJ
LyoKKwkgKiBJZiB3ZSdyZSBpbnNpZGUgYSByZXNldCBwYXRoLCBqdXN0IHByaW50IGEgd2Fybmlu
ZyBhbmQKKwkgKiBjbGVhciB0aGUgSVNSLiBUaGUgcmVzZXQgcm91dGluZSB3aWxsIGZpbmlzaCBp
dCBmb3IgdXMuCisJICovCisJQVRIX1BDVV9MT0NLKHNjKTsKKwlpZiAoc2MtPnNjX2lucmVzZXRf
Y250KSB7CisJCUhBTF9JTlQgc3RhdHVzOworCQlhdGhfaGFsX2dldGlzcihhaCwgJnN0YXR1cyk7
CS8qIGNsZWFyIElTUiAqLworCQlhdGhfaGFsX2ludHJzZXQoYWgsIDApOwkJLyogZGlzYWJsZSBm
dXJ0aGVyIGludHIncyAqLworCQlEUFJJTlRGKHNjLCBBVEhfREVCVUdfQU5ZLAorCQkgICAgIiVz
OiBpbiByZXNldCwgaWdub3Jpbmc6IHN0YXR1cz0weCV4XG4iLAorCQkgICAgX19mdW5jX18sIHN0
YXR1cyk7CisJCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChzYy0+
c2NfaW52YWxpZCkgewogCQkvKgogCQkgKiBUaGUgaGFyZHdhcmUgaXMgbm90IHJlYWR5L3ByZXNl
bnQsIGRvbid0IHRvdWNoIGFueXRoaW5nLgogCQkgKiBOb3RlIHRoaXMgY2FuIGhhcHBlbiBlYXJs
eSBvbiBpZiB0aGUgSVJRIGlzIHNoYXJlZC4KIAkJICovCiAJCURQUklOVEYoc2MsIEFUSF9ERUJV
R19BTlksICIlczogaW52YWxpZDsgaWdub3JlZFxuIiwgX19mdW5jX18pOworCQlBVEhfUENVX1VO
TE9DSyhzYyk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCFhdGhfaGFsX2ludHJwZW5kKGFoKSkJCS8q
IHNoYXJlZCBpcnEsIG5vdCBmb3IgdXMgKi8KKwlpZiAoIWF0aF9oYWxfaW50cnBlbmQoYWgpKSB7
CQkvKiBzaGFyZWQgaXJxLCBub3QgZm9yIHVzICovCisJCUFUSF9QQ1VfVU5MT0NLKHNjKTsKIAkJ
cmV0dXJuOworCX0KKwogCWlmICgoaWZwLT5pZl9mbGFncyAmIElGRl9VUCkgPT0gMCB8fAogCSAg
ICAoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKIAkJSEFMX0lO
VCBzdGF0dXM7CkBAIC0xMzc3LDggKzEzOTcsMTAgQEAgYXRoX2ludHIodm9pZCAqYXJnKQogCQkJ
X19mdW5jX18sIGlmcC0+aWZfZmxhZ3MpOwogCQlhdGhfaGFsX2dldGlzcihhaCwgJnN0YXR1cyk7
CS8qIGNsZWFyIElTUiAqLwogCQlhdGhfaGFsX2ludHJzZXQoYWgsIDApOwkJLyogZGlzYWJsZSBm
dXJ0aGVyIGludHIncyAqLworCQlBVEhfUENVX1VOTE9DSyhzYyk7CiAJCXJldHVybjsKIAl9CisK
IAkvKgogCSAqIEZpZ3VyZSBvdXQgdGhlIHJlYXNvbihzKSBmb3IgdGhlIGludGVycnVwdC4gIE5v
dGUKIAkgKiB0aGF0IHRoZSBoYWwgcmV0dXJucyBhIHBzZXVkby1JU1IgdGhhdCBtYXkgaW5jbHVk
ZQpAQCAtMTQwMCw5ICsxNDIyLDIzIEBAIGF0aF9pbnRyKHZvaWQgKmFyZykKIAlzdGF0dXMgJj0g
c2MtPnNjX2ltYXNrOwkJCS8qIGRpc2NhcmQgdW5hc2tlZCBmb3IgYml0cyAqLwogCiAJLyogU2hv
cnQtY2lyY3VpdCB1bi1oYW5kbGVkIGludGVycnVwdHMgKi8KLQlpZiAoc3RhdHVzID09IDB4MCkK
KwlpZiAoc3RhdHVzID09IDB4MCkgeworCQlBVEhfUENVX1VOTE9DSyhzYyk7CiAJCXJldHVybjsK
Kwl9CiAKKwkvKgorCSAqIFRha2UgYSBub3RlIHRoYXQgd2UncmUgaW5zaWRlIHRoZSBpbnRlcnJ1
cHQgaGFuZGxlciwgc28KKwkgKiB0aGUgcmVzZXQgcm91dGluZXMga25vdyB0byB3YWl0LgorCSAq
LworCXNjLT5zY19pbnRyX2NudCsrOworCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKworCS8qCisJICog
SGFuZGxlIHRoZSBpbnRlcnJ1cHQuIFdlIHdvbid0IHJ1biBjb25jdXJyZW50IHdpdGggdGhlIHJl
c2V0CisJICogb3IgY2hhbm5lbCBjaGFuZ2Ugcm91dGluZXMgYXMgdGhleSdsbCB3YWl0IGZvciBz
Y19pbnRyX2NudAorCSAqIHRvIGJlIDAgYmVmb3JlIGNvbnRpbnVpbmcuCisJICovCiAJaWYgKHN0
YXR1cyAmIEhBTF9JTlRfRkFUQUwpIHsKIAkJc2MtPnNjX3N0YXRzLmFzdF9oYXJkd2FyZSsrOwog
CQlhdGhfaGFsX2ludHJzZXQoYWgsIDApOwkJLyogZGlzYWJsZSBpbnRyJ3MgdW50aWwgcmVzZXQg
Ki8KQEAgLTE0NDMsNiArMTQ3OSw3IEBAIGF0aF9pbnRyKHZvaWQgKmFyZykKIAkJaWYgKHN0YXR1
cyAmIEhBTF9JTlRfUlhFT0wpIHsKIAkJCWludCBpbWFzazsKIAkJCUNUUjAoQVRIX0tUUl9FUlIs
ICJhdGhfaW50cjogUlhFT0wiKTsKKwkJCUFUSF9QQ1VfTE9DSyhzYyk7CiAJCQkvKgogCQkJICog
TkI6IHRoZSBoYXJkd2FyZSBzaG91bGQgcmUtcmVhZCB0aGUgbGluayB3aGVuCiAJCQkgKiAgICAg
UlhFIGJpdCBpcyB3cml0dGVuLCBidXQgaXQgZG9lc24ndCB3b3JrIGF0CkBAIC0xNDU4LDcgKzE0
OTUsNiBAQCBhdGhfaW50cih2b2lkICphcmcpCiAJCQkgKiBieSBhIGNhbGwgdG8gYXRoX3Jlc2V0
KCkgc29tZWhvdywgdGhlCiAJCQkgKiBpbnRlcnJ1cHQgbWFzayB3aWxsIGJlIGNvcnJlY3RseSBy
ZXByb2dyYW1tZWQuCiAJCQkgKi8KLQkJCUFUSF9MT0NLKHNjKTsKIAkJCWltYXNrID0gc2MtPnNj
X2ltYXNrOwogCQkJaW1hc2sgJj0gfihIQUxfSU5UX1JYRU9MIHwgSEFMX0lOVF9SWE9STik7CiAJ
CQlhdGhfaGFsX2ludHJzZXQoYWgsIGltYXNrKTsKQEAgLTE0NzYsMTMgKzE1MTIsMTMgQEAgYXRo
X2ludHIodm9pZCAqYXJnKQogCQkJaWYgKCEgc2MtPnNjX2tpY2twY3UpCiAJCQkJc2MtPnNjX3J4
bGluayA9IE5VTEw7CiAJCQlzYy0+c2Nfa2lja3BjdSA9IDE7Ci0JCQlBVEhfVU5MT0NLKHNjKTsK
IAkJCS8qCiAJCQkgKiBFbnF1ZXVlIGFuIFJYIHByb2MsIHRvIGhhbmRsZWQgd2hhdGV2ZXIKIAkJ
CSAqIGlzIGluIHRoZSBSWCBxdWV1ZS4KIAkJCSAqIFRoaXMgd2lsbCB0aGVuIGtpY2sgdGhlIFBD
VS4KIAkJCSAqLwogCQkJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX3J4dGFz
ayk7CisJCQlBVEhfUENVX1VOTE9DSyhzYyk7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIEhBTF9JTlRf
VFhVUk4pIHsKIAkJCXNjLT5zY19zdGF0cy5hc3RfdHh1cm4rKzsKQEAgLTE1MDAsMTIgKzE1MzYs
MTIgQEAgYXRoX2ludHIodm9pZCAqYXJnKQogCQkJICogYW5kIGJsYW5rIHRoZW0uIFRoaXMgaXMg
dGhlIG9ubHkgcGxhY2Ugd2Ugc2hvdWxkIGJlCiAJCQkgKiBkb2luZyB0aGlzLgogCQkJICovCi0J
CQlBVEhfTE9DSyhzYyk7CisJCQlBVEhfUENVX0xPQ0soc2MpOwogCQkJdHhxcyA9IDB4ZmZmZmZm
ZmY7CiAJCQlhdGhfaGFsX2dldHR4aW50cnR4cXMoc2MtPnNjX2FoLCAmdHhxcyk7CiAJCQlzYy0+
c2NfdHhxX2FjdGl2ZSB8PSB0eHFzOwotCQkJQVRIX1VOTE9DSyhzYyk7CiAJCQl0YXNrcXVldWVf
ZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfdHh0YXNrKTsKKwkJCUFUSF9QQ1VfVU5MT0NLKHNj
KTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9CTUlTUykgewogCQkJc2MtPnNjX3N0YXRz
LmFzdF9ibWlzcysrOwpAQCAtMTUxNyw2ICsxNTUzLDcgQEAgYXRoX2ludHIodm9pZCAqYXJnKQog
CQkJc2MtPnNjX3N0YXRzLmFzdF90eF9jc3QrKzsKIAkJaWYgKHN0YXR1cyAmIEhBTF9JTlRfTUlC
KSB7CiAJCQlzYy0+c2Nfc3RhdHMuYXN0X21pYisrOworCQkJQVRIX1BDVV9MT0NLKHNjKTsKIAkJ
CS8qCiAJCQkgKiBEaXNhYmxlIGludGVycnVwdHMgdW50aWwgd2Ugc2VydmljZSB0aGUgTUlCCiAJ
CQkgKiBpbnRlcnJ1cHQ7IG90aGVyd2lzZSBpdCB3aWxsIGNvbnRpbnVlIHRvIGZpcmUuCkBAIC0x
NTMzLDEwICsxNTcwLDkgQEAgYXRoX2ludHIodm9pZCAqYXJnKQogCQkJICogUlhFT0wgYmVmb3Jl
IHRoZSByeHByb2MgaGFzIGhhZCBhIGNoYW5jZQogCQkJICogdG8gcnVuLgogCQkJICovCi0JCQlB
VEhfTE9DSyhzYyk7CiAJCQlpZiAoc2MtPnNjX2tpY2twY3UgPT0gMCkKIAkJCQlhdGhfaGFsX2lu
dHJzZXQoYWgsIHNjLT5zY19pbWFzayk7Ci0JCQlBVEhfVU5MT0NLKHNjKTsKKwkJCUFUSF9QQ1Vf
VU5MT0NLKHNjKTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9SWE9STikgewogCQkJLyog
TkI6IGhhbCBtYXJrcyBIQUxfSU5UX0ZBVEFMIHdoZW4gUlhPUk4gaXMgZmF0YWwgKi8KQEAgLTE1
NDQsNiArMTU4MCw5IEBAIGF0aF9pbnRyKHZvaWQgKmFyZykKIAkJCXNjLT5zY19zdGF0cy5hc3Rf
cnhvcm4rKzsKIAkJfQogCX0KKwlBVEhfUENVX0xPQ0soc2MpOworCXNjLT5zY19pbnRyX2NudC0t
OworCUFUSF9QQ1VfVU5MT0NLKHNjKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4MTksNiArMTg1
OCw0NSBAQCBhdGhfc3RvcF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnApCiB9CiAKIHN0YXRpYyB2
b2lkCithdGhfdHhyeF9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpID0gMTAw
MDsKKworCUFUSF9VTkxPQ0tfQVNTRVJUKHNjKTsKKworCS8qIFN0b3AgYW55IG5ldyBUWC9SWCBm
cm9tIG9jY3VyaW5nICovCisJdGFza3F1ZXVlX2Jsb2NrKHNjLT5zY190cSk7CisKKwlBVEhfUENV
X0xPQ0soc2MpOworCisJLyoKKwkgKiBTbGVlcCB1bnRpbCBhbGwgdGhlIHBlbmRpbmcgb3BlcmF0
aW9ucyBoYXZlIGNvbXBsZXRlZC4KKwkgKgorCSAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhh
dCByZXNldCBoYXMgYmVlbiBpbmNyZW1lbnRlZAorCSAqIG9yIHRoaXMgd29uJ3QgZXZlciBvY2N1
ci4KKwkgKi8KKwl3aGlsZSAoc2MtPnNjX3J4cHJvY19jbnQgfHwgc2MtPnNjX3R4cHJvY19jbnQg
fHwKKwkgICAgc2MtPnNjX3R4c3RhcnRfY250IHx8IHNjLT5zY19pbnRyX2NudCkgeworCSAgICAJ
aWYgKGkgPD0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoc2MsICZzYy0+c2NfbXR4LCAwLCAiYXRo
X3R4cnhfc3RvcCIsIDEpOworCQlpLS07CisJfQorCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKworCWlm
IChpIDw9IDApCisJCWRldmljZV9wcmludGYoc2MtPnNjX2RldiwKKwkJICAgICIlczogZGlkbid0
IGZpbmlzaCBhZnRlciAxMDAwIGl0ZXJhdGlvbnNcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGlj
IHZvaWQKK2F0aF90eHJ4X3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCisJdGFza3F1
ZXVlX3VuYmxvY2soc2MtPnNjX3RxKTsKK30KKworc3RhdGljIHZvaWQKIGF0aF9zdG9wKHN0cnVj
dCBpZm5ldCAqaWZwKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsK
QEAgLTE4NDIsMTcgKzE5MjAsNTEgQEAgYXRoX3Jlc2V0KHN0cnVjdCBpZm5ldCAqaWZwLCBBVEhf
UkVTRVRfVFlQRSByZXNldF90eXBlKQogCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gaWZwLT5p
Zl9sMmNvbTsKIAlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CiAJSEFMX1NUQVRVUyBz
dGF0dXM7CisJaW50IGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfUkVTRVQsICIlczogY2Fs
bGVkXG4iLCBfX2Z1bmNfXyk7CiAKKwkvKiBYWFggZW5zdXJlIEFUSF9MT0NLIGlzbid0IGhlbGQ7
IGF0aF9yeF9wcm9jIGNhbid0IGJlIGxvY2tlZCAqLworCUFUSF9QQ1VfVU5MT0NLX0FTU0VSVChz
Yyk7CisJQVRIX1VOTE9DS19BU1NFUlQoc2MpOworCisJQVRIX1BDVV9MT0NLKHNjKTsKKwkvKiBY
WFggaWYgd2UncmUgYWxyZWFkeSBpbnNpZGUgYSByZXNldCwgcHJpbnQgb3V0IGEgYmlnIHdhcm5p
bmcgKi8KKwlpZiAoc2MtPnNjX2lucmVzZXRfY250ID4gMCkgeworCQlkZXZpY2VfcHJpbnRmKHNj
LT5zY19kZXYsCisJCSAgICAiJXM6IGNvbmN1cnJlbnQgYXRoX3Jlc2V0KCkhIERhbmdlciFcbiIs
CisJCSAgICBfX2Z1bmNfXyk7CisJfQorCXNjLT5zY19pbnJlc2V0X2NudCsrOwogCWF0aF9oYWxf
aW50cnNldChhaCwgMCk7CQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlBVEhfUENVX1VOTE9D
SyhzYyk7CisKKwkvKgorCSAqIFhYWCBzaG91bGQgbm93IHdhaXQgZm9yIHBlbmRpbmcgVFgvUlgg
dG8gY29tcGxldGUKKwkgKiBhbmQgYmxvY2sgZnV0dXJlIG9uZXMgZnJvbSBvY2N1cmluZy4KKwkg
Ki8KKwlhdGhfdHhyeF9zdG9wKHNjKTsKKwogCWF0aF9kcmFpbnR4cShzYywgcmVzZXRfdHlwZSk7
CS8qIHN0b3AgeG1pdCBzaWRlICovCisKIAkvKgotCSAqIFhYWCBEb24ndCBmbHVzaCBpZiBBVEhf
UkVTRVRfTk9MT1NTO2J1dCB3ZSBoYXZlIHRvIGZpcnN0Ci0JICogWFhYIG5lZWQgdG8gZW5zdXJl
IHRoaXMgZG9lc24ndCByYWNlIHdpdGggYW4gb3V0c3RhbmRpbmcKLQkgKiBYWFggdGFza3F1ZXVl
IGNhbGwuCisJICogUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlJ3JlIGRvaW5nIGEgbm8tbG9zcyBm
bHVzaCBvcgorCSAqIG5vdCwgc3RvcCB0aGUgUENVIGFuZCBoYW5kbGUgd2hhdCdzIGluIHRoZSBS
WCBxdWV1ZS4KKwkgKiBUaGF0IHdheSBmcmFtZXMgYXJlbid0IGRyb3BwZWQgd2hpY2ggc2hvdWxk
bid0IGJlLgogCSAqLwotCWF0aF9zdG9wcmVjdihzYyk7CQkvKiBzdG9wIHJlY3Ygc2lkZSAqLwor
CWF0aF9oYWxfc3RvcHBjdXJlY3YoYWgpOworCWF0aF9oYWxfc2V0cnhmaWx0ZXIoYWgsIDApOwor
CWF0aF9yeF9wcm9jKHNjLCAwKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGRvaW5nIGEgbm9s
b3NzIHJlc2V0LCBub3cgY2FsbCBhdGhfc3RvcHJlY3YoKS4KKwkgKiBUaGlzIGZ1bGx5IHN0b3Bz
IGFsbCBvZiB0aGUgUlggbWFjaGluZXJ5IGFuZCBmbHVzaGVzIHdoYXRldmVyCisJICogZnJhbWVz
IGFyZSBpbiB0aGUgUlggcmluZyBidWZmZXIuIEhvcGVmdWxseSBhbGwgY29tcGxldGVkCisJICog
ZnJhbWVzIGhhdmUgYmVlbiBoYW5kbGVkIGF0IHRoaXMgcG9pbnQuCisJICovCisJaWYgKHJlc2V0
X3R5cGUgIT0gQVRIX1JFU0VUX05PTE9TUykKKwkJYXRoX3N0b3ByZWN2KHNjKTsJCS8qIHN0b3Ag
cmVjdiBzaWRlICovCisKIAlhdGhfc2V0dGtpcG1pYyhzYyk7CQkvKiBjb25maWd1cmUgVEtJUCBN
SUMgaGFuZGxpbmcgKi8KIAkvKiBOQjogaW5kaWNhdGUgY2hhbm5lbCBjaGFuZ2Ugc28gd2UgZG8g
YSBmdWxsIHJlc2V0ICovCiAJaWYgKCFhdGhfaGFsX3Jlc2V0KGFoLCBzYy0+c2Nfb3Btb2RlLCBp
Yy0+aWNfY3VyY2hhbiwgQUhfVFJVRSwgJnN0YXR1cykpCkBAIC0xODc5LDggKzE5OTEsNTkgQEAg
YXRoX3Jlc2V0KHN0cnVjdCBpZm5ldCAqaWZwLCBBVEhfUkVTRVRfVFlQRSByZXNldF90eXBlKQog
I2VuZGlmCiAJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJfQorCisJLyoKKwkgKiBS
ZWxlYXNlIHRoZSByZXNldCBsb2NrIGFuZCByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlLgorCSAq
IElmIGFuIGludGVycnVwdCB3YXMgYmVpbmcgcHJvY2Vzc2VkIGluIGF0aF9pbnRyKCksCisJICog
aXQgd291bGQgZGlzYWJsZSBpbnRlcnJ1cHRzIGF0IHRoaXMgcG9pbnQuIFNvIHdlIGhhdmUKKwkg
KiB0byBhdG9taWNhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCBkZWNyZW1lbnQgdGhlCisJICog
cmVzZXQgY291bnRlciAtIHRoaXMgd2F5IGF0aF9pbnRyKCkgZG9lc24ndCBlbmQgdXAKKwkgKiBk
aXNhYmxpbmcgaW50ZXJydXB0cyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBlbmFibGUKKwkgKiBp
biB0aGUgcmVzdCBvciBjaGFubmVsIGNoYW5nZSBwYXRoLgorCSAqLworCUFUSF9QQ1VfTE9DSyhz
Yyk7CisJc2MtPnNjX2lucmVzZXRfY250LS07CisJLyogWFhYIG9ubHkgZG8gdGhpcyBpZiBzY19p
bnJlc2V0X2NudCA9PSAwPyAqLwogCWF0aF9oYWxfaW50cnNldChhaCwgc2MtPnNjX2ltYXNrKTsK
KwlBVEhfUENVX1VOTE9DSyhzYyk7CiAKKwkvKgorCSAqIFRYIGFuZCBSWCBjYW4gYmUgc3RhcnRl
ZCBoZXJlLiBJZiBpdCB3ZXJlIHN0YXJ0ZWQgd2l0aAorCSAqIHNjX2lucmVzZXRfY250ID4gMCwg
dGhlIFRYIGFuZCBSWCBwYXRoIHdvdWxkIGFib3J0LgorCSAqIFRodXMgaWYgdGhpcyBpcyBhIG5l
c3RlZCBjYWxsIHRocm91Z2ggdGhlIHJlc2V0IG9yCisJICogY2hhbm5lbCBjaGFuZ2UgY29kZSwg
VFggY29tcGxldGlvbiB3aWxsIG9jY3VyIGJ1dAorCSAqIFJYIGNvbXBsZXRpb24gYW5kIGF0aF9z
dGFydCAvIGF0aF90eF9zdGFydCB3aWxsIG5vdAorCSAqIHJ1bi4KKwkgKi8KKworCS8qIFJlc3Rh
cnQgVFgvUlggYXMgbmVlZGVkICovCisJYXRoX3R4cnhfc3RhcnQoc2MpOworCisJLyogWFhYIFJl
c3RhcnQgVFggY29tcGxldGlvbiBhbmQgcGVuZGluZyBUWCAqLworCWlmIChyZXNldF90eXBlID09
IEFUSF9SRVNFVF9OT0xPU1MpIHsKKwkJZm9yIChpID0gMDsgaSA8IEhBTF9OVU1fVFhfUVVFVUVT
OyBpKyspIHsKKwkJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJCUFUSF9UWFFfTE9D
Sygmc2MtPnNjX3R4cVtpXSk7CisJCQkJYXRoX3R4cV9yZXN0YXJ0X2RtYShzYywgJnNjLT5zY190
eHFbaV0pOworCQkJCWF0aF90eHFfc2NoZWQoc2MsICZzYy0+c2NfdHhxW2ldKTsKKwkJCQlBVEhf
VFhRX1VOTE9DSygmc2MtPnNjX3R4cVtpXSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFRo
aXMgbWF5IGhhdmUgYmVlbiBzZXQgZHVyaW5nIGFuIGF0aF9zdGFydCgpIGNhbGwgd2hpY2gKKwkg
KiBzZXQgdGhpcyBvbmNlIGl0IGRldGVjdGVkIGEgY29uY3VycmVudCBUWCB3YXMgZ29pbmcgb24u
CisJICogU28sIGNsZWFyIGl0LgorCSAqLworCS8qIFhYWCBkbyB0aGlzIGluc2lkZSBvZiBJRl9M
T0NLPyAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisKKwkvKiBI
YW5kbGUgYW55IGZyYW1lcyBpbiB0aGUgVFggcXVldWUgKi8KKwkvKgorCSAqIFhYWCBzaG91bGQg
dGhpcyBiZSBkb25lIGJ5IHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuCisJICogYXRoX3Jlc2V0KCkg
PworCSAqLwogCWF0aF9zdGFydChpZnApOwkJCS8qIHJlc3RhcnQgeG1pdCAqLwogCXJldHVybiAw
OwogfQpAQCAtMjAxMSw2ICsyMTc0LDcgQEAgYXRoX2dldGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpz
YykKIAogCQlEUFJJTlRGKHNjLCBBVEhfREVCVUdfWE1JVCwgIiVzOiBzdG9wIHF1ZXVlXG4iLCBf
X2Z1bmNfXyk7CiAJCXNjLT5zY19zdGF0cy5hc3RfdHhfcXN0b3ArKzsKKwkJLyogWFhYIGRvIHRo
aXMgaW5zaWRlIG9mIElGX0xPQ0s/ICovCiAJCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZf
T0FDVElWRTsKIAl9CiAJQVRIX1RYQlVGX1VOTE9DSyhzYyk7CkBAIC0yMDI4LDYgKzIxOTIsMjAg
QEAgYXRoX3N0YXJ0KHN0cnVjdCBpZm5ldCAqaWZwKQogCiAJaWYgKChpZnAtPmlmX2Rydl9mbGFn
cyAmIElGRl9EUlZfUlVOTklORykgPT0gMCB8fCBzYy0+c2NfaW52YWxpZCkKIAkJcmV0dXJuOwor
CisJLyogWFhYIGlzIGl0IG9rIHRvIGhvbGQgdGhlIEFUSF9MT0NLIGhlcmU/ICovCisJQVRIX1BD
VV9MT0NLKHNjKTsKKwlpZiAoc2MtPnNjX2lucmVzZXRfY250ID4gMCkgeworCQlkZXZpY2VfcHJp
bnRmKHNjLT5zY19kZXYsCisJCSAgICAiJXM6IHNjX2lucmVzZXRfY250ID4gMDsgYmFpbGluZ1xu
IiwgX19mdW5jX18pOworCQkvKiBYWFggZG8gdGhpcyBpbnNpZGUgb2YgSUZfTE9DSz8gKi8KKwkJ
aWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZFOworCQlBVEhfUENVX1VOTE9DSyhz
Yyk7CisJCXJldHVybjsKKwl9CisJc2MtPnNjX3R4c3RhcnRfY250Kys7CisJQVRIX1BDVV9VTkxP
Q0soc2MpOworCiAJZm9yICg7OykgewogCQkvKgogCQkgKiBHcmFiIGEgVFggYnVmZmVyIGFuZCBh
c3NvY2lhdGVkIHJlc291cmNlcy4KQEAgLTIxMTEsNiArMjI4OSwxMCBAQCBhdGhfc3RhcnQoc3Ry
dWN0IGlmbmV0ICppZnApCiAKIAkJc2MtPnNjX3dkX3RpbWVyID0gNTsKIAl9CisKKwlBVEhfUENV
X0xPQ0soc2MpOworCXNjLT5zY190eHN0YXJ0X2NudC0tOworCUFUSF9QQ1VfVU5MT0NLKHNjKTsK
IH0KIAogc3RhdGljIGludApAQCAtMzY4OCw2ICszODcwLDE0IEBAIGF0aF9yeF90YXNrbGV0KHZv
aWQgKmFyZywgaW50IG5wZW5kaW5nKQogCiAJQ1RSMShBVEhfS1RSX0lOVFIsICJhdGhfcnhfcHJv
YzogcGVuZGluZz0lZCIsIG5wZW5kaW5nKTsKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfUlhfUFJP
QywgIiVzOiBwZW5kaW5nICV1XG4iLCBfX2Z1bmNfXywgbnBlbmRpbmcpOworCUFUSF9QQ1VfTE9D
SyhzYyk7CisJaWYgKHNjLT5zY19pbnJlc2V0X2NudCA+IDApIHsKKwkJZGV2aWNlX3ByaW50Zihz
Yy0+c2NfZGV2LAorCQkgICAgIiVzOiBzY19pbnJlc2V0X2NudCA+IDA7IHNraXBwaW5nXG4iLCBf
X2Z1bmNfXyk7CisJCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKwkJcmV0dXJuOworCX0KKwlBVEhfUENV
X1VOTE9DSyhzYyk7CiAJYXRoX3J4X3Byb2Moc2MsIDEpOwogfQogCkBAIC0zNzExLDYgKzM5MDEs
MTQgQEAgYXRoX3J4X3Byb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByZXNjaGVkKQogCXVf
aW50NjRfdCB0c2Y7CiAJaW50IG5wa3RzID0gMDsKIAorCS8qIFhYWCB3ZSBtdXN0IG5vdCBob2xk
IHRoZSBBVEhfTE9DSyBoZXJlICovCisJQVRIX1VOTE9DS19BU1NFUlQoc2MpOworCUFUSF9QQ1Vf
VU5MT0NLX0FTU0VSVChzYyk7CisKKwlBVEhfUENVX0xPQ0soc2MpOworCXNjLT5zY19yeHByb2Nf
Y250Kys7CisJQVRIX1BDVV9VTkxPQ0soc2MpOworCiAJRFBSSU5URihzYywgQVRIX0RFQlVHX1JY
X1BST0MsICIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAJbmdvb2QgPSAwOwogCW5mID0gYXRo
X2hhbF9nZXRjaGFubm9pc2UoYWgsIHNjLT5zY19jdXJjaGFuKTsKQEAgLTQwNTYsMjQgKzQyNTQs
MjkgQEAgcnhfbmV4dDoKIAkgKiBuZWVkIHRvIGJlIGhhbmRsZWQsIGtpY2sgdGhlIFBDVSBpZiB0
aGVyZSdzCiAJICogYmVlbiBhbiBSWEVPTCBjb25kaXRpb24uCiAJICovCisJQVRIX1BDVV9MT0NL
KHNjKTsKIAlpZiAocmVzY2hlZCAmJiBzYy0+c2Nfa2lja3BjdSkgewogCQlDVFIwKEFUSF9LVFJf
RVJSLCAiYXRoX3J4X3Byb2M6IGtpY2twY3UiKTsKIAkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2
LCAiJXM6IGtpY2twY3U7IGhhbmRsZWQgJWQgcGFja2V0c1xuIiwKIAkJICAgIF9fZnVuY19fLCBu
cGt0cyk7CiAKIAkJLyogWFhYIHJ4c2xpbms/ICovCisJCS8qCisJCSAqIFhYWCBjYW4gd2UgaG9s
ZCB0aGUgUENVIGxvY2sgaGVyZT8KKwkJICogQXJlIHRoZXJlIGFueSBuZXQ4MDIxMSBidWZmZXIg
Y2FsbHMgaW52b2x2ZWQ/CisJCSAqLwogCQliZiA9IFRBSUxRX0ZJUlNUKCZzYy0+c2NfcnhidWYp
OwogCQlhdGhfaGFsX3B1dHJ4YnVmKGFoLCBiZi0+YmZfZGFkZHIpOwogCQlhdGhfaGFsX3J4ZW5h
KGFoKTsJCS8qIGVuYWJsZSByZWN2IGRlc2NyaXB0b3JzICovCiAJCWF0aF9tb2RlX2luaXQoc2Mp
OwkJLyogc2V0IGZpbHRlcnMsIGV0Yy4gKi8KIAkJYXRoX2hhbF9zdGFydHBjdXJlY3YoYWgpOwkv
KiByZS1lbmFibGUgUENVL0RNQSBlbmdpbmUgKi8KIAotCQlBVEhfTE9DSyhzYyk7CiAJCWF0aF9o
YWxfaW50cnNldChhaCwgc2MtPnNjX2ltYXNrKTsKIAkJc2MtPnNjX2tpY2twY3UgPSAwOwotCQlB
VEhfVU5MT0NLKHNjKTsKIAl9CisJQVRIX1BDVV9VTkxPQ0soc2MpOwogCisJLyogWFhYIGNoZWNr
IHRoaXMgaW5zaWRlIG9mIElGX0xPQ0s/ICovCiAJaWYgKHJlc2NoZWQgJiYgKGlmcC0+aWZfZHJ2
X2ZsYWdzICYgSUZGX0RSVl9PQUNUSVZFKSA9PSAwKSB7CiAjaWZkZWYgSUVFRTgwMjExX1NVUFBP
UlRfU1VQRVJHCiAJCWllZWU4MDIxMV9mZl9hZ2VfYWxsKGljLCAxMDApOwpAQCAtNDA4Miw2ICs0
Mjg1LDEwIEBAIHJ4X25leHQ6CiAJCQlhdGhfc3RhcnQoaWZwKTsKIAl9CiAjdW5kZWYgUEEyREVT
QworCisJQVRIX1BDVV9MT0NLKHNjKTsKKwlzYy0+c2Nfcnhwcm9jX2NudC0tOworCUFUSF9QQ1Vf
VU5MT0NLKHNjKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ1ODgsMjIgKzQ3OTUsMjggQEAgYXRo
X3R4X3Byb2NfcTAodm9pZCAqYXJnLCBpbnQgbnBlbmRpbmcpCiAJc3RydWN0IGlmbmV0ICppZnAg
PSBzYy0+c2NfaWZwOwogCXVpbnQzMl90IHR4cXM7CiAKLQlBVEhfTE9DSyhzYyk7CisJQVRIX1BD
VV9MT0NLKHNjKTsKKwlzYy0+c2NfdHhwcm9jX2NudCsrOwogCXR4cXMgPSBzYy0+c2NfdHhxX2Fj
dGl2ZTsKIAlzYy0+c2NfdHhxX2FjdGl2ZSAmPSB+dHhxczsKLQlBVEhfVU5MT0NLKHNjKTsKKwlB
VEhfUENVX1VOTE9DSyhzYyk7CiAKIAlpZiAoVFhRQUNUSVZFKHR4cXMsIDApICYmIGF0aF90eF9w
cm9jZXNzcShzYywgJnNjLT5zY190eHFbMF0sIDEpKQogCQkvKiBYWFggd2h5IGlzIGxhc3RyeCB1
cGRhdGVkIGluIHR4IGNvZGU/ICovCiAJCXNjLT5zY19sYXN0cnggPSBhdGhfaGFsX2dldHRzZjY0
KHNjLT5zY19haCk7CiAJaWYgKFRYUUFDVElWRSh0eHFzLCBzYy0+c2NfY2FicS0+YXhxX3FudW0p
KQogCQlhdGhfdHhfcHJvY2Vzc3Eoc2MsIHNjLT5zY19jYWJxLCAxKTsKKwkvKiBYWFggY2hlY2sg
dGhpcyBpbnNpZGUgb2YgSUZfTE9DSz8gKi8KIAlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RS
Vl9PQUNUSVZFOwogCXNjLT5zY193ZF90aW1lciA9IDA7CiAKIAlpZiAoc2MtPnNjX3NvZnRsZWQp
CiAJCWF0aF9sZWRfZXZlbnQoc2MsIHNjLT5zY190eHJpeCk7CiAKKwlBVEhfUENVX0xPQ0soc2Mp
OworCXNjLT5zY190eHByb2NfY250LS07CisJQVRIX1BDVV9VTkxPQ0soc2MpOworCiAJYXRoX3N0
YXJ0KGlmcCk7CiB9CiAKQEAgLTQ2MTksMTAgKzQ4MzIsMTEgQEAgYXRoX3R4X3Byb2NfcTAxMjMo
dm9pZCAqYXJnLCBpbnQgbnBlbmRpbmcpCiAJaW50IG5hY2tlZDsKIAl1aW50MzJfdCB0eHFzOwog
Ci0JQVRIX0xPQ0soc2MpOworCUFUSF9QQ1VfTE9DSyhzYyk7CisJc2MtPnNjX3R4cHJvY19jbnQr
KzsKIAl0eHFzID0gc2MtPnNjX3R4cV9hY3RpdmU7CiAJc2MtPnNjX3R4cV9hY3RpdmUgJj0gfnR4
cXM7Ci0JQVRIX1VOTE9DSyhzYyk7CisJQVRIX1BDVV9VTkxPQ0soc2MpOwogCiAJLyoKIAkgKiBQ
cm9jZXNzIGVhY2ggYWN0aXZlIHF1ZXVlLgpAQCAtNDY0MSwxMiArNDg1NSwxNyBAQCBhdGhfdHhf
cHJvY19xMDEyMyh2b2lkICphcmcsIGludCBucGVuZGluZykKIAlpZiAobmFja2VkKQogCQlzYy0+
c2NfbGFzdHJ4ID0gYXRoX2hhbF9nZXR0c2Y2NChzYy0+c2NfYWgpOwogCisJLyogWFhYIGNoZWNr
IHRoaXMgaW5zaWRlIG9mIElGX0xPQ0s/ICovCiAJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9E
UlZfT0FDVElWRTsKIAlzYy0+c2Nfd2RfdGltZXIgPSAwOwogCiAJaWYgKHNjLT5zY19zb2Z0bGVk
KQogCQlhdGhfbGVkX2V2ZW50KHNjLCBzYy0+c2NfdHhyaXgpOwogCisJQVRIX1BDVV9MT0NLKHNj
KTsKKwlzYy0+c2NfdHhwcm9jX2NudC0tOworCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKwogCWF0aF9z
dGFydChpZnApOwogfQogCkBAIC00NjYxLDEwICs0ODgwLDExIEBAIGF0aF90eF9wcm9jKHZvaWQg
KmFyZywgaW50IG5wZW5kaW5nKQogCWludCBpLCBuYWNrZWQ7CiAJdWludDMyX3QgdHhxczsKIAot
CUFUSF9MT0NLKHNjKTsKKwlBVEhfUENVX0xPQ0soc2MpOworCXNjLT5zY190eHByb2NfY250Kys7
CiAJdHhxcyA9IHNjLT5zY190eHFfYWN0aXZlOwogCXNjLT5zY190eHFfYWN0aXZlICY9IH50eHFz
OwotCUFUSF9VTkxPQ0soc2MpOworCUFUSF9QQ1VfVU5MT0NLKHNjKTsKIAogCS8qCiAJICogUHJv
Y2VzcyBlYWNoIGFjdGl2ZSBxdWV1ZS4KQEAgLTQ2NzYsMTIgKzQ4OTYsMTcgQEAgYXRoX3R4X3By
b2Modm9pZCAqYXJnLCBpbnQgbnBlbmRpbmcpCiAJaWYgKG5hY2tlZCkKIAkJc2MtPnNjX2xhc3Ry
eCA9IGF0aF9oYWxfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKIAorCS8qIFhYWCBjaGVjayB0aGlzIGlu
c2lkZSBvZiBJRl9MT0NLPyAqLwogCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJ
VkU7CiAJc2MtPnNjX3dkX3RpbWVyID0gMDsKIAogCWlmIChzYy0+c2Nfc29mdGxlZCkKIAkJYXRo
X2xlZF9ldmVudChzYywgc2MtPnNjX3R4cml4KTsKIAorCUFUSF9QQ1VfTE9DSyhzYyk7CisJc2Mt
PnNjX3R4cHJvY19jbnQtLTsKKwlBVEhfUENVX1VOTE9DSyhzYyk7CisKIAlhdGhfc3RhcnQoaWZw
KTsKIH0KICN1bmRlZglUWFFBQ1RJVkUKQEAgLTQ4NjMsOSArNTA4OCwxOCBAQCBhdGhfZHJhaW50
eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIEFUSF9SRVNFVF9UWVBFIHJlc2V0X3R5cGUpCiAKIAko
dm9pZCkgYXRoX3N0b3B0eGRtYShzYyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSEFMX05VTV9UWF9R
VUVVRVM7IGkrKykKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQotCQkJYXRoX3R4X2RyYWlu
dHhxKHNjLCAmc2MtPnNjX3R4cVtpXSk7CisJZm9yIChpID0gMDsgaSA8IEhBTF9OVU1fVFhfUVVF
VUVTOyBpKyspIHsKKwkJLyoKKwkJICogWFhYIFRPRE86IHNob3VsZCB3ZSBqdXN0IGhhbmRsZSB0
aGUgY29tcGxldGVkIFRYIGZyYW1lcworCQkgKiBoZXJlLCB3aGV0aGVyIG9yIG5vdCB0aGUgcmVz
ZXQgaXMgYSBmdWxsIG9uZSBvciBub3Q/CisJCSAqLworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywg
aSkpIHsKKwkJCWlmIChyZXNldF90eXBlID09IEFUSF9SRVNFVF9OT0xPU1MpCisJCQkJYXRoX3R4
X3Byb2Nlc3NxKHNjLCAmc2MtPnNjX3R4cVtpXSwgMCk7CisJCQllbHNlCisJCQkJYXRoX3R4X2Ry
YWludHhxKHNjLCAmc2MtPnNjX3R4cVtpXSk7CisJCX0KKwl9CiAjaWZkZWYgQVRIX0RFQlVHCiAJ
aWYgKHNjLT5zY19kZWJ1ZyAmIEFUSF9ERUJVR19SRVNFVCkgewogCQlzdHJ1Y3QgYXRoX2J1ZiAq
YmYgPSBUQUlMUV9GSVJTVCgmc2MtPnNjX2JidWYpOwpAQCAtNDg3OSw2ICs1MTEzLDcgQEAgYXRo
X2RyYWludHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBBVEhfUkVTRVRfVFlQRSByZXNldF90eXBl
KQogCQl9CiAJfQogI2VuZGlmIC8qIEFUSF9ERUJVRyAqLworCS8qIFhYWCBjaGVjayB0aGlzIGlu
c2lkZSBvZiBJRl9MT0NLPyAqLwogCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJ
VkU7CiAJc2MtPnNjX3dkX3RpbWVyID0gMDsKIH0KQEAgLTQ5ODQsNiArNTIxOSwyMiBAQCBhdGhf
Y2hhbl9zZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAq
Y2hhbikKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5zY19pZnA7CiAJc3RydWN0IGllZWU4MDIx
MWNvbSAqaWMgPSBpZnAtPmlmX2wyY29tOwogCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19h
aDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZG9pbnRyID0gMDsKKworCS8qIFRyZWF0IHRoaXMgYXMg
YW4gaW50ZXJmYWNlIHJlc2V0ICovCisJQVRIX1BDVV9MT0NLKHNjKTsKKwlpZiAoc2MtPnNjX2lu
cmVzZXRfY250ID4gMCkKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAiJXM6IGRhbmdlciEg
Y29uY3VycmVudCByZXNldCFcbiIsCisJCSAgICBfX2Z1bmNfXyk7CisJc2MtPnNjX2lucmVzZXRf
Y250Kys7CisJaWYgKGNoYW4gIT0gc2MtPnNjX2N1cmNoYW4pIHsKKwkJZG9pbnRyID0gMTsKKwkJ
LyogWFhYIG9ubHkgZG8gdGhpcyBpZiBpbnJlc2V0X2NudCBpcyAxPyAqLworCQlhdGhfaGFsX2lu
dHJzZXQoYWgsIDApOworCX0KKwlBVEhfUENVX1VOTE9DSyhzYyk7CisJYXRoX3R4cnhfc3RvcChz
Yyk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfUkVTRVQsICIlczogJXUgKCV1IE1IeiwgZmxh
Z3MgMHgleClcbiIsCiAJICAgIF9fZnVuY19fLCBpZWVlODAyMTFfY2hhbjJpZWVlKGljLCBjaGFu
KSwKQEAgLTQ5OTYsNyArNTI0Nyw5IEBAIGF0aF9jaGFuX3NldChzdHJ1Y3QgYXRoX3NvZnRjICpz
Yywgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQogCQkgKiBoYXJkd2FyZSBhdCB0aGUg
bmV3IGZyZXF1ZW5jeSwgYW5kIHRoZW4gcmUtZW5hYmxlCiAJCSAqIHRoZSByZWxldmFudCBiaXRz
IG9mIHRoZSBoL3cuCiAJCSAqLworI2lmIDAKIAkJYXRoX2hhbF9pbnRyc2V0KGFoLCAwKTsJCS8q
IGRpc2FibGUgaW50ZXJydXB0cyAqLworI2VuZGlmCiAJCWF0aF9kcmFpbnR4cShzYywgQVRIX1JF
U0VUX0ZVTEwpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCQlhdGhfc3RvcHJlY3Yo
c2MpOwkJLyogdHVybiBvZmYgZnJhbWUgcmVjdiAqLwogCQlpZiAoIWF0aF9oYWxfcmVzZXQoYWgs
IHNjLT5zY19vcG1vZGUsIGNoYW4sIEFIX1RSVUUsICZzdGF0dXMpKSB7CkBAIC01MDA0LDcgKzUy
NTcsOCBAQCBhdGhfY2hhbl9zZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAy
MTFfY2hhbm5lbCAqY2hhbikKIAkJCSAgICAiY2hhbm5lbCAldSAoJXUgTUh6LCBmbGFncyAweCV4
KSwgaGFsIHN0YXR1cyAldVxuIiwKIAkJCSAgICBfX2Z1bmNfXywgaWVlZTgwMjExX2NoYW4yaWVl
ZShpYywgY2hhbiksCiAJCQkgICAgY2hhbi0+aWNfZnJlcSwgY2hhbi0+aWNfZmxhZ3MsIHN0YXR1
cyk7Ci0JCQlyZXR1cm4gRUlPOworCQkJcmV0ID0gRUlPOworCQkJZ290byBmaW5pc2g7CiAJCX0K
IAkJc2MtPnNjX2RpdmVyc2l0eSA9IGF0aF9oYWxfZ2V0ZGl2ZXJzaXR5KGFoKTsKIApAQCAtNTAx
Nyw3ICs1MjcxLDggQEAgYXRoX2NoYW5fc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qg
aWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pCiAJCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7
CiAJCQlpZl9wcmludGYoaWZwLCAiJXM6IHVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIs
CiAJCQkgICAgX19mdW5jX18pOwotCQkJcmV0dXJuIEVJTzsKKwkJCXJldCA9IEVJTzsKKwkJCWdv
dG8gZmluaXNoOwogCQl9CiAKIAkJLyoKQEAgLTUwMzksMTIgKzUyOTQsMjggQEAgYXRoX2NoYW5f
c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4p
CiAJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJCX0KIAorI2lmIDAKIAkJLyoKIAkJ
ICogUmUtZW5hYmxlIGludGVycnVwdHMuCiAJCSAqLwogCQlhdGhfaGFsX2ludHJzZXQoYWgsIHNj
LT5zY19pbWFzayk7CisjZW5kaWYKIAl9Ci0JcmV0dXJuIDA7CisKK2ZpbmlzaDoKKwlBVEhfUENV
X0xPQ0soc2MpOworCXNjLT5zY19pbnJlc2V0X2NudC0tOworCS8qIFhYWCBvbmx5IGRvIHRoaXMg
aWYgc2NfaW5yZXNldF9jbnQgPT0gMD8gKi8KKwlpZiAoZG9pbnRyKQorCQlhdGhfaGFsX2ludHJz
ZXQoYWgsIHNjLT5zY19pbWFzayk7CisJQVRIX1BDVV9VTkxPQ0soc2MpOworCisJLyogWFhYIGRv
IHRoaXMgaW5zaWRlIG9mIElGX0xPQ0s/ICovCisJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9E
UlZfT0FDVElWRTsKKwlhdGhfdHhyeF9zdGFydChzYyk7CisJLyogWFhYIGF0aF9zdGFydD8gKi8K
KworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01MDg3LDcgKzUzNTgsMTggQEAgYXRoX2NhbGli
cmF0ZSh2b2lkICphcmcpCiAJCQlEUFJJTlRGKHNjLCBBVEhfREVCVUdfQ0FMSUJSQVRFLAogCQkJ
CSIlczogcmZnYWluIGNoYW5nZVxuIiwgX19mdW5jX18pOwogCQkJc2MtPnNjX3N0YXRzLmFzdF9w
ZXJfcmZnYWluKys7CisJCQkvKgorCQkJICogRHJvcCBsb2NrIC0gd2UgY2FuJ3QgaG9sZCBpdCBh
Y3Jvc3MgdGhlCisJCQkgKiBhdGhfcmVzZXQoKSBjYWxsLiBJbnN0ZWFkLCB3ZSdsbCBkcm9wCisJ
CQkgKiBvdXQgaGVyZSwgZG8gYSByZXNldCwgdGhlbiByZXNjaGVkdWxlCisJCQkgKiB0aGUgY2Fs
bG91dC4KKwkJCSAqLworCQkJY2FsbG91dF9yZXNldCgmc2MtPnNjX2NhbF9jaCwgMSwgYXRoX2Nh
bGlicmF0ZSwgc2MpOworCQkJc2MtPnNjX3Jlc2V0Y2FsID0gMDsKKwkJCXNjLT5zY19kb3Jlc2V0
Y2FsID0gQUhfVFJVRTsKKwkJCUFUSF9VTkxPQ0soc2MpOwogCQkJYXRoX3Jlc2V0KGlmcCwgQVRI
X1JFU0VUX05PTE9TUyk7CisJCQlyZXR1cm47CiAJCX0KIAkJLyoKIAkJICogSWYgdGhpcyBsb25n
IGNhbCBpcyBhZnRlciBhbiBpZGxlIHBlcmlvZCwgdGhlbgpAQCAtNTc0Miw2ICs2MDI0LDcgQEAg
c3RhdGljIHZvaWQKIGF0aF93YXRjaGRvZyh2b2lkICphcmcpCiB7CiAJc3RydWN0IGF0aF9zb2Z0
YyAqc2MgPSBhcmc7CisJaW50IGRvX3Jlc2V0ID0gMDsKIAogCWlmIChzYy0+c2Nfd2RfdGltZXIg
IT0gMCAmJiAtLXNjLT5zY193ZF90aW1lciA9PSAwKSB7CiAJCXN0cnVjdCBpZm5ldCAqaWZwID0g
c2MtPnNjX2lmcDsKQEAgLTU3NTMsMTAgKzYwMzYsMjAgQEAgYXRoX3dhdGNoZG9nKHZvaWQgKmFy
ZykKIAkJCSAgICBoYW5ncyAmIDB4ZmYgPyAiYmIiIDogIm1hYyIsIGhhbmdzKTsKIAkJfSBlbHNl
CiAJCQlpZl9wcmludGYoaWZwLCAiZGV2aWNlIHRpbWVvdXRcbiIpOwotCQlhdGhfcmVzZXQoaWZw
LCBBVEhfUkVTRVRfTk9MT1NTKTsKKwkJZG9fcmVzZXQgPSAxOwogCQlpZnAtPmlmX29lcnJvcnMr
KzsKIAkJc2MtPnNjX3N0YXRzLmFzdF93YXRjaGRvZysrOwogCX0KKworCS8qCisJICogV2UgY2Fu
J3QgaG9sZCB0aGUgbG9jayBhY3Jvc3MgdGhlIGF0aF9yZXNldCgpIGNhbGwuCisJICovCisJaWYg
KGRvX3Jlc2V0KSB7CisJCUFUSF9VTkxPQ0soc2MpOworCQlhdGhfcmVzZXQoc2MtPnNjX2lmcCwg
QVRIX1JFU0VUX05PTE9TUyk7CisJCUFUSF9MT0NLKHNjKTsKKwl9CisKIAljYWxsb3V0X3NjaGVk
dWxlKCZzYy0+c2Nfd2RfY2gsIGh6KTsKIH0KIApkaWZmIC0tZ2l0IGEvc3lzL2Rldi9hdGgvaWZf
YXRoX3R4LmMgYi9zeXMvZGV2L2F0aC9pZl9hdGhfdHguYwppbmRleCBiOGM0YzgwLi41NjI1YmYy
IDEwMDY0NAotLS0gYS9zeXMvZGV2L2F0aC9pZl9hdGhfdHguYworKysgYi9zeXMvZGV2L2F0aC9p
Zl9hdGhfdHguYwpAQCAtNDc3LDggKzQ3Nyw2IEBAIGF0aF90eF9oYW5kb2ZmX21jYXN0KHN0cnVj
dCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAogCXR4cS0+YXhxX2xpbmsgPSAm
YmYtPmJmX2xhc3Rkcy0+ZHNfbGluazsKIH0KIAotCi0KIC8qCiAgKiBIYW5kLW9mZiBwYWNrZXQg
dG8gYSBoYXJkd2FyZSBxdWV1ZS4KICAqLwpAQCAtNTAxLDYgKzQ5OSwzNiBAQCBhdGhfdHhfaGFu
ZG9mZl9odyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwgc3RydWN0
IGF0aF9idWYgKmJmKQogCUtBU1NFUlQodHhxLT5heHFfcW51bSAhPSBBVEhfVFhRX1NXUSwKIAkg
ICAgICgiYXRoX3R4X2hhbmRvZmZfaHcgY2FsbGVkIGZvciBtY2FzdCBxdWV1ZSIpKTsKIAorI2lm
IDAKKwkvKgorCSAqIFRoaXMgY2F1c2VzIGEgTE9SLiBGaW5kIG91dCB3aGVyZSB0aGUgUENVIGxv
Y2sgaXMgYmVpbmcKKwkgKiBoZWxkIHdoaWxzdCB0aGUgVFhRIGxvY2sgaXMgZ3JhYmJlZCAtIHRo
YXQgc2hvdWxkbid0CisJICogYmUgb2NjdXJpbmcuCisJICovCisJQVRIX1BDVV9MT0NLKHNjKTsK
KwlpZiAoc2MtPnNjX2lucmVzZXRfY250KSB7CisJCUFUSF9QQ1VfVU5MT0NLKHNjKTsKKwkJRFBS
SU5URihzYywgQVRIX0RFQlVHX1JFU0VULAorCQkgICAgIiVzOiBjYWxsZWQgd2l0aCBzY19pbl9y
ZXNldCAhPSAwXG4iLAorCQkgICAgX19mdW5jX18pOworCQlEUFJJTlRGKHNjLCBBVEhfREVCVUdf
WE1JVCwKKwkJICAgICIlczogcXVldWVkOiBUWERQWyV1XSA9ICVwICglcCkgZGVwdGggJWRcbiIs
CisJCSAgICBfX2Z1bmNfXywgdHhxLT5heHFfcW51bSwKKwkJICAgIChjYWRkcl90KWJmLT5iZl9k
YWRkciwgYmYtPmJmX2Rlc2MsCisJCSAgICB0eHEtPmF4cV9kZXB0aCk7CisJCUFUSF9UWFFfSU5T
RVJUX1RBSUwodHhxLCBiZiwgYmZfbGlzdCk7CisJCWlmIChiZi0+YmZfc3RhdGUuYmZzX2FnZ3Ip
CisJCQl0eHEtPmF4cV9hZ2dyX2RlcHRoKys7CisJCS8qCisJCSAqIFRoZXJlJ3Mgbm8gbmVlZCB0
byB1cGRhdGUgYXhxX2xpbms7IHRoZSBoYXJkd2FyZQorCQkgKiBpcyBpbiByZXNldCBhbmQgb25j
ZSB0aGUgcmVzZXQgaXMgY29tcGxldGUsIGFueQorCQkgKiBub24tZW1wdHkgcXVldWVzIHdpbGwg
c2ltcGx5IGhhdmUgRE1BIHJlc3RhcnRlZC4KKwkJICovCisJCXJldHVybjsKKwkJfQorCUFUSF9Q
Q1VfVU5MT0NLKHNjKTsKKyNlbmRpZgorCiAJLyogRm9yIG5vdywgc28gbm90IHRvIGdlbmVyYXRl
IHdoaXRlc3BhY2UgZGlmZnMgKi8KIAlpZiAoMSkgewogI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JU
X1RETUEKQEAgLTE2ODgsNiArMTcxNiwxNyBAQCBhdGhfcmF3X3htaXQoc3RydWN0IGllZWU4MDIx
MV9ub2RlICpuaSwgc3RydWN0IG1idWYgKm0sCiAJc3RydWN0IGF0aF9idWYgKmJmOwogCWludCBl
cnJvcjsKIAorCUFUSF9QQ1VfTE9DSyhzYyk7CisJaWYgKHNjLT5zY19pbnJlc2V0X2NudCA+IDAp
IHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LCAiJXM6IHNjX2lucmVzZXRfY250ID4gMDsg
YmFpbGluZ1xuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJZXJyb3IgPSBFSU87CisJCUFUSF9QQ1Vf
VU5MT0NLKHNjKTsKKwkJZ290byBiYWQwOworCX0KKwlzYy0+c2NfdHhzdGFydF9jbnQrKzsKKwlB
VEhfUENVX1VOTE9DSyhzYyk7CisKIAlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9S
VU5OSU5HKSA9PSAwIHx8IHNjLT5zY19pbnZhbGlkKSB7CiAJCURQUklOVEYoc2MsIEFUSF9ERUJV
R19YTUlULCAiJXM6IGRpc2NhcmQgZnJhbWUsICVzIiwgX19mdW5jX18sCiAJCSAgICAoaWZwLT5p
Zl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDAgPwpAQCAtMTczMCwxNSArMTc2OSwy
NCBAQCBhdGhfcmF3X3htaXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYg
Km0sCiAJaWZwLT5pZl9vcGFja2V0cysrOwogCXNjLT5zY19zdGF0cy5hc3RfdHhfcmF3Kys7CiAK
KwlBVEhfUENVX0xPQ0soc2MpOworCXNjLT5zY190eHN0YXJ0X2NudC0tOworCUFUSF9QQ1VfVU5M
T0NLKHNjKTsKKwogCXJldHVybiAwOwogYmFkMjoKIAlBVEhfVFhCVUZfTE9DSyhzYyk7CiAJVEFJ
TFFfSU5TRVJUX0hFQUQoJnNjLT5zY190eGJ1ZiwgYmYsIGJmX2xpc3QpOwogCUFUSF9UWEJVRl9V
TkxPQ0soc2MpOwogYmFkOgorCUFUSF9QQ1VfTE9DSyhzYyk7CisJc2MtPnNjX3R4c3RhcnRfY250
LS07CisJQVRIX1BDVV9VTkxPQ0soc2MpOworYmFkMDoKIAlpZnAtPmlmX29lcnJvcnMrKzsKIAlz
Yy0+c2Nfc3RhdHMuYXN0X3R4X3Jhd19mYWlsKys7CiAJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7
CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL3N5cy9kZXYvYXRoL2lmX2F0aHZh
ci5oIGIvc3lzL2Rldi9hdGgvaWZfYXRodmFyLmgKaW5kZXggMjE4MjlhNjIuLjMzMWJlYTQgMTAw
NjQ0Ci0tLSBhL3N5cy9kZXYvYXRoL2lmX2F0aHZhci5oCisrKyBiL3N5cy9kZXYvYXRoL2lmX2F0
aHZhci5oCkBAIC00MjQsNiArNDI0LDcgQEAgc3RydWN0IGF0aF9zb2Z0YyB7CiAJdV9pbnQJCQlz
Y190eGFudGVubmE7CS8qIHR4IGFudGVubmEgKGZpeGVkIG9yIGF1dG8pICovCiAKIAlIQUxfSU5U
CQkJc2NfaW1hc2s7CS8qIGludGVycnVwdCBtYXNrIGNvcHkgKi8KKwogCS8qCiAJICogVGhlc2Ug
YXJlIG1vZGlmaWVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhcyB3ZWxsIGFzCiAJICogdGhl
IHRhc2sgcXVldWVzIGFuZCBvdGhlciBjb250ZXh0cy4gVGh1cyB0aGVzZSBtdXN0IGJlCkBAIC00
MzQsNiArNDM1LDEyIEBAIHN0cnVjdCBhdGhfc29mdGMgewogCSAqLwogCXVpbnQzMl90CQlzY190
eHFfYWN0aXZlOwkvKiBiaXRtYXAgb2YgYWN0aXZlIFRYUXMgKi8KIAl1aW50MzJfdAkJc2Nfa2lj
a3BjdTsJLyogd2hldGhlciB0byBraWNrIHRoZSBQQ1UgKi8KKwl1aW50MzJfdAkJc2Nfcnhwcm9j
X2NudDsJLyogSW4gUlggcHJvY2Vzc2luZyAqLworCXVpbnQzMl90CQlzY190eHByb2NfY250Owkv
KiBJbiBUWCBwcm9jZXNzaW5nICovCisJdWludDMyX3QJCXNjX3R4c3RhcnRfY250OwkvKiBJbiBU
WCBvdXRwdXQgKHJhdy9zdGFydCkgKi8KKwl1aW50MzJfdAkJc2NfaW5yZXNldF9jbnQ7CS8qIElu
IGFjdGl2ZSByZXNldC9jaGFuY2hhbmdlICovCisJdWludDMyX3QJCXNjX3R4cnhfY250OwkvKiBy
ZWZjb3VudCBvbiBzdG9wL3N0YXJ0J2luZyBUWCAqLworCXVpbnQzMl90CQlzY19pbnRyX2NudDsJ
LyogcmVmY291bnQgb24gaW50ZXJydXB0IGhhbmRsaW5nICovCiAKIAl1X2ludAkJCXNjX2tleW1h
eDsJLyogc2l6ZSBvZiBrZXkgY2FjaGUgKi8KIAl1X2ludDhfdAkJc2Nfa2V5bWFwW0FUSF9LRVlC
WVRFU107Lyoga2V5IHVzZSBiaXQgbWFwICovCkBAIC01NTMsNiArNTYwLDcgQEAgc3RydWN0IGF0
aF9zb2Z0YyB7CiAjZGVmaW5lCUFUSF9MT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4
KQogI2RlZmluZQlBVEhfVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHgpCiAj
ZGVmaW5lCUFUSF9MT0NLX0FTU0VSVChfc2MpCW10eF9hc3NlcnQoJihfc2MpLT5zY19tdHgsIE1B
X09XTkVEKQorI2RlZmluZQlBVEhfVU5MT0NLX0FTU0VSVChfc2MpCW10eF9hc3NlcnQoJihfc2Mp
LT5zY19tdHgsIE1BX05PVE9XTkVEKQogCiAvKgogICogVGhlIFBDVSBsb2NrIGlzIG5vbi1yZWN1
cnNpdmUgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc3BpbmxvY2suCkBAIC01ODQsNiArNTky
LDggQEAgc3RydWN0IGF0aF9zb2Z0YyB7CiAjZGVmaW5lCUFUSF9QQ1VfVU5MT0NLKF9zYykJCW10
eF91bmxvY2soJihfc2MpLT5zY19wY3VfbXR4KQogI2RlZmluZQlBVEhfUENVX0xPQ0tfQVNTRVJU
KF9zYykJbXR4X2Fzc2VydCgmKF9zYyktPnNjX3BjdV9tdHgsCVwKIAkJTUFfT1dORUQpCisjZGVm
aW5lCUFUSF9QQ1VfVU5MT0NLX0FTU0VSVChfc2MpCW10eF9hc3NlcnQoJihfc2MpLT5zY19wY3Vf
bXR4LAlcCisJCU1BX05PVE9XTkVEKQogCiAjZGVmaW5lCUFUSF9UWFFfU0VUVVAoc2MsIGkpCSgo
c2MpLT5zY190eHFzZXR1cCAmICgxPDxpKSkKIAo=
--20cf3079b74e69c3da04b1ddf704--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=pGe9ioddPWuvZmzeFnRJ_2Gu23GtMKw7CEX1i8351qA>