Changeset b3f8fb7 in mainline for kernel/generic/src/proc


Ignore:
Timestamp:
2007-01-28T13:25:49Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8e8c1a5
Parents:
1ba41c5
Message:

huge type system cleanup
remove cyclical type dependencies across multiple header files
many minor coding style fixes

Location:
kernel/generic/src/proc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/scheduler.c

    r1ba41c5 rb3f8fb7  
    4545#include <mm/page.h>
    4646#include <mm/as.h>
     47#include <time/timeout.h>
    4748#include <time/delay.h>
    4849#include <arch/asm.h>
     
    5354#include <config.h>
    5455#include <context.h>
     56#include <fpu_context.h>
    5557#include <func.h>
    5658#include <arch.h>
    5759#include <adt/list.h>
    5860#include <panic.h>
    59 #include <typedefs.h>
    6061#include <cpu.h>
    6162#include <print.h>
  • kernel/generic/src/proc/task.c

    r1ba41c5 rb3f8fb7  
    364364               
    365365                if (sleeping)
    366                         waitq_interrupt_sleep(thr);
     366                        thread_interrupt_sleep(thr);
    367367        }
    368368       
  • kernel/generic/src/proc/the.c

    r1ba41c5 rb3f8fb7  
    4343
    4444#include <arch.h>
    45 #include <typedefs.h>
    4645
    4746
  • kernel/generic/src/proc/thread.c

    r1ba41c5 rb3f8fb7  
    5454#include <adt/btree.h>
    5555#include <adt/list.h>
    56 #include <typedefs.h>
    5756#include <time/clock.h>
     57#include <time/timeout.h>
    5858#include <config.h>
    5959#include <arch/interrupt.h>
     
    679679}
    680680
     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 */
     688void 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
     699grab_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
     729out:
     730        spinlock_unlock(&threads_lock);
     731        interrupts_restore(ipl);
     732}
     733
    681734/** @}
    682735 */
Note: See TracChangeset for help on using the changeset viewer.