Hello, On Fri, Aug 21, 2009 at 02:57:43PM +0200, Bo Hansen wrote: > Hi Uwe, > > I cannot find anything in the dmesg or serial output regarding the > WARN_ON_ONCE(...) > I guess the WARN_ON_ONCE(...) should show up in dmesg output? > > What puzzles me is that I tried the CONFIG_DEBUG_BUGVERBOSE=y > also when I enabled CONFIG_DEBUG_INFO. When I do > this I don't get the kernel panic. Is this somehow related to the > WARN_ON_ONCE? > > Attachments only sent to Uwe - anybody are welcome to get a copy. Hhhhmm, clkevt32k_next_event is called with delta=1 which hits BUG_ON(delta < 2). I calculated the clockeventdevice parameters by hand, and the numbers look good: clkevt.shift = 32 clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift) = (32768 << 32) / 1000000000 = 140737 clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1 = (2 << clkevt.shift) / clkevt.mult + 1 = (2 << 32) / 140737 + 1 = 61036 min_delta = (clkevt.min_delta_ns * mult) >> clkevt.shift = (61036 * 140737) >> 32 = 2 Can you please apply the patch below, reproduce and provide the two lines of output resulting from the two added printks? Best regards Uwe diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index 1ff1bda..83a7379 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c @@ -136,7 +136,13 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev) u32 alm; int status = 0; - BUG_ON(delta < 2); + if (unlikely(delta < 2)) { + pr_emerg("************** %s: shift=%d, mult=%lu, " + "min_delta_ns=%lu, dev=%pS\n", __func__, + dev->shift, dev->mult, + dev->min_delta_ns, dev); + BUG(); + } /* Use "raw" primitives so we behave correctly on RT kernels. */ raw_local_irq_save(flags); @@ -205,6 +211,18 @@ void __init at91rm9200_timer_init(void) clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt); clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1; + + { + unsigned long long clc = (int64_t)clkevt.min_delta_ns * + clkevt.mult; + + clc >>= clkevt.shift; + + pr_info("************** %s: shift=%d, mult=%lu, " + "min_delta_ns=%lu, minclc=%llu\n", __func__, + clkevt.shift, clkevt.mult, + clkevt.min_delta_ns, clc); + } clkevt.cpumask = cpumask_of(0); clockevents_register_device(&clkevt); -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ | -- 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