Date: Sat, 20 Feb 2016 12:06:17 +0200 From: "Andriy Voskoboinyk" <s3erios@gmail.com> To: "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>, "Adrian Chadd" <adrian@freebsd.org> Subject: software scan fix - please test (Was: why we can't use the net80211 taskqueue for everything) Message-ID: <op.yc4mcrg5iew4ia@localhost> In-Reply-To: <CAJ-VmoneUBz4Vt3hFj8S4G_o8ptd3Z-NL5%2B6HuG33C3C_x-2jQ@mail.gmail.com> References: <CAJ-VmoneUBz4Vt3hFj8S4G_o8ptd3Z-NL5%2B6HuG33C3C_x-2jQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
------------1UGEIeCxgQrQAMT13Qg4VX Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit > hi, > > andriy has a few reviews out that tidy up some things, which I'd reply > to, but .. reviews is offline. So, here's the 30 second version: > > * the net80211 taskqueue runs the software scan engine, and the > software scan engine currently sleeps whilst it's running. > > This means that if you put newstate, deferred transmit, etc into the > net80211 taskqueue, then it just won't run during scan. > > The net80211 software scan thing should be modified to not sleep > whilst it's waiting for scan results and instead just kick off another > timer event to finish that part of the loop. Then yes, we can just > migrate * to the net80211 task queue and use it for all serialisation > of a wifi driver. > > (And yes, I'd like to see that done ASAP..) > > Thanks, > > > -adrian Hi, I have replaced sleeping on conditional variable inside scan task with scan_curchan task rescheduling (so this problem should be fixed now). For everyone, who wishes to test: apply the attached patch (merged from D5133, D5137, D5139, D5140, D5142, D5143, D5145, D5147, D5148 and D5152) and rebuild + install the kernel. Scan should work as before. Thanks! ------------1UGEIeCxgQrQAMT13Qg4VX Content-Disposition: attachment; filename=patch-net80211-scan-sw.diff Content-Type: application/octet-stream; name="patch-net80211-scan-sw.diff" Content-Transfer-Encoding: Base64 SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYwko cmV2aXNpb24gMjk1ODM0KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRw dXQuYwkod29ya2luZyBjb3B5KQpAQCAtODQ5LDYgKzg0OSwxNSBAQAogCXJldHVy biAocmV0KTsKIH0KIAorc3RhdGljIHZvaWQKK2llZWU4MDIxMV9udWxsZGF0YV90 cmFuc21pdHRlZChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCB2b2lkICphcmcs CisgICAgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAg PSBuaS0+bmlfdmFwOworCisJd2FrZXVwKHZhcCk7Cit9CisKIC8qCiAgKiBTZW5k IGEgbnVsbCBkYXRhIGZyYW1lIHRvIHRoZSBzcGVjaWZpZWQgbm9kZS4gIElmIHRo ZSBzdGF0aW9uCiAgKiBpcyBzZXR1cCBmb3IgUW9TIHRoZW4gYSBRb1MgTnVsbCBE YXRhIGZyYW1lIGlzIGNvbnN0cnVjdGVkLgpAQCAtOTM3LDYgKzk0NiwxMSBAQAog CQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQKQogCQkJ d2gtPmlfZmNbMV0gfD0gSUVFRTgwMjExX0ZDMV9QV1JfTUdUOwogCX0KKwlpZiAo KGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pICYmCisJICAgIChuaS0+ bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9QV1JfTUdUKSkgeworCQlpZWVlODAy MTFfYWRkX2NhbGxiYWNrKG0sIGllZWU4MDIxMV9udWxsZGF0YV90cmFuc21pdHRl ZCwKKwkJICAgIE5VTEwpOworCX0KIAltLT5tX2xlbiA9IG0tPm1fcGt0aGRyLmxl biA9IGhkcmxlbjsKIAltLT5tX2ZsYWdzIHw9IE1fRU5DQVA7CQkvKiBtYXJrIGVu Y2Fwc3VsYXRlZCAqLwogCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3Nj YW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgw MjExX3NjYW4uYwkocmV2aXNpb24gMjk1ODM0KQorKysgc3lzL25ldDgwMjExL2ll ZWU4MDIxMV9zY2FuLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ1Myw4ICs0NTMsOSBA QAogfQogCiAvKgotICogUHVibGljIGFjY2VzcyB0byBzY2FuX25leHQgZm9yIGRy aXZlcnMgdGhhdCBtYW5hZ2UKLSAqIHNjYW5uaW5nIHRoZW1zZWx2ZXMgKGUuZy4g Zm9yIGZpcm13YXJlLWJhc2VkIGRldmljZXMpLgorICogTWFudWFsbHkgc3dpdGNo IHRvIHRoZSBuZXh0IGNoYW5uZWwgaW4gdGhlIGNoYW5uZWwgbGlzdC4KKyAqIFBy b3ZpZGVkIGZvciBkcml2ZXJzIHRoYXQgbWFuYWdlIHNjYW5uaW5nIHRoZW1zZWx2 ZXMKKyAqIChlLmcuIGZvciBmaXJtd2FyZS1iYXNlZCBkZXZpY2VzKS4KICAqLwog dm9pZAogaWVlZTgwMjExX3NjYW5fbmV4dChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2 YXApCkBAIC00NjUsOCArNDY2LDkgQEAKIH0KIAogLyoKLSAqIFB1YmxpYyBhY2Nl c3MgdG8gc2Nhbl9uZXh0IGZvciBkcml2ZXJzIHRoYXQgYXJlIG5vdCBhYmxlIHRv IHNjYW4gc2luZ2xlCi0gKiBjaGFubmVscyAoZS5nLiBmb3IgZmlybXdhcmUtYmFz ZWQgZGV2aWNlcykuCisgKiBNYW51YWxseSBzdG9wIGEgc2NhbiB0aGF0IGlzIGN1 cnJlbnRseSBydW5uaW5nLgorICogUHJvdmlkZWQgZm9yIGRyaXZlcnMgdGhhdCBh cmUgbm90IGFibGUgdG8gc2NhbiBzaW5nbGUgY2hhbm5lbHMKKyAqIChlLmcuIGZv ciBmaXJtd2FyZS1iYXNlZCBkZXZpY2VzKS4KICAqLwogdm9pZAogaWVlZTgwMjEx X3NjYW5fZG9uZShzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCkBAIC00ODYsNyAr NDg4LDcgQEAKIH0KIAogLyoKLSAqIFByb2JlIHRoZSBjdXJlbnQgY2hhbm5lbCwg aWYgYWxsb3dlZCwgd2hpbGUgc2Nhbm5pbmcuCisgKiBQcm9iZSB0aGUgY3VycmVu dCBjaGFubmVsLCBpZiBhbGxvd2VkLCB3aGlsZSBzY2FubmluZy4KICAqIElmIHRo ZSBjaGFubmVsIGlzIG5vdCBtYXJrZWQgcGFzc2l2ZS1vbmx5IHRoZW4gc2VuZAog ICogYSBwcm9iZSByZXF1ZXN0IGltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlIG1hcmsg c3RhdGUgYW5kCiAgKiBsaXN0ZW4gZm9yIGJlYWNvbnMgb24gdGhlIGNoYW5uZWw7 IGlmIHdlIHJlY2VpdmUgc29tZXRoaW5nCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVl ZTgwMjExX3NjYW5fc3cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0 ODAyMTEvaWVlZTgwMjExX3NjYW5fc3cuYwkocmV2aXNpb24gMjk1ODM0KQorKysg c3lzL25ldDgwMjExL2llZWU4MDIxMV9zY2FuX3N3LmMJKHdvcmtpbmcgY29weSkK QEAgLTU0LDE3ICs1NCwxOCBAQAogc3RydWN0IHNjYW5fc3RhdGUgewogCXN0cnVj dCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSBiYXNlOwkvKiBwdWJsaWMgc3RhdGUgKi8K IAotCXVfaW50CQlzc19pZmxhZ3M7CQkvKiBmbGFncyB1c2VkIGludGVybmFsbHkg Ki8KLSNkZWZpbmUJSVNDQU5fTUlORFdFTEwgCTB4MDAwMQkJLyogbWluIGR3ZWxs IHRpbWUgcmVhY2hlZCAqLwotI2RlZmluZQlJU0NBTl9ESVNDQVJECTB4MDAwMgkJ LyogZGlzY2FyZCByeCdkIGZyYW1lcyAqLwotI2RlZmluZQlJU0NBTl9DQU5DRUwJ MHgwMDA0CQkvKiBjYW5jZWwgY3VycmVudCBzY2FuICovCi0jZGVmaW5lCUlTQ0FO X0FCT1JUCTB4MDAwOAkJLyogZW5kIHRoZSBzY2FuIGltbWVkaWF0ZWx5ICovCi0J dW5zaWduZWQgbG9uZwlzc19jaGFubWluZHdlbGw7CS8qIG1pbiBkd2VsbCBvbiBj dXJjaGFuICovCi0JdW5zaWduZWQgbG9uZwlzc19zY2FuZW5kOwkJLyogdGltZSBz Y2FuIG11c3Qgc3RvcCAqLwotCXVfaW50CQlzc19kdXJhdGlvbjsJCS8qIGR1cmF0 aW9uIGZvciBuZXh0IHNjYW4gKi8KLQlzdHJ1Y3QgdGFzawlzc19zY2FuX3Rhc2s7 CQkvKiBzY2FuIGV4ZWN1dGlvbiAqLwotCXN0cnVjdCBjdglzc19zY2FuX2N2OwkJ Lyogc2NhbiBzaWduYWwgKi8KLQlzdHJ1Y3QgY2FsbG91dAlzc19zY2FuX3RpbWVy OwkJLyogc2NhbiB0aW1lciAqLworCXVfaW50CQkJc3NfaWZsYWdzOwkvKiBmbGFn cyB1c2VkIGludGVybmFsbHkgKi8KKyNkZWZpbmUJSVNDQU5fTUlORFdFTEwgCQkw eDAwMDEJCS8qIG1pbiBkd2VsbCB0aW1lIHJlYWNoZWQgKi8KKyNkZWZpbmUJSVND QU5fRElTQ0FSRAkJMHgwMDAyCQkvKiBkaXNjYXJkIHJ4J2QgZnJhbWVzICovCisj ZGVmaW5lCUlTQ0FOX0NBTkNFTAkJMHgwMDA0CQkvKiBjYW5jZWwgY3VycmVudCBz Y2FuICovCisjZGVmaW5lCUlTQ0FOX0FCT1JUCQkweDAwMDgJCS8qIGVuZCB0aGUg c2NhbiBpbW1lZGlhdGVseSAqLworI2RlZmluZQlJU0NBTl9SVU5OSU5HCQkweDAw MTAJCS8qIHNjYW4gd2FzIHN0YXJ0ZWQgKi8KKworCXVuc2lnbmVkIGxvbmcJCXNz X2NoYW5taW5kd2VsbDsgIC8qIG1pbiBkd2VsbCBvbiBjdXJjaGFuICovCisJdW5z aWduZWQgbG9uZwkJc3Nfc2NhbmVuZDsJLyogdGltZSBzY2FuIG11c3Qgc3RvcCAq LworCXVfaW50CQkJc3NfZHVyYXRpb247CS8qIGR1cmF0aW9uIGZvciBuZXh0IHNj YW4gKi8KKwlzdHJ1Y3QgdGFzawkJc3Nfc2Nhbl9zdGFydDsJLyogc2NhbiBzdGFy dCAqLworCXN0cnVjdCB0aW1lb3V0X3Rhc2sJc3Nfc2Nhbl9jdXJjaGFuOyAgLyog c2NhbiBleGVjdXRpb24gKi8KIH07CiAjZGVmaW5lCVNDQU5fUFJJVkFURShzcykJ KChzdHJ1Y3Qgc2Nhbl9zdGF0ZSAqKSBzcykKIApAQCAtOTgsOCArOTksMTIgQEAK IAogc3RhdGljCXZvaWQgc2Nhbl9jdXJjaGFuKHN0cnVjdCBpZWVlODAyMTFfc2Nh bl9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYwl2b2lkIHNjYW5fbWlu ZHdlbGwoc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICopOwotc3RhdGljCXZv aWQgc2Nhbl9zaWduYWwodm9pZCAqKTsKLXN0YXRpYwl2b2lkIHNjYW5fdGFzayh2 b2lkICosIGludCk7CitzdGF0aWMJdm9pZCBzY2FuX3NpZ25hbChzdHJ1Y3QgaWVl ZTgwMjExX3NjYW5fc3RhdGUgKiwgaW50KTsKK3N0YXRpYwl2b2lkIHNjYW5fc2ln bmFsX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKiwgaW50KTsK K3N0YXRpYwl2b2lkIHNjYW5fc3RhcnQodm9pZCAqLCBpbnQpOworc3RhdGljCXZv aWQgc2Nhbl9jdXJjaGFuX3Rhc2sodm9pZCAqLCBpbnQpOworc3RhdGljCXZvaWQg c2Nhbl9lbmQoc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICosIGludCk7Citz dGF0aWMJdm9pZCBzY2FuX2RvbmUoc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRl ICosIGludCk7CiAKIE1BTExPQ19ERUZJTkUoTV84MDIxMV9TQ0FOLCAiODAyMTFz Y2FuIiwgIjgwMi4xMSBzY2FuIHN0YXRlIik7CiAKQEAgLTEwOSwxMiArMTE0LDEw IEBACiAJc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGljLT5pY19z Y2FuOwogCiAJaWYgKHNzICE9IE5VTEwpIHsKLQkJSUVFRTgwMjExX0xPQ0soaWMp OwotCQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgfD0gSVNDQU5fQUJPUlQ7 Ci0JCXNjYW5fc2lnbmFsKHNzKTsKLQkJSUVFRTgwMjExX1VOTE9DSyhpYyk7Ci0J CWllZWU4MDIxMV9kcmFpbnRhc2soaWMsICZTQ0FOX1BSSVZBVEUoc3MpLT5zc19z Y2FuX3Rhc2spOwotCQljYWxsb3V0X2RyYWluKCZTQ0FOX1BSSVZBVEUoc3MpLT5z c19zY2FuX3RpbWVyKTsKKwkJc2Nhbl9zaWduYWwoc3MsIElTQ0FOX0FCT1JUKTsK KwkJaWVlZTgwMjExX2RyYWludGFzayhpYywgJlNDQU5fUFJJVkFURShzcyktPnNz X3NjYW5fc3RhcnQpOworCQl0YXNrcXVldWVfZHJhaW5fdGltZW91dChpYy0+aWNf dHEsCisJCSAgICAmU0NBTl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl9jdXJjaGFuKTsK IAkJS0FTU0VSVCgoaWMtPmljX2ZsYWdzICYgSUVFRTgwMjExX0ZfU0NBTikgPT0g MCwKIAkJICAgICgic2NhbiBzdGlsbCBydW5uaW5nIikpOwogCkBAIC0xNDgsMTYg KzE1MSwxMyBAQAogaWVlZTgwMjExX3N3c2Nhbl92ZGV0YWNoKHN0cnVjdCBpZWVl ODAyMTF2YXAgKnZhcCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZh cC0+aXZfaWM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzczsKKwlz dHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzID0gaWMtPmljX3NjYW47CiAK IAlJRUVFODAyMTFfTE9DS19BU1NFUlQoaWMpOwotCXNzID0gaWMtPmljX3NjYW47 Ci0JaWYgKHNzICE9IE5VTEwgJiYgc3MtPnNzX3ZhcCA9PSB2YXApIHsKLQkJaWYg KGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pIHsKLQkJCVNDQU5fUFJJ VkFURShzcyktPnNzX2lmbGFncyB8PSBJU0NBTl9BQk9SVDsKLQkJCXNjYW5fc2ln bmFsKHNzKTsKLQkJfQotCX0KKworCWlmIChzcyAhPSBOVUxMICYmIHNzLT5zc192 YXAgPT0gdmFwICYmCisJICAgIChpYy0+aWNfZmxhZ3MgJiBJRUVFODAyMTFfRl9T Q0FOKSkKKwkJc2Nhbl9zaWduYWxfbG9ja2VkKHNzLCBJU0NBTl9BQk9SVCk7CiB9 CiAKIHN0YXRpYyB2b2lkCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJCWljLT5pY19m bGFncyB8PSBJRUVFODAyMTFfRl9TQ0FOOwogCiAJCQkvKiBTdGFydCBzY2FuIHRh c2sgKi8KLQkJCWllZWU4MDIxMV9ydW50YXNrKGljLCAmU0NBTl9QUklWQVRFKHNz KS0+c3Nfc2Nhbl90YXNrKTsKKwkJCWllZWU4MDIxMV9ydW50YXNrKGljLCAmU0NB Tl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl9zdGFydCk7CiAJCX0KIAkJcmV0dXJuIDE7 CiAJfSBlbHNlIHsKQEAgLTQxMSw3ICs0MTEsOCBAQAogCQkJc3MtPnNzX21heGR3 ZWxsID0gZHVyYXRpb247CiAJCQlpYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0Zf U0NBTjsKIAkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfQkdT Q0FOOwotCQkJaWVlZTgwMjExX3J1bnRhc2soaWMsICZTQ0FOX1BSSVZBVEUoc3Mp LT5zc19zY2FuX3Rhc2spOworCQkJaWVlZTgwMjExX3J1bnRhc2soaWMsCisJCQkg ICAgJlNDQU5fUFJJVkFURShzcyktPnNzX3NjYW5fc3RhcnQpOwogCQl9IGVsc2Ug ewogCQkJLyogWFhYIG1zZytzdGF0ICovCiAJCX0KQEAgLTQyNiwxMSArNDI3LDgg QEAKIAlyZXR1cm4gKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pOwog fQogCi0vKgotICogQ2FuY2VsIGFueSBzY2FuIGN1cnJlbnRseSBnb2luZyBvbiBm b3IgdGhlIHNwZWNpZmllZCB2YXAuCi0gKi8KIHN0YXRpYyB2b2lkCi1pZWVlODAy MTFfc3dzY2FuX2NhbmNlbF9zY2FuKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkK K2NhbmNlbF9zY2FuKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgaW50IGFueSwg Y29uc3QgY2hhciAqZnVuYykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9 IHZhcC0+aXZfaWM7CiAJc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9 IGljLT5pY19zY2FuOwpAQCAtNDM3LDIyICs0MzUsMjEgQEAKIAogCUlFRUU4MDIx MV9MT0NLKGljKTsKIAlpZiAoKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1ND QU4pICYmCi0JICAgIHNzLT5zc192YXAgPT0gdmFwICYmCisJICAgIChhbnkgfHwg c3MtPnNzX3ZhcCA9PSB2YXApICYmCiAJICAgIChTQ0FOX1BSSVZBVEUoc3MpLT5z c19pZmxhZ3MgJiBJU0NBTl9DQU5DRUwpID09IDApIHsKIAkJSUVFRTgwMjExX0RQ UklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sCi0JCSAgICAiJXM6IGNhbmNl bCAlcyBzY2FuXG4iLCBfX2Z1bmNfXywKKwkJICAgICIlczogY2FuY2VsICVzIHNj YW5cbiIsIGZ1bmMsCiAJCSAgICBzcy0+c3NfZmxhZ3MgJiBJRUVFODAyMTFfU0NB Tl9BQ1RJVkUgPwogCQkJImFjdGl2ZSIgOiAicGFzc2l2ZSIpOwogCi0JCS8qIGNs ZWFyIGJnIHNjYW4gTk9QSUNLIGFuZCBtYXJrIGNhbmNlbCByZXF1ZXN0ICovCisJ CS8qIGNsZWFyIGJnIHNjYW4gTk9QSUNLICovCiAJCXNzLT5zc19mbGFncyAmPSB+ SUVFRTgwMjExX1NDQU5fTk9QSUNLOwotCQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19p ZmxhZ3MgfD0gSVNDQU5fQ0FOQ0VMOwotCQkvKiB3YWtlIHVwIHRoZSBzY2FuIHRh c2sgKi8KLQkJc2Nhbl9zaWduYWwoc3MpOworCQkvKiBtYXJrIGNhbmNlbCByZXF1 ZXN0IGFuZCB3YWtlIHVwIHRoZSBzY2FuIHRhc2sgKi8KKwkJc2Nhbl9zaWduYWxf bG9ja2VkKHNzLCBJU0NBTl9DQU5DRUwpOwogCX0gZWxzZSB7CiAJCUlFRUU4MDIx MV9EUFJJTlRGKHZhcCwgSUVFRTgwMjExX01TR19TQ0FOLAogCQkgICAgIiVzOiBj YWxsZWQ7IEZfU0NBTj0lZCwgdmFwPSVzLCBDQU5DRUw9JWRcbiIsCi0JCSAgICAg ICAgX19mdW5jX18sCisJCQlmdW5jLAogCQkJISEgKGljLT5pY19mbGFncyAmIElF RUU4MDIxMV9GX1NDQU4pLAogCQkJKHNzLT5zc192YXAgPT0gdmFwID8gIm1hdGNo IiA6ICJub21hdGNoIiksCiAJCQkhISAoU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZs YWdzICYgSVNDQU5fQ0FOQ0VMKSk7CkBAIC00NjEsNzQgKzQ1OCw1NyBAQAogfQog CiAvKgorICogQ2FuY2VsIGFueSBzY2FuIGN1cnJlbnRseSBnb2luZyBvbiBmb3Ig dGhlIHNwZWNpZmllZCB2YXAuCisgKi8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFf c3dzY2FuX2NhbmNlbF9zY2FuKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKK3sK KwljYW5jZWxfc2Nhbih2YXAsIDAsIF9fZnVuY19fKTsKK30KKworLyoKICAqIENh bmNlbCBhbnkgc2NhbiBjdXJyZW50bHkgZ29pbmcgb24uCiAgKi8KIHN0YXRpYyB2 b2lkCiBpZWVlODAyMTFfc3dzY2FuX2NhbmNlbF9hbnlzY2FuKHN0cnVjdCBpZWVl ODAyMTF2YXAgKnZhcCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZh cC0+aXZfaWM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGlj LT5pY19zY2FuOwotCi0JSUVFRTgwMjExX0xPQ0soaWMpOwotCWlmICgoaWMtPmlj X2ZsYWdzICYgSUVFRTgwMjExX0ZfU0NBTikgJiYKLQkgICAgKFNDQU5fUFJJVkFU RShzcyktPnNzX2lmbGFncyAmIElTQ0FOX0NBTkNFTCkgPT0gMCkgewotCQlJRUVF ODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKLQkJICAgICIl czogY2FuY2VsICVzIHNjYW5cbiIsIF9fZnVuY19fLAotCQkgICAgc3MtPnNzX2Zs YWdzICYgSUVFRTgwMjExX1NDQU5fQUNUSVZFID8KLQkJCSJhY3RpdmUiIDogInBh c3NpdmUiKTsKLQotCQkvKiBjbGVhciBiZyBzY2FuIE5PUElDSyBhbmQgbWFyayBj YW5jZWwgcmVxdWVzdCAqLwotCQlzcy0+c3NfZmxhZ3MgJj0gfklFRUU4MDIxMV9T Q0FOX05PUElDSzsKLQkJU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzIHw9IElT Q0FOX0NBTkNFTDsKLQkJLyogd2FrZSB1cCB0aGUgc2NhbiB0YXNrICovCi0JCXNj YW5fc2lnbmFsKHNzKTsKLQl9IGVsc2UgewotCQlJRUVFODAyMTFfRFBSSU5URih2 YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKLQkJICAgICIlczogY2FsbGVkOyBGX1ND QU49JWQsIHZhcD0lcywgQ0FOQ0VMPSVkXG4iLAotCQkgICAgICAgIF9fZnVuY19f LAotCQkJISEgKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pLAotCQkJ KHNzLT5zc192YXAgPT0gdmFwID8gIm1hdGNoIiA6ICJub21hdGNoIiksCi0JCQkh ISAoU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VMKSk7 Ci0JfQotCUlFRUU4MDIxMV9VTkxPQ0soaWMpOworCWNhbmNlbF9zY2FuKHZhcCwg MSwgX19mdW5jX18pOwogfQogCiAvKgotICogUHVibGljIGFjY2VzcyB0byBzY2Fu X25leHQgZm9yIGRyaXZlcnMgdGhhdCBtYW5hZ2UKLSAqIHNjYW5uaW5nIHRoZW1z ZWx2ZXMgKGUuZy4gZm9yIGZpcm13YXJlLWJhc2VkIGRldmljZXMpLgorICogTWFu dWFsbHkgc3dpdGNoIHRvIHRoZSBuZXh0IGNoYW5uZWwgaW4gdGhlIGNoYW5uZWwg bGlzdC4KKyAqIFByb3ZpZGVkIGZvciBkcml2ZXJzIHRoYXQgbWFuYWdlIHNjYW5u aW5nIHRoZW1zZWx2ZXMKKyAqIChlLmcuIGZvciBmaXJtd2FyZS1iYXNlZCBkZXZp Y2VzKS4KICAqLwogc3RhdGljIHZvaWQKIGllZWU4MDIxMV9zd3NjYW5fc2Nhbl9u ZXh0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKIHsKLQlzdHJ1Y3QgaWVlZTgw MjExY29tICppYyA9IHZhcC0+aXZfaWM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2Fu X3N0YXRlICpzcyA9IGljLT5pY19zY2FuOworCXN0cnVjdCBpZWVlODAyMTFfc2Nh bl9zdGF0ZSAqc3MgPSB2YXAtPml2X2ljLT5pY19zY2FuOwogCiAJSUVFRTgwMjEx X0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sICIlczogY2FsbGVkXG4i LCBfX2Z1bmNfXyk7CiAKIAkvKiB3YWtlIHVwIHRoZSBzY2FuIHRhc2sgKi8KLQlJ RUVFODAyMTFfTE9DSyhpYyk7Ci0Jc2Nhbl9zaWduYWwoc3MpOwotCUlFRUU4MDIx MV9VTkxPQ0soaWMpOworCXNjYW5fc2lnbmFsKHNzLCAwKTsKIH0KIAogLyoKLSAq IFB1YmxpYyBhY2Nlc3MgdG8gc2Nhbl9uZXh0IGZvciBkcml2ZXJzIHRoYXQgYXJl IG5vdCBhYmxlIHRvIHNjYW4gc2luZ2xlCi0gKiBjaGFubmVscyAoZS5nLiBmb3Ig ZmlybXdhcmUtYmFzZWQgZGV2aWNlcykuCisgKiBNYW51YWxseSBzdG9wIGEgc2Nh biB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nLgorICogUHJvdmlkZWQgZm9yIGRy aXZlcnMgdGhhdCBhcmUgbm90IGFibGUgdG8gc2NhbiBzaW5nbGUgY2hhbm5lbHMK KyAqIChlLmcuIGZvciBmaXJtd2FyZS1iYXNlZCBkZXZpY2VzKS4KICAqLwogc3Rh dGljIHZvaWQKIGllZWU4MDIxMV9zd3NjYW5fc2Nhbl9kb25lKHN0cnVjdCBpZWVl ODAyMTF2YXAgKnZhcCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZh cC0+aXZfaWM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzczsKKwlz dHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzID0gaWMtPmljX3NjYW47CiAK IAlJRUVFODAyMTFfTE9DS19BU1NFUlQoaWMpOwogCi0Jc3MgPSBpYy0+aWNfc2Nh bjsKLQlzY2FuX3NpZ25hbChzcyk7CisJc2Nhbl9zaWduYWxfbG9ja2VkKHNzLCAw KTsKIH0KIAogLyoKLSAqIFByb2JlIHRoZSBjdXJlbnQgY2hhbm5lbCwgaWYgYWxs b3dlZCwgd2hpbGUgc2Nhbm5pbmcuCisgKiBQcm9iZSB0aGUgY3VycmVudCBjaGFu bmVsLCBpZiBhbGxvd2VkLCB3aGlsZSBzY2FubmluZy4KICAqIElmIHRoZSBjaGFu bmVsIGlzIG5vdCBtYXJrZWQgcGFzc2l2ZS1vbmx5IHRoZW4gc2VuZAogICogYSBw cm9iZSByZXF1ZXN0IGltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlIG1hcmsgc3RhdGUg YW5kCiAgKiBsaXN0ZW4gZm9yIGJlYWNvbnMgb24gdGhlIGNoYW5uZWw7IGlmIHdl IHJlY2VpdmUgc29tZXRoaW5nCkBAIC01NjgsMjggKzU0OCw0OCBAQAogc2Nhbl9j dXJjaGFuKHN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqc3MsIHVuc2lnbmVk IGxvbmcgbWF4ZHdlbGwpCiB7CiAJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwICA9 IHNzLT5zc192YXA7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBzcy0+c3Nf aWM7CiAKIAlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NB TiwKIAkgICAgIiVzOiBjYWxsaW5nOyBtYXhkd2VsbD0lbHVcbiIsCiAJICAgIF9f ZnVuY19fLAogCSAgICBtYXhkd2VsbCk7Ci0JSUVFRTgwMjExX0xPQ0sodmFwLT5p dl9pYyk7CisJSUVFRTgwMjExX0xPQ0soaWMpOwogCWlmIChzcy0+c3NfZmxhZ3Mg JiBJRUVFODAyMTFfU0NBTl9BQ1RJVkUpCiAJCWllZWU4MDIxMV9wcm9iZV9jdXJj aGFuKHZhcCwgMCk7Ci0JY2FsbG91dF9yZXNldCgmU0NBTl9QUklWQVRFKHNzKS0+ c3Nfc2Nhbl90aW1lciwKLQkgICAgbWF4ZHdlbGwsIHNjYW5fc2lnbmFsLCBzcyk7 Ci0JSUVFRTgwMjExX1VOTE9DSyh2YXAtPml2X2ljKTsKKwl0YXNrcXVldWVfZW5x dWV1ZV90aW1lb3V0KGljLT5pY190cSwKKwkgICAgJlNDQU5fUFJJVkFURShzcykt PnNzX3NjYW5fY3VyY2hhbiwgbWF4ZHdlbGwpOworCUlFRUU4MDIxMV9VTkxPQ0so aWMpOwogfQogCiBzdGF0aWMgdm9pZAotc2Nhbl9zaWduYWwodm9pZCAqYXJnKQor c2Nhbl9zaWduYWwoc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcywgaW50 IGlmbGFncykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzID0g KHN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqKSBhcmc7CisJc3RydWN0IGll ZWU4MDIxMWNvbSAqaWMgPSBzcy0+c3NfaWM7CiAKLQlJRUVFODAyMTFfTE9DS19B U1NFUlQoc3MtPnNzX2ljKTsKLQljdl9zaWduYWwoJlNDQU5fUFJJVkFURShzcykt PnNzX3NjYW5fY3YpOworCUlFRUU4MDIxMV9VTkxPQ0tfQVNTRVJUKGljKTsKKwor CUlFRUU4MDIxMV9MT0NLKGljKTsKKwlzY2FuX3NpZ25hbF9sb2NrZWQoc3MsIGlm bGFncyk7CisJSUVFRTgwMjExX1VOTE9DSyhpYyk7CiB9CiAKK3N0YXRpYyB2b2lk CitzY2FuX3NpZ25hbF9sb2NrZWQoc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRl ICpzcywgaW50IGlmbGFncykKK3sKKwlzdHJ1Y3Qgc2Nhbl9zdGF0ZSAqc3NfcHJp diA9IFNDQU5fUFJJVkFURShzcyk7CisJc3RydWN0IHRpbWVvdXRfdGFzayAqc2Nh bl90YXNrID0gJnNzX3ByaXYtPnNzX3NjYW5fY3VyY2hhbjsKKwlzdHJ1Y3QgaWVl ZTgwMjExY29tICppYyA9IHNzLT5zc19pYzsKKworCUlFRUU4MDIxMV9MT0NLX0FT U0VSVChpYyk7CisKKwlzc19wcml2LT5zc19pZmxhZ3MgfD0gaWZsYWdzOworCWlm IChzc19wcml2LT5zc19pZmxhZ3MgJiBJU0NBTl9SVU5OSU5HKSB7CisJCWlmICh0 YXNrcXVldWVfY2FuY2VsX3RpbWVvdXQoaWMtPmljX3RxLCBzY2FuX3Rhc2ssIE5V TEwpID09IDApCisJCQl0YXNrcXVldWVfZW5xdWV1ZV90aW1lb3V0KGljLT5pY190 cSwgc2Nhbl90YXNrLCAwKTsKKwl9Cit9CisKIC8qCiAgKiBIYW5kbGUgbWluZHdl bGwgcmVxdWlyZW1lbnRzIGNvbXBsZXRlZDsgaW5pdGlhdGUgYSBjaGFubmVsCiAg KiBjaGFuZ2UgdG8gdGhlIG5leHQgY2hhbm5lbCBhc2FwLgpAQCAtNTk3LDM4ICs1 OTcsMzUgQEAKIHN0YXRpYyB2b2lkCiBzY2FuX21pbmR3ZWxsKHN0cnVjdCBpZWVl ODAyMTFfc2Nhbl9zdGF0ZSAqc3MpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMWNvbSAq aWMgPSBzcy0+c3NfaWM7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gc3Mt PnNzX3ZhcDsKIAotCUlFRUU4MDIxMV9EUFJJTlRGKHNzLT5zc192YXAsIElFRUU4 MDIxMV9NU0dfU0NBTiwgIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKwlJRUVF ODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwgIiVzOiBjYWxs ZWRcbiIsIF9fZnVuY19fKTsKIAotCUlFRUU4MDIxMV9MT0NLKGljKTsKLQlzY2Fu X3NpZ25hbChzcyk7Ci0JSUVFRTgwMjExX1VOTE9DSyhpYyk7CisJc2Nhbl9zaWdu YWwoc3MsIDApOwogfQogCiBzdGF0aWMgdm9pZAotc2Nhbl90YXNrKHZvaWQgKmFy ZywgaW50IHBlbmRpbmcpCitzY2FuX3N0YXJ0KHZvaWQgKmFyZywgaW50IHBlbmRp bmcpCiB7CiAjZGVmaW5lCUlTQ0FOX1JFUAkoSVNDQU5fTUlORFdFTEwgfCBJU0NB Tl9ESVNDQVJEKQogCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqc3MgPSAo c3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICopIGFyZzsKKwlzdHJ1Y3Qgc2Nh bl9zdGF0ZSAqc3NfcHJpdiA9IFNDQU5fUFJJVkFURShzcyk7CiAJc3RydWN0IGll ZWU4MDIxMXZhcCAqdmFwID0gc3MtPnNzX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjEx Y29tICppYyA9IHNzLT5zc19pYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwg KmNoYW47Ci0JdW5zaWduZWQgbG9uZyBtYXhkd2VsbCwgc2NhbmVuZDsKLQlpbnQg c2NhbmRvbmUgPSAwOwogCiAJSUVFRTgwMjExX0xPQ0soaWMpOwogCWlmICh2YXAg PT0gTlVMTCB8fCAoaWMtPmljX2ZsYWdzICYgSUVFRTgwMjExX0ZfU0NBTikgPT0g MCB8fAotCSAgICAoU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzICYgSVNDQU5f QUJPUlQpKSB7CisJICAgIChzc19wcml2LT5zc19pZmxhZ3MgJiBJU0NBTl9BQk9S VCkpIHsKIAkJLyogQ2FuY2VsbGVkIGJlZm9yZSB3ZSBzdGFydGVkICovCi0JCWdv dG8gZG9uZTsKKwkJc2Nhbl9kb25lKHNzLCAwKTsKKwkJcmV0dXJuOwogCX0KIAog CWlmIChzcy0+c3NfbmV4dCA9PSBzcy0+c3NfbGFzdCkgewogCQlJRUVFODAyMTFf RFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKIAkJCSIlczogbm8gY2hh bm5lbHMgdG8gc2NhblxuIiwgX19mdW5jX18pOwotCQlzY2FuZG9uZSA9IDE7Ci0J CWdvdG8gZG9uZTsKKwkJc2Nhbl9kb25lKHNzLCAxKTsKKwkJcmV0dXJuOwogCX0K IAogCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9TVEEgJiYKQEAg LTYzNiwxMTAgKzYzMywxMzQgQEAKIAkJaWYgKCh2YXAtPml2X2Jzcy0+bmlfZmxh Z3MgJiBJRUVFODAyMTFfTk9ERV9QV1JfTUdUKSA9PSAwKSB7CiAJCQkvKiBFbmFi bGUgc3RhdGlvbiBwb3dlciBzYXZlIG1vZGUgKi8KIAkJCXZhcC0+aXZfc3RhX3Bz KHZhcCwgMSk7Ci0JCQkvKgotCQkJICogVXNlIGFuIDFtcyBkZWxheSBzbyB0aGUg bnVsbCBkYXRhIGZyYW1lIGhhcyBhIGNoYW5jZQotCQkJICogdG8gZ28gb3V0Lgot CQkJICogWFhYIFNob3VsZCB1c2UgTV9UWENCIG1lY2hhbmlzbSB0byBlbGltaW5h dGUgdGhpcy4KLQkJCSAqLwotCQkJY3ZfdGltZWR3YWl0KCZTQ0FOX1BSSVZBVEUo c3MpLT5zc19zY2FuX2N2LAotCQkJICAgIElFRUU4MDIxMV9MT0NLX09CSihpYyks IG1zZWNzX3RvX3RpY2tzKDEpKTsKLQkJCWlmIChTQ0FOX1BSSVZBVEUoc3MpLT5z c19pZmxhZ3MgJiBJU0NBTl9BQk9SVCkKLQkJCQlnb3RvIGRvbmU7CisJCQkvKiBX YWl0IHVudGlsIG51bGwgZGF0YSBmcmFtZSB3aWxsIGJlIEFDSydlZCAqLworCQkJ bXR4X3NsZWVwKHZhcCwgSUVFRTgwMjExX0xPQ0tfT0JKKGljKSwgUENBVENILAor CQkJICAgICJzdGFfcHMiLCBtc2Vjc190b190aWNrcygxMCkpOworCQkJaWYgKHNz X3ByaXYtPnNzX2lmbGFncyAmIElTQ0FOX0FCT1JUKSB7CisJCQkJc2Nhbl9kb25l KHNzLCAwKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCX0KIAl9CiAKLQlzY2FuZW5k ID0gdGlja3MgKyBTQ0FOX1BSSVZBVEUoc3MpLT5zc19kdXJhdGlvbjsKKwlzc19w cml2LT5zc19zY2FuZW5kID0gdGlja3MgKyBzc19wcml2LT5zc19kdXJhdGlvbjsK IAogCS8qIFhYWCBzY2FuIHN0YXRlIGNhbiBjaGFuZ2UhIFJlLXZhbGlkYXRlIHNj YW4gc3RhdGUhICovCiAKIAlJRUVFODAyMTFfVU5MT0NLKGljKTsKKwogCWljLT5p Y19zY2FuX3N0YXJ0KGljKTsJCS8qIG5vdGlmeSBkcml2ZXIgKi8KKworCXNjYW5f Y3VyY2hhbl90YXNrKHNzLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3NjYW5fY3Vy Y2hhbl90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IGll ZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGFyZzsKKwlzdHJ1Y3Qgc2Nhbl9zdGF0 ZSAqc3NfcHJpdiA9IFNDQU5fUFJJVkFURShzcyk7CisJc3RydWN0IGllZWU4MDIx MXZhcCAqdmFwID0gc3MtPnNzX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICpp YyA9IHNzLT5zc19pYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47 CisJdW5zaWduZWQgbG9uZyBtYXhkd2VsbDsKKwlpbnQgc2NhbmRvbmU7CisKIAlJ RUVFODAyMTFfTE9DSyhpYyk7CitlbmQ6CisJc2NhbmRvbmUgPSAoc3MtPnNzX25l eHQgPj0gc3MtPnNzX2xhc3QpIHx8CisJICAgIChzc19wcml2LT5zc19pZmxhZ3Mg JiBJU0NBTl9DQU5DRUwpICE9IDA7CiAKLQlmb3IgKDs7KSB7CisJSUVFRTgwMjEx X0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sCisJICAgICIlczogbG9v cCBzdGFydDsgc2NhbmRvbmU9JWRcbiIsCisJICAgIF9fZnVuY19fLAorCSAgICBz Y2FuZG9uZSk7CiAKLQkJc2NhbmRvbmUgPSAoc3MtPnNzX25leHQgPj0gc3MtPnNz X2xhc3QpIHx8Ci0JCSAgICAoU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzICYg SVNDQU5fQ0FOQ0VMKSAhPSAwOworCWlmIChzY2FuZG9uZSB8fCAoc3MtPnNzX2Zs YWdzICYgSUVFRTgwMjExX1NDQU5fR09UUElDSykgfHwKKwkgICAgKHNzX3ByaXYt PnNzX2lmbGFncyAmIElTQ0FOX0FCT1JUKSB8fAorCSAgICAgdGltZV9hZnRlcih0 aWNrcyArIHNzLT5zc19taW5kd2VsbCwgc3NfcHJpdi0+c3Nfc2NhbmVuZCkpIHsK KwkJc3NfcHJpdi0+c3NfaWZsYWdzICY9IH5JU0NBTl9SVU5OSU5HOworCQlzY2Fu X2VuZChzcywgc2NhbmRvbmUpOworCQlyZXR1cm47CisJfSBlbHNlCisJCXNzX3By aXYtPnNzX2lmbGFncyB8PSBJU0NBTl9SVU5OSU5HOwogCi0JCUlFRUU4MDIxMV9E UFJJTlRGKHZhcCwgSUVFRTgwMjExX01TR19TQ0FOLAotCQkgICAgIiVzOiBsb29w IHN0YXJ0OyBzY2FuZG9uZT0lZFxuIiwKLQkJICAgIF9fZnVuY19fLAotCQkgICAg c2NhbmRvbmUpOworCWNoYW4gPSBzcy0+c3NfY2hhbnNbc3MtPnNzX25leHQrK107 CiAKLQkJaWYgKHNjYW5kb25lIHx8IChzcy0+c3NfZmxhZ3MgJiBJRUVFODAyMTFf U0NBTl9HT1RQSUNLKSB8fAotCQkgICAgKFNDQU5fUFJJVkFURShzcyktPnNzX2lm bGFncyAmIElTQ0FOX0FCT1JUKSB8fAotCQkgICAgIHRpbWVfYWZ0ZXIodGlja3Mg KyBzcy0+c3NfbWluZHdlbGwsIHNjYW5lbmQpKQotCQkJYnJlYWs7CisJLyoKKwkg KiBXYXRjaCBmb3IgdHJ1bmNhdGlvbiBkdWUgdG8gdGhlIHNjYW4gZW5kIHRpbWUu CisJICovCisJaWYgKHRpbWVfYWZ0ZXIodGlja3MgKyBzcy0+c3NfbWF4ZHdlbGws IHNzX3ByaXYtPnNzX3NjYW5lbmQpKQorCQltYXhkd2VsbCA9IHNzX3ByaXYtPnNz X3NjYW5lbmQgLSB0aWNrczsKKwllbHNlCisJCW1heGR3ZWxsID0gc3MtPnNzX21h eGR3ZWxsOwogCi0JCWNoYW4gPSBzcy0+c3NfY2hhbnNbc3MtPnNzX25leHQrK107 CisJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sCisJ ICAgICIlczogY2hhbiAlM2QlYyAtPiAlM2QlYyBbJXMsIGR3ZWxsIG1pbiAlbHVt cyBtYXggJWx1bXNdXG4iLAorCSAgICBfX2Z1bmNfXywKKwkgICAgaWVlZTgwMjEx X2NoYW4yaWVlZShpYywgaWMtPmljX2N1cmNoYW4pLAorCSAgICBpZWVlODAyMTFf Y2hhbm5lbF90eXBlX2NoYXIoaWMtPmljX2N1cmNoYW4pLAorCSAgICBpZWVlODAy MTFfY2hhbjJpZWVlKGljLCBjaGFuKSwKKwkgICAgaWVlZTgwMjExX2NoYW5uZWxf dHlwZV9jaGFyKGNoYW4pLAorCSAgICAoc3MtPnNzX2ZsYWdzICYgSUVFRTgwMjEx X1NDQU5fQUNUSVZFKSAmJgorCQkoY2hhbi0+aWNfZmxhZ3MgJiBJRUVFODAyMTFf Q0hBTl9QQVNTSVZFKSA9PSAwID8KKwkJImFjdGl2ZSIgOiAicGFzc2l2ZSIsCisJ ICAgIHRpY2tzX3RvX21zZWNzKHNzLT5zc19taW5kd2VsbCksIHRpY2tzX3RvX21z ZWNzKG1heGR3ZWxsKSk7CiAKLQkJLyoKLQkJICogV2F0Y2ggZm9yIHRydW5jYXRp b24gZHVlIHRvIHRoZSBzY2FuIGVuZCB0aW1lLgotCQkgKi8KLQkJaWYgKHRpbWVf YWZ0ZXIodGlja3MgKyBzcy0+c3NfbWF4ZHdlbGwsIHNjYW5lbmQpKQotCQkJbWF4 ZHdlbGwgPSBzY2FuZW5kIC0gdGlja3M7Ci0JCWVsc2UKLQkJCW1heGR3ZWxsID0g c3MtPnNzX21heGR3ZWxsOworCS8qCisJICogUG90ZW50aWFsbHkgY2hhbmdlIGNo YW5uZWwgYW5kIHBoeSBtb2RlLgorCSAqLworCWljLT5pY19jdXJjaGFuID0gY2hh bjsKKwlpYy0+aWNfcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZShjaGFuKTsK KwlJRUVFODAyMTFfVU5MT0NLKGljKTsKKwkvKgorCSAqIFBlcmZvcm0gdGhlIGNo YW5uZWwgY2hhbmdlIGFuZCBzY2FuIHVubG9ja2VkIHNvIHRoZSBkcml2ZXIKKwkg KiBtYXkgc2xlZXAuIE9uY2Ugc2V0X2NoYW5uZWwgcmV0dXJucyB0aGUgaGFyZHdh cmUgaGFzCisJICogY29tcGxldGVkIHRoZSBjaGFubmVsIGNoYW5nZS4KKwkgKi8K KwlpYy0+aWNfc2V0X2NoYW5uZWwoaWMpOworCWllZWU4MDIxMV9yYWRpb3RhcF9j aGFuX2NoYW5nZShpYyk7CiAKLQkJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVF ODAyMTFfTVNHX1NDQU4sCi0JCSAgICAiJXM6IGNoYW4gJTNkJWMgLT4gJTNkJWMg WyVzLCBkd2VsbCBtaW4gJWx1bXMgbWF4ICVsdW1zXVxuIiwKLQkJICAgIF9fZnVu Y19fLAotCQkgICAgaWVlZTgwMjExX2NoYW4yaWVlZShpYywgaWMtPmljX2N1cmNo YW4pLAotCQkgICAgaWVlZTgwMjExX2NoYW5uZWxfdHlwZV9jaGFyKGljLT5pY19j dXJjaGFuKSwKLQkJICAgIGllZWU4MDIxMV9jaGFuMmllZWUoaWMsIGNoYW4pLAot CQkgICAgaWVlZTgwMjExX2NoYW5uZWxfdHlwZV9jaGFyKGNoYW4pLAotCQkgICAg KHNzLT5zc19mbGFncyAmIElFRUU4MDIxMV9TQ0FOX0FDVElWRSkgJiYKLQkJCShj aGFuLT5pY19mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkUpID09IDAgPwot CQkJImFjdGl2ZSIgOiAicGFzc2l2ZSIsCi0JCSAgICB0aWNrc190b19tc2Vjcyhz cy0+c3NfbWluZHdlbGwpLCB0aWNrc190b19tc2VjcyhtYXhkd2VsbCkpOworCS8q CisJICogU2NhbiBjdXJjaGFuLiAgRHJpdmVycyBmb3IgImludGVsbGlnZW50IGhh cmR3YXJlIgorCSAqIG92ZXJyaWRlIGljX3NjYW5fY3VyY2hhbiB0byB0ZWxsIHRo ZSBkZXZpY2UgdG8gZG8KKwkgKiB0aGUgd29yay4gIE90aGVyd2lzZSB3ZSBtYW5h Z2UgdGhlIHdvcmsgb3Vyc2VsdmVzOworCSAqIHNlbmRpbmcgYSBwcm9iZSByZXF1 ZXN0IChhcyBuZWVkZWQpLCBhbmQgYXJtaW5nIHRoZQorCSAqIHRpbWVvdXQgdG8g c3dpdGNoIGNoYW5uZWxzIGFmdGVyIG1heGR3ZWxsIHRpY2tzLgorCSAqCisJICog c2Nhbl9jdXJjaGFuIHNob3VsZCBvbmx5IHBhdXNlIGZvciB0aGUgdGltZSByZXF1 aXJlZCB0bworCSAqIHByZXBhcmUvaW5pdGlhdGUgdGhlIGhhcmR3YXJlIGZvciB0 aGUgc2NhbiAoaWYgYXQgYWxsKS4KKwkgKi8KKwlpYy0+aWNfc2Nhbl9jdXJjaGFu KHNzLCBtYXhkd2VsbCk7CisJSUVFRTgwMjExX0xPQ0soaWMpOwogCi0JCS8qCi0J CSAqIFBvdGVudGlhbGx5IGNoYW5nZSBjaGFubmVsIGFuZCBwaHkgbW9kZS4KLQkJ ICovCi0JCWljLT5pY19jdXJjaGFuID0gY2hhbjsKLQkJaWMtPmljX3J0ID0gaWVl ZTgwMjExX2dldF9yYXRldGFibGUoY2hhbik7Ci0JCUlFRUU4MDIxMV9VTkxPQ0so aWMpOwotCQkvKgotCQkgKiBQZXJmb3JtIHRoZSBjaGFubmVsIGNoYW5nZSBhbmQg c2NhbiB1bmxvY2tlZCBzbyB0aGUgZHJpdmVyCi0JCSAqIG1heSBzbGVlcC4gT25j ZSBzZXRfY2hhbm5lbCByZXR1cm5zIHRoZSBoYXJkd2FyZSBoYXMKLQkJICogY29t cGxldGVkIHRoZSBjaGFubmVsIGNoYW5nZS4KLQkJICovCi0JCWljLT5pY19zZXRf Y2hhbm5lbChpYyk7Ci0JCWllZWU4MDIxMV9yYWRpb3RhcF9jaGFuX2NoYW5nZShp Yyk7CisJLyogWFhYIHNjYW4gc3RhdGUgY2FuIGNoYW5nZSEgUmUtdmFsaWRhdGUg c2NhbiBzdGF0ZSEgKi8KIAotCQkvKgotCQkgKiBTY2FuIGN1cmNoYW4uICBEcml2 ZXJzIGZvciAiaW50ZWxsaWdlbnQgaGFyZHdhcmUiCi0JCSAqIG92ZXJyaWRlIGlj X3NjYW5fY3VyY2hhbiB0byB0ZWxsIHRoZSBkZXZpY2UgdG8gZG8KLQkJICogdGhl IHdvcmsuICBPdGhlcndpc2Ugd2UgbWFuYWdlIHRoZSB3b3JrIG91dHNlbHZlczsK LQkJICogc2VuZGluZyBhIHByb2JlIHJlcXVlc3QgKGFzIG5lZWRlZCksIGFuZCBh cm1pbmcgdGhlCi0JCSAqIHRpbWVvdXQgdG8gc3dpdGNoIGNoYW5uZWxzIGFmdGVy IG1heGR3ZWxsIHRpY2tzLgotCQkgKgotCQkgKiBzY2FuX2N1cmNoYW4gc2hvdWxk IG9ubHkgcGF1c2UgZm9yIHRoZSB0aW1lIHJlcXVpcmVkIHRvCi0JCSAqIHByZXBh cmUvaW5pdGlhdGUgdGhlIGhhcmR3YXJlIGZvciB0aGUgc2NhbiAoaWYgYXQgYWxs KSwgdGhlCi0JCSAqIGJlbG93IGNvbmR2YXIgaXMgdXNlZCB0byBzbGVlcCBmb3Ig dGhlIGNoYW5uZWxzIGR3ZWxsIHRpbWUKLQkJICogYW5kIGFsbG93cyBpdCB0byBi ZSBzaWduYWxsZWQgZm9yIGFib3J0LgotCQkgKi8KLQkJaWMtPmljX3NjYW5fY3Vy Y2hhbihzcywgbWF4ZHdlbGwpOwotCQlJRUVFODAyMTFfTE9DSyhpYyk7CisJc3Nf cHJpdi0+c3NfY2hhbm1pbmR3ZWxsID0gdGlja3MgKyBzcy0+c3NfbWluZHdlbGw7 CisJLyogY2xlYXIgbWluZHdlbGwgbG9jayBhbmQgaW5pdGlhbCBjaGFubmVsIGNo YW5nZSBmbHVzaCAqLworCXNzX3ByaXYtPnNzX2lmbGFncyAmPSB+SVNDQU5fUkVQ OwogCi0JCS8qIFhYWCBzY2FuIHN0YXRlIGNhbiBjaGFuZ2UhIFJlLXZhbGlkYXRl IHNjYW4gc3RhdGUhICovCisJaWYgKHNzX3ByaXYtPnNzX2lmbGFncyAmIChJU0NB Tl9DQU5DRUx8SVNDQU5fQUJPUlQpKQorCQlnb3RvIGVuZDsKIAotCQlTQ0FOX1BS SVZBVEUoc3MpLT5zc19jaGFubWluZHdlbGwgPSB0aWNrcyArIHNzLT5zc19taW5k d2VsbDsKLQkJLyogY2xlYXIgbWluZHdlbGwgbG9jayBhbmQgaW5pdGlhbCBjaGFu bmVsIGNoYW5nZSBmbHVzaCAqLwotCQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxh Z3MgJj0gfklTQ0FOX1JFUDsKKwlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4 MDIxMV9NU0dfU0NBTiwgIiVzOiB3YWl0aW5nXG4iLCBfX2Z1bmNfXyk7CisJSUVF RTgwMjExX1VOTE9DSyhpYyk7Cit9CiAKLQkJaWYgKChTQ0FOX1BSSVZBVEUoc3Mp LT5zc19pZmxhZ3MgJiAoSVNDQU5fQ0FOQ0VMfElTQ0FOX0FCT1JUKSkpCi0JCQlj b250aW51ZTsKK3N0YXRpYyB2b2lkCitzY2FuX2VuZChzdHJ1Y3QgaWVlZTgwMjEx X3NjYW5fc3RhdGUgKnNzLCBpbnQgc2NhbmRvbmUpCit7CisJc3RydWN0IHNjYW5f c3RhdGUgKnNzX3ByaXYgPSBTQ0FOX1BSSVZBVEUoc3MpOworCXN0cnVjdCBpZWVl ODAyMTF2YXAgKnZhcCA9IHNzLT5zc192YXA7CisJc3RydWN0IGllZWU4MDIxMWNv bSAqaWMgPSBzcy0+c3NfaWM7CiAKLQkJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJ RUVFODAyMTFfTVNHX1NDQU4sICIlczogd2FpdGluZ1xuIiwgX19mdW5jX18pOwot CQkvKiBXYWl0IHRvIGJlIHNpZ25hbGxlZCB0byBzY2FuIHRoZSBuZXh0IGNoYW5u ZWwgKi8KLQkJY3Zfd2FpdCgmU0NBTl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl9jdiwg SUVFRTgwMjExX0xPQ0tfT0JKKGljKSk7Ci0JfQorCUlFRUU4MDIxMV9MT0NLX0FT U0VSVChpYyk7CiAKIAlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9N U0dfU0NBTiwgIiVzOiBvdXRcbiIsIF9fZnVuY19fKTsKIAotCWlmIChTQ0FOX1BS SVZBVEUoc3MpLT5zc19pZmxhZ3MgJiBJU0NBTl9BQk9SVCkKLQkJZ290byBkb25l OworCWlmIChzc19wcml2LT5zc19pZmxhZ3MgJiBJU0NBTl9BQk9SVCkgeworCQlz Y2FuX2RvbmUoc3MsIHNjYW5kb25lKTsKKwkJcmV0dXJuOworCX0KIAogCUlFRUU4 MDIxMV9VTkxPQ0soaWMpOwogCWljLT5pY19zY2FuX2VuZChpYyk7CQkvKiBub3Rp ZnkgZHJpdmVyICovCkBAIC03NTAsOCArNzcxLDcgQEAKIAkgKiBTaW5jZSBhIGNh bmNlbGxhdGlvbiBtYXkgaGF2ZSBvY2N1cmVkIGR1cmluZyBvbmUgb2YgdGhlCiAJ ICogZHJpdmVyIGNhbGxzICh3aGlsc3QgdW5sb2NrZWQpLCB1cGRhdGUgc2NhbmRv bmUuCiAJICovCi0JaWYgKHNjYW5kb25lID09IDAgJiYKLQkgICAgKChTQ0FOX1BS SVZBVEUoc3MpLT5zc19pZmxhZ3MgJiBJU0NBTl9DQU5DRUwpICE9IDApKSB7CisJ aWYgKHNjYW5kb25lID09IDAgJiYgKHNzX3ByaXYtPnNzX2lmbGFncyAmIElTQ0FO X0NBTkNFTCkgIT0gMCkgewogCQkvKiBYWFggcHJpbnRmPyAqLwogCQlpZl9wcmlu dGYodmFwLT5pdl9pZnAsCiAJCSAgICAiJXM6IE9PUFMhIHNjYW4gY2FuY2VsbGVk IGR1cmluZyBkcml2ZXIgY2FsbCAoMSkhXG4iLApAQCAtNzc2LDcgKzc5Niw3IEBA CiAJCUlFRUU4MDIxMV9MT0NLKGljKTsKIAl9CiAJLyogY2xlYXIgaW50ZXJuYWwg ZmxhZ3MgYW5kIGFueSBpbmRpY2F0aW9uIG9mIGEgcGljayAqLwotCVNDQU5fUFJJ VkFURShzcyktPnNzX2lmbGFncyAmPSB+SVNDQU5fUkVQOworCXNzX3ByaXYtPnNz X2lmbGFncyAmPSB+SVNDQU5fUkVQOwogCXNzLT5zc19mbGFncyAmPSB+SUVFRTgw MjExX1NDQU5fR09UUElDSzsKIAogCS8qCkBAIC03ODYsMTUgKzgwNiwxNSBAQAog CSAqIG5vdGlmeSB0aGUgZHJpdmVyIHRvIGVuZCB0aGUgc2NhbiBhYm92ZSB0byBh dm9pZCBoYXZpbmcKIAkgKiByeCBmcmFtZXMgYWx0ZXIgdGhlIHNjYW4gY2FuZGlk YXRlIGxpc3QuCiAJICovCi0JaWYgKChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxh Z3MgJiBJU0NBTl9DQU5DRUwpID09IDAgJiYKKwlpZiAoKHNzX3ByaXYtPnNzX2lm bGFncyAmIElTQ0FOX0NBTkNFTCkgPT0gMCAmJgogCSAgICAhc3MtPnNzX29wcy0+ c2Nhbl9lbmQoc3MsIHZhcCkgJiYKIAkgICAgKHNzLT5zc19mbGFncyAmIElFRUU4 MDIxMV9TQ0FOX09OQ0UpID09IDAgJiYKLQkgICAgdGltZV9iZWZvcmUodGlja3Mg KyBzcy0+c3NfbWluZHdlbGwsIHNjYW5lbmQpKSB7CisJICAgIHRpbWVfYmVmb3Jl KHRpY2tzICsgc3MtPnNzX21pbmR3ZWxsLCBzc19wcml2LT5zc19zY2FuZW5kKSkg ewogCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwK IAkJICAgICIlczogZG9uZSwgcmVzdGFydCAiCiAJCSAgICAiW3RpY2tzICV1LCBk d2VsbCBtaW4gJWx1IHNjYW5lbmQgJWx1XVxuIiwKIAkJICAgIF9fZnVuY19fLAot CQkgICAgdGlja3MsIHNzLT5zc19taW5kd2VsbCwgc2NhbmVuZCk7CisJCSAgICB0 aWNrcywgc3MtPnNzX21pbmR3ZWxsLCBzc19wcml2LT5zc19zY2FuZW5kKTsKIAkJ c3MtPnNzX25leHQgPSAwOwkvKiByZXNldCB0byBiZWdpbmluZyAqLwogCQlpZiAo c3MtPnNzX2ZsYWdzICYgSUVFRTgwMjExX1NDQU5fQUNUSVZFKQogCQkJdmFwLT5p dl9zdGF0cy5pc19zY2FuX2FjdGl2ZSsrOwpAQCAtODAyLDcgKzgyMiw3IEBACiAJ CQl2YXAtPml2X3N0YXRzLmlzX3NjYW5fcGFzc2l2ZSsrOwogCiAJCXNzLT5zc19v cHMtPnNjYW5fcmVzdGFydChzcywgdmFwKTsJLyogWFhYPyAqLwotCQlpZWVlODAy MTFfcnVudGFzayhpYywgJlNDQU5fUFJJVkFURShzcyktPnNzX3NjYW5fdGFzayk7 CisJCWllZWU4MDIxMV9ydW50YXNrKGljLCAmc3NfcHJpdi0+c3Nfc2Nhbl9zdGFy dCk7CiAJCUlFRUU4MDIxMV9VTkxPQ0soaWMpOwogCQlyZXR1cm47CiAJfQpAQCAt ODE0LDE0ICs4MzQsMTMgQEAKIAlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4 MDIxMV9NU0dfU0NBTiwKIAkgICAgIiVzOiAlcywgW3RpY2tzICV1LCBkd2VsbCBt aW4gJWx1IHNjYW5lbmQgJWx1XVxuIiwKIAkgICAgX19mdW5jX18sIHNjYW5kb25l ID8gImRvbmUiIDogInN0b3BwZWQiLAotCSAgICB0aWNrcywgc3MtPnNzX21pbmR3 ZWxsLCBzY2FuZW5kKTsKKwkgICAgdGlja3MsIHNzLT5zc19taW5kd2VsbCwgc3Nf cHJpdi0+c3Nfc2NhbmVuZCk7CiAKIAkvKgogCSAqIFNpbmNlIGEgY2FuY2VsbGF0 aW9uIG1heSBoYXZlIG9jY3VyZWQgZHVyaW5nIG9uZSBvZiB0aGUKIAkgKiBkcml2 ZXIgY2FsbHMgKHdoaWxzdCB1bmxvY2tlZCksIHVwZGF0ZSBzY2FuZG9uZS4KIAkg Ki8KLQlpZiAoc2NhbmRvbmUgPT0gMCAmJgotCSAgICAoKFNDQU5fUFJJVkFURShz cyktPnNzX2lmbGFncyAmIElTQ0FOX0NBTkNFTCkgIT0gMCkpIHsKKwlpZiAoc2Nh bmRvbmUgPT0gMCAmJiAoc3NfcHJpdi0+c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VM KSAhPSAwKSB7CiAJCS8qIFhYWCBwcmludGY/ICovCiAJCWlmX3ByaW50Zih2YXAt Pml2X2lmcCwKIAkJICAgICIlczogT09QUyEgc2NhbiBjYW5jZWxsZWQgZHVyaW5n IGRyaXZlciBjYWxsICgyKSFcbiIsCkBAIC04MjksNiArODQ4LDE4IEBACiAJCXNj YW5kb25lID0gMTsKIAl9CiAKKwlzY2FuX2RvbmUoc3MsIHNjYW5kb25lKTsKK30K Kworc3RhdGljIHZvaWQKK3NjYW5fZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3NjYW5f c3RhdGUgKnNzLCBpbnQgc2NhbmRvbmUpCit7CisJc3RydWN0IHNjYW5fc3RhdGUg KnNzX3ByaXYgPSBTQ0FOX1BSSVZBVEUoc3MpOworCXN0cnVjdCBpZWVlODAyMTFj b20gKmljID0gc3MtPnNzX2ljOworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9 IHNzLT5zc192YXA7CisKKwlJRUVFODAyMTFfTE9DS19BU1NFUlQoaWMpOworCiAJ LyoKIAkgKiBDbGVhciB0aGUgU0NBTiBiaXQgZmlyc3QgaW4gY2FzZSBmcmFtZXMg YXJlCiAJICogcGVuZGluZyBvbiB0aGUgc3RhdGlvbiBwb3dlciBzYXZlIHF1ZXVl LiAgSWYKQEAgLTgzNSw4ICs4NjYsOCBAQAogCSAqIHdlIGRlZmVyIHRoaXMgdGhl biB0aGUgZGlzcGF0Y2ggb2YgdGhlIGZyYW1lcwogCSAqIG1heSBnZW5lcmF0ZSBh IHJlcXVlc3QgdG8gY2FuY2VsIHNjYW5uaW5nLgogCSAqLwotZG9uZToKIAlpYy0+ aWNfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1NDQU47CisKIAkvKgogCSAqIERyb3Ag b3V0IG9mIHBvd2VyIHNhdmUgbW9kZSB3aGVuIGEgc2NhbiBoYXMKIAkgKiBjb21w bGV0ZWQuICBJZiB0aGlzIHNjYW4gd2FzIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQK QEAgLTg1Myw3ICs4ODQsOCBAQAogCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVF RTgwMjExX0ZFWFRfQkdTQ0FOOwogCQl9CiAJfQotCVNDQU5fUFJJVkFURShzcykt PnNzX2lmbGFncyAmPSB+KElTQ0FOX0NBTkNFTHxJU0NBTl9BQk9SVCk7CisJc3Nf cHJpdi0+c3NfaWZsYWdzICY9IH4oSVNDQU5fQ0FOQ0VMfElTQ0FOX0FCT1JUKTsK Kwlzc19wcml2LT5zc19zY2FuZW5kID0gMDsKIAlzcy0+c3NfZmxhZ3MgJj0gfihJ RUVFODAyMTFfU0NBTl9PTkNFIHwgSUVFRTgwMjExX1NDQU5fUElDSzFTVCk7CiAJ SUVFRTgwMjExX1VOTE9DSyhpYyk7CiAjdW5kZWYgSVNDQU5fUkVQCkBAIC05NDcs OSArOTc5LDkgQEAKIAkJaWMtPmljX3NjYW4gPSBOVUxMOwogCQlyZXR1cm47CiAJ fQotCWNhbGxvdXRfaW5pdF9tdHgoJnNzLT5zc19zY2FuX3RpbWVyLCBJRUVFODAy MTFfTE9DS19PQkooaWMpLCAwKTsKLQljdl9pbml0KCZzcy0+c3Nfc2Nhbl9jdiwg InNjYW4iKTsKLQlUQVNLX0lOSVQoJnNzLT5zc19zY2FuX3Rhc2ssIDAsIHNjYW5f dGFzaywgc3MpOworCVRBU0tfSU5JVCgmc3MtPnNzX3NjYW5fc3RhcnQsIDAsIHNj YW5fc3RhcnQsIHNzKTsKKwlUSU1FT1VUX1RBU0tfSU5JVChpYy0+aWNfdHEsICZz cy0+c3Nfc2Nhbl9jdXJjaGFuLCAwLAorCSAgICBzY2FuX2N1cmNoYW5fdGFzaywg c3MpOwogCiAJaWMtPmljX3NjYW4gPSAmc3MtPmJhc2U7CiAJc3MtPmJhc2Uuc3Nf aWMgPSBpYzsK ------------1UGEIeCxgQrQAMT13Qg4VX--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.yc4mcrg5iew4ia>