Use a per-CPU thread dispatch disable level. So instead of one global
thread dispatch disable level we have now one instance per processor.
This is a major performance improvement for SMP. On non-SMP
configurations this may simplifiy the interrupt entry/exit code.
The giant lock is still present, but it is now decoupled from the thread
dispatching in _Thread_Dispatch(), _Thread_Handler(),
_Thread_Restart_self() and the interrupt entry/exit. Access to the
giant lock is now available via _Giant_Acquire() and _Giant_Release().
The giant lock is still implicitly acquired via
_Thread_Dispatch_decrement_disable_level().
The giant lock is only acquired for high-level operations in interrupt
handlers (e.g. release of a semaphore, sending of an event).
As a side-effect this change fixes the lost thread dispatch necessary
indication bug in _Thread_Dispatch().
A per-CPU thread dispatch disable level greatly simplifies the SMP
support for the interrupt entry/exit code since no spin locks have to be
acquired in this area. It is only necessary to get the current
processor index and use this to calculate the address of the own per-CPU
control. This reduces the interrupt latency considerably.
All elements for the interrupt entry/exit code are now part of the
Per_CPU_Control structure: thread dispatch disable level, ISR nest level
and thread dispatch necessary. Nothing else is required (except CPU
port specific stuff like on SPARC).
This commit deletes all RTEMS ChangeLog files. These files have been abandoned
since converting to git version control. The historical data may be recovered
by checking out any commit before this one. Most of the contents of these
ChangeLog files can also be found in the git log.
Two external ChangeLog files, ChangeLog.slac and ChangeLog.zlib, remain.
Add CPU port type CPU_Exception_frame and function
_CPU_Exception_frame_print().
The CPU ports of avr, bfin, h8300, lm32, m32c, m32r, m68k, nios2, sh,
sparc64, and v850 use an empty default implementation of
_CPU_Exception_frame_print().
Add rtems_exception_frame and rtems_exception_frame_print().
Add RTEMS_FATAL_SOURCE_EXCEPTION for CPU exceptions. Use rtems_fatal()
with source RTEMS_FATAL_SOURCE_EXCEPTION in CPU ports of i386, powerpc,
and sparc for unexpected exceptions.
Add third parameter to RTEMS_BSP_CLEANUP_OPTIONS() which controls the
BSP_PRINT_EXCEPTION_CONTEXT define used in the default
bsp_fatal_extension().
Add test sptests/spfatal26.
Script does what is expected and tries to do it as
smartly as possible.
+ remove occurrences of two blank comment lines
next to each other after Id string line removed.
+ remove entire comment blocks which only exited to
contain CVS Ids
+ If the processing left a blank line at the top of
a file, it was removed.
PR 1573/cpukit
* shared/irq/exception.S: Add a per cpu data structure which contains
the information required by RTEMS for each CPU core. This
encapsulates information such as thread executing, heir, idle and
dispatch needed.
PR 433/tools
* mips-stub.c: Patch from C. M. Heard <heard@pobox.com> described as:
The purpose of the patch is to make the stub ignore all
characters except '+' (ack) or '-' (nak) when it has transmitted a
packet and expects an acknowledgment. Without the patch,
putpacket() will retransmit each time it receives anything other
than '+' when expecting an ack, and that, bitter experience has
found, frequently results in the stub failing to sync up when
initially attaching to gdb.
I think that rtems users will notice significant improvement in
the of the mips stub if this patch is incorporated in the
distribution; certainly I did in my stand-aline environment. I
should hasten to add that it is only an improvement and not a 100%
cure for synchronization problems because '+' characters can (and
do) during as message data, and it's still possible for these to
be mistaken as acks. I have no idea how to fix that short of
redesigning the gdb-remote protocol.
* mips-stub.c: Re-debugged a breakpoint problem, zbreak target
address was a char * which caused the target instruction to not
be fully copied, so the zbreak logic corrupted the original
instruction and didn't insert a valid break instruction.
* mips-stub.c: Debugged & tweaked the gdb command processing,
zbreak stuff, breakpoint and step code. Implemented 'T' command
support and debugged remote gdb support w/ the Mongoose bsp.
Added the memory segment support.
* memlimits.h: Disabled all contents in favor of memory sement
support. This file could probably go away.
* rtems-stub-glue.c (rtems_gdb_index_to_stub_id()): New routine.
rtems_gdb_stub_get_register_from_context(): Implemented MIPS version.
rtems_gdb_stub_get_offsets(): Implemented MIPS version.
* README: Updated.
* Significant modifications including adding thread support, the 'X'
command, and reorganizing so that target CPU independent routines
could be reused.
* gdb_if.h: Added numerous prototypes.
* mips-stub.c: Added thread support as well as 'X' command.
Also noticed that the 'P' command was from the mips protocol.
* rtems-stub-glue.c: New file. This file contains all generic
support which should be able to be reused on another target CPU.
* mips-stub.c (handle_exception): Prototype changed to be an RTEMS
entry point. Added comments about possible need to flush cache.
(mips_gdb_stub_install): New routine.
* Makefile, stubinit.S, r46kstub.ld, ioaddr.h: Removed as unused
with RTEMS.
* r46kstub.c: Renamed to mips-stub.c.
* mips-stub.c: New file -- was r46kstub.c.
* memlimits.h: New file was limits.h.
* limits.h: Removed.
* r4600.h: Eliminated need for this file.
* README: Updated.
* gdb_if.h: Added CVS Id.
* mips-stub.c: Attempt to deal with MIPS1 versus MIPS3.
* Merged r46kstub.c into RTEMS distribution without modification.
I got the code from Franz Fischer <Franz.Fischer@franz-fischer.de>
who had used this with an old version of RTEMS with the mips64orion
port of RTEMS. After adding this to the repository, I will tailor
this to work with the RTEMS exception processing model and trim
no longer needed parts.
* ChangeLog, gdb_if.h, ioaddr.h, limits.h, Makefile, mips_opcode.h,
r4600.h, r46kstub.c, r46kstub.ld, README, stubinit.S: