freebsd-dev/sys/amd64/include
John Baldwin c6a37e8413 Divorce critical sections from spinlocks. Critical sections as denoted by
critical_enter() and critical_exit() are now solely a mechanism for
deferring kernel preemptions.  They no longer have any affect on
interrupts.  This means that standalone critical sections are now very
cheap as they are simply unlocked integer increments and decrements for the
common case.

Spin mutexes now use a separate KPI implemented in MD code: spinlock_enter()
and spinlock_exit().  This KPI is responsible for providing whatever MD
guarantees are needed to ensure that a thread holding a spin lock won't
be preempted by any other code that will try to lock the same lock.  For
now all archs continue to block interrupts in a "spinlock section" as they
did formerly in all critical sections.  Note that I've also taken this
opportunity to push a few things into MD code rather than MI.  For example,
critical_fork_exit() no longer exists.  Instead, MD code ensures that new
threads have the correct state when they are created.  Also, we no longer
try to fixup the idlethreads for APs in MI code.  Instead, each arch sets
the initial curthread and adjusts the state of the idle thread it borrows
in order to perform the initial context switch.

This change is largely a big NOP, but the cleaner separation it provides
will allow for more efficient alternative locking schemes in other parts
of the kernel (bare critical sections rather than per-CPU spin mutexes
for per-CPU data for example).

Reviewed by:	grehan, cognet, arch@, others
Tested on:	i386, alpha, sparc64, powerpc, arm, possibly more
2005-04-04 21:53:56 +00:00
..
pc PC98 will never be defined for amd64 2005-01-05 20:11:13 +00:00
_inttypes.h Commit MD parts of a loosely functional AMD64 port. This is based on 2003-05-01 01:05:25 +00:00
_limits.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
_stdint.h <stdint.h> should define WINT_M{AX,IN} independent from whether WCHAR_MIN is 2004-05-18 16:04:57 +00:00
_types.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
acpica_machdep.h Move the code for halting the CPU (acpi_cpu_c1) into machdep files. 2004-10-11 05:39:15 +00:00
apicreg.h JumboMFi386: use bitmapped IPI handler. Update elcr and default mptable 2005-01-21 06:01:20 +00:00
apicvar.h MFi386: Bring over John's local apic timer code 2005-02-28 23:37:35 +00:00
asm.h Argh. Add the mini-stack-frame back in for mcount's benefit for syscall 2004-06-10 22:02:26 +00:00
asmacros.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
atomic.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
bus_amd64.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
bus_dma.h Refactor the bus_dma header files so that the interface is described in 2005-03-14 16:46:28 +00:00
bus_memio.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
bus_pio.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
bus.h AMD64 physical space is much larger than i386, de-i386 the bus_space and 2003-05-12 02:44:37 +00:00
clock.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
cpu.h Instead of calling ia32_pause() conditionally on __i386__ or __amd64__ 2004-08-03 18:44:27 +00:00
cpufunc.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
cputypes.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
db_machdep.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
elf.h Add style(9) foolishness. 2004-08-03 08:21:48 +00:00
endian.h Match i386 rev 1.38 with __cplusplus support 2005-03-11 21:46:01 +00:00
exec.h Use a common multi-inclusion protection, and add such a 2005-02-19 21:16:48 +00:00
float.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
floatingpoint.h The file machine/ieeefp.h needs sys/cdefs.h on amd64 and i386 after my 2005-04-02 17:31:42 +00:00
fpu.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
frame.h Remove obsolete prototype of kdb_trap(). 2004-07-10 22:39:56 +00:00
gdb_machdep.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
ieeefp.h Remove fpsetsticky(). This was added for SysV compatibility, but due 2005-03-15 15:53:39 +00:00
in_cksum.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
intr_machdep.h JumboMFi386: use bitmapped IPI handler. Update elcr and default mptable 2005-01-21 06:01:20 +00:00
iodev.h Break out the MI part of the /dev/[k]mem and /dev/io drivers into 2004-08-01 11:40:54 +00:00
kdb.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
legacyvar.h MFi386: numerous interrupt and acpi updates 2004-05-16 20:30:47 +00:00
limits.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
md_var.h Remove atdevbase and replace it's remaining uses with direct references to 2004-06-10 20:31:00 +00:00
memdev.h Break out the MI part of the /dev/[k]mem and /dev/io drivers into 2004-08-01 11:40:54 +00:00
metadata.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
mp_watchdog.h Add an "options MP_WATCHDOG" to i386. This option allows one of the 2004-08-15 18:02:09 +00:00
mptable.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
mutex.h Kill the ASM versions of the mtx_lock_spin and friends. They were never 2003-12-06 23:17:18 +00:00
param.h MFi386: whitespace, copyright header, etc updates 2005-01-21 05:56:41 +00:00
pcb_ext.h Commit MD parts of a loosely functional AMD64 port. This is based on 2003-05-01 01:05:25 +00:00
pcb.h Implement makectx(). The makectx() function is used by KDB to create 2004-07-10 19:56:00 +00:00
pci_cfgreg.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
pcpu.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
pmap.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
proc.h Divorce critical sections from spinlocks. Critical sections as denoted by 2005-04-04 21:53:56 +00:00
profile.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
psl.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
ptrace.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
reg.h Remove advertising clause from University of California Regent's license, 2004-04-05 23:55:14 +00:00
reloc.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
resource.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
runq.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
segments.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
setjmp.h Make this more compatable with libc_r. Make the internal types for storing 2003-06-02 21:49:35 +00:00
sf_buf.h MFi386: Update alc's copyright notice 2005-02-28 23:38:15 +00:00
sigframe.h Commit MD parts of a loosely functional AMD64 port. This is based on 2003-05-01 01:05:25 +00:00
signal.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
smp.h MFi386: Bring over John's local apic timer code 2005-02-28 23:37:35 +00:00
specialreg.h Initial PG_NX support (no-execute page bit) 2004-06-08 01:02:52 +00:00
stdarg.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
sysarch.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
trap.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
tss.h Remove advertising clause from University of California Regent's license, 2004-04-05 21:29:41 +00:00
ucontext.h Update the graffiti. 2003-11-08 04:39:22 +00:00
varargs.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
vmparam.h Raise MAXDSIZ from 8G to 32G. The old limit was just an arbitary choice 2004-10-27 17:21:15 +00:00