Important points:
----------------
1. Works fine for pb926 + qemu.
2. Scan code logic for kryboard is not complete.
We just have generic keys and shift working.
3. Mouse scancodes are collected but not decoded.
4. Right now we are doing enable_irq(), just before we go for waiting
again for new irqs. This is not correct but we had latency issues.
This needs to be fixed immediately.
5. Also it seems like the notify_clot count should be an atomic
variable. Needs to be discussed.
- Userspace irq handling for timer.
- If no runnable task is left. scheduler busy loops in user context
of last runnable task until a new task becomes runnable.
Irqs can now touch runqueues and do async wakeups. This necessitated
that we implement all wake up wait and runqueue locking work with irqs.
All this, assumes that in an SMP setup we may have cross-cpu wake ups,
runqueue manipulation. If we later decide that we only wake up threads
in the current container, (and lock containers to cpus) we won't really
need spinlocks, or irq disabling anymore. The current set up might be
trivially less responsive, but is more flexible.