Age | Commit message (Collapse) | Author |
|
order problems.
ok sthen@
|
|
Xen delivers about 20 seconds worth of missed LAPIC timer events
after we enable interrupts on application CPUs and this makes us
recurse and burn the stack.
OK kettenis, guenther, deraadt, "good find" mlarkin
|
|
"shared reference pointers".
srp allows concurrent access to a data structure by multiple cpus
while avoiding interlocking cpu opcodes. it manages its own reference
counts and the garbage collection of those data structure to avoid
use after frees.
internally srp is a twisted version of hazard pointers, which are
a relative of RCU.
jmatthew wrote the bulk of a hazard pointer implementation and
changed bpf to use it to allow mpsafe access to bpfilters. however,
at s2k15 we were trying to apply it to other data structures but
the memory overhead of every hazard pointer would have blown out
significantly in several uses cases. a bulk of our time at s2k15
was spent reworking hazard pointers into srp.
this diff adds the srp api and adds the necessary metadata to struct
cpuinfo on our MP architectures. srp on uniprocessor platforms has
alternate code that is optimised because it knows there'll be no
concurrent access to data by multiple cpus.
srp is made available to the system via param.h, so it should be
available everywhere in the kernel.
the docs likely need improvement cos im too close to the implementation.
ok mpi@
|
|
ok kettenis@
|
|
ago and I forgot to commit this until now.
From Wei Liu <wei.liu2 at citrix.com>
ok mikeb@, guenther@, ratchov@
|
|
ok guenther@, millert@
|
|
registers. This lets us kill the special handling of pid 1 in fork and
merge {proc,child}_trampoline(). Do the same if ptrace(PT_SETREGS) is used
to modify registers.
ok mlarkin@ kettenis@
|
|
|
|
Don't skip the AST check when returning from *fork() in the child.
Make sure to count interrupts even when they're deferred or stray.
testing by krw@, and then many via snapshots
|
|
inside MP_LOCKDEBUG.
|
|
|
|
address widths in 1st-gen amd64 cpus.
ok kettenis, deraadt, guenther
|
|
after kernel bss but before end of the image, the page tables used
the read-only mapping of the hole. When booting a small non-generic
kernel, this resulted in a crash, while writing to the page tables
later.
Make sure that the page tables are created after esym and after
end.
OK mlarkin@ deraadt@
|
|
with acpi.
OK mlarkin@
|
|
done by introducining a magic offset. Pages below this offset are mapped
with default memory attributes. Above this offset pages are mapped write
combining.
ok mlarkin@
|
|
from tilo stritzky
thanks miod for help with the diff, and who also noted that
leading whitespace gets stripped too;
|
|
testing by many, particularly krw@ and jcs@
tweaks by kettenis@
ok deraadt@
|
|
one of the cases was reached. Matches other parts of the mpbios code.
|
|
|
|
truncating trailing zeros.
Testing by many as part of a larger change to use ACPI _CST objects
ok krw@
|
|
|
|
|
|
similiar lines so drm shouldn't either.
|
|
|
|
|
|
bits from it.
ok krw@ kettenis@
|
|
requested by and ok mlarkin@
|
|
segment registers in cpu_switchto if the old thread had made it to userspace
and restoring FS.base only on first return to userspace since context switch.
ok mlarkin@
|
|
OK miod@
|
|
diff from natano@bitrig, with some additional format and cast tweaks
|
|
archs and different sized disk sectors. Make MBR have higher priority
than GPT. Add many paranoia checks and associated DPRINTF's to make
further development easier. Keep everything hidden behind #ifdef
GPT.
Tested and ok doug@ mpi@. Nothing bad seen by millert@.
|
|
delete coredump_trad(), uvm_coredump(), cpu_coredump(), struct md_coredump,
and various #includes that are superfluous.
This leaves compat_linux processes without a coredump callback. If that
ability is desired, someone should update it to use coredump_elf32() and
verify the results...
ok kettenis@
|
|
|
|
had a proper stdint.h. No ports fallout. OK guenther@ miod@
|
|
the binutils 2.17 linker doesn't make them disappear.
ok deraadt@, guenther@
|
|
the extra CLD instructions from when that wasn't true
testing miod@ krw@
|
|
|
|
struct device so there is enough space in the buffer for a NUL and
the unit is included in the string.
discussed with deraadt and millert
|
|
This is currently only enabled on hypervisors because on real hardware, it
requires interrupt remapping which we don't support yet. But on virtualization
it reduces the number of vmexits required per IPI from 4 to 1, causing a
significant speed-up for MP guests.
ok kettenis@
|
|
Noticed by mlarkin@
|
|
interpretation of it isn't quite right. So instead of allocating memory
and slicing it based on the parameters returned by CPUID, simply use a member
in struct cpu_info like basically all other OSes out there do. Our struct
cpu_info is large enough to never cause any overlap. This makes the
mwait-based idle loop actually work. We still execute the CPUID instruction
to make sure monitor/mwait is properly supported by the hardware we're
running on.
ok sthen@, deraadt@, guenther@
|
|
EIP/RIP adjustment for ERESTART
ok mlarkin@
|
|
unification...
|
|
|
|
|
|
"sure" deraadt@
|
|
the interrupt frame was at the same address as the frame that was interrupted.
Correct the calculated frame pointer for the interrupt frame to have the same
offset to the struct trapframe on the stack as does syscall and trap.
ok kettenis@ mlarkin@
|
|
entering/leaving a signal handler like we already do the the FPU and SSE
state. This should make it possible to use AVX instructions in signal
handlers.
ok mlarkin@
|
|
it with respect to other instructions.
ok gunether@, mlarkin@
|
|
they do "interesting" things with APIs i want to change, and i can't
find any evidence anyone uses them anymore. instead of burning time
on changes i cant test, ill take a chance that noone will miss them.
no objections from anyone
ok mpi@ deraadt@ henning@ sthen@
|