Ouch! We need to fix this. This has nothing to do with your patchseries, but if you look at schedule():

put_prev_task(rq, prev); next = pick_next_task(rq);

We put the prev task and then pick the next task. If we call schedulefor some reason when we don't need to really schedule, then we justadded and removed from the pushable rb tree the same task. That is, wedid the rb manipulation twice, for no good reason.