//kernel/trunk/arch/ppc32/src/exception.S |
---|
205,7 → 205,7 |
.org 0x900 |
.global exc_decrementer |
exc_decrementer: |
CONTEXT_STORE |
CONTEXT_STORE |
lis r12, exc_dispatch@ha |
addi r12, r12, exc_dispatch@l |
//kernel/trunk/arch/ppc32/src/asm.S |
---|
134,6 → 134,11 |
iret_syscall: |
# reset decrementer |
li r31, 1000 |
mtdec r31 |
# disable interrupts |
mfmsr r31 |
//kernel/trunk/arch/ppc32/src/proc/scheduler.c |
---|
41,6 → 41,7 |
void before_thread_runs_arch(void) |
{ |
pht_init(); |
tlb_invalidate_all(); |
asm volatile ( |
"mtsprg0 %0\n" |
: |
//kernel/trunk/arch/ppc32/src/mm/tlb.c |
---|
36,17 → 36,41 |
*/ |
void tlb_arch_init(void) |
{ |
tlb_invalidate_all(); |
} |
void tlb_invalidate_all(void) |
{ |
asm volatile ( |
"tlbia\n" |
"tlbsync\n" |
); |
} |
void tlb_invalidate_all(void) |
/** Invalidate all entries in TLB that belong to specified address space. |
* |
* @param asid This parameter is ignored as the architecture doesn't support it. |
*/ |
void tlb_invalidate_asid(asid_t asid) |
{ |
tlb_invalidate_all(); |
} |
/** Invalidate TLB entries for specified page range belonging to specified address space. |
* |
* @param asid This parameter is ignored as the architecture doesn't support it. |
* @param page Address of the first page whose entry is to be invalidated. |
* @param cnt Number of entries to invalidate. |
*/ |
void tlb_invalidate_pages(asid_t asid, __address page, count_t cnt) |
{ |
tlb_invalidate_all(); |
} |
/** Print contents of Page Hash Table. */ |
void tlb_print(void) |
{ |
//kernel/trunk/arch/ppc32/src/mm/page.c |
---|
181,7 → 181,6 |
*/ |
void pht_refill(bool data, istate_t *istate) |
{ |
asid_t asid; |
__address badvaddr; |
pte_t *pte; |
int pfcr; |
204,10 → 203,6 |
} else |
badvaddr = istate->pc; |
spinlock_lock(&as->lock); |
asid = as->asid; |
spinlock_unlock(&as->lock); |
page_table_lock(as, lock); |
pte = find_mapping_and_check(as, lock, badvaddr, istate, &pfcr); |
//kernel/trunk/arch/ppc32/src/dummy.s |
---|
29,17 → 29,8 |
.text |
.global asm_delay_loop |
.global userspace |
.global sys_tls_set |
.global tlb_invalidate_asid |
.global tlb_invalidate_pages |
tlb_invalidate_asid: |
b tlb_invalidate_asid |
tlb_invalidate_pages: |
b tlb_invalidate_pages |
sys_tls_set: |
b sys_tls_set |