freebsd-nq/sys/sys
David Xu 0dbb100b9b Move UPCALL related data structure out of kse, introduce a new
data structure called kse_upcall to manage UPCALL. All KSE binding
and loaning code are gone.

A thread owns an upcall can collect all completed syscall contexts in
its ksegrp, turn itself into UPCALL mode, and takes those contexts back
to userland. Any thread without upcall structure has to export their
contexts and exit at user boundary.

Any thread running in user mode owns an upcall structure, when it enters
kernel, if the kse mailbox's current thread pointer is not NULL, then
when the thread is blocked in kernel, a new UPCALL thread is created and
the upcall structure is transfered to the new UPCALL thread. if the kse
mailbox's current thread pointer is NULL, then when a thread is blocked
in kernel, no UPCALL thread will be created.

Each upcall always has an owner thread. Userland can remove an upcall by
calling kse_exit, when all upcalls in ksegrp are removed, the group is
atomatically shutdown. An upcall owner thread also exits when process is
in exiting state. when an owner thread exits, the upcall it owns is also
removed.

KSE is a pure scheduler entity. it represents a virtual cpu. when a thread
is running, it always has a KSE associated with it. scheduler is free to
assign a KSE to thread according thread priority, if thread priority is changed,
KSE can be moved from one thread to another.

When a ksegrp is created, there is always N KSEs created in the group. the
N is the number of physical cpu in the current system. This makes it is
possible that even an userland UTS is single CPU safe, threads in kernel still
can execute on different cpu in parallel. Userland calls kse_create to add more
upcall structures into ksegrp to increase concurrent in userland itself, kernel
is not restricted by number of upcalls userland provides.

The code hasn't been tested under SMP by author due to lack of hardware.

Reviewed by: julian
2003-01-26 11:41:35 +00:00
..
_iovec.h It is bad style to define the same structure in multiple header 2002-12-28 22:17:29 +00:00
_label.h Update licenses and wording: NAI has authorized the removal of clause three 2002-11-04 02:35:46 +00:00
_lock.h Renamed the idempotency identifier to match the file name. 2002-06-07 14:37:09 +00:00
_mutex.h Save 16 bytes per mutex if MUTEX_PROFILING is not defined. 2002-12-29 11:14:41 +00:00
_semaphore.h Add the rest of the kernel support for the sem_ API in kern/uipc_sem.c. 2002-09-19 00:43:32 +00:00
_sigset.h Split 4.x and 5.x signal handling so that we can keep 4.x signal 2002-10-25 19:10:58 +00:00
_timespec.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
_timeval.h Move struct timeval to its own header so that it can be shared between 2002-12-31 04:08:41 +00:00
_types.h Add suseconds_t and useconds_t for storing microseconds. 2002-12-22 22:02:41 +00:00
aac_ioctl.h
acct.h
acl.h Provide prototypes for new ACL system calls to manipulate ACLs "by 2002-12-29 20:30:00 +00:00
agpio.h
aio.h
alq.h - Export the alq daemon thread pointer. 2002-09-26 07:38:56 +00:00
assym.h
ata.h
bio.h Add a field for tallying the number of spawned bio's a bio has. 2002-10-09 07:11:03 +00:00
bitstring.h
blist.h Remove all use of the LOG2() macro/inline, undoing some non-optimal cruft 2003-01-11 01:09:51 +00:00
buf.h Move UPCALL related data structure out of kse, introduce a new 2003-01-26 11:41:35 +00:00
bus_dma.h New bus_dma interfaces for use by crypto device drivers: 2002-10-04 20:40:39 +00:00
bus.h Add wrappers around the newly created bus_child_pnpinfo_str and 2002-10-07 07:08:00 +00:00
callout.h
ccdvar.h Finally give CCD the disk mini-layer treatment: 2003-01-19 15:00:58 +00:00
cdefs.h Add the ability to specify a strict C99 environment with the 2002-10-21 20:50:30 +00:00
cdio.h
cdrio.h * Add CDRIOC{READ,WRITE}SPEED ioctls to cd(4). Units are in KB/sec. 2002-10-18 22:03:39 +00:00
chio.h
clist.h
clock.h
condvar.h Part 1 of KSE-III 2002-06-29 17:26:22 +00:00
conf.h Remove OBE prototype for iszerodev() - it was replaced by the 2003-01-21 19:26:17 +00:00
cons.h
consio.h 1. Allow information about current history size be retrieved using ioctl(2); 2002-08-19 16:32:09 +00:00
copyright.h We've had something like this file since 1992, so therefore this file 2003-01-07 04:37:40 +00:00
ctype.h Resolve conflicts arising from the ACPI CA 20021118 import. 2002-11-27 18:09:20 +00:00
dataacq.h
device_port.h
devicestat.h Un-inline the non-trivial "trivial" bio* functions. 2002-09-14 19:34:11 +00:00
digiio.h
dir.h
dirent.h Fix namespace issues by using the relatively new visibility 2002-09-10 18:12:16 +00:00
disk.h (This commit touches about 15 disk device drivers in a very consistent 2002-09-20 19:36:05 +00:00
disklabel.h #ifdef NO_GEOM some bits here too. 2003-01-21 11:39:19 +00:00
diskmbr.h Add NEXTDOSPART (N-Extended-Dos-Partitions) as replacement for the 2003-01-20 11:06:24 +00:00
diskpc98.h Remove NEXTDOSPART. 2003-01-21 14:02:11 +00:00
diskslice.h Remove the deprecated IOCTL bits raidframe used, it doesn't anymore. 2003-01-20 18:22:30 +00:00
dkstat.h
domain.h
dvdio.h
elf32.h Move the definition of ElfN_Hashelt to common headers. The only platform 2002-05-30 08:32:18 +00:00
elf64.h Move the definition of ElfN_Hashelt to common headers. The only platform 2002-05-30 08:32:18 +00:00
elf_common.h - Call a SHT_REL 'relocation section' rather than 2002-08-11 21:07:50 +00:00
elf_generic.h Infrastructure tweaks to allow having both an Elf32 and an Elf64 executable 2002-07-20 02:56:12 +00:00
endian.h
errno.h Copyin and copyout are only possible from a process-native thread, 2002-10-07 06:25:26 +00:00
event.h Updated a comment. Namspace pollution in <sys/select.h> is now moot since 2002-06-29 19:14:52 +00:00
eventhandler.h - Add an event that is triggered when the system is low on memory. This is 2002-11-21 09:17:56 +00:00
eventvar.h
exec.h Use __CONCAT and __XSTRING when concatenating or stringifying arguments to 2003-01-04 08:17:27 +00:00
extattr.h Prototypes for new link extended attribute calls. Sync to MAC tree. 2002-10-09 21:48:57 +00:00
fbio.h
fcntl.h o Add typedefs for mode_t, off_t, pid_t rather than including 2002-09-17 22:22:50 +00:00
fdcio.h
file.h Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
filedesc.h When compiling the kernel do not implicitly include filedesc.h from proc.h, 2003-01-01 01:56:19 +00:00
filio.h
fnv_hash.h
gmon.h
gpt.h o Include <sys/uuid.h>. This avoids that applications such as 2002-11-10 20:13:58 +00:00
iconv.h Convert GNU variadic macros to the ISO 9X variety. 2002-07-15 13:34:50 +00:00
imgact_aout.h Forward declare struct vnode so that <sys/vnode.h> or some other header 2002-09-05 07:54:03 +00:00
imgact_elf.h - Provide backwards compatibility for kern.fallback_elf_brand. 2003-01-05 03:48:14 +00:00
imgact.h Bring in two sets of changes: 2002-11-05 17:51:56 +00:00
inflate.h
interrupt.h
ioccom.h
ioctl_bt848.h
ioctl_compat.h
ioctl_meteor.h
ioctl.h
ipc.h It is possible for an active aio to prevent shared memory from being 2003-01-13 23:04:32 +00:00
jail.h
joystick.h Fix typo in the BSD copyright: s/withough/without/ 2002-06-02 20:05:59 +00:00
jumbo.h Remove the advertising clause from the Duke BSD copyright on the 2002-07-06 02:44:15 +00:00
kbio.h
kenv.h
kernel.h After much delay and anticipation, welcome RAIDFrame into the FreeBSD 2002-10-20 08:17:39 +00:00
kerneldump.h Add kernel dump support, based on the ia64 version (which was committed 2002-10-20 17:03:15 +00:00
kobj.h Convert hit and miss counters to unsigned values. Surely negative values 2002-06-10 22:40:26 +00:00
kse.h 1. Support versioning and wall clock in kse mailbox, 2002-11-18 01:59:31 +00:00
kthread.h Some kernel threads try to do significant work, and the default KSTACK_PAGES 2002-10-02 07:44:29 +00:00
ktr.h - Add support for logging KTR via ALQ. This is optional and enabled by the 2002-09-22 07:13:45 +00:00
ktrace.h Overhaul the ktrace subsystem a bit. For the most part, the actual vnode 2002-06-07 05:32:59 +00:00
libkern.h - Style fixes. 2003-01-17 22:58:32 +00:00
linedisc.h Remove OBE prototype for iszerodev() - it was replaced by the 2003-01-21 19:26:17 +00:00
link_aout.h Repo copy link.h to sys/link_elf.h and sys/link_aout.h since they are 2002-08-22 20:35:23 +00:00
link_elf.h Repo copy link.h to sys/link_elf.h and sys/link_aout.h since they are 2002-08-22 20:35:23 +00:00
linker_set.h Add a __section(x) macro as well. Use this in linker_set.h. ie: 2002-09-23 06:11:29 +00:00
linker.h Resolve relative relocations in klds before trying to parse the module's 2003-01-21 02:42:44 +00:00
lock.h Forward declare struct thread so that this header doesn't depend on its 2002-08-28 05:14:55 +00:00
lockf.h
lockmgr.h Move UPCALL related data structure out of kse, introduce a new 2003-01-26 11:41:35 +00:00
mac_policy.h Remove dm_root entry from struct devfs_mount. It's never set, and is 2002-12-09 03:44:28 +00:00
mac.h Remove dm_root entry from struct devfs_mount. It's never set, and is 2002-12-09 03:44:28 +00:00
malloc.h Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. 2003-01-21 08:56:16 +00:00
mbuf.h Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. 2003-01-21 08:56:16 +00:00
mchain.h Remove the hto(be|le)[slq] and (be|le)toh[slq] macros defined in 2002-12-16 16:20:06 +00:00
md4.h
md5.h Oops, this should have been part of my previous commit. 2002-06-24 14:18:39 +00:00
mdioctl.h
memrange.h Some BIOSs are using MTRR values that are only documented under NDA 2002-09-15 15:07:55 +00:00
mman.h mlockall() and munlockall() are unimplemented; remove their prototypes. 2002-09-13 18:29:15 +00:00
module.h
mount.h Re-add MNT_ACLS to the list of "updateable" mount flags, per our 2002-12-27 18:20:16 +00:00
mouse.h
msg.h o Fix ordering of typedefs. 2002-12-29 03:38:48 +00:00
msgbuf.h Make the msg_size, msg_bufx and msg_bufr memebers of struct msgbuf 2002-11-14 16:11:12 +00:00
mtio.h
mutex.h Allow lint-like tools to override DROP_GIANT and friends. 2002-12-28 22:29:10 +00:00
namei.h Remove four members of struct nameidata which have been commented 2003-01-13 08:49:36 +00:00
nlist_aout.h Pad after "char *n_name;" in the !_AOUT_INCLUDE_ case so that struct nlist 2002-09-05 08:03:02 +00:00
param.h Bump __FreeBSD_version to 500100 to allow us to differentiate HEAD from 2003-01-17 06:18:25 +00:00
pciio.h
pcpu.h Unbreak the KSE code. Keep track of zobie threads using the Per-CPU storage 2002-12-10 02:33:45 +00:00
pioctl.h Kernel modifications necessary to allow to follow fork()ed children. 2002-08-04 01:07:02 +00:00
pipe.h Move to a nested include of _label.h instead of mac.h in sys/sys/*.h 2002-08-14 01:04:43 +00:00
poll.h Reconnect a comment with its code. 2002-07-10 04:47:25 +00:00
posix4.h Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. 2003-01-21 08:56:16 +00:00
power.h Very minor warns fix. Add a declaration for an unused parameter. 2002-07-15 14:06:03 +00:00
priority.h
proc.h Move UPCALL related data structure out of kse, introduce a new 2003-01-26 11:41:35 +00:00
procfs.h
protosw.h Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
ptio.h
ptrace.h
queue.h Add a macro for SLIST traversal 'SLIST_FOREACH_PREVPTR', 2002-08-05 05:18:43 +00:00
random.h add RANDOM_PURE for use by crypto drivers that harvest data from h/w RNG's 2002-10-04 20:34:08 +00:00
reboot.h
regression.h
resource.h Part I of RLIMIT_VMEM implementation. Implement core functionality for 2002-06-26 00:29:28 +00:00
resourcevar.h Move UPCALL related data structure out of kse, introduce a new 2003-01-26 11:41:35 +00:00
rman.h Make the rman_{get,set}_* macros into real functions. The macros 2002-11-27 03:55:22 +00:00
rtprio.h
runq.h Make the run queue parameters machine dependent. Optimize 64 bit 2002-05-25 01:12:23 +00:00
sbuf.h Add the new function "sbuf_done()" which returns non-zero if the sbuf is 2002-10-04 09:58:17 +00:00
sched.h - Add the new sched_pctcpu() function to the sched_* api. 2002-11-21 09:30:55 +00:00
select.h Add complete struct timeval by including <sys/_timeval.h>. 2002-12-31 04:13:50 +00:00
selinfo.h
sem.h Bring semop() closer the the opengroup standards. 2003-01-25 21:27:37 +00:00
sema.h
semaphore.h o Adjust the SEM_VALUE_MAX macro so that <machine/limits.h> isn't 2002-10-04 21:31:33 +00:00
shm.h Bring shm functions closer the the opengroup standards. 2003-01-25 21:33:05 +00:00
sigio.h When compiling the kernel do not implicitly include filedesc.h from proc.h, 2003-01-01 01:56:19 +00:00
signal.h Fix drift of the comment about sa_sigaction away from its code. 2002-12-29 19:34:37 +00:00
signalvar.h Split 4.x and 5.x signal handling so that we can keep 4.x signal 2002-10-25 19:10:58 +00:00
smp.h Forward declare struct thread. 2002-05-20 16:11:38 +00:00
snoop.h Declare the snp ioctl()s to work on udev_t, since that is what they 2002-11-11 10:45:31 +00:00
socket.h It is bad style to define the same structure in multiple header 2002-12-28 22:17:29 +00:00
socketvar.h Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. 2003-01-21 08:56:16 +00:00
sockio.h
soundcard.h Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
stat.h Use unsigned long' instead of u_long' so that this header compiles 2002-10-11 15:52:14 +00:00
statvfs.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
stddef.h Add the sys/stddef.h header, so that we can have ptrdiff_t 2002-11-13 15:14:57 +00:00
stdint.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
sun_disklabel.h Duh. #ifdef CTASSERT so we don't break user-land software. 2002-10-29 06:43:57 +00:00
sx.h
syscall.h Some KSE syscalls are MPSAFE. 2003-01-08 04:57:53 +00:00
syscall.mk Some KSE syscalls are MPSAFE. 2003-01-08 04:57:53 +00:00
syscallsubr.h Split 4.x and 5.x signal handling so that we can keep 4.x signal 2002-10-25 19:10:58 +00:00
sysctl.h Introduce the ability to flag a sysctl for operation at secure level 2 or 3 2003-01-14 19:35:33 +00:00
sysent.h SCARGS removal take II. 2002-12-14 01:56:26 +00:00
syslimits.h Add the POSIX sanctioned "LOGIN_NAME_MAX" -- Maximum length of a login name. 2003-01-06 04:33:47 +00:00
syslog.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
sysproto.h regen 2003-01-25 21:34:07 +00:00
systm.h Move UPCALL related data structure out of kse, introduce a new 2003-01-26 11:41:35 +00:00
taskqueue.h
termios.h
tiio.h At long last, commit the zero copy sockets code. 2002-06-26 03:37:47 +00:00
time.h Move struct timeval to its own header so that it can be shared between 2002-12-31 04:08:41 +00:00
timeb.h
timepps.h
timers.h
times.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
timespec.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
timetc.h Give up on calling tc_ticktock() from a timeout, we have timeout 2002-09-04 10:15:19 +00:00
timex.h
tree.h Import OpenBSD's <sys/tree.h>, needed by OpenSSH. 2002-06-23 14:38:51 +00:00
tty.h Fixed some style bugs in recent commits. 2002-05-28 15:24:13 +00:00
ttychars.h
ttycom.h
ttydefaults.h
ttydev.h
types.h Add suseconds_t and useconds_t for storing microseconds. 2002-12-22 22:02:41 +00:00
ucontext.h Add getcontext, setcontext, and swapcontext as system calls. 2002-11-16 06:35:53 +00:00
ucred.h Allow one to grab the definition of struct ucred by defining _WANT_UCRED 2002-08-28 20:39:48 +00:00
uio.h It is bad style to define the same structure in multiple header 2002-12-28 22:17:29 +00:00
un.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
unistd.h Update limits and configuration parameters for 1003.1/TC1/D6. 2002-10-27 18:03:02 +00:00
unpcb.h Fix typos, mostly s/ an / a / where appropriate and a few s/an/and/ 2002-12-30 21:18:15 +00:00
user.h The a.out md_coredump stuff isn't referenced anywhere anymore, and 2002-10-15 00:02:50 +00:00
utsname.h
uuid.h Wrap function prototype declarations in __BEGIN_DECLS to do the right thing 2002-11-05 10:57:53 +00:00
vmmeter.h Make a structure definition slightly more style(9) compliant (makes 2002-06-01 03:55:16 +00:00
vnioctl.h
vnode.h Add a new vnode flag VI_DOINGINACT to indicate that a VOP_INACTIVE 2002-12-29 18:30:49 +00:00
wait.h Remove the deprecated 4.2/4.3BSD wait union. 2002-06-05 02:21:01 +00:00
xrpuio.h