Raising an disabled tasklet / VC/KBD initialization bug.

From: Andi Kleen (ak@suse.de)
Date: Mon Mar 04 2002 - 11:56:03 EST


Hallo,

I just ran into the following situation on x86-64 on 2.4.17. I think
2.5 has the same problem.

For some reason vc_init executed in init order after kbd_init
(they are both indirectly called via __initcall so it can happen)
vc_init does a tasklet_schedule for the keyboard tasklet in
set_leds. The keyboard tasklet had not been enabled yet because kbd_init
didn't execute.
Result was an raised tasklet that wasn't enabled. schedule was called
and ran the softirqs. tasklet_action always tried to execute it, but
returned on the non zero count. The tasklet was still active. ksoftirqd
noticed that and executed do_softirq again -> endless loop.

For now I just removed the set_leds() call in reset_terminal to work around
it. The real fix would be either to add an mechanism to support raising
of disabled tasklets properly or make sure kbd_init and vc_init have defined
init order and the first always executes before the second.

Comments?

-Andi

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Mar 07 2002 - 21:00:34 EST