Changeset 2382d09 in mainline for arch/amd64/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/amd64/src/proc/scheduler.c

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