Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Sep 2011 20:24:28 +0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        freebsd-wireless@freebsd.org
Subject:   [patch] if_ath_tx: change interrupt scheduling deferral
Message-ID:  <CAJ-VmoknpF_RhiXWL07GSOqWoHpy3L5Ma4kCptHq9MtfbfPO8w@mail.gmail.com>

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

Hi,

This patch changes how the deferred interrupt handling works. It's
likely I'll have to change things a bit before I commit it so I won't
be (yet) committing this.
It brings the interrupt handling in line with how ath9k and the
reference driver works. It eliminates a possible race condition:

* ath_intr() and ath_hal_getisr() set AH5212(ah)->ah_intrTxqs, which
is a bitmap of TXQs which need servicing;
* The ath TX processes call txqactive() which check the above bitmap
and clear the bit that's been tested.

The interrupt handler ath_intr() can be called during the TX
completion task, so I think it's possible that the interrupt could
occur, setting a TXQ bit, in between txqactive()'s "check bit X" and
"clear bit X".
My testing was only showing up one queue hang every 20-50 million
packets where the TXQ had active packets in it which were completed,
but hadn't been processed.

I've only just begun testing this. I'll post updates as they're needed.

Thanks,


Adrian

--20cf30563dc1128eb404ac9560ca
Content-Type: application/octet-stream; name="ar5416-int-sched.diff"
Content-Disposition: attachment; filename="ar5416-int-sched.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gsekhd1l0

