freebsd-skq/sys/sparc64/include
Marius Strobl 4d05e7b184 On UltraSPARC-III+ and greater take advantage of ASI_ATOMIC_QUAD_LDD_PHYS,
which takes an physical address instead of an virtual one, for loading TTEs
of the kernel TSB so we no longer need to lock the kernel TSB into the dTLB,
which only has a very limited number of lockable dTLB slots. The net result
is that we now basically can handle a kernel TSB of any size and no longer
need to limit the kernel address space based on the number of dTLB slots
available for locked entries. Consequently, other parts of the trap handlers
now also only access the the kernel TSB via its physical address in order
to avoid nested traps, as does the PMAP bootstrap code as we haven't taken
over the trap table at that point, yet. Apart from that the kernel TSB now
is accessed via a direct mapping when we are otherwise taking advantage of
ASI_ATOMIC_QUAD_LDD_PHYS so no further code changes are needed. Most of this
is implemented by extending the patching of the TSB addresses and mask as
well as the ASIs used to load it into the trap table so the runtime overhead
of this change is rather low. Currently the use of ASI_ATOMIC_QUAD_LDD_PHYS
is not yet enabled on SPARC64 CPUs due to lack of testing and due to the
fact it might require minor adjustments there.
Theoretically it should be possible to use the same approach also for the
user TSB, which already is not locked into the dTLB, avoiding nested traps.
However, for reasons I don't understand yet OpenSolaris only does that with
SPARC64 CPUs. On the other hand I think that also addressing the user TSB
physically and thus avoiding nested traps would get us closer to sharing
this code with sun4v, which only supports trap level 0 and 1, so eventually
we could have a single kernel which runs on both sun4u and sun4v (as does
Linux and OpenBSD).

Developed at and committed from:	27C3
2010-12-29 16:59:33 +00:00
..
_align.h
_bus.h
_inttypes.h The NetBSD Foundation has granted permission to remove clause 3 and 4 from 2010-03-03 17:55:51 +00:00
_limits.h
_stdint.h
_types.h
asi.h Add support for SPARC64 V (and where it already makes sense for other 2010-05-02 19:38:17 +00:00
asm.h Add macros for alternate entry points. 2010-09-15 21:11:29 +00:00
asmacros.h - Move the macros for generating load and store instructions to asmacros.h 2010-12-29 14:14:50 +00:00
atomic.h
bus_common.h - Add macros for the states of the interrupt clear registers. 2009-12-22 21:48:18 +00:00
bus_dma.h
bus_private.h
bus.h Revert r216134. This checkin broke platforms where bus_space are macros: 2010-12-03 07:09:23 +00:00
cache.h For CPUs which ignore TD_CV and support hardware unaliasing don't 2010-08-08 00:01:08 +00:00
ccr.h
clock.h
cmt.h - Assert that HEAPSZ is a multiple of PAGE_SIZE as at least the firmware 2010-02-13 14:13:39 +00:00
cpu.h Some machines can not only consist of CPUs running at different speeds 2010-02-20 23:24:19 +00:00
cpufunc.h Rename the "xor" parameter to "xorval" as the former is a reserved keyword 2010-12-29 14:11:46 +00:00
db_machdep.h
dcr.h Correct the DCR_IPE macro to refer to the right bit. Also improve the 2010-04-10 11:13:51 +00:00
elf.h Supply some useful information to the started image using ELF aux vectors. 2010-08-17 08:55:45 +00:00
endian.h In the replacement text of the __bswapN_const() macros cast the argument 2010-10-08 14:59:45 +00:00
exec.h
fireplane.h - Assert that HEAPSZ is a multiple of PAGE_SIZE as at least the firmware 2010-02-13 14:13:39 +00:00
float.h
floatingpoint.h
fp.h
frame.h
fsr.h
gdb_machdep.h
idprom.h
ieee.h
ieeefp.h
in_cksum.h Sync with the other archs and wrapper the prototype of in_cksum_skip(9) 2009-10-26 22:00:26 +00:00
instr.h
intr_machdep.h Refactor timer management code with priority to one-shot operation mode. 2010-09-13 07:25:35 +00:00
iommureg.h - Add support for the IOMMUs of Fire JBus to PCIe and Oberon Uranus 2009-12-23 22:02:34 +00:00
iommuvar.h - Add support for the IOMMUs of Fire JBus to PCIe and Oberon Uranus 2009-12-23 22:02:34 +00:00
jbus.h - Assert that HEAPSZ is a multiple of PAGE_SIZE as at least the firmware 2010-02-13 14:13:39 +00:00
kdb.h
kerneldump.h
ktr.h - Search the whole OFW device tree instead of only the children of the 2010-02-13 16:52:33 +00:00
limits.h
lsu.h Update for UltraSPARC-IV{,+} and SPARC64 V, VI, VII and VIIIfx CPUs. 2010-04-11 15:35:17 +00:00
mcntl.h Add support for SPARC64 V (and where it already makes sense for other 2010-05-02 19:38:17 +00:00
md_var.h Add a VIS-based block copy function for SPARC64 V and later, which 2010-09-15 21:44:31 +00:00
memdev.h
metadata.h
nexusvar.h - Add the 'cmp' and 'core' pseudo-busses which are used to group CPU cores 2010-02-13 18:51:49 +00:00
ofw_machdep.h Add OF_getscsinitid(), a helper similar to OF_getetheraddr() but for 2010-04-26 19:13:10 +00:00
ofw_mem.h
ofw_nexus.h
param.h
pcb.h Extract the code that records syscall results in the frame into MD 2009-11-10 11:43:07 +00:00
pcpu.h Adapt sparc64 and sun4v timer code for the new event timers infrastructure. 2010-07-29 12:08:46 +00:00
pmap.h On UltraSPARC-III+ and greater take advantage of ASI_ATOMIC_QUAD_LDD_PHYS, 2010-12-29 16:59:33 +00:00
pmc_mdep.h
proc.h Reorganize syscall entry and leave handling. 2010-05-23 18:32:02 +00:00
profile.h
pstate.h
ptrace.h
reg.h
reloc.h
resource.h
runq.h
sc_machdep.h
setjmp.h
sf_buf.h
sigframe.h
signal.h
smp.h Refactor timer management code with priority to one-shot operation mode. 2010-09-13 07:25:35 +00:00
stack.h
stdarg.h
sysarch.h
tick.h - Wrap exchanging td_intr_frame and calling the event timer callback in 2010-10-19 19:44:05 +00:00
tlb.h - Add TTE and context register bits for the additional page sizes supported 2010-03-17 20:23:14 +00:00
trap.h
tsb.h On UltraSPARC-III+ and greater take advantage of ASI_ATOMIC_QUAD_LDD_PHYS, 2010-12-29 16:59:33 +00:00
tstate.h
tte.h - Add TTE and context register bits for the additional page sizes supported 2010-03-17 20:23:14 +00:00
ucontext.h
upa.h - Search the whole OFW device tree instead of only the children of the 2010-02-13 16:52:33 +00:00
utrap.h
varargs.h
ver.h Add macros for the VER.impl of SPARC64 II to VIIIfx. 2010-03-17 21:00:39 +00:00
vm.h
vmparam.h Revert r216080 so kmem_map is capped at 3/5 of the currently rather modest 2010-12-21 21:32:17 +00:00
watch.h
wstate.h - The firmware of Sun Fire V1280 has a misfeature of setting %wstate to 2010-03-21 13:09:54 +00:00