target-ppc: Move ppc tlb_fill implementation into mmu_helper.c
For softmmu builds the interface from the generic code to the target specific MMU implementation is through the tlb_fill() function. For ppc this is currently in mem_helper.c, whereas it would make more sense in mmu_helper.c. This patch moves it, which also allows cpu_ppc_handle_mmu_fault() to become a local function in mmu_helper.c Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
		
							parent
							
								
									cc8eae8ac7
								
							
						
					
					
						commit
						eb20c1c6da
					
				| @ -1090,8 +1090,6 @@ int cpu_ppc_exec (CPUPPCState *s); | ||||
|    is returned if the signal was handled by the virtual CPU.  */ | ||||
| int cpu_ppc_signal_handler (int host_signum, void *pinfo, | ||||
|                             void *puc); | ||||
| int cpu_ppc_handle_mmu_fault (CPUPPCState *env, target_ulong address, int rw, | ||||
|                               int mmu_idx); | ||||
| void ppc_hw_interrupt (CPUPPCState *env); | ||||
| #if defined(CONFIG_USER_ONLY) | ||||
| int cpu_handle_mmu_fault(CPUPPCState *env, target_ulong address, int rw, | ||||
|  | ||||
| @ -252,41 +252,3 @@ STVE(stvewx, cpu_stl_data, bswap32, u32) | ||||
| 
 | ||||
| #undef HI_IDX | ||||
| #undef LO_IDX | ||||
| 
 | ||||
| /*****************************************************************************/ | ||||
| /* Softmmu support */ | ||||
| #if !defined(CONFIG_USER_ONLY) | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 1 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 2 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 3 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| /* try to fill the TLB and return an exception if error. If retaddr is
 | ||||
|    NULL, it means that the function was called in C code (i.e. not | ||||
|    from generated code or from helper.c) */ | ||||
| /* XXX: fix it to restore all registers */ | ||||
| void tlb_fill(CPUPPCState *env, target_ulong addr, int is_write, int mmu_idx, | ||||
|               uintptr_t retaddr) | ||||
| { | ||||
|     int ret; | ||||
| 
 | ||||
|     ret = cpu_ppc_handle_mmu_fault(env, addr, is_write, mmu_idx); | ||||
|     if (unlikely(ret != 0)) { | ||||
|         if (likely(retaddr)) { | ||||
|             /* now we have a real cpu fault */ | ||||
|             cpu_restore_state(env, retaddr); | ||||
|         } | ||||
|         helper_raise_exception_err(env, env->exception_index, env->error_code); | ||||
|     } | ||||
| } | ||||
| #endif /* !CONFIG_USER_ONLY */ | ||||
|  | ||||
| @ -1384,8 +1384,8 @@ static void booke206_update_mas_tlb_miss(CPUPPCState *env, target_ulong address, | ||||
| } | ||||
| 
 | ||||
| /* Perform address translation */ | ||||
| int cpu_ppc_handle_mmu_fault(CPUPPCState *env, target_ulong address, int rw, | ||||
|                              int mmu_idx) | ||||
| static int cpu_ppc_handle_mmu_fault(CPUPPCState *env, target_ulong address, | ||||
|                                     int rw, int mmu_idx) | ||||
| { | ||||
|     mmu_ctx_t ctx; | ||||
|     int access_type; | ||||
| @ -2777,3 +2777,39 @@ void helper_booke206_tlbflush(CPUPPCState *env, uint32_t type) | ||||
| 
 | ||||
|     booke206_flush_tlb(env, flags, 1); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*****************************************************************************/ | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 1 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 2 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| #define SHIFT 3 | ||||
| #include "exec/softmmu_template.h" | ||||
| 
 | ||||
| /* try to fill the TLB and return an exception if error. If retaddr is
 | ||||
|    NULL, it means that the function was called in C code (i.e. not | ||||
|    from generated code or from helper.c) */ | ||||
| /* XXX: fix it to restore all registers */ | ||||
| void tlb_fill(CPUPPCState *env, target_ulong addr, int is_write, int mmu_idx, | ||||
|               uintptr_t retaddr) | ||||
| { | ||||
|     int ret; | ||||
| 
 | ||||
|     ret = cpu_ppc_handle_mmu_fault(env, addr, is_write, mmu_idx); | ||||
|     if (unlikely(ret != 0)) { | ||||
|         if (likely(retaddr)) { | ||||
|             /* now we have a real cpu fault */ | ||||
|             cpu_restore_state(env, retaddr); | ||||
|         } | ||||
|         helper_raise_exception_err(env, env->exception_index, env->error_code); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 David Gibson
						David Gibson