UP load_up_fpu crash (2.6.8-rc2)
Paul Mackerras
paulus at samba.org
Wed Jul 28 11:50:04 EST 2004
Nathan Lynch writes:
> We seem to be broken with CONFIG_SMP=n on 2.6.8-rc2 and 2.6.8-rc1-mm1:
>
> Freeing unused kernel memory: 280k freed
> INIT: version 2.85 booting
> Vector: 300 (Data Access) at [c00000003f043bb0]
> pc: c00000000000bab0: .load_up_fpu+0xb0/0x16c
> lr: 00000000400272b8
> sp: c00000003f043e30
> msr: 8000000000003032
> dar: 108
> dsisr: 40000000
> current = 0xc00000003f03d440
> paca = 0xc0000000003cc000
> pid = 327, comm = hotplug
> enter ? for help
> mon> t
> [c00000003f043e30] c00000000000b4d8 .handle_page_fault+0x20/0x40
> (unreliable)
> --- Exception: 801 (FPU Unavailable) at 000000004000b908
> SP (ffffe480) is in userspace
This is very puzzling. It appears that we have taken a FPU
unavailable trap from userspace, which is fine, but then it looks like
we think some other task owns the FPU at the moment, and that task is
a kernel thread.
We are crashing because last_task_used_math->thread.regs is NULL.
That should only happen for a kernel thread, but last_task_used_math
should never point to a kernel thread. The only place that
last_task_used_math gets set to a non-NULL value is in load_up_fpu,
and that should only be called if we get a FPU unavailable trap from
usermode.
It would be very useful to see what last_task_used_math contains at
the time of the crash, and see what last_task_used_math->comm is, so
we can work out whether the task that owns the FPU is in fact a kernel
thread - in which case we need to work out how last_task_used_math is
getting to point at it - or if it isn't a kernel thread, in which case
we need to work out why task->thread.regs is NULL for that task.
Paul.
** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc64-dev
mailing list