freebsd-dev/sys
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
..
alpha add cpu_idle support for 21066A based lca systems 2005-01-31 23:07:42 +00:00
amd64 o Split out kernel part of execve(2) syscall into two parts: one that 2005-01-29 23:12:00 +00:00
arm Sort functions. 2005-02-01 06:36:27 +00:00
boot Insert an explicit McAfee license, as we use a stock two-clause BSD 2005-01-30 14:58:00 +00:00
cam Boot away another stackgap (one of the lest ones in linuxlator/i386) by 2005-01-30 08:12:37 +00:00
coda Make filesystems get rid of their own vnodes vnode_pager object in 2005-01-28 14:42:17 +00:00
compat Boot away another stackgap (one of the lest ones in linuxlator/i386) by 2005-01-30 08:12:37 +00:00
conf Add a IEEE488 driver for PCIIA compatible cards. 2005-02-01 16:59:23 +00:00
contrib Use the packet's address family instead of the rule's when selecting a 2005-01-20 18:07:35 +00:00
crypto Start the dreaded NOFOO -> NO_FOO conversion. 2004-12-21 08:47:35 +00:00
ddb Start each of the license/copyright comments with /*- 2005-01-06 01:34:41 +00:00
dev Fix "Duplicate mbuf free panic". 2005-02-02 08:35:11 +00:00
doc Experimental support for using doxygen to generate kernel documentation. 2004-07-11 16:13:57 +00:00
fs Unbreak a few filesystems for which vnode_create_vobject() wasn't being 2005-01-29 16:23:39 +00:00
gdb /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 18:27:30 +00:00
geom When dumping to a unpartitioned disk, make sure to chop the 2005-01-29 16:49:43 +00:00
gnu Make filesystems get rid of their own vnodes vnode_pager object in 2005-01-28 14:42:17 +00:00
i4b /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i386 o Split out kernel part of execve(2) syscall into two parts: one that 2005-01-29 23:12:00 +00:00
ia64 nit in /*- 2005-01-31 08:16:45 +00:00
isa Protect against wrapping. This appaers to fix some hangs that people 2005-01-23 03:03:58 +00:00
isofs/cd9660 Unbreak a few filesystems for which vnode_create_vobject() wasn't being 2005-01-29 16:23:39 +00:00
kern - Or MPSAFE with the correct set of flags in stat(). This affected only 2005-02-01 23:43:46 +00:00
libkern Because the argument to strvalid() is a size_t, use a size_t to iterate 2005-01-29 13:34:22 +00:00
modules Build "digi" on i386, pc98, and amd64 only. 2005-01-30 19:41:12 +00:00
net Log changes of link state. 2005-01-30 12:57:47 +00:00
net80211 supply a default ic_reset method for drivers; the ioctl code expect this 2005-01-27 17:39:17 +00:00
netatalk /* -> /*- for license, minor formatting changes, insert COPYRIGHT into files 2005-01-07 02:35:34 +00:00
netatm /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
netgraph In case of various tunneling protocols, mbuf may pass several interfaces 2005-02-01 14:07:05 +00:00
netinet Update an additional reference to the rate of ISN tick callouts that was 2005-01-31 01:35:01 +00:00
netinet6 we don't need to make fake sockaddr_in6 to compare subject address. 2005-01-21 18:12:46 +00:00
netipsec /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
netipx Mark the IPX netisr as MPSAFE so that inbound IPX traffic is processed 2005-01-09 07:34:55 +00:00
netkey fixed an unexpected addr/port matching failure in IPv6 SA management 2005-01-10 13:06:42 +00:00
netnatm /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
netncp /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
netsmb /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
nfs /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
nfs4client Remove unused cred arg from nfs_vinvalbuf() and many bogus arguments 2005-01-24 12:31:06 +00:00
nfsclient Style cleanup for O_DIRECT sysctl comment introduced in nfs_vnops.c:1.242. 2005-01-29 23:19:08 +00:00
nfsserver Don't try to create vnode_pager objects on other filesystems vnodes, 2005-01-24 22:09:13 +00:00
opencrypto /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
pc98 MFi386: fix a comment. 2005-01-17 08:36:46 +00:00
pccard /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
pci Cleanup debugging code and put it under bootverbose 2005-01-29 19:26:53 +00:00
posix4 /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
powerpc - change all u_int_XX to uint_XX 2005-02-01 11:17:24 +00:00
rpc /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
security Update copyright for NETA->McAfee. 2005-01-30 12:38:47 +00:00
sparc64 Yikes! Fix a typo in a function name that managed to occur twice. 2005-01-31 07:28:04 +00:00
sys Move sb_state to the beginning of structure, above sb_startzero member. 2005-01-30 13:11:44 +00:00
tools Get rid of the VDESC() macro while the pot is boiling anyway, it is 2005-01-13 08:05:20 +00:00
ufs It was noticed that we do not change a file's access time when it gets 2005-02-02 00:21:38 +00:00
vm Update the text of an assertion to reflect changes made in revision 1.148. 2005-01-30 21:29:47 +00:00
Makefile Add a NO_BOOT knob to prevent building the boot blocks and loader. 2004-08-19 09:54:28 +00:00