Home | History | Annotate | Download | only in include
History log of /src/sys/arch/amd64/include/types.h
RevisionDateAuthorComments
 1.73  08-May-2025  imil Rename BOOTCYCLETIME kernel option and subsequent files to BOOT_DURATION
 1.72  06-May-2025  imil Add BOOTCYCLETIME option to print kernel boot time

Introduce a new kernel option, BOOTCYCLETIME, which will print
the time taken for the kernel to boot on (for now) amd64 and i386
architectures.
 1.71  01-Apr-2021  simonb branches: 1.71.22;
Whitespace: #define<tab>
 1.70  23-Jan-2021  christos branches: 1.70.2;
Document via __HAVE_BUS_SPACE_8 platforms that implement bus_space_*_8
 1.69  01-Aug-2020  jdolecek branches: 1.69.2;
move __HAVE_PCI_MSI_MSIX to <x86/pci_machdep_common.h>
 1.68  04-May-2020  jdolecek add support for using MSI for XenPV Dom0

use PHYSDEVOP_map_pirq to get the pirq/gsi for MSI/MSI-X, switch also INTx
to use it instead of PHYSDEVOP_alloc_irq_vector

MSI confirmed working with single-vector MSI for wm(4), ahcisata(4), bge(4)

XXX added some provision for MSI-X, but it doesn't actually work (no interrupts
delivered), needs some further investigation; disable MSI-X for XENPV
via flag in x86/pci/pci_machdep.c
 1.67  25-Apr-2020  bouyer Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor
 1.66  13-Apr-2020  maxv Add KASAN-DMA support on aarch64, same as amd64. Discussed with skrll@.
 1.65  17-Mar-2020  maxv branches: 1.65.2;
Add a redzone between the pcb and the stack. Sent to port-amd64@.
 1.64  14-Nov-2019  maxv Add support for Kernel Memory Sanitizer (kMSan). It detects uninitialized
memory used by the kernel at run time, and just like kASan and kCSan, it
is an excellent feature. It has already detected 38 uninitialized variables
in the kernel during my testing, which I have since discreetly fixed.

We use two shadows:
- "shad", to track uninitialized memory with a bit granularity (1:1).
Each bit set to 1 in the shad corresponds to one uninitialized bit of
real kernel memory.
- "orig", to track the origin of the memory with a 4-byte granularity
(1:1). Each uint32_t cell in the orig indicates the origin of the
associated uint32_t of real kernel memory.

The memory consumption of these shadows is consequent, so at least 4GB of
RAM is recommended to run kMSan.

The compiler inserts calls to specific __msan_* functions on each memory
access, to manage both the shad and the orig and detect uninitialized
memory accesses that change the execution flow (like an "if" on an
uninitialized variable).

We mark as uninit several types of memory buffers (stack, pools, kmem,
malloc, uvm_km), and check each buffer passed to copyout, copyoutstr,
bwrite, if_transmit_lock and DMA operations, to detect uninitialized memory
that leaves the system. This allows us to detect kernel info leaks in a way
that is more efficient and also more user-friendly than KLEAK.

Contrary to kASan, kMSan requires comprehensive coverage, ie we cannot
tolerate having one non-instrumented function, because this could cause
false positives. kMSan cannot instrument ASM functions, so I converted
most of them to __asm__ inlines, which kMSan is able to instrument. Those
that remain receive special treatment.

Contrary to kASan again, kMSan uses a TLS, so we must context-switch this
TLS during interrupts. We use different contexts depending on the interrupt
level.

The orig tracks precisely the origin of a buffer. We use a special encoding
for the orig values, and pack together in each uint32_t cell of the orig:
- a code designating the type of memory (Stack, Pool, etc), and
- a compressed pointer, which points either (1) to a string containing
the name of the variable associated with the cell, or (2) to an area
in the kernel .text section which we resolve to a symbol name + offset.

This encoding allows us not to consume extra memory for associating
information with each cell, and produces a precise output, that can tell
for example the name of an uninitialized variable on the stack, the
function in which it was pushed on the stack, and the function where we
accessed this uninitialized variable.

