From owner-freebsd-net@FreeBSD.ORG Mon Mar 31 05:37:12 2014 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B2CF5B4B for ; Mon, 31 Mar 2014 05:37:12 +0000 (UTC) Received: from mail.sfc.wide.ad.jp (ns.sfc.wide.ad.jp [IPv6:2001:200:0:8803:203:178:142:143]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3EEE5AE9 for ; Mon, 31 Mar 2014 05:37:12 +0000 (UTC) Received: from Midoris-MacBook-Air.local (pdf8584bf.tokynt01.ap.so-net.ne.jp [223.133.132.191]) by mail.sfc.wide.ad.jp (Postfix) with ESMTPSA id 98005278141; Mon, 31 Mar 2014 14:37:09 +0900 (JST) Message-ID: <5338FF05.1020302@sfc.wide.ad.jp> Date: Mon, 31 Mar 2014 14:37:09 +0900 From: Midori Kato User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: net@freebsd.org Subject: DCTCP implementation Content-Type: multipart/mixed; boundary="------------030401080100030902090403" Cc: "Eggert, Lars" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Mar 2014 05:37:12 -0000 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--