Changeset 39cea6a in mainline for arch/ia32/src/proc/scheduler.c
- Timestamp:
- 2006-04-13T17:38:03Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e185136
- Parents:
- 897ad60
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/proc/scheduler.c
r897ad60 r39cea6a 29 29 #include <proc/scheduler.h> 30 30 #include <cpu.h> 31 #include <proc/task.h> 31 32 #include <proc/thread.h> 32 33 #include <arch.h> … … 34 35 #include <arch/debugger.h> 35 36 #include <arch/pm.h> 37 #include <arch/asm.h> 36 38 39 /** Perform ia32 specific tasks needed before the new task is run. */ 40 void 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 */ 37 48 void before_thread_runs_arch(void) 38 49 { 50 size_t iomap_size; 51 ptr_16_32_t cpugdtr; 52 descriptor_t *gdt_p; 53 39 54 CPU->arch.tss->esp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA]; 40 55 CPU->arch.tss->ss0 = selector(KDATA_DES); … … 42 57 /* Set up TLS in GS register */ 43 58 set_tls_desc(THREAD->arch.tls); 59 60 /* 61 * 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. 68 */ 69 spinlock_lock(&TASK->lock); 70 iomap_size = TASK->arch.iomap_size; 71 if (iomap_size) { 72 ASSERT(TASK->arch.iomap); 73 memcpy(CPU->arch.tss->iomap, TASK->arch.iomap, iomap_size); 74 CPU->arch.tss->iomap[iomap_size] = 0xff; /* terminating byte */ 75 } 76 spinlock_unlock(&TASK->lock); 77 78 /* Second, adjust TSS segment limit. */ 79 gdtr_store(&cpugdtr); 80 gdt_p = (descriptor_t *) cpugdtr.base; 81 gdt_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1); 82 gdtr_load(&cpugdtr); 44 83 45 84 #ifdef CONFIG_DEBUG_AS_WATCHPOINT
Note:
See TracChangeset
for help on using the changeset viewer.