kMSan is available with LLVM, but not with GCC.

The code is organized in a way that is similar to kASan and kCSan, so it
means that other architectures than amd64 can be supported.
 1.63  04-Oct-2019  maxv Add DMA instrumentation in KASAN. We note the original buffer and length in
the map, and check the buffer on each bus_dmamap_sync. This allows us to
find DMA buffer overflows and UAFs, which couldn't be found before because
the device accesses to memory are outside of KASAN's control.
 1.62  23-Sep-2019  kamil Disable __NO_STRICT_ALIGNMENT on amd64/i386 for UBSan builds

This change allows to pick code paths in the kernel that are tuned for
alignment sensitive (and stricted in C meaning) code paths. In particular
the IPv6 code uses this heavily and skips whenever possible the process
of aligning of networking data.

With this modification all ATF tests are executed on amd64 without
triggering any UBSan reports in dmesg.

In theory __NO_STRICT_ALIGNMENT could be tuned for vax and m68k, however
these machines are still unsupported in LLVM sanitizers and syzkaller.

sys/netinet6/scope6.c:404:6, member access within misaligned address 0xfffffaea81276086 for type 'struct in6_addr' which requires 4 byte alignment
Reported-by: syzbot+a86f58d17685317b3df9@syzkaller.appspotmail.com

sys/net/rtsock_shared.c:629:41, member access within misaligned address 0xffffddb5db3ff04c for type 'struct rt_msghdr50' which requires 8 byte alignment
Reported-by: syzbot+0a3a022bc9d2b8880c16@syzkaller.appspotmail.com
 1.61  22-Sep-2019  maxv Fix KASAN on aarch64: the bus_space_* functions are macros, so we can't
redefine them. Introduce __HAVE_KASAN_INSTR_BUS, which indicates whether
to instrument the bus functions. Defined on amd64 only.
 1.60  06-Apr-2019  thorpej Overhaul the API used to fetch and store individual memory cells in
userspace. The old fetch(9) and store(9) APIs (fubyte(), fuword(),
subyte(), suword(), etc.) are retired and replaced with new ufetch(9)
and ustore(9) APIs that can return proper error codes, etc. and are
implemented consistently across all platforms. The interrupt-safe
variants are no longer supported (and several of the existing attempts
at fuswintr(), etc. were buggy and not actually interrupt-safe).

Also augmement the ucas(9) API, making it consistently available on
all plaforms, supporting uniprocessor and multiprocessor systems, even
those that do not have CAS or LL/SC primitives.

Welcome to NetBSD 8.99.37.
 1.59  11-Feb-2019  cherry We reorganise definitions for XEN source support as follows:

XEN - common sources required for baseline XEN support.
XENPV - sources required for support of XEN in PV mode.
XENPVHVM - sources required for support for XEN in HVM mode.
XENPVH - sources required for support for XEN in PVH mode.
 1.58  15-Nov-2018  riastradh Make the direct-map API always available, but fail if KASAN or rump.

(Only for architectures that support it at all; on others,
__HAVE_MM_MD_DIRECT_MAPPED_PHYS/IO are still undefined and the
functions unimplemented.)

This gives modules like zfs an opportunity to use it.

While here, fix the one caller of mm_md_direct_mapped_phys that
ignored the return value (and make sure to call pmap_kremove/update
before uvm_km_free).
 1.57  20-Aug-2018  maxv Add support for kASan on amd64. Written by me, with some parts inspired
from Siddharth Muralee's initial work. This feature can detect several
kinds of memory bugs, and it's an excellent feature.

It can be enabled by uncommenting these three lines in GENERIC:

#makeoptions KASAN=1 # Kernel Address Sanitizer
#options KASAN
#no options SVS

The kernel is compiled without SVS, without DMAP and without PCPU area.
A shadow area is created at boot time, and it can cover the upper 128TB
of the address space. This area is populated gradually as we allocate
memory. With this design the memory consumption is kept at its lowest
level.

The compiler calls the __asan_* functions each time a memory access is
done. We verify whether this access is legal by looking at the shadow
area.

We declare our own special memcpy/memset/etc functions, because the
compiler's builtins don't add the __asan_* instrumentation.

Initially all the mappings are marked as valid. During dynamic
allocations, we add a redzone, which we mark as invalid. Any access on
it will trigger a kASan error message. Additionally, the compiler adds
a redzone on global variables, and we mark these redzones as invalid too.
The illegal-access detection works with a 1-byte granularity.

For now, we cover three areas:

- global variables
- kmem_alloc-ated areas
- malloc-ated areas

More will come, but that's a good start.
 1.56  12-Jul-2018  maxv Remove the kernel PMC code. Sent yesterday on tech-kern@.

This change:

* Removes "options PERFCTRS", the associated includes, and the associated
ifdefs. In doing so, it removes several XXXSMPs in the MI code, which is
good.

* Removes the PMC code of ARM XSCALE.

* Removes all the pmc.h files. They were all empty, except for ARM XSCALE.

* Reorders the x86 PMC code not to rely on the legacy pmc.h file. The
definitions are put in sysarch.h.

* Removes the kern/sys_pmc.c file, and along with it, the sys_pmc_control
and sys_pmc_get_info syscalls. They are marked as OBSOL in kern,
netbsd32 and rump.

* Removes the pmc_evid_t and pmc_ctr_t types.

* Removes all the associated man pages. The sets are marked as obsolete.
 1.55  16-Mar-2018  maxv branches: 1.55.2;
Remove the __HAVE_CPU_UAREA_ROUTINES code from x86.

It was available only in amd64, and I disabled it a few months ago in
order to support SVS. Regardless of SVS this option was questionable,
since it made stack overflows more difficult to detect.
 1.54  11-Jan-2018  maxv branches: 1.54.2;
Declare new SVS_* variants: SVS_ENTER_NOSTACK and SVS_LEAVE_NOSTACK. Use
SVS_ENTER_NOSTACK in the syscall entry point, and put it before the code
that touches curlwp. (curlwp is located in the direct map.)

Then, disable __HAVE_CPU_UAREA_ROUTINES (to be removed later). This moves
the kernel stack into pmap_kernel(), and not the direct map. That's a
change I've always wanted to make: because of the direct map we can't add
a redzone on the stack, and basically, a stack overflow can go very far
in memory without being detected (as far as erasing all of the system's
memory).

Finally, unmap the direct map from userland.
 1.53  05-Jan-2018  maxv Add a __HAVE_PCPU_AREA option, enabled by default on native amd64 but not
Xen.

With this option, the CPU structures that must always be present in the
CPU's page tables are moved on L4 slot 384, which means address
0xffffc00000000000.

A new pcpu_area structure is defined. It contains shared structures (IDT,
LDT), and then an array of pcpu_entry structures, indexed by cpu_index(ci).
Theoretically the LDT should be in the array, but this will be done later.

During the boot procedure, cpu0 calls pmap_init_pcpu, which creates a
page tree that is able to map the pcpu_area structure entirely. cpu0 then
immediately maps the shared structures. Later, every CPU goes through
cpu_pcpuarea_init, which allocates physical pages and kenters the relevant
pcpu_entry to them. Finally, each pointer is replaced to point to pcpuarea.

The point of this change is to make sure that the structures that must
always be present in the page tables have their own L4 slot. Until now
their L4 slot was that of pmap_kernel, and making a distinction between
what must be mapped and what does not need to be was complicated.

Even in the non-speculative-bug case this change makes some sense: there
are several x86 instructions that leak the addresses of the CPU structures,
and putting these structures inside pmap_kernel actually offered a way to
compute the address of the kernel heap - which would have made ASLR on it
plainly useless, had we implemented that.

Note that, for now, pcpuarea does not contain rsp0.

