freebsd-dev/sys/dev
Bill Paul 497760a16a Fix bug that can cause transmit corruption. There are actually two 'rings'
in the transmit code: the TX descriptor ring, and a 'shadow' ring of mbuf
pointers, one for each TX descriptor. When transmitting a packet that
consists of several fragments in an mbuf chain, we link each fragment
to a descriptor in the TX ring, but we only save a pointer to the mbuf
chain. This pointer is saved in the shadow ring entry which corresponds
to the first fragment in the packet. Later, ti_txeof() can release the
whole chain with a single m_freem() call. (We need the second ring to
keep track of the virtual addresses of the mbuf chains.)

The problem with this is that the Tigon isn't actually through with the
mbuf chain until it reaches the last fragment (which has the TI_BDFLAG_END
bit set), however the current scheme releases the mbuf chain as soon as
the first fragment is consumed. This is wrong, since the mbufs can then
be yanked out from under the Tigon and modified before the other fragments
can be transmitted.

The fix is to make a one line change to ti_encap() so that it saves the
mbuf chain pointer in the shadow ring entry that corresponds to the last
fragment in TX ring instead of the first. This prevents the mbufs from
being released until the last fragment is transmitted.

Painstakingly diagnosed and fixed by: Robert Picco <picco@mail.wevinc.com>
Brought to my attention by: dg
1999-05-24 14:56:55 +00:00
..
advansys Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
aha Put a small delay in before sending the inquire_setup command. The 1999-05-14 23:10:25 +00:00
ahb Move the declaration of the interrupt type from the driver structure 1999-05-08 21:59:43 +00:00
aic7xxx Don't reference our SCB until we have validated that the firmware has 1999-05-23 18:55:58 +00:00
amd First cut at a driver for the amd53c974 PCI SCSI host adapter. This 1999-05-22 21:50:40 +00:00
ar Fix 'signed char as array index' warnings and an unused variable. 1999-05-06 18:58:05 +00:00
ata Eigth update to the new ATA/ATAPI driver: 1999-05-20 09:12:06 +00:00
atkbdc Use the resource apis to manipulate resources. 1999-05-22 15:47:34 +00:00
bktr Added rgb_vbi_prog() to capture VBI data and video at the 1999-05-23 21:40:51 +00:00
buslogic Poll for interrupts in bt_cmd in case they are masked. A completing 1999-05-23 18:54:34 +00:00
ccd Divorce "dev_t" from the "major|minor" bitmap, which is now called 1999-05-11 19:55:07 +00:00
cs Bring the 'new-bus' to the i386. This extensively changes the way the 1999-04-16 21:22:55 +00:00
cy Detect PCI device IDs for latest boards. Simplified the ID comparisons. 1999-05-10 10:23:40 +00:00
de #include "pci.h" for the build dir, not <pci.h> 1999-05-10 14:12:26 +00:00
dec Calibrate the processor cycle counter instead of believing what the 1999-05-18 21:24:16 +00:00
dgb Fix some of the places where too much inside knowledge about major/minor 1999-05-08 07:02:41 +00:00
dpt I'm told by the PR author that this page_size increment was in 1999-05-13 05:24:53 +00:00
ed #ifdef BRIDGE around a goto label used by the bridge code to silcence a 1999-05-09 23:24:47 +00:00
eisa Fix a [start,end] vs [start,count] botch that corrupted the resource 1999-05-24 03:08:46 +00:00
en Missing revision markers. 1999-05-09 17:12:25 +00:00
ep Move the declaration of the interrupt type from the driver structure 1999-05-08 21:59:43 +00:00
ex Set ifq_maxlen to default value. (This should be safe, it's not clear 1999-05-02 22:01:24 +00:00
fb PCX loader for pseudo-device splash. 1999-04-12 13:39:11 +00:00
fdc Fixed reset handling for motor off resets. I first fixed this together 1999-05-11 04:58:30 +00:00
fe Replace misused FE_D6_BBW with FE_D6_SBW. 1999-05-04 12:59:59 +00:00
fxp Fix two warnings. 1999-05-09 10:45:54 +00:00
hea Allow configuration of up to 256 network interfaces per physical interface - 1999-05-10 23:02:29 +00:00
hfa Allow configuration of up to 256 network interfaces per physical interface - 1999-05-10 23:02:29 +00:00
ic Fixed 10 out of 40 lines of -Wcast-qual warnings/errors. 3 lines were 1999-05-13 12:21:41 +00:00
ie Fixed 10 out of 40 lines of -Wcast-qual warnings/errors. 3 lines were 1999-05-13 12:21:41 +00:00
iicbus Unconfuse DEV_MODULE() and DEV_DRIVER_MODULE() about the difference between 1999-05-09 13:00:50 +00:00
isp When asked to get the current transfer settings go do a dev_refresh 1999-05-12 19:00:16 +00:00
joy The joypart() macro had a precedence bug. Add seatbelts for UNIT() too. 1999-05-06 18:39:32 +00:00
kbd - Include isa/isareg.h rather than i386/isa/isa.h for i386. 1999-05-20 09:49:33 +00:00
lnc Set the bus master bit. 1999-05-10 22:39:37 +00:00
mc146818 Major changes to the generic device framework for FreeBSD/alpha: 1998-06-14 13:46:10 +00:00
mcd Fix some of the places where too much inside knowledge about major/minor 1999-05-08 07:02:41 +00:00
mse Fix up a few easy 'assignment used as truth value' and 'suggest parens 1999-05-06 18:44:42 +00:00
pccard if_xe* now lives in sys/dev/pccard/ 1999-05-14 04:18:24 +00:00
pcf Move the declaration of the interrupt type from the driver structure 1999-05-08 21:59:43 +00:00
pci Add support for multiple PCI "hoses" used on various alpha platforms. 1999-05-20 15:33:33 +00:00
pcm/isa Fix dev_t/minor problems 1999-05-12 19:01:30 +00:00
pdq Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
ppbus Move the declaration of the interrupt type from the driver structure 1999-05-08 21:59:43 +00:00
ppc Return the port size from the probe. 1999-04-22 13:10:43 +00:00
rc Add brackets around && within || to quieten egcs. I've checked the code 1999-05-08 17:52:03 +00:00
rp Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
scd don't confuse units and devices. 1999-05-09 20:29:04 +00:00
si Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
sio Use the resource apis to manipulate resources. 1999-05-22 15:47:34 +00:00
smbus Unconfuse DEV_MODULE() and DEV_DRIVER_MODULE() about the difference between 1999-05-09 13:00:50 +00:00
snp Use NODEV instead of -1 1999-05-10 18:10:08 +00:00
sound/isa Fix dev_t/minor problems 1999-05-12 19:01:30 +00:00
speaker Fixed printf format errors. Only one left in LINT on i386's. 1998-08-24 02:28:16 +00:00
sr Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
streams ``fix'' the devfs_add_devswf() calls, the printf string wasn't factoring 1999-05-06 22:21:31 +00:00
syscons Removed global variable `Crtat'. This was once (bogusly) shared with 1999-05-12 04:45:56 +00:00
ti Fix bug that can cause transmit corruption. There are actually two 'rings' 1999-05-24 14:56:55 +00:00
tx Move arpcom structure be the first in softc structure. Needed 1999-05-22 06:10:14 +00:00
usb usbdi.h: 1999-05-20 20:02:37 +00:00
vinum Modify to work with new style dev_t. 1999-05-15 05:49:21 +00:00
vn Divorce "dev_t" from the "major|minor" bitmap, which is now called 1999-05-11 19:55:07 +00:00
vr Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: 1999-05-09 17:07:30 +00:00
vx Missing revision markers. 1999-05-09 17:12:25 +00:00
wi - Fix up some comments in if_wi.c (no code changes) 1999-05-22 16:12:54 +00:00
wl Suser() simplification: 1999-04-27 11:18:52 +00:00
xe if_xe* now lives in sys/dev/pccard/ 1999-05-14 04:18:24 +00:00