From owner-cvs-all@FreeBSD.ORG Fri Oct 14 12:43:48 2005 Return-Path: X-Original-To: cvs-all@FreeBSD.org Delivered-To: cvs-all@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7148916A420; Fri, 14 Oct 2005 12:43:48 +0000 (GMT) (envelope-from davidxu@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id CF1ED43D46; Fri, 14 Oct 2005 12:43:47 +0000 (GMT) (envelope-from davidxu@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j9EChlto045702; Fri, 14 Oct 2005 12:43:47 GMT (envelope-from davidxu@repoman.freebsd.org) Received: (from davidxu@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j9EChlE7045701; Fri, 14 Oct 2005 12:43:47 GMT (envelope-from davidxu) Message-Id: <200510141243.j9EChlE7045701@repoman.freebsd.org> From: David Xu Date: Fri, 14 Oct 2005 12:43:47 +0000 (UTC) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Cc: Subject: cvs commit: src/sys/alpha/alpha machdep.c trap.c src/sys/alpha/linux linux_sysvec.c src/sys/alpha/osf1 osf1_signal.c osf1_signal.h src/sys/amd64/amd64 machdep.c trap.c src/sys/amd64/ia32 ia32_signal.c ia32_syscall.c ... X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Oct 2005 12:43:48 -0000 davidxu 2005-10-14 12:43:47 UTC FreeBSD src repository Modified files: sys/alpha/alpha machdep.c trap.c sys/alpha/linux linux_sysvec.c sys/alpha/osf1 osf1_signal.c osf1_signal.h sys/amd64/amd64 machdep.c trap.c sys/amd64/ia32 ia32_signal.c ia32_syscall.c sys/amd64/linux32 linux32_sysvec.c sys/arm/arm machdep.c trap.c undefined.c sys/compat/ia32 ia32_signal.h sys/compat/linux linux_misc.c sys/compat/svr4 svr4_signal.h sys/fs/procfs procfs_ctl.c sys/i386/i386 machdep.c trap.c sys/i386/linux linux_sysvec.c sys/i386/svr4 svr4_machdep.c sys/ia64/ia32 ia32_signal.c ia32_trap.c sys/ia64/ia64 machdep.c trap.c sys/kern init_sysent.c kern_exec.c kern_exit.c kern_kse.c kern_sig.c kern_thr.c kern_thread.c subr_trap.c syscalls.master sys/pc98/pc98 machdep.c sys/powerpc/powerpc machdep.c trap.c sys/sparc64/sparc64 machdep.c trap.c sys/sys proc.h signalvar.h sysent.h Log: 1. Change prototype of trapsignal and sendsig to use ksiginfo_t *, most 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 Revision Changes Path 1.236 +22 -34 src/sys/alpha/alpha/machdep.c 1.126 +7 -1 src/sys/alpha/alpha/trap.c 1.96 +1 -1 src/sys/alpha/linux/linux_sysvec.c 1.43 +6 -2 src/sys/alpha/osf1/osf1_signal.c 1.4 +1 -1 src/sys/alpha/osf1/osf1_signal.h 1.641 +15 -33 src/sys/amd64/amd64/machdep.c 1.295 +40 -8 src/sys/amd64/amd64/trap.c 1.12 +48 -14 src/sys/amd64/ia32/ia32_signal.c 1.9 +6 -1 src/sys/amd64/ia32/ia32_syscall.c 1.10 +27 -9 src/sys/amd64/linux32/linux32_sysvec.c 1.18 +7 -16 src/sys/arm/arm/machdep.c 1.18 +7 -3 src/sys/arm/arm/trap.c 1.9 +18 -3 src/sys/arm/arm/undefined.c 1.8 +3 -1 src/sys/compat/ia32/ia32_signal.h 1.171 +1 -1 src/sys/compat/linux/linux_misc.c 1.12 +3 -1 src/sys/compat/svr4/svr4_signal.h 1.54 +1 -1 src/sys/fs/procfs/procfs_ctl.c 1.618 +66 -62 src/sys/i386/i386/machdep.c 1.282 +41 -12 src/sys/i386/i386/trap.c 1.139 +26 -10 src/sys/i386/linux/linux_sysvec.c 1.36 +6 -3 src/sys/i386/svr4/svr4_machdep.c 1.10 +2 -2 src/sys/ia64/ia32/ia32_signal.c 1.6 +12 -2 src/sys/ia64/ia32/ia32_trap.c 1.203 +10 -21 src/sys/ia64/ia64/machdep.c 1.116 +5 -1 src/sys/ia64/ia64/trap.c 1.198 +1 -0 src/sys/kern/init_sysent.c 1.280 +1 -1 src/sys/kern/kern_exec.c 1.266 +2 -2 src/sys/kern/kern_exit.c 1.219 +9 -8 src/sys/kern/kern_kse.c 1.307 +502 -171 src/sys/kern/kern_sig.c 1.35 +2 -1 src/sys/kern/kern_thr.c 1.218 +7 -0 src/sys/kern/kern_thread.c 1.282 +5 -1 src/sys/kern/subr_trap.c 1.200 +1 -1 src/sys/kern/syscalls.master 1.366 +47 -17 src/sys/pc98/pc98/machdep.c 1.91 +7 -22 src/sys/powerpc/powerpc/machdep.c 1.56 +7 -1 src/sys/powerpc/powerpc/trap.c 1.126 +7 -23 src/sys/sparc64/sparc64/machdep.c 1.75 +7 -1 src/sys/sparc64/sparc64/trap.c 1.437 +7 -4 src/sys/sys/proc.h 1.70 +27 -3 src/sys/sys/signalvar.h 1.46 +3 -2 src/sys/sys/sysent.h