freebsd-dev/sys/i386
Luigi Rizzo e4fc250c15 Device Polling code for -current.
Non-SMP, i386-only, no polling in the idle loop at the moment.

To use this code you must compile a kernel with

        options DEVICE_POLLING

and at runtime enable polling with

        sysctl kern.polling.enable=1

The percentage of CPU reserved to userland can be set with

        sysctl kern.polling.user_frac=NN (default is 50)

while the remainder is used by polling device drivers and netisr's.
These are the only two variables that you should need to touch. There
are a few more parameters in kern.polling but the default values
are adequate for all purposes. See the code in kern_poll.c for
more details on them.

Polling in the idle loop will be implemented shortly by introducing
a kernel thread which does the job. Until then, the amount of CPU
dedicated to polling will never exceed (100-user_frac).
The equivalent (actually, better) code for -stable is at

	http://info.iet.unipi.it/~luigi/polling/

and also supports polling in the idle loop.

NOTE to Alpha developers:
There is really nothing in this code that is i386-specific.
If you move the 2 lines supporting the new option from
sys/conf/{files,options}.i386 to sys/conf/{files,options} I am
pretty sure that this should work on the Alpha as well, just that
I do not have a suitable test box to try it. If someone feels like
trying it, I would appreciate it.

NOTE to other developers:
sure some things could be done better, and as always I am open to
constructive criticism, which a few of you have already given and
I greatly appreciated.
However, before proposing radical architectural changes, please
take some time to possibly try out this code, or at the very least
read the comments in kern_poll.c, especially re. the reason why I
am using a soft netisr and cannot (I believe) replace it with a
simple timeout.

Quick description of files touched by this commit:

sys/conf/files.i386
        new file kern/kern_poll.c
sys/conf/options.i386
        new option
sys/i386/i386/trap.c
        poll in trap (disabled by default)
sys/kern/kern_clock.c
        initialization and hardclock hooks.
sys/kern/kern_intr.c
        minor swi_net changes
sys/kern/kern_poll.c
        the bulk of the code.
sys/net/if.h
        new flag
sys/net/if_var.h
        declaration for functions used in device drivers.
sys/net/netisr.h
        NETISR_POLL
sys/dev/fxp/if_fxp.c
sys/dev/fxp/if_fxpvar.h
sys/pci/if_dc.c
sys/pci/if_dcreg.h
sys/pci/if_sis.c
sys/pci/if_sisreg.h
        device driver modifications
2001-12-14 17:56:12 +00:00
..
acpica Yet another verbose printing cleanup. Remove debug_wakeup flag and 2001-11-18 18:48:31 +00:00
apm Some fix for the recent apm module changes. 2001-11-01 16:34:07 +00:00
bios Some fix for the recent apm module changes. 2001-11-01 16:34:07 +00:00
compile Don't need the .keep_me files. Obrien and I committed past each other. 2001-07-01 23:35:44 +00:00
conf Enable UFS_DIRHASH in the GENERIC kernel. 2001-12-14 16:27:11 +00:00
i386 Device Polling code for -current. 2001-12-14 17:56:12 +00:00
ibcs2 Update to C99, s/__FUNCTION__/__func__/, 2001-12-10 08:09:49 +00:00
include Fixed to draw mouse cursor. The syscons driver for PC98 uses different 2001-12-14 15:27:15 +00:00
isa Overhaul the per-CPU support a bit: 2001-12-11 23:33:44 +00:00
linux Convert BSD trap codes to i386. 2001-11-20 09:39:31 +00:00
pci Add identification string for AMD-761 host to PCI bridge. 2001-12-10 09:27:00 +00:00
svr4 If we have a p variable pointing to td->td_proc already, use it instead of 2001-09-18 21:20:58 +00:00
Makefile Update pathnames for creation of tags file. 2001-12-05 01:23:21 +00:00