cvs commit: src/sys/contrib/ipfilter/netinet fil.c src/sys/dev/netif/sr if_sr.c src/sys/emulation/linux linux_ioctl.c src/sys/net if.c if_atmsubr.c if_var.h net_osdep.h netisr.c rtsock.c src/sys/net/ef if_ef.c src/sys/net/ip6fw ip6_fw.c src/sys/net/ipfw ip_fw2.c ...
Sepherosa Ziehau
sephe at crater.dragonflybsd.org
Fri Mar 7 03:35:01 PST 2008
sephe 2008/03/07 03:34:21 PST
DragonFly src repository
Modified files:
sys/contrib/ipfilter/netinet fil.c
sys/dev/netif/sr if_sr.c
sys/emulation/linux linux_ioctl.c
sys/net if.c if_atmsubr.c if_var.h net_osdep.h
netisr.c rtsock.c
sys/net/ef if_ef.c
sys/net/ip6fw ip6_fw.c
sys/net/ipfw ip_fw2.c
sys/net/pf pf_if.c
sys/net/sppp if_spppsubr.c
sys/net/stf if_stf.c
sys/net/tun if_tun.c
sys/netgraph/eiface ng_eiface.c
sys/netgraph/fec ng_fec.c
sys/netgraph/iface ng_iface.c
sys/netinet if_ether.c in.c ip_carp.c ip_divert.c
ip_icmp.c ip_input.c sctp_asconf.c
sctp_output.c sctp_pcb.c sctp_usrreq.c
sctputil.c
sys/netinet6 icmp6.c in6.c in6_ifattach.c in6_prefix.c
in6_var.h nd6.c nd6_nbr.c nd6_rtr.c
sys/netproto/atalk aarp.c at_control.c
sys/netproto/atm atm_if.c
sys/netproto/ipx ipx.c ipx_input.c ipx_usrreq.c
sys/netproto/ns idp_usrreq.c ns.c ns_input.c
sys/platform/pc32/i386 autoconf.c
sys/sys kernel.h
sys/vfs/nfs bootp_subr.c
usr.bin/netstat if.c
usr.sbin/ifmcstat ifmcstat.c
Log:
Parallelize ifnet.if_addrhead accessing by duplicating the list itself
on each CPU, each list element points to ifaddr:
- Add SI_SUB_PRE_DRIVERS before SI_SUB_DRIVERS, so action could be taken
before drivers' initialization (mainly before NIC driver's if_attach())
- Move netisr_init() to the FIRST of SI_SUB_PRE_DRIVERS, so that
netmsg_service_port_init() could be called in earlier stage of system
initialization.
- Create one thread on each CPU to propagate changes to ifnet.if_addrhead.
Their thread ports are registered with netmsg_service_port_init() for
port syncing operation.
- Change to ifnet.if_addrhead begins in netisr0, i.e. serial of changes
to ifnet.if_addrhead are serialized by netisr0
- ifaddr's refcnt is moved to its list elements, i.e. per-CPU refcnt.
They are initialized to 1 instead of 0.
- A magic field is added to ifaddr list element to make sure that IFAREF
and IFAFREE are called on valid ifaddr list element. This field is
initialized to a magic value and is wiped out once the list element's
refcnt drops to 0
- To close the gap between testing and freeing, once the ifaddr list
element's refcnt drops to 0, ifa_portfn(0) (a thread's port on CPU0) is
poked to check whether ifaddr is referenced on other CPUs, if not, then
ifaddr is freed on ifa_portfn(0)
Reviewed-by: dillon@ (earlier version)
Revision Changes Path
1.11 +18 -3 src/sys/contrib/ipfilter/netinet/fil.c
1.24 +2 -2 src/sys/dev/netif/sr/if_sr.c
1.25 +8 -4 src/sys/emulation/linux/linux_ioctl.c
1.61 +307 -48 src/sys/net/if.c
1.18 +5 -10 src/sys/net/if_atmsubr.c
1.45 +53 -10 src/sys/net/if_var.h
1.8 +0 -2 src/sys/net/net_osdep.h
1.37 +1 -1 src/sys/net/netisr.c
1.43 +21 -10 src/sys/net/rtsock.c
1.26 +3 -19 src/sys/net/ef/if_ef.c
1.19 +4 -2 src/sys/net/ip6fw/ip6_fw.c
1.41 +4 -2 src/sys/net/ipfw/ip_fw2.c
1.10 +4 -2 src/sys/net/pf/pf_if.c
1.30 +21 -56 src/sys/net/sppp/if_spppsubr.c
1.21 +4 -2 src/sys/net/stf/if_stf.c
1.34 +6 -5 src/sys/net/tun/if_tun.c
1.17 +7 -6 src/sys/netgraph/eiface/ng_eiface.c
1.23 +0 -1 src/sys/netgraph/fec/ng_fec.c
1.15 +5 -4 src/sys/netgraph/iface/ng_iface.c
1.45 +4 -2 src/sys/netinet/if_ether.c
1.26 +104 -27 src/sys/netinet/in.c
1.7 +38 -19 src/sys/netinet/ip_carp.c
1.36 +5 -2 src/sys/netinet/ip_divert.c
1.28 +6 -2 src/sys/netinet/ip_icmp.c
1.77 +6 -2 src/sys/netinet/ip_input.c
1.7 +12 -5 src/sys/netinet/sctp_asconf.c
1.13 +85 -30 src/sys/netinet/sctp_output.c
1.14 +6 -2 src/sys/netinet/sctp_pcb.c
1.13 +11 -4 src/sys/netinet/sctp_usrreq.c
1.9 +5 -2 src/sys/netinet/sctputil.c
1.27 +10 -4 src/sys/netinet6/icmp6.c
1.28 +57 -47 src/sys/netinet6/in6.c
1.22 +17 -9 src/sys/netinet6/in6_ifattach.c
1.13 +43 -24 src/sys/netinet6/in6_prefix.c
1.9 +5 -5 src/sys/netinet6/in6_var.h
1.27 +7 -4 src/sys/netinet6/nd6.c
1.23 +13 -5 src/sys/netinet6/nd6_nbr.c
1.17 +16 -8 src/sys/netinet6/nd6_rtr.c
1.22 +7 -6 src/sys/netproto/atalk/aarp.c
1.13 +5 -53 src/sys/netproto/atalk/at_control.c
1.16 +2 -2 src/sys/netproto/atm/atm_if.c
1.15 +4 -6 src/sys/netproto/ipx/ipx.c
1.18 +9 -3 src/sys/netproto/ipx/ipx_input.c
1.13 +4 -3 src/sys/netproto/ipx/ipx_usrreq.c
1.15 +5 -4 src/sys/netproto/ns/idp_usrreq.c
1.17 +4 -6 src/sys/netproto/ns/ns.c
1.21 +12 -6 src/sys/netproto/ns/ns_input.c
1.39 +5 -3 src/sys/platform/pc32/i386/autoconf.c
1.30 +1 -0 src/sys/sys/kernel.h
1.25 +6 -3 src/sys/vfs/nfs/bootp_subr.c
1.12 +43 -4 src/usr.bin/netstat/if.c
1.9 +26 -4 src/usr.sbin/ifmcstat/ifmcstat.c
http://www.dragonflybsd.org/cvsweb/src/sys/contrib/ipfilter/netinet/fil.c.diff?r1=1.10&r2=1.11&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/dev/netif/sr/if_sr.c.diff?r1=1.23&r2=1.24&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/emulation/linux/linux_ioctl.c.diff?r1=1.24&r2=1.25&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/if.c.diff?r1=1.60&r2=1.61&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/if_atmsubr.c.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/if_var.h.diff?r1=1.44&r2=1.45&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/net_osdep.h.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/netisr.c.diff?r1=1.36&r2=1.37&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/rtsock.c.diff?r1=1.42&r2=1.43&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/ef/if_ef.c.diff?r1=1.25&r2=1.26&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/ip6fw/ip6_fw.c.diff?r1=1.18&r2=1.19&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/ipfw/ip_fw2.c.diff?r1=1.40&r2=1.41&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/pf/pf_if.c.diff?r1=1.9&r2=1.10&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/sppp/if_spppsubr.c.diff?r1=1.29&r2=1.30&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/stf/if_stf.c.diff?r1=1.20&r2=1.21&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/tun/if_tun.c.diff?r1=1.33&r2=1.34&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netgraph/eiface/ng_eiface.c.diff?r1=1.16&r2=1.17&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netgraph/fec/ng_fec.c.diff?r1=1.22&r2=1.23&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netgraph/iface/ng_iface.c.diff?r1=1.14&r2=1.15&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/if_ether.c.diff?r1=1.44&r2=1.45&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/in.c.diff?r1=1.25&r2=1.26&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/ip_carp.c.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/ip_divert.c.diff?r1=1.35&r2=1.36&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/ip_icmp.c.diff?r1=1.27&r2=1.28&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/ip_input.c.diff?r1=1.76&r2=1.77&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/sctp_asconf.c.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/sctp_output.c.diff?r1=1.12&r2=1.13&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/sctp_pcb.c.diff?r1=1.13&r2=1.14&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/sctp_usrreq.c.diff?r1=1.12&r2=1.13&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet/sctputil.c.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/icmp6.c.diff?r1=1.26&r2=1.27&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/in6.c.diff?r1=1.27&r2=1.28&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/in6_ifattach.c.diff?r1=1.21&r2=1.22&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/in6_prefix.c.diff?r1=1.12&r2=1.13&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/in6_var.h.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/nd6.c.diff?r1=1.26&r2=1.27&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/nd6_nbr.c.diff?r1=1.22&r2=1.23&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/nd6_rtr.c.diff?r1=1.16&r2=1.17&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/atalk/aarp.c.diff?r1=1.21&r2=1.22&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/atalk/at_control.c.diff?r1=1.12&r2=1.13&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/atm/atm_if.c.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ipx/ipx.c.diff?r1=1.14&r2=1.15&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ipx/ipx_input.c.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ipx/ipx_usrreq.c.diff?r1=1.12&r2=1.13&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ns/idp_usrreq.c.diff?r1=1.14&r2=1.15&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ns/ns.c.diff?r1=1.16&r2=1.17&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ns/ns_input.c.diff?r1=1.20&r2=1.21&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/i386/autoconf.c.diff?r1=1.38&r2=1.39&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/kernel.h.diff?r1=1.29&r2=1.30&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/nfs/bootp_subr.c.diff?r1=1.24&r2=1.25&f=u
http://www.dragonflybsd.org/cvsweb/src/usr.bin/netstat/if.c.diff?r1=1.11&r2=1.12&f=u
http://www.dragonflybsd.org/cvsweb/src/usr.sbin/ifmcstat/ifmcstat.c.diff?r1=1.8&r2=1.9&f=u
More information about the Commits
mailing list