--- old/usr/src/cmd/mandoc/msec.in	2017-02-02 13:24:10.739445663 -0500
+++ new/usr/src/cmd/mandoc/msec.in	2017-02-02 13:24:10.784480132 -0500
@@ -104,7 +104,7 @@
 LINE("7M",		"STREAMS Modules")
 LINE("7P",		"Protocols")
 LINE("8",		"Maintenance Procedures")
-LINE("9",		"Device Driver Interfaces")
+LINE("9",		"Kernel Concepts")
 LINE("9E",		"Driver Entry Points")
 LINE("9F",		"Kernel Functions for Drivers")
 LINE("9P",		"Kernel Properties for Drivers")
--- /dev/null	2017-02-02 13:24:12.000000000 -0500
+++ new/usr/src/man/man9/Intro.9	2017-02-02 13:24:12.101015726 -0500
@@ -0,0 +1,22 @@
+.Dd Jan 25, 2017
+.Dt INTRO 9
+.Os
+.Sh NAME
+.Nm Intro ,
+.Nm intro
+.Nd introduction to kernel concepts
+.Sh DESCRIPTION
+This section outlines high-level concepts of the illumos kernel and its
+subsystems.  Specific documentation can be found in this section's
+sub\-sections.
+.Bl -tag -width Ds
+.It Section 9E
+Driver Entry Points
+.It Section 9F
+Kernel Functions for Drivers
+.It Section 9P
+Kernel Properties for Drivers
+.It Section 9S
+Data Structures for Drivers
+.El
+
--- old/usr/src/man/man9/Makefile	2017-02-02 13:24:12.659987767 -0500
+++ new/usr/src/man/man9/Makefile	2017-02-02 13:24:12.704946960 -0500
@@ -10,22 +10,23 @@
 #
 
 #
-# Copyright 2011, Richard Lowe
+# Copyright 2017, Richard Lowe
 # Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
 #
 
 include		$(SRC)/Makefile.master
 
 MANSECT= 	9
+MANFILES=	Intro.9	\
+		vmem.9
 
-MANLINKS=	Intro.9		\
-		intro.9
 
-Intro.9		:= LINKSRC = ../man9e/Intro.9e
-intro.9		:= LINKSRC = ../man9e/Intro.9e
+MANLINKS=	intro.9
+
+intro.9		:= LINKSRC = Intro.9
 
 .KEEP_STATE:
 
 include		$(SRC)/man/Makefile.man
 
-install: 	$(ROOTMANLINKS)
+install: 	$(ROOTMANFILES) $(ROOTMANLINKS)
--- /dev/null	2017-02-02 13:24:13.000000000 -0500
+++ new/usr/src/man/man9/vmem.9	2017-02-02 13:24:13.729724303 -0500
@@ -0,0 +1,175 @@
+.\"
+.\" CDDL HEADER START
+.\"
+.\" The contents of this file are subject to the terms of the
+.\" Common Development and Distribution License (the "License").
+.\" You may not use this file except in compliance with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+.\" or http://www.opensolaris.org/os/licensing.
+.\" See the License for the specific language governing permissions
+.\" and limitations under the License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each
+.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+.\" If applicable, add the following below this CDDL HEADER, with the
+.\" fields enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.\"
+.\" CDDL HEADER END
+.\"
+.\"
+.\" Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
+.\" Use is subject to license terms.
+.\"
+.\" Copyright (c) 2012, 2015 by Delphix. All rights reserved.
+.\" Copyright (c) 2012, Joyent, Inc. All rights reserved.
+.\"
+.\" The text of this is derived from section 1 of the big theory statement in
+.\" usr/src/uts/common/os/vmem.c, the traditional location of this text.  They
+.\" should largely be updated in tandem.
+.Dd Jan 18, 2017
+.Dt VMEM 9
+.Os
+.Sh NAME
+.Nm vmem
+.Nd virtual memory allocator
+.Sh DESCRIPTION
+.Ss Overview
+An address space is divided into a number of logically distinct pieces, or
+.Em arenas :
+text, data, heap, stack, and so on.
+Within these
+arenas we often subdivide further; for example, we use heap addresses
+not only for the kernel heap
+.Po
+.Fn kmem_alloc
+space
+.Pc ,
+but also for DVMA,
+.Fn bp_mapin ,
+.Pa /dev/kmem ,
+and even some device mappings.
+.Pp
+The kernel address space, therefore, is most accurately described as
+a tree of arenas in which each node of the tree
+.Em imports
+some subset of its parent.
+The virtual memory allocator manages these arenas
+and supports their natural hierarchical structure.
+.Ss Arenas
+An arena is nothing more than a set of integers.  These integers most
+commonly represent virtual addresses, but in fact they can represent
+anything at all.  For example, we could use an arena containing the
+integers minpid through maxpid to allocate process IDs.  For uses of this
+nature, prefer
+.Xr id_space 9F
+instead.
+.Pp
+.Fn vmem_create
+and
+.Fn vmem_destroy
+create and destroy vmem arenas.  In order to differentiate between arenas used
+for adresses and arenas used for identifiers, the
+.Dv VMC_IDENTIFIER
+flag is passed to
+.Fn vmem_create .
+This prevents identifier exhaustion from being diagnosed as general memory
+failure.
+.Ss Spans
+We represent the integers in an arena as a collection of
+.Em spans ,
+or contiguous ranges of integers.  For example, the kernel heap consists of
+just one span:
+.Li "[kernelheap, ekernelheap)" .
+Spans can be added to an arena in two ways: explicitly, by
+.Fn vmem_add ,
+or implicitly, by importing, as described in
+.Sx Imported Memory
+below.
+.Ss Segments
+Spans are subdivided into
+.Em segments ,
+each of which is either allocated or free.  A segment, like a span, is a
+contiguous range of integers.  Each allocated segment
+.Li "[addr, addr + size)"
+represents exactly one
+.Li "vmem_alloc(size)"
+that returned
+.Sy addr .
+Free segments represent the space between allocated segments.  If two free
+segments are adjacent, we coalesce them into one larger segment; that is, if
+segments
+.Li "[a, b)"
+and
+.Li "[b, c)"
+are both free, we merge them into a single segment
+.Li "[a, c)" .
+The segments within a span are linked together in increasing\-address
+order so we can easily determine whether coalescing is possible.
+.Pp
+Segments never cross span boundaries.  When all segments within an imported
+span become free, we return the span to its source.
+.Ss Imported Memory
+As mentioned in the overview, some arenas are logical subsets of
+other arenas.  For example,
+.Sy kmem_va_arena
+(a virtual address cache
+that satisfies most
+.Fn kmem_slab_create
+requests) is just a subset of
+.Sy heap_arena
+(the kernel heap) that provides caching for the most common slab sizes.  When
+.Sy kmem_va_arena
+runs out of virtual memory, it
+.Em imports more from the heap; we
+say that
+.Sy heap_arena
+is the
+.Em "vmem source" for
+.Sy kmem_va_arena.
+.Fn vmem_create
+allows you to specify any existing vmem arena as the source for your new
+arena.  Topologically, since every arena is a child of at most one source, the
+set of all arenas forms a collection of trees.
+.Ss Constrained Allocations
+Some vmem clients are quite picky about the kind of address they want.
+For example, the DVMA code may need an address that is at a particular
+phase with respect to some alignment (to get good cache coloring), or
+that lies within certain limits (the addressable range of a device),
+or that doesn't cross some boundary (a DMA counter restriction) \(em
+or all of the above.
+.Fn vmem_xalloc
+allows the client to specify any or all of these constraints.
+.Ss The Vmem Quantum
+Every arena has a notion of
+.Sq quantum ,
+specified at
+.Fn vmem_create
+time, that defines the arena's minimum unit of currency.  Most commonly the
+quantum is either 1 or
+.Dv PAGESIZE ,
+but any power of 2 is legal.  All vmem allocations are guaranteed to be
+quantum\-aligned.
+.Ss Relationship to the Kernel Memory Allocator
+Every kmem cache has a vmem arena as its slab supplier.  The kernel memory
+allocator uses
+.Fn vmem_alloc
+and
+.Fn vmem_free
+to create and destroy slabs.
+.Sh SEE ALSO
+.Xr id_space 9F ,
+.Xr vmem_add 9F ,
+.Xr vmem_alloc 9F ,
+.Xr vmem_contains 9F ,
+.Xr vmem_create 9F ,
+.Xr vmem_walk 9F
+.Pp
+.Rs
+.%A Jeff Bonwick
+.%A Jonathan Adams
+.%T Magazines and vmem: Extending the Slab Allocator to Many CPUs and Arbitrary Resources.
+.%J Proceedings of the 2001 Usenix Conference
+.%U http://www.usenix.org/event/usenix01/bonwick.html
+.Re
--- old/usr/src/man/man9f/Makefile	2017-02-02 13:24:14.295515746 -0500
+++ new/usr/src/man/man9f/Makefile	2017-02-02 13:24:14.336498180 -0500
@@ -10,7 +10,7 @@
 #
 
 #
-# Copyright 2011, Richard Lowe
+# Copyright 2017, Richard Lowe
 # Copyright 2014 Garrett D'Amore <garrett@damore>
 # Copyright 2016 Joyent, Inc.
 # Copyright 2016 Nexenta Systems, Inc.
@@ -524,708 +524,719 @@
 		usb_register_hotplug_cbs.9f		\
 		usb_reset_device.9f			\
 		uwritec.9f				\
-		va_arg.9f
-
-MANLINKS=	AVL_NEXT.9f				\
-		AVL_PREV.9f				\
-		SIZEOF_PTR.9f				\
-		SIZEOF_STRUCT.9f			\
-		STRUCT_BUF.9f				\
-		STRUCT_FADDR.9f				\
-		STRUCT_FGET.9f				\
-		STRUCT_FGETP.9f				\
-		STRUCT_FSET.9f				\
-		STRUCT_FSETP.9f				\
-		STRUCT_HANDLE.9f			\
-		STRUCT_INIT.9f				\
-		STRUCT_SET_HANDLE.9f			\
-		STRUCT_SIZE.9f				\
-		assert.9f				\
-		atomic_add_16.9f			\
-		atomic_add_16_nv.9f			\
-		atomic_add_32.9f			\
-		atomic_add_32_nv.9f			\
-		atomic_add_64.9f			\
-		atomic_add_64_nv.9f			\
-		atomic_add_8.9f				\
-		atomic_add_8_nv.9f			\
-		atomic_add_char.9f			\
-		atomic_add_char_nv.9f			\
-		atomic_add_int.9f			\
-		atomic_add_int_nv.9f			\
-		atomic_add_long.9f			\
-		atomic_add_long_nv.9f			\
-		atomic_add_ptr.9f			\
-		atomic_add_ptr_nv.9f			\
-		atomic_add_short.9f			\
-		atomic_add_short_nv.9f			\
-		atomic_and_16.9f			\
-		atomic_and_16_nv.9f			\
-		atomic_and_32.9f			\
-		atomic_and_32_nv.9f			\
-		atomic_and_64.9f			\
-		atomic_and_64_nv.9f			\
-		atomic_and_8.9f				\
-		atomic_and_8_nv.9f			\
-		atomic_and_uchar.9f			\
-		atomic_and_uchar_nv.9f			\
-		atomic_and_uint.9f			\
-		atomic_and_uint_nv.9f			\
-		atomic_and_ulong.9f			\
-		atomic_and_ulong_nv.9f			\
-		atomic_and_ushort.9f			\
-		atomic_and_ushort_nv.9f			\
-		atomic_cas_16.9f			\
-		atomic_cas_32.9f			\
-		atomic_cas_64.9f			\
-		atomic_cas_8.9f				\
-		atomic_cas_ptr.9f			\
-		atomic_cas_uchar.9f			\
-		atomic_cas_uint.9f			\
-		atomic_cas_ulong.9f			\
-		atomic_cas_ushort.9f			\
-		atomic_clear_long_excl.9f		\
-		atomic_dec_16.9f			\
-		atomic_dec_16_nv.9f			\
-		atomic_dec_32.9f			\
-		atomic_dec_32_nv.9f			\
-		atomic_dec_64.9f			\
-		atomic_dec_64_nv.9f			\
-		atomic_dec_8.9f				\
-		atomic_dec_8_nv.9f			\
-		atomic_dec_ptr.9f			\
-		atomic_dec_ptr_nv.9f			\
-		atomic_dec_uchar.9f			\
-		atomic_dec_uchar_nv.9f			\
-		atomic_dec_uint.9f			\
-		atomic_dec_uint_nv.9f			\
-		atomic_dec_ulong.9f			\
-		atomic_dec_ulong_nv.9f			\
-		atomic_dec_ushort.9f			\
-		atomic_dec_ushort_nv.9f			\
-		atomic_inc_16.9f			\
-		atomic_inc_16_nv.9f			\
-		atomic_inc_32.9f			\
-		atomic_inc_32_nv.9f			\
-		atomic_inc_64.9f			\
-		atomic_inc_64_nv.9f			\
-		atomic_inc_8.9f				\
-		atomic_inc_8_nv.9f			\
-		atomic_inc_ptr.9f			\
-		atomic_inc_ptr_nv.9f			\
-		atomic_inc_uchar.9f			\
-		atomic_inc_uchar_nv.9f			\
-		atomic_inc_uint.9f			\
-		atomic_inc_uint_nv.9f			\
-		atomic_inc_ulong.9f			\
-		atomic_inc_ulong_nv.9f			\
-		atomic_inc_ushort.9f			\
-		atomic_inc_ushort_nv.9f			\
-		atomic_or_16.9f				\
-		atomic_or_16_nv.9f			\
-		atomic_or_32.9f				\
-		atomic_or_32_nv.9f			\
-		atomic_or_64.9f				\
-		atomic_or_64_nv.9f			\
-		atomic_or_8.9f				\
-		atomic_or_8_nv.9f			\
-		atomic_or_uchar.9f			\
-		atomic_or_uchar_nv.9f			\
-		atomic_or_uint.9f			\
-		atomic_or_uint_nv.9f			\
-		atomic_or_ulong.9f			\
-		atomic_or_ulong_nv.9f			\
-		atomic_or_ushort.9f			\
-		atomic_or_ushort_nv.9f			\
-		atomic_set_long_excl.9f			\
-		atomic_swap_16.9f			\
-		atomic_swap_32.9f			\
-		atomic_swap_64.9f			\
-		atomic_swap_8.9f			\
-		atomic_swap_ptr.9f			\
-		atomic_swap_uchar.9f			\
-		atomic_swap_uint.9f			\
-		atomic_swap_ulong.9f			\
-		atomic_swap_ushort.9f			\
-		avl_add.9f				\
-		avl_create.9f				\
-		avl_destroy.9f				\
-		avl_destroy_nodes.9f			\
-		avl_find.9f 				\
-		avl_first.9f				\
-		avl_insert.9f				\
-		avl_insert_here.9f			\
-		avl_is_empty.9f				\
-		avl_last.9f				\
-		avl_nearest.9f				\
-		avl_numnodes.9f				\
-		avl_remove.9f				\
-		avl_swap.9f				\
-		bcanputnext.9f				\
-		crgetgid.9f				\
-		crgetgroups.9f				\
-		crgetngroups.9f				\
-		crgetrgid.9f				\
-		crgetruid.9f				\
-		crgetsgid.9f				\
-		crgetsuid.9f				\
-		crgetuid.9f				\
-		crgetzoneid.9f				\
-		csx_Get16.9f				\
-		csx_Get32.9f				\
-		csx_Get64.9f				\
-		csx_GetEventMask.9f			\
-		csx_GetNextClient.9f			\
-		csx_GetNextTuple.9f			\
-		csx_Parse_CISTPL_DEVICE_A.9f		\
-		csx_Parse_CISTPL_DEVICE_OA.9f		\
-		csx_Parse_CISTPL_DEVICE_OC.9f		\
-		csx_Parse_CISTPL_JEDEC_A.9f		\
-		csx_Parse_CISTPL_LONGLINK_C.9f		\
-		csx_Put16.9f				\
-		csx_Put32.9f				\
-		csx_Put64.9f				\
-		csx_ReleaseIO.9f			\
-		csx_ReleaseIRQ.9f			\
-		csx_ReleaseSocketMask.9f		\
-		csx_ReleaseWindow.9f			\
-		csx_RemoveDeviceNode.9f			\
-		csx_RepGet16.9f				\
-		csx_RepGet32.9f				\
-		csx_RepGet64.9f				\
-		csx_RepPut16.9f				\
-		csx_RepPut32.9f				\
-		csx_RepPut64.9f				\
-		cv_broadcast.9f				\
-		cv_destroy.9f				\
-		cv_init.9f				\
-		cv_reltimedwait.9f			\
-		cv_reltimedwait_sig.9f			\
-		cv_signal.9f				\
-		cv_timedwait.9f				\
-		cv_timedwait_sig.9f			\
-		cv_wait.9f				\
-		cv_wait_sig.9f				\
-		ddi_btopr.9f				\
-		ddi_cb_unregister.9f			\
-		ddi_check_dma_handle.9f			\
-		ddi_devid_free.9f			\
-		ddi_devid_get.9f			\
-		ddi_devid_init.9f			\
-		ddi_devid_register.9f			\
-		ddi_devid_sizeof.9f			\
-		ddi_devid_str_decode.9f			\
-		ddi_devid_str_encode.9f			\
-		ddi_devid_str_free.9f			\
-		ddi_devid_unregister.9f			\
-		ddi_devid_valid.9f			\
-		ddi_devmap_segmap.9f			\
-		ddi_dmae_1stparty.9f			\
-		ddi_dmae_alloc.9f			\
-		ddi_dmae_disable.9f			\
-		ddi_dmae_enable.9f			\
-		ddi_dmae_getattr.9f			\
-		ddi_dmae_getcnt.9f			\
-		ddi_dmae_prog.9f			\
-		ddi_dmae_release.9f			\
-		ddi_dmae_stop.9f			\
-		ddi_exit_critical.9f			\
-		ddi_fls.9f				\
-		ddi_fm_capable.9f			\
-		ddi_fm_dma_err_clear.9f			\
-		ddi_fm_dma_err_get.9f			\
-		ddi_fm_fini.9f				\
-		ddi_fm_handler_unregister.9f		\
-		ddi_get16.9f				\
-		ddi_get32.9f				\
-		ddi_get64.9f				\
-		ddi_get_iblock_cookie.9f		\
-		ddi_get_lbolt64.9f			\
-		ddi_get_name.9f				\
-		ddi_get_soft_iblock_cookie.9f		\
-		ddi_get_soft_state.9f			\
-		ddi_getb.9f				\
-		ddi_getl.9f				\
-		ddi_getll.9f				\
-		ddi_getlongprop.9f			\
-		ddi_getlongprop_buf.9f			\
-		ddi_getprop.9f				\
-		ddi_getproplen.9f			\
-		ddi_getw.9f				\
-		ddi_intr_block_disable.9f		\
-		ddi_intr_block_enable.9f		\
-		ddi_intr_clr_mask.9f			\
-		ddi_intr_disable.9f			\
-		ddi_intr_free.9f			\
-		ddi_intr_get_navail.9f			\
-		ddi_intr_get_softint_pri.9f		\
-		ddi_intr_remove_handler.9f		\
-		ddi_intr_remove_softint.9f		\
-		ddi_intr_set_cap.9f			\
-		ddi_intr_set_pri.9f			\
-		ddi_intr_set_softint_pri.9f		\
-		ddi_intr_trigger_softint.9f		\
-		ddi_io_get16.9f				\
-		ddi_io_get32.9f				\
-		ddi_io_getb.9f				\
-		ddi_io_getl.9f				\
-		ddi_io_getw.9f				\
-		ddi_io_put16.9f				\
-		ddi_io_put32.9f				\
-		ddi_io_putb.9f				\
-		ddi_io_putl.9f				\
-		ddi_io_putw.9f				\
-		ddi_io_rep_get16.9f			\
-		ddi_io_rep_get32.9f			\
-		ddi_io_rep_getb.9f			\
-		ddi_io_rep_getl.9f			\
-		ddi_io_rep_getw.9f			\
-		ddi_io_rep_put16.9f			\
-		ddi_io_rep_put32.9f			\
-		ddi_io_rep_putb.9f			\
-		ddi_io_rep_putl.9f			\
-		ddi_io_rep_putw.9f			\
-		ddi_mem_get16.9f			\
-		ddi_mem_get32.9f			\
-		ddi_mem_get64.9f			\
-		ddi_mem_getb.9f				\
-		ddi_mem_getl.9f				\
-		ddi_mem_getll.9f			\
-		ddi_mem_getw.9f				\
-		ddi_mem_put16.9f			\
-		ddi_mem_put32.9f			\
-		ddi_mem_put64.9f			\
-		ddi_mem_putb.9f				\
-		ddi_mem_putl.9f				\
-		ddi_mem_putll.9f			\
-		ddi_mem_putw.9f				\
-		ddi_mem_rep_get16.9f			\
-		ddi_mem_rep_get32.9f			\
-		ddi_mem_rep_get64.9f			\
-		ddi_mem_rep_getb.9f			\
-		ddi_mem_rep_getl.9f			\
-		ddi_mem_rep_getll.9f			\
-		ddi_mem_rep_getw.9f			\
-		ddi_mem_rep_put16.9f			\
-		ddi_mem_rep_put32.9f			\
-		ddi_mem_rep_put64.9f			\
-		ddi_mem_rep_putb.9f			\
-		ddi_mem_rep_putl.9f			\
-		ddi_mem_rep_putll.9f			\
-		ddi_mem_rep_putw.9f			\
-		ddi_modclose.9f				\
-		ddi_modsym.9f				\
-		ddi_peek16.9f				\
-		ddi_peek32.9f				\
-		ddi_peek64.9f				\
-		ddi_peek8.9f				\
-		ddi_peekc.9f				\
-		ddi_peekd.9f				\
-		ddi_peekl.9f				\
-		ddi_peeks.9f				\
-		ddi_poke16.9f				\
-		ddi_poke32.9f				\
-		ddi_poke64.9f				\
-		ddi_poke8.9f				\
-		ddi_pokec.9f				\
-		ddi_poked.9f				\
-		ddi_pokel.9f				\
-		ddi_pokes.9f				\
-		ddi_prop_free.9f			\
-		ddi_prop_get_int64.9f			\
-		ddi_prop_lookup_byte_array.9f		\
-		ddi_prop_lookup_int64_array.9f		\
-		ddi_prop_lookup_int_array.9f		\
-		ddi_prop_lookup_string.9f		\
-		ddi_prop_lookup_string_array.9f		\
-		ddi_prop_modify.9f			\
-		ddi_prop_remove.9f			\
-		ddi_prop_remove_all.9f			\
-		ddi_prop_undefine.9f			\
-		ddi_prop_update_byte_array.9f		\
-		ddi_prop_update_int.9f			\
-		ddi_prop_update_int64.9f		\
-		ddi_prop_update_int64_array.9f		\
-		ddi_prop_update_int_array.9f		\
-		ddi_prop_update_string.9f		\
-		ddi_prop_update_string_array.9f		\
-		ddi_ptob.9f				\
-		ddi_put16.9f				\
-		ddi_put32.9f				\
-		ddi_put64.9f				\
-		ddi_putb.9f				\
-		ddi_putl.9f				\
-		ddi_putll.9f				\
-		ddi_putw.9f				\
-		ddi_remove_intr.9f			\
-		ddi_remove_softintr.9f			\
-		ddi_rep_get16.9f			\
-		ddi_rep_get32.9f			\
-		ddi_rep_get64.9f			\
-		ddi_rep_getb.9f				\
-		ddi_rep_getl.9f				\
-		ddi_rep_getll.9f			\
-		ddi_rep_getw.9f				\
-		ddi_rep_put16.9f			\
-		ddi_rep_put32.9f			\
-		ddi_rep_put64.9f			\
-		ddi_rep_putb.9f				\
-		ddi_rep_putl.9f				\
-		ddi_rep_putll.9f			\
-		ddi_rep_putw.9f				\
-		ddi_segmap_setup.9f			\
-		ddi_set_driver_private.9f		\
-		ddi_soft_state_fini.9f			\
-		ddi_soft_state_free.9f			\
-		ddi_soft_state_init.9f			\
-		ddi_soft_state_zalloc.9f		\
-		ddi_strdup.9f				\
-		ddi_strtoull.9f				\
-		ddi_taskq_create.9f			\
-		ddi_taskq_destroy.9f			\
-		ddi_taskq_dispatch.9f			\
-		ddi_taskq_resume.9f			\
-		ddi_taskq_suspend.9f			\
-		ddi_taskq_wait.9f			\
-		ddi_trigger_softintr.9f			\
-		ddi_umem_free.9f			\
-		ddi_umem_unlock.9f			\
-		ddi_unmap_regs.9f			\
-		desballoc.9f				\
-		dev_err.9f				\
-		devmap_load.9f				\
-		devmap_umem_setup.9f			\
-		dlerrorack.9f				\
-		dlokack.9f				\
-		dlphysaddrack.9f			\
-		dluderrorind.9f				\
-		firmware_close.9f			\
-		firmware_free.9f			\
-		firmware_get_size.9f			\
-		firmware_malloc.9f			\
-		firmware_open.9f			\
-		firmware_read.9f			\
-		free_pktiopb.9f				\
-		gld_intr.9f				\
-		gld_mac_alloc.9f			\
-		gld_mac_free.9f				\
-		gld_recv.9f				\
-		gld_register.9f				\
-		gld_sched.9f				\
-		gld_unregister.9f			\
-		id32_free.9f				\
-		id32_lookup.9f				\
-		id_alloc.9f				\
-		id_alloc_nosleep.9f			\
-		id_alloc_specific_nosleep.9f		\
-		id_allocff.9f				\
-		id_allocff_nosleep.9f			\
-		id_free.9f				\
-		id_space_create.9f			\
-		id_space_destroy.9f			\
-		id_space_extend.9f			\
-		inl.9f					\
-		intro.9f				\
-		inw.9f					\
-		kmem_cache_alloc.9f			\
-		kmem_cache_destroy.9f			\
-		kmem_cache_free.9f			\
-		kmem_cache_set_move.9f			\
-		kmem_free.9f				\
-		kmem_zalloc.9f				\
-		kstat_named_setstr.9f			\
-		kstat_runq_back_to_waitq.9f		\
-		kstat_runq_enter.9f			\
-		kstat_runq_exit.9f			\
-		kstat_waitq_enter.9f			\
-		kstat_waitq_exit.9f			\
-		kstat_waitq_to_runq.9f			\
-		ldi_awrite.9f				\
-		ldi_close.9f				\
-		ldi_get_devid.9f			\
-		ldi_get_minor_name.9f			\
-		ldi_get_otyp.9f				\
-		ldi_getmsg.9f				\
-		ldi_ident_from_dip.9f			\
-		ldi_ident_from_stream.9f		\
-		ldi_ident_release.9f			\
-		ldi_open_by_devid.9f			\
-		ldi_open_by_name.9f			\
-		ldi_prop_get_int64.9f			\
-		ldi_prop_lookup_byte_array.9f		\
-		ldi_prop_lookup_int64_array.9f		\
-		ldi_prop_lookup_string.9f		\
-		ldi_prop_lookup_string_array.9f		\
-		ldi_write.9f				\
-		list_destroy.9f				\
-		list_head.9f				\
-		list_insert_after.9f			\
-		list_insert_before.9f			\
-		list_insert_head.9f			\
-		list_insert_tail.9f			\
-		list_is_empty.9f			\
-		list_link_active.9f			\
-		list_link_init.9f			\
-		list_link_replace.9f			\
-		list_move_tail.9f			\
-		list_next.9f				\
-		list_prev.9f				\
-		list_remove.9f				\
-		list_remove_head.9f			\
-		list_remove_tail.9f			\
-		list_tail.9f				\
-		mac_fini_ops.9f				\
-		mac_free.9f				\
-		mac_hcksum_set.9f			\
+		va_arg.9f				\
+		vmem_add.9f				\
+		vmem_alloc.9f				\
+		vmem_contains.9f			\
+		vmem_create.9f				\
+		vmem_walk.9f				
+
+MANLINKS=	AVL_NEXT.9f					\
+		AVL_PREV.9f					\
+		SIZEOF_PTR.9f					\
+		SIZEOF_STRUCT.9f				\
+		STRUCT_BUF.9f					\
+		STRUCT_FADDR.9f					\
+		STRUCT_FGET.9f					\
+		STRUCT_FGETP.9f					\
+		STRUCT_FSET.9f					\
+		STRUCT_FSETP.9f					\
+		STRUCT_HANDLE.9f				\
+		STRUCT_INIT.9f					\
+		STRUCT_SET_HANDLE.9f				\
+		STRUCT_SIZE.9f					\
+		assert.9f					\
+		atomic_add_16.9f				\
+		atomic_add_16_nv.9f				\
+		atomic_add_32.9f				\
+		atomic_add_32_nv.9f				\
+		atomic_add_64.9f				\
+		atomic_add_64_nv.9f				\
+		atomic_add_8.9f					\
+		atomic_add_8_nv.9f				\
+		atomic_add_char.9f				\
+		atomic_add_char_nv.9f				\
+		atomic_add_int.9f				\
+		atomic_add_int_nv.9f				\
+		atomic_add_long.9f				\
+		atomic_add_long_nv.9f				\
+		atomic_add_ptr.9f				\
+		atomic_add_ptr_nv.9f				\
+		atomic_add_short.9f				\
+		atomic_add_short_nv.9f				\
+		atomic_and_16.9f				\
+		atomic_and_16_nv.9f				\
+		atomic_and_32.9f				\
+		atomic_and_32_nv.9f				\
+		atomic_and_64.9f				\
+		atomic_and_64_nv.9f				\
+		atomic_and_8.9f					\
+		atomic_and_8_nv.9f				\
+		atomic_and_uchar.9f				\
+		atomic_and_uchar_nv.9f				\
+		atomic_and_uint.9f				\
+		atomic_and_uint_nv.9f				\
+		atomic_and_ulong.9f				\
+		atomic_and_ulong_nv.9f				\
+		atomic_and_ushort.9f				\
+		atomic_and_ushort_nv.9f				\
+		atomic_cas_16.9f				\
+		atomic_cas_32.9f				\
+		atomic_cas_64.9f				\
+		atomic_cas_8.9f					\
+		atomic_cas_ptr.9f				\
+		atomic_cas_uchar.9f				\
+		atomic_cas_uint.9f				\
+		atomic_cas_ulong.9f				\
+		atomic_cas_ushort.9f				\
+		atomic_clear_long_excl.9f			\
+		atomic_dec_16.9f				\
+		atomic_dec_16_nv.9f				\
+		atomic_dec_32.9f				\
+		atomic_dec_32_nv.9f				\
+		atomic_dec_64.9f				\
+		atomic_dec_64_nv.9f				\
+		atomic_dec_8.9f					\
+		atomic_dec_8_nv.9f				\
+		atomic_dec_ptr.9f				\
+		atomic_dec_ptr_nv.9f				\
+		atomic_dec_uchar.9f				\
+		atomic_dec_uchar_nv.9f				\
+		atomic_dec_uint.9f				\
+		atomic_dec_uint_nv.9f				\
+		atomic_dec_ulong.9f				\
+		atomic_dec_ulong_nv.9f				\
+		atomic_dec_ushort.9f				\
+		atomic_dec_ushort_nv.9f				\
+		atomic_inc_16.9f				\
+		atomic_inc_16_nv.9f				\
+		atomic_inc_32.9f				\
+		atomic_inc_32_nv.9f				\
+		atomic_inc_64.9f				\
+		atomic_inc_64_nv.9f				\
+		atomic_inc_8.9f					\
+		atomic_inc_8_nv.9f				\
+		atomic_inc_ptr.9f				\
+		atomic_inc_ptr_nv.9f				\
+		atomic_inc_uchar.9f				\
+		atomic_inc_uchar_nv.9f				\
+		atomic_inc_uint.9f				\
+		atomic_inc_uint_nv.9f				\
+		atomic_inc_ulong.9f				\
+		atomic_inc_ulong_nv.9f				\
+		atomic_inc_ushort.9f				\
+		atomic_inc_ushort_nv.9f				\
+		atomic_or_16.9f					\
+		atomic_or_16_nv.9f				\
+		atomic_or_32.9f					\
+		atomic_or_32_nv.9f				\
+		atomic_or_64.9f					\
+		atomic_or_64_nv.9f				\
+		atomic_or_8.9f					\
+		atomic_or_8_nv.9f				\
+		atomic_or_uchar.9f				\
+		atomic_or_uchar_nv.9f				\
+		atomic_or_uint.9f				\
+		atomic_or_uint_nv.9f				\
+		atomic_or_ulong.9f				\
+		atomic_or_ulong_nv.9f				\
+		atomic_or_ushort.9f				\
+		atomic_or_ushort_nv.9f				\
+		atomic_set_long_excl.9f				\
+		atomic_swap_16.9f				\
+		atomic_swap_32.9f				\
+		atomic_swap_64.9f				\
+		atomic_swap_8.9f				\
+		atomic_swap_ptr.9f				\
+		atomic_swap_uchar.9f				\
+		atomic_swap_uint.9f				\
+		atomic_swap_ulong.9f				\
+		atomic_swap_ushort.9f				\
+		avl_add.9f					\
+		avl_create.9f					\
+		avl_destroy.9f					\
+		avl_destroy_nodes.9f				\
+		avl_find.9f					\
+		avl_first.9f					\
+		avl_insert.9f					\
+		avl_insert_here.9f				\
+		avl_is_empty.9f					\
+		avl_last.9f					\
+		avl_nearest.9f					\
+		avl_numnodes.9f					\
+		avl_remove.9f					\
+		avl_swap.9f					\
+		bcanputnext.9f					\
+		crgetgid.9f					\
+		crgetgroups.9f					\
+		crgetngroups.9f					\
+		crgetrgid.9f					\
+		crgetruid.9f					\
+		crgetsgid.9f					\
+		crgetsuid.9f					\
+		crgetuid.9f					\
+		crgetzoneid.9f					\
+		csx_Get16.9f					\
+		csx_Get32.9f					\
+		csx_Get64.9f					\
+		csx_GetEventMask.9f				\
+		csx_GetNextClient.9f				\
+		csx_GetNextTuple.9f				\
+		csx_Parse_CISTPL_DEVICE_A.9f			\
+		csx_Parse_CISTPL_DEVICE_OA.9f			\
+		csx_Parse_CISTPL_DEVICE_OC.9f			\
+		csx_Parse_CISTPL_JEDEC_A.9f			\
+		csx_Parse_CISTPL_LONGLINK_C.9f			\
+		csx_Put16.9f					\
+		csx_Put32.9f					\
+		csx_Put64.9f					\
+		csx_ReleaseIO.9f				\
+		csx_ReleaseIRQ.9f				\
+		csx_ReleaseSocketMask.9f			\
+		csx_ReleaseWindow.9f				\
+		csx_RemoveDeviceNode.9f				\
+		csx_RepGet16.9f					\
+		csx_RepGet32.9f					\
+		csx_RepGet64.9f					\
+		csx_RepPut16.9f					\
+		csx_RepPut32.9f					\
+		csx_RepPut64.9f					\
+		cv_broadcast.9f					\
+		cv_destroy.9f					\
+		cv_init.9f					\
+		cv_reltimedwait.9f				\
+		cv_reltimedwait_sig.9f				\
+		cv_signal.9f					\
+		cv_timedwait.9f					\
+		cv_timedwait_sig.9f				\
+		cv_wait.9f					\
+		cv_wait_sig.9f					\
+		ddi_btopr.9f					\
+		ddi_cb_unregister.9f				\
+		ddi_check_dma_handle.9f				\
+		ddi_devid_free.9f				\
+		ddi_devid_get.9f				\
+		ddi_devid_init.9f				\
+		ddi_devid_register.9f				\
+		ddi_devid_sizeof.9f				\
+		ddi_devid_str_decode.9f				\
+		ddi_devid_str_encode.9f				\
+		ddi_devid_str_free.9f				\
+		ddi_devid_unregister.9f				\
+		ddi_devid_valid.9f				\
+		ddi_devmap_segmap.9f				\
+		ddi_dmae_1stparty.9f				\
+		ddi_dmae_alloc.9f				\
+		ddi_dmae_disable.9f				\
+		ddi_dmae_enable.9f				\
+		ddi_dmae_getattr.9f				\
+		ddi_dmae_getcnt.9f				\
+		ddi_dmae_prog.9f				\
+		ddi_dmae_release.9f				\
+		ddi_dmae_stop.9f				\
+		ddi_exit_critical.9f				\
+		ddi_fls.9f					\
+		ddi_fm_capable.9f				\
+		ddi_fm_dma_err_clear.9f				\
+		ddi_fm_dma_err_get.9f				\
+		ddi_fm_fini.9f					\
+		ddi_fm_handler_unregister.9f			\
+		ddi_get16.9f					\
+		ddi_get32.9f					\
+		ddi_get64.9f					\
+		ddi_get_iblock_cookie.9f			\
+		ddi_get_lbolt64.9f				\
+		ddi_get_name.9f					\
+		ddi_get_soft_iblock_cookie.9f			\
+		ddi_get_soft_state.9f				\
+		ddi_getb.9f					\
+		ddi_getl.9f					\
+		ddi_getll.9f					\
+		ddi_getlongprop.9f				\
+		ddi_getlongprop_buf.9f				\
+		ddi_getprop.9f					\
+		ddi_getproplen.9f				\
+		ddi_getw.9f					\
+		ddi_intr_block_disable.9f			\
+		ddi_intr_block_enable.9f			\
+		ddi_intr_clr_mask.9f				\
+		ddi_intr_disable.9f				\
+		ddi_intr_free.9f				\
+		ddi_intr_get_navail.9f				\
+		ddi_intr_get_softint_pri.9f			\
+		ddi_intr_remove_handler.9f			\
+		ddi_intr_remove_softint.9f			\
+		ddi_intr_set_cap.9f				\
+		ddi_intr_set_pri.9f				\
+		ddi_intr_set_softint_pri.9f			\
+		ddi_intr_trigger_softint.9f			\
+		ddi_io_get16.9f					\
+		ddi_io_get32.9f					\
+		ddi_io_getb.9f					\
+		ddi_io_getl.9f					\
+		ddi_io_getw.9f					\
+		ddi_io_put16.9f					\
+		ddi_io_put32.9f					\
+		ddi_io_putb.9f					\
+		ddi_io_putl.9f					\
+		ddi_io_putw.9f					\
+		ddi_io_rep_get16.9f				\
+		ddi_io_rep_get32.9f				\
+		ddi_io_rep_getb.9f				\
+		ddi_io_rep_getl.9f				\
+		ddi_io_rep_getw.9f				\
+		ddi_io_rep_put16.9f				\
+		ddi_io_rep_put32.9f				\
+		ddi_io_rep_putb.9f				\
+		ddi_io_rep_putl.9f				\
+		ddi_io_rep_putw.9f				\
+		ddi_mem_get16.9f				\
+		ddi_mem_get32.9f				\
+		ddi_mem_get64.9f				\
+		ddi_mem_getb.9f					\
+		ddi_mem_getl.9f					\
+		ddi_mem_getll.9f				\
+		ddi_mem_getw.9f					\
+		ddi_mem_put16.9f				\
+		ddi_mem_put32.9f				\
+		ddi_mem_put64.9f				\
+		ddi_mem_putb.9f					\
+		ddi_mem_putl.9f					\
+		ddi_mem_putll.9f				\
+		ddi_mem_putw.9f					\
+		ddi_mem_rep_get16.9f				\
+		ddi_mem_rep_get32.9f				\
+		ddi_mem_rep_get64.9f				\
+		ddi_mem_rep_getb.9f				\
+		ddi_mem_rep_getl.9f				\
+		ddi_mem_rep_getll.9f				\
+		ddi_mem_rep_getw.9f				\
+		ddi_mem_rep_put16.9f				\
+		ddi_mem_rep_put32.9f				\
+		ddi_mem_rep_put64.9f				\
+		ddi_mem_rep_putb.9f				\
+		ddi_mem_rep_putl.9f				\
+		ddi_mem_rep_putll.9f				\
+		ddi_mem_rep_putw.9f				\
+		ddi_modclose.9f					\
+		ddi_modsym.9f					\
+		ddi_peek16.9f					\
+		ddi_peek32.9f					\
+		ddi_peek64.9f					\
+		ddi_peek8.9f					\
+		ddi_peekc.9f					\
+		ddi_peekd.9f					\
+		ddi_peekl.9f					\
+		ddi_peeks.9f					\
+		ddi_poke16.9f					\
+		ddi_poke32.9f					\
+		ddi_poke64.9f					\
+		ddi_poke8.9f					\
+		ddi_pokec.9f					\
+		ddi_poked.9f					\
+		ddi_pokel.9f					\
+		ddi_pokes.9f					\
+		ddi_prop_free.9f				\
+		ddi_prop_get_int64.9f				\
+		ddi_prop_lookup_byte_array.9f			\
+		ddi_prop_lookup_int64_array.9f			\
+		ddi_prop_lookup_int_array.9f			\
+		ddi_prop_lookup_string.9f			\
+		ddi_prop_lookup_string_array.9f			\
+		ddi_prop_modify.9f				\
+		ddi_prop_remove.9f				\
+		ddi_prop_remove_all.9f				\
+		ddi_prop_undefine.9f				\
+		ddi_prop_update_byte_array.9f			\
+		ddi_prop_update_int.9f				\
+		ddi_prop_update_int64.9f			\
+		ddi_prop_update_int64_array.9f			\
+		ddi_prop_update_int_array.9f			\
+		ddi_prop_update_string.9f			\
+		ddi_prop_update_string_array.9f			\
+		ddi_ptob.9f					\
+		ddi_put16.9f					\
+		ddi_put32.9f					\
+		ddi_put64.9f					\
+		ddi_putb.9f					\
+		ddi_putl.9f					\
+		ddi_putll.9f					\
+		ddi_putw.9f					\
+		ddi_remove_intr.9f				\
+		ddi_remove_softintr.9f				\
+		ddi_rep_get16.9f				\
+		ddi_rep_get32.9f				\
+		ddi_rep_get64.9f				\
+		ddi_rep_getb.9f					\
+		ddi_rep_getl.9f					\
+		ddi_rep_getll.9f				\
+		ddi_rep_getw.9f					\
+		ddi_rep_put16.9f				\
+		ddi_rep_put32.9f				\
+		ddi_rep_put64.9f				\
+		ddi_rep_putb.9f					\
+		ddi_rep_putl.9f					\
+		ddi_rep_putll.9f				\
+		ddi_rep_putw.9f					\
+		ddi_segmap_setup.9f				\
+		ddi_set_driver_private.9f			\
+		ddi_soft_state_fini.9f				\
+		ddi_soft_state_free.9f				\
+		ddi_soft_state_init.9f				\
+		ddi_soft_state_zalloc.9f			\
+		ddi_strdup.9f					\
+		ddi_strtoull.9f					\
+		ddi_taskq_create.9f				\
+		ddi_taskq_destroy.9f				\
+		ddi_taskq_dispatch.9f				\
+		ddi_taskq_resume.9f				\
+		ddi_taskq_suspend.9f				\
+		ddi_taskq_wait.9f				\
+		ddi_trigger_softintr.9f				\
+		ddi_umem_free.9f				\
+		ddi_umem_unlock.9f				\
+		ddi_unmap_regs.9f				\
+		desballoc.9f					\
+		dev_err.9f					\
+		devmap_load.9f					\
+		devmap_umem_setup.9f				\
+		dlerrorack.9f					\
+		dlokack.9f					\
+		dlphysaddrack.9f				\
+		dluderrorind.9f					\
+		firmware_close.9f				\
+		firmware_free.9f				\
+		firmware_get_size.9f				\
+		firmware_malloc.9f				\
+		firmware_open.9f				\
+		firmware_read.9f				\
+		free_pktiopb.9f					\
+		gld_intr.9f					\
+		gld_mac_alloc.9f				\
+		gld_mac_free.9f					\
+		gld_recv.9f					\
+		gld_register.9f					\
+		gld_sched.9f					\
+		gld_unregister.9f				\
+		id32_free.9f					\
+		id32_lookup.9f					\
+		id_alloc.9f					\
+		id_alloc_nosleep.9f				\
+		id_alloc_specific_nosleep.9f			\
+		id_allocff.9f					\
+		id_allocff_nosleep.9f				\
+		id_free.9f					\
+		id_space_create.9f				\
+		id_space_destroy.9f				\
+		id_space_extend.9f				\
+		inl.9f						\
+		intro.9f					\
+		inw.9f						\
+		kmem_cache_alloc.9f				\
+		kmem_cache_destroy.9f				\
+		kmem_cache_free.9f				\
+		kmem_cache_set_move.9f				\
+		kmem_free.9f					\
+		kmem_zalloc.9f					\
+		kstat_named_setstr.9f				\
+		kstat_runq_back_to_waitq.9f			\
+		kstat_runq_enter.9f				\
+		kstat_runq_exit.9f				\
+		kstat_waitq_enter.9f				\
+		kstat_waitq_exit.9f				\
+		kstat_waitq_to_runq.9f				\
+		ldi_awrite.9f					\
+		ldi_close.9f					\
+		ldi_get_devid.9f				\
+		ldi_get_minor_name.9f				\
+		ldi_get_otyp.9f					\
+		ldi_getmsg.9f					\
+		ldi_ident_from_dip.9f				\
+		ldi_ident_from_stream.9f			\
+		ldi_ident_release.9f				\
+		ldi_open_by_devid.9f				\
+		ldi_open_by_name.9f				\
+		ldi_prop_get_int64.9f				\
+		ldi_prop_lookup_byte_array.9f			\
+		ldi_prop_lookup_int64_array.9f			\
+		ldi_prop_lookup_string.9f			\
+		ldi_prop_lookup_string_array.9f			\
+		ldi_write.9f					\
+		list_destroy.9f					\
+		list_head.9f					\
+		list_insert_after.9f				\
+		list_insert_before.9f				\
+		list_insert_head.9f				\
+		list_insert_tail.9f				\
+		list_is_empty.9f				\
+		list_link_active.9f				\
+		list_link_init.9f				\
+		list_link_replace.9f				\
+		list_move_tail.9f				\
+		list_next.9f					\
+		list_prev.9f					\
+		list_remove.9f					\
+		list_remove_head.9f				\
+		list_remove_tail.9f				\
+		list_tail.9f					\
+		mac_fini_ops.9f					\
+		mac_free.9f					\
+		mac_hcksum_set.9f				\
 		mac_prop_info_set_default_link_flowctrl.9f	\
