[HEADSUP] big polling changes
Gleb Smirnoff
glebius at FreeBSD.org
Sat Oct 1 13:51:28 PDT 2005
Colleagues,
I have just committed a big polling cleanup. First important
point is that only two drivers were tested to work. Please,
if you run CURRENT and polling(4), please reply to this mail,
saying whether your NIC works or not. When I get approvements
for all drivers, then I will be ready for MFC. Current state is:
em - tested (ru, glebius)
fxp - tested (glebius)
ixgb - not tested (changeset similar to em)
nge - not tested
re - not tested
vge - not tested
dc - not tested
rl - not tested
sf - not tested
sis - not tested
ste - not tested
vr - not tested
xl - not tested
The second important point is that you should not use kern.polling.enable
anymore. Just turn polling on interface with ifconfig, either manually
or via rc.conf.
----- Forwarded message from Gleb Smirnoff <glebius at FreeBSD.org> -----
glebius 2005-10-01 18:56:19 UTC
FreeBSD src repository
Modified files:
sys/amd64/amd64 trap.c
sys/dev/em if_em.c
sys/dev/firewire 00README if_fwe.c if_fwip.c
sys/dev/fxp if_fxp.c
sys/dev/ixgb README if_ixgb.c
sys/dev/nge if_nge.c
sys/dev/re if_re.c
sys/dev/vge if_vge.c
sys/i386/i386 trap.c
sys/kern kern_poll.c
sys/net if.h if_var.h
sys/pci if_dc.c if_rl.c if_sf.c if_sis.c if_ste.c
if_vr.c if_xl.c
Log:
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
Revision Changes Path
1.294 +0 -10 src/sys/amd64/amd64/trap.c
1.74 +37 -34 src/sys/dev/em/if_em.c
1.2 +0 -3 src/sys/dev/firewire/00README
1.39 +40 -29 src/sys/dev/firewire/if_fwe.c
1.10 +47 -31 src/sys/dev/firewire/if_fwip.c
1.248 +32 -24 src/sys/dev/fxp/if_fxp.c
1.2 +7 -8 src/sys/dev/ixgb/README
1.15 +43 -34 src/sys/dev/ixgb/if_ixgb.c
1.80 +37 -25 src/sys/dev/nge/if_nge.c
1.56 +49 -40 src/sys/dev/re/if_re.c
1.19 +51 -54 src/sys/dev/vge/if_vge.c
1.281 +0 -10 src/sys/i386/i386/trap.c
1.23 +88 -100 src/sys/kern/kern_poll.c
1.99 +2 -3 src/sys/net/if.h
1.103 +1 -1 src/sys/net/if_var.h
1.169 +41 -28 src/sys/pci/if_dc.c
1.158 +40 -36 src/sys/pci/if_rl.c
1.88 +45 -44 src/sys/pci/if_sf.c
1.140 +44 -31 src/sys/pci/if_sis.c
1.90 +41 -32 src/sys/pci/if_ste.c
1.108 +39 -31 src/sys/pci/if_vr.c
1.197 +45 -41 src/sys/pci/if_xl.c
----- End forwarded message -----
--
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE
More information about the freebsd-current
mailing list