Age | Commit message (Collapse) | Author |
|
|
|
* pool_allocator_single: single page allocator, always interrupt safe
* pool_allocator_multi: multi-page allocator, interrupt safe
* pool_allocator_multi_ni: multi-page allocator, not interrupt-safe
ok deraadt@, dlg@
|
|
ok deraadt@
|
|
stated here as I have been asked to be polite in this commit message.
ok deraadt@
|
|
|
|
|
|
|
|
|
|
the previous asserts checked if the mutex was locked by any cpu or
not when they should have been checking if the current cpu has the
lock or not.
found by miod after i enabled pool_gc again.
ok miod@
|
|
"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@
|
|
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@
|
|
|
|
This is basically glue codes attaching pcic(4) at cbus(4/luna88k),
based on src/sys/dev/isa/i82365_isa{,subr}.c.
Tested on some ne(4) network interface cards, wdc(4) with a CF memory
card, and com(4) with an old XJACK modem card. Currently wi(4) does
not work yet.
suggestions and ok miod@
|
|
Use this on vax to correctly pick the end of the stack area now that the
stackgap adjustment code will no longer guarantee it is a fixed location.
|
|
with and ok miod@
|
|
each arch used to have to provide an rw_cas operation, but now we
have the rwlock code build its own version. on smp machines it uses
atomic_cas_ulong. on uniproc machines it avoids interlocked
instructions by using straight loads and stores. this is safe because
rwlocks are only used from process context and processes are currently
not preemptible in our kernel. so alpha/ppc/etc might get a benefit.
ok miod@ kettenis@ deraadt@
|
|
ok guenther@
|
|
- rename uiomove() to uiomovei() and update all its users.
- introduce uiomove(), which is similar to uiomovei() but with a size_t.
- rewrite uiomovei() as an uiomove() wrapper.
ok kettenis@
|
|
|
|
not necessary, but consistent with other platforms. ok deraadt
|
|
automagically if copyout() of the signal frame faults.
|
|
|
|
PROT_NONE, PROT_READ, PROT_WRITE, and PROT_EXEC from mman.h.
PROT_MASK is introduced as the one true way of extracting those bits.
Remove UVM_ADV_* wrapper, using the standard names.
ok doug guenther kettenis
|
|
|
|
|
|
|
|
void **. the latter is really hard to cast for, and not what what
solaris does.
ok kettenis@
|
|
routine.
|
|
atomic_cas_uint_mp.
Also, make the interprocessor interlock the only thing on its cache line.
|
|
ok mpi@ sthen@
|
|
compile again; tested by aoyama@
|
|
after discussions with beck deraadt kettenis.
|
|
* you can #include <sys/endian.h> instead of <machine/endian.h>,
and ditto <endian.h> (fixes code that pulls in <sys/endian.h> first)
* those will always export the symbols that POSIX specified for
<endian.h>, including the new {be,le}{16,32,64}toh() set. c.f.
http://austingroupbugs.net/view.php?id=162
if __BSD_VISIBLE then you also get the symbols that our <machine/endian.h>
currently exports (ntohs, NTOHS, dlg's bemtoh*, etc)
* when doing POSIX compiles (not __BSD_VISIBLE), then <netinet/in.h> and
<arpa/inet.h> will *stop* exporting the extra symbols like BYTE_ORDER
and betoh*
ok deraadt@
|
|
The new CPU_BUSY_CYCLE() may be put in a busy loop body so that CPU can reduce
power consumption, as Linux's cpu_relax() and FreeBSD's cpu_spinwait(). To
start minimally, use PAUSE on i386/amd64 and empty on others. The name is
chosen following the existing cpu_idle_*() functions. Naming and API may be
polished later.
OK kettenis@
|
|
not compile-time-known page size platforms.
|
|
precise exceptions, as the actual data the FPU gives us is a 35-bit number,
with the exponent sign-extended to the double-precision exponent width.
Make sure we shrink it and fetch the remaining three low bits of mantissa from
the LS registers.
|
|
is `not comparable'. gcc relies upon `not equal' being set when comparing
numbers to infinities.
|
|
ptrace operation on MP kernels.
|
|
denormal results) with C code using softfloat to correctly round the inexact
results in the best possible way according to the current rounding mode.
No functional change intended, and this assembly code was surprisingly almost
non-buggy, as opposed to the precise exception code replaced a few weeks ago;
still an improvement as this replaces 900 lines of arcane assembly with 90
lines of understandable C code.
|
|
fault handling with a C wrapper around the softfloat code, as already done for
88110 kernels.
As a bonus, attempting to read or write FPU control registers but fcr62 and
fcr63 in userland will now correctly signal an illegal instruction, instead
of leaving the destination register unchanged and pretending nothing bad
happened.
Be sure to rm m88100_fp.d in your kernel compile directory after updating your
tree.
|
|
|
|
|
|
|
|
exceptions, one for the imprecise exceptions. No functional change.
|
|
been doing this since almost 1.5 years and there has been the 64-bit time_t
bump in between, so no old binary should remain.
|
|
to create subtle problems, and removing it does not prevent existing signal
delivery tests from having the correct behaviour. And this is likely redundant
with DAE processing in sigreturn.
We should probably rewind if XIP_V is not set, but does this ever happen
in real life? To be investigated on a rainy day.
This seems to fix spurious signals encountered building libstdc++ and perl.
|
|
logic in the dedicated signal stack case, too.
Also, every time the sigcontext position is recomputed by the above logic,
recheck the DAE addresses from the beginning, in case a formerly avoided
address now risks being overwritten.
|
|
making sure the sigcontext will not overlap pending DAE accesses.
Fixes sporadic sys/kern/signal/earlysig regress failure.
|
|
|