1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-22 15:47:37 +00:00
freebsd/sys/ia64
Marcel Moolenaar c412551667 Change the management of nested faults by switching to physical
addressing while reading or writing the trap frame. It's not
possible to guarantee that the one translation cache entry that
we depend on is not going to get purged by the CPU. We already
know that global shootdowns (ptc.g and/or ptc.ga) can (and will)
cause multiple TC entries to get purged and we initialize tried
to handle that by serializing kernel entry with these operations.
However, we need to serialize kernel exit as well.

But even if we can serialize, it appears that CPU threads within
a core can affect each other's TC entries beyond the global
shootdown. This would mean serializing any and all translatation
cache updates with the threads in a core with the kernel entry
and exit of any thread in that core. This is just too painful
and complicated.

Since we already properly coded for the 2 nested faults that we
can get, all we need to do is use those to obtain the physical
address of the trap frame, switch to physical mode and in that
way eliminate any further faults. The trap frame is already
aligned to 1KB boundaries to make sure we don't cross the page
boundary, this is safe to do.

We still need to serialize ptc.g or ptc.ga across CPUs because
the platform can only have 1 such operation outstanding at the
same time. We can now use a regular (spin) lock for this.

Also, it has been observed that we can get a nested TLB faults
for region 7 virtual addresses. This was unexpected. For now,
we enhance the nested TLB fault handler to deal with those as
well, but it needs to be understood.
2011-06-30 20:34:55 +00:00
..
acpica Improve cpu_idle(): 2011-06-06 19:06:15 +00:00
compile
conf Use a non-standard page size that is supported. 2011-06-21 12:38:40 +00:00
disasm
ia32 Add support for executing the FreeBSD 1/i386 a.out binaries on amd64. 2011-04-01 11:16:29 +00:00
ia64 Change the management of nested faults by switching to physical 2011-06-30 20:34:55 +00:00
include Switch to the event timers infrastructure. This includes: 2011-06-25 02:15:14 +00:00
isa Retire isa_setup_intr() and isa_teardown_intr() and use the generic bus 2011-05-06 13:48:53 +00:00
pci