Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Mar 2014 14:37:09 +0900
From:      Midori Kato <katoon@sfc.wide.ad.jp>
To:        net@freebsd.org
Cc:        "Eggert, Lars" <lars@netapp.com>
Subject:   DCTCP implementation
Message-ID:  <5338FF05.1020302@sfc.wide.ad.jp>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------030401080100030902090403
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi FreeBSD developpers,

I'm Midori Kato. I'm working on the DCTCP implementation in the FreeBSD 
with Lars Eggert. I mail you because I would like to ask you a code 
review and testing. The attached patch is not good enough to test our 
code. Please give me your message. I will send an ECN marking 
implmenetation in dummynet and test scripts personally to you.

A DCTCP paper is published in SIGCOMM 2010. DCTCP is also published as 
an IETF draft [1]. In our implementation, there are a change to the 
modular congestion control framework and five changes from the original 
DCTCP algorithm. I briefly describe each of them as below.

<1> A change for the modular congestion control framework
DCTCP uses the different ECN processing from RFC3168. We need three 
functions to do the proper DCTCP ECN processing.
   a) The kernel decides whether an ECE flag should be set in the 
outgoing TCP segment. (tcp_input.c)
   b) The kernel controls congestion if an ECE flag is set in the 
arriving TCP segment. (tcp_input.c)
   c) After the outgoing TCP segment is generated, the kernel decides 
whether an ECT bit should be set in an ECN field of IP header in the 
outgoing packet. (tcp_output.c)
The current framework has no housekeeping functions for (a) and (b). 
Therefore, I add two functions into the moduler cc framework: 
ecnpkt_handler() and ect_handler().
   - ecnpkt_handler() allows the kernel to do the additional ECN 
processing by snooping ECN field in IP and TCP headers. As an option, 
this function check a delayed ACK flag, which tells whether this 
function is in the delayed ACK. This function returns an integer value. 
When the return value is set, the kernel force to disable delayed ACK.
  - ect_handler() allows the kernel to use the different rule from 
RFC3168 in terms of an ECT marking in the outgoing segment. This 
function returns an integer value. If the value is set, an ECT bit is 
set to the outgoing segment.

<2> Five changes from the original DCTCP algorithm
In order to reflect the DCTCP motivation correctly, the following 
modifications are included in our patch. First four modifications are 
prepared for senders and the last modification is prepared for receivers.
   (1) ECE processing
   FreeBSD handles ECN as a congestion event but it's not true for DCTCP 
senders. A DCTCP sender uses ECN as a means to understand the extent of 
congestions. Therefore, a modified DCTCP sender never enters congestion 
recovery mode in any situations.

   (2) selective initial alpha value
   DCTCP defines alpha as a parameter to see the depth of a congestion. 
When the alpha value is large, it allows a saw-toothed CWND behavior to 
a DCTCP sender. A problem is that the alpha value is not reliable during 
a dozen of RTTs because there is no way to identify the depth of a 
congestion over a network from the beginning. When considering the alpha 
reliability, I think the initial alpha should be selective for 
applications by users. When a user chooses DCTCP for latency-sensitive 
applications, the initial alpha is preferred. Otherwise, DCTCP senders 
had better to set the initial alpha value to zero.
   The default alpha value is set to zero in our implementation.

   (3) alpha value initialization after an idle period
    The original DCTCP paper does not define how the sender behaves 
after idle time. A DCTCP sender resets alpha to the initial value when 
an idle time happens.

   The following changes is applied to eliminate a compatibility issue 
to standard ECN defined in RFC3465. Currently, DCTCP and standard ECN 
servers have no way to identify which mechanism is working on the peer. 
Thus, we eliminate the worst situation in a network mixing DCTCP 
senders/receivers and standard ECN senders/receivers.
   (4) Emitting CWRs at one-sided senders
   This change is applied for a situation when a sender uses DCTCP and a 
reciever uses standard ECN.
   Under the situation, we find that a DCTCP sender minimizes CWND. 
Fortunately, the current tcp_input()  function complement this change, 
thus, there is no modification in our patch.

   (5) delayed ACK at one-sided receivers
   This change is applied for a situation when a sender uses standard 
ECN and a reciever uses DCTCP. Under the situation, we find that a 
standard ECN sender increases smaller CWND than expected when the 
one-sided DCTCP receiver unsets delayed ACK against a packet with CWR 
flag. Thus, we always apply delayed ACK only when CWR flag is set in the 
arriving packet.

If you want to understand the detailed background of these 
modifications, see my thesis [2], especially in section 3 and 4.
I'm looking forward to hear from you!

Regards,
-- Midori

[1] http://tools.ietf.org/html/draft-bensley-tcpm-dctcp
[2]https://eggert.org/students/kato-thesis.pdf

--------------030401080100030902090403
Content-Type: text/plain; charset=UTF-8;
 name="dctcp.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="dctcp.patch"

