Subject: Re: wsevent cleanup
To: Martin Husemann <martin@duskware.de>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: tech-kern
Date: 02/06/2006 16:56:27
------=_Part_1272_10891676.1139241387483
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

OK, I've redone the changes by using a wsevent_inject function that takes a
set of events rather than only one.  It either inserts them all or none of =
them.

Please see the attached patch.



On 2/6/06, Julio M. Merino Vidal <jmmv84@gmail.com> wrote:
>
> El 06/02/2006, a las 13:59, Martin Husemann escribi=F3:
>
> > On Mon, Feb 06, 2006 at 01:31:00PM +0100, Julio M. Merino Vidal wrote:
> >> I didn't do this because, some times, you want to inject more than
> >> one
> >> event at once (strictly speaking, only the code I added yesterday has
> >> this behavior... but am now thinking that the event processing
> >> code in
> >> wsmouse could also use this to do everything atomically).  In such
> >> case,
> >> you'd be checking first if there is room for two elements and
> >> then, each
> >> inject could redo the check to see if there is room for one element.
> >
> > Well, that sounds ok to me (we are talking about mouse/keyboard events
> > here, not network packets - so duplicating a simple check now and then
> > is not that bad).
> >
> > But the obvious other solution (no idea how handy that gets for the
> > callers
> > you have in mind): allow multiple events being passed to the
> > _inject function
> > in a single call.
>
> This is a good idea too, and it may be better for what I have in mind
> because I'd locally construct all the events and then simply call
> the function to add them at once.  Something like:
>
> struct wscons_event evt[N];
> ... fill evt with up to N events ...  (see below)
> error =3D wsevent_inject(evar, evt, N);
> if (error !=3D 0)
>         queue is full
>
> But this makes me think how to deal with the timestamps attached to
> the events.  The first possibility is to generate them while
> constructing each event.  In this case, I'd add an extra function
> wscons_event_init(*event, type, value) so that the timestamps were
> hidden from the caller.
>
> The other possibility is to leave the timestamp initialization to
> wsevent_inject, which could then mark all events with the same
> timestamp.  They happen so close in time that it couldn't make a
> difference, could it?
>
> Cheers,
>
> PS: Isn't 'wsevent' a misfortunate name for a queue?  It makes me
> think of a single event rather than a set of them.  Specially
> confusing: wsevent_init vs. wscons_event_init.
>
> --
> Julio M. Merino Vidal <jmmv84@gmail.com>
> The Julipedia - http://julipedia.blogspot.com/
>
>
>


--
Julio M. Merino Vidal <jmmv84@gmail.com>
The Julipedia - http://julipedia.blogspot.com/

------=_Part_1272_10891676.1139241387483
Content-Type: application/octet-stream; name="patch.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch.diff"

