Messages in this thread | | | Date | Mon, 4 Mar 2002 17:56:03 +0100 | From | Andi Kleen <> | Subject | Raising an disabled tasklet / VC/KBD initialization bug. |
| |
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/
| |