Unfortunately this change adds many #ifdefs, and makes the code harder to
understand. There is also some duplication, but that will be solved later.
 1.52  26-Jan-2017  christos branches: 1.52.6;
provide __HAVE_COMPAT_NETBSD32 and fix multiple include protection consistently.
 1.51  27-Feb-2016  tls branches: 1.51.2; 1.51.4;
Add cpu_rng, a framework for simple on-CPU random number generators.
 1.50  23-Jan-2016  christos expose the kernel types for standalone code.
 1.49  23-Jan-2016  christos Hide {p,v}{addr,size}_t and register_t (and a couple more types that
are machine-specific) from userland unless _KERNEL/_KMEMUSER and a
new _KERNTYPES variables is defined. The _KERNTYPES should be fixed
for many subsystems that should not be using it (rump)...
 1.48  27-Aug-2015  pooka Fix PTHREAD_FOO_INITIALIZER for C++ by not using volatile in the relevant
pthread types in C++ builds, attempt 2.

The problem with attempt 1 was making assumptions of what the MD
__cpu_simple_lock_t (declared volatile) looks like. To get a same type
except non-volatile, we change the MD type to __cpu_simple_lock_nv_t
and typedef __cpu_simple_lock_t as a volatile __cpu_simple_lock_nv_t.
IMO, __cpu_simple_lock_t should not be volatile at all, but changing it
now is too risky.

Fixes at least Rumprun w/ gcc 5.1/5.2. Furthermore, the mpd application
(and possibly others) will no longer require NetBSD-specific patches.

Tested: build.sh for i386, Rumprun for x86_64 w/ gcc 5.2.

Based on the patch from Christos in lib/49989.
 1.47  21-Aug-2015  pooka Make it possible to explicitly disable MSI/MSIX with NO_PCI_MSI_MSIX.

Some platforms, e.g. linux uio-pci-generic, do not support MSI at all.

XXX: does MSI being defined intentionally depend on _KERNEL_OPT on amd64
but not i386?
 1.46  27-Apr-2015  knakahara add x86 MD MSI/MSI-X support code.
 1.45  03-Apr-2014  christos branches: 1.45.6;
we have cpu_bootconf()
 1.44  20-Mar-2014  christos make pmc compile with amd64
 1.43  01-Dec-2013  christos revert fpu/pcu changes until we figure out what's wrong; they cause random
freezes
 1.42  23-Oct-2013  drochner Use the MI "pcu" framework for bookkeeping of npx/fpu states on x86.
This reduces the amount of MD code enormously, and makes it easier
to implement support for newer CPU features which require more fpu
state, or for fpu usage by the kernel.
For access to FPU state across CPUs, an xcall kthread is used now
rather than a dedicated IPI.
No user visible changes intended.
 1.41  21-Jan-2012  chs branches: 1.41.6; 1.41.10;
allocate uareas contiguously and access them via the direct map.
 1.40  04-Dec-2011  chs map all of physical memory using large pages.
ported from openbsd years ago by Murray Armfield,
updated for changes since then by me.
 1.39  06-Jul-2011  dyoung branches: 1.39.2; 1.39.6;
Implement bus_space_tag_create() and _destroy().

Factor bus_space_reserve(), bus_space_release(), et cetera out of
bus_space_alloc(), bus_space_map(), bus_space_free(), bus_space_unmap(),
et cetera.

For i386 and amd64, activate the use of <machine/bus_defs.h> and
<machine/bus_funcs.h> by #defining __HAVE_NEW_STYLE_BUS_H in
their respective types.h. While I'm here, remove unnecessary
__HAVE_DEVICE_REGISTER #defines.
 1.38  12-Jun-2011  rmind 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.37  12-Mar-2011  joerg branches: 1.37.2;
Add TLS support for AMD64, i386 and SH3.

This material is based upon work partially supported by
The NetBSD Foundation under a contract with Joerg Sonnenberger.
 1.36  24-Feb-2011  joerg Allow storing and receiving the LWP private pointer via ucontext_t
