If hammer cleanup gets called more frequently than the cleanup runs
take, they build up, all trying to run in parallel. Prevent this by
locking the config file while cleanup is running. If cleanup finds the
config file locked for a PFS, it will skip processing.

The vchan code before only performed an average volume mix for both
channels, thus not allowing to pan between left and right vchan channel.
Now we perform actual stereo volume mixing for left and right channel.

bioq - Add a sysctl kern.bioq_barrier to control bioqdisksort()'s sorting.

Control how well sorted we want bioqdisksort() to be. The value specified
in kern.bioq_barrier is the number of bio's that will be sorted until a
barrier is inserted, starting a new set. The default value is 16.

* We have to protect the vnode when disconnecting the rdev and
disassociating it from the devfs_node.

* This also has the side effect of properly cycling the vnode refs
so the namecache gets cleaned up when a node is removed. Otherwise
the namecache entry will be left intact, resolved to the now dead
vnode.

* Moved TAILQ_INSERT* into get_rule to avoid a problem which
caused groups to also be inserted and kept in the rule
list

* Fix several bugs related to config file parsing, including:
- a bug in the argument checker, which caused a SEGFAULT
- a bug that would cause lines beginning with whitespaces
to duplicate their first real token
- an incorrect check for an empty line, which caused a
warning about an incorrect verb instead of ignoring
the line

DragonFly 2.2 has some confused headers that define INTMAX_C et al
but don't define intmax_t. This confuses mpfr and prevents building
mpfr and thus master on 2.2-release. Work around this problem by always
including stdint.h. This can go away as soon as we don't need 2.2
crossbuilding compatibility anymore.

The bootloader has very specific build requirements, such as absolutely
no floating point ops.

- Define the build options in ${MACHINE_PLATFORM}/Makefile.inc.
- Make amd64/pc64 include the pc32 settings, since they share the boot
loader
- Build the pc32 boot loader with CPUTYPE=i386 to avoid all FPU ops
- Include these settings also from ficl

* The synchronous DISK_DISK_REPROBE and DISK_SLICE_REPROBE messages
return while make_dev devices are still queued to devfs. Add
a call to devfs_config() to wait for the creation of those devices
to finish before returning.

This fixes numerous problems with shell scripts which fdisk + disklabel +
newfs in a batch.

* Remove devfs_msg->id, also fixing an issue where the id was retrieves
after the message is freed. Async entry points now return void instead
of the id.

* Adjust devfs_msg_send() to execute the message directly if the calling
thread is the devfs message thread. This is not strictly needed right
now but may be used in the future.

* Add fhtovp and vptofh vfs ops in devfs_vfsops.c, which also fix
an issue with coredumps. The issue was that, whenever a core
dump should be generated of an image with a /dev/* node open,
vptofh would return EOPNOTSUPP and hence the generated core
would be 0 bytes.

* Add helper function for fhtovp, devfs_inode_to_vnode and
family to devfs_core.c

Change the ->name element for both alias and clone handler structs
to use dynamic memory, allocated just after allocation of the
structs.
Also fix a problem in devfs_make_alias_worker() which would have
caused a warning and non-creation of alias in case one requested
creation of da0 after da0s1a because of a missing length check.

* The vfs.root.mountfrom /boot/loader.conf variable may now specify
devfs aliases, allowing it to specify root mounts by serial number.
Here is an example:

vfs.root.mountfrom="hammer:serno/L41JYE0G.s1d"

Note that vfs.root.mountfrom may NOT currently specify /etc/devtab labels.

* /etc/fstab may now specify devfs relative paths (such as serial numbers)
as well as /etc/devtab labels. A ".suffix" may be used to extend the
translation so /etc/devtab only needs to specify the base label.

to avoid trouble with both vrevoke() and the drm code which calls
vm_mmap, which in turn expects a vnode as handle, but drm only has
a cdev. If associate_rdev is used, the cdev will have a list of
vnodes currently in use associated with it.

- This fixes a problem with drm which caused a panic when used.

- count_dev, which is used by vcount, now returns the vnodes'
opencount instead of the number of references.

Check if any action was performed, and if not, show a usage message
to point the user in the right direction of how to use this.
Also remove one indentation tab to make messages easier to read.
Also fix some usage printf issues (missing spaces)

Cleanup of dead functions and structures and cleanup of C++-style
comments.
Fixes include:
- function devfs_node_is_accessible, which checks if the node is valid
and if it isn't a hidden node.
- calls to devfs_node_is_accessible from most vnops to ensure validity
of the devfs_node they operate on.
- Change of devfs_rule struct to use dynamically allocated memory
instead of using pre-sized buffers. This way we avoid wasting a lot
of memory for each devfs_rule.

The boot loader is supposed to load module dependencies but it misses
a few when e.g. 'snd_hda' is specified in loader.conf. This resulted
in the kernel itself trying to load the missing dependencies, but the
kernel was running the sysinits for those dependencies immediately during
the preload stage instead of registering them.

Pass a flag to the loader chain to register the sysinits instead of
running them if a dependency is loaded during the preload stage. This
fixes the problem. And also, by the way, the loader does not need to
load dependencies any more (though it still does).