Changeset 9c1ecf9 in mainline
- Timestamp:
- 2006-04-13T18:27:09Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f52e54da
- Parents:
- 0ddeabc
- Location:
- arch
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/src/proc/scheduler.c
r0ddeabc r9c1ecf9 38 38 #include <arch/pm.h> 39 39 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 */ 41 44 void 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)47 45 { 48 46 size_t iomap_size; … … 50 48 descriptor_t *gdt_p; 51 49 52 CPU->arch.tss->rsp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA];53 54 /* Syscall support - write address of thread stack pointer to55 * 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 63 50 /* 64 51 * 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 the68 * copying is avoided if the same task69 * was already running and the iomap did70 * not change.71 52 */ 53 54 /* First, copy the I/O Permission Bitmap. */ 72 55 spinlock_lock(&TASK->lock); 73 56 iomap_size = TASK->arch.iomap_size; … … 84 67 gdt_tss_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1); 85 68 gdtr_load(&cpugdtr); 69 } 70 71 /** Perform amd64 specific tasks needed before the new thread is scheduled. */ 72 void 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); 86 84 87 85 #ifdef CONFIG_DEBUG_AS_WATCHPOINT -
arch/ia32/src/proc/scheduler.c
r0ddeabc r9c1ecf9 37 37 #include <arch/asm.h> 38 38 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 */ 40 43 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 */48 void before_thread_runs_arch(void)49 44 { 50 45 size_t iomap_size; … … 52 47 descriptor_t *gdt_p; 53 48 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 60 49 /* 61 50 * 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 the65 * copying is avoided if the same task66 * was already running and the iomap did67 * not change.68 51 */ 52 53 /* First, copy the I/O Permission Bitmap. */ 69 54 spinlock_lock(&TASK->lock); 70 55 iomap_size = TASK->arch.iomap_size; … … 81 66 gdt_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE + iomap_size - 1); 82 67 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 */ 74 void 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); 83 81 84 82 #ifdef CONFIG_DEBUG_AS_WATCHPOINT
Note:
See TracChangeset
for help on using the changeset viewer.