Skip to contentSkip to conversation

Exception handling and recovery

Linux-ia64 Keith Owens 3 participants 6 messages Mar 13, 2002

lore
Share & tools
lore
#0 lore raw

Unlike i386, the ia64 exception table code only recovers from invalid user space addresses. kdb can get other faults which EX() does not currently allow recovery from. Is there any reason why I should not add exception table handling to ia64_fault(), to generalize the fault recovery mechanism?

#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Keith Owens

Keith> Unlike i386, the ia64 exception table code only recovers from Keith> invalid user space addresses. kdb can get other faults which Keith> EX() does not currently allow recovery from. Is there any Keith> reason why I should not add exception table handling to Keith> ia64_fault(), to generalize the fault recovery mechanism?

You mean kdb would do get_user() on a bad pointer, which triggers ia64_fault() and then you want to search the exception table in ia64_fault()? I think it would be ok to do this (in the KDB patch).

	--david
#2 lore raw
In reply to Keith Owens
Quoted 11 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Keith Owens

Keith> Unlike i386, the ia64 exception table code only recovers from Keith> invalid user space addresses. kdb can get other faults which Keith> EX() does not currently allow recovery from. Is there any Keith> reason why I should not add exception table handling to Keith> ia64_fault(), to generalize the fault recovery mechanism?

You mean kdb would do get_user() on a bad pointer, which triggers ia64_fault() and then you want to search the exception table in ia64_fault()? I think it would be ok to do this (in the KDB patch).

Exactly. IMHO ia64_fault should always search_exception_table(), even if kdb is not installed. Other architectures use exception tables to detect if the hardware supports extra instructions, registers, MSR values etc., exception recovery should be general purpose.

#3 lore raw
In reply to Keith Owens
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Keith Owens

Keith> Exactly. IMHO ia64_fault should always
Keith> search_exception_table(), even if kdb is not installed. Keith> Other architectures use exception tables to detect if the Keith> hardware supports extra instructions, registers, MSR values

IA-64 has CPUID, PAL, SAL, and ACPI for such purposes.

Keith> etc., exception recovery should be general purpose.

Generality for the sake of generality only results in bloat. The exception handling should be used where it makes sense. Outside of debugging, there is no good reason to search the exception tables in ia64_fault(). In fact, it might only end up hiding real kernel bugs.

	--david
#4 lore raw
In reply to Keith Owens
Quoted 11 lines
Quoted 8 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Keith Owens

Keith> Unlike i386, the ia64 exception table code only recovers from Keith> invalid user space addresses. kdb can get other faults which Keith> EX() does not currently allow recovery from. Is there any Keith> reason why I should not add exception table handling to Keith> ia64_fault(), to generalize the fault recovery mechanism?

Quoted 9 lines
Quoted 3 lines

You mean kdb would do get_user() on a bad pointer, which triggers ia64_fault() and then you want to search the exception table in ia64_fault()? I think it would be ok to do this (in the KDB patch).

Exactly. IMHO ia64_fault should always search_exception_table(), even if kdb is not installed. Other architectures use exception tables to detect if the hardware supports extra instructions, registers, MSR values etc., exception recovery should be general purpose.

I may have missed the context of the question, but on IA64 if kdb makes a reference to a bad region 6 or 7 pointer, it may trigger an MCA. MCAs are not recoverable via search_exception_table().

Signature · 3 lines
Thanks

Jack Steiner    (651-683-5302)   (vnet 233-5302)      [email protected]
#5 lore raw
In reply to Keith Owens
Quoted 3 lines · Jack Steiner

I may have missed the context of the question, but on IA64 if kdb makes a reference to a bad region 6 or 7 pointer, it may trigger an MCA. MCAs are not recoverable via search_exception_table().

Agreed, but some recoverable errors are not currently checking the exception table. For example, sys_query_module = 0xe000000000a64000, id 0xc000000000a64000 (same address, but region 6) fails with 'General
Exception: IA-64 Reserved Register/Field fault (data access)'. The more resilient I can make kdb, the better I like it, hence my wish to add recovery to ia64_fault().