Changeset 03427d0 in mainline
- Timestamp:
- 2006-03-02T17:57:45Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9459255
- Parents:
- 9ad03fe
- Location:
- arch/ia64
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/include/mm/as.h
r9ad03fe r03427d0 41 41 #define UDATA_ADDRESS_ARCH 0x0000000001001000 42 42 43 #define as_install_arch(as)44 45 43 extern void as_arch_init(void); 46 44 -
arch/ia64/src/mm/as.c
r9ad03fe r03427d0 28 28 29 29 #include <arch/mm/as.h> 30 #include <arch/mm/asid.h> 31 #include <arch/mm/page.h> 30 32 #include <genarch/mm/as_ht.h> 31 33 #include <genarch/mm/asid_fifo.h> 34 #include <mm/asid.h> 35 #include <arch.h> 36 #include <arch/barrier.h> 37 #include <synch/spinlock.h> 32 38 33 39 /** Architecture dependent address space init. */ … … 37 43 asid_fifo_init(); 38 44 } 45 46 /** Prepare registers for switching to another address space. 47 * 48 * @param as Address space. 49 */ 50 void as_install_arch(as_t *as) 51 { 52 ipl_t ipl; 53 region_register rr; 54 int i; 55 56 ipl = interrupts_disable(); 57 spinlock_lock(&as->lock); 58 59 ASSERT(as->asid != ASID_INVALID); 60 61 /* 62 * Load respective ASID (7 consecutive RIDs) to 63 * region registers. 64 */ 65 for (i = 0; i < REGION_REGISTERS; i++) { 66 if (i == VRN_KERNEL) 67 continue; 68 69 rr.word = rr_read(i); 70 rr.map.ve = false; /* disable VHPT walker */ 71 rr.map.rid = ASID2RID(as->asid, i); 72 rr.map.ps = PAGE_WIDTH; 73 rr_write(i, rr.word); 74 } 75 srlz_d(); 76 srlz_i(); 77 78 spinlock_unlock(&as->lock); 79 interrupts_restore(ipl); 80 } -
arch/ia64/src/proc/scheduler.c
r9ad03fe r03427d0 34 34 #include <align.h> 35 35 36 /** Ensure that thread's kernel stack is locked in TLB. */36 /** Record kernel stack address in ar.k7 and make sure it is mapped in DTR. */ 37 37 void before_thread_runs_arch(void) 38 38 { … … 43 43 if ((__address) THREAD->kstack < base || (__address) THREAD->kstack > base + (1<<KERNEL_PAGE_WIDTH)) { 44 44 /* 45 * Kernel stack of this thread is not locked in DTLB. 46 * First, make sure it is not mapped already. 47 * If not, fill respective tranlsation register. 45 * Kernel stack of this thread is not mapped by DTR[TR_KERNEL]. 46 * Use DTR[TR_KSTACK] to map it. 48 47 */ 49 48 dtlb_kernel_mapping_insert((__address) THREAD->kstack, KA2PA(THREAD->kstack), true, DTR_KSTACK); 50 49 } 50 51 /* 52 * Record address of kernel stack to ar.k7 53 * where it will be found after switch 54 * from userspace. 55 */ 56 __asm__ volatile ("mov ar.k7 = %0\n" : : "r" (THREAD->kstack)); 51 57 } 52 58
Note:
See TracChangeset
for help on using the changeset viewer.