on all platforms except VAX and IA64. Add fast access via register for
AMD64, i386 and SH3 ports. Use this fast access in libpthread to replace
the stack based pthread_self(). Implement skeleton support for Alpha,
HPPA, PowerPC, SPARC and SPARC64, but leave it disabled.

Ports that support this feature provide __HAVE____LWP_GETPRIVATE_FAST in
machine/types.h and a corresponding __lwp_getprivate_fast in
machine/mcontext.h.

This material is based upon work partially supported by
The NetBSD Foundation under a contract with Joerg Sonnenberger.
 1.35  22-Dec-2010  njoly branches: 1.35.2; 1.35.4;
__HAVE_CPU_INFO_FIRST -> __HAVE_CPU_DATA_FIRST.
 1.34  22-Dec-2010  christos Make __HAVE_CPU_DATA_FIRST true
 1.33  11-Dec-2009  matt branches: 1.33.4;
Add PRIx{P,V}{ADDR,SIZE}, PRIu{P,V}SIZE, and PRIxREGISTER{,32,64} for all
(except where they will be added via merge). These should be used to print
{p,v}{addr,size}_t and register*_t as appropriate.
 1.32  19-Apr-2009  ad cpuctl:

- Add interrupt shielding (direct hardware interrupts away from the
specified CPUs). Not documented just yet but will be soon.

- Redo /dev/cpu time_t compat so no kernel changes are needed.

x86:

- Make intr_establish, intr_disestablish safe to use when !cold.

- Distribute hardware interrupts among the CPUs, instead of directing
everything to the boot CPU.

- Add MD code for interrupt sheilding. This works in most cases but there is
a bug where delivery is not accepted by an LAPIC after redistribution. It
also needs re-balancing to make things fair after interrupts are turned
back on for a CPU.
 1.31  05-Apr-2009  tsutsui Use #define<tab> consistently.
 1.30  05-Apr-2009  tsutsui Remove __HAVE_UFS2_BOOT since it belongs to sysinst for now.
"Feel free to change it" by ad@.
 1.29  04-Apr-2009  ad +__HAVE_UFS2_BOOT
 1.28  29-Mar-2009  ad _lwp_setprivate: provide the value to MD code if a hook is present.

This will be used to support TLS. The MD method must match the ELF TLS spec
for that CPU architecture (if there is a spec).

At this time it is only implemented for i386, where it means setting the
per-thread base address for %gs. Please implement this for your platform!
 1.27  26-Oct-2008  mrg branches: 1.27.2; 1.27.8;
put the contents of these header files around #ifdef __x86_64__, and
#include the <i386/foo.h> in the #else clause, making these files
largely bit-size independant.
 1.26  21-Feb-2008  ad branches: 1.26.2; 1.26.6; 1.26.12;
#define __HAVE_ATOMIC_AS_MEMBAR, indicating that:

- atomic_cas_ni() does an implicit membar_exit()
- all other atomic operations do an implicit membar_sync()

While this might seem kind of arbitrary it's the basis for some important
optimizations.
 1.25  20-Jan-2008  joerg branches: 1.25.2;
Now that __HAVE_TIMECOUNTER and __HAVE_GENERIC_TODR are invariants,
remove the conditionals and the code associated with the undef case.
 1.24  15-Jan-2008  joerg Introduce optional cpu_offline_md to execute MD actions at the end of
cpu_offline. Use this on amd64/i386 to force a FPU save. As this was
triggered by npxsave_cpu/fpusave_cpu not working for a different CPU,
remove the cpu_info argument and adjust npxsave_*/fpusave_* to use bool
for the save.

OK ad@
 1.23  08-Jan-2008  joerg Switch Xen to generic TODR. Tested by Manuel Bouyer.
 1.22  05-Jan-2008  yamt remove no longer necessary cpu_maxproc.
 1.21  29-Nov-2007  ad branches: 1.21.6;
__HAVE_ATOMIC64_OPS
 1.20  23-Nov-2007  bouyer Include opt_xen.h #ifdef _KERNEL_OPT instead of custom logic.
