Re: Oops in 2.1.106

Etienne Lorrain (lorrain@fb.sony.de)
Mon, 22 Jun 1998 17:27:19 +0001


Hi,

> If I boot and leave me machine unattended for a while (15-20 mins) and
> then I try to login I get a kernel oops (divide by zero, process init). I
> cannot post the whole oops here since the machine locks hard but here is
> the stack trace:
>
> >>EIP: c010eaf5 <do_fast_gettimeoffset+41/64>
>
> Trace: c010ebdf <do_gettimeofday+2b/68>
> Trace: c011b48d <sys_gettimeofday+19/a0>
> Trace: c0109e64 <system_call+38/3c>
>
> The problem is the second divl in the do_fast_gettimeoffset call.
>
> any ideas?

Processor ? AMD or Cyrix ?
Problem with the processor internal timer returning twice the
same value... Try disabling suspend on halt.

Did someone check that the assembly instruction is working
correctly when there is an overflow of the 32 lower bit
of the counter while reading the TSC, for instance by running
*such* a software few hours (it has not even been compiled!)?

#include <stdio.h>

struct {unsigned high, low} tsc1, tsc2;

#define GET_TSC(X) \
__asm__(".byte 0x0f,0x31" \
:"=a" (X.low), "=d" (X.high))

void main (void)
{
GET_TSC(tsc1);
while(1) {
GET_TSC(tsc2);
if (tsc2.low <= tsc1.low)
printf ("borrow at 32bits, tsc_before 0x%X:%X,"
" tsc_after 0x%X:%X\n",
tsc1.high, tsc1.low, tsc2.high, tsc2.low);
tsc1 = tsc2;
}
}

Then for each line displayed, the MSB of "tsc_after" should
be one more than the MSB of "tsc_before".

Just ignore the last part if not applicable...
Etienne.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu