cputlb: fix the way get_page_addr_code fills the tlb
get_page_addr_code(..) does a cpu_ldub_code to fill the tlb: This can lead to some side effects if a device is mapped at this address. So this patch replaces the cpu_memory_ld by a tlb_fill. Reviewed-by: Richard Henderson <rth@twiddle.net> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
This commit is contained in:
		
							parent
							
								
									f2553f0489
								
							
						
					
					
						commit
						71b9a45330
					
				@ -849,8 +849,10 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr)
 | 
			
		||||
    index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
 | 
			
		||||
    mmu_idx = cpu_mmu_index(env, true);
 | 
			
		||||
    if (unlikely(env->tlb_table[mmu_idx][index].addr_code !=
 | 
			
		||||
                 (addr & TARGET_PAGE_MASK))) {
 | 
			
		||||
        cpu_ldub_code(env, addr);
 | 
			
		||||
                 (addr & (TARGET_PAGE_MASK | TLB_INVALID_MASK)))) {
 | 
			
		||||
        if (!VICTIM_TLB_HIT(addr_read, addr)) {
 | 
			
		||||
            tlb_fill(ENV_GET_CPU(env), addr, MMU_INST_FETCH, mmu_idx, 0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    iotlbentry = &env->iotlb[mmu_idx][index];
 | 
			
		||||
    pd = iotlbentry->addr & ~TARGET_PAGE_MASK;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user