Re: Recursive deadlock on die_lock

From: Eric W. Biederman (ebiederm@xmission.com)
Date: Sun Oct 14 2001 - 18:14:24 EST


Keith Owens <kaos@ocs.com.au> writes:

> On Sat, 13 Oct 2001 23:42:51 -0700,
> Andrew Morton <akpm@zip.com.au> wrote:
> >Keith Owens wrote:
> >>
> >> ...
> >> If show_registers() fails (which it does far too often on IA64) then
> >> the system deadlocks trying to recursively obtain die_lock. Also
> >> die_lock is never used outside die(), it should be proc local.
> >> Suggested fix:
> >>
> >
> >Looks to me like it'll work. But why does ia64 show_registers()
> >die so easily? Can it be taught to validate addresses before
> >dereferencing them somehow?
>
> Unwind code. It is impossible to obtain IA64 saved registers or back
> trace the calling sequence without using the unwind API. That API
> relies on decent unwind data being associated with each function
> prologue, stack adjustment, save of return registers etc. Not an issue
> for C code, it is for Assembler where the unwind info has to be hand
> coded to match what the asm is doing. IA64 also has PAL code which is
> called directly by the kernel, that PAL code has no unwind data so
> failures in PAL code result in bad or incomplete back traces.
>
> Unwind is not supposed to fail, it should detect bad input data and
> avoid errors. Alas, sometimes it does fail.

PAL Ahh!!!!!

Please tell me that we are not rely on the firmware to be correct
after we have finished initializing the operating system.

Please tell me it ain't so. I have nightmares about that kind of setup.

Eric

-
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/



This archive was generated by hypermail 2b29 : Mon Oct 15 2001 - 21:00:55 EST