freebsd-dev/sys/netinet6
Gleb Smirnoff 56a5f52e80 New way to manage reference counting of mbuf external storage.
The m_ext.ext_cnt pointer becomes a union. It can now hold the refcount
value itself. To tell that m_ext.ext_flags flag EXT_FLAG_EMBREF is used.
The first mbuf to attach a cluster stores the refcount. The further mbufs
to reference the cluster point at refcount in the first mbuf. The first
mbuf is freed only when the last reference is freed.

The benefit over refcounts stored in separate slabs is that now refcounts
of different, unrelated mbufs do not share a cache line.

For EXT_EXTREF mbufs the zone_ext_refcnt is no longer needed, and m_extadd()
becomes void, making widely used M_EXTADD macro safe.

For EXT_SFBUF mbufs the sf_ext_ref() is removed, which was an optimization
exactly against the cache aliasing problem with regular refcounting.

Discussed with:		rrs, rwatson, gnn, hiren, sbruno, np
Reviewed by:		rrs
Differential Revision:	https://reviews.freebsd.org/D5396
Sponsored by:		Netflix
2016-03-01 00:17:14 +00:00
..
dest6.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
frag6.c Remove sys/eventhandler.h from net/route.h 2016-01-09 09:34:39 +00:00
icmp6.c Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket(). 2016-01-10 13:40:29 +00:00
icmp6.h
in6_cksum.c Fix the checksum computation for UDPLite/IPv6. This requires the 2014-10-02 10:32:24 +00:00
in6_fib.c MFP r287070,r287073: split radix implementation and route table structure. 2016-01-25 06:33:15 +00:00
in6_fib.h Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
in6_gif.c Use correct lookup key for gif route lookups. 2015-12-09 22:09:33 +00:00
in6_ifattach.c Just checkpoint the WIP in order to be able to make the tree update 2016-01-22 15:00:01 +00:00
in6_ifattach.h Just checkpoint the WIP in order to be able to make the tree update 2016-01-22 15:00:01 +00:00
in6_mcast.c Make in_arpinput(), inp_lookup_mcast_ifp(), icmp_reflect(), 2015-12-09 11:14:27 +00:00
in6_pcb.c Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket(). 2016-01-10 13:40:29 +00:00
in6_pcb.h Make in6_pcblookup_hash_locked and in6_pcbladdr static. 2014-09-10 13:17:35 +00:00
in6_pcbgroup.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
in6_proto.c MfH @r295202 2016-02-03 11:49:51 +00:00
in6_rmx.c Code duplication but rib_head is special. Not found an easy way to go 2016-02-03 21:56:51 +00:00
in6_rss.c [netinet6]: Create a new IPv6 netisr which expects the frames to have been verified. 2015-11-06 23:07:43 +00:00
in6_rss.h Implement RSS hashing/re-hashing for IPv6 ingress packets. 2015-08-29 07:14:29 +00:00
in6_src.c Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket(). 2016-01-10 13:40:29 +00:00
in6_var.h Revert r292275 & r292379 2015-12-17 14:41:30 +00:00
in6.c Ternary operator has lower priority than OR. 2016-02-17 21:17:14 +00:00
in6.h Handle IPV6_PATHMTU option by spliting ip6_getpmtu_ctl() from ip6_getpmtu(). 2016-01-03 09:54:03 +00:00
ip6_ecn.h
ip6_forward.c Fix rte refcount leak in ip6_forward(). 2016-01-20 11:25:30 +00:00
ip6_gre.c Extern declarations in C files loses compile-time checking that 2014-12-25 21:32:37 +00:00
ip6_id.c Provide includes that are needed in these files, and before were read 2013-10-26 18:18:50 +00:00
ip6_input.c MFp4 @180892: 2016-01-22 18:09:25 +00:00
ip6_ipsec.c Take extra reference to security policy before calling crypto_dispatch(). 2015-09-30 08:16:33 +00:00
ip6_ipsec.h Remove flag/flags argument from the following functions: 2014-12-11 18:35:34 +00:00
ip6_mroute.c Just checkpoint the WIP in order to be able to make the tree update 2016-01-22 15:00:01 +00:00
ip6_mroute.h o Make net.inet6.ip6.mif6table return special API structure, that doesn't 2015-04-06 22:12:18 +00:00
ip6_output.c New way to manage reference counting of mbuf external storage. 2016-03-01 00:17:14 +00:00
ip6_var.h New way to manage reference counting of mbuf external storage. 2016-03-01 00:17:14 +00:00
ip6.h
ip6protosw.h Merge 'struct ip6protosw' and 'struct protosw' into one. Now we have 2014-08-08 01:57:15 +00:00
mld6_var.h - Rename 'struct mld_ifinfo' into 'struct mld_ifsoftc', since it really 2015-02-19 22:37:01 +00:00
mld6.c Just checkpoint the WIP in order to be able to make the tree update 2016-01-22 15:00:01 +00:00
mld6.h
nd6_nbr.c Lock the NDP default router list and count defrouter references. 2016-02-25 20:12:05 +00:00
nd6_rtr.c Lock the NDP default router list and count defrouter references. 2016-02-25 20:12:05 +00:00
nd6.c Lock the NDP default router list and count defrouter references. 2016-02-25 20:12:05 +00:00
nd6.h Lock the NDP default router list and count defrouter references. 2016-02-25 20:12:05 +00:00
pim6_var.h Remove more constants related to static sysctl nodes. The MAXID constants 2014-02-25 18:44:33 +00:00
pim6.h
raw_ip6.c Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket(). 2016-01-10 13:40:29 +00:00
raw_ip6.h Migrate structs ip6stat, icmp6stat and rip6stat to PCPU counters. 2013-07-09 09:54:54 +00:00
route6.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
scope6_var.h Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
scope6.c Add a missing newline to a log message. 2016-02-12 21:17:00 +00:00
sctp6_usrreq.c Don't leak an address in an error path. 2016-02-23 18:50:34 +00:00
sctp6_var.h
send.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
send.h
tcp6_var.h
udp6_usrreq.c Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket(). 2016-01-10 13:40:29 +00:00
udp6_var.h Add support for UDP-Lite protocol (RFC 3828) to IPv4 and IPv6 stacks. 2014-04-07 01:53:03 +00:00