Revision 6ebbf390 target-i386/helper2.c
b/target-i386/helper2.c | ||
---|---|---|
571 | 571 |
#if defined(CONFIG_USER_ONLY) |
572 | 572 |
|
573 | 573 |
int cpu_x86_handle_mmu_fault(CPUX86State *env, target_ulong addr, |
574 |
int is_write, int is_user, int is_softmmu)
|
|
574 |
int is_write, int mmu_idx, int is_softmmu)
|
|
575 | 575 |
{ |
576 | 576 |
/* user mode only emulation */ |
577 | 577 |
is_write &= 1; |
... | ... | |
598 | 598 |
2 = soft MMU activation required for this block |
599 | 599 |
*/ |
600 | 600 |
int cpu_x86_handle_mmu_fault(CPUX86State *env, target_ulong addr, |
601 |
int is_write1, int is_user, int is_softmmu)
|
|
601 |
int is_write1, int mmu_idx, int is_softmmu)
|
|
602 | 602 |
{ |
603 | 603 |
uint64_t ptep, pte; |
604 | 604 |
uint32_t pdpe_addr, pde_addr, pte_addr; |
605 |
int error_code, is_dirty, prot, page_size, ret, is_write; |
|
605 |
int error_code, is_dirty, prot, page_size, ret, is_write, is_user;
|
|
606 | 606 |
unsigned long paddr, page_offset; |
607 | 607 |
target_ulong vaddr, virt_addr; |
608 | 608 |
|
609 |
is_user = mmu_idx == MMU_USER_IDX; |
|
609 | 610 |
#if defined(DEBUG_MMU) |
610 | 611 |
printf("MMU fault: addr=" TARGET_FMT_lx " w=%d u=%d eip=" TARGET_FMT_lx "\n", |
611 | 612 |
addr, is_write1, is_user, env->eip); |
... | ... | |
862 | 863 |
paddr = (pte & TARGET_PAGE_MASK) + page_offset; |
863 | 864 |
vaddr = virt_addr + page_offset; |
864 | 865 |
|
865 |
ret = tlb_set_page_exec(env, vaddr, paddr, prot, is_user, is_softmmu);
|
|
866 |
ret = tlb_set_page_exec(env, vaddr, paddr, prot, mmu_idx, is_softmmu);
|
|
866 | 867 |
return ret; |
867 | 868 |
do_fault_protect: |
868 | 869 |
error_code = PG_ERROR_P_MASK; |
Also available in: Unified diff