SW5kZXg6IHdzZGlzcGxheS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMv
ZGV2L3dzY29ucy93c2Rpc3BsYXkuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NwpkaWZmIC11
IC1wIC1yMS44NyB3c2Rpc3BsYXkuYwotLS0gd3NkaXNwbGF5LmMJMTEgRGVjIDIwMDUgMTI6MjQ6
MTIgLTAwMDAJMS44NworKysgd3NkaXNwbGF5LmMJNiBGZWIgMjAwNiAxNTo1Mjo1NSAtMDAwMApA
QCAtNzI2LDggKzcyNiw3IEBAIHdzZGlzcGxheW9wZW4oZGV2X3QgZGV2LCBpbnQgZmxhZywgaW50
IG0KIAkJcmV0dXJuIChFTlhJTyk7CiAKIAlpZiAoSVNXU0RJU1BMQVlTVEFUKGRldikpIHsKLQkJ
d3NldmVudF9pbml0KCZzYy0+ZXZhcik7Ci0JCXNjLT5ldmFyLmlvID0gbC0+bF9wcm9jOworCQl3
c2V2ZW50X2luaXQoJnNjLT5ldmFyLCBsLT5sX3Byb2MpOwogCQlyZXR1cm4gKDApOwogCX0KIApA
QCAtMTM0MSw4ICsxMzQwLDcgQEAgd3NkaXNwbGF5X3N0YXRfaW5qZWN0KHN0cnVjdCBkZXZpY2Ug
KmRldgogewogCXN0cnVjdCB3c2Rpc3BsYXlfc29mdGMgKnNjID0gKHN0cnVjdCB3c2Rpc3BsYXlf
c29mdGMgKikgZGV2OwogCXN0cnVjdCB3c2V2ZW50dmFyICpldmFyOwotCXN0cnVjdCB3c2NvbnNf
ZXZlbnQgKmV2OwotCWludCBwdXQ7CisJc3RydWN0IHdzY29uc19ldmVudCBldmVudDsKIAogCWV2
YXIgPSAmc2MtPmV2YXI7CiAKQEAgLTEzNTIsMTggKzEzNTAsMTIgQEAgd3NkaXNwbGF5X3N0YXRf
aW5qZWN0KHN0cnVjdCBkZXZpY2UgKmRldgogCWlmIChldmFyLT5xID09IE5VTEwpCiAJCXJldHVy
biAoMSk7CiAKLQlwdXQgPSBldmFyLT5wdXQ7Ci0JZXYgPSAmZXZhci0+cVtwdXRdOwotCXB1dCA9
IChwdXQgKyAxKSAlIFdTRVZFTlRfUVNJWkU7Ci0JaWYgKHB1dCA9PSBldmFyLT5nZXQpIHsKKwll
dmVudC50eXBlID0gdHlwZTsKKwlldmVudC52YWx1ZSA9IHZhbHVlOworCWlmICh3c2V2ZW50X2lu
amVjdChldmFyLCAmZXZlbnQsIDEpICE9IDApIHsKIAkJbG9nKExPR19XQVJOSU5HLCAid3NkaXNw
bGF5OiBldmVudCBxdWV1ZSBvdmVyZmxvd1xuIik7CiAJCXJldHVybiAoMSk7CiAJfQotCWV2LT50
eXBlID0gdHlwZTsKLQlldi0+dmFsdWUgPSB2YWx1ZTsKLQluYW5vdGltZSgmZXYtPnRpbWUpOwot
CWV2YXItPnB1dCA9IHB1dDsKLQlXU0VWRU5UX1dBS0VVUChldmFyKTsKIAogCXJldHVybiAoMCk7
CiB9CkluZGV4OiB3c2V2ZW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5
cy9kZXYvd3Njb25zL3dzZXZlbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11
IC1wIC1yMS4xNyB3c2V2ZW50LmMKLS0tIHdzZXZlbnQuYwkxMSBEZWMgMjAwNSAxMjoyNDoxMiAt
MDAwMAkxLjE3CisrKyB3c2V2ZW50LmMJNiBGZWIgMjAwNiAxNTo1Mjo1NiAtMDAwMApAQCAtMSw1
ICsxLDQxIEBACiAvKiAkTmV0QlNEOiB3c2V2ZW50LmMsdiAxLjE3IDIwMDUvMTIvMTEgMTI6MjQ6
MTIgY2hyaXN0b3MgRXhwICQgKi8KIAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE5l
dEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJT
RCBGb3VuZGF0aW9uCisgKiBieSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m
IHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl
ZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg
dGhlIE5ldEJTRAorICoJRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAq
IDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVU
T1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1Ig
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCiAvKgog
ICogQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IENocmlzdG9waGVyIEcuIERlbWV0cmlvdS4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNzgsNiArMTE0LDcgQEAKIF9fS0VSTkVMX1JDU0lE
KDAsICIkTmV0QlNEOiB3c2V2ZW50LmMsdiAxLjE3IDIwMDUvMTIvMTEgMTI6MjQ6MTIgY2hyaXN0
b3MgRXhwICQiKTsKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJu
ZWwuaD4KICNpbmNsdWRlIDxzeXMvZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAj
aW5jbHVkZSA8c3lzL3Byb2MuaD4KQEAgLTkwLDEwICsxMjcsMjYgQEAgX19LRVJORUxfUkNTSUQo
MCwgIiROZXRCU0Q6IHdzZXZlbnQuYyx2IAogI2luY2x1ZGUgPGRldi93c2NvbnMvd3NldmVudHZh
ci5oPgogCiAvKgorICogU2l6ZSBvZiBhIHdzZXZlbnQgcXVldWUgKG1lYXN1cmVkIGluIG51bWJl
ciBvZiBldmVudHMpLgorICogU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvIHNvIHRoYXQgYCUnIGlz
IGZhc3QuCisgKiBBdCB0aGUgbW9tZW50LCB0aGUgdmFsdWUgYmVsb3cgbWFrZXMgdGhlIHF1ZXVl
cyB1c2UgMiBLYnl0ZXMgZWFjaDsgdGhpcworICogdmFsdWUgbWF5IG5lZWQgdHVuaW5nLgorICov
CisjZGVmaW5lCVdTRVZFTlRfUVNJWkUJMjU2CisKKy8qCisgKiBQcmlvcml0eSBvZiBjb2RlIG1h
bmFnaW5nIHdzZXZlbnQgcXVldWVzLiAgUFdTRVZFTlQgaXMgc2V0IGp1c3QgYWJvdmUKKyAqIFBT
T0NLLCB3aGljaCBpcyBqdXN0IGFib3ZlIFRUSVBSSSwgb24gdGhlIHRoZW9yeSB0aGF0IG1vdXNl
IGFuZCBrZXlib2FyZAorICogYHVzZXInIGlucHV0IHNob3VsZCBiZSBxdWljay4KKyAqLworI2Rl
ZmluZQlQV1NFVkVOVAkyMworI2RlZmluZQlzcGx3c2V2ZW50KCkJc3BsdHR5KCkKKworLyoKICAq
IEluaXRpYWxpemUgYSB3c2NvbnNfZXZlbnQgcXVldWUuCiAgKi8KIHZvaWQKLXdzZXZlbnRfaW5p
dChzdHJ1Y3Qgd3NldmVudHZhciAqZXYpCit3c2V2ZW50X2luaXQoc3RydWN0IHdzZXZlbnR2YXIg
KmV2LCBzdHJ1Y3QgcHJvYyAqcCkKIHsKIAogCWlmIChldi0+cSAhPSBOVUxMKSB7CkBAIC0xMDUs
NiArMTU4LDcgQEAgd3NldmVudF9pbml0KHN0cnVjdCB3c2V2ZW50dmFyICpldikKIAlldi0+Z2V0
ID0gZXYtPnB1dCA9IDA7CiAJZXYtPnEgPSBtYWxsb2MoKHVfbG9uZylXU0VWRU5UX1FTSVpFICog
c2l6ZW9mKHN0cnVjdCB3c2NvbnNfZXZlbnQpLAogCQkgICAgICAgTV9ERVZCVUYsIE1fV0FJVE9L
fE1fWkVSTyk7CisJZXYtPmlvID0gcDsKIH0KIAogLyoKQEAgLTI1NiwzICszMTAsNjggQEAgd3Nl
dmVudF9rcWZpbHRlcihzdHJ1Y3Qgd3NldmVudHZhciAqZXYsIAogCiAJcmV0dXJuICgwKTsKIH0K
KworLyoKKyAqIFdha2VzIHVwIGFsbCBsaXN0ZW5lciBvZiB0aGUgJ2V2JyBxdWV1ZS4KKyAqLwor
dm9pZAord3NldmVudF93YWtldXAoc3RydWN0IHdzZXZlbnR2YXIgKmV2KQoreworCisJc2Vsbm90
aWZ5KCZldi0+c2VsLCAwKTsKKworCWlmIChldi0+d2FudGVkKSB7CisJCWV2LT53YW50ZWQgPSAw
OworCQl3YWtldXAoZXYpOworCX0KKworCWlmIChldi0+YXN5bmMpCisJCXBzaWduYWwoZXYtPmlv
LCBTSUdJTyk7Cit9CisKKy8qCisgKiBJbmplY3RzIHRoZSBzZXQgb2YgZXZlbnRzIGdpdmVuIGlu
ICdldmVudHMnLCB3aG9zZSBzaXplIGlzICduZXZlbmV0cycsCisgKiBpbnRvIHRoZSAnZXYnIHF1
ZXVlLiAgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBmcmVlIHNwYWNlIHRvIGluamVjdCB0aGVtCisg
KiBhbGwsIHJldHVybnMgRU5PU1BDIGFuZCB0aGUgcXVldWUgaXMgbGVmdCBpbnRhY3Q7IG90aGVy
d2lzZSByZXR1cm5zIDAKKyAqIGFuZCB3YWtlcyB1cCBhbGwgbGlzdGVuZXJzLgorICovCitpbnQK
K3dzZXZlbnRfaW5qZWN0KHN0cnVjdCB3c2V2ZW50dmFyICpldiwgc3RydWN0IHdzY29uc19ldmVu
dCAqZXZlbnRzLAorICAgIHNpemVfdCBuZXZlbnRzKQoreworCWludCBvbGRzcGw7CisJc2l6ZV90
IGF2YWlsLCBpOworCXN0cnVjdCB0aW1lc3BlYyB0OworCisJLyogQ2FsY3VsYXRlIG51bWJlciBv
ZiBmcmVlIHNsb3RzIGluIHRoZSBxdWV1ZS4gKi8KKwlpZiAoZXYtPnB1dCA8IGV2LT5nZXQpCisJ
CWF2YWlsID0gZXYtPmdldCAtIGV2LT5wdXQ7CisJZWxzZQorCQlhdmFpbCA9IFdTRVZFTlRfUVNJ
WkUgLSAoZXYtPnB1dCAtIGV2LT5nZXQpOworCUtBU1NFUlQoYXZhaWwgPD0gV1NFVkVOVF9RU0la
RSk7CisKKwkvKiBGYWlsIGlmIHRoZXJlIGlzIGFsbCBldmVudHMgd2lsbCBub3QgZml0IGluIHRo
ZSBxdWV1ZS4gKi8KKwlpZiAoYXZhaWwgPCBuZXZlbnRzKQorCQlyZXR1cm4gRU5PU1BDOworCisJ
LyogVXNlIHRoZSBjdXJyZW50IHRpbWUgZm9yIGFsbCBldmVudHMuICovCisJb2xkc3BsID0gc3Bs
aGlnaCgpOworCVRJTUVWQUxfVE9fVElNRVNQRUMoJnRpbWUsICZ0KTsKKwlzcGx4KG9sZHNwbCk7
CisKKwkvKiBJbmplY3QgdGhlIGV2ZW50cy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmV2ZW50czsg
aSsrKSB7CisJCXN0cnVjdCB3c2NvbnNfZXZlbnQgKndlOworCisJCXdlID0gJmV2LT5xW2V2LT5w
dXRdOworCQl3ZS0+dHlwZSA9IGV2ZW50c1tpXS50eXBlOworCQl3ZS0+dmFsdWUgPSBldmVudHNb
aV0udmFsdWU7CisJCXdlLT50aW1lID0gdDsKKworCQlldi0+cHV0ID0gKGV2LT5wdXQgKyAxKSAl
IFdTRVZFTlRfUVNJWkU7CisJfQorCisJd3NldmVudF93YWtldXAoZXYpOworCisJcmV0dXJuIDA7
Cit9CkluZGV4OiB3c2V2ZW50dmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3N5cy9kZXYvd3Njb25zL3dzZXZlbnR2YXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRp
ZmYgLXUgLXAgLXIxLjkgd3NldmVudHZhci5oCi0tLSB3c2V2ZW50dmFyLmgJMTEgRGVjIDIwMDUg
MTI6MjQ6MTIgLTAwMDAJMS45CisrKyB3c2V2ZW50dmFyLmgJNiBGZWIgMjAwNiAxNTo1Mjo1NiAt
MDAwMApAQCAtNzYsOSArNzYsNiBAQAogICogaS5lLiwgYXJlIGV4cGVjdGVkIHRvIHJ1biBvZmYg
c2VyaWFsIHBvcnRzIG9yIHNpbWlsYXIgZGV2aWNlcy4KICAqLwogCi0vKiBXU0VWRU5UX1FTSVpF
IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3byBzbyB0aGF0IGAlJyBpcyBmYXN0ICovCi0jZGVmaW5l
CVdTRVZFTlRfUVNJWkUJMjU2CS8qIG1heSBuZWVkIHR1bmluZzsgdGhpcyB1c2VzIDJrICovCi0K
IHN0cnVjdCB3c2V2ZW50dmFyIHsKIAl1X2ludAlnZXQ7CQkvKiBnZXQgKHJlYWQpIGluZGV4ICht
b2RpZmllZCBzeW5jaHJvbm91c2x5KSAqLwogCXZvbGF0aWxlIHVfaW50IHB1dDsJLyogcHV0ICh3
cml0ZSkgaW5kZXggKG1vZGlmaWVkIGJ5IGludGVycnVwdCkgKi8KQEAgLTg5LDI2ICs4NiwxMCBA
QCBzdHJ1Y3Qgd3NldmVudHZhciB7CiAJc3RydWN0IHdzY29uc19ldmVudCAqcTsJLyogY2lyY3Vs
YXIgYnVmZmVyIChxdWV1ZSkgb2YgZXZlbnRzICovCiB9OwogCi0jZGVmaW5lCXNwbHdzZXZlbnQo
KQlzcGx0dHkoKQotCi0jZGVmaW5lCVdTRVZFTlRfV0FLRVVQKGV2KSB7IFwKLQlzZWxub3RpZnko
JihldiktPnNlbCwgMCk7IFwKLQlpZiAoKGV2KS0+d2FudGVkKSB7IFwKLQkJKGV2KS0+d2FudGVk
ID0gMDsgXAotCQl3YWtldXAoKGV2KSk7IFwKLQl9IFwKLQlpZiAoKGV2KS0+YXN5bmMpIFwKLQkJ
cHNpZ25hbCgoZXYpLT5pbywgU0lHSU8pOyBcCi19Ci0KLXZvaWQJd3NldmVudF9pbml0KHN0cnVj
dCB3c2V2ZW50dmFyICopOwordm9pZAl3c2V2ZW50X2luaXQoc3RydWN0IHdzZXZlbnR2YXIgKiwg
c3RydWN0IHByb2MgKik7CiB2b2lkCXdzZXZlbnRfZmluaShzdHJ1Y3Qgd3NldmVudHZhciAqKTsK
IGludAl3c2V2ZW50X3JlYWQoc3RydWN0IHdzZXZlbnR2YXIgKiwgc3RydWN0IHVpbyAqLCBpbnQp
OwogaW50CXdzZXZlbnRfcG9sbChzdHJ1Y3Qgd3NldmVudHZhciAqLCBpbnQsIHN0cnVjdCBsd3Ag
Kik7CiBpbnQJd3NldmVudF9rcWZpbHRlcihzdHJ1Y3Qgd3NldmVudHZhciAqZXYsIHN0cnVjdCBr
bm90ZSAqa24pOwotCi0vKgotICogUFdTRVZFTlQgaXMgc2V0IGp1c3QgYWJvdmUgUFNPQ0ssIHdo
aWNoIGlzIGp1c3QgYWJvdmUgVFRJUFJJLCBvbiB0aGUKLSAqIHRoZW9yeSB0aGF0IG1vdXNlIGFu
ZCBrZXlib2FyZCBgdXNlcicgaW5wdXQgc2hvdWxkIGJlIHF1aWNrLgotICovCi0jZGVmaW5lCVBX
U0VWRU5UCTIzCit2b2lkCXdzZXZlbnRfd2FrZXVwKHN0cnVjdCB3c2V2ZW50dmFyICopOworaW50
CXdzZXZlbnRfaW5qZWN0KHN0cnVjdCB3c2V2ZW50dmFyICosIHN0cnVjdCB3c2NvbnNfZXZlbnQg
Kiwgc2l6ZV90KTsKSW5kZXg6IHdza2JkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qv
c3JjL3N5cy9kZXYvd3Njb25zL3dza2JkLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODUKZGlm
ZiAtdSAtcCAtcjEuODUgd3NrYmQuYwotLS0gd3NrYmQuYwkxMSBEZWMgMjAwNSAxMjoyNDoxMiAt
MDAwMAkxLjg1CisrKyB3c2tiZC5jCTYgRmViIDIwMDYgMTU6NTI6NTYgLTAwMDAKQEAgLTU3Niwx
MCArNTc2LDE0IEBAIHdza2JkX2RldGFjaChzdHJ1Y3QgZGV2aWNlICAqc2VsZiwgaW50IGYKIAlp
ZiAoZXZhciAhPSBOVUxMICYmIGV2YXItPmlvICE9IE5VTEwpIHsKIAkJcyA9IHNwbHR0eSgpOwog
CQlpZiAoLS1zYy0+c2NfcmVmY250ID49IDApIHsKKwkJCXN0cnVjdCB3c2NvbnNfZXZlbnQgZXZl
bnQ7CisKIAkJCS8qIFdha2UgZXZlcnlvbmUgYnkgZ2VuZXJhdGluZyBhIGR1bW15IGV2ZW50LiAq
LwotCQkJaWYgKCsrZXZhci0+cHV0ID49IFdTRVZFTlRfUVNJWkUpCi0JCQkJZXZhci0+cHV0ID0g
MDsKLQkJCVdTRVZFTlRfV0FLRVVQKGV2YXIpOworCQkJZXZlbnQudHlwZSA9IDA7CisJCQlldmVu
dC52YWx1ZSA9IDA7CisJCQlpZiAod3NldmVudF9pbmplY3QoZXZhciwgJmV2ZW50LCAxKSAhPSAw
KQorCQkJCXdzZXZlbnRfd2FrZXVwKGV2YXIpOworCiAJCQkvKiBXYWl0IGZvciBwcm9jZXNzZXMg
dG8gZ28gYXdheS4gKi8KIAkJCWlmICh0c2xlZXAoc2MsIFBaRVJPLCAid3NrZGV0IiwgaHogKiA2
MCkpCiAJCQkJcHJpbnRmKCJ3c2tiZF9kZXRhY2g6ICVzIGRpZG4ndCBkZXRhY2hcbiIsCkBAIC02
NjcsOCArNjcxLDcgQEAgc3RhdGljIHZvaWQKIHdza2JkX2RlbGl2ZXJfZXZlbnQoc3RydWN0IHdz
a2JkX3NvZnRjICpzYywgdV9pbnQgdHlwZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCB3c2V2ZW50
dmFyICpldmFyOwotCXN0cnVjdCB3c2NvbnNfZXZlbnQgKmV2OwotCWludCBwdXQ7CisJc3RydWN0
IHdzY29uc19ldmVudCBldmVudDsKIAogCWV2YXIgPSBzYy0+c2NfYmFzZS5tZV9ldnA7CiAKQEAg
LTY4NCwxOSArNjg3LDExIEBAIHdza2JkX2RlbGl2ZXJfZXZlbnQoc3RydWN0IHdza2JkX3NvZnRj
ICoKIAl9CiAjZW5kaWYKIAkKLQlwdXQgPSBldmFyLT5wdXQ7Ci0JZXYgPSAmZXZhci0+cVtwdXRd
OwotCXB1dCA9IChwdXQgKyAxKSAlIFdTRVZFTlRfUVNJWkU7Ci0JaWYgKHB1dCA9PSBldmFyLT5n
ZXQpIHsKKwlldmVudC50eXBlID0gdHlwZTsKKwlldmVudC52YWx1ZSA9IHZhbHVlOworCWlmICh3
c2V2ZW50X2luamVjdChldmFyLCAmZXZlbnQsIDEpICE9IDApCiAJCWxvZyhMT0dfV0FSTklORywg
IiVzOiBldmVudCBxdWV1ZSBvdmVyZmxvd1xuIiwKIAkJICAgIHNjLT5zY19iYXNlLm1lX2R2LmR2
X3huYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlldi0+dHlwZSA9IHR5cGU7Ci0JZXYtPnZhbHVlID0g
dmFsdWU7Ci0JbmFub3RpbWUoJmV2LT50aW1lKTsKLQlldmFyLT5wdXQgPSBwdXQ7Ci0JV1NFVkVO
VF9XQUtFVVAoZXZhcik7CiB9CiAKICNpZmRlZiBXU0RJU1BMQVlfQ09NUEFUX1JBV0tCRApAQCAt
ODIxLDggKzgxNiw3IEBAIHdza2Jkb3BlbihkZXZfdCBkZXYsIGludCBmbGFncywgaW50IG1vZGUK
IAkJcmV0dXJuIChFQlVTWSk7CiAKIAlldmFyID0gJnNjLT5zY19iYXNlLm1lX2V2YXI7Ci0Jd3Nl
dmVudF9pbml0KGV2YXIpOwotCWV2YXItPmlvID0gbC0+bF9wcm9jOworCXdzZXZlbnRfaW5pdChl
dmFyLCBsLT5sX3Byb2MpOwogCiAJZXJyb3IgPSB3c2tiZF9kb19vcGVuKHNjLCBldmFyKTsKIAlp
ZiAoZXJyb3IpIHsKSW5kZXg6IHdzbW91c2UuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL2Rldi93c2NvbnMvd3Ntb3VzZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5
CmRpZmYgLXUgLXAgLXIxLjM5IHdzbW91c2UuYwotLS0gd3Ntb3VzZS5jCTUgRmViIDIwMDYgMTc6
Mzg6MzMgLTAwMDAJMS4zOQorKysgd3Ntb3VzZS5jCTYgRmViIDIwMDYgMTU6NTI6NTcgLTAwMDAK
QEAgLTMxMywxMCArMzEzLDE0IEBAIHdzbW91c2VfZGV0YWNoKHN0cnVjdCBkZXZpY2UgICpzZWxm
LCBpbnQKIAlpZiAoZXZhciAhPSBOVUxMICYmIGV2YXItPmlvICE9IE5VTEwpIHsKIAkJcyA9IHNw
bHR0eSgpOwogCQlpZiAoLS1zYy0+c2NfcmVmY250ID49IDApIHsKKwkJCXN0cnVjdCB3c2NvbnNf
ZXZlbnQgZXZlbnQ7CisKIAkJCS8qIFdha2UgZXZlcnlvbmUgYnkgZ2VuZXJhdGluZyBhIGR1bW15
IGV2ZW50LiAqLwotCQkJaWYgKCsrZXZhci0+cHV0ID49IFdTRVZFTlRfUVNJWkUpCi0JCQkJZXZh
ci0+cHV0ID0gMDsKLQkJCVdTRVZFTlRfV0FLRVVQKGV2YXIpOworCQkJZXZlbnQudHlwZSA9IDA7
CisJCQlldmVudC52YWx1ZSA9IDA7CisJCQlpZiAod3NldmVudF9pbmplY3QoZXZhciwgJmV2ZW50
LCAxKSAhPSAwKQorCQkJCXdzZXZlbnRfd2FrZXVwKGV2YXIpOworCiAJCQkvKiBXYWl0IGZvciBw
cm9jZXNzZXMgdG8gZ28gYXdheS4gKi8KIAkJCWlmICh0c2xlZXAoc2MsIFBaRVJPLCAid3NtZGV0
IiwgaHogKiA2MCkpCiAJCQkJcHJpbnRmKCJ3c21vdXNlX2RldGFjaDogJXMgZGlkbid0IGRldGFj
aFxuIiwKQEAgLTM0MCw5ICszNDQsOSBAQCB3c21vdXNlX2lucHV0X3h5encoc3RydWN0IGRldmlj
ZSAqd3Ntb3VzCiAJaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcsIHVfaW50IGZsYWdzKQogewog
CXN0cnVjdCB3c21vdXNlX3NvZnRjICpzYyA9IChzdHJ1Y3Qgd3Ntb3VzZV9zb2Z0YyAqKXdzbW91
c2VkZXY7Ci0Jc3RydWN0IHdzY29uc19ldmVudCAqZXY7CiAJc3RydWN0IHdzZXZlbnR2YXIgKmV2
YXI7Ci0JaW50IG1iLCB1YiwgZCwgZ2V0LCBwdXQsIGFueTsKKwlpbnQgbWIsIHViLCBkLCBuZXZl
bnRzOworCXN0cnVjdCB3c2NvbnNfZXZlbnQgZXZlbnRzWzQgKyBzaXplb2YoZCkgKiA4XTsKIAog
ICAgICAgICAvKgogICAgICAgICAgKiBEaXNjYXJkIGlucHV0IGlmIG5vdCBvcGVuLgpAQCAtMzgx
LDEwOCArMzg1LDU4IEBAIHdzbW91c2VfaW5wdXRfeHl6dyhzdHJ1Y3QgZGV2aWNlICp3c21vdXMK
IAkgKiBtYXJrIHRoZW0gYHVuY2hhbmdlZCcuCiAJICovCiAJdWIgPSBzYy0+c2NfdWI7Ci0JYW55
ID0gMDsKLQlnZXQgPSBldmFyLT5nZXQ7Ci0JcHV0ID0gZXZhci0+cHV0OwotCWV2ID0gJmV2YXIt
PnFbcHV0XTsKLQotCS8qIE5FWFQgcHJlcGFyZXMgdG8gcHV0IHRoZSBuZXh0IGV2ZW50LCBiYWNr
aW5nIG9mZiBpZiBuZWNlc3NhcnkgKi8KLSNkZWZpbmUJTkVYVAkJCQkJCQkJXAotCWlmICgoKytw
dXQpICUgV1NFVkVOVF9RU0laRSA9PSBnZXQpIHsJCQkJXAotCQlwdXQtLTsJCQkJCQkJXAotCQln
b3RvIG91dDsJCQkJCQlcCi0JfQotCS8qIEFEVkFOQ0UgY29tcGxldGVzIHRoZSBgcHV0JyBvZiB0
aGUgZXZlbnQgKi8KLSNkZWZpbmUJQURWQU5DRQkJCQkJCQkJXAotCWV2Kys7CQkJCQkJCQlcCi0J
aWYgKHB1dCA+PSBXU0VWRU5UX1FTSVpFKSB7CQkJCQlcCi0JCXB1dCA9IDA7CQkJCQkJXAotCQll
diA9ICZldmFyLT5xWzBdOwkJCQlcCi0JfQkJCQkJCQkJXAotCWFueSA9IDEKLQkvKiBUSU1FU1RB
TVAgc2V0cyBgdGltZScgZmllbGQgb2YgdGhlIGV2ZW50IHRvIHRoZSBjdXJyZW50IHRpbWUgKi8K
LSNkZWZpbmUgVElNRVNUQU1QCQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWludCBzOwkJCQkJ
CQlcCi0JCXMgPSBzcGxoaWdoKCk7CQkJCQkJXAotCQlUSU1FVkFMX1RPX1RJTUVTUEVDKCZ0aW1l
LCAmZXYtPnRpbWUpOwkJCVwKLQkJc3BseChzKTsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKKwluZXZl
bnRzID0gMDsKIAogCWlmIChmbGFncyAmIFdTTU9VU0VfSU5QVVRfQUJTT0xVVEVfWCkgewogCQlp
ZiAoc2MtPnNjX3ggIT0geCkgewotCQkJTkVYVDsKLQkJCWV2LT50eXBlID0gV1NDT05TX0VWRU5U
X01PVVNFX0FCU09MVVRFX1g7Ci0JCQlldi0+dmFsdWUgPSB4OwotCQkJVElNRVNUQU1QOwotCQkJ
QURWQU5DRTsKLQkJCXNjLT5zY194ID0geDsKKwkJCWV2ZW50c1tuZXZlbnRzXS50eXBlID0gV1ND
T05TX0VWRU5UX01PVVNFX0FCU09MVVRFX1g7CisJCQlldmVudHNbbmV2ZW50c10udmFsdWUgPSB4
OworCQkJbmV2ZW50cysrOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHNjLT5zY19keCkgewotCQkJ
TkVYVDsKLQkJCWV2LT50eXBlID0gV1NDT05TX0VWRU5UX01PVVNFX0RFTFRBX1g7Ci0JCQlldi0+
dmFsdWUgPSBzYy0+c2NfZHg7Ci0JCQlUSU1FU1RBTVA7Ci0JCQlBRFZBTkNFOwotCQkJc2MtPnNj
X2R4ID0gMDsKKwkJCWV2ZW50c1tuZXZlbnRzXS50eXBlID0gV1NDT05TX0VWRU5UX01PVVNFX0RF
TFRBX1g7CisJCQlldmVudHNbbmV2ZW50c10udmFsdWUgPSBzYy0+c2NfZHg7CisJCQluZXZlbnRz
Kys7CiAJCX0KIAl9CiAJaWYgKGZsYWdzICYgV1NNT1VTRV9JTlBVVF9BQlNPTFVURV9ZKSB7CiAJ
CWlmIChzYy0+c2NfeSAhPSB5KSB7Ci0JCQlORVhUOwotCQkJZXYtPnR5cGUgPSBXU0NPTlNfRVZF
TlRfTU9VU0VfQUJTT0xVVEVfWTsKLQkJCWV2LT52YWx1ZSA9IHk7Ci0JCQlUSU1FU1RBTVA7Ci0J
CQlBRFZBTkNFOwotCQkJc2MtPnNjX3kgPSB5OworCQkJZXZlbnRzW25ldmVudHNdLnR5cGUgPSBX
U0NPTlNfRVZFTlRfTU9VU0VfQUJTT0xVVEVfWTsKKwkJCWV2ZW50c1tuZXZlbnRzXS52YWx1ZSA9
IHk7CisJCQluZXZlbnRzKys7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoc2MtPnNjX2R5KSB7Ci0J
CQlORVhUOwotCQkJZXYtPnR5cGUgPSBXU0NPTlNfRVZFTlRfTU9VU0VfREVMVEFfWTsKLQkJCWV2
LT52YWx1ZSA9IHNjLT5zY19keTsKLQkJCVRJTUVTVEFNUDsKLQkJCUFEVkFOQ0U7Ci0JCQlzYy0+
c2NfZHkgPSAwOworCQkJZXZlbnRzW25ldmVudHNdLnR5cGUgPSBXU0NPTlNfRVZFTlRfTU9VU0Vf
REVMVEFfWTsKKwkJCWV2ZW50c1tuZXZlbnRzXS52YWx1ZSA9IHNjLT5zY19keTsKKwkJCW5ldmVu
dHMrKzsKIAkJfQogCX0KIAlpZiAoZmxhZ3MgJiBXU01PVVNFX0lOUFVUX0FCU09MVVRFX1opIHsK
IAkJaWYgKHNjLT5zY196ICE9IHopIHsKLQkJCU5FWFQ7Ci0JCQlldi0+dHlwZSA9IFdTQ09OU19F
VkVOVF9NT1VTRV9BQlNPTFVURV9aOwotCQkJZXYtPnZhbHVlID0gejsKLQkJCVRJTUVTVEFNUDsK
LQkJCUFEVkFOQ0U7Ci0JCQlzYy0+c2NfeiA9IHo7CisJCQlldmVudHNbbmV2ZW50c10udHlwZSA9
IFdTQ09OU19FVkVOVF9NT1VTRV9BQlNPTFVURV9aOworCQkJZXZlbnRzW25ldmVudHNdLnZhbHVl
ID0gejsKKwkJCW5ldmVudHMrKzsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChzYy0+c2NfZHopIHsK
LQkJCU5FWFQ7Ci0JCQlldi0+dHlwZSA9IFdTQ09OU19FVkVOVF9NT1VTRV9ERUxUQV9aOwotCQkJ
ZXYtPnZhbHVlID0gc2MtPnNjX2R6OwotCQkJVElNRVNUQU1QOwotCQkJQURWQU5DRTsKLQkJCXNj
LT5zY19keiA9IDA7CisJCQlldmVudHNbbmV2ZW50c10udHlwZSA9IFdTQ09OU19FVkVOVF9NT1VT
RV9ERUxUQV9aOworCQkJZXZlbnRzW25ldmVudHNdLnZhbHVlID0gc2MtPnNjX2R6OworCQkJbmV2
ZW50cysrOwogCQl9CiAJfQogCWlmIChmbGFncyAmIFdTTU9VU0VfSU5QVVRfQUJTT0xVVEVfVykg
ewogCQlpZiAoc2MtPnNjX3cgIT0gdykgewotCQkJTkVYVDsKLQkJCWV2LT50eXBlID0gV1NDT05T
X0VWRU5UX01PVVNFX0FCU09MVVRFX1c7Ci0JCQlldi0+dmFsdWUgPSB3OwotCQkJVElNRVNUQU1Q
OwotCQkJQURWQU5DRTsKLQkJCXNjLT5zY193ID0gdzsKKwkJCWV2ZW50c1tuZXZlbnRzXS50eXBl
ID0gV1NDT05TX0VWRU5UX01PVVNFX0FCU09MVVRFX1c7CisJCQlldmVudHNbbmV2ZW50c10udmFs
dWUgPSB3OworCQkJbmV2ZW50cysrOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHNjLT5zY19kdykg
ewotCQkJTkVYVDsKLQkJCWV2LT50eXBlID0gV1NDT05TX0VWRU5UX01PVVNFX0RFTFRBX1c7Ci0J
CQlldi0+dmFsdWUgPSBzYy0+c2NfZHc7Ci0JCQlUSU1FU1RBTVA7Ci0JCQlBRFZBTkNFOwotCQkJ
c2MtPnNjX2R3ID0gMDsKKwkJCWV2ZW50c1tuZXZlbnRzXS50eXBlID0gV1NDT05TX0VWRU5UX01P
VVNFX0RFTFRBX1c7CisJCQlldmVudHNbbmV2ZW50c10udmFsdWUgPSBzYy0+c2NfZHc7CisJCQlu
ZXZlbnRzKys7CiAJCX0KIAl9CiAKQEAgLTUwNiwxNyArNDYwLDE1IEBAIHdzbW91c2VfaW5wdXRf
eHl6dyhzdHJ1Y3QgZGV2aWNlICp3c21vdXMKIAkJICogTW91c2UgYnV0dG9uIGNoYW5nZS4gIEZp
bmQgdGhlIGZpcnN0IGNoYW5nZSBhbmQgZHJvcAogCQkgKiBpdCBpbnRvIHRoZSBldmVudCBxdWV1
ZS4KIAkJICovCi0JCU5FWFQ7CiAJCWJ0bm5vID0gZmZzKGQpIC0gMTsKIAkJS0FTU0VSVChidG5u
byA+PSAwKTsKIAotCQlldi0+dmFsdWUgPSBidG5ubzsKLQkJZCA9IDEgPDwgZXYtPnZhbHVlOwot
CQlldi0+dHlwZSA9CisJCWV2ZW50c1tuZXZlbnRzXS50eXBlID0KIAkJICAgIChtYiAmIGQpID8g
V1NDT05TX0VWRU5UX01PVVNFX0RPV04gOiBXU0NPTlNfRVZFTlRfTU9VU0VfVVA7Ci0JCVRJTUVT
VEFNUDsKLQkJQURWQU5DRTsKLQkJdWIgXj0gZDsKKwkJZXZlbnRzW25ldmVudHNdLnZhbHVlID0g
YnRubm87CisJCW5ldmVudHMrKzsKKworCQl1YiBePSAoMSA8PCBidG5ubyk7CiAKIAkJLyoKIAkJ
ICogUHJvZ3JhbSBidXR0b24gcmVwZWF0aW5nIGlmIGNvbmZpZ3VyZWQgZm9yIHRoaXMgYnV0dG9u
LgpAQCAtNTMwLDExICs0ODIsMTkgQEAgd3Ntb3VzZV9pbnB1dF94eXp3KHN0cnVjdCBkZXZpY2Ug
KndzbW91cwogCQkJICAgIHNjKTsKIAkJfQogCX0KLW91dDoKLQlpZiAoYW55KSB7CisKKwlLQVNT
RVJUKG5ldmVudHMgPiAwICYmCisJICAgIG5ldmVudHMgPD0gc2l6ZW9mKGV2ZW50cykgLyBzaXpl
b2Yoc3RydWN0IHdzY29uc19ldmVudCkpOworCisJaWYgKHdzZXZlbnRfaW5qZWN0KGV2YXIsIGV2
ZW50cywgbmV2ZW50cykgPT0gMCkgeworCQkvKiBBbGwgZXZlbnRzIHdlcmUgY29ycmVjdGx5IGlu
amVjdGVkIGludG8gdGhlIHF1ZXVlLgorCQkgKiBTeW5jaHJvbml6ZSB0aGUgbW91c2UncyBzdGF0
dXMgd2l0aCB3aGF0IHRoZSB1c2VyCisJCSAqIGhhcyByZWNlaXZlZC4gKi8KKwkJc2MtPnNjX3gg
PSB4OyBzYy0+c2NfZHggPSAwOworCQlzYy0+c2NfeSA9IHk7IHNjLT5zY19keSA9IDA7CisJCXNj
LT5zY196ID0gejsgc2MtPnNjX2R6ID0gMDsKKwkJc2MtPnNjX3cgPSB3OyBzYy0+c2NfZHcgPSAw
OwogCQlzYy0+c2NfdWIgPSB1YjsKLQkJZXZhci0+cHV0ID0gcHV0OwotCQlXU0VWRU5UX1dBS0VV
UChldmFyKTsKICNpZiBOV1NNVVggPiAwCiAJCURQUklOVEZOKDUsKCJ3c21vdXNlX2lucHV0OiAl
cyB3YWtldXAgZXZhcj0lcFxuIiwKIAkJCSAgICBzYy0+c2NfYmFzZS5tZV9kdi5kdl94bmFtZSwg
ZXZhcikpOwpAQCAtNTQ4LDcgKzUwOCw3IEBAIHdzbW91c2VfcmVwZWF0KHZvaWQgKnYpCiAJaW50
IG9sZHNwbDsKIAl1bnNpZ25lZCBpbnQgbmV3ZGVsYXk7CiAJc3RydWN0IHdzbW91c2Vfc29mdGMg
KnNjOwotCXN0cnVjdCB3c2V2ZW50dmFyICpldmFyOworCXN0cnVjdCB3c2NvbnNfZXZlbnQgZXZl
bnRzWzJdOwogCiAJb2xkc3BsID0gc3BsdHR5KCk7CiAJc2MgPSAoc3RydWN0IHdzbW91c2Vfc29m
dGMgKil2OwpAQCAtNTY2LDM1ICs1MjYsMTQgQEAgd3Ntb3VzZV9yZXBlYXQodm9pZCAqdikKIAog
CW5ld2RlbGF5ID0gc2MtPnNjX3JlcGVhdF9kZWxheTsKIAotCWV2YXIgPSBzYy0+c2NfYmFzZS5t
ZV9ldnA7Ci0JaWYgKChldmFyLT5wdXQgKyAxKSAlIFdTRVZFTlRfUVNJWkUgIT0gZXZhci0+Z2V0
ICYmCi0JICAgIChldmFyLT5wdXQgKyAyKSAlIFdTRVZFTlRfUVNJWkUgIT0gZXZhci0+Z2V0KSB7
Ci0JCS8qIFF1ZXVlIGhhcyByb29tIGZvciBhdCBsZWFzdCB0d28gbW9yZSBldmVudHMuICovCi0J
CWludCBvbGRzcGwyOwotCQlzdHJ1Y3Qgd3Njb25zX2V2ZW50ICpldjsKLQotCQkvKiBDb25zdHJ1
Y3QgYW5kIGluamVjdCBuZXcgYnV0dG9uIHVwIGV2ZW50LiAqLwotCQlldiA9ICZldmFyLT5xW2V2
YXItPnB1dF07Ci0JCWV2LT52YWx1ZSA9IHNjLT5zY19yZXBlYXRfYnV0dG9uOwotCQlldi0+dHlw
ZSA9IFdTQ09OU19FVkVOVF9NT1VTRV9VUDsKLQkJb2xkc3BsMiA9IHNwbGhpZ2goKTsKLQkJVElN
RVZBTF9UT19USU1FU1BFQygmdGltZSwgJmV2LT50aW1lKTsKLQkJc3BseChvbGRzcGwyKTsKLQkJ
ZXZhci0+cHV0ID0gKGV2YXItPnB1dCArIDEpICUgV1NFVkVOVF9RU0laRTsKLQotCQkvKiBDb25z
dHJ1Y3QgYW5kIGluamVjdCBuZXcgYnV0dG9uIGRvd24gZXZlbnQuICovCi0JCWV2ID0gJmV2YXIt
PnFbZXZhci0+cHV0XTsKLQkJZXYtPnZhbHVlID0gc2MtPnNjX3JlcGVhdF9idXR0b247Ci0JCWV2
LT50eXBlID0gV1NDT05TX0VWRU5UX01PVVNFX0RPV047Ci0JCW9sZHNwbDIgPSBzcGxoaWdoKCk7
Ci0JCVRJTUVWQUxfVE9fVElNRVNQRUMoJnRpbWUsICZldi0+dGltZSk7Ci0JCXNwbHgob2xkc3Bs
Mik7Ci0JCWV2YXItPnB1dCA9IChldmFyLT5wdXQgKyAxKSAlIFdTRVZFTlRfUVNJWkU7CisJZXZl
bnRzWzBdLnR5cGUgPSBXU0NPTlNfRVZFTlRfTU9VU0VfVVA7CisJZXZlbnRzWzBdLnZhbHVlID0g
c2MtPnNjX3JlcGVhdF9idXR0b247CisJZXZlbnRzWzFdLnR5cGUgPSBXU0NPTlNfRVZFTlRfTU9V
U0VfRE9XTjsKKwlldmVudHNbMV0udmFsdWUgPSBzYy0+c2NfcmVwZWF0X2J1dHRvbjsKIAorCWlm
ICh3c2V2ZW50X2luamVjdChzYy0+c2NfYmFzZS5tZV9ldnAsIGV2ZW50cywgMikgPT0gMCkgewog
CQlzYy0+c2NfdWIgPSAxIDw8IHNjLT5zY19yZXBlYXRfYnV0dG9uOwogCi0JCVdTRVZFTlRfV0FL
RVVQKGV2YXIpOwotCiAJCWlmIChuZXdkZWxheSAtIHNjLT5zY19yZXBlYXQud3JfZGVsYXlfZGVj
cmVtZW50IDwKIAkJICAgIHNjLT5zY19yZXBlYXQud3JfZGVsYXlfbWluaW11bSkKIAkJCW5ld2Rl
bGF5ID0gc2MtPnNjX3JlcGVhdC53cl9kZWxheV9taW5pbXVtOwpAQCAtNjQyLDkgKzU4MSw4IEBA
IHdzbW91c2VvcGVuKGRldl90IGRldiwgaW50IGZsYWdzLCBpbnQgbW8KIAkJcmV0dXJuIChFQlVT
WSk7CiAKIAlldmFyID0gJnNjLT5zY19iYXNlLm1lX2V2YXI7Ci0Jd3NldmVudF9pbml0KGV2YXIp
OworCXdzZXZlbnRfaW5pdChldmFyLCBsLT5sX3Byb2MpOwogCXNjLT5zY19iYXNlLm1lX2V2cCA9
IGV2YXI7Ci0JZXZhci0+aW8gPSBsLT5sX3Byb2M7CiAKIAllcnJvciA9IHdzbW91c2Vkb29wZW4o
c2MsIGV2YXIpOwogCWlmIChlcnJvcikgewpJbmRleDogd3NtdXguYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi93c2NvbnMvd3NtdXguYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSB3c211eC5jCi0tLSB3c211eC5jCTI1IERlYyAy
MDA1IDE3OjIzOjQyIC0wMDAwCTEuNDEKKysrIHdzbXV4LmMJNiBGZWIgMjAwNiAxNTo1Mjo1NyAt
MDAwMApAQCAtMjI3LDggKzIyNyw3IEBAIHdzbXV4b3BlbihkZXZfdCBkZXYsIGludCBmbGFncywg
aW50IG1vZGUKIAkJcmV0dXJuIChFQlVTWSk7CiAKIAlldmFyID0gJnNjLT5zY19iYXNlLm1lX2V2
YXI7Ci0Jd3NldmVudF9pbml0KGV2YXIpOwotCWV2YXItPmlvID0gbC0+bF9wcm9jOworCXdzZXZl
bnRfaW5pdChldmFyLCBsLT5sX3Byb2MpOwogI2lmZGVmIFdTRElTUExBWV9DT01QQVRfUkFXS0JE
CiAJc2MtPnNjX3Jhd2tiZCA9IDA7CiAjZW5kaWYKQEAgLTQwNyw5ICs0MDYsOSBAQCB3c211eF9k
b19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkdiwgdV9sb25nCiAJc3RydWN0IHdzbXV4X3NvZnRjICpz
YyA9IChzdHJ1Y3Qgd3NtdXhfc29mdGMgKilkdjsKIAlzdHJ1Y3Qgd3NldnNyYyAqbWU7CiAJaW50
IGVycm9yLCBvazsKLQlpbnQgcywgcHV0LCBnZXQsIG47CisJaW50IHMsIG47CiAJc3RydWN0IHdz
ZXZlbnR2YXIgKmV2YXI7Ci0Jc3RydWN0IHdzY29uc19ldmVudCAqZXY7CisJc3RydWN0IHdzY29u
c19ldmVudCBldmVudDsKIAlzdHJ1Y3Qgd3NtdXhfZGV2aWNlX2xpc3QgKmw7CiAKIAlEUFJJTlRG
KCgid3NtdXhfZG9faW9jdGw6ICVzOiBlbnRlciBzYz0lcCwgY21kPSUwOGx4XG4iLApAQCAtNDI4
LDIyICs0MjcsMTIgQEAgd3NtdXhfZG9faW9jdGwoc3RydWN0IGRldmljZSAqZHYsIHVfbG9uZwog
CQl9CiAKIAkJcyA9IHNwbHR0eSgpOwotCQlnZXQgPSBldmFyLT5nZXQ7Ci0JCXB1dCA9IGV2YXIt
PnB1dDsKLQkJZXYgPSAmZXZhci0+cVtwdXRdOwotCQlpZiAoKytwdXQgJSBXU0VWRU5UX1FTSVpF
ID09IGdldCkgewotCQkJcHV0LS07Ci0JCQlzcGx4KHMpOwotCQkJcmV0dXJuIChFTk9TUEMpOwot
CQl9Ci0JCWlmIChwdXQgPj0gV1NFVkVOVF9RU0laRSkKLQkJCXB1dCA9IDA7Ci0JCSpldiA9ICoo
c3RydWN0IHdzY29uc19ldmVudCAqKWRhdGE7Ci0JCW5hbm90aW1lKCZldi0+dGltZSk7Ci0JCWV2
YXItPnB1dCA9IHB1dDsKLQkJV1NFVkVOVF9XQUtFVVAoZXZhcik7CisJCWV2ZW50LnR5cGUgPSAo
KHN0cnVjdCB3c2NvbnNfZXZlbnQgKilkYXRhKS0+dHlwZTsKKwkJZXZlbnQudmFsdWUgPSAoKHN0
cnVjdCB3c2NvbnNfZXZlbnQgKilkYXRhKS0+dmFsdWU7CisJCWVycm9yID0gd3NldmVudF9pbmpl
Y3QoZXZhciwgJmV2ZW50LCAxKTsKIAkJc3BseChzKTsKLQkJcmV0dXJuICgwKTsKKworCQlyZXR1
cm4gZXJyb3I7CiAJY2FzZSBXU01VWElPX0FERF9ERVZJQ0U6CiAjZGVmaW5lIGQgKChzdHJ1Y3Qg
d3NtdXhfZGV2aWNlICopZGF0YSkKIAkJRFBSSU5URigoIiVzOiBhZGQgdHlwZT0lZCwgbm89JWRc
biIsIHNjLT5zY19iYXNlLm1lX2R2LmR2X3huYW1lLAo=
------=_Part_1272_10891676.1139241387483--