Re: 64bit kernel not booting with CONFIG_PRINTK_TIME=y

From: Kyle McMartin
Date: Sat Jul 19 2008 - 17:55:17 EST


On Thu, Jul 17, 2008 at 07:05:02PM +0200, Guy Martin wrote:
>
> Recompiling with CONFIG_PRINTK_TIME=n makes it works straight away.
>

The problem is kernel/printk.c around line 731.

t = jiffies * (NSEC_PER_SEC / HZ);
do_div(t, 10000000000); is doing some badness (which is hard as hell to
debug since printk isn't working.)

It's doing some sort of bollocks when jiffies is between 9 and 10...

do_div being:

# define do_div(n,base) ({ \
uint32_t __base = (base); \
uint32_t __rem; \
__rem = ((uint64_t)(n)) % __base; \
(n) = ((uint64_t)(n)) / __base; \
__rem; \
})

I'm *guessing* that umoddi3 or udivdi3 is doing an xmpyu or something,
which since this is probably before fpu init, is trapping, which is
trying to printk, which is recursively exploding.

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