Home | History | Annotate | only in /src/sys/arch/arm/include/arm32
History log of /src/sys/arch/arm/include/arm32
RevisionDateAuthorComments
 1.10 25-Oct-2014  skrll Remove katelib.h and references to it.

{Read,Write}{Word,Byte} macros are provided in the files that still use
them. Someone(tm) should convert them to bus_space(9)
 1.9 26-Nov-2002  lukem branches: 1.9.158;
Remove KDIR=, since SYS_INCLUDE=symlinks and KDIR are not supported any more.
 1.8 23-Nov-2001  thorpej - Move more contents of various <machine/vmparam.h> files into
<arm/arm32/vmparam.h> (mostly the stuff that's tied to the pmap
implementation).
- Since the MMU definitions in pte.h are specific to ARM processors
that support 32-bit mode, move pte.h to <arm/arm32/pte.h>.
- Make the Netwinder startup file build again (use PT_B|PT_C, rather
than PT_CACHEABLE, since the latter expands to a variable these days).
 1.7 22-Nov-2001  thorpej Add 26-bit and 32-bit types.h files, which indicate the programming
model in use for a given platform (__PROG26 vs __PROG32), then pulls
in <arm/types.h>. Change each ARM port to pull in <arm/arm26/types.h>
or <arm/arm32/types.h> as appropriate. Change all references to PROG26
and PROG32 to __PROG26 and __PROG32. Eliminate the opt_progmode.h
header file.
 1.6 03-Sep-2001  matt branches: 1.6.6;
Add a merged <pcb.h> for arm26/arm32.
 1.5 14-Jul-2001  matt Make <sysarch.h> valid for all arm platforms. Adjust/remove port-specific
includes as required.
 1.4 18-Jun-2001  bjh21 branches: 1.4.2;
Move <arm/arm32/bus.h> to <arm/bus.h>, since it looks like it's going to be
necessary on arm26 as well.
 1.3 10-Mar-2001  rearnsha branches: 1.3.2;
Add param.h to INCS.
 1.2 26-Feb-2001  reinoud branches: 1.2.2;
Putting the param.h back into the arm32 resp. hpcarm include directories
 1.1 23-Feb-2001  reinoud Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.2.2.2 21-Jun-2001  nathanw Catch up to -current.
 1.2.2.1 09-Apr-2001  nathanw Catch up with -current.
 1.3.2.2 12-Mar-2001  bouyer Sync with HEAD.
 1.3.2.1 10-Mar-2001  bouyer file Makefile was added on branch thorpej_scsipi on 2001-03-12 13:27:24 +0000
 1.4.2.3 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.4.2.2 13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.4.2.1 03-Aug-2001  lukem update to -current
 1.6.6.3 11-Dec-2002  thorpej Sync with HEAD.
 1.6.6.2 08-Jan-2002  nathanw Catch up to -current.
 1.6.6.1 03-Sep-2001  nathanw file Makefile was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.9.158.1 03-Dec-2017  jdolecek update from HEAD
 1.1 10-Nov-2007  matt branches: 1.1.2;
file arm1136_pmc.h was initially added on branch matt-nb4-arm.
 1.1.2.1 10-Nov-2007  matt Add AT91 support from Sami Kantoluoto
Add TI OMAP2430 support from Marty Fouts @ Danger Inc
 1.4 18-Jun-2001  bjh21 branches: 1.4.8;
Move <arm/arm32/bus.h> to <arm/bus.h>, since it looks like it's going to be
necessary on arm26 as well.
 1.3 07-Mar-2001  thorpej branches: 1.3.2;
Add the BUS_DMA_STREAMING flag.
 1.2 04-Mar-2001  matt branches: 1.2.2;
s/vm_offset_t/vaddr_t/g
 1.1 23-Feb-2001  reinoud Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.2.2.1 09-Apr-2001  nathanw Catch up with -current.
 1.3.2.2 12-Mar-2001  bouyer Sync with HEAD.
 1.3.2.1 07-Mar-2001  bouyer file bus.h was added on branch thorpej_scsipi on 2001-03-12 13:27:24 +0000
 1.4.8.2 18-Jun-2001  bjh21 Move <arm/arm32/bus.h> to <arm/bus.h>, since it looks like it's going to be
