freebsd-skq/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 Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
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 Sync to latest cardbusdevs file 1999-11-18 07:22:59 +00:00
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 Add missing $FreeBSD$ 2000-05-01 19:54:26 +00:00
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 Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
en Ahhrggg. Put the test for the compat shims AFTER the file that includes 2000-03-27 20:24:02 +00:00
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 Step down a level and issue format requests with a struct bio instead 2000-05-06 07:01:47 +00:00
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 Remove un-needed #include's. 2000-01-17 20:49:59 +00:00
hfa Ensure that DMA mappings are freed in error situations. 2000-01-15 21:01:04 +00:00
ic Add $FreeBSD$ 2000-05-01 20:32:07 +00:00
ida Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
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 Add ADS7182 as a known Joystick. 2000-01-18 08:38:35 +00:00
kbd Manipulate with AltGR Led (really CapsLock Led) only in K_XLATE mode, because 2000-05-28 12:43:24 +00:00
lmc Adjust to accomodate recent changes to the rcvdata and rcvmsg 2000-05-01 03:31:58 +00:00
lnc Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
mc146818 Add missing $FreeBSD$ 2000-05-01 19:54:26 +00:00
mca Set the RF_SHAREABLE flage when we allocate an IRQ. 2000-03-13 11:43:53 +00:00
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 Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
mse - `Newbus'ified the driver. 2000-03-18 15:13:30 +00:00
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 Remove ~25 unneeded #include <sys/conf.h> 2000-04-19 14:58:28 +00:00
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 Uh, ya, sure this almost compiled for __bsdi__. NOT! 2000-05-21 05:33:40 +00:00
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 Always leave SP_DCEN on (monitor DCD). Otherwise the firmware *really* 2000-01-25 16:45:54 +00:00
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 Remove unneeded #include <sys/kernel.h> 2000-04-29 15:36:14 +00:00
sn Make all Ethernet drivers attach using ether_ifattach() and detach using 2000-07-13 22:54:34 +00:00
snp Unstaticize this driver. You can have as many snoop devices as you can 2000-04-02 00:35:37 +00:00
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 Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
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 Initial import of a driver for the 3ware Escalade family of ATA RAID 2000-05-24 23:35:23 +00:00
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