Changeset 9c1ecf9 in mainline


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().

Location:
arch
Files:
2 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
  • arch/ia32/src/proc/scheduler.c

    r0ddeabc r9c1ecf9  
    3737#include <arch/asm.h>
    3838
    39 /** Perform ia32 specific tasks needed before the new task is run. */
     39/** Perform ia32 specific tasks needed before the new task is run.
     40 *
     41 * Interrupts are disabled.
     42 */
    4043void before_task_runs_arch(void)
    41 {
    42 }
    43 
    44 /** Perform ia32 specific tasks needed before the new thread is scheduled.
    45  *
    46  * THREAD is locked and interrupts are disabled.
    47  */
    48 void before_thread_runs_arch(void)
    4944{
    5045        size_t iomap_size;
     
    5247        descriptor_t *gdt_p;
    5348
    54         CPU->arch.tss->esp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA];
    55         CPU->arch.tss->ss0 = selector(KDATA_DES);
    56 
    57         /* Set up TLS in GS register */
    58         set_tls_desc(THREAD->arch.tls);
    59 
    6049        /*
    6150         * Switch the I/O Permission Bitmap, if necessary.
    62          *
    63          * First, copy the I/O Permission Bitmap.
    64          * This needs to be changed so that the
    65          * copying is avoided if the same task
    66          * was already running and the iomap did
    67          * not change.
    6851         */
     52
     53        /* First, copy the I/O Permission Bitmap. */
    6954        spinlock_lock(&TASK->lock);
    7055        iomap_size = TASK->arch.iomap_size;
     
    8166        gdt_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1);
    8267        gdtr_load(&cpugdtr);
     68}
     69
     70/** Perform ia32 specific tasks needed before the new thread is scheduled.
     71 *
     72 * THREAD is locked and interrupts are disabled.
     73 */
     74void before_thread_runs_arch(void)
     75{
     76        CPU->arch.tss->esp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA];
     77        CPU->arch.tss->ss0 = selector(KDATA_DES);
     78
     79        /* Set up TLS in GS register */
     80        set_tls_desc(THREAD->arch.tls);
    8381
    8482#ifdef CONFIG_DEBUG_AS_WATCHPOINT
Note: See TracChangeset for help on using the changeset viewer.