Date: Fri, 3 May 2019 11:11:15 -0400 From: Drew Gallatin <gallatin@netflix.com> To: freebsd-transport@freebsd.org Subject: RFC: NUMA mods for SO_REUSEPORT_LB Message-ID: <CADLQ3sJg0wiqn_zg9bVvxJA5JQFZZVKJpZYt_g1xBk5k%2B9xLMw@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--00000000000026ab950587fd2a3a Content-Type: text/plain; charset="UTF-8" The next patch up in my NUMA patchset is my patch to affinitize SO_REUSEPORT_LB sockets. I have to admit that I'm not super happy with it, and I was looking for constructive feedback. In our (Netflix) workload, we have an nginx master process which creates N different listen sockets when SO_REUSEPORT_LB is in use. He forks off the workers, and they then affinitize themselves as directed in the nginx.conf. (worker N might not be bound to CPU N). They then take over the listen sockets and start serving. In order to deal with this, I made a TCP_REUSPORT_LB_NUMA socket option. The inpcblbgroup struct has been modified to add an il_numa_domain field. When a group is created, this is set to M_NODOM ("numa wildcard"). On lookup, only groups with matching numa domains are considered when an mbuf has a non-M_NODOM m_numa_domain field set. (and a numa wildcard match is done if no matches are found). When nginx wants to use this, he calls setsockopt(... TCP_REUSEPORT_LB_NUMA...) on the existing listen socket This sockopt: - gets the CPU affinity mask of the calling thread - finds the current NUMA domain for the calling thread - looks up the inp and removes it from the numa-wildcard (M_NODOM) group and inserts it into a new group specific to that numa domain. This actually works quite well for me, but I don't think it is ready for prime-time. The sockopt API was admittedly done to satisfy my particular use case, and I'm looking for feedback on how to improve it. Specifically: 1) Is it OK to add a new option that modifies an existing listen socket? - This was the right choice for my application. Is it too awkward in general? 2) Should the sockopt put the job of selecting the appropriate numa domain onto the caller? Right now, everything is automatic. Should it just take an argument which corresponds to a NUMA domain (or -1 to remove the NUMA domain affinity)? Should it take an argument that corresponds to a CPUSET? Any feedback is welcome. Thanks, Drew --00000000000026ab950587fd2a3a Content-Type: text/x-patch; charset="US-ASCII"; name="reuse_numa.diff" Content-Disposition: attachment; filename="reuse_numa.diff" Content-Transfer-Encoding: base64 Content-ID: <f_jv87smzc0> X-Attachment-Id: f_jv87smzc0 Y29tbWl0IDNjOTViM2E0MzMyZWE0NjlhMTY0NDA0NjdmZGQ4MDdkYzQyYzY1OTIKQXV0aG9yOiBE cmV3IEdhbGxhdGluIDxnYWxsYXRpbkBuZXRmbGl4LmNvbT4KRGF0ZTogICBTYXQgTWFyIDMwIDE0 OjA0OjUwIDIwMTkgLTA0MDAKCiAgICBUYWtlIG51bWEgYWZmaW5pdHkgaW50byBhY2NvdW50IGZv ciBpbl9wY2JsYiBncm91cHMKICAgIAogICAgLSBJZiBhIHByb2Nlc3MgaGFzIENQVSBhZmZpbml0 eSBzZXQgd2hlbiBhIGxpc3RlbiBzb2NrZXQKICAgICAgICAgICAgbWFya2VkIGFzIGxvYWQtYmFs YW5jZSBpcyBib3VuZCwgdGhlbiB0aGUgbGJncm91cAogICAgICAgICAgICB0YWtlcyB0aGUgTlVN QSBkb21haW4gb2YgdGhlIGN1cnJlbnQgQ1BVIGFzIHRoZQogICAgICAgICAgICBhZmZpbml0eSB0 aGF0IHNob3VsZCBiZSB1c2VkIGZvciBkaXN0cmlidXRpbmcgY29ubmVjdGlvbnMuCiAgICAKICAg IC0gSWYgYSBwcm9jZXNzIGNhbGxzIFRDUF9SRVVTUE9SVF9MQl9OVU1BIG9uIGEgYm91bmQKICAg ICAgICAgICAgbGlzdGVuIHNvY2tldCBhZnRlciBzZXR0aW5nIGEgQ1BVIGFmZmluaXR5LAogICAg ICAgICAgICB0aGUgaW5wIGlzIHRoZW4gcHVsbGVkIG91dCBvZiB0aGUgY3VycmVudAogICAgICAg ICAgICBsYiBncm91cCBhbmQgaW5zZXJ0ZWQgaW50byBvbmUgd2l0aCB0aGUKICAgICAgICAgICAg YXBwcm9wcmlhdGUgYWZmaW5pdHkgc2V0LgogICAgCiAgICBKSVJBOiBOQ0QtNDI3NQoKZGlmZiAt LWdpdCBhL0ZyZWVCU0Qvc3lzL25ldGluZXQvaW5fcGNiLmMgYi9GcmVlQlNEL3N5cy9uZXRpbmV0 L2luX3BjYi5jCmluZGV4IDFkMjA2NDc2M2VmOS4uMzgwMDU4MDIxYzdkIDEwMDY0NAotLS0gYS9G cmVlQlNEL3N5cy9uZXRpbmV0L2luX3BjYi5jCisrKyBiL0ZyZWVCU0Qvc3lzL25ldGluZXQvaW5f cGNiLmMKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9pZAlpbl9wY2JyZW1saXN0cyhzdHJ1 Y3QgaW5wY2IgKmlucCk7CiBzdGF0aWMgc3RydWN0IGlucGNiCSppbl9wY2Jsb29rdXBfaGFzaF9s b2NrZWQoc3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywKIAkJCSAgICBzdHJ1Y3QgaW5fYWRkciBm YWRkciwgdV9pbnQgZnBvcnRfYXJnLAogCQkJICAgIHN0cnVjdCBpbl9hZGRyIGxhZGRyLCB1X2lu dCBscG9ydF9hcmcsCi0JCQkgICAgaW50IGxvb2t1cGZsYWdzLCBzdHJ1Y3QgaWZuZXQgKmlmcCk7 CisJCQkgICAgaW50IGxvb2t1cGZsYWdzLCBzdHJ1Y3QgaWZuZXQgKmlmcCwgaW50IG51bWFfZG9t YWluKTsKIAogI2RlZmluZSBSQU5HRUNISyh2YXIsIG1pbiwgbWF4KSBcCiAJaWYgKCh2YXIpIDwg KG1pbikpIHsgKHZhcikgPSAobWluKTsgfSBcCkBAIC0yNTAsNiArMjUwLDcgQEAgaW5fcGNibGJn cm91cF9hbGxvYyhzdHJ1Y3QgaW5wY2JsYmdyb3VwaGVhZCAqaGRyLCB1X2NoYXIgdmZsYWcsCiAJ CXJldHVybiAoTlVMTCk7CiAJZ3JwLT5pbF92ZmxhZyA9IHZmbGFnOwogCWdycC0+aWxfbHBvcnQg PSBwb3J0OworCWdycC0+aWxfbnVtYV9kb21haW4gPSBNX05PRE9NOwogCWdycC0+aWxfZGVwZW5k bGFkZHIgPSAqYWRkcjsKIAlncnAtPmlsX2lucHNpeiA9IHNpemU7CiAJQ0tfTElTVF9JTlNFUlRf SEVBRChoZHIsIGdycCwgaWxfbGlzdCk7CkBAIC0yOTAsNiArMjkxLDcgQEAgaW5fcGNibGJncm91 cF9yZXNpemUoc3RydWN0IGlucGNibGJncm91cGhlYWQgKmhkciwKIAkgICAgKCJpbnZhbGlkIG5l dyBsb2NhbCBncm91cCBzaXplICVkIGFuZCBvbGQgbG9jYWwgZ3JvdXAgY291bnQgJWQiLAogCSAg ICAgZ3JwLT5pbF9pbnBzaXosIG9sZF9ncnAtPmlsX2lucGNudCkpOwogCisJZ3JwLT5pbF9udW1h X2RvbWFpbiA9IG9sZF9ncnAtPmlsX251bWFfZG9tYWluOwogCWZvciAoaSA9IDA7IGkgPCBvbGRf Z3JwLT5pbF9pbnBjbnQ7ICsraSkKIAkJZ3JwLT5pbF9pbnBbaV0gPSBvbGRfZ3JwLT5pbF9pbnBb aV07CiAJZ3JwLT5pbF9pbnBjbnQgPSBvbGRfZ3JwLT5pbF9pbnBjbnQ7CkBAIC0zMjEsNiArMzIz LDI0IEBAIGluX3BjYmxiZ3JvdXBfcmVvcmRlcihzdHJ1Y3QgaW5wY2JsYmdyb3VwaGVhZCAqaGRy LCBzdHJ1Y3QgaW5wY2JsYmdyb3VwICoqZ3JwcCwKIAl9CiB9CiAKK3N0YXRpYyBfX25vaW5saW5l IGludAoraW5fcGNiZ2V0ZG9tKHZvaWQpCit7CisJc3RydWN0IGNwdXNldCAqYzsKKworCWMgPSBj dXJ0aHJlYWQtPnRkX2NwdXNldDsKKwlpZiAoQ1BVX0NPVU5UKCZjLT5jc19tYXNrKSA9PSBtcF9u Y3B1cykKKwkJcmV0dXJuIChNX05PRE9NKTsKKworCS8qCisJICogc29tZWJvZHkgc2V0IHRoZSBh ZmZpbml0eSBhbmQgdGhleSBhcmUgdXNpbmcKKwkgKiBTT19SRVVTRVBPUlRfTEIsIGFzc3VtZSB0 aGV5IHdhbnQgdGhlaXIgZ3JvdXAKKwkgKiBib3VuZCB0byB0aGUgYXBwcm9wcmlhdGUgbnVtYSBk b21haW4gZm9yIHRoZQorCSAqIENQVSB0aGV5IGFyZSBydW5uaW5nIG9uCisJICovCisJcmV0dXJu IChQQ1BVX0dFVChkb21haW4pKTsKK30KKwogLyoKICAqIEFkZCBQQ0IgdG8gbG9hZCBiYWxhbmNl IGdyb3VwIGZvciBTT19SRVVTRVBPUlRfTEIgb3B0aW9uLgogICovCkBAIC0zMzMsNiArMzUzLDcg QEAgaW5fcGNiaW5zbGJncm91cGhhc2goc3RydWN0IGlucGNiICppbnApCiAJc3RydWN0IGlucGNi bGJncm91cGhlYWQgKmhkcjsKIAlzdHJ1Y3QgaW5wY2JsYmdyb3VwICpncnA7CiAJdWludDMyX3Qg aWR4OworCWludCBudW1hX2RvbWFpbjsKIAogCXBjYmluZm8gPSBpbnAtPmlucF9wY2JpbmZvOwog CkBAIC0zNTYsMTEgKzM3NywxMyBAQCBpbl9wY2JpbnNsYmdyb3VwaGFzaChzdHJ1Y3QgaW5wY2Ig KmlucCkKIAl9CiAjZW5kaWYKIAorCW51bWFfZG9tYWluID0gaW5fcGNiZ2V0ZG9tKCk7CiAJaWR4 ID0gSU5QX1BDQlBPUlRIQVNIKGlucC0+aW5wX2xwb3J0LCBwY2JpbmZvLT5pcGlfbGJncm91cGhh c2htYXNrKTsKIAloZHIgPSAmcGNiaW5mby0+aXBpX2xiZ3JvdXBoYXNoYmFzZVtpZHhdOwogCUNL X0xJU1RfRk9SRUFDSChncnAsIGhkciwgaWxfbGlzdCkgewogCQlpZiAoZ3JwLT5pbF92ZmxhZyA9 PSBpbnAtPmlucF92ZmxhZyAmJgogCQkgICAgZ3JwLT5pbF9scG9ydCA9PSBpbnAtPmlucF9scG9y dCAmJgorCQkgICAgZ3JwLT5pbF9udW1hX2RvbWFpbiA9PSBudW1hX2RvbWFpbiAmJgogCQkgICAg bWVtY21wKCZncnAtPmlsX2RlcGVuZGxhZGRyLAogCQkgICAgJmlucC0+aW5wX2luYy5pbmNfaWUu aWVfZGVwZW5kbGFkZHIsCiAJCSAgICBzaXplb2YoZ3JwLT5pbF9kZXBlbmRsYWRkcikpID09IDAp CkBAIC0zNzMsNiArMzk2LDcgQEAgaW5fcGNiaW5zbGJncm91cGhhc2goc3RydWN0IGlucGNiICpp bnApCiAJCSAgICBJTlBDQkxCR1JPVVBfU0laTUlOKTsKIAkJaWYgKGdycCA9PSBOVUxMKQogCQkJ cmV0dXJuIChFTk9CVUZTKTsKKwkJZ3JwLT5pbF9udW1hX2RvbWFpbiA9IG51bWFfZG9tYWluOwog CX0gZWxzZSBpZiAoZ3JwLT5pbF9pbnBjbnQgPT0gZ3JwLT5pbF9pbnBzaXopIHsKIAkJaWYgKGdy cC0+aWxfaW5wc2l6ID49IElOUENCTEJHUk9VUF9TSVpNQVgpIHsKIAkJCWlmIChyYXRlY2hlY2so Jmxhc3RwcmludCwgJmludGVydmFsKSkKQEAgLTQzMSw2ICs0NTUsNTcgQEAgaW5fcGNicmVtbGJn cm91cGhhc2goc3RydWN0IGlucGNiICppbnApCiAJfQogfQogCitpbnQKK2luX3BjYmxiZ3JvdXBf bnVtYShzdHJ1Y3QgaW5wY2IgKmlucCkKK3sKKwlzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvOwor CXN0cnVjdCBpbnBjYmxiZ3JvdXBoZWFkICpoZHI7CisJc3RydWN0IGlucGNibGJncm91cCAqZ3Jw OworCWludCBlcnIsIGksIG51bWFfZG9tYWluOworCisJcGNiaW5mbyA9IGlucC0+aW5wX3BjYmlu Zm87CisKKwllcnIgPSBFTk9FTlQ7CisJbnVtYV9kb21haW4gPSBpbl9wY2JnZXRkb20oKTsKKwlp ZiAobnVtYV9kb21haW4gPT0gTV9OT0RPTSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJSU5QX1dM T0NLX0FTU0VSVChpbnApOworCUlOUF9IQVNIX1dMT0NLKGlucC0+aW5wX3BjYmluZm8pOworCisK KwloZHIgPSAmcGNiaW5mby0+aXBpX2xiZ3JvdXBoYXNoYmFzZVsKKwkgICAgSU5QX1BDQlBPUlRI QVNIKGlucC0+aW5wX2xwb3J0LCBwY2JpbmZvLT5pcGlfbGJncm91cGhhc2htYXNrKV07CisJQ0tf TElTVF9GT1JFQUNIKGdycCwgaGRyLCBpbF9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBncnAt PmlsX2lucGNudDsgKytpKSB7CisJCQlpZiAoZ3JwLT5pbF9pbnBbaV0gIT0gaW5wKQorCQkJCWNv bnRpbnVlOworCisJCQlpZiAoZ3JwLT5pbF9udW1hX2RvbWFpbiA9PSBudW1hX2RvbWFpbikgewor CQkJCWVyciA9IDA7CisJCQkJZ290byBhYm9ydF93aXRoX2hhc2hfd2xvY2s7CisJCQl9CisJCQlp ZiAoZ3JwLT5pbF9udW1hX2RvbWFpbiAhPSBNX05PRE9NKSB7CisJCQkJc3RhdGljIGludCBsaW1p dCA9IDU7CisJCQkJaWYgKGxpbWl0ID4gMCkgeworCQkJCQlsaW1pdC0tOworCQkJCQlwcmludGYo ImRvbSAlZCAtPiAlZFxuIiwKKwkJCQkJICAgIGdycC0+aWxfbnVtYV9kb21haW4sIG51bWFfZG9t YWluKTsKKwkJCQl9CisJCQl9CisJCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgb2xkIGdyb3VwICov CisJCQlpbl9wY2JyZW1sYmdyb3VwaGFzaChpbnApOworCQkJLyogYWRkIGl0IHRvIHRoZSBuZXcg Z3JvdXAgYmFzZWQgb24gbnVtYSBkb21haW4gKi8KKwkJCWluX3BjYmluc2xiZ3JvdXBoYXNoKGlu cCk7CisJCQllcnIgPSAwOworCQkJZ290byBhYm9ydF93aXRoX2hhc2hfd2xvY2s7CisJCX0KKwl9 CithYm9ydF93aXRoX2hhc2hfd2xvY2s6CisJSU5QX0hBU0hfV1VOTE9DSyhpbnAtPmlucF9wY2Jp bmZvKTsKKwlyZXR1cm4gKGVycik7Cit9CisKIC8qCiAgKiBEaWZmZXJlbnQgcHJvdG9jb2xzIGlu aXRpYWxpemUgdGhlaXIgaW5wY2JzIGRpZmZlcmVudGx5IC0gZ2l2aW5nCiAgKiBkaWZmZXJlbnQg bmFtZSB0byB0aGUgbG9jay4gIEJ1dCB0aGV5IGFsbCBhcmUgZGlzcG9zZWQgdGhlIHNhbWUuCkBA IC0xMzQ1LDcgKzE0MjAsNyBAQCBpbl9wY2Jjb25uZWN0X3NldHVwKHN0cnVjdCBpbnBjYiAqaW5w LCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwKIAkJCXJldHVybiAoZXJyb3IpOwogCX0KIAlvaW5wID0g aW5fcGNibG9va3VwX2hhc2hfbG9ja2VkKGlucC0+aW5wX3BjYmluZm8sIGZhZGRyLCBmcG9ydCwK LQkgICAgbGFkZHIsIGxwb3J0LCAwLCBOVUxMKTsKKwkgICAgbGFkZHIsIGxwb3J0LCAwLCBOVUxM LCBNX05PRE9NKTsKIAlpZiAob2lucCAhPSBOVUxMKSB7CiAJCWlmIChvaW5wcCAhPSBOVUxMKQog CQkJKm9pbnBwID0gb2lucDsKQEAgLTE5NjAsOSArMjAzNSwxMCBAQCBpbl9wY2Jsb29rdXBfbG9j YWwoc3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywgc3RydWN0IGluX2FkZHIgbGFkZHIsCiBzdGF0 aWMgX19ub2lubGluZSBzdHJ1Y3QgaW5wY2IgKgogaW5fcGNibG9va3VwX2xiZ3JvdXAoY29uc3Qg c3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywKICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqbGFk ZHIsIHVpbnQxNl90IGxwb3J0LCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZmFkZHIsCi0gICAgdWlu dDE2X3QgZnBvcnQsIGludCBsb29rdXBmbGFncykKKyAgICB1aW50MTZfdCBmcG9ydCwgaW50IGxv b2t1cGZsYWdzLCBpbnQgbnVtYV9kb21haW4pCiB7CiAJc3RydWN0IGlucGNiICpsb2NhbF93aWxk OworCXN0cnVjdCBpbnBjYiAqbnVtYV93aWxkOwogCWNvbnN0IHN0cnVjdCBpbnBjYmxiZ3JvdXBo ZWFkICpoZHI7CiAJc3RydWN0IGlucGNibGJncm91cCAqZ3JwOwogCXVpbnQzMl90IGlkeDsKQEAg LTE5ODIsNiArMjA1OCw3IEBAIGluX3BjYmxvb2t1cF9sYmdyb3VwKGNvbnN0IHN0cnVjdCBpbnBj YmluZm8gKnBjYmluZm8sCiAJICogLSBMb2FkIGJhbGFuY2VkIGdyb3VwIGRvZXMgbm90IGNvbnRh aW4gSVB2NCBtYXBwZWQgSU5FVDYgd2lsZCBzb2NrZXRzCiAJICovCiAJbG9jYWxfd2lsZCA9IE5V TEw7CisJbnVtYV93aWxkID0gTlVMTDsKIAlDS19MSVNUX0ZPUkVBQ0goZ3JwLCBoZHIsIGlsX2xp c3QpIHsKICNpZmRlZiBJTkVUNgogCQlpZiAoIShncnAtPmlsX3ZmbGFnICYgSU5QX0lQVjQpKQpA QCAtMTk5MiwxMiArMjA2OSwyNCBAQCBpbl9wY2Jsb29rdXBfbGJncm91cChjb25zdCBzdHJ1Y3Qg aW5wY2JpbmZvICpwY2JpbmZvLAogCiAJCWlkeCA9IElOUF9QQ0JMQkdST1VQX1BLVEhBU0goZmFk ZHItPnNfYWRkciwgbHBvcnQsIGZwb3J0KSAlCiAJCSAgICBncnAtPmlsX2lucGNudDsKLQkJaWYg KGdycC0+aWxfbGFkZHIuc19hZGRyID09IGxhZGRyLT5zX2FkZHIpCi0JCQlyZXR1cm4gKGdycC0+ aWxfaW5wW2lkeF0pOworCQlpZiAoZ3JwLT5pbF9sYWRkci5zX2FkZHIgPT0gbGFkZHItPnNfYWRk cikgeworCQkJaWYgKG51bWFfZG9tYWluID09IE1fTk9ET00gfHwKKwkJCSAgICBncnAtPmlsX251 bWFfZG9tYWluID09IG51bWFfZG9tYWluKSB7CisJCQkJcmV0dXJuIChncnAtPmlsX2lucFtpZHhd KTsKKwkJCX0gZWxzZQorCQkJCW51bWFfd2lsZCA9IGdycC0+aWxfaW5wW2lkeF07CisJCX0KIAkJ aWYgKGdycC0+aWxfbGFkZHIuc19hZGRyID09IElOQUREUl9BTlkgJiYKLQkJICAgIChsb29rdXBm bGFncyAmIElOUExPT0tVUF9XSUxEQ0FSRCkgIT0gMCkKLQkJCWxvY2FsX3dpbGQgPSBncnAtPmls X2lucFtpZHhdOworCQkgICAgKGxvb2t1cGZsYWdzICYgSU5QTE9PS1VQX1dJTERDQVJEKSAhPSAw KSB7CisJCQlpZiAobG9jYWxfd2lsZCA9PSBOVUxMIHx8IG51bWFfZG9tYWluID09IE1fTk9ET00p CisJCQkJbG9jYWxfd2lsZCA9IGdycC0+aWxfaW5wW2lkeF07CisJCQlpZiAoZ3JwLT5pbF9udW1h X2RvbWFpbiA9PSBudW1hX2RvbWFpbikKKwkJCQlsb2NhbF93aWxkID0gZ3JwLT5pbF9pbnBbaWR4 XTsKKwkJfQogCX0KKwlpZiAobnVtYV93aWxkICE9IE5VTEwpCisJCXJldHVybiAobnVtYV93aWxk KTsKKwogCXJldHVybiAobG9jYWxfd2lsZCk7CiB9CiAKQEAgLTIyNDQsNyArMjMzMyw3IEBAIGlu X3BjYmxvb2t1cF9ncm91cChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5wY2Jn cm91cCAqcGNiZ3JvdXAsCiBzdGF0aWMgc3RydWN0IGlucGNiICoKIGluX3BjYmxvb2t1cF9oYXNo X2xvY2tlZChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRkciBmYWRkciwK ICAgICB1X2ludCBmcG9ydF9hcmcsIHN0cnVjdCBpbl9hZGRyIGxhZGRyLCB1X2ludCBscG9ydF9h cmcsIGludCBsb29rdXBmbGFncywKLSAgICBzdHJ1Y3QgaWZuZXQgKmlmcCkKKyAgICBzdHJ1Y3Qg aWZuZXQgKmlmcCwgaW50IG51bWFfZG9tYWluKQogewogCXN0cnVjdCBpbnBjYmhlYWQgKmhlYWQ7 CiAJc3RydWN0IGlucGNiICppbnAsICp0bXBpbnA7CkBAIC0yMjkxLDcgKzIzODAsNyBAQCBpbl9w Y2Jsb29rdXBfaGFzaF9sb2NrZWQoc3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywgc3RydWN0IGlu X2FkZHIgZmFkZHIsCiAJICovCiAJaWYgKChsb29rdXBmbGFncyAmIElOUExPT0tVUF9XSUxEQ0FS RCkgIT0gMCkgewogCQlpbnAgPSBpbl9wY2Jsb29rdXBfbGJncm91cChwY2JpbmZvLCAmbGFkZHIs IGxwb3J0LCAmZmFkZHIsCi0JCSAgICBmcG9ydCwgbG9va3VwZmxhZ3MpOworCQkgICAgZnBvcnQs IGxvb2t1cGZsYWdzLCBudW1hX2RvbWFpbik7CiAJCWlmIChpbnAgIT0gTlVMTCkKIAkJCXJldHVy biAoaW5wKTsKIAl9CkBAIC0yMzc4LDEzICsyNDY3LDE0IEBAIGluX3BjYmxvb2t1cF9oYXNoX2xv Y2tlZChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRkciBmYWRkciwKIHN0 YXRpYyBzdHJ1Y3QgaW5wY2IgKgogaW5fcGNibG9va3VwX2hhc2goc3RydWN0IGlucGNiaW5mbyAq cGNiaW5mbywgc3RydWN0IGluX2FkZHIgZmFkZHIsCiAgICAgdV9pbnQgZnBvcnQsIHN0cnVjdCBp bl9hZGRyIGxhZGRyLCB1X2ludCBscG9ydCwgaW50IGxvb2t1cGZsYWdzLAotICAgIHN0cnVjdCBp Zm5ldCAqaWZwKQorICAgIHN0cnVjdCBpZm5ldCAqaWZwLCBpbnQgbnVtYV9kb21haW4pCiB7CiAJ c3RydWN0IGlucGNiICppbnA7CiAKIAlJTlBfSEFTSF9STE9DSyhwY2JpbmZvKTsKIAlpbnAgPSBp bl9wY2Jsb29rdXBfaGFzaF9sb2NrZWQocGNiaW5mbywgZmFkZHIsIGZwb3J0LCBsYWRkciwgbHBv cnQsCi0JICAgIChsb29rdXBmbGFncyAmIH4oSU5QTE9PS1VQX1JMT0NLUENCIHwgSU5QTE9PS1VQ X1dMT0NLUENCKSksIGlmcCk7CisJICAgIChsb29rdXBmbGFncyAmIH4oSU5QTE9PS1VQX1JMT0NL UENCIHwgSU5QTE9PS1VQX1dMT0NLUENCKSksIGlmcCwKKwkgICAgbnVtYV9kb21haW4pOwogCWlm IChpbnAgIT0gTlVMTCkgewogCQlpZiAobG9va3VwZmxhZ3MgJiBJTlBMT09LVVBfV0xPQ0tQQ0Ip IHsKIAkJCUlOUF9XTE9DSyhpbnApOwpAQCAtMjQ1MSw3ICsyNTQxLDcgQEAgaW5fcGNibG9va3Vw KHN0cnVjdCBpbnBjYmluZm8gKnBjYmluZm8sIHN0cnVjdCBpbl9hZGRyIGZhZGRyLCB1X2ludCBm cG9ydCwKIAl9CiAjZW5kaWYKIAlyZXR1cm4gKGluX3BjYmxvb2t1cF9oYXNoKHBjYmluZm8sIGZh ZGRyLCBmcG9ydCwgbGFkZHIsIGxwb3J0LAotCSAgICBsb29rdXBmbGFncywgaWZwKSk7CisJICAg IGxvb2t1cGZsYWdzLCBpZnAsIE1fTk9ET00pKTsKIH0KIAogc3RydWN0IGlucGNiICoKQEAgLTI0 OTMsNyArMjU4Myw3IEBAIGluX3BjYmxvb2t1cF9tYnVmKHN0cnVjdCBpbnBjYmluZm8gKnBjYmlu Zm8sIHN0cnVjdCBpbl9hZGRyIGZhZGRyLAogCX0KICNlbmRpZgogCXJldHVybiAoaW5fcGNibG9v a3VwX2hhc2gocGNiaW5mbywgZmFkZHIsIGZwb3J0LCBsYWRkciwgbHBvcnQsCi0JICAgIGxvb2t1 cGZsYWdzLCBpZnApKTsKKwkgICAgbG9va3VwZmxhZ3MsIGlmcCwgbS0+bV9wa3RoZHIubnVtYV9k b21haW4pKTsKIH0KICNlbmRpZiAvKiBJTkVUICovCiAKZGlmZiAtLWdpdCBhL0ZyZWVCU0Qvc3lz L25ldGluZXQvaW5fcGNiLmggYi9GcmVlQlNEL3N5cy9uZXRpbmV0L2luX3BjYi5oCmluZGV4IDM2 MDFlYTA3YTA1OC4uMDUwNWM4YjNlMjU2IDEwMDY0NAotLS0gYS9GcmVlQlNEL3N5cy9uZXRpbmV0 L2luX3BjYi5oCisrKyBiL0ZyZWVCU0Qvc3lzL25ldGluZXQvaW5fcGNiLmgKQEAgLTU3Miw3ICs1 NzIsNyBAQCBzdHJ1Y3QgaW5wY2JsYmdyb3VwIHsKIAlzdHJ1Y3QgZXBvY2hfY29udGV4dCBpbF9l cG9jaF9jdHg7CiAJdWludDE2X3QJaWxfbHBvcnQ7CQkJLyogKGMpICovCiAJdV9jaGFyCQlpbF92 ZmxhZzsJCQkvKiAoYykgKi8KLQl1X2NoYXIJCWlsX3BhZDsKKwl1X2NoYXIJCWlsX251bWFfZG9t YWluOwogCXVpbnQzMl90CWlsX3BhZDI7CiAJdW5pb24gaW5fZGVwZW5kYWRkciBpbF9kZXBlbmRs YWRkcjsJCS8qIChjKSAqLwogI2RlZmluZQlpbF9sYWRkcglpbF9kZXBlbmRsYWRkci5pZDQ2X2Fk ZHIuaWE0Nl9hZGRyNApAQCAtODYwLDYgKzg2MCw3IEBAIGludAlpbl9wY2JpbnNoYXNoKHN0cnVj dCBpbnBjYiAqKTsKIGludAlpbl9wY2JpbnNoYXNoX25vcGNiZ3JvdXAoc3RydWN0IGlucGNiICop OwogaW50CWluX3BjYmxhZGRyKHN0cnVjdCBpbnBjYiAqLCBzdHJ1Y3QgaW5fYWRkciAqLCBzdHJ1 Y3QgaW5fYWRkciAqLAogCSAgICBzdHJ1Y3QgdWNyZWQgKik7CitpbnQJaW5fcGNibGJncm91cF9u dW1hKHN0cnVjdCBpbnBjYiAqKTsKIHN0cnVjdCBpbnBjYiAqCiAJaW5fcGNibG9va3VwX2xvY2Fs KHN0cnVjdCBpbnBjYmluZm8gKiwKIAkgICAgc3RydWN0IGluX2FkZHIsIHVfc2hvcnQsIGludCwg c3RydWN0IHVjcmVkICopOwpkaWZmIC0tZ2l0IGEvRnJlZUJTRC9zeXMvbmV0aW5ldC90Y3AuaCBi L0ZyZWVCU0Qvc3lzL25ldGluZXQvdGNwLmgKaW5kZXggZmUxMjNmZWYzZGVmLi5hMWYxNzIyM2Y1 YjIgMTAwNjQ0Ci0tLSBhL0ZyZWVCU0Qvc3lzL25ldGluZXQvdGNwLmgKKysrIGIvRnJlZUJTRC9z eXMvbmV0aW5ldC90Y3AuaApAQCAtMTk0LDYgKzE5NCw3IEBAIHN0cnVjdCB0Y3BoZHIgewogI2Rl ZmluZQlUQ1BfS0VFUENOVAkxMDI0CS8qIEwsTiBudW1iZXIgb2Yga2VlcGFsaXZlcyBiZWZvcmUg Y2xvc2UgKi8KICNkZWZpbmUJVENQX0ZBU1RPUEVOCTEwMjUJLyogZW5hYmxlIFRGTyAvIHdhcyBj cmVhdGVkIHZpYSBURk8gKi8KICNkZWZpbmUJVENQX1RMU19FTkFCTEUJMTAyNgkvKiBUTFMgQ3J5 cHQgZW5hYmxlICovCisjZGVmaW5lCVRDUF9SRVVTUE9SVF9MQl9OVU1BICAgMTAyNwkvKiBzZXQg bGlzdGVuIHNvY2tldCBudW1hIGRvbWFpbiAqLwogCiAjZGVmaW5lIFRDUF9SQUNLX1BST1AJICAg ICAgMTA1MSAvKiBSQUNLIHByb3BvcnRpb25hbCByYXRlIHJlZHVjdGlvbiAoYm9vbCkgKi8KICNk ZWZpbmUgVENQX1JBQ0tfVExQX1JFRFVDRSAgIDEwNTIgLyogUkFDSyBUTFAgY3duZCByZWR1Y3Rp b24gKGJvb2wpICovCkBAIC0yNjAsNiArMjYxLDcgQEAgc3RydWN0IHRjcGhkciB7CiAjZGVmaW5l IFRDUF9CQlJfTUlOX1RPUEFDRU9VVCAgMTEwOQkvKiBEbyB3ZSBzdXNwZW5kIHBhY2luZyB1bnRp bCAqLwogI2RlZmluZSBUQ1BfQkJSX1RTVE1QX1JBSVNFUyAgIDExMTAJLyogQ2FuIGEgdGltZXN0 YW1wIG1lYXN1cmVtZW50IHJhaXNlIHRoZSBiL3cgKi8KIAorCiAjZGVmaW5lCVRDUF9QQ0FQX09V VAkyMDQ4CS8qIG51bWJlciBvZiBvdXRwdXQgcGFja2V0cyB0byBrZWVwICovCiAjZGVmaW5lCVRD UF9QQ0FQX0lOCTQwOTYJLyogbnVtYmVyIG9mIGlucHV0IHBhY2tldHMgdG8ga2VlcCAqLwogI2Rl ZmluZSBUQ1BfRlVOQ1RJT05fQkxLIDgxOTIJLyogU2V0IHRoZSB0Y3AgZnVuY3Rpb24gcG9pbnRl cnMgdG8gdGhlIHNwZWNpZmllZCBzdGFjayAqLwpkaWZmIC0tZ2l0IGEvRnJlZUJTRC9zeXMvbmV0 aW5ldC90Y3BfdXNycmVxLmMgYi9GcmVlQlNEL3N5cy9uZXRpbmV0L3RjcF91c3JyZXEuYwppbmRl eCA3NTg1YjhlZDRiOTkuLmU2NzI1OGQ1ZTg5OSAxMDA2NDQKLS0tIGEvRnJlZUJTRC9zeXMvbmV0 aW5ldC90Y3BfdXNycmVxLmMKKysrIGIvRnJlZUJTRC9zeXMvbmV0aW5ldC90Y3BfdXNycmVxLmMK QEAgLTIwOTIsNiArMjA5MiwxNyBAQCB0Y3BfZGVmYXVsdF9jdGxvdXRwdXQoc3RydWN0IHNvY2tl dCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0LCBzdHJ1Y3QgaW5wY2IgKmlucAogCQkJSU5QX1dV TkxPQ0soaW5wKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVENQX1JFVVNQT1JUX0xCX05VTUE6CisJ CQlJTlBfV1VOTE9DSyhpbnApOworCQkJZXJyb3IgPSBzb29wdGNvcHlpbihzb3B0LCAmb3B0dmFs LCBzaXplb2Yob3B0dmFsKSwKKwkJCSAgICBzaXplb2Yob3B0dmFsKSk7CisJCQlJTlBfV0xPQ0tf UkVDSEVDSyhpbnApOworCQkJaWYgKCFlcnJvcikKKwkJCQllcnJvciA9IGluX3BjYmxiZ3JvdXBf bnVtYShpbnApOworCQkJdGNwX2xvZ19zb2NrZXRfb3B0aW9uKHRwLCBzb3B0LT5zb3B0X25hbWUs IDAsIGVycm9yKTsKKwkJCUlOUF9XVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwogCQljYXNlIFRD UF9NQVhVTkFDS1RJTUU6CiAJCWNhc2UgVENQX0tFRVBJRExFOgogCQljYXNlIFRDUF9LRUVQSU5U Vkw6CmRpZmYgLS1naXQgYS9GcmVlQlNEL3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMgYi9GcmVlQlNE L3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMKaW5kZXggOTEyMTUyMmYyMWMxLi5hNGI4MjU1M2YxYzUg MTAwNjQ0Ci0tLSBhL0ZyZWVCU0Qvc3lzL25ldGluZXQ2L2luNl9wY2IuYworKysgYi9GcmVlQlNE L3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMKQEAgLTExMyw3ICsxMTMsNyBAQCBfX0ZCU0RJRCgiJEZy ZWVCU0QkIik7CiAjaW5jbHVkZSA8bmV0aW5ldDYvc2NvcGU2X3Zhci5oPgogCiBzdGF0aWMgc3Ry dWN0IGlucGNiICppbjZfcGNibG9va3VwX2hhc2hfbG9ja2VkKHN0cnVjdCBpbnBjYmluZm8gKiwK LSAgICBzdHJ1Y3QgaW42X2FkZHIgKiwgdV9pbnQsIHN0cnVjdCBpbjZfYWRkciAqLCB1X2ludCwg aW50LCBzdHJ1Y3QgaWZuZXQgKik7CisgICAgc3RydWN0IGluNl9hZGRyICosIHVfaW50LCBzdHJ1 Y3QgaW42X2FkZHIgKiwgdV9pbnQsIGludCwgc3RydWN0IGlmbmV0ICosIGludCk7CiAKIGludAog aW42X3BjYmJpbmQoc3RydWN0IGlucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqbmFtLApAQCAt NDMzLDcgKzQzMyw3IEBAIGluNl9wY2Jjb25uZWN0X21idWYoc3RydWN0IGlucGNiICppbnAsIHN0 cnVjdCBzb2NrYWRkciAqbmFtLAogCQkJICAgICAgIHNpbjYtPnNpbjZfcG9ydCwKIAkJCSAgICAg IElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZpbnAtPmluNnBfbGFkZHIpCiAJCQkgICAgICA/ICZh ZGRyNiA6ICZpbnAtPmluNnBfbGFkZHIsCi0JCQkgICAgICBpbnAtPmlucF9scG9ydCwgMCwgTlVM TCkgIT0gTlVMTCkgeworCQkJICAgICAgaW5wLT5pbnBfbHBvcnQsIDAsIE5VTEwsIE1fTk9ET00p ICE9IE5VTEwpIHsKIAkJcmV0dXJuIChFQUREUklOVVNFKTsKIAl9CiAJaWYgKElONl9JU19BRERS X1VOU1BFQ0lGSUVEKCZpbnAtPmluNnBfbGFkZHIpKSB7CkBAIC04NzEsOSArODcxLDkgQEAgaW42 X3J0Y2hhbmdlKHN0cnVjdCBpbnBjYiAqaW5wLCBpbnQgZXJybm8gX191bnVzZWQpCiBzdGF0aWMg c3RydWN0IGlucGNiICoKIGluNl9wY2Jsb29rdXBfbGJncm91cChjb25zdCBzdHJ1Y3QgaW5wY2Jp bmZvICpwY2JpbmZvLAogICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsIHVpbnQxNl90 IGxwb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZhZGRyLAotICAgIHVpbnQxNl90IGZwb3J0 LCBpbnQgbG9va3VwZmxhZ3MpCisgICAgdWludDE2X3QgZnBvcnQsIGludCBsb29rdXBmbGFncywg aW50IG51bWFfZG9tYWluKQogewotCXN0cnVjdCBpbnBjYiAqbG9jYWxfd2lsZDsKKwlzdHJ1Y3Qg aW5wY2IgKmxvY2FsX3dpbGQsICpudW1hX3dpbGQ7CiAJY29uc3Qgc3RydWN0IGlucGNibGJncm91 cGhlYWQgKmhkcjsKIAlzdHJ1Y3QgaW5wY2JsYmdyb3VwICpncnA7CiAJdWludDMyX3QgaWR4OwpA QCAtODkzLDYgKzg5Myw3IEBAIGluNl9wY2Jsb29rdXBfbGJncm91cChjb25zdCBzdHJ1Y3QgaW5w Y2JpbmZvICpwY2JpbmZvLAogCSAqIC0gTG9hZCBiYWxhbmNlZCBkb2VzIG5vdCBjb250YWluIElQ djQgbWFwcGVkIElORVQ2IHdpbGQgc29ja2V0cy4KIAkgKi8KIAlsb2NhbF93aWxkID0gTlVMTDsK KwludW1hX3dpbGQgPSBOVUxMOwogCUNLX0xJU1RfRk9SRUFDSChncnAsIGhkciwgaWxfbGlzdCkg ewogI2lmZGVmIElORVQKIAkJaWYgKCEoZ3JwLT5pbF92ZmxhZyAmIElOUF9JUFY2KSkKQEAgLTkw MywxMiArOTA0LDI0IEBAIGluNl9wY2Jsb29rdXBfbGJncm91cChjb25zdCBzdHJ1Y3QgaW5wY2Jp bmZvICpwY2JpbmZvLAogCiAJCWlkeCA9IElOUF9QQ0JMQkdST1VQX1BLVEhBU0goSU5QNl9QQ0JI QVNIS0VZKGZhZGRyKSwgbHBvcnQsCiAJCSAgICBmcG9ydCkgJSBncnAtPmlsX2lucGNudDsKLQkJ aWYgKElONl9BUkVfQUREUl9FUVVBTCgmZ3JwLT5pbDZfbGFkZHIsIGxhZGRyKSkKLQkJCXJldHVy biAoZ3JwLT5pbF9pbnBbaWR4XSk7CisJCWlmIChJTjZfQVJFX0FERFJfRVFVQUwoJmdycC0+aWw2 X2xhZGRyLCBsYWRkcikpIHsKKwkJCWlmIChudW1hX2RvbWFpbiA9PSBNX05PRE9NIHx8CisJCQkg ICAgZ3JwLT5pbF9udW1hX2RvbWFpbiA9PSBudW1hX2RvbWFpbikgeworCQkJCXJldHVybiAoZ3Jw LT5pbF9pbnBbaWR4XSk7CisJCQl9CisJCQllbHNlCisJCQkJbnVtYV93aWxkID0gZ3JwLT5pbF9p bnBbaWR4XTsKKwkJfQogCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJmdycC0+aWw2X2xh ZGRyKSAmJgotCQkgICAgKGxvb2t1cGZsYWdzICYgSU5QTE9PS1VQX1dJTERDQVJEKSAhPSAwKQot CQkJbG9jYWxfd2lsZCA9IGdycC0+aWxfaW5wW2lkeF07CisJCSAgICAobG9va3VwZmxhZ3MgJiBJ TlBMT09LVVBfV0lMRENBUkQpICE9IDApIHsKKwkJCWlmIChsb2NhbF93aWxkID09IE5VTEwgfHwg bnVtYV9kb21haW4gPT0gTV9OT0RPTSkKKwkJCQlsb2NhbF93aWxkID0gZ3JwLT5pbF9pbnBbaWR4 XTsKKwkJCWlmIChncnAtPmlsX251bWFfZG9tYWluID09IG51bWFfZG9tYWluKQorCQkJCWxvY2Fs X3dpbGQgPSBncnAtPmlsX2lucFtpZHhdOworCQl9CiAJfQorCWlmIChudW1hX3dpbGQgIT0gTlVM TCkKKwkJcmV0dXJuIChudW1hX3dpbGQpOwogCXJldHVybiAobG9jYWxfd2lsZCk7CiB9CiAKQEAg LTExMTksNyArMTEzMiw3IEBAIGluNl9wY2Jsb29rdXBfZ3JvdXAoc3RydWN0IGlucGNiaW5mbyAq cGNiaW5mbywgc3RydWN0IGlucGNiZ3JvdXAgKnBjYmdyb3VwLAogc3RhdGljIHN0cnVjdCBpbnBj YiAqCiBpbjZfcGNibG9va3VwX2hhc2hfbG9ja2VkKHN0cnVjdCBpbnBjYmluZm8gKnBjYmluZm8s IHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsCiAgICAgdV9pbnQgZnBvcnRfYXJnLCBzdHJ1Y3QgaW42 X2FkZHIgKmxhZGRyLCB1X2ludCBscG9ydF9hcmcsCi0gICAgaW50IGxvb2t1cGZsYWdzLCBzdHJ1 Y3QgaWZuZXQgKmlmcCkKKyAgICBpbnQgbG9va3VwZmxhZ3MsIHN0cnVjdCBpZm5ldCAqaWZwLCBp bnQgbnVtYV9kb21haW4pCiB7CiAJc3RydWN0IGlucGNiaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgaW5w Y2IgKmlucCwgKnRtcGlucDsKQEAgLTExNjMsNyArMTE3Niw3IEBAIGluNl9wY2Jsb29rdXBfaGFz aF9sb2NrZWQoc3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywgc3RydWN0IGluNl9hZGRyICpmYWRk ciwKIAkgKi8KIAlpZiAoKGxvb2t1cGZsYWdzICYgSU5QTE9PS1VQX1dJTERDQVJEKSAhPSAwKSB7 CiAJCWlucCA9IGluNl9wY2Jsb29rdXBfbGJncm91cChwY2JpbmZvLCBsYWRkciwgbHBvcnQsIGZh ZGRyLAotCQkgICAgZnBvcnQsIGxvb2t1cGZsYWdzKTsKKwkJICAgIGZwb3J0LCBsb29rdXBmbGFn cywgbnVtYV9kb21haW4pOwogCQlpZiAoaW5wICE9IE5VTEwpCiAJCQlyZXR1cm4gKGlucCk7CiAJ fQpAQCAtMTI0MSwxMyArMTI1NCwxNCBAQCBpbjZfcGNibG9va3VwX2hhc2hfbG9ja2VkKHN0cnVj dCBpbnBjYmluZm8gKnBjYmluZm8sIHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsCiBzdGF0aWMgc3Ry dWN0IGlucGNiICoKIGluNl9wY2Jsb29rdXBfaGFzaChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZv LCBzdHJ1Y3QgaW42X2FkZHIgKmZhZGRyLAogICAgIHVfaW50IGZwb3J0LCBzdHJ1Y3QgaW42X2Fk ZHIgKmxhZGRyLCB1X2ludCBscG9ydCwgaW50IGxvb2t1cGZsYWdzLAotICAgIHN0cnVjdCBpZm5l dCAqaWZwKQorICAgIHN0cnVjdCBpZm5ldCAqaWZwLCBpbnQgbnVtYV9kb21haW4pCiB7CiAJc3Ry dWN0IGlucGNiICppbnA7CiAKIAlJTlBfSEFTSF9STE9DSyhwY2JpbmZvKTsKIAlpbnAgPSBpbjZf cGNibG9va3VwX2hhc2hfbG9ja2VkKHBjYmluZm8sIGZhZGRyLCBmcG9ydCwgbGFkZHIsIGxwb3J0 LAotCSAgICAobG9va3VwZmxhZ3MgJiB+KElOUExPT0tVUF9STE9DS1BDQiB8IElOUExPT0tVUF9X TE9DS1BDQikpLCBpZnApOworCSAgICAobG9va3VwZmxhZ3MgJiB+KElOUExPT0tVUF9STE9DS1BD QiB8IElOUExPT0tVUF9XTE9DS1BDQikpLCBpZnAsCisJICAgIG51bWFfZG9tYWluKTsKIAlpZiAo aW5wICE9IE5VTEwpIHsKIAkJaWYgKGxvb2t1cGZsYWdzICYgSU5QTE9PS1VQX1dMT0NLUENCKSB7 CiAJCQlJTlBfV0xPQ0soaW5wKTsKQEAgLTEzMTQsNyArMTMyOCw3IEBAIGluNl9wY2Jsb29rdXAo c3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywgc3RydWN0IGluNl9hZGRyICpmYWRkciwgdV9pbnQg ZnBvcnQsCiAJfQogI2VuZGlmCiAJcmV0dXJuIChpbjZfcGNibG9va3VwX2hhc2gocGNiaW5mbywg ZmFkZHIsIGZwb3J0LCBsYWRkciwgbHBvcnQsCi0JICAgIGxvb2t1cGZsYWdzLCBpZnApKTsKKwkg ICAgbG9va3VwZmxhZ3MsIGlmcCwgTV9OT0RPTSkpOwogfQogCiBzdHJ1Y3QgaW5wY2IgKgpAQCAt MTM1Niw3ICsxMzcwLDcgQEAgaW42X3BjYmxvb2t1cF9tYnVmKHN0cnVjdCBpbnBjYmluZm8gKnBj YmluZm8sIHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsCiAJfQogI2VuZGlmCiAJcmV0dXJuIChpbjZf cGNibG9va3VwX2hhc2gocGNiaW5mbywgZmFkZHIsIGZwb3J0LCBsYWRkciwgbHBvcnQsCi0JICAg IGxvb2t1cGZsYWdzLCBpZnApKTsKKwkgICAgbG9va3VwZmxhZ3MsIGlmcCwgbS0+bV9wa3RoZHIu bnVtYV9kb21haW4pKTsKIH0KIAogdm9pZAo= --00000000000026ab950587fd2a3a--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLQ3sJg0wiqn_zg9bVvxJA5JQFZZVKJpZYt_g1xBk5k%2B9xLMw>