291 Commits

Author SHA1 Message Date
jake
9304ac0dfd Catch up to the latest and greatest. 2002-01-08 05:53:31 +00:00
jake
c6fae03058 Add initial smp support. This gets as far as allowing the secondary
cpu(s) into the kernel, and sync-ing them up to "kernel" mode so we can
send them ipis, which also work.

Thanks to John Baldwin for providing me with access to the hardware
that made this possible.

Parts obtained from:	bsd/os
2002-01-08 05:50:26 +00:00
jake
68d3ae71f6 Setup the normal global pcb register as well on entry from user land.
Call critical_enter/critical_exit around (fast) interrupt handlers.  All
non-threaded interrupts are fast, and the threaded interrupt scheduler is
itself a fast interrupt.
Assert that an interrupt handler we are about to call is non-zero.
Be paranoid about restoring the users global registers.  Do it as the
last thing before switching to alternate globals (when we magically get
our preloaded registers back), and do it with interrupts disabled.  Any
kind of kernel trap when the globals are not setup properly is bad news.
Don't save and restore the kernel g6, it invariably points to the current
pcb now.
2002-01-08 05:37:52 +00:00
jake
f4c697794d Adapt the vectored interrupt handler for receiving ipis. If the second
data word in an interrupt packet is non-zero, it points to code to execute
to handle the ipi, so jump to it instead of enqueueing the packet.  It
is unclear if we will need queued ipis.
Interrupt g7 now points to pcpu, instead of to the per-cpu interrupt queue
itself, so use that instead.  Interrupt g6 is no longer reserved.
2002-01-08 05:27:13 +00:00
jake
a6184c4ddb Use the per-cpu panic stack in the case of a fault with a bad kernel
stack.
2002-01-08 05:20:40 +00:00
jake
0d87bee2b4 Remove ATOMIC_INC_INT macro which has moved elsewhere. 2002-01-08 05:17:28 +00:00
jake
0d46a69b72 Catch up to change in compile time assertion interface. 2002-01-08 05:15:31 +00:00
jake
28332fb455 Make this code more robust in the event of stray interrupts. Handle
stray level interrupts as well.
2002-01-08 05:13:29 +00:00
jake
c013d39a80 Use cpufunc macros instead of using inline asm directly. 2002-01-08 05:10:58 +00:00
jake
509c1e6c75 Set the normal global pcb register when context switching. 2002-01-08 05:10:07 +00:00
jake
eb9c7712df Add a macro for getting the tlbs (itlb and/or dtlb) which the given
tte may be mapped by.
2002-01-08 05:07:58 +00:00
jake
2fdfe48a88 Prototype pmap_map_tsb(). 2002-01-08 05:06:39 +00:00
jake
38396563c7 Remove PANIC_STACK_PAGES which is no longer used.
Redefine the compile time assertion macro to take one parameter.
2002-01-08 05:05:42 +00:00
jake
bb32d5779c Add declarations needed by last commit. 2002-01-08 05:03:36 +00:00
jake
712c074db3 Update comments about _start, the kernel entry point, to reflect new
parameters needed for smp support.
If we are not the boot processor, jump to the smp startup code instead.
Implement a per-cpu panic stack, which is used for bootstrapping both
primary and secondary processors and during faults on the kernel stack.
Arrange the per-cpu page like the pcb, with the struct pcpu at the end
of the page and the panic stack before it.
Use the boot processor's panic stack for calling sparc64_init.
Split the code to set preloaded global registers and to map the kernel
tsb out into functions, which non-boot processors can call.
Allocate the kstack for thread0 dynamically in pmap_bootstrap, and give
it a guard page too.
2002-01-08 05:02:13 +00:00
jake
9424335541 Fix qsort callouts used for sorting memory regions during boot. vm_offset_t
is unsigned, so we can't use signed arithmetic.

Tripped over by:	jhb
2002-01-08 04:43:04 +00:00
jake
29ddfd4ed0 Add a md field to pcpu for the upa module id.
Remove the alt_stack field.
Use the defines for the register variables declared in C, so that they
don't get out of sync with the assembler.
2002-01-08 04:40:13 +00:00
jake
777d499906 Define CKLF_PC in terms of TRAPF_PC. 2002-01-08 04:36:53 +00:00
jake
3e20261f8a Add a mov() macro, which is used in conjunction with the register defines
for setting reserved global registers from c.
2002-01-08 04:36:01 +00:00
jake
36aea0f17e Update comments and defines to reflect that normal and alternate g6 point
to the current pcb.
Remove interrupt global defines; they use PCPU_REG now.
Move ATOMIC_INC_INT here from exception.s, add ATOMIC_DEC_INT.
Add a KASSERT macro for use in assembler.
2002-01-08 04:34:20 +00:00
jake
ceb8ef47f2 Add asis for the upa config reg, which contains the hardware cpu id, and
for the interrupt send register, which is used for dispatching ipis.
2002-01-08 04:29:50 +00:00
peter
b19d3ea0e2 Convert a bunch of 1 << PCPU_GET(cpuid) to PCPU_GET(cpumask). 2002-01-05 09:41:37 +00:00
tmm
81d2d644f4 1. Implement an optimization for pmap_remove() and pmap_protect(): if a
substantial fraction of the number of entries of tte's in the tsb
   would need to be looked up, traverse the tsb instead. This is crucial
   in some places, e.g. when swapping out a process, where a certain
   pmap_remove() call would take very long time to complete without this.
2. Implement pmap_qenter_flags(), which will become used later
3. Reactivate the instruction cache flush done when mapping as executable.
   This is required e.g. when executing files via NFS, but is known to
   cause problems on UltraSPARC-IIe CPU's. If you have such a CPU, you
   will need to comment this call out for now.

