Compilation problems:
- A perfctr-patched kernel can't be compiled on an unsupported
  arch (e.g. x86_64) since <linux/perfctr.h> always tries to
  include <asm/perfctr.h>, which only exists for i386.

API:
- Add ABI versions to the syscalls.
- long long has unspecified alignment in i386 but specified
  8-byte alignment in x86_64. To ease x86_64 support for i386
  binaries, ensure that all long long fields are 8-byte aligned.

Driver:
- move 2.2 and 2.4 stuff from compat.h into separate files
- isuspend_cpu as a pointer isn't x86 -> x86_64 clean
- drop #ifdef SMP around virtual's sample operation
- When an overflown perfctr is reset, we should take into account
  how many events past 0 or 1 it is at.
- Make set_cpus_allowed() more robust, especially wrt sched_setaffinity().

Library:
- Support 'make install'.
- Change usr.lib/Makefile to build .so from -fPIC objects; needed for x86_64.
- Add vperfctr_mmap() to libperfctr.c: the goal is to perform all
  accesses via the library, even for examples/perfex/.
- Implement gethrvtime(). Don't ever STOP the counters. To stop PMC
  updates, call CONTROL with tsc_on == 1 and nractrs == nrictrs == 0.
  The driver will continue sampling the TSC. Then gethrvtime() reduces
  to scaling the virtualised TSC with cpu_khz.
- Describe derived events in event_set.c.

Documentation:
- Write it :-(

Possible Changes:
- The P6 and P4 sub-models don't matter for the driver. Should the driver
  just export the major model and the cpuid, and let user-space figure
  out sub-model details?
- Access control mechanism for global-mode perfctrs?
- Interrupt support for global-mode perfctrs?
- Multiplexing support? PAPI seems to do fine w/o it.
- A "kernel profiling" mode which uses global-mode perfctrs in
  interrupt mode to profile the kernel?
- Buffer interrupts and signal user-space when buffer is nearly full?
