* Various bits of VM code now only need vm_token and no longer need
a critical section.

* Add pmap_page_assertzero() assertions in a couple of places when
PMAP_DEBUG is enabled.

* Add PMAP_DEBUG as a global kernel config option.

* Be a bit more conservative and clear PG_ZERO for all page table
pages and not just terminal page table pages. When such pages
are finally freed they will be zero again due to the way the
pmap code works but don't make that assumption.

* Move each of the targets (except error and zero) into a subdirectory
in targets/.

* Change the macro DM_TARGET_MODULE to also let the module depend on dm.

* Add a new macro DM_TARGET_BUILTIN, which must be used instead of
DM_TARGET_MODULE for targets that are compiled into the main dm.ko
instead of a separate module. Not doing this will prevent dm.ko from
unloading.

* NOTE: automatic loading doesn't always work. /boot must be mounted
already, so if you are planning on encrypting your swap or similar
stuff, you need to *EXPLICITLY* load dm_target_crypt.ko via the
loader.

* NOTE: PLEASE NOTE THE NOTE ABOVE!

* Fix a little issue with dm_target_crypt that would print "unloaded"
even if it wouldn't unload.

* Change the name of dm_target_stripe to dm_target_striped, since the
target is actually called "striped".

* Hold the vm_token when messing around with page valid and dirty bits
in buffer cache operations. Such race conditions are possible but would
be very rare.

* Fix inconsistent use of bio2.bio_offset when swapcache intercepts an
I/O operation. When this case occurs the normal filesystem VOP_STRATEGY
function will not be called and any assumption that bio2.bio_offset
will represent a block device offset will be invalid.

To deal with this case swapcache will re-set bio_offset to NOOFFSET.
Filesystems use this value to determine that no block device offset
has been cached for a logical file block.

* The nfs node hash code was not MPSAFE due to its use of a global
hash table. This could lead to a stall condition due to the
global hash table losing track of its manual lock. For now use a
token to interlock hash table access and replace the manual lock
with a lockmgr lock.

* This appears to have also fixed the long-standing random seg-fault
issue with x86-64, where a buildworld loop would seg-fault every once
in a while for no apparent reason. /usr/src on my test box has always
been NFS mounted but was never considered a possible contributor to
the problem.

If NFS loses track of related nfs nodes or races operations on underlying
vnodes while expecting their storage to remain stable it is possible
for a random vnode to become corrupt. How this could translate to a
completely random seg-fault is not entirely understood but I surmise
the unrelated cc1's binary mmap could become corrupt.

Avoid dumping core when a user runs dedup or dedup-simulate on a
meta-data only PFS (PFS which does not contain bulk data, just
softlinks, directory entries, etc). Instead print out a 0.00 dedup
ratio.

* Switch the kmallocs in the I/O path to using mpipe with a bare minimum
of two preallocated elements, for each read and write. This finally
allows for an encrypted swap without any issues with memory pressure.
It might also improve performance, but it is not the aim of the
commit.

* Basically the SCTL.DET and CMD.SUD bits control the behavior of the
SATA Phy, but in typical Intel fashion the specification is seriously
lacking on how events such as hot-plug are handled based on what state
the phy is in.

Previously we were looking for phy transition events while holding
the port in the RESET state (DET=1, SUD=1), which worked up till this
point. But it doesn't work with AMD's SB850-based AHCI.

Now we are attempting to do the same thing with the port in
the SPIN-UP/NORMAL state (DET=0, SUD=1).

* The AHCI documentation wants us to use the LISTEN mode (DET=0, SUD=0)
and get a SERR.DIAG.X event for hot-plug but this doesn't seem to work
very reliably. In fact, 10.10.4 is ambiguous for the case
where Staggered-spin-up is not supported since SUD is wired to '1'
in that case (making LISTEN mode impossible).