Submitted by:	jake (3)
2002-01-02 18:49:20 +00:00
tmm
cec7ec547b Correct the defintion of struct ofw_upa_regs, and use it instead of
struct ofw_nexus_reg. Implement UPA device memory management in the
nexus driver.
Adapt the psycho driver to these changes, and do some minor cleanup work
while being there.
2002-01-02 18:27:13 +00:00
tmm
f1283775d7 Close a window of time during early boot in which an interrupt would
cause a panic.

Reported and tested (in another version) by: Jamey Wood <Jamey.Wood@Sun.COM>
2002-01-02 18:21:16 +00:00
jake
28634ac710 Correctly identify the cpu in certain ultra 1s.
Noticed by:	Jamey Wood <Jamey.Wood@Sun.COM>
Submitted by:	tmm
2002-01-01 21:26:57 +00:00
jake
440d569653 Define __ASM__ so that libc will know not to define C things. 2002-01-01 21:21:05 +00:00
jake
8b13243b54 Add a define for the fp restore soft trap type.
Only declare C things if __ASM__ is not defined.
2002-01-01 21:19:46 +00:00
jake
59cf24d443 Add constants needed by user trap code. 2002-01-01 21:17:14 +00:00
jake
2a960306a9 Enable virtual caching for kernel pages. When we enabled virtual caching
for certain user pages, stores to kernel pages would not update the
affected cache lines, which would sometimes cause the wrong data to be
returned for loads from kernel pages.  This was especially fatal when
the addresses affected held the kernel stack pointer, and a random
value was loaded into it.
Fix a harmless off by one error in a dcache_inval_phys call.
2002-01-01 21:14:58 +00:00
jake
cf2cecbdf0 Add some more info to traces.
Fix a potential race in setting up the per-cpu pointer if the special
restore fails on return to user mode fails and we need to trap back
into the kernel to fault in more stack.
Remove debug code.
2002-01-01 21:04:27 +00:00
jake
122616f048 Ensure that the syscall trap vector is properly aligned. 2002-01-01 21:00:29 +00:00
jake
f57e18099a Implement sysarch(SPARC_UTRAP_INSTALL).
Forgot this file in last commit.
2002-01-01 20:57:51 +00:00
jake
0c96d7eeb6 Implement user trap delivery as specified by the sparc abi. This provides
an efficient way for the kernel to bounce certain mundane traps back to
userland for handling there.  A user trap handler returns directly to the
trapping user code, rather than going through the kernel again.  Only a
handful of instructions are actually executed in kernel mode.
Implement sysarch(SPARC_UTRAP_INSTALL).
Add code to handle sharing of the user trap table across forks and unsharing
at exec.

This can be used to implement efficient tracking of floating point register
usage in userland, fe by a thread library, and to handle alignment fault
fixups and instruction emulation in userland, for which the code may need
to be different for 32bit and 64bit binaries.
2002-01-01 20:56:28 +00:00
jake
42ab31b72d Add a panic stack, which is used as a known good stack when there is
something wrong with the kernel stack.
Add code to check the kernel stack pointer in various important places
and try hard not to go down in flames if its wrong.
2002-01-01 20:26:46 +00:00
jake
30c8fe6f8c Add a soft trap for restoring the fpu registers from the pcb. 2002-01-01 20:15:39 +00:00
jake
cd7fe8e633 Fix long lines in the trap table due to the abi specificied trap types
having overly long names.
2002-01-01 20:10:51 +00:00
tmm
e97e1a4d64 Do not include pcib.h, which only existed in my development tree, and do
not use struct pcib_softc when struct apb_softc would be correct.

Spotted by:	jake
Pointy hat to:	tmm
2001-12-30 16:14:33 +00:00
tmm
49006afe46 Add bus_common.h, which contains some definiton that apply to both PCI
and SBus.

Obtained from:	NetBSD
2001-12-30 16:13:05 +00:00
jake
a8a4f464ef Make these compile. 2001-12-29 09:55:37 +00:00
jake
30c904f5f2 Remove local change that crept in. 2001-12-29 09:55:10 +00:00
jake
734a071e5d Add a header for user trap types required by the sparc abi.
For simplicity the corresponding kernel types use the same
numerical values.
2001-12-29 08:59:33 +00:00
jake
3be11fedf8 Adapt for used by upcoming fp emulation code.
Comment.

Submitted by:	tmm
2001-12-29 08:55:56 +00:00
jake
ca60729366 Print the correct v9 opcodes.
Submitted by:	tmm
2001-12-29 08:52:50 +00:00
jake
c9cd53a3eb Update to new constants. 2001-12-29 08:37:58 +00:00
jake
55292ad79d Make cont in ddb work. 2001-12-29 08:37:35 +00:00
jake
8c6d251d8b Prototype dcache_inval_phys.
Submitted by:	tmm
2001-12-29 08:35:49 +00:00
jake
21d74ce377 Add comments as to why VM_MAXUSER_ADDRESS is magic (abitrary).
Define the KVA_RANGE in terms of ttes, not sttes.
Remove UPT_MIN_ADDRESS.  We no longer use a hard coded address for
the user tsb.
2001-12-29 08:25:43 +00:00
jake
b8a65955b6 Make tte bit constants explicitly unsigned and long.
Add a wierd soft bit.
Remove struct stte.
2001-12-29 08:24:02 +00:00
jake
c48facc984 Add definitions for dcache color bits, which may move to cache.h.
Add fields to md_page for tracking virtual page color, and pv entry
lists.
Fix pmap_track_modified to work for non-kernel pmaps.  This is due to
kernel virtual addresses potentially overlapping with userland addresses.
2001-12-29 08:19:24 +00:00