From owner-freebsd-wireless@FreeBSD.ORG Sun Sep 15 04:08:39 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8B7861AA; Sun, 15 Sep 2013 04:08:39 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-ve0-x233.google.com (mail-ve0-x233.google.com [IPv6:2607:f8b0:400c:c01::233]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DF4A92C8E; Sun, 15 Sep 2013 04:08:38 +0000 (UTC) Received: by mail-ve0-f179.google.com with SMTP id c14so2114668vea.10 for ; Sat, 14 Sep 2013 21:08:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=0z7uI68xX1Akpmw/frvbXJlDC2dYr3wjaUmaDq0i31k=; b=dmIPAKJRciifk1x9bibmcqZ5qTzv1BS/XoVu4sJau5WLj9jlyQonxNaV9WN4EysK7j pTC3t8rzihF/5+CDTvim3jaN6aNEWsJ5xkB1Wv8w1CvK4SBOuRYjnDCpLU6+fUNdZKud /qOvNSJ4SXSP/OIWUl49Mju//e8WJC5Cn18FiGgJ/FEUxX7Y0UqxXTXe3iHlCDQ6BrY7 zNRkK933C9YzTUMMRnkPUg8YX4N3MWXsrikXuL4G0F28Q/p2CMOSUZGueRk7NWAmCLxJ 32DYMkdxxOPEbYAKUSJcWbunlUKCeQbbbVYzMpgcg6DflvjJebrrxbBQEKMiGze1RBTs BvjA== MIME-Version: 1.0 X-Received: by 10.58.44.37 with SMTP id b5mr20357548vem.4.1379218117981; Sat, 14 Sep 2013 21:08:37 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Sat, 14 Sep 2013 21:08:37 -0700 (PDT) In-Reply-To: References: Date: Sun, 15 Sep 2013 12:08:37 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=089e013a132afd7f2f04e6643d3a X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Sun, 15 Sep 2013 04:08:39 -0000 --089e013a132afd7f2f04e6643d3a Content-Type: text/plain; charset=ISO-8859-1 Hi! Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other drivers work, the __init__ and __findrate__ parts also need to be adapted. When initialize the ratectl state, a cap flag must be properly set and feed to ieee80211_ratectl_init(). __findrate__ part should be repalced with our ieee80211_ratectl_rates(). I've added ieee80211_ratectl_rc_info_get() to be used to get the ieee80211_rc_info. If found the tag, use it; if not, add a new one and use it. Then we don't need to free it explicitly (the tag is freed when associated mbuf is freed) and this interface is unified to both __findrate__ and __complete__. Thanks! Chenchong On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: > Ah, cool! I see you've only just made the other drivers compile; what's > required to make them work? i guess a call > to ieee80211_ratectl_rc_info_set() ? > > Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that > does the "lookup tag; if one exists use it else use a temporary one" code > that you put in if_ath.c, if_ath_tx.c. > > Other than that, this is looking very good! thankyou! > > > -adrian > > > > On 13 September 2013 20:52, Chenchong Qin wrote: > >> Hi, >> >> Here is latest update. Per-device ratectl statistics is implemented in >> ath and attached when ath is attaching. >> >> Thanks! >> >> Chenchong >> >> >> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >> >>> Sweet, thanks! >>> >>> >>> >>> -adrian >>> >>> >>> >>> On 13 September 2013 09:11, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> Here is some updates. >>>> >>>> Another member is added to ieee80211_rc_info to record value of the >>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>> inform aggregation selection code of proper maximum aggregate size. >>>> >>>> Per-vap ratectl statistics is exported through sysctl. When >>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>> convenient to implement the per-device api -- just traverse the vap list >>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>> provides service to vap-granularity object, not to device directly. So, is >>>> it more suitable to implement the per-device api in device driver (i.e. >>>> attach per-device api when attaching the device)? >>>> >>>> Code will be posted later. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>> >>>>> Hi, >>>>> >>>>> For now, yes, you have to assume that you won't always get a response >>>>> for a rate lookup. The buffer may be sent with NOACK set, it may be deleted >>>>> during a channel change or scan, etc. >>>>> >>>>> And yes - the rate control lookup stuff for aggregate frames is a bit >>>>> messy. It would be nice for the rate control code to return the rate _and_ >>>>> the maximum aggregate size, in case the aggregation selection wants to cap >>>>> how long frames are at the given choice. >>>>> >>>>> >>>>> >>>>> -adrian >>>>> >>>>> >>>>> >>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> I've added some aggregation support here! >>>>>> >>>>>> At first I intend to pass subframe informations(nframes, per-subframe >>>>>> length etc.) >>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>> must be performed >>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>> control decision >>>>>> is need) and subframe informations can be obtain only after the ampdu >>>>>> is formed. >>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let it >>>>>> distinguish >>>>>> aggregation and non-aggregation scenarios. If rate lookup is called >>>>>> in an aggregation >>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now >>>>>> finding rates for an >>>>>> ampdu and the framelen which records len of the first frame can be >>>>>> ignored. When >>>>>> it comes to complete period, tx status that shows number of subframes >>>>>> been sent >>>>>> and number of subframes been successfully received is passed to the >>>>>> ratectl api. >>>>>> >>>>>> I also get a question here - whether one tx that doesn't perform rate >>>>>> lookup will call >>>>>> the complete procedure? >>>>>> >>>>>> Thanks! >>>>>> >>>>>> Chenchong >>>>>> >>>>>> >>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>> qinchenchong@gmail.com> wrote: >>>>>> >>>>>>> Hi! >>>>>>> >>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>> >>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo >>>>>>> . >>>>>>> >>>>>>> It's worth mentioning that sometimes the kernel will "freezing" (it >>>>>>> looks like all things stop working, screen is freezing, keyboard and mouse >>>>>>> are not responding) after wireless stuff start working for a while. At >>>>>>> first, I consider it caused by my modification to ath. But this strange >>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>> >>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>> to let it support aggregation? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>> qinchenchong@gmail.com> wrote: >>>>>>> >>>>>>>> OK! >>>>>>>> >>>>>>>> Thanks! :-) >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: >>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>> >>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent >>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion, >>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -adrian >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --089e013a132afd7f2f04e6643d3a Content-Type: application/octet-stream; name="20130915-net80211-ratectl-ath.diff" Content-Disposition: attachment; filename="20130915-net80211-ratectl-ath.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hllqt0vv0 SW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9hbXJyLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEv aWVlZTgwMjExX2FtcnIuYwkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjEx X2FtcnIuYwkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogCiAjaW5jbHVkZSA8bmV0 ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9odC5o PgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaW5jbHVkZSA8bmV0 ODAyMTEvaWVlZTgwMjExX2FtcnIuaD4KLSNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0 ZWN0bC5oPgogCiAjZGVmaW5lIGlzX3N1Y2Nlc3MoYW1uKQlcCiAJKChhbW4pLT5hbW5fcmV0cnlj bnQgPCAoYW1uKS0+YW1uX3R4Y250IC8gMTApCkBAIC01OCwxOCArNTgsMTkgQEAKIAkoKGFtbikt PmFtbl90eGNudCA+IDEwKQogCiBzdGF0aWMgdm9pZAlhbXJyX3NldGludGVydmFsKGNvbnN0IHN0 cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCWFtcnJfaW5pdChzdHJ1Y3Qg aWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2 YXAgKiwgdWludDMyX3QpOwogc3RhdGljIHZvaWQJYW1ycl9kZWluaXQoc3RydWN0IGllZWU4MDIx MXZhcCAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9ub2Rl ICopOwogc3RhdGljIGludAlhbXJyX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgKiwKICAg ICAJCQlzdHJ1Y3QgaWVlZTgwMjExX2FtcnJfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUg Kik7CiBzdGF0aWMgaW50CWFtcnJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAq LCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlhbXJyX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKik7CiBzdGF0aWMgdm9pZAlhbXJyX3R4X2Nv bXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLSAgICAJCQljb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKiwgaW50LCAKLQkJCXZvaWQgKiwgdm9pZCAqKTsKLXN0YXRpYyB2b2lk CWFtcnJfdHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICAJCQlj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICop Oworc3RhdGljIHZvaWQJYW1ycl90eF91cGRhdGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq LAogCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZvaWQgKiwgdm9pZCAqLCB2b2lk ICopOworc3RhdGljIHZvaWQJYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICop Owogc3RhdGljIHZvaWQJYW1ycl9zeXNjdGxhdHRhY2goc3RydWN0IGllZWU4MDIxMXZhcCAqLAog CQkJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqLCBzdHJ1Y3Qgc3lzY3RsX29pZCAqKTsKIApAQCAt ODUsOSArODYsMTEgQEAKIAkuaXJfbm9kZV9pbml0CT0gYW1ycl9ub2RlX2luaXQsCiAJLmlyX25v ZGVfZGVpbml0CT0gYW1ycl9ub2RlX2RlaW5pdCwKIAkuaXJfcmF0ZQk9IGFtcnJfcmF0ZSwKKwku aXJfcmF0ZXMJPSBhbXJyX3JhdGVzLAogCS5pcl90eF9jb21wbGV0ZQk9IGFtcnJfdHhfY29tcGxl dGUsCiAJLmlyX3R4X3VwZGF0ZQk9IGFtcnJfdHhfdXBkYXRlLAogCS5pcl9zZXRpbnRlcnZhbAk9 IGFtcnJfc2V0aW50ZXJ2YWwsCisJLmlyX3N0YXRzCT0gYW1ycl9zdGF0cywKIH07CiBJRUVFODAy MTFfUkFURUNUTF9NT0RVTEUoYW1yciwgMSk7CiBJRUVFODAyMTFfUkFURUNUTF9BTEcoYW1yciwg SUVFRTgwMjExX1JBVEVDVExfQU1SUiwgYW1ycik7CkBAIC0xMDUsNyArMTA4LDcgQEAKIH0KIAog c3RhdGljIHZvaWQKLWFtcnJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCithbXJyX2lu aXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCiB7CiAJ c3RydWN0IGllZWU4MDIxMV9hbXJyICphbXJyOwogCkBAIC0xMTcsNiArMTIwLDEwIEBACiAJCWlm X3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVjdGwgc3RydWN0dXJlXG4i KTsKIAkJcmV0dXJuOwogCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNfc3RhdCAqIGlycyA9IElF RUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBhYmlsaXRpZXMgPSBjYXBh YmlsaXRpZXM7CisKIAlhbXJyLT5hbXJyX21pbl9zdWNjZXNzX3RocmVzaG9sZCA9IElFRUU4MDIx MV9BTVJSX01JTl9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyLT5hbXJyX21heF9zdWNjZXNzX3Ro cmVzaG9sZCA9IElFRUU4MDIxMV9BTVJSX01BWF9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyX3Nl dGludGVydmFsKHZhcCwgNTAwIC8qIG1zICovKTsKQEAgLTEyOSwxNyArMTM2LDYgQEAKIAlmcmVl KHZhcC0+aXZfcnMsIE1fODAyMTFfUkFURUNUTCk7CiB9CiAKLXN0YXRpYyBpbnQKLWFtcnJfbm9k ZV9pc18xMW4oc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKLXsKLQotCWlmIChuaS0+bmlfY2hh biA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCWlmIChuaS0+bmlfY2hhbiA9PSBJRUVFODAyMTFf Q0hBTl9BTllDKQotCQlyZXR1cm4gKDApOwotCXJldHVybiAoSUVFRTgwMjExX0lTX0NIQU5fSFQo bmktPm5pX2NoYW4pKTsKLX0KLQogc3RhdGljIHZvaWQKIGFtcnJfbm9kZV9pbml0KHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqbmkpCiB7CkBAIC0xNTksMjkgKzE1NSwyMCBAQAogCQl9CiAJfSBlbHNl CiAJCWFtbiA9IG5pLT5uaV9yY3RsczsKKwogCWFtbi0+YW1uX2FtcnIgPSBhbXJyOwogCWFtbi0+ YW1uX3N1Y2Nlc3MgPSAwOwogCWFtbi0+YW1uX3JlY292ZXJ5ID0gMDsKIAlhbW4tPmFtbl90eGNu dCA9IGFtbi0+YW1uX3JldHJ5Y250ID0gMDsKIAlhbW4tPmFtbl9zdWNjZXNzX3RocmVzaG9sZCA9 IGFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCi0JLyogMTFuIG9yIG5vdD8gUGlj ayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkv KiBYWFggZXcgKi8KLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19S QVRFQ1RMLCBuaSwKLQkJICAgICIlczogMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0JCXJzID0gKHN0 cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAmbmktPm5pX2h0cmF0ZXM7Ci0JfSBlbHNlIHsKLQkJ SUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJ ICAgICIlczogbm9uLTExbiBub2RlIiwgX19mdW5jX18pOwotCQlycyA9ICZuaS0+bmlfcmF0ZXM7 Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJLyogSW5p dGlhbCByYXRlIC0gbG93ZXN0ICovCiAJcmF0ZSA9IHJzLT5yc19yYXRlc1swXTsKIAogCS8qIFhY WCBjbGVhciB0aGUgYmFzaWMgcmF0ZSBmbGFnIGlmIGl0J3Mgbm90IDExbiAqLwotCWlmICghIGFt cnJfbm9kZV9pc18xMW4obmkpKQorCWlmICghIGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4o bmkpKQogCQlyYXRlICY9IElFRUU4MDIxMV9SQVRFX1ZBTDsKIAogCS8qIHBpY2sgaW5pdGlhbCBy YXRlIGZyb20gdGhlIHJhdGVzZXQgLSBIVCBvciBvdGhlcndpc2UgKi8KQEAgLTE4OSw3ICsxNzYs NyBAQAogCSAgICBhbW4tPmFtbl9yaXgtLSkgewogCQkvKiBsZWdhY3kgLSBhbnl0aGluZyA8IDM2 bWJpdCwgc3RvcCBzZWFyY2hpbmcgKi8KIAkJLyogMTFuIC0gc3RvcCBhdCBNQ1M0IC8gTUNTMTIg LyBNQ1MyOCAqLwotCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkgJiYKKwkJaWYgKGllZWU4MDIx MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpICYmCiAJCSAgICAocnMtPnJzX3JhdGVzW2Ftbi0+YW1u X3JpeF0gJiAweDcpIDwgNCkKIAkJCWJyZWFrOwogCQllbHNlIGlmICgocnMtPnJzX3JhdGVzW2Ft bi0+YW1uX3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwpIDw9IDcyKQpAQCAtMTk4LDcgKzE4NSw3 IEBACiAJfQogCiAJLyogaWYgdGhlIHJhdGUgaXMgYW4gMTFuIHJhdGUsIGVuc3VyZSB0aGUgTUNT IGJpdCBpcyBzZXQgKi8KLQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYgKGllZWU4MDIx MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpKQogCQlyYXRlIHw9IElFRUU4MDIxMV9SQVRFX01DUzsK IAogCS8qIEFzc2lnbiBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAqLwpAQCAtMjA2LDkg KzE5Myw4IEBACiAJYW1uLT5hbW5fdGlja3MgPSB0aWNrczsKIAogCUlFRUU4MDIxMV9OT1RFKG5p LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCi0JICAgICJBTVJSOiBucmF0ZXM9 JWQsIGluaXRpYWwgcmF0ZSAlZCIsCi0JICAgIHJzLT5yc19ucmF0ZXMsCi0JICAgIHJhdGUpOwor CSAgICAiJXM6IEFNUlI6IG5yYXRlcz0lZCwgaW5pdGlhbCByYXRlICVkIiwKKwkJX19mdW5jX18s IHJzLT5yc19ucmF0ZXMsIHJhdGUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI2LDE3ICsyMTIs MTIgQEAKIAogCUtBU1NFUlQoaXNfZW5vdWdoKGFtbiksICgidHhjbnQgJWQiLCBhbW4tPmFtbl90 eGNudCkpOwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlm IChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFggZXcgKi8KLQkJcnMgPSAoc3RydWN0 IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRlczsKLQl9IGVsc2UgewotCQlycyA9 ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQo bmkpOwogCisKIAlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD VEwsIG5pLAotCSAgICAiQU1SUjogY3VycmVudCByYXRlICVkLCB0eGNudD0lZCwgcmV0cnljbnQ9 JWQiLAotCSAgICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkgICAg IiVzOiBBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250PSVkLCByZXRyeWNudD0lZCIsCisJICAg IF9fZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkgICAg YW1uLT5hbW5fdHhjbnQsCiAJICAgIGFtbi0+YW1uX3JldHJ5Y250KTsKIApAQCAtMjU2LDggKzIz Nyw4IEBACiAJCQlhbW4tPmFtbl9zdWNjZXNzID0gMDsKIAkJCXJpeCsrOwogCQkJSUVFRTgwMjEx X05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJCSAgICAiQU1S UiBpbmNyZWFzaW5nIHJhdGUgJWQgKHR4Y250PSVkIHJldHJ5Y250PSVkKSIsCi0JCQkgICAgcnMt PnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCisJCQkgICAgIiVzOiBBTVJSIGlu Y3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKKwkJCSAgICBfX2Z1bmNf XywgcnMtPnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCiAJCQkgICAgYW1uLT5h bW5fdHhjbnQsIGFtbi0+YW1uX3JldHJ5Y250KTsKIAkJfSBlbHNlIHsKIAkJCWFtbi0+YW1uX3Jl Y292ZXJ5ID0gMDsKQEAgLTI3Nyw4ICsyNTgsOCBAQAogCQkJfQogCQkJcml4LS07CiAJCQlJRUVF ODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAotCQkJICAg ICJBTVJSIGRlY3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKLQkJCSAg ICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkJCSAgICAiJXM6IEFN UlIgZGVjcmVhc2luZyByYXRlICVkICh0eGNudD0lZCByZXRyeWNudD0lZCkiLAorCQkJICAgIF9f ZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkJCSAgICBh bW4tPmFtbl90eGNudCwgYW1uLT5hbW5fcmV0cnljbnQpOwogCQl9CiAJCWFtbi0+YW1uX3JlY292 ZXJ5ID0gMDsKQEAgLTMwNCwxMyArMjg1LDcgQEAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh dGVzZXQgKnJzID0gTlVMTDsKIAlpbnQgcml4OwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUg cmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFgg ZXcgKi8KLQkJcnMgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRl czsKLQl9IGVsc2UgewotCQlycyA9ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjEx X3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJaWYgKGlzX2Vub3VnaChhbW4pICYmICh0aWNr cyAtIGFtbi0+YW1uX3RpY2tzKSA+IGFtcnItPmFtcnJfaW50ZXJ2YWwpIHsKIAkJcml4ID0gYW1y cl91cGRhdGUoYW1yciwgYW1uLCBuaSk7CkBAIC0zMTgsNyArMjkzLDcgQEAKIAkJCS8qIHVwZGF0 ZSBwdWJsaWMgcmF0ZSAqLwogCQkJbmktPm5pX3R4cmF0ZSA9IHJzLT5yc19yYXRlc1tyaXhdOwog CQkJLyogWFhYIHN0cmlwIGJhc2ljIHJhdGUgZmxhZyBmcm9tIHR4cmF0ZSwgaWYgbm9uLTExbiAq LwotCQkJaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKQorCQkJaWYgKGllZWU4MDIxMV9yYXRlY3Rs X25vZGVfaXMxMW4obmkpKQogCQkJCW5pLT5uaV90eHJhdGUgfD0gSUVFRTgwMjExX1JBVEVfTUNT OwogCQkJZWxzZQogCQkJCW5pLT5uaV90eHJhdGUgJj0gSUVFRTgwMjExX1JBVEVfVkFMOwpAQCAt MzMwLDYgKzMwNSw3NiBAQAogCXJldHVybiByaXg7CiB9CiAKK3N0YXRpYyB2b2lkCithbXJyX3Jh dGVzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAq cmNfaW5mbykKK3sKKyNkZWZpbmUJUkFURShfaXgpCShycy0+cnNfcmF0ZXNbKF9peCldICYgSUVF RTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkocnMtPnJzX3JhdGVzWyhfaXgpXSB8 IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBy Y19pbmZvLT5pcmlfcmM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICpycyA9IE5V TEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IE5VTEw7CisJaW50 IHJpeCwgY29kZTsKKworCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwor CXJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUobmktPm5pX2ljLT5pY19jdXJjaGFuKTsKKwlJ RUVFODAyMTFfRFBSSU5URihuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIAorCSAg ICAiJXM6IGNoYW5uZWwgZmxhZ3M6IDB4JTA4eFxuIiwgX19mdW5jX18sIAorCQluaS0+bmlfaWMt PmljX2N1cmNoYW4tPmljX2ZsYWdzKTsgCisJCisJcml4ID0gYW1ycl9yYXRlKG5pLCBOVUxMLCAw KTsKKworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNdLmZs YWdzID0gMDsKKworCWlmIChycy0+cnNfbnJhdGVzID4gMCkgeworCQljb2RlID0gaWVlZTgwMjEx X3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhyaXgpIDogUkFURShyaXgpOworCQlyY1swXS5y aXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCisJCWlmIChJRUVFODAyMTFfUkFURUNU TF9IQVNDQVBfTVJSKG5pLT5uaV92YXApKSB7CisJCQlyY1swXS50cmllcyA9IDE7CisJCQlyY1sx XS50cmllcyA9IDE7CisJCQlyY1syXS50cmllcyA9IDE7CisJCQlyY1szXS50cmllcyA9IDE7CisJ CQlpZiAoLS1yaXggPj0gMCkgeworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lz MTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJpeCk7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD b2RlVG9JbmRleFtjb2RlXTsKKwkJCX0gZWxzZSB7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD b2RlVG9JbmRleFswXTsKKwkJCX0KKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29kZSA9IGll ZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4KTsKKwkJ CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNlIHsKKwkJ CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQkJfQorCQkJaWYgKHJpeCA+ PSAwKSB7CisJCQkJLyogTkI6IG9ubHkgZG8gdGhpcyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSBkbyBp dCBhYm92ZSAqLworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8g TUNTKDApIDogUkFURSgwKTsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2Nv ZGVdOworCQkJfSBlbHNlIHsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBd OworCQkJfQorCQl9IGVsc2UgeworCQkJcmNbMF0udHJpZXMgPSBJRUVFODAyMTFfUkFURUNUTF9U WE1BWFRSWTsKKworCQkJcmNbMV0udHJpZXMgPSAwOworCQkJcmNbMl0udHJpZXMgPSAwOworCQkJ cmNbM10udHJpZXMgPSAwOworCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFswXTsK KwkJCXJjWzJdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbMF07CisJCQlyY1szXS5yaXggPSBy dC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQl9CisJfQorCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92 YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczogQU1SUiByYXRlIHNldHMo cml4LCB0cmllcykuIHJjWzBdOiglZCwgJWQpLCByY1sxXTooJWQsICVkKSwgIiAKKwkJInJjWzJd OiglZCwgJWQpLCByY1szXTooJWQsICVkKSIsIF9fZnVuY19fLCAKKwkJcmNbMF0ucml4LCByY1sw XS50cmllcywKKwkJcmNbMV0ucml4LCByY1sxXS50cmllcywgCisJCXJjWzJdLnJpeCwgcmNbMl0u dHJpZXMsIAorCQlyY1szXS5yaXgsIHJjWzNdLnRyaWVzKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYg TUNTCit9CisKIC8qCiAgKiBVcGRhdGUgc3RhdGlzdGljcyB3aXRoIHR4IGNvbXBsZXRlIHN0YXR1 cy4gIE9rIGlzIG5vbi16ZXJvCiAgKiBpZiB0aGUgcGFja2V0IGlzIGtub3duIHRvIGJlIEFDSydk LiAgUmV0cmllcyBoYXMgdGhlIG51bWJlcgpAQCAtMzM3LDE2ICszODIsMjIgQEAKICAqLwogc3Rh dGljIHZvaWQKIGFtcnJfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw LAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKLSAgICB2b2lk ICphcmcxLCB2b2lkICphcmcyIF9fdW51c2VkKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf bm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKIAlzdHJ1Y3Qg aWVlZTgwMjExX2FtcnJfbm9kZSAqYW1uID0gbmktPm5pX3JjdGxzOwotCWludCByZXRyaWVzID0g KihpbnQgKilhcmcxOwogCi0JYW1uLT5hbW5fdHhjbnQrKzsKLQlpZiAob2spCi0JCWFtbi0+YW1u X3N1Y2Nlc3MrKzsKLQlhbW4tPmFtbl9yZXRyeWNudCArPSByZXRyaWVzOworCS8qIHVwZGF0ZSBw ZXIgdmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAs IHJjX2luZm8pOworCisJYW1uLT5hbW5fdHhjbnQgKz0gcmNfaW5mby0+aXJpX3R4Y250OworCWFt bi0+YW1uX3N1Y2Nlc3MgKz0gKHJjX2luZm8tPmlyaV90eGNudCAtIHJjX2luZm8tPmlyaV9mYWls Y250KTsKKwlhbW4tPmFtbl9yZXRyeWNudCArPSByY19pbmZvLT5pcmlfcmV0cnljbnQ7CisKKwlJ RUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczog QU1SUiB0eCBjb21wbGV0ZS4gdHhjbnQ9JWQoJWQpIHN1Y2Nlc3M9JWQoJWQpIHJldHJ5Y250PSVk KCVkKVxuIiwKKwkgICAgX19mdW5jX18sIGFtbi0+YW1uX3R4Y250LCByY19pbmZvLT5pcmlfdHhj bnQsCisJCWFtbi0+YW1uX3N1Y2Nlc3MsIChyY19pbmZvLT5pcmlfdHhjbnQgLSByY19pbmZvLT5p cmlfZmFpbGNudCksCisJCWFtbi0+YW1uX3JldHJ5Y250LCByY19pbmZvLT5pcmlfcmV0cnljbnQp OwogfQogCiAvKgpAQCAtMzY0LDggKzQxNSwyMSBAQAogCWFtbi0+YW1uX3R4Y250ID0gdHhjbnQ7 CiAJYW1uLT5hbW5fc3VjY2VzcyA9IHN1Y2Nlc3M7CiAJYW1uLT5hbW5fcmV0cnljbnQgPSByZXRy eWNudDsKKwlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJ ICAgICIlczogQU1SUiB0eCB1cGRhdGUuIHR4Y250PSVkIHN1Y2Nlc3M9JWQgcmV0cnljbnQ9JWRc biIsCisJICAgIF9fZnVuY19fLCB0eGNudCwgc3VjY2VzcywgcmV0cnljbnQpOwogfQogCitzdGF0 aWMgdm9pZAorYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJ c3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2 YXApOworCXByaW50ZigidHggY291bnQ6ICVkIChvayBjb3VudDogJWQsIGZhaWwgY291bnQ6ICVk KVxuIgorCQkJInJldHJ5IGNvdW50OiAlZCAoc2hvcnQgcmV0cnk6ICVkLCBsb25nIHJldHJ5OiAl ZClcbiIsCisJCQlpcnMtPmlyc190eGNudCwgaXJzLT5pcnNfdHhjbnQgLSBpcnMtPmlyc19mYWls Y250LCBpcnMtPmlyc19mYWlsY250LAorCQkJaXJzLT5pcnNfcmV0cnljbnQsIGlycy0+aXJzX3No b3J0cmV0cnksIGlycy0+aXJzX2xvbmdyZXRyeSk7Cit9CisKIHN0YXRpYyBpbnQKIGFtcnJfc3lz Y3RsX2ludGVydmFsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCiB7CkluZGV4OiBuZXQ4MDIxMS9pZWVl ODAyMTFfcmF0ZWN0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3Rs LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMJKHdv cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBS dWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVu Y2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1MCw0MCBAQAogCiBNQUxMT0NfREVGSU5FKE1fODAy MTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIsICI4MDIuMTEgcmF0ZSBjb250cm9sIik7CiAKK2Vu dW0geworCU1DU19IVDIwLAorCU1DU19IVDIwX1NHSSwKKwlNQ1NfSFQ0MCwKKwlNQ1NfSFQ0MF9T R0ksCit9OworCitpbnQgbWF4XzRtc19mcmFtZWxlbls0XVszMl0gPSB7CisJW01DU19IVDIwXSA9 IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAgMTI4NjQsICAxOTMwMCwgIDI1NzM2LCAgMjg5NTIs ICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAxOTI4MCwgMjU3MDgsICAzODU2OCwgIDUxNDI0LCAg NTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5MjYwLCAyODg5NiwgMzg1MjgsICA1Nzc5MiwgIDY1 NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4MjgsIDI1NjU2LCAzODQ4OCwgNTEzMjAsICA2NTUz MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQyMF9TR0ldID0geworCQkz NTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYsICAyMTQ0NCwgIDI4NTk2LCAgMzIxNzIsICAzNTc0 NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwgIDI4NTY4LCAgNDI4NTYsICA1NzE0NCwgIDY0Mjg4 LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwgMzIxMTIsICA0MjgxNiwgIDY0MjI4LCAgNjU1MzIs ICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1NiwgMjg1MTYsIDQyNzgwLCAgNTcwNDAsICA2NTUzMiwg IDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF0gPSB7CisJCTY2ODAsICAx MzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5MiwgIDUzNDU2LCAgNjAxNDAsICA2NTUzMiwKKwkJ MTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQwMCwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAxNiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF9TR0ldID0geworCQk3NDIwLCAg MTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1NDQsICA1OTM5NiwgIDY1NTMyLCAgNjU1MzIsCisJ CTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkzNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTkyMzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQorfTsKKwogdm9pZAogaWVlZTgwMjExX3JhdGVjdGxf cmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCAqcmF0ZWN0 bCkKIHsKQEAgLTY1LDEyICsxMDAsMzYgQEAKIAlyYXRlY3Rsc1t0eXBlXSA9IE5VTEw7CiB9CiAK K3N0YXRpYyBpbnQKK3JhdGVjdGxfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7 CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2 ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKworCWllZWU4MDIxMV9y YXRlY3RsX3N0YXRzKHZhcCk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQKLWllZWU4MDIxMV9yYXRl Y3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoraWVlZTgwMjExX3JhdGVjdGxfaW5p dChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlp ZiAodmFwLT5pdl9yYXRlID09IHJhdGVjdGxzW0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVdKQogCQlp ZWVlODAyMTFfcmF0ZWN0bF9zZXQodmFwLCBJRUVFODAyMTFfUkFURUNUTF9BTVJSKTsKLQl2YXAt Pml2X3JhdGUtPmlyX2luaXQodmFwKTsKKwl2YXAtPml2X3JhdGUtPmlyX2luaXQodmFwLCBjYXBh YmlsaXRpZXMpOworCisJU1lTQ1RMX0FERF9QUk9DKHZhcC0+aXZfc3lzY3RsLCBTWVNDVExfQ0hJ TERSRU4odmFwLT5pdl9vaWQpLCAKKwkJCU9JRF9BVVRPLCAicmF0ZWN0bF9zdGF0cyIsIENUTFRZ UEVfSU5UIHwgQ1RMRkxBR19SVywgCisJCQl2YXAsIDAsIHJhdGVjdGxfc3lzY3RsX3N0YXRzLCAi SSIsIAorCQkJInBlci12YXAgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CisKKwlJRUVF ODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkgICAgIiVzOiByYXRl Y3RsIGluaXRpYWxpemVkLiBjYXBzPTB4JTA4eFxuIiwKKwkgICAgX19mdW5jX18sIGNhcGFiaWxp dGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMgKzE0OSwxMTAgQEAKIAl9CiAJdmFwLT5pdl9yYXRl ID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3ZvaWQKK2llZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRl X3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIxMV9y Y19pbmZvICpyY19pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92 YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOwor CWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqIHJ0ID0gTlVMTDsKKwl1aW50OF90 IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKG5pLT5uaV9p Yy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCByYXRlIGNvbnRyb2wgY29kZSBk b2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYgZW5hYmxlIHJ0cy9jdHMgYW5kIGlzIHByZS04MDIu MTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAorCSAqLworCisJaWYgKCEgSUVFRTgwMjExX1JBVEVD VExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7CisJCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFf UkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJaWYgKHJjWzBdLmZsYWdzICYgSUVFRTgwMjExX1JB VEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNbaV0udHJpZXMgPSAwOworCQkJcmNbaV0uZmxhZ3Mg Jj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTOyAKKwkJfQorCX0KKworCWZvciAoaSA9 IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRy aWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5k b3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFibGUgZHVhbC1zdHJlYW0sIHNob3J0Z2ksIDIwNDAg aWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElTX0hUX1JBVEUocmF0ZSkpIHsKKwkJCXJjW2ldLmZs YWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQ7CisKKwkJCWlmIChpZWVlODAyMTFfcmF0 ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVD VExfRkxBR19DVzQwOworCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3Nob3J0Z2ko bmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJOworCQkJ LyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBUWCBlbmFibGVkIGFuZCB0aGUgcmVjZWl2ZXIKKwkJ CSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkgMSBzdHJlYW0gU1RCQywgQU5EIGl0J3MKKwkJCSAq IE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxlYXN0IHR3byBjaGFpbnMgZW5hYmxlZCwKKwkJCSAq IGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0 YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIDwgOCAmJgorCQkJCUhU X1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9S QVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJLyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFt IHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9SQ18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQly Y1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTOworCQkJZWxzZSBpZiAoSFRf UkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JB VEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSA0bXMg ZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBvbiB0aGUgTUNTIHJhdGUsIFNHSSBhbmQgY2hhbm5l bCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJaWYgKEhUX1JDXzJfTUNTKHJhdGUpIDwgMzIpIHsK KwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFH X0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19T R0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJOworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hU NDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVD VExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUMjBfU0dJOworCQkJCQllbHNlCisJCQkJCQlq ID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJjW2ldLm1heDRtc2ZyYW1lbGVuID0KKwkJCQkgICAg bWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18yX01DUyhyYXRlKV07CisJCQl9CisJCX0gZWxzZSB7 CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9IDA7CisKKwkJCS8qCisJCQkgKiBPbmx5IGVuYWJs ZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5IHJhdGVzCisJCQkgKi8KKwkJCWlmIChyY19pbmZv LT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQKQorCQkJCXJjW2ldLmZsYWdz IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1A7CisJCX0KKworCQkvKgorCQkgKiBDYWxjdWxh dGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2FwIGZvciB0aGUgY3VycmVudAorCQkgKiBub2RlLiAK KwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2FuJ3QgY29udHJvbCBUWCBwb3dlciBieSBub3cuCisJ CSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAgPSBpZWVlODAyMTFfZ2V0X25vZGVfdHhwb3dlcihu aSk7CisJCQorCX0KKwlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JB VEVDVEwsIG5pLAorCSAgICAiJXM6IGZsYWdzOiByY1swXToweCUwOHgsIHJjWzFdOjB4JTA4eCwg IgorCQkicmNbMl06MHglMDh4LCByY1szXToweCUwOHhcbiIsIF9fZnVuY19fLCAKKwkJcmNbMF0u ZmxhZ3MsIHJjWzFdLmZsYWdzLCByY1syXS5mbGFncywgcmNbM10uZmxhZ3MpOworfQorCkluZGV4 OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIx MV9yYXRlY3RsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHly aWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdo dCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw2ICsyNSw4IEBACiAgKgogICog JEZyZWVCU0QkCiAgKi8KKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX0hfCisj ZGVmaW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9IXwogCiBlbnVtIGllZWU4MDIxMV9y YXRlYWxncyB7CiAJSUVFRTgwMjExX1JBVEVDVExfQU1SUgkJPSAwLApAQCAtMzcsMjggKzQwLDEx NSBAQAogI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTCTEKICNkZWZpbmUJSUVF RTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRQkwCiAKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf VFJVRQkJMQorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GQUxTRQkJMAorCisjZGVmaW5lCUlF RUU4MDIxMV9SQVRFQ1RMX05VTQkJNAorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWE1BWFRS WQkxMQorCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfRFMJCTB4MDEJLyogZHVhbC1z dHJlYW0gcmF0ZSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX0NXNDAJCTB4MDIJ LyogdXNlIEhUNDAgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kJCTB4MDQJ LyogdXNlIHNob3J0LUdJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQJCTB4 MDgJLyogdXNlIEhUICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTCTB4 MTAJLyogZW5hYmxlIFJUUy9DVFMgcHJvdGVjdGlvbiAqLworI2RlZmluZQlJRUVFODAyMTFfUkFU RUNUTF9GTEFHX1NUQkMJCTB4MjAJLyogZW5hYmxlIFNUQkMgKi8KKyNkZWZpbmUJSUVFRTgwMjEx X1JBVEVDVExfRkxBR19UUwkJMHg0MAkvKiB0cmlwbGUtc3RyZWFtIHJhdGUgKi8KKyNkZWZpbmUJ SUVFRTgwMjExX1JBVEVDVExfRkxBR19TUAkJMHg4MAkvKiBzaG9ydCBwcmVhbWJsZSAqLworCisv KiBIYXJkd2FyZSBDQVBzIG9mZmVyZWQgdG8gcmF0ZSBjb250cm9sIGFsZ28gKi8KKyNkZWZpbmUJ SUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUgkJCTB4MDEJLyogc3VwcG9ydCBNUlIgKi8KKyNkZWZp bmUJSUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUlBST1QJCTB4MDIJLyogc3VwcG9ydCBNUlIgKyBw cm90ZWN0ICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOCTB4MDQJ LyogaGFzIG1vcmUgdGhhbiAxIHR4Y2hhaW4gKi8KKworI2RlZmluZSBJU19WQVBfSFQodmFwKQko KHZhcCktPml2X2h0Y2FwcyAmIElFRUU4MDIxMV9IVENfSFQpCisjZGVmaW5lIElTX0hUX1JBVEUo X3JhdGUpICAgKChfcmF0ZSkgJiAweDgwKQorI2RlZmluZSBIVF9SQ18yX01DUyhfcmMpICAgICgo X3JjKSAmIDB4N2YpCisjZGVmaW5lIEhUX1JDXzJfU1RSRUFNUyhfcmMpICAgICgoKChfcmMpICYg MHg3OCkgPj4gMykgKyAxKQorCitleHRlcm4gaW50IG1heF80bXNfZnJhbWVsZW5bNF1bMzJdOwor CitzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyB7CisJdWludDhfdCByaXg7CQkvKiByYXRldGFi bGUgaW5kZXgsIG5vdCByYXRlIGNvZGUgKi8KKwl1aW50OF90IHJhdGVjb2RlOwkvKiBoYXJkd2Fy ZSByYXRlIGNvZGUgKi8KKwl1aW50OF90IHRyaWVzOworCXVpbnQ4X3QgdHhfcG93ZXJfY2FwOwor CXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IG1heDRtc2ZyYW1lbGVuOworfTsKKworc3RydWN0 IGllZWU4MDIxMV9yY19pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyBpcmlfcmNb SUVFRTgwMjExX1JBVEVDVExfTlVNXTsKKwl1aW50MzJfdCBpcmlfZnJhbWVsZW47CisJdWludDE2 X3QgaXJpX2ZsYWdzOwkJCS8qIFNlZSBiZWxvdyAqLworCXVpbnQxNl90IGlyaV9tYXhhZ2dyc2l6 ZTsJLyogTWF4aW11bSBhZ2dyZWdhdGUgc2l6ZSAqLworCisJLyogVFggaW5mbyAqLworCXVpbnQ4 X3QgaXJpX3R4Y250OwkJCS8qIFRYIGNvdW50ICovCisJdWludDhfdCBpcmlfZmFpbGNudDsJCS8q IFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1aW50OF90IGlyaV9va2NudDsJCQkvKiBUWCBvayB3 aXRoIG9yIHdpdGhvdXQgcmV0cnkgKi8KKwl1aW50OF90IGlyaV9yZXRyeWNudDsJCS8qIFRYIHJl dHJ5IGNvdW50ICovCisJdWludDhfdCBpcmlfc2hvcnRyZXRyeTsKKwl1aW50OF90IGlyaV9sb25n cmV0cnk7CisJdWludDhfdCBpcmlfZmluYWx0c2k7CisJdWludDhfdCBpcmlfdHhyYXRlOwkJCS8q IEhXIHR4IHJhdGUgKi8KK307CisKKy8qIGllZWU4MDIxMV9yY19pbmZvIGZsYWdzICovCisjZGVm aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0lORk9fU1AJCTB4MDEJLyogc2hvcnQgcHJlYW1ibGUgKi8K KyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSCQkweDAyCS8qIGFnZ3JlZ2F0aW9u IHNjZW5hcmlvICovCisKKyNkZWZpbmUgTkVUODAyMTFfVEFHX1JBVEVDVEwgICAxICAgLyogbmV0 ODAyMTEgcmF0ZWN0bCBzdGF0ZSAqLworCisvKgorICogbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0 aWNzLiAKKyAqIHBlciB2YXAgcmF0ZWN0bCBzZWV0aW5nIG11c3Qgc3RhcnQgd2l0aCB0aGlzIGNv bW1vbiBzdGF0ZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9yY19zdGF0IHsKKwl1aW50MzJfdCBp cnNfY2FwYWJpbGl0aWVzOwkJLyogaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mZmVyZWQgdG8gcmMg Ki8KKworCS8qIHJhdGVjdGwgc3RhdGlzdGljcyAqLworCXVpbnQzMl90IGlyc190eGNudDsKKwl1 aW50MzJfdCBpcnNfZmFpbGNudDsKKwl1aW50MzJfdCBpcnNfcmV0cnljbnQ7CisJdWludDMyX3Qg aXJzX3Nob3J0cmV0cnk7CisJdWludDMyX3QgaXJzX2xvbmdyZXRyeTsKK307CisKKyNkZWZpbmUg SUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKSBcCisJKChzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0 YXQgKikoKF92YXApLT5pdl9ycykpCisKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQ X01SUihfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3ZhcCktPmlyc19jYXBhYmls aXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSKQorI2RlZmluZQlJRUVFODAyMTFfUkFU RUNUTF9IQVNDQVBfTVJSUFJPVChfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3Zh cCktPmlyc19jYXBhYmlsaXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSUFJPVCkKKyNk ZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4oX3ZhcCkgXAorCShJRUVF ODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgwMjExX1JB VEVDVExfQ0FQX01VTFRYQ0hBSU4pCisKIHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCB7CiAJY29u c3QgY2hhciAqaXJfbmFtZTsKIAlpbnQJKCppcl9hdHRhY2gpKGNvbnN0IHN0cnVjdCBpZWVlODAy MTF2YXAgKik7CiAJdm9pZAkoKmlyX2RldGFjaCkoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq KTsKLQl2b2lkCSgqaXJfaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKKwl2b2lkCSgqaXJf aW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiAJdm9pZAkoKmlyX2RlaW5p dCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIAl2b2lkCSgqaXJfbm9kZV9pbml0KShzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKik7CiAJdm9pZAkoKmlyX25vZGVfZGVpbml0KShzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKik7CiAJaW50CSgqaXJfcmF0ZSkoc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZv aWQgKiwgdWludDMyX3QpOworCXZvaWQJKCppcl9yYXRlcykoc3RydWN0IGllZWU4MDIxMV9ub2Rl ICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgqaXJfdHhfY29tcGxldGUp KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLQkgICAgCQkJICBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX25vZGUgKiwgaW50LAotCSAgICAJCQkgIHZvaWQgKiwgdm9pZCAqKTsKKwkgICAgCQkJ ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZv ICopOwogCXZvaWQJKCppcl90eF91cGRhdGUpKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwK IAkgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosCiAJICAgIAkJCXZvaWQgKiwg dm9pZCAqLCB2b2lkICopOwogCXZvaWQJKCppcl9zZXRpbnRlcnZhbCkoY29uc3Qgc3RydWN0IGll ZWU4MDIxMXZhcCAqLCBpbnQpOworCXZvaWQJKCppcl9zdGF0cykoY29uc3Qgc3RydWN0IGllZWU4 MDIxMXZhcCAqKTsKIH07CiAKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50LCBj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVjdGwgKik7CiB2b2lkCWllZWU4MDIxMV9yYXRlY3Rs X3VucmVnaXN0ZXIoaW50KTsKLXZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVl ZTgwMjExdmFwICopOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAy MTF2YXAgKiwgdWludDMyX3QpOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9zZXQoc3RydWN0IGll ZWU4MDIxMXZhcCAqLCBpbnQpOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9jb21wbGV0ZV9yY2Zs YWdzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCAKKwkJCQkJCXN0cnVjdCBpZWVlODAyMTFfcmNf aW5mbyopOwogCiBNQUxMT0NfREVDTEFSRShNXzgwMjExX1JBVEVDVEwpOwogCkBAIC03NCw2ICsx NjQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAK IAl2YXAtPml2X3JhdGUtPmlyX25vZGVfaW5pdChuaSk7CisJSUVFRTgwMjExX0RQUklOVEYodmFw LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IG5ldDgwMjExIHJhdGVjdGwgbm9kZSBp bml0ZWQuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCkBAIC04Miw2 ICsxNzQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7 CiAKIAl2YXAtPml2X3JhdGUtPmlyX25vZGVfZGVpbml0KG5pKTsKKwlJRUVFODAyMTFfRFBSSU5U Rih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCSIlczogbmV0ODAyMTEgcmF0ZWN0bCBu b2RlIGRlaW5pdGVkLlxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IF9faW5saW5lCkBA IC05MywxMCArMTg3LDI2IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFf cmF0ZWN0bF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjEx X3JjX2luZm8gKnJjX2luZm8pCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0g bmktPm5pX3ZhcDsKKworCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNU TF9JTkZPX0FHR1IpIAorCQlyY19pbmZvLT5pcmlfZnJhbWVsZW4gPSAwOworCisJSUVFRTgwMjEx X0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IGZpbmQgcmF0ZSBz ZXRzIGZvciAlc2FnZ3JlZ2F0aW9uIHNjZW5hcmlvLlxuIiwgX19mdW5jX18sIAorCQkJKHJjX2lu Zm8tPmlyaV9mbGFncyAmIElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUik/ICIiIDogIm5vbi0i KTsKKworCXZhcC0+aXZfcmF0ZS0+aXJfcmF0ZXMobmksIHJjX2luZm8pOworCWllZWU4MDIxMV9y YXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3MobmksIHJjX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBf X2lubGluZQogaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4 MDIxMXZhcCAqdmFwLAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBz dGF0dXMsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qgc3RydWN0IGllZWU4MDIx MV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQogewotCXZhcC0+ aXZfcmF0ZS0+aXJfdHhfY29tcGxldGUodmFwLCBuaSwgc3RhdHVzLCBhcmcxLCBhcmcyKTsKKwl2 YXAtPml2X3JhdGUtPmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHJjX2luZm8pOwogfQogCiBzdGF0 aWMgdm9pZCBfX2lubGluZQpAQCAtMTE1LDMgKzIyNSwxMzUgQEAKIAkJcmV0dXJuOwogCXZhcC0+ aXZfcmF0ZS0+aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0YXRpYyB2b2lkIF9f aW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFw ICp2YXApCit7CisJcHJpbnRmKCJcblslc106IG5ldDgwMjExIHJhdGVjdGwgc3RhdGlzdGljcyAo JXMpXG4iLCAKKwkJCXZhcC0+aXZfaWZwLT5pZl94bmFtZSwgdmFwLT5pdl9yYXRlLT5pcl9uYW1l KTsKKwlpZiAodmFwLT5pdl9yYXRlLT5pcl9zdGF0cyA9PSBOVUxMKQorCQlyZXR1cm47CisJdmFw LT5pdl9yYXRlLT5pcl9zdGF0cyh2YXApOworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVl ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p KQoreworCXJldHVybiBuaS0+bmlfY2h3ID09IDQwOworfQorCitzdGF0aWMgaW50IF9faW5saW5l CitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc2hvcnRnaShjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCisJ aWYgKG5pLT5uaV9jaHcgPT0gNDAgJiYKKwkJaWMtPmljX2h0Y2FwcyAmIElFRUU4MDIxMV9IVENB UF9TSE9SVEdJNDAgJiYKKwkJbmktPm5pX2h0Y2FwICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0k0 MCkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisKKwlpZiAobmktPm5pX2NodyA9 PSAyMCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0kyMCAmJgor CQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIwKQorCQlyZXR1cm4gSUVF RTgwMjExX1JBVEVDVExfVFJVRTsKKworCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9GQUxTRTsK K30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMo Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExY29t ICppYyA9IG5pLT5uaV9pYzsKKworCWlmIChpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQ X1RYU1RCQyAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfUlhTVEJDXzFTVFJF QU0gJiYKKwkJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4obmktPm5pX3ZhcCkp CisJCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9UUlVFOworCQorCXJldHVybiBJRUVFODAyMTFf UkFURUNUTF9GQUxTRTsKK30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVj dGxfbm9kZV9pczExbihjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWlmIChu aS0+bmlfY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCWlmIChuaS0+bmlfY2hhbiA9PSBJ RUVFODAyMTFfQ0hBTl9BTllDKQorCQlyZXR1cm4gKDApOworCXJldHVybiAoSUVFRTgwMjExX0lT X0NIQU5fSFQobmktPm5pX2NoYW4pKTsKK30KKworX19pbmxpbmUgc3RhdGljIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfcmF0ZXNldCAqCitpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChjb25z dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf cmF0ZXNldCAqcnMgPSBOVUxMOworCS8qIDExbiBvciBub3Q/IFBpY2sgdGhlIHJpZ2h0IHJhdGVz ZXQgKi8KKwlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkpIHsKKwkJSUVFRTgw MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6 IDExbiBub2RlIiwgX19mdW5jX18pOworCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQg KikgJm5pLT5uaV9odHJhdGVzOworCX0gZWxzZSB7CisJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92 YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkgICAgIiVzOiBub24tMTFuIG5vZGUi LCBfX2Z1bmNfXyk7CisJCXJzID0gJm5pLT5uaV9yYXRlczsKKwl9CisJcmV0dXJuIHJzOworfQor CitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfdXBkYXRlX3N0YXQoY29u c3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jj X2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVF RTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX3R4Y250ICs9IHJjX2luZm8tPmly aV90eGNudDsKKwlpcnMtPmlyc19mYWlsY250ICs9IHJjX2luZm8tPmlyaV9mYWlsY250OworCWly cy0+aXJzX3JldHJ5Y250ICs9IHJjX2luZm8tPmlyaV9yZXRyeWNudDsKKwlpcnMtPmlyc19zaG9y dHJldHJ5ICs9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCWlycy0+aXJzX2xvbmdyZXRyeSAr PSByY19pbmZvLT5pcmlfbG9uZ3JldHJ5OworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVl ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p bmZvLAorCQl1aW50OF90IHR4Y250LCB1aW50OF90IGZhaWxjbnQsIHVpbnQzMl90IGZyYW1lbGVu LAorCQl1aW50OF90IHNob3J0cmV0cnksIHVpbnQ4X3QgbG9uZ3JldHJ5LAorCQl1aW50OF90IGZp bmFsdHNpLCB1aW50OF90IHR4cmF0ZSkKK3sKKwlyY19pbmZvLT5pcmlfdHhjbnQgPSB0eGNudDsK KwlyY19pbmZvLT5pcmlfZmFpbGNudCA9IGZhaWxjbnQ7CisJcmNfaW5mby0+aXJpX29rY250ID0g dHhjbnQgLSBmYWlsY250OworCXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGZyYW1lbGVuOworCXJj X2luZm8tPmlyaV9zaG9ydHJldHJ5ID0gc2hvcnRyZXRyeTsKKwlyY19pbmZvLT5pcmlfbG9uZ3Jl dHJ5ID0gbG9uZ3JldHJ5OworCXJjX2luZm8tPmlyaV9yZXRyeWNudCA9IHNob3J0cmV0cnkgKyBs b25ncmV0cnk7CisJcmNfaW5mby0+aXJpX2ZpbmFsdHNpID0gZmluYWx0c2k7CisJcmNfaW5mby0+ aXJpX3R4cmF0ZSA9IHR4cmF0ZTsKK30KKworX19pbmxpbmUgc3RhdGljIHN0cnVjdCBpZWVlODAy MTFfcmNfaW5mbyAqCitpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKm5pLAorCQlzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbV90YWcgKm10YWc7 CisKKyAgICBtdGFnID0gbV90YWdfbG9jYXRlKG0sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5F VDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKworCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAs IElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkiJXM6ICVzcmF0ZWN0bCBtYnVmIHRhZyBm b3VuZC5cbiIsIF9fZnVuY19fLCAKKwkJCShOVUxMID09IG10YWc/ICJubyAiOiIiKSk7CithZ2Fp bjoKKwlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCW10YWcgPSBtX3RhZ19hbGxvYyhNVEFHX0FCSV9O RVQ4MDIxMSwgTkVUODAyMTFfVEFHX1JBVEVDVEwsCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAy MTFfcmNfaW5mbyksIE1fTk9XQUlUKTsKKwkJaWYgKE5VTEwgPT0gbXRhZykgeworCQkJSUVFRTgw MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVz OiBjYW4ndCBhbGxvYyBtYnVmIHRhZyBmb3IgcmF0ZWN0bC5cbiIsIF9fZnVuY19fKTsKKwkJCWdv dG8gYWdhaW47CisJCX0KKwkJYnplcm8obXRhZyArIDEsIG10YWctPm1fdGFnX2xlbik7CisJCW1f dGFnX3ByZXBlbmQobSwgbXRhZyk7CisJfQorCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9yY19p bmZvKikobXRhZyArIDEpOworfQorCisjZW5kaWYKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9m cmVlYnNkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkocmV2 aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkod29ya2luZyBj b3B5KQpAQCAtMjYyLDcgKzI2Miw5IEBACiAJCSJkcml2ZXJfY2FwcyIsIENUTEZMQUdfUlcsICZ2 YXAtPml2X2NhcHMsIDAsCiAJCSJkcml2ZXIgY2FwYWJpbGl0aWVzIik7CiAjaWZkZWYgSUVFRTgw MjExX0RFQlVHCisJaWVlZTgwMjExX2RlYnVnIHw9IChJRUVFODAyMTFfTVNHX1JBVEVDVEx8SUVF RTgwMjExX01TR19OT0RFfElFRUU4MDIxMV9NU0dfU0NBTik7CiAJdmFwLT5pdl9kZWJ1ZyA9IGll ZWU4MDIxMV9kZWJ1ZzsKKwlpZl9wcmludGYoaWZwLCAiJXM6IGl2X2RlYnVnPTB4JTA4eFxuIiwg X19mdW5jX18sIHZhcC0+aXZfZGVidWcpOwogCVNZU0NUTF9BRERfVUlOVChjdHgsIFNZU0NUTF9D SElMRFJFTihvaWQpLCBPSURfQVVUTywKIAkJImRlYnVnIiwgQ1RMRkxBR19SVywgJnZhcC0+aXZf ZGVidWcsIDAsCiAJCSJjb250cm9sIGRlYnVnZ2luZyBwcmludGZzIik7CkluZGV4OiBuZXQ4MDIx MS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgw MjExX3JhdGVjdGxfbm9uZS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9pZWVlODAy MTFfcmF0ZWN0bF9ub25lLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwyNiBAQAogCiAj aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxf bm9uZS5oPgogCiBzdGF0aWMgdm9pZAotbm9uZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh cCkKK25vbmVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxp dGllcykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5vbmU7CisKKwlLQVNTRVJUKHZhcC0+ aXZfcnMgPT0gTlVMTCwgKCIlcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMiLCBfX2Z1bmNfXykpOwor CisJbm9uZSA9IHZhcC0+aXZfcnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbm9u ZSksCisJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAobm9uZSA9 PSBOVUxMKSB7CisJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVj dGwgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNf c3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBh YmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKKwkvKiAuLi4gKi8KIH0KIAogc3RhdGljIHZvaWQK QEAgLTU5LDYgKzc1LDI1IEBACiBzdGF0aWMgdm9pZAogbm9uZV9ub2RlX2luaXQoc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlf dmFwOworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uZSA9IHZhcC0+aXZfcnM7CisJc3RydWN0 IGllZWU4MDIxMV9ub25lX25vZGUgKm5vbjsKKworCWlmIChuaS0+bmlfcmN0bHMgPT0gTlVMTCkg eworCQluaS0+bmlfcmN0bHMgPSBub24gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFf bm9uZV9ub2RlKSwKKwkJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJ aWYgKG5vbiA9PSBOVUxMKSB7CisJCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBh bGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJCSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVy bjsKKwkJfQorCX0gZWxzZQorCQlub24gPSBuaS0+bmlfcmN0bHM7CisKKwlub24tPm5vbl9ub25l ID0gbm9uZTsKKworCS8qIC4uLiAqLworCQogCW5pLT5uaV90eHJhdGUgPSBuaS0+bmlfcmF0ZXMu cnNfcmF0ZXNbMF0gJiBJRUVFODAyMTFfUkFURV9WQUw7CiB9CiAKQEAgLTc4LDggKzExMyw3IEBA CiAKIHN0YXRpYyB2b2lkCiBub25lX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2 YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgb2ssCi0g ICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCiB7CiB9 CiAKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5l dDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIx MS9pZWVlODAyMTFfcnNzYWRhcHQuYwkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAog CQkJCSAgICBwYXJtIyNfZGVub20pCiAKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3NldGludGVydmFs KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCXJzc2FkYXB0 X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKK3N0YXRpYyB2b2lkCXJzc2FkYXB0X2luaXQo c3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9k ZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3VwZGF0 ZXN0YXRzKHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqKTsKIHN0YXRpYyB2b2lkCXJz c2FkYXB0X25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CkBAIC04NCw4ICs4NCw3 IEBACiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9yYWlzZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfcnNz YWRhcHRfbm9kZSAqLAogCQkJaW50LCBpbnQpOwogc3RhdGljIHZvaWQJcnNzYWRhcHRfdHhfY29t cGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJCWNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqLCBpbnQsCi0JCQl2b2lkICosIHZvaWQgKik7CisgICAgCQkJY29uc3Qg c3RydWN0IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0 YXRpYyB2b2lkCXJzc2FkYXB0X3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJ CQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICosIHN0cnVjdCBzeXNjdGxfb2lkICopOwogCkBAIC0x MjEsNyArMTIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXJzc2FkYXB0X2luaXQoc3RydWN0IGll ZWU4MDIxMXZhcCAqdmFwKQorcnNzYWRhcHRfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAs IHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3Jzc2FkYXB0ICpy czsKIApAQCAtMTM0LDYgKzEzMywxMCBAQAogCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3Vs ZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7CiAJCXJldHVybjsKIAl9CisKKwlzdHJ1 Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7 CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOworCiAJcnMtPnZhcCA9IHZh cDsKIAlyc3NhZGFwdF9zZXRpbnRlcnZhbCh2YXAsIDUwMCAvKiBtc2VjcyAqLyk7CiAJcnNzYWRh cHRfc3lzY3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsKQEAgLTMw NywxMCArMzEwLDExIEBACiAKIHN0YXRpYyB2b2lkCiByc3NhZGFwdF90eF9jb21wbGV0ZShjb25z dCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCi0gICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9u b2RlICpuaSwgaW50IHN1Y2Nlc3MsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qg c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p bmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqcmEgPSBuaS0+bmlfcmN0 bHM7Ci0JaW50IHBrdGxlbiA9ICooaW50ICopYXJnMSwgcnNzaSA9ICooaW50ICopYXJnMjsKKwkv KmludCBwa3RsZW4gPSAqKGludCAqKWFyZzEsIHJzc2kgPSAqKGludCAqKWFyZzI7Ki8KKwlpbnQg cGt0bGVuID0gMCwgcnNzaSA9IDAsIHN1Y2Nlc3MgPSAwOyAvKiBqdXN0IG1ha2UgaXQgY29tcGls ZWQuIHFjYyAqLwogCiAJaWYgKHN1Y2Nlc3MpIHsKIAkJcmEtPnJhX25vaysrOwpJbmRleDogbmV0 ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4 MDIxMV9yY19zYW1wbGUuYwkocmV2aXNpb24gMCkKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yY19z YW1wbGUuYwkocmV2aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDExNDEgQEAKKy8qICRGcmVlQlNE OiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9yYXRlL3NhbXBsZS9zYW1wbGUuYyAyNDg1NzMgMjAxMy0w Mi0yNyAwNDozMzowNlogYWRyaWFuICQqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBK b2huIEJpY2tldAorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZy ZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQ UkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSAib3B0X3dsYW4uaCIKKworI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxz eXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNj dGwuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgor CisjaWZkZWYgSU5FVAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0 L2lmX2V0aGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIu aD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfaHQuaD4KKyNpbmNsdWRlIDxuZXQ4MDIx MS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yY19z YW1wbGUuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQu aD4KKworc3RhdGljIHZvaWQJc2FtcGxlX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50 MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfZGVpbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7 CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsK K3N0YXRpYyB2b2lkCXNhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7 CitzdGF0aWMgaW50CXNhbXBsZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICos IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkCXNhbXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3Qg aWVlZTgwMjExdmFwICosCisgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIGlu dCwgCisJCQl2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfdXBkYXRlKGNv bnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKwkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf bm9kZSAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkCXNhbXBsZV9zZXRp bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICosIGludCk7CisKKy8qIG51bWJlciBv ZiByZWZlcmVuY2VzIGZyb20gbmV0ODAyMTEgbGF5ZXIgKi8KK3N0YXRpYwlpbnQgbnJlZnMgPSAw OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlY3RsIHNhbXBsZSA9IHsKKwku aXJfbmFtZQk9ICJzYW1wbGUiLAorCS5pcl9hdHRhY2gJPSBOVUxMLAorCS5pcl9kZXRhY2gJPSBO VUxMLAorCS5pcl9pbml0CT0gc2FtcGxlX2luaXQsCisJLmlyX2RlaW5pdAk9IHNhbXBsZV9kZWlu aXQsCisJLmlyX25vZGVfaW5pdAk9IHNhbXBsZV9ub2RlX2luaXQsCisJLmlyX25vZGVfZGVpbml0 CT0gc2FtcGxlX25vZGVfZGVpbml0LAorCS5pcl9yYXRlCT0gc2FtcGxlX3JhdGUsCisJLmlyX3Jh dGVzCT0gc2FtcGxlX3JhdGVzLAorCS5pcl90eF9jb21wbGV0ZQk9IHNhbXBsZV90eF9jb21wbGV0 ZSwKKwkuaXJfdHhfdXBkYXRlCT0gc2FtcGxlX3R4X3VwZGF0ZSwKKwkuaXJfc2V0aW50ZXJ2YWwJ PSBzYW1wbGVfc2V0aW50ZXJ2YWwsCit9OworSUVFRTgwMjExX1JBVEVDVExfTU9EVUxFKHNhbXBs ZSwgMSk7CitJRUVFODAyMTFfUkFURUNUTF9BTEcoc2FtcGxlLCBJRUVFODAyMTFfUkFURUNUTF9T QU1QTEUsIHNhbXBsZSk7CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfaW5pdChzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjEx X3NhbXBsZSAqc2FtcGxlOworCisJS0FTU0VSVCh2YXAtPml2X3JzID09IE5VTEwsICgiJXMgY2Fs bGVkIG11bHRpcGxlIHRpbWVzIiwgX19mdW5jX18pKTsKKworCXNhbXBsZSA9IHZhcC0+aXZfcnMg PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlKSwKKwkgICAgTV84MDIxMV9S QVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCWlmIChzYW1wbGUgPT0gTlVMTCkgeworCQlpZl9w cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7 CisJCXJldHVybjsKKwl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVF ODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJp bGl0aWVzOworCisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3JhdGUgPSA3NTsJCS8qIGV3bWEg cGVyY2VudGFnZSAoWzAuLjk5XSkgKi8KKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfbWlucGFj a2V0cyA9IDEwMCAvICgxMDAgLSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSk7CisJc2Ft cGxlLT5zYW1wbGVfcmF0ZSA9IDEwOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmIHR4IHJhdGVzICov CisJc2FtcGxlLT5zYW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAzOwkvKiB0aHJlc2hv bGQgZm9yIHJhdGUgc2FtcGxpbmcqLworCXNhbXBsZS0+c2FtcGxlX3N0YWxlX2ZhaWx1cmVfdGlt ZW91dCA9IDEwICogaHo7CS8qIDEwIHNlY29uZHMgKi8KKwlzYW1wbGUtPnNhbXBsZV9taW5fc3dp dGNoID0gaHo7CQkJLyogMSBzZWNvbmQgKi8KKwlzYW1wbGVfc2V0aW50ZXJ2YWwodmFwLCA1MDAg LyogbXMgKi8pOyAJLyogYWN0dWFsbHkgZG8gbm90aGluZyAqLworCXNhbXBsZV9zeXNjdGxhdHRh Y2godmFwLCB2YXAtPml2X3N5c2N0bCwgdmFwLT5pdl9vaWQpOworfQorCitzdGF0aWMgdm9pZAor c2FtcGxlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJZnJlZSh2YXAtPml2 X3JzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1 bGUgKm1ycl9zY2hlZHVsZXNbSUVFRTgwMjExX01PREVfTUFYKzJdID0geworCU5VTEwsCQkvKiBJ RUVFODAyMTFfTU9ERV9BVVRPICovCisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfMTFB ICovCisJc2VyaWVzXzExZywJLyogSUVFRTgwMjExX01PREVfMTFCICovCisJc2VyaWVzXzExZywJ LyogSUVFRTgwMjExX01PREVfMTFHICovCisJTlVMTCwJCS8qIElFRUU4MDIxMV9NT0RFX0ZIICov CisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfVFVSQk9fQSAqLworCXNlcmllc18xMWcs CS8qIElFRUU4MDIxMV9NT0RFX1RVUkJPX0cgKi8KKwlzZXJpZXNfMTFhLAkvKiBJRUVFODAyMTFf TU9ERV9TVFVSQk9fQSAqLworCXNlcmllc18xMW5hLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5BICov CisJc2VyaWVzXzExbmcsCS8qIElFRUU4MDIxMV9NT0RFXzExTkcgKi8KKwlzZXJpZXNfaGFsZiwJ LyogSUVFRTgwMjExX01PREVfSEFMRiAqLworCXNlcmllc19xdWFydGVyLAkvKiBJRUVFODAyMTFf TU9ERV9RVUFSVEVSICovCit9OworCitzdGF0aWMgdm9pZAorc2FtcGxlX25vZGVfaW5pdChzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworI2RlZmluZQlSQVRFKF9peCkJKG5pLT5uaV9yYXRl cy5yc19yYXRlc1soX2l4KV0gJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCURPVDExUkFU RShfaXgpCShydC0+aW5mb1soX2l4KV0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQor I2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIx MV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCXN0 cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOworCXN0cnVjdCBpZWVl ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9y YXRlX3RhYmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1 cmNoYW4pOworCWVudW0gaWVlZTgwMjExX3BoeW1vZGUgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFu Mm1vZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJaW50IHgsIHksIHJpeDsKKworCWlmIChu aS0+bmlfcmN0bHMgPT0gTlVMTCkgeworCQluaS0+bmlfcmN0bHMgPSBzYW4gPSBtYWxsb2Moc2l6 ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUpLAorCQkgICAgTV84MDIxMV9SQVRFQ1RM LCBNX05PV0FJVHxNX1pFUk8pOworCQlpZiAoc2FuID09IE5VTEwpIHsKKwkJCWlmX3ByaW50Zih2 YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHBlci1ub2RlIHJhdGVjdGwgIgorCQkJICAgICJz dHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCXNhbiA9IG5pLT5uaV9y Y3RsczsKKwkKKwlzYW4tPnNhbl9zYW1wbGUgPSBzYW1wbGU7CisKKwlLQVNTRVJUKHJ0ICE9IE5V TEwsICgibm8gcmF0ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c2NoZWQg PSBtcnJfc2NoZWR1bGVzW2N1cm1vZGVdOworCUtBU1NFUlQoc2FuLT5zY2hlZCAhPSBOVUxMLCAo Im5vIG1yciBzY2hlZHVsZSBmb3IgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c3RhdGlj X3JpeCA9IC0xOworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7CisKKwkvKgorCSAqIENv bnN0cnVjdCBhIGJpdG1hc2sgb2YgdXNhYmxlIHJhdGVzLiAgVGhpcyBoYXMgYWxsCisJICogbmVn b3RpYXRlZCByYXRlcyBtaW51cyB0aG9zZSBtYXJrZWQgYnkgdGhlIGhhbCBhcworCSAqIHRvIGJl IGlnbm9yZWQgZm9yIGRvaW5nIHJhdGUgY29udHJvbC4KKwkgKi8KKwlzYW4tPnJhdGVtYXNrID0g MDsKKworCS8qIE1DUyByYXRlcyAqLworCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E RV9IVCkgeworCQlmb3IgKHggPSAwOyB4IDwgbmktPm5pX2h0cmF0ZXMucnNfbnJhdGVzOyB4Kysp IHsKKwkJCXJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbTUNTKHgpXTsKKwkJCWlmIChyaXggPT0g MHhmZikKKwkJCQljb250aW51ZTsKKwkJCS8qIHNraXAgcmF0ZXMgbWFya2VkIGJyb2tlbiBieSBo YWwgKi8KKwkJCWlmICghcnQtPmluZm9bcml4XS52YWxpZCkKKwkJCQljb250aW51ZTsKKwkJCUtB U1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkJICAgICgibWNzICV1IGhhcyByaXggJWQi LCBNQ1MoeCksIHJpeCkpOworCQkJc2FuLT5yYXRlbWFzayB8PSAodWludDY0X3QpIDE8PHJpeDsK KwkJfQorCX0KKworCS8qIExlZ2FjeSByYXRlcyAqLworCWZvciAoeCA9IDA7IHggPCBuaS0+bmlf cmF0ZXMucnNfbnJhdGVzOyB4KyspIHsKKwkJcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtSQVRF KHgpXTsKKwkJaWYgKHJpeCA9PSAweGZmKQorCQkJY29udGludWU7CisJCS8qIHNraXAgcmF0ZXMg bWFya2VkIGJyb2tlbiBieSBoYWwgKi8KKwkJaWYgKCFydC0+aW5mb1tyaXhdLnZhbGlkKQorCQkJ Y29udGludWU7CisJCUtBU1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkgICAgKCJyYXRl ICV1IGhhcyByaXggJWQiLCBSQVRFKHgpLCByaXgpKTsKKwkJc2FuLT5yYXRlbWFzayB8PSAodWlu dDY0X3QpIDE8PHJpeDsKKwl9CisKKwlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tFVF9TSVpFX0JJ TlM7IHkrKykgeworCQlpbnQgc2l6ZSA9IGJpbl90b19zaXplKHkpOworCQl1aW50NjRfdCBtYXNr OworCisJCXNhbi0+cGFja2V0c19zZW50W3ldID0gMDsKKwkJc2FuLT5jdXJyZW50X3NhbXBsZV9y aXhbeV0gPSAtMTsKKwkJc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0gPSAwOworCQkvKiBYWFggc3Rh cnQgd2l0aCBmaXJzdCB2YWxpZCByYXRlICovCisJCXNhbi0+Y3VycmVudF9yaXhbeV0gPSBmZnMo c2FuLT5yYXRlbWFzayktMTsKKwkJCisJCS8qCisJCSAqIEluaXRpYWxpemUgdGhlIHN0YXRpc3Rp Y3MgYnVja2V0czsgdGhlc2UgYXJlCisJCSAqIGluZGV4ZWQgYnkgdGhlIHJhdGUgY29kZSBpbmRl eC4KKwkJICovCisJCWZvciAocml4ID0gMCwgbWFzayA9IHNhbi0+cmF0ZW1hc2s7IG1hc2sgIT0g MDsgcml4KyssIG1hc2sgPj49IDEpIHsKKwkJCWlmICgobWFzayAmIDEpID09IDApCQkvKiBub3Qg YSB2YWxpZCByYXRlICovCisJCQkJY29udGludWU7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMgPSAwOwor CQkJc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFsX3BhY2tldHMgPSAwOworCQkJc2FuLT5zdGF0c1t5 XVtyaXhdLnBhY2tldHNfYWNrZWQgPSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgg PSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmV3bWFfcGN0ID0gMDsKKwkJCQorCQkJc2FuLT5z dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZSA9CisJCQkgICAgY2FsY191c2Vjc191bmljYXN0 X3BhY2tldCh2YXAsIHNpemUsIHJpeCwgMCwgMCwKKwkJCSAgICAobmktPm5pX2NodyA9PSA0MCkp OworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmF2ZXJhZ2VfdHhfdGltZSA9CisJCQkgICAgc2FuLT5z dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZTsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgdmlz aWJsZSBiaXQtcmF0ZSAqLworCWlmIChzYW4tPnN0YXRpY19yaXggIT0gLTEpCisJCW5pLT5uaV90 eHJhdGUgPSBET1QxMVJBVEUoc2FuLT5zdGF0aWNfcml4KTsKKwllbHNlCisJCW5pLT5uaV90eHJh dGUgPSBSQVRFKDApOworI3VuZGVmIFJBVEUKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBNQ1MK K30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pKQoreworCWZyZWUobmktPm5pX3JjdGxzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitz dGF0aWMgaW50Citkb3QxMXJhdGUoY29uc3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LCBpbnQg cml4KQoreworCWlmIChyaXggPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJ0LT5pbmZvW3Jp eF0ucGh5ID09IElFRUU4MDIxMV9UX0hUID8KKwkgICAgcnQtPmluZm9bcml4XS5kb3QxMVJhdGUg OiAocnQtPmluZm9bcml4XS5kb3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIC8gMjsKK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKgorZG90MTFyYXRlX2xhYmVsKGNvbnN0IGllZWU4MDIxMV9y YXRlX3RhYmxlICpydCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuICIiOwor CXJldHVybiBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/ICJNQ1MiIDogIk1i ICI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJpeCB3aXRoIHRoZSBsb3dlc3QgYXZlcmFnZV90 eF90aW1lLAorICogb3IgLTEgaWYgYWxsIHRoZSBhdmVyYWdlX3R4X3RpbWVzIGFyZSAwLgorICov CitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX2Jlc3RfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKm5pLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorICAg IGludCBzaXplX2JpbiwgaW50IHJlcXVpcmVfYWNrZWRfYmVmb3JlKQoreworCXN0cnVjdCBpZWVl ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKyAgICBpbnQgYmVzdF9yYXRl X3JpeCwgYmVzdF9yYXRlX3R0LCBiZXN0X3JhdGVfcGN0OworCXVpbnQ2NF90IG1hc2s7CisJaW50 IHJpeCwgdHQsIHBjdDsKKworICAgIGJlc3RfcmF0ZV9yaXggPSAwOworICAgIGJlc3RfcmF0ZV90 dCA9IDA7CisJYmVzdF9yYXRlX3BjdCA9IDA7CisKKwlmb3IgKG1hc2sgPSBzYW4tPnJhdGVtYXNr LCByaXggPSAwOyBtYXNrICE9IDA7IG1hc2sgPj49IDEsIHJpeCsrKSB7CisJCWlmICgobWFzayAm IDEpID09IDApCQkvKiBub3QgYSBzdXBwb3J0ZWQgcmF0ZSAqLworCQkJY29udGludWU7CisKKwkJ LyogRG9uJ3QgcGljayBhIG5vbi1IVCByYXRlIGZvciBhIEhUIG5vZGUgKi8KKwkJaWYgKChuaS0+ bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChydC0+aW5mb1tyaXhdLnBo eSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdHQgPSBzYW4t PnN0YXRzW3NpemVfYmluXVtyaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaWYgKHR0IDw9IDAgfHwK KwkJICAgIChyZXF1aXJlX2Fja2VkX2JlZm9yZSAmJgorCQkgICAgICFzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLnBhY2tldHNfYWNrZWQpKQorCQkJY29udGludWU7CisKKwkJLyogQ2FsY3VsYXRl IHBlcmNlbnRhZ2UgaWYgcG9zc2libGUgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp eF0udG90YWxfcGFja2V0cyA+IDApIHsKKwkJCXBjdCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp eF0uZXdtYV9wY3Q7CisJCX0gZWxzZSB7CisJCQkvKiBYWFggZm9yIG5vdywgYXNzdW1lIDk1JSBv ayAqLworCQkJcGN0ID0gOTU7CisJCX0KKworCQkvKiBkb24ndCB1c2UgYSBiaXQtcmF0ZSB0aGF0 IGhhcyBiZWVuIGZhaWxpbmcgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcyA+IDMpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgSFQs IERvbid0IHVzZSBhIGJpdCByYXRlIHRoYXQgaXMgbXVjaCBtb3JlCisJCSAqIGxvc3N5IHRoYW4g dGhlIGJlc3QuCisJCSAqCisJCSAqIFhYWCB0aGlzIGlzbid0IG9wdGltYWw7IGl0J3MganVzdCBk ZXNpZ25lZCB0bworCQkgKiBlbGltaW5hdGUgcmF0ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgb2J2 aW91c2x5CisJCSAqIHdvcnNlLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIx MV9OT0RFX0hUKSB7CisJCQlpZiAoYmVzdF9yYXRlX3BjdCA+IChwY3QgKyA1MCkpCisJCQkJY29u dGludWU7CisJCX0KKworCQkvKgorCQkgKiBGb3Igbm9uLU1DUyByYXRlcywgdXNlIHRoZSBjdXJy ZW50IGF2ZXJhZ2UgdHh0aW1lIGZvcgorCQkgKiBjb21wYXJpc29uLgorCQkgKi8KKwkJaWYgKCEg KG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkgeworCQkJaWYgKGJlc3RfcmF0ZV90 dCA9PSAwIHx8IHR0IDw9IGJlc3RfcmF0ZV90dCkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0Owor CQkJCWJlc3RfcmF0ZV9yaXggPSByaXg7CisJCQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0K KwkJfQorCisJCS8qCisJCSAqIFNpbmNlIDIgc3RyZWFtIHJhdGVzIGhhdmUgc2xpZ2h0bHkgaGln aGVyIFRYIHRpbWVzLAorCQkgKiBhbGxvdyBhIGxpdHRsZSBiaXQgb2YgbGVld2F5LiBUaGlzIHNo b3VsZCBsYXRlcgorCQkgKiBiZSBhYnN0cmFjdGVkIG91dCBhbmQgcHJvcGVybHkgaGFuZGxlZC4K KwkJICovCisJCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYg KGJlc3RfcmF0ZV90dCA9PSAwIHx8ICh0dCAqIDggPD0gYmVzdF9yYXRlX3R0ICogMTApKSB7CisJ CQkJYmVzdF9yYXRlX3R0ID0gdHQ7CisJCQkJYmVzdF9yYXRlX3JpeCA9IHJpeDsKKwkJCQliZXN0 X3JhdGVfcGN0ID0gcGN0OworCQkJfQorCQl9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChi ZXN0X3JhdGVfdHQgPyBiZXN0X3JhdGVfcml4IDogLTEpOworfQorCisvKgorICogUGljayBhIGdv b2QgInJhbmRvbSIgYml0LXJhdGUgdG8gc2FtcGxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25l LgorICovCitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX3NhbXBsZV9yYXRlKGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfbm9kZSAqbmksIGNvbnN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwgCisJ aW50IHNpemVfYmluKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5mb1tpeF0uZG90 MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoaXgpCQkocnQtPmluZm9b aXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3Nh bXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUg KnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwlpbnQgY3VycmVudF9yaXgsIHJpeDsKKwl1bnNp Z25lZCBjdXJyZW50X3R0OworCXVpbnQ2NF90IG1hc2s7CisJCisJY3VycmVudF9yaXggPSBzYW4t PmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwlpZiAoY3VycmVudF9yaXggPCAwKSB7CisJCS8qIG5v IHN1Y2Nlc3NlcyB5ZXQsIHNlbmQgYXQgdGhlIGxvd2VzdCBiaXQtcmF0ZSAqLworCQkvKiBYWFgg c2hvdWxkIHJldHVybiBNQ1MwIGlmIEhUICovCisJCXJldHVybiAwOworCX0KKworCWN1cnJlbnRf dHQgPSBzYW4tPnN0YXRzW3NpemVfYmluXVtjdXJyZW50X3JpeF0uYXZlcmFnZV90eF90aW1lOwor CisJcml4ID0gc2FuLT5sYXN0X3NhbXBsZV9yaXhbc2l6ZV9iaW5dKzE7CS8qIG5leHQgc2FtcGxl IHJhdGUgKi8KKwltYXNrID0gc2FuLT5yYXRlbWFzayAmfiAoKHVpbnQ2NF90KSAxPDxjdXJyZW50 X3JpeCk7LyogZG9uJ3Qgc2FtcGxlIGN1cnJlbnQgcmF0ZSAqLworCXdoaWxlIChtYXNrICE9IDAp IHsKKwkJaWYgKChtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkgewkvKiBub3QgYSBz dXBwb3J0ZWQgcmF0ZSAqLworCW5leHRyYXRlOgorCQkJaWYgKCsrcml4ID49IHJ0LT5yYXRlQ291 bnQpCisJCQkJcml4ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIGZv bGxvd2luZyBjb2RlIHN0b3BzIHRyeWluZyB0byBzYW1wbGUKKwkJICogbm9uLU1DUyByYXRlcyB3 aGVuIHNwZWFraW5nIHRvIGFuIE1DUyBub2RlLgorCQkgKiBIb3dldmVyLCBhdCBsZWFzdCBmb3Ig Q0NLIHJhdGVzIGluIDIuNEdIeiBtb2RlLAorCQkgKiB0aGUgbm9uLU1DUyByYXRlcyBNQVkgYWN0 dWFsbHkgcHJvdmlkZSBiZXR0ZXIKKwkJICogUEVSIGF0IHRoZSB2ZXJ5IGZhciBlZGdlIG9mIHJl Y2VwdGlvbi4KKwkJICoKKwkJICogSG93ZXZlciEgVW50aWwgYXRoX3JhdGVfZm9ybV9hZ2dyKCkg Z3Jvd3MKKwkJICogc29tZSBsb2dpYyB0byBub3QgZm9ybSBhZ2dyZWdhdGVzIGlmIHRoZQorCQkg KiBzZWxlY3RlZCByYXRlIGlzIG5vbi1NQ1MsIHRoaXMgd29uJ3Qgd29yay4KKwkJICoKKwkJICog U28gZG9uJ3QgZGlzYWJsZSB0aGlzIGNvZGUgdW50aWwgeW91J3ZlIHRhdWdodAorCQkgKiBhdGhf cmF0ZV9mb3JtX2FnZ3IoKSB0byBkcm9wIG91dCBpZiBhbnkgb2YKKwkJICogdGhlIHNlbGVjdGVk IHJhdGVzIGFyZSBub24tTUNTLgorCQkgKi8KKyNpZiAxCisJCS8qIGlmIHRoZSBub2RlIGlzIEhU IGFuZCB0aGUgcmF0ZSBpc24ndCBIVCwgZG9uJ3QgYm90aGVyIHNhbXBsZSAqLworCQlpZiAoKG5p LT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSAmJgorCQkgICAgKHJ0LT5pbmZvW3JpeF0u cGh5ICE9IElFRUU4MDIxMV9UX0hUKSkgeworCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4 KTsKKwkJCWdvdG8gbmV4dHJhdGU7CisJCX0KKyNlbmRpZgorCisJCS8qIHRoaXMgYml0LXJhdGUg aXMgYWx3YXlzIHdvcnNlIHRoYW4gdGhlIGN1cnJlbnQgb25lICovCisJCWlmIChzYW4tPnN0YXRz W3NpemVfYmluXVtyaXhdLnBlcmZlY3RfdHhfdGltZSA+IGN1cnJlbnRfdHQpIHsKKwkJCW1hc2sg Jj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisKKwkJLyog cmFyZWx5IHNhbXBsZSBiaXQtcmF0ZXMgdGhhdCBmYWlsIGEgbG90ICovCisJCWlmIChzYW4tPnN0 YXRzW3NpemVfYmluXVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiBzYW1wbGUtPnNhbXBsZV9t YXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAmJgorCQkgICAgdGlja3MgLSBzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLmxhc3RfdHggPCBzYW1wbGUtPnNhbXBsZV9zdGFsZV9mYWlsdXJlX3RpbWVvdXQp IHsKKwkJCW1hc2sgJj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOwor CQl9CisKKwkJLyoKKwkJICogRm9yIEhULCBvbmx5IHNhbXBsZSBhIGZldyByYXRlcyBvbiBlaXRo ZXIgc2lkZSBvZiB0aGUKKwkJICogY3VycmVudCByaXg7IHRoZXJlJ3MgcXVpdGUgbGlrZWx5IGEg bG90IG9mIHRoZW0uCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVf SFQpIHsKKwkJCWlmIChyaXggPCAoY3VycmVudF9yaXggLSAzKSB8fAorCQkJICAgIHJpeCA+IChj dXJyZW50X3JpeCArIDMpKSB7CisJCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4KTsKKwkJ CQlnb3RvIG5leHRyYXRlOworCQkJfQorCQl9CisKKwkJLyogRG9uJ3Qgc2FtcGxlIG1vcmUgdGhh biAyIHJhdGVzIGhpZ2hlciBmb3IgcmF0ZXMgPiAxMU0gZm9yIG5vbi1IVCByYXRlcyAqLworCQlp ZiAoISAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpKSB7CisJCQlpZiAoRE9UMTFS QVRFKHJpeCkgPiAyKjExICYmIHJpeCA+IGN1cnJlbnRfcml4ICsgMikgeworCQkJCW1hc2sgJj0g figodWludDY0X3QpIDE8PHJpeCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJ CXNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmluXSA9IHJpeDsKKwkJcmV0dXJuIHJpeDsKKwl9 CisJcmV0dXJuIGN1cnJlbnRfcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworfQor CitzdGF0aWMgaW50CitzYW1wbGVfZ2V0X3N0YXRpY19yaXgoY29uc3Qgc3RydWN0IGllZWU4MDIx MV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFURShfaXgpCShuaS0+bmlfcmF0ZXMucnNfcmF0ZXNb KF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0 cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90 YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFu KTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7 CisJaW50IHNyYXRlOworCisJLyogQ2hlY2sgTUNTIHJhdGVzICovCisJZm9yIChzcmF0ZSA9IG5p LT5uaV9odHJhdGVzLnJzX25yYXRlcyAtIDE7IHNyYXRlID49IDA7IHNyYXRlLS0pIHsKKwkJaWYg KE1DUyhzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+cmF0ZUNvZGVUb0lu ZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKworCS8qIENoZWNrIGxlZ2FjeSByYXRlcyAqLworCWZv ciAoc3JhdGUgPSBuaS0+bmlfcmF0ZXMucnNfbnJhdGVzIC0gMTsgc3JhdGUgPj0gMDsgc3JhdGUt LSkgeworCQlpZiAoUkFURShzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+ cmF0ZUNvZGVUb0luZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKwlyZXR1cm4gLTE7CisjdW5kZWYJ UkFURQorI3VuZGVmCU1DUworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3VwZGF0ZV9zdGF0aWNf cml4KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhw YXJhbSAqdHAgPSBuaS0+bmlfdHhwYXJtczsKKworCWlmICh0cCAhPSBOVUxMICYmIHRwLT51Y2Fz dHJhdGUgIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkgeworCQkvKgorCQkgKiBBIGZpeGVk IHJhdGUgaXMgdG8gYmUgdXNlZDsgdWNhc3RyYXRlIGlzIHRoZSBJRUVFIGNvZGUKKwkJICogZm9y IHRoaXMgcmF0ZSAoc2FucyBiYXNpYyBiaXQpLiAgQ2hlY2sgdGhpcyBhZ2FpbnN0IHRoZQorCQkg KiBuZWdvdGlhdGVkIHJhdGUgc2V0IGZvciB0aGUgbm9kZS4gIE5vdGUgdGhlIGZpeGVkIHJhdGUK KwkJICogbWF5IG5vdCBiZSBhdmFpbGFibGUgZm9yIHZhcmlvdXMgcmVhc29ucyBzbyB3ZSBvbmx5 CisJCSAqIHNldHVwIHRoZSBzdGF0aWMgcmF0ZSBpbmRleCBpZiB0aGUgbG9va3VwIGlzIHN1Y2Nl c3NmdWwuCisJCSAqLworCQlzYW4tPnN0YXRpY19yaXggPSBzYW1wbGVfZ2V0X3N0YXRpY19yaXgo bmkpOworCX0gZWxzZSB7CisJCXNhbi0+c3RhdGljX3JpeCA9IC0xOworCX0KK30KKworLyoKKyAq IFBpY2sgYSBub24tSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAqLworc3RhdGljIGludAorc2Ft cGxlX3BpY2tfc2VlZF9yYXRlX2xlZ2FjeShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p LCBpbnQgZnJhbWVMZW4pCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5k b3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw ID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+ bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4 MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWNvbnN0IGlu dCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4ID0gLTE7CisKKwkv KiBubyBwYWNrZXQgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHkgeWV0ICovCisJZm9yIChyaXgg PSBydC0+cmF0ZUNvdW50LTE7IHJpeCA+IDA7IHJpeC0tKSB7CisJCWlmICgoc2FuLT5yYXRlbWFz ayAmICgodWludDY0X3QpIDE8PHJpeCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBTa2lw IEhUIHJhdGVzICovCisJCWlmIChydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFBpY2sgdGhlIGhpZ2hlc3QgcmF0ZSA8PSAzNiBN YnBzCisJCSAqIHRoYXQgaGFzbid0IGZhaWxlZC4KKwkJICovCisJCWlmIChET1QxMVJBVEUocml4 KSA8PSA3MiAmJgorCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2Zh aWx1cmVzID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByaXg7CisjdW5kZWYg RE9UMTFSQVRFCit9CisKKy8qCisgKiBQaWNrIGEgSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAq CisgKiBEb24ndCB1c2UgYW55IG5vbi1IVCByYXRlczsgb25seSBjb25zaWRlciBIVCByYXRlcy4K KyAqLworc3RhdGljIGludAorc2FtcGxlX3BpY2tfc2VlZF9yYXRlX2h0KGNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqbmksIGludCBmcmFtZUxlbikKK3sKKyNkZWZpbmUJTUNTKGl4KQkJKHJ0 LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4 MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2Rl ICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxl ICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOwor CQorCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4 ID0gLTEsIGh0X3JpeCA9IC0xOworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vz c2Z1bGx5IHlldCAqLworCWZvciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgt LSkgeworCQkvKiBTa2lwIHJhdGVzIHdlIGNhbid0IHVzZSAqLworCQlpZiAoKHNhbi0+cmF0ZW1h c2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogS2Vl cCBhIGNvcHkgb2YgdGhlIGxhc3Qgc2VlbiBIVCByYXRlIGluZGV4ICovCisJCWlmIChydC0+aW5m b1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkKKwkJCWh0X3JpeCA9IHJpeDsKKworCQkvKiBT a2lwIG5vbi1IVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgIT0gSUVFRTgwMjEx X1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIGEgbWVkaXVtLXNwZWVkIHJh dGUgcmVnYXJkbGVzcyBvZiBzdHJlYW0gY291bnQKKwkJICogd2hpY2ggaGFzIG5vdCBzZWVuIGFu eSBmYWlsdXJlcy4gSGlnaGVyIHJhdGVzIG1heSBmYWlsOworCQkgKiB3ZSdsbCB0cnkgdGhlbSBs YXRlci4KKwkJICovCisJCWlmICgoKE1DUyhyaXgpICYgMHg3KSA8PSA0KSAmJgorCQkgICAgc2Fu LT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID09IDApIHsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgdGhlIE1DUyByYXRlcyBoYXZlIHN1Y2Nl c3NpdmUgZmFpbHVyZXMsIHJpeCBzaG91bGQgYmUKKwkgKiA+IDA7IG90aGVyd2lzZSB1c2UgdGhl IGxvd2VzdCBNQ1Mgcml4IChob3BlZnVsbHkgTUNTIDAuKQorCSAqLworCXJldHVybiBNQVgocml4 LCBodF9yaXgpOworI3VuZGVmIE1DUworfQorCitzdGF0aWMgaW50CitzYW1wbGVfcmF0ZShzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKm5pLCB2b2lkICphcmcgX191bnVzZWQsIHVpbnQzMl90IGlhcmcg X191bnVzZWQpCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5kb3QxMVJh dGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhpeCkJCShydC0+aW5mb1tpeF0u ZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorI2RlZmluZQlSQVRFKGl4KQkoRE9UMTFS QVRFKGl4KSAvIDIpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlz dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0 IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwljb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJaW50IHJpeCwgbXJyLCBiZXN0X3JpeCwgY2hhbmdl X3JhdGVzOworCXVuc2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwkKKwlzaXplX3QgZnJhbWVMZW4g PSAoc2l6ZV90KWlhcmc7CisJY29uc3QgaW50IHNpemVfYmluID0gc2l6ZV90b19iaW4oZnJhbWVM ZW4pOworCisJc2FtcGxlX3VwZGF0ZV9zdGF0aWNfcml4KG5pKTsKKworCWlmIChzYW4tPnN0YXRp Y19yaXggIT0gLTEpIHsKKwkJcml4ID0gc2FuLT5zdGF0aWNfcml4OworCQlnb3RvIGRvbmU7CisJ fQorCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIodmFwKSkKKwkJbXJyID0gMTsK KwlpZiAoISBJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAw OworCisJYmVzdF9yaXggPSBwaWNrX2Jlc3RfcmF0ZShuaSwgcnQsIHNpemVfYmluLCAhbXJyKTsK KwlpZiAoYmVzdF9yaXggPj0gMCkgeworCQlhdmVyYWdlX3R4X3RpbWUgPSBzYW4tPnN0YXRzW3Np emVfYmluXVtiZXN0X3JpeF0uYXZlcmFnZV90eF90aW1lOworCX0gZWxzZSB7CisJCWF2ZXJhZ2Vf dHhfdGltZSA9IDA7CisJfQorCisJLyoKKwkgKiBMaW1pdCB0aGUgdGltZSBtZWFzdXJpbmcgdGhl IHBlcmZvcm1hbmNlIG9mIG90aGVyIHR4CisJICogcmF0ZXMgdG8gc2FtcGxlX3JhdGUlIG9mIHRo ZSB0b3RhbCB0cmFuc21pc3Npb24gdGltZS4KKwkgKi8KKwlpZiAoc2FuLT5zYW1wbGVfdHRbc2l6 ZV9iaW5dIDwgYXZlcmFnZV90eF90aW1lICogKHNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6 ZV9iaW5dICoKKwkJc2FtcGxlLT5zYW1wbGVfcmF0ZS8xMDApKSB7CisJCXJpeCA9IHBpY2tfc2Ft cGxlX3JhdGUobmksIHJ0LCBzaXplX2Jpbik7CisJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgw MjExX01TR19SQVRFQ1RMLAorCQkgICAgICZuaSwgImF0dCAlZCBzYW1wbGVfdHQgJWQgc2l6ZSAl dSBzYW1wbGUgcmF0ZSAlZCAlcyBjdXJyZW50IHJhdGUgJWQgJXMiLAorCQkgICAgIGF2ZXJhZ2Vf dHhfdGltZSwKKwkJICAgICBzYW4tPnNhbXBsZV90dFtzaXplX2Jpbl0sCisJCSAgICAgYmluX3Rv X3NpemUoc2l6ZV9iaW4pLAorCQkgICAgIGRvdDExcmF0ZShydCwgcml4KSwKKwkJICAgICBkb3Qx MXJhdGVfbGFiZWwocnQsIHJpeCksCisJCSAgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSksCisJCSAgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSkpOworCQlpZiAocml4ICE9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5d KSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7CisJCX0gZWxz ZSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwkJfQorCQlz YW4tPnBhY2tldHNfc2luY2Vfc2FtcGxlW3NpemVfYmluXSA9IDA7CisJfSBlbHNlIHsKKwkJY2hh bmdlX3JhdGVzID0gMDsKKwkJaWYgKCFzYW4tPnBhY2tldHNfc2VudFtzaXplX2Jpbl0gfHwgYmVz dF9yaXggPT0gLTEpIHsKKwkJCS8qIG5vIHBhY2tldCBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxs eSB5ZXQgKi8KKwkJCWNoYW5nZV9yYXRlcyA9IDE7CisJCQlpZiAobmktPm5pX2ZsYWdzICYgSUVF RTgwMjExX05PREVfSFQpCisJCQkJYmVzdF9yaXggPSBzYW1wbGVfcGlja19zZWVkX3JhdGVfaHQo bmksIGZyYW1lTGVuKTsKKwkJCWVsc2UKKwkJCQliZXN0X3JpeCA9IHNhbXBsZV9waWNrX3NlZWRf cmF0ZV9sZWdhY3kobmksIGZyYW1lTGVuKTsKKwkJfSBlbHNlIGlmIChzYW4tPnBhY2tldHNfc2Vu dFtzaXplX2Jpbl0gPCAyMCkgeworCQkJLyogbGV0IHRoZSBiaXQtcmF0ZSBzd2l0Y2ggcXVpY2ts eSBkdXJpbmcgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAs CisJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBzd2l0Y2hp bmcgcXVpY2tseS4uIiwgX19mdW5jX18pOworCQkJY2hhbmdlX3JhdGVzID0gMTsKKwkJfSBlbHNl IGlmICh0aWNrcyAtIHNhbXBsZS0+c2FtcGxlX21pbl9zd2l0Y2ggPiBzYW4tPnRpY2tzX3NpbmNl X3N3aXRjaFtzaXplX2Jpbl0pIHsKKwkJCS8qIG1pbl9zd2l0Y2ggc2Vjb25kcyBoYXZlIGdvbmUg YnkgKi8KKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVD VEwsICZuaSwKKwkJCSAgICAiJXM6IG1pbl9zd2l0Y2ggJWQgPiB0aWNrc19zaW5jZV9zd2l0Y2gg JWQuLiIsCisJCQkgICAgX19mdW5jX18sIHRpY2tzIC0gc2FtcGxlLT5zYW1wbGVfbWluX3N3aXRj aCwgc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKTsKKwkJCWNoYW5nZV9yYXRlcyA9 IDE7CisJCX0gZWxzZSBpZiAoKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg JiYKKwkJICAgICgyKmF2ZXJhZ2VfdHhfdGltZSA8IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Nhbi0+ Y3VycmVudF9yaXhbc2l6ZV9iaW5dXS5hdmVyYWdlX3R4X3RpbWUpKSB7CisJCQkvKiB0aGUgY3Vy cmVudCBiaXQtcmF0ZSBpcyB0d2ljZSBhcyBzbG93IGFzIHRoZSBiZXN0IG9uZSAqLworCQkJSUVF RTgwMjExX05PVEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJ ICAgICIlczogMnggYXR0ICg9ICVkKSA8IGN1cl9yaXggYXR0ICVkIiwKKwkJCSAgICBfX2Z1bmNf XywKKwkJCSAgICAyICogYXZlcmFnZV90eF90aW1lLCBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4t PmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lKTsKKwkJCWNoYW5nZV9yYXRl cyA9IDE7CisJCX0gZWxzZSBpZiAoKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg eworCQkJaW50IGN1cl9yaXggPSBzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwkJCWludCBj dXJfYXR0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VyX3JpeF0uYXZlcmFnZV90eF90aW1lOwor CQkJLyoKKwkJCSAqIElmIHRoZSBub2RlIGlzIEhULCB1cGdyYWRlIGl0IGlmIHRoZSBNQ1MgcmF0 ZSBpcworCQkJICogaGlnaGVyIGFuZCB0aGUgYXZlcmFnZSB0eCB0aW1lIGlzIHdpdGhpbiAyMCUg b2YKKwkJCSAqIHRoZSBjdXJyZW50IHJhdGUuIEl0IGNhbiBmYWlsIGEgbGl0dGxlLgorCQkJICoK KwkJCSAqIFRoaXMgaXMgbGlrZWx5IG5vdCBvcHRpbWFsIQorCQkJICovCisjaWYgMAorCQkJcHJp bnRmKCJjdXIgcml4L2F0dCAleC8lZCwgYmVzdCByaXgvYXR0ICV4LyVkXG4iLAorCQkJICAgIE1D UyhjdXJfcml4KSwgY3VyX2F0dCwgTUNTKGJlc3Rfcml4KSwgYXZlcmFnZV90eF90aW1lKTsKKyNl bmRpZgorCQkJaWYgKChNQ1MoYmVzdF9yaXgpID4gTUNTKGN1cl9yaXgpKSAmJgorCQkJICAgIChh dmVyYWdlX3R4X3RpbWUgKiA4KSA8PSAoY3VyX2F0dCAqIDEwKSkgeworCQkJCUlFRUU4MDIxMV9O T1RFKHZhcCwKKwkJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkJICAgICIl czogSFQ6IGJlc3Rfcml4IDB4JWQgPiBjdXJfcml4IDB4JXgsIGF2ZXJhZ2VfdHhfdGltZSAlZCwg Y3VyX2F0dCAlZCIsCisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBNQ1MoYmVzdF9yaXgpLCBN Q1MoY3VyX3JpeCksIGF2ZXJhZ2VfdHhfdGltZSwgY3VyX2F0dCk7CisJCQkJY2hhbmdlX3JhdGVz ID0gMTsKKwkJCX0KKwkJfQorCisJCXNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6ZV9iaW5d Kys7CisJCQorCQlpZiAoY2hhbmdlX3JhdGVzKSB7CisJCQlpZiAoYmVzdF9yaXggIT0gc2FuLT5j dXJyZW50X3JpeFtzaXplX2Jpbl0pIHsKKwkJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkJICAg IElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCQkgICAgJm5pLAorIiVzOiBzaXplICVkIHN3aXRj aCByYXRlICVkICglZC8lZCkgLT4gJWQgKCVkLyVkKSBhZnRlciAlZCBwYWNrZXRzIG1yciAlZCIs CisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBiaW5fdG9fc2l6ZShzaXplX2JpbiksCisJCQkJ ICAgIFJBVEUoc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkJCSAgICBzYW4tPnN0YXRz W3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lLAor CQkJCSAgICBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0u cGVyZmVjdF90eF90aW1lLAorCQkJCSAgICBSQVRFKGJlc3Rfcml4KSwKKwkJCQkgICAgc2FuLT5z dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5z dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5w YWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0sCisJCQkJICAgIG1ycik7CisJCQl9CisJCQlz YW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSA9IDA7CisJCQlzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSA9IGJlc3Rfcml4OworCQkJc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6 ZV9iaW5dID0gdGlja3M7CisJCQkvKiAKKwkJCSAqIFNldCB0aGUgdmlzaWJsZSB0eHJhdGUgZm9y IHRoaXMgbm9kZS4KKwkJCSAqLworCQkJbmktPm5pX3R4cmF0ZSA9IGRvdDExcmF0ZShydCwgYmVz dF9yaXgpOworCQl9CisJCXJpeCA9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dOworCQlzYW4t PnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSsrOworCX0KKwkvLyAqdHJ5MCA9IG1yciA/ IHNhbi0+c2NoZWRbcml4XS50MCA6IEFUSF9UWE1BWFRSWTsKK2RvbmU6CisKKwkvKgorCSAqIFRo aXMgYnVnIHRvdGFsbHkgc3Vja3MgYW5kIHNob3VsZCBiZSBmaXhlZC4KKwkgKgorCSAqIEZvciBu b3cgdGhvdWdoLCBsZXQncyBub3QgcGFuaWMsIHNvIHdlIGNhbiBzdGFydCB0byBmaWd1cmUKKwkg KiBvdXQgaG93IHRvIGJldHRlciByZXByb2R1Y2UgaXQuCisJICovCisJaWYgKHJpeCA8IDAgfHwg cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCIlczogRVJST1I6IHJpeCAlZCBvdXQg b2YgYm91bmRzIChyYXRlQ291bnQ9JWQpXG4iLAorCQkgICAgX19mdW5jX18sCisJCSAgICByaXgs CisJCSAgICBydC0+cmF0ZUNvdW50KTsKKwkJICAgIHJpeCA9IDA7CS8qIFhYWCBqdXN0IGRlZmF1 bHQgZm9yIG5vdyAqLworCX0KKwlLQVNTRVJUKHJpeCA+PSAwICYmIHJpeCA8IHJ0LT5yYXRlQ291 bnQsICgicml4IGlzICVkIiwgcml4KSk7CisKKwkvLyAqcml4MCA9IHJpeDsKKwkvLyAqdHhyYXRl ID0gcnQtPmluZm9bcml4XS5yYXRlQ29kZQorCS8vIAl8IChzaG9ydFByZWFtYmxlID8gcnQtPmlu Zm9bcml4XS5zaG9ydFByZWFtYmxlIDogMCk7CisJc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5d Kys7CisKKwlyZXR1cm4gcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworI3VuZGVm IFJBVEUKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGll ZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXVpbnQ4X3Qgcml4MCA9 IHNhbXBsZV9yYXRlKG5pLCBOVUxMLCAwKTsKKwljb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSAqc2No ZWQgPSAmc2FuLT5zY2hlZFtyaXgwXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMg PSByY19pbmZvLT5pcmlfcmM7CisKKwlLQVNTRVJUKHJpeDAgPT0gc2NoZWQtPnIwLCAoInJpeDAg KCV4KSAhPSBzY2hlZC0+cjAgKCV4KSFcbiIsCisJICAgIHJpeDAsIHNjaGVkLT5yMCkpOworCS8q IFhYWCAqLworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNd LmZsYWdzID0gMDsKKworCXJjWzBdLnJpeCA9IHNjaGVkLT5yMDsKKwlyY1sxXS5yaXggPSBzY2hl ZC0+cjE7CisJcmNbMl0ucml4ID0gc2NoZWQtPnIyOworCXJjWzNdLnJpeCA9IHNjaGVkLT5yMzsK KworCXJjWzBdLnRyaWVzID0gc2NoZWQtPnQwOworCXJjWzFdLnRyaWVzID0gc2NoZWQtPnQxOwor CXJjWzJdLnRyaWVzID0gc2NoZWQtPnQyOworCXJjWzNdLnRyaWVzID0gc2NoZWQtPnQzOworfQor CitzdGF0aWMgdm9pZAordXBkYXRlX3N0YXRzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh cCwKKyAgICAJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAorCQkgIGludCBmcmFt ZV9zaXplLAorCQkgIGludCByaXgwLCBpbnQgdHJpZXMwLAorCQkgIGludCByaXgxLCBpbnQgdHJp ZXMxLAorCQkgIGludCByaXgyLCBpbnQgdHJpZXMyLAorCQkgIGludCByaXgzLCBpbnQgdHJpZXMz LAorCQkgIGludCBzaG9ydF90cmllcywgaW50IHRyaWVzLAorCQkgIGludCBuZnJhbWVzLCBpbnQg bmJhZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0 bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsK KworCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lX3NpemUpOworCWNvbnN0 IGludCBzaXplID0gYmluX3RvX3NpemUoc2l6ZV9iaW4pOworCisJaW50IGlzX2h0NDAgPSBpZWVl ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MCh2YXAsIG5pKTsKKwlpbnQgdHQsIHRyaWVzX3NvX2Zh cjsKKwlpbnQgcGN0OworCisJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgwKSkKKwkJcmV0 dXJuOworCXR0ID0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDAsIHNo b3J0X3RyaWVzLAorCQlNSU4odHJpZXMwLCB0cmllcykgLSAxLCBpc19odDQwKTsKKwl0cmllc19z b19mYXIgPSB0cmllczA7CisKKwlpZiAodHJpZXMxICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7 CisJCWlmICghSVNfUkFURV9ERUZJTkVEKHNhbiwgcml4MSkpCisJCQlyZXR1cm47CisJCXR0ICs9 IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgxLCBzaG9ydF90cmllcywK KwkJCU1JTih0cmllczEgKyB0cmllc19zb19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEs IGlzX2h0NDApOworCQl0cmllc19zb19mYXIgKz0gdHJpZXMxOworCX0KKworCWlmICh0cmllczIg JiYgdHJpZXNfc29fZmFyIDwgdHJpZXMpIHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCBy aXgyKSkKKwkJCXJldHVybjsKKwkJdHQgKz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAs IHNpemUsIHJpeDIsIHNob3J0X3RyaWVzLAorCQkJTUlOKHRyaWVzMiArIHRyaWVzX3NvX2Zhciwg dHJpZXMpIC0gdHJpZXNfc29fZmFyIC0gMSwgaXNfaHQ0MCk7CisJCXRyaWVzX3NvX2ZhciArPSB0 cmllczI7CisJfQorCisJaWYgKHRyaWVzMyAmJiB0cmllc19zb19mYXIgPCB0cmllcykgeworCQlp ZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDMpKQorCQkJcmV0dXJuOworCQl0dCArPSBjYWxj X3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwgcml4Mywgc2hvcnRfdHJpZXMsCisJCQlN SU4odHJpZXMzICsgdHJpZXNfc29fZmFyLCB0cmllcykgLSB0cmllc19zb19mYXIgLSAxLCBpc19o dDQwKTsKKwl9CisKKwlpZiAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0 cyA8IHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19taW5wYWNrZXRzKSB7CisJCS8qIGp1c3QgYXZl cmFnZSB0aGUgZmlyc3QgZmV3IHBhY2tldHMgKi8KKwkJaW50IGF2Z190eCA9IHNhbi0+c3RhdHNb c2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaW50IHBhY2tldHMgPSBzYW4tPnN0 YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRzOworCQlzYW4tPnN0YXRzW3NpemVfYmlu XVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAodHQrKGF2Z190eCpwYWNrZXRzKSkvKHBhY2tldHMr bmZyYW1lcyk7CisJfSBlbHNlIHsKKwkJLyogdXNlIGEgZXdtYSAqLworCQlzYW4tPnN0YXRzW3Np emVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAKKwkJCSgoc2FuLT5zdGF0c1tzaXplX2Jp bl1bcml4MF0uYXZlcmFnZV90eF90aW1lICogc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX3JhdGUp ICsgCisJCQkgKHR0ICogKDEwMCAtIHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19yYXRlKSkpIC8g MTAwOworCX0KKwkKKwkvKgorCSAqIFhYWCBEb24ndCBtYXJrIHRoZSBoaWdoZXIgYml0IHJhdGVz IGFzIGFsc28gaGF2aW5nIGZhaWxlZDsgYXMgdGhpcworCSAqIHVuZm9ydHVuYXRlbHkgc3RvcHMg dGhvc2UgcmF0ZXMgZnJvbSBiZWluZyB0YXN0ZWQgd2hlbiB0cnlpbmcgdG8KKwkgKiBUWC4gVGhp cyBoYXBwZW5zIHdpdGggMTFuIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChuZnJhbWVzID09IG5i YWQpIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyAr PSBuYmFkOworCisJfSBlbHNlIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0 c19hY2tlZCArPSAobmZyYW1lcyAtIG5iYWQpOworCQlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgw XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID0gMDsKKwl9CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4 MF0udHJpZXMgKz0gdHJpZXM7CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ubGFzdF90eCA9 IHRpY2tzOworCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMgKz0gbmZy YW1lczsKKworCS8qIHVwZGF0ZSBFV01BIGZvciB0aGlzIHJpeCAqLworCisJLyogQ2FsY3VsYXRl IHBlcmNlbnRhZ2UgYmFzZWQgb24gY3VycmVudCByYXRlICovCisJaWYgKG5mcmFtZXMgPT0gMCkK KwkJbmZyYW1lcyA9IG5iYWQgPSAxOworCXBjdCA9ICgobmZyYW1lcyAtIG5iYWQpICogMTAwMCkg LyBuZnJhbWVzOworCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tl dHMgPAorCSAgICBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0cykgeworCQkvKiBq dXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBhX3BjdCA9IChzYW4t PnN0YXRzW3NpemVfYmluXVtyaXgwXS5wYWNrZXRzX2Fja2VkICogMTAwMCkgLworCQkgICAgKHNh bi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMpOworCQlzYW4tPnN0YXRzW3Np emVfYmluXVtyaXgwXS5ld21hX3BjdCA9IGFfcGN0OworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3 bWEgKi8KKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPQorCQkJKChzYW4t PnN0YXRzW3NpemVfYmluXVtyaXgwXS5ld21hX3BjdCAqIHNhbXBsZS0+c2FucGxlX3Ntb290aGlu Z19yYXRlKSArCisJCQkgKHBjdCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0 ZSkpKSAvIDEwMDsKKwl9CisKKwlpZiAocml4MCA9PSBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtz aXplX2Jpbl0pIHsKKwkJc2FuLT5zYW1wbGVfdHRbc2l6ZV9iaW5dID0gdHQ7CisJCXNhbi0+Y3Vy cmVudF9zYW1wbGVfcml4W3NpemVfYmluXSA9IC0xOworCX0KK30KKworc3RhdGljIHZvaWQKK3Nh bXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgY29u c3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgaW50IG9rLAorICAgIHZvaWQgKmFyZzEsIHZv aWQgKmFyZzIpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5p X3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAy MTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKworCS8qIFhYWCBuZWVk IHRvIGNoYW5nZSBhcmcyIHRvIHBvaW50ZXIgb2YgaWVlZTgwMjExX3JjX2luZm8gKi8KKwlzdHJ1 Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZv KilhcmcyOworCisJaW50IGZpbmFsX3JpeCwgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXM7CisJaW50 IG5mcmFtZXMsIG5iYWQ7CisJaW50IGZyYW1lX3NpemUsIG1ycjsKKworCS8qIHVwZGF0ZSBwZXIg dmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAsIHJj X2luZm8pOworCisJZmluYWxfcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtyY19pbmZvLT5pcmlf dHhyYXRlXTsKKwlzaG9ydF90cmllcyA9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCS8qIFhY WCB3aHkgcGx1cyAxIGhlcmU/ICovCisJbG9uZ190cmllcyA9IHJjX2luZm8tPmlyaV9sb25ncmV0 cnkgKyAxOworCisJbmZyYW1lcyA9IHJjX2luZm8tPmlyaV90eGNudDsKKwluYmFkID0gcmNfaW5m by0+aXJpX2ZhaWxjbnQ7CisKKwlmcmFtZV9zaXplID0gcmNfaW5mby0+aXJpX2ZyYW1lbGVuOwor CW1yciA9IDA7CisKKwlpZiAobmZyYW1lcyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAo ZnJhbWVfc2l6ZSA9PSAwKQkJICAgIC8qIE5COiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlmcmFt ZV9zaXplID0gMTUwMDsKKworCWlmIChzYW4tPnJhdGVtYXNrID09IDApIHsKKwkJcmV0dXJuOwor CX0KKwkKKwlpZiAoSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUih2YXApKQorCQltcnIgPSAx OworCS8qIFhYWCBjaGVjayBIVCBwcm90bW9kZSB0b28gKi8KKwlpZiAobXJyICYmICFJRUVFODAy MTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAwOworCQorCWlmICghbXJy IHx8IHJjX2luZm8tPmlyaV9maW5hbHRzaSA9PSAwKSB7CisJCWlmICghSVNfUkFURV9ERUZJTkVE KHNhbiwgZmluYWxfcml4KSkgeworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIE9ubHkgb25l IHJhdGUgd2FzIHVzZWQ7IG9wdGltaXplIHdvcmsuCisJCSAqLworCQl1cGRhdGVfc3RhdHModmFw LCBuaSwgZnJhbWVfc2l6ZSwgCisJCQkgICAgIGZpbmFsX3JpeCwgbG9uZ190cmllcywKKwkJCSAg ICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgc2hvcnRfdHJp ZXMsIGxvbmdfdHJpZXMsCisJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCisJfSBlbHNlIHsKKwkJ aW50IGZpbmFsVFNJZHggPSByY19pbmZvLT5pcmlfZmluYWx0c2k7CisJCWludCBpOworCisJCS8q CisJCSAqIE5COiBzZXJpZXMgPiAwIGFyZSBub3QgcGVuYWxpemVkIGZvciBmYWlsdXJlCisJCSAq IGJhc2VkIG9uIHRoZSB0cnkgY291bnRzIHVuZGVyIHRoZSBhc3N1bXB0aW9uCisJCSAqIHRoYXQg bG9zc2VzIGFyZSBvZnRlbiBidXJzdHkgYW5kIHNpbmNlIHdlCisJCSAqIHNhbXBsZSBoaWdoZXIg cmF0ZXMgMSB0cnkgYXQgYSB0aW1lIGRvaW5nIHNvCisJCSAqIG1heSB1bmZhaXJseSBwZW5hbGl6 ZSB0aGVtLgorCQkgKi8KKwkJaWYgKHJjWzBdLnRyaWVzKSB7CisJCQl1cGRhdGVfc3RhdHModmFw LCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAgIHJjWzBdLnJpeCwgcmNbMF0udHJpZXMsCisJCQkJ ICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50 cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICBzaG9ydF90 cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQkJbG9uZ190cmll cyAtPSByY1swXS50cmllczsKKwkJfQorCQkKKwkJaWYgKHJjWzFdLnRyaWVzICYmIGZpbmFsVFNJ ZHggPiAwKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAg IHJjWzFdLnJpeCwgcmNbMV0udHJpZXMsCisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVz LAorCQkJCSAgICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJ ICAgICBzaG9ydF90cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOwor CQkJbG9uZ190cmllcyAtPSByY1sxXS50cmllczsKKwkJfQorCisJCWlmIChyY1syXS50cmllcyAm JiBmaW5hbFRTSWR4ID4gMSkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUs CisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVzLAorCQkJCSAgICAgcmNbM10ucml4LCBy Y1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAgc2hv cnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxvbmdf dHJpZXMgLT0gcmNbMl0udHJpZXM7CisJCX0KKworCQlpZiAocmNbM10udHJpZXMgJiYgZmluYWxU U0lkeCA+IDIpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2YXAsIG5pLCBmcmFtZV9zaXplLAorCQkJCSAg ICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAw LAorCQkJCSAgICAgMCwgMCwKKwkJCQkgICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJ CSAgICAgbmZyYW1lcywgbmJhZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVf dHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSwKKyAgICB2b2lkICphcmcxLCB2b2lkICphcmcyLCB2b2lkICphcmcz KQoreworCS8qIG5vdGhpbmcgaGVyZS4gKi8KK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9zZXRp bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIGludCBtc2VjcykKK3sKKwlz dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5pdl9yczsKKwlpbnQgdDsKKwor CWlmIChtc2VjcyA8IDEwMCkKKwkJbXNlY3MgPSAxMDA7CisJdCA9IG1zZWNzX3RvX3RpY2tzKG1z ZWNzKTsKKwkvKiBpZWVlODAyMTFfc2FtcGxlIGRvZXNuJ3QgaGF2ZSB0aGUgc2FtcGxlX2ludGVy dmFsIGZpZWxkIGJ5IG5vdyAqLworCS8vIHNhbXBsZS0+c2FtcGxlX2ludGVydmFsID0gKHQgPCAx KSA/IDEgOiB0OworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3N0YXRzKHZvaWQgKmFyZywgc3Ry dWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBu aS0+bmlfdmFwOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9y Y3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjEx X2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJdWludDY0X3QgbWFzazsK KwlpbnQgcml4LCB5OworCisJcHJpbnRmKCJcblslc10gcmVmY250ICVkIHN0YXRpY19yaXggKCVk ICVzKSByYXRlbWFzayAweCVqeFxuIiwKKwkgICAgZXRoZXJfc3ByaW50ZihuaS0+bmlfbWFjYWRk ciksIGllZWU4MDIxMV9ub2RlX3JlZmNudChuaSksCisJICAgIGRvdDExcmF0ZShydCwgc2FuLT5z dGF0aWNfcml4KSwKKwkgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPnN0YXRpY19yaXgpLAor CSAgICAodWludG1heF90KXNhbi0+cmF0ZW1hc2spOworCWZvciAoeSA9IDA7IHkgPCBOVU1fUEFD S0VUX1NJWkVfQklOUzsgeSsrKSB7CisJCXByaW50ZigiWyU0dV0gY3VyIHJpeCAlZCAoJWQgJXMp IHNpbmNlIHN3aXRjaDogcGFja2V0cyAlZCB0aWNrcyAldVxuIiwKKwkJICAgIGJpbl90b19zaXpl KHkpLCBzYW4tPmN1cnJlbnRfcml4W3ldLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJl bnRfcml4W3ldKSwKKwkJICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5jdXJyZW50X3JpeFt5 XSksCisJCSAgICBzYW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3ldLCBzYW4tPnRpY2tzX3NpbmNl X3N3aXRjaFt5XSk7CisJCXByaW50ZigiWyU0dV0gbGFzdCBzYW1wbGUgKCVkICVzKSBjdXIgc2Ft cGxlICglZCAlcykgcGFja2V0cyBzZW50ICVkXG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksCisJ CSAgICBkb3QxMXJhdGUocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIGRvdDEx cmF0ZV9sYWJlbChydCwgc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0pLAorCQkgICAgZG90MTFyYXRl KHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwo cnQsIHNhbi0+Y3VycmVudF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIHNhbi0+cGFja2V0c19zZW50 W3ldKTsKKwkJcHJpbnRmKCJbJTR1XSBwYWNrZXRzIHNpbmNlIHNhbXBsZSAlZCBzYW1wbGUgdHQg JXVcbiIsCisJCSAgICBiaW5fdG9fc2l6ZSh5KSwgc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVt5 XSwKKwkJICAgIHNhbi0+c2FtcGxlX3R0W3ldKTsKKwl9CisJZm9yIChtYXNrID0gc2FuLT5yYXRl bWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgrKykgeworCQlpZiAoKG1h c2sgJiAxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tF VF9TSVpFX0JJTlM7IHkrKykgeworCQkJaWYgKHNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNr ZXRzID09IDApCisJCQkJY29udGludWU7CisJCQlwcmludGYoIlslMnUgJXM6JTR1XSAlOGp1OiUt OGp1ICglM2QlJSkgKEVXTUEgJTNkLiUxZCUlKSBUICU4anUgRiAlNGQgYXZnICU1dSBsYXN0ICV1 XG4iLAorCQkJICAgIGRvdDExcmF0ZShydCwgcml4KSwgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgp LAorCQkJICAgIGJpbl90b19zaXplKHkpLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNb eV1bcml4XS50b3RhbF9wYWNrZXRzLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNbeV1b cml4XS5wYWNrZXRzX2Fja2VkLAorCQkJICAgIChpbnQpICgoc2FuLT5zdGF0c1t5XVtyaXhdLnBh Y2tldHNfYWNrZWQgKiAxMDBVTEwpIC8KKwkJCSAgICAgc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFs X3BhY2tldHMpLAorCQkJICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAvIDEwLAorCQkJ ICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAlIDEwLAorCQkJICAgICh1aW50bWF4X3Qp IHNhbi0+c3RhdHNbeV1bcml4XS50cmllcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uYXZlcmFnZV90eF90 aW1lLAorCQkJICAgIHRpY2tzIC0gc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgpOworCQl9CisJ fQorfQorCitzdGF0aWMgaW50CitzYW1wbGVfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FS R1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgw MjExY29tICppYyA9IHZhcC0+aXZfaWZwLT5pZl9sMmNvbTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2 ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZWVlODAyMTFfaXRl cmF0ZV9ub2RlcygmaWMtPmljX3N0YSwgc2FtcGxlX3N0YXRzLCBOVUxMKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zbW9vdGhpbmdfcmF0ZShTWVNDVExfSEFO RExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFyZzE7CisJc3RydWN0 IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+aXZfcnM7CisJaW50IHJhdGUsIGVycm9y OworCisJcmF0ZSA9IHNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19yYXRlOworCWVycm9yID0gc3lz Y3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8ICFyZXEt Pm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDAgPD0gcmF0ZSAmJiByYXRlIDwgMTAw KSkKKwkJcmV0dXJuIEVJTlZBTDsKKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSA9IHJh dGU7CisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0g cmF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc2FtcGxl X3JhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAg PSBhcmcxOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOwor CWludCByYXRlLCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9yYXRlOworCWVycm9y ID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8 ICFyZXEtPm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDIgPD0gcmF0ZSAmJiByYXRl IDw9IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVfcmF0ZSA9IHJhdGU7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfc3lzY3RsYXR0YWNoKHN0cnVj dCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpjdHgsIHN0 cnVjdCBzeXNjdGxfb2lkICp0cmVlKQoreworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9D SElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc21vb3RoaW5nX3JhdGUiLCBD VExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zbW9v dGhpbmdfcmF0ZSwgIkkiLAorCSAgICAic2FtcGxlOiBzbW9vdGhpbmcgcmF0ZSBmb3IgYXZnIHR4 IHRpbWUgKCUlKSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9DSElMRFJFTih0cmVl KSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfcmF0ZSIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19S VywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3NhbXBsZV9yYXRlLCAiSSIsCisJICAgICJz YW1wbGU6IHBlcmNlbnQgYWlyIHRpbWUgZGV2b3RlZCB0byBzYW1wbGluZyBuZXcgcmF0ZXMgKCUl KSIpOworCS8qIFhYWCBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcywgc3RhbGVfZmFpbHVyZV90aW1l b3V0LCBtaW5fc3dpdGNoICovCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO KHRyZWUpLCBPSURfQVVUTywKKwkgICAgInNhbXBsZV9zdGF0cyIsIENUTFRZUEVfSU5UIHwgQ1RM RkxBR19SVywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3N0YXRzLCAiSSIsICJzYW1wbGU6 IHByaW50IHN0YXRpc3RpY3MiKTsKK30KSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yY19zYW1w bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlz aW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlzaW9uIDI1Njgy NSkKQEAgLTAsMCArMSwyODcgQEAKKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9y YXRlL3NhbXBsZS9zYW1wbGUuaCAyNDAzODIgMjAxMi0wOC0xNSAwNzoxMDoxMFogYWRyaWFuICQq LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBKb2huIEJpY2tldAorICogQ29weXJpZ2h0 IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5p bXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNj bGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9u IG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAg ICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlz dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBj b3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3Jz IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFT IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJ TkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBM QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIx MV9SQVRFQ1RMX1NBTVBMRV9IXworI2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf U0FNUExFX0hfCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCisv KgorICogZm9yIG5vdywgd2UgdHJhY2sgcGVyZm9ybWFuY2UgZm9yIHRocmVlIGRpZmZlcmVudCBw YWNrZXQKKyAqIHNpemUgYnVja2V0cworICovCisjZGVmaW5lIE5VTV9QQUNLRVRfU0laRV9CSU5T IDIKKyNkZWZpbmUJU0FNUExFX01BWFJBVEVTCTY0CQkvKiBOQjogY29ycmVzcG9uZHMgdG8gaGFs IGluZm9bMzJdICovCisKKy8qCisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KK3N0cnVj dCBpZWVlODAyMTFfc2FtcGxlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgc2FtcGxlX3N0 YXQ7CisJaW50CXNhbXBsZV9zbW9vdGhpbmdfcmF0ZTsJCQkvKiBld21hIHBlcmNlbnRhZ2UgWzAu Ljk5XSAqLworCWludAlzYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHM7CisJaW50CXNhbXBsZV9y YXRlOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmZXJlbnQgdHggcmF0ZXMgKi8KKwlpbnQJc2FtcGxl X21heF9zdWNjZXNzaXZlX2ZhaWx1cmVzOworCWludAlzYW1wbGVfc3RhbGVfZmFpbHVyZV90aW1l b3V0OwkvKiBob3cgbG9uZyB0byBob25vciBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAqLworCWlu dAlzYW1wbGVfbWluX3N3aXRjaDsJCS8qIG1pbiB0aW1lIGJldHdlZW4gcmF0ZSBjaGFuZ2VzICov CisJaW50CXNhbXBsZV9taW5fZ29vZF9wY3Q7CS8qIG1pbiBnb29kIHBlcmNlbnRhZ2UgZm9yIGEg cmF0ZSB0byBiZSBjb25zaWRlcmVkICovCit9OworCitzdHJ1Y3QgcmF0ZV9zdGF0cyB7CQorCXVu c2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwlpbnQgc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwl1aW50 NjRfdCB0cmllczsKKwl1aW50NjRfdCB0b3RhbF9wYWNrZXRzOwkvKiBwa3RzIHRvdGFsIHNpbmNl IGFzc29jICovCisJdWludDY0X3QgcGFja2V0c19hY2tlZDsJLyogcGt0cyBhY2tlZCBzaW5jZSBh c3NvYyAqLworCWludCBld21hX3BjdDsJLyogRVdNQSBwZXJjZW50YWdlICovCisJdW5zaWduZWQg cGVyZmVjdF90eF90aW1lOyAvKiB0cmFuc21pdCB0aW1lIGZvciAwIHJldHJpZXMgKi8KKwlpbnQg bGFzdF90eDsKK307CisKK3N0cnVjdCB0eHNjaGVkdWxlIHsKKwl1aW50OF90CXQwLCByMDsJCS8q IHNlcmllcyAwOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MSwgcjE7CQkvKiBzZXJp ZXMgMTogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4X3QJdDIsIHIyOwkJLyogc2VyaWVzIDI6 IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQzLCByMzsJCS8qIHNlcmllcyAzOiB0cmll cywgcmF0ZSBjb2RlICovCit9OworCisvKgorICogUmF0ZSBjb250cm9sIHN0YXRlIGZvciBhIGdp dmVuIG5vZGUuCisgKi8KKy8qIFhYWCBjaGFuZ2UgbmFtaW5nIGNvbnZlcnNpb24/ICovCitzdHJ1 Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2Fu X3NhbXBsZTsvKiBiYWNrcG9pbnRlciAqLworCWludCBzdGF0aWNfcml4OwkJCS8qIHJhdGUgaW5k ZXggb2YgZml4ZWQgdHggcmF0ZSAqLworCXVpbnQ2NF90IHJhdGVtYXNrOwkJLyogYml0IG1hc2sg b2YgdmFsaWQgcmF0ZSBpbmRpY2VzICovCisJY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgKnNjaGVk OwkvKiB0eCBzY2hlZHVsZSB0YWJsZSAqLworCisJc3RydWN0IHJhdGVfc3RhdHMgc3RhdHNbTlVN X1BBQ0tFVF9TSVpFX0JJTlNdW1NBTVBMRV9NQVhSQVRFU107CisJaW50IGxhc3Rfc2FtcGxlX3Jp eFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisKKwlpbnQgY3VycmVudF9zYW1wbGVfcml4W05VTV9Q QUNLRVRfU0laRV9CSU5TXTsgICAgICAgCisJaW50IHBhY2tldHNfc2VudFtOVU1fUEFDS0VUX1NJ WkVfQklOU107CisKKwlpbnQgY3VycmVudF9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCWlu dCBwYWNrZXRzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQg dGlja3Nfc2luY2Vfc3dpdGNoW05VTV9QQUNLRVRfU0laRV9CSU5TXTsKKworCWludCBwYWNrZXRz X3NpbmNlX3NhbXBsZVtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQgc2FtcGxlX3R0 W05VTV9QQUNLRVRfU0laRV9CSU5TXTsKK307CisKKyNkZWZpbmUJSVNfUkFURV9ERUZJTkVEKHNh biwgcml4KQkoKChzYW4pLT5yYXRlbWFzayAmICgxPDwocml4KSkpICE9IDApCisKKyNpZm5kZWYg TUlOCisjZGVmaW5lCU1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKyNp Zm5kZWYgTUFYCisjZGVmaW5lCU1BWChhLGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5k aWYKKworc3RhdGljIGNvbnN0IGludCBwYWNrZXRfc2l6ZV9iaW5zW05VTV9QQUNLRVRfU0laRV9C SU5TXSAgPSB7IDI1MCwgMTYwMCB9OworCitzdGF0aWMgaW5saW5lIGludAorYmluX3RvX3NpemUo aW50IGluZGV4KQoreworCXJldHVybiBwYWNrZXRfc2l6ZV9iaW5zW2luZGV4XTsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK3NpemVfdG9fYmluKGludCBzaXplKSAKK3sKKyNpZiBOVU1fUEFDS0VU X1NJWkVfQklOUyA+IDEKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzBdKQorCQlyZXR1 cm4gMDsKKyNlbmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMgorCWlmIChzaXplIDw9 IHBhY2tldF9zaXplX2JpbnNbMV0pCisJCXJldHVybiAxOworI2VuZGlmCisjaWYgTlVNX1BBQ0tF VF9TSVpFX0JJTlMgPiAzCisJaWYgKHNpemUgPD0gcGFja2V0X3NpemVfYmluc1syXSkKKwkJcmV0 dXJuIDI7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklOUyA+IDQKKyNlcnJvciAiYWRk IHN1cHBvcnQgZm9yIG1vcmUgcGFja2V0IHNpemVzIgorI2VuZGlmCisJcmV0dXJuIE5VTV9QQUNL RVRfU0laRV9CSU5TLTE7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzYW1wbGVfcGt0X3R4dGltZShj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorCXVpbnQzMl90IGZyYW1lTGVu LCB1aW50MTZfdCByYXRlaXgsIGludCBpc2h0NDAsIGludCBpc1Nob3J0UHJlYW1ibGUpCit7CisJ dWludDhfdCByYzsKKyAgICBpbnQgbnVtU3RyZWFtczsKKworICAgIHJjID0gcnQtPmluZm9bcmF0 ZWl4XS5yYXRlQ29kZTsKKworICAgIC8qIExlZ2FjeSByYXRlPyBSZXR1cm4gdGhlIG9sZCB3YXkg Ki8KKyAgICBpZiAoISBJU19IVF9SQVRFKHJjKSkKKyAgICAJcmV0dXJuIGllZWU4MDIxMV9jb21w dXRlX2R1cmF0aW9uKHJ0LCBmcmFtZUxlbiwgcmF0ZWl4LCBpc1Nob3J0UHJlYW1ibGUpOworCisg ICAgLyogMTFuIGZyYW1lIC0gZXh0cmFjdCBvdXQgdGhlIG51bWJlciBvZiBzcGF0aWFsIHN0cmVh bXMgKi8KKyAgICBudW1TdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKKyAgICBLQVNTRVJU KG51bVN0cmVhbXMgPiAwICYmIG51bVN0cmVhbXMgPD0gNCwKKyAgICAgICAgKCJudW1iZXIgb2Yg c3BhdGlhbCBzdHJlYW1zIG5lZWRzIHRvIGJlIDEuLjM6IE1DUyByYXRlIDB4JXghIiwKKyAgICAg ICAgcmF0ZWl4KSk7CisKKyAgICByZXR1cm4gaWVlZTgwMjExX2NvbXB1dGVfZHVyYXRpb25faHQo ZnJhbWVMZW4sIHJjLCBudW1TdHJlYW1zLCBpc2h0NDAsIGlzU2hvcnRQcmVhbWJsZSk7Cit9CisK KyNkZWZpbmUgV0lGSV9DV19NSU4gMzEKKyNkZWZpbmUgV0lGSV9DV19NQVggMTAyMworCisvKgor ICogQ2FsY3VsYXRlIHRoZSB0cmFuc21pdCBkdXJhdGlvbiBvZiBhIGZyYW1lLgorICovCitzdGF0 aWMgdW5zaWduZWQgY2FsY191c2Vjc191bmljYXN0X3BhY2tldChjb25zdCBzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAsCisJCQkJaW50IGxlbmd0aCwKKwkJCQlpbnQgcml4LCBpbnQgc2hvcnRfcmV0 cmllcywKKwkJCQlpbnQgbG9uZ19yZXRyaWVzLCBpbnQgaXNfaHQ0MCkKK3sKKwljb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2 X2ljOworCWludCBjdXJtb2RlID0gaWVlZTgwMjExX2NoYW4ybW9kZSh2YXAtPml2X2ljLT5pY19j dXJjaGFuKTsKKwkKKwl1bnNpZ25lZCB0X3Nsb3QsIHRfZGlmcywgdF9zaWZzOyAKKwlpbnQgcnRz LCBjdHM7CisJaW50IHR0LCB4LCBjdywgY2l4OworCisJaW50IHR0ID0gMDsKKwlpbnQgeCA9IDA7 CisJaW50IGN3ID0gV0lGSV9DV19NSU47CisKKwlLQVNTRVJUKHJ0ICE9IE5VTEwsICgibm8gcmF0 ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCWlmIChyaXggPj0gcnQtPnJhdGVDb3Vu dCkgeworCQlwcmludGYoImJvZ3VzIHJpeCAlZCwgbWF4ICV1LCBtb2RlICV1XG4iLAorCQkgICAg ICAgcml4LCBydC0+cmF0ZUNvdW50LCBjdXJtb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWNpeCA9 IHJ0LT5pbmZvW3JpeF0uY29udHJvbFJhdGU7CisJLyogCisJICogWFhYIGdldHRpbmcgbWFjL3Bo eSBsZXZlbCB0aW1pbmdzIHNob3VsZCBiZSBmaXhlZCBmb3IgdHVyYm8KKwkgKiByYXRlcywgYW5k IHRoZXJlIGlzIHByb2JhYmx5IGEgd2F5IHRvIGdldCB0aGlzIGZyb20gdGhlCisJICogaGFsLi4u CisJICovCisJc3dpdGNoIChydC0+aW5mb1tyaXhdLnBoeSkgeworCWNhc2UgSUVFRTgwMjExX1Rf T0ZETToKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gMTY7CisJCXRfZGlmcyA9IDI4OworCQkv KiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIElFRUU4MDIxMV9UX1RVUkJPOgorCQl0X3Nsb3QgPSA5 OworCQl0X3NpZnMgPSA4OworCQl0X2RpZnMgPSAyODsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAy MTFfVF9IVDoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJ CWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1RfRFM6CisJCS8qIGZhbGwgdGhyb3VnaCB0byBkZWZh dWx0ICovCisJZGVmYXVsdDoKKwkJLyogcGcgMjA1IGllZWUuODAyLjExLnBkZiAqLworCQl0X3Ns b3QgPSAyMDsKKwkJdF9kaWZzID0gNTA7CisJCXRfc2lmcyA9IDEwOworCX0KKworCXJ0cyA9IGN0 cyA9IDA7CisKKwlpZiAoKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1VTRVBST1QpICYmCisJ ICAgIHJ0LT5pbmZvW3JpeF0ucGh5ID09IElFRUU4MDIxMV9UX09GRE0pIHsKKwkJaWYgKGljLT5p Y19wcm90bW9kZSA9PSBJRUVFODAyMTFfUFJPVF9SVFNDVFMpCisJCQlydHMgPSAxOworCQllbHNl IGlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfQ1RTT05MWSkKKwkJCWN0cyA9 IDE7CisKKwkJaW50IHByb3RyaXg7CisgICAgCWlmIChjdXJtb2RlID09IElFRUU4MDIxMV9NT0RF XzExRykKKyAgICAJICAgIHByb3RyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzIqMl07CisgICAg CWVsc2UgCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFsyKjFdOworICAg IAlpZiAoMHhmZiA9PSBwcm90cml4KQorICAgIAkJcHJvdHJpeCA9IDA7CisKKwkJY2l4ID0gcnQt PmluZm9bcHJvdHJpeF0uY29udHJvbFJhdGU7CisJfQorCisJaWYgKDAgLypsZW5ndGggPiBpYy0+ aWNfcnRzdGhyZXNob2xkICovKSB7CisJCXJ0cyA9IDE7CisJfQorCisJaWYgKHJ0cyB8fCBjdHMp IHsKKwkJaW50IGN0c3JhdGU7CisJCWludCBjdHNkdXJhdGlvbiA9IDA7CisKKwkJLyogTkI6IHRo aXMgaXMgaW50ZW50aW9uYWxseSBub3QgYSBydW50aW1lIGNoZWNrICovCisJCUtBU1NFUlQoY2l4 IDwgcnQtPnJhdGVDb3VudCwKKwkJICAgICgiYm9ndXMgY2l4ICVkLCBtYXggJXUsIG1vZGUgJXVc biIsIGNpeCwgcnQtPnJhdGVDb3VudCwKKwkJICAgICBjdXJtb2RlKSk7CisKKwkJY3RzcmF0ZSA9 IHJ0LT5pbmZvW2NpeF0ucmF0ZUNvZGUgfCBydC0+aW5mb1tjaXhdLnNob3J0UHJlYW1ibGU7CisJ CWlmIChydHMpCQkvKiBTSUZTICsgQ1RTICovCisJCQljdHNkdXJhdGlvbiArPSBydC0+aW5mb1tj aXhdLnNwQWNrRHVyYXRpb247CisKKwkJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8K KwkJY3RzZHVyYXRpb24gKz0gc2FtcGxlX3BrdF90eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19o dDQwLCAwKTsKKworCQlpZiAoY3RzKQkvKiBTSUZTICsgQUNLICovCisJCQljdHNkdXJhdGlvbiAr PSBydC0+aW5mb1tjaXhdLnNwQWNrRHVyYXRpb247CisKKwkJdHQgKz0gKHNob3J0X3JldHJpZXMg KyAxKSAqIGN0c2R1cmF0aW9uOworCX0KKwl0dCArPSB0X2RpZnM7CisKKwkvKiBYWFggYXNzdW1l cyBzaG9ydCBwcmVhbWJsZSAqLworCXR0ICs9IChsb25nX3JldHJpZXMrMSkqc2FtcGxlX3BrdF90 eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19odDQwLCAwKTsKKworCXR0ICs9IChsb25nX3JldHJp ZXMrMSkqKHRfc2lmcyArIHJ0LT5pbmZvW3JpeF0uc3BBY2tEdXJhdGlvbik7CisKKwlmb3IgKHgg PSAwOyB4IDw9IHNob3J0X3JldHJpZXMgKyBsb25nX3JldHJpZXM7IHgrKykgeworCQljdyA9IE1J TihXSUZJX0NXX01BWCwgKGN3ICsgMSkgKiAyKTsKKwkJdHQgKz0gKHRfc2xvdCAqIGN3LzIpOwor CX0KKwlyZXR1cm4gdHQ7Cit9CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVD VExfU0FNUExFX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lv biAwKQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lvbiAyNTY4 MjUpCkBAIC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9u ZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9z ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh cHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVH QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAq IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s IEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4 MDIxMV9SQVRFQ1RMX05PTkVfSF8KKyNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RM X05PTkVfSF8KKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CisKKy8q CisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KKworc3RydWN0IGllZWU4MDIxMV9ub25l IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgbm9uZV9zdGF0OworCS8qIG90aGVyIHN0dWZm cyAqLworfTsKKworLyoKKyAqIFJhdGUgY29udHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgor ICovCitzdHJ1Y3QgaWVlZTgwMjExX25vbmVfbm9kZSB7CisJc3RydWN0IGllZWU4MDIxMV9ub25l ICpub25fbm9uZTsKK307CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf Tk9ORV9IXyAqLwpJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgJKHJl dmlzaW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2 aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDI0MSBAQAorLyogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rl di9hdGgvYXRoX3JhdGUvc2FtcGxlL3R4X3NjaGVkdWxlcy5oIDI0MDM4NCAyMDEyLTA4LTE1IDA3 OjUwOjQyWiBhZHJpYW4gJCovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaG4gQmlj a2V0CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5v cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQg bW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAi Tk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICog ICAgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1 YnN0YW50aWFsbHkKKyAqICAgIHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVy dGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0 aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9m IGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3 YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U UklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTk9OSU5GUklOR0VNRU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisjaWZuZGVm CV9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfVFhTQ0hFRFVMRVNfSF8KKyNkZWZp bmUJX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXworCisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUgQShfcikgXAorICAgICgoKF9yKSA9PSA2 KSAgID8gMCA6ICgoKF9yKSA9PSA5KSAgID8gMSA6ICgoKF9yKSA9PSAxMikgID8gMiA6IFwKKyAg ICAoKChfcikgPT0gMTgpICA/IDMgOiAoKChfcikgPT0gMjQpICA/IDQgOiAoKChfcikgPT0gMzYp ICA/IDUgOiBcCisgICAgKCgoX3IpID09IDQ4KSAgPyA2IDogKCgoX3IpID09IDU0KSAgPyA3IDog MCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExYVtdID0g eworCXsgMyxBKCA2KSwgMyxBKCAgNiksIDAsQSggIDYpLCAwLEEoIDYpIH0sCS8qICAgNk1iL3Mg Ki8KKwl7IDQsQSggOSksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LAkvKiAgIDlNYi9z ICovCisJeyA0LEEoMTIpLCAzLEEoICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwJLyogIDEyTWIv cyAqLworCXsgNCxBKDE4KSwgMyxBKCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sCS8qICAxOE1i L3MgKi8KKwl7IDQsQSgyNCksIDMsQSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LAkvKiAgMjRN Yi9zICovCisJeyA0LEEoMzYpLCAzLEEoIDI0KSwgNCxBKCAxOCksIDIsQSggNikgfSwJLyogIDM2 TWIvcyAqLworCXsgNCxBKDQ4KSwgMyxBKCAzNiksIDQsQSggMjQpLCAyLEEoMTIpIH0sCS8qICA0 OE1iL3MgKi8KKwl7IDQsQSg1NCksIDMsQSggNDgpLCA0LEEoIDM2KSwgMixBKDI0KSB9CS8qICA1 NE1iL3MgKi8KK307CisKKyNkZWZpbmUgTkExKF9yKSBcCisJKCgoX3IpID09IDYuNSkgID8gOCA6 ICgoKF9yKSA9PSAxMykgID8gIDkgOiAoKChfcikgPT0gMTkuNSk/IDEwIDogXAorCSgoKF9yKSA9 PSAyNikgID8gMTEgOiAoKChfcikgPT0gMzkpICA/IDEyIDogKCgoX3IpID09IDUyKSAgPyAxMyA6 IFwKKwkoKChfcikgPT0gNTguNSk/IDE0IDogKCgoX3IpID09IDY1KSAgPyAxNSA6IDApKSkpKSkp KQorI2RlZmluZSBOQTIoX3IpIFwKKwkoKChfcikgPT0gMTMpID8gMTYgOiAoKChfcikgPT0gMjYp ID8gMTcgOiAoKChfcikgPT0gMzkpID8gMTggOiBcCisJKCgoX3IpID09IDUyKSA/IDE5IDogKCgo X3IpID09IDc4KSA/IDIwIDogKCgoX3IpID09IDEwNCk/IDIxIDogXAorCSgoKF9yKSA9PSAxMTcp PyAyMiA6ICgoKF9yKSA9PSAxMzApPyAyMyA6IDApKSkpKSkpKQorI2RlZmluZSBOQTMoX3IpIFwK KwkoKChfcikgPT0gMTkuNSkgID8gMjQgOiAoKChfcikgPT0gMzkpID8gMjUgOiAoKChfcikgPT0g NTguNSkgID8gMjYgOiBcCisJKCgoX3IpID09IDc4KSAgPyAyNyA6ICgoKF9yKSA9PSAxMTcpID8g MjggOiAoKChfcikgPT0gMTU2KSA/IDI5IDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzMCA6ICgo KF9yKSA9PSAxOTUpPyAzMSA6IDApKSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVk dWxlIHNlcmllc18xMW5hW10gPSB7CisJeyAzLEEoIDYpLCAzLEEoICA2KSwgMCxBKCAgNiksIDAs QSggNikgfSwgICAgICAgLyogICA2TWIvcyAqLworCXsgNCxBKCA5KSwgMyxBKCAgNiksIDQsQSgg IDYpLCAwLEEoIDYpIH0sICAgICAgIC8qICAgOU1iL3MgKi8KKwl7IDQsQSgxMiksIDMsQSggIDYp LCA0LEEoICA2KSwgMCxBKCA2KSB9LCAgICAgICAvKiAgMTJNYi9zICovCisJeyA0LEEoMTgpLCAz LEEoIDEyKSwgNCxBKCAgNiksIDIsQSggNikgfSwgICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxB KDI0KSwgMyxBKCAxOCksIDQsQSggMTIpLCAyLEEoIDYpIH0sICAgICAgIC8qICAyNE1iL3MgKi8K Kwl7IDQsQSgzNiksIDMsQSggMjQpLCA0LEEoIDE4KSwgMixBKCA2KSB9LCAgICAgICAvKiAgMzZN Yi9zICovCisJeyA0LEEoNDgpLCAzLEEoIDM2KSwgNCxBKCAyNCksIDIsQSgxMikgfSwgICAgICAg LyogIDQ4TWIvcyAqLworCXsgNCxBKDU0KSwgMyxBKCA0OCksIDQsQSggMzYpLCAyLEEoMjQpIH0s ICAgICAgIC8qICA1NE1iL3MgKi8KKworCS8qIDEgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEx KCA2LjUpLCAzLE5BMSggNi41KSwgMCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qIDYuNU1i L3MgKi8KKwl7IDQsTkExKCAgMTMpLCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYu NSkgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkExKDE5LjUpLCAzLE5BMSggNi41KSwgNCxOQTEo IDYuNSksIDAsTkExKDYuNSkgfSwgIC8qMTkuNU1iL3MgKi8KKwl7IDQsTkExKCAgMjYpLCAzLE5B MSgxOS41KSwgNCxOQTEoIDYuNSksIDIsTkExKDYuNSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQs TkExKCAgMzkpLCAzLE5BMSggIDI2KSwgNCxOQTEoMTkuNSksIDIsTkExKDYuNSkgfSwgIC8qICAz OU1iL3MgKi8KKwl7IDQsTkExKCAgNTIpLCAzLE5BMSggIDM5KSwgNCxOQTEoICAyNiksIDIsTkEx KDYuNSkgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkExKDU4LjUpLCAzLE5BMSggIDUyKSwgNCxO QTEoICAzOSksIDIsTkExKCAxMykgfSwgIC8qNTguNU1iL3MgKi8KKwl7IDQsTkExKCAgNjUpLCAz LE5BMSg1OC41KSwgNCxOQTEoICA1MiksIDIsTkExKCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKwor CS8qIDIgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEyKCAgMTMpLCAzLE5BMiggIDEzKSwgMCxO QTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkEyKCAgMjYpLCAz LE5BMiggIDEzKSwgNCxOQTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7 IDQsTkEyKCAgMzkpLCAzLE5BMiggIDI2KSwgNCxOQTIoICAxMyksIDIsTkEyKCAxMykgfSwgIC8q ICAzOU1iL3MgKi8KKwl7IDQsTkEyKCAgNTIpLCAzLE5BMiggIDM5KSwgNCxOQTIoICAyNiksIDIs TkEyKCAxMykgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkEyKCAgNzgpLCAzLE5BMiggIDUyKSwg NCxOQTIoICAzOSksIDIsTkEyKCAxMykgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDQsTkEyKCAxMDQp LCAzLE5BMiggIDc4KSwgNCxOQTIoICA1MiksIDIsTkEyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8K Kwl7IDQsTkEyKCAxMTcpLCAzLE5BMiggMTA0KSwgNCxOQTIoICA3OCksIDIsTkEyKCAyNikgfSwg IC8qIDExN01iL3MgKi8KKwl7IDQsTkEyKCAxMzApLCAzLE5BMiggMTE3KSwgNCxOQTIoIDEwNCks IDIsTkEyKCAyNikgfSwgICAvKiAxMzBNYi9zICovCisKKwkvKiAzIHN0cmVhbSByYXRlcyAqLwor CisJeyAzLE5BMygxOS41KSwgMyxOQTMoMTkuNSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9 LCAgLyogIDE5TWIvcyAqLworCXsgMyxOQTMoICAzOSksIDMsTkEzKDE5LjUpLCAwLE5BMygxOS41 KSwgMCxOQTMoMTkuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDMsTkEzKDU4LjUpLCAzLE5BMygg IDM5KSwgMCxOQTMoMTkuNSksIDAsTkEzKDE5LjUpIH0sICAvKiAgNThNYi9zICovCisJeyAzLE5B MyggIDc4KSwgMyxOQTMoNTguNSksIDAsTkEzKCAgMzkpLCAwLE5BMygxOS41KSB9LCAgLyogIDc4 TWIvcyAqLworCXsgMyxOQTMoIDExNyksIDMsTkEzKCAgNzgpLCAwLE5BMyg1OC41KSwgMCxOQTMo MTkuNSkgfSwgIC8qIDExN01iL3MgKi8KKwl7IDMsTkEzKCAxNTYpLCAzLE5BMyggMTE3KSwgMCxO QTMoICA3OCksIDAsTkEzKDE5LjUpIH0sICAvKiAgMTU2TWIvcyAqLworCXsgMyxOQTMoMTc1LjUp LCAzLE5BMyggMTU2KSwgMCxOQTMoIDExNyksIDAsTkEzKCAgMzkpIH0sICAvKiAgMTc1TWIvcyAq LworCXsgMyxOQTMoIDE5NSksIDMsTkEzKCAxOTUpLCAwLE5BMyggMTU2KSwgMCxOQTMoNTguNSkg fSwgIC8qIDE5NU1iL3MgKi8KK307CisjdW5kZWYgQQorI3VuZGVmIE5BMworI3VuZGVmIE5BMgor I3VuZGVmIE5BMQorCisjZGVmaW5lIEcoX3IpIFwKKyAgICAoKChfcikgPT0gMSkgICA/IDAgOiAo KChfcikgPT0gMikgICA/IDEgOiAoKChfcikgPT0gNS41KSA/IDIgOiBcCisgICAgKCgoX3IpID09 IDExKSAgPyAzIDogKCgoX3IpID09IDYpICAgPyA0IDogKCgoX3IpID09IDkpICAgPyA1IDogXAor ICAgICgoKF9yKSA9PSAxMikgID8gNiA6ICgoKF9yKSA9PSAxOCkgID8gNyA6ICgoKF9yKSA9PSAy NCkgID8gOCA6IFwKKyAgICAoKChfcikgPT0gMzYpICA/IDkgOiAoKChfcikgPT0gNDgpICA/IDEw IDogKCgoX3IpID09IDU0KSAgPyAxMSA6IDApKSkpKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFnW10gPSB7CisJeyAzLEcoIDEpLCAzLEcoICAxKSwgMCxH KCAgMSksIDAsRyggMSkgfSwJLyogICAxTWIvcyAqLworCXsgNCxHKCAyKSwgMyxHKCAgMSksIDQs RyggIDEpLCAwLEcoIDEpIH0sCS8qICAgMk1iL3MgKi8KKwl7IDQsRyg1LjUpLDMsRyggIDIpLCA0 LEcoICAxKSwgMixHKCAxKSB9LAkvKiA1LjVNYi9zICovCisJeyA0LEcoMTEpLCAzLEcoNS41KSwg NCxHKCAgMiksIDIsRyggMSkgfSwJLyogIDExTWIvcyAqLworCXsgNCxHKCA2KSwgMyxHKDUuNSks IDQsRyggIDIpLCAyLEcoIDEpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsRyggOSksIDMsRyggIDYp LCA0LEcoNS41KSwgMixHKCAxKSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEcoMTIpLCAzLEcoIDEx KSwgNCxHKDUuNSksIDIsRyggMSkgfSwJLyogIDEyTWIvcyAqLworCXsgNCxHKDE4KSwgMyxHKCAx MiksIDQsRyggMTEpLCAyLEcoIDEpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsRygyNCksIDMsRygg MTgpLCA0LEcoIDEyKSwgMixHKCAxKSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEcoMzYpLCAzLEco IDI0KSwgNCxHKCAxOCksIDIsRyggMSkgfSwJLyogIDM2TWIvcyAqLworCXsgNCxHKDQ4KSwgMyxH KCAzNiksIDQsRyggMjQpLCAyLEcoIDEpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsRyg1NCksIDMs RyggNDgpLCA0LEcoIDM2KSwgMixHKCAxKSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZpbmUg TkcxKF9yKSBcCisJKCgoX3IpID09IDYuNSkgPyAxMiA6ICgoKF9yKSA9PSAxMykgPyAxMyA6ICgo KF9yKSA9PSAxOS41KT8gMTQgOiBcCisJKCgoX3IpID09IDI2KSAgPyAxNSA6ICgoKF9yKSA9PSAz OSkgPyAxNiA6ICgoKF9yKSA9PSA1MikgID8gMTcgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxOCA6 ICgoKF9yKSA9PSA2NSkgPyAxOSA6IDApKSkpKSkpKQorI2RlZmluZSBORzIoX3IpIFwKKwkoKChf cikgPT0gMTMpICA/IDIwIDogKCgoX3IpID09IDI2KSA/IDIxIDogKCgoX3IpID09IDM5KSAgPyAy MiA6IFwKKwkoKChfcikgPT0gNTIpICA/IDIzIDogKCgoX3IpID09IDc4KSA/IDI0IDogKCgoX3Ip ID09IDEwNCkgPyAyNSA6IFwKKwkoKChfcikgPT0gMTE3KSA/IDI2IDogKCgoX3IpID09IDEzMCk/ IDI3IDogMCkpKSkpKSkpCisjZGVmaW5lIE5HMyhfcikgXAorCSgoKF9yKSA9PSAxOS41KSAgPyAy OCA6ICgoKF9yKSA9PSAzOSkgPyAyOSA6ICgoKF9yKSA9PSA1OC41KSAgPyAzMCA6IFwKKwkoKChf cikgPT0gNzgpICA/IDMxIDogKCgoX3IpID09IDExNykgPyAzMiA6ICgoKF9yKSA9PSAxNTYpID8g MzMgOiBcCisJKCgoX3IpID09IDE3NS41KSA/IDM0IDogKCgoX3IpID09IDE5NSk/IDM1IDogMCkp KSkpKSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuZ1tdID0g eworCXsgMyxHKCAxKSwgMyxHKCAgMSksIDAsRyggIDEpLCAwLEcoIDEpIH0sICAgICAgIC8qICAg MU1iL3MgKi8KKwl7IDQsRyggMiksIDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LCAgICAg ICAvKiAgIDJNYi9zICovCisJeyA0LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkg fSwgICAgICAgLyogNS41TWIvcyAqLworCXsgNCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAy LEcoIDEpIH0sICAgICAgIC8qICAxMU1iL3MgKi8KKwl7IDQsRyggNiksIDMsRyg1LjUpLCA0LEco ICAyKSwgMixHKCAxKSB9LCAgICAgICAvKiAgIDZNYi9zICovCisJeyA0LEcoIDkpLCAzLEcoICA2 KSwgNCxHKDUuNSksIDIsRyggMSkgfSwgICAgICAgLyogICA5TWIvcyAqLworCXsgNCxHKDEyKSwg MyxHKCAxMSksIDQsRyg1LjUpLCAyLEcoIDEpIH0sICAgICAgIC8qICAxMk1iL3MgKi8KKwl7IDQs RygxOCksIDMsRyggMTIpLCA0LEcoIDExKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMThNYi9zICov CisJeyA0LEcoMjQpLCAzLEcoIDE4KSwgNCxHKCAxMiksIDIsRyggMSkgfSwgICAgICAgLyogIDI0 TWIvcyAqLworCXsgNCxHKDM2KSwgMyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sICAgICAg IC8qICAzNk1iL3MgKi8KKwl7IDQsRyg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9 LCAgICAgICAvKiAgNDhNYi9zICovCisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIs RyggMSkgfSwgICAgICAgLyogIDU0TWIvcyAqLworCisJLyogMSBzdHJlYW0gcmF0ZXMgKi8KKwor CXsgMyxORzEoIDYuNSksIDMsTkcxKCA2LjUpLCAwLE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAg LyogNi41TWIvcyAqLworCXsgNCxORzEoICAxMyksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwg MCxORzEoNi41KSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzEoMTkuNSksIDMsTkcxKCA2LjUp LCA0LE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyoxOS41TWIvcyAqLworCXsgNCxORzEoICAy NiksIDMsTkcxKDE5LjUpLCA0LE5HMSggNi41KSwgMixORzEoNi41KSB9LCAgLyogIDI2TWIvcyAq LworCXsgNCxORzEoICAzOSksIDMsTkcxKCAgMjYpLCA0LE5HMSgxOS41KSwgMixORzEoNi41KSB9 LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzEoICA1MiksIDMsTkcxKCAgMzkpLCA0LE5HMSggIDI2 KSwgMixORzEoNi41KSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzEoNTguNSksIDMsTkcxKCAg NTIpLCA0LE5HMSggIDM5KSwgMixORzEoIDEzKSB9LCAgLyo1OC41TWIvcyAqLworCXsgNCxORzEo ICA2NSksIDMsTkcxKDU4LjUpLCA0LE5HMSggIDUyKSwgMixORzEoIDEzKSB9LCAgLyogIDY1TWIv cyAqLworCisJLyogMiBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzIoICAxMyksIDMsTkcyKCAg MTMpLCAwLE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzIo ICAyNiksIDMsTkcyKCAgMTMpLCA0LE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDI2TWIv cyAqLworCXsgNCxORzIoICAzOSksIDMsTkcyKCAgMjYpLCA0LE5HMiggIDEzKSwgMixORzIoIDEz KSB9LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzIoICA1MiksIDMsTkcyKCAgMzkpLCA0LE5HMigg IDI2KSwgMixORzIoIDEzKSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzIoICA3OCksIDMsTkcy KCAgNTIpLCA0LE5HMiggIDM5KSwgMixORzIoIDEzKSB9LCAgLyogIDc4TWIvcyAqLworCXsgNCxO RzIoIDEwNCksIDMsTkcyKCAgNzgpLCA0LE5HMiggIDUyKSwgMixORzIoIDEzKSB9LCAgLyogMTA0 TWIvcyAqLworCXsgNCxORzIoIDExNyksIDMsTkcyKCAxMDQpLCA0LE5HMiggIDc4KSwgMixORzIo IDI2KSB9LCAgLyogMTE3TWIvcyAqLworCXsgNCxORzIoIDEzMCksIDMsTkcyKCAxMTcpLCA0LE5H MiggMTA0KSwgMixORzIoIDI2KSB9LCAgLyogMTMwTWIvcyAqLworCisJLyogMyBzdHJlYW0gcmF0 ZXMgKi8KKworCXsgMyxORzMoMTkuNSksIDMsTkczKDE5LjUpLCAwLE5HMygxOS41KSwgMCxORzMo MTkuNSkgfSwgIC8qICAxOU1iL3MgKi8KKwl7IDMsTkczKCAgMzkpLCAzLE5HMygxOS41KSwgMCxO RzMoMTkuNSksIDAsTkczKDE5LjUpIH0sICAvKiAgMzlNYi9zICovCisJeyAzLE5HMyg1OC41KSwg MyxORzMoICAzOSksIDAsTkczKDE5LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDU4TWIvcyAqLwor CXsgMyxORzMoICA3OCksIDMsTkczKDU4LjUpLCAwLE5HMyggIDM5KSwgMCxORzMoMTkuNSkgfSwg IC8qICA3OE1iL3MgKi8KKwl7IDMsTkczKCAxMTcpLCAzLE5HMyggIDc4KSwgMCxORzMoNTguNSks IDAsTkczKDE5LjUpIH0sICAvKiAxMTdNYi9zICovCisJeyAzLE5HMyggMTU2KSwgMyxORzMoIDEx NyksIDAsTkczKCAgNzgpLCAwLE5HMygxOS41KSB9LCAgLyogIDE1Nk1iL3MgKi8KKwl7IDMsTkcz KDE3NS41KSwgMyxORzMoIDE1NiksIDAsTkczKCAxMTcpLCAwLE5HMyggIDM5KSB9LCAgLyogIDE3 NU1iL3MgKi8KKwl7IDMsTkczKCAxOTUpLCAzLE5HMyggMTk1KSwgMCxORzMoIDE1NiksIDAsTkcz KDU4LjUpIH0sICAvKiAxOTVNYi9zICovCisKK307CisjdW5kZWYgRworI3VuZGVmIE5HMworI3Vu ZGVmIE5HMgorI3VuZGVmIE5HMQorCisjZGVmaW5lIEgoX3IpIFwKKyAgICAoKChfcikgPT0gMykg ICA/IDAgOiAoKChfcikgPT0gNC41KSA/IDEgOiAoKChfcikgPT0gNikgID8gMiA6IFwKKyAgICAo KChfcikgPT0gOSkgICA/IDMgOiAoKChfcikgPT0gMTIpICA/IDQgOiAoKChfcikgPT0gMTgpID8g NSA6IFwKKyAgICAoKChfcikgPT0gMjQpICA/IDYgOiAoKChfcikgPT0gMjcpICA/IDcgOiAwKSkp KSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfaGFsZltdID0gewor CXsgMyxIKCAzKSwgMyxIKCAgMyksIDAsSCggIDMpLCAwLEgoIDMpIH0sCS8qICAgM01iL3MgKi8K Kwl7IDQsSCg0LjUpLDMsSCggIDMpLCA0LEgoICAzKSwgMCxIKCAzKSB9LAkvKiA0LjVNYi9zICov CisJeyA0LEgoIDYpLCAzLEgoICAzKSwgNCxIKCAgMyksIDAsSCggMykgfSwJLyogICA2TWIvcyAq LworCXsgNCxIKCA5KSwgMyxIKCAgNiksIDQsSCggIDMpLCAyLEgoIDMpIH0sCS8qICAgOU1iL3Mg Ki8KKwl7IDQsSCgxMiksIDMsSCggIDkpLCA0LEgoICA2KSwgMixIKCAzKSB9LAkvKiAgMTJNYi9z ICovCisJeyA0LEgoMTgpLCAzLEgoIDEyKSwgNCxIKCAgOSksIDIsSCggMykgfSwJLyogIDE4TWIv cyAqLworCXsgNCxIKDI0KSwgMyxIKCAxOCksIDQsSCggMTIpLCAyLEgoIDYpIH0sCS8qICAyNE1i L3MgKi8KKwl7IDQsSCgyNyksIDMsSCggMjQpLCA0LEgoIDE4KSwgMixIKDEyKSB9CS8qICAyN01i L3MgKi8KK307CisjdW5kZWYgSAorCisjaWZkZWYgUQorI3VuZGVmIFEKKyNlbmRpZgorI2RlZmlu ZSBRKF9yKSBcCisgICAgKCgoX3IpID09IDEuNSkgPyAwIDogKCgoX3IpID09Mi4yNSkgPyAxIDog KCgoX3IpID09IDMpICA/IDIgOiBcCisgICAgKCgoX3IpID09IDQuNSkgPyAzIDogKCgoX3IpID09 ICA2KSAgPyA0IDogKCgoX3IpID09IDkpICA/IDUgOiBcCisgICAgKCgoX3IpID09IDEyKSAgPyA2 IDogKCgoX3IpID09IDEzLjUpPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4 c2NoZWR1bGUgc2VyaWVzX3F1YXJ0ZXJbXSA9IHsKKwl7IDMsUSggMS41KSwzLFEoMS41KSwgMCxR KDEuNSksIDAsUSgxLjUpIH0sCS8qIDEuNU1iL3MgKi8KKwl7IDQsUSgyLjI1KSwzLFEoMS41KSwg NCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qMi4yNU1iL3MgKi8KKwl7IDQsUSggICAzKSwzLFEoMS41 KSwgNCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qICAgM01iL3MgKi8KKwl7IDQsUSggNC41KSwzLFEo ICAzKSwgNCxRKDEuNSksIDIsUSgxLjUpIH0sCS8qIDQuNU1iL3MgKi8KKwl7IDQsUSggICA2KSwz LFEoNC41KSwgNCxRKCAgMyksIDIsUSgxLjUpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsUSggICA5 KSwzLFEoICA2KSwgNCxRKDQuNSksIDIsUSgxLjUpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsUSgg IDEyKSwzLFEoICA5KSwgNCxRKCAgNiksIDIsUSggIDMpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQs USgxMy41KSwzLFEoIDEyKSwgNCxRKCAgOSksIDIsUSggIDYpIH0JLyoxMy41TWIvcyAqLworfTsK KyN1bmRlZiBRCisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExF X1RYU0NIRURVTEVTX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAkocmV2aXNpb24gMjU0 ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3Jzc2FkYXB0LmgJKHdvcmtpbmcgY29weSkKQEAg LTMyLDYgKzMyLDggQEAKICNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SU1NBREFQVF9IXwog I2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JTU0FEQVBUX0hfCiAKKyNpbmNsdWRlIDxuZXQ4 MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCiAvKiBEYXRhLXJhdGUgYWRhcHRhdGlvbiBsb29z ZWx5IGJhc2VkIG9uICJMaW5rIEFkYXB0YXRpb24gU3RyYXRlZ3kKICAqIGZvciBJRUVFIDgwMi4x MSBXTEFOIHZpYSBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggTWVhc3VyZW1lbnQiCiAgKiBieSBK YXZpZXIgZGVsIFByYWRvIFBhdm9uIGFuZCBTdW5naHl1biBDaG9pLgpAQCAtNDMsNiArNDUsNyBA QAogI2RlZmluZQlJRUVFODAyMTFfUlNTQURBUFRfQktUUE9XRVIJMwkvKiAyKipfQktUUE9XRVIg Ki8KIAogc3RydWN0IGllZWU4MDIxMV9yc3NhZGFwdCB7CisJc3RydWN0IGllZWU4MDIxMV9yY19z dGF0IHJzc2FkYXB0X3N0YXQ7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwOwogCWlu dAlpbnRlcnZhbDsJCQkvKiB1cGRhdGUgaW50ZXJ2YWwgKHRpY2tzKSAqLwogfTsKSW5kZXg6IG5l dDgwMjExL2llZWU4MDIxMV9hbXJyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjEx X2FtcnIuaAkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuaAko d29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBfTkVUODAyMTFfSUVFRTgw MjExX0FNUlJfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9BTVJSX0hfCiAKKyNpbmNs dWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogLyotCiAgKiBOYWl2ZSBpbXBsZW1l bnRhdGlvbiBvZiB0aGUgQWRhcHRpdmUgTXVsdGkgUmF0ZSBSZXRyeSBhbGdvcml0aG06CiAgKgpA QCAtMzUsNiArMzYsNyBAQAogc3RydWN0IGllZWU4MDIxMXZhcDsKIAogc3RydWN0IGllZWU4MDIx MV9hbXJyIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgYW1ycl9zdGF0OwogCXVfaW50CWFt cnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCXVfaW50CWFtcnJfbWF4X3N1Y2Nlc3NfdGhyZXNo b2xkOwogCWludAlhbXJyX2ludGVydmFsOwkJLyogdXBkYXRlIGludGVydmFsICh0aWNrcykgKi8K SW5kZXg6IGRldi9pd24vaWZfaXduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2l3bi9pZl9pd24uYwko cmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2l3bi9pZl9pd24uYwkod29ya2luZyBjb3B5KQpAQCAt ODc2LDcgKzg3Niw4IEBACiAJaXZwLT5pdl9uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3RhdGU7CiAJ dmFwLT5pdl9uZXdzdGF0ZSA9IGl3bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRlY3RsX2lu aXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0 bF9pbml0KHZhcCwgMCk7CiAJLyogQ29tcGxldGUgc2V0dXAuICovCiAJaWVlZTgwMjExX3ZhcF9h dHRhY2godmFwLCBpd25fbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlp Yy0+aWNfb3Btb2RlID0gb3Btb2RlOwpAQCAtMjQ5OSw3ICsyNTAwLDggQEAKIAl1aW50NjRfdCBi aXRtYXA7CiAJdWludDE2X3Qgc3NuOwogCXVpbnQ4X3QgdGlkOwotCWludCBhY2tmYWlsY250ID0g MCwgaSwgbGFzdGlkeCwgcWlkLCAqcmVzLCBzaGlmdDsKKwkvKiBpbnQgZmFpbGNudCA9IDA7ICov CisJaW50IGksIGxhc3RpZHgsIHFpZCwgKnJlcywgc2hpZnQ7CiAKIAlidXNfZG1hbWFwX3N5bmMo c2MtPnJ4cS5kYXRhX2RtYXQsIGRhdGEtPm1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwogCkBA IC0yNTYzLDEyICsyNTY1LDE4IEBACiAJZm9yIChpID0gMDsgYml0bWFwOyBpKyspIHsKIAkJaWYg KChiaXRtYXAgJiAxKSA9PSAwKSB7CiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVF ODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIE5VTEwpOyAvKiBq dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwkKIAkJfSBlbHNlIHsKIAkJCWlmcC0+aWZfb3Bh Y2tldHMrKzsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlf dmFwLCBuaSwKIAkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmYWNrZmFpbGNu dCwgTlVMTCk7CisjZW5kaWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5u aV92YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJfQog CQliaXRtYXAgPj49IDE7CiAJfQpAQCAtMjgwNywxMiArMjgxNSwxOCBAQAogCSAqLwogCWlmIChz dGF0dXMgJiBJV05fVFhfRkFJTCkgewogCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCWll ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCSAgICBJRUVFODAyMTFfUkFU RUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJaWVlZTgwMjEx X3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21w aWxlZC4gcWNjICovCiAJfSBlbHNlIHsKIAkJaWZwLT5pZl9vcGFja2V0cysrOworI2lmIDAKIAkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJICAgIElFRUU4MDIxMV9S QVRFQ1RMX1RYX1NVQ0NFU1MsICZhY2tmYWlsY250LCBOVUxMKTsKKyNlbmRpZgorCQlpZWVlODAy MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv bXBpbGVkLiBxY2MgKi8KIAl9CiAJbV9mcmVlbShtKTsKIAlpZWVlODAyMTFfZnJlZV9ub2RlKG5p KTsKSW5kZXg6IGRldi9id2kvaWZfYndpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3aS9pZl9id2ku YwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2J3aS9pZl9id2kuYwkod29ya2luZyBjb3B5KQpA QCAtNjE3LDcgKzYxNyw4IEBACiAjaWYgMAogCXZhcC0+aXZfdXBkYXRlX2JlYWNvbiA9IGJ3aV9i ZWFjb25fdXBkYXRlOwogI2VuZGlmCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8q IFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAw KTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBi d2lfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKQEAgLTMzNzcsOSArMzM3 OCwxMiBAQAogCQkJICogd2VsbCBzbyB0byBhdm9pZCBvdmVyLWFnZ3Jlc3NpdmUgZG93bnNoaWZ0 aW5nIHdlCiAJCQkgKiB0cmVhdCBhbnkgbnVtYmVyIG9mIHJldHJpZXMgYXMgIjEiLgogCQkJICov CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCSAg ICAoZGF0YV90eGNudCA+IDEpID8gSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUyA6CiAJCQkg ICAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZhY2tlZCwgTlVMTCk7CisjZW5k aWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBq dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQl9CiAKIAkJLyoKSW5kZXg6IGRldi9id24v aWZfYnduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3bi9pZl9id24uYwkocmV2aXNpb24gMjU0ODI2 KQorKysgZGV2L2J3bi9pZl9id24uYwkod29ya2luZyBjb3B5KQpAQCAtMjk3MCw3ICsyOTcwLDgg QEAKIAkvKiBvdmVycmlkZSBtYXggYWlkIHNvIHN0YSdzIGNhbm5vdCBhc3NvYyB3aGVuIHdlJ3Jl IG91dCBvZiBzdGEgaWQncyAqLwogCXZhcC0+aXZfbWF4X2FpZCA9IEJXTl9TVEFJRF9NQVg7CiAK LQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2Fw ICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCiAJLyogY29tcGxldGUgc2V0 dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us CkBAIC04OTkxLDggKzg5OTIsOSBAQAogCXN0cnVjdCBid25fc3RhdHMgKnN0YXRzID0gJm1hYy0+ bWFjX3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7CiAJc3RydWN0IGllZWU4MDIx MXZhcCAqdmFwOwotCWludCByZXRyeWNudCA9IDAsIHNsb3Q7Ci0KKwkvKmludCByZXRyeWNudCA9 IDAsIHNsb3Q7Ki8KKwlpbnQgc2xvdDsKKwkKIAlCV05fQVNTRVJUX0xPQ0tFRChtYWMtPm1hY19z Yyk7CiAKIAlpZiAoc3RhdHVzLT5pbSkKQEAgLTkwMjAsMTEgKzkwMjIsMTQgQEAKIAkJCQlpZiAo bWV0YS0+bXRfaXNsYXN0KSB7CiAJCQkJCW5pID0gbWV0YS0+bXRfbmk7CiAJCQkJCXZhcCA9IG5p LT5uaV92YXA7CisjaWYgMAogCQkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs IG5pLAogCQkJCQkgICAgc3RhdHVzLT5hY2sgPwogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNU TF9UWF9TVUNDRVNTIDoKIAkJCQkJICAgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwK IAkJCQkJICAgICZyZXRyeWNudCwgMCk7CisjZW5kaWYKKwkJCQkJaWVlZTgwMjExX3JhdGVjdGxf dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj ICovCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlzbG90ID0gYnduX2RtYV9uZXh0c2xvdChkciwg c2xvdCk7CkBAIC05MDQxLDExICs5MDQ2LDE0IEBACiAJCQl9CiAJCQluaSA9IHRwLT50cF9uaTsK IAkJCXZhcCA9IG5pLT5uaV92YXA7CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwKIAkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkgICAgICBJRUVFODAyMTFf UkFURUNUTF9UWF9TVUNDRVNTIDoKIAkJCSAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxV UkUsCiAJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJaWVlZTgwMjExX3JhdGVjdGxf dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj ICovCiAJCX0KIAkJYnduX3Bpb19oYW5kbGVfdHhlb2YobWFjLCBzdGF0dXMpOwogCX0KSW5kZXg6 IGRldi91c2Ivd2xhbi9pZl96eWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZfenlk LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl96eWQuYwkod29ya2luZyBj b3B5KQpAQCAtNDk2LDcgKzQ5Niw4IEBACiAJenZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3Rh dGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHp5ZF9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRl Y3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwodmFw LCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkBAIC02NjQsMTIg KzY2NSwxNSBAQAogCQkJICovCiAJCQluaSA9IGllZWU4MDIxMV9maW5kX3R4bm9kZSh2YXAsIHJl dHJ5LT5tYWNhZGRyKTsKIAkJCWlmIChuaSAhPSBOVUxMKSB7Ci0JCQkJaW50IHJldHJ5Y250ID0K LQkJCQkgICAgKGludCkobGUxNnRvaChyZXRyeS0+Y291bnQpICYgMHhmZik7CisJCQkJLyppbnQg cmV0cnljbnQgPQorCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAweGZmKTsq LwogCQkJCQorI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5p LAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJCSAgICAmcmV0cnlj bnQsIE5VTEwpOworI2VuZGlmCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFw LCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJCQkJaWVlZTgw MjExX2ZyZWVfbm9kZShuaSk7CiAJCQl9CiAJCQlpZiAobGUxNnRvaChyZXRyeS0+Y291bnQpICYg MHgxMDApCkluZGV4OiBkZXYvdXNiL3dsYW4vaWZfcnVtLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Vz Yi93bGFuL2lmX3J1bS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvdXNiL3dsYW4vaWZfcnVt LmMJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsOCBAQAogCiAJdXNiX2NhbGxvdXRfaW5p dF9tdHgoJnJ2cC0+cmF0ZWN0bF9jaCwgJnNjLT5zY19tdHgsIDApOwogCVRBU0tfSU5JVCgmcnZw LT5yYXRlY3RsX3Rhc2ssIDAsIHJ1bV9yYXRlY3RsX3Rhc2ssIHJ2cCk7Ci0JaWVlZTgwMjExX3Jh dGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIx MV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2 YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjEx X3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFf c3RhdHVzKTsKSW5kZXg6IGRldi91c2Ivd2xhbi9pZl91cmFsLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2 L3VzYi93bGFuL2lmX3VyYWwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3VzYi93bGFuL2lm X3VyYWwuYwkod29ya2luZyBjb3B5KQpAQCAtNTk4LDcgKzU5OCw4IEBACiAKIAl1c2JfY2FsbG91 dF9pbml0X210eCgmdXZwLT5yYXRlY3RsX2NoLCAmc2MtPnNjX210eCwgMCk7CiAJVEFTS19JTklU KCZ1dnAtPnJhdGVjdGxfdGFzaywgMCwgdXJhbF9yYXRlY3RsX3Rhc2ssIHV2cCk7Ci0JaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWll ZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRl cnZhbCh2YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KSW5k ZXg6IGRldi91c2Ivd2xhbi9pZl9ydW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZf cnVuLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl9ydW4uYwkod29ya2lu ZyBjb3B5KQpAQCAtODIwLDcgKzgyMCw4IEBACiAJcnZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3 c3RhdGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ1bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9y YXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAy MTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwo dmFwLCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkluZGV4OiBk ZXYvd3BpL2lmX3dwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi93cGkvaWZfd3BpLmMJKHJldmlzaW9u IDI1NDgyNikKKysrIGRldi93cGkvaWZfd3BpLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3 ODIsOCBAQAogCXd2cC0+bmV3c3RhdGUgPSB2YXAtPml2X25ld3N0YXRlOwogCXZhcC0+aXZfbmV3 c3RhdGUgPSB3cGlfbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJ LyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAs IDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBp ZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlpYy0+aWNf b3Btb2RlID0gb3Btb2RlOwpAQCAtMTU5Niw4ICsxNTk3LDExIEBACiAJCURQUklOVEZOKFdQSV9E RUJVR19UWCwgKCIlZCByZXRyaWVzXG4iLCBzdGF0LT5udHJpZXMpKTsKIAkJcmV0cnljbnQgPSAx OwogCX0KKyNpZiAwCiAJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgSUVF RTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRp ZgorCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0 IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCiAJLyogWFhYIG9lcnJvcnMgc2hvdWxkIG9ubHkg Y291bnQgZXJyb3JzICFtYXh0cmllcyAqLwogCWlmICgobGUzMnRvaChzdGF0LT5zdGF0dXMpICYg MHhmZikgIT0gMSkKSW5kZXg6IGRldi9yYWwvcnQyNTYwLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh bC9ydDI1NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI1NjAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw4IEBACiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ0MjU2MF9u ZXdzdGF0ZTsKIAl2YXAtPml2X3VwZGF0ZV9iZWFjb24gPSBydDI1NjBfYmVhY29uX3VwZGF0ZTsK IAotCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBj YXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0 dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us IGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMp ID09IHZhcCkKQEAgLTk1NSw5ICs5NTYsMTMgQEAKIAogCQkJRFBSSU5URk4oc2MsIDEwLCAiJXNc biIsICJkYXRhIGZyYW1lIHNlbnQgc3VjY2Vzc2Z1bGx5Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9 IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisj aWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAg IElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7 CisjZW5kaWYKKwogCQkJaWZwLT5pZl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk2Nyw5 ICs5NzIsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBzZW50IGFmdGVyICV1 IHJldHJpZXNcbiIsCiAJCQkgICAgcmV0cnljbnQpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVF ODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAK IAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVF ODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2Vu ZGlmCiAJCQlpZnAtPmlmX29wYWNrZXRzKys7CiAJCQlicmVhazsKIApAQCAtOTc5LDkgKzk4Nywx MiBAQAogCQkJRFBSSU5URk4oc2MsIDksICJkYXRhIGZyYW1lIGZhaWxlZCBhZnRlciAlZCByZXRy aWVzXG4iLAogCQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjEx X0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs IG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjEx X1JBVEVDVExfVFhfRkFJTFVSRSwKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgog CQkJaWZwLT5pZl9vZXJyb3JzKys7CiAJCQlicmVhazsKIApJbmRleDogZGV2L3JhbC9ydDI2NjEu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBkZXYvcmFsL3J0MjY2MS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBk ZXYvcmFsL3J0MjY2MS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDggQEAKIAl2YXAt Pml2X3VwZGF0ZV9iZWFjb24gPSBydDI2NjFfYmVhY29uX3VwZGF0ZTsKICNlbmRpZgogCi0JaWVl ZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLwor CWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwog CWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVlZTgw MjExX21lZGlhX3N0YXR1cyk7CiAJaWYgKFRBSUxRX0ZJUlNUKCZpYy0+aWNfdmFwcykgPT0gdmFw KQpAQCAtOTA1LDkgKzkwNiwxMiBAQAogCQkJRFBSSU5URk4oc2MsIDEwLCAiZGF0YSBmcmFtZSBz ZW50IHN1Y2Nlc3NmdWxseSBhZnRlciAiCiAJCQkgICAgIiVkIHJldHJpZXNcbiIsIHJldHJ5Y250 KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtl IGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkJ CQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9vcGFja2V0cysrOwog CQkJYnJlYWs7CiAKQEAgLTkxNyw5ICs5MjEsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiJXNc biIsCiAJCQkgICAgInNlbmRpbmcgZGF0YSBmcmFtZSBmYWlsZWQgKHRvbyBtdWNoIHJldHJpZXMp Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFr ZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv bXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsCiAJ CQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb2Vycm9ycysrOwog CQkJYnJlYWs7CiAKSW5kZXg6IGRldi9yYWwvcnQyODYwLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh bC9ydDI4NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI4NjAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw4IEBACiAJLyogSFcgc3VwcG9ydHMgdXAgdG8gMjU1IFNU QXMgKDAtMjU0KSBpbiBIb3N0QVAgYW5kIElCU1MgbW9kZXMgKi8KIAl2YXAtPml2X21heF9haWQg PSBtaW4oSUVFRTgwMjExX0FJRF9NQVgsIFJUMjg2MF9XQ0lEX01BWCk7CiAKLQlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgw MjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVk aWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC0x MTIxLDExICsxMTIyLDE3IEBACiAJCQkJcmV0cnljbnQgPSAxOwogCQkJZWxzZQogCQkJCXJldHJ5 Y250ID0gMDsKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5p LCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQlpZWVl ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVFODAy MTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCX0gZWxz ZSB7CisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVM TCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJaWVlZTgwMjEx X3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JB VEVDVExfVFhfRkFJTFVSRSwgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9v ZXJyb3JzKys7CiAJCX0KIAl9CkluZGV4OiBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2 L2F0aC9pZl9hdGhfc3lzY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKIAog I2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9p ZWVlODAyMTFfcmVnZG9tYWluLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj dGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIx MS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5kaWYKQEAgLTYwMiw2ICs2MDMsMjggQEAKIH0KICNl bmRpZiAvKiBBVEhfREVCVUdfQUxRICovCiAKK3N0YXRpYyBpbnQKK2F0aF9zeXNjdGxfcmF0ZWN0 bF9zdGF0cyhTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0g YXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNjLT5zY19pZnAtPmlmX2wyY29tOyAK KwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXA7CisJaW50IGVycm9yLCB2OworCisJdiA9IDA7CisJ ZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmdiwgMCwgcmVxKTsKKwlpZiAoZXJyb3Ig fHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwcmludGYoIlxuWyVzXTogcGVy LWRldmljZSBuZXQ4MDIxMSByYXRlY3RsIHN0YXRpc3RpY3NcbiIsIAorCQkJaWMtPmljX2lmcC0+ aWZfeG5hbWUpOworCVRBSUxRX0ZPUkVBQ0godmFwLCAmaWMtPmljX3ZhcHMsIGl2X25leHQpIHsK KwkJaWVlZTgwMjExX3JhdGVjdGxfc3RhdHModmFwKTsKKwl9CisJCQorCXJldHVybiAwOworfQor CiB2b2lkCiBhdGhfc3lzY3RsYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewpAQCAtNzky LDYgKzgxNSwxMCBAQAogI2lmZGVmCUFUSF9ERUJVR19BTFEKIAlhdGhfc3lzY3RsX2FscV9hdHRh Y2goc2MpOwogI2VuZGlmCisJCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO KHRyZWUpLCBPSURfQVVUTywKKwkJInJhdGVjdGxfc3RhdHMiLCBDVExUWVBFX0lOVCB8IENUTEZM QUdfUlcsIHNjLCAwLAorCQlhdGhfc3lzY3RsX3JhdGVjdGxfc3RhdHMsICJJIiwgInBlci1kZXZp Y2UgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CiB9CiAKIHN0YXRpYyBpbnQKSW5kZXg6 IGRldi9hdGgvaWZfYXRoX3R4X2h0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2F0aC9pZl9hdGhfdHhf aHQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2F0aC9pZl9hdGhfdHhfaHQuYwkod29ya2lu ZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjEx X3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKworI2lu Y2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjExX1NV UFBPUlRfU1VQRVJHCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgogI2Vu ZGlmCkBAIC0yMjEsMTMgKzIyMyw0NyBAQAogdm9pZAogYXRoX3R4X3JhdGVfZmlsbF9yY2ZsYWdz KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9ub2RlOwotCXN0cnVjdCBpZWVlODAyMTFjb20gKmlj ID0gbmktPm5pX2ljOworCS8vIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k ZTsKKwkvLyBzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKIAljb25zdCBIQUxf UkFURV9UQUJMRSAqcnQgPSBzYy0+c2NfY3VycmF0ZXM7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMg KnJjID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgYXRoX3JjX3NlcmllcyAqYXRoX3Jj ID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2lu Zm8gPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3Ry dWN0IG1fdGFnICptdGFnOwogCXVpbnQ4X3QgcmF0ZTsKIAlpbnQgaTsKIAorCW10YWcgPSBtX3Rh Z19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19S QVRFQ1RMLCBOVUxMKTsKKwlpZiAoTlVMTCA9PSBtdGFnKQorCQlyZXR1cm47CisKKwlyY19pbmZv ID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwlyYyA9IHJjX2luZm8t PmlyaV9yYzsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykg eworCQlpZiAocmNbaV0udHJpZXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJhdGUgPSBydC0+ aW5mb1tyY1tpXS5yaXhdLnJhdGVDb2RlOworCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFf UkFURUNUTF9GTEFHX1NQKQorCQkJcmF0ZSB8PSBydC0+aW5mb1tyY1tpXS5yaXhdLnNob3J0UHJl YW1ibGU7CisKKwkJcmNbaV0ucmF0ZWNvZGUgPSByYXRlOworCisJCWF0aF9yY1tpXS5yaXggPSBy Y1tpXS5yaXg7CisJCWF0aF9yY1tpXS50cmllcyA9IHJjW2ldLnRyaWVzOworCQlhdGhfcmNbaV0u ZmxhZ3MgPSByY1tpXS5mbGFnczsKKwkJYXRoX3JjW2ldLnJhdGVjb2RlID0gcmNbaV0ucmF0ZWNv ZGU7CisJCWF0aF9yY1tpXS50eF9wb3dlcl9jYXAgPSByY1tpXS50eF9wb3dlcl9jYXA7CisJCWF0 aF9yY1tpXS5tYXg0bXNmcmFtZWxlbiA9IHJjW2ldLm1heDRtc2ZyYW1lbGVuOworCQkKKwkJRFBS SU5URihzYywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCisJCSAgICAiJXM6IGk9JWQsIHJhdGU9MHgl eCwgZmxhZ3M9MHgleCwgbWF4NG1zPSVkXG4iLAorCQkgICAgX19mdW5jX18sIGksIHJhdGUsIHJj W2ldLmZsYWdzLCByY1tpXS5tYXg0bXNmcmFtZWxlbik7CisJfQorCisjaWYgMAogCWZvciAoaSA9 IDA7IGkgPCBBVEhfUkNfTlVNOyBpKyspIHsKIAkJcmNbaV0uZmxhZ3MgPSAwOwogCQlpZiAocmNb aV0udHJpZXMgPT0gMCkKQEAgLTMyNSw2ICszNjEsNyBAQAogCQkgICAgIiVzOiBpPSVkLCByYXRl PTB4JXgsIGZsYWdzPTB4JXgsIG1heDRtcz0lZFxuIiwKIAkJICAgIF9fZnVuY19fLCBpLCByYXRl LCByY1tpXS5mbGFncywgcmNbaV0ubWF4NG1zZnJhbWVsZW4pOwogCX0KKyNlbmRpZgogfQogCiAv KgpJbmRleDogZGV2L2F0aC9pZl9hdGhfdHguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRoL2lmX2F0 aF90eC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvYXRoL2lmX2F0aF90eC5jCSh3b3JraW5n IGNvcHkpCkBAIC03Miw2ICs3Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFf dmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisjaW5j bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQ UE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5k aWYKQEAgLTEzODcsNiArMTM4OSw5IEBACiBzdGF0aWMgdm9pZAogYXRoX3R4X2RvX3JhdGVsb29r dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKKwlzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CisJc3RydWN0IGllZWU4MDIxMV9yY19p bmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBO VUxMOwogCXVpbnQ4X3QgcmF0ZSwgcml4OwogCWludCB0cnkwOwogCkBAIC0xMzk1LDcgKzE0MDAs NyBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgcHJldmlvdXMgc3RhdGUgKi8KIAliemVybyhiZi0+ YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YoYmYtPmJmX3N0YXRlLmJmc19yYykpOwotCisjaWYgMAog CUFUSF9OT0RFX0xPQ0soQVRIX05PREUoYmYtPmJmX25vZGUpKTsKIAlhdGhfcmF0ZV9maW5kcmF0 ZShzYywgQVRIX05PREUoYmYtPmJmX25vZGUpLCBiZi0+YmZfc3RhdGUuYmZzX3NocHJlYW0sCiAJ ICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAmcml4LCAmdHJ5MCwgJnJhdGUpOwpAQCAtMTQw OSw3ICsxNDE0LDI1IEBACiAJCWF0aF9yYXRlX2dldHh0eHJhdGVzKHNjLCBBVEhfTk9ERShiZi0+ YmZfbm9kZSksIHJpeCwKIAkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMpOwogCUFUSF9OT0RFX1VO TE9DSyhBVEhfTk9ERShiZi0+YmZfbm9kZSkpOworI2VuZGlmCiAKKwkvKiBuZXQ4MDIxMSByYXRl Y3RsICovCisJcmNfaW5mbyA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZi0+ YmZfbSk7CisJcmMgPSByY19pbmZvLT5pcmlfcmM7CisJCisJcmNfaW5mby0+aXJpX2ZsYWdzID0g MDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19zaHByZWFtKQorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19TUDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19hZ2dy KQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwor CXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuOworCisJaWVl ZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJcml4ID0gcmNbMF0ucml4Owor CXRyeTAgPSByY1swXS50cmllczsKKwlyYXRlID0gbmktPm5pX3R4cmF0ZTsKKwogCXNjLT5zY190 eHJpeCA9IHJpeDsJLyogZm9yIExFRCBibGlua2luZyAqLwogCXNjLT5zY19sYXN0ZGF0YXJpeCA9 IHJpeDsJLyogZm9yIGZhc3QgZnJhbWVzICovCiAJYmYtPmJmX3N0YXRlLmJmc190cnkwID0gdHJ5 MDsKQEAgLTE1MzAsNyArMTU1Myw4IEBACiAJICogZnJhbWVzIHRoYXQgbXVzdCBnbyBvdXQgLSBl ZyBtYW5hZ2VtZW50L3JhdyBmcmFtZXMuCiAJICovCiAJYmYtPmJmX3N0YXRlLmJmc190eGZsYWdz IHw9IEhBTF9UWERFU0NfQ0xSRE1BU0s7Ci0KKwkKKwliZi0+YmZfc3RhdGUuYmZzX2FnZ3IgPSAw OwogCS8qIFNldHVwIHRoZSBkZXNjcmlwdG9yIGJlZm9yZSBoYW5kb2ZmICovCiAJYXRoX3R4X2Rv X3JhdGVsb29rdXAoc2MsIGJmKTsKIAlhdGhfdHhfY2FsY19kdXJhdGlvbihzYywgYmYpOwpAQCAt NDA1OCw2ICs0MDgyLDcgQEAKIAlpbnQgdGlkID0gYmYtPmJmX3N0YXRlLmJmc190aWQ7CiAJc3Ry dWN0IGF0aF90aWQgKmF0aWQgPSAmYW4tPmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3Rh dHVzICp0cyA9ICZiZi0+YmZfc3RhdHVzLmRzX3R4c3RhdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Jj X2luZm8gKnJjX2luZm8gPSBOVUxMOwogCiAJLyogVGhlIFRJRCBzdGF0ZSBpcyBwcm90ZWN0ZWQg YmVoaW5kIHRoZSBUWFEgbG9jayAqLwogCUFUSF9UWF9MT0NLKHNjKTsKQEAgLTQxMDgsOSArNDEz MywyMyBAQAogCSAqIGR1cmluZyBhIGh3IHF1ZXVlIGRyYWluIGFuZCB0aGUgZnJhbWUgd2FudGVk IGFuIEFDSy4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYmICgoYmYtPmJmX3N0YXRlLmJmc190eGZs YWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJeworI2lmIDAKIAkJYXRoX3R4X3VwZGF0 ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICB0cywgYmYtPmJm X3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMtPnRzX3N0YXR1cyA9PSAwKSA/IDAgOiAx KTsKKyNlbmRpZgorCQorCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCXJjX2luZm8gPSBpZWVl ODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChuaSwgYmYtPmJmX20pOworCQlpZWVlODAyMTFfcmF0 ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCTEsICh0cy0+dHNfc3RhdHVzID09IDAgPyAw IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLT50c19zaG9ydHJl dHJ5LCB0cy0+dHNfbG9uZ3JldHJ5LAorCQkJCXRzLT50c19maW5hbHRzaSwgdHMtPnRzX3JhdGUp OworCQlyY19pbmZvLT5pcmlfZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUjsJ CisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZv KTsKKwl9CiAKIAlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgZmFpbCk7CiB9CkBAIC00NDc1 LDYgKzQ1MTQsOCBAQAogCWludCBkcm9wcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9hbXBk dSAqdGFwOwogCWF0aF9idWZoZWFkIGJmX2NxOworCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzID0g YmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQ7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZv ICpyY19pbmZvID0gTlVMTDsKIAogCVRBSUxRX0lOSVQoJmJmX3EpOwogCVRBSUxRX0lOSVQoJmJm X2NxKTsKQEAgLTQ0ODUsMTAgKzQ1MjYsMjMgQEAKIAkgKiBYWFggdXNlIHRoZSBsZW5ndGggaW4g dGhlIGZpcnN0IGZyYW1lIGluIHRoZSBzZXJpZXM7CiAJICogWFhYIGp1c3Qgc28gdGhpbmdzIGFy ZSBjb25zaXN0ZW50IGZvciBub3cuCiAJICovCisjaWYgMAogCWF0aF90eF91cGRhdGVfcmF0ZWN0 cmwoc2MsIG5pLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLAogCSAgICAmYmZfZmlyc3QtPmJm X3N0YXR1cy5kc190eHN0YXQsCiAJICAgIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAog CSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5i ZnNfbmZyYW1lcyk7CisjZW5kaWYKKwkKKwkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJcmNfaW5m byA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZl9maXJzdC0+YmZfbSk7CisJ aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCWJmX2ZpcnN0LT5iZl9z dGF0ZS5iZnNfbmZyYW1lcywgCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsCisJ CQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCXRzLnRzX3Nob3J0cmV0cnksIHRz LnRzX2xvbmdyZXRyeSwKKwkJCXRzLnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsKKwlyY19pbmZv LT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCWllZWU4MDIxMV9y YXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKIAogCUFUSF9UWF9M T0NLKHNjKTsKIAl0YXAgPSBhdGhfdHhfZ2V0X3R4X3RpZChhbiwgdGlkLT50aWQpOwpAQCAtNDYy Niw5ICs0NjgwLDEyIEBACiAJaW50IG5mcmFtZXMgPSAwLCBuYmFkID0gMCwgbmY7CiAJaW50IHBr dGxlbjsKIAkvKiBYWFggdGhlcmUncyB0b28gbXVjaCBvbiB0aGUgc3RhY2s/ICovCisjaWYgMAog CXN0cnVjdCBhdGhfcmNfc2VyaWVzIHJjW0FUSF9SQ19OVU1dOworI2VuZGlmCiAJaW50IHR4c2Vx OwotCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qg bWJ1ZiAqbTsKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwgIiVzOiBjYWxsZWQ7 IGh3cV9kZXB0aD0lZFxuIiwKIAkgICAgX19mdW5jX18sIGF0aWQtPmh3cV9kZXB0aCk7CiAKQEAg LTQ3NDgsNyArNDgwNSw3IEBACiAJaXNhZ2dyID0gYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19hZ2dy OwogCWJhWzBdID0gdHMudHNfYmFfbG93OwogCWJhWzFdID0gdHMudHNfYmFfaGlnaDsKLQorI2lm IDAKIAkvKgogCSAqIENvcHkgdGhlIFRYIGNvbXBsZXRpb24gc3RhdHVzIGFuZCB0aGUgcmF0ZSBj b250cm9sCiAJICogc2VyaWVzIGZyb20gdGhlIGZpcnN0IGRlc2NyaXB0b3IsIGFzIGl0IG1heSBi ZSBmcmVlZApAQCAtNDc1Niw2ICs0ODEzLDExIEBACiAJICogaW50byB0aGluZ3MuCiAJICovCiAJ bWVtY3B5KHJjLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YocmMpKTsKKyNlbmRp ZgorCS8qIAorCSAqIEdldCB0aGUgbWJ1ZiBoZXJlLCBhcyBiZl9maXJzdCB3aWxsIGJlIHNldCB0 byBOVUxMIGxhdGVyLiAKKwkgKi8KKwltID0gYmZfZmlyc3QtPmJmX207IAogCiAJRFBSSU5URihz YywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCiAJICAgICIlczogdHhhX3N0YXJ0PSVkLCB0eF9vaz0l ZCwgc3RhdHVzPSUuOHgsIGZsYWdzPSUuOHgsICIKQEAgLTQ4NzMsOCArNDkzNSwyMCBAQAogCSAq IGNvbnRyb2wgY29kZS4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwKQorCXsKKyNpZiAwCQogCQlhdGhf dHhfdXBkYXRlX3JhdGVjdHJsKHNjLCBuaSwgcmMsICZ0cywgcGt0bGVuLCBuZnJhbWVzLAogCQkg ICAgbmJhZCk7CisjZW5kaWYKKwkJLyogbmV0ODAyMTEgcmF0ZWN0bCAqLworCQlyY19pbmZvID0g aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIG0pOworCQlpZWVlODAyMTFfcmF0ZWN0 bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCQluZnJhbWVzLCBuYmFkLCBwa3RsZW4sCisJCQkJ CXRzLnRzX3Nob3J0cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQkJdHMudHNfZmluYWx0c2ks IHRzLnRzX3JhdGUpOworCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExf SU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBu aSwgcmNfaW5mbyk7CisJfQogCiAJLyoKIAkgKiBzZW5kIGJhciBpZiB3ZSBkcm9wcGVkIGFueSBm cmFtZXMKQEAgLTQ5NDgsNiArNTAyMiw3IEBACiAJc3RydWN0IGF0aF90aWQgKmF0aWQgPSAmYW4t PmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOwogCWludCBkcm9wcyA9IDA7 CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKIAogCS8qCiAJICog VGFrZSBhIGNvcHkgb2YgdGhpczsgZmlsdGVyaW5nL2Nsb25pbmcgdGhlIGZyYW1lIG1heSBmcmVl IHRoZQpAQCAtNDk2MiwxMSArNTAzNywyMiBAQAogCSAqIERvIGl0IG91dHNpZGUgb2YgdGhlIFRY USBsb2NrLgogCSAqLwogCWlmIChmYWlsID09IDAgJiYgKChiZi0+YmZfc3RhdGUuYmZzX3R4Zmxh Z3MgJiBIQUxfVFhERVNDX05PQUNLKSA9PSAwKSkKKwl7CisjaWYgMAkKIAkJYXRoX3R4X3VwZGF0 ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICAmYmYtPmJmX3N0 YXR1cy5kc190eHN0YXQsCiAJCSAgICBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkJICAgIDEs ICh0cy50c19zdGF0dXMgPT0gMCkgPyAwIDogMSk7Ci0KKyNlbmRpZgorCQlyY19pbmZvID0gaWVl ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJaWVlZTgwMjExX3Jh dGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMudHNfc3RhdHVzID09IDAgPyAw IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLnRzX3Nob3J0cmV0 cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQl0cy50c19maW5hbHRzaSwgdHMudHNfcmF0ZSk7CisJ CXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJ fQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkgc28gYXRpZC0+aHdxX2RlcHRoIGNhbiBi ZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVseSBtZWFucyB0aGF0IGl0J3MgcmVsZWFz ZWQgYW5kIHJlZ3JhYmJlZApAQCAtNTE4Myw2ICs1MjY5LDE1IEBACiAJCX0KIAogCQkvKgorCQkg KiBJZiBub24tYWdncmVnYXRlIHNjZW5hcmlvIGFwcGVhcnMsIHRoaXMgd2lsbCBiZSAKKwkJICog dHVybmVkIG9mZi4KKwkJICoKKwkJICogVGhpcyBmbGFnIGlzIHVzZWQgYnkgYXRoX3R4X2RvX3Jh dGVsb29rdXAoKSB0byAKKwkJICogZGlzdGluZ3Vpc2ggYWdnci9ub24tYWdnciBzY2VuYXJpby4g IAorCQkgKi8KKwkJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0gMTsKKworCQkvKgogCQkgKiBJZiB0 aGUgcGFja2V0IGRvZXNuJ3QgZmFsbCB3aXRoaW4gdGhlIEJBVyAoZWcgYSBOVUxMCiAJCSAqIGRh dGEgZnJhbWUpLCBzY2hlZHVsZSBpdCBkaXJlY3RseTsgY29udGludWUuCiAJCSAqLwpAQCAtNTQy NSw2ICs1NTIwLDcgQEAKIAkJLyogVXBkYXRlIENMUkRNQVNLIGp1c3QgYmVmb3JlIHRoaXMgZnJh bWUgaXMgcXVldWVkICovCiAJCWF0aF90eF91cGRhdGVfY2xyZG1hc2soc2MsIHRpZCwgYmYpOwog CisJCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7IAogCQkvKiBQcm9ncmFtIGRlc2NyaXB0b3Jz ICsgcmF0ZSBjb250cm9sICovCiAJCWF0aF90eF9kb19yYXRlbG9va3VwKHNjLCBiZik7CiAJCWF0 aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkluZGV4OiBkZXYvYXRoL2lmX2F0aC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGRldi9hdGgvaWZfYXRoLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi9hdGgv aWZfYXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5l dDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVn ZG9tYWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lm ZGVmIElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIx MV9zdXBlcmcuaD4KICNlbmRpZgpAQCAtMzIyLDYgKzMyNCw3IEBACiAJc2MtPnNjX2FoID0gYWg7 CiAJc2MtPnNjX2ludmFsaWQgPSAwOwkvKiByZWFkeSB0byBnbywgZW5hYmxlIGludGVycnVwdCBo YW5kbGluZyAqLwogI2lmZGVmCUFUSF9ERUJVRworCWF0aF9kZWJ1ZyB8PSBBVEhfREVCVUdfTk9E RTsgCiAJc2MtPnNjX2RlYnVnID0gYXRoX2RlYnVnOwogI2VuZGlmCiAKQEAgLTEzODAsNiArMTM4 MywxNiBAQAogCX0KIAlBVEhfVU5MT0NLKHNjKTsKIAorCXVpbnQzMl90IGNhcHMgPSAwOworCWlm IChzYy0+c2NfbXJyZXRyeSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSOwor CWlmIChzYy0+c2NfbXJycHJvdCkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJS UFJPVDsKKwlpZiAoc2MtPnNjX3R4Y2hhaW5tYXNrID4gMSkKKwkJY2FwcyB8PSBJRUVFODAyMTFf UkFURUNUTF9DQVBfTVVMVFhDSEFJTjsKKworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCBj YXBzKTsKKwkKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZh cCwgYXRoX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJcmV0dXJuIHZh cDsKQEAgLTE0MTQsNiArMTQyNyw3IEBACiAJCWF0aF9zdG9wcmVjdihzYywgMSk7CQkvKiBzdG9w IHJlY3Ygc2lkZSAqLwogCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX2RlaW5pdCh2YXApOwogCWll ZWU4MDIxMV92YXBfZGV0YWNoKHZhcCk7CiAKIAkvKgpAQCAtNDA0Miw2ICs0MDU2LDcgQEAKIHsK IAlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CiAJc3RydWN0IGF0aF9u b2RlICphbiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVM TDsKIAogCUFUSF9UWF9VTkxPQ0tfQVNTRVJUKHNjKTsKIAlBVEhfVFhRX1VOTE9DS19BU1NFUlQo dHhxKTsKQEAgLTQwNjgsMTAgKzQwODMsMjEgQEAKIAkJCSAqIFhYWCBhc3N1bWUgdGhpcyBpc24n dCBhbiBhZ2dyZWdhdGUKIAkJCSAqIGZyYW1lLgogCQkJICovCisjaWYgMAogCQkJYXRoX3R4X3Vw ZGF0ZV9yYXRlY3RybChzYywgbmksCiAJCQkgICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMsIHRzLAog CQkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAxLAogCQkJICAgICh0cy0+dHNfc3RhdHVz ID09IDAgPyAwIDogMSkpOworI2VuZGlmCisJCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCQly Y19pbmZvID0gaWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJ CWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJCTEsICh0cy0+dHNf c3RhdHVzID09IDAgPyAwIDogMSksIAorCQkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJ CQkJdHMtPnRzX3Nob3J0cmV0cnksIHRzLT50c19sb25ncmV0cnksCisJCQkJCXRzLT50c19maW5h bHRzaSwgdHMtPnRzX3JhdGUpOworCQkJcmNfaW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFf UkFURUNUTF9JTkZPX0FHR1I7CQorCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmkt Pm5pX3ZhcCwgbmksIHJjX2luZm8pOwogCQl9CiAJCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJm LCAwKTsKIAl9IGVsc2UKQEAgLTU1NzQsOSArNTYwMCwxNSBAQAogCiAJYW4tPmFuX21jYXN0cml4 ID0gYXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tY2FzdHJhdGUpOwogCWFuLT5hbl9tZ210cml4ID0g YXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tZ210cmF0ZSk7Ci0KKyNpZiAwCiAJYXRoX3JhdGVfbmV3 YXNzb2Moc2MsIGFuLCBpc25ldyk7CisjZW5kaWYKIAorCURQUklOVEYoc2MsIEFUSF9ERUJVR19O T0RFLCAiJXM6IG5ld2Fzc29jIGlzIG5ldzogJWRcbiIsCisJCQlfX2Z1bmNfXywgaXNuZXcpOwor CWlmIChpc25ldykKKwkJaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pbml0KG5pKTsKKwogCWlmIChp c25ldyAmJgogCSAgICAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1BSSVZBQ1kpID09IDAg JiYgc2MtPnNjX2hhc2NscmtleSAmJgogCSAgICBuaS0+bmlfdWNhc3RrZXkud2tfa2V5aXggPT0g SUVFRTgwMjExX0tFWUlYX05PTkUpCg== --089e013a132afd7f2f04e6643d3a-- From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 16 08:40:53 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8CDC060D for ; Mon, 16 Sep 2013 08:40:53 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-wg0-x22f.google.com (mail-wg0-x22f.google.com [IPv6:2a00:1450:400c:c00::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0E21C27D4 for ; Mon, 16 Sep 2013 08:40:52 +0000 (UTC) Received: by mail-wg0-f47.google.com with SMTP id f12so3249587wgh.2 for ; Mon, 16 Sep 2013 01:40:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=ne6jsUyB3BV/Q+7yO7DwGtA2nig8qsEE/HwWeWdz6JM=; b=JjFKgUGBEiK2lk18ls0hrKNKMfWQEcO6xSokOOzdYeTNVmpeVCS/UZLZ/tJAsUBNJr HFCh00/7CezL0Kf6NLG3xeZsSzgkd6rI17L1AgCvFbQs92reXpvIKWFFc5ljwW6MCju/ 7YzXTX5ytA1xt0YSDwaCTBUjprK3pqbW9duT8KBnNeb6ELqZoupQsMMLPbPQymi+6//z LHcBefDNJiCN5z6E00Cz/tXMZiQNQqSoRyhKJxzPKhQc7UGfdncRCwCjw1T90gYwQs+5 saax/a8xBJkatObfOaHZa8LLUia1FRcUw1ssFOBb1nSEoqvvhk6f6DsED9KzD2OTO/oe Zxqg== MIME-Version: 1.0 X-Received: by 10.180.10.136 with SMTP id i8mr12400383wib.46.1379320851402; Mon, 16 Sep 2013 01:40:51 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Mon, 16 Sep 2013 01:40:51 -0700 (PDT) In-Reply-To: References: Date: Mon, 16 Sep 2013 01:40:51 -0700 X-Google-Sender-Auth: EbJ8-B2ECLESiW2qY5dxgKLKQIQ Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Chenchong Qin Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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, 16 Sep 2013 08:40:53 -0000 Sweet! Does this work on your AR9227? Can you provide some example output? -a On 14 September 2013 21:08, Chenchong Qin wrote: > Hi! > > Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other > drivers work, the __init__ and __findrate__ parts also need to be adapted. > When initialize the ratectl state, a cap flag must be properly set and > feed to ieee80211_ratectl_init(). __findrate__ part should be repalced > with our > ieee80211_ratectl_rates(). > > I've added ieee80211_ratectl_rc_info_get() to be used to get the > ieee80211_rc_info. If found the tag, use it; if not, add a new one and use > it. Then we don't > need to free it explicitly (the tag is freed when associated mbuf is freed) > and this interface is unified to both __findrate__ and __complete__. > > Thanks! > > Chenchong > > > On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: > >> Ah, cool! I see you've only just made the other drivers compile; what's >> required to make them work? i guess a call >> to ieee80211_ratectl_rc_info_set() ? >> >> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that >> does the "lookup tag; if one exists use it else use a temporary one" code >> that you put in if_ath.c, if_ath_tx.c. >> >> Other than that, this is looking very good! thankyou! >> >> >> -adrian >> >> >> >> On 13 September 2013 20:52, Chenchong Qin wrote: >> >>> Hi, >>> >>> Here is latest update. Per-device ratectl statistics is implemented in >>> ath and attached when ath is attaching. >>> >>> Thanks! >>> >>> Chenchong >>> >>> >>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>> >>>> Sweet, thanks! >>>> >>>> >>>> >>>> -adrian >>>> >>>> >>>> >>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>> >>>>> Hi! >>>>> >>>>> Here is some updates. >>>>> >>>>> Another member is added to ieee80211_rc_info to record value of the >>>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>> inform aggregation selection code of proper maximum aggregate size. >>>>> >>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>> convenient to implement the per-device api -- just traverse the vap list >>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>> provides service to vap-granularity object, not to device directly. So, is >>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>> attach per-device api when attaching the device)? >>>>> >>>>> Code will be posted later. >>>>> >>>>> Thanks! >>>>> >>>>> Chenchong >>>>> >>>>> >>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> For now, yes, you have to assume that you won't always get a response >>>>>> for a rate lookup. The buffer may be sent with NOACK set, it may be deleted >>>>>> during a channel change or scan, etc. >>>>>> >>>>>> And yes - the rate control lookup stuff for aggregate frames is a bit >>>>>> messy. It would be nice for the rate control code to return the rate _and_ >>>>>> the maximum aggregate size, in case the aggregation selection wants to cap >>>>>> how long frames are at the given choice. >>>>>> >>>>>> >>>>>> >>>>>> -adrian >>>>>> >>>>>> >>>>>> >>>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>>> >>>>>>> Hi! >>>>>>> >>>>>>> I've added some aggregation support here! >>>>>>> >>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>> per-subframe length etc.) >>>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>>> must be performed >>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>> control decision >>>>>>> is need) and subframe informations can be obtain only after the >>>>>>> ampdu is formed. >>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let >>>>>>> it distinguish >>>>>>> aggregation and non-aggregation scenarios. If rate lookup is called >>>>>>> in an aggregation >>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now >>>>>>> finding rates for an >>>>>>> ampdu and the framelen which records len of the first frame can be >>>>>>> ignored. When >>>>>>> it comes to complete period, tx status that shows number of >>>>>>> subframes been sent >>>>>>> and number of subframes been successfully received is passed to the >>>>>>> ratectl api. >>>>>>> >>>>>>> I also get a question here - whether one tx that doesn't perform >>>>>>> rate lookup will call >>>>>>> the complete procedure? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>> qinchenchong@gmail.com> wrote: >>>>>>> >>>>>>>> Hi! >>>>>>>> >>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>> >>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo >>>>>>>> . >>>>>>>> >>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" (it >>>>>>>> looks like all things stop working, screen is freezing, keyboard and mouse >>>>>>>> are not responding) after wireless stuff start working for a while. At >>>>>>>> first, I consider it caused by my modification to ath. But this strange >>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>>> >>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>> to let it support aggregation? >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>> >>>>>>>>> OK! >>>>>>>>> >>>>>>>>> Thanks! :-) >>>>>>>>> >>>>>>>>> Chenchong >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: >>>>>>>>> >>>>>>>>>> Hi! >>>>>>>>>> >>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>> >>>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent >>>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion, >>>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -adrian >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 16 09:08:58 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id E1D3FBC6; Mon, 16 Sep 2013 09:08:57 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vb0-x235.google.com (mail-vb0-x235.google.com [IPv6:2607:f8b0:400c:c02::235]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 79895293B; Mon, 16 Sep 2013 09:08:57 +0000 (UTC) Received: by mail-vb0-f53.google.com with SMTP id i3so2708141vbh.12 for ; Mon, 16 Sep 2013 02:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=qaDzA8GkHoyEPbFwneuRXvxJKO/O6jKKHaFTNuNwJQE=; b=ufRrKKeo7utEj6qJEvwNs7mxf2tlRKFxGHsqLLPls9+fGPHTPsCdbJTJammXQbnLq9 kGDT/44Ql5vePtZUD2+ffGuh9HV+DBEO32CFkyENNqAi5/WdoraSLMI4tQpKo9EgoJQO vtB9Nh4nLCDxiUiFMob8BGNk3S5G+zicSLKBgE9MCjcGPWm+4guv1s9qhJz4AEd+Jch6 mhZ7V5pbf8NyMYCFXANGJQ+Z3L9Z245ncjyg69ZPOKV2njKH1y16h9eEe5SRG0FCbOG9 OoxKMstUb5k/8Mc1I8ke+fkWUS3ZBD7fQihiSeG5ObN7TvvV7g64uvzPgBByAUwH1Tg1 u8mg== MIME-Version: 1.0 X-Received: by 10.58.118.130 with SMTP id km2mr25775938veb.0.1379322536526; Mon, 16 Sep 2013 02:08:56 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Mon, 16 Sep 2013 02:08:56 -0700 (PDT) In-Reply-To: References: Date: Mon, 16 Sep 2013 17:08:56 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=089e013a05acd23a0e04e67c8dbe X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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, 16 Sep 2013 09:08:58 -0000 --089e013a05acd23a0e04e67c8dbe Content-Type: text/plain; charset=ISO-8859-1 Hi! Yes! Here is a fresh debug log. @adrian you may received many copies of this message because I got the "Message body too large" limit of freebsd-wireless list. So I compress the log file and re-send it. Sorry to be confused. :) Thanks! Chenchong On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: > Sweet! > > Does this work on your AR9227? Can you provide some example output? > > > -a > > > On 14 September 2013 21:08, Chenchong Qin wrote: > >> Hi! >> >> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other >> drivers work, the __init__ and __findrate__ parts also need to be adapted. >> When initialize the ratectl state, a cap flag must be properly set and >> feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >> with our >> ieee80211_ratectl_rates(). >> >> I've added ieee80211_ratectl_rc_info_get() to be used to get the >> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >> it. Then we don't >> need to free it explicitly (the tag is freed when associated mbuf is >> freed) and this interface is unified to both __findrate__ and >> __complete__. >> >> Thanks! >> >> Chenchong >> >> >> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >> >>> Ah, cool! I see you've only just made the other drivers compile; what's >>> required to make them work? i guess a call >>> to ieee80211_ratectl_rc_info_set() ? >>> >>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that >>> does the "lookup tag; if one exists use it else use a temporary one" code >>> that you put in if_ath.c, if_ath_tx.c. >>> >>> Other than that, this is looking very good! thankyou! >>> >>> >>> -adrian >>> >>> >>> >>> On 13 September 2013 20:52, Chenchong Qin wrote: >>> >>>> Hi, >>>> >>>> Here is latest update. Per-device ratectl statistics is implemented in >>>> ath and attached when ath is attaching. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>> >>>>> Sweet, thanks! >>>>> >>>>> >>>>> >>>>> -adrian >>>>> >>>>> >>>>> >>>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> Here is some updates. >>>>>> >>>>>> Another member is added to ieee80211_rc_info to record value of the >>>>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>> >>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>> attach per-device api when attaching the device)? >>>>>> >>>>>> Code will be posted later. >>>>>> >>>>>> Thanks! >>>>>> >>>>>> Chenchong >>>>>> >>>>>> >>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>> be deleted during a channel change or scan, etc. >>>>>>> >>>>>>> And yes - the rate control lookup stuff for aggregate frames is a >>>>>>> bit messy. It would be nice for the rate control code to return the rate >>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>> to cap how long frames are at the given choice. >>>>>>> >>>>>>> >>>>>>> >>>>>>> -adrian >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>>>> >>>>>>>> Hi! >>>>>>>> >>>>>>>> I've added some aggregation support here! >>>>>>>> >>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>> per-subframe length etc.) >>>>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>>>> must be performed >>>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>>> control decision >>>>>>>> is need) and subframe informations can be obtain only after the >>>>>>>> ampdu is formed. >>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let >>>>>>>> it distinguish >>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is called >>>>>>>> in an aggregation >>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now >>>>>>>> finding rates for an >>>>>>>> ampdu and the framelen which records len of the first frame can be >>>>>>>> ignored. When >>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>> subframes been sent >>>>>>>> and number of subframes been successfully received is passed to the >>>>>>>> ratectl api. >>>>>>>> >>>>>>>> I also get a question here - whether one tx that doesn't perform >>>>>>>> rate lookup will call >>>>>>>> the complete procedure? >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>> >>>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo >>>>>>>>> . >>>>>>>>> >>>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" >>>>>>>>> (it looks like all things stop working, screen is freezing, keyboard and >>>>>>>>> mouse are not responding) after wireless stuff start working for a while. >>>>>>>>> At first, I consider it caused by my modification to ath. But this strange >>>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>>>> >>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>> to let it support aggregation? >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> Chenchong >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> OK! >>>>>>>>>> >>>>>>>>>> Thanks! :-) >>>>>>>>>> >>>>>>>>>> Chenchong >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: >>>>>>>>>> >>>>>>>>>>> Hi! >>>>>>>>>>> >>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>> >>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent >>>>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion, >>>>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -adrian >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --089e013a05acd23a0e04e67c8dbe-- From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 16 09:32:22 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 61BFBFBA; Mon, 16 Sep 2013 09:32:22 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vc0-x22f.google.com (mail-vc0-x22f.google.com [IPv6:2607:f8b0:400c:c03::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E10712AAD; Mon, 16 Sep 2013 09:32:21 +0000 (UTC) Received: by mail-vc0-f175.google.com with SMTP id ia10so2674680vcb.34 for ; Mon, 16 Sep 2013 02:32:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Uig87NSmdLS1Blg5s2dCLhGoCR+4faLehHIoIOV5QXY=; b=Zy8WOYz6MeTgCeeXobJPWv20CVrxulbPtJZYDaXtZTAxiRHyjvsqsJTsAsgQhvv8M7 +keRcPC5+xKI9Q9Hb5BeJK3vAOECehQ5nmwLJ2wBTVHK+1CTylUgujsYhuLbFL6y+jkO 1OcAksd36rJpyU+tzcCiMRRWNLl0UagU5pl1B9acShQzgMGveBzBVmn5ER4ffiez6wlb DF1g2RBtN3nXrvsXabZ7j5yfXh2Tf1QGd8/JsGV4pNEVeMjpH2NP0hmqwIX4WYzH/FNx vG+wFw2QD66aC06sB4/5nqEues2HECq35xidSzxwm05+LpE4xiUE6bbmqEADPNmQfxn3 0K9g== MIME-Version: 1.0 X-Received: by 10.58.77.65 with SMTP id q1mr7934855vew.8.1379323940881; Mon, 16 Sep 2013 02:32:20 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Mon, 16 Sep 2013 02:32:20 -0700 (PDT) In-Reply-To: References: Date: Mon, 16 Sep 2013 17:32:20 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=e89a8f6474ed86ff0d04e67ce159 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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, 16 Sep 2013 09:32:22 -0000 --e89a8f6474ed86ff0d04e67ce159 Content-Type: text/plain; charset=ISO-8859-1 Hi! In this update, I update ieee80211_sample and complete ieee80211_ratectl_none templete. * rename ieee80211_rc_sample* to ieee80211_sample*. this seems to be more harmonious. * modify ieee80211_sample to let it use the latest net80211-ratectl features. * fix some errors in ieee80211_sample. * complete the ieee80211_ratectl_none templete with newly added net80211-ratectl functions. You will need to add wlan_sample to sys/conf/files to make ieee80211_sample compiled. Thanks! Chenchong On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin wrote: > Hi! > > Yes! > > Here is a fresh debug log. > > @adrian you may received many copies of this message because I got the > "Message body too large" limit of freebsd-wireless list. So I compress the > log file and re-send it. Sorry to be confused. :) > > Thanks! > > Chenchong > > > On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: > >> Sweet! >> >> Does this work on your AR9227? Can you provide some example output? >> >> >> -a >> >> >> On 14 September 2013 21:08, Chenchong Qin wrote: >> >>> Hi! >>> >>> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other >>> drivers work, the __init__ and __findrate__ parts also need to be adapted. >>> When initialize the ratectl state, a cap flag must be properly set and >>> feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >>> with our >>> ieee80211_ratectl_rates(). >>> >>> I've added ieee80211_ratectl_rc_info_get() to be used to get the >>> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >>> it. Then we don't >>> need to free it explicitly (the tag is freed when associated mbuf is >>> freed) and this interface is unified to both __findrate__ and >>> __complete__. >>> >>> Thanks! >>> >>> Chenchong >>> >>> >>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >>> >>>> Ah, cool! I see you've only just made the other drivers compile; what's >>>> required to make them work? i guess a call >>>> to ieee80211_ratectl_rc_info_set() ? >>>> >>>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that >>>> does the "lookup tag; if one exists use it else use a temporary one" code >>>> that you put in if_ath.c, if_ath_tx.c. >>>> >>>> Other than that, this is looking very good! thankyou! >>>> >>>> >>>> -adrian >>>> >>>> >>>> >>>> On 13 September 2013 20:52, Chenchong Qin wrote: >>>> >>>>> Hi, >>>>> >>>>> Here is latest update. Per-device ratectl statistics is implemented in >>>>> ath and attached when ath is attaching. >>>>> >>>>> Thanks! >>>>> >>>>> Chenchong >>>>> >>>>> >>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>>> >>>>>> Sweet, thanks! >>>>>> >>>>>> >>>>>> >>>>>> -adrian >>>>>> >>>>>> >>>>>> >>>>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>>>> >>>>>>> Hi! >>>>>>> >>>>>>> Here is some updates. >>>>>>> >>>>>>> Another member is added to ieee80211_rc_info to record value of the >>>>>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>>> >>>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>>> attach per-device api when attaching the device)? >>>>>>> >>>>>>> Code will be posted later. >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>>> be deleted during a channel change or scan, etc. >>>>>>>> >>>>>>>> And yes - the rate control lookup stuff for aggregate frames is a >>>>>>>> bit messy. It would be nice for the rate control code to return the rate >>>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>>> to cap how long frames are at the given choice. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -adrian >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> I've added some aggregation support here! >>>>>>>>> >>>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>>> per-subframe length etc.) >>>>>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>>>>> must be performed >>>>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>>>> control decision >>>>>>>>> is need) and subframe informations can be obtain only after the >>>>>>>>> ampdu is formed. >>>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let >>>>>>>>> it distinguish >>>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is >>>>>>>>> called in an aggregation >>>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now >>>>>>>>> finding rates for an >>>>>>>>> ampdu and the framelen which records len of the first frame can be >>>>>>>>> ignored. When >>>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>>> subframes been sent >>>>>>>>> and number of subframes been successfully received is passed to >>>>>>>>> the ratectl api. >>>>>>>>> >>>>>>>>> I also get a question here - whether one tx that doesn't perform >>>>>>>>> rate lookup will call >>>>>>>>> the complete procedure? >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> Chenchong >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Hi! >>>>>>>>>> >>>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>>> >>>>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo >>>>>>>>>> . >>>>>>>>>> >>>>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" >>>>>>>>>> (it looks like all things stop working, screen is freezing, keyboard and >>>>>>>>>> mouse are not responding) after wireless stuff start working for a while. >>>>>>>>>> At first, I consider it caused by my modification to ath. But this strange >>>>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>>>>> >>>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>>> to let it support aggregation? >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> Chenchong >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> OK! >>>>>>>>>>> >>>>>>>>>>> Thanks! :-) >>>>>>>>>>> >>>>>>>>>>> Chenchong >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd >>>>>>>>>> > wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi! >>>>>>>>>>>> >>>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>>> >>>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent >>>>>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion, >>>>>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -adrian >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --e89a8f6474ed86ff0d04e67ce159-- From owner-freebsd-wireless@FreeBSD.ORG Mon Sep 16 11:06:55 2013 Return-Path: Delivered-To: freebsd-wireless@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 173D4C7C for ; Mon, 16 Sep 2013 11:06:55 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EB6442173 for ; Mon, 16 Sep 2013 11:06:54 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r8GB6s0a089809 for ; Mon, 16 Sep 2013 11:06:54 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r8GB6sR3089807 for freebsd-wireless@FreeBSD.org; Mon, 16 Sep 2013 11:06:54 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 16 Sep 2013 11:06:54 GMT Message-Id: <201309161106.r8GB6sR3089807@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-wireless@FreeBSD.org Subject: Current problem reports assigned to freebsd-wireless@FreeBSD.org X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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, 16 Sep 2013 11:06:55 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o kern/181898 wireless [iwn] [patch] Centrino Advanced-N 6235 with latest iwn o kern/181694 wireless [iwn] [patch] Initialize hardware in iwn(4) resume cod o kern/181161 wireless [wl] config a old compaq wl-110 wireless card make ker o kern/181132 wireless [iwn] stream calculation is wrong for the Intel 4965 o kern/181100 wireless [bwi] Turning up bwi0 crashes / deadlocks the kernel o kern/180816 wireless [iwl] Intel Centrino Wireless-N 2200 not supported o kern/179847 wireless [ath] [patch] Update regdomain in ath drivers includin o kern/179709 wireless [ath] Atheros 5212 does not work: stuck beacon; resett o kern/179547 wireless [ath] Add AR9485 custom board fixes (CUS198) o kern/179482 wireless [ath] [patch] Fix AR9462 external LNA configuration o kern/179269 wireless [ath] [AR9285] RX antenna diversity is not functioning o kern/179232 wireless [ath] panic in ath o kern/178986 wireless [ath] Change mac address of ath(4) is not reflected wh o kern/178492 wireless [ath] ath0 (AR9287) panic o kern/178491 wireless [ath] ath0 (AR9287) stuck beacon o kern/178477 wireless [ath] missed beacon / soft reset in STA mode results i o kern/178470 wireless [panic][ath] bss vap can and does change o kern/178411 wireless [ral] [panic] FreeBSD kernel crash in rt2860 o kern/178379 wireless [net80211] [ath] WPA rekey on the STA side fails when o kern/178378 wireless [net80211] crypto state isn't reset during a reassocia o kern/178263 wireless [ath] review the use of ic_freq / ic_ieee / ic_flags / o kern/177847 wireless [ath] With TPC enabled, TX power values aren't clamped o kern/177846 wireless [ath] [net80211] net80211 TX power limit isn't correct o conf/177688 wireless WiFi regodmains information is inconsistent between "e o kern/177530 wireless [ath] ath driver isn't 32 bit int clean o kern/177465 wireless [iwn] 20%-100% packet loss with iwn driver o kern/177451 wireless [ieee80211] page fault in ieee80211_tx_mgt_timeout o kern/176238 wireless [ath] [patch] Correct buffer size calculation and simp o kern/176201 wireless [net80211] [patch] 11n station includes unrelated ht p o kern/176104 wireless [iwn] iwn0: iwn_intr: fatal firmware error o kern/175722 wireless [ath]lot of bad seriesx hwrate in kernel messages o kern/175446 wireless [ath] high volumes of PHY errors lead to BB/MAC hangs o kern/175227 wireless [ath] beacon timers aren't necessarily reprogrammed af o kern/175183 wireless [iwn] iwn(4) becomes unresponsive during initial confi o kern/175053 wireless [iwn] iwn firmware error on 9-stable with Ultimate-N 6 o kern/174891 wireless [ieee80211] struct ieee80211_node is freed during acti o kern/174722 wireless [wlan] can't use channel 12 and 13 (14) with my wifi i o kern/174661 wireless [wlan] lost alias on wlan interface o kern/174283 wireless [net80211] panics in ieee80211_ff_age() and ieee80211_ o kern/174276 wireless [ath] if_ath memory modified after free o kern/174273 wireless [net80211] taking down a net80211 node with active fas o kern/173917 wireless [iwn] wpa-supplicant issues on iwn o kern/173898 wireless [iwn] [patch] iwn(4) DOES support 6235 chip. o kern/173883 wireless [ath] ath0: unable to attach - pci issue? o kern/173711 wireless [ath] powerd kills ath on the Asus EeePC 1005HA o kern/173342 wireless PS-Poll isn't working o kern/173336 wireless [ath] Atheros card improper device poweroff handling o o kern/172955 wireless [ath] 11n does not work in adhoc mode o kern/172706 wireless [wpi] wpi0 fails to load firmware when using country o kern/172672 wireless [ubt] Bluetooth device recognised but not working o kern/172661 wireless hostapd(8) securing wireless adapter in HostAP mode is o kern/172338 wireless [ath] [net80211] CCMP IV transmit counters are not cor o kern/171598 wireless [ath] TP-Link TL-WN951N W-LAN PCI Adapter 300 MBit stu o kern/171235 wireless [ath] ath loses connection, system freezes on netif re o kern/170889 wireless [ath] ath driver uses some uninitilized memory o kern/170620 wireless [ath] LOR and deadlock when multiple vaps are used o kern/170573 wireless [iwi] Intel 2200BG iwi NIC hangs with need multicast c o kern/170513 wireless [ath] ath logs: ath_tx_aggr_comp_aggr: AR5416 bug: o kern/170433 wireless [ath] TX hang after a stuck beacon message with active o kern/170411 wireless [ath] Uninitialized variables in if_ath.c o kern/170397 wireless [ath] [patch] Uninitialized variables in ah_eeprom_928 o kern/170302 wireless [ath] 802.11n frames are not being transmitted with mu o kern/170281 wireless [ath] 802.11n locks up on aggregation setup (ampdutx) o kern/170098 wireless [ath] [net80211] VAPs (Virtual access points) with Ath o kern/170066 wireless [ral] ral(4) rt61pci Linksys freezes the machine as so o kern/169432 wireless [ath] BAR TX hang when aggregation session is reset du p kern/169362 wireless [ath] AR5416: radar pulse PHY errors sometimes include o kern/169336 wireless [ath] ANI isn't triggering in a busy/noisy environment o kern/169199 wireless [ath] Cannot set up static ip addresses for wireless w o kern/169084 wireless [ath] suspend/resume doesn't cause a rescan; the assoc o kern/168530 wireless [ath] Broken WEP probably o kern/168393 wireless AR9285: suspend/resume sometimes fails o kern/168170 wireless [net80211] ieee80211_send_bar() doesn't complete corre o kern/167870 wireless [ath] adhoc wifi client does not join an existing IBSS o kern/167834 wireless [ath] kickpcu; 'handled 0 packets' o kern/167828 wireless [iwn] iwn(4) doesn't recover automatically after firmw o kern/167798 wireless ifconfig(8): problem with "ifconfig list scan" command o kern/167491 wireless [ath] TID != hardware queue TID in ath_tx_aggr_comp_ag o kern/167113 wireless [ath] AR5210: "stuck" TX seems to be occuring, without o kern/167080 wireless [ath] channel switch on another VAP break channel setu o kern/166684 wireless [ath] [net80211] mgmtrate/mcastrate isn't updated base p kern/166642 wireless [ieee80211] [patch] in 802.11n mode for FreeBSD AP, ha o kern/166641 wireless [ieee80211] [patch] mbuf/cluster leak in AP mode in 80 p kern/166357 wireless [ath] 802.11n TX stall when the first frame in the BAW o kern/166286 wireless [net80211] [ath] initial switch to HT40 isn't causing p kern/166190 wireless [ath] TX hangs and frames stuck in TX queue o kern/166086 wireless [Patch][ath] Reflect state of rfkill switch in a sysct o kern/165969 wireless [ath] Slower performance in adhoc mode vs Client/AP mo o kern/165966 wireless [ath] ath0: device timeout on SMP machines due to race o kern/165895 wireless [ath] overly busy cabq can tie up all tx buffers o kern/165870 wireless [bwn] bwn driver does not attach on HP Pavilion dv9420 o kern/165866 wireless [ath] TX hangs, requiring a "scan" to properly reset t o kern/165849 wireless [ath] [hang] network ath driver freeze o kern/165595 wireless [ipw] ipw(4): Can't load firmare for ipw2200bg o kern/165543 wireless [ath] ath0 endless scanning of channels without connec o kern/165517 wireless [net80211] bgscan isn't triggered when invalid beacons o kern/165475 wireless [ath] operational mode change doesn't poke the underly o kern/165382 wireless [kernel] taskqueue_unblock doesn't unblock currently q o kern/165306 wireless [ath] race conditions between scanning and beacon time o kern/165220 wireless [ath] "ath_rx_tasklet: sc_inreset_cnt > 0; skipping" m o kern/165214 wireless [ieee80211] Kernel panic in ieee80211_output.c:2505 o kern/165212 wireless [ath] No WiFi on Acer Aspire One 751h (Atheros AR5BHB6 o kern/165149 wireless [ath] [net80211] Ping with data length more than iv_fr o kern/165146 wireless [net80211] Net802.11 Fragment number is assigned 1 (sh o kern/165060 wireless [ath] vap->iv_bss race conditions causing crashes insi o kern/165021 wireless [ath] ath device timeout during scan/attach, if wlan_c o kern/164721 wireless [ath] ath device timeouts o kern/164382 wireless [ath] crash when down/deleting a vap - inside ieee8021 o kern/164365 wireless [iwi] iwi0: UP/DOWN in o bin/164102 wireless hostapd not configured for 802.11n o kern/163759 wireless [ath] ath(4) "stops working" in hostap mode o kern/163724 wireless [mwl] [patch] NULL check before dereference o kern/163719 wireless [ath] ath interface do not receive multicast o kern/163689 wireless [ath] TX timeouts when sending probe/mgmt frames durin o kern/163574 wireless [net80211] overly-frequent HT occupancy changes o kern/163573 wireless [ath] hostap mode TX buffer hang o kern/163559 wireless [ath] kernel panic AH_DEBUG o kern/163318 wireless [ath] ath(4) stops working p kern/163312 wireless [panic] [ath driver] kernel panic: page fault with ath o kern/163237 wireless [ath] AR5416 as HostAP. Delays among clients when a cl o kern/163082 wireless [ath] ar9285 diversity fixes o kern/162648 wireless [ath] AR9227 ADC DC calibration failure o kern/162647 wireless [ath] 11n TX aggregation session / TX hang o kern/161293 wireless [iwn] hang at startup when starting network o kern/161035 wireless [ieee80211] Incorrect number describing 11ng MCS rate o kern/160391 wireless [ieee80211] [patch] Panic in mesh mode o kern/160296 wireless [zyd] [panic] 802.11 usb device reboots system on 'ifc o misc/160176 wireless [mips] [panic] Kernel panic on AR7161 platform with AR o kern/157449 wireless [ath] MAC address conflict causes system to freeze o kern/157243 wireless [ath] investigate beacon TX (AP) / RX (STA) when under o kern/156904 wireless [ath] AR9285 antenna diversity algorithm is buggy and o kern/156884 wireless [ath] ath instablity o kern/156327 wireless [bwn] bwn driver causes 20%-50% packet loss o kern/156322 wireless [wpi] no ahdemo support for if_wpi o kern/156321 wireless [ath] ahdemo doesn't work with if_ath o kern/155498 wireless [ral] ral(4) needs to be resynced with OpenBSD's to ga o kern/155100 wireless [ath] ath driver on busy channel: "stuck beacon" p kern/154598 wireless [ath] Atheros 5424/2424 can't connect to WPA network o kern/154567 wireless [ath] ath(4) lot of bad series(0) o kern/154327 wireless [ath] AR5416 in station mode hangs when transmitting f o kern/154284 wireless [ath] Modern ath wifi cards (such as AR9285) have miss o kern/154153 wireless [ath] AR5213 + MIPS + WPA group key packet corruption o kern/153594 wireless [wlan] netif/devd race o kern/153448 wireless [ath] ath networking device loses association after a o kern/152750 wireless [ath] ath0 lot of bad series hwrate o kern/151198 wireless [ath] ath/5416 fails bgscan with "ath0: ath_chan_set: o kern/149786 wireless [bwn] bwn on Dell Inspiron 1150: connections stall o kern/149516 wireless [ath] ath(4) hostap with fake MAC/BSSID results in sta o kern/149373 wireless [realtek/atheros]: None of my network card working o kern/148322 wireless [ath] Triggering atheros wifi beacon misses in hostap o kern/148317 wireless [ath] FreeBSD 7.x hostap memory leak in net80211 or At o kern/148078 wireless [ath] wireless networking stops functioning o kern/146426 wireless [mwl] 802.11n rates not possible on mwl o kern/146425 wireless [mwl] mwl dropping all packets during and after high u o kern/145826 wireless [panic] [ath] Unable to configure adhoc mode on ath0/w o kern/144987 wireless [wpi] [panic] injecting packets with wlaninject using o kern/144755 wireless [wlan] netif/devd race o bin/144109 wireless hostapd(8) uses the MAC of the wireless interface, but o conf/143079 wireless hostapd(8) startup missing multi wlan functionality p kern/140567 wireless [ath] [patch] ath is not worked on my notebook PC o kern/140245 wireless [ath] [panic] Kernel panic during network activity on o kern/137592 wireless [ath] panic - 7-STABLE (Aug 7, 2009 UTC) crashes on ne o kern/136943 wireless [wpi] [lor] wpi0_com_lock / wpi0 o kern/136836 wireless [ath] atheros card stops functioning after about 12 ho o kern/132722 wireless [ath] Wifi ath0 associates fine with AP, but DHCP or I o bin/131549 wireless ifconfig(8) can't clear 'monitor' mode on the wireless o kern/126475 wireless [ath] [panic] ath pcmcia card inevitably panics under o kern/125721 wireless [ath] Terrible throughput/high ping latency with Ubiqu o kern/125617 wireless [ath] [panic] ath(4) related panic o kern/125501 wireless [ath] atheros cardbus driver hangs o kern/125332 wireless [ath] [panic] crash under any non-tiny networking unde o kern/124767 wireless [iwi] Wireless connection using iwi0 driver (Intel 220 o kern/124753 wireless [ieee80211] net80211 discards power-save queue packets o kern/121061 wireless [ath] [panic] panic while ejecting ath(4)-adapter duri o docs/120456 wireless ath(4) needs to specify requirement on wlan_scan_sta o kern/119513 wireless [ath] [irq] inserting dlink dwl-g630 wireless card res o kern/116747 wireless [ndis] FreeBSD 7.0-CURRENT crash with Dell TrueMobile f kern/105348 wireless [ath] ath device stopps TX 178 problems total. From owner-freebsd-wireless@FreeBSD.ORG Tue Sep 17 20:52:19 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5B55BF7A for ; Tue, 17 Sep 2013 20:52:19 +0000 (UTC) (envelope-from sean_bruno@yahoo.com) Received: from nm20.bullet.mail.bf1.yahoo.com (nm20.bullet.mail.bf1.yahoo.com [98.139.212.179]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0AE4622BA for ; Tue, 17 Sep 2013 20:52:18 +0000 (UTC) Received: from [66.196.81.170] by nm20.bullet.mail.bf1.yahoo.com with NNFMP; 17 Sep 2013 20:52:12 -0000 Received: from [68.142.230.65] by tm16.bullet.mail.bf1.yahoo.com with NNFMP; 17 Sep 2013 20:52:12 -0000 Received: from [127.0.0.1] by smtp222.mail.bf1.yahoo.com with NNFMP; 17 Sep 2013 20:52:12 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1379451132; bh=zYA3Rn2zvD0bz1+BFoHaK+WrK5Wcyh+UPqeqXIidQIg=; h=X-Yahoo-Newman-Id:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:X-Rocket-Received:Subject:From:Reply-To:To:Content-Type:Date:Message-ID:Mime-Version:X-Mailer; b=wiuEbkxvTZw3gN3jrFVb4uTMCZ9Mti2Zz6O+ifIAvqtz5eTENcMNmomkFCgG5NMjkhe7wlvjGZCEw+Dt9xLrmgQhPrCN6GQCWfrK1gvewiiYrhhDDtTlTyXvnx7NcNVqJk9lAp1WjtlExS42IsBa941wcKpoB9dGPbZ/XIuCY90= X-Yahoo-Newman-Id: 568114.32892.bm@smtp222.mail.bf1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: mbDYmc8VM1nN3HMOhO6RphjSuYkOG9FbdyjK5BfnP1aW4Vb cHEq3A.JDkhXW3vlriEKZloxRSShj1cXVf2WyjtvfhFOQkqJ9mJBbdSWMuX4 c_od1HuZlXDc_kUuMI0cFQUSlKwkTh61Oow.5xWAP3BS4zoZcmHotuY987kt 7Tzsww572cxsADyb69CL4e2hx6CMhFAL6thVmFzolcpqPSZt1hStHiOElObh XKYoBxeNIeaMfLvBScIOTSunrt3iy10gz5KyuwZeBxZ08e975EzJSjjfbzkg xTOf1rY8w22kL4diuNCZayhH9nMc.xY3Hl62DiRfbMaplRYJX8abdpDYUiEE b4ZLu5mF1qNGpdT06mcPu_.df.dwFjQlpe_RCE9NWKKSMZ4dUjefc5fJ.6p6 wpiCmC3MxUpNHRawDso35nsmb3Zz0jkr5HWOVr5Hmb8V0GfNnxvYSzV3MmIG 5lcCS3fVgwnN1cmcA1F6omiRQOPjVitfsPiM2NNQWk5ZX9Vpsbcv0FdMbcLh 1OJEE_a2jWqGHk03NPOKKOSfhtxsV.D8wpRPu38GU5QnMtgQmcZhRYtF3gju 4ZQ-- X-Yahoo-SMTP: u5BKR6OswBC_iZJVfGRoMkTIpc8pEA4- X-Rocket-Received: from [10.73.192.139] (sean_bruno@66.228.162.32 with ) by smtp222.mail.bf1.yahoo.com with SMTP; 17 Sep 2013 20:52:12 +0000 UTC Subject: iwn(4) on my $DAYJOB 802.11n network From: Sean Bruno To: freebsd-wireless@freebsd.org Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-T9P4Xw55Rng0MXmsZXdC" Date: Tue, 17 Sep 2013 13:52:11 -0700 Message-ID: <1379451131.46712.11.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: sbruno@freebsd.org 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: Tue, 17 Sep 2013 20:52:19 -0000 --=-T9P4Xw55Rng0MXmsZXdC Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Looks like something that my workplace is doing on their 802.11n network is not compatible with iwn(4)'s N support. I disabled it alltogether on my Lenovo T520 6205 via: Index: if_iwn.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- if_iwn.c (revision 255602) +++ if_iwn.c (working copy) @@ -1736,8 +1736,10 @@ iwn_read_prom_data(sc, IWN_EEPROM_SKU_CAP, &val, 2); DPRINTF(sc, IWN_DEBUG_RESET, "SKU capabilities=3D0x%04x\n", le16toh(val))= ; /* Check if HT support is bonded out. */ +#if 0 if (val & htole16(IWN_EEPROM_SKU_CAP_11N)) sc->sc_flags |=3D IWN_FLAG_HAS_11N; +#endif =20 iwn_read_prom_data(sc, IWN_EEPROM_RFCFG, &val, 2); sc->rfcfg =3D le16toh(val); --=-T9P4Xw55Rng0MXmsZXdC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (FreeBSD) iQEcBAABAgAGBQJSOMD7AAoJEBkJRdwI6BaHRTQIAIbFseL0peglLMaRC0r3UqL5 U+WBvUoc89Dx+w1NTSg/VlbkaChnjxe/Uvp3pB7Jc4RtaHAhcK66LOCfXtIBCJfz AMrvuAiJlYh+OR50i4XhphxOrmxKVk9kPHJwCdwx8+axegKWJJ5glqemqTFo3VVu 61JZ9bREK7tMwaPcaeCpvSbkLFYy1tFRGHP0yl0/QHWF2WWXyLaYBH0uriZ6v8DW RnqCMHIvJGmxTpQtBMGv341wahuKIrBGPuh8i37Z+XNN21V4rujoE0ohDGbo02Ow pynSMCSRyaL3YibwfaJdcNEDdIvohfH3hpAtVxicS/5EEw9iM3gZzkUsgiO1xO8= =fQWH -----END PGP SIGNATURE----- --=-T9P4Xw55Rng0MXmsZXdC-- From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 01:38:11 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4250F11E for ; Thu, 19 Sep 2013 01:38:11 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-wi0-x22c.google.com (mail-wi0-x22c.google.com [IPv6:2a00:1450:400c:c05::22c]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9E76E25BB for ; Thu, 19 Sep 2013 01:38:10 +0000 (UTC) Received: by mail-wi0-f172.google.com with SMTP id hn9so4918917wib.11 for ; Wed, 18 Sep 2013 18:38:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=OilgoTTrrQTLwJUQfS860LfkjGC+uMxOJnOH5cybh6I=; b=semrWrCIL6wLLLe6sobuYTA9IDAnP1j0NsGVClY3MDAhZkHr/8QsPra/sdtsX867al xYDcKrPhQkguWgWCsTQNqHwzjoboEQn0yLnAdhEVWKP8W+SE6cTfAiuzVPqZee9ZOArb 6eJ8PVeE+mwUi60UQH3BI74XOWq9bwJEynWOoiEpxzDj+p5erBYe/3psxV/bwkfdlvk6 ZT2FKB3DoAZ7dwzhJzPZ/F3gm1kbYdKVSOw7CRUj1CK2SWjT7BOHKyjb48bdu66W6QOF Ocdvo+NXr0+1yCSfyDifSMSP3/ShjlvcD7+kZK/dP8oG1YrFCPeYEHj/0962Z3eDNw8n vwDA== MIME-Version: 1.0 X-Received: by 10.180.93.104 with SMTP id ct8mr9709568wib.0.1379554688988; Wed, 18 Sep 2013 18:38:08 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Wed, 18 Sep 2013 18:38:08 -0700 (PDT) In-Reply-To: References: Date: Wed, 18 Sep 2013 18:38:08 -0700 X-Google-Sender-Auth: mkvADhlZXBJfkXo66fnkM6ZAEdU Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Chenchong Qin Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Thu, 19 Sep 2013 01:38:11 -0000 Sweet, thanks! Please post the final and some sample output from ifconfig and sysctl somewhere so we can take a more detailed look. I'll be travelling over the next few days; I'll try to get it all finalised later this month. Thanks again! Great work! -adiran On 16 September 2013 02:32, Chenchong Qin wrote: > Hi! > > In this update, I update ieee80211_sample and complete > ieee80211_ratectl_none templete. > > * rename ieee80211_rc_sample* to ieee80211_sample*. this seems to be more > harmonious. > * modify ieee80211_sample to let it use the latest net80211-ratectl > features. > * fix some errors in ieee80211_sample. > * complete the ieee80211_ratectl_none templete with newly added > net80211-ratectl functions. > > You will need to add wlan_sample to sys/conf/files to make > ieee80211_sample compiled. > > Thanks! > > Chenchong > > > On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin wrote: > >> Hi! >> >> Yes! >> >> Here is a fresh debug log. >> >> @adrian you may received many copies of this message because I got the >> "Message body too large" limit of freebsd-wireless list. So I compress >> the >> log file and re-send it. Sorry to be confused. :) >> >> Thanks! >> >> Chenchong >> >> >> On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: >> >>> Sweet! >>> >>> Does this work on your AR9227? Can you provide some example output? >>> >>> >>> -a >>> >>> >>> On 14 September 2013 21:08, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make >>>> other drivers work, the __init__ and __findrate__ parts also need to be >>>> adapted. >>>> When initialize the ratectl state, a cap flag must be properly set and >>>> feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >>>> with our >>>> ieee80211_ratectl_rates(). >>>> >>>> I've added ieee80211_ratectl_rc_info_get() to be used to get the >>>> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >>>> it. Then we don't >>>> need to free it explicitly (the tag is freed when associated mbuf is >>>> freed) and this interface is unified to both __findrate__ and >>>> __complete__. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >>>> >>>>> Ah, cool! I see you've only just made the other drivers compile; >>>>> what's required to make them work? i guess a call >>>>> to ieee80211_ratectl_rc_info_set() ? >>>>> >>>>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper >>>>> that does the "lookup tag; if one exists use it else use a temporary one" >>>>> code that you put in if_ath.c, if_ath_tx.c. >>>>> >>>>> Other than that, this is looking very good! thankyou! >>>>> >>>>> >>>>> -adrian >>>>> >>>>> >>>>> >>>>> On 13 September 2013 20:52, Chenchong Qin wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Here is latest update. Per-device ratectl statistics is implemented >>>>>> in ath and attached when ath is attaching. >>>>>> >>>>>> Thanks! >>>>>> >>>>>> Chenchong >>>>>> >>>>>> >>>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>>>> >>>>>>> Sweet, thanks! >>>>>>> >>>>>>> >>>>>>> >>>>>>> -adrian >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>>>>> >>>>>>>> Hi! >>>>>>>> >>>>>>>> Here is some updates. >>>>>>>> >>>>>>>> Another member is added to ieee80211_rc_info to record value of the >>>>>>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>>>> >>>>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>>>> attach per-device api when attaching the device)? >>>>>>>> >>>>>>>> Code will be posted later. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>>>> be deleted during a channel change or scan, etc. >>>>>>>>> >>>>>>>>> And yes - the rate control lookup stuff for aggregate frames is a >>>>>>>>> bit messy. It would be nice for the rate control code to return the rate >>>>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>>>> to cap how long frames are at the given choice. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -adrian >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>>>>>> >>>>>>>>>> Hi! >>>>>>>>>> >>>>>>>>>> I've added some aggregation support here! >>>>>>>>>> >>>>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>>>> per-subframe length etc.) >>>>>>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>>>>>> must be performed >>>>>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>>>>> control decision >>>>>>>>>> is need) and subframe informations can be obtain only after the >>>>>>>>>> ampdu is formed. >>>>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to >>>>>>>>>> let it distinguish >>>>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is >>>>>>>>>> called in an aggregation >>>>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's >>>>>>>>>> now finding rates for an >>>>>>>>>> ampdu and the framelen which records len of the first frame can >>>>>>>>>> be ignored. When >>>>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>>>> subframes been sent >>>>>>>>>> and number of subframes been successfully received is passed to >>>>>>>>>> the ratectl api. >>>>>>>>>> >>>>>>>>>> I also get a question here - whether one tx that doesn't perform >>>>>>>>>> rate lookup will call >>>>>>>>>> the complete procedure? >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> Chenchong >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> Hi! >>>>>>>>>>> >>>>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>>>> >>>>>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn >>>>>>>>>>> repo . >>>>>>>>>>> >>>>>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" >>>>>>>>>>> (it looks like all things stop working, screen is freezing, keyboard and >>>>>>>>>>> mouse are not responding) after wireless stuff start working for a while. >>>>>>>>>>> At first, I consider it caused by my modification to ath. But this strange >>>>>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>>>>>> >>>>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>>>> to let it support aggregation? >>>>>>>>>>> >>>>>>>>>>> Thanks! >>>>>>>>>>> >>>>>>>>>>> Chenchong >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> OK! >>>>>>>>>>>> >>>>>>>>>>>> Thanks! :-) >>>>>>>>>>>> >>>>>>>>>>>> Chenchong >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd < >>>>>>>>>>>> adrian@freebsd.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi! >>>>>>>>>>>>> >>>>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>>>> >>>>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to >>>>>>>>>>>>> represent -all- of the tx related state - TX callback, rate control, rate >>>>>>>>>>>>> completion, aggregation state, retry count, etc. That way all the drivers >>>>>>>>>>>>> can use it. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -adrian >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 03:09:27 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id EC81F382; Thu, 19 Sep 2013 03:09:27 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-ve0-x235.google.com (mail-ve0-x235.google.com [IPv6:2607:f8b0:400c:c01::235]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 83A2C2BB2; Thu, 19 Sep 2013 03:09:27 +0000 (UTC) Received: by mail-ve0-f181.google.com with SMTP id oy12so6229276veb.40 for ; Wed, 18 Sep 2013 20:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=c8XiTQHJbSUThmkW5ZU7apiqaME9yBvREYBv434aFo4=; b=HJ7wVdwaOXqnyeJZoXXU5VPLKPE3rVZUpq3fxteiNYfONVGXOqXgAlwTgJXEXYBAgA J6/9Mwp5bbEWC6rnQRAjSaEj+WrBm++bAizlGiwAZBE91UW7uN5yXqVA+j0rQGu8OVDE 2DcyY1vO0tgW2COqtmqTh2fpv34TTWdS9TEo62oqdMhMCHnvoSyMDvDqWu/ijIeYh8n6 1W/ivS20ej6kreKiQJ9Hx0HOA0iXMHgUFuQPu31xCQod2MvMq+i/Jhlh0yM5NibtaYbl Db2SfY1DVZIpP/7hL2BHvXMme+gNBQGMz0RcEWvxBg0LaJDClwN9GTfCO+aOEy/gVRz3 gHTA== MIME-Version: 1.0 X-Received: by 10.58.208.130 with SMTP id me2mr40951089vec.13.1379560166552; Wed, 18 Sep 2013 20:09:26 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Wed, 18 Sep 2013 20:09:26 -0700 (PDT) In-Reply-To: References: Date: Thu, 19 Sep 2013 11:09:26 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Thu, 19 Sep 2013 03:09:28 -0000 OK! I'll post it later. :) Thanks! Chenchong On Thu, Sep 19, 2013 at 9:38 AM, Adrian Chadd wrote: > Sweet, thanks! > > Please post the final and some sample output from ifconfig and sysctl > somewhere so we can take a more detailed look. > > I'll be travelling over the next few days; I'll try to get it all > finalised later this month. > > Thanks again! Great work! > > > -adiran > > > > On 16 September 2013 02:32, Chenchong Qin wrote: > >> Hi! >> >> In this update, I update ieee80211_sample and complete >> ieee80211_ratectl_none templete. >> >> * rename ieee80211_rc_sample* to ieee80211_sample*. this seems to be more >> harmonious. >> * modify ieee80211_sample to let it use the latest net80211-ratectl >> features. >> * fix some errors in ieee80211_sample. >> * complete the ieee80211_ratectl_none templete with newly added >> net80211-ratectl functions. >> >> You will need to add wlan_sample to sys/conf/files to make >> ieee80211_sample compiled. >> >> Thanks! >> >> Chenchong >> >> >> On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin wrote: >> >>> Hi! >>> >>> Yes! >>> >>> Here is a fresh debug log. >>> >>> @adrian you may received many copies of this message because I got the >>> "Message body too large" limit of freebsd-wireless list. So I compress >>> the >>> log file and re-send it. Sorry to be confused. :) >>> >>> Thanks! >>> >>> Chenchong >>> >>> >>> On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: >>> >>>> Sweet! >>>> >>>> Does this work on your AR9227? Can you provide some example output? >>>> >>>> >>>> -a >>>> >>>> >>>> On 14 September 2013 21:08, Chenchong Qin wrote: >>>> >>>>> Hi! >>>>> >>>>> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make >>>>> other drivers work, the __init__ and __findrate__ parts also need to be >>>>> adapted. >>>>> When initialize the ratectl state, a cap flag must be properly set and >>>>> feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >>>>> with our >>>>> ieee80211_ratectl_rates(). >>>>> >>>>> I've added ieee80211_ratectl_rc_info_get() to be used to get the >>>>> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >>>>> it. Then we don't >>>>> need to free it explicitly (the tag is freed when associated mbuf is >>>>> freed) and this interface is unified to both __findrate__ and >>>>> __complete__. >>>>> >>>>> Thanks! >>>>> >>>>> Chenchong >>>>> >>>>> >>>>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >>>>> >>>>>> Ah, cool! I see you've only just made the other drivers compile; >>>>>> what's required to make them work? i guess a call >>>>>> to ieee80211_ratectl_rc_info_set() ? >>>>>> >>>>>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper >>>>>> that does the "lookup tag; if one exists use it else use a temporary one" >>>>>> code that you put in if_ath.c, if_ath_tx.c. >>>>>> >>>>>> Other than that, this is looking very good! thankyou! >>>>>> >>>>>> >>>>>> -adrian >>>>>> >>>>>> >>>>>> >>>>>> On 13 September 2013 20:52, Chenchong Qin wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> Here is latest update. Per-device ratectl statistics is implemented >>>>>>> in ath and attached when ath is attaching. >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>>>>> >>>>>>>> Sweet, thanks! >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -adrian >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> Here is some updates. >>>>>>>>> >>>>>>>>> Another member is added to ieee80211_rc_info to record value of >>>>>>>>> the maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>>>>> >>>>>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>>>>> attach per-device api when attaching the device)? >>>>>>>>> >>>>>>>>> Code will be posted later. >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> Chenchong >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>>>>> be deleted during a channel change or scan, etc. >>>>>>>>>> >>>>>>>>>> And yes - the rate control lookup stuff for aggregate frames is a >>>>>>>>>> bit messy. It would be nice for the rate control code to return the rate >>>>>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>>>>> to cap how long frames are at the given choice. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -adrian >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 11 September 2013 10:29, Chenchong Qin >>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> Hi! >>>>>>>>>>> >>>>>>>>>>> I've added some aggregation support here! >>>>>>>>>>> >>>>>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>>>>> per-subframe length etc.) >>>>>>>>>>> to the ratectl api. But it seems to be a paradox that rate >>>>>>>>>>> lookup must be performed >>>>>>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>>>>>> control decision >>>>>>>>>>> is need) and subframe informations can be obtain only after the >>>>>>>>>>> ampdu is formed. >>>>>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to >>>>>>>>>>> let it distinguish >>>>>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is >>>>>>>>>>> called in an aggregation >>>>>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's >>>>>>>>>>> now finding rates for an >>>>>>>>>>> ampdu and the framelen which records len of the first frame can >>>>>>>>>>> be ignored. When >>>>>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>>>>> subframes been sent >>>>>>>>>>> and number of subframes been successfully received is passed to >>>>>>>>>>> the ratectl api. >>>>>>>>>>> >>>>>>>>>>> I also get a question here - whether one tx that doesn't perform >>>>>>>>>>> rate lookup will call >>>>>>>>>>> the complete procedure? >>>>>>>>>>> >>>>>>>>>>> Thanks! >>>>>>>>>>> >>>>>>>>>>> Chenchong >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi! >>>>>>>>>>>> >>>>>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>>>>> >>>>>>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn >>>>>>>>>>>> repo . >>>>>>>>>>>> >>>>>>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" >>>>>>>>>>>> (it looks like all things stop working, screen is freezing, keyboard and >>>>>>>>>>>> mouse are not responding) after wireless stuff start working for a while. >>>>>>>>>>>> At first, I consider it caused by my modification to ath. But this strange >>>>>>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>>>>>>> >>>>>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>>>>> to let it support aggregation? >>>>>>>>>>>> >>>>>>>>>>>> Thanks! >>>>>>>>>>>> >>>>>>>>>>>> Chenchong >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> OK! >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks! :-) >>>>>>>>>>>>> >>>>>>>>>>>>> Chenchong >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd < >>>>>>>>>>>>> adrian@freebsd.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi! >>>>>>>>>>>>>> >>>>>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to >>>>>>>>>>>>>> represent -all- of the tx related state - TX callback, rate control, rate >>>>>>>>>>>>>> completion, aggregation state, retry count, etc. That way all the drivers >>>>>>>>>>>>>> can use it. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -adrian >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 08:30:05 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 84A97EAC; Thu, 19 Sep 2013 08:30:05 +0000 (UTC) (envelope-from lev@FreeBSD.org) Received: from onlyone.friendlyhosting.spb.ru (onlyone.friendlyhosting.spb.ru [46.4.40.135]) by mx1.freebsd.org (Postfix) with ESMTP id 314BF2D75; Thu, 19 Sep 2013 08:30:05 +0000 (UTC) Received: from lion.home.serebryakov.spb.ru (unknown [IPv6:2001:470:923f:1:e570:39d1:5fba:531f]) (Authenticated sender: lev@serebryakov.spb.ru) by onlyone.friendlyhosting.spb.ru (Postfix) with ESMTPSA id 986194AC58; Thu, 19 Sep 2013 12:29:57 +0400 (MSK) Date: Thu, 19 Sep 2013 12:29:44 +0400 From: Lev Serebryakov X-Priority: 3 (Normal) Message-ID: <145665175.20130919122944@serebryakov.spb.ru> To: Adrian Chadd Subject: Re: Chenchong's work on net80211_ratectl In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cc: Chenchong Qin , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Thu, 19 Sep 2013 08:30:05 -0000 Hello, Adrian. You wrote 19 =D1=81=D0=B5=D0=BD=D1=82=D1=8F=D0=B1=D1=80=D1=8F 2013 =D0=B3.,= 5:38:08: AC> Please post the final and some sample output from ifconfig and sysctl AC> somewhere so we can take a more detailed look. AC> I'll be travelling over the next few days; I'll try to get it all final= ised AC> later this month. We should beg re@ to include this in 10.0 :) --=20 // Black Lion AKA Lev Serebryakov From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 08:32:47 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 61E27FC8; Thu, 19 Sep 2013 08:32:47 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-we0-x231.google.com (mail-we0-x231.google.com [IPv6:2a00:1450:400c:c03::231]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B95AF2DB9; Thu, 19 Sep 2013 08:32:46 +0000 (UTC) Received: by mail-we0-f177.google.com with SMTP id t60so7523628wes.22 for ; Thu, 19 Sep 2013 01:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=fJzX/2CTbFdPNbbu864ATGqEqMU9DfskFXb1FCMuJ2Q=; b=n0u8d8V5UvlRikBgEd1x2QOLu5KbkwKK7ax2CFlgDiupLZH2oC0aMYCczedUR4Zq73 GvR2kojP+mQfghAN2zPNDXEp8DSLK9w5A5PYKlklJD757Gq/Of8tojk/vg0TnxR75CiS G47X28ArzFNujAeOad3HJDZ6QqW7z7P1B/xowoN6MKGImpF1h7o2adiNRO4aZC7YoQrL 6XHI1eNFk1EfUreER+jk7XQJrmChkcIWS2eRdj3AUVEeFySSKjHLQpDBrW3sQOFK39Mv i3ab4RzOj5EdLjW5hMvrcwSpb8tkqWKKuWSNK1GKvEWnVLr7hSCJDD6vaOXPA39mAJdC zRRg== MIME-Version: 1.0 X-Received: by 10.180.93.104 with SMTP id ct8mr394612wib.0.1379579565267; Thu, 19 Sep 2013 01:32:45 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Thu, 19 Sep 2013 01:32:45 -0700 (PDT) In-Reply-To: <145665175.20130919122944@serebryakov.spb.ru> References: <145665175.20130919122944@serebryakov.spb.ru> Date: Thu, 19 Sep 2013 01:32:45 -0700 X-Google-Sender-Auth: qfKldlMrjTc-aCP22B5kKOQSNlU Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Lev Serebryakov Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: Chenchong Qin , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Thu, 19 Sep 2013 08:32:47 -0000 hah, nope. This will go into -HEAD when it's ready. I'm not going to rush things. HEAD is already a bit ... special. -adrian On 19 September 2013 01:29, Lev Serebryakov wrote: > Hello, Adrian. > You wrote 19 =D3=C5=CE=D4=D1=C2=D2=D1 2013 =C7., 5:38:08: > > AC> Please post the final and some sample output from ifconfig and sysctl > AC> somewhere so we can take a more detailed look. > > AC> I'll be travelling over the next few days; I'll try to get it all > finalised > AC> later this month. > We should beg re@ to include this in 10.0 :) > > > -- > // Black Lion AKA Lev Serebryakov > > From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 08:35:42 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 37B7E16B; Thu, 19 Sep 2013 08:35:42 +0000 (UTC) (envelope-from lev@FreeBSD.org) Received: from onlyone.friendlyhosting.spb.ru (onlyone.friendlyhosting.spb.ru [46.4.40.135]) by mx1.freebsd.org (Postfix) with ESMTP id D6A1A2DE0; Thu, 19 Sep 2013 08:35:41 +0000 (UTC) Received: from lion.home.serebryakov.spb.ru (unknown [IPv6:2001:470:923f:1:e570:39d1:5fba:531f]) (Authenticated sender: lev@serebryakov.spb.ru) by onlyone.friendlyhosting.spb.ru (Postfix) with ESMTPSA id 5CED64AC57; Thu, 19 Sep 2013 12:35:40 +0400 (MSK) Date: Thu, 19 Sep 2013 12:35:26 +0400 From: Lev Serebryakov Organization: FreeBSD Project X-Priority: 3 (Normal) Message-ID: <1874176949.20130919123526@serebryakov.spb.ru> To: Adrian Chadd Subject: Re: Chenchong's work on net80211_ratectl In-Reply-To: References: <145665175.20130919122944@serebryakov.spb.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable Cc: Chenchong Qin , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: lev@FreeBSD.org 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: Thu, 19 Sep 2013 08:35:42 -0000 Hello, Adrian. You wrote 19 =D3=C5=CE=D4=D1=C2=D2=D1 2013 =C7., 12:32:45: AC> hah, nope. This will go into -HEAD when it's ready. I'm not going to ru= sh AC> things. HEAD is already a bit ... special. What do you mean?! -HEAD and 10-ALPHA2 are two names for same thing now :) And it is frozen, yes, but "svn up" shows me major commits (like ine iSCSI or Hyper-V drivers) every day :) --=20 // Black Lion AKA Lev Serebryakov From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 08:37:49 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1B8902AD; Thu, 19 Sep 2013 08:37:49 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-wi0-x236.google.com (mail-wi0-x236.google.com [IPv6:2a00:1450:400c:c05::236]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 7470B2DFE; Thu, 19 Sep 2013 08:37:48 +0000 (UTC) Received: by mail-wi0-f182.google.com with SMTP id ez12so7637313wid.9 for ; Thu, 19 Sep 2013 01:37:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=cpSiOXfeZfjgn3wMsGd0AbtLecu/3KX+03EWTyORbHk=; b=UO3e8UmfL+85kWEaQ/0IJeLEHM2ASUUaYnpsj12qPedJzBQnjSVs/ei/CE05agNoyt onMlYxbMWYfqSsiI7t93BG/78tzZj13+s2hz0TusumLrRpJQKV5jPP4vP82vJRl437JT h/rw30JOvf6VL6ZS+mKlXTJB2spXxY/dLBr8R1B1xwo1p+MNbmD+3svidwUd6H59d9Hg bsModVPoae4xPDaiRw/bH3UT3eNBBWSvJSBTlbIz8ubxCK62h03JOyYVEUeK3+gcw4bE geBMbfpfp93s/2Ja1IcG3Tev/xPo7eiALzfSIsXGnugJHWrCRYN5e/V3pI3iSS9ErDjP I5gg== MIME-Version: 1.0 X-Received: by 10.194.48.74 with SMTP id j10mr323122wjn.41.1379579866841; Thu, 19 Sep 2013 01:37:46 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Thu, 19 Sep 2013 01:37:46 -0700 (PDT) In-Reply-To: <1874176949.20130919123526@serebryakov.spb.ru> References: <145665175.20130919122944@serebryakov.spb.ru> <1874176949.20130919123526@serebryakov.spb.ru> Date: Thu, 19 Sep 2013 01:37:46 -0700 X-Google-Sender-Auth: Rf49tg6wsolgEr8x7BhOv2FeFdc Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Lev Serebryakov Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: Chenchong Qin , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Thu, 19 Sep 2013 08:37:49 -0000 Sure; but I don't want to use "people are breaking things" as justification to further break things. :-) 10.0 can ship without this. I'd rather this settle in -HEAD and convert / test all the other drivers over first before we consider MFC'ing it to -10. adrian On 19 September 2013 01:35, Lev Serebryakov wrote: > Hello, Adrian. > You wrote 19 =D1=81=D0=B5=D0=BD=D1=82=D1=8F=D0=B1=D1=80=D1=8F 2013 =D0=B3= ., 12:32:45: > > AC> hah, nope. This will go into -HEAD when it's ready. I'm not going to > rush > AC> things. HEAD is already a bit ... special. > What do you mean?! -HEAD and 10-ALPHA2 are two names for same thing now = :) > And it is frozen, yes, but "svn up" shows me major commits (like ine iSCS= I > or Hyper-V drivers) every day :) > > -- > // Black Lion AKA Lev Serebryakov > > From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 19 14:09:57 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B7C9510E; Thu, 19 Sep 2013 14:09:57 +0000 (UTC) (envelope-from lev@FreeBSD.org) Received: from onlyone.friendlyhosting.spb.ru (onlyone.friendlyhosting.spb.ru [46.4.40.135]) by mx1.freebsd.org (Postfix) with ESMTP id 6317F2053; Thu, 19 Sep 2013 14:09:57 +0000 (UTC) Received: from lion.home.serebryakov.spb.ru (unknown [IPv6:2001:470:923f:1:e570:39d1:5fba:531f]) (Authenticated sender: lev@serebryakov.spb.ru) by onlyone.friendlyhosting.spb.ru (Postfix) with ESMTPSA id 569C14AC57; Thu, 19 Sep 2013 18:09:55 +0400 (MSK) Date: Thu, 19 Sep 2013 18:09:41 +0400 From: Lev Serebryakov Organization: FreeBSD Project X-Priority: 3 (Normal) Message-ID: <1376854730.20130919180941@serebryakov.spb.ru> To: Adrian Chadd Subject: Re: Chenchong's work on net80211_ratectl In-Reply-To: References: <145665175.20130919122944@serebryakov.spb.ru> <1874176949.20130919123526@serebryakov.spb.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cc: Chenchong Qin , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: lev@FreeBSD.org 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: Thu, 19 Sep 2013 14:09:57 -0000 Hello, Adrian. You wrote 19 =D1=81=D0=B5=D0=BD=D1=82=D1=8F=D0=B1=D1=80=D1=8F 2013 =D0=B3.,= 12:37:46: AC> 10.0 can ship without this. I'd rather this settle in -HEAD and convert= / AC> test all the other drivers over first before we consider MFC'ing it to = -10. MFC is Ok too :) --=20 // Black Lion AKA Lev Serebryakov From owner-freebsd-wireless@FreeBSD.ORG Fri Sep 20 03:06:10 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 86A49D72; Fri, 20 Sep 2013 03:06:10 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-ve0-x22d.google.com (mail-ve0-x22d.google.com [IPv6:2607:f8b0:400c:c01::22d]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 00627290B; Fri, 20 Sep 2013 03:06:09 +0000 (UTC) Received: by mail-ve0-f173.google.com with SMTP id cz12so7465220veb.18 for ; Thu, 19 Sep 2013 20:06:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Oy/RpRcWxJHPtpoTyVVLSQ+1/rq+7bDJZ8w7f1ih/Oc=; b=LdzgiotLukZdRqw/QGuycgba8QN9msQtGTvvlhkQRy9Im59HAgxaBJHqvz5zy0mGhS L+95yOO7Y2/dMiEvfdNLH6EXU33Mf1mzQS1LWmR+edNTEjCbAJQdjUB/KdGJLxCvrG9v UkkZi9NnT0CBROoVoX5vVcCk0zsSo/Ya58YzqUrxzzz0rQsdw6l7yj4+ty06Ls6oEA9H RxZ4ndDEjrjTjP5OCaMrVxHLtvPO6qTo3CBX4AB9iX2Zi/OF6pGNAPOttJVbtFvnRWpV cbVoQBBKJCGSPRxrNnpPfnnZwnqY+IVvhkLIjLBiHtvpC8QUlHapDndOUfPXSxn8MZb2 io0A== MIME-Version: 1.0 X-Received: by 10.58.46.229 with SMTP id y5mr4095265vem.15.1379646368723; Thu, 19 Sep 2013 20:06:08 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Thu, 19 Sep 2013 20:06:08 -0700 (PDT) In-Reply-To: References: Date: Fri, 20 Sep 2013 11:06:08 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=089e0112d006b9872d04e6c7f31d X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Fri, 20 Sep 2013 03:06:10 -0000 --089e0112d006b9872d04e6c7f31d Content-Type: text/plain; charset=ISO-8859-1 Hi! Here is the final version and some output from ifconfig and sysctl. Thanks! Chenchong On Thu, Sep 19, 2013 at 11:09 AM, Chenchong Qin wrote: > OK! > > I'll post it later. :) > > Thanks! > > Chenchong > > > On Thu, Sep 19, 2013 at 9:38 AM, Adrian Chadd wrote: > >> Sweet, thanks! >> >> Please post the final and some sample output from ifconfig and sysctl >> somewhere so we can take a more detailed look. >> >> I'll be travelling over the next few days; I'll try to get it all >> finalised later this month. >> >> Thanks again! Great work! >> >> >> -adiran >> >> >> >> On 16 September 2013 02:32, Chenchong Qin wrote: >> >>> Hi! >>> >>> In this update, I update ieee80211_sample and complete >>> ieee80211_ratectl_none templete. >>> >>> * rename ieee80211_rc_sample* to ieee80211_sample*. this seems to be >>> more harmonious. >>> * modify ieee80211_sample to let it use the latest net80211-ratectl >>> features. >>> * fix some errors in ieee80211_sample. >>> * complete the ieee80211_ratectl_none templete with newly added >>> net80211-ratectl functions. >>> >>> You will need to add wlan_sample to sys/conf/files to make >>> ieee80211_sample compiled. >>> >>> Thanks! >>> >>> Chenchong >>> >>> >>> On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> Yes! >>>> >>>> Here is a fresh debug log. >>>> >>>> @adrian you may received many copies of this message because I got the >>>> "Message body too large" limit of freebsd-wireless list. So I compress >>>> the >>>> log file and re-send it. Sorry to be confused. :) >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: >>>> >>>>> Sweet! >>>>> >>>>> Does this work on your AR9227? Can you provide some example output? >>>>> >>>>> >>>>> -a >>>>> >>>>> >>>>> On 14 September 2013 21:08, Chenchong Qin wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make >>>>>> other drivers work, the __init__ and __findrate__ parts also need to be >>>>>> adapted. >>>>>> When initialize the ratectl state, a cap flag must be properly set >>>>>> and feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >>>>>> with our >>>>>> ieee80211_ratectl_rates(). >>>>>> >>>>>> I've added ieee80211_ratectl_rc_info_get() to be used to get the >>>>>> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >>>>>> it. Then we don't >>>>>> need to free it explicitly (the tag is freed when associated mbuf is >>>>>> freed) and this interface is unified to both __findrate__ and >>>>>> __complete__. >>>>>> >>>>>> Thanks! >>>>>> >>>>>> Chenchong >>>>>> >>>>>> >>>>>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >>>>>> >>>>>>> Ah, cool! I see you've only just made the other drivers compile; >>>>>>> what's required to make them work? i guess a call >>>>>>> to ieee80211_ratectl_rc_info_set() ? >>>>>>> >>>>>>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper >>>>>>> that does the "lookup tag; if one exists use it else use a temporary one" >>>>>>> code that you put in if_ath.c, if_ath_tx.c. >>>>>>> >>>>>>> Other than that, this is looking very good! thankyou! >>>>>>> >>>>>>> >>>>>>> -adrian >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 13 September 2013 20:52, Chenchong Qin wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> Here is latest update. Per-device ratectl statistics is implemented >>>>>>>> in ath and attached when ath is attaching. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>>>>>> >>>>>>>>> Sweet, thanks! >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -adrian >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On 13 September 2013 09:11, Chenchong Qin wrote: >>>>>>>>> >>>>>>>>>> Hi! >>>>>>>>>> >>>>>>>>>> Here is some updates. >>>>>>>>>> >>>>>>>>>> Another member is added to ieee80211_rc_info to record value of >>>>>>>>>> the maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>>>>>> >>>>>>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>>>>>> attach per-device api when attaching the device)? >>>>>>>>>> >>>>>>>>>> Code will be posted later. >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> Chenchong >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd >>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>>>>>> be deleted during a channel change or scan, etc. >>>>>>>>>>> >>>>>>>>>>> And yes - the rate control lookup stuff for aggregate frames is >>>>>>>>>>> a bit messy. It would be nice for the rate control code to return the rate >>>>>>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>>>>>> to cap how long frames are at the given choice. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -adrian >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 11 September 2013 10:29, Chenchong Qin < >>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi! >>>>>>>>>>>> >>>>>>>>>>>> I've added some aggregation support here! >>>>>>>>>>>> >>>>>>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>>>>>> per-subframe length etc.) >>>>>>>>>>>> to the ratectl api. But it seems to be a paradox that rate >>>>>>>>>>>> lookup must be performed >>>>>>>>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>>>>>>>> control decision >>>>>>>>>>>> is need) and subframe informations can be obtain only after the >>>>>>>>>>>> ampdu is formed. >>>>>>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to >>>>>>>>>>>> let it distinguish >>>>>>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is >>>>>>>>>>>> called in an aggregation >>>>>>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's >>>>>>>>>>>> now finding rates for an >>>>>>>>>>>> ampdu and the framelen which records len of the first frame can >>>>>>>>>>>> be ignored. When >>>>>>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>>>>>> subframes been sent >>>>>>>>>>>> and number of subframes been successfully received is passed to >>>>>>>>>>>> the ratectl api. >>>>>>>>>>>> >>>>>>>>>>>> I also get a question here - whether one tx that doesn't >>>>>>>>>>>> perform rate lookup will call >>>>>>>>>>>> the complete procedure? >>>>>>>>>>>> >>>>>>>>>>>> Thanks! >>>>>>>>>>>> >>>>>>>>>>>> Chenchong >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi! >>>>>>>>>>>>> >>>>>>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>>>>>> >>>>>>>>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn >>>>>>>>>>>>> repo . >>>>>>>>>>>>> >>>>>>>>>>>>> It's worth mentioning that sometimes the kernel will >>>>>>>>>>>>> "freezing" (it looks like all things stop working, screen is freezing, >>>>>>>>>>>>> keyboard and mouse are not responding) after wireless stuff start working >>>>>>>>>>>>> for a while. At first, I consider it caused by my modification to ath. But >>>>>>>>>>>>> this strange thing can also happen in a head kernel (r255382). >>>>>>>>>>>>> Attachment[1] is some useful messages just before it happens. By the way, I >>>>>>>>>>>>> use a AR9227 device. >>>>>>>>>>>>> >>>>>>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>>>>>> to let it support aggregation? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks! >>>>>>>>>>>>> >>>>>>>>>>>>> Chenchong >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> OK! >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks! :-) >>>>>>>>>>>>>> >>>>>>>>>>>>>> Chenchong >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd < >>>>>>>>>>>>>> adrian@freebsd.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi! >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to >>>>>>>>>>>>>>> represent -all- of the tx related state - TX callback, rate control, rate >>>>>>>>>>>>>>> completion, aggregation state, retry count, etc. That way all the drivers >>>>>>>>>>>>>>> can use it. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -adrian >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --089e0112d006b9872d04e6c7f31d-- From owner-freebsd-wireless@FreeBSD.ORG Fri Sep 20 12:37:00 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1C4549DC for ; Fri, 20 Sep 2013 12:37:00 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-we0-x22d.google.com (mail-we0-x22d.google.com [IPv6:2a00:1450:400c:c03::22d]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 772072466 for ; Fri, 20 Sep 2013 12:36:59 +0000 (UTC) Received: by mail-we0-f173.google.com with SMTP id w62so433901wes.32 for ; Fri, 20 Sep 2013 05:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=fEnhmXcfDPRs8pgXUzVkahW2FG/cnH70iOca21F4W6k=; b=PLM4dMSRwz5ue1yT+EoYUdi5vQDpZgTFsLyu1rp0x4EZha8D7/0g+5BM/caN0AKmeJ uycmER4bbdIpTiQIqNv9XMwavOsYaW7lJqdOrGHK4FFr2grGJOqw3GrKfWjTWCe72htZ K5VCw+CO92/ZaiPK0oFfeNV7h3AMSbabCOfMNXkazm7lSAauM2fPJehAnLh9Jm+pzReu NGrHeFNIDOJESWROlwkVNSZk/P5mlpJkWT4SlqjkkiUVpOJa7TqT7K5XKgXkA56uDm3R q1piJIaT58tQJ0kowQQ5cdEs9YATEKlckLUjNTVy3CGmMU71G6sYoqrAKXIXKp4f5OSs 2FiA== MIME-Version: 1.0 X-Received: by 10.180.10.136 with SMTP id i8mr2639554wib.46.1379680617791; Fri, 20 Sep 2013 05:36:57 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Fri, 20 Sep 2013 05:36:56 -0700 (PDT) Received: by 10.216.73.133 with HTTP; Fri, 20 Sep 2013 05:36:56 -0700 (PDT) In-Reply-To: References: Date: Fri, 20 Sep 2013 05:36:56 -0700 X-Google-Sender-Auth: tETvu7fJpFlvhNP16S0NAHFv2kg Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Adrian Chadd To: Chenchong Qin Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: freebsd-wireless@freebsd.org X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Fri, 20 Sep 2013 12:37:00 -0000 Cool! I'll check it out once I have finished traveling. Thanks for all your hard work! Adrian On Sep 19, 2013 8:06 PM, "Chenchong Qin" wrote: > Hi! > > Here is the final version and some output from ifconfig and sysctl. > > Thanks! > > Chenchong > > > On Thu, Sep 19, 2013 at 11:09 AM, Chenchong Qin wrote: > >> OK! >> >> I'll post it later. :) >> >> Thanks! >> >> Chenchong >> >> >> On Thu, Sep 19, 2013 at 9:38 AM, Adrian Chadd wrote: >> >>> Sweet, thanks! >>> >>> Please post the final and some sample output from ifconfig and sysctl >>> somewhere so we can take a more detailed look. >>> >>> I'll be travelling over the next few days; I'll try to get it all >>> finalised later this month. >>> >>> Thanks again! Great work! >>> >>> >>> -adiran >>> >>> >>> >>> On 16 September 2013 02:32, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> In this update, I update ieee80211_sample and complete >>>> ieee80211_ratectl_none templete. >>>> >>>> * rename ieee80211_rc_sample* to ieee80211_sample*. this seems to be >>>> more harmonious. >>>> * modify ieee80211_sample to let it use the latest net80211-ratectl >>>> features. >>>> * fix some errors in ieee80211_sample. >>>> * complete the ieee80211_ratectl_none templete with newly added >>>> net80211-ratectl functions. >>>> >>>> You will need to add wlan_sample to sys/conf/files to make >>>> ieee80211_sample compiled. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin wrote: >>>> >>>>> Hi! >>>>> >>>>> Yes! >>>>> >>>>> Here is a fresh debug log. >>>>> >>>>> @adrian you may received many copies of this message because I got the >>>>> "Message body too large" limit of freebsd-wireless list. So I compress >>>>> the >>>>> log file and re-send it. Sorry to be confused. :) >>>>> >>>>> Thanks! >>>>> >>>>> Chenchong >>>>> >>>>> >>>>> On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd wrote: >>>>> >>>>>> Sweet! >>>>>> >>>>>> Does this work on your AR9227? Can you provide some example output? >>>>>> >>>>>> >>>>>> -a >>>>>> >>>>>> >>>>>> On 14 September 2013 21:08, Chenchong Qin wrote: >>>>>> >>>>>>> Hi! >>>>>>> >>>>>>> Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make >>>>>>> other drivers work, the __init__ and __findrate__ parts also need to be >>>>>>> adapted. >>>>>>> When initialize the ratectl state, a cap flag must be properly set >>>>>>> and feed to ieee80211_ratectl_init(). __findrate__ part should be repalced >>>>>>> with our >>>>>>> ieee80211_ratectl_rates(). >>>>>>> >>>>>>> I've added ieee80211_ratectl_rc_info_get() to be used to get the >>>>>>> ieee80211_rc_info. If found the tag, use it; if not, add a new one and use >>>>>>> it. Then we don't >>>>>>> need to free it explicitly (the tag is freed when associated mbuf >>>>>>> is freed) and this interface is unified to both __findrate__ and >>>>>>> __complete__. >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: >>>>>>> >>>>>>>> Ah, cool! I see you've only just made the other drivers compile; >>>>>>>> what's required to make them work? i guess a call >>>>>>>> to ieee80211_ratectl_rc_info_set() ? >>>>>>>> >>>>>>>> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper >>>>>>>> that does the "lookup tag; if one exists use it else use a temporary one" >>>>>>>> code that you put in if_ath.c, if_ath_tx.c. >>>>>>>> >>>>>>>> Other than that, this is looking very good! thankyou! >>>>>>>> >>>>>>>> >>>>>>>> -adrian >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 13 September 2013 20:52, Chenchong Qin wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> Here is latest update. Per-device ratectl statistics is >>>>>>>>> implemented in ath and attached when ath is attaching. >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> Chenchong >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >>>>>>>>> >>>>>>>>>> Sweet, thanks! >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -adrian >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 13 September 2013 09:11, Chenchong Qin >>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> Hi! >>>>>>>>>>> >>>>>>>>>>> Here is some updates. >>>>>>>>>>> >>>>>>>>>>> Another member is added to ieee80211_rc_info to record value of >>>>>>>>>>> the maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>>>>>>>>> inform aggregation selection code of proper maximum aggregate size. >>>>>>>>>>> >>>>>>>>>>> Per-vap ratectl statistics is exported through sysctl. When >>>>>>>>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>>>>>>>>> convenient to implement the per-device api -- just traverse the vap list >>>>>>>>>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>>>>>>>>> provides service to vap-granularity object, not to device directly. So, is >>>>>>>>>>> it more suitable to implement the per-device api in device driver (i.e. >>>>>>>>>>> attach per-device api when attaching the device)? >>>>>>>>>>> >>>>>>>>>>> Code will be posted later. >>>>>>>>>>> >>>>>>>>>>> Thanks! >>>>>>>>>>> >>>>>>>>>>> Chenchong >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd < >>>>>>>>>>> adrian@freebsd.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> For now, yes, you have to assume that you won't always get a >>>>>>>>>>>> response for a rate lookup. The buffer may be sent with NOACK set, it may >>>>>>>>>>>> be deleted during a channel change or scan, etc. >>>>>>>>>>>> >>>>>>>>>>>> And yes - the rate control lookup stuff for aggregate frames is >>>>>>>>>>>> a bit messy. It would be nice for the rate control code to return the rate >>>>>>>>>>>> _and_ the maximum aggregate size, in case the aggregation selection wants >>>>>>>>>>>> to cap how long frames are at the given choice. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -adrian >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On 11 September 2013 10:29, Chenchong Qin < >>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi! >>>>>>>>>>>>> >>>>>>>>>>>>> I've added some aggregation support here! >>>>>>>>>>>>> >>>>>>>>>>>>> At first I intend to pass subframe informations(nframes, >>>>>>>>>>>>> per-subframe length etc.) >>>>>>>>>>>>> to the ratectl api. But it seems to be a paradox that rate >>>>>>>>>>>>> lookup must be performed >>>>>>>>>>>>> before the ampdu is formed (aggregation limit based on the >>>>>>>>>>>>> rate control decision >>>>>>>>>>>>> is need) and subframe informations can be obtain only after >>>>>>>>>>>>> the ampdu is formed. >>>>>>>>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to >>>>>>>>>>>>> let it distinguish >>>>>>>>>>>>> aggregation and non-aggregation scenarios. If rate lookup is >>>>>>>>>>>>> called in an aggregation >>>>>>>>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's >>>>>>>>>>>>> now finding rates for an >>>>>>>>>>>>> ampdu and the framelen which records len of the first frame >>>>>>>>>>>>> can be ignored. When >>>>>>>>>>>>> it comes to complete period, tx status that shows number of >>>>>>>>>>>>> subframes been sent >>>>>>>>>>>>> and number of subframes been successfully received is passed >>>>>>>>>>>>> to the ratectl api. >>>>>>>>>>>>> >>>>>>>>>>>>> I also get a question here - whether one tx that doesn't >>>>>>>>>>>>> perform rate lookup will call >>>>>>>>>>>>> the complete procedure? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks! >>>>>>>>>>>>> >>>>>>>>>>>>> Chenchong >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi! >>>>>>>>>>>>>> >>>>>>>>>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>>>>>>>>> >>>>>>>>>>>>>> After days of frustration (compile errors, boot failed, >>>>>>>>>>>>>> kernel panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>>>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>>>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>>>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn >>>>>>>>>>>>>> repo . >>>>>>>>>>>>>> >>>>>>>>>>>>>> It's worth mentioning that sometimes the kernel will >>>>>>>>>>>>>> "freezing" (it looks like all things stop working, screen is freezing, >>>>>>>>>>>>>> keyboard and mouse are not responding) after wireless stuff start working >>>>>>>>>>>>>> for a while. At first, I consider it caused by my modification to ath. But >>>>>>>>>>>>>> this strange thing can also happen in a head kernel (r255382). >>>>>>>>>>>>>> Attachment[1] is some useful messages just before it happens. By the way, I >>>>>>>>>>>>>> use a AR9227 device. >>>>>>>>>>>>>> >>>>>>>>>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>>>>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>>>>>>>>> to let it support aggregation? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks! >>>>>>>>>>>>>> >>>>>>>>>>>>>> Chenchong >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>>>>>>>>> qinchenchong@gmail.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> OK! >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks! :-) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Chenchong >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd < >>>>>>>>>>>>>>> adrian@freebsd.org> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi! >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I've long thought about adding a net80211 mbuf tag to >>>>>>>>>>>>>>>> represent -all- of the tx related state - TX callback, rate control, rate >>>>>>>>>>>>>>>> completion, aggregation state, retry count, etc. That way all the drivers >>>>>>>>>>>>>>>> can use it. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -adrian >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > From owner-freebsd-wireless@FreeBSD.ORG Fri Sep 20 22:29:36 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5779979C for ; Fri, 20 Sep 2013 22:29:36 +0000 (UTC) (envelope-from hiren.panchasara@gmail.com) Received: from mail-ee0-x22d.google.com (mail-ee0-x22d.google.com [IPv6:2a00:1450:4013:c00::22d]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D67442641 for ; Fri, 20 Sep 2013 22:29:35 +0000 (UTC) Received: by mail-ee0-f45.google.com with SMTP id c50so543467eek.18 for ; Fri, 20 Sep 2013 15:29:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=zHD9qoiBJ+4/RtFMX7CMYcZCPDVgVoKCMnEPeqfORaw=; b=iwQVY0pbDOrQEQ80/GFUvblFLFeNK7CRDD6qngIW3Oxuax8R+0DGLXAFmz4U3ziY8T 0lerJd3p5MJOWOry0AihE1D/4LbRVCVXjvpY9HMZ7++oO459l8EcxockM/fi9soqnD6z AldNA9HLhPhr3UlpCFQBWUmKBPdoQuqRMiNGQnK7U8TLCuH13d8OraMW9NmdDsymWNNF ylazb/0gEnafUc8OUxI5D4cVYfeadJzcnyfWc967159u4PSKAstCp0xFYVuXpvGmyQU1 9fD6CApYPCa1y4ea0WA79Xy/fbYNf4ImqlAWQU/kHbgsdr40zgCl6KgS0DvwXJoPjkKr EShA== MIME-Version: 1.0 X-Received: by 10.14.88.65 with SMTP id z41mr13767524eee.38.1379716174320; Fri, 20 Sep 2013 15:29:34 -0700 (PDT) Received: by 10.14.105.137 with HTTP; Fri, 20 Sep 2013 15:29:34 -0700 (PDT) Date: Fri, 20 Sep 2013 15:29:34 -0700 Message-ID: Subject: ath0 "monitor mode" mystery From: hiren panchasara To: "freebsd-wireless@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Fri, 20 Sep 2013 22:29:36 -0000 I am trying to enable (what I think is) monitor mode on PicoStation M2HP. I am confused though. "man ifconfig" is also showing 2 different "monitor" things. I tried both below: # ifconfig wlan0 create wlandev ath0 wlan0: Ethernet address: dc:9f:db:6a:3e:9e # ifconfig wlan0 down # ifconfig wlan0 monitor # ifconfig wlan0 channel 4 # ifconfig wlan0 up # # ifconfig wlan0 wlan0: flags=48843 metric 0 mtu 1500 ether dc:9f:db:6a:3e:9e media: IEEE 802.11 Wireless Ethernet autoselect (autoselect) status: no carrier ssid "" channel 4 (2427 MHz 11g) regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF txpower 30 bmiss 7 scanvalid 60 protmode CTS wme burst bintval 0 # And now I get things via: # tcpdump -ni wlan0 -y IEEE802_11_RADIO wlan0: promiscuous mode enabled wlan0: promiscuous mode disabled wlan0: promiscuous mode enabled tcpdump: data link type IEEE802_11_RADIO tcpdump: WARNING: wlan0: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlan0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes 18:56:23.803065 9838362989us tsft 1.0 Mb/s 60dBm tx power antenna 0 2427 MHz 11g Probe Request () [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] 18:56:23.994159 9838553735us tsft 1.0 Mb/s -75dB signal -96dB noise antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit] 18:56:23.995089 9838554678us tsft 1.0 Mb/s -75dB signal -96dB noise antenna 1 2427 MHz 11g Probe Request (Y!Office) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit] 18:56:23.995979 9838555575us tsft 1.0 Mb/s -75dB signal -96dB noise antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit] 18:56:24.002484 9838562077us tsft 1.0 Mb/s -76dB signal -96dB noise antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit] 18:56:24.016082 9838576006us tsft 1.0 Mb/s 60dBm tx power antenna 0 2427 MHz 11g ht/40+ Probe Request () [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] But is this really a monitor mode? Not according to tcpdump. What we are seeing above are beacons sent out by APs? How do we get probe requests sent to APs by devices? man tcpdump says: -I Put the interface in "monitor mode"; this is supported only on IEEE 802.11 Wi-Fi interfaces, and supported only on some operat- ing systems. Note that in monitor mode the adapter might disassociate from the network with which it's associated, so that you will not be able to use any wireless networks with that adapter. This could prevent accessing files on a network server, or resolving host names or network addresses, if you are capturing in monitor mode and are not connected to another network with another adapter. This flag will affect the output of the -L flag. If -I isn't specified, only those link-layer types available when not in monitor mode will be shown; if -I is specified, only those link- layer types available when in monitor mode will be shown. So I tried -I, # tcpdump -Ii wlan0 -y IEEE802_11_RADIO tcpdump: wlan0 is not a monitor mode VAP To create a new monitor mode VAP use: ifconfig wlan1 create wlandev ath0 wlanmode monitor and use wlan1 as the tcpdump interface # Okay, lets create wlan1 as suggested: # ifconfig wlan1 create wlandev ath0 wlanmode monitor wlan1: Ethernet address: dc:9f:db:6a:3e:9e # ifconfig wlan1 wlan1: flags=8802 metric 0 mtu 1500 ether dc:9f:db:6a:3e:9e media: IEEE 802.11 Wireless Ethernet autoselect (autoselect ) status: no carrier ssid "" channel 4 (2427 MHz 11g) regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF txpower 30 scanvalid 60 protmode CTS wme burst bintval 0 # See subtle difference between wlan0 and wlan1. Still no success (but new error): # tcpdump -Ii wlan1 -y IEEE802_11_RADIO wlan1: promiscuous mode enabled tcpdump: data link type IEEE802_11_RADIO tcpdump: WARNING: wlan1: no IPv4 address assigned ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlan1, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel ar5416StopDmaReceive: dma failed to stop in 10ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 wlan1: promiscuous mode disabled # I also tried to do mixed version of both wlan0 and wlan1: # ifconfig wlan0 destroy # ifconfig wlan0 create wlandev ath0 wlanmode monitor wlan0: Ethernet address: dc:9f:db:6a:3e:9e # ifconfig wlan0 monitor # ifconfig wlan0 channel 4 # ifconfig wlan0 up ar5416PerCalibrationN: NF calibration didn't finish; delaying CCA # # ifconfig wlan0 wlan0: flags=48843 metric 0 mtu 1500 ether dc:9f:db:6a:3e:9e media: IEEE 802.11 Wireless Ethernet autoselect mode 11ng status: running ssid "" channel 4 (2427 MHz 11g ht/40+) bssid dc:9f:db:6a:3e:9e regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF txpower 30 scanvalid 60 protmode CTS ampdulimit 8k ampdudensity 8 shortgi wme burst # But no success: # tcpdump -Ii wlan0 -y IEEE802_11_RADIO wlan0: promiscuous mode enabled tcpdump: data link type IEEE802_11_RADIO tcpdump: WARNING: wlan0: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlan0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes ^C 0 packets capturwlan0: promiscuous mode disabled ed 0 packets received by filter 0 packets dropped by kernel # From owner-freebsd-wireless@FreeBSD.ORG Sat Sep 21 03:41:11 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DA811FC9; Sat, 21 Sep 2013 03:41:11 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vc0-x22a.google.com (mail-vc0-x22a.google.com [IPv6:2607:f8b0:400c:c03::22a]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 69C4D23E7; Sat, 21 Sep 2013 03:41:11 +0000 (UTC) Received: by mail-vc0-f170.google.com with SMTP id kw10so905824vcb.29 for ; Fri, 20 Sep 2013 20:41:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=DIiVT/9h0mbHe5UiZxsG4oujSwmnNURlEEFXCwgmyIE=; b=uHJ9GHHzpfgdVQBSso4P9wRXyoJeBiAKmnCsEyB0u0QPqWA2/5R/D/3oTV/g15x+hW 14LZe1LxLYeRXcwczaLtumVSkepWfNauZglabAAeiqiE9qcJ2IYlUjqGYcnTQ4JGumv1 l54DQ/P2jLTr1C+DCxOV2Q2Trm7H1L57oOJuGixIRWeB0uq5riFkWEfQBxrCuXe+bIRs jUMUZZeGv7wghaxe6OoaJP530oXPHC1Ga+cXQ1zYyZjZzRNjt1Usmu+kkyWlDUCcOpxg LxkjCij1j1Lm1YxUwp76ziKTPoVVrobj4YYwiElWqPFklMyNnyQexWdb+KKg0BJd3Y3s gztw== MIME-Version: 1.0 X-Received: by 10.59.11.69 with SMTP id eg5mr9602703ved.17.1379734869822; Fri, 20 Sep 2013 20:41:09 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Fri, 20 Sep 2013 20:41:09 -0700 (PDT) In-Reply-To: <1379733007.2623.0.camel@localhost> References: <1379693639.2625.0.camel@localhost> <1379733007.2623.0.camel@localhost> Date: Sat, 21 Sep 2013 11:41:09 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Sean Bruno Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Sat, 21 Sep 2013 03:41:11 -0000 Hi! Thanks for your reminder! I've posted it to my project page. You can now download it from the "Code" section in the bottom. Thanks again! Chenchong On Sat, Sep 21, 2013 at 11:10 AM, Sean Bruno wrote: > There was no .tar.gz file attached to the email. It was probably > stripped by freebsd.org. > > You'll probably need to post it somewhere for us to download. > > Sean > > On Sat, 2013-09-21 at 08:08 +0800, Chenchong Qin wrote: > > Hi! > > > > > > It's in the .tar.gz file attached in last mail. > > > > > > Thanks! > > > > > > Chenchong > > > > > > On Sat, Sep 21, 2013 at 12:13 AM, Sean Bruno > > wrote: > > > > > > On Fri, 2013-09-20 at 11:06 +0800, Chenchong Qin wrote: > > > Hi! > > > > > > Here is the final version and some output from ifconfig and > > sysctl. > > > > > > Thanks! > > > > > > Chenchong > > > > > > > I didn't see anything attached to this message that looks like > > a patch. > > Where should I go to try out your changes? > > > > sean > > > > > > > > > > On Thu, Sep 19, 2013 at 11:09 AM, Chenchong Qin > > wrote: > > > > > > > OK! > > > > > > > > I'll post it later. :) > > > > > > > > Thanks! > > > > > > > > Chenchong > > > > > > > > > > > > On Thu, Sep 19, 2013 at 9:38 AM, Adrian Chadd > > wrote: > > > > > > > >> Sweet, thanks! > > > >> > > > >> Please post the final and some sample output from > > ifconfig and sysctl > > > >> somewhere so we can take a more detailed look. > > > >> > > > >> I'll be travelling over the next few days; I'll try to > > get it all > > > >> finalised later this month. > > > >> > > > >> Thanks again! Great work! > > > >> > > > >> > > > >> -adiran > > > >> > > > >> > > > >> > > > >> On 16 September 2013 02:32, Chenchong Qin > > wrote: > > > >> > > > >>> Hi! > > > >>> > > > >>> In this update, I update ieee80211_sample and complete > > > >>> ieee80211_ratectl_none templete. > > > >>> > > > >>> * rename ieee80211_rc_sample* to ieee80211_sample*. this > > seems to be > > > >>> more harmonious. > > > >>> * modify ieee80211_sample to let it use the latest > > net80211-ratectl > > > >>> features. > > > >>> * fix some errors in ieee80211_sample. > > > >>> * complete the ieee80211_ratectl_none templete with > > newly added > > > >>> net80211-ratectl functions. > > > >>> > > > >>> You will need to add wlan_sample to sys/conf/files to > > make > > > >>> ieee80211_sample compiled. > > > >>> > > > >>> Thanks! > > > >>> > > > >>> Chenchong > > > >>> > > > >>> > > > >>> On Mon, Sep 16, 2013 at 5:08 PM, Chenchong Qin > > wrote: > > > >>> > > > >>>> Hi! > > > >>>> > > > >>>> Yes! > > > >>>> > > > >>>> Here is a fresh debug log. > > > >>>> > > > >>>> @adrian you may received many copies of this message > > because I got the > > > >>>> "Message body too large" limit of freebsd-wireless > > list. So I compress > > > >>>> the > > > >>>> log file and re-send it. Sorry to be confused. :) > > > >>>> > > > >>>> Thanks! > > > >>>> > > > >>>> Chenchong > > > >>>> > > > >>>> > > > >>>> On Mon, Sep 16, 2013 at 4:40 PM, Adrian Chadd > > wrote: > > > >>>> > > > >>>>> Sweet! > > > >>>>> > > > >>>>> Does this work on your AR9227? Can you provide some > > example output? > > > >>>>> > > > >>>>> > > > >>>>> -a > > > >>>>> > > > >>>>> > > > >>>>> On 14 September 2013 21:08, Chenchong Qin > > wrote: > > > >>>>> > > > >>>>>> Hi! > > > >>>>>> > > > >>>>>> Yes, a call to ieee80211_ratectl_rc_info_set() is > > needed. To make > > > >>>>>> other drivers work, the __init__ and __findrate__ > > parts also need to be > > > >>>>>> adapted. > > > >>>>>> When initialize the ratectl state, a cap flag must be > > properly set > > > >>>>>> and feed to ieee80211_ratectl_init(). __findrate__ > > part should be repalced > > > >>>>>> with our > > > >>>>>> ieee80211_ratectl_rates(). > > > >>>>>> > > > >>>>>> I've added ieee80211_ratectl_rc_info_get() to be > > used to get the > > > >>>>>> ieee80211_rc_info. If found the tag, use it; if not, > > add a new one and use > > > >>>>>> it. Then we don't > > > >>>>>> need to free it explicitly (the tag is freed when > > associated mbuf is > > > >>>>>> freed) and this interface is unified to both > > __findrate__ and > > > >>>>>> __complete__. > > > >>>>>> > > > >>>>>> Thanks! > > > >>>>>> > > > >>>>>> Chenchong > > > >>>>>> > > > >>>>>> > > > >>>>>> On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd > > wrote: > > > >>>>>> > > > >>>>>>> Ah, cool! I see you've only just made the other > > drivers compile; > > > >>>>>>> what's required to make them work? i guess a call > > > >>>>>>> to ieee80211_ratectl_rc_info_set() ? > > > >>>>>>> > > > >>>>>>> Maybe you should add a > > ieee80211_ratectl_rc_info_set_mbuf() helper > > > >>>>>>> that does the "lookup tag; if one exists use it else > > use a temporary one" > > > >>>>>>> code that you put in if_ath.c, if_ath_tx.c. > > > >>>>>>> > > > >>>>>>> Other than that, this is looking very good! > > thankyou! > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> -adrian > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> On 13 September 2013 20:52, Chenchong Qin > > wrote: > > > >>>>>>> > > > >>>>>>>> Hi, > > > >>>>>>>> > > > >>>>>>>> Here is latest update. Per-device ratectl > > statistics is implemented > > > >>>>>>>> in ath and attached when ath is attaching. > > > >>>>>>>> > > > >>>>>>>> Thanks! > > > >>>>>>>> > > > >>>>>>>> Chenchong > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd > > wrote: > > > >>>>>>>> > > > >>>>>>>>> Sweet, thanks! > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> -adrian > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> On 13 September 2013 09:11, Chenchong Qin > > wrote: > > > >>>>>>>>> > > > >>>>>>>>>> Hi! > > > >>>>>>>>>> > > > >>>>>>>>>> Here is some updates. > > > >>>>>>>>>> > > > >>>>>>>>>> Another member is added to ieee80211_rc_info to > > record value of > > > >>>>>>>>>> the maximum aggregate size. Then, in aggregation > > scenario, ratectl algo can > > > >>>>>>>>>> inform aggregation selection code of proper > > maximum aggregate size. > > > >>>>>>>>>> > > > >>>>>>>>>> Per-vap ratectl statistics is exported through > > sysctl. When > > > >>>>>>>>>> ieee80211_ratectl_init() is called, this > > statistics api is attached. It's > > > >>>>>>>>>> convenient to implement the per-device api -- > > just traverse the vap list > > > >>>>>>>>>> and call per-vap api for each vap. But, we know > > that ratectl of net80211 > > > >>>>>>>>>> provides service to vap-granularity object, not > > to device directly. So, is > > > >>>>>>>>>> it more suitable to implement the per-device api > > in device driver (i.e. > > > >>>>>>>>>> attach per-device api when attaching the device)? > > > >>>>>>>>>> > > > >>>>>>>>>> Code will be posted later. > > > >>>>>>>>>> > > > >>>>>>>>>> Thanks! > > > >>>>>>>>>> > > > >>>>>>>>>> Chenchong > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd > > > > >>>>>>>>>> > wrote: > > > >>>>>>>>>> > > > >>>>>>>>>>> Hi, > > > >>>>>>>>>>> > > > >>>>>>>>>>> For now, yes, you have to assume that you won't > > always get a > > > >>>>>>>>>>> response for a rate lookup. The buffer may be > > sent with NOACK set, it may > > > >>>>>>>>>>> be deleted during a channel change or scan, etc. > > > >>>>>>>>>>> > > > >>>>>>>>>>> And yes - the rate control lookup stuff for > > aggregate frames is > > > >>>>>>>>>>> a bit messy. It would be nice for the rate > > control code to return the rate > > > >>>>>>>>>>> _and_ the maximum aggregate size, in case the > > aggregation selection wants > > > >>>>>>>>>>> to cap how long frames are at the given choice. > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> -adrian > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> On 11 September 2013 10:29, Chenchong Qin < > > > >>>>>>>>>>> qinchenchong@gmail.com> wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>>> Hi! > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> I've added some aggregation support here! > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> At first I intend to pass subframe > > informations(nframes, > > > >>>>>>>>>>>> per-subframe length etc.) > > > >>>>>>>>>>>> to the ratectl api. But it seems to be a > > paradox that rate > > > >>>>>>>>>>>> lookup must be performed > > > >>>>>>>>>>>> before the ampdu is formed (aggregation limit > > based on the rate > > > >>>>>>>>>>>> control decision > > > >>>>>>>>>>>> is need) and subframe informations can be > > obtain only after the > > > >>>>>>>>>>>> ampdu is formed. > > > >>>>>>>>>>>> So, I add a new ieee80211_rc_info flag to > > ieee80211_ratectl to > > > >>>>>>>>>>>> let it distinguish > > > >>>>>>>>>>>> aggregation and non-aggregation scenarios. If > > rate lookup is > > > >>>>>>>>>>>> called in an aggregation > > > >>>>>>>>>>>> scenario, this flag is set. Then, ratectl algo > > knows that it's > > > >>>>>>>>>>>> now finding rates for an > > > >>>>>>>>>>>> ampdu and the framelen which records len of the > > first frame can > > > >>>>>>>>>>>> be ignored. When > > > >>>>>>>>>>>> it comes to complete period, tx status that > > shows number of > > > >>>>>>>>>>>> subframes been sent > > > >>>>>>>>>>>> and number of subframes been successfully > > received is passed to > > > >>>>>>>>>>>> the ratectl api. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> I also get a question here - whether one tx > > that doesn't > > > >>>>>>>>>>>> perform rate lookup will call > > > >>>>>>>>>>>> the complete procedure? > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Thanks! > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Chenchong > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin > > < > > > >>>>>>>>>>>> qinchenchong@gmail.com> wrote: > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> Hi! > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> I've added the common ratectl state as an mbuf > > tag! > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> After days of frustration (compile errors, > > boot failed, kernel > > > >>>>>>>>>>>>> panics, suddenly kernel freezing...), it seems > > that ath now can use > > > >>>>>>>>>>>>> 11n-aware net80211 ratectl api to do rate > > control. Attachment[0] is the > > > >>>>>>>>>>>>> diff of modifications to dev/ath. Changes to > > net80211 is minor this time. > > > >>>>>>>>>>>>> Just add some debug msgs to it. Please > > reference my gsoc svn > > > > > >>>>>>>>>>>>> repo > > . > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> It's worth mentioning that sometimes the > > kernel will > > > >>>>>>>>>>>>> "freezing" (it looks like all things stop > > working, screen is freezing, > > > >>>>>>>>>>>>> keyboard and mouse are not responding) after > > wireless stuff start working > > > >>>>>>>>>>>>> for a while. At first, I consider it caused by > > my modification to ath. But > > > >>>>>>>>>>>>> this strange thing can also happen in a head > > kernel (r255382). > > > >>>>>>>>>>>>> Attachment[1] is some useful messages just > > before it happens. By the way, I > > > >>>>>>>>>>>>> use a AR9227 device. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> And, I found that, for aggregation scenario, > > ath gathers tx > > > >>>>>>>>>>>>> information and update the ratectl states. So, > > what we can do to net80211 > > > >>>>>>>>>>>>> to let it support aggregation? > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Thanks! > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Chenchong > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin > > < > > > >>>>>>>>>>>>> qinchenchong@gmail.com> wrote: > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>> OK! > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Thanks! :-) > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Chenchong > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd > > < > > > >>>>>>>>>>>>>> adrian@freebsd.org> wrote: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> Hi! > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> You can declare an mbuf tag and use that. > > Look at M_TXCB in > > > >>>>>>>>>>>>>>> net80211 and how mbuf tags are added. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> I've long thought about adding a net80211 > > mbuf tag to > > > >>>>>>>>>>>>>>> represent -all- of the tx related state - TX > > callback, rate control, rate > > > >>>>>>>>>>>>>>> completion, aggregation state, retry count, > > etc. That way all the drivers > > > >>>>>>>>>>>>>>> can use it. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> -adrian > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > >> > > > > > > > > > _______________________________________________ > > > freebsd-wireless@freebsd.org mailing list > > > http://lists.freebsd.org/mailman/listinfo/freebsd-wireless > > > To unsubscribe, send any mail to > > "freebsd-wireless-unsubscribe@freebsd.org" > > > > > > > > From owner-freebsd-wireless@FreeBSD.ORG Sat Sep 21 12:59:39 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id CC52B9B9 for ; Sat, 21 Sep 2013 12:59:39 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-wg0-x234.google.com (mail-wg0-x234.google.com [IPv6:2a00:1450:400c:c00::234]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 54EA62DE4 for ; Sat, 21 Sep 2013 12:59:39 +0000 (UTC) Received: by mail-wg0-f52.google.com with SMTP id m15so1496643wgh.31 for ; Sat, 21 Sep 2013 05:59:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=EzjnPQsJbs3QVIY/HgWibYuUiE99EFRtjLuINE9tPn0=; b=F2fP913DNuagGsSNM6udxfdabaVRb4WIHHKrXchx23EN3HBI8fI7TOvgXZ63b7Hi3J e0Qd5elhFCKXft2/lbJsZ5DTg9oUecPB3NZ88a1QXBXzLz40xVRUrgnpwKm0eev7ura5 qEETXe9jIA/ORIvpFjOkj+vUHRciQtIo17iYp6wvtJDWtAowoju6eU1G56soslPIWMQP PshbVg77Vgz8biRjNCbcro7Mr1EVU9CQ+dle50gQxmOZGISTT2Vy2b3vYriY4BJ0ttEv Ko8T3o852/+VuxK/d7VJoHb9LYJWRT6gUzHNxK7f/gc1lecU88pVKKUG+Fl0jg66Ykxt 23qA== MIME-Version: 1.0 X-Received: by 10.195.13.45 with SMTP id ev13mr9826444wjd.20.1379768376441; Sat, 21 Sep 2013 05:59:36 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.73.133 with HTTP; Sat, 21 Sep 2013 05:59:36 -0700 (PDT) In-Reply-To: References: Date: Sat, 21 Sep 2013 05:59:36 -0700 X-Google-Sender-Auth: wpjiCQ4muUjDaIfNkvqfCJF7KkU Message-ID: Subject: Re: ath0 "monitor mode" mystery From: Adrian Chadd To: hiren panchasara Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 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: Sat, 21 Sep 2013 12:59:39 -0000 Hi! I don't know what the "monitor" flag is supposed to do, sorry. I think it's supposed to do the same as having a monitor mode vap but I don't know if the ath(4) driver knows about this. I honestly haven't used it. :-P The monitor mode vap is so you can create a monitoring interface without having to be an AP or a STA. Ie, in monitor mode the NIC doesn't respond to frames, doesn't ACK things that are destined to it, etc. It also doesn't allow you transmit on it from userspace. The DMA errors there are likely just from channel changes. Normally I do: ifconfig wlan0 create wlandev ath0 wlanmode monitor ifconfig wlan0 channel X ifconfig wlan0 up -adrian On 20 September 2013 15:29, hiren panchasara wrote: > I am trying to enable (what I think is) monitor mode on PicoStation M2HP. > > I am confused though. "man ifconfig" is also showing 2 different "monitor" > things. I tried both below: > > # ifconfig wlan0 create wlandev ath0 > wlan0: Ethernet address: dc:9f:db:6a:3e:9e > # ifconfig wlan0 down > # ifconfig wlan0 monitor > # ifconfig wlan0 channel 4 > # ifconfig wlan0 up > # > # ifconfig wlan0 > wlan0: flags=48843 metric > 0 mtu 1500 > ether dc:9f:db:6a:3e:9e > media: IEEE 802.11 Wireless Ethernet autoselect (autoselect) > status: no carrier > ssid "" channel 4 (2427 MHz 11g) > regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF > txpower 30 bmiss 7 scanvalid 60 protmode CTS wme burst bintval 0 > # > > And now I get things via: > # tcpdump -ni wlan0 -y IEEE802_11_RADIO > wlan0: promiscuous mode enabled > wlan0: promiscuous mode disabled > wlan0: promiscuous mode enabled > tcpdump: data link type IEEE802_11_RADIO > tcpdump: WARNING: wlan0: no IPv4 address assigned > tcpdump: verbose output suppressed, use -v or -vv for full protocol decode > listening on wlan0, link-type IEEE802_11_RADIO (802.11 plus radiotap > header), capture size 65535 bytes > 18:56:23.803065 9838362989us tsft 1.0 Mb/s 60dBm tx power antenna 0 2427 > MHz 11g Probe Request () [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] > 18:56:23.994159 9838553735us tsft 1.0 Mb/s -75dB signal -96dB noise > antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 > Mbit] > 18:56:23.995089 9838554678us tsft 1.0 Mb/s -75dB signal -96dB noise > antenna 1 2427 MHz 11g Probe Request (Y!Office) [1.0 2.0 5.5 11.0 6.0 9.0 > 12.0 18.0 Mbit] > 18:56:23.995979 9838555575us tsft 1.0 Mb/s -75dB signal -96dB noise > antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 > Mbit] > 18:56:24.002484 9838562077us tsft 1.0 Mb/s -76dB signal -96dB noise > antenna 1 2427 MHz 11g Probe Request () [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 > Mbit] > 18:56:24.016082 9838576006us tsft 1.0 Mb/s 60dBm tx power antenna 0 2427 > MHz 11g ht/40+ Probe Request () [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 > Mbit] > > But is this really a monitor mode? Not according to tcpdump. > > What we are seeing above are beacons sent out by APs? How do we get probe > requests sent to APs by devices? > > man tcpdump says: > > -I Put the interface in "monitor mode"; this is supported only on > IEEE 802.11 Wi-Fi interfaces, and supported only on some > operat- > ing systems. > > Note that in monitor mode the adapter might disassociate > from > the network with which it's associated, so that you will not > be > able to use any wireless networks with that adapter. This > could > prevent accessing files on a network server, or resolving > host > names or network addresses, if you are capturing in monitor > mode > and are not connected to another network with another > adapter. > > This flag will affect the output of the -L flag. If -I > isn't > specified, only those link-layer types available when > not in > monitor mode will be shown; if -I is specified, only those > link- > layer types available when in monitor mode will be shown. > > So I tried -I, > > # tcpdump -Ii wlan0 -y IEEE802_11_RADIO > tcpdump: wlan0 is not a monitor mode VAP > To create a new monitor mode VAP use: > ifconfig wlan1 create wlandev ath0 wlanmode monitor > and use wlan1 as the tcpdump interface > # > > Okay, lets create wlan1 as suggested: > > # ifconfig wlan1 create wlandev ath0 wlanmode monitor > wlan1: Ethernet address: dc:9f:db:6a:3e:9e > # ifconfig wlan1 > wlan1: flags=8802 metric 0 mtu 1500 > ether dc:9f:db:6a:3e:9e > media: IEEE 802.11 Wireless Ethernet autoselect > (autoselect ) > status: no carrier > ssid "" channel 4 (2427 MHz 11g) > regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF > txpower 30 scanvalid 60 protmode CTS wme burst bintval 0 > # > > See subtle difference between wlan0 and wlan1. > > Still no success (but new error): > > # tcpdump -Ii wlan1 -y IEEE802_11_RADIO > wlan1: promiscuous mode enabled > tcpdump: data link type IEEE802_11_RADIO > tcpdump: WARNING: wlan1: no IPv4 address assigned > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > tcpdump: verbose output suppressed, use -v or -vv for full protocol decode > listening on wlan1, link-type IEEE802_11_RADIO (802.11 plus radiotap > header), capture size 65535 bytes > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > ^C > 0 packets captured > 0 packets received by filter > 0 packets dropped by kernel > ar5416StopDmaReceive: dma failed to stop in 10ms > AR_CR=0x00000024 > AR_DIAG_SW=0x42000020 > wlan1: promiscuous mode disabled > # > > I also tried to do mixed version of both wlan0 and wlan1: > > # ifconfig wlan0 destroy > # ifconfig wlan0 create wlandev ath0 wlanmode monitor > wlan0: Ethernet address: dc:9f:db:6a:3e:9e > # ifconfig wlan0 monitor > # ifconfig wlan0 channel 4 > # ifconfig wlan0 up > ar5416PerCalibrationN: NF calibration didn't finish; delaying CCA > # > # ifconfig wlan0 > wlan0: flags=48843 metric > 0 mtu 1500 > ether dc:9f:db:6a:3e:9e > media: IEEE 802.11 Wireless Ethernet autoselect mode 11ng > status: running > ssid "" channel 4 (2427 MHz 11g ht/40+) bssid dc:9f:db:6a:3e:9e > regdomain FCC3 country US indoor ecm authmode OPEN privacy OFF > txpower 30 scanvalid 60 protmode CTS ampdulimit 8k ampdudensity 8 > shortgi wme burst > # > > But no success: > > # tcpdump -Ii wlan0 -y IEEE802_11_RADIO > wlan0: promiscuous mode enabled > tcpdump: data link type IEEE802_11_RADIO > tcpdump: WARNING: wlan0: no IPv4 address assigned > tcpdump: verbose output suppressed, use -v or -vv for full protocol decode > listening on wlan0, link-type IEEE802_11_RADIO (802.11 plus radiotap > header), capture size 65535 bytes > ^C > 0 packets capturwlan0: promiscuous mode disabled > ed > 0 packets received by filter > 0 packets dropped by kernel > # >