freebsd-src/sys/dev
Andrew Gallatin 0617522889 Fix an alpha-only race which causes the transmit side of the chip to
lock up under moderate to heavy load.

The status & command fields share a 32-bit longword.  The programming
API of the eepro apparently requires that you update the command field
of a transmit slot that you've already given to the card.  This means
the card could be updating the status field of the same longword at
the same time. Since alphas can only operate on 32-bit chunks of
memory, both the status & command fields are loaded from memory &
operated on in registers when the following line of C is executed:

                sc->cbl_last->cb_command &= ~FXP_CB_COMMAND_S;

The race is caused by the card DMA'ing up the status at just the wrong
time -- after it has been loaded into a register & before it has been
written back.  The old value of the status is written back, clobbering
the status the card just DMA'ed up. The fact that the card has sent
this frame is missed & the transmit engine appears to hang.

Luckily, as numerous people on the freebsd-alpha list pointed out, the
load-locked/store-conditional instructions used by the atomic
functions work with respect changes in memory due to I/O devices.  We
now use them to safely update the command field.

Tested by: Bernd Walter <ticso@mail.cicely.de>
2000-07-19 14:33:52 +00:00
..
advansys Fix typo (accessable --> accessible). 2000-06-14 17:53:40 +00:00
agp Add support for Intel's i810 chipset with integrated graphics. An 2000-07-12 10:13:07 +00:00
aha Fix typo (accessable --> accessible). 2000-06-14 17:53:40 +00:00
ahb Fix typo (accessable --> accessible). 2000-06-14 17:53:40 +00:00
aic Terminate aic_ids[] 2000-06-19 22:16:14 +00:00
aic7xxx o Convert to <inttypes.h> style fixed sized types to facilitate porting to 2000-07-18 20:12:14 +00:00
amd
amr The AMI MegaRAID's internal memory map conflicts with scatter/gather 2000-06-10 19:22:39 +00:00
an Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
ar Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
ata Previous commit changing SYSCTL_HANDLER_ARGS violated KNF. 2000-07-04 11:25:35 +00:00
atkbdc Manipulate with AltGR Led (really CapsLock Led) only in K_XLATE mode, because 2000-05-28 12:43:24 +00:00
awi Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
bktr Update to driver 2.14. Adds new Tuner types for Hauppauge WinTV cards 2000-06-28 15:09:12 +00:00
buslogic Fix typo (accessable --> accessible). 2000-06-14 17:53:40 +00:00
cardbus
ccd Move the truncation code out of vn_open and into the open system call 2000-07-04 03:34:11 +00:00
cs Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
cy Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
dc Add the PCI IDs for the Macronix 98727 and 98732 parts. These are 2000-07-17 19:27:41 +00:00
de Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
dec
dgb Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
dpt Use correct register values. This one was in aic7xxx and advansys too. 2000-05-28 15:50:40 +00:00
ed Fix the IRQ9/IRQ2 confusion. 2000-07-18 18:50:24 +00:00
eisa
en
ep Properly detect ISA cards in EISA mode and skip them in the ISA identify 2000-07-18 06:37:08 +00:00
ex Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
fb Unused include: #include "fb.h" 2000-06-10 06:41:11 +00:00
fdc
fe Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
fxp Fix an alpha-only race which causes the transmit side of the chip to 2000-07-19 14:33:52 +00:00
hea
hfa
ic
ida
ie Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
iicbus Allow these drivers to be detached. 2000-06-16 07:20:29 +00:00
isp Add in some new IN_XXX and CT_XXXX flags in preparation 2000-07-18 07:06:47 +00:00
ispfw Roll back target mode f/w to 7.55- 7.65 hangs when presented with a 2000-07-17 00:34:52 +00:00
joy
kbd Manipulate with AltGR Led (really CapsLock Led) only in K_XLATE mode, because 2000-05-28 12:43:24 +00:00
lmc
lnc Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
mc146818
mca
mcd Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
md Rename MDNSECT to MD_NSECT and declare it as something that isn't 2000-07-17 13:13:04 +00:00
mii Added Altima Communications OUI and their AC101 10/100 2000-06-21 19:26:01 +00:00
mlx
mse
musycc Driver for LMC1504 card: four port E1 or fractional E1. 2000-07-18 11:34:15 +00:00
null Small style change; make function names less likely to clash with 2000-07-09 12:29:24 +00:00
nulldev Small style change; make function names less likely to clash with 2000-07-09 12:29:24 +00:00
pccard Matching commits to pccard for last pcic changes. We now at least to 2000-06-18 05:28:59 +00:00
pcf
pci Nuke the useless chip driver. It gets in the way when you want to load 2000-06-09 16:00:29 +00:00
pcic Almost make loading work. This is a checkpoint. With these change we 2000-06-18 05:25:30 +00:00
pdq
ppbus Remove an unused variable warning. 2000-07-18 20:16:36 +00:00
ppc Add smc37c935 chipset support and clean up the code which tries to 2000-07-18 09:01:09 +00:00
random Add randomness write functionality. This does absolutely nothing for 2000-07-17 12:23:04 +00:00
randomdev Add randomness write functionality. This does absolutely nothing for 2000-07-17 12:23:04 +00:00
ray Add attribute memory setup warnings 2000-07-11 21:31:59 +00:00
rc Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
rp - Eliminate rpread(). Call generic ttyread(). (cf rev 1.33) 2000-06-12 15:21:59 +00:00
scd Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
sf Close PR# 19904: remember to call sf_setmulti() when initializing the 2000-07-14 19:11:02 +00:00
si
sio Previous commit changing SYSCTL_HANDLER_ARGS violated KNF. 2000-07-04 11:25:35 +00:00
sk Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
smbus
sn Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
snp
sound make this file suitable for 4-stable as well as 5-current 2000-07-18 21:23:48 +00:00
speaker Add PnP probe methods to some common AT hardware drivers. In each case, 2000-06-23 07:44:33 +00:00
sr Mass update of isa drivers using compatability shims to use 2000-05-28 13:40:48 +00:00
streams
sym - Various comment fixes and additions. 2000-07-02 21:26:50 +00:00
syscons Don't break the ability to debug the kernel when gathering entropy. 2000-07-16 09:25:04 +00:00
tdfx Studied the tech docs for the Voodoo3 and Banshee, and hopefully fixed the 2000-07-19 05:41:14 +00:00
ti Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
twe
tx Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
usb The modem driver for Communication Device Class, ACM compliant devices. 2000-07-17 19:28:29 +00:00
vinum start_object: Set the revive length correctly. 2000-06-07 03:34:18 +00:00
vn Add snapshots to the fast filesystem. Most of the changes support 2000-07-11 22:07:57 +00:00
vr Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
vx Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
wi Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
wl Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
xe Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00