asmlinkage void do_tlbs(struct pt_regs *regs) { // printk("do_tlbs status %p, cause %p, epc %p,bd %p.\n", // regs->cp0_status, // regs->cp0_cause, // regs->cp0_epc, // read_c0_badvaddr()); do_page_fault(regs, 1, read_c0_badvaddr()); }
static void print_registers(struct pt_regs *regs) { printk("Panic status %p, cause %p, epc %p,bd %p, entry hi %x\n", regs->cp0_status, regs->cp0_cause, regs->cp0_epc, read_c0_badvaddr(), read_c0_entryhi()); }
int do_vcpu_tlbmiss(arch_regs_t *uregs) { u32 badvaddr = read_c0_badvaddr(); struct vmm_vcpu *current_vcpu; int counter = 0; mips32_tlb_entry_t *c_tlbe; current_vcpu = vmm_scheduler_current_vcpu(); for (counter = 0; counter < 2 * CPU_TLB_COUNT; counter++) { c_tlbe = &mips_sregs(current_vcpu)->shadow_tlb_entries[counter]; if (TBE_PGMSKD_VPN2(c_tlbe) == (badvaddr & ~c_tlbe->page_mask)) { mips_fill_tlb_entry(c_tlbe, -1); return 0; } else { vmm_panic("No TLB entry in shadow." " Send fault to guest.\n"); } } return VMM_EFAIL; }
asmlinkage void do_tlbl(struct pt_regs *regs) { do_page_fault(regs, 0, read_c0_badvaddr()); }