-		mac_prop_info_set_default_str.9f	\
-		mac_prop_info_set_default_uint32.9f	\
-		mac_prop_info_set_default_uint64.9f	\
-		mac_prop_info_set_default_uint8.9f	\
-		mac_prop_info_set_perm.9f		\
-		mac_prop_info_set_range_uint32.9f	\
-		mac_unregister.9f			\
-		makecom_g0.9f				\
-		makecom_g0_s.9f				\
-		makecom_g1.9f				\
-		makecom_g5.9f				\
-		membar_consumer.9f			\
-		membar_enter.9f				\
-		membar_exit.9f				\
-		membar_producer.9f			\
-		memcmp.9f				\
-		memcpy.9f				\
-		memmove.9f				\
-		memset.9f				\
-		minphys.9f				\
-		mod_info.9f				\
-		mod_modname.9f				\
-		mod_remove.9f				\
-		mutex_destroy.9f			\
-		mutex_enter.9f				\
-		mutex_exit.9f				\
-		mutex_init.9f				\
-		mutex_owned.9f				\
-		mutex_tryenter.9f			\
-		net_event_notify_unregister.9f		\
-		net_instance_notify_unregister.9f	\
-		net_instance_protocol_unregister.9f	\
-		numtos.9f				\
-		nv_alloc_fini.9f			\
-		nv_alloc_init.9f			\
-		nvlist_add_boolean_array.9f		\
-		nvlist_add_boolean_value.9f		\
-		nvlist_add_byte.9f			\
-		nvlist_add_byte_array.9f		\
-		nvlist_add_int16.9f			\
-		nvlist_add_int16_array.9f		\
-		nvlist_add_int32.9f			\
-		nvlist_add_int32_array.9f		\
-		nvlist_add_int64.9f			\
-		nvlist_add_int64_array.9f		\
-		nvlist_add_int8.9f			\
-		nvlist_add_int8_array.9f		\
-		nvlist_add_nvlist.9f			\
-		nvlist_add_nvlist_array.9f		\
-		nvlist_add_nvpair.9f			\
-		nvlist_add_string.9f			\
-		nvlist_add_string_array.9f		\
-		nvlist_add_uint16.9f			\
-		nvlist_add_uint16_array.9f		\
-		nvlist_add_uint32.9f			\
-		nvlist_add_uint32_array.9f		\
-		nvlist_add_uint64.9f			\
-		nvlist_add_uint64_array.9f		\
-		nvlist_add_uint8.9f			\
-		nvlist_add_uint8_array.9f		\
-		nvlist_dup.9f				\
-		nvlist_exists.9f			\
-		nvlist_free.9f				\
-		nvlist_lookup_boolean_array.9f		\
-		nvlist_lookup_boolean_value.9f		\
-		nvlist_lookup_byte.9f			\
-		nvlist_lookup_byte_array.9f		\
-		nvlist_lookup_int16.9f			\
-		nvlist_lookup_int16_array.9f		\
-		nvlist_lookup_int32.9f			\
-		nvlist_lookup_int32_array.9f		\
-		nvlist_lookup_int64.9f			\
-		nvlist_lookup_int64_array.9f		\
-		nvlist_lookup_int8.9f			\
-		nvlist_lookup_int8_array.9f		\
-		nvlist_lookup_nvlist.9f			\
-		nvlist_lookup_nvlist_array.9f		\
-		nvlist_lookup_pairs.9f			\
-		nvlist_lookup_string.9f			\
-		nvlist_lookup_string_array.9f		\
-		nvlist_lookup_uint16.9f			\
-		nvlist_lookup_uint16_array.9f		\
-		nvlist_lookup_uint32.9f			\
-		nvlist_lookup_uint32_array.9f		\
-		nvlist_lookup_uint64.9f			\
-		nvlist_lookup_uint64_array.9f		\
-		nvlist_lookup_uint8.9f			\
-		nvlist_lookup_uint8_array.9f		\
-		nvlist_merge.9f				\
-		nvlist_pack.9f				\
-		nvlist_remove_all.9f			\
-		nvlist_size.9f				\
-		nvlist_t.9f				\
-		nvlist_unpack.9f			\
-		nvlist_xalloc.9f			\
-		nvlist_xdup.9f				\
-		nvlist_xpack.9f				\
-		nvlist_xunpack.9f			\
-		nvpair_name.9f				\
-		nvpair_type.9f				\
-		nvpair_value_boolean_array.9f		\
-		nvpair_value_byte_array.9f		\
-		nvpair_value_int16.9f			\
-		nvpair_value_int16_array.9f		\
-		nvpair_value_int32.9f			\
-		nvpair_value_int32_array.9f		\
-		nvpair_value_int64.9f			\
-		nvpair_value_int64_array.9f		\
-		nvpair_value_int8.9f			\
-		nvpair_value_int8_array.9f		\
-		nvpair_value_nvlist.9f			\
-		nvpair_value_nvlist_array.9f		\
-		nvpair_value_string.9f			\
-		nvpair_value_string_array.9f		\
-		nvpair_value_uint16.9f			\
-		nvpair_value_uint16_array.9f		\
-		nvpair_value_uint32.9f			\
-		nvpair_value_uint32_array.9f		\
-		nvpair_value_uint64.9f			\
-		nvpair_value_uint64_array.9f		\
-		nvpair_value_uint8.9f			\
-		nvpair_value_uint8_array.9f		\
-		otherq.9f				\
-		outl.9f					\
-		outw.9f					\
-		pci_config_get16.9f			\
-		pci_config_get32.9f			\
-		pci_config_get64.9f			\
-		pci_config_getb.9f			\
-		pci_config_getl.9f			\
-		pci_config_getll.9f			\
-		pci_config_getw.9f			\
-		pci_config_put16.9f			\
-		pci_config_put32.9f			\
-		pci_config_put64.9f			\
-		pci_config_put8.9f			\
-		pci_config_putb.9f			\
-		pci_config_putl.9f			\
-		pci_config_putll.9f			\
-		pci_config_putw.9f			\
-		pci_config_teardown.9f			\
-		pci_ereport_post.9f			\
-		pci_ereport_teardown.9f			\
-		pci_restore_config_regs.9f		\
-		pm_idle_component.9f			\
-		pm_lower_power.9f			\
-		priv_policy_choice.9f			\
-		priv_policy_only.9f			\
-		proc_ref.9f				\
-		proc_unref.9f				\
-		qprocsoff.9f				\
-		qwait_sig.9f				\
-		rd.9f					\
-		repinsb.9f				\
-		repinsd.9f				\
-		repinsw.9f				\
-		repoutsb.9f				\
-		repoutsd.9f				\
-		repoutsw.9f				\
-		rmallocmap_wait.9f			\
-		rmfreemap.9f				\
-		rw_destroy.9f				\
-		rw_downgrade.9f				\
-		rw_enter.9f				\
-		rw_exit.9f				\
-		rw_init.9f				\
-		rw_read_locked.9f			\
-		rw_tryenter.9f				\
-		rw_tryupgrade.9f			\
-		samestr.9f				\
-		scsi_dmafree.9f				\
-		scsi_dname.9f				\
-		scsi_hba_detach.9f			\
-		scsi_hba_fini.9f			\
-		scsi_hba_pkt_free.9f			\
-		scsi_hba_tran_free.9f			\
-		scsi_ifsetcap.9f			\
-		scsi_mname.9f				\
-		scsi_pktfree.9f				\
-		scsi_resalloc.9f			\
-		scsi_resfree.9f				\
-		scsi_rname.9f				\
-		scsi_sense_asc.9f			\
-		scsi_sense_ascq.9f			\
-		scsi_sense_cmdspecific_uint64.9f	\
-		scsi_sense_info_uint64.9f		\
-		scsi_sname.9f				\
-		scsi_unslave.9f				\
-		sema_destroy.9f				\
-		sema_init.9f				\
-		sema_p.9f				\
-		sema_p_sig.9f				\
-		sema_tryp.9f				\
-		sema_v.9f				\
-		snprintf.9f				\
-		strcasecmp.9f				\
-		strcat.9f				\
-		strchr.9f				\
-		strcmp.9f				\
-		strcpy.9f				\
-		strdup.9f				\
-		strfree.9f				\
-		strlcat.9f				\
-		strlcpy.9f				\
-		strlen.9f				\
-		strncasecmp.9f				\
-		strncat.9f				\
-		strncmp.9f				\
-		strncpy.9f				\
-		strnlen.9f				\
-		strrchr.9f				\
-		strspn.9f				\
-		taskq_suspended.9f			\
-		uconv_u16tou8.9f			\
-		uconv_u32tou16.9f			\
-		uconv_u32tou8.9f			\
-		uconv_u8tou16.9f			\
-		uconv_u8tou32.9f			\
-		unfreezestr.9f				\
-		usb_alloc_bulk_req.9f			\
-		usb_alloc_ctrl_req.9f			\
-		usb_alloc_intr_req.9f			\
-		usb_alloc_isoc_req.9f			\
-		usb_client_detach.9f			\
-		usb_free_bulk_req.9f			\
-		usb_free_ctrl_req.9f			\
-		usb_free_descr_tree.9f			\
-		usb_free_dev_data.9f			\
-		usb_free_intr_req.9f			\
-		usb_free_isoc_req.9f			\
-		usb_get_if_number.9f			\
-		usb_owns_device.9f			\
-		usb_pipe_ctrl_xfer_wait.9f		\
-		usb_pipe_get_private.9f			\
-		usb_pipe_stop_intr_polling.9f		\
-		usb_pipe_stop_isoc_polling.9f		\
-		usb_print_descr_tree.9f			\
-		usb_set_alt_if.9f			\
-		usb_set_cfg.9f				\
-		usb_unregister_hotplug_cbs.9f		\
-		va_copy.9f				\
-		va_end.9f				\
-		va_start.9f				\
-		vcmn_err.9f				\
-		vsnprintf.9f				\
-		vsprintf.9f				\
-		vzcmn_err.9f				\
-		wr.9f					\
+		mac_prop_info_set_default_str.9f		\
+		mac_prop_info_set_default_uint32.9f		\
+		mac_prop_info_set_default_uint64.9f		\
+		mac_prop_info_set_default_uint8.9f		\
+		mac_prop_info_set_perm.9f			\
+		mac_prop_info_set_range_uint32.9f		\
+		mac_unregister.9f				\
+		makecom_g0.9f					\
+		makecom_g0_s.9f					\
+		makecom_g1.9f					\
+		makecom_g5.9f					\
+		membar_consumer.9f				\
+		membar_enter.9f					\
+		membar_exit.9f					\
+		membar_producer.9f				\
+		memcmp.9f					\
+		memcpy.9f					\
+		memmove.9f					\
+		memset.9f					\
+		minphys.9f					\
+		mod_info.9f					\
+		mod_modname.9f					\
+		mod_remove.9f					\
+		mutex_destroy.9f				\
+		mutex_enter.9f					\
+		mutex_exit.9f					\
+		mutex_init.9f					\
+		mutex_owned.9f					\
+		mutex_tryenter.9f				\
+		net_event_notify_unregister.9f			\
+		net_instance_notify_unregister.9f		\
+		net_instance_protocol_unregister.9f		\
+		numtos.9f					\
+		nv_alloc_fini.9f				\
+		nv_alloc_init.9f				\
+		nvlist_add_boolean_array.9f			\
+		nvlist_add_boolean_value.9f			\
+		nvlist_add_byte.9f				\
+		nvlist_add_byte_array.9f			\
+		nvlist_add_int16.9f				\
+		nvlist_add_int16_array.9f			\
+		nvlist_add_int32.9f				\
+		nvlist_add_int32_array.9f			\
+		nvlist_add_int64.9f				\
+		nvlist_add_int64_array.9f			\
+		nvlist_add_int8.9f				\
+		nvlist_add_int8_array.9f			\
+		nvlist_add_nvlist.9f				\
+		nvlist_add_nvlist_array.9f			\
+		nvlist_add_nvpair.9f				\
+		nvlist_add_string.9f				\
+		nvlist_add_string_array.9f			\
+		nvlist_add_uint16.9f				\
+		nvlist_add_uint16_array.9f			\
+		nvlist_add_uint32.9f				\
+		nvlist_add_uint32_array.9f			\
+		nvlist_add_uint64.9f				\
+		nvlist_add_uint64_array.9f			\
+		nvlist_add_uint8.9f				\
+		nvlist_add_uint8_array.9f			\
+		nvlist_dup.9f					\
+		nvlist_exists.9f				\
+		nvlist_free.9f					\
+		nvlist_lookup_boolean_array.9f			\
+		nvlist_lookup_boolean_value.9f			\
+		nvlist_lookup_byte.9f				\
+		nvlist_lookup_byte_array.9f			\
+		nvlist_lookup_int16.9f				\
+		nvlist_lookup_int16_array.9f			\
+		nvlist_lookup_int32.9f				\
+		nvlist_lookup_int32_array.9f			\
+		nvlist_lookup_int64.9f				\
+		nvlist_lookup_int64_array.9f			\
+		nvlist_lookup_int8.9f				\
+		nvlist_lookup_int8_array.9f			\
+		nvlist_lookup_nvlist.9f				\
+		nvlist_lookup_nvlist_array.9f			\
+		nvlist_lookup_pairs.9f				\
+		nvlist_lookup_string.9f				\
+		nvlist_lookup_string_array.9f			\
+		nvlist_lookup_uint16.9f				\
+		nvlist_lookup_uint16_array.9f			\
+		nvlist_lookup_uint32.9f				\
+		nvlist_lookup_uint32_array.9f			\
+		nvlist_lookup_uint64.9f				\
+		nvlist_lookup_uint64_array.9f			\
+		nvlist_lookup_uint8.9f				\
+		nvlist_lookup_uint8_array.9f			\
+		nvlist_merge.9f					\
+		nvlist_pack.9f					\
+		nvlist_remove_all.9f				\
+		nvlist_size.9f					\
+		nvlist_t.9f					\
+		nvlist_unpack.9f				\
+		nvlist_xalloc.9f				\
+		nvlist_xdup.9f					\
+		nvlist_xpack.9f					\
+		nvlist_xunpack.9f				\
+		nvpair_name.9f					\
+		nvpair_type.9f					\
+		nvpair_value_boolean_array.9f			\
+		nvpair_value_byte_array.9f			\
+		nvpair_value_int16.9f				\
+		nvpair_value_int16_array.9f			\
+		nvpair_value_int32.9f				\
+		nvpair_value_int32_array.9f			\
+		nvpair_value_int64.9f				\
+		nvpair_value_int64_array.9f			\
+		nvpair_value_int8.9f				\
+		nvpair_value_int8_array.9f			\
+		nvpair_value_nvlist.9f				\
+		nvpair_value_nvlist_array.9f			\
+		nvpair_value_string.9f				\
+		nvpair_value_string_array.9f			\
+		nvpair_value_uint16.9f				\
+		nvpair_value_uint16_array.9f			\
+		nvpair_value_uint32.9f				\
+		nvpair_value_uint32_array.9f			\
+		nvpair_value_uint64.9f				\
+		nvpair_value_uint64_array.9f			\
+		nvpair_value_uint8.9f				\
+		nvpair_value_uint8_array.9f			\
+		otherq.9f					\
+		outl.9f						\
+		outw.9f						\
+		pci_config_get16.9f				\
+		pci_config_get32.9f				\
+		pci_config_get64.9f				\
+		pci_config_getb.9f				\
+		pci_config_getl.9f				\
+		pci_config_getll.9f				\
+		pci_config_getw.9f				\
+		pci_config_put16.9f				\
+		pci_config_put32.9f				\
+		pci_config_put64.9f				\
+		pci_config_put8.9f				\
+		pci_config_putb.9f				\
+		pci_config_putl.9f				\
+		pci_config_putll.9f				\
+		pci_config_putw.9f				\
+		pci_config_teardown.9f				\
+		pci_ereport_post.9f				\
+		pci_ereport_teardown.9f				\
+		pci_restore_config_regs.9f			\
+		pm_idle_component.9f				\
+		pm_lower_power.9f				\
+		priv_policy_choice.9f				\
+		priv_policy_only.9f				\
+		proc_ref.9f					\
+		proc_unref.9f					\
+		qprocsoff.9f					\
+		qwait_sig.9f					\
+		rd.9f						\
+		repinsb.9f					\
+		repinsd.9f					\
+		repinsw.9f					\
+		repoutsb.9f					\
+		repoutsd.9f					\
+		repoutsw.9f					\
+		rmallocmap_wait.9f				\
+		rmfreemap.9f					\
+		rw_destroy.9f					\
+		rw_downgrade.9f					\
+		rw_enter.9f					\
+		rw_exit.9f					\
+		rw_init.9f					\
+		rw_read_locked.9f				\
+		rw_tryenter.9f					\
+		rw_tryupgrade.9f				\
+		samestr.9f					\
+		scsi_dmafree.9f					\
+		scsi_dname.9f					\
+		scsi_hba_detach.9f				\
+		scsi_hba_fini.9f				\
+		scsi_hba_pkt_free.9f				\
+		scsi_hba_tran_free.9f				\
+		scsi_ifsetcap.9f				\
+		scsi_mname.9f					\
+		scsi_pktfree.9f					\
+		scsi_resalloc.9f				\
+		scsi_resfree.9f					\
+		scsi_rname.9f					\
+		scsi_sense_asc.9f				\
+		scsi_sense_ascq.9f				\
+		scsi_sense_cmdspecific_uint64.9f		\
+		scsi_sense_info_uint64.9f			\
+		scsi_sname.9f					\
+		scsi_unslave.9f					\
+		sema_destroy.9f					\
+		sema_init.9f					\
+		sema_p.9f					\
+		sema_p_sig.9f					\
+		sema_tryp.9f					\
+		sema_v.9f					\
+		snprintf.9f					\
+		strcasecmp.9f					\
+		strcat.9f					\
+		strchr.9f					\
+		strcmp.9f					\
+		strcpy.9f					\
+		strdup.9f					\
+		strfree.9f					\
+		strlcat.9f					\
+		strlcpy.9f					\
+		strlen.9f					\
+		strncasecmp.9f					\
+		strncat.9f					\
+		strncmp.9f					\
+		strncpy.9f					\
+		strnlen.9f					\
+		strrchr.9f					\
+		strspn.9f					\
+		taskq_suspended.9f				\
+		uconv_u16tou8.9f				\
+		uconv_u32tou16.9f				\
+		uconv_u32tou8.9f				\
+		uconv_u8tou16.9f				\
+		uconv_u8tou32.9f				\
+		unfreezestr.9f					\
+		usb_alloc_bulk_req.9f				\
+		usb_alloc_ctrl_req.9f				\
+		usb_alloc_intr_req.9f				\
+		usb_alloc_isoc_req.9f				\
+		usb_client_detach.9f				\
+		usb_free_bulk_req.9f				\
+		usb_free_ctrl_req.9f				\
+		usb_free_descr_tree.9f				\
+		usb_free_dev_data.9f				\
+		usb_free_intr_req.9f				\
+		usb_free_isoc_req.9f				\
+		usb_get_if_number.9f				\
+		usb_owns_device.9f				\
+		usb_pipe_ctrl_xfer_wait.9f			\
+		usb_pipe_get_private.9f				\
+		usb_pipe_stop_intr_polling.9f			\
+		usb_pipe_stop_isoc_polling.9f			\
+		usb_print_descr_tree.9f				\
+		usb_set_alt_if.9f				\
+		usb_set_cfg.9f					\
+		usb_unregister_hotplug_cbs.9f			\
+		va_copy.9f					\
+		va_end.9f					\
+		va_start.9f					\
+		vcmn_err.9f					\
+		vmem_destroy.9f					\
+		vmem_free.9f					\
+		vmem_size.9f					\
+		vmem_xalloc.9f					\
+		vmem_xcreate.9f					\
+		vmem_xfree.9f					\
+		vsnprintf.9f					\
+		vsprintf.9f					\
+		vzcmn_err.9f					\
+		wr.9f						\
 		zcmn_err.9f
 
 assert.9f				:= LINKSRC = ASSERT.9f
