mirror of https://github.com/xemu-project/xemu.git
Make address_space_access_valid() take a MemTxAttrs argument
As part of plumbing MemTxAttrs down to the IOMMU translate method, add MemTxAttrs as an argument to address_space_access_valid(). Its callers either have an attrs value to hand, or don't care and can use MEMTXATTRS_UNSPECIFIED. 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-6-peter.maydell@linaro.org
This commit is contained in:
parent
f26404fbee
commit
fddffa4268
3
exec.c
3
exec.c
|
@ -3480,7 +3480,8 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool address_space_access_valid(AddressSpace *as, hwaddr addr,
|
bool address_space_access_valid(AddressSpace *as, hwaddr addr,
|
||||||
int len, bool is_write)
|
int len, bool is_write,
|
||||||
|
MemTxAttrs attrs)
|
||||||
{
|
{
|
||||||
FlatView *fv;
|
FlatView *fv;
|
||||||
bool result;
|
bool result;
|
||||||
|
|
|
@ -1937,8 +1937,10 @@ static inline MemoryRegion *address_space_translate(AddressSpace *as,
|
||||||
* @addr: address within that address space
|
* @addr: address within that address space
|
||||||
* @len: length of the area to be checked
|
* @len: length of the area to be checked
|
||||||
* @is_write: indicates the transfer direction
|
* @is_write: indicates the transfer direction
|
||||||
|
* @attrs: memory attributes
|
||||||
*/
|
*/
|
||||||
bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write);
|
bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len,
|
||||||
|
bool is_write, MemTxAttrs attrs);
|
||||||
|
|
||||||
/* address_space_map: map a physical memory region into a host virtual address
|
/* address_space_map: map a physical memory region into a host virtual address
|
||||||
*
|
*
|
||||||
|
|
|
@ -77,7 +77,8 @@ static inline bool dma_memory_valid(AddressSpace *as,
|
||||||
DMADirection dir)
|
DMADirection dir)
|
||||||
{
|
{
|
||||||
return address_space_access_valid(as, addr, len,
|
return address_space_access_valid(as, addr, len,
|
||||||
dir == DMA_DIRECTION_FROM_DEVICE);
|
dir == DMA_DIRECTION_FROM_DEVICE,
|
||||||
|
MEMTXATTRS_UNSPECIFIED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int dma_memory_rw_relaxed(AddressSpace *as, dma_addr_t addr,
|
static inline int dma_memory_rw_relaxed(AddressSpace *as, dma_addr_t addr,
|
||||||
|
|
|
@ -87,7 +87,8 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!address_space_access_valid(&address_space_memory, addr,
|
if (!address_space_access_valid(&address_space_memory, addr,
|
||||||
sizeof(IplParameterBlock), false)) {
|
sizeof(IplParameterBlock), false,
|
||||||
|
MEMTXATTRS_UNSPECIFIED)) {
|
||||||
s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
|
s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -116,7 +117,8 @@ out:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!address_space_access_valid(&address_space_memory, addr,
|
if (!address_space_access_valid(&address_space_memory, addr,
|
||||||
sizeof(IplParameterBlock), true)) {
|
sizeof(IplParameterBlock), true,
|
||||||
|
MEMTXATTRS_UNSPECIFIED)) {
|
||||||
s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
|
s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,8 @@ int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr orig_vaddr, int size,
|
||||||
|
|
||||||
/* check out of RAM access */
|
/* check out of RAM access */
|
||||||
if (!address_space_access_valid(&address_space_memory, raddr,
|
if (!address_space_access_valid(&address_space_memory, raddr,
|
||||||
TARGET_PAGE_SIZE, rw)) {
|
TARGET_PAGE_SIZE, rw,
|
||||||
|
MEMTXATTRS_UNSPECIFIED)) {
|
||||||
DPRINTF("%s: raddr %" PRIx64 " > ram_size %" PRIx64 "\n", __func__,
|
DPRINTF("%s: raddr %" PRIx64 " > ram_size %" PRIx64 "\n", __func__,
|
||||||
(uint64_t)raddr, (uint64_t)ram_size);
|
(uint64_t)raddr, (uint64_t)ram_size);
|
||||||
trigger_pgm_exception(env, PGM_ADDRESSING, ILEN_AUTO);
|
trigger_pgm_exception(env, PGM_ADDRESSING, ILEN_AUTO);
|
||||||
|
|
|
@ -461,7 +461,8 @@ static int translate_pages(S390CPU *cpu, vaddr addr, int nr_pages,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (!address_space_access_valid(&address_space_memory, pages[i],
|
if (!address_space_access_valid(&address_space_memory, pages[i],
|
||||||
TARGET_PAGE_SIZE, is_write)) {
|
TARGET_PAGE_SIZE, is_write,
|
||||||
|
MEMTXATTRS_UNSPECIFIED)) {
|
||||||
trigger_access_exception(env, PGM_ADDRESSING, ILEN_AUTO, 0);
|
trigger_access_exception(env, PGM_ADDRESSING, ILEN_AUTO, 0);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,7 +280,8 @@ static void sigp_set_prefix(CPUState *cs, run_on_cpu_data arg)
|
||||||
cpu_synchronize_state(cs);
|
cpu_synchronize_state(cs);
|
||||||
|
|
||||||
if (!address_space_access_valid(&address_space_memory, addr,
|
if (!address_space_access_valid(&address_space_memory, addr,
|
||||||
sizeof(struct LowCore), false)) {
|
sizeof(struct LowCore), false,
|
||||||
|
MEMTXATTRS_UNSPECIFIED)) {
|
||||||
set_sigp_status(si, SIGP_STAT_INVALID_PARAMETER);
|
set_sigp_status(si, SIGP_STAT_INVALID_PARAMETER);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue