Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Sep 2013 01:29:23 +0800
From:      Chenchong Qin <qinchenchong@gmail.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   Re: Chenchong's work on net80211_ratectl
Message-ID:  <CAFnsE3e1r6Ah5SSrqnrxoqXMRm3yCaUxCjSD90epWQJEZU-pzw@mail.gmail.com>
In-Reply-To: <CAFnsE3fvpjCXEC1gN46VXfPdeXG5RSVzNiJkZJiQ6xSYQFb89g@mail.gmail.com>
References:  <CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw@mail.gmail.com> <CAJ-Vmom4sY7jcNwWmJkrDwfWjsok2fk8UEwTi5A=egj1JyerLw@mail.gmail.com> <CAFnsE3cyg=msBfQqqKUMmLABSL=j24VoMBwbBjxQ6b7Dyy7Mqg@mail.gmail.com> <CAJ-Vmo=k8NddAYyAJCkx4eOaA_8XsSxg6uKrdddx%2BgmeT%2BX9KA@mail.gmail.com> <CAFnsE3eaOyRcO3LXSi3L=jbzpyMv5Nt_jRGKt_mmA0WV-EV5vA@mail.gmail.com> <CAJ-VmokdxLhK5x6kO=jJzk-dv61EDK-ZgmndOimoyWWf76HiZA@mail.gmail.com> <CAJ-VmonMjR5iVTMVN9532d%2BPqOXWNUoZvxPtQir5h=yGxU-XdQ@mail.gmail.com> <CAFnsE3d9nG-X2b=z1srKfTtpxC3w5L%2B6Hg3TbOnAQrJN%2Bt19GA@mail.gmail.com> <CAJ-VmokF6hPtg9FoEdeJXLLaZRNhzd=nr_o6nHE%2BjYiQKTg3zQ@mail.gmail.com> <CAFnsE3eMwX-GiRzJt8jk4r9mxwSAQkcrDwk%2BnWVG7q6dabeA3A@mail.gmail.com> <CAJ-Vmo=mzvS0UBC7fGx2t501%2Bfioi4DJcw8qobOpbYOUiraqGg@mail.gmail.com> <CAFnsE3df=1WEuLZh5355v_K2eBgcuBbpoza74Y-5vvNupBz22A@mail.gmail.com> <CAJ-VmokyXwkKLdsJw74bux7G5EJSRvFhugTcLR9BgXfw4ysYRg@mail.gmail.com> <CAJ-VmokU=ZXysjZfAJ-REZL7kwg-_Z-LeAKca7AefONW_O1E5A@mail.gmail.com> <CAFnsE3cS_2Ad1geQQ0UB4doEgqVfhNBMi6j4fCRpFgQqcu2kJw@mail.gmail.com> <CAFnsE3eMrwpo=hcFb9XfpLL53Ppso%2B%2BXTBfpieP8FGejAKW1_w@mail.gmail.com> <CAJ-Vmo=s=0u7VO00vgzxmR7bE4aTtMrshZ3j5F312dya284V1g@mail.gmail.com> <CAFnsE3c%2BOg_2hVXO3zU7gmY4xFQjnxbv=ehJm=pbbpLJcgwJrQ@mail.gmail.com> <CAJ-Vmo=D3BNhhSn9D3x6hBry=fDecOd7BwttQ5Yw2iUKGDBN3w@mail.gmail.com> <CAFnsE3dw5bOyVRqMb9K3ME%2BHoDL61-e_XNJjjt_nRTaY=4dnhw@mail.gmail.com> <CAJ-Vmo=0tkTKQnOjrmYKqWqC%2B_nnFLqimdp06STETxLsFgxKxQ@mail.gmail.com> <CAFnsE3dm27483GVp4PRiwk=sxagT7NXQz4fmyOpth2zpCM2MwQ@mail.gmail.com> <CAFnsE3fvpjCXEC1gN46VXfPdeXG5RSVzNiJkZJiQ6xSYQFb89g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--20cf30780c5c5f629404e61ef669
Content-Type: text/plain; charset=ISO-8859-1

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<https://svnweb.freebsd.org/socsvn/soc2013/ccqin/head/>;
> .
>
> 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
>>>
>>>
>>
>

--20cf30780c5c5f629404e61ef669
Content-Type: application/octet-stream; 
	name="20130911-net80211-ratectl-ath.diff"
Content-Disposition: attachment; 
	filename="20130911-net80211-ratectl-ath.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hlgtn9ja2

SW5kZXg6IGlmX2F0aF90eF9odC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmX2F0aF90eF9odC5jCShyZXZp
c2lvbiAyNTQ4MjYpCisrKyBpZl9hdGhfdHhfaHQuYwkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUg
PG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKworI2luY2x1ZGUgPG5ldDgwMjExL2ll
ZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCiAjaW5j
bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgogI2VuZGlmCkBAIC0yMjEsMTMgKzIy
Myw0NyBAQAogdm9pZAogYXRoX3R4X3JhdGVfZmlsbF9yY2ZsYWdzKHN0cnVjdCBhdGhfc29mdGMg
KnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9
IGJmLT5iZl9ub2RlOwotCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCS8v
IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9kZTsKKwkvLyBzdHJ1Y3QgaWVl
ZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKIAljb25zdCBIQUxfUkFURV9UQUJMRSAqcnQgPSBz
Yy0+c2NfY3VycmF0ZXM7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnJjID0gYmYtPmJmX3N0YXRl
LmJmc19yYzsKKwlzdHJ1Y3QgYXRoX3JjX3NlcmllcyAqYXRoX3JjID0gYmYtPmJmX3N0YXRlLmJm
c19yYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVj
dCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3RydWN0IG1fdGFnICptdGFnOwog
CXVpbnQ4X3QgcmF0ZTsKIAlpbnQgaTsKIAorCW10YWcgPSBtX3RhZ19sb2NhdGUoYmYtPmJmX20s
IE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKwlp
ZiAoTlVMTCA9PSBtdGFnKQorCQlyZXR1cm47CisKKwlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAy
MTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwlyYyA9IHJjX2luZm8tPmlyaV9yYzsKKworCWZvciAo
aSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQlpZiAocmNbaV0udHJp
ZXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJhdGUgPSBydC0+aW5mb1tyY1tpXS5yaXhdLnJh
dGVDb2RlOworCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFHX1NQKQor
CQkJcmF0ZSB8PSBydC0+aW5mb1tyY1tpXS5yaXhdLnNob3J0UHJlYW1ibGU7CisKKwkJcmNbaV0u
cmF0ZWNvZGUgPSByYXRlOworCisJCWF0aF9yY1tpXS5yaXggPSByY1tpXS5yaXg7CisJCWF0aF9y
Y1tpXS50cmllcyA9IHJjW2ldLnRyaWVzOworCQlhdGhfcmNbaV0uZmxhZ3MgPSByY1tpXS5mbGFn
czsKKwkJYXRoX3JjW2ldLnJhdGVjb2RlID0gcmNbaV0ucmF0ZWNvZGU7CisJCWF0aF9yY1tpXS50
eF9wb3dlcl9jYXAgPSByY1tpXS50eF9wb3dlcl9jYXA7CisJCWF0aF9yY1tpXS5tYXg0bXNmcmFt
ZWxlbiA9IHJjW2ldLm1heDRtc2ZyYW1lbGVuOworCQkKKwkJRFBSSU5URihzYywgQVRIX0RFQlVH
X1NXX1RYX0FHR1IsCisJCSAgICAiJXM6IGk9JWQsIHJhdGU9MHgleCwgZmxhZ3M9MHgleCwgbWF4
NG1zPSVkXG4iLAorCQkgICAgX19mdW5jX18sIGksIHJhdGUsIHJjW2ldLmZsYWdzLCByY1tpXS5t
YXg0bXNmcmFtZWxlbik7CisJfQorCisjaWYgMAogCWZvciAoaSA9IDA7IGkgPCBBVEhfUkNfTlVN
OyBpKyspIHsKIAkJcmNbaV0uZmxhZ3MgPSAwOwogCQlpZiAocmNbaV0udHJpZXMgPT0gMCkKQEAg
LTMyNSw2ICszNjEsNyBAQAogCQkgICAgIiVzOiBpPSVkLCByYXRlPTB4JXgsIGZsYWdzPTB4JXgs
IG1heDRtcz0lZFxuIiwKIAkJICAgIF9fZnVuY19fLCBpLCByYXRlLCByY1tpXS5mbGFncywgcmNb
aV0ubWF4NG1zZnJhbWVsZW4pOwogCX0KKyNlbmRpZgogfQogCiAvKgpJbmRleDogaWZfYXRoX3R4
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaWZfYXRoX3R4LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGlmX2F0
aF90eC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2Rv
bWFpbi5oPgorCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRl
ZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFf
c3VwZXJnLmg+CiAjZW5kaWYKQEAgLTEzODcsNiArMTM4OSwxMCBAQAogc3RhdGljIHZvaWQKIGF0
aF90eF9kb19yYXRlbG9va3VwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAq
YmYpCiB7CisJc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9ub2RlOworCXN0cnVj
dCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9y
Y19zZXJpZXMgKnJjID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAJdWludDhfdCByYXRl
LCByaXg7CiAJaW50IHRyeTA7CiAKQEAgLTEzOTUsNyArMTQwMSw3IEBACiAKIAkvKiBHZXQgcmlk
IG9mIGFueSBwcmV2aW91cyBzdGF0ZSAqLwogCWJ6ZXJvKGJmLT5iZl9zdGF0ZS5iZnNfcmMsIHNp
emVvZihiZi0+YmZfc3RhdGUuYmZzX3JjKSk7Ci0KKyNpZiAwCiAJQVRIX05PREVfTE9DSyhBVEhf
Tk9ERShiZi0+YmZfbm9kZSkpOwogCWF0aF9yYXRlX2ZpbmRyYXRlKHNjLCBBVEhfTk9ERShiZi0+
YmZfbm9kZSksIGJmLT5iZl9zdGF0ZS5iZnNfc2hwcmVhbSwKIAkgICAgYmYtPmJmX3N0YXRlLmJm
c19wa3RsZW4sICZyaXgsICZ0cnkwLCAmcmF0ZSk7CkBAIC0xNDA5LDcgKzE0MTUsNDQgQEAKIAkJ
YXRoX3JhdGVfZ2V0eHR4cmF0ZXMoc2MsIEFUSF9OT0RFKGJmLT5iZl9ub2RlKSwgcml4LAogCQkg
ICAgYmYtPmJmX3N0YXRlLmJmc19yYyk7CiAJQVRIX05PREVfVU5MT0NLKEFUSF9OT0RFKGJmLT5i
Zl9ub2RlKSk7CisjZW5kaWYKIAorCS8qIG5ldDgwMjExIHJhdGVjdGwgKi8KKwltdGFnID0gbV90
YWdfbG9jYXRlKGJmLT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIxMSwgCisJCQlORVQ4MDIxMV9UQUdf
UkFURUNUTCwgTlVMTCk7CithZ2FpbjoJCisJaWYgKE5VTEwgPT0gbXRhZykgeworCQltdGFnID0g
bV90YWdfYWxsb2MoTVRBR19BQklfTkVUODAyMTEsIE5FVDgwMjExX1RBR19SQVRFQ1RMLAorCQkJ
CXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8pLCBNX05PV0FJVCk7CisJCWlmIChOVUxM
ID09IG10YWcpIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0df
UkFURUNUTCwgbmksCisJCQkJCSIlczogY2FuJ3QgYWxsb2MgbWJ1ZiB0YWcgZm9yIHJhdGVjdGwu
XG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGFnYWluOworCQl9CisJfSBlbHNlCisJCUlFRUU4MDIx
MV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJIiVzOiBu
YW5pPyBmaW5kIG1idWYgdGFnIGZvciByYXRlY3RsIGRpcmVjdGx5LlxuIiwgX19mdW5jX18pOwor
CQorCXJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOworCXJj
ID0gcmNfaW5mby0+aXJpX3JjOworCQorCWJ6ZXJvKHJjX2luZm8sIHNpemVvZihyY19pbmZvKSk7
CisKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19zaHByZWFtKQorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg
fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19TUDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19hZ2dy
KQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwor
CisJcmNfaW5mby0+aXJpX2ZyYW1lbGVuID0gYmYtPmJmX3N0YXRlLmJmc19wa3RsZW47CisKKwlp
ZWVlODAyMTFfcmF0ZWN0bF9yYXRlcyhuaSwgcmNfaW5mbyk7CisKKwltX3RhZ19wcmVwZW5kKGJm
LT5iZl9tLCBtdGFnKTsKKworCXJpeCA9IHJjWzBdLnJpeDsKKwl0cnkwID0gcmNbMF0udHJpZXM7
CisJcmF0ZSA9IG5pLT5uaV90eHJhdGU7CisKIAlzYy0+c2NfdHhyaXggPSByaXg7CS8qIGZvciBM
RUQgYmxpbmtpbmcgKi8KIAlzYy0+c2NfbGFzdGRhdGFyaXggPSByaXg7CS8qIGZvciBmYXN0IGZy
YW1lcyAqLwogCWJmLT5iZl9zdGF0ZS5iZnNfdHJ5MCA9IHRyeTA7CkBAIC0xNTMwLDcgKzE1NzMs
OCBAQAogCSAqIGZyYW1lcyB0aGF0IG11c3QgZ28gb3V0IC0gZWcgbWFuYWdlbWVudC9yYXcgZnJh
bWVzLgogCSAqLwogCWJmLT5iZl9zdGF0ZS5iZnNfdHhmbGFncyB8PSBIQUxfVFhERVNDX0NMUkRN
QVNLOwotCisJCisJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0gMDsKIAkvKiBTZXR1cCB0aGUgZGVz
Y3JpcHRvciBiZWZvcmUgaGFuZG9mZiAqLwogCWF0aF90eF9kb19yYXRlbG9va3VwKHNjLCBiZik7
CiAJYXRoX3R4X2NhbGNfZHVyYXRpb24oc2MsIGJmKTsKQEAgLTQwNTgsNiArNDEwMiw4IEBACiAJ
aW50IHRpZCA9IGJmLT5iZl9zdGF0ZS5iZnNfdGlkOwogCXN0cnVjdCBhdGhfdGlkICphdGlkID0g
JmFuLT5hbl90aWRbdGlkXTsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMgPSAmYmYtPmJmX3N0
YXR1cy5kc190eHN0YXQ7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVM
TDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAKIAkvKiBUaGUgVElEIHN0YXRlIGlzIHByb3RlY3Rl
ZCBiZWhpbmQgdGhlIFRYUSBsb2NrICovCiAJQVRIX1RYX0xPQ0soc2MpOwpAQCAtNDEwOCw5ICs0
MTU0LDM1IEBACiAJICogZHVyaW5nIGEgaHcgcXVldWUgZHJhaW4gYW5kIHRoZSBmcmFtZSB3YW50
ZWQgYW4gQUNLLgogCSAqLwogCWlmIChmYWlsID09IDAgJiYgKChiZi0+YmZfc3RhdGUuYmZzX3R4
ZmxhZ3MgJiBIQUxfVFhERVNDX05PQUNLKSA9PSAwKSkKKwl7CisjaWYgMAogCQlhdGhfdHhfdXBk
YXRlX3JhdGVjdHJsKHNjLCBuaSwgYmYtPmJmX3N0YXRlLmJmc19yYywKIAkJICAgIHRzLCBiZi0+
YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkJICAgIDEsICh0cy0+dHNfc3RhdHVzID09IDApID8gMCA6
IDEpOworI2VuZGlmCisJCisJCS8qIG5ldDgwMjExIHJhdGVjdGwgKi8KKwkgICAgbXRhZyA9IG1f
dGFnX2xvY2F0ZShiZi0+YmZfbSwgTVRBR19BQklfTkVUODAyMTEsIAorCQkJICAgICAgICAgICAg
TkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCQlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCQlJ
RUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJ
CQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4iLCBfX2Z1bmNfXyk7CisJCQlzdHJ1
Y3QgaWVlZTgwMjExX3JjX2luZm8gdG1wX3JjX2luZm87CisJCQlyY19pbmZvID0gJnRtcF9yY19p
bmZvOworCQkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8pKTsKKwkJfSBlbHNlIHsKKwkJ
CUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJ
CQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVuY19fKTsKKwkJCXJjX2lu
Zm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOworCQl9CisJCXJjX2lu
Zm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwkKKwkJaWVlZTgw
MjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMtPnRzX3N0YXR1cyA9
PSAwID8gMCA6IDEpLCAKKwkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCQl0cy0+dHNf
c2hvcnRyZXRyeSwgdHMtPnRzX2xvbmdyZXRyeSwKKwkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50
c19yYXRlKTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmks
IHJjX2luZm8pOworCX0KIAogCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJmLCBmYWlsKTsKIH0K
QEAgLTQ0NzUsNiArNDU0Nyw5IEBACiAJaW50IGRyb3BzID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjEx
X3R4X2FtcGR1ICp0YXA7CiAJYXRoX2J1ZmhlYWQgYmZfY3E7CisJc3RydWN0IGF0aF90eF9zdGF0
dXMgdHMgPSBiZl9maXJzdC0+YmZfc3RhdHVzLmRzX3R4c3RhdDsKKwlzdHJ1Y3QgaWVlZTgwMjEx
X3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVjdCBtX3RhZyAqbXRhZzsKIAogCVRBSUxR
X0lOSVQoJmJmX3EpOwogCVRBSUxRX0lOSVQoJmJmX2NxKTsKQEAgLTQ0ODUsMTEgKzQ1NjAsMzYg
QEAKIAkgKiBYWFggdXNlIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGZyYW1lIGluIHRoZSBzZXJp
ZXM7CiAJICogWFhYIGp1c3Qgc28gdGhpbmdzIGFyZSBjb25zaXN0ZW50IGZvciBub3cuCiAJICov
CisjaWYgMAogCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCBiZl9maXJzdC0+YmZfc3Rh
dGUuYmZzX3JjLAogCSAgICAmYmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQsCiAJICAgIGJm
X2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAogCSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZz
X25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcyk7CisjZW5kaWYKKwkvKiBu
ZXQ4MDIxMSByYXRlY3RsICovCisJbXRhZyA9IG1fdGFnX2xvY2F0ZShiZl9maXJzdC0+YmZfbSwg
TVRBR19BQklfTkVUODAyMTEsIAorCQkJTkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCWlm
IChOVUxMID09IG10YWcpIHsKKwkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjEx
X01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4i
LCBfX2Z1bmNfXyk7CisJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB0bXBfcmNfaW5mbzsKKwkJ
cmNfaW5mbyA9ICZ0bXBfcmNfaW5mbzsKKwkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8p
KTsKKwl9IGVsc2UgeworCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNH
X1JBVEVDVEwsIG5pLAorCQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVu
Y19fKTsKKwkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7
CisJfQogCisJaWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCWJmX2Zp
cnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcywgCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25m
cmFtZXMsCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCXRzLnRzX3Nob3J0
cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCXRzLnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsK
KwlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCWll
ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKKwog
CUFUSF9UWF9MT0NLKHNjKTsKIAl0YXAgPSBhdGhfdHhfZ2V0X3R4X3RpZChhbiwgdGlkLT50aWQp
OwogCXNjLT5zY19zdGF0cy5hc3RfdHhfYWdncl9mYWlsYWxsKys7CkBAIC00NjI2LDggKzQ3MjYs
MTIgQEAKIAlpbnQgbmZyYW1lcyA9IDAsIG5iYWQgPSAwLCBuZjsKIAlpbnQgcGt0bGVuOwogCS8q
IFhYWCB0aGVyZSdzIHRvbyBtdWNoIG9uIHRoZSBzdGFjaz8gKi8KKyNpZiAwCiAJc3RydWN0IGF0
aF9yY19zZXJpZXMgcmNbQVRIX1JDX05VTV07CisjZW5kaWYKIAlpbnQgdHhzZXE7CisJc3RydWN0
IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7
CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwgIiVzOiBjYWxsZWQ7IGh3cV9k
ZXB0aD0lZFxuIiwKIAkgICAgX19mdW5jX18sIGF0aWQtPmh3cV9kZXB0aCk7CkBAIC00NzQ4LDcg
KzQ4NTIsNyBAQAogCWlzYWdnciA9IGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfYWdncjsKIAliYVsw
XSA9IHRzLnRzX2JhX2xvdzsKIAliYVsxXSA9IHRzLnRzX2JhX2hpZ2g7Ci0KKyNpZiAwCiAJLyoK
IAkgKiBDb3B5IHRoZSBUWCBjb21wbGV0aW9uIHN0YXR1cyBhbmQgdGhlIHJhdGUgY29udHJvbAog
CSAqIHNlcmllcyBmcm9tIHRoZSBmaXJzdCBkZXNjcmlwdG9yLCBhcyBpdCBtYXkgYmUgZnJlZWQK
QEAgLTQ3NTYsNiArNDg2MCwxMyBAQAogCSAqIGludG8gdGhpbmdzLgogCSAqLwogCW1lbWNweShy
YywgYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19yYywgc2l6ZW9mKHJjKSk7CisjZW5kaWYKKwkvKiAK
KwkgKiBHZXQgdGhlIG5ldDgwMjExIHJhdGVjdGwgbXRhZyBoZXJlLCBhcyBiZl9maXJzdCB3aWxs
IAorCSAqIGJlIHNldCB0byBOVUxMIGxhdGVyLiAKKwkgKi8KKwltdGFnID0gbV90YWdfbG9jYXRl
KGJmX2ZpcnN0LT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIxMSwgCisJCQlORVQ4MDIxMV9UQUdfUkFU
RUNUTCwgTlVMTCk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwKIAkgICAg
IiVzOiB0eGFfc3RhcnQ9JWQsIHR4X29rPSVkLCBzdGF0dXM9JS44eCwgZmxhZ3M9JS44eCwgIgpA
QCAtNDg3Myw5ICs0OTg0LDMyIEBACiAJICogY29udHJvbCBjb2RlLgogCSAqLwogCWlmIChmYWls
ID09IDApCisJeworI2lmIDAJCiAJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCByYywg
JnRzLCBwa3RsZW4sIG5mcmFtZXMsCiAJCSAgICBuYmFkKTsKKyNlbmRpZgorCQkvKiBuZXQ4MDIx
MSByYXRlY3RsICovCisJCWlmIChOVUxMID09IG10YWcpIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5p
LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJCSIlczogbm8gcmF0ZWN0
bCBtYnVmIHRhZyBmb3VuZC5cbiIsIF9fZnVuY19fKTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfcmNf
aW5mbyB0bXBfcmNfaW5mbzsKKwkJCXJjX2luZm8gPSAmdG1wX3JjX2luZm87CisJCQliemVybyhy
Y19pbmZvLCBzaXplb2YocmNfaW5mbykpOworCQl9IGVsc2UgeworCQkJSUVFRTgwMjExX05PVEUo
bmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVzOiBmb3VuZCBy
YXRlY3RsIG1idWYgdGFnLlxuIiwgX19mdW5jX18pOworCQkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVl
ZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7CisJCX0KIAorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg
fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF9yY19p
bmZvX3NldChyY19pbmZvLAorCQkJCQluZnJhbWVzLCBuYmFkLCBwa3RsZW4sCisJCQkJCXRzLnRz
X3Nob3J0cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQkJdHMudHNfZmluYWx0c2ksIHRzLnRz
X3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwg
cmNfaW5mbyk7CisJfQorCiAJLyoKIAkgKiBzZW5kIGJhciBpZiB3ZSBkcm9wcGVkIGFueSBmcmFt
ZXMKIAkgKi8KQEAgLTQ5NDgsNiArNTA4Miw4IEBACiAJc3RydWN0IGF0aF90aWQgKmF0aWQgPSAm
YW4tPmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOwogCWludCBkcm9wcyA9
IDA7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qg
bV90YWcgKm10YWc7CiAKIAkvKgogCSAqIFRha2UgYSBjb3B5IG9mIHRoaXM7IGZpbHRlcmluZy9j
bG9uaW5nIHRoZSBmcmFtZSBtYXkgZnJlZSB0aGUKQEAgLTQ5NjIsMTEgKzUwOTgsMzYgQEAKIAkg
KiBEbyBpdCBvdXRzaWRlIG9mIHRoZSBUWFEgbG9jay4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYm
ICgoYmYtPmJmX3N0YXRlLmJmc190eGZsYWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJ
eworI2lmIDAJCiAJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCBiZi0+YmZfc3RhdGUu
YmZzX3JjLAogCQkgICAgJmJmLT5iZl9zdGF0dXMuZHNfdHhzdGF0LAogCQkgICAgYmYtPmJmX3N0
YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMudHNfc3RhdHVzID09IDApID8gMCA6IDEpOwor
I2VuZGlmCisJCW10YWcgPSBtX3RhZ19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjEx
LCAKKwkJCQlORVQ4MDIxMV9UQUdfUkFURUNUTCwgTlVMTCk7CisJCQorCQlpZiAoTlVMTCA9PSBt
dGFnKSB7CisJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD
VEwsIG5pLAorCQkJCQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4iLCBfX2Z1bmNf
Xyk7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gdG1wX3JjX2luZm87CisJCQlyY19pbmZv
ID0gJnRtcF9yY19pbmZvOworCQkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8pKTsKKwkJ
fSBlbHNlIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFU
RUNUTCwgbmksCisJCQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVuY19f
KTsKKwkJCXJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOwor
CQl9CiAKKwkJcmNfaW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFfUkFURUNUTF9JTkZPX0FH
R1I7CisJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJMSwgKHRz
LnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpLCAKKwkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwK
KwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQkJdHMudHNfZmluYWx0
c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlf
dmFwLCBuaSwgcmNfaW5mbyk7CisJfQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkgc28g
YXRpZC0+aHdxX2RlcHRoIGNhbiBiZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVseSBt
ZWFucyB0aGF0IGl0J3MgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZApAQCAtNTE4Myw2ICs1MzQ0LDE1
IEBACiAJCX0KIAogCQkvKgorCQkgKiBJZiBub24tYWdncmVnYXRlIHNjZW5hcmlvIGFwcGVhcnMs
IHRoaXMgd2lsbCBiZSAKKwkJICogdHVybmVkIG9mZi4KKwkJICoKKwkJICogVGhpcyBmbGFnIGlz
IHVzZWQgYnkgYXRoX3R4X2RvX3JhdGVsb29rdXAoKSB0byAKKwkJICogZGlzdGluZ3Vpc2ggYWdn
ci9ub24tYWdnciBzY2VuYXJpby4gIAorCQkgKi8KKwkJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0g
MTsKKworCQkvKgogCQkgKiBJZiB0aGUgcGFja2V0IGRvZXNuJ3QgZmFsbCB3aXRoaW4gdGhlIEJB
VyAoZWcgYSBOVUxMCiAJCSAqIGRhdGEgZnJhbWUpLCBzY2hlZHVsZSBpdCBkaXJlY3RseTsgY29u
dGludWUuCiAJCSAqLwpAQCAtNTQyNSw2ICs1NTk1LDcgQEAKIAkJLyogVXBkYXRlIENMUkRNQVNL
IGp1c3QgYmVmb3JlIHRoaXMgZnJhbWUgaXMgcXVldWVkICovCiAJCWF0aF90eF91cGRhdGVfY2xy
ZG1hc2soc2MsIHRpZCwgYmYpOwogCisJCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7IAogCQkv
KiBQcm9ncmFtIGRlc2NyaXB0b3JzICsgcmF0ZSBjb250cm9sICovCiAJCWF0aF90eF9kb19yYXRl
bG9va3VwKHNjLCBiZik7CiAJCWF0aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkluZGV4OiBp
Zl9hdGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBpZl9hdGguYwkocmV2aXNpb24gMjU0ODI2KQorKysgaWZf
YXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5ldDgw
MjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9t
YWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lmZGVm
IElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9z
dXBlcmcuaD4KICNlbmRpZgpAQCAtMzIyLDYgKzMyNCw3IEBACiAJc2MtPnNjX2FoID0gYWg7CiAJ
c2MtPnNjX2ludmFsaWQgPSAwOwkvKiByZWFkeSB0byBnbywgZW5hYmxlIGludGVycnVwdCBoYW5k
bGluZyAqLwogI2lmZGVmCUFUSF9ERUJVRworCWF0aF9kZWJ1ZyB8PSBBVEhfREVCVUdfTk9ERTsg
CiAJc2MtPnNjX2RlYnVnID0gYXRoX2RlYnVnOwogI2VuZGlmCiAKQEAgLTEzODAsNiArMTM4Mywx
NiBAQAogCX0KIAlBVEhfVU5MT0NLKHNjKTsKIAorCXVpbnQzMl90IGNhcHMgPSAwOworCWlmIChz
Yy0+c2NfbXJyZXRyeSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSOworCWlm
IChzYy0+c2NfbXJycHJvdCkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSUFJP
VDsKKwlpZiAoc2MtPnNjX3R4Y2hhaW5tYXNrID4gMSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFU
RUNUTF9DQVBfTVVMVFhDSEFJTjsKKworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCBjYXBz
KTsKKwkKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwg
YXRoX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJcmV0dXJuIHZhcDsK
QEAgLTE0MTQsNiArMTQyNyw3IEBACiAJCWF0aF9zdG9wcmVjdihzYywgMSk7CQkvKiBzdG9wIHJl
Y3Ygc2lkZSAqLwogCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX2RlaW5pdCh2YXApOwogCWllZWU4
MDIxMV92YXBfZGV0YWNoKHZhcCk7CiAKIAkvKgpAQCAtNDA0Miw2ICs0MDU2LDggQEAKIHsKIAlz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CiAJc3RydWN0IGF0aF9ub2Rl
ICphbiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsK
KwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAKIAlBVEhfVFhfVU5MT0NLX0FTU0VSVChzYyk7CiAJQVRI
X1RYUV9VTkxPQ0tfQVNTRVJUKHR4cSk7CkBAIC00MDY4LDEwICs0MDg0LDM0IEBACiAJCQkgKiBY
WFggYXNzdW1lIHRoaXMgaXNuJ3QgYW4gYWdncmVnYXRlCiAJCQkgKiBmcmFtZS4KIAkJCSAqLwor
I2lmIDAKIAkJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLAogCQkJICAgICBiZi0+YmZf
c3RhdGUuYmZzX3JjLCB0cywKIAkJCSAgICBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwgMSwKIAkJ
CSAgICAodHMtPnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpKTsKKyNlbmRpZgorCQkJLyogbmV0ODAy
MTEgcmF0ZWN0bCAqLworCQkgICAgbXRhZyA9IG1fdGFnX2xvY2F0ZShiZi0+YmZfbSwgTVRBR19B
QklfTkVUODAyMTEsIAorCQkJCSAgICAgICAgICAgIE5FVDgwMjExX1RBR19SQVRFQ1RMLCBOVUxM
KTsKKwkJCWlmIChOVUxMID09IG10YWcpIHsKKwkJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFw
LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJCQkJIiVzOiBubyByYXRlY3RsIG1idWYg
dGFnIGZvdW5kLlxuIiwgX19mdW5jX18pOworCQkJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB0
bXBfcmNfaW5mbzsKKwkJCQlyY19pbmZvID0gJnRtcF9yY19pbmZvOworCQkJCWJ6ZXJvKHJjX2lu
Zm8sIHNpemVvZihyY19pbmZvKSk7CisJCQl9IGVsc2UgeworCQkJCUlFRUU4MDIxMV9OT1RFKG5p
LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJCQkiJXM6IGZvdW5kIHJh
dGVjdGwgbWJ1ZiB0YWcuXG4iLCBfX2Z1bmNfXyk7CisJCQkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVl
ZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7CisJCQl9CisJCisJCQlpZWVlODAyMTFfcmF0ZWN0
bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCQkxLCAodHMtPnRzX3N0YXR1cyA9PSAwID8gMCA6
IDEpLCAKKwkJCQkJYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJCQkJCXRzLT50c19zaG9ydHJl
dHJ5LCB0cy0+dHNfbG9uZ3JldHJ5LAorCQkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRl
KTsKKwkJCXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dS
OwkKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19p
bmZvKTsKIAkJfQogCQlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgMCk7CiAJfSBlbHNlCkBA
IC01NTc0LDkgKzU2MTQsMTUgQEAKIAogCWFuLT5hbl9tY2FzdHJpeCA9IGF0aF90eF9maW5kcml4
KHNjLCB0cC0+bWNhc3RyYXRlKTsKIAlhbi0+YW5fbWdtdHJpeCA9IGF0aF90eF9maW5kcml4KHNj
LCB0cC0+bWdtdHJhdGUpOwotCisjaWYgMAogCWF0aF9yYXRlX25ld2Fzc29jKHNjLCBhbiwgaXNu
ZXcpOworI2VuZGlmCiAKKwlEUFJJTlRGKHNjLCBBVEhfREVCVUdfTk9ERSwgIiVzOiBuZXdhc3Nv
YyBpcyBuZXc6ICVkXG4iLAorCQkJX19mdW5jX18sIGlzbmV3KTsKKwlpZiAoaXNuZXcpCisJCWll
ZWU4MDIxMV9yYXRlY3RsX25vZGVfaW5pdChuaSk7CisKIAlpZiAoaXNuZXcgJiYKIAkgICAgKHZh
cC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9QUklWQUNZKSA9PSAwICYmIHNjLT5zY19oYXNjbHJr
ZXkgJiYKIAkgICAgbmktPm5pX3VjYXN0a2V5LndrX2tleWl4ID09IElFRUU4MDIxMV9LRVlJWF9O
T05FKQo=
--20cf30780c5c5f629404e61ef669--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFnsE3e1r6Ah5SSrqnrxoqXMRm3yCaUxCjSD90epWQJEZU-pzw>