@@ -2093,6 +2104,15 @@
 va_end.9f				:= LINKSRC = va_arg.9f
 va_start.9f				:= LINKSRC = va_arg.9f
 
+vmem_xalloc.9f				:= LINKSRC = vmem_alloc.9f
+vmem_free.9f				:= LINKSRC = vmem_alloc.9f    
+vmem_xfree.9f				:= LINKSRC = vmem_alloc.9f
+
+vmem_xcreate.9f				:= LINKSRC = vmem_create.9f
+vmem_destroy.9f				:= LINKSRC = vmem_create.9f
+
+vmem_size.9f				:= LINKSRC = vmem_walk.9f
+
 .KEEP_STATE:
 
 include		$(SRC)/man/Makefile.man
--- /dev/null	2017-02-02 13:24:15.000000000 -0500
+++ new/usr/src/man/man9f/vmem_add.9f	2017-02-02 13:24:15.643742637 -0500
@@ -0,0 +1,73 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source.  A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2017, Richard Lowe.
+.\"
+.Dd Jan 18, 2017
+.Dt VMEM_ADD 9F
+.Os
+.Sh NAME
+.Nm vmem_add
+.Nd add spans to a vmem arena
+.Sh SYNOPSIS
+.In sys/vmem.h
+.Ft void *
+.Fo vmem_add
+.Fa "vmem_t *vmp"
+.Fa "void *vaddr"
+.Fa "size_t size"
+.Fa "int vmflag"
+.Fc
+.Sh INTERFACE LEVEL
+illumos DDI specific
+.Sh PARAMETERS
+.Bl -tag -width Ds
+.It Fa vmp
+The vmem arena to which the span should be added.
+.It Fa vaddr
+The base address of the span to add.
+.It Fa size
+The size of the span to add
+.It Fa vmflag
+Flags affecting the allocation of the span to add.
+.El
+.Sh DESCRIPTION
+The
+.Fn vmem_add
+function adds
+.Fa size
+bytes starting at
+.Fa vaddr
+to a vmem arena from which future calls to
+.Fn vmem_alloc
+may allocate.
+.Pp
+.Dv VM_SLEEP
+or
+.Dv VM_NOSLEEP
+must be specified, and indicate whether the addition may block.
+.Sh CONTEXT
+This function can be called from either user or kernel context.
+If the
+.Dv VM_NOSLEEP
+flag is specified, it may also be called from interrupt context.
+.Sh RETURN VALUES
+Upon success
+.Fn vmem_add
+returns
+.Fa vaddr .
+On failure,
+.Dv NULL
+is returned.
+.Sh SEE ALSO
+.Xr vmem 9 ,
+.Xr vmem_alloc 9F ,
+.Xr vmem_create 9F
--- /dev/null	2017-02-02 13:24:16.000000000 -0500
+++ new/usr/src/man/man9f/vmem_alloc.9f	2017-02-02 13:24:16.206033387 -0500
@@ -0,0 +1,168 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source.  A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2017, Richard Lowe.
+.\"
+.Dd Jan 18, 2017
+.Dt VMEM_ALLOC 9F
+.Os
+.Sh NAME
+.Nm vmem_alloc ,
+.Nm vmem_xalloc ,
+.Nm vmem_free ,
+.Nm vmem_xfree
+.Nd allocate and free segments from a vmem arena
+.Sh SYNOPSIS
+.In sys/vmem.h
+.Ft void *
+.Fo vmem_alloc
+.Fa "vmem_t *vmp"
+.Fa "size_t size"
+.Fa "int vmflag"
+.Fc
+.Ft void *
+.Fo vmem_xalloc
+.Fa "vmem_t *vmp"
+.Fa "size_t size"
+.Fa "size_t align_arg"
+.Fa "size_t phase"
+.Fa "size_t nocross"
+.Fa "void *minaddr"
+.Fa "void *maxaddr"
+.Fa "int vmflag"
+.Fc
+.Ft void
+.Fo vmem_free
+.Fa "vmem_t *vmp"
+.Fa "void *vaddr"
+.Fa "size_t size"
+.Fc
+.Ft void
+.Fo vmem_xfree
+.Fa "vmem_t *vmp"
+.Fa "void *vaddr"
+.Fa "size_t size"
+.Fc
+.Sh INTERFACE LEVEL
+illumos DDI specific
+.Sh PARAMETERS
+.Bl -tag -width Ds
+.It Fa vmp
+The vmem arena from which to allocate or free.
+.It Fa size
+The size of the segment to allocate or free.
+.It Fa vmflag
+A bitmask of flags controlling the behaviour of the allocation.
+There are two meaningful groups of flags.
+.Dv VM_SLEEP
+or
+.Dv VM_NOSLEEP
+must be specified, and indicate whether the allocation may block.  A
+.Dv VM_SLEEP
+allocation can never fail but may block indefinitely.
+.Pp
+The allocation policy may be specified by one of the following flags:
+.Bl -tag -width Ds
+.It Dv VM_BESTFIT
+Take the segment from the smallest free segment that could satisfy this allocation
+.It Dv VM_FIRSTFIT
+Take the segment from the first free segment found that could satisfy this
+allocation.
+.It Dv VM_NEXTFIT
+Take the segment from the segment after the one previously allocated.  This
+provides sequential behaviour useful when allocating identifiers from a
+.Dv VMC_IDENTIFIER
+arena.
+.It Dv VM_ENDALLOC
+May be specified in combination with
+.Dv VM_BESTFIT ,
+.Dv VM_FIRSTFIT
+or the default policy to indicate that the higher addresses should be
+preferred.
+.El
+.Pp
+The default (un\-named) allocation policy is
+.Dq instant fit
+an approximation of
+.Dv VM_BESTFIT
+in guaranteed constant time.
+.It Fa align_arg
+The minimum alignment of the allocation.  If
+.Ql 0
+the allocated segment will be aligned as the arena's quantum.
+.It Fa phase
+The allocated segment must be
+.Fa phase
+bytes from the alignment boundary.
+.It Fa nocross
+The allocated segment may not straddle a
+.Fa nocross
+alignment boundary.
+.It Fa minaddr
+The minimum address at which the segment may be allocated.
+.It Fa maxaddr
+The maximum address which may be included in the segment.
+.It Fa vaddr
+The address of the segment which
+.Fn vmem_free
+or
+.Fn vmem_xfree
+should free.
+.El
+.Sh DESCRIPTION
+The
+.Fn vmem_alloc
+and
+.Fn vmem_xalloc
+functions allocate a segment of
+.Fa size
+length from the vmem arena
+.Fa vmp .
+.Pp
+The
+.Fa vmflag
+argument controls the behaviour of the allocation.  As described in
+.Sx PARAMETERS
+.Pp
+For allocations with complex requirements, such as those used for DMA
+.Fn vmem_xalloc
+takes additional arguments allowing those requirements to be expressed.
+.Pp
+Segments allocated with
+.Fn vmem_xalloc
+must always be freed with
+.Fn vmem_xfree ,
+since these allocations are uncached.
+.Sh CONTEXT
+This function can be called from either user or kernel context.
+If the
+.Dv VM_NOSLEEP
+flag is specified, it may also be called from interrupt context.
+.Sh RETURN VALUES
+Upon successful completion the
+.Fn vmem_alloc
+and
+.Fn vmem_xalloc
+functions return a pointer to the beginning of the allocated segment.  In the
+case of a
+.Dv VMC_IDENTIFIER
+arena, the address of this pointer is the meaningful component, not the value
+to which it points.
+.Pp
+On failure,
+.Dv NULL
+is returned.
+When the
+.Dv VM_SLEEP
+flag is specified, these functions can never fail (but may block forever).
+.Sh SEE ALSO
+.Xr vmem 9 ,
+.Xr vmem_create 9F
--- /dev/null	2017-02-02 13:24:16.000000000 -0500
+++ new/usr/src/man/man9f/vmem_contains.9f	2017-02-02 13:24:16.779694223 -0500
@@ -0,0 +1,57 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source.  A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2017, Richard Lowe.
+.\"
+.Dd Jan 18, 2017
+.Dt VMEM_CONTAINS 9F
+.Os
+.Sh NAME
+.Nm vmem_contains ,
+.Nd check for membership in a vmem arena
+.Sh SYNOPSIS
+.In sys/vmem.h
+.Ft int
+.Fo vmem_contains
+.Fa "vmem_t *vmp"
+.Fa "void *vaddr"
+.Fa "size_t *size"
+.Fc
+.Sh INTERFACE LEVEL
+illumos DDI specific
+.Sh PARAMETERS
+.Bl -tag -width Ds
+.It Fa vmp
+The vmem arena
+.It Fa vaddr
+address of the segment to query.
+.It Fa size
+size of the segment to query
+.El
+.Sh DESCRIPTION
+The
+.Fn vmem_contains
+function checks whether a segment of
+.Fa size
+bytes at
+.Fa vaddr
+exists within the vmem arena
+.Fa vmp .
+.Sh CONTEXT
+This function may be called from user or kernel context.
+.Sh RETURN VALUES
+.Fn vmem_contains
+returns non\-0 if the segment exists, and 0 otherwise.
+.Sh SEE ALSO
+.Xr vmem 9 ,
+.Xr vmem_add 9F ,
+.Xr vmem_alloc 9F ,
+.Xr vmem_create 9F
--- /dev/null	2017-02-02 13:24:17.000000000 -0500
+++ new/usr/src/man/man9f/vmem_create.9f	2017-02-02 13:24:17.339576083 -0500
@@ -0,0 +1,142 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source.  A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2017, Richard Lowe.
+.\"
+.Dd Jan 18, 2017
+.Dt VMEM_CREATE 9F
+.Os
+.Sh NAME
+.Nm vmem_create ,
+.Nm vmem_xcreate ,
+.Nm vmem_destroy
+.Nd create and destroy vmem arenas
+.Sh SYNOPSIS
+.In sys/vmem.h
+.Vt "typedef struct vmem vmem_t;"
+.Vt "typedef void *(vmem_alloc_t)(vmem_t *, size_t, int);"
+.Vt "typedef void (vmem_free_t)(vmem_t *, void *, size_t);"
+.Vt "typedef void *(vmem_ximport_t)(vmem_t *, size_t *, size_t, int);"
+.Ft vmem_t *
+.Fo vmem_create
+.Fa "const char *name"
+.Fa "void *base"
+.Fa "size_t size"
+.Fa "size_t quantum"
+.Fa "vmem_alloc_t *afunc"
+.Fa "vmem_free_t *ffunc"
+.Fa "vmem_t *source"
+.Fa "size_t qcache_max"
+.Fa "int vmflag"
+.Fc
+.Ft vmem_t *
+.Fo vmem_xcreate
+.Fa "const char *name"
+.Fa "void *base"
+.Fa "size_t size"
+.Fa "size_t quantum"
+.Fa "vmem_ximport_t *afunc"
+.Fa "vmem_free_t *ffunc"
+.Fa "vmem_t *source"
+.Fa "size_t qcache_max"
+.Fa "int vmflag"
+.Fc
+.Ft void
+.Fo vmem_destroy
+.Fa "vmem_t *vmp"
+.Fc
+.Sh INTERFACE LEVEL
+illumos DDI specific
+.Sh PARAMETERS
+.Bl -tag -width Ds
+.It Fa name
+A character string giving a name to the vmem
+arena to be created.
+.It Fa base
+An address indicating the lowest possible value in the arena.
+.It Fa size
+The size of the arena to create
+.It Fa quantum
+The arena's
+.Dq quantum .
+The granularity of the arena.  The amount allocated at minimum by each request.
+.It Fa afunc
+A function which is called to import new spans from
+.Fa source .
+Which may be
+.Dv NULL
+if this arena does not import from another.
+.It Fa ffunc
+A function which is called to return spans to
+.Fa source .
+Which may be
+.Dv NULL
+if this arena does not import from another.
+.It Fa source
+An arena from which this arena will import.
+Which may be
+.Dv NULL
+if this arena does not import from another.
+.It Fa qcache_max
+Each arena offers caching of integer multiples of
+.Fa quantum
+up to
+.Fa qcache_max .
+.It Fa vmflag
+A bitmask of flags indicating the characteristics of this arena.
+.Bl -tag -width Ds
+.It Dv VMC_IDENTIFIER
+The arena represents arbitrary integer identifiers, rather than virtual
+memory.
+.El
+.It Fa vmp
+A pointer to the vmem arena to be destroyed.
+.El
+.Sh DESCRIPTION
+A
+.Em vmem arena
+is a section of an arbitrary address space (a range of integer addresses).
+This commonly represents virtual memory, but can in fact be an arbitrary set
+of integers. The
+.Dv VMC_IDENTIFIER
+flag set at arena creation time differentiates between these two cases.
+.Pp
+The
+.Fa afunc ,
+.Fa ffunc , and
+.Fa source
+arguments combine to support a hierarchical structure of arenas, each
+importing from a single parent (the
+.Fa source ) .
+The
+.Fn vmem_create
+and
+.Fn vmem_xcreate
+functions differ in that the latter provides an interface for
+.Fa afunc
+to alter the size of the span imported from
+.Fa source .
+It is only legal to
+.Em increase
+thise size.
+.Sh CONTEXT
+These functions can be called from user or kernel context.
+.Sh RETURN VALUES
+Upon successful completion the
+.Fn vmem_create and
+.Fn vmem_xcreate
+functions return a pointer to a vmem arena.  Otherwise,
+.Dv NULL
+is returned to indicate the arena could not be created.
+.Sh SEE ALSO
+.Xr vmem 9 ,
+.Xr vmem_add 9F ,
+.Xr vmem_alloc 9F
--- /dev/null	2017-02-02 13:24:18.000000000 -0500
+++ new/usr/src/man/man9f/vmem_walk.9f	2017-02-02 13:24:17.985254977 -0500
@@ -0,0 +1,88 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source.  A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2017, Richard Lowe.
+.\"
+.Dd Jan 18, 2017
+.Dt VMEM_WALK 9F
+.Os
+.Sh NAME
+.Nm vmem_walk ,
+.Nm vmem_size
+.Nd walk a (sub\-)set of the segments in a vmem arena
+.Sh SYNOPSIS
+.In sys/vmem.h
+.Ft void
+.Fo vmem_walk
+.Fa "vmem_t *vmp"
+.Fa "int typemask"
+.Fa "void (*func)(void *, void *, size_t)"
+.Fa "void *arg"
+.Fc
+.Ft size_t
+.Fo vmem_size
+.Fa "vmem_t *vmp"
+.Fa "int typemask"
+.Fc
+.Sh INTERFACE LEVEL
+illumos DDI specific
+.Sh PARAMETERS
+.Bl -tag -width Ds
+.It Fa vmp
+The vmem arena to walk
+.It Fa typemask
+A bitmask indicating the types of segment to operate on
+.Bl -tag -width Ds
+.It Dv VMEM_ALLOC
+Allocated segments
+.It Dv VMEM_FREE
+Free segments
+.El
+.It Fa func
+The function to apply to each segment matching
+.Fa typemask .
+.Fa func
+should be of 3 values and return void:
+.Bl -tag -width Ds
+.It Fa "void *arg"
+The
+.Fa arg
+passed to
+.Fn vmem_walk
+.It Fa "void *vaddr"
+The base address of the segment
+.It Fa "size_t size"
+The size of the segment
+.El
+.It Fa arg
+An arbitrary argument passed to each call to
+.Fn func
+.El
+.Sh DESCRIPTION
+.Fn vmem_walk
+walks each segment in the arena
+.Fa vmp
+and applies
+.Fa func
+to each which matches
+.Fa typemask .
+.Pp
+.Fn vmem_size
+walks each segment in the arena
+.Fa vmp
+and totals the size of each matching
+.Fa typemask .
+.Sh CONTEXT
+This function may be called from user or kernel context.
+.Sh SEE ALSO
+.Xr vmem 9 ,
+.Xr vmem_alloc 9F ,
+.Xr vmem_create 9F
--- old/usr/src/pkg/manifests/system-kernel.man9.inc	2017-02-02 13:24:19.125877543 -0500
+++ new/usr/src/pkg/manifests/system-kernel.man9.inc	2017-02-02 13:24:19.171998648 -0500
@@ -10,9 +10,9 @@
 #
 
 #
