Changeset b3f8fb7 in mainline for kernel/generic/src/proc
- Timestamp:
- 2007-01-28T13:25:49Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8e8c1a5
- Parents:
- 1ba41c5
- Location:
- kernel/generic/src/proc
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/scheduler.c
r1ba41c5 rb3f8fb7 45 45 #include <mm/page.h> 46 46 #include <mm/as.h> 47 #include <time/timeout.h> 47 48 #include <time/delay.h> 48 49 #include <arch/asm.h> … … 53 54 #include <config.h> 54 55 #include <context.h> 56 #include <fpu_context.h> 55 57 #include <func.h> 56 58 #include <arch.h> 57 59 #include <adt/list.h> 58 60 #include <panic.h> 59 #include <typedefs.h>60 61 #include <cpu.h> 61 62 #include <print.h> -
kernel/generic/src/proc/task.c
r1ba41c5 rb3f8fb7 364 364 365 365 if (sleeping) 366 waitq_interrupt_sleep(thr);366 thread_interrupt_sleep(thr); 367 367 } 368 368 -
kernel/generic/src/proc/the.c
r1ba41c5 rb3f8fb7 43 43 44 44 #include <arch.h> 45 #include <typedefs.h>46 45 47 46 -
kernel/generic/src/proc/thread.c
r1ba41c5 rb3f8fb7 54 54 #include <adt/btree.h> 55 55 #include <adt/list.h> 56 #include <typedefs.h>57 56 #include <time/clock.h> 57 #include <time/timeout.h> 58 58 #include <config.h> 59 59 #include <arch/interrupt.h> … … 679 679 } 680 680 681 /** Interrupt sleeping thread. 682 * 683 * This routine attempts to interrupt a thread from its sleep in a waitqueue. 684 * If the thread is not found sleeping, no action is taken. 685 * 686 * @param t Thread to be interrupted. 687 */ 688 void thread_interrupt_sleep(thread_t *t) 689 { 690 waitq_t *wq; 691 bool do_wakeup = false; 692 ipl_t ipl; 693 694 ipl = interrupts_disable(); 695 spinlock_lock(&threads_lock); 696 if (!thread_exists(t)) 697 goto out; 698 699 grab_locks: 700 spinlock_lock(&t->lock); 701 if ((wq = t->sleep_queue)) { /* assignment */ 702 if (!(t->sleep_interruptible)) { 703 /* 704 * The sleep cannot be interrupted. 705 */ 706 spinlock_unlock(&t->lock); 707 goto out; 708 } 709 710 if (!spinlock_trylock(&wq->lock)) { 711 spinlock_unlock(&t->lock); 712 goto grab_locks; /* avoid deadlock */ 713 } 714 715 if (t->timeout_pending && timeout_unregister(&t->sleep_timeout)) 716 t->timeout_pending = false; 717 718 list_remove(&t->wq_link); 719 t->saved_context = t->sleep_interruption_context; 720 do_wakeup = true; 721 t->sleep_queue = NULL; 722 spinlock_unlock(&wq->lock); 723 } 724 spinlock_unlock(&t->lock); 725 726 if (do_wakeup) 727 thread_ready(t); 728 729 out: 730 spinlock_unlock(&threads_lock); 731 interrupts_restore(ipl); 732 } 733 681 734 /** @} 682 735 */
Note:
See TracChangeset
for help on using the changeset viewer.