/SPARTAN/trunk/include/arch.h |
---|
39,9 → 39,10 |
#include <proc/thread.h> |
#include <proc/task.h> |
#define CPU THE->cpu |
#define THREAD THE->thread |
#define TASK THE->task |
#define CPU THE->cpu |
#define THREAD THE->thread |
#define TASK THE->task |
#define PREEMPTION_DISABLED THE->preemption_disabled |
#ifndef early_mapping |
#define early_mapping(stack, size) |
/SPARTAN/trunk/src/time/clock.c |
---|
84,18 → 84,20 |
*/ |
if (THREAD) { |
__u64 ticks; |
spinlock_lock(&CPU->lock); |
CPU->needs_relink++; |
spinlock_unlock(&CPU->lock); |
spinlock_lock(&THREAD->lock); |
if (!THREAD->ticks--) { |
spinlock_unlock(&THREAD->lock); |
if (ticks = THREAD->ticks) |
THREAD->ticks--; |
spinlock_unlock(&THREAD->lock); |
if (!ticks && !PREEMPTION_DISABLED) { |
scheduler(); |
} |
else { |
spinlock_unlock(&THREAD->lock); |
} |
} |
} |