Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Apr 2009 09:59:49 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        Iain Hibbert <plunky@rya-online.net>
Cc:        freebsd-bluetooth@freebsd.org
Subject:   Re: libhci update
Message-ID:  <bb4a86c70904210959w6de5e808h9f85ee2bb1995dbf@mail.gmail.com>
In-Reply-To: <1240311202.361300.1366.nullmailer@galant.ukfsn.org>
References:  <E1Lv5La-00058x-HH@smtpbarns01> <bb4a86c70904201053y1a04d76el336432d3e1a23576@mail.gmail.com> <1240311202.361300.1366.nullmailer@galant.ukfsn.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0016364ed650356495046813930a
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

On Tue, Apr 21, 2009 at 3:53 AM, Iain Hibbert <plunky@rya-online.net> wrote:
> On Mon, 20 Apr 2009, Maksim Yevmenkin wrote:
>
>> >> thanks for the feedback. i'm attaching revisited patch. please take a
>> >> look and let me know if this is something you happy with.
>> >
>> > (pls ignore typos & bad formatting, am on mobile device :)
>> >
>> > Bt_devrecv() should probably take void * for buffer?  Also manpage suggests it
>> > will only receive hci events. Do you think its worth doing some validation of received
>> > data? (eg return EIO for truncated reads?)
>>
>> i will change uint8_t * to void *, no problem. i also updated man page
>> and removed 'event' word :)
>
> Ok also in bt_devrecv()
>        - return type should be ssize_t
>        - size cannot be < 0 (use "size == 0")?

sure. i changed it.

> and what of validation of received data here?  It could be worth checking
> that the buffer is not truncated so that the caller does not have to worry
> about it, but that does require checking the packet type..

why not? :) i added it as well.

>> > Bt_devreq() needs to set/restore a filter too
>>
>> well, maybe. bt_devreq() operates on already opened socket. the
>> assumption i'm making here is that application will set appropriate
>> filter before calling bt_devreq(). otherwise, application would have
>> to always set 'event' field to acceptable value (or zero). i could go
>> either way here. just need to document implemented behavior better.
>
> Mm, its a good point - there are arguments either way (bloat vs guaranteed
> success) but I think since the difference between devreq() and devrecv()
> is that devreq() handles all the fiddly details for you, I think its worth
> doing that aswell..

fine. it now sets and restores filter :)

>> > Do you think its worth to cook dev_class into a normalised host
>> > numeric value rather than 3 bytes ?
>>
>> right, hmm, i guess we could turn dev_class into uint32_t in le16 byte
>> order (since everything else in bluetooth hci is in le16 order), but
>> maybe its too much? spec breaks out dev_class as 3 bytes array and talks
>> about bytes and bits within each byte. i'm kinda leaning towards leaving
>> it as is, because otherwise application would have to translate byte/bit
>> into uint32_t mask. it could be somewhat convenient, i guess. again, no
>> strong feeling about it. could go either way.
>
> My thought was that some of the 'fields' do seem to cross over into
> multiple bytes (eg the service class flags in the default format type) and
> perhaps its easier to interpret as a single value where bits can be tested
> in host order by such as (class & (1 << N))? I don't know how much that
> helps but the assigned numbers document does seem to show it as a bit
> array. (I'm not having a strong opinion either :)

left it as 3 bytes array for now.

>> > Probably need to specifically mention that the inquiry response to be
>> > released using free() in manpage?
>>
>> it says so, i.e.
>>
>> The
>> .Fa ii
>> parameter specifies where to place inquiry results.
>> On success, the function will return total number of inquiry results,
>> will allocate buffer to store all the inquiry results and
>> will return pointer to the allocated buffer in the
>> .Fa ii
>> parameter.
>> It is up to the caller of the function to dispose of the buffer.
>
> No, I mean to specifically mention ".Xr free 3" as the method used to
> dispose of the buffer.

ah, i see. man page was updated.

the revised diff is attached. please review.

thanks,
max

--0016364ed650356495046813930a
Content-Type: text/plain; charset=US-ASCII; name="bluetooth.hci.diff.txt"
Content-Disposition: attachment; filename="bluetooth.hci.diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ftsuch0v0

SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTEzMjkpCisrKyBo
Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDQ5NyBAQAogICogJEZyZWVCU0QkCiAg
Ki8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSA8dW5pc3RkLmg+CiAKK3N0YXRpYyBpbnQgICAgYnRfZGV2YW55X2NiKGludCBzLCBz
dHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQgKnhkZXZuYW1lKTsKIHN0YXRpYyBjaGFy
ICogYnRfZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQg
bm5sZW4pOwogCiBpbnQKK2J0X2Rldm9wZW4oY2hhciBjb25zdCAqZGV2bmFtZSkKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHJfaGNpCWhhOworCWJkYWRkcl90CQliYTsKKwlpbnQJCQlzOworCisJaWYgKGRl
dm5hbWUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQor
CisJbWVtc2V0KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7
CisJaGEuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRldm5hbWUs
ICZiYSkpIHsKKwkJaWYgKCFidF9kZXZuYW1lKGhhLmhjaV9ub2RlLCAmYmEpKQorCQkJcmV0dXJu
ICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkZXZuYW1lLCBoYS5oY2lfbm9kZSwKKwkJ
CQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgeworCQllcnJubyA9IEVOWElPOworCQly
ZXR1cm4gKC0xKTsKKwl9CisKKwlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJM
VUVUT09USF9QUk9UT19IQ0kpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAo
YmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgc2l6ZW9mKGhhKSkgPCAwIHx8CisJICAg
IGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCkgewor
CQljbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChzKTsKK30KKworaW50
CitidF9kZXZjbG9zZShpbnQgcykKK3sKKwlyZXR1cm4gKGNsb3NlKHMpKTsKK30KKworaW50Citi
dF9kZXZzZW5kKGludCBzLCB1aW50MTZfdCBvcGNvZGUsIHZvaWQgKnBhcmFtLCBzaXplX3QgcGxl
bikKK3sKKwluZ19oY2lfY21kX3BrdF90CWg7CisJc3RydWN0IGlvdmVjCQlpdlsyXTsKKwlpbnQJ
CQlpdm47CisKKwlpZiAoKHBsZW4gPT0gMCAmJiBwYXJhbSAhPSBOVUxMKSB8fCAocGxlbiA+IDAg
JiYgcGFyYW0gPT0gTlVMTCkpIHsgCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsK
Kwl9CisKKwlpdlswXS5pb3ZfYmFzZSA9ICZoOworCWl2WzBdLmlvdl9sZW4gPSBzaXplb2YoaCk7
CisJaXZuID0gMTsKKworCWgudHlwZSA9IE5HX0hDSV9DTURfUEtUOworCWgub3Bjb2RlID0gaHRv
bGUxNihvcGNvZGUpOworCWlmIChwbGVuID4gMCkgeworCQloLmxlbmd0aCA9IHBsZW47CisKKwkJ
aXZbMV0uaW92X2Jhc2UgPSBwYXJhbTsKKwkJaXZbMV0uaW92X2xlbiA9IHBsZW47CisJCWl2biA9
IDI7CisJfSBlbHNlCisJCWgubGVuZ3RoID0gMDsKKworCXdoaWxlICh3cml0ZXYocywgaXYsIGl2
bikgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJCQlj
b250aW51ZTsKKworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzc2l6
ZV90CitidF9kZXZyZWN2KGludCBzLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB0aW1lX3QgdG8p
Cit7CisJZmRfc2V0CQlyZmQ7CisJc3RydWN0IHRpbWV2YWwJdHY7CisJc3NpemVfdAkJbjsKKwor
CWlmIChidWYgPT0gTlVMTCB8fCBzaXplID09IDAgfHwgdG8gPCAwKSB7CisJCWVycm5vID0gRUlO
VkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlGRF9aRVJPKCZyZmQpOworCUZEX1NFVChzLCAm
cmZkKTsKKworCXR2LnR2X3NlYyA9IHRvOworCXR2LnR2X3VzZWMgPSAwOworCisJd2hpbGUgKChu
ID0gc2VsZWN0KHMgKyAxLCAmcmZkLCBOVUxMLCBOVUxMLCAmdHYpKSA8IDApIHsKKwkJaWYgKGVy
cm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCisJCXJldHVy
biAoLTEpOworCX0KKworCWlmIChuID09IDApIHsKKwkJZXJybm8gPSBFVElNRURPVVQ7CisJCXJl
dHVybiAoLTEpOworCX0KKworCWFzc2VydChGRF9JU1NFVChzLCAmcmZkKSk7CisKKwl3aGlsZSAo
KG4gPSByZWFkKHMsIGJ1Ziwgc2l6ZSkpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8
IGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJ
c3dpdGNoICgqKCh1aW50OF90ICopIGJ1ZikpIHsKKwljYXNlIE5HX0hDSV9DTURfUEtUOiB7CisJ
CW5nX2hjaV9jbWRfcGt0X3QJKmggPSAobmdfaGNpX2NtZF9wa3RfdCAqKSBidWY7CisKKwkJaWYg
KG4gPj0gc2l6ZW9mKCpoKSAmJiBuID09IChzaXplb2YoKmgpICsgaC0+bGVuZ3RoKSkKKwkJCXJl
dHVybiAobik7CisJCX0gYnJlYWs7CisKKwljYXNlIE5HX0hDSV9BQ0xfREFUQV9QS1Q6IHsKKwkJ
bmdfaGNpX2FjbGRhdGFfcGt0X3QJKmggPSAobmdfaGNpX2FjbGRhdGFfcGt0X3QgKikgYnVmOwor
CisJCWlmIChuID49IHNpemVvZigqaCkgJiYgbiA9PSAoc2l6ZW9mKCpoKSArIGxlMTZ0b2goaC0+
bGVuZ3RoKSkpCisJCQlyZXR1cm4gKG4pOworCQl9IGJyZWFrOworCisJY2FzZSBOR19IQ0lfU0NP
X0RBVEFfUEtUOiB7CisJCW5nX2hjaV9zY29kYXRhX3BrdF90CSpoID0gKG5nX2hjaV9zY29kYXRh
X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBzaXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigq
aCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChuKTsKKwkJfSBicmVhazsKKworCWNhc2UgTkdf
SENJX0VWRU5UX1BLVDogeworCQluZ19oY2lfZXZlbnRfcGt0X3QJKmggPSAobmdfaGNpX2V2ZW50
X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBzaXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigq
aCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChuKTsKKwkJfSBicmVhazsKKwl9CisKKwllcnJu
byA9IEVJTzsKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitidF9kZXZyZXEoaW50IHMsIHN0cnVj
dCBidF9kZXZyZXEgKnIsIHRpbWVfdCB0bykKK3sKKwl1aW50OF90CQkJCWJ1ZlszMjBdOyAvKiBt
b3JlIHRoYW4gZW5vdWdoICovCisJbmdfaGNpX2V2ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZl
bnRfcGt0X3QgKikgYnVmOworCW5nX2hjaV9jb21tYW5kX2NvbXBsX2VwCQkqY2MgPSAobmdfaGNp
X2NvbW1hbmRfY29tcGxfZXAgKikoZSsxKTsKKwluZ19oY2lfY29tbWFuZF9zdGF0dXNfZXAJKmNz
ID0gKG5nX2hjaV9jb21tYW5kX3N0YXR1c19lcCopKGUrMSk7CisJc3RydWN0IGJ0X2RldmZpbHRl
cgkJb2xkLCBuZXc7CisJdGltZV90CQkJCXRfZW5kOworCXVpbnQxNl90CQkJb3Bjb2RlOworCXNz
aXplX3QJCQkJbjsKKwlpbnQJCQkJZXJyb3I7CisKKwlpZiAocyA8IDAgfHwgciA9PSBOVUxMIHx8
IHRvIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYg
KChyLT5ybGVuID09IDAgJiYgci0+cnBhcmFtICE9IE5VTEwpIHx8CisJICAgIChyLT5ybGVuID4g
MCAmJiByLT5ycGFyYW0gPT0gTlVMTCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAo
LTEpOworCX0KKworCW1lbXNldCgmbmV3LCAwLCBzaXplb2YobmV3KSk7CisJYnRfZGV2ZmlsdGVy
X3BrdF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX1BLVCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQo
Jm5ldywgTkdfSENJX0VWRU5UX0NPTU1BTkRfQ09NUEwpOworCWJ0X2RldmZpbHRlcl9ldnRfc2V0
KCZuZXcsIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUyk7CisJaWYgKHItPmV2ZW50ICE9IDAp
CisJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcsIHItPmV2ZW50KTsKKworCWlmIChidF9kZXZm
aWx0ZXIocywgJm5ldywgJm9sZCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCWVycm9yID0gMDsK
KworCW4gPSBidF9kZXZzZW5kKHMsIHItPm9wY29kZSwgci0+Y3BhcmFtLCByLT5jbGVuKTsKKwlp
ZiAobiA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKKwkJZ290byBvdXQ7CQorCX0KKworCW9wY29k
ZSA9IGh0b2xlMTYoci0+b3Bjb2RlKTsKKwl0X2VuZCA9IHRpbWUoTlVMTCkgKyB0bzsKKworCWRv
IHsKKwkJdG8gPSB0X2VuZCAtIHRpbWUoTlVMTCk7CisJCWlmICh0byA8IDApCisJCQl0byA9IDA7
CisKKwkJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBzaXplb2YoYnVmKSwgdG8pOworCQlpZiAobiA8
IDApIHsKKwkJCWVycm9yID0gZXJybm87CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChlLT50
eXBlICE9IE5HX0hDSV9FVkVOVF9QS1QpIHsKKwkJCWVycm9yID0gRUlPOworCQkJZ290byBvdXQ7
CisJCX0KKworCQluIC09IHNpemVvZigqZSk7CisKKwkJc3dpdGNoIChlLT5ldmVudCkgeworCQlj
YXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX0NPTVBMOgorCQkJaWYgKGNjLT5vcGNvZGUgPT0gb3Bj
b2RlKSB7CisJCQkJbiAtPSBzaXplb2YoKmNjKTsKKworCQkJCWlmIChyLT5ybGVuID49IG4pIHsK
KwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNweShyLT5ycGFyYW0sIGNjICsgMSwgci0+cmxl
bik7CisJCQkJfQorCisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE5H
X0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUzoKKwkJCWlmIChjcy0+b3Bjb2RlID09IG9wY29kZSkg
eworCQkJCWlmIChyLT5ldmVudCAhPSBOR19IQ0lfRVZFTlRfQ09NTUFORF9TVEFUVVMpIHsKKwkJ
CQkJaWYgKGNzLT5zdGF0dXMgIT0gMCkgeworCQkJCQkJZXJyb3IgPSBFSU87CisJCQkJCQlnb3Rv
IG91dDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJ
CQkJCXItPnJsZW4gPSBuOworCQkJCQkJbWVtY3B5KHItPnJwYXJhbSwgY3MsIHItPnJsZW4pOwor
CQkJCQl9CisKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVm
YXVsdDoKKwkJCWlmIChlLT5ldmVudCA9PSByLT5ldmVudCkgeworCQkJCWlmIChyLT5ybGVuID49
IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNweShyLT5ycGFyYW0sIGUgKyAxLCBy
LT5ybGVuKTsKKwkJCQl9CisKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJ
fSB3aGlsZSAodG8gPiAwKTsKKworCWVycm9yID0gRVRJTUVET1VUOworb3V0OgorCWJ0X2RldmZp
bHRlcihzLCAmb2xkLCBOVUxMKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWVycm5vID0gZXJy
b3I7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK2ludAorYnRfZGV2
ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXcsIHN0cnVjdCBidF9k
ZXZmaWx0ZXIgKm9sZCkKK3sKKwlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19maWx0ZXIJZjsK
Kwlzb2NrbGVuX3QJCQkJbGVuOworCisJaWYgKG5ldyA9PSBOVUxMICYmIG9sZCA9PSBOVUxMKSB7
CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAob2xkICE9IE5V
TEwpIHsKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlpZiAoZ2V0c29ja29wdChzLCBTT0xfSENJX1JB
VywgU09fSENJX1JBV19GSUxURVIsICZmLCAmbGVuKSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwor
CQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkpOworCQltZW1jcHkob2xkLT5wYWNrZXRfbWFz
aywgJmYucGFja2V0X21hc2ssCisJCQlzaXplb2Yob2xkLT5wYWNrZXRfbWFzaykpOworCQltZW1j
cHkob2xkLT5ldmVudF9tYXNrLCAmZi5ldmVudF9tYXNrLAorCQkJc2l6ZW9mKG9sZC0+ZXZlbnRf
bWFzaykpOworCX0KKworCWlmIChuZXcgIT0gTlVMTCkgeworCQltZW1zZXQoJmYsIDAsIHNpemVv
ZihmKSk7CisJCW1lbWNweSgmZi5wYWNrZXRfbWFzaywgbmV3LT5wYWNrZXRfbWFzaywgc2l6ZW9m
KGYucGFja2V0X21hc2spKTsKKwkJbWVtY3B5KCZmLmV2ZW50X21hc2ssIG5ldy0+ZXZlbnRfbWFz
aywgc2l6ZW9mKGYuZXZlbnRfbWFzaykpOworCisJCWxlbiA9IHNpemVvZihmKTsKKwkJaWYgKHNl
dHNvY2tvcHQocywgU09MX0hDSV9SQVcsIFNPX0hDSV9SQVdfRklMVEVSLCAmZiwgbGVuKSA8IDAp
CisJCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCit2b2lkCitidF9kZXZm
aWx0ZXJfcGt0X3NldChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlwZSkK
K3sKKwliaXRfc2V0KGZpbHRlci0+cGFja2V0X21hc2ssIHR5cGUgLSAxKTsKK30KKwordm9pZAor
YnRfZGV2ZmlsdGVyX3BrdF9jbHIoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90
IHR5cGUpCit7CisJYml0X2NsZWFyKGZpbHRlci0+cGFja2V0X21hc2ssIHR5cGUgLSAxKTsKK30K
KworaW50CitidF9kZXZmaWx0ZXJfcGt0X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpm
aWx0ZXIsIHVpbnQ4X3QgdHlwZSkKK3sKKwlyZXR1cm4gKGJpdF90ZXN0KGZpbHRlci0+cGFja2V0
X21hc2ssIHR5cGUgLSAxKSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9ldnRfc2V0KHN0cnVj
dCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwliaXRfc2V0KGZpbHRl
ci0+ZXZlbnRfbWFzaywgZXZlbnQgLSAxKTsKK30KKwordm9pZAorYnRfZGV2ZmlsdGVyX2V2dF9j
bHIoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IGV2ZW50KQoreworCWJpdF9j
bGVhcihmaWx0ZXItPmV2ZW50X21hc2ssIGV2ZW50IC0gMSk7Cit9CisKK2ludAorYnRfZGV2Zmls
dGVyX2V2dF90c3Qoc3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IGV2
ZW50KQoreworCXJldHVybiAoYml0X3Rlc3QoZmlsdGVyLT5ldmVudF9tYXNrLCBldmVudCAtIDEp
KTsKK30KKworaW50CitidF9kZXZpbnF1aXJ5KGNoYXIgY29uc3QgKmRldm5hbWUsIHRpbWVfdCBs
ZW5ndGgsIGludCBudW1fcnNwLAorCQlzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKQoreworCXVp
bnQ4X3QJCQkJYnVmWzMyMF07CisJY2hhcgkJCQlfZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsK
KwlzdHJ1Y3QgYnRfZGV2ZmlsdGVyCQlmOworCW5nX2hjaV9pbnF1aXJ5X2NwCQkqY3AgPSAobmdf
aGNpX2lucXVpcnlfY3AgKikgYnVmOworCW5nX2hjaV9ldmVudF9wa3RfdAkJKmUgPSAobmdfaGNp
X2V2ZW50X3BrdF90ICopIGJ1ZjsKKwluZ19oY2lfaW5xdWlyeV9yZXN1bHRfZXAJKmVwID0gKG5n
X2hjaV9pbnF1aXJ5X3Jlc3VsdF9lcCAqKShlKzEpOworCW5nX2hjaV9pbnF1aXJ5X3Jlc3BvbnNl
CQkqaXI7CisJc3RydWN0IGJ0X2RldmlucXVpcnkJCSppOworCWludAkJCQlzLCBuOworCXRpbWVf
dAkJCQl0bzsKKworCWlmIChpaSA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1
cm4gKC0xKTsKKwl9CisKKwlpZiAoZGV2bmFtZSA9PSBOVUxMKSB7CisJCW1lbXNldChfZGV2bmFt
ZSwgMCwgc2l6ZW9mKF9kZXZuYW1lKSk7CisJCWRldm5hbWUgPSBfZGV2bmFtZTsKKworCQluID0g
YnRfZGV2ZW51bShidF9kZXZhbnlfY2IsIF9kZXZuYW1lKTsKKwkJaWYgKG4gPD0gMCkgeworCQkJ
aWYgKG4gPT0gMCkKKwkJCQkqaWkgPSBOVUxMOworCisJCQlyZXR1cm4gKG4pOworCQl9CisJfQor
CisJcyA9IGJ0X2Rldm9wZW4oZGV2bmFtZSk7CisJaWYgKHMgPCAwKQorCQlyZXR1cm4gKC0xKTsK
KworCWlmIChidF9kZXZmaWx0ZXIocywgTlVMTCwgJmYpIDwgMCkgeworCQlidF9kZXZjbG9zZShz
KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJmYsIE5HX0hD
SV9FVkVOVF9JTlFVSVJZX0NPTVBMKTsKKwlidF9kZXZmaWx0ZXJfZXZ0X3NldCgmZiwgTkdfSENJ
X0VWRU5UX0lOUVVJUllfUkVTVUxUKTsKKworCWlmIChidF9kZXZmaWx0ZXIocywgJmYsIE5VTEwp
IDwgMCkgeworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogQWx3
YXlzIHVzZSBHSUFDIExBUCAqLworCWNwLT5sYXBbMF0gPSAweDMzOworCWNwLT5sYXBbMV0gPSAw
eDhiOworCWNwLT5sYXBbMl0gPSAweDllOworCisJLyogQ2FsY3VsYXRlIGlucXVpcmUgbGVuZ3Ro
IGluIDEuMjggc2Vjb25kIHVuaXRzICovCisJdG8gPSAodGltZV90KSAoKGRvdWJsZSkgbGVuZ3Ro
IC8gMS4yOCk7CisJaWYgKHRvIDw9IDApCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IDQ7CQkvKiA1
LjEyIHNlY29uZHMgKi8KKwllbHNlIGlmICh0byA+IDI1NCkKKwkJY3AtPmlucXVpcnlfbGVuZ3Ro
ID0gMjU1OwkvKiAzMjYuNDAgc2Vjb25kcyAqLworCWVsc2UKKwkJY3AtPmlucXVpcnlfbGVuZ3Ro
ID0gdG8gKyAxOworCisJdG8gPSAodGltZV90KSgoZG91YmxlKSBjcC0+aW5xdWlyeV9sZW5ndGgg
KiAxLjI4KSArIDE7CisKKwlpZiAobnVtX3JzcCA8PSAwIHx8IG51bV9yc3AgPiAyNTUpCisJCW51
bV9yc3AgPSA4OworCWNwLT5udW1fcmVzcG9uc2VzID0gKHVpbnQ4X3QpIG51bV9yc3A7CisKKwlp
ID0gKmlpID0gY2FsbG9jKG51bV9yc3AsIHNpemVvZihzdHJ1Y3QgYnRfZGV2aW5xdWlyeSkpOwor
CWlmIChpID09IE5VTEwpIHsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCWVycm5vID0gRU5PTUVNOwor
CQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAoYnRfZGV2c2VuZChzLAorCQlOR19IQ0lfT1BDT0RF
KE5HX0hDSV9PR0ZfTElOS19DT05UUk9MLCBOR19IQ0lfT0NGX0lOUVVJUlkpLAorCQkJY3AsIHNp
emVvZigqY3ApKSA8IDApIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCXJldHVy
biAoLTEpOworCX0KKword2FpdF9mb3JfbW9yZToKKworCW4gPSBidF9kZXZyZWN2KHMsIGJ1Ziwg
c2l6ZW9mKGJ1ZiksIHRvKTsKKwlpZiAobiA8IDApIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xv
c2Uocyk7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChuIDwgc2l6ZW9mKG5nX2hjaV9ldmVu
dF9wa3RfdCkpIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCWVycm5vID0gRUlP
OworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlzd2l0Y2ggKGUtPmV2ZW50KSB7CisJY2FzZSBOR19I
Q0lfRVZFTlRfSU5RVUlSWV9DT01QTDoKKwkJYnJlYWs7CisKKwljYXNlIE5HX0hDSV9FVkVOVF9J
TlFVSVJZX1JFU1VMVDoKKwkJaXIgPSAobmdfaGNpX2lucXVpcnlfcmVzcG9uc2UgKikoZXAgKyAx
KTsKKworI3VuZGVmCU1JTgorI2RlZmluZQlNSU4oYSwgYikJKCgoYSkgPCAoYikpPyAoYSkgOiAo
YikpCisKKwkJZm9yIChuID0gMDsgbiA8IE1JTihlcC0+bnVtX3Jlc3BvbnNlcywgbnVtX3JzcCk7
IG4gKyspIHsKKwkJCWJkYWRkcl9jb3B5KCZpLT5iZGFkZHIsICZpci0+YmRhZGRyKTsKKwkJCWkt
PnBzY2FuX3JlcF9tb2RlID0gaXItPnBhZ2Vfc2Nhbl9yZXBfbW9kZTsKKwkJCWktPnBzY2FuX3Bl
cmlvZF9tb2RlID0gaXItPnBhZ2Vfc2Nhbl9wZXJpb2RfbW9kZTsKKwkJCW1lbWNweShpLT5kZXZf
Y2xhc3MsIGlyLT51Y2xhc3MsIHNpemVvZihpLT5kZXZfY2xhc3MpKTsKKwkJCWktPmNsb2NrX29m
ZnNldCA9IGxlMTZ0b2goaXItPmNsb2NrX29mZnNldCk7CisKKwkJCWlyICsrOworCQkJaSArKzsK
KwkJCW51bV9yc3AgLS07CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWRlZmF1bHQ6CisJ
CWdvdG8gd2FpdF9mb3JfbW9yZTsKKwkJLyogTk9UIFJFQUNIRUQgKi8KKwl9CisKKwlidF9kZXZj
bG9zZShzKTsKKwkJCisJcmV0dXJuIChpIC0gKmlpKTsKK30KKworaW50CiBidF9kZXZpbmZvKHN0
cnVjdCBidF9kZXZpbmZvICpkaSkKIHsKIAl1bmlvbiB7CkBAIC01Myw2ICs1MzUsNyBAQAogCQlz
dHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2RlYnVnCQlyODsKIAl9CQkJCQkJcnA7CiAJ
c3RydWN0IHNvY2thZGRyX2hjaQkJCQloYTsKKwlzb2NrbGVuX3QJCQkJCWhhbGVuOwogCWludAkJ
CQkJCXMsIHJ2YWw7CiAKIAlpZiAoZGkgPT0gTlVMTCkgewpAQCAtNjAsMjcgKzU0MywxNCBAQAog
CQlyZXR1cm4gKC0xKTsKIAl9CiAKLQltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKLQloYS5o
Y2lfbGVuID0gc2l6ZW9mKGhhKTsKLQloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwotCi0J
aWYgKGJ0X2F0b24oZGktPmRldm5hbWUsICZycC5yMS5iZGFkZHIpKSB7Ci0JCWlmICghYnRfZGV2
bmFtZShoYS5oY2lfbm9kZSwgJnJwLnIxLmJkYWRkcikpCi0JCQlyZXR1cm4gKC0xKTsKLQl9IGVs
c2UgaWYgKGJ0X2RldjJub2RlKGRpLT5kZXZuYW1lLCBoYS5oY2lfbm9kZSwKLQkJCQkJc2l6ZW9m
KGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgewotCQllcnJubyA9IEVOWElPOwotCQlyZXR1cm4gKC0x
KTsKLQl9Ci0KLQlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9Q
Uk9UT19IQ0kpOworCXMgPSBidF9kZXZvcGVuKGRpLT5kZXZuYW1lKTsKIAlpZiAocyA8IDApCiAJ
CXJldHVybiAoLTEpOwogCiAJcnZhbCA9IC0xOwogCi0JaWYgKGJpbmQocywgKHN0cnVjdCBzb2Nr
YWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAotCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qg
c29ja2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJaGFsZW4gPSBzaXplb2YoaGEpOwor
CWlmIChnZXRzb2NrbmFtZShzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgJmhhbGVuKSA8IDAp
CiAJCWdvdG8gYmFkOwogCXN0cmxjcHkoZGktPmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2Yo
ZGktPmRldm5hbWUpKTsKIApAQCAtMTM4LDcgKzYwOCw3IEBACiAKIAlydmFsID0gMDsKIGJhZDoK
LQljbG9zZShzKTsKKwlidF9kZXZjbG9zZShzKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0y
MDUsNiArNjc1LDEzIEBACiAJcmV0dXJuIChjb3VudCk7CiB9CiAKK3N0YXRpYyBpbnQKK2J0X2Rl
dmFueV9jYihpbnQgcywgc3RydWN0IGJ0X2RldmluZm8gY29uc3QgKmRpLCB2b2lkICp4ZGV2bmFt
ZSkKK3sKKwlzdHJsY3B5KChjaGFyICopIHhkZXZuYW1lLCBkaS0+ZGV2bmFtZSwgSENJX0RFVk5B
TUVfU0laRSk7CisJcmV0dXJuICgxKTsKK30KKwogc3RhdGljIGNoYXIgKgogYnRfZGV2Mm5vZGUo
Y2hhciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKIHsKSW5kZXg6
IGJsdWV0b290aC4zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC4zCShyZXZpc2lvbiAxOTEzMjkp
CisrKyBibHVldG9vdGguMwkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogLlwiICRJ
ZDogYmx1ZXRvb3RoLjMsdiAxLjUgMjAwMy8wNS8yMCAyMzowNDozMCBtYXggRXhwICQKIC5cIiAk
RnJlZUJTRCQKIC5cIgotLkRkIEZlYnJ1YXJ5IDEzLCAyMDA5CisuRGQgQXByaWwgOSwgMjAwOQog
LkR0IEJMVUVUT09USCAzCiAuT3MKIC5TaCBOQU1FCkBAIC00MSw2ICs0MSwyMyBAQAogLk5tIGJ0
X2VuZHByb3RvZW50ICwKIC5ObSBidF9hdG9uICwKIC5ObSBidF9udG9hICwKKy5ObSBidF9kZXZh
ZGRyICwKKy5ObSBidF9kZXZuYW1lICwKKy5ObSBidF9kZXZpbmZvICwKKy5ObSBidF9kZXZlbnVt
ICwKKy5ObSBidF9kZXZvcGVuICwKKy5ObSBidF9kZXZjbG9zZSAsCisuTm0gYnRfZGV2c2VuZCAs
CisuTm0gYnRfZGV2cmVjdiAsCisuTm0gYnRfZGV2cmVxICwKKy5ObSBidF9kZXZmaWx0ZXIgLAor
Lk5tIGJ0X2RldmZpbHRlcl9wa3Rfc2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfcGt0X2NsciAsCisu
Tm0gYnRfZGV2ZmlsdGVyX3BrdF90c3QgLAorLk5tIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5O
bSBidF9kZXZmaWx0ZXJfZXZ0X2NsciAsCisuTm0gYnRfZGV2ZmlsdGVyX2V2dF90c3QgLAorLk5t
IGJ0X2RldmlucXVpcnkgLAogLk5tIGJkYWRkcl9zYW1lICwKIC5ObSBiZGFkZHJfYW55ICwKIC5O
bSBiZGFkZHJfY29weQpAQCAtODQsNiArMTAxLDMyIEBACiAuRnQgaW50CiAuRm4gYnRfZGV2ZW51
bSAiYnRfZGV2ZW51bV9jYl90ICpjYiIgInZvaWQgKmFyZyIKIC5GdCBpbnQKKy5GbiBidF9kZXZv
cGVuICJjaGFyIGNvbnN0ICpkZXZuYW1lIgorLkZ0IGludAorLkZuIGJ0X2RldmNsb3NlICJpbnQg
cyIKKy5GdCBpbnQKKy5GbiBidF9kZXZzZW5kICJpbnQgcyIgInVpbnQxNl90IG9wY29kZSIgInZv
aWQgKnBhcmFtIiAic2l6ZV90IHBsZW4iCisuRnQgc3NpemVfdAorLkZuIGJ0X2RldnJlY3YgImlu
dCBzIiAidm9pZCAqYnVmIiAic2l6ZV90IHNpemUiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4g
YnRfZGV2cmVxICJpbnQgcyIgInN0cnVjdCBidF9kZXZyZXEgKnIiICJ0aW1lX3QgdG8iCisuRnQg
aW50CisuRm4gYnRfZGV2ZmlsdGVyICJpbnQgcyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3Qg
Km5ldyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2Zmls
dGVyX3BrdF9zZXQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlwZSIK
Ky5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIg
KmZpbHRlciIgInVpbnQ4X3QgdHlwZSIKKy5GdCBpbnQKKy5GbiBidF9kZXZmaWx0ZXJfcGt0X3Rz
dCAic3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyIiAidWludDhfdCB0eXBlIgorLkZ0
IHZvaWQKKy5GbiBidF9kZXZmaWx0ZXJfZXZ0X3NldCAic3RydWN0IGJ0X2RldmZpbHRlciAqZmls
dGVyIiAidWludDhfdCBldmVudCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9jbHQg
InN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50Cisu
Rm4gYnRfZGV2ZmlsdGVyX2V2dF90c3QgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRl
ciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50CisuRm4gYnRfZGV2aW5xdWlyeSAiY2hhciBjb25z
dCAqZGV2bmFtZSIgInRpbWVfdCBsZW5ndGgiICJpbnQgbnVtX3JzcCIgInN0cnVjdCBidF9kZXZp
bnF1aXJ5ICoqaWkiCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICph
IiAiY29uc3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRh
ZGRyX3QgKmEiCkBAIC0zMTEsNiArMzU0LDIzNyBAQAogb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJy
ZWQuCiAuUHAKIFRoZQorLkZuIGJ0X2Rldm9wZW4KK2Z1bmN0aW9uIG9wZW5zIEJsdWV0b290aCBk
ZXZpY2Ugd2l0aCB0aGUgZ2l2ZW4KKy5GYSBkZXZuYW1lCithbmQgcmV0dXJucyBjb25uZWN0ZWQg
YW5kIGJvdW5kCisuRHYgSENJCitzb2NrZXQuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBh
biBlcnJvciBoYXMgb2NjdXJyZWQuCisuUHAKK1RoZQorLkZuIGJ0X2RldmNsb3NlCitjbG9zZXMg
cGFzc2VkCisuRHYgSENJCitzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0
aAorLlhyIGJ0X2Rldm9wZW4gMyAuCisuUHAKK1RoZQorLkZuIGJ0X2RldnNlbmQKK2Z1bmN0aW9u
IHNlbmRzIEJsdWV0b290aAorLkR2IEhDSQorY29tbWFuZCB3aXRoIHRoZSBnaXZlbgorLkZhIG9w
Y29kZQordG8gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5l
ZCB3aXRoCisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZQorLkZhIG9wY29kZQorcGFyYW1ldGVyIGlz
IGV4cHBlY3RlZCB0byBiZSBpbiB0aGUgaG9zdCBieXRlIG9yZGVyLgorVGhlCisuRmEgcGFyYW0K
K2FuZAorLkZhIHBsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBjb21tYW5kIHBhcmFtZXRlcnMuCitU
aGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkKKy5EdiBIQ0kKK2Zp
bHRlciBvbiB0aGUgcHJvdmlkZWQgc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJu
cyAwIG9uIHN1Y2Nlc3MsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAorVGhlCisu
Rm4gYnRfZGV2cmVjdgorZnVuY3Rpb24gcmVjZWl2ZXMgb25lIEJsdWV0b290aAorLkR2IEhDSQor
cGFja2V0IGZyb20gdGhlIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5lZCB3aXRo
CisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZSBwYWNrZXQgaXMgcGxhY2VkIGludG8gdGhlIHByb3Zp
ZGVkIGJ1ZmZlcgorLkZhIGJ1Zgorb2Ygc2l6ZQorLkZhIHNpemUgLgorVGhlCisuRmEgdG8KK3Bh
cmFtZXRlciBzcGVjaWZpZXMgcmVjZWl2ZSB0aW1lb3V0IGluIHNlY29uZHMuCitUaGUKKy5GbiBi
dF9kZXZyZWN2CitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkKKy5EdiBIQ0kKK2ZpbHRlciBvbiB0
aGUgcHJvdmlkZWQgc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0b3RhbCBu
dW1iZXIgb2YgYnl0ZXMgcmVjZXZpZWQsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5Q
cAorVGhlCisuRm4gYnRfZGV2cmVxCitmdW5jdGlvbiBtYWtlcyBCbHVldG9vdGgKKy5EdiBIQ0kK
K3JlcXVlc3QgdG8gdGhlIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5lZCB3aXRo
CisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZSBmdW5jdGlvbiB3aWxsIHNlbmQgdGhlIHNwZWNpZmll
ZCBjb21tYW5kIGFuZCB3aWxsIHdhaXQgZm9yIHRoZSBzcGVjaWZpZWQKK2V2ZW50LAorb3IgdGlt
ZW91dAorLkZhIHRvCitzZWNvbmRzIHRvIG9jY3VyLgorVGhlCisuVnQgYnRfZGV2cmVxCitzdHJ1
Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQK
K3N0cnVjdCBidF9kZXZyZXEKK3sKKyAgICAgICAgdWludDE2X3QgICAgICAgIG9wY29kZTsKKyAg
ICAgICAgdWludDhfdCAgICAgICAgIGV2ZW50OworICAgICAgICB2b2lkICAgICAgICAgICAgKmNw
YXJhbTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGNsZW47CisgICAgICAgIHZvaWQgICAgICAg
ICAgICAqcnBhcmFtOworICAgICAgICBzaXplX3QgICAgICAgICAgcmxlbjsKK307CisuRWQKKy5Q
cAorVGhlCisuRmEgb3Bjb2RlCitmaWVsZCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgYW5kIGlzIGV4
cGVjdGVkIHRvIGJlIGluIHRoZSBob3N0IGJ5dGUgb3JkZXIuCitUaGUKKy5GYSBjcGFyYW0KK2Fu
ZAorLkZhIGNsZW4KK2ZpZWxkcyBzcGVjaWZ5IGNvbW1hbmQgcGFyYW1ldGVycyBkYXRhIGFuZCBj
b21tYW5kIHBhcmFtZXRlcnMgZGF0YSBzaXplCityZXNwZWN0aXZlbHkuCitUaGUKKy5GYSBldmVu
dAorZmllbGQgc3BlY2lmaWVzIHdoaWNoIEJsdWV0b290aAorLkR2IEhDSQorZXZlbnQgSUQgdGhl
IGZ1bmN0aW9uIHNob3VsZCB3YWl0IGZvciwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8g
emVyby4KK1RoZQorLkR2IEhDSQorQ29tbWFuZCBDb21wbGV0ZSBhbmQgQ29tbWFuZCBTdGF0dXMg
ZXZlbnRzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCitUaGUKKy5GYSBycGFyYW0KK2FuZAorLkZh
IHJsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBidWZmZXIgYW5kIGJ1ZmZlciBzaXplIHJlc3BlY3Rp
dmVseSB3aGVyZSByZXR1cm4KK3BhcmFtZXRlcnMgc2hvdWxkIGJlIHBsYWNlZC4KK1RoZQorLkZu
IGJ0X2RldnJlcQorZnVuY3Rpb24gdGVtcG9yYXJpbHkgbW9kaWZpZXMgZmlsdGVyIG9uIHRoZSBw
cm92aWRlZAorLkR2IEhDSQorc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAw
IG9uIHN1Y2Nlc3MsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBi
dF9kZXZmaWx0ZXIKK2NvbnRyb2xzIHRoZSBsb2NhbAorLkR2IEhDSQorZmlsdGVyIGFzc29jaWF0
ZWQgd2l0aCB0aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5Y
ciBidF9kZXZvcGVuIDMgLgorRmlsdGVyaW5nIGNhbiBiZSBkb25lIG9uIHBhY2tldCB0eXBlcywg
aS5lLgorLkR2IEFDTCAsCisuRHYgU0NPIG9yCisuRHYgSENJCitldmVudCBwYWNrZXRzLCBhbmQs
IGluIGFkZGl0aW9uLCBvbgorLkR2IEhDSQorZXZlbnQgSURzLgorQmVmb3JlIGFwcGx5aW5nCisu
RmEgbmV3CitmaWx0ZXIgKGlmIHByb3ZpZGVkKSB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gb2J0
YWluIGN1cnJlbnQgZmlsdGVyCitmcm9tIHRoZSBzb2NrZXQKKy5GYSBzCithbmQgcGxhY2UgaXQg
aW50byB0aGUKKy5GYSBvbGQKK3BhcmFtZXRlciAoaWYgcHJvdmlkZWQpLgorVGhlIGZ1bmN0aW9u
IHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAor
VGhlCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgLAorLkZuIGJ0X2RldmZpbHRlcl9wa3RfY2xy
IAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF90c3QKK2Z1bmN0aW9ucyBjYW4gYmUgdXNlZCB0
byBtb2RpZnkgYW5kIHRlc3QKKy5EdiBIQ0kKK2ZpbHRlcgorLkZhIGZpbHRlciAuCitUaGUKKy5G
YSB0eXBlCitwYXJhbWV0ZXIgc3BlY2lmaWVzCisuRHYgSENJCitwYWNrZXQgdHlwZS4KKy5QcAor
VGhlCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9zZXQgLAorLkZuIGJ0X2RldmZpbHRlcl9ldnRfY2xy
IAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF90c3QKK2Z1bmN0aW9ucyBjYW4gYmUgdXNlZCB0
byBtb2RpZnkgYW5kIHRlc3QKKy5EdiBIQ0kKK2V2ZW50IGZpbHRlcgorLkZhIGZpbHRlciAuCitU
aGUKKy5GYSBldmVudAorcGFyYW1ldGVyIHNwZWNpZmllcworLkR2IEhDSQorZXZlbnQgSUQuCisu
UHAKK1RoZQorLkZuIGJ0X2RldmlucXVpcnkKK2Z1bmN0aW9uIHBlcmZvcm1zIEJsdWV0b290aCBp
bnF1aXJ5LgorVGhlCisuRmEgZGV2bmFtZQorcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBsb2Nh
bCBCbHVldG9vdGggZGV2aWNlIHNob3VsZCBwZXJmb3JtIGFuIGlucXVpcnkuCitJZiBub3Qgc2Vj
aWZpZWQsIGkuZS4KKy5EdiBOVUxMICwKK3RoZW4gZmlyc3QgYXZhaWxhYmxlIGRldmljZSB3aWxs
IGJlIHVzZWQuCitUaGUKKy5GYSBsZW5ndGgKK3BhcmFtZXRlcnMgc3BlY2lmaWVzIHRoZSB0b3Rh
bCBsZW5ndGggb2YgYW4gaW5xdWlyeSBpbiBzZWNvbmRzLgorSWYgbm90IHNwZWNpZmllZCwgaS5l
LiAwLCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4KK1RoZQorLkZhIG51bV9yc3AKK3BhcmFt
ZXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZXNwb25zZXMgdGhhdCBjYW4gYmUgcmVjZWl2
ZWQgYmVmb3JlCit0aGUgaW5xdWlyeSBpcyBoYWx0ZWQuCitJZiBub3Qgc3BlY2lmaWVkLCBpLmUu
IDAsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgorVGhlCisuRmEgaWkKK3BhcmFtZXRlciBz
cGVjaWZpZXMgd2hlcmUgdG8gcGxhY2UgaW5xdWlyeSByZXN1bHRzLgorT24gc3VjY2VzcywgdGhl
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRvdGFsIG51bWJlciBvZiBpbnF1aXJ5IHJlc3VsdHMsCit3
aWxsIGFsbG9jYXRlLAordXNpbmcKKy5YciBjYWxsb2MgMyAsCitidWZmZXIgdG8gc3RvcmUgYWxs
IHRoZSBpbnF1aXJ5IHJlc3VsdHMgYW5kCit3aWxsIHJldHVybiBwb2ludGVyIHRvIHRoZSBhbGxv
Y2F0ZWQgYnVmZmVyIGluIHRoZQorLkZhIGlpCitwYXJhbWV0ZXIuCitJdCBpcyB1cCB0byB0aGUg
Y2FsbGVyIG9mIHRoZSBmdW5jdGlvbiB0byBkaXNwb3NlIG9mIHRoZSBidWZmZXIgdXNpbmcKKy5Y
ciBmcmVlIDMKK2NhbGwuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBhbiBlcnJvciBoYXMg
b2NjdXJyZWQuCitUaGUKKy5WdCBidF9kZXZpbnF1aXJ5CitzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBh
cyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKK3N0cnVjdCBidF9kZXZpbnF1
aXJ5IHsKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAgICAgdWludDhfdCAg
ICAgICAgIHBzY2FuX3JlcF9tb2RlOworICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5fcGVy
aW9kX21vZGU7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBkZXZfY2xhc3NbM107CisgICAgICAg
IHVpbnQxNl90ICAgICAgICBjbG9ja19vZmZzZXQ7CisgICAgICAgIGludDhfdCAgICAgICAgICBy
c3NpOworICAgICAgICB1aW50OF90ICAgICAgICAgZGF0YVsyNDBdOworfTsKKy5FZAorLlBwCitU
aGUKIC5GbiBiZGFkZHJfc2FtZSAsCiAuRm4gYmRhZGRyX2FueQogYW5kCkBAIC00NDQsNiArNzE4
LDYgQEAKIC5TaCBBVVRIT1JTCiAuQW4gTWFrc2ltIFlldm1lbmtpbiBBcSBtX2V2bWVua2luQHlh
aG9vLmNvbQogLlNoIEJVR1MKLVRoZXNlIGZ1bmN0aW9ucyB1c2Ugc3RhdGljIGRhdGEgc3RvcmFn
ZTsKK1NvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSBzdGF0aWMgZGF0YSBzdG9yYWdlOwogaWYg
dGhlIGRhdGEgaXMgbmVlZGVkIGZvciBmdXR1cmUgdXNlLCBpdCBzaG91bGQgYmUKIGNvcGllZCBi
ZWZvcmUgYW55IHN1YnNlcXVlbnQgY2FsbHMgb3ZlcndyaXRlIGl0LgpJbmRleDogYmx1ZXRvb3Ro
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmgJKHJldmlzaW9uIDE5MTMyOSkKKysrIGJsdWV0
b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8c3lzL2Vu
ZGlhbi5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8ZXJy
bm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPG5l
dGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2hjaS5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2Js
dWV0b290aC9pbmNsdWRlL25nX2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3Ro
L2luY2x1ZGUvbmdfYnRzb2NrZXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAKIF9fQkVHSU5fREVD
TFMKIApAQCAtMTI5LDggKzEzMSw0OCBAQAogCXVpbnQ4X3QJCV9wYWRkaW5nWzIwXTsJLyogbGVh
dmUgc3BhY2UgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgKi8KIH07CiAKK3N0cnVjdCBidF9kZXZyZXEK
K3sKKwl1aW50MTZfdAlvcGNvZGU7CisJdWludDhfdAkJZXZlbnQ7CisJdm9pZAkJKmNwYXJhbTsK
KwlzaXplX3QJCWNsZW47CisJdm9pZAkJKnJwYXJhbTsKKwlzaXplX3QJCXJsZW47Cit9OworCitz
dHJ1Y3QgYnRfZGV2ZmlsdGVyIHsKKwliaXRzdHJfdAliaXRfZGVjbChwYWNrZXRfbWFzaywgOCk7
CisJYml0c3RyX3QJYml0X2RlY2woZXZlbnRfbWFzaywgMjU2KTsKK307CisKK3N0cnVjdCBidF9k
ZXZpbnF1aXJ5IHsKKwliZGFkZHJfdCAgICAgICAgYmRhZGRyOworCXVpbnQ4X3QgICAgICAgICBw
c2Nhbl9yZXBfbW9kZTsKKwl1aW50OF90ICAgICAgICAgcHNjYW5fcGVyaW9kX21vZGU7CisJdWlu
dDhfdCAgICAgICAgIGRldl9jbGFzc1szXTsKKwl1aW50MTZfdCAgICAgICAgY2xvY2tfb2Zmc2V0
OworCWludDhfdCAgICAgICAgICByc3NpOworCXVpbnQ4X3QgICAgICAgICBkYXRhWzI0MF07Cit9
OworCiB0eXBlZGVmIGludAkoYnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZpbmZv
IGNvbnN0ICosIHZvaWQgKik7CiAKK2ludAkJYnRfZGV2b3BlbiAoY2hhciBjb25zdCAqZGV2bmFt
ZSk7CitpbnQJCWJ0X2RldmNsb3NlKGludCBzKTsKK2ludAkJYnRfZGV2c2VuZCAoaW50IHMsIHVp
bnQxNl90IG9wY29kZSwgdm9pZCAqcGFyYW0sIHNpemVfdCBwbGVuKTsKK3NzaXplX3QJCWJ0X2Rl
dnJlY3YgKGludCBzLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB0aW1lX3QgdG8pOworaW50CQli
dF9kZXZyZXEgIChpbnQgcywgc3RydWN0IGJ0X2RldnJlcSAqciwgdGltZV90IHRvKTsKK2ludAkJ
YnRfZGV2ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXcsCisJCQkg
ICAgIHN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCk7Cit2b2lkCQlidF9kZXZmaWx0ZXJfcGt0X3Nl
dChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlwZSk7Cit2b2lkCQlidF9k
ZXZmaWx0ZXJfcGt0X2NscihzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlw
ZSk7CitpbnQJCWJ0X2RldmZpbHRlcl9wa3RfdHN0KHN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3Qg
KmZpbHRlciwgdWludDhfdCB0eXBlKTsKK3ZvaWQJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KHN0cnVj
dCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCk7Cit2b2lkCQlidF9kZXZmaWx0
ZXJfZXZ0X2NscihzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgZXZlbnQpOwor
aW50CQlidF9kZXZmaWx0ZXJfZXZ0X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpmaWx0
ZXIsIHVpbnQ4X3QgZXZlbnQpOworaW50CQlidF9kZXZpbnF1aXJ5KGNoYXIgY29uc3QgKmRldm5h
bWUsIHRpbWVfdCBsZW5ndGgsIGludCBudW1fcnNwLAorCQkJICAgICAgc3RydWN0IGJ0X2Rldmlu
cXVpcnkgKippaSk7CiBpbnQJCWJ0X2RldmluZm8gKHN0cnVjdCBidF9kZXZpbmZvICpkaSk7CiBp
bnQJCWJ0X2RldmVudW0gKGJ0X2RldmVudW1fY2JfdCAqY2IsIHZvaWQgKmFyZyk7CiAKSW5kZXg6
IE1ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAxOTEzMjkpCisrKyBN
YWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTkgQEAKIE1MSU5LUys9CWJsdWV0
b290aC4zIGJ0X2RldmluZm8uMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZW51bS4zCiAK
K01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2Rldm9wZW4uMworTUxJTktTKz0JYmx1ZXRvb3RoLjMg
YnRfZGV2Y2xvc2UuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2c2VuZC4zCitNTElOS1Mr
PQlibHVldG9vdGguMyBidF9kZXZyZXEuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2Zmls
dGVyLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9wa3Rfc2V0LjMKK01MSU5L
Uys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9wa3RfY2xyLjMKK01MSU5LUys9CWJsdWV0b290
aC4zIGJ0X2RldmZpbHRlcl9wa3RfdHN0LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZp
bHRlcl9ldnRfc2V0LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9ldnRfY2xy
LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9ldnRfdHN0LjMKK01MSU5LUys9
CWJsdWV0b290aC4zIGJ0X2RldmlucXVpcnkuMworCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFk
ZHJfc2FtZS4zCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFkZHJfYW55LjMKIE1MSU5LUys9CWJs
dWV0b290aC4zIGJkYWRkcl9jb3B5LjMK
--0016364ed650356495046813930a--



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