Make flatview_translate() take a MemTxAttrs argument
As part of plumbing MemTxAttrs down to the IOMMU translate method, add MemTxAttrs as an argument to flatview_translate(); all its callers now have attrs available. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20180521140402.23318-11-peter.maydell@linaro.org
This commit is contained in:
		
							parent
							
								
									eace72b7a6
								
							
						
					
					
						commit
						efa99a2ff8
					
				
							
								
								
									
										17
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								exec.c
									
									
									
									
									
								
							| @ -618,7 +618,8 @@ iotlb_fail: | ||||
| 
 | ||||
| /* Called from RCU critical section */ | ||||
| MemoryRegion *flatview_translate(FlatView *fv, hwaddr addr, hwaddr *xlat, | ||||
|                                  hwaddr *plen, bool is_write) | ||||
|                                  hwaddr *plen, bool is_write, | ||||
|                                  MemTxAttrs attrs) | ||||
| { | ||||
|     MemoryRegion *mr; | ||||
|     MemoryRegionSection section; | ||||
| @ -3152,7 +3153,7 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr, | ||||
|         } | ||||
| 
 | ||||
|         l = len; | ||||
|         mr = flatview_translate(fv, addr, &addr1, &l, true); | ||||
|         mr = flatview_translate(fv, addr, &addr1, &l, true, attrs); | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
| @ -3168,7 +3169,7 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs, | ||||
|     MemTxResult result = MEMTX_OK; | ||||
| 
 | ||||
|     l = len; | ||||
|     mr = flatview_translate(fv, addr, &addr1, &l, true); | ||||
|     mr = flatview_translate(fv, addr, &addr1, &l, true, attrs); | ||||
|     result = flatview_write_continue(fv, addr, attrs, buf, len, | ||||
|                                      addr1, l, mr); | ||||
| 
 | ||||
| @ -3239,7 +3240,7 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr, | ||||
|         } | ||||
| 
 | ||||
|         l = len; | ||||
|         mr = flatview_translate(fv, addr, &addr1, &l, false); | ||||
|         mr = flatview_translate(fv, addr, &addr1, &l, false, attrs); | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
| @ -3254,7 +3255,7 @@ static MemTxResult flatview_read(FlatView *fv, hwaddr addr, | ||||
|     MemoryRegion *mr; | ||||
| 
 | ||||
|     l = len; | ||||
|     mr = flatview_translate(fv, addr, &addr1, &l, false); | ||||
|     mr = flatview_translate(fv, addr, &addr1, &l, false, attrs); | ||||
|     return flatview_read_continue(fv, addr, attrs, buf, len, | ||||
|                                   addr1, l, mr); | ||||
| } | ||||
| @ -3468,7 +3469,7 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len, | ||||
| 
 | ||||
|     while (len > 0) { | ||||
|         l = len; | ||||
|         mr = flatview_translate(fv, addr, &xlat, &l, is_write); | ||||
|         mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs); | ||||
|         if (!memory_access_is_direct(mr, is_write)) { | ||||
|             l = memory_access_size(mr, l, addr); | ||||
|             if (!memory_region_access_valid(mr, xlat, l, is_write, attrs)) { | ||||
| @ -3516,7 +3517,7 @@ flatview_extend_translation(FlatView *fv, hwaddr addr, | ||||
| 
 | ||||
|         len = target_len; | ||||
|         this_mr = flatview_translate(fv, addr, &xlat, | ||||
|                                                    &len, is_write); | ||||
|                                      &len, is_write, attrs); | ||||
|         if (this_mr != mr || xlat != base + done) { | ||||
|             return done; | ||||
|         } | ||||
| @ -3549,7 +3550,7 @@ void *address_space_map(AddressSpace *as, | ||||
|     l = len; | ||||
|     rcu_read_lock(); | ||||
|     fv = address_space_to_flatview(as); | ||||
|     mr = flatview_translate(fv, addr, &xlat, &l, is_write); | ||||
|     mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs); | ||||
| 
 | ||||
|     if (!memory_access_is_direct(mr, is_write)) { | ||||
|         if (atomic_xchg(&bounce.in_use, true)) { | ||||
|  | ||||
| @ -1913,7 +1913,8 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr, | ||||
|  */ | ||||
| MemoryRegion *flatview_translate(FlatView *fv, | ||||
|                                  hwaddr addr, hwaddr *xlat, | ||||
|                                  hwaddr *len, bool is_write); | ||||
|                                  hwaddr *len, bool is_write, | ||||
|                                  MemTxAttrs attrs); | ||||
| 
 | ||||
| static inline MemoryRegion *address_space_translate(AddressSpace *as, | ||||
|                                                     hwaddr addr, hwaddr *xlat, | ||||
| @ -1921,7 +1922,7 @@ static inline MemoryRegion *address_space_translate(AddressSpace *as, | ||||
|                                                     MemTxAttrs attrs) | ||||
| { | ||||
|     return flatview_translate(address_space_to_flatview(as), | ||||
|                               addr, xlat, len, is_write); | ||||
|                               addr, xlat, len, is_write, attrs); | ||||
| } | ||||
| 
 | ||||
| /* address_space_access_valid: check for validity of accessing an address
 | ||||
| @ -2030,7 +2031,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr, | ||||
|             rcu_read_lock(); | ||||
|             fv = address_space_to_flatview(as); | ||||
|             l = len; | ||||
|             mr = flatview_translate(fv, addr, &addr1, &l, false); | ||||
|             mr = flatview_translate(fv, addr, &addr1, &l, false, attrs); | ||||
|             if (len == l && memory_access_is_direct(mr, false)) { | ||||
|                 ptr = qemu_map_ram_ptr(mr->ram_block, addr1); | ||||
|                 memcpy(buf, ptr, len); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Maydell
						Peter Maydell