Hi! That's actually a really good catch!
yongari/jfv, what do you think? Adrian On 8 March 2012 16:01, Andreas Longwitz <longw...@incore.de> wrote: > Hi, > > recently I installed FreeBSD 8.2 Stable on some older machines with > Intel 82550 and 82550C and found that the loading of microcode with the > parameter link0 in the ifconfig command did not work anymore. The reason > for this is the commit r223608 for if_fxp.c with the comment: > > Disable microcode loading for 82550 and 82550C controllers. Loading > the microcode caused SCB timeouts. > > I do not agree with this motivation and try to explain why. > > Without loading the microcode on 82550(C) there is a problem with > mount_nfs -U server:/bigdisk /mnt > cp /mnt/bigfile bigfile > > NFS with UDP works with 8 KB blocks and the cp hangs after some seconds > and you see SCB messages on the console. The reason is the TCO bug of > the hardware mentioned in rcvbundl.h. This old hardware bug disappears > after loading the microcode. > > All my hardware run without problems in FreeBSD 4.11, loading of > microcode is done by the function fxp_load_ucode(). Later there was > trouble with the loading of microcode, see kern/103332 and kern/118909. > I have posted my solution for the problem to kern/103332 but > unfortunately this PR is not online anymore and so I repeat my > considerations here. > > The difference of the function fxp_load_ucode() of FreeBSD 4.11 and > later versions is that this function in 4.11 has an own private memory > buffer for construction of the microcode message. In later versions > fxp_load_ucode() must use a memory buffer that is shared with other > parts of the driver and these other parts of the driver have problems if > the shared memory buffer was used by fxp_load_ucode() before. Thats the > reason for "Loading microcode caused SCB timeouts". > > Therefore my proposal is to revert r223608 and to clean the used shared > buffer at the end of the function fxp_load_ucode(). The following patch > works for me for years now: > > --- if_fxp.c.orig 2012-01-26 12:43:09.000000000 +0100 > +++ if_fxp.c 2012-03-08 23:41:32.000000000 +0100 > @@ -3085,6 +3081,7 @@ > sc->tunable_int_delay, > uc->bundle_max_offset == 0 ? 0 : sc->tunable_bundle_max); > sc->flags |= FXP_FLAG_UCODE; > + bzero(cbp, (uc->length + 2) * sizeof(uint32_t)); > } > > > -- > Dr. Andreas Longwitz > > Data Service GmbH > Beethovenstr. 2A > 23617 Stockelsdorf > Amtsgericht Lübeck, HRB 318 BS > Geschäftsführer: Wilfried Paepcke, Dr. Andreas Longwitz, Josef Flatau > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"