summaryrefslogtreecommitdiff
path: root/include/linux/wait.h
AgeCommit message (Collapse)Author
2002-11-15[PATCH] Move wait queue handling from sched.h to wait.hMatthew Wilcox
This patch removes all the wait_queue handling code from sched.h and puts it in wait.h with the rest of the wait_queue handling code. Note that sched.h must continue to include wait.h for the wait_queue_head_t embedded in struct task. However there may be files which only need wait.h now.
2002-09-25[PATCH] prepare_to_wait/finish_wait sleep/wakeup APIAndrew Morton
This is worth a whopping 2% on spwecweb on an 8-way. Which is faintly surprising because __wake_up and other wait/wakeup functions are not apparent in the specweb profiles which I've seen. The main objective of this is to reduce the CPU cost of the wait/wakeup operation. When a task is woken up, its waitqueue is removed from the waitqueue_head by the waker (ie: immediately), rather than by the woken process. This means that a subsequent wakeup does not need to revisit the just-woken task. It also means that the just-woken task does not need to take the waitqueue_head's lock, which may well reside in another CPU's cache. I have no decent measurements on the effect of this change - possibly a 20-30% drop in __wake_up cost in Badari's 40-dds-to-40-disks test (it was the most expensive function), but it's inconclusive. And no quantitative testing of which I am aware has been performed by networking people. The API is very simple to use (Linus thought it up): my_func(waitqueue_head_t *wqh) { DEFINE_WAIT(wait); prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE); if (!some_test) schedule(); finish_wait(wqh, &wait); } or: DEFINE_WAIT(wait); while (!some_test_1) { prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE); if (!some_test_2) schedule(); ... } finish_wait(wqh, &wait); You need to bear in mind that once prepare_to_wait has been performed, your task could be removed from the waitqueue_head and placed into TASK_RUNNING at any time. You don't know whether or not you're still on the waitqueue_head. Running prepare_to_wait() when you're already on the waitqueue_head is fine - it will do the right thing. Running finish_wait() when you're actually not on the waitqueue_head is fine. Running finish_wait() when you've _never_ been on the waitqueue_head is fine, as ling as the DEFINE_WAIT() macro was used to initialise the waitqueue. You don't need to fiddle with current->state. prepare_to_wait() and finish_wait() will do that. finish_wait() will always return in state TASK_RUNNING. There are plenty of usage examples in vm-wakeups.patch and tcp-wakeups.patch.
2002-08-12[PATCH] designated initializers for include/linuxRusty Russell
These are the completely generic bits (linux/init_task.h and linux/wait.h). From: Art Haas <ahaas@neosoft.com> Here's the latest diffs for the files in include/linux. Patches are against 2.5.31.
2002-06-17[PATCH] add wait queue function callback supportBenjamin LaHaise
This adds support for wait queue function callbacks, which are used by aio to build async read / write operations on top of existing wait queues at points that would normally block a process.
2002-06-02[PATCH] remove wq_lock_t cruftRobert Love
This patch removes the whole wq_lock_t abstraction, forcing the behavior to be that of a standard spinlock and changes all the wq_lock code in the tree appropriately. Removes lots of code - always a Good Thing to me. New behavior is same as previous behavior (USE_RW_WAIT_QUEUE_SPINLOCK unset).
2002-02-04v2.5.1.3 -> v2.5.1.4Linus Torvalds
- Jens Axboe: more bio updates, fix some request list bogosity under load - Al Viro: export seq_xxx functions - Manfred Spraul: include file cleanups, pc110pad compile fix - David Woodhouse: fix JFFS2 write error handling - Dave Jones: start merging up with 2.4.x patches - Manfred Spraul: coredump fixes, FS event counter cleanups - me: fix SCSI CD-ROM sectorsize BIO breakage
2002-02-04v2.4.14.5 -> v2.4.14.6Linus Torvalds
- Russell King: /proc/cpuinfo for ARM - Paul Mackerras: PPC update (cpuinfo etc) - Nicolas Aspert: fix Intel 8xx agptlb flush - Marko Myllynen: "Lindent" doesn't really need bash ;) - Alexander Viro: /proc/cpuinfo for s390/s390x/sh, /proc/pci cleanup - Alexander Viro: make lseek work on seqfiles
2002-02-04v2.4.9.8 -> v2.4.9.9Linus Torvalds
- Greg KH: start migration to new "min()/max()" - Roman Zippel: move affs over to "min()/max()". - Vojtech Pavlik: VIA update (make sure not to IRQ-unmask a vt82c576) - Jan Kara: quota bug-fix (don't decrement quota for non-counted inode) - Anton Altaparmakov: more NTFS updates - Al Viro: make nosuid/noexec/nodev be per-mount flags, not per-filesystem - Alan Cox: merge input/joystick layer differences, driver and alpha merge - Keith Owens: scsi Makefile cleanup - Trond Myklebust: fix oopsable race in locking code - Jean Tourrilhes: IrDA update
2002-02-04v2.4.3.5 -> v2.4.3.6Linus Torvalds
- Chris Mason: daemonize reiserfs commit thread - Alan Cox: syncup (AFFS might even work, and official VIA workarounds) - Jeff Garzik: network driver updates - Paul Mackerras: PPP update - David Howells: more rw-sem cleanups, updates. Slowly getting somewhere.
2002-02-04v2.4.3.1 -> v2.4.3.2Linus Torvalds
- Ingo Molnar/Al Viro: don't use bforget() on ext2 (and minix) metadata where we may not be the only owner of the buffer! FS corruption. - Andi Kleen: IPv6 packet re-assembly fix. - David Howells: fix up rwsem implementation - Alan Cox: more merging (S/390 down, ARM to go). - Jens Axboe: LVM and loop fixes
2002-02-04v2.4.1.1 -> v2.4.1.2Linus Torvalds
- driver sync up with Alan - Andrew Morton: wakeup cleanup and race fix - Paul Mackerras: macintosh driver updates. - don't trust "page_count()" on reserved pages! - Russell King: fix serious IDE multimode write bug! - me, Jens, others: fix elevator problem - ARM, MIPS and cris architecture updates - alpha updates: better page clear/copy, avoid kernel lock in execve - USB and firewire updates - ISDN updates - Irda updates
2002-02-04Import changesetLinus Torvalds