add pci_register_class_driver, to match by class id
ahcireg: avoid triggering problem with c++11/fms-extensions
seemingly working ahci driver

baroque qemu arguments to emulate an AHCI controller with a disk:

  -device ahci,id=ahci0 \
  -drive if=none,file=o.qemu/fs.img,format=raw,id=drive-sata0-0-0 \
  -device ide-drive,bus=ahci0.0,drive=drive-sata0-0-0,id=sata0-0-0

TODO: iovec support

TODO: hook up file system to this driver
(requires tracking a disk* in the file system)
ahci: iovec support
ahci: hook up to the file system

at least the read side seems to work
ahci: minor cleanup of sleep/spin wait code
fix "make qemu"

Attach o.qemu/fs.img using an AHCI controller in QEMUOPTS.
oops
mkfs: Reduce disk image size from 128M to 16M

I think the 128M was an accident when I changed everything from 512
byte sectors to 4K blocks.
sched: Remove unused SINGLE hack
perf: Friendlier command-line documentation
README: Some quick performance monitoring how-tos
mailbench: Fix bad default -a option value
Make threads work in HW=linux mode
libutil: copy_fd_n
libutil: Print error details on xread/xwrite failure
libutil: fd_len utility to get length of file by FD
sysfile: Honor O_CLOEXEC and O_ANYFD in pipe2
sysfile: Fix dup2(fd, fd) where fd is O_CLOEXEC

Remarkably, while dup2 usually clears O_CLOEXEC on the destination
file descriptor (even if the source is O_CLOEXEC), POSIX 2013 is very
clear that it should *not* do this if the two file descriptors are
equal.
mail-enqueue: Support batch enqueuing