Messages in this thread | | | Date | Sat, 1 Apr 2006 12:53:36 -0800 | From | Eugene Surovegin <> | Subject | "tvec_bases too large for per-cpu data" commit broke early_serial_setup() |
| |
Hi!
Commit a4a6198b80cf82eb8160603c98da218d1bd5e104 "[PATCH] tvec_bases too large for per-cpu data"
broke early_serial_setup() and maybe other code which uses init_timer() before init_timers_cpu() is called.
This commit introduced run-time initialization dependence which never existed before, namely, tvec_bases was always valid before this change, but now it's a pointer which should be initialized prior to use of any timer function.
If init_timer() is called before such initialization (in my case this happens when PPC440GX board support code calls early_serial_setup to register UARTs, serial8250_isa_init_ports() calls init_timer()), "base" field in the timer_list struct is set to NULL.
When later mod_timer() is called for such timer it hangs in lock_timer_base().
Rolling back this commit fixes the problem, although, this is obviously not a proper fix.
I don't a fix I like, so I'll leave it to people more familiar with this matter :)
-- Eugene
- 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/
| |