From owner-cvs-all@FreeBSD.ORG Wed Oct 1 15:14:27 2003 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6738D16A4B3; Wed, 1 Oct 2003 15:14:27 -0700 (PDT) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5675F43FEC; Wed, 1 Oct 2003 15:14:26 -0700 (PDT) (envelope-from robert@fledge.watson.org) Received: from fledge.watson.org (localhost [127.0.0.1]) by fledge.watson.org (8.12.9p2/8.12.9) with ESMTP id h91MDm7R019212; Wed, 1 Oct 2003 18:13:48 -0400 (EDT) (envelope-from robert@fledge.watson.org) Received: from localhost (robert@localhost)h91MDmoZ019209; Wed, 1 Oct 2003 18:13:48 -0400 (EDT) (envelope-from robert@fledge.watson.org) Date: Wed, 1 Oct 2003 18:13:48 -0400 (EDT) From: Robert Watson X-Sender: robert@fledge.watson.org To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org In-Reply-To: <200310012131.h91LV9fd042464@repoman.freebsd.org> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1999649479-1065046428=:16031" Subject: Re: cvs commit: src/sys/net netisr.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Oct 2003 22:14:27 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1999649479-1065046428=:16031 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 1 Oct 2003, Robert Watson wrote: > Enable net.isr.enable by default, causing "delivery to completion" > (direct dispatch) in interrupt threads when the netisr in question > isn't already active. If a netisr is already active, or direct > dispatch is already in progress, we queue the packet for later > delivery. Previously, this option was disabled by default. I have > measured 20%+ performance improvements in IP packet forwarding with > this enabled. > > Please report any problems ASAP, especially relating to stack depth or > out-of-order packet processing. > > Discussed with: jlemon, peter > Sponsored by: DARPA, Network Associates Laboratories FYI: In my e-mail communication with Jonathan, we concluded this was safe to commit. Since then, two concerns have come up: (1) Potential lock order interactions. I believe these are OK given the current model of dropping the driver lock before entering the interface input routines. However, since the ground doesn't appear to be firm here quite yet... (2) Potential out-of-order delivery if a packet is delayed and ends up in the netisr queue, and is bypassed by a following packet which is delivered first by virtue of direct dispatch, which can have negative consequences for TCP in lossy situations if the timing is poor. I've attached two patches: one that simply defers the dispatch again if there's the potential for reordering. The other drains the netisr queue before processing the new mbuf. Both have potential downsides, and neither is tested. (I'll do that when I get home this evening), but I'm virtually in transit as I write this :-). I'm going to back out this change for now, but would like to merge it again once we're sure any potential issues have been resolved. In the mean time, I think it would be very useful if people interested in network performance could run with net.isr.enable enabled, and pick zero or one of the patches to apply. This evening I'll run lossy TCP performance measurements with a packet sniffer and timing tweaks, and see what I bump into. I'm hopeful we can enable this by default shortly, as the performance benefit is substantial. Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Network Associates Laboratories --0-1999649479-1065046428=:16031 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="netisr.c.defer" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: SW5kZXg6IG5ldGlzci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldC9uZXRpc3IuYyx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNA0KZGlmZiAtdSAtcjEuNCBuZXRpc3IuYw0K LS0tIG5ldGlzci5jCTEgT2N0IDIwMDMgMjE6MzE6MDkgLTAwMDAJMS40DQor KysgbmV0aXNyLmMJMSBPY3QgMjAwMyAyMjoxMTowNCAtMDAwMA0KQEAgLTEx OCw4ICsxMTgsNiBAQA0KICAgICAmaXNyc3RhdC5pc3JzX2RpcmVjdGVkLCAw LCAiIik7DQogU1lTQ1RMX0lOVChfbmV0X2lzciwgT0lEX0FVVE8sIGRlZmVy cmVkLCBDVExGTEFHX1JELCANCiAgICAgJmlzcnN0YXQuaXNyc19kZWZlcnJl ZCwgMCwgIiIpOw0KLVNZU0NUTF9JTlQoX25ldF9pc3IsIE9JRF9BVVRPLCBi eXBhc3NlZCwgQ1RMRkxBR19SRCwgDQotICAgICZpc3JzdGF0LmlzcnNfYnlw YXNzZWQsIDAsICIiKTsNCiBTWVNDVExfSU5UKF9uZXRfaXNyLCBPSURfQVVU TywgcXVldWVkLCBDVExGTEFHX1JELCANCiAgICAgJmlzcnN0YXQuaXNyc19x dWV1ZWQsIDAsICIiKTsNCiBTWVNDVExfSU5UKF9uZXRfaXNyLCBPSURfQVVU Tywgc3dpX2NvdW50LCBDVExGTEFHX1JELCANCkBAIC0xNDEsNyArMTM5LDgg QEANCiBuZXRpc3JfZGlzcGF0Y2goaW50IG51bSwgc3RydWN0IG1idWYgKm0p DQogew0KIAlzdHJ1Y3QgbmV0aXNyICpuaTsNCi0JDQorCWludCBkZWZlcjsN CisNCiAJaXNyc3RhdC5pc3JzX2NvdW50Kys7DQogCUtBU1NFUlQoIShudW0g PCAwIHx8IG51bSA+PSAoc2l6ZW9mKG5ldGlzcnMpL3NpemVvZigqbmV0aXNy cykpKSwNCiAJICAgICgiYmFkIGlzciAlZCIsIG51bSkpOw0KQEAgLTE1MSw3 ICsxNTAsNiBAQA0KIAkJcmV0dXJuOw0KIAl9DQogCWlmIChuZXRpc3JfZW5h YmxlICYmIG10eF90cnlsb2NrKCZuZXRpc3JfbXR4KSkgew0KLQkJaXNyc3Rh dC5pc3JzX2RpcmVjdGVkKys7DQogCQkvKg0KIAkJICogT25lIHNsaWdodCBw cm9ibGVtIGhlcmUgaXMgdGhhdCBwYWNrZXRzIG1pZ2h0IGJ5cGFzcw0KIAkJ ICogZWFjaCBvdGhlciBpbiB0aGUgc3RhY2ssIGlmIGFuIGVhcmxpZXIgb25l IGhhcHBlbmVkDQpAQCAtMTYyLDEyICsxNjAsMjAgQEANCiAJCSAqCWIuIGZh bGxiYWNrIHRvIHF1ZXVlaW5nIHRoZSBwYWNrZXQsDQogCQkgKgljLiBzd2Vl cCB0aGUgaXNzdWUgdW5kZXIgdGhlIHJ1ZyBhbmQgaWdub3JlIGl0Lg0KIAkJ ICoNCi0JCSAqIEN1cnJlbnRseSwgd2UgZG8gYyksIGFuZCBrZWVwIGEgcm91 Z2ggZXZlbnQgY291bnRlci4NCisJCSAqIEN1cnJlbnRseSwgd2UgZG8gYiks IGF0IHRoZSBjb3N0IG9mIGhhdmluZyBncmFiYmVkIGENCisJCSAqIG11dGV4 IG9uZSBhZGRpdGlvbmFsIHRpbWUuDQogCQkgKi8NCi0JCWlmIChfSUZfUUxF TihuaS0+bmlfcXVldWUpID4gMCkNCi0JCQlpc3JzdGF0LmlzcnNfYnlwYXNz ZWQrKzsNCi0JCW5pLT5uaV9oYW5kbGVyKG0pOw0KKwkJZGVmZXIgPSAwOw0K KwkJaWYgKF9JRl9RTEVOKG5pLT5uaV9xdWV1ZSkgPiAwKSB7DQorCQkJaXNy c3RhdC5pc3JzX2RlZmVycmVkKys7DQorCQkJZGVmZXIgPSAxOw0KKwkJfSBl bHNlIHsNCisJCQlpc3JzdGF0LmlzcnNfZGlyZWN0ZWQrKzsNCisJCQluaS0+ bmlfaGFuZGxlcihtKTsNCisJCX0NCiAJCW10eF91bmxvY2soJm5ldGlzcl9t dHgpOw0KKwkJaWYgKGRlZmVyICYmIElGX0hBTkRPRkYobmktPm5pX3F1ZXVl LCBtLCBOVUxMKSkNCisJCQlzY2hlZG5ldGlzcihudW0pOw0KIAl9IGVsc2Ug ew0KIAkJaXNyc3RhdC5pc3JzX2RlZmVycmVkKys7DQogCQlpZiAoSUZfSEFO RE9GRihuaS0+bmlfcXVldWUsIG0sIE5VTEwpKQ0K --0-1999649479-1065046428=:16031 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="netisr.c.process" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: LyotDQogKiBDb3B5cmlnaHQgKGMpIDIwMDEsMjAwMiwyMDAzIEpvbmF0aGFu IExlbW9uIDxqbGVtb25ARnJlZUJTRC5vcmc+DQogKiBDb3B5cmlnaHQgKGMp IDE5OTcsIFN0ZWZhbiBFc3NlciA8c2VAZnJlZWJzZC5vcmc+DQogKiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4N CiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0K ICoNCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCiAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQ0KICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UNCiAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQogKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCiAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkNCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YNCiAqIFNVQ0ggREFNQUdFLg0KICoNCiAqICRGcmVlQlNEOiBzcmMvc3lz L25ldC9uZXRpc3IuYyx2IDEuNCAyMDAzLzEwLzAxIDIxOjMxOjA5IHJ3YXRz b24gRXhwICQNCiAqLw0KDQojaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQojaW5j bHVkZSA8c3lzL2J1cy5oPg0KI2luY2x1ZGUgPHN5cy9ydHByaW8uaD4NCiNp bmNsdWRlIDxzeXMvc3lzdG0uaD4NCiNpbmNsdWRlIDxzeXMvaW50ZXJydXB0 Lmg+DQojaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KI2luY2x1ZGUgPHN5cy9r dGhyZWFkLmg+DQojaW5jbHVkZSA8c3lzL2xvY2suaD4NCiNpbmNsdWRlIDxz eXMvbWFsbG9jLmg+DQojaW5jbHVkZSA8c3lzL3Byb2MuaD4NCiNpbmNsdWRl IDxzeXMvcmFuZG9tLmg+DQojaW5jbHVkZSA8c3lzL3Jlc291cmNldmFyLmg+ DQojaW5jbHVkZSA8c3lzL3N5c2N0bC5oPg0KI2luY2x1ZGUgPHN5cy91bmlz dGQuaD4NCiNpbmNsdWRlIDxtYWNoaW5lL2F0b21pYy5oPg0KI2luY2x1ZGUg PG1hY2hpbmUvY3B1Lmg+DQojaW5jbHVkZSA8bWFjaGluZS9zdGRhcmcuaD4N Cg0KI2luY2x1ZGUgPHN5cy9tYnVmLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tl dC5oPg0KDQojaW5jbHVkZSA8bmV0L2lmLmg+DQojaW5jbHVkZSA8bmV0L2lm X3R5cGVzLmg+DQojaW5jbHVkZSA8bmV0L2lmX3Zhci5oPg0KI2luY2x1ZGUg PG5ldC9uZXRpc3IuaD4NCg0Kdm9sYXRpbGUgdW5zaWduZWQgaW50CW5ldGlz cjsJLyogc2NoZWR1bGluZyBiaXRzIGZvciBuZXR3b3JrICovDQoNCnN0cnVj dCBuZXRpc3Igew0KCW5ldGlzcl90CSpuaV9oYW5kbGVyOw0KCXN0cnVjdCBp ZnF1ZXVlCSpuaV9xdWV1ZTsNCn0gbmV0aXNyc1szMl07DQoNCnN0YXRpYyBz dHJ1Y3QgbXR4IG5ldGlzcl9tdHg7DQpzdGF0aWMgdm9pZCAqbmV0X2loOw0K DQpzdGF0aWMgdm9pZAlzd2lfcHJvY2Vzc3F1ZXVlKHN0cnVjdCBuZXRpc3Ig Km5pKTsNCg0Kdm9pZA0KbGVnYWN5X3NldHNvZnRuZXQodm9pZCkNCnsNCglz d2lfc2NoZWQobmV0X2loLCAwKTsNCn0NCg0Kdm9pZA0KbmV0aXNyX3JlZ2lz dGVyKGludCBudW0sIG5ldGlzcl90ICpoYW5kbGVyLCBzdHJ1Y3QgaWZxdWV1 ZSAqaW5xKQ0Kew0KCQ0KCUtBU1NFUlQoIShudW0gPCAwIHx8IG51bSA+PSAo c2l6ZW9mKG5ldGlzcnMpL3NpemVvZigqbmV0aXNycykpKSwNCgkgICAgKCJi YWQgaXNyICVkIiwgbnVtKSk7DQoJbmV0aXNyc1tudW1dLm5pX2hhbmRsZXIg PSBoYW5kbGVyOw0KCW5ldGlzcnNbbnVtXS5uaV9xdWV1ZSA9IGlucTsNCn0N Cg0Kdm9pZA0KbmV0aXNyX3VucmVnaXN0ZXIoaW50IG51bSkNCnsNCglzdHJ1 Y3QgbmV0aXNyICpuaTsNCglpbnQgczsNCgkNCglLQVNTRVJUKCEobnVtIDwg MCB8fCBudW0gPj0gKHNpemVvZihuZXRpc3JzKS9zaXplb2YoKm5ldGlzcnMp KSksDQoJICAgICgiYmFkIGlzciAlZCIsIG51bSkpOw0KCW5pID0gJm5ldGlz cnNbbnVtXTsNCgluaS0+bmlfaGFuZGxlciA9IE5VTEw7DQoJaWYgKG5pLT5u aV9xdWV1ZSAhPSBOVUxMKSB7DQoJCXMgPSBzcGxpbXAoKTsNCgkJSUZfRFJB SU4obmktPm5pX3F1ZXVlKTsNCgkJc3BseChzKTsNCgl9DQp9DQoNCnN0cnVj dCBpc3JzdGF0IHsNCglpbnQJaXNyc19jb3VudDsJCQkvKiBkaXNwYXRjaCBj b3VudCAqLw0KCWludAlpc3JzX2RpcmVjdGVkOwkJCS8qIC4uLnN1Y2Nlc3Nm dWxseSBkaXNwYXRjaGVkICovDQoJaW50CWlzcnNfZGVmZXJyZWQ7CQkJLyog Li4ucXVldWVkIGluc3RlYWQgKi8NCglpbnQJaXNyc19xdWV1ZWQ7CQkJLyog aW50ZW50aW9uYWxseSBxdWV1ZXVlZCAqLw0KCWludAlpc3JzX3N3aV9jb3Vu dDsJCQkvKiBzd2lfbmV0IGhhbmRsZXJzIGNhbGxlZCAqLw0KfTsNCnN0YXRp YyBzdHJ1Y3QgaXNyc3RhdCBpc3JzdGF0Ow0KDQpTWVNDVExfTk9ERShfbmV0 LCBPSURfQVVUTywgaXNyLCBDVExGTEFHX1JXLCAwLCAibmV0aXNyIGNvdW50 ZXJzIik7DQoNCnN0YXRpYyBpbnQJbmV0aXNyX2VuYWJsZSA9IDE7DQpTWVND VExfSU5UKF9uZXRfaXNyLCBPSURfQVVUTywgZW5hYmxlLCBDVExGTEFHX1JX LCANCiAgICAmbmV0aXNyX2VuYWJsZSwgMCwgImVuYWJsZSBkaXJlY3QgZGlz cGF0Y2giKTsNCg0KU1lTQ1RMX0lOVChfbmV0X2lzciwgT0lEX0FVVE8sIGNv dW50LCBDVExGTEFHX1JELA0KICAgICZpc3JzdGF0LmlzcnNfY291bnQsIDAs ICIiKTsNClNZU0NUTF9JTlQoX25ldF9pc3IsIE9JRF9BVVRPLCBkaXJlY3Rl ZCwgQ1RMRkxBR19SRCwgDQogICAgJmlzcnN0YXQuaXNyc19kaXJlY3RlZCwg MCwgIiIpOw0KU1lTQ1RMX0lOVChfbmV0X2lzciwgT0lEX0FVVE8sIGRlZmVy cmVkLCBDVExGTEFHX1JELCANCiAgICAmaXNyc3RhdC5pc3JzX2RlZmVycmVk LCAwLCAiIik7DQpTWVNDVExfSU5UKF9uZXRfaXNyLCBPSURfQVVUTywgcXVl dWVkLCBDVExGTEFHX1JELCANCiAgICAmaXNyc3RhdC5pc3JzX3F1ZXVlZCwg MCwgIiIpOw0KU1lTQ1RMX0lOVChfbmV0X2lzciwgT0lEX0FVVE8sIHN3aV9j b3VudCwgQ1RMRkxBR19SRCwgDQogICAgJmlzcnN0YXQuaXNyc19zd2lfY291 bnQsIDAsICIiKTsNCg0KLyoNCiAqIENhbGwgdGhlIG5ldGlzciBkaXJlY3Rs eSBpbnN0ZWFkIG9mIHF1ZXVlaW5nIHRoZSBwYWNrZXQsIGlmIHBvc3NpYmxl Lg0KICoNCiAqIElkZWFsbHksIHRoZSBwZXJtaXNzaWJpbGl0eSBvZiBjYWxs aW5nIHRoZSByb3V0aW5lIHdvdWxkIGJlIGRldGVybWluZWQNCiAqIGJ5IGNo ZWNraW5nIGlmIHNwbG5ldCgpIHdhcyBhc3NlcnRlZCBhdCB0aGUgdGltZSB0 aGUgZGV2aWNlIGludGVycnVwdA0KICogb2NjdXJyZWQ7IGlmIHNvLCB0aGlz IGluZGljYXRlcyB0aGF0IHNvbWVvbmUgaXMgaW4gdGhlIG5ldHdvcmsgc3Rh Y2suDQogKg0KICogSG93ZXZlciwgYnVzX3NldHVwX2ludHIgdXNlcyBJTlRS X1RZUEVfTkVULCB3aGljaCBzZXRzIHNwbG5ldCBiZWZvcmUNCiAqIGNhbGxp bmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBzbyB0aGUgcHJldmlvdXMgbWFz ayBpcyB1bmF2YWlsYWJsZS4NCiAqIEFwcHJveGltYXRlIHRoaXMgYnkgY2hl Y2tpbmcgaW50cl9uZXN0aW5nX2xldmVsIGluc3RlYWQ7IGlmIGFueSBTV0kN CiAqIGhhbmRsZXJzIGFyZSBydW5uaW5nLCB0aGUgcGFja2V0IGlzIHF1ZXVl ZCBpbnN0ZWFkLg0KICovDQp2b2lkDQpuZXRpc3JfZGlzcGF0Y2goaW50IG51 bSwgc3RydWN0IG1idWYgKm0pDQp7DQoJc3RydWN0IG5ldGlzciAqbmk7DQoJ DQoJaXNyc3RhdC5pc3JzX2NvdW50Kys7DQoJS0FTU0VSVCghKG51bSA8IDAg fHwgbnVtID49IChzaXplb2YobmV0aXNycykvc2l6ZW9mKCpuZXRpc3JzKSkp LA0KCSAgICAoImJhZCBpc3IgJWQiLCBudW0pKTsNCgluaSA9ICZuZXRpc3Jz W251bV07DQoJaWYgKG5pLT5uaV9xdWV1ZSA9PSBOVUxMKSB7DQoJCW1fZnJl ZW0obSk7DQoJCXJldHVybjsNCgl9DQoJaWYgKG5ldGlzcl9lbmFibGUgJiYg bXR4X3RyeWxvY2soJm5ldGlzcl9tdHgpKSB7DQoJCWlzcnN0YXQuaXNyc19k aXJlY3RlZCsrOw0KCQkvKg0KCQkgKiBPbmUgc2xpZ2h0IHByb2JsZW0gaGVy ZSBpcyB0aGF0IHBhY2tldHMgbWlnaHQgYnlwYXNzDQoJCSAqIGVhY2ggb3Ro ZXIgaW4gdGhlIHN0YWNrLCBpZiBhbiBlYXJsaWVyIG9uZSBoYXBwZW5lZA0K CQkgKiB0byBnZXQgc3R1Y2sgaW4gdGhlIHF1ZXVlLg0KCQkgKg0KCQkgKiB3 ZSBjYW4gZWl0aGVyOg0KCQkgKglhLiBkcmFpbiB0aGUgcXVldWUgYmVmb3Jl IGhhbmRsaW5nIHRoaXMgcGFja2V0LA0KCQkgKgliLiBmYWxsYmFjayB0byBx dWV1ZWluZyB0aGUgcGFja2V0LA0KCQkgKgljLiBzd2VlcCB0aGUgaXNzdWUg dW5kZXIgdGhlIHJ1ZyBhbmQgaWdub3JlIGl0Lg0KCQkgKg0KCQkgKiBDdXJy ZW50bHksIHdlIGRvIGEpLiAgUHJldmlvdXNseSB3ZSBkaWQgYykuDQoJCSAq Lw0KCQlzd2lfcHJvY2Vzc3F1ZXVlKG5pKTsNCgkJbmktPm5pX2hhbmRsZXIo bSk7DQoJCW10eF91bmxvY2soJm5ldGlzcl9tdHgpOw0KCX0gZWxzZSB7DQoJ CWlzcnN0YXQuaXNyc19kZWZlcnJlZCsrOw0KCQlpZiAoSUZfSEFORE9GRihu aS0+bmlfcXVldWUsIG0sIE5VTEwpKQ0KCQkJc2NoZWRuZXRpc3IobnVtKTsN Cgl9DQp9DQoNCi8qDQogKiBTYW1lIGFzIGFib3ZlLCBidXQgYWx3YXlzIHF1 ZXVlLg0KICogVGhpcyBpcyBlaXRoZXIgdXNlZCBpbiBwbGFjZXMgd2hlcmUg d2UgYXJlIG5vdCBjb25maWRlbnQgdGhhdA0KICogZGlyZWN0IGRpc3BhdGNo IGlzIHBvc3NpYmxlLCBvciB3aGVyZSBxdWV1ZWluZyBpcyByZXF1aXJlZC4N CiAqLw0KaW50DQpuZXRpc3JfcXVldWUoaW50IG51bSwgc3RydWN0IG1idWYg Km0pDQp7DQoJc3RydWN0IG5ldGlzciAqbmk7DQoJDQoJS0FTU0VSVCghKG51 bSA8IDAgfHwgbnVtID49IChzaXplb2YobmV0aXNycykvc2l6ZW9mKCpuZXRp c3JzKSkpLA0KCSAgICAoImJhZCBpc3IgJWQiLCBudW0pKTsNCgluaSA9ICZu ZXRpc3JzW251bV07DQoJaWYgKG5pLT5uaV9xdWV1ZSA9PSBOVUxMKSB7DQoJ CW1fZnJlZW0obSk7DQoJCXJldHVybiAoMSk7DQoJfQ0KCWlzcnN0YXQuaXNy c19xdWV1ZWQrKzsNCglpZiAoIUlGX0hBTkRPRkYobmktPm5pX3F1ZXVlLCBt LCBOVUxMKSkNCgkJcmV0dXJuICgwKTsNCglzY2hlZG5ldGlzcihudW0pOw0K CXJldHVybiAoMSk7DQp9DQoNCnN0YXRpYyB2b2lkDQpzd2lfcHJvY2Vzc3F1 ZXVlKHN0cnVjdCBuZXRpc3IgKm5pKQ0Kew0KCXN0cnVjdCBtYnVmICptOw0K DQoJZm9yICg7Oykgew0KCQlJRl9ERVFVRVVFKG5pLT5uaV9xdWV1ZSwgbSk7 DQoJCWlmIChtID09IE5VTEwpDQoJCQlicmVhazsNCgkJbmktPm5pX2hhbmRs ZXIobSk7DQoJfQ0KfQ0KDQpzdGF0aWMgdm9pZA0Kc3dpX25ldCh2b2lkICpk dW1teSkNCnsNCglzdHJ1Y3QgbmV0aXNyICpuaTsNCgl1X2ludCBiaXRzOw0K CWludCBpOw0KI2lmZGVmIERFVklDRV9QT0xMSU5HDQoJY29uc3QgaW50IHBv bGxpbmcgPSAxOw0KI2Vsc2UNCgljb25zdCBpbnQgcG9sbGluZyA9IDA7DQoj ZW5kaWYNCg0KCW10eF9sb2NrKCZuZXRpc3JfbXR4KTsNCglkbyB7DQoJCWJp dHMgPSBhdG9taWNfcmVhZGFuZGNsZWFyX2ludCgmbmV0aXNyKTsNCgkJaWYg KGJpdHMgPT0gMCkNCgkJCWJyZWFrOw0KCQl3aGlsZSAoKGkgPSBmZnMoYml0 cykpICE9IDApIHsNCgkJCWlzcnN0YXQuaXNyc19zd2lfY291bnQrKzsNCgkJ CWktLTsNCgkJCWJpdHMgJj0gfigxIDw8IGkpOw0KCQkJbmkgPSAmbmV0aXNy c1tpXTsNCgkJCWlmIChuaS0+bmlfaGFuZGxlciA9PSBOVUxMKSB7DQoJCQkJ cHJpbnRmKCJzd2lfbmV0OiB1bnJlZ2lzdGVyZWQgaXNyICVkLlxuIiwgaSk7 DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQlpZiAobmktPm5pX3F1ZXVlID09 IE5VTEwpDQoJCQkJbmktPm5pX2hhbmRsZXIoTlVMTCk7DQoJCQllbHNlDQoJ CQkJc3dpX3Byb2Nlc3NxdWV1ZShuaSk7DQoJCX0NCgl9IHdoaWxlIChwb2xs aW5nKTsNCgltdHhfdW5sb2NrKCZuZXRpc3JfbXR4KTsNCn0NCg0Kc3RhdGlj IHZvaWQNCnN0YXJ0X25ldGlzcih2b2lkICpkdW1teSkNCnsNCg0KCW10eF9p bml0KCZuZXRpc3JfbXR4LCAibmV0aXNyIGxvY2siLCBOVUxMLCBNVFhfREVG KTsNCglpZiAoc3dpX2FkZChOVUxMLCAibmV0Iiwgc3dpX25ldCwgTlVMTCwg U1dJX05FVCwgMCwgJm5ldF9paCkpDQoJCXBhbmljKCJzdGFydF9uZXRpc3Ii KTsNCn0NClNZU0lOSVQoc3RhcnRfbmV0aXNyLCBTSV9TVUJfU09GVElOVFIs IFNJX09SREVSX0ZJUlNULCBzdGFydF9uZXRpc3IsIE5VTEwpDQo= --0-1999649479-1065046428=:16031--