patch-2.0.16 linux/kernel/sched.c
Next file: linux/net/core/net_alias.c
Previous file: linux/kernel/fork.c
Back to the patch index
Back to the overall index
- Lines: 86
- Date:
Thu Aug 29 19:07:37 1996
- Orig file:
v2.0.15/linux/kernel/sched.c
- Orig date:
Thu Aug 29 19:15:15 1996
diff -u --recursive --new-file v2.0.15/linux/kernel/sched.c linux/kernel/sched.c
@@ -431,51 +431,55 @@
*/
void wake_up(struct wait_queue **q)
{
- struct wait_queue *tmp;
- struct task_struct * p;
+ struct wait_queue *next;
+ struct wait_queue *head;
- if (!q || !(tmp = *q))
+ if (!q || !(next = *q))
return;
- do {
- if ((p = tmp->task) != NULL) {
+ head = WAIT_QUEUE_HEAD(q);
+ while (next != head) {
+ struct task_struct *p = next->task;
+ next = next->next;
+ if (p != NULL) {
if ((p->state == TASK_UNINTERRUPTIBLE) ||
(p->state == TASK_INTERRUPTIBLE))
wake_up_process(p);
}
- if (!tmp->next) {
- printk("wait_queue is bad (eip = %p)\n",
- __builtin_return_address(0));
- printk(" q = %p\n",q);
- printk(" *q = %p\n",*q);
- printk(" tmp = %p\n",tmp);
- break;
- }
- tmp = tmp->next;
- } while (tmp != *q);
+ if (!next)
+ goto bad;
+ }
+ return;
+bad:
+ printk("wait_queue is bad (eip = %p)\n",
+ __builtin_return_address(0));
+ printk(" q = %p\n",q);
+ printk(" *q = %p\n",*q);
}
void wake_up_interruptible(struct wait_queue **q)
{
- struct wait_queue *tmp;
- struct task_struct * p;
+ struct wait_queue *next;
+ struct wait_queue *head;
- if (!q || !(tmp = *q))
+ if (!q || !(next = *q))
return;
- do {
- if ((p = tmp->task) != NULL) {
+ head = WAIT_QUEUE_HEAD(q);
+ while (next != head) {
+ struct task_struct *p = next->task;
+ next = next->next;
+ if (p != NULL) {
if (p->state == TASK_INTERRUPTIBLE)
wake_up_process(p);
}
- if (!tmp->next) {
- printk("wait_queue is bad (eip = %p)\n",
- __builtin_return_address(0));
- printk(" q = %p\n",q);
- printk(" *q = %p\n",*q);
- printk(" tmp = %p\n",tmp);
- break;
- }
- tmp = tmp->next;
- } while (tmp != *q);
+ if (!next)
+ goto bad;
+ }
+ return;
+bad:
+ printk("wait_queue is bad (eip = %p)\n",
+ __builtin_return_address(0));
+ printk(" q = %p\n",q);
+ printk(" *q = %p\n",*q);
}
void __down(struct semaphore * sem)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov