freebsd with flexible iflib nic queues
Go to file
Konstantin Belousov 6b286ee8b5 Currently, when signal is delivered to the process and there is a thread
not blocking the signal, signal is placed on the thread sigqueue. If
the selected thread is in kernel executing thr_exit() or sigprocmask()
syscalls, then signal might be not delivered to usermode for arbitrary
amount of time, and for exiting thread it is lost.

Put process-directed signals to the process queue unconditionally,
selecting the thread to deliver the signal only by the thread returning
to usermode, since only then the thread can handle delivery of signal
reliably. For exiting thread or thread that has blocked some signals,
check whether the newly blocked signal is queued for the process, and
try to find a thread to wakeup for delivery, in reschedule_signal(). For
exiting thread, assume that all signals are blocked.

Change cursig() and postsig() to look both into the thread and process
signal queues. When there is a signal that thread returning to usermode
could consume, TDF_NEEDSIGCHK flag is not neccessary set now. Do
unlocked read of p_siglist and p_pendingcnt to check for queued signals.

Note that thread that has a signal unblocked might get spurious wakeup
and EINTR from the interruptible system call now, due to the possibility
of being selected by reschedule_signals(), while other thread returned
to usermode earlier and removed the signal from process queue. This
should not cause compliance issues, since the thread has not blocked a
signal and thus should be ready to receive it anyway.

Reported by:	Justin Teller <justin.teller gmail com>
Reviewed by:	davidxu, jilles
MFC after:	1 month
2009-10-11 16:49:30 +00:00
bin Clarify quoting of word in ${v=word} in sh(1). 2009-10-07 22:21:53 +00:00
cddl Properly mark ZFS properties which are not changeable under FreeBSD. 2009-10-08 19:45:37 +00:00
contrib Merge upstream r421: grammar nit in pam.conf(5). 2009-10-09 09:42:58 +00:00
crypto Remove dupe. 2009-10-11 14:27:33 +00:00
etc In regards to the "Starting foo:" type messages at boot time, create and 2009-10-10 22:17:03 +00:00
games "Potluck Pogo" was a collection of Walt Kelly's "Pogo" cartoons 2009-10-06 02:13:32 +00:00
gnu Add FreeBSD 7.2 and 7.3. 2009-09-21 17:19:36 +00:00
include Add basename_r(3) to complement basename(3). basename_r(3) which accepts 2009-10-06 14:05:57 +00:00
kerberos5 Disconnect closefrom.c as we have it as a system call. 2009-06-16 00:09:06 +00:00
lib In nanosleep(2), note that the calling thread is put to sleep, not the 2009-10-11 16:23:11 +00:00
libexec Calculate relocation base for the main object, and apply the relocation 2009-10-10 15:27:10 +00:00
release In lists, if there is a Li command remove it. This fixes markup for 2009-10-04 16:30:33 +00:00
rescue Add the "vnet" and "-vnet" options, to allow moving interfaces between 2009-06-24 18:21:37 +00:00
sbin The cylinder group tag cg_initediblk needs to match the number of inodes 2009-10-05 01:31:16 +00:00
secure Upgrade to OpenSSH 5.3p1. 2009-10-01 17:12:52 +00:00
share Improved one-line description of this module (taken from NOTES). 2009-10-09 10:03:41 +00:00
sys Currently, when signal is delivered to the process and there is a thread 2009-10-11 16:49:30 +00:00
tools Fix build on amd64. 2009-10-07 23:01:31 +00:00
usr.bin - Catch SIGHUP to perform cleanup before exiting. 2009-10-11 12:32:25 +00:00
usr.sbin When run() returns an error, print the error message also in 2009-10-07 13:25:22 +00:00
COPYRIGHT Bump the odometer of the years. A little early this year for 7.1R. 2008-12-30 04:46:25 +00:00
LOCKS Update LOCKS syntax. 2008-06-05 19:47:58 +00:00
MAINTAINERS - pkg_install is maintained by portmgr. 2009-07-06 11:46:18 +00:00
Makefile Add a new world named 'mips' to our universe. 2009-04-01 17:11:50 +00:00
Makefile.inc1 Fix comment about KERNFAST. 2009-09-10 07:37:36 +00:00
ObsoleteFiles.inc Add entries for moved files during vesa/dpms promotion. 2009-09-10 21:42:00 +00:00
README Vendor import of OpenSSH 5.3p1 2009-10-01 15:19:37 +00:00
UPDATING Fix several logic bugs in the previous IPv6 variable change and 2009-09-26 18:59:00 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The ``world''
target should only be used in cases where the source tree has not
changed from the currently running version.  See:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

The ``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html