From owner-cvs-src@FreeBSD.ORG Mon Feb 6 22:35:59 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 DB46016A420; Mon, 6 Feb 2006 22:35:59 +0000 (GMT) (envelope-from oleg@lath.rinet.ru) Received: from lath.rinet.ru (lath.rinet.ru [195.54.192.90]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9D31943D60; Mon, 6 Feb 2006 22:35:57 +0000 (GMT) (envelope-from oleg@lath.rinet.ru) Received: from lath.rinet.ru (localhost [127.0.0.1]) by lath.rinet.ru (8.13.4/8.13.4) with ESMTP id k16MYa7K058240 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 Feb 2006 01:34:36 +0300 (MSK) (envelope-from oleg@lath.rinet.ru) Received: (from oleg@localhost) by lath.rinet.ru (8.13.4/8.13.4/Submit) id k16MYajB058239; Tue, 7 Feb 2006 01:34:36 +0300 (MSK) (envelope-from oleg) Date: Tue, 7 Feb 2006 01:34:36 +0300 From: Oleg Bulyzhin To: Nate Lawson Message-ID: <20060206223436.GB57775@lath.rinet.ru> 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> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <43E7CBD5.5090203@root.org> User-Agent: Mutt/1.5.11 Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, Alan Cox , cvs-all@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: Mon, 06 Feb 2006 22:36:00 -0000 On Mon, Feb 06, 2006 at 02:21:09PM -0800, Nate Lawson wrote: > Oleg Bulyzhin wrote: > >On Sun, Feb 05, 2006 at 05:58:17PM -0600, Alan Cox wrote: > >>Unfortunately, it also breaks NFS over UDP. Let me know if you need > >>details. > >> > >>Alan > > > > > >Fix attached. It's not bge problem it's five years old bug in ip_reass(). > > > >Index: ip_input.c > >=================================================================== > >RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v > >retrieving revision 1.314 > >diff -u -r1.314 ip_input.c > >--- ip_input.c 2 Feb 2006 03:13:15 -0000 1.314 > >+++ ip_input.c 6 Feb 2006 21:44:45 -0000 > >@@ -982,10 +982,12 @@ > > nq = q->m_nextpkt; > > q->m_nextpkt = NULL; > > for (q = nq; q != NULL; q = nq) { > >+ int sum; > > It's not good to declare local variables in the for() context. It's a > style(9) bug and also costs an extra instruction or two (to decrement > the stack pointer twice). You are right, but i was not going to commit this as is. It's just 'proof of concept' fix. > > > 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 > > I'm not familiar with this code. So m->m_pkthdr.csum_data is 32 bits? > Couldn't the same thing be achieved with making it 16 bits since the add > will wrap normally? It will not work cause it's not just a trivial sum it's so called "1's complement sum" (refer rfc1071 for details). > > -- > Nate -- Oleg.