SW5kZXg6IGlmX2F0aHZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmX2F0aHZhci5oCShyZXZpc2lvbiAy
MjU0NjcpCisrKyBpZl9hdGh2YXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDExLDYgKzQxMSw3IEBA
CiAJdV9pbnQJCQlzY19mZnR4cW1heDsJLyogbWF4IGZyYW1lcyBiZWZvcmUgZHJvcCAqLwogCXVf
aW50CQkJc2NfdHhhbnRlbm5hOwkvKiB0eCBhbnRlbm5hIChmaXhlZCBvciBhdXRvKSAqLwogCUhB
TF9JTlQJCQlzY19pbWFzazsJLyogaW50ZXJydXB0IG1hc2sgY29weSAqLworCUhBTF9JTlQJCQlz
Y19pbnRyc3RhdHVzOwkvKiBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgKi8KIAl1X2ludAkJCXNj
X2tleW1heDsJLyogc2l6ZSBvZiBrZXkgY2FjaGUgKi8KIAl1X2ludDhfdAkJc2Nfa2V5bWFwW0FU
SF9LRVlCWVRFU107Lyoga2V5IHVzZSBiaXQgbWFwICovCiAKQEAgLTQyOSw3ICs0MzAsNiBAQAog
CWF0aF9idWZoZWFkCQlzY19yeGJ1ZjsJLyogcmVjZWl2ZSBidWZmZXIgKi8KIAlzdHJ1Y3QgbWJ1
ZgkJKnNjX3J4cGVuZGluZzsJLyogcGVuZGluZyByZWNlaXZlIGRhdGEgKi8KIAl1X2ludDMyX3QJ
CSpzY19yeGxpbms7CS8qIGxpbmsgcHRyIGluIGxhc3QgUlggZGVzYyAqLwotCXN0cnVjdCB0YXNr
CQlzY19yeHRhc2s7CS8qIHJ4IGludCBwcm9jZXNzaW5nICovCiAJdV9pbnQ4X3QJCXNjX2RlZmFu
dDsJLyogY3VycmVudCBkZWZhdWx0IGFudGVubmEgKi8KIAl1X2ludDhfdAkJc2NfcnhvdGhlcmFu
dDsJLyogcngncyBvbiBub24tZGVmYXVsdCBhbnRlbm5hKi8KIAl1X2ludDY0X3QJCXNjX2xhc3Ry
eDsJLyogdHNmIGF0IGxhc3QgcngnZCBmcmFtZSAqLwpAQCAtNDQ2LDcgKzQ0Niw2IEBACiAJdV9p
bnQJCQlzY190eGludHJwZXJpb2Q7LyogdHggaW50ZXJydXB0IGJhdGNoaW5nICovCiAJc3RydWN0
IGF0aF90eHEJCXNjX3R4cVtIQUxfTlVNX1RYX1FVRVVFU107CiAJc3RydWN0IGF0aF90eHEJCSpz
Y19hYzJxWzVdOwkvKiBXTUUgQUMgLT4gaC93IHEgbWFwICovIAotCXN0cnVjdCB0YXNrCQlzY190
eHRhc2s7CS8qIHR4IGludCBwcm9jZXNzaW5nICovCiAJaW50CQkJc2Nfd2RfdGltZXI7CS8qIGNv
dW50IGRvd24gZm9yIHdkIHRpbWVyICovCiAJc3RydWN0IGNhbGxvdXQJCXNjX3dkX2NoOwkvKiB0
eCB3YXRjaGRvZyB0aW1lciAqLwogCXN0cnVjdCBhdGhfdHhfcmFkaW90YXBfaGVhZGVyIHNjX3R4
X3RoOwpAQCAtNDYwLDYgKzQ1OSw4IEBACiAJc3RydWN0IGF0aF90eHEJCSpzY19jYWJxOwkvKiB0
eCBxIGZvciBjYWIgZnJhbWVzICovCiAJc3RydWN0IHRhc2sJCXNjX2JtaXNzdGFzazsJLyogYm1p
c3MgaW50IHByb2Nlc3NpbmcgKi8KIAlzdHJ1Y3QgdGFzawkJc2NfYnN0dWNrdGFzazsJLyogc3R1
Y2sgYmVhY29uIHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3QgdGFzawkJc2NfaW50cnRhc2s7CS8qIGRl
ZmVycmVkIGludGVycnVwdCBwcm9jZXNzaW5nICovCisJc3RydWN0IHRhc2sJCXNjX2ZhdGFsdGFz
azsJLyogZGVmZXJyZWQgcmVzZXQgcHJvY2Vzc2luZyAqLwogCWVudW0gewogCQlPSywJCQkJLyog
bm8gY2hhbmdlIG5lZWRlZCAqLwogCQlVUERBVEUsCQkJCS8qIHVwZGF0ZSBwZW5kaW5nICovCklu
ZGV4OiBpZl9hdGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpZl9hdGguYwkocmV2aXNpb24gMjI1NDY3KQor
KysgaWZfYXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsNyBAQAogc3RhdGljIHZv
aWQJYXRoX3dhdGNoZG9nKHZvaWQgKik7CiBzdGF0aWMgaW50CWF0aF9pb2N0bChzdHJ1Y3QgaWZu
ZXQgKiwgdV9sb25nLCBjYWRkcl90KTsKIHN0YXRpYyB2b2lkCWF0aF9mYXRhbF9wcm9jKHZvaWQg
KiwgaW50KTsKK3N0YXRpYyB2b2lkCWF0aF9oYW5kbGVfaW50cih2b2lkICosIGludCk7CiBzdGF0
aWMgdm9pZAlhdGhfYm1pc3NfdmFwKHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CiBzdGF0aWMgdm9p
ZAlhdGhfYm1pc3NfcHJvYyh2b2lkICosIGludCk7CiBzdGF0aWMgdm9pZAlhdGhfa2V5X3VwZGF0
ZV9iZWdpbihzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwpAQCAtMTczLDggKzE3NCwxMCBAQAogc3Rh
dGljIGludAlhdGhfd21lX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExY29tICopOwogc3RhdGljIHZv
aWQJYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKiwgc3RydWN0IGF0aF90eHEgKik7
CiBzdGF0aWMgdm9pZAlhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICopOworI2lmIDAK
IHN0YXRpYyB2b2lkCWF0aF90eF9wcm9jX3EwKHZvaWQgKiwgaW50KTsKIHN0YXRpYyB2b2lkCWF0
aF90eF9wcm9jX3EwMTIzKHZvaWQgKiwgaW50KTsKKyNlbmRpZgogc3RhdGljIHZvaWQJYXRoX3R4
X3Byb2Modm9pZCAqLCBpbnQpOwogc3RhdGljIGludAlhdGhfY2hhbl9zZXQoc3RydWN0IGF0aF9z
b2Z0YyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKik7CiBzdGF0aWMgdm9pZAlhdGhfZHJh
aW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqKTsKQEAgLTM5NSw5ICszOTgsMTAgQEAKIAl0YXNrcXVl
dWVfc3RhcnRfdGhyZWFkcygmc2MtPnNjX3RxLCAxLCBQSV9ORVQsCiAJCSIlcyB0YXNrcSIsIGlm
cC0+aWZfeG5hbWUpOwogCi0JVEFTS19JTklUKCZzYy0+c2Nfcnh0YXNrLCAwLCBhdGhfcnhfcHJv
Yywgc2MpOwogCVRBU0tfSU5JVCgmc2MtPnNjX2JtaXNzdGFzaywgMCwgYXRoX2JtaXNzX3Byb2Ms
IHNjKTsKIAlUQVNLX0lOSVQoJnNjLT5zY19ic3R1Y2t0YXNrLDAsIGF0aF9ic3R1Y2tfcHJvYywg
c2MpOworCVRBU0tfSU5JVCgmc2MtPnNjX2ludHJ0YXNrLCAwLCBhdGhfaGFuZGxlX2ludHIsIHNj
KTsKKwlUQVNLX0lOSVQoJnNjLT5zY19mYXRhbHRhc2ssIDAsIGF0aF9mYXRhbF9wcm9jLCBzYyk7
CiAKIAkvKgogCSAqIEFsbG9jYXRlIGhhcmR3YXJlIHRyYW5zbWl0IHF1ZXVlczogb25lIHF1ZXVl
IGZvcgpAQCAtNDQ2LDIzICs0NTAsNiBAQAogCX0KIAogCS8qCi0JICogU3BlY2lhbCBjYXNlIGNl
cnRhaW4gY29uZmlndXJhdGlvbnMuICBOb3RlIHRoZQotCSAqIENBQiBxdWV1ZSBpcyBoYW5kbGVk
IGJ5IHRoZXNlIHNwZWNpYWxseSBzbyBkb24ndAotCSAqIGluY2x1ZGUgdGhlbSB3aGVuIGNoZWNr
aW5nIHRoZSB0eHEgc2V0dXAgbWFzay4KLQkgKi8KLQlzd2l0Y2ggKHNjLT5zY190eHFzZXR1cCAm
fiAoMTw8c2MtPnNjX2NhYnEtPmF4cV9xbnVtKSkgewotCWNhc2UgMHgwMToKLQkJVEFTS19JTklU
KCZzYy0+c2NfdHh0YXNrLCAwLCBhdGhfdHhfcHJvY19xMCwgc2MpOwotCQlicmVhazsKLQljYXNl
IDB4MGY6Ci0JCVRBU0tfSU5JVCgmc2MtPnNjX3R4dGFzaywgMCwgYXRoX3R4X3Byb2NfcTAxMjMs
IHNjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJVEFTS19JTklUKCZzYy0+c2NfdHh0YXNrLCAw
LCBhdGhfdHhfcHJvYywgc2MpOwotCQlicmVhazsKLQl9Ci0KLQkvKgogCSAqIFNldHVwIHJhdGUg
Y29udHJvbC4gIFNvbWUgcmF0ZSBjb250cm9sIG1vZHVsZXMKIAkgKiBjYWxsIGJhY2sgdG8gY2hh
bmdlIHRoZSBhbm50ZW5hIHN0YXRlIHNvIGV4cG9zZQogCSAqIHRoZSBuZWNlc3NhcnkgZW50cnkg
cG9pbnRzLgpAQCAtMTM0NSw2ICsxMzMyLDYzIEBACiB9CiAKIC8qCisgKiBEbyBkZWZlcnJlZCBp
bnRlcnJ1cHQgcHJvY2Vzc2luZzsgdGhlbiByZS1lbmFibGUgaW50ZXJydXB0cworICogaWYgcmVx
dWlyZWQuCisgKi8KK3N0YXRpYyB2b2lkCithdGhfaGFuZGxlX2ludHIodm9pZCAqYXJnLCBpbnQg
bnBlbmRpbmcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAq
KSBhcmc7CisJSEFMX0lOVCBzdGF0dXM7CisJc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2Fo
OworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPnNjX2lmcDsKKworCWlmIChzYy0+c2NfaW52YWxp
ZCkgeworCQkvKgorCQkgKiBUaGUgaGFyZHdhcmUgaXMgbm90IHJlYWR5L3ByZXNlbnQsIGRvbid0
IHRvdWNoIGFueXRoaW5nLgorCQkgKiBOb3RlIHRoaXMgY2FuIGhhcHBlbiBlYXJseSBvbiBpZiB0
aGUgSVJRIGlzIHNoYXJlZC4KKwkJICovCisJCURQUklOVEYoc2MsIEFUSF9ERUJVR19BTlksICIl
czogaW52YWxpZDsgaWdub3JlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyoK
KwkgKiBGZXRjaCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGZyb20gdGhlIGludGVycnVw
dAorCSAqIGhhbmRsZXIuIEl0J3MgYXNzdW1lZCB0aGF0IGFueSBpbnRlcnJ1cHQgd2hpY2ggd291
bGQgbGVhZAorCSAqIHVzIGhlcmUgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnJ1cHQgaXMg
Y2xlYXJlZC4KKwkgKgorCSAqIFhYWCBUaHVzIEknbSBub3QgdXNpbmcgYSBsb2NrIGp1c3QgeWV0
LgorCSAqLworCXN0YXR1cyA9IHNjLT5zY19pbnRyc3RhdHVzOworCisJaWYgKHN0YXR1cyAmIEhB
TF9JTlRfRkFUQUwpIHsKKwkJYXRoX2hhbF9pbnRyc2V0KGFoLCAwKTsJCS8qIGRpc2FibGUgaW50
cidzIHVudGlsIHJlc2V0ICovCisJCWF0aF9mYXRhbF9wcm9jKHNjLCAwKTsKKwl9IGVsc2Ugewor
CQlpZiAoc3RhdHVzICYgKEhBTF9JTlRfUlhFT0wgfCBIQUxfSU5UX1JYKSkgeworCQkJYXRoX3J4
X3Byb2Moc2MsIDEpOworCQkJLyogWFhYIHRoaXMgbWF5IHJlc2V0IHRoZSBoYXJkd2FyZT8gU2hv
dWxkIGhhbmRsZSB0aGF0ISAqLworCQl9CisJCWlmIChzdGF0dXMgJiBIQUxfSU5UX1RYVVJOKSB7
CisJCQkvKiBidW1wIHR4IHRyaWdnZXIgbGV2ZWwgKi8KKwkJCWF0aF9oYWxfdXBkYXRldHh0cmln
bGV2ZWwoYWgsIEFIX1RSVUUpOworCQl9CisJCWlmIChzdGF0dXMgJiBIQUxfSU5UX1RYKSB7CisJ
CQlhdGhfdHhfcHJvYyhzYywgMSk7CisJCX0KKwkJLyoKKwkJICogSWYgVFggb3IgUlggb2NjdXJl
ZCwgY2FsbCBhdGhfc3RhcnQoKSBpZiB0aGUgaW50ZXJmYWNlCisJCSAqIGNhbiBncmFiIHNvbWUg
cGFja2V0cy4KKwkJICovCisJCWlmICghSUZRX0lTX0VNUFRZKCZpZnAtPmlmX3NuZCkpCisJCQlh
dGhfc3RhcnQoaWZwKTsKKwl9CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyAqLworCWF0aF9o
YWxfaW50cnNldChzYy0+c2NfYWgsIHNjLT5zY19pbWFzayk7Cit9CisKKy8qCiAgKiBJbnRlcnJ1
cHQgaGFuZGxlci4gIE1vc3Qgb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGlzIGRlZmVycmVkLgog
ICovCiB2b2lkCkBAIC0xMzU0LDYgKzEzOTgsNyBAQAogCXN0cnVjdCBpZm5ldCAqaWZwID0gc2Mt
PnNjX2lmcDsKIAlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CiAJSEFMX0lOVCBzdGF0
dXMgPSAwOworCWludCBzY2hlZCA9IDA7CiAKIAlpZiAoc2MtPnNjX2ludmFsaWQpIHsKIAkJLyoK
QEAgLTEzODksMTAgKzE0MzQsMTIgQEAKIAlpZiAoc3RhdHVzID09IDB4MCkKIAkJcmV0dXJuOwog
CisJLyogWFhYIGxvY2tpbmc/ICovCisJc2MtPnNjX2ludHJzdGF0dXMgPSBzdGF0dXM7CisKIAlp
ZiAoc3RhdHVzICYgSEFMX0lOVF9GQVRBTCkgewogCQlzYy0+c2Nfc3RhdHMuYXN0X2hhcmR3YXJl
Kys7Ci0JCWF0aF9oYWxfaW50cnNldChhaCwgMCk7CQkvKiBkaXNhYmxlIGludHIncyB1bnRpbCBy
ZXNldCAqLwotCQlhdGhfZmF0YWxfcHJvYyhzYywgMCk7CisJCXNjaGVkID0gMTsKIAl9IGVsc2Ug
ewogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9TV0JBKSB7CiAJCQkvKgpAQCAtMTQyMiwxMiArMTQ2
OSwxMiBAQAogCQkJCSAqIHRyYWZmaWMgc28gYW55IGZyYW1lcyBoZWxkIG9uIHRoZSBzdGFnaW5n
CiAJCQkJICogcXVldWUgYXJlIGFnZWQgYW5kIHBvdGVudGlhbGx5IGZsdXNoZWQuCiAJCQkJICov
CisJCQkJLyogWFhYIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFuIHJ4dGFzaz8gSG93IHRvIGZvcmNlPyAq
LwogCQkJCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19yeHRhc2spOwogI2Vu
ZGlmCiAJCQl9CiAJCX0KIAkJaWYgKHN0YXR1cyAmIEhBTF9JTlRfUlhFT0wpIHsKLQkJCWludCBp
bWFzayA9IHNjLT5zY19pbWFzazsKIAkJCS8qCiAJCQkgKiBOQjogdGhlIGhhcmR3YXJlIHNob3Vs
ZCByZS1yZWFkIHRoZSBsaW5rIHdoZW4KIAkJCSAqICAgICBSWEUgYml0IGlzIHdyaXR0ZW4sIGJ1
dCBpdCBkb2Vzbid0IHdvcmsgYXQKQEAgLTE0NDMsMjkgKzE0OTAsMjMgQEAKIAkJCSAqIGJ5IGEg
Y2FsbCB0byBhdGhfcmVzZXQoKSBzb21laG93LCB0aGUKIAkJCSAqIGludGVycnVwdCBtYXNrIHdp
bGwgYmUgY29ycmVjdGx5IHJlcHJvZ3JhbW1lZC4KIAkJCSAqLwotCQkJaW1hc2sgJj0gfihIQUxf
SU5UX1JYRU9MIHwgSEFMX0lOVF9SWE9STik7Ci0JCQlhdGhfaGFsX2ludHJzZXQoYWgsIGltYXNr
KTsKLQkJCS8qCi0JCQkgKiBFbnF1ZXVlIGFuIFJYIHByb2MsIHRvIGhhbmRsZWQgd2hhdGV2ZXIK
LQkJCSAqIGlzIGluIHRoZSBSWCBxdWV1ZS4KLQkJCSAqIFRoaXMgd2lsbCB0aGVuIGtpY2sgdGhl
IFBDVS4KLQkJCSAqLwotCQkJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX3J4
dGFzayk7CisJCQkvKiBYWFggdGhpcyBpcyBhbHJlYWR5IHJlc2V0IGluIHRoZSBzY2hlZCBjYWxs
IGJlbG93ICovCiAJCQlzYy0+c2NfcnhsaW5rID0gTlVMTDsKIAkJCXNjLT5zY19raWNrcGN1ID0g
MTsKKwkJCXNjaGVkID0gMTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9UWFVSTikgewog
CQkJc2MtPnNjX3N0YXRzLmFzdF90eHVybisrOwogCQkJLyogYnVtcCB0eCB0cmlnZ2VyIGxldmVs
ICovCi0JCQlhdGhfaGFsX3VwZGF0ZXR4dHJpZ2xldmVsKGFoLCBBSF9UUlVFKTsKKwkJCXNjaGVk
ID0gMTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9SWCkgewogCQkJc2MtPnNjX3N0YXRz
LmFzdF9yeF9pbnRyKys7Ci0JCQl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2Nf
cnh0YXNrKTsKKwkJCXNjaGVkID0gMTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSEFMX0lOVF9UWCkg
ewogCQkJc2MtPnNjX3N0YXRzLmFzdF90eF9pbnRyKys7Ci0JCQl0YXNrcXVldWVfZW5xdWV1ZShz
Yy0+c2NfdHEsICZzYy0+c2NfdHh0YXNrKTsKKwkJCXNjaGVkID0gMTsKIAkJfQogCQlpZiAoc3Rh
dHVzICYgSEFMX0lOVF9CTUlTUykgewogCQkJc2MtPnNjX3N0YXRzLmFzdF9ibWlzcysrOwpAQCAt
MTQ5NCw2ICsxNTM1LDE4IEBACiAJCQlzYy0+c2Nfc3RhdHMuYXN0X3J4b3JuKys7CiAJCX0KIAl9
CisKKwkvKgorCSAqIElmIGFueSBvZiB0aGUgYWJvdmUgY2hlY2tzIHJlcXVpcmUgYW4gSVNSIHNj
aGVkdWxlLAorCSAqIGVucXVldWUgdGhlIHRhc2sgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKwkg
KgorCSAqIFNpbmNlIGJlYWNvbiBoYW5kbGluZyBpcyBkb25lIGluIGludGVycnVwdCBjb250ZXh0
IGF0IHRoZQorCSAqIG1vbWVudCwgYWx3YXlzIGxlYXZlIHRoYXQgZW5hYmxlZC4KKwkgKi8KKwlp
ZiAoc2NoZWQgPT0gMSkgeworCQlhdGhfaGFsX2ludHJzZXQoYWgsIChzYy0+c2NfaW1hc2sgJiBI
QUxfSU5UX1NXQkEpKTsKKwkJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX2lu
dHJ0YXNrKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xODI2LDYgKzE4NzksOSBAQAogCX0K
IAlhdGhfaGFsX2ludHJzZXQoYWgsIHNjLT5zY19pbWFzayk7CiAKKwkvKgorCSAqIFhYWCBzaG91
bGQgdGhpcyBiZSBkb25lIGluLWxpbmU/CisJICovCiAJYXRoX3N0YXJ0KGlmcCk7CQkJLyogcmVz
dGFydCB4bWl0ICovCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTUwLDIzICs0MDA2LDIwIEBACiAJCSAq
IFhYWCBraWNrIHRoZSBQQ1UgYWdhaW4gdG8gY29udGludWUgUlhpbmc/CiAJCSAqLwogCQlhdGhf
c3RvcHJlY3Yoc2MpOwotCQlzYy0+c2NfaW1hc2sgfD0gKEhBTF9JTlRfUlhFT0wgfCBIQUxfSU5U
X1JYT1JOKTsKIAkJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKIAkJCWlmX3ByaW50Zihp
ZnAsCiAJCQkgICAgIiVzOiBjb3VsZG4ndCByZXN0YXJ0IFJYIGFmdGVyIFJYRU9MOyByZXNldHRp
bmdcbiIsCiAJCQkgICAgX19mdW5jX18pOworCQkJLyogWFhYIHRoaXMgbXVzdCBiZSBzY2hlZHVs
ZWQhICovCiAJCQlhdGhfcmVzZXQoaWZwKTsKIAkJCXJldHVybjsKIAkJfQotCQlhdGhfaGFsX2lu
dHJzZXQoYWgsIHNjLT5zY19pbWFzayk7CiAJfQogCiAJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAm
IElGRl9EUlZfT0FDVElWRSkgPT0gMCkgewogI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX1NVUEVS
RwogCQlpZWVlODAyMTFfZmZfYWdlX2FsbChpYywgMTAwKTsKICNlbmRpZgotCQlpZiAoIUlGUV9J
U19FTVBUWSgmaWZwLT5pZl9zbmQpKQotCQkJYXRoX3N0YXJ0KGlmcCk7CiAJfQogI3VuZGVmIFBB
MkRFU0MKIH0KQEAgLTQ0NDQsNiArNDQ5Nyw3IEBACiAJcmV0dXJuICh0eHFzICYgKDE8PHFudW0p
KTsKIH0KIAorI2lmIDAKIC8qCiAgKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIHRyYW5zbWl0IGlu
dGVycnVwdDsgc3BlY2lhbC1jYXNlZAogICogZm9yIGEgc2luZ2xlIGhhcmR3YXJlIHRyYW5zbWl0
IHF1ZXVlIChlLmcuIDUyMTAgYW5kIDUyMTEpLgpAQCAtNDUwNCw2ICs0NTU4LDcgQEAKIAogCWF0
aF9zdGFydChpZnApOwogfQorI2VuZGlmCiAKIC8qCiAgKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9m
IHRyYW5zbWl0IGludGVycnVwdC4K
--20cf30563dc1128eb404ac9560ca--



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