necessary on arm26 as well.
 1.4.8.1 18-Jun-2001  bjh21 file bus.h was added on branch nathanw_sa on 2001-06-18 21:37:34 +0000
 1.10 03-Jul-2020  jmcneill Move db_reset_cmd prototype to db_machdep.h (forgot to commit this file)
 1.9 28-Mar-2014  matt Make ddb_registers per-cpu. All switching of CPUs (xxx doesn't work yet).
 1.8 01-Mar-2014  matt Add db_show_tlb_cmd prototype
 1.7 05-Jan-2013  christos branches: 1.7.2;
remove show panic cmd
 1.6 21-Sep-2012  matt Add a 'mach fault' command to print DFAR/DFSR/IFAR/IFSR/TTBR
 1.5 14-Mar-2009  dsl branches: 1.5.12; 1.5.20; 1.5.22;
Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.4 22-Feb-2007  matt branches: 1.4.48; 1.4.56; 1.4.62; 1.4.66;
Fix lossage from boolean_t -> bool and updated x86 bus_dma.
 1.3 11-Dec-2005  christos branches: 1.3.26;
merge ktrace-lwp.
 1.2 02-Jun-2005  uwe branches: 1.2.2;
Catch up with constification.
 1.1 05-Jan-2002  chris branches: 1.1.2; 1.1.4; 1.1.22;
Make some of the arm32 files build with LOOSE_PROTOTYPES not set in the makefile. Turned up a few mismatched functions. Note that this isn't all of the arm32 files. Aim will be to get arm32 kernels built with LOOSE_PROTOTYPES not set.
 1.1.22.1 10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.1.4.2 11-Jan-2002  nathanw More catchup.
 1.1.4.1 05-Jan-2002  nathanw file db_machdep.h was added on branch nathanw_sa on 2002-01-11 23:38:04 +0000
 1.1.2.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.1.2.1 05-Jan-2002  thorpej file db_machdep.h was added on branch kqueue on 2002-01-10 19:37:55 +0000
 1.2.2.1 26-Feb-2007  yamt sync with head.
 1.3.26.1 27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.4.66.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.4.62.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.4.56.1 28-Apr-2009  skrll Sync with HEAD.
 1.4.48.1 04-May-2009  yamt sync with head.
 1.5.22.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.5.22.2 25-Feb-2013  tls resync with head
 1.5.22.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.5.20.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.5.12.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.5.12.2 23-Jan-2013  yamt sync with head
 1.5.12.1 30-Oct-2012  yamt sync with head
 1.7.2.1 18-May-2014  rmind sync with head
 1.48 14-Aug-2020  skrll Mirror the changes to aarch64 and

- Switch to TPIDRPRW_IS_CURLWP, because curlwp is accessed much more often
by MI code. It also makes curlwp preemption safe,

- Make ASTs operate per-LWP rather than per-CPU, otherwise sometimes LWPs
can see spurious ASTs (which doesn't cause a problem, it just means some
time may be wasted).

- Make sure ASTs are always set on the same CPU as the target LWP, and
delivered via IPI if posted from a remote CPU so that they are resolved
quickly.

- Add some cache line padding to struct cpu_info.

- Add a memory barrier in a couple of places where ci_curlwp is set. This
is needed whenever an LWP that is resuming on the CPU could hold an
adaptive mutex. The barrier needs to drain the CPU's store buffer, so
that the update to ci_curlwp becomes globally visible before the LWP can
resume and call mutex_exit().
 1.47 28-Oct-2018  skrll Consistency - NFC
 1.46 28-Oct-2018  skrll Remove magic number
 1.45 07-Jul-2017  skrll branches: 1.45.4; 1.45.6;
Fixup the non-KDTRACE_HOOKS case of PUSHDTRACEGAP - we need to copy the
stack pointer to r2.
 1.44 07-Jul-2017  chs split PUSHFRAMEINSVC into two pieces so that we can insert some additional
instructions in the middle in undefinedinstruction_bounce, namely to add
some additional space on the stack before the trapframe for undefineds from
SVC mode. this extra space allows dtrace to emulate a "push" instruction.
the initial version was from me and some improvements were from nick.
 1.43 22-Jun-2017  skrll Trailing whitespace
 1.42 17-Apr-2015  matt Put the clearing of ci_astpending back in frame.h while interrupts are
disabled.
 1.41 08-Apr-2015  matt Don't clear CI_ASTPENDING in exception return, do it in ast() instead.
Add basic support for __HAVE_PREEMPTION.
Use atomic ops for ci_astpending if __HAVE_PREEMPTION is defined.
Use kpreempt_disable/kpreempt_enable
 1.40 08-Apr-2015  matt CI_ASTPENDING is now a bitfield and low bit is for user ASTs.
 1.39 26-Feb-2014  matt branches: 1.39.6;
Remove KERNEL_LOCK/KERNEL_UNLOCK
 1.38 20-Dec-2013  matt When restoring SPRSR, use spsr_fsxc not spsr_all so bits[23-8] are restored.
This should fix use of simd instructions that rely on the GE bits.
 1.37 02-Dec-2013  joerg Don't use cpsr_all/spsr_all with mrs, it doesn't take a mask.
 1.36 18-Aug-2013  matt Use blx ip if _ARM_ARCH_5
prepare to get of switchframe
 1.35 21-Oct-2012  matt branches: 1.35.2;
Change to use symbolic constants from assym.h and fix a typo in a comment.
 1.34 21-Oct-2012  matt Implement a "fast" path for IRQ handling out of the idle loop. Since we
are in SVC32 already we only need to save a few registers. Processing is
also simplified since we know we can't return to user-mode.
 1.33 29-Aug-2012  matt branches: 1.33.2;
Use ARMV6+ cpsi{d,f} instructions whenever possible. Use r7 to hold previous
mode and avoid recomputing it. Add support for obtaining kernel_lock on
exception entry and exit.
 1.32 25-Aug-2012  matt Fix typo.
 1.31 16-Aug-2012  matt small rototill.
pcb_flags is dead. PCB_NOALIGNFLT is now in stored l_md.md_flags as
MDLWP_NOALIGNFLT. This avoids a few loads of the PCB in exception handling.
pcb_tf has been moved to l_md.md_tf. Again this avoids a lot of pcb
references just to access or set this. It also means that pcb doesn't
need to accessed by MI code.
Move pcb_onfault to after the pcb union.
Add pcb_sp macro to make code prettier.
Add lwp_settrapframe(l, tf) to set the l_md.md_tf field.
Use lwp_trapframe to access it (was process_frame but that name was changed
in a previous commit).
Kill off curpcb in acorn26.
Kill the checks for curlwp being NULL.
Move TRAP_USERMODE from arm32/fault.c to frame.h and a __PROG26 version.
Replace tests for usermode with that macro.
 1.30 02-Aug-2012  skrll Remove irqframe and replace with identical trapframe.
 1.29 01-Aug-2012  matt Move fill to between spsr and r0 so that the registers will be dword aligned.
Adjust PUSH/PULL macros accordingly.
 1.28 01-Aug-2012  matt Shrink PUSHFRAMEINSVC by 4 more instructions.
 1.27 31-Jul-2012  matt Add code to make sure the trapframe is aligned to a doubleword boundary.
 1.26 31-Jul-2012  matt Only do the SA110 user register save workaround on kernel using SA110s.
 1.25 31-Jul-2012  matt Make trapframe/irqframe an even number of words (make adjustments for
the filler word).
Improve the comments in PUSH/PULL macros.
Use the armv6+ CPS instruction if we can.
 1.24 31-Jul-2012  matt whitespace cleanup
 1.23 18-Jan-2009  bjh21 branches: 1.23.14; 1.23.22;
Now that GET_CURPCB and GET_CURCPU are generally available, use them
unconditionally rather than rolling our own (often badly) all over the
place.
 1.22 17-Jan-2009  bjh21 Clear out the vestigial support for the Simtec Hydra board. Now that we're
getting support for proper SMP ARMs, keeping non-functional support for
a seriously crippled not-really-SMP system is likely to cause more problems
than it's worth, even if it was fun for a while.
 1.21 19-Nov-2008  matt Fix __HAVE_FAST_SOFTINTS (boolean dyslexia strikes again).
Add some KASSERTS to make sure assumptions are valid.
 1.20 26-Oct-2008  matt branches: 1.20.2; 1.20.8;
Fix DO_PENDING_SOFTINTS (remove pasto, remove a branch, use movs)
pasto spotted by mjf
 1.19 07-Aug-2008  matt Only call dosoftints() is ci_intr_depth == 0
 1.18 07-Aug-2008  matt Do fast softint processing in DO_AST_AND_RESTORE_ALIGNMENT_FAULTS.
Redo the softint mask so ci_softints >> ci_cpl != 0 becomes an easy
test for work to be done.
 1.17 27-Apr-2008  matt branches: 1.17.2; 1.17.6;
Merge kernel changes in matt-armv6 to HEAD.
 1.16 12-Jan-2008  skrll branches: 1.16.6; 1.16.8; 1.16.10;
Push a switchframe in dumpsys and cpu_switchto, but as dumpsys calls
other funcs a switchframe needs to be a multiple of 8 bytes. Stash sp as
well in the switchframe to bump it to 24bytes.

Setup the switchframe appropriately in cpu_lwp_fork.

Remove savectx - nothing uses it.

All of this make gdb's life much easier when dealing with crash dumps and
live kernels.

Reviewd by chris.
 1.15 09-Mar-2007  thorpej branches: 1.15.8; 1.15.16; 1.15.20; 1.15.22; 1.15.28; 1.15.34;
Rewrite the ARM mutex implementation to be of the simple-mutex variety.
Because pre-v6 ARM lacks support for an atomic compare-and-swap, we
implement _lock_cas() as a restartable atomic squence that is checked
in the IRQ handler right before AST processing. (This is safe because,
for all practical purposes, there are no SMP pre-v6 ARM systems.)

This can serve as a model for other non-MP platforms that lack the
necessary atomic operations for mutexes (SuperH, for example).

Upshots of this change:
- kmutex_t is now down to 8 bytes on ARM; about as good as we can get.
- ARM2 systems don't have to trap and emulate SWP or SWPB for mutexes.

The acorn26 port is not updated by this commit to do the LOCK_CAS_CHECK.
That is left as an exercise for the port maintainer.

Reviewed and tested by Matt Thomas.
 1.14 27-Sep-2006  manu branches: 1.14.4;
- Document COMPAT_15 as doing nothing
- Add COMPAT_15 to all the kernel that had COMPAT_14, for the sake of coherency
- Remove the only occurences of #ifdef COMPAT_15 in the tree: for the ARM
ports, COMPAT_15 was always used in conjunction with EXEC_AOUT. Only EXEC_AOUT
matters here.

This address kern/18407
 1.13 11-Dec-2005  christos branches: 1.13.20; 1.13.22;
merge ktrace-lwp.
 1.12 11-Aug-2005  cube Change all archs that did:

#define clockframe somethingelse

to:

struct clockframe {
struct somethingelse cf_se;
};

and change access macros accordingly.

That means that, at least for that very issue, things will not go
ka-boomy if you don't have the actual definition of struct clockframe
before including systm.h.
 1.11 27-Apr-2004  scw branches: 1.11.12;
Always disable interrupts at the start of DO_AST_AND_RESTORE_ALIGNMENT_FAULTS.
This addresses #2 of port-arm/23581 by Richard Earnshaw.

Many thanks to Richard for spotting the cause of this problem.
 1.10 15-Dec-2003  scw branches: 1.10.2;
The last cpsr_all change was misguided. Just use cpsr_c wherever possible.
 1.9 01-Dec-2003  scw - For consistency, use cpsr_all instead of cpsr.
- Make sure IRQs are enabled before handling ASTs.
 1.8 14-Nov-2003  scw Slight re-org of the alignment/ast exit macro to better mimic the
original behaviour WRT cpsr/I32_bit handling.
 1.7 30-Oct-2003  scw Move the alignment fault enable/disable code into macroes to avoid
needless duplication.

Additionally, merge AST handling into the same code.

exception.S and the generic irq_dispatch.S routines have been updated
to use the macroes.

XXX: I have patches for the non-generic IRQ dispatch routines, but they
need testing by someone with hardware.
 1.6 23-Oct-2003  scw Don't drop to spl0 in cpu_switch/cpu_switchto. Do it in the idle loop
instead.

With this change, we no longer need to save the current interrupt level
in the switchframe. This is no great loss since both cpu_switch and
cpu_switchto are always called at splsched, so the process' spl is
effectively saved somewhere in the callstack.

This fixes an evbarm problem reported by Allen Briggs:

lwp gets into sa_switch -> mi_switch with newl != NULL
when it's the last element on the runqueue, so it
hits the second bit of:
if (newl == NULL) {
retval = cpu_switch(l, NULL);
} else {
remrunqueue(newl);
cpu_switchto(l, newl);
retval = 0;
}

mi_switch calls remrunqueue() and cpu_switchto()

cpu_switchto unlocks the sched lock
cpu_switchto drops CPU priority
softclock is received
schedcpu is called from softclock
schedcpu hits the first if () {} block here:
if (l->l_priority >= PUSER) {
if (l->l_stat == LSRUN &&
(l->l_flag & L_INMEM) &&
(l->l_priority / PPQ) != (l->l_usrpri / PPQ)) {
remrunqueue(l);
l->l_priority = l->l_usrpri;
setrunqueue(l);
} else
l->l_priority = l->l_usrpri;
}

Since mi_switch has already run remrunqueue, the LWP has been
removed, but it's not been put back on any queue, so the
remrunqueue panics.
 1.5 19-Oct-2002  bjh21 branches: 1.5.2; 1.5.8;
Undo recent cpu_switch register usage changes in order to decrease nathanw_sa
merge pain.
 1.4 18-Oct-2002  bjh21 In cpu_switch(), stack more registers at the start of the function,
and hence save fewer into the PCB. This should give me enough free
registers in cpu_switch to tidy things up and support MULTIPROCESSOR
properly. While we're here, make the stacked registers into an
APCS stack frame, so that DDB backtraces through cpu_switch() will
work.

This also affects cpu_fork(), which has to fabricate a switchframe and
PCB for the new process.
 1.3 14-Aug-2002  thorpej Use cpsr_c rather then cpsr_all where appropriate.
 1.2 31-Aug-2001  simonb branches: 1.2.6; 1.2.14;
Use comments around the token after a #endif.
 1.1 23-Feb-2001  reinoud branches: 1.1.4; 1.1.6;
Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.1.6.2 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.1.6.1 13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.1.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.1.4.1 23-Feb-2001  bouyer file frame.h was added on branch thorpej_scsipi on 2001-03-12 13:27:24 +0000
 1.2.14.1 30-Aug-2002  gehenna catch up with -current.
 1.2.6.2 19-Aug-2002  thorpej Partial (ARM only) sync with trunk -- significant performance improvements
for XScale-based systems.
 1.2.6.1 31-Aug-2001  thorpej file frame.h was added on branch nathanw_sa on 2002-08-19 21:39:17 +0000
 1.5.8.4 10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.5.8.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.5.8.2 18-Sep-2004  skrll Sync with HEAD.
 1.5.8.1 03-Aug-2004  skrll Sync with HEAD
 1.5.2.2 19-Oct-2002  bjh21 Re-do the following revisions, this time on a branch where they won't
interfere with the nathanw_sa merge:

syssrc/sys/arch/arm/arm32/cpuswitch.S 1.26
syssrc/sys/arch/arm/arm32/genassym.cf 1.18
syssrc/sys/arch/arm/arm32/vm_machdep.c 1.21
syssrc/sys/arch/arm/include/pcb.h 1.5

Original commit message:

In cpu_switch(), stack more registers at the start of the function,
and hence save fewer into the PCB. This should give me enough free
registers in cpu_switch to tidy things up and support MULTIPROCESSOR
properly. While we're here, make the stacked registers into an
APCS stack frame, so that DDB backtraces through cpu_switch() will
work.

This also affects cpu_fork(), which has to fabricate a switchframe and
PCB for the new process.
 1.5.2.1 19-Oct-2002  bjh21 file frame.h was added on branch bjh21-hydra on 2002-10-19 11:59:37 +0000
 1.10.2.1 29-Apr-2004  jmc Pullup rev 1.11 (requested by scw in ticket #209)

Always disable interrupts at the start of
DO_AST_AND_RESTORE_ALIGNMENT_FAULTS. PR#23581
 1.11.12.4 21-Jan-2008  yamt sync with head
 1.11.12.3 03-Sep-2007  yamt sync with head.
 1.11.12.2 30-Dec-2006  yamt sync with head.
 1.11.12.1 21-Jun-2006  yamt sync with head.
 1.13.22.1 22-Oct-2006  yamt sync with head
 1.13.20.1 18-Nov-2006  ad Sync with head.
 1.14.4.1 12-Mar-2007  rmind Sync with HEAD.
 1.15.34.1 19-Jan-2008  bouyer Sync with HEAD
 1.15.28.1 18-Feb-2008  mjf Sync with HEAD.
 1.15.22.3 23-Mar-2008  matt sync with HEAD
 1.15.22.2 30-Aug-2007  matt Move GET_CURCPU before the branch in ENABLE_ALIGNMENT_FAULTS.
 1.15.22.1 28-Aug-2007  matt Rototill to deal with curpcb/astpending/etc moves to cpu_info.
Make ENABLE_ALIGNMENTS_FAULT leave cpu_info in r4.
DO_AST_AND_RESTORE_ALIGNMENT_FAULTS takes advantage of r4 being cpu_info.
 1.15.20.1 20-Jan-2008  chris Sync to HEAD.
 1.15.16.1 28-Feb-2008  rjs Sync with HEAD.
 1.15.8.1 18-Apr-2007  thorpej Remove _lock_cas() in favor of atomic_cas_32().
 1.16.10.2 04-May-2009  yamt sync with head.
 1.16.10.1 16-May-2008  yamt sync with head.
 1.16.8.1 18-May-2008  yamt sync with head.
 1.16.6.3 17-Jan-2009  mjf Sync with HEAD.
 1.16.6.2 28-Sep-2008  mjf Sync with HEAD.
 1.16.6.1 02-Jun-2008  mjf Sync with HEAD.
 1.17.6.2 13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.17.6.1 19-Oct-2008  haad Sync with HEAD.
 1.17.2.1 18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.20.8.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.20.2.1 19-Jan-2009  skrll Sync with HEAD.
 1.23.22.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.23.14.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.23.14.1 30-Oct-2012  yamt sync with head
 1.33.2.3 03-Dec-2017  jdolecek update from HEAD
 1.33.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.33.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.35.2.2 18-May-2014  rmind sync with head
 1.35.2.1 28-Aug-2013  rmind sync with head
 1.39.6.2 28-Aug-2017  skrll Sync with HEAD
 1.39.6.1 06-Jun-2015  skrll Sync with HEAD
 1.45.6.1 10-Jun-2019  christos Sync with HEAD
 1.45.4.1 26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.4 25-Oct-2014  skrll Remove katelib.h and references to it.

{Read,Write}{Word,Byte} macros are provided in the files that still use
them. Someone(tm) should convert them to bus_space(9)
 1.3 23-Nov-2001  thorpej branches: 1.3.170;
Use <arm/cpufunc.h>, not <machine/cpufunc.h>.
 1.2 30-May-2001  bjh21 branches: 1.2.2; 1.2.8;
Move the declarations of blockio.S functions from katelib.h to a new, exciting
<arm/blockio.h>. katelib.h includes it for compatibility.
 1.1 23-Feb-2001  reinoud branches: 1.1.2; 1.1.4;
Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.1.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.1.4.1 23-Feb-2001  bouyer file katelib.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.1.2.1 21-Jun-2001  nathanw Catch up to -current.
 1.2.8.2 08-Jan-2002  nathanw Catch up to -current.
 1.2.8.1 30-May-2001  nathanw file katelib.h was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.2.2.1 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.3.170.1 03-Dec-2017  jdolecek update from HEAD
 1.36 02-Apr-2022  skrll Update to support EFI runtime outside the kernel virtual address space
by creating an EFI RT pmap that can be activated / deactivated when
required.

Adds support for EFI RT to ARM_MMU_EXTENDED (ASID) 32-bit Arm machines.

On Arm64 the usage of pmapboot_enter is reduced and the mappings are
created much later in the boot process -- now in cpu_startup_hook.
Backward compatiblity for KVA mapped RT from old bootaa64.efi is
maintained.

Adding support to other platforms should be easier as a result.
 1.35 28-Aug-2020  skrll Some KASAN fixes and tweaks

- don't access BSS variables when __md_early
- centralise the INIT_ARM_STACK_{SHIFT,SIZE} defines and create a new
INIT_ARM_TOTAL_STACK
- Only create L1PT entries in kasan_md_shadow_map_page if
arm32_kernel_vm_init hasn't created the L2PTs (and their L1PT entries)
- Add some comments to explain what's going on
 1.34 04-Jul-2020  skrll Protect with #ifdef _KERNEL
 1.33 05-Mar-2020  riastradh Revert "Include opt_diagnostic.h for DIAGNOSTIC."

This did not do what I thought it did. opt_diagnostic.h is only for
the unused _DIAGNOSTIC, which seems like an abortive attempt to
incrementally convert DIAGNOSTIC to an opt_*.h option rather than a
command-line option.
 1.32 05-Mar-2020  riastradh Include opt_diagnostic.h for DIAGNOSTIC.

...at least, in header files, which may not have already included
libkern.h.
 1.31 15-Feb-2020  skrll Various updates and improvements to cpu start up on arm/aarch64

- start sharing more code around the AP startup messaging.
- call arm_cpu_topology_set early so that ci_core_id is available for
drivers, e.g. bcm2835_intr.c
- both arm and aarch64 now have
- a static cpu_info_store array
- the same arm_cpu_{hatched,mbox}
 1.30 18-Dec-2019  riastradh branches: 1.30.2;
New function cpu_startup_hook on arm.

Called at end of cpu_startup. Can be defined in, e.g., evbarm to do
additional stuff after cpu_startup. Defined as a weak alias to a
function that does nothing, so optional.

ok jmcneill
 1.29 16-Jul-2019  skrll branches: 1.29.2;
Consistently use vaddr_t as initarm and friends return type.

Makes no difference to binaries except for aarch64 where it's required
 1.28 03-Jan-2019  skrll Start CPUs more like aarch64 by using a cpu_mpidr array (if populated)
to map MPIDRs to an index for each CPU.

Towards big.LITTLE support.
 1.27 18-Oct-2018  skrll Provide generic start code that assumes the MMU is off and caches are
disabled as per the linux booting protocol for ARMv6 and ARMv7 boards.
u-boot image type should be changed to 'linux' for correct behaviour.

The new start code builds a minimal "bootstrap" L1PT with cached access
disabled and uses the same table for all processors. AP startup is
performed in less steps and more code is written in C.

The bootstrap tables and stack are placed into an (orphaned) section
"_init_memory" which is given to uvm when it is no longer used.

Various kernels have been converted to use this code and tested. Some
boards were provided by TNF. Thanks!

The GENERIC kernel now boots on boards using the TEGRA, SUNXI and EXYNOS
kernels. The GENERIC kernel will also work on RPI2 using u-boot.

Thanks to martin@ and aymeric@ for testing on parallella and nanosoc
respectively
 1.26 05-Aug-2018  skrll Refactor code to split aarch{32,64} kernel page tables and VM setup. This
will help re-build the kernel page tables on aarch64 with correct section
mappings.
 1.25 05-Aug-2018  skrll Expose kern_vtopdiff
 1.24 03-Aug-2018  skrll Provide and use kern_vtopdiff in KERN_{VTOPHYS,PHYSTOV}. A step towards
generic arm.
 1.23 01-Aug-2018  skrll s/_ARM32_BOOT_MACHDEP_H_/_ARM32_MACHDEP_H_/ in multiple inclusion
protection.
 1.22 15-Jul-2018  maxv Retire ipkdb entirely. The option was removed from the config files
yesterday.

ok kamil christos
 1.21 20-Feb-2017  skrll branches: 1.21.12; 1.21.14;
Whitespace in comment
 1.20 20-Feb-2017  skrll Trailing whitespace
 1.19 11-Nov-2015  jmcneill branches: 1.19.2; 1.19.4;
add support for optional RB_POWERDOWN handler
 1.18 28-Mar-2014  matt branches: 1.18.6;
Change arm_cpu_mbox to volatile
 1.17 20-Oct-2012  matt branches: 1.17.2;
Increase l2pts to accomodate large memory disks.
 1.16 01-Sep-2012  martin branches: 1.16.2;
Backout previous, Matt fixed it differently
 1.15 01-Sep-2012  martin Move struct pv_addr next to struct bootmem_info into machdep.h and have
pmap.h include that.
Seems to be the least intrusive build fix; Matt: feel free to revamp.
 1.14 31-Aug-2012  matt Make cpu_reset, most of initarm and the kvm init code common.
Add MP hooks for cpu_need_resced
Add idlestck which is allocated in arm32_kvminit
 1.13 29-Aug-2012  matt Don't use locations in .data to store exception temporaries, use decidicated
space in cpu_info instead. This also moves undefined_handler_address into
cpu_info as well.
Use the new armreg* inlines for getting TPIDRPRW register.
Add MULTIPROCESSOR version of CPU_INFO_FOREACH
 1.12 29-Aug-2012  matt Since the PMC cycle counter is started in cpufunc no reason to do so here.
Use curcpu()->ci_data.cpu_cc_freq and new armreg* inlines.
 1.11 16-Aug-2012  matt Move the standard definitions of the {UND,IRQ,FIQ,ABT}_STACK_SIZE to
<arm32/machdep.h>
Move the extern for cpu_reset_address to the same file.
Add cpu_reset_address_paddr.
Kill cpu_reset_v4_MMU_disable.
if cpu_reset_address is NULL, then the MMU will be disabled.
 1.10 29-Jul-2012  matt Fix more -fno-common fallout.
Move more variables to common locations.
 1.9 14-Mar-2009  dsl branches: 1.9.12; 1.9.20;
Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.8 04-Mar-2007  christos branches: 1.8.46; 1.8.54; 1.8.60; 1.8.64;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.7 21-Feb-2002  thorpej branches: 1.7.34; 1.7.72;
map_chunk() -> pmap_map_chunk(), and move it to pmap.c
 1.6 20-Feb-2002  thorpej map_pagetable() -> pmap_link_l2pt(), and move it to pmap.c
 1.5 20-Feb-2002  thorpej Collapse map_entry{,ro,nc}() into a single pmap_map_entry() that
takes a prot and a "cacheable" indicator.
 1.4 20-Feb-2002  thorpej Rename map_section() to pmap_map_section(), move it to pmap.c, and give it
an extra argument (prot - specifies protection of the mapping).
 1.3 20-Jan-2002  thorpej Some prototype cleanup.
 1.2 07-Jan-2002  chris branches: 1.2.2; 1.2.4;
Finish up the changes to get LOOSE_PROTOTYPES working for cats.
Note that this leaves a few inconsistencies (no more than we already had though) eg initarm is now prototyped in arm32/machdep.h, however only cats currently makes use of that header.
 1.1 05-Jan-2002  chris Make some of the arm32 files build with LOOSE_PROTOTYPES not set in the makefile. Turned up a few mismatched functions. Note that this isn't all of the arm32 files. Aim will be to get arm32 kernels built with LOOSE_PROTOTYPES not set.
 1.2.4.3 17-Apr-2002  nathanw Catch up to -current.
 1.2.4.2 11-Jan-2002  nathanw More catchup.
 1.2.4.1 07-Jan-2002  nathanw file machdep.h was added on branch nathanw_sa on 2002-01-11 23:38:04 +0000
 1.2.2.4 16-Mar-2002  jdolecek Catch up with -current.
 1.2.2.3 11-Feb-2002  jdolecek Sync w/ -current.
 1.2.2.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.2.2.1 07-Jan-2002  thorpej file machdep.h was added on branch kqueue on 2002-01-10 19:37:55 +0000
 1.7.72.1 12-Mar-2007  rmind Sync with HEAD.
 1.7.34.1 03-Sep-2007  yamt sync with head.
 1.8.64.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.8.60.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.8.54.1 28-Apr-2009  skrll Sync with HEAD.
 1.8.46.1 04-May-2009  yamt sync with head.
 1.9.20.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.9.12.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.9.12.1 30-Oct-2012  yamt sync with head
 1.16.2.3 03-Dec-2017  jdolecek update from HEAD
 1.16.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.16.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.17.2.1 18-May-2014  rmind sync with head
 1.18.6.2 28-Aug-2017  skrll Sync with HEAD
 1.18.6.1 27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.19.4.1 21-Apr-2017  bouyer Sync with HEAD
 1.19.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.21.14.3 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.21.14.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.21.14.1 10-Jun-2019  christos Sync with HEAD
 1.21.12.4 18-Jan-2019  pgoyette Synch with HEAD
 1.21.12.3 20-Oct-2018  pgoyette Sync with head
 1.21.12.2 06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.21.12.1 28-Jul-2018  pgoyette Sync with HEAD
 1.29.2.1 12-Feb-2020  martin Pull up following revision(s) (requested by riastradh in ticket #705):

sys/arch/aarch64/aarch64/aarch64_machdep.c: revision 1.35
sys/stand/efiboot/efifdt.c: revision 1.20
sys/stand/efiboot/efifdt.h: revision 1.7
sys/arch/aarch64/include/machdep.h: revision 1.9
sys/stand/efiboot/efiboot.h: revision 1.11
sys/arch/arm/arm32/arm32_machdep.c: revision 1.129
sys/arch/arm/include/arm32/machdep.h: revision 1.30
sys/stand/efiboot/exec.c: revision 1.12
sys/arch/evbarm/fdt/fdt_machdep.c: revision 1.65
sys/stand/efiboot/version: revision 1.14
sys/stand/efiboot/boot.c: revision 1.19

New function cpu_startup_hook on arm.

Called at end of cpu_startup. Can be defined in, e.g., evbarm to do
additional stuff after cpu_startup. Defined as a weak alias to a
function that does nothing, so optional.
ok jmcneill

Implement rndseed support in efiboot and fdt arm.

The EFI environment variable `rndseed' specifies the path to the
random seed. It is loaded only for fdt platforms at the moment.
Since the rndseed (an rndsave_t object as defined in <sys/rndio.h>)
is 536 bytes long (for hysterical raisins), and to avoid having to
erase parts of the fdt tree, we load it into a physical page whose
address is passed in the fdt tree, rather than passing the content of
the file as an fdt node directly; the kernel then reserves the page
from uvm, and maps it into kva to call rnd_seed.

For now, the only kernel that does use efiboot with fdt is evbarm,
which knows to handle the rndseed. Any new kernels that use efiboot
with fdt must do the same; otherwise uvm may hand out the page with
the secret key on it for a normal page allocation in the kernel --
which should be OK if there are no kernel memory disclosure bugs, but
would lead to worse consequences than simply loading the seed late in
userland with /etc/rc.d/random_seed otherwise.

ok jmcneill
 1.30.2.1 29-Feb-2020  ad Sync with head.
 1.34 30-May-2021  rin Include opt_param.h for MSGBUFSIZE ifdef _KERNEL_OPT.
 1.33 10-Jul-2020  skrll branches: 1.33.6; 1.33.8;
Add support for KASAN on ARMv[67]

Thanks to maxv for many pointers and reviews.
 1.32 08-Jul-2020  skrll Define USPACE in terms of UPAGES (not the other way around) now that
NBPG is fixed at 4K
 1.31 08-Jul-2020  skrll Whitespace
 1.30 13-Feb-2020  skrll Bump the amount of KMEM allowed to 1/3rd of KVM. _ARCH_ARM_6 has a split
of 2:2 and others have a split of 3:1.

Tested by martin@ Thanks
 1.29 01-Feb-2020  skrll G/C
 1.28 18-Jan-2020  skrll Use 4K pages on ARM_MMU_EXTENDED platforms (all armv[67] except RPI) by
creating a new pool l1ttpl for the userland L1 translation table which
needs to be 8KB and 8KB aligned.

Limit the pool to maxproc and add hooks to allow the sysctl changing of
maxproc to adjust the pool.

This comes at a 5% performance penalty for build.sh -j8 kernel on a
Tegra TK1.
 1.27 19-Jun-2019  skrll branches: 1.27.2; 1.27.4;
KNF and add a comment
 1.26 04-Feb-2019  skrll Trailing whitespace
 1.25 09-Jun-2017  chs branches: 1.25.6;
if __HIDE_DELAY is defined, do not define delay() or DELAY().
needed by dtrace and ZFS.
 1.24 02-Apr-2015  matt Don't include <machine/cpu.h>
 1.23 05-Apr-2014  skrll branches: 1.23.6;
On second thoughts don't do the RPI hack for everyone.
 1.22 05-Apr-2014  skrll Drop down to 4KB pages on armv6 for now.
 1.21 30-Mar-2014  matt Make the ARM pmap use ASIDs, split TTBRs, and MP safe. This only happens for
ARMv6 or later CPUs. This means that on context switch that the TLBs and
caches no longer to cleaned/flushed. Also, eXecute Never (XN) protection has
been added so non-exec pages can not be run. Change the page size for ARMv6+
to be 8KB while allows a L1PT to be a normal page. This means that the L1PT
is not special. Use the XN support to only sync pages that are executed from.
 1.20 29-May-2013  rkujawa branches: 1.20.2;
Explicitely cast to unsigned. Avoid bugs caused by misintepreting the result as
signed.

riastradh@ suggested to change these macros into static inline functions.
But I'm still not convinced...

Obtained from Marvell, Semihalf.
 1.19 20-Mar-2013  skrll Bump MSGBUFSIZE on arm ports to 16KB.

OK matt@
 1.18 07-Dec-2012  matt FPCONTEXTSIZE is dead.
 1.17 04-Feb-2012  para branches: 1.17.6;
improve sizing of kmem_arena now that more allocations are made from it
don't enforce limits if not required

ok: riz@
 1.16 14-Jan-2011  rmind branches: 1.16.8; 1.16.12;
Retire struct user, remove sys/user.h inclusions. Note sys/user.h header
as obsolete. Remove USER_TO_UAREA/UAREA_TO_USER macros.

Various #include fixes and review by matt@.
 1.15 08-Feb-2010  joerg branches: 1.15.2;
Remove separate mb_map. The nmbclusters is computed at boot time based
on the amount of physical memory and limited by NMBCLUSTERS if present.
Architectures without direct mapping also limit it based on the kmem_map
size, which is used as backing store. On i386 and ARM, the maximum KVA
used for mbuf clusters is limited to 64MB by default.

The old default limits and limits based on GATEWAY have been removed.
key_registered_sb_max is hard-wired to a value derived from 2048
clusters.
 1.14 14-Mar-2009  dsl branches: 1.14.2;
Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.13 19-Jan-2008  chris branches: 1.13.10; 1.13.18; 1.13.24;
With the removal of IPKDB on arm, the undefined stack is only used to
bounce into SVC32 mode, there is no per-process data stored on it.

We can therefore use the undefined stack setup by the platform machdep.c
as a system wide undefined stack.

This removes the need for a per-process undefined stack, and the processor
mode switching overhead it causes in cpu_switchto.

The space freed in the USPACE is used to increase the per process kernel
stack size.
 1.12 11-Dec-2005  christos branches: 1.12.46; 1.12.50; 1.12.52; 1.12.58; 1.12.66;
merge ktrace-lwp.
 1.11 29-Dec-2004  joff branches: 1.11.10;
Bump UPAGES back down to 8KB now that real issue was found with ep93xx intr handling
 1.10 23-Dec-2004  joff bump default U-area size from 8KB to 64KB, 8KB is too little to even successfully boot a tsarm SBC
 1.9 24-Mar-2002  thorpej branches: 1.9.12;
* arm_byte_to_page() -> arm_btop()
* arm_page_to_byte() -> arm_ptob()
 1.8 26-Feb-2002  simonb Purge CLSIZE, CLSIZELOG2 and MCLOFSET.
Be consistant in the way that MSIZE, MCLSHIFT, MCLBYTES and NMBCLUSTERS
are defined.
Remove old VM constants from cesfic port.
Bump MSIZE to 256 on mipsco (the only one that wasn't already 256).
 1.7 22-Feb-2002  briggs Bumb NMBCLUSTER defaults to 2048 for GATEWAY and 1024 otherwise. These
match current powerpc defaults and are more reasonable for the current era.
 1.6 11-Aug-2001  chris branches: 1.6.6;
Add arm_trunc_page, similair to trunc_page but using a hardcoded PGOFSET.
 1.5 07-Aug-2001  bjh21 Use <arm/param.h> to get shared definitions.
 1.4 30-May-2001  mrg branches: 1.4.2;
use _KERNEL_OPT
 1.3 04-Mar-2001  matt branches: 1.3.2; 1.3.4;
Only define MACHINE & MACHINE_ARCH in port-dependent param.h.
Everything else (since it's common) is from <arm/arm32/param.h>
 1.2 24-Feb-2001  toshii Make hpcarm kernel compile again.
 1.1 23-Feb-2001  reinoud Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.3.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.3.4.1 04-Mar-2001  bouyer file param.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.3.2.1 21-Jun-2001  nathanw Catch up to -current.
 1.4.2.3 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.4.2.2 16-Mar-2002  jdolecek Catch up with -current.
 1.4.2.1 25-Aug-2001  thorpej Merge Aug 24 -current into the kqueue branch.
 1.6.6.3 01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.6.6.2 28-Feb-2002  nathanw Catch up to -current.
 1.6.6.1 11-Aug-2001  nathanw file param.h was added on branch nathanw_sa on 2002-02-28 04:07:34 +0000
 1.9.12.1 17-Jan-2005  skrll Sync with HEAD.
 1.11.10.1 21-Jan-2008  yamt sync with head
 1.12.66.1 20-Jan-2008  bouyer Sync with HEAD
 1.12.58.1 18-Feb-2008  mjf Sync with HEAD.
 1.12.52.1 23-Mar-2008  matt sync with HEAD
 1.12.50.1 20-Jan-2008  chris Sync to HEAD.
 1.12.46.1 28-Feb-2008  rjs Sync with HEAD.
 1.13.24.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.13.18.1 28-Apr-2009  skrll Sync with HEAD.
 1.13.10.2 11-Mar-2010  yamt sync with head
 1.13.10.1 04-May-2009  yamt sync with head.
 1.14.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.15.2.1 05-Mar-2011  rmind sync with head
 1.16.12.1 18-Feb-2012  mrg merge to -current.
 1.16.8.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.16.8.2 16-Jan-2013  yamt sync with (a bit old) head
 1.16.8.1 17-Apr-2012  yamt sync with head
 1.17.6.4 03-Dec-2017  jdolecek update from HEAD
 1.17.6.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.17.6.2 23-Jun-2013  tls resync from head
 1.17.6.1 25-Feb-2013  tls resync with head
 1.20.2.1 18-May-2014  rmind sync with head
 1.23.6.2 28-Aug-2017  skrll Sync with HEAD
 1.23.6.1 06-Apr-2015  skrll Sync with HEAD
 1.25.6.3 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.25.6.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.25.6.1 10-Jun-2019  christos Sync with HEAD
 1.27.4.2 29-Feb-2020  ad Sync with head.
 1.27.4.1 25-Jan-2020  ad Sync with head.
 1.27.2.1 07-Jun-2020  martin Pull up following revision(s) (requested by skrll in ticket #951):

sys/arch/arm/include/arm32/param.h: revision 1.30

Bump the amount of KMEM allowed to 1/3rd of KVM. _ARCH_ARM_6 has a split
of 2:2 and others have a split of 3:1.

Tested by martin@ Thanks
 1.33.8.1 31-May-2021  cjep sync with head
 1.33.6.1 17-Jun-2021  thorpej Sync w/ HEAD.
 1.4 03-Sep-2001  matt branches: 1.4.6;
Add a merged <pcb.h> for arm26/arm32.
 1.3 27-Aug-2001  chris Remove unused entries from the pcb. This is with a long term view of merging the arm26 and arm32 pcb's.
 1.2 28-Feb-2001  bjh21 branches: 1.2.4; 1.2.6;
PCB convergence, part the first:
Move the pointer to the current user trapframe from struct mdproc to struct
pcb (as on arm26). Only tested by compiling kernels on arm32 and
hpcarm (dnard seems to be incomplete anyway). Someone should try running one.
 1.1 23-Feb-2001  reinoud Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.2.6.1 13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.2.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.2.4.1 28-Feb-2001  bouyer file pcb.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.4.6.2 03-Sep-2001  matt Add a merged <pcb.h> for arm26/arm32.
 1.4.6.1 03-Sep-2001  matt file pcb.h was added on branch nathanw_sa on 2001-09-03 19:20:29 +0000
 1.178 09-Oct-2025  skrll Add the beginnings of a GENERIC_V5 kernel that targets armv5 boards and
uses FDT.

In this first iteration some support is added for OLinuXino boards.

Thanks to Yuri Honegger for doing the vast majority of the work.
 1.177 12-Oct-2023  skrll Fix non-DIAGNOSTIC builds
 1.176 02-Aug-2023  skrll No need to define cpu_{,set}_tlb_info here - just use the
sys/uvm/pmap/pmap_tlb.h versions.
 1.175 24-Apr-2023  martin Fix DEVMAP_FLAGS, patch from Nick.
 1.174 20-Apr-2023  skrll Provide a shared pmap_devmap implementation and convert all pmap_devmap
arrays to use DEVMAP_ENTRY{,_END}
 1.173 02-Apr-2022  skrll branches: 1.173.4;
Update to support EFI runtime outside the kernel virtual address space
by creating an EFI RT pmap that can be activated / deactivated when
required.

Adds support for EFI RT to ARM_MMU_EXTENDED (ASID) 32-bit Arm machines.

On Arm64 the usage of pmapboot_enter is reduced and the mappings are
created much later in the boot process -- now in cpu_startup_hook.
Backward compatiblity for KVA mapped RT from old bootaa64.efi is
maintained.

Adding support to other platforms should be easier as a result.
 1.172 15-Jan-2022  skrll Remove unnecessary brackets
 1.171 16-Oct-2021  skrll pm_remove_all is a shared field so move it out the #ifdefs
 1.170 04-May-2021  skrll Provide pte_{value,valid_p}
 1.169 30-Oct-2020  skrll branches: 1.169.6;
Retire arm_[di]sb in favour of the isb() and dsb(sy) macro invocations.
 1.168 03-Jul-2020  skrll Consistency...#define<tab>
 1.167 18-Apr-2020  skrll PMAP_DEBUG has been deleted on arm
 1.166 29-Mar-2020  skrll branches: 1.166.2;
Don't define pt_entry_t if _LOCORE

Reported by Patrick Welche
 1.165 29-Mar-2020  skrll Provide a pt_entry_t and PRIxPTE
 1.164 14-Mar-2020  ad pmap_remove_all(): Return a boolean value to indicate the behaviour. If
true, all mappings have been removed, the pmap is totally cleared out, and
UVM can then avoid doing the work to call pmap_remove() for each map entry.
If false, either nothing has been done, or some helpful arch-specific voodoo
has taken place.
 1.163 24-Feb-2020  ad Adjust for UVM locking changes
 1.162 23-Feb-2020  skrll G/C l1pte_pgindex
 1.161 05-Feb-2020  skrll Fix the armv[67] memory attributes for uncached memory. Previously it was
mapped as strongly-ordered which meant that unaligned accesses would fault.

armv7_generic_bs_map now maps pages with PMAP_DEV which is treated as SO

bus_dma continues to use PMAP_NOCACHE as appropriate, but this now get
mapped to the correct memory attribute bits for armv[67]

DEVMAP_ENTRY usees a new flag PTE_DEV.

The workaround for the unaligned access faults is now removed.

XXX Other armv[67] boards bus_space implementations should be checked.
XXX There is scope to reduce the difference to aarch64
 1.160 20-Jan-2020  skrll s/_ARM_ARCH_6/ARM_MMU_EXTENDED/ in the #ifdef for the recent 4k pages
change
 1.159 18-Jan-2020  skrll Use 4K pages on ARM_MMU_EXTENDED platforms (all armv[67] except RPI) by
creating a new pool l1ttpl for the userland L1 translation table which
needs to be 8KB and 8KB aligned.

Limit the pool to maxproc and add hooks to allow the sysctl changing of
maxproc to adjust the pool.

This comes at a 5% performance penalty for build.sh -j8 kernel on a
Tegra TK1.
 1.158 12-Jan-2020  christos fix -Wsign-compare because module tests trigger it.
 1.157 10-Dec-2019  ad branches: 1.157.2;
pg->phys_addr -> VM_PAGE_TO_PHYS(pg)
 1.156 18-Oct-2018  skrll branches: 1.156.4;
Provide generic start code that assumes the MMU is off and caches are
disabled as per the linux booting protocol for ARMv6 and ARMv7 boards.
u-boot image type should be changed to 'linux' for correct behaviour.

The new start code builds a minimal "bootstrap" L1PT with cached access
disabled and uses the same table for all processors. AP startup is
performed in less steps and more code is written in C.

The bootstrap tables and stack are placed into an (orphaned) section
"_init_memory" which is given to uvm when it is no longer used.

Various kernels have been converted to use this code and tested. Some
boards were provided by TNF. Thanks!

The GENERIC kernel now boots on boards using the TEGRA, SUNXI and EXYNOS
kernels. The GENERIC kernel will also work on RPI2 using u-boot.

Thanks to martin@ and aymeric@ for testing on parallella and nanosoc
respectively
 1.155 01-Apr-2018  ryo branches: 1.155.2;
Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)
 1.154 24-Jan-2018  skrll branches: 1.154.2;
Remove port-acorn26

OK core@
 1.153 22-Oct-2017  skrll Centralise defines for DEVMAP_{ALIGN,SIZE,ENTRY,ENTRY_END}
 1.152 29-Aug-2017  skrll Revert the *_PROT_RO_* define changes and do all the work in the *_PROT()
macros for RO kernel pages.

cats boots again - no idea how it slipped through my testing previously
 1.151 11-Jul-2017  skrll Fix up L{1_S,2_L,2_S}_PROT for recent changes to the
L{1_S,2_L,2_S}_PROT_RO* values.
 1.150 06-Jul-2017  skrll KNF two comments
 1.149 06-Jul-2017  skrll Re-define the L*_PROT_RO for MMUs that don't really support RO mapping
and adjust l2pte_set_{writeable,readony} to the new values.

This allows RO mappings for MMUs that actually support them.
 1.148 06-Jul-2017  skrll Trailing whitespace
 1.147 25-May-2017  skrll Use the define name PMAP_HWPAGEWALKER and not PMAP_TLB_HWPAGEWALKER
 1.146 25-May-2017  skrll Spell ARM_MMU_EXTENDED correctly
 1.145 23-Feb-2017  skrll Fixup the compile time decisions around PMAP_{INCLUDE,NEEDS}_PTE_SYNC and
fix the options for xscale boards which require the code in
pmap_l2ptp_ctor marked as #ifndef PMAP_INCLUDE_PTE_SYNC.

Fix the typo (pte -> opte) in this code block and consistently use opte
elsewhere.

PR/51990: Regression data_abort_handler: data_aborts fsr=0x406 far=0xbfffeff5 on copyout in init
 1.144 14-Jul-2016  skrll branches: 1.144.2; 1.144.4;
Spell PMAP_TLB_NEED_SHOOTDOWN correctly
 1.143 11-Nov-2015  skrll Support pmap_pv_track and friends
 1.142 09-Sep-2015  skrll Make L2_S_CACHE_MASK_armv6n consistent with other *_CACHE_MASK_armv6n
 1.141 01-Jun-2015  matt pmap_directbase is a failed experiment, nuke it.
 1.140 30-May-2015  matt Support directmapped systems with >1GB that start memory at 0x80000000.
 1.139 12-May-2015  skrll Add some KASSERTs to catch similar bugs to the cnptes/nptes one
 1.138 25-Feb-2015  joerg Improve inline asm around dsb/dmb/isb:
- always use volatile and mark them as memory barrier
- use the common version from locore.h in all places not included from
userland
 1.137 08-Nov-2014  skrll branches: 1.137.2;
Whitespace
 1.136 29-Oct-2014  skrll Sprinkle #include "opt_multiprocessor.h"
 1.135 31-Jul-2014  skrll branches: 1.135.2;
Trailing whitespace
 1.134 27-Jul-2014  skrll More fixes as a step towards ARM_MMU_EXTENDED on RPI.

- don't set CPU_CONTROL_SYST_ENABLE in arm11x6_setup for ARM_MMU_EXTENDED

- Use the new MMU defines for V6N

- pull in arm/cpuconf.h in vmparam s that VM_MAXUSER_ADDRESS gets set
correctly.
 1.133 15-Jun-2014  ozaki-r Fix macro name; PMAP_TLB_NEED_SHOOTDOWN => PMAP_NEED_TLB_SHOOTDOWN
 1.132 16-Apr-2014  matt Make to flush the secondary cache when syncing PTEs when the Sheeva L2 cache
is used.
 1.131 11-Apr-2014  matt Add a kernel for the CUBIETRUCK (CUBIEBOARD3). Allow direct mapping of all
memory (but for now allow the memory mapped above KERNEL_BASE to used for
poolpages).
 1.130 04-Apr-2014  matt branches: 1.130.2;
For ARM_MMU_V6C enable supersections
 1.129 31-Mar-2014  skrll Deal with large page mappings in l2pte_set.

Now the RPI can get passed setting the new TTB.

ok matt@
 1.128 31-Mar-2014  matt For ARM_MMU_EXTENDED, a KERNEL_BASE >= 0x80000000 is ok but a
VM_USER_MAXADDRESS can not be more than 0x80000000 - PAGE_SIZE.
 1.127 31-Mar-2014  matt Add a missing 0 to an #error
 1.126 30-Mar-2014  matt Make the ARM pmap use ASIDs, split TTBRs, and MP safe. This only happens for
ARMv6 or later CPUs. This means that on context switch that the TLBs and
caches no longer to cleaned/flushed. Also, eXecute Never (XN) protection has
been added so non-exec pages can not be run. Change the page size for ARMv6+
to be 8KB while allows a L1PT to be a normal page. This means that the L1PT
is not special. Use the XN support to only sync pages that are executed from.
 1.125 26-Feb-2014  matt Remove duplicate PMAP_PTE
 1.124 26-Feb-2014  matt Replace 1000 with PAGE_SIZE
 1.123 26-Feb-2014  matt Add PMAP_PTE flag. (map page so it can be used as a PDE or PTE page)
 1.122 18-Aug-2013  matt struct pcb; for a function prototype.
 1.121 03-Jul-2013  matt Add l2pte_set and l2pte_reset inlines to set/reset a pte. These will be
used to support > 4KB pages sizes.
Don't use >> L1_S_SHIFT, use L1_IDX() instead.
 1.120 12-Jun-2013  matt branches: 1.120.2;
Add a ARM_HAS_VBAR option which forces the use of the VBAR register. This
allows much code to deal with vector_page mappings to be eliminated. On a
BEAGLEBONE kernel, this saves 8KB of text and instructions that never have
to be executed. (The PJ4B has VBAR but doesn't implement the security
extensions it is part of so a method was needed to allow it use VBAR with
relying on the default test for the security extensions.)
 1.119 12-Dec-2012  matt Protect more definitions with #ifndef _LOCORE
 1.118 12-Dec-2012  matt Enable direct-mapped poolpages if __HAVE_MM_MD_DIRECT_MAPPED_PHYS is defined.
 1.117 10-Dec-2012  matt Add b{zero,copy}_page{,_vfp} and physical_end
 1.116 10-Dec-2012  matt Add pmap_{copy,zero}_page_vfp
 1.115 12-Nov-2012  skrll C99 types
 1.114 17-Oct-2012  matt Add PMAP_MAP_POOLPAGE / PMAP_UNMAP_POOLPAGE if PMAP_NEED_ALLOC_POOLPAGE is
defined.
 1.113 17-Oct-2012  matt Add a PMAP_NEEDS_ALLOC_POOLPAGE / PMAP_ALLOC_POOLPAGE hook so systems can
allocate pool pages from a specific VM freelist.
 1.112 22-Sep-2012  matt Don't use an asm in pmap_activate to update the TTBR, use cpu_setttb instead
but add a second argument to it to indicate whether the TLB/caches need to be
flushed. Default cortex to pmap_needs_fixup = 1. But check the MMFR3 field
to see if the fixed can be skipped.
Use a cf_flag bit 0 to indicate whether the A9 L2 cache should disable (bit 0 = 1)
or enabeld (bit = 0).

With these changes, the A9 MMU can use traverse caches to do MMU tablewalks
Also, make sure all memory has the shareable bit for the A9.
 1.111 11-Sep-2012  matt branches: 1.111.2;
Fix the CACHE_MASKs for armv6 to include TEX and S bits.
Fix a comment in pte.h
 1.110 07-Sep-2012  matt Switch cortex_a9 back to need_ptesync = 1
Add code to disable the L2 cache on cortex-a9 (for now).
Add evcnt for all the fault types.
Move cache info in a structure and have one for the pcache and one for scache.
Probe L1/L2 caches properly for ARMv7
 1.109 06-Sep-2012  matt Alas, Cortex-A8 can't TLB walk out of their caches so they need to sync each PTE.
 1.108 06-Sep-2012  matt Enable "shareable" access to the page table for armv7. PTE_SYNC only does
a DSB now on an armv7 cpu and no longer needs to flush the cache line to ram.
 1.107 02-Sep-2012  matt Make bus_dma understand supersections.
 1.106 01-Sep-2012  martin Backout previous, Matt fixed it differently
 1.105 01-Sep-2012  martin Move struct pv_addr next to struct bootmem_info into machdep.h and have
pmap.h include that.
Seems to be the least intrusive build fix; Matt: feel free to revamp.
 1.104 30-Aug-2012  matt Add a l1pte_supersection_p macro.
 1.103 20-Aug-2012  matt Add support for mapping SuperSection on armv6 and armv7. These always
a domain of 0 so move the kernel from domain 15 to domain 0.
 1.102 29-Jul-2012  matt Fix more -fno-common fallout.
Move more variables to common locations.
 1.101 28-Jan-2012  matt branches: 1.101.4;
Nuke the simplelock from vm_page_md
 1.100 12-Jun-2011  rmind branches: 1.100.2; 1.100.6;
Welcome to 5.99.53! Merge rmind-uvmplock branch:

- Reorganize locking in UVM and provide extra serialisation for pmap(9).
New lock order: [vmpage-owner-lock] -> pmap-lock.

- Simplify locking in some pmap(9) modules by removing P->V locking.

- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share
the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).

- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner.
Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.

- Unify /dev/mem et al in MI code and provide required locking (removes
kernel-lock on some ports). Also, avoid cache-aliasing issues.

Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches
formed the core changes of this branch.
 1.99 10-Mar-2011  bsh branches: 1.99.2;
Preliminary ARM11 MPCore support.

I have confirmed this commit doesn't affect existing evbarm kernels by
comparing binaries.
 1.98 28-Feb-2011  macallan implement arm32_pmap_flags() to allow mappings with write buffering enabled,
mostly for video memory
Tested on shark
 1.97 14-Nov-2010  uebayasi branches: 1.97.2; 1.97.4;
Move struct vm_page_md definition from vmparam.h to pmap.h, because
it's used only by pmap. vmparam.h has definitions for wider
audience.

All GENERIC kernels build tested, except ia64.

powerpc/include/booke/vmparam.h has one too, but it has no pmap.h,
so it's left as is.
 1.96 02-Nov-2010  uebayasi Fix build of evbarm.
 1.95 16-Jun-2010  jmcneill PR port-arm/43299: Support added for igepv2/cortexa8/omap3530

Apply patch from PR, with build fixes. ok skrll, matt
 1.94 27-Dec-2009  uebayasi branches: 1.94.2; 1.94.4;
Add write-through cache work-around for ARM11 as well as ARM9/ARM10. Analyzed
& tested on i.MX35 with help from Tsubai Masanari.
 1.93 22-Oct-2009  rmind Simplify pmap_remove() a little by avoiding pmap_do_remove() layer, since
possibility to skip wired mappings is not needed anymore. Apart from that,
no functional differences are intended.
 1.92 19-Aug-2009  thorpej Use PMAP_ENABLE_PMAP_KMPAGE to enable PMAP_KMPAGE. We still want the bit
defined in the MI space, not in an MD header.
 1.91 19-Aug-2009  thorpej Rationalize the definition of PMAP_KMPAGE.
 1.90 30-Dec-2008  matt Reclaim PVF_KNC in VIPT to be PVF_MULTCLR (page has multiple colors).
Track when a page is mapping in multiple colors and deal with the ramifications.
When a page's MOD attribute is cleared, clean it from the cache.
Fix a logic inversion.

With these changes, the TI SDP2420 H4 board can successfully natively build a
TISDP2420 kernel.
 1.89 09-Dec-2008  pooka Make pmap_kernel() a MI macro for struct pmap *kernel_pmap_ptr,
which is now the "API" provided by the pmap module. pmap_kernel()
remains as the syntactic sugar.

Bonus cosmetics round: move all the pmap_t pointer typedefs into
uvm_pmap.h.

Thanks to Greg Oster for providing cpu muscle for doing test builds.
 1.88 13-Aug-2008  matt branches: 1.88.2; 1.88.10;
Fix a few more corner cases. Always KMPAGE or pages with unmanaged writeable
kernel mappings as modified. Only ever set DIRTY bit is DMOD is true and
NC is false. Don't modify unmanaged mappings in pmap_clearbit.
 1.87 21-Jul-2008  matt Add PMAP_KMPAGE defintion (forgotten commit). Also add PVF_DIRTY which will
be used by an update pmap.c shortly (to note what pages may have dirty
cache lines).
 1.86 16-Jul-2008  matt Revamp bookkeeping for pages entered by pmap_kenter_pa. Keep track of them
on pvlists so that the cacheability can be properly tracked.
 1.85 27-Apr-2008  matt branches: 1.85.2; 1.85.4; 1.85.6;
Merge kernel changes in matt-armv6 to HEAD.
 1.84 01-Jan-2008  chris branches: 1.84.6; 1.84.8; 1.84.10;
Add support for kcore headers to arm32 kernel core dumps.

The kcore code is based on i386's kcore header handling.

Having an asm stub for dumpsys, to dump the registers onto the stack, and
then call the C code to do the memory dump is based on amd64's core dump
code.

This allows a successful core dump on cats.

Part of fixing PR cats/18026.
 1.83 17-Oct-2007  garbled branches: 1.83.2; 1.83.8;
Merge the ppcoea-renovation branch to HEAD.

This branch was a major cleanup and rototill of many of the various OEA
cpu based PPC ports that focused on sharing as much code as possible
between the various ports to eliminate near-identical copies of files in
every tree. Additionally there is a new PIC system that unifies the
interface to interrupt code for all different OEA ppc arches. The work
for this branch was done by a variety of people, too long to list here.

TODO:
bebox still needs work to complete the transition to -renovation.
ofppc still needs a bunch of work, which I will be looking at.
ev64260 still needs to be renovated
amigappc was not attempted.

NOTES:
pmppc was removed as an arch, and moved to a evbppc target.
 1.82 15-Sep-2007  scw ARM cpu_switchto() has been partially broken since yamt-idlelwp was merged
as its cache/tlb management smarts relied too heavily on pre-merge context-
switch behaviour. See PR kern/36548 for one manifestation of the breakage.

To address this:
- Ditch the shadow pmap variables in the PCB (pagedir, l1vec, dacr, cstate)
as it was too easy for them to get out of sync with the pmap.
- Re-write (and fix) the convoluted cpuswitch.S cache/tlb ASM code in C.
It's only slightly less efficient, but is much more readable/maintainable.
- Document cpufuncs.cf_context_switch() as being C-callable.
- pmap_activate() becomes a no-op if the lwp's vmspace is already active.
(Good performance win, since pmap_activate() is now invoked on every
context-switch, even though ARM's cpu_switchto() already does all the
grunt work)

XXX: Some CPU-specific armXX_context_switch() implementations (arm67,
arm7tdmi, arm8) always flush the I+D caches. This should not be necessary.
Someone with access to hardware (acorn32?) needs to deal with this.
 1.81 22-Feb-2007  thorpej branches: 1.81.4; 1.81.12; 1.81.18; 1.81.20; 1.81.22; 1.81.24;
TRUE -> true, FALSE -> false
 1.80 21-Feb-2007  thorpej Replace the Mach-derived boolean_t type with the C99 bool type. A
future commit will replace use of TRUE and FALSE with true and false.
 1.79 24-Dec-2005  perry branches: 1.79.26; 1.79.30;
Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
 1.78 10-Dec-2005  scw Implement pmap_collect() for arm32.
 1.77 13-Oct-2003  scw branches: 1.77.16;
On Xscale, define PMAP_UAREA() and use it to tweak uarea mappings so
they use the mini D$.

This results in a small performance boost on xscale platforms, since
flushing the main cache on a context switch won't affect the kernel
stack/pcb.
 1.76 06-Sep-2003  rearnsha Add support for ARM10 class processors.
 1.75 18-Jun-2003  bsh branches: 1.75.2;
protect with #ifndef _LOCORE so that assembler codes can share
definitions in this file such as PMAP_DOMAIN_KERNEL.
 1.74 15-Jun-2003  thorpej Add another devmap routine that allows bootstrap code to register
a devmap reflecting mappings that are created by really early
bootstrap code before pmap_devmap_bootstrap() is called.
 1.73 15-Jun-2003  thorpej Replace the ad-hoc "section mapping table" for static device mappings
with a more generic "devmap" structure that can also handle mappings
made with large and small pages. Add new pmap routines to enter these
mappings during bootstrap (and "remember" the devmap), and routines to
look up the static mappings once the kernel is running.
 1.72 21-May-2003  thorpej Remove #ifdefs supporting the old pmap, switching fully to the new.
 1.71 03-May-2003  thorpej Reduce differences between ARM32_NEW_VM_LAYOUT and not; always pass
the start and end of the kernel managed virtual address space to
pmap_bootstrap() in the new pmap.
 1.70 28-Apr-2003  scw Fix the bug reported by Richard Earnshaw in port-arm32/21349.

Make sure to check the access permissions before doing
ref/mod/domain fixups. This is particularly important
on machines with ARM_VECTORS_LOW.
 1.69 22-Apr-2003  thorpej Some ARM32_PMAP_NEW-related cleanup:
* Define a new "MMU type", ARM_MMU_SA1. While the SA-1's MMU is basically
compatible with the generic, the SA-1 cache does not have a write-through
mode, and it is useful to know have an indication of this.
* Add a new PMAP_NEEDS_PTE_SYNC indicator, and try to evaluate it at
compile time. We evaluate it like so:
- If SA-1-style MMU is the only type configured -> 1
- If SA-1-style MMU is not configured -> 0
- Otherwise, defer to a run-time variable.
If PMAP_NEEDS_PTE_SYNC might evaluate to true (SA-1 only or run-time
check), then we also define PMAP_INCLUDE_PTE_SYNC so that e.g. assembly
code can include the necessary run-time support. PMAP_INCLUDE_PTE_SYNC
largely replaces the ARM32_PMAP_NEEDS_PTE_SYNC manual setting Steve
included with the original new pmap.
* In the new pmap, make pmap_pte_init_generic() check to see if the CPU
has a write-back cache. If so, init the PT cache mode to C=1,B=0 to get
write-through mode. Otherwise, init the PT cache mode to C=1,B=1.
* Add a new pmap_pte_init_arm8(). Old pmap, same as generic. New pmap,
sets page table cacheability to 0 (ARM8 has a write-back cache, but
flushing it is quite expensive).
* In the new pmap, make pmap_pte_init_arm9() reset the PT cache mode to
C=1,B=0, since the write-back check in generic gets it wrong for ARM9,
since we use write-through mode all the time on ARM9 right now. (What
this really tells me is that the test for write-through cache is less
than perfect, but we can fix that later.)
* Add a new pmap_pte_init_sa1(). Old pmap, same as generic. New pmap,
does generic initialization, then resets page table cache mode to
C=1,B=1, since C=1,B=0 does not produce write-through on the SA-1.
 1.68 18-Apr-2003  thorpej Gah, fix *another* typo.
 1.67 18-Apr-2003  thorpej Oops, fix typo.
 1.66 18-Apr-2003  thorpej Define two new macros to test if a mapping is mappable with an L1 Section
mapping or an L2 Large Page mapping.
 1.65 18-Apr-2003  scw Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.

Some features of the new pmap are:

- It allows L1 descriptor tables to be shared efficiently between
multiple processes. A typical "maxusers 32" kernel, where NPROC is set
to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
with just 4 L1s. This completely solves the problem of running out
of contiguous physical memory for allocating new L1s at runtime on a
busy system.

- Much improved cache/TLB management "smarts". This change ripples
out to encompass the low-level context switch code, which is also
much smarter about when to flush the cache/TLB, and when not to.

- Faster allocation of L2 page tables and associated metadata thanks,
in part, to the pool_cache enhancements recently contributed to
NetBSD by Wasabi Systems.

- Faster VM space teardown due to accurate referenced tracking of L2
page tables.

- Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.
 1.64 09-Apr-2003  thorpej Add the ability for pool caches to cache the physical address of
objects. Clients of the pool_cache API must consistently use
the "paddr" variants or not, otherwise behavior is undefined.

Enable this on Alpha, ARM, MIPS, and x86. Other platforms must
define POOL_VTOPHYS() in the appropriate manner in order to enable
the feature.

Part 1 of a series of simple patches contributed by Wasabi Systems
to improve network performance.
 1.63 23-Mar-2003  chris Garbage collect pmap_map, the last (and only?) use has been removed.
 1.62 12-Nov-2002  chris Fix PTE_FLUSH_RANGE macro, it should have had a cnt parameter.
 1.61 22-Sep-2002  chs it really helps to get the stub right before cutting + pasting it 27 times.
alas, I did not. doh.
 1.60 22-Sep-2002  chs add pmap_remove_all() hook (empty on most platforms so far).
 1.59 24-Aug-2002  thorpej Define macros describing the 4M super-sections that our pmap
actually uses (since we allocate PT pages in 4K chunks, rather
than 1K chunks).
 1.58 24-Aug-2002  thorpej Enable caching on kernel and user page tables. This saves having
to do uncached memory access during VM operations (which can be
quite expensive on some CPUs).

We currently write-back PTEs as soon as they're modified; there is
some room for optimization (to write them back in larger chunks).
For PTEs in the APTE space (i.e. PTEs for pmaps that describe another
process's address space), PTEs must also be evicted from the cache
complete (PTEs in PTE space will be evicted durint a context switch).
 1.57 22-Aug-2002  thorpej * Add PTE_SYNC() and PTE_SYNC_RANGE() macros. These don't actually do
anything yet.
* Use PTE_SYNC() and PTE_SYNC_RANGE() in some obvious places, i.e.
where vtopte() is used.
 1.56 09-Aug-2002  thorpej Add a PVF_EXEC -- we don't use it yet, though.
 1.55 31-Jul-2002  thorpej Overhaul how DMA ranges work in the ARM bus_dma implementation.

A new "arm32_dma_range" structure now describes a DMA window, with
a system address base, bus address base, and length. In addition to
providing info about which memory regions are legal for DMA, the new
structure provides address translation support, as well.

As before, if a tag does not list any ranges, then all addresses are
considered valid, and no DMA address translation is performed.

This allows us to remove a large chunk of code which was duplicated and
tweaked slightly (to do the address translation) from the stock ARM
bus_dma in the XScale IOP and ARM Integrator ports.

Test compiled on all ARM platforms, test booted on Intel IQ80321 and Shark.
 1.54 31-Jul-2002  thorpej Move the calls to uvm_page_physload() out of pmap_bootstrap() and
into platform-specific initialization code, giving platform-specific
code control over which free list a given chunk of memory gets put
onto.

Changes are essentially mechanical. Test compiled for all ARM
platforms, test booted on Intel IQ80321 and Shark.

Discussed some time ago on port-arm.
 1.53 12-Apr-2002  thorpej branches: 1.53.2;
Default all XScale core processors to the read/write-allocate write-back
cache mode. Add a new XSCALE_CACHE_WRITE_THROUGH option for people who
are paranoid about the cache-related errata (you *do* have to line up
the planets correctly to trip them, but having the option is useful).
 1.52 12-Apr-2002  thorpej Centralize ARM CPU configuration information by adding a new header
file, <arm/cpuconf.h>, which pulls in "opt_cputypes.h" and then defines
the following:
* CPU_NTYPES -- now many CPU types are configured into the kernel. What
you really want to know is "== 1" or "> 1".
* Defines ARM_ARCH_2, ARM_ARCH_3, ARM_ARCH_4, ARM_ARCH_5, depending
on which ARM architecture versions are configured (based on CPU_*
options). Also defines ARM_NARCH to determins how many architecture
versions are configured.
* Defines ARM_MMU_MEMC, ARM_MMU_GENERIC, ARM_MMU_XSCALE depending on
which classes of ARM MMUs are configured into the kernel, and ARM_NMMUS
to determine how many MMU classes are configured.

Remove the needless inclusion of "opt_cputypes.h" in several places.
Convert remaining users to <arm/cpuconf.h>.
 1.51 10-Apr-2002  thorpej Add separate pmap_{zero,copy}_page() functions for generic ARM
vs. XScale. Use the mini-data cache for the destination on XScale,
thus saving tossing out 4K of possible-useful data from the main
data cache each time.

This significantly improves every test in lmbench.
 1.50 09-Apr-2002  thorpej * Move the code that cleans the XScale mini-data cache into its
own function.
* Add a new function which sets up the mini-data cache clean area
properly.
 1.49 09-Apr-2002  thorpej * Split pte_cache_mode into pte_l1_s_cache_mode, pte_l2_l_cache_mode,
and pte_l2_s_cache_mode. The cache-meaningful bits are different
for these descriptor types on some processor models.
* Add pte_*_cache_mask, corresponding to each above, which has a mask
of the cache-meangful bits, and define those for generic and XScale
MMU classes. Note, the L2_S_CACHE_MASK_xscale definition requires
use of the Extended Small Page L2 descriptor (the "X" bit overlaps
with AP bits otherwise).
 1.48 09-Apr-2002  thorpej Use the "Extended Small Page" L2 descriptor type on XScale (note
this means that there are no 1K sub-pages on XScale, but we don't
use them anyway).
 1.47 09-Apr-2002  thorpej Remove the implementation-defined bits from L1_S_PROTO_xscale and
L1_C_PROTO_xscale; while they are supposed to be set to 1 on generic
ARM MMUs (according to the SA-110 and ARM920T manuals), they are listed
as "should be zero" in the i80200 manual.
 1.46 09-Apr-2002  thorpej Define 2 classes of ARM MMUs:
1. Generic (compatible with ARM6)
1. XScale (can be used as generic, but also has certainly nifty extensions).

Define abstract PTE bit defintions for each MMU class. If only one MMU
class is configured into the kernel (based on CPU_* options), then we
get the constants for that MMU class. Otherwise we indirect through
varaibles set up via set_cpufuncs().

XXX The XScale bits are currently the same as the generic bits. Baby steps.
 1.45 09-Apr-2002  thorpej Use abstract names for the protection and PTE type bits in
L1 and L2 descriptors. This will allow us to support different
PTE layouts that enable the use of extensions on different
processor models.
 1.44 05-Apr-2002  thorpej * Rewrite the 32-bit ARM pte.h based on the ARM architecture manual.
Significant cleanup, here, including better PTE bit names.
* Add XScale PTE extensions (ECC enable, write-allocate cache mode).
* Mechanical changes everywhere else to update for new pte.h. While
doing this, two bugs (as a result of typos) were fixed in

arm/arm32/bus_dma.c
evbarm/integrator/int_bus_dma.c
 1.43 04-Apr-2002  thorpej Rename flags that are really part of the pv_entry/mdpage into
pmap.h and give them more descriptive names and better comments:
* PT_M -> PVF_MOD (page is modified)
* PT_H -> PVF_REF (page is referenced)
* PT_W -> PVF_WIRED (mapping is wired)
* PT_Wr -> PVF_WRITE (mapping is writable)
* PT_NC -> PVF_NC (mapping is non-cacheable; multiple mappings)
 1.42 03-Apr-2002  thorpej Clean up handling of the vector page on 32-bit ARM systems:
* Don't refer to VA 0, instead refer to a new variable: vector_page
* Delete the old zero_page_*() functions, replacing them with a new
one: vector_page_setprot().
* When manipulating vector page mappings in user pmaps, only do so if
the vector page is below KERNEL_BASE (if it's above KERNEL_BASE, the
vector page is mapped by the kernel pmap).
* Add a new function, arm32_vector_init(), which takes the virtual
address of the vector page (which MUST be valid when the function
is called) and a bitmask of vectors the kernel is going to take
over, and performs all vector page initialization, including setting
the V bit in the CPU Control register ("relocate vectors to high
address"), if necessary.
 1.41 25-Mar-2002  thorpej * Some cleanup.
* Delete the call to pmap_copy() in pmap.h
 1.40 25-Mar-2002  thorpej Move some private pmap data structures into pmap.c
 1.39 25-Mar-2002  thorpej Tidy a few things up.
 1.38 25-Mar-2002  thorpej Correct the comment describing the layout of the VM space. In
particular, don't describe a recursive PTE mapping, since the ARM
port doesn't (and can't) use one.
 1.37 24-Mar-2002  thorpej Remove exported pmap_pte() prototype.
 1.36 24-Mar-2002  thorpej Clean up PTE access macros a bit.
 1.35 24-Mar-2002  thorpej * arm_byte_to_page() -> arm_btop()
* arm_page_to_byte() -> arm_ptob()
 1.34 23-Mar-2002  thorpej Garbage-collect the "pagehook" stuff.
 1.33 23-Mar-2002  thorpej * Rename PROCESS_PAGE_TBLS_BASE -> PTE_BASE
* Rename ALT_PAGE_TBLS_BASE -> APTE_BASE
* Garbage-collect PAGE_TABLE_SPACE_START
 1.32 23-Mar-2002  thorpej Remove redundant #ifdef _KERNEL
 1.31 05-Mar-2002  thorpej * Make pmap_is_{modified,referenced}() macros in pmap.h that just
test the attributes in the vm_page_md directly.
* Clean up pmap_clear_{modified,referenced}().
* Delete now-unused pmap_testbit().
 1.30 05-Mar-2002  thorpej Switch back to using vm_page_md (thanks chuq for finding the bug
in the code that made it unstable before!)
 1.29 03-Mar-2002  chris Implement pmap_growkernel for arm32 based ports.
Note that this has been compiled on some systems, cats, IQ80310, IPAQ, netwinder and shark (note that shark's build is currently broken due to other reasons), but only actually run on cats.
Shark doesn't make use of the functionality as I believe there has to be a correlation between OFW and the kernel tables so that calls into OFW work.
 1.28 21-Feb-2002  thorpej Keep track of which kernel PTs are available during bootstrap,
and let pmap_map_chunk() lookup the correct one to use for the
current VA. Eliminate the "l2table" argument to pmap_map_chunk().

Add a second L2 table for mapping kernel text/data/bss on the
IQ80310 (fixes booting kernels with ramdisks).
 1.27 21-Feb-2002  thorpej map_chunk() -> pmap_map_chunk(), and move it to pmap.c
 1.26 20-Feb-2002  thorpej map_pagetable() -> pmap_link_l2pt(), and move it to pmap.c
 1.25 20-Feb-2002  thorpej Collapse map_entry{,ro,nc}() into a single pmap_map_entry() that
takes a prot and a "cacheable" indicator.
 1.24 20-Feb-2002  thorpej Rename map_section() to pmap_map_section(), move it to pmap.c, and give it
an extra argument (prot - specifies protection of the mapping).
 1.23 06-Feb-2002  thorpej Back out all the vm_page_md changes. They are causing some
mysterious problems (a similar change to the i386 pmap causes
mysterious problems there, as well), and the issue needs to
be investigated more.
 1.22 06-Feb-2002  thorpej Efficiency tweaks, some made possible by vm_page_md.
 1.21 05-Feb-2002  thorpej Use vm_page_md rather than pmap_physseg. Saves lots of cycles in
common operations.
 1.20 19-Jan-2002  chs add a new flag PMAP_CACHE_VIVT for the pmap to inform the MI code that
that the cache is virtually-indexed and virtually-tagged (such as on the ARM),
and use this flag in the UBC code to be more friendly to those caches.
 1.19 23-Nov-2001  thorpej Use <arm/cpufunc.h>, not <machine/cpufunc.h>.
 1.18 23-Nov-2001  thorpej - Move more contents of various <machine/vmparam.h> files into
<arm/arm32/vmparam.h> (mostly the stuff that's tied to the pmap
implementation).
- Since the MMU definitions in pte.h are specific to ARM processors
that support 32-bit mode, move pte.h to <arm/arm32/pte.h>.
- Make the Netwinder startup file build again (use PT_B|PT_C, rather
than PT_CACHEABLE, since the latter expands to a variable these days).
 1.17 19-Nov-2001  thorpej Implement pmap_update(). Currently it just calls cpu_cpwait(),
which ensures that TLB/cache operations have completed.
 1.16 03-Nov-2001  rearnsha branches: 1.16.2;
Define boolean predicates pmap_pde_page, pmap_pde_section & pmap_pde_fpage,
which return true if their pde argument is a coarse page, section or
fine page respectively.
 1.15 13-Sep-2001  chris branches: 1.15.2;
Sprinkle some static and inline into a couple of functions. Remove dead entries from pmap.h.
 1.14 10-Sep-2001  chris Update pmap_update to now take the updated pmap as an argument.
This will allow improvements to the pmaps so that they can more easily defer expensive operations, eg tlb/cache flush, til the last possible moment.

Currently this is a no-op on most platforms, so they should see no difference.

Reviewed by Jason.
 1.13 11-Aug-2001  chris branches: 1.13.2;
Checking a whole host of pmap changes:
Improved locking (not that we actually use it on a uniprocessor, but one day :)
Removed unneeded splvm's
tweaked pmap_clean_page code to only flush the cache if the page is mapped in the current pmap (based on diff from richard E)
Adopted pv entry allocation mechanism from i386.
Laid framework for returning ptp's when we've finished with them rather than holding onto them till the process exits.
ptp's are now allocated with a uvm object for the pmap, means that we can walk a list to free them off in pmap_release, until they get freed off by pmap_remove.

Also implemented a page zeroing function when the processor is idling. Note that hpcarm may wish to disable this.

I believe this code to be stable, if anyone has any problems please shout up.
 1.12 29-Jul-2001  chris Rework the pmap_release code to not have to walk the ptpt, it now uses a uvm_object to track the allocated vm_pages, this means it can free off the entries in the uvm_object.

Testing shows that it's about 5% faster on the make configure step for gmake.
 1.11 28-Jul-2001  chris A couple of tidy ups to pmap:
pmap_t -> struct pmap * in pmap.c and pmap.h
kernel_pmap -> pmap_kernel() everywhere.

Compiled and booted on riscpc and cats.
 1.10 22-Jun-2001  chris branches: 1.10.2;
GC a couple of unused entries in the pmap struct
 1.9 26-May-2001  chs replace vm_page_t with struct vm_page *.
 1.8 26-May-2001  chs replace {simple_,}lock{_data,}_t with struct {simple,}lock {,*}.
 1.7 22-Apr-2001  thorpej Undo a misguided previous change to the pmap_update() API.
 1.6 22-Apr-2001  thorpej Give pmap_update() an argument (a pmap_t) so that it knows which
pmap it should be updating.
 1.5 21-Apr-2001  thorpej Update the comment for pmap_update().
 1.4 04-Mar-2001  matt branches: 1.4.2; 1.4.4;
more vm_offset_t/vm_size_t -> {p,v}{addr,size}_t changes
move pmap_* declarations to pmap.h. fix conflicts this
exposed (e.g different definitions for pmap_bootstrap).
 1.3 04-Mar-2001  matt Convert some vm_size_t to vsize_t/psize_t. Change vaddr_t to paddr_t
where appropriate.
 1.2 04-Mar-2001  matt s/vm_offset_t/vaddr_t/g
 1.1 23-Feb-2001  reinoud Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.4.4.3 23-Apr-2001  bouyer Sync with HEAD.
 1.4.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.4.4.1 04-Mar-2001  bouyer file pmap.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.4.2.1 21-Jun-2001  nathanw Catch up to -current.
 1.10.2.9 10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.10.2.8 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.10.2.7 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.10.2.6 16-Mar-2002  jdolecek Catch up with -current.
 1.10.2.5 11-Feb-2002  jdolecek Sync w/ -current.
 1.10.2.4 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.10.2.3 13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.10.2.2 25-Aug-2001  thorpej Merge Aug 24 -current into the kqueue branch.
 1.10.2.1 03-Aug-2001  lukem update to -current
 1.13.2.1 01-Oct-2001  fvdl Catch up with -current.
 1.15.2.1 12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.16.2.9 11-Dec-2002  thorpej Sync with HEAD.
 1.16.2.8 18-Oct-2002  nathanw Catch up to -current.
 1.16.2.7 27-Aug-2002  thorpej Sync with -current.
 1.16.2.6 13-Aug-2002  nathanw Catch up to -current.
 1.16.2.5 17-Apr-2002  nathanw Catch up to -current.
 1.16.2.4 01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.16.2.3 28-Feb-2002  nathanw Catch up to -current.
 1.16.2.2 08-Jan-2002  nathanw Catch up to -current.
 1.16.2.1 03-Nov-2001  nathanw file pmap.h was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.53.2.1 30-Aug-2002  gehenna catch up with -current.
 1.75.2.4 11-Dec-2005  christos Sync with head.
 1.75.2.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.75.2.2 18-Sep-2004  skrll Sync with HEAD.
 1.75.2.1 03-Aug-2004  skrll Sync with HEAD
 1.77.16.4 21-Jan-2008  yamt sync with head
 1.77.16.3 27-Oct-2007  yamt sync with head.
 1.77.16.2 26-Feb-2007  yamt sync with head.
 1.77.16.1 21-Jun-2006  yamt sync with head.
 1.79.30.1 10-Nov-2007  matt Add AT91 support from Sami Kantoluoto
Add TI OMAP2430 support from Marty Fouts @ Danger Inc
 1.79.26.1 27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.81.24.5 09-Jan-2008  matt sync with HEAD
 1.81.24.4 09-Nov-2007  matt Add pmap_icache_sync_range and change arm32_sync_icache to use it.
This will only invalidate va that have valid PTEs. This avoids cleaning
unneeded cache lines.
 1.81.24.3 09-Nov-2007  matt Make all the evbarm kernels build again. Fix lossage from rebase.
 1.81.24.2 06-Nov-2007  matt sync with HEAD
 1.81.24.1 12-Oct-2007  matt Import TI OMAP 2430 and ARM11/ARMv6 support. Now on ARMv6, the cache is
no longer purged on context switches.
 1.81.22.1 01-Jan-2008  chris Sync with HEAD.
 1.81.20.1 02-Oct-2007  joerg Sync with HEAD.
 1.81.18.2 28-Feb-2008  rjs Sync with HEAD.
 1.81.18.1 01-Nov-2007  rjs Sync with HEAD.
 1.81.12.1 03-Oct-2007  garbled Sync with HEAD
 1.81.4.1 09-Oct-2007  ad Sync with head.
 1.83.8.1 02-Jan-2008  bouyer Sync with HEAD
 1.83.2.1 18-Feb-2008  mjf Sync with HEAD.
 1.84.10.6 11-Aug-2010  yamt sync with head.
 1.84.10.5 11-Mar-2010  yamt sync with head
 1.84.10.4 16-Sep-2009  yamt sync with head
 1.84.10.3 19-Aug-2009  yamt sync with head.
 1.84.10.2 04-May-2009  yamt sync with head.
 1.84.10.1 16-May-2008  yamt sync with head.
 1.84.8.1 18-May-2008  yamt sync with head.
 1.84.6.3 17-Jan-2009  mjf Sync with HEAD.
 1.84.6.2 28-Sep-2008  mjf Sync with HEAD.
 1.84.6.1 02-Jun-2008  mjf Sync with HEAD.
 1.85.6.2 13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.85.6.1 19-Oct-2008  haad Sync with HEAD.
 1.85.4.2 28-Jul-2008  simonb Sync with head.
 1.85.4.1 18-Jul-2008  simonb Sync with head.
 1.85.2.1 18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.88.10.2 24-Mar-2014  matt Define PMAP_KMPAGE
 1.88.10.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.88.2.1 19-Jan-2009  skrll Sync with HEAD.
 1.94.4.4 21-Apr-2011  rmind sync with head
 1.94.4.3 05-Mar-2011  rmind sync with head
 1.94.4.2 03-Jul-2010  rmind sync with head
 1.94.4.1 16-Mar-2010  rmind Change struct uvm_object::vmobjlock to be dynamically allocated with
mutex_obj_alloc(). It allows us to share the locks among UVM objects.
 1.94.2.4 15-Nov-2010  uebayasi Sync with HEAD.
 1.94.2.3 17-Aug-2010  uebayasi Sync with HEAD.
 1.94.2.2 25-Feb-2010  uebayasi A few more VM_PAGE_TO_MD().
 1.94.2.1 10-Feb-2010  uebayasi Missing bits of pmap_is_page_colored_p() conversion.
 1.97.4.1 05-Mar-2011  bouyer Sync with HEAD
 1.97.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.99.2.1 23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.100.6.1 18-Feb-2012  mrg merge to -current.
 1.100.2.4 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.100.2.3 16-Jan-2013  yamt sync with (a bit old) head
 1.100.2.2 30-Oct-2012  yamt sync with head
 1.100.2.1 17-Apr-2012  yamt sync with head
 1.101.4.2 07-Feb-2013  matt pullup pmap changes from HEAD
 1.101.4.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.111.2.5 03-Dec-2017  jdolecek update from HEAD
 1.111.2.4 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.111.2.3 23-Jun-2013  tls resync from head
 1.111.2.2 25-Feb-2013  tls resync with head
 1.111.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.120.2.2 18-May-2014  rmind sync with head
 1.120.2.1 28-Aug-2013  rmind sync with head
 1.130.2.1 10-Aug-2014  tls Rebase.
 1.135.2.3 11-Mar-2017  snj Pull up following revision(s) (requested by skrll in ticket #1366):
sys/arch/arm/include/arm32/pmap.h: 1.145
sys/arch/arm/arm32/pmap.c: 1.343, 1.344
sys/arch/evbarm/gumstix/gumstix_machdep.c: 1.58 via patch
Fixup the compile time decisions around PMAP_{INCLUDE,NEEDS}_PTE_SYNC and
fix the options for xscale boards which require the code in
pmap_l2ptp_ctor marked as #ifndef PMAP_INCLUDE_PTE_SYNC.
Fix the typo (pte -> opte) in this code block and consistently use opte
elsewhere.
PR/51990: Regression data_abort_handler: data_aborts fsr=0x406 far=0xbfffeff5 on copyout in init
--
fix unused.
--
Set xscale_cache_clean_addr appropriately and re-arrange default KVA
layout to allow direct map for all boards.
OVERO/DUOVERO/PEPPER aren't tested.
PR/52010: Regression: Gumstix Verdex is hanging in enabling cache + KASSERT ram_size
 1.135.2.2 27-May-2015  msaitoh branches: 1.135.2.2.4;
Pull up following revision(s) (requested by skrll in ticket #805):
sys/arch/arm/include/arm32/pmap.h: revision 1.138
sys/arch/arm/arm/cpufunc.c: revision 1.151
sys/arch/arm/arm32/bus_dma.c: revision 1.90
sys/arch/arm/broadcom/bcm53xx_pax.c: revision 1.14
sys/arch/arm/arm32/bus_dma.c: revision 1.91
sys/arch/arm/samsung/exynos_space.c: revision 1.2
sys/arch/arm/arm32/db_machdep.c: revision 1.23
sys/arch/arm/allwinner/awin_space.c: revision 1.4
sys/arch/arm/include/rwlock.h: revision 1.9
sys/arch/arm/amlogic/amlogic_space.c: revision 1.2
sys/arch/arm/zynq/zynq_space.c: revision 1.2
sys/arch/arm/broadcom/bcm2835_space.c: revision 1.7
sys/arch/arm/arm32/pmap.c: revision 1.317
sys/arch/arm/include/locore.h: revision 1.19
sys/arch/arm/include/mutex.h: revision 1.20
sys/arch/arm/include/lock.h: revision 1.31
sys/arch/arm/include/lock.h: revision 1.32
sys/arch/arm/broadcom/bcmgen_space.c: revision 1.5
- Kill redundant semicolons.
- Indentation.
- Improve inline asm around dsb/dmb/isb:
- always use volatile and mark them as memory barrier
- use the common version from locore.h in all places not included from
userland
 1.135.2.1 09-Nov-2014  martin Pull up following revision(s) (requested by skrll in ticket #188):
sys/arch/arm/include/arm32/pmap.h: revision 1.136
sys/arch/arm/include/armreg.h: revision 1.100
sys/arch/arm/cortex/gic.c: revision 1.11
sys/arch/arm/arm32/db_interface.c: revision 1.54
sys/arch/arm/include/armreg.h: revision 1.101
sys/arch/arm/cortex/gic.c: revision 1.12
sys/arch/arm/arm32/arm32_machdep.c: revision 1.107
sys/arch/arm/arm/cpufunc_asm_armv7.S: revision 1.19
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.20
sys/arch/evbarm/conf/BPI: revision 1.5
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.21
sys/arch/arm/arm32/pmap.c: revision 1.306
sys/arch/arm/arm32/db_machdep.c: revision 1.22
sys/arch/arm/arm32/arm32_tlb.c: revision 1.3
sys/arch/arm/arm/undefined.c: revision 1.55
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.22
sys/arch/arm/arm32/pmap.c: revision 1.307
sys/arch/arm/arm32/arm32_tlb.c: revision 1.4
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.23
sys/arch/arm/arm32/arm32_tlb.c: revision 1.5
sys/arch/evbarm/conf/BPI: revision 1.8
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.24
sys/arch/arm/arm32/arm32_tlb.c: revision 1.6
sys/arch/arm/arm32/arm32_tlb.c: revision 1.7
sys/arch/evbarm/conf/CUBIETRUCK: revision 1.5
sys/arch/arm/pic/pic.c: revision 1.23
sys/arch/arm/pic/pic.c: revision 1.24
sys/arch/arm/pic/picvar.h: revision 1.11
sys/arch/arm/arm/cpufunc_asm_armv7.S: revision 1.20
sys/arch/arm/mainbus/cpu_mainbus.c: revision 1.16
sys/arch/arm/arm32/pmap.c: revision 1.298
sys/arch/arm/arm/cpufunc_asm_arm11.S: revision 1.17
sys/arch/arm/arm/cpufunc_asm_pj4b.S: revision 1.5
sys/arch/arm/arm32/pmap.c: revision 1.310
sys/arch/arm/arm32/pmap.c: revision 1.311
sys/arch/arm/arm32/arm32_kvminit.c: revision 1.32
sys/arch/arm/cortex/a9_mpsubr.S: revision 1.19
sys/arch/arm/arm32/arm32_boot.c: revision 1.10
sys/arch/arm/arm/ast.c: revision 1.25
sys/arch/arm/include/armreg.h: revision 1.98
sys/uvm/pmap/pmap_tlb.c: revision 1.10
sys/arch/arm/arm32/arm32_boot.c: revision 1.8
sys/arch/arm/arm32/arm32_boot.c: revision 1.9
sys/arch/arm/arm/arm_machdep.c: revision 1.43
Various ARM MP fixes.
 1.135.2.2.4.1 13-Mar-2017  skrll Sync with netbsd-7-1-RELEASE
 1.137.2.6 28-Aug-2017  skrll Sync with HEAD
 1.137.2.5 05-Oct-2016  skrll Sync with HEAD
 1.137.2.4 27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.137.2.3 22-Sep-2015  skrll Sync with HEAD
 1.137.2.2 06-Jun-2015  skrll Sync with HEAD
 1.137.2.1 06-Apr-2015  skrll Sync with HEAD
 1.144.4.1 21-Apr-2017  bouyer Sync with HEAD
 1.144.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.154.2.2 20-Oct-2018  pgoyette Sync with head
 1.154.2.1 07-Apr-2018  pgoyette Sync with HEAD. 77 conflicts resolved - all of them $NetBSD$
 1.155.2.3 21-Apr-2020  martin Sync with HEAD
 1.155.2.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.155.2.1 10-Jun-2019  christos Sync with HEAD
 1.156.4.1 27-Feb-2020  martin Pull up following revision(s) (requested by skrll in ticket #742):

sys/arch/arm/arm32/pmap.c: revision 1.388
sys/arch/arm/arm32/armv7_generic_space.c: revision 1.11
sys/arch/arm/arm/cpufunc.c: revision 1.176
sys/arch/arm/conf/Makefile.arm: revision 1.54 (via patch)
sys/arch/arm/include/arm32/pmap.h: revision 1.161

Fix the armv[67] memory attributes for uncached memory. Previously it was
mapped as strongly-ordered which meant that unaligned accesses would fault.
armv7_generic_bs_map now maps pages with PMAP_DEV which is treated as SO
bus_dma continues to use PMAP_NOCACHE as appropriate, but this now get
mapped to the correct memory attribute bits for armv[67]

DEVMAP_ENTRY usees a new flag PTE_DEV.

The workaround for the unaligned access faults is now removed.
XXX Other armv[67] boards bus_space implementations should be checked.
XXX There is scope to reduce the difference to aarch64
 1.157.2.3 29-Feb-2020  ad Sync with head.
 1.157.2.2 25-Jan-2020  ad Sync with head.
 1.157.2.1 17-Jan-2020  ad Sync with head.
 1.166.2.1 20-Apr-2020  bouyer Sync with HEAD
 1.169.6.1 13-May-2021  thorpej Sync with HEAD.
 1.173.4.1 14-Oct-2023  martin Pull up following revision(s) (requested by skrll in ticket #411):

sys/arch/evbarm/nslu2/nslu2_machdep.c: revision 1.41
sys/arch/evbarm/gumstix/gumstix_machdep.c: revision 1.75
sys/arch/evbarm/iq80321/iq80321_machdep.c: revision 1.66
sys/arch/iyonix/iyonix/iyonix_machdep.c: revision 1.34
sys/arch/zaurus/zaurus/machdep.c: revision 1.52
sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c: revision 1.41
sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c: revision 1.33
sys/arch/evbarm/iq80310/iq80310_machdep.c: revision 1.96
sys/arch/evbarm/adi_brh/brh_machdep.c: revision 1.53
sys/arch/arm/include/arm32/pmap.h: revision 1.177
sys/arch/evbarm/viper/viper_machdep.c: revision 1.34
sys/arch/evbarm/iyonix/iyonix_machdep.c: revision 1.5
sys/arch/evbarm/npwr_fc/npwr_fc_machdep.c: revision 1.30
sys/arch/evbarm/hdl_g/hdlg_machdep.c: revision 1.35
sys/arch/arm/arm32/pmap.c: revision 1.440
sys/arch/evbarm/lubbock/lubbock_machdep.c: revision 1.45
sys/arch/evbarm/ixdp425/ixdp425_machdep.c: revision 1.47

Fix non-DIAGNOSTIC builds
 1.21 23-Jan-2016  christos Rename the cpu_id() define to cpu_idnum() so that it does not conflict with
dtrace and friends.
 1.20 04-Feb-2014  matt branches: 1.20.6;
_setsoftintr is long dead. reap any leftovers from arm.
 1.19 27-Jul-2012  matt branches: 1.19.2; 1.19.4;
Remove safepri and use IPL_SAFEPRI instead. This may be defined in a MD
header file (if not, a value of 0 is assmued).
 1.18 29-Jan-2009  nonaka branches: 1.18.14; 1.18.22;
fix splx() function prototype.
 1.17 11-Jun-2008  rafal branches: 1.17.4; 1.17.12;
Let the shark boot again. Fixes port-shark/38929. While I'm here fix the
splsoft... macros to always raise the IPL (oops!).
 1.16 27-Apr-2008  matt branches: 1.16.2; 1.16.4;
Merge kernel changes in matt-armv6 to HEAD.
 1.15 06-Jan-2008  matt branches: 1.15.6; 1.15.8; 1.15.10;
Cleanup softint lossage.
 1.14 03-Dec-2007  ad branches: 1.14.6;
Interrupt handling changes, in discussion since February:

- Reduce available SPL levels for hardware devices to none, vm, sched, high.
- Acquire kernel_lock only for interrupts at IPL_VM.
- Implement threaded soft interrupts.
 1.13 17-Oct-2007  garbled branches: 1.13.2;
Merge the ppcoea-renovation branch to HEAD.

This branch was a major cleanup and rototill of many of the various OEA
cpu based PPC ports that focused on sharing as much code as possible
between the various ports to eliminate near-identical copies of files in
every tree. Additionally there is a new PIC system that unifies the
interface to interrupt code for all different OEA ppc arches. The work
for this branch was done by a variety of people, too long to list here.

TODO:
bebox still needs work to complete the transition to -renovation.
ofppc still needs a bunch of work, which I will be looking at.
ev64260 still needs to be renovated
amigappc was not attempted.

NOTES:
pmppc was removed as an arch, and moved to a evbppc target.
 1.12 08-Aug-2007  tsutsui branches: 1.12.2; 1.12.4;
Remove obsolete spllowersoftclock(9).
 1.11 01-Jul-2007  toshii branches: 1.11.4; 1.11.6; 1.11.8;
Quick and dirty fix for hpcarm build failure, using hpcarm specific
softintr code for now.
 1.10 09-Mar-2007  thorpej branches: 1.10.2; 1.10.4; 1.10.10;
Make ipl_t and ipl_cookie_t 8-bit values. kmutex is now down to 12 bytes
(from 20) on ARM.

Approved by Matt Thomas.
 1.9 18-Feb-2007  matt Don't export spl_smasks or soft_interrupts. They are local to intr.c
Make sure that softintr_init() is called when needed.
Assume __HAVE_GENERIC_SOFT_INTERRUPTS is defined (since newlock2 requires it).
 1.8 18-Feb-2007  matt Add __HAVE_GENERIC_SOFT_INTERRUPTS support for shark. This was done by
extenting the current arm generic intrs to support softintrs. Add
IPL_SOFTCLOCK, IPL_SOFTNET, IPL_SOFTSERIAL.
 1.7 21-Dec-2006  yamt branches: 1.7.2;
merge yamt-splraiseipl branch.

- finish implementing splraiseipl (and makeiplcookie).
http://mail-index.NetBSD.org/tech-kern/2006/07/01/0000.html
- complete workqueue(9) and fix its ipl problem, which is reported
to cause audio skipping.
- fix netbt (at least compilation problems) for some ports.
- fix PR/33218.
 1.6 16-Jun-2003  thorpej branches: 1.6.18; 1.6.48; 1.6.50;
Rename IPL_IMP -> IPL_VM.
 1.5 27-Oct-2001  rearnsha branches: 1.5.2;
Add new spl level -- _SPL_STATCLOCK.
 1.4 21-Apr-2001  bjh21 branches: 1.4.2; 1.4.6;
Multiple-inclusion protection.
 1.3 13-Apr-2001  thorpej Remove the use of splimp() from the NetBSD kernel. splnet()
and only splnet() is allowed for the protection of data structures
used by network devices.
 1.2 31-Mar-2001  toshii Increase spl_masks[] size by one and set the extra element to 0.
irq_entry accesses here.
 1.1 23-Feb-2001  reinoud branches: 1.1.2; 1.1.4;
Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.1.4.4 23-Apr-2001  bouyer Sync with HEAD.
 1.1.4.3 21-Apr-2001  bouyer Sync with HEAD
 1.1.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.1.4.1 23-Feb-2001  bouyer file psl.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.1.2.2 21-Jun-2001  nathanw Catch up to -current.
 1.1.2.1 09-Apr-2001  nathanw Catch up with -current.
 1.4.6.1 12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.4.2.1 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.5.2.2 27-Oct-2001  rearnsha Add new spl level -- _SPL_STATCLOCK.
 1.5.2.1 27-Oct-2001  rearnsha file psl.h was added on branch nathanw_sa on 2001-10-27 16:37:25 +0000
 1.6.50.3 21-Sep-2006  yamt implement splraiseipl for hpcarm, shark, and acorn32.
 1.6.50.2 21-Sep-2006  yamt revert the previous which was committed unintentionally.
 1.6.50.1 21-Sep-2006  yamt *** empty log message ***
 1.6.48.1 12-Jan-2007  ad Sync with head.
 1.6.18.5 21-Jan-2008  yamt sync with head
 1.6.18.4 07-Dec-2007  yamt sync with head
 1.6.18.3 03-Sep-2007  yamt sync with head.
 1.6.18.2 26-Feb-2007  yamt sync with head.
 1.6.18.1 30-Dec-2006  yamt sync with head.
 1.7.2.2 12-Mar-2007  rmind Sync with HEAD.
 1.7.2.1 27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.10.10.1 03-Oct-2007  garbled Sync with HEAD
 1.10.4.1 11-Jul-2007  mjf Sync with head.
 1.10.2.3 03-Dec-2007  ad Sync with HEAD.
 1.10.2.2 20-Aug-2007  ad Sync with HEAD.
 1.10.2.1 15-Jul-2007  ad Sync with head.
 1.11.8.2 09-Dec-2007  jmcneill Sync with HEAD.
 1.11.8.1 09-Aug-2007  jmcneill Sync with HEAD.
 1.11.6.4 28-Feb-2008  rjs Sync with HEAD.
 1.11.6.3 26-Dec-2007  rjs Sync with HEAD.
 1.11.6.2 01-Nov-2007  rjs Sync with HEAD.
 1.11.6.1 31-Jul-2007  rjs Don't include softintr.h. Remove _P() usage.
 1.11.4.1 15-Aug-2007  skrll Sync with HEAD.
 1.12.4.2 28-Jan-2008  matt Given the that there are only 4 IPLs (ignoring soft IPLs), a number of
cleanups can be done:
Remove _SPL_* aliases.
Don't store irqmasks in ci_cpl, just make it an ipl level.
Add fast softint switching support.
 1.12.4.1 09-Jan-2008  matt sync with HEAD
 1.12.2.2 20-Jan-2008  chris Sync to HEAD.
 1.12.2.1 01-Jan-2008  chris Sync with HEAD.
 1.13.2.2 18-Feb-2008  mjf Sync with HEAD.
 1.13.2.1 08-Dec-2007  mjf Sync with HEAD.
 1.14.6.1 08-Jan-2008  bouyer Sync with HEAD
 1.15.10.2 04-May-2009  yamt sync with head.
 1.15.10.1 16-May-2008  yamt sync with head.
 1.15.8.2 17-Jun-2008  yamt sync with head.
 1.15.8.1 18-May-2008  yamt sync with head.
 1.15.6.2 29-Jun-2008  mjf Sync with HEAD.
 1.15.6.1 02-Jun-2008  mjf Sync with HEAD.
 1.16.4.1 18-Jun-2008  simonb Sync with head.
 1.16.2.1 23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.17.12.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.17.4.1 03-Mar-2009  skrll Sync with HEAD.
 1.18.22.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.18.14.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.18.14.1 30-Oct-2012  yamt sync with head
 1.19.4.1 18-May-2014  rmind sync with head
 1.19.2.2 03-Dec-2017  jdolecek update from HEAD
 1.19.2.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.20.6.1 19-Mar-2016  skrll Sync with HEAD
 1.23 04-May-2020  joerg Prevent double definition of pt_entry_t from machine/param.h
 1.22 02-Feb-2020  skrll G/C L1_TABLE_SIZE_REAL
 1.21 18-Jan-2020  skrll Use 4K pages on ARM_MMU_EXTENDED platforms (all armv[67] except RPI) by
creating a new pool l1ttpl for the userland L1 translation table which
needs to be 8KB and 8KB aligned.

Limit the pool to maxproc and add hooks to allow the sysctl changing of
maxproc to adjust the pool.

This comes at a 5% performance penalty for build.sh -j8 kernel on a
Tegra TK1.
 1.20 19-Jun-2019  skrll branches: 1.20.4;
Whitespace
 1.19 29-Oct-2014  skrll branches: 1.19.20;
Update a comment to reflect ARM ARMv7
 1.18 08-Aug-2014  skrll Comment whitespace.
 1.17 08-Aug-2014  skrll Spell user with an e.
 1.16 31-Jul-2014  skrll Trailing whitespace
 1.15 26-Feb-2014  matt branches: 1.15.2;
Add XN bit L2 large pages.
 1.14 22-Feb-2014  matt Add L1_TABLE_SIZE_REAL
 1.13 11-Sep-2012  matt branches: 1.13.2; 1.13.4;
Fix the CACHE_MASKs for armv6 to include TEX and S bits.
Fix a comment in pte.h
 1.12 20-Aug-2012  matt Add support for mapping SuperSection on armv6 and armv7. These always
a domain of 0 so move the kernel from domain 15 to domain 0.
 1.11 16-Aug-2012  matt Add L2_S_SEGSIZE which is the number of bytes that a L2 page table will map.
 1.10 10-Mar-2011  bsh branches: 1.10.4; 1.10.10; 1.10.12;
Preliminary ARM11 MPCore support.

I have confirmed this commit doesn't affect existing evbarm kernels by
comparing binaries.
 1.9 16-Jun-2010  jmcneill branches: 1.9.2;
PR port-arm/43299: Support added for igepv2/cortexa8/omap3530

Apply patch from PR, with build fixes. ok skrll, matt
 1.8 27-Apr-2008  matt branches: 1.8.18; 1.8.20; 1.8.22;
Merge kernel changes in matt-armv6 to HEAD.
 1.7 21-May-2003  thorpej branches: 1.7.82; 1.7.106; 1.7.108; 1.7.110;
Remove #ifdefs supporting the old pmap, switching fully to the new.
 1.6 18-Apr-2003  scw Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.

Some features of the new pmap are:

- It allows L1 descriptor tables to be shared efficiently between
multiple processes. A typical "maxusers 32" kernel, where NPROC is set
to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
with just 4 L1s. This completely solves the problem of running out
of contiguous physical memory for allocating new L1s at runtime on a
busy system.

- Much improved cache/TLB management "smarts". This change ripples
out to encompass the low-level context switch code, which is also
much smarter about when to flush the cache/TLB, and when not to.

- Faster allocation of L2 page tables and associated metadata thanks,
in part, to the pool_cache enhancements recently contributed to
NetBSD by Wasabi Systems.

- Faster VM space teardown due to accurate referenced tracking of L2
page tables.

- Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.
 1.5 05-Apr-2002  thorpej * Rewrite the 32-bit ARM pte.h based on the ARM architecture manual.
Significant cleanup, here, including better PTE bit names.
* Add XScale PTE extensions (ECC enable, write-allocate cache mode).
* Mechanical changes everywhere else to update for new pte.h. While
doing this, two bugs (as a result of typos) were fixed in

arm/arm32/bus_dma.c
evbarm/integrator/int_bus_dma.c
 1.4 04-Apr-2002  thorpej Rename flags that are really part of the pv_entry/mdpage into
pmap.h and give them more descriptive names and better comments:
* PT_M -> PVF_MOD (page is modified)
* PT_H -> PVF_REF (page is referenced)
* PT_W -> PVF_WIRED (mapping is wired)
* PT_Wr -> PVF_WRITE (mapping is writable)
* PT_NC -> PVF_NC (mapping is non-cacheable; multiple mappings)
 1.3 03-Apr-2002  reinoud In analogy to L2_LPAGE_SIZE add L2_SPAGE_SIZE ....
 1.2 02-Mar-2002  chris Update the types, pt_entry and pd_entry should be unsigned, and fixed at 32 bits.
 1.1 23-Nov-2001  thorpej branches: 1.1.2; 1.1.4;
- Move more contents of various <machine/vmparam.h> files into
<arm/arm32/vmparam.h> (mostly the stuff that's tied to the pmap
implementation).
- Since the MMU definitions in pte.h are specific to ARM processors
that support 32-bit mode, move pte.h to <arm/arm32/pte.h>.
- Make the Netwinder startup file build again (use PT_B|PT_C, rather
than PT_CACHEABLE, since the latter expands to a variable these days).
 1.1.4.4 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.1.4.3 16-Mar-2002  jdolecek Catch up with -current.
 1.1.4.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.1.4.1 23-Nov-2001  thorpej file pte.h was added on branch kqueue on 2002-01-10 19:37:56 +0000
 1.1.2.4 17-Apr-2002  nathanw Catch up to -current.
 1.1.2.3 01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.1.2.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.2.1 23-Nov-2001  nathanw file pte.h was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.7.110.2 11-Aug-2010  yamt sync with head.
 1.7.110.1 16-May-2008  yamt sync with head.
 1.7.108.1 18-May-2008  yamt sync with head.
 1.7.106.1 02-Jun-2008  mjf Sync with HEAD.
 1.7.82.2 09-Nov-2007  matt Make all the evbarm kernels build again. Fix lossage from rebase.
 1.7.82.1 28-Aug-2007  matt Add ArmV6 pte/pde extensions.
 1.8.22.2 21-Apr-2011  rmind sync with head
 1.8.22.1 03-Jul-2010  rmind sync with head
 1.8.20.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.8.18.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.9.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.10.12.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.10.10.1 08-Feb-2013  riz sys/arch/arm/include/arm32/pte.h 1.11
sys/arch/evbarm/marvell/marvell_machdep.c 1.19 via patch

Switch to ARM_VECTORS_HIGH for Sheeva CPU.
[msaitoh, ticket #785]
 1.10.4.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.10.4.1 30-Oct-2012  yamt sync with head
 1.13.4.1 18-May-2014  rmind sync with head
 1.13.2.2 03-Dec-2017  jdolecek update from HEAD
 1.13.2.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.15.2.1 10-Aug-2014  tls Rebase.
 1.19.20.2 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.19.20.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.20.4.2 29-Feb-2020  ad Sync with head.
 1.20.4.1 25-Jan-2020  ad Sync with head.
 1.2 14-Mar-2009  dsl Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.1 23-Feb-2001  reinoud branches: 1.1.4; 1.1.136; 1.1.144; 1.1.150;
Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.1.150.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.1.144.1 28-Apr-2009  skrll Sync with HEAD.
 1.1.136.1 04-May-2009  yamt sync with head.
 1.1.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.1.4.1 23-Feb-2001  bouyer file rtc.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.2 14-Jul-2001  matt branches: 1.2.6;
Make <sysarch.h> valid for all arm platforms. Adjust/remove port-specific
includes as required.
 1.1 23-Feb-2001  reinoud branches: 1.1.4; 1.1.6;
Big patch for merging common include files of the new hpcarm tree and the old arm32
tree into the new arm substree. All moved files are relinked with a stub that included
the file from the new location; this might be done better later.
 1.1.6.1 03-Aug-2001  lukem update to -current
 1.1.4.2 12-Mar-2001  bouyer Sync with HEAD.
 1.1.4.1 23-Feb-2001  bouyer file sysarch.h was added on branch thorpej_scsipi on 2001-03-12 13:27:25 +0000
 1.2.6.2 14-Jul-2001  matt Make <sysarch.h> valid for all arm platforms. Adjust/remove port-specific
includes as required.
 1.2.6.1 14-Jul-2001  matt file sysarch.h was added on branch nathanw_sa on 2001-07-14 00:23:11 +0000
 1.13 11-Feb-2020  skrll G/C
 1.12 24-Jan-2018  skrll branches: 1.12.4; 1.12.10;
Remove port-acorn26

OK core@
 1.11 07-May-2013  matt Move #define __HAVE_OLD_DISKLABEL to <arm/types.h>
 1.10 07-May-2013  matt Make all ports use a common disklabel.h with MAXPARTITIONS set to 16.
Only RAW_PART varies between ports.
 1.9 07-Jul-2010  chs implement cpu_lwp_setprivate() on several platforms.
 1.8 21-May-2003  thorpej branches: 1.8.110; 1.8.130; 1.8.132;
Remove #ifdefs supporting the old pmap, switching fully to the new.
 1.7 18-Apr-2003  scw Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.

Some features of the new pmap are:

- It allows L1 descriptor tables to be shared efficiently between
multiple processes. A typical "maxusers 32" kernel, where NPROC is set
to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
with just 4 L1s. This completely solves the problem of running out
of contiguous physical memory for allocating new L1s at runtime on a
busy system.

- Much improved cache/TLB management "smarts". This change ripples
out to encompass the low-level context switch code, which is also
much smarter about when to flush the cache/TLB, and when not to.

- Faster allocation of L2 page tables and associated metadata thanks,
in part, to the pool_cache enhancements recently contributed to
NetBSD by Wasabi Systems.

- Faster VM space teardown due to accurate referenced tracking of L2
page tables.

- Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.
 1.6 15-Oct-2002  bjh21 Switch to using the MI C versions of setrunqueue() and remrunqueue().
GCC produces almost exactly the same instructions as the hand-assembled
versions, albeit in a different order. It even found one place where it
could shave one off. Its insistence on creating a stack frame might slow
things down marginally, but not, I think, enough to matter.
 1.5 07-Oct-2002  thorpej Add support for restartable atomic sequences on 26-bit ARM. Compile
tested only.

Now that all ARM systems have RAS, move __HAVE_RAS from arm/arm32/types.h
to arm/types.h.
 1.4 22-Sep-2002  simonb Only need to define __HAVE_MD_RUNQUEUE once here...
 1.3 22-Sep-2002  gmcgarry Add __HAVE_MD_RUNQUEUE flag for MD code to override MI run queue primitives.
 1.2 31-Aug-2002  thorpej Add machine-dependent bits of RAS for arm32.
 1.1 22-Nov-2001  thorpej branches: 1.1.2; 1.1.4; 1.1.12;
Add 26-bit and 32-bit types.h files, which indicate the programming
model in use for a given platform (__PROG26 vs __PROG32), then pulls
in <arm/types.h>. Change each ARM port to pull in <arm/arm26/types.h>
or <arm/arm32/types.h> as appropriate. Change all references to PROG26
and PROG32 to __PROG26 and __PROG32. Eliminate the opt_progmode.h
header file.
 1.1.12.1 31-Aug-2002  gehenna catch up with -current.
 1.1.4.4 10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.1.4.3 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.1.4.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.1.4.1 22-Nov-2001  thorpej file types.h was added on branch kqueue on 2002-01-10 19:37:56 +0000
 1.1.2.4 18-Oct-2002  nathanw Catch up to -current.
 1.1.2.3 17-Sep-2002  nathanw Catch up to -current.
 1.1.2.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.2.1 22-Nov-2001  nathanw file types.h was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.8.132.1 05-Mar-2011  rmind sync with head
 1.8.130.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.8.110.1 11-Aug-2010  yamt sync with head.
 1.12.10.1 29-Feb-2020  ad Sync with head.
 1.12.4.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.1 15-Feb-2014  matt branches: 1.1.2;
file vmpagemd.h was initially added on branch matt-nb5-mips64.
 1.1.2.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.58 07-Sep-2024  andvar spelling and grammar fixes, mainly in comments.
 1.57 16-Apr-2023  skrll branches: 1.57.6;
Rename VM_KERNEL_IO_ADDRESS to VM_KERNEL_IO_BASE to match RISC-V

It's less letters, matches other similar variables and will help with
sharing code between the two architectures.

NFCI.
 1.56 08-Oct-2020  he Bump MAXDSIZ from 1536 to 1836.
1836 is 2048-128(MAXTSIZ)-64(MAXSSIZ).
Gives us a fighting chance to build rust natively.
OK'ed by skrll@
 1.55 29-Aug-2020  skrll Cover the full kernel address range in KASAN
 1.54 11-Jul-2020  skrll Fix ARM builds
 1.53 10-Jul-2020  skrll Remove stray #else / #endif block in KASAN support commit
 1.52 10-Jul-2020  skrll Oops... deal with a last minute #define name change. KASAN support now
builds.
 1.51 10-Jul-2020  skrll Add support for KASAN on ARMv[67]

Thanks to maxv for many pointers and reviews.
 1.50 10-Jul-2020  skrll Do previous differently for now
 1.49 08-Jul-2020  skrll Provide some KVA layout #defines in arm32/vmparam.h and simplify
fdt/platform.h as a nice side effect
 1.48 08-Jul-2020  skrll Remove an unnecessary #ifdef
 1.47 13-Jan-2020  christos Revert previous; we don't want arm to have variable page size. Instead
nick@ is fixing the cache pages issue to use a separate pool.
 1.46 11-Jan-2020  christos Define the min and max page size supported for the benefit of jemalloc
 1.45 19-Jun-2019  skrll branches: 1.45.2; 1.45.4;
Update a comment
 1.44 30-Mar-2019  christos Need to include <sys/cdefs.h> so that the _ARM_CPU* macros get defined
so that we always select the correct page size (8K for armv6+).
 1.43 27-Mar-2019  christos - expose vmparams to userland on arm, like other archs do.
- remove unneeded includes
 1.42 27-Oct-2018  skrll Trailing whitespace
 1.41 13-Feb-2017  skrll branches: 1.41.12; 1.41.14;
G/C VM_MAX_KERNEL_BUF
 1.40 18-Oct-2015  jmcneill branches: 1.40.2; 1.40.4;
pull in arm/arm32/param.h
 1.39 20-Jun-2015  skrll __USE_TOPDOWN_VM

Fixes PR/49974: mmap(2) of large anonymous regions is broken

"go for it" from matt@
 1.38 02-Jun-2015  matt Back off MAXDSIZ to 1.5GB to avoid some virtual memory exhausted messages.
 1.37 28-May-2015  matt ARM systems are no longer small, increase MAXTSIZ/MAXDSIZ/MAXSSIZ.
 1.36 24-Feb-2015  joerg Restore PAGER_MAP_DEFAULT_SIZE for ARMv4, they typically have only 256MB
KVA.
 1.35 27-Jul-2014  skrll branches: 1.35.4;
More fixes as a step towards ARM_MMU_EXTENDED on RPI.

- don't set CPU_CONTROL_SYST_ENABLE in arm11x6_setup for ARM_MMU_EXTENDED

- Use the new MMU defines for V6N

- pull in arm/cpuconf.h in vmparam s that VM_MAXUSER_ADDRESS gets set
correctly.
 1.34 31-Mar-2014  matt branches: 1.34.2;
For ARM_MMU_EXTENDED, a KERNEL_BASE >= 0x80000000 is ok but a
VM_USER_MAXADDRESS can not be more than 0x80000000 - PAGE_SIZE.
 1.33 26-Feb-2014  martin Revert previous - will fix userland with new sysctls for VM_MIN_ADDRESS/
VM_MAXADDESS.
 1.32 26-Feb-2014  martin Include param.h here - userland expects VM_* defines to work with just
this include, but PAGE_SIZE relies on PGSHIFT now, which is not defined
here.

Matt: please rearrange/cleanup differently if you prefer (but test build
src/tests/lib/libc/sys/t_mlock for example.)
 1.31 26-Feb-2014  matt Use PAGE_SIZE instead of 1000
 1.30 21-Feb-2014  skrll Remove unnecessary include of sys/simplelock.h
 1.29 27-Feb-2013  matt branches: 1.29.6;
Define PAGESHIFT using PGSHIFT
 1.28 25-Feb-2013  matt Bump max text/data/stack sizes to more reasonable values.
 1.27 16-Aug-2012  matt branches: 1.27.2;
Tweak max addresses a bit so that [r1, #off] can't overflow them.
 1.26 16-Feb-2012  christos expose stuff that crash needs to kmemuser
 1.25 14-Nov-2010  uebayasi branches: 1.25.8; 1.25.12; 1.25.16;
Move struct vm_page_md definition from vmparam.h to pmap.h, because
it's used only by pmap. vmparam.h has definitions for wider
audience.

All GENERIC kernels build tested, except ia64.

powerpc/include/booke/vmparam.h has one too, but it has no pmap.h,
so it's left as is.
 1.24 06-Mar-2009  joerg branches: 1.24.2; 1.24.4;
Remove SHMMAXPGS from all kernel configs. Dynamically compute the
initial limit as 1/4 of the physical memory. Ensure the limit is at
least 1024 pages, the old default on most platforms.
 1.23 06-Aug-2008  matt branches: 1.23.2; 1.23.8; 1.23.12;
Change pv_entries to use SLIST.

For VIPT caches, keep track of when pages are dirty so that their content
can be flushed back to main memory. This is done when the page is
read-only mapped by more than 1 color. Pages become when either their
modified bit gets set or an unmanaged writeable page is mapped. When
a page in unmapped or changed to read-only, run pmap_vac_me_harder in
case the page can be mapped read-only.

Thanks are given to Imre Deak for giving me the idea to assert for PVF_DIRTY.
 1.22 27-Apr-2008  matt branches: 1.22.2; 1.22.6;
Merge kernel changes in matt-armv6 to HEAD.
 1.21 04-Jan-2008  ad branches: 1.21.6; 1.21.8; 1.21.10;
Header cleanup.
 1.20 06-Jan-2007  christos branches: 1.20.20; 1.20.24; 1.20.26; 1.20.32; 1.20.38;
From Scott Alan in http://mail-index.netbsd.org/port-arm/2006/07/26/0000.html

This one is really simple. I wanted to use KERNEL_BASE in an assembly source,
but arch/arm/include/arm32/vmparam.h wasn't protected by #ifndef
__ASSEMBLER__. The patch adds the protection.
 1.19 22-May-2003  thorpej branches: 1.19.18; 1.19.48; 1.19.54;
Use virtual_avail and virtual_end to compute the size of the available
kernel VM space for VM_MAX_KERNEL_BUF, and move the definition into
generic ARM code.
 1.18 21-May-2003  thorpej Remove #ifdefs supporting the old pmap, switching fully to the new.
 1.17 04-May-2003  thorpej VM_{MIN,MAX}* are now the same for ARM32_PMAP_NEW with both new and
old VM layout, so merge the two cases.
 1.16 03-May-2003  thorpej Don't expose KERNEL_TEXT_BASE outside of board-specific code. This gives
individual board start-up code more flexibility about where the kernel
starts in the kernel address space.
 1.15 02-May-2003  thorpej Don't need to reserve a page of space before KERNEL_BASE in the
ARM32_NEW_VM_LAYOUT case.
 1.14 02-May-2003  thorpej Eliminate PTE_BASE and the PT-PT completely in the ARM32_PMAP_NEW case.
Also in the ARM32_PMAP_NEW case, reclaim the USPACE-bytes of wasted space
at the top of the user address that hasn't been needed for a very very
long time.
 1.13 18-Apr-2003  scw Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.

Some features of the new pmap are:

- It allows L1 descriptor tables to be shared efficiently between
multiple processes. A typical "maxusers 32" kernel, where NPROC is set
to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
with just 4 L1s. This completely solves the problem of running out
of contiguous physical memory for allocating new L1s at runtime on a
busy system.

- Much improved cache/TLB management "smarts". This change ripples
out to encompass the low-level context switch code, which is also
much smarter about when to flush the cache/TLB, and when not to.

- Faster allocation of L2 page tables and associated metadata thanks,
in part, to the pool_cache enhancements recently contributed to
NetBSD by Wasabi Systems.

- Faster VM space teardown due to accurate referenced tracking of L2
page tables.

- Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.
 1.12 02-Apr-2003  thorpej Use PAGE_SIZE rather than NBPG.
 1.11 10-Dec-2002  thorpej Use __LDPGSZ (which must be == USRTEXT) as the text address for a.out
executables, and eliminate the USRTEXT constant, which was only used
by the a.out exec code.
 1.10 09-Aug-2002  thorpej Add some code, conditional on PMAP_ALIAS_DEBUG, that can be used to
hunt for virtual aliases between managed (pmap_enter) and non-managed
(pmap_kenter_pa) mappings.
 1.9 23-Mar-2002  thorpej branches: 1.9.2; 1.9.4;
KERNEL_SPACE_START -> KERNEL_BASE
 1.8 23-Mar-2002  thorpej * Rename PROCESS_PAGE_TBLS_BASE -> PTE_BASE
* Rename ALT_PAGE_TBLS_BASE -> APTE_BASE
* Garbage-collect PAGE_TABLE_SPACE_START
 1.7 05-Mar-2002  thorpej Switch back to using vm_page_md (thanks chuq for finding the bug
in the code that made it unstable before!)
 1.6 03-Mar-2002  chris Implement pmap_growkernel for arm32 based ports.
Note that this has been compiled on some systems, cats, IQ80310, IPAQ, netwinder and shark (note that shark's build is currently broken due to other reasons), but only actually run on cats.
Shark doesn't make use of the functionality as I believe there has to be a correlation between OFW and the kernel tables so that calls into OFW work.
 1.5 06-Feb-2002  thorpej Back out all the vm_page_md changes. They are causing some
mysterious problems (a similar change to the i386 pmap causes
mysterious problems there, as well), and the issue needs to
be investigated more.
 1.4 05-Feb-2002  thorpej Use vm_page_md rather than pmap_physseg. Saves lots of cycles in
common operations.
 1.3 23-Nov-2001  thorpej branches: 1.3.2;
Move even more constants into the shared 32-bit vmparam.h header.
Cleanup elsewhere will have to be done before we can sanitize this
header any further.
 1.2 23-Nov-2001  thorpej - Move more contents of various <machine/vmparam.h> files into
<arm/arm32/vmparam.h> (mostly the stuff that's tied to the pmap
implementation).
- Since the MMU definitions in pte.h are specific to ARM processors
that support 32-bit mode, move pte.h to <arm/arm32/pte.h>.
- Make the Netwinder startup file build again (use PT_B|PT_C, rather
than PT_CACHEABLE, since the latter expands to a variable these days).
 1.1 11-Nov-2001  thorpej branches: 1.1.2; 1.1.4;
Even though the ARM architecture defines large, standard, and small
pages, we use the standard (4K) page size as PAGE_SIZE. Make the
PAGE_SIZE related variables compile-time constants that reflect this.

Results in a bit over 2K worth of .text savings, and visibly better
code in the places that use PAGE_SIZE, etc.
 1.1.4.6 11-Dec-2002  thorpej Sync with HEAD.
 1.1.4.5 13-Aug-2002  nathanw Catch up to -current.
 1.1.4.4 01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.1.4.3 28-Feb-2002  nathanw Catch up to -current.
 1.1.4.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.4.1 11-Nov-2001  nathanw file vmparam.h was added on branch nathanw_sa on 2002-01-08 00:23:12 +0000
 1.1.2.2 12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.1.2.1 11-Nov-2001  thorpej file vmparam.h was added on branch thorpej-mips-cache on 2001-11-12 21:16:33 +0000
 1.3.2.6 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.3.2.5 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.3.2.4 16-Mar-2002  jdolecek Catch up with -current.
 1.3.2.3 11-Feb-2002  jdolecek Sync w/ -current.
 1.3.2.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.3.2.1 23-Nov-2001  thorpej file vmparam.h was added on branch kqueue on 2002-01-10 19:37:57 +0000
 1.9.4.1 07-Dec-2002  he Pull up revision 1.10 (requested by thorpej in ticket #714):
Add code, conditional on PMAP_ALIAS_DEBUG, which can be
used to hunt for virtual aliases between managed (pmap_enter)
and unmanaged (pmap_kenter_pa) mappings.
 1.9.2.1 30-Aug-2002  gehenna catch up with -current.
 1.19.54.1 21-Feb-2007  snj branches: 1.19.54.1.4;
Pull up following revision(s) (requested by matt in ticket #457):
sys/arch/arm/include/arm32/vmparam.h: revision 1.20
From Scott Allan in http://mail-index.netbsd.org/port-arm/2006/07/26/0000.html
This one is really simple. I wanted to use KERNEL_BASE in an
assembly source, but arch/arm/include/arm32/vmparam.h wasn't
protected by #ifndef __ASSEMBLER__. The patch adds the protection.
 1.19.54.1.4.1 10-Nov-2007  matt Add AT91 support from Sami Kantoluoto
Add TI OMAP2430 support from Marty Fouts @ Danger Inc
 1.19.48.1 12-Jan-2007  ad Sync with head.
 1.19.18.2 21-Jan-2008  yamt sync with head
 1.19.18.1 26-Feb-2007  yamt sync with head.
 1.20.38.1 08-Jan-2008  bouyer Sync with HEAD
 1.20.32.1 18-Feb-2008  mjf Sync with HEAD.
 1.20.26.2 09-Jan-2008  matt sync with HEAD
 1.20.26.1 12-Oct-2007  matt Import TI OMAP 2430 and ARM11/ARMv6 support. Now on ARMv6, the cache is
no longer purged on context switches.
 1.20.24.1 20-Jan-2008  chris Sync to HEAD.
 1.20.20.1 28-Feb-2008  rjs Sync with HEAD.
 1.21.10.2 04-May-2009  yamt sync with head.
 1.21.10.1 16-May-2008  yamt sync with head.
 1.21.8.1 18-May-2008  yamt sync with head.
 1.21.6.2 28-Sep-2008  mjf Sync with HEAD.
 1.21.6.1 02-Jun-2008  mjf Sync with HEAD.
 1.22.6.1 19-Oct-2008  haad Sync with HEAD.
 1.22.2.1 18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.23.12.2 24-Mar-2014  matt Deal with those arms who only need one type of freelist.
 1.23.12.1 15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.23.8.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.23.2.1 28-Apr-2009  skrll Sync with HEAD.
 1.24.4.1 05-Mar-2011  rmind sync with head
 1.24.2.3 15-Nov-2010  uebayasi Sync with HEAD.
 1.24.2.2 23-Feb-2010  uebayasi Pass struct vm_page_md * to VM_MDPAGE_INIT(), not struct vm_page *.
 1.24.2.1 09-Feb-2010  uebayasi Kill vm_page::phys_addr.
 1.25.16.1 28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.25.12.1 18-Feb-2012  mrg merge to -current.
 1.25.8.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.25.8.2 30-Oct-2012  yamt sync with head
 1.25.8.1 17-Apr-2012  yamt sync with head
 1.27.2.3 03-Dec-2017  jdolecek update from HEAD
 1.27.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.27.2.1 23-Jun-2013  tls resync from head
 1.29.6.1 18-May-2014  rmind sync with head
 1.34.2.1 10-Aug-2014  tls Rebase.
 1.35.4.5 28-Aug-2017  skrll Sync with HEAD
 1.35.4.4 27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.35.4.3 22-Sep-2015  skrll Sync with HEAD
 1.35.4.2 06-Jun-2015  skrll Sync with HEAD
 1.35.4.1 06-Apr-2015  skrll Sync with HEAD
 1.40.4.1 21-Apr-2017  bouyer Sync with HEAD
 1.40.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.41.14.2 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.41.14.1 10-Jun-2019  christos Sync with HEAD
 1.41.12.1 26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.45.4.1 17-Jan-2020  ad Sync with head.
 1.45.2.1 08-Oct-2020  martin Pull up following revision(s) (requested by he in ticket #1105):

sys/arch/arm/include/arm32/vmparam.h: revision 1.56

Bump MAXDSIZ from 1536 to 1836.
1836 is 2048-128(MAXTSIZ)-64(MAXSSIZ).

Gives us a fighting chance to build rust natively.

OK'ed by skrll@
 1.57.6.1 02-Aug-2025  perseant Sync with HEAD

RSS XML Feed