linux/arch
Gerd Hoffmann f3554f4bc6 preadv/pwritev: Add preadv and pwritev system calls.
This patch adds preadv and pwritev system calls.  These syscalls are a
pretty straightforward combination of pread and readv (same for write).
They are quite useful for doing vectored I/O in threaded applications.
Using lseek+readv instead opens race windows you'll have to plug with
locking.

Other systems have such system calls too, for example NetBSD, check
here: http://www.daemon-systems.org/man/preadv.2.html

The application-visible interface provided by glibc should look like
this to be compatible to the existing implementations in the *BSD family:

  ssize_t preadv(int d, const struct iovec *iov, int iovcnt, off_t offset);
  ssize_t pwritev(int d, const struct iovec *iov, int iovcnt, off_t offset);

This prototype has one problem though: On 32bit archs is the (64bit)
offset argument unaligned, which the syscall ABI of several archs doesn't
allow to do.  At least s390 needs a wrapper in glibc to handle this.  As
we'll need a wrappers in glibc anyway I've decided to push problem to
glibc entriely and use a syscall prototype which works without
arch-specific wrappers inside the kernel: The offset argument is
explicitly splitted into two 32bit values.

The patch sports the actual system call implementation and the windup in
the x86 system call tables.  Other archs follow as separate patches.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: <linux-api@vger.kernel.org>
Cc: <linux-arch@vger.kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-04-02 19:05:08 -07:00
..
alpha Simplify copy_thread() 2009-04-02 19:04:51 -07:00
arm Simplify copy_thread() 2009-04-02 19:04:51 -07:00
avr32 Simplify copy_thread() 2009-04-02 19:04:51 -07:00
blackfin Simplify copy_thread() 2009-04-02 19:04:51 -07:00
cris Simplify copy_thread() 2009-04-02 19:04:51 -07:00
frv Simplify copy_thread() 2009-04-02 19:04:51 -07:00
h8300 Simplify copy_thread() 2009-04-02 19:04:51 -07:00
ia64 sgi-gru: remove SGI_GRU as a valid config option for ia64 configs with SGI_UV 2009-04-02 19:05:07 -07:00
m32r Simplify copy_thread() 2009-04-02 19:04:51 -07:00
m68k Simplify copy_thread() 2009-04-02 19:04:51 -07:00
m68knommu Simplify copy_thread() 2009-04-02 19:04:51 -07:00
mips Simplify copy_thread() 2009-04-02 19:04:51 -07:00
mn10300 Simplify copy_thread() 2009-04-02 19:04:51 -07:00
parisc Simplify copy_thread() 2009-04-02 19:04:51 -07:00
powerpc Simplify copy_thread() 2009-04-02 19:04:51 -07:00
s390 Simplify copy_thread() 2009-04-02 19:04:51 -07:00
sh Simplify copy_thread() 2009-04-02 19:04:51 -07:00
sparc Simplify copy_thread() 2009-04-02 19:04:51 -07:00
um Simplify copy_thread() 2009-04-02 19:04:51 -07:00
x86 preadv/pwritev: Add preadv and pwritev system calls. 2009-04-02 19:05:08 -07:00
xtensa Simplify copy_thread() 2009-04-02 19:04:51 -07:00
.gitignore
Kconfig