Exception handling and recovery
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?
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
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 triggersia64_fault()and then you want to search the exception table inia64_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.
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
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 triggersia64_fault()and then you want to search the exception table inia64_fault()? I think it would be ok to do this (in the KDB patch).Exactly. IMHO
ia64_faultshould alwayssearch_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]
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().