9104847f21
changes in MD code are trivial, before this change, trapsignal and sendsig use discrete parameters, now they uses member fields of ksiginfo_t structure. For sendsig, this change allows us to pass POSIX realtime signal value to user code. 2. Remove cpu_thread_siginfo, it is no longer needed because we now always generate ksiginfo_t data and feed it to libpthread. 3. Add p_sigqueue to proc structure to hold shared signals which were blocked by all threads in the proc. 4. Add td_sigqueue to thread structure to hold all signals delivered to thread. 5. i386 and amd64 now return POSIX standard si_code, other arches will be fixed. 6. In this sigqueue implementation, pending signal set is kept as before, an extra siginfo list holds additional siginfo_t data for signals. kernel code uses psignal() still behavior as before, it won't be failed even under memory pressure, only exception is when deleting a signal, we should call sigqueue_delete to remove signal from sigqueue but not SIGDELSET. Current there is no kernel code will deliver a signal with additional data, so kernel should be as stable as before, a ksiginfo can carry more information, for example, allow signal to be delivered but throw away siginfo data if memory is not enough. SIGKILL and SIGSTOP have fast path in sigqueue_add, because they can not be caught or masked. The sigqueue() syscall allows user code to queue a signal to target process, if resource is unavailable, EAGAIN will be returned as specification said. Just before thread exits, signal queue memory will be freed by sigqueue_flush. Current, all signals are allowed to be queued, not only realtime signals. Earlier patch reviewed by: jhb, deischen Tested on: i386, amd64 |
||
---|---|---|
.. | ||
autoconf.c | ||
bcopy_page.S | ||
bcopyinout_xscale.S | ||
bcopyinout.S | ||
blockio.S | ||
bootconfig.c | ||
bus_space_asm_generic.S | ||
busdma_machdep.c | ||
copystr.S | ||
cpufunc_asm_arm7tdmi.S | ||
cpufunc_asm_arm8.S | ||
cpufunc_asm_arm9.S | ||
cpufunc_asm_arm10.S | ||
cpufunc_asm_armv4.S | ||
cpufunc_asm_ixp12x0.S | ||
cpufunc_asm_sa1.S | ||
cpufunc_asm_sa11x0.S | ||
cpufunc_asm_xscale.S | ||
cpufunc_asm.S | ||
cpufunc.c | ||
db_disasm.c | ||
db_interface.c | ||
db_trace.c | ||
disassem.c | ||
dump_machdep.c | ||
elf_machdep.c | ||
elf_trampoline.c | ||
exception.S | ||
fiq_subr.S | ||
fiq.c | ||
fusu.S | ||
genassym.c | ||
identcpu.c | ||
in_cksum_arm.S | ||
in_cksum.c | ||
inckern.S | ||
intr.c | ||
irq_dispatch.S | ||
locore.S | ||
machdep.c | ||
mem.c | ||
nexus_io_asm.S | ||
nexus_io.c | ||
nexus.c | ||
pmap.c | ||
setcpsr.S | ||
setstack.s | ||
support.S | ||
swtch.S | ||
sys_machdep.c | ||
trap.c | ||
uio_machdep.c | ||
undefined.c | ||
vectors.S | ||
vm_machdep.c |