From shin-5@jp-c.ne.jp Wed Dec 1 02:02:00 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 02:02:06 -0800 (PST) Received: from MIN14 ([221.212.226.3]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id iB1A1wn1011500 for ; Wed, 1 Dec 2004 02:01:59 -0800 Date: Wed, 1 Dec 2004 02:01:58 -0800 Message-Id: <200412011001.iB1A1wn1011500@oss.sgi.com> From: "=?iso-2022-jp?B?c2pkazE0QHlhaG9vLmNvLmpw?=" To: "netdev@oss.sgi.com" X-mailer: Super Mailer 9 [en][outlook] Subject: =?iso-2022-jp?B?GyRCISE0KCQkJEckOSQrISkbKEI=?= MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4927.1200 X-archive-position: 12362 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: alkjd@yahoo.co.jp Precedence: bulk X-list: netdev いいね〜今週も最高です! http://iidote.info/kinjyo ****メルマガ解除/問い合わせ**** 広東省 藩 浩 yotsuba_kouyou@yahoo.co.jp ******************************* From hadi@cyberus.ca Wed Dec 1 05:23:12 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 05:23:19 -0800 (PST) Received: from mx01.cybersurf.com (mx01.cybersurf.com [209.197.145.104]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1DNB1C021461 for ; Wed, 1 Dec 2004 05:23:12 -0800 Received: from mail.cyberus.ca ([209.197.145.21]) by mx01.cybersurf.com with esmtp (Exim 4.30) id 1CZURT-0003Du-Es for netdev@oss.sgi.com; Wed, 01 Dec 2004 08:22:47 -0500 Received: from cpe0030ab124d2f-cm014500000962.cpe.net.cable.rogers.com ([24.103.99.32] helo=[10.0.0.9]) by mail.cyberus.ca with esmtp (Exim 4.20) id 1CZURP-0008Vw-8l; Wed, 01 Dec 2004 08:22:43 -0500 Subject: Re: [E1000-devel] Transmission limit From: jamal Reply-To: hadi@cyberus.ca To: Lennert Buytenhek Cc: Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <20041201001107.GE4203@xi.wantstofly.org> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> Content-Type: text/plain Organization: jamalopolous Message-Id: <1101902900.1041.9.camel@jzny.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 Date: 01 Dec 2004 07:08:20 -0500 Content-Transfer-Encoding: 7bit X-archive-position: 12363 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hadi@cyberus.ca Precedence: bulk X-list: netdev On Tue, 2004-11-30 at 19:11, Lennert Buytenhek wrote: > On Tue, Nov 30, 2004 at 09:25:54AM -0500, jamal wrote: > > > > > > Also from what I understand new HW and MSI can help in the case where > > > > > pass objects between CPU. Did I dream or did someone tell me that S2IO > > > > > could have several TX ring that could via MSI be routed to proper cpu? > > > > > > > > I am wondering if the per CPU tx/rx irqs are valuable at all. They sound > > > > like more hell to maintain. > > > > > > On the TX path you'd have qdiscs to deal with as well, no? > > > > I think management of it would be non-trivial in SMP. Youd have to start > > playing stupid loadbalancing tricks which would reduce the value of > > existence of tx irqs to begin with. > > You mean the management of qdiscs would be non-trivial? I mean it is useful in only the most ideal cases and if you want to actually do something useful in most cases with it you will have to muck around. Take the case of forwarding (maybe with a little or almost no localhost generated traffic) - then you end allocating in CPUA, processing and queueing on egress. Tx softirq, which is what stashes the packet on tx DMA eventually, is not guaranteed to run on the same CPU. Now add a little latency between ingress and egress .. The ideal case is where you end up processing to completion from ingress to egress (which is known to happen in Linux when theres no congestion). > Probably the idea of these kinds of tricks is to skip the qdisc step > altogether. > Which is preached by the BSD folks - bogus in my opinion. If you want to do something as bland/boring as that you can probably afford a $500 DLINK router which can do it at wire rate with (with cost you being locked in whatever features they have). cheers, jamal From hadi@cyberus.ca Wed Dec 1 05:40:41 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 05:40:46 -0800 (PST) Received: from mx02.cybersurf.com (mx02.cybersurf.com [209.197.145.105]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1Debev022056 for ; Wed, 1 Dec 2004 05:40:41 -0800 Received: from mail.cyberus.ca ([209.197.145.21]) by mx02.cybersurf.com with esmtp (Exim 4.30) id 1CZUiL-0006Ct-BZ for netdev@oss.sgi.com; Wed, 01 Dec 2004 08:40:13 -0500 Received: from cpe0030ab124d2f-cm014500000962.cpe.net.cable.rogers.com ([24.103.99.32] helo=[10.0.0.9]) by mail.cyberus.ca with esmtp (Exim 4.20) id 1CZUiH-000245-JX; Wed, 01 Dec 2004 08:40:09 -0500 Subject: Re: [E1000-devel] Transmission limit From: jamal Reply-To: hadi@cyberus.ca To: mellia@prezzemolo.polito.it Cc: Lennert Buytenhek , Harald Welte , P@draigBrady.com, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101804146.11111.23.camel@mellia.lipar.polito.it> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <1101483081.24742.174.camel@mellia.lipar.polito.it> <20041127092503.GA12592@sunbeam.de.gnumonks.org> <1101718412.14930.46.camel@verza.polito.it> <20041129145028.GC18788@xi.wantstofly.org> <1101804146.11111.23.camel@mellia.lipar.polito.it> Content-Type: text/plain Organization: jamalopolous Message-Id: <1101903944.1042.29.camel@jzny.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 Date: 01 Dec 2004 07:25:44 -0500 Content-Transfer-Encoding: 7bit X-archive-position: 12364 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hadi@cyberus.ca Precedence: bulk X-list: netdev On Tue, 2004-11-30 at 03:42, Marco Mellia wrote: > On Mon, 2004-11-29 at 15:50, Lennert Buytenhek wrote: > > On Mon, Nov 29, 2004 at 09:53:33AM +0100, Marco Mellia wrote: > > > > > Th's our intuition too. > > > Notice that we get the same results with 3com (broadcom based) gigabit > > > cards. > > > We are thinking of sending packet in "bursts" instead of single > > > transfers. The only problem is to let the NIC know that there are more > > > than a packet in a burst... > > > > Jamal implemented exactly this for e1000 already, he might be persuaded > > into posting his patch here. Jamal? :) > > I guess that saying that we are _very_ interested in this might help. > :-) > We can offer as "beta-testers" as well... Sorry missed this (I wasnt CCed so it went to a low priority queue which i read on a best effort basis). Let me clean up the patches a little bit this weekend. The patch is at least 4 months old; latest reincarnation was due to issue1 on my SUCON presentation. Would a patch against latest 2.6.x bitkeeper (whatever it is this weekend) be fine? If you are in a rush and dont mind a little ugliness then i will pass them as is. BTW, Scott posted a interesting patch yesterday, you may wanna give that a shot as well. cheers, jamal From buytenh@wantstofly.org Wed Dec 1 07:24:56 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 07:25:08 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1FOtOe011798 for ; Wed, 1 Dec 2004 07:24:56 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 09F592B0ED; Wed, 1 Dec 2004 16:24:33 +0100 (MET) Date: Wed, 1 Dec 2004 16:24:33 +0100 From: Lennert Buytenhek To: jamal Cc: Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041201152433.GA12558@xi.wantstofly.org> References: <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101902900.1041.9.camel@jzny.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1101902900.1041.9.camel@jzny.localdomain> User-Agent: Mutt/1.4.1i X-archive-position: 12365 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Wed, Dec 01, 2004 at 07:08:20AM -0500, jamal wrote: [ per-CPU TX/RX rings ] > > You mean the management of qdiscs would be non-trivial? > > I mean it is useful in only the most ideal cases and if you want to > actually do something useful in most cases with it you will have to > muck around. > Take the case of forwarding (maybe with a little or almost no localhost > generated traffic) - then you end allocating in CPUA, processing and > queueing on egress. Tx softirq, which is what stashes the packet on tx > DMA eventually, is not guaranteed to run on the same CPU. Now add a > little latency between ingress and egress .. > The ideal case is where you end up processing to completion from ingress > to egress (which is known to happen in Linux when theres no congestion). We disagreed on this topic at SUCON and I'm afraid we'll be disagreeing on it forever :) IMHO, on 10GbE any kind of qdisc is a waste of cycles. I don't think it's very likely that you'll be using that single 10GbE NIC for forwarding packets, doing that with a PC at this point in the history of PCs is just silly. If you do use it for forwarding, how likely is it that you'll be able to process an incoming burst of packets fast enough to require queueing on the egress interface? You have to be able to send a burst of packets bigger than the NIC's TX FIFO at >10GbE in the first place for queueing to be effective/useful at all. (Leaving the question of whether or not there'll be some room in the TX FIFO at TX time unanswered, what you're doing with per-CPU TX rings is basically just simulating the "N individual NICs each bound to its own CPU" case with a single NIC.) > > Probably the idea of these kinds of tricks is to skip the qdisc step > > altogether. > > Which is preached by the BSD folks - bogus in my opinion. If you want to > do something as bland/boring as that you can probably afford a $500 > DLINK router which can do it at wire rate with (with cost you being > locked in whatever features they have). That's an unfair comparison. Just because I don't need CBQ doesn't mean my $500 DLINK router does everything I'd want it to -- advanced firewalling is one thing that comes to mind. Last time I looked I couldn't load my own kernel modules on my DLINK router either. --L From Robert.Olsson@data.slu.se Wed Dec 1 07:34:53 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 07:34:58 -0800 (PST) Received: from mail1.slu.se (mail1.slu.se [130.238.96.11]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1FYmVv012294 for ; Wed, 1 Dec 2004 07:34:53 -0800 Received: from robur.slu.se (robur.slu.se [130.238.98.12]) by mail1.slu.se (8.12.10/8.12.10) with ESMTP id iB1FYCKO029728; Wed, 1 Dec 2004 16:34:12 +0100 Received: by robur.slu.se (Postfix, from userid 1000) id 5C1C6EC001; Wed, 1 Dec 2004 16:34:12 +0100 (CET) From: Robert Olsson MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16813.58484.343629.570703@robur.slu.se> Date: Wed, 1 Dec 2004 16:34:12 +0100 To: sfeldma@pobox.com Cc: Lennert Buytenhek , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit In-Reply-To: <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> X-Mailer: VM 7.18 under Emacs 21.3.1 X-archive-position: 12366 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: Robert.Olsson@data.slu.se Precedence: bulk X-list: netdev Scott Feldman writes: > Hey, turns out, I know some e1000 tricks that might help get the kpps > numbers up. > > My problem is I only have a P4 desktop system with a 82544 nic running > at PCI 32/33Mhz, so I can't play with the big boys. But, attached is a > rework of the Tx path to eliminate 1) Tx interrupts, and 2) Tx > descriptor write-backs. For me, I see a nice jump in kpps, but I'd like > others to try with their setups. We should be able to get to wire speed > with 60-byte packets. > > System: Intel 865 (HT 2.6Ghz) > Nic: 82544 PCI 32-bit/33Mhz > Driver: linux-2.6.9 e1000 (5.3.19-k2-NAPI), no Interrupt Delays > 4096 descs > pkt_size = 60: 541618pps 277Mb/sec errors: 914 Hello! Nice but I no improvements w. 82546GB @ 133 MHz on 1.6 GHz Opteron it seems. SMP kernel linux-2.6.9-rc2 Vanilla. 801077pps 410Mb/sec (410151424bps) errors: 95596 Patch TXD=4096 608690pps 311Mb/sec (311649280bps) errors: 0 Patch TXD=2048 624103pps 319Mb/sec (319540736bps) errors: 0 Patch TXD=1024 551289pps 282Mb/sec (282259968bps) errors: 4506 Error count is a bit confusing... --ro From sfeldma@pobox.com Wed Dec 1 08:47:41 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 08:47:45 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1GlafG018005 for ; Wed, 1 Dec 2004 08:47:41 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id EAD952F9553; Wed, 1 Dec 2004 11:47:14 -0500 (EST) Received: from [172.20.3.21] (66.239.228.194.ptr.us.xo.net [66.239.228.194]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id D00302F84CC; Wed, 1 Dec 2004 11:47:04 -0500 (EST) Subject: Re: [E1000-devel] Transmission limit From: Scott Feldman Reply-To: sfeldma@pobox.com To: Robert Olsson Cc: Lennert Buytenhek , jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <16813.58484.343629.570703@robur.slu.se> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> Content-Type: text/plain Message-Id: <1101919791.5198.15.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Wed, 01 Dec 2004 08:49:51 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12367 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Wed, 2004-12-01 at 07:34, Robert Olsson wrote: > Nice but I no improvements w. 82546GB @ 133 MHz on 1.6 GHz Opteron it seems. > SMP kernel linux-2.6.9-rc2 > > Vanilla. > 801077pps 410Mb/sec (410151424bps) errors: 95596 > > Patch TXD=4096 > 608690pps 311Mb/sec (311649280bps) errors: 0 Thank you Robert for trying it out. Well those results are counter-intuitive! We remove Tx interrupts and Tx descriptor DMA write-backs and get no re-tries, and performance drops? The only bus activities left are the DMA of buffers to device and the register writes to increment tail. I'm stumped. I'll need to get my hands on a faster system. Maybe there is a bus analyzer under the tree. :-) -scott From Robert.Olsson@data.slu.se Wed Dec 1 08:48:14 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 08:48:19 -0800 (PST) Received: from mail1.slu.se (mail1.slu.se [130.238.96.11]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1Gm7iB018063 for ; Wed, 1 Dec 2004 08:48:14 -0800 Received: from robur.slu.se (robur.slu.se [130.238.98.12]) by mail1.slu.se (8.12.10/8.12.10) with ESMTP id iB1GlOKO024025; Wed, 1 Dec 2004 17:47:24 +0100 Received: by robur.slu.se (Postfix, from userid 1000) id 34CC8EC001; Wed, 1 Dec 2004 17:47:24 +0100 (CET) From: Robert Olsson MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16813.62876.180869.404122@robur.slu.se> Date: Wed, 1 Dec 2004 17:47:24 +0100 To: "David S. Miller" Cc: Robert Olsson , hadi@cyberus.ca, P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, jorge.finochietto@polito.it, galante@polito.it, netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit In-Reply-To: <20041129121604.47eb6593.davem@davemloft.net> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <20041129121604.47eb6593.davem@davemloft.net> X-Mailer: VM 7.18 under Emacs 21.3.1 X-archive-position: 12368 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: Robert.Olsson@data.slu.se Precedence: bulk X-list: netdev David S. Miller writes: > > Did I dream or did someone tell me that S2IO > > could have several TX ring that could via MSI be routed to proper cpu? > > One of Sun's gigabit chips can do this too, except it isn't > via MSI, the driver has to read the descriptor to figure out > which cpu gets the software interrupt to process the packet. > > SGI had hardware which allowed you to do this kind of stuff too. > > Obviously the MSI version works much better. > > It is important, the cpu selection process. First of all, it must > be calculated such that flows always go through the same cpu. > Otherwise TCP sockets bounce between the cpus for a streaming > transfer. > > And even this doesn't avoid all such problems, TCP LISTEN state > sockets will still thrash between the cpus with such a "pick > a cpu based upon" flow scheme. > > Anyways, just some thoughts. Thanks for the the info. Well we'll be forced to get into those problems when the HW is capable. I'll guess it will be w. the 10 GIGE cards. --ro From wensong@linux-vs.org Wed Dec 1 08:49:54 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 08:50:02 -0800 (PST) Received: from lb1.ctrip.com ([218.244.111.2]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1Gnqeo018487 for ; Wed, 1 Dec 2004 08:49:53 -0800 Received: from penguin.linux-vs.org ([61.149.145.226]) by lb1.ctrip.com (8.12.10/8.12.10) with ESMTP id iB1GmjMh028406 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Dec 2004 00:48:49 +0800 Received: from penguin.linux-vs.org (localhost.localdomain [127.0.0.1]) by penguin.linux-vs.org (8.12.8/8.12.8) with ESMTP id iB1GmZ9A001083; Thu, 2 Dec 2004 00:48:36 +0800 Received: from localhost (wensong@localhost) by penguin.linux-vs.org (8.12.8/8.12.8/Submit) with ESMTP id iB1GmRZa001079; Thu, 2 Dec 2004 00:48:31 +0800 X-Authentication-Warning: penguin.linux-vs.org: wensong owned process doing -bs Date: Thu, 2 Dec 2004 00:48:26 +0800 (CST) From: Wensong Zhang To: "David S. Miller" , netdev@oss.sgi.com Subject: [PATCH] [IPVS] add a sysctl variable to expire quiescent template Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/Mixed; BOUNDARY="-1463811584-572891765-1097000265=:2451" Content-ID: X-archive-position: 12369 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: wensong@linux-vs.org Precedence: bulk X-list: netdev This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463811584-572891765-1097000265=:2451 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed Content-ID: Hi Dave, Here is the patch from Horms to add a sysctl variable to expire quiescent templat. Please check and apply them to kernel 2.4 and 2.6 respectively. Thanks, Wensong ---1463811584-572891765-1097000265=:2451 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="linux-2.4-ipvs-quiescent_template.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="linux-2.4-ipvs-quiescent_template.patch" IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBkaWZmIC1OcnUgc3R5 bGUgcGF0Y2guDQojDQojIENoYW5nZVNldA0KIyAgIDIwMDQvMTIvMDIgMDA6 MDI6NDgrMDg6MDAgd2Vuc29uZ0BsaW51eC12cy5vcmcgDQojICAgW0lQVlNd IGFkZCBhIHN5c2N0bCB2YXJpYWJsZSB0byBleHBpcmUgcXVpZXNjZW50IHRl bXBsYXRlDQojICAgDQojICAgVGhlIHBhdGNoIGlzIGZyb20gSG9ybXMgPGhv cm1zQHZlcmdlbmV0Lm5ldD4NCiMgDQojIG5ldC9pcHY0L2lwdnMvaXBfdnNf Y3RsLmMNCiMgICAyMDA0LzEyLzAyIDAwOjAyOjM4KzA4OjAwIHdlbnNvbmdA bGludXgtdnMub3JnICs0IC0wDQojICAgc2V0IHN5c2N0bF9pcF92c19leHBp cmVfcXVpZXNjZW50X3RlbXBsYXRlDQojIA0KIyBuZXQvaXB2NC9pcHZzL2lw X3ZzX2Nvbm4uYw0KIyAgIDIwMDQvMTIvMDIgMDA6MDI6MzcrMDg6MDAgd2Vu c29uZ0BsaW51eC12cy5vcmcgKzMgLTENCiMgICBkb24ndCB1c2UgcXVpZXNj ZW50IHRlbXBsYXRlIGlmIHRoZSBleHBpcmVfcXVpZXNjZW50X3RlbXBsYXRl IGlzIGVuYWJsZWQNCiMgDQojIGluY2x1ZGUvbmV0L2lwX3ZzLmgNCiMgICAy MDA0LzEyLzAyIDAwOjAyOjM3KzA4OjAwIHdlbnNvbmdAbGludXgtdnMub3Jn ICsyIC0wDQojICAgYWRkIHRoZSBzeXNjdGxfaXBfdnNfZXhwaXJlX3F1aWVz Y2VudF90ZW1wbGF0ZQ0KIyANCmRpZmYgLU5ydSBhL2luY2x1ZGUvbmV0L2lw X3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oDQotLS0gYS9pbmNsdWRlL25l dC9pcF92cy5oCTIwMDQtMTItMDIgMDA6MTY6MzYgKzA4OjAwDQorKysgYi9p bmNsdWRlL25ldC9pcF92cy5oCTIwMDQtMTItMDIgMDA6MTY6MzYgKzA4OjAw DQpAQCAtMzE3LDYgKzMxNyw3IEBADQogCU5FVF9JUFY0X1ZTX0VYUElSRV9O T0RFU1RfQ09OTj0yMywNCiAJTkVUX0lQVjRfVlNfU1lOQ19USFJFU0hPTEQ9 MjQsDQogCU5FVF9JUFY0X1ZTX05BVF9JQ01QX1NFTkQ9MjUsDQorCU5FVF9J UFY0X1ZTX0VYUElSRV9RVUlFU0NFTlRfVEVNUExBVEU9MjYsDQogCU5FVF9J UFY0X1ZTX0xBU1QNCiB9Ow0KIA0KQEAgLTcwMCw2ICs3MDEsNyBAQA0KICAq Lw0KIGV4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX2NhY2hlX2J5cGFzczsNCiBl eHRlcm4gaW50IHN5c2N0bF9pcF92c19leHBpcmVfbm9kZXN0X2Nvbm47DQor ZXh0ZXJuIGludCBzeXNjdGxfaXBfdnNfZXhwaXJlX3F1aWVzY2VudF90ZW1w bGF0ZTsNCiBleHRlcm4gaW50IHN5c2N0bF9pcF92c19zeW5jX3RocmVzaG9s ZDsNCiBleHRlcm4gaW50IHN5c2N0bF9pcF92c19uYXRfaWNtcF9zZW5kOw0K IGV4dGVybiBzdHJ1Y3QgaXBfdnNfc3RhdHMgaXBfdnNfc3RhdHM7DQpkaWZm IC1OcnUgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9pcHY0 L2lwdnMvaXBfdnNfY29ubi5jDQotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3Zz X2Nvbm4uYwkyMDA0LTEyLTAyIDAwOjE2OjM2ICswODowMA0KKysrIGIvbmV0 L2lwdjQvaXB2cy9pcF92c19jb25uLmMJMjAwNC0xMi0wMiAwMDoxNjozNiAr MDg6MDANCkBAIC0xMTMxLDcgKzExMzEsOSBAQA0KIAkgKiBDaGVja2luZyB0 aGUgZGVzdCBzZXJ2ZXIgc3RhdHVzLg0KIAkgKi8NCiAJaWYgKChkZXN0ID09 IE5VTEwpIHx8DQotCSAgICAhKGRlc3QtPmZsYWdzICYgSVBfVlNfREVTVF9G X0FWQUlMQUJMRSkpIHsNCisJICAgICEoZGVzdC0+ZmxhZ3MgJiBJUF9WU19E RVNUX0ZfQVZBSUxBQkxFKSB8fCANCisJICAgIChzeXNjdGxfaXBfdnNfZXhw aXJlX3F1aWVzY2VudF90ZW1wbGF0ZSAmJiANCisJICAgICAoYXRvbWljX3Jl YWQoJmRlc3QtPndlaWdodCkgPT0gMCkpKSB7DQogCQlJUF9WU19EQkcoOSwg ImNoZWNrX3RlbXBsYXRlOiBkZXN0IG5vdCBhdmFpbGFibGUgZm9yICINCiAJ CQkgICJwcm90b2NvbCAlcyBzOiV1LiV1LiV1LiV1OiVkIHY6JXUuJXUuJXUu JXU6JWQgIg0KIAkJCSAgIi0+IGQ6JXUuJXUuJXUuJXU6JWRcbiIsDQpkaWZm IC1OcnUgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L2lwdjQv aXB2cy9pcF92c19jdGwuYw0KLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19j dGwuYwkyMDA0LTEyLTAyIDAwOjE2OjM2ICswODowMA0KKysrIGIvbmV0L2lw djQvaXB2cy9pcF92c19jdGwuYwkyMDA0LTEyLTAyIDAwOjE2OjM2ICswODow MA0KQEAgLTc0LDYgKzc0LDcgQEANCiBzdGF0aWMgaW50IHN5c2N0bF9pcF92 c19hbV9kcm9wcmF0ZSA9IDEwOw0KIGludCBzeXNjdGxfaXBfdnNfY2FjaGVf YnlwYXNzID0gMDsNCiBpbnQgc3lzY3RsX2lwX3ZzX2V4cGlyZV9ub2Rlc3Rf Y29ubiA9IDA7DQoraW50IHN5c2N0bF9pcF92c19leHBpcmVfcXVpZXNjZW50 X3RlbXBsYXRlID0gMDsNCiBpbnQgc3lzY3RsX2lwX3ZzX3N5bmNfdGhyZXNo b2xkID0gMzsNCiBpbnQgc3lzY3RsX2lwX3ZzX25hdF9pY21wX3NlbmQgPSAw Ow0KIA0KQEAgLTE0MzksNiArMTQ0MCw5IEBADQogCSAgJnByb2NfZG9pbnR2 ZWN9LA0KIAkge05FVF9JUFY0X1ZTX05BVF9JQ01QX1NFTkQsICJuYXRfaWNt cF9zZW5kIiwNCiAJICAmc3lzY3RsX2lwX3ZzX25hdF9pY21wX3NlbmQsIHNp emVvZihpbnQpLCAwNjQ0LCBOVUxMLA0KKwkgICZwcm9jX2RvaW50dmVjfSwN CisJIHtORVRfSVBWNF9WU19FWFBJUkVfUVVJRVNDRU5UX1RFTVBMQVRFLCAi ZXhwaXJlX3F1aWVzY2VudF90ZW1wbGF0ZSIsDQorCSAgJnN5c2N0bF9pcF92 c19leHBpcmVfcXVpZXNjZW50X3RlbXBsYXRlLCBzaXplb2YoaW50KSwgMDY0 NCwgTlVMTCwNCiAJICAmcHJvY19kb2ludHZlY30sDQogCSB7MH19LA0KIAl7 e05FVF9JUFY0X1ZTLCAidnMiLCBOVUxMLCAwLCAwNTU1LCBpcHY0X3ZzX3Rh YmxlLnZzX3ZhcnN9LA0K ---1463811584-572891765-1097000265=:2451 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="linux-2.6-ipvs-quiescent_template.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="linux-2.6-ipvs-quiescent_template.patch" IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBkaWZmIC1OcnUgc3R5 bGUgcGF0Y2guDQojDQojIENoYW5nZVNldA0KIyAgIDIwMDQvMTIvMDIgMDA6 NDI6MTUrMDg6MDAgd2Vuc29uZ0BsaW51eC12cy5vcmcgDQojICAgW0lQVlNd IGFkZCBhIHN5c2N0bCB2YXJpYWJsZSB0byBleHBpcmUgcXVpZXNjZW50IHRl bXBsYXRlDQojICAgDQojICAgVGhlIHBhdGNoIGlzIGZyb20gSG9ybXMgPGhv cm1zQHZlcmdlbmV0Lm5ldD4NCiMgDQojIG5ldC9pcHY0L2lwdnMvaXBfdnNf Y3RsLmMNCiMgICAyMDA0LzEyLzAyIDAwOjQxOjU2KzA4OjAwIHdlbnNvbmdA bGludXgtdnMub3JnICsyMCAtMTENCiMgICBzZXQgdGhlIHN5c2N0bF9pcF92 c19leHBpcmVfcXVpZXNjZW50X3RlbXBsYXRlDQojIA0KIyBuZXQvaXB2NC9p cHZzL2lwX3ZzX2Nvbm4uYw0KIyAgIDIwMDQvMTIvMDIgMDA6NDE6NTYrMDg6 MDAgd2Vuc29uZ0BsaW51eC12cy5vcmcgKzMgLTENCiMgICBkb24ndCB1c2Ug cXVpZXNjZW50IHRlbXBsYXRlIGlmIHRoZSBleHBpcmVfcXVpZXNjZW50X3Rl bXBsYXRlIGlzIGVuYWJsZWQNCiMgDQojIGluY2x1ZGUvbmV0L2lwX3ZzLmgN CiMgICAyMDA0LzEyLzAyIDAwOjQxOjU2KzA4OjAwIHdlbnNvbmdAbGludXgt dnMub3JnICsyIC0wDQojICAgYWRkIHRoZSBzeXNjdGxfaXBfdnNfZXhwaXJl X3F1aWVzY2VudF90ZW1wbGF0ZSBwcm90b3R5cGUNCiMgDQpkaWZmIC1OcnUg YS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaA0K LS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAkyMDA0LTEyLTAyIDAwOjQzOjE0 ICswODowMA0KKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAkyMDA0LTEyLTAy IDAwOjQzOjE0ICswODowMA0KQEAgLTM1OCw2ICszNTgsNyBAQA0KIAlORVRf SVBWNF9WU19FWFBJUkVfTk9ERVNUX0NPTk49MjMsDQogCU5FVF9JUFY0X1ZT X1NZTkNfVEhSRVNIT0xEPTI0LA0KIAlORVRfSVBWNF9WU19OQVRfSUNNUF9T RU5EPTI1LA0KKwlORVRfSVBWNF9WU19FWFBJUkVfUVVJRVNDRU5UX1RFTVBM QVRFPTI2LA0KIAlORVRfSVBWNF9WU19MQVNUDQogfTsNCiANCkBAIC04Nzks NiArODgwLDcgQEANCiAgKi8NCiBleHRlcm4gaW50IHN5c2N0bF9pcF92c19j YWNoZV9ieXBhc3M7DQogZXh0ZXJuIGludCBzeXNjdGxfaXBfdnNfZXhwaXJl X25vZGVzdF9jb25uOw0KK2V4dGVybiBpbnQgc3lzY3RsX2lwX3ZzX2V4cGly ZV9xdWllc2NlbnRfdGVtcGxhdGU7DQogZXh0ZXJuIGludCBzeXNjdGxfaXBf dnNfc3luY190aHJlc2hvbGRbMl07DQogZXh0ZXJuIGludCBzeXNjdGxfaXBf dnNfbmF0X2ljbXBfc2VuZDsNCiBleHRlcm4gc3RydWN0IGlwX3ZzX3N0YXRz IGlwX3ZzX3N0YXRzOw0KZGlmZiAtTnJ1IGEvbmV0L2lwdjQvaXB2cy9pcF92 c19jb25uLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYw0KLS0tIGEv bmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMJMjAwNC0xMi0wMiAwMDo0Mzox NCArMDg6MDANCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29ubi5jCTIw MDQtMTItMDIgMDA6NDM6MTQgKzA4OjAwDQpAQCAtNDUzLDcgKzQ1Myw5IEBA DQogCSAqIENoZWNraW5nIHRoZSBkZXN0IHNlcnZlciBzdGF0dXMuDQogCSAq Lw0KIAlpZiAoKGRlc3QgPT0gTlVMTCkgfHwNCi0JICAgICEoZGVzdC0+Zmxh Z3MgJiBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFKSkgew0KKwkgICAgIShkZXN0 LT5mbGFncyAmIElQX1ZTX0RFU1RfRl9BVkFJTEFCTEUpIHx8IA0KKwkgICAg KHN5c2N0bF9pcF92c19leHBpcmVfcXVpZXNjZW50X3RlbXBsYXRlICYmIA0K KwkgICAgIChhdG9taWNfcmVhZCgmZGVzdC0+d2VpZ2h0KSA9PSAwKSkpIHsN CiAJCUlQX1ZTX0RCRyg5LCAiY2hlY2tfdGVtcGxhdGU6IGRlc3Qgbm90IGF2 YWlsYWJsZSBmb3IgIg0KIAkJCSAgInByb3RvY29sICVzIHM6JXUuJXUuJXUu JXU6JWQgdjoldS4ldS4ldS4ldTolZCAiDQogCQkJICAiLT4gZDoldS4ldS4l dS4ldTolZFxuIiwNCmRpZmYgLU5ydSBhL25ldC9pcHY0L2lwdnMvaXBfdnNf Y3RsLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jDQotLS0gYS9uZXQv aXB2NC9pcHZzL2lwX3ZzX2N0bC5jCTIwMDQtMTItMDIgMDA6NDM6MTQgKzA4 OjAwDQorKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jCTIwMDQtMTIt MDIgMDA6NDM6MTQgKzA4OjAwDQpAQCAtNzUsNiArNzUsNyBAQA0KIHN0YXRp YyBpbnQgc3lzY3RsX2lwX3ZzX2FtX2Ryb3ByYXRlID0gMTA7DQogaW50IHN5 c2N0bF9pcF92c19jYWNoZV9ieXBhc3MgPSAwOw0KIGludCBzeXNjdGxfaXBf dnNfZXhwaXJlX25vZGVzdF9jb25uID0gMDsNCitpbnQgc3lzY3RsX2lwX3Zz X2V4cGlyZV9xdWllc2NlbnRfdGVtcGxhdGUgPSAwOw0KIGludCBzeXNjdGxf aXBfdnNfc3luY190aHJlc2hvbGRbMl0gPSB7IDMsIDUwIH07DQogaW50IHN5 c2N0bF9pcF92c19uYXRfaWNtcF9zZW5kID0gMDsNCiANCkBAIC0xNDQ3LDkg KzE0NDgsOSBAQA0KIAl7DQogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9WU19U T19FUywNCiAJCS5wcm9jbmFtZQk9ICJ0aW1lb3V0X2VzdGFibGlzaGVkIiwN Ci0JICAJLmRhdGEJPSAmdnNfdGltZW91dF90YWJsZV9kb3MudGltZW91dFtJ UF9WU19TX0VTVEFCTElTSEVEXSwNCisJCS5kYXRhCT0gJnZzX3RpbWVvdXRf dGFibGVfZG9zLnRpbWVvdXRbSVBfVlNfU19FU1RBQkxJU0hFRF0sDQogCQku bWF4bGVuCQk9IHNpemVvZihpbnQpLA0KLQkJLm1vZGUJCT0gMDY0NCwgDQor CQkubW9kZQkJPSAwNjQ0LA0KIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2Rv aW50dmVjX2ppZmZpZXMsDQogCX0sDQogCXsNCkBAIC0xNDU3LDcgKzE0NTgs NyBAQA0KIAkJLnByb2NuYW1lCT0gInRpbWVvdXRfc3luc2VudCIsDQogCQku ZGF0YQk9ICZ2c190aW1lb3V0X3RhYmxlX2Rvcy50aW1lb3V0W0lQX1ZTX1Nf U1lOX1NFTlRdLA0KIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwNCi0JCS5t b2RlCQk9IDA2NDQsIA0KKwkJLm1vZGUJCT0gMDY0NCwNCiAJCS5wcm9jX2hh bmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLA0KIAl9LA0KIAl7DQpA QCAtMTQ2NSw3ICsxNDY2LDcgQEANCiAJCS5wcm9jbmFtZQk9ICJ0aW1lb3V0 X3N5bnJlY3YiLA0KIAkJLmRhdGEJPSAmdnNfdGltZW91dF90YWJsZV9kb3Mu dGltZW91dFtJUF9WU19TX1NZTl9SRUNWXSwNCiAJCS5tYXhsZW4JCT0gc2l6 ZW9mKGludCksDQotCQkubW9kZQkJPSAwNjQ0LCANCisJCS5tb2RlCQk9IDA2 NDQsDQogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmll cywNCiAJfSwNCiAJew0KQEAgLTE0NzMsNyArMTQ3NCw3IEBADQogCQkucHJv Y25hbWUJPSAidGltZW91dF9maW53YWl0IiwNCiAJCS5kYXRhCT0gJnZzX3Rp bWVvdXRfdGFibGVfZG9zLnRpbWVvdXRbSVBfVlNfU19GSU5fV0FJVF0sDQog CQkubWF4bGVuCQk9IHNpemVvZihpbnQpLA0KLQkJLm1vZGUJCT0gMDY0NCwg DQorCQkubW9kZQkJPSAwNjQ0LA0KIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9j X2RvaW50dmVjX2ppZmZpZXMsDQogCX0sDQogCXsNCkBAIC0xNDg5LDcgKzE0 OTAsNyBAQA0KIAkJLnByb2NuYW1lCT0gInRpbWVvdXRfY2xvc2UiLA0KIAkJ LmRhdGEJPSAmdnNfdGltZW91dF90YWJsZV9kb3MudGltZW91dFtJUF9WU19T X0NMT1NFXSwNCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksDQotCQkubW9k ZQkJPSAwNjQ0LCANCisJCS5tb2RlCQk9IDA2NDQsDQogCQkucHJvY19oYW5k bGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywNCiAJfSwNCiAJew0KQEAg LTE0OTcsNyArMTQ5OCw3IEBADQogCQkucHJvY25hbWUJPSAidGltZW91dF9j bG9zZXdhaXQiLA0KIAkJLmRhdGEJPSAmdnNfdGltZW91dF90YWJsZV9kb3Mu dGltZW91dFtJUF9WU19TX0NMT1NFX1dBSVRdLA0KIAkJLm1heGxlbgkJPSBz aXplb2YoaW50KSwNCi0JCS5tb2RlCQk9IDA2NDQsIA0KKwkJLm1vZGUJCT0g MDY0NCwNCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZm aWVzLA0KIAl9LA0KIAl7DQpAQCAtMTUwNSw3ICsxNTA2LDcgQEANCiAJCS5w cm9jbmFtZQk9ICJ0aW1lb3V0X2xhc3RhY2siLA0KIAkJLmRhdGEJPSAmdnNf dGltZW91dF90YWJsZV9kb3MudGltZW91dFtJUF9WU19TX0xBU1RfQUNLXSwN CiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksDQotCQkubW9kZQkJPSAwNjQ0 LCANCisJCS5tb2RlCQk9IDA2NDQsDQogCQkucHJvY19oYW5kbGVyCT0gJnBy b2NfZG9pbnR2ZWNfamlmZmllcywNCiAJfSwNCiAJew0KQEAgLTE1MTMsNyAr MTUxNCw3IEBADQogCQkucHJvY25hbWUJPSAidGltZW91dF9saXN0ZW4iLA0K IAkJLmRhdGEJPSAmdnNfdGltZW91dF90YWJsZV9kb3MudGltZW91dFtJUF9W U19TX0xJU1RFTl0sDQogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLA0KLQkJ Lm1vZGUJCT0gMDY0NCwgDQorCQkubW9kZQkJPSAwNjQ0LA0KIAkJLnByb2Nf aGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsDQogCX0sDQogCXsN CkBAIC0xNTIxLDcgKzE1MjIsNyBAQA0KIAkJLnByb2NuYW1lCT0gInRpbWVv dXRfc3luYWNrIiwNCiAJCS5kYXRhCT0gJnZzX3RpbWVvdXRfdGFibGVfZG9z LnRpbWVvdXRbSVBfVlNfU19TWU5BQ0tdLA0KIAkJLm1heGxlbgkJPSBzaXpl b2YoaW50KSwNCi0JCS5tb2RlCQk9IDA2NDQsIA0KKwkJLm1vZGUJCT0gMDY0 NCwNCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVz LA0KIAl9LA0KIAl7DQpAQCAtMTUyOSw3ICsxNTMwLDcgQEANCiAJCS5wcm9j bmFtZQk9ICJ0aW1lb3V0X3VkcCIsDQogCQkuZGF0YQk9ICZ2c190aW1lb3V0 X3RhYmxlX2Rvcy50aW1lb3V0W0lQX1ZTX1NfVURQXSwNCiAJCS5tYXhsZW4J CT0gc2l6ZW9mKGludCksDQotCQkubW9kZQkJPSAwNjQ0LCANCisJCS5tb2Rl CQk9IDA2NDQsDQogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNf amlmZmllcywNCiAJfSwNCiAJew0KQEAgLTE1NTMsNiArMTU1NCwxNCBAQA0K IAkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfVlNfRVhQSVJFX05PREVTVF9DT05O LA0KIAkJLnByb2NuYW1lCT0gImV4cGlyZV9ub2Rlc3RfY29ubiIsDQogCQku ZGF0YQkJPSAmc3lzY3RsX2lwX3ZzX2V4cGlyZV9ub2Rlc3RfY29ubiwNCisJ CS5tYXhsZW4JCT0gc2l6ZW9mKGludCksDQorCQkubW9kZQkJPSAwNjQ0LA0K KwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLA0KKwl9LA0KKwl7 DQorCQkuY3RsX25hbWUJPSBORVRfSVBWNF9WU19FWFBJUkVfUVVJRVNDRU5U X1RFTVBMQVRFLA0KKwkJLnByb2NuYW1lCT0gImV4cGlyZV9xdWllc2NlbnRf dGVtcGxhdGUiLA0KKwkJLmRhdGEJCT0gJnN5c2N0bF9pcF92c19leHBpcmVf cXVpZXNjZW50X3RlbXBsYXRlLA0KIAkJLm1heGxlbgkJPSBzaXplb2YoaW50 KSwNCiAJCS5tb2RlCQk9IDA2NDQsDQogCQkucHJvY19oYW5kbGVyCT0gJnBy b2NfZG9pbnR2ZWMsDQo= ---1463811584-572891765-1097000265=:2451-- From Robert.Olsson@data.slu.se Wed Dec 1 09:38:06 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 09:38:10 -0800 (PST) Received: from mail1.slu.se (mail1.slu.se [130.238.96.11]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1Hc487020583 for ; Wed, 1 Dec 2004 09:38:06 -0800 Received: from robur.slu.se (robur.slu.se [130.238.98.12]) by mail1.slu.se (8.12.10/8.12.10) with ESMTP id iB1HbaKO016341; Wed, 1 Dec 2004 18:37:37 +0100 Received: by robur.slu.se (Postfix, from userid 1000) id 0CEF4EC001; Wed, 1 Dec 2004 18:37:37 +0100 (CET) From: Robert Olsson MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16814.353.15446.489489@robur.slu.se> Date: Wed, 1 Dec 2004 18:37:37 +0100 To: sfeldma@pobox.com Cc: Robert Olsson , Lennert Buytenhek , jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit In-Reply-To: <1101919791.5198.15.camel@localhost.localdomain> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> <1101919791.5198.15.camel@localhost.localdomain> X-Mailer: VM 7.18 under Emacs 21.3.1 X-archive-position: 12370 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: Robert.Olsson@data.slu.se Precedence: bulk X-list: netdev Scott Feldman writes: > Thank you Robert for trying it out. > > Well those results are counter-intuitive! We remove Tx interrupts and > Tx descriptor DMA write-backs and get no re-tries, and performance > drops? The only bus activities left are the DMA of buffers to device > and the register writes to increment tail. I'm stumped. I'll need to > get my hands on a faster system. Maybe there is a bus analyzer under > the tree. :-) Huh. I've got a deja-vu feeling. What will happen if we remove almost all events (interrupts) and just have the timer waking up once-in-a-while? --ro From buytenh@wantstofly.org Wed Dec 1 10:30:10 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 10:30:14 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1IU5tj022456 for ; Wed, 1 Dec 2004 10:30:09 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 80D2B2B0ED; Wed, 1 Dec 2004 19:29:43 +0100 (MET) Date: Wed, 1 Dec 2004 19:29:43 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041201182943.GA14470@xi.wantstofly.org> References: <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> User-Agent: Mutt/1.4.1i X-archive-position: 12371 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Tue, Nov 30, 2004 at 05:09:59PM -0800, Scott Feldman wrote: > This doubles the kpps numbers for 60-byte packets. I'd like to see what > happens on higher bus bandwidth systems. Anyone? Dual Xeon 2.4GHz, a 82540EM and a 82541GI both on 32/66 on separate PCI buses. BEFORE performance is approx the same for both, ~620kpps. AFTER performance is ~730kpps, also approx the same for both. (Note: only sending with one NIC at a time.) Once or twice it went into a state where it started spitting out these kinds of messages and never recovered: Dec 1 19:13:18 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out [...] Dec 1 19:13:31 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out [...] Dec 1 19:13:43 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out But overall, looks good. Strange thing that Robert's numbers didn't improve. Doing some more measurements right now. --L From buytenh@wantstofly.org Wed Dec 1 11:56:12 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 11:56:17 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1JuBrN024519 for ; Wed, 1 Dec 2004 11:56:12 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 5BE772B100; Wed, 1 Dec 2004 20:55:50 +0100 (MET) Date: Wed, 1 Dec 2004 20:55:50 +0100 From: Lennert Buytenhek To: Ben Greear Cc: netdev@oss.sgi.com Subject: Re: via-rhine unable to send back-to-back packets? Message-ID: <20041201195550.GC14470@xi.wantstofly.org> References: <20041129222700.GA22918@xi.wantstofly.org> <20041129172540.6b959858.davem@davemloft.net> <20041130064823.GA27872@xi.wantstofly.org> <41ACB0C3.5020408@candelatech.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <41ACB0C3.5020408@candelatech.com> User-Agent: Mutt/1.4.1i X-archive-position: 12372 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Tue, Nov 30, 2004 at 09:41:23AM -0800, Ben Greear wrote: > >Yeah, preamble (8 bytes), CRC (4 bytes), inter-packet gap (12 bytes). > > > >Perhaps the via-rhine simply can't send out packets back-to-back and > >needs 14 byte times of inter-packet gap. I couldn't find any stray +2 > >in the driver anywhere but I'm just checking. > > Couldn't you just sniff the resulting traffic to see if it is too big? Sorry, forgot to mention: I did check that, and the data portion of the packet doesn't appear to be too big. --L From buytenh@wantstofly.org Wed Dec 1 12:02:10 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 12:02:15 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1K2AuT024983 for ; Wed, 1 Dec 2004 12:02:10 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 088982B100; Wed, 1 Dec 2004 21:01:49 +0100 (MET) Date: Wed, 1 Dec 2004 21:01:48 +0100 From: Lennert Buytenhek To: Roger Luethi Cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: via-rhine unable to send back-to-back packets? Message-ID: <20041201200148.GE14470@xi.wantstofly.org> References: <20041129222700.GA22918@xi.wantstofly.org> <20041129172540.6b959858.davem@davemloft.net> <20041130064823.GA27872@xi.wantstofly.org> <20041130122503.0adac947.davem@davemloft.net> <20041130220644.GC29947@k3.hellgate.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041130220644.GC29947@k3.hellgate.ch> User-Agent: Mutt/1.4.1i X-archive-position: 12373 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Tue, Nov 30, 2004 at 11:06:44PM +0100, Roger Luethi wrote: > > > Perhaps the via-rhine simply can't send out packets back-to-back and > > > needs 14 byte times of inter-packet gap. I couldn't find any stray +2 > > > in the driver anywhere but I'm just checking. > > > > Or the via-rhine driver is not programming one of the registers > > proper to get optimal spacing. > > > > As with most Donald Becker drivers, many of the register layouts > > are not documented in the sources so it's not possible to just > > scan the driver looking for potential problems like this. > > For example, maybe the TxConfig register has an "IPG" field but > > we'll never know by reading anything in the driver source. > > Presumably Donald Becker had only access to the publicly available > documentation at the time which is very incomplete and buggy. What > little time my day job leaves for hacking via-rhine is consumed by the > WOL issues that have come up with 2.6.9+, but if you have a specific > question that can be answered by someone who knows the chip but not > necessarily Linux I can try and poke my contacts. "Is the hardware capable of sending back-to-back packets (i.e. with an inter-packet gap of no more than 96 bit times)?" "Can misprogramming the chip lead to the effect that the inter-packet gap is never less than 112 bit times?" Thanks in advance. > Of course, you can always check if VIA's driver has the same issue. If > it doesn't, chances are we can borrow the fix. Hmm, didn't know they had such a driver. Where can I find it? cheers, Lennert From buytenh@wantstofly.org Wed Dec 1 13:36:15 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 13:36:20 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1LaBxK001792 for ; Wed, 1 Dec 2004 13:36:14 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 549B22B100; Wed, 1 Dec 2004 22:35:50 +0100 (MET) Date: Wed, 1 Dec 2004 22:35:50 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041201213550.GF14470@xi.wantstofly.org> References: <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="uZ3hkaAS1mZxFaxD" Content-Disposition: inline In-Reply-To: <20041201182943.GA14470@xi.wantstofly.org> User-Agent: Mutt/1.4.1i X-archive-position: 12374 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev --uZ3hkaAS1mZxFaxD Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Dec 01, 2004 at 07:29:43PM +0100, Lennert Buytenhek wrote: > > This doubles the kpps numbers for 60-byte packets. I'd like to see what > > happens on higher bus bandwidth systems. Anyone? > > Dual Xeon 2.4GHz, a 82540EM and a 82541GI both on 32/66 on separate > PCI buses. > > BEFORE performance is approx the same for both, ~620kpps. > AFTER performance is ~730kpps, also approx the same for both. Pretty graph attached. From ~220B packets or so it does wire speed, but there's still an odd drop in performance around 256B packets (which is also there without your patch.) From 350B packets or so, performance is identical with or without your patch (wire speed.) So. Do you have any other good plans perhaps? :) > Once or twice it went into a state where it started spitting out these > kinds of messages and never recovered: > > Dec 1 19:13:18 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out > [...] > Dec 1 19:13:31 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out > [...] > Dec 1 19:13:43 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out Didn't see this happen anymore. (ifconfig down and then up recovered it both times I saw it happen.) thanks, Lennert --uZ3hkaAS1mZxFaxD Content-Type: image/png Content-Disposition: attachment; filename="feldman.png" Content-Transfer-Encoding: base64 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 AdjzOoqApIL+AAAAAElFTkSuQmCC --uZ3hkaAS1mZxFaxD-- From buytenh@wantstofly.org Wed Dec 1 13:59:45 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 13:59:50 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1Lxirr002754 for ; Wed, 1 Dec 2004 13:59:45 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 7BA6F2B101; Wed, 1 Dec 2004 22:59:23 +0100 (MET) Date: Wed, 1 Dec 2004 22:59:23 +0100 From: Lennert Buytenhek To: Robert Olsson Cc: netdev@oss.sgi.com Subject: Re: [PATCH,pktgen] account for preamble and inter-packet gap Message-ID: <20041201215923.GH14470@xi.wantstofly.org> References: <20041128213251.GA9330@xi.wantstofly.org> <16811.19277.594137.939120@robur.slu.se> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <16811.19277.594137.939120@robur.slu.se> User-Agent: Mutt/1.4.1i X-archive-position: 12375 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Mon, Nov 29, 2004 at 05:16:13PM +0100, Robert Olsson wrote: > I've heard some boxes that didn't do the ipg correctly. Don't know what NIC > this was. We can only estimate stats at the point where we are delivering > packets. Other devices has "true" L2 stats. Just found out the other day that via-rhine appears to do this. > OK. Adding FCS yes kinda compromise and maybe was wrong in this aspect. Let's remove it then? > The only solution I can think of is of having a selectable option in > the config for output stats. To support different L2 layers and with > warning if we are "predicting" L2 statistics. Feel free to extend your > patch. At that point it might be easier to just do it in userspace, no? --L From sjackman@gmail.com Wed Dec 1 14:03:42 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 14:03:48 -0800 (PST) Received: from mproxy.gmail.com (mproxy.gmail.com [216.239.56.249]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB1M3fSQ003184 for ; Wed, 1 Dec 2004 14:03:42 -0800 Received: by mproxy.gmail.com with SMTP id w41so88283cwb for ; Wed, 01 Dec 2004 14:03:18 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:references; b=SdwSV4xL+mxR4tLQ/vd+ZennOM9ZCci6fHRQLD19YMy5YRmYsoPTXwFxMUPmx/1CHUh6LVIUJa766uCakASbKSy1Mowr7dtF5GwaWDRgn69iGZX/sxowkM1Cwo5+7wKsGrfa0IWh0aVFhGeKsPma6K4e/su00/CSvlw4eqleM5M= Received: by 10.11.116.64 with SMTP id o64mr326004cwc; Wed, 01 Dec 2004 14:03:17 -0800 (PST) Received: by 10.11.99.50 with HTTP; Wed, 1 Dec 2004 14:03:17 -0800 (PST) Message-ID: <7f45d939041201140329d0273f@mail.gmail.com> Date: Wed, 1 Dec 2004 14:03:17 -0800 From: Shaun Jackman Reply-To: Shaun Jackman To: netdev@oss.sgi.com, Andrew Morton Subject: Re: Multicast filtering for tun.c [PATCH] In-Reply-To: <20041127011006.03232bb6.akpm@osdl.org> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: <7f45d9390411251715138b35d0@mail.gmail.com> <20041127011006.03232bb6.akpm@osdl.org> X-archive-position: 12376 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sjackman@gmail.com Precedence: bulk X-list: netdev This patch adds multicast filtering to the TUN network driver, for packets being sent from the network device to the character device. It applies against the 2.6.8.1 kernel tree. Cheers, Shaun On Sat, 27 Nov 2004 01:10:06 -0800, Andrew Morton wrote: > Shaun Jackman wrote: > > > > This patch adds multicast filtering to the TUN network driver, > > You should cc netdev@oss.sgi.com on networking stuff. > > You may not get any feedback on this work. Persist. If you get nowhere, > ping me and I'll help push things along. > > > This is my first attempt at sending a patch using gmail. > > Send the patch to yourself first, check that the result applies OK. 2004-11-25 Shaun Jackman * drivers/net/tun.c: Add multicast filtering for packets travelling from the network device to the character device. * include/linux/if_tun.h (tun_struct): Add interface flags, a hardware device addres, and a multicast filter. diff -ur linux-2.6.8.1.orig/drivers/net/tun.c linux-2.6.8.1/drivers/net/tun.c --- linux-2.6.8.1.orig/drivers/net/tun.c 2004-08-14 03:55:23.000000000 -0700 +++ linux-2.6.8.1/drivers/net/tun.c 2004-11-25 17:00:22.000000000 -0800 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -104,11 +105,42 @@ return 0; } -static void tun_net_mclist(struct net_device *dev) +/** Add the specified Ethernet address to this multicast filter. */ +static void +add_multi(u32* filter, const u8* addr) { - /* Nothing to do for multicast filters. - * We always accept all frames. */ - return; + int bit_nr = ether_crc(ETH_ALEN, addr) >> 26; + filter[bit_nr >> 5] |= 1 << (bit_nr & 31); +} + +/** Remove the specified Ethernet addres from this multicast filter. */ +static void +del_multi(u32* filter, const u8* addr) +{ + int bit_nr = ether_crc(ETH_ALEN, addr) >> 26; + filter[bit_nr >> 5] &= ~(1 << (bit_nr & 31)); +} + +/** Update the list of multicast groups to which the network device belongs. + * This list is used to filter packets being sent from the character device to + * the network device. */ +static void +tun_net_mclist(struct net_device *dev) +{ + struct tun_struct *tun = netdev_priv(dev); + const struct dev_mc_list *mclist; + int i; + DBG(KERN_DEBUG "%s: tun_net_mclist: mc_count %d\n", + dev->name, dev->mc_count); + memset(tun->chr_filter, 0, sizeof tun->chr_filter); + for (i = 0, mclist = dev->mc_list; i < dev->mc_count && mclist != NULL; + i++, mclist = mclist->next) { + add_multi(tun->net_filter, mclist->dmi_addr); + DBG(KERN_DEBUG "%s: tun_net_mclist: %x:%x:%x:%x:%x:%x\n", + dev->name, + mclist->dmi_addr[0], mclist->dmi_addr[1], mclist->dmi_addr[2], + mclist->dmi_addr[3], mclist->dmi_addr[4], mclist->dmi_addr[5]); + } } static struct net_device_stats *tun_net_stats(struct net_device *dev) @@ -301,6 +333,10 @@ add_wait_queue(&tun->read_wait, &wait); while (len) { + const u8 ones[ ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + u8 addr[ ETH_ALEN]; + int bit_nr; + current->state = TASK_INTERRUPTIBLE; /* Read frames from the queue */ @@ -320,10 +356,37 @@ } netif_start_queue(tun->dev); - ret = tun_put_user(tun, skb, (struct iovec *) iv, len); - - kfree_skb(skb); - break; + /** Decide whether to accept this packet. This code is designed to + * behave identically to an Ethernet interface. Accept the packet if + * - we are promiscuous. + * - the packet is addressed to us. + * - the packet is broadcast. + * - the packet is multicast and + * - we are multicast promiscous. + * - we belong to the multicast group. + */ + memcpy(addr, skb->data, min(sizeof addr, skb->len)); + bit_nr = ether_crc(sizeof addr, addr) >> 26; + if ((tun->if_flags & IFF_PROMISC) || + memcmp(addr, tun->dev_addr, sizeof addr) == 0 || + memcmp(addr, ones, sizeof addr) == 0 || + (((addr[0] == 1 && addr[1] == 0 && addr[2] == 0x5e) || + (addr[0] == 0x33 && addr[1] == 0x33)) && + ((tun->if_flags & IFF_ALLMULTI) || + (tun->chr_filter[bit_nr >> 5] & (1 << (bit_nr & 31)))))) { + DBG(KERN_DEBUG "%s: tun_chr_readv: accepted: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, addr[0], addr[1], addr[2], + addr[3], addr[4], addr[5]); + ret = tun_put_user(tun, skb, (struct iovec *) iv, len); + kfree_skb(skb); + break; + } else { + DBG(KERN_DEBUG "%s: tun_chr_readv: rejected: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, addr[0], addr[1], addr[2], + addr[3], addr[4], addr[5]); + kfree_skb(skb); + continue; + } } current->state = TASK_RUNNING; @@ -417,6 +480,12 @@ tun = netdev_priv(dev); tun->dev = dev; tun->flags = flags; + /* Be promiscuous by default to maintain previous behaviour. */ + tun->if_flags = IFF_PROMISC; + /* Generate random Ethernet address. */ + *(u16 *)tun->dev_addr = htons(0x00FF); + get_random_bytes(tun->dev_addr + sizeof(u16), 4); + memset(tun->chr_filter, 0, sizeof tun->chr_filter); tun_net_init(dev); @@ -457,13 +526,16 @@ unsigned int cmd, unsigned long arg) { struct tun_struct *tun = file->private_data; + void __user* argp = (void __user*)arg; + struct ifreq ifr; + + if (cmd == TUNSETIFF || _IOC_TYPE(cmd) == 0x89) + if (copy_from_user(&ifr, argp, sizeof ifr)) + return -EFAULT; if (cmd == TUNSETIFF && !tun) { - struct ifreq ifr; int err; - if (copy_from_user(&ifr, (void __user *)arg, sizeof(ifr))) - return -EFAULT; ifr.ifr_name[IFNAMSIZ-1] = '\0'; rtnl_lock(); @@ -473,7 +545,7 @@ if (err) return err; - if (copy_to_user((void __user *)arg, &ifr, sizeof(ifr))) + if (copy_to_user(argp, &ifr, sizeof(ifr))) return -EFAULT; return 0; } @@ -519,6 +591,61 @@ break; #endif + case SIOCGIFFLAGS: + ifr.ifr_flags = tun->if_flags; + if (copy_to_user( argp, &ifr, sizeof ifr)) + return -EFAULT; + return 0; + + case SIOCSIFFLAGS: + /** Set the character device's interface flags. Currently only + * IFF_PROMISC and IFF_ALLMULTI are used. */ + tun->if_flags = ifr.ifr_flags; + DBG(KERN_INFO "%s: interface flags 0x%lx\n", + tun->dev->name, tun->if_flags); + return 0; + + case SIOCGIFHWADDR: + memcpy(ifr.ifr_hwaddr.sa_data, tun->dev_addr, + min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr)); + if (copy_to_user( argp, &ifr, sizeof ifr)) + return -EFAULT; + return 0; + + case SIOCSIFHWADDR: + /** Set the character device's hardware address. This is used when + * filtering packets being sent from the network device to the character + * device. */ + memcpy(tun->dev_addr, ifr.ifr_hwaddr.sa_data, + min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr)); + DBG(KERN_DEBUG "%s: set hardware address: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + tun->dev_addr[0], tun->dev_addr[1], tun->dev_addr[2], + tun->dev_addr[3], tun->dev_addr[4], tun->dev_addr[5]); + return 0; + + case SIOCADDMULTI: + /** Add the specified group to the character device's multicast filter + * list. */ + add_multi(tun->chr_filter, ifr.ifr_hwaddr.sa_data); + DBG(KERN_DEBUG "%s: add multi: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); + return 0; + + case SIOCDELMULTI: + /** Remove the specified group from the character device's multicast + * filter list. */ + del_multi(tun->chr_filter, ifr.ifr_hwaddr.sa_data); + DBG(KERN_DEBUG "%s: del multi: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); + return 0; + default: return -EINVAL; }; diff -ur linux-2.6.8.1.orig/include/linux/if_tun.h linux-2.6.8.1/include/linux/if_tun.h --- linux-2.6.8.1.orig/include/linux/if_tun.h 2004-08-14 03:55:09.000000000 -0700 +++ linux-2.6.8.1/include/linux/if_tun.h 2004-11-25 16:47:31.000000000 -0800 @@ -45,6 +45,11 @@ struct fasync_struct *fasync; + unsigned long if_flags; + u8 dev_addr[ETH_ALEN]; + u32 chr_filter[2]; + u32 net_filter[2]; + #ifdef TUN_DEBUG int debug; #endif From jketreno@linux.intel.com Wed Dec 1 17:35:30 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 17:35:45 -0800 (PST) Received: from orsfmr003.jf.intel.com (fmr18.intel.com [134.134.136.17]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB21ZQbP012623 for ; Wed, 1 Dec 2004 17:35:30 -0800 Received: from talaria.jf.intel.com (talaria.jf.intel.com [10.7.209.7]) by orsfmr003.jf.intel.com (8.12.10/8.12.10/d: major-outer.mc,v 1.1 2004/09/17 17:50:56 root Exp $) with ESMTP id iB21Z0xK001499 for ; Thu, 2 Dec 2004 01:35:00 GMT Received: from linux.intel.com (vpnfm001-139-dhcp-client.fm.intel.com [10.19.13.139]) by talaria.jf.intel.com (8.12.9-20030918-01/8.12.9/d: major-inner.mc,v 1.11 2004/07/29 22:51:53 root Exp $) with ESMTP id iB21Q9uc018759 for ; Thu, 2 Dec 2004 01:26:09 GMT Message-ID: <41AE7143.80505@linux.intel.com> Date: Wed, 01 Dec 2004 19:34:59 -0600 From: James Ketrenos User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Netdev Subject: Steps for netdev-2.6 inclusion? Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.31 (www . roaringpenguin . com / mimedefang) X-archive-position: 12377 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jketreno@linux.intel.com Precedence: bulk X-list: netdev Ok, its been a long time coming, but it appears the ipw* wireless drivers are to the point where being more proactive at getting them into the kernel is appropriate (at least based on the frequency of emails I'm getting of 'why isn't this in mainline?') So, what would be the set of steps required to get a version in the queue for inclusion? The drivers we have are the ipw2100 (supporting the Intel PRO/Wireless 2100 Network Connection adapter) and ipw2200 (supporting the Intel PRO/Wireless 2200BG and 2915ABG Network Connection adapters). There is also a shared generic ieee 802.11 stack (ieee80211*.ko) supporting 802.11b, g, and a for BSS and IBSS modes. The ipw2100 recently was stamped 1.0.0, which means we've put it through a validation and stabalization phase. As we want to try and ensure end users don't have to spend all night fighting with their wireless connection just because they've updated the kernel, we've adopted the following version numbering scheme for the ipw* drivers in the form of of x.y.z, where: .z increases from snapshot to snapshot (pushed out as tarballs on SourceForge) .y increases (and sets .z to 0) when a snapshot has gone through a regression validation cycle. .x increases if there are significant functionality changes to the driver. The idea is to then only have x.y.0 (stable/tested) versions go out for wider distribution (kernel inclusion). For those that are curious, the tip of development for the ipw2100, ipw2200, and ieee80211 stack is available at bk://ipw.bkbits.net/ipw-2.6. Given what I described above, would it be most appropriate to create a ipw-2.6-stable bk tree with the parent as netdev-2.6 that we put the stable versions of the ipw* drivers into, and then request that be pulled? The ipw-2.6 tree could then continue to represent the development tip. I've searched around for some BKMs on this, but haven't found a whole lot. The ipw2100 1.0.0 snapshot (and newer versions) can be found at http://ipw2100.sf.net/#downloads. The latest ipw2200 snapshot (0.15) is available at http://ipw2200.sf.net/#downloads. Also, we have a Bugzilla database setup for the above drivers at http://bughost.org for those that are curious about current remaining issues, etc. Thanks, James From horms@koto.vergenet.net Wed Dec 1 20:31:46 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 20:31:54 -0800 (PST) Received: from koto.vergenet.net (koto.vergenet.net [210.128.90.7]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id iB24VjpX020259 for ; Wed, 1 Dec 2004 20:31:45 -0800 Received: (qmail 26081 invoked by uid 7100); 2 Dec 2004 04:15:29 -0000 Date: Thu, 2 Dec 2004 13:07:20 +0900 From: Horms To: Wensong Zhang Cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: [PATCH] [IPVS] add a sysctl variable to expire quiescent template Message-ID: <20041202040717.GF32190@verge.net.au> Mail-Followup-To: Wensong Zhang , "David S. Miller" , netdev@oss.sgi.com References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Cluestick: seven User-Agent: Mutt/1.5.6+20040907i X-archive-position: 12378 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: horms@verge.net.au Precedence: bulk X-list: netdev On Thu, Dec 02, 2004 at 12:48:26AM +0800, Wensong Zhang wrote: > > > Hi Dave, > > Here is the patch from Horms to add a sysctl > variable to expire quiescent templat. Please check and apply them to > kernel 2.4 and 2.6 respectively. > > Thanks, > > Wensong I can do this too, just in case you need it. Signed-off-by: Horms > # This is a BitKeeper generated diff -Nru style patch. > # > # ChangeSet > # 2004/12/02 00:02:48+08:00 wensong@linux-vs.org > # [IPVS] add a sysctl variable to expire quiescent template > # > # The patch is from Horms > # > # net/ipv4/ipvs/ip_vs_ctl.c > # 2004/12/02 00:02:38+08:00 wensong@linux-vs.org +4 -0 > # set sysctl_ip_vs_expire_quiescent_template > # > # net/ipv4/ipvs/ip_vs_conn.c > # 2004/12/02 00:02:37+08:00 wensong@linux-vs.org +3 -1 > # don't use quiescent template if the expire_quiescent_template is enabled > # > # include/net/ip_vs.h > # 2004/12/02 00:02:37+08:00 wensong@linux-vs.org +2 -0 > # add the sysctl_ip_vs_expire_quiescent_template > # > diff -Nru a/include/net/ip_vs.h b/include/net/ip_vs.h > --- a/include/net/ip_vs.h 2004-12-02 00:16:36 +08:00 > +++ b/include/net/ip_vs.h 2004-12-02 00:16:36 +08:00 > @@ -317,6 +317,7 @@ > NET_IPV4_VS_EXPIRE_NODEST_CONN=23, > NET_IPV4_VS_SYNC_THRESHOLD=24, > NET_IPV4_VS_NAT_ICMP_SEND=25, > + NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE=26, > NET_IPV4_VS_LAST > }; > > @@ -700,6 +701,7 @@ > */ > extern int sysctl_ip_vs_cache_bypass; > extern int sysctl_ip_vs_expire_nodest_conn; > +extern int sysctl_ip_vs_expire_quiescent_template; > extern int sysctl_ip_vs_sync_threshold; > extern int sysctl_ip_vs_nat_icmp_send; > extern struct ip_vs_stats ip_vs_stats; > diff -Nru a/net/ipv4/ipvs/ip_vs_conn.c b/net/ipv4/ipvs/ip_vs_conn.c > --- a/net/ipv4/ipvs/ip_vs_conn.c 2004-12-02 00:16:36 +08:00 > +++ b/net/ipv4/ipvs/ip_vs_conn.c 2004-12-02 00:16:36 +08:00 > @@ -1131,7 +1131,9 @@ > * Checking the dest server status. > */ > if ((dest == NULL) || > - !(dest->flags & IP_VS_DEST_F_AVAILABLE)) { > + !(dest->flags & IP_VS_DEST_F_AVAILABLE) || > + (sysctl_ip_vs_expire_quiescent_template && > + (atomic_read(&dest->weight) == 0))) { > IP_VS_DBG(9, "check_template: dest not available for " > "protocol %s s:%u.%u.%u.%u:%d v:%u.%u.%u.%u:%d " > "-> d:%u.%u.%u.%u:%d\n", > diff -Nru a/net/ipv4/ipvs/ip_vs_ctl.c b/net/ipv4/ipvs/ip_vs_ctl.c > --- a/net/ipv4/ipvs/ip_vs_ctl.c 2004-12-02 00:16:36 +08:00 > +++ b/net/ipv4/ipvs/ip_vs_ctl.c 2004-12-02 00:16:36 +08:00 > @@ -74,6 +74,7 @@ > static int sysctl_ip_vs_am_droprate = 10; > int sysctl_ip_vs_cache_bypass = 0; > int sysctl_ip_vs_expire_nodest_conn = 0; > +int sysctl_ip_vs_expire_quiescent_template = 0; > int sysctl_ip_vs_sync_threshold = 3; > int sysctl_ip_vs_nat_icmp_send = 0; > > @@ -1439,6 +1440,9 @@ > &proc_dointvec}, > {NET_IPV4_VS_NAT_ICMP_SEND, "nat_icmp_send", > &sysctl_ip_vs_nat_icmp_send, sizeof(int), 0644, NULL, > + &proc_dointvec}, > + {NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE, "expire_quiescent_template", > + &sysctl_ip_vs_expire_quiescent_template, sizeof(int), 0644, NULL, > &proc_dointvec}, > {0}}, > {{NET_IPV4_VS, "vs", NULL, 0, 0555, ipv4_vs_table.vs_vars}, > # This is a BitKeeper generated diff -Nru style patch. > # > # ChangeSet > # 2004/12/02 00:42:15+08:00 wensong@linux-vs.org > # [IPVS] add a sysctl variable to expire quiescent template > # > # The patch is from Horms > # > # net/ipv4/ipvs/ip_vs_ctl.c > # 2004/12/02 00:41:56+08:00 wensong@linux-vs.org +20 -11 > # set the sysctl_ip_vs_expire_quiescent_template > # > # net/ipv4/ipvs/ip_vs_conn.c > # 2004/12/02 00:41:56+08:00 wensong@linux-vs.org +3 -1 > # don't use quiescent template if the expire_quiescent_template is enabled > # > # include/net/ip_vs.h > # 2004/12/02 00:41:56+08:00 wensong@linux-vs.org +2 -0 > # add the sysctl_ip_vs_expire_quiescent_template prototype > # > diff -Nru a/include/net/ip_vs.h b/include/net/ip_vs.h > --- a/include/net/ip_vs.h 2004-12-02 00:43:14 +08:00 > +++ b/include/net/ip_vs.h 2004-12-02 00:43:14 +08:00 > @@ -358,6 +358,7 @@ > NET_IPV4_VS_EXPIRE_NODEST_CONN=23, > NET_IPV4_VS_SYNC_THRESHOLD=24, > NET_IPV4_VS_NAT_ICMP_SEND=25, > + NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE=26, > NET_IPV4_VS_LAST > }; > > @@ -879,6 +880,7 @@ > */ > extern int sysctl_ip_vs_cache_bypass; > extern int sysctl_ip_vs_expire_nodest_conn; > +extern int sysctl_ip_vs_expire_quiescent_template; > extern int sysctl_ip_vs_sync_threshold[2]; > extern int sysctl_ip_vs_nat_icmp_send; > extern struct ip_vs_stats ip_vs_stats; > diff -Nru a/net/ipv4/ipvs/ip_vs_conn.c b/net/ipv4/ipvs/ip_vs_conn.c > --- a/net/ipv4/ipvs/ip_vs_conn.c 2004-12-02 00:43:14 +08:00 > +++ b/net/ipv4/ipvs/ip_vs_conn.c 2004-12-02 00:43:14 +08:00 > @@ -453,7 +453,9 @@ > * Checking the dest server status. > */ > if ((dest == NULL) || > - !(dest->flags & IP_VS_DEST_F_AVAILABLE)) { > + !(dest->flags & IP_VS_DEST_F_AVAILABLE) || > + (sysctl_ip_vs_expire_quiescent_template && > + (atomic_read(&dest->weight) == 0))) { > IP_VS_DBG(9, "check_template: dest not available for " > "protocol %s s:%u.%u.%u.%u:%d v:%u.%u.%u.%u:%d " > "-> d:%u.%u.%u.%u:%d\n", > diff -Nru a/net/ipv4/ipvs/ip_vs_ctl.c b/net/ipv4/ipvs/ip_vs_ctl.c > --- a/net/ipv4/ipvs/ip_vs_ctl.c 2004-12-02 00:43:14 +08:00 > +++ b/net/ipv4/ipvs/ip_vs_ctl.c 2004-12-02 00:43:14 +08:00 > @@ -75,6 +75,7 @@ > static int sysctl_ip_vs_am_droprate = 10; > int sysctl_ip_vs_cache_bypass = 0; > int sysctl_ip_vs_expire_nodest_conn = 0; > +int sysctl_ip_vs_expire_quiescent_template = 0; > int sysctl_ip_vs_sync_threshold[2] = { 3, 50 }; > int sysctl_ip_vs_nat_icmp_send = 0; > > @@ -1447,9 +1448,9 @@ > { > .ctl_name = NET_IPV4_VS_TO_ES, > .procname = "timeout_established", > - .data = &vs_timeout_table_dos.timeout[IP_VS_S_ESTABLISHED], > + .data = &vs_timeout_table_dos.timeout[IP_VS_S_ESTABLISHED], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1457,7 +1458,7 @@ > .procname = "timeout_synsent", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_SYN_SENT], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1465,7 +1466,7 @@ > .procname = "timeout_synrecv", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_SYN_RECV], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1473,7 +1474,7 @@ > .procname = "timeout_finwait", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_FIN_WAIT], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1489,7 +1490,7 @@ > .procname = "timeout_close", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_CLOSE], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1497,7 +1498,7 @@ > .procname = "timeout_closewait", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_CLOSE_WAIT], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1505,7 +1506,7 @@ > .procname = "timeout_lastack", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_LAST_ACK], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1513,7 +1514,7 @@ > .procname = "timeout_listen", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_LISTEN], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1521,7 +1522,7 @@ > .procname = "timeout_synack", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_SYNACK], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1529,7 +1530,7 @@ > .procname = "timeout_udp", > .data = &vs_timeout_table_dos.timeout[IP_VS_S_UDP], > .maxlen = sizeof(int), > - .mode = 0644, > + .mode = 0644, > .proc_handler = &proc_dointvec_jiffies, > }, > { > @@ -1553,6 +1554,14 @@ > .ctl_name = NET_IPV4_VS_EXPIRE_NODEST_CONN, > .procname = "expire_nodest_conn", > .data = &sysctl_ip_vs_expire_nodest_conn, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = &proc_dointvec, > + }, > + { > + .ctl_name = NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE, > + .procname = "expire_quiescent_template", > + .data = &sysctl_ip_vs_expire_quiescent_template, > .maxlen = sizeof(int), > .mode = 0644, > .proc_handler = &proc_dointvec, -- Horms From sfeldma@pobox.com Wed Dec 1 22:11:17 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 22:11:23 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB26BGK4022289 for ; Wed, 1 Dec 2004 22:11:17 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 2F5622FA235; Thu, 2 Dec 2004 01:10:55 -0500 (EST) Received: from [192.168.2.72] (adsl-68-127-20-190.dsl.pltn13.pacbell.net [68.127.20.190]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 585752F9F7E; Thu, 2 Dec 2004 01:10:45 -0500 (EST) Subject: Re: [E1000-devel] Transmission limit From: Scott Feldman Reply-To: sfeldma@pobox.com To: Lennert Buytenhek Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <20041201213550.GF14470@xi.wantstofly.org> References: <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> Content-Type: text/plain Message-Id: <1101967983.4782.9.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Wed, 01 Dec 2004 22:13:33 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12379 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Wed, 2004-12-01 at 13:35, Lennert Buytenhek wrote: > Pretty graph attached. From ~220B packets or so it does wire speed, but > there's still an odd drop in performance around 256B packets (which is > also there without your patch.) From 350B packets or so, performance is > identical with or without your patch (wire speed.) Seems this is helping PCI nics but not PCI-X. I was using PCI 32/33. Can't explain the dip around 256B. > So. Do you have any other good plans perhaps? :) Idea#1 Is the write of TDT causing interference with DMA transactions? In addition to my patch, what happens if you bump the Tx tail every n packets, where n is like 16 or 32 or 64? if((i % 16) == 0) E1000_REG_WRITE(&adapter->hw, TDT, i); This might piss the NETDEV timer off if the send count isn't a multiple of n, so you might want to disable netdev->tx_timeout. Idea#2 The Ultimate: queue up 4096 packets and then write TDT once to send all 4096 in one shot. Well, maybe a few less that 4096 so we don't wrap the ring. How about pkt_size = 4000? Take my patch and change the timer call in e1000_xmit_frame from jiffies + 1 to jiffies + HZ This will schedule the cleanup of the skbs 1 second after the first queue, so we shouldn't be doing any cleanup while the 4000 packets are DMA'ed. Oh, and change the tail write to if((i % 4000) == 0) E1000_REG_WRITE(&adapter->hw, TDT, i); Of course you'll need to close/open the driver after each run. Idea#3 http://www.mail-archive.com/freebsd-net@freebsd.org/msg10826.html Set TXDMAC to 0 in e1000_configure_tx. > > Once or twice it went into a state where it started spitting out these > > kinds of messages and never recovered: > > > > Dec 1 19:13:18 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out > > [...] > > Dec 1 19:13:31 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out > > [...] > > Dec 1 19:13:43 phi kernel: NETDEV WATCHDOG: eth1: transmit timed out > > Didn't see this happen anymore. (ifconfig down and then up recovered it > both times I saw it happen.) Well, it's probably not a HW bug that's causing the reset; it's probably some bug with my patch. -scott From jgarzik@pobox.com Wed Dec 1 22:19:07 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 22:19:11 -0800 (PST) Received: from www.linux.org.uk (IDENT:93@parcelfarce.linux.theplanet.co.uk [195.92.249.252]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB26J6O8022740 for ; Wed, 1 Dec 2004 22:19:06 -0800 Received: from rdu74-155-169.nc.rr.com ([24.74.155.169] helo=[10.10.10.88]) by www.linux.org.uk with asmtp (TLSv1:AES256-SHA:256) (Exim 4.33) id 1CZkId-00016k-W9; Thu, 02 Dec 2004 06:18:44 +0000 Message-ID: <41AEB3B8.2000406@pobox.com> Date: Thu, 02 Dec 2004 01:18:32 -0500 From: Jeff Garzik User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040922 X-Accept-Language: en-us, en MIME-Version: 1.0 To: James Ketrenos CC: Netdev Subject: Re: Steps for netdev-2.6 inclusion? References: <41AE7143.80505@linux.intel.com> In-Reply-To: <41AE7143.80505@linux.intel.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-archive-position: 12380 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jgarzik@pobox.com Precedence: bulk X-list: netdev It's fairly easy, just email me and netdev the patch for inclusion, and it'll get reviewed. Once review issues are addressed, I'll merge it immediately, which causes it to be automatically propagated to Andrew Morton's -mm tree for testing. Once consensus agrees that we can push this + HostAP upstream, that's an easy 10-minute task. One potential showstopper is firmware crapola: I'm concerned about a situation where we have drivers in the kernel, but the firmware must be downloaded from SourceForge or somesuch. IOW, the kernel driver as-is is useless without a differently-licensed firmware. Comments? Jeff From akpm@osdl.org Wed Dec 1 23:34:51 2004 Received: with ECARTIS (v1.0.0; list netdev); Wed, 01 Dec 2004 23:34:55 -0800 (PST) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB27YpGI024362 for ; Wed, 1 Dec 2004 23:34:51 -0800 Received: from bix (build.pdx.osdl.net [172.20.1.2]) by mail.osdl.org (8.11.6/8.11.6) with SMTP id iB27YM912409; Wed, 1 Dec 2004 23:34:22 -0800 Date: Wed, 1 Dec 2004 23:34:00 -0800 From: Andrew Morton To: Shaun Jackman Cc: netdev@oss.sgi.com Subject: Re: Multicast filtering for tun.c [PATCH] Message-Id: <20041201233400.45078efe.akpm@osdl.org> In-Reply-To: <7f45d939041201140329d0273f@mail.gmail.com> References: <7f45d9390411251715138b35d0@mail.gmail.com> <20041127011006.03232bb6.akpm@osdl.org> <7f45d939041201140329d0273f@mail.gmail.com> X-Mailer: Sylpheed version 0.9.7 (GTK+ 1.2.10; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12381 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: akpm@osdl.org Precedence: bulk X-list: netdev Shaun Jackman wrote: > > This patch adds multicast filtering to the TUN network driver, for > packets being sent from the network device to the character device. It > applies against the 2.6.8.1 kernel tree. > > ... Minor points: > diff -ur linux-2.6.8.1.orig/drivers/net/tun.c linux-2.6.8.1/drivers/net/tun.c > --- linux-2.6.8.1.orig/drivers/net/tun.c 2004-08-14 03:55:23.000000000 -0700 > +++ linux-2.6.8.1/drivers/net/tun.c 2004-11-25 17:00:22.000000000 -0800 > @@ -41,6 +41,7 @@ > #include > #include > #include > +#include You're sure this shouldn't be using crc-ccitt? > +del_multi(u32* filter, const u8* addr) del_multi(u32 *filter, const u8 *addr) would be a more typical layout. > static struct net_device_stats *tun_net_stats(struct net_device *dev) > @@ -301,6 +333,10 @@ > > add_wait_queue(&tun->read_wait, &wait); > while (len) { > + const u8 ones[ ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; The space after the `[' is gratuitous. This array will be allocated onthe stack and populated by hand each time this function is called. It should be made static. > + u8 addr[ ETH_ALEN]; extraneous space. > + memcpy(addr, skb->data, min(sizeof addr, skb->len)); We normally put parentheses around the argument of the sizeof operator, for no particular reason ;) > + if (copy_from_user(&ifr, argp, sizeof ifr)) Ditto > + case SIOCGIFFLAGS: > + ifr.ifr_flags = tun->if_flags; > + if (copy_to_user( argp, &ifr, sizeof ifr)) extraneous space. > + if (copy_to_user( argp, &ifr, sizeof ifr)) ditto > + DBG(KERN_DEBUG "%s: add multi: %x:%x:%x:%x:%x:%x\n", > + tun->dev->name, > + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], > + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], > + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); Why all the typecasts? > + case SIOCDELMULTI: > + /** Remove the specified group from the character device's multicast > + * filter list. */ > + del_multi(tun->chr_filter, ifr.ifr_hwaddr.sa_data); > + DBG(KERN_DEBUG "%s: del multi: %x:%x:%x:%x:%x:%x\n", > + tun->dev->name, > + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], > + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], > + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); ditto. From cranium2003@yahoo.com Thu Dec 2 01:44:59 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 01:45:11 -0800 (PST) Received: from web41411.mail.yahoo.com (web41411.mail.yahoo.com [66.218.93.77]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id iB29ix1n000503 for ; Thu, 2 Dec 2004 01:44:59 -0800 Received: (qmail 39134 invoked by uid 60001); 2 Dec 2004 09:44:33 -0000 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; b=k92BT0y43RKYSYKMggOHP5GR4uBRRgWyRcOAX5JmqyP/9qc7ObXyWrE7P9ymSzL+66OC8Ent972edeO7XCBfxbGmHyDKsnRKOhZZP1xOKL0zYIpVe3+rRwO6a4AMd3PpgkzKY/dpAceYFejgq5HEi0RIiLQRnYBcF1ypdL5sjWo= ; Message-ID: <20041202094433.39132.qmail@web41411.mail.yahoo.com> Received: from [202.56.231.117] by web41411.mail.yahoo.com via HTTP; Thu, 02 Dec 2004 01:44:33 PST Date: Thu, 2 Dec 2004 01:44:33 -0800 (PST) From: cranium2003 Subject: Maximum packet size in kernel To: kernerl mail Cc: net dev MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-archive-position: 12382 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cranium2003@yahoo.com Precedence: bulk X-list: netdev hello, I want to know how much maximum packet size is assigned by alloc_skb in kernel? and is there any extra space remains in packet allocated memory? Does it dependent on CPU cache? regards, cranium. __________________________________ Do you Yahoo!? The all-new My Yahoo! - What will yours do? http://my.yahoo.com From rl@hellgate.ch Thu Dec 2 03:02:30 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 03:02:36 -0800 (PST) Received: from mail2.bluewin.ch (mail2.bluewin.ch [195.186.4.73]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2B2TXn004351 for ; Thu, 2 Dec 2004 03:02:30 -0800 Received: from k3.hellgate.ch (83.77.143.24) by mail2.bluewin.ch (Bluewin AG 7.0.031.3) id 41888440002B727B; Thu, 2 Dec 2004 11:01:17 +0000 Received: by k3.hellgate.ch (Postfix, from userid 1000) id 8BCF691F5FB; Thu, 2 Dec 2004 12:01:20 +0100 (CET) Date: Thu, 2 Dec 2004 12:01:20 +0100 From: Roger Luethi To: Lennert Buytenhek Cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: via-rhine unable to send back-to-back packets? Message-ID: <20041202110120.GA16597@k3.hellgate.ch> References: <20041129222700.GA22918@xi.wantstofly.org> <20041129172540.6b959858.davem@davemloft.net> <20041130064823.GA27872@xi.wantstofly.org> <20041130122503.0adac947.davem@davemloft.net> <20041130220644.GC29947@k3.hellgate.ch> <20041201200148.GE14470@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041201200148.GE14470@xi.wantstofly.org> X-Operating-System: Linux 2.6.10-rc2-bk11 on i686 X-GPG-Fingerprint: 92 F4 DC 20 57 46 7B 95 24 4E 9E E7 5A 54 DC 1B X-GPG: 1024/80E744BD wwwkeys.ch.pgp.net User-Agent: Mutt/1.5.6i X-archive-position: 12383 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: rl@hellgate.ch Precedence: bulk X-list: netdev [Thanks to A.J. from VNT for the answer which I am relaying below.] On Wed, 01 Dec 2004 21:01:48 +0100, Lennert Buytenhek wrote: > "Is the hardware capable of sending back-to-back packets (i.e. with > an inter-packet gap of no more than 96 bit times)?" => YES. All the VIA Rhine Fast Ethernet controllers follows the IEEE standard (inter-frame gap is 96 bit time) and it is hardware fixed and NOT programmable. > "Can misprogramming the chip lead to the effect that the inter-packet > gap is never less than 112 bit times?" => NO, it is fixed and neither software nor board level change could modify the inter-frame gap of VIA Rhine Fast Ethernet controller. > > Of course, you can always check if VIA's driver has the same issue. If > > it doesn't, chances are we can borrow the fix. > > Hmm, didn't know they had such a driver. Where can I find it? => in http://www.viaarena.com/ , choose "downloads" => "Drivers" => choose target OS (e.g. Fedora Core Linux) => "Ethernet (Networking/LAN)" => choose the type of your Ethernet controller => click to download the combo driver software package. From buytenh@wantstofly.org Thu Dec 2 03:09:59 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 03:10:04 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2B9wjF004946 for ; Thu, 2 Dec 2004 03:09:59 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 17EA82B0ED; Thu, 2 Dec 2004 12:09:37 +0100 (MET) Date: Thu, 2 Dec 2004 12:09:37 +0100 From: Lennert Buytenhek To: Roger Luethi Cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: via-rhine unable to send back-to-back packets? Message-ID: <20041202110937.GC24069@xi.wantstofly.org> References: <20041129222700.GA22918@xi.wantstofly.org> <20041129172540.6b959858.davem@davemloft.net> <20041130064823.GA27872@xi.wantstofly.org> <20041130122503.0adac947.davem@davemloft.net> <20041130220644.GC29947@k3.hellgate.ch> <20041201200148.GE14470@xi.wantstofly.org> <20041202110120.GA16597@k3.hellgate.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041202110120.GA16597@k3.hellgate.ch> User-Agent: Mutt/1.4.1i X-archive-position: 12384 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Thu, Dec 02, 2004 at 12:01:20PM +0100, Roger Luethi wrote: > On Wed, 01 Dec 2004 21:01:48 +0100, Lennert Buytenhek wrote: > > "Is the hardware capable of sending back-to-back packets (i.e. with > > an inter-packet gap of no more than 96 bit times)?" > > => YES. All the VIA Rhine Fast Ethernet controllers follows the IEEE > standard (inter-frame gap is 96 bit time) and it is hardware fixed and > NOT programmable. As far as I know, the IEEE standard only mandates a certain minimum inter-frame gap. Thanks for the information, I'll have a look at the VIA driver. --L From jgarzik@pobox.com Thu Dec 2 03:25:43 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 03:25:49 -0800 (PST) Received: from www.linux.org.uk (IDENT:93@parcelfarce.linux.theplanet.co.uk [195.92.249.252]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2BPgmF005571 for ; Thu, 2 Dec 2004 03:25:43 -0800 Received: from rdu74-155-169.nc.rr.com ([24.74.155.169] helo=[10.10.10.88]) by www.linux.org.uk with asmtp (TLSv1:AES256-SHA:256) (Exim 4.33) id 1CZp5N-00027Y-1w; Thu, 02 Dec 2004 11:25:21 +0000 Message-ID: <41AEFB95.8000100@pobox.com> Date: Thu, 02 Dec 2004 06:25:09 -0500 From: Jeff Garzik User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040922 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Stephen Hemminger CC: "David S. Miller" , netdev@oss.sgi.com Subject: Re: [PATCH] b44: allow ethtool get_settings when down References: <20041129094523.3185c64c@zqx3.pdx.osdl.net> In-Reply-To: <20041129094523.3185c64c@zqx3.pdx.osdl.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-archive-position: 12385 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jgarzik@pobox.com Precedence: bulk X-list: netdev Stephen Hemminger wrote: > The FC and Suse startup scripts use ethtool to check for link present. This has > problems on my laptop with Broadcom because it quieries settings before > bringing link up. The problem is driver returns EAGAIN when queried for > settings but not up. Just go ahead and return values anyway, the supported and link > state values will be correct, speed will end up being 10BaseT/Half which is a > reasonable default. > > Signed-off-by: Stephen Hemminger > > diff -Nru a/drivers/net/b44.c b/drivers/net/b44.c > --- a/drivers/net/b44.c 2004-11-29 09:41:27 -08:00 > +++ b/drivers/net/b44.c 2004-11-29 09:41:27 -08:00 > @@ -1487,8 +1487,6 @@ > { > struct b44 *bp = netdev_priv(dev); > > - if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) > - return -EAGAIN; > cmd->supported = (SUPPORTED_Autoneg); > cmd->supported |= (SUPPORTED_100baseT_Half | > SUPPORTED_100baseT_Full | I'm not so sure about this one... This sounds like working around stupid userland in the kernel? Jeff From mellia@prezzemolo.polito.it Thu Dec 2 05:40:57 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 05:41:04 -0800 (PST) Received: from prezzemolo.polito.it (IDENT:root@prezzemolo.polito.it [130.192.9.131]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2DeuAB012945 for ; Thu, 2 Dec 2004 05:40:57 -0800 Received: from mellia.lipar.polito.it ([192.168.85.105]) by prezzemolo.polito.it (8.12.10/8.12.10) with ESMTP id iB2DdWdW015837; Thu, 2 Dec 2004 14:39:35 +0100 Subject: Re: [E1000-devel] Transmission limit From: Marco Mellia Reply-To: mellia@prezzemolo.polito.it To: hadi@cyberus.ca Cc: mellia@prezzemolo.polito.it, Lennert Buytenhek , Harald Welte , P@draigBrady.com, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101903944.1042.29.camel@jzny.localdomain> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <1101483081.24742.174.camel@mellia.lipar.polito.it> <20041127092503.GA12592@sunbeam.de.gnumonks.org> <1101718412.14930.46.camel@verza.polito.it> <20041129145028.GC18788@xi.wantstofly.org> <1101804146.11111.23.camel@mellia.lipar.polito.it> <1101903944.1042.29.camel@jzny.localdomain> Content-Type: text/plain Organization: Message-Id: <1101994772.18491.16.camel@mellia.lipar.polito.it> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 (1.2.2-5) Date: 02 Dec 2004 14:39:32 +0100 Content-Transfer-Encoding: 7bit X-TLC-MailScanner-Information: Please contact the ISP for more information X-TLC-MailScanner: Found to be clean X-TLC-MailScanner-SpamCheck: not spam, SpamAssassin (score=-4.785, required 5.5, AWL 0.12, BAYES_00 -4.90) X-archive-position: 12386 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: mellia@prezzemolo.polito.it Precedence: bulk X-list: netdev > > > > We are thinking of sending packet in "bursts" instead of single > > > > transfers. The only problem is to let the NIC know that there are more > > > > than a packet in a burst... > > > > > > Jamal implemented exactly this for e1000 already, he might be persuaded > > > into posting his patch here. Jamal? :) > > > > I guess that saying that we are _very_ interested in this might help. > > :-) > > We can offer as "beta-testers" as well... > > Sorry missed this (I wasnt CCed so it went to a low priority queue which > i read on a best effort basis). > Let me clean up the patches a little bit this weekend. The patch is at > least 4 months old; latest reincarnation was due to issue1 on my SUCON > presentation. Would a patch against latest 2.6.x bitkeeper (whatever it > is this weekend) be fine? If you are in a rush and dont mind a little > ugliness then i will pass them as is. > We'll be glad to spend some time trying this out. Please, we are not very confortable with the linux bitkeeper maintenance method. Can we ask you to provide us a patch to a standard kernel/driver (whatever you prefer...)? Also a complete source sub-tree would be ok ;-) > BTW, Scott posted a interesting patch yesterday, you may wanna give that > a shot as well. We're trying that out right now... (which means, that in a couple of days, we'll try it ;-)) Thanks a lot. -- Ciao, /\/\/\rco +-----------------------------------+ | Marco Mellia - Assistant Professor| | Tel: 39-011-2276-608 | | Tel: 39-011-564-4173 | | Cel: 39-340-9674888 | /"\ .. . . . . . . . . . . . . | Politecnico di Torino | \ / . ASCII Ribbon Campaign . | Corso Duca degli Abruzzi 24 | X .- NO HTML/RTF in e-mail . | Torino - 10129 - Italy | / \ .- NO Word docs in e-mail. | http://www1.tlc.polito.it/mellia | .. . . . . . . . . . . . . +-----------------------------------+ The box said "Requires Windows 95 or Better." So I installed Linux. From wensong@linux-vs.org Thu Dec 2 06:53:15 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 06:53:22 -0800 (PST) Received: from lb1.ctrip.com ([218.244.111.2]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2ErDuh020118 for ; Thu, 2 Dec 2004 06:53:15 -0800 Received: from penguin.linux-vs.org ([61.149.157.27]) by lb1.ctrip.com (8.12.10/8.12.10) with ESMTP id iB2EpwMh015802 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Dec 2004 22:52:06 +0800 Received: from penguin.linux-vs.org (localhost.localdomain [127.0.0.1]) by penguin.linux-vs.org (8.12.8/8.12.8) with ESMTP id iB2EpiPX001140; Thu, 2 Dec 2004 22:51:44 +0800 Received: from localhost (wensong@localhost) by penguin.linux-vs.org (8.12.8/8.12.8/Submit) with ESMTP id iB2EpZmc001136; Thu, 2 Dec 2004 22:51:40 +0800 X-Authentication-Warning: penguin.linux-vs.org: wensong owned process doing -bs Date: Thu, 2 Dec 2004 22:51:34 +0800 (CST) From: Wensong Zhang To: Horms cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: [PATCH] [IPVS] add a sysctl variable to expire quiescent template In-Reply-To: <20041202040717.GF32190@verge.net.au> Message-ID: References: <20041202040717.GF32190@verge.net.au> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-archive-position: 12387 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: wensong@linux-vs.org Precedence: bulk X-list: netdev On Thu, 2 Dec 2004, Horms wrote: > On Thu, Dec 02, 2004 at 12:48:26AM +0800, Wensong Zhang wrote: >> >> >> Hi Dave, >> >> Here is the patch from Horms to add a sysctl >> variable to expire quiescent templat. Please check and apply them to >> kernel 2.4 and 2.6 respectively. >> >> Thanks, >> >> Wensong > > I can do this too, just in case you need it. > > Signed-off-by: Horms > Sure. :) I will ask you to make the patches for kernel 2.4 and 2.6 next time, and I just need to verify and test them. :) Cheers, Wensong From mellia@prezzemolo.polito.it Thu Dec 2 09:26:09 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 09:26:16 -0800 (PST) Received: from prezzemolo.polito.it (IDENT:root@prezzemolo.polito.it [130.192.9.131]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2HQ8oi027479 for ; Thu, 2 Dec 2004 09:26:09 -0800 Received: from mellia.lipar.polito.it ([192.168.85.105]) by prezzemolo.polito.it (8.12.10/8.12.10) with ESMTP id iB2HOYdW032567; Thu, 2 Dec 2004 18:24:49 +0100 Subject: Re: [E1000-devel] Transmission limit From: Marco Mellia Reply-To: mellia@prezzemolo.polito.it To: hadi@cyberus.ca Cc: mellia@prezzemolo.polito.it, P@draigBrady.com, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101822364.1044.60.camel@jzny.localdomain> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <1101483081.24742.174.camel@mellia.lipar.polito.it> <1101498963.1076.39.camel@jzny.localdomain> <1101738118.14930.142.camel@verza.polito.it> <1101822364.1044.60.camel@jzny.localdomain> Content-Type: text/plain Organization: Message-Id: <1102008274.19646.14.camel@mellia.lipar.polito.it> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 (1.2.2-5) Date: 02 Dec 2004 18:24:34 +0100 Content-Transfer-Encoding: 7bit X-TLC-MailScanner-Information: Please contact the ISP for more information X-TLC-MailScanner: Found to be clean X-TLC-MailScanner-SpamCheck: not spam, SpamAssassin (score=-4.788, required 5.5, AWL 0.11, BAYES_00 -4.90) X-archive-position: 12388 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: mellia@prezzemolo.polito.it Precedence: bulk X-list: netdev > > In our experiments, we modified the kernel to drop packets just after > > receiving them. skb are just deallocated (using standerd kernel > > routines, i.e., no recycling is used). Logically, that happen when the > > netif_rx() is called. > > > > Now, we have three cases > > 1) just mofify the netif_rx() to drop packets. > > 2) as in one, plus remove the protocol check in the driver > > (i.e., comment the line > > skb->protocol = eth_type_trans(skb, netdev); > > ) to avoid to access the real packet data. > > 3) as in 2, but dealloc is performed at the driver level, instead of > > calling the netif_rx() > > > > In the first case, we can receive about 1.1Mpps (~80% of packets) > > Possible. I was able to receive 900Kpps or so in my experiments with > gact drop which is slightly above this with a 2.4 Ghz machine with IRQ > affinity. I double checked with the people that actually did the job. They indeed tested both cases, i.e., dropping packets either using IRQ (therefore using netif_rx()) or using NAPI (therefore using netif_receive_skb()). In both cases, disabling the eth_type_trans() check, we receive 100% of packets... > > In the third case, we can NOT receive 100% of packets! > > The only difference is that we actually _REMOVED_ a funcion call. This > > reduces the overhead, and the compiler/cpu/whatever can not optimize the > > data path to access to the skb which must be freed. > > It doesnt seem like you were runing NAPI if you depended on calling > netif_rx > In that case, #3 would be freeing in hard IRQ context while #2 is > softIRQ. Again, it was my mistake. Case #3 was performed using the NAPI stack, i.e., freeing up skb instead of calling the netif_receive_skb(). Doing that, we observed a performance drop, that we hint to some caching isses. Indeed, investigating with a Oprofile, in case #3 it registers about twice the number of cache miss than in case #2. Again, we do not have any plain explanation, but our intuition is that adding a function call with pointer as argument might allow the compiler/cpu to prefecth the skb and speed up the memory release... > > Our guess is that by freeing up the skb in the netif_rx() function > > actually allows the compiler/cpu to prefetch the skb itself, and > > therefore keep the pipeline working... > > > > My guess is that if you change compiler, cpu, memory subsystem, you may > > get very counterintuitive results... > > Refer to my comment above. > Repeat tests with NAPI and see if you get same results. We were using NAPI. Sorry for the misunderstanding. Hope this helps. -- Ciao, /\/\/\rco +--+ | Marco Mellia - Assistant Professor| | Tel: 39-011-2276-608 | | Tel: 39-011-564-4173 | | Cel: 39-340-9674888 | /"\ .. . . . . . . . . . . . . | Politecnico di Torino | \ / . ASCII Ribbon Campaign . | Corso Duca degli Abruzzi 24 | X .- NO HTML/RTF in e-mail . | Torino - 10129 - Italy | / \ .- NO Word docs in e-mail. | http://www1.tlc.polito.it/mellia | .. . . . . . . . . . . . . +--+ The box said "Requires Windows 95 or Better." So I installed Linux. From sjackman@gmail.com Thu Dec 2 09:28:59 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 09:29:04 -0800 (PST) Received: from mproxy.gmail.com (mproxy.gmail.com [216.239.56.244]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2HSxL0027742 for ; Thu, 2 Dec 2004 09:28:59 -0800 Received: by mproxy.gmail.com with SMTP id w41so155372cwb for ; Thu, 02 Dec 2004 09:28:36 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:references; b=tt+V2mOZVtqNGj2lUTzutEa6y3bD2GO0hWS5b6Xur4NSQ2logiGPSVmg9tnuVxTgrY0xztUkGWxBv96sLTt11zWL2ksmpN/pd54vyP9sNEko8JgvzIXwJaePCalzBBPVOwGV8Yhvuj/nO6Li+oeAl6NTpGyqMEDf2axP1uCdbWQ= Received: by 10.11.116.64 with SMTP id o64mr418223cwc; Thu, 02 Dec 2004 09:28:36 -0800 (PST) Received: by 10.11.99.50 with HTTP; Thu, 2 Dec 2004 09:28:36 -0800 (PST) Message-ID: <7f45d9390412020928f298944@mail.gmail.com> Date: Thu, 2 Dec 2004 09:28:36 -0800 From: Shaun Jackman Reply-To: Shaun Jackman To: netdev@oss.sgi.com Subject: Re: Multicast filtering for tun.c [PATCH] In-Reply-To: <20041201233400.45078efe.akpm@osdl.org> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: <7f45d9390411251715138b35d0@mail.gmail.com> <20041127011006.03232bb6.akpm@osdl.org> <7f45d939041201140329d0273f@mail.gmail.com> <20041201233400.45078efe.akpm@osdl.org> X-archive-position: 12389 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sjackman@gmail.com Precedence: bulk X-list: netdev Thanks for your careful review, Andrew. I appreciate your help. > You're sure this shouldn't be using crc-ccitt? I used ether_crc because every driver in drivers/net except ppp_async.c does. Either would work as long as the chosen hash function is used consistently. > del_multi(u32 *filter, const u8 *addr) > > would be a more typical layout. I prefer the asterisk with the rest of the type information, but I know the latter is more typical. Fixed. > > + const u8 ones[ ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; > > The space after the `[' is gratuitous. > > This array will be allocated onthe stack and populated by hand each time > this function is called. It should be made static. > > > + u8 addr[ ETH_ALEN]; > > extraneous space. Fixed. > > + memcpy(addr, skb->data, min(sizeof addr, skb->len)); > > We normally put parentheses around the argument of the sizeof operator, for > no particular reason ;) > > > + if (copy_from_user(&ifr, argp, sizeof ifr)) > > Ditto I prefer not to add the extraneous punctuation. I find it makes it harder to read. > > + case SIOCGIFFLAGS: > > + ifr.ifr_flags = tun->if_flags; > > + if (copy_to_user( argp, &ifr, sizeof ifr)) > > extraneous space. > > > + if (copy_to_user( argp, &ifr, sizeof ifr)) > > ditto Fixed. > > + DBG(KERN_DEBUG "%s: add multi: %x:%x:%x:%x:%x:%x\n", > > + tun->dev->name, > > + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], > > + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], > > + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); > > Why all the typecasts? [clip] > ditto. sa_data is signed for some reason, which causes the signed byte to be sign extended resulting in the mac address being printed as 0:c:6e:14:ffffffa0:5a, for example. Here's a short diff of the changes to my patch. The full patch follows. 27c27 < +add_multi(u32* filter, const u8* addr) --- > +add_multi(u32 *filter, const u8 *addr) 38c38 < +del_multi(u32* filter, const u8* addr) --- > +del_multi(u32 *filter, const u8 *addr) 71,72c71,72 < + const u8 ones[ ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; < + u8 addr[ ETH_ALEN]; --- > + static const u8 ones[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; > + u8 addr[ETH_ALEN]; 137c137 < + void __user* argp = (void __user*)arg; --- > + void __user *argp = (void __user*)arg; 168c168 < + if (copy_to_user( argp, &ifr, sizeof ifr)) --- > + if (copy_to_user(argp, &ifr, sizeof ifr)) 183c183 < + if (copy_to_user( argp, &ifr, sizeof ifr)) --- > + if (copy_to_user(argp, &ifr, sizeof ifr)) Cheers, Shaun 2004-11-25 Shaun Jackman * drivers/net/tun.c: Add multicast filtering for packets travelling from the network device to the character device. * include/linux/if_tun.h (tun_struct): Add interface flags, a hardware device addres, and a multicast filter. diff -ur linux-2.6.8.1.orig/drivers/net/tun.c linux-2.6.8.1/drivers/net/tun.c --- linux-2.6.8.1.orig/drivers/net/tun.c 2004-08-14 03:55:23.000000000 -0700 +++ linux-2.6.8.1/drivers/net/tun.c 2004-11-25 17:00:22.000000000 -0800 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -104,11 +105,42 @@ return 0; } -static void tun_net_mclist(struct net_device *dev) +/** Add the specified Ethernet address to this multicast filter. */ +static void +add_multi(u32 *filter, const u8 *addr) { - /* Nothing to do for multicast filters. - * We always accept all frames. */ - return; + int bit_nr = ether_crc(ETH_ALEN, addr) >> 26; + filter[bit_nr >> 5] |= 1 << (bit_nr & 31); +} + +/** Remove the specified Ethernet addres from this multicast filter. */ +static void +del_multi(u32 *filter, const u8 *addr) +{ + int bit_nr = ether_crc(ETH_ALEN, addr) >> 26; + filter[bit_nr >> 5] &= ~(1 << (bit_nr & 31)); +} + +/** Update the list of multicast groups to which the network device belongs. + * This list is used to filter packets being sent from the character device to + * the network device. */ +static void +tun_net_mclist(struct net_device *dev) +{ + struct tun_struct *tun = netdev_priv(dev); + const struct dev_mc_list *mclist; + int i; + DBG(KERN_DEBUG "%s: tun_net_mclist: mc_count %d\n", + dev->name, dev->mc_count); + memset(tun->chr_filter, 0, sizeof tun->chr_filter); + for (i = 0, mclist = dev->mc_list; i < dev->mc_count && mclist != NULL; + i++, mclist = mclist->next) { + add_multi(tun->net_filter, mclist->dmi_addr); + DBG(KERN_DEBUG "%s: tun_net_mclist: %x:%x:%x:%x:%x:%x\n", + dev->name, + mclist->dmi_addr[0], mclist->dmi_addr[1], mclist->dmi_addr[2], + mclist->dmi_addr[3], mclist->dmi_addr[4], mclist->dmi_addr[5]); + } } static struct net_device_stats *tun_net_stats(struct net_device *dev) @@ -301,6 +333,10 @@ add_wait_queue(&tun->read_wait, &wait); while (len) { + static const u8 ones[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + u8 addr[ETH_ALEN]; + int bit_nr; + current->state = TASK_INTERRUPTIBLE; /* Read frames from the queue */ @@ -320,10 +356,37 @@ } netif_start_queue(tun->dev); - ret = tun_put_user(tun, skb, (struct iovec *) iv, len); - - kfree_skb(skb); - break; + /** Decide whether to accept this packet. This code is designed to + * behave identically to an Ethernet interface. Accept the packet if + * - we are promiscuous. + * - the packet is addressed to us. + * - the packet is broadcast. + * - the packet is multicast and + * - we are multicast promiscous. + * - we belong to the multicast group. + */ + memcpy(addr, skb->data, min(sizeof addr, skb->len)); + bit_nr = ether_crc(sizeof addr, addr) >> 26; + if ((tun->if_flags & IFF_PROMISC) || + memcmp(addr, tun->dev_addr, sizeof addr) == 0 || + memcmp(addr, ones, sizeof addr) == 0 || + (((addr[0] == 1 && addr[1] == 0 && addr[2] == 0x5e) || + (addr[0] == 0x33 && addr[1] == 0x33)) && + ((tun->if_flags & IFF_ALLMULTI) || + (tun->chr_filter[bit_nr >> 5] & (1 << (bit_nr & 31)))))) { + DBG(KERN_DEBUG "%s: tun_chr_readv: accepted: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, addr[0], addr[1], addr[2], + addr[3], addr[4], addr[5]); + ret = tun_put_user(tun, skb, (struct iovec *) iv, len); + kfree_skb(skb); + break; + } else { + DBG(KERN_DEBUG "%s: tun_chr_readv: rejected: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, addr[0], addr[1], addr[2], + addr[3], addr[4], addr[5]); + kfree_skb(skb); + continue; + } } current->state = TASK_RUNNING; @@ -417,6 +480,12 @@ tun = netdev_priv(dev); tun->dev = dev; tun->flags = flags; + /* Be promiscuous by default to maintain previous behaviour. */ + tun->if_flags = IFF_PROMISC; + /* Generate random Ethernet address. */ + *(u16 *)tun->dev_addr = htons(0x00FF); + get_random_bytes(tun->dev_addr + sizeof(u16), 4); + memset(tun->chr_filter, 0, sizeof tun->chr_filter); tun_net_init(dev); @@ -457,13 +526,16 @@ unsigned int cmd, unsigned long arg) { struct tun_struct *tun = file->private_data; + void __user *argp = (void __user*)arg; + struct ifreq ifr; + + if (cmd == TUNSETIFF || _IOC_TYPE(cmd) == 0x89) + if (copy_from_user(&ifr, argp, sizeof ifr)) + return -EFAULT; if (cmd == TUNSETIFF && !tun) { - struct ifreq ifr; int err; - if (copy_from_user(&ifr, (void __user *)arg, sizeof(ifr))) - return -EFAULT; ifr.ifr_name[IFNAMSIZ-1] = '\0'; rtnl_lock(); @@ -473,7 +545,7 @@ if (err) return err; - if (copy_to_user((void __user *)arg, &ifr, sizeof(ifr))) + if (copy_to_user(argp, &ifr, sizeof(ifr))) return -EFAULT; return 0; } @@ -519,6 +591,61 @@ break; #endif + case SIOCGIFFLAGS: + ifr.ifr_flags = tun->if_flags; + if (copy_to_user(argp, &ifr, sizeof ifr)) + return -EFAULT; + return 0; + + case SIOCSIFFLAGS: + /** Set the character device's interface flags. Currently only + * IFF_PROMISC and IFF_ALLMULTI are used. */ + tun->if_flags = ifr.ifr_flags; + DBG(KERN_INFO "%s: interface flags 0x%lx\n", + tun->dev->name, tun->if_flags); + return 0; + + case SIOCGIFHWADDR: + memcpy(ifr.ifr_hwaddr.sa_data, tun->dev_addr, + min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr)); + if (copy_to_user(argp, &ifr, sizeof ifr)) + return -EFAULT; + return 0; + + case SIOCSIFHWADDR: + /** Set the character device's hardware address. This is used when + * filtering packets being sent from the network device to the character + * device. */ + memcpy(tun->dev_addr, ifr.ifr_hwaddr.sa_data, + min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr)); + DBG(KERN_DEBUG "%s: set hardware address: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + tun->dev_addr[0], tun->dev_addr[1], tun->dev_addr[2], + tun->dev_addr[3], tun->dev_addr[4], tun->dev_addr[5]); + return 0; + + case SIOCADDMULTI: + /** Add the specified group to the character device's multicast filter + * list. */ + add_multi(tun->chr_filter, ifr.ifr_hwaddr.sa_data); + DBG(KERN_DEBUG "%s: add multi: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); + return 0; + + case SIOCDELMULTI: + /** Remove the specified group from the character device's multicast + * filter list. */ + del_multi(tun->chr_filter, ifr.ifr_hwaddr.sa_data); + DBG(KERN_DEBUG "%s: del multi: %x:%x:%x:%x:%x:%x\n", + tun->dev->name, + (u8)ifr.ifr_hwaddr.sa_data[0], (u8)ifr.ifr_hwaddr.sa_data[1], + (u8)ifr.ifr_hwaddr.sa_data[2], (u8)ifr.ifr_hwaddr.sa_data[3], + (u8)ifr.ifr_hwaddr.sa_data[4], (u8)ifr.ifr_hwaddr.sa_data[5]); + return 0; + default: return -EINVAL; }; diff -ur linux-2.6.8.1.orig/include/linux/if_tun.h linux-2.6.8.1/include/linux/if_tun.h --- linux-2.6.8.1.orig/include/linux/if_tun.h 2004-08-14 03:55:09.000000000 -0700 +++ linux-2.6.8.1/include/linux/if_tun.h 2004-11-25 16:47:31.000000000 -0800 @@ -45,6 +45,11 @@ struct fasync_struct *fasync; + unsigned long if_flags; + u8 dev_addr[ETH_ALEN]; + u32 chr_filter[2]; + u32 net_filter[2]; + #ifdef TUN_DEBUG int debug; #endif From mellia@prezzemolo.polito.it Thu Dec 2 09:33:29 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 09:33:34 -0800 (PST) Received: from prezzemolo.polito.it (IDENT:root@prezzemolo.polito.it [130.192.9.131]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2HXSrW028218 for ; Thu, 2 Dec 2004 09:33:28 -0800 Received: from mellia.lipar.polito.it ([192.168.85.105]) by prezzemolo.polito.it (8.12.10/8.12.10) with ESMTP id iB2HVUdW000522; Thu, 2 Dec 2004 18:31:30 +0100 Subject: Re: [E1000-devel] Transmission limit From: Marco Mellia Reply-To: mellia@prezzemolo.polito.it To: sfeldma@pobox.com Cc: birke@serveliper.polito.it, Lennert Buytenhek , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> Content-Type: text/plain Organization: Message-Id: <1102008690.19646.22.camel@mellia.lipar.polito.it> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 (1.2.2-5) Date: 02 Dec 2004 18:31:30 +0100 Content-Transfer-Encoding: 7bit X-TLC-MailScanner-Information: Please contact the ISP for more information X-TLC-MailScanner: Found to be clean X-TLC-MailScanner-SpamCheck: not spam, SpamAssassin (score=-4.788, required 5.5, AWL 0.11, BAYES_00 -4.90) X-archive-position: 12390 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: mellia@prezzemolo.polito.it Precedence: bulk X-list: netdev On Wed, 2004-12-01 at 02:09, Scott Feldman wrote: > Hey, turns out, I know some e1000 tricks that might help get the kpps > numbers up. > > My problem is I only have a P4 desktop system with a 82544 nic running > at PCI 32/33Mhz, so I can't play with the big boys. But, attached is a > rework of the Tx path to eliminate 1) Tx interrupts, and 2) Tx > descriptor write-backs. For me, I see a nice jump in kpps, but I'd like > others to try with their setups. We should be able to get to wire speed > with 60-byte packets. > Here are the numbers in our setup: vanilla kernel [2.4.20 + packetgen + driver e1000 5.4.11] 4096 Descr => 356 Mbps (60 bytes long frames) => 941Mbps (1500 bytes lonf frames) 256 Descr => 354 Mbps (60 bytes long frames) => 941Mbps (1500 bytes lonf frames) Patched driver [2.4.20 + packetgen + driver e1000 5.4.11 patched] 4096 Descr => 357 Mbps (60 bytes long frames) => 941Mbps (1500 bytes lonf frames) I guess that was _not_ the bottleneck sigh... at least with a PCI-X bus. Again, latency issue of the DMA transfer from RAM to NIC? -- Ciao, /\/\/\rco +-----------------------------------+ | Marco Mellia - Assistant Professor| | Tel: 39-011-2276-608 | | Tel: 39-011-564-4173 | | Cel: 39-340-9674888 | /"\ .. . . . . . . . . . . . . | Politecnico di Torino | \ / . ASCII Ribbon Campaign . | Corso Duca degli Abruzzi 24 | X .- NO HTML/RTF in e-mail . | Torino - 10129 - Italy | / \ .- NO Word docs in e-mail. | http://www1.tlc.polito.it/mellia | .. . . . . . . . . . . . . +-----------------------------------+ The box said "Requires Windows 95 or Better." So I installed Linux. From shemminger@osdl.org Thu Dec 2 09:52:28 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 09:52:34 -0800 (PST) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2HqRXO028837 for ; Thu, 2 Dec 2004 09:52:28 -0800 Received: from dxpl.pdx.osdl.net (dxpl.pdx.osdl.net [172.20.1.103]) by mail.osdl.org (8.11.6/8.11.6) with ESMTP id iB2Hpw908926; Thu, 2 Dec 2004 09:51:58 -0800 Date: Thu, 2 Dec 2004 09:51:58 -0800 From: Stephen Hemminger To: Jeff Garzik Cc: "David S. Miller" , netdev@oss.sgi.com Subject: Re: [PATCH] b44: allow ethtool get_settings when down Message-Id: <20041202095158.0722d176@dxpl.pdx.osdl.net> In-Reply-To: <41AEFB95.8000100@pobox.com> References: <20041129094523.3185c64c@zqx3.pdx.osdl.net> <41AEFB95.8000100@pobox.com> Organization: Open Source Development Lab X-Mailer: Sylpheed version 0.9.10claws (GTK+ 1.2.10; x86_64-suse-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12391 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: shemminger@osdl.org Precedence: bulk X-list: netdev On Thu, 02 Dec 2004 06:25:09 -0500 Jeff Garzik wrote: > Stephen Hemminger wrote: > > The FC and Suse startup scripts use ethtool to check for link present. This has > > problems on my laptop with Broadcom because it quieries settings before > > bringing link up. The problem is driver returns EAGAIN when queried for > > settings but not up. Just go ahead and return values anyway, the supported and link > > state values will be correct, speed will end up being 10BaseT/Half which is a > > reasonable default. > > > > Signed-off-by: Stephen Hemminger > > > > diff -Nru a/drivers/net/b44.c b/drivers/net/b44.c > > --- a/drivers/net/b44.c 2004-11-29 09:41:27 -08:00 > > +++ b/drivers/net/b44.c 2004-11-29 09:41:27 -08:00 > > @@ -1487,8 +1487,6 @@ > > { > > struct b44 *bp = netdev_priv(dev); > > > > - if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) > > - return -EAGAIN; > > cmd->supported = (SUPPORTED_Autoneg); > > cmd->supported |= (SUPPORTED_100baseT_Half | > > SUPPORTED_100baseT_Full | > > I'm not so sure about this one... > > This sounds like working around stupid userland in the kernel? > > Jeff Don't bother with the patch, if I use smart user land code like NetworkManager then there is no problem. Although EAGAIN seems like a poor choice for errno how about ENETDOWN or ENONET From Robert.Olsson@data.slu.se Thu Dec 2 09:55:08 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 09:55:12 -0800 (PST) Received: from mail1.slu.se (mail1.slu.se [130.238.96.11]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2Ht7ex029235 for ; Thu, 2 Dec 2004 09:55:07 -0800 Received: from robur.slu.se (robur.slu.se [130.238.98.12]) by mail1.slu.se (8.12.10/8.12.10) with ESMTP id iB2HsVKO021575; Thu, 2 Dec 2004 18:54:32 +0100 Received: by robur.slu.se (Postfix, from userid 1000) id 36228EC001; Thu, 2 Dec 2004 18:54:32 +0100 (CET) From: Robert Olsson MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16815.22232.190929.306486@robur.slu.se> Date: Thu, 2 Dec 2004 18:54:32 +0100 To: sfeldma@pobox.com Cc: Robert Olsson , Lennert Buytenhek , jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit In-Reply-To: <1101919791.5198.15.camel@localhost.localdomain> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> <1101919791.5198.15.camel@localhost.localdomain> X-Mailer: VM 7.18 under Emacs 21.3.1 X-archive-position: 12392 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: Robert.Olsson@data.slu.se Precedence: bulk X-list: netdev Scott Feldman writes: > Thank you Robert for trying it out. Scott! I've rerun some of the tests. I've set maxcpus=1 make sure all things happens on one CPU. Some HW as yesterday. I see a now lot variation in the results from your patch. vanilla 804353pps 411Mb/sec (411828736bps) errors: 98877 patch TXD=4096 Sometimes: 882362pps 451Mb/sec (451769344bps) errors: 0 patch TXD=2048 Sometimes: 943007pps 482Mb/sec (482819584bps) errors: 0 But very often runs around 500 kpps with patch. This smells scheduling to me as smaller rings use to mean higher performance but ring need to big enough to hide latencies. See also my next mail... --ro From Robert.Olsson@data.slu.se Thu Dec 2 10:23:55 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 10:24:00 -0800 (PST) Received: from mail1.slu.se (mail1.slu.se [130.238.96.11]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2INsbO030225 for ; Thu, 2 Dec 2004 10:23:55 -0800 Received: from robur.slu.se (robur.slu.se [130.238.98.12]) by mail1.slu.se (8.12.10/8.12.10) with ESMTP id iB2INOKO003502; Thu, 2 Dec 2004 19:23:24 +0100 Received: by robur.slu.se (Postfix, from userid 1000) id 1F693EC001; Thu, 2 Dec 2004 19:23:24 +0100 (CET) From: Robert Olsson MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16815.23964.93437.411404@robur.slu.se> Date: Thu, 2 Dec 2004 19:23:24 +0100 To: sfeldma@pobox.com Cc: Robert Olsson , Lennert Buytenhek , jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit In-Reply-To: <1101919791.5198.15.camel@localhost.localdomain> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> <1101919791.5198.15.camel@localhost.localdomain> X-Mailer: VM 7.18 under Emacs 21.3.1 X-archive-position: 12393 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: Robert.Olsson@data.slu.se Precedence: bulk X-list: netdev Hello! Below is little patch to clean skb at xmit. It's old jungle trick Jamal and I used w. tulip. Note we can now even decrease the size of TX ring. It can increase TX performance from 800 kpps to 1125128pps 576Mb/sec (576065536bps) errors: 0 1124946pps 575Mb/sec (575972352bps) errors: 0 But suffers from scheduling problems as the previous patch. Often we just get 582108pps 298Mb/sec (298039296bps) errors: 0 When the sender CPU free (it's) skb's. we might get some "TX free affinity" which are unrelated to irq affinity of course not 100% perfect. And some of Scotts may still be used. --- drivers/net/e1000/e1000.h.orig 2004-12-01 13:59:36.000000000 +0100 +++ drivers/net/e1000/e1000.h 2004-12-02 20:11:31.000000000 +0100 @@ -103,7 +103,7 @@ #define E1000_MAX_INTR 10 /* TX/RX descriptor defines */ -#define E1000_DEFAULT_TXD 256 +#define E1000_DEFAULT_TXD 128 #define E1000_MAX_TXD 256 #define E1000_MIN_TXD 80 #define E1000_MAX_82544_TXD 4096 --- drivers/net/e1000/e1000_main.c.orig 2004-12-01 13:59:36.000000000 +0100 +++ drivers/net/e1000/e1000_main.c 2004-12-02 20:37:40.000000000 +0100 @@ -1820,6 +1820,10 @@ return NETDEV_TX_LOCKED; } + + if( adapter->tx_ring.next_to_use - adapter->tx_ring.next_to_clean > 80 ) + e1000_clean_tx_ring(adapter); + /* need: count + 2 desc gap to keep tail from touching * head, otherwise try next time */ if(E1000_DESC_UNUSED(&adapter->tx_ring) < count + 2) { --ro From jason.mcmullan@timesys.com Thu Dec 2 10:29:54 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 10:30:05 -0800 (PST) Received: from exchange.timesys.com (mail.timesys.com [65.117.135.102]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2ITouC030675 for ; Thu, 2 Dec 2004 10:29:54 -0800 Received: from jmcmullan by owa.timesys.com; 02 Dec 2004 13:29:23 -0500 Subject: [PATCH] MII bus API for PHY devices Rev 2.0 From: Jason McMullan To: Andy Fleming Cc: Benjamin Herrenschmidt , Netdev In-Reply-To: References: <069B6F33-341C-11D9-9652-000393DBC2E8@freescale.com> <9B0D9272-398A-11D9-96F6-000393C30512@freescale.com> <1100820391.25521.14.camel@gaston> <97DA0EF0-3A70-11D9-B023-000393C30512@freescale.com> <1100904184.3856.46.camel@gaston> Content-Type: multipart/mixed; boundary="=-UCEP7LL7eTaCc7pqknBv" Date: Thu, 02 Dec 2004 13:29:22 -0500 Message-Id: <1102012163.6056.39.camel@jmcmullan> Mime-Version: 1.0 X-Mailer: Evolution 2.0.1-1mdk X-archive-position: 12394 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jason.mcmullan@timesys.com Precedence: bulk X-list: netdev --=-UCEP7LL7eTaCc7pqknBv Content-Type: text/plain Content-Transfer-Encoding: 7bit Ok, given previous input, I now release mii-bus 2.0 * CIS8201 interrupt support * The PHY device api is now similar to 'sungem' * Set up your PHY as autoneg or forced speeds. -- Jason McMullan --=-UCEP7LL7eTaCc7pqknBv Content-Disposition: attachment; filename=driver-mii-bus.patch Content-Type: text/x-patch; name=driver-mii-bus.patch; charset=ISO-8859-1 Content-Transfer-Encoding: base64 IyMjIyBBdXRvLWdlbmVyYXRlZCBwYXRjaCAjIyMjDQpTaWduZWQtb2ZmLWJ5OiBKYXNvbiBNY011 bGxhbiA8am1jbXVsbGFuQHRpbWVzeXMuY29tPg0KRGF0ZTogICAgICAgICAgVGh1LCAwMiBEZWMg MjAwNCAxMzoyMDo0OSAtMDUwMA0KRGVzY3JpcHRpb246ICAgTUlJIEJ1cyBpbnRlcmZhY2UNCkRl cGVuZHM6DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KSW5kZXggb2YgY2hh bmdlczoNCg0KIGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAgICAgICAgfCAgICA0IA0KIGxpbnV4 L2RyaXZlcnMvbmV0L21paV9iaXRiYW5nLmMgfCAgMTM0ICsrKysrKysrDQogbGludXgvZHJpdmVy cy9uZXQvbWlpX2JpdGJhbmcuaCB8ICAgNDAgKysNCiBsaW51eC9kcml2ZXJzL25ldC9taWlfYnVz LmMgICAgIHwgIDYzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQog bGludXgvZHJpdmVycy9uZXQvcGh5X2NpY2FkYS5jICB8ICAxNzcgKysrKysrKysrKysNCiBsaW51 eC9kcml2ZXJzL25ldC9waHlfZGF2aWNvbS5jIHwgIDE0MCArKysrKysrKw0KIGxpbnV4L2RyaXZl cnMvbmV0L3BoeV9seHQ5N3guYyAgfCAgMjEwICsrKysrKysrKysrKysNCiBsaW51eC9kcml2ZXJz L25ldC9waHlfbWFydmVsbC5jIHwgIDEyNSArKysrKysrDQogbGludXgvaW5jbHVkZS9saW51eC9t aWlfYnVzLmggICB8ICAxOTEgKysrKysrKysrKysNCiA5IGZpbGVzIGNoYW5nZWQsIDE2NTkgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KDQoNCi0tLSBsaW51eC1vcmlnL2RyaXZlcnMvbmV0 L01ha2VmaWxlDQorKysgbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUNCkBAIC02Miw3ICs2Miw5 IEBADQogIyBlbmQgbGluayBvcmRlciBzZWN0aW9uDQogIw0KIA0KLW9iai0kKENPTkZJR19NSUkp ICs9IG1paS5vDQorb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm8gbWlpX2J1cy5vIG1paV9iaXRi YW5nLm8gXA0KKwkJICAgICBwaHlfZGF2aWNvbS5vIHBoeV9tYXJ2ZWxsLm8gcGh5X2NpY2FkYS5v IFwNCisJCSAgICAgcGh5X2x4dDk3eC5vDQogDQogb2JqLSQoQ09ORklHX1NVTkRBTkNFKSArPSBz dW5kYW5jZS5vDQogb2JqLSQoQ09ORklHX0hBTUFDSEkpICs9IGhhbWFjaGkubw0KLS0tIC9kZXYv bnVsbA0KKysrIGxpbnV4L2RyaXZlcnMvbmV0L21paV9iaXRiYW5nLmMNCkBAIC0wLDAgKzEsMTM0 IEBADQorLyogDQorICogZHJpdmVycy9uZXQvbWlpX2JpdGJhbmcuYw0KKyAqDQorICogQXV0aG9y OiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgQ29y cC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRo ZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAqIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNl LCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKi8N CisNCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4N CisNCisjaW5jbHVkZSAibWlpX2JpdGJhbmcuaCINCisNCisjdW5kZWYgUEhZX1JFQUQNCisjdW5k ZWYgUEhZX1dSSVRFDQorI2RlZmluZSBQSFlfUkVBRAkwDQorI2RlZmluZSBQSFlfV1JJVEUJMQ0K Kw0KKy8qIA0KKyAqIDFzdCBieXRlOiAwMTAxUFBQUCBvbiB3cml0ZXMsIHdoZXJlIFBQUFAgaXMg dGhlIE1TQiBvZiB0aGUgcGh5LWlkDQorICogICAgICAgICAgIDAxMTBQUFBQIG9uIHJlYWRzLCB3 aGVyZSAgUFBQUCBpcyB0aGUgTVNCIG9mIHRoZSBwaHktaWQNCisgKiAybmQgYnl0ZTogUFJSUlJS MTAsIFAgaXMgdGhlIExTQiBvZiB0aGUgcGh5LWlkLCBSIGlzIHRoZSByZWdpc3Rlcg0KKyAqIDNy ZCw0dGggYnl0ZXM6IGNvbnRyb2wgb24gd3JpdGVzLCB2YWx1ZXMgb24gcmVhZHMNCisgKi8NCisN CitzdGF0aWMgaW5saW5lIHZvaWQgbWlpX2JpdGJhbmdfbWFyayh2b2lkICpwcml2KQ0KK3sNCisJ c3RydWN0IG1paV9iaXRiYW5nICppbmZvID0gcHJpdjsNCisJaW50IGk7DQorDQorCS8qIFdyaXRl IHByZWFtYmxlICovDQorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQ0KKwkJaW5mby0+c2VuZChp bmZvLT5wcml2LCAxKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG1paV9iaXRiYW5nX3Bo eV9pZCh2b2lkICpwcml2LCBpbnQgcGh5X2lkLCBpbnQgcmVnLCBpbnQgaXNfd3JpdGUpDQorew0K KwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8gPSBwcml2Ow0KKwlpbnQgaTsNCisNCisJLyogUHJl YW1ibGUgKi8NCisJaW5mby0+c2VuZChpbmZvLT5wcml2LDApOw0KKwlpbmZvLT5zZW5kKGluZm8t PnByaXYsMSk7DQorCWlmIChpc193cml0ZSkgew0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDAp Ow0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDEpOw0KKwl9IGVsc2Ugew0KKwkJaW5mby0+c2Vu ZChpbmZvLT5wcml2LDEpOw0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDApOw0KKwl9DQorDQor CS8qIFdyaXRlIFBIWSBhZGRyICovDQorCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspDQorCQlpbmZv LT5zZW5kKGluZm8tPnByaXYsIChwaHlfaWQgPj4gKDQtaSkpICYgMSk7DQorDQorCS8qIFdyaXRl IHRoZSByZWdpc3RlciAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQ0KKwkJaW5mby0+c2Vu ZChpbmZvLT5wcml2LCAocmVnID4+ICg0LWkpKSAmIDEpOw0KKw0KKwlpbmZvLT5zZW5kKGluZm8t PnByaXYsMSk7DQorCWluZm8tPnNlbmQoaW5mby0+cHJpdiwwKTsNCit9DQorDQorc3RhdGljIGlu dCBtaWlfYml0YmFuZ19yZWFkKHZvaWQgKnByaXYsIGludCBwaHlfaWQsIGludCByZWcpDQorew0K KwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8gPSBwcml2Ow0KKwlpbnQgaTsNCisJaW50IHJldHZh bD0wOw0KKw0KKwltaWlfYml0YmFuZ19tYXJrKHByaXYpOw0KKwltaWlfYml0YmFuZ19waHlfaWQo cHJpdiwgcGh5X2lkLCByZWcsIFBIWV9SRUFEKTsNCisNCisJZm9yIChpID0gMDsgaSA8IDE2OyBp KyspDQorCQlyZXR2YWwgPSAocmV0dmFsIDw8IDEpIHwgKGluZm8tPnJlY3YoaW5mby0+cHJpdikg JiAxKTsNCisNCisJbWlpX2JpdGJhbmdfbWFyayhwcml2KTsNCisNCisJcmV0dXJuIHJldHZhbDsN Cit9DQorDQorc3RhdGljIGludCBtaWlfYml0YmFuZ193cml0ZSh2b2lkICpwcml2LCBpbnQgcGh5 X2lkLCBpbnQgcmVnLCB1aW50MTZfdCB2YWwpDQorew0KKwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmlu Zm8gPSBwcml2Ow0KKwlpbnQgaTsNCisNCisJbWlpX2JpdGJhbmdfbWFyayhwcml2KTsNCisJbWlp X2JpdGJhbmdfcGh5X2lkKHByaXYsIHBoeV9pZCwgcmVnLCBQSFlfV1JJVEUpOw0KKw0KKwlmb3Ig KGk9MDsgaSA8IDE2OyBpKyspDQorCQlpbmZvLT5zZW5kKGluZm8tPnByaXYsICh2YWwgPj4gKDE1 LWkpKSAmIDEpOw0KKw0KKwltaWlfYml0YmFuZ19tYXJrKHByaXYpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIHZvaWQgbWlpX2JpdGJhbmdfcmVzZXQodm9pZCAqcHJpdikNCit7DQor CXN0cnVjdCBtaWlfYml0YmFuZyAqaW5mbyA9IHByaXY7DQorDQorCWluZm8tPnJlc2V0KGluZm8t PnByaXYpOw0KK30NCisNCisvKiBDcmVhdGVzIGEgYml0YmFuZyBNSUkgYnVzDQorICogUmV0dXJu cyA8IDAgb24gZXJyb3IsIG90aGVyd2lzZSBhIGJ1cyBJRA0KKyAqLw0KK2ludCBtaWlfYml0YmFu Z19yZWdpc3RlcihzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8pDQorew0KKwltZW1zZXQoJmluZm8t PmJ1cywgMCwgc2l6ZW9mKGluZm8tPmJ1cykpOw0KKw0KKwlpbmZvLT5idXMubmFtZSA9IGluZm8t Pm5hbWU7DQorCWluZm8tPmJ1cy5wcml2ID0gaW5mbzsNCisJaW5mby0+YnVzLnJlYWQgPSBtaWlf Yml0YmFuZ19yZWFkOw0KKwlpbmZvLT5idXMud3JpdGUgPSBtaWlfYml0YmFuZ193cml0ZTsNCisJ aW5mby0+YnVzLnJlc2V0ID0gbWlpX2JpdGJhbmdfcmVzZXQ7DQorDQorCXJldHVybiBtaWlfYnVz X3JlZ2lzdGVyKCZpbmZvLT5idXMpOw0KK30NCisNCisNCisvKiBVbnJlZ2lzdGVycyBhIGJpdGJh bmcgTUlJIGJ1cw0KKyAqLw0KK3ZvaWQgbWlpX2JpdGJhbmdfdW5yZWdpc3RlcihzdHJ1Y3QgbWlp X2JpdGJhbmcgKmluZm8pDQorew0KKwltaWlfYnVzX3VucmVnaXN0ZXIoJmluZm8tPmJ1cyk7DQor fQ0KKw0KKw0KDQotLS0gL2Rldi9udWxsDQorKysgbGludXgvZHJpdmVycy9uZXQvbWlpX2JpdGJh bmcuaA0KQEAgLTAsMCArMSw0MCBAQA0KKy8qIA0KKyAqIGRyaXZlcnMvbmV0L21paV9iaXRiYW5n LmgNCisgKg0KKyAqIEF1dGhvcjogSmFzb24gTWNNdWxsYW4NCisgKg0KKyAqIENvcHlyaWdodCAo YykgMjAwNCBUaW1lc3lzIENvcnAuDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRl ciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXINCisgKiBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLg0KKyAqDQorICovDQorI2lmbmRlZiBfTkVUX01JSV9CSVRCQU5HX0gNCisjZGVmaW5l IF9ORVRfTUlJX0JJVEJBTkdfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9taWlfYnVzLmg+DQorDQor c3RydWN0IG1paV9iaXRiYW5nIHsNCisJY29uc3QgY2hhciAqbmFtZTsJLyogTmFtZSBvZiBkZXZp Y2UgKi8NCisJdm9pZCAqcHJpdjsJCS8qIFByaXZhdGUgZGF0YSAqLw0KKw0KKwl2b2lkICgqc2Vu ZCkodm9pZCAqcHJpdiwgaW50IGJpdCk7CS8qIFNlbmQgb25lIGJpdCAqLw0KKwlpbnQgKCpyZWN2 KSh2b2lkICpwcml2KTsJCS8qIFJlY3Ygb25lIGJpdCAqLw0KKwl2b2lkICgqcmVzZXQpKHZvaWQg KnByaXYpOw0KKw0KKwkvKiBBdXRvLWZpbGxlZC1pbiBpbmZvcm1hdGlvbiAqLw0KKwlzdHJ1Y3Qg bWlpX2J1cyBidXM7DQorfTsNCisNCisvKiBDcmVhdGVzIGEgYml0YmFuZyBNSUkgYnVzDQorICog UmV0dXJucyA8IDAgb24gZXJyb3IsIG90aGVyd2lzZSBhIGJ1cyBJRA0KKyAqLw0KK2V4dGVybiBp bnQgbWlpX2JpdGJhbmdfcmVnaXN0ZXIoc3RydWN0IG1paV9iaXRiYW5nICppbmZvKTsNCisNCisv KiBVbnJlZ2lzdGVycyBhIGJpdGJhbmcgTUlJIGJ1cw0KKyAqLw0KK2V4dGVybiB2b2lkIG1paV9i aXRiYW5nX3VucmVnaXN0ZXIoc3RydWN0IG1paV9iaXRiYW5nICppbmZvKTsNCisNCisjZW5kaWYg LyogX05FVF9NSUlfQklUQkFOR19IICovDQoNCi0tLSAvZGV2L251bGwNCisrKyBsaW51eC9kcml2 ZXJzL25ldC9taWlfYnVzLmMNCkBAIC0wLDAgKzEsNjM5IEBADQorLyogDQorICogZHJpdmVycy9u ZXQvbWlpX2J1cy5jDQorICoNCisgKiBBZGFwZXRlZCBmcm9tIGRyaXZlcnMvbmV0L2dpYW5mYXJf bWlpLmMsIGJ5IEFuZHkgRmxlbWluZw0KKyAqDQorICogQXV0aG9yOiBKYXNvbiBNY011bGxhbiAo amFzb24ubWNtdWxsYW5AdGltZXN5cy5jb20pIHRvIA0KKyAqIAkgICBiZSBhIGdlbmVyaWMgbWlp IGludGVyZmFjZQ0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgSW5jDQorICoN CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg IGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdl bmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0 IHlvdXINCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICovDQorI2luY2x1 ZGUgPGxpbnV4L2NvbmZpZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVk ZSA8bGludXgvc3RyaW5nLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGlu dXgvbmV0ZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1 ZGUgPGxpbnV4L3NrYnVmZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNs dWRlIDxsaW51eC9tbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9taWlfYnVzLmg+DQorDQorI2luY2x1 ZGUgPGFzbS9pby5oPg0KKyNpbmNsdWRlIDxhc20vaXJxLmg+DQorI2luY2x1ZGUgPGFzbS91YWNj ZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKw0KKyN1bmRlZiBERUJVRw0KKw0K K3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1c1s4XTsNCisNCisjZGVmaW5lIE1JSV9CVVNf TUFYCShzaXplb2YobWlpX2J1cykvc2l6ZW9mKHN0cnVjdCBtaWlfYnVzICopKQ0KKw0KK3N0YXRp YyBpbmxpbmUgc3RydWN0IHBoeV9pbmZvICptaWlfcGh5X29mKHN0cnVjdCBtaWlfaWZfaW5mbyAq bWlpKQ0KK3sNCisJaWYgKG1paSAhPSBOVUxMKSB7DQorCQlpbnQgYnVzLGlkOw0KKwkJYnVzID0g TUlJX0JVUyhtaWktPnBoeV9pZCk7DQorCQlpZCAgPSBNSUlfSUQobWlpLT5waHlfaWQpOw0KKwkJ cmV0dXJuIG1paV9idXNbYnVzXS0+cGh5W2lkXTsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9 DQorDQorLyogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBmb3IgdGhpcyBkZXZpY2UgdG8gdGhlIHJl Z2lzdGVyIGF0IHJlZ251bSwNCisgKiB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJl Zm9yZSBpdCByZXR1cm5zLiAgQWxsIFBIWSANCisgKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBk b25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLw0KK0VYUE9SVF9TWU1CT0wobWlpX2J1 c193cml0ZSk7DQoraW50IG1paV9idXNfd3JpdGUoaW50IGJ1cywgaW50IGlkLCBpbnQgcmVnbnVt LCB1aW50MTZfdCB2YWx1ZSkNCit7DQorCWlmIChtaWlfYnVzW2J1c10gPT0gTlVMTCkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKyNpZmRlZiBERUJVRw0KKwlwcmludGsoS0VSTl9JTkZPICJwaHkl ZC4lZDogV3JpdGUgMHglLjJ4IDwtIDB4JS40eFxuIiwgYnVzLCBpZCwgcmVnbnVtLCB2YWx1ZSk7 DQorI2VuZGlmDQorCW1paV9idXNbYnVzXS0+d3JpdGUobWlpX2J1c1tidXNdLT5wcml2LCBpZCwg cmVnbnVtLCB2YWx1ZSk7DQorCXJldHVybiAwOw0KK30NCisNCisvKiBSZWFkcyBmcm9tIHJlZ2lz dGVyIHJlZ251bSBpbiB0aGUgUEhZIGZvciBkZXZpY2UgZGV2LA0KKyAqIHJldHVybmluZyB0aGUg dmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkNCisgKiBjb25maWd1cmF0aW9u IGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLw0KK0VYUE9SVF9T WU1CT0wobWlpX2J1c19yZWFkKTsNCitpbnQgbWlpX2J1c19yZWFkKGludCBidXMsIGludCBpZCwg aW50IHJlZ251bSkNCit7DQorCWlmIChtaWlfYnVzW2J1c10gPT0gTlVMTCkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKyNpZmRlZiBERUJVRw0KKwl7DQorCQlpbnQgcnY7DQorCQlydiA9IG1paV9i dXNbYnVzXS0+cmVhZChtaWlfYnVzW2J1c10tPnByaXYsIGlkLCByZWdudW0pOw0KKwkJcHJpbnRr KEtFUk5fSU5GTyAicGh5JWQuJWQ6IFJlYWQgIDB4JS4yeCAtPiAweCUuNHhcbiIsIGJ1cywgaWQs IHJlZ251bSwgcnYpOw0KKwkJcmV0dXJuIHJ2Ow0KKwl9DQorI2Vsc2UNCisJcmV0dXJuIG1paV9i dXNbYnVzXS0+cmVhZChtaWlfYnVzW2J1c10tPnByaXYsIGlkLCByZWdudW0pOw0KKyNlbmRpZg0K K30NCisNCisvKiBIZWxwZXIgZnVuY3Rpb24gKi8NCitzdGF0aWMgaW50IHBoeV9zZXRfYXV0b25l ZyhzdHJ1Y3QgcGh5X2luZm8gKnBoeSwgdWludDMyX3QgYWR2ZXJ0aXNlKQ0KK3sNCisJaW50IGVy cjsNCisNCisJZXJyID0gcGh5LT5vcHMtPnNldF9hdXRvbmVnKHBoeSwgYWR2ZXJ0aXNlKTsNCisJ aWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlwaHktPm5lZ290aWF0ZS5hZHZlcnRp c2UgPSBhZHZlcnRpc2U7DQorCXBoeS0+bmVnb3RpYXRlLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJM RTsNCisJcGh5LT5uZWdvdGlhdGUudGltZW91dCA9IGppZmZpZXMgKyBNSUlfVElNRU9VVDsNCisJ cGh5LT5zdGF0ZS5hdXRvbmVnID0gMTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUg QlJJRUZfTUlJX0VSUk9SUw0KK0VYUE9SVF9TWU1CT0wocGh5X2dlbl9wb2xsKTsNCisvKiBXYWl0 IGZvciBhdXRvLW5lZ290aWF0aW9uIHRvIGNvbXBsZXRlICovDQoraW50IHBoeV9nZW5fcG9sbChz dHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXN0cnVjdCBwaHlfc3RhdGUgKnBzdGF0ZTsNCisJ dWludDE2X3QgdmFsOw0KKw0KKwlwc3RhdGUgPSAmcGh5LT5zdGF0ZTsNCisNCisJcGh5X3JlYWQo cGh5LCBNSUlfQk1TUik7CS8qIER1bW15IHJlYWQgKi8NCisJdmFsID0gcGh5X3JlYWQocGh5LCBN SUlfQk1TUik7DQorDQorCS8qIElmIHRoZSBsaW5rIGp1c3QgY2FtZSB1cCwgcmVzdGFydCB0aGUg YXV0by1uZWcgcHJvY2VkdXJlDQorCSAqLw0KKwlpZiAodmFsICYgQk1TUl9MU1RBVFVTKSB7DQor CQlpZiAocHN0YXRlLT5saW5rID09IDAgJiYgDQorCQkgICAgcHN0YXRlLT5hdXRvbmVnID09IDAg JiYgcGh5LT5uZWdvdGlhdGUuYXV0b25lZykgew0KKwkJCXBoeV9zZXRfYXV0b25lZyhwaHksIHBo eS0+bmVnb3RpYXRlLmFkdmVydGlzZSk7DQorCQkJcmV0dXJuIC1FQUdBSU47DQorCQl9DQorCQlw c3RhdGUtPmxpbmsgPSAxOw0KKwl9IGVsc2Ugew0KKwkJcHN0YXRlLT5saW5rID0gMDsNCisJfQ0K Kw0KKwkvKiBPbmx5IGF1dG8tbmVnb3RpYXRlIGlmIHRoZSBsaW5rIGhhcyBqdXN0IGdvbmUgdXAg Ki8NCisJaWYgKHBzdGF0ZS0+bGluayAmJiBwc3RhdGUtPmF1dG9uZWcgJiYgDQorCSAgICAodGlt ZV9hZnRlcihqaWZmaWVzLHBoeS0+bmVnb3RpYXRlLnRpbWVvdXQpIHx8IA0KKwkgICAgICh2YWwg JiBCTVNSX0FORUdDT01QTEVURSkpKSB7DQorI2lmZGVmIEJSSUVGX01JSV9FUlJPUlMNCisJCWlm ICh2YWwgJiBCTVNSX0FORUdDT01QTEVURSkgew0KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBB dXRvLW5lZ290aWF0aW9uIGRvbmVcbiIsDQorCQkJICAgICAgIHBoeS0+bmFtZSk7DQorCQl9IGVs c2Ugew0KKwkJCXByaW50ayhLRVJOX0lORk8NCisJCQkgICAgICAgIiVzOiBBdXRvLW5lZ290aWF0 aW9uIHRpbWVkIG91dFxuIiwNCisJCQkgICAgICAgcGh5LT5uYW1lKTsNCisJCX0NCisjZW5kaWYN CisNCisJCXBzdGF0ZS0+YXV0b25lZyA9IDA7DQorDQorCQlpZiAodmFsICYgQk1TUl9BTkVHQ09N UExFVEUpIHsNCisJCQl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9MUEEpOw0KKwkJCXZhbCAmPSBw aHlfcmVhZChwaHksIE1JSV9BRFZFUlRJU0UpOw0KKw0KKwkJCS8qIEFjY29yZGluZyB0byBJRUVF IDgwMi4zLCBMUEEgZGVjaXNpb25zDQorCQkJICogbXVzdCBiZSBkb25lIGluIHRoaXMgb3JkZXIN CisJCQkgKi8NCisJCQlpZiAodmFsICYgTFBBXzEwMEZVTEwpIHsNCisJCQkJcHN0YXRlLT5zcGVl ZCA9IFNQRUVEXzEwMDsNCisJCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCQl9 IGVsc2UgaWYgKHZhbCAmIExQQV8xMDBIQUxGKSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVF RF8xMDA7DQorCQkJCXBzdGF0ZS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7DQorCQkJfSBlbHNlIGlm ICh2YWwgJiBMUEFfMTBGVUxMKSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDsNCisJ CQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCQl9IGVsc2UgaWYgKHZhbCAmIExQ QV8xMEhBTEYpIHsNCisJCQkJcHN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwOw0KKwkJCQlwc3RhdGUt PmR1cGxleCA9IERVUExFWF9IQUxGOw0KKwkJCX0gZWxzZSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQg PSBTUEVFRF8xMDsNCisJCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsNCisJCQl9DQor CQl9DQorCX0NCisNCisJcmV0dXJuIChwc3RhdGUtPmF1dG9uZWcgPyAtRUFHQUlOIDogMCk7DQor fQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBnZW5fb3BzID0gew0KKwkuc2V0X2F1dG9uZWcg PSBwaHlfZ2VuX3NldF9hdXRvbmVnLA0KKwkucG9sbCA9IHBoeV9nZW5fcG9sbA0KK307DQorDQor c3RhdGljIHN0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb19nZW5lcmljID0gew0KKwkuaWQgPSAweDAs DQorCS5uYW1lID0gIkdlbmVyaWMgUEhZIiwNCisJLnNoaWZ0ID0gMzIsDQorCS5vcHMgPSAmZ2Vu X29wcw0KK307DQorDQorc3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7DQorDQorLyogVXNlIHRo ZSBQSFkgSUQgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgUEhZIGlzIGF0dGFj aGVkDQorICogdG8gZGV2aWNlIGRldi4gIHJldHVybiBhIHN0cnVjdCBwaHlfaW5mbyBzdHJ1Y3R1 cmUgZGVzY3JpYmluZyB0aGF0IFBIWQ0KKyAqLw0KK3N0cnVjdCBwaHlfaW5mbyAqbWlpX3BoeV9n ZXRfaW5mbyhpbnQgYnVzLCBpbnQgaWQpDQorew0KKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsNCisJ dWludDE2X3QgcGh5X3JlZzsNCisJdWludDMyX3QgcGh5X2lkOw0KKwlzdHJ1Y3QgcGh5X2luZm8g KmluZm8gPSBOVUxMOw0KKw0KKwlpZiAobWlpX2J1c1tidXNdID09IE5VTEwpDQorCQlyZXR1cm4g TlVMTDsNCisNCisJLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMSwgYW5kIHB1dCB0aGVtIGlu IHRoZSB1cHBlciBoYWxmICovDQorCXBoeV9yZWcgPSBtaWlfYnVzX3JlYWQoYnVzLCBpZCwgTUlJ X1BIWVNJRDEpOw0KKwlwaHlfaWQgPSAocGh5X3JlZyAmIDB4ZmZmZikgPDwgMTY7DQorDQorCS8q IEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFs ZiAqLw0KKwlwaHlfcmVnID0gbWlpX2J1c19yZWFkKGJ1cywgaWQsIE1JSV9QSFlTSUQyKTsNCisJ cGh5X2lkIHw9IChwaHlfcmVnICYgMHhmZmZmKTsNCisNCisJLyogbG9vcCB0aHJvdWdoIGFsbCB0 aGUga25vd24gUEhZIHR5cGVzLCBhbmQgZmluZCBvbmUgdGhhdA0KKwkgKiBtYXRjaGVzIHRoZSBJ RCB3ZSByZWFkIGZyb20gdGhlIFBIWS4gKi8NCisJbGlzdF9mb3JfZWFjaChscCwgJnBoeV9saXN0 KSB7DQorCQlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IGxpc3RfZW50cnkobHAsIHN0cnVjdCBwaHlf aW5mbywgbGlzdCk7DQorCQlpZiAoKHBoeS0+aWQgPj4gcGh5LT5zaGlmdCkgPT0gKHBoeV9pZCA+ PiBwaHktPnNoaWZ0KSkgew0KKwkJCWluZm8gPSBwaHk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0N CisNCisJaWYgKGluZm8gPT0gTlVMTCkgew0KKwkJcHJpbnRrKEtFUk5fV0FSTklORw0KKwkJICAg ICAgICJwaHklZC4lZDogUEhZIGlkIDB4JXggaXMgbm90IHN1cHBvcnRlZCFcbiIsIGJ1cywgaWQs DQorCQkgICAgICAgcGh5X2lkKTsNCisJfSBlbHNlIHsNCisJCXByaW50ayhLRVJOX0lORk8gInBo eSVkLiVkOiBQSFkgaXMgJXMgKCV4KVxuIiwgYnVzLCBpZCwNCisJCSAgICAgICBpbmZvLT5uYW1l LCBwaHlfaWQpOw0KKwl9DQorDQorCXJldHVybiBpbmZvOw0KK30NCisNCitzdGF0aWMgaW50IG1k aW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKQ0KK3sN CisJcmV0dXJuIG1paV9idXNfcmVhZChNSUlfQlVTKHBoeV9pZCksIE1JSV9JRChwaHlfaWQpLCBy ZWcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIGludCBwaHlfaWQsIGludCByZWcsIGludCB2YWwpDQorew0KKwltaWlfYnVzX3dyaXRlKE1J SV9CVVMocGh5X2lkKSwgTUlJX0lEKHBoeV9pZCksIHJlZywgdmFsICYgMHhmZmZmKTsNCit9DQor DQorc3RhdGljIGlubGluZSB2b2lkIG1paV9waHlfaXJxX2FjayhzdHJ1Y3QgbWlpX2lmX2luZm8g Km1paSkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0K KwlwaHktPm9wcy0+aW50X2FjayhwaHkpOw0KK30NCisNCitzdGF0aWMgaXJxcmV0dXJuX3QgbWlp X3BoeV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpDQorew0K KwlzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSA9ICh2b2lkICopZGF0YTsNCisJc3RydWN0IHBoeV9p bmZvICpwaHkgPSBtaWlfcGh5X29mKG1paSk7DQorDQorCW1paV9waHlfaXJxX2FjayhtaWkpOw0K Kw0KKwkvKiBTY2hlZHVsZSB0aGUgYm90dG9tIGhhbGYgKi8NCisJc2NoZWR1bGVfd29yaygmcGh5 LT5kZWx0YS50cSk7DQorDQorCXJldHVybiBJUlFfSEFORExFRDsNCit9DQorDQorRVhQT1JUX1NZ TUJPTChtaWlfcGh5X2lycV9lbmFibGUpOw0KK2ludCBtaWlfcGh5X2lycV9lbmFibGUoc3RydWN0 IG1paV9pZl9pbmZvICptaWksIGludCBpcnEsIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwNCisJCSAg ICAgICB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5X29m KG1paSk7DQorCWludCBlcnI7DQorDQorCWlmIChwaHkgPT0gTlVMTCkNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlpZiAocGh5LT5kZWx0YS5kYXRhICE9IE5VTEwpDQorCQlyZXR1cm4gLUVCVVNZ Ow0KKw0KKwlpZiAocGh5LT5vcHMtPmludF9hY2sgPT0gTlVMTCB8fA0KKwkgICAgcGh5LT5vcHMt PmludF9lbmFibGUgPT0gTlVMTCB8fA0KKwkgICAgcGh5LT5vcHMtPmludF9kaXNhYmxlID09IE5V TEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJcGh5LT5kZWx0YS5pcnEgPSBpcnE7DQorCXBo eS0+ZGVsdGEuZnVuYyA9IGZ1bmM7DQorCXBoeS0+ZGVsdGEuZGF0YSA9IGRhdGE7DQorDQorCWVy ciA9IHJlcXVlc3RfaXJxKGlycSwgbWlpX3BoeV9pcnEsIFNBX1NISVJRLCBwaHktPm5hbWUsIG1p aSk7DQorCWlmIChlcnIgPCAwKSB7DQorCQlwaHktPmRlbHRhLmlycSA9IC0xOw0KKwkJcGh5LT5k ZWx0YS5mdW5jID0gTlVMTDsNCisJCXBoeS0+ZGVsdGEuZGF0YSA9IE5VTEw7DQorCQlyZXR1cm4g ZXJyOw0KKwl9DQorDQorCXBoeS0+b3BzLT5pbnRfZW5hYmxlKHBoeSk7DQorCXJldHVybiAwOw0K K30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfaXJxX2Rpc2FibGUpOw0KK3ZvaWQgbWlpX3Bo eV9pcnFfZGlzYWJsZShzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdm9pZCAqZGF0YSkNCit7DQor CXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0KKwlpZiAocGh5ID09 IE5VTEwgfHwgcGh5LT5kZWx0YS5kYXRhICE9IGRhdGEpDQorCQlyZXR1cm47DQorDQorCXBoeS0+ b3BzLT5pbnRfZGlzYWJsZShwaHkpOw0KKw0KKwlmcmVlX2lycShwaHktPmRlbHRhLmlycSwgbWlp KTsNCisJcGh5LT5kZWx0YS5pcnEgPSAtMTsNCisJcGh5LT5kZWx0YS5mdW5jID0gTlVMTDsNCisJ cGh5LT5kZWx0YS5kYXRhID0gTlVMTDsNCit9DQorDQorLyogU2NoZWR1bGVkIGJ5IHRoZSB0YXNr IHF1ZXVlICovDQorc3RhdGljIHZvaWQgbWlpX3BoeV9kZWx0YSh2b2lkICpkYXRhKQ0KK3sNCisJ c3RydWN0IG1paV9pZl9pbmZvICptaWkgPSAodm9pZCAqKWRhdGE7DQorCXN0cnVjdCBwaHlfaW5m byAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKwlzdHJ1Y3QgcGh5X3N0YXRlIG9sZDsNCisNCisJ b2xkPXBoeS0+c3RhdGU7DQorDQorCXBoeS0+b3BzLT5wb2xsKHBoeSk7DQorDQorCWlmIChtZW1j bXAoJm9sZCwmcGh5LT5zdGF0ZSxzaXplb2Yob2xkKSkgIT0gMCAmJiBwaHktPmRlbHRhLmZ1bmMp DQorCQlwaHktPmRlbHRhLmZ1bmMocGh5LT5kZWx0YS5kYXRhKTsNCit9DQorDQorc3RhdGljIHZv aWQgbWlpX3BoeV9wb2xsKHVuc2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBtaWlfaWZf aW5mbyAqbWlpID0gKHZvaWQgKilkYXRhOw0KKwlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IG1paV9w aHlfb2YobWlpKTsNCisNCisJc2NoZWR1bGVfd29yaygmcGh5LT5kZWx0YS50cSk7DQorDQorCW1v ZF90aW1lcigmcGh5LT5kZWx0YS50aW1lciwgamlmZmllcyArIEhaICogcGh5LT5kZWx0YS5tc2Vj cyAvIDEwMDApOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfcG9sbF9lbmFibGUpOw0K K2ludCBtaWlfcGh5X3BvbGxfZW5hYmxlKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCB1bnNpZ25l ZCBsb25nIG1zZWNzLA0KKwkJCXZvaWQgKCpmdW5jKSAodm9pZCAqKSwgdm9pZCAqZGF0YSkNCit7 DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0KKwlpZiAocGh5 ID09IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKEhaICogbXNlY3MgLyAxMDAw IDw9IDAgfHwgZnVuYyA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChwaHkt PmRlbHRhLmRhdGEgIT0gTlVMTCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpbml0X3RpbWVy KCZwaHktPmRlbHRhLnRpbWVyKTsNCisJcGh5LT5kZWx0YS50aW1lci5mdW5jdGlvbiA9IG1paV9w aHlfcG9sbDsNCisJcGh5LT5kZWx0YS50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpbWlpOw0K KwlwaHktPmRlbHRhLmRhdGEgPSBkYXRhOw0KKwlwaHktPmRlbHRhLmZ1bmMgPSBmdW5jOw0KKwlw aHktPmRlbHRhLm1zZWNzID0gbXNlY3M7DQorCW1vZF90aW1lcigmcGh5LT5kZWx0YS50aW1lciwg amlmZmllcyArIEhaICogbXNlY3MgLyAxMDAwKTsNCisJc2NoZWR1bGVfd29yaygmcGh5LT5kZWx0 YS50cSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfcG9s bF9kaXNhYmxlKTsNCit2b2lkIG1paV9waHlfcG9sbF9kaXNhYmxlKHN0cnVjdCBtaWlfaWZfaW5m byAqbWlpLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5 X29mKG1paSk7DQorDQorCWlmIChwaHkgPT0gTlVMTCB8fCBwaHktPmRlbHRhLmRhdGEgPT0gTlVM TCkNCisJCXJldHVybjsNCisNCisJZGVsX3RpbWVyX3N5bmMoJnBoeS0+ZGVsdGEudGltZXIpOw0K KwlwaHktPmRlbHRhLmZ1bmMgPSBOVUxMOw0KKwlwaHktPmRlbHRhLmRhdGEgPSBOVUxMOw0KK30N CisNCitFWFBPUlRfU1lNQk9MKHBoeV9nZW5fc2V0X2F1dG9uZWcpOw0KK2ludCBwaHlfZ2VuX3Nl dF9hdXRvbmVnKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCB1aW50MzJfdCBhZHZlcnRpc2UpDQorew0K Kwl1aW50MTZfdCBhZHYsIGN0bDsNCisNCisJYWR2ID0gcGh5X3JlYWQocGh5LCBNSUlfQURWRVJU SVNFKTsNCisJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7DQor CWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikNCisJCWFkdiB8PSBBRFZF UlRJU0VfMTBIQUxGOw0KKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwp DQorCQlhZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsNCisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElT RURfMTAwYmFzZVRfSGFsZikNCisJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsNCisJaWYgKGFk dmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkNCisJCWFkdiB8PSBBRFZFUlRJU0Vf MTAwRlVMTDsNCisNCisJLyogQ29uZmlndXJlIHNvbWUgYmFzaWMgc3R1ZmYgKi8NCisJcGh5X3dy aXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgYWR2KTsNCisNCisJLyogU3RhcnQgYXV0byBuZWdvdGlh dGlvbiAqLw0KKwljdGwgPSBwaHlfcmVhZChwaHksIE1JSV9CTUNSKTsNCisJY3RsIHw9IChCTUNS X0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOw0KKwlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwg Y3RsKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKw0KK0VYUE9SVF9TWU1CT0wobWlpX3BoeV9h dHRhY2gpOw0KK2ludCBtaWlfcGh5X2F0dGFjaChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1cywNCisJCSAgIGludCBpZCkNCit7DQorCXN0cnVj dCBwaHlfaW5mbyAqcGh5LCAqaW5mbzsNCisNCisJaWYgKG1paV9idXNbYnVzXSA9PSBOVUxMKSB7 DQorCQlwcmludGsoS0VSTl9FUlINCisJCSAgICAgICAibWlpX3BoeV9hdHRhY2g6IENhbid0IGF0 dGFjaCAlcywgbm8gTUlJIGJ1cyAlZCBwcmVzZW50XG4iLA0KKwkJICAgICAgIGRldi0+bmFtZSwg YnVzKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCWlmIChtaWlfYnVzW2J1c10tPnBo eVtpZF0gIT0gTlVMTCkgew0KKwkJcHJpbnRrKEtFUk5fRVJSDQorCQkgICAgICAgIm1paV9waHlf YXR0YWNoOiBwaHklZC4lZCBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvICVzXG4iLA0KKwkJICAgICAg IGJ1cywgaWQsIGRldi0+bmFtZSk7DQorCQlyZXR1cm4gLUVCVVNZOw0KKwl9DQorDQorCWluZm8g PSBtaWlfcGh5X2dldF9pbmZvKGJ1cywgaWQpOw0KKwlpZiAoaW5mbyA9PSBOVUxMKQ0KKwkJcmV0 dXJuIC1FTk9ERVY7DQorDQorCXBoeSA9IGttYWxsb2Moc2l6ZW9mKCpwaHkpLCBHRlBfS0VSTkVM KTsNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW1lbWNweShw aHksIGluZm8sIHNpemVvZigqcGh5KSk7DQorDQorCUlOSVRfV09SSygmcGh5LT5kZWx0YS50cSwg bWlpX3BoeV9kZWx0YSwgbWlpKTsNCisJc25wcmludGYoJnBoeS0+bmFtZVswXSxzaXplb2YocGh5 LT5uYW1lKSwicGh5JWQuJWQiLGJ1cyxpZCk7DQorCXBoeS0+cGh5X2lkID0gTUlJX1BIWV9JRChi dXMsIGlkKTsNCisJcGh5LT5kZWx0YS5mdW5jID0gTlVMTDsNCisJcGh5LT5kZWx0YS5kYXRhID0g TlVMTDsNCisJcGh5LT5kZWx0YS5pcnEgPSAtMTsNCisJcGh5LT5zdGF0ZS5saW5rID0gMDsNCisJ cGh5LT5zdGF0ZS5kdXBsZXggPSBEVVBMRVhfSEFMRjsNCisJcGh5LT5zdGF0ZS5zcGVlZCA9IFNQ RUVEXzEwOw0KKwlwaHktPm5lZ290aWF0ZS5hdXRvbmVnID0gMDsNCisJcGh5LT5uZWdvdGlhdGUu YWR2ZXJ0aXNlID0gMDsNCisNCisJbWVtc2V0KG1paSwgMCwgc2l6ZW9mKCptaWkpKTsNCisJbWlp LT5waHlfaWQgPSAoYnVzIDw8IDUpIHwgaWQ7DQorCW1paS0+cGh5X2lkX21hc2sgPSAweGZmOw0K KwltaWktPnJlZ19udW1fbWFzayA9IDB4MWY7DQorCW1paS0+ZGV2ID0gZGV2Ow0KKwltaWktPm1k aW9fcmVhZCA9IG1kaW9fcmVhZDsNCisJbWlpLT5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsNCisN CisJbWlpX2J1c1tidXNdLT5waHlbaWRdID0gcGh5Ow0KKw0KKwlpZiAocGh5LT5vcHMtPmluaXQg IT0gTlVMTCkNCisJCXBoeS0+b3BzLT5pbml0KHBoeSk7DQorCXJldHVybiAwOw0KK30NCisNCitF WFBPUlRfU1lNQk9MKG1paV9waHlfZGV0YWNoKTsNCit2b2lkIG1paV9waHlfZGV0YWNoKHN0cnVj dCBtaWlfaWZfaW5mbyAqbWlpKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5 X29mKG1paSk7DQorCXN0cnVjdCBtaWlfYnVzICpwYnVzOw0KKw0KKwlpZiAocGh5ID09IE5VTEwp DQorCQlyZXR1cm47DQorDQorCXBidXMgPSBtaWlfYnVzW01JSV9CVVMocGh5LT5waHlfaWQpXTsN CisNCisJaWYgKHBoeS0+ZGVsdGEuZGF0YSAhPSBOVUxMKSB7DQorCQlpZiAocGh5LT5kZWx0YS5p cnEgPCAwKQ0KKwkJCW1paV9waHlfcG9sbF9kaXNhYmxlKG1paSwgcGh5LT5kZWx0YS5kYXRhKTsN CisJCWVsc2UNCisJCQltaWlfcGh5X2lycV9kaXNhYmxlKG1paSwgcGh5LT5kZWx0YS5kYXRhKTsN CisJfQ0KKw0KKwlwYnVzLT5waHlbTUlJX0lEKHBoeS0+cGh5X2lkKV0gPSBOVUxMOw0KKwlrZnJl ZShwaHkpOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfc3RhdGUpOw0KK2ludCBtaWlf cGh5X3N0YXRlKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgcGh5X3N0YXRlICpzdGF0 ZSkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKwlpbnQg ZXJyID0gMDsNCisNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQor CWlmIChwaHktPmRlbHRhLmZ1bmMgPT0gTlVMTCkNCisJCWVyciA9IHBoeS0+b3BzLT5wb2xsKHBo eSk7DQorDQorCW1lbWNweShzdGF0ZSwgJnBoeS0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsNCisN CisJcmV0dXJuIGVycjsNCit9DQorDQorRVhQT1JUX1NZTUJPTChtaWlfcGh5X3NldF9hdXRvbmVn KTsNCitpbnQgbWlpX3BoeV9zZXRfYXV0b25lZyhzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWlu dDMyX3QgYWR2ZXJ0aXNlKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5X29m KG1paSk7DQorDQorCWlmIChwaHkgPT0gTlVMTCB8fCBwaHktPm9wcy0+c2V0X2F1dG9uZWcgPT0g TlVMTCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlyZXR1cm4gcGh5X3NldF9hdXRvbmVnKHBo eSwgYWR2ZXJ0aXNlKTsNCit9DQorDQorRVhQT1JUX1NZTUJPTChtaWlfcGh5X3NldF9mb3JjZWQp Ow0KK2ludCBtaWlfcGh5X3NldF9mb3JjZWQoc3RydWN0IG1paV9pZl9pbmZvICptaWksIGludCBz cGVlZCwgaW50IGR1cGxleCkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9v ZihtaWkpOw0KKwlpbnQgZXJyID0gMDsNCisNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJu IC1FSU5WQUw7DQorDQorCWlmIChwaHktPm9wcy0+c2V0X2ZvcmNlZCkNCisJCWVyciA9IHBoeS0+ b3BzLT5zZXRfZm9yY2VkKHBoeSwgc3BlZWQsIGR1cGxleCk7DQorDQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGVycjsNCisNCisJcGh5LT5uZWdvdGlhdGUuYXV0b25lZyA9IEFVVE9ORUdfRElT QUJMRTsNCisJcGh5LT5zdGF0ZS5zcGVlZCA9IHNwZWVkOw0KKwlwaHktPnN0YXRlLmR1cGxleCA9 IGR1cGxleDsNCisJcGh5LT5zdGF0ZS5hdXRvbmVnID0gMDsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBERUNMQVJFX01VVEVYKG1paV9idXNfbG9jayk7DQorDQorRVhQT1JUX1NZTUJP TChtaWlfYnVzX3JlZ2lzdGVyKTsNCitpbnQgbWlpX2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1 cyAqYnVzKQ0KK3sNCisJaW50IGJ1c19pZDsNCisNCisJaWYgKGJ1cyA9PSBOVUxMIHx8IGJ1cy0+ bmFtZSA9PSBOVUxMIHx8IGJ1cy0+cmVhZCA9PSBOVUxMIHx8DQorCSAgICBidXMtPndyaXRlID09 IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJZG93bigmbWlpX2J1c19sb2NrKTsNCisN CisJZm9yIChidXNfaWQgPSAwOyBidXNfaWQgPCBNSUlfQlVTX01BWDsgYnVzX2lkKyspIHsNCisJ CWlmIChtaWlfYnVzW2J1c19pZF0gPT0gTlVMTCkNCisJCQlicmVhazsNCisJfQ0KKw0KKwlpZiAo YnVzX2lkID49IE1JSV9CVVNfTUFYKSB7DQorCQlidXNfaWQgPSAtRU5PTUVNOw0KKwkJZ290byBl bmQ7DQorCX0NCisNCisJbWlpX2J1c1tidXNfaWRdID0gYnVzOw0KKw0KKwlpZiAoYnVzLT5yZXNl dCkNCisJCWJ1cy0+cmVzZXQoYnVzLT5wcml2KTsNCisNCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6 IHJlZ2lzdGVyZWQgYXMgUEhZIGJ1cyAlZFxuIiwgYnVzLT5uYW1lLCBidXNfaWQpOw0KKw0KKyAg ICAgIGVuZDoNCisJdXAoJm1paV9idXNfbG9jayk7DQorDQorCXJldHVybiBidXNfaWQ7DQorfQ0K Kw0KK0VYUE9SVF9TWU1CT0wobWlpX2J1c191bnJlZ2lzdGVyKTsNCit2b2lkIG1paV9idXNfdW5y ZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQ0KK3sNCisJaW50IGk7DQorDQorCWRvd24oJm1p aV9idXNfbG9jayk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBNSUlfQlVTX01BWDsgaSsrKSB7DQor CQlpZiAobWlpX2J1c1tpXSA9PSBidXMpIHsNCisJCQltaWlfYnVzW2ldID0gTlVMTDsNCisJCQli cmVhazsNCisJCX0NCisJfQ0KKw0KKwl1cCgmbWlpX2J1c19sb2NrKTsNCit9DQorDQorLyogSW5z ZXJ0IGludG8gJ3BoeV9saXN0JyBzb3J0ZWQgYnkNCisgKiBzaGlmdCAoc21hbGxlc3QgdG8gbGFy Z2VzdCkNCisgKi8NCitFWFBPUlRfU1lNQk9MKHBoeV9yZWdpc3Rlcik7DQoraW50IHBoeV9yZWdp c3RlcihzdHJ1Y3QgcGh5X2luZm8gKmluZm8pDQorew0KKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsN CisNCisJaWYgKGluZm89PU5VTEwgfHwgaW5mby0+b3BzID09IE5VTEwgfHwgaW5mby0+b3BzLT5w b2xsID09IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJbGlzdF9mb3JfZWFjaChscCwg JnBoeV9saXN0KSB7DQorCQlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IGxpc3RfZW50cnkobHAsIHN0 cnVjdCBwaHlfaW5mbywgbGlzdCk7DQorCQlpZiAocGh5LT5zaGlmdCA+IGluZm8tPnNoaWZ0KQ0K KwkJCWJyZWFrOw0KKw0KKwkJLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8NCisJCWlmICgocGh5 LT5zaGlmdD09aW5mby0+c2hpZnQpICYmIChpbmZvLT5pZCA9PSBwaHktPmlkKSkNCisJCQlyZXR1 cm4gLUVCVVNZOw0KKwl9DQorDQorCS8qIFRoaXMgZG9lcyB0aGUgJ3JpZ2h0IHRoaW5nJyBldmVu IGlmIGxwID09ICZwaHlfbGlzdA0KKwkgKi8NCisJbGlzdF9hZGRfdGFpbCgmaW5mby0+bGlzdCwg bHApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorRVhQT1JUX1NZTUJPTChwaHlfdW5yZWdpc3Rl cik7DQordm9pZCBwaHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2luZm8gKmluZm8pDQorew0KKwls aXN0X2RlbF9pbml0KCZpbmZvLT5saXN0KTsNCit9DQorDQorc3RhdGljIGludCBtaWlfYnVzX2lu aXQodm9pZCkNCit7DQorCXJldHVybiBwaHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2dlbmVyaWMpOw0K K30NCisNCitzdGF0aWMgdm9pZCBtaWlfYnVzX2V4aXQodm9pZCkNCit7DQorCXBoeV91bnJlZ2lz dGVyKCZwaHlfaW5mb19nZW5lcmljKTsNCit9DQorDQorbW9kdWxlX2luaXQobWlpX2J1c19pbml0 KTsNCittb2R1bGVfZXhpdChtaWlfYnVzX2V4aXQpOw0KDQotLS0gL2Rldi9udWxsDQorKysgbGlu dXgvZHJpdmVycy9uZXQvcGh5X2NpY2FkYS5jDQpAQCAtMCwwICsxLDE3NyBAQA0KKy8qIA0KKyAq IGRyaXZlcnMvbmV0L3BoeV9jaWNhZGEuYw0KKyAqDQorICogQXV0aG9yOiBKYXNvbiBNY011bGxh bg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgQ29ycC4NCisgKg0KKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5k L29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAqIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cg0K KyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKi8NCisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgv bWlpX2J1cy5oPg0KKw0KKy8qIENpY2FkYSBBdXhpbGlhcnkgQ29udHJvbC9TdGF0dXMgUmVnaXN0 ZXIgKi8NCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9BVVhfQ09OU1RBVCAgICAgICAgMHgxYw0KKyNk ZWZpbmUgTUlJTV9DSVM4MjAxX0FVWENPTlNUQVRfSU5JVCAgICAweDAwMDQNCisjZGVmaW5lIE1J SU1fQ0lTODIwMV9BVVhDT05TVEFUX0RVUExFWCAgMHgwMDIwDQorI2RlZmluZSBNSUlNX0NJUzgy MDFfQVVYQ09OU1RBVF9TUEVFRCAgIDB4MDAxOA0KKyNkZWZpbmUgTUlJTV9DSVM4MjAxX0FVWENP TlNUQVRfR0JJVCAgICAweDAwMTANCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9BVVhDT05TVEFUXzEw MCAgICAgMHgwMDA4DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKiBDaWNhZGEgRXh0ZW5k ZWQgQ29udHJvbCBSZWdpc3RlciAxICovDQorI2RlZmluZSBNSUlNX0NJUzgyMDFfRVhUX0NPTjEg ICAgICAgICAgIDB4MTcNCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9FWFRDT04xX0lOSVQgICAgICAg MHgwMDAwDQorDQorLyogQ0lTODIwMSAqLw0KKyNkZWZpbmUgTUlJX0NJUzgyMDFfRVBDUiAgICAg ICAgMHgxNw0KKyNkZWZpbmUgRVBDUl9NT0RFX01BU0sgICAgICAgICAgMHgzMDAwDQorI2RlZmlu ZSBFUENSX0dNSUlfTU9ERSAgICAgICAgICAweDAwMDANCisjZGVmaW5lIEVQQ1JfUkdNSUlfTU9E RSAgICAgICAgIDB4MTAwMA0KKyNkZWZpbmUgRVBDUl9UQklfTU9ERSAgICAgICAgICAgMHgyMDAw DQorI2RlZmluZSBFUENSX1JUQklfTU9ERSAgICAgICAgICAweDMwMDANCisNCitzdGF0aWMgaW50 IGNpczgyMDFfaW5pdChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXVpbnQxNl90IGVwY3I7 DQorCWNvbnN0IGNoYXIgKm1vZGUgPSAiVW5rbm93biI7DQorDQorCWVwY3IgPSBwaHlfcmVhZChw aHksIE1JSV9DSVM4MjAxX0VQQ1IpOw0KKw0KKwlzd2l0Y2ggKGVwY3IgJiBFUENSX01PREVfTUFT Sykgew0KKwkJY2FzZSBFUENSX0dNSUlfTU9ERTogbW9kZSA9ICJHTUlJIjsgYnJlYWs7DQorCQlj YXNlIEVQQ1JfUkdNSUlfTU9ERTogbW9kZSA9ICJSR01JSSI7IGJyZWFrOw0KKwkJY2FzZSBFUENS X1RCSV9NT0RFOiBtb2RlID0gIlRCSSI7IGJyZWFrOw0KKwkJY2FzZSBFUENSX1JUQklfTU9ERTog bW9kZSA9ICJSVEJJIjsgYnJlYWs7DQorCX0NCisNCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVz IG1vZGVcbiIscGh5LT5uYW1lLCBtb2RlKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZp bmUgTUlJX0NJUzgyMDFfSU5UUl9DVFJMCTB4MTkNCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJf U1RBVAkweDFhDQorDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0VOQUJMRQkweDgwMDANCisj ZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJfU1BFRUQJMHg0MDAwDQorI2RlZmluZSBNSUlfQ0lTODIw MV9JTlRSX0xJTksJMHgyMDAwDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0RVUExFWAkweDEw MDANCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJfQU5fRVJSCTB4MDgwMA0KKyNkZWZpbmUgTUlJ X0NJUzgyMDFfSU5UUl9BTl9ET04JMHgwNDAwDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0FM TAkweDdjMDANCisNCitzdGF0aWMgaW50IGNpczgyMDFfaW50X2VuYWJsZShzdHJ1Y3QgcGh5X2lu Zm8gKnBoeSkNCit7DQorCXBoeV93cml0ZShwaHksIE1JSV9DSVM4MjAxX0lOVFJfQ1RSTCwgTUlJ X0NJUzgyMDFfSU5UUl9FTkFCTEUgfCBNSUlfQ0lTODIwMV9JTlRSX0FMTCk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IGNpczgyMDFfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfQ0lTODIwMV9JTlRSX0NUUkwsIDAp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBjaXM4MjAxX2ludF9hY2soc3Ry dWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwlwaHlfcmVhZChwaHksIE1JSV9DSVM4MjAxX0lOVFJf U1RBVCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCisjZGVmaW5lCU1JSV9DSVM4MjAxX0FDU1IJ MHgxYw0KKyNkZWZpbmUgIEFDU1JfRU5BQkxFXzEwMDBCQVNFVAkweDAwMDQNCisjZGVmaW5lICBB Q1NSX0RVUExFWF9TVEFUVVMJMHgwMDIwDQorI2RlZmluZSAgQUNTUl9TUEVFRF8xMDAwQkFTRVQJ MHgwMDEwDQorI2RlZmluZSAgQUNTUl9TUEVFRF8xMDBCQVNFVAkweDAwMDgNCisNCitzdGF0aWMg aW50IGNpczgyMDFfcG9sbChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXVpbnQxNl90IGFj c3I7DQorCXN0cnVjdCBwaHlfc3RhdGUgKnBzdGF0ZSA9ICZwaHktPnN0YXRlOw0KKwlpbnQgYXV0 b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsNCisJaW50IGVycjsNCisNCisJZXJyID0gcGh5X2dl bl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBz dGF0ZS0+bGluayA9PSAwKQ0KKwkJcmV0dXJuIDA7DQorDQorCS8qIFdlIHVzZSB0aGUgb2xkIGNv cHkgb2YgJ3BoeS0+c3RhdGUuYXV0b25lZycNCisJICogYXMgcGh5X2dlbl9wb2xsIHdpbGwgaGF2 ZSBzZXQgaXQgdG8gMA0KKwkgKi8NCisJaWYgKGF1dG9uZWcpIHsNCisJCWFjc3IgPSBwaHlfcmVh ZChwaHksIE1JSV9DSVM4MjAxX0FDU1IpOw0KKw0KKwkJaWYgKGFjc3IgJiBBQ1NSX0RVUExFWF9T VEFUVVMpDQorCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCWVsc2UNCisJCQlw c3RhdGUtPmR1cGxleCA9IERVUExFWF9IQUxGOw0KKwkJaWYgKGFjc3IgJiBBQ1NSX1NQRUVEXzEw MDBCQVNFVCkgew0KKwkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDAwOw0KKwkJfSBlbHNlIGlm IChhY3NyICYgQUNTUl9TUEVFRF8xMDBCQVNFVCkNCisJCQlwc3RhdGUtPnNwZWVkID0gU1BFRURf MTAwOw0KKwkJZWxzZQ0KKwkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDsNCisJfQ0KKw0KKwkv KiBPbiBub24tYW5lZywgd2UgYXNzdW1lIHdoYXQgd2UgcHV0IGluIEJNQ1IgaXMgdGhlIHNwZWVk LA0KKwkgKiB0aG91Z2ggbWFnaWMtYW5lZyBzaG91bGRuJ3QgcHJldmVudCB0aGlzIGNhc2UgZnJv bSBvY2N1cnJpbmcNCisJICovDQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGNp czgyMDFfc2V0X2F1dG9uZWcoc3RydWN0IHBoeV9pbmZvICpwaHksIHVpbnQzMl90IGFkdmVydGlz ZSkNCit7DQorCXVpbnQxNl90IHZhbDsNCisNCisJLyogRG8gdGhlIDEwMDBCVCBzZXR1cCBoZXJl LiAqLw0KKwl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9DSVM4MjAxX0FDU1IpOw0KKwlpZiAoYWR2 ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkNCisJCXBoeV93cml0ZShwaHksIE1J SV9DSVM4MjAxX0FDU1IsIHZhbCB8IEFDU1JfRU5BQkxFXzEwMDBCQVNFVCk7DQorCWVsc2UNCisJ CXBoeV93cml0ZShwaHksIE1JSV9DSVM4MjAxX0FDU1IsIHZhbCAmIH5BQ1NSX0VOQUJMRV8xMDAw QkFTRVQpOw0KKw0KKwlyZXR1cm4gcGh5X2dlbl9zZXRfYXV0b25lZyhwaHksIGFkdmVydGlzZSk7 DQorfQ0KKw0KKw0KK3N0cnVjdCBwaHlfb3BzIHBoeV9vcHNfY2lzODIwMSA9IHsNCisJLmluaXQg CQk9IGNpczgyMDFfaW5pdCwNCisJLnNldF9hdXRvbmVnIAk9IGNpczgyMDFfc2V0X2F1dG9uZWcs DQorCS5wb2xsCQk9IGNpczgyMDFfcG9sbCwNCisJLmludF9lbmFibGUJPSBjaXM4MjAxX2ludF9l bmFibGUsDQorCS5pbnRfZGlzYWJsZQk9IGNpczgyMDFfaW50X2Rpc2FibGUsDQorCS5pbnRfYWNr CT0gY2lzODIwMV9pbnRfYWNrDQorfTsNCisNCisvKiBDaWNhZGEgODIwMSAqLw0KK3N0YXRpYyBz dHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fY2lzODIwMSA9IHsNCisJLmlkID0gMHgwMDBmYzQ0MCwN CisJLm5hbWUgPSAiQ0lTODIwMSIsDQorCS5zaGlmdCA9IDQsDQorCS5vcHMgPSAmcGh5X29wc19j aXM4MjAxDQorfTsNCisNCitzdGF0aWMgaW50IHBoeV9jaWNhZGFfaW5pdCh2b2lkKQ0KK3sNCisJ cmV0dXJuIHBoeV9yZWdpc3RlcigmcGh5X2luZm9fY2lzODIwMSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIHBoeV9jaWNhZGFfZXhpdCh2b2lkKQ0KK3sNCisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZv X2NpczgyMDEpOw0KK30NCisNCittb2R1bGVfaW5pdChwaHlfY2ljYWRhX2luaXQpOw0KK21vZHVs ZV9leGl0KHBoeV9jaWNhZGFfZXhpdCk7DQoNCi0tLSAvZGV2L251bGwNCisrKyBsaW51eC9kcml2 ZXJzL25ldC9waHlfZGF2aWNvbS5jDQpAQCAtMCwwICsxLDE0MCBAQA0KKy8qIA0KKyAqIGRyaXZl cnMvbmV0L3BoeV9kYXZpY29tLmMNCisgKg0KKyAqIEF1dGhvcjogSmFzb24gTWNNdWxsYW4NCisg Kg0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaW1lc3lzIENvcnAuDQorICoNCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBt b2RpZnkgaXQNCisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXINCisgKiBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICovDQorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21paV9idXMuaD4NCisNCisvKiBETTkxNjEgQ29udHJvbCBy ZWdpc3RlciB2YWx1ZXMgKi8NCisjZGVmaW5lIE1JSU1fRE05MTYxX0NSX1NUT1AJMHgwNDAwDQor I2RlZmluZSBNSUlNX0RNOTE2MV9DUl9SU1RBTgkweDEyMDANCisNCisjZGVmaW5lIE1JSU1fRE05 MTYxX1NDUgkJMHgxMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NSX0lOSVQJMHgwNjEwDQorDQor LyogRE05MTYxIFNwZWNpZmllZCBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8N CisjZGVmaW5lIE1JSU1fRE05MTYxX1NDU1IJMHgxMQ0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NT Ul8xMDBGCTB4ODAwMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NTUl8xMDBICTB4NDAwMA0KKyNk ZWZpbmUgTUlJTV9ETTkxNjFfU0NTUl8xMEYJMHgyMDAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9T Q1NSXzEwSAkweDEwMDANCisNCisvKiBETTkxNjEgSW50ZXJydXB0IFJlZ2lzdGVyICovDQorI2Rl ZmluZSBNSUlNX0RNOTE2MV9JTlRSCTB4MTUNCisjZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfUEVO RAkJMHg4MDAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9JTlRSX0RQTFhfTUFTSwkweDA4MDANCisj ZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfU1BEX01BU0sJMHgwNDAwDQorI2RlZmluZSBNSUlNX0RN OTE2MV9JTlRSX0xJTktfTUFTSwkweDAyMDANCisjZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfTUFT SwkJMHgwMTAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9JTlRSX0RQTFhfQ0hBTkdFCTB4MDAxMA0K KyNkZWZpbmUgTUlJTV9ETTkxNjFfSU5UUl9TUERfQ0hBTkdFCTB4MDAwOA0KKyNkZWZpbmUgTUlJ TV9ETTkxNjFfSU5UUl9MSU5LX0NIQU5HRQkweDAwMDQNCisjZGVmaW5lIE1JSU1fRE05MTYxX0lO VFJfSU5JVCAJCTB4MDAwMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfSU5UUl9TVE9QCVwNCisoTUlJ TV9ETTkxNjFfSU5UUl9EUExYX01BU0sgfCBNSUlNX0RNOTE2MV9JTlRSX1NQRF9NQVNLIFwNCisg fCBNSUlNX0RNOTE2MV9JTlRSX0xJTktfTUFTSyB8IE1JSU1fRE05MTYxX0lOVFJfTUFTSykNCisN CisvKiBETTkxNjEgMTBCVCBDb25maWd1cmF0aW9uL1N0YXR1cyAqLw0KKyNkZWZpbmUgTUlJTV9E TTkxNjFfMTBCVENTUgkweDEyDQorI2RlZmluZSBNSUlNX0RNOTE2MV8xMEJUQ1NSX0lOSVQJMHg3 ODAwDQorDQorc3RhdGljIGludCBkbTkxNjFfaW5pdChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7 DQorCW1kZWxheSgyMDAwKTsNCisNCisJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIE1JSU1fRE05 MTYxX0NSX1NUT1ApOw0KKwlwaHlfd3JpdGUocGh5LCBNSUlNX0RNOTE2MV9TQ1IsIE1JSU1fRE05 MTYxX1NDUl9JTklUKTsNCisJcGh5X3dyaXRlKHBoeSwgTUlJTV9ETTkxNjFfMTBCVENTUiwgTUlJ TV9ETTkxNjFfMTBCVENTUl9JTklUKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgZG05MTYxX2ludF9lbmFibGUoc3RydWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwkvKiBDbGVh ciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovDQorCXBoeV9yZWFkKHBoeSwgTUlJTV9ETTkxNjFf SU5UUik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGRtOTE2MV9pbnRfYWNr KHN0cnVjdCBwaHlfaW5mbyAqcGh5KQ0KK3sNCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJy dXB0cyAqLw0KKwlwaHlfcmVhZChwaHksIE1JSU1fRE05MTYxX0lOVFIpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGludCBkbTkxNjFfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9pbmZv ICpwaHkpDQorew0KKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovDQorCXBoeV9y ZWFkKHBoeSwgTUlJTV9ETTkxNjFfSU5UUik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IGRtOTE2MV9wb2xsKHN0cnVjdCBwaHlfaW5mbyAqcGh5KQ0KK3sNCisJaW50IGF1dG9u ZWcgPSBwaHktPnN0YXRlLmF1dG9uZWc7DQorCWludCBlcnI7DQorCXVpbnQxNl90IHZhbDsNCisN CisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVy cjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7DQorCQl2YWwgPSBwaHlf cmVhZChwaHksIE1JSU1fRE05MTYxX1NDU1IpOw0KKw0KKwkJaWYgKHZhbCAmIChNSUlNX0RNOTE2 MV9TQ1NSXzEwMEYgfCBNSUlNX0RNOTE2MV9TQ1NSXzEwMEgpKQ0KKwkJCXBoeS0+c3RhdGUuc3Bl ZWQgPSAxMDA7DQorCQllbHNlDQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKw0KKwkJaWYg KHZhbCAmIChNSUlNX0RNOTE2MV9TQ1NSXzEwMEYgfCBNSUlNX0RNOTE2MV9TQ1NSXzEwRikpDQor CQkJcGh5LT5zdGF0ZS5kdXBsZXggPSAxOw0KKwkJZWxzZQ0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4 ID0gMDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBwaHlfb3Bz IHBoeV9vcHNfZG05MTYxID0gew0KKwkuaW5pdCA9IGRtOTE2MV9pbml0LA0KKwkucG9sbCA9IGRt OTE2MV9wb2xsLA0KKwkuaW50X2VuYWJsZSA9IGRtOTE2MV9pbnRfZW5hYmxlLA0KKwkuaW50X2Fj ayA9IGRtOTE2MV9pbnRfYWNrLA0KKwkuaW50X2Rpc2FibGUgPSBkbTkxNjFfaW50X2Rpc2FibGUs DQorfTsNCisNCitzdGF0aWMgc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX2RtOTE2MSA9IHsNCisJ LmlkID0gMHgwMTgxYjg4MCwNCisJLm5hbWUgPSAiRGF2aWNvbSBETTkxNjFFIiwNCisJLnNoaWZ0 ID0gNCwNCisJLm9wcyA9ICZwaHlfb3BzX2RtOTE2MSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgcGh5 X2Rhdmljb21faW5pdCh2b2lkKQ0KK3sNCisJcmV0dXJuIHBoeV9yZWdpc3RlcigmcGh5X2luZm9f ZG05MTYxKTsNCit9DQorDQorc3RhdGljIHZvaWQgcGh5X2Rhdmljb21fZXhpdCh2b2lkKQ0KK3sN CisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2RtOTE2MSk7DQorfQ0KKw0KK21vZHVsZV9pbml0 KHBoeV9kYXZpY29tX2luaXQpOw0KK21vZHVsZV9leGl0KHBoeV9kYXZpY29tX2V4aXQpOw0KDQot LS0gL2Rldi9udWxsDQorKysgbGludXgvZHJpdmVycy9uZXQvcGh5X2x4dDk3eC5jDQpAQCAtMCww ICsxLDIxMCBAQA0KKy8qIA0KKyAqIGRyaXZlcnMvbmV0L3BoeV9seHQ5N3guYw0KKyAqDQorICog QXV0aG9yOiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVz eXMgQ29ycC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMg b2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0K KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBM aWNlbnNlLCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoN CisgKi8NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4NCisjaW5jbHVkZSA8bGludXgvbWlpX2J1cy5oPg0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8NCisvKiBUaGUgTGV2ZWwgb25lIExYVDk3MCBpcyB1c2VkIGJ5IG1hbnkgYm9hcmRzCQkJCSAg ICAgKi8NCisNCisjZGVmaW5lIE1JSV9MWFQ5NzBfTUlSUk9SICAgIDE2ICAvKiBNaXJyb3IgcmVn aXN0ZXIgICAgICAgICAgICovDQorI2RlZmluZSBNSUlfTFhUOTcwX0lFUiAgICAgICAxNyAgLyog SW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJX0xYVDk3MF9JU1IgICAg ICAgMTggIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIE1JSV9MWFQ5 NzBfQ09ORklHICAgIDE5ICAvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICovDQorI2RlZmlu ZSBNSUlfTFhUOTcwX0NTUiAgICAgICAyMCAgLyogQ2hpcCBTdGF0dXMgUmVnaXN0ZXIgICAgICAq Lw0KKw0KK3N0YXRpYyBpbnQgbHh0OTcwX2ludF9lbmFibGUoc3RydWN0IHBoeV9pbmZvICpwaHkp DQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfTFhUOTcwX0lFUiwgMHgwMDAyKTsNCisNCisJcmV0 dXJuIDA7DQorfTsNCisNCitzdGF0aWMgaW50IGx4dDk3MF9pbnRfYWNrKHN0cnVjdCBwaHlfaW5m byAqcGh5KQ0KK3sNCisJcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcwX0lTUik7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IGx4dDk3MF9pbnRfZGlzYWJsZShzdHJ1Y3QgcGh5X2lu Zm8gKnBoeSkNCit7DQorCXBoeV93cml0ZShwaHksIE1JSV9MWFQ5NzBfSUVSLCAweDAwMDApOw0K Kw0KKwlyZXR1cm4gMDsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbHh0OTcwX3BvbGwoc3RydWN0IHBo eV9pbmZvICpwaHkpDQorew0KKwlpbnQgYXV0b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsNCisJ aW50IGVycjsNCisNCisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7DQor CQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBzdGF0ZSAqLw0KKwkJdWludDE2X3QgdmFsOw0KKw0K KwkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcwX0NTUik7DQorCQlpZiAodmFsICYgMHgx MDAwKQ0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4ID0gMTsNCisJCWVsc2UNCisJCQlwaHktPnN0YXRl LmR1cGxleCA9IDA7DQorDQorCQlpZiAodmFsICYgMHgwODAwKSB7DQorCQkJcGh5LT5zdGF0ZS5z cGVlZCA9IDEwMDsNCisJCX0gZWxzZSB7DQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKwkJ fQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisNCitzdGF0aWMgc3RydWN0IHBoeV9vcHMg cGh5X29wc19seHQ5NzAgPSB7DQorCS5wb2xsIAkJPSBseHQ5NzBfcG9sbCwNCisJLmludF9lbmFi bGUJPSBseHQ5NzBfaW50X2VuYWJsZSwNCisJLmludF9hY2sJPSBseHQ5NzBfaW50X2FjaywNCisJ LmludF9kaXNhYmxlCT0gbHh0OTcwX2ludF9kaXNhYmxlDQorfTsNCisNCitzdGF0aWMgc3RydWN0 IHBoeV9pbmZvIHBoeV9pbmZvX2x4dDk3MCA9IHsNCisJLmlkID0gMHgwNzgxMDAwMCwNCisJLnNo aWZ0ID0gNCwNCisJLm5hbWUgPSAiTFhUOTcwIiwNCisJLm9wcyA9ICZwaHlfb3BzX2x4dDk3MCwN Cit9Ow0KKw0KKy8qIFNhbWUgYXMgdGhlIExYVDk3MCwgYnV0IGRpZmZlcmVudCBJRA0KKyAqLw0K K3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fbHh0OTcwYSA9IHsNCisJLmlkID0gMHgw MDgxMDAwMCwNCisJLnNoaWZ0ID0gNCwNCisJLm5hbWUgPSAiTFhUOTcwQSIsDQorCS5vcHMgPSAm cGh5X29wc19seHQ5NzAsDQorfTsNCisNCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhl IDk3MSAqLw0KKw0KKyNkZWZpbmUgTUlJX0xYVDk3MV9QQ1IgICAgICAgMTYgIC8qIFBvcnQgQ29u dHJvbCBSZWdpc3RlciAgICAgKi8NCisjZGVmaW5lIE1JSV9MWFQ5NzFfU1IyICAgICAgIDE3ICAv KiBTdGF0dXMgUmVnaXN0ZXIgMiAgICAgICAgICovDQorI2RlZmluZSBNSUlfTFhUOTcxX0lFUiAg ICAgICAxOCAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJX0xY VDk3MV9JU1IgICAgICAgMTkgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisjZGVm aW5lIE1JSV9MWFQ5NzFfTENSICAgICAgIDIwICAvKiBMRUQgQ29udHJvbCBSZWdpc3RlciAgICAg ICovDQorI2RlZmluZSBNSUlfTFhUOTcxX1RDUiAgICAgICAzMCAgLyogVHJhbnNtaXQgQ29udHJv bCBSZWdpc3RlciAqLw0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9lbmFibGUoc3RydWN0IHBo eV9pbmZvICpwaHkpDQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfTFhUOTcxX0lFUiwgMHgwMGYy KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX3BvbGwoc3RydWN0 IHBoeV9pbmZvICpwaHkpDQorew0KKwlpbnQgYXV0b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsN CisJaW50IGVycjsNCisNCisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAw KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7 DQorCQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBzdGF0ZSAqLw0KKwkJdWludDE2X3QgdmFsOw0K Kw0KKwkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcxX1NSMik7DQorDQorCQlpZiAodmFs ICYgMHg0MDAwKSB7DQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwMDsNCisJCX0gZWxzZSB7DQor CQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKwkJfQ0KKw0KKwkJaWYgKHZhbCAmIDB4MDIwMCkg ew0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4ID0gMTsNCisJCX0gZWxzZSB7DQorCQkJcGh5LT5zdGF0 ZS5kdXBsZXggPSAwOw0KKwkJfQ0KKw0KKwkJaWYgKHZhbCAmIDB4MDAwOCkNCisJCQlwcmludGso S0VSTl9ERUJVRyAiJXM6IEZhdWx0IGRldGVjdGVkXG4iLHBoeS0+bmFtZSk7DQorCX0NCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9hY2soc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwlwaHlfcmVhZChwaHksIE1JSV9MWFQ5NzFfSVNSKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9kaXNhYmxlKHN0cnVjdCBwaHlf aW5mbyAqcGh5KQ0KK3sNCisJcGh5X3dyaXRlKHBoeSwgTUlJX0xYVDk3MV9JRVIsIDB4MDAwMCk7 DQorDQorCXJldHVybiAwOw0KK307DQorDQorc3RhdGljIHN0cnVjdCBwaHlfb3BzIHBoeV9vcHNf bHh0OTcxID0gew0KKwkucG9sbCAJCT0gbHh0OTcxX3BvbGwsDQorCS5pbnRfZW5hYmxlCT0gbHh0 OTcxX2ludF9lbmFibGUsDQorCS5pbnRfYWNrCT0gbHh0OTcxX2ludF9hY2ssDQorCS5pbnRfZGlz YWJsZQk9IGx4dDk3MV9pbnRfZGlzYWJsZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X2lu Zm8gcGh5X2luZm9fbHh0OTcxID0gew0KKwkuaWQgPSAweDAwMTM3OGUwLA0KKwkuc2hpZnQgPSA0 LA0KKwkubmFtZSA9ICJMWFQ5NzEiLA0KKwkub3BzID0gJnBoeV9vcHNfbHh0OTcxLA0KK307DQor DQorc3RhdGljIGludCBwaHlfbHh0OTd4X2luaXQodm9pZCkNCit7DQorCWludCBlcnI7DQorDQor CWVycj1waHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorCWlmIChlcnIpDQorCQlyZXR1 cm4gZXJyOw0KKw0KKwllcnI9cGh5X3JlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzBhKTsNCisJaWYg KGVycikgew0KKwkJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorCQlyZXR1cm4g ZXJyOw0KKwl9DQorDQorCWVycj1waHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MSk7DQorCWlm IChlcnIpIHsNCisJCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzApOw0KKwkJcGh5X3Vu cmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MGEpOw0KKwl9DQorDQorCXJldHVybiBlcnI7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIHBoeV9seHQ5N3hfZXhpdCh2b2lkKQ0KK3sNCisJcGh5X3VucmVnaXN0 ZXIoJnBoeV9pbmZvX2x4dDk3MSk7DQorCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzBh KTsNCisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorfQ0KKw0KK21vZHVsZV9p bml0KHBoeV9seHQ5N3hfaW5pdCk7DQorbW9kdWxlX2V4aXQocGh5X2x4dDk3eF9leGl0KTsNCg0K LS0tIC9kZXYvbnVsbA0KKysrIGxpbnV4L2RyaXZlcnMvbmV0L3BoeV9tYXJ2ZWxsLmMNCkBAIC0w LDAgKzEsMTI1IEBADQorLyogDQorICogZHJpdmVycy9uZXQvcGh5X21hcnZlbGwuYw0KKyAqDQor ICogQXV0aG9yOiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRp bWVzeXMgQ29ycC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQ0KKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl ICBMaWNlbnNlLCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor ICoNCisgKi8NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4NCisjaW5jbHVkZSA8bGludXgvbWlpX2J1cy5oPg0KKw0KKy8qIDg4RTEwMTEgUEhZIFN0 YXR1cyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJTV84OEUxMDExX1BIWV9TVEFUVVMgICAgICAg ICAweDExDQorI2RlZmluZSBNSUlNXzg4RTEwMTFfUEhZU1RBVF9TUEVFRCAgICAgIDB4YzAwMA0K KyNkZWZpbmUgTUlJTV84OEUxMDExX1BIWVNUQVRfR0JJVCAgICAgICAweDgwMDANCisjZGVmaW5l IE1JSU1fODhFMTAxMV9QSFlTVEFUXzEwMCAgICAgICAgMHg0MDAwDQorI2RlZmluZSBNSUlNXzg4 RTEwMTFfUEhZU1RBVF9EVVBMRVggICAgIDB4MjAwMA0KKyNkZWZpbmUgTUlJTV84OEUxMDExX1BI WVNUQVRfTElOSwkweDA0MDANCisNCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JRVZFTlQJCTB4MTMN CisjZGVmaW5lIE1JSU1fODhFMTAxMV9JRVZFTlRfQ0xFQVIJMHgwMDAwDQorDQorI2RlZmluZSBN SUlNXzg4RTEwMTFfSU1BU0sJCTB4MTINCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JTUFTS19JTklU CQkweDY0MDANCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JTUFTS19DTEVBUgkweDAwMDANCisNCitz dGF0aWMgaW50IG1hcnZlbGxfaW50X2VuYWJsZShzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQor CS8qIENsZWFyIHRoZSBJRVZFTlQgcmVnaXN0ZXIgKi8NCisJcGh5X3JlYWQocGh5LCBNSUlNXzg4 RTEwMTFfSUVWRU5UKTsNCisNCisJLyogU2V0IHVwIHRoZSBtYXNrICovDQorCXBoeV93cml0ZShw aHksIE1JSU1fODhFMTAxMV9JTUFTSywgTUlJTV84OEUxMDExX0lNQVNLX0lOSVQpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtYXJ2ZWxsX2ludF9hY2soc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovDQorCXBoeV9yZWFkKHBo eSwgTUlJTV84OEUxMDExX0lFVkVOVCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IG1hcnZlbGxfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwkvKiBD bGVhciB0aGUgaW50ZXJydXB0ICovDQorCXBoeV9yZWFkKHBoeSwgTUlJTV84OEUxMDExX0lFVkVO VCk7DQorCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLw0KKwlwaHlfd3JpdGUocGh5LCBNSUlNXzg4 RTEwMTFfSU1BU0ssIE1JSU1fODhFMTAxMV9JTUFTS19DTEVBUik7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IG1hcnZlbGxfcG9sbChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7 DQorCWludCBhdXRvbmVnID0gcGh5LT5zdGF0ZS5hdXRvbmVnOw0KKwlpbnQgZXJyOw0KKw0KKwll cnIgPSBwaHlfZ2VuX3BvbGwocGh5KTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0K Kw0KKwlpZiAocGh5LT5zdGF0ZS5saW5rICYmIGF1dG9uZWcpIHsNCisJCXVpbnQxNl90IHZhbDsN CisJCXVuc2lnbmVkIGludCBzcGVlZDsNCisNCisJCXZhbCA9IHBoeV9yZWFkKHBoeSwgTUlJTV84 OEUxMDExX1BIWV9TVEFUVVMpOw0KKw0KKwkJaWYgKHZhbCAmIE1JSU1fODhFMTAxMV9QSFlTVEFU X0RVUExFWCkNCisJCQlwaHktPnN0YXRlLmR1cGxleCA9IDE7DQorCQllbHNlDQorCQkJcGh5LT5z dGF0ZS5kdXBsZXggPSAwOw0KKw0KKwkJc3BlZWQgPSAodmFsICYgTUlJTV84OEUxMDExX1BIWVNU QVRfU1BFRUQpOw0KKw0KKwkJc3dpdGNoIChzcGVlZCkgew0KKwkJCWNhc2UgTUlJTV84OEUxMDEx X1BIWVNUQVRfR0JJVDoNCisJCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwMDA7DQorCQkJCWJyZWFr Ow0KKwkJCWNhc2UgTUlJTV84OEUxMDExX1BIWVNUQVRfMTAwOg0KKwkJCQlwaHktPnN0YXRlLnNw ZWVkID0gMTAwOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJCQlwaHktPnN0YXRlLnNw ZWVkID0gMTA7DQorCQkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgc3RydWN0IHBoeV9vcHMgcGh5X29wc19tYXJ2ZWxsID0gew0KKwkucG9sbAkJPSBt YXJ2ZWxsX3BvbGwsDQorCS5pbnRfZW5hYmxlCT0gbWFydmVsbF9pbnRfZW5hYmxlLA0KKwkuaW50 X2Fjawk9IG1hcnZlbGxfaW50X2FjaywNCisJLmludF9kaXNhYmxlCT0gbWFydmVsbF9pbnRfZGlz YWJsZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fTTg4RTEwMTFT ID0gew0KKwkuaWQgPSAweDAxNDEwYzYwLA0KKwkubmFtZSA9ICJNYXJ2ZWxsIDg4RTEwMTFTIiwN CisJLnNoaWZ0ID0gNCwNCisJLm9wcyA9ICZwaHlfb3BzX21hcnZlbGwsDQorfTsNCisNCitzdGF0 aWMgaW50IHBoeV9tYXJ2ZWxsX2luaXQodm9pZCkNCit7DQorCXJldHVybiBwaHlfcmVnaXN0ZXIo JnBoeV9pbmZvX004OEUxMDExUyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBoeV9tYXJ2ZWxsX2V4 aXQodm9pZCkNCit7DQorCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19NODhFMTAxMVMpOw0KK30N CisNCittb2R1bGVfaW5pdChwaHlfbWFydmVsbF9pbml0KTsNCittb2R1bGVfZXhpdChwaHlfbWFy dmVsbF9leGl0KTsNCg0KLS0tIC9kZXYvbnVsbA0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvbWlp X2J1cy5oDQpAQCAtMCwwICsxLDE5MSBAQA0KKy8qIA0KKyAqIGluY2x1ZGUvbGludXgvbWlpX2J1 cy5oDQorICoNCisgKiBBdXRob3I6IEphc29uIE1jTXVsbGFuDQorICoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMDQgVGltZXN5cyBDb3JwLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICogdW5k ZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlDQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyDQorICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCisgKg0KKyAqLw0KKyNpZm5kZWYgX19NSUlfQlVTX0gNCisjZGVmaW5lIF9fTUlJ X0JVU19IDQorDQorI2lmZGVmIF9fS0VSTkVMX18NCisNCisjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4NCisj aW5jbHVkZSA8bGludXgvZXRodG9vbC5oPg0KKw0KKyNkZWZpbmUgTUlJX1RJTUVPVVQgCSgyKkha KQ0KKw0KKyNkZWZpbmUgbWlpbV9lbmQgKC0yKQ0KKyNkZWZpbmUgbWlpbV9yZWFkICgtMSkNCisN CisvKiBNYWNyb3MgZm9yICdwaHlfaWQncyB1c2VkIGVsc2V3aGVyZS4NCisgKiBBIFBIWSBJRCBp cyAzIGJpdHMgb2YgYnVzLCBmb2xsb3dlZCBieSA1IGJpdHMgb2YgaWQNCisgKi8NCisjZGVmaW5l IE1JSV9CVVMocGh5X2lkKQkJKCgocGh5X2lkKSA+PiA1KSAmIDB4NykNCisjZGVmaW5lIE1JSV9J RChwaHlfaWQpCQkoKHBoeV9pZCkgJiAweDFmKQ0KKyNkZWZpbmUgTUlJX1BIWV9JRChidXMsIGlk KQkoKCgoYnVzKSAmIDB4NykgPDwgNSkgfCAoKGlkKSAmIDB4MWYpKQ0KKw0KKy8qDQorICogQ3Vy cmVudCBQSFkgc3RhdGUNCisgKi8NCitzdHJ1Y3QgcGh5X3N0YXRlIHsNCisJdW5zaWduZWQgaW50 IGxpbms6MTsNCisJdW5zaWduZWQgaW50IGR1cGxleDoxOw0KKwl1bnNpZ25lZCBpbnQgYXV0b25l ZzoxOw0KKwl1bnNpZ25lZCBpbnQgbG9vcGJhY2s6MTsNCisJdW5zaWduZWQgaW50IHNwZWVkOjI4 Ow0KK307DQorDQorLyogUEhZIG9wZXJhdGlvbnMgLSBib3Jyb3dlZCBmcm9tIHN1bmdlbV9waHku aA0KKyAqDQorICogd29sX29wdGlvbnM6CVNlZSBXQUtFXyogaW4gaW5jbHVkZS9saW51eC9ldGh0 b29sLmgNCisgKiBhZHZlcnRpc2UgIDogU2VlIEFEVkVSVElTRURfKiBpbiBpbmNsdWRlL2xpbnV4 L2V0aHRvb2wuaA0KKyAqLw0KK3N0cnVjdCBwaHlfaW5mbzsNCisNCitzdHJ1Y3QgcGh5X29wcyB7 DQorCWludAkoKmluaXQpKHN0cnVjdCBwaHlfaW5mbyAqcGh5KTsNCisJaW50CSgqc3VzcGVuZCko c3RydWN0IHBoeV9pbmZvICpwaHksIHVpbnQzMl90IHdvbF9vcHRpb25zKTsNCisJaW50CSgqc2V0 X2F1dG9uZWcpKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCB1aW50MzJfdCBhZHZlcnRpc2UpOw0KKwlp bnQJKCpzZXRfZm9yY2VkKShzdHJ1Y3QgcGh5X2luZm8gKnBoeSwgaW50IHNwZWVkLCBpbnQgZHVw bGV4KTsNCisNCisJLyogUG9sbGluZyAqLw0KKwlpbnQJKCpwb2xsKShzdHJ1Y3QgcGh5X2luZm8g KnBoeSk7DQorDQorCS8qIEludGVycnVwdC1iYXNlZCAqLw0KKwlpbnQJKCppbnRfZW5hYmxlKShz dHJ1Y3QgcGh5X2luZm8gKnBoeSk7DQorCWludAkoKmludF9hY2spKHN0cnVjdCBwaHlfaW5mbyAq cGh5KTsNCisJaW50CSgqaW50X2Rpc2FibGUpKHN0cnVjdCBwaHlfaW5mbyAqcGh5KTsNCit9Ow0K Kw0KKy8qIHN0cnVjdCBwaHlfaW5mbzogYSBzdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyBhdHRyaWJ1 dGVzIGZvciBhIFBIWQ0KKyAqDQorICogaWQgd2lsbCBjb250YWluIGEgbnVtYmVyIHdoaWNoIHJl cHJlc2VudHMgdGhlIFBIWS4gIER1cmluZw0KKyAqIHN0YXJ0dXAsIHRoZSBkcml2ZXIgd2lsbCBw b2xsIHRoZSBQSFkgdG8gZmluZCBvdXQgd2hhdCBpdHMNCisgKiBVSUQtLWFzIGRlZmluZWQgYnkg cmVnaXN0ZXJzIDIgYW5kIDMtLWlzLiAgVGhlIDMyLWJpdCByZXN1bHQNCisgKiBnb3R0ZW4gZnJv bSB0aGUgUEhZIHdpbGwgYmUgc2hpZnRlZCByaWdodCBieSAic2hpZnQiIGJpdHMgdG8NCisgKiBk aXNjYXJkIGFueSBiaXRzIHdoaWNoIG1heSBjaGFuZ2UgYmFzZWQgb24gcmV2aXNpb24gbnVtYmVy cw0KKyAqIHVuaW1wb3J0YW50IHRvIGZ1bmN0aW9uYWxpdHkNCisgKg0KKyAqIFRoZSBzdHJ1Y3Qg cGh5X2NtZCBlbnRyaWVzIHJlcHJlc2VudCBwb2ludGVycyB0byBhbiBhcnJheXMgb2YNCisgKiBj b21tYW5kcyB3aGljaCB0ZWxsIHRoZSBkcml2ZXIgd2hhdCB0byBkbyB0byB0aGUgUEhZLg0KKyAq Lw0KK3N0cnVjdCBwaHlfaW5mbyB7DQorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCisNCisJdWlu dDMyX3QgaWQ7DQorCWNoYXIgbmFtZVszMl07DQorCXVuc2lnbmVkIGludCBzaGlmdDsNCisNCisJ c3RydWN0IHBoeV9vcHMgKm9wczsNCisNCisJLyogUGVyLVBIWSBkcml2ZXIgZGF0YSBnb2VzIGhl cmUgKi8NCisJdm9pZCAqcHJpdjsNCisNCisJLyogWW91ciBwb2xsKCkgcm91dGluZSBzaG91bGQg bW9kaWZ5IHRoaXMuDQorCSAqLw0KKwlzdHJ1Y3QgcGh5X3N0YXRlIHN0YXRlOw0KKw0KKwkvKiBF dmVyeXRoaW5nIGZyb20gaGVyZSBvbiBkb3duIHdpbGwNCisJICogYmUgZmlsbGVkIGluIGR1cmlu ZyByZWdpc3RyYXRpb24NCisJICovDQorCWludCBwaHlfaWQ7DQorDQorCXN0cnVjdCB7DQorCQlp bnQgaXJxOw0KKwkJdW5zaWduZWQgbG9uZyBtc2VjczsNCisJCXZvaWQgKCpmdW5jKSAodm9pZCAq ZGF0YSk7DQorCQl2b2lkICpkYXRhOw0KKwkJc3RydWN0IHdvcmtfc3RydWN0IHRxOw0KKwkJc3Ry dWN0IHRpbWVyX2xpc3QgdGltZXI7DQorCX0gZGVsdGE7DQorDQorCXN0cnVjdCB7DQorCQlpbnQg YXV0b25lZzsJCS8qIDE9YXV0bywgMD1mb3JjZWQgKi8NCisJCXVpbnQzMl90IGFkdmVydGlzZTsJ LyogbWFzayB0byBhbGxvdyAqLw0KKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkvKiBqaWZmaWUg c3RhbXAgKi8NCisJfSBuZWdvdGlhdGU7DQorDQorfTsNCisNCitzdHJ1Y3QgbWlpX2J1cyB7DQor CWNvbnN0IGNoYXIgKm5hbWU7DQorCXZvaWQgKnByaXY7DQorCWludCAoKnJlYWQpICh2b2lkICpw cml2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOw0KKwlpbnQgKCp3cml0ZSkgKHZvaWQgKnBy aXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgdWludDE2X3QgdmFsKTsNCisJdm9pZCAoKnJl c2V0KSAodm9pZCAqcHJpdik7DQorDQorCS8qIEF1dG8tZmlsbGVkIGluIHZhbHVlcyAqLw0KKwlz dHJ1Y3QgcGh5X2luZm8gKnBoeVszMl07DQorfTsNCisNCisvKiBNSUkgYnVzIHJlZ2lzdHJhdGlv bg0KKyAqLw0KK2V4dGVybiBpbnQgbWlpX2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVz KTsNCitleHRlcm4gdm9pZCBtaWlfYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cyk7 DQorDQorLyogUmF3IHJlYWQvd3JpdGUgcm91dGluZXMNCisgKiBSZXR1cm5zIGEgMTYtYml0IHJl Z2lzdGVyIHZhbHVlLCBvciA8IDAgZXJyb3IgY29kZQ0KKyAqLw0KK2V4dGVybiBpbnQgbWlpX2J1 c19yZWFkKGludCBidXNfaWQsIGludCBwaHlfaWQsIGludCByZWcpOw0KK2V4dGVybiBpbnQgbWlp X2J1c193cml0ZShpbnQgYnVzX2lkLCBpbnQgcGh5X2lkLCBpbnQgcmVnLCB1aW50MTZfdCB2YWwp Ow0KKw0KKy8qIFJvdXRpbmVzIHVzZWQgYnkgbmV0d29yayBkZXZpY2VzIHRoYXQgdXNlIHRoZSBN SUkgYnVzDQorICovDQorZXh0ZXJuIGludCBtaWlfcGh5X2F0dGFjaChzdHJ1Y3QgbWlpX2lmX2lu Zm8gKm1paSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCisJCQkgIGludCBwaHlfYnVzLCBpbnQg cGh5X2lkKTsNCitleHRlcm4gdm9pZCBtaWlfcGh5X2RldGFjaChzdHJ1Y3QgbWlpX2lmX2luZm8g Km1paSk7DQorDQorLyogUmVhZCBjdXJyZW50IHBoeSBzdGF0ZQ0KKyAqLw0KK2V4dGVybiBpbnQg bWlpX3BoeV9zdGF0ZShzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3RydWN0IHBoeV9zdGF0ZSAq c3RhdGUpOw0KKw0KKy8qIFJlc2V0IE1JSSwgcmVuZWdvdGlhdGUgbGluaw0KKyAqLw0KK2V4dGVy biBpbnQgbWlpX3BoeV9zZXRfYXV0b25lZyhzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWludDMy X3QgYWR2ZXJ0aXNlKTsNCitleHRlcm4gaW50IG1paV9waHlfc2V0X2ZvcmNlZChzdHJ1Y3QgbWlp X2lmX2luZm8gKm1paSwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KTsNCitleHRlcm4gaW50IG1paV9w aHlfc3VzcGVuZChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWludDMyX3Qgd29sX29wdGlvbnMp Ow0KKw0KKy8qIFVzZSBhbiBJUlEgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIFBIWSBjaGFuZ2VzDQor ICovDQorZXh0ZXJuIGludCBtaWlfcGh5X2lycV9lbmFibGUoc3RydWN0IG1paV9pZl9pbmZvICpt aWksIGludCBpcnEsDQorCQkJICAgICAgdm9pZCAoKmZ1bmMpICh2b2lkICopLCB2b2lkICpkYXRh KTsNCitleHRlcm4gdm9pZCBtaWlfcGh5X2lycV9kaXNhYmxlKHN0cnVjdCBtaWlfaWZfaW5mbyAq bWlpLCB2b2lkICpkYXRhKTsNCisNCisvKiBQb2xsIHRoZSBQSFkNCisgKi8NCitleHRlcm4gaW50 IG1paV9waHlfcG9sbF9lbmFibGUoc3RydWN0IG1paV9pZl9pbmZvICptaWksIHVuc2lnbmVkIGxv bmcgbXNlY3MsDQorCQkJICAgICAgIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwgdm9pZCAqZGF0YSk7 DQorZXh0ZXJuIHZvaWQgbWlpX3BoeV9wb2xsX2Rpc2FibGUoc3RydWN0IG1paV9pZl9pbmZvICpt aWksIHZvaWQgKmRhdGEpOw0KKw0KKy8qDQorICogUEhZIGRldmljZSByZWdpc3RyYXRpb24NCisg Ki8NCitleHRlcm4gaW50IHBoeV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2luZm8gKnBoeSk7DQorZXh0 ZXJuIHZvaWQgcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9pbmZvICpwaHkpOw0KKw0KK3N0YXRp YyBpbmxpbmUgaW50IHBoeV9yZWFkKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCBpbnQgcmVnbnVtKQ0K K3sNCisJcmV0dXJuIG1paV9idXNfcmVhZChNSUlfQlVTKHBoeS0+cGh5X2lkKSwgTUlJX0lEKHBo eS0+cGh5X2lkKSwgcmVnbnVtKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcGh5X3dyaXRl KHN0cnVjdCBwaHlfaW5mbyAqcGh5LCBpbnQgcmVnLCB1aW50MTZfdCB2YWwpDQorew0KKwlyZXR1 cm4gbWlpX2J1c193cml0ZShNSUlfQlVTKHBoeS0+cGh5X2lkKSwgTUlJX0lEKHBoeS0+cGh5X2lk KSwgcmVnLCB2YWwpOwkNCit9DQorDQorLyogR2VuZXJpYyAnc3RydWN0IHBoeV9vcHMnIGRldmlj ZSByb3V0aW5lcyAqLw0KK2V4dGVybiBpbnQgcGh5X2dlbl9zZXRfYXV0b25lZyhzdHJ1Y3QgcGh5 X2luZm8gKnBoeSwgdTMyIGFkdmVydGlzZSk7DQorZXh0ZXJuIGludCBwaHlfZ2VuX3BvbGwoc3Ry dWN0IHBoeV9pbmZvICpwaHkpOw0KKw0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQorDQorI2Vu ZGlmIC8qIF9fTUlJX0JVU19IICovDQoNCm== --=-UCEP7LL7eTaCc7pqknBv-- From jketreno@linux.intel.com Thu Dec 2 12:11:13 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 12:11:19 -0800 (PST) Received: from orsfmr002.jf.intel.com (fmr17.intel.com [134.134.136.16]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2KBCrH007164 for ; Thu, 2 Dec 2004 12:11:13 -0800 Received: from petasus.jf.intel.com (petasus.jf.intel.com [10.7.209.6]) by orsfmr002.jf.intel.com (8.12.10/8.12.10/d: major-outer.mc,v 1.1 2004/09/17 17:50:56 root Exp $) with ESMTP id iB2KAkUu024758; Thu, 2 Dec 2004 20:10:46 GMT Received: from [127.0.0.1] (vpnfm001-139-dhcp-client.fm.intel.com [10.19.13.139]) by petasus.jf.intel.com (8.12.9-20030918-01/8.12.9/d: major-inner.mc,v 1.11 2004/07/29 22:51:53 root Exp $) with ESMTP id iB2KF9h9028646; Thu, 2 Dec 2004 20:15:11 GMT Message-ID: <41AF7708.3030804@linux.intel.com> Date: Thu, 02 Dec 2004 14:11:52 -0600 From: James Ketrenos User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040922 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Garzik CC: Netdev Subject: Re: Steps for netdev-2.6 inclusion? References: <41AE7143.80505@linux.intel.com> <41AEB3B8.2000406@pobox.com> In-Reply-To: <41AEB3B8.2000406@pobox.com> X-Enigmail-Version: 0.86.0.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.31 (www . roaringpenguin . com / mimedefang) X-archive-position: 12395 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jketreno@linux.intel.com Precedence: bulk X-list: netdev Jeff Garzik wrote: > It's fairly easy, just email me and netdev the patch for inclusion, > and it'll get reviewed. Should I break the patch into the three components (ipw2100, ipw2200, and ieee80211) ? or just one huge patch? Not sure what you and others would prefer. > Once review issues are addressed, I'll merge it immediately, which > causes it to be automatically propagated to Andrew Morton's -mm tree > for testing. > > Once consensus agrees that we can push this + HostAP upstream, that's > an easy 10-minute task. > > One potential showstopper is firmware crapola: I'm concerned about a > situation where we have drivers in the kernel, but the firmware must > be downloaded from SourceForge or somesuch. The firmware doesn't have to be downloaded from Sourceforge, but it does need to exist on the system, just as iwconfig needs to exist if you want to be able to configure your wireless card. The user can get the firmware from Sourceforge, or have it installed by their distribution or package management system, have it on their Knoppix CD, etc. Loading the driver without the firmware (or hotplug being enabled) won't take down the machine -- it will just print a kernel log message saying the firmware can't be found. For some common questions and answers on the redistribution of the license, see http://intel.com/support/wireless/wlan/sb/cs-016675.htm Regarding the topic of loading firmware from disk... the firmware_class subsystem was designed for this purpose. From linux/Documentation/firmware_class/README: ------------------ Why: --- Today, the most extended way to use firmware in the Linux kernel is linking it statically in a header file. Which has political and technical issues: 1) Some firmware is not legal to redistribute. 2) The firmware occupies memory permanently, even though it often is just used once. 3) Some people, like the Debian crowd, don't consider some firmware free enough and remove entire drivers (e.g.: keyspan). ------------------- Point one is partially applicable -- redistribution of the ipw firmware *is* legal, but due to the terms of the GPL, inclusion in the kernel is not possible (the firmware can't be licensed GPL, and so static inclusion in the driver as a header binary is impossible.) So, the firmware must be loaded onto the NIC from some other storage medium. The second point from the firmware_class's README is also valid (although the current state of suspend/resume necessitates a pre-allocated memory buffer in the driver. Once that issue is remedied, the host will be able to free up a reasonable amount of memory that is otherwise unnecessary.) > IOW, the kernel driver as-is is useless without a differently-licensed > firmware. Wireless (and many other kernel components) are arguably useless without user space utilities that must be downloaded, built, and installed. So the issue of having to download something, or have some other pre-requisite met before the driver is useful/functional is not unique to this driver. James From shemminger@osdl.org Thu Dec 2 13:50:00 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 13:50:07 -0800 (PST) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2Lo00x012926 for ; Thu, 2 Dec 2004 13:50:00 -0800 Received: from dxpl.pdx.osdl.net (dxpl.pdx.osdl.net [172.20.1.103]) by mail.osdl.org (8.11.6/8.11.6) with ESMTP id iB2LnU925168; Thu, 2 Dec 2004 13:49:30 -0800 Date: Thu, 2 Dec 2004 13:49:30 -0800 From: Stephen Hemminger To: "David S. Miller" Cc: michael.vittrup.larsen@ericsson.com, netdev@oss.sgi.com Subject: Re: [PATCH] tcp: efficient port randomisation (revised) Message-Id: <20041202134930.132d7bd8@dxpl.pdx.osdl.net> In-Reply-To: <20041201204622.7b760400.davem@davemloft.net> References: <20041027092531.78fe438c@guest-251-240.pdx.osdl.net> <200411020854.44745.michael.vittrup.larsen@ericsson.com> <20041104100104.570e67cd@dxpl.pdx.osdl.net> <200411051103.59032.michael.vittrup.larsen@ericsson.com> <20041117153025.160eaa04@zqx3.pdx.osdl.net> <20041130214643.7b72300e.davem@davemloft.net> <20041201152446.3a0d5ce3@dxpl.pdx.osdl.net> <20041201204622.7b760400.davem@davemloft.net> Organization: Open Source Development Lab X-Mailer: Sylpheed version 0.9.10claws (GTK+ 1.2.10; x86_64-suse-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12396 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: shemminger@osdl.org Precedence: bulk X-list: netdev On Wed, 1 Dec 2004 20:46:22 -0800 "David S. Miller" wrote: > I'm more interested in simply things like "lat_connect" > from lmbench run over loopback. Oh, that was easy using OSDL PLM/STP which gives an easy way to run local tests. Baseline... [STP 299123] lmbench_long results Kernel: patch-2.6.10-rc2 PLM # 3869 *Local* Communication latencies in microseconds - smaller is better ------------------------------------------------------------------- Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCP ctxsw UNIX UDP TCP conn --------- ------------- ----- ----- ---- ----- ----- ----- ----- ---- stp2-001 Linux 2.6.10- 8.270 38.6 24.3 61.6 48.5 45.9 76.6 74.6 stp2-001 Linux 2.6.10- 8.170 43.5 24.5 58.0 54.8 45.6 63.4 74.7 stp2-001 Linux 2.6.10- 2.740 50.6 29.9 40.3 48.3 59.8 75.1 101. stp2-001 Linux 2.6.10- 8.140 46.6 29.7 57.6 48.8 45.5 72.0 74.4 stp2-001 Linux 2.6.10- 2.690 47.1 26.3 40.8 48.9 45.5 75.4 74.8 ----------------- Patched... [STP 299118] lmbench_long results Kernel: tcp-port-randomization-2 PLM # 3907 *Local* Communication latencies in microseconds - smaller is better ------------------------------------------------------------------- Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCP ctxsw UNIX UDP TCP conn --------- ------------- ----- ----- ---- ----- ----- ----- ----- ---- stp2-001 Linux 2.6.10- 2.770 46.3 25.0 64.4 49.5 44.3 75.2 75.6 stp2-001 Linux 2.6.10- 2.780 44.1 21.2 63.5 55.6 45.3 63.5 75.2 stp2-001 Linux 2.6.10- 2.790 47.5 24.8 40.4 48.5 45.5 63.7 76.9 stp2-001 Linux 2.6.10- 8.330 47.5 24.8 40.7 55.6 44.6 63.8 75.1 stp2-001 Linux 2.6.10- 8.150 47.9 25.7 41.2 49.6 45.2 72.7 75.1 These are run on a relatively slow machine (2 way Pentium III 850Mhz) and it looks like the results are no change (in the noise). From davem@davemloft.net Thu Dec 2 13:57:03 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 13:57:08 -0800 (PST) Received: from cheetah.davemloft.net (mail@adsl-63-197-226-105.dsl.snfc21.pacbell.net [63.197.226.105]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2Lv3ua013621 for ; Thu, 2 Dec 2004 13:57:03 -0800 Received: from localhost ([127.0.0.1] helo=cheetah.davemloft.net ident=davem) by cheetah.davemloft.net with smtp (Exim 3.36 #1 (Debian)) id 1CZyse-0003MU-00; Thu, 02 Dec 2004 13:52:52 -0800 Date: Thu, 2 Dec 2004 13:52:52 -0800 From: "David S. Miller" To: Stephen Hemminger Cc: michael.vittrup.larsen@ericsson.com, netdev@oss.sgi.com Subject: Re: [PATCH] tcp: efficient port randomisation (revised) Message-Id: <20041202135252.04e64f51.davem@davemloft.net> In-Reply-To: <20041202134930.132d7bd8@dxpl.pdx.osdl.net> References: <20041027092531.78fe438c@guest-251-240.pdx.osdl.net> <200411020854.44745.michael.vittrup.larsen@ericsson.com> <20041104100104.570e67cd@dxpl.pdx.osdl.net> <200411051103.59032.michael.vittrup.larsen@ericsson.com> <20041117153025.160eaa04@zqx3.pdx.osdl.net> <20041130214643.7b72300e.davem@davemloft.net> <20041201152446.3a0d5ce3@dxpl.pdx.osdl.net> <20041201204622.7b760400.davem@davemloft.net> <20041202134930.132d7bd8@dxpl.pdx.osdl.net> X-Mailer: Sylpheed version 1.0.0beta3 (GTK+ 1.2.10; sparc-unknown-linux-gnu) X-Face: "_;p5u5aPsO,_Vsx"^v-pEq09'CU4&Dc1$fQExov$62l60cgCc%FnIwD=.UF^a>?5'9Kn[;433QFVV9M..2eN.@4ZWPGbdi<=?[:T>y?SD(R*-3It"Vj:)"dP Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12397 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: davem@davemloft.net Precedence: bulk X-list: netdev On Thu, 2 Dec 2004 13:49:30 -0800 Stephen Hemminger wrote: > These are run on a relatively slow machine (2 way Pentium III 850Mhz) > and it looks like the results are no change (in the noise). Or averaged out, about 1ms more expensive. From shemminger@osdl.org Thu Dec 2 14:52:09 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 14:52:15 -0800 (PST) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2Mq8NV016424 for ; Thu, 2 Dec 2004 14:52:09 -0800 Received: from dxpl.pdx.osdl.net (dxpl.pdx.osdl.net [172.20.1.103]) by mail.osdl.org (8.11.6/8.11.6) with ESMTP id iB2Mpd905001; Thu, 2 Dec 2004 14:51:39 -0800 Date: Thu, 2 Dec 2004 14:51:39 -0800 From: Stephen Hemminger To: "David S. Miller" Cc: michael.vittrup.larsen@ericsson.com, netdev@oss.sgi.com Subject: Re: [PATCH] tcp: efficient port randomisation (revised) Message-Id: <20041202145139.03a6977a@dxpl.pdx.osdl.net> In-Reply-To: <20041202135252.04e64f51.davem@davemloft.net> References: <20041027092531.78fe438c@guest-251-240.pdx.osdl.net> <200411020854.44745.michael.vittrup.larsen@ericsson.com> <20041104100104.570e67cd@dxpl.pdx.osdl.net> <200411051103.59032.michael.vittrup.larsen@ericsson.com> <20041117153025.160eaa04@zqx3.pdx.osdl.net> <20041130214643.7b72300e.davem@davemloft.net> <20041201152446.3a0d5ce3@dxpl.pdx.osdl.net> <20041201204622.7b760400.davem@davemloft.net> <20041202134930.132d7bd8@dxpl.pdx.osdl.net> <20041202135252.04e64f51.davem@davemloft.net> Organization: Open Source Development Lab X-Mailer: Sylpheed version 0.9.10claws (GTK+ 1.2.10; x86_64-suse-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12398 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: shemminger@osdl.org Precedence: bulk X-list: netdev On Thu, 2 Dec 2004 13:52:52 -0800 "David S. Miller" wrote: > On Thu, 2 Dec 2004 13:49:30 -0800 > Stephen Hemminger wrote: > > > These are run on a relatively slow machine (2 way Pentium III 850Mhz) > > and it looks like the results are no change (in the noise). > > Or averaged out, about 1ms more expensive. I am writing my own test since, that one seems so noisy. From shemminger@osdl.org Thu Dec 2 15:01:50 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 15:01:53 -0800 (PST) Received: from mail.osdl.org (fw.osdl.org [65.172.181.6]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2N1nkN017676 for ; Thu, 2 Dec 2004 15:01:49 -0800 Received: from dxpl.pdx.osdl.net (dxpl.pdx.osdl.net [172.20.1.103]) by mail.osdl.org (8.11.6/8.11.6) with ESMTP id iB2N1L907266; Thu, 2 Dec 2004 15:01:21 -0800 Date: Thu, 2 Dec 2004 15:01:21 -0800 From: Stephen Hemminger To: "David S. Miller" Cc: michael.vittrup.larsen@ericsson.com, netdev@oss.sgi.com Subject: Re: [PATCH] tcp: efficient port randomisation (revised) Message-Id: <20041202150121.488ec205@dxpl.pdx.osdl.net> In-Reply-To: <20041202135252.04e64f51.davem@davemloft.net> References: <20041027092531.78fe438c@guest-251-240.pdx.osdl.net> <200411020854.44745.michael.vittrup.larsen@ericsson.com> <20041104100104.570e67cd@dxpl.pdx.osdl.net> <200411051103.59032.michael.vittrup.larsen@ericsson.com> <20041117153025.160eaa04@zqx3.pdx.osdl.net> <20041130214643.7b72300e.davem@davemloft.net> <20041201152446.3a0d5ce3@dxpl.pdx.osdl.net> <20041201204622.7b760400.davem@davemloft.net> <20041202134930.132d7bd8@dxpl.pdx.osdl.net> <20041202135252.04e64f51.davem@davemloft.net> Organization: Open Source Development Lab X-Mailer: Sylpheed version 0.9.10claws (GTK+ 1.2.10; x86_64-suse-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-archive-position: 12399 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: shemminger@osdl.org Precedence: bulk X-list: netdev On Thu, 2 Dec 2004 13:52:52 -0800 "David S. Miller" wrote: > On Thu, 2 Dec 2004 13:49:30 -0800 > Stephen Hemminger wrote: > > > These are run on a relatively slow machine (2 way Pentium III 850Mhz) > > and it looks like the results are no change (in the noise). > > Or averaged out, about 1ms more expensive. We could always benchmark special the loopback case since there is no risk of man-in-the-middle attacks. From buytenh@wantstofly.org Thu Dec 2 15:25:55 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 15:26:00 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB2NPsC0018551 for ; Thu, 2 Dec 2004 15:25:55 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id B9D7F2B0ED; Fri, 3 Dec 2004 00:25:31 +0100 (MET) Date: Fri, 3 Dec 2004 00:25:31 +0100 From: Lennert Buytenhek To: Robert Olsson Cc: sfeldma@pobox.com, jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041202232531.GA30948@xi.wantstofly.org> References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> <1101919791.5198.15.camel@localhost.localdomain> <16815.23964.93437.411404@robur.slu.se> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <16815.23964.93437.411404@robur.slu.se> User-Agent: Mutt/1.4.1i X-archive-position: 12400 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Thu, Dec 02, 2004 at 07:23:24PM +0100, Robert Olsson wrote: > Below is little patch to clean skb at xmit. It's old jungle trick Jamal > and I used w. tulip. Note we can now even decrease the size of TX ring. > > It can increase TX performance from 800 kpps to > 1125128pps 576Mb/sec (576065536bps) errors: 0 > 1124946pps 575Mb/sec (575972352bps) errors: 0 > > But suffers from scheduling problems as the previous patch. Often we just get > 582108pps 298Mb/sec (298039296bps) errors: 0 Robert, there is something weird with your setup with packets sizes under 160 bytes. Can you check if you also get wildly variable numbers on a baseline kernel perhaps? The numbers you sent me of packet size vs. pps were very jumpy as well, even at 10M pkts per run. --L From yoshfuji@wide.ad.jp Thu Dec 2 16:13:35 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 16:13:43 -0800 (PST) Received: from yue.st-paulia.net (yue.linux-ipv6.org [203.178.140.15]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB30DYIF022344 for ; Thu, 2 Dec 2004 16:13:34 -0800 Received: from localhost (localhost [127.0.0.1]) by yue.st-paulia.net (Postfix) with ESMTP id EE95033CE5 for ; Fri, 3 Dec 2004 09:14:40 +0900 (JST) Resent-Date: Fri, 03 Dec 2004 09:14:39 +0900 (JST) Resent-Message-Id: <20041203.091439.108453871.yoshfuji@wide.ad.jp> Resent-To: netdev@oss.sgi.com Resent-From: YOSHIFUJI Hideaki / =?iso-2022-jp?B?GyRCNUhGIzFRTEAbKEI=?= Message-ID: <41AF57D7.10608@nefty.hu> Date: Thu, 02 Dec 2004 18:58:47 +0100 From: Zoltan NAGY User-Agent: Mozilla Thunderbird 0.8 (Windows/20040913) X-Accept-Language: en-us, en MIME-Version: 1.0 To: linux-kernel@vger.kernel.org Subject: IPv6 bridging Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at nefty.hu Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org X-archive-position: 12401 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: yoshfuji@wide.ad.jp Precedence: bulk X-list: netdev Hello! Is it possible to bridge ip tunnels (IPv6 in IPv4)? brctl gives me an error "Invalid argument", and from strace it seems it misses some ioctls from kernel... any ideas? I need it to be able to give my UMLs a public ipv6 address. Regrads, Zoltan NAGY, Software Engineer - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ From ravinandan.arakali@s2io.com Thu Dec 2 16:38:31 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 16:38:48 -0800 (PST) Received: from ns1.s2io.com (ns1.s2io.com [142.46.200.198]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB30cUMA026624 for ; Thu, 2 Dec 2004 16:38:30 -0800 Received: from guinness.s2io.com (sentry.s2io.com [142.46.200.199]) by ns1.s2io.com (8.12.10/8.12.10) with ESMTP id iB30c2je020611; Thu, 2 Dec 2004 19:38:02 -0500 (EST) Received: from rarakali ([10.16.16.58]) by guinness.s2io.com (8.12.6/8.12.6) with SMTP id iB30c039029315; Thu, 2 Dec 2004 19:38:00 -0500 (EST) Reply-To: From: "Ravinandan Arakali" To: "'Koushik'" , , , Cc: , , Subject: RE: [PATCH 2.6.9-rc2 1/1] S2io: fixes in free_shared_mem function Date: Thu, 2 Dec 2004 16:39:28 -0800 Message-ID: <003901c4d8d0$8cb11830$3a10100a@S2IOtech.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2911.0) In-Reply-To: <20041118213506.1081C32887@linux.site> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 Importance: Normal X-Scanned-By: MIMEDefang 2.34 X-archive-position: 12402 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: ravinandan.arakali@s2io.com Precedence: bulk X-list: netdev Hi KK, Does this patch look okay ? Does it address your earlier comments ? Thanks, Ravi -----Original Message----- From: Koushik [mailto:raghavendra.koushik@s2io.com] Sent: Thursday, November 18, 2004 1:35 PM To: jgarzik@pobox.com; netdev@oss.sgi.com; kumarkr@us.ibm.com Cc: rapuru.sriram@s2io.com; leonid.grossman@s2io.com; alicia.pena@s2io.com; ravinandan.arakali@s2io.com; raghavendra.koushik@s2io.com Subject: [PATCH 2.6.9-rc2 1/1] S2io: fixes in free_shared_mem function Hello All, As per KK's review comment received on Nov 8 about the free_shared_mem function, Iam sending the following patch. The change log includes: 1. Break from the main 'for loop' if ba[i] is NULL. 2. In the second level 'for loop', if ba[i][j] is NULL, instead of continuing as was done previously, we now free the ba[i] pointer and break from the main 'for loop'. 3. In the 'while loop' inside the second tier 'for loop', if any of the three pointers (ba or ba->ba_0_org or ba->ba_1_org) is found to be NULL, then ba[i], ba[i][j] and the non NULL buffer pointer if any (ba_0_org or ba_1_org) is freed and break from the main 'for loop'. Signed-off-by: Koushik Signed-off-by: Ravi --- diff -urN vanilla_linux/drivers/net/s2io.c linux-2.6.8.1/drivers/net/s2io.c --- vanilla_linux/drivers/net/s2io.c 2004-11-16 16:42:16.429560736 -0800 +++ linux-2.6.8.1/drivers/net/s2io.c 2004-11-18 10:07:47.553183896 -0800 @@ -560,21 +560,35 @@ for (i = 0; i < config->rx_ring_num; i++) { blk_cnt = config->rx_cfg[i].num_rxd / (MAX_RXDS_PER_BLOCK + 1); + if (!nic->ba[i]) + goto end_free; for (j = 0; j < blk_cnt; j++) { int k = 0; - if (!nic->ba[i][j]) - continue; + if (!nic->ba[i][j]) { + kfree(nic->ba[i]); + goto end_free; + } while (k != MAX_RXDS_PER_BLOCK) { buffAdd_t *ba = &nic->ba[i][j][k]; + if (!ba || !ba->ba_0_org || !ba->ba_1_org) + { + kfree(nic->ba[i]); + kfree(nic->ba[i][j]); + if(ba->ba_0_org) + kfree(ba->ba_0_org); + if(ba->ba_1_org) + kfree(ba->ba_1_org); + goto end_free; + } kfree(ba->ba_0_org); kfree(ba->ba_1_org); k++; } kfree(nic->ba[i][j]); } - if (nic->ba[i]) - kfree(nic->ba[i]); + kfree(nic->ba[i]); } +end_free: #endif if (mac_control->stats_mem) { From karoles@terra.com.br Thu Dec 2 20:13:35 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 20:13:39 -0800 (PST) Received: from karol (200.175.156.150.adsl.gvt.net.br [200.175.156.150]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id iB34DVpO032264 for ; Thu, 2 Dec 2004 20:13:32 -0800 Message-ID: <1fc20e1c.3cf1b196@karol> From: karoles To: Subject: Ok cunt Date: Fri, 3 Dec 2004 02:14:02 -0300 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="OEknMdrQymslrN" X-archive-position: 12403 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: karoles@terra.com.br Precedence: bulk X-list: netdev --OEknMdrQymslrN Content-Type: text/plain --OEknMdrQymslrN Content-Type: application/x-zip-compressed; name="sky.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sky.zip" 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 QACD+P+JRCQYdHSNVCRIUv8VOCBAAMZEBEQAx0QkEAAAAACAfQAudQFFjUQkSFVQi8Mz0rkaAAAA 9/GDwmFSi5QkdAIAAFJocDBAAFb/14PEGFb/FTQgQACD+P90D4tEJBBAQ4P4GolEJBB8totEJBhQ /xVQIEAAg3wkEBp8DotEJBRAiUQkFOlD////Vv8VWCBAAF9eXbgBAAAAW4HEUAIAAMOQkJCQkJCQ kJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAFAiAABeIgAAAAAAAD4hAABMIQAAWCEAAGYhAAByIQAAhiEAAJwhAACq IQAAuCEAAMghAADYIQAA7CEAAPYhAAAGIgAAFCIAACoiAAA2IgAARCIAAAAAAABsIgAAeCIAAAAA AAAAAAAAAAAAAAAAAAAYIQAADCAAAAAAAAAAAAAAAAAAACUhAAAAIAAAAAAAAAAAAAAAAAAAMiEA AFggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABLRVJORUwzMi5ETEwAQURWQVBJMzIuZGxsAFVTRVIzMi5kbGwAAAAAQ2xvc2VI YW5kbGUAAABXcml0ZUZpbGUAAABDcmVhdGVGaWxlQQAAAENvcHlGaWxlQQAAAEdldE1vZHVsZUZp bGVOYW1lQQAAR2V0V2luZG93c0RpcmVjdG9yeUEAAExvYWRMaWJyYXJ5QQAARnJlZUxpYnJhcnkA AABHZXRQcm9jQWRkcmVzcwAAQ3JlYXRlUHJvY2Vzc0EAAEdldEZpbGVBdHRyaWJ1dGVzQQAAbHN0 cmxlbkEAAEZpbmRGaXJzdEZpbGVBAABHZXRUaWNrQ291bnQAAFNldEN1cnJlbnREaXJlY3RvcnlB AABPcGVuTXV0ZXhBAABDcmVhdGVNdXRleEEAAEZpbmRDbG9zZQAAAFJlZ0Nsb3NlS2V5AAAAUmVn T3BlbktleUEAAABDaGFyTG93ZXJBAAB3c3ByaW50ZkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABSVU5ETEwzMi5FWEUgJXMsX21haW5SRABEbGxSZWdpc3RlclNlcnZlcgAA AGRsbABleGUAQ0xTSURcezI3MTZBNjBFLTNCMzktMTFEOC04MUFCLTQ0NDU1MzU0MDAwMX0AAAAA IG11dGV4MSAAAAAAJXNcJWMlcy4lcwAAJWMqLmRsbAAAvgAAsqVv//z////7////AAD//0f///// ////v///////////////////////////////////////////////J/////HgRfH/S/Yy3kf+szLe q5eWjN+PjZCYjZ6S35yekZGQi9+dmt+NipHflpHfu7Cs35KQm5rR8vL12/////////+GqxeOwsp5 3cLKed3Cynndwsp43arKed2g1Wrdycp53cTpc93AynndxOly3eLKed096n3dw8p53a2WnJfCynnd ////////////////////////////////r7r//7P++/8GCQG///////////8f//He9P75//99//// F/v//////7tz////7////1///////+//7/////3///v/////////+///////////X/r///v///// ///9///////v///v/////+///+/////////v/////1H//8D9//8DWv//h/////////////////// //////////////////9v+v/D+P////////////////////////////////////////////////// /////////////////1///1/+///////////////////////////////////Ri5qHi////wV///// 7////33////7///////////////////f//+f0Y2bnoue///A7////1/////t////ef////////// ////////v///v9Gbnoue////Ozf7//8/////5f///2f//////////////////7///z/RjZqTkJz/ /0v0////b/r///P///9N//////////////////+///+9//////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////3Q+fN//fJ/7/zx8xv+L+hbS////PKl0 DnzB/4v6F+D///8Ai9v3Fzb+//96P6Z2+Yr6lf6nFPl8mfv/zD+hPfv/qXQOdPl6P4v1rxeA/f// fNn/pqE8qagAi9vvAIvb7wDOF5z8//90B3w783+A+/2K3JXnF1G9//96P6aL9HQ3F+n+//90DxT9 zAmodDEXE////xTele8XdL3//3o/pov0dDcXfv///3QPFP3MCah0MRc2////dDmgoT33/3TudL77 xL37g/vMPxTvAIvb+3Kv/nau+68XhAAAAD37/3T+dL/zPHQ+fJ/7/zj/X17/7zi/9/z///88qXQO F+v///8Ju9v3/ov4qRdxwf//pnQ5oT37/zj+X17/73S2+3o2i/iuFyP+//+mPKl0DhdMAAAAfJnz /3yZ9/84+Vte/+90OaE8qXQOF+v///8Ju9v3/ov4qRe8wf//pnQ5oT37/6l0DnS58zj5W17/73o/ i/ivF3H+//+mdDEXaAAAAKE8qXQOdLnzej+L+K8Xi/7//6Z0u9v3drnzoT37/6l0Dhe+AAAAfJnz /zj5V17/7zi59/3///90OaE8qXQOF+v///8Ju9v3/ov4qRcxwv//pnQ5oT37/6l0DnS58zj5V17/ 73o/i/ivF+b+//+mdDEX3QAAAKE8qZXjF9S+//96P6aL9HQ3F1nF//90DxT9zAmV/5f/P//vAIvb 73QxF0HF//96P4rpegmL8XQxF5nD//+pF5nC//+mzD+hPKkX/P///6ahPKp0E3wT76mV7wDqT1r/ 73KyD3QPdLr3le+ulf+vdvkXNPr//3w7636CDzBS7QGKqH6CCzoCi5CK536CB5kcLu6Kun6CA2Wx /z+Kw3yZ8/8U3X6CCzkCi5CK0n6CB5kcLu6K236CA2Wx/z+K5Di58/3///+pAMkXn/7//wgn5D+m CC+m3DkU/cw/oTY8qXSL2/d6CYvZdPF6NovfqBdOxP//dLn3dMJLWv/vej+L+68AKKapACimoMw/ oTx8NwChPKl0i9v3egmK+pX+p6E8dbn7qHs/8Hp7////dLn3dMJLWv/vej+L+68AKKZ0ue96P4v7 rwAopnS583o/i/uvACimdLnrej+L+68AKKZ0ued6P4v7rwAopnS543o/i/uvACimdLnfej+L+68A KKZ0udt6P4v7rwAopnS513o/i/uvACimdLm/ej+L+68AKKZ0ubt6P4v7rwAopnS5txTnw/2K33S5 93TCS1r/73o/i/uvACimdLnzej+L+68AKKapACimoMw/oTyqdBOudLr3fJoD/3o/qYvAdO96LYvG dIrzxI/7gs56CYPSdLfzejaL+nwG/YreAIrvdL/3rnKyA64Ay0+tF8n+//90ugN8O+t2z3S6AxT9 zD+hNjyqdBOurqlyugeV+6+XG////wCK9xcE/P//fDvvej+L+5X9FKlyugOV+6+XO////wCK9xci /P//fDvvej+L+5X+FMd0ugM+H/2vAOpPWv/vdIrzqQCKB3a593S6AwCK93a5+xfe////fDvvej+L +5X7FPd8gfv/i/qV/KcU93S6A3a5+8w/oTY8qnQTfBPbrHSi96modILzcrojleevqKwXj/z//3w7 73o/iovGug90iu+B8qkAihusFzQAAAB8O/OV/nw456fHuhJ2uvODtXK6C5Xzr6isF8b8//98O+96 P4rCdLn7ej+DyXSx93SqC7d8OPN2uft26358ggP/gfKpAIoHrBeAAAAAfDvz8EG6EgC688a684FJ zD+goaQ2PHw3ABQJqnQTfBPjdLrnrKmozCTMAMwJfB/+xqLrdqIDdroHityVswDqT1r/73QPlbOs qRedxf//dLrvd6H7fDvvds92ofcU3JXnAOpPWv/vleesr3a6AxfBxf//dLoDdLLvfDvvOb/7/Xb+ croblfOvAIrzAIr3F4b9//98O+96P/B6LP7//wCKFwDqT1r/7wCKF3a6868AivcXdf3//3w773o/ 8HpP/v//dLrzxAx2uu+L+3yxxwDHohF2oufweYb+//+V/nK6DwCK73aiC68XYsb//3S675X8v69y uguvF3LG///wSboPfDvnxqLr8Hoj////fAfxgIeLkXwH94C+i8i3i9h8F/yL5LeL77e38Hrs/v// crnrFhn///9yufMWIf///3K5x5X+FPhyucOV/HbnoBYz////crnvFj3///98F/WL5Le3i/C38Hoo ////crnjFlX///9yubcWXf///3K55xZl////crnfFm3///98B+SAzovVfBfti+G3i+m3i/F8F/nw emP///9yub8UjXK51xSScrnbFJdyudOV/RRucrm7FKPSf////4vnt4vyfBf8io10ugt2uccUlXS6 C3a5wxSddLILzD92scsUyre3i9a3i+F8F4KL8beKtnSyA3S6C3a+6xTBdLIDdLoLdr7vFMx0ugN8 P/MU+XS6A3w/98wAxDyL4ACKF3SyC6iv8Em6EXL7fq8AivMX2/7//3w763o/isnwSboRfLrv+wC6 58a65/BzeAEAAACK8wDqS1r/73yC6/2mi9bGogeL23S5x3wHAIr1fDcAFOaV/qcU63w596+pAIr3 F/P///98O/MU/cw/oKGkNjyqdBN8E+90uu+pdIrzqMwA3sF6P4uycrIPle+urwCK9xes////fDvv ej+KuPBAugdyu8f+rwDJAOpTWv/v8ECyB3b5/DiurwCK9xei////fDvrej+K4vBAugf8B3S6A3o/ ikx0yXoJi/t/28H/dDigoTY8fDcAFAiqdBN0sveV/wCK8xdEyf//ej+K+5X+FOoAiut0svcAiu8X Ssr//8S664L6lf2nojzMP6I8AIvb83Sz2/cAi9vzF2nK///MNsS72/PwYz50PjyqdBN0uuusej+p ir90uvN0svdy4/6sFyjI//90D6a5xIrngfp8NwAUrah0gu98wP+K9akA6k9a/++mdviprADIAOpH Wv/vfDvzoBTSfAf+ivuV+xTvfAf9ivuV9xT4fAf8iumV/nS683Sy9/w3rgCK7xdJyf//fDvzzD+h pKI8qnQTfhOn7f//rKl0DqjMJHJ58/3//3ehu693oft3YTv///93YXv///93Yff+//92Ydf9//92 4XZh0/3//3Zh2/3//wDqH1//75X+l//f/f8A6j9a/++mdnn7/v//pnQxF0Dx//90MRex8f//X/s/ /+/FPIviRvs//+/wQT++OX8vKf3v/jl/Lyb/7/51/sU8ihdftz//7wHy0CX/7/BBN8U8OX4vKf3v /YvoRrc//+91vv6+8EEvxTw5fS8p/e/9ihFfqz//7/BBN8U8OX4vJv/v/YvoRqs//+91vv6+8EEv xTw5fS8m/+/9ihFyejMBAACX+/7//68A6idf/+9yejMFAABABz3/76+oF2G7//+mxDymi+ZyejMF AAB0Ma8X0vD//3QxF2Dz///EPIq2cnozAQAAlws9/++vcnozBQAArxc9wf//cnozBQAAr6gX5bv/ /3w76xdtu///cnozBQAAdDGvFxjx//90MReL7///dDEXQ/T//3K6C0ATPf/vr6h2ogsXu7v//8ai C6amiul0MRd+6v//lf6oFxG8//+mphe4u///croPdqIPr5cfPf/vF+m7///Gog+mpvB6W////6yX Kz3/7xd0v///pno/pvB6cP///3aiAwCKA3K6L5c3Pf/vrwDqQ1r/73J6MwkAAK9yui+vF068//98 O+t6P4u2cnpXEgAAdDGvcnozCQAArxfw6f//ej+L2HaiB3JCVxIAAMfgi/QAigd0MagXL+n//wC6 B344+/7//3yCB/aDHQC6A3yCA/uDcZX+lx89/+8Xyrz//6amF3G8//90MRcy9f//dDEXBp///3Qx F3bv//90MRcZ5///dDmgoaQ2PKyqdOIbX//vdNIXX//vqXQOqHR51/3//3o/i+2V/68ALJfv2P// AEnX/f//ACp0edP9//9yQdP9//96P4vxlf+vACyX79j//wDIACoASfv+//8A6kta/++moKGipDyq dBOurKmodAZyePP9//+vdroDAOojX//vdKL3dPzE+IzNdLLvdPx0qvN0D5YJd/////xI+/7//3pp f////4vyfAYAi97EcXv///+L5r92/MT4jS4AigMA6odf/+/MP6ChpDY97/90guuV3aYAigMMWgDq h1//7wD8lf6nFB6sqah0BnJg8/3//6wA6iNf/+90+JX7pswtej+J3XRI+/7//3xBe/////+K98Zx f////4vdvX45d////8QvjRsuBno2gC3MCawA6odf/+90OaChpD33/5d/////qQCL2+cXFs3//3w7 83R5f////3Sz2+t2/pX+oRQxrKl0DqjMJMwAxuGJ23R5+/7//wCL2+/8PK8A6jta/++mej+mi+y4 fjx3////xMGNI8w/oKGkPfv/dDiWP3f////8efv+//8UFax0JnJ88/3//68A6iNf/+90u9v3xPyM 5JY/d////6l0TPv+//+odIPb65Xf/A+mDFqgoXJ88/3//68A6odf/+90u9v3xPyk5D8IJz33/6l0 DqhyQfP9//+oAOojX//vAIvb83QxF7IAAAB6P4vudDE4f3v////+////F2v3//+oAOqHX//voKE9 +/+pdA6ockHz/f//qADqI1//7wCL2/N0MRfvAAAAej+LzHTpdDWWNnf////8cfv+///UN34Wd/// /7Wucnd3////rq926RdHzv//fDvzdDEXyvf//6gA6odf/++goT37/6p0E3wTv6x0ou+pqHwE/nQG i/F8BP2L9nwE+/B64f7//wCK9xfAzf//fAfApvB48/7//wCK8xfSzf//fAfApvB4Bf///wCK93K6 P68XJM7//3K6P5W/rwDqN1r/73QPfDvvegnweyr///9/2f+5cro/qa90MBfV/v//ej/we0L///9y uj+pr3QwFxv+//96P/B6Vv///wCK93TKO1r/73K4+68AKaZ6P6bwe2////8AivdyeHv///+vACmm ej+mi4FyePP9//+vdrrvAOojX//vfsD/+///jfvMCRSqAIr3dDAXGQIAAHo/i/L6f////8TngRp2 5xQedMgAiveWCXf////8SPv+//+pF+LO//8AivNyub+vF+7O//90uut8O+92YX////92eXv///8A +JX+oQCK7wDqh1//73Q5FP3MP6ChpDY97/+qdBN8E7+pqACK93QOF/HO//8AivN0Bxf7zv///Aem fADBpon7zD8U0gCK83K6PwCK95f7PP/vrwDqr17/73w773K6P3Qxlf8Aiu+XLyj9768XnQEAAKCh Nj3z/6yqqXSL2++oqRdJz///AIvb43QHF1TP//90J6amcvvEfAfB8HBj////egDwe2v///98BPzw c3T///98m9vr//BB+a8A6i9a/+96P6aLiPBBu8gA/AGvAOozWv/vej+mi5uV/qLECIzn8EH5rwDq M1r/73o/por7ehKLtXQXuRQbALvb63SL2+d8g9vr/XQEg1F0OXKL/AB0AXKhAcQMjevwQfivAOov Wv/vej+mi/qwxASME9QIfAH9g/V/wNGK+pX+pxT9zD+goaKkPff/qnQTfhN7////rKl0ykda/++o lcByukMAivM4ugP+////rwApdMIjWv/vcrpDrwAocrpDldGvAOonWv/vfDvnej/we3////+X8zz/ 768X/M///6Z6P6aLkHzCPz//7/9EPz//74vmAMxyukOvAOorWv/vpno/poqwfDz7xvyKGJW/cnqD AAAAAIr3rwApcnqDAAAArwAozAB8O+/Gwps//+9Bmz//74vjAMlyeoMAAACvAOorWv/vpno/por1 fDn7xsGKG3aCA3S6A6ChpDY99/+pdMpHWv/vqHSD2++VvwCL2++oACmVv6gA6jda/+/MNnw768Q+ i+t397+Vv68Ai9vjACl8O/OV/qcU9XS72+t393fwzD+goT3z/3Sz2/euf4a//3K+v4vqr5fjPP/v AIvb7wDqQ1r/73w77xTtl+s8/+8Ai9vzAOpDWv/vfDvzPff/qnQTfBOzf5oL/6ypqHSC93ayB8SC 83KKC42pfJoD/3Si83K6S8QPibzwSeB8BNqK5HyCA/2DxXSyB3K4/q8XJ/z//3QnfAQAi9i5uX9E Lyn97/6K8bGwALoDxILzd+GMPhT2f0QvKf3v/Yr6xoL3ivvMPxTtqQCK7xcW0v//dLrrpqZ253Q4 oKGkNj3v/6p0E3wTr3S696ypdIrzqMQ5drILcoJPdroDiJN0ovdyt/52sgfUD3KyD8QGjKp0sgPw SeZ8BNqK23wB/YO1AIoHdLILF7v8//90J3wEAIvHfLoD/XS697GxfLoH/X9ELyb/7/6K63fguAC6 A7F0sgMAugfEsvOJUBT2f0QvJv/v/Yr6xroDivvMPxTmf9j/crpPrwCK7xfB0v//dLrrpqZ253S6 A6ChpDY97/+qdBN+E+/+//90uvN8mgf/rKh0gvd2sgNyo/gAxAR2ovPweG////+pcoj+1CB1uQDD v4r6dor3FOXD2oqUfAT8gZl/wcuKnn+B/s+KpHK5/Xa693K6C3SyA69yeg8BAACvcrkBqK8XpAEA AHo/i8Zyug90sgOvcnqPAAAArwCK8wCK9xczAQAAej+L4wCK63SyA3J6jwAAAK9yeg8BAACvF1sE AAD+uge0uXK5AMS68/B5iAAAAKF0ugegpDY97/+qdBOurKmozACoqJX8qJX+l////38Aivd2sgPM CQDq31//73QnfAQAi7h0yuNf/++orAApRv8D/v/EPoz5qKwAKRT9dD5ysveorkEvJf/vr6msAOrT X//vAIrvdLIDqACK96kXJwEAAKx0DwDqg1//73Q5oKGkNj3z/6l0DgDq21//73Sz2/OuAIvb83b+ dDEX+////6E99/+qdBN+E7P9//8Aivd2sgMA6sNf/+96P4vlcnpHAQAAr5fPPP/vAOrHX//vfAcA droHivjMPxa1/v//rKl0ivOozCR/QhsBAADR8Hvw/v//cnobAQAAr3J6SwIAAACK968XQtH//3w7 8wl6RwEAAO+L6nSyA3J6SwIAAKmvF4AAAAAWUv///3ai83S68wDLevc+/+9yw3r3Pv/vF47U//90 J3J6GwEAAK8XnNT//9Q8zCSmxDymgb4AyHJ7+hsBAACvAOo7Wv/vpno/porUALnzxqLziu50sgNy eksCAACvF9n7//8U7XSyA5X+cnpLAgAArK8XkAEAAAC683yC8/uNd4rPlfZyehsBAACX2zz/768A 6h9a/+98O/N6P4rqdLIDALnzlf5yeksCAACsrxfLAQAAxqH7i9l0wttf/+8AKHSx+/zxxD6J6nSy Axd/////AIn3AOrLX//vACh2+XJ6RwEAAK8AigcA6s9f/+96P/B6MwEAAACKBwDq11//76ChzD+k Nj33/6p0E6l0iveodMIbWv/v8EH5rwAoej+mi9jwQbn+rwAoej+mi+R1+X+a9f93uvd1uf53uvZy uvevFwnO//+mFPx8NwCgoaI9+/+qdBN8E9t8mgP/qXQOqHJ58/3//692ugcA6iNf/+90+Xo/i51/ Qff+////ckH3/v//i6yWP3f///+scrIjdCcXy9n//6yocrIjF7zZ//96P4vUzD96JInpdHH7/v// dKoPdfP+CS538/2/xDyNFXKyIxcW2P//OLoD/v///3KyIxcl2P//pACKBwDqh1//73S6A6ChNjyq dBN+E0v///+sqHQGcrIrFzLa//9yePP9///MJK92ug8A6iNf/+/HYPf+//9yePf+//924PB7Yf// /6yX/z//769ysisXN9r//3o/8Ht4////dLojqcQ8i4lBd////8wtdDEIDnotiph0uiN8mgf/CA50 ohd6P3a6C4mudqIDcnqzAAAAzDbWugN0qgNye/KzAAAAvnXr/cQxCS13740VAIovcrpzdDAAijOv cnqzAAAArxd2CQAAfsD/+///jPIAugf8IXS6B8S6C41Qlf6kcrIrFw7Z//+hAIoPAOqHX//vcrIr FyDZ//90PKCkNjyqdBN8E7NyugOpr5evPP/vdA6X/v//fwDq+1//73o/irlyugc4ugfA////r3K6 S69yuguvlf+Xyzz/7wCKAwDq/1//73o/iulyukuVwH45e////6+pAOpHWv/vfDvzAIoDAOr3X//v oTY8qnQTfhPr+f//croLdrITr5dDPP/vl/7//38A6vtf/+96P/B6/P7//6ypqJX+pHK6A69yehMC AACvdMr/X//vcroHQP/9//+vlf+XWzz/73aiBwCKC3aCAwApej/wekL///9yehMCAACvcnoTBgAA l2c8/++vAOqvXv/vfDvzcroPr3J6EwYAAK8AigsA6vtf/+96P/B6ev///3K6A3aiB69yehMCAACv croHr5X/l3s8/+92ggMAig8AKXo/iqhyehMCAACVwK90uhN8P/uvAOpHWv/vfDvzcroDdqIHdoID r3J6EwIAAK9yugevlf+Xjzz/7wCKDwApej+K5nJ6EwIAAJXAr3S6E3w/u68A6kda/+98O/MAig8A 6vdf/+8AigsA6vdf/++goaQ2PJf7/v//fj73/v//AIvb964A6kda/+98O/M9+/+qdBN+Ezv///+s qah2csMAAABycr8AAAAX3dz//5X/l/8//+8Aivdycr8AAAAXwtz//3o/iu9ycr8AAAAXGtv//xbU /v//n5dE1f/vmwDK/////5t22v////90ercAAAB2ep8AAAB0eqsAAAB2ugN0ugN0v592uhN0ugN0 v5t2ugt8mhf/FPh0uhe/droXdLoXxLoL8Hxa////dLoXlD+7dLIT/Dd2sgeXf////5X/cnqXAAAA rxdS2v//fDvzfFqbAAAA/xTqdHqbAAAAv3Z6mwAAAHS6B7+/droHdLoHxHqfAAAAjNB8QpsAAAC7 jNl0ugP8ugd0cpsAAAB1/3d78pcAAAB0ugP8ugfwSf96P4r9FP0UTnxCmwAAAP+J5JX/lf2XLyj9 73J6lwAAAK90csMAAAAXmwwAABa3AAAAm3D6/////3w7+54U8HSb2/ebcPr/////fDv7nnJyvwAA ABc/3P//cnK/AAAAF0rc//+goaQ2Pfv/qnQTfhP3/v//rHK6A6ivzCSX5v/9/6yXFzz/73QGl/7/ /38A6utf/+96P4qtl//+//9yegcBAACsrxdO2///fDvzcroHOLoH//7//69yegcBAACvrKysAIoD AOr/X//vAIoDAOr3X//vx2IHAQAAi/FyegcBAAB0MK8X9gEAAKCkNjyqdBN+E//+//+pdIrzegmo ivvMPxSFfMH/dIL3i9hyessAAACXN////6+oAOq3Xv/vcnrLAAAArwDJF9Ta//+mej+mird8gfv/ i9dyev8AAACXAP///6+oAOqzXv/vcnr/AAAArwCJ+xcC2///pno/porldHH3/f//cnn3/f//fgZ/ ////gvl2g3H3AP+V/qegoTY99/+ucrvb/6mvzD90Dq+pl9zT/++vrwDqv1//73Z51/3//6GmPKp0 E34Ts/v//6ypcrofqMwkr5dTO//vdqIfF3HN///Goh+mpov4zD8WJv3//5X6QWs7/++mcoI/DFpy eksEAACXf////69yuj+VAK+V/qyZWgDqs1//73QHcroLr0H+//9/l688/++pAOr7X//vej+KS3K7 wP2vcnpLBAAAr5X8rJd7O//vAIoLAOrvX//vAIoLdML3X//vAChyuguvl687/++pAOr7X//vej/w eosAAAB0yvNf/+9yeksDAACXAP///6+sdqIDAIoLACl6P4qtcrobr3J6SwMAAK8AigsA6vtf/+96 P4rccroHlfuvlfusl8M7/+8Aihs4ugf+////AOrvX//vAIobACgAugNyeksDAACXAP///68AigMA igsUVwCKCwAocro/rwDqt1//73TC817/73TK21//75fTO//vl+M7/+8A6vde/+/EPHa6F/B7of7/ /68A6u9e/+/EPHa6B/B7s/7//5X+rwDq617/76yvl+n+//92ug8AihcA6qte/++V/gCKD5fo/v// AIoXAOqrXv/vrJegYv//AIoHAOqjXv/vrHa6BwCKD5fa/v//AIoXACjGogfwegv///+sl6Bi//+X 7v7//wCKFwAoACn6d+z//3a6BwApxLoH8Hww////cnpLAgAAOHpLAgAA6zv/76+XldT/73ZiRwIA AHaiQwDqx17/78aiQ3aiD4E3cnpDAgAAdroDdLoDAM8A6sNe/+/EuheKjnS6A5d/+///dP+vdroT AOq/Xv/vlf52uicAihMA6r9e/+/Goid2uiOLuMQ8i7ysAIoTAOq7Xv/vrKyXCv///wCKIwAoACn6 79j//3a6EwApxLoTjOOXF/z//wDqy1//73K6P68A6rtf/+98BwCK1RQiALoPfLoD+3S6D8S6Q/Bz kwAAABbZAAAAl58V//8A6stf/+8WiAEAAHSy95X7cro/rK8XLAsAAHSy9xfKCAAAdLL3F5+y//9y uj+vAOq3X//vlf6XUzv/7xeO0P//pqYXNdD//5X+p3Sy96ChdmbX/f//pDY9+/+qdBN+E5v9//+s qACK93QmAOrDX//vej+L5nJ6XwEAAK+Xzzz/7wDqx1//73QHfAAAivjMPxZd////qXSK83J6MwEA AK9yemMCAAAAivevFwXc//98O/MJel8BAADvi+V/QjMBAADRi6xyemMCAACpr3Q0F3cAAAAUvXJ6 MwEAAJdHO//vrwDqO1r/76Z6P6aK1XT5r5c3Pf/vcrf+crofr3bxAOpDWv/vcnpjAgAAr3K6H68X gdH//3w763J6XwEAAK+oAOrPX//vej/wepMAAACoAOrXX//vzD+hoKQ2Pff/qnQTfhPL/P//rKly ejMDAADMCZf7/v//dCavdooDAOonX//vxspPePrv8Hp3////cnozAwAAlxc7/++vcnorAQAArxfb 3P//fDvzcroDdDSvcnorAQAArxc+AQAAcroHr5XlqQDq/17/73o/8Hpm////cnovAgAArwCKBwDq A1//73o/8Ht+////cnorAQAAr3J6LwIAAK8A6jta/++mej+mi5hyugN0NK9yei8CAACvF5cBAAAU rHTKQ1r/76iVvKCocronlx87/++vACl8O/NyuievAOqvX//vfAf8ituocnorAQAAlzs7/++vACl8 O/NyugN0NK9yeisBAACvF+UBAAC4fAClgUegoaQ2PKp0E34T8/7//6ypqHKyB8wkzAAXQSEAAJfb 9v//rACK8xd44f//l/z+//9yegsBAAAAivevAOpHWv/vcnoLAQAAlaOvAOonWv/vfDvfxDyL+3fn FPl3YgsBAAAAivdysgcXeiEAAHo/ip1ysgcXvSAAAHwH/YqqrHKyBxfsIAAAdA/EDIu5dLHzxDSL znS+73wH+4PWfAf3gNt0tvPENIvilj/7/v///LrzrnJyCwEAAK6vF1re//98O/OV/qDEDItKdPmV /nQxAO8UVHKyBxfzIQAAdDigoaQ2Pff/qnQTfBOvdrIHcrIPFxciAAB0uvM4ugP8////fAf2jPXw SX/nPv/vdroDAIr3crIPFyYiAAB6P/B6/v7//3KyDxdtIQAAej/weg7///+vcrIPF58hAAB6P3a6 9/B7Iv///6ypqHTCN1r/7zi68/7///90ugN6uvPwe3D///90uvd8gvP+dL/zivZ6P4uAdKffFPh6 P4uJdKfXeiSLkJXDrAAodA+megmmi6+VwakAKHQnpnokpouq1Dm3ej+BsXwHwIP8lcCnr7lyuk+p rwDqR1r/73SyB3w783K6T5X/lf6XLyj9768X5BQAAJXDrAAodA+megmmi+sUT3SyB5X/lf6XLyj9 76wXBRUAAAC683yC8/3wcacAAAB0svd6Nov5dP6V/gDvlf9ysg8XeSIAAHo/drr38HrQAAAAoKGk crIPF0IjAAA2Pff/qnQTfhO//v//rHSi96molQAATNP9//8A6qtf/+9yTNv9///MAMbBivKX/+// /wDqy1//7xQQAOrbX//vxsJPePrvdroTOLoPZ8X//zi6C1+X+f92ggc4uhvf////OLoX7////4q0 coobOLr3/f///3K6A68AyagA6v9e/+96P4rZcno/AQAArwCKAwDqA1//73o/i+1yuhN0NK9yej8B AACvF7EPAAB8OfsAsveKPhSsdMpDWv/vlbygqHK6O5cfO//vrwApfDvzcro7rwDqr1//73wH/Irb qHJ6PwEAAJc7O//vrwApfDvzcroTdDSvcno/AQAArxcGEAAAuHwApYFHzAB2RNP9//+gocw/pDY9 +/+ucrvb/6mvzD90Dq+pl67M/++vrwDqv1//73Z50/3//6GmPKp0E34T9/r//6ypdCaodMIXWv/v dMwAKHyaA//MLQgJegmJvRT8dKoHcr3+zC0ICXJ6BwEAAHQ0r612qgcXpRcAAHo/i+lyegcBAACv AIr3AOo7Wv/vpno/poqRALoDdMzGigONP3SK93S6A8T8it6V93K6R5X6rxdI3f//crpHrwDqI1r/ 73w77wAodA98GfwAy0rbPv/vcrpHr3J6BwUAAJf7PP/vrwDqr17/73J6BwUAAJXArwCK8wDqR1r/ 73w746ChpDY99/9yeocAAAB0NK9yukevcnoHAQAArxcZFAAAACh0D3J6hwAAAHwZ/K8Ay0rbPv/v AOo7Wv/vpno/posgFp8AAACqdBN+E/v2//+sqah0gvd0yq9e/+9yegMJAAAAyDi6AwEAAACXwzr/ 768AKXJ6AwkAAJd37P//rxfU0///dCd8O+t6JPB7Vf7//3K696+sFyz+//+mej+m8Htp/v//foL3 I/////B6dv7//3yyAwByegMFAACX//7//68XaaX//3J6AwUAAK9yegMEAACXzzr/768AKa9yegME AACvrBef/v//fDvnej/wcbn+//9yuvevrBeQ/v//pno/pvB7zf7//36C9wX////wetr+//8AiPty egMEAACX4zr/768AKa9yegMEAACvrBfq/v//fDvnej/wcQT///9yuvevrBfb/v//pno/pvB7GP// /36C9wX////weiX///8AiPdyegMEAACX8zr/768AKa9yegMEAACvrBc1////fDvnej/wcU////9y uvevrBcm////pno/pvB7Y////36C9wX////wenD///9yegMEAACX+zr/768AKa9yegMEAACvrBd9 ////fDvrej+Bk3K696+sF2r///+mej+mi6N+gved/v//iqwAiO8AiPOsF6n///98O/N6P4G/cnoD BAAAlwM7/++vACmvcnoDBAAAr6wXzP///3w763o/geJyuvevrBe5////pno/povyfoL3Bf///4r7 fJoD/6wXg9P//3S6A6agoaQ2PKp0EwCK7wCK8wCK9xcA0///fDvzej+K9ZWbAOrLX//vFB6iPKp0 E34T4/b//6ypQf/3//+ozCSpcnobCQAArK92ogcXA+j//3w783SC93KyEzi6E/X///+V/naiD6d2 QhMBAACurHJyFwEAAKyur3Z6FwEAABdUp///fAcAi6HEPIulcroLr5eAmfu/qBdyp///fAcAi7l0 ugvEPIvAxDl2ugON/HaKA8wJxqIDgdFyQhsJAACslf6oAIr3F6en///EPIvnfAcAi+x1+MP1i+vw QT+5uMSKA3a6B4MnzD+goaQ2PHyCB/KK/rFyehsJAAB3Y8obCQAArxcb6P//fAf8po0mcnobCQAA rwDqE1r/76Z0svOV/nb+pxQ8qnQTfBPzqcwJqZX8crILF0y4//9yugNysguvcrrzrwCK9xfZt/// ej+LknSy86h0PpWzZqAIAHK7vvyvAOpPWv/vdAd0uvPEOaZ2gveBx6zUOXQnfASzgfyVs6R0ugOs /DmvqBdo6f///ASV/Ze7Ov/vqBd36f//dLrzfDvnuPwMuMQPgzWkf9j/AIoDAOpLWv/vdIr3pqBy sgsXv7j//3Q5oTY8qnQTrHSi86l0iveodPnwScPnfgA/////grh0+ahyu+f+r3S67wDPF9Dp//90 uu98O/P+x7j+wXTx8Enz5no2i/h07zn90QD/RT/////ENYLTejaBwnTx8EnD5sQFg0QU/HS673Tx r76sdrLvvnbxcrrvrxd3AAAAfDvzFOYA+XTxr6zwSevmvnaq73bxcrrvFB+K/QD5oKGkojyqdBOp dIr3dPl8B/Pwc13////C//3///BwaP///3Sy76h0gvN2svd/w8c/jfq/dvkU8XK696+oqRfXAAAA fDvzAPl0+cwtrHXLx792+cwkmfBJ88d8P/j0NXb5dcPHv3b5mfBJ68f0LJl8BvCkis98P/x2+X/D xz+N4r92+fBJ+8d2uu9yuvevcrrvqK8XLAEAAHw78xTucrr3r6ipFBHwSDVyu/7+dvl0uveV/n/f /6egFP3MP6GiPKp0E34Tz/X//6ypzAnGivN2igPweyn8//90ovfEIfB7NPz//3/E//B7Pfz//5Xv crovqa8XCev//3w78wCK8xcPqv//lcp2uiuZOLov/f8XJar//6mV/ZX9mXa6LRc5qv//fAcAdroH 8Ht+/P//qHKyL5Xvrq8XWKr//3o/8Hqg/P//33osAgAA33orAgAA33opAgAA33ooAgAA33onAgAA 33omAgAA33olAgAA33okAgAAlYJyQiMCAACmOXovAgAA/pXzOXouAgAA/jl6LQIAAP45eioCAAD+ DFShdqLzldEAivMA6jda/+90B6Z6AKaK8gCK8xct6///pnQnFPp0INSi83djyi8CAAC5rACK83J7 yi8CAACvFxbs//98O/P8DHK4/noAdrrzikx0gveoF2jr//9/g8cA0aaK9X9byi8CAAD/FPZ/W8ov AgAA/7l/W8ovAgAA/7mV/3J6LwIAADl7yi8CAADwf1vKLgIAAP+5uTl7yi8CAAD+uamvAIoHF2qr //98BwCK+MwJFrD9//9yuguXC/7//69yug+vAIoHF4zX//98O+96P/Bx0/3//0f//f//xroLgPx0 uguvcnovAgAAAIoPrxfI7P//AIoPAOpLWv/vfDvvlfOnxA/wcQf+//+Z8ElqKgIAAMw2dVIrAgAA 9DWZ8ElqKAIAAHQOzDZ1UikCAAD0NZnwSWomAgAAdAbMNnVSJwIAAPQ1mfBJaiQCAAB2shvMNnVS JQIAAPQ1CXosAgAA8HayH/B6Zv7//3a683J6LwoAAHa6F5f/+///cnovCgAAlf+vFzXt//98O/OZ egmL5HK6F69yei8CAACvcrrzrxfUAwAAfDvzfLrz+/BIOHTCR1r/70R/////ej+BnHSK73a695f/ +///cnovBgAAlf+vF4Pt//9yuhOvcnovBgAAr3J6LwIAAK9yuvOvF4YDAAB8O+N/Qi8GAAD/i+F0 ugPEuuuC6QC6A3JyLwYAAHQ5lYCur/wMACh8O/MAsveKXPBIuht6P4GWdIoDdrr3Phn4/Irvl//7 //9yei8GAACV/68X9O3//3K6E69yei8GAACvcnovAgAAr3K6868X9wMAAHw7439CLwYAAP+L4XS6 A8S664LpALoDcnIvBgAAdDmVgK6v/AwAKHw78wCy94pc8Ei6H3o/gZZ0igM+Gfj8iu92uu+X//v/ /3J6LwYAAJX/rxdl7v//croTr3J6LwYAAK9yei8CAACvcrrzrxdoBAAAfDvjf0IvBgAA/4vhdLoD xLrrgukAugNyci8GAAB0OZWArq/8DAAofDvzALLvilx0igMAigcX063//3Q5oBT9zD+hpDY8qnQT fhPr/f//rKmofFoDAgAA/zh6CwIAALc6/+/MP3JCBwIAAFSflzHA/++bAMr/////m3ba/////5X7 cnr/AQAArxdi1v//pqZ2eg8CAAB8WhMCAAD/FPJ0ehMCAAC/dnoTAgAAdHoTAgAAxHoPAgAAgrMA iu8AivN0ehMCAAA+H/hye/r/AQAArwCK9xeHBAAAfDvvdnoDAgAAfEIDAgAA/4vmAEoDAgAAAIrz AIr3FwX///98O/MWc////xRmfFoTAgAA/xTydHoTAgAAv3Z6EwIAAHxCEwIAAP2MugCK7wCK83R6 EwIAAABLegsCAAAAivcX7gQAAHw773Z6AwIAAHxCAwIAAP+L6QBKAwIAAACK8wCK9xds////fDvz FNkUWptw+v////98O/ueFPB0m9v3m3D6/////3w7+550egMCAAAU+xQlFCegoaQ2PKmoQefn/O/M AH/B/4vuqQCL2+8A6jta/++mej+mi+u4fjl3////fgD//v//gyTMP6ChPHR5f////3SD2+vEOIz9 dAd0OD4f+K8ASXv///8Ai9vnF5bw//98O/N0OBQuqnQTrqypzAmoxorv8HtN////dLr3f8f/8HtZ ////QOfn/O92igNEd////3/A/4r3egmK63QIFO+oAIr3AOo7Wv/vpno/povvALoD/AR+ggP//v// gyoU/XQIegmLmXR5e////3o/i/evAOpLWv/vppd/////AIrvAOo/Wv/vpnZ5e////3o/povRdILv dDg+H/ivAIrzAEl7////Fz7x//+VgHZBf////wCK96kA6kda/+98O+cU86yV/6kXNvH//3w786Ch pDY8qnQTfhNH+f//qahycrcCAAAXKSgAAH9atwYAAP9GAP///8w/ckK2BgAADFR0yttf/++ZVFUA Ka8A6g9a/+9yercGAACvl2c5/+8XtOL//3w783o/iu1ycrcCAAAX8SUAAMw/Foj+//98mgP/croD rK+Xczn/7xfA4v//pqYAKXQnfjzfQP3/croHcnK3AgAAr3J6hwAAAK8XUSUAAHQHegCK9Th6kwAA AP7///8X4db//3QPegmK8QDq21//73QnfjzfQP3/egDwewz///96CfB7FP///wDq21//78Q8jPYX G+b//3o/i2GX89j//5X/lx8i/O8XOPL//3S6B5XfpnJKhwAAAECfIfzvDFpcHyH870EfIvzvcnq3 AgAAqa8Xkfn//3J6twIAAKmvF0v///98O+N8BwXwe7UAAAB8BwLwcXT///96P4Oq8Hp+////cnqH AAAAcnK3AgAArxcGJQAAcnK3AgAAF0wcAAB8mgP/croDQXM5/++vqRfF4///ALoDAIoDqRcR5P// fDvvF7nj//8A6ttf/+8WHwEAAHJ6hwAAAHJytwIAAK8XGCUAAHJytwIAABebHAAAFjkBAACXz4r/ /wDqy1//7xZJAQAAcnK3AgAAF2wnAADMP6SgoTY9+/+qdBN+E5v0//9yemMHAACszCSvl2c5/+92 ogN2ogsXbeT//6Z6P6aK95UDpxYS/v//qXSK8zi6BwQAAAByefv6//+vcroDl684/++vF934//98 O/PGogPwe1H+//+ocnpjBwAAlx8i/O+vF03+//+mxDymdroP8HuP/v//cnpjCwAArxf66P//ledy ukOV968X1Ov//3w773/CA0/87/9AA0/874r0l//+//+oFwWz//+odMIXWv/vACivACivcrpjl784 /++vAOpDWv/vdLL3fDvrckF/////cnpjAQAAqK8XRiIAAHSy93J64wAAAKmvF1YiAAByukOvcrpD AIoPr3K6QwCKA69yukOvcnpjCwAAr3J5+/7//69yemMBAACvcnrjAAAAr3K6Y69yuguXWzn/768X xvn//3S6C3w7y8Q88Htb////r3aKH3aCG3a6Fxfc8///fLIHAJW/AIobdroTAOo3Wv/vdCd8O/N6 JIuHvHya9/98gvf/cnpjAwAAlfuvrIr4F5gEAAAU+hfwBQAAdAd8O/N6AIu6fJrz/3oAgcJySmMD AAA4ugcFAAAAF8rZ//96P4vPcrojdoojrxcwDwAAej+mdroHi+N8BwCL6AC68345f////8aC84M2 ALr3fIL3/YNyzCTGogOgi/UAigMA6kta/++mxqIPi/UAig8A6kta/++mxqILoYv1AIoLAOpLWv/v pnS6B6Q2PKp0E34T0/z//6mocrIfF4D4//90uvN0wkNa/+9yd/va///699n//6+ucnojAQAAl9s3 /++vdrLzAChG+/7//3w779Q3R2n///98PgPEN4D9dD56P4HndA9yeiMBAACX3zf/768XBPX//6ax pooVcnojAQAAl+c3/++vFxr1//9yeicCAACvF/7q//+XE+7//xeJ8v//fDvvej+L9HQ3F5Dx//90 DxT9zAmscnonAgAAl//f/P+vdDEXePH//3QneiSL2HJ6IwEAAHQxrwCK9xee7v//AOoXWv/vZkb/ +///CAZ0Ma0XUvH//3oJi/F0MRfL8f//qRd79v//pnokpIr4zAkWff///wCK83J6KwMAAJfvN//v rwAofDvzzAlyeicCAABysh+pl/8//++vF3D5//96P4usAIoXAIoLF64NAACmdA+mcrIfF9T3//9y eicCAACvAOq3X//vcnorAwAAqa9yeisDAACvlw84/+9yugOXizj/768XKvz//6kA6kta/+90igN8 O+Nysh8XGPj//3Q5oKE2PKp0E34Tu/7//wCK9wDqw1//73o/i+VyekMBAACvl888/+8A6sdf/+98 BwB2ugOK+8w/NjyszCTGou+BlqmodILzQfv+//9/QhcBAADRi8QJekMBAADvis18guv/dDiL53Jy FwEAALyu/AEAivevF5/z//98O/MU7XJyFwEAALyur/wBFwL3//+mpnJ6QwEAAK8AigMA6s9f/+96 P4v6xKLvg1ygoQCKAwDq11//73Q8pDY8qnQTfBPzcroDqcwJr5fm//3/qZfHN//vl/z//38A6utf /+96P4rHcroHOLoL/v///69yugsAivc4ugf7/v//r6mX0zf/7wCKAwDq/1//7wCKA3QPCCHkCbkA 6vdf/+90OaE2PKp0E34T9/7//6ypcnoHAQAAqK/MABd9AAAAdIrzdKL3ej+mi+R0Oahm1D0uB69y egcBAACsrxdRAQAAfDvvdAdyugOvlfqV/wDq/17/73o/ispyegcBAACvAIoDAOoDX//vej+L3nQ4 1AiWP/v+//+V//w8qa9yegcBAACvF5gBAAB8O+/8B3wA/YLWdMoXWv/vlf6gACmvACmV5WamCAZ8 PZ6tl583/++sAOpDWv/vfDvvFN56AIHidAiV0awA6ida/++mej+mi/x/3/9+PPv+//+xihp0OKCh pDY8qnQTfhN3////rHSi86mof1z7/v///3+cv/9/3P9/XPv6////fMIT+/vv/4rsle+X41/87xcV AQAAplwT+/vvpnR8//7//3wH+4vofAf9i+10whda/+8AKJX9ZqYIBnoti810uvd8RP/+///7ld90 BHKP+6YMWorpf0d7/////3JPe////4v4ld90BKYMWnTCF1r/73/E/4qHACh0svfMLQjOcnqHAAAA r5UAcrrzlQCvdqrzF30tAAB6P4vAckx/////cnqHAAAAqa8A6jta/++mej+mcnqHAAAAr4rpdLL3 lQByuvOVAK8Xsi0AAHo/ii4U96wXaPn//6amf8T/iu90svdyfH////+srxcxFQAAXkvK+++V9b/M LaYIDnbqS8r773L7rQDLeqM6/+9yfPv+//+vF6j5//9eS8r773JM+9r//3L7vwDLep86/++pF8P5 //9eS8r7734899n//3L7vwDLeps6/++sF975//98O+d/wf+KtgAolf1mpggGei2L5wAoZgjCE/v7 75Yt+/7//34941/8760U7wAolfzMLaYIDgDLais6/++pFyD6//+mppeXN//vrBct+v//pqagoaQ2 PKp0E66sqah0gvPMJHQIx+CL0nK683/B2orhf4H+jIrnAI/7fD/7droDFyb6///8J3S6A7mmuRT9 vLl/wf+KKbysAOpPWv/vpnQndLL3ej92/ou5f8D/i8FysvN1+MPaitN/gP6Mitl0jvt8PvupdrID F276//+prHa69xe0+v///KL3dLIDfDvzuLgU+3f8vLh/wP+KOn/c/6ChpDY8dLPb93S72/t6Nggv ivzMPzypqHSD2+uV76HEAfB9oP7//6zwSe7wSSfMLHQnPhT3dPtqU17/7/BJrv7MPPBJJ8wsPhf3 dOtqU17/78wv8Em+/fBJJcw8PhX3dPt6U17/78w98Emu/PBJJ8wsPhf3dOtqU17/78wv8Em++/BJ Jcw8PhX3dPt6U17/78w98Emu+vBJJ8wsPhf3dOtqU17/78wv8Em++fBJJcw8PhX3dPt6U17/78w9 8Emu+PBJJ8wsPhf3dOtqU17/78wv8Em+9/BJJcw8PhX3dPt6U17/78w98Emu9vBJJ8wsPhf3dOtq U17/78wv8Em+9fBJJcw8PhX3dPt6U17/78w98Emu9PBJJ8wsPhf3dOtqU17/78wv8Em+8/BJJcw8 PhX3dPt6U17/78w98Emu8vBJJ8ws1AE+F/d062pTXv/vzC/wSb7x8EklzDw+Ffd0+3pTXv/vzD3w Sa7w8EknzCz8MT4X93TralNe/+/MPcQB8HxcAQAApHoAi+fwSe7wSQ/MKT4X93TralNe/+/MPb6w ihegoQgvPHQ+zDZ2t/t293a383a393a363a373a35zwAi9v3lf6Xjzf/7wCL2+8X5v///z33/wCL 2/OV/wCL2+8Ai9vvF/z///898/+qdBOurKmodA7MAMaB5/B6CP///3TiN1r/75WNAIrzdoHnACym ej+mi/g4uef+////lYgAivMALKamlf16P6aL/Hax53S558Q48HtD////fAf+iuxH////f3ay8zi6 A/v////MJBTpdKLrR////z84uvP7////OLoD4P/w/3Sy76gIJuQ2l3////98PvyuqJX+rwCK9wDq 31//73wHAHb5i6TGgu+L93ah83ah9xTvqK8A6uNf/+92uff8PHa586gAifOoAIrzqADJAOqjX//v dOKDX//vxDh2ufuL46ioqACKA68A6qdf/+/EOHa564rhAIn7ACx2gfsAyQAsdsF2gfN2gfd2get2 gefMPxT8lf6noKGkNj3v/6l0Dqh8gef/i890g9vvegCL13Sx73S589Q+xDiM/XQHdLnrqPw+rwCL 2+sXjf7//3w78/6B73Q4FP3MP6ChPff/qXQOqHS553o/i8p8B/6Lz3SD2+96AIvXdLHvdLnz1D7E OIz9dAd0ueuoAIvb7/w+rxfU/v//fDvz/oHvdDgU/cw/oKE99/+pdA58gef/i8SoAInrAOqXX//v AIn7dMKDX//vACh8gef9iuiV/5X/AIn3AMkA6ptf/+8AyQDqn1//7wDJACh8mef/oKE8dL7nej+L 6XwH/ovudLvb+3a+9xddAAAAlf6nFP3MPz37/3yG5/+LzXS72/d8F/+L67eL97eK3HS+9xT8dL7v /Lvb+xT7dLvb+3o/g/LEvvOC95X+dr7vpxT9zD899/98g9v7/4r8zD88AIvb+5X3AOqPX//vrwDq k1//7zx0u9v78FC72/evFywAAACmPKp0E3yC8/+K+8w/ojx8gvf/AIrzivcXSQAAAKaiPACK95X3 AOqPX//vrwDqi1//76I8AIvb+5X/AOqPX//vrwDqE1//7zx0q9vzdLPb+3Q9tah0Bno/i+2pco3+ dKvb73X9d/6+vbGKCKF0OKA8dLPb83o2idl1u9v3rHUndC51BKh0g9vzdDw+H++ZdDw+Fv0MVHQ1 fB78DFWgpHS72/s8qnQTfILv/4r7zD+iPACy73Sy83S694vyde/F7or4v74Asu+KDPBJ//BJ9tQ+ ojwAi9v3AIvb9wDqD1//7zyqdBN0qvd8gu//dD2L5al0ivN18Xf1vbl7Nov6ALLvig58gu//oYr8 f93/ojwAi9v7AOp/X//vPACL2/cAi9v3AOp7X//vPACL2/cAi9v3AOp3X//vPHS72/t193s2i/bF s9v3i/q/FA7MPzzMNsaz2/OJ6nS72/v8PnXvxavb94v2vsSz2/ONFMw/PACL2/cAi9v3AOpzX//v PACL2/sA6ude/+88AIvb+wDq017/7zyqdBOsqah0gveoF5IAAAAAivN0DxecAAAApnQnegmmgbh6 JIG8xAyDwNQM/Ah6AHaK94vLxIL3iNB0uvd0ivPUOL+v8EH5r6gXkQAAAHQHfDvzegCL7aypqBdM AQAAfDvzej+L9biKM8w/oKGkojx0OBQIcrvb868Ai9vzAIvb8wDq417/7zx0u9v7dC919797NooG dbPb97fEPYv2x/eL+rfEPYoIde/VLgkl5C0ILdw9PKp0E3yC7/+K+8w/ojwAsu90qvN0sveL7nX+ ez+L9MX9ivi+vQCy74oQ8En+8En11D6iPHyD2/P/i8J0q9v3qXSL2/fwSfm5fAe+g/d8B6WA/Hw/ 3/BJ9b18Br6D93wGpYD8fD7fALPb74v3ej+L+8Q+iy/UPqE8zD88AIvb+xf9////pjyqdBOsqah0 gvfwSfivF6z///96P6aL/LgUEPBJyLh8AdJ2iveL+nwB1Ir78EnIuMwkqRfG////ej+mi/Jy+2Ry o7kv8EnIuBQXfIL30nQ8iv0IJ6ChpKI8AOrbX//v/vqLN//vPMw/fIPb+9/waz88fIPb+8+D9HyD 2/vGgPuV/qc8zD88dLvb+3wHnoP6fAeFget8B76D+nwHpYH1fAfPg/Z8B8aA+5X+pzzMPzx0u9v7 fAeeg/p8B4WB9XwHvoP2fAelgPuV/qc8zD88dLvb+3wHnoP6fAeZget8B76D+nwHuYH1fAfPg/Z8 B8aA+5X+pzzMPzwAi9v7lfcA6o9f/++vAOqTX//vPF6LN//vqXQ3QQAA///cMZY2WL7//z4H75Y/ WL7//3Qu3DE+Be/8PaF0L9oAgP//Ph/v9D4+BfD8PVb///9/i/m/2gAAAIBcizf/7zyqdBN+E/v7 //+sqah0gvOoRC8o/e/MCRctAwAAej+mi/PMNn+DxwCj8Gs+dA50uu/MNn/Ho/BrPswxivN6CYv8 vxT6RH83/++vrKhyegMEAACXhzf/768A6q9e/+9yegMEAACX/P7//68AivcA6kda/+98O9+goaQ2 PKl0i9v3qReWAwAAt6aH63Xzz38Go4v3fwbQi/y3hg96P4L7dDmhPHK7z/6hPKl0DheHBwAAfFkX 7v///3yZy/90OaE8qXQOdLnLej+L968A6kta/++mdDEXyAUAAKE8qnQTrql0DgCK8zm6A685ugK0 OboB+gCK9zm6APkXugcAAHo/i9eocoHjlemV/6gXvAQAAHK6A5X7r6gX8AQAAHw75zi51+n///+V /qegoTY99/+qdBN8E4upqHQGzAnGSBfu//+K8gCI9xfzBQAAFoj9//+sdKDLxCGZOLpv6/+ZOLpt 9f+ZdopnmXaKZZk4uk/+/zi6TX////+L05nGiNl2igOJ5caM54rqrBds/f///CcAugPwSLjZxroD poMZ8Ei42ca6A4r8cqJzqXQwAIjTFzkGAADGSBfu//92igd2igPwccf+//9yiMFysiMXpQgAAHK5 15X/l/8//++vcrIjF4gIAAB6P/B7E////zi5Ba+0/v2ZdLz7AIobmXa5AZl0vPk4ukOvtPz7AIoP mXa6P5l2+cw/mXa5/Zl2ufuZdLTzr5l2sjmZdrH5mXS08Zl2uj2Zdro7mXayN5l2sfcXuQoAAHa6 NXa59XS6G3a6MXa58Xa6LXa57XJ50/7//68XcQUAAJl2uimZdrnpzD98O++ZdronmXa555l2ueWZ drnjmXS825XhmXa54XS82Xa533S473a523K6Q690MBfWBwAAcnnT/v//rxe7BQAApq9yedP+//+v dDAX8gcAAACKG3QwAIoPF/8HAABysiMXwAcAAAC6BxT7f5nX/3KyIxfRBwAAALoDfjnJ/f//dLoD xHgX7v//8HMyAQAAzAl0uO92uNN0uMvEOYv0AIjXdDCvF0oIAADMJMZIF+7//4HBckiV/v//f0ED AQAA/3J5MQEAAIvlldGvdDAXcwgAAKkXUgYAAKavqXQwF4MIAAC8fjnJ/f//xGAX7v//gzd0uO90 ivfUuNOV6XQwdrjXdLoHmf6425n+uNlyufuZdrjPcrjjrxe9CAAAlfuXR8r773QwF8sIAACpAOpP Wv/vdCepld+sF1QHAAB8O+90MKmsF+kIAACsAOpLWv/vpgCI73QwF24IAACkoKE2Pfv/qXQOdHkX 7v//fAf3g/vMPxTClj/J/f//AIvb93K7z5mvFz0HAAB0eRfu//8Ai9vrlj/J/f//cnvPlf7//68X WgcAAHw77wB5F+7//5X+p6E99/90u9v78Ei33/BIr+HwSL/j/DVyu/7RPKp0E3S696h0gu9/3//G gvOIr6ypdMoXWv/vACnUgvPMLZX/uKQICHQF/ILzi9QAKZXlZqYIBneq8AAplf1mpggGdLr3CCXl LX8dH389nv2q8Hfr57zEII0qdLr3oX/b5/+koKI8dLPb+6mozD/MAH/G34r8vhQHf8bSivuV/r6g f8bPivB1rv5/BYeL+n8Fp4r9vr7MCXXuey2Lw3wB94zI8EktfAW+jfV8BaWI+nw9NhTjfAWejfV8 BYWI+nw9VhTyfAXPje58BcaI83w9Lz4f+/w9ub4UQXoAoKGL/QgnPKp0E34TY////6lBY////6ly epsAAACV/68X4ggAAHw783J6mwAAAHZKmwAAAHTKb1//768AKXo/iuNyepsAAAA4epsAAABr//// rwApej+K+nw3ABTpdHKLAAAAfDcAtov3tor4lf6nFP3MP6E2PKp0E34Tr/3//wCK8wDqw1//73o/ iv02PKypAOrbX//vdMqvXv/vcvO/droHdrILleXMLaYIDnJ6TwIAAHw9nq2Xbzf/768AKXw783J6 SwEAAK9yek8CAACvAOrHX//vdCd8BACLjHJ6HwEAAK8XBwkAAH9b+iMBAAD/fJoD/6Z0uu9/x9GK /AC67wCK73J6HwEAAMwtr3S6C5XlpggOfD2erQCK85d7N//vAIr3ACl8O+cAivcA6rtf/+98BwCL 8wC6AwC6C3yCA+WDTKwA6tdf/+98ggPlg/QAugd0ugcWtAAAAACK9wDqI1r/76aV/qehpDY8qnQT fhPT/v//qXJ6KwEAAKivAOpjX//vQP/+//9yuj+or5c3N//vQfb7//8AiveV/6kA6mdf/+9yun+o r5dHN//vAIr3lf+pAOprX//vdHorAQAAlTtmpqAIBnyC8/+hi9t6P0ZXN//vgvpGZzf/769yun+v cro/r64AivMA6q9e/+98O+s2PKp0E3wT73K6D68A6l9f/+8Aivdyug+vF6MAAACmpjY8qnQTfhP7 /v//cnoDAQAAr5f7/v//AOpXX//vAIr3cnoDAQAAlf+Xjzf/768A6ltf/+90uvc2PF4zyvvvqHo/ g5GKmHzyM8r77wCX5zb/7wDqT1//73QHegCLq6l0ylNf/++XAzf/76gAKZcTN//vqFw7yvvvACmX Izf/76hcP8r77wApfMI7yvvv/1w3yvvvoYvjfMI/yvvv/4vsej+L8Dj6M8r77/7///+V/qegPMw/ oDyqdBN+E9f+//+ozAAXjAAAAHo/i5OpqJX9AOo7yvvvdA98AQCLp3J6JwEAADh6JwEAANf+//+v qQDqP8r773o/i8rGgvNyegMBAACK+K8XrAcAAKavAIr3AOo7Wv/vpno/povvcnonAQAAr6kA6jfK ++8UNZX+oKkA6oNf/+90OKGgNjxe1zb/76l6P0EvyvvvgvGpF+X///+mXNc2/+96P4r7zD+hPJX+ qReuAAAApqahPKp0E34Tr/3//6ypcroHqMwkr5fm//3/rJebNv/vl/7//3/MAADq61//73o/8HoJ ////croDdMr/X//vr3J6DwEAAK9yuguvrJevNv/vOLoD7////wCKBwApej+KkH9CDwEAAM6Kmcbi T3j674vScroDOLoD+/7//69yeg8BAACvcroLr6yXvzb/7wCKBwApej+KxnyCC/6KzBTZl8s2/+9y eg8BAACX+/7//6+sl782/++X0zb/7wDqS1//73o/i/THYg8BAACL/JX+oACKBwDq91//78QEi7By ek8CAACvcnoPAQAArwDqx1//73QPfAEAi81yeg8BAACvAIr3F9cMAACmcnojAgAApq8AivcXIAkA AKavF+8MAACmpqkA6tdf/+8U/cwAdDigoaQ2PH4T9/7//6lBezb/76ipzACV/pf+/+D/doPb6wDq Q1//78Q4XCdJ+++K5qmoqADqR1//78Q4XCdJ+++K+Mw/Fhj///+sqheq+///l/9///+olyNJ++8X vw0AAHw783K72+uX+/7//68A6idf/+9yu9vrrwDqw1//73TK31//70J/////qKqV/KhE////P5X8 QIM2/++sqAApfAcAXCvJ+++K4ZX/qpX9lf+V/KyoACl8BwBcK8n774uZFwr///8UqHTC41//78wk rK8AKEH/f///xDmM9KwAyivJ++8AKHQPcrvb76yvqZcjSfvvAMoryfvvAOrTX//vej+L5Mw2xAyJ 6nVuI0n773J+I0n7774JLcQxd++NFDi72+/+////F3X8//90u9vvoqSgoX479/7//zypF5n8//8A i9vzAIvb8xfl/v//pnQPpheg/P//dDmhPKkXufz//wCL2/MAi9vzFzT+//+mdA+mF8D8//90OaE8 qRfZ/P//AIvb8wCL2/MXbv3//6Z0D6YX4Pz//3Q5oTypF/n8//8Ai9vzAIvb8xc//f//pnQPphcA /f//dDmhPK6pqBcb/f//QCNJ+++oF4f///90D6moQCfJ+++oF2IPAAB8O+/MNnoJiep1bifJ++9y fifJ++++CS3EMXfvjRSV/5X/lf8AyivJ++8A6ptf/+9yu9v3lf+vqagAyivJ++8A6jtf/+8AyivJ ++8A6p9f/+8AyivJ++8A6j9f/+8XiP3//5X+p6ChpjypdIvb96h0AX/B/4vyqRcYDwAApnKL+f4U EXQ51Digv6E8qnQTfBPzrKmoOLoL/v///wCK8xc/DwAAdA+mfgH/+///gtl0ovesF1MPAAByg8/+ OPvbI0n77xddAAAAdA+mcvvBwv9///+D+8w/FIByugevcroDr6wXYP///3w783o/i+bEggeK+Xya C/8U7awXDP///9SKB6axsRT+sXaKA3S6A6xyfyNJ+++vF/IPAAB0ugOXbzb/73J/I0n7768Xvw8A AHS6AwCK83J/I0n7768X0Q8AAHw753yCC/+L9HS6A39bxyJJ++//lf6noKGkNjyqdBN8E98AivNy uh+Xazb/768A6kNa/+9yuh+vAIr3F/QAAAB8O+s2PKypqEAjSfvvAIvb73QIFzQQAAB/wiNJ++// pnQni9SsqQCL2+cA6h9a/+98O/N6P4r5f8PMwovnqRdfEAAAf4P5/v9yi/n+pooqzD+goaQ8dLPb 63Q51Dipdv4XgRAAAKZ0s9vndv6V/qcUH6p0E65yugOvcrr3rwCK9xd/AAAAfDvzej+LzZcjSfvv F6wBAAB0svd0qgPUPtQ9t69ye+4iSfvvr3J+I0n7768XmBEAAHw775X+pzY8zD82PKp0E65yugOv crr3rwCK9xfQAAAAfDvzej+Lz3S695XCcn8jSfvvrwDqN1r/76Z6P6aL57+XAPz//68AivMA6kda /+98O/OV/qc2PMw/NjyqdBN+E//7//9yev8DAACprwCK9xdnAAAAdA+megmmi+xyev8DAACvAOoT Wv/vpnSy83b+dDmhNjyVAADKJ0n77wDqF1//7zwAyidJ++8A6jdf/+88qnQTfhPr+///rKmol//7 //8AivdyehMEAACvAOpHWv/vcnoTBAAAl1M2/++vF/f5//90J3J6EwQAAJdXNv/vrxcK+v//fDvj ej/we0j///+vAOoTWv/vdAemcnoTBAAArxeB0f//dA98AQCK5HJ6EwQAAK8XjtH//3o/8Ht5//// dL/zdP90z5XvcroPlf+vF7USAAB8O/N2iguZOLoP/f+oF8jR//+V+ZX+lf2ZdroNF93R//90D3wB AIu1fILz/4vrAIrzcroPle+vqRe/////fDvvFPNyug+V76+pFxDS//96P4rleiSL36wXcxIAAL+v rKkX4Pr//3w773o/gvWpF0DS///MPxT9dDmgoaQ2PKp0E34T7/7//3S666xGF/z//6nMLXQOCAnM Lah0gveV/qRBgZn7f3a6C3S66wgOcrrrdqLrr6moli0X/P//dqoHF53S//96P/B6Yv///wCK7wCK 86gXmdL//3a68xd90v//fJrr/3a693K666+pqBfL0v//ej+KjMwJxorzi+1+gvfL2P//i/Z+gvfM 2P//iqVyugt2QgsBAACvcnoPAQAAqa+plb92Yg8BAAAXAtP//3wHAIvKxDmK96gXC9P//xTRcrrv OLrv+////69yugOvl/jv//+XAAD//6gXAtP//3wHAIv6xooDi/UXC9P//3w3ABT9zD+goaQ2PACL 2/sXUNP//8w/PKp0E34T8/7//3S696x2egcBAACpcroHqMwAr3J6CwEAAKivqKg4egsBAAD+//// doIHdoIDF5PT//90D8QIgbV0uvN0ou92uvOorACK8wCK9xej0///dA98AQCK7xeF0///wszY//+K 3pX1FPT+ivPUIcQggfOV6wDqy1//78QggDh8AQCL/JX+oXQ5oKGkNjx8g9v7/4r7fDcAPACL2/MA i9vzAIvb8xesAAAAfDvzPKp0E34T7/7//6ypzAmoxorri950uutGF/z//2Z0BggAdroLdLrrZggG li0X/P//dqoHFPl2igd2igt0oveV/qdysguuqXJyDwEAAKmur3ZiCwEAAHZ6DwEAABdp1P//fDAA xDiLwsQ5ivjMPxZc////crrrr5eAmfu/rBeQ1P//xDiL4MaK64vlAIrrAOpPWv/vdCemxCGK8XS6 83bPdLrvds90OBSSdILrqah2ogOsAIr3F87U///EOYu8fAcAiu8XmtT//8LM2P//it+V9RT0/roD 1AfEAYHVlfoA6stf/+/EAYHhqagAigMUPKwA6kta/+90uvOmds90uu92z3w3ABTvdLrzdLLrlf52 53S673b3p6ChpDY8qnQTfIL3/4r6fDcAojwAiusAiu8AivMAivcXNwEAAHw776I8qnQTfhPn/v// rKmodKL3lf5yshOnzAmuqXJyFwEAAKmur3aKD3aKE3ZiEwEAAHZ6FwEAABeA1f//fDAAxDiL48Q5 i7xyugOvl4CZ+7+sF6DV///EOIv6xooDivh0OBZU////lfugxoIDg+OV/XK6B6ivrBfL1f//xDl2 ugPwcXf////EOIz4zD8Wf////6lyugeor6wX7dX//8Q4droDjZV+ggf/3///iJ4AigcA6k9a/+90 J6bEIXaiC4u7dIIHqaisAIr3Fx7W//98BwB2ugOK8Rfp1f//wszY//+K5xT31Af8J8QBgdWV9QDq y1//78QBgeEUNgCKCwDqS1r/76Z0uvN2z3S673bPfDcAoKGkNjx0uvN0sguV/nb3dLrvdLIHdven FBmqdBN+E+/+//+szCTGou+piveV/qcWNP///36C7//f//+AsnS69zh6DwEAAP7///92egsBAABy uguvcnoPAQAArK+srHaiB3aiCxe+1v//dA/EDPBxdf///3S673w/+68A6k9a/+90D6bEDHaKA4r6 fDcAFI+ocrrvlfuvqRf6FwAAAIrvcrn7AIrzrxcJGAAAdLrvfDvndorzcof7rKgAivMAivcXDdf/ /3QPfAEAiukX79b//8LM2P//iuSV9QDqy1//7xT61AH+ivPEBIAyfAEAi/yV/qEAigMA6kta/++m oHQ5oaQ2PJX/AOrLX//vAIvb8wCL2/MAi9vzFwEBAAB8O/N6P4sfPHS72/upej+oi750g9vvegCL xnX3dA97NovOdCl0ONQodfd7Novzx/P9ivi/f8P9/4oRf8f/i/l1sf65FCZ/2f+oFwIYAACm/DkU /cw/oKE8qnQTrq6sqajMJJc7Nv/vdqIDAOpPX//vxDyLr5dPNv/vrwDqU1//78Q8XB/J+u+LxDi6 B7f9//8AigcA6k9a/+90B6Z6AIvbcroHr6gA6h/J+u90D3oJi+WoAOpLWv/vfAGQpor5vHwE/YMz zD+goaQ2PHJI8/7//3oJi9V0ovd0ugPEuvOM5nK5+5WAr6wA6kda/+98O/MAugN+PH////90yXoJ iiaoAOpLWv/vppX+pxRFqnQTfBPncroDrK/MJJcDNv/vl/7//392ogsA6vtf/+96P/B6f////6mo lftyug+gQRM2/++vcroHr3K6E6+sqTi6B/7///8AigN2ghN2gg8A6v9f/+9yuheor6isqQCKA3ai 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 dKL3/Ko/cmPsrOu7/XQsPhXoPhz29Cx0IfwvCCx2qvfcJ9wp9CX8ohtyQ+B+GV4ndCg+Fe0+GPH0 KHQH/Kr3CCjcgvd0Jdwn9AR0ovf8gkNyS8E3BCwYdAE+GOs+EfP0AXSK9/wFCCncDdwg9Ax0JfyK L3J7zxkyHt50Dz4R5D4f+vQPdD38CAgv3DjcIfQ8dKL3/Lo3cmP8KfjIPHQ8PhfoPhz29Dx0IPw5 CCx2uvfcIdw49Cf8og9ya+V48ioLdD0+F+0+HfH0PXQp/Lr3CC3cqvd0J9wh9Cx0ovf8qhdyQ+gS 66W6dCg+Hes+EPP0KHSC9/wvCCjcB9wl9AR0J/yCI3JLwfoWHFZ0AT4Q5D4Z+vQBdA/8BQgp3A3c IPQMdKL3/IorcmPMB1wQA3QMPhHoPhz29Ax0JfwICCx2ivfcINwN9CH8ojNye+cm/ZCYdA8+Ee0+ H/H0D3Q4/Ir3CC/cuvd0Idwg9Dz8ujtya/11s9VydD0+H+s+FfP0PXSq9/w5zCnML/yqC3JD6L3G BQB0KD4V4z4Y+/QodAH8L8wHzAX8ghd0ovdyY8R+CY54dAQ+EOo+HPT0BPwFdoL3zAfMBXSi9/yC J3JLwd2eYpJ0AT4Q7z4Z7/QB/ATMIHQMzA38ijdye8/zxxoCdA8+Geg+F/b0D/wIzCH8ohNya+W7 FUFbdKL3dD0+F+M+Hfv0PXQo/DnMKcwv/KpDcmvsVjAhtHQlPhTqPh309CX8J3QsdqL3zCnML/yq M3Jr6J+0RAl0BT4Q7z4d7/QF/ATOgvd0qvfML/yqP3JL6Y9DQEF0KT4d6D4R9vQpdIr3/CjMDfyK I3JLzzmBZNd0OT4X4z4Z+/Q5dAj8PcwNzA/8igdyY8wF2F4VdAw+Eeo+HPT0DPwPdCF2ivfMJcwn /KIPckPges8QK3QgPhTvPhjv9CD8Ic6i93ai83SC98wH/IIfckPF+uJ3+3QoPh3oPhD29Ch0gvf8 LMwFzCX8gi9yQ8fGLysmdDg+F+M+GPv0OPw9zCf8ojtyQ+EaZiQZdKLzdAg+Eeo+GPT0CPwPdAHM BcwH/IIbcmPEB4Nd4HQEPhDvPhzv9AR0IfwBzCB2gvPMJ/yiK3Jr5ZqpUzt0ovN0BT4Y6D4V9vQF dCn8BAgt9CjMLPyqB3J777vd1gt0Lz4V5T4f+fQv/Ch0PAgv9D3MOPy6M3JL+WgA1bx0OT4X6T4Z 9fQ5dAj8PQgp9A/MDfyKN3JjzFjca1R0DD4R7j4c8PQMdCX8Dwgs9CHMJ/yiC3JD4MZfbAN0ID4Q 9D4c6vQgdAf8IQgo9ATMAfyCO3JDxTympJp0KD4V5T4Y+fQodAH8LAgo9AXMBPyCD3JDx20z83B0 OD4X6T4Y9fQ4dAT8PQgo9AfMBfyCP3JDwYILEAB0CD4R7j4Y8PQIdAX8Dwgo9AHMB/yCE3JjxC6i e3p0BD4Y6j4U9PQEdCf8AQgs9CDMIfyiF3Jj5bCBV5B0LD4c+T4V5fQsdCEILPwo9CXMIPyiG3Jj 5x8Z0wF0PD4c9T4X6fQ8dCD8PQgs9CfMJfyiH3Jj4eu8/lx0DD4R7j4c8PQMdCX8Dwgs9CHMJ/yi I3Jj4F7u97F0BD4Y6j4U9PQEdCf8AQgs9CDMIfyiQ3Jj5X2BrAh0LD4V5T4c+fQsdCH8KAgs9CXM IPyiJ3J758oNxUJ0Jz4U6T4f9fQndDj8JQgv9DzMPfy6K3JL+UQtKNV0OT4X7j4Z8PQ5dA38PAgp 9A/MDPyKL3JDyG4seRR0zvwNdCh2zj4d6j4Q9PQooPyu+6H8L3au+3Su9/wvdL7z/Dx2rvd2vvOk NjyqdBN8E+9yug84ug8rhv/vr5X7OLoL1oX/7zi6B9GE/+84ugOWg//vF6f5//+mpjY8fMITyfrv /4v7lf6nPKypl//+//+XAP///5cPyfrvOPoTyfrv/v///xcpKgAAfDvzzDaV+XQ+zC2kCAxyTs7I +u93sd9/PeW+fAbld+mNHJX+p6GkPKp0E3wT63S676ypqHTPzCQA6hda/++V+2amCAZO+XU9CRb9 PHJ01Sz/7/u4w6V3/oH70/l3/rx8BPmDK3Qxlfo+Hvx0PqBmCACV+nayD3Si83aiC3QHdD5mpggG ei2L/rhyuP6V/q8A6j9a/+90qg+mpna6B3Lz4cwJxCl2igOBkbZ2shN0sgvEshN15nei8Iv3dbb+ d7LxFPt/mvH/xqoDgsGV9KXUKZXgdDWkfLoD+iwc8Eiy8fBIJNwmdTUsFHw5+nwV+nV07yz/73Si BwC6B3wB9Hf0gPd0sgPEsg+DOHSqD3wR9wC6C8aqA4NpdLLvlf52xnSy63b+f9vH/6egoaQ2PKp0 E3wT63S676ypfJoD/3T/qJX+cuN/dAx2ohM+Efxyuf6vAOo/Wv/vpnQvdLrzfJrz/6Z2qg/NNna6 B3okgZx/3f/GogNyvf5394K/lfSm1LLzdrILdLIHALoH8En2mfBJRg/J+u+ZfgAA/4u1dLILfLrz +ny6A/p8kgv6LBiZ9sV8gvP0gPrGogODNnXndfV8kvP3d+V0ohN398aiA3Qvg2J0uu90sg+V/nbP dLrrdvenoKGkNjwAig8A6kta/++mzD8UEqp0E3wT73K6Dzi6D9qD/++vlfw4uguVg//vOLoHkYL/ 7zi6A5aD/+8X+Pv//6amNjx8wg/H+u//i/uV/qc8qJX+pXw3AJW/QA/I+u+mduoPx/rvDFTMP6Dw SXfLLP/vd34PyPrvv3wHv40SOfrSx/rvAXQ9PDyqdBOurql0iu908Xo2ivjMPxYU////rKiV/HQ+ zC2gCAiV/MwtpKx0B3Q+CAxyvv2mdqoDzC0IDj4f/a92+QDqT1r/73QndLrregCmdueJtXK67HQo drrrdLrzfJrv/3a6B0b8////dIoHdILrdfl3+LmwtooIdLrvlfuhdDc+FuV8HsA+H/l1dsss/+93 9LyxihZ8uvP8tYpBdLoDej+LpJX8cvt6/f///8wtpggOdC90uvN8mvP/drrrcrrwdrrvdLIDdIrr dILvdfl3+LmwtooIdLrzzAnEDYzpdDc+FuV8HsB1dsss/+939Lw+H/kU+zn8wry5fAH7jSOV/qeg pKE2PMw/PKp0E3wT73K6Dzi6D12C/++vlfo4ugvKgf/vOLoHl4H/7zi6A9aB/+8Xdf3//6amNjyq dBN+E3////+pl//8//8A6k9a/+90D6Z6CYuXcrp/rxdxDgAAAIr3F1ktAACvcrp/AIr3rxdeDgAA crp/rxfVDQAAcronle+vcroXrxdELgAAcronlfevcroHrxdTLgAAcroXlf+vqRctDwAAcroXlf6v cnl//v//rxc/DwAAfDu3dDmhNjwAi9v7AOpLWv/vpjyqdBOurpX3croHlf+vF28uAAAAiutyugcA iu8AivOvlf4AivcXvP///3w72wgn5D+/NjyqdBOurpX3croHlf+vF6IuAAAAiutyugcAiu8AivOv dLr3+n/+//+V/q8XUP///3w72wgn5D+/NjyqdBN8E/N0uuesqah0z3SC63aCA3K5968A6k9a/++m drrrdLLjlfekdv58Afh0PID9dDmvcroLqK8XLy8AAHw783yC8/+L76xyugsAiu+vF+r+//98O/Ny uguvAIr3F7ETAAB8gvP/pqaL73K6C6yvAIrvF2kvAAB8O/NyugusrwCK6xd5LwAA/qLr1Ax8O/P8 BHoJgGvUggN0uud2x6ChzD+kNjyqdBN8E+90uuesdOcJPPjwelb///96JPB7Xv///6morADqT1r/ 75X3dAd0uuOhqQCK63bHcroHrxfTLwAAfDvv1CH+iut8gvP/i+5yugepr3K6D68X7y8AAHw783K6 B68AivcXWxQAAHyC8/+mpoviqXK6BwCK768XuP///3K6D6mvAIrvFyAwAAB8O+dyugepr6gXLjAA AHw783oki+apcroHAIrrrxdCMAAA/orrfDvz/AHUIRRyoMw/oRT8fDcApDY8qXSL2+96CYHsdLvb 93Sz2/PUN3Xr/s/vv7GKCKE8dLPb+3wG9Yy9Ph77fj4Hx/rvfMb/ist0u9v3dO96LYvVfIf7/4vb fIf3/4vhfIfz/4vndu50r/t2rvt0r/d2rvd0v/OV/na+86c8zD88qXQOAIvb83zZ/wCL2/MX5P// /3Q5oT33/3T+ej+L8XS2+68+HvsAbvvG+u+mPKx0o9v3qXwE9ah0Do37zD8Uv3Q8Ph/7fEcHx/rv /3JHB8f674sXdPl6P4vxdLH7rz4e+wBu+8b676YAi9vrfNn/dqH7AOimdvnMNno/8Go+dD6goaQ9 9/90/no/i9F0tvusdKPb76l0i9vvqKypAIvb53TBPh77rwBuA8f673w773o/ivve/HbBoKGkPfP/ dP56P4vRdLb7rHSj2++pdIvb76isqQCL2+d0wT4e+68Abv/G+u98O+96P4r73vx2waChpD3z/3Q+ zDZ2t/d2t/N2t+93t7t3t8t3t9t3t+s8qnQTdLr3qXQOdrn7crr3r8w/r6mXTX7/76+vAOq/X//v CCfkPwgndvmhoj37/3Sz2/sX+v///8w/Pfv/qnQTfhNX/f//rKmodA4A6ttf/++vAOoPWv/vcoHr lfaV+qgXLCoAAKh0wiNa/+8AKHKh25X3lfqsF0IqAACsAChyocuV95X6rBdSKgAArAAocqG7lfeV +qwXYioAAHw7v6wAKKbMJJX+oHbBxuGL6RdOFwAAej+K8pcfbPv/AOrLX//vFBnGgfuK7zi593ss /+84ufPa////FPU4uffnK//vdoHzdqHvdqIDdPnEPPB7H/3//3SyA8Sx8/ByK/3//8Q8dqIH8HtB /f//fIIH/fByS/3//xe0FwAAej/we1j9//90ue/MLQiJ83S593ap7wDLb3J6pwIAAJd3J//vrwDq r17/73J6pwIAAJd37P//rxfeIAAAfDvrxDx2eac3///we6j9//9yuauX/jf//6yvFx8zAAB8O/N2 YaM3//90MXbiZ3j673aiCxd2/f//dDEXUP3//8bh8Hvr/f//leEA6stf/+9yug+sr3K6E68ASac3 //8XXh0AAHw778Q88HMS/v//izBygauoF9syAACmRv83///UN8ayD4H8drIPAIoP/AcAihOoAOpH Wv/vAIoTAOpLWv/vfDvvcnonAgAAdDGvF5/9//96P/B7Zv7//3S6F8Q88HsE////fBf68HtX//// 0sL+//+LzreL23wXkovpt4vsfBf8i/F8F/CKRXQxFwL+//8UTnQxFzj+//8UV3yB+/6KXXbhFGGX 3zf/7wCKGxe4GwAAdAemxASmi3aX3zf/76gXyxsAAKbEPKbwe4sAAACX3zf/768X4BsAAHyB+/6m pvB6ogAAAHR5ozf//3wHv4JPcns5nzf//7ivqBfM+///pno/pvB7xgAAAAB5ozf//xbRAAAAdLoL ALoLej/wet8AAAB0uft8B/6K6QDqF1r/75X3ZqYIBr29rZeDJ//vFMN8B/3wewYBAAB8B/vweg8B AACXhyz/75eLJ//vFOGXkyf/7wCKHxfQMwAApno/pormALobAIobl5sn/++pF439//98O/MWRwEA AJejJ//vAIofF/wzAACmej+m8HpeAQAAdLn7fAf98HtqAQAAfAf78HpzAQAAl983/+8AihsXyhwA AKbEPKbwe4oBAACXryf/768XPTQAAKZ6P6bwep8BAAAAiiN0MReH/f//Fq4BAACV/qAWGwIAAABJ pzf//xc3IQAApgC6B8bh8Hq9AgAAALoDALnvFukCAADG4YvkdLoDxLnzivSXnxX//wDqy1//78bh 8HpDAwAAxoH7iuh0eaM3///EPIvyr3J5nzf//68Xe/z//3bhoKHMP6Q2PKmodAaV9pX6cojrqRfu LQAAqQDqI1r/73w776mXbyf/76gXkf7//3w786ChPHSu93K+y690vu8Ay31yvruvcr7br5dnJ//v rhe3/v//fDvnPKp0E66sqah0BnKgq3QMdfl7P4ujw/KL+8P1irN8mgP/f9n/dDnUOHwXq3o/geCX //3//6wAivcA6kda/+98O/N0MACK9xfA////droDdbn+ucPyiwfD9YsLqawXEDYAAHyCA/+mpor8 uRRclf6nFO3UCHwRq34B//3//4H8f9z/zD+goaQ2Pfv/qXSL2/eoQN83/+98WfP9////fFn3/f// /3xZ+/3///98We/9////f8HFis9yuf6or3Z5+/3//xd8HgAApnZ59/3//3o/povNl1Mn/+8ASfv9 //8XmB4AAKamFPl2Sff9//+oAEn3/f//F64eAACmdnnz/f//ej+mivvMPxTHAEn3/f//AOoHWv/v dHn3/f//8EH/rwDqC1r/76Z6P6aL7ABJ9/3//wDqE1r/76Z2ee/9//+V/qegoT37/6p0E34T9/v/ /6l0ivd8Qac3////ivvMPxSscrrvqK9yegcEAAAAivOvAOrjXv/vdAeXuzr/73J7wgcEAACvFzc3 AACmfDj9pnJ6BwQAAKivAEmnN///F+UiAAB8O/N6P4sZzDZ8B/7waz50PqChNjyqdBN+E2P///+s qaiX/+P//0FnlPrvlf92sgepF+c3AABAa////3J6mwAAAKiV/68X+zcAAHw753J6mwAAAHZCmwAA AK8A6m9f/+8ASpMAAAB0wkNa/+8ASpcAAACXMyf/76kAKHw770T/+///lwD8//+XZ4j675f97/// rADqM1//73yaA/9yugOvl3M5/+8XYikAAKamAIoDlz8n/++XZ4T67wAofDvzqQCK95dPJ//vAIoH FykBAAD8DHw7734BZ4D674MdoKGkNj37/6p0E3wT8wCK9xcEOAAAppXypsQ+jPvMPzY8croLrK9y ugOvdrIDAIr3dPJHePrvzCQXbgcAAHo/i5Zyugd08lN4+u+or3K6A68AigsXiQcAAHTCS1r/73o/ i750ugd0svOplfd076927nSv+3au+5l0t/nwSA58HoCsPhH4mXa3+RflPQAAfDvz2gD+///EOaGK /JX+pACKBwAopgCKCwAopqB0PKQ2PKp0E34Tl/7//3S686jMAMQ4i+c+H/2V/q92ggMA6j9a/++m xDimdroTivjMPxYy/v//rKkA6ttf/++vAOoPWv/vpnK6G68A6itf/+8AiheX8yb/7xfcKgAAAIob lw8n/+8X6SoAAHw77xeRKgAAdIr3OLoH4P///8aCB/BzkP7//8w2xoLzdoL38HGq/v//dIITcrn5 de8+Ff18HeDEqgeK9wC693bwfDj7vnw/98Sy84MdzADGgvfwe9v+//8A6hda/+/MLXaCCwiK98aC A3Ql8Hr0/v//dLoLxLr38HwA////dLoTcsNndPtn8EizOfty+zmu8Em3/K7wSbf9rvBJt/7wSf+u r3K6W5dnNv/vrwDqQ1r/73w74xdMHwAAej/we0T///9yuluXL/j//68XUCgAAKZ2ug96P6bwe3b/ //908JX3cvMxrq8XUiIAAHw783o/iuuvAOrLX//vdPiV93L7Oa8Aig8UH3wH/oqtcnpnAQAAQB8n /++vqACKDxeA////fDvzej+LyagA6k9f/+90B3oAi+GXJyf/76gA6lNf/+96P4v4lf4AL3a6A6gA 6i9f/++XHyf/7wDqt1//7wCKDxfXJgAApnK8/swtCIr3ALoLfIID/3Ql8HsKAQAAzAAAsgfGggPw e3cBAAAAihMA6kta/+90ugOmoaSgNj33/6p0E3wT26ypzCTMCcai93aiA4r4zD8W8v7//3K6B69y ugOvAIr3F0IlAAB8O/PEPIsW8HEa////fIIH9/BxLv///36CB/P+///weDv///9+ggf/X/D/8HJI ////crIjF80+AAB0ugNysiMAzwCK8xfEPgAAej/we3D///90ugOozAB0/8Q8idNBI/r//9Q4xDmB /XQ5rK90ug/8OK8AivcXEPv//8Q8gfT8B3S6A3T/xAeNJnSyA8w/xMbwaz90D8QMi8HGou+L4Jfz /v//rACK7xcXPAAAAIoHAIoDAIrvF008AAB8O+eoAIoPrBf9QAAAdA90ugN8O/PUj/sIIeQJuXKy IxeMPQAAoHKyIxeVPQAAAIoDAOpLWv/vpgCK9xc2KAAApnQ5oaQ2PHyD2/f+iuV0u9v7l/v+//+X Q3j6769cS3j67wDqC1//75X+pz3z/5X/F/z///897/+qdBN+E4/7//+pqECvJv/vzAmolf6X/v/g /3aKB3aKAwDqQ1//73o/8Hr5/f//qKmpAOpHX//vej/wewr+//8XB/7//3o/8HsX/v//cnpvBAAA rK+Xuyb/73aKCxclLgAApno/povIcnpvBAAArwDqT1//78Q5i9mXJyf/768A6lNf/+/EOYvpcrIT rqmpr6mpAOq/X//vxDl2uguKjHK6G68A6itf/+90uhdE0yb/73a6D3K6D6+sF2EuAAB0B6YIIOQA priK8nS6F9S6D8J/+v//icMAihesF8IuAACmphdpLgAAxAGK15efNf//F0A6AADEOaaL83Q3FwkM AAB2ugcU/HaKB3SyB5X+FwEMAAByum+vAOpfX//vmXyCbfiK15efNf//F3k6AADEOaaL83Q3F0IM AAB2ugMU/HaKA3SyA5X7FzoMAAByuhOvqamX6b7/76mpAOq/X//vdCdey17/73a6P15LePrvdroz crpDQNcm/++vdopDdoo7doo3doovdoordoondoojdoIfAOqnXv/vqQDKS3j676mplf6V/qmpqZcv KP3vqKkA6s9e/+96P4vPdMLXXv/vqalyul+prwAoej+L4nK6X68A6tte/+9yul+vAOrfXv/vqaly ul+prxQilQAA6stf/+90whtf/++prAAol3fs//+sdOIXX//vACypAIoLACiXd+z//wCKCwAsdLoH pMQ5i/12z3S6A8Q5i/12zzj6P3f67/7///+gzD+hNj37/34Tb/7//wDq21//768A6g9a/++mFy02 AAB6P1xPePrvg95yu9v/r5X9F+r9//96P4ruFwEkAACV/xexMQAAej+mivvMPxSdFwgTAAAXXhUA ABeVEQAAlfcX5jsAAHo/povql6Mm/++V+nQ3F6oOAABcU3j67xT4fNpTePrv/5X3Fw48AAB6P6aL 6pcvKP3vlft0NxfSDgAAXEd4+u8U+HzaR3j67/+V/qd+O2/+//88qnQTfhPv+///qMwAqBc1MgAA ej+m8HtT////qXK6B0ErJ//vr6kXuzAAAKZ6P6aK6nK6D68A6itf/+8Aig+pFxQxAACmpnyC9/9B Q3j674vkqZdLJv/vF0wxAAAAiveXZzn/7xdZMQAAfDvvF+EwAAByugOvl3sm/++X/f//fwDq+1// 73o/isSpcnoPBAAAl5Mm/++vAOpDWv/vfDvzr3J6DwQAAK+V/qColf+Xmyb/7wCKAwDq71//7wCK AwDq91//73Q4oaA2Pfv/qnQTfhP3/v//qXJ6BwEAAJf7/v//zAmvqQDqC1//73J6BwEAAJc/Jv/v rxdbPAAApq8A6jta/++mej+miupyugOvqamXinP/76mpAOq/X//vFPU4+j93+u/+////lf6noTY9 8/9eP3f67wgn5D+Z2pkC+mX9//88MwDad17/7wDam17/7wDal17/7wDak17/7wDaj17/7wDai17/ 7wDah17/7wDag17/7wDaf17/7wDae17/7wDac17/7wDab17/7wDaa17/7wDaZ17/7/////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////+5Uv//pVL//8dS//+HUv//eVL//5dS////////RVf/ /zdX//8pV///GVf//1FX//8NV////Vb///VW///jVv//y1b//7tW//+lVv//l1b//4FW//9xVv// XVb//01W//83Vv//J1b//xVW//8DVv//91X//+VV//+PV///X1f//79V//+zVf//p1X//5tV//+P Vf//f1X//21V//9bVf//QVX//zFV//8dVf//DVX///tU///rVP//z1T//79U//+xVP//nVT//5FU //+BVP//b1T//2FU///rV///d1f//9NX//+hV///t1f//9dV///LVf//R1T///////9ZUv//QVL/ //////+HU///eVP//5FT//+fU///aVP//01T//8/U///K1P//xdT//9bU///CVP//+VS///NU/// 2VP//+dT///1U///BVT//xdU//8jVP//r1P///dS//+/U////////+///3/z//9/7f//f/z//3/s //9/+///f+j//3/2//9/9f//f8b//3/L//9/+P//f5D//3+M//9//////wfv/++87v/vR+7/7/// //9pz/iI057xEUWu9mbmO5L4cAuVj8panBZcapthzXck8VtHI4bhFiofdyYtaNSzSfZCg06B+NJH GG7iQG+b70jiDd9PlbeORgwhvkF7gisl5RQbIpKuSisLOHosfKlnk+w/V5SbhQadAhM2mnWwo/7r JpP5nJzC8AUK8vdyN9+RxKHvlrMbvp8qjY6YXS4b/MO4K/u0AnryLZRK9VoFV0rKk2dNvSk2RCS/ BkNTHJMnzYqjILow8ikjpsIuVFPPJtnF/yGuf64oN+meL0BKC0ve3DtMqWZqRTDwWkJHYUf91/d3 +qBNJvM52xb0TniDkNDus5enVOKePsLSmUlvviOJ+Y4k/kPfLWfV7yoQdnpOjuBKSflaG0BgzCtH F102+IfLBv/wcVf2aedn8R5E8pWA0sKS92iTm27+o5wZC66UlJ2ek+Mnz5p6sf+dDRJq+ZOEWv7k Pgv3fag78Ao5Jk+arxZI7RVHQXSDd0YDIOIinbbSJeoMgyxzmrMrBKeeTbIxrkrFi/9DXB3PRCu+ WiC1KGonwpI7LlsECykslRaWvAMmkcu5d5hSL0efJYzS+7sa4vzMoLP1VTaD8iLDjvqvVb792O/v 9EF53/M22kqXqEx6kN/2K5lGYBueMfEGIaFnNibW3WcvT0tXKDjowkymfvJL0cSjQkhSk0U/33xH EklMQGXzHUn8ZS1Oi8a4KhVQiC1i6tkk+3zpI4zt9Jwce8Sba8GVkvJXpZWF9DDxG2IA9mzYUf/1 TmH4grts8A8tXPd4lw3+4QE9+ZaiqJ0INJiaf47Jk+YY+ZSRieQrAR/ULHalhSXvM7UimJAgRgYG EEFxvEFI6CpxT58XXCkpgWwuXjs9J8etDSCwDphELpioQ1ki+UrAtMlNtyXU8iez5PVQCbX8yZ+F +748EJ8gqiCYVxBxkc6GQZa5c0yeNOV8mUNfLZDayR2XrWqI8zP8uPRERun93dDZ+qpBxEU61/RC TW2lS9T7lUyjWAAoPc4wL0p0YSbT4lEhpE89m2TZDZwTY1yVivVskv1W+fZjwMnxFHqY+I3sqP/6 fbVAauuFRx1R1E6Ex+RJ82RxLW3yQSoaSBAjg94gJPQrLSx5vR0rDgdMIpeRfCXgMulBfqTZRgke iE+QiLhI5xml93ePlfAANcT5maP0/u4AYZpwllGdBywAlJ66MJPphx31XxEt8iirfPuxPUz8xp7Z mFgI6Z8vsriWtiSIkcG1lS5RI6UpJpn0IL8PxCfIrFFDVjphRCGAME24FgBKz+MNQkJ1PUU1z2xM rFlcS9v6yS9FbPkoMtaoIatAmCbc0YWZTEe1njv95Jeia9SQ1chB9EtecfM85CD6pXIQ/dKWsP/v xbD/72Sw/++3r//vk67/76ew/+9wr//vYa//70mt/+8grf/vBq//73+u/+8cr//vIK7/7wGt/+/E rP/v2a3/73at/+9erf/vEa//729Z/////////////zFU///jX///g1j/////////////01L///de //+LWf////////////9nUv///1///49Y/////////////yNS//8DX///J1j/////////////F1L/ /5te/////////////////////////////7lS//+lUv//x1L//4dS//95Uv//l1L///////9FV/// N1f//ylX//8ZV///UVf//w1X///9Vv//9Vb//+NW///LVv//u1b//6VW//+XVv//gVb//3FW//9d Vv//TVb//zdW//8nVv//FVb//wNW///3Vf//5VX//49X//9fV///v1X//7NV//+nVf//m1X//49V //9/Vf//bVX//1tV//9BVf//MVX//x1V//8NVf//+1T//+tU///PVP//v1T//7FU//+dVP//kVT/ /4FU//9vVP//YVT//+tX//93V///01f//6FX//+3V///11X//8tV//9HVP///////1lS//9BUv// /////4dT//95U///kVP//59T//9pU///TVP//z9T//8rU///F1P//1tT//8JU///5VL//81T///Z U///51P///VT//8FVP//F1T//yNU//+vU///91L//79T////////7///f/P//3/t//9//P//f+z/ /3/7//9/6P//f/b//3/1//9/xv//f8v//3/4//9/kP//f4z//3//////gv64mouolpGbkIiMu5aN mpyLkI2Gvv//Vf62kZaLlp6TloWavI2Wi5acnpOsmpyLlpCR/zH9qJ6Wi7mQjayWkZiTmrCdlZqc i/9g/auajZKWkZ6LmquXjZqem/8+/rOanomavI2Wi5acnpOsmpyLlpCR//+Z/7qRi5qNvI2Wi5ac npOsmpyLlpCR///k/7yTkIyat56Rm5Oa/+f9rZqem7mWk5r//+3+uJqLuZaTmqyWhZr/y/+8jZqe i5q5lpOavv+S/riai6uWnJS8kIqRi///b/+5lpGbvJOQjJr/Yv+5lpGbsZqHi7mWk5q+/2n9rJOa mo//a/+5lpGbuZaNjIu5lpOavv//ov2smou8io2NmpGLu5aNmpyLkI2Gvv//tf+8jZqei5qrl42a npv///L+uJqLuZaTmr6Li42WnYqLmoy+//+o/7uak5qLmrmWk5q+/xv+soqTi5a9houaq5Colpua vJeejf/7/riai7uNlomaq4aPmr7/eP2smourl42anpuvjZaQjZaLhv8p/rKej6mWmoiwmbmWk5r/ yv+8jZqei5q5lpOasp6Pj5aRmL7//579rJqLupGbsJm5lpOa//+V/ayai7mWk5qvkJaRi5qN//9P /aqRkp6PqZaaiLCZuZaTmv9m/reano++k5OQnP+//riai6+NkJyajIy3mp6P//9d/reano+tmr6T k5Cc/2D+t5qej7mNmpr///38k4yLjZyPhr7///f8k4yLjZOakb7//wb9k4yLjZyei77//wD9k4yL jZySj5a+/wP9k4yLjZySj77//4r+uJqLqZqNjJaQkbqHvv+R/riai6uWkpq5kI2Snou+//8E/7ia i7uei5q5kI2Snou+//+P/riai6uWkpqlkJGatpGZkI2SnouWkJH//+T+uJqLs5CcnpOrlpKa//+c /riai6uako+5lpOasZ6Smr7//5r+uJqLq5qSj6+ei5e+///B/riai6+NkJy+m5uNmoyM//89/rOQ npuzlp2Nno2Gvv//xf64mouvjZaJnouar42QmZaTmqyLjZaRmL7//8D/vI2anouasoqLmoe+//8S /rCPmpGyiouah77//1X/uZOKjJe5lpOavYqZmZqNjP//IP2ojZaLmrmWk5r/2v2tmpOanoyasoqL mof//+P+uJqLs5CcnpOatpGZkL7//0v/uY2amrOWnY2ejYb/oP64moushoyLmpKrlpKavoy5lpOa q5aSmv/b/riai7KQm4qTmrmWk5qxnpKavv//tLqtsbqzzM3Rm5OT//9T/YiMj42WkYuZvv+h/ria i6iWkZuQiKuah4u+//8S/7iai7yTnoyMsZ6Smr7/lf2sl5CIqJaRm5CI///9/riai7uTmLaLmpL/ /8r+uJqLr56NmpGL/y//upGKkqiWkZuQiIz/2P64mouympGKrIuei5r//+v9rJqRm7KajIyemJq+ //+9/riai6yKnbKakYr//+P+uJqLspqRiv8q/7mWkZuolpGbkIi+/yH+r5CMi7KajIyemJq+///e /7yXno2zkIiajb7//9D/vJeejaqPj5qNvv//Uf2IiYyPjZaRi5m+//9q/7uWjI+ei5yXspqMjJ6Y mr7//339q42ekYyTnouaspqMjJ6Ymv//1f64mouymoyMnpiavv+m/7yNmp6LmqiWkZuQiLqHvv8N /q2amJaMi5qNvJOejIy+//97/7uamaiWkZuQiK+NkJy+//+qrLqtzM3Rm5OT//+k/q2amLyTkIya tJqG/4T+rZqYroqajYapnpOKmrqHvv//jv6tmpiwj5qRtJqGvv+N/q2amLCPmpG0moa6h77/mf6t mpi6kYqStJqGvv95/q2amKyai6mek4qauoe+//++u6m+r7bMzdGbk5P//6//rLe4mouvnouXuY2Q kra7s5aMi77//6z/rLe4mousj5qclp6TuZCTm5qNs5CcnouWkJH//6y3urOzzM3Rm5OT/6issLy0 zM3Rm5OT//////////////////////8GCQG//////7VQ///+////4v///+L////XUf//Y1H//+9Q //+ecP//inP//5Rz//9tb///0m///xyv///Zrf//zq3//6ew//9ksP//Sa3//yCt//9erf//aa3/ /wGt///FsP//S6///8Ss//+WsP//dq3//2Gv//9wr///HK///1Ou//+3r///IK7//3+u//8Gr/// Ea///49Q//9/UP//r1D//51Q//+XUP//bVD//2VQ//9gUP//W1D//1RQ//9PUP//R1D//z9Q//83 UP//L1D//yZQ//8fUP//GFD//xNQ//8LUP//BVD///5P///2T///70///+dP///fT///1k///85P ///HT////P/7/////v/9//r/+f/4//f/9v/1//T/8//y//H/8P/v/+7/7f/s/+v/6v/p/+j/5//m /+X/5P/j/9/Rm5OT/7uTk62amJaMi5qNrJqNiZqN/6CSnpaR/6CSnpaRrbv/u5OTvJ6RqpGTkJ6b sZCI/7uTk7iai7yTnoyMsJ2VmpyL/6CMi42TiI3/nouQlv+ei5CT/5yek5OQnP+ZjZqa/5aMnpOR ipL/loyek4+Xnv+WjJuWmJaL/5aMjI+enJr/loyHm5aYlov/kp6Tk5Cc/5KakpyXjf+NnpGb/42a npOTkJz/jI2ekZv/jIuNnJeN/4yLjZacko//jIuNk4iN/4yLjZGcko//jIuNkZyPhv+Mi42RlpyS j/+Mi42NnJeN/4yLjYyLjf+Mi42Kj43///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////+N////np2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoW+vby7urm4t7a1 tLOysbCvrq2sq6qpqKempc/OzczLysnIx8bS0aD////f08TFw8HC3fXy///f08TFw8HA2dbU3fXy ////Pz3/70s9/+9TPf/vWz3/72c9/+9vPf/vez3/74M9/++LPf/vkz3/75s9/++jPf/vqz3/77M9 /++7Pf/vwz3/78s9/+/TPf/v3z3/7+c9/+/3Pf/v/z3/7/////8HPv/vCz7/7xM+/+8bPv/vIz7/ 7ys+/+8zPv/vPz7/70c+/+9PPv/vWz7/78s9/+9nPv/vbz7/73s+/+/TPf/vgz7/7/////+LPv/v kz7/75s+/++jPv/v/Pz8/P79/fz9////qz7/77c+/+/DPv/vyz7/75KMkdGckJL/l5CLkp6Wk9Gc kJL/hp6XkJDRnJCS////npCT0ZyQkv/Rq6er/////9G3q7Kz////0bersv/////RqL69/////4iX mo2a////kpacjZCMkJmL////jJqcipGWnv+Ri52KmIuNno7///+RmpCXno+Mloz///+amoaa//// /5GeltGc////i42akZuSlpyNkP//nZaLm5qZ//+MkI+XkP///4+ekZue////jIaSnpH///+Jlo2K jP///56Jj/+UnoyPmo2M/5yQkZmWjZL/jIqdjJyNlo+LlpCR/////5GaiIz/////jZqYloyLmo3/ ////jI+ekv////+MmpyKjf///4yKj4+QjYv/jJqNiZacmv+ckJGLnpyL/56dioya////lpGZkP// //+RkIuXlpGY/56RhpCRmv//kZCdkJuG//+RkJCRmv///4yQkpqdkJuG/////4yQkpqQkZr/j5CM i5KejIuajf//kp6Wk5aRmP+SnpaTmo3//4ianZKejIuajf///56bkpaR////kp6Wk9GZ2or///// sqy2srHRuqe6////kp6Wk9GMnM//////kp6Wk9GZmv+bnov/kp6Wk9GZlpOa////2oy/2oz////R mpuK/////8PajMH/////2ozfw9qMwf+em5uNmoyMmoz////V0dX/qoyajdGxuqvfspqMjJqRmJqN 36yajYmWnJr//6yQmYuIno2ao7KWnI2QjJCZi6OyrLGymoyMmpGYmo3/rLKrr9+7loyPk56G37Ge kpr///+ssquv37qSnpaT376bm42ajIz//76cnJCKkYuMo9qM/7uamZ6Kk4vfsp6Wk9++nJyQipGL /////6yQmYuIno2ao7KWnI2QjJCZi6O2kYuajZGai9++nJyQipGL37KekZ6Ymo3/rJCZi4iejZqj spacjZCMkJmLo6i+vaOovr3Lo6iend+5lpOa37Gekpr////czM3IyM///7KssbKsvbO8k56MjP// //+yrLHfspqMjJqRmJqN////u6y9ipubhrOWjIusnomam/////+skJmLiJ6NmqOylpyNkIyQmYuj sqyxspqMjJqRmJqNo6+aja+ejIyPkI2LrJqLi5aRmIz/vJCRi56ci7OWjIuvnouX/5zFo5KMkZyQ kYuenIuTloyL0ZyLi////5KMkZyT0YyeiZqb/7mws7u6razRu72n/9qcxaO7kJyKkpqRi4zfnpGb 36yai4uWkZiM///anMWj/////76Pj5OWnJ6LlpCR37uei57/////8vXR8vX///+7vqu+8vX//628 r6vfq7DF38PajMHy9f+yvraz37mtsLLF38PajMHy9f///7e6s7Df2ozy9f///9qMxc3K////8vX/ /87Kx9HOys3RztHKx/////8AAAAAdzn/7y8o/e8vKP3vfzn/7y8o/e8vKP3vizn/7y8o/e8vKP3v lzn/7y8o/e8vKP3vmzn/76M5/++rOf/vtzn/7785/++rOf/vyzn/79M5/++rOf/v3zn/79M5/++r Of/v5zn/7/s5/++rOf/vAzr/7y8o/e8vKP3vCzr/7xc6/+8fOv/vkpqMjJ6Ymv+bkJyKkpqRi/// //+bmouelpOM/7CU35yKkYv/nI2akpqgm5qgmI2KhpqNmv////+YiouLmpv//7mai5aMl5qM//// /4+XkIuQ////ttiS35GKm5r/////lZqRlpmajf+omovfmJaNk4z////RlY+Y/////52NlouRmob/ rJqH/7bYkt+Wkd+TkIma/7aSj5CNi56Ri////7eak5OQ////t5b//5KelpPRjJqRi////5mWk5rO 0Y+ei5f//7KajIyemJrStrvF39qM8vW5jZCSxd/ajPL1q5DF39qM8vWsip2VmpyLxd/ajPL1u56L msXf2ozy9bKWkprSqZqNjJaQkcXfztHP8vW8kJGLmpGL0quGj5rF35KKk4uWj56Ni9CSloeam8Tf nZCKkZuejYbC3dqM3fL18vXS0tqM8vXajPL10tLajPL12ozy9dLS2ozS0vL1/////8Paz8eH0drP x4e/2ozB//+8kJGLmpGL0quGj5rF34uah4vQj5OelpHy9fL12ozy9f////+8kJGLmpGL0quGj5rF 39qMxPL19pGekprC3dqM3fL1vJCRi5qRi9KrjZ6RjJmajdK6kZyQm5aRmMXfnZ6MmsnL8vW8kJGL mpGL0ruWjI+QjJaLlpCRxd+ei4uenJeSmpGLxPL19pmWk5qRnpKawt3ajN3y9fL12ozy9f//no+P k5acnouWkJHQh9KFlo/SnJCSj42ajIyam//////ajNGFlo///9GMnI3/////3////9qM2oz///// u5CIkZOQnpu7lo3/0bu6ub6qs6ujrJCZi4iejZqjtJ6Fnp6js5CcnpO8kJGLmpGL/////9qc2or/ ////0YuHi/////+I/////v///9qM2ozajP//o////9qMo9qc2ozR2oz//9qc1dGbk5P/2ozf2ozf 2s/N0c2bz8///9qM39qM39Taz83RzZvPz/+3t9jF2JKS2MXYjIz/////m5ub2NPY35vfsrKy34aG hob///+vjZCcmoyMzM2xmoeL////r42QnJqMjMzNuZaNjIv//7yNmp6LmquQkJOXmpOPzM2skZ6P jJeQi/////+Umo2RmpPMzdGbk5P/////AAAAAJ2QkIv/////jIaMi5qS0ZaRlv//rLytsay+qbrR uqe6/////6ycjZqakayeiZq+nIuWiZr/////vJCRi42Qk9+vnpGak6O7moyUq5CP////nJmY0Zue i/+cmZi+nJyajIz////C////2or//9qK0dqK0dqK0dqKxdqK///F////o6P//7iai7Gai4iQjZSv no2ekoz/////to+Xk4+ej5bRm5OT/////wAAAACIiIjRmJCQmJOa0ZyQksXHz////5qRnp2Tmp6K i5Cblp6T//+skJmLiJ6NmqOylpyNkIyQmYujqJaRm5CIjKO8io2NmpGLqZqNjJaQkaO2kYuajZGa i9+smouLlpGYjP/Gztbe5u72/sXN1d3l7fX9xMzU3OTs9PzDy9PbwMjQ2ODo8PjBydHZ4enx+cLK 0tri6vL64+vz+/79+/n39fPx8O7s6ujm5OPx7vTn/vr84/D56vXo7PP75ffv+OTr8v3Wy+Da0Mjh 18zS3s/TztjH3crR1c3b4t9/////v////9/////v////9/////v////9/////v/////7/v7///// ///+//v7/v77//7++/v+//v///////7///v////7/v77+/7+//v///v7//77//7+/////vv////7 +/////v//v/7//7/+/7///v+/////v7///7++/v//vv//v/7///++////vv//v//////+/v///v7 /v/////+///+//v7/v77///////+/v/7/v7////+/////v/7///7//7+///+///7/v/7///+//v/ //v////7+//++/v+//v7/v77//7////+/vv7//77///++/v///v7/v//+/7++/v////7//7/+//+ //////v//v//+/7///////v//v7ff+9//3//f/9////ff+/////v/9/////f/+9/33//f9///3/f f+9//3/vf////3//f/9////v/9/////f/+9//3/v/9//7//ff/9//////////3//f///33/v//// 73/f/+//3///f///////f+//33////9/73///+9/33/////////ff+//3//vf///7//ff/9////v f/9/73//f//////vf/9//3/f////33/vf99/7//f/////3///////3/ff////3/vf///7//f//9/ 3//v/99//3/f//9/3//v//9/7////////3//f99///////9/3//vf99/73//f+//9/3////9/ff/ ////9//99//9//f/////9/39///9//f3//3/9///9/f///f///3/9/399/f//f////339/3///// //f3//////399//9/////f3////99/f//ff3/f3/9/3/9//9/f////3/9/3/9/f////3/f33//3/ //////f//f33////9/f//f/3/f/////9///9/ff//f/3///////9///3//3/9/399//9//f3///3 //3////////3//339/3/9////f/////39/399/f////3/f3///39//f///f///339/3/9/f9//// //339/39//f////3//33//39//7ff/9+3///ft///3////9/33//fv9///7/f//+3//////////f f///33//ft9//37/////////f/9///7/f//+/////9//////f//+33//f///////f//+3///f9// /37/f//+////f9///3//f///3///f99//37ff/9+////f/9///7/f///33//ft9//37///////// ///////ff/9/3///f/9//37/f//+/////t9//37f//9+3///f////37ff/9+/////v/////f///+ /3///t///3/ff/9+/3///t///3/f/////3///t9//3///////3///9///3/ff////v////73/f// 9/3//v+9///3///+//////+////3/f/+97////f///7//f/+97///v+9///3vf/+9/////+///// /f//97////e////////+/7///ve9//73vf/+//3///e9//7/v/////////+9//73/f////3///+9 //73////9////v+9//7///////3///+////3/f/+/73//ve///7//f///7////e9//73/f/+97// /v///////f//973//ve9//73/////73//ve9///3/f////////e/////vf/+9////v/9//7/v/// 9//////////3v//+9/3//v+/7///3///v9//v///77+/3///v9/v////77+/3///v///v//f77+/ ////v//v///f7/+///+//9/////f77/////////v/7//77//3/+/////v7//77//3+/////v/7/f 7/+/3//////vv7///7+/3++/////v7///7+/3////9//v//f7////+//v9//v7//77+/3///v//v v///7///3///v///v//f////3++////v///f77+/3/+/v////7/f77+///+/v9//////7/+/3+// ////v/////+/3++/v///v///7/+//++//9///////7+/3////9/v/7//77//3///3//9/9/7/ff/ +///////9////ff/+/333///99/7/fff+///3////////f//+/3////////7/f/f+/33////9//7 /fff//3/3///9//7/f//+///3/v/99/7/f/f////3/v/9////ff///333/v/99///f////////v/ 99//////+//33////9///ff/+/33//v9/9/7/f/f+/3////9/9//////+//3//v//9////ff+/33 ///999////ff+/33///9///7/fff+///3/v/99////////3////999/7//////333////9/7//f/ //3///v/9//7//f///3/3/+/7//v/+//////+/+/7/vv////77/v/++/////////77//+/////vv v+/77//v+///7/vvv+/7///v//+////////777///+//7//vv+/////v+/+///v/v//77//v+++/ 7/////////////+///vvv///7//v/++/7/v////7/7/v+/////v//+/77//v//+/////v//77//v //+/7/v//+//77////+////v///777//++/////v///7/7/v/+//////v+/777//+/+////v///7 7//v/++/7//v/////7/v++//7/v//+/7/7/v//+/7///v//7/////+//7/vvf/////////////// /////////////////////////////////////////////////////////////////////56dnJua mZiXlpWUk5KRkI+OjYyLiomIh4aFvr28u7q5/////769vLu6ubi3trW0s7KxsK+urayrqqmop6al np2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoXPzs3My8rJyMfG1ND/////3KCgi5qMi6Cg////xyf/ 7+Mn/+//J//vHyj/7z8o/+9bKP/veyj/75co/++zKP/vzyj/7+so/+8LKf/vKyn/70cp/+9nKf/v gyn/76Mp/++/Kf/v2yn/7/Mp/+8PKv/vKyr/70cq/+9fKv/vfyr/75sq/++3Kv/v6yr/7wsr/+8r K//vRyv/72Mr/++DK//vnyv/77cr/+9HKf/v0yv/7+Mr/++cl56LztGJkJaTntGZjf//noqMi5aR 0YuH0YqM0YqRm5qNkZqL0ZCNmP///5KajJ7RnoXRiozRipGbmo2RmovRkI2Y/4yKjY2ahtGKlNGa itGKkZuajZGai9GQjZj///+Mi5CclJeQk5LRjJrRmorRipGbmo2RmovRkI2Y/////5KQjJyQiNGN itGaitGKkZuajZGai9GQjZj///+Xnp6Nk5qS0ZGT0ZqK0YqRm5qNkZqL0ZCNmP//npKMi5qNm56S 0ZGT0ZqK0YqRm5qNkZqL0ZCNmP////+ekoyLmo2bnpLN0ZGT0ZqK0YqRm5qNkZqL0ZCNmP///46K mp2anNGOitGcntGKkZuajZGai9GQjZiYjZ6FzdGei9GaitGKkZuajZGai9GQjZj///+LkI2QkYuQ 0ZCR0Zye0YqRm5qNkZqL0ZCNmP//kpCRi42anpPRjorRnJ7RipGbmo2RmovRkI2Y/4mekZyQioma jdGdnNGcntGKkZuajZGai9GQjZj/////mI2ehdGei9GaitGKkZuajZGai9GQjZj/k5CRm5CR0YqU 0ZqK0YqRm5qNkZqL0ZCNmP///52NioyMmpOM0Z2a0ZqK0YqRm5qNkZqL0ZCNmP+blpqSmpHRkZPR morRipGbmo2RmovRkI2Y////kIyTkNGRkNGaitGKkZuajZGai9GQjZj/mZOekZuajYzRnZrRmorR ipGbmo2RmovRkI2Y/5OKk5qe0Yya0ZqK0YqRm5qNkZqL0ZCNmP////+TkIzSnpGYmpOajNGcntGK jNGKkZuajZGai9GQjZj//4+XkJqRlofRnoXRiozRipGbmo2RmovRkI2Y//+InoyXlpGYi5CR0Zuc 0YqM0YqRm5qNkZqL0ZCNmP///56Lk56Ri57RmJ7RiozRipGbmo2RmovRkI2Y//+SnpGXnouLnpHR lIzRiozRipGbmo2RmovRkI2Y/////52ek4uWkpCNmtGSm9GKjNGKkZuajZGai9GQjZj/////k56M iZqYnozRkYnRiozRipGbmo2RmovRkI2Y/5GaiIaQjZTRkYbRiozRipGbmo2RmovRkI2Y//+bnpOT nozRi4fRiozRipGbmo2RmovRkI2Y////jJ6Ti5OelJrRiovRiozRipGbmo2RmovRkI2Y/56Nk5aR mIuQkdGJntGKjNGKkZuajZGai9GQjZj/////noqclJOekZvRkYXRipGbmo2RmovRkI2Y/////56R kdKejZ2QjdGSltGKjNGKkZuajZGai9GQjZj/////kZqInY2KkYyIlpyU0ZGV0YqM0YqRm5qNkZqL 0ZCNmP+Pk56RkNGLh9GKjNGKkZuajZGai9GQjZj/////kpyTmp6R0Yme0YqM0YqRm5qNkZqL0ZCN mP///5yempHRmY3RmorRipGbmo2RmovRkI2Y/8WYmouWkZmQjP///6+ttqmyrLj/r7CxuN/ajP+v trG4/////7WwtrHf2oz/s7asq9/D2or/////2ozFycnJyP+xtry039qM/6qsuq3f2ozf2ozf2ozf xdqM////3v///6+ttqmyrLjf2ozfxdqM//+akYmQlpqMxd/aiv/aitHaiv///5ab//+gkp6Wkf// /5zFo4qPm56LmtGbk5P///+cl5qclIqPm56LmtGbiLOQiLuei5qrlpKa////nJeanJSKj5uei5rR m4i3lpiXu56LmquWkpr//4ickf+cl5SKj5vRm4i3lpiXu56LmquWkpr///+ZlpOazNGPnouX///f koqLmofN3/////+SkJ2Ki4r//4iWkYqPm4v/raqxu7OzzM3Ruqe639qM06CSnpaRrbv/rJCZi4ie jZqjspacjZCMkJmLo6iWkZuQiIyjvIqNjZqRi6majYyWkJGjrYqR////mZaTms3Rj56Ll///moeP k5CNmo3Rmoea//////////////////////////////////////////////////////////////// ///////v//9z////E8/pzsTOmM5WziPO7s2xzRbN3cxVzJbLmcp2yjbKgMgMyEfHOse4xqvGkMaH xn3GdsZqxmTGWcZRxkLGOsYvxifGGMYDxvjFx8WBxU7FOMUbxRTFrcR2xHDEJsQHxMPDqcOQw1TD CcPQwqDCgcJawkTC+8GZwVfBJcG7wHfAcMBewAnA/9/////+///2z+DPqM9zz1rPSM84zybPIM8S z+PO3s7NzqzOlc5VzkvOQc43zt/NyM1AzSPNFMwHzOjL38vGy7TLict5y3PLC8sEy9fKjsqHymDK RMowyh/KCMqvyT7JEMn2yFXIN8gqyAzIA8jsx+DHyMe9x57Hjsdpx2LHS8cqxwjH6cbKxr7Gtcaa xnDGSMZsxQDF88S8xLPEaMQ7xPHD6cPJw6zDicN5w3LDWsNRw0jDPcM2wyjD+8LpwtnCrsKowqLC ncKYwpLCgMJswlnCRsI3wujB4sHTwbfBnsGQwXrBUsFIwR7B8MDpwLTApMCewEXAPsAwwCHAAMD/ ///P//+D////8c/Ez77Prc9+z2bPSs8qzx3PDc/8zp7Oj87VzZLNKc0XzfbMlcx+zHbMcMw1zCHM +8vvy9/LzsuNy4XLaMsmy/XK5MrVys7KvMqEyn7KXspKyuHJlslLyQPJtMhQyF/HEsfixsHGcMSC w8rCScE6wQ7A////v///F/////zPk890z0fPOM8Dz7vOr86jznfOL84RzvjN4s3bzdbNdM1TzSHN 8My9zJ/MasxkzFDMQsw7zNTLn8sNy/7K7srLyrPKhMpuyg3K0cm6yYzJeMlwyWPJPcktySfJtcih yITIechWyE3IPcjqx9bHpsePx4jHdMcxxyfHHMcFx8fGisZFxjfGLcYcxgzGAcbxxc7FwsWvxaLF TsXAxKvElsSBxGzEV8RCxC3EGMQDxO7D2cPEw63DmMOBw2DDMcP1wnTCWMI/wjnCJcJbwVLBO8Ez wbPArMBxwGrAXMBVwP///6///xP///+8z4TPdc9mzyHPFs8Lz4TOdM1uzdDMyczDzH3MZ8w0zCbM H8wKzK3LpcrwyOLIxMguyDTH5sbYxtLGs8aZxk7GPcYlxgvG68XcxcvFwcW1xZrFk8WAxWvFQMUw xSnFH8USxQzFBsX5xPTE7MTmxN/E2cTRxMvEwsS1xInEasRKxDbEKsQfxBfECcTYw8vDusOow4nD a8NVw0PDPsM4wyDDCMPRwrrCpcKewpPCjMJxwlnCTsJIwjLCJsIPwgDC6sHawdTBzsG+wbjBBsH3 wOLA3MDHwMHAssCswKbAoMCawJTAL8D/n///Y////93Pz8/Jz7fPns+Ez33PZM9Tz0HP4M7IzsHO ic6CzmzOMs4fzhnOEs4MzurN383MzbTNc8uuyl7KTMpQyRLJA8l1yBbI+sfqx3LHacdgx1nHUsdA xy7HIcfsxtPGu8atxpjGd8ZjxlfGJ8auxRHF4cTaxNDEvsSZw4/DfcN2w1HDR8M1wy7DOsIkwufB uMGXwUPB////j///q////8bPUMZGxj/GOMYpxhHGC8buxcTFsMVtxQ7FrMRuxBTE/8P1w+7D58PY w8PDvMOww6rDnsNVwwzDr8KCwnjCccJqwkzC0MFEwZfA////f///+/7//8nPYc9CzzvPJs/hzqrO Zs5ezi/OKM4Uzr/Nsc2hzUTNPc37zNzMk8yKzCDMC8z2y5nLi8tyy23LZstNyzrLDsv3ypfKUspJ yiPK3MmFyUPJBsn2yOTIpsifyE/IGsgOyAPI7sfix9XHxsfBx7PHoMdox1THQMfNxrXGrsajxpvG jsYrxt/F2MWRxXTFXMVRxUrFOMUzxS3F9sTPw6rDpMOew37DaMNXwzXDGsMRwwrD98Lmwt7Cc8I5 wjHCKsIiwhfC+MHxwePB28HRwbrBsMGfwZnBicFewUbBP8EywevA3cDVwMPAtcCtwH7AZ8BTwEvA PsAowB3ADcAGwP9v///H////8M/nz97Pt8+sz57Pjc+Fz33PbM9Xz1HPS89Fzz/POc8zzy3PJ88h zxvPFc8PzwnP/1///8f///9fzlvOV85Tyk/KS8pHykPKP8o7yjfKM8ovyivKJ8ojyh/KG8oXyhPK D8oLygfK////P///V////5vPl8+Tz4/Pi8+Hz4PPf897z3fPc89vz2vPZ89jz1/PW89Xz1PPT89L z0fPP887zzfPM88vzyvPJ88jzx/PG88XzxPPD88LzwfPA8//zvfO887vzuvO287XztPOz86jyp/K m8qXypPKj8qLyofKg8p/ynvKd8pzym/Ka8pnymPKX8pbylfKU8pPykvKR8pDyj/KO8o3yjPKL8or yifKI8r/L///q////3vMd8xzzG/Ma8xnzGPMX8xbzFfMU8xPzEvMR8xDzD/MO8w3zDPML8wrzCfM I8wfzBvMF8wTzA/MC8wHzAPM/8v7y/fL88vvy+vL58v///////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAwAAACAAAIAO AAAAYAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAOAAAgAAAAAAAAAAAAAAAAAAAAQAMBAAAUAAAAKDw AADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZgAAAHgAAIAAAAAAAAAAAAAAAAAAAAEADAQA AJAAAACI8wAAFAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAAvwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/ AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3d3d3d3cHAAAACP//////////////cH AAAAj//////////////3BwAAAI/wAAAP////////9wcAAACP//////////////cHAAAAj/AAAA// ///////3BwAAAI//////////////9wcAAACP//////////////cHAAAAj/AAAAAAAAAAAA/3BwAA AI//////////////9wcAAACP8AAAAAAAAAAAD/cHAAAAj//////////////3BwAAAI/wAAAAAAAA AAAP9wcAAACP//////////////cHAAAAj/AAAAAAAAAAAA/3BwAAAI//////////////9wcAAACP //////////////cHAAAAj/AAAA/////////3BwAAAI//////////////9wcAAACP//////////// //cHAAAAj//////////////3BwAAAI/wAAAP////////9wcAAACP//////////////cHAAAAj/AA AA////8PAA/3BwAAAI//////////////9wcAAACP//////////////cHAAAAj//////////////3 BwAAAI8P8P8P8P8P8P8P+AcAAACPD/D/D/D/D/D/D/gHAAAACPiPiPiPiPiPiPiPgAAAAAAAAAAA AAAAAAAAAAAAAPAAAB/gAAAPwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAA B8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH wAAAB8AAAAfAAAAHwAAAB+AAAA/ySSS/AAABAAEAICAQAAEABADoAgAAAQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEsBAhQACgAAAAAAAAAAAIdw1mwA0AAAANAA AKEAAAAAAAAAAQCAAAAAAAAAAHNreS50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuc2NyUEsFBgAAAAABAAEAzwAAAL/QAACHAgAAAAAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg --OEknMdrQymslrN-- From sfeldma@pobox.com Thu Dec 2 21:21:15 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 21:21:19 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB35LE61004916 for ; Thu, 2 Dec 2004 21:21:14 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 9C1FA2F7118; Fri, 3 Dec 2004 00:20:52 -0500 (EST) Received: from [192.168.200.234] (209-128-68-065.bayarea.net [209.128.68.65]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 253032FA2A7; Fri, 3 Dec 2004 00:20:43 -0500 (EST) Subject: Re: [E1000-devel] Transmission limit From: Scott Feldman Reply-To: sfeldma@pobox.com To: Robert Olsson Cc: Lennert Buytenhek , jamal , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <16815.23964.93437.411404@robur.slu.se> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <16813.58484.343629.570703@robur.slu.se> <1101919791.5198.15.camel@localhost.localdomain> <16815.23964.93437.411404@robur.slu.se> Content-Type: text/plain Message-Id: <1102051410.3546.45.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Thu, 02 Dec 2004 21:23:30 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12404 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Thu, 2004-12-02 at 10:23, Robert Olsson wrote: > It can increase TX performance from 800 kpps to > 1125128pps 576Mb/sec (576065536bps) errors: 0 > 1124946pps 575Mb/sec (575972352bps) errors: 0 These are the best numbers reported so far, right? > And some of Scotts may still be used. Did you try combining the two? > + > + if( adapter->tx_ring.next_to_use - adapter->tx_ring.next_to_clean > 80 ) > + e1000_clean_tx_ring(adapter); > + You want to use E1000_DESC_UNUSED here because of the ring wrap. ;-) -scott From madhaviram123@yahoo.com Thu Dec 2 21:40:38 2004 Received: with ECARTIS (v1.0.0; list netdev); Thu, 02 Dec 2004 21:40:42 -0800 (PST) Received: from web90003.mail.scd.yahoo.com (web90003.mail.scd.yahoo.com [66.218.94.61]) by oss.sgi.com (8.13.0/8.13.0) with SMTP id iB35ec54005686 for ; Thu, 2 Dec 2004 21:40:38 -0800 Received: (qmail 74387 invoked by uid 60001); 3 Dec 2004 05:40:12 -0000 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; b=jYStYmvGTJ1LpZdR0DUUGf9hxK0M53uLXmqxYUeq50OcsTq9CSwLFvLvZK3pFA6zIO4RTYL+OHslvauvU3SJoKDdXvjSepyCKLyfnSPkOe/eyrePJTTNYuClnr3wvDv3TxZPVu8AiMfl84IEUnWW7xQSElRNwelTNq+YMpGwZyI= ; Message-ID: <20041203054012.74385.qmail@web90003.mail.scd.yahoo.com> Received: from [203.199.182.34] by web90003.mail.scd.yahoo.com via HTTP; Thu, 02 Dec 2004 21:40:12 PST Date: Thu, 2 Dec 2004 21:40:12 -0800 (PST) From: ram mohan Subject: Contribute - Howto To: netdev@oss.sgi.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-archive-position: 12405 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: madhaviram123@yahoo.com Precedence: bulk X-list: netdev Hi, I am willing to contribute to the "networking side " of linux. I googled a bit and found that I should join the list and then I can go ahead. I would like to know. 1. What are the features currently being worked upon? 2. Are there any things-to-do lists maintained? 3. How are new features selected? How do I start?? Thanks. __________________________________ Do you Yahoo!? Jazz up your holiday email with celebrity designs. Learn more. http://celebrity.mail.yahoo.com From SRS0+348d0c150552644be866+467+infradead.org+hch@pentafluge.srs.infradead.org Fri Dec 3 02:34:05 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 02:34:11 -0800 (PST) Received: from pentafluge.infradead.org ([213.146.154.40]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3AY3Lv016496 for ; Fri, 3 Dec 2004 02:34:04 -0800 Received: from hch by pentafluge.infradead.org with local (Exim 4.42 #1 (Red Hat Linux)) id 1CaAkt-0002pc-CX; Fri, 03 Dec 2004 10:33:39 +0000 Date: Fri, 3 Dec 2004 10:33:39 +0000 From: Christoph Hellwig To: James Ketrenos Cc: Jeff Garzik , Netdev Subject: Re: Steps for netdev-2.6 inclusion? Message-ID: <20041203103339.GB10799@infradead.org> References: <41AE7143.80505@linux.intel.com> <41AEB3B8.2000406@pobox.com> <41AF7708.3030804@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <41AF7708.3030804@linux.intel.com> User-Agent: Mutt/1.4.1i X-SRS-Rewrite: SMTP reverse-path rewritten from by pentafluge.infradead.org See http://www.infradead.org/rpr.html X-archive-position: 12406 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: netdev On Thu, Dec 02, 2004 at 02:11:52PM -0600, James Ketrenos wrote: > Jeff Garzik wrote: > > >It's fairly easy, just email me and netdev the patch for inclusion, > >and it'll get reviewed. > > Should I break the patch into the three components (ipw2100, ipw2200, > and ieee80211) ? or just one huge patch? Not sure what you and others > would prefer. Please split it in three parts. And most importantly integrate your ieee80211 code with the hostap code in Jeff's queue, we really don't want two copies of it. > The firmware doesn't have to be downloaded from Sourceforge, but it does > need to exist on the system, just as iwconfig needs to exist if you want > to be able to configure your wireless card. The user can get the > firmware from Sourceforge, or have it installed by their distribution or > package management system, have it on their Knoppix CD, etc. The problem is again that the license for it is horrible multi page legaleese. Please change it to a simple license that allows completely free redistribution and modification of the binaries. From hadi@cyberus.ca Fri Dec 3 05:08:20 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 05:08:24 -0800 (PST) Received: from mx03.cybersurf.com (mx03.cybersurf.com [209.197.145.106]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3D8J71026716 for ; Fri, 3 Dec 2004 05:08:20 -0800 Received: from mail.cyberus.ca ([209.197.145.21]) by mx03.cybersurf.com with esmtp (Exim 4.30) id 1CaDAC-00085a-CW for netdev@oss.sgi.com; Fri, 03 Dec 2004 08:07:56 -0500 Received: from cpe0030ab124d2f-cm014500000962.cpe.net.cable.rogers.com ([24.103.99.32] helo=[10.0.0.9]) by mail.cyberus.ca with esmtp (Exim 4.20) id 1CaDA7-000392-Mu; Fri, 03 Dec 2004 08:07:51 -0500 Subject: Re: [E1000-devel] Transmission limit From: jamal Reply-To: hadi@cyberus.ca To: mellia@prezzemolo.polito.it Cc: Lennert Buytenhek , Harald Welte , P@draigBrady.com, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101994772.18491.16.camel@mellia.lipar.polito.it> References: <1101467291.24742.70.camel@mellia.lipar.polito.it> <41A73826.3000109@draigBrady.com> <1101483081.24742.174.camel@mellia.lipar.polito.it> <20041127092503.GA12592@sunbeam.de.gnumonks.org> <1101718412.14930.46.camel@verza.polito.it> <20041129145028.GC18788@xi.wantstofly.org> <1101804146.11111.23.camel@mellia.lipar.polito.it> <1101903944.1042.29.camel@jzny.localdomain> <1101994772.18491.16.camel@mellia.lipar.polito.it> Content-Type: text/plain Organization: jamalopolous Message-Id: <1102079268.1216.19.camel@jzny.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 Date: 03 Dec 2004 08:07:49 -0500 Content-Transfer-Encoding: 7bit X-archive-position: 12407 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hadi@cyberus.ca Precedence: bulk X-list: netdev On Thu, 2004-12-02 at 08:39, Marco Mellia wrote: > We'll be glad to spend some time trying this out. Please, we are not > very confortable with the linux bitkeeper maintenance method. Can we ask > you to provide us a patch to a standard kernel/driver (whatever you > prefer...)? Also a complete source sub-tree would be ok ;-) Would a -rcX patch be fine for you? 2.6.10-rc2; which means you willl take 2.6.9 patch it with the patch-2.6.10-rc2.gz from kernel.org/v2.6/testing directory then patch one more time with patch i give you. Let me know if you are uncomfortable with that as well. [Sorry, I am disk poor and my stupid ISP still charges $1/MB/month even in this age if i put it up at cyberus]. In the patch i give you i will include rx path improvement code that I got from David Morsberger; I "think" i have seen some improvements with it but i am not 100% sure. If you repeat the test where you drop the packet right after eth_type_trans() with this patch on, I would be very interested if you see any improvements. In any case, expect something from me this weekend or monday (big party this weekend ;->). cheers, jamal From hadi@cyberus.ca Fri Dec 3 05:25:20 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 05:25:24 -0800 (PST) Received: from mx03.cybersurf.com (mx03.cybersurf.com [209.197.145.106]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3DPJEI027489 for ; Fri, 3 Dec 2004 05:25:20 -0800 Received: from mail.cyberus.ca ([209.197.145.21]) by mx03.cybersurf.com with esmtp (Exim 4.30) id 1CaDQe-0006g5-G5 for netdev@oss.sgi.com; Fri, 03 Dec 2004 08:24:56 -0500 Received: from cpe0030ab124d2f-cm014500000962.cpe.net.cable.rogers.com ([24.103.99.32] helo=[10.0.0.9]) by mail.cyberus.ca with esmtp (Exim 4.20) id 1CaDQZ-0005d4-UJ; Fri, 03 Dec 2004 08:24:52 -0500 Subject: Re: [E1000-devel] Transmission limit From: jamal Reply-To: hadi@cyberus.ca To: sfeldma@pobox.com Cc: Lennert Buytenhek , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: <1101967983.4782.9.camel@localhost.localdomain> References: <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> Content-Type: text/plain Organization: jamalopolous Message-Id: <1102080289.1214.22.camel@jzny.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 Date: 03 Dec 2004 08:24:49 -0500 Content-Transfer-Encoding: 7bit X-archive-position: 12408 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hadi@cyberus.ca Precedence: bulk X-list: netdev On Thu, 2004-12-02 at 01:13, Scott Feldman wrote: > On Wed, 2004-12-01 at 13:35, Lennert Buytenhek wrote: > > Pretty graph attached. From ~220B packets or so it does wire speed, but > > there's still an odd drop in performance around 256B packets (which is > > also there without your patch.) From 350B packets or so, performance is > > identical with or without your patch (wire speed.) > > Seems this is helping PCI nics but not PCI-X. I was using PCI 32/33. > Can't explain the dip around 256B. > Interesting thought. I also saw improvements with my batching patch for PCI 32/32 but nothing noticeable in PCI-X 64/66. cheers, jamal From hadi@cyberus.ca Fri Dec 3 05:46:04 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 05:46:09 -0800 (PST) Received: from mx03.cybersurf.com (mx03.cybersurf.com [209.197.145.106]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3Dk4Lv028316 for ; Fri, 3 Dec 2004 05:46:04 -0800 Received: from mail.cyberus.ca ([209.197.145.21]) by mx03.cybersurf.com with esmtp (Exim 4.30) id 1CaDki-0002p2-SK for netdev@oss.sgi.com; Fri, 03 Dec 2004 08:45:40 -0500 Received: from cpe0030ab124d2f-cm014500000962.cpe.net.cable.rogers.com ([24.103.99.32] helo=[10.0.0.9]) by mail.cyberus.ca with esmtp (Exim 4.20) id 1CaDkf-00080P-Ad; Fri, 03 Dec 2004 08:45:37 -0500 Subject: Re: Contribute - Howto From: jamal Reply-To: hadi@cyberus.ca To: ram mohan Cc: netdev@oss.sgi.com In-Reply-To: <20041203054012.74385.qmail@web90003.mail.scd.yahoo.com> References: <20041203054012.74385.qmail@web90003.mail.scd.yahoo.com> Content-Type: text/plain Organization: jamalopolous Message-Id: <1102081534.1210.38.camel@jzny.localdomain> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.2 Date: 03 Dec 2004 08:45:34 -0500 Content-Transfer-Encoding: 7bit X-archive-position: 12409 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: hadi@cyberus.ca Precedence: bulk X-list: netdev Just join this list and listen to people complaining about bugs. Chase those bugs and fix them. Thats a good way to get hands dirty. Features are added based on technical merits and needs. cheers, jamal On Fri, 2004-12-03 at 00:40, ram mohan wrote: > Hi, > I am willing to contribute to the "networking side " > of linux. I googled a bit and found that I should join > the list and then I can go ahead. > I would like to know. > 1. What are the features currently being worked upon? > 2. Are there any things-to-do lists maintained? > 3. How are new features selected? > > How do I start?? > Thanks. > > > > __________________________________ > Do you Yahoo!? > Jazz up your holiday email with celebrity designs. Learn more. > http://celebrity.mail.yahoo.com > > From mludvig@suse.cz Fri Dec 3 09:43:39 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 09:43:46 -0800 (PST) Received: from mail.suse.cz (styx.suse.cz [82.119.242.94]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3HhcEH031372 for ; Fri, 3 Dec 2004 09:43:39 -0800 Received: from [10.20.1.72] (ozzy.suse.cz [10.20.1.72]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.suse.cz (SUSE CR ESMTP Mailer) with ESMTP id 1F244628164; Fri, 3 Dec 2004 18:43:16 +0100 (CET) Message-ID: <41B0A5B4.6060108@suse.cz> Date: Fri, 03 Dec 2004 18:43:16 +0100 From: Michal Ludvig Organization: SuSE CR, s.r.o. User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8a4) Gecko/20040927 X-Accept-Language: en MIME-Version: 1.0 To: Andrew Morton Cc: netdev@oss.sgi.com, Jan Kara Subject: [PATCH] rtnetlink & address family problem X-Enigmail-Version: 0.86.1.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: multipart/mixed; boundary="------------020005070601050006080808" X-archive-position: 12410 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: mludvig@suse.cz Precedence: bulk X-list: netdev This is a multi-part message in MIME format. --------------020005070601050006080808 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit Hi, running 'ip -6 addr flush dev eth0' on a kernel without IPv6 support flushes *all* addresses from the interface, even those IPv4 ones, because the unsupported protocol is substituted by PF_UNSPEC. IMHO it should better return with an error EAFNOSUPPORT. Attached patch fixes it. Please apply. BTW Credits to Jan Kara for discovering and analysing this bug. Michal Ludvig -- SUSE Labs mludvig@suse.cz (+420) 296.542.396 http://www.suse.cz Personal homepage http://www.logix.cz/michal --------------020005070601050006080808 Content-Type: text/plain; name="rtnetlink-family.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="rtnetlink-family.diff" # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/12/03 18:06:31+01:00 michal@logix.cz # Return EAFNOSUPPORT if requested operation on unsupported family. # # Signed-off-by: Michal Ludvig # # net/core/rtnetlink.c # 2004/12/03 18:05:49+01:00 michal@logix.cz +4 -2 # Return EAFNOSUPPORT if requested operation on unsupported family. # diff -Nru a/net/core/rtnetlink.c b/net/core/rtnetlink.c --- a/net/core/rtnetlink.c 2004-12-03 18:30:33 +01:00 +++ b/net/core/rtnetlink.c 2004-12-03 18:30:33 +01:00 @@ -477,8 +477,10 @@ } link_tab = rtnetlink_links[family]; - if (link_tab == NULL) - link_tab = rtnetlink_links[PF_UNSPEC]; + if (link_tab == NULL) { + *errp = -EAFNOSUPPORT; + return -1; + } link = &link_tab[type]; sz_idx = type>>2; --------------020005070601050006080808-- From cap@nsc.liu.se Fri Dec 3 11:02:23 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 11:02:30 -0800 (PST) Received: from papput.nsc.liu.se (ns2.nsc.liu.se [130.236.101.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3J2LSd001097 for ; Fri, 3 Dec 2004 11:02:22 -0800 Received: from mail.nsc.liu.se (mail.nsc.liu.se [130.236.101.49]) by papput.nsc.liu.se (Postfix) with ESMTP id 252E71C31F5 for ; Fri, 3 Dec 2004 20:02:00 +0100 (CET) Date: Fri, 3 Dec 2004 20:02:00 +0100 (CET) From: Peter Kjellstroem To: netdev@oss.sgi.com Subject: e1000>5.2.30 unstable with InterruptThrottleRate=0 Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12411 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cap@nsc.liu.se Precedence: bulk X-list: netdev Hello folks, Short version: 82547GI with ITR=0 on 2.4.28 (vanilla) and RHEL3u3 has problems (traffic grinds to a temporary halt under anything but trivila network traffic). kernel prints the following and resets the IF (many times): NETDEV WATCHDOG: eth0: transmit timed out More verbose version with background: I have a problem with e1000 being unstable when I run it with InterruptThrottleRate=0 (abbreviated ITR in the rest of this e-mail). I need to turn ITR off or set it so large that it behaves as off. The reason for having to turn it off is that I run MPI-applications (cluster stuff) and that happens to be largely latency bound. Latency with default e1000 is terrible, 250 us, with ITR=0 (where it works) the latency drops to 20-25 us. Enough of background. Up untill now I have allways been able to run with ITR=0 and intel gigabit has been very nice. Now, for some combinations of driver, chip and ITR setting it all falls apart. Affected chips (theory, 8254X, X>1 or anything faster then PCI33): 82547GI, 82546 (said to be affected, not verified by me) Unaffected chips: 82541 (rock solid no matter what driver or ITR) Linux-2.4.26 vanilla (smp, without NAPI with e1000 as module) is ok (82547, ITR=0, rock solid) Linux-2.4.28 vanilla (smp, without NAPI with e1000 as module) is BAD (82547 needs ITR<20000 for resonable stability) Linux-2.4.28 with e1000 from 2.4.26 but otherwise exactly as above is ok rock solid!!! Linux-2.4.21-20smp RHEL3 update 3 is BAD (known stable with default ITR (1?) but probably ok for <20000) Conclusions: something happened above e1000 version 5.2.30 (as in linux-2.4.26), RHEL has 5.2.52 and 2.4.28 has 5.4.11. Some more discussions on this subject has taken place on another list, see following thread if interested: http://lists.us.dell.com/pipermail/linux-poweredge/2004-November/023061.html Best Regards, Peter -- ------------------------------------------------------------ Peter Kjellstroem | E-mail: cap@nsc.liu.se National Supercomputer Centre | Sweden | http://www.nsc.liu.se From buytenh@wantstofly.org Fri Dec 3 12:57:30 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 12:57:36 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3KvSBn007253 for ; Fri, 3 Dec 2004 12:57:29 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id AF95B2B0F0; Fri, 3 Dec 2004 21:57:06 +0100 (MET) Date: Fri, 3 Dec 2004 21:57:06 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041203205706.GC9808@xi.wantstofly.org> References: <16807.20052.569125.686158@robur.slu.se> <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="98e8jtXdkpgskNou" Content-Disposition: inline In-Reply-To: <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> User-Agent: Mutt/1.4.1i X-archive-position: 12412 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev --98e8jtXdkpgskNou Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Nov 30, 2004 at 05:09:59PM -0800, Scott Feldman wrote: > Hey, turns out, I know some e1000 tricks that might help get the kpps > numbers up. > > My problem is I only have a P4 desktop system with a 82544 nic running > at PCI 32/33Mhz, so I can't play with the big boys. But, attached is a > rework of the Tx path to eliminate 1) Tx interrupts, and 2) Tx > descriptor write-backs. For me, I see a nice jump in kpps, but I'd like > others to try with their setups. We should be able to get to wire speed > with 60-byte packets. Attached is a graph of my numbers with and without your patch for: - An 82540 at PCI 32/33, idle 33MHz card on the same bus forcing it to 33MHz. - An 82541 at PCI 32/66. - An 82546 at PCI-X 64/100, NIC can do 133MHz but mobo only does 100MHz. All 'phi' tests were done on my box phi, a dual 2.4GHz Xeon on an Intel SE7505VB2 board (http://www.intel.com/design/servers/se7505vb2/). I've included Robert's 64/133 numbers ('sourcemage') on his dual 866MHz P3 for comparison. I didn't test all packet sizes up to 1500, just the first few hundred bytes for each. As before, the max # pps at 60B packets is strongly influenced by the per- packet overhead (which seems to be reduced by your patch for my machine quite a bit, also on 64/100, even though Robert sees no improvement on 64/133) while the slope of each curve appears to depend only on the speed of the bus the NIC is in. I.e. the 60B kpps number more-or-less determines the shape of the rest of the graph in each case. Bus speed is most likely also the reason why the 64/100 setup w/o your patch starts off slower than the 64/66 with your patch, but then eventually beats the 64/66 (around 140B packets) just before they both hit the GigE saturation point. There's no drop at 256B for the 64/100 setup like with the 32/* setups. Perhaps the drop at 256B is because of the PCI latency timer being set to 64 by default, and that causes the transfer on 32b to be broken up in 256-byte chunks? I'm not able to saturate gigabit on 32/33 with 1500B packets, while Jamal does. Another thing to look into. Also note that the 64/100 NIC has rather wobbly performance between 60B and ~160B bytes. This 'square wave pattern' is there both with and without your patch, perhaps something particular to the NIC. Its period appears to be 16 bytes, dropping down where packet_size mod 16 = 0, and then jumping up again a bit when packet_size mod 16 = 6. Odd. --L --98e8jtXdkpgskNou Content-Type: image/png Content-Disposition: attachment; filename="perf.png" Content-Transfer-Encoding: base64 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 --98e8jtXdkpgskNou-- From jos@xos037.xos.nl Fri Dec 3 15:26:08 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 15:26:14 -0800 (PST) Received: from simba.xos.nl (simba.xos.nl [212.26.207.226]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB3NQ6i3010934 for ; Fri, 3 Dec 2004 15:26:07 -0800 Received: from xos037.xos.nl (xos037.xos.nl [212.26.207.37]) by simba.xos.nl (8.12.8/8.12.8) with ESMTP id iB3NPdmA026687 for ; Sat, 4 Dec 2004 00:25:40 +0100 Received: from xos037.xos.nl (jos@localhost) by xos037.xos.nl (8.11.0/8.11.0) with ESMTP id iB3NPdG04693 for ; Sat, 4 Dec 2004 00:25:39 +0100 Message-Id: <200412032325.iB3NPdG04693@xos037.xos.nl> To: netdev@oss.sgi.com Subject: e1000 driver problem with Intel Pro/1000 MT adapter Date: Sat, 04 Dec 2004 00:25:39 +0100 From: Jos Vos X-archive-position: 12413 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jos@xos.nl Precedence: bulk X-list: netdev Hello, I have a problem with an Intel Pro/1000 MT 4-port card in a Supermicro (non-HT) Pentium 4 system using RHEL3 (2.4.21 kernel "the RH way") with the e1000 driver (I tried both the version supplied by RH and the newest 5.5.4 driver): (1) With a non-SMP kernel, the whole system freezes instantaneously when configuring one of in the four interfaces. (2) After disabling the USB controller, all interfaces can be configured, but only one of them actually works. Via the others, I can sent packets, but do not receive incoming packages (possible IRQ problem). (3) Using a SMP-kernel, two of the four interfaces can be configured and work correctly. For the other two ports, ifconfig gives the error "SIOCSIFFLAGS: Invalid argument". Stracing ifconfig says: socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 ... ioctl(4, SIOCSIFADDR, 0xbfffc210) = 0 ioctl(4, SIOCGIFFLAGS, 0xbfffc140) = 0 ioctl(4, SIOCSIFFLAGS, 0xbfffc140) = -1 EINVAL (Invalid argument) Stracing ifconfig for an interface that works shows similar lines, but then the second SIOCSIFFLAGS ioctl succeeds. Supermicro suggest to change the non-HT P4 CPU by a HT one, but I personally do not believe that this will change the situation of the SMP kernel as described above. Any suggestions how to solve this are welcome. I can provide more information if needed. Thanks, -- -- Jos Vos -- X/OS Experts in Open Systems BV | Phone: +31 20 6938364 -- Amsterdam, The Netherlands | Fax: +31 20 6948204 From romieu@fr.zoreil.com Fri Dec 3 17:02:39 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 17:02:46 -0800 (PST) Received: from fr.zoreil.com (electric-eye.fr.zoreil.com [213.41.134.224]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB412cqv017119 for ; Fri, 3 Dec 2004 17:02:39 -0800 Received: from electric-eye.fr.zoreil.com (localhost.localdomain [127.0.0.1]) by fr.zoreil.com (8.12.10/8.12.1) with ESMTP id iB40xlvr028575; Sat, 4 Dec 2004 01:59:47 +0100 Received: (from romieu@localhost) by electric-eye.fr.zoreil.com (8.12.10/8.12.10/Submit) id iB40xlj1028574; Sat, 4 Dec 2004 01:59:47 +0100 Date: Sat, 4 Dec 2004 01:59:46 +0100 From: Francois Romieu To: Jos Vos Cc: netdev@oss.sgi.com Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter Message-ID: <20041204005946.GA26654@electric-eye.fr.zoreil.com> References: <200412032325.iB3NPdG04693@xos037.xos.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200412032325.iB3NPdG04693@xos037.xos.nl> User-Agent: Mutt/1.4.1i X-Organisation: Land of Sunshine Inc. X-archive-position: 12414 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: romieu@fr.zoreil.com Precedence: bulk X-list: netdev Jos Vos : [misbehaving multi port e1000] > Any suggestions how to solve this are welcome. I can provide more > information if needed. The error code for the ioctl most probably comes through e1000_open -> e1000_up -> request_irq That + (2) + SMP suggests an irq routing issue due to a broken acpi table ("suggests"). I would compile a (monolithic) recent 2.6.x to see its log and give a look at http://acpi.sourceforge.net/dsdt/index.php (once the ticket is opened at http://bugzilla.redhat.com of course :o) ) -- Ueimor From jos@xos037.xos.nl Fri Dec 3 17:15:18 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 17:15:22 -0800 (PST) Received: from simba.xos.nl (simba.xos.nl [212.26.207.226]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB41FHeR017711 for ; Fri, 3 Dec 2004 17:15:18 -0800 Received: from xos037.xos.nl (xos037.xos.nl [212.26.207.37]) by simba.xos.nl (8.12.8/8.12.8) with ESMTP id iB41EimA027147; Sat, 4 Dec 2004 02:14:44 +0100 Received: (from jos@localhost) by xos037.xos.nl (8.11.0/8.11.0) id iB41EiN05069; Sat, 4 Dec 2004 02:14:44 +0100 Date: Sat, 4 Dec 2004 02:14:44 +0100 From: Jos Vos To: Francois Romieu Cc: netdev@oss.sgi.com Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter Message-ID: <20041204021444.A5058@xos037.xos.nl> References: <200412032325.iB3NPdG04693@xos037.xos.nl> <20041204005946.GA26654@electric-eye.fr.zoreil.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20041204005946.GA26654@electric-eye.fr.zoreil.com>; from romieu@fr.zoreil.com on Sat, Dec 04, 2004 at 01:59:46AM +0100 X-Organization: X/OS Experts in Open Systems BV, Amsterdam, The Netherlands X-archive-position: 12415 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jos@xos.nl Precedence: bulk X-list: netdev On Sat, Dec 04, 2004 at 01:59:46AM +0100, Francois Romieu wrote: > That + (2) + SMP suggests an irq routing issue due to a broken acpi > table ("suggests"). IIRC ACPI is disabled in the BIOS (not sure), but I'm using a RHEL3 2.4.21 kernel that does not support ACPI at all (due to the RH patches rebuilding the kernel with ACPI enbabled does not work anymore)! > I would compile a (monolithic) recent 2.6.x to see its log and > give a look at http://acpi.sourceforge.net/dsdt/index.php (once the > ticket is opened at http://bugzilla.redhat.com of course :o) ) Well, I could do that, but the idea was to use this in a RHEL3 system, so ... -- -- Jos Vos -- X/OS Experts in Open Systems BV | Phone: +31 20 6938364 -- Amsterdam, The Netherlands | Fax: +31 20 6948204 From shemminger@osdl.org Fri Dec 3 21:43:22 2004 Received: with ECARTIS (v1.0.0; list netdev); Fri, 03 Dec 2004 21:43:27 -0800 (PST) Received: from fire-1.osdl.org (fire.osdl.org [65.172.181.4]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB45hLrg027212 for ; Fri, 3 Dec 2004 21:43:21 -0800 Received: from [192.168.0.106] (063-170-215-071.dslnorthwest.net [63.170.215.71]) (authenticated bits=0) by fire-1.osdl.org (8.12.8/8.12.8) with ESMTP id iB45goQ3022359 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO); Fri, 3 Dec 2004 21:42:51 -0800 Message-ID: <41B14E57.5080803@osdl.org> Date: Fri, 03 Dec 2004 21:42:47 -0800 From: Stephen Hemminger User-Agent: Mozilla Thunderbird 0.8 (Windows/20040913) X-Accept-Language: en-us, en MIME-Version: 1.0 To: "David S. Miller" CC: michael.vittrup.larsen@ericsson.com, netdev@oss.sgi.com Subject: Re: [PATCH] tcp: efficient port randomisation (revised) References: <20041027092531.78fe438c@guest-251-240.pdx.osdl.net> <200411020854.44745.michael.vittrup.larsen@ericsson.com> <20041104100104.570e67cd@dxpl.pdx.osdl.net> <200411051103.59032.michael.vittrup.larsen@ericsson.com> <20041117153025.160eaa04@zqx3.pdx.osdl.net> <20041130214643.7b72300e.davem@davemloft.net> <20041201152446.3a0d5ce3@dxpl.pdx.osdl.net> <20041201204622.7b760400.davem@davemloft.net> <20041202134930.132d7bd8@dxpl.pdx.osdl.net> <20041202135252.04e64f51.davem@davemloft.net> In-Reply-To: <20041202135252.04e64f51.davem@davemloft.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-MIMEDefang-Filter: osdl$Revision: 1.96 $ X-Scanned-By: MIMEDefang 2.36 X-archive-position: 12416 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: shemminger@osdl.org Precedence: bulk X-list: netdev If I special case to handle loopback, and get rid of the portalloc lock, it comes out much better. These numbers are on the 800Mhz PIII SMP, on a fast box like the dual Opeteron's it makes no difference (always 30us). Before TCP connection latency mean 79.9 std 10.55 *Local* Communication latencies in microseconds - smaller is better ------------------------------------------------------------------- Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCP ctxsw UNIX UDP TCP conn --------- ------------- ----- ----- ---- ----- ----- ----- ----- ---- stp2-001 Linux 2.6.10- 8.270 38.6 24.3 61.6 48.5 45.9 76.6 74.6 stp2-001 Linux 2.6.10- 8.170 43.5 24.5 58.0 54.8 45.6 63.4 74.7 stp2-001 Linux 2.6.10- 2.740 50.6 29.9 40.3 48.3 59.8 75.1 101. stp2-001 Linux 2.6.10- 8.140 46.6 29.7 57.6 48.8 45.5 72.0 74.4 stp2-001 Linux 2.6.10- 2.690 47.1 26.3 40.8 48.9 45.5 75.4 74.8 After TCP connection latency mean 73.8 std 0.55 *Local* Communication latencies in microseconds - smaller is better ------------------------------------------------------------------- Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCP ctxsw UNIX UDP TCP conn --------- ------------- ----- ----- ---- ----- ----- ----- ----- ---- stp2-001 Linux 2.6.10- 8.260 38.1 25.7 63.3 48.1 66.6 75.4 74.9 stp2-001 Linux 2.6.10- 8.090 46.2 26.0 63.4 55.5 45.9 63.6 73.5 stp2-001 Linux 2.6.10- 8.210 39.0 21.2 63.1 55.4 58.8 63.8 73.5 stp2-001 Linux 2.6.10- 2.850 46.5 26.0 64.8 54.6 45.5 74.0 73.6 stp2-001 Linux 2.6.10- 8.200 42.9 21.5 64.9 55.6 62.4 64.1 73.5 From buytenh@wantstofly.org Sat Dec 4 02:36:49 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 02:36:55 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB4Aam16004964 for ; Sat, 4 Dec 2004 02:36:49 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 7FDF52B0F2; Sat, 4 Dec 2004 11:36:26 +0100 (MET) Date: Sat, 4 Dec 2004 11:36:26 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: [E1000-devel] Transmission limit Message-ID: <20041204103626.GA17872@xi.wantstofly.org> References: <1101484740.24742.213.camel@mellia.lipar.polito.it> <41A76085.7000105@draigBrady.com> <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041203205706.GC9808@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041203205706.GC9808@xi.wantstofly.org> User-Agent: Mutt/1.4.1i X-archive-position: 12417 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Fri, Dec 03, 2004 at 09:57:06PM +0100, Lennert Buytenhek wrote: > > My problem is I only have a P4 desktop system with a 82544 nic running > > at PCI 32/33Mhz, so I can't play with the big boys. But, attached is a > > rework of the Tx path to eliminate 1) Tx interrupts, and 2) Tx > > descriptor write-backs. For me, I see a nice jump in kpps, but I'd like > > others to try with their setups. We should be able to get to wire speed > > with 60-byte packets. > > Attached is a graph of my numbers with and without your patch for: > - An 82540 at PCI 32/33, idle 33MHz card on the same bus forcing it to 33MHz. > - An 82541 at PCI 32/66. > - An 82546 at PCI-X 64/100, NIC can do 133MHz but mobo only does 100MHz. When extrapolating these numbers to the 0-byte packet case (which then tells you the per-packet overhead), I get the following approximate numbers: case overhead phi-32-33-82540-2.6.9 1.86 us phi-32-66-82541-2.6.9 1.41 us phi-64-100-82546-2.6.9 1.45 us phi-32-33-82540-2.6.9-feldman 1.48 us phi-32-66-82541-2.6.9-feldman 1.13 us phi-64-100-82546-2.6.9-feldman 1.25 us Note that this figure doesn't differ all that much between the different bus widths/speeds. In any case, if I ever want to get more than ~880kpps on this hardware, there's no other way than to make this overhead go down. For saturating 1Gb/s with 60B packets on 64/100, the overhead can't be more than ~0.59 us per packet or you lose. --L From romieu@fr.zoreil.com Sat Dec 4 04:06:39 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 04:06:51 -0800 (PST) Received: from fr.zoreil.com (electric-eye.fr.zoreil.com [213.41.134.224]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB4C6cBn011544 for ; Sat, 4 Dec 2004 04:06:39 -0800 Received: from electric-eye.fr.zoreil.com (localhost.localdomain [127.0.0.1]) by fr.zoreil.com (8.12.10/8.12.1) with ESMTP id iB4C3Svr001481; Sat, 4 Dec 2004 13:03:29 +0100 Received: (from romieu@localhost) by electric-eye.fr.zoreil.com (8.12.10/8.12.10/Submit) id iB4C3SUq001480; Sat, 4 Dec 2004 13:03:28 +0100 Date: Sat, 4 Dec 2004 13:03:28 +0100 From: Francois Romieu To: Jos Vos Cc: netdev@oss.sgi.com Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter Message-ID: <20041204120328.GA1191@electric-eye.fr.zoreil.com> References: <200412032325.iB3NPdG04693@xos037.xos.nl> <20041204005946.GA26654@electric-eye.fr.zoreil.com> <20041204021444.A5058@xos037.xos.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041204021444.A5058@xos037.xos.nl> User-Agent: Mutt/1.4.1i X-Organisation: Land of Sunshine Inc. X-archive-position: 12418 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: romieu@fr.zoreil.com Precedence: bulk X-list: netdev Jos Vos : [...] > Well, I could do that, but the idea was to use this in a RHEL3 > system, so ... 1 - Imho people at RedHat/wherever need more details (chipset, mobo, dmesg, lspci -vx, 2.4.21 savor ?). 2 - Testing recent 2.6.x will provide a different datapoint and a wider review: a few people use e1000 for interested things here but they do not necessarily have the resources to help with a specific vendor released kernel. The vendor can use the datapoint though. 3 - Comparing lspci and dmesg output for the different failure may give an hint. -- Ueimor From jos@xos037.xos.nl Sat Dec 4 09:20:48 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 09:20:55 -0800 (PST) Received: from simba.xos.nl (simba.xos.nl [212.26.207.226]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB4HKkrw025199 for ; Sat, 4 Dec 2004 09:20:47 -0800 Received: from xos037.xos.nl (xos037.xos.nl [212.26.207.37]) by simba.xos.nl (8.12.8/8.12.8) with ESMTP id iB4HKDmA030416; Sat, 4 Dec 2004 18:20:13 +0100 Received: (from jos@localhost) by xos037.xos.nl (8.11.0/8.11.0) id iB4HKDX08286; Sat, 4 Dec 2004 18:20:13 +0100 Date: Sat, 4 Dec 2004 18:20:13 +0100 From: Jos Vos To: Francois Romieu Cc: netdev@oss.sgi.com Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter Message-ID: <20041204182013.A8246@xos037.xos.nl> References: <200412032325.iB3NPdG04693@xos037.xos.nl> <20041204005946.GA26654@electric-eye.fr.zoreil.com> <20041204021444.A5058@xos037.xos.nl> <20041204120328.GA1191@electric-eye.fr.zoreil.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MGYHOYXEY6WxJCY8" Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20041204120328.GA1191@electric-eye.fr.zoreil.com>; from romieu@fr.zoreil.com on Sat, Dec 04, 2004 at 01:03:28PM +0100 X-Organization: X/OS Experts in Open Systems BV, Amsterdam, The Netherlands X-archive-position: 12419 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: jos@xos.nl Precedence: bulk X-list: netdev --MGYHOYXEY6WxJCY8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sat, Dec 04, 2004 at 01:03:28PM +0100, Francois Romieu wrote: > 1 - Imho people at RedHat/wherever need more details (chipset, mobo, > dmesg, lspci -vx, 2.4.21 savor ?). Mainboard: Supermicro P4SCT+ Output of lspci -vx: attached Red Hat kernel: 2.4.21-20.EL > 2 - Testing recent 2.6.x will provide a different datapoint and a wider > review: a few people use e1000 for interested things here but they > do not necessarily have the resources to help with a specific vendor > released kernel. The vendor can use the datapoint though. Yes, ok, I might install RHEL4 beta or Fedora Core 3 on it next week and see how that works. -- -- Jos Vos -- X/OS Experts in Open Systems BV | Phone: +31 20 6938364 -- Amsterdam, The Netherlands | Fax: +31 20 6948204 --MGYHOYXEY6WxJCY8 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="lspci.txt" 00:00.0 Host bridge: Intel Corp. 82875P Memory Controller Hub (rev 02) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, fast devsel, latency 0 Memory at f0000000 (32-bit, prefetchable) [size=128M] Capabilities: [e4] #09 [3106] 00: 86 80 78 25 06 01 90 20 02 00 00 06 00 00 00 00 10: 08 00 00 f0 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 e4 00 00 00 00 00 00 00 00 00 00 00 00:03.0 PCI bridge: Intel Corp. 82875P Processor to PCI to CSA Bridge (rev 02) (prog-if 00 [Normal decode]) Flags: bus master, 66Mhz, fast devsel, latency 32 Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 I/O behind bridge: 00009000-00009fff Memory behind bridge: fb200000-fb2fffff 00: 86 80 7b 25 07 01 a0 00 02 00 04 06 00 20 01 00 10: 00 00 00 00 00 00 00 00 00 01 01 00 90 90 a0 22 20: 20 fb 20 fb f0 ff 00 00 00 00 00 00 00 00 00 00 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00:1c.0 PCI bridge: Intel Corp. 6300ESB 64-bit PCI-X Bridge (rev 02) (prog-if 00 [Normal decode]) Flags: bus master, 66Mhz, fast devsel, latency 32 Bus: primary=00, secondary=02, subordinate=03, sec-latency=64 I/O behind bridge: 0000a000-0000afff Memory behind bridge: fb000000-fb1fffff Capabilities: [50] PCI-X non-bridge device. 00: 86 80 ae 25 07 01 30 80 02 00 04 06 10 20 01 00 10: 00 00 00 00 00 00 00 00 00 02 03 40 a0 a0 a0 22 20: 00 fb 10 fb f1 ff 01 00 00 00 00 00 00 00 00 00 30: 00 00 00 00 50 00 00 00 00 00 00 00 00 00 06 00 00:1d.0 USB Controller: Intel Corp. 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI]) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, medium devsel, latency 0, IRQ 16 I/O ports at c400 [size=32] 00: 86 80 a9 25 05 00 80 02 02 00 03 0c 00 00 80 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 c4 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00 00:1d.1 USB Controller: Intel Corp. 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI]) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, medium devsel, latency 0, IRQ 19 I/O ports at c000 [size=32] 00: 86 80 aa 25 05 00 80 02 02 00 03 0c 00 00 00 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 c0 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 05 02 00 00 00:1d.4 System peripheral: Intel Corp. 6300ESB Watchdog Timer (rev 02) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: medium devsel Memory at fb301000 (32-bit, non-prefetchable) [size=16] 00: 86 80 ab 25 02 00 80 02 02 00 80 08 00 00 00 00 10: 00 10 30 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:1d.5 PIC: Intel Corp. 6300ESB I/O Advanced Programmable Interrupt Controller (rev 02) (prog-if 20 [IO(X)-APIC]) Subsystem: Intel Corp. 6300ESB I/O Advanced Programmable Interrupt Controller Flags: bus master, fast devsel, latency 0 Capabilities: [50] PCI-X non-bridge device. 00: 86 80 ac 25 06 00 10 00 02 20 00 08 00 00 00 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 ac 25 30: 00 00 00 00 50 00 00 00 00 00 00 00 ff 00 00 00 00:1d.7 USB Controller: Intel Corp. 6300ESB USB2 Enhanced Host Controller (rev 02) (prog-if 20 [EHCI]) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, medium devsel, latency 0, IRQ 23 Memory at fb300000 (32-bit, non-prefetchable) [size=1K] Capabilities: [50] Power Management version 2 00: 86 80 ad 25 06 00 90 02 02 20 03 0c 00 00 00 00 10: 00 00 30 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 04 00 00 00:1e.0 PCI bridge: Intel Corp. 82801BA/CA/DB/EB/ER Hub interface to PCI Bridge (rev 0a) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=00, secondary=04, subordinate=04, sec-latency=32 I/O behind bridge: 0000b000-0000bfff Memory behind bridge: f8000000-faffffff 00: 86 80 4e 24 07 01 80 00 0a 00 04 06 00 00 01 00 10: 00 00 00 00 00 00 00 00 00 04 04 20 b0 b0 80 22 20: 00 f8 f0 fa f0 ff 00 00 00 00 00 00 00 00 00 00 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 00 00:1f.0 ISA bridge: Intel Corp. 6300ESB LPC Interface Controller (rev 02) Flags: bus master, medium devsel, latency 0 00: 86 80 a1 25 0f 00 80 02 02 00 01 06 00 00 80 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:1f.1 IDE interface: Intel Corp. 6300ESB PATA Storage Controller (rev 02) (prog-if 8a [Master SecP PriP]) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, medium devsel, latency 0, IRQ 18 I/O ports at I/O ports at I/O ports at I/O ports at I/O ports at f000 [size=16] Memory at 1ff00000 (32-bit, non-prefetchable) [size=1K] 00: 86 80 a2 25 07 00 88 02 02 8a 01 01 00 00 00 00 10: 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 20: 01 f0 00 00 00 00 f0 1f 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00:1f.2 IDE interface: Intel Corp. 6300ESB SATA Storage Controller (rev 02) (prog-if 8f [Master SecP SecO PriP PriO]) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: bus master, 66Mhz, medium devsel, latency 0, IRQ 18 I/O ports at c800 [size=8] I/O ports at cc00 [size=4] I/O ports at d000 [size=8] I/O ports at d400 [size=4] I/O ports at d800 [size=16] 00: 86 80 a3 25 05 00 a0 02 02 8f 01 01 00 00 00 00 10: 01 c8 00 00 01 cc 00 00 01 d0 00 00 01 d4 00 00 20: 01 d8 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 00 00 00:1f.3 SMBus: Intel Corp. 6300ESB SMBus Controller (rev 02) Subsystem: Super Micro Computer Inc: Unknown device 5180 Flags: medium devsel, IRQ 17 I/O ports at 0500 [size=32] 00: 86 80 a4 25 01 00 80 02 02 00 05 0c 00 00 00 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 05 00 00 00 00 00 00 00 00 00 00 d9 15 80 51 30: 00 00 00 00 00 00 00 00 00 00 00 00 09 02 00 00 01:01.0 Ethernet controller: Intel Corp. 82547GI Gigabit Ethernet Controller Subsystem: Intel Corp. PRO/1000 CT Network Connection Flags: bus master, 66Mhz, medium devsel, latency 0, IRQ 18 Memory at fb200000 (32-bit, non-prefetchable) [size=128K] I/O ports at 9000 [size=32] Capabilities: [dc] Power Management version 2 00: 86 80 75 10 07 00 38 02 00 00 00 02 08 00 00 00 10: 00 00 20 fb 00 00 00 00 01 90 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 75 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 0a 01 ff 00 02:01.0 PCI bridge: IBM PCI-X to PCI-X Bridge (rev 02) (prog-if 00 [Normal decode]) Flags: bus master, 66Mhz, medium devsel, latency 32 Bus: primary=02, secondary=03, subordinate=03, sec-latency=32 I/O behind bridge: 0000a000-0000afff Memory behind bridge: fb000000-fb0fffff Capabilities: [80] PCI-X non-bridge device. Capabilities: [90] Power Management version 2 00: 14 10 a7 01 07 01 30 02 02 00 04 06 08 20 01 00 10: 00 00 00 00 00 00 00 00 02 03 03 20 a1 a1 20 22 20: 00 fb 00 fb f1 ff 01 00 00 00 00 00 00 00 00 00 30: 00 00 00 00 80 00 00 00 00 00 00 00 ff 00 06 00 02:04.0 SCSI storage controller: Marvell Technology Group Ltd. MV88SX5041 4-port SATA I PCI-X Controller (rev 03) Subsystem: Marvell Technology Group Ltd. MV88SX5041 4-port SATA I PCI-X Controller Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 27 Memory at fb100000 (64-bit, non-prefetchable) [size=512K] Capabilities: [40] Power Management version 2 Capabilities: [50] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- Capabilities: [60] PCI-X non-bridge device. 00: ab 11 41 50 07 00 b0 02 03 00 00 01 08 20 00 00 10: 04 00 10 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 ab 11 41 50 30: 00 00 00 00 40 00 00 00 00 00 00 00 09 01 00 00 03:04.0 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (rev 01) Subsystem: Intel Corp. PRO/1000 MT Quad Port Server Adapter Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 267 Memory at fb000000 (64-bit, non-prefetchable) [size=128K] I/O ports at a000 [size=64] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device. Capabilities: [f0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- 00: 86 80 1d 10 07 00 30 02 01 00 00 02 08 20 80 00 10: 04 00 00 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 a0 00 00 00 00 00 00 00 00 00 00 86 80 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 0b 01 ff 00 03:04.1 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (rev 01) Subsystem: Intel Corp. PRO/1000 MT Quad Port Server Adapter Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 267 Memory at fb020000 (64-bit, non-prefetchable) [size=128K] I/O ports at a400 [size=64] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device. Capabilities: [f0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- 00: 86 80 1d 10 07 00 30 02 01 00 00 02 08 20 80 00 10: 04 00 02 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 a4 00 00 00 00 00 00 00 00 00 00 86 80 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 09 02 ff 00 03:06.0 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (rev 01) Subsystem: Intel Corp. PRO/1000 MT Quad Port Server Adapter Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 26 Memory at fb040000 (64-bit, non-prefetchable) [size=128K] I/O ports at a800 [size=64] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device. Capabilities: [f0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- 00: 86 80 1d 10 07 00 30 02 01 00 00 02 08 20 80 00 10: 04 00 04 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 a8 00 00 00 00 00 00 00 00 00 00 86 80 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 0a 01 ff 00 03:06.1 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (rev 01) Subsystem: Intel Corp. PRO/1000 MT Quad Port Server Adapter Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 27 Memory at fb060000 (64-bit, non-prefetchable) [size=128K] I/O ports at ac00 [size=64] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device. Capabilities: [f0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- 00: 86 80 1d 10 07 00 30 02 01 00 00 02 08 20 80 00 10: 04 00 06 fb 00 00 00 00 00 00 00 00 00 00 00 00 20: 01 ac 00 00 00 00 00 00 00 00 00 00 86 80 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 05 02 ff 00 04:09.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27) (prog-if 00 [VGA]) Subsystem: ATI Technologies Inc Rage XL Flags: bus master, stepping, medium devsel, latency 32, IRQ 17 Memory at f8000000 (32-bit, non-prefetchable) [size=16M] I/O ports at b000 [size=256] Memory at fa020000 (32-bit, non-prefetchable) [size=4K] Expansion ROM at [disabled] [size=128K] Capabilities: [5c] Power Management version 2 00: 02 10 52 47 87 00 90 02 27 00 00 03 08 20 00 00 10: 00 00 00 f8 01 b0 00 00 00 00 02 fa 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 02 10 08 80 30: 00 00 00 00 5c 00 00 00 00 00 00 00 09 01 08 00 04:0a.0 Ethernet controller: Intel Corp. 82541GI/PI Gigabit Ethernet Controller Subsystem: Intel Corp. PRO/1000 MT Network Connection Flags: bus master, 66Mhz, medium devsel, latency 32, IRQ 19 Memory at fa000000 (32-bit, non-prefetchable) [size=128K] I/O ports at b400 [size=64] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device. 00: 86 80 76 10 07 00 30 02 00 00 00 02 08 20 00 00 10: 00 00 00 fa 00 00 00 00 01 b4 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 76 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 05 01 ff 00 --MGYHOYXEY6WxJCY8-- From lanxue@soe.ucsc.edu Sat Dec 4 14:05:22 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 14:05:26 -0800 (PST) Received: from services.cse.ucsc.edu (services.cse.ucsc.edu [128.114.48.10]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB4M5Muk002322 for ; Sat, 4 Dec 2004 14:05:22 -0800 Received: from moondance.cse.ucsc.edu (moondance.cse.ucsc.edu [128.114.49.1]) by services.cse.ucsc.edu (8.13.1/8.13.1) with ESMTP id iB4M50An021326; Sat, 4 Dec 2004 14:05:00 -0800 (PST) Date: Sat, 4 Dec 2004 14:05:00 -0800 (PST) From: Lan Xue X-X-Sender: lanxue@moondance.cse.ucsc.edu To: netdev@oss.sgi.com cc: kernerl mail Subject: global memory access In-Reply-To: <20041202094433.39132.qmail@web41411.mail.yahoo.com> Message-ID: References: <20041202094433.39132.qmail@web41411.mail.yahoo.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12420 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: lanxue@soe.ucsc.edu Precedence: bulk X-list: netdev Hi, I was wondering how a user-level program can share a writable memory buffer with the kernel. The memory can either belongs to the kernel space or the user space, but both kernel module and user program should be able to access(read, write) it. Any hint? Many thanks, Lan From sfeldma@pobox.com Sat Dec 4 15:57:37 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 15:57:41 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB4Nvald005121 for ; Sat, 4 Dec 2004 15:57:37 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id A75DA2FB558; Sat, 4 Dec 2004 18:57:14 -0500 (EST) Received: from [192.168.0.19] (wbar2.sea1-4-5-062-153.sea1.dsl-verizon.net [4.5.62.153]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 1ABA22FAE14; Sat, 4 Dec 2004 18:57:12 -0500 (EST) Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter From: Scott Feldman Reply-To: sfeldma@pobox.com To: Jos Vos Cc: netdev@oss.sgi.com In-Reply-To: <200412032325.iB3NPdG04693@xos037.xos.nl> References: <200412032325.iB3NPdG04693@xos037.xos.nl> Content-Type: text/plain Message-Id: <1102204801.3343.68.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Sat, 04 Dec 2004 16:00:01 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12421 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Fri, 2004-12-03 at 15:25, Jos Vos wrote: > I have a problem with an Intel Pro/1000 MT 4-port card in a Supermicro > (non-HT) Pentium 4 system using RHEL3 (2.4.21 kernel "the RH way") with > the e1000 driver (I tried both the version supplied by RH and the > newest 5.5.4 driver): The 4-port card has two 82546 dual-port controllers behind a PCI-X bridge. Your symptoms suggest interrupt routing didn't get setup correctly for the controllers behind the bridge. I've seen more than one case where the BIOS gets this wrong. The fix is to upgrade to the latest BIOS. Hopefully this is the fix for you. :-) -scott From sfeldma@pobox.com Sat Dec 4 19:18:22 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 19:18:31 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB53ILpo012747 for ; Sat, 4 Dec 2004 19:18:22 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 619812FA1D7; Sat, 4 Dec 2004 22:17:59 -0500 (EST) Received: from [192.168.0.19] (wbar2.sea1-4-5-062-153.sea1.dsl-verizon.net [4.5.62.153]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 97E8E2F91AB; Sat, 4 Dec 2004 22:17:56 -0500 (EST) Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 From: Scott Feldman Reply-To: sfeldma@pobox.com To: Peter Kjellstroem Cc: netdev@oss.sgi.com In-Reply-To: References: Content-Type: text/plain Message-Id: <1102216844.3343.84.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Sat, 04 Dec 2004 19:20:44 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12422 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Fri, 2004-12-03 at 11:02, Peter Kjellstroem wrote: > Short version: 82547GI with ITR=0 on 2.4.28 (vanilla) and RHEL3u3 has > problems (traffic grinds to a temporary halt under anything but trivila > network traffic). kernel prints the following and resets the IF (many > times): > > NETDEV WATCHDOG: eth0: transmit timed out Dude! You're out of luck! >From the README: CAUTION: If you are using the Intel PRO/1000 CT Network Connection (controller 82547), setting InterruptThrottleRate to a value greater than 75,000, may hang (stop transmitting) adapters under certain network conditions. If this occurs a NETDEV WATCHDOG message is logged in the system event log. In addition, the controller is automatically reset, restoring the network connection. To eliminate the potential for the hang, ensure that InterruptThrottleRate is set no greater than 75,000 and is not set to 0. I was running into the same thing with 82547EI setting ITR=0, and then I remembered that this part is buggy when ITR=0. The bug is due to 82547 messing up the order of interrupt assertion and de-assertion on the CSA bus. If you want to do MPI on this system, you'll need to use a non-zero ITR or plug in an add-in card into one of the PCI slots and use the add-in card. The problem is, these slots are probably 32-bit/33Mhz, so you're not going to get the same maximum Mbps that you'll get with 82547 using the CSA bus. 82547 will not be a good choice for MPI. Sorry. > Affected chips (theory, 8254X, X>1 or anything faster then PCI33): > 82547GI, 82546 (said to be affected, not verified by me) 82546 should be fine with ITR=0. > http://lists.us.dell.com/pipermail/linux-poweredge/2004-November/023061.html You might want to forward this info to that thread. -scott From paul@clubi.ie Sat Dec 4 22:26:20 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 22:26:27 -0800 (PST) Received: from hibernia.jakma.org (hibernia.jakma.org [212.17.55.49]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB56QDdM020079 for ; Sat, 4 Dec 2004 22:26:16 -0800 Received: from hibernia.jakma.org (IDENT:paul@hibernia.jakma.org [192.168.0.3]) by hibernia.jakma.org (8.12.11/8.12.11) with ESMTP id iB56PWrc009633; Sun, 5 Dec 2004 06:25:35 GMT Date: Sun, 5 Dec 2004 06:25:31 +0000 (GMT) From: Paul Jakma X-X-Sender: paul@hibernia.jakma.org To: Thomas Spatzier cc: jgarzik@pobox.com, linux-kernel@vger.kernel.org, netdev@oss.sgi.com Subject: Re: [patch 4/10] s390: network driver. In-Reply-To: Message-ID: References: Mail-Followup-To: paul@hibernia.jakma.org X-NSA: arafat al aqsar jihad musharef jet-A1 avgas ammonium qran inshallah allah al-akbar martyr iraq saddam hammas hisballah rabin ayatollah korea vietnam revolt mustard gas british airways washington MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Virus-Scanned: ClamAV 0.80/614/Wed Dec 1 15:44:43 2004 clamav-milter version 0.80j on hibernia.jakma.org X-Virus-Status: Clean X-archive-position: 12423 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: paul@clubi.ie Precedence: bulk X-list: netdev On Tue, 30 Nov 2004, Thomas Spatzier wrote: > Ok, then some logic could be implemented in userland to take > appropriate actions. It must be ensured that zebra handles the > netlink notification fast enough. AIUI, netlink is not synchronous, it most definitely makes no reliability guarantees (and at the moment, zebra isnt terribly efficient at reading netlink, large numbers of interfaces will cause overruns in zebra - fixing this is on the TODO list). So we can never get rid of the window where a daemon could send a packet out a link-down interface - we can make that window smaller but not eliminate it. Hence we need either a way to flush packets associated with an (interface,socket) (or just the socket) or we need the kernel to not accept such packets (and drop packets it has accepted). > In the manpages for send/sendto/sendmsg it says that there is a -ENOBUFS > return value, if a sockets write queue is full. Yes, ENOBUFS, sorry. > It also says: > "Normally, this does not occur in Linux. Packets are just silently dropped > when a device queue overflows." This has always been (AFAIK) the behaviour yes. We started getting reports of the new queuing behaviour with, iirc, a version of Intel's e100 driver for 2.4.2x, which was later changed back to the old behaviour. However now that the queue behaviour is apparently the mandated behaviour we really need to work out what to do about the sending-long-stale packets problem. > So, if packets are 'silently dropped' anyway, the fact that we drop > them in our driver (and increment the error count in the > net_device_stats accordingly) should not be a problem. It shouldnt no. The likes of OSPF already specify their own reliability mechanisms. > I think that both behaviours are similar for TCP. TCP waits for > ACKs for each packet. If they do not arrive, a retransmit is done. > Sooner or later the connection will be reset, if no responses from > the other side arrive. So the result for both driver behaviours > should be the same. But if TCP worked even when drivers dropped packets, then that implies TCP has its own queue? That we're talking about a seperate driver packet queue rather than the socket buffer (which is, presumably, where TCP retains packets until ACKed - i have no idea). Anyway, we do, I think, need some way to deal with the sending-stale-packet-on-link-back problem. Either a way to flush this driver queue or else a guarantee that writes to sockets whose protocol makes no reliability guarantee will either return ENOBUFS or drop the packet. Otherwise we will start getting reports of "Quagga on Linux sent an ancient {RIP,IRDP,RA} packet when we fixed a switch problem, and it caused an outage for a section of our network due to bad routes", I think. Some comment or advice would be useful. (Am I kill-filed by all of netdev? feels like it). > Regards, > Thomas regards, -- Paul Jakma paul@clubi.ie paul@jakma.org Key ID: 64A2FF6A Fortune: No directory. From anton@ozlabs.org Sat Dec 4 23:49:59 2004 Received: with ECARTIS (v1.0.0; list netdev); Sat, 04 Dec 2004 23:50:03 -0800 (PST) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB57nwKx021994 for ; Sat, 4 Dec 2004 23:49:59 -0800 Received: by ozlabs.org (Postfix, from userid 1010) id 37A332BDB5; Sun, 5 Dec 2004 18:49:32 +1100 (EST) Date: Sun, 5 Dec 2004 18:46:58 +1100 From: Anton Blanchard To: "David S. Miller" Cc: netdev@oss.sgi.com Subject: Re: KERNEL: assertion (!sk->sk_forward_alloc) Message-ID: <20041205074658.GA19168@krispykreme.ozlabs.ibm.com> References: <20041129211855.GC17540@krispykreme.ozlabs.ibm.com> <20041129172210.687bcad3.davem@davemloft.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041129172210.687bcad3.davem@davemloft.net> User-Agent: Mutt/1.5.6+20040907i X-archive-position: 12424 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: anton@samba.org Precedence: bulk X-list: netdev Hi Dave, > Try to reproduce without that patch installed. > > If there is any mixup of SKB handling by any element in the > path the packet travels, you're screw up all the TCP > accounting knobs on the socket and easily trigger messages > like the above. I'll try. FYI we have 70 gigabit cards in that machine, the reason send-to-self is so useful is that we only need one expensive machine. Without the patch we need to find two expensive machines with 35 gigabits in each :) Anton From greearb@candelatech.com Sun Dec 5 00:37:42 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 00:37:48 -0800 (PST) Received: from www.lanforge.com (ns1.lanforge.com [66.165.47.210]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB58bfwN026805 for ; Sun, 5 Dec 2004 00:37:42 -0800 Received: from [4.33.45.22] (evrtwa1-ar2-4-33-045-022.evrtwa1.dsl-verizon.net [4.33.45.22]) (authenticated bits=0) by www.lanforge.com (8.12.8/8.12.8) with ESMTP id iB58nLLH015959; Sun, 5 Dec 2004 00:49:21 -0800 Message-ID: <41B2C8BF.9050204@candelatech.com> Date: Sun, 05 Dec 2004 00:37:19 -0800 From: Ben Greear Organization: Candela Technologies User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.3) Gecko/20041020 X-Accept-Language: en-us, en MIME-Version: 1.0 To: sfeldma@pobox.com CC: Jos Vos , netdev@oss.sgi.com Subject: Re: e1000 driver problem with Intel Pro/1000 MT adapter References: <200412032325.iB3NPdG04693@xos037.xos.nl> <1102204801.3343.68.camel@sfeldma-mobl.dsl-verizon.net> In-Reply-To: <1102204801.3343.68.camel@sfeldma-mobl.dsl-verizon.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-archive-position: 12425 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: greearb@candelatech.com Precedence: bulk X-list: netdev Scott Feldman wrote: > On Fri, 2004-12-03 at 15:25, Jos Vos wrote: > >>I have a problem with an Intel Pro/1000 MT 4-port card in a Supermicro >>(non-HT) Pentium 4 system using RHEL3 (2.4.21 kernel "the RH way") with >>the e1000 driver (I tried both the version supplied by RH and the >>newest 5.5.4 driver): > > > The 4-port card has two 82546 dual-port controllers behind a PCI-X > bridge. Your symptoms suggest interrupt routing didn't get setup > correctly for the controllers behind the bridge. I've seen more than > one case where the BIOS gets this wrong. The fix is to upgrade to the > latest BIOS. Hopefully this is the fix for you. :-) For what it's worth, I've had good luck with a 4-port pro/1000 NIC in a SuperMicro X5-DPAGG (dual xeon, PCI-X) motherboard. I've tried it with kernel 2.4.27 and 2.6.9 so far... For maximum performance, I needed to increase the tx and rx descriptors to 2k, I believe this helps mitigate the extra latency caused by the PCI-X bridge on the NIC... Ben > > -scott > -- Ben Greear Candela Technologies Inc http://www.candelatech.com From cap@nsc.liu.se Sun Dec 5 04:42:32 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 04:42:39 -0800 (PST) Received: from papput.nsc.liu.se (ns2.nsc.liu.se [130.236.101.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5CgV6l013315 for ; Sun, 5 Dec 2004 04:42:32 -0800 Received: from mail.nsc.liu.se (mail.nsc.liu.se [130.236.101.49]) by papput.nsc.liu.se (Postfix) with ESMTP id EF2B71C31E2; Sun, 5 Dec 2004 13:42:08 +0100 (CET) Date: Sun, 5 Dec 2004 13:42:08 +0100 (CET) From: Peter Kjellstroem To: Scott Feldman Cc: netdev@oss.sgi.com Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 In-Reply-To: <1102216844.3343.84.camel@sfeldma-mobl.dsl-verizon.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12426 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cap@nsc.liu.se Precedence: bulk X-list: netdev Scott, If you had read my entire message you could have noticed that 82547GI works fully ok (weeks of MPI stress) with 5.2.30 as shipped with 2.4.26. Also, setting it to less then 75K is not enough, it just gets harder to provoke, I have managed to make it die with 20K. I will probably run a 2.4.28 with an e1000 driver from 2.4.26 (tested and ok) but I'm not really happy about adding another path to the list of stuff I have to push into a vanilla 2.4.28. Smells driver problem to me. Regards, Peter On Sat, 4 Dec 2004, Scott Feldman wrote: > On Fri, 2004-12-03 at 11:02, Peter Kjellstroem wrote: > > Short version: 82547GI with ITR=0 on 2.4.28 (vanilla) and RHEL3u3 has > > problems (traffic grinds to a temporary halt under anything but trivila > > network traffic). kernel prints the following and resets the IF (many > > times): > > > > NETDEV WATCHDOG: eth0: transmit timed out > > Dude! You're out of luck! > > >From the README: > > CAUTION: If you are using the Intel PRO/1000 CT Network > Connection (controller 82547), setting > InterruptThrottleRate to a value > greater than 75,000, may hang (stop transmitting) > adapters under certain network conditions. If this > occurs a NETDEV WATCHDOG message is logged in the > system event log. In addition, the controller is > automatically reset, restoring the network > connection. To eliminate the potential for the hang, > ensure that InterruptThrottleRate is set no greater > than 75,000 and is not set to 0. > > I was running into the same thing with 82547EI setting ITR=0, and then I > remembered that this part is buggy when ITR=0. The bug is due to 82547 > messing up the order of interrupt assertion and de-assertion on the CSA > bus. > > If you want to do MPI on this system, you'll need to use a non-zero ITR > or plug in an add-in card into one of the PCI slots and use the add-in > card. The problem is, these slots are probably 32-bit/33Mhz, so you're > not going to get the same maximum Mbps that you'll get with 82547 using > the CSA bus. 82547 will not be a good choice for MPI. Sorry. > > > Affected chips (theory, 8254X, X>1 or anything faster then PCI33): > > 82547GI, 82546 (said to be affected, not verified by me) > > 82546 should be fine with ITR=0. > > > http://lists.us.dell.com/pipermail/linux-poweredge/2004-November/023061.html > > You might want to forward this info to that thread. > > -scott > > -- ------------------------------------------------------------ Peter Kjellstroem | E-mail: cap@nsc.liu.se National Supercomputer Centre | Office: +46(0)13 281492 Linkoeping University | Fax : +46(0)13 282535 SE-581 83 Linkoeping | Sweden | http://www.nsc.liu.se From cap@nsc.liu.se Sun Dec 5 06:04:45 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 06:04:52 -0800 (PST) Received: from papput.nsc.liu.se (ns2.nsc.liu.se [130.236.101.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5E4iKV015285 for ; Sun, 5 Dec 2004 06:04:45 -0800 Received: from mail.nsc.liu.se (mail.nsc.liu.se [130.236.101.49]) by papput.nsc.liu.se (Postfix) with ESMTP id 801F91C31E2; Sun, 5 Dec 2004 15:04:22 +0100 (CET) Date: Sun, 5 Dec 2004 15:04:22 +0100 (CET) From: Peter Kjellstroem To: Scott Feldman Cc: netdev@oss.sgi.com Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 In-Reply-To: <1102216844.3343.84.camel@sfeldma-mobl.dsl-verizon.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12427 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cap@nsc.liu.se Precedence: bulk X-list: netdev Hello again, I'm sorry my previous e-mail came out much more harsh then I intended it to (not native english speaking). I just wanted to point out that it's not falling over for me with all drivers. I've been doing som more tests today to try to narrow down which patch causes my problems. So far I have this: 2.4.26 (5.2.30) is ok 2.4.28 (5.4.11) is not 2.4.28 with 5.2.30 patched in is ok 2.4.28 with 5.2.39 (from 2.4.27-pre1) is not In e1000_main.c for 5.2.39 (from 2.4.27-pre1) i found this: /* Change Log * * 5.2.39 3/12/04 * ... * o Back out the CSA fix for 82547 as it continues to cause * systems lock-ups with production systems. Best Regards, Peter On Sat, 4 Dec 2004, Scott Feldman wrote: > On Fri, 2004-12-03 at 11:02, Peter Kjellstroem wrote: > > Short version: 82547GI with ITR=0 on 2.4.28 (vanilla) and RHEL3u3 has > > problems (traffic grinds to a temporary halt under anything but trivila > > network traffic). kernel prints the following and resets the IF (many > > times): > > > > NETDEV WATCHDOG: eth0: transmit timed out > > Dude! You're out of luck! > > >From the README: > > CAUTION: If you are using the Intel PRO/1000 CT Network > Connection (controller 82547), setting > InterruptThrottleRate to a value > greater than 75,000, may hang (stop transmitting) > adapters under certain network conditions. If this > occurs a NETDEV WATCHDOG message is logged in the > system event log. In addition, the controller is > automatically reset, restoring the network > connection. To eliminate the potential for the hang, > ensure that InterruptThrottleRate is set no greater > than 75,000 and is not set to 0. > > I was running into the same thing with 82547EI setting ITR=0, and then I > remembered that this part is buggy when ITR=0. The bug is due to 82547 > messing up the order of interrupt assertion and de-assertion on the CSA > bus. > > If you want to do MPI on this system, you'll need to use a non-zero ITR > or plug in an add-in card into one of the PCI slots and use the add-in > card. The problem is, these slots are probably 32-bit/33Mhz, so you're > not going to get the same maximum Mbps that you'll get with 82547 using > the CSA bus. 82547 will not be a good choice for MPI. Sorry. > > > Affected chips (theory, 8254X, X>1 or anything faster then PCI33): > > 82547GI, 82546 (said to be affected, not verified by me) > > 82546 should be fine with ITR=0. > > > http://lists.us.dell.com/pipermail/linux-poweredge/2004-November/023061.html > > You might want to forward this info to that thread. > > -scott > > -- ------------------------------------------------------------ Peter Kjellstroem | E-mail: cap@nsc.liu.se National Supercomputer Centre | Sweden | http://www.nsc.liu.se From buytenh@wantstofly.org Sun Dec 5 06:51:16 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 06:51:21 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5EpDQd016544 for ; Sun, 5 Dec 2004 06:51:15 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 46A9F2B0ED; Sun, 5 Dec 2004 15:50:51 +0100 (MET) Date: Sun, 5 Dec 2004 15:50:51 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205145051.GA647@xi.wantstofly.org> References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1101967983.4782.9.camel@localhost.localdomain> User-Agent: Mutt/1.4.1i X-archive-position: 12428 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Wed, Dec 01, 2004 at 10:13:33PM -0800, Scott Feldman wrote: > Idea#3 > > http://www.mail-archive.com/freebsd-net@freebsd.org/msg10826.html > > Set TXDMAC to 0 in e1000_configure_tx. Enabling 'DMA packet prefetching' gives me an impressive boost in performance. Combined with your TX clean rework, I now get 1.03Mpps TX performance at 60B packets. Transmitting from both of the 82546 ports at the same time gives me close to 2 Mpps. The freebsd post hints that (some) e1000 hardware might be buggy w.r.t. this prefetching though. I'll play some more with the other ideas you suggested as well. 60 1036488 61 1037413 62 1036429 63 990239 64 993218 65 993233 66 993201 67 993234 68 993219 69 993208 70 992225 71 980560 --L diff -ur e1000.orig/e1000_main.c e1000/e1000_main.c --- e1000.orig/e1000_main.c 2004-12-04 11:43:12.000000000 +0100 +++ e1000/e1000_main.c 2004-12-05 15:40:49.284946897 +0100 @@ -879,6 +894,8 @@ E1000_WRITE_REG(&adapter->hw, TCTL, tctl); + E1000_WRITE_REG(&adapter->hw, TXDMAC, 0); + e1000_config_collision_dist(&adapter->hw); /* Setup Transmit Descriptor Settings for eop descriptor */ From gandalf@wlug.westbo.se Sun Dec 5 07:04:02 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 07:04:07 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5F41Dl017185 for ; Sun, 5 Dec 2004 07:04:01 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 5BBC22C0056; Sun, 5 Dec 2004 16:03:37 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id DB2D72C0068; Sun, 5 Dec 2004 16:03:36 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id 26F942C0056; Sun, 5 Dec 2004 16:03:36 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id 4F5D53FA7; Sun, 5 Dec 2004 16:03:36 +0100 (CET) Date: Sun, 5 Dec 2004 16:03:36 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: <20041205145051.GA647@xi.wantstofly.org> Message-ID: References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12429 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Lennert Buytenhek wrote: > Enabling 'DMA packet prefetching' gives me an impressive boost in performance. > Combined with your TX clean rework, I now get 1.03Mpps TX performance at 60B > packets. Transmitting from both of the 82546 ports at the same time gives me > close to 2 Mpps. > > The freebsd post hints that (some) e1000 hardware might be buggy w.r.t. this > prefetching though. > > I'll play some more with the other ideas you suggested as well. > > 60 1036488 I was just playing with prefetching when you sent your mail :) I get that number with Scotts patch but without prefetching. If I mode the TDT update to the tc cleaning I get a few extra kpps but not much. BUT if I use the above + prefetching I get this: 60 1483890 64 1418568 68 1356992 72 1300523 76 1248568 80 1142989 84 1140909 88 1114951 92 1076546 96 960732 100 949801 104 972876 108 945314 112 918380 116 891393 120 865923 124 843288 128 696465 Which is pretty nice :) This is on one port of a 82546GB The hardware is a dual Athlon MP 2000+ in an Asus A7M266-D motherboard and the nic is located in a 64/66 slot. I won't post any patch until I've tested some more and cleaned up a few things. BTW, I also get some transmit timouts with Scotts patch sometimes, not often but it does happen. /Martin From buytenh@wantstofly.org Sun Dec 5 07:16:07 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 07:16:11 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5FG6Go017770 for ; Sun, 5 Dec 2004 07:16:07 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 198CD2B0ED; Sun, 5 Dec 2004 16:15:45 +0100 (MET) Date: Sun, 5 Dec 2004 16:15:45 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205151545.GC647@xi.wantstofly.org> References: <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-archive-position: 12430 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 04:03:36PM +0100, Martin Josefsson wrote: > BUT if I use the above + prefetching I get this: > > 60 1483890 > [snip] > > Which is pretty nice :) Not just that, it's also wire speed GigE. Damn. Now we all have to go and upgrade to 10GbE cards, and I don't think my girlfriend would give me one of those for christmas. > This is on one port of a 82546GB > > The hardware is a dual Athlon MP 2000+ in an Asus A7M266-D motherboard and > the nic is located in a 64/66 slot. Hmmm. Funny you get this number even on 64/66. How many PCI bridges between the CPUs and the NIC? Any idea how many cycles an MMIO read on your hardware is? cheers, Lennert From gandalf@wlug.westbo.se Sun Dec 5 07:19:54 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 07:19:59 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5FJr7J018134 for ; Sun, 5 Dec 2004 07:19:53 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id F0EA82C0069; Sun, 5 Dec 2004 16:19:30 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 86DD02C006F; Sun, 5 Dec 2004 16:19:30 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id C7C3F2C0069; Sun, 5 Dec 2004 16:19:29 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id EDD873FA7; Sun, 5 Dec 2004 16:19:29 +0100 (CET) Date: Sun, 5 Dec 2004 16:19:29 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: <20041205151545.GC647@xi.wantstofly.org> Message-ID: References: <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12431 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Lennert Buytenhek wrote: > > 60 1483890 > > [snip] > > > > Which is pretty nice :) > > Not just that, it's also wire speed GigE. Damn. Now we all have to go > and upgrade to 10GbE cards, and I don't think my girlfriend would give me > one of those for christmas. Yes it is, and it's lovely to see. You have to nerdify her so she sees the need for geeky hardware enough to give you what you need :) > > This is on one port of a 82546GB > > > > The hardware is a dual Athlon MP 2000+ in an Asus A7M266-D motherboard and > > the nic is located in a 64/66 slot. > > Hmmm. Funny you get this number even on 64/66. How many PCI bridges > between the CPUs and the NIC? Any idea how many cycles an MMIO read on > your hardware is? I verified that I get the same results on a small whimpy 82540EM that runs at 32/66 as well. Just about to see what I get at 32/33 with that card. /Martin From gandalf@wlug.westbo.se Sun Dec 5 07:31:12 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 07:31:17 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5FVBfU018611 for ; Sun, 5 Dec 2004 07:31:11 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 0EBEF2C0056; Sun, 5 Dec 2004 16:30:49 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 7E9BA2C0069; Sun, 5 Dec 2004 16:30:48 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id B3B1D2C0056; Sun, 5 Dec 2004 16:30:47 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id DD5093FA7; Sun, 5 Dec 2004 16:30:47 +0100 (CET) Date: Sun, 5 Dec 2004 16:30:47 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: Message-ID: References: <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12432 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Martin Josefsson wrote: > > > The hardware is a dual Athlon MP 2000+ in an Asus A7M266-D motherboard and > > > the nic is located in a 64/66 slot. > > > > Hmmm. Funny you get this number even on 64/66. How many PCI bridges > > between the CPUs and the NIC? Any idea how many cycles an MMIO read on > > your hardware is? > > I verified that I get the same results on a small whimpy 82540EM that runs > at 32/66 as well. Just about to see what I get at 32/33 with that card. Just tested the 82540EM at 32/33 and it's a big diffrence. 60 350229 64 247037 68 219643 72 218205 76 216786 80 215386 84 214003 88 212638 92 211291 96 210004 100 208647 104 182461 108 181468 112 180453 116 179482 120 185472 124 188336 128 153743 Sorry, forgot to answer your other questions, I'm a bit excited at the moment :) The 64/66 bus on this motherboard is directly connected to the northbridge. Here's the lspci output with the 82546GB nic attached to the 64/66 bus and 82540EM nic connected to the 32/33 bus that hangs off the southbridge: 00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P] System Controller (rev 11) 00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P] AGP Bridge 00:07.0 ISA bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ISA (rev 05) 00:07.1 IDE interface: Advanced Micro Devices [AMD] AMD-768 [Opus] IDE (rev 04) 00:07.3 Bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ACPI (rev 03) 00:08.0 Ethernet controller: Intel Corp. 82546GB Gigabit Ethernet Controller (rev 03) 00:08.1 Ethernet controller: Intel Corp. 82546GB Gigabit Ethernet Controller (rev 03) 00:10.0 PCI bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] PCI (rev 05) 01:05.0 VGA compatible controller: Silicon Integrated Systems [SiS] 86C326 5598/6326 (rev 0b) 02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0c) 02:06.0 SCSI storage controller: Adaptec AIC-7892A U160/m (rev 02) 02:08.0 Ethernet controller: Intel Corp. 82540EM Gigabit Ethernet Controller (rev 02) And lspci -t -[00]-+-00.0 +-01.0-[01]----05.0 +-07.0 +-07.1 +-07.3 +-08.0 +-08.1 \-10.0-[02]--+-05.0 +-06.0 \-08.0 I have no idea how expensive an MMIO read is on this machine, do you have an relatively easy way to find out? /Martin From gandalf@wlug.westbo.se Sun Dec 5 07:43:00 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 07:43:04 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5Fgw6n019392 for ; Sun, 5 Dec 2004 07:42:59 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 521D92C0069; Sun, 5 Dec 2004 16:42:36 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 644B22C006F; Sun, 5 Dec 2004 16:42:35 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id 930A92C0069; Sun, 5 Dec 2004 16:42:34 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id BA4393FA7; Sun, 5 Dec 2004 16:42:34 +0100 (CET) Date: Sun, 5 Dec 2004 16:42:34 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: Message-ID: References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12433 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Martin Josefsson wrote: [snip] > BUT if I use the above + prefetching I get this: > > 60 1483890 [snip] > This is on one port of a 82546GB > > The hardware is a dual Athlon MP 2000+ in an Asus A7M266-D motherboard and > the nic is located in a 64/66 slot. > > I won't post any patch until I've tested some more and cleaned up a few > things. > > BTW, I also get some transmit timouts with Scotts patch sometimes, not > often but it does happen. Here's the patch, not much more tested (it still gives some transmit timeouts since it's scotts patch + prefetching and delayed TDT updating). And it's not cleaned up, but hey, that's development :) The delayed TDT updating was a test and currently it delays the first tx'd packet after a timerrun 1ms. Would be interesting to see what other people get with this thing. Lennert? diff -X /home/gandalf/dontdiff.ny -urNp linux-2.6.10-rc3.orig/drivers/net/e1000/e1000.h linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000.h --- linux-2.6.10-rc3.orig/drivers/net/e1000/e1000.h 2004-12-04 18:16:53.000000000 +0100 +++ linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000.h 2004-12-05 15:12:25.000000000 +0100 @@ -101,7 +101,7 @@ struct e1000_adapter; #define E1000_MAX_INTR 10 /* TX/RX descriptor defines */ -#define E1000_DEFAULT_TXD 256 +#define E1000_DEFAULT_TXD 4096 #define E1000_MAX_TXD 256 #define E1000_MIN_TXD 80 #define E1000_MAX_82544_TXD 4096 @@ -187,6 +187,7 @@ struct e1000_desc_ring { /* board specific private data structure */ struct e1000_adapter { + struct timer_list tx_cleanup_timer; struct timer_list tx_fifo_stall_timer; struct timer_list watchdog_timer; struct timer_list phy_info_timer; @@ -222,6 +223,7 @@ struct e1000_adapter { uint32_t tx_fifo_size; atomic_t tx_fifo_stall; boolean_t pcix_82544; + boolean_t tx_cleanup_scheduled; /* RX */ struct e1000_desc_ring rx_ring; diff -X /home/gandalf/dontdiff.ny -urNp linux-2.6.10-rc3.orig/drivers/net/e1000/e1000_hw.h linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000_hw.h --- linux-2.6.10-rc3.orig/drivers/net/e1000/e1000_hw.h 2004-12-04 18:16:53.000000000 +0100 +++ linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000_hw.h 2004-12-05 15:37:50.000000000 +0100 @@ -417,14 +417,12 @@ int32_t e1000_set_d3_lplu_state(struct e /* This defines the bits that are set in the Interrupt Mask * Set/Read Register. Each bit is documented below: * o RXT0 = Receiver Timer Interrupt (ring 0) - * o TXDW = Transmit Descriptor Written Back * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) * o RXSEQ = Receive Sequence Error * o LSC = Link Status Change */ #define IMS_ENABLE_MASK ( \ E1000_IMS_RXT0 | \ - E1000_IMS_TXDW | \ E1000_IMS_RXDMT0 | \ E1000_IMS_RXSEQ | \ E1000_IMS_LSC) diff -X /home/gandalf/dontdiff.ny -urNp linux-2.6.10-rc3.orig/drivers/net/e1000/e1000_main.c linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000_main.c --- linux-2.6.10-rc3.orig/drivers/net/e1000/e1000_main.c 2004-12-05 14:59:19.000000000 +0100 +++ linux-2.6.10-rc3.labbrouter/drivers/net/e1000/e1000_main.c 2004-12-05 15:40:11.000000000 +0100 @@ -131,7 +131,7 @@ static int e1000_set_mac(struct net_devi static void e1000_irq_disable(struct e1000_adapter *adapter); static void e1000_irq_enable(struct e1000_adapter *adapter); static irqreturn_t e1000_intr(int irq, void *data, struct pt_regs *regs); -static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter); +static void e1000_clean_tx(unsigned long data); #ifdef CONFIG_E1000_NAPI static int e1000_clean(struct net_device *netdev, int *budget); static boolean_t e1000_clean_rx_irq(struct e1000_adapter *adapter, @@ -286,6 +286,7 @@ e1000_down(struct e1000_adapter *adapter e1000_irq_disable(adapter); free_irq(adapter->pdev->irq, netdev); + del_timer_sync(&adapter->tx_cleanup_timer); del_timer_sync(&adapter->tx_fifo_stall_timer); del_timer_sync(&adapter->watchdog_timer); del_timer_sync(&adapter->phy_info_timer); @@ -522,6 +523,10 @@ e1000_probe(struct pci_dev *pdev, e1000_get_bus_info(&adapter->hw); + init_timer(&adapter->tx_cleanup_timer); + adapter->tx_cleanup_timer.function = &e1000_clean_tx; + adapter->tx_cleanup_timer.data = (unsigned long) adapter; + init_timer(&adapter->tx_fifo_stall_timer); adapter->tx_fifo_stall_timer.function = &e1000_82547_tx_fifo_stall; adapter->tx_fifo_stall_timer.data = (unsigned long) adapter; @@ -882,19 +887,16 @@ e1000_configure_tx(struct e1000_adapter e1000_config_collision_dist(&adapter->hw); /* Setup Transmit Descriptor Settings for eop descriptor */ - adapter->txd_cmd = E1000_TXD_CMD_IDE | E1000_TXD_CMD_EOP | + adapter->txd_cmd = E1000_TXD_CMD_EOP | E1000_TXD_CMD_IFCS; - if(adapter->hw.mac_type < e1000_82543) - adapter->txd_cmd |= E1000_TXD_CMD_RPS; - else - adapter->txd_cmd |= E1000_TXD_CMD_RS; - /* Cache if we're 82544 running in PCI-X because we'll * need this to apply a workaround later in the send path. */ if(adapter->hw.mac_type == e1000_82544 && adapter->hw.bus_type == e1000_bus_type_pcix) adapter->pcix_82544 = 1; + + E1000_WRITE_REG(&adapter->hw, TXDMAC, 0); } /** @@ -1707,7 +1709,7 @@ e1000_tx_queue(struct e1000_adapter *ada wmb(); tx_ring->next_to_use = i; - E1000_WRITE_REG(&adapter->hw, TDT, i); + /* E1000_WRITE_REG(&adapter->hw, TDT, i); */ } /** @@ -1809,6 +1811,11 @@ e1000_xmit_frame(struct sk_buff *skb, st return NETDEV_TX_LOCKED; } + if(!adapter->tx_cleanup_scheduled) { + adapter->tx_cleanup_scheduled = TRUE; + mod_timer(&adapter->tx_cleanup_timer, jiffies + 1); + } + /* need: count + 2 desc gap to keep tail from touching * head, otherwise try next time */ if(E1000_DESC_UNUSED(&adapter->tx_ring) < count + 2) { @@ -1845,6 +1852,7 @@ e1000_xmit_frame(struct sk_buff *skb, st netdev->trans_start = jiffies; spin_unlock_irqrestore(&adapter->tx_lock, flags); + return NETDEV_TX_OK; } @@ -2140,8 +2148,7 @@ e1000_intr(int irq, void *data, struct p } #else for(i = 0; i < E1000_MAX_INTR; i++) - if(unlikely(!e1000_clean_rx_irq(adapter) & - !e1000_clean_tx_irq(adapter))) + if(unlikely(!e1000_clean_rx_irq(adapter))) break; #endif @@ -2159,18 +2166,15 @@ e1000_clean(struct net_device *netdev, i { struct e1000_adapter *adapter = netdev->priv; int work_to_do = min(*budget, netdev->quota); - int tx_cleaned; int work_done = 0; - tx_cleaned = e1000_clean_tx_irq(adapter); e1000_clean_rx_irq(adapter, &work_done, work_to_do); *budget -= work_done; netdev->quota -= work_done; - /* if no Rx and Tx cleanup work was done, exit the polling mode */ - if(!tx_cleaned || (work_done < work_to_do) || - !netif_running(netdev)) { + /* if no Rx cleanup work was done, exit the polling mode */ + if((work_done < work_to_do) || !netif_running(netdev)) { netif_rx_complete(netdev); e1000_irq_enable(adapter); return 0; @@ -2181,66 +2185,76 @@ e1000_clean(struct net_device *netdev, i #endif /** - * e1000_clean_tx_irq - Reclaim resources after transmit completes - * @adapter: board private structure + * e1000_clean_tx - Reclaim resources after transmit completes + * @data: timer callback data (board private structure) **/ -static boolean_t -e1000_clean_tx_irq(struct e1000_adapter *adapter) +static void +e1000_clean_tx(unsigned long data) { + struct e1000_adapter *adapter = (struct e1000_adapter *)data; struct e1000_desc_ring *tx_ring = &adapter->tx_ring; struct net_device *netdev = adapter->netdev; struct pci_dev *pdev = adapter->pdev; - struct e1000_tx_desc *tx_desc, *eop_desc; struct e1000_buffer *buffer_info; - unsigned int i, eop; - boolean_t cleaned = FALSE; + unsigned int i, next; + int size = 0, count = 0; + uint32_t tx_head; - i = tx_ring->next_to_clean; - eop = tx_ring->buffer_info[i].next_to_watch; - eop_desc = E1000_TX_DESC(*tx_ring, eop); + spin_lock(&adapter->tx_lock); - while(eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) { - for(cleaned = FALSE; !cleaned; ) { - tx_desc = E1000_TX_DESC(*tx_ring, i); - buffer_info = &tx_ring->buffer_info[i]; + E1000_WRITE_REG(&adapter->hw, TDT, tx_ring->next_to_use); - if(likely(buffer_info->dma)) { - pci_unmap_page(pdev, - buffer_info->dma, - buffer_info->length, - PCI_DMA_TODEVICE); - buffer_info->dma = 0; - } + tx_head = E1000_READ_REG(&adapter->hw, TDH); - if(buffer_info->skb) { - dev_kfree_skb_any(buffer_info->skb); - buffer_info->skb = NULL; - } + i = next = tx_ring->next_to_clean; - tx_desc->buffer_addr = 0; - tx_desc->lower.data = 0; - tx_desc->upper.data = 0; + while(i != tx_head) { + size++; + if(i == tx_ring->buffer_info[next].next_to_watch) { + count += size; + size = 0; + if(unlikely(++i == tx_ring->count)) + i = 0; + next = i; + } else { + if(unlikely(++i == tx_ring->count)) + i = 0; + } + } - cleaned = (i == eop); - if(unlikely(++i == tx_ring->count)) i = 0; + i = tx_ring->next_to_clean; + while(count--) { + buffer_info = &tx_ring->buffer_info[i]; + + if(likely(buffer_info->dma)) { + pci_unmap_page(pdev, + buffer_info->dma, + buffer_info->length, + PCI_DMA_TODEVICE); + buffer_info->dma = 0; } - - eop = tx_ring->buffer_info[i].next_to_watch; - eop_desc = E1000_TX_DESC(*tx_ring, eop); + + if(buffer_info->skb) { + dev_kfree_skb_any(buffer_info->skb); + buffer_info->skb = NULL; + } + + if(unlikely(++i == tx_ring->count)) + i = 0; } tx_ring->next_to_clean = i; - spin_lock(&adapter->tx_lock); + if(E1000_DESC_UNUSED(tx_ring) != tx_ring->count) + mod_timer(&adapter->tx_cleanup_timer, jiffies + 1); + else + adapter->tx_cleanup_scheduled = FALSE; - if(unlikely(cleaned && netif_queue_stopped(netdev) && - netif_carrier_ok(netdev))) + if(unlikely(netif_queue_stopped(netdev) && netif_carrier_ok(netdev))) netif_wake_queue(netdev); spin_unlock(&adapter->tx_lock); - - return cleaned; } /** /Martin From gandalf@wlug.westbo.se Sun Dec 5 08:48:59 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 08:49:04 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5Gmwrk024151 for ; Sun, 5 Dec 2004 08:48:59 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 98CEC2C0069; Sun, 5 Dec 2004 17:48:35 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 211292C0069; Sun, 5 Dec 2004 17:48:35 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id 61B582C0056; Sun, 5 Dec 2004 17:48:34 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id 98F033FA7; Sun, 5 Dec 2004 17:48:34 +0100 (CET) Date: Sun, 5 Dec 2004 17:48:34 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: Message-ID: References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12434 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Martin Josefsson wrote: > The delayed TDT updating was a test and currently it delays the first tx'd > packet after a timerrun 1ms. I removed the delayed TDT updating and gave it a go again (this is scott + prefetching): 60 1486193 64 1267639 68 1259682 72 1243997 76 1243989 80 1153608 84 1123813 88 1115047 92 1076636 96 1040792 100 1007252 104 975806 108 946263 112 918456 116 892227 120 867477 124 844052 128 821858 It gives a little diffrent results, 60byte is ok but then it falls a lot down to 64byte and the curve seems a bit flatter. This should be the same driver that Lennert got 1.03Mpps with. I get 1.03Mpps without prefetching. I tried using both ports on the 82546GB nic. delay nodelay 1CPU 1.95 Mpps 1.76 Mpps 2CPU 1.60 Mpps 1.44 Mpps All tests performed on an SMP kernel, the above mention of 1CPU vs 2CPU just means how the two nics were bound to the cpus. And there's no tx-interrupts at all due to scotts patch. /Martin From buytenh@wantstofly.org Sun Dec 5 09:00:29 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:00:33 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5H0SRM024783 for ; Sun, 5 Dec 2004 09:00:29 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id A8CBC2B0ED; Sun, 5 Dec 2004 18:00:06 +0100 (MET) Date: Sun, 5 Dec 2004 18:00:06 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205170006.GI647@xi.wantstofly.org> References: <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-archive-position: 12435 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 04:30:47PM +0100, Martin Josefsson wrote: > > I verified that I get the same results on a small whimpy 82540EM > > that runs at 32/66 as well. Just about to see what I get at 32/33 > > with that card. > > Just tested the 82540EM at 32/33 and it's a big diffrence. > > 60 350229 > 64 247037 > 68 219643 > 72 218205 > 76 216786 > 80 215386 > 84 214003 > 88 212638 > 92 211291 > 96 210004 > 100 208647 > 104 182461 > 108 181468 > 112 180453 > 116 179482 > 120 185472 > 124 188336 > 128 153743 With or without prefetching? My 82540 in 32/33 mode gets on baseline 2.6.9: 60 431967 61 431311 62 431927 63 427827 64 427482 And with Scott's notxints patch: 60 514496 61 514493 62 514754 63 504629 64 504123 > Sorry, forgot to answer your other questions, I'm a bit excited at the > moment :) Makes sense :) > The 64/66 bus on this motherboard is directly connected to the > northbridge. Your lspci output seems to suggest there is another PCI bridge in between (00:10.0) Basically on my box, it's CPU - MCH - P64H2 - e1000, where MCH is the 'Memory Controller Hub' and P64H2 the PCI-X bridge chip. > I have no idea how expensive an MMIO read is on this machine, do you have > an relatively easy way to find out? A dirty way, yes ;-) Open up e1000_osdep.h and do: -#define E1000_READ_REG(a, reg) ( \ - readl((a)->hw_addr + \ - (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg))) +#define E1000_READ_REG(a, reg) ({ \ + unsigned long s, e, d, v; \ +\ + (a)->mmio_reads++; \ + rdtsc(s, d); \ + v = readl((a)->hw_addr + \ + (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg)); \ + rdtsc(e, d); \ + e -= s; \ + printk(KERN_INFO "e1000: MMIO read took %ld clocks\n", e); \ + printk(KERN_INFO "e1000: in process %d(%s)\n", current->pid, current->comm); \ + dump_stack(); \ + v; \ +}) You might want to disable the stack dump of course. --L From gandalf@wlug.westbo.se Sun Dec 5 09:02:07 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:02:11 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5H26di025153 for ; Sun, 5 Dec 2004 09:02:07 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 200942C002B; Sun, 5 Dec 2004 18:01:44 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id A95EA2C0056; Sun, 5 Dec 2004 18:01:43 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id E77DC2C002B; Sun, 5 Dec 2004 18:01:42 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id 31EC33FA7; Sun, 5 Dec 2004 18:01:43 +0100 (CET) Date: Sun, 5 Dec 2004 18:01:43 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: Message-ID: References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12436 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Martin Josefsson wrote: > I removed the delayed TDT updating and gave it a go again (this is scott + > prefetching): > > 60 1486193 > 64 1267639 > 68 1259682 Yet another mail, I hope you are using a NAPI-enabled MUA :) This time I tried vanilla + prefetch and it gave pretty nice performance as well: 60 1308047 64 1076044 68 1079377 72 1058993 76 1055708 80 1025659 84 1024692 88 1024236 92 1024510 96 1012853 100 1007925 104 976500 108 947061 112 919169 116 892804 120 868084 124 844609 128 822381 Large gap between 60 and 64byte, maybe the prefetching only prefetches 32bytes at a time? As a reference: here's a completely vanilla e1000 driver: 60 860931 64 772949 68 754738 72 754200 76 756093 80 756398 84 742111 88 738120 92 740426 96 739720 100 722322 104 729287 108 719312 112 723171 116 705551 120 704843 124 704622 128 665863 /Martin From gandalf@wlug.westbo.se Sun Dec 5 09:12:20 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:12:23 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HCJaq025640 for ; Sun, 5 Dec 2004 09:12:19 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id 62A582C002B; Sun, 5 Dec 2004 18:11:56 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id E0C652C0056; Sun, 5 Dec 2004 18:11:55 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id 2BD692C002B; Sun, 5 Dec 2004 18:11:55 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id 68B043FA7; Sun, 5 Dec 2004 18:11:55 +0100 (CET) Date: Sun, 5 Dec 2004 18:11:55 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: <20041205170006.GI647@xi.wantstofly.org> Message-ID: References: <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> <20041205170006.GI647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12437 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Lennert Buytenhek wrote: > > Just tested the 82540EM at 32/33 and it's a big diffrence. > > > > 60 350229 > > 64 247037 > > 68 219643 [snip] > With or without prefetching? My 82540 in 32/33 mode gets on baseline > 2.6.9: With, will test without. I've always suspected that the 32bit bus on this motherboard is a bit slow. > Your lspci output seems to suggest there is another PCI bridge in > between (00:10.0) Yes it sits between the 32bit and the 64bit bus. > Basically on my box, it's CPU - MCH - P64H2 - e1000, where MCH is the > 'Memory Controller Hub' and P64H2 the PCI-X bridge chip. I don't have PCI-X (unless 64/66 counts as PCI-x which I highly doubt) > > I have no idea how expensive an MMIO read is on this machine, do you have > > an relatively easy way to find out? > > A dirty way, yes ;-) Open up e1000_osdep.h and do: > > -#define E1000_READ_REG(a, reg) ( \ > - readl((a)->hw_addr + \ > - (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg))) > +#define E1000_READ_REG(a, reg) ({ \ > + unsigned long s, e, d, v; \ > +\ > + (a)->mmio_reads++; \ > + rdtsc(s, d); \ > + v = readl((a)->hw_addr + \ > + (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg)); \ > + rdtsc(e, d); \ > + e -= s; \ > + printk(KERN_INFO "e1000: MMIO read took %ld clocks\n", e); \ > + printk(KERN_INFO "e1000: in process %d(%s)\n", current->pid, current->comm); \ > + dump_stack(); \ > + v; \ > +}) > > You might want to disable the stack dump of course. Will test this in a while. /Martin From gandalf@wlug.westbo.se Sun Dec 5 09:38:30 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:38:34 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HcTvp026395 for ; Sun, 5 Dec 2004 09:38:30 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id EAD6C2C0056; Sun, 5 Dec 2004 18:38:06 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 6FC002C006F; Sun, 5 Dec 2004 18:38:06 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id AA2732C0056; Sun, 5 Dec 2004 18:38:05 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id E45B13FA7; Sun, 5 Dec 2004 18:38:05 +0100 (CET) Date: Sun, 5 Dec 2004 18:38:05 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: Message-ID: References: <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> <20041205170006.GI647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12438 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Martin Josefsson wrote: > > -#define E1000_READ_REG(a, reg) ( \ > > - readl((a)->hw_addr + \ > > - (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg))) > > +#define E1000_READ_REG(a, reg) ({ \ > > + unsigned long s, e, d, v; \ > > +\ > > + (a)->mmio_reads++; \ > > + rdtsc(s, d); \ > > + v = readl((a)->hw_addr + \ > > + (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg)); \ > > + rdtsc(e, d); \ > > + e -= s; \ > > + printk(KERN_INFO "e1000: MMIO read took %ld clocks\n", e); \ > > + printk(KERN_INFO "e1000: in process %d(%s)\n", current->pid, current->comm); \ > > + dump_stack(); \ > > + v; \ > > +}) > > > > You might want to disable the stack dump of course. > > Will test this in a while. It gives pretty varied results. This is during a pktgen run. The machine is an Athlon MP 2000+ which operated at 1667 MHz e1000: MMIO read took 481 clocks e1000: MMIO read took 369 clocks e1000: MMIO read took 481 clocks e1000: MMIO read took 11 clocks e1000: MMIO read took 477 clocks e1000: MMIO read took 316 clocks e1000: MMIO read took 481 clocks e1000: MMIO read took 316 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 332 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 372 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 11 clocks e1000: MMIO read took 481 clocks e1000: MMIO read took 388 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 11 clocks e1000: MMIO read took 485 clocks e1000: MMIO read took 317 clocks e1000: MMIO read took 481 clocks e1000: MMIO read took 337 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 316 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 409 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 334 clocks e1000: MMIO read took 481 clocks e1000: MMIO read took 316 clocks e1000: MMIO read took 480 clocks e1000: MMIO read took 11 clocks e1000: MMIO read took 505 clocks e1000: MMIO read took 359 clocks e1000: MMIO read took 484 clocks e1000: MMIO read took 337 clocks e1000: MMIO read took 464 clocks e1000: MMIO read took 504 clocks /Martin From buytenh@wantstofly.org Sun Dec 5 09:44:23 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:44:27 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HiNlA026845 for ; Sun, 5 Dec 2004 09:44:23 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 605F12B0ED; Sun, 5 Dec 2004 18:44:01 +0100 (MET) Date: Sun, 5 Dec 2004 18:44:01 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205174401.GJ647@xi.wantstofly.org> References: <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-archive-position: 12439 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 04:42:34PM +0100, Martin Josefsson wrote: > The delayed TDT updating was a test and currently it delays the first tx'd > packet after a timerrun 1ms. > > Would be interesting to see what other people get with this thing. > Lennert? I took Scott's notxints patch, added the prefetch bits and moved the TDT updating to e1000_clean_tx as you did. Slightly better than before, but not much: 60 1070157 61 1066610 62 1062088 63 991447 64 991546 65 991537 66 991449 67 990857 68 989882 69 991347 Regular TDT updating: 60 1037469 61 1038425 62 1037393 63 993143 64 992156 65 993137 66 992203 67 992165 68 992185 69 988249 --L From buytenh@wantstofly.org Sun Dec 5 09:51:56 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:52:00 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HptqK027333 for ; Sun, 5 Dec 2004 09:51:55 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 8915E2B0ED; Sun, 5 Dec 2004 18:51:33 +0100 (MET) Date: Sun, 5 Dec 2004 18:51:33 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205175133.GK647@xi.wantstofly.org> References: <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205174401.GJ647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041205174401.GJ647@xi.wantstofly.org> User-Agent: Mutt/1.4.1i X-archive-position: 12440 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 06:44:01PM +0100, Lennert Buytenhek wrote: > On Sun, Dec 05, 2004 at 04:42:34PM +0100, Martin Josefsson wrote: > > > The delayed TDT updating was a test and currently it delays the first tx'd > > packet after a timerrun 1ms. > > > > Would be interesting to see what other people get with this thing. > > Lennert? > > I took Scott's notxints patch, added the prefetch bits and moved the > TDT updating to e1000_clean_tx as you did. > > Slightly better than before, but not much: I've tested all packet sizes now, and delayed TDT updating once per jiffy (instead of once per packet) indeed gives about 25kpps more on 60,61,62 byte packets, and is hardly worth it for bigger packets. --L From gandalf@wlug.westbo.se Sun Dec 5 09:54:33 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:54:36 -0800 (PST) Received: from null.rsn.bth.se (postfix@null.rsn.bth.se [194.47.142.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HsWCS027717 for ; Sun, 5 Dec 2004 09:54:32 -0800 Received: by null.rsn.bth.se (Postfix, from userid 65534) id D26722C0056; Sun, 5 Dec 2004 18:54:08 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by null.rsn.bth.se (Postfix) with ESMTP id 618D92C006F; Sun, 5 Dec 2004 18:54:08 +0100 (CET) Received: from tux.rsn.bth.se (tux.rsn.bth.se [194.47.143.135]) by null.rsn.bth.se (Postfix) with ESMTP id 9FA372C0056; Sun, 5 Dec 2004 18:54:07 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by tux.rsn.bth.se (Postfix) with ESMTP id DF7DA3FA7; Sun, 5 Dec 2004 18:54:07 +0100 (CET) Date: Sun, 5 Dec 2004 18:54:07 +0100 (CET) From: Martin Josefsson X-X-Sender: gandalf@tux.rsn.bth.se To: Lennert Buytenhek Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) In-Reply-To: <20041205175133.GK647@xi.wantstofly.org> Message-ID: References: <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205174401.GJ647@xi.wantstofly.org> <20041205175133.GK647@xi.wantstofly.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new-20030616-p10 on null.rsn.bth.se X-archive-position: 12441 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: gandalf@wlug.westbo.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Lennert Buytenhek wrote: > I've tested all packet sizes now, and delayed TDT updating once per jiffy > (instead of once per packet) indeed gives about 25kpps more on 60,61,62 > byte packets, and is hardly worth it for bigger packets. Maybe we can't see any real gains here now, I wonder if it has any effect if you have lots of nics on the same bus. I mean, in theory it saves a whole lot of traffic on the bus. /Martin From buytenh@wantstofly.org Sun Dec 5 09:58:40 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 09:58:44 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5HwdJ9028214 for ; Sun, 5 Dec 2004 09:58:40 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id CEB422B0ED; Sun, 5 Dec 2004 18:58:17 +0100 (MET) Date: Sun, 5 Dec 2004 18:58:17 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205175817.GL647@xi.wantstofly.org> References: <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-archive-position: 12442 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 05:48:34PM +0100, Martin Josefsson wrote: > I tried using both ports on the 82546GB nic. > > delay nodelay > 1CPU 1.95 Mpps 1.76 Mpps > 2CPU 1.60 Mpps 1.44 Mpps I get: delay nodelay 1CPU 1837356 1837330 2CPU 2035060 1947424 So in your case using 2 CPUs degrades performance, in my case it increases it. And TDT delaying/coalescing only improves performance when using 2 CPUs, and even then only slightly (and only for <= 62B packets.) --L From buytenh@wantstofly.org Sun Dec 5 10:14:52 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 10:14:56 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5IEpkJ028833 for ; Sun, 5 Dec 2004 10:14:51 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 5E6622B0ED; Sun, 5 Dec 2004 19:14:29 +0100 (MET) Date: Sun, 5 Dec 2004 19:14:29 +0100 From: Lennert Buytenhek To: Martin Josefsson Cc: Scott Feldman , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205181429.GM647@xi.wantstofly.org> References: <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <20041205151545.GC647@xi.wantstofly.org> <20041205170006.GI647@xi.wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-archive-position: 12443 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 06:38:05PM +0100, Martin Josefsson wrote: > e1000: MMIO read took 481 clocks > e1000: MMIO read took 369 clocks > e1000: MMIO read took 481 clocks > e1000: MMIO read took 11 clocks > e1000: MMIO read took 477 clocks > e1000: MMIO read took 316 clocks Interesting. On a 1667MHz CPU, this is around ~0.28us per MMIO read in the worst case. On my hardware (dual Xeon 2.4GHz), the best case I've ever seen was ~0.83us. This alone can make a hell of a difference, esp. for 60B packets. --L From manfred@colorfullife.com Sun Dec 5 10:26:16 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 10:26:21 -0800 (PST) Received: from dbl.q-ag.de (dbl.q-ag.de [213.172.117.3]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5IQE1U029278 for ; Sun, 5 Dec 2004 10:26:15 -0800 Received: from [127.0.0.2] (dbl [127.0.0.1]) by dbl.q-ag.de (8.12.3/8.12.3/Debian-6.6) with ESMTP id iB5IPmSL015073; Sun, 5 Dec 2004 19:25:49 +0100 Message-ID: <41B352AB.4020700@colorfullife.com> Date: Sun, 05 Dec 2004 19:25:47 +0100 From: Manfred Spraul User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.7.3) Gecko/20040922 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Lennert Buytenhek , Netdev , Martin Josefsson Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Content-Type: multipart/mixed; boundary="------------090208040808010503040206" X-archive-position: 12444 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: manfred@colorfullife.com Precedence: bulk X-list: netdev This is a multi-part message in MIME format. --------------090208040808010503040206 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Lennert wrote: > A dirty way, yes ;-) Open up e1000_osdep.h and do: > > -#define E1000_READ_REG(a, reg) ( \ > - readl((a)->hw_addr + \ > - (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg))) > +#define E1000_READ_REG(a, reg) ({ \ > + unsigned long s, e, d, v; \ > +\ > + (a)->mmio_reads++; \ > + rdtsc(s, d); \ > + v = readl((a)->hw_addr + \ > + (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg)); \ > + rdtsc(e, d); \ > + e -= s; \ > + printk(KERN_INFO "e1000: MMIO read took %ld clocks\n", e); \ > + printk(KERN_INFO "e1000: in process %d(%s)\n", current->pid, current->comm); \ > + dump_stack(); \ > + v; \ > +}) Too dirty: rdtsc is not serializing, thus my Opteron happily reorders the read and the rdtsc and reports 9 cycles. Attached is a longer patch that I usually use for microbenchmarks. I get around 506 cycles with it for an Opteron 2 GHz to the nForce 250 Gb nic (i.e. integrated nic in the chipset, just one HT hop): Results - zero - shift 0 40: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 :0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 1e0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 :0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 Overflows: 0. Sum: 100 >>>>>>>>>>> benchmark overhead: 82 cycles ** reading register e08920b4 Results - readl - shift 0 240: 0 0 b 0 0 0 0 0 0 0 0 0 32 0 1 1 :0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 260: 1a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 :0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 :0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 Overflows: 0. Sum: 100 >>>>>>>>>> total: 0x248, i.e. net 506 cycles. -- Manfred --------------090208040808010503040206 Content-Type: text/plain; name="patch-perftest-forcedeth" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-perftest-forcedeth" --- 2.6/drivers/net/forcedeth.c 2004-12-05 16:21:28.000000000 +0100 +++ build-2.6/drivers/net/forcedeth.c 2004-12-05 19:18:24.000000000 +0100 @@ -1500,6 +1500,131 @@ enable_irq(dev->irq); } +int p_shift = 0; + +#define STAT_TABLELEN 16384 +static unsigned long totals[STAT_TABLELEN]; +static unsigned int overflows; + +static unsigned long long stime; +static void start_measure(void) +{ + __asm__ __volatile__ ( + ".align 64\n\t" + "pushal\n\t" + "cpuid\n\t" + "popal\n\t" + "rdtsc\n\t" + "movl %%eax,(%0)\n\t" + "movl %%edx,4(%0)\n\t" + : /* no output */ + : "c"(&stime) + : "eax", "edx", "memory" ); +} + +static void end_measure(void) +{ +static unsigned long long etime; + __asm__ __volatile__ ( + "pushal\n\t" + "cpuid\n\t" + "popal\n\t" + "rdtsc\n\t" + "movl %%eax,(%0)\n\t" + "movl %%edx,4(%0)\n\t" + : /* no output */ + : "c"(&etime) + : "eax", "edx", "memory" ); + { + unsigned long time = (unsigned long)(etime-stime); + time >>= p_shift; + if(time < STAT_TABLELEN) { + totals[time]++; + } else { + overflows++; + } + } +} + +static void clean_buf(void) +{ + memset(totals,0,sizeof(totals)); + overflows = 0; +} + +static void print_line(unsigned long* array) +{ + int i; + for(i=0;i<32;i++) { + if((i%32)==16) + printk(":"); + printk("%lx ",array[i]); + } +} + +static void print_buf(char* caption) +{ + int i, other = 0; + printk("Results - %s - shift %d", + caption, p_shift); + + for(i=0;ioom_kick, jiffies + OOM_REFILL); spin_unlock_irq(&np->lock); + bench_readl(base + NvRegMulticastAddrB); + bench_readl(base + NvRegIrqStatus); return 0; out_drain: drain_ring(dev); --------------090208040808010503040206-- From sfeldma@pobox.com Sun Dec 5 12:32:31 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 12:32:35 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5KWU19005463 for ; Sun, 5 Dec 2004 12:32:31 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 918A22F9DFD; Sun, 5 Dec 2004 15:32:08 -0500 (EST) Received: from [192.168.0.19] (wbar2.sea1-4-5-062-153.sea1.dsl-verizon.net [4.5.62.153]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 144442F9C4F; Sun, 5 Dec 2004 15:32:06 -0500 (EST) Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 From: Scott Feldman Reply-To: sfeldma@pobox.com To: Peter Kjellstroem Cc: netdev@oss.sgi.com In-Reply-To: References: Content-Type: text/plain Message-Id: <1102278893.3343.116.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Sun, 05 Dec 2004 12:34:53 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12445 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Sun, 2004-12-05 at 06:04, Peter Kjellstroem wrote: > I've been doing som more tests today to try to narrow down which patch > causes my problems. So far I have this: > > 2.4.26 (5.2.30) is ok > 2.4.28 (5.4.11) is not > > 2.4.28 with 5.2.30 patched in is ok > 2.4.28 with 5.2.39 (from 2.4.27-pre1) is not > > In e1000_main.c for 5.2.39 (from 2.4.27-pre1) i found this: > > /* Change Log > * > * 5.2.39 3/12/04 > * ... > * o Back out the CSA fix for 82547 as it continues to cause > * systems lock-ups with production systems. Yes, there was a driver "fix" for this problem that has since been pulled out of the production driver because it caused lockups on some systems. I have one of these such systems. Here's the results on my systems with an 82547EI: 5.2.22 lockup 5.2.30.1 lockup 5.2.39 NETDEV reset 5.2.52 NETDEV reset 5.4.11 NETDEV reset For you, with an 82547GI, any driver between 5.2.22 and 5.2.30.1 will work because it has the "fix". See the comment in e1000_intr for these drivers. So I guess you're not out of luck if you use the 5.2.30 driver. You just can't move forward to a newer driver unless you port the "fix" forward. -scott From sfeldma@pobox.com Sun Dec 5 13:10:08 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 13:10:12 -0800 (PST) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5LA8Ov006419 for ; Sun, 5 Dec 2004 13:10:08 -0800 Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 184B12F8E28; Sun, 5 Dec 2004 16:09:46 -0500 (EST) Received: from [192.168.0.19] (wbar2.sea1-4-5-062-153.sea1.dsl-verizon.net [4.5.62.153]) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 4307A2F9BE6; Sun, 5 Dec 2004 16:09:35 -0500 (EST) Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) From: Scott Feldman Reply-To: sfeldma@pobox.com To: Martin Josefsson Cc: Lennert Buytenhek , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com In-Reply-To: References: <1101499285.1079.45.camel@jzny.localdomain> <16811.8052.678955.795327@robur.slu.se> <1101821501.1043.43.camel@jzny.localdomain> <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> Content-Type: text/plain Message-Id: <1102281141.3343.138.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2) Date: Sun, 05 Dec 2004 13:12:22 -0800 Content-Transfer-Encoding: 7bit X-archive-position: 12446 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: sfeldma@pobox.com Precedence: bulk X-list: netdev On Sun, 2004-12-05 at 07:03, Martin Josefsson wrote: > BUT if I use the above + prefetching I get this: > > 60 1483890 Ok, proof that we can get to 1.4Mpps! That's the good news. The bad news is prefetching is potentially buggy as pointed out in the freebsd note. Buggy as in the controller may hang. Sorry, I don't have details on what conditions are necessary to cause a hang. Would Martin or Lennert run these test for a longer duration so we can get some data, maybe adding in Rx. It could be that removing the Tx interrupts and descriptor write-backs, prefetching may be ok. I don't know. Intel? Also, wouldn't it be great if someone wrote a document capturing all of the accumulated knowledge for future generations? -scott From buytenh@wantstofly.org Sun Dec 5 13:26:22 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 13:26:26 -0800 (PST) Received: from xi.wantstofly.org (alephnull.demon.nl [212.238.201.82]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5LQLC3007036 for ; Sun, 5 Dec 2004 13:26:21 -0800 Received: by xi.wantstofly.org (Postfix, from userid 500) id 2CEB42B0ED; Sun, 5 Dec 2004 22:25:59 +0100 (MET) Date: Sun, 5 Dec 2004 22:25:59 +0100 From: Lennert Buytenhek To: Scott Feldman Cc: Martin Josefsson , jamal , Robert Olsson , P@draigBrady.com, mellia@prezzemolo.polito.it, e1000-devel@lists.sourceforge.net, Jorge Manuel Finochietto , Giulio Galante , netdev@oss.sgi.com Subject: Re: 1.03Mpps on e1000 (was: Re: [E1000-devel] Transmission limit) Message-ID: <20041205212559.GA4338@xi.wantstofly.org> References: <20041130134600.GA31515@xi.wantstofly.org> <1101824754.1044.126.camel@jzny.localdomain> <20041201001107.GE4203@xi.wantstofly.org> <1101863399.4663.54.camel@sfeldma-mobl.dsl-verizon.net> <20041201182943.GA14470@xi.wantstofly.org> <20041201213550.GF14470@xi.wantstofly.org> <1101967983.4782.9.camel@localhost.localdomain> <20041205145051.GA647@xi.wantstofly.org> <1102281141.3343.138.camel@sfeldma-mobl.dsl-verizon.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1102281141.3343.138.camel@sfeldma-mobl.dsl-verizon.net> User-Agent: Mutt/1.4.1i X-archive-position: 12447 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: buytenh@wantstofly.org Precedence: bulk X-list: netdev On Sun, Dec 05, 2004 at 01:12:22PM -0800, Scott Feldman wrote: > Would Martin or Lennert run these test for a longer duration so we can > get some data, maybe adding in Rx. It could be that removing the Tx > interrupts and descriptor write-backs, prefetching may be ok. I don't > know. Intel? What your patch does is (correct me if I'm wrong): - Masking TXDW, effectively preventing it from delivering TXdone ints. - Not setting E1000_TXD_CMD_IDE in the TXD command field, which causes the chip to 'ignore the TIDV' register, which is the 'TX Interrupt Delay Value'. What exactly does this? - Not setting the "Report Packet Sent"/"Report Status" bits in the TXD command field. Is this the equivalent of the TXdone interrupt? Just exactly which bit avoids the descriptor writeback? I'm also a bit worried that only freeing packets 1ms later will mess up socket accounting and such. Any ideas on that? > Also, wouldn't it be great if someone wrote a document capturing all of > the accumulated knowledge for future generations? I'll volunteer for that. --L From cap@nsc.liu.se Sun Dec 5 13:40:06 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 13:40:12 -0800 (PST) Received: from papput.nsc.liu.se (ns2.nsc.liu.se [130.236.101.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5Le5pG007591 for ; Sun, 5 Dec 2004 13:40:06 -0800 Received: from mail.nsc.liu.se (mail.nsc.liu.se [130.236.101.49]) by papput.nsc.liu.se (Postfix) with ESMTP id 3A57B1C31EF; Sun, 5 Dec 2004 22:39:42 +0100 (CET) Date: Sun, 5 Dec 2004 22:39:42 +0100 (CET) From: Peter Kjellstroem To: Scott Feldman Cc: netdev@oss.sgi.com Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 In-Reply-To: <1102278893.3343.116.camel@sfeldma-mobl.dsl-verizon.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12448 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cap@nsc.liu.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Scott Feldman wrote: > On Sun, 2004-12-05 at 06:04, Peter Kjellstroem wrote: > > * > > * 5.2.39 3/12/04 > > * ... > > * o Back out the CSA fix for 82547 as it continues to cause > > * systems lock-ups with production systems. > Yes I found that out and verified it earlier today. The fix in question is basically if'ed irq_enable/disable around a small chunk of code like this: if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) e1000_irq_disable(adapter); this is the original fix and triggers for both e1000_82547 (your 547EI right?) and e1000_82547_rev_2 (my 547GI). If your NIC can't stand the fix and mine needs it isn't the obvious solution the following? if(hw->mac_type == e1000_82547_rev_2) e1000_irq_disable(adapter); I put this (and corresponding enable chung) in the current e1000 in 2.4.28 and it works lika a charm (and shouldn't bite your 82547EI). The rev2 part, 82547GI, pci_id 1075. Is present in a vast number of new systems including all (as far as I know) Dell 700, 750, 1750, 1700 and all Supermicro p4SC mobos. Best Regards, Peter > Yes, there was a driver "fix" for this problem that has since been > pulled out of the production driver because it caused lockups on some > systems. I have one of these such systems. Here's the results on my > systems with an 82547EI: > > 5.2.22 lockup > 5.2.30.1 lockup > 5.2.39 NETDEV reset > 5.2.52 NETDEV reset > 5.4.11 NETDEV reset > > For you, with an 82547GI, any driver between 5.2.22 and 5.2.30.1 will > work because it has the "fix". See the comment in e1000_intr for these > drivers. > > So I guess you're not out of luck if you use the 5.2.30 driver. You > just can't move forward to a newer driver unless you port the "fix" > forward. > > -scott > > > -- ------------------------------------------------------------ Peter Kjellstroem | E-mail: cap@nsc.liu.se National Supercomputer Centre | Office: +46(0)13 281492 Linkoeping University | Fax : +46(0)13 282535 SE-581 83 Linkoeping | Sweden | http://www.nsc.liu.se From cap@nsc.liu.se Sun Dec 5 13:52:40 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 13:52:44 -0800 (PST) Received: from papput.nsc.liu.se (ns2.nsc.liu.se [130.236.101.9]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5LqeOo008099 for ; Sun, 5 Dec 2004 13:52:40 -0800 Received: from mail.nsc.liu.se (mail.nsc.liu.se [130.236.101.49]) by papput.nsc.liu.se (Postfix) with ESMTP id 0E6801C31EF; Sun, 5 Dec 2004 22:52:18 +0100 (CET) Date: Sun, 5 Dec 2004 22:52:18 +0100 (CET) From: Peter Kjellstroem To: Scott Feldman Cc: netdev@oss.sgi.com Subject: Re: e1000>5.2.30 unstable with InterruptThrottleRate=0 In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 12449 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: cap@nsc.liu.se Precedence: bulk X-list: netdev On Sun, 5 Dec 2004, Peter Kjellstroem wrote: > On Sun, 5 Dec 2004, Scott Feldman wrote: > > > On Sun, 2004-12-05 at 06:04, Peter Kjellstroem wrote: > > > * > > > * 5.2.39 3/12/04 > > > * ... > > > * o Back out the CSA fix for 82547 as it continues to cause > > > * systems lock-ups with production systems. > > > > Yes I found that out and verified it earlier today. The fix in question is > basically if'ed irq_enable/disable around a small chunk of code like this: > > if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) > e1000_irq_disable(adapter); > > this is the original fix and triggers for both e1000_82547 (your 547EI > right?) and e1000_82547_rev_2 (my 547GI). If your NIC can't stand the fix > and mine needs it isn't the obvious solution the following? > > if(hw->mac_type == e1000_82547_rev_2) > e1000_irq_disable(adapter); > And here's a trivial patch for it (against 2.4.28): /Peter --- linux-2.4.28-cap1p/drivers/net/e1000/e1000_main.c Wed Nov 17 12:54:21 2004 +++ linux-2.4.28-cap5p/drivers/net/e1000/e1000_main.c Sun Dec 5 22:47:57 2004 @@ -2124,10 +2124,19 @@ e1000_intr(int irq, void *data, struct p __netif_rx_schedule(netdev); } #else + /* e1000_irq_disable/enable pair added back (removed in 2.4.27-pre1) */ + /* fixed needed for 82547GI (e1000_82547_rev_2) Dell 750, P4SCi */ + /* reliable operation with ITR=0 */ + if(hw->mac_type == e1000_82547_rev_2) + e1000_irq_disable(adapter); + for(i = 0; i < E1000_MAX_INTR; i++) if(unlikely(!e1000_clean_rx_irq(adapter) & !e1000_clean_tx_irq(adapter))) break; + + if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) + e1000_irq_enable(adapter); #endif return IRQ_HANDLED; From kdorn@lilah.hetzel.org Sun Dec 5 14:32:20 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 14:32:29 -0800 (PST) Received: from lilah.hetzel.org (lilah.hetzel.org [199.250.128.2]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5MWJpF009145 for ; Sun, 5 Dec 2004 14:32:20 -0800 Received: from lilah.hetzel.org (localhost.localdomain [127.0.0.1]) by lilah.hetzel.org (8.12.11/8.12.8) with ESMTP id iB5NtRkj023027; Sun, 5 Dec 2004 18:55:29 -0500 Received: (from kdorn@localhost) by lilah.hetzel.org (8.12.11/8.12.8/Submit) id iB5NtKNP022968; Sun, 5 Dec 2004 18:55:20 -0500 Date: Sun, 5 Dec 2004 18:55:20 -0500 From: Dorn Hetzel To: Francois Romieu Cc: linux-kernel@vger.kernel.org, netdev@oss.sgi.com, jgarzik@pobox.com, dorn@hetzel.org Subject: Re: r8169.c Message-ID: <20041205235519.GA21885@lilah.hetzel.org> References: <20041119162920.GA26836@lilah.hetzel.org> <20041119201203.GA13522@electric-eye.fr.zoreil.com> <20041120003754.GA32133@lilah.hetzel.org> <20041120002946.GA18059@electric-eye.fr.zoreil.com> <20041122181307.GA3625@lilah.hetzel.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041122181307.GA3625@lilah.hetzel.org> User-Agent: Mutt/1.4i X-archive-position: 12450 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: kernel@dorn.hetzel.org Precedence: bulk X-list: netdev On Mon, Nov 22, 2004 at 01:13:07PM -0500, Dorn Hetzel wrote: > On Sat, Nov 20, 2004 at 01:29:46AM +0100, Francois Romieu wrote: > > > Once you have applied one of the patch above, the patch below will improve > > your "transmit timed out" (please apply in order and enable NAPI): > > http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.10-rc2-mm1/r8169-250.patch > > http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.10-rc2-mm1/r8169-255.patch > > > > If things perform better you may want to use bigger frames and apply as > > well r8169-260.patch and r8169-265.patch. > > http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.10-rc2-mm1/r8169-260.patch > > http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.10-rc2-mm1/r8169-265.patch > > I was wondering if the above 4 patches have made it into one of the rc? releases, or at least a rc?-mm? ? Regards, -Dorn From anton@ozlabs.org Sun Dec 5 15:27:07 2004 Received: with ECARTIS (v1.0.0; list netdev); Sun, 05 Dec 2004 15:27:17 -0800 (PST) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iB5NR6Sm010454 for ; Sun, 5 Dec 2004 15:27:06 -0800 Received: by ozlabs.org (Postfix, from userid 1010) id C72722BE83; Mon, 6 Dec 2004 10:26:38 +1100 (EST) Date: Mon, 6 Dec 2004 10:22:26 +1100 From: Anton Blanchard To: netdev@oss.sgi.com Cc: ganesh.venkatesan@intel.com, jesse.brandeburg@intel.com, john.ronciak@intel.com Subject: TSO + e1000 Message-ID: <20041205232226.GA5757@krispykreme.ozlabs.ibm.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="ZPt4rx8FFjLCG7dd" Content-Disposition: inline User-Agent: Mutt/1.5.6+20040907i X-archive-position: 12451 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: anton@samba.org Precedence: bulk X-list: netdev --ZPt4rx8FFjLCG7dd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, I had another look at our TSO issues. A few things: 1. tcpdump doesnt report local TSO packets, it simply prints bad-len. I think this is because the e1000 driver is zeroing out the IP header length in e1000_tso: skb->nh.iph->tot_len = 0; Does the card require this for TSO to operate? Ive worked around it in tcpdump for the time being. 2. TSO never gets reenabled after a retransmit. With long lasting connections this hurts, we get one retransmit and its all over. Not so important for a web server, but we have big CIFS (windows networking) servers where connections can last days. When its working TSO gives us a nice bump here. 3. Im getting e1000 rx fifo overruns on the receive side. Doubling the flow control watermarks seems to help. Due to bug 2, whenever we get an rx fifo overrun TSO gets disabled on that connection. 4. Im seeing some strange stuff during connection startup. I have bumped win_divisor to 2 (so TSO gets enabled in a reasonable time). There are nice big send and receive socket buffers (512k). Id expect TSO to cut in fairly quickly. The both direction test is as Id expect. It takes a few packets for our slow start window to grow and then we start sending TSO packets (evidenced by the first bad-len) packet. Now if we do a single direction test it takes forever for TSO to kick in. At the moment Im not sure why this is happening, tcp_current_mss seems to grow correctly in both cases. Is there somewhere else we are capping TSO packets? Finally, I set divisor to 1 and you can see for both tests TSO cuts right in. I cant explain the big difference between divisor = 1 and divisor = 2 yet, any thoughts? Anton --ZPt4rx8FFjLCG7dd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=divisor_2_both 22:30:12.084166 IP 10.0.0.2.32822 > 10.0.0.1.12865: S 4036823371:4036823371(0) win 5840 22:30:12.084438 IP 10.0.0.1.12865 > 10.0.0.2.32822: S 4047144990:4047144990(0) ack 4036823372 win 5792 22:30:12.084462 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 1 win 23 22:30:12.084484 IP 10.0.0.2.32822 > 10.0.0.1.12865: . 1:1449(1448) ack 1 win 23 22:30:12.084491 IP 10.0.0.2.32822 > 10.0.0.1.12865: . 1449:2897(1448) ack 1 win 23 22:30:12.084509 IP 10.0.0.2.32822 > 10.0.0.1.12865: P 2897:4345(1448) ack 1 win 23 22:30:12.084688 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 1449 win 34 22:30:12.084690 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 2897 win 46 22:30:12.084691 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 4345 win 57 22:30:12.084721 IP 10.0.0.2.32822 > 10.0.0.1.12865: . 4345:5793(1448) ack 1 win 23 22:30:12.084726 IP 10.0.0.2.32822 > 10.0.0.1.12865: . 5793:7241(1448) ack 1 win 23 22:30:12.084938 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 5793 win 68 22:30:12.084939 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 7241 win 80 22:30:12.084975 IP 10.0.0.2.32822 > 10.0.0.1.12865: P 7241:8677(1436) ack 1 win 23 22:30:12.085187 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 8677 win 91 22:30:12.085188 IP 10.0.0.1.12865 > 10.0.0.2.32822: . 1:1449(1448) ack 8677 win 91 22:30:12.085189 IP 10.0.0.1.12865 > 10.0.0.2.32822: . 1449:2897(1448) ack 8677 win 91 22:30:12.085190 IP 10.0.0.1.12865 > 10.0.0.2.32822: P 2897:4345(1448) ack 8677 win 91 22:30:12.085218 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 1449 win 35 22:30:12.085228 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 2897 win 46 22:30:12.085234 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 4345 win 57 22:30:12.085438 IP 10.0.0.1.12865 > 10.0.0.2.32822: . 4345:5793(1448) ack 8677 win 91 22:30:12.085439 IP 10.0.0.1.12865 > 10.0.0.2.32822: . 5793:7241(1448) ack 8677 win 91 22:30:12.085464 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 5793 win 69 22:30:12.085474 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 7241 win 80 22:30:12.085687 IP 10.0.0.1.12865 > 10.0.0.2.32822: P 7241:8677(1436) ack 8677 win 91 22:30:12.085705 IP 10.0.0.2.32822 > 10.0.0.1.12865: . ack 8677 win 91 22:30:12.087676 IP bad-len 0 22:30:12.087687 IP bad-len 0 22:30:12.087937 IP 10.0.0.1.12865 > 10.0.0.2.32822: . ack 14469 win 136 --ZPt4rx8FFjLCG7dd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="divisor_2_single.wGmSv6" 22:30:12.096111 IP 10.0.0.2.32824 > 10.0.0.1.32823: S 4033033338:4033033338(0) win 5840 22:30:12.096308 IP 10.0.0.1.32823 > 10.0.0.2.32824: S 4044444323:4044444323(0) ack 4033033339 win 5792 22:30:12.096327 IP 10.0.0.2.32824 > 10.0.0.1.32823: . ack 1 win 23 22:30:12.096354 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 1:1449(1448) ack 1 win 23 22:30:12.096362 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 1449:2897(1448) ack 1 win 23 22:30:12.096377 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 2897:4345(1448) ack 1 win 23 22:30:12.096558 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 1449 win 34 22:30:12.096559 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 2897 win 46 22:30:12.096560 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 4345 win 57 22:30:12.096664 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 4345:5793(1448) ack 1 win 23 22:30:12.096670 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 5793:7241(1448) ack 1 win 23 22:30:12.096685 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 7241:8689(1448) ack 1 win 23 22:30:12.096691 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 8689:10137(1448) ack 1 win 23 22:30:12.096706 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 10137:11585(1448) ack 1 win 23 22:30:12.096711 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 11585:13033(1448) ack 1 win 23 22:30:12.096934 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 5793 win 68 22:30:12.096966 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 13033:14481(1448) ack 1 win 23 22:30:12.096970 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 14481:15929(1448) ack 1 win 23 22:30:12.096935 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 7241 win 80 22:30:12.096984 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 15929:17377(1448) ack 1 win 23 22:30:12.096988 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 17377:18825(1448) ack 1 win 23 22:30:12.096936 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 8689 win 91 22:30:12.097004 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 18825:20273(1448) ack 1 win 23 22:30:12.097008 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 20273:21721(1448) ack 1 win 23 22:30:12.096937 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 10137 win 102 22:30:12.097021 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 21721:23169(1448) ack 1 win 23 22:30:12.097026 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 23169:24617(1448) ack 1 win 23 22:30:12.096938 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 11585 win 114 22:30:12.097040 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 24617:26065(1448) ack 1 win 23 22:30:12.097043 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 26065:27513(1448) ack 1 win 23 22:30:12.096938 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 13033 win 125 22:30:12.097060 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 27513:28961(1448) ack 1 win 23 22:30:12.097066 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 28961:30409(1448) ack 1 win 23 22:30:12.097183 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 14481 win 136 22:30:12.097216 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 30409:31857(1448) ack 1 win 23 22:30:12.097221 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 31857:33305(1448) ack 1 win 23 22:30:12.097184 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 15929 win 148 22:30:12.097240 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 33305:34753(1448) ack 1 win 23 22:30:12.097244 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 34753:36201(1448) ack 1 win 23 22:30:12.097185 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 17377 win 159 22:30:12.097258 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 36201:37649(1448) ack 1 win 23 22:30:12.097262 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 37649:39097(1448) ack 1 win 23 22:30:12.097186 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 18825 win 170 22:30:12.097276 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 39097:40545(1448) ack 1 win 23 22:30:12.097280 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 40545:41993(1448) ack 1 win 23 22:30:12.097187 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 20273 win 181 22:30:12.097293 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 41993:43441(1448) ack 1 win 23 22:30:12.097297 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 43441:44889(1448) ack 1 win 23 22:30:12.097187 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 21721 win 193 22:30:12.097311 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 44889:46337(1448) ack 1 win 23 22:30:12.097316 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 46337:47785(1448) ack 1 win 23 22:30:12.097309 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 23169 win 204 22:30:12.097344 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 47785:49233(1448) ack 1 win 23 22:30:12.097348 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 49233:50681(1448) ack 1 win 23 22:30:12.097310 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 24617 win 215 22:30:12.097360 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 50681:52129(1448) ack 1 win 23 22:30:12.097364 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 52129:53577(1448) ack 1 win 23 22:30:12.097311 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 26065 win 227 22:30:12.097375 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 53577:55025(1448) ack 1 win 23 22:30:12.097378 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 55025:56473(1448) ack 1 win 23 22:30:12.097311 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 27513 win 238 22:30:12.097390 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 56473:57921(1448) ack 1 win 23 22:30:12.097393 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 57921:59369(1448) ack 1 win 23 22:30:12.097312 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 28961 win 249 22:30:12.097405 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 59369:60817(1448) ack 1 win 23 22:30:12.097408 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 60817:62265(1448) ack 1 win 23 22:30:12.097313 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 30409 win 261 22:30:12.097419 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 62265:63713(1448) ack 1 win 23 22:30:12.097423 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 63713:65161(1448) ack 1 win 23 22:30:12.097434 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 31857 win 272 22:30:12.097477 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 65161:66609(1448) ack 1 win 23 22:30:12.097482 IP 10.0.0.2.32824 > 10.0.0.1.32823: . 66609:68057(1448) ack 1 win 23 22:30:12.097435 IP 10.0.0.1.32823 > 10.0.0.2.32824: . ack 33305 win 283 22:30:12.097495 IP 10.0.0.2.32824 > 10.0.0.1.32823: P 68057:69505(1448) ack 1 win 23 22:30:12.097497 IP 10.0.0.2.32824 > 10.0.0.1.32823: .