Find a file
Pyun YongHyeon fee4d88e0f Fix "Duplicate mbuf free panic".
The cause of "Duplicate mbuf free panic" is in the programming
error of hme_load_txmbuf(). The code path of the panic is the
following.

1. Due to unknown reason DMA engine was freezed. So TX descritors
   of HME become full and the last failed attempt to transmit a
   packet had set its associated mbuf address to hme_txdesc
   structure. Also the failed packet is requeued into interface
   queue structure in order to retrasmit it when there are more
   available TX descritors.

2. Since DMA engine was freezed, if_timer starts to decrement its
   counter. When if_timer expires it tries to reset HME. During
   the reset phase, hme_meminit() is called and it frees all
   associated mbuf with descriptors. The last failed mbuf is also
   freed here.

3. After HME reset completed, HME starts to retransmit packets
   by dequeing the first packet in interface queue.(Note! the
   packet was already freed in hme_meminit()!)

4. When a TX completion interrupt is posted by the HME, driver
   tries to free the successfylly transmitted mbuf. Since the
   mbuf was freed in step2, now we get "Duplicate mbuf free panic".

However, the real cause is in DMA engine freeze. Since no fatal
errors reported via interrupts, there might be other cause of
the freeze. I tried hard to understand the cause of DMA engine
freeze but couldn't find any clues. It seems that the freeze
happens under very high network loads(e.g. 7.5-8.0 MB/s TX speed).

Though this fix is not enough to eliminate DMA engine freeze it's
better than panic.

Reported by:	jhb via sparc64 ML
2005-02-02 08:35:11 +00:00
bin Use LC_MESSAGES locale category instead of value of LANG environment variable 2005-02-01 08:48:15 +00:00
contrib This commit was generated by cvs2svn to compensate for changes in r141098, 2005-02-01 10:16:17 +00:00
crypto
etc Add a comment which explain why we need to use special function instead of 2005-01-30 11:04:13 +00:00
games Ignore case and all non-word characters, and remove more duplicates. 2005-02-01 16:34:38 +00:00
gnu More math functions. 2005-01-26 14:23:31 +00:00
include implement AI_NUMERICSERV (as defined in RFC3493). 2005-01-27 14:45:11 +00:00
kerberos5
lib Cleanup prototypes and remove dead code 2005-02-01 16:04:55 +00:00
libexec Let bsd.prog.mk set SRCS and MAN to their default values. 2005-01-28 16:08:11 +00:00
release The current version of mkisofs is warning us that the -P option will 2005-01-30 21:10:52 +00:00
rescue Ignoring MAKEFLAGS in rev. 1.15 was a very bad idea. This causes 2005-01-20 10:43:43 +00:00
sbin Remove unsigned casts. 2005-01-31 04:45:45 +00:00
secure
share Improve English a little. 2005-01-30 13:27:59 +00:00
sys Fix "Duplicate mbuf free panic". 2005-02-02 08:35:11 +00:00
tools Add to CFLAGS, rather than overriding it. Use LDFLAGS for the -L option, 2005-02-01 09:26:34 +00:00
usr.bin Convert several typedefs from beeing pointers to structs to be the structs 2005-02-02 07:36:18 +00:00
usr.sbin Utilize bsd.files.mk. 2005-01-28 16:22:46 +00:00
COPYRIGHT
MAINTAINERS
Makefile
Makefile.inc1 In crunchgen(1), when calling make(1), don't redirect stderr to stdout, 2005-01-20 10:49:03 +00:00
README
UPDATING

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The
``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html