Stuff that needs doing.

  • Make a profiler that doesn't require recompliation of the binary. pmdb is probably a good candidate to extend to do this since it already has all the fluff for shared libraries, ptracing, etc. It could be very simple. Just wake up X times a second and pull the pc of the profiled process with ptrace.
  • Map the kernel with large pages on i386.
  • Finish implementing cpu_switchto on all architectures.
  • Switch to a mutex for sched_lock.
  • Make spl behave like a lock, get rid of biglock for interrupts.
  • Make biglock non-recursive by putting the recursion on the stack.
  • Find code that's large and bloated, make it smaller to see if improved cache footprint improves performance.
  • Get rid of more large macros and inlines.
  • Finish the sparc64 pmap rewrite.
  • Add flags to interrupt handlers to mark MP-safe interrupts.
  • Add flags to syscalls to mark MP-safe syscalls.
  • Implement a lock-free TAILQ.
  • Add rw_cas to more architectures.
  • Add kqueue support for more filesystems.
  • Add kqueue support for all stuff that supports select.
  • uvm_loan in pipes?
  • Switch all pmaps to VM_PAGE_MD.
  • pmap_steal_memory for all PMAP_DIRECT architectures.
  • pmap_changeprot on sparc takes too many arguments. It's always wired and it's always pmap_kernel(). Change to pmap_kchangeprot.
  • Add timeout_add_{tv,ts,bt,sec,usec,nsec}
  • Could it be possible to do something in the hole on sparc? Some direct map or stuff?
  • Since 68k* have split kernel and user spaces and don't have that much memory, wouldn't it make sense to do PMAP_DIRECT for them?
  • Use timeouts properly in usb, not this horrible usb_callout mess.
  • Add kqueue support for more filesystems.
  • Add kqueue support for everything that supports select.
  • sysctls with names.
  • remove busy-waits from mii code.
  • real vfork?
  • ktruss
  • fix extent code to suck less, especially for swap allocations.
  • TIOCCONS - the namei in there is dangerous. if VOP_IOCTL ever changes to locked vnodes, we'll deadlock.
  • make sure the error from uvm_fault is passed to pcb_onfault handlers.
  • more inheritance in vnode op tables.
  • large pages for kernel text and data on i386.
  • __GENERIC_SOFT_INTERRUPTS
  • more splasserts
  • mpsafe pfind
  • make sys_getgroups mpsafe (probably just a read lock)
  • is sys_sigreturn NOLOCK everywhere?
  • is sys_sigsuspend NOLCOK or does it need work?
  • locking for rusage
  • sys_adjtime is not safe, we need to normalize before setting the global value.
  • MPSAFE setrlimit (with biglock around the one piece with uvm)
  • make pipes mpsafe and then move biglock in read/write
  • locks around the children list in threads for mpsafe thrwakeup