ZGlmZiAtLWdpdCBhL3N5cy9tb2R1bGVzL2NjL01ha2VmaWxlIGIvc3lzL21vZHVsZXMvY2Mv
TWFrZWZpbGUKaW5kZXggN2I4NTFmNS4uN2Y0ZTk0ZSAxMDA2NDQKLS0tIGEvc3lzL21vZHVs
ZXMvY2MvTWFrZWZpbGUKKysrIGIvc3lzL21vZHVsZXMvY2MvTWFrZWZpbGUKQEAgLTMsNiAr
Myw3IEBACiBTVUJESVI9CWNjX2NkZyBcCiAJY2NfY2hkIFwKIAljY19jdWJpYyBcCisJY2Nf
ZGN0Y3AgXAogCWNjX2hkIFwKIAljY19odGNwIFwKIAljY192ZWdhcwpkaWZmIC0tZ2l0IGEv
c3lzL21vZHVsZXMvY2MvY2NfZGN0Y3AvTWFrZWZpbGUgYi9zeXMvbW9kdWxlcy9jYy9jY19k
Y3RjcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjkx
OWNkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL21vZHVsZXMvY2MvY2NfZGN0Y3AvTWFrZWZp
bGUKQEAgLTAsMCArMSw5IEBACisjICRGcmVlQlNEJAorCisuaW5jbHVkZSA8YnNkLm93bi5t
az4KKworLlBBVEg6ICR7LkNVUkRJUn0vLi4vLi4vLi4vbmV0aW5ldC9jYworS01PRD0JY2Nf
ZGN0Y3AKK1NSQ1M9CWNjX2RjdGNwLmMKKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZm
IC0tZ2l0IGEvc3lzL25ldGluZXQvY2MuaCBiL3N5cy9uZXRpbmV0L2NjLmgKaW5kZXggMTRi
NGE5ZC4uMzgxZjk0ZSAxMDA2NDQKLS0tIGEvc3lzL25ldGluZXQvY2MuaAorKysgYi9zeXMv
bmV0aW5ldC9jYy5oCkBAIC0xNDMsNiArMTQzLDEzIEBAIHN0cnVjdCBjY19hbGdvIHsKIAkv
KiBDYWxsZWQgd2hlbiBkYXRhIHRyYW5zZmVyIHJlc3VtZXMgYWZ0ZXIgYW4gaWRsZSBwZXJp
b2QuICovCiAJdm9pZAkoKmFmdGVyX2lkbGUpKHN0cnVjdCBjY192YXIgKmNjdik7CiAKKwkv
KiBDYWxsZWQgZm9yIGFuIGFkZGl0aW9uYWwgRUNOIHByb2Nlc3NpbmcgYXBhcnQgZnJvbSBS
RkMzMTY4LiAqLworCWludAkoKmVjbnBrdF9oYW5kbGVyKShzdHJ1Y3QgY2NfdmFyICpjY3Ys
IHVpbnQ4X3QgaXB0b3MsIGludCBjd3IsCisJCSAgICBpbnQgaXNfZGVsYXlhY2spOworCisJ
LyogQ2FsbGVkIHdoZW4gdGhlIGhvc3QgbWFya3MgRUNOIGNhcGFibGUgdHJhbnNtaXNzaW9u
IChFQ1QpLiAqLworCWludAkoKmVjdF9oYW5kbGVyKShzdHJ1Y3QgY2NfdmFyICpjY3YpOwor
CiAJU1RBSUxRX0VOVFJZIChjY19hbGdvKSBlbnRyaWVzOwogfTsKIApkaWZmIC0tZ2l0IGEv
c3lzL25ldGluZXQvY2MvY2NfZGN0Y3AuYyBiL3N5cy9uZXRpbmV0L2NjL2NjX2RjdGNwLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjZDE2NgotLS0gL2Rldi9u
dWxsCisrKyBiL3N5cy9uZXRpbmV0L2NjL2NjX2RjdGNwLmMKQEAgLTAsMCArMSw0NDIgQEAK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDgKKyAqIAlTd2luYnVybmUgVW5pdmVy
c2l0eSBvZiBUZWNobm9sb2d5LCBNZWxib3VybmUsIEF1c3RyYWxpYQorICogQ29weXJpZ2h0
IChjKSAyMDA5LTIwMTAgTGF3cmVuY2UgU3Rld2FydCA8bHN0ZXdhcnRAZnJlZWJzZC5vcmc+
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWlkb3JpIEthdG8gPGthdG9vbkBzZmMud2lkZS5h
ZC5qcD4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEFuIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBEQ1RDUCBhbGdvcml0aG0gZm9yIEZyZWVCU0QsIGJhc2Vk
IG9uCisgKiAiRGF0YSBDZW50ZXIgVENQIChEQ1RDUCkiIGJ5IE0uIEFsaXphZGVoLCBBLiBH
cmVlbmJlcmcsIEQuIEEuIE1hbHR6LAorICogSi4gUGFkaHllLCBQLiBQYXRlbCwgQi4gUHJh
Ymhha2FyLCBTLiBTZW5ndXB0YSwgYW5kIE0uIFNyaWRoYXJhbi4sCisgKiBpbiBBQ00gQ29u
ZmVyZW5jZSBvbiBTSUdDT01NIDIwMTAsIE5ldyBZb3JrLCBVU0EsCisgKiBPcmlnaW5hbGx5
IHJlbGVhc2VkIGFzIHRoZSBjb250cmlidXRpb24gb2YgTWljcm9zb2Z0IFJlc2VhcmNoIHBy
b2plY3QuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVl
QlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l
bC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+
CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4K
KyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNp
bmNsdWRlIDxuZXQvdm5ldC5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1
ZGUgPG5ldGluZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2NjLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC90Y3Bfc2VxLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisKKyNp
bmNsdWRlIDxuZXRpbmV0L2NjL2NjX21vZHVsZS5oPgorCisjZGVmaW5lCUNBU1RfUFRSX0lO
VChYKQkoKigoaW50KikoWCkpKQorCitzdGF0aWMgVk5FVF9ERUZJTkUodWludDMyX3QsIGRj
dGNwX3NoaWZ0X2cpID0gNDsKK3N0YXRpYyBWTkVUX0RFRklORSh1aW50MzJfdCwgZGN0Y3Bf
c2xvd3N0YXJ0KSA9IDA7CisjZGVmaW5lIFZfZGN0Y3Bfc2hpZnRfZwkJVk5FVChkY3RjcF9z
aGlmdF9nKQorI2RlZmluZQlWX2RjdGNwX3Nsb3dzdGFydAlWTkVUKGRjdGNwX3Nsb3dzdGFy
dCkKKworc3RydWN0IGRjdGNwIHsKKwkvKiAjIG9mIG1hcmtlZCBieXRlcyBkdXJpbmcgYSBS
VFQgKi8KKwlpbnQgICAgIGJ5dGVzX2VjbjsKKwkvKiAjIG9mIGFja2VkIGJ5dGVzIGR1cmlu
ZyBhIFJUVCAqLworCWludCAgICAgYnl0ZXNfdG90YWw7CisJLyogdGhlIGZyYWN0aW9uIG9m
IG1hcmtlZCBieXRlcyAqLworCWludCAgICAgYWxwaGE7CisJLyogQ0Ugc3RhdGUgb2YgdGhl
IGxhc3Qgc2VnbWVudCAqLworCWludCAgICAgY2VfcHJldjsKKwkvKiBlbmQgc2VxdWVuY2Ug
bnVtYmVyIG9mIHRoZSBjdXJyZW50IHdpbmRvdyAqLworCWludCAgICAgc2F2ZV9zbmRueHQ7
CisJLyogRUNFIGZsYWcgaW4gdGhpcyBzZWdtZW50ICovCisJaW50CWlzX2VjZTsKKwkvKiBF
Q0UgZmxhZyBpbiB0aGUgbGFzdCBzZWdtZW50ICovCisJaW50CWVjZV9wcmV2OworCS8qICMg
b2YgY29uZ2VzdGlvbiBldmVudHMgKi8KKwl1aW50MzJfdAludW1fY29uZ19ldmVudHM7Cit9
OworCitzdGF0aWMgTUFMTE9DX0RFRklORShNX2RjdGNwLCAiZGN0Y3AgZGF0YSIsCisgICAg
IlBlciBjb25uZWN0aW9uIGRhdGEgcmVxdWlyZWQgZm9yIHRoZSBkY3RjcCBhbGdvcml0aG0i
KTsKKworc3RhdGljIHZvaWQJZGN0Y3BfYWNrX3JlY2VpdmVkKHN0cnVjdCBjY192YXIgKmNj
diwgdWludDE2X3QgdHlwZSk7CitzdGF0aWMgdm9pZAlkY3RjcF9hZnRlcl9pZGxlKHN0cnVj
dCBjY192YXIgKmNjdik7CitzdGF0aWMgdm9pZAlkY3RjcF9jYl9kZXN0cm95KHN0cnVjdCBj
Y192YXIgKmNjdik7CitzdGF0aWMgaW50CWRjdGNwX2NiX2luaXQoc3RydWN0IGNjX3ZhciAq
Y2N2KTsKK3N0YXRpYyB2b2lkCWRjdGNwX2Nvbmdfc2lnbmFsKHN0cnVjdCBjY192YXIgKmNj
diwgdWludDMyX3QgdHlwZSk7CitzdGF0aWMgdm9pZAlkY3RjcF9jb25uX2luaXQoc3RydWN0
IGNjX3ZhciAqY2N2KTsKK3N0YXRpYyB2b2lkCWRjdGNwX3Bvc3RfcmVjb3Zlcnkoc3RydWN0
IGNjX3ZhciAqY2N2KTsKK3N0YXRpYyBpbnQJZGN0Y3BfZWNucGt0X2hhbmRsZXIoc3RydWN0
IGNjX3ZhciAqY2N2LCB1aW50OF90IGlwdG9zLCBpbnQgY3dyLAorCQkgICAgaW50IGlzX2Rl
bGF5YWNrKTsKK3N0YXRpYyBpbnQJZGN0Y3BfZWN0aGFuZGxlcihzdHJ1Y3QgY2NfdmFyICpj
Y3YpOworc3RhdGljIHZvaWQJZGN0Y3BfdXBkYXRlX2FscGhhKHN0cnVjdCBjY192YXIgKmNj
dik7CisKK3N0cnVjdCBjY19hbGdvIGRjdGNwX2NjX2FsZ28gPSB7CisJLm5hbWUgPSAiZGN0
Y3AiLAorCS5hY2tfcmVjZWl2ZWQgPSBkY3RjcF9hY2tfcmVjZWl2ZWQsCisJLmNiX2Rlc3Ry
b3kgPSBkY3RjcF9jYl9kZXN0cm95LAorCS5jYl9pbml0ID0gZGN0Y3BfY2JfaW5pdCwKKwku
Y29uZ19zaWduYWwgPSBkY3RjcF9jb25nX3NpZ25hbCwKKwkuY29ubl9pbml0ID0gZGN0Y3Bf
Y29ubl9pbml0LAorCS5wb3N0X3JlY292ZXJ5ID0gZGN0Y3BfcG9zdF9yZWNvdmVyeSwKKwku
ZWNucGt0X2hhbmRsZXIgPSBkY3RjcF9lY25wa3RfaGFuZGxlciwKKwkuYWZ0ZXJfaWRsZSA9
IGRjdGNwX2FmdGVyX2lkbGUsCisJLmVjdF9oYW5kbGVyID0gZGN0Y3BfZWN0aGFuZGxlciwK
K307CisKK3N0YXRpYyB2b2lkCitkY3RjcF9hY2tfcmVjZWl2ZWQoc3RydWN0IGNjX3ZhciAq
Y2N2LCB1aW50MTZfdCB0eXBlKQoreworCXN0cnVjdCBkY3RjcCAqZGN0Y3BfZGF0YTsKKwlp
bnQgYnl0ZXNfYWNrZWQgPSAwOworCisJZGN0Y3BfZGF0YSA9IGNjdi0+Y2NfZGF0YTsKKwor
CS8qCisJICogRENUQ1AgZG9lc24ndCByZWdhcmQgd2l0aCBFQ04gYXMgYSBjb25nZXN0aW9u
LgorCSAqIFRodXMsIERDVENQIGFsd2F5cyBleGVjdXRlcyB0aGUgQUNLIHByb2Nlc3Npbmcg
b3V0CisJICogb2YgY29uZ2VzdGlvbiByZWNvdmVyeS4KKwkgKi8KKwlpZiAoSU5fQ09OR1JF
Q09WRVJZKENDVihjY3YsIHRfZmxhZ3MpKSkgeworCQlFWElUX0NPTkdSRUNPVkVSWShDQ1Yo
Y2N2LCB0X2ZsYWdzKSk7CisJCW5ld3Jlbm9fY2NfYWxnby5hY2tfcmVjZWl2ZWQoY2N2LCB0
eXBlKTsKKwkJRU5URVJfQ09OR1JFQ09WRVJZKENDVihjY3YsIHRfZmxhZ3MpKTsKKwl9IGVs
c2UKKwkJbmV3cmVub19jY19hbGdvLmFja19yZWNlaXZlZChjY3YsIHR5cGUpOworCisJLyog
VXBkYXRlcyB0aGUgZnJhY3Rpb24gb2YgbWFya2VkIGJ5dGVzLiAqLworCWlmIChDQ1YoY2N2
LCB0X2ZsYWdzKSAmIFRGX0VDTl9QRVJNSVQpIHsKKworCQlpZiAodHlwZSA9PSBDQ19EVVBB
Q0spCisJCQlieXRlc19hY2tlZCA9IENDVihjY3YsIHRfbWF4c2VnKTsKKworCQlpZiAodHlw
ZSA9PSBDQ19BQ0spCisJCQlieXRlc19hY2tlZCA9IGNjdi0+Ynl0ZXNfdGhpc19hY2s7CisK
KwkJLyogVXBkYXRlIHRvdGFsIGJ5dGVzLiAqLworCQlkY3RjcF9kYXRhLT5ieXRlc190b3Rh
bCArPSBieXRlc19hY2tlZDsKKworCQkvKiBVcGRhdGUgdG90YWwgbWFya2VkIGJ5dGVzLiAq
LworCQlpZiAoZGN0Y3BfZGF0YS0+aXNfZWNlKSB7CisJCQlpZiAoIWRjdGNwX2RhdGEtPmVj
ZV9wcmV2CisJCQkgICAgJiYgYnl0ZXNfYWNrZWQgPiBDQ1YoY2N2LCB0X21heHNlZykpIHsK
KwkJCQlkY3RjcF9kYXRhLT5ieXRlc19lY24gKz0KKwkJCQkgICAgKGJ5dGVzX2Fja2VkIC0g
Q0NWKGNjdiwgdF9tYXhzZWcpKTsKKwkJCX0gZWxzZQorCQkJCWRjdGNwX2RhdGEtPmJ5dGVz
X2VjbiArPSBieXRlc19hY2tlZDsKKwkJCWRjdGNwX2RhdGEtPmVjZV9wcmV2ID0gMTsKKwkJ
fSBlbHNlIHsKKwkJCWlmIChkY3RjcF9kYXRhLT5lY2VfcHJldgorCQkJICAgICYmIGJ5dGVz
X2Fja2VkID4gQ0NWKGNjdiwgdF9tYXhzZWcpKQorCQkJCWRjdGNwX2RhdGEtPmJ5dGVzX2Vj
biArPSBDQ1YoY2N2LCB0X21heHNlZyk7CisJCQlkY3RjcF9kYXRhLT5lY2VfcHJldiA9IDA7
CisJCX0KKwkJZGN0Y3BfZGF0YS0+aXNfZWNlID0gMDsKKworCQkvKgorCQkgKiBVcGRhdGUg
dGhlIGZyYWN0aW9uIG9mIG1hcmtlZCBieXRlcyBhdCB0aGUgZW5kIG9mCisJCSAqIGN1cnJl
bnQgd2luZG93IHNpemUuCisJCSAqLworCQlpZiAoKElOX0ZBU1RSRUNPVkVSWShDQ1YoY2N2
LCB0X2ZsYWdzKSkgJiYKKwkJICAgIFNFUV9HRVEoY2N2LT5jdXJhY2ssIENDVihjY3YsIHNu
ZF9yZWNvdmVyKSkpIHx8CisJCSAgICAoIUlOX0ZBU1RSRUNPVkVSWShDQ1YoY2N2LCB0X2Zs
YWdzKSkgJiYKKwkJICAgIFNFUV9HVChjY3YtPmN1cmFjaywgZGN0Y3BfZGF0YS0+c2F2ZV9z
bmRueHQpKSkKKwkJCWRjdGNwX3VwZGF0ZV9hbHBoYShjY3YpOworCX0KK30KKworc3RhdGlj
IHZvaWQKK2RjdGNwX2FmdGVyX2lkbGUoc3RydWN0IGNjX3ZhciAqY2N2KQoreworCXN0cnVj
dCBkY3RjcCAqZGN0Y3BfZGF0YTsKKworCWRjdGNwX2RhdGEgPSBjY3YtPmNjX2RhdGE7CisK
KwkvKiBJbml0aWFsaXplIGludGVybmFsIHBhcmFtZXRlcnMgYWZ0ZXIgaWRsZSB0aW1lICov
CisJZGN0Y3BfZGF0YS0+Ynl0ZXNfZWNuID0gMDsKKwlkY3RjcF9kYXRhLT5ieXRlc190b3Rh
bCA9IDA7CisJZGN0Y3BfZGF0YS0+c2F2ZV9zbmRueHQgPSBDQ1YoY2N2LCBzbmRfbnh0KTsK
KwlkY3RjcF9kYXRhLT5hbHBoYSA9IDA7CisJZGN0Y3BfZGF0YS0+aXNfZWNlID0gMDsKKwlk
Y3RjcF9kYXRhLT5lY2VfcHJldiA9IDA7CisJZGN0Y3BfZGF0YS0+bnVtX2NvbmdfZXZlbnRz
ID0gMDsKKworCWRjdGNwX2NjX2FsZ28uYWZ0ZXJfaWRsZSA9IG5ld3Jlbm9fY2NfYWxnby5h
ZnRlcl9pZGxlOworfQorCitzdGF0aWMgdm9pZAorZGN0Y3BfY2JfZGVzdHJveShzdHJ1Y3Qg
Y2NfdmFyICpjY3YpCit7CisJaWYgKGNjdi0+Y2NfZGF0YSAhPSBOVUxMKQorCQlmcmVlKGNj
di0+Y2NfZGF0YSwgTV9kY3RjcCk7Cit9CisKK3N0YXRpYyBpbnQKK2RjdGNwX2NiX2luaXQo
c3RydWN0IGNjX3ZhciAqY2N2KQoreworCXN0cnVjdCBkY3RjcCAqZGN0Y3BfZGF0YTsKKwor
CWRjdGNwX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkY3RjcCksIE1fZGN0Y3AsIE1f
Tk9XQUlUfE1fWkVSTyk7CisKKwlpZiAoZGN0Y3BfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4g
KEVOT01FTSk7CisKKwkvKiBJbml0aWFsaXplIHNvbWUga2V5IHZhcmlhYmxlcyB3aXRoIHNl
bnNpYmxlIGRlZmF1bHRzLiAqLworCWRjdGNwX2RhdGEtPmJ5dGVzX2VjbiA9IDA7CisJZGN0
Y3BfZGF0YS0+Ynl0ZXNfdG90YWwgPSAwOworCWRjdGNwX2RhdGEtPmFscGhhID0gMDsKKwlk
Y3RjcF9kYXRhLT5zYXZlX3NuZG54dCA9IDA7CisJZGN0Y3BfZGF0YS0+Y2VfcHJldiA9IDA7
CisJZGN0Y3BfZGF0YS0+aXNfZWNlID0gMDsKKwlkY3RjcF9kYXRhLT5lY2VfcHJldiA9IDA7
CisJZGN0Y3BfZGF0YS0+bnVtX2NvbmdfZXZlbnRzID0gMDsKKworCWNjdi0+Y2NfZGF0YSA9
IGRjdGNwX2RhdGE7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFBlcmZvcm0gYW55IG5l
Y2Vzc2FyeSB0YXNrcyBiZWZvcmUgd2UgZW50ZXIgY29uZ2VzdGlvbiByZWNvdmVyeS4KKyAq
Lworc3RhdGljIHZvaWQKK2RjdGNwX2Nvbmdfc2lnbmFsKHN0cnVjdCBjY192YXIgKmNjdiwg
dWludDMyX3QgdHlwZSkKK3sKKwlzdHJ1Y3QgZGN0Y3AgKmRjdGNwX2RhdGE7CisJdV9pbnQg
d2luLCBtc3M7CisKKwlkY3RjcF9kYXRhID0gY2N2LT5jY19kYXRhOworCXdpbiA9IENDVihj
Y3YsIHNuZF9jd25kKTsKKwltc3MgPSBDQ1YoY2N2LCB0X21heHNlZyk7CisKKwlzd2l0Y2gg
KHR5cGUpIHsKKwljYXNlIENDX05EVVBBQ0s6CisJCWlmICghSU5fRkFTVFJFQ09WRVJZKEND
VihjY3YsIHRfZmxhZ3MpKSkgeworCQkJaWYgKCFJTl9DT05HUkVDT1ZFUlkoQ0NWKGNjdiwg
dF9mbGFncykpKSB7CisJCQkJQ0NWKGNjdiwgc25kX3NzdGhyZXNoKSA9IG1zcyAqCisJCQkJ
ICAgIG1heCh3aW4gLyAyIC8gbXNzLCAyKTsKKwkJCQlkY3RjcF9kYXRhLT5udW1fY29uZ19l
dmVudHMrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyogY3duZCBoYXMgYWxyZWFkeSB1cGRhdGVk
IGFzIGNvbmdlc3Rpb24KKwkJCQkgKiByZWNvdmVyeS4gUmV2ZXJzZSBjd25kIHZhbHVlIHVz
aW5nCisJCQkJICogc25kX2N3bmRfcHJldiBhbmQgcmVjYWxjdWxhdGUgc25kX3NzdGhyZXNo
CisJCQkJICovCisJCQkJd2luID0gQ0NWKGNjdiwgc25kX2N3bmRfcHJldik7CisJCQkJQ0NW
KGNjdiwgc25kX3NzdGhyZXNoKSA9CisJCQkJICAgIG1heCh3aW4gLyAyIC8gbXNzLCAyKSAq
IG1zczsKKwkJCX0KKwkJCUVOVEVSX1JFQ09WRVJZKENDVihjY3YsIHRfZmxhZ3MpKTsKKwkJ
fQorCQlicmVhazsKKwljYXNlIENDX0VDTjoKKwkJLyoKKwkJICogU2F2ZSBjdXJyZW50IHNu
ZF9jd25kIHdoZW4gdGhlIGhvc3QgZW5jb3VudGVycyBib3RoCisJCSAqIGNvbmdlc3Rpb24g
cmVjb3ZlcnkgYW5kIGZhc3QgcmVjb3ZlcnkuCisJCSAqLworCQlDQ1YoY2N2LCBzbmRfY3du
ZF9wcmV2KSA9IHdpbjsKKwkJaWYgKCFJTl9DT05HUkVDT1ZFUlkoQ0NWKGNjdiwgdF9mbGFn
cykpKSB7CisJCQlpZiAoVl9kY3RjcF9zbG93c3RhcnQgJiYKKwkJCSAgICBkY3RjcF9kYXRh
LT5udW1fY29uZ19ldmVudHMrKyA9PSAwKSB7CisJCQkJQ0NWKGNjdiwgc25kX3NzdGhyZXNo
KSA9CisJCQkJICAgIG1zcyAqIG1heCh3aW4gLyAyIC8gbXNzLCAyKTsKKwkJCQlkY3RjcF9k
YXRhLT5hbHBoYSA9IDEwMjQ7CisJCQkJZGN0Y3BfZGF0YS0+Ynl0ZXNfZWNuID0gMDsKKwkJ
CQlkY3RjcF9kYXRhLT5ieXRlc190b3RhbCA9IDA7CisJCQkJZGN0Y3BfZGF0YS0+c2F2ZV9z
bmRueHQgPSBDQ1YoY2N2LCBzbmRfbnh0KTsKKwkJCX0gZWxzZQorCQkJCUNDVihjY3YsIHNu
ZF9zc3RocmVzaCkgPSBtYXgoKHdpbiAtICgod2luICoKKwkJCQkgICAgZGN0Y3BfZGF0YS0+
YWxwaGEpID4+IDExKSkgLyBtc3MsIDIpICogbXNzOworCQkJQ0NWKGNjdiwgc25kX2N3bmQp
ID0gQ0NWKGNjdiwgc25kX3NzdGhyZXNoKTsKKwkJCUVOVEVSX0NPTkdSRUNPVkVSWShDQ1Yo
Y2N2LCB0X2ZsYWdzKSk7CisJCX0KKwkJZGN0Y3BfZGF0YS0+aXNfZWNlID0gMTsKKwkJYnJl
YWs7CisJY2FzZSBDQ19SVE86CisJCWlmIChDQ1YoY2N2LCB0X2ZsYWdzKSAmIFRGX0VDTl9Q
RVJNSVQpIHsKKwkJCUNDVihjY3YsIHRfZmxhZ3MpIHw9IFRGX0VDTl9TTkRfQ1dSOworCQkJ
ZGN0Y3BfdXBkYXRlX2FscGhhKGNjdik7CisJCQlkY3RjcF9kYXRhLT5zYXZlX3NuZG54dCAr
PSBDQ1YoY2N2LCB0X21heHNlZyk7CisJCQlkY3RjcF9kYXRhLT5udW1fY29uZ19ldmVudHMr
KzsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkY3RjcF9jb25uX2lu
aXQoc3RydWN0IGNjX3ZhciAqY2N2KQoreworCXN0cnVjdCBkY3RjcCAqZGN0Y3BfZGF0YTsK
KworCWRjdGNwX2RhdGEgPSBjY3YtPmNjX2RhdGE7CisKKwlpZiAoQ0NWKGNjdiwgdF9mbGFn
cykgJiBURl9FQ05fUEVSTUlUKQorCQlkY3RjcF9kYXRhLT5zYXZlX3NuZG54dCA9IENDVihj
Y3YsIHNuZF9ueHQpOworfQorCisvKgorICogUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHRhc2tz
IGJlZm9yZSB3ZSBleGl0IGNvbmdlc3Rpb24gcmVjb3ZlcnkuCisgKi8KK3N0YXRpYyB2b2lk
CitkY3RjcF9wb3N0X3JlY292ZXJ5KHN0cnVjdCBjY192YXIgKmNjdikKK3sKKwlkY3RjcF9j
Y19hbGdvLnBvc3RfcmVjb3ZlcnkgPSBuZXdyZW5vX2NjX2FsZ28ucG9zdF9yZWNvdmVyeTsK
KworCWlmIChDQ1YoY2N2LCB0X2ZsYWdzKSAmIFRGX0VDTl9QRVJNSVQpCisJCWRjdGNwX3Vw
ZGF0ZV9hbHBoYShjY3YpOworfQorCitzdGF0aWMgaW50CitkY3RjcF9lY25wa3RfaGFuZGxl
cihzdHJ1Y3QgY2NfdmFyICpjY3YsIHVpbnQ4X3QgaXB0b3MsIGludCBjd3IsIGludCBpc19k
ZWxheWFjaykKK3sKKwlzdHJ1Y3QgZGN0Y3AgKmRjdGNwX2RhdGE7CisJaW50IHJldCA9IDA7
CisKKwlkY3RjcF9kYXRhID0gY2N2LT5jY19kYXRhOworCS8qCisJICogRENUQ1AgcmVzcG9u
c2VzIGFuIEFDSyBpbW1lZGlhdGVseQorCSAqIC0gd2hlbiB0aGUgQ0Ugc3RhdGUgaW4gYmV0
d2VlbiB0aGlzIHNlZ21lbnQKKwkgKiAgIGFuZCB0aGUgbGFzdCBzZWdtZW50IGlzIG5vdCBz
YW1lCisJICogLSB3aGVuIHRoaXMgc2VnbWVudCBzZXRzIHRoZSBDV1IgZmxhZworCSAqLwor
CXN3aXRjaCAoaXB0b3MgJiBJUFRPU19FQ05fTUFTSykgeworCWNhc2UgSVBUT1NfRUNOX0NF
OgorCQlpZiAoIWRjdGNwX2RhdGEtPmNlX3ByZXYgJiYgaXNfZGVsYXlhY2spCisJCQlyZXQg
PSAxOworCQlkY3RjcF9kYXRhLT5jZV9wcmV2ID0gMTsKKwkJQ0NWKGNjdiwgdF9mbGFncykg
fD0gVEZfRUNOX1NORF9FQ0U7CisJCWJyZWFrOworCWNhc2UgSVBUT1NfRUNOX0VDVDA6CisJ
CWlmIChkY3RjcF9kYXRhLT5jZV9wcmV2ICYmIGlzX2RlbGF5YWNrKQorCQkJcmV0ID0gMTsK
KwkJQ0NWKGNjdiwgdF9mbGFncykgJj0gflRGX0VDTl9TTkRfRUNFOworCQlkY3RjcF9kYXRh
LT5jZV9wcmV2ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJUFRPU19FQ05fRUNUMToKKwkJaWYg
KGRjdGNwX2RhdGEtPmNlX3ByZXYgJiYgaXNfZGVsYXlhY2spCisJCQlyZXQgPSAxOworCQlD
Q1YoY2N2LCB0X2ZsYWdzKSAmPSB+VEZfRUNOX1NORF9FQ0U7CisJCWRjdGNwX2RhdGEtPmNl
X3ByZXYgPSAwOworCQlicmVhazsKKwl9CisJaWYgKGN3ciAmJiBpc19kZWxheWFjaykKKwkJ
cmV0ID0gMDsKKworCXJldHVybiAocmV0KTsKK30KKworc3RhdGljIGludAorZGN0Y3BfZWN0
aGFuZGxlcihzdHJ1Y3QgY2NfdmFyICpjY3YpCit7CisJLyogRENUQ1AgYWx3YXlzIG1hcmtz
IEVDVCAqLworCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGZyYWN0aW9u
IG9mIG1hcmtlZCBieXRlcyBuYW1lZCBhbHBoYS4gVGhlbiwgaW5pdGlhbGl6ZQorICogc2V2
ZXJhbCBpbnRlcm5hbCBwYXJhbWV0ZXJzIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4K
KyAqLworc3RhdGljIHZvaWQKK2RjdGNwX3VwZGF0ZV9hbHBoYShzdHJ1Y3QgY2NfdmFyICpj
Y3YpCit7CisJc3RydWN0IGRjdGNwICpkY3RjcF9kYXRhOworCWludCBhbHBoYV9wcmV2Owor
CisJZGN0Y3BfZGF0YSA9IGNjdi0+Y2NfZGF0YTsKKworCWFscGhhX3ByZXYgPSBkY3RjcF9k
YXRhLT5hbHBoYTsKKworCWRjdGNwX2RhdGEtPmJ5dGVzX3RvdGFsID0gbWF4KGRjdGNwX2Rh
dGEtPmJ5dGVzX3RvdGFsLCAxKTsKKworCS8qCisJICogVXBkYXRlIGFscGhhOiBhbHBoYSA9
ICgxIC0gZykgKiBhbHBoYSArIGcgKiBGLgorCSAqIEFscGhhIG11c3QgYmUgcm91bmQgdG8g
MCAtIDEwMjQuCisJICogWFhYTUlET1JJIElzIG1vcmUgZmluZS1ncmFpbmVkIGFscGhhIG5l
Y2Vzc2FyeT8KKwkgKi8KKwlkY3RjcF9kYXRhLT5hbHBoYSA9IG1pbihhbHBoYV9wcmV2IC0g
KGFscGhhX3ByZXYgPj4gVl9kY3RjcF9zaGlmdF9nKSArCisJICAgIChkY3RjcF9kYXRhLT5i
eXRlc19lY24gPDwgKDEwIC0gVl9kY3RjcF9zaGlmdF9nKSkgLworCSAgICBkY3RjcF9kYXRh
LT5ieXRlc190b3RhbCwgMTAyNCk7CisKKwkvKiBJbml0aWFsaXplIGludGVybmFsIHBhcmFt
ZXRlcnMgZm9yIG5leHQgYWxwaGEgY2FsY3VsYXRpb24gKi8KKwlkY3RjcF9kYXRhLT5ieXRl
c19lY24gPSAwOworCWRjdGNwX2RhdGEtPmJ5dGVzX3RvdGFsID0gMDsKKwlkY3RjcF9kYXRh
LT5zYXZlX3NuZG54dCA9IENDVihjY3YsIHNuZF9ueHQpOworfQorCitzdGF0aWMgaW50Citk
Y3RjcF9zaGlmdF9nX2hhbmRsZXIoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgZXJy
b3I7CisJdWludDMyX3QgbmV3OworCisJbmV3ID0gVl9kY3RjcF9zaGlmdF9nIDsKKwllcnJv
ciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CisJaWYgKGVycm9y
ID09IDAgJiYgcmVxLT5uZXdwdHIgIT0gTlVMTCkgeworCQlpZiAoQ0FTVF9QVFJfSU5UKHJl
cS0+bmV3cHRyKSA+IDEpCisJCQllcnJvciA9IEVJTlZBTDsKKwkJZWxzZQorCQkJVl9kY3Rj
cF9zaGlmdF9nID0gbmV3OworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMg
aW50CitkY3RjcF9zbG93c3RhcnRfaGFuZGxlcihTWVNDVExfSEFORExFUl9BUkdTKQorewor
CWludCBlcnJvcjsKKwl1aW50MzJfdCBuZXc7CisKKwluZXcgPSBWX2RjdGNwX3Nsb3dzdGFy
dDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CisJ
aWYgKGVycm9yID09IDAgJiYgcmVxLT5uZXdwdHIgIT0gTlVMTCkgeworCQlpZiAoQ0FTVF9Q
VFJfSU5UKHJlcS0+bmV3cHRyKSA+IDEpCisJCQllcnJvciA9IEVJTlZBTDsKKwkJZWxzZQor
CQkJVl9kY3RjcF9zbG93c3RhcnQgPSBuZXc7CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9
CisKK1NZU0NUTF9ERUNMKF9uZXRfaW5ldF90Y3BfY2NfZGN0Y3ApOworU1lTQ1RMX05PREUo
X25ldF9pbmV0X3RjcF9jYywgT0lEX0FVVE8sIGRjdGNwLCBDVExGTEFHX1JXLCBOVUxMLAor
ICAgICJkY3RjcCBjb25nZXN0aW9uIGNvbnRyb2wgcmVsYXRlZCBzZXR0aW5ncyIpOworCitT
WVNDVExfVk5FVF9QUk9DKF9uZXRfaW5ldF90Y3BfY2NfZGN0Y3AsIE9JRF9BVVRPLCBzaGlm
dF9nLAorICAgIENUTFRZUEVfVUlOVHxDVExGTEFHX1JXLCAmVk5FVF9OQU1FKGRjdGNwX3No
aWZ0X2cpLCA0LAorICAgICZkY3RjcF9zaGlmdF9nX2hhbmRsZXIsCisgICAgIklVIiwgImRj
dGNwIHNoaWZ0IHBhcmFtZXRlciIpOworCitTWVNDVExfVk5FVF9QUk9DKF9uZXRfaW5ldF90
Y3BfY2NfZGN0Y3AsIE9JRF9BVVRPLCBzbG93c3RhcnQsCisgICAgQ1RMVFlQRV9VSU5UfENU
TEZMQUdfUlcsICZWTkVUX05BTUUoZGN0Y3Bfc2xvd3N0YXJ0KSwgMCwKKyAgICAmZGN0Y3Bf
c2xvd3N0YXJ0X2hhbmRsZXIsCisgICAgIklVIiwgImhhbGYgQ1dORCByZWR1Y3Rpb24gYWZ0
ZXIgdGhlIGZpcnN0IHNsb3cgc3RhcnQiKTsKKworREVDTEFSRV9DQ19NT0RVTEUoZGN0Y3As
ICZkY3RjcF9jY19hbGdvKTsKZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF9pbnB1dC5j
IGIvc3lzL25ldGluZXQvdGNwX2lucHV0LmMKaW5kZXggMjBjMjJlZC4uMjgyMjI0OCAxMDA2
NDQKLS0tIGEvc3lzL25ldGluZXQvdGNwX2lucHV0LmMKKysrIGIvc3lzL25ldGluZXQvdGNw
X2lucHV0LmMKQEAgLTQ1NSw2ICs0NTUsMzIgQEAgY2NfcG9zdF9yZWNvdmVyeShzdHJ1Y3Qg
dGNwY2IgKnRwLCBzdHJ1Y3QgdGNwaGRyICp0aCkKIAl0cC0+dF9ieXRlc19hY2tlZCA9IDA7
CiB9CiAKKy8qCisgKiBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgYWNrIHNob3VsZCBiZSBkZWxh
eWVkLiAgV2UgY2FuIGRlbGF5IHRoZSBhY2sgaWYKKyAqCS0gdGhlcmUgaXMgbm8gZGVsYXll
ZCBhY2sgdGltZXIgaW4gcHJvZ3Jlc3MgYW5kCisgKgktIG91ciBsYXN0IGFjayB3YXNuJ3Qg
YSAwLXNpemVkIHdpbmRvdy4gIFdlIG5ldmVyIHdhbnQgdG8gZGVsYXkKKyAqCSAgdGhlIGFj
ayB0aGF0IG9wZW5zIHVwIGEgMC1zaXplZCB3aW5kb3cgYW5kCisgKgkJLSBkZWxheWVkIGFj
a3MgYXJlIGVuYWJsZWQgb3IKKyAqCQktIHRoaXMgaXMgYSBoYWxmLXN5bmNocm9uaXplZCBU
L1RDUCBjb25uZWN0aW9uLgorICovCisjZGVmaW5lIERFTEFZX0FDSyh0cCkJCQkJCQkJXAor
CSgoIXRjcF90aW1lcl9hY3RpdmUodHAsIFRUX0RFTEFDSykgJiYJCQkJXAorCSAgICAodHAt
PnRfZmxhZ3MgJiBURl9SWFdJTjBTRU5UKSA9PSAwKSAmJgkJCVwKKwkgICAgKFZfdGNwX2Rl
bGFja19lbmFibGVkIHx8ICh0cC0+dF9mbGFncyAmIFRGX05FRURTWU4pKSkKKworc3RhdGlj
IHZvaWQgaW5saW5lCitjY19lY25wa3RfaGFuZGxlcihzdHJ1Y3QgdGNwY2IgKnRwLCBzdHJ1
Y3QgdGNwaGRyICp0aCwgdWludDhfdCBpcHRvcykKK3sKKwlJTlBfV0xPQ0tfQVNTRVJUKHRw
LT50X2lucGNiKTsKKworCWlmIChDQ19BTEdPKHRwKS0+ZWNucGt0X2hhbmRsZXIgIT0gTlVM
TCkgeworCQlpZiAoQ0NfQUxHTyh0cCktPmVjbnBrdF9oYW5kbGVyKHRwLT5jY3YsIGlwdG9z
LAorCQkgICAgKHRoLT50aF9mbGFncyAmIFRIX0NXUiksIERFTEFZX0FDSyh0cCkpKSB7CisJ
CQl0Y3BfdGltZXJfYWN0aXZhdGUodHAsIFRUX0RFTEFDSywgdGNwX2RlbGFja3RpbWUpOwor
CQl9CisJfQorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIHRjcF9maWVsZHNfdG9faG9zdChz
dHJ1Y3QgdGNwaGRyICp0aCkKIHsKQEAgLTUwMiwxOSArNTI4LDYgQEAgZG8geyBcCiAjZW5k
aWYKIAogLyoKLSAqIEluZGljYXRlIHdoZXRoZXIgdGhpcyBhY2sgc2hvdWxkIGJlIGRlbGF5
ZWQuICBXZSBjYW4gZGVsYXkgdGhlIGFjayBpZgotICoJLSB0aGVyZSBpcyBubyBkZWxheWVk
IGFjayB0aW1lciBpbiBwcm9ncmVzcyBhbmQKLSAqCS0gb3VyIGxhc3QgYWNrIHdhc24ndCBh
IDAtc2l6ZWQgd2luZG93LiAgV2UgbmV2ZXIgd2FudCB0byBkZWxheQotICoJICB0aGUgYWNr
IHRoYXQgb3BlbnMgdXAgYSAwLXNpemVkIHdpbmRvdyBhbmQKLSAqCQktIGRlbGF5ZWQgYWNr
cyBhcmUgZW5hYmxlZCBvcgotICoJCS0gdGhpcyBpcyBhIGhhbGYtc3luY2hyb25pemVkIFQv
VENQIGNvbm5lY3Rpb24uCi0gKi8KLSNkZWZpbmUgREVMQVlfQUNLKHRwKQkJCQkJCQlcCi0J
KCghdGNwX3RpbWVyX2FjdGl2ZSh0cCwgVFRfREVMQUNLKSAmJgkJCQlcCi0JICAgICh0cC0+
dF9mbGFncyAmIFRGX1JYV0lOMFNFTlQpID09IDApICYmCQkJXAotCSAgICAoVl90Y3BfZGVs
YWNrX2VuYWJsZWQgfHwgKHRwLT50X2ZsYWdzICYgVEZfTkVFRFNZTikpKQotCi0vKgogICog
VENQIGlucHV0IGhhbmRsaW5nIGlzIHNwbGl0IGludG8gbXVsdGlwbGUgcGFydHM6CiAgKiAg
IHRjcDZfaW5wdXQgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHRjcF9pbnB1dCBmb3IgdGhl
IGV4dGVuZGVkCiAgKglpcDZfcHJvdG94W10gY2FsbCBmb3JtYXQgaW4gaXA2X2lucHV0CkBA
IC0xNTM5LDYgKzE1NTIsMTAgQEAgdGNwX2RvX3NlZ21lbnQoc3RydWN0IG1idWYgKm0sIHN0
cnVjdCB0Y3BoZHIgKnRoLCBzdHJ1Y3Qgc29ja2V0ICpzbywKIAkJCVRDUFNUQVRfSU5DKHRj
cHNfZWNuX2VjdDEpOwogCQkJYnJlYWs7CiAJCX0KKworCQkvKiBQcm9jZXNzIGEgcGFja2V0
IGRpZmZlcmVudGx5IGZyb20gUkZDMzE2OC4gKi8KKwkJY2NfZWNucGt0X2hhbmRsZXIodHAs
IHRoLCBpcHRvcyk7CisKIAkJLyogQ29uZ2VzdGlvbiBleHBlcmllbmNlZC4gKi8KIAkJaWYg
KHRoZmxhZ3MgJiBUSF9FQ0UpIHsKIAkJCWNjX2Nvbmdfc2lnbmFsKHRwLCB0aCwgQ0NfRUNO
KTsKZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyBiL3N5cy9uZXRpbmV0
L3RjcF9vdXRwdXQuYwppbmRleCAwMGQ1NDE1Li4zMGU5YjE5IDEwMDY0NAotLS0gYS9zeXMv
bmV0aW5ldC90Y3Bfb3V0cHV0LmMKKysrIGIvc3lzL25ldGluZXQvdGNwX291dHB1dC5jCkBA
IC0xNjIsNiArMTYyLDE4IEBAIGNjX2FmdGVyX2lkbGUoc3RydWN0IHRjcGNiICp0cCkKIAkJ
Q0NfQUxHTyh0cCktPmFmdGVyX2lkbGUodHAtPmNjdik7CiB9CiAKK3N0YXRpYyBpbnQgaW5s
aW5lCitjY19lY3RfaGFuZGxlcihzdHJ1Y3QgdGNwY2IgKnRwKQoreworCUlOUF9XTE9DS19B
U1NFUlQodHAtPnRfaW5wY2IpOworCisJaWYgKENDX0FMR08odHApLT5lY3RfaGFuZGxlciAh
PSBOVUxMKSB7CisJCWlmIChDQ19BTEdPKHRwKS0+ZWN0X2hhbmRsZXIodHAtPmNjdikpCisJ
CQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCiAvKgogICogVGNwIG91dHB1
dCByb3V0aW5lOiBmaWd1cmUgb3V0IHdoYXQgc2hvdWxkIGJlIHNlbnQgYW5kIHNlbmQgaXQu
CiAgKi8KQEAgLTk2Niw5ICs5NzgsMTUgQEAgc2VuZDoKIAkJICogSWYgdGhlIHBlZXIgaGFz
IEVDTiwgbWFyayBkYXRhIHBhY2tldHMgd2l0aAogCQkgKiBFQ04gY2FwYWJsZSB0cmFuc21p
c3Npb24gKEVDVCkuCiAJCSAqIElnbm9yZSBwdXJlIGFjayBwYWNrZXRzLCByZXRyYW5zbWlz
c2lvbnMgYW5kIHdpbmRvdyBwcm9iZXMuCisJCSAqIE1hcmsgZGF0YSBwYWNrZXQgd2l0aCBF
Q04gY2FwYWJsZSB0cmFuc21pc3Npb24gKEVDVCkKKwkJICogd2hlbiBDQ19BTEdPIG1lZXRz
IHNwZWNpZmljIGNvbmRpdGlvbi4KKwkJICogT3IsIGlmIHRoZSBwZWVyIGhhcyBFQ04sIG1h
cmsgZGF0YSBwYWNrZXRzIHdpdGggRUNUCisJCSAqIChSRkMgMzE2OCkuIElnbm9yZSBwdXJl
IGFjayBwYWNrZXRzLCByZXRyYW5zbWlzc2lvbnMKKwkJICogYW5kIHdpbmRvdyBwcm9iZXMu
CiAJCSAqLwotCQlpZiAobGVuID4gMCAmJiBTRVFfR0VRKHRwLT5zbmRfbnh0LCB0cC0+c25k
X21heCkgJiYKLQkJICAgICEoKHRwLT50X2ZsYWdzICYgVEZfRk9SQ0VEQVRBKSAmJiBsZW4g
PT0gMSkpIHsKKwkJaW50IG1hcmtfZWN0ID0gY2NfZWN0X2hhbmRsZXIodHApOworCQlpZiAo
bWFya19lY3QgfHwgKGxlbiA+IDAgJiYgU0VRX0dFUSh0cC0+c25kX254dCwgdHAtPnNuZF9t
YXgpCisJCSAgICAmJiAhKCh0cC0+dF9mbGFncyAmIFRGX0ZPUkNFREFUQSkgJiYgbGVuID09
IDEpKSkgewogI2lmZGVmIElORVQ2CiAJCQlpZiAoaXNpcHY2KQogCQkJCWlwNi0+aXA2X2Zs
b3cgfD0gaHRvbmwoSVBUT1NfRUNOX0VDVDAgPDwgMjApOwo=
--------------030401080100030902090403--



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