-# Copyright 2011, Richard Lowe
+# Copyright 2017, Richard Lowe
 # Copyright 2012 Nexenta Systems, Inc. All rights reserved.
 #
-
-link path=usr/share/man/man9/Intro.9 target=../man9e/Intro.9e
-link path=usr/share/man/man9/intro.9 target=../man9e/Intro.9e
+file path=usr/share/man/man9/Intro.9
+file path=usr/share/man/man9/vmem.9
+link path=usr/share/man/man9/intro.9 target=Intro.9
--- old/usr/src/pkg/manifests/system-kernel.man9f.inc	2017-02-02 13:24:20.095096098 -0500
+++ new/usr/src/pkg/manifests/system-kernel.man9f.inc	2017-02-02 13:24:20.130742541 -0500
@@ -10,7 +10,7 @@
 #
 
 #
-# Copyright 2011, Richard Lowe
+# Copyright 2017, Richard Lowe
 # Copyright 2014 Garrett D'Amore <garrett@damore.org>
 # Copyright 2016 Nexenta Systems, Inc.
 # Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
@@ -492,6 +492,11 @@
 file path=usr/share/man/man9f/ureadc.9f
 file path=usr/share/man/man9f/uwritec.9f
 file path=usr/share/man/man9f/va_arg.9f
