From owner-freebsd-wireless@FreeBSD.ORG Mon Aug 6 07:42:14 2012 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3D90106564A for ; Mon, 6 Aug 2012 07:42:14 +0000 (UTC) (envelope-from moonlightakkiy@yahoo.ca) Received: from nm38.bullet.mail.ne1.yahoo.com (nm38.bullet.mail.ne1.yahoo.com [98.138.229.31]) by mx1.freebsd.org (Postfix) with SMTP id 7C0838FC14 for ; Mon, 6 Aug 2012 07:42:14 +0000 (UTC) Received: from [98.138.90.55] by nm38.bullet.mail.ne1.yahoo.com with NNFMP; 06 Aug 2012 07:42:07 -0000 Received: from [98.138.226.60] by tm8.bullet.mail.ne1.yahoo.com with NNFMP; 06 Aug 2012 07:42:07 -0000 Received: from [127.0.0.1] by smtp211.mail.ne1.yahoo.com with NNFMP; 06 Aug 2012 07:42:07 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.ca; s=s1024; t=1344238927; bh=RNkDamXbavgcgrocKIeOsKda4tjaXIX/tIQclleNgBU=; h=X-Yahoo-Newman-Id:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:Received:MIME-Version:Received:Received:In-Reply-To:References:Date:Message-ID:Subject:From:To:Cc:Content-Type; b=QUq0LD0KxFDeqD5MSWRJpaxTlPisFImm7fKiIx9NxnYoiVQ1MByhBfakL1EvJcTXkPyz8tlDZ9F28+fbh8ZN54EQu1RX6LAkPKXpAHTD6vLrBuz5Rrw5iE3DJhUcKIPaMhotNS2QFRfyz3CxMSy1CjxuUVXe8gNy8f1Xl+RpSF0= X-Yahoo-Newman-Id: 927720.87711.bm@smtp211.mail.ne1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: Lr7RrzMVM1nSYr.M8toxOd.XZaygTAa1BZe.tAhFYF90GnA w50bMtdjUlAD1lhETFB2B9ZsM44IqZW6K4tPd4nHbTB1nx.CXIbBaavHbj4Y MWjfRomqf1v2VOrUloLJUlhH8ndmPNkvuKX0FynlMmZAtP4sfrkeYGQoJy1N HAlL3nG7zcLPPbHHrdb.AwXlXFtzaDLQatP8OPxLBo83TA0dag1bPa3dZWGr ou4sAmluTfP0jYd9MyKAx5cbG9r4jR_24XcL3DD.BJT_w0nH46pHDdWp87s0 HHM4kJxi4TR7WuFKkQHrDZBja8AkViaIgd_lYYGxNyhH6hQoFbwFWf1O3RV0 pCuaH1.EkfvsNhv8KO8tTMYTh608y98JaDDOLN4NTz_wa.if44yugjZc1GVK 41Gh4XRgZ6vspMotYcSA_c8JMaJNDHZj2rMrV_jONpZvkV3PsHoVyC72L2TL r2NV1V7OPRfp8kNFo5ccUdS8DD3i4k3y6WpIpjWicGgUA0Vximv_wTM0gVrO XJoqMGWgupoS34NOQ5orPIYhSFK0q9PZTKNtwhaqDgFYvGDWPrJ1yjwbqZpK 3woViaQIM43ifAqK.1QfE X-Yahoo-SMTP: Xr6qjFWswBAEmd20sAvB4Q3keqXvXsIH9TjJ Received: from mail-vc0-f182.google.com (moonlightakkiy@209.85.220.182 with plain) by smtp211.mail.ne1.yahoo.com with SMTP; 06 Aug 2012 00:42:07 -0700 PDT Received: by vcbgb22 with SMTP id gb22so2934418vcb.13 for ; Mon, 06 Aug 2012 00:42:07 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.36.180 with SMTP id r20mr6389076vdj.15.1344238926981; Mon, 06 Aug 2012 00:42:06 -0700 (PDT) Received: by 10.59.10.194 with HTTP; Mon, 6 Aug 2012 00:42:06 -0700 (PDT) In-Reply-To: References: Date: Mon, 6 Aug 2012 01:42:06 -0600 Message-ID: From: PseudoCylon To: Adrian Chadd Content-Type: multipart/mixed; boundary=20cf307c9e0abc69df04c69403fe Cc: freebsd-wireless@freebsd.org, Kim Culhan Subject: Re: ath lor X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Aug 2012 07:42:15 -0000 --20cf307c9e0abc69df04c69403fe Content-Type: text/plain; charset=ISO-8859-1 On Sun, Aug 5, 2012 at 11:24 AM, Adrian Chadd wrote: > On 5 August 2012 06:37, PseudoCylon wrote: > >>> What's the path through the stack -> driver that leads to >>> run_tx_free() being called with the driver lock held? >> >> This one was easy to spot. >> USB stack calls run_bulk_tx_callbackN() with driver lock held, >> ->run_tx_free() ->ieee80211_free_node() then locks node lock. > > Ah. Hm, does the USB stack need to hold any locks held? > That seems like a recipe for disaster for drivers in general, not just wifi. Not 100% sure, but yes. And, it is unsafe to unlock before all usb related tasks have done. In this case, we should unlock somewhere here. http://fxr.watson.org/fxr/source/dev/usb/wlan/if_run.c#L2805 Caller can specify the lock when setting up usb transfers http://fxr.watson.org/fxr/source/dev/usb/wlan/if_run.c#L568 If null is passed rather than ptr to mtx, usb stack will use giant lock. http://fxr.watson.org/fxr/source/dev/usb/usb_transfer.c?im=10#L841 > >>> And on the flip side, what's the path through the driver -> stack >>> that's called with the driver lock held? The comlock shouldn't be held >>> when TX/RX'ing packets up to the stack. >> >> I have not found it yet. I've been stuck here, but I'll keep looking >> for this. Then I can patch usb/150189. > > Cool. > >>> Hm, maybe we should start a wiki page with all of the net80211/wifi >>> driver LORs. Do you have wiki.freebsd.org access? If not, create an >>> account and tell me what username you choose. If you do, create a page >>> under http://wiki.freebsd.org/WiFi and let's start documenting the >>> LORs that we see. >> >> run(4) calls ieee80211_runtask() because thread is non-sleepable or >> avoid LOR. I think I can still track back LOR. Also, I saved LOR >> outputs I saw long time ago. See if I can find them on old hard drive. > > Yes. Please, let's start a wiki page with all the wifi stack / driver > related LORs that you find. I really want to find/fix/document/squish > them as soon as possible. Will do. > > Also, would you please push a patch to the mailing list for your > current ieee80211_iterate_nodes() work, so Kim and I can try it out? > That way we can provide testing and feedback (respectively.) Attached iter.patch (with if_print) iter2.patch (with reverting change functions) both diff against CURRENT > > Thanks for your work with this! I'm glad to have someone else working > on improving things. (Ray, Bernard and Monthadar included as well. :-) Grad to help some. AK --20cf307c9e0abc69df04c69403fe Content-Type: application/octet-stream; name="iter.patch" Content-Disposition: attachment; filename="iter.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5j912um0 ZGlmZiAtLWdpdCBhL2llZWU4MDIxMV9ub2RlLmMgYi9pZWVlODAyMTFfbm9kZS5jCmluZGV4IDg2 MWZhODUuLmE2MDljYjEgMTAwNjQ0Ci0tLSBhL2llZWU4MDIxMV9ub2RlLmMKKysrIGIvaWVlZTgw MjExX25vZGUuYwpAQCAtMjE1NiwzMiArMjE1Niw3OSBAQCBpZWVlODAyMTFfbm9kZV90aW1lb3V0 KHZvaWQgKmFyZykKIAkJaWVlZTgwMjExX25vZGVfdGltZW91dCwgaWMpOwogfQogCisvKgorICog TWF5IGRpcmVjdGx5IGJlIGNhbGxlZCBhbmQgZG8gY3VzdG9taXplZCBpdGVyYXRlIGZ1bmN0aW9u cy4KKyAqIE9ubHkgcmVxdWlyZW1lbnQgaXMgdG8gZGVjcmVtZW50IGVhY2ggbm9kZSdzIHJlZiBj b3VudC4KKyAqLwogdm9pZAotaWVlZTgwMjExX2l0ZXJhdGVfbm9kZXMoc3RydWN0IGllZWU4MDIx MV9ub2RlX3RhYmxlICpudCwKLQlpZWVlODAyMTFfaXRlcl9mdW5jICpmLCB2b2lkICphcmcpCitp ZWVlODAyMTFfaXRlcmF0ZV9udChzdHJ1Y3QgaWVlZTgwMjExX25vZGVfdGFibGUgKm50LAorICAg IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKm5pX2FyciwgdWludDE2X3QgbWF4X2FpZCkKIHsKIAlz dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pOwogCXVfaW50IGdlbjsKKwlpbnQgaSA9IDA7CiAKIAlJ RUVFODAyMTFfTk9ERV9JVEVSQVRFX0xPQ0sobnQpOworCUlFRUU4MDIxMV9OT0RFX0xPQ0sobnQp OworCiAJZ2VuID0gKytudC0+bnRfc2NhbmdlbjsKKwogcmVzdGFydDoKLQlJRUVFODAyMTFfTk9E RV9MT0NLKG50KTsKIAlUQUlMUV9GT1JFQUNIKG5pLCAmbnQtPm50X25vZGUsIG5pX2xpc3QpIHsK LQkJaWYgKG5pLT5uaV9zY2FuZ2VuICE9IGdlbikgewotCQkJbmktPm5pX3NjYW5nZW4gPSBnZW47 Ci0JCQkodm9pZCkgaWVlZTgwMjExX3JlZl9ub2RlKG5pKTsKLQkJCUlFRUU4MDIxMV9OT0RFX1VO TE9DSyhudCk7Ci0JCQkoKmYpKGFyZywgbmkpOwotCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7 Ci0JCQlnb3RvIHJlc3RhcnQ7CisJCWlmIChuaS0+bmlfc2NhbmdlbiA9PSBnZW4pCisJCQljb250 aW51ZTsKKworCQlpZiAoaSA+PSBtYXhfYWlkKSB7CisJCQlpZl9wcmludGYobnQtPm50X2ljLT5p Y19pZnAsCisJCQkgICAgIk5vZGUgYXJyYXkgb3ZlcmZsb3c6IG1heD0ldSIsIG1heF9haWQpOwor CQkJYnJlYWs7CiAJCX0KKworCQluaS0+bmlfc2NhbmdlbiA9IGdlbjsKKwkJKCoobmlfYXJyICsg aSsrKSkgPSBpZWVlODAyMTFfcmVmX25vZGUobmkpOworCQlnb3RvIHJlc3RhcnQ7CiAJfQotCUlF RUU4MDIxMV9OT0RFX1VOTE9DSyhudCk7CiAKKwlJRUVFODAyMTFfTk9ERV9VTkxPQ0sobnQpOwog CUlFRUU4MDIxMV9OT0RFX0lURVJBVEVfVU5MT0NLKG50KTsKIH0KIAorLyoKKyAqIEp1c3QgYSB3 cmFwcGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSBldmVyeSBpZWVlODAyMTFfaXRlcmF0 ZV9ub2RlcygpCisgKiByZWZlcmVuY2UgaW4gdGhlIHNvdXJjZS4KKyAqLwordm9pZAoraWVlZTgw MjExX2l0ZXJhdGVfbm9kZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlX3RhYmxlICpudCwKKwlpZWVl ODAyMTFfaXRlcl9mdW5jICpmLCB2b2lkICphcmcpCit7CisJc3RydWN0IGllZWU4MDIxMV9ub2Rl ICoqbmlfYXJyOworCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7CisJdW5zaWduZWQgbG9uZyBz aXplOworCWludCBpOworCXVpbnQxNl90IG1heF9haWQ7CisKKwltYXhfYWlkID0gVEFJTFFfRklS U1QoJm50LT5udF9pYy0+aWNfdmFwcyktPml2X21heF9haWQ7CisJc2l6ZSA9IG1heF9haWQgKiBz aXplb2YoKm5pX2Fycik7CisJbmlfYXJyID0gKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKiltYWxs b2Moc2l6ZSwgTV84MDIxMV9OT0RFLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKG5p X2FyciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfaXRlcmF0ZV9udChudCwgbmlf YXJyLCBtYXhfYWlkKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfYWlkOyBpKyspIHsKKwkJbmkg PSAqKG5pX2FyciArIGkpOworCQlpZiAobmkgPT0gTlVMTCkJLyogZW5kIG9mIHRoZSBsaXN0ICov CisJCQlicmVhazsKKworCQkoKmYpKGFyZywgbmkpOworCQkvKiBpZWVlODAyMTFfZnJlZV9ub2Rl KCkgbG9ja3MgYnkgaXRzZWxmICovCisJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCX0KKwor CWZyZWUobmlfYXJyLCBNXzgwMjExX05PREUpOworfQorCiB2b2lkCiBpZWVlODAyMTFfZHVtcF9u b2RlKHN0cnVjdCBpZWVlODAyMTFfbm9kZV90YWJsZSAqbnQsIHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqbmkpCiB7CmRpZmYgLS1naXQgYS9pZWVlODAyMTFfbm9kZS5oIGIvaWVlZTgwMjExX25vZGUu aAppbmRleCA4M2IxMDhiLi4xZmJjODkyIDEwMDY0NAotLS0gYS9pZWVlODAyMTFfbm9kZS5oCisr KyBiL2llZWU4MDIxMV9ub2RlLmgKQEAgLTQzOCw2ICs0MzgsOCBAQCBpbnQJaWVlZTgwMjExX25v ZGVfZGVsdWNhc3RrZXkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogdm9pZAlpZWVlODAyMTFf bm9kZV90aW1lb3V0KHZvaWQgKmFyZyk7CiAKIHR5cGVkZWYgdm9pZCBpZWVlODAyMTFfaXRlcl9m dW5jKHZvaWQgKiwgc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwordm9pZAlpZWVlODAyMTFfaXRl cmF0ZV9udChzdHJ1Y3QgaWVlZTgwMjExX25vZGVfdGFibGUgKiwKKwkJc3RydWN0IGllZWU4MDIx MV9ub2RlICoqLCB1aW50MTZfdCk7CiB2b2lkCWllZWU4MDIxMV9pdGVyYXRlX25vZGVzKHN0cnVj dCBpZWVlODAyMTFfbm9kZV90YWJsZSAqLAogCQlpZWVlODAyMTFfaXRlcl9mdW5jICosIHZvaWQg Kik7CiAK --20cf307c9e0abc69df04c69403fe Content-Type: application/octet-stream; name="iter2.patch" Content-Disposition: attachment; filename="iter2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5j912v41 ZGlmZiAtLWdpdCBhL2llZWU4MDIxMV9ub2RlLmMgYi9pZWVlODAyMTFfbm9kZS5jCmluZGV4IDg2 MWZhODUuLmExNWZjOTEgMTAwNjQ0Ci0tLSBhL2llZWU4MDIxMV9ub2RlLmMKKysrIGIvaWVlZTgw MjExX25vZGUuYwpAQCAtMjE1NiwzMCArMjE1Niw5MyBAQCBpZWVlODAyMTFfbm9kZV90aW1lb3V0 KHZvaWQgKmFyZykKIAkJaWVlZTgwMjExX25vZGVfdGltZW91dCwgaWMpOwogfQogCi12b2lkCi1p ZWVlODAyMTFfaXRlcmF0ZV9ub2RlcyhzdHJ1Y3QgaWVlZTgwMjExX25vZGVfdGFibGUgKm50LAot CWllZWU4MDIxMV9pdGVyX2Z1bmMgKmYsIHZvaWQgKmFyZykKKy8qCisgKiBNYXkgZGlyZWN0bHkg YmUgY2FsbGVkIGFuZCBkbyBjdXN0b21pemVkIGl0ZXJhdGUgZnVuY3Rpb25zLgorICogT25seSBy ZXF1aXJlbWVudCBpcyB0byBkZWNyZW1lbnQgZWFjaCBub2RlJ3MgcmVmIGNvdW50LgorICovCitp bnQKK2llZWU4MDIxMV9pdGVyYXRlX250KHN0cnVjdCBpZWVlODAyMTFfbm9kZV90YWJsZSAqbnQs CisgICAgc3RydWN0IGllZWU4MDIxMV9ub2RlICoqbmlfYXJyLCB1aW50MTZfdCBtYXhfYWlkKQog ewogCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7CiAJdV9pbnQgZ2VuOworCWludCBpLCByZXQ7 CiAKIAlJRUVFODAyMTFfTk9ERV9JVEVSQVRFX0xPQ0sobnQpOworCUlFRUU4MDIxMV9OT0RFX0xP Q0sobnQpOworCiAJZ2VuID0gKytudC0+bnRfc2NhbmdlbjsKKwlpID0gcmV0ID0gMDsKKwogcmVz dGFydDoKLQlJRUVFODAyMTFfTk9ERV9MT0NLKG50KTsKIAlUQUlMUV9GT1JFQUNIKG5pLCAmbnQt Pm50X25vZGUsIG5pX2xpc3QpIHsKLQkJaWYgKG5pLT5uaV9zY2FuZ2VuICE9IGdlbikgewotCQkJ bmktPm5pX3NjYW5nZW4gPSBnZW47Ci0JCQkodm9pZCkgaWVlZTgwMjExX3JlZl9ub2RlKG5pKTsK LQkJCUlFRUU4MDIxMV9OT0RFX1VOTE9DSyhudCk7Ci0JCQkoKmYpKGFyZywgbmkpOworCQlpZiAo bmktPm5pX3NjYW5nZW4gPT0gZ2VuKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPj0gbWF4X2Fp ZCkgeworCQkJcmV0ID0gRTJCSUc7CisJCQlpZl9wcmludGYobnQtPm50X2ljLT5pY19pZnAsCisJ CQkgICAgIk5vZGUgYXJyYXkgb3ZlcmZsb3c6IG1heD0ldSIsIG1heF9haWQpOworCQkJYnJlYWs7 CisJCX0KKworCQluaS0+bmlfc2NhbmdlbiA9IGdlbjsKKwkJKCoobmlfYXJyICsgaSsrKSkgPSBp ZWVlODAyMTFfcmVmX25vZGUobmkpOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCisJaWYgKHJldCkg eworCQludC0+bnRfc2Nhbmdlbi0tOworCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2FpZDsgaSsrKSB7 CisJCQluaSA9ICoobmlfYXJyICsgaSk7CisJCQluaS0+bmlfc2Nhbmdlbi0tOworCQkJLyogbm9k ZSBsb2NrIGlzIHJlY3Vyc2l2ZSAqLwogCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7Ci0JCQln b3RvIHJlc3RhcnQ7CiAJCX0KKwkJZnJlZShuaV9hcnIsIE1fODAyMTFfTk9ERSk7CiAJfQotCUlF RUU4MDIxMV9OT0RFX1VOTE9DSyhudCk7CiAKKwlJRUVFODAyMTFfTk9ERV9VTkxPQ0sobnQpOwog CUlFRUU4MDIxMV9OT0RFX0lURVJBVEVfVU5MT0NLKG50KTsKKworCXJldHVybiAocmV0KTsKK30K KworLyoKKyAqIEp1c3QgYSB3cmFwcGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSBldmVy eSBpZWVlODAyMTFfaXRlcmF0ZV9ub2RlcygpCisgKiByZWZlcmVuY2UgaW4gdGhlIHNvdXJjZS4K KyAqLwordm9pZAoraWVlZTgwMjExX2l0ZXJhdGVfbm9kZXMoc3RydWN0IGllZWU4MDIxMV9ub2Rl X3RhYmxlICpudCwKKwlpZWVlODAyMTFfaXRlcl9mdW5jICpmLCB2b2lkICphcmcpCit7CisJc3Ry dWN0IGllZWU4MDIxMV9ub2RlICoqbmlfYXJyOworCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7 CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBpOworCXVpbnQxNl90IG1heF9haWQ7CisKKwlt YXhfYWlkID0gVEFJTFFfRklSU1QoJm50LT5udF9pYy0+aWNfdmFwcyktPml2X21heF9haWQ7CisJ c2l6ZSA9IG1heF9haWQgKiBzaXplb2YoKm5pX2Fycik7CisJbmlfYXJyID0gKHN0cnVjdCBpZWVl ODAyMTFfbm9kZSAqKiltYWxsb2Moc2l6ZSwgTV84MDIxMV9OT0RFLAorCSAgICBNX05PV0FJVCB8 IE1fWkVSTyk7CisJaWYgKG5pX2FyciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIWllZWU4 MDIxMV9pdGVyYXRlX250KG50LCBuaV9hcnIsIG1heF9haWQpKQorCQlyZXR1cm47CisKKwlmb3Ig KGkgPSAwOyBpIDwgbWF4X2FpZDsgaSsrKSB7CisJCW5pID0gKihuaV9hcnIgKyBpKTsKKwkJaWYg KG5pID09IE5VTEwpCS8qIGVuZCBvZiB0aGUgbGlzdCAqLworCQkJYnJlYWs7CisKKwkJKCpmKShh cmcsIG5pKTsKKwkJLyogaWVlZTgwMjExX2ZyZWVfbm9kZSgpIGxvY2tzIGJ5IGl0c2VsZiAqLwor CQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKKwl9CisKKwlmcmVlKG5pX2FyciwgTV84MDIxMV9O T0RFKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvaWVlZTgwMjExX25vZGUuaCBiL2llZWU4MDIx MV9ub2RlLmgKaW5kZXggODNiMTA4Yi4uNDhlYWUyZCAxMDA2NDQKLS0tIGEvaWVlZTgwMjExX25v ZGUuaAorKysgYi9pZWVlODAyMTFfbm9kZS5oCkBAIC00MzgsNiArNDM4LDggQEAgaW50CWllZWU4 MDIxMV9ub2RlX2RlbHVjYXN0a2V5KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsKIHZvaWQJaWVl ZTgwMjExX25vZGVfdGltZW91dCh2b2lkICphcmcpOwogCiB0eXBlZGVmIHZvaWQgaWVlZTgwMjEx X2l0ZXJfZnVuYyh2b2lkICosIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsKK2ludAlpZWVlODAy MTFfaXRlcmF0ZV9udChzdHJ1Y3QgaWVlZTgwMjExX25vZGVfdGFibGUgKiwKKwkJc3RydWN0IGll ZWU4MDIxMV9ub2RlICoqLCB1aW50MTZfdCk7CiB2b2lkCWllZWU4MDIxMV9pdGVyYXRlX25vZGVz KHN0cnVjdCBpZWVlODAyMTFfbm9kZV90YWJsZSAqLAogCQlpZWVlODAyMTFfaXRlcl9mdW5jICos IHZvaWQgKik7CiAK --20cf307c9e0abc69df04c69403fe--