Subject: CVS commit: src/sys/arch/sparc64
To: None <source-changes@NetBSD.org>
From: matthew green <mrg@netbsd.org>
List: source-changes
Date: 09/13/2006 11:35:53
Module Name: src
Committed By: mrg
Date: Wed Sep 13 11:35:53 UTC 2006
Modified Files:
src/sys/arch/sparc64/include: cpu.h cpuset.h db_machdep.h intr.h
src/sys/arch/sparc64/sparc64: db_interface.c db_trace.c genassym.cf
ipifuncs.c kgdb_machdep.c locore.s machdep.c pmap.c trap.c
Log Message:
SMP cleanup. provide support for multiple CPUs in DDB. (SMP itself
is still not working.)
cpu.h:
- add a pointer for DDB regs in SMP environment to struct cpu_info
- remove the #defines for mp_pause_cpus() and mp_resume_cpus()
cpuset.h:
- remove CPUSET_ALL() and rename CPUSET_ALL_BUT() to CPUSET_EXCEPT()
from petrov.
db_machdep.h:
- rename the members of db_regs_t to be the same as sparc
- change "db_regs_t ddb_regs" to "db_regs_t *ddb_regp" and change
all references to suit
- redo DDB_REGS to no longer be a pointer to a fixed data structure
but to one allocated per-cpu when ddb is entered
- move a bunch of prototypes in here
intr.h:
- remove SPARC64_IPI_* macros, no longer used
db_interface.c:
- change "db_regs_t ddb_regs" to "db_regs_t *ddb_regp" and change
all references to suit
- make "nil" a 64 bit entity
- change the ddb register access methods to work in multiprocessor
environment, it is now very much like sparc does it
- in kdb_trap() avoid accessing ddb_regp when it is NULL
- update several messages to include the cpu number
- unpause other cpus much later when resuming from ddb
- rename db_lock() to db_lock_cmd(), as the sparc-like code has
db_lock as a simple lock
- remove "mach cpus" command, and replace it with "mach cpu" (which
does the same) and also implement "mach cpu N" to switch to
another cpus saved trapframe
db_trace.c:
- update for the ddb_regs -> ddb_regp change
genassym.cf:
- add TF_KSTACK as offsetof(struct trapframe64, tf_kstack)
ipifuncs.c:
- overhaul extensively
- remove all normal interrupt handlers as IPI's, we now handle
them all specially in locore.s:interrupt_vector
- add a simplelock around all ipi functions - it's not safe for
multiple cpus to be sending IPI's to each other right now
- rename sparc64_ipi_pause() to sparc64_ipi_pause_thiscpu() and,
if DDB is configured, enable it to save the passed-in trapframe
to a db_regs_t for this cpu's saved DDB registers.
- remove the "ipimask" system (SPARC64_IPI_* macros) and instead
pass functions directly
- in sparc64_send_ipi() always set the interrupt arguments to 0,
the address and argument of the to be called function. (the
argument right now is the address of ipi_tlb_args variable, and
part of the reason why only one CPU can send IPI's at a time.)
don't wait forever for an IPI to complete. some of this is
from petrov.
- rename sparc64_ipi_{halt,pause,resume}_cpus() to
mp_{halt,pause,resume}_cpus()
- new function mp_cpu_is_paused() used to avoid access missing
saved DDB registers
- actually broadcast the flush in smp_tlb_flush_pte(),
smp_tlb_flush_ctx() and smp_tlb_flush_all(). the other end may
not do anything yet in the pte/ctx cases yet...
kgdb_machdep.c:
- rework for changed member names in db_regs_t.
locore.s:
- shave an instruction from syscall_setup() (set + ld -> sethi + ld)
- remove some old dead debug code
- add new sparc64_ipi_halt IPI entry point, it just calls the C
vector to shutdown.
- add new sparc64_ipi_pause IPI entry point, which just traps into
the debugger using the normal breakpoint trap. these cpus usually
lose the race in db_interface.c:db_suspend_others() and end up
calling the C vector sparc64_ipi_pause_thiscpu().
- add #if 0'ed code to sparc64_ipi_flush_{pte,ctx}() IPI entry
points to call the sp_ version of these functions.
- in rft_kernel (return from trap, kernel), check to see if the
%tpc is at the sparc64_ipi_pause_trap_point and if so, call
"done" not "retry"
- rework cpu_switch slightly: save the passed-in lwp instead of
using the one in curlwp
- in cpu_loadproc(), save the new lwp not the old lwp, to curlwp
- in cpu_initialize(), set %tl to zero as well. from petrov.
- in cpu_exit(), fix a load register confusion. from petrov.
- change some "set" in delay branch to "mov".
machdep.c:
- deal with function renames
pmap.c:
- remove a spurious space
trap.c:
- remove unused "trapstats" variable
- add cpu number to a couple of messages
To generate a diff of this commit:
cvs rdiff -r1.54 -r1.55 src/sys/arch/sparc64/include/cpu.h
cvs rdiff -r1.4 -r1.5 src/sys/arch/sparc64/include/cpuset.h
cvs rdiff -r1.19 -r1.20 src/sys/arch/sparc64/include/db_machdep.h
cvs rdiff -r1.13 -r1.14 src/sys/arch/sparc64/include/intr.h
cvs rdiff -r1.87 -r1.88 src/sys/arch/sparc64/sparc64/db_interface.c
cvs rdiff -r1.33 -r1.34 src/sys/arch/sparc64/sparc64/db_trace.c
cvs rdiff -r1.40 -r1.41 src/sys/arch/sparc64/sparc64/genassym.cf
cvs rdiff -r1.4 -r1.5 src/sys/arch/sparc64/sparc64/ipifuncs.c
cvs rdiff -r1.7 -r1.8 src/sys/arch/sparc64/sparc64/kgdb_machdep.c
cvs rdiff -r1.214 -r1.215 src/sys/arch/sparc64/sparc64/locore.s
cvs rdiff -r1.189 -r1.190 src/sys/arch/sparc64/sparc64/machdep.c
cvs rdiff -r1.172 -r1.173 src/sys/arch/sparc64/sparc64/pmap.c
cvs rdiff -r1.133 -r1.134 src/sys/arch/sparc64/sparc64/trap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.