NetBSD/sys/netinet6
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
..
Makefile
dccp6_usrreq.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
dccp6_var.h make connect syscall use sockaddr_big and modify pr_{send,connect} 2015-05-02 17:18:03 +00:00
dest6.c Do not uselessly include <sys/malloc.h>. 2014-11-14 17:34:23 +00:00
files.netinet6 Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
frag6.c Don't use new as a variable name. 2014-09-05 05:33:06 +00:00
icmp6.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
icmp6_private.h
in6.c Hook up the addrctl stuff that's already there. 2015-12-12 23:34:25 +00:00
in6.h Hook up the addrctl stuff that's already there. 2015-12-12 23:34:25 +00:00
in6_cksum.c
in6_gif.c implement encapsw instead of protosw and uniform prototype. 2016-01-26 05:58:05 +00:00
in6_gif.h
in6_ifattach.c Rearange interface detachement slightly: before we free the INET6 specific 2015-02-23 19:15:59 +00:00
in6_ifattach.h
in6_offload.c
in6_offload.h
in6_pcb.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
in6_pcb.h remove transitional functions in{,6}_pcbconnect_m() that were used in 2015-05-24 15:43:45 +00:00
in6_print.c add routines to print in6_addr and sockaddr_in6 (in6_print, sin6_print) 2014-12-02 19:36:58 +00:00
in6_proto.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
in6_src.c Hook up the addrctl stuff that's already there. 2015-12-12 23:34:25 +00:00
in6_var.h Declare in6_tmpaddrtimer_ch in in6_var.h. 2016-02-04 02:48:37 +00:00
ip6_etherip.c Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
ip6_etherip.h
ip6_flow.c Add RTF_BROADCAST to mark routes used for the broadcast address when 2015-03-23 18:33:17 +00:00
ip6_forward.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
ip6_id.c Use time_uptime instead of time_second to avoid time leaps 2015-08-07 08:11:33 +00:00
ip6_input.c Declare in6_tmpaddrtimer_ch in in6_var.h. 2016-02-04 02:48:37 +00:00
ip6_mroute.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
ip6_mroute.h
ip6_output.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
ip6_private.h
ip6_var.h Add net.inet6.ip6.prefer_tempaddr sysctl knob so that we can prefer 2015-01-20 21:27:36 +00:00
ip6protosw.h Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
ipsec.h
mld6.c Ensure that the callout of the multicast address is valid before 2015-11-12 15:01:06 +00:00
mld6_var.h
nd6.c Declare in6_tmpaddrtimer_ch in in6_var.h. 2016-02-04 02:48:37 +00:00
nd6.h CID 1341546: Fix integer handling issue (CONSTANT_EXPRESSION_RESULT) 2015-12-07 06:19:13 +00:00
nd6_nbr.c CID 1341546: Fix integer handling issue (CONSTANT_EXPRESSION_RESULT) 2015-12-07 06:19:13 +00:00
nd6_rtr.c Use lltable/llentry for NDP 2015-11-25 06:21:26 +00:00
pim6.h
pim6_var.h
raw_ip6.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
raw_ip6.h
route6.c
scope6.c printable version of the scope. 2014-12-10 01:10:37 +00:00
scope6_var.h printable version of the scope. 2014-12-10 01:10:37 +00:00
sctp6_usrreq.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
sctp6_var.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
udp6.h
udp6_output.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
udp6_private.h
udp6_usrreq.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
udp6_var.h make connect syscall use sockaddr_big and modify pr_{send,connect} 2015-05-02 17:18:03 +00:00