Thanks to Izumi Tsutsui for pointing me at _KERNEL_OPT
 1.19  22-Nov-2007  bouyer Fix bouyer-xenamd64 merge fallout:
we can #include "opt_xen.h" when
#if defined(_KERNEL) && !defined(_RUMPKERNEL) && !defined(_LKM),
#ifdef _KERNEL isn't enough.
 1.18  22-Nov-2007  bouyer Pull up the bouyer-xenamd64 branch to HEAD. This brings in amd64 support
to NetBSD/Xen, both Dom0 and DomU.
 1.17  17-Oct-2007  garbled branches: 1.17.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.16  14-Jul-2007  ad branches: 1.16.8; 1.16.10; 1.16.14;
Generic soft interrupts are mandatory.
 1.15  09-Feb-2007  ad branches: 1.15.6; 1.15.12; 1.15.14;
Merge newlock2 to head.
 1.14  03-Sep-2006  perry branches: 1.14.2;
temporarily turn on "__HAVE_GENERIC_TODR"
 1.13  03-Sep-2006  bjh21 Nothing in the kernel now tests __HAVE_NWSCONS, so stop defining it everywhere.
 1.12  07-Jun-2006  kardel convert to timecounters (from branch simonb-timecounters)
 1.11  24-Dec-2005  perry branches: 1.11.4; 1.11.6; 1.11.8; 1.11.14;
Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
 1.10  11-Dec-2005  christos merge ktrace-lwp.
 1.9  26-Mar-2004  drochner branches: 1.9.16;
nothing cares about __HAVE_SIGINFO anymore, so nuke it
 1.8  21-Jan-2004  mrg back out previous; it was only required for a dead function.
 1.7  20-Jan-2004  jdolecek add register64_t which appears to be necessary for COMPAT_NETBSD32 nowadays
 1.6  18-Jan-2004  martin Do not export __HAVE_RAS to userland. Applications are supposed to try
rasctl() and detect failure with EOPNOTSUPP.
 1.5  06-Oct-2003  fvdl SIGINFO support.
