Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/arch/arm



Module Name:    src
Committed By:   scw
Date:           Fri Oct 31 16:30:15 UTC 2003

Modified Files:
        src/sys/arch/arm/arm: bcopyinout.S
        src/sys/arch/arm/arm32: exception.S fault.c
        src/sys/arch/arm/include: armreg.h

Log Message:
Overhaul arm32's abort handlers:

 - Assume a permission fault is always the result of an attempted
   write, so no need to disassemble the opcode.
   (as discussed with Richard Earnshaw/Jason Thorpe a week or two ago)

 - Split out non-MMU data aborts into separate functions, and deal
   correctly with XScale imprecise aborts. Specifically, the old code
   made no attempt to handle the double abort faults which can occur
   as a result of two consecutive external (imprecise) aborts. This
   was easy to provoke by read(2)ing from a /dev/mem offset which caused
   an external abort. With the old code, this would bring the system
   down instantly, with little clue as to why. (hint: tf_spsr held
   PSR_ABT32_MODE...)

 - Re-write badaddr_read() to use pcb_onfault instead of adding extra
   overhead to data_abort_handler(). A side effect of this is that it
   now benefits from the XScale double abort recovery.

 - Invoke the cpu-specific prefetch/data abort fixup routines only if
   the host cpu actually needs it. On other cpus, the code is optimised
   away.

 - Sprinkle __predict_{false,true} in all the right places.

 - G/C some excess debugging baggage.


To generate a diff of this commit:
cvs rdiff -r1.11 -r1.12 src/sys/arch/arm/arm/bcopyinout.S
cvs rdiff -r1.12 -r1.13 src/sys/arch/arm/arm32/exception.S
cvs rdiff -r1.38 -r1.39 src/sys/arch/arm/arm32/fault.c
cvs rdiff -r1.27 -r1.28 src/sys/arch/arm/include/armreg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index