Re: Recursive deadlock on die_lock

Keith Owens (kaos@ocs.com.au)
Sun, 14 Oct 2001 17:13:16 +1000


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.

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