freebsd-skq/sys/conf
Alexander Leidinger 6a1162d4cd MFP4 (with some minor changes):
Implement the linux_io_* syscalls (AIO). They are only enabled if the native
AIO code is available (either compiled in to the kernel or as a module) at
the time the functions are used. If the AIO stuff is not available there
will be a ENOSYS.

From the submitter:
---snip---
DESIGN NOTES:

1. Linux permits a process to own multiple AIO queues (distinguished by
   "context"), but FreeBSD creates only one single AIO queue per process.
   My code maintains a request queue (STAILQ of queue(3)) per "context",
   and throws all AIO requests of all contexts owned by a process into
   the single FreeBSD per-process AIO queue.

   When the process calls io_destroy(2), io_getevents(2), io_submit(2) and
   io_cancel(2), my code can pick out requests owned by the specified context
   from the single FreeBSD per-process AIO queue according to the per-context
   request queues maintained by my code.

2. The request queue maintained by my code stores contrast information between
   Linux IO control blocks (struct linux_iocb) and FreeBSD IO control blocks
   (struct aiocb). FreeBSD IO control block actually exists in userland memory
   space, required by FreeBSD native aio_XXXXXX(2).

3. It is quite troubling that the function io_getevents() of libaio-0.3.105
   needs to use Linux-specific "struct aio_ring", which is a partial mirror
   of context in user space. I would rather take the address of context in
   kernel as the context ID, but the io_getevents() of libaio forces me to
   take the address of the "ring" in user space as the context ID.

   To my surprise, one comment line in the file "io_getevents.c" of
   libaio-0.3.105 reads:

             Ben will hate me for this

REFERENCE:

1. Linux kernel source code:   http://www.kernel.org/pub/linux/kernel/v2.6/
   (include/linux/aio_abi.h, fs/aio.c)

2. Linux manual pages:         http://www.kernel.org/pub/linux/docs/manpages/
   (io_setup(2), io_destroy(2), io_getevents(2), io_submit(2), io_cancel(2))

3. Linux Scalability Effort:   http://lse.sourceforge.net/io/aio.html
   The design notes:           http://lse.sourceforge.net/io/aionotes.txt

4. The package libaio, both source and binary:
       http://rpmfind.net/linux/rpm2html/search.php?query=libaio
   Simple transparent interface to Linux AIO system calls.

5. Libaio-oracle:              http://oss.oracle.com/projects/libaio-oracle/
   POSIX AIO implementation based on Linux AIO system calls (depending on
   libaio).
---snip---

Submitted by:	Li, Xiao <intron@intron.ac>
2006-10-15 14:22:14 +00:00
..
defines
files Sort libalias files. 2006-10-08 13:51:27 +00:00
files.amd64 MFP4 (with some minor changes): 2006-10-15 14:22:14 +00:00
files.arm Add remote GDB bits for arm. 2006-07-14 00:50:51 +00:00
files.i386 MFP4 (with some minor changes): 2006-10-15 14:22:14 +00:00
files.ia64 Move default GEOM classes from files.ia64, where they were marked 2006-07-17 20:02:51 +00:00
files.pc98 Add the new linux files to pc98 too. 2006-08-18 15:46:38 +00:00
files.powerpc Remove file that snuck in accidentally in Marcel's gdb commit. 2006-08-25 00:21:48 +00:00
files.sparc64 add ath_hal glue 2006-03-14 22:40:44 +00:00
files.sun4v kernel clean up to make the sun4v kernel build 2006-10-09 04:45:19 +00:00
kern.mk Create new dialect knob, as setting the language dialect isn't a warning flag. 2006-06-29 21:15:25 +00:00
kern.post.mk - Remove include links only when .depend is also removed, so that 2006-10-13 22:28:14 +00:00
kern.pre.mk Define an empty C_DIALECT in case of "icc", just in case. 2006-10-13 22:29:06 +00:00
kmod_syms.awk
kmod.mk - Remove include links only when .depend is also removed, so that 2006-10-13 22:28:14 +00:00
ldscript.amd64 Provide the _start_ctors and _stop_ctors symbols. As on i386, the addresses 2004-05-29 01:09:00 +00:00
ldscript.arm Create a non-elf pure binary version of the kernel as well. 2005-11-24 02:25:49 +00:00
ldscript.i386
ldscript.ia64 Have the linker provide btext. It's used for profiling. 2004-08-25 07:43:28 +00:00
ldscript.powerpc
ldscript.sparc64
Makefile.amd64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.arm Only use -mno-apcs-frame if DDB is not in the kernel, as it prevent the 2006-07-24 22:09:47 +00:00
Makefile.i386 Set MACHINE to i386(pc98). This fixes cross-building. 2006-01-29 03:32:19 +00:00
Makefile.ia64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.pc98 Set MACHINE to i386(pc98). This fixes cross-building. 2006-01-29 03:32:19 +00:00
Makefile.powerpc Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.sparc64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.sun4v placate Grim Reaper with sun4v support 2006-10-05 06:14:28 +00:00
makeLINT.mk
makeLINT.sed
newvers.sh Pad the strings sccs[], version[], and osrelease[] up to a minimum of 2005-08-19 01:49:15 +00:00
NOTES Remove a nmdm comment which ru@ thinks was no longer required. 2006-10-13 21:44:57 +00:00
options Added the GEOM_CACHE option. 2006-10-06 10:43:42 +00:00
options.amd64 Remove sio(4) and related options from MI files to amd64, i386 2006-07-29 18:38:54 +00:00
options.arm Finally bring it support for the i80219 XScale processor. 2006-08-24 23:51:28 +00:00
options.i386 Remove sio(4) and related options from MI files to amd64, i386 2006-07-29 18:38:54 +00:00
options.ia64 o Move ISA specific code from ppc.c to ppc_isa.c -- a bus front- 2006-04-24 23:31:51 +00:00
options.pc98 Remove sio(4) and related options from MI files to amd64, i386 2006-07-29 18:38:54 +00:00
options.powerpc Catch up with sparc64 OFWCONS_POLL_HZ change 2004-06-25 13:44:34 +00:00
options.sparc64 - Hook up atkbdc(4), atkbd(4) and psm(4) to the sparc64 build, not 2005-06-10 20:58:59 +00:00
options.sun4v placate Grim Reaper with sun4v support 2006-10-05 06:14:28 +00:00
systags.sh Use a simpler way to reach the <machine> include dir, which should 2005-12-03 21:37:54 +00:00