NetBSD/sys
ozaki-r 9c4cd06355 Introduce softint-based if_input
This change intends to run the whole network stack in softint context
(or normal LWP), not hardware interrupt context. Note that the work is
still incomplete by this change; to that end, we also have to softint-ify
if_link_state_change (and bpf) which can still run in hardware interrupt.

This change softint-ifies at ifp->if_input that is called from
each device driver (and ieee80211_input) to ensure Layer 2 runs
in softint (e.g., ether_input and bridge_input). To this end,
we provide a framework (called percpuq) that utlizes softint(9)
and percpu ifqueues. With this patch, rxintr of most drivers just
queues received packets and schedules a softint, and the softint
dequeues packets and does rest packet processing.

To minimize changes to each driver, percpuq is allocated in struct
ifnet for now and that is initialized by default (in if_attach).
We probably have to move percpuq to softc of each driver, but it's
future work. At this point, only wm(4) has percpuq in its softc
as a reference implementation.

Additional information including performance numbers can be found
in the thread at tech-kern@ and tech-net@:
http://mail-index.netbsd.org/tech-kern/2016/01/14/msg019997.html

Acknowledgment: riastradh@ greatly helped this work.
Thank you very much!
2016-02-09 08:32:07 +00:00
..
altq Prevent interface deletion from running into an infinite loop when altq closes. 2016-01-22 18:19:54 +00:00
arch Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
coda More on PR 41200: headers that declare ioctls should include sys/ioccom.h. 2015-09-06 06:00:59 +00:00
compat PR/50784: David Binderman: Add missing braces, this is not python. 2016-02-08 16:42:04 +00:00
conf WELCOME 2016! 2015-12-31 15:23:07 +00:00
crypto
ddb
dev Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
dist/pf
external Don't return void. 2016-02-06 00:31:58 +00:00
fs Toolify. 2016-02-06 14:11:58 +00:00
gdbscripts
ipkdb
kern In module_do_load(), consolidate checking for a pre-existing module, 2016-02-06 22:48:07 +00:00
lib Add an option (LIBSA_CREAD_NOCRC) to disable gunzip CRC32 calculation. 2016-01-17 04:35:42 +00:00
miscfs Fix a couple of checks for kernel vm_space, and convert the 'naked 2016-01-05 09:07:19 +00:00
modules Split case folding table into separate source file and add full 2016-02-06 10:40:58 +00:00
net Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
net80211 Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
netatalk Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
netbt Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
netinet Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
netinet6 Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
netipsec eliminate variable argument in encapsw 2016-01-26 06:00:10 +00:00
netisdn More on PR 41200: headers that declare ioctls should include sys/ioccom.h. 2015-09-06 06:00:59 +00:00
netkey
netmpls
netnatm Eliminate struct protosw::pr_output. 2016-01-20 21:43:59 +00:00
netsmb
nfs Return an error if NFSPROC_LOOKUP returns the file handle of the current 2016-01-19 10:56:59 +00:00
opencrypto Needs sys/time.h for struct timespec. 2016-01-22 22:35:27 +00:00
rump Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
secmodel secmodel_extensions_system_cb() is not mount-specific, even though 2015-12-12 14:57:52 +00:00
stand
sys Don't do _BSD_SIZE_T_ dance here. Use <stddef.h> in userland. 2016-02-06 15:36:36 +00:00
ufs u_int{16,32,64}_t -> uint{16,32,64}_t, for the benefit of userland. 2016-01-22 23:06:10 +00:00
uvm Use IPL_NONE for pserialized lock. Assert sleepable. (OOPS.) 2016-02-07 18:41:25 +00:00
Makefile