Home | History | Annotate | Download | only in x86
History log of /src/sys/arch/x86/x86/idt.c
RevisionDateAuthorComments
 1.17  20-Aug-2022  riastradh x86: Split most of pmap.h into pmap_private.h or vmparam.h.

This way pmap.h only contains the MD definition of the MI pmap(9)
API, which loads of things in the kernel rely on, so changing x86
pmap internals no longer requires recompiling the entire kernel every
time.

Callers needing these internals must now use machine/pmap_private.h.
Note: This is not x86/pmap_private.h because it contains three parts:

1. CPU-specific (different for i386/amd64) definitions used by...

2. common definitions, including Xenisms like xpmap_ptetomach,
further used by...

3. more CPU-specific inlines for pmap_pte_* operations

So {amd64,i386}/pmap_private.h defines 1, includes x86/pmap_private.h
for 2, and then defines 3. Maybe we should split that out into a new
pmap_pte.h to reduce this trouble.

No functional change intended, other than that some .c files must
include machine/pmap_private.h when previously uvm/uvm_pmap.h
polluted the namespace with pmap internals.

Note: This migrates part of i386/pmap.h into i386/vmparam.h --
specifically the parts that are needed for several constants defined
in vmparam.h:

VM_MAXUSER_ADDRESS
VM_MAX_ADDRESS
VM_MAX_KERNEL_ADDRESS
VM_MIN_KERNEL_ADDRESS

Since i386 needs PDP_SIZE in vmparam.h, I added it there on amd64
too, just to keep things parallel.
 1.16  13-Feb-2022  riastradh x86: Membar audit in idt.c.

- idt_vec_free/alloc are obviously supposed to synchronize with a
happens-before relation, so use release/acquire.

- There is no store-before-load ordering needed, so omit membar_sync.
 1.15  23-Dec-2021  yamaguchi x86: improve error handling related to idt_vec_alloc()
 1.14  14-Jul-2020  para mark diagused variable as such

fixing non DIAGNOSTIC builds
 1.13  14-Jul-2020  yamaguchi Introduce per-cpu IDTs

This is realized by following modifications:
- Add IDT pages and its allocation maps for each cpu in "struct cpu_info"
- Load per-cpu IDTs at cpu_init_idt(struct cpu_info*)
- Copy the IDT entries for cpu0 to other CPUs at attach
- These are, for example, exceptions, db, system calls, etc.

And, added a kernel option named PCPU_IDT to enable the feature.
 1.12  04-Jul-2020  bouyer Fix unset_idtgate() for XENPV, pointed out by yamaguchi@
 1.11  17-Jun-2019  msaitoh KNF. No functional change.
 1.10  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.9  18-Oct-2018  cherry Make compile-time type differentiation more explicit.
 1.8  23-Sep-2018  cherry Fix for i386, functionality intended in:
http://mail-index.netbsd.org/source-changes/2018/09/23/msg099357.html

This should fix the build for both GENERIC and XEN3PAE_DOM0

This has not been boot tested on native or xen3pae

Notes: pmap_changeprot_local() seems to be x86_64 only.
I was a bit surprised by this initially, but I suspect that the table
protections are enforced via ring0/ring1 fencing rather than page protections

the gdt registration code in i386 is still messy. I will leave it as is
for now - to avoid a rabbit hole.
 1.7  23-Sep-2018  cherry Make XEN use the same api as native, for idt vector allocation
and registration.

lidt() placed in xenfunc() on maxv@ suggestion.

There should be no functional change due to this commit.

Tested on amd64 native and XEN.
 1.6  04-Nov-2017  cherry branches: 1.6.2; 1.6.4;
In XEN PV, the idt vector table is not required to be altered at
runtime, since only entries for exceptions/traps are registered with
the hypervisor and interrupts are managed via a completely different
mechanism.

This change uses the idt_vec_reserve() mechanism nevertheless,
modifying it slightly to only do namespace management in XEN, while on
native it will continue to do idt entry init as before.

Rationale: Consistent API usage and potential future merging of
XEN/non-XEN code.

There are no functional changes in this commit.
 1.5  07-Aug-2017  maxv Remove incorrect KASSERT, only the allocation is protected by cpu_lock.
 1.4  27-Aug-2016  maxv branches: 1.4.8;
Remove idt_init.
 1.3  19-Apr-2009  ad branches: 1.3.22; 1.3.40;
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.2  28-Apr-2008  martin branches: 1.2.8; 1.2.14;
Remove clause 3 and 4 from TNF licenses
 1.1  26-Dec-2007  yamt branches: 1.1.2; 1.1.4; 1.1.6; 1.1.8; 1.1.10; 1.1.16; 1.1.18; 1.1.20;
- share idt entry allocation code among x86.
- introduce a function to reserve an idt entry and use it instead of
manipulating idt_allocmap directly.
- rename idt to xen_idt for amd64 xen. add missing #ifdef XEN.
 1.1.20.2  04-May-2009  yamt sync with head.
 1.1.20.1  16-May-2008  yamt sync with head.
 1.1.18.1  18-May-2008  yamt sync with head.
 1.1.16.1  02-Jun-2008  mjf Sync with HEAD.
 1.1.10.2  18-Feb-2008  mjf Sync with HEAD.
 1.1.10.1  26-Dec-2007  mjf file idt.c was added on branch mjf-devfs on 2008-02-18 21:05:17 +0000
 1.1.8.2  21-Jan-2008  yamt sync with head
 1.1.8.1  26-Dec-2007  yamt file idt.c was added on branch yamt-lazymbuf on 2008-01-21 09:40:14 +0000
 1.1.6.2  09-Jan-2008  matt sync with HEAD
 1.1.6.1  26-Dec-2007  matt file idt.c was added on branch matt-armv6 on 2008-01-09 01:49:55 +0000
 1.1.4.2  02-Jan-2008  bouyer Sync with HEAD
 1.1.4.1  26-Dec-2007  bouyer file idt.c was added on branch bouyer-xeni386 on 2008-01-02 21:51:24 +0000
 1.1.2.2  26-Dec-2007  ad Sync with head.
 1.1.2.1  26-Dec-2007  ad file idt.c was added on branch vmlocking2 on 2007-12-26 19:17:18 +0000
 1.2.14.2  01-Nov-2009  jym Sync with HEAD.
 1.2.14.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.2.8.1  28-Apr-2009  skrll Sync with HEAD.
 1.3.40.2  28-Aug-2017  skrll Sync with HEAD
 1.3.40.1  05-Oct-2016  skrll Sync with HEAD
 1.3.22.1  03-Dec-2017  jdolecek update from HEAD
 1.4.8.1  25-Aug-2017  snj Pull up following revision(s) (requested by jdolecek in ticket #224):
sys/arch/x86/x86/idt.c: revision 1.5
Remove incorrect KASSERT, only the allocation is protected by cpu_lock.
 1.6.4.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.6.4.1  10-Jun-2019  christos Sync with HEAD
 1.6.2.2  20-Oct-2018  pgoyette Sync with head
 1.6.2.1  30-Sep-2018  pgoyette Ssync with HEAD

RSS XML Feed