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.