Changeset dbe9ff0 in mainline


Ignore:
Timestamp:
2005-09-01T08:53:06Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f944715
Parents:
75d5721
Message:

Preemption work.
Define PREEMPTION_DISABLED macro.
This macro determines the level of preemptivity (0 = preemption enabled, THE→preemption_disabled = no preemption inside spinlock, 1 = preemption disabled).
Reformulate preemption code in clock.c to consider PREEMPTION_DISABLED.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/arch.h

    r75d5721 rdbe9ff0  
    4040#include <proc/task.h>
    4141
    42 #define CPU             THE->cpu
    43 #define THREAD          THE->thread
    44 #define TASK            THE->task
     42#define CPU                     THE->cpu
     43#define THREAD                  THE->thread
     44#define TASK                    THE->task
     45#define PREEMPTION_DISABLED     THE->preemption_disabled
    4546
    4647#ifndef early_mapping
  • src/time/clock.c

    r75d5721 rdbe9ff0  
    8585
    8686        if (THREAD) {
     87                __u64 ticks;
     88               
    8789                spinlock_lock(&CPU->lock);
    8890                CPU->needs_relink++;
     
    9092       
    9193                spinlock_lock(&THREAD->lock);
    92                 if (!THREAD->ticks--) {
    93                         spinlock_unlock(&THREAD->lock);
     94                if (ticks = THREAD->ticks)
     95                        THREAD->ticks--;
     96                spinlock_unlock(&THREAD->lock);
     97               
     98                if (!ticks && !PREEMPTION_DISABLED) {
    9499                        scheduler();
    95                 }
    96                 else {
    97                         spinlock_unlock(&THREAD->lock);
    98100                }
    99101        }
Note: See TracChangeset for help on using the changeset viewer.