Todo: 32bit compat support (COMPAT_NETBSD32 will not compile right now,
as it won't on other platforms).
 1.4  26-Sep-2003  nathanw Move __cpu_simple_lock_t and __SIMPLELOCK_{UN,}LOCKED to machine/types.h
so that they can be used in a namespace-friendly way.
 1.3  07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22364, verified by myself.
 1.2  28-Apr-2003  bjh21 branches: 1.2.2;
Add a new feature-test macro, _NETBSD_SOURCE. If this is defined
by the application, all NetBSD interfaces are made visible, even
if some other feature-test macro (like _POSIX_C_SOURCE) is defined.
<sys/featuretest.h> defined _NETBSD_SOURCE if none of _ANSI_SOURCE,
_POSIX_C_SOURCE and _XOPEN_SOURCE is defined, so as to preserve
existing behaviour.

This has two major advantages:
+ Programs that require non-POSIX facilities but define _POSIX_C_SOURCE
can trivially be overruled by putting -D_NETBSD_SOURCE in their CFLAGS.
+ It makes most of the #ifs simpler, in that they're all now ORs of the
various macros, rather than having checks for (!defined(_ANSI_SOURCE) ||
!defined(_POSIX_C_SOURCE) || !defined(_XOPEN_SOURCE)) all over the place.

I've tried not to change the semantics of the headers in any case where
_NETBSD_SOURCE wasn't defined, but there were some places where the
current semantics were clearly mad, and retaining them was harder than
correcting them. In particular, I've mostly normalised things so that
_ANSI_SOURCE gets you the smallest set of stuff, then _POSIX_C_SOURCE,
_XOPEN_SOURCE and _NETBSD_SOURCE in that order.

Tested by building for vax, encouraged by thorpej, and uncontested in
tech-userlevel for a week.
 1.1  26-Apr-2003  fvdl Rename the x86_64 port to amd64, as this is the actual name used for
the processor family now. x86_64 is kept as the MACHINE_ARCH value,
since it's already widely used (by e.g. the toolchain, etc), and
by other operating systems.
 1.2.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.2.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.2.2.1  03-Aug-2004  skrll Sync with HEAD
 1.9.16.9  27-Feb-2008  yamt sync with head.
 1.9.16.8  21-Jan-2008  yamt remove __HAVE_LAZY_MBUF for now as it's incompatible with in_cksum.S.
 1.9.16.7  21-Jan-2008  yamt sync with head
 1.9.16.6  07-Dec-2007  yamt sync with head
 1.9.16.5  03-Sep-2007  yamt sync with head.
 1.9.16.4  26-Feb-2007  yamt sync with head.
 1.9.16.3  30-Dec-2006  yamt sync with head.
 1.9.16.2  21-Jun-2006  yamt sync with head.
 1.9.16.1  07-Jul-2005  yamt define __HAVE_LAZY_MBUF for i386 and amd64.
 1.11.14.1  19-Jun-2006  chap Sync with head.
 1.11.8.2  14-Sep-2006  yamt sync with head.
 1.11.8.1  26-Jun-2006  yamt sync with head.
 1.11.6.1  30-Apr-2006  kardel define __HAVE_TIMECOUNER -> switch to timcounter for amd64
 1.11.4.1  09-Sep-2006  rpaulo sync with head
 1.14.2.1  29-Dec-2006  ad Checkpoint work in progress.
 1.15.14.1  03-Oct-2007  garbled Sync with HEAD
 1.15.12.1  17-Apr-2007  thorpej amd64 has 64-bit atomic ops
 1.15.6.2  03-Dec-2007  ad Sync with HEAD.
 1.15.6.1  15-Jul-2007  ad Sync with head.
 1.16.14.1  17-Oct-2007  bouyer amd64 (aka x86-64) support for Xen. Based on the OpenBSD port done by
Mathieu Ropert in 2006.
DomU-only for now. An INSTALL_XEN3_DOMU kernel with a ramdisk will boot to
sysinst if you're lucky. Often it panics because a runable LWP has
a NULL stack (really, it's all of l->l_addr which is has been zeroed out
while the process was on the queue !)
TODO:
- bug fixes :)
- Most of the xpq_* functions should be shared with xen/i386
- The xen/i386 assembly bootstrap code should be remplaced with the C
version in xenamd64/amd64/xpmap.c
- see if a config(5) trick could allow to merge xenamd64 back to xen or amd64.
 1.16.10.3  23-Mar-2008  matt sync with HEAD
 1.16.10.2  09-Jan-2008  matt sync with HEAD
 1.16.10.1  06-Nov-2007  matt sync with HEAD
 1.16.8.2  03-Dec-2007  joerg Sync with HEAD.
 1.16.8.1  27-Nov-2007  joerg Sync with HEAD. amd64 Xen support needs testing.
 1.17.2.2  18-Feb-2008  mjf Sync with HEAD.
 1.17.2.1  08-Dec-2007  mjf Sync with HEAD.
 1.21.6.4  23-Jan-2008  bouyer Sync with HEAD.
 1.21.6.3  19-Jan-2008  bouyer Sync with HEAD
 1.21.6.2  10-Jan-2008  bouyer Sync with HEAD
 1.21.6.1  08-Jan-2008  bouyer Sync with HEAD
 1.25.2.1  24-Mar-2008  keiichi sync with head.
 1.26.12.1  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.26.6.2  11-Mar-2010  yamt sync with head
 1.26.6.1  04-May-2009  yamt sync with head.
 1.26.2.2  17-Jan-2009  mjf Sync with HEAD.
 1.26.2.1  21-Feb-2008  mjf file types.h was added on branch mjf-devfs2 on 2009-01-17 13:27:49 +0000
 1.27.8.6  27-Aug-2011  jym Sync with HEAD. Most notably: uvm/pmap work done by rmind@, and MP Xen
work of cherry@.

