Improve the solution of last friday.
Move the invoking of schedule() to the bottom of irq_svc, instead of in the body of do_timer().
Now everything seems OK.