Changeset 39cea6a in mainline for arch/amd64/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/amd64/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> … … 35 36 #include <arch/debugger.h> 36 37 #include <print.h> 38 #include <arch/pm.h> 37 39 40 /** Perform amd64 specific tasks needed before the new task is run. */ 41 void before_task_runs_arch(void) 42 { 43 } 44 45 /** Perform amd64 specific tasks needed before the new thread is scheduled. */ 38 46 void before_thread_runs_arch(void) 39 47 { 48 size_t iomap_size; 49 ptr_16_64_t cpugdtr; 50 descriptor_t *gdt_p; 51 40 52 CPU->arch.tss->rsp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA]; 41 53 … … 43 55 * hidden part of gs */ 44 56 swapgs(); 45 write_msr(AMD_MSR_GS, 46 (__u64)&THREAD->kstack); 57 write_msr(AMD_MSR_GS, (__u64)&THREAD->kstack); 47 58 swapgs(); 48 59 49 60 /* TLS support - set FS to thread local storage */ 50 61 write_msr(AMD_MSR_FS, THREAD->arch.tls); 62 63 /* 64 * 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. 71 */ 72 spinlock_lock(&TASK->lock); 73 iomap_size = TASK->arch.iomap_size; 74 if (iomap_size) { 75 ASSERT(TASK->arch.iomap); 76 memcpy(CPU->arch.tss->iomap, TASK->arch.iomap, iomap_size); 77 CPU->arch.tss->iomap[iomap_size] = 0xff; /* terminating byte */ 78 } 79 spinlock_unlock(&TASK->lock); 80 81 /* Second, adjust TSS segment limit. */ 82 gdtr_store(&cpugdtr); 83 gdt_p = (descriptor_t *) cpugdtr.base; 84 gdt_tss_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1); 85 gdtr_load(&cpugdtr); 51 86 52 87 #ifdef CONFIG_DEBUG_AS_WATCHPOINT
Note:
See TracChangeset
for help on using the changeset viewer.