freebsd-skq/sys/pci
jhb 3e470d1fdd Various fixups to locking:
- Remove a lot of superfluous locking during attach.  There is no need
  to lock access to the driver until some other thread has a way of getting
  to it.  For ethernet drivers the other ways include registering an
  interrupt handler via bus_setup_intr(), calling ether_ifattach() to hook
  into the network stack, and kicking off a callout-driven timer via
  callout_reset().
- Use callout_* rather than timeout/untimeout.
- Break out of xl_rxeof() if IFF_DRV_RUNNING is clear after ifp->if_input
  returns to handle the case where the interface was stopped while we were
  passing a packet up the stack.  Don't call xl_rxeof() in xl_rxeof_task()
  unless IFF_DRV_RUNNING is set.  With these fixes in place, any
  outstanding task will gracefully terminate as soon as it gets a chance to
  run after the interface has been stopped via xl_stop().  As a result,
  taskqueue_drain() is no longer required in xl_stop().  The task is still
  drained in detach() however to make sure that detach() can safely destroy
  the driver mutex at the end of the function.
- Lock the driver lock in the ifmedia callouts and don't lock across
  ifmedia_ioctl() in xl_ioctl().

Note: glebius came up with most of (3) as well independently.  I took a
rather roundabout way of arriving at the same conclusion.

MFC after:	3 days
2005-08-18 19:24:30 +00:00
..
agp_ali.c Add device id for the Ali M1671 host to AGP bridge. 2005-02-27 13:05:34 +00:00
agp_amd64.c Add nForce3-250. 2005-04-08 18:04:39 +00:00
agp_amd.c Return BUS_PROBE_DEFAULT instead of 0. 2005-02-24 21:32:56 +00:00
agp_i810.c Return BUS_PROBE_DEFAULT instead of 0. 2005-02-24 21:32:56 +00:00
agp_if.m /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
agp_intel.c Return BUS_PROBE_DEFAULT instead of 0. 2005-02-24 21:32:56 +00:00
agp_nvidia.c nVidia AGP chipsets beyond nForce2 are AMD64-specific. 2005-04-02 01:10:09 +00:00
agp_sis.c Return BUS_PROBE_DEFAULT instead of 0. 2005-02-24 21:32:56 +00:00
agp_via.c Make the initialization in the AGPv3 case match that of Linux. Fixes hangs on 2005-06-26 04:01:11 +00:00
agp.c
agppriv.h
agpreg.h
agpvar.h
alpm.c Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 2005-05-29 04:42:30 +00:00
amdpm.c Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 2005-05-29 04:42:30 +00:00
dc21040reg.h
if_dc.c Fixup locking and mark MPSAFE: 2005-08-18 19:10:07 +00:00
if_dcreg.h Use device_printf() and if_printf() and remove dc_unit from softc. 2005-08-10 20:33:46 +00:00
if_de.c - Use htole32() instead of using bswap32() conditional on #if BYTE_ORDER. 2005-08-17 17:46:51 +00:00
if_devar.h Remove the unused TULIP_CSR_{READ,WRITE}BYTE macros. 2005-08-17 17:45:19 +00:00
if_mn.c Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_pcn.c Use callout_init_mtx() to simplify the stats callout. 2005-08-17 17:44:58 +00:00
if_pcnreg.h Fix up the locking in pcn(4) and mark it MPSAFE. 2005-08-05 16:03:16 +00:00
if_rl.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_rlreg.h Recognize D-Link DGE-528(T) Gigabit as an re(4) device. 2005-08-05 08:19:12 +00:00
if_sf.c Fixup locking for sf(4) and mark MPSAFE: 2005-08-18 17:09:16 +00:00
if_sfreg.h Fixup locking for sf(4) and mark MPSAFE: 2005-08-18 17:09:16 +00:00
if_sis.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_sisreg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_sk.c * Solve "No PHY found" problem for more Yukon Lite variants. 2005-08-13 11:13:12 +00:00
if_skreg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_ste.c Use device_printf() and if_printf() and remove ste_unit from the softc. 2005-08-17 14:37:39 +00:00
if_stereg.h Use device_printf() and if_printf() and remove ste_unit from the softc. 2005-08-17 14:37:39 +00:00
if_ti.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_tireg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_tl.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_tlreg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_vr.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_vrreg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_wb.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
if_wbreg.h Stop embedding struct ifnet at the top of driver softcs. Instead the 2005-06-10 16:49:24 +00:00
if_xl.c Various fixups to locking: 2005-08-18 19:24:30 +00:00
if_xlreg.h Various fixups to locking: 2005-08-18 19:24:30 +00:00
intpm.c Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 2005-05-29 04:42:30 +00:00
intpmreg.h
locate.pl
ncr.c Add back 'n' that went missing in last commit 2005-02-25 03:43:43 +00:00
ncrreg.h Fix typos from previous commit. 2005-01-07 05:01:24 +00:00
ti_fw2.h
ti_fw.h
viapm.c Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 2005-05-29 04:42:30 +00:00
xmaciireg.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
xrpu.c Return BUS_PROBE_DEFAULT instead of 0. 2005-02-24 21:32:56 +00:00
yukonreg.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00