Date: Tue, 17 Apr 2012 18:23:06 -0700 From: Adrian Chadd <adrian@freebsd.org> To: freebsd-wireless@freebsd.org Subject: [RFC] disable hardware register byteswap, fixes Merlin AR9220 on AR71xx Message-ID: <CAJ-VmokLuTCjJ_on9-Ejw7mEAmMhk075hqG4CnyFgtKaFLOFaA@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--047d7b11190bbc3d8d04bde9e5c8 Content-Type: text/plain; charset=ISO-8859-1 Hi all, After quite a bit of hackery, hair tearing and other assorted stuff, I finally nailed the AR9220 + AR71xx instability that we've all been seeing. It seems to be a combination of: * incorrect power supplies being used (yes, I found that a board would work fine until you started interacting with the NIC, at which point it'd throw an immediate parity error - but then subsequent register poking via the debugger would come out fine); * _maybe_ some PCI bus glue issues? The PCI glue now looks a lot more like what's in Linux/Atheros code. * hardware register content byteswapping. The last one is a bit unfortunate. Here's a patch that pushes the register space byte swapping back into software, rather than hardware. I've given it a good thrashing on my AR71xx boards with various AR9220 NICs and they all work a-ok now, with no panics and no "weird stuff." I have no idea (yet) whether it's a timing issue with the PCI NIC/bus/controller, whether the hardware swizzling is just plain broken in some situations .. but what I don't want to do is turn all of this off without understanding what the root cause is. So if you've been dying (heh) to play with FreeBSD-HEAD on the DIR-825, or any other atheros MIPS + AR9220 board, here's your chance. I've had it rock solid on my AP96 and Routerstation / Routerstation pro boards for the last couple of days. The DIR-825 is based on the AP96 design (different switch PHY) so I would be very surprised to find it unstable. I may soon just give in and commit it, with a long explanation as to why I'm disabling it. If people would like it resurrected for whatever reason then the patch(es) will be in SVN history. As a data point - ath5k, ath9k and the Atheros reference driver all have the hardware register byteswap disabled. I'd rather not disable it without having firm evidence it's broken. I may also tidy up the register access stuff and make it all a compile time option. Thanks, Adrian --047d7b11190bbc3d8d04bde9e5c8 Content-Type: application/octet-stream; name="2012-04-17-ath-hal-noregswizzle-2.diff" Content-Disposition: attachment; filename="2012-04-17-ath-hal-noregswizzle-2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h15p5x9s0 SW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2FyNTQxNl9yZXNldC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvYXRoL2F0aF9oYWwvYXI1NDE2L2FyNTQxNl9yZXNldC5jCShyZXZpc2lv biAyMzQzNjkpCisrKyBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTQxNi9hcjU0MTZfcmVzZXQuYwko d29ya2luZyBjb3B5KQpAQCAtMTM4NywxNiArMTM4NywxNSBAQAogCWlmICh0eXBlID09IEhBTF9S RVNFVF9DT0xEKSB7CiAJCWlmIChpc0JpZ0VuZGlhbigpKSB7CiAJCQkvKgotCQkJICogU2V0IENG RywgbGl0dGxlLWVuZGlhbiBmb3IgcmVnaXN0ZXIKLQkJCSAqIGFuZCBkZXNjcmlwdG9yIGFjY2Vz c2VzLgorCQkJICogU2V0IENGRywgbGl0dGxlLWVuZGlhbiBmb3IgZGVzY3JpcHRvciBhY2Nlc3Nl cy4KIAkJCSAqLwotCQkJbWFzayA9IElOSVRfQ09ORklHX1NUQVRVUyB8IEFSX0NGR19TV1JEIHwg QVJfQ0ZHX1NXUkc7CisJCQltYXNrID0gSU5JVF9DT05GSUdfU1RBVFVTIHwgQVJfQ0ZHX1NXUkQ7 CiAjaWZuZGVmIEFIX05FRURfREVTQ19TV0FQCiAJCQltYXNrIHw9IEFSX0NGR19TV1REOwogI2Vu ZGlmCiAJCQlIQUxERUJVRyhhaCwgSEFMX0RFQlVHX1JFU0VULAogCQkJICAgICIlcyBBcHBseWlu ZyBkZXNjcmlwdG9yIHN3YXBcbiIsIF9fZnVuY19fKTsKLQkJCU9TX1JFR19XUklURShhaCwgQVJf Q0ZHLCBMRV9SRUFEXzQoJm1hc2spKTsKKwkJCU9TX1JFR19XUklURShhaCwgQVJfQ0ZHLCBtYXNr KTsKIAkJfSBlbHNlCiAJCQlPU19SRUdfV1JJVEUoYWgsIEFSX0NGRywgSU5JVF9DT05GSUdfU1RB VFVTKTsKIAl9CkluZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMC9hcjUyMTBfcmVzZXQu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMC9hcjUyMTBfcmVzZXQu YwkocmV2aXNpb24gMjM0MzY5KQorKysgc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTAvYXI1MjEw X3Jlc2V0LmMJKHdvcmtpbmcgY29weSkKQEAgLTU5NCwxMiArNTk0LDEwIEBACiAgICAgICAgIGlm ICgocmVzZXRNYXNrICYgQVJfUkNfUk1BQykgPT0gMCkgewogCQlpZiAoaXNCaWdFbmRpYW4oKSkg ewogCQkJLyoKLQkJCSAqIFNldCBDRkcsIGxpdHRsZS1lbmRpYW4gZm9yIHJlZ2lzdGVyCi0JCQkg KiBhbmQgZGVzY3JpcHRvciBhY2Nlc3Nlcy4KKwkJCSAqIFNldCBDRkcsIGxpdHRsZS1lbmRpYW4g Zm9yIGRlc2NyaXB0b3IgYWNjZXNzZXMuCiAJCQkgKi8KLQkJCW1hc2sgPSBJTklUX0NPTkZJR19T VEFUVVMgfAotCQkJCUFSX0NGR19TV1REIHwgQVJfQ0ZHX1NXUkQgfCBBUl9DRkdfU1dSRzsKLQkJ CU9TX1JFR19XUklURShhaCwgQVJfQ0ZHLCBMRV9SRUFEXzQoJm1hc2spKTsKKwkJCW1hc2sgPSBJ TklUX0NPTkZJR19TVEFUVVMgfCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEOworCQkJT1NfUkVH X1dSSVRFKGFoLCBBUl9DRkcsIG1hc2spOwogCQl9IGVsc2UKIAkJCU9TX1JFR19XUklURShhaCwg QVJfQ0ZHLCBJTklUX0NPTkZJR19TVEFUVVMpOwogCX0KSW5kZXg6IHN5cy9kZXYvYXRoL2F0aF9o YWwvYXI1MjExL2FyNTIxMV9yZXNldC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRoL2F0aF9o YWwvYXI1MjExL2FyNTIxMV9yZXNldC5jCShyZXZpc2lvbiAyMzQzNjkpCisrKyBzeXMvZGV2L2F0 aC9hdGhfaGFsL2FyNTIxMS9hcjUyMTFfcmVzZXQuYwkod29ya2luZyBjb3B5KQpAQCAtNzY0LDEy ICs3NjQsMTAgQEAKICAgICAgICAgaWYgKChyZXNldE1hc2sgJiBBUl9SQ19NQUMpID09IDApIHsK IAkJaWYgKGlzQmlnRW5kaWFuKCkpIHsKIAkJCS8qCi0JCQkgKiBTZXQgQ0ZHLCBsaXR0bGUtZW5k aWFuIGZvciByZWdpc3RlcgotCQkJICogYW5kIGRlc2NyaXB0b3IgYWNjZXNzZXMuCisJCQkgKiBT ZXQgQ0ZHLCBsaXR0bGUtZW5kaWFuIGZvciBkZXNjcmlwdG9yIGFjY2Vzc2VzLgogCQkJICovCi0J CQltYXNrID0gSU5JVF9DT05GSUdfU1RBVFVTIHwKLQkJCQlBUl9DRkdfU1dURCB8IEFSX0NGR19T V1JEIHwgQVJfQ0ZHX1NXUkc7Ci0JCQlPU19SRUdfV1JJVEUoYWgsIEFSX0NGRywgTEVfUkVBRF80 KCZtYXNrKSk7CisJCQltYXNrID0gSU5JVF9DT05GSUdfU1RBVFVTIHwgQVJfQ0ZHX1NXVEQgfCBB Ul9DRkdfU1dSRDsKKwkJCU9TX1JFR19XUklURShhaCwgQVJfQ0ZHLCBtYXNrKTsKIAkJfSBlbHNl CiAJCQlPU19SRUdfV1JJVEUoYWgsIEFSX0NGRywgSU5JVF9DT05GSUdfU1RBVFVTKTsKIAl9Cklu ZGV4OiBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMi9hcjUyMTJfcmVzZXQuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBzeXMvZGV2L2F0aC9hdGhfaGFsL2FyNTIxMi9hcjUyMTJfcmVzZXQuYwkocmV2aXNpb24g MjM0MzY5KQorKysgc3lzL2Rldi9hdGgvYXRoX2hhbC9hcjUyMTIvYXI1MjEyX3Jlc2V0LmMJKHdv cmtpbmcgY29weSkKQEAgLTEyNzMsMTQgKzEyNzMsMTMgQEAKICAgICAgICAgaWYgKChyZXNldE1h c2sgJiBBUl9SQ19NQUMpID09IDApIHsKIAkJaWYgKGlzQmlnRW5kaWFuKCkpIHsKIAkJCS8qCi0J CQkgKiBTZXQgQ0ZHLCBsaXR0bGUtZW5kaWFuIGZvciByZWdpc3RlcgotCQkJICogYW5kIGRlc2Ny aXB0b3IgYWNjZXNzZXMuCisJCQkgKiBTZXQgQ0ZHLCBsaXR0bGUtZW5kaWFuIGZvciBkZXNjcmlw dG9yIGFjY2Vzc2VzLgogCQkJICovCi0JCQltYXNrID0gSU5JVF9DT05GSUdfU1RBVFVTIHwgQVJf Q0ZHX1NXUkQgfCBBUl9DRkdfU1dSRzsKKwkJCW1hc2sgPSBJTklUX0NPTkZJR19TVEFUVVMgfCBB Ul9DRkdfU1dSRDsKICNpZm5kZWYgQUhfTkVFRF9ERVNDX1NXQVAKIAkJCW1hc2sgfD0gQVJfQ0ZH X1NXVEQ7CiAjZW5kaWYKLQkJCU9TX1JFR19XUklURShhaCwgQVJfQ0ZHLCBMRV9SRUFEXzQoJm1h c2spKTsKKwkJCU9TX1JFR19XUklURShhaCwgQVJfQ0ZHLCBtYXNrKTsKIAkJfSBlbHNlCiAJCQlP U19SRUdfV1JJVEUoYWgsIEFSX0NGRywgSU5JVF9DT05GSUdfU1RBVFVTKTsKIAkJaWYgKGFyNTIx MlNldFBvd2VyTW9kZShhaCwgSEFMX1BNX0FXQUtFLCBBSF9UUlVFKSkKSW5kZXg6IHN5cy9kZXYv YXRoL2F0aF9oYWwvYXI1MzEyL2FyNTMxMl9yZXNldC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYv YXRoL2F0aF9oYWwvYXI1MzEyL2FyNTMxMl9yZXNldC5jCShyZXZpc2lvbiAyMzQzNjkpCisrKyBz eXMvZGV2L2F0aC9hdGhfaGFsL2FyNTMxMi9hcjUzMTJfcmVzZXQuYwkod29ya2luZyBjb3B5KQpA QCAtNzQwLDggKzc0MCw3IEBACiAgICAgICAgIGlmICgocmVzZXRNYXNrICYgQVJfUkNfTUFDKSA9 PSAwKSB7CiAJCWlmIChpc0JpZ0VuZGlhbigpKSB7CiAJCQkvKgotCQkJICogU2V0IENGRywgbGl0 dGxlLWVuZGlhbiBmb3IgcmVnaXN0ZXIKLQkJCSAqIGFuZCBkZXNjcmlwdG9yIGFjY2Vzc2VzLgor CQkJICogU2V0IENGRywgbGl0dGxlLWVuZGlhbiBmb3IgZGVzY3JpcHRvciBhY2Nlc3Nlcy4KIAkJ CSAqLwogI2lmZGVmIEFIX05FRURfREVTQ19TV0FQCiAJCQltYXNrID0gSU5JVF9DT05GSUdfU1RB VFVTIHwgQVJfQ0ZHX1NXUkQ7CkluZGV4OiBzeXMvZGV2L2F0aC9haF9vc2RlcC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvYXRoL2FoX29zZGVwLmMJKHJldmlzaW9uIDIzNDM2OSkKKysrIHN5cy9k ZXYvYXRoL2FoX29zZGVwLmMJKHdvcmtpbmcgY29weSkKQEAgLTI2NywxMiArMjY3LDcgQEAKIAl9 CiAJaWYgKGFoLT5haF9jb25maWcuYWhfc2VyaWFsaXNlX3JlZ193YXIpCiAJCW10eF9sb2NrX3Nw aW4oJmFoX3JlZ3Nlcl9tdHgpOwotI2lmIF9CWVRFX09SREVSID09IF9CSUdfRU5ESUFOCi0JaWYg KE9TX1JFR19VTlNXQVBQRUQocmVnKSkKLQkJYnVzX3NwYWNlX3dyaXRlXzQodGFnLCBoLCByZWcs IHZhbCk7Ci0JZWxzZQotI2VuZGlmCi0JCWJ1c19zcGFjZV93cml0ZV9zdHJlYW1fNCh0YWcsIGgs IHJlZywgdmFsKTsKKwlidXNfc3BhY2Vfd3JpdGVfNCh0YWcsIGgsIHJlZywgdmFsKTsKIAlpZiAo YWgtPmFoX2NvbmZpZy5haF9zZXJpYWxpc2VfcmVnX3dhcikKIAkJbXR4X3VubG9ja19zcGluKCZh aF9yZWdzZXJfbXR4KTsKIH0KQEAgLTI4NiwxMiArMjgxLDExIEBACiAKIAlpZiAoYWgtPmFoX2Nv bmZpZy5haF9zZXJpYWxpc2VfcmVnX3dhcikKIAkJbXR4X2xvY2tfc3BpbigmYWhfcmVnc2VyX210 eCk7Ci0jaWYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KLQlpZiAoT1NfUkVHX1VOU1dBUFBF RChyZWcpKQotCQl2YWwgPSBidXNfc3BhY2VfcmVhZF80KHRhZywgaCwgcmVnKTsKLQllbHNlCi0j ZW5kaWYKLQkJdmFsID0gYnVzX3NwYWNlX3JlYWRfc3RyZWFtXzQodGFnLCBoLCByZWcpOworCXZh bCA9IGJ1c19zcGFjZV9yZWFkXzQodGFnLCBoLCByZWcpOworCisJaWYgKHZhbCA9PSAweGRlYWRj MGRlKQorCQlhdGhfaGFsX3ByaW50ZihhaCwgIiVzOiByZWc9MHgleCwgdmFsPTB4ZGVhZGMwZGUh XG4iLCBfX2Z1bmNfXywgcmVnKTsKKwogCWlmIChhaC0+YWhfY29uZmlnLmFoX3NlcmlhbGlzZV9y ZWdfd2FyKQogCQltdHhfdW5sb2NrX3NwaW4oJmFoX3JlZ3Nlcl9tdHgpOwogCWlmIChhdGhfaGFs X2FscSkgewpAQCAtMzQzLDEyICszMzcsNyBAQAogCiAJaWYgKGFoLT5haF9jb25maWcuYWhfc2Vy aWFsaXNlX3JlZ193YXIpCiAJCW10eF9sb2NrX3NwaW4oJmFoX3JlZ3Nlcl9tdHgpOwotI2lmIF9C WVRFX09SREVSID09IF9CSUdfRU5ESUFOCi0JaWYgKE9TX1JFR19VTlNXQVBQRUQocmVnKSkKLQkJ YnVzX3NwYWNlX3dyaXRlXzQodGFnLCBoLCByZWcsIHZhbCk7Ci0JZWxzZQotI2VuZGlmCi0JCWJ1 c19zcGFjZV93cml0ZV9zdHJlYW1fNCh0YWcsIGgsIHJlZywgdmFsKTsKKwlidXNfc3BhY2Vfd3Jp dGVfNCh0YWcsIGgsIHJlZywgdmFsKTsKIAlpZiAoYWgtPmFoX2NvbmZpZy5haF9zZXJpYWxpc2Vf cmVnX3dhcikKIAkJbXR4X3VubG9ja19zcGluKCZhaF9yZWdzZXJfbXR4KTsKIH0KQEAgLTM2Miwx MiArMzUxLDcgQEAKIAogCWlmIChhaC0+YWhfY29uZmlnLmFoX3NlcmlhbGlzZV9yZWdfd2FyKQog CQltdHhfbG9ja19zcGluKCZhaF9yZWdzZXJfbXR4KTsKLSNpZiBfQllURV9PUkRFUiA9PSBfQklH X0VORElBTgotCWlmIChPU19SRUdfVU5TV0FQUEVEKHJlZykpCi0JCXZhbCA9IGJ1c19zcGFjZV9y ZWFkXzQodGFnLCBoLCByZWcpOwotCWVsc2UKLSNlbmRpZgotCQl2YWwgPSBidXNfc3BhY2VfcmVh ZF9zdHJlYW1fNCh0YWcsIGgsIHJlZyk7CisJdmFsID0gYnVzX3NwYWNlX3JlYWRfNCh0YWcsIGgs IHJlZyk7CiAJaWYgKGFoLT5haF9jb25maWcuYWhfc2VyaWFsaXNlX3JlZ193YXIpCiAJCW10eF91 bmxvY2tfc3BpbigmYWhfcmVnc2VyX210eCk7CiAJcmV0dXJuIHZhbDsKSW5kZXg6IHN5cy9kZXYv YXRoL2FoX29zZGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvYWhfb3NkZXAuaAkocmV2 aXNpb24gMjM0MzY5KQorKysgc3lzL2Rldi9hdGgvYWhfb3NkZXAuaAkod29ya2luZyBjb3B5KQpA QCAtOTcsMzkgKzk3LDEzIEBACiBleHRlcm4Jdm9pZCBhdGhfaGFsX3JlZ193cml0ZShzdHJ1Y3Qg YXRoX2hhbCAqYWgsIHVfaW50IHJlZywgdV9pbnQzMl90IHZhbCk7CiBleHRlcm4JdV9pbnQzMl90 IGF0aF9oYWxfcmVnX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1X2ludCByZWcpOwogI2Vsc2UK LS8qCi0gKiBUaGUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFyZSBuYXRpdmUgbGl0dGxlLWVuZGlhbiBi eXRlIG9yZGVyLgotICogQmlnLWVuZGlhbiBob3N0cyBhcmUgaGFuZGxlZCBieSBlbmFibGluZyBo YXJkd2FyZSBieXRlLXN3YXAKLSAqIG9mIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMgYXQgcmVz ZXQuICBCdXQgdGhlIFBDSSBjbG9jawotICogZG9tYWluIHJlZ2lzdGVycyBhcmUgbm90IGJ5dGUg c3dhcHBlZCEgIFRodXMsIG9uIGJpZy1lbmRpYW4KLSAqIHBsYXRmb3JtcyB3ZSBoYXZlIHRvIGV4 cGxpY2l0bHkgYnl0ZS1zd2FwIHRob3NlIHJlZ2lzdGVycy4KLSAqIE1vc3Qgb2YgdGhpcyBjb2Rl IGlzIGNvbGxhcHNlZCBhdCBjb21waWxlIHRpbWUgYmVjYXVzZSB0aGUKLSAqIHJlZ2lzdGVyIHZh bHVlcyBhcmUgY29uc3RhbnRzLgotICovCi0jaWYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4K LSNkZWZpbmUgT1NfUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgZG8gewkJCQlcCi0JaWYgKE9T X1JFR19VTlNXQVBQRUQoX3JlZykpCQkJCQlcCi0JCWJ1c19zcGFjZV93cml0ZV80KChidXNfc3Bh Y2VfdGFnX3QpKF9haCktPmFoX3N0LAlcCi0JCSAgICAoYnVzX3NwYWNlX2hhbmRsZV90KShfYWgp LT5haF9zaCwgKF9yZWcpLCAoX3ZhbCkpOwlcCi0JZWxzZQkJCQkJCQkJXAotCQlidXNfc3BhY2Vf d3JpdGVfc3RyZWFtXzQoKGJ1c19zcGFjZV90YWdfdCkoX2FoKS0+YWhfc3QsCVwKLQkJICAgIChi dXNfc3BhY2VfaGFuZGxlX3QpKF9haCktPmFoX3NoLCAoX3JlZyksIChfdmFsKSk7CVwKLX0gd2hp bGUgKDApCi0jZGVmaW5lIE9TX1JFR19SRUFEKF9haCwgX3JlZykJCQkJCQlcCi0JKE9TX1JFR19V TlNXQVBQRUQoX3JlZykgPwkJCQkJXAotCQlidXNfc3BhY2VfcmVhZF80KChidXNfc3BhY2VfdGFn X3QpKF9haCktPmFoX3N0LAkJXAotCQkgICAgKGJ1c19zcGFjZV9oYW5kbGVfdCkoX2FoKS0+YWhf c2gsIChfcmVnKSkgOgkJXAotCQlidXNfc3BhY2VfcmVhZF9zdHJlYW1fNCgoYnVzX3NwYWNlX3Rh Z190KShfYWgpLT5haF9zdCwJXAotCQkgICAgKGJ1c19zcGFjZV9oYW5kbGVfdCkoX2FoKS0+YWhf c2gsIChfcmVnKSkpCi0jZWxzZSAvKiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTiAqLwog I2RlZmluZQlPU19SRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKQkJCQkJXAogCWJ1c19zcGFjZV93 cml0ZV80KChidXNfc3BhY2VfdGFnX3QpKF9haCktPmFoX3N0LAkJXAogCSAgICAoYnVzX3NwYWNl X2hhbmRsZV90KShfYWgpLT5haF9zaCwgKF9yZWcpLCAoX3ZhbCkpCiAjZGVmaW5lCU9TX1JFR19S RUFEKF9haCwgX3JlZykJCQkJCQlcCiAJYnVzX3NwYWNlX3JlYWRfNCgoYnVzX3NwYWNlX3RhZ190 KShfYWgpLT5haF9zdCwJCQlcCiAJICAgIChidXNfc3BhY2VfaGFuZGxlX3QpKF9haCktPmFoX3No LCAoX3JlZykpCi0jZW5kaWYgLyogX0JZVEVfT1JERVIgKi8KLSNlbmRpZiAvKiBBSF9ERUJVRyB8 fCBBSF9SRUdGVU5DIHx8IEFIX0RFQlVHX0FMUSAqLworI2VuZGlmCiAKICNpZmRlZiBBSF9ERUJV R19BTFEKIGV4dGVybgl2b2lkIE9TX01BUksoc3RydWN0IGF0aF9oYWwgKiwgdV9pbnQgaWQsIHVf aW50MzJfdCB2YWx1ZSk7Cg== --047d7b11190bbc3d8d04bde9e5c8--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmokLuTCjJ_on9-Ejw7mEAmMhk075hqG4CnyFgtKaFLOFaA>