Subject: PR/30560 CVS commit: src/sys/dev/ic
To: None <tsutsui@NetBSD.org, gnats-admin@netbsd.org,>
From: Izumi Tsutsui <tsutsui@netbsd.org>
List: netbsd-bugs
Date: 12/08/2007 15:45:02
The following reply was made to PR port-alpha/30560; it has been noted by GNATS.

From: Izumi Tsutsui <tsutsui@netbsd.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: PR/30560 CVS commit: src/sys/dev/ic
Date: Sat,  8 Dec 2007 15:45:44 +0000 (UTC)

 Module Name:	src
 Committed By:	tsutsui
 Date:		Sat Dec  8 15:45:43 UTC 2007
 
 Modified Files:
 	src/sys/dev/ic: i82557.c i82557reg.h i82557var.h
 
 Log Message:
 Pull several fixes from OpenBSD's fxp.c:
 
 Rev 1.41:
 > use a nop with I bit set at the end of the tx chain.  This avoids a race
 > between status update and clearing the suspend bit on machines which can't
 > write data smaller than 32bits at a time.
 This should fix PR port-alpha/30560.
 
 Rev 1.50:
 > Fix nasty bug where driver would not correctly catch and handle an rnr
 > condition when it was due to the the recieve buffers being exhausted with
 > no packet transmits during that time. Symptom was that the fxp would
 > simply stop interrupting for the next 15 seconds until the watchdog kicked
 > in and reset the chip due to 15 seconds of inactivity, making the fxp very
 > poorly behaved when hammered on hard.
 
 Rev 1.61:
 > Defer reinitialisation of the RU until after the interrupt handler has had
 > a chance to process all pending packets, otherwise the chip may overwrite
 > their mbuf clusters after we have freed them.
 >
 > Eliminates a race that can cause random pool corruption when reconfiguring
 > an interface under heavy network load.
 
 And one more change for RX sanity:
 - put RU into suspend when the last RFA is processed.
 
 These RNR/RU changes may fix pool corruption problems on fxp.
 
 Tested on AlphaPC164 and i386 with i82559 and i82550.
 
 
 To generate a diff of this commit:
 cvs rdiff -r1.104 -r1.105 src/sys/dev/ic/i82557.c
 cvs rdiff -r1.18 -r1.19 src/sys/dev/ic/i82557reg.h
 cvs rdiff -r1.35 -r1.36 src/sys/dev/ic/i82557var.h
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.