mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 05:01:48 +00:00
ba0a6c9f6f
In order to direct the SIGIO signal to a particular thread of a multi-threaded application we cannot, like suggested by the manpage, put a TID into the regular fcntl(F_SETOWN) call. It will still be send to the whole process of which that thread is part. Since people do want to properly direct SIGIO we introduce F_SETOWN_EX. The need to direct SIGIO comes from self-monitoring profiling such as with perf-counters. Perf-counters uses SIGIO to notify that new sample data is available. If the signal is delivered to the same task that generated the new sample it can augment that data by inspecting the task's user-space state right after it returns from the kernel. This is esp. convenient for interpreted or virtual machine driven environments. Both F_SETOWN_EX and F_GETOWN_EX take a pointer to a struct f_owner_ex as argument: struct f_owner_ex { int type; pid_t pid; }; Where type is one of F_OWNER_TID, F_OWNER_PID or F_OWNER_GID. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reviewed-by: Oleg Nesterov <oleg@redhat.com> Tested-by: stephane eranian <eranian@googlemail.com> Cc: Michael Kerrisk <mtk.manpages@googlemail.com> Cc: Roland McGrath <roland@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
46 lines
1.2 KiB
C
46 lines
1.2 KiB
C
#ifndef _ALPHA_FCNTL_H
|
|
#define _ALPHA_FCNTL_H
|
|
|
|
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
|
located on an ext2 file system */
|
|
#define O_CREAT 01000 /* not fcntl */
|
|
#define O_TRUNC 02000 /* not fcntl */
|
|
#define O_EXCL 04000 /* not fcntl */
|
|
#define O_NOCTTY 010000 /* not fcntl */
|
|
|
|
#define O_NONBLOCK 00004
|
|
#define O_APPEND 00010
|
|
#define O_SYNC 040000
|
|
#define O_DIRECTORY 0100000 /* must be a directory */
|
|
#define O_NOFOLLOW 0200000 /* don't follow links */
|
|
#define O_LARGEFILE 0400000 /* will be set by the kernel on every open */
|
|
#define O_DIRECT 02000000 /* direct disk access - should check with OSF/1 */
|
|
#define O_NOATIME 04000000
|
|
#define O_CLOEXEC 010000000 /* set close_on_exec */
|
|
|
|
#define F_GETLK 7
|
|
#define F_SETLK 8
|
|
#define F_SETLKW 9
|
|
|
|
#define F_SETOWN 5 /* for sockets. */
|
|
#define F_GETOWN 6 /* for sockets. */
|
|
#define F_SETSIG 10 /* for sockets. */
|
|
#define F_GETSIG 11 /* for sockets. */
|
|
#define F_SETOWN_EX 12
|
|
#define F_GETOWN_EX 13
|
|
|
|
/* for posix fcntl() and lockf() */
|
|
#define F_RDLCK 1
|
|
#define F_WRLCK 2
|
|
#define F_UNLCK 8
|
|
|
|
/* for old implementation of bsd flock () */
|
|
#define F_EXLCK 16 /* or 3 */
|
|
#define F_SHLCK 32 /* or 4 */
|
|
|
|
#define F_INPROGRESS 64
|
|
|
|
#include <asm-generic/fcntl.h>
|
|
|
|
#endif
|