Hi all,
I tried to make an IDT per-cpu. The patch is here:
http://www.netbsd.org/~yamaguchi/pcpu-idt.patch
The summary of modifications is as follows.
- Add an IDT pointer and idt_allocmap into struct cpu_info
- Change prototype of cpu_init_idt()
- void => struct cpu_info*
- for loading an IDT address in struct cpu_info*
- Copy a part of IDT entries from cpu 0 at attaching a CPU
- for the same entries, for example, exceptions, db, etc.
This function can be enabled by PCPU_IDT option that is newly provided.