From owner-cvs-src@FreeBSD.ORG Tue Feb 7 09:44:58 2006 Return-Path: X-Original-To: cvs-src@freebsd.org Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AD20D16A422; Tue, 7 Feb 2006 09:44:58 +0000 (GMT) (envelope-from bde@zeta.org.au) Received: from mailout1.pacific.net.au (mailout1.pacific.net.au [61.8.0.84]) by mx1.FreeBSD.org (Postfix) with ESMTP id 031CA43D45; Tue, 7 Feb 2006 09:44:57 +0000 (GMT) (envelope-from bde@zeta.org.au) Received: from mailproxy1.pacific.net.au (mailproxy1.pacific.net.au [61.8.0.86]) by mailout1.pacific.net.au (8.13.4/8.13.4/Debian-3) with ESMTP id k179iiAG022797; Tue, 7 Feb 2006 20:44:45 +1100 Received: from epsplex.bde.org (katana.zip.com.au [61.8.7.246]) by mailproxy1.pacific.net.au (8.13.4/8.13.4/Debian-3) with ESMTP id k179ig9H022656; Tue, 7 Feb 2006 20:44:42 +1100 Date: Tue, 7 Feb 2006 20:44:42 +1100 (EST) From: Bruce Evans X-X-Sender: bde@epsplex.bde.org To: Nate Lawson In-Reply-To: <43E7DAC2.8060101@root.org> Message-ID: <20060207201220.W4040@epsplex.bde.org> References: <200602020958.k129wWtc066930@repoman.freebsd.org> <20060202100637.GB24350@lath.rinet.ru> <20060205235817.GQ5499@cs.rice.edu> <20060206221141.GA57775@lath.rinet.ru> <43E7CBD5.5090203@root.org> <20060206223436.GB57775@lath.rinet.ru> <43E7D662.6000608@root.org> <43E7DAC2.8060101@root.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Alan Cox , src-committers@freebsd.org, Oleg Bulyzhin , cvs-all@freebsd.org, cvs-src@freebsd.org Subject: Re: cvs commit: src/sys/dev/bge if_bge.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Feb 2006 09:44:58 -0000 On Mon, 6 Feb 2006, Nate Lawson wrote: > Nate Lawson wrote: >> Oleg Bulyzhin wrote: >> >>> On Mon, Feb 06, 2006 at 02:21:09PM -0800, Nate Lawson wrote: >>> >>>> Oleg Bulyzhin wrote: >>>> >>>>> nq = q->m_nextpkt; >>>>> q->m_nextpkt = NULL; >>>>> m->m_pkthdr.csum_flags &= q->m_pkthdr.csum_flags; >>>>> - m->m_pkthdr.csum_data += q->m_pkthdr.csum_data; >>>>> + sum = m->m_pkthdr.csum_data + q->m_pkthdr.csum_data; >>>>> + m->m_pkthdr.csum_data = (sum & 0xffff) + (sum >> 16); >>>>> m_cat(m, q); >>>>> } >>>>> #ifdef MAC > ... > Sam Leffler mentioned this comment from NetBSD would be helpful. Might you > add it to clear up misunderstandings like I had? > > sys/mbuf.h has useful comments not found in the freebsd file: > ... > * Note for in-bound TCP/UDP checksums, we expect the csum_data to NOT > * be bit-wise inverted (the final step in the calculation of an IP > * checksum) -- this is so we can accumulate the checksum for fragmented > * packets during reassembly. > */ This almost makes the carry-folding (including the above change) unnecessary too. csum_data can accumulate at least 64K terms each less than 0x10000 before it might have a carry out of its 32-bit int. I think there can't be 64K fragments, so the unpatched version would work if the final step did the carry-folding and no intermediate step assumes that csum_data < 0x10000. I couldn't find any final or intermediate steps that would cause problems. Bruce