If you browse through sched.c, I think you'll find that reschedule is not called
if the currently running task has ticks left on its time slice. sched.c can be
patched to set need_resched true if any real time priority task is made runnable
at the current tick, but this is not done by default. Sorry I can't provide a
patch, but it's Sunday and I'm not at work. (I think there are other problems
too, BTW)
Mike