Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 May 2011 17:01:11 +0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        freebsd-wireless@freebsd.org
Subject:   Re: [net80211] patch: properly handle sequence checking for HT non-aggregation; refactor out shared code
Message-ID:  <BANLkTimrLqOFA9w7Lp3w-HTa7JyZeGBU%2BA@mail.gmail.com>
In-Reply-To: <BANLkTimseMFe-=y-1rkK%2BhaAxskV6usSfg@mail.gmail.com>
References:  <BANLkTimseMFe-=y-1rkK%2BhaAxskV6usSfg@mail.gmail.com>

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

Hi,

Here's an updated diff. I noticed that with this diff, the number of
TCP out of order complaints dropped dramatically but I was seeing them
when the following occured:

wlan0: [00:23:6c:bf:38:3e] discard duplicate frame, seqno <0,4095>
fragno <0,0> tid 0

This is likely also occuring with non-HT (11a/11bg) QoS operation
chips in -HEAD and -8.

Whenever I saw that above being logged (among lots of other logged
duplicate discards, so I know it wasn't just "serial IO" related) I
saw a burst of out-of-order packets/bytes in the receiving side TCP
stack and a drop in throughput.

The current patch adds the following checks:

* if the last seen seqnum is 4095, then retransmissions of the last
seen fragment is eliminated (like the normal codepath intended to do
but didn't);
* else if the last seen seqnum is 4095, allow any subsequent packet.
This may be wrong for fragments (and I may add a check for rxseq !=
4095)) but any subsequent sequence will have a seqnum of < 4095
because of the 12 bit seqnum wrap.
* else (ie, the last seen seqnum isn't 4095), eliminate retransmits
for seq+frag <= last seen.

This almost entirely eliminates the speed drops I've seen in 11n
non-aggregation mode and almost entirely eliminates the burst of
out-of-order packets/bytes. The only time I'm seeing them now is when
the baseband hangs and the interface is reset.



Adrian

--20cf307d064cd6489e04a247433f
Content-Type: application/octet-stream; name="net80211-rxseq-ht-2.diff"
Content-Disposition: attachment; filename="net80211-rxseq-ht-2.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gn76j6jz1

SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfc3RhLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25l
dDgwMjExL2llZWU4MDIxMV9zdGEuYwkocmV2aXNpb24gMjIwOTExKQorKysgc3lzL25ldDgwMjEx
L2llZWU4MDIxMV9zdGEuYwkod29ya2luZyBjb3B5KQpAQCAtNTEyLDcgKzUxMiw2IEBACiBzdGF0
aWMgaW50CiBzdGFfaW5wdXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYg
Km0sIGludCByc3NpLCBpbnQgbmYpCiB7Ci0jZGVmaW5lCVNFUV9MRVEoYSxiKQkoKGludCkoKGEp
LShiKSkgPD0gMCkKICNkZWZpbmUJSEFTX1NFUSh0eXBlKQkoKHR5cGUgJiAweDQpID09IDApCiAJ
c3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjEx
Y29tICppYyA9IG5pLT5uaV9pYzsKQEAgLTU5MSw5ICs1OTAsNyBAQAogCQkJICAgIFRJRF9UT19X
TUVfQUModGlkKSA+PSBXTUVfQUNfVkkpCiAJCQkJaWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZp
YysrOwogCQkJcnhzZXEgPSBsZTE2dG9oKCoodWludDE2X3QgKil3aC0+aV9zZXEpOwotCQkJaWYg
KChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgPT0gMCAmJgotCQkJICAgICh3aC0+
aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkpICYmCi0JCQkgICAgU0VRX0xFUShyeHNlcSwg
bmktPm5pX3J4c2Vxc1t0aWRdKSkgeworCQkJaWYgKCEgaWVlZTgwMjExX2NoZWNrX3J4c2VxKG5p
LCB3aCkpIHsKIAkJCQkvKiBkdXBsaWNhdGUsIGRpc2NhcmQgKi8KIAkJCQlJRUVFODAyMTFfRElT
Q0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0lOUFVULAogCQkJCSAgICBic3NpZCwgImR1cGxp
Y2F0ZSIsCkBAIC05MTAsNyArOTA3LDYgQEAKIAkJbV9mcmVlbShtKTsKIAl9CiAJcmV0dXJuIHR5
cGU7Ci0jdW5kZWYgU0VRX0xFUQogfQogCiBzdGF0aWMgdm9pZApJbmRleDogc3lzL25ldDgwMjEx
L2llZWU4MDIxMV93ZHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3dk
cy5jCShyZXZpc2lvbiAyMjA5MTEpCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3dkcy5jCSh3
b3JraW5nIGNvcHkpCkBAIC00MDYsNyArNDA2LDYgQEAKIHN0YXRpYyBpbnQKIHdkc19pbnB1dChz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBu
ZikKIHsKLSNkZWZpbmUJU0VRX0xFUShhLGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQogI2RlZmlu
ZQlIQVNfU0VRKHR5cGUpCSgodHlwZSAmIDB4NCkgPT0gMCkKIAlzdHJ1Y3QgaWVlZTgwMjExdmFw
ICp2YXAgPSBuaS0+bmlfdmFwOwogCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2lj
OwpAQCAtNDk1LDkgKzQ5NCw3IEBACiAJCSAgICBUSURfVE9fV01FX0FDKHRpZCkgPj0gV01FX0FD
X1ZJKQogCQkJaWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZpYysrOwogCQlyeHNlcSA9IGxlMTZ0
b2goKih1aW50MTZfdCAqKXdoLT5pX3NlcSk7Ci0JCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgw
MjExX05PREVfSFQpID09IDAgJiYKLQkJICAgICh3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFf
UkVUUlkpICYmCi0JCSAgICBTRVFfTEVRKHJ4c2VxLCBuaS0+bmlfcnhzZXFzW3RpZF0pKSB7CisJ
CWlmICghIGllZWU4MDIxMV9jaGVja19yeHNlcShuaSwgd2gpKSB7CiAJCQkvKiBkdXBsaWNhdGUs
IGRpc2NhcmQgKi8KIAkJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9NU0df
SU5QVVQsCiAJCQkgICAgd2gtPmlfYWRkcjEsICJkdXBsaWNhdGUiLApAQCAtNzQxLDcgKzczOCw2
IEBACiAJCW1fZnJlZW0obSk7CiAJfQogCXJldHVybiB0eXBlOwotI3VuZGVmIFNFUV9MRVEKIH0K
IAogc3RhdGljIHZvaWQKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaG9zdGFwLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkocmV2aXNpb24gMjIw
OTExKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkod29ya2luZyBjb3B5KQpA
QCAtNDcyLDcgKzQ3Miw2IEBACiBzdGF0aWMgaW50CiBob3N0YXBfaW5wdXQoc3RydWN0IGllZWU4
MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYgKm0sIGludCByc3NpLCBpbnQgbmYpCiB7Ci0jZGVm
aW5lCVNFUV9MRVEoYSxiKQkoKGludCkoKGEpLShiKSkgPD0gMCkKICNkZWZpbmUJSEFTX1NFUSh0
eXBlKQkoKHR5cGUgJiAweDQpID09IDApCiAJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmkt
Pm5pX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKQEAgLTU3Miw5
ICs1NzEsNyBAQAogCQkJICAgIFRJRF9UT19XTUVfQUModGlkKSA+PSBXTUVfQUNfVkkpCiAJCQkJ
aWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZpYysrOwogCQkJcnhzZXEgPSBsZTE2dG9oKCoodWlu
dDE2X3QgKil3aC0+aV9zZXEpOwotCQkJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E
RV9IVCkgPT0gMCAmJgotCQkJICAgICh3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkp
ICYmCi0JCQkgICAgU0VRX0xFUShyeHNlcSwgbmktPm5pX3J4c2Vxc1t0aWRdKSkgeworCQkJaWYg
KCEgaWVlZTgwMjExX2NoZWNrX3J4c2VxKG5pLCB3aCkpIHsKIAkJCQkvKiBkdXBsaWNhdGUsIGRp
c2NhcmQgKi8KIAkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0lO
UFVULAogCQkJCSAgICBic3NpZCwgImR1cGxpY2F0ZSIsCkBAIC05MTQsNyArOTExLDYgQEAKIAkJ
bV9mcmVlbShtKTsKIAl9CiAJcmV0dXJuIHR5cGU7Ci0jdW5kZWYgU0VRX0xFUQogfQogCiBzdGF0
aWMgdm9pZApJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMJKHJldmlzaW9uIDIyMDkxMSkKKysrIHN5
cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDcgKzEw
NDAsNiBAQAogc3RhdGljIGludAogbWVzaF9pbnB1dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
LCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIHsKLSNkZWZpbmUJU0VRX0xFUShh
LGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQogI2RlZmluZQlIQVNfU0VRKHR5cGUpCSgodHlwZSAm
IDB4NCkgPT0gMCkKIAlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCXN0
cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOwpAQCAtMTA5NCw5ICsxMDkzLDcgQEAK
IAkJCSAgICBUSURfVE9fV01FX0FDKHRpZCkgPj0gV01FX0FDX1ZJKQogCQkJCWljLT5pY193bWUu
d21lX2hpcHJpX3RyYWZmaWMrKzsKIAkJCXJ4c2VxID0gbGUxNnRvaCgqKHVpbnQxNl90ICopd2gt
Pmlfc2VxKTsKLQkJCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpID09IDAg
JiYKLQkJCSAgICAod2gtPmlfZmNbMV0gJiBJRUVFODAyMTFfRkMxX1JFVFJZKSAmJgotCQkJICAg
IFNFUV9MRVEocnhzZXEsIG5pLT5uaV9yeHNlcXNbdGlkXSkpIHsKKwkJCWlmICghIGllZWU4MDIx
MV9jaGVja19yeHNlcShuaSwgd2gpKSB7CiAJCQkJLyogZHVwbGljYXRlLCBkaXNjYXJkICovCiAJ
CQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19JTlBVVCwKIAkJCQkg
ICAgd2gtPmlfYWRkcjEsICJkdXBsaWNhdGUiLApJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIx
MV9pbnB1dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaW5wdXQuYwko
cmV2aXNpb24gMjIwOTExKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9pbnB1dC5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NjAsNiArNzYwLDkwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBD
aGVjayB0aGUgY3VycmVudCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgYWdhaW5zdCB0aGUgY3VycmVu
dCBUSUQKKyAqIHN0YXRlIGFuZCByZXR1cm4gd2hldGhlciBpdCdzIGluIHNlcXVlbmNlIG9yIHNo
b3VsZCBiZSBkcm9wcGVkLgorICovCitpbnQKK2llZWU4MDIxMV9jaGVja19yeHNlcShzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aCkKK3sKKyNkZWZp
bmUJU0VRX0xFUShhLGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQorI2RlZmluZQlTRVFfRVEoYSxi
KQkoKGludCkoKGEpLShiKSkgPT0gMCkKKyNkZWZpbmUJSEFTX1NFUSh0eXBlKQkoKHR5cGUgJiAw
eDQpID09IDApCisjZGVmaW5lCVNFUU5PKGEpCSgoYSkgPj4gSUVFRTgwMjExX1NFUV9TRVFfU0hJ
RlQpCisjZGVmaW5lCUZSQUdOTyhhKQkoKGEpICYgSUVFRTgwMjExX1NFUV9GUkFHX01BU0spCisJ
dWludDE2X3QgcnhzZXE7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3QgdGlkOworCXN0cnVjdCBp
ZWVlODAyMTFfcnhfYW1wZHUgKnJhcDsKKworCXJ4c2VxID0gbGUxNnRvaCgqKHVpbnQxNl90ICop
d2gtPmlfc2VxKTsKKwl0eXBlID0gd2gtPmlfZmNbMF0gJiBJRUVFODAyMTFfRkMwX1RZUEVfTUFT
SzsKKworCS8qIFR5cGVzIHdpdGggbm8gc2VxdWVuY2UgbnVtYmVyIGFyZSBhbHdheXMgdHJlYXRl
ZCB2YWxpZCAqLworCWlmICghIEhBU19TRVEodHlwZSkpCisJCXJldHVybiAxOworCisJdGlkID0g
aWVlZTgwMjExX2dldHRpZCh3aCk7CisKKwkvKgorCSAqIE9ubHkgZG8gdGhlIEhUIEFNUERVIGNo
ZWNrIGZvciBXTUUgc3RhdGlvbnM7IG5vbi1XTUUgSFQgc3RhdGlvbnMKKwkgKiBzaG91bGRuJ3Qg
ZXhpc3Qgb3V0c2lkZSBvZiBkZWJ1Z2dpbmcuIFdlIHNob3VsZCBhdCBsZWFzdAorCSAqIGhhbmRs
ZSB0aGF0LgorCSAqLworCWlmICh0aWQgPCBXTUVfTlVNX1RJRCkgeworCQlyYXAgPSAmbmktPm5p
X3J4X2FtcGR1W3RpZF07CisJCS8qIEhUIG5vZGVzIGN1cnJlbnRseSBkb2luZyBSWCBBTVBEVSBh
cmUgYWx3YXlzIHZhbGlkICovCisJCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVf
SFQpICYmCisJCSAgICAocmFwLT5yeGFfZmxhZ3MgJiBJRUVFODAyMTFfQUdHUl9SVU5OSU5HKSkK
KwkJCXJldHVybiAxOworCX0KKworCS8qCQorCSAqIE90aGVyd2lzZSwgcmV0cmllcyBmb3IgcGFj
a2V0cyBiZWxvdyBvciBlcXVhbCB0byB0aGUgbGFzdAorCSAqIHNlZW4gc2VxdWVuY2UgbnVtYmVy
IHNob3VsZCBiZSBkcm9wcGVkLgorCSAqCisJICogWFhYIFRoaXMgc2hvdWxkIGJlIHJldmlzaXRl
ZCB0byB0cnVlbHkgaWRlbnRpZnkvbG9nIHZlcnkKKwkgKiBYWFggb3V0IG9mIG9yZGVyIHBhY2tl
dHMgKGR1ZSB0byB2ZW5kb3IgYnVncyksIHJhdGhlciB0aGFuCisJICogWFhYIHNpbXBseSByZXRy
YW5zbWl0cy4KKwkgKi8KKworCS8qIEZvciBub3csIHRyZWF0IGZyYW1lIHNlcW51bSA0MDk1IGFz
IHNwZWNpYWwuICovCisKKwkvKgorCSAqIERyb3AgcmV0cmFuc21pdHMgb24gc2VxbnVtIDQwOTUg
Zm9yIGl0c2VsZi4KKwkgKi8KKwlpZiAoKFNFUU5PKG5pLT5uaV9yeHNlcXNbdGlkXSkgPT0gNDA5
NSkgJiYKKwkgICAgU0VRX0VRKHJ4c2VxLCBuaS0+bmlfcnhzZXFzW3RpZF0pICYmCisJICAgICh3
aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkpKQorCQlyZXR1cm4gMDsKKworCS8qCisJ
ICogVHJlYXQgYW55IHN1YnNlcXVlbnQgZnJhbWUgYXMgZmluZSBpZiB0aGUgbGFzdCBzZWVuIGZy
YW1lCisJICogaXMgNDA5NSBhbmQgaXQncyBub3QgYSByZXRyYW5zbWl0IGZvciB0aGUgc2FtZSBz
ZXF1ZW5jZQorCSAqIG51bWJlci4KKwkgKi8KKwlpZiAoU0VRTk8obmktPm5pX3J4c2Vxc1t0aWRd
KSA9PSA0MDk1KQorCQlyZXR1cm4gMTsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCB3ZSBhc3N1
bWUgdGhhdCBzZXFudW1zIGJlbG93CisJICogdGhlIGN1cnJlbnQgYXJlIHJldHJhbnNtaXRzL291
dCBvZiBvcmRlciBwYWNrZXRzLgorCSAqIEVsaW1pbmF0ZSByZXRyYW5zbWl0cyBmb3IgdGhvc2Uu
CisJICovCisJaWYgKCh3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkpICYmCisJICAg
IFNFUV9MRVEocnhzZXEsIG5pLT5uaV9yeHNlcXNbdGlkXSkpCisJCXJldHVybiAwOworCisJcmV0
dXJuIDE7CisjdW5kZWYJU0VRX0xFUQorI3VuZGVmCVNFUV9FUQorI3VuZGVmCUhBU19TRVEKKyN1
bmRlZglTRVFOTworI3VuZGVmCUZSQUdOTworCit9CisKICNpZmRlZiBJRUVFODAyMTFfREVCVUcK
IC8qCiAgKiBEZWJ1Z2dpbmcgc3VwcG9ydC4KSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFf
aW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2lucHV0LmgJKHJl
dmlzaW9uIDIyMDkxMSkKKysrIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaW5wdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3LDQgKzE1Nyw2IEBACiBpbnQJaWVlZTgwMjExX3BhcnNlX2JlYWNvbihz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IG1idWYgKiwKIAkJc3RydWN0IGllZWU4MDIx
MV9zY2FucGFyYW1zICopOwogaW50CWllZWU4MDIxMV9wYXJzZV9hY3Rpb24oc3RydWN0IGllZWU4
MDIxMV9ub2RlICosIHN0cnVjdCBtYnVmICopOworaW50CWllZWU4MDIxMV9jaGVja19yeHNlcShz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAorCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aCk7
CiAjZW5kaWYgLyogX05FVDgwMjExX0lFRUU4MDIxMV9JTlBVVF9IXyAqLwpJbmRleDogc3lzL25l
dDgwMjExL2llZWU4MDIxMV9hZGhvYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfYWRob2MuYwkocmV2aXNpb24gMjIwOTExKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx
MV9hZGhvYy5jCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDYgQEAKIHN0YXRpYyBpbnQK
IGFkaG9jX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBtYnVmICptLCBp
bnQgcnNzaSwgaW50IG5mKQogewotI2RlZmluZQlTRVFfTEVRKGEsYikJKChpbnQpKChhKS0oYikp
IDw9IDApCiAjZGVmaW5lCUhBU19TRVEodHlwZSkJKCh0eXBlICYgMHg0KSA9PSAwKQogCXN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAq
aWMgPSBuaS0+bmlfaWM7CkBAIC00MTIsOSArNDExLDcgQEAKIAkJCSAgICBUSURfVE9fV01FX0FD
KHRpZCkgPj0gV01FX0FDX1ZJKQogCQkJCWljLT5pY193bWUud21lX2hpcHJpX3RyYWZmaWMrKzsK
IAkJCXJ4c2VxID0gbGUxNnRvaCgqKHVpbnQxNl90ICopd2gtPmlfc2VxKTsKLQkJCWlmICgobmkt
Pm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpID09IDAgJiYKLQkJCSAgICAod2gtPmlfZmNb
MV0gJiBJRUVFODAyMTFfRkMxX1JFVFJZKSAmJgotCQkJICAgIFNFUV9MRVEocnhzZXEsIG5pLT5u
aV9yeHNlcXNbdGlkXSkpIHsKKwkJCWlmICghIGllZWU4MDIxMV9jaGVja19yeHNlcShuaSwgd2gp
KSB7CiAJCQkJLyogZHVwbGljYXRlLCBkaXNjYXJkICovCiAJCQkJSUVFRTgwMjExX0RJU0NBUkRf
TUFDKHZhcCwgSUVFRTgwMjExX01TR19JTlBVVCwKIAkJCQkgICAgYnNzaWQsICJkdXBsaWNhdGUi
LApAQCAtNjYwLDcgKzY1Nyw2IEBACiAJCW1fZnJlZW0obSk7CiAJfQogCXJldHVybiB0eXBlOwot
I3VuZGVmIFNFUV9MRVEKIH0KIAogc3RhdGljIGludAo=
--20cf307d064cd6489e04a247433f--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BANLkTimrLqOFA9w7Lp3w-HTa7JyZeGBU%2BA>