Changeset 2382d09 in mainline for arch/ia32/src/proc/scheduler.c


Ignore:
Timestamp:
2006-04-29T15:01:41Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
407862e
Parents:
69a5600
Message:

Improve SYS_IOSPACE_ENABLE support.
The general protection fault handler now contains
code to service early I/O Permission bitmap faults.

File:
1 edited

Legend:

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

    r69a5600 r2382d09  
    3636#include <arch/pm.h>
    3737#include <arch/asm.h>
    38 #include <adt/bitmap.h>
    39 #include <print.h>
     38#include <arch/ddi/ddi.h>
    4039
    4140/** Perform ia32 specific tasks needed before the new task is run.
     
    4544void before_task_runs_arch(void)
    4645{
    47         count_t bits;
    48         ptr_16_32_t cpugdtr;
    49         descriptor_t *gdt_p;
    50 
    51         /*
    52          * Switch the I/O Permission Bitmap, if necessary.
    53          */
    54 
    55         /* First, copy the I/O Permission Bitmap. */
    56         spinlock_lock(&TASK->lock);
    57         if ((bits = TASK->arch.iomap.bits)) {
    58                 bitmap_t iomap;
    59        
    60                 ASSERT(TASK->arch.iomap.map);
    61                 bitmap_initialize(&iomap, CPU->arch.tss->iomap, TSS_IOMAP_SIZE * 8);
    62                 bitmap_copy(&iomap, &TASK->arch.iomap, TASK->arch.iomap.bits);
    63                 /*
    64                  * It is safe to set the trailing eight bits because of the extra
    65                  * convenience byte in TSS_IOMAP_SIZE.
    66                  */
    67                 bitmap_set_range(&iomap, TASK->arch.iomap.bits, 8);
    68         }
    69         spinlock_unlock(&TASK->lock);
    70 
    71         /* Second, adjust TSS segment limit. */
    72         gdtr_store(&cpugdtr);
    73         gdt_p = (descriptor_t *) cpugdtr.base;
    74         gdt_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + BITS2BYTES(bits) - 1);
    75         gdtr_load(&cpugdtr);
    76 
    77         /*
    78          * Before we load new TSS limit, the current TSS descriptor
    79          * type must be changed to describe inactive TSS.
    80          */
    81         gdt_p[TSS_DES].access = AR_PRESENT | AR_TSS | DPL_KERNEL;
    82         tr_load(selector(TSS_DES));
     46        io_perm_bitmap_install();
    8347}
    8448
Note: See TracChangeset for help on using the changeset viewer.