No regression observed on suspend/restore.
 1.27.8.5  28-Mar-2011  jym Sync with HEAD. TODO before merge:
- shortcut for suspend code in sysmon, when powerd(8) is not running.
Borrow ``xs_watch'' thread context?
- bug hunting in xbd + xennet resume. Rings are currently thrashed upon
resume, so current implementation force flush them on suspend. It's not
really needed.
 1.27.8.4  10-Jan-2011  jym Sync with HEAD
 1.27.8.3  24-Oct-2010  jym Sync with HEAD
 1.27.8.2  01-Nov-2009  jym Sync with HEAD.
 1.27.8.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.27.2.1  28-Apr-2009  skrll Sync with HEAD.
 1.33.4.3  21-Apr-2011  rmind sync with head
 1.33.4.2  05-Mar-2011  rmind sync with head
 1.33.4.1  18-Mar-2010  rmind Unify /dev/{mem,kmem,zero,null} implementations in MI code. Based on patch
from Joerg Sonnenberger, proposed on tech-kern@, in February 2008.

Work and depression still in progress.
 1.35.4.1  05-Mar-2011  bouyer Sync with HEAD
 1.35.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.37.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.39.6.1  18-Feb-2012  mrg merge to -current.
 1.39.2.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.39.2.1  17-Apr-2012  yamt sync with head
 1.41.10.1  18-May-2014  rmind sync with head
 1.41.6.2  03-Dec-2017  jdolecek update from HEAD
 1.41.6.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.45.6.4  05-Feb-2017  skrll Sync with HEAD
 1.45.6.3  19-Mar-2016  skrll Sync with HEAD
 1.45.6.2  22-Sep-2015  skrll Sync with HEAD
 1.45.6.1  06-Jun-2015  skrll Sync with HEAD
 1.51.4.1  21-Apr-2017  bouyer Sync with HEAD
 1.51.2.1  20-Mar-2017  pgoyette Sync with HEAD
 1.52.6.2  17-Mar-2018  martin Pull up the following revisions, requested by maxv in ticket #637:

sys/arch/amd64/amd64/process_machdep.c 1.33,1.34,1.35 (patch)
sys/arch/amd64/include/types.h 1.55 (patch)
sys/arch/x86/x86/vm_machdep.c 1.33 (patch)

- Reduce the number of places where segment register faults can
occur.
- Remove __HAVE_CPU_UAREA_ROUTINES.
 1.52.6.1  16-Mar-2018  martin Pull up the following revisions (via patch), requested by maxv in #635:

sys/arch/amd64/amd64/gdt.c 1.39-1.45 (patch)
sys/arch/amd64/amd64/amd64/machdep.c 1.284,1.287,1.288 (patch)
sys/arch/amd64/amd64/include/param.h 1.23 (patch)
sys/arch/amd64/include/types.h 1.53 (patch)
sys/arch/x86/include/cpu.h 1.87 (patch)
sys/arch/x86/include/pmap.h 1.73,1.74 (patch)
sys/arch/x86/x86/cpu.c 1.142 (patch)
sys/arch/x86/x86/intr.c 1.117 (partial),1.120 (patch)
sys/arch/x86/x86/pmap.c 1.276 (patch)

Initialize ist0 in cpu_init_tss.
Backport __HAVE_PCPU_AREA.
 1.54.2.4  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.54.2.3  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.54.2.2  28-Jul-2018  pgoyette Sync with HEAD
 1.54.2.1  22-Mar-2018  pgoyette Synch with HEAD, resolve conflicts
 1.55.2.4  21-Apr-2020  martin Sync with HEAD
 1.55.2.3  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.55.2.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.55.2.1  10-Jun-2019  christos Sync with HEAD
 1.65.2.1  20-Apr-2020  bouyer Sync with HEAD
 1.69.2.1  03-Apr-2021  thorpej Sync with HEAD.
 1.70.2.1  03-Apr-2021  thorpej Sync with HEAD.
 1.71.22.1  02-Aug-2025  perseant Sync with HEAD

RSS XML Feed