* Daniel Walker <dwalker@xxxxxxxxxx> wrote: > It looks like sched_class->enqueue_task() is NULL and that's why the > system hangs .. > > The reason why that happens is because check_pgt_cache() is called > from the idle thread, and with PREEMPT_RT check_pgt_cache() locks at > least one mutex .. Once the idle thread is on a wait_list, as soon as > it's woke by the mutex owner the system will crash in enqueue_task. > Since the idle thread has a NULL sched_class->enqueue_task .. > > check_pgt_cache() is already getting called from the desched_thread() > , so I think it could just be removed from i386 cpu_idle(). > > Anyone have comments on the theory above? yeah, that call definitely looks wrong in cpu_idle(). Most of the other check_pgd_cache() calls introduced by commit f1d1a842 look wrong too in an -rt context. Fix is below. Ingo Index: linux-rt.q/arch/i386/kernel/process.c =================================================================== --- linux-rt.q.orig/arch/i386/kernel/process.c +++ linux-rt.q/arch/i386/kernel/process.c @@ -189,7 +189,6 @@ void cpu_idle(void) tick_nohz_stop_sched_tick(); - check_pgt_cache(); rmb(); idle = pm_idle; - To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html