Changeset 9c1ecf9 in mainline for arch/amd64/src/proc/scheduler.c


Ignore:
Timestamp:
2006-04-13T18:27:09Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f52e54da
Parents:
0ddeabc
Message:

Move updating I/O Permission bitmap to before_task_runs_arch().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/src/proc/scheduler.c

    r0ddeabc r9c1ecf9  
    3838#include <arch/pm.h>
    3939
    40 /** Perform amd64 specific tasks needed before the new task is run. */
     40/** Perform amd64 specific tasks needed before the new task is run.
     41 *
     42 * Interrupts are disabled.
     43 */
    4144void before_task_runs_arch(void)
    42 {
    43 }
    44 
    45 /** Perform amd64 specific tasks needed before the new thread is scheduled. */
    46 void before_thread_runs_arch(void)
    4745{
    4846        size_t iomap_size;
     
    5048        descriptor_t *gdt_p;
    5149
    52         CPU->arch.tss->rsp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA];
    53 
    54         /* Syscall support - write address of thread stack pointer to
    55          * hidden part of gs */
    56         swapgs();
    57         write_msr(AMD_MSR_GS, (__u64)&THREAD->kstack);
    58         swapgs();
    59 
    60         /* TLS support - set FS to thread local storage */
    61         write_msr(AMD_MSR_FS, THREAD->arch.tls);
    62 
    6350        /*
    6451         * Switch the I/O Permission Bitmap, if necessary.
    65          *
    66          * First, copy the I/O Permission Bitmap.
    67          * This needs to be changed so that the
    68          * copying is avoided if the same task
    69          * was already running and the iomap did
    70          * not change.
    7152         */
     53         
     54        /* First, copy the I/O Permission Bitmap. */
    7255        spinlock_lock(&TASK->lock);
    7356        iomap_size = TASK->arch.iomap_size;
     
    8467        gdt_tss_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1);
    8568        gdtr_load(&cpugdtr);
     69}
     70
     71/** Perform amd64 specific tasks needed before the new thread is scheduled. */
     72void before_thread_runs_arch(void)
     73{
     74        CPU->arch.tss->rsp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA];
     75
     76        /* Syscall support - write address of thread stack pointer to
     77         * hidden part of gs */
     78        swapgs();
     79        write_msr(AMD_MSR_GS, (__u64)&THREAD->kstack);
     80        swapgs();
     81
     82        /* TLS support - set FS to thread local storage */
     83        write_msr(AMD_MSR_FS, THREAD->arch.tls);
    8684
    8785#ifdef CONFIG_DEBUG_AS_WATCHPOINT
Note: See TracChangeset for help on using the changeset viewer.