+file path=usr/share/man/man9f/vmem_add.9f
+file path=usr/share/man/man9f/vmem_alloc.9f
+file path=usr/share/man/man9f/vmem_contains.9f
+file path=usr/share/man/man9f/vmem_create.9f
+file path=usr/share/man/man9f/vmem_walk.9f
 link path=usr/share/man/man9f/AVL_NEXT.9f target=avl.9f
 link path=usr/share/man/man9f/AVL_PREV.9f target=avl.9f
 link path=usr/share/man/man9f/SIZEOF_PTR.9f target=STRUCT_DECL.9f
@@ -1303,6 +1308,12 @@
 link path=usr/share/man/man9f/va_end.9f target=va_arg.9f
 link path=usr/share/man/man9f/va_start.9f target=va_arg.9f
 link path=usr/share/man/man9f/vcmn_err.9f target=cmn_err.9f
+link path=usr/share/man/man9f/vmem_xalloc.9f target=vmem_alloc.9f
+link path=usr/share/man/man9f/vmem_free.9f target=vmem_alloc.9f
+link path=usr/share/man/man9f/vmem_xfree.9f target=vmem_alloc.9f
+link path=usr/share/man/man9f/vmem_xcreate.9f target=vmem_create.9f
+link path=usr/share/man/man9f/vmem_destroy.9f target=vmem_create.9f
+link path=usr/share/man/man9f/vmem_size.9f target=vmem_walk.9f
 link path=usr/share/man/man9f/vsnprintf.9f target=sprintf.9f
 link path=usr/share/man/man9f/vsprintf.9f target=sprintf.9f
 link path=usr/share/man/man9f/vzcmn_err.9f target=cmn_err.9f
--- old/usr/src/uts/common/os/vmem.c	2017-02-02 13:24:21.288444967 -0500
+++ new/usr/src/uts/common/os/vmem.c	2017-02-02 13:24:21.335167522 -0500
@@ -41,6 +41,9 @@
  *	Proceedings of the 2001 Usenix Conference.
  *	Available as http://www.usenix.org/event/usenix01/bonwick.html
  *
+ * Section 1, below, is also the primary contents of vmem(9).  If for some
+ * reason you are updating this comment, you will also wish to update the
+ * manual.
  *
  * 1. General Concepts
  * -------------------
