Date: Tue, 25 Oct 2011 13:42:46 +0800 From: Adrian Chadd <adrian@freebsd.org> To: freebsd-wireless@freebsd.org Subject: ath 11n update: locking, regressions, testing Message-ID: <CAJ-Vmo=9KkQbiCCBQm5Xm_9dNZtY6jQ1hzO0SWSZ4z323jF=Hw@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--20cf30363cef507c7704b0190203 Content-Type: text/plain; charset=ISO-8859-1 Hi all, In working out kinks in how the ath driver handles things during an interface reset or reconfigure, I've discovered a couple of things: * all the frames in the tx/rx queues are just dropped on the floor, which breaks 802.11n aggregation state in very bad ways; and * there's just a lot of cases where things can overlap each other, causing temporary situations of unpredictability (and likely some of the "wtf?" situations that people have been seeing with the stock freebsd ath driver.) I've been tinkering with some code which does two things: * it introduces locking of most operational paths, much like how the iwn driver does things, and * in cases of a recoverable reset (eg a configuration change such as enabling/disabling ANI, or a stuck beacon condition or watchdog timeout), the TX/RX queues are properly handled: + the TX queue is kept how it is and DMA is simply restarted once the reset completes; + the RX queue is completely drained before the reset occurs, so all frames are thrown at net80211 and handled. For reference, linux doesn't do this kind of locking - the ath9k driver hides reset, channel change and RX behind a new lock - the "PCU lock" - whilst the TX path doesn't use the PCU lock, it just uses the normal per-queue TX locking that freebsd/ath9k currently has. Now, this has shown a few issues which make me kind of wary about committing this as-is and I'd like some testing and feedback before I am even remotely comfortable. Firstly - holding any lock during _both_ TX _and_ RX causes all kinds of LOR'ing in the IP stack, leading to very quick deadlocks. The iwn driver releases the IWN_LOCK before calling ieee80211_input, so it avoids this - but by doing that, it too could lead to some inconsistencies (eg another process could cause a state change during active RX.) So I fixed that in my code - and yes, this means that things such as ath_start() (ie, the normal TX path), or ath_raw_xmit() (the raw TX path, for things like management/probe frames) can occur. So I introduced some variables which keep track of whether the code is in tx, tx complete, rx process, rx tasklet and reset. This way the driver can avoid situations where: * there's a reset, or rx process occuring, which grabs the lock; * some other task occurs - say, you change the ANI configuration, or add/remove a VAP; * rxproc releases the lock to call net80211_input; * .. and the configuration change, VAP change, etc occurs; * .. then rxproc continues trying to process RX frames, after the hardware has been reset. Now this kind of thing currently can occur, so I'm leaning to just ignoring it and adding very loud printf()s if the situation is detected. It can then be fixed at a later stage. Next - the net80211 scan code (which ath uses, but iwn doesn't as the firmware does its own scanning) holds the net80211 interface lock (comlock) during the duration of sending probe requests to a channel. This means that when scanning, this occurs: * grab comlock; * iterate over scan cache contents, sending probe requests * each probe request calls ath_raw_xmit(), which grabs ATH_LOCK for the duration of the TX. Then for normal TX completion: * ATH_LOCK is grabbed; * the completed frame has net80211_free_node() called, which grabs the comlock .. and the above is a very obvious LOR. I'm not sure how to resolve/fix this without either: * abandoning my idea for locking the ath driver this way and instead having to shoehorn in some more complicated state change / taskqueue drain code (eg so on an operation change, all RX/TX is suspended in its entirety before the reset occurs); which will require some net80211 cooperation as the ic_raw_xmit() API can be called by any thing, and is typically done without any locks being held (except for the scan code example), so it's likely this will require some complicated hackery to avoid this; * fix the scan cache code to not hold the comlock whilst TX'ing probe request frames - and this likely requires introducing some kind of generation count to the scan cache contents and if the generation count changes, the scan process restarts TX'ing probe frames or something. That said, this still doesn't fix all of the ath locking problems (and likely some net80211 locking problems too), which seem increasingly like they should be fixed, as they seem to be making my 802.11n ath work _much_ more complicated than it needs to be.. So, I'd like some testing of the attached patch against my if_ath_tx branch, and I'd like some feedback/comments. You can trigger beacon stuck conditions by: # sysctl dev.ath.X.forcebstuck=1 So you can spam that and generate errors/resets (along with the occasional hardware error, which is kind of surprising, and I'm going to try and track down.) Thanks! Adrian --20cf30363cef507c7704b0190203 Content-Type: application/octet-stream; name="lock-enable-9.diff" Content-Disposition: attachment; filename="lock-enable-9.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gu6gs1f70 SW5kZXg6IHN5cy9kZXYvYXRoL2lmX2F0aF90eC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRo L2lmX2F0aF90eC5jCShyZXZpc2lvbiAyMjY2OTEpCisrKyBzeXMvZGV2L2F0aC9pZl9hdGhfdHgu Ywkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSwzMCBAQAogCUtBU1NFUlQodHhxLT5heHFf cW51bSAhPSBBVEhfVFhRX1NXUSwKIAkgICAgICgiYXRoX3R4X2hhbmRvZmZfaHcgY2FsbGVkIGZv ciBtY2FzdCBxdWV1ZSIpKTsKIAorCUFUSF9MT0NLX0FTU0VSVChzYyk7CisJaWYgKHNjLT5zY19p bl9yZXNldCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICIlczogY2FsbGVkIHdpdGgg c2NfaW5fcmVzZXQgIT0gMFxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJRFBSSU5URihzYywgQVRI X0RFQlVHX1hNSVQsCisJCSAgICAiJXM6IHF1ZXVlZDogVFhEUFsldV0gPSAlcCAoJXApIGRlcHRo ICVkXG4iLAorCQkgICAgX19mdW5jX18sIHR4cS0+YXhxX3FudW0sCisJCSAgICAoY2FkZHJfdCli Zi0+YmZfZGFkZHIsIGJmLT5iZl9kZXNjLAorCQkgICAgdHhxLT5heHFfZGVwdGgpOworCQlBVEhf VFhRX0lOU0VSVF9UQUlMKHR4cSwgYmYsIGJmX2xpc3QpOworCQlpZiAoYmYtPmJmX3N0YXRlLmJm c19hZ2dyKQorCQkJdHhxLT5heHFfYWdncl9kZXB0aCsrOworCQkvKgorCQkgKiBXZSBzdGlsbCBo YXZlIHRvIGxpbmsgZGVzY3JpcHRvcnMgaGVyZToKKwkJICogd2hlbiBETUEgaXMgcmVzdGFydGVk LCB0aGVzZSBuZWVkIHRvIGJlCisJCSAqIHByb3Blcmx5IGNoYWluZWQgb3IgdGhlIERNQSBlbmdp bmUgd2lsbAorCQkgKiBnZXQgdXBzZXQuCisJCSAqLworCQlpZiAodHhxLT5heHFfbGluayAhPSBO VUxMKQorCQkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCXR4cS0+YXhxX2xpbmsg PSAmYmYtPmJmX2xhc3Rkcy0+ZHNfbGluazsKKwkJcmV0dXJuOworCX0KKwogCS8qIEZvciBub3cs IHNvIG5vdCB0byBnZW5lcmF0ZSB3aGl0ZXNwYWNlIGRpZmZzICovCiAJaWYgKDEpIHsKICNpZmRl ZiBJRUVFODAyMTFfU1VQUE9SVF9URE1BCkBAIC0xNjg4LDYgKzE3MTIsMjIgQEAKIAlzdHJ1Y3Qg YXRoX2J1ZiAqYmY7CiAJaW50IGVycm9yOwogCisJQVRIX0xPQ0soc2MpOworCXNjLT5zY19pbl90 eHNlbmQrKzsKKwkvKgorCSAqIElmIHdlJ3JlIGNhbGxlZCBkdXJpbmcgYSByZXNldCwganVzdCBm YWlsLgorCSAqIEl0J2QgYmUgbmljZSBpZiB0aGUgbmV0ODAyMTEgc3RhY2sgd291bGQgYWxsb3cg dXMgdG8gYnVmZmVyCisJICogcmF3L21hbmFnZW1lbnQgZnJhbWVzLgorCSAqCisJICogQWxsb3cg aXQgdG8gYmUgY2FsbGVkIGR1cmluZyBhIG5vbi1yZXNldCBSWC4KKwkgKi8KKwlpZiAoc2MtPnNj X2luX3Jlc2V0KSB7CisJCWRldmljZV9wcmludGYoc2MtPnNjX2RldiwKKwkJICAgICIlczogc2Nf aW5fcmVzZXQ9JWQ7IGJhaWxpbmdcbiIsIF9fZnVuY19fLCBzYy0+c2NfaW5fcmVzZXQpOworCQll cnJvciA9IEVJTzsKKwkJZ290byBiYWQ7CisJfQorCiAJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAm IElGRl9EUlZfUlVOTklORykgPT0gMCB8fCBzYy0+c2NfaW52YWxpZCkgewogCQlEUFJJTlRGKHNj LCBBVEhfREVCVUdfWE1JVCwgIiVzOiBkaXNjYXJkIGZyYW1lLCAlcyIsIF9fZnVuY19fLAogCQkg ICAgKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwID8KQEAgLTE3Mjks NyArMTc2OSw4IEBACiAJc2MtPnNjX3dkX3RpbWVyID0gNTsKIAlpZnAtPmlmX29wYWNrZXRzKys7 CiAJc2MtPnNjX3N0YXRzLmFzdF90eF9yYXcrKzsKLQorCXNjLT5zY19pbl90eHNlbmQtLTsKKwlB VEhfVU5MT0NLKHNjKTsKIAlyZXR1cm4gMDsKIGJhZDI6CiAJQVRIX1RYQlVGX0xPQ0soc2MpOwpA QCAtMTczOCw2ICsxNzc5LDggQEAKIGJhZDoKIAlpZnAtPmlmX29lcnJvcnMrKzsKIAlzYy0+c2Nf c3RhdHMuYXN0X3R4X3Jhd19mYWlsKys7CisJc2MtPnNjX2luX3R4c2VuZC0tOworCUFUSF9VTkxP Q0soc2MpOwogCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOwogCXJldHVybiBlcnJvcjsKIH0KQEAg LTM3MjEsNiArMzc2NCw3IEBACiAJICovCiAJciA9IHNjLT5zY19hZGRiYV9yZXNwb25zZShuaSwg dGFwLCBzdGF0dXMsIGNvZGUsIGJhdGltZW91dCk7CiAKKwlBVEhfTE9DSyhzYyk7CiAJQVRIX1RY UV9MT0NLKHNjLT5zY19hYzJxW2F0aWQtPmFjXSk7CiAJLyoKIAkgKiBYWFggZGlydHkhCkBAIC0z NzI4LDggKzM3NzIsMTEgQEAKIAkgKiBSZWFkIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLgog CSAqLwogCXRhcC0+dHhhX3N0YXJ0ID0gbmktPm5pX3R4c2Vxc1t0aWRdOworCXNjLT5zY19pbl90 eHNlbmQrKzsKIAlhdGhfdHhfdGlkX3Jlc3VtZShzYywgYXRpZCk7CisJc2MtPnNjX2luX3R4c2Vu ZC0tOwogCUFUSF9UWFFfVU5MT0NLKHNjLT5zY19hYzJxW2F0aWQtPmFjXSk7CisJQVRIX1VOTE9D SyhzYyk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTM3NTgsNyArMzgwNSwxMSBAQAogCSAqIGl0J2xs IHNldCB0aGUgY2xlYW51cCBmbGFnLCBhbmQgaXQnbGwgYmUgdW5wYXVzZWQgb25jZQogCSAqIHRo aW5ncyBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KIAkgKi8KKwlBVEhfTE9DSyhzYyk7CisJc2MtPnNj X2luX3R4c2VuZCsrOwogCWF0aF90eF9jbGVhbnVwKHNjLCBhbiwgdGlkKTsKKwlzYy0+c2NfaW5f dHhzZW5kLS07CisJQVRIX1VOTE9DSyhzYyk7CiB9CiAKIC8qCkBAIC0zNzk0LDkgKzM4NDUsMTMg QEAKIAkgKiBYWFggVElEIGhlcmUgb3IgaXQnbGwgbmV2ZXIgYmUgZG9uZS4KIAkgKi8KIAlpZiAo c3RhdHVzID09IDAgfHwgYXR0ZW1wdHMgPT0gNTApIHsKKwkJQVRIX0xPQ0soc2MpOwogCQlBVEhf VFhRX0xPQ0soc2MtPnNjX2FjMnFbYXRpZC0+YWNdKTsKKwkJc2MtPnNjX2luX3R4c2VuZCsrOwog CQlhdGhfdHhfdGlkX3Jlc3VtZShzYywgYXRpZCk7CisJCXNjLT5zY19pbl90eHNlbmQtLTsKIAkJ QVRIX1RYUV9VTkxPQ0soc2MtPnNjX2FjMnFbYXRpZC0+YWNdKTsKKwkJQVRIX1VOTE9DSyhzYyk7 CiAJfQogfQogCkBAIC0zODIwLDcgKzM4NzUsMTEgQEAKIAlzYy0+c2NfYWRkYmFfcmVzcG9uc2Vf dGltZW91dChuaSwgdGFwKTsKIAogCS8qIFVucGF1c2UgdGhlIFRJRDsgd2hpY2ggcmVzY2hlZHVs ZXMgaXQgKi8KKwlBVEhfTE9DSyhzYyk7CiAJQVRIX1RYUV9MT0NLKHNjLT5zY19hYzJxW2F0aWQt PmFjXSk7CisJc2MtPnNjX2luX3R4c2VuZCsrOwogCWF0aF90eF90aWRfcmVzdW1lKHNjLCBhdGlk KTsKKwlzYy0+c2NfaW5fdHhzZW5kLS07CiAJQVRIX1RYUV9VTkxPQ0soc2MtPnNjX2FjMnFbYXRp ZC0+YWNdKTsKKwlBVEhfVU5MT0NLKHNjKTsKIH0KSW5kZXg6IHN5cy9kZXYvYXRoL2lmX2F0aF9t aXNjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoX21pc2MuaAkocmV2aXNpb24g MjI2NTU5KQorKysgc3lzL2Rldi9hdGgvaWZfYXRoX21pc2MuaAkod29ya2luZyBjb3B5KQpAQCAt NTcsMTUgKzU3LDE0IEBACiBleHRlcm4gdm9pZCBhdGhfZnJlZWJ1ZihzdHJ1Y3QgYXRoX3NvZnRj ICpzYywgc3RydWN0IGF0aF9idWYgKmJmKTsKIAogZXh0ZXJuIGludCBhdGhfcmVzZXQoc3RydWN0 IGlmbmV0ICosIEFUSF9SRVNFVF9UWVBFKTsKK2V4dGVybiBpbnQgYXRoX3Jlc2V0X2xvY2tlZChz dHJ1Y3QgaWZuZXQgKiwgQVRIX1JFU0VUX1RZUEUpOwogZXh0ZXJuIHZvaWQgYXRoX3R4X2RyYWlu dHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKIGV4dGVybiB2 b2lkIGF0aF90eF9kZWZhdWx0X2NvbXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhf YnVmICpiZiwKIAkgICAgaW50IGZhaWwpOwogZXh0ZXJuIHZvaWQgYXRoX3R4X3VwZGF0ZV9yYXRl Y3RybChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkgICAgc3RydWN0IGllZWU4MDIxMV9ub2RlICpu aSwgc3RydWN0IGF0aF9yY19zZXJpZXMgKnJjLAogCSAgICBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAq dHMsIGludCBmcm1sZW4sIGludCBuZnJhbWVzLCBpbnQgbmJhZCk7Ci0KIGV4dGVybiB2b2lkIGF0 aF90eF9mcmVlYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCiAg ICAgaW50IHN0YXR1cyk7Ci1leHRlcm4gdm9pZCBhdGhfdHhfc2NoZWRfcHJvY19zY2hlZChzdHJ1 Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSk7CiAKICNlbmRpZgpJbmRleDog c3lzL2Rldi9hdGgvaWZfYXRoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoLmMJ KHJldmlzaW9uIDIyNjY5NCkKKysrIHN5cy9kZXYvYXRoL2lmX2F0aC5jCSh3b3JraW5nIGNvcHkp CkBAIC0xMzEsNiArMTMxLDcgQEAKIHN0YXRpYyB2b2lkCWF0aF9zdG9wX2xvY2tlZChzdHJ1Y3Qg aWZuZXQgKik7CiBzdGF0aWMgdm9pZAlhdGhfc3RvcChzdHJ1Y3QgaWZuZXQgKik7CiBzdGF0aWMg dm9pZAlhdGhfc3RhcnQoc3RydWN0IGlmbmV0ICopOworc3RhdGljIHZvaWQJYXRoX3N0YXJ0X2xv Y2tlZChzdHJ1Y3QgaWZuZXQgKik7CiBzdGF0aWMgaW50CWF0aF9yZXNldF92YXAoc3RydWN0IGll ZWU4MDIxMXZhcCAqLCB1X2xvbmcpOwogc3RhdGljIGludAlhdGhfbWVkaWFfY2hhbmdlKHN0cnVj dCBpZm5ldCAqKTsKIHN0YXRpYyB2b2lkCWF0aF93YXRjaGRvZyh2b2lkICopOwpAQCAtODY5LDYg Kzg3MCw2MiBAQAogCXJldHVybiBmcmVlOwogfQogCisvKgorICogVGhpcyBpcyBhIGRpYWdub3N0 aWMgcm91dGluZSB3aGljaCBzaG91bGQgYmUgcnVuIHdoZW5ldmVyCisgKiBhbnkgcmVzZXQtcmVs YXRlZCByb3V0aW5lIGdyYWJzIHRoZSBBVEhfTE9DSy4KKyAqCisgKiBTaW5jZSBhdGhfcnhfcHJv YygpIC1yZWxlYXNlcy0gQVRIX0xPQ0sgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sCisgKiBpdCBp cyBlbnRpcmVseSBwb3NzaWJsZSB0aGF0IGFub3RoZXIgcGFyYWxsZWwgdGFzayAoZWcgY2hhbm5l bAorICogY2hhbmdlLCByZXNldCwgVkFQIGFkZC9kZWxldGUsIGV0YykgaXMgYWxzbyBydW5uaW5n LgorICogSW4gdGhpcyBjYXNlLCB0aGF0J2xsIGJlZ2luIHRvIG9jY3VyIHdoaWxzdCBhdGhfcnhf cHJvYygpIGlzCisgKiBleGVjdXRpbmcuCisgKgorICogQW5kIGl0IGdldHMgYmV0dGVyLiBTaW5j ZSBhdGhfcnhfcHJvYygpIGlzIG5vdyBiZWluZyBjYWxsZWQgZHVyaW5nCisgKiB0aGUgcmVzZXQs IGNoYW5uZWwgY2hhbmdlLCBldGMgcGF0aCAoaWUsIGFueXdoZXJlIHdoZXJlIGZyYW1lcworICog bmVlZCB0byBiZSBkcmFpbmVkKSwgQVRIX0xPQ0sgaXMgYmVpbmcgcmVsZWFzZWQgYW5kIHJlLWFz c2VydGVkLgorICogU28gaXQgYmVjb21lcyBwb3NzaWJsZSBmb3IgdGhvc2UgdGFza3MgdG8gc3Rh cnQgdGFraW5nIG92ZXIgZnJvbQorICogZWFjaCBvdGhlci4KKyAqCisgKiBGb3Igbm93LCBpZiBz Y19pbl9yeHRhc2tsZXQgb3Igc2NfaW5fcnhwcm9jIGlzID4wLCB3ZSBwcmludCBvdXQKKyAqIGEg d2FybmluZyBzbyB0aGF0IHRoZSByZWFzb24gZm9yIHNhaWQgaXNzdWUgY2FuIGJlIGludmVzdGln YXRlZC4KKyAqCisgKiBJbiB0aGUgZnV0dXJlLCByb3V0aW5lcyB3aGljaCBhcmUgdHJ5aW5nIHRv IGRvIHJlc2V0IHR5cGUgYWN0aW9ucworICogd2lsbCBsaWtlbHkgbmVlZCB0byBkbyBzb21lIGtp bmQgb2YgbG9jayByZWFjcXVpc2l0aW9uIG9uY2UgdGhlCisgKiByeHByb2MgaGFzIGNvbXBsZXRl ZC4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIG9mIHRoZSBjb3JyZWN0IHdheQorICogdG8gaGFuZGxl IHRoYXQgdGhvdWdoLgorICoKKyAqIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIFRYIHN0YXRl IC0gdGhlIFRYIGxvY2sgaXMgaGVsZCBmb3IKKyAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgVFggZnVu Y3Rpb25zLCBzbyByZXNldCByb3V0aW5lcyB3b24ndCBjbGFzaAorICogd2l0aCBUWC4gVFggbWF5 IG9jY3VyIGluc2lkZSBhIHJlc2V0IHJvdXRpbmUgLSBpZSwgd2hlbiB0aGUKKyAqIFJYIGNvZGUg cmVsZWFzZXMgdGhlIEFUSF9MT0NLIC0gYnV0IGFzIHNjLT5zY19pbl9yZXNldCA+IDAsCisgKiB0 aGUgVFggcm91dGluZXMgd29uJ3QgY29udGludWUuCisgKgorICogSSdtIHN0aWxsIG5vdCBzdXJl IHdoYXQgdG8gZG8gaWYga2V5Y2FjaGUgY2hhbmdlcyBjb21lIHRocm91Z2gKKyAqIGR1cmluZyBh bGwgb2YgdGhpcyAtIEkgc2hvdWxkIGxvb2sgaW50byB0aGlzLi4KKyAqCisgKiBGaW5hbGx5LCB3 ZSdsbCBsb2cgaWYgc2NfaW5fcmVzZXQgPiAxIC0gdGhhdCBtZWFucyB0aGF0IHNvbWUga2luZAor ICogb2YgcmVjdXJzaW9uIG9yIHBhcmFsbGVsIHJlc2V0IHBhdGggaGFzIG9jY3VyZWQgYW5kIGl0 J3Mgbm90IGNsZWFyCisgKiB3aGljaCBvcmRlciB3aGF0IHdpbGwgcmV0dXJuIGluLiBUaGlzIHNo b3VsZCBiZSBmaXhlZC4KKyAqLworc3RhdGljIHZvaWQgX2F0aF9sb2NrX3J4X2NoZWNrKHN0cnVj dCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpmaWxlLAorICAgIGludCBsaW5lKQoreworCUFU SF9MT0NLX0FTU0VSVChzYyk7CisJaWYgKHNjLT5zY19pbl9yeHRhc2tsZXQgfHwgc2MtPnNjX2lu X3J4cHJvYykgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsCisJCSAgICAiJXM6ICVzOiVk OiByeHRhc2tsZXQ9JWQsIHJ4cHJvYz0lZCwgZGFuZ2VyIVxuIiwKKwkJICAgIF9fZnVuY19fLCBm aWxlLCBsaW5lLAorCQkgICAgc2MtPnNjX2luX3J4dGFza2xldCwgc2MtPnNjX2luX3J4cHJvYyk7 CisJfQorCWlmIChzYy0+c2NfaW5fcmVzZXQgPiAxKSB7CisJCWRldmljZV9wcmludGYoc2MtPnNj X2RldiwKKwkJICAgICIlczogJXM6JWQ6IHNjX2luX3Jlc2V0ID4gMSAoPSAlZCksIGRhbmdlciFc biIsCisJCSAgICBfX2Z1bmNfXywgZmlsZSwgbGluZSwgc2MtPnNjX2luX3Jlc2V0KTsKKwl9Cit9 CisKKyNkZWZpbmUJYXRoX2xvY2tfcnhfY2hlY2soc2MpCV9hdGhfbG9ja19yeF9jaGVjaygoc2Mp LCBfX0ZJTEVfXywgX19MSU5FX18pCisKIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExdmFwICoKIGF0 aF92YXBfY3JlYXRlKHN0cnVjdCBpZWVlODAyMTFjb20gKmljLAogCWNvbnN0IGNoYXIgbmFtZVtJ Rk5BTVNJWl0sIGludCB1bml0LCBpbnQgb3Btb2RlLCBpbnQgZmxhZ3MsCkBAIC04ODcsNiArOTQ0 LDEwIEBACiAJSUVFRTgwMjExX0FERFJfQ09QWShtYWMsIG1hYzApOwogCiAJQVRIX0xPQ0soc2Mp OworCXNjLT5zY19pbl9yZXNldCsrOworCS8qIFhYWCBUT0RPOiBzdXNwZW5kIHRhc2txdWV1ZSwg Zmx1c2ggdGFza3F1ZXVlIG9wcywgc3VzcGVuZCBSWD8gKi8KKwlhdGhfbG9ja19yeF9jaGVjayhz Yyk7CisKIAlpY19vcG1vZGUgPSBvcG1vZGU7CQkvKiBkZWZhdWx0IHRvIG9wbW9kZSBvZiBuZXcg dmFwICovCiAJc3dpdGNoIChvcG1vZGUpIHsKIAljYXNlIElFRUU4MDIxMV9NX1NUQToKQEAgLTk4 NSw2ICsxMDQ2LDggQEAKIAllcnJvciA9IGllZWU4MDIxMV92YXBfc2V0dXAoaWMsIHZhcCwgbmFt ZSwgdW5pdCwgb3Btb2RlLCBmbGFncywKIAkgICAgYnNzaWQsIG1hYyk7CiAJQVRIX0xPQ0soc2Mp OworCWF0aF9sb2NrX3J4X2NoZWNrKHNjKTsKKwogCWlmIChlcnJvciAhPSAwKSB7CiAJCWRldmlj ZV9wcmludGYoc2MtPnNjX2RldiwgIiVzOiBlcnJvciAlZCBjcmVhdGluZyB2YXBcbiIsCiAJCSAg ICBfX2Z1bmNfXywgZXJyb3IpOwpAQCAtMTEwNSw2ICsxMTY4LDcgQEAKIAkJICovCiAJCXNjLT5z Y19zd2JtaXNzID0gMTsKIAl9CisJc2MtPnNjX2luX3Jlc2V0LS07CiAJQVRIX1VOTE9DSyhzYyk7 CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwpAQCAtMTExNSw2ICsxMTc5LDcgQEAKIAlhdGhfaGFs X3NldGJzc2lkbWFzayhzYy0+c2NfYWgsIHNjLT5zY19od2Jzc2lkbWFzayk7CiBiYWQ6CiAJZnJl ZShhdnAsIE1fODAyMTFfVkFQKTsKKwlzYy0+c2NfaW5fcmVzZXQtLTsKIAlBVEhfVU5MT0NLKHNj KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExMzAsMTggKzExOTUsMjUgQEAKIAogCURQUklOVEYo c2MsIEFUSF9ERUJVR19SRVNFVCwgIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAorCS8qIFhY WCBUT0RPOiBzdXNwZW5kIHRhc2txdWV1ZSwgZmx1c2ggdGFza3F1ZXVlIG9wcywgc3VzcGVuZCBS WD8gKi8KKwlBVEhfTE9DSyhzYyk7CisJc2MtPnNjX2luX3Jlc2V0Kys7CisKIAlpZiAoaWZwLT5p Zl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpIHsKIAkJLyoKIAkJICogUXVpZXNjZSB0aGUg aGFyZHdhcmUgd2hpbGUgd2UgcmVtb3ZlIHRoZSB2YXAuICBJbgogCQkgKiBwYXJ0aWN1bGFyIHdl IG5lZWQgdG8gcmVjbGFpbSBhbGwgcmVmZXJlbmNlcyB0bwogCQkgKiB0aGUgdmFwIHN0YXRlIGJ5 IGFueSBmcmFtZXMgcGVuZGluZyBvbiB0aGUgdHggcXVldWVzLgogCQkgKi8KKwkJYXRoX2xvY2tf cnhfY2hlY2soc2MpOwogCQlhdGhfaGFsX2ludHJzZXQoYWgsIDApOwkJLyogZGlzYWJsZSBpbnRl cnJ1cHRzICovCiAJCWF0aF9kcmFpbnR4cShzYywgQVRIX1JFU0VUX0RFRkFVTFQpOwkJLyogc3Rv cCBodyB4bWl0IHNpZGUgKi8KLQkJLyogWFhYIERvIGFsbCBmcmFtZXMgZnJvbSBhbGwgdmFwcy9u b2RlcyBuZWVkIGRyYWluaW5nIGhlcmU/ICovCiAJCWF0aF9zdG9wcmVjdihzYyk7CQkvKiBzdG9w IHJlY3Ygc2lkZSAqLworCQkvKiBYWFggdGhpcyBkcm9wcyB0aGUgbG9jayB0ZW1wb3JhcmlseSAq LworCQlhdGhfcnhfcHJvYyhzYywgMCk7CiAJfQogCisJQVRIX1VOTE9DSyhzYyk7CiAJaWVlZTgw MjExX3ZhcF9kZXRhY2godmFwKTsKIAogCS8qCkBAIC0xMTYxLDkgKzEyMzMsMTAgQEAKIAkgKiBj YWxsISkKIAkgKi8KIAorCUFUSF9MT0NLKHNjKTsKKwlhdGhfbG9ja19yeF9jaGVjayhzYyk7CiAJ YXRoX2RyYWludHhxKHNjLCBBVEhfUkVTRVRfREVGQVVMVCk7CiAKLQlBVEhfTE9DSyhzYyk7CiAJ LyoKIAkgKiBSZWNsYWltIGJlYWNvbiBzdGF0ZS4gIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVm b3JlCiAJICogdGhlIHZhcCBpbnN0YW5jZSBpcyByZWNsYWltZWQgYXMgd2UgbWF5IGhhdmUgYSBy ZWZlcmVuY2UKQEAgLTEyMzAsNiArMTMwMyw3IEBACiAJCX0KIAkJYXRoX2hhbF9pbnRyc2V0KGFo LCBzYy0+c2NfaW1hc2spOwogCX0KKwlzYy0+c2NfaW5fcmVzZXQtLTsKIAlBVEhfVU5MT0NLKHNj KTsKIH0KIApAQCAtMTMzNSw2ICsxNDA5LDEwIEBACiAKIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxl ci4gIE1vc3Qgb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGlzIGRlZmVycmVkLgorICoKKyAqIEl0 IG1heSBiZSBhIGJhZCBpZGVhIHRvIGdyYWIgdGhlIEFUSF9MT0NLIGhlcmUgdG8gcHJvdGVjdCBr aWNrcGN1LgorICogUGVyaGFwcyBhIGRpZmZlcmVudCBsb2NrIGlzIG5lZWRlZC4gVGhhdCB3YXkg YXRoX2ludHIoKSBkb2Vzbid0IGVuZCB1cAorICogd2FpdGluZyBmb3IgYSBsb25nIHRpbWUgdG8g aGFuZGxlIGFuIGludGVycnVwdCB3aGVuIFRYL1JYIGlzIGJ1c3kuCiAgKi8KIHZvaWQKIGF0aF9p bnRyKHZvaWQgKmFyZykKQEAgLTE2NTMsNiArMTczMSw5IEBACiAJCV9fZnVuY19fLCBpZnAtPmlm X2ZsYWdzKTsKIAogCUFUSF9MT0NLKHNjKTsKKwlzYy0+c2NfaW5fcmVzZXQrKzsKKwkvKiBYWFgg VE9ETzogc3VzcGVuZCB0YXNrcXVldWUsIGZsdXNoIHRhc2txdWV1ZSBvcHMsIHN1c3BlbmQgUlg/ ICovCisJYXRoX2xvY2tfcnhfY2hlY2soc2MpOwogCS8qCiAJICogU3RvcCBhbnl0aGluZyBwcmV2 aW91c2x5IHNldHVwLiAgVGhpcyBpcyBzYWZlCiAJICogd2hldGhlciB0aGlzIGlzIHRoZSBmaXJz dCB0aW1lIHRocm91Z2ggb3Igbm90LgpAQCAtMTc0MCw2ICsxODIxLDcgQEAKIAljYWxsb3V0X3Jl c2V0KCZzYy0+c2Nfd2RfY2gsIGh6LCBhdGhfd2F0Y2hkb2csIHNjKTsKIAlhdGhfaGFsX2ludHJz ZXQoYWgsIHNjLT5zY19pbWFzayk7CiAKKwlzYy0+c2NfaW5fcmVzZXQtLTsKIAlBVEhfVU5MT0NL KHNjKTsKIAogI2lmZGVmIEFUSF9UWDk5X0RJQUcKQEAgLTE3OTUsNiArMTg3Nyw4IEBACiAJCWF0 aF9kcmFpbnR4cShzYywgQVRIX1JFU0VUX0RFRkFVTFQpOwogCQlpZiAoIXNjLT5zY19pbnZhbGlk KSB7CiAJCQlhdGhfc3RvcHJlY3Yoc2MpOworCQkJLyogWFhYIHRoaXMgZHJvcHMgdGhlIGxvY2sg dGVtcG9yYXJpbHkgKi8KKwkJCWF0aF9yeF9wcm9jKHNjLCAwKTsKIAkJCWF0aF9oYWxfcGh5ZGlz YWJsZShhaCk7CiAJCX0gZWxzZQogCQkJc2MtPnNjX3J4bGluayA9IE5VTEw7CkBAIC0xODA4LDEw ICsxODkyLDI0IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOwogCiAJ QVRIX0xPQ0soc2MpOworCWF0aF9sb2NrX3J4X2NoZWNrKHNjKTsKIAlhdGhfc3RvcF9sb2NrZWQo aWZwKTsKIAlBVEhfVU5MT0NLKHNjKTsKIH0KIAoraW50CithdGhfcmVzZXQoc3RydWN0IGlmbmV0 ICppZnAsIEFUSF9SRVNFVF9UWVBFIHJlc2V0X3R5cGUpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAq c2MgPSBpZnAtPmlmX3NvZnRjOworCWludCByOworCisJQVRIX0xPQ0soc2MpOworCWF0aF9sb2Nr X3J4X2NoZWNrKHNjKTsKKwlyID0gYXRoX3Jlc2V0X2xvY2tlZChpZnAsIHJlc2V0X3R5cGUpOwor CUFUSF9VTkxPQ0soc2MpOworCXJldHVybiByOworfQorCiAvKgogICogUmVzZXQgdGhlIGhhcmR3 YXJlIHcvbyBsb3Npbmcgb3BlcmF0aW9uYWwgc3RhdGUuICBUaGlzIGlzCiAgKiBiYXNpY2FsbHkg YSBtb3JlIGVmZmljaWVudCB3YXkgb2YgZG9pbmcgYXRoX3N0b3AsIGF0aF9pbml0LApAQCAtMTgy MCw3ICsxOTE4LDcgQEAKICAqIHRvIHJlc2V0IG9yIHJlbG9hZCBoYXJkd2FyZSBzdGF0ZS4KICAq LwogaW50Ci1hdGhfcmVzZXQoc3RydWN0IGlmbmV0ICppZnAsIEFUSF9SRVNFVF9UWVBFIHJlc2V0 X3R5cGUpCithdGhfcmVzZXRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBBVEhfUkVTRVRfVFlQ RSByZXNldF90eXBlKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsK IAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IGlmcC0+aWZfbDJjb207CkBAIC0xODI5LDE4ICsx OTI3LDE1IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfUkVTRVQsICIlczogY2FsbGVkXG4i LCBfX2Z1bmNfXyk7CiAKLQlBVEhfTE9DSyhzYyk7CisJQVRIX0xPQ0tfQVNTRVJUKHNjKTsKIAlz Yy0+c2NfaW5fcmVzZXQrKzsKLQlBVEhfVU5MT0NLKHNjKTsKKwlhdGhfbG9ja19yeF9jaGVjayhz Yyk7CiAKIAlhdGhfaGFsX2ludHJzZXQoYWgsIDApOwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICov CiAJYXRoX2RyYWludHhxKHNjLCByZXNldF90eXBlKTsJLyogc3RvcCB4bWl0IHNpZGUgKi8KLQkv KgotCSAqIFhYWCBEb24ndCBmbHVzaCBpZiBBVEhfUkVTRVRfTk9MT1NTO2J1dCB3ZSBoYXZlIHRv IGZpcnN0Ci0JICogWFhYIG5lZWQgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCByYWNlIHdpdGggYW4g b3V0c3RhbmRpbmcKLQkgKiBYWFggdGFza3F1ZXVlIGNhbGwuCi0JICovCiAJYXRoX3N0b3ByZWN2 KHNjKTsJCS8qIHN0b3AgcmVjdiBzaWRlICovCisJLyogWFhYIHRoaXMgZHJvcHMgdGhlIGxvY2sg dGVtcG9yYXJpbHkgKi8KKwlhdGhfcnhfcHJvYyhzYywgMCk7CiAJYXRoX3NldHRraXBtaWMoc2Mp OwkJLyogY29uZmlndXJlIFRLSVAgTUlDIGhhbmRsaW5nICovCiAJLyogTkI6IGluZGljYXRlIGNo YW5uZWwgY2hhbmdlIHNvIHdlIGRvIGEgZnVsbCByZXNldCAqLwogCWlmICghYXRoX2hhbF9yZXNl dChhaCwgc2MtPnNjX29wbW9kZSwgaWMtPmljX2N1cmNoYW4sIEFIX1RSVUUsICZzdGF0dXMpKQpA QCAtMTg2NywxMyArMTk2MiwyNiBAQAogI2VuZGlmCiAJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywg TlVMTCk7CiAJfQorCisJLyogUmVzdGFydCBUWDsgc2NoZWR1bGUgVFggZnJhbWVzIGlmIG5lZWRl ZCAqLworCWlmIChyZXNldF90eXBlID09IEFUSF9SRVNFVF9OT0xPU1MpIHsKKwkJaW50IGk7CisK KwkJZm9yIChpID0gMDsgaSA8IEhBTF9OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJCWlmIChBVEhf VFhRX1NFVFVQKHNjLCBpKSkgeworCQkJCUFUSF9UWFFfTE9DSygmc2MtPnNjX3R4cVtpXSk7CisJ CQkJYXRoX3R4cV9yZXN0YXJ0X2RtYShzYywgJnNjLT5zY190eHFbaV0pOworCQkJCWF0aF90eHFf c2NoZWQoc2MsICZzYy0+c2NfdHhxW2ldKTsKKwkJCQlBVEhfVFhRX1VOTE9DSygmc2MtPnNjX3R4 cVtpXSk7CisJCQl9CisJCX0KKwl9CisKIAlhdGhfaGFsX2ludHJzZXQoYWgsIHNjLT5zY19pbWFz ayk7CiAKLQlBVEhfTE9DSyhzYyk7CiAJc2MtPnNjX2luX3Jlc2V0LS07Ci0JQVRIX1VOTE9DSyhz Yyk7CiAKLQlhdGhfc3RhcnQoaWZwKTsJCQkvKiByZXN0YXJ0IHhtaXQgKi8KKwlhdGhfc3RhcnRf bG9ja2VkKGlmcCk7CQkJLyogcmVzdGFydCB4bWl0ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIw MTMsMTQgKzIxMjEsNDUgQEAKIGF0aF9zdGFydChzdHJ1Y3QgaWZuZXQgKmlmcCkKIHsKIAlzdHJ1 Y3QgYXRoX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisKKwlBVEhfTE9DSyhzYyk7CisKKwkv KgorCSAqIFdlIG1heSBiZSBjYWxsZWQgZHVyaW5nIGFuIGFjdGl2ZSByZXNldCBmcm9tIGFub3Ro ZXIgdGhyZWFkOworCSAqIGF0IHRoaXMgcG9pbnQgd2UganVzdCBkZWZlciB1bnRpbCB0aGUgcmVz ZXQgaXMgY29tcGxldGUuCisJICogVGhlIHJlc2V0IHdpbGwgY2FsbCBhdGhfc3RhcnRfbG9ja2Vk IGZvciB1cy4KKwkgKgorCSAqIEZvciBub3csIGRvbid0IGRlZmVyIGlmIGNhbGxlZCBkdXJpbmcg YSBub24tcmVzZXQgYXRoX3J4X3Byb2M7CisJICogdGhpcyBtYWludGFpbnMgdGhlIHNhbWUgYmVo YXZpb3VyIHRoYXQgdGhlIGN1cnJlbnQgZHJpdmVyIGNvZGUKKwkgKiBjYW4gZG8gKGllLCBUWCBh bmQgUlggcGF0aHMgY2FuIGludGVybGVhdmUuKQorCSAqLworCWlmIChzYy0+c2NfaW5fcmVzZXQp IHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LAorCQkgICAgIiVzOiBzY19pbl9yZXNldD0l ZDsgc2tpcHBpbmdcbiIsCisJCSAgICAgICAgX19mdW5jX18sIHNjLT5zY19pbl9yZXNldCk7CisJ fSBlbHNlIHsKKwkJYXRoX3N0YXJ0X2xvY2tlZChpZnApOworCX0KKwlBVEhfVU5MT0NLKHNjKTsK K30KKworc3RhdGljIHZvaWQKK2F0aF9zdGFydF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnApCit7 CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOwogCXN0cnVjdCBpZWVlODAy MTFfbm9kZSAqbmk7CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCXN0cnVjdCBtYnVmICptLCAqbmV4 dDsKIAlhdGhfYnVmaGVhZCBmcmFnczsKIAlpbnQgdHggPSAwOwogCisJQVRIX0xPQ0tfQVNTRVJU KHNjKTsKKwogCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDAg fHwgc2MtPnNjX2ludmFsaWQpCiAJCXJldHVybjsKKworCXNjLT5zY19pbl90eHNlbmQrKzsKKwog CWZvciAoOzspIHsKIAkJLyoKIAkJICogR3JhYiBhIFRYIGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBy ZXNvdXJjZXMuCkBAIC0yMTA1LDYgKzIyNDQsNyBAQAogCiAJCXNjLT5zY193ZF90aW1lciA9IDU7 CiAJfQorCXNjLT5zY19pbl90eHNlbmQtLTsKIH0KIAogc3RhdGljIGludApAQCAtMzQyMSw2ICsz NTYxLDggQEAKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCisJQVRI X0xPQ0tfQVNTRVJUKHNjKTsKKwogCW0gPSBiZi0+YmZfbTsKIAlpZiAobSA9PSBOVUxMKSB7CiAJ CS8qCkBAIC0zNzE0LDEwICszODU2LDQxIEBACiBhdGhfcnhfdGFza2xldCh2b2lkICphcmcsIGlu dCBucGVuZGluZykKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFyZzsKKwlzdHJ1Y3QgaWZu ZXQgKmlmcCA9IHNjLT5zY19pZnA7CiAKIAlDVFIxKEFUSF9LVFJfSU5UUiwgImF0aF9yeF9wcm9j OiBwZW5kaW5nPSVkIiwgbnBlbmRpbmcpOwogCURQUklOVEYoc2MsIEFUSF9ERUJVR19SWF9QUk9D LCAiJXM6IHBlbmRpbmcgJXVcbiIsIF9fZnVuY19fLCBucGVuZGluZyk7CisJQVRIX0xPQ0soc2Mp OworCisJLyoKKwkgKiBJZiB3ZSd2ZSBvY2N1cmVkIHdoaWxzdCB3ZSdyZSBidXN5IGluIGEgcmVz ZXQsCisJICogbG9nIGEgd2FybmluZyBhbmQgYmFpbC4gVGhpcyBtYXkgb2NjdXIgd2hpbHN0CisJ ICogYXRoX3J4X3Byb2MoKSBpcyBmbHVzaGluZyBmcmFtZXMgYW5kIHJlbGVhc2VzCisJICogdGhl IGNvbWxvY2suCisJICovCisJaWYgKHNjLT5zY19pbl9yZXNldCkgeworCQlkZXZpY2VfcHJpbnRm KHNjLT5zY19kZXYsICIlczogc2NfaW5fcmVzZXQ9JWQsIGJhaWxpbmchXG4iLAorCQkgICAgX19m dW5jX18sIHNjLT5zY19pbl9yZXNldCk7CisJCXRhc2txdWV1ZV9lbnF1ZXVlX2Zhc3Qoc2MtPnNj X3RxLCAmc2MtPnNjX3J4dGFzayk7CisJCUFUSF9VTkxPQ0soc2MpOworCQlyZXR1cm47CisJfQor CXNjLT5zY19pbl9yeHRhc2tsZXQrKzsKIAlhdGhfcnhfcHJvYyhzYywgMSk7CisKKwkvKgorCSAq IEFnZSBmcmFtZXMgb24gdGhlIEZGIGFzc2VtYmx5IHF1ZXVlOyB0aGVuCisJICoga2ljayBvZmYg YW5vdGhlciByb3VuZCBvZiBUWC4KKwkgKi8KKwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZG X0RSVl9PQUNUSVZFKSA9PSAwKSB7CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCisJ CWllZWU4MDIxMV9mZl9hZ2VfYWxsKGljLCAxMDApOworI2VuZGlmCisJCWlmICghSUZRX0lTX0VN UFRZKCZpZnAtPmlmX3NuZCkpCisJCQlhdGhfc3RhcnRfbG9ja2VkKGlmcCk7CisJfQorCXNjLT5z Y19pbl9yeHRhc2tsZXQtLTsKKwlBVEhfVU5MT0NLKHNjKTsKIH0KIAogc3RhdGljIHZvaWQKQEAg LTM3NDAsNiArMzkxMywzMSBAQAogCXVfaW50NjRfdCB0c2Y7CiAJaW50IG5wa3RzID0gMDsKIAor CS8qCisJICogVGhpcyBpcyBzZXBhcmF0ZSB0byBzY19pbl9yeHRhc2tsZXQuCisJICoKKwkgKiBJ dCdzIHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBmdW5jdGlvbiB3aWxsIHRyeQorCSAqIHRvIGNv bXBsZXRlIHNvbWUgd29yayBvbmNlIHdlIGxldCBnbyBvZiB0aGUgQVRIX0xPQ0sgLQorCSAqIGVn IGEgcmVzZXQsIGNoYW5uZWwgY2hhbmdlIGZ1bmN0aW9uLiBTaW5jZSB3ZSBkb24ndCB3YW50CisJ ICogdGhpcyB0byBvY2N1ciwgd2UgY291bGQgY2hlY2sgc2NfaW5fcnh0YXNrbGV0IC0gYnV0IHRo ZW4KKwkgKiB3aGF0IGlmIHRoZSByZXNldC9jaGFuY2hhbmdlIGlzIHdoYXQgaGFzIGNhbGxlZCBh dGhfcnhfcHJvYz8KKwkgKi8KKwlBVEhfTE9DS19BU1NFUlQoc2MpOworCWlmIChzYy0+c2NfaW5f cmVzZXQgPiAxIHx8IHNjLT5zY19pbl9yeHByb2MgPj0gMSkgeworCQkvKgorCQkgKiBJZiB0aGlz IGlzIGdyZWF0ZXIgdGhhbiAxLCB3ZSdyZSBiZWluZyByZWN1cnNpdmVseQorCQkgKiBjYWxsZWQg T1IgYmVpbmcgc2NoZWR1bGVkIG9uID4xIENQVS4KKwkJICogRXZlbiB0aG91Z2ggdGhlcmUncyBs b2NraW5nIGludm9sdmVkIGhlcmUsIEkgaGF2ZW4ndAorCQkgKiBjaGVja2VkIHRvIGVuc3VyZSB0 aGF0IHR3byByeHByb2MncyBydW5uaW5nIG9uIHRoZSBzYW1lCisJCSAqIGxpc3QsIGNvbXBsZXRl IHdpdGggbG9ja2luZywgd2lsbCBjb3JyZWN0bHkgaGFuZGxlCisJCSAqIHRoaW5ncy4KKwkJICov CisJCWRldmljZV9wcmludGYoc2MtPnNjX2RldiwKKwkJICAgICIlczogZGFuZ2VyISBzY19pbl9y ZXNldD0lZCwgc2NfaW5fcnhwcm9jPSVkXG4iLAorCQkgICAgX19mdW5jX18sIHNjLT5zY19pbl9y ZXNldCwgc2MtPnNjX2luX3J4cHJvYyk7CisJfQorCXNjLT5zY19pbl9yeHByb2MrKzsKKwogCURQ UklOVEYoc2MsIEFUSF9ERUJVR19SWF9QUk9DLCAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOwog CW5nb29kID0gMDsKIAluZiA9IGF0aF9oYWxfZ2V0Y2hhbm5vaXNlKGFoLCBzYy0+c2NfY3VyY2hh bik7CkBAIC00MDIyLDYgKzQyMjAsMTkgQEAKIAkJbV9hZGoobSwgLUlFRUU4MDIxMV9DUkNfTEVO KTsKIAogCQkvKgorCQkgKiBEcm9wIHRoZSBBVEhfTE9DSyBoZXJlLgorCQkgKgorCQkgKiBXZSBj YW4ndCBob2xkIHRoZSBsb2NrIGFjcm9zcyB0aGUgbmV0ODAyMTEgY2FsbHMgb3IKKwkJICogYmFk IHN0dWZmIG9jY3Vycy4KKwkJICoKKwkJICogSW5zdGVhZCwgd2UgZHJvcCB0aGUgbG9jaywgZG8g dGhlIG5ldDgwMjExIFJYLCB0aGVuCisJCSAqIHdlIHJlYWNxdWlyZSB0aGUgbG9jay4gTGF0ZXIg b24gd2Ugc2hvdWxkIGNoZWNrCisJCSAqIHdoZXRoZXIgdGhlIGludGVyZmFjZSBzdGF0ZSBoYXMg Y2hhbmdlZCwgcmVxdWlyaW5nCisJCSAqIHVzIHRvIGJyZWFrIG91dCBlYXJseS4KKwkJICovCisJ CUFUSF9VTkxPQ0soc2MpOworCisJCS8qCiAJCSAqIExvY2F0ZSB0aGUgbm9kZSBmb3Igc2VuZGVy LCB0cmFjayBzdGF0ZSwgYW5kIHRoZW4KIAkJICogcGFzcyB0aGUgKHJlZmVyZW5jZWQpIG5vZGUg dXAgdG8gdGhlIDgwMi4xMSBsYXllcgogCQkgKiBmb3IgaXRzIHVzZS4KQEAgLTQwNjgsNiArNDI3 OSw5IEBACiAJCX0gZWxzZSB7CiAJCQl0eXBlID0gaWVlZTgwMjExX2lucHV0X2FsbChpYywgbSwg cnMtPnJzX3Jzc2ksIG5mKTsKIAkJfQorCisJCUFUSF9MT0NLKHNjKTsKKwogCQkvKgogCQkgKiBU cmFjayByeCByc3NpIGFuZCBkbyBhbnkgcnggYW50ZW5uYSBtYW5hZ2VtZW50LgogCQkgKi8KQEAg LTQxMzYsMTkgKzQzNTAsMTMgQEAKIAkJYXRoX21vZGVfaW5pdChzYyk7CQkvKiBzZXQgZmlsdGVy cywgZXRjLiAqLwogCQlhdGhfaGFsX3N0YXJ0cGN1cmVjdihhaCk7CS8qIHJlLWVuYWJsZSBQQ1Uv RE1BIGVuZ2luZSAqLwogCi0JCUFUSF9MT0NLKHNjKTsKIAkJYXRoX2hhbF9pbnRyc2V0KGFoLCBz Yy0+c2NfaW1hc2spOwogCQlzYy0+c2Nfa2lja3BjdSA9IDA7Ci0JCUFUSF9VTkxPQ0soc2MpOwog CX0KIAotCWlmIChyZXNjaGVkICYmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfT0FDVElW RSkgPT0gMCkgewotI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwotCQlpZWVlODAyMTFf ZmZfYWdlX2FsbChpYywgMTAwKTsKLSNlbmRpZgotCQlpZiAoIUlGUV9JU19FTVBUWSgmaWZwLT5p Zl9zbmQpKQotCQkJYXRoX3N0YXJ0KGlmcCk7Ci0JfQorCS8qIEZpbmlzaGVkIC0gZGVjcmVtZW50 IHRoaXMgKi8KKwlzYy0+c2NfaW5fcnhwcm9jLS07CisKICN1bmRlZiBQQTJERVNDCiB9CiAKQEAg LTQ1MDIsNiArNDcxMCw4IEBACiAJaW50IG5hY2tlZDsKIAlIQUxfU1RBVFVTIHN0YXR1czsKIAor CUFUSF9MT0NLX0FTU0VSVChzYyk7CisKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfVFhfUFJPQywg IiVzOiB0eCBxdWV1ZSAldSBoZWFkICVwIGxpbmsgJXBcbiIsCiAJCV9fZnVuY19fLCB0eHEtPmF4 cV9xbnVtLAogCQkoY2FkZHJfdCkodWludHB0cl90KSBhdGhfaGFsX2dldHR4YnVmKHNjLT5zY19h aCwgdHhxLT5heHFfcW51bSksCkBAIC00NjQxLDkgKzQ4NTEsOSBAQAogCXVpbnQzMl90IHR4cXM7 CiAKIAlBVEhfTE9DSyhzYyk7CisJc2MtPnNjX2luX3R4cHJvYysrOwogCXR4cXMgPSBzYy0+c2Nf dHhxX2FjdGl2ZTsKIAlzYy0+c2NfdHhxX2FjdGl2ZSAmPSB+dHhxczsKLQlBVEhfVU5MT0NLKHNj KTsKIAogCWlmIChUWFFBQ1RJVkUodHhxcywgMCkgJiYgYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2Mt PnNjX3R4cVswXSwgMSkpCiAJCS8qIFhYWCB3aHkgaXMgbGFzdHJ4IHVwZGF0ZWQgaW4gdHggY29k ZT8gKi8KQEAgLTQ2NTYsNyArNDg2Niw5IEBACiAJaWYgKHNjLT5zY19zb2Z0bGVkKQogCQlhdGhf bGVkX2V2ZW50KHNjLCBzYy0+c2NfdHhyaXgpOwogCi0JYXRoX3N0YXJ0KGlmcCk7CisJYXRoX3N0 YXJ0X2xvY2tlZChpZnApOworCXNjLT5zY19pbl90eHByb2MtLTsKKwlBVEhfVU5MT0NLKHNjKTsK IH0KIAogLyoKQEAgLTQ2NzIsOSArNDg4NCw5IEBACiAJdWludDMyX3QgdHhxczsKIAogCUFUSF9M T0NLKHNjKTsKKwlzYy0+c2NfaW5fdHhwcm9jKys7CiAJdHhxcyA9IHNjLT5zY190eHFfYWN0aXZl OwogCXNjLT5zY190eHFfYWN0aXZlICY9IH50eHFzOwotCUFUSF9VTkxPQ0soc2MpOwogCiAJLyoK IAkgKiBQcm9jZXNzIGVhY2ggYWN0aXZlIHF1ZXVlLgpAQCAtNDY5OSw3ICs0OTExLDkgQEAKIAlp ZiAoc2MtPnNjX3NvZnRsZWQpCiAJCWF0aF9sZWRfZXZlbnQoc2MsIHNjLT5zY190eHJpeCk7CiAK LQlhdGhfc3RhcnQoaWZwKTsKKwlhdGhfc3RhcnRfbG9ja2VkKGlmcCk7CisJc2MtPnNjX2luX3R4 cHJvYy0tOworCUFUSF9VTkxPQ0soc2MpOwogfQogCiAvKgpAQCAtNDcxNCw5ICs0OTI4LDkgQEAK IAl1aW50MzJfdCB0eHFzOwogCiAJQVRIX0xPQ0soc2MpOworCXNjLT5zY19pbl90eHByb2MrKzsK IAl0eHFzID0gc2MtPnNjX3R4cV9hY3RpdmU7CiAJc2MtPnNjX3R4cV9hY3RpdmUgJj0gfnR4cXM7 Ci0JQVRIX1VOTE9DSyhzYyk7CiAKIAkvKgogCSAqIFByb2Nlc3MgZWFjaCBhY3RpdmUgcXVldWUu CkBAIC00NzM0LDcgKzQ5NDgsOSBAQAogCWlmIChzYy0+c2Nfc29mdGxlZCkKIAkJYXRoX2xlZF9l dmVudChzYywgc2MtPnNjX3R4cml4KTsKIAotCWF0aF9zdGFydChpZnApOworCWF0aF9zdGFydF9s b2NrZWQoaWZwKTsKKwlzYy0+c2NfaW5fdHhwcm9jLS07CisJQVRIX1VOTE9DSyhzYyk7CiB9CiAj dW5kZWYJVFhRQUNUSVZFCiAKQEAgLTQ5MDMsMTEgKzUxMTksMTggQEAKIAlzdHJ1Y3QgaWZuZXQg KmlmcCA9IHNjLT5zY19pZnA7CiAJaW50IGk7CiAKKwlBVEhfTE9DS19BU1NFUlQoc2MpOworCiAJ KHZvaWQpIGF0aF9zdG9wdHhkbWEoc2MpOwogCi0JZm9yIChpID0gMDsgaSA8IEhBTF9OVU1fVFhf UVVFVUVTOyBpKyspCi0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9kcmFp bnR4cShzYywgJnNjLT5zY190eHFbaV0pOworCWZvciAoaSA9IDA7IGkgPCBIQUxfTlVNX1RYX1FV RVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJaWYgKHJlc2V0 X3R5cGUgPT0gQVRIX1JFU0VUX05PTE9TUykKKwkJCQlhdGhfdHhfcHJvY2Vzc3Eoc2MsICZzYy0+ c2NfdHhxW2ldLCAwKTsKKwkJCWVsc2UKKwkJCQlhdGhfdHhfZHJhaW50eHEoc2MsICZzYy0+c2Nf dHhxW2ldKTsKKwkJfQorCX0KICNpZmRlZiBBVEhfREVCVUcKIAlpZiAoc2MtPnNjX2RlYnVnICYg QVRIX0RFQlVHX1JFU0VUKSB7CiAJCXN0cnVjdCBhdGhfYnVmICpiZiA9IFRBSUxRX0ZJUlNUKCZz Yy0+c2NfYmJ1Zik7CkBAIC00OTIxLDggKzUxNDQsMTAgQEAKIAkJfQogCX0KICNlbmRpZiAvKiBB VEhfREVCVUcgKi8KLQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOwotCXNj LT5zY193ZF90aW1lciA9IDA7CisJaWYgKHJlc2V0X3R5cGUgIT0gQVRIX1JFU0VUX05PTE9TUykg eworCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCQlzYy0+c2Nfd2Rf dGltZXIgPSAwOworCX0KIH0KIAogLyoKQEAgLTQ5MzYsNiArNTE2MSwxMCBAQAogCQkoKF9wYSkg LSAoX3NjKS0+c2NfcnhkbWEuZGRfZGVzY19wYWRkcikpKQogCXN0cnVjdCBhdGhfaGFsICphaCA9 IHNjLT5zY19haDsKIAorCURQUklOVEYoc2MsIEFUSF9ERUJVR19BTlksICIlczogY2FsbGVkXG4i LCBfX2Z1bmNfXyk7CisKKwlBVEhfTE9DS19BU1NFUlQoc2MpOworCiAJYXRoX2hhbF9zdG9wcGN1 cmVjdihhaCk7CS8qIGRpc2FibGUgUENVICovCiAJYXRoX2hhbF9zZXRyeGZpbHRlcihhaCwgMCk7 CS8qIGNsZWFyIHJlY3YgZmlsdGVyICovCiAJYXRoX2hhbF9zdG9wZG1hcmVjdihhaCk7CS8qIGRp c2FibGUgRE1BIGVuZ2luZSAqLwpAQCAtNDk3Niw2ICs1MjA1LDggQEAKIAlzdHJ1Y3QgYXRoX2hh bCAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCisJQVRIX0xPQ0tfQVNT RVJUKHNjKTsKKwogCXNjLT5zY19yeGxpbmsgPSBOVUxMOwogCXNjLT5zY19yeHBlbmRpbmcgPSBO VUxMOwogCVRBSUxRX0ZPUkVBQ0goYmYsICZzYy0+c2NfcnhidWYsIGJmX2xpc3QpIHsKQEAgLTUw MjcsNiArNTI1OCw4IEBACiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBpZnAtPmlmX2wyY29t OwogCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKIAorCUFUSF9MT0NLX0FTU0VSVChz Yyk7CisKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfUkVTRVQsICIlczogJXUgKCV1IE1IeiwgZmxh Z3MgMHgleClcbiIsCiAJICAgIF9fZnVuY19fLCBpZWVlODAyMTFfY2hhbjJpZWVlKGljLCBjaGFu KSwKIAkgICAgY2hhbi0+aWNfZnJlcSwgY2hhbi0+aWNfZmxhZ3MpOwpAQCAtNTA0MSw2ICs1Mjc0 LDggQEAKIAkJYXRoX2hhbF9pbnRyc2V0KGFoLCAwKTsJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAq LwogCQlhdGhfZHJhaW50eHEoc2MsIEFUSF9SRVNFVF9GVUxMKTsJLyogY2xlYXIgcGVuZGluZyB0 eCBmcmFtZXMgKi8KIAkJYXRoX3N0b3ByZWN2KHNjKTsJCS8qIHR1cm4gb2ZmIGZyYW1lIHJlY3Yg Ki8KKwkJLyogWFhYIHRoaXMgZHJvcHMgdGhlIGxvY2sgdGVtcG9yYXJpbHkgKi8KKwkJYXRoX3J4 X3Byb2Moc2MsIDApOwogCQlpZiAoIWF0aF9oYWxfcmVzZXQoYWgsIHNjLT5zY19vcG1vZGUsIGNo YW4sIEFIX1RSVUUsICZzdGF0dXMpKSB7CiAJCQlpZl9wcmludGYoaWZwLCAiJXM6IHVuYWJsZSB0 byByZXNldCAiCiAJCQkgICAgImNoYW5uZWwgJXUgKCV1IE1IeiwgZmxhZ3MgMHgleCksIGhhbCBz dGF0dXMgJXVcbiIsCkBAIC01MTI5LDcgKzUzNjQsNyBAQAogCQkJRFBSSU5URihzYywgQVRIX0RF QlVHX0NBTElCUkFURSwKIAkJCQkiJXM6IHJmZ2FpbiBjaGFuZ2VcbiIsIF9fZnVuY19fKTsKIAkJ CXNjLT5zY19zdGF0cy5hc3RfcGVyX3JmZ2FpbisrOwotCQkJYXRoX3Jlc2V0KGlmcCwgQVRIX1JF U0VUX05PTE9TUyk7CisJCQlhdGhfcmVzZXRfbG9ja2VkKGlmcCwgQVRIX1JFU0VUX05PTE9TUyk7 CiAJCX0KIAkJLyoKIAkJICogSWYgdGhpcyBsb25nIGNhbCBpcyBhZnRlciBhbiBpZGxlIHBlcmlv ZCwgdGhlbgpAQCAtNTI0NywxMSArNTQ4Miw3IEBACiAJc3RydWN0IGlmbmV0ICppZnAgPSBpYy0+ aWNfaWZwOwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKIAotCS8qIFRo aXMgaXNuJ3Qgc3RyaWN0bHkgYSByZXNldCwgYnV0IHdlIHN0aWxsIGhhdmUgdG8gZHJhaW4gKi8K IAlBVEhfTE9DSyhzYyk7Ci0Jc2MtPnNjX2luX3Jlc2V0Kys7Ci0JQVRIX1VOTE9DSyhzYyk7Ci0K IAkodm9pZCkgYXRoX2NoYW5fc2V0KHNjLCBpYy0+aWNfY3VyY2hhbik7CiAJLyoKIAkgKiBJZiB3 ZSBhcmUgcmV0dXJuaW5nIHRvIG91ciBic3MgY2hhbm5lbCB0aGVuIG1hcmsgc3RhdGUKQEAgLTUy NjEsOSArNTQ5Miw2IEBACiAJICovCiAJaWYgKCFzYy0+c2Nfc2Nhbm5pbmcgJiYgaWMtPmljX2N1 cmNoYW4gPT0gaWMtPmljX2Jzc2NoYW4pCiAJCXNjLT5zY19zeW5jYmVhY29uID0gMTsKLQotCUFU SF9MT0NLKHNjKTsKLQlzYy0+c2NfaW5fcmVzZXQtLTsKIAlBVEhfVU5MT0NLKHNjKTsKIH0KIApA QCAtNTgwNCw3ICs2MDMyLDcgQEAKIAkJCSAgICBoYW5ncyAmIDB4ZmYgPyAiYmIiIDogIm1hYyIs IGhhbmdzKTsKIAkJfSBlbHNlCiAJCQlpZl9wcmludGYoaWZwLCAiZGV2aWNlIHRpbWVvdXRcbiIp OwotCQlhdGhfcmVzZXQoaWZwLCBBVEhfUkVTRVRfTk9MT1NTKTsKKwkJYXRoX3Jlc2V0X2xvY2tl ZChpZnAsIEFUSF9SRVNFVF9OT0xPU1MpOwogCQlpZnAtPmlmX29lcnJvcnMrKzsKIAkJc2MtPnNj X3N0YXRzLmFzdF93YXRjaGRvZysrOwogCX0K --20cf30363cef507c7704b0190203--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=9KkQbiCCBQm5Xm_9dNZtY6jQ1hzO0SWSZ4z323jF=Hw>